§
    aÒ³gð¡  ã                  ó  — 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 d dlm	Z	 d dl
mZmZmZmZmZmZ ddlmZmZ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dl m!Z!  G d„ de¦  «        Z"e"j#        Z$dNd„Z% G d„ dej        ¦  «        Z&ddddœZ'dOd„Z(ee)e*e+e,         ej        f         Z-dPd „Z.dQd$„Z/dRd(„Z0 G d)„ d*e¦  «        Z1dSd+„Z2dTd.„Z3	 dUdVd1„Z4dWd3„Z5dXd7„Z6dTd8„Z7d/Z8dYd:„Z9dZd<„Z:d[d=„Z;d\d>„Z<d]dA„Z=d^dC„Z>d_dE„Z?	 d`dadH„Z@	 dbdcdK„ZA ejB        e&jC        e&e%¦  «          ejD        e&jC        e4¦  «          ejE        e&jC        e3¦  «          ejF        e&jC        dL¦  «          ejG        e&jC        dM¦  «         dS )dé    )ÚannotationsN)ÚIntEnum)Úcached_property)ÚIOÚTYPE_CHECKINGÚAnyÚLiteralÚ
NamedTupleÚUnioné   )ÚImageÚ
ImageChopsÚ	ImageFileÚ	ImageMathÚImageOpsÚImagePaletteÚImageSequence)Úi16le)Úo8)Úo16le)Ú_imaging)ÚBufferc                  ó   — e Zd ZdZdZdZdZdS )ÚLoadingStrategyz.. versionadded:: 9.1.0r   r   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚRGB_AFTER_FIRSTÚ RGB_AFTER_DIFFERENT_PALETTE_ONLYÚ
RGB_ALWAYS© ó    úP/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/PIL/GifImagePlugin.pyr   r   6   s$   € € € € € Ø!Ð!à€OØ'(Ð$Ø€J€J€Jr$   r   ÚprefixÚbytesÚreturnÚboolc                ó   — | d d…         dv S )Né   )s   GIF87as   GIF89ar#   )r&   s    r%   Ú_acceptr,   E   s   € Ø�"�1�"Œ:Ð/Ð/Ð/r$   c                  óš   ‡ — e Zd ZdZdZdZdZdd„Zdd„Zdd„Z	e
dd„¦   «         Zedd„¦   «         Zdd„Zdd d„Zdˆ fd„Zdd„Zdd„Zˆ xZS )!ÚGifImageFileÚGIFzCompuserve GIFFNr(   úbytes | Nonec                óŽ   — | j                              d¦  «        }|r(|d         r | j                              |d         ¦  «        S d S )Nr   r   )ÚfpÚread)ÚselfÚss     r%   ÚdatazGifImageFile.dataU   sC   € ØŒG�LŠL˜‰OŒOˆØð 	&��1”ð 	&Ø”7—<’<  !¤Ñ%Ô%Ð%Øˆtr$   Úpr'   r)   c                ó°   — t          dt          |¦  «        d¦  «        D ]6}|dz  ||         cxk    r||dz            cxk    r||dz            k    sn  dS Œ7dS )Nr   é   r   r   TF)ÚrangeÚlen)r4   r7   Úis      r%   Ú_is_palette_neededzGifImageFile._is_palette_needed[   sy   € Ý�q�#˜a™&œ& !Ñ$Ô$ð 	ð 	ˆAØ˜‘F˜a œdÐ:Ð:Ò:Ð: a¨¨A©¤hÐ:Ð:Ò:Ð:°!°A¸±E´(Ò:Ð:Ð:Ð:Ø�t�tð ;àˆur$   ÚNonec                óh  — | j                              d¦  «        }t          |¦  «        sd}t          |¦  «        ‚|d d…         | j        d<   t          |d¦  «        t          |d¦  «        f| _        |d         }|dz  dz   }|d	z  re|d
         | j        d<   | j                              d|z  ¦  «        }|                      |¦  «        r#t          j	        d|¦  «        }|x| _
        | _        | j         | _        | j                              ¦   «         | _        d | _        |                      d¦  «         d S )Né   znot a GIF filer+   Úversioné   é
   é   r   é€   é   Ú
backgroundr9   ÚRGBr   )r2   r3   r,   ÚSyntaxErrorÚinfoÚi16Ú_sizer=   r   ÚrawÚglobal_paletteÚpaletteÚ_fpÚtellÚ_GifImageFile__rewindÚ	_n_framesÚ_seek)r4   r5   ÚmsgÚflagsÚbitsr7   s         r%   Ú_openzGifImageFile._opena   s  € àŒG�LŠL˜ÑÔˆÝ�q‰zŒzð 	#Ø"ˆCÝ˜cÑ"Ô"Ð"à   ! œuˆŒ	�)ÑÝ˜˜A‘Y”Y¥ A q¡	¤	Ð)ˆŒ
Ø�"”ˆØ˜‘	˜Q‰ˆà�3‰;ð 	7à&'¨¤eˆDŒI�lÑ#à”—’˜Q $™YÑ'Ô'ˆAØ×&Ò& qÑ)Ô)ð 7Ý Ô$ U¨AÑ.Ô.�Ø56Ð6�Ô# d¤là”7ˆŒØœŸš™œˆŒØ%)ˆŒØ�
Š
�1‰Œˆˆˆr$   Úintc                ó$  — | j         €ƒ|                      ¦   «         }	 	 |                      |                      ¦   «         dz   d¦  «         Œ,# t          $ r |                      ¦   «         dz   | _         Y nw xY w|                      |¦  «         | j         S )NTr   F©rS   rQ   rT   ÚEOFErrorÚseek)r4   Úcurrents     r%   Ún_frameszGifImageFile.n_frames{   s’   € àŒ>Ð!Ø—i’i‘k”kˆGð1ð7Ø—J’J˜tŸyšy™{œ{¨Q™°Ñ6Ô6Ð6ð7øåð 1ð 1ð 1Ø!%§¢¡¤¨q¡�”��ð1øøøà�IŠI�gÑÔÐØŒ~Ðs   �-A
 Á
&A3Á2A3c                óÜ   — | j         �| j         dk    S |                      ¦   «         }|rdS 	 |                      dd¦  «         d}n# t          $ r d}Y nw xY w|                      |¦  «         |S )Nr   TFr[   )r4   r^   Úis_animateds      r%   ra   zGifImageFile.is_animated‡   s�   € àŒ>Ð%Ø”> QÒ&Ð&à—)’)‘+”+ˆØð 	Ø�4ð	 Ø�JŠJ�q˜%Ñ Ô Ð ØˆKˆKøÝð 	 ð 	 ð 	 ØˆKˆKˆKð	 øøøð 	�	Š	�'ÑÔÐØÐs   ¬A ÁAÁAÚframec                ój  — |                       |¦  «        sd S || j        k     rd | _        |                      d¦  «         | j        }t	          | j        dz   |dz   ¦  «        D ]Q}	 |                      |¦  «         Œ# t
          $ r,}|                      |¦  «         d}t          |¦  «        |‚d }~ww xY wd S )Nr   r   úno more images in GIF file)Ú_seek_checkÚ_GifImageFile__frameÚ_imrT   r:   r\   r]   )r4   rb   Ú
last_frameÚfÚerU   s         r%   r]   zGifImageFile.seek™   sÏ   € Ø×Ò Ñ&Ô&ð 	ØˆFØ�4”<ÒÐØˆDŒHØ�JŠJ�q‰MŒMˆMà”\ˆ
Ý�t”| aÑ'¨°©Ñ3Ô3ð 	+ð 	+ˆAð+Ø—
’
˜1‘”��øÝð +ð +ð +Ø—	’	˜*Ñ%Ô%Ð%Ø2�Ý˜s‘m”m¨Ð*øøøøð+øøøð	+ð 	+s   Á$A:Á:
B0Â'B+Â+B0TÚupdate_imagec                óº  ‡ — |dk    rMd‰ _         d ‰ _        d‰ _        ‰ j                             ‰ j        ¦  «         d‰ _        d‰ j        v r‰ j        d= n‰ j        r|r‰  	                    ¦   «          |‰ j        dz   k    rd|› �}t          |¦  «        ‚‰ j        ‰ _        ‰ j         rO‰ j                             ‰ j         ¦  «         ‰                      ¦   «         r	 ‰                      ¦   «         °d‰ _         ‰ j                             d¦  «        }|r|dk    rd}t          |¦  «        ‚d }i }d }d }d }		 |s‰ j                             d¦  «        }|r|dk    r�n|d	k    �r~‰ j                             d¦  «        }‰                      ¦   «         }
|d         d
k    rA|
�?|
d         }|dz  r|
d         }t          |
d¦  «        dz  |d<   d|z  }|dz	  }|r|‰ _        nØ|d         dk    r?d}|
r||
z  }‰                      ¦   «         }
|
°d|v r|dxx         d|z   z  cc<   n||d<   d }Œô|d         dk    r�|dk    r{|
�y|
‰ j                             ¦   «         f|d<   |
d d…         dk    rM‰                      ¦   «         }
|
r7t#          |
¦  «        dk    r$|
d         dk    rt          |
d¦  «        ‰ j        d<   ‰                      ¦   «         r	 ‰                      ¦   «         °�nŒ|dk    �r…‰ j                             d¦  «        }t          |d¦  «        t          |d¦  «        }}|t          |d¦  «        z   |t          |d¦  «        z   }}|‰ j        d         k    s|‰ j        d         k    rV|rTt'          |‰ j        d         ¦  «        t'          |‰ j        d         ¦  «        f‰ _        t+          j        ‰ j        ¦  «         ||||f}	|d         }|dz  dk    }|dz  rR|dz  dz   }‰ j                             d|z  ¦  «        }‰                      |¦  «        rt1          j        d |¦  «        }nd!}‰ j                             d¦  «        d         }‰ j                             ¦   «         ‰ _         nd }�Œ;|€d"}t          |¦  «        ‚|‰ _        |sd S g ‰ _        ‰ j        r%‰ j                             ‰ j        ‰ j        ¦  «         |�|n‰ j        ‰ _        |‰ _        |dk    rl‰ j        r)t@          tB          j"        k    r|�d#nd ‰ _#        nd$‰ _#        nd%‰ _#        |r|‰ _$        nñ‰ j        rdd&l%m%}  |‰ j        ¦  «        ‰ _$        nÎd ‰ _$        nÆ‰ j&        d$k    r»t@          tB          j'        k    s|r¤d'‰ j        v re‰ j         (                    ‰ j        d'         d¦  «         ‰ j         )                    d#t*          j*        j+        ¦  «        ‰ _        d#‰ _#        ‰ j        d'= n6d ‰ _#        ‰ j         )                    d t*          j*        j+        ¦  «        ‰ _        d2ˆ fd,„}d ‰ _        |	‰ _        ‰ j        �r€‰ j        dk    �rt	 ‰ j        dk    r»‰ j        \  }}}}||z
  ||z
  f}t+          j        |¦  «         d$}‰ j         ,                    d'|¦  «        }|�‰ j&        d-v rd#} ||¦  «        d.z   }n1‰ j         ,                    d/d¦  «        }‰ j&        d-v rd } ||¦  «        }t*          j-         .                    |||¦  «        ‰ _        nœ‰ j/        �&‰  0                    ‰ j        ‰ j        ¦  «        ‰ _        no|�m‰ j        \  }}}}||z
  ||z
  f}t+          j        |¦  «         d$}|}‰ j&        d-v rd#} ||¦  «        d.z   }t*          j-         .                    |||¦  «        ‰ _        n# tb          $ r Y nw xY w|�^d}|�1|dk    r t@          tB          j"        k    r
|‰ j        d'<   n‰ j&        d-vr|}te          j3        d0||||f‰ j         |||f¦  «        g‰ _        | ,                    d¦  «        r|d         ‰ j        d<   d1D ](}||v r||         ‰ j        |<   Œ|‰ j        v r‰ j        |= Œ)d S )3Nr   éÿÿÿÿÚcommentr   zcannot seek to frame ó   ;rd   Tó   !éù   r9   rC   Údurationé   r   éþ   r$   ó   
éÿ   Ú	extensionrF   ó   NETSCAPE2.0Úloopó   ,é	   é   r+   rB   é@   rE   rD   rH   Fzimage not found in GIF frameÚRGBAÚPÚL)ÚcopyÚtransparencyÚcolorrY   r(   útuple[int, int, int]c                óº   •— ‰j         rO| dz  dz   t          ‰j         j        ¦  «        k    rd} t          ‰j         j        | dz  | dz  dz   …         ¦  «        S | | | fS )Nr9   r   )Ú_frame_paletter;   rO   Útuple)rƒ   r4   s    €r%   Ú_rgbz GifImageFile._seek.<locals>._rgbY  sl   ø€ ØÔ"ð -Ø˜1‘9˜q‘=¥3 tÔ':Ô'BÑ#CÔ#CÒCÐCØ�EÝ˜TÔ0Ô8¸À¹ÀUÈQÁYÐQRÁ]Ð9RÔSÑTÔTÐTà˜u eÐ,Ð,r$   ©rH   r~   )r   rG   Úgif)rr   rw   )rƒ   rY   r(   r„   )4Ú_GifImageFile__offsetÚdisposerf   rP   r]   rR   Údisposal_methodrJ   ÚtileÚloadÚ
ValueErrorr2   r6   r3   r\   rK   rQ   r;   ÚsizeÚmaxrL   r   Ú_decompression_bomb_checkr=   r   rM   ÚimÚpasteÚdispose_extentrN   r†   Ú_frame_transparencyÚLOADING_STRATEGYr   r"   Ú_moderO   r�   Úmoder!   ÚputpalettealphaÚconvertÚDitherÚFLOYDSTEINBERGÚgetÚcoreÚfillrg   Ú_cropÚAttributeErrorr   Ú_Tile)r4   rb   rk   rU   r5   rO   rJ   Úframe_transparencyÚ	interlaceÚframe_dispose_extentÚblockrV   Údispose_bitsrn   Úx0Úy0Úx1Úy1rW   r7   r�   rˆ   Údispose_sizeÚdispose_moderƒ   r‚   Úks   `                          r%   rT   zGifImageFile._seek©   sH	  ø€ Ø�AŠ:ˆ:àˆDŒMØ8<ˆDŒLØˆDŒLØŒH�MŠM˜$œ-Ñ(Ô(Ð(Ø#$ˆDÔ Ø˜DœIÐ%Ð%Ø”I˜iÐ(øð Œyð ˜\ð Ø—	’	‘”�à�D”L 1Ñ$Ò$Ð$Ø1¨%Ð1Ð1ˆCÝ˜S‘/”/Ð!à”(ˆŒØŒ=ð 	àŒG�LŠL˜œÑ'Ô'Ð'Ø—)’)‘+”+ð Øð —)’)‘+”+ð àˆDŒMàŒG�LŠL˜‰OŒOˆØð 	 �A˜’I�IØ.ˆCÝ˜3‘-”-ÐàEIˆà!ˆØ!ÐØˆ	Ø#ÐðY	Øð $Ø”G—L’L ‘O”O�Øð U˜˜Tš	˜	Ùà�d’‘ð ”G—L’L ‘O”O�ØŸ	š	™œ�Ø�Q”4˜3’;�; 5Ð#4ð " !œH�EØ˜q‘yð 6Ø-2°1¬XÐ*Ý'*¨5°!¡}¤}°rÑ'9�D˜Ñ$ð $.°Ñ#5�LØ#/°1Ñ#4�LØ#ð <ð
 0<˜Ô,øØ�q”T˜S’[�[ð "�Gð  ð ,Ø 5Ñ(˜Ø $§	¢	¡¤˜ð  ð ,ð ! DÐ(Ð(à˜Y˜˜œ¨5°7©?Ñ:˜˜™˜à*1˜˜Y™Ø�AØØ�q”T˜S’[�[ U¨a¢Z Z°EÐ4Eð ).¨t¬w¯|ª|©~¬~Ð(=�D˜Ñ%Ø˜S˜b˜S”z ^Ò3Ð3Ø $§	¢	¡¤˜Ø ð >¥S¨¡Z¤Z°1¢_ _¸¸q¼ÀQº¸Ý03°E¸1±´˜DœI fÑ-Ø—i’i‘k”kð Øð —i’i‘k”kð ùð �d’‘ð ”G—L’L ‘O”O�õ ˜Q ™œ¥C¨¨1¡I¤I�B�Ø�c ! Q™iœi™¨­c°!°Q©i¬i©�B�Ø˜œ 1œÒ%Ð%¨¨d¬i¸¬lÒ):Ð):ÀÐ):Ý!$ R¨¬°1¬Ñ!6Ô!6½¸BÀÄ	È!ÄÑ8MÔ8MÐ!M�D”JÝÔ3°D´JÑ?Ô?Ð?Ø')¨2¨r°2 ~Ð$Ø˜!œ�à" R™Z¨AÒ-�	à˜3‘;ð (Ø! A™I¨™?�DØœŸš Q¨$¡YÑ/Ô/�AØ×.Ò.¨qÑ1Ô1ð (Ý".Ô"2°5¸!Ñ"<Ô"<˜˜à"'˜ð ”w—|’| A‘” qÔ)�Ø $¤§¢¡¤�”ØØˆAñsY	ðv ÐØ0ˆCÝ˜3‘-”-ÐàˆŒØð 	ØˆFàˆŒ	àŒ<ð 	=ØŒG�MŠM˜$œ,¨Ô(;Ñ<Ô<Ð<à)0Ð)<˜g˜gÀ$ÔBUˆÔØ#5ˆÔ Ø�AŠ:ˆ:ØÔ"ð !Ý#¥Ô'AÒAÐAØ+=Ð+I  Èu�D”J�Jà!$�D”J�Jà �”
àð $Ø&�”�ØÔ$ð $Ø%Ð%Ð%Ð%Ð%Ð%à#˜t DÔ$7Ñ8Ô8�”�à#�”�àŒy˜CÒÐå$­Ô(XÒXÐXØð Yð &¨¬Ð2Ð2Øœ×/Ò/°´	¸.Ô0IÈ1ÑMÔMÐMØ"&¤'§/¢/°&½%¼,Ô:UÑ"VÔ"V˜œØ%+˜œ
Ø œI nÐ5Ð5à%*˜œ
Ø"&¤'§/¢/°%½¼Ô9TÑ"UÔ"U˜œð	-ð 	-ð 	-ð 	-ð 	-ð 	-ð ˆŒØ2ˆÔØÔñ +	 4Ô#7¸1Ò#<Ñ#<ð*ØÔ'¨1Ò,Ð,ð &*Ô%8‘N�B˜˜B Ø$&¨¡G¨R°"©WÐ#5�LåÔ3°LÑAÔAÐAð $'�LØ œIŸMšM¨.Ð:LÑMÔM�EØÐ(Øœ9¨Ð7Ð7Ø+1˜LØ$( D¨¡K¤K°$Ñ$6˜Eøà $¤	§¢¨l¸AÑ >Ô >˜Øœ9¨Ð7Ð7Ø+0˜LØ$( D¨¡K¤K˜EÝ#(¤:§?¢?°<ÀÈuÑ#UÔ#U�D”L�Lð ”xÐ+à'+§z¢z°$´'¸4Ô;NÑ'OÔ'O˜œ˜Ø+Ð7Ø)-Ô)<™˜˜B  BØ(*¨R©°°b±Ð'9˜åÔ7¸ÑEÔEÐEØ'*˜Ø 2˜Øœ9¨Ð7Ð7Ø+1˜LØ$( DÐ);Ñ$<Ô$<¸tÑ$C˜EÝ',¤z§¢Ø(¨,¸ñ(ô (˜œøøõ "ð ð ð Ø�ðøøøð Ð ØˆLØ!Ð-Ø˜A’:�:Ý'­?Ô+EÒEÐEØ4F˜œ	 .Ñ1øØ”Y oÐ5Ð5Ø#5�Lå”ØØ˜˜R Ð$Ø”MØ˜9 lÐ3ñ	ô ðˆDŒIð �8Š8�IÑÔð 	3Ø#'¨	¤?ˆDŒI�iÑ Ø*ð 	!ð 	!ˆAØ�DˆyˆyØ# Aœw�”	˜!‘�Ø�d”i��Ø”I˜a�Løð		!ð 	!s   Ø8E"^ Þ
^(Þ'^(c                óh  •— | j         rdnd}d | _        | j        dk    r8| j        �0t          j                             || j        | j        ¦  «        | _        n€| j	        dv rw| j        | _        | j         r]t          j                             d| j        | j        pd¦  «        | _         | j        j
        dg| j                              ¦   «         ¢R Ž  nd | _        | j        s¦| j        �Ÿ| j        | j        j        k    rŠt          j                             | j        j	        | j        ¦  «        }| j         r% |j
        dg| j                              ¦   «         ¢R Ž  |                     | j        d| j        j        z   ¦  «         || _        || _        d | _         t          ¦   «                              ¦   «          d S )Nr   r€   r   r‰   rH   ©r   r   )r†   Ú_prev_imrf   r—   r   r    r¡   r‘   r”   rš   Ú
putpaletteÚgetdatarg   r•   r™   ÚsuperÚload_prepare)r4   Ú	temp_modeÚexpanded_imÚ	__class__s      €r%   r·   zGifImageFile.load_prepare©  s—  ø€ ØÔ.Ð7�C�C°Cˆ	ØˆŒØŒ<˜1ÒÐØÔ'Ð3Ýœ*Ÿ/š/Ø˜tœy¨$Ô*Bñô �”øð ŒY˜/Ð)Ð)Ø œGˆDŒMØÔ"ð  Ýœ*Ÿ/š/¨#¨t¬y¸$Ô:RÐ:WÐVWÑXÔX�”Ø"�”Ô" 5ÐI¨4Ô+>×+FÒ+FÑ+HÔ+HÐIÐIÐIÐIÐIà�”ØŒ}ð 	" ¤Ð!5¸$¼)ÀtÄwÄ|Ò:SÐ:SÝœ*Ÿ/š/¨$¬'¬,¸¼	ÑBÔBˆKØÔ"ð NØ&�Ô& uÐM¨tÔ/B×/JÒ/JÑ/LÔ/LÐMÐMÐMÐMØ×Ò˜dœg v°´´Ñ'<Ñ=Ô=Ð=à!ˆDŒGØˆŒ
Ø"ˆÔå‰Œ×ÒÑÔÐÐÐr$   c                óà  — | j         dk    rŒ| j        dk    rt          t          j        k    rj| j        �(| j                             | j        d¦  «         d| _        nd| _        | j         	                    | j        t          j        j        ¦  «        | _        d S | j        sd S | j        | j        j        k    rÍ| j        �&t          j                             d| j        ¦  «        }nht          j                             d| j        ¦  «        }|                     dd| j                             ¦   «         ¦  «         | 	                    d¦  «        }|                     | j        d| j        j        z   ¦  «         || _        | j        €J ‚| j        �;| j                             | j        d¦  «         | j         	                    d¦  «        }n| j         	                    d¦  «        }| j        €J ‚|                      || j        ¦  «        }| j        | _        | j        j        | _        |j        dk    r#| j                             || j        |¦  «         d S | j                             || j        ¦  «         d S )Nr   r   r~   rH   r²   )rf   rš   r˜   r   r"   r—   r”   r›   r™   rœ   r   r�   rž   r³   r‘   r    r¡   r´   Ú
getpaletter•   r–   r¢   )r4   r¹   Úframe_ims      r%   Úload_endzGifImageFile.load_endÄ  s  € ØŒ<˜1ÒÐØŒy˜CÒÐÕ$4½Ô8RÒ$RÐ$RØÔ+Ð7Ø”G×+Ò+¨DÔ,DÀaÑHÔHÐHØ!'�D”J�Jà!&�D”JØœ'Ÿ/š/¨$¬)µU´\Ô5PÑQÔQ�”ØˆFØŒ}ð 	ØˆFØŒ9˜œÔ*Ò*Ð*ØÔ'Ð3Ý#œjŸošo¨f°d´iÑ@Ô@��å#œjŸošo¨c°4´9Ñ=Ô=�Ø×&Ò& u¨e°T´W×5GÒ5GÑ5IÔ5IÑJÔJÐJØ)×1Ò1°%Ñ8Ô8�Ø×Ò˜dœm¨V°d´mÔ6HÑ-HÑIÔIÐIà'ˆDŒMØ”=Ð,Ð,Ð,ØÔ#Ð/ØŒG×#Ò# DÔ$<¸aÑ@Ô@Ð@Ø”w—’ vÑ.Ô.ˆHˆHà”w—’ uÑ-Ô-ˆHàÔ"Ð.Ð.Ð.Ø—:’:˜h¨Ô(;Ñ<Ô<ˆà”-ˆŒØ”W”\ˆŒ
ØŒ=˜FÒ"Ð"ØŒG�MŠM˜( DÔ$7¸ÑBÔBÐBÐBÐBàŒG�MŠM˜( DÔ$7Ñ8Ô8Ð8Ð8Ð8r$   c                ó   — | j         S ©N)rf   )r4   s    r%   rQ   zGifImageFile.tellë  s
   € ØŒ|Ðr$   )r(   r0   )r7   r'   r(   r)   )r(   r>   )r(   rY   )r(   r)   )rb   rY   r(   r>   )T)rb   rY   rk   r)   r(   r>   )r   r   r   ÚformatÚformat_descriptionÚ!_close_exclusive_fp_after_loadingrN   r6   r=   rX   Úpropertyr_   r   ra   r]   rT   r·   r¾   rQ   Ú__classcell__)rº   s   @r%   r.   r.   N   s+  ø€ € € € € Ø€FØ)ÐØ(-Ð%à€Nðð ð ð ðð ð ð ðð ð ð ð4 ð	ð 	ð 	ñ „Xð	ð ðð ð ñ „_ðð"+ð +ð +ð +ð ~!ð ~!ð ~!ð ~!ð ~!ð@ð ð ð ð ð ð6%9ð %9ð %9ð %9ðNð ð ð ð ð ð ð r$   r.   r€   r   )Ú1r€   r   r”   úImage.Imagec                óž  — | j         t          v r|                      ¦   «          | S t          j        | j         ¦  «        dk    rx|                      dt          j        j        ¬¦  «        } | j        €J ‚| j        j         dk    r7| j        j	        D ]*}|d         dk    r| j        j	        |         | j
        d<    nŒ+| S |                      d	¦  «        S )
a  
    Takes an image (or frame), returns an image in a mode that is appropriate
    for saving in a Gif.

    It may return the original image, or it may return an image converted to
    palette or 'L' mode.

    :param im: Image object
    :returns: Image object
    rH   r   ©rO   Nr~   r9   r   r‚   r€   )rš   ÚRAWMODEr�   r   Úgetmodebaserœ   ÚPaletteÚADAPTIVErO   ÚcolorsrJ   )r”   Úrgbas     r%   Ú_normalize_moderÐ   ö  sÊ   € ð 
„w•'ÐÐØ
�Š‰	Œ	ˆ	Øˆ	ÝÔ˜œÑ!Ô! UÒ*Ð*Ø�ZŠZ˜¥U¤]Ô%;ˆZÑ<Ô<ˆØŒzÐ%Ð%Ð%ØŒ:Œ?˜fÒ$Ð$Øœ
Ô)ð ð �Ø˜”7˜a’<�<Ø.0¬jÔ.?ÀÔ.E�B”G˜NÑ+Ø�Eð  ð ˆ	Ø�:Š:�c‰?Œ?Ðr$   rO   ú_Palette | NonerJ   údict[str, Any]c                ó´  — d}|rgt          |t          t          t          f¦  «        rt          |dd…         ¦  «        }t          |t          j        ¦  «        rt          |j        ¦  «        }| j        dk    r+|s(|                      d¦  «        }|€J ‚t          |¦  «        }nC|s&t          d„ t          d¦  «        D ¦   «         ¦  «        }t	          j        d|¬¦  «        | _        |€J ‚|r÷g }| j        €J ‚t          dt          |¦  «        d¦  «        D ]V}t          |||dz   …         ¦  «        }| j        j                             |¦  «        }||v rd}|                     |¦  «         ŒWt          |¦  «        D ]1\  }}|€*t          t          |¦  «        ¦  «        D ]}	|	|vr|	||<    nŒŒ2g }
|D ]}|€J ‚|
                     |¦  «         Œ|                      |
¦  «        } nat!          | |¦  «        }|�O|                      ||¦  «        } d	|v r3	 |                     |d	         ¦  «        |d	<   n# t$          $ r |d	= Y nw xY w| S | j        €J ‚|| j        _        | S )
at  
    Normalizes the palette for image.
      - Sets the palette to the incoming palette, if provided.
      - Ensures that there's a palette for L mode images
      - Optimizes the palette if necessary/desired.

    :param im: Image object
    :param palette: bytes object containing the source palette, or ....
    :param info: encoderinfo
    :returns: Image object
    Ni   r   c              3  ó    K  — | ]	}|d z  V — Œ
dS )r9   Nr#   )Ú.0r<   s     r%   ú	<genexpr>z%_normalize_palette.<locals>.<genexpr>0  s&   è è € Ð&BÐ&B°! q¨A¡vÐ&BÐ&BÐ&BÐ&BÐ&BÐ&Br$   rH   rÉ   r   r9   r‚   )Ú
isinstancer'   Ú	bytearrayÚlistr   rO   rš   r¼   r:   r;   r‡   rÎ   rŸ   ÚappendÚ	enumerateÚremap_paletteÚ_get_optimizeÚindexr�   )r”   rO   rJ   Úsource_paletteÚ
im_paletteÚused_palette_colorsr<   Úsource_colorrÞ   ÚjÚdest_mapÚoptimized_palette_colorss               r%   Ú_normalize_paletteræ     så  € ð €NØð 8å�g¥¥yµ$Ð7Ñ8Ô8ð 	6Ý& w¨t°¨t¤}Ñ5Ô5ˆNÝ�g�|Ô8Ñ9Ô9ð 	8Ý& w¤Ñ7Ô7ˆNà	„w�#‚~€~Øð 	3ØŸš tÑ,Ô,ˆJØÐ)Ð)Ð)Ý& zÑ2Ô2ˆNøàð 	CÝ&Ð&BÐ&Bµu¸S±z´zÐ&BÑ&BÔ&BÑBÔBˆNÝ!Ô.¨u¸nÐMÑMÔMˆŒ
ØÐ%Ð%Ð%àð Ø02ÐØŒzÐ%Ð%Ð%Ý�q�#˜nÑ-Ô-¨qÑ1Ô1ð 	.ð 	.ˆAÝ  °°A¸±E°	Ô!:Ñ;Ô;ˆLØ”JÔ%×)Ò)¨,Ñ7Ô7ˆEØÐ+Ð+Ð+Ø�Ø×&Ò& uÑ-Ô-Ð-Ð-Ý!Ð"5Ñ6Ô6ð 	ð 	‰HˆAˆuØˆ}Ý�sÐ#6Ñ7Ô7Ñ8Ô8ð ð �AØÐ 3Ð3Ð3Ø12Ð+¨AÑ.Ø˜ð 4øð !ˆØ(ð 	#ð 	#ˆEØÐ$Ð$Ð$Ø�OŠO˜EÑ"Ô"Ð"Ð"Ø×Ò˜hÑ'Ô'ˆˆå#0°°TÑ#:Ô#:Ð Ø#Ð/Ø×!Ò!Ð":¸NÑKÔKˆBØ Ð%Ð%ð-Ø+C×+IÒ+IØ˜^Ô,ñ,ô ,�D˜Ñ(Ð(øõ "ð -ð -ð -Ø˜^Ð,Ð,Ð,ð-øøøàˆIàŒ:Ð!Ð!Ð!Ø'€B„JÔØ€Is   ÈH. È.H>È=H>r2   ú	IO[bytes]r>   c                óv  — t          | ¦  «        }|j                             ¦   «         D ]5\  }}t          |t          ¦  «        r| j                             ||¦  «         Œ6t          ||| j        ¦  «        }t          || j        ¦  «        D ]}| 	                    |¦  «         Œd}t          | ¦  «        r|dz  }t          || d|¦  «         dt          | ¦  «        f|_        t          j        ||t          j        dd| j        z   dt"          |j                 ¦  «        g¦  «         | 	                    d¦  «         d S )Nr   r}   r²   rB   rŠ   ó    )rÐ   rJ   Úitemsr×   ÚstrÚencoderinfoÚ
setdefaultræ   Ú_get_global_headerÚwriteÚget_interlaceÚ_write_local_headerÚencoderconfigr   Ú_saver¤   r‘   rÊ   rš   )r”   r2   rO   Úim_outr°   Úvr5   rV   s           r%   Ú_write_single_framerö   Z  s6  € õ
 ˜RÑ Ô €FØ”×!Ò!Ñ#Ô#ð ,ð ,‰ˆˆ1Ý�a�ÑÔð 	,ØŒN×%Ò% a¨Ñ+Ô+Ð+øÝ ¨°´Ñ@Ô@€Få ¨¬Ñ7Ô7ð ð ˆØ
�Š�‰Œˆˆð €EÝ�RÑÔð Ø˜‘
ˆÝ˜˜B ¨Ñ.Ô.Ð.à�}¨RÑ0Ô0Ð1€FÔÝ„OØ�•Y”_ U¨F°R´WÑ,<¸aÅÈÌÔAUÑVÔVÐWñô ð ð ‡H‚HˆU�O„O€O€O€Or$   Úbase_imÚim_frameú4tuple[Image.Image, tuple[int, int, int, int] | None]c                óð   — d„ | |fD ¦   «         }|d         |d         k    r*|                      d¦  «        }|                       d¦  «        } t          j        || ¦  «        }||                     d¬¦  «        fS )Nc                óR   — g | ]$}|j         rt          |j         j         ¦  «        nd ‘Œ%S )r$   )rO   r'   )rÕ   r”   s     r%   ú
<listcomp>z_getbbox.<locals>.<listcomp>y  s>   € ð ð ð Ø=? R¤ZÐ8�ˆbŒjÔ Ñ!Ô!Ð!°Sðð ð r$   r   r   r~   F)Ú
alpha_only)rœ   r   Úsubtract_moduloÚgetbbox)r÷   rø   Úpalette_bytesÚdeltas       r%   Ú_getbboxr  v  s‹   € ðð ØDKÈXÐCVðñ ô €Mð �QÔ˜=¨Ô+Ò+Ð+Ø×#Ò# FÑ+Ô+ˆØ—/’/ &Ñ)Ô)ˆÝÔ& x°Ñ9Ô9€EØ�%—-’-¨5�-Ñ1Ô1Ð1Ð1r$   c                  ó.   — e Zd ZU ded<   ded<   ded<   dS )Ú_FramerÇ   r”   z tuple[int, int, int, int] | NoneÚbboxrÒ   rì   N)r   r   r   Ú__annotations__r#   r$   r%   r  r  ƒ  s3   € € € € € € Ø€O€O�OØ*Ð*Ð*Ñ*ØÐÐÑÐÐr$   r  c           	     óÀ
  — | j                              d¦  «        }| j                              d| j                             d¦  «        ¦  «        }g }d }d}d }t          j        | g| j                              dg ¦  «        ¦  «        D �]}	t          j        |	¦  «        D �]ö}
t          |
                     ¦   «         ¦  «        }
|dk    rV|
j         	                    ¦   «         D ]<\  }}|dk    rŒt          |t          ¦  «        r| j                              ||¦  «         Œ=| j                              ¦   «         }d|
j        v r!|                     d|
j        d         ¦  «         t          |
||¦  «        }
t          |t          t          f¦  «        r||         |d<   n|€d|
j        v r|
j        d         |d<   t          |t          t          f¦  «        r||         |d<   |dz  }d }|�r„|�r�t!          ||
¦  «        \  }}|s8|                     d¦  «        r!|d         j         dxx         |d         z  cc<   �Œ˜|d         j                              d¦  «        dk    rª|€�| j                              d| j                             dd	¦  «        ¦  «        }t#          |
|¦  «        }t%          j        d
|
j        |¦  «        }|d         j        j        }|€J ‚|                     ||j        ¦  «         t!          ||
¦  «        d         }�nh|                     d¦  «        �rO|
j        dk    �rCd|vr8|
j        €J ‚	 |
j                             |
¦  «        |d<   n# t4          $ r Y nw xY wd|v �r|
                     ¦   «         }t%          j        d
|j        |d         ¦  «        }|j        dk    r4|                     ¦   «         \  }}}}t9          j        d„ ||||¬¦  «        }ne|j        d
k    rCt%          j        d|j        ¦  «        }|                     |                     ¦   «         ¦  «         |}t9          j        d„ |¬¦  «        }|                      |tC          j"        |¦  «        ¬¦  «         nd }|
}| #                    tI          |p|
||¦  «        ¦  «         �Œø�ŒtK          |¦  «        dk    r&d| j         v r|d         j         d         | j         d<   dS |D ]Œ}|j        }
|j&        s0tO          |
|j         ¦  «        D ]}| (                    |¦  «         Œd}n5|s
d|j         d<   |
 )                    |j&        ¦  «        }
|j&        d d…         }tU          ||
||j         ¦  «         Œ�dS )Nrr   Údisposalr   Úappend_imagesr‚   r   rm   r   )r   r   r   r   ÚoptimizerÆ   r~   c                ó¼   —  | d          | d          | d          | d         | d         | d         ¦  «        | d         ¦  «        | d         ¦  «        dz  d¦  «        S )	Nrœ   r’   ÚrÚgÚbÚarv   rÆ   r#   ©Úargss    r%   ú<lambda>z(_write_multiple_frames.<locals>.<lambda>Î  sv   € ¨_¨T°)¬_Ø$/ D¨¤KØ(3¨¨U¬Ø,7¨D°¬K¸¸S¼	À4ÈÄ9Ñ,MÔ,MÈtÐTWÌyñ)*ô )*ð )-¨S¬	ñ	%&ô %&ð '*ñ%*ð %(ñ	."ô 	."€ r$   )r  r  r  r  r€   c                ó8   —  | d         | d         dz  d¦  «        S )Nrœ   r”   rv   rÆ   r#   r  s    r%   r  z(_write_multiple_frames.<locals>.<lambda>ä  s   € ¨_¨T°)¬_¸TÀ$¼ZÈ#Ñ=MÈsÑ-SÔ-S€ r$   )r”   )ÚmaskFr²   TÚinclude_color_table)+rì   rŸ   rJ   Ú	itertoolsÚchainr   ÚIteratorrÐ   r�   rê   r×   rë   rí   ræ   rÙ   r‡   r  Ú_get_backgroundr   Únewr‘   r”   rO   r´   rš   Ú_new_color_indexr�   Úsplitr   Úlambda_evalÚputdatarµ   r•   r   ÚinvertrÚ   r  r;   r  rî   rï   ÚcropÚ_write_frame_data)r”   r2   rO   rr   r  Ú	im_framesÚprevious_imÚframe_countÚbackground_imÚ
imSequencerø   r°   rõ   rì   Ú
diff_framer  r  rƒ   rG   Úfirst_paletter¡   r  r  r  r  r  Údelta_lÚ
frame_datar5   Úoffsets                                 r%   Ú_write_multiple_framesr,  ‰  sÐ  € ð Œ~×!Ò! *Ñ-Ô-€HØŒ~×!Ò! *¨b¬g¯kªk¸*Ñ.EÔ.EÑFÔF€Hà €IØ&*€KØ€KØ€MÝ”o r d¨B¬N×,>Ò,>¸ÐPRÑ,SÔ,SÑTÔTð XPñ XPˆ
Ý%Ô.¨zÑ:Ô:ð W	Pñ W	PˆHå& x§}¢}¡¤Ñ7Ô7ˆHØ˜aÒÐØ$œM×/Ò/Ñ1Ô1ð 8ð 8‘D�A�qØ˜NÒ*Ð*Ø Ý! !¥SÑ)Ô)ð 8Øœ×1Ò1°!°QÑ7Ô7Ð7øàœ.×-Ò-Ñ/Ô/ˆKØ ¤Ð.Ð.Ø×&Ò& ~°x´}À^Ô7TÑUÔUÐUÝ)¨(°G¸[ÑIÔIˆHÝ˜(¥T­5 MÑ2Ô2ð DØ*2°;Ô*?�˜JÑ'Ð'ØÐ! j°H´MÐ&AÐ&AØ*2¬-¸
Ô*C�˜JÑ'Ý˜(¥T­5 MÑ2Ô2ð @Ø*2°;Ô*?�˜JÑ'Ø˜1ÑˆKàˆJØñ >˜[ñ >å& {°HÑ=Ô=‘��tØð à"—’ zÑ2Ô2ð YØ! "œÔ1°*Ð=Ð=Ô=ÀÈZÔAXÑXÐ=Ð=Ñ=ÙØ˜R”=Ô,×0Ò0°Ñ<Ô<ÀÒAÐAØ$Ð,Ø "¤× 2Ò 2Ø*¨B¬G¯KªK¸È	Ñ,RÔ,Rñ!ô !˜õ &5°X¸uÑ%EÔ%E˜
Ý(-¬	°#°x´}ÀjÑ(QÔ(Q˜Ø(1°!¬¬Ô(?˜Ø,Ð8Ð8Ð8Ø%×0Ò0°ÀÔ@RÑSÔSÐSÝ# M°8Ñ<Ô<¸QÔ?�D‘DØ —_’_ ZÑ0Ô0ñ )K°X´]ÀcÒ5IÑ5IØ%¨[Ð8Ð8Ø'Ô/Ð;Ð;Ð;ð!à (Ô 0× AÒ AÀ(Ñ KÔ Kð (¨Ñ7Ð7øõ  *ð !ð !ð !Ø ˜Dð!øøøà%¨Ð4Ñ4à%-§]¢]¡_¤_˜
Ý$œy¨¨e¬j¸+ÀnÔ:UÑVÔV˜Ø œ:¨Ò/Ð/Ø).¯ª©¬™J˜A˜q ! QÝ#,Ô#8ð	!"ð 	!"ð #$Ø"#Ø"#Ø"#ð$ñ $ô $˜D˜Dð"  %œz¨SÒ0Ð0å*/¬)°C¸¼Ñ*DÔ*D Ø '§¢°·²±´Ñ @Ô @Ð @Ø(/ Ý#,Ô#8Ø SÐ SØ#(ð$ñ $ô $˜Dð #×(Ò(¨µH´OÀDÑ4IÔ4IÐ(ÑJÔJÐJøà�Ø"ˆKØ×Ò�V JÐ$:°(¸DÀ+ÑNÔNÑOÔOÐOÑOñoW	Põr ˆ9�~„~˜ÒÐØ˜œÐ'Ð'à)2°1¬Ô)AÀ*Ô)MˆBŒN˜:Ñ&Øˆuàð Hð Hˆ
Ø”=ˆØŒð 	)å'¨°*Ô2HÑIÔIð ð �Ø—’˜‘”��ØˆFˆFð ð EØ@D�
Ô&Ð'<Ñ=à—}’} Z¤_Ñ5Ô5ˆHØ”_ R a RÔ(ˆFÝ˜"˜h¨°
Ô0FÑGÔGÐGÐGØˆ4s   Ì2MÍ
MÍMÚfilenameústr | bytesc                ó,   — t          | ||d¬¦  «         d S )NT)Úsave_all)ró   )r”   r2   r-  s      r%   Ú	_save_allr1    s   € Ý	ˆ"ˆb�( TÐ*Ñ*Ô*Ð*Ð*Ð*r$   Fr0  c                óŠ  — d| j         v s	d| j        v r4| j                              d| j                             d¦  «        ¦  «        }nd }| j                              dd¦  «         |rt	          | ||¦  «        st          | ||¦  «         |                     d¦  «         t          |d¦  «        r|                     ¦   «          d S d S )NrO   r
  Tro   Úflush)	rì   rJ   rŸ   rí   r,  rö   rï   Úhasattrr3  )r”   r2   r-  r0  rO   s        r%   ró   ró   	  sË   € ð �B”NÐ"Ð" i°2´7Ð&:Ð&:Ø”.×$Ò$ Y°´·²¸IÑ0FÔ0FÑGÔGˆˆàˆØ
Œ×!Ò! *¨dÑ3Ô3Ð3àð -Õ1°"°b¸'ÑBÔBð -Ý˜B  GÑ,Ô,Ð,à‡H‚HˆT�N„N€Nåˆr�7ÑÔð Ø
�Š‰
Œ
ˆ
ˆ
ˆ
ðð r$   rY   c                óp   — | j                              dd¦  «        }t          | j        ¦  «        dk     rd}|S )Nr¦   r   é   r   )rì   rŸ   Úminr‘   )r”   r¦   s     r%   rð   rð     s9   € Ø”×"Ò" ;°Ñ2Ô2€Iõ ˆ2Œ7�|„|�bÒÐØˆ	àÐr$   r+  útuple[int, int]rV   c                ó2  — 	 |j         d         }n# t          $ r d }Y nw xY wd|j         v rt          |j         d         dz  ¦  «        }nd}t          |j                              dd¦  «        ¦  «        }|€|dk    s|r…|�dnd}||dz  z  }|                      dt          d	¦  «        z   t          d
¦  «        z   t          |¦  «        z   t          |¦  «        z   t          |pd¦  «        z   t          d¦  «        z   ¦  «         |j                              d¦  «        }|r*t          |¦  «        }	t          |	¦  «        }
|
r
|dz  }||
z  }|                      dt          |d         ¦  «        z   t          |d         ¦  «        z   t          |j	        d         ¦  «        z   t          |j	        d         ¦  «        z   t          |¦  «        z   ¦  «         |r$|
r"|                      t          |	¦  «        ¦  «         |                      t          d¦  «        ¦  «         d S )Nr‚   rr   rC   r   r  r   r   rp   rq   r|   r  rE   rz   rB   )rì   ÚKeyErrorrY   rŸ   rï   r   Úo16Ú_get_palette_bytesÚ_get_color_table_sizer‘   Ú_get_header_palette)r2   r”   r+  rV   r‚   rr   r  Úpacked_flagr  r   Úcolor_table_sizes              r%   rñ   rñ   &  sH  € ðØ”~ nÔ5ˆˆøÝð ð ð Øˆˆˆðøøøð �R”^Ð#Ð#Ý�r”~ jÔ1°BÑ6Ñ7Ô7ˆˆàˆå�2”>×%Ò% j°!Ñ4Ô4Ñ5Ô5€HàÐ 8¨q¢= =°H =Ø'Ð3�a�a¸ˆØ�x 1‘}Ñ$ˆà
�ŠØÝ�‰gŒgñå�‰eŒeñõ �‰oŒoñõ �(‰mŒmñ	õ
 �Ð" Ñ#Ô#ñ$õ �‰eŒeññ	
ô 	
ð 	
ð œ.×,Ò,Ð-BÑCÔCÐØð -Ý*¨2Ñ.Ô.ˆÝ0°Ñ?Ô?ÐØð 	-Ø˜C‘KˆEØÐ,Ñ,ˆEà‡H‚HØÝ
ˆf�QŒi‰.Œ.ñ	å
ˆf�QŒi‰.Œ.ñ	õ ˆbŒg�aŒj‰/Œ/ñ	õ ˆbŒg�aŒj‰/Œ/ñ		õ
 ˆU‰)Œ)ñ	ñô ð ð ð 5Ð/ð 5Ø
�ŠÕ$ ]Ñ3Ô3Ñ4Ô4Ð4Ø‡H‚H�R�‰UŒU�O„O€O€O€Os   ‚ �žc                ó"  — |                       ¦   «         }	 t          |d¦  «        5 }| j        dk    r$t          j        d|g|t          j        ¬¦  «         nÒdd|g}dg}t          j        |t          j        t          j        ¬¦  «        }t          j        ||j        |t          j        ¬¦  «        }|j        €J ‚|j         	                    ¦   «          | 
                    ¦   «         }	|	rt          j        |	|¦  «        ‚| 
                    ¦   «         }	|	rt          j        |	|¦  «        ‚d d d ¦  «         n# 1 swxY w Y   	 t          j        |¦  «         d S # t          $ r Y d S w xY w# 	 t          j        |¦  «         w # t          $ r Y w w xY wxY w)NÚwbrH   Úppmtogif)ÚstdoutÚstderrÚppmquantÚ256)ÚstdinrD  rE  )Ú_dumpÚopenrš   Ú
subprocessÚ
check_callÚDEVNULLÚPopenÚPIPErD  ÚcloseÚwaitÚCalledProcessErrorÚosÚunlinkÚOSError)
r”   r2   r-  Útempfileri   Ú	quant_cmdÚ	togif_cmdÚ
quant_procÚ
togif_procÚretcodes
             r%   Ú_save_netpbmr\  X  s  € ð �xŠx‰zŒz€Hð$Ý�(˜DÑ!Ô!ð 	L QØŒw˜%ÒÐÝÔ%Ø Ð*°1½ZÔ=Oðñ ô ð ð ð (¨°Ð9�	Ø'˜L�	Ý'Ô-Ø¥j¤o½jÔ>Pðñ ô �
õ (Ô-ØØ$Ô+ØÝ%Ô-ð	ñ ô �
ð "Ô(Ð4Ð4Ð4ØÔ!×'Ò'Ñ)Ô)Ð)à$Ÿ/š/Ñ+Ô+�Øð LÝ$Ô7¸ÀÑKÔKÐKà$Ÿ/š/Ñ+Ô+�Øð LÝ$Ô7¸ÀÑKÔKÐKð=	Lð 	Lð 	Lñ 	Lô 	Lð 	Lð 	Lð 	Lð 	Lð 	Lð 	Løøøð 	Lð 	Lð 	Lð 	Lð@	ÝŒI�hÑÔÐÐÐøÝð 	ð 	ð 	ØˆDˆDð	øøøøð	ÝŒI�hÑÔÐÐøÝð 	ð 	ð 	ØˆDð	øøøøøøse   –E' ¦DD4Ä(E' Ä4D8Ä8E' Ä;D8Ä<E' Å E Å
E$Å#E$Å'FÅ)E>Å=FÅ>
FÆFÆ
FÆFúlist[int] | Nonec                óT  — | j         dv �r|�r|                     d¦  «        �rt          p
| j         dk    }|s| j        | j        z  dk     rÝg }t          |                      ¦   «         ¦  «        D ]\  }}|r|                     |¦  «         Œ|s t          |¦  «        t          |¦  «        k    r|S | j
        €J ‚t          | j
        j
        ¦  «        t          j        | j
        j         ¦  «        z  }d|dz
                       ¦   «         z  }t          |¦  «        |dz  k    r|dk    r|S dS )aL  
    Palette optimization is a potentially expensive operation.

    This function determines if the palette should be optimized using
    some heuristics, then returns the list of palette entries in use.

    :param im: Image object
    :param info: encoderinfo
    :returns: list of indexes of palette entries in use, or None
    )r   r€   r
  r€   i   Nr   r   )rš   rŸ   Ú_FORCE_OPTIMIZEÚwidthÚheightrÛ   Ú	histogramrÚ   r’   r;   rO   r   ÚgetmodebandsÚ
bit_length)r”   rJ   Úoptimiserá   r<   ÚcountÚnum_palette_colorsÚcurrent_palette_sizes           r%   rÝ   rÝ   �  sQ  € ð 
„w�*ÐÑ Ñ¨$¯(ª(°:Ñ*>Ô*>Ñõ #Ð4 b¤g°¢nˆØð 	+�r”x "¤)Ñ+¨iÒ7Ð7à"$ÐÝ% b§l¢l¡n¤nÑ5Ô5ð 2ð 2‘��5Øð 2Ø'×.Ò.¨qÑ1Ô1Ð1øàð +�3Ð2Ñ3Ô3µsÐ;NÑ7OÔ7OÒOÐOØ*Ð*à”:Ð)Ð)Ð)Ý!$ R¤ZÔ%7Ñ!8Ô!8½EÔ<NØ”
”ñ=ô =ñ "Ðð $%Ð);¸aÑ)?×(KÒ(KÑ(MÔ(MÑ#MÐ õ Ð'Ñ(Ô(Ð,@ÀAÑ,EÒEÐEà(¨1Ò,Ð,à*Ð*Øˆ4r$   r   c                ó¨   — | sdS t          | ¦  «        dk     rdS t          j        t          j        t          | ¦  «        dz  d¦  «        ¦  «        dz
  S )Nr   r{   r   r9   r   )r;   ÚmathÚceilÚlog)r   s    r%   r=  r=  ½  sV   € àð CØˆqÝ	ˆ]Ñ	Ô	˜aÒ	Ð	ØˆqåŒy�œ¥# mÑ"4Ô"4¸Ñ"9¸1Ñ=Ô=Ñ>Ô>ÀÑBÐBr$   c                ó�   — t          | ¦  «        }d|z  t          | ¦  «        dz  z
  }|dk    r| t          d¦  «        dz  |z  z  } | S )zä
    Returns the palette, null padded to the next power of 2 (*3) bytes
    suitable for direct inclusion in the GIF header

    :param palette_bytes: Unpadded palette bytes, in RGBRGB form
    :returns: Null padded palette
    r   r9   r   )r=  r;   r   )r   r@  Úactual_target_size_diffs      r%   r>  r>  Ç  s]   € õ -¨]Ñ;Ô;Ðð  !Ð$4Ñ4½¸MÑ8JÔ8JÈaÑ8OÑOÐØ Ò"Ð"Ø�˜A™œ ™Ð%<Ñ<Ñ<ˆØÐr$   c                óè   ‡— | j         sdS t          | j         j         ¦  «        Š| j         j        dk    r>d                     ˆfd„t	          t          ‰¦  «        dz  ¦  «        D ¦   «         ¦  «        Š‰S )zš
    Gets the palette for inclusion in the gif header

    :param im: Image object
    :returns: Bytes, len<=768 suitable for inclusion in gif header
    r$   r~   c              3  ó>   •K  — | ]}‰|d z  |d z  dz   …         V — ŒdS )r|   r9   Nr#   )rÕ   r<   rO   s     €r%   rÖ   z%_get_palette_bytes.<locals>.<genexpr>å  s9   øè è € ÐXÐX¸!˜7 1 q¡5¨1¨q©5°1©9Ð#4Ô5ÐXÐXÐXÐXÐXÐXr$   r9   )rO   r'   rš   Újoinr:   r;   )r”   rO   s    @r%   r<  r<  Ù  st   ø€ ð Œ:ð Øˆså�B”JÔ&Ñ'Ô'€GØ	„z„˜&Ò Ð Ø—(’(ÐXÐXÐXÐX½uÅSÈÁ\Ä\ÐUVÑEVÑ?WÔ?WÐXÑXÔXÑXÔXˆØ€Nr$   Úinfo_backgroundú=int | tuple[int, int, int] | tuple[int, int, int, int] | Nonec                óÚ   — d}|rft          |t          ¦  «        rO| j        €J ‚	 | j                             || ¦  «        }n+# t          $ r}t          |¦  «        dvr‚ Y d }~n
d }~ww xY w|}|S )Nr   )z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)r×   r‡   rO   Úgetcolorr�   rë   )r”   rr  rG   rj   s       r%   r  r  é  s³   € ð €JØð )Ý�o¥uÑ-Ô-ð 	)ð ”:Ð)Ð)Ð)ð
ØœZ×0Ò0°À"ÑEÔE�
�
øÝð ð ð Ý�q‘6”6ð "ð ð ð ðð ð ð ð øøøøðøøøð )ˆJØÐs   ¤A  Á 
A&Á
A!Á!A&úlist[bytes]c                ó  — d}| j                              d¦  «        dk    sE|rEd|v s?|                     d¦  «        €*|                     d¦  «        s|                     d¦  «        rd}t          | |                     d	¦  «        ¦  «        }t          | ¦  «        }t	          |¦  «        }d
|z   t          | j        d         ¦  «        z   t          | j        d         ¦  «        z   t          |dz   ¦  «        t          |¦  «        t          d¦  «        z   t          |¦  «        g}|                     d¦  «        �~| 	                    dt          d¦  «        z   t          d¦  «        z   dz   t          d¦  «        z   t          d¦  «        z   t          |d         ¦  «        z   t          d¦  «        z   ¦  «         |                     d¦  «        rºdt          d¦  «        z   }|d         }t          |t          ¦  «        r|                     ¦   «         }t          dt          |¦  «        d¦  «        D ]1}	||	|	dz   …         }
|t          t          |
¦  «        ¦  «        |
z   z  }Œ2|t          d¦  «        z  }| 	                    |¦  «         |S )z2Return a list of strings representing a GIF headers   87arA   s   89ar‚   ry   Nrr   rn   rG   s   GIFr   r   rE   rp   rv   rF   rx   r9   rt   )rJ   rŸ   r  r<  r=  r;  r‘   r   r>  rÚ   r×   rë   Úencoder:   r;   )r”   rJ   rA   rG   r   r@  ÚheaderÚcomment_blockrn   r<   Úsubblocks              r%   rî   rî     s  € ð €GØ	„w‡{‚{�9ÑÔ Ò'Ð'Øð (ð ˜dÐ"Ð"Ø�xŠx˜ÑÔÐ+Ø�xŠx˜
Ñ#Ô#ð ,à�xŠx˜	Ñ"Ô"ð ,ð
 ˆå   T§X¢X¨lÑ%;Ô%;Ñ<Ô<€Jå& rÑ*Ô*€MÝ,¨]Ñ;Ô;Ðð 	Ø
ñ	å
ˆbŒg�aŒj‰/Œ/ñ	õ ˆbŒg�aŒj‰/Œ/ñ	õ 	Ð˜cÑ!Ñ"Ô"å
ˆ:‰Œ�˜A™œÑå˜MÑ*Ô*ð€Fð ‡x‚x�ÑÔÐ#Ø�ŠØÝ�‰gŒgñå�‰fŒfñð ñõ �‰eŒeñ	õ
 �‰eŒeñõ �$�v”,ÑÔñ õ �‰eŒeññ		
ô 		
ð 		
ð ‡x‚x�	ÑÔð %Ø�r #™wœw™ˆà�y”/ˆÝ�g�sÑ#Ô#ð 	'Ø—n’nÑ&Ô&ˆGÝ�q�#˜g™,œ,¨Ñ,Ô,ð 	:ð 	:ˆAØ˜q 1 s¡7˜{Ô+ˆHØ�R¥ H¡¤Ñ.Ô.°Ñ9Ñ9ˆMˆMà�˜A™œÑˆØ�Š�mÑ$Ô$Ð$Ø€Mr$   Úparamsc                óþ   — 	 ||_         t          | ||d¦  «         t          j        || t          j        dd|j        z   dt          |j                 ¦  «        g¦  «         |                      d¦  «         |` d S # |` w xY w)Nr   rŠ   r²   ré   )	rì   rñ   r   ró   r¤   r‘   rÊ   rš   rï   )r2   rø   r+  r|  s       r%   r!  r!  B  s’   € ð!Ø%ˆÔõ 	˜B ¨&°!Ñ4Ô4Ð4åŒØØÝŒ_˜U F¨X¬]Ñ$:¸A½wÀxÄ}Ô?UÑVÔVÐWñ	
ô 	
ð 	
ð 	�Š�‰ŒˆàÐ Ð Ð øˆHÐ Ð Ð Ð Ð s   ‚A2A8 Á8A<údict[str, Any] | Noneú$tuple[list[bytes], list[int] | None]c                óÞ   — |€i }t          | |¦  «        }d|vrd| j        v r| j        d         |d<   t          | ||¦  «        }|j        | _        |j        | _        t          | |¦  «        }||fS )a  
    Legacy Method to get Gif data from image.

    Warning:: May modify image data.

    :param im: Image object
    :param palette: bytes object containing the source palette, or ....
    :param info: encoderinfo
    :returns: tuple of(list of header items, optimized palette)

    NrG   )rÝ   rJ   ræ   rO   r”   rî   )r”   rO   rJ   rá   Úim_modry  s         r%   Ú	getheaderr‚  ]  s„   € ð €|Øˆå'¨¨DÑ1Ô1Ðà˜4ÐÐ L°B´GÐ$;Ð$;ØœW \Ô2ˆˆ\Ñå  G¨TÑ2Ô2€FØ”€B„JØŒI€B„EÝ  DÑ)Ô)€FàÐ&Ð&Ð&r$   r²   r   c                ó˜   — ddl m}  G d„ d|¦  «        }|                      ¦   «           |¦   «         }t          || ||¦  «         |j        S )aë  
    Legacy Method

    Return a list of strings representing this image.
    The first string is a local image header, the rest contains
    encoded image data.

    To specify duration, add the time in milliseconds,
    e.g. ``getdata(im_frame, duration=1000)``

    :param im: Image object
    :param offset: Tuple of (x, y) pixels. Defaults to (0, 0)
    :param \**params: e.g. duration or other encoder info parameters
    :returns: List of bytes containing GIF encoded frame data

    r   )ÚBytesIOc                  ó   — e Zd Zg Zdd„ZdS )úgetdata.<locals>.Collectorr6   r   r(   rY   c                óT   — | j                              |¦  «         t          |¦  «        S rÀ   )r6   rÚ   r;   )r4   r6   s     r%   rï   z getdata.<locals>.Collector.write“  s$   € ØŒI×Ò˜TÑ"Ô"Ð"Ý�t‘9”9Ðr$   N)r6   r   r(   rY   )r   r   r   r6   rï   r#   r$   r%   Ú	Collectorr†  �  s-   € € € € € Øˆð	ð 	ð 	ð 	ð 	ð 	r$   rˆ  )Úior„  r�   r!  r6   )r”   r+  r|  r„  rˆ  r2   s         r%   rµ   rµ   {  su   € ð& ÐÐÐÐÐðð ð ð ð �Gñ ô ð ð ‡G‚G�I„I€Ià	ˆ‰Œ€Bå�b˜"˜f fÑ-Ô-Ð-àŒ7€Nr$   z.gifz	image/gif)r&   r'   r(   r)   )r”   rÇ   r(   rÇ   )r”   rÇ   rO   rÑ   rJ   rÒ   r(   rÇ   )r”   rÇ   r2   rç   rO   rÑ   r(   r>   )r÷   rÇ   rø   rÇ   r(   rù   )r”   rÇ   r2   rç   rO   rÑ   r(   r)   )r”   rÇ   r2   rç   r-  r.  r(   r>   )F)
r”   rÇ   r2   rç   r-  r.  r0  r)   r(   r>   )r”   rÇ   r(   rY   )
r2   rç   r”   rÇ   r+  r8  rV   rY   r(   r>   )r”   rÇ   rJ   rÒ   r(   r]  )r   r'   r(   rY   )r   r'   r(   r'   )r”   rÇ   r(   r'   )r”   rÇ   rr  rs  r(   rY   )r”   rÇ   rJ   rÒ   r(   rv  )
r2   rç   rø   rÇ   r+  r8  r|  rÒ   r(   r>   )NN)r”   rÇ   rO   rÑ   rJ   r~  r(   r  )r²   )r”   rÇ   r+  r8  r|  r   r(   rv  )HÚ
__future__r   r  rj  rS  rK  Úenumr   Ú	functoolsr   Útypingr   r   r   r	   r
   r   Ú r   r   r   r   r   r   r   Ú_binaryr   rK   r   r   r;  r   Ú_typingr   r   r    r˜   r,   r.   rÊ   rÐ   r'   rØ   rÙ   rY   Ú_Paletteræ   rö   r  r  r,  r1  ró   rð   rñ   r\  r_  rÝ   r=  r>  r<  r  rî   r!  r‚  rµ   Úregister_openrÁ   Úregister_saveÚregister_save_allÚregister_extensionÚregister_mimer#   r$   r%   ú<module>r—     se  ðð4 #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø 	€	€	€	Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð "Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !àð  ØÐÐÐÐÐØÐÐÐÐÐðð ð ð ð �gñ ô ð ð #Ô2Ð ð0ð 0ð 0ð 0ð^ð ^ð ^ð ^ð ^�9Ô&ñ ^ô ^ð ^ðJ ˜# CÐ
(Ð
(€ðð ð ð ð4 �˜	 4¨¤9¨lÔ.GÐGÔH€ðDð Dð Dð DðNð ð ð ð8
2ð 
2ð 
2ð 
2ð ð  ð  ð  ð  ˆZñ  ô  ð  ðyð yð yð yðx+ð +ð +ð +ð
 MRðð ð ð ð ð&ð ð ð ð/ð /ð /ð /ðd-ð -ð -ð -ðd €ð-ð -ð -ð -ð`Cð Cð Cð Cðð ð ð ð$ð ð ð ð ð ð ð ð6;ð ;ð ;ð ;ð|!ð !ð !ð !ð8 UYð'ð 'ð 'ð 'ð 'ð> 06ð"ð "ð "ð "ð "ðP €Ô �LÔ'¨°wÑ ?Ô ?Ð ?Ø €Ô �LÔ'¨Ñ /Ô /Ð /Ø €Ô ˜Ô+¨YÑ 7Ô 7Ð 7Ø €Ô ˜Ô,¨fÑ 5Ô 5Ð 5Ø €Ô �LÔ'¨Ñ 5Ô 5Ð 5Ð 5Ð 5r$   