a
    ç´«j­Ç  ã                   @  s  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m	Z	 d dl
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 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! ddl"m#Z# ddl$m%Z% dZ&e&rôddlm'Z' e (e)¡Z*e +d¡j,Z-dZ.dddddddddddddd d!d"œZ/e +d#¡Z0ej1Z2d$e2 Z3G d%d&„ d&eƒZ4G d'd(„ d(eƒZ5d)d)d*œd+d,„Z6dqd)d-d-d.œd/d0„Z7G d1d2„ d2ƒZ8G d3d4„ d4e9ƒZ:G d5d6„ d6ƒZ;G d7d8„ d8eƒZ<G d9d:„ d:e8ƒZ=d)d;d<œd=d>„Z>G d?d@„ d@ejƒZ?dAdBdCdDdEdFdGdGdGdHdIdJdKdLdMdNœZ@dOd)d)dPdQœdRdS„ZAG dTdU„ dUƒZBG dVdW„ dWƒZCG dXdY„ dYeƒZDdZdOd[d\d\d]d^d]d_œd`da„ZEdZdOdbdPdcœddde„ZFeAdfdZdOdbd[d;dPdfœdgdh„ZGdZdidjdkœdldm„ZHe Ie?jJe?e>¡ e Ke?jJeG¡ e Le?jJeF¡ e Me?jJdndog¡ e Ne?jJdp¡ dS )ré    )ÚannotationsN)ÚCallable)ÚIntEnum)ÚIOÚAnyÚ
NamedTupleÚNoReturnÚcasté   )ÚImageÚ
ImageChopsÚ	ImageFileÚImagePaletteÚImageSequence)Úi16be)Úi32be)Úo8)Úo16be)Úo32be)Ú	deprecate)ÚDeferredErrorF)Ú_imagings   \w\w\w\ws   ‰PNG

)Ú1r   )ÚLúL;2)r   úL;4)r   r   )úI;16ú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                   @  s   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© r3   r3   úQ/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/PIL/PngImagePlugin.pyr,   k   s   r,   c                   @  s   e Zd ZdZdZdS )ÚBlendr   r
   N)r-   r.   r/   Ú	OP_SOURCEÚOP_OVERr3   r3   r3   r4   r5   €   s   r5   Úbytes)ÚsÚreturnc                 C  s*   t  ¡ }| | t¡}|jr&d}t|ƒ‚|S )Nz=Decompressed data too large for PngImagePlugin.MAX_TEXT_CHUNK)ÚzlibÚdecompressobjÚ
decompressÚMAX_TEXT_CHUNKÚunconsumed_tailÚ
ValueError)r9   ZdobjÚ	plaintextÚmsgr3   r3   r4   Ú_safe_zlib_decompressŽ   s    rC   Úint)ÚdataÚseedr:   c                 C  s   t  | |¡d@ S )Nl   ÿÿ )r;   Úcrc32)rE   rF   r3   r3   r4   Ú_crc32—   s    rH   c                   @  s´   e Zd Zdddœdd„Zddœdd	„Zd dœd
d„Zdddœdd„Zddœdd„Zdddddœdd„Zdddddœdd„Z	ddddœdd„Z
ddddœdd„Zd$ddd œd!d"„Zd#S )%ÚChunkStreamú	IO[bytes]ÚNone©Úfpr:   c                 C  s   || _ g | _d S ©N)rM   Úqueue©ÚselfrM   r3   r3   r4   Ú__init__    s    zChunkStream.__init__ztuple[bytes, int, int]©r:   c                 C  s�   d}| j dusJ ‚| jr6| j ¡ \}}}| j  |¡ n*| 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 ú))rM   rO   ÚpopÚseekÚreadÚtellÚi32Úis_cidr   ÚLOAD_TRUNCATED_IMAGESÚreprÚSyntaxError)rQ   ÚcidÚposÚlengthr9   rB   r3   r3   r4   rW   ¤   s    
zChunkStream.readc                 C  s   | S rN   r3   ©rQ   r3   r3   r4   Ú	__enter__¹   s    zChunkStream.__enter__Úobject)Úargsr:   c                 G  s   |   ¡  d S rN   )Úclose)rQ   rd   r3   r3   r4   Ú__exit__¼   s    zChunkStream.__exit__c                 C  s   d  | _ | _d S rN   )rO   rM   ra   r3   r3   r4   re   ¿   s    zChunkStream.closer8   rD   )r^   r_   r`   r:   c                 C  s$   | j d usJ ‚| j  |||f¡ d S rN   )rO   Úappend©rQ   r^   r_   r`   r3   r3   r4   ÚpushÂ   s    zChunkStream.pushc                 C  s,   t  d|||¡ t| d| d¡› �ƒ||ƒS )z"Call the appropriate chunk handlerzSTREAM %r %s %sZchunk_Úascii)ÚloggerÚdebugÚgetattrÚdecoderh   r3   r3   r4   ÚcallÆ   s    zChunkStream.call)r^   rE   r:   c              
   C  s¼   t jr&|d d? d@ r&|  ||¡ dS | jdus4J ‚zBt|t|ƒƒ}t| j d¡ƒ}||krtdt|ƒ› d�}t|ƒ‚W n@ t	j
y¶ } z&dt|ƒ› d�}t|ƒ|‚W Y d}~n
d}~0 0 dS )	zRead and verify checksumr   é   r
   Nr&   z(broken PNG file (bad header checksum in rT   z(broken PNG file (incomplete checksum in )r   r[   Úcrc_skiprM   rH   rY   rW   r\   r]   ÚstructÚerror)rQ   r^   rE   Zcrc1Zcrc2rB   Úer3   r3   r4   ÚcrcÌ   s    zChunkStream.crcc                 C  s   | j dusJ ‚| j  d¡ dS )zRead checksumNr&   )rM   rW   )rQ   r^   rE   r3   r3   r4   rq   á   s    zChunkStream.crc_skipó   IENDzlist[bytes])Úendchunkr:   c              
   C  sŠ   g }| j d usJ ‚z|  ¡ \}}}W n4 tjyX } zd}t|ƒ|‚W Y d }~n
d }~0 0 ||krdq†|  |t | j |¡¡ | |¡ q|S )Nztruncated PNG file)	rM   rW   rr   rs   ÚOSErrorru   r   Ú
_safe_readrg   )rQ   rw   Zcidsr^   r_   r`   rt   rB   r3   r3   r4   Úverifyç   s     zChunkStream.verifyN)rv   )r-   r.   r/   rR   rW   rb   rf   re   ri   ro   ru   rq   rz   r3   r3   r3   r4   rI   Ÿ   s   rI   c                   @  s<   e Zd ZU dZded< ded< eddddd dœd	d
„ƒZdS )ÚiTXtzq
    Subclass of string to allow iTXt chunks to look like strings while
    keeping their extra information

    zstr | bytes | NoneÚlangÚtkeyNÚstrz
str | None)Útextr|   r}   r:   c                 C  s   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
        )r~   Ú__new__r|   r}   )Úclsr   r|   r}   rQ   r3   r3   r4   r€     s    ziTXt.__new__)NN)r-   r.   r/   Ú__doc__Ú__annotations__Ústaticmethodr€   r3   r3   r3   r4   r{   ý   s   
 ÿr{   c                   @  sd   e Zd ZdZddœdd„Zdddddd	œd
d„Zddddddddœdd„Zddddddœdd„ZdS )ÚPngInfoz<
    PNG chunk container (for use with save(pnginfo=))

    rK   rS   c                 C  s
   g | _ d S rN   ©Úchunksra   r3   r3   r4   rR     s    zPngInfo.__init__Fr8   Úbool)r^   rE   Ú
after_idatr:   c                 C  s   | j  |||f¡ 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

        N)r‡   rg   )rQ   r^   rE   r‰   r3   r3   r4   Úadd!  s    
zPngInfo.addÚ ústr | bytes)ÚkeyÚvaluer|   r}   Úzipr:   c                 C  s°   t |tƒs| dd¡}t |tƒs,| dd¡}t |tƒsB| dd¡}t |tƒsX| dd¡}|rˆ|  d|d | d | d t |¡ ¡ n$|  d|d | d | d | ¡ dS )	zùAppends 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)Ú
isinstancer8   ÚencoderŠ   r;   Úcompress)rQ   r�   rŽ   r|   r}   r�   r3   r3   r4   Úadd_itxt-  s    



 þzPngInfo.add_itxtzstr | bytes | iTXt)r�   rŽ   r�   r:   c                 C  sÊ   t |tƒr>| j|||jdur"|jnd|jdur4|jnd|d�S t |tƒs|z| dd¡}W n" tyz   | j|||d� Y S 0 t |tƒs’| dd¡}|r²|  d|d t	 
|¡ ¡ n|  d|d	 | ¡ dS )
zæAppends 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

        Nó    )r�   r�   r‘   ó   zTXtó     ó   tEXtr”   )r•   r{   r˜   r|   r}   r8   r–   ÚUnicodeErrorrŠ   r;   r—   )rQ   r�   rŽ   r�   r3   r3   r4   Úadd_textP  s$    
û	

zPngInfo.add_textN)F)r‹   r‹   F)F)r-   r.   r/   r‚   rR   rŠ   r˜   rž   r3   r3   r3   r4   r…     s      ú$ ÿr…   c                   @  s&   e Zd ZU ded< ded< ded< dS )Ú_RewindStatez dict[str | tuple[int, int], Any]Úinfozlist[ImageFile._Tile]Útilez
int | NoneÚseq_numN©r-   r.   r/   rƒ   r3   r3   r3   r4   rŸ   x  s   
rŸ   c                      s‚  e Zd Zdddœ‡ fdd„Zdddœdd	„Zdd
œdd„Zdd
œdd„Zddddœdd„Zddddœdd„Zddddœdd„Z	ddddœdd„Z
ddddœdd„Zddddœdd„Zddddœdd„Zddddœd d!„Zddddœd"d#„Zddddœd$d%„Zddddœd&d'„Zddddœd(d)„Zddddœd*d+„Zddddœd,d-„Zddddœd.d/„Zddddœd0d1„Zddddœd2d3„Z‡  ZS )4Ú	PngStreamrJ   rK   rL   c                   sZ   t ƒ  |¡ i | _i | _d| _d| _g | _d | _d | _d | _	d | _
ti g d ƒ| _d| _d S )N©r   r   r‹   r   )ÚsuperrR   Úim_infoÚim_textÚim_sizeÚim_modeÚim_tileÚ
im_paletteÚim_custom_mimetypeÚim_n_framesÚ_seq_numrŸ   Úrewind_stateÚtext_memoryrP   ©Ú	__class__r3   r4   rR     s    zPngStream.__init__rD   )Úchunklenr:   c                 C  s2   |  j |7  _ | 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_MEMORYr@   )rQ   r´   rB   r3   r3   r4   Úcheck_text_memory�  s    
ÿÿzPngStream.check_text_memoryrS   c                 C  s   t | j ¡ | j| jƒ| _d S rN   )rŸ   r§   Úcopyr«   r¯   r°   ra   r3   r3   r4   Úsave_rewind™  s
    ýzPngStream.save_rewindc                 C  s&   | j j ¡ | _| j j| _| j j| _d S rN   )r°   r    r·   r§   r¡   r«   r¢   r¯   ra   r3   r3   r4   Úrewind   s    
zPngStream.rewindr8   )r_   r`   r:   c                 C  sÌ   | j d usJ ‚t | j |¡}| d¡}t d|d |… ¡ ||d  }t d|¡ |dkrnd|› d�}t|ƒ‚zt||d d … ƒ}W n6 ty¦   tj	r d }n‚ Y n t
jy¼   d }Y n0 || jd	< |S )
Nr”   ziCCP profile name %rr
   zCompression method %sr   úUnknown compression method z in iCCP chunkr%   Úicc_profile)rM   r   ry   Úfindrk   rl   r]   rC   r@   r[   r;   rs   r§   )rQ   r_   r`   r9   ÚiÚcomp_methodrB   r»   r3   r3   r4   Ú
chunk_iCCP¥  s&    


zPngStream.chunk_iCCPc                 C  s®   | j d usJ ‚t | j |¡}|dk r:tjr.|S d}t|ƒ‚t|dƒt|dƒf| _z t|d |d f \| _| _	W n t
y‚   Y n0 |d r–d| jd	< |d
 rªd}t|ƒ‚|S )Né   zTruncated IHDR chunkr   r&   r'   é	   é   r
   Ú	interlaceé   zunknown filter category)rM   r   ry   r[   r@   rY   r©   Ú_MODESrª   Ú
im_rawmodeÚ	Exceptionr§   r]   ©rQ   r_   r`   r9   rB   r3   r3   r4   Ú
chunk_IHDRÁ  s$     
zPngStream.chunk_IHDRr   c                 C  sp   d| j v r&t d| j d || j¡g}n.| jd ur:d| j d< t dd| j || j¡g}|| _|| _d}t|ƒ‚d S )NÚbboxr�   TÚdefault_imager¥   zimage data found)	r§   r   Ú_TilerÆ   r®   r©   r«   Zim_idatÚEOFError)rQ   r_   r`   r¡   rB   r3   r3   r4   Ú
chunk_IDATÖ  s    


zPngStream.chunk_IDATc                 C  s   d}t |ƒ‚d S )Nzend of PNG image)rÍ   )rQ   r_   r`   rB   r3   r3   r4   Ú
chunk_IENDã  s    zPngStream.chunk_IENDc                 C  s4   | j d usJ ‚t | j |¡}| jdkr0d|f| _|S )Nr   r   )rM   r   ry   rª   r¬   ©rQ   r_   r`   r9   r3   r3   r4   Ú
chunk_PLTEç  s
    

zPngStream.chunk_PLTEc                 C  s¢   | j d usJ ‚t | j |¡}| jdkrZt |¡rN| d¡}|dkrX|| jd< qž|| jd< nD| jdv rtt|ƒ| jd< n*| jdkržt|ƒt|dƒt|dƒf| jd< |S )	Nr   r”   r   Útransparency)r   r   r   r   r%   r&   )	rM   r   ry   rª   Ú_simple_paletteÚmatchr¼   r§   Úi16)rQ   r_   r`   r9   r½   r3   r3   r4   Ú
chunk_tRNSï  s    




 zPngStream.chunk_tRNSc                 C  s2   | j d usJ ‚t | j |¡}t|ƒd | jd< |S )Nç     jø@Úgamma)rM   r   ry   rY   r§   rÐ   r3   r3   r4   Ú
chunk_gAMA  s    zPngStream.chunk_gAMAc                 C  sT   | j d usJ ‚t | j |¡}t dt|ƒd › d�|¡}tdd„ |D ƒƒ| jd< |S )Nú>r&   ÚIc                 s  s   | ]}|d  V  qdS )r×   Nr3   )Ú.0Úeltr3   r3   r4   Ú	<genexpr>  r™   z'PngStream.chunk_cHRM.<locals>.<genexpr>Zchromaticity)rM   r   ry   rr   ÚunpackÚlenÚtupler§   )rQ   r_   r`   r9   Zraw_valsr3   r3   r4   Ú
chunk_cHRM  s
    zPngStream.chunk_cHRMc                 C  sL   | j d usJ ‚t | j |¡}|dk r:tjr.|S d}t|ƒ‚|d | jd< |S )Nr
   zTruncated sRGB chunkr   Zsrgb)rM   r   ry   r[   r@   r§   rÈ   r3   r3   r4   Ú
chunk_sRGB  s    zPngStream.chunk_sRGBc           	      C  s–   | j d usJ ‚t | j |¡}|dk r:tjr.|S d}t|ƒ‚t|dƒt|dƒ }}|d }|dkr||d |d f}|| jd< n|dkr’||f| jd	< |S )
NrÁ   zTruncated pHYs chunkr   r&   r'   r
   ç¦
F%uš?ÚdpiZaspect)rM   r   ry   r[   r@   rY   r§   )	rQ   r_   r`   r9   rB   ÚpxÚpyÚunitrå   r3   r3   r4   Ú
chunk_pHYs&  s    zPngStream.chunk_pHYsc                 C  sš   | j d usJ ‚t | j |¡}z| dd¡\}}W n tyJ   |}d}Y n0 |r–| dd¡}| dd¡}|dkrt|n|| j|< || j|< |  t	|ƒ¡ |S )Nr”   r
   r™   r�   r‘   Úreplaces   exif)
rM   r   ry   Úsplitr@   rn   r§   r¨   r¶   rà   )rQ   r_   r`   r9   ÚkÚvÚk_strÚv_strr3   r3   r4   Ú
chunk_tEXt8  s    

zPngStream.chunk_tEXtc           
      C  s
  | j d usJ ‚t | j |¡}z| dd¡\}}W n tyJ   |}d}Y n0 |rZ|d }nd}|dkrzd|› d�}t|ƒ‚zt|dd … ƒ}W n6 ty®   tjr¨d}n‚ Y n tj	yÄ   d}Y n0 |�r| 
dd¡}| 
dd	¡}	|	 | j|< | j|< |  t|	ƒ¡ |S )
Nr”   r
   r™   r   rº   z in zTXt chunkr�   r‘   rê   )rM   r   ry   rë   r@   r]   rC   r[   r;   rs   rn   r§   r¨   r¶   rà   )
rQ   r_   r`   r9   rì   rí   r¾   rB   rî   rï   r3   r3   r4   Ú
chunk_zTXtL  s6    


zPngStream.chunk_zTXtc                 C  sœ  | j d usJ ‚t | j |¡ }}z| dd¡\}}W n tyJ   | Y S 0 t|ƒdk r\|S |d |d |dd …   }}}z| dd¡\}}	}
W n ty¨   | Y S 0 |dk�r|dk�rzt|
ƒ}
W n: tyì   tjræ| Y S ‚ Y n tj	�y   | Y S 0 n|S |dk�r |
| j
d< z4| dd¡}| d	d¡}|	 d	d¡}|
 d	d¡}W n t�yl   | Y S 0 t|||ƒ | j
|< | j|< |  t|ƒ¡ |S )
Nr”   r
   r%   r   s   XML:com.adobe.xmpÚxmpr�   r‘   r’   )rM   r   ry   rë   r@   rà   rC   r[   r;   rs   r§   rn   r�   r{   r¨   r¶   )rQ   r_   r`   Úrr9   rì   ÚcfÚcmr|   Ztkrí   rî   Zlang_strZtk_strrï   r3   r3   r4   Ú
chunk_iTXto  sH    
 





zPngStream.chunk_iTXtc                 C  s.   | j d usJ ‚t | j |¡}d| | jd< |S )Nó   Exif  Úexif)rM   r   ry   r§   rÐ   r3   r3   r4   Ú
chunk_eXIfš  s    zPngStream.chunk_eXIfc                 C  sž   | j d usJ ‚t | j |¡}|dk r:tjr.|S d}t|ƒ‚| jd urXd | _t d¡ |S t|ƒ}|dksp|dkr~t 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)rM   r   ry   r[   r@   r®   ÚwarningsÚwarnrY   r§   r­   )rQ   r_   r`   r9   rB   Ún_framesr3   r3   r4   Ú
chunk_acTL¡  s&    


zPngStream.chunk_acTLc                 C  sP  | j d usJ ‚t | j |¡}|dk r:tjr.|S d}t|ƒ‚t|ƒ}| jd u rT|dksl| jd urx| j|d krxd}t|ƒ‚|| _t|dƒt|dƒ }}t|dƒt|d	ƒ }}	| j\}
}|| |
ksÌ|	| |krØd
}t|ƒ‚||	|| |	| f| j	d< t
|dƒt
|dƒ }}|dk�rd}t|ƒt|ƒ d | 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)rM   r   ry   r[   r@   rY   r¯   r]   r©   r§   rÕ   Úfloat)rQ   r_   r`   r9   rB   ÚseqÚwidthÚheightræ   rç   Zim_wZim_hZ	delay_numZ	delay_denr3   r3   r4   Ú
chunk_fcTL¶  s<    ÿÿ

zPngStream.chunk_fcTLc                 C  s„   | j d usJ ‚|dk r:tjr.t | j |¡}|S d}t|ƒ‚t | j d¡}t|ƒ}| j|d krjd}t|ƒ‚|| _|  |d |d ¡S )Nr&   z"APNG contains truncated fDAT chunkr
   r   )	rM   r   r[   ry   r@   rY   r¯   r]   rÎ   )rQ   r_   r`   r9   rB   r  r3   r3   r4   Ú
chunk_fdATÔ  s    zPngStream.chunk_fdAT)r-   r.   r/   rR   r¶   r¸   r¹   r¿   rÉ   rÎ   rÏ   rÑ   rÖ   rÙ   râ   rã   ré   rð   rñ   rö   rù   rþ   r  r  Ú__classcell__r3   r3   r²   r4   r¤   ~  s*   	
#+r¤   rˆ   )Úprefixr:   c                 C  s
   |   t¡S rN   )Ú
startswithÚ_MAGIC)r  r3   r3   r4   Ú_accepté  s    r  c                      sÄ   e Zd ZdZdZddœdd„Zeddœdd	„ƒZddœd
d„Zdddœdd„Z	d%ddddœdd„Z
ddœdd„Zddœdd„Zdddœdd„Zddœdd„Zddœd d!„Zd"dœ‡ fd#d$„Z‡  ZS )&ÚPngImageFileZPNGzPortable network graphicsrK   rS   c              	   C  sÐ  t | j d¡ƒsd}t|ƒ‚| j| _d| _g | _t| jƒ| _| j ¡ \}}}z| j 	|||¡}W nd t
yv   Y qÖY nP tyÄ   t d|||¡ t | j|¡}|dd…  ¡ rÀ| j ||f¡ Y n0 | j ||¡ q<| jj| _| jj| _| jj| _d | _| jj| _| jj| _| jj�pd| _| j  dd¡| _!| jj"�rR| jj"\}}t# $||¡| _%|d	k�rh|d
 | _&n|| _&| jjd u�rÀd| _'| j (¡  | j&| _)| j *¡ | _+| j!�r¶|  jd7  _|  ,d¡ | jdk| _-d S )Nr'   znot a PNG filer   ú%r %s %s (unknown)r
   r%   rË   Fó   fdATr&   ).r  rM   rW   r]   Ú_fpÚ_PngImageFile__frameÚprivate_chunksr¤   Úpngro   rÍ   ÚAttributeErrorrk   rl   r   ry   Úislowerrg   ru   rª   Ú_moder©   Ú_sizer§   r    Ú_textr«   r¡   r­   Zcustom_mimetyper®   rý   ÚgetrË   r¬   r   ÚrawÚpaletteÚ_PngImageFile__prepare_idatZ!_close_exclusive_fp_after_loadingr¸   Ú_PngImageFile__rewind_idatrX   Ú_PngImageFile__rewindÚ_seekÚis_animated)rQ   rB   r^   r_   r`   r9   ÚrawmoderE   r3   r3   r4   Ú_openõ  sR    	








zPngImageFile._openzdict[str, str | iTXt]c                 C  sR   | j d u r>| jr&| j}|  | jd ¡ |  ¡  | jr>|  |¡ | j d usLJ ‚| j S )Nr
   )r   r(  r  rV   rý   Úload)rQ   Úframer3   r3   r4   r   8  s    

zPngImageFile.textc                 C  sl   | j du rd}t|ƒ‚| j  | jd d d ¡ | jdus>J ‚| j ¡  | j ¡  | jrb| j  ¡  d| _ dS )zVerify PNG fileNz)verify must be called directly after openr   r%   r'   )rM   ÚRuntimeErrorrV   r¡   r  rz   re   Z_exclusive_fp)rQ   rB   r3   r3   r4   rz   H  s    



zPngImageFile.verifyrD   )r,  r:   c                 C  s”   |   |¡sd S || jk r$|  dd¡ | j}t| jd |d ƒD ]P}z|  |¡ W q> tyŒ } z$|  |¡ d}t|ƒ|‚W Y d }~q>d }~0 0 q>d S )Nr   Tr
   zno more images in APNG file)Z_seek_checkr  r'  ÚrangerÍ   rV   )rQ   r,  Z
last_frameÚfrt   rB   r3   r3   r4   rV   Z  s    


zPngImageFile.seekFrˆ   )r,  r¹   r:   c           	   	   C  sL  | j d usJ ‚t| jtƒr"| jj‚|  d }|dkrÆ|rx| j | j¡ | j  ¡  | j| _	d | _
| j j| _| j j| _| j| _d | _d | _| j dd¡| _| j d¡| _| j d¡| _| j d¡}d| _�nä|| jd kræd|› �}t|ƒ‚|  ¡  | j�r| j | j| j¡ | j ¡ | _| j| _| j	�r:t | j| j	¡ d| _	d}| j d	¡ z| j  ¡ \}}}W n  t j!t"f�y~   Y �q^Y n0 |d
k�r–d}t#|ƒ‚|dk�r¶|�r²d}t"|ƒ‚d}z| j  $|||¡ W nŽ t%�yä   Y �q^Y nv t#�y(   |dk�r|d	8 }|�r|| _	Y �q^t | j|¡ Y n2 t&�yX   t' (d|||¡ t | j|¡ Y n0 �q>|| _| j j| _| j d¡| _| j d¡| _| j d¡}| j�sªd}t#|ƒ‚|�r¶|| _| jd u �rØ| jt)j*k�rØt)j+| _d | _| jt)j*k�r| j�rH| j ¡ | _|  ,| j| j¡| _n4| jt)j+k�rHt-j. /| j0| j1¡| _|  ,| j| j¡| _d S )Nr   rË   Fr  r	  rÊ   r
   zcannot seek to frame r&   rv   zNo more images in APNG fileó   fcTLzAPNG missing frame dataTr  r  zimage not found in APNG frame)2r  r•   r  r   ÚexrV   r&  r¹   r%  r$  Z_imr§   r    r«   r¡   rM   Ú_prev_imÚdisposer!  rË   Z
dispose_opÚblend_opr  r@   r+  ÚimÚpasteÚdispose_extentr·   r   ry   rW   rr   rs   r]   rÍ   ro   ÚUnicodeDecodeErrorr  rk   rl   r,   r2   r1   Ú_cropr   ÚcoreÚfillÚmodeÚsize)	rQ   r,  r¹   r7  rB   Zframe_startr^   r_   r`   r3   r3   r4   r'  i  s     









zPngImageFile._seekc                 C  s   | j S rN   )r  ra   r3   r3   r4   rX   Í  s    zPngImageFile.tellc                 C  s0   | j  d¡r| jd | _| j| _tj | ¡ dS )z"internal: prepare to read PNG filerÃ   )r
   N)r    r!  Zdecoderconfigr$  Ú_PngImageFile__idatr   Úload_preparera   r3   r3   r4   r?  Ð  s    zPngImageFile.load_preparer8   )Ú
read_bytesr:   c                 C  sÈ   | j dusJ ‚| jdkr”| j d¡ | j  ¡ \}}}|dvrP| j  |||¡ dS |dkrŒz| j  |||¡ W n ty~   Y n0 |d | _q|| _q|dkr¤| j}nt|| jƒ}| j| | _| j |¡S )zinternal: read more image dataNr   r&   )ó   IDATs   DDATr  r™   r  )r  r>  rM   rW   ri   ro   rÍ   Úmin)rQ   r@  r^   r_   r`   r3   r3   r4   Ú	load_readÙ  s&    
zPngImageFile.load_readc           	      C  sŒ  | j dusJ ‚| jdkr&| j | j¡ | j d¡ z| j  ¡ \}}}W n tjtfyd   Y �qšY n0 |dkrt�qšn(|dkrœ| jrœd| _| j  	|||¡ �qšz| j  
|||¡ W q& tyÈ   Y �qšY q& t�yB   |dkræ|d8 }zt | j|¡ W nD t�y< } z*tj�r$W Y d}~Y �qšn|‚W Y d}~n
d}~0 0 Y q& t�y–   t d|||¡ t | j|¡}|dd	…  ¡ �r’| j ||d
f¡ Y q&0 q&| j j| _| j�s¾| j  ¡  d| _ nÊ| j�rˆ| jtjk�rˆ|  | j| j ¡}| jj!dk�rd| j"v �r| #d| j"d ¡}n\| jj!dk�rdd| j"v �rd| j"d }t$|t%ƒ�rN| &|¡ nt$|t'ƒ�rd| (|¡ | )d¡}| j *|| j |¡ | j| _dS )z%internal: finished reading image dataNr   r&   rv   r0  r  r  r
   r%   Tr   rÒ   r$   r   )+r  r>  rM   rW   rr   rs   r]   r(  r$  ri   ro   r8  rÍ   r   ry   rx   r[   r  rk   rl   r  r  rg   r¨   r   re   r2  r4  r5   r7   r9  r5  r7  r<  r    Zconvert_transparentr•   r8   ZputpalettealphasrD   ZputpalettealphaÚconvertr6  )	rQ   r^   r_   r`   rt   r9   ÚupdatedÚmaskÚtr3   r3   r4   Úload_endû  sf    




ÿ


zPngImageFile.load_endzdict[int, Any] | Nonec                 C  s6   d| j vr|  ¡  d| j vr*d| j vr*d S |  ¡  ¡ S )Nrø   zRaw profile type exif)r    r+  ÚgetexifZ_get_merged_dictra   r3   r3   r4   Ú_getexif9  s
    
zPngImageFile._getexifz
Image.Exifc                   s   d| j vr|  ¡  tƒ  ¡ S )Nrø   )r    r+  r¦   rI  ra   r²   r3   r4   rI  @  s    
zPngImageFile.getexif)F)r-   r.   r/   ÚformatÚformat_descriptionr*  Úpropertyr   rz   rV   r'  rX   r?  rC  rH  rJ  rI  r  r3   r3   r²   r4   r  ñ  s   Cd	">r  )r   ó   r”   )úL;1rN  r”   )r   ó   r”   )r   ó   r”   )r   ó   r”   )r#   rR  rQ  )r   ó   r”   )r    rN  ó   )r!   rP  rT  )r"   rQ  rT  )r   rR  rT  )r   rR  rP  )r$   rR  ó   )r   rO  r   r   r   r#   rÛ   r   r   r    r!   r"   r   r   r$   rJ   rK   ©rM   r^   rE   r:   c                 G  sJ   d  |¡}|  tt|ƒƒ| ¡ |  |¡ t|t|ƒƒ}|  t|ƒ¡ dS )z'Write a PNG chunk (including CRC field)r™   N)ÚjoinÚwriteÚo32rà   rH   ©rM   r^   rE   Z	byte_dataru   r3   r3   r4   Úputchunk^  s
    

r[  c                   @  s.   e Zd Zddddœdd„Zdddœd	d
„ZdS )Ú_idatrJ   úCallable[..., None]rK   )rM   Úchunkr:   c                 C  s   || _ || _d S rN   )rM   r^  )rQ   rM   r^  r3   r3   r4   rR   l  s    z_idat.__init__r8   ©rE   r:   c                 C  s   |   | jd|¡ d S )NrA  )r^  rM   ©rQ   rE   r3   r3   r4   rX  p  s    z_idat.writeN©r-   r.   r/   rR   rX  r3   r3   r3   r4   r\  i  s   r\  c                   @  s0   e Zd Zdddddœdd„Zddd	œd
d„ZdS )Ú_fdatrJ   r]  rD   rK   )rM   r^  r¢   r:   c                 C  s   || _ || _|| _d S rN   )rM   r^  r¢   )rQ   rM   r^  r¢   r3   r3   r4   rR   w  s    z_fdat.__init__r8   r_  c                 C  s*   |   | jdt| jƒ|¡ |  jd7  _d S )Nr  r
   )r^  rM   rY  r¢   r`  r3   r3   r4   rX  |  s    z_fdat.writeNra  r3   r3   r3   r4   rb  t  s   rb  c                   @  s&   e Zd ZU ded< ded< ded< dS )Ú_FrameúImage.Imager5  z tuple[int, int, int, int] | NonerÊ   zdict[str, Any]ÚencoderinfoNr£   r3   r3   r3   r4   rc  �  s   
rc  rd  r]  r~   zImage.Image | Nonezlist[Image.Image])r5  rM   r^  r<  r)  rË   Úappend_imagesr:   c                  C  s`  | j  d¡}| j  d| j dd¡¡}| j  d| j dtj¡¡}	| j  d| j dtj¡¡}
|rht |¡}nt | g|¡}g }d}|D �]ú}t	 
|¡D �]è}|j|kr¬| ¡ }n
| |¡}| j  ¡ }t|ttfƒrÜ|| |d< n |d u rüd|jv rü|jd |d< t|	ttfƒ�r|	| |d< t|
ttfƒ�r4|
| |d< |d7 }|�rf|d }|j  d¡}|j  d¡}|tjk�r‚t|ƒdk �r‚tj}|tjk�rÚ|j ¡ }tj d	| jd
¡}|j}|�rÂ| |¡}n
d| j }| ||¡ n|tjk�rò|d j}n|j}t | d	¡| d	¡¡}|jdd�}|�sj|| d¡k�rj|| d¡k�rjd|v �rj|j d  |d 7  < q’nd }| t |||ƒ¡ q’q‚t|ƒdk�rž|�sž|d jS ||dt!t|ƒƒt!|ƒƒ |�r| j|k�rÔ|  |¡} t" #| t$t%t& t'||ƒƒt" (dd| j d|¡g¡ d}t)|ƒD �]F\}}|j}|j�s6d|j }n|j}| |¡}|j}|j }t*t+| dd¡ƒƒ}| d|	¡}| d|
¡}||dt!|ƒt!|d ƒt!|d ƒt!|d ƒt!|d ƒt,|ƒt,dƒt-|ƒt-|ƒƒ |d7 }|dk�r|�st" #|t$t%t& t'||ƒƒt" (dd|j d|¡g¡ n>t.|||ƒ}t" #|t$t%t& |ƒt" (dd|j d|¡g¡ |j/}�qd S )Nr  rú   r   r  r	  r
   éÿÿÿÿr%   r$   )r   r   r   r   r¥   éþÿÿÿF)Z
alpha_onlys   acTLr�   r0  r  )0re  r!  r    r,   r0   r5   r6   Ú	itertoolsÚchainr   ÚIteratorr<  r·   rD  r•   Úlistrá   r2   rà   r1   r5  r   r:  r;  r=  rÊ   Úcropr6  r   Zsubtract_moduloZgetbboxrg   rc  rY  r   Ú_saver	   r   r8   r\  rÌ   Ú	enumeraterD   ÚroundÚo16r   rb  r¢   ) r5  rM   r^  r<  r)  rË   rf  r  rú   r  r	  rj  Z	im_framesZframe_countÚim_seqÚim_framere  ÚpreviousZprev_disposalZ
prev_blendZbase_imr3  rÊ   Údeltar¢   r,  Z
frame_datar=  Zframe_durationZframe_disposalZframe_blendZfdat_chunksr3   r3   r4   Ú_write_multiple_frames‡  sâ    	






ÿÿþýü

ü
ý




õýý
rv  rŒ   )r5  rM   Úfilenamer:   c                 C  s   t | ||dd� d S )NT)Úsave_all)rn  )r5  rM   rw  r3   r3   r4   Ú	_save_all  s    ry  )r5  rM   rw  r^  rx  r:   c           (   
     st  |rª| j  d| j d¡¡}tƒ }tƒ ‰ | j  dg ¡}t | g|¡D ],}t |¡D ]}	| |	j	¡ ˆ  |	j
¡ qPqBdD ]}
|
|v rt qŽqt| ¡ }
t‡ fdd„tdƒD ƒƒ}n| j
}| j	}
|
}|
dk�rPd| j v rätd	| j d > d
ƒ}n0| j�rttt| j ¡ d	 ƒd d
ƒd	ƒ}nd
}|dk�rP|dk�r.d	}n|dk�r>d}nd}|d|› �7 }| j  dd¡| j  dd¡| j  dd¡| j  dd¡f| _zt| \}}}W n< t�yÔ } z"d|
› d�}t|ƒ|‚W Y d }~n
d }~0 0 |dk�rîtdddd� | t¡ ||dt|d ƒt|d	 ƒ||dddƒ	 g d¢}| j  d | j d ¡¡}|�rpd!}|d" t |¡ }||d#|ƒ | d$¡ | j  d%¡}|�rg d&¢}|jD ]Š}|d d… \}}||v �rÆ| |¡ ||||ƒ nR||v �rÞ||||ƒ n:|d	d…  ¡ �r�t|ƒdk�o|d }|�s�||||ƒ �q�| j	dk�rj|d }| j  !d'¡d |… }t|ƒ|k �r^|d7 }�qD||d(|ƒ | j  d)| j d)d ¡¡}|�s’|dk�rv| j	dk�rö|} t"|t#ƒ�rÄ||d*|d | … ƒ n0tdtd+|ƒƒ}d,| d }!||d*|!d | … ƒ n~| j	d-v �r$tdtd.|ƒƒ}||d*t$|ƒƒ nP| j	d'k�r\|\}"}#}$||d*t$|"ƒt$|#ƒ t$|$ƒ ƒ nd)| j v �r¸d/}t|ƒ‚nB| j	dk�r¸| j  %¡ d0k�r¸| j  !d0d1¡}!|} ||d*|!d | … ƒ | j  d2¡}%|%�r||d3tt&|%d d4 d5 ƒƒtt&|%d	 d4 d5 ƒƒd6ƒ |�rNd7d8g}|jD ]6}|d d… \}}||v �r| |¡ ||||ƒ �q| j  d9¡}&|&�rœt"|&t'j(ƒ�rx|& )d:¡}&|& *d;¡�r�|&d<d … }&||d=|&ƒ | }'|�rºt+| |||
|||ƒ}'|'�ròt, -|'t.t/t# t0||ƒƒt, 1d>d?|'j
 d|¡g¡ |�rP|jD ]P}|d d… \}}|d	d…  ¡ �rþt|ƒdk�o8|d }|�rþ||||ƒ �qþ||d@dƒ t2|dAƒ�rp| 3¡  d S )BNrË   rf  )r$   r   r   c                 3  s$   | ]‰ t ‡ fd d„ˆD ƒƒV  qdS )c                 3  s   | ]}|ˆ  V  qd S rN   r3   )rÜ   Ú
frame_size©r½   r3   r4   rÞ   2  r™   z"_save.<locals>.<genexpr>.<genexpr>N)Úmax)rÜ   ©Úsizesr{  r4   rÞ   2  r™   z_save.<locals>.<genexpr>r%   r   Úbitsr
   é   r)   r(   r&   ú;ÚoptimizeFZcompress_levelrg  Úcompress_typeÚ
dictionaryr™   zcannot write mode z as PNGrÛ   zSaving I mode images as PNGrÀ   )Ú
stacklevels   IHDRr   r”   )s   cHRMs   cICPs   gAMAs   sBITó   sRGBs   tIMEr»   s   ICC Profiler›   s   iCCPr†  Zpnginfo)s   sPLTr“   rœ   rš   r   s   PLTErÒ   s   tRNSéÿ   ó   ÿ)r   r   rÛ   r   iÿÿ  z%cannot use transparency for this moder$   ÚArå   s   pHYsrä   g      à?rN  s   bKGDs   hISTrø   r'   r÷   r*   s   eXIfr�   r¥   rv   Úflush)4re  r!  r    Úsetri  rj  r   rk  rŠ   r<  r=  rU   rá   r.  rB  r#  r|  rà   ZgetdataZencoderconfigÚ	_OUTMODESÚKeyErrorrx   r   rX  r  rY  r;   r—   Úremover‡   r  r5  Z
getpaletter•   r8   rq  ZgetpalettemoderD   r   ZExifÚtobytesr  rv  r   rn  r	   r   r\  rÌ   ÚhasattrrŠ  )(r5  rM   rw  r^  rx  rË   Úmodesrf  rr  rs  r<  r=  ZoutmodeÚcolorsr  r)  Z	bit_depthÚ
color_typert   rB   r‡   ZiccÚnamerE   r    Zchunks_multiple_allowedZ
info_chunkr^   r‰   Zpalette_byte_numberZpalette_bytesrÒ   Zalpha_bytesÚalphaÚredÚgreenÚbluerå   rø   Z	single_imr3   r}  r4   rn    s*   	ÿ

$


ü 



÷





"
û



ÿý
rn  r   z list[tuple[bytes, bytes, bytes]])r5  Úparamsr:   c                   sV   ddl m} g ‰ dddddœ‡ fdd„}|ƒ }z|| _t| |d	|ƒ W | `n| `0 ˆ S )
z4Return a list of PNG chunks representing this image.r   )ÚBytesIOrJ   r8   rK   rV  c                   s0   d  |¡}tt|t|ƒƒƒ}ˆ  |||f¡ d S )Nr™   )rW  rY  rH   rg   rZ  r†   r3   r4   rg   ö  s    
zgetchunks.<locals>.appendr‹   )Úiorš  re  rn  )r5  r™  rš  rg   rM   r3   r†   r4   Ú	getchunksð  s    rœ  z.pngz.apngz	image/png)r   )OÚ
__future__r   ri  ÚloggingÚrerr   rû   r;   Úcollections.abcr   Úenumr   Útypingr   r   r   r   r	   r‹   r   r   r   r   r   Ú_binaryr   rÕ   r   rY   r   r   rq  r   rY  Z
_deprecater   Z_utilr   ÚTYPE_CHECKINGr   Ú	getLoggerr-   rk   ÚcompilerÔ   rZ   r  rÅ   rÓ   Z	SAFEBLOCKr>   rµ   r,   r5   rC   rH   rI   r~   r{   r…   rŸ   r¤   r  r  rŒ  r[  r\  rb  rc  rv  ry  rn  rœ  Zregister_openrK  Zregister_saveZregister_save_allZregister_extensionsZregister_mimer3   r3   r3   r4   Ú<module>!   s´   
ë
	^`  m  ]ð û X