§
    aÒ³gf  ã                  óæ  — 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	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZ e
rddlmZ d	Zd
ZdZ	 ddddddœZ	 d?d„Zd@d„ZdAd„Z G d„ de¦  «        Z G d„ dej        ¦  «        Z G d „ d!¦  «        Z G d"„ d#e¦  «        Z  G d$„ d%¦  «        Z!dBdCd.„Z"	 dDdEd3„Z#dFd6„Z$ G d7„ d8¦  «        Z% G d9„ d:¦  «        Z& G d;„ d<e&¦  «        Z' G d=„ d>e&¦  «        Z(dS )Gé    )ÚannotationsN)ÚIOÚTYPE_CHECKINGÚAnyÚ
NamedTupleÚcasté   )ÚImage)Ú	deprecate)Úis_path)ÚStrOrBytesPathi   i   Fzimage buffer overrun errorzdecoding errorzunknown errorzbad configurationzout of memory error)éÿÿÿÿéþÿÿÿéýÿÿÿéøÿÿÿi÷ÿÿÿÚerrorÚintÚencoderÚboolÚreturnÚOSErrorc               óê   — 	 t           j                             | ¦  «        }n*# t          $ r t                               | ¦  «        }Y nw xY w|s|rdnd› d| › �}|d|rdnd› d�z  }t          |¦  «        S )Nr   Údecoderz error z when ÚwritingÚreadingz image file)r
   ÚcoreÚgetcodecstatusÚAttributeErrorÚERRORSÚgetr   )r   r   Úmsgs      úK/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/PIL/ImageFile.pyÚ_get_oserrorr#   H   sž   € ð ÝŒj×'Ò'¨Ñ.Ô.ˆˆøÝð  ð  ð  Ý�jŠj˜ÑÔˆˆˆð øøøàð EØ%Ð4��¨9ÐDÐD¸UÐDÐDˆØÐD Ð7�I�I¨iÐDÐDÐDÑD€CÝ�3‰<Œ<Ðs   ‚" ¢$A	ÁA	c                óH   — t          ddd¬¦  «         t          | d¬¦  «        ‚)NÚraise_oserroré   z€It is only useful for translating error codes returned by a codec's decode() method, which ImageFile already does automatically.)ÚactionF©r   )r   r#   )r   s    r"   r%   r%   S   s:   € ÝØØ
ðGðñ ô ð õ �u eÐ
,Ñ
,Ô
,Ð,ó    ÚtÚ_Tilec                ó   — | d         S )Né   © )r*   s    r"   Ú	_tilesortr/   ]   s   € àˆQŒ4€Kr)   c                  ó@   — e Zd ZU ded<   ded<   dZded<   dZd	ed
<   dS )r+   ÚstrÚ
codec_nameú tuple[int, int, int, int] | NoneÚextentsr   r   ÚoffsetNztuple[Any, ...] | str | NoneÚargs)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r5   r6   r.   r)   r"   r+   r+   b   sE   € € € € € € Ø€O€O�OØ-Ð-Ð-Ñ-Ø€F€O€O€O�OØ)-€DÐ-Ð-Ð-Ñ-Ð-Ð-r)   c                  ól   ‡ — e Zd ZdZ	 ddˆ fd	„Zdd
„Zdd„Zdˆ fd„Zdd„Zdd„Z	dd„Z
dd„Zdd„Zˆ xZS ) Ú	ImageFilez*Base class for image file format handlers.NÚfpúStrOrBytesPath | IO[bytes]Úfilenameústr | bytes | Noner   ÚNonec                ó   •— t          ¦   «                              ¦   «          d| _        d | _        g | _        	 d| _        d| _        t          | _        t          |¦  «        r6t          |d¦  «        | _        t          j        |¦  «        | _        d| _        n7t!          t"          t$                   |¦  «        | _        |�|nd| _        d| _        	 	 |                      ¦   «          n@# t(          t*          t,          t.          t0          j        f$ r}t5          |¦  «        |‚d }~ww xY w| j        r"| j        d         dk    s| j        d         dk    rd}t5          |¦  «        ‚d S # t:          $ r" | j        r| j                             ¦   «          ‚ w xY w)	Nr   r	   r.   ÚrbTÚ Fznot identified by this driver)ÚsuperÚ__init__Ú
_min_frameÚcustom_mimetypeÚtileÚreadonlyÚdecoderconfigÚMAXBLOCKÚdecodermaxblockr   Úopenr=   ÚosÚfspathr?   Ú_exclusive_fpr   r   ÚbytesÚ_openÚ
IndexErrorÚ	TypeErrorÚKeyErrorÚEOFErrorÚstructr   ÚSyntaxErrorÚmodeÚsizeÚBaseExceptionÚclose)Úselfr=   r?   Úvr!   Ú	__class__s        €r"   rF   zImageFile.__init__q   sŽ  ø€ õ 	‰Œ×ÒÑÔÐàˆŒà+/ˆÔà!#ˆŒ	Ø*àˆŒà.0ˆÔÝ'ˆÔå�2‰;Œ;ð 
	'å˜2˜t‘n”nˆDŒGÝœI b™MœMˆDŒMØ!%ˆDÔÐõ �2�eœ9 bÑ)Ô)ˆDŒGØ(0Ð(<˜H˜HÀ"ˆDŒMà!&ˆDÔð	ð	,Ø—
’
‘”��øåÝÝÝÝ”ðð ,ð ,ð ,õ " !‘n”n¨!Ð+øøøøð,øøøð ”9ð ' ¤	¨!¤°Ò 1Ð 1°T´Y¸q´\ÀQÒ5FÐ5FØ5�Ý! #Ñ&Ô&Ð&ð 6GÐ5Føõ ð 	ð 	ð 	àÔ!ð  Ø”—’‘”�Øð		øøøs*   ÃC% Ã$E! Ã%(D"ÄDÄD"Ä"=E! Å!,Fc                ó   — d S ©Nr.   ©r^   s    r"   rS   zImageFile._open£   ó   € Øˆr)   ú
str | Nonec                óœ   — | j         r| j         S | j        �6t          j                             | j                             ¦   «         ¦  «        S d S rb   )rH   Úformatr
   ÚMIMEr    Úupperrc   s    r"   Úget_format_mimetypezImageFile.get_format_mimetype¦   sE   € ØÔð 	(ØÔ'Ð'ØŒ;Ð"Ý”:—>’> $¤+×"3Ò"3Ñ"5Ô"5Ñ6Ô6Ð6Øˆtr)   Ústateú	list[Any]c                óX   •— g | _         t          ¦   «                              |¦  «         d S rb   )rI   rE   Ú__setstate__)r^   rk   r`   s     €r"   rn   zImageFile.__setstate__­   s(   ø€ ØˆŒ	Ý‰Œ×Ò˜UÑ#Ô#Ð#Ð#Ð#r)   c                óT   — | j         r| j                             ¦   «          d| _        dS )zCheck file integrityN)rQ   r=   r]   rc   s    r"   ÚverifyzImageFile.verify±   s)   € ð
 Ôð 	ØŒG�MŠM‰OŒOˆOØˆŒˆˆr)   úImage.core.PixelAccess | Nonec                óÚ	  — | j         s| j        €d}t          |¦  «        ‚t          j                             | ¦  «        }| j         s|S d| _        | j        ot          | j         ¦  «        dk    }|ot          t          d¦  «         }d}t          | d¦  «        r
| j
        }d}n| j        j        }t          | d¦  «        r
| j        }d}n| j        j        }|�rš| j         d         \  }}}	}
t          |
t           ¦  «        r|
ddf}
|d	k    �rgt          |
t"          ¦  «        �rQt          |
¦  «        d
k    �r=|
d         | j        k    �r+|
d         t          j        v �r	 ddl}t+          | j        ¦  «        5 }|                     |                     ¦   «         d|j        ¬¦  «        | _        ddd¦  «         n# 1 swxY w Y   |	| j        d         |
d         z  z   | j                             ¦   «         k    rd}t          |¦  «        ‚t          j                             | j        | j        ||	|
¦  «        | _        d}| j        rd| j        _        n$# t<          t          t>          f$ r
 d| _        Y nw xY w|                       ¦   «          d}| j        �sÊ| j          !                    tD          ¬¦  «         tG          | dd¦  «        }d„ tI          j%        | j         d„ ¦  «        D ¦   «         | _         | j         D �]f\  }}}	}
 ||	¦  «         t          j&        | j        ||
| j'        ¦  «        }	 | (                    | j        |¦  «         |j)        r6| *                    | j        ¦  «         | +                    d¦  «        d         }n¬|}	 	  || j,        ¦  «        }n<# tZ          t\          j/        f$ r#}t`          rY d}~nud}t          |¦  «        |‚d}~ww xY w|s*t`          rnQdt          |¦  «        › d�}t          |¦  «        ‚||z   }| +                    |¦  «        \  }}|dk     rn||d…         }Œ©| 1                    ¦   «          �ŒO# | 1                    ¦   «          w xY wg | _         || _2        |  3                    ¦   «          | j4        r | j5        r| j         6                    ¦   «          d| _        | j        st`          s|dk     rto          |d¬¦  «        ‚t          j                             | ¦  «        S )z"Load image data based on tile listNzcannot load this imager	   Úpypy_version_infor   Ú	load_readFÚ	load_seekÚrawé   )Úaccesszbuffer is not large enoughr   ©ÚkeyÚtile_prefixr)   c                ó>   — g | ]\  }}t          |¦  «        d          ‘ŒS )r   )Úlist)Ú.0Ú_Útiless      r"   ú
<listcomp>z"ImageFile.load.<locals>.<listcomp>  s6   € ð ð ð á�A�uõ �U‘”˜B”ðð ð r)   c                ó0   — | d         | d         | d         fS )Nr   r	   rw   r.   )rI   s    r"   ú<lambda>z ImageFile.load.<locals>.<lambda>  s   € ¨T°!¬W°d¸1´g¸tÀA¼wÐ,G€ r)   Tzimage file is truncatedzimage file is truncated (z bytes not processed)r(   )8rI   Ú_imr   r
   ÚloadÚmapr?   ÚlenÚhasattrÚsysrt   r=   Úreadru   ÚseekÚ
isinstancer1   ÚtuplerZ   Ú	_MAPMODESÚmmaprN   ÚfilenoÚACCESS_READr[   r   Ú
map_bufferÚimÚpaletteÚdirtyr   ÚImportErrorÚload_prepareÚsortr/   ÚgetattrÚ	itertoolsÚgroupbyÚ_getdecoderrK   ÚsetimageÚpulls_fdÚsetfdÚdecoderM   rT   rX   r   ÚLOAD_TRUNCATED_IMAGESÚcleanuprJ   Úload_endrQ   Ú!_close_exclusive_fp_after_loadingr]   r#   )r^   r!   ÚpixelÚuse_mmaprJ   rŠ   r‹   Údecoder_namer4   r5   r6   r�   r=   Úerr_codeÚprefixr   ÚbÚsÚeÚns                       r"   r…   zImageFile.loadº   s|  € ð Œyð 	˜TœXÐ-Ø*ˆCÝ˜#‘,”,Ðå”× Ò  Ñ&Ô&ˆØŒyð 	ØˆLà%)ˆŒØ”=Ð8¥S¨¬¡^¤^°qÒ%8ˆàÐE¥G­CÐ1DÑ$EÔ$EÐ Eˆàˆõ �4˜Ñ%Ô%ð 	 Ø”>ˆDàˆHˆHà”7”<ˆDå�4˜Ñ%Ô%ð 	 Ø”>ˆDØˆHˆHà”7”<ˆDàñ 	$à26´)¸A´,Ñ/ˆL˜' 6¨4Ý˜$¥Ñ$Ô$ð $Ø˜a �|�à Ò%Ñ%Ý˜t¥UÑ+Ô+ñ &å˜‘I”I ’N‘NØ˜”G˜tœyÒ(Ñ(Ø˜”G�uœÐ.Ñ.ð$à�K�K�Kå˜dœmÑ,Ô,ð V°Ø#'§9¢9¨R¯YªY©[¬[¸!ÀDÔDT 9Ñ#UÔ#U˜œðVð Vð Vñ Vô Vð Vð Vð Vð Vð Vð Vøøøð Vð Vð Vð Và ¤	¨!¤¨t°A¬wÑ 6Ñ6¸¼¿º¹¼ÒHÐHØ:˜Ý% c™lœlÐ*Ý#œj×3Ò3Øœ $¤)¨\¸6À4ñô �D”Gð  !�Hð ”|ð /Ø-.˜œÔ*øøÝ&­µÐ=ð $ð $ð $Ø#�D”H�H�Hð$øøøð 	×ÒÑÔÐØˆØŒxñ 6	&àŒI�NŠN�yˆNÑ)Ô)Ð)õ ˜T =°#Ñ6Ô6ˆFðð å )Ô 1Ø”IÐGÐGñ!ô !ðñ ô ˆDŒIð 8<´yð (&ñ (&Ñ3�˜g v¨tØ��V‘”�ÝÔ+Ø”I˜|¨T°4Ô3Eñô �ð#&Ø×$Ò$ T¤W¨gÑ6Ô6Ð6ØÔ'ð &ØŸš d¤gÑ.Ô.Ð.Ø#*§>¢>°#Ñ#6Ô#6°qÔ#9˜˜à"˜ð&ð>Ø$( D¨Ô)=Ñ$>Ô$>  øÝ$.µ´Ð#=ð >ð >ð >å#8ð !>Ø$) E E E Eà*C CÝ*1°#©,¬,¸AÐ$=øøøøð>øøøð $%ð 7Ý#8ð !7Ø$)ð)JÝ,/°©F¬Fð)Jð )Jð )Jð %(õ +2°#©,¬,Ð$6à ! A¡˜AØ*1¯.ª.¸Ñ*;Ô*;™K˜A˜xØ  1šu˜uØ %Ø ! ! " "¤˜Að3&ð8 —O’OÑ%Ô%Ð%Ñ%ø�G—O’OÑ%Ô%Ð%Ð%øøøàˆŒ	Ø ˆŒà�Š‰ŒˆàÔð 	 $Ô"Hð 	ØŒG�MŠM‰OŒOˆOØˆŒàŒxð 	8Õ 5ð 	8¸(ÀQº,¸,å˜x°Ð7Ñ7Ô7Ð7åŒ{×Ò Ñ%Ô%Ð%su   ÅI Å45F5Æ)I Æ5F9Æ9I Æ<F9Æ=BI ÉI.É-I.Ì&AQ ÎNÎQ ÎOÎ)OÎ0Q Î5OÏOÏAQ Ñ Qc                óÊ   — | j         €/t          j                             | j        | j        ¦  «        | _        | j        dk    r!t          j                             | ¦  «         d S d S )NÚP)r„   r
   r   ÚnewrZ   r[   r“   r…   rc   s    r"   r—   zImageFile.load_prepareC  sV   € àŒ8ÐÝ”j—n’n T¤Y°´	Ñ:Ô:ˆDŒGàŒ9˜ÒÐÝŒK×Ò˜TÑ"Ô"Ð"Ð"Ð"ð Ðr)   c                ó   — d S rb   r.   rc   s    r"   r£   zImageFile.load_endK  ó   € àˆr)   Úframer   r   c                óÐ   — || j         k     s3t          | d¦  «        r| j        �-|t          | d¦  «        | j         z   k    rd}t	          |¦  «        ‚|                      ¦   «         |k    S )NÚ	_n_framesÚn_framesz attempt to seek outside sequence)rG   rˆ   rµ   r™   rW   Útell)r^   r³   r!   s      r"   Ú_seek_checkzImageFile._seek_checkW  so   € à�D”OÒ#Ð#õ ˜T ;Ñ/Ô/ð	 $ð 59´NÐ4JØ�W T¨:Ñ6Ô6¸¼ÑHÒHÐHð 5ˆCÝ˜3‘-”-Ðà�yŠy‰{Œ{˜eÒ#Ð#r)   rb   )r=   r>   r?   r@   r   rA   ©r   rA   )r   re   )rk   rl   r   rA   ©r   rq   )r³   r   r   r   )r7   r8   r9   Ú__doc__rF   rS   rj   rn   rp   r…   r—   r£   r¸   Ú__classcell__)r`   s   @r"   r<   r<   n   sÿ   ø€ € € € € Ø4Ð4ð NRð0ð 0ð 0ð 0ð 0ð 0ð 0ðdð ð ð ðð ð ð ð$ð $ð $ð $ð $ð $ðð ð ð ðG&ð G&ð G&ð G&ðR#ð #ð #ð #ðð ð ð ð$ð $ð $ð $ð $ð $ð $ð $r)   r<   c                  ó8   — e Zd Zd	d„Zej        d
d„¦   «         ZdS )ÚStubHandlerr“   ÚStubImageFiler   rA   c                ó   — d S rb   r.   ©r^   r“   s     r"   rN   zStubHandler.openh  rd   r)   úImage.Imagec                ó   — d S rb   r.   rÁ   s     r"   r…   zStubHandler.loadk  r²   r)   N)r“   r¿   r   rA   )r“   r¿   r   rÂ   )r7   r8   r9   rN   ÚabcÚabstractmethodr…   r.   r)   r"   r¾   r¾   g  sL   € € € € € ðð ð ð ð 	Ôðð ð ñ Ôðð ð r)   r¾   c                  ó*   — e Zd ZdZd
d„Zdd„Zdd„Zd	S )r¿   z±
    Base class for stub image loaders.

    A stub loader is an image loader that can identify files of a
    certain format, but relies on external code to load the file.
    r   rA   c                ó$   — d}t          |¦  «        ‚)Nz+StubImageFile subclass must implement _open©ÚNotImplementedError©r^   r!   s     r"   rS   zStubImageFile._openx  s   € Ø;ˆÝ! #Ñ&Ô&Ð&r)   rq   c                óì   — |                       ¦   «         }|€d| j        › d�}t          |¦  «        ‚|                     | ¦  «        }|€J ‚|j        | _        |j        | _        |                     ¦   «         S )Nzcannot find loader for this z file)Ú_loadrg   r   r…   r`   Ú__dict__)r^   Úloaderr!   Úimages       r"   r…   zStubImageFile.load|  so   € Ø—’‘”ˆØˆ>ØC°´ÐCÐCÐCˆCÝ˜#‘,”,ÐØ—’˜DÑ!Ô!ˆØÐ Ð Ð àœˆŒØœˆŒØ�zŠz‰|Œ|Ðr)   úStubHandler | Nonec                ó$   — d}t          |¦  «        ‚)z (Hook) Find actual image loader.z+StubImageFile subclass must implement _loadrÈ   rÊ   s     r"   rÌ   zStubImageFile._loadˆ  s   € à;ˆÝ! #Ñ&Ô&Ð&r)   Nr¹   rº   )r   rÐ   )r7   r8   r9   r»   rS   r…   rÌ   r.   r)   r"   r¿   r¿   p  sZ   € € € € € ðð ð'ð 'ð 'ð 'ð
ð 
ð 
ð 
ð'ð 'ð 'ð 'ð 'ð 'r)   r¿   c                  ór   — e Zd ZU dZdZdZded<   dZded<   dZded<   d	Z	d	Z
dd„Zdd„Zdd„Zdd„Zdd„ZdS )ÚParserzj
    Incremental image parser.  This class implements the standard
    feed/close consumer interface.
    NzImage.Image | NonerÏ   zbytes | NoneÚdataz,Image.core.ImagingDecoder | PyDecoder | Noner   r   r   rA   c                ó(   — | j         �
J d¦   «         ‚dS )zµ
        (Consumer) Reset the parser.  Note that you can only call this
        method immediately after you've created a parser; parser
        instances cannot be reused.
        Nzcannot reuse parsers)rÔ   rc   s    r"   ÚresetzParser.reset›  s!   € ð ŒyÐ Ð Ð"8Ñ Ô Ð Ð Ð r)   rR   c                óÌ  — | j         rdS | j        €|| _        n| j        |z   | _        | j        rÕ| j        dk    r^t	          t          | j        ¦  «        | j        ¦  «        }| j        |d…         | _        | j        |z
  | _        | j        dk    s| j        sdS | j                             | j        ¦  «        \  }}|dk     r.d| _        d| _         |dk     rd| _        t          |d¬¦  «        ‚dS | j        |d…         | _        dS | j        rdS 	 t          j
        | j        ¦  «        5 }t          j        |¦  «        }ddd¦  «         n# 1 swxY w Y   t          |d¦  «        pt          |d¦  «        }|st          |j        ¦  «        dk    rd| _        n·|                     ¦   «          |j        d         \  }}}	}
g |_        t          j        |j        ||
|j        ¦  «        | _        | j                             |j        |¦  «         |	| _        | j        t          | j        ¦  «        k    r | j        | j        d…         | _        d| _        || _        dS # t*          $ r Y dS w xY w)z¦
        (Consumer) Feed data to the parser.

        :param data: A string buffer.
        :exception OSError: If the parser failed to parse the image file.
        Nr   r	   Fr(   ru   rt   )ÚfinishedrÔ   r   r5   Úminr‡   r    rÏ   r#   ÚioÚBytesIOr
   rN   rˆ   rI   r—   rœ   rZ   rK   r�   r“   r   )r^   rÔ   Úskipr­   r¬   r=   r“   ÚflagÚdÚoÚas              r"   ÚfeedzParser.feed£  sž  € ð Œ=ð 	ØˆFàŒ9ÐØˆDŒIˆIàœ	 DÑ(ˆDŒIð Œ<ð 8	 ØŒ{˜QŠˆå�3˜tœy™>œ>¨4¬;Ñ7Ô7�Ø œI d e eÔ,�”	Ø"œk¨DÑ0�”Ø”; ’?�?¨$¬)�?Ø�Fà”<×&Ò& t¤yÑ1Ô1‰DˆAˆqà�1Šuˆuà �”	Ø !�”Ø�q’5�5à!%�D”JÝ& q°%Ð8Ñ8Ô8Ð8ð �FØœ	 ! " "œˆDŒIˆIˆIàŒZð  	 ð ˆDð Ý”Z ¤	Ñ*Ô*ð (¨bÝœ B™œ�Bð(ð (ð (ñ (ô (ð (ð (ð (ð (ð (ð (øøøð (ð (ð (ð (õ
 ˜r ;Ñ/Ô/ÐKµ7¸2¸{Ñ3KÔ3K�Øð (�3˜rœw™<œ<¨1Ò,Ð,à"&�D”K�Kð —O’OÑ%Ô%Ð%Ø!#¤¨¤‘J�A�q˜!˜QØ �B”GÝ#(Ô#4°R´W¸aÀÀBÔDTÑ#UÔ#U�D”LØ”L×)Ò)¨"¬%°Ñ3Ô3Ð3ð #$�D”KØ”{¥c¨$¬)¡n¤nÒ4Ð4Ø$(¤I¨d¬k¨m¨mÔ$<˜œ	Ø&'˜œà�”
�
�
øõ+ ð ð ð Ø��ðøøøs6   ÄI Ä'EÄ<I ÅEÅI ÅEÅI É
I#É"I#c                ó   — | S rb   r.   rc   s    r"   Ú	__enter__zParser.__enter__ï  s   € Øˆr)   r6   Úobjectc                ó.   — |                       ¦   «          d S rb   )r]   ©r^   r6   s     r"   Ú__exit__zParser.__exit__ò  s   € Ø�
Š
‰Œˆˆˆr)   rÂ   c                óÚ  — | j         r;|                      d¦  «         dx| _        | _         | j        sd}t	          |¦  «        ‚| j        sd}t	          |¦  «        ‚| j        r„t          j        | j        ¦  «        5 }	 t          j	        |¦  «        | _        | j         
                    ¦   «          n# | j         
                    ¦   «          w xY w	 ddd¦  «         n# 1 swxY w Y   | j        S )a  
        (Consumer) Close the stream.

        :returns: An image object.
        :exception OSError: If the parser failed to parse the image file either
                            because it cannot be identified or cannot be
                            decoded.
        r)   Nzimage was incompletezcannot parse this image)r   rá   rÔ   rØ   r   rÏ   rÚ   rÛ   r
   rN   r…   )r^   r!   r=   s      r"   r]   zParser.closeõ  s  € ð Œ<ð 	#à�IŠI�c‰NŒNˆNØ'+Ð+ˆDŒI˜œØ”=ð #Ø,�Ý˜c‘l”lÐ"ØŒzð 	Ø+ˆCÝ˜#‘,”,ÐØŒ9ð 	&õ ”˜DœIÑ&Ô&ð &¨"ð&Ý!&¤¨B¡¤�D”Jà”J—O’OÑ%Ô%Ð%Ð%ø�D”J—O’OÑ%Ô%Ð%Ð%øøøÐ%ð	&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð
 ŒzÐs*   Á;CÁ=B0ÂCÂ0CÃCÃCÃ"Cr¹   )rÔ   rR   r   rA   )r   rÓ   )r6   rä   r   rA   )r   rÂ   )r7   r8   r9   r»   ÚincrementalrÏ   r:   rÔ   r   r5   rØ   rÖ   rá   rã   rç   r]   r.   r)   r"   rÓ   rÓ   Ž  sÍ   € € € € € € ðð ð
 €KØ $€EÐ$Ð$Ð$Ñ$Ø€DÐÐÐÑØ<@€GÐ@Ð@Ð@Ñ@Ø€FØ€Hð9ð 9ð 9ð 9ðJ ð J ð J ð J ðXð ð ð ðð ð ð ðð ð ð ð ð r)   rÓ   r“   rÂ   r=   ú	IO[bytes]rI   úlist[_Tile]ÚbufsizerA   c           	     ó  — |                       ¦   «          t          | d¦  «        sd| _        |                     t          ¬¦  «         t          t          || j        d         dz  ¦  «        }	 |                     ¦   «         }| 	                    ¦   «          t          | ||||¦  «         n7# t          t          j        f$ r}t          | |||d|¦  «         Y d}~nd}~ww xY wt          |d¦  «        r| 	                    ¦   «          dS dS )z«Helper to save image based on tile list

    :param im: Image object.
    :param fp: File object.
    :param tile: Tile list.
    :param bufsize: Optional buffer size
    Úencoderconfigr.   ry   r   é   NÚflush)r…   rˆ   rî   r˜   r/   ÚmaxrL   r[   r�   rð   Ú_encode_tiler   rÚ   ÚUnsupportedOperation)r“   r=   rI   rì   ÚfhÚexcs         r"   Ú_saverö     s  € ð ‡G‚G�I„I€IÝ�2�Ñ'Ô'ð ØˆÔØ‡I‚I•)€IÑÔÐõ
 •(˜G R¤W¨Q¤Z°!¡^Ñ4Ô4€Gð7Ø�YŠY‰[Œ[ˆØ
�Š‰
Œ
ˆ
Ý�R˜˜T 7¨BÑ/Ô/Ð/Ð/øÝ�BÔ3Ð4ð 7ð 7ð 7Ý�R˜˜T 7¨D°#Ñ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6øøøøð7øøøåˆr�7ÑÔð Ø
�Š‰
Œ
ˆ
ˆ
ˆ
ðð s   Á,;B( Â(CÂ>CÃCrô   ú
int | Nonerõ   úBaseException | Nonec                óv  — |D �]4\  }}}}	|dk    r|                      |¦  «         t          j        | j        ||	| j        ¦  «        }
	 |
                     | j        |¦  «         |
j        r0|
                     |¦  «         |
 	                    ¦   «         d         }nW|r;	 |
 
                    |¦  «        dd …         \  }}|                     |¦  «         |rnŒ9n|€J ‚|
                     ||¦  «        }|dk     rt          |d¬¦  «        |‚	 |
                     ¦   «          �Œ# |
                     ¦   «          w xY wd S )Nr   r	   Tr(   )r‹   r
   Ú_getencoderrZ   rî   r�   r“   Ú	pushes_fdrŸ   Úencode_to_pyfdÚencodeÚwriteÚencode_to_filer#   r¢   )r“   r=   rI   rì   rô   rõ   Úencoder_namer4   r5   r6   r   ÚerrcoderÔ   s                r"   rò   rò   3  sj  € ð 04ð ñ Ñ+ˆ�g˜v tØ�AŠ:ˆ:Ø�GŠG�F‰OŒOˆOÝÔ# B¤G¨\¸4ÀÔAQÑRÔRˆð	Ø×Ò˜RœU GÑ,Ô,Ð,ØÔ ð BØ—’˜bÑ!Ô!Ð!Ø!×0Ò0Ñ2Ô2°1Ô5��àð 
Bð"Ø(/¯ª°wÑ(?Ô(?ÀÀÀÔ(C™˜ ØŸš ™œ˜Ø"ð "Ø!ð	"ð "ð ˜>˜>˜>Ø%×4Ò4°R¸ÑAÔA�GØ˜Š{ˆ{Ý" 7°DÐ9Ñ9Ô9¸sÐBð ð �OŠOÑÔÐÑøˆG�OŠOÑÔÐÐøøøð1ð s   ÁCD Ä D6r[   rR   c                óè  — |dk    rdS |t           k    r;|                      |¦  «        }t          |¦  «        |k     rd}t          |¦  «        ‚|S g }|}|dk    rX|                      t	          |t           ¦  «        ¦  «        }|sn-|                     |¦  «         |t          |¦  «        z  }|dk    °Xt          d„ |D ¦   «         ¦  «        |k     rd}t          |¦  «        ‚d                     |¦  «        S )a»  
    Reads large blocks in a safe way.  Unlike fp.read(n), this function
    doesn't trust the user.  If the requested size is larger than
    SAFEBLOCK, the file is read block by block.

    :param fp: File handle.  Must implement a <b>read</b> method.
    :param size: Number of bytes to read.
    :returns: A string containing <i>size</i> bytes of data.

    Raises an OSError if the file is truncated and the read cannot be completed

    r   r)   zTruncated File Readc              3  ó4   K  — | ]}t          |¦  «        V — Œd S rb   )r‡   )r~   Úblocks     r"   ú	<genexpr>z_safe_read.<locals>.<genexpr>s  s(   è è € Ð
*Ð
*˜%�3ˆu‰:Œ:Ð
*Ð
*Ð
*Ð
*Ð
*Ð
*r)   )Ú	SAFEBLOCKrŠ   r‡   r   rÙ   ÚappendÚsumÚjoin)r=   r[   rÔ   r!   ÚblocksÚremaining_sizer  s          r"   Ú
_safe_readr  V  s  € ð ˆq‚y€yØˆsØ�yÒÐØ�wŠw�t‰}Œ}ˆÝˆt‰9Œ9�tÒÐØ'ˆCÝ˜#‘,”,ÐØˆØ€FØ€NØ
˜1Ò
Ð
Ø—’�˜N­IÑ6Ô6Ñ7Ô7ˆØð 	ØØ�Š�eÑÔÐØ�#˜e™*œ*Ñ$ˆð ˜1Ò
Ð
õ Ð
*Ð
* 6Ð
*Ñ
*Ô
*Ñ*Ô*¨TÒ1Ð1Ø#ˆÝ�c‰lŒlÐØ�8Š8�FÑÔÐr)   c                  ó   — e Zd Zdd„Zdd„ZdS )	ÚPyCodecStater   rA   c                ó>   — d| _         d| _        d| _        d| _        d S )Nr   )ÚxsizeÚysizeÚxoffÚyoffrc   s    r"   rF   zPyCodecState.__init__z  s"   € ØˆŒ
ØˆŒ
ØˆŒ	ØˆŒ	ˆ	ˆ	r)   útuple[int, int, int, int]c                óV   — | j         | j        | j         | j        z   | j        | j        z   fS rb   )r  r  r  r  rc   s    r"   r4   zPyCodecState.extents€  s'   € ØŒy˜$œ) T¤Y°´Ñ%;¸T¼YÈÌÑ=SÐSÐSr)   Nr¹   )r   r  )r7   r8   r9   rF   r4   r.   r)   r"   r  r  y  sB   € € € € € ðð ð ð ðTð Tð Tð Tð Tð Tr)   r  c                  óF   — e Zd ZU ded<   dd	„Zdd„Zdd„Zdd„Z	 ddd„ZdS )ÚPyCodeczIO[bytes] | NoneÚfdrZ   r1   r6   r   r   rA   c                ó€   — d | _         t          ¦   «         | _        d | _        || _        |                      |¦  «         d S rb   )r“   r  rk   r  rZ   Úinit)r^   rZ   r6   s      r"   rF   zPyCodec.__init__‡  s5   € Ø15ˆŒÝ!‘^”^ˆŒ
ØˆŒØˆŒ	Ø�	Š	�$‰Œˆˆˆr)   útuple[Any, ...]c                ó   — || _         dS )z—
        Override to perform codec specific initialization

        :param args: Tuple of arg items from the tile entry
        :returns: None
        N)r6   ræ   s     r"   r  zPyCodec.initŽ  s   € ð ˆŒ	ˆ	ˆ	r)   c                ó   — dS )zT
        Override to perform codec specific cleanup

        :returns: None
        Nr.   rc   s    r"   r¢   zPyCodec.cleanup—  s	   € ð 	ˆr)   rê   c                ó   — || _         dS )z�
        Called from ImageFile to set the Python file-like object

        :param fd: A Python file-like object
        :returns: None
        N)r  )r^   r  s     r"   rŸ   zPyCodec.setfdŸ  s   € ð ˆŒˆˆr)   Nr“   úImage.core.ImagingCorer4   r3   c                ó:  — || _         |r|\  }}}}nd\  }}}}|dk    r*|dk    r$| j         j        \  | j        _        | j        _        n6|| j        _        || j        _        ||z
  | j        _        ||z
  | j        _        | j        j        dk    s| j        j        dk    rd}t          |¦  «        ‚| j        j        | j        j        z   | j         j        d         k    s-| j        j        | j        j        z   | j         j        d         k    rd}t          |¦  «        ‚dS )zø
        Called from ImageFile to set the core output image for the codec

        :param im: A core image object
        :param extents: a 4 tuple of (x0, y0, x1, y1) defining the rectangle
            for this tile
        :returns: None
        )r   r   r   r   r   zSize cannot be negativer	   z Tile cannot extend outside imageN)r“   r[   rk   r  r  r  r  Ú
ValueError)r^   r“   r4   Úx0Úy0Úx1Úy1r!   s           r"   r�   zPyCodec.setimage¨  s  € ð ˆŒàð 	,Ø&ÑˆR��R˜˜à+ÑˆR��R˜à�Š7ˆ7�r˜Q’w�wØ15´´Ñ.ˆDŒJÔ˜dœjÔ.Ð.à ˆDŒJŒOØ ˆDŒJŒOØ! B™wˆDŒJÔØ! B™wˆDŒJÔàŒ:Ô˜qÒ Ð  D¤JÔ$4¸Ò$9Ð$9Ø+ˆCÝ˜S‘/”/Ð!ð ŒJÔ˜tœzœÑ.°´´¸a´Ò@Ð@ØŒzÔ $¤*¤/Ñ1°D´G´LÀ´OÒCÐCà4ˆCÝ˜S‘/”/Ð!ð DÐCr)   )rZ   r1   r6   r   r   rA   )r6   r  r   rA   r¹   )r  rê   r   rA   rb   )r“   r  r4   r3   r   rA   )	r7   r8   r9   r:   rF   r  r¢   rŸ   r�   r.   r)   r"   r  r  „  s�   € € € € € € ØÐÐÑðð ð ð ðð ð ð ðð ð ð ðð ð ð ð 59ð'"ð '"ð '"ð '"ð '"ð '"ð '"r)   r  c                  óB   — e Zd ZdZdZedd„¦   «         Zdd	„Z	 ddd„Zd
S )Ú	PyDecoderzË
    Python implementation of a format decoder. Override this class and
    add the decoding logic in the :meth:`decode` method.

    See :ref:`Writing Your Own File Codec in Python<file-codecs-py>`
    Fr   r   c                ó   — | j         S rb   )Ú	_pulls_fdrc   s    r"   rž   zPyDecoder.pulls_fdÜ  s
   € àŒ~Ðr)   Úbufferú$bytes | Image.SupportsArrayInterfaceútuple[int, int]c                ó$   — d}t          |¦  «        ‚)a=  
        Override to perform the decoding process.

        :param buffer: A bytes object with the data to be decoded.
        :returns: A tuple of ``(bytes consumed, errcode)``.
            If finished with decoding return -1 for the bytes consumed.
            Err codes are from :data:`.ImageFile.ERRORS`.
        zunavailable in base decoderrÈ   )r^   r*  r!   s      r"   r    zPyDecoder.decodeà  ó   € ð ,ˆÝ! #Ñ&Ô&Ð&r)   Nr.   rÔ   rR   Úrawmodere   Úextrar  rA   c                ód  — |s| j         }t          j        | j         d||¦  «        }| j        €J ‚|                     | j        | j                             ¦   «         ¦  «         |                     |¦  «        }|d         dk    rd}t          |¦  «        ‚|d         dk    rd}t          |¦  «        ‚dS )aS  
        Convenience method to set the internal image from a stream of raw data

        :param data: Bytes to be set
        :param rawmode: The rawmode to be used for the decoder.
            If not specified, it will default to the mode of the image
        :param extra: Extra arguments for the decoder.
        :returns: None
        rv   Nr   znot enough image datar	   zcannot decode image data)	rZ   r
   rœ   r“   r�   rk   r4   r    r!  )r^   rÔ   r/  r0  rÞ   r«   r!   s          r"   Ú
set_as_rawzPyDecoder.set_as_rawì  s¯   € ð ð 	 Ø”iˆGÝÔ˜dœi¨°¸Ñ?Ô?ˆØŒwÐ"Ð"Ð"Ø	�
Š
�4”7˜DœJ×.Ò.Ñ0Ô0Ñ1Ô1Ð1Ø�HŠH�T‰NŒNˆàˆQŒ4�1Š9ˆ9Ø)ˆCÝ˜S‘/”/Ð!ØˆQŒ4�1Š9ˆ9Ø,ˆCÝ˜S‘/”/Ð!ð ˆ9r)   ©r   r   )r*  r+  r   r,  )Nr.   )rÔ   rR   r/  re   r0  r  r   rA   )	r7   r8   r9   r»   r)  Úpropertyrž   r    r2  r.   r)   r"   r'  r'  Ò  sw   € € € € € ðð ð €Iàðð ð ñ „Xðð
'ð 
'ð 
'ð 
'ð QSð"ð "ð "ð "ð "ð "ð "r)   r'  c                  óF   — e Zd ZdZdZedd„¦   «         Zdd	„Zdd„Zdd„Z	dS )Ú	PyEncoderzË
    Python implementation of a format encoder. Override this class and
    add the decoding logic in the :meth:`encode` method.

    See :ref:`Writing Your Own File Codec in Python<file-codecs-py>`
    Fr   r   c                ó   — | j         S rb   )Ú
_pushes_fdrc   s    r"   rû   zPyEncoder.pushes_fd  s
   € àŒÐr)   rì   r   útuple[int, int, bytes]c                ó$   — d}t          |¦  «        ‚)a   
        Override to perform the encoding process.

        :param bufsize: Buffer size.
        :returns: A tuple of ``(bytes encoded, errcode, bytes)``.
            If finished with encoding return 1 for the error code.
            Err codes are from :data:`.ImageFile.ERRORS`.
        zunavailable in base encoderrÈ   )r^   rì   r!   s      r"   rý   zPyEncoder.encode  r.  r)   r,  c                ó˜   — | j         sdS |                      d¦  «        \  }}}|r#| j        €J ‚| j                             |¦  «         ||fS )zø
        If ``pushes_fd`` is ``True``, then this method will be used,
        and ``encode()`` will only be called once.

        :returns: A tuple of ``(bytes consumed, errcode)``.
            Err codes are from :data:`.ImageFile.ERRORS`.
        )r   r   r   )rû   rý   r  rþ   )r^   Úbytes_consumedr  rÔ   s       r"   rü   zPyEncoder.encode_to_pyfd"  s^   € ð Œ~ð 	Ø�5Ø(,¯ª°A©¬Ñ%ˆ˜ Øð 	 Ø”7Ð&Ð&Ð&ØŒG�MŠM˜$ÑÔÐØ˜wÐ&Ð&r)   rô   c                óš   — d}|dk    rB|                       |¦  «        \  }}}|dk    rt          j        |||d…         ¦  «         |dk    °B|S )zì
        :param fh: File handle.
        :param bufsize: Buffer size.

        :returns: If finished successfully, return 0.
            Otherwise, return an error code. Err codes are from
            :data:`.ImageFile.ERRORS`.
        r   N)rý   rO   rþ   )r^   rô   rì   r  ÚstatusÚbufs         r"   rÿ   zPyEncoder.encode_to_file2  s_   € ð ˆØ˜ŠlˆlØ#'§;¢;¨wÑ#7Ô#7Ñ ˆF�G˜SØ˜ŠzˆzÝ”˜˜S   œ\Ñ*Ô*Ð*ð ˜Šlˆlð ˆr)   Nr3  )rì   r   r   r9  )r   r,  )rô   r   rì   r   r   r   )
r7   r8   r9   r»   r8  r4  rû   rý   rü   rÿ   r.   r)   r"   r6  r6    s   € € € € € ðð ð €Jàðð ð ñ „Xðð
'ð 
'ð 
'ð 
'ð'ð 'ð 'ð 'ð ð ð ð ð ð r)   r6  )r   r   r   r   r   r   )r   r   r   r   )r*   r+   r   r   )r   )
r“   rÂ   r=   rê   rI   rë   rì   r   r   rA   rb   )r“   rÂ   r=   rê   rI   rë   rì   r   rô   r÷   rõ   rø   r   rA   )r=   rê   r[   r   r   rR   ))Ú
__future__r   rÄ   rÚ   rš   rO   rX   r‰   Útypingr   r   r   r   r   rD   r
   Ú
_deprecater   Ú_utilr   Ú_typingr   rL   r  r¡   r   r#   r%   r/   r+   r<   r¾   r¿   rÓ   rö   rò   r  r  r  r'  r6  r.   r)   r"   ú<module>rE     s-  ðð: #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø 	€	€	€	Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;à Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð àð (Ø'Ð'Ð'Ð'Ð'Ð'à€à€	àÐ Ø Nð 	%ØØØØð
ð 
€ððð ð ð ð-ð -ð -ð -ðð ð ð ð
.ð .ð .ð .ð .ˆJñ .ô .ð .ðv$ð v$ð v$ð v$ð v$�”ñ v$ô v$ð v$ðrð ð ð ð ñ ô ð ð'ð 'ð 'ð 'ð '�Iñ 'ô 'ð 'ð<Cð Cð Cð Cð Cñ Cô Cð CðRð ð ð ð ðD !%ð ð  ð  ð  ð  ðF ð  ð  ð  ðFTð Tð Tð Tð Tñ Tô Tð TðK"ð K"ð K"ð K"ð K"ñ K"ô K"ð K"ð\3"ð 3"ð 3"ð 3"ð 3"�ñ 3"ô 3"ð 3"ðl8ð 8ð 8ð 8ð 8�ñ 8ô 8ð 8ð 8ð 8r)   