Ë
    ¦üàg=6  ã                  ó¸  — d dl m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	 ddl
mZmZmZmZ  G d„ d«      Zdd	„Zdd
„Z	 	 	 	 dd„Z G d„ dej                  «      Zdd„Zdd„Z ej,                  ej.                  ee«        ej0                  ej.                  e«        ej2                  ej.                  g d¢«        ej4                  ej.                  d«       y)é    )ÚannotationsN)ÚCallable)ÚIOÚcasté   )ÚImageÚ	ImageFileÚImagePaletteÚ_binaryc                  óJ   — e Zd ZdZd
dd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
y	)Ú	BoxReaderz}
    A small helper class to read fields stored in JPEG2000 header boxes
    and to easily step into and read sub-boxes.
    c                óB   — || _         |dk\  | _        || _        d| _        y )Nr   éÿÿÿÿ)ÚfpÚ
has_lengthÚlengthÚremaining_in_box)Úselfr   r   s      úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/PIL/Jpeg2KImagePlugin.pyÚ__init__zBoxReader.__init__!   s#   € ØˆŒØ  A™+ˆŒØˆŒØ "ˆÕó    c                ó®   — | j                   r+| j                  j                  «       |z   | j                  kD  ry| j                  dk\  r|| j                  k  S y)NFr   T)r   r   Útellr   r   )r   Ú	num_bytess     r   Ú	_can_readzBoxReader._can_read'   sH   € Ø�?Š?˜tŸw™wŸ|™|›~°	Ñ9¸D¿K¹KÒGàØ× Ñ  AÒ%à × 5Ñ 5Ñ5Ð5àr   c                ó  — | j                  |«      sd}t        |«      ‚| j                  j                  |«      }t	        |«      |k  rd|› dt	        |«      › d�}t        |«      ‚| j                  dkD  r| xj                  |z  c_        |S )NzNot enough data in headerzExpected to read z bytes but only got ú.r   )r   ÚSyntaxErrorr   ÚreadÚlenÚOSErrorr   )r   r   ÚmsgÚdatas       r   Ú_read_byteszBoxReader._read_bytes1   sƒ   € Ø�~‰~˜iÔ(Ø-ˆCÜ˜cÓ"Ð"à�w‰w�|‰|˜IÓ&ˆÜˆt‹9�yÒ Ø% i [Ð0DÄSÈÃYÀKÈqÐQˆCÜ˜#“,Ðà× Ñ  1Ò$Ø×!Ò! YÑ.Õ!Øˆr   c                óz   — t        j                  |«      }| j                  |«      }t        j                  ||«      S ©N)ÚstructÚcalcsizer$   Úunpack)r   Úfield_formatÚsizer#   s       r   Úread_fieldszBoxReader.read_fields?   s1   € Ü�‰˜|Ó,ˆØ×Ñ Ó%ˆÜ�}‰}˜\¨4Ó0Ð0r   c                óz   — | j                   }| j                  |«      }t        t        j                  |«      |«      S r&   )r   r$   r   ÚioÚBytesIO)r   r+   r#   s      r   Ú
read_boxeszBoxReader.read_boxesD   s3   € Ø×$Ñ$ˆØ×Ñ Ó%ˆÜœŸ™ DÓ)¨4Ó0Ð0r   c                ó„   — | j                   r4| j                  j                  «       | j                  z   | j                  k  S y)NT)r   r   r   r   r   )r   s    r   Úhas_next_boxzBoxReader.has_next_boxI   s0   € Ø�?Š?Ø—7‘7—<‘<“> D×$9Ñ$9Ñ9¸D¿K¹KÑGÐGàr   c                ó°  — | j                   dkD  r4| j                  j                  | j                   t        j                  «       d| _         t        t        t        t        f   | j                  d«      «      \  }}|dk(  r%t        t        | j                  d«      d   «      }d}nd}||k  s| j                  ||z
  «      sd}t        |«      ‚||z
  | _         |S )	Nr   r   z>I4sr   z>Qé   é   zInvalid header length)r   r   ÚseekÚosÚSEEK_CURr   ÚtupleÚintÚbytesr,   r   r   )r   ÚlboxÚtboxÚhlenr"   s        r   Únext_box_typezBoxReader.next_box_typeO   s¾   € à× Ñ  1Ò$Ø�G‰G�L‰L˜×.Ñ.´·±Ô<Ø "ˆÔô œ%¤¤U 
Ñ+¨T×-=Ñ-=¸fÓ-EÓF‰
ˆˆdØ�1Š9Üœ˜T×-Ñ-¨dÓ3°AÑ6Ó7ˆDØ‰DàˆDà�$Š;˜dŸn™n¨T°D©[Ô9Ø)ˆCÜ˜cÓ"Ð"à $ t¡ˆÔØˆr   N)r   )r   ú	IO[bytes]r   r:   ÚreturnÚNone)r   r:   rA   Úbool)r   r:   rA   r;   )r*   ÚstrrA   ztuple[int | bytes, ...])rA   r   )rA   rC   )rA   r;   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r$   r,   r0   r2   r?   © r   r   r   r      s*   „ ñô
#óóó1ó
1ó
ôr   r   c                óœ  — | j                  d«      }t        j                  |«      }|| j                  |dz
  «      z   }t        j                  d|«      \  }}}}}}}	}	}	}	}
||z
  ||z
  f}|
dk(  r1t        j                  d|d«      }|d   dz  dz   dkD  rd	}||fS d
}||fS |
dk(  rd}||fS |
dk(  rd}||fS |
dk(  rd}||fS d}t        |«      ‚)z‹Parse the JPEG 2000 codestream to extract the size and component
    count from the SIZ marker segment, returning a PIL (size, mode) tuple.é   z>HHIIIIIIIIHr   z>Bé&   r   é   r5   úI;16ÚLÚLAé   ÚRGBé   ÚRGBAz"unable to determine J2K image mode)r   r   Úi16ber'   Úunpack_fromr   )r   ÚhdrÚlsizÚsizÚrsizÚxsizÚysizÚxosizÚyosizÚ_Úcsizr+   ÚssizÚmoder"   s                  r   Ú_parse_codestreamrc   e   s*  € ð �'‰'�!‹*€CÜ�=‰=˜Ó€DØ
�—‘˜˜q™Ó!Ñ
!€CÜ=C×=OÑ=OØ˜ó>Ñ:€Dˆ$��d˜E 5¨!¨Q°°1°dð �5‰L˜$ ™,Ð'€DØˆq‚yÜ×!Ñ! $¨¨RÓ0ˆØ�‰G�d‰N˜aÑ !Ò#ØˆDð �ˆ:Ðð ˆDð �ˆ:Ðð 
�ŠØˆð �ˆ:Ðð 
�ŠØˆð �ˆ:Ðð 
�ŠØˆð
 �ˆ:Ðð 3ˆÜ˜#ÓÐr   c                ó0   — |dk(  ryd| z  d|z  z  d|z  z  S )zµConvert JPEG2000's (numerator, denominator, exponent-base-10) resolution,
    calculated as (num / denom) * 10^exp and stored in dots per meter,
    to floating-point dots per inch.r   Néþ   é
   i'  rI   )ÚnumÚdenomÚexps      r   Ú_res_to_dpirj   „   s*   € ð �‚zØØ�#‰I˜˜S™Ñ! e¨e¡mÑ4Ð4r   c                ó  — t        | «      }d}d}|j                  «       rU|j                  «       }|dk(  r|j                  «       }n/|dk(  r|j	                  d«      d   dk(  rd}|j                  «       rŒU|€J ‚d}d}d}d}d}	d}
|j                  «       �rá|j                  «       }|dk(  r†|j	                  d	«      \  }}}}t        |t        «      sJ ‚t        |t        «      sJ ‚t        |t        «      sJ ‚||f}|d
k(  r|dz  dkD  rd}�nY|d
k(  rd}�nP|dk(  rd}�nG|dk(  rd}�n>|dk(  �r8d}�n4|dk(  r+|dk(  r&|j	                  d«      \  }}}}|d
k(  �r|dk(  �rd}�n|dk(  �r|dv �r|j	                  d«      \  }}t        |t        «      sJ ‚t        |t        «      sJ ‚d}|j	                  dd|z  z   «      D ]  }t        |t        «      sJ ‚||kD  sŒ|}Œ |dk  �rƒt        j                  |dk(  rdnd«      }
t        |«      D ]]  }g }|j	                  dd|z  z   «      D ]%  }t        |t        «      sJ ‚|j                  |«       Œ' |
j                  t        |«      «       Œ_ |dk(  rdnd}nò|d k(  rí|j                  «       }|j                  «       rÍ|j                  «       }|d!k(  r§|j	                  d"«      \  }}}}}}t        |t        «      sJ ‚t        |t        «      sJ ‚t        |t        «      sJ ‚t        |t        «      sJ ‚t        |t        «      sJ ‚t        |t        «      sJ ‚t        |||«      }t        |||«      } |�| �|| f}	n|j                  «       rŒÍ|j                  «       r�Œá|�|€d#}!t        |!«      ‚||||	|
fS )$zªParse the JP2 header box to extract size, component count,
    color space information, and optionally DPI information,
    returning a (size, mode, mimetype, dpi) tuple.Ns   jp2hs   ftypz>4sr   s   jpx z	image/jpxs   ihdrz>IIHBr   rM   r5   rN   rO   rK   rP   rQ   rR   rS   rT   s   colrz>BBBIé   ÚCMYKs   pclr)rO   rP   z>HBú>ÚBÚPÚPAs   res s   rescz>HHHHBBzMalformed JP2 header)r   r2   r?   r0   r,   Ú
isinstancer:   r
   ÚrangeÚappendÚgetcolorr9   rj   r   )"r   ÚreaderÚheaderÚmimetyper=   r+   rb   ÚbpcÚncÚdpiÚpaletteÚheightÚwidthÚmethr_   ÚenumcsÚneÚnpcÚmax_bitdepthÚbitdepthÚiÚcolorÚvalueÚresÚtresÚvrcnÚvrcdÚhrcnÚhrcdÚvrceÚhrceÚhresÚvresr"   s"                                     r   Ú_parse_jp2_headerr’   �   sê  € ô �r‹]€FØ€FØ€HØ
×
Ñ
Ô
Ø×#Ñ#Ó%ˆà�7Š?Ø×&Ñ&Ó(ˆFØØ�WŠ_Ø×!Ñ! %Ó(¨Ñ+¨wÒ6Ø&�ð ×
Ñ
Õ
ð ÐÐÐà€DØ€DØ
€CØ	€BØ
€CØ€Gà
×
Ñ
Õ
Ø×#Ñ#Ó%ˆà�7Š?Ø%+×%7Ñ%7¸Ó%@Ñ"ˆF�E˜2˜sÜ˜f¤cÔ*Ð*Ð*Ü˜e¤SÔ)Ð)Ð)Ü˜c¤3Ô'Ð'Ð'Ø˜6�?ˆDØ�QŠw˜C $™J¨!Ò+Ø’Ø�q’Ø’Ø�q’Ø’Ø�q’Ø’Ø�q“Ø’Ø�WŠ_  q¢Ø!'×!3Ñ!3°GÓ!<ÑˆD�!�Q˜Ø�q‹y˜V r›\Ø’Ø�W‹_ ¨Ò!4Ø×(Ñ(¨Ó/‰GˆB�Ü˜b¤#Ô&Ð&Ð&Ü˜c¤3Ô'Ð'Ð'ØˆLØ"×.Ñ.¨s°c¸C±iÑ/@ÓAò ,�Ü! (¬CÔ0Ð0Ð0Ø˜lÓ*Ø#+‘Lð,ð ˜qÓ Ü&×3Ñ3¸cÀQºh±FÈEÓR�Ü˜r›ò 3�AØ')�EØ!'×!3Ñ!3°C¸3À¹9Ñ4EÓ!Fò ,˜Ü)¨%´Ô5Ð5Ð5ØŸ™ UÕ+ð,ð ×$Ñ$¤U¨5£\Õ2ð3ð # cšk‘s¨t‘Ø�WŠ_Ø×#Ñ#Ó%ˆCØ×"Ñ"Ô$Ø×(Ñ(Ó*�Ø˜7’?Ø9<¿¹ÈÓ9SÑ6�D˜$  d¨D°$Ü% d¬CÔ0Ð0Ð0Ü% d¬CÔ0Ð0Ð0Ü% d¬CÔ0Ð0Ð0Ü% d¬CÔ0Ð0Ð0Ü% d¬CÔ0Ð0Ð0Ü% d¬CÔ0Ð0Ð0Ü& t¨T°4Ó8�DÜ& t¨T°4Ó8�DØÐ'¨DÐ,<Ø# T˜l˜Øð ×"Ñ"Õ$ðW ×
Ñ
Ö
ðv €|�t�|Ø$ˆÜ˜#ÓÐà��x  gÐ-Ð-r   c                  ót   ‡ — e Zd ZdZdZdd„Zdd„Ze	 	 d	ˆ fd„«       Zej                  d
d„«       Zdd„Z
ˆ xZS )ÚJpeg2KImageFileÚJPEG2000zJPEG 2000 (ISO 15444)c           
     óJ  — | j                   j                  d«      }|dk(  r;d| _        t        | j                   «      \  | _        | _        | j                  «        �n|| j                   j                  d«      z   }|dk(  rád| _        t        | j                   «      }|\  | _        | _        | _        }| _	        |�|| j                  d<   | j                   j                  d«      j                  d	«      r{| j                   j                  d
«      }t        j                  |«      }| j                   j                  |d
z
  t        j                   «       | j                  «        nd}t#        |«      ‚d| _        d| _        d}d}	 | j                   j)                  «       }t        j*                  |«      j,                  }t7        j8                  dd| j:                  z   d| j                  | j$                  | j&                  ||f«      g| _        y # t.        $ r‘ d}	 | j                   j1                  «       }| j                   j                  dt2        j4                  «       | j                   j1                  «       }| j                   j                  |«       n# t.        $ r d}Y nw xY wY Œèw xY w)NrS   ó   ÿOÿQÚj2kr5   ó      jP  
‡
Újp2r{   rl   s   jp2cÿOÿQrK   znot a JPEG 2000 filer   r   Újpeg2k©r   r   )r   r   Úcodecrc   Ú_sizeÚ_modeÚ_parse_commentr’   Úcustom_mimetyper|   ÚinfoÚendswithr   rU   r6   r7   r8   r   Ú_reduceÚlayersÚfilenoÚfstatÚst_sizeÚ	Exceptionr   r.   ÚSEEK_ENDr	   Ú_Tiler+   Útile)	r   Úsigrw   r{   rW   r   r"   ÚfdÚposs	            r   Ú_openzJpeg2KImageFile._openú   s  € Ø�g‰g�l‰l˜1‹oˆØÐ%Ò%ØˆDŒJÜ%6°t·w±wÓ%?Ñ"ˆDŒJ˜œ
Ø×ÑÖ!à˜Ÿ™Ÿ™ Q›Ñ'ˆCàÐ=Ò=Ø"�”
Ü*¨4¯7©7Ó3�ØRXÑO�”
˜DœJ¨Ô(<¸cÀ4Ä<Ø�?Ø'*�D—I‘I˜eÑ$Ø—7‘7—<‘< Ó#×,Ñ,Ð-DÔEØŸ'™'Ÿ,™, q›/�CÜ$Ÿ]™]¨3Ó/�FØ—G‘G—L‘L ¨!¡¬R¯[©[Ô9Ø×'Ñ'Õ)à,�Ü! #Ó&Ð&àˆŒØˆŒàˆØˆð	Ø—‘—‘Ó!ˆBÜ—X‘X˜b“\×)Ñ)ˆFô �O‰OØØ˜Ÿ™Ñ"ØØ—‘˜TŸ\™\¨4¯;©;¸¸FÐCó	ð
ˆ�	øô ò 	ØˆBðØ—g‘g—l‘l“n�Ø—‘—‘˜Q¤§¡Ô,ØŸ™Ÿ™›�Ø—‘—‘˜SÕ!øÜò Ø’ðüð	ús7   Æ 9H ÈJ"ÈA9JÊJ"ÊJÊJ"ÊJÊJ"Ê!J"c                óx  — 	 | j                   j                  d«      }|sy |d   }|dv ry | j                   j                  d«      }t        j                  |«      }|dk(  r/| j                   j                  |dz
  «      dd  | j                  d<   y | j                   j                  |dz
  t        j                  «       Œº)NrK   r   )é�   éÙ   éd   Úcomment)r   r   r   rU   r¢   r6   r7   r8   )r   ÚmarkerÚtyprW   r   s        r   r    zJpeg2KImageFile._parse_comment.  sž   € ØØ—W‘W—\‘\ !“_ˆFÙØØ˜‘)ˆCØ�lÑ"àØ—'‘'—,‘,˜q“/ˆCÜ—]‘] 3Ó'ˆFØ�dŠ{à'+§w¡w§|¡|°F¸Q±JÓ'?ÀÀÐ'C�—	‘	˜)Ñ$Øà—‘—‘˜V a™Z¬¯©Ô5ð r   c                ó4   •— | j                   xs
 t        ‰| �  S r&   )r¤   ÚsuperÚreduce)r   Ú	__class__s    €r   rº   zJpeg2KImageFile.reduce@  s   ø€ ð �|‰|Ò-œu™w™~Ð-r   c                ó   — || _         y r&   )r¤   )r   r‡   s     r   rº   zJpeg2KImageFile.reduceL  s	   € àˆ�r   c                ó  — | j                   rã| j                  r×d| j                  z  }|dz	  }t        | j                  d   |z   |z  «      t        | j                  d   |z   |z  «      f| _        | j                   d   }t        |d   t        «      sJ ‚|d   d   | j                  | j                  |d   d   |d   d   f}t        j                  |d   d| j                  z   |d   |«      g| _         t        j                  j                  | «      S )Nr   r   rQ   rS   rœ   rK   )r¬   r¤   r:   r+   rž   rr   r9   r¥   r	   r«   Úload)r   ÚpowerÚadjustÚtÚt3s        r   r¾   zJpeg2KImageFile.loadP  s÷   € Ø�9Š9˜ŸšØ˜Ÿ™Ñ%ˆEØ˜a‘ZˆFä�T—Y‘Y˜q‘\ FÑ*¨eÑ3Ó4Ü�T—Y‘Y˜q‘\ FÑ*¨eÑ3Ó4ðˆDŒJð —	‘	˜!‘ˆAÜ˜a ™d¤EÔ*Ð*Ð*Ø�A‘$�q‘'˜4Ÿ<™<¨¯©°a¸±d¸1±g¸qÀ¹tÀA¹wÐGˆBÜ"Ÿ™¨¨1©¨v¸¿	¹	Ñ/AÀ1ÀQÁ4ÈÓLÐMˆDŒIä×"Ñ"×'Ñ'¨Ó-Ð-r   )rA   rB   )rA   zVCallable[[int | tuple[int, int], tuple[int, int, int, int] | None], Image.Image] | int)r‡   r:   rA   rB   )rA   zImage.core.PixelAccess | None)rE   rF   rG   ÚformatÚformat_descriptionr°   r    Úpropertyrº   Úsetterr¾   Ú__classcell__)r»   s   @r   r”   r”   ö   sT   ø„ Ø€FØ0Ðó2
óh6ð$ ð	.ð	ô	.ó ð	.ð ‡]�]òó ð÷.r   r”   c                ó&   — | d d dk(  xs | d d dk(  S )NrS   r—   rl   r™   rI   )Úprefixs    r   Ú_acceptrÊ   b  s+   € àˆr�ˆ
Ð)Ñ)ò 	BØ�#�2ˆ;ÐAÑAðr   c                óx  — | j                   }t        |t        «      r|j                  «       }|j	                  d«      s|j                  dd«      rd}nd}|j                  dd «      }|j                  dd «      }|j                  dd «      }|j                  d	d
«      }|j                  dd «      }	|	�5t        |	t        t        f«      rt        d„ |	D «       «      sd}
t        |
«      ‚|j                  dd«      }|j                  dd «      }|j                  dd «      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  d«      }t        |t        «      r|j                  «       }|j                  dd«      }d}t        |d«      r	 |j                  «       }|||||	|||||||||||f| _        t        j                  | |t        j                   dd| j"                  z   d|«      g«       y # t        $ r d}Y Œ`w xY w)Ns   .j2kÚno_jp2Fr˜   rš   ÚoffsetÚtile_offsetÚ	tile_sizeÚquality_modeÚratesÚquality_layersc              3  óH   K  — | ]  }t        |t        t        f«      –— Œ y ­wr&   )rr   r:   Úfloat)Ú.0Úquality_layers     r   ú	<genexpr>z_save.<locals>.<genexpr>  s    è ø€ ò 
Ø8EŒJ�}¤s¬E l×3ñ
ùs   ‚ "z,quality_layers must be a sequence of numbersÚnum_resolutionsr   Úcodeblock_sizeÚprecinct_sizeÚirreversibleÚprogressionÚLRCPÚcinema_modeÚnoÚmctÚsignedrµ   Úpltr   r¦   r›   rœ   )Úencoderinforr   rD   Úencoder£   ÚgetÚlistr9   ÚallÚ
ValueErrorÚhasattrr¦   r©   Úencoderconfigr	   Ú_saver«   r+   )Úimr   Úfilenamer¢   ÚkindrÍ   rÎ   rÏ   rÐ   rÒ   r"   rØ   Ú	cblk_sizerÚ   rÛ   rÜ   rÞ   rà   rá   rµ   râ   r®   s                         r   rë   rë   m  s%  € à�>‰>€Dä�(œCÔ Ø—?‘?Ó$ˆØ×Ñ˜Ô! T§X¡X¨h¸Ô%>Ø‰àˆà�X‰X�h Ó%€FØ—(‘(˜=¨$Ó/€KØ—‘˜ dÓ+€IØ—8‘8˜N¨GÓ4€LØ—X‘XÐ.°Ó5€NØÐ!Ü�>¤D¬% =Ô1Üñ 
ØIWô
ô 
ð =ˆÜ˜‹oÐà—h‘hÐ0°!Ó4€OØ—‘Ð)¨4Ó0€IØ—H‘H˜_¨dÓ3€MØ—8‘8˜N¨EÓ2€LØ—(‘(˜=¨&Ó1€KØ—(‘(˜=¨$Ó/€KØ
�(‰(�5˜!Ó
€CØ�X‰X�h Ó&€FØ�h‰h�yÓ!€GÜ�'œ3ÔØ—.‘.Ó"ˆØ
�(‰(�5˜%Ó
 €Cà	€BÜˆr�8Ôð	Ø—‘“ˆBð
 	ØØØØØØØØØØØØØ
ØØð!€BÔô& ‡O�O�B˜œYŸ_™_¨X°vÀÇÁÑ7GÈÈDÓQÐRÕSøô- ò 	ØŠBð	ús   ÇH+ È+H9È8H9)z.jp2z.j2kz.jpcz.jpfz.jpxz.j2cz	image/jp2)r   r@   rA   ztuple[tuple[int, int], str])rg   r:   rh   r:   ri   r:   rA   zfloat | None)r   r@   rA   zetuple[tuple[int, int], str, str | None, tuple[float, float] | None, ImagePalette.ImagePalette | None])rÉ   r;   rA   rC   )rì   zImage.Imager   r@   rí   zstr | bytesrA   rB   )Ú
__future__r   r.   r7   r'   Úcollections.abcr   Útypingr   r   Ú r   r	   r
   r   r   rc   rj   r’   r”   rÊ   rë   Úregister_openrÃ   Úregister_saveÚregister_extensionsÚregister_mimerI   r   r   ú<module>rø      sÝ   ðõ  #ã 	Û 	Û Ý $ß ç 5Ó 5÷Gñ GóTó>5ðb.Øðb.ðób.ôRi.�i×)Ñ)ô i.óXó@TðN €× Ñ �O×*Ñ*¨O¸WÔ EØ €× Ñ �O×*Ñ*¨EÔ 2à €× Ñ Ø×ÑÒLôð €× Ñ �O×*Ñ*¨KÕ 8r   