Sindbad~EG File Manager

Current Path : /usr/local/lib/python3.12/site-packages/PIL/__pycache__/
Upload File :
Current File : //usr/local/lib/python3.12/site-packages/PIL/__pycache__/TiffImagePlugin.cpython-312.pyc

�

&ٜg�E���ddlmZddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZddlm
Z
ddlmZmZddlmZmZmZmZmZmZddlmZmZmZmZmZmZdd	lm Z!dd
lm"Z#ddlm$Z$ddl%m&Z&dd
l'm(Z(ddl)m*Z*ddlm+Z+erddl'm,Z,m-Z-ej\e/�Z0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@d ZAd!ZBd"ZCd#ZDd$ZEd%ZFd&ZGd'ZHd(ZId)ZJd*ZKd+ZLd,ZMd-ZNd.ZOd/ZPd0ZQd1ZRd2ZSd3ZTd4ZUd5ZVd6ZWd7ZXd8ZYd9ZZd:Z[d;Z\d<Z]d=Z^idd>�d?d@�dAdB�dCdD�dEdF�dGdH�dIdJ�dKdL�dMdN�dOdP�dQdR�dSdT�dUdV�dWdX�dYdZ�d[d\�d]d^�Z_e_j��D��cic]\}}||��
c}}Zaie4dd_dd_d`fda�e5dd_dd_d`fda�e4dd_d?d_d`fdb�e5dd_d?d_d`fdb�e4dd_dd_d`fdc�e5dd_dd_d`fdc�e4dd_d?d_d`fdd�e5dd_d?d_d`fdd�e4dd_dded`fdf�e5dd_dded`fdf�e4dd_d?ded`fdg�e5dd_d?ded`fdg�e4dd_dded`fdh�e5dd_dded`fdh�e4dd_d?ded`fdi�e5dd_d?ded`fdi�e4dd_ddjd`fdk�ie5dd_ddjd`fdk�e4dd_d?djd`fdl�e5dd_d?djd`fdl�e4dd_ddjd`fdm�e5dd_ddjd`fdm�e4dd_d?djd`fdn�e5dd_d?djd`fdn�e4dd_ddod`fdp�e5dd_ddod`fdp�e4dd_d?dod`fdq�e5dd_d?dod`fdq�e4dd_ddod`fdr�e5dd_ddod`fdr�e4ddeddod`fdr�e5ddeddod`fdr�e4dd_d?dod`fds�e5dd_d?dod`fds��ie4dd_ddtd`fdu�e4dd_ddvd`fdw�e4dd_ddvd`fdw�e5dd_ddvd`fdx�e4dd_d?dvd`fdy�e4ddeddvd`fdz�e5ddeddvd`fd{�e4dd|dd}d`fd~�e5dd|dd}d`fd�e4dd_dd}d`fd��e4ddedd}d`fd��e5ddedd}d`fd��e4dd|dd}d`fd~�e5dd|dd}d`fd�e4dd_dd�defd��e5dd_dd�defd��e4d?d_dd�d`fd���ie5d?d_dd�d`fd��e4d?d_d?d�d`fd��e5d?d_d?d�d`fd��e4d?d_dd�d`fd��e5d?d_dd�d`fd��e4d?d_dd�d�fd��e5d?d_dd�d�fd��e4d?d_dd�d�fd��e5d?d_dd�d�fd��e4d?d_dd�d�fd��e5d?d_dd�d�fd��e4d?d_dd�d_fd��e5d?d_dd�d_fd��e4d?d_dd�d�fd��e5d?d_dd�d�fd��e4d?d_dd�d�fd��e5d?d_dd�d�fd���ie4d?d_dd�defd��e5d?d_dd�defd��e4d?d_dd�d�fd��e5d?d_dd�d�fd��e4d?d_dd�d�fd��e5d?d_dd�d�fd��e4d?d_dd�d�fd��e5d?d_dd�d�fd��e4d?d_dd�d`fd��e5d?d_dd�d`fd��e4d?d_dd�d`fd��e5d?d_dd�d`fd��e4d?d_dd�d�fd��e5d?d_dd�d�fd��e4d?d_dd�d_fd��e5d?d_dd�d_fd��e4d?d_dd�defd���ie5d?d_dd�defd��e4dAd_dd_d`fd��e5dAd_dd_d`fd��e4dAd_d?d_d`fd��e5dAd_d?d_d`fd��e4dAd_dded`fd��e5dAd_dded`fd��e4dAd_d?ded`fd��e5dAd_d?ded`fd��e4dAd_ddjd`fd��e5dAd_ddjd`fd��e4dAd_d?djd`fd��e5dAd_d?djd`fd��e4dAd_ddod`fd��e5dAd_ddod`fd��e4dAd_dd�d�fd��e4dAd_dd�defd���ie5dAd_dd�defd��e4dAd_d?dod`fd��e5dAd_d?dod`fd��e4dEd_dd�d`fd��e5dEd_dd�d`fd��e4dEd_dd�d�fd��e5dEd_dd�d�fd��e4dEd_dd�d�fd��e5dEd_dd�d�fd��e4dEd_dd�d`fd��e5dEd_dd�d`fd��e4dGd_ddod`fdr�e5dGd_ddod`fdr�e4dGd_dd�d`fd��e5dGd_dd�d`fd��e4dKd_dd�d`fd��e5dKd_dd�d`fd���Zbecd��ebD��Zdgd��Zeefej�d�d��s	e&d�d��d�d��Zh						d�d��Zi								d�d��ZjiZkiZld�d��ZmGd��d�e�Zned�eoepgefZqd�dÄZrd�dĄZsd�dńZtereeuefZvneZvGdƄd�ev�Zwekew_kelew_le+j��D]:\ZxZyeyj�d�dȫZye{ewd�ey��ekexd�e{ewd�ey��elex��<[k[l[x[yGd˄d�ew�Z|e|Z}Gd̈́d�ej6�Z~id�d�e4ddd_df�d�d�e4dddodf�d�d�e4ddd�d?f�d�d�e4dAddodf�d�d�e4dAdd�d?f�d�d�e4dd?d}df�d�d�e4dddvdf�d�d�e4dd?dvdf�d�d�e4ddAd}df�d�d�e4d?dd�df�d�d�e4d?dd�df�d�d�e4d?dd�d?f�d�d�e4dEdd�df�d�d�e4dGdd�df�d�d�e4dKdd�df�d�d�e5dd?d}df�d�d�e5dddvdf�d�e5dd?dvdfd�e5ddAd}dfd��Zd�d�Z�Gd�d�e�j�Z�d�d�Z�e�je~�j
e~eh�e�je~�j
e��e�je~�j
e��e�je~�j
d�d�g�e�je~�j
d�ycc}}w)��)�annotationsN)�Iterator�MutableMapping)�Fraction)�Number�Rational)�IO�
TYPE_CHECKING�Any�Callable�NoReturn�cast�)�ExifTags�Image�	ImageFile�ImageOps�ImagePalette�TiffTags)�i16be)�i32be)�o8)�	deprecate)�StrOrBytesPath)�is_path��TYPES)�Buffer�IntegralLikeF�sIIsMM��iiiii
i�iiiiiii(i-i1i2i;i=i@iBiC�DiEiJiRiSi[iii��i��iI�is�ii�i�ii��i���raw��
tiff_ccitt��group3��group4��tiff_lzw��	tiff_jpeg��jpeg��tiff_adobe_deflatei��tiff_raw_16i��packbitsi)��tiff_thunderscani���tiff_deflateit��tiff_sgilogiu��
tiff_sgilog24im��lzmaiP��zstdiQ��webp�r�)�1z1;I)r?z1;IR)r?r?)r?z1;R)r&)�LzL;2I)r@zL;2IR)r@zL;2)r@zL;2R)r*)r@zL;4I)r@zL;4IR)r@zL;4)r@zL;4R)r2)r@zL;I)r@zL;IR)r@r@)r@zL;R)�)�I;16zI;12)�)rBrB)�I;16BrD)rBzI;16R)�I�I;16S)rE�I;16BS)r()� )�F�F;32F)rI�F;32BF)rEzI;32N)rE�I;32S)rE�I;32BS)r2r2)�LArN)r2r2r2)�RGBrO)rOzRGB;R)r2r2r2r2)�RGBArP�r)rO�RGBX)r2r2r2r2r2�rr)rO�RGBXX)r2r2r2r2r2r2)rrr)rO�RGBXXX)rP�RGBa)rr)rP�RGBaX)rrr)rP�RGBaXX)r&r)rP�RGBAX)r&rr)rP�RGBAXX)i�)rCrCrC)rOzRGB;16L)rOzRGB;16B)rCrCrCrC)rPzRGBA;16L)rPzRGBA;16B)rOzRGBX;16L)rOzRGBX;16B)rPzRGBa;16L)rPzRGBa;16B)�PzP;1)r[zP;1R)r[zP;2)r[zP;2R)r[zP;4)r[zP;4R)r[r[)r[�PX)�PAr])r[zP;R)�CMYKr^)r^�CMYKX)r^�CMYKXX)r^zCMYK;16L)r^zCMYK;16B)�LABrac#�8K�|]}t|d����y�w)r*N)�len)�.0�key_tps  �>/usr/local/lib/python3.12/site-packages/PIL/TiffImagePlugin.py�	<genexpr>rgs����A�y�V�#�f�Q�i�.�y�s�)�MM*�II*sMM*sII*sMM+sII+�libtiff_support_custom_tagsTz*Support for LibTIFF earlier than version 4rAc��|ddtvS�Nr*)�PREFIXES��prefixs rf�_acceptrp"s���"�1�:��!�!�c�x�t|�dkD}t|rd|zn|�j|�}|r|ddd�S|S)Nr���)�abs�IFDRational�limit_rational)�val�max_val�inv�n_ds    rf�_limit_rationalr{&sC���c�(�Q�,�C�
��a�#�g�#�
.�
=�
=�g�
F�C��3�t��t�9�$��$rqruc�
�t|�}|j|jf}td�|D��|krt	|t|��}t
d�|D��}t|�|kDrt	|d|dz|�}|S)Nc3�2K�|]}t|����y�w�N��float�rd�is  rfrgz)_limit_signed_rational.<locals>.<genexpr>4s����
!�S��5��8�S���c3�2K�|]}t|����y�wr~rr�s  rfrgz)_limit_signed_rational.<locals>.<genexpr>7s����,��1�e�A�h��r�rr)r�	numerator�denominator�minr{rt�tuple�max)rwrx�min_val�fracrz�	n_d_floats      rf�_limit_signed_rationalr�.s~���C�=�D�-1�^�^�T�=M�=M�-M�C�
�
!�S�
!�!�G�+��c�3�w�<�0���,��,�,�I�
�9�~����i��l�Y�q�\�9�7�C���Jrqc� ��						d�fd�}|S)Nc�6��t|j��|�Sr~)�getattr�_val)�self�args�ops  �rf�delegatez_delegate.<locals>.delegateFs���&�w�t�y�y�"�%�t�,�,rq)r�rur�ztuple[float, ...]�returnzbool | float | Fractionr>)r�r�s` rf�	_delegater�Es'���-��-�"3�-�	 �-�
�Orqc�F�eZdZdZ	dZ	d(					d)d�Zed*d��Zed+d��Zd,d�Z	d-d�Z
d+d�Zd.d	�Zd/d
�Z
d0d�Z	ed�Zed
�Zed�Zed�Zed�Zed�Zed�Zed�Zed�Zed�Zed�Zed�Zed�Zed�Zed�Zed�Zed�Z ed�Z!ed�Z"ed�Z#ed �Z$ed!�Z%ed"�Z&ed#�Z'ed$�Z(ed%�Z)e*e+d&�r	ed&�Z,y'y')1ruz�Implements a rational class where 0/0 is a legal value to match
    the in the wild use of exif rationals.

    e.g., DigitalZoomRatio - 0.00/0.00  indicates that no digital zoom was used
    )�
_numerator�_denominatorr�c��|t|t�r4|j|_|j|_|j|_yt|t�r#|j|_|j|_n*trtt|�|_n||_||_|dk(rtd�|_y|dk(rt|�|_yt|�|k(rtt|�|�|_yt||z�|_y)z�
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr�nanr)
�
isinstancerur�r�r�r�r�rr
rrr��int)r��valuer�s   rf�__init__zIFDRational.__init__\s���	
��e�[�)�#�o�o�D�O� %� 1� 1�D���
�
�D�I���e�X�&�#�o�o�D�O� %� 1� 1�D���"&�|�U�";���"'��� +�D���!���e��D�I�
�A�
� ���D�I�
��Z�5�
 � ��U��[�9�D�I� ���!4�5�D�Irqc��|jSr~)r��r�s rfr�zIFDRational.numerator~s�����rqc��|jSr~)r�r�s rfr�zIFDRational.denominator�s��� � � rqc���|jdk(r|j|jfSt|jt�sJ�|jj|�}|j|jfS)z�

        :param max_denominator: Integer, the maximum denominator value
        :returns: Tuple of (numerator, denominator)
        r)r�r�r�r�r�limit_denominator)r��max_denominator�fs   rfrvzIFDRational.limit_rational�sb�����q� ��>�>�4�#3�#3�3�3��$�)�)�X�.�.�.��I�I�'�'��8���{�{�A�M�M�)�)rqc�>�tt|j��Sr~)�strr�r�r�s rf�__repr__zIFDRational.__repr__�s���5����#�$�$rqc�6�|jj�Sr~)r��__hash__r�s rfr�zIFDRational.__hash__�s���y�y�!�!�#�#rqc��|j}t|t�r|j}t|t�rt|�}||k(Sr~)r�r�rur�)r��otherrws   rf�__eq__zIFDRational.__eq__�s;���i�i���e�[�)��J�J�E��e�U�#���*�C��e�|�rqc�H�|j|j|jgSr~)r�r�r�r�s rf�__getstate__zIFDRational.__getstate__�s���	�	�4�?�?�D�,=�,=�>�>rqc���tj|d�|\}}}t|ttf�sJ�||_trtt|�|_	n||_	t|t�sJ�||_y�Nr)rur�r�r�rr�r
rrr�r�r�)r��stater�r�r�s     rf�__setstate__zIFDRational.__setstate__�sj�����T�1�%�).�&��j�,��$��� 1�2�2�2���	��"�<��<�D�O�(�D�O��,��,�,�,�(��rq�__add__�__radd__�__sub__�__rsub__�__mul__�__rmul__�__truediv__�__rtruediv__�__floordiv__�
__rfloordiv__�__mod__�__rmod__�__pow__�__rpow__�__pos__�__neg__�__abs__�	__trunc__�__lt__�__gt__�__le__�__ge__�__bool__�__ceil__�	__floor__�	__round__�__int__Nr=)r��float | Fraction | IFDRationalr�r�r��None)r�r�r�r�)r�r�r�ztuple[IntegralLike, int]�r�r�)r��objectr��bool)r��%list[float | Fraction | IntegralLike])r�r�r�r�)-�__name__�
__module__�__qualname__�__doc__�	__slots__r��propertyr�r�rvr�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�r�r�r�r��hasattrrr�r>rqrfruruNs�����
7�I�IJ� 6�3� 6�BE� 6�	
� 6�D�����!��!�*�%�$��?�
)���	�"�G���$�H��	�"�G���$�H��	�"�G���$�H��M�*�K��^�,�L��^�,�L��o�.�M��	�"�G���$�H��	�"�G���$�H��	�"�G��	�"�G��	�"�G��+�&�I�
�x�
 �F�
�x�
 �F�
�x�
 �F�
�x�
 �F���$�H���$�H��+�&�I��+�&�I��x��#��I�&��$rq�ImageFileDirectory_v2c����d��fd�}|S)Nc���ddlm}|jjd�r"|jddj	dd�|�<�|ft
�<|S)Nrr�load_r,�_� )rrr��
startswith�replace�_load_dispatch)�funcr�idx�sizes  ��rf�	decoratorz#_register_loader.<locals>.decorator�sL���#��=�=�#�#�G�,����q�r�*�2�2�3��<�E�#�J�"�D�j��s���rq)r��_LoaderFuncr�r�r>)r�r�r�s`` rf�_register_loaderr��s�����rqc���d�fd�}|S)Nc���|t�<|Sr~)�_write_dispatch)r�r�s �rfr�z#_register_writer.<locals>.decorator�s���#�����rq)r��Callable[..., Any]r�r�r>)r�r�s` rf�_register_writerr��s�����rqc����ddlm}|\}�}|||<tjd�����	d							d��fd�
}�|ft|<�fd�t
|<y)Nrr�=c�H��|jt|��z����|�Sr~)�_unpackrc)r��data�
legacy_api�fmtr�s   ��rf�
basic_handlerz&_register_basic.<locals>.basic_handler�s)����|�|�s�4�y�D�0�1�#��7��>�>rqc�<���dj��fd�|D��S)Nrqc3�B�K�|]}�j�|����y�wr~)�_pack)rdr�r�r�s  ��rfrgz4_register_basic.<locals>.<lambda>.<locals>.<genexpr>�s�����<�V�E����C��'�V�s���join)r��valuesr�s` �rf�<lambda>z!_register_basic.<locals>.<lambda>�s������<�V�<�<rq�T)r�r�r��bytesr�r�r��tuple[Any, ...])rr�struct�calcsizer�r�)�idx_fmt_namerr��namer�r�r�s     @@rf�_register_basicr	�sw����!�N�C��d��E�#�J��?�?�Q�s�e�9�%�D�FJ�?�#�?�+0�?�>B�?�	�?�
�
�-�N�3���O�C�rqc��eZdZUdZiZded<iZded<			d=							d>d�Zed��Z	ed	��Z
ed?d
��Zejd@d��ZdAd�Z
dBd
�ZdCd�ZdDd�ZdEd�ZdFd�ZdGd�ZdHd�ZdId�ZdJd�ZdKd�ZdLd�Zeeeej:ddfej<ddfej>ddfej@ddfejBd d!fejDd"d#fejFd$d%fejHddfejJd&d'fg	��e&d(d(�dMdNd)��Z'e(d(�dOd*��Z)e&d+d(�dMdPd,��Z*e(d+�dQd-��Z+e&d.d/�	dM					dRd0��Z,e(d.�dSd1��Z-e&d2d(�dMdNd3��Z.e(d2�dTd4��Z/e&d5d/�	dM					dRd6��Z0e(d5�dSd7��Z1dUd8�Z2dVd9�Z3d:�Z4dWdXd;�Z5dYd<�Z6y)Zr�aThis class represents a TIFF tag directory.  To speed things up, we
    don't decode tags unless they're asked for.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v2()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = TiffTags.ASCII
        print(ifd[key])
        'Some Data'

    Individual values are returned as the strings or numbers, sequences are
    returned as tuples of the values.

    The tiff metadata type of each item is stored in a dictionary of
    tag types in
    :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype`. The types
    are read from a tiff file, guessed from the type added, or added
    manually.

    Data Structures:

        * ``self.tagtype = {}``

          * Key: numerical TIFF tag number
          * Value: integer corresponding to the data type from
            :py:data:`.TiffTags.TYPES`

          .. versionadded:: 3.0.0

    'Internal' data structures:

        * ``self._tags_v2 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data, as tuple for multiple values

        * ``self._tagdata = {}``

          * Key: numerical TIFF tag number
          * Value: undecoded byte string from file

        * ``self._tags_v1 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data in the v1 format

    Tags will be found in the private attributes ``self._tagdata``, and in
    ``self._tags_v2`` once decoded.

    ``self.legacy_api`` is a value for internal use, and shouldn't be changed
    from outside code. In cooperation with
    :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`, if ``legacy_api``
    is true, then decoded tags will be populated into both ``_tags_v1`` and
    ``_tags_v2``. ``_tags_v2`` will be used if this IFD is used in the TIFF
    save routine. Tags should be read from ``_tags_v1`` if
    ``legacy_api == true``.

    z"dict[int, tuple[int, _LoaderFunc]]r�zdict[int, Callable[..., Any]]r�Nc���t|�sdt|��d�}t|��|�|n|dd|_|jtk(rd|_n(|jtk(rd|_n
d}t|��|ddk(|_||_i|_		|j�|jr|jd	|d
d�dn|jd|d
d�d|_d|_
y)a�Initialize an ImageFileDirectory.

        To construct an ImageFileDirectory from a real file, pass the 8-byte
        magic header to the constructor.  To only set the endianness, pass it
        as the 'prefix' keyword argument.

        :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets
              endianness.
        :param prefix: Override the endianness of the file.
        znot a TIFF file (header z not valid)Nr&�>�<znot a TIFF IFD�+�Qr2rr@r*F)rp�repr�SyntaxError�_prefix�MM�_endian�II�_bigtiff�group�tagtype�resetr��next�_legacy_api)r��ifhror�msgs     rfr�zImageFileDirectory_v2.__init__Gs��� �s�|�,�T�#�Y�K�{�C�C��c�"�"�!'�!3�v��R�a�����<�<�2���D�L�
�\�\�R�
��D�L�"�C��c�"�"��A��"���
���
�')���'��
�
���}�}�
�L�L��c�!�"�g�&�q�)����c�3�q�r�7�+�A�.�	
�	�
!��rqc��|jSr~)rr�s rfrzImageFileDirectory_v2.<lambda>n���4�<�<rqc��|jSr~)�_offsetr�s rfrzImageFileDirectory_v2.<lambda>orrqc��|jSr~)rr�s rfr�z ImageFileDirectory_v2.legacy_apiqs�����rqc��d}t|��)Nz"Not allowing setting of legacy api)�	Exception)r�r�rs   rfr�z ImageFileDirectory_v2.legacy_apius��2����n�rqc�X�i|_i|_i|_i|_d|_d|_yr~)�_tags_v1�_tags_v2�_tagdatar�_nextr!r�s rfrzImageFileDirectory_v2.resetzs,��(*��
�(*��
�*,��
������
�#'��rqc�*�tt|��Sr~)r��dictr�s rf�__str__zImageFileDirectory_v2.__str__�s���4��:��rqc��|j�D��cic]0\}}tj||j�j|��2c}}Scc}}w)z�
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        )�itemsr�lookuprr)r��coder�s   rf�namedzImageFileDirectory_v2.named�sM�� $�z�z�|�
�+���e�
�O�O�D�$�*�*�-�2�2�E�9�+�
�	
��
s�5A
c�j�tt|j�t|j�z�Sr~)rc�setr(r'r�s rf�__len__zImageFileDirectory_v2.__len__��$���3�t�}�}�%��D�M�M�(:�:�;�;rqc��||jvrG|j|}|j|}|j|\}}||||j�||<|j|}|jrt|ttf�s|f}|Sr~)r'r(rr�r�r�r�r)r��tagr��typr��handlerrws       rf�__getitem__z!ImageFileDirectory_v2.__getitem__�s����d�m�m�#��=�=��%�D��,�,�s�#�C� �/�/��4�M�D�'���d�D�O�O�<�D��I��m�m�C� ���?�?�:�c�E�5�>�#B��&�C��
rqc�>�||jvxs||jvSr~)r'r(�r�r7s  rf�__contains__z"ImageFileDirectory_v2.__contains__�����d�m�m�#�;�s�d�m�m�';�;rqc�>�|j|||j�yr~)�_setitemr�)r�r7r�s   rf�__setitem__z!ImageFileDirectory_v2.__setitem__�s���
�
�c�5�$�/�/�2rqc	���tttf}tj||j
��t
||�r|gn|}||jv�r�jr�j|j|<�n�tj|j|<td�|D��r]|D]9}t
|t�sJ�|dks�tj|j|<�n�tj|j|<�nktd�|D��r�d}d}d}	|D]A}t
|t�sJ�|rd|cxkrdksnd}|rd|cxkrdksnd}|	s�:|dks�@d}	�C|rtj|j|<n�|rtj |j|<n�|	rtj"|j|<n�tj$|j|<n�td	�|D��rtj&|j|<n_td
�|D��rtj(|j|<n/td�|D��rtj*|j|<|j|tjk(r2|D�cgc]&}t
|t�r|j-dd
�n|��(}}nJ|j|tjk(r*|D�cgc]}t
|t�rt/|�n|��!}}|j|tj"k(xrt
|t0�}
|
st3�fd�|D��}|r|j4n|j6}|
s��j8dk(s<|j|tj*k(s�j8�Mt;|�dk(r?|s=|r2|j|tjtjfvr|f}	|\||<y|||<ycc}wcc}w#t<$r0t?j@d|�dt;|��d��|d||<YywxYw)Nc3�<K�|]}t|t����y�wr~)r�ru�rd�vs  rfrgz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>�s����B�6�a�z�!�[�1�6���rc3�<K�|]}t|t����y�wr~)r�r�rDs  rfrgz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>������<�V���A�s�+�V�rFTr Fi���i�c3�<K�|]}t|t����y�wr~)r�r�rDs  rfrgz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>������>�v�!��A�u�-�v�rFc3�<K�|]}t|t����y�wr~)r�r�rDs  rfrgz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>�rHrFc3�<K�|]}t|t����y�wr~)r�rrDs  rfrgz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>�rJrF�asciir�c3�d�K�|]'}t|t�r�j|�n|���)y�wr~)r�r��cvt_enum)rdr��infos  �rfrgz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>�s0������#�E�)3�5�#�(>��
�
�e�$�E�I�#�s�-0rzMetadata Warning, tag z had too many entries: z, expected 1)!rrr�rr/rr�r�type�	UNDEFINED�allru�SIGNED_RATIONAL�RATIONALr��SHORT�SIGNED_SHORT�LONG�SIGNED_LONG�DOUBLE�ASCII�BYTE�encoder�r+r�r&r'�lengthrc�
ValueError�warnings�warn)
r�r7r�r��	basetypesrrE�short�signed_short�long�is_ifd�destrPs
            @rfr@zImageFileDirectory_v2._setitem�s�����U�C�(�	����s�D�J�J�/��&�u�i�8�%��e���d�l�l�"��y�y�$(�I�I����S�!�$,�$6�$6����S�!��B�6�B�B�#��)�!�[�9�9�9��q�5�08�0H�0H�D�L�L��-�!�	$�-5�,=�,=����S�)��<�V�<�<� �E�#'�L��D�#��)�!�S�1�1�1� �!�q�.�5�.�$)�E�'��A�1E��1E�+0�L��A��E�#(�D�$��,4�N�N����S�)�%�,4�,A�,A����S�)��,4�M�M����S�)�,4�,@�,@����S�)��>�v�>�>�(0���D�L�L��%��<�V�<�<�(0���D�L�L��%��>�v�>�>�(0�
�
�D�L�L��%��<�<���� 2� 2�2� ���A�1;�1�c�0B�����)�,��I��
���\�\�#�
�(�"3�"3�
3�EK�L�V��*�Q��"4�e�A�h�!�;�V�F�L����c�"�h�m�m�3�P�
�6�4�8P�����#���F�
!+�t�}�}��
�
���
�[�[�A�
��|�|�C� �H�M�M�1����#��F��q�(8���d�l�l�3�/��!�!��(�(�4��!���
&�%���c���D��I��[��
M��:�
&��
�
�,�S�E�1H��6�{�m�<�1��#�1�I��S�	�

&�s�+O?�'$P�1P	�	6Q�Qc��|jj|d�|jj|d�|jj|d�yr~)r'�popr&r(r<s  rf�__delitem__z!ImageFileDirectory_v2.__delitem__s>���
�
���#�t�$��
�
���#�t�$��
�
���#�t�$rqc�j�tt|j�t|j�z�Sr~)�iterr3r(r'r�s rf�__iter__zImageFileDirectory_v2.__iter__�$���C��
�
�&��T�]�]�);�;�<�<rqc�H�tj|j|z|�Sr~)r�unpackr)r�r�r�s   rfr�zImageFileDirectory_v2._unpack
s���}�}�T�\�\�C�/��6�6rqc�H�tj|j|zg|���Sr~)r�packr)r�r�rs   rfr�zImageFileDirectory_v2._pack
s���{�{�4�<�<�#�-�7��7�7rq�Hrcr@re�bzsigned byte�hzsigned short�lzsigned longr�r��d�doubler�long8rc��|Sr~r>�r�r�r�s   rf�	load_bytezImageFileDirectory_v2.load_byte!����rqc�t�t|t�rt|�}t|t�rt|f�}|Sr~)r�rur�r�r�r�s  rf�
write_bytez ImageFileDirectory_v2.write_byte%s/���d�K�(��t�9�D��d�C� ��$��>�D��rqr&c�R�|jd�r|dd}|jdd�S)N�rszlatin-1r�)�endswith�decoder{s   rf�load_stringz!ImageFileDirectory_v2.load_string-s*���=�=������9�D��{�{�9�i�0�0rqc��t|t�rt|�}t|t�s|j	dd�}|dzS)NrMr�r�)r�r�r�rr]�r�r�s  rf�write_stringz"ImageFileDirectory_v2.write_string3s;���e�S�!���J�E��%��'��L�L��)�4�E��u�}�rqr,r2c
����|jt|�dz�d�|�}d�fd��t�fd�t|ddd�|ddd��D��S)Nr*r@c�(���r||fSt||�Sr~�ru��artr�s  �rf�combinez4ImageFileDirectory_v2.load_rational.<locals>.combineB����'�A�q�6�>�[��A�->�>rqc3�6�K�|]\}}�||����y�wr~r>�rd�num�denomr�s   �rfrgz6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>E������V�;U�Z�S�%�W�S�%�(�;U���r&r�r�r�rtr�r�ztuple[int, int] | IFDRational�r�rcr��zip�r�r�r��valsr�s  ` @rf�
load_rationalz#ImageFileDirectory_v2.load_rational<�W����|�|�s�4�y�A�~�.�a�0�$�7��	?��V�3�t�C�a�C�y�$�q�t�RS�t�*�;U�V�V�Vrqc�8��dj�fd�|D��S)Nrqc3�X�K�|]!}�jdgt|d�������#y�w)�2Ll��N)r�r{�rdr�r�s  �rfrgz7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>Is,�����
�LR�D�J�D�J�J�t�?�o�d�I�>�?�F�s�'*r��r�rs` rf�write_rationalz$ImageFileDirectory_v2.write_rationalGs!����x�x�
�LR�
�
�	
rqr0c��|Sr~r>r{s   rf�load_undefinedz$ImageFileDirectory_v2.load_undefinedMr}rqc��t|t�rt|�}t|t�rt|�j	dd�}|S)NrMr�)r�rur�r�r]r�s  rf�write_undefinedz%ImageFileDirectory_v2.write_undefinedQs:���e�[�)���J�E��e�S�!���J�%�%�g�y�9�E��rq�
c
����|jt|�dz�d�|�}d�fd��t�fd�t|ddd�|ddd��D��S)Nr*rvc�(���r||fSt||�Sr~r�r�s  �rfr�z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine_r�rqc3�6�K�|]\}}�||����y�wr~r>r�s   �rfrgz=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>br�r�r&rr�r�r�s  ` @rf�load_signed_rationalz*ImageFileDirectory_v2.load_signed_rationalYr�rqc�8��dj�fd�|D��S)Nrqc	3�Z�K�|]"}�jdgt|dd�������$y�w)�2li���i�N)r�r�r�s  �rfrgz>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>fs3�����
���
�D�J�J�t�P�4�T�9�h�O�P��s�(+r�r�s` rf�write_signed_rationalz+ImageFileDirectory_v2.write_signed_rationalds!����x�x�
��
�
�	
rqc�~�|j|�}t|�|k7rd|�dt|��d�}t|��|S)Nz&Corrupt EXIF data.  Expecting to read � bytes but only got z. )�readrc�OSError)r��fpr��retrs     rf�_ensure_readz"ImageFileDirectory_v2._ensure_readksN���g�g�d�m���s�8�t��%�%)�F�*>�s�3�x�j��L�
��#�,���
rqc
�~�|j�|j�|_	|jr"|j	d|j|d��n!|j	d|j|d��d}t
|�D�]}|jr"|j	d|j|d��n!|j	d|j|d	��\}}}}tj||j�j}tj|d
�}	d|�d|�d
|	�d|�d�	}
	|j|\}}||z}
|
|jrdndkDrv|j�}|j	|jrdnd|�\}|
d|�d|��z
}
|j#|�t%j&||
�}|j#|�n|d|
}t)|�|
k7r>t+j,d|
�dt)|��d|���tj!|
����|stj!|
����||j.|<||j0|<|
dz
}
|
|
dkDrd|
�d�n
t3|�z
}
tj!|
���|jr"|j	d|j|d��n!|j	d|j|d��\|_y#t$rtj!d|
|�Y���wxYw#t6$r(}
t+j,t9|
��Yd}
~
yd}
~
wwxYw)Nrr2rsr&r�HHQ8s��HHL4srA�unknownztag: � (�
) - type: �)z%s - unsupported type %sr*r@z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r�z. Skipping tag z
 - value: rH�<table: � bytes>)r�tellr!rr�r��rangerr/rrr�getr��KeyError�logger�debug�seekr�
_safe_readrcr`rar(rrrr�r�)r�r��	tag_countr�r7r8�countr��tagname�typnamer�	unit_sizer9r��here�offsets                rf�loadzImageFileDirectory_v2.loadus���
�
���w�w�y���=	��=�=����S�$�"3�"3�B��":�;��\�\�#�t�'8�'8��Q�'?�@��	�I�
�9�%���}�}��L�L��$�*;�*;�B��*C�D����g�t�/@�/@��R�/H�I�&��S�%��#�/�/�#�t�z�z�:�?�?���)�)�C��3���g�Y�b���Z��y��3�%�q�I���)-�)<�)<�S�)A�&�I�w��y�(����
�
�1�1�5��7�7�9�D� $���D�M�M�S�s�D� Q�I�V��_�T�F�2D�V�H�M�M�C��G�G�F�O�$�/�/��D�9�D��G�G�D�M����;�D��t�9��$��M�M�-�-1�F�2F�s�4�y�k�R)�),��/��
�L�L��%����L�L��%��%)��
�
�c�"�$'����S�!��|�#���4�"�9��$��w�/�$�t�*�L�����S�!�]&�d�=�=����S�$�"3�"3�B��":�;��\�\�#�t�'8�'8��Q�'?�@�
�T�Y��G ���L�L�!;�S�#�F����P�	��M�M�#�c�(�#���	�s=�DL�.K$�F#L�$ L�L�L�L�	L<�L7�7L<c��|j|jd|jrdnd�z}|jr||jddd�z
}||jr|jdd�z
}|S|jd	d�z
}|S)
Nrsr�*�HHr2rrrCr@)rr�r�r�rs  rf�_get_ifhzImageFileDirectory_v2._get_ifh�s{���l�l�T�Z�Z��4�=�=�R�b�I�I���=�=��4�:�:�d�A�q�)�)�C��d�m�m�t�z�z�#�r�"�K���
�:>���C��9K�K���
rqc�<�|j|jrdndt|j��}g}|t|�t|j�|jrdndzzdzz
}d}|jrdnd}|jrdnd}t	|jj��D�]H\}}|tk(rt|�}|j|}	tjd||	t|��|	tjk(xrt|t�}
|
rYt|j!�|�	�}|j|}|j�D]
\}
}|||
<�|j#|�}n+t|t$�r|n|f}|j&|	|g|���}tj(||j*�j,}|
rd
nt/j0|	d�}d|�d
|�d|�d
|	�d�	}|t|�dk\rdt|��d�n
t3|�z
}tj|�|
rd}nH|	tj4tj6tj8fvrt|�}nt|�}t|�|kr(|j;||	||j=|d�df���|j;||	||j||�|f�|t|�dzdzdzz
}��K|��||\}}	}}}|rM|j>|	\}}||||j@�D�cgc]}||z��	}}|j&|	|g|���}n(|j||jC||�d|z�}||	|||f||<|D]Z\}}	}}}tjd||	|t|�t|��||j|jrdnd||	||�z
}�\|dz
}|D]!\}}	}}}||z
}t|�dzs�|dz
}�#|Scc}w)Nrrsr�rAr*r@r2zTag %s, Type: %s, Value: %s)r�ifdr�zsave: r�r�z) - value: rCr�r�rr�rqr&rz%s %s %s %s %sr�r�s)"r�rrcr'�sortedr.�STRIPOFFSETSrr�r�rrrXr�r+r�r��tobytesr�r�r/rrrr�r�r\r[rR�append�ljustr�r�r�)r�r��result�entries�stripoffsetsr��fmt_sizer7r�r8rfr�r�ifd_tag�	ifd_valuer�r�r�rr�r�r9rws                       rfr�zImageFileDirectory_v2.tobytes�s������4�=�=�C�c�3�t�}�}�;M�N��<>���#�f�+��D�M�M� 2�D�M�M�b�r� R�R�UV�V�V�����]�]�c����
�
�1�1�� ����!4�!4�!6�7�J�C���l�"�"�7�|���,�,�s�#�C��L�L�6��S�$�u�+�N��H�M�M�)�E�j���.E�F��+�D�M�M�O�3�G�����s�+��*0�,�,�.�&�G�Y�#,�C��L�+9��{�{�6�*��",�U�E�":�����0�t�+�+�C�0��?��?���o�o�c�4�:�:�6�;�;�G�%�e�5�9�9�S�)�+D�G��7�)�2�c�U�*�W�I�R��u�K�P�C��C��I��O�X�c�$�i�[��0��V��T�C��L�L��������������8J�8J�K�K��D�	���F����4�y�H�$�����S�%����H�e�1L�c�R�S�����S�%����C��1H�$�O�P��3�t�9�q�=�Q�.��2�2��E8�J�#�+2�<�+@�(�C��e�U�D�� $� 3� 3�C� 8�
��g�29�$��d�o�o�2V�W�2V�3�#��,�2V��W�0�t�+�+�C�0��?��?���
�
�3����S�%�(@��(C�f�(L�M��$'��e�U�D�$@�G�L�!�-4�(�C��e�U�D��L�L�)�3��U�D��K��d��T��d�j�j��=�=��g�s�C����
�F�-4�	�+���-4�(�C��e�U�D��d�N�F��4�y�1�}��%���-4�
�
��-Xs�6Pc���|j�dk(r|j|j��|j�}|j|�}|j|�|t	|�zSr�)r��writer�r�rc)r�r�r�r�s    rf�savezImageFileDirectory_v2.save
sU��
�7�7�9��>��H�H�T�]�]�_�%���������f�%��
�������F��#�#rq)sII*NN)rrrozbytes | Noner�
int | Noner�r�)r�r�)r�r�r�r
�r�r�r�)r�zdict[str, Any]r��r7r�r�r�r7r�r�r��r7r�r�rr�r�)r7r�r�rr�r�r�r�)r7r�r�r��r�z
Iterator[int])r�r�r�rr�r)r�r�rrr�rr)r�rr�r�r�r)r��bytes | int | IFDRationalr�r)r�rr�r�r�r�)r�zstr | bytes | intr�r)r�rr�r�r�z)tuple[tuple[int, int] | IFDRational, ...])rrur�r)r�r�r�r)r��	IO[bytes]r�r�r�r)r�r�r�r�rQ)r�r�r�r)r�r�r�r�)7r�r�r�r�r��__annotations__r�r�r�ror�r��setterrr,r1r4r:r=rAr@rjrmr�r��list�mapr	rrVrX�SIGNED_BYTErWrY�FLOATrZ�IFD�LONG8r�r|r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r>rqrfr�r�s���:�x:<�N�6�;�57�O�2�7�3�#� �	%!�
�%!��%!��	%!�

�%!�N�/�
0�F�
�/�
0�F�
� �� �������(��	
�<�	�<�3�\�|%�
=�7�8�	�������g�.�����V�,��%�%�s�M�:��&�&��^�<��%�%�s�M�:�����g�.����#�x�0����s�F�+�����g�.�

�
	
��"�a�������a������a���1��1�
�a������a���.2�W��W�'+�W�	2�W��W��a��
��
�
�a�������a������b�!��.2�W��W�'+�W�	2�W��W��b��
��
��A�F�K�Z$rqr�r�r��write_c���eZdZUdZd�fd�Zed��Zed��Zded<	e	dd��Z
dd�Zdd	�Zdd
�Z
dd�Zdd�Zdd
�Z�xZS)�ImageFileDirectory_v1a�This class represents the **legacy** interface to a TIFF tag directory.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v1()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = TiffTags.ASCII
        print(ifd[key])
        ('Some Data',)

    Also contains a dictionary of tag types as read from the tiff image file,
    :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`.

    Values are returned as a tuple.

    ..  deprecated:: 3.0.0
    c�2��t�|�|i|��d|_y)NT)�superr�r)r�r��kwargs�	__class__s   �rfr�zImageFileDirectory_v1.__init__4s���
���$�)�&�)���rqc��|jSr~)r&r�s rfrzImageFileDirectory_v1.<lambda>8s����rqc��|jSr~)r(r�s rfrzImageFileDirectory_v1.<lambda>9s��D�M�Mrqzdict[int, int]rc��||j��}|j|_|j|_|j|_|S)a2Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`

        rn)ror(rr)�cls�originalr�s   rf�from_v2zImageFileDirectory_v1.from_v2?s<������)���(�(����&�&����=�=����
rqc���t|j��}t|j�|_t|j�|_t|j
�|_|S)a2Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`

        rn)r�ror+r(rr')r�r�s  rf�to_v2zImageFileDirectory_v1.to_v2QsG��$�4�;�;�7���D�M�M�*����4�<�<�(����D�M�M�*����
rqc�>�||jvxs||jvSr~)r&r(r<s  rfr=z"ImageFileDirectory_v1.__contains__br>rqc�j�tt|j�t|j�z�Sr~)rcr3r(r&r�s rfr4zImageFileDirectory_v1.__len__er5rqc�j�tt|j�t|j�z�Sr~)rlr3r(r&r�s rfrmzImageFileDirectory_v1.__iter__hrnrqc�8�dD]}|j|||��y�N)FT)r@)r�r7r�r�s    rfrAz!ImageFileDirectory_v1.__setitem__ks��'�J��M�M�#�u�j�1�(rqc	��||jvrR|j|}|j|}|j|\}}dD]}|j	|||||�|��|j|}t|ttf�s|f}|Sr	)r&r(rr�r@r�r�r)r�r7r�r8r�r9�legacyrws        rfr:z!ImageFileDirectory_v1.__getitem__os����d�m�m�#��=�=��%�D��,�,�s�#�C� �/�/��4�M�D�'�'���
�
�c�7�4��v�#>��G�(��m�m�C� ���#��u�~�.��&�C��
rq)r�rr�rr�r�)rr�r�r�)r�r�r�r�r�r�r�)r�r�r�r�r�r��tags�tagdatar��classmethodrrr=r4rmrAr:�
__classcell__�r�s@rfr�r�!s`����$ ��.�/�D��1�2�G���!�����"�"<�<�=�2�
rqr�c���eZdZdZdZdZ	d					d�fd�
Zdd�Zedd��Z	dd�Z
dd�Zdd	�Zdd
�Z
d�fd�Zdd�Zdd
�Zdd�Zdd�Z�xZS)�
TiffImageFile�TIFFz
Adobe TIFFFc�2��|	|	t�|�||�yr~)r�r�)r�r��filenamer�s   �rfr�zTiffImageFile.__init__�s ���
	
�5��"�
����X�&rqc��|jjd�}|ddk(r||jjd�z
}t|�|_|jjx|_|_d|_|j|_g|_	d|_
tjd�tjd|j
�tjdt|��|jd	�y)
z#Open the first image in a TIFF filer2r&rrsNz*** TiffImageFile._open ***z
- __first: %sz	- ifh: %sr)r�r�r��tag_v2r�_TiffImageFile__first�_TiffImageFile__next�_TiffImageFile__frame�_fp�
_frame_pos�	_n_framesr�r�r�_seekr�s  rf�_openzTiffImageFile._open�s����g�g�l�l�1�o���q�6�R�<��4�7�7�<�<��?�"�C�+�C�0���&*�[�[�%5�%5�5���t�{�����7�7���%'���%)������2�3����_�d�l�l�3����[�$�s�)�,�	
�
�
�1�
rqc�R�|j}|��|j�}|jt|j��|j�/|j|j�dz�|j��/|j|�|j�J�|jS)Nr)rr�rrcrr�)r��current_n_frames�currents   rf�n_frameszTiffImageFile.n_frames�s����>�>���#��i�i�k�G��J�J�s�4�?�?�+�,��.�.�(��
�
�4�9�9�;��?�+��.�.�(��I�I�g���~�~�)�)�)��~�~�rqc��|j|�sy|j|�|j�O|jj|j
k7s#|jj|jk7rd|_yyy)z%Select a given frame as current imageN)�_seek_checkr�_im�imr��
_tile_size�mode)r��frames  rfr�zTiffImageFile.seek�sd������&���
�
�5���8�8���G�G�L�L�D�O�O�+�t�w�w�|�|�t�y�y�/H��D�H�0I� rqc���|j|_t|j�|k�r�|js
d}t|��tjd||j|j|jj��|jdk\r
d}t|��|jj|j�|jj|j�tjd|jj��|jj|j�|jj|jvrd|_n|jj|_|jdk(r
|dz|_t|j�dk(r|jdk7|_|xjdz
c_t|j�|kr���|jj|j|�|jj|j�t$|jvr!|jt$|j&d<nd|j&vr
|j&d=|j)�t*j-|j�x|_|_||_|j3�y)	Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %slzUnable to seek to framezLoading tags, location: %srr�xmp)rr�rcrr�EOFErrorr�r�rr�r_r�r�rr�rr�is_animated�XMPrP�_reload_exifr�rr7r��_setup)r�r*rs   rfrzTiffImageFile._seek�s���(�(����$�/�/�"�e�+��;�;�3���s�m�#��L�L�K��������������
��{�{�e�#�/�� ��o�%��G�G�L�L����%��O�O�"�"�4�;�;�/��L�L�5�t�w�w�|�|�~�F��K�K���T�W�W�%��{�{���4�?�?�2� ���"�k�k�.�.����{�{�a��!&������4�?�?�#�q�(�#'�;�;�!�#3�� ��L�L�A��L�9�$�/�/�"�e�+�:	
�����T�_�_�U�+�,���������!��$�+�+��#�{�{�3�/�D�I�I�e��
�d�i�i�
��	�	�%� �����3�;�;�D�K�K�H�H���4�8�������
rqc��|jS)zReturn the current frame number)rr�s rfr�zTiffImageFile.tell�s���|�|�rqc��i}|jjtjj�}|r�|dddk(r�t|dd�}t
j|ddzdz�dz}t|d|zd|z�}|d|zd|z|z}d|i||<|t
jd|z|zdz�dzd}|dddk(r��|S)	a5
        Returns a dictionary of Photoshop "Image Resource Blocks".
        The keys are the image resource ID. For more information, see
        https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1037727

        :returns: Photoshop "Image Resource Blocks" in a dictionary.
        Nr*s8BIMr.rr&r�r�)	rr�r�Base�ImageResources�i16�math�ceil�i32)r��blocksrw�id�nr�r�s       rf�get_photoshop_blocksz"TiffImageFile.get_photoshop_blocks�s������k�k�o�o�h�m�m�:�:�;����b�q�'�W�$���Q�q��]���I�I�s�1�v��z�Q�.�/�!�3���3�q�1�u�r�A�v�.�/���2��6�B��F�T�M�2��$�d�^��r�
��$�)�)�R�!�V�d�]�a�$7�8�1�<�>�?���b�q�'�W�$��
rqc�p��|jr|jr|j�St�|��Sr~)�tile�use_load_libtiff�
_load_libtiffr�r�)r�r�s �rfr�zTiffImageFile.load
s-����9�9��.�.��%�%�'�'��w�|�~�rqc�
�|j�Xtj|j�tjj|j|j�|_tjj|�yr~)
r&r�_decompression_bomb_checkr(�core�newr)r'r�load_preparer�s rfrFzTiffImageFile.load_preparesP���8�8���+�+�D�O�O�<��j�j�n�n�T�Y�Y����@�D�G����(�(��.rqc�f�|jsBd|_|j�}tjD]}||vr�|j|��t
j|d��tjj|jvr&|jtjj=yy)NT)�in_place)r.�!_close_exclusive_fp_after_loading�getexifr�TAGS_V2_GROUPS�get_ifdr�exif_transposerr4�Orientationr)r��exif�keys   rf�load_endzTiffImageFile.load_ends������59�D�2��<�<�>�D��.�.���d�?�����S�!�/�
	����t�4��=�=�$�$����3����H�M�M�5�5�6�4rqc��tjj|�|j�t|j�dk(s
d}t|��|jdd}|jdd}	t
|jd�xr|jj�}t
|jd�r|jj�|r-t|t�sJ�t|�}||d<t|�}tj|jd	||j�}	|j!|j"|�|j&xr
|j(}t
|jd�rBt*j-d
�|j/|jj1��\}	}
n�|r�t*j-d�|s|jj3d�t5j6|dt4j8�}|j/d�\}	}
t5j6||t4j:�n\t*j-d�|jj3d�|j/|jj=��\}	}
g|_d|_|jA�|r!|jjC�d|_|
dkrt|
��tjj|�S#t
$rd}Y��XwxYw#t$$r}d
}t|�|�d}~wwxYw)zWOverload method triggered when we detect a compressed tiff
        Calls out to libtiffrzNot exactly one tilerr(�fileno�flushFr&�libtiffzCouldn't set the imageN�getvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.sfpfpz+don't have fileno or getvalue. just reading)"rr�rFrcr?r�r�r�rSrTr�r�r��_getdecoderr)�
decoderconfig�setimager'r_�
_exclusive_fpr.r�r�r�rVr��os�lseek�SEEK_CUR�SEEK_SETr��readonlyrQ�close)r�r�extentsr�r��	args_list�decoder�e�
close_self_fpr<�err�poss            rfrAzTiffImageFile._load_libtiff&s���	������������4�9�9�~��"�(�C��#�,���)�)�A�,�q�/���y�y��|�A���

	�����(�+�@������0@�B��t�w�w��(����
�
����d�E�*�*�*��T�
�I��I�a�L���#�D��#�#�D�I�I�y�$��@R�@R�S��	&����T�W�W�g�.�
�*�*�C�4�3C�3C�/C�
��4�7�7�J�'�
�L�L�P�Q��^�^�D�G�G�$4�$4�$6�7�F�A�s�
��L�L�N�O� ������Q���(�(�2�q�"�+�+�.�C��^�^�G�,�F�A�s��H�H�R��b�k�k�*�
�L�L�F�G��G�G�L�L��O��^�^�D�G�G�L�L�N�3�F�A�s���	���
��
�
����G�G�M�M�O��D�G���7��#�,���{�{����%�%��E�	��B�	���	&�*�C��#�,�A�%��	&�s+�:A"L&�8L8�&L5�4L5�8	M�M�Mc
��d|jvr
d}t|��t|jjtd�|_|jjtd�|_|jjtd�}|j
dk(rd}|jjtd�}tjd�tjd|j
�tjd	|�tjd
|j�tjd|�tjd|jjt��	|jt}|jt}t#|t$�rt#|t$�s
d}t'|��||f|_|jjt*j,j.�}|dvr
||f|_n	||f|_tjd|j2�|jjt4d�}t7|�dkDr"t9|�t;|�cxk(rdk(rnnd}|jjt<d�}	|jjt>d�}
|dvrd}n
|dk(rd}nd}|t7|
�z
}t7|	�}|jjt@|j
dk(r|dvrdnd�}
|
tBkDr#tjEd|
�d}tG|��|
|kr|	d|
}	n|
|kDr
|dk(r|	|
z}	t7|	�|
k7r
d}tG|��|jjH||||	|
f}tjd|�	tJ|\|_&}tjd|�tjd |jN�|j
|jPd!<|jjtRd�}|jjtTd�}|r�|r�|jjtV�}|d"k(r||f|jPd#<nS|dk(r|d$z|d$zf|jPd#<n6|�#||f|jPd#<||f|jPd%<n||f|jPd%<dx}x}}g|_,tZxs|j
d&k7|_.|j\r�|d"k(r5|dddz|ddz}tjd|�tJ|\|_&}|dk(r!|j
d'k(r|jdk(rd(}n2|d)k(rd*}n*|j_d+�s|j_d,�r|dd-d.z}||j
d/|jj`f}|jXjctejfd0dd||fd|���n�th|jvstj|jv�r�th|jvr6|jth}|jjtl|�}|}n�|jtj}|jjtn�}|jjtp�}t#|t$�rt#|t$�s
d1}t'|��|}|D]�}||z|kDr|ts|	�zd2z}nd}|}|jd"k(r
||}||z}|t%|�df}|jXjctejf|j
||t;||z|�t;||z|�f||��||z}||k\s��d||z}}||k\s��dx}}|dz
}��n"tjd3�d}tG|��tt|jvr |jtt|jPd4<|jNd5vrW|jtvD�cgc]}ty|d6z���} }t{j|d7d8j| ��|_@yy#t$r}d
}t!|�|�d}~wwxYw#t$r(}tjd�d}tG|�|�d}~wwxYwcc}w)9z-Setup this image object based on current tagsi�z+Windows Media Photo files not yet supportedrrr/r.z*** Summary ***z- compression: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %szMissing dimensionsNzInvalid dimensions)r,r.r0r2z
- size: %sr=r>)r&r.r2r(r,r*)r&r.z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelzunknown data organizationzformat key: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %s�compressionr&�dpigR���Q@�
resolutionr%r1rOrB�I;16Nz;16Bz;16Lrs�NFrUzInvalid tile dimensionsr2z- unsupported data organization�icc_profile�r[r]r"�RGB;Lrq)Arr��COMPRESSION_INFOr��COMPRESSION�_compression�PLANAR_CONFIGURATION�_planar_configuration�PHOTOMETRIC_INTERPRETATION�	FILLORDERr�r��YCBCRSUBSAMPLING�
IMAGEWIDTH�IMAGELENGTHr��	TypeErrorr�r�r_r(rr4rN�_sizer��SAMPLEFORMATrcr�r��
BITSPERSAMPLE�EXTRASAMPLES�SAMPLESPERPIXEL�MAX_SAMPLESPERPIXEL�errorrro�	OPEN_INFO�_moder)rP�X_RESOLUTION�Y_RESOLUTION�RESOLUTION_UNITr?�READ_LIBTIFFr@r�r�r�r�_Tiler��TILEOFFSETS�ROWSPERSTRIP�	TILEWIDTH�
TILELENGTH�sum�
ICCPROFILE�COLORMAPrrr%r��palette)!r�r�photo�	fillorder�xsize�ysizerd�orientation�
sample_format�	bps_tuple�extra_tuple�	bps_count�bps_actual_count�samples_per_pixelrP�rawmode�xres�yres�resunit�x�y�layerr��offsetsru�w�	tilewidthr��stride�tile_rawmoder�rtr�s!                                 rfr1zTiffImageFile._setup�s����T�[�[� �?�C��#�,��-�T�[�[�_�_�[�!�-L�M���%)�[�[�_�_�5I�1�%M��"������ :�A�>������+��E��K�K�O�O�I�q�1�	����&�'����(�$�*;�*;�<����7��?����1�4�3M�3M�N����'��3����.������@P�0Q�R�	(��K�K�
�+�E��K�K��,�E��%��%�Z��s�-C�&�C��S�/�!���,����k�k�o�o�h�m�m�&?�&?�@���,�&����D�J����D�J����\�4�9�9�-�������d�;�
��}���!�c�-�&8�C�
�<N�&S�RS�&S�!�M��K�K�O�O�M�4�8�	��k�k�o�o�l�B�7���I���I�
�a�Z��I��I��S��%�%�	��y�>�� �K�K�O�O���"�"�k�1�e�v�o�A�1�
��
�2�2��L�L�@�BS�
�8�C��c�"�"��/�/�"�"4�#4�5�I�
�!1�
1�6F�!�6K�"�$5�5�I��y�>�.�.�-�C��c�"�"�
�K�K��������

��	���%�s�+�	*�"+�C�.��D�J��	���%�w�/����%�t�y�y�1�#'�#4�#4��	�	�-� ��{�{���|�Q�/���{�{���|�Q�/���D��k�k�o�o�o�6�G��!�|�$(�$�<��	�	�%� ��A��$(�4�K����#=��	�	�%� ���$(�$�<��	�	�%� �+/��*��	�	�,�'�*.��*��	�	�,�'�����A����	� ,� J��0A�0A�U�0J���� � ��A�~��"�1�g��n�s�1�2�w�.�����-�s�3�'0��n�#��
�G���
��%�%��/��.�.�!�3���
�F�"�!���!�!�&�)�W�-=�-=�f�-E�!�#�2�,��,���$�+�+�U�D�K�K�4F�4F�G�A��I�I���Y�_�_�Y��A�u�e�8L�a�QR�S�T�
�T�[�[�
(�K�4�;�;�,F��t�{�{�*��+�+�l�3���K�K�O�O�L�%�8�����+�+�k�2�� �K�K�O�O�I�6�	��K�K�O�O�J�/��!�)�S�1��A�s�9K�3�C�$�S�/�)���!���q�5�5�=���Y��/�!�3�F��F�&���-�-��2�#*�5�>�L��i�'�F�$�c�&�k�1�5���	�	� � ��O�O��)�)��A�s�1�q�5�%�0�#�a�!�e�U�2C�D���	����E����:��a�!�e�q�A��E�z� !�	��A���
��7"�:
�L�L�:�;�-�C��c�"�"�����$�'+�{�{�:�'>�D�I�I�m�$��9�9��#�-1�[�[��-B�C�-B��r�!�s�(�|�-B�G�C�'�+�+�G�S�X�X�g�5F�G�D�L�$��S�	(�&�C��C�.�a�'��	(��P�	*��L�L�/�0�&�C��c�"��)��	*��DDs6�3&a9�<b�6c�9	b�b�b�	c	�!#c�c	r~)r��StrOrBytesPath | IO[bytes]rzstr | bytes | Noner�r�r�r�)r*r�r�r�)r�zdict[int, dict[str, bytes]])r�zImage.core.PixelAccess | None)r�r�r��format�format_descriptionrIr�rr�r#r�rr�r=r�rFrQrAr1rrs@rfrr�s����
�F�%��(-�%�
(,�'�&�'�%�'�
�	'��0�	��	�	�*�X��*�
/�7�"]&�~kHrqrr?r@rNr[r]rErLrBrFrIrJrOrRrPr^�YCbCrrarMrDrGrK)rGrKc�\�	t|j\}}}}}}|j}|j
}t
|��}
|jd�rd|
_	|d}|�d}n|dk(rd	}n|d
k(rd}txs|dk7}d|
t<|jd
|
t<|jd|
t <d|vr|d}nCd|vr=|d}t|t"�r*t%j&�}|j)|�|}ni}t*j-dt/|��t|t0�r|j3�}|D]t}t|t$j&�r'|t4j6vr|j9|�|
|<n|j|�|
|<	|j:||
j:|<�vi}t?|d�r|j@j3�}i|�tC|di��}tDtFfD]
}||vs�||=�t?|d�r�tHtJtLtNtPtRfD]�}||jTvs�|tNk(r=|jTj:|t4jVt4jXfvr||=�X|jT||
|<|jTj:||
j:|<��|jd|jjd��}|r	||
tZ<t\dftJdftLdftJdftLdftHdft^dft`dftbdftddff
D]\}}||vs�|||
|<�|jd�}|r!d|
tH<|d
|
tJ<|d|
tL<|dk7r)||
tf<ti|�dk7rti|�|
tj<|�	||
tl<|dk7r	||
tF<tn|
vr
||
tn<n�|jd vr�|
tnd
k(r�|jd!k(rl|jq�}|j)�}|�_ts|jt�D]/}ts|jv�D]}|||fd"k(rd
nd"|||f<��1|}ntyjz|�}|jd#vrs|j|jd$d%�}g}ti|�d&z}tsd&�D]0} |||| z|| dzzD�!cgc]}!|!d'z��	c}!z
}|d
gd'|z
zz
}�2||
t�<|
t|
t }#}"ti|�|"|d
zd(zd)zz}$t�|
vr[|rG|jd*t��}%|$d
k(rdnt�|%|$z|#�}&|d	k(rt�|&d(zd)zd)z|#�}&n|#}&|&d
k(rd}&|&|
t�<|$d
k(rdn|$|
t�z}'|#|
t�zdz
|
t�z}(|'d+k\r!t4j�|
j:t�<|'f|(dz
z|$|#z|'|(dz
zz
fz|
t�<t�tsd
|'|(z|'��|
t�<t�j|d�|
t�<|jd,k(r6t�d-t�d.ij��D]\}})|
j�||)��t�t�t�t�g}*|�ryd/|vrG|d/}+t|+t�r
|+d
ks|+d0kDr
d1}
t�|
��|d	k7r
d2}
t�|
��|+|
t�<t*j-d3�t*j-d4t�|
j����d
},t?|d5�r"	|j�d
�|j��},i}-|*t�t�t�t�t�t�gz
}*tf|d
i}.t�j�|
j��|j���D�]\}}/|t4j�vr�tCt$j�d6d7�s�5|t4j6vrt4j�|-|<nh||
j:vr|
j:||-|<nGt|/tt�t�t"f�s��t5j�|�j�}0|0r|0|-|<||.vs��||*vs��t|/t��r|/j�d8d9�d:z|.|<��t|/t��rt�|/�|.|<��|/|.|<��tF|.vr(ti|.tF�dk(r|.tFd
|.tF<t*j-d;t�|.j����|jd<vrd=}t/|.j���}1|1j��|||,||1|-f}2t%j�|jd>|2|�}3|3j�|j|d?|jz�	|3j�t�j��dd\}4}5|,s|j�|5�|4rn�<|4d
krjd@|4�dA�}
t|
��|*D]}|
|=�|
j�|�}6t�j�||t�j�dd?|jz|6||$df�g�dB|vrt�|dB|
�yy#t$r!}	d|j�d�}
t|
�|	�d}	~	wwxYw#t$r1|jjd�}t|t�rd}Y�
��wxYw#t<$rY�	��wxYwcc}!w#t�j�$rY���wxYw)CNzcannot write mode z as TIFFrn�big_tiffTrir%r/r1r7r3rr�tiffinforOzTiffinfo Keys: %sr7rrn�descriptionrk�x_resolution�y_resolution�resolution_unit�software�	date_time�artist�	copyrightrjr&r=)r?r@r?r!rorOrpr(r"r0r2�
strip_sizer r�)rr)rr!�r!r�r!�quality�dzInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %srSrjFrMr�r�zConverted items: %s)rDrBrlrUrSzencoder error z when writing image file�_debug_multipage)q�	SAVE_INFOr)r�r��encoderinfo�
encoderconfigr�r�rrPr�r��
WRITE_LIBTIFFrtr�ryrzrr�Exifr�r�r�r�r�rrrKrLrr$r�r7r��EXIFIFDr}r�r�r��IPTC_NAA_CHUNK�PHOTOSHOP_CHUNKr/rr\rRr��IMAGEDESCRIPTION�SOFTWARE�	DATE_TIME�ARTIST�	COPYRIGHTr~rcr�rrv�copyr��height�widthr�invertr'�
getpaletter�r��
STRIP_SIZEr�rX�STRIPBYTECOUNTSr�r��COMPRESSION_INFO_REVrrrx�REFERENCEBLACKWHITEr.�
setdefaultr�r�r��TILEBYTECOUNTSr_�JPEGQUALITYr�r�rS�io�UnsupportedOperation�OSUBFILETYPE�TRANSFERFUNCTION�SUBIFD�	itertools�chain�LIBTIFF_CORErDr�r�r�r/rQr]ru�sort�_getencoderrYr�MAXBLOCKr�r��_saver��setattr)7r'r�rr�ror�r��bits�extrardrr�r�r�rirUrPrOrP�
legacy_ifd�
supplied_tagsr7�iccrrj�inverted_im�pxr�r��lut�colormap�colorsr�rEr�rur��
im_strip_size�rows_per_strip�strip_byte_counts�strips_per_image�
default_value�	blocklistr�r�types�attsr�rQrr��encoder�errcoder�r�s7                                                       rfr�r��s�
��"�6?����6H�3������e�
�.�.�K��$�$�M�
�v�
.�C����z�"�����!�-�0������	��	#���	��	&�*���3�{�e�3�G�!"�C����g�g�a�j�C�
�O��w�w�q�z�C����[� ��:�&��	�;�	��6�"���d�E�"��:�:�<�D��I�I�d�O��D���
�L�L�$�d�4�j�1��$�-�.��z�z�|�����d�E�J�J�'�C�8�3J�3J�,J��|�|�C�(�C��H��x�x��}�C��H�	�#�|�|�C�0�C�K�K���
��J��r�5���V�V�\�\�^�
�?�z�?�W�R��2�%>�?�M�	��	���-���c�"���r�8��
������

�C��b�i�i���.�(�R�Y�Y�->�->�s�-C��M�M��&�&�L�.�&�c�*�!�y�y��~�C��H�')�y�y�'8�'8��'=�C�K�K��$�!
�(�/�/�-������]�)C�
D�C�
���J��
�=�)�	�|�$�	�|�$�	�~�&�	�~�&�	�+�,�	�:��	�K� �	���	�K� ��	��T��;��"�4�(�C��H���/�/�%�
 �C�
� ��O����F��L����F��L���t�|�!��M���t�9��>�#&�t�9�C�� ���!��L��
��{�"��L��!��,�*/��&�'�	���J�	�3�'A�#B�a�#G�
�7�7�c�>��'�'�)�K��!�!�#�B��~��{�1�1�2�A�"�;�#4�#4�5��(*�1�a�4��C��1�S��1�a�4��6�3�!������$�B�	�w�w�+���e�e���u�g�.�����S��Q����q��A��#�f�q�j�6�Q��U�;K�*L�M�*L�Q��S��*L�M�M�H����s�V�|�,�,�H��!��H�
��z�?�C��,�q�A�
��Y�1�t�A�w�;��?�q�0�
1�F��3���'�O�O�L�*�E�M�"(�A�+�Q�3�}��7N�PQ�3R�N��f�$�!$�~��'9�a�&?�1�%D�a�!H���N��Q���N�*��L��#�q�[��f�s�<�7H�.H���C��-�-��1�c�,�6G�G���E�!�'/�}�}����O�$�-�/�3C�a�3G�H���
�&�*:�Q�*>�?�?�L��C����
�a�"�%5�5�7H�I��C���,�/�/��Q�?�C���	�w�w�'���f��!=�#
��%�'�#��C��
�N�N�3�
�.�	#��J��^�D�I����#�!�)�,�G��g�s�+�w��{�g��m�/�� ��o�%��f�$�M�� ��o�%�&�C������3�4����[�&�����"5�6����2�x� �
�����
��i�i�k��
��	�������

�	
�	�!.�t�A�w�7��$�/�/�#�)�)�+�}�7J�7J�7L�M�J�C��
�(�/�/�/��u�z�z�+H�%�P���(�1�1�1�!)���E�#�J��C�K�K�'�!$���S�!1�E�#�J�$�U�S�%��e�,D�E��#�?�?�3�/�4�4�D��%)��c�
��$��3�i�#7��e�S�)� %���W�i� @�5� H�D��I���{�3� %�e��D��I� %�D��I�3N�6�4��C��\�(:�$;�q�$@�!%�l�!3�A�!6�D������*�F�4�:�:�<�,@�A��7�7�'�'��G�
�D�J�J�L�!���	�	��
�k�3��$��>���#�#�B�G�G�Y��=�I������������ 0�1��#�N�N�9�+=�+=�>�q�r�B�M�G�T�����������Q�;�"�7�)�+C�D�C��#�,���C��C������"��������
�_�_�U�F�R�W�W�$4�f�w��PQ�>R�
S�T�	
��[�(���&��,�)��]	�"�"�2�7�7�)�8�4���c�l��!��"�����g�g�k�k�-�0���k�3�'��K��	��T�	��	��|N��t�*�*�
��
�sS�j�k�k?�,l�!l�	j?�j:�:j?�6k<�;k<�?	l�l�l+�*l+c�*�eZdZgd�Zhd�Zdd d�Zd!d�Zd!d�Zd!d�Zd"d�Z	d#d�Z
d$d	�Zejfd%d
�Zd!d�Zd&d�Zd!d
�Zd'd�Zd(d�Zd)d�Zd$d�Zd$d�Zed*d��Zd+d�Zd,d�Zd+d�Zd+d�Zd+d�Zd+d�Zd!d�Zd!d�Z d-d�Z!	d.							d/d�Z"y)0�AppendingTiffWriter)rrrr&r*r2rrr&r*r2r*r2r*r&r*r2>���	� r#r$c�L�|t|�r%||_d|_	t||rdnd�|_n#t
tt|�|_d|_|jj�|_
|j�y#t
$rt|d�|_Y�LwxYw)NTzw+bzr+bF)rr�close_fp�openr�r�rr	rr��	beginning�setup)r��fnrEs   rfr�zAppendingTiffWriter.__init__�s�����2�;��D�I� �D�M�
)��b�3�%�E�:����"�U�)�R�(�D�F�!�D�M����������
�
���
�
)��b�%����
)�s�B�B#�"B#c��|jj|jtj�d|_d|_|jjd�x|_}|sd|_	yd|_	|dk(r|jd�n$|dk(r|jd�n
d	}t|��|j�|j�y)
Nrr*TFrir
rhrzInvalid TIFF file header)r�r�rr[r^�whereToWriteNewIFDOffset�offsetOfNewPager��IIMM�isFirst�	setEndian�RuntimeError�skipIFDs�goToEnd)r��iimmrs   rfrzAppendingTiffWriter.setup�s��������D�N�N�B�K�K�0�48��%� ����6�6�;�;�q�>�)��	�D���D�L������=� ��N�N�3��
�]�
"��N�N�3��,�C��s�#�#��
�
�����rqc��|jry|jj|j�|jj	d�}|sy||j
k7r
d}t
|��|j�}||jz
}|j�J�|jj|j�|j|�|jj|�|j�y)Nr*z1IIMM of new page doesn't match IIMM of first page)rr�r�rr�rr	�readLongr�	writeLong�fixIFD)r�rr�
ifd_offsets    rf�finalizezAppendingTiffWriter.finalizes����<�<��	
�����D�(�(�)��v�v�{�{�1�~�����4�9�9��E�C��s�#�#��]�]�_�
��d�*�*�*�
��,�,�8�8�8������D�1�1�2����z�"������J�����
rqc�D�|j�|j�yr~)rrr�s rf�newFramezAppendingTiffWriter.newFrame's���
�
���
�
�rqc��|Sr~r>r�s rf�	__enter__zAppendingTiffWriter.__enter__,s���rqc�>�|jr|j�yyr~)r�r`)r�r�s  rf�__exit__zAppendingTiffWriter.__exit__/s���=�=��J�J�L�rqc�P�|jj�|jz
Sr~)r�r�rr�s rfr�zAppendingTiffWriter.tell3s���v�v�{�{�}�t�3�3�3�3rqc��|tjk(r||jz
}|jj	||�|j�S)z�
        :param offset: Distance to seek.
        :param whence: Whether the distance is relative to the start,
                       end or current position.
        :returns: The resulting position, relative to the start.
        )r[r^rr�r�r�)r�r��whences   rfr�zAppendingTiffWriter.seek6s>���R�[�[� ��d�*�*�*�F������F�F�#��y�y�{�rqc�>�|jjdtj�|jj	�}d|dzz
}d|cxkrdkr'nn$|jjt
|��|jj	�|_y)NrrC)r�r�r[�SEEK_ENDr�r�rr)r�rg�	pad_bytess   rfrzAppendingTiffWriter.goToEndCsj�������A�r�{�{�#��f�f�k�k�m����r��M�	��y��2���F�F�L�L��y�)�*�#�v�v�{�{�}��rqc��||_|j�d�|_|j�d�|_|j�d�|_y)Nr@rs�HHL)�endian�longFmt�shortFmt�	tagFormat)r�r!s  rfrzAppendingTiffWriter.setEndianMs?������+�+��a�(����;�;�-�q�)��
� �K�K�=��,��rqc�&�	|j�}|dk(r#|jj�dz
|_y|jj	|�|j�}|jj	|dztj���)Nrr*rA)rr�r�rr��	readShortr[r])r�r�num_tagss   rfr
zAppendingTiffWriter.skipIFDsSsl�������J��Q��04�����
��0A��-���F�F�K�K�
�#��~�~�'�H��F�F�K�K��2�
�r�{�{�3�rqc�8�|jj|�Sr~)r�r�rs  rfr�zAppendingTiffWriter.write^s���v�v�|�|�D�!�!rqc�J�	dddd�|S#t$rd}t|��wxYw)Nrsr@r)r&r*r2zoffset is not supported)r�r	)r��
field_sizers   rf�_fmtzAppendingTiffWriter._fmtas8��	$��s�s�+�J�7�7���	$�+�C��s�#�#�	$�s��"c��tj|j|j|�z|jj|��\}|Sr~)rrpr!r+r�r�)r�r*r�s   rf�_readzAppendingTiffWriter._readhs=���=�=��K�K�$�)�)�J�/�/������Z�1H�
����rqc�$�|jd�S�Nr&�r-r�s rfr&zAppendingTiffWriter.readShortn����z�z�!�}�rqc�$�|jd�Srlr0r�s rfrzAppendingTiffWriter.readLongqr1rqc�:�|�||k7rd|�d|��}t|��yy)Nzwrote only z bytes but wanted )r	)�
bytes_written�expectedrs   rf�_verify_bytes_writtenz)AppendingTiffWriter._verify_bytes_writtents6���$��(�)B��
��.@��
�K�C��s�#�#�*C�$rqc���|jjdtj�|jj	tj|j|��}|j|d�y)N���r*)	r�r�r[r]r�rrrr"r6�r�r�r4s   rf�rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLongzsI�������B����$������V�[�[����u�%E�F�
��"�"�=�!�4rqc��|jj|tj�|jj	tj|j|j|�z|��}|j||�yr~)
r�r�r[r]r�rrrr!r+r6)r�r�r*r4s    rf�_rewriteLastz AppendingTiffWriter._rewriteLasts^�������Z�K����-�������K�K����d�i�i�
�&;�;�U�C�
�
�	
�"�"�=�*�=rqc�&�|j|d�Sr/�r<r�s  rf�rewriteLastShortz$AppendingTiffWriter.rewriteLastShort����� � ���*�*rqc�&�|j|d�Srlr>r�s  rf�rewriteLastLongz#AppendingTiffWriter.rewriteLastLong�r@rqc��|jjtj|j|��}|j|d�yr/)r�r�rrrr#r6r9s   rf�
writeShortzAppendingTiffWriter.writeShort�s3�������V�[�[�����%F�G�
��"�"�=�!�4rqc��|jjtj|j|��}|j|d�yrl)r�r�rrrr"r6r9s   rfrzAppendingTiffWriter.writeLong�s3�������V�[�[����u�%E�F�
��"�"�=�!�4rqc�r�|j�|jr|jj�yyr~)rr�r�r`r�s rfr`zAppendingTiffWriter.close�s$���
�
���=�=��F�F�L�L�N�rqc��|j�}t|�D�]\}tj|j|j
j
d��\}}}|j|}||z}|dk}|s.|j�|jz}	|j|	�||jvr�|j
j�}
|r1|j||�|j
j|
dz���|j
j	�|j||�|j
j|
���/|s��3|j
jdtj ���_y)Nr2r*)r&r�rrpr$r�r��
fieldSizesrrrB�Tagsr��_fixOffsetsr�r[r])r�r'r�r7�
field_typer�r*�
total_size�is_localr��cur_poss           rfrzAppendingTiffWriter.fixIFD�s���>�>�#���x��A�%+�]�]�4�>�>�4�6�6�;�;�q�>�%R�"�C��U�����4�J�#�e�+�J�!�Q��H������4�+?�+?�?���$�$�V�,��d�i�i���&�&�+�+�-����$�$�U�J�7��F�F�K�K��!��,��F�F�K�K��'��$�$�U�J�7��F�F�K�K��(�������A�r�{�{�+�/!rqc���t|�D]�}|j|�}||jz
}|dk(r�|dk\r�|dk7r
d}t|��|j	|�|j
j
dtj�|jtj�|j
j
dtj���|j||���y)Nr&r rznot implementedi����r2)
r�r-rr	r:r�r�r[r]rDrrXr<)r�r�r*r�r�rs      rfrJzAppendingTiffWriter._fixOffsets�s����u��A��Z�Z�
�+�F��d�*�*�*�F��Q��6�U�?��A�:�+�C�&�s�+�+��+�+�F�3������C����-�����
�
�.������A�r�{�{�+��!�!�&�*�5�!rqc�>�|rd}n|rd}nd}|j||�S)Nr&r*r)rJ)r�r��isShort�isLongr*s     rf�
fixOffsetszAppendingTiffWriter.fixOffsets�s,����J�
��J��J�����z�2�2rqN)F)rr�rEr�r�r�r�)r�r�)r�r�r�r�r�)r�r�rr�r�r�)r!r�r�r�)r�rr�r�)r*r�r�r�)r*r�r�r�)r4r�r5r�r�r�)r�r�r�r�)r�r�r*r�r�r�)r�r�r*r�r�r�)FF)r�r�rQr�rRr�r�r�)#r�r�r�rHrIr�rrrrrr�r�r^r�rrr
r�r+r-r&r�staticmethodr6r:r<r?rBrDrr`rrJrSr>rqrfr�r��s����J�(�D�
��2�0�
��4�/1�k�k��-�-�	4�"�$�����$��$�
5�
>�+�+�5�5��
,�86�(AF�	3��	3�#'�	3�9=�	3�	
�	3rqr�c�r�|jj�}|j}t|j	dg��}t|d�s|s
t
|||�S|j�}	t|�5}|g|zD]y}||_||_t|d�sd}	n|j}	t|	�D]@}
|j|
�|j�t
|||�|j��B�{	ddd�|j|�y#1swY�xYw#|j|�wxYw)N�
append_imagesr#r)r�r�r�r�r�r�r�r�r�r#r�r�r�r)r'r�rr�r�rV�cur_idx�tf�ims�nfrr�s           rf�	_save_allr[�s���.�.�%�%�'�K��$�$�M������"�=�>�M��2�z�"�=��R��X�&�&��g�g�i�G��
 ��
$���t�m�+��"-���$1��!��s�J�/��C��,�,�C� ��:�C��H�H�S�M��H�H�J��#�r�8�,��K�K�M�	&�,�%�	�����%�
$��	�����s%�.D#�9BD�=D#�D �D#�#D6z.tifz.tiffz
image/tiff)rorr�r�)rwr�rxr�r��!tuple[IntegralLike, IntegralLike])rwrurxr�r�r�r�r\)r�r�r�r)r�r�r�r�r�z$Callable[[_LoaderFunc], _LoaderFunc])r�r�r�z2Callable[[Callable[..., Any]], Callable[..., Any]])rztuple[int, str, str]r�r�)r'zImage.Imager�r�rzstr | bytesr�r�)��
__future__rr�r��loggingr7r[rr`�collections.abcrr�	fractionsr�numbersrr�typingr	r
rrr
r�rrrrrr�_binaryrr6rr9r�
_deprecater�_typingr�_utilrrrr�	getLoggerr�r�r�r�r�rrr�ryrzr~rrrvrwr�r�r�r�r�r�r�rtr�r�r�r�r��	PREDICTORr�r�r�r�r�r�rr}�
JPEGTABLESrxr�r�r�r�r�r�r/r��IMAGEJ_META_DATA_BYTE_COUNTS�IMAGEJ_META_DATArqr.r�r�r�r�rmr�rDrpr{r�r�r�r�rurr�r�r�r�r	r��
_IFDv2Baser�r�rr�r�r��ImageFileDirectoryrr�r��BytesIOr�r[�
register_openr��
register_save�register_save_all�register_extensions�
register_mime)�krEs00rf�<module>rvs|��R#�	����	�
��4��$�C�C�J�J�!�!��!�#����-�	��	�	�8�	$�����
�
�
�
��
����
�
����
��� ���	������������������������	�	���	����	�
�
�����	������
�
������	�����
�
�
��	���� %������u���|���x�	�
�x���z�
��{���v�����
�=��
�:��
���
�>��
�=��
�?�� 
�6�!�"
�6�#�$
�6�%��**:�)?�)?�)A�B�)A���A��1��)A�B��|
���D�!�T�2���|
���D�!�T�2���	|
�
��D�!�T�2��
�|
���D�!�T�2��
�
|
���D�!�T�2��
�|
���D�!�T�2��
�|
���D�!�T�2���|
���D�!�T�2���|
���D�!�T�2��
�|
���D�!�T�2��
�|
���D�!�T�2���|
���D�!�T�2���|
���D�!�T�2���|
� ��D�!�T�2���!|
�"��D�!�T�2��
�#|
�$��D�!�T�2��
�%|
�&��D�!�T�2��
�'|
�(��D�!�T�2��
�)|
�*��D�!�T�2���+|
�,��D�!�T�2���-|
�.��D�!�T�2���/|
�0��D�!�T�2���1|
�2��D�!�T�2��
�3|
�4��D�!�T�2��
�5|
�6��D�!�T�2���7|
�8��D�!�T�2���9|
�:��D�!�T�2��
�;|
�<��D�!�T�2��
�=|
�>��D�!�T�2��
�?|
�@��D�!�T�2��
�A|
�B��D�!�T�2��
�C|
�D��D�!�T�2��
�E|
�F��D�!�T�2���G|
�H��D�!�T�2���I|
�J��D�!�U�B��!1�K|
�L��D�!�U�B��!1�M|
�N��D�!�U�B��!1�O|
�P��D�!�U�B��!3�Q|
�R��D�!�U�B��!2�S|
�T��D�!�U�B���U|
�V��D�!�U�B���W|
�X��D�!�U�B���Y|
�Z��D�!�U�B���[|
�\��D�!�U�B���]|
�^��D�!�U�B���_|
�`��D�!�U�B���a|
�b��D�!�U�B���c|
�d��D�!�U�B���e|
�f��D�!�V�T�"�L�g|
�h��D�!�V�T�"�L�i|
�j��D�!�Y��#�^�k|
�l��D�!�Y��#�^�m|
�n��D�!�Y��#�%5�o|
�p��D�!�Y��#�%5�q|
�r��D�!�\�2�&�(8�s|
�t��D�!�\�2�&�(8�u|
�v��D�!�\�4�(�/�w|
�x��D�!�\�4�(�/�y|
�z��D�!�_�f�-�/?�{|
�|��D�!�_�f�-�/?�}|
�~��D�!�'��3�5F�|
�@��D�!�'��3�5F�A|
�B��D�!�\�4�(�*:�C|
�D��D�!�\�4�(�*:�E|
�F��D�!�_�f�-�/@�G|
�H��D�!�_�f�-�/@�I|
�J��D�!�'��3�5G�K|
�L��D�!�'��3�5G�M|
�N��D�!�\�4�(�*:�O|
�P��D�!�\�4�(�*:�Q|
�R��D�!�_�f�-�/@�S|
�T��D�!�_�f�-�/@�U|
�V��D�!�'��3�5G�W|
�X��D�!�'��3�5G�Y|
�Z��D�!�\�6�*�,<�[|
�\��D�!�\�6�*�,<�]|
�^��D�!�\�2�&�(:�_|
�`��D�!�\�2�&�(:�a|
�b��D�!�%�r�*�,@�c|
�d��D�!�%�r�*�,@�e|
�f��D�!�%�t�,�.A�g|
�h��D�!�%�t�,�.A�i|
�j��D�!�%�t�,�.B�k|
�l��D�!�%�t�,�.B�m|
�n��D�!�%�t�,�.B�o|
�p��D�!�%�t�,�.B�q|
�r��D�!�T�2���s|
�t��D�!�T�2���u|
�v��D�!�T�2��
�w|
�x��D�!�T�2��
�y|
�z��D�!�T�2���{|
�|��D�!�T�2���}|
�~��D�!�T�2��
�|
�@��D�!�T�2��
�A|
�B��D�!�T�2���C|
�D��D�!�T�2���E|
�F��D�!�T�2��
�G|
�H��D�!�T�2��
�I|
�J��D�!�T�2��
�K|
�L��D�!�T�2��
�M|
�N��D�!�V�T�"�K�O|
�P��D�!�V�T�"�L�Q|
�R��D�!�V�T�"�L�S|
�T��D�!�T�2���U|
�V��D�!�T�2���W|
�X��D�!�\�2�&�(8�Y|
�Z��D�!�\�2�&�(8�[|
�\��D�!�_�d�+�->�]|
�^��D�!�_�d�+�->�_|
�`��D�!�'��0�2D�a|
�b��D�!�'��0�2D�c|
�d��D�!�%�r�*�,@�e|
�f��D�!�%�r�*�,@�g|
�h��D�!�T�2��
�i|
�j��D�!�T�2��
�k|
�p��D�!�Y��#�_�q|
�r��D�!�Y��#�_�s|
�t��D�!�Y��#�^�u|
�v��D�!�Y��#�^�w|
�	�|�A�y�A�A�����u�z�z�8�$�?�
�:�B�?�"�%�	'�%�25�%�&�%�
�	�
�"�
�-0�
�&�
�&�����G'�(�G'�T�/���=�s�B�C��	���$���S��)�J��J�M$�J�M$�`(6��$�(7��%������I�C���<�<��S�!�D��!�U�4�&�>�>�#�3F�q�3I�J��!�V�D�6�?�O�C�4H�I���O�S�$�X�1�X�x+��lH�I�'�'�lH�l
��#�r�1�a��t�	$�
��#�r�1�a��t�	$�	
�
	�4��Q��6�1�
%�
��#�r�1�a��t�	$�

�	�4��Q��6�1�
%�
��'�2�q�!�U�D�	)�
��V�R��A�u�d�+�
��g�r�1�a���
-�
��'�2�q�!�U�D�	)�
�
�E�2�q�!�Y��-�
��V�R��A�|�Q�/�
��V�R��A�|�Q�/�
��V�R��A�|�T�2�
� �g�r�1�a��D�
1�!
�"
�E�2�q�!�Y��-�#
�$
�x��Q��5�$�/�%
�&�g�r�1�a���
-�'
�(��Q��5�$�/���Q��5�$�/�+
�	�2s-�l	H3�"�*�*�H3�V�>����M�(�(�-��A�����M�(�(�%�0�����
�,�,�i�8�����-�.�.���0A�B�����M�(�(�,�7��MCCs�
`

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists