Ë
    ñEje_  ã                  ór  — d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm	Z	 ddl
mZ ddlmZ ddlmZ dZd	Zd
Z	 ddddddœZ	 d„ Zd„ Zd„ Z G d„ de	«      Z G d„ dej                  «      Z G d„ de«      Z G d„ d«      Zd'd(d„Zd)d*d„Zd„ Z G d„ d «      Z G d!„ d"«      Z G d#„ d$e«      Z  G d%„ d&e«      Z!y)+é    )ÚannotationsN)ÚIOÚAnyÚ
NamedTupleé   )ÚImage)Ú	deprecate)Úis_pathi   i   Fzimage buffer overrun errorzdecoding errorzunknown errorzbad configurationzout of memory error)éÿÿÿÿéþÿÿÿéýÿÿÿéøÿÿÿi÷ÿÿÿc               óÔ   — 	 t         j                  j                  | «      }|s|rdnd› d| › �}|d|rdnd› d�z  }t        |«      S # t        $ r t        j                  | «      }Y ŒEw xY w)NÚencoderÚdecoderz error z when ÚwritingÚreadingz image file)r   ÚcoreÚgetcodecstatusÚAttributeErrorÚERRORSÚgetÚOSError)Úerrorr   Úmsgs      úP/var/www/html/peoplehubportal/venv/lib/python3.12/site-packages/PIL/ImageFile.pyÚ_get_oserrorr   C   sv   € ð Ü�j‰j×'Ñ'¨Ó.ˆñ Ù%‘¨9Ð5°W¸U¸GÐDˆØˆV¡‘I¨iÐ8¸ÐDÑD€CÜ�3‹<Ðøô ò  Ü�j‰j˜ÓŠð ús   ‚A ÁA'Á&A'c                ó8   — 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   N   s%   € ÜØØ
ðGõô �u eÔ
,Ð,ó    c                ó   — | d   S )Né   © )Úts    r   Ú	_tilesortr(   X   s   € àˆQ‰4€Kr#   c                  ó6   — e Zd ZU ded<   ded<   ded<   ded<   y	)
Ú_TileÚstrÚ
codec_nameztuple[int, int, int, int]ÚextentsÚintÚoffsetztuple[Any, ...] | str | NoneÚargsN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__r&   r#   r   r*   r*   ]   s   … ØƒOØ&Ó&ØƒKØ
&Ô&r#   r*   c                  óR   ‡ — e Zd ZdZd
ˆ fd„	Zd„ Zˆ fd„Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zˆ xZS )Ú	ImageFilez*Base class for image file format handlers.c                ó~  •— t         ‰| �  «        d| _        d | _        d | _        	 d| _        d| _        t        | _        t        |«      r t        |d«      | _        || _        d| _        n|| _        || _        d | _        	 	 | j                  «        | j,                  r$| j.                  d   dk  s| j.                  d   dk  rd}t+        |«      ‚y # t        t         t"        t$        t&        j(                  f$ r}t+        |«      |‚d }~ww xY w# t0        $ r( | j                  r| j                  j3                  «        ‚ w xY w)Nr   r   r&   ÚrbTznot identified by this driver)ÚsuperÚ__init__Ú
_min_frameÚcustom_mimetypeÚtileÚreadonlyÚdecoderconfigÚMAXBLOCKÚdecodermaxblockr
   ÚopenÚfpÚfilenameÚ_exclusive_fpÚ_openÚ
IndexErrorÚ	TypeErrorÚKeyErrorÚEOFErrorÚstructr   ÚSyntaxErrorÚmodeÚsizeÚBaseExceptionÚclose)ÚselfrC   rD   Úvr   Ú	__class__s        €r   r:   zImageFile.__init__l   s'  ø€ Ü‰ÑÔàˆŒà#ˆÔàˆŒ	Ø7àˆŒàˆÔÜ'ˆÔä�2Œ;ä˜2˜t“nˆDŒGØˆDŒMØ!%ˆDÕð ˆDŒGØ$ˆDŒMà!%ˆDÔð	ð	,Ø—
‘
”ð —9’9 §	¡	¨!¡°Ò 1°T·Y±Y¸q±\ÀQÒ5FØ5�Ü! #Ó&Ð&ð 6Gøô ÜÜÜÜ—‘ðò ,ô " !“n¨!Ð+ûð,ûô ò 	à×!Ò!Ø—‘—‘”Øð		ús*   ÂC Â=D Ã(DÃ7DÄDÄD Ä1D<c                óº   — | j                   r| j                   S | j                  �7t        j                  j	                  | j                  j                  «       «      S y ©N)r<   Úformatr   ÚMIMEr   Úupper©rQ   s    r   Úget_format_mimetypezImageFile.get_format_mimetypeœ   sF   € Ø×ÒØ×'Ñ'Ð'Ø�;‰;Ð"Ü—:‘:—>‘> $§+¡+×"3Ñ"3Ó"5Ó6Ð6ð #r#   c                ó2   •— g | _         t        ‰| �	  |«       y rU   )r=   r9   Ú__setstate__)rQ   ÚstaterS   s     €r   r\   zImageFile.__setstate__¢   s   ø€ ØˆŒ	Ü‰Ñ˜UÕ#r#   c                ó^   — | j                   r| j                  j                  «        d| _        y)zCheck file integrityN)rE   rC   rP   rY   s    r   ÚverifyzImageFile.verify¦   s!   € ð
 ×ÒØ�G‰G�M‰MŒOØˆ�r#   c                óD
  — | j                   €d}t        |«      ‚t        j                  j                  | «      }| j                   s|S d| _        | j
                  xr t        | j                   «      dk(  }|xr t        t        d«       }d}	 | j                  }d}	 | j                  }d}|�rU| j                   d   \  }}}	}
t        |
t         «      r|
ddf}
|dk(  �r&t        |
«      dk\  �r|
d   | j"                  k(  �r|
d   t        j$                  v rï	 ddl}t)        | j
                  «      5 }|j'                  |j+                  «       d|j,                  ¬	«      | _        ddd«       |	| j.                  d   |
d   z  z   | j                  j/                  «       kD  rd
}t        |«      ‚t        j0                  j3                  | j                  | j.                  ||	|
«      | _        d}| j6                  rd| j6                  _        | j=                  «        d}| j                  �s…| j                   j?                  t@        ¬«       	 | jB                  }tE        jF                  | j                   d„ «      D ��cg c]  \  }}tI        |«      d   ‘Œ c}}| _         | j                   D �]  \  }}}	}
 ||	«       t        jJ                  | j"                  ||
| jL                  «      }	 |jO                  | j4                  |«       |jP                  r0|jS                  | j                  «       |jU                  d«      d   }n^|}	 	  || jV                  «      }|s!t^        rn?dt        |«      › d�}t        |«      ‚||z   }|jU                  |«      \  }}|dk  rn||d }Œ[|ja                  «        �Œ g | _         || _1        | je                  «        | jf                  r&| jh                  r| j                  jk                  «        d| _        | j                  st^        s|dk  rtm        |d¬«      ‚t        j                  j                  | «      S # t        $ r | j                  j                  }Y �ŒÇw xY w# t        $ r | j                  j                  }Y �ŒÞw xY w# 1 sw Y   �Œ/xY w# t        t        t:        f$ r d| _        Y �Œµw xY w# t        $ r d}Y �Œ{w xY wc c}}w # tX        tZ        j\                  f$ r}t^        rY d}~�Œed}t        |«      |‚d}~ww xY w# |ja                  «        w xY w)z"Load image data based on tile listNzcannot load this imager   Úpypy_version_infor   FÚrawé   )Úaccesszbuffer is not large enoughr   ©Úkeyr#   c                ó   — | d   | d   | d   fS )Nr   r   rc   r&   )r=   s    r   ú<lambda>z ImageFile.load.<locals>.<lambda>þ   s   € ¨T°!©W°d¸1±g¸tÀA¹wÐ,G€ r#   r   zimage file is truncatedzimage file is truncated (z bytes not processed)r"   )7r=   r   r   ÚloadÚmaprD   ÚlenÚhasattrÚsysÚ	load_readr   rC   ÚreadÚ	load_seekÚseekÚ
isinstancer+   rM   Ú	_MAPMODESÚmmaprB   ÚfilenoÚACCESS_READrN   r   Ú
map_bufferÚimÚpaletteÚdirtyÚImportErrorÚload_prepareÚsortr(   Útile_prefixÚ	itertoolsÚgroupbyÚlistÚ_getdecoderr?   ÚsetimageÚpulls_fdÚsetfdÚdecoderA   rG   rK   r   ÚLOAD_TRUNCATED_IMAGESÚcleanupr>   Úload_endrE   Ú!_close_exclusive_fp_after_loadingrP   r   )rQ   r   ÚpixelÚuse_mmapr>   ro   rq   Údecoder_namer-   r/   r0   rt   rC   Úerr_codeÚprefixÚ_Útilesr   ÚbÚsÚeÚns                         r   ri   zImageFile.load¯   sŠ  € ð �9‰9ÐØ*ˆCÜ˜#“,Ðä—‘× Ñ  Ó&ˆØ�yŠyØˆLàˆŒØ—=‘=Ò8¤S¨¯©£^°qÑ%8ˆàÒE¤G¬CÐ1DÓ$EÐ Eˆàˆð	 Ø—>‘>ˆDàˆHð	 Ø—>‘>ˆDØˆHò à26·)±)¸A±,Ñ/ˆL˜' 6¨4Ü˜$¤Ô$Ø˜a �|�à Ó%Ü˜“I “NØ˜‘G˜tŸy™yÓ(Ø˜‘GœuŸ™Ñ.ð$ãä˜dŸm™mÓ,ð V°Ø#'§9¡9¨R¯Y©Y«[¸!ÀD×DTÑDT 9Ó#U˜œ÷Và §	¡	¨!¡¨t°A©wÑ 6Ñ6¸¿¹¿¹»ÒHØ:˜Ü% c›lÐ*Ü#Ÿj™j×3Ñ3ØŸ™ $§)¡)¨\¸6À4ó�D”Gð  !�Hð —|’|Ø-.˜Ÿ™Ô*ð 	×ÑÔØˆØ�x‹xà�I‰I�N‰NœyˆNÔ)ðà×)Ñ)�ô !*× 1Ñ 1Ø—I‘IÑGó!÷á�A�uô �U“˜B“óˆDŒIð 8<·y±yó (&Ñ3�˜g v¨tÙ�V”Ü×+Ñ+Ø—I‘I˜|¨T°4×3EÑ3Eó�ð#&Ø×$Ñ$ T§W¡W¨gÔ6Ø×'Ò'ØŸ™ d§g¡gÔ.Ø#*§>¡>°#Ó#6°qÑ#9™à"˜Ø"ð>Ù$(¨×)=Ñ)=Ó$> ñ $%Ý#8Ø$)ð),Ü,/°«F¨8Ð3Hð)Jð %(ô +2°#«,Ð$6à ! A¡˜AØ*1¯.©.¸Ó*;™K˜A˜xØ  1šuØ %Ø ! ! " ˜Að3 #ð8 —O‘OÖ%ðQ(&ðT ˆŒ	Ø ˆŒà�‰Œà×Ò $×"HÒ"HØ�G‰G�M‰MŒOØˆŒà�xŠxÕ 5¸(ÀQº,ä˜x°Ô7Ð7ä�{‰{×Ñ Ó%Ð%øôe ò 	 Ø—7‘7—<‘<‹Dð	 ûô ò 	 Ø—7‘7—<‘<‹Dð	 ú÷$Vñ Vûô '¬´Ð=ò $Ø#�D—Hð$ûô "ò Ø“ðüóøô* %/´·±Ð#=ò >å#8Ý$)à*C CÜ*1°#«,¸AÐ$=ûð>ûð2 —O‘OÕ%ús¥   ÂP? ÂQ% ÄR Ä,2RÅB#R ÉR: É1SËATÌ8SÍ
ATÐ?Q"Ñ!Q"Ñ%RÒRÒRÒR ÒR7Ò6R7Ò:S	ÓS	ÓT
Ó+TÓ1TÓ7TÔT
Ô
TÔTc                óx  — | j                   rF| j                   j                  | j                  k7  s#| j                   j                  | j                  k7  r9t        j                  j                  | j                  | j                  «      | _         | j                  dk(  r t        j                  j                  | «       y y )NÚP)rx   rM   rN   r   r   Únewri   rY   s    r   r|   zImageFile.load_prepare:  sp   € à�wŠw˜$Ÿ'™'Ÿ,™,¨$¯)©)Ò3°t·w±w·|±|ÀtÇyÁyÒ7PÜ—j‘j—n‘n T§Y¡Y°·	±	Ó:ˆDŒGà�9‰9˜ÒÜ�K‰K×Ñ˜TÕ"ð r#   c                 ó   — y rU   r&   rY   s    r   r‰   zImageFile.load_endB  s   € àr#   c                óÈ   — || j                   k  s4t        | d«      r| j                  �)|| j                  | j                   z   k\  rd}t	        |«      ‚| j                  «       |k7  S )NÚ	_n_framesz attempt to seek outside sequence)r;   rl   r›   Ún_framesrJ   Útell)rQ   Úframer   s      r   Ú_seek_checkzImageFile._seek_checkN  sZ   € à�D—O‘OÒ#ô ˜T ;Ô/°D·N±NÐ4JØ˜TŸ]™]¨T¯_©_Ñ<Ò<ð 5ˆCÜ˜3“-Ðà�y‰y‹{˜eÑ#Ð#r#   )NN)r1   r2   r3   Ú__doc__r:   rZ   r\   r_   ri   r|   r‰   rŸ   Ú__classcell__)rS   s   @r   r6   r6   i   s1   ø„ Ù4õ.ò`7ô$òòI&òV#òö$r#   r6   c                  ó"   — e Zd ZdZd„ Zd„ Zd„ Zy)ÚStubImageFilez±
    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.
    c                ó   — d}t        |«      ‚)Nz+StubImageFile subclass must implement _open©ÚNotImplementedError©rQ   r   s     r   rF   zStubImageFile._openf  s   € Ø;ˆÜ! #Ó&Ð&r#   c                óê   — | j                  «       }|€d| j                  › d�}t        |«      ‚|j                  | «      }|€J ‚|j                  | _        |j
                  | _        |j                  «       S )Nzcannot find loader for this z file)Ú_loadrV   r   ri   rS   Ú__dict__)rQ   Úloaderr   Úimages       r   ri   zStubImageFile.loadj  sj   € Ø—‘“ˆØˆ>Ø0°·±°¸UÐCˆCÜ˜#“,ÐØ—‘˜DÓ!ˆØÐ Ð Ð àŸ™ˆŒØŸ™ˆŒØ�z‰z‹|Ðr#   c                ó   — d}t        |«      ‚)z (Hook) Find actual image loader.z+StubImageFile subclass must implement _loadr¥   r§   s     r   r©   zStubImageFile._loadv  s   € à;ˆÜ! #Ó&Ð&r#   N)r1   r2   r3   r    rF   ri   r©   r&   r#   r   r£   r£   ^  s   „ ñò'ò
ó'r#   r£   c                  óR   — e Zd ZU dZdZdZded<   dZdZdZ	dZ
d„ Zd„ Zd„ Zd	„ Zd
„ Zy)ÚParserzj
    Incremental image parser.  This class implements the standard
    feed/close consumer interface.
    NzImage.Image | Noner¬   r   c                ó*   — | j                   �J d«       ‚y)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)ÚdatarY   s    r   ÚresetzParser.reset‰  s   € ð �y‰yÐ Ð8Ð"8Ó8Ñ r#   c                óT  — | j                   ry| j                  €|| _        n| j                  |z   | _        | j                  ræ| j                  dkD  rmt	        t        | j                  «      | j                  «      }| j                  |d | _        | j                  |z
  | _        | j                  dkD  s| j                  sy| j                  j                  | j                  «      \  }}|dk  r(d| _        d| _         |dk  rd| _        t        |d¬«      ‚y| j                  |d | _        y| j                  ry	 t        j                  | j                  «      5 }t        j                  |«      }ddd«       t        d«      xs t        |d«      }|st        |j                  «      dk7  rd| _        || _        y|j                  «        |j                  d   \  }}}	}
g |_        t        j                   |j"                  ||
|j$                  «      | _        | j                  j'                  |j(                  |«       |	| _        | j                  t        | j                  «      k  r%| j                  | j                  d | _        d| _        || _        y# 1 sw Y   �Œ%xY w# t*        $ r Y y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"   rp   rn   )Úfinishedr±   r   r/   Úminrk   r†   r¬   r   ÚioÚBytesIOr   rB   rl   r=   r|   r‚   rM   r?   rƒ   rx   r   )rQ   r±   Úskipr•   r”   rC   rx   ÚflagÚdÚoÚas              r   ÚfeedzParser.feed‘  s(  € ð �=Š=Øà�9‰9ÐØˆD�IàŸ	™	 DÑ(ˆDŒIð �<Š<Ø�{‰{˜QŠäœ3˜tŸy™y›>¨4¯;©;Ó7�Ø ŸI™I d eÐ,�”	Ø"Ÿk™k¨DÑ0�”Ø—;‘; ’?¨$¯)ª)Øà—<‘<×&Ñ& t§y¡yÓ1‰DˆAˆqà�1Šuà �”	Ø !�”Ø�q’5à!%�D”JÜ& q°%Ô8Ð8ð ØŸ	™	 ! "˜ˆD�Ià�ZŠZð ð Ü—Z‘Z §	¡	Ó*ð (¨bÜŸ™ B›�B÷(ô
 ˜r ;Ó/ÒK´7¸2¸{Ó3K�Ùœ3˜rŸw™w›<¨1Ò,à"&�D”Kð  �•
ð —O‘OÔ%Ø!#§¡¨¡‘J�A�q˜!˜QØ �B”GÜ#(×#4Ñ#4°R·W±W¸aÀÀB×DTÑDTÓ#U�D”LØ—L‘L×)Ñ)¨"¯%©%°Ô3ð #$�D”KØ—{‘{¤c¨$¯)©)£nÒ4Ø$(§I¡I¨d¯k©k¨mÐ$<˜œ	Ø&'˜œà�•
÷/(ñ (ûäò Ùðús*   Ä6J ÅJÅ+J ÊJÊJ Ê	J'Ê&J'c                ó   — | S rU   r&   rY   s    r   Ú	__enter__zParser.__enter__Ý  s   € Øˆr#   c                ó$   — | j                  «        y rU   )rP   ©rQ   r0   s     r   Ú__exit__zParser.__exit__à  s   € Ø�
‰
�r#   c                ó,  — | j                   r8| j                  d«       dx| _        | _         | j                  sd}t	        |«      ‚| j
                  sd}t	        |«      ‚| j                  rjt        j                  | j                  «      5 }	 t        j                  |«      | _        | j
                  j                  «        	 ddd«       | j
                  S | j
                  S # | j
                  j                  «        w xY w# 1 sw Y   | j
                  S xY w)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   rB   ri   )rQ   r   rC   s      r   rP   zParser.closeã  sÐ   € ð �<Š<à�I‰I�cŒNØ'+Ð+ˆDŒI˜œØ—=’=Ø,�Ü˜c“lÐ"Ø�zŠzØ+ˆCÜ˜#“,ÐØ�9Š9ô —‘˜DŸI™IÓ&ð &¨"ð&Ü!&§¡¨B£�D”Jà—J‘J—O‘OÕ%÷	&ð
 �z‰zÐˆt�z‰zÐøð —J‘J—O‘OÕ%ú÷	&ð
 �z‰zÐús$   Â	C?ÂC Â%C?Ã C<Ã<C?Ã?D)r1   r2   r3   r    Úincrementalr¬   r4   r±   r   r/   r´   r²   r½   r¿   rÂ   rP   r&   r#   r   r¯   r¯   |  sH   … ñð
 €KØ $€EÐÓ$Ø€DØ€GØ€FØ€Hò9òJ òXòór#   r¯   c           	     ó¾  — | j                  «        t        | d«      sd| _        |j                  t        ¬«       t        t        || j                  d   dz  «      }	 |j                  «       }|j                  «        t        | ||||«       t        |d«      r|j                  «        yy# t        t        j                  f$ r}t        | |||d|«       Y d}~ŒLd}~ww xY w)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&   re   r   é   NÚflush)ri   rl   rÆ   r}   r(   Úmaxr@   rN   ru   rÈ   Ú_encode_tiler   r¶   ÚUnsupportedOperation)rx   rC   r=   ÚbufsizeÚfhÚexcs         r   Ú_saverÏ     s¾   € ð ‡G�G„IÜ�2�Ô'ØˆÔØ‡I�I”)€IÔô
 ”(˜G R§W¡W¨Q¡Z°!¡^Ó4€Gð7Ø�Y‰Y‹[ˆØ
�‰Œ
Ü�R˜˜T 7¨BÔ/ô ˆr�7ÔØ
�‰�
ð øô œB×3Ñ3Ð4ò 7Ü�R˜˜T 7¨D°#×6Ñ6ûð7ús   Á/B) Â)CÃCÃCc                ó0  — |D ]ü  \  }}}}	|dkD  r|j                  |«       t        j                  | j                  ||	| j                  «      }
	 |
j                  | j                  |«       |
j                  r%|
j                  |«       |
j                  «       d   }nA|r-	 |
j                  |«      dd  \  }}|j                  |«       |rnŒ,|
j                  ||«      }|dk  rt        |d¬«      |‚	 |
j                  «        Œþ y # |
j                  «        w xY w)Nr   r   Tr"   )rq   r   Ú_getencoderrM   rÆ   rƒ   rx   Ú	pushes_fdr…   Úencode_to_pyfdÚencodeÚwriteÚencode_to_filer   rˆ   )rx   rC   r=   rÌ   rÍ   rÎ   Úencoder_namer-   r/   r0   r   Úerrcoder±   s                r   rÊ   rÊ   !  s  € Ø/3ò Ñ+ˆ�g˜v tØ�AŠ:Ø�G‰G�FŒOÜ×#Ñ# B§G¡G¨\¸4À×AQÑAQÓRˆð	Ø×Ñ˜RŸU™U GÔ,Ø× Ò Ø—‘˜bÔ!Ø!×0Ñ0Ó2°1Ñ5‘áàØ(/¯©°wÓ(?ÀÀÐ(C™˜ ØŸ™ œÙ"Ø!ð	 ð &×4Ñ4°R¸ÓA�GØ˜Š{Ü" 7°DÔ9¸sÐBð ð �O‰OÕñ/øð. �O‰OÕús   ÁB!DÄDc                ó‚  — |dk  ry|t         k  r.| j                  |«      }t        |«      |k  rd}t        |«      ‚|S g }|}|dkD  rG| j                  t	        |t         «      «      }|sn%|j                  |«       |t        |«      z  }|dkD  rŒGt        d„ |D «       «      |k  rd}t        |«      ‚dj                  |«      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  ó2   K  — | ]  }t        |«      –— Œ y ­wrU   )rk   )Ú.0rº   s     r   ú	<genexpr>z_safe_read.<locals>.<genexpr>Y  s   è ø€ Ò
 �aŒ3ˆq�6Ñ
 ùs   ‚)Ú	SAFEBLOCKro   rk   r   rµ   ÚappendÚsumÚjoin)rC   rN   r±   r   Úremaining_sizeÚblocks         r   Ú
_safe_readrã   <  sÆ   € ð ˆq‚yØØŒyÒØ�w‰w�t‹}ˆÜˆt‹9�tÒØ'ˆCÜ˜#“,ÐØˆØ€DØ€NØ
˜1Ò
Ø—‘œ˜N¬IÓ6Ó7ˆÙØØ�‰�EÔØœ#˜e›*Ñ$ˆð ˜1Ó
ô Ñ
 ˜4Ô
 Ó  4Ò'Ø#ˆÜ�c‹lÐØ�8‰8�D‹>Ðr#   c                  ó   — e Zd Zd„ Zd„ Zy)ÚPyCodecStatec                ó<   — d| _         d| _        d| _        d| _        y )Nr   )ÚxsizeÚysizeÚxoffÚyoffrY   s    r   r:   zPyCodecState.__init__`  s   € ØˆŒ
ØˆŒ
ØˆŒ	Øˆ�	r#   c                ó’   — | j                   | j                  | j                   | j                  z   | j                  | j                  z   fS rU   )ré   rê   rç   rè   rY   s    r   r-   zPyCodecState.extentsf  s3   € Ø�y‰y˜$Ÿ)™) T§Y¡Y°·±Ñ%;¸T¿Y¹YÈÏÉÑ=SÐSÐSr#   N)r1   r2   r3   r:   r-   r&   r#   r   rå   rå   _  s   „ òóTr#   rå   c                  ó8   — e Zd ZU ded<   d„ Zd„ Zd„ Zd„ Zd	d„Zy)
ÚPyCodeczIO[bytes] | NoneÚfdc                ón   — d | _         t        «       | _        d | _        || _        | j                  |«       y rU   )rx   rå   r]   rî   rM   Úinit)rQ   rM   r0   s      r   r:   zPyCodec.__init__m  s+   € ØˆŒÜ!“^ˆŒ
ØˆŒØˆŒ	Ø�	‰	�$�r#   c                ó   — || _         y)z˜
        Override to perform codec specific initialization

        :param args: Array of args items from the tile entry
        :returns: None
        N)r0   rÁ   s     r   rð   zPyCodec.initt  s   € ð ˆ�	r#   c                 ó   — y)zT
        Override to perform codec specific cleanup

        :returns: None
        Nr&   rY   s    r   rˆ   zPyCodec.cleanup}  s   € ð 	r#   c                ó   — || _         y)z�
        Called from ImageFile to set the Python file-like object

        :param fd: A Python file-like object
        :returns: None
        N)rî   )rQ   rî   s     r   r…   zPyCodec.setfd…  s   € ð ˆ�r#   Nc                ó   — || _         |r|\  }}}}nd\  }}}}|dk(  r=|dk(  r8| j                   j                  \  | j                  _        | j                  _        nJ|| 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   kD  sG| j                  j                  | j                  j                  z   | j                   j                  d   kD  rd}t        |«      ‚y)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)rx   rN   r]   rç   rè   ré   rê   Ú
ValueError)rQ   rx   r-   Úx0Úy0Úx1Úy1r   s           r   rƒ   zPyCodec.setimageŽ  s,  € ð ˆŒáØ&ÑˆR��R™à+ÑˆR��R˜à�Š7�r˜Q’wØ15·±·±Ñ.ˆD�J‰JÔ˜dŸj™jÕ.à ˆD�J‰JŒOØ ˆD�J‰JŒOØ! B™wˆD�J‰JÔØ! B™wˆD�J‰JÔà�:‰:×Ñ˜qÒ  D§J¡J×$4Ñ$4¸Ò$9Ø+ˆCÜ˜S“/Ð!ð �J‰J×Ñ˜tŸz™zŸ™Ñ.°·±·±¸a±Ò@Ø�z‰z×Ñ $§*¡*§/¡/Ñ1°D·G±G·L±LÀ±OÒCà4ˆCÜ˜S“/Ð!ð Dr#   rU   )	r1   r2   r3   r4   r:   rð   rˆ   r…   rƒ   r&   r#   r   rí   rí   j  s!   … ØÓòòòòô#"r#   rí   c                  ó4   — e Zd ZdZdZed„ «       Zd„ Zddd„Zy)	Ú	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>`
    Fc                ó   — | j                   S rU   )Ú	_pulls_fdrY   s    r   r„   zPyDecoder.pulls_fd¾  s   € à�~‰~Ðr#   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¥   )rQ   Úbufferr   s      r   r†   zPyDecoder.decodeÂ  ó   € ð ,ˆÜ! #Ó&Ð&r#   Nc                ó@  — |s| j                   }t        j                  | j                   d|«      }|j                  | j                  | j
                  j                  «       «       |j                  |«      }|d   dk\  rd}t        |«      ‚|d   dk7  rd}t        |«      ‚y)a  
        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
        :returns: None
        rb   r   znot enough image datar   zcannot decode image dataN)	rM   r   r‚   rƒ   rx   r]   r-   r†   rõ   )rQ   r±   Úrawmoderº   r“   r   s         r   Ú
set_as_rawzPyDecoder.set_as_rawÎ  s�   € ñ Ø—i‘iˆGÜ×Ñ˜dŸi™i¨°Ó8ˆØ	�
‰
�4—7‘7˜DŸJ™J×.Ñ.Ó0Ô1Ø�H‰H�T‹NˆàˆQ‰4�1Š9Ø)ˆCÜ˜S“/Ð!ØˆQ‰4�1Š9Ø,ˆCÜ˜S“/Ð!ð r#   rU   )r±   ÚbytesÚreturnÚNone)	r1   r2   r3   r    rý   Úpropertyr„   r†   r  r&   r#   r   rû   rû   ´  s*   „ ñð €Iàñó ðò
'õ"r#   rû   c                  ó6   — e Zd ZdZdZed„ «       Zd„ Zd„ Zd„ Z	y)Ú	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>`
    Fc                ó   — | j                   S rU   )Ú
_pushes_fdrY   s    r   rÒ   zPyEncoder.pushes_fdð  s   € à�‰Ðr#   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¥   )rQ   rÌ   r   s      r   rÔ   zPyEncoder.encodeô  r   r#   c                óˆ   — | j                   sy| j                  d«      \  }}}|r| 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Õ   )rQ   Úbytes_consumedrØ   r±   s       r   rÓ   zPyEncoder.encode_to_pyfd   s@   € ð �~Š~ØØ(,¯©°A«Ñ%ˆ˜ ÙØ�G‰G�M‰M˜$ÔØ˜wÐ&Ð&r#   c                ó|   — d}|dk(  r4| j                  |«      \  }}}|dkD  r|j                  ||d «       |dk(  rŒ4|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Ô   rÕ   )rQ   rÍ   rÌ   rØ   ÚstatusÚbufs         r   rÖ   zPyEncoder.encode_to_file  sN   € ð ˆØ˜ŠlØ#'§;¡;¨wÓ#7Ñ ˆF�G˜SØ˜ŠzØ—‘˜˜V˜W˜Ô&ð ˜‹lð ˆr#   N)
r1   r2   r3   r    r  r  rÒ   rÔ   rÓ   rÖ   r&   r#   r   r	  r	  æ  s/   „ ñð €Jàñó ðò
'ò'ór#   r	  )r   )r  r  rU   )r=   zlist[_Tile])"Ú
__future__r   r¶   r   rK   rm   Útypingr   r   r   Ú r   Ú
_deprecater	   Ú_utilr
   r@   rÝ   r‡   r   r   r   r(   r*   r6   r£   r¯   rÏ   rÊ   rã   rå   rí   rû   r	  r&   r#   r   ú<module>r     sÞ   ðõ: #ã 	Û Û Û 
ß &Ñ &å Ý !Ý à€à€	àÐ Ø Nð 	%ØØØØñ
€ðòò-òô
'ˆJô 'ôr$�—‘ô r$ôj'�Iô '÷<Cñ CôRô8ò6 ÷FTñ T÷G"ñ G"ôT/"�ô /"ôd7�õ 7r#   