Ë
    ¦üàg+A  ã                  óÂ  — d Z 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	 ddl
mZ ddlmZmZ  G d	„ d
e«      Z G d„ de«      Z G d„ de«      Zd%d„Z	 d&	 	 	 	 	 d'd„Zd(d„Zd(d„Z G d„ de«      Zd)d„Z G d„ dej                  «      Z G d„ dej4                  «      Z G d„ de«      Z G d„ de«      Z G d„ dej<                  «      Zd*d „Z  ejB                  ejD                  ee«        ejF                  ejD                  d!«        ejH                  d"e«        ejH                  d#e«        ejJ                  ejD                  e «        ejL                  d$e«       y)+aÑ  
Blizzard Mipmap Format (.blp)
Jerome Leclanche <jerome@leclan.ch>

The contents of this file are hereby released in the public domain (CC0)
Full text of the CC0 license:
  https://creativecommons.org/publicdomain/zero/1.0/

BLP1 files, used mostly in Warcraft III, are not fully supported.
All types of BLP2 files used in World of Warcraft are supported.

The BLP file structure consists of a header, up to 16 mipmaps of the
texture

Texture sizes must be powers of two, though the two dimensions do
not have to be equal; 512x256 is valid, but 512x200 is not.
The first mipmap (mipmap #0) is the full size image; each subsequent
mipmap halves both dimensions. The final mipmap should be 1x1.

BLP files come in many different flavours:
* JPEG-compressed (type == 0) - only supported for BLP1.
* RAW images (type == 1, encoding == 1). Each mipmap is stored as an
  array of 8-bit values, one per pixel, left to right, top to bottom.
  Each value is an index to the palette.
* DXT-compressed (type == 1, encoding == 2):
- DXT1 compression is used if alpha_encoding == 0.
  - An additional alpha bit is used if alpha_depth == 1.
  - DXT3 compression is used if alpha_encoding == 1.
  - DXT5 compression is used if alpha_encoding == 7.
é    )ÚannotationsN)ÚIntEnum)ÚBytesIO)ÚIOé   )ÚImageÚ	ImageFilec                  ó   — e Zd ZdZy)ÚFormatr   N)Ú__name__Ú
__module__Ú__qualname__ÚJPEG© ó    úP/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/PIL/BlpImagePlugin.pyr   r   ,   s   „ Ø�Dr   r   c                  ó   — e Zd ZdZdZdZy)ÚEncodingr   é   é   N)r   r   r   ÚUNCOMPRESSEDÚDXTÚUNCOMPRESSED_RAW_BGRAr   r   r   r   r   0   s   „ Ø€LØ
€CØÑr   r   c                  ó   — e Zd ZdZdZdZy)ÚAlphaEncodingr   r   é   N)r   r   r   ÚDXT1ÚDXT3ÚDXT5r   r   r   r   r   6   s   „ Ø€DØ€DØ�Dr   r   c                ó<   — | dz	  dz  dz  | dz	  dz  dz  | dz  dz  fS )Né   é   r   é   é?   r   r   )Úis    r   Ú
unpack_565r&   <   s2   € Ø�"‰W˜Ñ Ñ" a¨1¡f°¡_¸Ñ$:¸QÀ¹XÈ!¹OÐKÐKr   c           	     óê  — t        | «      dz  }t        «       t        «       t        «       t        «       f}t        |«      D �]/  }|dz  }t        j                  d| |«      \  }}}t        |«      \  }	}
}t        |«      \  }}}t        d«      D ]à  }t        d«      D ]Ð  }|dz  }|dz	  }d}|dk(  r|	|
|}}}n„|dk(  r|||}}}nx|dk(  r@||kD  r"d|	z  |z   dz  }d|
z  |z   dz  }d|z  |z   dz  }nL|	|z   dz  }|
|z   dz  }||z   dz  }n3|dk(  r.||kD  r"d|z  |	z   dz  }d|z  |
z   dz  }d|z  |z   dz  }nd	\  }}}}|r||   j                  |g«       Œº||   j                  g«       ŒÒ Œâ �Œ2 |S )
úE
    input: one "row" of data (i.e. will produce 4*width pixels)
    é   z<HHIé   r   r   éÿ   r   r   )r   r   r   r   ©ÚlenÚ	bytearrayÚrangeÚstructÚunpack_fromr&   Úextend)ÚdataÚalphaÚblocksÚretÚblock_indexÚidxÚcolor0Úcolor1ÚbitsÚr0Úg0Úb0Úr1Úg1Úb1Újr%   ÚcontrolÚaÚrÚgÚbs                         r   Údecode_dxt1rH   @   sÜ  € ô �‹Y˜!‰^€FÜ‹;œ	›¤Y£[´)³+Ð
>€Cä˜V“}ó *-ˆà˜A‰oˆÜ%×1Ñ1°&¸$ÀÓDÑˆ�˜ä Ó'‰
ˆˆB�Ü Ó'‰
ˆˆB�ô �q“ò  	-ˆAÜ˜1“Xò -�ð  ™(�Ø˜q‘y�à�Ø˜a’<Ø  " b˜!�q‘AØ ’\Ø  " b˜!�q‘AØ ’\Ø ’Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.™à "™W¨™N˜Ø "™W¨™N˜Ø "™W¨™N™Ø ’\Ø ’Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.˜Ø ™V b™[¨QÑ.™à%/™
˜˜1˜a áØ˜‘F—M‘M 1 a¨¨A ,Õ/à˜‘F—M‘M 1 a¨ )Õ,ñ?-ò 	-ð*-ðX €Jr   c           	     ó&  — t        | «      dz  }t        «       t        «       t        «       t        «       f}t        |«      D �]M  }|dz  }| ||dz    }t        j                  d|«      }t        j                  d|d«      \  }}t        j                  d|d«      \  }	t        |«      \  }
}}t        |«      \  }}}t        d«      D ]È  }d}t        d«      D ]¶  }d|z  |z   d	z  }||   }|rd}|dz  }nd
}|dz  }|dz  }|	d	d|z  |z   z  z	  dz  }|dk(  r|
||}}}nY|dk(  r|||}}}nM|d	k(  r"d	|
z  |z   dz  }d	|z  |z   dz  }d	|z  |z   dz  }n&|dk(  r!d	|z  |
z   dz  }d	|z  |z   dz  }d	|z  |z   dz  }||   j                  |g«       Œ¸ ŒÊ �ŒP |S )r(   é   z<8Bú<HHr)   ú<Ié   r*   Fr   Té   é   r   r   r   r,   )r3   r5   r6   r7   r8   Úblockr;   r9   r:   Úcoder<   r=   r>   r?   r@   rA   rB   Úhighr%   Úalphacode_indexrD   Ú
color_coderE   rF   rG   s                            r   Údecode_dxt3rU   y   s   € ô
 �‹Y˜"‰_€FÜ‹;œ	›¤Y£[´)³+Ð
>€Cä˜V“}ó (,ˆØ˜BÑˆØ�S˜3 ™8Ð$ˆä×!Ñ! %¨Ó/ˆÜ×+Ñ+¨E°5¸!Ó<‰ˆ�ä×$Ñ$ T¨5°"Ó5‰ˆä Ó'‰
ˆˆB�Ü Ó'‰
ˆˆB�ä�q“ò 	,ˆAØˆDÜ˜1“Xò ,�Ø#$ q¡5¨1¡9°Ñ"2�Ø˜Ñ)�ÙØ �DØ˜!‘G‘Aà�DØ˜‘H�AØ�R‘�à" a¨1¨q©5°1©9¡oÑ5¸Ñ=�
à ’?Ø  " b˜!�q‘AØ 1’_Ø  " b˜!�q‘AØ 1’_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*‘AØ 1’_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�Aà�A‘—‘˜q ! Q¨˜lÕ+ñ5,ò	,ð(,ðT €Jr   c           	     óz  — t        | «      dz  }t        «       t        «       t        «       t        «       f}t        |«      D �]÷  }|dz  }| ||dz    }t        j                  d|«      \  }}t        j                  d|d«      }|d   |d   dz  z  |d   dz  z  |d   d	z  z  }	|d
   |d   dz  z  }
t        j                  d|d«      \  }}t        j                  d|d«      \  }t        |«      \  }}}t        |«      \  }}}t        d«      D �])  }t        d«      D �]  }dd|z  |z   z  }|dk  r	|
|z	  dz  }n|dk(  r|
dz	  |	dz  dz  z  }n|	|dz
  z	  dz  }|d
k(  r|}nF|dk(  r|}n>||kD  rd|z
  |z  |dz
  |z  z   dz  }n$|dk(  rd
}n|dk(  rd}nd|z
  |z  |dz
  |z  z   dz  }|dd|z  |z   z  z	  dz  }|d
k(  r|||}}}nY|dk(  r|||}}}nM|dk(  r"d|z  |z   dz  }d|z  |z   dz  }d|z  |z   dz  }n&|dk(  r!d|z  |z   dz  }d|z  |z   dz  }d|z  |z   dz  }||   j                  |g«       �Œ �Œ, �Œú |S )zG
    input: one "row" of data (i.e. will produce 4 * width pixels)
    rJ   z<BBz<6Br   r   r)   r*   r#   é   r   r   rK   rL   rM   r   rN   é   r+   r,   )r3   r5   r6   r7   r8   rP   Úa0Úa1r;   Ú
alphacode1Ú
alphacode2r9   r:   rQ   r<   r=   r>   r?   r@   rA   rB   r%   rS   Ú	alphacoderD   rT   rE   rF   rG   s                                r   Údecode_dxt5r^   ®   së  € ô
 �‹Y˜"‰_€FÜ‹;œ	›¤Y£[´)³+Ð
>€Cä˜V“}ó 9,ˆØ˜BÑˆØ�S˜3 ™8Ð$ˆä×#Ñ# E¨5Ó1‰ˆˆBä×!Ñ! %¨°Ó2ˆØ˜!‘W  Q¡¨1¡Ñ-°°a±¸B±Ñ?À4ÈÁ7ÈbÁ=ÑQˆ
Ø˜!‘W  Q¡¨1¡Ñ-ˆ
ä×+Ñ+¨E°5¸!Ó<‰ˆ�ä×$Ñ$ T¨5°"Ó5‰ˆä Ó'‰
ˆˆB�Ü Ó'‰
ˆˆB�ä�q“ó (	,ˆAÜ˜1“Xó ',�à"# q¨1¡u¨q¡y¡/�à" bÒ(Ø!+¨Ñ!>À$Ñ F‘IØ$¨Ò*Ø!+¨rÑ!1°zÀQ±È$Ñ6NÑ O‘Ià!+°À"Ñ0DÑ!EÈÑ M�Ià ’>Ø‘AØ !’^Ø‘AØ˜"’WØ˜i™-¨2Ñ-°¸Q±À"Ñ0DÑDÈÑJ‘AØ !’^Ø‘AØ !’^Ø‘Aà˜i™-¨2Ñ-°¸Q±À"Ñ0DÑDÈÑJ�Aà" a¨1¨q©5°1©9¡oÑ5¸Ñ=�
à ’?Ø  " b˜!�q‘AØ 1’_Ø  " b˜!�q‘AØ 1’_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*‘AØ 1’_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�Aà�A‘—‘˜q ! Q¨˜lÖ+òO',ò(	,ð#9,ðv €Jr   c                  ó   — e Zd Zy)ÚBLPFormatErrorN)r   r   r   r   r   r   r`   r`   ô   s   „ Ør   r`   c                ó   — | d d dv S )Nr*   )ó   BLP1ó   BLP2r   )Úprefixs    r   Ú_acceptre   ø   s   € Ø�"�1ˆ:Ð+Ð+Ð+r   c                  ó    — e Zd ZdZdZdZdd„Zy)ÚBlpImageFilez 
    Blizzard Mipmap Format
    ÚBLPzBlizzard Mipmap Formatc                ó&  — | j                   j                  d«      | _        t        | j                  «      s#dt	        | j                  «      › �}t        |«      ‚t        j                  d| j                   j                  d«      «      d   }| j                  dk(  r6t        j                  d| j                   j                  d«      «      d   dk7  }nÃt        j                  d| j                   j                  d«      «      d   }t        j                  d| j                   j                  d«      «      d   dk7  }t        j                  d| j                   j                  d«      «      d   }| j                   j                  dt        j                  «       t        j                  d	| j                   j                  d
«      «      | _        | j                  dk(  rdt        j                  d| j                   j                  d«      «      d   }| j                   j                  dt        j                  «       |||f}d}n||f}d}| j                  j                  «       }|rdnd| _        t        j                  |d| j                   z   ||«      g| _        y )Nr*   zBad BLP magic ú<ir   rb   rL   ú<br   ú<IIr)   é   é   ÚRGBAÚRGB©r   r   )ÚfpÚreadÚmagicre   Úreprr`   r0   ÚunpackÚseekÚosÚSEEK_CURÚ_sizeÚdecodeÚ_moder	   Ú_TileÚsizeÚtile)	ÚselfÚmsgÚcompressionr4   ÚencodingÚalpha_encodingÚargsÚoffsetÚdecoders	            r   Ú_openzBlpImageFile._open  sÙ  € Ø—W‘W—\‘\ !“_ˆŒ
Ü�t—z‘zÔ"Ø"¤4¨¯
©
Ó#3Ð"4Ð5ˆCÜ  Ó%Ð%ä—m‘m D¨$¯'©'¯,©,°q«/Ó:¸1Ñ=ˆØ�:‰:˜Ò Ü—M‘M $¨¯©¯©°Q«Ó8¸Ñ;¸qÑ@‰Eä—}‘} T¨4¯7©7¯<©<¸«?Ó;¸AÑ>ˆHÜ—M‘M $¨¯©¯©°Q«Ó8¸Ñ;¸qÑ@ˆEÜ#Ÿ]™]¨4°·±·±¸a³ÓAÀ!ÑDˆNØ�G‰G�L‰L˜œBŸK™KÔ(ä—]‘] 5¨$¯'©'¯,©,°q«/Ó:ˆŒ
ð �:‰:˜Ò Ü—}‘} T¨4¯7©7¯<©<¸«?Ó;¸AÑ>ˆHØ�G‰G�L‰L˜œBŸK™KÔ(à ¨5Ð1ˆDØ‰Fà ¨5°.ÐAˆDØˆFà—*‘*×#Ñ#Ó%ˆá$‘V¨%ˆŒ
Ü—_‘_ W¨f°t·y±yÑ.@À&È$ÓOÐPˆ�	r   N©ÚreturnÚNone)r   r   r   Ú__doc__ÚformatÚformat_descriptionrˆ   r   r   r   rg   rg   ü   s   „ ñð €FØ1ÐôQr   rg   c                  ój   — e Zd ZdZd	d„Zej                  d
d„«       Zd
d„Zdd„Z	dd„Z
	 	 	 	 	 	 dd„Zy)Ú_BLPBaseDecoderTc                ó˜   — 	 | j                  «        | j                  «        y# t        j                  $ r}d}t	        |«      |‚d }~ww xY w)NzTruncated BLP file)éÿÿÿÿr   )Ú_read_headerÚ_loadr0   ÚerrorÚOSError)r€   ÚbufferÚer�   s       r   r{   z_BLPBaseDecoder.decode)  sH   € ð	&Ø×ÑÔØ�J‰JŒLð øô �|‰|ò 	&Ø&ˆCÜ˜#“, AÐ%ûð	&ús   ‚ # £A	¶AÁA	c                 ó   — y ©Nr   ©r€   s    r   r”   z_BLPBaseDecoder._load2  s   € àr   c                ó¬   — t        j                  d| j                  d«      «      | _        t        j                  d| j                  d«      «      | _        y )Nú<16Ié@   )r0   rv   Ú
_safe_readÚ_offsetsÚ_lengthsr›   s    r   r“   z_BLPBaseDecoder._read_header6  s8   € ÜŸ™ f¨d¯o©o¸fÓ.EÓFˆŒÜŸ™ f¨d¯o©o¸fÓ.EÓFˆ�r   c                ó^   — | j                   €J ‚t        j                  | j                   |«      S rš   )Úfdr	   rŸ   )r€   Úlengths     r   rŸ   z_BLPBaseDecoder._safe_read:  s)   € Ø�w‰wÐ"Ð"Ð"Ü×#Ñ# D§G¡G¨VÓ4Ð4r   c                óà   — g }t        d«      D ]B  }	 t        j                  d| j                  d«      «      \  }}}}|j                  ||||f«       ŒD |S # t        j                  $ r Y  |S w xY w)Né   ú<4Br*   )r/   r0   rv   rŸ   r•   Úappend)r€   r6   r%   rG   rF   rE   rD   s          r   Ú_read_palettez_BLPBaseDecoder._read_palette>  sz   € ØˆÜ�s“ò 	%ˆAðÜ#Ÿ]™]¨5°$·/±/À!Ó2DÓE‘
��1�a˜ð �J‰J˜˜1˜a �|Õ$ð	%ð ˆ
øô —<‘<ò Ùàˆ
ðús   ’*AÁA-Á,A-c                ó<  — t        «       }t        | j                  | j                  d   «      «      }	 	 t	        j
                  d|j                  d«      «      \  }||   \  }}}}	|||f}
|r|
|	fz  }
|j                  |
«       ŒQ# t        j                  $ r Y |S w xY w)Nr   ú<Br   )	r.   r   rŸ   r¡   r0   rv   rs   r•   r2   )r€   Úpaletter4   r3   Ú_datar†   rG   rF   rE   rD   Úds              r   Ú
_read_bgraz_BLPBaseDecoder._read_bgraH  s¤   € ô ‹{ˆÜ˜Ÿ™¨¯©°aÑ(8Ó9Ó:ˆØðÜ"ŸM™M¨$°·
±
¸1³Ó>‘	�ð ! ™‰JˆAˆq�!�QØ"# Q¨ ˆAÙØ�a�T‘	�Ø�K‰K˜ŒNð øô —<‘<ò Øð ˆðús   ´'B ÂBÂBN)r—   z$bytes | Image.SupportsArrayInterfacerŠ   ztuple[int, int]r‰   )r¤   ÚintrŠ   Úbytes)rŠ   úlist[tuple[int, int, int, int]])r¬   r²   r4   ÚboolrŠ   r.   )r   r   r   Ú	_pulls_fdr{   ÚabcÚabstractmethodr”   r“   rŸ   r©   r¯   r   r   r   r�   r�   &  sS   „ Ø€Ióð 	×Ñòó ðóGó5óðØ6ðØ?Cðà	ôr   r�   c                  ó   — e Zd Zdd„Zdd„Zy)ÚBLP1Decoderc                óÀ  — | j                   \  | _        | _        }| j                  t        j                  k(  r| j                  «        y | j                  dk(  re| j                  dv r4| j                  «       }| j                  ||«      }| j                  |«       y dt        | j                  «      › �}t        |«      ‚dt        | j                  «      › �}t        |«      ‚)Nr   )r*   r#   zUnsupported BLP encoding zUnsupported BLP compression )r…   Ú_compressionÚ	_encodingr   r   Ú_decode_jpeg_streamr©   r¯   Ú
set_as_rawru   r`   )r€   r4   r¬   r3   r�   s        r   r”   zBLP1Decoder._load[  s»   € Ø37·9±9Ñ0ˆÔ˜4œ>¨5à×Ñ¤§¡Ò+Ø×$Ñ$Õ&à×Ñ !Ò#Ø�~‰~ Ñ'Ø×,Ñ,Ó.�Ø—‘ w°Ó6�Ø—‘ Õ%à1´$°t·~±~Ó2FÐ1GÐH�Ü$ SÓ)Ð)à0´°d·n±nÓ1EÐ0FÐGˆCÜ  Ó%Ð%r   c                ó  — ddl m} t        j                  d| j	                  d«      «      \  }| j	                  |«      }| j
                  €J ‚| j	                  | j                  d   | j
                  j                  «       z
  «       | j	                  | j                  d   «      }||z   } |t        |«      «      }t        j                  |j                  «       |j                  dk(  rI|j                  d   \  }}}}	t        |	t         «      sJ ‚t#        j$                  ||||	d   df«      g|_        |j'                  d«      j)                  «       \  }
}}t        j*                  d|||
f«      }| j-                  |j/                  «       «       y )Nr   )ÚJpegImageFilerL   r*   r   ÚCMYKrp   )ÚJpegImagePluginr¿   r0   rv   rŸ   r£   r    Útellr¡   r   r   Ú_decompression_bomb_checkr~   Úmoder   Ú
isinstanceÚtupler	   r}   ÚconvertÚsplitÚmerger½   Útobytes)r€   r¿   Újpeg_header_sizeÚjpeg_headerr3   ÚimageÚdecoder_nameÚextentsr†   r…   rE   rF   rG   Úreversed_images                 r   r¼   zBLP1Decoder._decode_jpeg_streamm  sF  € Ý2ä$Ÿm™m¨D°$·/±/À!Ó2DÓEÑÐ	Ø—o‘oÐ&6Ó7ˆØ�w‰wÐ"Ð"Ð"Ø�‰˜Ÿ™ aÑ(¨4¯7©7¯<©<«>Ñ9Ô:Ø�‰˜tŸ}™}¨QÑ/Ó0ˆØ˜TÑ!ˆÙœg d›mÓ,ˆÜ×'Ñ'¨¯
©
Ô3Ø�:‰:˜ÒØ27·*±*¸Q±-Ñ/ˆL˜' 6¨4Ü˜d¤EÔ*Ð*Ð*ä—‘ ¨g°vÀÀQÁÈÐ?PÓQðˆEŒJð —-‘- Ó&×,Ñ,Ó.‰ˆˆ1ˆaÜŸ™ U¨Q°°1¨IÓ6ˆØ�‰˜×.Ñ.Ó0Õ1r   Nr‰   )r   r   r   r”   r¼   r   r   r   r¸   r¸   Z  s   „ ó&ô$2r   r¸   c                  ó   — e Zd Zdd„Zy)ÚBLP2Decoderc                óÜ  — | j                   \  | _        | _        }| _        | j	                  «       }| j
                  €J ‚| j
                  j                  | j                  d   «       | j                  dk(  �rB| j                  t        j                  k(  r| j                  ||«      }�n4| j                  t        j                  k(  �rÐt        «       }| j                  t        j                  k(  rp| j                  j                   dz   dz  dz  }t#        | j                  j$                  dz   dz  «      D ]'  }t'        | j)                  |«      |«      D ]  }||z  }Œ	 Œ) �n| j                  t        j*                  k(  rn| j                  j                   dz   dz  dz  }t#        | j                  j$                  dz   dz  «      D ]&  }t-        | j)                  |«      «      D ]  }||z  }Œ	 Œ( nô| j                  t        j.                  k(  rn| j                  j                   dz   dz  dz  }t#        | j                  j$                  dz   dz  «      D ]&  }t1        | j)                  |«      «      D ]  }||z  }Œ	 Œ( nidt3        | j                  «      › �}t5        |«      ‚dt3        | j                  «      › �}t5        |«      ‚d	t3        | j                  «      › �}t5        |«      ‚| j7                  |«       y )
Nr   r   r   r*   r)   rJ   zUnsupported alpha encoding zUnknown BLP encoding zUnknown BLP compression )r…   rº   r»   Ú_alpha_encodingr©   r£   rw   r    r   r   r¯   r   r.   r   r   ÚstateÚxsizer/   ÚysizerH   rŸ   r   rU   r   r^   ru   r`   r½   )r€   r4   r¬   r3   ÚlinesizeÚybr®   r�   s           r   r”   zBLP2Decoder._load„  s™  € ØIMÏÉÑFˆÔ˜4œ>¨5°$Ô2Fà×$Ñ$Ó&ˆà�w‰wÐ"Ð"Ð"Ø�‰�‰�T—]‘] 1Ñ%Ô&à×Ñ Ó!ð �~‰~¤×!6Ñ!6Ò6Ø—‘ w°Ó6’à—‘¤8§<¡<Ó/Ü “{�Ø×'Ñ'¬=×+=Ñ+=Ò=Ø $§
¡
× 0Ñ 0°1Ñ 4¸Ñ:¸QÑ>�HÜ# T§Z¡Z×%5Ñ%5¸Ñ%9¸aÑ$?Ó@ò &˜Ü!,¨T¯_©_¸XÓ-FÈÓ!Nò &˜AØ  A™I™Dñ&ò&ð ×)Ñ)¬]×-?Ñ-?Ò?Ø $§
¡
× 0Ñ 0°1Ñ 4¸Ñ:¸RÑ?�HÜ# T§Z¡Z×%5Ñ%5¸Ñ%9¸aÑ$?Ó@ò &˜Ü!,¨T¯_©_¸XÓ-FÓ!Gò &˜AØ  A™I™Dñ&ñ&ð ×)Ñ)¬]×-?Ñ-?Ò?Ø $§
¡
× 0Ñ 0°1Ñ 4¸Ñ:¸RÑ?�HÜ# T§Z¡Z×%5Ñ%5¸Ñ%9¸aÑ$?Ó@ò &˜Ü!,¨T¯_©_¸XÓ-FÓ!Gò &˜AØ  A™I™Dñ&ñ&ð 8¼¸T×=QÑ=QÓ8RÐ7SÐT�CÜ(¨Ó-Ð-à-¬d°4·>±>Ó.BÐ-CÐD�Ü$ SÓ)Ð)ð -¬T°$×2CÑ2CÓ-DÐ,EÐFˆCÜ  Ó%Ð%à�‰˜Õr   Nr‰   )r   r   r   r”   r   r   r   rÒ   rÒ   ƒ  s   „ ô,r   rÒ   c                  ó    — e Zd ZdZdd„Zdd„Zy)Ú
BLPEncoderTc           	     ó8  — d}| j                   €J ‚| j                   j                  dd«      }t        t        |«      dz  «      D ]1  }||dz  |dz   dz   \  }}}}|t	        j
                  d||||«      z  }Œ3 t        |«      dk  r|dz  }t        |«      dk  rŒ|S )Nr   ro   r*   r   r§   i   s       )ÚimÚ
getpaletter/   r-   r0   Úpack)r€   r3   r¬   r%   rE   rF   rG   rD   s           r   Ú_write_palettezBLPEncoder._write_palette¶  s°   € ØˆØ�w‰wÐ"Ð"Ð"Ø—'‘'×$Ñ$ V¨VÓ4ˆÜ”s˜7“| qÑ(Ó)ò 	3ˆAØ   Q¡¨!¨a©%°1©Ð5‰JˆAˆq�!�QØ”F—K‘K  q¨!¨Q°Ó2Ñ2‰Dð	3ô �$‹i˜'Ò!Ø�KÑˆDô �$‹i˜'Ó!àˆr   c           
     óÂ  — | j                  «       }dt        |«      z   }t        j                  d|gd¢­Ž }| j                  €J ‚| j                  j
                  \  }}|t        j                  d||z  gd¢­Ž z  }||z  }t        |«      D ]F  }t        |«      D ]6  }|t        j                  d| j                  j                  ||f«      «      z  }Œ8 ŒH t        |«      d|fS )Né”   r�   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r«   r   )rà   r-   r0   rß   rÝ   r~   r/   Úgetpixel)	r€   ÚbufsizeÚpalette_datar†   r3   ÚwÚhÚyÚxs	            r   ÚencodezBLPEncoder.encodeÁ  sâ   € Ø×*Ñ*Ó,ˆà ¤3 |Ó#4Ñ4ˆÜ�{‰{˜6 6Ð8¨YÒ8ˆà�w‰wÐ"Ð"Ð"Ø�w‰w�|‰|‰ˆˆ1Ø”—‘˜F A¨¡EÐ8¨YÒ8Ñ8ˆà�Ñˆä�q“ò 	DˆAÜ˜1“Xò D�ØœŸ™ D¨$¯'©'×*:Ñ*:¸A¸q¸6Ó*BÓCÑC‘ñDð	Dô �4‹y˜!˜TÐ!Ð!r   N)rŠ   r±   )rä   r°   rŠ   ztuple[int, int, bytes])r   r   r   Ú
_pushes_fdrà   rê   r   r   r   rÛ   rÛ   ³  s   „ Ø€Jó	ô"r   rÛ   c           
     ób  — | j                   dk7  rd}t        |«      ‚| j                  j                  d«      dk(  rdnd}|j	                  |«       | j
                  €J ‚|j	                  t        j                  dd«      «       | j
                  j                   d	k(  rdnd
}|dk(  r&|j	                  t        j                  d|«      «       n¢|j	                  t        j                  dt        j                  «      «       |j	                  t        j                  d|«      «       |j	                  t        j                  dd
«      «       |j	                  t        j                  dd
«      «       |j	                  t        j                  dg| j                  ¢­Ž «       |dk(  rJ|j	                  t        j                  dd«      «       |j	                  t        j                  dd
«      «       t        j                  | |t        j                  dd| j                  z   d
| j                   «      g«       y )NÚPzUnsupported BLP image modeÚblp_versionÚBLP1rb   rc   rj   r   ro   r   z<Lrk   rl   r#   rh   rq   )rÄ   Ú
ValueErrorÚencoderinfoÚgetÚwriter¬   r0   rß   r   r   r~   r	   Ú_saver}   )rÝ   rr   Úfilenamer�   rt   Úalpha_depths         r   rô   rô   Ô  s…  € Ø	‡w�w�#‚~Ø*ˆÜ˜‹oÐà—~‘~×)Ñ)¨-Ó8¸FÒB‰GÈ€EØ‡H�HˆU„Oà�:‰:Ð!Ð!Ð!Ø‡H�HŒV�[‰[˜˜qÓ!Ô"à—z‘z—‘¨&Ò0‘!°a€KØ�ÒØ
�‰”—‘˜T ;Ó/Õ0à
�‰”—‘˜T¤8×#8Ñ#8Ó9Ô:Ø
�‰”—‘˜T ;Ó/Ô0Ø
�‰”—‘˜T 1Ó%Ô&Ø
�‰”—‘˜T 1Ó%Ô&Ø‡H�HŒV�[‰[˜Ð) §¡Ò)Ô*Ø�ÒØ
�‰”—‘˜T 1Ó%Ô&Ø
�‰”—‘˜T 1Ó%Ô&ä‡O�O�B˜œYŸ_™_¨U°F¸R¿W¹WÑ4DÀaÈÏÉÓQÐRÕSr   z.blprï   ÚBLP2rh   )r%   r°   rŠ   ztuple[int, int, int])F)r3   r±   r4   r³   rŠ   ú1tuple[bytearray, bytearray, bytearray, bytearray])r3   r±   rŠ   rø   )rd   r±   rŠ   r³   )rÝ   zImage.Imagerr   z	IO[bytes]rõ   zstr | bytesrŠ   r‹   )'rŒ   Ú
__future__r   rµ   rx   r0   Úenumr   Úior   Útypingr   Ú r   r	   r   r   r   r&   rH   rU   r^   ÚNotImplementedErrorr`   re   rg   Ú	PyDecoderr�   r¸   rÒ   Ú	PyEncoderrÛ   rô   Úregister_openr�   Úregister_extensionÚregister_decoderÚregister_saveÚregister_encoderr   r   r   ú<module>r     sm  ðñõ> #ã 
Û 	Û Ý Ý Ý ç ôˆWô ôˆwô ô�Gô óLð
  %ð6Ø
ð6Øð6à6ó6ór2ójCôL	Ð(ô 	ó,ô'Q�9×&Ñ&ô 'QôT1�i×)Ñ)ô 1ôh&2�/ô &2ôR-�/ô -ô`"�×$Ñ$ô "óBTð6 €× Ñ �L×'Ñ'¨°wÔ ?Ø €× Ñ ˜×,Ñ,¨fÔ 5Ø €× Ñ �v˜{Ô +Ø €× Ñ �v˜{Ô +à €× Ñ �L×'Ñ'¨Ô /Ø €× Ñ �u˜jÕ )r   