__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
�

"%vg����SSKJr SSKrSSKrSSKrSSKrSSKJr SSKJ	r	 SSK
JrJrJ
r
JrJrJr SSKJrJrJrJrJrJrJr SSKJr SS	KJr SS
KJr \(aSSKJr SSK J!r! "S
S\5r"\"RFr$S-Sjr%"SS\R(5r&SSSS.r'S.Sjr(\\)\*\+\,\R.4r-S/Sjr.S0Sjr/S1Sjr0"SS\5r1S2Sjr2S3Sjr3S4S5Sjjr4S6Sjr5S7S jr6S3S!jr7Sr8S8S"jr9S9S#jr:S:S$jr;S;S%jr<S<S&jr=S=S'jr>S>S(jr?S?S@S)jjr@SASBS*jjrA\R�"\&R�\&\%5 \R�"\&R�\45 \R�"\&R�\35 \R�"\&R�S+5 \R�"\&R�S,5 g)C�)�annotationsN)�IntEnum)�cached_property)�IO�
TYPE_CHECKING�Any�Literal�
NamedTuple�Union�)�Image�
ImageChops�	ImageFile�	ImageMath�ImageOps�ImagePalette�
ImageSequence)�i16le)�o8)�o16le)�_imaging)�Bufferc�$�\rSrSrSrSrSrSrSrg)�LoadingStrategy�6z.. versionadded:: 9.1.0rr��N)	�__name__�
__module__�__qualname__�__firstlineno__�__doc__�RGB_AFTER_FIRST� RGB_AFTER_DIFFERENT_PALETTE_ONLY�
RGB_ALWAYS�__static_attributes__r��4/usr/lib/python3/dist-packages/PIL/GifImagePlugin.pyrr6s��!��O�'(�$��Jr'rc��USSS;$)N�)sGIF87asGIF89ar)�prefixs r(�_acceptr,Es���"�1�:�/�/�/r'c�^�\rSrSrSrSrSrSrSSjrSSjr	SSjr
\SS	j5r\
SS
j5rSSjrSSSjjrSU4S
jjrSSjrSSjrSrU=r$)�GifImageFile�N�GIFzCompuserve GIFFNc��URRS5nU(a(US(aURRUS5$g)Nrr)�fp�read)�self�ss  r(�data�GifImageFile.dataUs6���G�G�L�L��O����1���7�7�<�<��!��%�%�r'c��[S[U5S5H,nUS-Xs=:XaXS-s=:XaXS-:XaM( g  g g)Nr�rrTF)�range�len)r4�p�is   r(�_is_palette_needed�GifImageFile._is_palette_needed[sM���q�#�a�&�!�$�A���F�a�d�:�a�A��h�:�!��E�(�:��;��%�r'c�f�URRS5n[U5(d
Sn[U5eUSSURS'[US5[US54UlUSnUS-S-nUS	-(akUS
URS'URRSU-5nURU5(a%[R"S
U5nU=Ul
UlURUlURR5UlSUlUR!S5 g)N�
znot a GIF filer*�version��
�r���
backgroundr9�RGBr)r2r3r,�SyntaxError�info�i16�_sizer>r�raw�global_palette�palette�_fp�tell�_GifImageFile__rewind�	_n_frames�_seek)r4r5�msg�flags�bitsr<s      r(�_open�GifImageFile._openas����G�G�L�L�����q�z�z�"�C��c�"�"� ��!�u��	�	�)����A�Y��A�q�	�)��
��"�����	�Q����3�;�&'��e�D�I�I�l�#������Q�$�Y�'�A��&�&�q�)�)� �$�$�U�A�.��56�6��#�d�l��7�7����������
�%)����
�
�1�
r'c��URc7UR5nURUR5S-S5 M%UR$![a UR5S-UlOf=fUR	U5 NF)NrF�rTrRrU�EOFError�seek)r4�currents  r(�n_frames�GifImageFile.n_frames{sv���>�>�!��i�i�k�G�
1���J�J�t�y�y�{�Q���6��
�~�~����
1�!%����q����
1���I�I�g�s�&A�"A6�5A6c���URbURS:g$UR5nU(agURSS5 SnUR	U5 U$![a SnN!f=f)NrTFr\)r4r_�is_animateds   r(rc�GifImageFile.is_animated�sn���>�>�%��>�>�Q�&�&��)�)�+����	 ��J�J�q�%� ��K�	
�	�	�'�����	�	 ��K�	 �s�A�A,�+A,c�d�URU5(dgXR:aSUlURS5 URn[	URS-US-5HnURU5 M g![
a$nUR
U5 Sn[U5UeSnAff=f)Nrr�no more images in GIF file)�_seek_check�_GifImageFile__frame�_imrUr:r]r^)r4�frame�
last_frame�f�erVs      r(r^�GifImageFile.seek�s�������&�&���<�<���D�H��J�J�q�M��\�\�
��t�|�|�a�'����3�A�
+��
�
�1�
�4���
+��	�	�*�%�2���s�m��*��
+�s�+B�
B/�B*�*B/c��^�US:Xa_STlSTlSTlTRR	TR
5 STlSTR;a
TRS	O(TR(aU(aTR5 UTRS-:waSU3n[U5eTRTlTR(aYTRR	TR5 TR5(aTR5(aMSTlTRRS5nU(aUS:Xa
Sn[U5eSn0nSnSnSn	U(dTRRS5nU(aUS:XaGOUS:XGauTRRS5nTR5n
USS	:XaBU
b?U
SnUS-(aU
S
n[U
S5S-US'S
U-nUS-	nU(aUTlO�USS:XaESn
U
(aX�-
n
TR5n
U
(aMSU;aUS==SU
--
ss'OX�S'SnM�USS:XayUS:XasU
bpU
TRR!54US'U
SSS:XaHTR5n
U
(a1[#U
5S
:�a"U
SS:Xa[U
S5TRS'TR5(aTR5(aMGO�US:XGa�TRRS5n[US5[US5p�U[US5-U[US5-nnUTR$S:�dUTR$S:�a^U(aW['UTR$S5['UTR$S54Tl[*R,"TR(5 X�UU4n	USnUS-S:gnUS-(aVUS-S-nTRRS
U-5nTR/U5(a[0R2"SU5nOS nTRRS5SnTRR!5TlOSnGM=Uc
S!n[U5eUTlU(dg/TlTR(a0TR4R7TRTR85 UbUOTR:TlUTlUS:Xa�TR<(a-[@[BRD:Xa
UbS"OSTl#OS#Tl#OS$Tl#U(a	UTl$GO-TR:(aSS%K%J%n U"TR:5Tl$O�STl$O�TRLS#:Xa�[@[BRN:wdU(a�S&TR;awTR4RQTRS&S5 TR4RSS"[*RTRV5TlS"Tl#TRS&	O@STl#TR4RSS[*RTRV5TlS-U4S'jjnSTlU	TlTR8(Ga�TRS:�Ga�TRS:Xa�TR8up�nnUU-
UU-
4n[*R,"U5 S#nTRRYS&U5nUbTRLS(;a
S"nU"U5S)-nO6TRRYS*S5nTRLS(;a
SnU"U5n[*RZR]UUU5TlO�TR^b,TRaTR4TR85TlOzUbwTR8up�nnUU-
UU-
4n[*R,"U5 S#nUnTRLS(;a
S"nU"U5S)-n[*RZR]UUU5TlUbuSnUb@US:Xa([@[BRD:waUTRS&'OTRLS(;aUn[dRf"S+WWWW4TRWUU45/TlURYS5(aUSTRS'S,H<nUU;aUUTRU'MUTR;dM/TRU	M> g![ba N�f=f).Nr����commentrzcannot seek to frame �;rf�!�r9rD�duration�r�r'�
��	extensionrG�NETSCAPE2.0�loop�,�	�r*rC�@rFrErIFzimage not found in GIF frame�RGBA�P�L)�copy�transparencyc��>�TR(aVUS-S-[TRR5:�aSn[TRRUS-US-S-5$XU4$)Nr9r)�_frame_paletter;rP�tuple)�colorr4s �r(�_rgb� GifImageFile._seek.<locals>._rgbYsh����"�"��1�9�q�=�3�t�':�':�'B�'B�#C�C��E��T�0�0�8�8����U�Q�Y�QR�]�S�T�T��e�,�,r'�rIr�)rrH�gif)rurz)r��int�returnztuple[int, int, int])4�_GifImageFile__offset�disposerhrQr^rS�disposal_methodrK�tile�load�
ValueErrorr2r6r3r]rLrRr;�size�maxrMr
�_decompression_bomb_checkr>rrN�im�paste�dispose_extentrOr��_frame_transparency�LOADING_STRATEGYrr%�_moderPr��moder$�putpalettealpha�convert�Dither�FLOYDSTEINBERG�get�core�fillri�_crop�AttributeErrorr�_Tile)r4rj�update_imagerVr5rPrK�frame_transparency�	interlace�frame_dispose_extent�blockrW�dispose_bitsrq�x0�y0�x1�y1rXr<r�r��dispose_size�dispose_moder�r��ks`                          r(rU�GifImageFile._seek�s����A�:��D�M�8<�D�L��D�L��H�H�M�M�$�-�-�(�#$�D� ��D�I�I�%��I�I�i�(���y�y�\��	�	���D�L�L�1�$�$�)�%��1�C��S�/�!��(�(����=�=��G�G�L�L����'��)�)�+�+���)�)�+�+��D�M��G�G�L�L��O���A��I�.�C��3�-��EI��!��!���	�#�����G�G�L�L��O����T�	���d���G�G�L�L��O���	�	����Q�4�3�;�5�#4�"�!�H�E��q�y�-2�1�X�*�'*�5�!�}�r�'9�D��$�$.��#5�L�#/�1�#4�L�#�
0<��,���q�T�S�[�"�G� ��(�� $�	�	��� �%�!�D�(��Y��5�7�?�:��*1�Y���A���q�T�S�[�U�a�Z�E�4E�).�t�w�w�|�|�~�(=�D��%��S�b�z�^�3� $�	�	��� �S��Z�1�_��q��Q��03�E�1�
�D�I�I�f�-��i�i�k�k���i�i�k�k���d���G�G�L�L��O���Q���C��1�I�B��c�!�Q�i���c�!�Q�i��B������1��%��d�i�i��l�):��!$�R����1��!6��B��	�	�!��8M�!M�D�J��3�3�D�J�J�?�')�r�2�~�$��!���"�R�Z�A�-�	��3�;�!�A�I��?�D������Q�$�Y�/�A��.�.�q�1�1�".�"2�"2�5�!�"<��"'���w�w�|�|�A��q�)�� $�������
���A�s�v��0�C��3�-���������	��<�<��G�G�M�M�$�,�,��(;�(;�<�)0�)<�g�$�BU�BU���#5�� ��A�:��"�"�#��'A�'A�A�+=�+I��u�D�J�!$�D�J� ��
��&����$�$�%�#�D�$7�$7�8���#����y�y�C��$��(X�(X�X��%����2����/�/��	�	�.�0I�1�M�"&�'�'�/�/�&�%�,�,�:U�:U�"V���%+��
� �I�I�n�5�%*��
�"&�'�'�/�/�%����9T�9T�"U���	-����2�������4�#7�#7�1�#<�*
��'�'�1�,�&*�%8�%8�N�B�B��$&��G�R�"�W�#5�L��3�3�L�A�$'�L� �I�I�M�M�.�:L�M�E��(��9�9��7�+1�L�$(��K�$�$6�E�� $�	�	�
�
�l�A� >���9�9��7�+0�L�$(��K�E�#(�:�:�?�?�<��u�#U�D�L��x�x�+�'+�z�z�$�'�'�4�;N�;N�'O���+�7�)-�)<�)<����B�(*�R���b��'9���7�7��E�'*�� 2���9�9��7�+1�L�$(�);�$<�t�$C�E�',�z�z���(�,��(���� ��L�!�-��A�:�'�?�+E�+E�E�4F��	�	�.�1���Y�Y�o�5�#5�L�������R��$��M�M��9�l�3�	��D�I��8�8�I���#'�	�?�D�I�I�i� �*�A��D�y�#�A�w��	�	�!���d�i�i���I�I�a�L�	+��-"�
��
�s �0Ce"�8e"�A:e"�"
e/�.e/c�p>�UR(aSOSnSUlURS:XaGURb9[R
R
XRUR5UlO�URS;a�URUlUR(ay[R
R
SURUR=(d S5UlURR"S/URR5Q76 OSUlUR(d�URb�URURR:wa�[R
R
URRUR5nUR(a+UR"S/URR5Q76 URURSURR-5 X lXlSUl[TU]A5 g)Nr�r�rr�rI�rr)r��_prev_imrhr�r
r�r�r�r�r��
putpalette�getdatarir�r��super�load_prepare)r4�	temp_mode�expanded_im�	__class__s   �r(r��GifImageFile.load_prepare�sx����.�.�C�C�	���
��<�<�1���'�'�3��*�*�/�/��y�y�$�*B�*B������Y�Y�/�
)� �G�G�D�M��"�"��*�*�/�/�#�t�y�y�$�:R�:R�:W�VW�X������"�"�5�I�4�+>�+>�+F�+F�+H�I�����}�}����!5�$�)�)�t�w�w�|�|�:S��*�*�/�/�$�'�'�,�,��	�	�B�K��"�"��&�&�u�M�t�/B�/B�/J�/J�/L�M����d�g�g�v������'<�=�!�G��
�"���
���r'c���URS:Xa�URS:Xa�[[R:Xa�UR
b.URRUR
S5 SUlOSUlURRUR[RR5UlgUR(dgURURR:wa�UR
b+[RR!SUR5nOf[RR!SUR5nUR#SSURR%55 URS5nUR'URSURR-5 Xl
URceUR
bBURRUR
S5 URRS5nOURRS5nUR(ceUR+X R(5nURUlURRUlURS:Xa'URR'X R(U5 gURR'X R(5 g)Nrr�r�rIr�)rhr�r�rr%r�r�r�r�r�r
r�r�r�r�r�r�r��
getpaletter�r�r�)r4r��frame_ims   r(�load_end�GifImageFile.load_end�s
���<�<�1���y�y�C��$4��8R�8R�$R��+�+�7��G�G�+�+�D�,D�,D�a�H�!'�D�J�!&�D�J��'�'�/�/�$�)�)�U�\�\�5P�5P�Q�����}�}���9�9��
�
�*�*�*��'�'�3�#�j�j�o�o�f�d�i�i�@��#�j�j�o�o�c�4�9�9�=���&�&�u�e�T�W�W�5G�5G�5I�J�)�1�1�%�8�����d�m�m�V�d�m�m�6H�6H�-H�I�'�M��=�=�,�,�,��#�#�/��G�G�#�#�D�$<�$<�a�@��w�w���v�.�H��w�w���u�-�H��"�"�.�.�.��:�:�h�(;�(;�<���-�-����W�W�\�\��
��=�=�F�"��G�G�M�M�(�$7�$7��B��G�G�M�M�(�$7�$7�8r'c��UR$�N)rh)r4s r(rR�GifImageFile.tell�s���|�|�r')�__frame�__offset�__rewindrQr�r�rir�rTr�rMr�r�r�r2rOr�rPr�)r�zbytes | None)r<�bytesr��bool)r��None)r�r�)r�r�)rjr�r�r�)T)rjr�r�r�r�r�)rrr r!�format�format_description�!_close_exclusive_fp_after_loadingrOr6r>rY�propertyr`rrcr^rUr�r�rRr&�
__classcell__)r�s@r(r.r.Nsq���
�F�)��(-�%��N����4�	��	�����"+� ~!�@�6%9�N�r'r.r�r�)�1r�r�c��UR[;aUR5 U$[R"UR5S:Xa�URS[RRS9nURceURRS:XaOURRH5nUSS:XdMURRUURS' U$ U$URS5$)	z�
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
rIr��rPr�r9rr�r�)r��RAWMODEr�r
�getmodebaser��Palette�ADAPTIVErP�colorsrK)r��rgbas  r(�_normalize_moder��s���
�w�w�'��
���	��	�������!�U�*�
�Z�Z��U�]�]�%;�%;�Z�
<���z�z�%�%�%�
�:�:�?�?�f�$��
�
�)�)����7�a�<�.0�j�j�.?�.?��.E�B�G�G�N�+���	�	*��	�
�:�:�c�?�r'c��SnU(ab[U[[[45(a[USS5n[U[R5(a[UR
5nURS:Xa)U(d!URS5nUce[U5nO<U(d[S[S555n[R"SUS9UlUceU(a�/nUR
ce[S[U5S5HPn[X6US-5nUR
RRU5nX�;aSnURU5 MR [U5H1uphUbM
[[U55Hn	X�;dM
X�U' M/ M3 /n
UHnUceU
RU5 M URU
5nOA[!X5nUb3URX�5nS	U;aUR#US	5US	'U$U$UR
ceX0R
lU$![$a US		U$f=f)
aP
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
Nir�c3�*# �UH	oS-v� M g7f)r9Nr)�.0r=s  r(�	<genexpr>�%_normalize_palette.<locals>.<genexpr>0s���&B�z�!�A�v�z�s�rIr�rr9r�)�
isinstancer��	bytearray�listrrPr�r�r:r;r�r�r��append�	enumerate�
remap_palette�
_get_optimize�indexr�)r�rPrK�source_palette�
im_palette�used_palette_colorsr=�source_colorr��j�dest_map�optimized_palette_colorss            r(�_normalize_paletter�s@���N���g��y�$�7�8�8�&�w�t��}�5�N��g�|�8�8�9�9�&�w���7�N�	�w�w�#�~�����t�,�J��)�)�)�&�z�2�N���&�&B�u�S�z�&B�B�N�!�.�.�u�n�M��
��%�%�%��02���z�z�%�%�%��q�#�n�-�q�1�A� ��A��E�!:�;�L��J�J�%�%�)�)�,�7�E��+����&�&�u�-�2�"�"5�6�H�A��}��s�#6�7�8�A��3�12�A�.��9�7�!��(�E��$�$�$��O�O�E�"�)��
�
�h�
'��#0��#:� �#�/��!�!�":�K�B���%�-�+C�+I�+I��^�,�,�D��(�
�I�2�I�
�:�:�!�!�!�'�J�J��
�I��
"�-��^�,��I�-�s�H=�=
I�
Ic�r�[U5nURR5H7upE[U[5(dMUR
R
XE5 M9 [X2UR
5n[X0R
5HnURU5 M Sn[U5(aUS-n[XSU5 S[U54Ul[R"X1[R"SSUR -S["UR$5/5 URS5 g)Nrr�r�rCr��)r�rK�itemsr��str�encoderinfo�
setdefaultr��_get_global_header�write�
get_interlace�_write_local_header�
encoderconfigr�_saver�r�r�r�)r�r2rP�im_outr��vr5rWs        r(�_write_single_framerZs���
�R�
 �F����!�!�#����a�����N�N�%�%�a�+�$� �����
@�F�
����
7��
�����8�
�E��R�����
������.��}�R�0�1�F��
�O�O��Y�_�_�U�F�R�W�W�,<�a�����AU�V�W���H�H�U�Or'c�8�X4Vs/sH4o"R(a[URR5OSPM6 nnUSUS:wa"URS5nURS5n[R"X5nXDRSS94$s snf)Nr'rrr�F)�
alpha_only)rPr�r�r�subtract_modulo�getbbox)�base_im�im_framer��
palette_bytes�deltas     r(�_getbboxrvs���EL�CV��CV�R�Z�Z��b�j�j� � �!�S�8�CV����Q��=��+�+��#�#�F�+���/�/�&�)���&�&�x�9�E��-�-�5�-�1�1�1��s�;Bc�4�\rSrSr%S\S'S\S'S\S'Srg	)
�_Framei��Image.Imager�z tuple[int, int, int, int] | None�bbox�dict[str, Any]r�rN)rrr r!�__annotations__r&rr'r(rr�s���O�
*�*��r'rc
�^�URRS5nURRSURRS55n/nSnSnSn[R"U/URRS/55GH n	[
R"U	5GHn
[U
R55n
US:Xa]U
RR5H?up�US:XaM
[U[5(dM$URRX�5 MA URR5n
SU
R;aU
RSU
RS5 [X�U
5n
[U[[45(aX7U
S'O%Uc"SU
R;aU
RSU
S'[U[[45(aXGU
S'US-
nSnU(Ga�U(Ga�[!Xj5unnU(d6U
RS5(aUSRS==U
S-
ss'GM�USRRS5S:Xa�Uc�URRSURRSS	55n[#U
U5n[$R&"S
U
R(U5nUSR*R,nUceUR/UUR05 [!X�5SnGOfU
RS5(GaLU
R0S:wGa;SU
;a.U
R,ceU
R,R3U
5U
S'SU
;GaU
R5n[$R&"S
UR(U
S5nUR0S
:Xa/UR75unnnn[8R:"SUUUUS9nOhUR0S
:XaB[$R&"SUR(5nUR=UR?55 Un[8R:"SUS9nURAU[BRD"U5S9 OSnU
nURG[IU=(d U
UU
55 GM GM# [KU5S:Xa0SUR;aUSRSURS'gUH�nUR*n
URL(d1[OU
UR5HnURQU5 M SnO@U(dSURS'U
RSURL5n
URLSSn[UXUUR5 M� g![4a GN6f=f)Nru�disposalr�
append_imagesr�rrpr)rrrr��optimizer�r�c�t�US"US"US"US"USUS5US5US5S-S5$)	Nr�r��r�g�b�aryr�r��argss r(�<lambda>�(_write_multiple_frames.<locals>.<lambda>�sZ��T�)�_�$(��K�(,�U��,0��K��S�	�4��9�,M�t�TW�y�)*�)-�S�	�	%&�'*�
%*�%(�	."r')rrrrr�c�&�US"USS-S5$)Nr�r�ryr�rrs r(rr�s��T�)�_�T�$�Z�#�=M�s�-Sr')r�)�maskFr�T�include_color_table)+r�r�rK�	itertools�chainr�Iteratorr�r�r�r�r�r�r�r�r�r�_get_backgroundr
�newr�r�rPr�r��_new_color_indexr��splitr�lambda_eval�putdatar�r�r�invertr�rr;rr�r��crop�_write_frame_data)r�r2rPrur�	im_frames�previous_im�frame_count�
background_im�
imSequencer	r�rr��
diff_framerrr�rH�
first_paletter�rrrrr!�delta_l�
frame_datar5�offsets                              r(�_write_multiple_framesr9�s����~�~�!�!�*�-�H��~�~�!�!�*�b�g�g�k�k�*�.E�F�H� �I�&*�K��K��M��o�o�r�d�B�N�N�,>�,>��PR�,S�T�
�%�.�.�z�:�H�&�x�}�}��7�H��a��$�M�M�/�/�1�D�A��N�*� �!�!�S�)�)����1�1�!�7�	2��.�.�-�-�/�K�����.��&�&�~�x�}�}�^�7T�U�)�(�[�I�H��(�T�5�M�2�2�*2�*?��J�'��!�j�H�M�M�&A�*2�-�-�
�*C��J�'��(�T�5�M�2�2�*2�*?��J�'��1��K��J��[�&�{�=���t��"���z�2�2�!�"�
�1�1�*�=��Z�AX�X�=���R�=�,�,�0�0��<��A�$�,� "��� 2� 2�*�B�G�G�K�K��	�,R�!��&5�X�u�%E�
�(-�	�	�#�x�}�}�j�(Q�
�(1�!����(?�(?�
�,�8�8�8�%�0�0��
�@R�@R�S�#�M�<�Q�?�D� �_�_�Z�0�0�X�]�]�c�5I�%�[�8�'�/�/�;�;�;�!� (� 0� 0� A� A�(� K�(��7�
&��4�%-�]�]�_�
�$�y�y��e�j�j�+�n�:U�V�� �:�:��/�).����J�A�q�!�Q�#,�#8�#8�	!"�#$�"#�"#�"#�$�D�" %�z�z�S�0�*/�)�)�C����*D�� '����
�
�� @�(/��#,�#8�#8� S�#(�$�D�#�(�(��H�O�O�D�4I�(�J����"�K����V�J�$:�(�D�+�N�O�o;�U�t�9�~�������'�)2�1��)A�)A�*�)M�B�N�N�:�&���
��=�=�����'��*�2H�2H�I�������J��F��@D�
�&�&�'<�=��}�}�Z�_�_�5�H��_�_�R�a�(�F��"��
�0F�0F�G� ���{ *�!� �!�s�V�
V,�+V,c��[XUSS9 g)NT)�save_all)r)r�r2�filenames   r(�	_save_allr=s��	�"�(�T�*r'Fc��SUR;dSUR;a6URRSURRS55nOSnURRSS5 U(a[	XU5(d[XU5 UR
S5 [US5(aUR5 gg)NrPrTrr�flush)	r�rKr�r�r9rr��hasattrr?)r�r2r<r;rPs     r(rr	s����B�N�N�"�i�2�7�7�&:��.�.�$�$�Y������I�0F�G����
���!�!�*�d�3��1�"�'�B�B��B�G�,��H�H�T�N��r�7���
���
�r'c�t�URRSS5n[UR5S:aSnU$)Nr�r�r)r�r��minr�)r�r�s  r(r�r�s5�����"�"�;��2�I��2�7�7�|�b���	��r'c���URSnSUR;a[URSS-5nOSn[URRSS55nUc
US:wdU(apUbSOSnXvS--nUR	S[S	5-[S
5-[U5-[
U5-[U=(d S5-[S5-5 URRS5nU(a&[U5n	[U	5n
U
(a	US-nX:-nUR	S
[
US5-[
US5-[
URS5-[
URS5-[U5-5 U(a!W
(aUR	[W	55 UR	[S55 g![a SnGN�f=f)Nr�rurDrrrrrsrtrr"rFr}rC)r��KeyErrorr�r�r�r�o16�_get_palette_bytes�_get_color_table_sizer��_get_header_palette)r2r�r8rWr�rur�packed_flagr"r
�color_table_sizes           r(r�r�&s�����~�~�n�5���R�^�^�#��r�~�~�j�1�B�6�7�����2�>�>�%�%�j�!�4�5�H���8�q�=�H�'�3�a����1�}�$��
������g�
���e�
���o�
��(�m�	
�
��"��#�
$���e�

�	
��.�.�,�,�-B�C���*�2�.�
�0��?����C�K�E��,�E��H�H��

�f�Q�i�.�	�

�f�Q�i�.�	��b�g�g�a�j�/�	��b�g�g�a�j�/�		�

�U�)�	���/�
���$�]�3�4��H�H�R��U�O��U�����s�G�G,�+G,c�^�UR5n[US5nURS:wa'[R"SU/U[R
S9 O�SSU/nS/n[R"U[R[R
S9n[R"UURU[R
S9nURceURR5 UR5n	U	(a[R"X�5eUR5n	U	(a[R"X�5eSSS5 [R"U5 g!,(df   N&=f![a gf=f![R"U5 f![a ff=f=f)N�wbrI�ppmtogif)�stdout�stderr�ppmquant�256)�stdinrOrP)�_dump�openr��
subprocess�
check_call�DEVNULL�Popen�PIPErO�close�wait�CalledProcessError�os�unlink�OSError)
r�r2r<�tempfilerl�	quant_cmd�	togif_cmd�
quant_proc�
togif_proc�retcodes
          r(�_save_netpbmrgXsj���x�x�z�H�$�
�(�D�
!�Q��w�w�%���%�%���*�1�Z�=O�=O��(���9�	�'�L�	�'�-�-��j�o�o�j�>P�>P��
�(�-�-��$�+�+��%�-�-�	�
�"�(�(�4�4�4��!�!�'�'�)�$�/�/�+���$�7�7��K�K�$�/�/�+���$�7�7��K�K�="�@	��I�I�h��C"�
!��D�	��	��	��I�I�h����	��	�sY�F�D$E"�F�E3�"
E0�,F�3
F�?F�F,�F�F,�
F)�&F,�(F)�)F,c��URS;GaGU(Ga?URS5(Ga([=(d URS:HnU(dURUR-S:a�/n[UR
55HupEU(dMURU5 M! U(d[U5[U5:�aU$URce[URR5[R"URR5-nSUS-
R5-n[U5US-::aUS:�aU$g)a0
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�rr�iNrr)r�r��_FORCE_OPTIMIZE�width�heightr��	histogramr�r�r;rPr
�getmodebands�
bit_length)r�rK�optimiser�r=�count�num_palette_colors�current_palette_sizes        r(r�r��s��
�w�w�*���$�(�(�:�*>�*>�#�4�b�g�g��n���r�x�x�"�)�)�+�i�7�"$��%�b�l�l�n�5����5�'�.�.�q�1�6��3�2�3�s�;N�7O�O�*�*��:�:�)�)�)�!$�R�Z�Z�%7�%7�!8�E�<N�<N��
�
���=�"��$%�);�a�)?�(K�(K�(M�#M� ��'�(�,@�A�,E�E�(�1�,�*�*�r'c��U(dg[U5S:ag[R"[R"[U5S-S55S-
$)Nrr~rr9r)r;�math�ceil�log)r
s r(rHrH�sA����	�]�	�a�	���y�y����#�m�"4��"9�1�=�>��B�Br'c�x�[U5nSU-[U5S--
nUS:�aU[S5S-U--
nU$)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
rr9r)rHr;r)r
rK�actual_target_size_diffs   r(rIrI�sR��-�]�;�� !�$4�4��M�8J�a�8O�O����"���A����%<�<�<�
��r'c�^�UR(dg[URR5mURRS:Xa0SRU4Sj[	[T5S-555mT$)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�c3�@># �UHnTUS-US-S-v� M g7f)rr9Nr)r�r=rPs  �r(r��%_get_palette_bytes.<locals>.<genexpr>�s&����X�?W�!�7�1�q�5�1�q�5�1�9�5�?W�s�r9)rPr�r��joinr:r;)r�rPs @r(rGrG�s[����:�:���B�J�J�&�&�'�G�	�z�z���&� ��(�(�X�u�S��\�UV�EV�?W�X�X���Nr'c���SnU(aD[U[5(a-URceURRX5nU$UnU$![an[U5S;aeSnAU$SnAff=f)Nr)z$cannot allocate more than 256 colorsz/cannot add non-opaque RGBA color to RGB palette)r�r�rP�getcolorr�r�)r��info_backgroundrHrms    r(r&r&�s����J���o�u�-�-��:�:�)�)�)�

��Z�Z�0�0��E�
���)�J�����
��q�6�"�������
�s�A�
A5�A0�0A5c�D�SnURRS5S:XdKU(aFSU;d>URS5c,URS5(dURS5(aSn[XRS55n[U5n[	U5nS	U-[URS
5-[URS5-[US-5[U5[S
5-[U5/nURS5b_URS
[S5-[S5-S-[S5-[S5-[US5-[S
5-5 URS5(a�S
[S5-nUSn[U[5(aUR5n[S
[U5S5H$n	X�U	S-n
U[[U
55U
--
nM& U[S
5-
nURU5 U$)z2Return a list of strings representing a GIF headers87arBs89ar�r|rurqrHsGIFrrrFrsryrGr{r9rw)rKr�r&rGrHrFr�rrIr�r�r��encoder:r;)r�rKrBrHr
rK�header�
comment_blockrqr=�subblocks           r(r�r�s���G�	�w�w�{�{�9���'���d�"��x�x���+��x�x�
�#�#��x�x�	�"�"��� ��X�X�l�%;�<�J�&�r�*�M�,�]�;��	�
�	�

�b�g�g�a�j�/�	��b�g�g�a�j�/�	�	��c�!�"�
�:���A����M�*��F��x�x���#��
�
����g�
���f�
��
���e�	
�
��e�
��$�v�,��

 ���e�
�		
��x�x�	����r�#�w��
��y�/���g�s�#�#��n�n�&�G��q�#�g�,��,�A��1�s�7�+�H��R��H�
�.��9�9�M�-�	��A���
��
�
�m�$��Mr'c��X1l[XUS5 [R"UU[R"SSUR
-S[UR5/5 URS5 U?g!U?f=f)Nrr�r�r�)	r�r�rrr�r�r�r�r�)r2r	r8�paramss    r(r.r.Bsn��!�%��	�B�&�!�4������
�_�_�U�F�X�]�]�$:�A�w�x�}�}�?U�
V�W�	
�	������ ��H� �s�A2A7�7A;c���Uc0n[X5nSU;a"SUR;aURSUS'[XU5nURUlURUl[X5nXS4$)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)

rH)r�rKr�rPr�r�)r�rPrKr��im_modr�s      r(�	getheaderr�]st���|���'��1���4��L�B�G�G�$;��W�W�\�2��\��
��T�
2�F����B�J��I�I�B�E�
��
)�F��&�&r'c��SSKJn "SSU5nUR5 U"5n[XPX5 UR$)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�"�\rSrSr/rSSjrSrg)�getdata.<locals>.Collectori�c�N�URRU5 [U5$r�)r6r�r;)r4r6s  r(r�� getdata.<locals>.Collector.write�s���I�I���T�"��t�9�r'rN)r6rr�r�)rrr r!r6r�r&rr'r(�	Collectorr��s����	r'r�)�ior�r�r.r6)r�r8r�r�r�r2s      r(r�r�{s8��&��G���G�G�I�	��B��b�f�-�
�7�7�Nr'z.gifz	image/gif)r+r�r�r�)r�rr�r)r�rrP�_Palette | NonerKrr�r)r�rr2�	IO[bytes]rPr�r�r�)rrr	rr�z4tuple[Image.Image, tuple[int, int, int, int] | None])r�rr2r�rPr�r�r�)r�rr2r�r<�str | bytesr�r�)F)
r�rr2r�r<r�r;r�r�r�)r�rr�r�)
r2r�r�rr8�tuple[int, int]rWr�r�r�)r�rrKrr�zlist[int] | None)r
r�r�r�)r
r�r�r�)r�rr�r�)r�rrz=int | tuple[int, int, int] | tuple[int, int, int, int] | Noner�r�)r�rrKrr��list[bytes])
r2r�r	rr8r�r�rr�r�)NN)r�rrPr�rKzdict[str, Any] | Noner�z$tuple[list[bytes], list[int] | None])r�)r�rr8r�r�rr�r�)H�
__future__rr#rtr^rV�enumr�	functoolsr�typingrrrr	r
r�r
rrrrrr�_binaryrrLrrrFr�_typingrrr#r�r,r.r�r�r�r�r�r��_Paletter�rrrr9r=rr�r�rgrir�rHrIrGr&r�r.r�r��
register_openr��
register_save�register_save_all�register_extension�
register_mimerr'r(�<module>r�s��4#���	���%�E�E����"��!�����g��#�2�2��0�^�9�&�&�^�J
�#�C�
(���4��	�4��9�l�.G�.G�G�H��D��D�-�D�5C�D��D�N�������
�	�8
2�
�
2�$/�
2�9�
2� �Z� �y��y�"�y�-<�y�	�y�x+�
MR����"��.9��EI��	��&�/��/�"�/�,;�/�DG�/�	�/�d-�d��-�`C��$
� ���R��	��6;�|!��!��!�
�!�
�	!�

�!�8UY�'��'�-�'�<Q�'�)�'�>06�"��"�,�"�AD�"��"�P���L�'�'��w�?����L�'�'��/�����+�+�Y�7�����,�,�f�5����L�'�'��5r'

Filemanager

Name Type Size Permission Actions
BdfFontFile.cpython-313.pyc File 4.28 KB 0644
BlpImagePlugin.cpython-313.pyc File 23.93 KB 0644
BmpImagePlugin.cpython-313.pyc File 17.97 KB 0644
BufrStubImagePlugin.cpython-313.pyc File 2.68 KB 0644
ContainerIO.cpython-313.pyc File 6.72 KB 0644
CurImagePlugin.cpython-313.pyc File 2.37 KB 0644
DcxImagePlugin.cpython-313.pyc File 2.73 KB 0644
DdsImagePlugin.cpython-313.pyc File 22.58 KB 0644
EpsImagePlugin.cpython-313.pyc File 15.76 KB 0644
ExifTags.cpython-313.pyc File 11.43 KB 0644
FitsImagePlugin.cpython-313.pyc File 6.06 KB 0644
FliImagePlugin.cpython-313.pyc File 6.76 KB 0644
FontFile.cpython-313.pyc File 4.45 KB 0644
FpxImagePlugin.cpython-313.pyc File 7.66 KB 0644
FtexImagePlugin.cpython-313.pyc File 5.25 KB 0644
GbrImagePlugin.cpython-313.pyc File 3.68 KB 0644
GdImageFile.cpython-313.pyc File 3.35 KB 0644
GifImagePlugin.cpython-313.pyc File 44.88 KB 0644
GimpGradientFile.cpython-313.pyc File 5.35 KB 0644
GimpPaletteFile.cpython-313.pyc File 2.12 KB 0644
GribStubImagePlugin.cpython-313.pyc File 2.68 KB 0644
Hdf5StubImagePlugin.cpython-313.pyc File 2.65 KB 0644
IcnsImagePlugin.cpython-313.pyc File 17 KB 0644
IcoImagePlugin.cpython-313.pyc File 14.92 KB 0644
ImImagePlugin.cpython-313.pyc File 12.76 KB 0644
Image.cpython-313.pyc File 165.73 KB 0644
ImageChops.cpython-313.pyc File 10.63 KB 0644
ImageCms.cpython-313.pyc File 42.28 KB 0644
ImageColor.cpython-313.pyc File 12.22 KB 0644
ImageDraw.cpython-313.pyc File 43.5 KB 0644
ImageDraw2.cpython-313.pyc File 9.43 KB 0644
ImageEnhance.cpython-313.pyc File 5.28 KB 0644
ImageFile.cpython-313.pyc File 30.8 KB 0644
ImageFilter.cpython-313.pyc File 22.79 KB 0644
ImageFont.cpython-313.pyc File 65.84 KB 0644
ImageGrab.cpython-313.pyc File 6.56 KB 0644
ImageMath.cpython-313.pyc File 15.95 KB 0644
ImageMode.cpython-313.pyc File 2.75 KB 0644
ImageMorph.cpython-313.pyc File 11.03 KB 0644
ImageOps.cpython-313.pyc File 28.21 KB 0644
ImagePalette.cpython-313.pyc File 12.04 KB 0644
ImagePath.cpython-313.pyc File 306 B 0644
ImageQt.cpython-313.pyc File 8.46 KB 0644
ImageSequence.cpython-313.pyc File 3.33 KB 0644
ImageShow.cpython-313.pyc File 13.72 KB 0644
ImageStat.cpython-313.pyc File 7.13 KB 0644
ImageTransform.cpython-313.pyc File 5.19 KB 0644
ImageWin.cpython-313.pyc File 11.44 KB 0644
ImtImagePlugin.cpython-313.pyc File 2.55 KB 0644
IptcImagePlugin.cpython-313.pyc File 8.91 KB 0644
Jpeg2KImagePlugin.cpython-313.pyc File 18.34 KB 0644
JpegImagePlugin.cpython-313.pyc File 33.72 KB 0644
JpegPresets.cpython-313.pyc File 7.9 KB 0644
McIdasImagePlugin.cpython-313.pyc File 2.23 KB 0644
MicImagePlugin.cpython-313.pyc File 3.85 KB 0644
MpegImagePlugin.cpython-313.pyc File 3.68 KB 0644
MpoImagePlugin.cpython-313.pyc File 8.04 KB 0644
MspImagePlugin.cpython-313.pyc File 5.87 KB 0644
PSDraw.cpython-313.pyc File 7.67 KB 0644
PaletteFile.cpython-313.pyc File 1.9 KB 0644
PalmImagePlugin.cpython-313.pyc File 9.46 KB 0644
PcdImagePlugin.cpython-313.pyc File 2.05 KB 0644
PcfFontFile.cpython-313.pyc File 9.68 KB 0644
PcxImagePlugin.cpython-313.pyc File 7.27 KB 0644
PdfImagePlugin.cpython-313.pyc File 9.64 KB 0644
PdfParser.cpython-313.pyc File 52.78 KB 0644
PixarImagePlugin.cpython-313.pyc File 1.94 KB 0644
PngImagePlugin.cpython-313.pyc File 61.98 KB 0644
PpmImagePlugin.cpython-313.pyc File 14.13 KB 0644
PsdImagePlugin.cpython-313.pyc File 10.81 KB 0644
QoiImagePlugin.cpython-313.pyc File 6.02 KB 0644
SgiImagePlugin.cpython-313.pyc File 8.37 KB 0644
SpiderImagePlugin.cpython-313.pyc File 12.27 KB 0644
SunImagePlugin.cpython-313.pyc File 3.42 KB 0644
TarIO.cpython-313.pyc File 1.86 KB 0644
TgaImagePlugin.cpython-313.pyc File 8.11 KB 0644
TiffImagePlugin.cpython-313.pyc File 99.07 KB 0644
TiffTags.cpython-313.pyc File 18.43 KB 0644
WalImageFile.cpython-313.pyc File 4.01 KB 0644
WebPImagePlugin.cpython-313.pyc File 13.27 KB 0644
WmfImagePlugin.cpython-313.pyc File 6.19 KB 0644
XVThumbImagePlugin.cpython-313.pyc File 2.61 KB 0644
XbmImagePlugin.cpython-313.pyc File 4.05 KB 0644
XpmImagePlugin.cpython-313.pyc File 4.2 KB 0644
__init__.cpython-313.pyc File 1.98 KB 0644
__main__.cpython-313.pyc File 346 B 0644
_binary.cpython-313.pyc File 3.24 KB 0644
_deprecate.cpython-313.pyc File 2.37 KB 0644
_tkinter_finder.cpython-313.pyc File 745 B 0644
_typing.cpython-313.pyc File 2.14 KB 0644
_util.cpython-313.pyc File 1.5 KB 0644
_version.cpython-313.pyc File 222 B 0644
features.cpython-313.pyc File 13.58 KB 0644
report.cpython-313.pyc File 278 B 0644
Filemanager