
    z%i                       	 d Z dZdZddlmZ ddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZ	 ddlZ	 ddlZeeefZg dZdZdZed	z  Zd
ZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1e1Z2e e!e"e#e&e'e(e$e%e)e*e+fZ3e e!e(e+fZ4e)e*e+fZ5dZ6h dZ7e8e8e8e9e9e9d Z:ejv                  d!k(  rd"Z<n ejz                         Z<d# Z>d$ Z?d% Z@d&e2fd'ZAd( ZBdedfd)ZCd* ZD G d+ d,eE      ZF G d- d.eF      ZG G d/ d0eF      ZH G d1 d2eF      ZI G d3 d4eF      ZJ G d5 d6eF      ZK G d7 d8eK      ZL G d9 d:eK      ZM G d; d<eK      ZN G d= d>eK      ZO G d? d@eK      ZP G dA dB      ZQ G dC dD      ZR G dE dFeS      ZT G dG dHeS      ZU G dI dJej                        ZW G dK dLeF      ZX G dM dNeX      ZY G dO dPeX      ZZ G dQ dReX      Z[ G dS dTeX      Z\ G dU dVeX      Z]dcdWZ^dX Z_dY Z`dZ Zae_e`ead[Zb eS       Zc G d\ d]eS      Zd G d^ d_eS      Zed` Zfeej                  Zda Zgehdbk(  r eg        yy# e$ r dZY w xY w# e$ r dZY w xY w)dz0.9.0u"   Lars Gustäbel (lars@gustaebel.de)u4   Gustavo Niemeyer, Niels Gustäbel, Richard Townsend.    )openN)TarFileTarInfo
is_tarfileTarError	ReadErrorCompressionErrorStreamErrorExtractErrorHeaderErrorENCODINGUSTAR_FORMAT
GNU_FORMAT
PAX_FORMATDEFAULT_FORMATr   fully_trusted_filterdata_filter
tar_filterFilterErrorAbsoluteLinkErrorOutsideDestinationErrorSpecialFileErrorAbsolutePathErrorLinkOutsideDestinationError    i      s   ustar   s   ustar 00d         0   1   2   3   4   5   6   7   L   K   S   x   g   X      )pathlinkpathsizemtimeuidgidunamegname>   r/   r6   r5   r0   )atimectimer2   r3   r4   r1   ntutf-8c                 x    	 | t        d      | j                  ||      } | d | |t        |       z
  t        z  z   S )Nzmetadata cannot contain None)
ValueErrorencodelenNUL)slengthencodingerrorss       ;/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/tarfile.pystnrE      sF    y788	6"AWf:#a&C///    c                 ^    	 | j                  d      }|dk7  r| d | } | j                  ||      S )Nr   )finddecode)r@   rB   rC   ps       rD   ntsrL      s7    	uABwbqE88Hf%%rF   c                 8   	 | d   dv rMd}t        t        |       dz
        D ]  }|dz  }|| |dz      z  } | d   dk(  rdt        |       dz
  z  |z
   }|S 	 t        | dd      } t        | j	                         xs d	d      }|S # t
        $ r t        d
      w xY w)Nr   )      r-      rO      asciistrict0invalid header)ranger>   rL   intstripr<   InvalidHeaderError)r@   nis      rD   ntir\      s     	t~s1vz" 	A!GA1q5MA	 Q45=#a&1*%)*A H	7Aw)AAGGI$a(A H  	7$%566	7s   +B BrP   c                    	 | }t        |       } d| cxk  rd|dz
  z  k  r n nt        d|dz
  | fz  d      t        z   }|S |t        k(  rzd|dz
  z   | cxk  rd|dz
  z  k  rbn t        d	      | dk\  rt	        dg      }nt	        dg      }d|z  | z   } t        |dz
        D ]  }|j                  d| dz         | dz  }  |S t        d	      )
Nr   rP   r-   z%0*orR   rQ   rN   rO   zoverflow in number field)rW   bytesr?   r   	bytearrayrV   insertr<   )rZ   digitsformat
original_nr@   r[   s         rD   itnrd      s    JAAA!fqj!!&FQJ?*G4s: H 
:	36A:#6"6!"Qcfqj>Q"Q 344 65'"A5'"Av!Avz" 	AHHQE	"!GA	 H 344rF   c                     	 dt        t        j                  d|             z   }dt        t        j                  d|             z   }||fS )NrQ   
148B8x356B
148b8x356b)sumstructunpack_from)bufunsigned_chksumsigned_chksums      rD   calc_chksumsrn      sL     C 2 2< EFFO#f00sCDDMM))rF   c                 z   	 |xs d}|dk(  ry |t        j                  | ||       y t        ||      \  }}t        |      D ]:  }| j	                  |      }t        |      |k  r |d      |j                  |       < |dk7  r8| j	                  |      }t        |      |k  r |d      |j                  |       y )Ni @  r   unexpected end of data)shutilcopyfileobjdivmodrV   readr>   write)	srcdstrA   	exceptionbufsizeblocks	remainderbrk   s	            rD   rr   rr      s     "G{~3W-vw/FI6] hhws8g455		#	 A~hhy!s8i455		#
rF   c                     t        t        j                  dd       }|!| j                  |d      j	                  |      } t        | d       y )NrB   backslashreplace )end)getattrsysstdoutr=   rJ   print)r@   rB   s     rD   _safe_printr     s@    szz:t4HHHX1299(C	!rF   c                       e Zd Z	 y)r   N__name__
__module____qualname__ rF   rD   r   r     s    rF   r   c                       e Zd Z	 y)r   Nr   r   rF   rD   r   r     s    /rF   r   c                       e Zd Z	 y)r   Nr   r   rF   rD   r   r     s    0rF   r   c                       e Zd Z	 y)r	   Nr   r   rF   rD   r	   r	     s    8rF   r	   c                       e Zd Z	 y)r
   Nr   r   rF   rD   r
   r
     s    GrF   r
   c                       e Zd Z	 y)r   Nr   r   rF   rD   r   r     s    +rF   r   c                       e Zd Z	 y)EmptyHeaderErrorNr   r   rF   rD   r   r      s    &rF   r   c                       e Zd Z	 y)TruncatedHeaderErrorNr   r   rF   rD   r   r   #  s    *rF   r   c                       e Zd Z	 y)EOFHeaderErrorNr   r   rF   rD   r   r   &  s    ,rF   r   c                       e Zd Z	 y)rY   Nr   r   rF   rD   rY   rY   )  s    (rF   rY   c                       e Zd Z	 y)SubsequentHeaderErrorNr   r   rF   rD   r   r   ,  s    =rF   r   c                   &    e Zd Z	 d Zd Zd Zd Zy)_LowLevelFilec                    t         j                  t         j                  t         j                  z  t         j                  z  d|   }t        t         d      r|t         j                  z  }t        j                  ||d      | _        y )NrwO_BINARYi  )	osO_RDONLYO_WRONLYO_CREATO_TRUNChasattrr   r   fd)selfnamemodes      rD   __init__z_LowLevelFile.__init__9  sa    rzz)BJJ6
  2z"BKKD''$e,rF   c                 B    t        j                  | j                         y N)r   closer   r   s    rD   r   z_LowLevelFile.closeB  s    
rF   c                 B    t        j                  | j                  |      S r   )r   rt   r   r   r1   s     rD   rt   z_LowLevelFile.readE  s    wwtww%%rF   c                 D    t        j                  | j                  |       y r   )r   ru   r   r   r@   s     rD   ru   z_LowLevelFile.writeH  s    
!rF   N)r   r   r   r   r   rt   ru   r   rF   rD   r   r   3  s    
-&rF   r   c                   X    e Zd Z	 d Zd Zd Zd Zd Zd Zd Z	d Z
dd	Zd
 Zd Zd Zy)_Streamc                    	 d| _         |t        ||      }d| _         |dk(  rt        |      }|j                         }|xs d| _        || _        || _        || _        || _        d| _	        d| _
        d| _        	 |dk(  r[	 dd l}|| _        |j                  d      | _        |d	k(  r"|j"                  | _        | j'                          y | j)                  |       y |d
k(  rI	 dd l}|d	k(  r(d| _        |j/                         | _        t2        | _        y |j5                  |      | _        y |dk(  rN	 dd l}	|d	k(  r.d| _        |	j9                         | _        |	j:                  | _        y |	j=                         | _        y |dk7  rt        d|z        y # t        $ r t        d      d w xY w# t        $ r t        d      d w xY w# t        $ r t        d      d w xY w#  | j                   s| j                  j?                          d| _         xY w)NTF* rF   r   gzzzlib module is not availabler   bz2bz2 module is not availablexzlzma module is not availabletarunknown compression type %r) _extfileobjr   _StreamProxygetcomptyper   r   comptypefileobjry   rk   posclosedzlibImportErrorr	   crc32crcerrorrx   _init_read_gz_init_write_gzr   dbufBZ2DecompressorcmpOSErrorBZ2CompressorlzmaLZMADecompressor	LZMAErrorLZMACompressorr   )
r   r   r   r   r   ry   compresslevelr   r   r   s
             rD   r   z_Stream.__init__V  s    	?#D$/G$Ds? #7+G**,H
		 -	4U !	::c?3;%)ZZDN&&(''6U"T 3; #DI"224DH%,DN"00?DHT!U 3; #DI#446DH%)^^DN#224DHU"&'Dx'OPP #E # U*+IJPTTU # T*+HItST # U*+IJPTTU	##""$DKsy   ;G F AG 	G G !F) %,G G )G /G 32G &G <G F&&G )F??G GG 0Hc                 X    t        | d      r| j                  s| j                          y y y )Nr   )r   r   r   r   s    rD   __del__z_Stream.__del__  s#    4"4;;JJL ,7"rF   c                 v   	 | j                   j                  || j                   j                  | j                   j                   | j                   j                  d      | _        t        j                  dt        t        j                                     }| j                  d|z   dz          | j                  j                  d      r| j                  d d | _        t        j                  j                  | j                        | _        | j                  | j                  j!                  dd      t"        z          y )	Nr   <Ls   s   .gzz
iso-8859-1replace)r   compressobjDEFLATED	MAX_WBITSDEF_MEM_LEVELr   ri   packrW   time_Stream__writer   endswithr   r/   basenamer=   r?   )r   r   	timestamps      rD   r   z_Stream._init_write_gz  s    	99(()-););*.))*=*=)=)-)@)@)*	,
 KKc$))+&67	(94{BC99e$		#2DIGG$$TYY/	TYY%%lI>DErF   c                 ,   	 | j                   dk(  r+| j                  j                  || j                        | _        | xj                  t        |      z  c_        | j                   dk7  r| j                  j                  |      }| j                  |       y )Nr   r   )	r   r   r   r   r   r>   r   compressr   r   s     rD   ru   z_Stream.write  sj    	==D yyq$((3DHCF==E!!!!$AQrF   c                 \   	 | xj                   |z  c_         t        | j                         | j                  kD  rt| j                  j	                  | j                   d | j                          | j                   | j                  d  | _         t        | j                         | j                  kD  rsy y r   )rk   r>   ry   r   ru   r   s     rD   __writez_Stream.__write  sw    	 	A$((mdll*LLtxx67xx.DH $((mdll*rF   c                    	 | j                   ry d| _         	 | j                  dk(  r<| j                  dk7  r-| xj                  | j                  j                         z  c_        | j                  dk(  r| j                  r| j                  j                  | j                         d| _        | j                  dk(  ru| j                  j                  t        j                  d| j                               | j                  j                  t        j                  d| j                  dz               | j                  s| j                  j                          y y # | j                  s| j                  j                          w w xY w)NTr   r   rF   r   r   l    )r   r   r   rk   r   flushr   ru   ri   r   r   r   r   r   r   s    rD   r   z_Stream.close  s   	 ;;	%yyCDMMU$:DHHNN,,yyCDHH""488,==D(LL&&v{{4'BCLL&&v{{4J9N'OP##""$ $4##""$ $s   DE )E>c                    	 | j                   j                  | j                   j                         | _        d| _        | j                  d      dk7  rt        d      | j                  d      dk7  rt        d      t        | j                  d            }| j                  d       |d	z  rIt        | j                  d            d
t        | j                  d            z  z   }| j                  |       |dz  r	 | j                  d      }|r	|t        k(  rn|dz  r	 | j                  d      }|r	|t        k(  rn|dz  r| j                  d       y y )NrF   r.   s   not a gzip filer-      zunsupported compression method      rQ   rP      )r   decompressobjr   r   r   _Stream__readr   r	   ordrt   r?   )r   flagxlenr@   s       rD   r   z_Stream._init_read_gz  s.   	99**DII,?,?+?@	 ;;q>[(-..;;q>W$"#CDD4;;q>"A!8t{{1~&s4;;q>/B)BBDIIdO!8KKNAH  "9KKNAH  !8KKN rF   c                     	 | j                   S r   )r   r   s    rD   tellz_Stream.tell  s    	xxrF   c                    	 || j                   z
  dk\  rnt        || j                   z
  | j                        \  }}t        |      D ]  }| j	                  | j                          | j	                  |       | j                   S t        d      )Nr   z seeking backwards is not allowed)r   rs   ry   rV   rt   r
   )r   r   rz   r{   r[   s        rD   seekz_Stream.seek  s~    	 >Q &sTXX~t|| DFI6] (		$,,'(IIi  xx @AArF   c                 f    	 | j                  |      }| xj                  t        |      z  c_        |S r   )_readr   r>   )r   r1   rk   s      rD   rt   z_Stream.read  s*    CjjCH
rF   c                 *   	 | j                   dk(  r| j                  |      S t        | j                        }| j                  g}||k  r| j                  r| j                  }d| _        n(| j
                  j                  | j                        }|snA	 | j                  j                  |      }|j                  |       |t        |      z  }||k  rdj                  |      }||d  | _        |d | S # | j                  $ r}t        d      |d }~ww xY w)Nr   rF   zinvalid compressed data)r   r   r>   r   rk   r   rt   ry   r   
decompressrx   r   appendjoin)r   r1   ctrk   es         rD   r   z_Stream._read  s    	==E!;;t$$		NYYK$hxxhhll''5Bhh))#. HHSMSMA $h HHQKdeH	$x >> B 9:ABs   C2 2DDDc                 ,   	 t        | j                        }| j                  g}||k  rM| j                  j                  | j                        }|sn%|j                  |       |t        |      z  }||k  rMdj                  |      }||d  | _        |d | S )NrF   )r>   rk   r   rt   ry   r  r  )r   r1   r  r  rk   s        rD   __readz_Stream.__read.  s    	 MXXJ$h,,##DLL1CHHSMSMA $h HHQKTU8$xrF   N)r   )r   r   r   r   r   r   ru   r   r   r   r   r   rt   r   r   r   rF   rD   r   r   K  sF    ENF"/%,>
6rF   r   c                   &    e Zd Z	 d Zd Zd Zd Zy)r   c                 Z    || _         | j                   j                  t              | _        y r   )r   rt   	BLOCKSIZErk   )r   r   s     rD   r   z_StreamProxy.__init__D  s    <<$$Y/rF   c                 P    | j                   j                  | _        | j                  S r   )r   rt   rk   r   s     rD   rt   z_StreamProxy.readH  s    LL%%	xxrF   c                     | j                   j                  d      ry| j                   dd dk(  r| j                   dd dk(  ry	| j                   j                  d
      ryy)Ns   r   r      s   BZhr   
   s   1AY&SYr   )s   ]  s   7zXZr   r   )rk   
startswithr   s    rD   r   z_StreamProxy.getcomptypeL  sV    88/XXa]f$!B9)DXX  !CDrF   c                 8    | j                   j                          y r   )r   r   r   s    rD   r   z_StreamProxy.closeV  s    rF   N)r   r   r   r   rt   r   r   r   rF   rD   r   r   ?  s    0rF   r   c                   f    e Zd Z	 ddZd Zd Zd Zd Zd Ze	j                  fdZdd	Zd
 Zd Zy)_FileInFileNc                    || _         || _        || _        d| _        || _        d| _        |d|fg}d| _        g | _        d}| j                  }|D ]U  \  }}||kD  r| j                  j                  d||d f       | j                  j                  d|||z   |f       ||z  }||z   }W || j                  k  r*| j                  j                  d|| j                  d f       y y )Nr   FT)	r   offsetr1   positionr   r   	map_indexmapr  )r   r   r  r1   r   	blockinfolastposrealposs           rD   r   z_FileInFile.__init__c  s    		TI ++% 	$LFD >?HHOOT66D='BCtOGtmG	$ TYYHHOOUGTYY=> rF   c                      y r   r   r   s    rD   r   z_FileInFile.flush|  s    rF   c                      yNTr   r   s    rD   readablez_FileInFile.readable  s    rF   c                      yNFr   r   s    rD   writablez_FileInFile.writable  s    rF   c                 6    | j                   j                         S r   )r   seekabler   s    rD   r$  z_FileInFile.seekable  s    ||$$&&rF   c                     	 | j                   S r   )r  r   s    rD   r   z_FileInFile.tell  s    	}}rF   c                 0   	 |t         j                  k(  r1t        t        |d      | j                        | _        | j
                  S |t         j                  k(  rc|dk  r*t        | j
                  |z   d      | _        | j
                  S t        | j
                  |z   | j                        | _        | j
                  S |t         j                  k(  r>t        t        | j                  |z   | j                        d      | _        | j
                  S t        d      )Nr   zInvalid argument)	ioSEEK_SETminmaxr1   r  SEEK_CURSEEK_ENDr<   )r   r  whences      rD   r   z_FileInFile.seek  s    	R[[ Ha 0$))<DM }} r{{"!| #DMMH$<a @ }} !$DMMH$<dii H
 }}	 r{{"DII$8$)) DaHDM }} /00rF   c                    	 || j                   | j                  z
  }n#t        || j                   | j                  z
        }d}|dkD  r$	 | j                  | j                     \  }}}}|| j                  cxk  r|k  rn nn?| xj                  dz  c_        | j                  t        | j                        k(  rd| _        vt        ||| j                  z
        }|re| j                  j                  || j                  |z
  z          | j                  j                  |      }t        |      |k7  rt        d      ||z  }n|t        |z  z  }||z  }| xj                  |z  c_        |dkD  r$|S )NrF   r   r-   rp   )r1   r  r)  r  r  r>   r   r   rt   r   r?   )	r   r1   rk   datastartstopr  rA   r|   s	            rD   rt   z_FileInFile.read  sG   	<99t}},DtTYY67DQh,0HHT^^,D)eT6DMM0D0NNa'N~~TXX6)*  tdmm34F!!&DMME,A"BCLL%%f-q6V##$<==qsV|#FNDMMV#M' Qh( 
rF   c                 h    | j                  t        |            }||d t        |       t        |      S r   )rt   r>   )r   r|   rk   s      rD   readintoz_FileInFile.readinto  s,    iiA)3s83xrF   c                     d| _         y r  )r   r   s    rD   r   z_FileInFile.close  s	    rF   r   )r   r   r   r   r   r  r"  r$  r   r'  r(  r   rt   r3  r   r   rF   rD   r  r  ]  sB    
?2'
 %'KK  >
rF   r  c                        e Zd Z fdZ xZS )ExFileObjectc                     t        |j                  |j                  |j                  |j                  |j
                        }t        |   |       y r   )r  r   offset_datar1   r   sparsesuperr   )r   tarfiletarinfor   	__class__s       rD   r   zExFileObject.__init__  s;    goow/B/BgllGNN<!rF   r   r   r   r   __classcell__r=  s   @rD   r6  r6    s    " "rF   r6  c                       e Zd Zy)r   Nr   r   rF   rD   r   r     s    rF   r   c                        e Zd Z fdZ xZS )r   c                 N    || _         t        | 	  d|j                  d       y )Nzmember z has an absolute pathr<  r:  r   r   r   r<  r=  s     rD   r   zAbsolutePathError.__init__  s&    77<<"22GHIrF   r>  r@  s   @rD   r   r     s    J JrF   r   c                        e Zd Z fdZ xZS )r   c                 f    || _         || _        t        |   |j                  d|ddz          y )Nz would be extracted to ,  which is outside the destinationr<  _pathr:  r   r   r   r<  r/   r=  s      rD   r   z OutsideDestinationError.__init__  s;    
GLL++B4("M=> 	?rF   r>  r@  s   @rD   r   r         ? ?rF   r   c                        e Zd Z fdZ xZS )r   c                 L    || _         t        | 	  |j                  d       y )Nz is a special filerD  rE  s     rD   r   zSpecialFileError.__init__  s$    GLL++=>?rF   r>  r@  s   @rD   r   r     s    @ @rF   r   c                        e Zd Z fdZ xZS )r   c                 L    || _         t        | 	  |j                  d       y )Nz is a link to an absolute pathrD  rE  s     rD   r   zAbsoluteLinkError.__init__  s$    GLL++IJKrF   r>  r@  s   @rD   r   r     s    L LrF   r   c                        e Zd Z fdZ xZS )r   c                 f    || _         || _        t        |   |j                  d|ddz          y )Nz would link to rH  rI  rJ  rL  s      rD   r   z$LinkOutsideDestinationError.__init__  s:    
GLL+?4("E=> 	?rF   r>  r@  s   @rD   r   r     rM  rF   r   c                    i }| j                   }t        j                  j                  |      }|j	                  dt        j
                  f      r1| j                  j                  dt        j
                  z         x}|d<   t        j                  j                  |      rt        |       t        j                  j                  t        j                  j                  ||            }t        j                  j                  ||g      |k7  rt        | |      | j                  }|y|dz  }|r^| j                         s| j                         r|dz  s|dz  }|dz  }n.| j                         s| j!                         rd }nt#        |       || j                  k7  r||d<   |rk| j$                  d |d<   | j&                  d |d	<   | j(                  d |d
<   | j*                  d |d<   | j                         s| j!                         rt        j                  j                  | j,                        rt/        |       | j!                         rIt        j                  j                  |t        j                  j1                  |      | j,                        }n*t        j                  j                  || j,                        }t        j                  j                  |      }t        j                  j                  ||g      |k7  rt3        | |      |S )N/r   i  @   i  r   r3   r4   r5   r6   )r   r   r/   realpathr  seplstripisabsr   r  
commonpathr   r   isregislnkisdirissymr   r3   r4   r5   r6   linknamer   dirnamer   )member	dest_pathfor_data	new_attrsr   target_pathr   s          rD   _get_filtered_attrsrh    s^   I;;D  +I RVV}%#);;#5#5cBFFl#CCy 	ww}}T  ''''""277<<	4#@AK	ww;	23y@%fk::;;De|||~e|FND6<<> 'v..6;; $If::!#Ie::!#Ie<<#!%Ig<<#!%Ig<<>V\\^ww}}V__-'//||~ ggll9+-77??4+@+1??< !ggll9+1??<''**;7Kww!!;	":;yH1&+FFrF   c                     | S r   r   )rc  rd  s     rD   r   r   1  s    MrF   c                 P    t        | |d      }|r | j                  di |ddiS | S )NFdeepr   rh  r   rc  rd  rf  s      rD   r   r   4  s1    #FIu=Iv~~6	666MrF   c                 P    t        | |d      }|r | j                  di |ddiS | S )NTrk  Fr   rl  rm  s      rD   r   r   :  s1    #FIt<Iv~~6	666MrF   )fully_trustedr   r/  c                   @   e Zd Z	  edSi ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d$d&d$ZdTd'Zed(        Zej                  d)        Zed*        Z	e	j                  d+        Z	d, Z
eeeeeeeed-ed.
d/Zd0 Zeed1fd2Zd3 Zd4 Zd5 Zed6        Zd7 Zed8        Zed9        Zed:        Zed;        Zed<        Zed=        Zd> Zd? Zd@ Z dA Z!dB Z"dC Z#dD Z$dE Z%dF Z&dG Z'dH Z(dI Z)dJ Z*dK Z+dL Z,dM Z-dN Z.dO Z/dP Z0dQ Z1dR Z2y$)Ur   r   zName of the archive member.r   zPermission bits.r3   z6User ID of the user who originally stored this member.r4   z7Group ID of the user who originally stored this member.r1   zSize in bytes.r2   zTime of last modification.chksumzHeader checksum.typezFile type. type is usually one of these constants: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.ra  zcName of the target file name, which is only present in TarInfo objects of type LNKTYPE and SYMTYPE.r5   z
User name.r6   zGroup name.devmajorzDevice major number.devminorzDevice minor number.r  zThe tar header starts here.r8  zThe file's data starts here.pax_headerszMA dictionary containing key-value pairs of an associated pax extended header.r9  zSparse member information.r;  N_sparse_structs_link_targetc                     	 || _         d| _        d| _        d| _        d| _        d| _        d| _        t        | _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        d | _        i | _        y )Ni  r   r   )r   r   r3   r4   r1   r2   rq  REGTYPErr  ra  r5   r6   rs  rt  r  r8  r9  ru  r   r   s     rD   r   zTarInfo.__init__p  s    	 			
	

rF   c                     	 | j                   S r   r   r   s    rD   r/   zTarInfo.path  s    2yyrF   c                     || _         y r   r|  rz  s     rD   r/   zTarInfo.path  s	    	rF   c                     	 | j                   S r   ra  r   s    rD   r0   zTarInfo.linkpath  s    :}}rF   c                     || _         y r   r  )r   ra  s     rD   r0   zTarInfo.linkpath  s	     rF   c                 `    d| j                   j                  | j                  t        |       fz  S )Nz<%s %r at %#x>)r=  r   r   idr   s    rD   __repr__zTarInfo.__repr__  s&    4>>#:#:499RX"NNNrF   T)
r   r2   r   ra  r3   r4   r5   r6   rk  _KEEPc       
            	 |	rt        j                  |       }nt        j                   |       }||
ur||_        ||
ur||_        ||
ur||_        ||
ur||_        ||
ur||_        ||
ur||_        ||
ur||_        ||
ur||_	        |S r   )
copydeepcopyr   r2   r   ra  r3   r4   r5   r6   )r   r   r2   r   ra  r3   r4   r5   r6   rk  r  results               rD   r   zTarInfo.replace  s    	]]4(FYYt_FuFK FLuFK5 &FOeFJeFJ FL FLrF   c                    	 | j                   d }n| j                   dz  }| j                  || j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                  | j                  d}|d   t        k(  r!|d   j                  d      s|dxx   dz  cc<   |S )N  )r   r   r3   r4   r1   r2   rq  rr  ra  r5   r6   rs  rt  rr  r   rU  )r   r   r3   r4   r1   r2   rq  rr  ra  r5   r6   rs  rt  DIRTYPEr   )r   r   infos      rD   get_infozTarInfo.get_info  s    	99D99v%D				

		




  <7"4<+@+@+ELCLrF   surrogateescapec                 0   	 | j                         }|j                         D ]  \  }}|	t        d|z         |t        k(  r| j	                  |||      S |t
        k(  r| j                  |||      S |t        k(  r| j                  ||      S t        d      )Nz%s may not be Nonezinvalid format)	r  itemsr<   r   create_ustar_headerr   create_gnu_headerr   create_pax_header)r   rb   rB   rC   r  r   values          rD   tobufzTarInfo.tobuf  s    	}}::< 	>KD%} !5!<==	> \!++D(FCCz!))$&AAz!))$99-..rF   c                 .   	 t         |d<   t        |d   j                  ||            t        kD  rt	        d      t        |d   j                  ||            t
        kD  r| j                  |d   ||      \  |d<   |d<   | j                  |t        ||      S )Nmagicra  zlinkname is too longr   prefix)	POSIX_MAGICr>   r=   LENGTH_LINKr<   LENGTH_NAME_posix_split_name_create_headerr   )r   r  rB   rC   s       rD   r  zTarInfo.create_ustar_header  s    	#WtJ&&x89KG344tF|""8V45C+/+A+A$v,PXZ`+a(DNDL""4xHHrF   c                 \   	 t         |d<   d}t        |d   j                  ||            t        kD  r|| j	                  |d   t
        ||      z  }t        |d   j                  ||            t        kD  r|| j	                  |d   t        ||      z  }|| j                  |t        ||      z   S )Nr  rF   ra  r   )
	GNU_MAGICr>   r=   r  _create_gnu_long_headerGNUTYPE_LONGLINKr  GNUTYPE_LONGNAMEr  r   )r   r  rB   rC   rk   s        rD   r  zTarInfo.create_gnu_header  s    	!WtJ&&x89KG4//Z0@BRT\^deeCtF|""8V45C4//V>NPXZ`aaCT((z8VLLLrF   c                 ^   	 t         |d<   | j                  j                         }ddt        fddt        fddfD ];  \  }}}||v r	 ||   j                  dd	       t        ||         |kD  s4||   ||<   = d
D ]e  \  }}d}||   }	t        |	t              }
|
rt        |	      n|	}d|cxk  rd|dz
  z  k  s
n d||<   d}n	|
r|||<   d}|sS||vsXt        |	      ||<   g |r| j                  |t        |      }nd}|| j                  |t        dd      z   S # t        $ r ||   ||<   Y w xY w)Nr  r   r/   ra  r0   )r5   r5       )r6   r6   r  rR   rS   ))r3   rP   )r4   rP   )r1      )r2   r  Fr   rP   r-   TrF   r   )r  ru  r  r  r  r=   UnicodeEncodeErrorr>   
isinstancefloatroundstr_create_pax_generic_headerXHDTYPEr  r   )r   r  rB   ru  r   hnamerA   ra   	needs_paxvalval_is_floatval_intrk   s                rD   r  zTarInfo.create_pax_header  s   	 $W&&++-
 -
J/T&(>$@ 	0D% #T
!!'84
 4:'%)$ZE"!	0( R 	-LD&It*C%c51L$0eCjcG3!
"33T
 	 %T
 	 T4$'HD!%	-* 11+wQCCT((|WiPPPG & %)$ZE"s   DD,+D,c                 2    	 | j                  |t        d      S )Nr:   )r  XGLTYPE)clsru  s     rD   create_pax_global_headerz TarInfo.create_pax_global_header;  s    	--k7GLLrF   c                 T   	 |j                  d      }t        dt        |            D ]t  }dj                  |d |       }dj                  ||d        }t        |j	                  ||            t
        k  sNt        |j	                  ||            t        k  sq ||fS  t        d      )NrU  r-   zname is too long)splitrV   r>   r  r=   LENGTH_PREFIXr  r<   )r   r   rB   rC   
componentsr[   r  s          rD   r  zTarInfo._posix_split_nameA  s    	 ZZ_
q#j/* 	1AXXj!n-F88JqrN+D6==623}DHf56+E t|	1 /00rF   c                 j   	 | j                  d      t        t        fv }|r;t        | j                  dd      d|      }t        | j                  dd      d|      }nt	        dd||      }t	        dd||      }| j                  dt
              }|t        d      t	        | j                  dd      d	||      t        | j                  d
d      dz  d|      t        | j                  dd      d|      t        | j                  dd      d|      t        | j                  dd      d|      t        | j                  dd      d|      d|t	        | j                  dd      d	||      | j                  dt              t	        | j                  dd      d||      t	        | j                  dd      d||      ||t	        | j                  dd      d||      g}t        j                  dt        z  dj                  |            }	t        |	t         d        d   }
|	d d t        d|
z  d      z   |	dd  z   }	|	S )Nrr  rs  r   rP   rt  r   zTarInfo.type must not be Noner   r   r   r  r3   r4   r1   r  r2   s           ra  r  r5   r  r6   r  r   z%dsrF   iz%06o rR   i)getCHRTYPEBLKTYPErd   rE   ry  r<   r  ri   r   r  r  rn   r^   )r  rb   rB   rC   has_device_fieldsrs  rt  filetypepartsrk   rq  s              rD   r  zTarInfo._create_headerQ  s   	 !HHV,'0BB488J2Av>H488J2Av>H2q(F3H2q(F3H 88FG,<== $c8V<#f,a8"Av."Av.#R0!$b&1R(#x@HHWk*"%r8V<"%r8V<2&Xv>
$ kk%)+SXXe_=c9*+./2%4j5F!2G<<s45zI
rF   c                 p    	 t        t        |       t              \  }}|dkD  r| t        |z
  t        z  z  } | S )Nr   )rs   r>   r  r?   )payloadrz   r{   s      rD   _create_payloadzTarInfo._create_payload{  s>    	 #3w<;	q=	I-44GrF   c                     	 |j                  ||      t        z   }i }d|d<   ||d<   t        |      |d<   t        |d<   | j	                  |t
        ||      | j                  |      z   S )Nz././@LongLinkr   rr  r1   r  )r=   r?   r>   r  r  r   r  )r  r   rr  rB   rC   r  s         rD   r  zTarInfo._create_gnu_long_header  sy    	 {{8V,s2&VV4yV!W !!$hG##D)* 	*rF   c                    	 d}|j                         D ]  \  }}	 |j                  dd        d}|r|dz  }|j                         D ]  \  }}|j                  d      }|r|j                  |d      }n|j                  d      }t        |      t        |      z   dz   }d	x}	}
	 |t        t	        |
            z   }	|	|
k(  rn|	}
 |t        t	        |
      d
      dz   |z   dz   |z   dz   z  } i }d|d<   ||d<   t        |      |d<   t        |d<   | j                  |t        d
d      | j                  |      z   S # t        $ r d}Y  w xY w)NFr:   rS   TrF   s   21 hdrcharset=BINARY
r  r  r   rR          =   
z././@PaxHeaderr   rr  r1   r  r   )
r  r=   r  r>   r  r^   r  r  r   r  )r  ru  rr  rB   binarykeywordr  recordslrZ   rK   r  s               rD   r  z"TarInfo._create_pax_generic_header  s   	 )//1 	NGUWh/	 00G)//1 	VNGUnnW-G X/@AW-Gs5z)A-AIACFO6	 
 uSVW-4w>EMPUUUG!	V( 'VV7|V#W !!$gyI##G,- 	-I & s   D::E
	E
c                 n   	 t        |      dk(  rt        d      t        |      t        k7  rt        d      |j	                  t
              t        k(  rt        d      t        |dd       }|t        |      vrt        d       |        }t        |dd ||      |_        t        |dd	       |_        t        |d	d
       |_        t        |d
d       |_        t        |dd       |_        t        |dd       |_        ||_        |dd |_        t        |dd ||      |_        t        |dd ||      |_        t        |dd ||      |_        t        |dd       |_        t        |dd       |_        t        |dd ||      }|j$                  t0        k(  r&|j                  j3                  d      rt4        |_        |j$                  t6        k(  rxd}g }t9        d      D ]@  }		 t        |||dz          }
t        ||dz   |dz          }|j=                  |
|f       |dz  }B t?        |d         }t        |dd       }|||f|_         |jC                         r |j                  jE                  d      |_        |r)|j$                  tF        vr|dz   |j                  z   |_        |S # t:        $ r Y  w xY w)Nr   zempty headerztruncated headerzend of file header      zbad checksumr   l   t   |         i  i	  i)  iI  iQ  iY  i  rU  i  r   r     i  i  i  )$r>   r   r  r   countr?   r   r\   rn   rY   rL   r   r   r3   r4   r1   r2   rq  rr  ra  r5   r6   rs  rt  AREGTYPEr   r  GNUTYPE_SPARSErV   r<   r  boolrv  r_  rstrip	GNU_TYPES)r  rk   rB   rC   rq  objr  r   structsr[   r  numbytes
isextendedorigsizes                 rD   frombufzTarInfo.frombuf  s   	s8q=">22s8y &'9::99S>Y& !566SS\"c**$^44es1Sz8V4s3s|$c#cl#c#cl#s3s|$C%	
s3<3s3<6:Ch7	Ch7	3s3<(3s3<(SS\8V4 88xCHH$5$5c$:CH
 88~%CG1X  Sr!23F"3sRxb#9:H 12r	 c#hJ3s3<(H#*J"AC 99;xxs+CH chhi/|chh.CH
 " s   %%J''	J43J4c                     	 |j                   j                  t              }| j                  ||j                  |j
                        }|j                   j                         t        z
  |_        |j                  |      S r   )	r   rt   r  r  rB   rC   r   r  _proc_member)r  r;  rk   r  s       rD   fromtarfilezTarInfo.fromtarfile  sc    	 oo""9-kk#w//@__))+i7
((rF   c                    	 | j                   t        t        fv r| j                  |      S | j                   t        k(  r| j                  |      S | j                   t        t        t        fv r| j                  |      S | j                  |      S r   )rr  r  r  _proc_gnulongr  _proc_sparser  r  SOLARIS_XHDTYPE	_proc_pax_proc_builtin)r   r;  s     rD   r  zTarInfo._proc_member  s}    	 99)+;<<%%g..YY.($$W--YY7G_==>>'**%%g..rF   c                    	 |j                   j                         | _        | j                  }| j                         s| j                  t
        vr|| j                  | j                        z  }||_        | j                  |j                  |j                  |j                         | j                         r | j                  j                  d      | _        | S NrU  )r   r   r8  r]  rr  SUPPORTED_TYPES_blockr1   r  _apply_pax_inforu  rB   rC   r_  r   r  )r   r;  r  s      rD   r  zTarInfo._proc_builtin*  s    	 #??//1!!::<499O;dkk$)),,F 	W00'2B2BGNNS ::<		((-DIrF   c                 H   	 |j                   j                  | j                  | j                              }	 | j	                  |      }| j                  |_        | j                  t        k(  r't        ||j                  |j                        |_        n9| j                  t        k(  r&t        ||j                  |j                        |_        |j#                         r |j                  j%                  d      |_        |S # t
        $ r}t        t        |            d d }~ww xY wr  )r   rt   r  r1   r  r   r   r  r  rr  r  rL   rB   rC   r   r  ra  r_  removesuffix)r   r;  rk   nextr  s        rD   r  zTarInfo._proc_gnulong@  s    	 oo""4;;tyy#9:	:##G,D kk99((C!1!17>>BDIYY**W%5%5w~~FDM ::<		..s3DI!  	:'A/T9	:s   C> >	D!DD!c                    	 | j                   \  }}}| ` |r|j                  j                  t              }d}t	        d      D ]D  }	 t        |||dz          }t        ||dz   |dz          }	|r|	r|j                  ||	f       |dz  }F t        |d         }|r|| _	        |j                  j                         | _        | j                  | j                  | j                        z   |_        || _        | S # t        $ r Y  yw xY w)Nr      r  r  i  )rv  r   rt   r  rV   r\   r<   r  r  r9  r   r8  r  r1   r  )
r   r;  r  r  r  rk   r   r[   r  r  s
             rD   r  zTarInfo._proc_sparse[  s   	 )-(<(<%X  //&&y1CC2Y  Sr!23F"3sRxb#9:H hNNFH#56r	 c#hJ  "??//1))DKK		,BB	 " s   %C66	DDc                 X   	 |j                   j                  | j                  | j                              }| j                  t
        k(  r|j                  }n|j                  j                         }t        j                  d|      }|#|j                  d      j                  d      |d<   |j                  d      }|dk(  r|j                  }nd}t        j                  d      }d}|j                  ||      x}r|j!                         \  }	}
t#        |	      }	|	dk(  rt%        d      ||j'                  d	      dz   |j)                  d      |	z   dz
   }| j+                  |
dd|j,                        }
|
t.        v r)| j+                  |||j                  |j,                        }n| j+                  |dd|j,                        }|||
<   ||	z  }|j                  ||      x}r	 | j1                  |      }d
|v r| j9                  ||       nSd|v r| j;                  |||       n;|j                  d      dk(  r'|j                  d      dk(  r| j=                  |||       | j                  t>        t@        fv r|jC                  ||j                  |j,                         | jD                  |_"        d|v rS|jF                  }|jI                         s|j                  tJ        vr||j                  |j                        z  }||_"        |S # t2        $ r}t5        t7        |            d d }~ww xY w)Ns   \d+ hdrcharset=([^\n]+)\nr-   r:   
hdrcharsetBINARYs   (\d+) ([^=]+)=r   rU   r.   GNU.sparse.mapGNU.sparse.sizezGNU.sparse.major1zGNU.sparse.minorrT   r1   )&r   rt   r  r1   rr  r  ru  r  researchgrouprJ   r  rB   compilematchgroupsrW   rY   r   r0  _decode_pax_fieldrC   PAX_NAME_FIELDSr  r   r   r  _proc_gnusparse_01_proc_gnusparse_00_proc_gnusparse_10r  r  r  r  r8  r]  r  )r   r;  rk   ru  r  r  rB   regexr   rA   r  r  r  r  r  s                  rD   r  zTarInfo._proc_paxw  s   	 oo""4;;tyy#9:
 99!--K!--224K 		7=(-A(=(=g(FK%
 !__\2
!''HH 

-.{{3,,e,#llnOFG[F{()9::		!q(Q&)@1)DEE ,,WgwNN$G/)..uh@P@P( ..ugw( $)K 6MC1 {{3,,e,6	:##G,D
 {*##D+6+-##D+s;__/0C7KOOL^<_cf<f##D+w?99/22  g.>.>O++DK$ ))::<499O#Cdkk$))44F!'=  	:'A/T9	:s   "L 	L)L$$L)c                 R   	 g }t        j                  d|      D ]+  }|j                  t        |j	                  d                   - g }t        j                  d|      D ]+  }|j                  t        |j	                  d                   - t        t        ||            |_        y )Ns   \d+ GNU.sparse.offset=(\d+)\nr-   s   \d+ GNU.sparse.numbytes=(\d+)\n)r  finditerr  rW   r  listzipr9  )r   r  ru  rk   offsetsr  r  s          rD   r  zTarInfo._proc_gnusparse_00  s    	[[!BCH 	0ENN3u{{1~./	0[[!DcJ 	1EOOCA/0	13w12rF   c           	          	 |d   j                  d      D cg c]  }t        |       }}t        t        |d d d   |dd d               |_        y c c}w )Nr  ,r.   r-   )r  rW   r	  r
  r9  )r   r  ru  xr9  s        rD   r  zTarInfo._proc_gnusparse_01  sZ    	"-.>"?"E"Ec"JKQ#a&KK3vcc{F14a4L9: Ls   Ac           	         	 d }g }|j                   j                  t              }|j                  dd      \  }}t	        |      }t        |      |dz  k  rgd|vr"||j                   j                  t              z  }|j                  dd      \  }}|j                  t	        |             t        |      |dz  k  rg|j                   j                         |_        t        t        |d d d   |dd d               |_        y )Nr  r-   r.   )r   rt   r  r  rW   r>   r  r   r8  r	  r
  r9  )r   r  ru  r;  fieldsr9  rk   numbers           rD   r  zTarInfo._proc_gnusparse_10  s    	oo""9-iiq)V&kFQJ&Cw++I66))E1-KFCMM#f+&	 &kFQJ&
 #??//13vcc{F14a4L9:rF   c                    	 |j                         D ]  \  }}|dk(  rt        | d|       |dk(  rt        | dt        |             5|dk(  rt        | dt        |             Q|t        v sZ|t        v r	 t	        |   |      }|dk(  r|j                  d      }t        | ||        |j                         | _        y # t
        $ r d}Y Hw xY w)NzGNU.sparse.namer/   r  r1   zGNU.sparse.realsizer   rU  )	r  setattrrW   
PAX_FIELDSPAX_NUMBER_FIELDSr<   r  r  ru  )r   ru  rB   rC   r  r  s         rD   r  zTarInfo._apply_pax_info  s    	 *//1 	.NGU++fe,--fc%j111fc%j1J&//" 1' :5 A f$!LL-Egu-	." '++- & " !"s   5B>>CCc                 l    	 	 |j                  |d      S # t        $ r |j                  ||      cY S w xY w)NrS   )rJ   UnicodeDecodeError)r   r  rB   fallback_encodingfallback_errorss        rD   r  zTarInfo._decode_pax_field  sA    		D<<(33! 	D<< 1?CC	Ds    33c                 J    	 t        |t              \  }}|r|dz  }|t        z  S )Nr-   )rs   r  )r   r  rz   r{   s       rD   r  zTarInfo._block  s1    	 #5)4	aKF	!!rF   c                 (    	 | j                   t        v S r   )rr  REGULAR_TYPESr   s    rD   r]  zTarInfo.isreg$  s    >yyM))rF   c                 $    	 | j                         S r   )r]  r   s    rD   isfilezTarInfo.isfile(  s    >zz|rF   c                 *    	 | j                   t        k(  S r   )rr  r  r   s    rD   r_  zTarInfo.isdir,      +yyG##rF   c                 *    	 | j                   t        k(  S r   )rr  SYMTYPEr   s    rD   r`  zTarInfo.issym0  s    /yyG##rF   c                 *    	 | j                   t        k(  S r   )rr  LNKTYPEr   s    rD   r^  zTarInfo.islnk4  r   rF   c                 *    	 | j                   t        k(  S r   )rr  r  r   s    rD   ischrzTarInfo.ischr8  s    2yyG##rF   c                 *    	 | j                   t        k(  S r   )rr  r  r   s    rD   isblkzTarInfo.isblk<  s    .yyG##rF   c                 *    	 | j                   t        k(  S r   )rr  FIFOTYPEr   s    rD   isfifozTarInfo.isfifo@  s    &yyH$$rF   c                     | j                   d uS r   )r9  r   s    rD   issparsezTarInfo.issparseD  s    {{$&&rF   c                 >    	 | j                   t        t        t        fv S r   )rr  r  r  r*  r   s    rD   isdevzTarInfo.isdevG  s    MyyWgx888rF   r   )r   )3r   r   r   dict	__slots__r   propertyr/   setterr0   r  r  r   r  r   r   r  r  r  r  classmethodr  r  staticmethodr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r]  r  r_  r`  r^  r&  r(  r+  r-  r/  r   rF   rD   r   r   M  s     
,
!
 G
 H	

  
 -
 $
>
F
 
 
 *
  *!
" /#
$ 5%
&9'
* .+
, -
. /
0 1
I60   
[[    __! !O %eeuE88 *HEV /"IM8Qt M M
  ' 'R   * *  0- 0-d < <| ) )(/,68bH	3;; ..D"*$$$$$%'9rF   r   c                      e Zd Z	 dZdZdZdZeZe	Z
dZeZeZdZ	 	 	 	 d7dZedddefd       Zed8d       Zed9d	       Zed9d
       Zed:d       ZdddddZd Zd Zd Zd Zd;dZd<dddZd=dddZ d>dZ!d Z"d?ddddZ#d@ddddZ$d Z%d  Z&d! Z'd" Z(d# Z)	 	 dAd$Z*d% Z+d& Z,d' Z-d( Z.d) Z/d* Z0d+ Z1d, Z2d- Z3d. Z4dBd/Z5d0 Z6d>d1Z7d2 Z8d3 Z9d4 Z:d5 Z;d6 Z<y)Cr   r   Fr-   Nr   c                    	 ddddd}||vrt        d      || _        ||   | _        |sZ| j                  dk(  r-t        j                  j                  |      sd| _        d| _        t        || j                        }d	| _        n^|8t        |d
      r,t        |j                  t        t        f      r|j                  }t        |d      r|j                  | _        d| _        |rt        j                  j                  |      nd | _
        || _        ||| _        ||| _        ||| _        ||| _        ||| _        |	| _        |
| j                  t*        k(  r|
| _        ni | _        ||| _        ||| _        || _        d	| _        g | _        d	| _        | j                  j;                         | _        i | _        	 | j                  dk(  rd | _         | jC                         | _         | j                  dk(  r^	 | j                  jE                  | j<                         	 | j                   jG                  |       }| j6                  jI                  |       ]| j                  dv rd| _        | j,                  rm| j                   jQ                  | j,                  jS                               }| j                  jU                  |       | xj<                  tW        |      z  c_        y y y # tJ        $ r( | j                  jE                  | j<                         Y tL        $ r}tO        t        |            d d }~ww xY w#  | j                  s| j                  jY                          d| _         xY w)Nrbzr+bwbxbr   ar   r  !mode must be 'r', 'a', 'w' or 'x'r<  r   Fr   r   Tr   r<  r   r  )-r<   r   _moder   r/   exists	bltn_openr   r   r  r   r  r^   abspathr   rb   r<  dereferenceignore_zerosrB   rC   r   ru  debug
errorlevelcopybufsizer   members_loadedr   r  inodesfirstmemberr  r   r  r  r   r   r   r  r  ru   r>   r   )r   r   r   r   rb   r<  rC  rD  rB   rC   ru  rE  rF  rG  modesr  rk   s                    rD   r   zTarFile.__init__h  s   	 T=u@AA	4[
yyCt(<	!
djj1G$D&!97<<#u6||w'$\\
#D-1BGGOOD)t	  DK"DL"*D# ,D$DM"t{{j'@*D!DDJ!(DO 'll'')	yyC#' #'99; yyC LL%%dkk2:"&,,":":4"@++G4	  yyO+###,,??@P@P@U@U@WXCLL&&s+KK3s8+K $ , * ))$++6& :'A/T9:	##""$DKs>   ?A L<  6K' BL< '.L9L< L9L44L99L< <0M,c                     	 |s|st        d      |dv rz fd}g }t         j                  |      D ]:  }t          j                  |         }	||j	                         }
	  |	|d|fi |c S  dj                  |      }t        d	|       d
|v rb|j                  d
d      \  }}|xs d}|xs d}| j                  v rt          j                  |         }	nt        d|z         |	|||fi |S d|v rg|j                  dd      \  }}|xs d}|xs d}|dvrt        d      |j                  dd      }t        ||||||      }	   |||fi |}d|_        |S |dv r  j                  |||fi |S t        d      # t
        t        f$ r5}|j                  d| d|       ||j                  
       Y d }~d }~ww xY w#  |j                           xY w)Nznothing to open)r   r:*c                 (    j                   |    dk(  S )Ntaropen)	OPEN_METH)r   r  s    rD   not_compressedz$TarFile.open.<locals>.not_compressed  s    }}X.);;rF   )keyr   z	- method z: 
z'file could not be opened successfully:
:r-   r   r   |r   zmode must be 'r' or 'w'r   	   Fr>  zundiscernible mode)r<   sortedrQ  r   r   r   r	   r  r   r  r  popr   r   r   rP  )r  r   r   r   ry   kwargsrR  
error_msgsr   func	saved_posr  error_msgs_summaryfilemoder   streamr  s   `                rD   r   zTarFile.open  s>   !	F G.//<<J"3==nE 
sCMM($;<& 'Ic7=f==
 "&:!6FGYFZ[\\D[!%C!3Hh3H(5H 3==(sCMM($;<&'Dx'OPPh:6::D[!%C!3Hh3H(5Hz) !:;;"JJ:MT8Xw*,Fh9&9 "AMH_$3;;tT7=f==-..W "#34 %%	(2aU&CD*Y/	Ds$   #
FG G	*GG	Gc                 8    	 |dvrt        d       | |||fi |S )Nr;  r=  )r<   )r  r   r   r   rZ  s        rD   rP  zTarFile.taropen7  s0    	++@AA4w1&11rF   c                    	 |dvrt        d      	 ddlm} 	  |||dz   ||      }	  | j                  |||fi |}d	|_	        |S # t        $ r t	        d      d w xY w# t
        $ r}||dk(  rt        d      | d }~ww xY w# t
        $ r'}|j                          |dk(  rt        d      | d }~w |j                           xY w)
Nr   r   r  mode must be 'r', 'w' or 'x'r   )GzipFilezgzip module is not availabler|   r   r   F)
r<   gzipre  r   r	   r   r   rP  r   r   )	r  r   r   r   r   rZ  re  r  r  s	            rD   gzopenzTarFile.gzopen?  s    	 &;<<	M%	tTCZHG		D$:6:A +  	M"#ABL	M
  	"ts{ 129	  	MMOs{ 129	MMOs9   A A B A	B(A<<B	C"B//Cc                 R   	 |dvrt        d      	 ddlm}  ||xs |||      }	  | j
                  |||fi |}d	|_
        |S # t        $ r t	        d      d w xY w# t        t        f$ r'}|j                          |dk(  rt        d      | d }~w |j                           xY w)
Nrc  rd  r   )BZ2Filer   )r   r   znot a bzip2 fileF)r<   r   ri  r   r	   rP  r   EOFErrorr   r   r   )	r  r   r   r   r   rZ  ri  r  r  s	            rD   bz2openzTarFile.bz2open`  s    	 &;<<	L# '/T4}M		D$:6:A !  	L"#@AtK	L " 	MMOs{ 23:	MMOs"   A A AB&."BB&c                 N   	 |dvrt        d      	 ddlm}m}  ||xs |||      }	  | j                  |||fi |}d	|_
        |S # t        $ r t        d      d w xY w# |t        f$ r'}	|j                          |dk(  rt        d      |	 d }	~	w |j                           xY w)
Nrc  rd  r   )LZMAFiler   r   )presetr   znot an lzma fileF)r<   r   rm  r   r   r	   rP  rj  r   r   r   )
r  r   r   r   rn  rZ  rm  r   r  r  s
             rD   xzopenzTarFile.xzopen|  s    	 &;<<	M0 7?dD@		D$:6:A !  	M"#ABL	M 8$ 	MMOs{ 23:	MMOs"   A A! A!B$,"BB$rP  rg  rk  ro  )r   r   r   r   c                    	 | j                   ry d| _         	 | j                  dv r| j                  j                  t        t
        dz  z         | xj                  t
        dz  z  c_        t        | j                  t              \  }}|dkD  r)| j                  j                  t        t        |z
  z         | j                  s| j                  j                          y y # | j                  s| j                  j                          w w xY w)NTr>  r.   r   )r   r   r   ru   r?   r  r  rs   
RECORDSIZEr   r   )r   rz   r{   s      rD   r   zTarFile.close  s    	 ;;	%yyO+""3)a-#89	A. %+4;;
$C!	q=LL&&sj9.D'EF##""$ $4##""$ $s   BC )Dc                 h    	 | j                  |j                  d            }|t        d|z        |S )NrU  zfilename %r not found)
_getmemberr  KeyError)r   r   r<  s      rD   	getmemberzTarFile.getmember  s;    	
 //$++c"23?2T9::rF   c                 t    	 | j                          | j                  s| j                          | j                  S r   )_checkrI  _loadrH  r   s    rD   
getmemberszTarFile.getmembers  s,    	 	||JJL||rF   c                 ^    	 | j                         D cg c]  }|j                   c}S c c}w r   )ry  r   )r   r<  s     rD   getnameszTarFile.getnames  s(    	 -1OO,=>>>>s   *c                 0   	 | j                  d       ||j                  }||}t        j                  j	                  |      \  }}|j                  t        j                  d      }|j                  d      }| j                         }| |_	        |8| j                  st        j                  |      }n9t        j                  |      }n#t        j                  |j                               }d}|j                  }t        j                   |      r|j"                  |j$                  f}	| j                  sE|j&                  dkD  r6|	| j(                  v r(|| j(                  |	   k7  rt*        }
| j(                  |	   }nt,        }
|	d   r|| j(                  |	<   nt        j.                  |      rt0        }
nt        j2                  |      rt4        }
njt        j6                  |      rt8        }
t        j:                  |      }n9t        j<                  |      rt>        }
nt        j@                  |      rtB        }
ny ||_        ||_"        |jF                  |_$        |jJ                  |_&        |
t,        k(  r|jN                  |_(        nd|_(        |jR                  |_*        |
|_+        ||_,        tZ        r(	 t[        j\                  |jH                        d   |_/        tb        r(	 tc        jd                  |jL                        d   |_3        |
t>        tB        fv rhti        t        d      rXti        t        d      rHt        jj                  |jl                        |_7        t        jp                  |jl                        |_9        |S # t`        $ r Y w xY w# t`        $ r Y w xY w)NawxrU  r   r-   r   majorminor):rw  r   r   r/   
splitdriver   rY  rZ  r<  r;  rC  lstatstatfstatfilenost_modeS_ISREGst_inost_devst_nlinkrJ  r$  ry  S_ISDIRr  S_ISFIFOr*  S_ISLNKr"  readlinkS_ISCHRr  S_ISBLKr  r   st_uidr3   st_gidr4   st_sizer1   st_mtimer2   rr  ra  pwdgetpwuidr5   rt  grpgetgrgidr6   r   r~  st_rdevrs  r  rt  )r   r   arcnamer   drvr<  statresra  stmdinoderr  s              rD   
gettarinfozTarFile.gettarinfo  s   	 	E <<D
 ?Gww))'2W//"&&#...% ,,. ?##((4.''$-hhw~~/0G<<^^W^^4E##(8(81(<T[[(WE8J-J ;;u- 8)0DKK&\\$D]]4 D\\$D{{4(H\\$D\\$D nnnn7?"??GLGL((# #W[[ 9! <  #W[[ 9! < GW%%r7#G(<#%88GOO#< #%88GOO#<   
  s$   -'M: 'N	 :	NN		NN)rH  c                   	 | j                          || }|D ]  }|r&|j                  t        d       n(t        t        j                  |j                               t        |j
                  xs |j                  d|j                  xs |j                         |j                         s|j                         r(t        dd|j                  |j                  fz  z         nt        d|j                  z         |j                  t        d       n.t        dt        j                   |j                        d d z         t        |j"                  |j%                         rdnd	z          |rP|j'                         rt        d
|j(                  z          |j+                         rt        d|j(                  z          t-                 y )Nz
??????????rU  z%10sz%d,%dz%10dz????-??-?? ??:??:??z%d-%02d-%02d %02d:%02d:%02dr   r   z-> zlink to )rw  r   r   r  r_  r5   r3   r6   r4   r&  r(  rs  rt  r1   r2   r   	localtimer   r_  r`  ra  r^  r   )r   verboserH  r<  s       rD   r	  zTarFile.list6  sp   	
 	?G 	G<<'-gll ;<w}}'C'C'.}}'C'CE F==?gmmo$(8(8':J:J'KK!M N   56==( 56 ="&.."?"C!D E w}}BGH==?(8(8 89==?
W-=-= =>G5	rF   filterc                d   	 | j                  d       ||}| j                  Bt        j                  j	                  |      | j                  k(  r| j                  dd|z         y | j                  d|       | j                  ||      }|| j                  dd|z         y |  ||      }|| j                  dd|z         y |j                         r(t        |d      5 }| j                  ||       d d d        y |j                         r| j                  |       |rut        t        j                  |            D ]S  }| j                  t        j                  j                  ||      t        j                  j                  ||      ||       U y y | j                  |       y # 1 sw Y   y xY w)	Nr}  r.   ztarfile: Skipped %rr-   ztarfile: Unsupported type %rtarfile: Excluded %rr8  r  )rw  r   r   r/   rB  _dbgr  r]  rA  addfiler_  rX  listdiraddr  )r   r   r  	recursiver  r<  fs          rD   r  zTarFile.add\  s   	 	E?G 99 RWW__T%:dii%GIIa.56		!T //$0?IIa7$>? WoG		!3d:; ==?4& )!Wa() ) ]]_LL!

4 01 6AHHRWW\\$2BGGLL!4L%f  66  LL!) )s   F&&F/c                    	 | j                  d       t        j                  |      }|j                  | j                  | j                  | j
                        }| j                  j                  |       | xj                  t        |      z  c_        | j                  }|t        || j                  |j                  |       t        |j                  t              \  }}|dkD  r.| j                  j                  t        t        |z
  z         |dz  }| xj                  |t        z  z  c_        | j                   j#                  |       y )Nr}  )ry   r   r-   )rw  r  r  rb   rB   rC   r   ru   r  r>   rG  rr   r1   rs   r  r?   rH  r  )r   r<  r   rk   ry   rz   r{   s          rD   r  zTarFile.addfile  s    	
 	E))G$mmDKKD3s3x  w||WM &w||Y ?FI1}""3)i*?#@A!KK6I--KG$rF   c                    |K| j                   }| t        j                  dt               t        S t        |t              rt        d      |S t        |      r|S 	 t        |   S # t        $ r t        d|d      d w xY w)NzPython 3.14 will, by default, filter extracted tar archives and reject files or modify their metadata. Use the filter argument to control this behavior.zrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.zfilter z
 not found)extraction_filterwarningswarnDeprecationWarningr   r  r  	TypeErrorcallable_NAMED_FILTERSrt  r<   )r   r  s     rD   _get_filter_functionzTarFile._get_filter_function  s    >++F~J '	(
 ,+&#&67 7 MFM	G!&)) 	Gwvj
;<$F	Gs   A% %A?)numeric_ownerr  c                B   	 g }| j                  |      }|| }|D ]]  }| j                  |||      }||j                         r|j                  |       | j	                  |||j                          |       _ |j                  d d       |D ]e  }t        j                  j                  ||j                        }		 | j                  ||	|       | j                  ||	       | j                  ||	       g y # t        $ r}
| j                  |
       Y d }
~
d }
~
ww xY w)N	set_attrsr  c                     | j                   S r   r|  )r<  s    rD   <lambda>z$TarFile.extractall.<locals>.<lambda>  s
    qvv rF   T)rS  reverse)r  )r  _get_extract_tarinfor_  r  _extract_onesortr   r/   r  r   chownutimechmodr   _handle_nonfatal_error)r   r/   rH  r  r  directoriesfilter_functionrc  r<  dirpathr  s              rD   
extractallzTarFile.extractall  s&   	 33F;?G 
	;F//NG}} ""7+gt7==?7J,9  ;
	; 	-t< # 	/Gggll46G/

7G=
I

7G,

7G,	/   /++A../s   ?8C::	DDDc                |    	 | j                  |      }| j                  |||      }|| j                  ||||       y y r   )r  r  r  )r   rc  r/   r  r  r  r  r<  s           rD   extractzTarFile.extract  sL    	 33F;++FOTJgtYF rF   c                    	 t        |t              r| j                  |      }n|}|}	  |||      }| | j                  dd|j                  z         y |j                         rDt        j                  |      }t        j                  j                  ||j                        |_        |S # t        t        f$ r}| j                  |       Y d }~d }~wt        $ r}| j                  |       Y d }~d }~ww xY w)Nr.   r  )r  r  ru  r   r   _handle_fatal_errorr   r  r  r   r^  r  r   r/   r  ra  rw  )r   rc  r  r/   r<  
unfilteredr  s          rD   r  zTarFile._get_extract_tarinfo  s    Nfc"nnV,GG
	+%gt4G
 ?IIa/*//AB==?ii(G#%77<<g6F6F#GG  % 	($$Q'' 	+''**	+s#   	B* *C69CC6C11C6c                 6   	 | j                  d       	 | j                  |t        j                  j	                  ||j
                        ||       y # t        $ r}| j                  |       Y d }~y d }~wt        $ r}| j                  |       Y d }~y d }~ww xY w)Nr   r  )
rw  _extract_memberr   r/   r  r   r   r  r   r  )r   r<  r/   r  r  r  s         rD   r  zTarFile._extract_one	  s    3C	+  "'',,tW\\*J+4/< ! >  	($$Q'' 	+''**	+s#   =A 	BA11B=BBc                 P    	 | j                   dkD  r | j                  dd|z         y )Nr-   tarfile: %s)rF  r  r   r  s     rD   r  zTarFile._handle_nonfatal_error#	  s'    K??QIIa*+rF   c                 N   	 | j                   dkD  r t        |t              rY|j                   | j	                  dd|j
                  z         y | j	                  dd|j
                  d|j                         y | j	                  ddt        |      j                  d|       y )Nr   r-   r  z	tarfile: r   )rF  r  r   filenamer  strerrorrr  r   r  s     rD   r  zTarFile._handle_fatal_error*	  sw    ???Q7#zz!		!]QZZ78		!QZZHIIIaT!W-=-=qABrF   c                    	 | j                  d       t        |t              r| j                  |      }n|}|j	                         s|j
                  t        vr| j                  | |      S |j                         s|j                         rEt        | j                  t              rt        d      | j                  | j                  |            S y )Nr   z'cannot extract (sym)link as file object)rw  r  r  ru  r]  rr  r  
fileobjectr^  r`  r   r   r
   extractfile_find_link_target)r   rc  r<  s      rD   r  zTarFile.extractfile6	  s    	 	Cfc"nnV,GG==?gll/A??411]]_$,,0 ""KLL ''(>(>w(GHH rF   c                    	 |j                  d      }|j                  dt        j                        }t        j                  j                  |      }|r4t        j                  j                  |      st        j                  |       |j                         s|j                         r,| j                  d|j                  d|j                         n| j                  d|j                         |j                         r| j                  ||       n|j                         r| j!                  ||       n|j#                         r| j%                  ||       n|j'                         s|j)                         r| j+                  ||       nj|j                         s|j                         r| j-                  ||       n7|j.                  t0        vr| j3                  ||       n| j                  ||       |rI| j5                  |||       |j                         s%| j7                  ||       | j9                  ||       y y y )NrU  r-   z -> )r  r   r   rY  r/   rb  r@  makedirsr^  r`  r  r   ra  r]  makefiler_  makedirr+  makefifor&  r(  makedevmakelinkrr  r  makeunknownr  r  r  )r   r<  
targetpathr  r  	upperdirss         rD   r  zTarFile._extract_memberV	  s   	  &&s+
''RVV4
 GGOOJ/	RWW^^I6 KK	"==?gmmoIIaw||W5E5EFGIIa&==?MM':.]]_LL*-^^MM':.]]_LL*-]]_MM':.\\0Wj1MM':.JJw
M:==?

7J/

7J/ # rF   c                     	 	 |j                   t        j                  |       y t        j                  |d       y # t        $ r Y y w xY w)Ni  )r   r   mkdirFileExistsErrorr   r<  r  s      rD   r  zTarFile.makedir	  sD    			||#$ U+ 		s   !< < 	AAc           	         	 | j                   }|j                  |j                         | j                  }t	        |d      5 }|j
                  d|j
                  D ])  \  }}|j                  |       t        |||t        |       + |j                  |j                         |j                          nt        |||j                  t        |       d d d        y # 1 sw Y   y xY w)Nr9  )
r   r   r8  rG  rA  r9  rr   r   r1   truncate)r   r<  r  sourcery   targetr  r1   s           rD   r  zTarFile.makefile	  s    	G''(""z4( 	NF~~)$+NN JLFDKK'iIJ GLL)!FFGLL)WM	N 	N 	Ns   BCC!c                 h    	 | j                  ||       | j                  dd|j                  z         y )Nr-   z9tarfile: Unknown file type %r, extracted as regular file.)r  r  rr  r  s      rD   r  zTarFile.makeunknown	  s8    	 	gz*		! 24;LLA 	BrF   c                 f    	 t        t        d      rt        j                  |       y t        d      )Nmkfifozfifo not supported by system)r   r   r  r   r  s      rD   r  zTarFile.makefifo	  s)    	2x IIj!=>>rF   c                 h   	 t        t        d      rt        t        d      st        d      |j                  }|d}|j	                         r|t
        j                  z  }n|t
        j                  z  }t        j                  ||t        j                  |j                  |j                               y )Nmknodr  z'special devices not supported by systemrW  )r   r   r   r   r(  r  S_IFBLKS_IFCHRr  r  rs  rt  )r   r<  r  r   s       rD   r  zTarFile.makedev	  s    	r7#72y+AHII||<D==?DLL DDLL D
TG,,g.>.>?	ArF   c                 <   	 	 |j                         rUt        j                  j                  |      rt        j                  |       t        j
                  |j                  |       y t        j                  j                  |j                        r!t        j                  |j                  |       y | j                  | j                  |      |       y # t        $ r> 	 | j                  | j                  |      |       Y y # t        $ r t        d      d w xY ww xY w)Nz%unable to resolve link inside archive)r`  r   r/   lexistsunlinksymlinkra  r@  rw  linkr  r  symlink_exceptionrt  r   r  s      rD   r  zTarFile.makelink	  s    		V}}77??:.IIj)

7++Z877>>'"6"67GGG00*=(()?)?)H)35  	VV$$T%;%;G%D%/1 V"#JKQUUV		Vs+   A$C (A	C 2!C 	D!DDDc                    	 t        t        d      rt        j                         dk(  r|j                  }|j                  }|sj	 t
        r.|j                  r"t        j                  |j                        d   }	 t        r.|j                  r"t        j                  |j                        d   }|d}|d}	 |j                         r(t        t        d      rt        j                  |||       y t        j                  |||       y y y # t        $ r Y w xY w# t        $ r Y uw xY w# t        $ r}t!        d      |d }~ww xY w)Ngeteuidr   r.   rH   lchownzcould not change owner)r   r   r  r4   r3   r  r6   getgrnamrt  r  r5   getpwnamr`  r  r  r   r   )r   r<  r  r  gur  s          rD   r  zTarFile.chown	  s   	
 2y!bjjla&7AA w}}LL7:w}}LL7: yyD==?wr8'<IIj!Q/HHZA./ '8!   
     D"#;<!CDsB   4D 94D 67D& .D& 	DD	D#"D#&	E /D;;E c                     	 |j                   y 	 t        j                  ||j                          y # t        $ r}t	        d      |d }~ww xY w)Nzcould not change mode)r   r   r  r   r   )r   r<  r  r  s       rD   r  zTarFile.chmod
  sI    	<<	?HHZ. 	?67Q>	?s    1 	AAAc                     	 |j                   }|y t        t        d      sy 	 t        j                  |||f       y # t        $ r}t        d      |d }~ww xY w)Nr  z"could not change modification time)r2   r   r   r  r   r   )r   r<  r  r2   r  s        rD   r  zTarFile.utime
  s]    	=r7#	LHHZ%0 	LCD!K	Ls   < 	AAAc                 N   	 | j                  d       | j                  | j                  }d | _        |S | j                  | j                  j	                         k7  r^| j                  dk(  ry | j                  j                  | j                  dz
         | j                  j                  d      st        d      d }	 	 | j                  j                  |       }	 || j0                  j3                  |       |S d| _        |S # t        $ rU}| j                  r?| j                  dd| j                  |fz         | xj                  t        z  c_        Y d }~Y d }~d }~wt        $ rz}| j                  r?| j                  dd| j                  |fz         | xj                  t        z  c_        Y d }~| j                  dk(  rt        t        |            d Y d }~d }~wt         $ r | j                  dk(  rt        d      d Y -t"        $ r/}| j                  dk(  rt        t        |            d Y d }~_d }~wt$        $ r}t        t        |            d d }~wt&        $ r@}	 dd l}t+        ||j,                        rt        d	|       d |# t.        $ r |w xY wd }~ww xY w)
Nrar   r-   rp   Tr.   z0x%X: %sz
empty filezzlib error: )rw  rK  r  r   r   r   rt   r   r<  r  r   rD  r  r  rY   r  r   r   r   	Exceptionr   r  r   r   rH  r  rI  )r   mr<  r  r   s        rD   r  zTarFile.next
  sW   	 	D'  A#DH ;;$,,++--{{aLLdkkAo.<<$$Q' 899 ,,2248< LL(   DLI " $$IIat{{A.>!>?KK9,K % & 6$$IIat{{A.>!>?KK9,K[[A%#CF+5 &# <;;!##L1t; $' 6;;!##CF+5 $( 2A'T1 !!TZZ0',qc(:;E" Gsb   =D 	J$
AEJ$&AG1$G'J$J$$H77J$IJ$%+JJJJ$c                    	 | j                         }d}|	 |j                  |      }|d | }|rt        j                  j                  |      }t        |      D ]a  }|r|j                  |j                  k(  rd}!|r*t        j                  j                  |j                        }n|j                  }||k(  s_|c S  |rt        |      y # t        $ r d}Y w xY w)NFT)	ry  indexr<   r   r/   normpathreversedr  r   )	r   r   r<  	normalizerH  skippingr  rc  member_names	            rD   rs  zTarFile._getmemberZ
  s    	 //# *g. "&5/77##D)Dw' 	F>>V]]2$H gg..v{{;$kk{"	 W%% 1      s   C CCc                 X    	 | j                         	 | j                         d| _        y r  )r  rI  r   s    rD   rx  zTarFile._load
  s-    	 iik% iik%rF   c                     	 | j                   r"t        d| j                  j                  z        |'| j                  |vrt        d| j                  z        y y )Nz%s is closedzbad operation for mode %r)r   r   r=  r   r   )r   r   s     rD   rw  zTarFile._check
  sX    	 ;;.4>>+B+BBCC		 55		ABB !6rF   c                 .   	 |j                         rQdj                  t        d t        j                  j                  |j                        |j                  f            }d }n|j                  }|}| j                  ||d      }|t        d|z        |S )NrU  T)r<  r	  zlinkname %r not found)
r`  r  r  r   r/   rb  r   ra  rs  rt  )r   r<  ra  limitrc  s        rD   r  zTarFile._find_link_target
  s    	 ==?xxtbggoogll.KWM]M]-^ _`HE ''HE5DI>2X=>>rF   c              #   T  K   	 | j                   r| j                  E d {    y d}| j                  | j                         }|dz  }| 	 |t	        | j                        k  r| j                  |   }n'| j                   s| j                         }|s	d| _         y y |dz  }| Y7 w)Nr   r-   T)rI  rH  rK  r  r>   )r   r  r<  s      rD   __iter__zTarFile.__iter__
  s     	<<||##  'iikGQJEMs4<<((,,u-\\))+#'DLQJEM  $s   B(B&BB(c                 \    	 || j                   k  rt        |t        j                         y y )Nfile)rE  r   r   stderr)r   levelmsgs      rD   r  zTarFile._dbg
  s&    	DJJ#CJJ' rF   c                 &    | j                          | S r   )rw  r   s    rD   	__enter__zTarFile.__enter__
  s    rF   c                     || j                          y | j                  s| j                  j                          d| _        y r  )r   r   r   r   )r   rr  r  	tracebacks       rD   __exit__zTarFile.__exit__
  s2    <JJL ##""$DKrF   )Nr   NNNNNNr  NNNN)r   N)r   NrW  )r   NN)NNNTr  r   ).N)r   T)TFr!  )=r   r   r   rE  rC  rD  rF  r   rb   r   rB   rC   r   r<  r6  r  r  r   r4  rq  r   rP  rg  rk  ro  rQ  r   ru  ry  r{  r  r	  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rs  rx  rw  r  r  r  r  r  r   rF   rD   r   r   L  s    EK L J FHFGJAEHL>B)-b^ #tZ ]/ ]/~ 2 2  @  6  : 	I%*	?aF$D $L1" 1"f%2G.+/%+/ZGG&.+,
C@ >B&+*0bN B?A$V2DB?L<B&&PC&>(rF   r   c                     	 	 t        | d      r.| j                         }t        |       }| j                  |       nt        |       }|j	                          y# t
        $ r Y yw xY w)Nrt   )r   TF)r   r   r   r   r   r   )r   r   r  s      rD   r   r   
  s]    

4 ))+CT"AIIcNT
A		 s   AA 	A%$A%c            	         dd l } d}| j                  |      }|j                  ddddd	       |j                  d
dt        d       |j	                  d      }|j                  dddd       |j                  ddddd       |j                  ddddd       |j                  dd dd!       |j                         }|j                  r|j                  |j                  d"d#       |j                  |j                  }t        |      rut        |d$      5 }|j                          t        |j                         t        j                  %       d d d        |j                   r=t        d&j#                  |             y |j                  d"d'j#                  |             y y |j$                  u|j$                  }t        |      r<t&        j                  |d(      5 }|j%                  |j                   )       d d d        y |j                  d"d'j#                  |             y |j                  +t)        |j                        d"k(  r |j                  d   }t*        j,                  }nHt)        |j                        d*k(  r|j                  \  }}n |j                  d"|j/                                t              r}t&        j                  |d(      5 }|j1                  |j                  +       d d d        |j                   rWd,k(  rd-j#                  |      }	nd.j#                  ||      }	t        |	       y |j                  d"d'j#                  |             y y |j2                  |j2                  j5                  d      }
t*        j6                  j9                  |
      \  }}d/d/d0d0d1d1d1d1d2}||v rd3||   z   nd4}|j2                  }t&        j                  |
|      5 }|D ]  }|j;                  |        	 d d d        |j                   rt        d5j#                  |
             y y y # 1 sw Y   xY w# 1 sw Y   y xY w# 1 sw Y   VxY w# 1 sw Y   XxY w)6Nr   z3A simple command-line interface for tarfile module.)descriptionz-vz	--verbose
store_trueFzVerbose output)actiondefaulthelpz--filterz<filtername>zFilter for extraction)metavarchoicesr%  T)requiredz-lz--list	<tarfile>zShow listing of a tarfile)r&  r%  z-ez	--extract+)r)  z<output_dir>zExtract tarfile into target dir)nargsr&  r%  z-cz--create)z<name>z<file>zCreate tarfile from sourcesz-tz--testzTest if a tarfile is validr-   z&--filter is only valid for extraction
r   r  z{!r} is a tar archive.z{!r} is not a tar archive.
rN  )r  r.   )r/   r  r  z{!r} file is extracted.z+{!r} file is extracted into {!r} directory.r   r   r   )r   z.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:r   z{!r} file created.)argparseArgumentParseradd_argumentr  add_mutually_exclusive_group
parse_argsr  r  exittestr   r   ry  r   r   r  r  rb   r	  r   r>   r   curdirformat_helpr  createrY  r/   splitextr  )r,  r!  parserr  argsrv   r   tfr3  r  tar_name_extcompressionstar_mode	tar_files	file_names                    rD   mainrA  
  s   GK$$$=F
k,-  /

N .4  6 ///>E	tX{7  9	t[<=  ? 
tZs39  ; 
tX{8  : D{{t||+A@Ayyiic?c3 93 cnn&SZZ89 ||.55c:;KK9@@EF 
 
	iic?c5) .R-. . KK9@@EF		!t||!,,q/CYYF!#,,KCKK6--/0c?c5) ?R6$++>?||S=3::3?C2396#v3F c
KK9@@EF  
	 ;;??1%!!(+3 
 03l/B4,s++KK	\\(H- 	"& "	y!"	" <<&--h78 / 
!M9 9. .? ?>	" 	"s0   :P-P:Q"Q-P7:QQQ__main__r  )iversion
__author____credits__builtinsr   rA  r   r   r'  rq   r  r   ri   r  r  r  r  r   r  AttributeErrorNotImplementedErrorr   r  __all__r?   r  rq  r  r  r  r  r  ry  r  r$  r"  r  r  r  r*  CONTTYPEr  r  r  r  r  r  r   r   r   r   r  r  r  r  r  r  rW   r  r   r   getfilesystemencodingrE   rL   r\   rd   rn   rr   r   r  r   r   r   r	   r
   r   r   r   r   rY   r   r   r   objectr   r  BufferedReaderr6  r   r   r   r   r   r   rh  r   r   r   r  r  r   r   r   rA  r   r   rF   rD   <module>rN     s{  : 6
H
 ' 
 	 	      	  $%8'B * 	^
	





  



 HgGXWg#%5!	# (>+ /	.
 9
   77d?H(s((*H0&( N <* "&$ 2	y 		8 		 		x 		( 		( 		{ 		; 		[ 		 		K 	 0q qh6 <e& eP"2$$ "	( 	J J
?k ?@{ @
L L
?+ ?=~ * 	|9f |9~Kf Kb$$ ||]9~ zF yX  
C  
Cs"   H3 I 3H>=H>II