__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
�

��gRe���SrSSKrSSKrSSKJr SSKJr SSKJr SSKJr SSKJr SSK	7 Sq
Sr"S	S
\5r
SrSrS
rSrS(SjrS(SjrS)SjrS(SjrSrSrSrSrSr"SS\5r"SS\5r"SS\5r"SS\5r"S S!\5r "S"S#\5r!"S$S%\5r"S&r#S'r$g)*a
Functions for producing signatures and deltas of directories

Note that the main processes of this module have two parts.  In the
first, the signature or delta is constructed of a ROPath iterator.  In
the second, the ROPath iterator is put into tar block form.
�N)�cli_util)�progress)�
statistics)�dup_tarfile)�util)�*c��\rSrSrSrg)�DiffDirException�-�N)�__name__�
__module__�__qualname__�__firstlineno__�__static_attributes__r��3/usr/lib/python3/dist-packages/duplicity/diffdir.pyr
r
-s��rr
c��[U5$)z!
Alias for SigTarBlockIter below
)�SigTarBlockIter��	path_iters r�DirSigr1s���9�%�%rc�B�[U[R"S55$)a
Return a tarblock full backup of items in path_iter

A full backup is just a diff starting from nothing (it may be less
elegant than using a standard tar file, but we can be sure that it
will be easy to split up the tar and make the volumes the same
sizes).
�)�DirDelta�io�StringIOrs r�DirFullr8s���I�r�{�{�2��/�/rc�D�[U[R"S5U5$)zF
Return full backup like above, but also write signature to sig_outfp
r)�DirDelta_WriteSigrr)r�	sig_outfps  r�DirFull_WriteSigr"Ds���Y����B���C�Crc��[R"5q[U[5(a&[UVs/sHn[
U5PM sn5nO[
U5n[X5n[R(d8[R(a.[RR5(d[U5$[U5$s snf)z�
Produce tarblock diff given dirsig_fileobj_list and pathiter

dirsig_fileobj_list should either be a tar fileobj or a list of
those, sorted so the most recent is last.
)r�StatsDeltaProcess�stats�
isinstance�list�combine_path_iters�sigtar2path_iter�get_delta_iter�config�dry_runr�tracker�has_collected_evidence�DummyBlockIter�DeltaTarBlockIter)r�dirsig_fileobj_list�x�sig_iter�
delta_iters     rrrKs���
�(�(�*�E��%�t�,�,�%�DW�&X�DW�q�'7��':�DW�&X�Y��#�$7�8���	�4�J�
�~�~�&�/�/�(�2B�2B�2Y�2Y�2[�2[��j�)�)� ��,�,��'Ys�C
c��U(aUR5nOU(aUR5nOS5e[R[S5[R
"U5[RU54-5 g)z9
Called by get_delta_iter, report error in getting delta
z)Both new and sig are None for some reason�Error %s getting delta for %sN)�get_relative_path�log�Warn�_r�uexc�os�fsdecode)�exc�new_path�sig_path�sig_tar�index_strings     r�delta_iter_error_handlerrC_sa����1�1�3��	��1�1�3��=�=�=�q��H�H�Q�.�
/�4�9�9�S�>�2�;�;�|�C\�2]�
]�^�rc�^^^�U(deT(aUR5mURmUR5n[R	[S5X4-5 UUU4SjnUR
5(a�U(a�UR
5(a�URS:XaxSUlURS5n[URS55nT(a[XdUR55nUR[RXV55 O�SUlT(a,S[R!SR#T553TlUR
5(dKT(aTR'T5 [((a'[(=R*UR5-
slOL[URS55nT(a[XdUR55nURU5 UR-U5 UR.R0UR.lU$)	z^
Return new delta_path which, when read, writes sig to sig_fileobj,
if sigTarFile is not None
zGetting delta of %s and %sc��>�[U5TlS[RSR	T553TlTR
T[R"U55 g)z7
Callback activated when FileWithSignature read to end
�
signature/�/N)	�len�sizer<r=�join�name�addfiler�BytesIO)�
sig_string�index�
sigTarFile�tis ���r�callback� get_delta_path.<locals>.callbackysJ����j�/����r�{�{�4�9�9�U�+;�<�=�>������2�r�z�z�*�5�6r�	signature�diff�rb�snapshot�	snapshot/rG)�get_tarinforO�
get_ropathr8�Debugr:�isreg�difftype�open�FileWithReadCounter�FileWithSignature�getsize�
setfileobj�librsync�	DeltaFiler<r=rJrKrLr%�SourceFileSize�copy_attribs�stat�st_size)	r?r@rP�
delta_pathrR�	old_sigfp�newfprOrQs	  `    @@r�get_delta_pathrlms����
�O�8��
�
!�
!�
#�������$�$�&�J��I�I�a�,�-��0D�D�E�7��~�~���H����)9�)9�h�>O�>O�S^�>^�$�
���M�M�$�'�	�#�H�M�M�$�$7�8���%�e�x�7G�7G�7I�J�E����h�0�0��B�C�(�
���!�"�+�+�d�i�i��.>�"?�!@�A�B�G��~�~�����"�"�2�&��u��$�$�
�(:�(:�(<�<�$��'��
�
�d�(;�<�E��)�%�8�;K�;K�;M�N���!�!�%�(����*�%�&�m�m�3�3�J�O�O���rc��URS:Xa�U(aU(aURU5 [R[	S5[
R
UR55-[RR[R"UR555 gU(aU(aURU5 [R[	S5[
R
UR55-[RR[R"UR555 g)zA
Look at delta path and log delta.  Add stats if new_path is set
rWzA %szM %sN)r]�add_new_filer8�Infor:r<r=r7�InfoCode�
diff_file_newr�escape�add_changed_file�diff_file_changed)rir?r%s   r�log_delta_pathru�s������j�(������x�(����
�f�I����Z�%A�%A�%C�D�E��L�L�&�&��K�K�
�4�4�6�7�	
����"�"�8�,����
�f�I����Z�%A�%A�%C�D�E��L�L�*�*��K�K�
�4�4�6�7�	
rc	#�r# �[X5nU(a[R"SU5nOSnUGHTupV[R	[S5U=(a  [R"UR5U=(a  [R"UR54-5 U(aUR(GdHU(Ga=UR5(Ga$URS:wGa[R[S5[RUR55-[RR[R "UR555 U(a\[#UR5R%5nS[R"UR53UlUR)U5 [*R-U5 [#UR5v� GM�GM�GM�GM�U(aXV:wa[[.R1[2[4XVU45nU(a[7X�[*5 Uv� GM#[*=R8S-
slGM?[*R;U5 GMW [*R=5 U(aUR=5 gg7f)a
Generate delta iter from new Path iter and sig Path iter.

For each delta path of regular file type, path.difftype with be
set to "snapshot", "diff".  sig_iter will probably iterate ROPaths
instead of Paths.

If sig_fileobj is not None, will also write signatures to sig_fileobj.
�wNzComparing %s and %srzD %s�deleted/�)�
collate2itersr�make_tarfiler8r[r:�uindexrO�type�existsror<r=r7rp�diff_file_deletedrr�ROPathrYrKrLr%�add_deleted_file�robust�check_common_errorrCrlru�Errors�add_unchanged_file�close)	�new_iterr3�sig_fileobj�collatedrPr?r@rQris	         rr*r*�s�����X�0�H���&�&�s�K�8�
��
�&����	�	�
�#�$��8�T�[�[����8��8�T�[�[����8��
�	
��x�}�}�}��H�O�O�-�-�(�.�.�B�2F�����f�I����X�-G�-G�-I�!J�K��L�L�2�2��K�K�� :� :� <�=��
�����/�;�;�=�B� (����X�^�^�)D�(E�F�B�G��&�&�r�*��&�&�x�0��X�^�^�,�,�3G�-�x��X�1��2�2�(���Z�0��J�
��z�U�;� � �����!����$�$�X�.�Q'�R
�K�K�M�������s�J5J7c#�n# �[R"SU5nSUlUH�n[R"U5nSH-nUR	U5(dMU[U5SUSSpe O [
SU35e[[RU5RS55nUS(dUSSn[U5nXhlUS:XdUS	:XaFURU5 UR5(a URUR!U55 Uv� M� UR#5 g7f)
zC
Convert signature tar file object open for reading into path iter
�rry)rFrXrxN���zBad tarinfo name rGrTrW)rr{�debug�get_tarinfo_name�
startswithrHr
�tupler<�fsencode�splitr�r]�init_from_tarinfor\rb�extractfiler�)	�	sigtarobj�tf�tarinfo�tiname�prefixrKr]rO�ropaths	         rr)r)�s���
�	�	�3�	�	*�B��B�H����&�&�w�/��@�F�� � ��(�(�!'��F��
�!6��s���h��	A�#�%6�v�h�#?�@�@��b�k�k�$�'�-�-�d�3�4���R�y��#�2�J�E�����"���{�"�h�*�&<��$�$�W�-��|�|�~�~��!�!�"�.�.��"9�:���)�*�O�O��s
�AD5�CD5c#�# �Sup#U(d[U5nURnU(d[U5nURnWW:a	US4v� SnOXE:Xa
X#4v� Sup#OSU4v� SnMf![a U(aSU4v� UH	nSU4v� M gf=f![a U(aUS4v� UH	nUS4v� M gf=f7f)a
Collate two iterators.

The elements yielded by each iterator must be have an index
variable, and this function returns pairs (elem1, elem2), (elem1,
None), or (None, elem2) two elements in a pair will have the same
index, and earlier indicies are yielded later than later indicies.
�NNN��next�
StopIterationrO)�riter1�riter2�relem1�relem2�index1�index2s      rrzrzs���� �N�F�
��
��f����\�\�F��
��f����\�\�F��F�?��$�,���F�
�
��.� �'�N�F�F���,���F�?��!�
����,�&�$�F���,�&�%��
��!�
�� �$�,�&�$�F� �$�,�&�%��
�sI�
C�A.�C�B�4C�.&B�C�B�C�&C�C�C�Cc
#�@^^# �TSSmTR5 U4SjmU4Sjn[T[[[	T5555Vs/sH
o"(dMUPM nnU(a,UR5 USSv� U"U5 U(aM+ggs snf7f)a�
Produce new iterator by combining the iterators in path_iter_list

This new iter will iterate every path that is in path_iter_list in
order of increasing index.  If multiple iterators in
path_iter_list yield paths with the same index, combine_path_iters
will discard all paths but the one yielded by the last path_iter.

This is used to combine signature iters, as the output will be a
full up-to-date signature iter.
Nc�^>�[TU5nURX4$![a gf=f)z9
Represent the next element as a triple, to help sorting
Nr�)�
iter_index�path�path_iter_lists  �r�
get_triple�&combine_path_iters.<locals>.get_tripleGs<���	���z�2�3�D��z�z�:�+�+���	��	�s��
,�,c�>�USSnSnU[U5:a?XnUSU:XaT"US5nU(a
X@U'US-
nOX	OgU[U5:aM>gg)z;
Update all elements with path_index same as first element
rryN)rH)�triple_list�
path_indexr��
old_triple�
new_tripler�s     �r�refresh_triple_list�/combine_path_iters.<locals>.refresh_triple_listQss���!��^�A�&�
��
��3�{�+�+�$�0�J��!�}�
�*�'�
�1�
�6�
��.8�
�+��!�O�J�#�/���3�{�+�+rr�)�reverse�mapr'�rangerH�sort)r�r�r2r�r�s`   @rr(r(8s�����$�A�&�N�����,��$"�*�d�5��^�9L�3M�.N�O�U�O��ST�1�O�K�U�
������!�n�Q����K�(��+��V�s�AB�
B�B�#2B�Bc�b�[R"5q[U[5(a[U5nO[
U5n[XU5n[R(d8[R(a.[RR5(d[U5$[U5$)z�
Like DirDelta but also write signature into sig_fileobj

Like DirDelta, sig_infp_list can be a tar fileobj or a sorted list
of those.  A signature will only be written to newsig_outfp if it
is different from (the combined) sig_infp_list.
)rr$r%r&r'�get_combined_path_iterr)r*r+r,rr-r.r/r0)r�
sig_infp_list�newsig_outfp�
sig_path_iterr4s     rr r jsv��
�(�(�*�E��-��&�&�.�}�=�
�(��7�
��	�,�G�J�
�~�~�&�/�/�(�2B�2B�2Y�2Y�2[�2[��j�)�)� ��,�,rc�V�[UVs/sHn[U5PM sn5$s snf)zA
Return path iter combining signatures in list of open sig files
)r(r))r�r2s  rr�r�s'���M�J�M�q�/��2�M�J�K�K��Js�&c�.�\rSrSrSrSrSSjrSrSrg)	r_i�z@
File-like object which also computes amount read as it is read
c��Xlg)zFileWithReadCounter initializerN��infile)�selfr�s  r�__init__�FileWithReadCounter.__init__�s���rc��URRU5n[(a"[=R[U5-
slU$![ajnSn[R	[S5[R"U5[RURR54-5 SnAN�SnAff=f)Nrr6)r��read�IOErrorr8r9r:rr;r<r=rKr%rerH)r��length�buf�exs    rr��FileWithReadCounter.read�s���	j��+�+�"�"�6�*�C��5�� � �C��H�,� ��
���	j��C��H�H�Q�6�7�4�9�9�R�=�"�+�+�VZ�Va�Va�Vf�Vf�Jg�:h�h�i�i��	j�s�A�
C�A B;�;Cc�6�URR5$�N)r�r��r�s rr��FileWithReadCounter.close�s���{�{� � �"�"rr�N�r�)	r
rrr�__doc__r�r�r�rrrrr_r_�s�����#rr_c�2�\rSrSrSrSrSrS	SjrSrSr	g)
r`i�z>
File-like object which also computes signature as it is read
i�c��XsUlUl[R[	U55UlSUlX@lg)a=
FileTee initializer

The object will act like infile, but whenever it is read it
add infile's data to a SigGenerator object.  When the file has
been read to the end the callback will be called with the
calculated signature, and any extra_args if given.

filelen is used to calculate the block size of the signature.
N)r�rRrc�SigGenerator�get_block_size�sig_gen�activated_callback�
extra_args)r�r�rR�filelenr�s     rr��FileWithSignature.__init__�s6��&,�"���T�]��,�,�^�G�-D�E���"&���$�rc�r�URRU5nURRU5 U$r�)r�r�r��update)r�r�r�s   rr��FileWithSignature.read�s-���k�k���v�&�������C� ��
rc�V�UR(dURUR5(a#URUR5(aM#SUlUR"URR5/URQ76 URR5$)Nry)	r�r��	blocksizerRr��getsigr�r�r�r�s rr��FileWithSignature.close�ss���&�&��)�)�D�N�N�+�+���)�)�D�N�N�+�+�&'�D�#��M�M�$�,�,�-�-�/�B�$�/�/�B��{�{� � �"�"r)r�rRr�r�r�Nr�)
r
rrrr�r�r�r�r�rrrrr`r`�s����I�%� �
#rr`c��\rSrSrSrSrSrg)�TarBlocki�z-
Contain information to add next file to tar
c��XlX lg)z(
TarBlock initializer - just store data
N)rO�data)r�rOr�s   rr��TarBlock.__init__�s���
��	r)r�rON)r
rrrr�r�rrrrr�r��s���rr�c�d�\rSrSrSrSrSSjrSrSrSr	Sr
S	rS
rSr
SrS
rSrSrg)�TarBlockIteri�z�
A bit like an iterator, yield tar blocks given input iterator

Unlike an iterator, however, control over the maximum size of a
tarblock is available by passing an argument to next().  Also the
get_footer() is available.
c��XlSUlSUlSUlSUlSUlSUlSUlSUlSUl	g)z
TarBlockIter initializer
rFN)
�
input_iter�offset�process_waiting�process_next_vol_number�previous_index�previous_block�
remember_next�remember_value�remember_block�queued_data)r�r�s  rr��TarBlockIter.__init__�sP��%�����$���'+��$�"���"���"���"���"�����rc�
�[U5UlURS[RS9n[UR[R5upVUS:�aS[RU-
-nOSn[USXCU4-5$)z,
Make tarblock out of tarinfo and file data
�replace)�errors�encodingr�rs%s%s%s)	rHrI�tobufr+�
fsencoding�divmodr�	BLOCKSIZEr�)r�rOr��	file_data�headers�blocks�	remainder�filler_datas        r�tarinfo2tarblock�TarBlockIter.tarinfo2tarblock�sx���9�~����-�-�y�6�;L�;L�-�M��"�7�<�<��1F�1F�G����q�=��;�#8�#8�9�#D�E�K��K���y�G��+L�L�M�Mrc�>�UR(ae[S5e)z/
Turn next value of input_iter into a TarBlock
z'process' not implemented.�r��NotImplementedError)r��vals  r�process�TarBlockIter.process�s���'�'�'�'�!�">�?�?rc�>�UR(de[S5e)z�
Get more tarblocks

If processing val above would produce more than one TarBlock,
get the rest of them by calling process_continue.
z$'process_continues' not implemented.rr�s r�process_continued�TarBlockIter.process_continued�s���#�#�#�#�!�"H�I�Irc���URbURnSUlU$UR(aUR5nO$UR[	UR
55nURnU=R[UR5-
slURUlX lUR(aURUlX lSUl
U$)z%
Return next block and update offset
NF)r�r�r
r
r�r�r�r�rHr�rOr�r�r�r�r�)r��result�block_numbers   r�__next__�TarBlockIter.__next__s������'��%�%�F�#�D���M�����+�+�-�F��\�\�$�t���"7�8�F��3�3�����s�6�;�;�'�'��$�l�l���*�����"(�,�,�D��".��!&�D���
rc��g)Nirr�s r�
get_read_size�TarBlockIter.get_read_sizes��
rc�2�URUR4$)z=
Return index of last tarblock, or None if no previous index
)r�r�r�s r�get_previous_index�TarBlockIter.get_previous_index&����"�"�D�$7�$7�7�7rc��Xlg)zG
Next time next() is called, we will return data instead of processing
N)r�)r�r�s  r�queue_index_data�TarBlockIter.queue_index_data,s
�� �rc�.�SUlSUlSUlg)z<
When called, remember the index of the next block iterated
TN)r�r�r�r�s r�remember_next_index� TarBlockIter.remember_next_index2s��"���"���"��rc�2�URUR4$)z4
Retrieve index remembered with remember_next_index
)r�r�r�s r�recall_index�TarBlockIter.recall_index:rrc��[UR[R5upSUlS[RU-
-$)z5
Return closing string for dup_tarfile, reset offset
rr�)r�r�r�
RECORDSIZE)r�rrs   r�
get_footer�TarBlockIter.get_footer@s:��#�4�;�;��0F�0F�G��������.�.��:�;�;rc��U$r�rr�s r�__iter__�TarBlockIter.__iter__Hs���r)
r�r�r�r�r�r�r�r�r�r�N)r)r
rrrr�r�rr
r
rrrrrr"r&r)rrrrr�r��sF���
 �N�@�J��2�8� �#�8�<�rr�c��\rSrSrSrSrSrg)r/iLz(
TarBlockIter that does no file reading
c��UR5nURnUR(aUR(dUR	X25$[
(ad[
=RS-
sl[
=RUR5-
sl[RS[
R5 UR	X25$)z'
Get a fake tarblock from delta_ropath
ryN)rYrOr}�fileobjrr%�SourceFilesrerar8�Progress)r��delta_ropathrQrOs    rr
�DummyBlockIter.processQs����
%�
%�
'���"�"��� � ��(<�(<��(�(��3�3��5�
����"��� � �L�$8�$8�$:�:� ��L�L��u�3�3�4��$�$�U�/�/rrN�r
rrrr�r
rrrrr/r/Ls���0rr/c��\rSrSrSrSrSrg)riezC
TarBlockIter that yields blocks of a signature tar from path_iter
c��UR5nUR5(a�[RUR	S5[UR
555nUR5nUR5 SSRUR5-Ul[RUR5UlURURX$5$SSRUR5-Ul[RUR5UlURURU5$)z0
Return associated signature TarBlock from path
rVs
signature/rGs	snapshot/)rYr\rc�SigFiler^r�rar�r�rJrOrKr<r=r)r�r�rQ�sfp�sigbufs     rr
�SigTarBlockIter.processjs����
�
�
���:�:�<�<��"�"�4�9�9�T�?�N�4�<�<�>�4R�S�C��X�X�Z�F��I�I�K�#�d�i�i��
�
�&;�;�B�G��k�k�"�'�'�*�B�G��(�(����R�@�@�"�T�Y�Y�t�z�z�%:�:�B�G��k�k�"�'�'�*�B�G��(�(����R�8�8rrNr2rrrrres���9rrc�*�\rSrSrSrSrSrSrSrg)r0i|z�
TarBlockIter that yields parts of a deltatar file

Unlike SigTarBlockIter, the argument to __init__ is a
delta_path_iter, so the delta information has already been
calculated.
c��SnUR5nURnUR(aUR(dGUR(d
U"US5 OURS:XdeU"US5 URXC5$UR
S5nURU5upg[(a"[=R[U5-
sl	U(aMURS:Xa
U"US5 O!URS:Xa
U"US5 OS5eURXCU5$SUR<SUR<3nUS	3UlX�lXPl
XlS
UlSUlURXCU5$)z"
Get a tarblock from delta_ropath
c�j�URS:XaUS3UlgU<SUR<3Ulg)z(Add prefix to the name of a tarinfo file�.�/N)rK)r�r�s  r�
add_prefix�-DeltaTarBlockIter.process.<locals>.add_prefix�s+���|�|�t�#�"(���|���+1�7�<�<�@��r�deletedrWrVrUzUnknown difftype�	multivol_r=z/1ryr�)rYrOr}r-r]rr^�get_data_blockr%�RawDeltaSizerHrK�process_prefix�
process_fp�process_ropathr�r�)	r�r0r>rQrO�fpr��
last_block�	full_names	         rr
�DeltaTarBlockIter.process�se��
	A��
%�
%�
'���"�"��� � ��(<�(<��$�$��2�z�*�#�,�,�
�:�:�:��2�{�+��(�(��3�3��
�
�t�
$���.�.�r�2����5����#�d�)�+����$�$�
�2��2�{�+��&�&�&�0��2�w�'�,�,�,�q��(�(��D�9�9��*6�)>�)>����H�	��K�r�"���'����*�� ���'(��$��$�$�U��5�5rc��UR5nURU5n[U5U:a$UR5(a[	S5eUS4$US4$)z8
Return pair (next data block, boolean last data block)
zError closing fileTF)rr�rHr�r
)r�rG�	read_sizer�s    rrB� DeltaTarBlockIter.get_data_block�sW���&�&�(�	��g�g�i� ���s�8�i���x�x�z�z�&�';�<�<���9����:�rc��UR(deURnUR5URp2URS[UR53UlURUR5upE[(a"[=R[U5-
slU(a$SUlSUl	SUlSUlSUlOU=RS-
slURX2U5$)z1
Return next volume in multivol diff or snapshot
r=Nry)r�rFrYrOrD�intr�rKrBrEr%rCrHr)r�r�rQrOr�rHs      rr
�#DeltaTarBlockIter.process_continued�s����#�#�#�#��$�$���&�&�(�&�,�,�E��(�(�)��3�t�/K�/K�+L�*M�N����.�.�t���?����5����#�d�)�+���"&�D��"�D�O�"&�D��#'�D� �+/�D�(��(�(�A�-�(��$�$�U��5�5r)rEr�rDrFr�N)	r
rrrr�r
rBr
rrrrr0r0|s���.6�`�6rr0c��[U[5(a[URS5nO$[U[5(a
[US5nOUnUHnURUR5 M  URUR55 UR5(ae[U[5(aUR5 gg)z4
Write block_iter to filename, path, or file object
�wbN)
r&�Pathr^rK�str�writer�r&r��setdata)�
block_iter�out_objrG�blocks    r�write_block_iterrZ�s����'�4� � �
�'�,�,��
%��	�G�S�	!�	!�
�'�4�
 ��
����
���������H�H�Z�
"�
"�
$�%��x�x�z�z��>��'�4� � �����!rc��[R"[R"U55n[R
(a[
U[R
5$U$)a
Return a reasonable block size to use on files of length file_len.

Use the integer square root of file length as the librsync block size.
Minimum being 512 byte with no maximum unless --max-blocksize is supplied.

Block size is rounded up to the nearest 512 byte boundary.
)r�round512�math�isqrtr+�
max_blocksize�min)�file_len�
block_sizes  rr�r��s?���"�"�4�:�:�h�#7�8�J�
����:�v�3�3�4�4��rr�r�)%r�rr]�	duplicityrrrrr�duplicity.pathr%r-�	Exceptionr
rrr"rrCrlrur*r)rzr(r r��objectr_r`r�r�r/rr0rZr�rrr�<module>rgs���,�
���� �!���	
��
��	�y�	�&�	0�D�-�(�+�\
�,:�z�<)�X/)�d-�*L�#�&�#�.##��##�L
�v�
�y�6�y�x0�\�0�29�l�9�.Y6��Y6�x�$r

Filemanager

Name Type Size Permission Actions
__init__.cpython-313.pyc File 398 B 0644
__main__.cpython-313.pyc File 4.74 KB 0644
argparse311.cpython-313.pyc File 98.99 KB 0644
backend.cpython-313.pyc File 32.15 KB 0644
backend_pool.cpython-313.pyc File 18.72 KB 0644
cached_ops.cpython-313.pyc File 1.09 KB 0644
cli_data.cpython-313.pyc File 32.01 KB 0644
cli_main.cpython-313.pyc File 14.13 KB 0644
cli_util.cpython-313.pyc File 22.31 KB 0644
config.cpython-313.pyc File 5.74 KB 0644
diffdir.cpython-313.pyc File 31.95 KB 0644
dup_collections.cpython-313.pyc File 63.51 KB 0644
dup_main.cpython-313.pyc File 78.6 KB 0644
dup_tarfile.cpython-313.pyc File 432 B 0644
dup_temp.cpython-313.pyc File 12.87 KB 0644
dup_time.cpython-313.pyc File 11.17 KB 0644
errors.cpython-313.pyc File 3.53 KB 0644
file_naming.cpython-313.pyc File 16.93 KB 0644
filechunkio.cpython-313.pyc File 3.83 KB 0644
globmatch.cpython-313.pyc File 6.01 KB 0644
gpg.cpython-313.pyc File 20.98 KB 0644
gpginterface.cpython-313.pyc File 25.69 KB 0644
lazy.cpython-313.pyc File 17 KB 0644
librsync.cpython-313.pyc File 11.48 KB 0644
log.cpython-313.pyc File 19.18 KB 0644
manifest.cpython-313.pyc File 23.66 KB 0644
patchdir.cpython-313.pyc File 27.63 KB 0644
path.cpython-313.pyc File 43.08 KB 0644
progress.cpython-313.pyc File 14.45 KB 0644
robust.cpython-313.pyc File 1.91 KB 0644
selection.cpython-313.pyc File 31.35 KB 0644
statistics.cpython-313.pyc File 18.78 KB 0644
tempdir.cpython-313.pyc File 12.04 KB 0644
util.cpython-313.pyc File 16.51 KB 0644
Filemanager