ó
     Hjoe  ã                  óì  • S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKJ	r	J
r
JrJrJr  SSKJr  SSKJr  SSKJr  \
(       a  SSKJr  S	rS
rSr SSSSSS.r S*S jrS+S jrS,S jr " S S\5      r " S S\R                  5      r " S S5      r " S S\5      r  " S S5      r!S-S.S jjr" S/             S0S  jjr#S1S! jr$ " S" S#5      r% " S$ S%5      r& " S& S'\&5      r' " S( S)\&5      r(g)2é    )Ú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÷ÿÿÿc               óô   •  [         R                  R                  U 5      nU(       d  U(       a  SOS SU  3nUSU(       a  SOS S3-  n[        U5      $ ! [         a    [        R                  U 5      n NUf = f)NÚencoderÚdecoderz error z when ÚwritingÚreadingz image file)r
   ÚcoreÚgetcodecstatusÚAttributeErrorÚERRORSÚgetÚOSError)Úerrorr   Úmsgs      Ú//usr/lib/python3/dist-packages/PIL/ImageFile.pyÚ_get_oserrorr    H   sv   € ð Ü�j‰j×'Ñ'¨Ó.ˆö Þ%‘¨9Ð5°W¸U¸GÐDˆØˆV¦‘I¨iÐ8¸ÐDÑD€CÜ�3‹<Ðøô ó  Ü�j‰j˜ÓŠð ús   ‚A ÁA7Á6A7c                ó,   • [        SSSS9  [        U SS9e)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Ñ
,Ð,ó    Ú_Tilec                ó   • U S   $ )Né   © )Úts    r   Ú	_tilesortr,   ]   s   € àˆQ‰4€Kr&   c                  óF   • \ rS rSr% S\S'   S\S'   SrS\S'   S	rS
\S'   Srg	)r'   éb   ÚstrÚ
codec_nameú tuple[int, int, int, int] | NoneÚextentsr   ÚintÚoffsetNztuple[Any, ...] | str | NoneÚargsr*   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__r4   r5   Ú__static_attributes__r*   r&   r   r'   r'   b   s!   ‡ ØƒOØ-Ó-Ø€FˆCƒOØ)-€DÐ
&Ö-r&   c                  ó–   ^ • \ rS rSrSr S     SU 4S jjjrSS jrSS jrSU 4S jjrSS jr	SS jr
SS	 jrSS
 jrSS jrSrU =r$ )Ú	ImageFileén   z*Base class for image file format handlers.c                ó   >• [         TU ]  5         SU l        S U l        / U l         SU l        SU l        [        U l        [        U5      (       a4  [        US5      U l        [        R                  " U5      U l        SU l        O/[!        ["        [$           U5      U l        Ub  UOSU l        SU l          U R'                  5         U R6                  (       a&  U R8                  S   S::  d  U R8                  S   S::  a  Sn[5        U5      eg ! [(        [*        [,        [.        [0        R2                  4 a  n[5        U5      UeS nAff = f! [:         a-    U R                  (       a  U R                  R=                  5         e f = f)	Nr   r	   r*   ÚrbTÚ Fznot identified by this driver)ÚsuperÚ__init__Ú
_min_frameÚcustom_mimetypeÚtileÚreadonlyÚdecoderconfigÚMAXBLOCKÚdecodermaxblockr   ÚopenÚfpÚosÚfspathÚfilenameÚ_exclusive_fpr   r   ÚbytesÚ_openÚ
IndexErrorÚ	TypeErrorÚKeyErrorÚEOFErrorÚstructr   ÚSyntaxErrorÚmodeÚsizeÚBaseExceptionÚclose)ÚselfrL   rO   Úvr   Ú	__class__s        €r   rC   ÚImageFile.__init__q   sE  ø€ ô 	‰ÑÔàˆŒà+/ˆÔà!#ˆŒ	Ø*àˆŒà.0ˆÔÜ'ˆÔä�2�;‰;ä˜2˜t“nˆDŒGÜŸIšI b›MˆDŒMØ!%ˆDÕô œ2œe™9 bÓ)ˆDŒGØ(0Ñ(<™HÀ"ˆDŒMà!&ˆDÔð	ð	,Ø—
‘
”ð —9—9 §	¡	¨!¡°Ó 1°T·Y±Y¸q±\ÀQÓ5FØ5�Ü! #Ó&Ð&ð 6Gøô ÜÜÜÜ—‘ðó ,ô " !“n¨!Ð+ûð,ûô ó 	à×!×!Ø—‘—‘”Øð		ús+   Â4D	 ÃAE Ä	)EÄ2D>Ä>EÅE Å7E=c                ó   • g ©Nr*   ©r]   s    r   rR   ÚImageFile._open£   ó   € Ør&   c                óÆ   • U R                   (       a  U R                   $ U R                  b7  [        R                  R	                  U R                  R                  5       5      $ g rb   )rE   Úformatr
   ÚMIMEr   Úupperrc   s    r   Úget_format_mimetypeÚImageFile.get_format_mimetype¦   sD   € Ø××Ø×'Ñ'Ð'Ø�;‰;Ñ"Ü—:‘:—>‘> $§+¡+×"3Ñ"3Ó"5Ó6Ð6Ør&   c                ó2   >• / U l         [        TU ]	  U5        g rb   )rF   rB   Ú__setstate__)r]   Ústater_   s     €r   rm   ÚImageFile.__setstate__­   s   ø€ ØˆŒ	Ü‰Ñ˜UÕ#r&   c                óh   • U R                   (       a  U R                  R                  5         SU l        g)zCheck file integrityN)rP   rL   r\   rc   s    r   ÚverifyÚImageFile.verify±   s!   € ð
 ××Ø�G‰G�M‰MŒOØˆ�r&   c                ó   • U R                   (       d  U R                  c  Sn[        U5      e[        R                  R	                  U 5      nU R                   (       d  U$ SU l        U R                  =(       a    [        U R                   5      S:H  nU=(       a    [        [        S5      (       + nSn[        U S5      (       a  U R                  nSnOU R                  R                  n[        U S5      (       a  U R                  nSnOU R                  R                  nU(       Gat  U R                   S   u  pxpš[        U
[         5      (       a  U
SS4n
US	:X  GaA  [        U
["        5      (       Ga+  [        U
5      S
:¼  Ga  U
S   U R$                  :X  Ga  U
S   [        R&                  ;   að   SSKn[+        U R                  5       nUR)                  UR-                  5       SUR.                  S9U l        SSS5        X�R0                  S   U
S   -  -   U R
                  R1                  5       :”  a  Sn[        U5      e[        R2                  R5                  U R
                  U R0                  XyU
5      U l        SnU R8                  (       a  SU R8                  l        U RA                  5         SnU R
                  (       Gd—  U R                   RC                  [D        S9  [G        U SS5      n[H        RJ                  " U R                   S 5       VVs/ s H  u  nn[M        U5      S   PM     snnU l         U R                    GH  u  pxpšU" U	5        [        RN                  " U R$                  XzU RP                  5      n URS                  U R6                  U5        URT                  (       a0  URW                  U R                  5        URY                  S5      S   nOjUn  U" U RZ                  5      nU(       d&  [b        (       a  OAS[        U5       S3n[        U5      eUU-   nURY                  U5      u  nnUS:  a  OUUS nMg  URe                  5         GM     / U l         X@l3        U Ri                  5         U Rj                  (       a+  U Rl                  (       a  U R                  Ro                  5         SU l        U R
                  (       d  [b        (       d  US:  a
  [q        USS9e[        R                  R	                  U 5      $ ! , (       d  f       GN= f! [<        [        [>        4 a    SU l         GN—f = fs  snnf ! [\        [^        R`                  4 a%  n[b        (       a   SnAGM'  Sn[        U5      UeSnAff = f! URe                  5         f = f)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                ó   • U S   U S   U S   4$ )Nr   r	   rx   r*   )rF   s    r   Ú<lambda>Ú ImageFile.load.<locals>.<lambda>  s   € ¨T°!©W°d¸1±g¸tÀA¹wÑ,Gr&   r   zimage file is truncatedzimage file is truncated (z bytes not processed)r%   )9rF   Ú_imr   r
   ÚloadÚmaprO   ÚlenÚhasattrÚsysru   rL   Úreadrv   ÚseekÚ
isinstancer/   ÚtuplerY   Ú	_MAPMODESÚmmaprK   ÚfilenoÚACCESS_READrZ   r   Ú
map_bufferÚimÚpaletteÚdirtyr   ÚImportErrorÚload_prepareÚsortr,   ÚgetattrÚ	itertoolsÚgroupbyÚlistÚ_getdecoderrH   ÚsetimageÚpulls_fdÚsetfdÚdecoderJ   rS   rW   r   ÚLOAD_TRUNCATED_IMAGESÚcleanuprG   Úload_endrP   Ú!_close_exclusive_fp_after_loadingr\   r    )r]   r   ÚpixelÚuse_mmaprG   r†   r‡   Údecoder_namer2   r4   r5   r‹   rL   Úerr_codeÚprefixÚ_Útilesr   ÚbÚsÚeÚns                         r   r�   ÚImageFile.loadº   so  € ð �y�y˜TŸX™XÑ-Ø*ˆCÜ˜#“,Ðä—‘× Ñ  Ó&ˆØ�y�yØˆLà%)ˆŒØ—=‘=×8¤S¨¯©£^°qÑ%8ˆà×E¤G¬CÐ1DÓ$EÔ Eˆàˆô �4˜×%Ñ%Ø—>‘>ˆDà‰Hà—7‘7—<‘<ˆDä�4˜×%Ñ%Ø—>‘>ˆDØ‰Hà—7‘7—<‘<ˆDçà26·)±)¸A±,Ñ/ˆL 6Ü˜$¤×$Ñ$Ø˜a �|�à Ô%Ü˜t¤U×+Ò+Ü˜“I ”NØ˜‘G˜tŸy™yÔ(Ø˜‘GœuŸ™Ó.ð$ãä˜dŸm™mÔ,°Ø#'§9¡9¨R¯Y©Y«[¸!ÀD×DTÑDT 9Ð#U˜œ÷ -à§	¡	¨!¡¨t°A©wÑ 6Ñ6¸¿¹¿¹»ÓHØ:˜Ü% c›lÐ*Ü#Ÿj™j×3Ñ3ØŸ™ $§)¡)¨\À4ó�D”Gð  !�Hð —|—|Ø-.˜Ÿ™Ô*ð 	×ÑÔØˆØ�x�xˆxà�I‰I�N‰NœyˆNÑ)ô ˜T =°#Ó6ˆFô
 !*× 1Ò 1Ø—I‘IÑGô!ôò!‘H�A�uô �U“˜B”ñ!òˆDŒIð 8<·yµyÑ3� vÙ�V”Ü×+Ò+Ø—I‘I˜|°4×3EÑ3Eó�ð#&Ø×$Ñ$ T§W¡W¨gÔ6Ø×'×'ØŸ™ d§g¡gÔ.Ø#*§>¡>°#Ó#6°qÑ#9™à"˜Ø"ð>Ù$(¨×)=Ñ)=Ó$> ö $%ß#8Ò#8Ø$)ð),Ü,/°«F¨8Ð3Hð)Jð %(ô +2°#«,Ð$6à ! A¡˜AØ*1¯.©.¸Ó*;™K˜A˜xØ  1›uØ %Ø ! ! " ˜Añ3 #ð8 —O‘O×%ñQ 8AðT ˆŒ	Ø Œà�‰Œà×× $×"H×"HØ�G‰G�M‰MŒOØˆŒà�x�x× 5Ò 5¸(ÀQ»,ä˜x°Ñ7Ð7ä�{‰{×Ñ Ó%Ð%÷o -Ö,ûô '¬´Ð=ó $Ø#�D—Hð$üóøô* %/´·±Ð#=ó >ç#8Ò#8Þ$)à*C CÜ*1°#«,¸AÐ$=ûð>ûð2 —O‘OÕ%úso   Æ)T Ç/S>Ç1B'T ÌT3Í7A U;ÏT9Ï*AU;Ó>
TÔT ÔT0Ô/T0Ô9U8ÕU3ÕU;Õ%U3Õ3U8Õ8U;Õ;Vc                óð   • U R                   c9  [        R                  R                  U R                  U R
                  5      U l        U R                  S:X  a   [        R                  R                  U 5        g g )NÚP)r€   r
   r   ÚnewrY   rZ   r�   r�   rc   s    r   r“   ÚImageFile.load_prepareC  sM   € à�8‰8ÑÜ—j‘j—n‘n T§Y¡Y°·	±	Ó:ˆDŒGà�9‰9˜ÓÜ�K‰K×Ñ˜TÕ"ð r&   c                ó   • g rb   r*   rc   s    r   r    ÚImageFile.load_endK  ó   € àr&   c                óÖ   • XR                   :  d;  [        U S5      (       a  U R                  b*  U[        U S5      U R                   -   :¼  a  Sn[	        U5      eU R                  5       U:g  $ )NÚ	_n_framesÚn_framesz attempt to seek outside sequence)rD   r„   r¶   r•   rV   Útell)r]   Úframer   s      r   Ú_seek_checkÚImageFile._seek_checkW  s^   € à—O‘OÓ#ô ˜T ;×/Ñ/°D·N±NÑ4JØœW T¨:Ó6¸¿¹ÑHÓHð 5ˆCÜ˜3“-Ðà�y‰y‹{˜eÑ#Ð#r&   )rP   rD   rE   rH   rJ   rO   rL   r�   r‚   rG   rF   rb   )rL   zStrOrBytesPath | IO[bytes]rO   zstr | bytes | NoneÚreturnÚNone©r¼   r½   )r¼   ú
str | None)rn   z	list[Any]r¼   r½   ©r¼   zImage.core.PixelAccess | None)r¹   r3   r¼   Úbool)r6   r7   r8   r9   Ú__doc__rC   rR   rj   rm   rq   r�   r“   r    rº   r;   Ú__classcell__)r_   s   @r   r=   r=   n   s_   ø† Ù4ð NRð0Ø,ð0Ø8Jð0à	÷0ð 0ôdô÷$ôôG&ôR#ô÷$ò $r&   r=   c                  óF   • \ rS rSrSS jr\R                  SS j5       rSrg)ÚStubHandlerig  c                ó   • g rb   r*   ©r]   r�   s     r   rK   ÚStubHandler.openh  re   r&   c                ó   • g rb   r*   rÇ   s     r   r�   ÚStubHandler.loadk  r´   r&   r*   N)r�   ÚStubImageFiler¼   r½   )r�   rË   r¼   úImage.Image)	r6   r7   r8   r9   rK   ÚabcÚabstractmethodr�   r;   r*   r&   r   rÅ   rÅ   g  s!   † ôð 	×Ñóó ór&   rÅ   c                  ó6   • \ rS rSrSrSS jrS	S jrS
S jrSrg)rË   ip  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.
c                ó   • Sn[        U5      e)Nz+StubImageFile subclass must implement _open©ÚNotImplementedError©r]   r   s     r   rR   ÚStubImageFile._openx  s   € Ø;ˆÜ! #Ó&Ð&r&   c                óî   • U R                  5       nUc  SU R                   S3n[        U5      eUR                  U 5      nUc   eUR                  U l        UR
                  U l        UR                  5       $ )Nzcannot find loader for this z file)Ú_loadrg   r   r�   r_   Ú__dict__)r]   Úloaderr   Úimages       r   r�   ÚStubImageFile.load|  sj   € Ø—‘“ˆØ‰>Ø0°·±°¸UÐCˆCÜ˜#“,ÐØ—‘˜DÓ!ˆØÑ Ð Ð àŸ™ˆŒØŸ™ˆŒØ�z‰z‹|Ðr&   c                ó   • Sn[        U5      e)z (Hook) Find actual image loader.z+StubImageFile subclass must implement _loadrÑ   rÓ   s     r   rÖ   ÚStubImageFile._loadˆ  s   € à;ˆÜ! #Ó&Ð&r&   )r_   r×   Nr¾   rÀ   )r¼   zStubHandler | None)	r6   r7   r8   r9   rÂ   rR   r�   rÖ   r;   r*   r&   r   rË   rË   p  s   † ñô'ô
÷'r&   rË   c                  ó‚   • \ rS rSr% SrSrSrS\S'   SrS\S'   Sr	S\S	'   S
r
S
rSS jrSS jrSS jrSS jrSS jrSrg)ÚParseriŽ  z^
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   c                ó,   • U R                   b   S5       eg)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   ÚresetÚParser.reset›  s   € ð �y‰yÑ Ð8Ð"8Ó8Ñ r&   c                óŽ  • U R                   (       a  gU R                  c  Xl        OU R                  U-   U l        U R                  (       aë  U R                  S:”  as  [	        [        U R                  5      U R                  5      nU R                  US U l        U R                  U-
  U l        U R                  S:”  d  U R                  (       d  gU R                  R                  U R                  5      u  p4US:  a&  SU l        SU l         US:  a  SU l        [        USS9egU R                  US U l        gU R                  (       a  g [        R                  " U R                  5       n[        R                  " U5      nSSS5        [        WS5      =(       d    [        US5      nU(       d  [        UR                  5      S:w  a  SU l        OÎUR                  5         UR                  S   u  p„pš/ Ul        [        R                   " UR"                  XŠUR$                  5      U l        U R                  R'                  UR(                  U5        X�l        U R                  [        U R                  5      ::  a%  U R                  U R                  S U l        SU l        X`l        g! , (       d  f       GN+= f! [*         a     gf = f)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%   rv   ru   )Úfinishedrß   r   r4   Úminrƒ   r�   rÙ   r    ÚioÚBytesIOr
   rK   r„   rF   r“   r™   rY   rH   rš   r�   r   )r]   rß   Úskipr¬   r«   rL   r�   ÚflagÚdÚoÚas              r   ÚfeedÚParser.feed£  s
  € ð �=�=Øà�9‰9ÑØ�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à�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˜!Ø �B”GÜ#(×#4Ò#4°R·W±W¸aÀB×DTÑDTÓ#U�D”LØ—L‘L×)Ñ)¨"¯%©%°Ô3ð #$”KØ—{‘{¤c¨$¯)©)£nÓ4Ø$(§I¡I¨d¯k©k¨mÐ$<˜œ	Ø&'˜œà•
÷/ +Ö*ûäó Ùðús*   Å
 J7 Å*J%ÆJ7 Ê%
J4Ê/J7 Ê7
KËKc                ó   • U $ rb   r*   rc   s    r   Ú	__enter__ÚParser.__enter__ï  s   € Øˆr&   c                ó$   • U R                  5         g rb   )r\   ©r]   r5   s     r   Ú__exit__ÚParser.__exit__ò  s   € Ø�
‰
�r&   c                ób  • U R                   (       a=  U R                  S5        S=U l        U l         U R                  (       d  Sn[	        U5      eU R
                  (       d  Sn[	        U5      eU R                  (       al  [        R                  " U R                  5       n [        R                  " U5      U l        U R
                  R                  5          SSS5        U R
                  $ U R
                  $ ! U R
                  R                  5         f = f! , (       d  f       U R
                  $ = f)zà
(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
   rK   r�   )r]   r   rL   s      r   r\   Ú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$   ÂDÂ C6Â;DÃ6DÄDÄ
D.)rß   r�   r   rä   rÙ   r4   r¾   )rß   rQ   r¼   r½   )r¼   rÞ   )r5   Úobjectr¼   r½   )r¼   rÌ   )r6   r7   r8   r9   rÂ   ÚincrementalrÙ   r:   rß   r   r4   rä   rá   rí   rð   rô   r\   r;   r*   r&   r   rÞ   rÞ   Ž  sS   ‡ ñð
 €KØ $€EÐÓ$Ø€Dˆ,ÓØ<@€GÐ9Ó@Ø€FØ€Hô9ôJ ôXô÷r&   rÞ   c           	     óÄ  • U R                  5         [        U S5      (       d  SU l        UR                  [        S9  [        [        X0R                  S   S-  5      n UR                  5       nUR                  5         [        XX#U5        [        US5      (       a  UR                  5         gg! [        [        R                  4 a  n[        XX#SU5         SnANPSnAff = f)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*   rz   r   é   NÚflush)r�   r„   rû   r”   r,   ÚmaxrI   rZ   rŒ   rý   Ú_encode_tiler   ræ   ÚUnsupportedOperation)r�   rL   rF   ÚbufsizeÚfhÚexcs         r   Ú_saver    sº   € ð ‡G�G„IÜ�2�×'Ñ'ØˆÔØ‡I�I”)€IÑô
 ”(˜G§W¡W¨Q¡Z°!¡^Ó4€Gð7Ø�Y‰Y‹[ˆØ
�‰Œ
Ü�R˜T¨BÔ/ô ˆr�7×ÑØ
�‰�
ð øô œB×3Ñ3Ð4ó 7Ü�R˜T¨D°#×6Ñ6ûð7ús   Á-B- Â-CÃCÃCc                óX  • U GH  u  pgp‰US:”  a  UR                  U5        [        R                  " U R                  XiU R                  5      n
 U
R                  U R                  U5        U
R                  (       a%  U
R                  U5        U
R                  5       S   nOOU(       a2   U
R                  U5      SS  u  p¼UR                  U5        U(       a  OM1  Uc   eU
R                  XC5      nUS:  a  [        USS9Ue U
R                  5         GM     g ! U
R                  5         f = f)Nr   r	   Tr%   )r‡   r
   Ú_getencoderrY   rû   rš   r�   Ú	pushes_fdrœ   Úencode_to_pyfdÚencodeÚwriteÚencode_to_filer    rŸ   )r�   rL   rF   r  r  r  Úencoder_namer2   r4   r5   r   Úerrcoderß   s                r   rÿ   rÿ   3  s  € ô 04Ñ+ˆ˜vØ�A‹:Ø�G‰G�FŒOÜ×#Ò# B§G¡G¨\À×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×ò1 04øð0 �O‰OÕús   ÁB2DÄD)c                óš  • US::  a  gU[         ::  a/  U R                  U5      n[        U5      U:  a  Sn[        U5      eU$ / nUnUS:”  aN  U R                  [	        U[         5      5      nU(       d  O'UR                  U5        U[        U5      -  nUS:”  a  MN  [        S U 5       5      U:  a  Sn[        U5      eSR                  U5      $ )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  ó8   #   • U  H  n[        U5      v •  M     g 7frb   )rƒ   )Ú.0Úblocks     r   Ú	<genexpr>Ú_safe_read.<locals>.<genexpr>s  s   é € Ð
*¢6˜%Œ3ˆu�:ˆ:¢6ùs   ‚)Ú	SAFEBLOCKr†   rƒ   r   rå   ÚappendÚsumÚjoin)rL   rZ   rß   r   ÚblocksÚremaining_sizer  s          r   Ú
_safe_readr  V  sÇ   € ð ˆqƒyØØŒyÓØ�w‰w�t‹}ˆÜˆt‹9�tÓØ'ˆCÜ˜#“,ÐØˆØ€FØ€NØ
˜1Ó
Ø—‘œ˜N¬IÓ6Ó7ˆÞØØ�‰�eÔØœ#˜e›*Ñ$ˆð ˜1Õ
ô Ñ
*¡6Ó
*Ó*¨TÓ1Ø#ˆÜ�c‹lÐØ�8‰8�FÓÐr&   c                  ó(   • \ rS rSrSS jrSS jrSrg)ÚPyCodecStateiy  c                ó<   • SU l         SU l        SU l        SU l        g )Nr   )ÚxsizeÚysizeÚxoffÚyoffrc   s    r   rC   ÚPyCodecState.__init__z  s   € ØˆŒ
ØˆŒ
ØˆŒ	Øˆ�	r&   c                ó’   • U R                   U R                  U R                   U R                  -   U R                  U R                  -   4$ rb   )r   r!  r  r  rc   s    r   r2   ÚPyCodecState.extents€  s3   € Ø�y‰y˜$Ÿ)™) T§Y¡Y°·±Ñ%;¸T¿Y¹YÈÏÉÑ=SÐSÐSr&   )r   r  r!  r  Nr¾   )r¼   ztuple[int, int, int, int])r6   r7   r8   r9   rC   r2   r;   r*   r&   r   r  r  y  s   † ô÷Tr&   r  c                  ób   • \ rS rSr% S\S'   SS jrSS jrSS jrSS jr S     SS	 jjr	S
r
g)ÚPyCodeci„  zIO[bytes] | NoneÚfdc                ól   • S U l         [        5       U l        S U l        Xl        U R                  U5        g rb   )r�   r  rn   r'  rY   Úinit)r]   rY   r5   s      r   rC   ÚPyCodec.__init__‡  s)   € Ø15ˆŒÜ!“^ˆŒ
ØˆŒØŒ	Ø�	‰	�$�r&   c                ó   • Xl         g)zw
Override to perform codec specific initialization

:param args: Tuple of arg items from the tile entry
:returns: None
N)r5   ró   s     r   r)  ÚPyCodec.initŽ  s	   € ð �	r&   c                ó   • g)z<
Override to perform codec specific cleanup

:returns: None
Nr*   rc   s    r   rŸ   ÚPyCodec.cleanup—  s   € ð 	r&   c                ó   • Xl         g)zo
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œ   ÚPyCodec.setfdŸ  s	   € ð �r&   Nc                óH  • Xl         U(       a�  Uu  p4pVUS:  d>  US:  d8  XPR                   R                  S   :”  d  X`R                   R                  S   :”  a  Sn[        U5      eX0R                  l        X@R                  l        XS-
  U R                  l        Xd-
  U R                  l        O7U R                   R                  u  U R                  l        U R                  l        U R                  R                  S::  d  U R                  R                  S::  a  Sn[        U5      eg)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	   z Tile cannot extend outside imagezSize cannot be negativeN)r�   rZ   Ú
ValueErrorrn   r   r!  r  r  )r]   r�   r2   Úx0Úy0Úx1Úy1r   s           r   rš   ÚPyCodec.setimage¨  sÙ   € ð ŒæØ&ÑˆR�Rà�A‹v˜˜a› 2¯©¯©°Q©Ó#7¸2ÇÁÇÁÈQÁÓ;OØ8�Ü  “oÐ%à �J‰JŒOØ �J‰JŒOØ!™wˆD�J‰JÔØ!™wˆD�J‰JÕà15·±·±Ñ.ˆD�J‰JÔ˜dŸj™jÔ.à�:‰:×Ñ˜qÓ  D§J¡J×$4Ñ$4¸Ó$9Ø+ˆCÜ˜S“/Ð!ð %:r&   )r5   r'  r�   rY   rn   )rY   r/   r5   r   r¼   r½   )r5   útuple[Any, ...]r¼   r½   r¾   )r'  ú	IO[bytes]r¼   r½   rb   )r�   zImage.core.ImagingCorer2   r1   r¼   r½   )r6   r7   r8   r9   r:   rC   r)  rŸ   rœ   rš   r;   r*   r&   r   r&  r&  „  sG   ‡ ØÓôôôôð 59ð!"à"ð!"ð 2ð!"ð 
÷	!"ð !"r&   r&  c                  óX   • \ rS rSrSrSr\S	S j5       rS
S jr S       SS jjr	Sr
g)Ú	PyDecoderiÌ  z»
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                ó   • U R                   $ rb   )Ú	_pulls_fdrc   s    r   r›   ÚPyDecoder.pulls_fdÖ  s   € à�~‰~Ðr&   c                ó   • Sn[        U5      e)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]   Úbufferr   s      r   r�   ÚPyDecoder.decodeÚ  ó   € ð ,ˆÜ! #Ó&Ð&r&   Nr*   c                ón  • U(       d  U R                   n[        R                  " U R                   SX#5      nU R                  c   eUR	                  U R                  U R
                  R                  5       5        UR                  U5      nUS   S:¼  a  Sn[        U5      eUS   S:w  a  Sn[        U5      eg)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
:param extra: Extra arguments for the decoder.
:returns: None
rw   Nr   znot enough image datar	   zcannot decode image data)	rY   r
   r™   r�   rš   rn   r2   r�   r2  )r]   rß   ÚrawmodeÚextrarê   rª   r   s          r   Ú
set_as_rawÚPyDecoder.set_as_rawæ  s�   € ö Ø—i‘iˆGÜ×Ò˜dŸi™i¨°Ó?ˆØ�w‰wÑ"Ð"Ð"Ø	�
‰
�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&   ©r¼   rÁ   )r@  z$bytes | Image.SupportsArrayInterfacer¼   útuple[int, int])Nr*   )rß   rQ   rD  r¿   rE  r8  r¼   r½   )r6   r7   r8   r9   rÂ   r=  Úpropertyr›   r�   rF  r;   r*   r&   r   r;  r;  Ì  sV   † ñð €Iàóó ðô
'ð QSð"Øð"Ø$.ð"Ø>Mð"à	÷"ð "r&   r;  c                  óN   • \ rS rSrSrSr\S
S j5       rSS jrSS jr	SS jr
Srg	)Ú	PyEncoderi  z»
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                ó   • U R                   $ rb   )Ú
_pushes_fdrc   s    r   r  ÚPyEncoder.pushes_fd  s   € à�‰Ðr&   c                ó   • Sn[        U5      e)zð
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	  ÚPyEncoder.encode  rB  r&   c                ó¶   • U R                   (       d  gU R                  S5      u  pnU(       a*  U R                  c   eU R                  R                  U5        X4$ )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  ÚPyEncoder.encode_to_pyfd  sL   € ð �~�~ØØ(,¯©°A«Ñ%ˆ ÞØ—7‘7Ñ&Ð&Ð&Ø�G‰G�M‰M˜$ÔØÐ&Ð&r&   c                óŒ   • SnUS:X  a;  U R                  U5      u  pCnUS:”  a  [        R                  " XUS 5        US:X  a  M;  U$ )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	  rM   r
  )r]   r  r  r  ÚstatusÚbufs         r   r  ÚPyEncoder.encode_to_file,  sL   € ð ˆØ˜‹lØ#'§;¡;¨wÓ#7Ñ ˆF˜SØ˜‹zÜ—’˜  ˜\Ô*ð ˜�lð ˆr&   r*   NrH  )r  r3   r¼   ztuple[int, int, bytes])r¼   rI  )r  r3   r  r3   r¼   r3   )r6   r7   r8   r9   rÂ   rN  rJ  r  r	  r  r  r;   r*   r&   r   rL  rL    s/   † ñð €Jàóó ðô
'ô'÷ r&   rL  )r   r3   r   rÁ   r¼   r   )r   r3   r¼   r   )r+   r'   r¼   r3   )r   )
r�   rÌ   rL   r9  rF   úlist[_Tile]r  r3   r¼   r½   rb   )r�   rÌ   rL   r9  rF   rY  r  r3   r  z
int | Noner  zBaseException | Noner¼   r½   )rL   r9  rZ   r3   r¼   rQ   ))Ú
__future__r   rÍ   ræ   r–   rM   rW   r…   Útypingr   r   r   r   r   rA   r
   Ú
_deprecater   Ú_utilr   Ú_typingr   rI   r  rž   r   r    r"   r,   r'   r=   rÅ   rË   rÞ   r  rÿ   r  r  r&  r;  rL  r*   r&   r   Ú<module>r_     s=  ðõ: #ã 
Û 	Û Û 	Û Û 
ß ;Õ ;å Ý !Ý æÝ'à€à€	àÐ Ø Nð 	%ØØØØñ
€ðôô-ôô
.ˆJô .ôv$�—‘ô v$÷rñ ô'�Iô '÷<Cñ CöRðD !%ð Øð àð ð ð ð ð	 ð
 	ð ð 
ð ð 
õ ôF ÷FTñ T÷E"ñ E"ôP3"�ô 3"ôl8�õ 8r&   