
     f1                   R   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
 d dlmZ d dlmZmZ d dlmZmZmZmZmZ ddlmZmZmZmZmZmZ dd	lmZ dd
lm Z! ddlm"Z" ddl#m$Z$ ddlm%Z%  ej&        e'          Z(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;d Z<d!Z=d"Z>d#Z?d$Z@d%ZAd&ZBd'ZCd(ZDd)ZEd*ZFd+ZGd,ZHd-ZId.ZJd/ZKd0ZLd1ZMd2ZNd3ZOd4ZPd5ZQd6ZRd7ZSd8ZTd9ZUd:ZVd;ZWi dd<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\ZXd] eXY                                D             ZZi e-d d^dd^d_fd`e.d d^dd^d_fd`e-d d^d=d^d_fdae.d d^d=d^d_fdae-dd^dd^d_fdbe.dd^dd^d_fdbe-dd^d=d^d_fdce.dd^d=d^d_fdce-d d^dddd_fdee.d d^dddd_fdee-d d^d=ddd_fdfe.d d^d=ddd_fdfe-dd^dddd_fdge.dd^dddd_fdge-dd^d=ddd_fdhe.dd^d=ddd_fdhe-d d^ddid_fdji e.d d^ddid_fdje-d d^d=did_fdke.d d^d=did_fdke-dd^ddid_fdle.dd^ddid_fdle-dd^d=did_fdme.dd^d=did_fdme-d d^ddnd_fdoe.d d^ddnd_fdoe-d d^d=dnd_fdpe.d d^d=dnd_fdpe-dd^ddnd_fdqe.dd^ddnd_fdqe-dddddnd_fdqe.dddddnd_fdqe-dd^d=dnd_fdre.dd^d=dnd_fdri e-dd^ddsd_fdte-d d^ddud_fdve-dd^ddud_fdve.dd^ddud_fdwe-dd^d=dud_fdxe-dddddud_fdye.dddddud_fdze-d d{dd|d_fd}e.d d{dd|d_fd~e-dd^dd|d_fde-ddddd|d_fde.ddddd|d_fde-dd{dd|d_fd}e.dd{dd|d_fd~e-dd^ddddfde.dd^ddddfde-d=d^ddd_fdi e.d=d^ddd_fde-d=d^d=dd_fde.d=d^d=dd_fde-d=d^ddd_fde.d=d^ddd_fde-d=d^dddfde.d=d^dddfde-d=d^dddfde.d=d^dddfde-d=d^dddfde.d=d^dddfde-d=d^ddd^fde.d=d^ddd^fde-d=d^dddfde.d=d^dddfde-d=d^dddfde.d=d^dddfdi e-d=d^ddddfde.d=d^ddddfde-d=d^dddfde.d=d^dddfde-d=d^dddfde.d=d^dddfde-d=d^dddfde.d=d^dddfde-d=d^ddd_fde.d=d^ddd_fde-d=d^ddd_fde.d=d^ddd_fde-d=d^dddfde.d=d^dddfde-d=d^ddd^fde.d=d^ddd^fde-d=d^ddddfdi e.d=d^ddddfde-d?d^dd^d_fde.d?d^dd^d_fde-d?d^d=d^d_fde.d?d^d=d^d_fde-d?d^dddd_fde.d?d^dddd_fde-d?d^d=ddd_fde.d?d^d=ddd_fde-d?d^ddid_fde.d?d^ddid_fde-d?d^d=did_fde.d?d^d=did_fde-d?d^ddnd_fde.d?d^ddnd_fde-d?d^dddfde-d?d^ddddfdi e.d?d^ddddfde-d?d^d=dnd_fde.d?d^d=dnd_fde-dCd^ddd_fde.dCd^ddd_fde-dCd^dddfde.dCd^dddfde-dCd^dddfde.dCd^dddfde-dCd^ddd_fde-dEd^ddnd_fdqe.dEd^ddnd_fdqe-dEd^ddd_fde.dEd^ddd_fde-dId^ddd_fde.dId^ddd_fdZ[ e\d e[D                       Z]g dZ^ e_ej`        dd          s e$dd           ddZad Zbd Zci Zdi Zed Zf G d de          ZgdÄ ZhdĄ Zidń Zjere
ekef         Zlne
Zl G dƄ del          Zmedem_d        eeem_e         e%jY                    D ]M\  ZnZoeop                    ddɦ          Zo eqemdeo eden         d                     eqemdeo eeen                    N[d[e[n[o G d̄ dem          ZrerZs G d΄ dej                  Zti dde-ddd^dfdde-dddndfdde-dddd=fdde-d?ddndfdde-d?ddd=fdde-dd=d|dfdde-dddudfdde-dd=dudfdde-dd?d|dfdde-d=dddfdde-d=ddd fdde-d=ddd=fdde-dCdddfdde-dEdddfdde-dIdddfdde.dd=d|dfdde.dddudfde.dd=dudfde.dd?d|dfdZud Zv G d d          ZwddZx ejy        etjz        etea            ej{        etjz        ev            ej|        etjz        ex            ej}        etjz        ddg            ej~        etjz        d           dS )    )annotationsN)MutableMapping)Fraction)NumberRational)IOTYPE_CHECKINGAnyCallableNoReturn   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32beo8)	deprecateTYPESFT   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  webpc                    i | ]\  }}||	S  r9   ).0kvs      V/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/PIL/TiffImagePlugin.py
<dictcomp>r>      s    BBBA1BBB    r   r9   )1z1;I)rA   z1;IR)rA   rA   )rA   z1;R)r!   )LzL;2I)rB   zL;2IR)rB   zL;2)rB   zL;2R)r%   )rB   zL;4I)rB   zL;4IR)rB   zL;4)rB   zL;4R)r-   )rB   zL;I)rB   zL;IR)rB   rB   )rB   zL;R)   )I;16zI;12)   )rD   rD   )I;16BrF   )rD   zI;16R)II;16S)rG   I;16BS)r#   )    )FF;32F)rK   F;32BF)rG   zI;32N)rG   I;32S)rG   I;32BS)r-   r-   )LArP   )r-   r-   r-   )RGBrQ   )rQ   zRGB;R)r-   r-   r-   r-   )RGBArR   r   )rQ   RGBX)r-   r-   r-   r-   r-   r   r   )rQ   RGBXX)r-   r-   r-   r-   r-   r-   )r   r   r   )rQ   RGBXXX)rR   RGBa)r   r   )rR   RGBaX)r   r   r   )rR   RGBaXX)r!   r   )rR   RGBAX)r!   r   r   )rR   RGBAXX)i  )rE   rE   rE   )rQ   zRGB;16L)rQ   zRGB;16B)rE   rE   rE   rE   )rR   zRGBA;16L)rR   zRGBA;16B)rQ   zRGBX;16L)rQ   zRGBX;16B)rR   zRGBa;16L)rR   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)LABrc   c              #  @   K   | ]}t          |d                    V  dS )r%   N)len)r:   key_tps     r=   	<genexpr>rg     s,      AAV#fQi..AAAAAAr?   )   MM *   II* s   MM* s   II *s   MM +s   II+ libtiff_support_custom_tagsz*Support for LibTIFF earlier than version 4rC   prefixbytesreturnboolc                $    | d d         t           v S Nr%   )PREFIXESrk   s    r=   _acceptrs     s    "1":!!r?   c                    t          |           dk    }t          |rd| z  n|                               |          }|r|d d d         n|S )Nr   )absIFDRationallimit_rational)valmax_valinvn_ds       r=   _limit_rationalr}   !  sR    
c((Q,C
-a#gg#
.
.
=
=g
F
FC$3ttt99$r?   c                    t          |           }|j        |j        f}t          |          |k     rt	          | t          |                    }t          |          |k    rt          | } t	          | |          }|S N)r   	numeratordenominatorminr}   rv   max)ry   rz   min_valfracr|   s        r=   _limit_signed_rationalr   '  sp    C==D
.$*
*C
3xx'c3w<<00
3xx'nc7++Jr?   c                      fd}|S )Nc                4     t          | j                  | S r   )getattr_val)selfargsops     r=   delegatez_delegate.<locals>.delegate=  s    %wty"%%t,,r?   r9   )r   r   s   ` r=   	_delegater   <  s#    - - - - - Or?   c                     e Zd ZdZ	 dZd/dZed             Zed             Zd Z	d0d
Z
d1dZd2dZd Zd Z	  ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed           Z ed!          Z ed"          Z ed#          Z  ed$          Z! ed%          Z" ed&          Z# ed'          Z$ ed(          Z% ed)          Z& ed*          Z' ed+          Z( ed,          Z) e*e+d-          r ed-          Z,d.S d.S )3rw   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   r   c                   t          |t                    r&|j        | _        |j        | _        |j        | _        dS t          |t                    r|j        | _        |j        | _        n|| _        || _        |dk    rt          d          | _        dS |dk    rt          |          | _        dS t          ||          | _        dS )z
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr   nanr   )	
isinstancerw   r   r   r   r   r   r   float)r   valuer   s      r=   __init__zIFDRational.__init__Q  s     e[)) 	#oDO % 1D
DIFeX&& 	,#oDO % 1D#DO +D!eDIIIA DIII 44DIIIr?   c                    | j         S r   )r   r   s    r=   r   zIFDRational.numeratork  s
    r?   c                    | j         S r   )r   r   s    r=   r   zIFDRational.denominatoro  s      r?   c                    | j         dk    r| j        | j         fS | j                            |          }|j        |j         fS )z

        :param max_denominator: Integer, the maximum denominator value
        :returns: Tuple of (numerator, denominator)
        r   )r   r   r   limit_denominator)r   max_denominatorfs      r=   rx   zIFDRational.limit_rationals  sF     q  >4#333I''88{AM))r?   rm   strc                D    t          t          | j                            S r   )r   r   r   r   s    r=   __repr__zIFDRational.__repr__  s    5##$$$r?   intc                4    | j                                         S r   )r   __hash__r   s    r=   r   zIFDRational.__hash__  s    y!!###r?   otherobjectrn   c                    | j         }t          |t                    r|j         }t          |t                    rt          |          }||k    S r   )r   r   rw   r   )r   r   ry   s      r=   __eq__zIFDRational.__eq__  sI    ie[)) 	JEeU## 	**Ce|r?   c                *    | j         | j        | j        gS r   )r   r   r   r   s    r=   __getstate__zIFDRational.__getstate__  s    	4?D,=>>r?   c                r    t                               | d           |\  }}}|| _        || _        || _        d S )Nr   )rw   r   r   r   r   )r   stater   r   r   s        r=   __setstate__zIFDRational.__setstate__  s@    T1%%%).&j,	$(r?   __add____radd____sub____rsub____mul____rmul____truediv____rtruediv____floordiv____rfloordiv____mod____rmod____pow____rpow____pos____neg____abs__	__trunc____lt____gt____le____ge____bool____ceil__	__floor__	__round____int__Nr@   rm   r   rm   r   )r   r   rm   rn   )-__name__
__module____qualname____doc__	__slots__r   propertyr   r   rx   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   r9   r?   r=   rw   rw   C  s        
 7I5 5 5 54   X ! ! X!* * *% % % %$ $ $ $   ? ? ?) ) ) i	""Gy$$Hi	""Gy$$Hi	""Gy$$H)M**K9^,,L9^,,LIo..Mi	""Gy$$Hi	""Gy$$Hi	""Gi	""Gi	""G	+&&IYx  FYx  FYx  FYx  Fy$$Hy$$H	+&&I	+&&Iwx## ')I&&' 'r?   rw   c                      fd}|S )Nc                    ddl m} | j                            d          r&| j        dd                              dd          |<   | ft
          <   | S )Nr   r   load_r'   _ )r   r   r   
startswithreplace_load_dispatch)funcr   idxsizes     r=   	decoratorz#_register_loader.<locals>.decorator  sd    ######=##G,, 	=qrr*223<<E#J"Djsr?   r9   )r   r   r   s   `` r=   _register_loaderr     s*          r?   c                      fd}|S )Nc                    | t           <   | S r   )_write_dispatch)r   r   s    r=   r   z#_register_writer.<locals>.decorator  s    #r?   r9   )r   r   s   ` r=   _register_writerr     s$         r?   c                    ddl m} | \  }}|||<   t          j        d           dfd	ft          |<   fdt
          |<   d S )Nr   r   =Tc                X    |                      t          |          z    |          S r   )_unpackre   )r   data
legacy_apifmtr   s      r=   <lambda>z!_register_basic.<locals>.<lambda>  s/    LLCII-4s44d;; r?   c                J     d                      fd|D                       S )Nr?   c              3  D   K   | ]}                     |          V  d S r   )_pack)r:   r   r   r   s     r=   rg   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>  s1      <<EC''<<<<<<r?   join)r   valuesr   s   ` r=   r   z!_register_basic.<locals>.<lambda>  s0    <<<<<V<<<<< r?   T)r   r   structcalcsizer   r   )idx_fmt_namer   r   namer   r   s       @@r=   _register_basicr     s    !NCdE#J?9s99%%D	
 	
 	
 	
 	
 	
N3   OCr?   c                     e Zd ZU dZi Zded<   i Zded<   	 	 	 dMdNdZ ed           Z	 ed           Z
edOd            Zej        dPd            ZdQdZdRdZd ZdSdZd Zd Zd  Zd! ZdTd#Zd$ Zd% Zd& Z e eeej        d'd(fej        d)d*fej        d+d,fej         d-d.fej!        d/d0fej"        d1d2fej#        d3d4fej$        d)d*fej%        d5d6fg	                      e&d7d7          dUd9            Z' e(d7          d:             Z) e&d;d7          dUd<            Z* e(d;          d=             Z+ e&d>d?          dUd@            Z, e(d>          dA             Z- e&dBd7          dUdC            Z. e(dB          dD             Z/ e&dEd?          dUdF            Z0 e(dE          dG             Z1dH Z2dI Z3dVdKZ4dL Z5dS )WImageFileDirectory_v2a  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, Callable[[ImageFileDirectory_v2, bytes, bool], Any]]r   zdict[int, Callable[..., Any]]r      II*     Nifhrl   rk   bytes | Nonegroup
int | Nonerm   Nonec                   t          |          s"dt          |           d}t          |          ||n	|dd         | _        | j        t          k    rd| _        n)| j        t          k    rd| _        nd}t          |          |d         dk    | _        || _        i | _	        	 | 
                                 | j        r|                     d	|d
d                   n|                     d|dd                   \  | _        d| _        dS )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+   Qr-   rB   r%   F)rs   reprSyntaxError_prefixMM_endianII_bigtiffr   tagtyperesetr   next_legacy_api)r   r   rk   r   msgs        r=   r   zImageFileDirectory_v2.__init__*  s     s|| 	#CT#YYCCCCc"""!'!3vvRaR<2DLL\RDLL"Cc"""A"
')'

*.-WDLLc!""g&&&T\\#sSTSUSUw=W=W 	 !r?   c                    | j         S r   )r  r   s    r=   r   zImageFileDirectory_v2.<lambda>O      4< r?   c                    | j         S r   )_offsetr   s    r=   r   zImageFileDirectory_v2.<lambda>P  r  r?   rn   c                    | j         S r   )r  r   s    r=   r   z ImageFileDirectory_v2.legacy_apiR  s    r?   r   r   c                $    d}t          |          )Nz"Not allowing setting of legacy api)	Exception)r   r   r  s      r=   r   z ImageFileDirectory_v2.legacy_apiV  s    2nnr?   c                Z    i | _         i | _        i | _        i | _        d | _        d | _        d S r   )_tags_v1_tags_v2_tagdatar  _nextr  r   s    r=   r  zImageFileDirectory_v2.reset[  s0    (*(**,
r?   r   c                :    t          t          |                     S r   )r   dictr   s    r=   __str__zImageFileDirectory_v2.__str__c  s    4::r?   c                D      fd                                  D             S )z
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        c                V    i | ]%\  }}t          j        |j                  j        |&S r9   )r   lookupr   r   )r:   coder   r   s      r=   r>   z/ImageFileDirectory_v2.named.<locals>.<dictcomp>l  s@     
 
 
e OD$*--2E
 
 
r?   )itemsr   s   `r=   namedzImageFileDirectory_v2.namedf  s6    
 
 
 
#zz||
 
 
 	
r?   r   c                n    t          t          | j                  t          | j                  z            S r   )re   setr  r  r   s    r=   __len__zImageFileDirectory_v2.__len__q  )    3t}%%DM(:(::;;;r?   c                    || j         vr?| j        |         }| j        |         }| j        |         \  }} || || j                  | |<   | j         |         }| j        rt          |t          t          f          s|f}|S r   )r  r  r  r   r   r   tuplerl   )r   tagr   typr   handlerry   s          r=   __getitem__z!ImageFileDirectory_v2.__getitem__t  s    dm##=%D,s#C /4MD'dDO<<DImC ? 	:cE5>#B#B 	&C
r?   c                &    || j         v p|| j        v S r   )r  r  r   r,  s     r=   __contains__z"ImageFileDirectory_v2.__contains__      dm#;sdm';;r?   c                >    |                      ||| j                   d S r   )_setitemr   )r   r,  r   s      r=   __setitem__z!ImageFileDirectory_v2.__setitem__  s     c5$/22222r?   c           	        t           t          t          f}t          j        || j                  t          ||          r|gn|}|| j        vrj        rj        | j        |<   nt          j	        | j        |<   t          d |D                       r;t          d |D                       rt          j        nt          j        | j        |<   n8t          d |D                       rt          d |D                       rt          j        | j        |<   nt          d |D                       rt          j        | j        |<   nt          d |D                       rt          j        nt          j        | j        |<   nt          d |D                       rt          j        | j        |<   n[t          d |D                       rt          j        | j        |<   n-t          d	 |D                       rt          j        | j        |<   | j        |         t          j	        k    rd
 |D             }n'| j        |         t          j        k    rd |D             }| j        |         t          j        k    ot          |t(                    }|st+          fd|D                       }|r| j        n| j        }|sj        dk    s7| j        |         t          j        k    sj        t3          |          dk    rz|sx|r(| j        |         t          j        t          j        fv r|f}	 |\  ||<   d S # t4          $ r7 t7          j        d| dt3          |           d           |d         ||<   Y d S w xY w|||<   d S )Nc              3  @   K   | ]}t          |t                    V  d S r   )r   rw   r:   r<   s     r=   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s,      BBaz![11BBBBBBr?   c              3  "   K   | ]
}|d k    V  dS r   Nr9   r9  s     r=   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s&      66!qAv666666r?   c              3  @   K   | ]}t          |t                    V  d S r   )r   r   r9  s     r=   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  ,      <<As++<<<<<<r?   c              3  6   K   | ]}d |cxk    odk     nc V  dS )r   r   Nr9   r9  s     r=   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s6      ::a1>>>>E>>>>::::::r?   c              3  6   K   | ]}d |cxk     odk     nc V  dS )i i   Nr9   r9  s     r=   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s>      BBaX1111E1111BBBBBBr?   c              3  "   K   | ]
}|d k    V  dS r;  r9   r9  s     r=   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s&      ":":a16":":":":":":r?   c              3  @   K   | ]}t          |t                    V  d S r   )r   r   r9  s     r=   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  ,      >>!Au-->>>>>>r?   c              3  @   K   | ]}t          |t                    V  d S r   )r   r   r9  s     r=   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  r=  r?   c              3  @   K   | ]}t          |t                    V  d S r   )r   rl   r9  s     r=   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rB  r?   c                h    g | ]/}t          |t                    r|                    d d          n|0S )asciir   )r   r   encoder9  s     r=   
<listcomp>z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>  sJ        1;1c0B0BI),,,  r?   c                Z    g | ](}t          |t                    rt          |          n|)S r9   )r   r   r   r9  s     r=   rH  z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>  s1    LLL*Q"4"4;eAhhh!LLLr?   c              3  B   K   | ]}                     |          V  d S r   )cvt_enum)r:   r   infos     r=   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s/      DDE4==//DDDDDDr?   r   zMetadata Warning, tag z had too many entries: z, expected 1r   )r   rl   r   r   r"  r   r   r  type	UNDEFINEDallRATIONALSIGNED_RATIONALSHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEr  r+  r  r  lengthre   
ValueErrorwarningswarn)	r   r,  r   r   	basetypesr   is_ifddestrL  s	           @r=   r5  zImageFileDirectory_v2._setitem  s   UC(	sDJ//&ui88C%edl""y 6$(IS!!$,$6S!BB6BBBBB 6 66v666666))%5 L%%
 <<V<<<<< 6::6::::: 	,4NS))BB6BBBBB ,4,AS))  #":":6":":":::6HMM!)!5 S))
 >>v>>>>> 6(0DL%%<<V<<<<< 6(0DL%%>>v>>>>> 6(0DL%< 222   FF \#("333LLVLLLFc"hm3P
648P8P 	EDDDDVDDDDDF *=t}}  	[A|C HM11#Fq(8(8(8  #dl3/!(4   !&%c & & &1S 1 16{{1 1 1   #1IS				& DIIIs   "L+ +=M,+M,r,  c                    | j                             |d            | j                            |d            | j                            |d            d S r   )r  popr  r  r1  s     r=   __delitem__z!ImageFileDirectory_v2.__delitem__  sP    #t$$$#t$$$#t$$$$$r?   c                n    t          t          | j                  t          | j                  z            S r   )iterr'  r  r  r   s    r=   __iter__zImageFileDirectory_v2.__iter__  )    C&&T]););;<<<r?   c                <    t          j        | j        |z   |          S r   )r   unpackr	  )r   r   r   s      r=   r   zImageFileDirectory_v2._unpack  s    }T\C/666r?   c                6    t          j        | j        |z   g|R  S r   )r   packr	  )r   r   r   s      r=   r   zImageFileDirectory_v2._pack  s!    {4<#-77777r?   HshortrB   longbzsigned bytehzsigned shortlzsigned longr   r   ddoubler  long8r   Tc                    |S r   r9   r   r   r   s      r=   	load_bytezImageFileDirectory_v2.load_byte      r?   c                    t          |t                    rt          |          }t          |t                    rt          |f          }|S r   )r   rw   r   rl   r   r   s     r=   
write_bytez ImageFileDirectory_v2.write_byte  sC    dK(( 	t99DdC   	"$>>Dr?   r!   c                l    |                     d          r
|d d         }|                    dd          S )N    ru   zlatin-1r   )endswithdecoderu  s      r=   load_stringz!ImageFileDirectory_v2.load_string   s7    == 	9D{{9i000r?   c                    t          |t                    rt          |          }t          |t                    s|                    dd          }|dz   S )NrF  r   r|  )r   r   r   rl   rG  r   r   s     r=   write_stringz"ImageFileDirectory_v2.write_string  sP     eS!! 	JJE%'' 	5LL)44Eu}r?   r'   r-   c           
         |                      t          |          dz   d|          }fdt          fdt          |d d d         |dd d                   D                       S )Nr%   rB   c                0    r| |fnt          | |          S r   rw   arn  r   s     r=   combinez4ImageFileDirectory_v2.load_rational.<locals>.combine       '>Aq66[A->->>r?   c              3  6   K   | ]\  }} ||          V  d S r   r9   r:   numdenomr  s      r=   rg   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>  3      VVZS%WWS%((VVVVVVr?   r!   r   r   re   r+  zipr   r   r   valsr  s     ` @r=   load_rationalz#ImageFileDirectory_v2.load_rational      ||s4yyA~000$77	? 	? 	? 	? 	? VVVV3tCCaCy$qtRSt*;U;UVVVVVVr?   c                F     d                      fd|D                       S )Nr?   c              3  P   K   | ] } j         d gt          |d          R  V  !dS )2Ll    N)r   r}   r:   r   r   s     r=   rg   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>  sR       
 
DHJDJt?odI>>???
 
 
 
 
 
r?   r   r   r   s   ` r=   write_rationalz$ImageFileDirectory_v2.write_rational  s?    xx 
 
 
 
LR
 
 
 
 
 	
r?   r+   c                    |S r   r9   ru  s      r=   load_undefinedz$ImageFileDirectory_v2.load_undefined  rw  r?   c                    t          |t                    rt          |          }t          |t                    r#t          |                              dd          }|S )NrF  r   )r   rw   r   r   rG  r  s     r=   write_undefinedz%ImageFileDirectory_v2.write_undefined"  sQ    e[)) 	JJEeS!! 	:JJ%%gy99Er?   
   c           
         |                      t          |          dz   d|          }fdt          fdt          |d d d         |dd d                   D                       S )Nr%   rp  c                0    r| |fnt          | |          S r   r  r  s     r=   r  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine.  r  r?   c              3  6   K   | ]\  }} ||          V  d S r   r9   r  s      r=   rg   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>1  r  r?   r!   r   r  r  s     ` @r=   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rational*  r  r?   c                F     d                      fd|D                       S )Nr?   c           	   3  R   K   | ]!} j         d gt          |dd          R  V  "dS )2lii   N)r   r   r  s     r=   rg   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>5  sX       
 
 DJtP4T9hOOPPP
 
 
 
 
 
r?   r   r  s   ` r=   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rational3  s?    xx 
 
 
 

 
 
 
 
 	
r?   c                    |                     |          }t          |          |k    r%d| dt          |           d}t          |          |S )Nz&Corrupt EXIF data.  Expecting to read  bytes but only got z. )readre   OSError)r   fpr   retr  s        r=   _ensure_readz"ImageFileDirectory_v2._ensure_read:  sj    ggdmms88tL%)L L?B3xxL L L  #,,
r?   c           
     
   |                                   |                                | _        	 | j        r*|                     d|                     |d                    n)|                     d|                     |d                    d         }t          |          D ]G}| j        r*|                     d|                     |d                    n)|                     d|                     |d	                    \  }}}}t          j        || j	                  j
        }t          j        |d
          }	d| d| d|	 d| d	}
	 | j        |         \  }}n,# t          $ r t                              d|
|           Y w xY w||z  }|| j        rdndk    r|                                }|                     | j        rdnd|          \  }|
d| d| z  }
|                    |           t%          j        ||          }|                    |           n
|d |         }t)          |          |k    rFt+          j        d| dt)          |           d|            t                              |
           |st                              |
           || j        |<   || j        |<   |
d|dk    rd|z  nt3          |          z   z  }
t                              |
           I| j        r*|                     d|                     |d                    n)|                     d|                     |d                    \  | _        d S # t6          $ r,}
t+          j        t9          |
                     Y d }
~
d S d }
~
ww xY w)Nr  r-   rk  r!   r   HHQ8s   HHL4srC   unknownztag:  (
) - type: )z%s - unsupported type %sr%   rB   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r  z. Skipping tag 
 - value: rJ   <table: %d bytes>)r  tellr  r  r   r  ranger   r"  r   r   r   getr   KeyErrorloggerdebugseekr   
_safe_readre   r[  r\  r  r  r  r  r  r   )r   r  	tag_countir,  r-  countr   tagnametypnamer  	unit_sizer.  r   hereoffsets                   r=   loadzImageFileDirectory_v2.loadD  s   

wwyy=	 =AS$"3"3B":":;;;\\#t'8'8Q'?'?@@	I
 9%% ." ." }JDLL$*;*;B*C*CDDDgt/@/@R/H/HII &S% #/#tz::?)C33IgIIIIII3III)-)<S)A&Iww   LL!;S#FFFH y(4111557799D $DM-JSSsD Q QIVMTMMVMMMCGGFOOO$/D99DGGDMMMM;Dt99$$M/-1/ /GJ4yy/ /),/ /  
 LL%%% LL%%%%)c"$'S!|26))'$..d  S!!!! =AS$"3"3B":":;;;\\#t'8'8Q'?'?@@ TYYY
  	 	 	M#c((###FFFFF	s=   DM EM &F =M ?F  G
M 
N!M==Nr   c                   |                      dt          | j                            }g }|t          |          z   t          | j                  dz  z   dz   }d }t          | j                                                  D ]\  }}|t
          k    rt          |          }| j                            |          }t          	                    d||t          |                     |t          j        k    ot          |t                    }|rc| j        dk    rd}	nd}	t!          |	|          }
| j        |         }|                                D ]
\  }}||
|<   |
                    |          }n.t          |t$                    r|n|f} | j        |         | g|R  }t          j        || j                  j        }|rd	nt/          j        |d
          }d| d| d| d| d	}|dt          |          dk    rdt          |          z  nt1          |          z   z  }t          	                    |           |rd}nD|t          j        t          j        t          j        fv rt          |          }nt          |          }t          |          dk    r0|                    ||||                    dd          df           C|                    ||||                      d|          |f           |t          |          dz   dz  dz  z  }|^||         \  }}}}}|rd}t=          |          |                      d|                     d|          d         |z             }|||||f||<   |D ]]\  }}}}}t          	                    d|||t          |          t          |                     ||                      d||||          z  }^|dz  }|D ]$\  }}}}}||z  }t          |          dz  r|dz  }%|S )Nrk  rC   r%   zTag %s, Type: %s, Value: %sr  s   II*    s   MM *   )r   ifdr  zsave: r  r  r  r  rE   r  r   r|  r?   rB   r!   z&multistrip support not yet implementedr   z%s %s %s %s %sr  s       ) r   re   r  sortedr$  STRIPOFFSETSr  r  r  r  r  r   rT  r   r  r	  r   tobytesr+  r   r"  r   r   r   r   rX  rW  rN  appendljustNotImplementedErrorr   )r   r  resultentriesstripoffsetsr,  r   r-  r^  r   r  r   ifd_tag	ifd_valuer   r  r  r  r  s                      r=   r  zImageFileDirectory_v2.tobytes  s5   CT]!3!344#f++%DM(:(:R(??!C !!4!4!6!677 (	3 (	3JCl"""7||,""3''CLL6S$u++NNNHM)Ej.E.EF @<3&&7CC7C+Cs;;;s+*0,,.. - -&GY#,CLL{{6**",UE":":H0t+C0????oc4:66;G%Dee59S)+D+DGF7FFcFFWFFFFFC<36t99??#c$ii//F C LL  $8JKKKD		F4yyA~~S%Au1E1EsKLLLLS%C1H1H$OPPP3t99q=Q.22 #+2<+@(CeUD />)#...JJsDLLe$<$<Q$?&$HIIE$'eUD$@GL! -4 	B 	B(CeUDLL)3UDKKdTTTdjj#sE5AAAFF 	+ -4 	  	 (CeUDdNF4yy1}  %r?   c                6   |                                 dk    r2|                    | j        |                     ddd          z              |                                 }|                     |          }|                    |           |t          |          z   S )Nr   HL*   r-   )r  writer  r   r  re   )r   r  r  r  s       r=   savezImageFileDirectory_v2.save  s}    7799>>HHT\DJJtR$;$;;<<<f%%
F##r?   )r   NN)r   rl   rk   r   r   r   rm   r   )rm   rn   )r   rn   rm   r   rm   r   r   r   )r,  r   rm   r   r   rS   )6r   r   r   r   r   __annotations__r   r   r   rk   r  r   setterr  r  r%  r(  r/  r2  r6  r5  rb  re  r   r   listmapr   r   rR  rT  SIGNED_BYTErS  rU  FLOATrV  IFDLONG8r   rv  r   rz  r  r  r  r  r  r  r  r  r  r  r  r  r9   r?   r=   r   r     s9        : :x VXNWWWW57O7777 )# 	#! #! #! #! #!J X//00FX//00F      X           	
 	
 	
< < < <	 	 	< < <3 3 3N N N`% % % %
= = =7 7 78 8 8 	Dg.V,%sM:&^<%sM:g.#x0sF+g.
	
 	
  " a    a   a1 1 1 1
 a   aW W W W a
 
 

 a    a   b!W W W W b
 
 
  A A AFK K K KZ$ $ $ $ $r?   r   r   r   r   write_c                       e Zd ZU dZ fdZ ed           Z ed           Zded<   	 e	d             Z
dd
Zd ZddZd Zd Zd Z xZS )ImageFileDirectory_v1a  This class represents the **legacy** interface to a TIFF tag directory.

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

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

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

    Values are returned as a tuple.

    ..  deprecated:: 3.0.0
    c                H     t                      j        |i | d| _        d S )NT)superr   r  )r   r   kwargs	__class__s      r=   r   zImageFileDirectory_v1.__init__  s-    $)&)))r?   c                    | j         S r   )r  r   s    r=   r   zImageFileDirectory_v1.<lambda>   s     r?   c                    | j         S r   )r  r   s    r=   r   zImageFileDirectory_v1.<lambda>  s    DM r?   zdict[int, int]r  c                p     | |j                   }|j        |_        |j        |_        |j        |_        |S )a2  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`

        rr   )rk   r  r  r  )clsoriginalr  s      r=   from_v2zImageFileDirectory_v1.from_v2  s:     c)))(&=
r?   rm   r   c                    t          | j                  }t          | j                  |_        t          | j                  |_        t          | j                  |_        |S )a2  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`

        rr   )r   rk   r  r  r  r  )r   r  s     r=   to_v2zImageFileDirectory_v1.to_v2  sN     $4;777DM**4<((DM**
r?   c                &    || j         v p|| j        v S r   )r  r  r1  s     r=   r2  z"ImageFileDirectory_v1.__contains__*  r3  r?   r   c                n    t          t          | j                  t          | j                  z            S r   )re   r'  r  r  r   s    r=   r(  zImageFileDirectory_v1.__len__-  r)  r?   c                n    t          t          | j                  t          | j                  z            S r   )rd  r'  r  r  r   s    r=   re  zImageFileDirectory_v1.__iter__0  rf  r?   c                >    dD ]}|                      |||           d S N)FT)r5  )r   r,  r   r   s       r=   r6  z!ImageFileDirectory_v1.__setitem__3  s4    ' 	2 	2JMM#uj1111	2 	2r?   c           	        || j         vrQ| j        |         }| j        |         }| j        |         \  }}dD ]$}|                     | || ||          |           %| j         |         }t          |t          t          f          s|f}|S r  )r  r  r  r   r5  r   r+  rl   )r   r,  r   r-  r   r.  legacyry   s           r=   r/  z!ImageFileDirectory_v1.__getitem__7  s    dm##=%D,s#C /4MD'' H Hc774v#>#>GGGGmC #u~.. 	&C
r?   )rm   r   r   )r   r   r   r   r   r   tagstagdatar  classmethodr  r  r2  r(  re  r6  r/  __classcell__r  s   @r=   r  r    s          $          8..//Dh1122G !  ["   "< < << < < <= = =2 2 2
 
 
 
 
 
 
r?   r  c                       e Zd ZdZdZdZd fd	ZddZed	             Z	ddZ
ddZddZd Z fdZddZd Zd Z xZS )TiffImageFileTIFFz
Adobe TIFFFNc                l    d | _         	 d | _        	 t                                          ||           d S r   )tag_v2r,  r  r   )r   r  filenamer  s      r=   r   zTiffImageFile.__init__Q  s7    5"X&&&&&r?   rm   r   c                "   | j                             d          }|d         dk    r|| j                             d          z  }t          |          | _        d| _        | j        j        x| _        | _        d| _        | j         | _	        g | _
        d| _        t                              d           t                              d| j                   t                              dt          |                     |                     d	           dS )
z#Open the first image in a TIFF filer-   r!   r  Nru   z*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )r  r  r   r  r  r  _TiffImageFile__first_TiffImageFile__next_TiffImageFile__frame_fp
_frame_pos	_n_framesr  r  r  _seek)r   r   s     r=   _openzTiffImageFile._openZ  s     gll1ooq6R<<47<<??"C+C00  &*[%55t{7%'%)2333_dl333[$s)),,, 	

1r?   c                .   | j         |                                 }|                     t          | j                             | j         1|                     |                                 dz              | j         1|                     |           | j         S )Nr   )r  r  r  re   r  r  )r   currents     r=   n_frameszTiffImageFile.n_framesu  s}    >!iikkGJJs4?++,,,.(

499;;?+++ .(IIg~r?   framer   c                    |                      |          sdS |                     |           t          j        | j                   t          j                            | j        | j                  | _        dS )z%Select a given frame as current imageN)	_seek_checkr  r   _decompression_bomb_checkr   corenewmodeim)r   r  s     r=   r  zTiffImageFile.seek  sc    && 	F

5 	'	222*..DI66r?   c                Z   | j         | _        | j                                         t          | j                  |k    r| j        sd}t          |          t                              d|| j	        | j        | j                                                   | j        dk    rd}t          |          | j                            | j                   | j                            | j                   t                              d| j                                                   | j                            | j                   | j        j        | j        v rd| _        n| j        j        | _        | j        dk    r
|dz   | _        t          | j                  dk    r| j        dk    | _        | xj	        dz  c_	        t          | j                  |k    | j                            | j        |                    | j                            | j                   t$          | j        v r| j        t$                   | j        d<   nd| j        v r| j        d= |                                  t*                              | j                  x| _        | _        || _	        |                                  d S )	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  re   r  r  EOFErrorr  r  r	  rZ  r  r  r  r  r  r  is_animatedXMPrL  _reload_exifr  r  r,  r  _setup)r   r  r  s      r=   r  zTiffImageFile._seek  sG   ( 	$/""e++; $3smm#LLK   {e##/ oo%GLL%%%O""4;///LL5tw||~~FFFKTW%%%{4?22  "k.{a!&4?##q((#';!#3 LLALL9 $/""e++: 	T_U+,,,!!!$+#{3/DIedi	% 3;;DKHHH48r?   c                    | j         S )zReturn the current frame number)r	  r   s    r=   r  zTiffImageFile.tell  s
    |r?   c                   i }| j                             t          j        j                  }|r|dd         dk    rt          |dd                   }t          j        |d         dz   dz            dz  }t          |d|z   d|z                      }|d|z   d|z   |z            }d|i||<   |t          j        d|z   |z   dz            dz  d         }|dd         dk    |S )	a5  
        Returns a dictionary of Photoshop "Image Resource Blocks".
        The keys are the image resource ID. For more information, see
        https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1037727

        :returns: Photoshop "Image Resource Blocks" in a dictionary.
        Nr%   s   8BIMr)   r   r!   r  r   )	r  r  r   BaseImageResourcesi16mathceili32)r   blocksry   idnr   r   s          r=   get_photoshop_blocksz"TiffImageFile.get_photoshop_blocks  s     koohm:;; 	@bqb'W$$QqS]]Is1vzQ.//!33q1urAv~.//26BFTM12$d^r
$)R!Vd]a$7881<>>? bqb'W$$ r?   c                    | j         r| j        r|                                 S t                                                      S r   )tileuse_load_libtiff_load_libtiffr  r  )r   r  s    r=   r  zTiffImageFile.load  s;    9 	(. 	(%%'''ww||~~r?   c                \   | j         s]d| _        | j                                         |                                 }t
          j        D ]}||vr|                    |           t          j	        | d           t          j        j        | j        v r| j        t          j        j        = d S d S )NT)in_place)r  !_close_exclusive_fp_after_loadingr  r  getexifr   TAGS_V2_GROUPSget_ifdr   exif_transposer   r#  Orientationr  )r   exifkeys      r=   load_endzTiffImageFile.load_end  s      	"59D2 GLLNNN <<>>D. " "d??S!!!!t4444=$33HM5666 43r?   c                    t           j                             |            |                                  t          | j                  dk    sd}t          |          | j        d         d         }t          | j        d         d                   }	 t          | j        d          o| j        	                                }t          | j        d          r| j        
                                 n# t
          $ r d}Y nw xY w|r||d<   t          j        | j        d	t          |          | j                  }	 |                    | j        |           n$# t"          $ r}d
}t          |          |d}~ww xY w| j        o| j         }t          | j        d          rJt(                              d           |                    | j                                                  \  }}	n|rOt(                              d           |s| j                            d           |                    d          \  }}	nct(                              d           | j                            d           |                    | j                                                  \  }}	g | _        d| _        |                                  |r | j                                         d| _        |	dk     rt          |	          t           j                             |           S )zWOverload 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 reading)r   r  load_preparere   r.  r  r  r   r  r=  r>  _getdecoderr  r+  decoderconfigsetimager  rZ  _exclusive_fpr  r  r  r~  r@  r  r  readonlyr;  close)
r   r  extentsr   r  decodereclose_self_fpr+  errs
             r=   r0  zTiffImageFile._load_libtiff  s    	49~~""(C#,, )A,q/DIaLO$$

	(++@0@0@B tw((   	 	 	 BBB	
  	DG#Iy%++t/A
 
	&TWg.... 	& 	& 	&*C#,,A%	& *C43C/C47J'' 	4 LLPQQQ^^DG$4$4$6$677FAss 	4LLNOOO   Q^^G,,FAss LLFGGGGLLOOO^^DGLLNN33FAs	 	GMMOOODG77#,,{%%%s+   AC. .C=<C=6E 
E3E..E3c                   d| j         v rd}t          |          t          | j                             t          d                   | _        | j                             t          d          | _        | j                             t          d          }| j        dk    rd}| j                             t          d          }t                              d           t                              d| j                   t                              d	|           t                              d
| j                   t                              d|           t                              d| j                            t                               t          | j                             t                              }t          | j                             t                               }||f| _        t                              d| j                   | j                             t&          d          }t)          |          dk    r,t+          |          t-          |          cxk    rdk    rn nd}| j                             t.          d          }| j                             t0          d          }|dv rd}	n|dk    rd}	nd}	|	t)          |          z  }	t)          |          }
| j                             t2          | j        dk    r|dv rdnd          }|t4          k    r,t                              d|           d}t9          |          ||
k     r|d|         }n||
k    r|
dk    r||z  }t)          |          |k    rd}t9          |          | j         j        |||||f}t                              d|           	 t<          |         \  | _        }n># t@          $ r1}t                              d           d}t9          |          |d}~ww xY wt                              d|           t                              d| j!                   | j        | j"        d<   | j                             tF          d          }| j                             tH          d          }|rt|rr| j                             tJ                    }|dk    r||f| j"        d <   n@|dk    r|d!z  |d!z  f| j"        d <   n'|||f| j"        d <   ||f| j"        d"<   n||f| j"        d"<   dx}x}}g | _&        tN          p
| j        d#k    | _(        | j(        r|dk    rH|dd         dz   |dd         z   }t                              d|           t<          |         \  | _        }|d$k    rd%}d&|v r|)                    d&d'          }d(|v r|)                    d(d'          }|dk    r| j        d)k    r| j        dk    rd*}|| j        d+| j         j*        f}| j&        +                    d,dd||fd|f           ntX          | j         v stZ          | j         v rqtX          | j         v r@| j         tX                   }| j                             t\          |          }| j        d         }nP| j         tZ                   }| j                             t^                    }| j                             t`                    }|D ]}||z   |k    r|tc          |          z  d-z  }nd}|}| j        dk    r||         }||	z  }|t          |          df}| j&        +                    | j        ||t-          ||z   |          t-          ||z   |          f||f           ||z   }|| j        d         k    r!d||z   }}|| j        d         k    r	dx}}|dz  }n+t                              d.           d}t9          |          td          | j         v r| j         td                   | j"        d/<   | j!        d0v rKd1 | j         tf                   D             }ti          j5        d2d36                    |                    | _7        dS dS )4z-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
- size: %sr@   r9   )r!   r)   r-   r#   r'   r%   )r!   r)   z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelNzunknown data organizationzformat key: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %scompressionr!   dpigRQ@
resolutionr    rD   I;16Nz;16Bz;16Nz;16Lr,   rQ   Fr?  r-   z- unsupported data organizationicc_profiler]   r_   c                2    g | ]}t          |d z            S r   r   )r:   rn  s     r=   rH  z(TiffImageFile._setup.<locals>.<listcomp>  s"    CCCr!s(||CCCr?   RGB;Lr?   )8r  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  r,  YCBCRSUBSAMPLINGr   
IMAGEWIDTHIMAGELENGTH_sizer   SAMPLEFORMATre   r   r   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr  rk   	OPEN_INFO_moder  r  rL  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITr.  READ_LIBTIFFr/  r   r  r  r  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r    r   palette)r   r  photo	fillorderxsizeysizesample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelr:  rawmoderJ  xresyresresunitxylayerr  offsetsro  wr  stridetile_rawmoderu  s                                r=   r   zTiffImageFile._setupB  sO    T[  ?C#,, -T[__[!-L-LM%)[__5I1%M%M"  :A>> ++EKOOIq11	&'''($*;<<<7???143MNNN'333.=M0N0NOOO DKOOJ//00DKOOK0011E\
\49---d;;}!!c-&8&8C<N<N&S&S&S&SRS&S&S&S&S&S !MKOOM488	koolB77IIIaZZIIIS%%%	y>> KOO"k11evooAA1
 

 222LL@BS   8Cc"""/// ""4#4"45II!1116F!6K6K "$55Iy>>...-Cc""" K
 	%s+++	*"+C.DJ 	* 	* 	*LL/000&Cc"")	*
 	%w///%ty111#'#4	- {|Q//{|Q// 	5D 	5kooo66G!||$($<	%  A$(4K#=	%  $($<	%  +/*	,''*.*	,' A	 , J0AU0J  Y	# A~~"1"gns122w.-s333 '0n#
G
 &  !  !//&&99  !//&&99
 

%//.!33 $+UDK4FGAIi!Qu)=q!DEEEET[((K4;,F,Ft{**+l3KOOL%88IaL +k2KOOI..KOOJ//! # #q55==Y/!3FFF&-22#*5>Li'F!3v;;2	  )As1q5%00#a!eU2C2CD	   E	!$$a!eqADIaL(( !	A
7#: LL:;;;-Cc""" $$'+{:'>DIm$ 9##CCT[-BCCCG'+GSXXg5F5FGGDLLL $#s   4O
 

P,P  P)NNr  )r  r   rm   r   r   )r   r   r   formatformat_descriptionr3  r   r  r   r  r  r  r  r,  r  r;  r0  r   r  r  s   @r=   r  r  L  s&       F%(-%' ' ' ' ' '   6   X	7 	7 	7 	7. . . .`     *    
7 7 7 7*S& S& S&j^H ^H ^H ^H ^H ^H ^Hr?   r  rA   rB   rP   r]   r_   rG   rN   rD   rH   rK   rL   rQ   rT   rR   r`   YCbCrrc   rO   rF   rI   rM   )rI   rM   c                   	 t           | j                 \  }}}}}}n-# t          $ r }	d| j         d}
t          |
          |	d }	~	ww xY wt	          |          }| j        }| j        }	 |d         }nA# t          $ r4 | j                            d          }t          |t                    rd }Y nw xY w|d}n|dk    rd}n|dk    rd	}t          p|dk    }d
|t          <   | j        d         |t          <   | j        d
         |t          <   d|v r	|d         }nNd|v rH|d         }t          |t                     r*t#          j                    }|                    |           |}ni }t(                              dt-          |                     t          |t.                    r|                                }|D ]}t          |t"          j                  r'|t2          j        v r|                    |          ||<   n|                    |          ||<   	 |j        |         |j        |<   r# t:          $ r Y ~w xY wi }t=          | d          r| j                                        }i |tA          | di           }tB          tD          fD ]	}||v r||= 
t=          | d          rtF          tH          tJ          tL          tN          tP          fD ]n}|| j)        v rc|tL          k    r.| j)        j        |         t2          j*        t2          j+        fvr||= D| j)        |         ||<   | j)        j        |         |j        |<   o|                    d| j                            d                    }|r
||tX          <   tZ          dftH          dftJ          dftH          dftJ          dftF          dft\          dft^          dft`          dftb          dff
D ]\  }}||v r||         ||<   |                    d          }|r*d|tF          <   |d         |tH          <   |d
         |tJ          <   |dk    r4||td          <   tg          |          d
k    rtg          |          |th          <   |
||tj          <   |d
k    r
||tD          <   tl          |vr||tl          <   n| j        dv r|tl                   dk    r| j        dk    rp| 7                                }|                                }tq          |j9                  D ]0}tq          |j:                  D ]}|||f         d k    rdnd |||f<   1|} ntw          j<        |           } | j        d!v rw| j=        >                    d"d#          }g }tg          |          d$z  }tq          d$          D ].} |d% ||| z  || d
z   z           D             z  }|dgd&|z
  z  z  }/||t~          <   |t                   |t                   }"}!tg          |          |!|d         z  d'z   d(z  z  }#t          |vrl|rV|                    d)t                    }$|#dk    rd
nt          |$|#z  |"          }%|dk    rt          |%d'z   d(z  d(z  |"          }%n|"}%|%dk    rd
}%|%|t          <   |#dk    rd
n|#|t                   z  }&|"|t                   z   d
z
  |t                   z  }'|&d*k    rt2          jC        |j        t          <   |&f|'d
z
  z  |#|"z  |&|'d
z
  z  z
  fz   |t          <   t          tq          d|&|'z  |&                    |t          <   t                              |d
          |t          <   | j        d+k    r>t          d,t          d-iK                                D ]\  }}(|L                    ||(           t          t          t          t          g})|rd.|v r[|d.         }*t          |*t                    r|*dk     s|*d/k    rd0}
t          |
          |dk    rd1}
t          |
          |*|t          <   t(                              d2           t(                              d3t          |K                                                     d}+t=          |d4          rR	 |T                    d           t          jV        |W                                          }+n# t          jY        $ r Y nw xY wi },|)t          t          t          t          t          t          gz  })td          |d         i}-t          j^        |K                                |K                                          D ]\  }}(|t2          j_        vrtA          t"          j`        d5d6          s/||j        v r|j        |         |,|<   nIt          |(t          t          t          t           f          srt3          jc        |          jd        }.|.r|.|,|<   ||-vrc||)vr_t          |(t                    r|(e                    d7d8          d9z   |-|<   t          |(t                    rt          |(          |-|<   |(|-|<   tD          |-v r9tg          |-tD                             d
k    r|-tD                   d         |-tD          <   t(                              d:t          |-K                                                     | j        d;v rd<}t-          |-K                                          }/|/g                                 |||+||/|,f}0t#          jh        | j        d=|0|          }1|1i                    | j=        d>| j        z              	 |1e                    d@          d
d          \  }2}3|+s|j                    |3           |2rn;|+r&	 t          jk        |+           n# t          $ r Y nw xY w|2dk     rdA|2 dB}
t          |
          nC|)D ]}||= |l                    |          }4t          jn        | |dd>| j        z   |4||#d
ffg           dC|v r	|| _o        d S d S )DNzcannot write mode z as TIFFrr   rN  r    r*   r,   r2   r.   r   r   tiffinfor9  zTiffinfo Keys: %sr,  r  rR  descriptionrP  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightrO  r!   r@   )rA   rB   rA   r   rS  rQ   rV  r#   c                    g | ]}|d z  S rU  r9   r9  s     r=   rH  z_save.<locals>.<listcomp>  s    MMMQSMMMr?   r   r+   r-   
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=  rj   FrF  r   r|  zConverted items: %s)rF   rD   rQ  r?  rU   Ti @  zencoder error z when writing image file_debug_multipage)p	SAVE_INFOr  r  r  r   encoderinfoencoderconfigrL  r  r   r   WRITE_LIBTIFFrZ  r   r_  r`  rl   r   Exifr  r  r  r  r  r  r   r5  r6  r  r  r   r,  r   EXIFIFDrb  rl  rj  rk  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKr  r  rX  rN  rs  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTrc  re   re  rd  r\  copyr  heightwidthr   invertr  
getpalettert  ro  
STRIP_SIZEr   rT  STRIPBYTECOUNTSr+  r  COMPRESSION_INFO_REVrX  r^  REFERENCEBLACKWHITEr$  
setdefaultrp  rq  rn  TILEBYTECOUNTSrZ  JPEGQUALITYr  r  osdupr=  ioUnsupportedOperationOSUBFILETYPETRANSFERFUNCTIONSUBIFD	itertoolschainLIBTIFF_COREr  r   r   r"  rM  rG  rw   sort_getencoderrD  r  rG  r  r   _saver  )5r  r  r  r  rk   rv  r  bitsextrarJ  r  r  r  r  rN  r?  rL  r9  r:  
legacy_ifdsupplied_tagsr,  iccr   rO  inverted_impxr  r  lutcolormapcolorsr  r  ro  r  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imager   	blocklistr  r
  typesattsrM  r  r  encodererrcoder   r  s5                                                        r=   r  r  C  s   "6?6H3ee " " "427444cll!"  v
.
.
.C.K$M!-0   gkk-00k3'' 	K	
 		#	#		&	&*3{e3G !"CgajC
OwqzC [  :&	;		6"dE"" 	:<<DIIdOOOD
LL$d4jj111$-.. zz||  dEJ'' 	%C83J,J,J||C((CHHxx}}CH	#|C0CK 	 	 	D	 Jr5 $V\\^^
?z?WR2%>%>?M 		 # # -c" r8 > 
 	> 	>C bi.((RY->s-CM&L . . &c**!y~CH')y'8'=CK$ //-])C)C
D
DC
 J 
=)	|$	|$	~&	~&	+,	:	K 		K  ) )	T ;"4(CH
//%
 
 C
 # OFLFLt||!Mt99>>#&t99C !L{{"L!,,*/&''	J		3'A#Ba#G#G7c>>''))K!!##B;-.. = ={011 = =A$&q!tHOOqqBq!tHH=BB$$B	w+eug..SQq 	- 	-AMM#fqj6QU;K.K*LMMMMHsV|,,HH Hz?C,qAYY1tAw;?q01F3 	'OOL*EEM"(A++QQ3}7NPQ3R3RNf$$!$~'9a&?1%Da!H!HNQN*L#q[[fs<7H.HC--1c,6GGE!!'/}O$-/3Ca3GH
&*:Q*>??L C a"%557HII C ,//Q??C	w'f!=
 %''	' 	'JC NN3&&&&J^DI p
##!),Ggs++ &w{{gmm/ oo%f$$M oo%&C3444[&"5"56662x   	


fRYY[[))*     	
 	
	 tAw' $/#))++}7J7J7L7LMM 	& 	&JC
 (///uz+H%PP #+%%!$S!1E#JJ$US%e,DEE *#?3//4D *%)c
$3i#7#7eS)) & %Wi @ @5 HDII{33 & %eDII %DI4C\(:$;$;q$@$@!%l!3A!6D*F4::<<,@,@AAA 7'''G
 DJJLL!!		k3$>#BGY=II 0111	#NN955abb9MGT  	  	   Q;;D7DDDC#,, 
  	 	CC"eVbg-v7KLM	
 	
 	

 [((! )(s\    
AAA(A1 1;B/.B/H))
H65H6;b bbm! !
m.-m.c                      e Zd Zg dZh dZd*dZd+dZd+dZd+d	Zd,d
Z	d-dZ
d.dZej        fdZd+dZd/dZd+dZd0dZd.dZd.dZd1dZd1dZd1dZd1d Zd1d!Zd+d"Zd+d#Z	 d2d3d(Zd)S )4AppendingTiffWriter)r   r   r   r!   r%   r-   r   r   r!   r%   r-   r%   r-   r%   r!   r%   r-   >       	     r   r   Fc                D   t          |d          r|| _        d| _        nN|| _        d| _        	 t	          ||rdnd          | _        n%# t
          $ r t	          |d          | _        Y nw xY w| j                                        | _        |                                  d S )Nr  FTzw+bzr+b)	r   r   close_fpr   openr  r  	beginningsetup)r   fnr  s      r=   r   zAppendingTiffWriter.__init__  s    2v 		)DF!DMMDI DM)b3"9%%E:: ) ) )b%)

s   A	 	A+*A+rm   r   c                   | j                             | j        t          j                   d | _        d| _        | j                             d          x| _        }|s	d| _	        d S d| _	        |dk    r| 
                    d           n-|dk    r| 
                    d           nd	}t          |          |                                  |                                  d S )
Nr   r%   TFri   r  rh   r  zInvalid TIFF file header)r   r  r  r  SEEK_SETwhereToWriteNewIFDOffsetoffsetOfNewPager  IIMMisFirst	setEndianRuntimeErrorskipIFDsgoToEnd)r   iimmr  s      r=   r  zAppendingTiffWriter.setup  s    DNBK000(,% 6;;q>>)	D 	DLF=  NN3]""NN3,Cs###r?   c                   | j         rd S | j                            | j                   | j                            d          }|sd S || j        k    rd}t          |          |                                 }|| j        z  }| j                            | j                   | 	                    |           | j                            |           | 
                                 d S )Nr%   z1IIMM of new page doesn't match IIMM of first page)r  r   r  r  r  r  r  readLongr  	writeLongfixIFD)r   r  r  
ifd_offsets       r=   finalizezAppendingTiffWriter.finalize  s    < 	F 	D()))v{{1~~ 	F49ECs###]]__
d**
D1222z"""Jr?   c                V    |                                   |                                  d S r   )r  r  r   s    r=   newFramezAppendingTiffWriter.newFrame  s     

r?   c                    | S r   r9   r   s    r=   	__enter__zAppendingTiffWriter.__enter__  s    r?   r   r   c                @    | j         r|                                  d S d S r   )r  rG  )r   r   s     r=   __exit__zAppendingTiffWriter.__exit__  s'    = 	JJLLLLL	 	r?   r   c                D    | j                                         | j        z
  S r   )r   r  r  r   s    r=   r  zAppendingTiffWriter.tell  s    v{{}}t333r?   c                    |t           j        k    r
|| j        z  }| j                            ||           |                                 S r   )r  r  r  r   r  r  )r   r  whences      r=   r  zAppendingTiffWriter.seek  s@    R[  d**FFF###yy{{r?   c                <   | j                             dt          j                   | j                                         }d|dz  z
  }d|cxk     rdk     r*n n'| j                             t          |                     | j                                         | _        d S )Nr   rE   )r   r  r  SEEK_ENDr  r  rl   r  )r   pos	pad_bytess      r=   r  zAppendingTiffWriter.goToEnd  s    Ar{###fkkmm rM	y2FLLy))***#v{{}}r?   endianr   c                n    || _         | j          d| _        | j          d| _        | j          d| _        d S )NrB   rk  HHL)r  longFmtshortFmt	tagFormat)r   r  s     r=   r  zAppendingTiffWriter.setEndian  sC    +(((;))) K,,,r?   c                ,   	 |                                  }|dk    r#| j                                        dz
  | _        d S | j                            |           |                                 }| j                            |dz  t          j                   )NTr   r%   rC   )r  r   r  r  r  	readShortr  SEEK_CUR)r   r  num_tagss      r=   r  zAppendingTiffWriter.skipIFDs  s}    	4JQ040A-FKK
###~~''HFKK2r{333	4r?   r   rl   r   c                6    | j                             |          S r   )r   r  ry  s     r=   r  zAppendingTiffWriter.write  s    v||D!!!r?   c                n    t          j        | j        | j                            d                    \  }|S )Nr!   )r   rh  r  r   r  r  s     r=   r  zAppendingTiffWriter.readShort  s(    =A??r?   c                n    t          j        | j        | j                            d                    \  }|S rp   )r   rh  r  r   r  r  s     r=   r  zAppendingTiffWriter.readLong  s(    =tv{{1~~>>r?   r   c                    | j                             dt          j                   | j                             t          j        | j        |                    }||dk    rd| d}t          |          d S d S )Nr%   wrote only  bytes but wanted 4	r   r  r  r	  r  r   rj  r  r  r   r   bytes_writtenr  s       r=   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLong  w    B$$$V[u%E%EFF$!););BBBBCs### %$););r?   c                    | j                             dt          j                   | j                             t          j        | j        |                    }||dk    rd| d}t          |          d S d S )Nr  r!   r   bytes but wanted 2)	r   r  r  r	  r  r   rj  r  r  r  s       r=   rewriteLastShortz$AppendingTiffWriter.rewriteLastShort  sw    B$$$V[%F%FGG$!););BBBBCs### %$););r?   c                    | j                             dt          j                   | j                             t          j        | j        |                    }||dk    rd| d}t          |          d S d S )Nr%   r  r  r  r  s       r=   rewriteLastLongz#AppendingTiffWriter.rewriteLastLong  r  r?   c                    | j                             t          j        | j        |                    }||dk    rd| d}t          |          d S d S )Nr!   r  r  )r   r  r   rj  r  r  r  s       r=   
writeShortzAppendingTiffWriter.writeShort$  s_    V[%F%FGG$!););BBBBCs### %$););r?   c                    | j                             t          j        | j        |                    }||dk    rd| d}t          |          d S d S )Nr%   r  r  )r   r  r   rj  r  r  r  s       r=   r  zAppendingTiffWriter.writeLong*  s_    V[u%E%EFF$!););BBBBCs### %$););r?   c                `    |                                   | j                                         d S r   )r  r   rG  r   s    r=   rG  zAppendingTiffWriter.close0  s"    r?   c                   |                                  }t          |          D ]g}t          j        | j        | j                            d                    \  }}}| j        |         }||z  }|dk    }|s1|                                 | j	        z   }	| 
                    |	           || j        v r| j                                        }
|r>|                     ||dk    |dk               | j                            |
dz              nT| j                            |	           |                     ||dk    |dk               | j                            |
           d x}	}
@|r%| j                            dt          j                   id S )Nr-   r%   r!   )isShortisLong)r  r  r   rh  r  r   r  
fieldSizesr  r  r  Tagsr  
fixOffsetsr  r  r	  )r   r
  r  r,  
field_typer  
field_size
total_sizeis_localr  cur_poss              r=   r  zAppendingTiffWriter.fixIFD4  s   >>##x 	, 	,A%+]4>46;;q>>%R%R"CU4J#e+J!QH -4+??$$V,,,di&++-- 
)OO
a*PQ/ $    FKK!,,,,FKK'''OO
a*PQ/ $    FKK(((#'' ,Ar{+++=	, 	,r?   r  r"  rn   r#  c                V   |s|sd}t          |          t          |          D ]}|r|                                 n|                                 }|| j        z  }|r|dk    r|dk    rd}t          |          |                     |           | j                            dt          j	                   | 
                    t          j                   | j                            dt          j	                   |r|                     |           |                     |           d S )Nz offset is neither short nor longr   r   znot implementedir-   )r  r  r  r  r  r  r   r  r  r	  r  r   rT  r  r  )r   r  r"  r#  r  r  r  s          r=   r&  zAppendingTiffWriter.fixOffsetsW  s2     	$v 	$4Cs###u 	- 	-A)0ET^^%%%dmmooFd**F -6U??A::+C&s+++ ++F333C---...Ar{++++ -%%f----$$V,,,,%	- 	-r?   N)Fr  )rm   r  )r   r   rm   r   r   )r  r   rm   r   )r   rl   rm   r   )r   r   rm   r   )FF)r  r   r"  rn   r#  rn   rm   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  rG  r  r&  r9   r?   r=   r  r  w  s         J(  D      2   .   
      4 4 4 4 #%+    - - - -- - - -	4 	4 	4 	4" " " "      $ $ $ $$ $ $ $$ $ $ $$ $ $ $$ $ $ $   !, !, !, !,H AF- - - - - - -r?   r  r  Image.Imager  	IO[bytes]r  str | bytesr   c                   | j                                         }| j        }t          |                    dg                     }t          | d          s|st          | ||          S |                                 }	 t          |          5 }| g|z   D ]}||_         ||_        t          |d          sd}	n|j	        }	t          |	          D ]P}
|                    |
           |                                 t          |||           |                                 Q	 d d d            n# 1 swxY w Y   |                     |           d S # |                     |           w xY w)Nappend_imagesr  r   )r  r  r  r  r  r   r  r  r  r  r  r  r  r  )r  r  r  r  r  r1  cur_idxtfimsnfrr   s              r=   	_save_allr6  s  s   .%%''K$M"==>>M2z"" '= 'RX&&&ggiiG $$ 	"tm+ " ""-$1!sJ// 'CC,C :: " "CHHSMMMHHJJJ#r8,,,KKMMMM	""	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	s1   <E BD*E *D..E 1D.2E E#z.tifz.tiffz
image/tiff)rk   rl   rm   rn   )r  r-  r  r.  r  r/  rm   r   )
__future__r   r  r  loggingr&  r  r   r[  collections.abcr   	fractionsr   numbersr   r   typingr   r	   r
   r   r    r   r   r   r   r   r   _binaryr   r%  r   r(  r   
_deprecater   r   	getLoggerr   r  rm  r  IFD_LEGACY_APIr  r
  r  r  r_  r`  rc  rX  r\  r]  r  r  re  ro  r  rj  rk  rZ  rl  r  r  r  r  	PREDICTORrt  rp  rq  rn  r  r  rd  rb  
JPEGTABLESr^  r  r  r  r  rs  r  r  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATArW  r$  r  rh  r   rf  rq   r   r  rs   r}   r   r   r   r   rw   r   r   r   r   
_IFDv2Baser   r   r   r   setattrr  ImageFileDirectoryr  r  r  r  r6  register_openr  register_saveregister_save_allregister_extensionsregister_mimer9   r?   r=   <module>rN     s  R # " " " " " 				       				   * * * * * *       $ $ $ $ $ $ $ $ = = = = = = = = = = = = = = J J J J J J J J J J J J J J J J ! ! ! ! ! ! ! ! ! ! ! !       ! ! ! ! ! !      		8	$	$ 


 
  	   				
	
  	

	  %  u | x	
 x z { v  
= 
: 
 
> 
= 
?  
6!" 
6#$ 
6% * CB)9)?)?)A)ABBB { D!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!T2
g{h D!T2
i{n D!Y#_o{p D!Y#_q{r D!Y#^s{t D!Y#^u{ {	z cAAyAAAAA    wuz8$?? @I:B???" " " "% % %  "   y' y' y' y' y'( y' y' y'x	 	 	    "   S)JJJr$ r$ r$ r$ r$J r$ r$ r$j (6  $(7  % J JIC<<S!!DG!>4>>>#3Fq3IJJJG!?D??OC4HIIIIOS$X X X X X1 X X Xx + TH TH TH TH THI' TH TH TH| #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$/+  	2q" q" q"h	y- y- y- y- y- y- y- y-x   >  M(- A A A  M(% 0 0 0  ,i 8 8 8  -.0A B B B  M(, 7 7 7 7 7r?   