
    h;L                   R   S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
Jr  S SKJr  S SKJrJr  S SKJrJrJrJrJr  SSKJrJrJrJrJrJr  SS	KJr   SS
KJ!r"  SSKJ#r#  SSK$J%r%  SSK&J'r'  SSK(J)r)J*r*  SSKJ+r+  Sr,\,(       a  SSK&J-r-J.r.  \R^                  " \05      r1Sr2Sr3Sr4Sr5Sr6Sr7Sr8Sr9Sr:Sr;Sr<Sr=Sr>Sr?Sr@SrAS rBS!rCS"rDS#rES$rFS%rGS&rHS'rIS(rJS)rKS*rLS+rMS,rNS-rOS.rPS/rQS0rRS1rSS2rTS3rUS4rVS5rWS6rXS7rYS8rZS9r[S:r\S;r]S<r^S=r_0 SS>_S?S@_SASB_SCSD_SESF_SGSH_SISJ_SKSL_SMSN_SOSP_SQSR_SSST_SUSV_SWSX_SYSZ_S[S\_S]S^_r`\`R                  5        V Vs0 s H  u  pX_M	     snn rb0 \5S S_SS_S`4Sa_\6S S_SS_S`4Sa_\5S S_S?S_S`4Sb_\6S S_S?S_S`4Sb_\5SS_SS_S`4Sc_\6SS_SS_S`4Sc_\5SS_S?S_S`4Sd_\6SS_S?S_S`4Sd_\5S S_SSeS`4Sf_\6S S_SSeS`4Sf_\5S S_S?SeS`4Sg_\6S S_S?SeS`4Sg_\5SS_SSeS`4Sh_\6SS_SSeS`4Sh_\5SS_S?SeS`4Si_\6SS_S?SeS`4Si_\5S S_SSjS`4Sk_0 \6S S_SSjS`4Sk_\5S S_S?SjS`4Sl_\6S S_S?SjS`4Sl_\5SS_SSjS`4Sm_\6SS_SSjS`4Sm_\5SS_S?SjS`4Sn_\6SS_S?SjS`4Sn_\5S S_SSoS`4Sp_\6S S_SSoS`4Sp_\5S S_S?SoS`4Sq_\6S S_S?SoS`4Sq_\5SS_SSoS`4Sr_\6SS_SSoS`4Sr_\5SSeSSoS`4Sr_\6SSeSSoS`4Sr_\5SS_S?SoS`4Ss_\6SS_S?SoS`4Ss_E0 \5SS_SStS`4Su_\5S S_SSvS`4Sw_\5SS_SSvS`4Sw_\6SS_SSvS`4Sx_\5SS_S?SvS`4Sy_\5SSeSSvS`4Sz_\6SSeSSvS`4S{_\5S S|SS}S`4S~_\6S S|SS}S`4S_\5SS_SS}S`4S_\5SSeSS}S`4S_\6SSeSS}S`4S_\5SS|SS}S`4S~_\6SS|SS}S`4S_\5SS_SSSe4S_\6SS_SSSe4S_\5S?S_SSS`4S_E0 \6S?S_SSS`4S_\5S?S_S?SS`4S_\6S?S_S?SS`4S_\5S?S_SSS`4S_\6S?S_SSS`4S_\5S?S_SSS4S_\6S?S_SSS4S_\5S?S_SSS4S_\6S?S_SSS4S_\5S?S_SSS4S_\6S?S_SSS4S_\5S?S_SSS_4S_\6S?S_SSS_4S_\5S?S_SSS4S_\6S?S_SSS4S_\5S?S_SSS4S_\6S?S_SSS4S_E0 \5S?S_SSSe4S_\6S?S_SSSe4S_\5S?S_SSS4S_\6S?S_SSS4S_\5S?S_SSS4S_\6S?S_SSS4S_\5S?S_SSS4S_\6S?S_SSS4S_\5S?S_SSS`4S_\6S?S_SSS`4S_\5S?S_SSS`4S_\6S?S_SSS`4S_\5S?S_SSS4S_\6S?S_SSS4S_\5S?S_SSS_4S_\6S?S_SSS_4S_\5S?S_SSSe4S_E0 \6S?S_SSSe4S_\5SAS_SS_S`4S_\6SAS_SS_S`4S_\5SAS_S?S_S`4S_\6SAS_S?S_S`4S_\5SAS_SSeS`4S_\6SAS_SSeS`4S_\5SAS_S?SeS`4S_\6SAS_S?SeS`4S_\5SAS_SSjS`4S_\6SAS_SSjS`4S_\5SAS_S?SjS`4S_\6SAS_S?SjS`4S_\5SAS_SSoS`4S_\6SAS_SSoS`4S_\5SAS_SSS4S_\5SAS_SSSe4S_E0 \6SAS_SSSe4S_\5SAS_S?SoS`4S_\6SAS_S?SoS`4S_\5SES_SSS`4S_\6SES_SSS`4S_\5SES_SSS4S_\6SES_SSS4S_\5SES_SSS4S_\6SES_SSS4S_\5SES_SSS`4S_\6SES_SSS`4S_\5SGS_SSoS`4Sr_\6SGS_SSoS`4Sr_\5SGS_SSS`4S_\6SGS_SSS`4S_\5SKS_SSS`4S_\6SKS_SSS`4S_Erc\d" S \c 5       5      re/ SQrf\g" \R                  SS5      (       d	  \%" SS5        SS jri      SS jrj        SS jrk0 rl0 rmSS jrn " S S\5      ro\S\p\q/\4   rrSS jrsSS jrtSS jru\,(       a  \\v\4   rwO\rw " S S\w5      rx\l\xll        \m\xlm        \+R                  " 5        H;  u  ryrz\zR                  SS5      rz\|" \xS\z 3\l\y   S   5        \|" \xS\z 3\m\y   5        M=     ClCmCyCz " S S\x5      r}\}r~ " S S\R4                  5      r0 SS\5SSS_S4_SS\5SSSoS4_SS\5SSSS?4_SS\5SASSoS4_SS\5SASSS?4_SS\5SS?S}S4_SS\5SSSvS4_SS\5SS?SvS4_SS\5SSAS}S4_SS\5S?SSS4_SS\5S?SSS 4_SS\5S?SSS?4_SS\5SESSS4_SS\5SGSSS4_SS\5SKSSS4_SS\6SS?S}S4_SS\6SSSvS4_S\6SS?SvS4S\6SSAS}S4S.ErSS jr " S S\GR                  5      rSS jr\GR
                  " \GR                  \\i5        \GR                  " \GR                  \5        \GR                  " \GR                  \5        \GR                  " \GR                  SS/5        \GR                  " \GR                  S5        gs  snn f )    )annotationsN)IteratorMutableMapping)Fraction)NumberRational)IOAnyCallableNoReturncast   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32be)o8)	deprecate)StrOrBytesPath)DeferredErroris_pathTYPESF)BufferIntegralLike   s   IIs   MM      i  i  i  i  i
  i    i  i  i  i  i  i  i(  i-  i1  i2  i;  i=  i@  iB  iC  D  iE  iJ  iR  iS  i[  i  i  i  i  iI  is  ii  i  i  i  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    )1z1;I)r?   z1;IR)r?   r?   )r?   z1;R)r&   )LzL;2I)r@   zL;2IR)r@   zL;2)r@   zL;2R)r*   )r@   zL;4I)r@   zL;4IR)r@   zL;4)r@   zL;4R)r2   )r@   zL;I)r@   zL;IR)r@   r@   )r@   zL;R)   )I;16zI;12)   )rB   rB   )I;16BrD   )rB   zI;16R)II;16S)rE   I;16BS)r(   )    )FF;32F)rI   F;32BF)rE   zI;32N)rE   I;32S)rE   I;32BS)r2   r2   )LArN   )r2   r2   r2   )RGBrO   )rO   zRGB;R)r2   r2   r2   r2   )RGBArP   r   )rO   RGBX)r2   r2   r2   r2   r2   r   r   )rO   RGBXX)r2   r2   r2   r2   r2   r2   )r   r   r   )rO   RGBXXX)rP   RGBa)r   r   )rP   RGBaX)r   r   r   )rP   RGBaXX)r&   r   )rP   RGBAX)r&   r   r   )rP   RGBAXX)i  )rC   rC   rC   )rO   zRGB;16L)rO   zRGB;16B)rC   rC   rC   rC   )rP   zRGBA;16L)rP   zRGBA;16B)rO   zRGBX;16L)rO   zRGBX;16B)rP   zRGBa;16L)rP   zRGBa;16B)PzP;1)r[   zP;1R)r[   zP;2)r[   zP;2R)r[   zP;4)r[   zP;4R)r[   r[   )r[   PX)PAr]   )r[   zP;R)CMYKr^   )r^   CMYKX)r^   CMYKXX)r^   zCMYK;16L)r^   zCMYK;16B)LABra   c              #  >   #    U  H  n[        US    5      v   M     g7f)r*   N)len).0key_tps     E/var/www/html/env/lib/python3.13/site-packages/PIL/TiffImagePlugin.py	<genexpr>rg     s     AyV#fQi..ys   )s   MM *s   II* s   MM* s   II *s   MM +s   II+ libtiff_support_custom_tagsTz*Support for LibTIFF earlier than version 4rA   c                >    U R                  [        [        5      5      $ N)
startswithtuplePREFIXESprefixs    rf   _acceptrp   #  s    U8_--    c                    [        U 5      S:  n[        U(       a  SU -  OU 5      R                  U5      nU(       a  US S S2   $ U$ )Nr   )absIFDRationallimit_rational)valmax_valinvn_ds       rf   _limit_rationalr{   '  sC     c(Q,C
a#g#
.
=
=g
FC3tt9$$rq   ru   c                   [        U 5      nUR                  UR                  4n[        S U 5       5      U:  a  [	        U [        U5      5      n[        S U 5       5      n[        U5      U:  a  [	        US   US   -  U5      nU$ )Nc              3  8   #    U  H  n[        U5      v   M     g 7frj   floatrd   is     rf   rg   )_limit_signed_rational.<locals>.<genexpr>5  s     
!S588S   c              3  8   #    U  H  n[        U5      v   M     g 7frj   r~   r   s     rf   rg   r   8  s     ,1eAhhr   r   r   )r   	numeratordenominatorminr{   rt   rl   max)rw   rx   min_valfracrz   	n_d_floats         rf   _limit_signed_rationalr   /  s~     C=D-1^^T=M=M-MC

!S
!!G+c3w<0,,,I
9~ilYq\97CJrq   c                $   ^        SU 4S jjnU$ )Nc                6   > [        U R                  T5      " U6 $ rj   )getattr_val)selfargsops     rf   delegate_delegate.<locals>.delegateG  s     tyy"%t,,rq   )r   ru   r   ztuple[float, ...]returnzbool | float | Fractionr>   )r   r   s   ` rf   	_delegater   F  s'    --"3-	 -
 Orq   c                  p   \ rS rSrSr Sr S*     S+S jjr\S,S j5       r\S-S j5       r	S.S jr
S/S jrS-S	 jrS0S
 jrS1S jrS2S jr \" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r\" S5      r \" S5      r!\" S5      r"\" S5      r#\" S 5      r$\" S!5      r%\" S"5      r&\" S#5      r'\" S$5      r(\" S%5      r)\" S&5      r*\+" \,S'5      (       a  \" S'5      r-S(r.g)S(r.g))3ru   iO  zImplements 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                8   U   [        U[        5      (       a4  UR                  U l        UR                  U l        UR                  U l        g[        U[        5      (       a#  UR                  U l        UR                  U l        O-[        (       a  [        [        U5      U l        OXl        X l        US:X  a  [        S5      U l        gUS:X  a  [        U5      U l        g[        U5      U:X  a  [        [        U5      U5      U l        g[        X-  5      U l        g)z
:param value: either an integer numerator, a
float/rational/other number, or an IFDRational
:param denominator: Optional integer denominator
Nr   nanr   )
isinstanceru   r   r   r   r   r   r   TYPE_CHECKINGr   r   r   int)r   valuer   s      rf   __init__IFDRational.__init__]  s     	e[))#ooDO % 1 1D

DIeX&&#ooDO % 1 1D}"&|U";"' +!eDIA DIZ5  U[9DI !45DIrq   c                    U R                   $ rj   )r   r   s    rf   r   IFDRational.numerator  s    rq   c                    U R                   $ rj   )r   r   s    rf   r   IFDRational.denominator  s       rq   c                    U R                   S:X  a  U R                  U R                   4$ [        U R                  [        5      (       d   eU R                  R                  U5      nUR                  UR                   4$ )zm

: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      rf   rv   IFDRational.limit_rational  se     q >>4#3#333$))X....II''8{{AMM))rq   c                >    [        [        U R                  5      5      $ rj   )strr   r   r   s    rf   __repr__IFDRational.__repr__  s    5#$$rq   c                6    U R                   R                  5       $ rj   )r   __hash__r   s    rf   r   IFDRational.__hash__  s    yy!!##rq   c                    U R                   n[        U[        5      (       a  UR                   n[        U[        5      (       a  [        U5      nX!:H  $ rj   )r   r   ru   r   )r   otherrw   s      rf   __eq__IFDRational.__eq__  s?    iie[))JJEeU##*C|rq   c                H    U R                   U R                  U R                  /$ rj   )r   r   r   r   s    rf   __getstate__IFDRational.__getstate__  s    		4??D,=,=>>rq   c                   [         R                  U S5        Uu  p#n[        U[        [        45      (       d   eX l        [        (       a  [        [        U5      U l	        OX0l	        [        U[        5      (       d   eX@l        g Nr   )ru   r   r   r   r   r   r   r   r   r   r   r   )r   stater   r   r   s        rf   __setstate__IFDRational.__setstate__  sj    T1%).&,$ 12222	="<<DO(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__)r   r   r   Nr=   )r   float | Fraction | IFDRationalr   r   r   None)r   r   r   r   )r   r   r   ztuple[IntegralLike, int]r   r   )r   objectr   bool)r   %list[float | Fraction | IntegralLike])r   r   r   r   )/__name__
__module____qualname____firstlineno____doc__	__slots__r   propertyr   r   rv   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   hasattrr   r   __static_attributes__r>   rq   rf   ru   ru   O  s   
 7I IJ 63 6BE 6	 6D   ! !*%$?
) 	"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                   ^ ^ SU U4S jjnU$ )Nc                   > SSK Jn  U R                  R                  S5      (       a"  U R                  SS  R	                  SS5      UT'   TU 4[
        T'   U $ )Nr   r   load_r,   _ )r   r   r   rk   replace_load_dispatch)funcr   idxsizes     rf   	decorator#_register_loader.<locals>.decorator  sO    #==##G,,qr*223<E#J"Djsrq   )r   _LoaderFuncr   r   r>   )r   r   r   s   `` rf   _register_loaderr     s      rq   c                   ^  SU 4S jjnU$ )Nc                   > U [         T'   U $ rj   )_write_dispatch)r   r   s    rf   r   #_register_writer.<locals>.decorator  s    #rq   )r   Callable[..., Any]r   r   r>   )r   r   s   ` rf   _register_writerr     s     rq   c                   ^^ SSK Jn  U u  nmnX1U'   [        R                  " ST 35      m S       SUU4S jjjnTU4[        U'   U4S j[
        U'   g )Nr   r   =c                H   > U R                  [        U5      T-   T 3U5      $ rj   )_unpackrc   )r   data
legacy_apifmtr   s      rf   basic_handler&_register_basic.<locals>.basic_handler  s)     ||s4yD01#7>>rq   c                >   >^  SR                  UU 4S jU 5       5      $ )Nrq   c              3  H   >#    U  H  nTR                  TU5      v   M     g 7frj   )_pack)rd   r   r  r   s     rf   rg   4_register_basic.<locals>.<lambda>.<locals>.<genexpr>  s     <VEC''Vs   "join)r   valuesr  s   ` rf   <lambda>!_register_basic.<locals>.<lambda>  s    <V<<rq   T)r   r   r  bytesr  r   r   tuple[Any, ...])r   r   structcalcsizer   r   )idx_fmt_namer   r   namer  r  r   s        @@rf   _register_basicr    sz    !NCd#J??Qse9%D FJ?#?+0?>B?	? ?
 -N3OCrq   c                     \ rS rSr% Sr0 rS\S'   0 rS\S'      S?       S@S jjr\	" S	 5      r
\	" S
 5      r\	SAS j5       r\R                  SBS j5       rSCS jrSDS jrSES jrSFS jrSGS jrSHS jrSIS jrSJS jrSKS jrSLS jrSMS jrSNS jr\" \" \\R<                  SS4\R>                  SS4\R@                  SS4\RB                  SS 4\RD                  S!S"4\RF                  S#S$4\RH                  S%S&4\RJ                  SS4\RL                  S'S(4/	5      5        \'" S)S)5      SOSPS* jj5       r(\)" S)5      SQS+ j5       r*\'" S,S)5      SOSRS- jj5       r+\)" S,5      SSS. j5       r,\'" S/S05       SO     STS1 jj5       r-\)" S/5      SUS2 j5       r.\'" S3S)5      SOSPS4 jj5       r/\)" S35      SVS5 j5       r0\'" S6S05       SO     STS7 jj5       r1\)" S65      SUS8 j5       r2SWS9 jr3SXS: jr4SYS; jr5SZS[S< jjr6S\S= jr7S>r8g)]r     a  This 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   zdict[int, Callable[..., Any]]r   Nc                   [        U5      (       d  S[        U5       S3n[        U5      eUb  UOUSS U l        U R                  [        :X  a  SU l        O)U R                  [        :X  a  SU l        OSn[        U5      eUS   S:H  U l        X0l        0 U l	         U R                  5         U R                  (       a  U R                  S	US
S 5      S   OU R                  SUSS 5      S   U l        SU l        g)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.
znot a TIFF file (header z not valid)Nr&   ><znot a TIFF IFD+   Qr2   r   r@   r*   F)rp   reprSyntaxError_prefixMM_endianII_bigtiffgrouptagtyperesetr  next_legacy_api)r   ifhro   r(  msgs        rf   r   ImageFileDirectory_v2.__init__H  s      s||,T#YK{CCc""!'!3vRa<<2DL\\RDL"Cc""A"
')'

 }} LLc!"g&q)c3qr7+A. 		
 !rq   c                    U R                   $ rj   )r#  r   s    rf   r  ImageFileDirectory_v2.<lambda>o      4<<rq   c                    U R                   $ rj   )_offsetr   s    rf   r  r1  p  r2  rq   c                    U R                   $ rj   r,  r   s    rf   r   ImageFileDirectory_v2.legacy_apir  s    rq   c                    Sn[        U5      e)Nz"Not allowing setting of legacy api)	Exception)r   r   r.  s      rf   r  r7  v  s    2nrq   c                X    0 U l         0 U l        0 U l        0 U l        S U l        S U l        g rj   )_tags_v1_tags_v2_tagdatar)  _nextr4  r   s    rf   r*  ImageFileDirectory_v2.reset{  s,    (*(**,
#'rq   c                *    [        [        U 5      5      $ rj   )r   dictr   s    rf   __str__ImageFileDirectory_v2.__str__  s    4:rq   c                    U R                  5        VVs0 s H0  u  p[        R                  " XR                  5      R                  U_M2     snn$ s  snnf )zi
:returns: dict of name|key: value

Returns the complete tag dictionary, with named tags where possible.
)itemsr   lookupr(  r  )r   coder   s      rf   namedImageFileDirectory_v2.named  sI      $zz|
+ OOD**-22E9+
 	
 
s   7Ac                j    [        [        U R                  5      [        U R                  5      -  5      $ rj   )rc   setr=  r<  r   s    rf   __len__ImageFileDirectory_v2.__len__  $    3t}}%DMM(::;;rq   c                (   XR                   ;  aD  U R                  U   nU R                  U   nU R                  U   u  pEU" XU R                  5      X'   U R                   U   nU R                  (       a  [        U[        [        45      (       d  U4nU$ rj   )r<  r=  r)  r   r  r   rl   r  )r   tagr  typr   handlerrw   s          rf   __getitem__!ImageFileDirectory_v2.__getitem__  s}    mm#==%D,,s#C //4MDDOO<DImmC ??:cE5>#B#B&C
rq   c                H    XR                   ;   =(       d    XR                  ;   $ rj   )r<  r=  r   rP  s     rf   __contains__"ImageFileDirectory_v2.__contains__      mm#;smm';;rq   c                <    U R                  XU R                  5        g rj   )_setitemr  )r   rP  r   s      rf   __setitem__!ImageFileDirectory_v2.__setitem__  s    c$//2rq   c           	     	  ^ [         [        [        4n[        R                  " XR
                  5      m[        X$5      (       a  U/OUnXR                  ;  Gaq  TR                  (       a  TR                  U R                  U'   GOE[        R                  U R                  U'   [        S U 5       5      (       ae  U H@  n[        U[        5      (       d   eUS:  d  M"  [        R                  U R                  U'     GO   [        R                  U R                  U'   GO[        S U 5       5      (       a  SnSnSn	U H]  n[        U[        5      (       d   eU(       a  SUs=::  a  S:  d  O  SnU(       a  SUs=:  a  S:  d  O  SnU	(       d  MS  US:  d  M[  Sn	M_     U(       a  [        R                  U R                  U'   GOU(       a  [        R                   U R                  U'   OU	(       a  [        R"                  U R                  U'   O[        R$                  U R                  U'   O[        S	 U 5       5      (       a  [        R&                  U R                  U'   Oi[        S
 U 5       5      (       a  [        R(                  U R                  U'   O4[        S U 5       5      (       a  [        R*                  U R                  U'   U R                  U   [        R                  :X  a:  U Vs/ s H,  n[        U[        5      (       a  UR-                  SS5      OUPM.     nnOSU R                  U   [        R                  :X  a2  U Vs/ s H%  n[        U[        5      (       a  [/        U5      OUPM'     nnU R                  U   [        R"                  :H  =(       a    [        U[0        5      n
U
(       d  [3        U4S jU 5       5      nU(       a  U R4                  OU R6                  nU
(       d  TR8                  S:X  dD  U R                  U   [        R*                  :X  d#  TR8                  cY  [;        U5      S:X  aJ  U(       dC  U(       a4  U R                  U   [        R                  [        R                  4;   a  U4n Uu  X'   g X[U'   g s  snf s  snf ! [<         a0    [>        R@                  " SU S[;        U5       S35        US   X'    g f = f)Nc              3  B   #    U  H  n[        U[        5      v   M     g 7frj   )r   ru   rd   vs     rf   rg   1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     B6az![116   r   c              3  B   #    U  H  n[        U[        5      v   M     g 7frj   )r   r   r`  s     rf   rg   rb         <VAs++Vrc  Tr    Fi i   c              3  B   #    U  H  n[        U[        5      v   M     g 7frj   )r   r   r`  s     rf   rg   rb         >v!Au--vrc  c              3  B   #    U  H  n[        U[        5      v   M     g 7frj   )r   r   r`  s     rf   rg   rb    re  rc  c              3  B   #    U  H  n[        U[        5      v   M     g 7frj   )r   r  r`  s     rf   rg   rb    rg  rc  asciir   c              3  t   >#    U  H-  n[        U[        5      (       a  TR                  U5      OUv   M/     g 7frj   )r   r   cvt_enum)rd   r   infos     rf   rg   rb    s2      #E )35#(>(>e$EI#s   58r   zMetadata Warning, tag z had too many entries: z, expected 1)!r   r  r   r   rF  r(  r   r)  type	UNDEFINEDallru   SIGNED_RATIONALRATIONALr   SHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEencoder   rA  rl   r;  r<  lengthrc   
ValueErrorwarningswarn)r   rP  r   r  	basetypesr  ra  shortsigned_shortlongis_ifddestrm  s               @rf   r[  ImageFileDirectory_v2._setitem  s   UC(	sJJ/&u88%ell"yy$(IIS!$,$6$6S!B6BBB#)![9999q5080H0HDLL-!	 $ -5,=,=S)<V<<< E#'LD#)!S1111 !q.5.$)E'A1E1E+0L4AE#(D $ ,4NNS)%,4,A,AS),4MMS),4,@,@S)>v>>>(0DLL%<V<<<(0DLL%>v>>>(0DLL%<< 2 22  A 1;1c0B0B),I  F \\#("3"33EKLV*Q"4"4eAh!;VFLc"hmm3P
648P # F
 !+t}} [[A||C HMM1#Fq(8 dll3/!!((4  !&% I[
 M:  &,SE1H6{m<1 #1I	&s   .3R	,R R 7SSc                    U R                   R                  US 5        U R                  R                  US 5        U R                  R                  US 5        g rj   )r<  popr;  r=  rV  s     rf   __delitem__!ImageFileDirectory_v2.__delitem__  s>    #t$#t$#t$rq   c                j    [        [        U R                  5      [        U R                  5      -  5      $ rj   )iterrK  r=  r<  r   s    rf   __iter__ImageFileDirectory_v2.__iter__  $    C&T]]);;<<rq   c                J    [         R                  " U R                  U-   U5      $ rj   )r  unpackr%  )r   r  r  s      rf   r  ImageFileDirectory_v2._unpack  s    }}T\\C/66rq   c                J    [         R                  " U R                  U-   /UQ76 $ rj   )r  packr%  )r   r  r  s      rf   r  ImageFileDirectory_v2._pack  s    {{4<<#-777rq   Hr  r@   r  bzsigned bytehzsigned shortlzsigned longr   r   ddoubler   long8r   c                    U$ rj   r>   r   r  r  s      rf   	load_byteImageFileDirectory_v2.load_byte"      rq   c                    [        U[        5      (       a  [        U5      n[        U[        5      (       a  [        U45      nU$ rj   )r   ru   r   r  r   r  s     rf   
write_byte ImageFileDirectory_v2.write_byte&  s5    dK((t9DdC  $>Drq   r&   c                \    UR                  S5      (       a  US S nUR                  SS5      $ )N    rs   zlatin-1r   )endswithdecoder  s      rf   load_string!ImageFileDirectory_v2.load_string.  s-    ==9D{{9i00rq   c                    [        U[        5      (       a  [        U5      n[        U[        5      (       d  UR	                  SS5      nUS-   $ )Nrj  r   r  )r   r   r   r  rz  r   r   s     rf   write_string"ImageFileDirectory_v2.write_string4  sA     eS!!JE%''LL)4Eu}rq   r,   r2   c           
        ^^ U R                  [        U5      S-   S3U5      nSU4S jjm[        U4S j[        US S S2   USS S2   5       5       5      $ )Nr*   r@   c                .   > T(       a  X4$ [        X5      $ rj   ru   ar  r  s     rf   combine4ImageFileDirectory_v2.load_rational.<locals>.combineC      'A6>[->>rq   c              3  8   >#    U  H  u  pT" X5      v   M     g 7frj   r>   rd   numdenomr  s      rf   rg   6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>F       V;UZSWS((;U   r&   r   r  r   r  r   r   ztuple[int, int] | IFDRationalr  rc   rl   zipr   r  r  valsr  s     ` @rf   load_rational#ImageFileDirectory_v2.load_rational=  W     ||s4yA~.a0$7	? V3tCaCy$qtRSt*;UVVVrq   c                :   ^  SR                  U 4S jU 5       5      $ )Nrq   c              3  ^   >#    U  H"  nTR                   " S /[        US5      Q76 v   M$     g7f)2Ll    N)r  r{   rd   r   r   s     rf   rg   7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>J  s)      
LRDDJJt?odI>?Fs   *-r  r   r  s   ` rf   write_rational$ImageFileDirectory_v2.write_rationalH  s!    xx 
LR
 
 	
rq   r0   c                    U$ rj   r>   r  s      rf   load_undefined$ImageFileDirectory_v2.load_undefinedN  r  rq   c                    [        U[        5      (       a  [        U5      n[        U[        5      (       a  [        U5      R	                  SS5      nU$ )Nrj  r   )r   ru   r   r   rz  r  s     rf   write_undefined%ImageFileDirectory_v2.write_undefinedR  s@    e[))JEeS!!J%%gy9Erq   
   c           
        ^^ U R                  [        U5      S-   S3U5      nSU4S jjm[        U4S j[        US S S2   USS S2   5       5       5      $ )Nr*   r  c                .   > T(       a  X4$ [        X5      $ rj   r  r  s     rf   r  ;ImageFileDirectory_v2.load_signed_rational.<locals>.combine`  r  rq   c              3  8   >#    U  H  u  pT" X5      v   M     g 7frj   r>   r  s      rf   rg   =ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>c  r  r  r&   r   r  r  r  s     ` @rf   load_signed_rational*ImageFileDirectory_v2.load_signed_rationalZ  r  rq   c                :   ^  SR                  U 4S jU 5       5      $ )Nrq   c           	   3  `   >#    U  H#  nTR                   " S /[        USS5      Q76 v   M%     g7f)2lii   N)r  r   r  s     rf   rg   >ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>g  s0      
 JJtP4T9hOPs   +.r  r  s   ` rf   write_signed_rational+ImageFileDirectory_v2.write_signed_rationale  s!    xx 

 
 	
rq   c                    UR                  U5      n[        U5      U:w  a  SU S[        U5       S3n[        U5      eU$ )Nz&Corrupt EXIF data.  Expecting to read  bytes but only got z. )readrc   OSError)r   fpr   retr.  s        rf   _ensure_read"ImageFileDirectory_v2._ensure_readl  sN    ggdms8t%%)F*>s3xjL  #,
rq   c           
        U R                  5         UR                  5       U l         U R                  (       a"  U R	                  SU R                  US5      5      O!U R	                  SU R                  US5      5      S   n[        U5       GH  nU R                  (       a"  U R	                  SU R                  US5      5      O!U R	                  SU R                  US	5      5      u  pEpg[        R                  " X@R                  5      R                  n[        R                  " US
5      n	SU SU SU	 SU S3	n
 U R                  U   u  pXk-  nXR                  (       a  SOS:  a{  UR                  5       nU R	                  U R                  (       a  SOSU5      u  nU
SU SU 3-  n
UR#                  U5        [$        R&                  " X5      nUR#                  U5        OUS U n[)        U5      U:w  a@  [*        R,                  " SU S[)        U5       SU 35        [        R!                  U
5        GM  U(       d  [        R!                  U
5        GM  XpR.                  U'   XPR0                  U'   U
S-  n
XS:  a  SU S3O
[3        U5      -  n
[        R!                  U
5        GM     U R                  (       a"  U R	                  SU R                  US5      5      O!U R	                  SU R                  US5      5      u  U l        g ! [         a    [        R!                  SX5         GM  f = f! [6         a)  n
[*        R,                  " [9        U
5      5         S n
A
g S n
A
ff = f)Nr   r2   r  r&   r   HHQ8s   HHL4srA   unknownztag:  (
) - 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*  tellr4  r'  r  r  ranger   rF  r(  r  r   getr   KeyErrorloggerdebugseekr   
_safe_readrc   r}  r~  r=  r)  r!  r+  r  r   )r   r  	tag_countr   rP  rQ  countr  tagnametypnamer.  	unit_sizerR  r   hereoffsets                   rf   loadImageFileDirectory_v2.loadv  s   

wwy=	 == S$"3"3B":;\\#t'8'8Q'?@	I
 9% }} LL$*;*;B*CDgt/@/@R/HI &% #//#zz:??))C3gYbZy3%qI)-)<)<S)A&I (115779D $DMMSsD QIV_TF2DVHMMCGGFO$//9DGGDM;Dt9$MM--1F2Fs4yk R)),/
 LL%LL%%)c"$'S!|#"9$w/$t*LS!] &d == S$"3"3B":;\\#t'8'8Q'?@ TYG   LL!;SFP  	MM#c(#	s=   DL+ 7LF:L+  L(#L+ 'L((L+ +
M5MMc                ,   U R                   U R                  SU R                  (       a  SOS5      -   nU R                  (       a  XR                  SSS5      -  nXR                  (       a  U R                  SS5      -  nU$ U R                  S	S5      -  nU$ )
Nr  r  *   HHr2   r   r   rC   r@   )r#  r  r'  r   r-  s     rf   _get_ifhImageFileDirectory_v2._get_ifh  sw    llTZZ4==RbII==::dAq))Cmmtzz#r"K
 :>C9KK
rq   c                   U R                  U R                  (       a  SOS[        U R                  5      5      n/ nU R                  (       a  SOSnU R                  (       a  SOSnU[        U5      [        U R                  5      U R                  (       a  SOS-  -   U-   -  nS n[	        U R                  R                  5       5       GHa  u  pxU[        :X  a  [        U5      nU R                  U   n	[        R                  SXy[        U5      5        U	[        R                  :H  =(       a    [        U[        5      n
U
(       aV  [        U R!                  5       US	9nU R                  U   nUR                  5        H	  u  pXU'   M     UR#                  U5      nO0[        U[$        5      (       a  UOU4nU R&                  U	   " U /UQ76 n[        R(                  " XpR*                  5      R,                  nU
(       a  S
O[.        R0                  " U	S5      nSU SU SU SU	 S3	nU[        U5      S:  a  S[        U5       S3O
[3        U5      -  n[        R                  U5        U
(       a  SnOJU	[        R4                  [        R6                  [        R8                  4;   a  [        U5      nO[        U5      n[        U5      U::  a(  UR;                  XyUUR=                  US5      S45        GM&  UR;                  XyUU R                  XA5      U45        U[        U5      S-   S-  S-  -  nGMd     Ub  X6   u  pynpU(       aO  U R>                  U	   u  nnU" XU R@                  5       Vs/ s H  nUU-   PM
     nnU R&                  U	   " U /UQ76 nO&U R                  X@RC                  XH5      S   U-   5      nXyUX4X6'   U H[  u  pynp[        R                  SXyU[        U5      [        U5      5        X R                  U R                  (       a  SOSXyUU5      -  nM]     X R                  US5      -  nU H%  u  pynpX/-  n[        U5      S-  (       d  M   US-  nM'     U$ s  snf )Nr   r  r@   r2   r*   r  rA   zTag %s, Type: %s, Value: %s)r(  ifdr  zsave: r  r  z) - value: rC   r  r  r   r  rq   r&   r   z%s %s %s %s %sr  r  )"r  r'  rc   r<  sortedrE  STRIPOFFSETSr)  r  r  r!  r   ru  r   rA  r   r	  tobytesrl   r   rF  r(  r  r   r  r   ry  rx  ro  appendljustr   r  r  )r   r  resultentriesr  fmt_sizestripoffsetsrP  r   rQ  r  r  r  ifd_tag	ifd_valuer  r  r  r.  r  r   rR  rw   s                          rf   r  ImageFileDirectory_v2.tobytes  s   4==Cc3t}};MN<>]]c11K#dmm,dmmLLxW	
  !!4!4!67JCl""7|,,s#CLL6$u+NHMM)Ej.EF+DMMO3Gs+*0,,.&G#,L +9{{6*",UE":":++C0??ooc::6;;G%e599S)+DG7)2cU*WIRuKPCCIOXc$i[0VTCLL 8J8JKKD	F4yH$%He1LcRS%C1H$OP3t9q=Q.22E 8J #+2+@(CeU $ 3 3C 8g29$doo2VW2V3#,2VW++C0??

3S(@(Cf(LM$'eU$@G! -4(CeULL)3UDKdTjj==gs F -4 	**S!$$ -4(CeUNF4y1}}% -4
 - Xs   &Qc                    UR                  5       S:X  a  UR                  U R                  5       5        UR                  5       nU R                  U5      nUR                  U5        U[	        U5      -   $ r   )r  writer	  r  rc   )r   r  r  r  s       rf   saveImageFileDirectory_v2.save  sU    779>HHT]]_%f%
F##rq   )r'  r%  r,  r>  r4  r#  r=  r;  r<  r(  r+  r)  )s   II*     NN)r-  r  ro   zbytes | Noner(  
int | Noner   r   )r   r   )r   r   r   r   r   r   r   )r   zdict[str, Any]r   rP  r   r   r
   rP  r   r   r   rP  r   r   r
   r   r   )rP  r   r   r
   r  r   r   r   )rP  r   r   r   r   zIterator[int])r  r   r  r  r   r  )r  r   r  r
   r   r  r  )r  r  r  r   r   r  )r  bytes | int | IFDRationalr   r  )r  r  r  r   r   r   )r   zstr | bytes | intr   r  )r  r  r  r   r   z)tuple[tuple[int, int] | IFDRational, ...])r  ru   r   r  )r   r#  r   r  )r  	IO[bytes]r   r   r   r  )r  r$  r   r   )r   r  rQ   )r  r   r   r  )r  r$  r   r   )9r   r   r   r   r   r   __annotations__r   r   r   ro   r  r  setterr*  rB  rH  rL  rS  rW  r\  r[  r  r  r  r  listmapr  r   rs  ru  SIGNED_BYTErt  rv  FLOATrw  IFDLONG8r   r  r   r  r  r  r  r  r  r  r  r  r  r  r	  r  r  r   r>   rq   rf   r   r     s   :x :<N6;57O27 3# 	%!%! %! 	%!
 
%!N /0F/0F     (	
<	<3\|%
=78 	g.V,%%sM:&&^<%%sM:g.#x0sF+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N`$rq   r   r   r   write_c                     ^  \ rS rSr% SrSU 4S jjr\" S 5      r\" S 5      rS\	S'    \
SS j5       rSS	 jrSS
 jrSS jrSS jrSS jrSS jrSrU =r$ )ImageFileDirectory_v1i%  a  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                4   > [         TU ]  " U0 UD6  SU l        g )NT)superr   r,  )r   r   kwargs	__class__s      rf   r   ImageFileDirectory_v1.__init__8  s    $)&)rq   c                    U R                   $ rj   )r;  r   s    rf   r  ImageFileDirectory_v1.<lambda><  s    rq   c                    U R                   $ rj   )r=  r   s    rf   r  r6  =  s    DMMrq   zdict[int, int]r)  c                    U " UR                   S9nUR                  Ul        UR                  Ul        UR                  Ul        U$ )a  Returns 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   )ro   r=  r)  r+  )clsoriginalr  s      rf   from_v2ImageFileDirectory_v1.from_v2C  s<     )((&&==
rq   c                    [        U R                  S9n[        U R                  5      Ul        [        U R                  5      Ul        [        U R
                  5      Ul        U$ )a  Returns 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   ro   rA  r=  r)  r<  )r   r  s     rf   to_v2ImageFileDirectory_v1.to_v2U  sG     $4;;7DMM*4<<(DMM*
rq   c                H    XR                   ;   =(       d    XR                  ;   $ rj   )r;  r=  rV  s     rf   rW  "ImageFileDirectory_v1.__contains__f  rY  rq   c                j    [        [        U R                  5      [        U R                  5      -  5      $ rj   )rc   rK  r=  r;  r   s    rf   rL  ImageFileDirectory_v1.__len__i  rN  rq   c                j    [        [        U R                  5      [        U R                  5      -  5      $ rj   )r  rK  r=  r;  r   s    rf   r  ImageFileDirectory_v1.__iter__l  r  rq   c                :    S H  nU R                  XU5        M     g N)FT)r[  )r   rP  r   r  s       rf   r\  !ImageFileDirectory_v1.__setitem__o  s    'JMM#j1 (rq   c           	         XR                   ;  aQ  U R                  U   nU R                  U   nU R                  U   u  pES H  nU R	                  X" XU5      U5        M     U R                   U   n[        U[        [        45      (       d  U4nU$ rG  )r;  r=  r)  r   r[  r   rl   r  )r   rP  r  rQ  r   rR  legacyrw   s           rf   rS  !ImageFileDirectory_v1.__getitem__s  s    mm#==%D,,s#C //4MD'c74v#>G (mmC #u~..&C
rq   r6  )r   r
   r2  r
   r   r   )r:  r   r   r/  )r   r   r   r   r"  r!  r  )r   r   r   r   r   r   r   tagstagdatar%  classmethodr;  r>  rW  rL  r  r\  rS  r   __classcell__r3  s   @rf   r/  r/  %  se    $  ./D12G ! ""<<=2
 
rq   r/  c                     ^  \ rS rSrSrSrSr S     SU 4S jjjrSS jr\	SS j5       r
SS jrSS	 jrSS
 jrSS jrSU 4S jjrSS jrSS jrSS jrSS jrSrU =r$ )TiffImageFilei  TIFFz
Adobe TIFFFc                0   > U    U    [         TU ]  X5        g rj   )r1  r   )r   r  filenamer3  s      rf   r   TiffImageFile.__init__  s    
 	5"&rq   c                    U R                   R                  S5      nUS   S:X  a  XR                   R                  S5      -  n[        U5      U l        U R                  R                  =U l        U l        SU l        U R                   U l        / U l	        SU l
        [        R                  S5        [        R                  SU R
                  5        [        R                  S[        U5      5        U R                  S	5        g)
z#Open the first image in a TIFF filer2   r&   r  rs   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     rf   _openTiffImageFile._open  s     ggll1oq6R<77<<?"C+C0 &*[[%5%55t{77%'%)23_dll3[$s), 	

1rq   c                \   U R                   nUc  U R                  5       nU R                  [        U R                  5      5        U R                   c1  U R                  U R                  5       S-   5        U R                   c  M1  U R                  U5        U R                   c   eU R                   $ )Nr   )r^  r  r_  rc   r]  r  )r   current_n_framescurrents      rf   n_framesTiffImageFile.n_frames  s    >>#iikGJJs4??+,..(

499;?+ ..(IIg~~)))~~rq   c                   U R                  U5      (       d  gU R                  U5        U R                  bQ  U R                  R                  U R
                  :w  d$  U R                  R                  U R                  :w  a  SU l        ggg)z%Select a given frame as current imageN)_seek_checkr_  _imimr   
_tile_sizemode)r   frames     rf   r  TiffImageFile.seek  sg    &&

588GGLLDOO+tww||tyy/H DH 0I  rq   c                \   [        U R                  [        5      (       a  U R                  R                  eU R                  U l        [        U R                  5      U::  Ga  U R                  (       d  Sn[        U5      e[        R                  SUU R                  U R                  U R                  R                  5       5        U R                  S:  a  Sn[        U5      eU R                  R                  U R                  5        U R                  R                  U R                  5        [        R                  SU R                  R                  5       5        U R                   R#                  U R                  5        U R                   R$                  U R                  ;   a  SU l        OU R                   R$                  U l        U R                  S:X  a
  US-   U l        [        U R                  5      S:X  a  U R                  S:g  U l        U =R                  S-  sl        [        U R                  5      U::  a  GM  U R                  R                  U R                  U   5        U R                   R#                  U R                  5        [*        U R                   ;   a!  U R                   [*           U R,                  S'   OSU R,                  ;   a  U R,                  S	 U R/                  5         [0        R3                  U R                   5      =U l        U l        Xl        U R9                  5         g )	Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %sl            zUnable to seek to framezLoading tags, location: %sr   r   xmp)r   r\  r   exr  rc   r]  rZ  EOFErrorr  r  r[  r  r|  r  r  rX  r  r+  r^  is_animatedXMPrm  _reload_exifr/  r;  rP  r  _setup)r   rm  r.  s      rf   r_  TiffImageFile._seek  s#   dhh..((++(($//"e+;;3sm#LLK {{e#/ o%GGLL%OO""4;;/LL5tww||~FKKTWW%{{4??2  "kk..{{a!&4??#q(#';;!#3 LLAL9 $//"e+: 	T__U+,!$++#{{3/DIIedii		% 3;;DKKHH48rq   c                    U R                   $ )zReturn the current frame number)r[  r   s    rf   r  TiffImageFile.tell  s    ||rq   c                   0 nU R                   R                  [        R                  R                  5      nU(       a  UR                  S5      (       a  [        USS 5      n[        R                  " US   S-   S-  5      S-  n[        USU-   SU-    5      nUSU-   SU-   U-    nSU0X'   U[        R                  " SU-   U-   S-  5      S-  S nUR                  S5      (       a  M  U$ )	a  
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.
s   8BIMr*   r.   r   r&   r  r  N)
rX  r  r   BaseImageResourcesrk   i16mathceili32)r   blocksrw   idnr   r  s          rf   get_photoshop_blocks"TiffImageFile.get_photoshop_blocks  s     kkoohmm::;..))Qq]IIs1vzQ./!33q1urAv./26BFTM2$d^
$))R!Vd]a$781<>? ..)) rq   c                   > U R                   (       a!  U R                  (       a  U R                  5       $ [        TU ]  5       $ rj   )tileuse_load_libtiff_load_libtiffr1  r  )r   r3  s    rf   r  TiffImageFile.load  s-    99..%%''w|~rq   c                   U R                   cY  [        R                  " U R                  5        [        R                  R                  U R                  U R                  5      U l        [        R                  R                  U 5        g rj   )
ri  r   _decompression_bomb_checkrk  corenewrl  rj  r   load_preparer   s    rf   r  TiffImageFile.load_prepare  sP    88++DOO<jjnnTYY@DG((.rq   c                x   U R                   (       dF  SU l        U R                  5       n[        R                   H  nX!;  a  M
  UR                  U5        M     [        R                  " U SS9  [        R                  R                  U R                  ;   a&  U R                  [        R                  R                  	 g g )NT)in_place)rs  !_close_exclusive_fp_after_loadinggetexifr   TAGS_V2_GROUPSget_ifdr   exif_transposer   r{  OrientationrX  )r   exifkeys      rf   load_endTiffImageFile.load_end  s     59D2 <<>D..?S! /
 	t4==$$3HMM556 4rq   c                   [         R                   R                  U 5        U R                  5         [        U R                  5      S:X  d  Sn[        U5      eU R                  S   S   nU R                  S   S   n [        U R                  S5      =(       a    U R                  R                  5       n[        U R                  S5      (       a  U R                  R                  5         U(       a1  [        U[        5      (       d   e[        U5      nXES'   [        U5      n[         R                  " U R                  S	X0R                  5      n UR!                  U R"                  U5        U R&                  =(       a    U R(                  (       + n[        U R                  S5      (       aA  [*        R-                  S5        UR/                  U R                  R1                  5       5      u  pOU(       a  [*        R-                  S5        U(       d  U R                  R3                  S5        [4        R6                  " US[4        R8                  5      nUR/                  S5      u  p[4        R6                  " XK[4        R:                  5        O[[*        R-                  S5        U R                  R3                  S5        UR/                  U R                  R=                  5       5      u  p/ U l        SU l        U RA                  5         U(       a!  U R                  RC                  5         SU l        U
S:  a  SU
 3n[        U5      e[         R                   R                  U 5      $ ! [
         a    Sn GNf = f! [$         a  nS
n[        U5      UeSnAff = f)zOOverload method triggered when we detect a compressed tiff
Calls out to libtiffr   zNot exactly one tiler   r(   filenoflushFr&   libtiffzCouldn't set the imageNgetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.s   fpfpz+don't have fileno or getvalue. just readingzdecoder error )"r   r  r  rc   r  r  r   r  r  r  r   rl   r'  _getdecoderrl  decoderconfigsetimagerj  r|  _exclusive_fprs  r  r  r  r  r  oslseekSEEK_CURSEEK_SETr  readonlyr  close)r   r.  extentsr   r  	args_listdecodereclose_self_fpr  errposs               rf   r  TiffImageFile._load_libtiff,  s    	499~"(C#, ))A,q/yy|A

	(+@0@B tww(( dE****T
IaL#D##DIIy$@R@RS	&TWWg.
 **C43C3C/C477J'' LLPQ^^DGG$4$4$67FAsLLNO Q ((2q"++.C^^G,FAHHRbkk* LLFGGGLLO^^DGGLLN3FA	GGMMODG7"3%(C#,{{%%G  	 B	  	&*C#,A%	&s+   ;A,M M. M+*M+.
N8NNc                r   SU R                   ;   a  Sn[        U5      e[        U R                   R                  [        S5         U l        U R                   R                  [        S5      U l        U R                   R                  [        S5      nU R
                  S:X  a  SnU R                   R                  [        S5      n[        R                  S5        [        R                  SU R
                  5        [        R                  S	U5        [        R                  S
U R                  5        [        R                  SU5        [        R                  SU R                   R                  [        5      5         U R                   [           nU R                   [           n[#        U[$        5      (       a  [#        U[$        5      (       d  Sn['        U5      eXE4U l        U R                   R                  [*        R,                  R.                  5      nUS;   a	  XT4U l        OXE4U l        [        R                  SU R2                  5        U R                   R                  [4        S5      n[7        U5      S:  a$  [9        U5      [;        U5      s=:X  a  S:X  a  O  OSnU R                   R                  [<        S5      n	U R                   R                  [>        S5      n
US;   a  SnOUS:X  a  SnOSnU[7        U
5      -  n[7        U	5      nU R                   R                  [@        U R
                  S:X  a  US;   a  SOS5      nU[B        :  a#  [        RE                  SU5        Sn[G        U5      eX:  a  U	SU n	OX:  a
  US:X  a  X-  n	[7        U	5      U:w  a  Sn[G        U5      eU R                   RH                  UUUU	U
4n[        R                  SU5         [J        U   u  U l&        n[        R                  SU5        [        R                  S U RN                  5        U R
                  U RP                  S!'   U R                   R                  [R        S5      nU R                   R                  [T        S5      nU(       a  U(       a  U R                   R                  [V        5      nUS":X  a  UU4U RP                  S#'   OUUS:X  a  US$-  US$-  4U RP                  S#'   O7Uc#  UU4U RP                  S#'   UU4U RP                  S%'   OUU4U RP                  S%'   S=n=nn/ U l,        [Z        =(       d    U R
                  S&:g  U l.        U R\                  (       a  US":X  a5  USS S-   USS -   n[        R                  SU5        [J        U   u  U l&        nUS:X  a#  U R
                  S':X  a  U R                  S:X  a  S(nO'US):X  a  S*nOUR_                  S+5      (       a  USS, S--   nXR
                  S.U R                   R`                  4nU RX                  Rc                  [d        Rf                  " S/SSXE4SU5      5        GO[h        U R                   ;   d  [j        U R                   ;   Ga  [h        U R                   ;   a6  U R                   [h           nU R                   R                  [l        U5      nUnOU R                   [j           nU R                   R                  [n        5      nU R                   R                  [p        5      n[#        U[$        5      (       a  [#        U[$        5      (       d  S0n['        U5      eUnUU:X  a  UU:X  a  U R                  S":w  a  US,S nU H  nUU-   U:  a  U[s        U	5      -  S1-  nOSnUnU R                  S":X  a
  UU   nUU-  nU[%        U5      S4nU RX                  Rc                  [d        Rf                  " U R
                  UU[;        UU-   U5      [;        UU-   U5      4UU5      5        UU-  nUU:  d  M  SUU-   nnUU:  d  M  SnUS-  nM     O"[        R                  S25        Sn[G        U5      e[t        U R                   ;   a   U R                   [t           U RP                  S3'   U RN                  S4;   a[  U R                   [v            Vs/ s H  n[y        US5-  5      PM     n n[z        R|                  " S6S7R                  U 5      5      U l@        gg! [         a  nSn[!        U5      UeSnAff = f! [         a(  n[        R                  S5        Sn[G        U5      UeSnAff = fs  snf )8z-Setup this image object based on current tagsi  z+Windows Media Photo files not yet supportedr   r   r/   r.   z*** Summary ***z- compression: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %szMissing dimensionsNzInvalid dimensions)r,   r.   r0   r2   z
- size: %sr=   r>   )r&   r.   r2   r(   r,   r*   )r&   r.   z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelzunknown data organizationzformat key: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %scompressionr&   dpigRQ@
resolutionr%   r1   rO   rB   I;16N)z;16Bz;16Lrs   NFr  zInvalid tile dimensionsr2   z- unsupported data organizationicc_profiler[   r]   r"   RGB;Lrq   )ArX  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  YCBCRSUBSAMPLING
IMAGEWIDTHIMAGELENGTHr  	TypeErrorr   r   r|  rk  r   r{  r  _sizer   SAMPLEFORMATrc   r   r   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr"  ro   	OPEN_INFO_moderl  rm  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITr  READ_LIBTIFFr  r  r  r  r   _Tiler  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r   r%   r  palette)!r   r.  photo	fillorderxsizeysizer  orientationsample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelr  rawmodexresyresresunitxylayerr  offsetsr  w	tilewidthr  stridetile_rawmoder   r  r  s!                                    rf   rv  TiffImageFile._setup  s    T[[ ?C#, -T[[__[!-LM%)[[__5I1%M"  :A> +EKKOOIq1	&'($*;*;<7?143M3MN'3.@P0QR	(KK
+EKK,E %%%Zs-C-C&CS/!,kkoohmm&?&?@,&DJDJ\499-d;}!c-&8C<N&SRS&S !MKKOOM48	kkoolB7IIaZIIS%%	y> KKOO""k1evoA1

 22LL@BS 8Cc""/ ""4#45I16F!6K "5Iy>..-Cc"" KK
 	%s+	*"+C.DJ 	%w/%tyy1#'#4#4		- {{|Q/{{|Q/Dkkooo6G!|$($<		% A$(4K#=		% $($<		%  +/*		,'*.*		,' A	 , J0A0AU0J   A~"1gns12w.-s3 '0n#
G 
%%/..!3
 F"!!!"233!#2,, ++UDKK4F4FGAIIY__YAu8LaQRSTT[[(K4;;,Ft{{*++l3KKOOL%8 ++k2 KKOOI6	KKOOJ/!)S11As9K9K3C$S/)Eza5jT-G-G1-L!"#,!q55=Y/!3FF&--2#*5>Li'F$c&k15		  OO))As1q5%0#a!eU2CD	 Q:a!eqAEz
7 ": LL:;-Cc"" $'+{{:'>DIIm$ 99#-1[[-BC-Br!s(|-BGC'++GSXXg5FGDL $[  	(&CC.a'	(P  	*LL/0&Cc")	*L Ds6   6&c c? d4
c<)c77c<?
d1	#d,,d1)__first__frame__nextr  r  r\  r]  ri  r  r^  r  r  rk  r  r  rj  rs  r  r  rP  rX  r  r  rj   )r  StrOrBytesPath | IO[bytes]rU  zstr | bytes | Noner   r   r  r   )rm  r   r   r   )r   zdict[int, dict[str, bytes]])r   zImage.core.PixelAccess | None)r   r   r   r   formatformat_descriptionr  r   r`  r   re  r  r_  r  r  r  r  r  r  rv  r   rO  rP  s   @rf   rR  rR    s    F%(-%
 (,'&' %' 
	' '0 	 		,\*
/7"^&@oH oHrq   rR  r?   r@   rN   r[   r]   rE   rL   rB   rF   rI   rJ   rO   rR   rP   r^   YCbCrra   rM   rD   rG   rK   )rG   rK   c                    [         U R                     u  p4pVpxU R                  nU R
                  n[        US9nUR                  S5      (       a  SUl         US   nUc  SnOUS:X  a  S	nOUS
:X  a  Sn[        =(       d    US:g  nSU[        '   U R                  S   U[        '   U R                  S   U[         '   SU;   a  US   nOKSU;   aC  US   n[        U["        5      (       a(  [$        R&                  " 5       nUR)                  U5        UnO0 n[*        R-                  S[/        U5      5        [        U[0        5      (       a  UR3                  5       nU H|  n[        U[$        R&                  5      (       a)  U[4        R6                  ;   a  UR9                  U5      UU'   OUR                  U5      UU'    UR:                  U   UR:                  U'   M~     0 n[?        U S5      (       a  U R@                  R3                  5       n0 UE[C        U S0 5      En[D        [F        4 H  nUU;   d  M  UU	 M     [?        U S5      (       a  [H        [J        [L        [N        [P        [R        4 H  nUU RT                  ;   d  M  U[N        :X  a@  U RT                  R:                  U   [4        RV                  [4        RX                  4;  a  UU	 M_  U RT                  U   UU'   U RT                  R:                  U   UR:                  U'   M     UR                  SU R                  R                  S5      5      nU(       a	  UU[Z        '   [\        S4[J        S4[L        S4[J        S4[L        S4[H        S4[^        S4[`        S4[b        S4[d        S44
 H  u  nnUU;   d  M  UU   UU'   M     UR                  S5      nU(       a!  SU[H        '   US   U[J        '   US   U[L        '   US:w  a)  X}[f        '   [i        U5      S:w  a  [i        U5      U[j        '   Ub  X[l        '   US:w  a  Xm[F        '   [n        U;  a	  X][n        '   OU R                  S ;   a  U[n           S:X  a  U R                  S!:X  ar  U Rq                  5       nUR)                  5       nUbN  [s        URt                  5       H3  n[s        URv                  5       H  nUUU4   S":X  a  SOS"UUU4'   M     M5     Un O[x        Rz                  " U 5      n U R                  S#;   ax  U R|                  R                  S$S%5      n/ n[i        U5      S&-  n[s        S&5       H4  n UUUU -  UU S-   -    V!s/ s H  n!U!S'-  PM
     sn!-  nUS/S'U-
  -  -  nM6     UU[        '   U[           U[            n#n"[i        U5      U"US   -  S(-   S)-  -  n$[        U;  ac  U(       aI  UR                  S*[        5      n%U$S:X  a  SO[        U%U$-  U#5      n&US	:X  a  [        U&S(-   S)-  S)-  U#5      n&OU#n&U&S:X  a  Sn&U&U[        '   U$S:X  a  SOU$U[           -  n'U#U[           -   S-
  U[           -  n(U'S+:  a!  [4        R                  UR:                  [        '   U'4U(S-
  -  U$U#-  U'U(S-
  -  -
  4-   U[        '   [        [s        SU'U(-  U'5      5      U[        '   [        R                  US5      U[        '   U R                  S,:X  a8  [        S-[        S.0R                  5        H  u  nn)UR                  UU)5        M     [        [        [        [        /n*U(       Ga  S/U;   aO  US/   n+[        U+[        5      (       a  U+S:  d  U+S0:  a  S1n
[        U
5      eUS	:w  a  S2n
[        U
5      eU+U[        '   [*        R-                  S35        [*        R-                  S4[        UR                  5       5      5        Sn,[?        US55      (       a"   UR                  S5        UR                  5       n,0 n-U*[        [        [        [        [        [        /-  n*[f        US   0n.[        R                  " UR                  5       UR                  5       5       GHF  u  nn/U[4        R                  ;  a  [C        [$        R                  S6S75      (       d  M=  U[4        R6                  ;   a  [4        R                  U-U'   OvUUR:                  ;   a  UR:                  U   U-U'   OS[        U/[        [        [        ["        45      (       d  M  [4        R                  " U5      R                  n0U0(       a  U0U-U'   UU.;  d  M  UU*;  d  M  [        U/[        5      (       a  U/R                  S8S95      S:-   U.U'   GM  [        U/[        5      (       a  [        U/5      U.U'   GMA  U/U.U'   GMI     [F        U.;   a)  [i        U.[F           5      S:X  a  U.[F           S   U.[F        '   [*        R-                  S;[        U.R                  5       5      5        U R                  S<;   a  S=n[/        U.R                  5       5      n1U1R                  5         X>U,UU1U-4n2[$        R                  " U R                  S>U2U5      n3U3R                  U R|                  S?U R                  -   5         U3R                  [        R                  5      SS  u  n4n5U,(       d  UR                  U55        U4(       a  OMG  U4S:  a  S@U4 SA3n
[        U
5      eO]U* H  nUU	 M     UR                  U5      n6[        R                  " U U[        R                  " SS?U R                  -   U6UU$S45      /5        SBU;   a  [        U SBU5        g g ! [         a!  n	SU R                   S3n
[        U
5      U	eS n	A	ff = f! [         a6    U R                  R                  S5      n[        U[        5      (       a  S n GNhf = f! [<         a     G
M  f = fs  sn!f ! [        R                   a     GNf = f)CNzcannot write mode z as TIFFrn   big_tiffTr  r%   r/   r1   r7   r3   r   r   tiffinfor  zTiffinfo Keys: %srP  rX  r  descriptionr  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightr  r&   r=   )r?   r@   r?   r!   r  rO   r  r(   r"   r0   r2   
strip_sizer    r  )r   r   )r   r!      r!   r	  r!   qualityd   zInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %sr  rh   Frj  r   r  zConverted items: %s)rD   rB   r  r  rS   zencoder error z when writing image file_debug_multipage)q	SAVE_INFOrl  r  r  encoderinfoencoderconfigr   r  r'  rm  r   r   WRITE_LIBTIFFr  r   r  r  r  r   Exifr  r  r  r'  r/  r>  r   r  r  r)  r9  r   rP  r   EXIFIFDr  r  r  r  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKrt  rX  ry  ro  r  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTr  rc   r  r  r  copyr  heightwidthr   invertrj  
getpaletter  r  
STRIP_SIZEr   ru  STRIPBYTECOUNTSrl   r  COMPRESSION_INFO_REVr  r  REFERENCEBLACKWHITErE  
setdefaultr  r  r  TILEBYTECOUNTSr|  JPEGQUALITYr  r  r  ioUnsupportedOperationOSUBFILETYPETRANSFERFUNCTIONSUBIFD	itertoolschainLIBTIFF_COREr  r,  r   r   rF  rn  rz  ru   sort_getencoderr  r   MAXBLOCKr  r  _saver  setattr)7rj  r  rU  r  ro   r  r  bitsextrar  r.  r  r  r  r  r  rm  r  r  
legacy_ifdsupplied_tagsrP  iccr  r  inverted_impxr  r  lutcolormapcolorsr   ra  r  r  r  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imagedefault_value	blocklistr
  r\  typesattsr   rn  rL  r  encodererrcoder  r  s7                                                          rf   r1  r1    s   "6?6H3
 ..K$$M
v
.Cz""!-0 		#		&*3{e3G !"CggajC
OwwqzC [ :&	;	6"dE""::<DIIdOD
LL$d4j1$-..zz|dEJJ''C83J3J,J||C(CHxx}CH	#||C0CKK  Jr5VV\\^
?z?WR2%>?M 		 -c" r8 
C bii.(RYY->->s-CMM&&L . &c*!yy~CH')yy'8'8'=CKK$!
( //-])C
DC
J 
=)	|$	|$	~&	~&	+,	:	K 		K 	T ;"4(CH //%
 C
 OFLFLt|!Mt9>#&t9C !L{"L!,*/&'	J	3'A#Ba#G77c>'')K!!#B~{112A";#4#45(*1a4C1S1a4 6 3 !$B	ww+eeug.SQqA#fqj6QU;K*LM*LQS*LMMHsV|,,H  !Hz?C,qAY1tAw;?q01F3'OOL*EM"(A+Q3}7NPQ3RNf$!$~'9a&?1%Da!HNQN*L#q[fs<7H.HC--1c,6GGE!'/}}O$-/3Ca3GH
&*:Q*>??L C a"%557HIC ,//Q?C	ww'f!=#
 %'#C NN3.	# J^DI#!),Ggs++w{gm/ o%f$M o%&C34[&"562x  
iik
  	
 	
	 !.tAw7 $//#))+}7J7J7LMJC
 (///uzz+H%PP(111!)E#JCKK'!$S!1E#J$US%e,DEE#??3/44D%)c
$3i#7eS)) %Wi @5 HDI{33 %eDI %DI3 N6 4C\(:$;q$@!%l!3A!6D*F4::<,@A 77''G
 DJJL!		3$>##BGGY=I 01#NN9+=+=>qrBMGT  Q;"7)+CDC#, 
 CC "__UFRWW$4fwPQ>RST	
 [(&, )]	  ""277)84cl!"  ggkk-0k3''K	T  		| Nt ** sS   m n 8o	o	!o  
n"m>>n<oo	
oo o87o8c                     \ rS rSr/ SQr1 SkrS"S#S jjrS$S jrS$S jrS$S jr	S%S jr
S&S	 jrS'S
 jr\R                  4S(S jjrS$S jrS)S jrS$S jrS*S jrS+S jrS,S jrS'S jrS'S jr\S-S j5       r S.       S/S jjrS0S jrS0S jrS0S jrS1S jrS0S jrS0S jr S$S jr!S$S jr"S2S jr# S3       S4S jjr$S r%g!)5AppendingTiffWriteri  )r   r   r   r&   r*   r2   r   r   r&   r*   r2   r*   r2   r*   r&   r*   r2   >     r  	  r#      r$   c                ^   U   [        U5      (       a(  Xl        SU l         [        X(       a  SOS5      U l        O#[        [        [           U5      U l        SU l        U R                  R                  5       U l
        U R                  5         g ! [
         a    [        US5      U l         NMf = f)NTzw+bzr+bF)r   r  close_fpopenr   r  r   r	   r  r  	beginningsetup)r   fnr  s      rf   r   AppendingTiffWriter.__init__  s    2;;I DM)b3%E: "U)R(DF!DM

  )b%)s   B B,+B,c                J   U R                   R                  U R                  [        R                  5        S U l        SU l        U R                   R                  S5      =U l        nSU;   U l	        U(       d  SU l
        g SU l
        U[        ;  a  Sn[        U5      eU R                  UR                  [        5      (       a  SOS5        U R                  (       a*  U R                   R                  S[        R                   5        U R#                  5         U R%                  5         g )	Nr   r*      +TFzInvalid TIFF file headerr  r  )r   r  rO  r  r  whereToWriteNewIFDOffsetoffsetOfNewPager  IIMMr'  isFirstrm   RuntimeError	setEndianrk   r&  r  skipIFDsgoToEnd)r   iimmr.  s      rf   rP  AppendingTiffWriter.setup  s    DNNBKK048% 66;;q>)	D4DLx,Cs##doob11ss;==FFKK2;;'rq   c                   U R                   (       a  g U R                  R                  U R                  5        U R                  R	                  S5      nU(       d  g XR
                  :w  a  Sn[        U5      eU R                  (       a*  U R                  R                  S[        R                  5        U R                  U R                  (       a  SOS5      nX0R                  -  nU R                  c   eU R                  R                  U R                  5        U R                  X0R                  (       a  SOS5        U R                  R                  U5        U R                  5         g )Nr*   z1IIMM of new page doesn't match IIMM of first pager2   )rX  r   r  rV  r  rW  rY  r'  r  r  _readrU  _writefixIFD)r   r]  r.  
ifd_offsets       rf   finalizeAppendingTiffWriter.finalize  s    << 	D(()vv{{1~99ECs##==FFKK2;;'ZZT]]:
***
,,888D112J]]:Jrq   c                D    U R                  5         U R                  5         g rj   )rd  rP  r   s    rf   newFrameAppendingTiffWriter.newFrame5  s    

rq   c                    U $ rj   r>   r   s    rf   	__enter__AppendingTiffWriter.__enter__:  s    rq   c                H    U R                   (       a  U R                  5         g g rj   )rM  r  )r   r   s     rf   __exit__AppendingTiffWriter.__exit__=  s    ==JJL rq   c                P    U R                   R                  5       U R                  -
  $ rj   )r   r  rV  r   s    rf   r  AppendingTiffWriter.tellA  s    vv{{}t3333rq   c                    U[         R                  :X  a  XR                  -  nU R                  R	                  X5        U R                  5       $ )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  rV  r   r  r  )r   r  whences      rf   r  AppendingTiffWriter.seekD  s:     R[[ ***FF#yy{rq   c                B   U R                   R                  S[        R                  5        U R                   R	                  5       nSUS-  -
  nSUs=:  a  S:  a'  O  O$U R                   R                  [        U5      5        U R                   R	                  5       U l        g )Nr   rC   )r   r  r  SEEK_ENDr  r  r  rV  )r   r  	pad_bytess      rf   r\  AppendingTiffWriter.goToEndQ  sj    Ar{{#ffkkm rM	y2FFLLy)*#vv{{}rq   c                    Xl         U R                    S3U l        U R                    S3U l        U R                    S3U R                  (       a  SOS-   U l        g )Nr@   r  r  r   )endianlongFmtshortFmtr'  	tagFormat)r   ry  s     rf   rZ  AppendingTiffWriter.setEndian[  sJ    ++a(;;-q) KK=+dmmsMrq   c                    U R                  U R                  (       a  SOS5      nUS:X  a6  U R                  R                  5       U R                  (       a  SOS-
  U l        g U R                  R                  U5        U R                  U R                  (       a  SOS5      nU R                  R                  X R                  (       a  SOS-  [        R                  5        M  )Nr2   r*   r   r&   r  rA   )r`  r'  r   r  rU  r  r  r  )r   rc  num_tagss      rf   r[  AppendingTiffWriter.skipIFDsa  s    AA>JQ04AA1- FFKK
#zzt}}!!<HFFKK--BR@"++N rq   c               8    U R                   R                  U5      $ rj   )r   r  r  s     rf   r  AppendingTiffWriter.writen  s    vv||D!!rq   c                L     SSSS.U   $ ! [          a    Sn[        U5      ef = f)Nr  r@   r   )r&   r*   r2   zoffset is not supported)r  rY  )r   
field_sizer.  s      rf   _fmtAppendingTiffWriter._fmtq  s8    	$ss+J77 	$+Cs##	$s    #c                    [         R                  " U R                  U R                  U5      -   U R                  R                  U5      5      u  nU$ rj   )r  r  ry  r  r   r  )r   r  r   s      rf   r`  AppendingTiffWriter._readx  s=    ==KK$))J//Z1H
 rq   c                $    U R                  S5      $ Nr&   r`  r   s    rf   	readShortAppendingTiffWriter.readShort~      zz!}rq   c                $    U R                  S5      $ Nr*   r  r   s    rf   readLongAppendingTiffWriter.readLong  r  rq   c                <    U b  X:w  a  SU  SU 3n[        U5      eg g )Nzwrote only z bytes but wanted )rY  )bytes_writtenexpectedr.  s      rf   _verify_bytes_written)AppendingTiffWriter._verify_bytes_written  s4    $)B.@
KCs## *C$rq   c                &   U R                   R                  U* [        R                  5        U(       d  UnU R                   R	                  [
        R                  " U R                  U R                  U5      -   U5      5      nU R                  XC5        g rj   )
r   r  r  r  r  r  r  ry  r  r  )r   r   r  new_field_sizer  s        rf   _rewriteLast AppendingTiffWriter._rewriteLast  sf     	ZK-'NKKdii&??G
 	""=Arq   c                *    U R                  USS5        g )Nr&   r*   r  r  s     rf   rewriteLastShortToLong*AppendingTiffWriter.rewriteLastShortToLong  s    %A&rq   c                &    U R                  US5      $ r  r  r  s     rf   rewriteLastShort$AppendingTiffWriter.rewriteLastShort        **rq   c                &    U R                  US5      $ r  r  r  s     rf   rewriteLastLong#AppendingTiffWriter.rewriteLastLong  r  rq   c                    U R                   R                  [        R                  " U R                  U R                  U5      -   U5      5      nU R                  X25        g rj   )r   r  r  r  ry  r  r  )r   r   r  r  s       rf   ra  AppendingTiffWriter._write  sD    KKdii
&;;UC
 	""==rq   c                (    U R                  US5        g r  ra  r  s     rf   
writeShortAppendingTiffWriter.writeShort      E1rq   c                (    U R                  US5        g r  r  r  s     rf   	writeLongAppendingTiffWriter.writeLong  r  rq   c                |    U R                  5         U R                  (       a  U R                  R                  5         g g rj   )rd  rM  r   r  r   s    rf   r  AppendingTiffWriter.close  s$    ==FFLLN rq   c           
     2   U R                  U R                  (       a  SOS5      n[        U5       GH  n[        R                  " U R
                  U R                  R                  U R                  (       a  SOS5      5      u  p4nU R                  U   nXe-  nU R                  (       a  SOSnXx:*  n	U	(       d/  U R                  U5      U R                  -   n
U R                  X5        X0R                  ;   a  U R                  R                  5       n[        R                  S[        R                   " U5      R"                  U[$        R&                  " US5      UUU5        U	(       a1  U R)                  XV5        U R                  R+                  X-   5        GMe  U R                  R+                  W
5        U R)                  XV5        U R                  R+                  U5        GM  U	(       d  GM  U R                  R+                  U[,        R.                  5        GM     g )Nr2   r&   rA   r*   z;fixIFD: %s (%d) - type: %s (%d) - type size: %d - count: %dr  )r`  r'  r  r  r  r|  r   r  
fieldSizesrV  r  Tagsr  r  r  r   rF  r  r   r  _fixOffsetsr  r  r  )r   r  r   rP  
field_typer  r  
total_sizer  is_localr  cur_poss               rf   rb  AppendingTiffWriter.fixIFD  sr   ::4==aa8xA%+]]$--BQ G&"CU 4J#+J MMqqH!-HH-0D0DD!!&3ii&&++-QOOC(--IIj)4 $$U7FFKK 23FFKK'$$U7FFKK(Hbkk2I !rq   c                *   [        U5       GH  nU R                  U5      nX@R                  -  nSnU R                  (       a  US;   a	  US:  a  SnOUS:X  a  US:  a  SnU(       a  US:w  a  S	n[	        U5      eU R                  XBU5        U* S-
  S-
  nU R                  R                  U[        R                  5        U R                  U5        U R                  R                  SU-
  [        R                  5        M  U R                  XB5        GM     g )
Nr   )r&   r*   l        r2   r&   r    r*   r   znot implemented)r  r`  rV  r'  rY  r  r   r  r  r  r  )r   r  r  r   r  r  r.  rewinds           rf   r  AppendingTiffWriter._fixOffsets  s    uAZZ
+F***FN}}v!5&E/!"qVu_!"A:+C&s++ !!&nE(1,q0FBKK0/AJ4!!&53 rq   c                P    U(       a  SnOU(       a  SnOSnU R                  X5      $ )Nr&   r*   r   )r  )r   r  isShortisLongr  s        rf   
fixOffsetsAppendingTiffWriter.fixOffsets  s*     JJJ22rq   )rW  r'  rO  rM  ry  r   rX  rz  r  rV  r{  r|  rU  N)F)rQ  r  r  r   r   r   r  )r   rH  )r   r   r   r   r   )r  r   rr  r   r   r   )ry  r   r   r   )r  r   r   r   )r  r   r   r   )r  r   r   r   )r  r  r  r   r   r   rQ   )r   r   r  r   r  r   r   r   )r   r   r   r   )r   r   r  r   r   r   )r  r   r  r   r   r   )FF)r  r   r  r   r  r   r   r   )&r   r   r   r   r  r  r   rP  rd  rg  rj  rm  r  r&  r  r  r\  rZ  r[  r  r  r`  r  r  staticmethodr  r  r  r  r  ra  r  r  r  rb  r  r  r   r>   rq   rf   rH  rH    s   J(D44
4 /1kk -NO"$ $ $ BC	B	B&)	B;>	B		B'++>
'3R6: AF	3	3#'	39=	3		3 	3rq   rH  c                   [        U R                  R                  S/ 5      5      n[        U S5      (       d  U(       d  [	        XU5      $ U R                  5       n [        U5       nU /U-    H  n[        US5      (       d  0 Ul        [        US5      (       d  SUl        [        USS5      n[        U5       H@  nUR                  U5        UR                  5         [	        XeU5        UR                  5         MB     M     S S S 5        U R                  U5        g ! , (       d  f       N = f! U R                  U5        f = f)Nappend_imagesre  r  r  r>   r   )r'  r  r  r   r1  r  rH  r  r   r  r  r  rg  )	rj  r  rU  r  cur_idxtfimsnfrr   s	            rf   	_save_allr   	  s    ++OR@AM2z""=RX&&ggiG $tm+sM22&(COsO44(*C%c:q1 :CHHSMHHJ#8,KKM	 & , % 	 %$ 	s%   D+ &BD D+ 
D($D+ +D>z.tifz.tiffz
image/tiff)ro   r  r   r   )rw   r   rx   r   r   !tuple[IntegralLike, IntegralLike])rw   ru   rx   r   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]])r  ztuple[int, str, str]r   r   )rj  zImage.Imager  r$  rU  zstr | bytesr   r   )
__future__r   r&  r+  loggingr~  r  r  r}  collections.abcr   r   	fractionsr   numbersr   r   typingr	   r
   r   r   r    r   r   r   r   r   r   _binaryr   r}  r   r  r   
_deprecater   _typingr   _utilr   r   r   r   r   r   	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  rt  r%  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATAr  rE  r!  r  r   r  rm   r   r  rp   r{   r   r   r   r   ru   r  r   r   r   r   r  r   
_IFDv2Baser   r   r  r   r2  r/  ImageFileDirectoryrR  r  r1  BytesIOrH  r  register_openr  register_saveregister_save_allregister_extensionsregister_mime)kra  s   00rf   <module>r     sr  R # 	    	   4  $ 4 4 J J ! !  ! # ) -			8	$ 


 
  	   				
	
  	

	  %  u | x	
 x z { v  
= 
: 
 
> 
= 
?  
6!" 
6#$ 
6% * *:)?)?)AB)A)AB | D!T2| D!T2	|
 D!T2| D!T2| D!T2
| D!T2
| D!T2| D!T2| D!T2| D!T2| D!T2| D!T2| D!T2|  D!T2!|" D!T2#|$ D!T2%|& D!T2'|( D!T2)|* D!T2+|, D!T2-|. D!T2/|0 D!T21|2 D!T23|4 D!T25|6 D!T27|8 D!T29|: D!T2;|< D!T2=|> D!T2
?|@ D!T2
A|B D!T2
C|D D!T2
E|F D!T2G|H D!T2I|J D!UB!1K|L D!UB!1M|N D!UB!1O|P D!UB!3Q|R D!UB!2S|T D!UBU|V D!UBW|X D!UBY|Z D!UB[|\ D!UB]|^ D!UB_|` D!UBa|b D!UBc|d D!UBe|f D!VT"Lg|h D!VT"Li|j D!Y#^k|l D!Y#^m|n D!Y#%5o|p D!Y#%5q|r D!\2&(8s|t D!\2&(8u|v D!\4(/w|x D!\4(/y|z D!_f-/?{|| D!_f-/?}|~ D!'35F|@ D!'35FA|B D!\4(*:C|D D!\4(*:E|F D!_f-/@G|H D!_f-/@I|J D!'35GK|L D!'35GM|N D!\4(*:O|P D!\4(*:Q|R D!_f-/@S|T D!_f-/@U|V D!'35GW|X D!'35GY|Z D!\6*,<[|\ D!\6*,<]|^ D!\2&(:_|` D!\2&(:a|b D!%r*,@c|d D!%r*,@e|f D!%t,.Ag|h D!%t,.Ai|j D!%t,.Bk|l D!%t,.Bm|n D!%t,.Bo|p D!%t,.Bq|r D!T2s|t D!T2u|v D!T2w|x D!T2y|z D!T2{|| D!T2}|~ D!T2|@ D!T2A|B D!T2C|D D!T2E|F D!T2G|H D!T2I|J D!T2
K|L D!T2
M|N D!VT"KO|P D!VT"LQ|R D!VT"LS|T D!T2U|V D!T2W|X D!\2&(8Y|Z D!\2&(8[|\ D!_d+->]|^ D!_d+->_|` D!'02Da|b D!'02Dc|d D!%r*,@e|f D!%r*,@g|h D!T2
i|j D!T2
k|p D!Y#_q|r D!Y#_s|t D!Y#^u|v D!Y#^w|	| AyAA  uzz8$??:B?.%	'%25%&%	"-0&& G'( G'T /=sBC	$ S)JJP$J P$f (6  $(7  %IC<<S!D!U4&>>#3Fq3IJ!VD6?OC4HI  OS$X1 Xx + sHI'' sHz #r1at	$ #r1at	$	
 	4Q61
% #r1at	$ 	4Q61
% '2q!UD	) VRAud+ gr1a- '2q!UD	) 
E2q!Y- VRA|Q/ VRA|Q/ VRA|T2  gr1aD1!" 
E2q!Y-#$ xQ5$/%& gr1a-'( Q5$/Q5$/+	2s-l	i3"** i3X	8   M((- A   M((% 0   ,,i 8   -..0A B   M((, 7]D Cs   
`#