� ���ja�� ��� dZdZdZddlmZddlZddlZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZ ddlZ ddlZeeefZgd�ZdZdZd Zd Zed zZd Zd ZdZdZ dZ!dZ"d Z#dZ$dZ%dZ&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3e3Z4e"e#e$e%e(e)e*e&e'e+e,e-f Z5e"e#e*e-fZ6e+e,e-fZ7d Z8hd!�Z9e:e:e:e;e;e;d"�Znej~�Z>d%�Z@d&�ZAd'�ZBd(e4fd)�ZCd*�ZDdedfd+�ZEd,�ZFGd-�d.eG�ZHGd/�d0eH�ZIGd1�d2eH�ZJGd3�d4eH�ZKGd5�d6eH�ZLGd7�d8eH�ZMGd9�d:eM�ZNGd;�deM�ZPGd?�d@eM�ZQGdA�dBeM�ZRGdC�dD�ZSGdE�dF�ZTGdG�dHeU�ZVGdI�dJeU�ZWGdK�dLej��ZYGdM�dNeH�ZZGdO�dPeZ�Z[GdQ�dReZ�Z\GdS�dTeZ�Z]GdU�dVeZ�Z^GdW�dXeZ�Z_GdY�dZeZ�Z`eZeeIfZadhd[�Zbd\�Zcd]�Zdd^�Zeecedeed_�ZfeU�Zgej�d`�ZiGda�dbeU�ZjGdc�ddeU�Zkde�ZlekjZdf�Zmendgk(rem�yy#e$rdZY��(wxYw#e$rdZY��1wxYw)iz0.9.0u"Lars Gustäbel ([email protected])u4Gustavo 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�LinkOutsideDestinationErrorTz/etc/python/tarfile.cfg�i�sustar sustar00�d��0�1�2�3�4�5�6�7�L�K�S�x�g�X��)�path�linkpath�size�mtime�uid�gid�uname�gname>r/r6r5r0)�atime�ctimer2r3r4r1�nt�utf-8c�x� |� td��|j||�}|d||t|�z tzzS)Nzmetadata cannot contain None)� ValueError�encode�len�NUL)�s�length�encoding�errorss � /usr/lib64/python3.12/tarfile.py�stnrE�sF����y��7�8�8� ����6�"�A� �W�f�:��#�a�&��C�/� /�/�c�^� |jd�}|dk7r|d|}|j||�S)Nr�����)�find�decode)r@rBrC�ps rD�ntsrL�s7��� ���u� �A��B�w� �b�q�E�� �8�8�H�f� %�%rFc�8� |ddvrMd}tt|�dz �D]}|dz}|||dzz }�|ddk(rdt|�dz z|z }|S t|dd�}t|j �xsd d�}|S#t $r t d ��wxYw) Nr)���r-�rO��ascii�strict�0�invalid header)�ranger>rL�int�stripr<�InvalidHeaderError)r@�n�is rD�ntir\�s���� ��t�~�� ���s�1�v��z�"�A� �!�G�A� ��1�q�5��M�A�#� �Q�4�5�=��#�a�&�1�*�%��)�*�A� �H�  7��A�w��)�A��A�G�G�I�$��a�(�A� �H��� 7�$�%5�6� 6� 7�s �+B�BrPc�� |}t|�}d|cxkr d|dz zkr nntd|dz |fzd�tz}|S|tk(rzd|dz z |cxkr d|dz zkrbn td ��|dk\r t dg�}nt dg�}d|z|z}t |dz �D]}|j d|dz�|dz}�|Std ��) NrrPr-z%0*orRrQrNrOzoverflow in number field)rW�bytesr?r� bytearrayrV�insertr<)rZ�digits�format� original_nr@r[s rD�itnrd�s�����J� �A��A��A�!��f�q�j�!�!� �&�F�Q�J��?�*�G� 4�s� :�� �H� �:� �3�6�A�:�#6�"6�!�"Q�c�f�q�j�>Q�"Q��3�4�4� ��6��5�'�"�A��5�'�"�A��v� ��!�A��v��z�"�A� �H�H�Q��E� � "� �!�G�A�#� �H��3�4�4rFc�� dttjd|��z}dttjd|��z}||fS)NrQ� 148B8x356B� 148b8x356b)�sum�struct� unpack_from)�buf�unsigned_chksum� signed_chksums rD� calc_chksumsrn�sL����C�� 2� 2�<�� E�F�F�O��#�f�0�0��s�C�D�D�M� �M� )�)rFc�z� |xsd}|dk(ry|�tj|||�yt||�\}}t|�D]:}|j |�}t |�|kr|d��|j |��<|dk7r8|j |�}t |�|kr|d��|j |�y)Ni@r�unexpected end of data)�shutil� copyfileobj�divmodrV�readr>�write) �src�dstrA� exception�bufsize�blocks� remainder�brks rDrrrr�s�����"��G� ��{�� �~����3��W�-���v�w�/��F�I� �6�]���h�h�w��� �s�8�g� ��4�5� 5� � � �#�� � �A�~��h�h�y�!�� �s�8�i� ��4�5� 5� � � �#�� rFc��ttjdd�}|�!|j|d�j |�}t |d��y)NrB�backslashreplace� )�end)�getattr�sys�stdoutr=rJ�print)r@rBs rD� _safe_printr�s@���s�z�z�:�t�4�H��� �H�H�X�1� 2� 9� 9�(� C�� �!��rFc��eZdZ y)rN��__name__� __module__� __qualname__�rFrDrrs���rFrc��eZdZ y)r Nr�r�rFrDr r s��/�rFr c��eZdZ y)rNr�r�rFrDrrs��0�rFrc��eZdZ y)r Nr�r�rFrDr r s��8�rFr c��eZdZ y)r Nr�r�rFrDr r !s��G�rFr c��eZdZ y)r Nr�r�rFrDr r $s��+�rFr c��eZdZ y)�EmptyHeaderErrorNr�r�rFrDr�r�'s��&�rFr�c��eZdZ y)�TruncatedHeaderErrorNr�r�rFrDr�r�*s��*�rFr�c��eZdZ y)�EOFHeaderErrorNr�r�rFrDr�r�-s��,�rFr�c��eZdZ y)rYNr�r�rFrDrYrY0s��(�rFrYc��eZdZ y)�SubsequentHeaderErrorNr�r�rFrDr�r�3s��=�rFr�c�&�eZdZ d�Zd�Zd�Zd�Zy)� _LowLevelFilec��tjtjtjztjzd�|}t td�r|tj z}tj||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__@sa��������r�z�z�)�B�J�J�6� � ��� �2�z� "� �B�K�K� �D��'�'�$��e�,��rFc�B�tj|j�y�N)r��closer��r�s rDr�z_LowLevelFile.closeIs�� ������rFc�B�tj|j|�Sr�)r�rtr��r�r1s rDrtz_LowLevelFile.readLs���w�w�t�w�w��%�%rFc�D�tj|j|�yr�)r�rur��r�r@s rDruz_LowLevelFile.writeOs�� ������!�rFN)r�r�r�r�r�rtrur�rFrDr�r�:s��� -��&�rFr�c�X�eZdZ d�Zd�Zd�Zd�Zd�Zd�Zd�Z d�Z dd �Z d �Z d �Z d �Zy )�_Streamc�� d|_|�t||�}d|_|dk(rt|�}|j�}|xsd|_||_||_||_||_d|_ d|_ d|_ |dk(r[ ddl }||_ |jd�|_|d k(r"|j"|_|j'�y|j)|�y|d k(rI ddl}|d k(r(d|_|j/�|_t2|_y|j5|�|_y|d k(rN ddl} |d k(r.d|_| j9�|_| j:|_y| j=�|_y|dk7rtd|z��y#t$r td�d�wxYw#t$r td �d�wxYw#t$r td �d�wxYw#|js|jj?�d|_ �xYw)NTF�*�rFr�gzzzlib 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�fileobjryrk�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 rDr�z_Stream.__init__^s �� ���� �?�#�D�$�/�G�$�D� � �s�?�#�7�+�G��*�*�,�H�� ��� ��� � �� ��� ��� ��������� �- ��4��U��!�� ��:�:�c�?����3�;�%)�Z�Z�D�N��&�&�(��'�'� �6��U�"�T���3�;� #�D�I�"�2�2�4�D�H�%,�D�N�"�0�0��?�D�H��T�!�U���3�;� #�D�I�#�4�4�6�D�H�%)�^�^�D�N�#�2�2�4�D�H��U�"�&�'D�x�'O�P�P�#��E#�U�*�+I�J�PT�T�U��#�T�*�+H�I�t�S�T��#�U�*�+I�J�PT�T�U�� ��#�#�� � �"�"�$��D�K� �sy�;G�F�AG� G�G�!F)�%,G�G�)G�/G�32G�&G�<G�F&�&G�)F?�?G�G�G�0H c�X�t|d�r|js|j�yyy)Nr�)r�r�r�r�s rD�__del__z_Stream.__del__�s#�� �4�� "�4�;�;� �J�J�L�,7� "rFc�v� |jj||jj|jj |jjd�|_t jdttj���}|jd|zdz�|jjd�r|jdd|_ tjj|j�|_ |j|jj!dd�t"z�y) Nr���D�ErFc�,� |jdk(r+|jj||j�|_|xjt |�z c_|jdk7r|j j|�}|j|�y)Nr�r�) r�r�r�r�r�r>r��compressr�r�s rDruz _Stream.write�sj�� � �=�=�D� ��y�y���q�$�(�(�3�D�H� ���C��F��� �=�=�E� !����!�!�!�$�A� � � �Q�rFc�\� |xj|z c_t|j�|jkDrt|jj |jd|j�|j|jd|_t|j�|jkDr�syyr�)rkr>ryr�rur�s rD�__writez_Stream.__write�sw�� � ���A� ���$�(�(�m�d�l�l�*� �L�L� � �t�x�x� ����6� 7��x�x�� � � �.�D�H��$�(�(�m�d�l�l�*rFc�� |jryd|_ |jdk(r<|jdk7r-|xj|jj �z c_|jdk(r�|jr�|j j|j�d|_|jdk(ru|j jtjd|j��|j jtjd|jdz��|js|j j�yy#|js|j j�wwxYw)NTr�r�rFr�r�l��)r�r�r�rkr��flushr�rurir�r�r�r�r�r�s rDr�z _Stream.close�s�� � �;�;� ��� � %��y�y�C��D�M�M�U�$:����D�H�H�N�N�,�,���y�y�C��D�H�H�� � �"�"�4�8�8�,�����=�=�D�(��L�L�&�&�v�{�{�4����'B�C��L�L�&�&�v�{�{�4����J�9N�'O�P��#�#�� � �"�"�$�$��4�#�#�� � �"�"�$�$�s �DE�)E>c�� |jj|jj �|_d|_|j d�dk7r t d��|j d�dk7r td��t|j d��}|j d�|d zrIt|j d��d t|j d��zz}|j|�|d zr |j d�}|r |tk(rn�|d zr |j d�}|r |tk(rn�|dzr|j d�yy) NrFr.s��not a gzip filer-�zunsupported compression method��rQrP�) r�� decompressobjr�r�r�� _Stream__readrr �ordrtr?)r��flag�xlenr@s rDr�z_Stream._init_read_gz�s.�� ��9�9�*�*�D�I�I�,?�,?�+?�@����� � �;�;�q�>�[� (��-�.� .� �;�;�q�>�W� $�"�#C�D� D��4�;�;�q�>�"�� � � �A�� �!�8��t�{�{�1�~�&��s�4�;�;�q�>�/B�)B�B�D� �I�I�d�O� �!�8���K�K��N���A��H��� �"�9���K�K��N���A��H��� �!�8� �K�K��N� rFc�� |jSr�)r�r�s rD�tellz _Stream.tells�� ��x�x�rFc�"� ||jz dk\rrt||jz |j�\}}t|�D]!}|j |j�}|r�!n|j |�|jSt d��)Nrz seeking backwards is not allowed)r�rsryrVrtr )r�r�rzr{r[�datas rD�seekz _Stream.seeks��� � ����>�Q� � &�s�T�X�X�~�t�|�|� D� �F�I��6�]���y�y����.����#� �I�I�i� ��x�x���@�A� ArFc�f� |j|�}|xjt|�z c_|Sr�)�_readr�r>)r�r1rks rDrtz _Stream.reads*��C��j�j���� ���C��H���� rFc�*� |jdk(r|j|�St|j�}|jg}||kr�|jr|j}d|_n(|j j |j�}|snA |jj|�}|j|�|t|�z }||kr��dj|�}||d|_|d|S#|j$r}td�|�d}~wwxYw)Nr�rFzinvalid compressed data)r�r�r>r�rkr�rtryr�� decompressrxr�append�join)r�r1�c�trk�es rDrz _Stream._reads�� � �=�=�E� !��;�;�t�$� $� �� � �N�� �Y�Y�K���$�h��x�x��h�h������l�l�'�'�� � �5���� B��h�h�)�)�#�.�� �H�H�S�M� ��S��M�A��$�h� �H�H�Q�K���d�e�H�� ���$�x��� �>�>� B�� 9�:��A�� B�s�C2�2D� D � Dc�,� t|j�}|jg}||krM|jj|j�}|sn%|j |�|t|�z }||kr�Mdj |�}||d|_|d|S)NrF)r>rkr�rtryrr)r�r1rrrks rD�__readz_Stream.__read8s��� � ����M�� �X�X�J���$�h��,�,�#�#�D�L�L�1�C��� �H�H�S�M� ��S��M�A� �$�h� �H�H�Q�K���T�U�8�����$�x�rFN)r)r�r�r�r�r�r�rur�r�r�r�r�rtrr�r�rFrDr�r�RsF�� �E�N�F�"�/�%�,�>� ���6rFr�c�&�eZdZ d�Zd�Zd�Zd�Zy)r�c�Z�||_|jjt�|_yr�)r�rt� BLOCKSIZErk)r�r�s rDr�z_StreamProxy.__init__Ns���� ��<�<�$�$�Y�/��rFc�P�|jj|_|jSr�)r�rtrkr�s rDrtz_StreamProxy.readRs���L�L�%�%�� ��x�x�rFc��|jjd�ry|jdddk(r|jdddk(ry |jjd �ry y ) Ns�r�r�sBZhr�� s1AY&SYr�)s]�s�7zXZr�r�)rk� startswithr�s rDr�z_StreamProxy.getcomptypeVsV�� �8�8� � �� /�� �X�X�a��]�f� $����!�B��9�)D�� �X�X� � �!C� D��rFc�8�|jj�yr�)r�r�r�s rDr�z_StreamProxy.close`s�� � � ���rFN)r�r�r�r�rtr�r�r�rFrDr�r�Is���0���rFr�c�f�eZdZ d d�Zd�Zd�Zd�Zd�Zd�Ze jfd�Z d d �Z d �Z d �Zy) � _FileInFileNc���||_||_||_d|_||_d|_|�d|fg}d|_g|_d}|j}|D]U\}}||kDr|jjd||df�|jjd|||z|f�||z }||z}�W||jkr*|jjd||jdf�yy)NrFT) r��offsetr1�positionr�r�� map_index�mapr)r�r�rr1r�� blockinfo�lastpos�realposs rDr�z_FileInFile.__init__ms����� ��� ��� ��� ��� ��� � � ��T�� �I����������+�+��%�L�F�D������������� >�?� �H�H�O�O�T�6�6�D�=�'�B� C� �t�O�G��t�m�G� &� �T�Y�Y� � �H�H�O�O�U�G�T�Y�Y��=� >� rFc��yr�r�r�s rDr�z_FileInFile.flush�s�� rFc��y�NTr�r�s rD�readablez_FileInFile.readable�s��rFc��y�NFr�r�s rD�writablez_FileInFile.writable�s��rFc�6�|jj�Sr�)r��seekabler�s rDr%z_FileInFile.seekable�s���|�|�$�$�&�&rFc�� |jSr�)rr�s rDr�z_FileInFile.tell�s�� ��}�}�rFc�0� |tjk(r1tt|d�|j�|_|j S|tj k(rc|dkr*t|j |zd�|_|j St|j |z|j�|_|j S|tjk(r>tt|j|z|j�d�|_|j Std��)NrzInvalid argument) �io�SEEK_SET�min�maxr1r�SEEK_CUR�SEEK_ENDr<)r�r�whences rDr�z_FileInFile.seek�s��� � �R�[�[� ���H�a� 0�$�)�)�<�D�M��}�}���r�{�{� "��!�|� #�D�M�M�H�$<�a� @�� ��}�}�� !$�D�M�M�H�$<�d�i�i� H�� � �}�}�� �r�{�{� "���D�I�I��$8�$�)�)� D�a�H�D�M��}�}���/�0� 0rFc��� |�|j|jz }n#t||j|jz �}d}|dkD�r$ |j|j\}}}}||jcxkr|krnnn?|xjdz c_|jt |j�k(rd|_�vt|||jz �}|re|j j||j|z z�|j j|�}t |�|k7r td��||z }n |t|zz }||z}|xj|z c_|dkDr��$|S)NrFrr-rp) r1rr*rrr>r�r�rtrr?) r�r1rkr��start�stoprrAr|s rDrtz_FileInFile.read�sG�� � �<��9�9�t�}�}�,�D��t�T�Y�Y����6�7�D����Q�h��,0�H�H�T�^�^�,D�)��e�T�6��D�M�M�0�D�0���N�N�a�'�N��~�~��T�X�X��6�)*������t�d�m�m�3�4�F��� � �!�!�&�D�M�M�E�,A�"B�C��L�L�%�%�f�-���q�6�V�#�#�$<�=�=��q����s�V�|�#�� �F�N�D� �M�M�V� #�M�'�Q�h�(� rFc�h�|jt|��}||dt|�t|�Sr�)rtr>)r�r|rks rD�readintoz_FileInFile.readinto�s,���i�i��A������)�3�s�8� ��3�x�rFc��d|_yr)r�r�s rDr�z_FileInFile.close�s ���� rFr�)r�r�r�r�r�r r#r%r�r(r)r�rtr3r�r�rFrDrrgsB��� ?�2 ���'�� %'�K�K�� �>� rFrc���eZdZ�fd�Z�xZS)� ExFileObjectc���t|j|j|j|j|j �}t �|�|�yr�)rr�� offset_datar1r��sparse�superr�)r��tarfile�tarinfor�� __class__s �rDr�zExFileObject.__init__�s;����g�o�o�w�/B�/B�� � �g�l�l�G�N�N�<�� ����!rF�r�r�r�r�� __classcell__�r=s@rDr6r6�s ���"�"rFr6c� �eZdZy)rNr�r�rFrDrr�s��rFrc���eZdZ�fd�Z�xZS)rc�N��||_t�|� d|j�d��y)Nzmember z has an absolute path�r<r:r�r��r�r<r=s �rDr�zAbsolutePathError.__init__�s&����� � ���7�7�<�<�"2�2G�H�IrFr>r@s@rDrr�s���J�JrFrc���eZdZ�fd�Z�xZS)rc�f��||_||_t�|� |j�d|�d�dz�y)Nz would be extracted to �, � which is outside the destination�r<�_pathr:r�r��r�r<r/r=s �rDr�z OutsideDestinationError.__init__�s;����� ��� � ���G�L�L�+�+B�4�(�"�M�=�>� ?rFr>r@s@rDrr�� ���?�?rFrc���eZdZ�fd�Z�xZS)rc�L��||_t�|� |j�d��y)Nz is a special filerDrEs �rDr�zSpecialFileError.__init__�s$����� � ���G�L�L�+�+=�>�?rFr>r@s@rDrr�s���@�@rFrc���eZdZ�fd�Z�xZS)rc�L��||_t�|� |j�d��y)Nz is a link to an absolute pathrDrEs �rDr�zAbsoluteLinkError.__init__�s$����� � ���G�L�L�+�+I�J�KrFr>r@s@rDrr�s���L�LrFrc���eZdZ�fd�Z�xZS)rc�f��||_||_t�|� |j�d|�d�dz�y)Nz would link to rHrIrJrLs �rDr�z$LinkOutsideDestinationError.__init__�s:����� ��� � ���G�L�L�+�?�4�(�"�E�=�>� ?rFr>r@s@rDrr�rMrFrc���eZdZ�fd�Z�xZS)�LinkFallbackErrorc�j��||_||_t�|� d|j�d�d|�d�z�y)Nzlink z would be extracted as a zcopy of z, which was rejectedrJrLs �rDr�zLinkFallbackError.__init__�sC����� ��� � ���5���� 0�0I�J�%�d�X�-A�B�C� DrFr>r@s@rDrUrU�s���D�DrFrUc�(�i}|j}tjj|tjj��}|j dtj f�r1|jjdtj z�x}|d<tjj|�r t|��d|jtj d�jd�vr+tjj|�}||k7r|x}|d<tjjtjj||�tjj��}tjj||g�|k7r t||��|j }|�y|dz}|r^|j#�s|j%�r|dzs|dz}|dz}n.|j'�s|j)�rd}n t+|��||j k7r||d <|�r�|j,�d|d <|j.�d|d <|j0�d|d <|j2�d|d <|j%�s|j)��r|tjj|j4�r t7|��||k(r t||��tjj|j4�}||j4k7r||d<|j)�ratjj9|j;dtj z��}tjj|||�}n tjj||�}tjj|tjj��}tjj||g�|k7r t=||��|S)N)rS�/r�z..i��@i�����r�r3r4r5r6�linkname)r�r�r/�realpath� ALLOW_MISSINGr�sep�lstrip�isabsrr��split�normpathr� commonpathrr��isreg�islnk�isdir�issymrr3r4r5r6r[r�dirname�rstripr) �member� dest_path�for_data� new_attrsr�� normalized� target_pathr��link_dirs rD�_get_filtered_attrsrqs2���I� �;�;�D���� � ��2�7�7�3H�3H� �I�I� ����R�V�V�}�%�#)�;�;�#5�#5�c�B�F�F�l�#C�C��y�� � �w�w�}�}�T�� ��'�'� �t�|�|�B�F�F�C�(�.�.�s�3�3��W�W�%�%�d�+� � �� �'1� 1�D�9�V�$��'�'�"�"�2�7�7�<�<� �4�#@�*,�'�'�*?�*?�#�A�K� �w�w���;� �2�3�y�@�%�f�k�:�:� �;�;�D� ���e�|�� ��|�|�~������e�|��F�N�D��� ������6�<�<�>���'�v�.�.� �6�;�;� � $�I�f� �� �:�:� !�#�I�e� � �:�:� !�#�I�e� � �<�<� #�!%�I�g� � �<�<� #�!%�I�g� � �<�<�>�V�\�\�^��w�w�}�}�V�_�_�-�'��/�/��i�'�-�f�k�B�B����)�)�&�/�/�:�J��V�_�_�,�(2� �*�%��|�|�~��7�7�?�?�4�;�;�s�R�V�V�|�+D�E�� �g�g�l�l�9�h� �K� � �g�g�l�l�9�j�A� ��'�'�*�*�;�24�'�'�2G�2G�+�I�K��w�w�!�!�;� �":�;�y�H�1�&�+�F�F� �rFc��|Sr�r�)rjrks rDrrYs�� �MrFc�P�t||d�}|r|jdi|�ddi��S|S)NF�deepr��rqr��rjrkrms rDrr\s1��#�F�I�u�=�I���v�~�~�6� �6��6�6� �MrFc�P�t||d�}|r|jdi|�ddi��S|S)NTrtFr�rurvs rDrrbs1��#�F�I�t�<�I���v�~�~�6� �6��6�6� �MrF)� fully_trustedr�r�s([0-9]{1,20}) c �l�eZdZ edVidd�dd�dd�dd�d d �d d �d d�dd�dd�dd�dd�dd�dd�dd�dd�dd �d!d"�d#d$�d%d$�d&d$��ZdWd'�Zed(��Zejd)��Zed*��Z e jd+��Z d,�Z e e e e e e e e d-e d.� d/�Z d0�Z eed1fd2�Zd3�Zd4�Zd5�Zed6��Zd7�Zed8��Zed9��Zed:��Zed;��Zed<��Zed-d=�d>��Zed?��Zed-d=�d@��ZdA�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�Z/dQ�Z0dR�Z1dS�Z2dT�Z3dU�Z4y$)Xrr�zName of the archive member.r�zPermission bits.r3z6User ID of the user who originally stored this member.r4z7Group ID of the user who originally stored this member.r1zSize in bytes.r2zTime of last modification.�chksumzHeader checksum.�typez�File type. type is usually one of these constants: REGTYPE, AREGTYPE, LNKTYPE, SYMTYPE, DIRTYPE, FIFOTYPE, CONTTYPE, CHRTYPE, BLKTYPE, GNUTYPE_SPARSE.r[zcName of the target file name, which is only present in TarInfo objects of type LNKTYPE and SYMTYPE.r5z User name.r6z Group name.�devmajorzDevice major number.�devminorzDevice minor number.rzThe tar header starts here.r8zThe file's data starts here.� pax_headerszMA dictionary containing key-value pairs of an associated pax extended header.r9zSparse 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�rr�)r�r�r3r4r1r2rz�REGTYPEr{r[r5r6r|r}rr8r9r~�r�r�s rDr�zTarInfo.__init__�s��� ��� ��� ��������� ��� ��� ��� ��� ��� ��� ��� ��� ��� ������ ���rFc�� |jSr��r�r�s rDr/z TarInfo.path�s��2��y�y�rFc��||_yr�r�r�s rDr/z TarInfo.path�s ���� rFc�� |jSr��r[r�s rDr0zTarInfo.linkpath�s��:��}�}�rFc��||_yr�r�)r�r[s rDr0zTarInfo.linkpath�s �� �� rFc�`�d|jj|jt|�fzS)Nz<%s %r at %#x>)r=r�r��idr�s rD�__repr__zTarInfo.__repr__�s&���4�>�>�#:�#:�4�9�9�R��X�"N�N�NrFT) r�r2r�r[r3r4r5r6rt�_KEEPc �� | rtj|�} ntj|�} || ur|| _|| ur|| _|| ur|| _|| ur|| _|| ur|| _|| ur|| _|| ur|| _|| ur|| _ | Sr�) �copy�deepcopyr�r2r�r[r3r4r5r6) r�r�r2r�r[r3r4r5r6rtr��results rDr�zTarInfo.replace�s��� � ��]�]�4�(�F��Y�Y�t�_�F� �u� ��F�K� �� � �F�L� �u� ��F�K� �5� �&�F�O� �e� ��F�J� �e� ��F�J� �� � �F�L� �� � �F�L�� rFc�� |j�d}n|jdz}|j||j|j|j|j |j |j|j|j|j|j|jd� }|dtk(r!|djd�s |dxxdz cc<|S)N��) r�r�r3r4r1r2rzr{r[r5r6r|r}r{r�rX)r�r�r3r4r1r2rzr{r[r5r6r|r}�DIRTYPEr�)r�r��infos rD�get_infozTarInfo.get_info�s��� � �9�9� ��D��9�9�v�%�D�� � ��������� � �� � �� � �� � �� � �� � �� � �� � �� � � �� ��<�7� "�4��<�+@�+@��+E� ��L�C� �L�� rF�surrogateescapec�0� |j�}|j�D]\}}|�� td|z��|tk(r|j |||�S|t k(r|j |||�S|tk(r|j||�Std��)Nz%s may not be Nonezinvalid format) r��itemsr<r�create_ustar_headerr�create_gnu_headerr�create_pax_header)r�rbrBrCr�r��values rD�tobufz TarInfo.tobufs��� ��}�}����:�:�<�K�D�%��}� �!5��!<�=�=�(� �\� !��+�+�D�(�F�C� C� �z� !��)�)�$��&�A� A� �z� !��)�)�$��9� 9��-�.� .rFc�.� t|d<t|dj||��tkDr t d��t|dj||��t kDr|j |d||�\|d<|d<|j|t||�S)N�magicr[zlinkname is too longr��prefix) � POSIX_MAGICr>r=� LENGTH_LINKr<� LENGTH_NAME�_posix_split_name�_create_headerr)r�r�rBrCs rDr�zTarInfo.create_ustar_headers��� �#��W� � �t�J��&�&�x��8� 9�K� G��3�4� 4� �t�F�|�"�"�8�V�4� 5� � C�+/�+A�+A�$�v�,�PX�Z`�+a� (�D��N�D��L��"�"�4��x��H�HrFc�\� t|d<d}t|dj||��tkDr||j |dt ||�z }t|dj||��t kDr||j |dt||�z }||j|t||�zS)Nr�rFr[r�) � GNU_MAGICr>r=r��_create_gnu_long_header�GNUTYPE_LONGLINKr��GNUTYPE_LONGNAMEr�r)r�r�rBrCrks rDr�zTarInfo.create_gnu_headers��� �!��W� ��� �t�J��&�&�x��8� 9�K� G� �4�/�/��Z�0@�BR�T\�^d�e� e�C� �t�F�|�"�"�8�V�4� 5� � C� �4�/�/��V� �>N�PX�Z`�a� a�C��T�(�(��z�8�V�L�L�LrFc�^� t|d<|jj�}ddtfddtfddfD];\}}}||vr� ||j dd �t||�|kDs�4||||<�=d D]e\}}d }||} t| t�} | r t| �n| } d | cxkr d |dz zks nd ||<d}n | r| ||<d}|s�S||vs�Xt| �||<�g|r|j|t|�} nd} | |j|tdd�zS#t $r ||||<Y��wxYw)Nr�r�r/r[r0)r5r5� )r6r6r�rRrS))r3rP)r4rP)r1� )r2r�FrrPr-TrFr�)r�r~r�r�r�r=�UnicodeEncodeErrorr>� isinstance�float�round�str�_create_pax_generic_header�XHDTYPEr�r) r�r�rBr~r��hnamerAra� needs_pax�val� val_is_float�val_intrks rDr�zTarInfo.create_pax_header,s��� �$��W� ��&�&�+�+�-� � ���-� �J� �/T�&�(>�$@� �D�%��� �#�� ��T� �!�!�'�8�4� �4��:���'�%)�$�Z� �E�"�!$@�(R�L�D�&��I��t�*�C�%�c�5�1�L�$0�e�C�j�c�G���3�!��� �"3�3���T� � � ��%��T� � � ��T��4�$'��H� �D�!�%R�* ��1�1�+�w��Q�C��C��T�(�(��|�W�i�P�P�P��G&� �%)�$�Z� �E�"�� �s�D�D,�+D,c�2� |j|td�S)Nr:)r��XGLTYPE)�clsr~s rD�create_pax_global_headerz TarInfo.create_pax_global_headerfs�� ��-�-�k�7�G�L�LrFc�T� |jd�}tdt|��D]t}dj|d|�}dj||d�}t|j ||��t ks�Nt|j ||��t ks�q||fStd��)NrXr-zname is too long)rarVr>rr=� LENGTH_PREFIXr�r<)r�r�rBrC� componentsr[r�s rDr�zTarInfo._posix_split_namels��� ��Z�Z��_� ��q�#�j�/�*�A��X�X�j��!�n�-�F��8�8�J�q�r�N�+�D��6�=�=��6�2�3�}�D��� � �H�f�5�6�+�E���t�|��+��/�0� 0rFc�j� |jd�ttfv}|r;t|jdd�d|�}t|jdd�d|�}nt dd||�}t dd||�}|jdt �}|� t d��t |jdd�d ||�t|jd d�d zd|�t|jd d�d|�t|jd d�d|�t|jdd�d|�t|jdd�d|�d|t |jdd�d ||�|jdt�t |jdd�d||�t |jdd�d||�||t |jdd�d||�g}tjdtzdj|��} t| t d�d} | ddtd| zd�z| ddz} | S)Nr{r|rrPr}r�zTarInfo.type must not be Noner�rr�r�r3r4r1r�r2s r[r�r5r�r6r�rz%dsrFi����z%06orRi����)�get�CHRTYPE�BLKTYPErdrEr�r<r�rir�r rrnr^) r�rbrBrC�has_device_fieldsr|r}�filetype�partsrkrzs rDr�zTarInfo._create_header|s�� �!�H�H�V�,��'�0B�B�� ��4�8�8�J��2�A�v�>�H��4�8�8�J��2�A�v�>�H��2�q�(�F�3�H��2�q�(�F�3�H��8�8�F�G�,�� � ��<�=� =� ������$�c�8�V� <� ������#�f�,�a�� 8� ������"�A�v� .� ������"�A�v� .� ������#�R�� 0� �����!�$�b�&� 1� � � �����R�(�#�x�� @� �H�H�W�k� *� �����"�%�r�8�V� <� �����"�%�r�8�V� <� � � �����2�&��X�v� >� ��$�k�k�%�)�+�S�X�X�e�_�=���c�9�*�+�.�/��2���%�4�j�5��F�!2�G�<�<�s�4�5�z�I��� rFc�p� tt|�t�\}}|dkDr|t|z tzz }|S)Nr)rsr>r r?)�payloadrzr{s rD�_create_payloadzTarInfo._create_payload�s>�� �#�3�w�<��;��� � �q�=� � �I�-��4� 4�G��rFc��� |j||�tz}i}d|d<||d<t|�|d<t|d<|j |t ||�|j |�zS)Nz ././@LongLinkr�r{r1r�)r=r?r>r�r�rr�)r�r�r{rBrCr�s rDr�zTarInfo._create_gnu_long_header�sy�� ��{�{�8�V�,�s�2����&��V� ���V� ��4�y��V� �!��W� ��!�!�$� �h��G��#�#�D�)�*� *rFc�� d}|j�D]\}} |jdd��d}|r|dz }|j�D]�\}}|jd�}|r|j|d�}n|jd�}t|�t|�zdz}d x} } |tt | ��z} | | k(rn| } � |t t | �d �d z|zd z|zd zz }��i} d| d<|| d<t|�| d<t | d<|j| td d�|j|�zS#t$rd}Y��wxYw)NFr:rSTrFs21 hdrcharset=BINARY r�rrrR� �=� z././@PaxHeaderr�r{r1r�r�) r�r=r�r>r�r^r�r�rr�) r�r~r{rB�binary�keywordr��records�lrZrKr�s rDr�z"TarInfo._create_pax_generic_header�s��� � ��)�/�/�1�N�G�U� �� � �W�h�/�2��� � �0� 0�G�)�/�/�1�N�G�U��n�n�W�-�G��� � �X�/@�A��� � �W�-���G� �s�5�z�)�A�-�A��I�A�����C��F� �O����6���� � �u�S��V�W�-��4�w�>��E��M�PU�U� U�G�!2�(��'��V� ���V� ��7�|��V� �#��W� ��!�!�$� �g�y�I��#�#�G�,�-� -��I&� ���� �s�D:�: E � E c�*� |j|||�Sr�)�_frombuf)r�rkrBrCs rD�frombufzTarInfo.frombuf�s�� � �|�|�C��6�2�2rF��dircheckc�r� t|�dk(r td��t|�tk7r td��|j t �tk(r t d��t|dd�}|t|�vr td��|�}t|dd||�|_ t|dd �|_ t|d d �|_ t|d d �|_t|d d �|_t|d d�|_||_|dd |_t|d d||�|_t|dd||�|_t|dd||�|_t|dd�|_t|dd�|_t|dd||�}|r9|j$t0k(r&|jj3d�r t4|_|j$t6k(rxd}g} t9d�D]@} t|||dz�} t||dz|dz�} | j=| | f�|dz }�Bt?|d�} t|dd�}| | |f|_ |jC�r |jjEd�|_ |r)|j$tFvr|dz|jz|_ |S#t:$rY��wxYw)Nrz empty headerztruncated headerzend of file header��z bad checksumr�l�t�|��ii i)iIiQiYi�rXi�r�r��i�i�i�)$r>r�r r��countr?r�r\rnrYrLr�r�r3r4r1r2rzr{r[r5r6r|r}�AREGTYPEr�r��GNUTYPE_SPARSErVr<r�boolrrfri� GNU_TYPES)r�rkrBrCr�rz�objr�r��structsr[r�numbytes� isextended�origsizes rDr�zTarInfo._frombuf�s��� � �s�8�q�=�"�>�2� 2� �s�8�y� �&�'9�:� :� �9�9�S�>�Y� &� �!5�6� 6��S��S�\�"�� ��c�*� *�$�^�4� 4��e���s�1�S�z�8�V�4����s�3�s�|�$����c�#�c�l�#����c�#�c�l�#����s�3�s�|�$�����C�� �%�� ��� ��s�3�<����3�s�3�<��6�:�� ���C�� �h��7�� ���C�� �h��7�� ��3�s�3�<�(�� ��3�s�3�<�(�� ��S��S�\�8�V�4�� ����H�,����1B�1B�3�1G��C�H� �8�8�~� %��C��G��1�X��� ��S��r��!2�3�F�"�3�s�R�x��b��#9�:�H������1�2��r� ����c�#�h��J��3�s�3�<�(�H�#*�J��"A�C� � �9�9�;��x�x���s�+�C�H� �c�h�h�i�/���|�c�h�h�.�C�H�� ��"����s�'%J)�) J6�5J6c�&� |j|�Sr�)� _fromtarfile)r�r;s rD� fromtarfilezTarInfo.fromtarfileAs�� �����(�(rFc�� |jjt�}|j||j|j |��}|jj �tz |_|j|�S)Nr�) r�rtr r�rBrCr�r� _proc_member)r�r;r�rkr�s rDr�zTarInfo._fromtarfileHsg�� ��o�o�"�"�9�-���l�l�3�� 0� 0�'�.�.�8�l�T���_�_�)�)�+�i�7�� �����(�(rFc�� |jttfvr|j|�S|jtk(r|j |�S|jt ttfvr|j|�S|j|�Sr�) r{r�r�� _proc_gnulongr�� _proc_sparser�r��SOLARIS_XHDTYPE� _proc_pax� _proc_builtin)r�r;s rDr�zTarInfo._proc_member]s}�� � �9�9�)�+;�<� <��%�%�g�.� .� �Y�Y�.� (��$�$�W�-� -� �Y�Y�7�G�_�=� =��>�>�'�*� *��%�%�g�.� .rFc�� |jj�|_|j}|j�s|jt vr||j |j�z }||_|j|j|j|j�|j�r |jjd�|_|S)NrX)r�r�r8rdr{�SUPPORTED_TYPES�_blockr1r�_apply_pax_infor~rBrCrfr�ri)r�r;rs rDr�zTarInfo._proc_builtinjs��� �#�?�?�/�/�1����!�!�� �:�:�<�4�9�9�O�;� �d�k�k�$�)�)�,� ,�F���� ���W�0�0�'�2B�2B�G�N�N�S� �:�:�<�� � �(�(��-�D�I�� rFc�L� |jj|j|j��} |j |d��}|j|_|jtk(r't||j|j�|_n9|jtk(r&t||j|j�|_|j#�r |jj%d�|_|S#t $r}t t|��d�d}~wwxYw)NFr�rX)r�rtr�r1r�r r�r�rr{r�rLrBrCr�r�r[rf� removesuffix)r�r;rk�nextrs rDr�zTarInfo._proc_gnulong�s��� ��o�o�"�"�4�;�;�t�y�y�#9�:�� :��$�$�W�u�$�=�D� �k�k�� � �9�9�(� (��C��!1�!1�7�>�>�B�D�I� �Y�Y�*� *���W�%5�%5�w�~�~�F�D�M� �:�:�<�� � �.�.�s�3�D�I�� ��!� :�'��A��/�T� 9�� :�s�D� D#� D�D#c� � |j\}}}|`|r�|jjt�}d}t d�D]D} t |||dz�}t ||dz|dz�} |r| r|j|| f�|dz }�Ft|d�}|r��||_ |jj�|_ |j|j|j�z|_||_ |S#t $rY�ywxYw)Nr�r�r�i�)rr�rtr rVr\r<rr�r9r�r8r�r1r) r�r;r�r�r�rkr�r[rr�s rDr�zTarInfo._proc_sparse�s�� �)-�(<�(<�%���X� � ���/�/�&�&�y�1�C��C��2�Y��� ��S��r��!2�3�F�"�3�s�R�x��b��#9�:�H��h��N�N�F�H�#5�6��r� ����c�#�h��J���� �"�?�?�/�/�1����)�)�D�K�K�� � �,B�B����� �� ��"����s�%C6�6 D�Dc� � |jj|j|j��}|jt k(r |j }n|j j�}d}d}g}t|�|kD�r||dk7�rtj||�x}s td�� t|jd��}|dkr td��||zt|�kDr td��|jd�|zdz } ||j!d�dz| } | j#d�\} } } | r | dk7s|| dk7r td��|j%|| | f�| dk(r|�| dk(r |j&}nd }||z }t|�|kDr ||dk7r��|�d }|D]x\}} } |j)| d d |j*�}|t,vr)|j)| ||j&|j*�}n|j)| d d |j*�}|||<�z |j/|d � �}d |vr|j7||�nRd |vr|j9||�n;|j;d�dk(r'|j;d�dk(r|j=|||�|jt>t@fvr�|jC||j&|j*�|jD|_"d|vrS|jF}|jI�s|jtJvr||j|j�z }||_"|S#t$r td��wxYw#t0$r}t3t5|��d�d}~wwxYw)NrrUr-�r�rs hdrcharsetsBINARYr:Fr��GNU.sparse.map�GNU.sparse.sizezGNU.sparse.major�1zGNU.sparse.minorrTr1)&r�rtr�r1r{r�r~r�r>�_header_length_prefix_re�matchrYrW�groupr<r0r�� partitionrrB�_decode_pax_fieldrC�PAX_NAME_FIELDSr�r r�r��_proc_gnusparse_01�_proc_gnusparse_00r��_proc_gnusparse_10r�r�r�rr8rdr�)r�r;rkr~r�rB� raw_headersrrA�header_value_end_offset�keyword_and_value� raw_keyword�equals� raw_valuer�r�r�rrs rDr�zTarInfo._proc_pax�s��� ��o�o�"�"�4�;�;�t�y�y�#9�:�� �9�9�� �!�-�-�K�!�-�-�2�2�4�K� ����� ��#�h��n��S��T�!1�5�;�;�C��E�E�E�E�(�)9�:�:� ;��U�[�[��^�,�� ��z�(�)9�:�:��V�|�c�#�h�&�(�)9�:�:�&+�k�k�!�n�v�&=��&A� #� #�E�I�I�a�L�1�$4�5L� M� �->�-H�-H��-N� *�K����&�D�.�C�8O�4P�TX�4X�(�)9�:�:� � � �� �Y�?� @��m�+��0@�� �)�&�/�/�H�&�H� �6�M�C�M�#�h��n��S��T�!1�R � ��H�/:� *�F�K���,�,�[�'�7��N�N�$�G��/�)��.�.�y�(�G�DT�DT����(���.�.�y�'�7����(��$)�K�� �#/:�( :��$�$�W�u�$�=�D� �{� *� � #� #�D�+� 6� �+� -� � #� #�D�+� 6� �_�_�/� 0�C� 7�K�O�O�L^�<_�cf��.>���� O��+�+�D�K���$��)�)���:�:�<�4�9�9�O�#C��d�k�k�$�)�)�4�4�F�!'���� ��y� ;�(�)9�:�:� ;��|� :�'��A��/�T� 9�� :�s$�2M�#M �M� N�)M>�>Nc�t� g}g}|D]d\}}}|dk(r* |jt|j����6|dk(s�< |jt|j����ft t ||��|_y#t$r t d��wxYw#t$r t d��wxYw)NsGNU.sparse.offsetrUsGNU.sparse.numbytes)rrWrJr<rY�list�zipr9)r�r�r�offsetsr��_r�r�s rDr zTarInfo._proc_gnusparse_000s��� �����!,� �A�w���.�.�?��N�N�3�u�|�|�~�#6�7��2�2�?��O�O�C�� � ��$7�8�"-��3�w��1�2�� ��"�?�,�-=�>�>�?�� "�?�,�-=�>�>�?�s�(B �(B"� B�"B7c �� |djd�D�cgc] }t|���}}tt|ddd�|ddd���|_ycc}w)Nr�,r.r-)rarWrrr9)r�r�r~�xr9s rDr zTarInfo._proc_gnusparse_01Ds]�� �"-�.>�"?�"E�"E�c�"J�K�"J�Q�#�a�&�"J��K��3�v�c��c�{�F�1�4�a�4�L�9�:�� ��Ls�Ac �� d}g}|jjt�}|jdd�\}}t |�}t |�|dzkrgd|vr"||jjt�z }|jdd�\}}|j t |��t |�|dzkr�g|jj�|_tt|ddd�|ddd���|_ y)Nr�r-r.) r�rtr rarWr>rr�r8rrr9)r�r�r~r;�fieldsr9rk�numbers rDrzTarInfo._proc_gnusparse_10Js��� ������o�o�"�"�9�-���i�i��q�)� ����V����&�k�F�Q�J�&��C���w���+�+�I�6�6���)�)�E�1�-�K�F�C� �M�M�#�f�+� &� �&�k�F�Q�J�&� #�?�?�/�/�1����3�v�c��c�{�F�1�4�a�4�L�9�:�� rFc�� |j�D]�\}}|dk(rt|d|��|dk(rt|dt|���5|dk(rt|dt|���Q|tvs�Z|tvr t ||�}|dk(r|j d�}t|||���|j�|_y#t $rd}Y�HwxYw)NzGNU.sparse.namer/rr1zGNU.sparse.realsizerrX) r��setattrrW� PAX_FIELDS�PAX_NUMBER_FIELDSr<rir�r~)r�r~rBrCr�r�s rDr�zTarInfo._apply_pax_infoZs��� �*�/�/�1�N�G�U��+�+���f�e�,��-�-���f�c�%�j�1��1�1���f�c�%�j�1��J�&��/�/�"� 1�'� :�5� A���f�$�!�L�L��-�E���g�u�-�2�"'�+�+�-���� &�"� !��"�s�5B>�> C � C c�l� |j|d�S#t$r|j||�cYSwxYw)NrS)rJ�UnicodeDecodeError)r�r�rB�fallback_encoding�fallback_errorss rDr zTarInfo._decode_pax_fieldqsA�� � D��<�<��(�3� 3��!� D��<�<� 1�?�C� C� D�s ��3�3c�j� |dkr td��t|t�\}}|r|dz }|tzS)Nrzinvalid offsetr-)rYrsr )r�r�rzr{s rDr�zTarInfo._blockysD�� � �1�9�$�%5�6� 6�"�5�)�4��� � � �a�K�F�� �!�!rFc�(� |jtvSr�)r{� REGULAR_TYPESr�s rDrdz TarInfo.isreg�s��>��y�y�M�)�)rFc�$� |j�Sr�)rdr�s rD�isfilezTarInfo.isfile�s��>��z�z�|�rFc�*� |jtk(Sr�)r{r�r�s rDrfz TarInfo.isdir����+��y�y�G�#�#rFc�*� |jtk(Sr�)r{�SYMTYPEr�s rDrgz TarInfo.issym�s��/��y�y�G�#�#rFc�*� |jtk(Sr�)r{�LNKTYPEr�s rDrez TarInfo.islnk�r.rFc�*� |jtk(Sr�)r{r�r�s rD�ischrz TarInfo.ischr�s��2��y�y�G�#�#rFc�*� |jtk(Sr�)r{r�r�s rD�isblkz TarInfo.isblk�s��.��y�y�G�#�#rFc�*� |jtk(Sr�)r{�FIFOTYPEr�s rD�isfifozTarInfo.isfifo�s��&��y�y�H�$�$rFc��|jduSr�)r9r�s rD�issparsezTarInfo.issparse�s���{�{�$�&�&rFc�>� |jtttfvSr�)r{r�r�r8r�s rD�isdevz TarInfo.isdev�s��M��y�y�W�g�x�8�8�8rFr�)r�)5r�r�r��dict� __slots__r��propertyr/�setterr0r�r�r�r�rr r�r�r�r�� classmethodr�r�� staticmethodr�r�r�r�r�r�r�r�r�r�r�r�r�r r rr�r r�rdr,rfrgrer4r6r9r;r=r�rFrDrrxs����� �,� �!� �G� �H�  �  �  � -�  �$� �>� �F� �� �� �*� � *�! �"/�# �$5�% �&9�' �*.�+ �,�- �.�/ �0�1 �I�6�0���� �[�[���������_�_�!��!�O��%�e�e��u�E�����8�8*�H�EV�/�" I� M�8Q�t�M��M� � �'��'�R�����*��*� �0-��0-�d�3��3��9=�A��A�F�)��)� �/3�)��)�( /��,�6�8w�r3�(;� ;� .�.D� "�*��$�$�$�$�$�%�'�9rFrc���eZdZ dZdZdZdZeZe Z dZ e Z eZdZ d:d�Zedddefd��Zed;d��Zedd�Zd?dd�d�Zd@dd�d�Z dAd�Z!d�Z"dBddd�d�Z#d�Z$dCddd�d�Z%d �Z& dAd!�Z'd"�Z(d#�Z)d$�Z* dDddd%�d&�Z+d'�Z,d(�Z-d)�Z.d*�Z/d+�Z0d,�Z1d-�Z2d.�Z3d/�Z4d0�Z5d1�Z6dEd2�Z7d3�Z8dAd4�Z9d5�Z:d6�Z;d7�Zy)FrrFr-Nr�c��� ddddd�}||vr td��||_|||_|sZ|jdk(r-tjj |�sd|_d|_t ||j�}d |_n^|�8t|d �r,t|jttf�r |j}t|d �r|j|_d |_|rtjj|�nd|_ ||_|�||_|�||_|�||_|�||_|�||_| |_| �|jt*k(r| |_ni|_| �| |_| �| |_| |_d |_g|_d |_|jj;�|_i|_ |jd k(rd|_ |jC�|_ |jdk(r^ |jjE|j<� |j jG|�}|j6jI|��]|jdvr�d |_|j,rm|j jQ|j,jS��}|jjU|�|xj<tW|�z c_yyy#tJ$r(|jjE|j<�Y��tL$r}tOt|��d�d}~wwxYw#|js|jjY�d |_�xYw)N�rbzr+b�wb�xb�r��ar�r�!mode must be 'r', 'a', 'w' or 'x'rJr�Fr�r�Tr��rJr�r)-r<r��_moder�r/�exists� bltn_openr�r�r�r�r�r^�abspathr�rbr<� dereference� ignore_zerosrBrCrr~�debug� errorlevel� copybufsizer��members�_loadedr�r�inodes� firstmemberr�r�r�rr�r rr�r�rur>r�)r�r�r�r�rbr<rQrRrBrCr~rSrTrU�modesrrks rDr�zTarFile.__init__�s�� ���T��=�� �u� ��@�A� A��� ��4�[�� ���y�y�C�������t�(<��� �!�� ���d�j�j�1�G�$�D� �� ���&�!9��7�<�<�#�u��6��|�|���w��'�$�\�\�� �#�D� �-1�B�G�G�O�O�D�)�t�� ��� � � � �D�K� � �"�D�L� � "�*�D� � � #� ,�D� � � �$�D�M��� � � "�t�{�{�j�'@�*�D� �!�D� � � ��D�J� � !�(�D�O�'����� ��� ��� ��l�l�'�'�)�� ��� � ��y�y�C��#'�� �#'�9�9�;�� ��y�y�C����L�L�%�%�d�k�k�2�:�"&�,�,�":�":�4�"@��� � �+�+�G�4� ��y�y�O�+�#�� ��#�#��,�,�?�?��@P�@P�@U�@U�@W�X�C��L�L�&�&�s�+��K�K�3�s�8�+�K�$�,�� *��� � �)�)�$�+�+�6��&�:�'��A��/�T�9��:�� ��#�#�� � �"�"�$��D�K� �s>�?A L<� 6K'�BL<�'.L9�L<�L9�L4�4L9�9L<�<0M,c ���� |s |s td��|dvrz�fd�}g}t�j|��D]:}t��j|�} |�|j �} | |d|fi|��cSdj|�} t d | ����d |vrb|jd d �\} }| xsd} |xsd }|�jvrt��j|�} nt d |z��| || |fi|��Sd|vrg|jdd �\} }| xsd} |xsd }| dvr td��|jdd�}t|| ||||�} �|| |fi|��}d|_|S|dvr�j|||fi|��Std��#t t f$r5} |jd|�d| ���|�|j �Yd} ~ ���d} ~ wwxYw#|j��xYw)Nznothing to open)r��r:*c�(���j|dk(S)N�taropen)� OPEN_METH)r�r�s �rD�not_compressedz$TarFile.open..not_compressedbs����}�}�X�.�)�;�;rF)�keyr�z - method z: � z'file could not be opened successfully: �:r-r�r��|r�zmode must be 'r' or 'w'r�� FrLzundiscernible mode)r<�sortedr_r�r�rr rr�rra�popr�r�r�r^)r�r�r�r�ry�kwargsr`� error_msgsr��func� saved_posr�error_msgs_summary�filemoder��streamrs` rDrz TarFile.open8s:���! �F�G��.�/� /� �<� � <��J�"�3�=�=�n�E���s�C�M�M�(�$;�<���&� '� � ��I����c�7�=�f�=�=� F�"&���:�!6� ��F�GY�FZ�[�\� \� �D�[�!%���C��!3� �H�h���3�H��(�5�H��3�=�=�(��s�C�M�M�(�$;�<��&�'D�x�'O�P�P���h��:�6�:� :� �D�[�!%���C��!3� �H�h���3�H��(�5�H��z�)� �!:�;�;�"�J�J���:�M��T�8�X�w��*�,�F� ���h��9�&�9��"�A�M��H� �_� $��3�;�;�t�T�7�=�f�=� =��-�.�.��W"�#3�4���%�%� �(��2�a�U�&C�D��*�� � �Y�/��� ��D �� � ���s$�# F� G �G �*G�G � Gc �8� |dvr td��||||fi|��S)NrIrK)r<)r�r�r�r�rhs rDr^zTarFile.taropen�s0�� � �+� +��@�A� A��4��w�1�&�1�1rFc �� |dvr td�� ddlm} |||dz||�} |j|||fi|��}d |_ |S#t$r t d�d�wxYw#t $r}|�|dk(r t d�|��d}~wwxYw#t $r'}|j�|dk(r t d�|��d}~w|j��xYw) N�r�r�r�mode must be 'r', 'w' or 'x'r)�GzipFilezgzip module is not availabler|r�r�F) r<�gziprsr�r r�rr^r�r�) r�r�r�r�r�rhrsrrs rD�gzopenzTarFile.gzopen�s��� � �� &��;�<� <� M� %� ��t�T�C�Z���H�G� ��� � �D�$��:�6�:�A��� ����+� M�"�#A�B�� L� M�� � ��"�t�s�{�� 1�2��9� �� ��� � �M�M�O��s�{�� 1�2��9� �� � �M�M�O� �s9�A�A�B�A� B�(A<�<B� C� "B/�/Cc �R� |dvr td�� ddlm}||xs|||��} |j |||fi|��}d |_ |S#t$r t d�d�wxYw#t tf$r'}|j�|dk(r td�|��d}~w|j��xYw) Nrqrrr)�BZ2Filer�)r�r�znot a bzip2 fileF) r<r�rwr�r r^r��EOFErrorr�rr�) r�r�r�r�r�rhrwrrs rD�bz2openzTarFile.bz2open�s��� � �� &��;�<� <� L� #��'�/�T�4�}�M�� ��� � �D�$��:�6�:�A��� ����!� L�"�#@�A�t� K� L����"� � �M�M�O��s�{�� 2�3��:� �� � �M�M�O� �s"�A�A�A�B&�."B�B&c �N� |dvr td�� ddlm}m}||xs|||��} |j |||fi|��}d |_ |S#t$r t d�d�wxYw#|tf$r'} |j�|dk(r td�| ��d} ~ w|j��xYw) Nrqrrr)�LZMAFiler�r�)�presetr�znot an lzma fileF) r<r�r{r�r�r r^rxr�rr�) r�r�r�r�r|rhr{r�rrs rD�xzopenzTarFile.xzopen�s��� � �� &��;�<� <� M� 0��7�?�d�D��@�� ��� � �D�$��:�6�:�A��� ����!� M�"�#A�B�� L� M���8�$� � �M�M�O��s�{�� 2�3��:� �� � �M�M�O� �s"�A�A!�A�! B$�,"B�B$r^ruryr})r�r�r�r�c�� |jryd|_ |jdvr�|jjtt dzz�|xj t dzz c_t|j t�\}}|dkDr)|jjtt|z z�|js|jj�yy#|js|jj�wwxYw)NTrLr.r) r�r�r�rur?r rrs� RECORDSIZEr�r�)r�rzr{s rDr�z TarFile.closes��� � �;�;� ��� � %��y�y�O�+�� � �"�"�3�)�a�-�#8�9�� � � �A� �.� �%+�4�;�;� �$C�!�� ��q�=��L�L�&�&�s�j�9�.D�'E�F��#�#�� � �"�"�$�$��4�#�#�� � �"�"�$�$�s �BC�)Dc�h� |j|jd��}|�td|z��|S)NrXzfilename %r not found)� _getmemberri�KeyError)r�r�r<s rD� getmemberzTarFile.getmembers;�� � �/�/�$�+�+�c�"2�3�� �?��2�T�9�:� :��rFc�t� |j�|js|j�|jSr�)�_checkrW�_loadrVr�s rD� getmemberszTarFile.getmembers$s,�� � � � � ��|�|� �J�J�L��|�|�rFc�^� |j�D�cgc]}|j��c}Scc}wr�)r�r�)r�r<s rD�getnameszTarFile.getnames.s.�� �-1�O�O�,=�>�,=��� � �,=�>�>��>s�*c�0� |jd�|� |j}|�|}tjj |�\}}|j tj d�}|jd�}|j�}||_ |�8|jstj|�}n9tj|�}n#tj|j��}d}|j}tj |�r�|j"|j$f} |jsE|j&dkDr6| |j(vr(||j(| k7rt*} |j(| }n�t,} | dr�||j(| <n�tj.|�rt0} n�tj2|�rt4} njtj6|�rt8} tj:|�}n9tj<|�rt>} ntj@|�rtB} ny||_||_"|jF|_$|jJ|_&| t,k(r|jN|_(nd|_(|jR|_*| |_+||_,tZr( t[j\|jH�d|_/tbr( tcjd|jL�d|_3| t>tBfvrhtitd�rXtitd�rHtjj|jl�|_7tjp|jl�|_9|S#t`$rY��wxYw#t`$rY��wxYw)N�awxrXr�r-r�major�minor):r�r�r�r/� splitdriver�r^r_r<r;rQ�lstat�stat�fstat�fileno�st_mode�S_ISREG�st_ino�st_dev�st_nlinkrXr2r��S_ISDIRr��S_ISFIFOr8�S_ISLNKr0�readlink�S_ISCHRr��S_ISBLKr�r��st_uidr3�st_gidr4�st_sizer1�st_mtimer2r{r[�pwd�getpwuidr5r��grp�getgrgidr6r�r��st_rdevr|r�r}) r�r��arcnamer��drvr<�statresr[�stmd�inoder{s rD� gettarinfozTarFile.gettarinfo4s��� � � � �E�� � ��<�<�D� �?��G��w�w�)�)�'�2� ��W��/�/�"�&�&�#�.���.�.��%���,�,�.����� �?��#�#��(�(�4�.���'�'�$�-���h�h�w�~�~�/�0�G������� �<�<�� ��^�^�W�^�^�4�E��#�#��(8�(8�1�(<��T�[�[�(�W�� � �E�8J�-J����;�;�u�-������8�)0�D�K�K��&� �\�\�$� ��D� �]�]�4� ��D� �\�\�$� ��D��{�{�4�(�H� �\�\�$� ��D� �\�\�$� ��D���� ��� ��n�n�� ��n�n�� � �7�?�"�?�?�G�L��G�L��(�(�� ��� �#��� � � #� � �W�[�[� 9�!� <�� � � � #� � �W�[�[� 9�!� <�� � �G�W�%� %��r�7�#���G�(<�#%�8�8�G�O�O�#<�� �#%�8�8�G�O�O�#<�� ����� �� �� � �� �s$�-'M:�'N �: N�N� N�N)rVc�� |j�|�|}|D�]�}|�r&|j� td�n(ttj|j��t|j xs |j �d|jxs |j���|j�s|j�r(tdd|j|jfzz�ntd|jz�|j� td�n.tdtj |j�ddz�t|j"|j%�rdnd z�|rP|j'�rtd |j(z�|j+�rtd |j(z�t-����y) Nz ??????????rXz%10sz%d,%dz%10dz????-??-?? ??:??:??z%d-%02d-%02d %02d:%02d:%02dr�r�z-> zlink to )r�r�r�r�rmr5r3r6r4r4r6r|r}r1r2r�� localtimer�rfrgr[rer�)r��verboserVr<s rDrz TarFile.list�sk�� � � � � � �?��G��G���<�<�'�� �-��� � �g�l�l� ;�<��w�}�}�'C�� � �'C�'.�}�}�'C�� � �'C�E�F��=�=�?�g�m�m�o���$��(8�(8�'�:J�:J�'K�K�!M�N� ����� 5�6��=�=�(�� 5�6�� =�"&�.�.����"?���"C�!D�E� �� � �w�}�}���B�G� H���=�=�?����(8�(8� 8�9��=�=�?�� �W�-=�-=� =�>� �G�5rF��filterc�d� |jd�|�|}|j�Btjj |�|jk(r|j dd|z�y|j d|�|j ||�}|�|j dd|z�y|� ||�}|�|j dd|z�y|j�r(t|d�5}|j||�ddd�y|j�r�|j|�|ruttj|��D]S}|jtjj||�tjj||�||���Uyy|j|�y#1swYyxYw) Nr�r.ztarfile: Skipped %rr-ztarfile: Unsupported type %r�tarfile: Excluded %rrFr�)r�r�r�r/rP�_dbgr�rdrO�addfilerfrf�listdir�addr)r�r�r�� recursiver�r<�fs rDr�z TarFile.add�sv�� � � � �E�� �?��G� �9�9� �R�W�W�_�_�T�%:�d�i�i�%G� �I�I�a�.��5� 6� � � � �!�T���/�/�$��0�� �?� �I�I�a�7�$�>� ?� � � ��W�o�G���� � �!�3�d�:�;�� �=�=�?��4��&�!�� � �W�a�(�'�&��]�]�_� �L�L�� !���� � �4� 0�1�A��H�H�R�W�W�\�\�$��2�B�G�G�L�L��!�4L�%�f��6�2�� �L�L�� !�'�&�s �F&�&F/c�� |jd�tj|�}|j|j|j|j �}|j j|�|xjt|�z c_|j}|��t||j |j|��t|jt�\}}|dkDr.|j jtt|z z�|dz }|xj|tzz c_|j j#|�y)Nr�)ryrr-)r�r�r�rbrBrCr�rurr>rUrrr1rsr r?rVr)r�r<r�rkryrzr{s rDr�zTarFile.addfile�s��� � � � �E���)�)�G�$���m�m�D�K�K����� � �D�� � � ���3�� � � �s�3�x�� �� � �� � � �����w�|�|�W� M� &�w�|�|�Y� ?� �F�I��1�}�� � �"�"�3�)�i�*?�#@�A��!� �� �K�K�6�I�-� -�K� � � ���G�$rFc��|��|j}|��tjjd�}|�W t t �}ddl}|jdd��}|5|j|�ddd�|jddd��}|r t|}||_|Str"tjd t d � �t"St$St'|t(�r t+d ��|St-|�r|S t|S#1swY��xYw#t$rY��wxYw#t$rtd|�d ��d�wxYw#t$rtd|�d ��d�wxYw)N� PYTHON_TARFILE_EXTRACTION_FILTERr)�#)� interpolation�comment_prefixesr;r�)�fallbackzfilter z not foundaThe default behavior of tarfile extraction has been changed to disallow common exploits (including CVE-2007-4559). By default, absolute/parent paths are disallowed and some mode bits are cleared. See https://access.redhat.com/articles/7004769 for more details.r)� stacklevelzrString names are not supported for TarFile.extraction_filter. Use a function such as tarfile.data_filter directly.)�extraction_filterr��environr�rO�_CONFIG_FILENAME� configparser� ConfigParser� read_file�FileNotFoundError�_NAMED_FILTERSr�r<�_RH_SAFER_DEFAULT�warnings�warn�RuntimeWarningrrr�r�� TypeError�callable)r�r�r��filer��confs rD�_get_filter_functionzTarFile._get_filter_function s��� �>��+�+�F��~��z�z�~�~�&H�I���<�5�(�)9�:��,�+�8�8�*.�-4� 9� ��"� �N�N�4�0�"�#�x�x� �(J�13� (� 5���S�!/��!5��.4�D�*�!�M�$��M�M�.�'�1�6�&�%�+�+��&�#�&��6�7�7��M� �F� ��M� G�!�&�)� )�C"�T��-����� $�S�(�7�6�*�J�)G�H�d�R�S��4� G��w�v�j� �;�<�$� F� G�s5�D �D� D�7D8�D � D�D�D5�8E)� numeric_ownerr�c��� g}|j|�}|�|}|D]a}|j|||�\}} |��|j�r|j| �|j |||j� ||���c|j d�d��|D]�} || |�}|�|j| d��#tjj||j�} tj| �} tj | j"�s|j|d���|j%|| |��|j'|| �|j)|| ���y#t $r%} |j| t| ��Yd} ~ ��d} ~ wwxYw#t$r|j|d�Y��wxYw#t*$r} |j-| �Yd} ~ ��Cd} ~ wwxYw) N)� set_attrsr��filter_functionc��|jSr�r�)rJs rD�z$TarFile.extractall..a s��q�v�vrFT)ra�reversezexcluded by filter�missingznot a directory)r�)r��_get_extract_tarinforfr� _extract_one�sort�_FILTER_ERRORS�_log_no_directory_fixup�reprr�r/rr�r�r�r�r�r��chown�utime�chmodr �_handle_nonfatal_error)r�r/rVr�r�� directoriesr�rjr<� unfiltered�exc�dirpathr�rs rD� extractallzTarFile.extractall> s��� �� ��3�3�F�;�� �?��G��F�"&�";�";����#/� �G�Z�����}�}���"�"�:�.� � � �g�t�7�=�=�?�7J�,9�.=� � ?�� ���-�t��<�&�J� /��-�j�$�?�G��?��0�0��1E�G���'�'�,�,�t�W�\�\�:����H�H�W�-�E��|�|�E�M�M�2��0�0��:K�L��� � �7�G�=� �I�� � �7�G�,�� � �7�G�,�5&�� &���0�0��T�#�Y�G�����)���0�0��)�D���� � /��+�+�A�.�.�� /�sl� E%�#F8�8*F8�#F�81F8�*8F8�% F�.F� F8�F�F8�F5�1F8�4F5�5F8�8 G�G�Gc�J�|jdd|j�d|�d��y)Nr.z!tarfile: Not fixing up directory z (�))r�r�)r�rj�reasons rDr�zTarFile._log_no_directory_fixup� s�� � � �!��;�;��(� )rFc�� |j|�}|j|||�\}}|�|j|||||��yy)N)r�)r�r�r�) r�rjr/r�r�r�r�r<r�s rD�extractzTarFile.extract� s^�� ��3�3�F�;��"�7�7� �O�T�+���� � � � � �g�t�Y� �.=� � ?� rFc��� t|t�r|j|�}n|}d} |||�}|� |jdd|jz�y|j�rDtj|�}tjj||j�|_||fS#ttf$r}|j |�Yd}~��d}~wt $r}|j|�Yd}~��d}~wwxYw)Nr.r�)NN)r�r�r�r�r�_handle_fatal_errorr r�r�r�rer�r�r/rr[r�)r�rjr�r/r��filteredrs rDr�zTarFile._get_extract_tarinfo� s��� � �f�c� "�����/�J��J��� +�&�z�4�8�H� � � �I�I�a�/�*�/�/�A� B�� �>�>� ��y�y��*�H�$&�G�G�L�L��x�7H�7H�$I�H� !���#�#����%� (� � $� $�Q� '� '��� +� � '� '�� *� *�� +�s#� B,�,C8�;C� C8�C3�3C8c�:� |jd� |j|tjj ||j �||||��y#t $r}|j|�Yd}~yd}~wt$r}|j|�Yd}~yd}~wwxYw)Nr�)r�r�r��extraction_root) r��_extract_memberr�r/rr�r�r�r r�)r�r<r/r�r�r�rs rDr�zTarFile._extract_one� s��� � � � �C�� +� � � ��"�'�'�,�,�t�W�\�\�*J�+4�/<�1@�15� !� 7�� � (� � $� $�Q� '� '��� +� � '� '�� *� *�� +�s#�?A� B�A3�3 B�?B�Bc�P� |jdkDr�|jdd|z�y)Nr-� tarfile: %s)rTr��r�rs rDr�zTarFile._handle_nonfatal_error� s'��K� �?�?�Q� � � �I�I�a���*� +rFc�N� |jdkDr�t|t�rY|j� |j dd|j z�y|j dd|j �d|j���y|j ddt |�j�d|���y)Nrr-r�z tarfile: r)rTr�r��filenamer��strerrorr{r�r�s rDr�zTarFile._handle_fatal_error� sw��?� �?�?�Q� � � ��7� #��z�z�!�� � �!�]�Q�Z�Z�7�8�� � �!����Q�Z�Z�H�I� �I�I�a�T�!�W�-=�-=�q�A� BrFc�� |jd�t|t�r|j|�}n|}|j �s|j t vr|j||�S|j�s|j�rEt|jt�r td��|j|j|��Sy)Nr�z'cannot extract (sym)link as file object)r�r�r�r�rdr{r�� fileobjectrergr�r�r � extractfile�_find_link_target)r�rjr<s rDr�zTarFile.extractfile� s��� � � � �C�� �f�c� "��n�n�V�,�G��G� �=�=�?�g�l�l�/�A��?�?�4��1� 1� �]�]�_�� � ���$�,�,��0�"�"K�L�L��'�'��(>�(>�w�(G�H�H�rF�r�r�c�� |jd�}|jdtj�}tjj |�}|r4tjj |�stj|�|j�s|j�r,|jd|j�d|j���n|jd|j�|j�r|j||�n�|j�r|j!||�n�|j#�r|j%||�n�|j'�s|j)�r|j+||�nm|j�s|j�r|j-||||��n7|j.t0vr|j3||�n|j||�|rI|j5|||�|j�s%|j7||�|j9||�yyy)NrXr-z -> r�)rir�r�r^r/rhrN�makedirsrergr�r�r[rd�makefilerf�makedirr9�makefifor4r6�makedev�makelink_with_filterr{r�� makeunknownr�r�r�)r�r<� targetpathr�r�r�r�� upperdirss rDr�zTarFile._extract_member s��� � �&�&�s�+� ��'�'��R�V�V�4� ��G�G�O�O�J�/� � �R�W�W�^�^�I�6� �K�K� � "� �=�=�?�g�m�m�o� �I�I�a�w�|�|�W�5E�5E�F� G� �I�I�a���� &� �=�=�?� �M�M�'�:� .� �]�]�_� �L�L��*� -� �^�^� � �M�M�'�:� .� �]�]�_�� � �� �L�L��*� -� �]�]�_�� � �� � %� %��� /� /� &� 1��\�\�� 0� � � �W�j� 1� �M�M�'�:� .� � �J�J�w� �M� :��=�=�?�� � �7�J�/�� � �7�J�/�#� rFc��� |j�tj|�ytj|d�y#t$r#tjj |�s�YywxYw)Ni�)r�r��mkdir�FileExistsErrorr/rf�r�r<rs rDrzTarFile.makedir9 sY�� � ��|�|�#�����$�����U�+��� ��7�7�=�=��,��-� �s�!<�<�)A(�'A(c ��� |j}|j|j�|j}t |d�5}|j �d|j D])\}}|j|�t |||t|��+|j|j�|j�nt |||jt|�ddd�y#1swYyxYw)NrG) r�r�r8rUrOr9rrrr1�truncate)r�r<r�sourcery�targetrr1s rDrzTarFile.makefileH s��� ������ � �G�'�'�(��"�"�� �z�4� (�F��~�~�)�$+�N�N�L�F�D��K�K��'�����i��I�%3�� � �G�L�L�)����!��F�F�G�L�L�)�W�M�)� (� (�s �BC�C!c�h� |j||�|jdd|jz�y)Nr-z9tarfile: Unknown file type %r, extracted as regular file.)rr�r{r s rDrzTarFile.makeunknownX s8�� � � � �g�z�*� � � �!�2�4;�L�L�A� BrFc�f� ttd�rtj|�ytd��)N�mkfifozfifo not supported by system)r�r�rr r s rDrzTarFile.makefifo` s)�� � �2�x� � �I�I�j� !��=�>� >rFc�h� ttd�rttd�s td��|j}|�d}|j �r|t j z}n|t jz}tj||tj|j|j��y)N�mknodrz'special devices not supported by systemrZ) r�r�r r�r6r��S_IFBLK�S_IFCHRrrr|r})r�r<rr�s rDrzTarFile.makedevh s��� ��r�7�#�7�2�y�+A��H�I� I��|�|�� �<��D� �=�=�?� �D�L�L� �D� �D�L�L� �D� ����T����G�,�,�g�.>�.>�?� ArFc�*�|j||dd�Sr�)rr s rD�makelinkzTarFile.makelinkz s���(�(��*�d�D�I�IrFc�*� d} |j�rUtjj|�rtj|�tj |j |�ytjj|j�r>tjtjj|j�|�y |j|�}|�|}n>|� td�� ||j|j d��|�}|�y|||�}|�|j'||||��yy#t$rd}Y�{wxYw#t$r|r td�d��wxYw#t"$r}t%||j �|�d}~wwxYw)NFTz%unable to resolve link inside archivez[makelink_with_filter: if filter_function is not None, extraction_root must also not be None)r�rtr�)rgr�r/�lexists�unlink�symlinkr[rNr��linkr\�symlink_exceptionr�r�r r�r�r�rUr�) r�r<rr�r��keyerror_to_extracterrorr�r��causes rDrzTarFile.makelink_with_filter} s��� �$)� � ,��}�}���7�7�?�?�:�.��I�I�j�)�� � �7�+�+�Z�8���7�7�>�>�'�"6�"6�7� �G�G�B�G�G�,�,�W�-A�-A�B�J�O�� 8� ��/�/��8�J� � "�!�H��&�"�>�?�?� M�*��&�&�G�L�L�u�&�E�#�%���#��*�:��G�� � � � � ��:�1@�1@� !� B� ��9!� ,�'+� $� ,�� � �'�"�;�=�BF�G��  ��*"� M�'�����A�u�L�� M�sC�A$E�*A&E�E�7&E-� E-� E� E�E*�- F�6F � Fc�� ttd�r�tj�dk(r�|j}|j}|sj t r.|j r"t j|j �d} tr.|jr"tj|j�d}|�d}|�d} |j�r(ttd�rtj|||�ytj|||�yyy#t$rY��wxYw#t$rY�uwxYw#t$r}t!d�|�d}~wwxYw)N�geteuidrr.rH�lchownzcould not change owner)r�r�r$r4r3r�r6�getgrnamr�r�r5�getpwnamrgr%r�r�r )r�r<rr��g�urs rDr�z TarFile.chown� s�� � �2�y� !�b�j�j�l�a�&7�� � �A�� � �A� ���w�}�}��L�L����7��:����w�}�}��L�L����7��:���y����y��� D��=�=�?�w�r�8�'<��I�I�j�!�Q�/��H�H�Z��A�.�/'8� !�� �����  ������ D�"�#;�<�!�C�� D�sB�4D�94D�67D&�.D&� D�D� D#�"D#�& E�/ D;�;Ec�� |j�y tj||j�y#t$r}t d�|�d}~wwxYw)Nzcould not change mode)r�r�r�r�r )r�r<rrs rDr�z TarFile.chmod� sI�� � �<�<� � � ?� �H�H�Z���� .��� ?��6�7�Q� >�� ?�s� 1� A � A�A c�� |j}|�yttd�sy tj|||f�y#t$r}t d�|�d}~wwxYw)Nr�z"could not change modification time)r2r�r�r�r�r )r�r<rr2rs rDr�z TarFile.utime� s]�� �� � �� �=� ��r�7�#� � L� �H�H�Z�%��� 0��� L��C�D�!� K�� L�s�<� A� A�Ac�N� |jd�|j�|j}d|_|S|j|jj �k7r^|jdk(ry|jj |jdz �|jj d�s td��d} |jj|�} |�|j0j3|�|Sd|_|S#t$rU}|jr?|jdd|j|fz�|xjtz c_Yd}~��Yd}~��d}~wt$rz}|jr?|jdd|j|fz�|xjtz c_Yd}~��|jdk(rtt|��d�Yd}~��d}~wt $r|jdk(r td�d�Y��-t"$r/}|jdk(rtt|��d�Yd}~��_d}~wt$$r}tt|��d�d}~wt&$r@} ddl}t+||j,�rtd |���d�|�#t.$r|�wxYwd}~wwxYw) N�rarr-rpTr.z0x%X: %sz empty filez zlib error: )r�rYrr�r�r�rtrr<r�r�rRr�r rYr�r�r�r�� Exceptionr�r�r�r�rVrrW)r��mr<rr�s rDr�z TarFile.next� sW�� � � � �D�� � � � '�� � �A�#�D� ��H� �;�;�$�,�,�+�+�-� -��{�{�a��� �L�L� � �d�k�k�A�o� .��<�<�$�$�Q�'�� 8�9�9���� ��,�,�2�2�4�8��< � � � �L�L� � �� (��� �D�L����I"� ��$�$��I�I�a��t�{�{�A�.>�!>�?��K�K�9�,�K��%��&� 6��$�$��I�I�a��t�{�{�A�.>�!>�?��K�K�9�,�K���[�[�A�%�#�C��F�+��5�&��#� <��;�;�!�#�#�L�1�t�;�$�'� 6��;�;�!�#�#�C��F�+��5�$��(� 2���A��'�T�1��� ���!�!�T�Z�Z�0�'�,�q�c�(:�;��E����"���G��� �sb�=D� J$� AE� J$�&AG�1$G�'J$�J$� $H7�7 J$�I� J$�%+J� J�J�J$c�� |j�}d}|� |j|�}|d|}|rtjj |�}t |�D]a}|r|j|jk(rd}�!|r*tjj |j�}n |j}||k(s�_|cS|r t|��y#t$rd}Y��wxYw)NFT) r��indexr<r�r/rb�reversedrr�) r�r�r<� normalizerV�skippingr1rj� member_names rDr�zTarFile._getmember2 s��� ��/�/�#���� � � *�� � �g�.��"�&�5�/�� ��7�7�#�#�D�)�D��w�'�F���>�>�V�]�]�2�$�H��� �g�g�.�.�v�{�{�;� �$�k�k� ��{�"�� �(� ��W�%� %� ��1� � �� �s�C � C�Cc�X� |j�� |j���d|_yr)r�rWr�s rDr�z TarFile._loadZ s-�� ��i�i�k�%� ��i�i�k�%��� rFc�� |jr"td|jjz��|�'|j|vrtd|jz��yy)Nz %s is closedzbad operation for mode %r)r�r�r=r�r�)r�r�s rDr�zTarFile._checkb sX�� � �;�;��.�4�>�>�+B�+B�B�C� C� � �� � �� 5��5�� � �A�B� B�!6� rFc�.� |j�rQdjtdtjj |j �|jf��}d}n|j}|}|j||d��}|�td|z��|S)NrXT)r<r3zlinkname %r not found) rgrr�r�r/rhr�r[r�r�)r�r<r[�limitrjs rDr�zTarFile._find_link_targetk s��� � �=�=�?��x�x��t�b�g�g�o�o�g�l�l�.K�W�M]�M]�-^� _�`�H��E��'�'�H��E�����5�D��I�� �>��2�X�=�>� >�� rFc#�TK� |jr|jEd{���yd}|j�|j�}|dz }|�� |t |j�kr|j|}n'|js|j�}|s d|_yy|dz }|���Y7���w)Nrr-T)rWrVrYr�r>)r�r1r<s rD�__iter__zTarFile.__iter__~ s����� � �<�<��|�|� #� #� ��� � � � '��i�i�k�G� �Q�J�E��M���s�4�<�<�(�(��,�,�u�-���\�\��)�)�+���#'�D�L��� �Q�J�E��M�� $�s�B(�B&�BB(c�\� ||jkrt|tj��yy)N�r�)rSr�r��stderr)r��level�msgs rDr�z TarFile._dbg� s&�� � �D�J�J� � �#�C�J�J� '� rFc�&�|j�|Sr�)r�r�s rD� __enter__zTarFile.__enter__� s�� � � � �� rFc��|�|j�y|js|jj�d|_yr)r�r�r�r�)r�r{r�� tracebacks rD�__exit__zTarFile.__exit__� s2�� �<� �J�J�L��#�#�� � �"�"�$��D�KrF) Nr�NNNNNNr�NNNN)r�N)r�Nre)r�NN)NNN�Trr�)�.N)r�T)TFr")?r�r�r�rSrQrRrTrrbr rBrCrr<r6r�r�r�rBrrr^ruryr}r_r�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrr�r�r�r�r�r�r�r�r;r�rBrEr�rFrDrr�s���� �E��K��L��J��F��H� �F��G��J���AE�HL�>B�)-�b�^��#�t�Z�]/��]/�~�2��2�����@����6����:���� �I�%�* ��?� a�F$�D�$�L1"��1"�f%�23G�jC/�%��C/�J)�?���?�*$�>&*�+�(,� C��@>B�&+�10�@D�(,�10�p �N� B�?�A�$J�9B�vD�B?� L�<�B&&�P�C��&�>(� �rFrc��� t|d�r.|j�}t|��}|j|�n t|�}|j �y#t $rYywxYw)Nrt)r�TF)r�r�rr�r�r)r�r�rs rDrr� s]��� � �4�� ��)�)�+�C��T�"�A� �I�I�c�N��T� �A� ��� ��� ����s�AA� A%�$A%c ��ddl}d}|j|��}|jddddd� �|jd d td � �|j d��}|jdddd��|jddddd��|jddddd��|jdd dd!��|j �}|j r|j�|jd"d#�|j��|j}t|�rut|d$�5}|j�t|j�tj�%�ddd�|j r=td&j#|��y|jd"d'j#|��yy|j$�u|j$}t|�rzFilter for extraction)�metavar�choicesrNT)�requiredz-lz--list� zShow listing of a tarfile)rOrNz-ez --extract�+)rRz zExtract tarfile into target dir)�nargsrOrNz-cz--create)zzzCreate tarfile from sourcesz-tz--testzTest 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. r\)r�r.)r/r�rGz{!r} file is extracted.z+{!r} file is extracted into {!r} directory.r�r�r�)r�z.tgzz.xzz.txzz.bz2z.tbzz.tbz2z.tb2zw:r�z{!r} file created.)�argparse�ArgumentParser� add_argumentr��add_mutually_exclusive_group� parse_argsr�r��exit�testrrr�r�r�r>r�rbrrr>r��curdir� format_helpr��creatergr/�splitextr�)rUrJ�parserr�argsrvr��tfr\r@�tar_namer�ext� compressions�tar_mode� tar_files� file_names rD�mainri� s����G�K� � $� $�� $� =�F� ����k�,��-��/� ��� �N� .�4��6� � /� /�� /� >�E� ���t�X�{�7��9� ���t�[��<�=��?� ���t�Z�s�3�9��;� ���t�X�{�8��:� � � � �D� �{�{�t�|�|�+�� � �A�@�A� �y�y���i�i�� �c�?��c�3��3���� ��c�n�n�&�S�Z�Z�8� ��|�|��.�5�5�c�:�;� �K�K��9�@�@��E� F�� ��� ��i�i�� �c�?����c�5�)�R����� � ��-�*�)� �K�K��9�@�@��E� F� ��� !� �t�|�|� �� !��,�,�q�/�C��Y�Y�F� ���� �!� #��,�,�K�C�� �K�K��6�-�-�/� 0� �c�?����c�5�)�R�� � �6�$�+�+� �>�*��|�|��S�=�3�:�:�3�?�C�2�39�6�#�v�3F���c� � �K�K��9�@�@��E� F�� ��� ��;�;�?�?�1�%�����!�!�(�+���3���������  � �03�l�/B�4�,�s�+�+����K�K� � �\�\�(�H� -��&� ����y�!�'�.� �<�<� �&�-�-�h�7� 8� �/ !�M ���*�)��*�)��>.� -�s0�:P-�P:�Q�"Q�-P7�:Q�Q�Q�__main__rF)o�version� __author__� __credits__�builtinsrrOr�r�r(rqr�r�rir��rer�r�r�r��AttributeError�NotImplementedErrorr�r �__all__r�r�r?r rr�r�r�r�r�r�r�r2r0r�r�r�r8�CONTTYPEr�r�r�r�r�r�rrrrr�r*r�r"r r�rWr#r�r �getfilesystemencodingrErLr\rdrnrrr�r.rr rr r r r�r�r�rYr�r�r��objectr�r�BufferedReaderr6rrrrrrrUr�rqrrrr�r��compilerrrrrir�r�rFrD�rxs���:���6� �H� � '� � � � � � � � � ������$�%8�'�B�� *����-��  �� � � ��^� � � �� �� �� �� � �� �� �� �� �� �� �� �� �������� �� ����� � � � � ��� �H�g��G�X��W�g�#�%5�!� #���(��>�+� ��/� � � �.� �9�� � � � � � � ���7�7�d�?��H�(�s�(�(�*�H� 0�&� �(�N� �< *�"&��$� �2� �y� � �8� � �� � �x� � �(� � �(� � �{� � �;� � �[� � �� � �K� ���0t�t�n�6��