� D�g�E����ddlmZddlZddlZddlZddlZddlZddlZddlZddl m Z m Z ddl m Z ddlmZmZddlmZmZmZmZmZmZddlmZmZmZmZmZmZdd lm Z!dd lm"Z#dd lm$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_d_�e_�`��D��Zaie4dd`dd`dafdb�e5dd`dd`dafdb�e4dd`d?d`dafdc�e5dd`d?d`dafdc�e4dd`dd`dafdd�e5dd`dd`dafdd�e4dd`d?d`dafde�e5dd`d?d`dafde�e4dd`ddfdafdg�e5dd`ddfdafdg�e4dd`d?dfdafdh�e5dd`d?dfdafdh�e4dd`ddfdafdi�e5dd`ddfdafdi�e4dd`d?dfdafdj�e5dd`d?dfdafdj�e4dd`ddkdafdl�ie5dd`ddkdafdl�e4dd`d?dkdafdm�e5dd`d?dkdafdm�e4dd`ddkdafdn�e5dd`ddkdafdn�e4dd`d?dkdafdo�e5dd`d?dkdafdo�e4dd`ddpdafdq�e5dd`ddpdafdq�e4dd`d?dpdafdr�e5dd`d?dpdafdr�e4dd`ddpdafds�e5dd`ddpdafds�e4ddfddpdafds�e5ddfddpdafds�e4dd`d?dpdafdt�e5dd`d?dpdafdt��ie4dd`ddudafdv�e4dd`ddwdafdx�e4dd`ddwdafdx�e5dd`ddwdafdy�e4dd`d?dwdafdz�e4ddfddwdafd{�e5ddfddwdafd|�e4dd}dd~dafd�e5dd}dd~dafd��e4dd`dd~dafd��e4ddfdd~dafd��e5ddfdd~dafd��e4dd}dd~dafd�e5dd}dd~dafd��e4dd`dd�dffd��e5dd`dd�dffd��e4d?d`dd�dafd���ie5d?d`dd�dafd��e4d?d`d?d�dafd��e5d?d`d?d�dafd��e4d?d`dd�dafd��e5d?d`dd�dafd��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�dffd��e5d?d`dd�dffd��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�dafd��e5d?d`dd�dafd��e4d?d`dd�dafd��e5d?d`dd�dafd��e4d?d`dd�d�fd��e5d?d`dd�d�fd��e4d?d`dd�d`fd��e5d?d`dd�d`fd��e4d?d`dd�dffd���ie5d?d`dd�dffd��e4dAd`dd`dafd��e5dAd`dd`dafd��e4dAd`d?d`dafd��e5dAd`d?d`dafd��e4dAd`ddfdafd��e5dAd`ddfdafd��e4dAd`d?dfdafd��e5dAd`d?dfdafd��e4dAd`ddkdafd��e5dAd`ddkdafd��e4dAd`d?dkdafd��e5dAd`d?dkdafd��e4dAd`ddpdafd��e5dAd`ddpdafd��e4dAd`dd�d�fd��e4dAd`dd�dffd���ie5dAd`dd�dffd��e4dAd`d?dpdafd��e5dAd`d?dpdafd��e4dEd`dd�dafd��e5dEd`dd�dafd��e4dEd`dd�d�fd��e5dEd`dd�d�fd��e4dEd`dd�d�fd��e5dEd`dd�d�fd��e4dEd`dd�dafd��e5dEd`dd�dafd��e4dGd`ddpdafds�e5dGd`ddpdafds�e4dGd`dd�dafd��e5dGd`dd�dafd��e4dKd`dd�dafd��e5dKd`dd�dafd���Zbecd��ebD����Zdgd��Zeefejgd�d���s e&d�d����dd��Zh�ddDŽZi�d dʄZjiZkiZl�d d΄ZmGdτd�e��Zned�eoepgefZq�d dԄZr�d dքZs�d dڄZter e euefZvne ZvGdۄd�ev��Zwekew_kelew_le+j`��D]M\ZxZyey�zd�dݦ�Zye{ewd�ey��ekexd��e{ewd�ey��elex���N[k[l[x[yGd��d�ew��Z|e|Z}Gd�d�ej��Z~id�d�e4ddd`df�d�d�e4dddpdf�d�d�e4ddd�d?f�d�d�e4dAddpdf�d�d�e4dAdd�d?f�d�d�e4dd?d~df�d�d�e4dddwdf�d�d�e4dd?dwdf�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�e5dddwdf�d�e5dd?dwdfd�e5ddAd~dfd���Z�d�d�Z�G�d��dej���Z��d�d�Z�ej�e~j�e~eh��ej�e~j�e���ej�e~j�e���ej�e~j��d�dg��ej�e~j��d��dS(�)� 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��webpc��i|]\}}||�� S�r?)�.0�k�vs �c/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/PIL/TiffImagePlugin.py� <dictcomp>rD�s��B�B�B���A��1�B�B�B��rr?)�1z1;I)rGz1;IR)rGrG)rGz1;R)r')�LzL;2I)rHzL;2IR)rHzL;2)rHzL;2R)r+)rHzL;4I)rHzL;4IR)rHzL;4)rHzL;4R)r3)rHzL;I)rHzL;IR)rHrH)rHzL;R)� )�I;16zI;12)�)rJrJ)�I;16BrL)rJzI;16R)�I�I;16S)rM�I;16BS)r))� )�F�F;32F)rQ�F;32BF)rMzI;32N)rM�I;32S)rM�I;32BS)r3r3)�LArV)r3r3r3)�RGBrW)rWzRGB;R)r3r3r3r3)�RGBArX�r)rW�RGBX)r3r3r3r3r3�rr)rW�RGBXX)r3r3r3r3r3r3)rrr)rW�RGBXXX)rX�RGBa)rr)rX�RGBaX)rrr)rX�RGBaXX)r'r)rX�RGBAX)r'rr)rX�RGBAXX)i�)rKrKrK)rWzRGB;16L)rWzRGB;16B)rKrKrKrK)rXzRGBA;16L)rXzRGBA;16B)rWzRGBX;16L)rWzRGBX;16B)rXzRGBa;16L)rXzRGBa;16B)�PzP;1)rczP;1R)rczP;2)rczP;2R)rczP;4)rczP;4R)rcrc)rc�PX)�PAre)rczP;R)�CMYKrf)rf�CMYKX)rf�CMYKXX)rfzCMYK;16L)rfzCMYK;16B)�LABric#�@K�|]}t|d��V��dS)r+N)�len)r@�key_tps rC� <genexpr>rms,����A�A�V�#�f�Q�i�.�.�A�A�A�A�A�ArE)�MM*�II*sMM*sII*sMM+sII+�libtiff_support_custom_tagsTz*Support for LibTIFF earlier than version 4rI�prefix�bytes�return�boolc�$�|dd�tvS�Nr+)�PREFIXES�rqs rC�_acceptry"s�� �"�1�"�:�� !�!rE�val�float | Fraction | IFDRational�max_val�int�!tuple[IntegralLike, IntegralLike]c��t|��dk}t|rd|z n|���|��}|r |ddd�n|S)Nr�����)�abs� IFDRational�limit_rational)rzr|�inv�n_ds rC�_limit_rationalr�&sT�� �c�(�(�Q�,�C� ��-�a�#�g�g�#� .� .� =� =�g� F� F�C�� $�3�t�t��t�9�9��$rEr��min_valc�J�t|��}|j|jf}td�|D����|krt |t |����}t d�|D����}t|��|krt |d|dz |��}|S)Nc3�4K�|]}t|��V��dS�N��float�r@�is rCrmz)_limit_signed_rational.<locals>.<genexpr>4s(���� !� !��5��8�8� !� !� !� !� !� !rEc3�4K�|]}t|��V��dSr�r�r�s rCrmz)_limit_signed_rational.<locals>.<genexpr>7s(����,�,�1�e�A�h�h�,�,�,�,�,�,rErr)r� numerator� denominator�minr�r��tuple�max)rzr|r��fracr�� n_d_floats rC�_limit_signed_rationalr�.s��� �C�=�=�D�-1�^�T�=M�-M�C� � !� !�S� !� !� !�!�!�G�+�+��c�3�w�<�<�0�0���,�,��,�,�,�,�,�I� �9�~�~�����i��l�Y�q�\�9�7�C�C�� �JrE�op�strr c���d�fd� }|S) N�selfr��args�tuple[float, ...]rs�bool | float | Fractionc�4��t|j���|�Sr�)�getattr�_val)r�r�r�s �rC�delegatez_delegate.<locals>.delegateFs���&�w�t�y�"�%�%�t�,�,rE)r�r�r�r�rsr�r?)r�r�s` rC� _delegater�Es(���-�-�-�-�-�-� �OrEc���eZdZdZ dZ d8d9d �Zed:d ���Zed;d ���Zd<d�Z d=d�Z d;d�Z d>d�Z d?d�Z d@d�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#ed0��Z$ed1��Z%ed2��Z&ed3��Z'ed4��Z(ed5��Z)e*e+d6��r ed6��Z,d7Sd7S)Ar�z�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�r�valuer{r�r}rs�Nonec�H�|t|t��r&|j|_|j|_|j|_dSt|t��r|j|_|j|_n0trtt|��|_n||_||_|dkrtd��|_dS|dkrt|��|_dSt|��|kr$tt|��|��|_dSt||z ��|_dS)z� :param value: either an integer numerator, a float/rational/other number, or an IFDRational :param denominator: Optional integer denominator Nr�nanr) � isinstancer�r�r�r�r�r�rr rr r�r})r�r�r�s rC�__init__zIFDRational.__init__\s �� �#� �e�[� )� )� �#�o�D�O� %� 1�D� �� �D�I� �F� �e�X� &� &� ,�#�o�D�O� %� 1�D� � �� (�"&�|�U�";�";����"'��� +�D� � �!� � ��e� � �D�I�I�I� �A� � � ����D�I�I�I� ��Z�Z�5� � � ��U���[�9�9�D�I�I�I� ���!4�5�5�D�I�I�IrEr c��|jSr�)r��r�s rCr�zIFDRational.numerator~s ����rEc��|jSr�)r�r�s rCr�zIFDRational.denominator�s ��� � rE�max_denominator�tuple[IntegralLike, int]c��|jdkr|j|jfSt|jt��sJ�|j�|��}|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�r��fs rCr�zIFDRational.limit_rational�s^�� � �q� � ��>�4�#3�3� 3��$�)�X�.�.�.�.�.� �I� '� '�� 8� 8���{�A�M�)�)rEr�c�D�tt|j����Sr�)r�r�r�r�s rC�__repr__zIFDRational.__repr__�s���5���#�#�$�$�$rEc�4�|j���Sr�)r��__hash__r�s rCr�zIFDRational.__hash__�s���y�!�!�#�#�#rE�other�objectrtc��|j}t|t��r|j}t|t��rt|��}||kSr�)r�r�r�r�)r�r�rzs rC�__eq__zIFDRational.__eq__�sI���i�� �e�[� )� )� ��J�E� �e�U� #� #� ���*�*�C��e�|�rE�%list[float | Fraction | IntegralLike]c�*�|j|j|jgSr�)r�r�r�r�s rC� __getstate__zIFDRational.__getstate__�s��� �4�?�D�,=�>�>rE�statec� �t�|d��|\}}}t|ttf��sJ�||_t rtt|��|_ n||_ t|t��sJ�||_ dS�Nr) r�r�r�r�rr�r rr r�r}r�)r�r�r�r�r�s rC� __setstate__zIFDRational.__setstate__�s������T�1�%�%�%�).�&��j�,��$��� 1�2�2�2�2�2��� � � )�"�<��<�<�D�O�O�(�D�O��,��,�,�,�,�,�(����rE�__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__NrF)r�r{r�r}rsr�)rsr �rsr})r�r}rsr��rsr�)r�r�rsrt)rsr�)r�r�rsr�)-�__name__� __module__� __qualname__�__doc__� __slots__r��propertyr�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�r�r�r��hasattrrr�r?rErCr�r�Ns��������� � 7�I�IJ� 6� 6� 6� 6� 6�D�����X���!�!�!��X�!� *� *� *� *�%�%�%�%�$�$�$�$�����?�?�?�?� )� )� )� )� ��i� �"�"�G��y��$�$�H��i� �"�"�G��y��$�$�H��i� �"�"�G��y��$�$�H��)�M�*�*�K��9�^�,�,�L��9�^�,�,�L��I�o�.�.�M��i� �"�"�G��y��$�$�H��i� �"�"�G��y��$�$�H��i� �"�"�G��i� �"�"�G��i� �"�"�G�� �+�&�&�I� �Y�x� � �F� �Y�x� � �F� �Y�x� � �F� �Y�x� � �F��y��$�$�H��y��$�$�H�� �+�&�&�I�� �+�&�&�I��w�x��#�#�'��)�I�&�&����'�'rE�ImageFileDirectory_v2�idx�size�$Callable[[_LoaderFunc], _LoaderFunc]c����d��fd� }|S)N�func� _LoaderFuncrsc���ddlm}|j�d��r&|jdd��dd��|�<�|ft �<|S)Nrr�load_r-�_� )rrr�� startswith�replace�_load_dispatch)r�rr�r�s ��rC� decoratorz#_register_loader.<locals>.decorator�sd���#�#�#�#�#�#� �=� #� #�G� ,� ,� =���q�r�r�*�2�2�3��<�<�E�#�J�"�D�j��s��� rE)r�r�rsr�r?)r�r�r�s`` rC�_register_loaderr��s/����������� �rE�2Callable[[Callable[..., Any]], Callable[..., Any]]c���d�fd� }|S)Nr��Callable[..., Any]rsc���|t�<|Sr�)�_write_dispatch)r�r�s �rCr�z#_register_writer.<locals>.decorator�s���#����� rE)r�r�rsr�r?)r�r�s` rC�_register_writerr��s)��������� �rE� idx_fmt_name�tuple[int, str, str]r�c����ddlm}|\}�}|||<tjd������ dd��fd � }�|ft|<�fd�t |<dS)Nrr�=Tr�r��datarr� legacy_apirtrs�tuple[Any, ...]c�X��|�t|���z����|��Sr�)�_unpackrk)r�rr�fmtr�s ��rC� basic_handlerz&_register_basic.<locals>.basic_handler�s/����|�|�s�4�y�y�D�0�7�#�7�7��>�>�>rEc�J���d���fd�|D����S)NrEc3�D�K�|]}���|��V��dSr�)�_pack)r@r�rr�s ��rCrmz4_register_basic.<locals>.<lambda>.<locals>.<genexpr>�s1�����<�<�E����C��'�'�<�<�<�<�<�<rE��join)r��valuesrs` �rC�<lambda>z!_register_basic.<locals>.<lambda>�s0���� ���<�<�<�<�<�V�<�<�<�<�<�rE�T)r�r�rrrrrtrsr)rr�struct�calcsizer�r�)r�rr��namerrr�s @@rC�_register_basicr�s�����������!�N�C��d��E�#�J� �?�9�s�9�9� %� %�D�FJ�?�?�?�?�?�?�?�?� � �-�N�3������O�C���rEc��eZdZUdZiZded<iZded< d_d`d�Zed���Z ed���Z edad���Z e j dbd���Z dcd�Z ddd�Zded�Zdfd�Zdgd!�Zdhd#�Zdid$�Zdjd&�Zdkd'�Zdld)�Zdmd-�Zdnd/�Zeeeejd0d1fejd2d3fejd4d5fej d6d7fej!d8d9fej"d:d;fej#d<d=fej$d2d3fej%d>d?fg ����e&d@d@��dodpdB���Z'e(d@��dqdD���Z)e&dEd@��dodrdF���Z*e(dE��dsdH���Z+e&dIdJ�� dodtdL���Z,e(dI��dudN���Z-e&dOd@��dodpdP���Z.e(dO��dvdQ���Z/e&dRdJ�� dodtdS���Z0e(dR��dudT���Z1dwdX�Z2dxdY�Z3dZ�Z4dydzd]�Z5d{d^�Z6dS)|r�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��II*N�ifhrrrq� bytes | None�group� int | Nonersr�c�.�t|��s"dt|���d�}t|���|�|n |dd�|_|jtkrd|_n)|jt krd|_nd}t|���|ddk|_||_i|_ |� ��|jr$|� d |d d���d n#|� d |d d���d |_ d|_ dS)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�+�Qr3rrHr+F)ry�repr� SyntaxError�_prefix�MM�_endian�II�_bigtiffr�tagtype�resetr�next� _legacy_api)r�rrqr�msgs rCr�zImageFileDirectory_v2.__init__Gs�� �s�|�|� #�C�T�#�Y�Y�C�C�C�C��c�"�"� "�!'�!3�v�v��R�a�R��� � �<�2� � ��D�L�L� �\�R� � ��D�L�L�"�C��c�"�"� "��A��"� �� ��� �')�� �'� � � � � � ��}� /�D�L�L��c�!�"�"�g� &� &�q� )� )����c�3�q�r�r�7�+�+�A�.� � � !����rEc��|jSr�)r"r�s rCrzImageFileDirectory_v2.<lambda>n���4�<�rEc��|jSr�)�_offsetr�s rCrzImageFileDirectory_v2.<lambda>or-rErtc��|jSr�)r*r�s rCrz ImageFileDirectory_v2.legacy_apiqs ����rEr�r c�$�d}t|���)Nz"Not allowing setting of legacy api)� Exception)r�r�r+s rCrz ImageFileDirectory_v2.legacy_apius��2����n�n�rEc�Z�i|_i|_i|_i|_d|_d|_dSr�)�_tags_v1�_tags_v2�_tagdatar'�_nextr/r�s rCr(zImageFileDirectory_v2.resetzs0��(*�� �(*�� �*,�� ��� ��� �#'�� � � rEr�c�:�tt|����Sr�)r��dictr�s rC�__str__zImageFileDirectory_v2.__str__�s���4��:�:���rE�dict[str, Any]c�D���fd�����D��S)z� :returns: dict of name|key: value Returns the complete tag dictionary, with named tags where possible. c�V��i|]%\}}tj|�j��j|��&Sr?)r�lookuprr)r@�coder�r�s �rCrDz/ImageFileDirectory_v2.named.<locals>.<dictcomp>�s@��� � � ���e� �O�D�$�*� -� -� 2�E� � � rE)�itemsr�s`rC�namedzImageFileDirectory_v2.named�s6���  � � � �#�z�z�|�|� � � � rEr}c�n�tt|j��t|j��z��Sr�)rk�setr6r5r�s rC�__len__zImageFileDirectory_v2.__len__��)���3�t�}�%�%��D�M�(:�(:�:�;�;�;rE�tagr c���||jvr?|j|}|j|}|j|\}}||||j��||<|j|}|jrt |t tf��s|f}|Sr�)r5r6r'r�rr�r�rr)r�rFr�typr��handlerrzs rC� __getitem__z!ImageFileDirectory_v2.__getitem__�s��� �d�m� #� #��=��%�D��,�s�#�C� �/��4�M�D�'����d�D�O�<�<�D��I��m�C� �� �?� �:�c�E�5�>�#B�#B� ��&�C�� rEr�c�&�||jvp||jvSr�)r5r6�r�rFs rC� __contains__z"ImageFileDirectory_v2.__contains__�����d�m�#�;�s�d�m�';�;rEc�>�|�|||j��dSr�)�_setitemr)r�rFr�s rC� __setitem__z!ImageFileDirectory_v2.__setitem__�s �� � � �c�5�$�/�2�2�2�2�2rErc �>� �tttf}tj||j��� t ||��r|gn|}||jv�r� jr� j|j|<�n�tj |j|<td�|D����rN|D]5}t |t��sJ�|dkrtj |j|<n�6tj |j|<�nNtd�|D����r�d}d}d} |D]I}t |t��sJ�|rd|cxkrdksnd}|rd|cxkrdksnd}| r|dkrd} �J|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|tj kr d �|D��}n'|j|tj kr d �|D��}|j|tjkot |t,��} | st/� fd�|D����}|r|jn|j} | s�� jdks7|j|tjks� j��t7|��dkrz|sx|r(|j|tj tj fvr|f} |\| |<dS#t8$r7t;jd|�dt7|���d���|d| |<YdSwxYw|| |<dS)Nc3�@K�|]}t|t��V��dSr�)r�r��r@rBs rCrmz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>�s,����B�B�a�z�!�[�1�1�B�B�B�B�B�BrErc3�@K�|]}t|t��V��dSr�)r�r}rTs rCrmz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>��,����<�<���A�s�+�+�<�<�<�<�<�<rETr!Fi���i�c3�@K�|]}t|t��V��dSr�)r�r�rTs rCrmz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>��,����>�>�!��A�u�-�-�>�>�>�>�>�>rEc3�@K�|]}t|t��V��dSr�)r�r�rTs rCrmz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>�rVrEc3�@K�|]}t|t��V��dSr�)r�rrrTs rCrmz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>�rXrEc�h�g|]/}t|t��r|�dd��n|��0S)�asciir�)r�r��encoderTs rC� <listcomp>z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>�sJ������1;�1�c�0B�0B�I�����)�,�,�,����rEc�Z�g|](}t|t��rt|��n|��)Sr?)r�r}r�rTs rCr^z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>�s1��L�L�L��*�Q��"4�"4�;�e�A�h�h�h�!�L�L�LrEc3�p�K�|]0}t|t��r��|��n|V��1dSr�)r�r��cvt_enum)r@r��infos �rCrmz1ImageFileDirectory_v2._setitem.<locals>.<genexpr>�sW��������)3�5�#�(>�(>�I�� � �e�$�$�$�E������rErzMetadata Warning, tag z had too many entries: z , expected 1)rrrr�rr>rr�r'�type� UNDEFINED�allr��SIGNED_RATIONAL�RATIONALr}�SHORT� SIGNED_SHORT�LONG� SIGNED_LONG�DOUBLE�ASCII�BYTEr9r�r4r5�lengthrk� ValueError�warnings�warn) r�rFr�r� basetypesrrB�short� signed_short�long�is_ifd�destrbs @rCrPzImageFileDirectory_v2._setitem�sq����U�C�(� ���s�D�J�/�/��&�u�i�8�8�C�%���e�� �d�l� "� "��y�% 6�$(�I�� �S�!�!�$,�$6�� �S�!��B�B�6�B�B�B�B�B�!6�#�>�>��)�!�[�9�9�9�9�9��q�5�5�08�0H�D�L��-�!�E�!�-5�,=�� �S�)���<�<�V�<�<�<�<�<�6� �E�#'�L��D�#�)�)��)�!�S�1�1�1�1�1� �*�!�q�.�.�.�.�5�.�.�.�.�$)�E�'�1��A�1E�1E�1E�1E��1E�1E�1E�1E�+0�L��)�A��E�E�#(�D���A�,4�N�� �S�)�)�%�A�,4�,A�� �S�)�)��A�,4�M�� �S�)�)�,4�,@�� �S�)�)��>�>�v�>�>�>�>�>�6�(0��D�L��%�%��<�<�V�<�<�<�<�<�6�(0��D�L��%�%��>�>�v�>�>�>�>�>�6�(0� �D�L��%� �<�� �� 2� 2� 2�������F�F��\�#� �(�"3� 3� 3�L�L�V�L�L�L�F���c�"�h�m�3�P� �6�4�8P�8P��� ������#������F� !+�=�t�}�}�� ��� � �[�A� � ��|�C� �H�M�1�1�� �#��F� � �q�(8�(8��(8�� #�d�l�3�/��!��(�4���!��� &�%� ��c������ &� &� &�� �1�S�1�1��6�{�{�1�1�1����#�1�I��S� � � � �  &�����D��I�I�Is� M�=N�Nc��|j�|d��|j�|d��|j�|d��dSr�)r5�popr4r6rLs rC� __delitem__z!ImageFileDirectory_v2.__delitem__sP�� � ���#�t�$�$�$� � ���#�t�$�$�$� � ���#�t�$�$�$�$�$rE� Iterator[int]c�n�tt|j��t|j��z��Sr�)�iterrCr6r5r�s rC�__iter__zImageFileDirectory_v2.__iter__�)���C�� �&�&��T�]�);�);�;�<�<�<rErrrc�<�tj|j|z|��Sr�)r�unpackr$)r�rrs rCrzImageFileDirectory_v2._unpack s���}�T�\�C�/��6�6�6rErc�6�tj|j|zg|�R�Sr�)r�packr$)r�rrs rCr zImageFileDirectory_v2._pack s!���{�4�<�#�-�7��7�7�7�7rE�HrtrHrv�bz signed byte�hz signed short�lz signed longr�r��d�doubler�long8rTc��|Sr�r?�r�rrs rC� load_bytezImageFileDirectory_v2.load_byte!���� rE�bytes | int | IFDRationalc��t|t��rt|��}t|t��rt|f��}|Sr�)r�r�r}rr�r�rs rC� write_bytez ImageFileDirectory_v2.write_byte%sC�� �d�K� (� (� ��t�9�9�D� �d�C� � � "��$��>�>�D�� rEr'c�l�|�d��r |dd�}|�dd��S)N�r�zlatin-1r�)�endswith�decoder�s rC� load_stringz!ImageFileDirectory_v2.load_string-s7�� �=�=�� � � �����9�D��{�{�9�i�0�0�0rE�str | bytes | intc��t|t��rt|��}t|t��s|�dd��}|dzS)Nr\r�r�)r�r}r�rrr]�r�r�s rC� write_stringz"ImageFileDirectory_v2.write_string3sP�� �e�S� !� !� ���J�J�E��%��'�'� 5��L�L��)�4�4�E��u�}�rEr-r3�)tuple[tuple[int, int] | IFDRational, ...]c �����|�t|��dz�d�|��}d �fd� �t�fd �t|ddd �|d dd ���D����S) Nr+rH�ar}r�rs�tuple[int, int] | IFDRationalc�0���r||fnt||��Sr��r��r�r�rs �rC�combinez4ImageFileDirectory_v2.load_rational.<locals>.combineB� ���'�>�A�q�6�6�[��A�->�->� >rEc3�6�K�|]\}}�||��V��dSr�r?�r@�num�denomr�s �rCrmz6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>E�3�����V�V�Z�S�%�W�W�S�%�(�(�V�V�V�V�V�VrEr'r�r�r}r�r}rsr��rrkr��zip�r�rr�valsr�s ` @rC� load_rationalz#ImageFileDirectory_v2.load_rational<������|�|�s�4�y�y�A�~�0�0�0�$�7�7�� ?� ?� ?� ?� ?� ?��V�V�V�V�3�t�C�C�a�C�y�$�q�t�RS�t�*�;U�;U�V�V�V�V�V�VrEr�c�F��d��fd�|D����S)NrEc3�P�K�|] }�jdgt|d���R�V��!dS)�2Ll��N)r r��r@r�r�s �rCrmz7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>IsR����� � �DH�J�D�J�t� ?�o�d�I�>�>� ?� ?� ?� � � � � � rEr �r�rs` rC�write_rationalz$ImageFileDirectory_v2.write_rationalGs?����x�x� � � � �LR� � � � � � rEr1c��|Sr�r?r�s rC�load_undefinedz$ImageFileDirectory_v2.load_undefinedMr�rEc��t|t��rt|��}t|t��r#t|���dd��}|S)Nr\r�)r�r�r}r�r]r�s rC�write_undefinedz%ImageFileDirectory_v2.write_undefinedQsQ�� �e�[� )� )� ���J�J�E� �e�S� !� !� :���J�J�%�%�g�y�9�9�E�� rE� c �����|�t|��dz�d�|��}d �fd� �t�fd �t|ddd �|d dd ���D����S) Nr+r�r�r}r�rsr�c�0���r||fnt||��Sr�r�r�s �rCr�z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine_r�rEc3�6�K�|]\}}�||��V��dSr�r?r�s �rCrmz=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>br�rEr'rr�r�r�s ` @rC�load_signed_rationalz*ImageFileDirectory_v2.load_signed_rationalYr�rEc�F��d��fd�|D����S)NrEc 3�R�K�|]!}�jdgt|dd���R�V��"dS)�2li���i�N)r r�r�s �rCrmz>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>fsX����� � �� �D�J�t� P�4�T�9�h�O�O� P� P� P� � � � � � rEr r�s` rC�write_signed_rationalz+ImageFileDirectory_v2.write_signed_rationalds?����x�x� � � � �� � � � � � rE�fp� IO[bytes]r�c��|�|��}t|��|kr%d|�dt|���d�}t|���|S)Nz&Corrupt EXIF data. Expecting to read � bytes but only got z. )�readrk�OSError)r�r�r��retr+s rC� _ensure_readz"ImageFileDirectory_v2._ensure_readksj���g�g�d�m�m�� �s�8�8�t� � �L�%)�L�L�?B�3�x�x�L�L�L� ��#�,�,� �� rEc ��|���|���|_ |jr*|�d|�|d����n)|�d|�|d����d}t |��D�]J}|jr*|�d|�|d����n)|�d|�|d ����\}}}}tj||j ��j }tj |d ��} d |�d |�d | �d |�d� } |j |\} } n,#t$rt�d| |��Y��wxYw|| z} | |jrdndkr�|���}|�|jrdnd|��\}| d|�d|��z } |�|��t%j|| ��}|�|��n |d| �}t)|��| krFt+jd| �dt)|���d|����t�| �����|st�| �����||j|<||j|<| dz } | | dkrd| �d�nt3|��z } t�| ����L|jr*|�d|�|d����n)|�d|�|d����\|_dS#t6$r,} t+jt9| ����Yd} ~ dSd} ~ wwxYw)Nrr3r�r'r�HHQ8s��HHL4srI�unknownztag: � (� ) - type: �)z%s - unsupported type %sr+rHz Tag Location: z - Data Location: z/Possibly corrupt EXIF data. Expecting to read r�z. Skipping tag z - value: rP�<table: � bytes>)r(�tellr/r&rr��rangerr>rrr�getr��KeyError�logger�debug�seekr� _safe_readrkrqrrr6r'r r)r�r�)r�r�� tag_countr�rFrH�countr�tagname�typnamer+� unit_sizerIr��here�offsets rC�loadzImageFileDirectory_v2.loadus��� � � � � � ��w�w�y�y�� �= ��=�A�� � �S�$�"3�"3�B��":�":�;�;�;��\�\�#�t�'8�'8��Q�'?�'?�@�@�� �I� �9�%�%�. "�. "���}�J�D�L�L��$�*;�*;�B��*C�*C�D�D�D����g�t�/@�/@��R�/H�/H�I�I�&��S�%�� #�/�#�t�z�:�:�?���)�C��3�3��I�g�I�I��I�I��I�I�3�I�I�I���)-�)<�S�)A�&�I�w�w�������L�L�!;�S�#�F�F�F��H������y�(���� �4�1�1�1�5�5��7�7�9�9�D� $� � �D�M�-J�S�S�s�D� Q� Q�I�V��M�T�M�M�V�M�M�M�C��G�G�F�O�O�O�$�/��D�9�9�D��G�G�D�M�M�M�M�����;�D��t�9�9��$�$��M�/�-1�/�/�GJ�4�y�y�/�/�),�/�/���� �L�L��%�%�%�����L�L��%�%�%��%)�� �c�"�$'�� �S�!��|�#���4�"�9�9�/�$�/�/�/�/�$�t�*�*�L��� � �S�!�!�!�!��=�A�� � �S�$�"3�"3�B��":�":�;�;�;��\�\�#�t�'8�'8��Q�'?�'?�@�@� �T�Y�Y�Y�� � � � � �M�#�c�(�(� #� #� #� �F�F�F�F�F����� ���s=�DM�E�M�&F�=M�?F�G M� N�!N�Nc��|j|�d|jrdnd��z}|jr||�ddd��z }||jr|�dd��n|�d d��z }|S) Nr�r�*�HHr3rrrKrH)r"r r&�r�rs rC�_get_ifhzImageFileDirectory_v2._get_ifh�s����l�T�Z�Z��4�=�-H�R�R�b�I�I�I�� �=� *� �4�:�:�d�A�q�)�)� )�C� �d�m�K�t�z�z�#�r�"�"�"����C��9K�9K�K��� rErr�c ���|�|jrdndt|j����}g}�t|��t|j��|jrdndzzdzz �d}|jrdnd}|jrdnd}t |j�����D�]\}}|t krt|��}|j|} t� d|| t|����| tj kot|t��} | ret|���|� ��} |j|} | ���D] \} }|| | <� | ����}n.t|t$��r|n|f} |j| |g| �R�}tj||j��j}| rd nt/j| d ��}d |�d |�d|�d | �d� }|t|��dkrdt|���d�nt3| ��z }t� |��| rd}nD| tjtjtjfvrt|��}nt| ��}t|��|kr0|�|| ||�|d��df����6|�|| ||�|���|f���t|��dzdzdzz ����|��||\}} }}}|rC|j| \}}�fd�||||j ��D��} |j| |g| �R�}n3|�||�!||��d�z��}|| |||f||<|D]f\}} }}}t� d|| |t|��t|����||�|jrdnd|| ||��z }�g|dz }|D]$\}} }}}||z }t|��dzr|dz }�%|S)Nrr�r�rIr+rHr3zTag %s, Type: %s, Value: %s)r�ifdr�zsave: r�r�z ) - value: rKr�r�rr�rEr'c���g|]}|�z��Sr?r?)r@rzr�s �rCr^z1ImageFileDirectory_v2.tobytes.<locals>.<listcomp>�s���W�W�W�3�#��,�W�W�WrErz%s %s %s %s %sr�r�s)"r r&rkr5�sortedr@� STRIPOFFSETSr'r�r�r rrjr�r9r�r��tobytesr�r�r>rrrr�r�rnrmrd�append�ljustr�rr)r�r��result�entries� stripoffsetsr�fmt_sizerFr�rHrwr�r�ifd_tag� ifd_valuerr�r�r+r�r�rIs ` rCr�zImageFileDirectory_v2.tobytes�s�������4�=�9�C�C�c�3�t�}�;M�;M�N�N��<>���#�f�+�+��D�M� 2� 2�D�M�6Q�b�b�r� R�R�UV�V�V��� ��]�+�c�c���� �,�1�1�1�� ���!4�!4�!6�!6�7�7�" 3�" 3�J�C���l�"�"�"�7�|�|� ��,�s�#�C� �L�L�6��S�$�u�+�+� N� N� N��H�M�)�E�j���.E�.E�F�� @�+�D�M�M�O�O�3�G�G�G����s�+��*0�,�,�.�.�-�-�&�G�Y�#,�C��L�L��{�{�6�*�*���",�U�E�":�":�H������0�t�+�C�0��?��?�?�?���o�c�4�:�6�6�;�G�%�D�e�e�5�9�S�)�+D�+D�G�P�7�P�P�c�P�P�W�P�P��P�P�P�C� �C��I�I��O�O�0�c�$�i�i�0�0�0�0��V��� T�C� �L�L�� � � �� $����������8J�K�K�K��D� � ����F� � ���4�y�y�H�$�$�����S�%����H�e�1L�1L�c�R�S�S�S�S�����S�%����C��1H�1H�$�O�P�P�P��3�t�9�9�q�=�Q�.��2�2��� � #�+2�<�+@� (�C��e�U�D�� N� $� 3�C� 8� ��g�W�W�W�W�'�'�$��d�o�2V�2V�W�W�W��0�t�+�C�0��?��?�?�?���� � �3�� � �S�%�(@�(@��(C�f�(L�M�M��$'��e�U�D�$@�G�L� !�-4� � � (�C��e�U�D� �L�L�)�3��U�D��K�K��d��� T� T� T� �d�j�j��=�5���g�s�C����� �F�F� �+���-4� � � (�C��e�U�D� �d�N�F��4�y�y�1�}� ��%����� rEc� �|���dkr'|�|�����|���}|�|��}|�|��|t |��zSr�)r��writer�r�rk)r�r�r�r�s rC�savezImageFileDirectory_v2.save sn�� �7�7�9�9��>�>� �H�H�T�]�]�_�_� %� %� %����������f�%�%�� ���������F� � �#�#rE)rNN)rrrrqrrrrsr�)rsrt)r�rtrsr �rsr�r�)rsr;r��rFr}rsr �rFr�rsrt�rFr}r�r rsr�)rFr}r�r rrtrsr�)rFr}rsr��rsr|)rr�rrrrsr)rr�rr rsrrr)rrrrrtrsrr)rr�rsrr)rrrrrtrsr�)r�r�rsrr)rrrrrtrsr�)rr�rsrr)r�r�rsrr)r�r�r�r}rsrr)r�r�rsr�rY)r�r}rsrr)r�r�rsr})7r�r�r�r�r��__annotations__r�r�r�rqr�r�setterr(r:rArDrJrMrQrPr{rrr �list�maprrrhrj� SIGNED_BYTErirk�FLOATrl�IFD�LONG8r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r?rErCr�r�s��������:�:�x:<�N�;�;�;�;�57�O�7�7�7�7�3�#� � %!�%!�%!�%!�%!�N�X�/�/� 0� 0�F� �X�/�/� 0� 0�F� � � � ��X� ���������(�(�(�(�����  �  �  �  �<�<�<�<� � � � �<�<�<�<�3�3�3�3�\�\�\�\�|%�%�%�%� =�=�=�=�7�7�7�7�8�8�8�8� �D� �� ����g�.����V�,��%�s�M�:��&��^�<��%�s�M�:����g�.���#�x�0���s�F�+����g�.� � � ����"��a�������������a�����������a����1�1�1�1���1� ��a�����������a����.2�W�W�W�W���W���a��� � � ��� � ��a�������������a�����������b�!���.2�W�W�W�W���W���b��� � � ��� � ����A�A�A�A�F���K�K�K�K�K�Z$�$�$�$�$�$rEr�r�r��write_c���eZdZUdZd�fd� Zed���Zed ���Zd ed < e dd���Z dd�Z dd�Z dd�Z d d�Zd!d�Zd"d�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 r�r �kwargsrsr�c�H��t��j|i|��d|_dS)NT)�superr�r*)r�r�r � __class__s �rCr�zImageFileDirectory_v1.__init__4s-��������$�)�&�)�)�)�����rEc��|jSr�)r4r�s rCrzImageFileDirectory_v1.<lambda>8s����rEc��|jSr�)r6r�s rCrzImageFileDirectory_v1.<lambda>9s��D�M�rEzdict[int, int]r'�originalr�c�p�||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` rx)rqr6r'r))�clsrr�s rC�from_v2zImageFileDirectory_v1.from_v2?s:���c���)�)�)���(�� ��&�� ��=���� rEc���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` rx)r�rqr9r6r'r5)r�r�s rC�to_v2zImageFileDirectory_v1.to_v2QsN��$�4�;�7�7�7���D�M�*�*�� ��4�<�(�(�� ��D�M�*�*�� �� rErFr�rtc�&�||jvp||jvSr�)r4r6rLs rCrMz"ImageFileDirectory_v1.__contains__brNrEr}c�n�tt|j��t|j��z��Sr�)rkrCr6r4r�s rCrDzImageFileDirectory_v1.__len__erErEr|c�n�tt|j��t|j��z��Sr�)r~rCr6r4r�s rCrzImageFileDirectory_v1.__iter__hr�rEr�c�>�dD]}|�|||���dS�N)FT)rP)r�rFr�rs rCrQz!ImageFileDirectory_v1.__setitem__ks4��'� 2� 2�J� �M�M�#�u�j� 1� 1� 1� 1� 2� 2rEc ��||jvrQ|j|}|j|}|j|\}}dD]$}|�|||||��|���%|j|}t |t tf��s|f}|Sr)r4r6r'r�rPr�r�rr)r�rFrrHr�rI�legacyrzs rCrJz!ImageFileDirectory_v1.__getitem__os��� �d�m� #� #��=��%�D��,�s�#�C� �/��4�M�D�'�'� H� H��� � �c�7�7�4��v�#>�#>��G�G�G�G��m�C� ���#��u�~�.�.� ��&�C�� rE)r�r r r rsr�)rr�rsr )rsr�r�r�rrr�)r�r�r�r�r�r��tags�tagdatar� classmethodrrrMrDrrQrJ� __classcell__�rs@rCr r !s����������$ � � � � � � �8�.�.� /� /�D��h�1�1�2�2�G�����!������[��"����"<�<�<�<�<�<�<�<�=�=�=�=�2�2�2�2� � � � � � � � rEr c���eZdZdZdZdZ dd�fd � Zdd �Zedd���Z dd�Z dd�Z dd�Z d d�Z d!�fd� Zdd�Zdd�Zd!d�Zdd�Z�xZS)"� TiffImageFile�TIFFz Adobe TIFFFNr��StrOrBytesPath | IO[bytes]�filename�str | bytes | Nonersr�c�X��| | t���||��dSr�)rr�)r�r�r)rs �rCr�zTiffImageFile.__init__�s7��� �*�5� �'�"� ������X�&�&�&�&�&rEc��|j�d��}|ddkr||j�d��z }t|��|_|jjx|_|_d|_|j|_g|_ d|_ t� d��t� d|j��t� dt|����|�d ��dS) z#Open the first image in a TIFF filer3r'rr�Nz*** 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 rC�_openzTiffImageFile._open�s����g�l�l�1�o�o�� �q�6�R�<�<� �4�7�<�<��?�?� "�C�+�C�0�0�� �&*�[�%5�5�� �t�{��� ��7���%'���%)���� � �2�3�3�3�� � �_�d�l�3�3�3�� � �[�$�s�)�)�,�,�,� � � �1� � � � � rEr}c�D�|j}|��|���}|�t|j����|j�1|�|���dz��|j�1|�|��|j�J�|jS)Nr)r3r�r4rkr2r�)r��current_n_frames�currents rC�n_frameszTiffImageFile.n_frames�s����>�� � #��i�i�k�k�G� �J�J�s�4�?�+�+� ,� ,� ,��.�(�� � �4�9�9�;�;��?�+�+�+��.�(� �I�I�g� � � ��~�)�)�)��~�rE�framec���|�|��sdS|�|��|j�3|jj|jks|jj|jkr d|_dSdSdS)z%Select a given frame as current imageN)� _seek_checkr4�_im�imr�� _tile_size�mode)r�r:s rCr�zTiffImageFile.seek�ss������&�&� � �F� � � �5���� �8� � �G�L�D�O� +� +�t�w�|�t�y�/H�/H��D�H�H�H� � �/H�/HrEc�(�|j|_t|j��|k�r�|jsd}t |���t �d||j|j|j� ����|jdkrd}t|���|j� |j��|j� |j��t �d|j� ����|j �|j��|j j|jvrd|_n|j j|_|jdkr |dz|_t|j��dkr|jdk|_|xjdz c_t|j��|k���|j� |j|��|j �|j��t$|j vr|j t$|jd<nd|jvr|jd=|���t*�|j ��x|_|_||_|���dS) Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %slzUnable to seek to framezLoading tags, location: %srr�xmp)r1r�rkr2r/�EOFErrorr�r�r0r�rpr�r�r-r�r)r3� is_animated�XMPrb� _reload_exifr rrFr��_setup)r�r:r+s rCr4zTiffImageFile._seek�s6���(����$�/�"�"�e�+�+��;� $�3���s�m�m�#� �L�L�K��� �� ��� � ���  � � ��{�e�#�#�/�� ��o�o�%� �G�L�L��� %� %� %� �O� "� "�4�;� /� /� /� �L�L�5�t�w�|�|�~�~� F� F� F� �K� � �T�W� %� %� %��{��4�?�2�2� �� � �"�k�.�� ��{�a���!&������4�?�#�#�q�(�(�#'�;�!�#3�� � �L�L�A� �L�L�9�$�/�"�"�e�+�+�: �� � �T�_�U�+�,�,�,� � �����!�!�!� �$�+� � �#�{�3�/�D�I�e� � � �d�i� � �� �%� � ������3�;�;�D�K�H�H�H���4�8��� � � � � � � � � rEc��|jS)zReturn the current frame number)r0r�s rCr�zTiffImageFile.tell�s ���|�rE�dict[int, dict[str, bytes]]c���i}|j�tjj��}|r�|dd�dkr�t |dd���}t j|ddzdz ��dz}t|d|zd|z���}|d|zd|z|z�}d|i||<|t jd|z|zdz ��dzd�}|dd�dk��|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) r-r�r�Base�ImageResources�i16�math�ceil�i32)r��blocksrz�id�nr�rs rC�get_photoshop_blocksz"TiffImageFile.get_photoshop_blocks�s������k�o�o�h�m�:�;�;�� � @��b�q�b�'�W�$�$���Q�q�S��]�]���I�s�1�v��z�Q�.�/�/�!�3���3�q�1�u�r�A�v�~�.�/�/���2��6�B��F�T�M�1�2��$�d�^��r� ��$�)�R�!�V�d�]�a�$7�8�8�1�<�>�>�?���b�q�b�'�W�$�$�� rE�Image.core.PixelAccess | Nonec���|jr|jr|���St�����Sr�)�tile�use_load_libtiff� _load_libtiffrr�)r�rs �rCr�zTiffImageFile.load s;��� �9� (��.� (��%�%�'�'� '��w�w�|�|�~�~�rEc���|j�Htj|j��tj�|j|j��|_tj� |��dSr�) r=r�_decompression_bomb_checkr?�core�newr@r>r� load_preparer�s rCr^zTiffImageFile.load_preparesU�� �8� � � +�D�O� <� <� <��j�n�n�T�Y���@�@�D�G���(�(��.�.�.�.�.rEc�*�|jsDd|_|���}tjD]}||vr�|�|���t j|d���tj j |j vr|j tj j =dSdS)NT)�in_place) rD�!_close_exclusive_fp_after_loading�getexifr�TAGS_V2_GROUPS�get_ifdr�exif_transposerrK� Orientationr-)r��exif�keys rC�load_endzTiffImageFile.load_ends����� "�59�D� 2��<�<�>�>�D��.� "� "���d�?�?��� � �S�!�!�!�!����t�4�4�4�4� �=� $�� � 3� 3�� �H�M�5�6�6�6� 4� 3rEc���tj�|��|���t|j��dksd}t |���|jdd}|jdd} t |jd��o|j���}t |jd��r|j� ��n#t $rd}YnwxYw|r:t|t��sJ�t|��}||d<t|��}tj |jd ||j��} |�|j|��n$#t$$r}d }t |��|�d }~wwxYw|jo|j }t |jd ��rJt*�d ��|�|j�����\} } n�|r�t*�d��|s|j�d��t5j|dt4j��} |�d��\} } t5j|| t4j��nct*�d��|j�d��|�|j�����\} } g|_d|_|� ��|r |j�!��d |_| dkrt | ���tj�|��S)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�r^rkrWr�r�r�rkrlr�r�r� _getdecoderr@� decoderconfig�setimager>rp� _exclusive_fprDr�r�r�rnr��os�lseek�SEEK_CUR�SEEK_SETr��readonlyri�close) r�r+�extentsr�r�� args_list�decoder�e� close_self_fprS�err�poss rCrYzTiffImageFile._load_libtiff&s�� � ������� �������4�9�~�~��"�"�(�C��#�,�,� ��)�A�,�q�/���y��|�A��� ����(�+�+�@�����0@�0@�B��t�w��(�(� ��� � ������� � � ��B�B�B� ���� � $��d�E�*�*� *� *�*��T� � �I��I�a�L���#�#�D��#�D�I�y�$��@R�S�S�� &� � � �T�W�g� .� .� .� .��� &� &� &�*�C��#�,�,�A� %����� &�����*�C�4�3C�/C� � �4�7�J� '� '�! 4� �L�L�P� Q� Q� Q��^�^�D�G�$4�$4�$6�$6�7�7�F�A�s�s� � 4� �L�L�N� O� O� O� � ��� � �Q�����(�2�q�"�+�.�.�C��^�^�G�,�,�F�A�s� �H�R��b�k� *� *� *� *� �L�L�F� G� G� G� �G�L�L��O�O�O��^�^�D�G�L�L�N�N�3�3�F�A�s��� ��� � � � ���� � � �G�M�M�O�O�O��D�G� ��7�7��#�,�,� ��{����%�%�%s+�AC!�! C0�/C0�E-�- F�7F � Fc ���d|jvrd}t|���t|j�td��|_|j�t d��|_|j�td��}|jdkrd}|j�td��}t� d��t� d|j��t� d |��t� d |j��t� d |��t� d |j�t���� |jt}|jt}n$#t$r}d }t!|��|�d}~wwxYwt#|t$��rt#|t$��sd}t'|���||f|_|j�t*jj��}|dvr ||f|_n ||f|_t� d|j��|j�t4d��}t7|��dkr,t9|��t;|��cxkrdkrnnd}|j�t<d��} |j�t>d��} |dvrd} n |dkrd} nd} | t7| ��z } t7| ��} |j�t@|jdkr|dvrdnd��} | tBkr,t�"d| ��d}tG|���| | kr | d| �} n| | kr | dkr| | z} t7| ��| krd}tG|���|jj$|||| | f}t� d|�� tJ|\|_&}n>#t$r1}t� d��d}tG|��|�d}~wwxYwt� d|��t� d |j'��|j|j(d!<|j�tRd��}|j�tTd��}|rt|rr|j�tV��}|d"kr ||f|j(d#<n@|dkr|d$z|d$zf|j(d#<n'|�||f|j(d#<||f|j(d%<n ||f|j(d%<dx}x}}g|_,tZp |jd&k|_.|j.r�|d"krH|dd�dz|dd�z}t� d|��tJ|\|_&}|dkr|jd'kr|jdkrd(}n@|d)krd*}n7|�/d+��s|�/d,��r |dd-�d.z}||jd/|jj0f}|j,�1tej3d0dd||fd|�����n�th|jvstj|jv�r�th|jvr5|jth}|j�tl|��}|}n�|jtj}|j�tn��}|j�tp��}t#|t$��rt#|t$��sd1}t'|���|}|D]�}||z|kr|ts| ��zd2z }nd}|}|jd"kr ||}|| z}|t%|��df}|j,�1tej3|j||t;||z|��t;||z|��f||����||z}||krd||z}}||kr dx}}|dz }��n+t� d3��d}tG|���tt|jvr|jtt|j(d4<|j'd5vrKd6�|jtvD��}tyj=d7d8�>|����|_?dSdS)9z-Setup this image object based on current tagsi�z+Windows Media Photo files not yet supportedrrr0r/z*** Summary ***z- compression: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %szMissing dimensionsNzInvalid dimensions)r-r/r1r3z - size: %srFr?)r'r/r3r)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&r2rWrJ�I;16Nz;16Bz;16Lr��NFrmzInvalid tile dimensionsr3z- unsupported data organization� icc_profile�rcrec�2�g|]}t|dz����S�r#r)r@r�s rCr^z(TiffImageFile._setup.<locals>.<listcomp>os"��C�C�C��r�!�s�(�|�|�C�C�CrE�RGB;LrE)@r-r��COMPRESSION_INFOr�� COMPRESSION� _compression�PLANAR_CONFIGURATION�_planar_configuration�PHOTOMETRIC_INTERPRETATION� FILLORDERr�r��YCBCRSUBSAMPLING� IMAGEWIDTH� IMAGELENGTHr�� TypeErrorr�r}rpr?rrKrf�_sizer�� SAMPLEFORMATrkr�r�� BITSPERSAMPLE� EXTRASAMPLES�SAMPLESPERPIXEL�MAX_SAMPLESPERPIXEL�errorr!rq� OPEN_INFO�_moder@rb� X_RESOLUTION� Y_RESOLUTION�RESOLUTION_UNITrW� READ_LIBTIFFrXr�r�r�r�_Tiler�� TILEOFFSETS� ROWSPERSTRIP� TILEWIDTH� TILELENGTH�sum� ICCPROFILE�COLORMAPrr&r �palette) r�r+�photo� fillorder�xsize�ysizer|� orientation� sample_format� bps_tuple� extra_tuple� bps_count�bps_actual_count�samples_per_pixelrh�rawmode�xres�yres�resunit�x�y�layerr��offsetsr��w� tilewidthr��stride� tile_rawmoder�r�s rCrGzTiffImageFile._setup�s �� �T�[� � �?�C��#�,�,� �-�T�[�_�_�[�!�-L�-L�M���%)�[�_�_�5I�1�%M�%M��"�� ��� :�A�>�>�� � � � +� +��E��K�O�O�I�q�1�1� �� � �&�'�'�'�� � �(�$�*;�<�<�<�� � �7��?�?�?�� � �1�4�3M�N�N�N�� � �'��3�3�3�� � �.�� ���@P�0Q�0Q�R�R�R� (��K� �+�E��K� �,�E�E��� (� (� (�&�C��C�.�.�a� '����� (�����%��%�%� "�Z��s�-C�-C� "�&�C��S�/�/� !���,����k�o�o�h�m�&?�@�@� � �,� &� &����D�J�J����D�J�� � �\�4�9�-�-�-�� ��� �d�;�;� � �}� � �� !� !�c�-�&8�&8�C� �<N�<N�&S�&S�&S�&S�RS�&S�&S�&S�&S�&S� !�M��K�O�O�M�4�8�8� ��k�o�o�l�B�7�7� � �I� � ��I�I� �a�Z�Z��I�I��I��S��%�%�%� ��y�>�>�� �K�O�O� ��"�k�1�1�e�v�o�o�A�A�1� � �� �2� 2� 2� �L�L�@�BS� � � �8�C��c�"�"� "� �/� /� /�"�"4�#4�"4�5�I�I� �!1� 1� 1�6F�!�6K�6K�"�$5�5�I� �y�>�>�.� .� .�-�C��c�"�"� "� �K� � � � � � �  �� � � �%�s�+�+�+� *�"+�C�.� �D�J����� *� *� *� �L�L�/� 0� 0� 0�&�C��c�"�"�� )����� *���� � � �%�w�/�/�/�� � �%�t�y�1�1�1�#'�#4�� �-� ��{���|�Q�/�/���{���|�Q�/�/�� � 5�D� 5��k�o�o�o�6�6�G��!�|�|�$(�$�<�� �%� � ��A���$(�4�K����#=�� �%� � ���$(�$�<�� �%� �+/��*�� �,�'�'�*.��*�� �,�'�����A���� � ,� J��0A�U�0J��� � �Z #��A�~�~��"�1�"�g��n�s�1�2�2�w�.��� � �-�s�3�3�3�'0��n�#�� �G��� � ��%��/�/��.�!�3�3���� �F�"�"�!����!�!�&�)�)� -�W�-=�-=�f�-E�-E� -�!�#�2�#�,��,���$�+�U�D�K�4F�G�A� �I� � �Y�_�Y��A�u�e�8L�a�QR�S�S� T� T� T� T� �T�[� (� (�K�4�;�,F�,F��t�{�*�*��+�l�3���K�O�O�L�%�8�8������+�k�2�� �K�O�O�I�6�6� ��K�O�O�J�/�/��!�)�S�1�1�*��A�s�9K�9K�*�3�C�$�S�/�/�)���!� #� #���q�5�5�=�=���Y���/�!�3�F�F��F�&� ��-��2�2�#*�5�>�L��i�'�F�$�c�&�k�k�1�5��� � � ��O��)��A�s�1�q�5�%�0�0�#�a�!�e�U�2C�2C�D��� �������E����:�:��a�!�e�q�A��E�z�z� !� ��A��� ���7 #�: �L�L�:� ;� ;� ;�-�C��c�"�"� "� ��� $� $�'+�{�:�'>�D�I�m� $� �9� � #� #�C�C�T�[��-B�C�C�C�G�'�+�G�S�X�X�g�5F�5F�G�G�D�L�L�L� $� #s0�$F+�+ G �5G�G �!P7�7 Q2�,Q-�-Q2r�)r�r(r)r*rsr�r�r�)r:r}rsr�)rsrI)rsrU)r�r�r��format�format_descriptionrar�r5r�r9r�r4r�rTr�r^rirYrGr#r$s@rCr&r&�s`������� �F�%��(-�%� (,� '� '� '� '� '� '� '�����0� � � ��X� � � � � �*�*�*�*�X��������*������ /�/�/�/� 7�7�7�7�"]&�]&�]&�]&�~kH�kH�kH�kH�kH�kH�kH�kHrEr&rGrHrVrcrerMrTrJrNrQrRrWrZrXrf�YCbCrrirUrLrOrS)rOrSr>� Image.Imager�r�r)� str | bytesc �� t|j\}}}}}}n-#t$r } d|j�d�} t| ��| �d} ~ wwxYw|j} |j} t |���} | �d��rd| _ | d}nA#t$r4|j �d��}t|t��rd}YnwxYw|�d}n|dkrd }n|d krd }tp|dk}d | t<|jd | t<|jd | t <d| vr | d}nNd| vrH| d}t|t"��r*t%j��}|�|��|}ni}t*�dt/|����t|t0��r|���}|D]�}t|t$j��r'|t4jvr|�|��| |<n|�|��| |< |j|| j|<�r#t<$rY�~wxYwi}t?|d��r|j ���}i|�tC|di���}tDtFfD] }||vr||=� t?|d��r�tHtJtLtNtPtRfD]n}||j*vrc|tNkr.|j*j|t4j+t4j,fvr||=�D|j*|| |<|j*j|| j|<�o| �d|j �d����}|r || tZ<t\dftJdftLdftJdftLdftHdft^dft`dftbdftddff D]\}}|| vr | || |<�| �d��}|r*d| tH<|d | tJ<|d | tL<|dkr4|| tf<ti|��d krti|��| tj<|� || tl<|d kr || tF<tn| vr || tn<n�|jd vr�| tnd kr�|jd!krr|�8��}|���}|�Gts|j:��D]0}ts|j;��D]}|||fd"krd nd"|||f<��1|}ntyj=|��}|jd#vrw|j>�?d$d%��}g}ti|��d&z}tsd&��D].} |d'�||| z|| d zz�D��z }|d gd(|z zz }�/|| t�<| t| t }"}!ti|��|!|d zd)zd*zz}#t�| vrl|rV| �d+t���}$|#d krd nt�|$|#z|"��}%|d krt�|%d)zd*zd*z|"��}%n|"}%|%d krd }%|%| t�<|#d krd n|#| t�z}&|"| t�zd z | t�z}'|&d,krt4jD| jt�<|&f|'d z z|#|"z|&|'d z zz fz| t�<t�tsd |&|'z|&����| t�<t��|d ��| t�<|jd-kr>t�d.t�d/i�L��D]\}}(| �M||(���t�t�t�t�g})|�r�d0| vr[| d0}*t|*t��r |*d ks|*d1krd2} t�| ���|d krd3} t�| ���|*| t�<t*�d4��t*�d5t�| �L������d }+t?|d6��r@ |�Ud ��|�V��}+n#t�jX$rYnwxYwi},|)t�t�t�t�t�t�gz })tf|d i}-t�j]| �L��|�L����D�]\}}.|t4j^vr�tCt$j_d7d8��s�0|t4jvrt4j`|,|<nc|| jvr| j||,|<nIt|.tt�t�t"f��s��t5jc|��jd}/|/r|/|,|<||-vrd||)vr`t|.t���r|.�ed9d:��d;z|-|<��t|.t���rt�|.��|-|<��|.|-|<��tF|-vr9ti|-tF��d kr|-tFd |-tF<t*�d<t�|-�L������|jd=vrd>}t/|-�L����}0|0�g��|||+||0|,f}1t%jh|jd?|1| ��}2|2�i|j>d@|jz�� |2�et�jk��d d�\}3}4|+s|�l|4��|3rn�E|3d krdA|3�dB�} t| ���nT|)D]}| |=�| �m|��}5t�jn||t�jodd@|jz|5||#d f��g��dC| vrt�|dC| ��dSdS)DNzcannot write mode z as TIFFrx�big_tiffTr�r&r0r2r8r4rr�tiffinforgzTiffinfo Keys: %srFr-r�� descriptionr�� x_resolution� y_resolution�resolution_unit�software� date_time�artist� copyrightr�r'rF)rGrHrGr"r�rWr�r)c��g|]}|dz��Sr�r?rTs rCr^z_save.<locals>.<listcomp>+s��M�M�M�Q��S��M�M�MrEr#r1r3� strip_sizer!r�)rr)rr"�r"r�r"�quality�dzInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz Items: %srkrpFr\r�r�zConverted items: %s)rLrJr�rmr[zencoder error z when writing image file�_debug_multipage)q� SAVE_INFOr@r�r�� encoderinfo� encoderconfigr�r�r&rbr�r}� WRITE_LIBTIFFr�r�r�r�rrr�Exifr�r�r�rr rrrcrdr'r2r�rFr��EXIFIFDr�r�r�r��IPTC_NAA_CHUNK�PHOTOSHOP_CHUNKrEr-rnrdr��IMAGEDESCRIPTION�SOFTWARE� DATE_TIME�ARTIST� COPYRIGHTr�rkr�r�r��copyr��height�widthr�invertr>� getpaletter�r�� STRIP_SIZEr�rj�STRIPBYTECOUNTSr�r��COMPRESSION_INFO_REVr�r��REFERENCEBLACKWHITEr@� setdefaultr�r�r��TILEBYTECOUNTSrp� JPEGQUALITYr�r�rk�io�UnsupportedOperation� OSUBFILETYPE�TRANSFERFUNCTION�SUBIFD� itertools�chain� LIBTIFF_COREr\r r�r�r>rcr]r��sort� _getencoderrqr�MAXBLOCKr�r��_saver��setattr)6r>r�r)r�rqr�r��bits�extrar|r+r�r�r�r�rmrbrgrh� legacy_ifd� supplied_tagsrF�iccrr�� inverted_im�pxr�r��lut�colormap�colorsr�r�r�r�� im_strip_size�rows_per_strip�strip_byte_counts�strips_per_image� default_value� blocklistr�r1�types�attsr�rcr r��encoder�errcoderr�s6 rCr�r��s� ��"�6?���6H�3������e�e�� �"�"�"�4�2�7�4�4�4���c�l�l��!�����"�����.�K��$�M� �v� .� .� .�C����z�"�"���� ��!�-�0� � �� �����g�k�k�-�0�0� � �k�3� '� '� ��K��� ���� ��� � � � � #� #�� � � �� &� &�*� ��3�{�e�3�G�!"�C����g�a�j�C� �O��w�q�z�C� ���[� � ��:�&��� �;� � ��6�"�� �d�E� "� "� ��:�<�<�D� �I�I�d�O�O�O��D���� �L�L�$�d�4�j�j�1�1�1��$�-�.�.���z�z�|�|������ �d�E�J� '� '� %�C�8�3J�,J�,J��|�|�C�(�(�C��H�H��x�x��}�}�C��H� �#�|�C�0�C�K�� � ��� � � � �D� �����J��r�5���$��V�\�\�^�^� �?�z�?�W�R��2�%>�%>�?�M� �� �#�#�� �-� � ��c�"���r�8���>� � � � � � �  � >� >�C��b�i����.�(�(�R�Y�->�s�-C��M��&�L�.�.�&�c�*�*�!�y��~�C��H�')�y�'8��'=�C�K��$�� �/�/�-�����]�)C�)C� D� D�C� ����J�� �=�)� �|�$� �|�$� �~�&� �~�&� �+�,� �:�� �K� � ��� �K� � � )� )� ��T� �;� � �"�4�(�C��H�� �/�/�%� � �C� �#� ��O����F��L����F��L�� �t�|�|�!��M�� �t�9�9��>�>�#&�t�9�9�C�� � ��!��L�� ��{�{�"��L��!��,�,�*/�� &�'�'� ��J� � �3�'A�#B�a�#G�#G� �7�c�>�>��'�'�)�)�K��!�!�#�#�B��~��{�1�2�2�A�A�A�"�;�#4�5�5�A�A��(*�1�a�4��C���1�1�S��1�a�4���A� ������$�$�B� �w�+����e���u�g�.�.�����S���Q����q��� -� -�A� �M�M�#�f�q�j�6�Q��U�;K�.K�*L�M�M�M� M�H� ���s�V�|�,� ,�H�H� ��H� � �z�?�C� �,�q�A� ��Y�Y�1�t�A�w�;��?�q�0� 1�F��3��� � �'�O�O�L�*�E�E�M�"(�A�+�+�Q�Q�3�}��7N�PQ�3R�3R�N��f�$�$�!$�~��'9�a�&?�1�%D�a�!H�!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�I���C� ��,�/�/� �Q�?�?�C� �� �w�'��� �f� �!=�# � �%�'�'� /� /� �C�� �N�N�3� � .� .� .� .��J� �^�D�I��n � � � #� #�!�)�,�G��g�s�+�+� &�w��{�{�g��m�m�/�� ��o�o�%��f�$�$�M�� ��o�o�%�&�C� � �� � �3�4�4�4�� � �[�&������"5�"5�6�6�6��� �2�x� � � � ����� � � ��i�i�k�k�����*� � � ��� ������ � � � � � � �  � � �!.�t�A�w�7��$�/�#�)�)�+�+�}�7J�7J�7L�7L�M�M� &� &�J�C�� �(�/�/�/��u�z�+H�%�P�P����(�1�1�1�!)��E�#�J�J��C�K�'�'�!$��S�!1�E�#�J�J�$�U�S�%��e�,D�E�E�*��#�?�3�/�/�4�D��*�%)��c� ��$���3�i�#7�#7��e�S�)�)�&� %� � �W�i� @� @�5� H�D��I�I���{�3�3�&� %�e� � �D��I�I� %�D��I�� �4� � �C��\�(:�$;�$;�q�$@�$@�!%�l�!3�A�!6�D�� �� � �*�F�4�:�:�<�<�,@�,@�A�A�A� �7�'� '� '��G� �D�J�J�L�L�!�!�� � � � � � � �k�3��$�� >���#�B�G�Y��=�I�I���������� 0�1�1�1� �#�N�N�9�+=�>�>�q�r�r�B�M�G�T�� ��������� ��  � �Q�;�;�D�7�D�D�D�C��#�,�,� � � � � �C��C������"������ � � �_�U�F�R�W�$4�f�w��PQ�>R� S� S� T� � � ��[�(�(���&��,�,�,�,�,�)�(sJ�� A�A�A�B � ;C � C �/I� I�I�*)b�b&�%b&c��eZdZgd�Zhd�Zd7d8d �Zd9d �Zd9d �Zd9d �Zd:d�Z d;d�Z d<d�Z e j fd=d�Zd9d�Zd>d�Zd9d�Zd?d�Zd@d �ZdAd!�Zd<d"�Zd<d#�ZedBd'���ZdCd)�ZdDd*�ZdCd+�ZdCd,�ZdCd-�ZdCd.�Zd9d/�Zd9d0�Z dEd2�Z! dFdGd5�Z"d6S)H�AppendingTiffWriter)rrrr'r+r3rrr'r+r3r+r3r+r'r+r3>��� � r$r%F�fnr(r]rtrsr�c��|t|��rN||_d|_ t||rdnd��|_nQ#t $rt|d��|_Yn0wxYwt tt|��|_d|_|j� ��|_ |� ��dS)NTzw+bzr+bF) rr�close_fp�openr�r�rr rrr�� beginning�setup)r�rr]s rCr�zAppendingTiffWriter.__init__�s��� �� �2�;�;� "��D�I� �D�M� )��b�3�"9�%�%�E�:�:������ )� )� )��b�%������� )�����"�U�)�R�(�(�D�F�!�D�M��������� � � � � � � � s�;�A�Ac��|j�|jtj��d|_d|_|j�d��x|_}|s d|_ dSd|_ |dkr|� d��n-|dkr|� d��nd }t|���|� ��|� ��dS) Nrr+TFrorrnrzInvalid TIFF file header)r�r�rrsrv�whereToWriteNewIFDOffset�offsetOfNewPager��IIMM�isFirst� setEndian� RuntimeError�skipIFDs�goToEnd)r��iimmr+s rCrzAppendingTiffWriter.setup�s��� �� � �D�N�B�K�0�0�0�48��%� ����6�;�;�q�>�>�)�� �D�� ��D�L� �F��� � �=� � � �N�N�3� � � � � �]� "� "� �N�N�3� � � � �,�C��s�#�#� #� � � ���� � � �����rEc���|jrdS|j�|j��|j�d��}|sdS||jkrd}t |���|���}||jz }|j�J�|j�|j��|� |��|j�|��|� ��dS)Nr+z1IIMM of new page doesn't match IIMM of first page) r#r�r�r!r�r"r%�readLongr � writeLong�fixIFD)r�r(r+� ifd_offsets rC�finalizezAppendingTiffWriter.finalizes��� �<� � �F� �� � �D�(�)�)�)��v�{�{�1�~�~��� � �F� �4�9� � �E�C��s�#�#� #��]�]�_�_� ��d�*�*� ��,�8�8�8� �� � �D�1�2�2�2� ���z�"�"�"� �� � �J���� � � � � � � � rEc�V�|���|���dSr�)r.rr�s rC�newFramezAppendingTiffWriter.newFrame's �� � � ���� � � � � � � � rEc��|Sr�r?r�s rC� __enter__zAppendingTiffWriter.__enter__,s��� rEr�r�c�@�|jr|���dSdSr�)rrx)r�r�s rC�__exit__zAppendingTiffWriter.__exit__/s'�� �=� � �J�J�L�L�L�L�L� � rEr}c�D�|j���|jz Sr�)r�r�r!r�s rCr�zAppendingTiffWriter.tell3s���v�{�{�}�}�t�3�3�3rEr��whencec��|tjkr ||jz }|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. )rsrvr!r�r�r�)r�r�r6s rCr�zAppendingTiffWriter.seek6sB�� �R�[� � � �d�*� *�F� �� � �F�F�#�#�#��y�y�{�{�rEc�<�|j�dtj��|j���}d|dzz }d|cxkrdkr*nn'|j�t |����|j���|_dS)NrrK)r�r�rs�SEEK_ENDr�r�rrr!)r�r� pad_bytess rCr'zAppendingTiffWriter.goToEndCs��� �� � �A�r�{�#�#�#��f�k�k�m�m����r��M� � �y� � � � �2� � � � � � �F�L�L��y�)�)� *� *� *�#�v�{�{�}�}����rE�endianr�c�n�||_|j�d�|_|j�d�|_|j�d�|_dS)NrHr��HHL)r;�longFmt�shortFmt� tagFormat)r�r;s rCr$zAppendingTiffWriter.setEndianMsC���� ��+�(�(�(�� ��;�)�)�)�� � �K�,�,�,����rEc�,� |���}|dkr#|j���dz |_dS|j�|��|���}|j�|dzt j����)NTrr+rI)r*r�r�r r�� readShortrsru)r�r-�num_tagss rCr&zAppendingTiffWriter.skipIFDsSs}�� 4������J��Q���04�� � � � ��0A��-��� �F�K�K� � #� #� #��~�~�'�'�H� �F�K�K��2� �r�{� 3� 3� 3� 4rErrc�6�|j�|��Sr�)r�r�r�s rCr�zAppendingTiffWriter.write^s���v�|�|�D�!�!�!rE� field_sizec�Z� dddd�|S#t$rd}t|���wxYw)Nr�rHr)r'r+r3zoffset is not supported)r�r%)r�rEr+s rC�_fmtzAppendingTiffWriter._fmtasJ�� $��s�s�+�+�J�7� 7��� $� $� $�+�C��s�#�#� #� $���s� �*c��tj|j|�|��z|j�|����\}|Sr�)rr�r;rGr�r�)r�rEr�s rC�_readzAppendingTiffWriter._readhsB���=� �K�$�)�)�J�/�/� /�����Z�1H�1H� � ���� rEc�,�|�d��S�Nr'�rIr�s rCrBzAppendingTiffWriter.readShortn����z�z�!�}�}�rEc�,�|�d��SrvrLr�s rCr*zAppendingTiffWriter.readLongqrMrE� bytes_writtenr�expectedc�H�|�||krd|�d|��}t|���dSdS)Nz wrote only z bytes but wanted )r%)rOrPr+s rC�_verify_bytes_writtenz)AppendingTiffWriter._verify_bytes_writtentsC�� � $��(�)B�)B�K� �K�K��K�K�C��s�#�#� #� %� $�)B�)BrEr�c���|j�dtj��|j�t j|j|����}|�|d��dS)N�����r+) r�r�rsrur�rr�r>rR�r�r�rOs rC�rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLongzsW�� �� � �B�� �$�$�$��� � �V�[���u�%E�%E�F�F� � �"�"�=�!�4�4�4�4�4rEc��|j�| tj��|j�t j|j|�|��z|����}|� ||��dSr�) r�r�rsrur�rr�r;rGrR)r�r�rErOs rC� _rewriteLastz AppendingTiffWriter._rewriteLastsq�� �� � �Z�K���-�-�-��� � � �K�� �d�i�i� �&;�&;�;�U� C� C� � � � �"�"�=�*�=�=�=�=�=rEc�.�|�|d��SrK�rXr�s rC�rewriteLastShortz$AppendingTiffWriter.rewriteLastShort����� � ���*�*�*rEc�.�|�|d��SrvrZr�s rC�rewriteLastLongz#AppendingTiffWriter.rewriteLastLong�r\rEc��|j�tj|j|����}|�|d��dSrK)r�r�rr�r?rRrUs rC� writeShortzAppendingTiffWriter.writeShort�s?���� � �V�[����%F�%F�G�G� � �"�"�=�!�4�4�4�4�4rEc��|j�tj|j|����}|�|d��dSrv)r�r�rr�r>rRrUs rCr+zAppendingTiffWriter.writeLong�s?���� � �V�[���u�%E�%E�F�F� � �"�"�=�!�4�4�4�4�4rEc�r�|���|jr|j���dSdSr�)r.rr�rxr�s rCrxzAppendingTiffWriter.close�s6�� � � ���� �=� � �F�L�L�N�N�N�N�N� � rEc���|���}t|��D�]O}tj|j|j�d����\}}}|j|}||z}|dk}|s1|���|j z} |� | ��||j vr�|j� ��} |r4|� ||��|j�| dz����|j�| ��|� ||��|j�| ����(|r%|j�dtj����QdS)Nr3r+)rBr�rr�r@r�r�� fieldSizesr*r!r^�Tagsr�� _fixOffsetsr�rsru) r�rCr�rF� field_typer�rE� total_size�is_localr��cur_poss rCr,zAppendingTiffWriter.fixIFD�s]���>�>�#�#���x��� ,� ,�A�%+�]�4�>�4�6�;�;�q�>�>�%R�%R� "�C��U����4�J�#�e�+�J�!�Q��H�� -������4�+?�?���$�$�V�,�,�,��d�i����&�+�+�-�-���)��$�$�U�J�7�7�7��F�K�K��!� �,�,�,�,��F�K�K��'�'�'��$�$�U�J�7�7�7��F�K�K��(�(�(�(�� ,��� � �A�r�{�+�+�+��/ ,� ,rEr�c���t|��D]�}|�|��}||jz }|dkr�|dkr�|dkrd}t|���|�|��|j�dtj��|� tj ��|j�dtj����|� ||����dS)Nr'r!rznot implementedi����r3) r�rIr!r%rVr�r�rsrur`rrjrX)r�r�rEr�r�r+s rCrfzAppendingTiffWriter._fixOffsets�s����u��� 6� 6�A��Z�Z� �+�+�F� �d�*� *�F��Q���6�U�?�?��A�:�:�+�C�&�s�+�+�+��+�+�F�3�3�3��� � �C���-�-�-����� �.�.�.��� � �A�r�{�+�+�+�+��!�!�&�*�5�5�5�5�! 6� 6rE�isShort�isLongc�F�|rd}n|rd}nd}|�||��S)Nr'r+r)rf)r�r�rlrmrEs rC� fixOffsetszAppendingTiffWriter.fixOffsets�s=�� � ��J�J� � ��J�J��J�����z�2�2�2rEN)F)rr(r]rtrsr�r�)rsr)r�r�rsr�r�)r�r}r6r}rsr})r;r�rsr�)rrrsr})rEr}rsr�)rEr}rsr})rOrrPr}rsr�)r�r}rsr�)r�r}rEr}rsr�)r�r}rEr}rsr�)FF)r�r}rlrtrmrtrsr�)#r�r�r�rdrer�rr.r0r2r4r�r�rvr�r'r$r&r�rGrIrBr*� staticmethodrRrVrXr[r^r`r+rxr,rfror?rErCrr�s{���������J�( � � �D� � � � � �����2����0���� ��������4�4�4�4�/1�k� � � � � �-�-�-�-�-�-�-�-� 4� 4� 4� 4�"�"�"�"�$�$�$�$����� ���������$�$�$��\�$� 5�5�5�5� >�>�>�>�+�+�+�+�+�+�+�+�5�5�5�5�5�5�5�5����� ,�,�,�,�86�6�6�6�(AF� 3� 3� 3� 3� 3� 3� 3rErc���|j���}|j}t|�dg����}t |d��s|st |||��S|���} t|��5}|g|zD]�}||_||_t |d��sd} n|j } t| ��D]P} |� | ��|� ��t |||��|� ���Q�� ddd��n #1swxYwY|� |��dS#|� |��wxYw)N� append_imagesr9r)r�r�r�rr�r�r�r�rr9r�r�r�r0) r>r�r)r�r�rr�cur_idx�tf�ims�nfrr�s rC� _save_allrw�s����.�%�%�'�'�K��$�M������"�=�=�>�>�M� �2�z� "� "�'�=�'��R��X�&�&�&��g�g�i�i�G�� �� $� $� "���t�m�+� "� "��"-���$1��!��s�J�/�/�'��C�C��,�C� ��:�:�"�"�C��H�H�S�M�M�M��H�H�J�J�J��#�r�8�,�,�,��K�K�M�M�M�M� "� "� "� "� "� "� "� "� "� "� "� "� "���� "� "� "� "� ��������������������s1�<E � BD*� E �*D.�.E �1D.�2E � E#z.tifz.tiffz image/tiff)rqrrrsrt)rzr{r|r}rsr~)rzr�r|r}r�r}rsr~)r�r�rsr )r�r}r�r}rsr�)r�r}rsr�)r�r�rsr�)r>r�r�r�r)r�rsr�)�� __future__rr�r��loggingrNrsrrq�collections.abcrr� fractionsr�numbersrr�typingr r r r r r�rrrrrr�_binaryrrMrrPr� _deprecater�_typingr�_utilrrrr � getLoggerr�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�� PREDICTORr�r�r�r�r�r�r�r�� JPEGTABLESr�r�r�r�r�r�r�rEr��IMAGEJ_META_DATA_BYTE_COUNTS�IMAGEJ_META_DATAr�r@r�r�r�r�rwr�r\ryr�r�r�r�r�r�rrrtr�r�r�rr}� _IFDv2Baser�r�rr�r�r �ImageFileDirectoryr&r�r��BytesIOrrw� register_openr�� register_save�register_save_all�register_extensions� register_mimer?rErC�<module>r�sd��R#�"�"�"�"�"� � � � ��������� � � � � � � � � � � � �����4�4�4�4�4�4�4�4�������$�$�$�$�$�$�$�$�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�C�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�J�!�!�!�!�!�!�!�!�!�!�!�!�������!�!�!�!�!�!�#�#�#�#�#�#��������������.�-�-�-�-�-�-�-�-� �� �8� $� $��� �� � � � �� ��� � � �� �� �� � �� � ���� ���� ���� �� ������� �� � � �� � � �� � � � �� ��� ��� �� � � ����� � ����� � � �� ��� � %������u���|���x� � �x� � �z� ��{���v����� �=�� �:�� � �� �>�� �=�� �?��  �6�!�" �6�#�$ �6�%��*C�B�)9�)?�)?�)A�)A�B�B�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| �| � �|�c�A�A�y�A�A�A�A�A�� � � ���w�u�z�8�$�?�?�@� �I�:�B�?�?�?�"�"�"�"�%�%�%�%� � � � �&��������G'�G'�G'�G'�G'�(�G'�G'�G'�T�/���=�s�B�C� � � � � ���������$� ���S��)�J�J��J�M$�M$�M$�M$�M$�J�M$�M$�M$�`(6��$�(7��%������J�J�I�C�� �<�<��S� !� !�D� �G� !�>�4�>�>�>�#�3F�q�3I�J�J�J� �G� !�?�D�?�?�O�C�4H�I�I�I�I��O�S�$�X�X�X�X�X�1�X�X�X�x+��lH�lH�lH�lH�lH�I�'�lH�lH�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-�s-�s-�s-�l H3�H3�H3�H3�H3�"�*�H3�H3�H3�V����>���M�(�-��A�A�A����M�(�%�0�0�0���� �,�i�8�8�8����-�.���0A�B�B�B����M�(�,�7�7�7�7�7rE
Memory