
    ̨sgz                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZmZmZ ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ erddlmZ ddZ ddZ!ddZ"ddZ#ddZ$i ddde#fddde#fddde#fddde#fdd d!e fd"d#d$e#fd%d&d'e#fd(d)d*e#fd+d,d-d.d/e#fd0d1d2e#fd3d4d5e#fd6d7d8e fd9d:d;e#fd<d=d>e#fd?d@dAe#fdBdCi dDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXe fdYdZd[e$fd\d]d^e fd_d`dae fdbdcdde#fdedfdge fdhdidje!fdkdldme!fi dndodpe!fdqdrdse!fdtdudve!fdwdxdye!fdzd{d|e!fd}d~de!fddde!fddde!fddde!fddde!fddde!fddde!fddde!fddde!fddddddddddddddddddde"fdZ%ddZ& G d dej"                        Z'ddZ(ddZ)dddddddZ*dZ+d dddZ,ddZ-ddZ.ddZ/	 d	 	 	 	 	 ddZ0 ejb                  e'jd                  e0e&        ejf                  e'jd                  e.        ejh                  e'jd                  g d        ejj                  e'jd                  d       y)    )annotationsN)IOTYPE_CHECKINGAny   )Image	ImageFile)i16be)i32be)o8)o16be)	deprecate)presetsMpoImageFileJpegImageFilec                    t        | j                  j                  d            dz
  }t        j                  | j                  |       y )N   )i16fpreadr	   
_safe_read)selfmarkerns      F/var/www/html/venv/lib/python3.12/site-packages/PIL/JpegImagePlugin.pySkipr   >   s1    DGGLLOq A!$    c                   t        | j                  j                  d            dz
  }t        j                  | j                  |      }d|dz  z  }|| j
                  |<   | j                  j                  ||f       |dk(  r|d d dk(  rt        |d      x| j                  d<   }t        |d	      | j                  d
<   	 |d   }t        |d      t        |d      f}|dk(  r|| j                  d<   || j                  d<   || j                  d<   y |dk(  rf|d d dk(  r^d| j                  v r| j                  dxx   |dd  z  cc<   y || j                  d<   | j                  j                         |z
  dz   | _        y |dk(  r+|d d dk(  r#|j                  dd      d   | j                  d<   y |dk(  r|d d dk(  r|| j                  d<   y |dk(  r$|d d dk(  r| j                  j                  |       y |dk(  r|d d  d!k(  rd }| j                  j                  d"i       }	|||dz    d#k(  r	 |dz  }t        ||      }
|dz  }||   }|d|z   z  }||dz  z  }t!        ||      }|dz  }||||z    }|
d$k(  r9t!        |d%      d&z  t        |d      t!        |d      d&z  t        |d      d'|	|
<   n||	|
<   ||z  }||dz  z  }|||dz    d#k(  ry y |d(k(  r7|d d d)k(  r/t        |d      | j                  d*<   	 |d+   }|| j                  d,<   y |dk(  rI|d d d-k(  r@|dd  | j                  d.<   | j                  j                         |z
  dz   | j                  d/<   y y y # t        $ r Y y w xY w# t"        j$                  $ r Y y w xY w# t&        $ r Y y w xY w)0Nr   zAPP%d        s   JFIF   jfif   jfif_version      
   r   dpi	jfif_unitjfif_density     s   Exif  exif      http://ns.adobe.com/xap/1.0/     xmp  s   FPXR flashpix      ICC_PROFILE      s   Photoshop 3.0 	photoshops   8BIMi  r   i   )XResolutionDisplayedUnitsXYResolutionDisplayedUnitsY  s   Adobeadobe   adobe_transforms   MPF mpmpoffset)r   r   r   r	   r   appapplistappendinfodivmod	Exceptiontell_exif_offsetspliticclist
setdefaulti32structerror
IndexError)r   r   r   srE   versionr+   r,   offsetr:   codename_lensizedatarB   s                  r   APPr[   C   s   
 	DGGLLOq ATWWa(A
Vb[
!CDHHSMLLa!AbqEW,&)!Qi/		&G$*7C$8		.!		5!Iq!9c!Rj0L A~#/		% %.DIIk"(4DIIn%	6	ae{2TYYIIf12& !DIIf $ 2Q 6D	6	af(KK777A.q1		%	6	aey0 !		*	6	af(88 	A	6	af(<<II((b9	!$/!1f~!V9!h,&&1*$1f~!&4-06>'*4|e';+.tQ<'*4|e';+.tR=	'IdO '+IdO$&1*$3 !$/: 
6	aex/ AY		'	;eO ,;DII'(	6	aex/AB%		$ !% 2Q 6		* 0	U  		| <<   		s7   >M &BM" /M; 	MM"M87M8;	NNc                   t        | j                  j                  d            dz
  }t        j                  | j                  |      }|| j
                  d<   || j                  d<   | j                  j                  d|f       y )Nr   commentCOM)	r   r   r   r	   r   rH   rE   rF   rG   )r   r   r   rT   s       r   r^   r^      sf     	DGGLLOq ATWWa(ADIIiDHHUOLL
#r   c                &   t        | j                  j                  d            dz
  }t        j                  | j                  |      }t        |d      t        |d      f| _        |d   | _        | j                  dk7  rd| j                   d}t        |      |d   | _        | j                  dk(  rd	| _	        nI| j                  dk(  rd
| _	        n2| j                  dk(  rd| _	        nd| j                   d}t        |      |dv rdx| j                  d<   | j                  d<   | j                  r| j                  j                          | j                  d   d   t        | j                        k(  r.| j                  D cg c]  }|dd  	 }}dj                  |      }nd }|| j                  d<   g | _        t        dt        |      d      D ];  }|||dz    }	| j                   j#                  |	d   |	d   dz  |	d   dz  |	d   f       = y c c}w )Nr      r   r   r(   zcannot handle z-bit layersr#   LRGBr"   CMYKz-layer images)        progressiveprogression   r9   r   icc_profiler.      r    )r   r   r   r	   r   _sizebitsSyntaxErrorlayers_moderH   rN   sortlenjoinrangelayerrG   )
r   r   r   rT   msgpprofilerk   its
             r   SOFr|      s    	DGGLLOq ATWWa(AQC1I%DJ!DIyyA~tyyk5#A$DK{{a
		
		
t{{m=9#11>??		- 499]#;||<<?2#dll"33'+||4!qv4G4((7+KK#.		- 1c!fa  ?a!a%L

1Q41QqTBY!=>? 5s   Hc                   t        | j                  j                  d            dz
  }t        j                  | j                  |      }t        |      r|d   }|dz  dk(  rdnd}d|dz  z   }t        |      |k  rd}t        |      t        j                  |dk(  rdnd|d|       }t        j                  d	k(  r|dkD  r|j                          t        D 	cg c]  }	||	   	 c}	| j                  |d
z  <   ||d  }t        |      ry y c c}	w )Nr   r   rl   r   @   zbad quantization table markerBHlittler    )r   r   r   r	   r   rs   ro   arraysys	byteorderbyteswapzigzag_indexquantization)
r   r   r   rT   v	precision	qt_lengthrw   rZ   rz   s
             r   DQTr      s     	DGGLLOq ATWWa(A
a&aDr'Q,AQ		B&	q6I1Cc""{{)q.3c1Qy>J==H$QMMO6B$CT!W$C!b&!ijM a& %Ds   D	i  SOF0zBaseline DCTi  SOF1zExtended Sequential DCTrd   SOF2zProgressive DCTi  SOF3zSpatial losslessi  DHTzDefine Huffman tablei  SOF5zDifferential sequential DCTre   SOF6zDifferential progressive DCTi  SOF7zDifferential spatiali  )JPG	ExtensionNi  SOF9zExtended sequential DCT (AC)rf   SOF10zProgressive DCT (AC)i  SOF11zSpatial lossless DCT (AC)i  DACz%Define arithmetic coding conditioningi  SOF13z Differential sequential DCT (AC)rg   SOF14z!Differential progressive DCT (AC)i  SOF15zDifferential spatial (AC)i  )RST0z	Restart 0Ni  )RST1z	Restart 1Ni  )RST2z	Restart 2Ni  )RST3z	Restart 3Ni  )RST4z	Restart 4Ni  )RST5z	Restart 5Ni  )RST6z	Restart 6Ni  )RST7z	Restart 7Ni  )SOIzStart of imageNi  )EOIzEnd of imageN  SOSzStart of scani  r   zDefine quantization tablei  DNLzDefine number of linesi  DRIzDefine restart intervali  DHPzDefine hierarchical progressioni  EXPzExpand reference componentr!   APP0zApplication segment 0r-   APP1zApplication segment 1r4   APP2zApplication segment 2i  APP3zApplication segment 3i  APP4zApplication segment 4i  APP5zApplication segment 5i  APP6zApplication segment 6i  APP7zApplication segment 7i  APP8zApplication segment 8i  APP9zApplication segment 9i  APP10zApplication segment 10i  APP11zApplication segment 11i  APP12zApplication segment 12r8   APP13zApplication segment 13r?   APP14zApplication segment 14i  APP15zApplication segment 15i  )JPG0zExtension 0Ni  )JPG1zExtension 1Ni  )JPG2zExtension 2N)JPG3zExtension 3N)JPG4zExtension 4N)JPG5zExtension 5N)JPG6zExtension 6N)JPG7zExtension 7N)JPG8zExtension 8N)JPG9zExtension 9N)JPG10zExtension 10N)JPG11zExtension 11N)JPG12zExtension 12N)JPG13zExtension 13Nr^   Comment)i  i  i  i  i  i  i  i  i  i    i  c                    | d d dk(  S )Nr`   s    )prefixs    r   _acceptr   C  s    "1:((r   c                  `    e Zd ZdZdZddZddZddZ	 	 	 	 	 	 ddZddZ	ddZ
dd	Zdd
Zy)r   JPEGzJPEG (ISO 10918)c                B   | j                   j                  d      }t        |      sd}t        |      d}dx| _        | _        d| _        g | _        i | _        i | _	        i | _
        i | _        g | _        g | _        	 |d   }|dk(  r*|| j                   j                  d      z   }t        |      }n| j                   j                  d      }Q|t        v rt        |   \  }}}|	 || |       |dk(  rK| j                   }| j                   dk(  rd	}t#        j$                  d
d| j&                  z   d|df      g| _        nS| j                   j                  d      }n5|dv rd}n.|dk(  r| j                   j                  d      }nd}t        |      | j+                          y )Nr`   znot a JPEG file   r      r   r   rc   CMYK;Ijpegr   r    >     r   i   zno marker found)r   r   r   ro   rn   rp   rL   rv   _huffman_dc_huffman_acr   rE   rF   rN   r   MARKERmoder	   _TilerY   tile_read_dpi_from_exif)r   rT   rw   rz   namedescriptionhandlerrawmodes           r   _openzJpegImageFile._openP  s   GGLLOqz#Cc"" #$#	DK 79
+-+-24%'02$&!ADyQ'F GGLLOF{-3AY*k7&D!$;"iiGyyF*"*!0BAQS}U!DI GGLLOk!fGGLLO'!#&&? B 	  "r   c                V    |dv rt        |d       t        | d|z         S t        |      )N)
huffman_ac
huffman_dcr6   _)r   getattrAttributeError)r   r   s     r   __getattr__zJpegImageFile.__getattr__  s1    //dB4t,,T""r   c                    | j                   j                  |      }|s$t        j                  rt	        | d      sd| _        y|S )z
        internal: read more image data
        For premature EOF and LOAD_TRUNCATED_IMAGES adds EOI marker
        so libjpeg can finish decoding
        _endedTs   )r   r   r	   LOAD_TRUNCATED_IMAGEShasattrr   )r   
read_bytesrT   s      r   	load_readzJpegImageFile.load_read  s;     GGLL$Y44WT8=T DKr   c                   t        | j                        dk7  ry | j                  ry | j                  d   \  }}}}d}| j                  }t	        |t
              sJ |d   dk(  r|dv r|| _        |df}|rt        | j                  d   |d   z  | j                  d   |d   z        }dD ]	  }	||	k\  s	 n |J |d   |d   |d   |d   z
  	z   dz
  |	z  |d   z   |d   |d   z
  |	z   dz
  |	z  |d   z   f}| j                  d   |	z   dz
  |	z  | j                  d   |	z   dz
  |	z  f| _        |	}t        j                  ||||      g| _        |df| _        dd|d   |z  |d   |z  f}
| j                  |
fS )	Nr   r   rb   )ra   YCbCrr   )r(   r"   r   r   r   r`   )rs   r   decoderconfigrY   
isinstancetuplerq   minrm   r	   r   r   )r   r   rY   deoascaleoriginal_sizerT   boxs              r   draftzJpegImageFile.draft  s    tyy>Q YYq\
1a		!U###Q45=T^3DJbA		!Q/1a1HIE! A: = =!!1!q1$*QqT11!q1$*QqT1	A  99Q<!+a/A5		!q8H18LQR7RSDJE__Q1a01	#QZ!]1%-}Q/?%/GHyy#~r   c                
   t        j                         \  }}t        j                  |       t        j                  j                  | j                        r$t        j                  dd|| j                  g       n#	 t        j                  |       d}t        |      	 t        j                  |      5 }|j                          |j                  | _        d d d        	 t        j                  |       | j                  j                   | _        | j                  j$                  | _        g | _        y # t        $ r Y w xY w# 1 sw Y   lxY w# t        $ r Y dw xY w# 	 t        j                  |       w # t        $ r Y w w xY wxY w)Ndjpeg-outfilezInvalid Filename)tempfilemkstemposclosepathexistsfilename
subprocess
check_callunlinkOSError
ValueErrorr   openloadimr   rq   rY   rm   r   )r   fr	  rw   _ims        r   
load_djpegzJpegImageFile.load_djpeg  s-    ""$4
77>>$--(!!7Jdmm"LM		$ %CS/!	D! !S
&&!		$ WW\\
WW\\
	'  ! !  		$ sl   ;D1 E 3"E E E 1	D=<D= E	E 	EEFE32F3	E?<F>E??Fc                    t        |       S N)_getexifr   s    r   r  zJpegImageFile._getexif  s    ~r   c                   d| j                   v sd| j                   vry 	 | j                         }|d   }|d   }	 t        |d         |d   z  }t	        j
                  |      rd}t        |      |dk(  r|d	z  }||f| j                   d<   y # t        $ r |}Y Kw xY w# t        j                  t        t        t        t        t        f$ r d
| j                   d<   Y y w xY w)Nr*   r/   i(  i  r   r   zDPI is not a numberr`   gRQ@)H   r  )rH   getexiffloat	TypeErrormathisnanr  rQ   rR   KeyErrorro   ZeroDivisionError)r   r/   resolution_unitx_resolutionr*   rw   s         r   r   z!JpegImageFile._read_dpi_from_exif  s    DIItyy!8	&<<>D"6lO<L#LO,|A> zz#+ o%!#t"CxDIIe  #"# LL
 	&  &DIIe	&s4   B B =B BB BB <CCc                    t        |       S r  )_getmpr  s    r   r'  zJpegImageFile._getmp  s    d|r   N)returnNone)r   strr(  r   )r   intr(  bytes)r   z
str | NonerY   ztuple[int, int] | Noner(  z0tuple[str, tuple[int, int, float, float]] | None)r(  dict[int, Any] | None)__name__
__module____qualname__formatformat_descriptionr   r   r   r  r  r  r   r'  r   r   r   r   r   L  sO    F+6#p# &&&<&	9&P>&:r   c                \    d| j                   vry | j                         j                         S )Nr/   )rH   r  _get_merged_dictr  s    r   r  r  	  s&    TYY<<>**,,r   c           	        	 | j                   d   }t        j                  |      }|j	                  d      }|d d dk(  rdnd}ddlm} 	 |j                  |      }|j                  |j                         |j                  |       t        |      }	 |d
   }
g }	 |d   }t        d|
      D ]  }t        j                   | d||dz        }d}t        t#        ||            }t%        |d   dz        t%        |d   dz        t%        |d   dz        |d   dz  dz	  |d   dz  dz	  |d   dz  d}|d   dk(  rd|d<   nd}	t        |	      ddd d!d"d#d$d%}|j'                  |d&   d'      |d&<   ||d<   |j)                  |        ||d<   |S # t        $ r Y y w xY w# t        $ r}d	}	t        |	      |d }~ww xY w# t        $ r}d}	t        |	      |d }~ww xY w# t        $ r}d(}	t        |	      |d }~ww xY w))NrC   r(   r"   s   MM *><r   )TiffImagePluginz)malformed MP Index (unreadable directory)  z(malformed MP Index (no number of images)i  r   LLLHHrl   )	AttributeSize
DataOffsetEntryNo1EntryNo2r;  l        i   @i    i      i      i )DependentParentImageFlagDependentChildImageFlagRepresentativeImageFlagReservedImageDataFormatMPTyperF  r   z!unsupported picture format in MPO	Undefinedz Large Thumbnail (VGA Equivalent)z$Large Thumbnail (Full HD Equivalent)zMulti-Frame Image (Panorama)zMulti-Frame Image: (Disparity)z Multi-Frame Image: (Multi-Angle)zBaseline MP Primary Image)r   i  i  i  i  i  i   rG  Unknownz!malformed MP Index (bad MP Entry))rH   r"  ioBytesIOr   r   r8  ImageFileDirectory_v2seeknextr  dictrJ   ro   ru   rQ   unpack_fromzipboolgetrG   )r   rZ   file_contentshead
endiannessr8  rH   rC   r   rw   quant	mpentriesrawmpentriesentrynumunpackedentrylabelsmpentrympentryattr	mptypemaps                      r   r'  r'    su   yy JJt$Ma DRa$77SJ!&44T:499%		- $Z
&6

 I$&&za 	&H"..,e$lHrMM QF3v}56G,01E1Q,R+/0D0P+Q+/0D0P+Q$[1W="D$+K$8G$D#K!+.;K ,-217-.9!#&&%<@8:<5I %.MM+h2G$SK!#.GK W%=	&> 6
 IA    &9#A%&  &8#A%&N  &1#A%&s[   F 
AF F; C0G 	FF	F8%F33F8;	GGG	G6#G11G6ra   rb   r   r   )1ra   rb   RGBXrc   r   )@r   r   r#   r.   r9   r    r@     r   r"   r'   rj   rl      r0   *   r`   r(   r6            )   +   	   rA      rA     (   ,   5   r)             '   -   4   6         !   &   .   3   7   <      "   %   /   2   8   ;   =   #   $   0   1   9   :   >   ?   r   ))r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   c                    t        | t              r| j                  dv ry| j                  d   dd | j                  d   dd z   | j                  d   dd z   }t        j                  |d      S )N)r   r"   r   r   r`   r   )r   r   rp   rv   	samplingsrS  )r  samplings     r   get_samplingr  {  si     b-(BII,?xx{1Q"((1+a"22RXXa[15EEH==2&&r   c                
   | j                   dk(  s| j                  dk(  rd}t        |      	 t        | j                     }| j                  }|j                  dd      D cg c]  }t        |       }}|j                  dd      }	|j                  d	d      }
|j                  d
      }|	dk(  rd}	d}
d}n|	t        v r/t        |	   }d}	|j                  d	d      }
|j                  d      }nnt        |	t              sd}t        |      |
t        v rt        |
   j                  d	d      }
t        |t              r |t        v rt        |   j                  d      }|
dk(  rd}
nD|
dk(  rd}
n<|
dk(  rd}
n4|
dk(  rd}
n,|
dk(  r'| j                  dk7  rd}t        |      t        |       }
	 	 	 	 d4d}|dk(  r)| j                  dk7  rd}t        |      t!        | dd       } ||      }|j                  dd      }d}|j                  d| j"                  j                  d            }|rJd}||z
  }t%        |      |kD  rd}t        |      t'        d|z   t%        |      z         }|d|z   dz   |z   z  }|j                  d      }|r~d }||z
  }g }|r|j)                  |d |        ||d  }|rd}|D ]P  }t'        d|z   t%        |      z         }|d!|z   d"z   t+        |      z   t+        t%        |            z   |z   z  }|dz  }R |j                  d#| j"                  j                  d#            }|j                  d$d%      xs |j                  d&d%      }|j                  d'd%      }|j                  d(d      }t        |t,        j.                        r|j1                         }t%        |      |kD  rd)}t        |      |	||j                  d*d      ||j                  d+d%      |j                  d,d      |d   |d   |
|j                  d-d      |j                  d.d      ||||f| _        d}|s|r| j                  d/k(  r#d0| j4                  d   z  | j4                  d   z  }nL|	d1k\  s|	dk(  r#d| j4                  d   z  | j4                  d   z  }n| j4                  d   | j4                  d   z  }|r|t%        |      d2z   z  }|r7|t%        |      dz   z  }n%t7        |t%        |      d2z   t%        |      dz         }t9        j:                  | |t9        j<                  d3d| j4                  z   d|      g|       y # t
        $ r!}d| j                   d}t        |      |d }~ww xY wc c}w )5Nr   z cannot write empty image as JPEGzcannot write mode z as JPEGr*   r   qualityr  subsamplingqtableskeepr   zInvalid quality settingz4:4:4z4:2:2r   z4:2:0r   z4:1:1r   z3Cannot use 'keep' when original image is not a JPEGc                   | | S t        | t              rz	 | j                         D cg c]5  }|j                  dd      d   j                         D ]  }t	        |       7 }}}t        dt        |      d      D cg c]
  }|||dz     } }t        | t        t        t        f      rt        | t              r*t        t        |             D cg c]  }|| v s| |    } }nt        | t              rt        |       } dt        |       cxk  rdk  sn d}t        |      t        |       D ]E  \  }}		 t        |	      dk7  rd}t        |      t        j                  d|	      }
t        |
      | |<   G | S y c c}}w c c}w # t        $ r}d}t        |      |d }~ww xY wc c}w # t        $ r}d}t        |      |d }~ww xY w)	N#r   r   r~   zInvalid quantization tabler#   z$None or too many quantization tablesr   )r   r*  
splitlinesrM   r+  ru   rs   r  r   listrO  	enumerater  r   )r  linenumlinesrT   r   rw   keyidxtabletable_arrays              r   validate_qtablesz_save.<locals>.validate_qtables  s   
 ?Ngs#
P !( 2 2 4#zz#q1!4::<  H  7<As5z26NO5QV,OOgtT23'4(,1#g,,?%(3'>GCL  GU+w-G(q(< o%'0 
5
U	55zR':'n,"'++c5"9K
 $(#4GCL
5 N+ 4 P	  -2 o1,- ! 16C$S/q01sR   F :E8#F >E>	F"F"41F'8F 	FFF'	G0F>>Gextrar   r   r3   r0   zXMP data is too longs   r1   rk   r9   s   r7   r]   rh   Fri   optimizer/   zEXIF data is too longsmoothkeep_rgb
streamtyperestart_marker_blocksrestart_marker_rowsrc   r"   _   r#   r   )r  zKstr | tuple[list[int], ...] | list[list[int]] | dict[int, list[int]] | Noner(  zlist[list[int]] | None)widthheightr  RAWMODEr   r"  r  encoderinforS  roundr   r   r+  r*  r1  r  r   rH   rs   o16rG   r   r   ExiftobytesencoderconfigrY   maxr	   _saver   )r  r   r  rw   r   r   rH   xr*   r  r  r  presetr  r  MAX_BYTES_IN_MARKERr3   overhead_lenmax_data_bytes_in_markerrY   rk   markersrz   r   r]   rh   r  r/   bufsizes                                r   r  r    s   	xx1}		Q0o""''"
 >>D!XXeV4
558
5C
5hhy"%G((="-Khhy!G&	G	!jj3**^,%'o'!!+.22="EKgs#7(:g&**>:Gg						 		99GCS/!"2&(W( 
 	(T &99GCS/!"nd3w'GHHWc"E
((5"''++e,
-C
#6#E s8..(CS/!1|#c#h./t#&IICOO((=)K#6#E NN;'@(@AB%&>&?@K   
	Fq<'#f+56D"# Q% S\"	#
 E FA
	 hhy"''++i"89G
 ((=%0RDHH]E4RKxx
E*H88FC D$

#||~
4y&&%o 	1U#q!AA(!,&*B, G;77f"''!*nrwwqz1G]gm"''!*nrwwqz1Gggaj2771:-Gs4y1}$Gs5zA~%G gs4y1}c%j1n=OO
B"'')91gFGw  ""277)84cl!" 6s   T3  U 3	U<UUc                    | j                         }t        j                  dd||g       	 t        j                  |       y # t
        $ r Y y w xY w)Ncjpegr  )_dumpr  r  r  r  r  )r  r   r  r  s       r   _save_cjpegr  P  sG    xxzH7J(CD
		( s   A 	AAc                6   t        | |      }	 |j                         }|C|d   dkD  r;|j                  D ]  \  }}|dk(  sd|v s|c S  ddlm}  |j
                  ||      }|S # t        t        f$ r Y |S t        $ r t        j                  d       Y |S w xY w)Nr9  r   r   s    hdrgm:Version="r   zTImage appears to be a malformed MPO file, it will be interpreted as a base JPEG file)r   r'  rF   MpoImagePluginr   adoptr  rS   ro   warningswarn)r   r  r  mpheadersegmentcontentr   s          r   jpeg_factoryr  \  s     
r8	$B
99;HUOa$7$&JJ  f$)<)GI
 5 $##B1B I z"  I  
.	
 I
s)   1A%  A% A% 	A% %B7BB)z.jfifz.jpez.jpgz.jpegz
image/jpeg)r   r   r   r+  r(  r)  )r   r,  r(  rR  )r   r   r(  r-  )r  Image.Imager(  r+  )r  r  r   	IO[bytes]r  zstr | bytesr(  r)  r  )r   r  r  zstr | bytes | Noner(  zJpegImageFile | MpoImageFile)6
__future__r   r   rJ  r   r  rQ   r  r   r  r  typingr   r   r   r   r   r	   _binaryr
   r   r   rP   r   r   r  
_deprecater   JpegPresetsr   r  r   r   r[   r^   r|   r   r   r   r   r  r'  r  r   r  r  r  r  r  register_openr1  register_saveregister_extensionsregister_mimer   r   r   <module>r     s  D #  	  	   
   ) )  ! !  ! !  ,%
d7N$-?`6@

V^S)@

V.4@
 V&,@
 V'-	@

 U*D1@
 V2C8@
 V3S9@
 V+S1@
 &@
 V3S9@
 W,c2@
 W137@
 U;TB@
 W8#>@
 W93?@
  W137!@
" '#@
$ '%@
& ''@
( ')@
* '+@
, '-@
. '/@
0 '1@
2 +3@
4 )5@
6 UOT*7@
8 U/59@
: U,d3;@
< U-t4=@
> U5s;?@
@ U0$7A@
B V,c2C@
D V,c2E@
F V,c2G@
H V,c2I@
J V,c2K@
L V,c2M@
N V,c2O@
P V,c2Q@
R V,c2S@
T V,c2U@
V W.4W@
X W.4Y@
Z W.4[@
\ W.4]@
^ W.4_@
` W.4a@
b )c@
d )e@
f )g@
h *))))))++++Is#@
F)zI'' zz-I` 
		 	'DN 37/!<   M((, @   M((% 0   -..0R S   M((, 7r   