§
    œ"²c{>  ã                   ó‚  — d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	 ddl
mZ  G d„ d	e¦  «        Z G d
„ de¦  «        Z G d„ de¦  «        Zd„ Zd„ Zd&d„Zd„ Zd„ Z G d„ de¦  «        Zd„ Z G d„ de	j	        ¦  «        Z G d„ de	j        ¦  «        Z G d„ de¦  «        Z G d„ de¦  «        Z G d„ d e	j        ¦  «        Zd&d!„Z ej        ej         ee¦  «          ej!        ej         d"¦  «          ej"        d#e¦  «          ej"        d$e¦  «          ej#        ej         e¦  «          ej$        d%e¦  «         dS )'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.
é    N)ÚIntEnum)ÚBytesIOé   )ÚImageÚ	ImageFile)Ú	deprecatec                   ó   — e Zd ZdZdS )ÚFormatr   N)Ú__name__Ú
__module__Ú__qualname__ÚJPEG© ó    ú4/usr/lib/python3/dist-packages/PIL/BlpImagePlugin.pyr
   r
   )   s   € € € € € Ø€D€D€Dr   r
   c                   ó   — e Zd ZdZdZdZdS )ÚEncodingr   é   é   N)r   r   r   ÚUNCOMPRESSEDÚDXTÚUNCOMPRESSED_RAW_BGRAr   r   r   r   r   -   s    € € € € € Ø€LØ
€CØÐÐÐr   r   c                   ó   — e Zd ZdZdZdZdS )ÚAlphaEncodingr   r   é   N)r   r   r   ÚDXT1ÚDXT3ÚDXT5r   r   r   r   r   3   s   € € € € € Ø€DØ€DØ€D€D€Dr   r   c                 óV  — t           dt          dt          di                     ¦   «         D ]c\  }}|                      |¦  «        rI| t          |¦  «        d …         } | |j        v r)t          |› | › �d|j        › d| › �¦  «         ||          c S Œddt          › d| › d�}t          |¦  «        ‚)	NÚBLP_FORMAT_ÚBLP_ENCODING_ÚBLP_ALPHA_ENCODING_é
   ú.zmodule 'z' has no attribute 'ú')
r
   r   r   ÚitemsÚ
startswithÚlenÚ__members__r   r   ÚAttributeError)ÚnameÚenumÚprefixÚmsgs       r   Ú__getattr__r/   9   sÎ   € å�Ý�/ÝÐ,ð÷ ‚e�g„gð		"ð 	"‰ˆˆfð
 �?Š?˜6Ñ"Ô"ð 	"Ø�˜F™œ˜˜Ô&ˆDØ�tÔ'Ð'Ð'Ý˜VÐ+ TÐ+Ð+¨R°D´MÐ1JÐ1JÀDÐ1JÐ1JÑKÔKÐKØ˜D”zÐ!Ð!Ð!øØ
:•XÐ
:Ð
:°4Ð
:Ð
:Ð
:€CÝ
˜Ñ
Ô
Ð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_565r6   H   s2   € Ø�"‰W˜Ñ Ñ" a¨1¡f°¡_¸Ñ$:¸QÀ¹XÈ!¹OÐKÐKr   Fc           	      óT  — t          | ¦  «        dz  }t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         f}t          |¦  «        D �]N}|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|||}}}n||dk    rA||k    r"d|	z  |z   dz  }d|
z  |z   dz  }d|z  |z   dz  }nN|	|z   dz  }|
|z   dz  }||z   dz  }n5|dk    r/||k    r"d|z  |	z   dz  }d|z  |
z   dz  }d|z  |z   dz  }nd	\  }}}}|r ||                              ||||g¦  «         ŒÆ||                              |||g¦  «         ŒåŒ÷�ŒP|S )
úE
    input: one "row" of data (i.e. will produce 4*width pixels)
    é   z<HHIé   r   r   éÿ   r   r   )r   r   r   r   ©r(   Ú	bytearrayÚrangeÚstructÚunpack_fromr6   Úextend)ÚdataÚalphaÚblocksÚretÚblockÚidxÚcolor0Úcolor1ÚbitsÚr0Úg0Úb0Úr1Úg1Úb1Újr5   ÚcontrolÚaÚrÚgÚbs                         r   Údecode_dxt1rW   L   s)  € õ
 �‰YŒY˜!‰^€FÝ‰;Œ;�	™œ¥Y¡[¤[µ)±+´+Ð
>€Cå�v‘”ð *-ñ *-ˆà�a‰iˆÝ%Ô1°&¸$ÀÑDÔDÑˆ�˜å Ñ'Ô'‰
ˆˆB�Ý Ñ'Ô'‰
ˆˆB�õ �q‘”ð  	-ð  	-ˆAÝ˜1‘X”Xð -ð -�ð  ™(�Ø˜q‘y�à�Ø˜a’<�<Ø  " b˜!�q�A�AØ ’\�\Ø  " b˜!�q�A�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¨ )Ñ,Ô,Ð,Ð,ð?-ñ 	-ðD €Jr   c           	      óŠ  — t          | ¦  «        dz  }t          ¦   «         t          ¦   «         t          ¦   «         t          ¦   «         f}t          |¦  «        D �]i}|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|	|
|}}}n\|dk    r|||}}}nO|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  }||                              ||||g¦  «         ŒÅŒÙ�Œk|S )r8   é   z<8Bú<HHr9   ú<Ié   r:   Fr   Té   é   r   r   r   r<   )rB   rD   rE   rF   rG   rJ   rH   rI   ÚcoderK   rL   rM   rN   rO   rP   rQ   Úhighr5   Úalphacode_indexrS   Ú
color_coderT   rU   rV   s                           r   Údecode_dxt3rc   ƒ   s>  € õ
 �‰YŒY˜"‰_€FÝ‰;Œ;�	™œ¥Y¡[¤[µ)±+´+Ð
>€Cå�v‘”ð (,ñ (,ˆØ�b‰jˆØ�S˜3 ™8�^Ô$ˆåÔ! %¨Ñ/Ô/ˆÝÔ+¨E°5¸!Ñ<Ô<‰ˆ�åÔ$ T¨5°"Ñ5Ô5‰ˆå Ñ'Ô'‰
ˆˆB�Ý Ñ'Ô'‰
ˆˆB�å�q‘”ð 	,ð 	,ˆAØˆDÝ˜1‘X”Xð ,ð ,�Ø#$ q¡5¨1¡9°Ñ"2�Ø˜Ô)�Øð Ø �DØ˜!‘G�A�Aà�DØ˜‘H�AØ�R‘�à" a¨1¨q©5°1©9¡oÑ5¸Ñ=�
à ’?�?Ø  " b˜!�q�A�AØ 1’_�_Ø  " b˜!�q�A�AØ 1’_�_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�A�AØ 1’_�_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�Aà�A”—’˜q ! Q¨˜lÑ+Ô+Ð+Ð+ð5,ñ	,ð< €Jr   c           	      ó  — 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|}nJ|dk    r|}nA||k    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|||}}}n\|dk    r|||}}}nO|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  }||                              ||||g¦  «         �Œ+�Œ?�Œ*|S )zG
    input: one "row" of data (i.e. will produce 4 * width pixels)
    rY   z<BBz<6Br   r   r9   r:   r3   é   r   r   rZ   r[   r\   r   r]   é   r;   r<   )rB   rD   rE   rF   rG   Úa0Úa1rJ   Ú
alphacode1Ú
alphacode2rH   rI   r_   rK   rL   rM   rN   rO   rP   rQ   r5   ra   Ú	alphacoderS   rb   rT   rU   rV   s                               r   Údecode_dxt5rl   ¸   sA  € õ
 �‰YŒY˜"‰_€FÝ‰;Œ;�	™œ¥Y¡[¤[µ)±+´+Ð
>€Cå�v‘”ð 9,ñ 9,ˆØ�b‰jˆØ�S˜3 ™8�^Ô$ˆåÔ# E¨5Ñ1Ô1‰ˆˆBåÔ! %¨°Ñ2Ô2ˆØ˜!”W  Q¤¨1¡Ñ-°°a´¸B±Ñ?À4ÈÄ7ÈbÁ=ÑQˆ
Ø˜!”W  Q¤¨1¡Ñ-ˆ
åÔ+¨E°5¸!Ñ<Ô<‰ˆ�åÔ$ T¨5°"Ñ5Ô5‰ˆå Ñ'Ô'‰
ˆˆB�Ý Ñ'Ô'‰
ˆˆB�å�q‘”ð (	,ñ (	,ˆAÝ˜1‘X”Xð ',ñ ',�à"# q¨1¡u¨q¡y¡/�à" bÒ(Ð(Ø!+¨Ñ!>À$Ñ F�I�IØ$¨Ò*Ð*Ø!+¨rÑ!1°zÀQ±È$Ñ6NÑ O�I�Ià!+°À"Ñ0DÑ!EÈÑ M�Ià ’>�>Ø�A�AØ !’^�^Ø�A�AØ˜"’W�WØ˜i™-¨2Ñ-°¸Q±À"Ñ0DÑDÈÑJ�A�AØ !’^�^Ø�A�AØ !’^�^Ø�A�Aà˜i™-¨2Ñ-°¸Q±À"Ñ0DÑDÈÑJ�Aà" a¨1¨q©5°1©9¡oÑ5¸Ñ=�
à ’?�?Ø  " b˜!�q�A�AØ 1’_�_Ø  " b˜!�q�A�AØ 1’_�_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�A�AØ 1’_�_Ø˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�AØ˜R™ "™¨Ñ*�Aà�A”—’˜q ! Q¨˜lÑ+Ô+Ð+Ñ+ñO',ñ(	,ðT €Jr   c                   ó   — e Zd ZdS )ÚBLPFormatErrorN)r   r   r   r   r   r   rn   rn   þ   s   € € € € € Ø€Dr   rn   c                 ó   — | d d…         dv S )Nr:   ©ó   BLP1ó   BLP2r   )r-   s    r   Ú_acceptrs     s   € Ø�"�1�"Œ:Ð+Ð+Ð+r   c                   ó    — e Zd ZdZdZdZd„ ZdS )ÚBlpImageFilez 
    Blizzard Mipmap Format
    ÚBLPzBlizzard Mipmap Formatc                 óŽ  — | j                              d¦  «        | _        | j                              dt          j        ¦  «         t          j        d| j                              d¦  «        ¦  «        \  | _        | j                              dt          j        ¦  «         t          j        d| j                              d¦  «        ¦  «        | _	        | j        dv r| j         
                    ¦   «         }n&d	t          | j        ¦  «        › �}t          |¦  «        ‚| j        rd
nd| _        |d| j        z   d| j        ddffg| _        d S )Nr:   r3   ú<br   r   ú<IIr9   rp   zBad BLP magic ÚRGBAÚRGB©r   r   r   )ÚfpÚreadÚmagicÚseekÚosÚSEEK_CURr?   ÚunpackÚ_blp_alpha_depthÚ_sizeÚdecodeÚreprrn   ÚmodeÚsizeÚtile)ÚselfÚdecoderr.   s      r   Ú_openzBlpImageFile._open  s	  € Ø”W—\’\ !‘_”_ˆŒ
àŒ�Š�Q�œÑ$Ô$Ð$Ý#)¤=°°t´w·|²|ÀA±´Ñ#GÔ#GÑ ˆÔ	àŒ�Š�Q�œÑ$Ô$Ð$Ý”] 5¨$¬'¯,ª,°q©/¬/Ñ:Ô:ˆŒ
àŒ:Ð+Ð+Ð+Ø”j×'Ò'Ñ)Ô)ˆGˆGà5¥4¨¬
Ñ#3Ô#3Ð5Ð5ˆCÝ  Ñ%Ô%Ð%à"Ô3Ð>�F�F¸ˆŒ	Ø˜v¨¬	Ñ1°1°t´yÀ!ÀQÐ6GÐHÐIˆŒ	ˆ	ˆ	r   N)r   r   r   Ú__doc__ÚformatÚformat_descriptionr�   r   r   r   ru   ru     s?   € € € € € ðð ð €FØ1ÐðJð Jð Jð Jð Jr   ru   c                   ó0   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú_BLPBaseDecoderTc                 ó¬   — 	 |                       ¦   «          |                      ¦   «          n)# t          j        $ r}d}t	          |¦  «        |‚d }~ww xY wdS )NzTruncated BLP file)éÿÿÿÿr   )Ú_read_blp_headerÚ_loadr?   ÚerrorÚOSError)r‹   ÚbufferÚer.   s       r   r†   z_BLPBaseDecoder.decode$  sc   € ð	&Ø×!Ò!Ñ#Ô#Ð#Ø�JŠJ‰LŒLˆLˆLøÝŒ|ð 	&ð 	&ð 	&Ø&ˆCÝ˜#‘,”, AÐ%øøøøð	&øøøð ˆus   ‚(+ «AºAÁAc                 óÜ  — | j                              d¦  «         t          j        d|                      d¦  «        ¦  «        \  | _        t          j        d|                      d¦  «        ¦  «        \  | _        t          j        d|                      d¦  «        ¦  «        \  | _        t          j        d|                      d¦  «        ¦  «        \  | _        | j                              dt          j
        ¦  «         t          j        d|                      d¦  «        ¦  «        | _        t          | t          ¦  «        rTt          j        d|                      d¦  «        ¦  «        \  | _        | j                              dt          j
        ¦  «         t          j        d|                      d¦  «        ¦  «        | _        t          j        d|                      d¦  «        ¦  «        | _        d S )	Nr:   ú<irx   r   ry   r9   ú<16Ié@   )Úfdr€   r?   rƒ   Ú
_safe_readÚ_blp_compressionÚ_blp_encodingr„   Ú_blp_alpha_encodingr�   r‚   r‰   Ú
isinstanceÚBLP1DecoderÚ_blp_offsetsÚ_blp_lengths)r‹   s    r   r•   z _BLPBaseDecoder._read_blp_header-  si  € ØŒ�Š�Q‰ŒˆÝ#)¤=°°t·²ÀqÑ7IÔ7IÑ#JÔ#JÑ ˆÔ	å &¤¨d°D·O²OÀAÑ4FÔ4FÑ GÔ GÑˆÔ	Ý#)¤=°°t·²ÀqÑ7IÔ7IÑ#JÔ#JÑ ˆÔ	Ý&,¤m°D¸$¿/º/È!Ñ:LÔ:LÑ&MÔ&MÑ#ˆÔ	!ØŒ�Š�Q�œÑ$Ô$Ð$å”M %¨¯ª¸Ñ);Ô);Ñ<Ô<ˆŒ	å�d�KÑ(Ô(ð 	)å$*¤M°$¸¿ºÈÑ8JÔ8JÑ$KÔ$KÑ!ˆTÔØŒG�LŠL˜�BœKÑ(Ô(Ð(å"œM¨&°$·/²/À&Ñ2IÔ2IÑJÔJˆÔÝ"œM¨&°$·/²/À&Ñ2IÔ2IÑJÔJˆÔÐÐr   c                 ó6   — t          j        | j        |¦  «        S )N)r   r    rŸ   )r‹   Úlengths     r   r    z_BLPBaseDecoder._safe_read@  s   € ÝÔ# D¤G¨VÑ4Ô4Ð4r   c                 óê   — g }t          d¦  «        D ]`}	 t          j        d|                      d¦  «        ¦  «        \  }}}}n# t          j        $ r Y  nw xY w|                     ||||f¦  «         Œa|S )Né   ú<4Br:   )r>   r?   rƒ   r    r—   Úappend)r‹   rE   r5   rV   rU   rT   rS   s          r   Ú_read_palettez_BLPBaseDecoder._read_paletteC  sŽ   € ØˆÝ�s‘”ð 	%ð 	%ˆAðÝ#œ]¨5°$·/²/À!Ñ2DÔ2DÑEÔE‘
��1�a˜˜øÝ”<ð ð ð Ø��ðøøøà�JŠJ˜˜1˜a �|Ñ$Ô$Ð$Ð$Øˆ
s   •-AÁAÁAc                 ój  — t          ¦   «         }t          |                      | j        d         ¦  «        ¦  «        }	 	 t	          j        d|                     d¦  «        ¦  «        \  }n# t          j        $ r Y n9w xY w||         \  }}}}|||f}	| j        r|	|fz  }	| 	                    |	¦  «         Œv|S )Nr   Tú<Br   )
r=   r   r    r§   r?   rƒ   r~   r—   r„   rA   )
r‹   ÚpaletterB   Ú_dataÚoffsetrV   rU   rT   rS   Úds
             r   Ú
_read_bgraz_BLPBaseDecoder._read_bgraM  sÄ   € Ý‰{Œ{ˆÝ˜Ÿš¨Ô(9¸!Ô(<Ñ=Ô=Ñ>Ô>ˆð		ðÝ"œM¨$°·
²
¸1±´Ñ>Ô>‘	��øÝ”<ð ð ð Ø�ðøøøà  œ‰JˆAˆq�!�QØ�A�q�	ˆAØÔ$ð Ø�a�T‘	�Ø�KŠK˜‰NŒNˆNð		ð ˆs   ¾*A) Á)A;Á:A;N)	r   r   r   Ú	_pulls_fdr†   r•   r    r®   rµ   r   r   r   r’   r’   !  sg   € € € € € Ø€Iðð ð ðKð Kð Kð&5ð 5ð 5ðð ð ðð ð ð ð r   r’   c                   ó   — e Zd Zd„ Zd„ ZdS )r¥   c                 ó²  — | j         t          j        k    r|                      ¦   «          d S | j         dk    r|| j        dv rM|                      ¦   «         }|                      |¦  «        }|                      t          |¦  «        ¦  «         d S dt          | j        ¦  «        › �}t          |¦  «        ‚dt          | j        ¦  «        › �}t          |¦  «        ‚)Nr   )r:   r3   zUnsupported BLP encoding zUnsupported BLP compression )r¡   r
   r   Ú_decode_jpeg_streamr¢   r®   rµ   Ú
set_as_rawÚbytesr‡   rn   )r‹   r±   rB   r.   s       r   r–   zBLP1Decoder._load^  sÒ   € ØÔ ¥F¤KÒ/Ð/Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&àÔ" aÒ'Ð'ØÔ! VÐ+Ð+Ø×,Ò,Ñ.Ô.�Ø—’ wÑ/Ô/�Ø—’¥ d¡¤Ñ,Ô,Ð,Ð,Ð,àLµ$°tÔ7IÑ2JÔ2JÐLÐL�Ý$ SÑ)Ô)Ð)àKµ°dÔ6HÑ1IÔ1IÐKÐKˆCÝ  Ñ%Ô%Ð%r   c                 óê  — ddl m} t          j        d|                      d¦  «        ¦  «        \  }|                      |¦  «        }|                      | j        d         | j                             ¦   «         z
  ¦  «         |                      | j        d         ¦  «        }||z   }t          |¦  «        } ||¦  «        }t          j        |j        ¦  «         |j        dk    r&|j        d         \  }}}}	||||	d         dffg|_        |                     d¦  «                             ¦   «         \  }
}}t          j        d|||
f¦  «        }|                      |                     ¦   «         ¦  «         d S )Nr   )ÚJpegImageFiler[   r:   r   ÚCMYKr{   )ÚJpegImagePluginr½   r?   rƒ   r    r¦   rŸ   Útellr§   r   r   Ú_decompression_bomb_checkr‰   rˆ   rŠ   ÚconvertÚsplitÚmergerº   Útobytes)r‹   r½   Újpeg_header_sizeÚjpeg_headerrB   ÚimageÚdecoder_nameÚextentsr³   ÚargsrT   rU   rV   s                r   r¹   zBLP1Decoder._decode_jpeg_streamn  sW  € Ø2Ð2Ð2Ð2Ð2Ð2å$œm¨D°$·/²/À!Ñ2DÔ2DÑEÔEÑÐ	Ø—o’oÐ&6Ñ7Ô7ˆØ�Š˜Ô)¨!Ô,¨t¬w¯|ª|©~¬~Ñ=Ñ>Ô>Ð>Ø�Š˜tÔ0°Ô3Ñ4Ô4ˆØ˜TÑ!ˆÝ�t‰}Œ}ˆØ�˜dÑ#Ô#ˆÝÔ'¨¬
Ñ3Ô3Ð3ØŒ:˜ÒÐØ27´*¸Q´-Ñ/ˆL˜' 6¨4Ø'¨°&¸4À¼7ÀFÐ:KÐLÐMˆEŒJØ—-’- Ñ&Ô&×,Ò,Ñ.Ô.‰ˆˆ1ˆaÝ”˜E A q¨! 9Ñ-Ô-ˆØ�Š˜Ÿš™œÑ(Ô(Ð(Ð(Ð(r   N)r   r   r   r–   r¹   r   r   r   r¥   r¥   ]  s2   € € € € € ð&ð &ð &ð )ð )ð )ð )ð )r   r¥   c                   ó   — e Zd Zd„ ZdS )ÚBLP2Decoderc                 óX  — |                       ¦   «         }| j                             | j        d         ¦  «         | j        dk    �r| j        t          j        k    r|                      |¦  «        }�n| j        t          j	        k    �r´t          ¦   «         }| j        t          j        k    ry| j        d         dz   dz  dz  }t          | j        d         dz   dz  ¦  «        D ]@}t!          |                      |¦  «        t%          | j        ¦  «        ¬¦  «        D ]}||z  }ŒŒA�nd| j        t          j        k    rd| j        d         dz   dz  dz  }t          | j        d         dz   dz  ¦  «        D ],}t+          |                      |¦  «        ¦  «        D ]}||z  }ŒŒ-në| j        t          j        k    rd| j        d         dz   dz  dz  }t          | j        d         dz   dz  ¦  «        D ],}t/          |                      |¦  «        ¦  «        D ]}||z  }ŒŒ-nrdt1          | j        ¦  «        › �}t3          |¦  «        ‚d	t1          | j        ¦  «        › �}t3          |¦  «        ‚d
t1          | j        ¦  «        › �}t3          |¦  «        ‚|                      t7          |¦  «        ¦  «         d S )Nr   r   r   r:   r9   )rC   rY   zUnsupported alpha encoding zUnknown BLP encoding zUnknown BLP compression )r®   rŸ   r€   r¦   r¡   r¢   r   r   rµ   r   r=   r£   r   r   r‰   r>   rW   r    Úboolr„   r   rc   r   rl   r‡   rn   rº   r»   )r‹   r±   rB   ÚlinesizeÚybr´   r.   s          r   r–   zBLP2Decoder._load‚  sÍ  € Ø×$Ò$Ñ&Ô&ˆàŒ�Š�TÔ& qÔ)Ñ*Ô*Ð*àÔ  AÒ%Ñ%ð Ô!¥XÔ%:Ò:Ð:Ø—’ wÑ/Ô/�‘àÔ#¥x¤|Ò3Ñ3Ý ‘{”{�ØÔ+­}Ô/AÒAÐAØ $¤	¨!¤¨qÑ 0°QÑ6¸Ñ:�HÝ# T¤Y¨q¤\°AÑ%5¸!Ñ$;Ñ<Ô<ð &ð &˜Ý!,Ø ŸOšO¨HÑ5Ô5½TÀ$ÔBWÑ=XÔ=Xð"ñ "ô "ð &ð &˜Að ! A™I˜D˜Dð&ñ&ð Ô-µÔ1CÒCÐCØ $¤	¨!¤¨qÑ 0°QÑ6¸Ñ;�HÝ# T¤Y¨q¤\°AÑ%5¸!Ñ$;Ñ<Ô<ð &ð &˜Ý!,¨T¯_ª_¸XÑ-FÔ-FÑ!GÔ!Gð &ð &˜AØ  A™I˜D˜Dð&ð&ð Ô-µÔ1CÒCÐCØ $¤	¨!¤¨qÑ 0°QÑ6¸Ñ;�HÝ# T¤Y¨q¤\°AÑ%5¸!Ñ$;Ñ<Ô<ð &ð &˜Ý!,¨T¯_ª_¸XÑ-FÔ-FÑ!GÔ!Gð &ð &˜AØ  A™I˜D˜Dð&ð&ð Y½¸TÔ=UÑ8VÔ8VÐXÐX�CÝ(¨Ñ-Ô-Ð-àH­d°4Ô3EÑ.FÔ.FÐHÐH�Ý$ SÑ)Ô)Ð)ð K­T°$Ô2GÑ-HÔ-HÐJÐJˆCÝ  Ñ%Ô%Ð%à�Š�˜d™œÑ$Ô$Ð$Ð$Ð$r   N)r   r   r   r–   r   r   r   rÍ   rÍ   �  s#   € € € € € ð+%ð +%ð +%ð +%ð +%r   rÍ   c                   ó   — e Zd ZdZd„ Zd„ ZdS )Ú
BLPEncoderTc           	      óÊ   — d}| j                              dd¦  «        }t          d¦  «        D ]5}||dz  |dz   dz  …         \  }}}}|t          j        d||||¦  «        z  }Œ6|S )Nr   rz   r«   r:   r   r¬   )ÚimÚ
getpaletter>   r?   Úpack)r‹   rB   r±   r5   rT   rU   rV   rS   s           r   Ú_write_palettezBLPEncoder._write_palette³  sy   € ØˆØ”'×$Ò$ V¨VÑ4Ô4ˆÝ�s‘”ð 	3ð 	3ˆAØ   Q¡¨!¨a©%°1©Ð!4Ô5‰JˆAˆq�!�QØ•F”K  q¨!¨Q°Ñ2Ô2Ñ2ˆDˆDØˆr   c           
      óž  — |                       ¦   «         }dt          |¦  «        z   }t          j        d|gd¢R Ž }| j        j        \  }}|t          j        d||z  gd¢R Ž z  }||z  }t          |¦  «        D ]F}t          |¦  «        D ]4}|t          j        d| j                             ||f¦  «        ¦  «        z  }Œ5ŒGt          |¦  «        d|fS )Né”   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>   Úgetpixel)	r‹   ÚbufsizeÚpalette_datar³   rB   ÚwÚhÚyÚxs	            r   ÚencodezBLPEncoder.encode»  sì   € Ø×*Ò*Ñ,Ô,ˆà ¥3 |Ñ#4Ô#4Ñ4ˆÝŒ{˜6 6Ð8¨YÐ8Ð8Ð8ˆàŒwŒ|‰ˆˆ1Ø•”˜F A¨¡EÐ8¨YÐ8Ð8Ð8Ñ8ˆà�Ñˆå�q‘”ð 	Dð 	DˆAÝ˜1‘X”Xð Dð D�Ø�œ D¨$¬'×*:Ò*:¸A¸q¸6Ñ*BÔ*BÑCÔCÑC��ðDõ �4‰yŒy˜!˜TÐ!Ð!r   N)r   r   r   Ú
_pushes_fdrØ   râ   r   r   r   rÓ   rÓ   °  s7   € € € € € Ø€Jðð ð ð"ð "ð "ð "ð "r   rÓ   c                 óÄ  — | j         dk    rd}t          |¦  «        ‚| j                             d¦  «        dk    rdnd}|                     |¦  «         |                     t          j        dd¦  «        ¦  «         |                     t          j        d	t          j        ¦  «        ¦  «         |                     t          j        d	| j	        j         d
k    rdnd¦  «        ¦  «         |                     t          j        d	d¦  «        ¦  «         |                     t          j        d	d¦  «        ¦  «         |                     t          j        dg| j
        ¢R Ž ¦  «         |dk    rP|                     t          j        dd¦  «        ¦  «         |                     t          j        dd¦  «        ¦  «         t          j        | |dd| j
        z   d| j         fg¦  «         d S )NÚPzUnsupported BLP image modeÚblp_versionÚBLP1rq   rr   rœ   r   rx   rz   r   ry   r3   rv   r|   )rˆ   Ú
ValueErrorÚencoderinfoÚgetÚwriter?   r×   r   r   r±   r‰   r   Ú_save)rÕ   r}   ÚfilenameÚsave_allr.   r   s         r   rì   rì   Í  s—  € Ø	„w�#‚~€~Ø*ˆÝ˜‰oŒoÐà”~×)Ò)¨-Ñ8Ô8¸FÒBÐBˆGˆGÈ€EØ‡H‚HˆU�O„O€Oà‡H‚H�VŒ[˜˜qÑ!Ô!Ñ"Ô"Ð"Ø‡H‚H�VŒ[˜�xÔ4Ñ5Ô5Ñ6Ô6Ð6Ø‡H‚H�VŒ[˜ B¤J¤O°vÒ$=Ð$=˜q˜qÀ1ÑEÔEÑFÔFÐFØ‡H‚H�VŒ[˜˜qÑ!Ô!Ñ"Ô"Ð"Ø‡H‚H�VŒ[˜˜qÑ!Ô!Ñ"Ô"Ð"Ø‡H‚H�VŒ[˜Ð) ¤Ð)Ð)Ð)Ñ*Ô*Ð*Ø�ÒÐØ
�Š•”˜T 1Ñ%Ô%Ñ&Ô&Ð&Ø
�Š•”˜T 1Ñ%Ô%Ñ&Ô&Ð&å„O�B˜˜e V¨b¬gÑ%5°q¸"¼'ÐBÐCÑDÔDÐDÐDÐDr   z.blprç   ÚBLP2rv   )F)%rŽ   r�   r?   r,   r   Úior   Ú r   r   Ú
_deprecater   r
   r   r   r/   r6   rW   rc   rl   ÚNotImplementedErrorrn   rs   ru   Ú	PyDecoderr’   r¥   rÍ   Ú	PyEncoderrÓ   rì   Úregister_openr�   Úregister_extensionÚregister_decoderÚregister_saveÚregister_encoderr   r   r   ú<module>rû      s  ððð ð> 
€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ˆWñ ô ð ðð ð ð ð ˆwñ ô ð ðð ð ð ð �Gñ ô ð ðð ð ðLð Lð Lð4ð 4ð 4ð 4ðn2ð 2ð 2ðjCð Cð CðL	ð 	ð 	ð 	ð 	Ð(ñ 	ô 	ð 	ð,ð ,ð ,ðJð Jð Jð Jð J�9Ô&ñ Jô Jð Jð69ð 9ð 9ð 9ð 9�iÔ)ñ 9ô 9ð 9ðx!)ð !)ð !)ð !)ð !)�/ñ !)ô !)ð !)ðH,%ð ,%ð ,%ð ,%ð ,%�/ñ ,%ô ,%ð ,%ð^"ð "ð "ð "ð "�Ô$ñ "ô "ð "ð:Eð Eð Eð Eð* €Ô �LÔ'¨°wÑ ?Ô ?Ð ?Ø €Ô ˜Ô,¨fÑ 5Ô 5Ð 5Ø €Ô �v˜{Ñ +Ô +Ð +Ø €Ô �v˜{Ñ +Ô +Ð +à €Ô �LÔ'¨Ñ /Ô /Ð /Ø €Ô �u˜jÑ )Ô )Ð )Ð )Ð )r   