
    th                     .   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mZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ  G d d	e          Zej        Zd
 Z G d de	j	                  ZddddZd Zd Zd Zd Zd Zd Zd'dZd Zd Z d Z!dZ"d Z#d Z$d Z%d Z&d Z'd  Z(d! Z)d(d"Z*d)d$Z+ ej,        ej-        ee            ej.        ej-        e            ej/        ej-        e            ej0        ej-        d%            ej1        ej-        d&           dS )*    N)IntEnum   )Image
ImageChops	ImageFileImagePaletteImageSequence)i16le)o8)o16lec                       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     f/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.11/site-packages/PIL/GifImagePlugin.pyr   r   '   s$        !!O'($JJJr   r   c                     | d d         dv S )N   )s   GIF87as   GIF89ar   )prefixs    r   _acceptr   6   s    "1":///r   c                        e Zd ZdZdZdZdZd Zd Zd Z	e
d             Ze
d	             Zd
 ZddZ fdZd Zd Z xZS )GifImageFileGIFzCompuserve GIFFNc                     | j                             d          }|r(|d         r | j                             |d                   S d S )Nr   r   )fpread)selfss     r   datazGifImageFile.dataF   sC    GLLOO 	&1 	&7<<!%%%tr   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)r$   pis      r   _is_palette_neededzGifImageFile._is_palette_neededL   sy    q#a&&!$$ 	 	AFad::::aAh::::!AE(::::tt ;ur   c                    | j                             d          }t          |          sd}t          |          |d d         | j        d<   t          |d          t          |d          f| _        g | _        |d         }|dz  dz   }|d	z  re|d
         | j        d<   | j                             d|z            }|                     |          r#t          j
        d|          }|x| _        | _        | j         | _        | j                                         | _        d | _        d | _        |                     d           d S )N   znot a GIF filer   version   
      r         
backgroundr(   RGBr   )r"   r#   r   SyntaxErrorinfoi16_sizetiler-   r   rawglobal_palettepalette_fptell_GifImageFile__rewind	_n_frames_is_animated_seek)r$   r%   msgflagsbitsr+   s         r   _openzGifImageFile._openR   s)   GLLqzz 	#"Cc""" !u	)AYYAq		)
	"	Q3; 	7&'eDIl#Q$Y''A&&q)) 7 $UA..566#dl7 

1r   c                 $   | j         |                                 }	 	 |                     |                                 dz   d           ,# t          $ r |                                 dz   | _         Y nw xY w|                     |           | j         S )NTr   F)rC   rA   rE   EOFErrorseekr$   currents     r   n_frameszGifImageFile.n_framesn   s    >!iikkG17JJtyy{{Q6667 1 1 1!%q1IIg~s   -A
 
&A32A3c                     | j         | j        | j        dk    | _         ni|                                 }|rd| _         nK	 |                     dd           d| _         n# t          $ r
 d| _         Y nw xY w|                     |           | j         S )Nr   TF)rD   rC   rA   rE   rK   rL   rM   s     r   is_animatedzGifImageFile.is_animatedz   s    $~)$(Na$7!!))++ 	'(,D%%2

1e,,,,0))# 2 2 2,1)))2 IIg&&&  s   A A10A1c                 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   zno more images in GIF file)_seek_check_GifImageFile__frameimrE   r)   rK   rL   )r$   frame
last_frameferF   s         r   rL   zGifImageFile.seek   s    && 	F4<DGJJqMMM\
t|a'33 	+ 	+A+

1 + + +		*%%%2smm*+	+ 	+s   $A::
B0'B++B0Tc                 H    |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t          d }i }d }d }d }		 |s j                            d          }|r|dk    rn|dk    rx j                            d          }                                 }
|d         d	k    r?|
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    rw|
 j                                        f|d<   |
d d         dk    rK                                 }
t#          |
          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 }6|t          | _        |sd S g  _         j        r% j                             j         j                   ||n j         _        | _        |dk    r^ j        r)t@          tB          j"        k    r|d!nd _#        nd" _#        nd# _#        |s j        rdd$l$m$}  | j                  }| _%        n͉ j#        d"k    rt@          tB          j&        k    s|rd  _'        d% j        v re j        (                     j        d%         d            j        )                    d!t*          j*        j+                   _        d! _#         j        d%= n6d _#         j        )                    dt*          j*        j+                   _         fd&}|	 _        	  j        dk     r	d  _        nb 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        & /                     j         j                   _        no|m j        \  }}}}||z
  ||z
  f}t+          j        |           d"}|} j#        d'v rd!} ||          d(z   }t*          j-        .                    |||           _        n# t`          $ r Y nw xY w|Md}|1|dk    r t@          tB          j"        k    r
| j        d%<   n j#        d'vr|}d*||||f j         |||ffg _        |,                    d          r|d          j        d<   d+D ](}||v r||          j        |<   | j        v r j        |= )d S ),Nr   commentr   zcannot seek to frame    ;T   !   r(   r2   duration   r      r      
   	extensionr5      NETSCAPE2.0loop   ,	      r   r1   @   r4   r3   r7   FRGBAPL)copytransparencyc                 v    j         r+t          j         j        | dz  | dz  dz                      } n| | | f} | S )Nr(   )_frame_palettetupler?   )colorr$   s    r   _rgbz GifImageFile._seek.<locals>._rgbN  sK    " .d19%!)eaiRSm:STUUu-Lr   r7   rl   )r   r6   gif)r`   re   )1_GifImageFile__offsetdisposerT   r@   rL   rB   disposal_methodr9   r<   load
ValueErrorr"   r&   r#   rK   r:   rA   r*   sizemaxr;   r   _decompression_bomb_checkr-   r   r=   rU   pastedispose_extentr>   rr   _frame_transparencyLOADING_STRATEGYr   r   modero   r?   r   pyaccessputpalettealphaconvertDitherFLOYDSTEINBERGgetcorefill_cropAttributeError)r$   rV   update_imagerF   r%   r?   r9   frame_transparency	interlaceframe_dispose_extentblockrG   dispose_bitsr\   x0y0x1y1rH   r+   ro   ru   dispose_sizedispose_modert   rp   ks   `                          r   rE   zGifImageFile._seek   s	   A::DMDLDLHMM$-(((#$D DI%%Ii( y \ 		DL1$$$1%11CS//!(= 	GLL'''))++  ))++ DMGLLOO 	AIIN!	#]	 $GLLOO XT		d GLLOO		Q43;; "!HEqy 6-21X*'*5!}}r'9D$ $.#5L#/1#4L# <
 0<,qTS[[ "G   ,5( $		   , !D((Y57?:*1YAqTS[[UaZZ ).tw||~~(=D%SbSz^33 $		u::??uQx1}}03E1DIf-iikk  iikk  d GLLOO QC1IIBc!Qiic!QiiB1%%dil):):):!$R1!6!6B	!8M8M!MDJ3DJ???')2r2~$!"RZA-	3; (!AI?DQ$Y//A..q11 ("."25!"<"<"' w||Aq) $ A{]	~ N 	F	< 	=GMM$,(;<<<)0)<gg$BU#5 A::"  #'AAA*<*HeDII #DII	 4t2 4%%%%%%$t233"DLLyC$(XXX Y %)DM%22//	.0I1MMM"&'//&%,:U"V"V$*	 In55$)	"&'//%9T"U"U	 	 	 	 	 3+	#a''#%** "&!4BB "Rb1/===  #	n6HII$yO33'- $Ud 2 IMM,::EyO33', $U$z|\5QQ 7&#'::dgt7J#K#KDLL'3%)%8NBB$&GR"W#5L3LAAA#&L.EyO33'- $%7 8 84 ?#(:??<u#U#UDL 	 	 	D	  L!-A::'?+EEE4F	.1Yo55#5L R$M9l3	DI 88I 	3#'	?DIi * 	! 	!ADyy#Aw	!diIaL		! 	!s   <E6]3 3
^ ?^ c                    | j         rdnd}d | _        | j        dk    r8| j        0t          j                            || j        | j                  | _        n|| j	        dv rs| j        | _        | j         rYt          j                            d| j        | j        pd          | _         | j        j
        | j                                           nd | _        || _	        d | _         t                                                       d S )Nrm   rn   r   rv   )rr   _prev_imrT   r   r   r   r   r}   rU   r   
putpalettegetdatasuperload_prepare)r$   	temp_mode	__class__s     r   r   zGifImageFile.load_prepare  s    .7CCC	<1'3*//ty$*B  Y/)) GDM" *//#ty$:R:WVWXX""D$7$?$?$A$ABBB	"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        d           | j                            d          }n| j                            d          }|                     || j                  }| j        | _        | j        j        | _        |j        dk    r#| j                            || j        |           d S | j                            || j                   d S )Nr   rm   rl   r7   )rT   r   r   r   r   r   rU   r   r   r   r   r   r   r   r   r   )r$   frame_ims     r   load_endzGifImageFile.load_end  sS   <1yC$48R$R$R+7G++D,DaHHH &DII %DI'//$)U\5PQQF} 	F#/G##D$<a@@@wv..HHwu--H::h(;<<-GL	=F""GMM(D$7BBBBBGMM(D$788888r   c                     | j         S N)rT   )r$   s    r   rA   zGifImageFile.tell  s
    |r   )T)r   r   r   formatformat_description!_close_exclusive_fp_after_loadingr>   r&   r-   rI   propertyrO   rQ   rL   rE   r   r   rA   __classcell__)r   s   @r   r   r   ?   s        F)(-%N      8 	 	 X	 ! ! X!$+ + + }! }! }! }!~    (9 9 94      r   r   rn   rm   )1rn   rm   c                    | j         t          v r|                                  | S t          j        | j                   dk    ro|                     dt          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
    r7   rm   r?   rl   r(   r   rp   rn   )r   RAWMODEr{   r   getmodebaser   PaletteADAPTIVEr?   colorsr9   )rU   rgbas     r   _normalize_moder     s     
w'
				!!U**ZZU]%;Z<<:?f$$
)  7a<<.0j.?.EBGN+E   	::c??r   c                    d}|rgt          |t          t          t          f          rt          |dd                   }t          |t          j                  rt          |j                  }| j        dk    r%|s"| j                            d          dd         }nC|s&t          d t          d          D                       }t	          j        d|          | _        |rg }t          dt          |          d          D ]V}t          |||dz                      }| j        j                            |          }||v rd}|                    |           Wt          |          D ]1\  }}|*t          t          |                    D ]}||vr|||<    n2|                     |          } n(t#          | |          }||                     ||          S || 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   rm   r7   c              3       K   | ]	}|d z  V  
dS )r(   Nr   ).0r,   s     r   	<genexpr>z%_normalize_palette.<locals>.<genexpr>  s&      &B&B!qAv&B&B&B&B&B&Br   r   r   r(   )
isinstancebytes	bytearraylistr   r?   r   rU   
getpaletter)   r*   rs   r   r   append	enumerateremap_palette_get_optimize)	rU   r?   r9   source_paletteused_palette_colorsr,   source_colorindexjs	            r   _normalize_paletter     s    N 8gy$788 	6&wtt}55Ng|899 	8&w77N	w#~~ 	;U--e44TcT:N 	C&&B&BuSzz&B&B&BBBN!.unMMM
 I q#n--q11 	. 	.A AE	!:;;LJ%)),77E+++&&u----!"566 	 	HAu}s#67788  A 33312+A. 4 122+B55*##$7HHH'BJIr   c           	      *   t          |           }|j                                        D ] \  }}| j                            ||           !t          ||| j                  }t          || j                  D ]}|                    |           d}t          |           r|dz  }t          || d|           dt          |           f|_
        t          j        ||dd| j        z   dt          |j                 fg           |                    d           d S )Nr   rk   r   r   r1   rw       )r   r9   itemsencoderinfo
setdefaultr   _get_global_headerwriteget_interlace_write_local_headerencoderconfigr   _saver}   r   r   )rU   r"   r?   im_outr   vr%   rG   s           r   _write_single_framer   "  s   R  F!!## ( (1
!!!Q''''@@F77  
 ER 
B...}R001FOFB%"')91gfk>R!S TUUUHHUOOOOOr   c                    t          |          t          |           k    rt          j        ||           }n;t          j        |                    d          |                     d                    }|                    d          S )Nrl   F)
alpha_only)_get_palette_bytesr   subtract_modulor   getbbox)base_imim_framedeltas      r   _getbboxr   7  sy    (##'9''B'BBB*8W==*V$$goof&=&=
 
 ==E=***r   c           	         | j                             d          }| j                             d| j                            d                    }g }d}d }t          j        | g| j                             dg                     D ]i}t          j        |          D ]P}	t          |	                                          }	|dk    rA|	j        	                                D ]'\  }
}|
dk    r| j         
                    |
|           (| j                                         }t          |	||          }	d|	j        v r!|
                    d|	j        d                    t          |t          t          f          r||         |d<   n|d|	j        v r|	j        d         |d<   t          |t          t          f          r||         |d<   |dz  }|r|d         }t          |d         |	          }|s3|                    d          r|d	         dxx         |d         z  cc<   |                    d          d
k    r|| j                             d| j                            dd                    }t!          |	|          }t#          j        d|	j        |          }|                    |d         d         j                   t          ||	          }nd }|                    |	||d           Rkt/          |          dk    r|D ]}|d         }	|d         s1t1          |	|d	                   D ]}|                    |           d}n8|sd|d	         d<   |	                    |d                   }	|d         d d
         }t7          ||	||d	                    dS d| j         v rKt          | j         d         t          t          f          r&t9          | j         d                   | j         d<   d S d S d S )Nr`   disposalr   append_imagesrp   r   r[   rU   r   r   )r   r   r   rm   )rU   bboxr   r   r   Tinclude_color_table)r   r   r9   	itertoolschainr	   Iteratorr   ro   r   r   r   r   r   rs   r   _get_backgroundr   newr}   r   r?   r   r*   r   r   crop_write_frame_datasum)rU   r"   r?   r`   r   	im_framesframe_countbackground_im
imSequencer   r   r   r   previousr   rt   r6   
frame_datar%   offsets                       r   _write_multiple_framesr   A  s7   ~!!*--H~!!*bgkk*.E.EFFHIKMordBN,>,>PR,S,STT *Y *Y
%.z:: )	Y )	YH&x}}77Ha$M//11 4 4DAqN** N--a3333.--//K)(G[IIH..&&~x}^7TUUU(T5M22 D*2;*?J''!jHM&A&A*2-
*CJ'(T5M22 @*2;*?J'1K $R=99 "z22 W /
;;;{:?VV;;;??:..!33$, " 2 2*BGKK	,R,R! ! &5Xu%E%E
(-	#x}j(Q(Q%001d1C1KLLL#M8<<DHd;WWXXXXS)	YV 9~~# 	O 	OJ!$'Hf% 0+Hj6OPP    AHHQKKKK  LGKJ}-.CD#==F);<<#F+BQB/b(FJ}4MNNNNt	r~	%	%*
z"T5M+ +	% &)
)C%D%Dz"""	 
&	%	%	%r   c                 ,    t          | ||d           d S )NT)save_all)r   )rU   r"   filenames      r   	_save_allr     s    	"b(T******r   Fc                    d| j         v s	d| j        v r4| j                             d| j                            d                    }n%d }| j                             dd          | j         d<   |rt          | ||          st	          | ||           |                    d           t          |d          r|                                 d S d S )Nr?   optimizeTr]   flush)r   r9   r   r   r   r   hasattrr   )rU   r"   r   r   r?   s        r   r   r     s    BN""i27&:&:.$$YI0F0FGG%'^%7%7
D%I%Iz" -1"b'BB -BG,,,HHTNNNr7 





 r   c                 p    | j                             dd          }t          | j                  dk     rd}|S )Nr   r      r   )r   r   minr}   )rU   r   s     r   r   r     s9    "";22I 27||b	r   c                    d}	 d|j         v r|j         d         }n|j        d         }t          |          }d}t          ||j                   }|)	 |                    |          }n*# t
          $ r d}Y nw xY wn# t          t
          f$ r Y nw xY wd|j         v rt          |j         d         dz            }nd}t          |j                             dd                    }|s|dk    s|r|rdnd}	|	|d	z  z  }	|sd}|                     d
t          d          z   t          d          z   t          |	          z   t          |          z   t          |          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 )NFrp   Tr`   r2   r   r   r   r   r^   r_   rj   r   r4   rh   r1   )r   r9   intr   r   r|   KeyErrorr   r   r   o16r   _get_color_table_sizer}   _get_header_palette)r"   rU   r   rG   transparent_color_existsrp   r   r`   r   packed_flagr   palette_bytescolor_table_sizes                r   r   r     s   $1R^++>.9LL7>2L<((
 $( +B??*1288FF 1 1 1+0(((1	 + j!    R^##r~j1B6772>%%j!4455H 
8q==H=3:aax1}$' 	L
ggee oo (mm	
  ee	
 	
 	
 .,,-BCC -*2..0?? 	-CKE,,EHH
fQi..	
fQi..	 bgaj//	 bgaj//		
 U))	    5/ 5
$]33444HHRUUOOOOOs#   3A: A' 'A65A6:BBc                    |                                  }	 t          |d          5 }| j        dk    r$t          j        d|g|t          j                   ndd|g}dg}t          j        |t          j        t          j                  }t          j        ||j        |t          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wbr7   ppmtogif)stdoutstderrppmquant256)stdinr  r  )_dumpopenr   
subprocess
check_callDEVNULLPopenPIPEr  closewaitCalledProcessErrorosunlinkOSError)
rU   r"   r   tempfilerX   	quant_cmd	togif_cmd
quant_proc
togif_procretcodes
             r   _save_netpbmr(    s    xxzzH#(D!! 	LQw%%*1Z=O     (9	'L	'-joj>P  
 (-$+%-	  
 !'')))$//++ 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>	Ih 	 	 	DD		Ih 	 	 	D	se   E C9D+E +D//E 2D/3E 7E 
EEF E54F5
F?FFFc                 V   | j         dv r|r|                    dd          rt          p
| j         dk    }|s| j        | j        z  dk     rg }t          |                                           D ]\  }}|r|                    |           |s t          |          t          |          k    r|S t          | j
        j
                  t          j        | j
        j                   z  }d|dz
                                  z  }t          |          |dz  k    r|dk    r|S dS dS dS dS d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
    )rm   rn   r   r   rn   i   r   r   N)r   r   _FORCE_OPTIMIZEwidthheightr   	histogramr   r~   r*   r?   r   getmodebands
bit_length)rU   r9   optimiser   r,   countnum_palette_colorscurrent_palette_sizes           r   r   r   !  sl    
w*$((:q*A*A #4bgn 	+rx")+i77"$%bllnn55 2 25 2'..q111 +3233s;N7O7OOO**!$RZ%7!8!8E<N
= = " $%);a)?(K(K(M(M#M  '((,@A,EEE(1,,**A  87  FE,,r   c                     | sdS t          |           dk     rdS t          j        t          j        t          |           dz  d                    dz
  S )Nr   ri   r   r(   r   )r*   mathceillog)r  s    r   r  r  O  sV     Cq	]		a		qy#m"4"4"91==>>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   r(   r   )r  r*   r   )r  r  actual_target_size_diffs      r   r  r  Y  s]     -];;  !$44M8J8Ja8OO""A%<<<r   c                 ,    | j         r| j         j         n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   )rU   s    r   r   r   k  s     "$42:4r   c                     d}|r]t          |t                    rF	 | 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   rs   r?   getcolorr|   str)rU   info_backgroundr6   rY   s       r   r   r   u  s    J )ou-- 	)
Z00"EE

   q66 "        )Js   7 
AAAc                    d}| j                             d          dk    s4|r4d|v s.d|v s*|                    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|v r~|	                    dt          d          z   t          d          z   dz   t          d          z   t          d          z   t          |d                   z   t          d
          z              |                    d          rd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   87ar0   s   89arp   rg   r`   r\   r6   s   GIFr   r   r4   r^   rd   r5   rf   r(   rb   )r9   r   r   r   r  r  r}   r   r  r   r   r=  encoder)   r*   )rU   r9   r0   r6   r  r  headercomment_blockr\   r,   subblocks              r   r   r     sm    G	w{{9'' ( d""~~xx
## xx	"" 
  TXXl%;%;<<J&r**M,];; 	
	
bgaj//	 bgaj//	 	c!""
:AM**F ~~ggff  ee	
 ee $v,  ee		
 		
 		
 xx	 %r#wwy/gs## 	'nn&&Gq#g,,,, 	: 	:Aq1s7{+HRH..99MMAm$$$Mr   c           	          	 ||_         t          | ||d           t          j        || dd|j        z   dt
          |j                 fg           |                     d           |` d S # |` w xY w)Nr   rw   r   r   )r   r   r   r   r}   r   r   r   )r"   r   r   paramss       r   r   r     s    !% 	B&!444bE6HM#91ghm>TUV	
 	
 	
 	   H     s   A!A' 'A+c                     t          | |          }|i }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)

    Nr6   )r   r9   r   r?   rU   r   )rU   r?   r9   r   im_modrA  s         r   	getheaderrH    s     (D11|4LBG$;$;W\2\GT22FBJIBED))F&&&r   r   c                      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

    c                       e Zd Zg Zd ZdS )getdata.<locals>.Collectorc                 :    | j                             |           d S r   )r&   r   )r$   r&   s     r   r   z getdata.<locals>.Collector.write  s    IT"""""r   N)r   r   r   r&   r   r   r   r   	CollectorrK    s(        	# 	# 	# 	# 	#r   rM  )r{   r   r&   )rU   r   rE  rM  r"   s        r   r   r     s_    $# # # # # # # # GGIII	Bb"ff---7Nr   z.gifz	image/gif)F)NN)r   )2r   r5  r  r  enumr    r   r   r   r   r	   _binaryr
   r:   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r(  r*  r   r  r  r   r   r   r   rH  r   register_openr   register_saveregister_save_allregister_extensionregister_mimer   r   r   <module>rV     s  6      				           G G G G G G G G G G G G G G ! ! ! ! ! !       ! ! ! ! ! !    g    #2 0 0 0L L L L L9& L L Lf #C
(
(  21 1 1h  *+ + +HE HE HEV+ + +   "  ? ? ?D, , ,b ++ ++ ++\C C C  $5 5 5  .; ; ;|! ! !(' ' ' '8   H  L'w ? ? ?  L' / / /  +Y 7 7 7  ,f 5 5 5  L' 5 5 5 5 5r   