
    th&                        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	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 ej        d
          j        ZdZddddddddddddddddZ ej        d          Z ej!        Z"	 de"z  Z#	  G d de          Z$ G d  d!e          Z%d" Z&dJd#Z' G d$ d%          Z( G d& d'e)          Z* G d( d)          Z+ G d* d+e(          Z,d, Z- G d- d.ej                  Z.d/d0d1d2d3d4d5d5d6d7d8d9d:d;d<Z/d= Z0 G d> d?          Z1 G d@ dA          Z2dB Z3dC Z4e0dDfdEZ5dF Z6 e	j7        e.j8        e.e-            e	j9        e.j8        e5            e	j:        e.j8        e4            e	j;        e.j8        dGdHg            e	j<        e.j8        dI           dS )K    N)IntEnum   )Image
ImageChops	ImageFileImagePaletteImageSequence)i16be)i32be)o8)o16be)o32bes   \w\w\w\ws   PNG

)1r   )LL;2)r   L;4)r   r   )II;16B)RGBr   )r   zRGB;16B)PP;1)r   P;2)r   P;4)r   r   )LAr   )RGBAzLA;16B)r   r   )r   zRGBA;16B))r   r   )   r   )   r   )   r   )   r   )r   r   )r   r   )r      )r   r    )r   r    )r   r    )r   r   )r   r   )r      )r   r!   s   ^* *$@   c                       e Zd ZdZ	 dZ	 dZdS )Disposalr   r   r   N)__name__
__module____qualname__OP_NONEOP_BACKGROUNDOP_PREVIOUS     f/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/PIL/PngImagePlugin.pyr$   r$   b   s1        G M
 K r,   r$   c                       e Zd ZdZ	 dZdS )Blendr   r   N)r%   r&   r'   	OP_SOURCEOP_OVERr+   r,   r-   r/   r/   w   s%        I
 G r,   r/   c                     t          j                    }|                    | t                    }|j        rd}t          |          |S )NzDecompressed Data Too Large)zlibdecompressobj
decompressMAX_TEXT_CHUNKunconsumed_tail
ValueError)sdobj	plaintextmsgs       r-   _safe_zlib_decompressr=      sE    D>22I +oor,   c                 2    t          j        | |          dz  S )Nl    )r3   crc32)dataseeds     r-   _crc32rB      s    :dD!!J..r,   c                   L    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 ZddZdS )ChunkStreamc                 "    || _         g | _        d S N)fpqueue)selfrG   s     r-   __init__zChunkStream.__init__   s    


r,   c                    d}| j         r8| j                                         \  }}}| j                            |           nL| j                            d          }|dd         }| j                                        }t          |          }t          |          s.t          j	        s"dt          |           d}t          |          |||fS )z.Fetch a new chunk. Returns header information.Nr   r   zbroken PNG file (chunk ))rH   poprG   seekreadtelli32is_cidr   LOAD_TRUNCATED_IMAGESreprSyntaxError)rI   cidposlengthr9   r<   s         r-   rO   zChunkStream.read   s    : 	#z~~//CfGLLQAABB%C',,..CVVFc{{ 	'2 '<S		<<<!#&&&Cr,   c                     | S rF   r+   rI   s    r-   	__enter__zChunkStream.__enter__   s    r,   c                 .    |                                   d S rF   )close)rI   argss     r-   __exit__zChunkStream.__exit__   s    

r,   c                 "    d x| _         | _        d S rF   )rH   rG   rZ   s    r-   r]   zChunkStream.close   s    ##
TWWWr,   c                 @    | j                             |||f           d S rF   )rH   appendrI   rV   rW   rX   s       r-   pushzChunkStream.push   s%    
3V,-----r,   c                     t                               d|||            t          | d|                    d          z             ||          S )z"Call the appropriate chunk handlerzSTREAM %r %s %schunk_ascii)loggerdebuggetattrdecoderc   s       r-   callzChunkStream.call   sJ     	&S&999<wtX

7(;(;;<<S&IIIr,   c                    t           j        r&|d         dz	  dz  r|                     ||           dS 	 t          |t          |                    }t	          | j                            d                    }||k    r"dt          |           d}t          |          dS # t          j
        $ r(}dt          |           d}t          |          |d}~ww xY w)	zRead and verify checksumr      r   Nr   z(broken PNG file (bad header checksum in rL   z(broken PNG file (incomplete checksum in )r   rS   crc_skiprB   rQ   rG   rO   rT   rU   structerror)rI   rV   r@   crc1crc2r<   es          r-   crczChunkStream.crc   s     * 	A!a 	MM#t$$$F	*$s,,Dtw||A''Dt||McMMM!#&&& | | 	* 	* 	*IT#YYIIICc"")	*s   A,B" "C1#CCc                 :    | j                             d           dS )zRead checksumr   N)rG   rO   )rI   rV   r@   s      r-   ro   zChunkStream.crc_skip   s     	Qr,      IENDc                 (   g }	 	 |                                  \  }}}n)# t          j        $ r}d}t          |          |d }~ww xY w||k    rnD|                     |t          j        | j        |                     |                    |           |S )NTztruncated PNG file)	rO   rp   rq   OSErrorru   r   
_safe_readrG   rb   )rI   endchunkcidsrV   rW   rX   rt   r<   s           r-   verifyzChunkStream.verify   s     
	*#'99;; S&&< * * **cll)* hHHS).tw??@@@KK
	 s    A?AN)rw   )r%   r&   r'   rJ   rO   r[   r_   r]   rd   rl   ru   ro   r}   r+   r,   r-   rD   rD      s               (    $ $ $. . .J J J* * *(  
     r,   rD   c                   *    e Zd ZdZedd            ZdS )iTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    Nc                 X    t                               | |          }||_        ||_        |S )z
        :param cls: the class to use when creating the instance
        :param text: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        )str__new__langtkey)clstextr   r   rI   s        r-   r   ziTXt.__new__   s*     {{3%%		r,   )NN)r%   r&   r'   __doc__staticmethodr   r+   r,   r-   r   r      s>             \  r,   r   c                   0    e Zd ZdZd Zd	dZd
dZd	dZdS )PngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    c                     g | _         d S rF   )chunksrZ   s    r-   rJ   zPngInfo.__init__  s    r,   Fc                     ||g}|r|                     d           | j                             t          |                     dS )a"  Appends an arbitrary chunk. Use with caution.

        :param cid: a byte string, 4 bytes long.
        :param data: a byte string of the encoded data
        :param after_idat: for use with private chunks. Whether the chunk
                           should be written after IDAT

        TN)rb   r   tuple)rI   rV   r@   
after_idatchunks        r-   addzPngInfo.add  sI     d 	LL5<<(((((r,    c                 *   t          |t                    s|                    dd          }t          |t                    s|                    dd          }t          |t                    s|                    dd          }t          |t                    s|                    dd          }|r<|                     d|dz   |z   dz   |z   dz   t	          j        |          z              dS |                     d|dz   |z   dz   |z   dz   |z              dS )	zAppends an iTXt chunk.

        :param key: latin-1 encodable text key name
        :param value: value for this key
        :param lang: language code
        :param tkey: UTF-8 version of the key name
        :param zip: compression flag

        latin-1strictutf-8   iTXts         s      N)
isinstancebytesencoder   r3   compress)rI   keyvaluer   r   zips         r-   add_itxtzPngInfo.add_itxt  s)    #u%% 	2**Y11C%'' 	4LL(33E$&& 	2;;w11D$&& 	2;;w11D 	UHHk!D(5047%?$-PUBVBVV    
 HHWcIo4u<tCeKeSTTTTTr,   c                    t          |t                    r$|                     |||j        |j        |          S t          |t
                    s@	 |                    dd          }n(# t          $ r |                     |||          cY S w xY wt          |t
                    s|                    dd          }|r0|                     d|dz   t          j
        |          z              dS |                     d|dz   |z              dS )	zAppends a text chunk.

        :param key: latin-1 encodable text key name
        :param value: value for this key, text or an
           :py:class:`PIL.PngImagePlugin.iTXt` instance
        :param zip: compression flag

        )r   r   r      zTXt        tEXtr   N)r   r   r   r   r   r   r   UnicodeErrorr   r3   r   )rI   r   r   r   s       r-   add_textzPngInfo.add_text9  s    eT"" 	N==eUZ=MMM %'' 	::Y99 : : :}}S%S}99999: #u%% 	2**Y11C 	3HHWcGmdmE.B.BBCCCCCHHWcEkE122222s   A' '"BBNF)r   r   F)r%   r&   r'   r   rJ   r   r   r   r+   r,   r-   r   r     sm         
  ) ) ) )U U U U83 3 3 3 3 3r,   r   c                        e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZS )	PngStreamc                     t                                          |           i | _        i | _        d| _        d | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d| _        d S )Nr   r   r   )superrJ   im_infoim_textim_sizeim_modeim_tile
im_paletteim_custom_mimetypeim_n_frames_seq_numrewind_statetext_memory)rI   rG   	__class__s     r-   rJ   zPngStream.__init__Z  st     "& r,   c                 z    | xj         |z  c_         | j         t          k    rd| j          d}t          |          d S )Nz%Too much memory used in text chunks: z>MAX_TEXT_MEMORY)r   MAX_TEXT_MEMORYr8   )rI   chunklenr<   s      r-   check_text_memoryzPngStream.check_text_memoryk  sY    H$o--6#6 6 6  S//! .-r,   c                 ^    | j                                         | j        | j        d| _        d S )N)infotileseq_num)r   copyr   r   r   rZ   s    r-   save_rewindzPngStream.save_rewindt  s2    L%%''L}
 
r,   c                 r    | j         d         | _        | j         d         | _        | j         d         | _        d S )Nr   r   r   )r   r   r   r   rZ   s    r-   rewindzPngStream.rewind{  s3    (0(0))4r,   c                    t          j        | j        |          }|                    d          }t                              d|d |                    t                              d||                    ||         }|dk    rd| d}t          |          	 t          ||dz   d                    }n2# t          $ r t           j	        rd }n Y nt          j        $ r d }Y nw xY w|| j        d<   |S )	Nr   ziCCP profile name %rzCompression method %sr   Unknown compression method z in iCCP chunkr   icc_profile)r   rz   rG   findrh   ri   rU   r=   r8   rS   r3   rq   r   )rI   rW   rX   r9   icomp_methodr<   r   s           r-   
chunk_iCCPzPngStream.chunk_iCCP  s    &11 FF5MM+QrrU333,ad333d!KKKKCc"""	/!a%''
;;KK 	 	 	. "  z 	 	 	KKK	&1]#s   B3 3C"C"!C"c                    t          j        | j        |          }|dk     rt           j        r|S d}t	          |          t          |d          t          |d          f| _        	 t          |d         |d         f         \  | _        | _	        n# t          $ r Y nw xY w|d         r
d| j        d	<   |d
         rd}t          |          |S )N   zTruncated IHDR chunkr   r   r   	      r   	interlace   zunknown filter category)r   rz   rG   rS   r8   rQ   r   _MODESr   
im_rawmode	Exceptionr   rU   rI   rW   rX   r9   r<   s        r-   
chunk_IHDRzPngStream.chunk_IHDR  s     &11B;;. (CS//!1ayy#a))+	,2AaD!A$<,@)DL$// 	 	 	D	R5 	*()DL%R5 	#+Cc"""s   &(B 
BBc                     d| j         v rd| j         d         || j        fg}n%| j        
d| j         d<   dd| j        z   || j        fg}|| _        || _        t          )Nbboxr   Tdefault_imager   )r   r   r   r   r   im_idatEOFError)rI   rW   rX   r   s       r-   
chunk_IDATzPngStream.chunk_IDAT  sm    T\!!DL0#tGHDD+04_-FT\13HIDr,   c                     t           rF   )r   )rI   rW   rX   s      r-   
chunk_IENDzPngStream.chunk_IEND  s    r,   c                 b    t          j        | j        |          }| j        dk    r	d|f| _        |S )Nr   r   )r   rz   rG   r   r   rI   rW   rX   r9   s       r-   
chunk_PLTEzPngStream.chunk_PLTE  s3     &11<3#QhDOr,   c                    t          j        | j        |          }| j        dk    rKt                              |          r&|                    d          }|dk    r
|| j        d<   nm|| j        d<   nb| j        dv rt          |          | j        d<   nA| j        dk    r6t          |          t          |d          t          |d          f| j        d<   |S )	Nr   r   r   transparencyr   r   r   r   r   r   )	r   rz   rG   r   _simple_palettematchr   r   i16)rI   rW   rX   r9   r   s        r-   
chunk_tRNSzPngStream.chunk_tRNS  s     &11<3$$Q'' 	1 FF5MM6634DL0 01^,,\_,,+.q66DL((\U""+.q663q!99c!Qii+GDL(r,   c                 n    t          j        | j        |          }t          |          dz  | j        d<   |S )N     j@gamma)r   rz   rG   rQ   r   r   s       r-   
chunk_gAMAzPngStream.chunk_gAMA  s2     &11 #A 1Wr,   c                     t          j        | j        |          }t          j        dt          |          dz  z  |          }t          d |D                       | j        d<   |S )Nz>%dIr   c              3       K   | ]	}|d z  V  
dS )r   Nr+   ).0elts     r-   	<genexpr>z'PngStream.chunk_cHRM.<locals>.<genexpr>  s&      ,P,PS8^,P,P,P,P,P,Pr,   chromaticity)r   rz   rG   rp   unpacklenr   r   )rI   rW   rX   r9   raw_valss        r-   
chunk_cHRMzPngStream.chunk_cHRM  s`      &11=3q66Q;!7;;',,P,Px,P,P,P'P'P^$r,   c                     t          j        | j        |          }|dk     rt           j        r|S d}t	          |          |d         | j        d<   |S )Nr   zTruncated sRGB chunkr   srgb)r   rz   rG   rS   r8   r   r   s        r-   
chunk_sRGBzPngStream.chunk_sRGB  sW      &11A::. (CS//! tVr,   c                 .   t          j        | j        |          }|dk     rt           j        r|S d}t	          |          t          |d          t          |d          }}|d         }|dk    r|dz  |dz  f}|| j        d<   n|dk    r||f| j        d	<   |S )
Nr   zTruncated pHYs chunkr   r   r   r   
F%u?dpiaspect)r   rz   rG   rS   r8   rQ   r   )	rI   rW   rX   r9   r<   pxpyunitr   s	            r-   
chunk_pHYszPngStream.chunk_pHYs  s     &11A::. (CS//!QC1IIBt199v+rF{*C"%DLQYY%'VDL"r,   c                 p   t          j        | j        |          }	 |                    dd          \  }}n# t          $ r |}d}Y nw xY w|rj|                    dd          }|                    dd          }|dk    r|n|| j        |<   || j        |<   |                     t          |                     |S )Nr   r   r,   r   r   replaceexif)
r   rz   rG   splitr8   rk   r   r   r   r   )rI   rW   rX   r9   kvv_strs          r-   
chunk_tEXtzPngStream.chunk_tEXt
  s     &11	775!$$DAqq 	 	 	AAAA	  	/H--AHHY	22E#$;;aaEDLO#DLO""3u::...s   6 AAc                 F   t          j        | j        |          }	 |                    dd          \  }}n# t          $ r |}d}Y nw xY w|r	|d         }nd}|dk    rd| d}t          |          	 t          |dd                    }n2# t          $ r t           j        rd}n Y nt          j	        $ r d}Y nw xY w|rb|
                    dd          }|
                    dd	          }|x| j        |<   | j        |<   |                     t          |                     |S )
Nr   r   r,   r   r   z in zTXt chunkr   r   r  )r   rz   rG   r  r8   rU   r=   rS   r3   rq   rk   r   r   r   r   )rI   rW   rX   r9   r  r  r   r<   s           r-   
chunk_zTXtzPngStream.chunk_zTXt  sw    &11	775!$$DAqq 	 	 	AAAA	  	A$KKK!KKKKCc"""	%ae,,AA 	 	 	.   z 	 	 	AAA	  	+H--AI..A011DLOdl1o""3q66***s'   6 AA3B B:'B:9B:c                 T   t          j        | j        |          x}}	 |                    dd          \  }}n# t          $ r |cY S w xY wt          |          dk     r|S |d         |d         |dd          }}}	 |                    dd          \  }}	}
n# t          $ r |cY S w xY w|dk    rJ|dk    rB	 t          |
          }
n3# t          $ r t           j        r|cY S  t          j	        $ r |cY S w xY w|S 	 |
                    dd          }|
                    dd          }|	
                    dd          }	|

                    dd          }
n# t          $ r |cY S w xY wt          |
||	          x| j        |<   | j        |<   |                     t          |
                     |S )Nr   r   r   r   r   r   r   )r   rz   rG   r  r8   r   r=   rS   r3   rq   rk   r   r   r   r   r   )rI   rW   rX   rr9   r  cfcmr   tkr  s              r-   
chunk_iTXtzPngStream.chunk_iTXt?  s   $TWf555A	775!$$DAqq 	 	 	HHH	q66A::HaD!A$!""B	''%++KD"aa 	 	 	HHH	77Qww-a00AA!    6  z   HHH 	H--A;;w11D7H--B(++AA 	 	 	HHH	 -1D",=,==Q$,q/s1vv&&&sL   8 AA:B B$#B$4C C2C21C28AE E E c                 T    t          j        | j        |          }d|z   | j        d<   |S )N   Exif  r  )r   rz   rG   r   r   s       r-   
chunk_eXIfzPngStream.chunk_eXIfg  s,     &11.2Vr,   c                 z   t          j        | j        |          }|dk     rt           j        r|S d}t	          |          | j        d | _        t          j        d           |S t          |          }|dk    s|dk    rt          j        d           |S || _        t          |d          | j	        d<   d| _
        |S )	Nr   z"APNG contains truncated acTL chunkz4Invalid APNG, will use default PNG image if possibler   l        r   loopz
image/apng)r   rz   rG   rS   r8   r   warningswarnrQ   r   r   )rI   rW   rX   r9   r<   n_framess         r-   
chunk_acTLzPngStream.chunk_acTLm  s     &11A::. 6CS//!'#DMPQQQHq66q==Hz11MPQQQH#"1ayyV".r,   c                    t          j        | j        |          }|dk     rt           j        r|S d}t	          |          t          |          }| j        |dk    s| j        | j        |dz
  k    rd}t          |          || _        t          |d          t          |d          }}t          |d          t          |d	          }	}| j        \  }
}||z   |
k    s	|	|z   |k    rd
}t          |          ||	||z   |	|z   f| j	        d<   t          |d          t          |d          }}|dk    rd}t          |          t          |          z  dz  | j	        d<   |d         | j	        d<   |d         | j	        d<   |S )N   z"APNG contains truncated fcTL chunkr   r   #APNG contains frame sequence errorsr   r   r   r   zAPNG contains invalid framesr         d     duration   disposal   blend)r   rz   rG   rS   r8   rQ   r   rU   r   r   r   float)rI   rW   rX   r9   r<   seqwidthheightr   r   im_wim_h	delay_num	delay_dens                 r-   
chunk_fcTLzPngStream.chunk_fcTL  s    &11B;;. 6CS//!!ffM!cQhhM%$-37*B*B7Cc"""Aq		3q!99vQSBZZB\
d:Vd 2 20Cc""" "BU
BK@V"1bzz3q"::9	>>I#(#3#3eI6F6F#F#MZ #$R5Z  !"Wr,   c                 V   |dk     r9t           j        rt          j        | j        |          }|S d}t	          |          t          j        | j        d          }t          |          }| j        |dz
  k    rd}t          |          || _        |                     |dz   |dz
            S )Nr   z"APNG contains truncated fDAT chunkr   r  )	r   rS   rz   rG   r8   rQ   r   rU   r   )rI   rW   rX   r9   r<   r(  s         r-   
chunk_fdATzPngStream.chunk_fdAT  s    A::. (&996CS//! !,,!ff=C!G##7Cc"""sQw
333r,   )r%   r&   r'   rJ   r   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r  r  r  r/  r1  __classcell__r   s   @r-   r   r   Y  sf           "" " "
 
 
5 5 5
  6  (
 
 
      (         "  &     D& & &P    (  :4 4 4 4 4 4 4r,   r   c                 (    | d d         t           k    S )Nr   )_MAGIC)prefixs    r-   _acceptr7    s    "1":r,   c                   z     e Zd ZdZdZd Zed             Zd Zd Z	ddZ
d	 Zd
 Zd Zd Zd Z fdZd Z xZS )PngImageFilePNGzPortable network graphicsc                 |   t          | j                            d                    sd}t          |          | j        | _        d| _        g | _        t          | j                  | _        	 | j                                        \  }}}	 | j        	                    |||          }n# t          $ r Y nt          $ rr t                              d|||           t          j        | j        |          }|dd                                         r| j                            ||f           Y nw xY w| j                            ||           | j        j        | _        | j        j        | _        | j        j        | _        d | _        | j        j        | _        | j        j        | _        | j        j        pd| _        | j                             dd	          | _!        | j        j"        r)| j        j"        \  }}tG          j$        ||          | _%        |d
k    r|dz
  | _&        n|| _&        | j        j        vd	| _'        | j        (                                 | j&        | _)        | j        *                                | _+        | j!        r| xj        dz  c_        | ,                    d           | j        dk    | _-        d S )Nr   znot a PNG filer   T%r %s %s (unknown)r   r   r   F   fdATr   ).r7  rG   rO   rU   _fp_PngImageFile__frameprivate_chunksr   pngrl   r   AttributeErrorrh   ri   r   rz   islowerrb   ru   r   moder   _sizer   r   _textr   r   r   custom_mimetyper   r  getr   r   r   rawpalette_PngImageFile__prepare_idat!_close_exclusive_fp_after_loadingr   _PngImageFile__rewind_idatrP   _PngImageFile__rewind_seekis_animated)rI   r<   rV   rW   rX   r9   rawmoder@   s           r-   _openzPngImageFile._open  s   tw||A'' 	#"Cc"""7
 !TW%%	!  $x}}Cf9HMM#sF33   ! 9 9 913VDDD(&99qs8##%% 9'..Qx888	9 HLLa   !	!2 H$	X%
H$	
H$	#x:,1!Y]]?EBB8 	; H/MGT'+GT::DL'>>"(1*D"(D8+5:D2H  """!%!4D HMMOODM! #"JJqMMM=1,s   B( (
D/4A8D/.D/c                     | j         [| j        r$| j        }|                     | j        dz
             |                                  | j        r|                     |           | j         S )Nr   )rF  rP  r?  rN   r  load)rI   frames     r-   r   zPngImageFile.text  sk     :  -		$-!+,,,IIKKK !		%   zr,   c                 D   | j         d}t          |          | j                             | j        d         d         dz
             | j                                         | j                                         | j        r| j                                          d| _         dS )zVerify PNG fileNz)verify must be called directly after openr   r   r   )rG   RuntimeErrorrN   r   rA  r}   r]   _exclusive_fp)rI   r<   s     r-   r}   zPngImageFile.verify  s     7?=Cs### 	TYq\!_q())) 	GMMOOOr,   c                 ^   |                      |          sd S || j        k     r|                     dd           | j        }t          | j        dz   |dz             D ]Q}	 |                     |           # t          $ r,}|                     |           d}t	          |          |d }~ww xY wd S )Nr   Tr   zno more images in APNG file)_seek_checkr?  rO  ranger   rN   )rI   rU  
last_framefrt   r<   s         r-   rN   zPngImageFile.seek!  s    && 	F4<JJq$\
t|a'33 	+ 	+A+

1 + + +		*%%%3smm*+	+ 	+s   A44
B*>'B%%B*Fc                 &	   |dk    r|r| j                             | j                   | j                                         | j        | _        d | _        | j        rd | _        | j        j	        | _
        | j        j        | _        | j         | _        d | _        d | _        | j
                            dd          | _        | j
                            d          | _        | j
                            d          | _        | j
                            d          | _        d| _        ns|| j        dz   k    rd| }t-          |          |                                  | j        r%| j                            | j        | j                   | j                                        | _        | j         | _        | j        r&t5          j        | j        | j                   d| _        d}	 | j                            d
           	 | j                                        \  }}}n# t:          j        t>          f$ r Y nw xY w|dk    rd}tA          |          |dk    r|rd}t?          |          d	}	 | j        !                    |||           n# tD          $ r Y nt@          $ r3 |dk    r|d
z  }|r	|| _        Y ndt5          j        | j        |           Y nFtF          $ r: tH          %                    d|||           t5          j        | j        |           Y nw xY w4|| _        | j        j        | _        | j
                            d          | _        | j
                            d          | _        | j
                            d          | _        | j        st@          | j        &| j        tL          j'        k    rtL          j(        | _        | j        tL          j'        k    rE| j                                        | _        | )                    | j        | j                  | _        d S | j        tL          j(        k    rVtT          j+        ,                    | j-        | j.                  | _        | )                    | j        | j                  | _        d S d | _        d S )Nr   r   Fr$  r&  r   r   zcannot seek to frame Tr   rw   zNo more images in APNG file   fcTLzAPNG missing frame datar=  r<  )/r>  rN   rN  rA  r   rM  rK  impyaccessr   r   r   r   rG   _prev_imdisposerH  r   
dispose_opblend_opdispose_extentr?  r8   rT  paster   r   rz   rO   rp   rq   rU   r   rl   UnicodeDecodeErrorrB  rh   ri   r$   r*   r)   _cropr   corefillrD  size)rI   rU  r   r<   frame_startrV   rW   rX   s           r-   rO  zPngImageFile._seek0  s7   A:: 	#dm,,,!!!&*&8#= )$(DM H,	 H,	( DMDL!%!F!FD"immJ77DO IMM'22DM"&)--"7"7DDLLq(((5e55 oo% IIKKK| AdlD,?@@@ GLLNNDMhDG " ($TWd.ABBB&'#K:Q'+x}}$Cffk2   E '>>7C"3--''>>" /7)#..."&K:HMM#sF3333)   E : : :g~~!& "28D/!E(&99999% : : :LL!5sCHHH(&99999:;:B !DL(DI"immJ77DO IMM'22DM"&)--"7"7D9  = T_8L%L%L&4DO?h222=--//DL::dlD4GHHDLLL_ 666 :??49di@@DL::dlD4GHHDLLLDLLLs7   <H H32H3)J 
LL1LA LLc                     | j         S rF   )r?  rZ   s    r-   rP   zPngImageFile.tell  s
    |r,   c                     | j                             d          r| j        dz   | _        | j        | _        t
          j                            |            dS )z"internal: prepare to read PNG filer   )r   N)r   rH  decoderconfigrK  _PngImageFile__idatr   load_preparerZ   s    r-   rr  zPngImageFile.load_prepare  sQ     9==%% 	;!%!3d!:D)((.....r,   c                    | j         dk    r| j                            d           | j                                        \  }}}|dvr| j                            |||           dS |dk    r9	 | j                            |||           n# t          $ r Y nw xY w|dz
  | _         n|| _         | j         dk    |dk    r| j         }nt          || j                   }| j         |z
  | _         | j                            |          S )zinternal: read more image datar   r   )   IDATs   DDATr=  r,   r=  )rq  rG   rO   rA  rd   rl   r   min)rI   
read_bytesrV   rW   rX   s        r-   	load_readzPngImageFile.load_read  s    kQ GLLOOO#x}}Cf555c3///sg~~HMM#sF3333   D$qj$% kQ* ??JJZ55JkJ.w||J'''s   ,B	 	
BBc                 >   | j         dk    r| j                            | j                    	 | j                            d           	 | j                                        \  }}}n# t          j        t          f$ r Y nw xY w|dk    rn|dk    r+| j        r$d| _        | j        	                    |||           n	 | j        
                    |||           n# t          $ r Y nt          $ r( |dk    r|dz  }t          j        | j        |           Y nt          $ rs t                               d|||           t          j        | j        |          }|dd	                                         r| j                            ||df           Y nw xY wj| j        j        | _        | j        s"| j                                         d
| _        d
S | j        r| j        t4          j        k    r|                     | j        | j                  }| j        j        dk    r+d| j         v r"|!                    d| j         d                   }n|"                    d          }| j        #                    || j        |           | j        | _        | j$        rd
| _$        d
S d
S d
S d
S )z%internal: finished reading image datar   Tr   rw   r_  r=  r<  r   r   Nr   r   r   )%rq  rG   rO   rA  rp   rq   rU   rP  rK  rd   rl   rh  r   r   rz   rB  rh   ri   rC  r@  rb   r   rF  r]   rb  re  r/   r1   ri  r`  rf  rD  r   convert_transparentconvertrg  ra  )rI   rV   rW   rX   r9   updatedmasks          r-   load_endzPngImageFile.load_end  s   ;!GLL%%%	?GLLOOO#'8==?? S&&L+.    g~~D$4&'#c3///?c3////%    6 6 6'>>aKF$TWf55555! ? ? ?13VDDD(&99qs8##%% ?'..Q~>>>	?1	?: X%
 	)HNNDHHH} )%-!?!?**TWd.ABB7<5((^ty-H-H"66	. 9 DD #??622D##GT-@$GGG-= )$(DMMM) )!?!?) )s1   A% %A?>A?<C 
F%.FA9FFc                     d| j         vr|                                  d| j         vrd| j         vrd S |                                                                 S )Nr  zRaw profile type exif)r   rT  getexif_get_merged_dictrZ   s    r-   _getexifzPngImageFile._getexif  sU    ""IIKKK""'>di'O'O4||~~..000r,   c                 ~    d| j         vr|                                  t                                                      S )Nr  )r   rT  r   r  )rI   r   s    r-   r  zPngImageFile.getexif  s1    ""IIKKKww   r,   c                 X    d| j         v r |                     | j         d                   ni S )z
        Returns a dictionary containing the XMP tags.
        Requires defusedxml to be installed.

        :returns: XMP tags in a dictionary.
        zXML:com.adobe.xmp)r   _getxmprZ   s    r-   getxmpzPngImageFile.getxmp  s5     #di// LL#67888	
r,   r   )r%   r&   r'   formatformat_descriptionrR  propertyr   r}   rN   rO  rP   rr  rw  r}  r  r  r  r2  r3  s   @r-   r9  r9    s       F4A- A- A-F   X  "+ + +[  [  [  [ z  / / /( ( (B1) 1) 1)f1 1 1! ! ! ! !
 
 
 
 
 
 
r,   r9  )r       )L;1r  )r   s    )r   s    )r   s    )r   s   )r   s    )r   s   )r   s   )r   s   )r   s   )r   s   )r   s   )r   r  r   r   r   r   r   zI;16r   r   r   r   r   r   c                 <   d                     |          }|                     t          t          |                    |z              |                     |           t	          |t	          |                    }|                     t          |                     dS )z'Write a PNG chunk (including CRC field)r,   N)joinwriteo32r   rB   rG   rV   r@   ru   s       r-   putchunkr    sx     88D>>DHHST^^c!"""HHTNNN
vc{{
#
#CHHSXXr,   c                       e Zd Zd Zd ZdS )_idatc                 "    || _         || _        d S rF   )rG   r   )rI   rG   r   s      r-   rJ   z_idat.__init__,  s    


r,   c                 >    |                      | j        d|           d S )Nrt  )r   rG   rI   r@   s     r-   r  z_idat.write0  s     

47GT*****r,   Nr%   r&   r'   rJ   r  r+   r,   r-   r  r  )  s2          + + + + +r,   r  c                       e Zd Zd Zd ZdS )_fdatc                 0    || _         || _        || _        d S rF   )rG   r   r   )rI   rG   r   r   s       r-   rJ   z_fdat.__init__7  s    
r,   c                     |                      | j        dt          | j                  |           | xj        dz  c_        d S )Nr=  r   )r   rG   r  r   r  s     r-   r  z_fdat.write<  s:    

47GS%6%6===r,   Nr  r+   r,   r-   r  r  4  s2          
    r,   r  c                    | j                             d| j                            dd                    }| j                             d| j                            dd                    }| j                             d| j                            dt          j                            }| j                             d| j                            dt
          j                            }	|rt          j        |          }
nt          j        | g|          }
g }d}|
D ]}t          j
        |          D ]}|j        |k    r|                                }n8|dk    r|                    || j                  }n|                    |          }| j                                         }t          |t           t"          f          r||         |d<   t          |t           t"          f          r||         |d<   t          |	t           t"          f          r|	|         |d<   |dz  }|r|d	         }|d
                             d          }|d
                             d          }|t          j        k    rt'          |          dk     rt          j        }|t          j        k    r|d                                         }t*          j                            d| j        d          }|d         }|r|                    |          }n
d| j        z   }|                    ||           n'|t          j        k    r|d         d         }n|d         }t7          j        |                    d          |                    d                    }|                    d          }|s^||                    d          k    rE||                    d          k    r,|d
         dxx         |                    d|          z  cc<   nd }d|vr||d<   |                    |||d            ||dt?          t'          |                    t?          |                     |r1tA          j!        | tE          ||          dd| j        z   d|fg           d}tG          |          D ]\  }}|d         }|d         sd|j        z   }n|d         }|                    |          }|j        }|d
         }tI          tK          |d                             }|                    d|          }|                    d|	          } ||dt?          |          t?          |d                   t?          |d                   t?          |d                   t?          |d                   tM          |          tM          d          tO          |          tO          |                     |dz  }|dk    r5|s3tA          j!        |tE          ||          dd|j        z   d|fg           }tQ          |||          }tA          j!        ||dd|j        z   d|fg           |j)        }d S )Nr"  r   r  r$  r&  r   )rJ  r   encoderinfor   r`  r   )r   r   r   r   r   r   F)
alpha_only)r`  r   r  s   acTLr   r_  r!  )*r  rH  r   r$   r(   r/   r0   	itertoolschainr	   IteratorrD  r   rz  rJ  r   listr   r*   r   r)   r   rj  rk  rl  croprg  r   subtract_modulogetbboxrb   r  r   _saver  	enumerateintroundo16r   r  r   )r`  rG   r   rQ  r   append_imagesr"  r  r$  r&  r  	im_framesframe_countim_seqim_framer  previousprev_disposal
prev_blendbase_imrc  r   deltar   rU  
frame_datarl  frame_durationframe_disposalframe_blendfdat_chunkss                                  r-   _write_multiple_framesr  A  sI   ~!!*bgkk*a.H.HIIH>fbgkk&!&<&<==D~!!*bgkk*hFV.W.WXXHNwGU_(M(MNNE 5..m44IK 7Y 7Y%.v66 6	Y 6	YH}''#==??c>>'///LLHH'//88H.--//K(T5M22 @*2;*?J'(T5M22 @*2;*?J'%$// :',['9G$1K "$R= ( 7 ; ;J G G%m488AA
 H$888S^^a=O=O$,$:M H$:::&tn1133G#joofbg|LLG#F+D 0"),,t"4"4%/MM'40000"h&:::'mD1GG&tnG"2$$V,,goof.E.E  }}}66%)D)DDD"koog&>&>>>]+J777;??"H< < 777 ,,*2J'Hd;WWXXXXm6	Yr 
E
C	NND			    WE"e,,v7GG/T.UVVVG&y11 ** **zd#&! 	+HM)DDf%D}}T**H} /U;z#:;;<<$X>>!oogu55LLQLLQLLQLLQLLII~{OO	
 	
 	
 	1A::m:Ob%  (-/G<=     E733KO(-/G<=  
 ")GGU** **r,   c                 ,    t          | ||d           d S )NT)save_all)r  )r`  rG   filenames      r-   	_save_allr    s    	"b(T******r,   Fc                    |r| j                             d| j                            d                    }t                      }| j                             dg           }|rt	          j        |          }nt	          j        | g|          }|D ]3}	t          j        |	          D ]}
|                    |
j	                   4dD ]}||v r n	|
                                }n| j	        }|dk    rd| j         v rt          d| j         d         z  d          }nU| j        rLt          t          t          | j                                        d                   dz  d          d          }nd}|d	k    r|d
k    rd}n|dk    rd
}nd}| d| }| j                             dd          | j                             dd          | j                             dd          | j                             dd          f| _        	 t"          |         \  }}n(# t$          $ r}d| d}t'          |          |d }~ww xY w|                    t*                      ||dt-          | j        d                   t-          | j        d                   |ddd           g d}| j                             d| j                            d                    }|r>d}|dz   t1          j        |          z   } ||d|           |                    d           | j                             d          }|rg d }|j        D ]}}|d d
         \  }}||v r#|                    |            ||||           6||v r ||||           H|dd
                                         r|d
d         }|s ||||           ~| j	        dk    r_|dz  }| j                            d!          d |         }t          |          |k     r|dz  }t          |          |k      ||d"|           | j                             d#| j                            d#d                     }|s|dk    r| j	        dk    rk|}t?          |t@                    r ||d$|d |                    n@t          dt          d%|                    }d&|z  dz   } ||d$|d |                    n| j	        d'v r9t          dt          d(|                    } ||d$tC          |                     n| j	        d!k    rA|\  }} }! ||d$tC          |          tC          |           z   tC          |!          z              nud#| j         v rd)}t'          |          nZ| j	        dk    rO| j        "                                d*k    r2| j                            d*d+          }|} ||d$|d |                    | j                             d,          }"|"r[ ||d-t-          tG          |"d         d.z  d/z                       t-          tG          |"d         d.z  d/z                       d0           |rAd1d2g}|j        D ]5}|d d
         \  }}||v r"|                    |            ||||           6| j                             d3          }#|#r[t?          |#tH          j%                  r|#&                    d4          }#|#'                    d5          r
|#d6d          }# ||d7|#           |rtQ          | |||||           n1tS          j*        | tW          ||          d8d9| j        z   d|fg           |rL|j        D ]D}|d d
         \  }}|dd
                                         r|d
d         }|r ||||           E ||d:d           tY          |d;          r|-                                 d S d S )<Nr   r  )r   r   r   r   bitsr      r    r   r   r   ;optimizeFcompress_levelr  compress_type
dictionaryr,   zcannot write mode z as PNGs   IHDRr   r   )s   cHRMs   gAMAs   sBIT   sRGBs   tIMEr   s   ICC Profiler   s   iCCPr  pnginfo)s   sPLTr   r   r   r   s   PLTEr   s   tRNS      r   i  z%cannot use transparency for this moder   Ar   s   pHYsr   g      ?   s   bKGDs   hISTr  r   r  r!   s   eXIfr   r   rw   flush).r  rH  r   setr  r  r	   r  r   rD  rM   ru  rJ  maxr   getdataencoderconfig	_OUTMODESKeyErrorry   r  r5  r  rl  r3   r   remover   rC  r`  
getpaletter   r   r  getpalettemoder  r   Exiftobytes
startswithr  r   r  r  hasattrr  )$r`  rG   r  r   r  r   modesr  r  r  r  rD  colorsr  rQ  rt   r<   r   iccnamer@   r   chunks_multiple_allowed
info_chunkrV   r   palette_byte_numberpalette_bytesr   alpha_bytesalpharedgreenbluer   r  s$                                       r-   r  r    s     **RW[[99
 
 **?B?? 	9OM22EEORD-88E 	) 	)F)26:: ) )		(-(((()( 	 	Du}}  99;;Dws{{ R^##bnV44c::FF z SRZ%7%7%9%9!%<!=!=!BCHH!LLR<<{{1##T##D 	:u--
+R00
?B//
<--	B"!$ " " "04000cll!" HHV	E
BGAJBGAJ	 	 	 ;::F
.

]BGKK,F,F
G
GC
  g~c 2 22b'4    	g>i((D )"F"F"F+ 	) 	)J"2A2ICf}}c"""b#t$$$$///b#t$$$$QqS!!## )'!_
! )E"c4(((	w#~~$qj((//0D1D0DE-  #666U"M -  #666b'=)))>%%nbgkk.RV6W6WXXL 4|q((7c>> K,.. 8b'<#=>>>>"1c#|&<&<==,.6b'5+#67777W''q#e\":":;;LE"gs<001111W+CE"gs3xx#e**4s4yy@AAAA// >cll"	 0 7c>>be2244>>E$$VS11E KE"gu\k\2333
.

U
#
#C
 
CFVOc)**++CFVOc)**++	
 	
 	
  %7#+ 	% 	%J"2A2ICf}}c"""b#t$$$>f%%D !dEJ'' 	#<<??D???++ 	8Db'4    Wr2ug}mTTTTE"e,,v7GG/T.UVVV )+ 	) 	)J"2A2IC1Q3x!! )'!_
 )E"c4(((	E"gsr7 





 s   =H 
H3H..H3c                      G d d          }d } |            }	 || _         t          | |d|           | ` n# | ` w xY w|j        S )z4Return a list of PNG chunks representing this image.c                       e Zd Zg Zd Zd ZdS )getchunks.<locals>.collectorc                     d S rF   r+   r  s     r-   r  z"getchunks.<locals>.collector.write  s    Dr,   c                 :    | j                             |           d S rF   )r@   rb   )rI   r   s     r-   rb   z#getchunks.<locals>.collector.append  s    IU#####r,   N)r%   r&   r'   r@   r  rb   r+   r,   r-   	collectorr    s7        	 	 		$ 	$ 	$ 	$ 	$r,   r  c                     d                     |          }t          t          |t          |                              }|                     |||f           d S )Nr,   )r  r  rB   rb   r  s       r-   rb   zgetchunks.<locals>.append  sM    xx~~&vc{{++,,
		3c"#####r,   N)r  r  r@   )r`  paramsr  rb   rG   s        r-   	getchunksr    s    $ $ $ $ $ $ $ $$ $ $
 
Bb"dF###NNBN7Ns   8 <z.pngz.apngz	image/png)r   )=r  loggingrerp   r  r3   enumr   r   r   r   r   r   r	   _binaryr
   r   r   rQ   r   r   r  r   r  	getLoggerr%   rh   compiler   rR   r5  r   r   	SAFEBLOCKr6   r   r$   r/   r=   rB   rD   r   r   r   r   r7  r9  r  r  r  r  r  r  r  r  register_openr  register_saveregister_save_allregister_extensionsregister_mimer+   r,   r-   <module>r     s[  D      				          G G G G G G G G G G G G G G ! ! ! ! ! ! ! ! ! ! ! !       ! ! ! ! ! ! ! ! ! ! ! !		8	$	$	L	!	!	' 
 !+
 
2 "*011$
 ~%    w   *    G     / / / /V V V V V V V Vr    3   ,M3 M3 M3 M3 M3 M3 M3 M3hR4 R4 R4 R4 R4 R4 R4 R4r
     K
 K
 K
 K
 K
9& K
 K
 K
f
 
	
	"	! 	&  + + + + + + + +
 
 
 
 
 
 
 
}* }* }*@+ + + #+U    L  >  L'w ? ? ?  L' / / /  +Y 7 7 7  ,-/@ A A A  L' 5 5 5 5 5r,   