Ë
    àU.j¾z  ã                   óR  — d Z ddlmZmZmZ ddlmZmZmZ	m
Z ddlmZmZmZ ddlZ ej$                  e«      ZddlmZ ddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z# ddl$m%Z% g d	¢Z& e!d
«      Z' e!d«      Z( e!d«      Z) e!d«      Z*e' e!d«      z   Z+ e!d«      Z, e!d«      Z- e!d«      Z. e ed«      «      Z/dZ0dZ1dZ2 e3 ee/«      «      Z4d)d„Z5d„ Z6d„ Z7dZ8dZ9dZ:d„ Z;d„ Z<d„ Z
 e5ddd œ«      Z=e2d!z  Z>d"„ Z G d#„ d$e?«      Z@ G d%„ d&e@«      ZA eAe)«      ZB eAe)d'¬(«      ZC eAe*d'¬(«      ZDy)*zC
passlib.utils.binary - binary data encoding/decoding/manipulation
é    )Úabsolute_importÚdivisionÚprint_function)Ú	b64encodeÚ	b64decodeÚ	b32decodeÚ	b32encode)Ú
b2a_base64Ú
a2b_base64ÚErrorN)Úexc)ÚPY3Úbascii_to_strÚirangeÚimapÚiter_byte_charsÚjoin_byte_valuesÚjoin_byte_elemsÚ
nextgetterÚsuppress_causeÚuÚunicodeÚunicode_or_bytes_types)Úmemoized_property)ÚBASE64_CHARSÚPADDED_BASE64_CHARSÚ
AB64_CHARSÚHASH64_CHARSÚBCRYPT_CHARSÚ	HEX_CHARSÚLOWER_HEX_CHARSÚUPPER_HEX_CHARSÚALL_BYTE_VALUESÚcompile_byte_translationÚab64_encodeÚab64_decodeÚb64s_encodeÚb64s_decoder	   r   ÚBase64EngineÚLazyBase64EngineÚh64Úh64bigÚbcrypt64z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/z@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789./z@./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzz@./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789Ú=Ú0123456789abcdefABCDEFÚ0123456789ABCDEFÚ0123456789abcdefé   ó    ó    ó   =c                 óÞ  — |€
t         dd }n4t        |t        «      rt        |«      dk(  sJ ‚t	        t        |«      «      }| j                  «       D ]†  \  }}t        |t        «      rt        |«      }t        |t        «      rd|cxk  rdk  sJ ‚ J ‚t        |t        «      r|j                  d«      }t        |t        «      rt        |«      dk(  sJ ‚|||<   Œˆ t        j                  |«      S )aÖ  
    return a 256-byte string for translating bytes using specified mapping.
    bytes not specified by mapping will be left alone.

    :param mapping:
        dict mapping input byte (str or int) -> output byte (str or int).

    :param source:
        optional existing byte translation string to use as base.
        (must be 255-length byte string).  defaults to identity mapping.

    :returns:
        255-length byte string for passing to bytes().translate.
    Néÿ   r   r2   Úasciié   )Ú_TRANSLATE_SOURCEÚ
isinstanceÚbytesÚlenÚlistr   Úitemsr   ÚordÚintr   ÚencodeÚB_EMPTYÚjoin)ÚmappingÚsourceÚtargetÚkÚvs        úVC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\passlib/utils/binary.pyr$   r$   n   sÓ   € ð €~Ü"¡1Ð%‰ä˜&¤%Ô(¬S°«[¸CÒ-?Ð?Ð?Ü”o fÓ-Ó.ˆØ—‘–‰ˆˆ1Ü�aÔ/Ô0Ü�A“ˆAÜ˜!œSÔ! a¨1¤l¨s¢lÐ2Ð2 lÐ2Ð2Ü�aœÔ!Ø—‘˜Ó!ˆAÜ˜!œUÔ#¬¨A«°!ªÐ3Ð3ØˆˆqŠ	ð  ô �<‰<˜ÓÐr3   c                 ó>   — t        | «      j                  t        «      S )zr
    encode using shortened base64 format which omits padding & whitespace.
    uses default ``+/`` altchars.
    )r
   ÚrstripÚ_BASE64_STRIP©Údatas    rJ   r'   r'   �   s   € ô
 �dÓ×"Ñ"¤=Ó1Ð1r3   c                 ód  — t        | t        «      r	 | j                  d«      } t        | «      dz  }|dk(  rn)|dk(  r
| t        z  } n|dk(  r
| t        z  } nt        d«      ‚	 t        | «      S # t        $ r t	        t        d«      «      ‚w xY w# t        $ r}t	        t        |«      «      ‚d}~ww xY w)zq
    decode from shortened base64 format which omits padding & whitespace.
    uses default ``+/`` altchars.
    r8   ú4string argument should contain only ASCII charactersé   r   é   zinvalid base64 inputN)r;   r   rB   ÚUnicodeEncodeErrorr   Ú
ValueErrorr=   Ú_BASE64_PAD2Ú_BASE64_PAD1r   Ú_BinAsciiErrorÚ	TypeError)rO   ÚoffÚerrs      rJ   r(   r(   –   s½   € ô
 �$œÔ ð	eØ—;‘;˜wÓ'ˆDô ˆd‹)�a‰-€CØ
ˆa‚xØØ	�ŠØ”Ñ‰Ø	�ŠØ”Ñ‰äÐ/Ó0Ð0ð-Ü˜$ÓÐøô "ò 	eÜ ¤Ð,bÓ!cÓdÐdð	eûô ò -ÜœY s›^Ó,Ð,ûð-ús#   ’A, Á!
B Á,B
Â	B/ÂB*Â*B/s   =
s   ==c                 ó8   — t        | «      j                  dd«      S )z®
    encode using shortened base64 format which omits padding & whitespace.
    uses custom ``./`` altchars.

    it is primarily used by Passlib's custom pbkdf2 hashes.
    ó   +ó   .)r'   ÚreplacerN   s    rJ   r%   r%   ¹   s   € ô �tÓ×$Ñ$ T¨4Ó0Ð0r3   c                 ó¾   — t        | t        «      r	 | j                  d«      } t        | j                  dd«      «      S # t        $ r t	        t        d«      «      ‚w xY w)zã
    decode from shortened base64 format which omits padding & whitespace.
    uses custom ``./`` altchars, but supports decoding normal ``+/`` altchars as well.

    it is primarily used by Passlib's custom pbkdf2 hashes.
    r8   rQ   r^   r]   )r;   r   rB   rT   r   rU   r(   r_   rN   s    rJ   r&   r&   Â   s^   € ô �$œÔ ð	eØ—;‘;˜wÓ'ˆDô �t—|‘| D¨$Ó/Ó0Ð0øô "ò 	eÜ ¤Ð,bÓ!cÓdÐdð	eús	   ’> ¾Ac                 óP   — t        t        | «      j                  t        «      «      S )zh
    wrapper around :func:`base64.b32encode` which strips padding,
    and returns a native string.
    )r   Ú
_b32encoderL   ÚB_EQUAL)rF   s    rJ   r	   r	   Õ   s   € ô œ FÓ+×2Ñ2´7Ó;Ó<Ð<r3   ÚBÚO)Ú8Ú0é   c                 óÀ   — t        | t        «      r| j                  d«      } | j                  t        «      } t        | «      dz  }|r| t        d|  z  } t        | d«      S )z„
    wrapper around :func:`base64.b32decode`
    which handles common mistyped chars.
    padding optional, ignored if present.
    r8   é   NT)r;   r   rB   Ú	translateÚ_b32_translater=   Ú_b32_decode_padÚ
_b32decode)rF   Ú	remainders     rJ   r   r   å   sa   € ô �&œ'Ô"Ø—‘˜wÓ'ˆØ×ÑœnÓ-€Fô �F“˜cÑ!€IÙØ”/ + I :Ð.Ñ.ˆô �f˜dÓ#Ð#r3   c                   óê   — e Zd ZdZdZdZdZdZdZdZ	dd„Z
ed„ «       Zd„ Zd„ Zd„ Zd„ Zd	„ Zd
„ Zd„ Zed„ «       Zed„ «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&y)r)   ac  Provides routines for encoding/decoding base64 data using
    arbitrary character mappings, selectable endianness, etc.

    :arg charmap:
        A string of 64 unique characters,
        which will be used to encode successive 6-bit chunks of data.
        A character's position within the string should correspond
        to its 6-bit value.

    :param big:
        Whether the encoding should be big-endian (default False).

    .. note::
        This class does not currently handle base64's padding characters
        in any way what so ever.

    Raw Bytes <-> Encoded Bytes
    ===========================
    The following methods convert between raw bytes,
    and strings encoded using the engine's specific base64 variant:

    .. automethod:: encode_bytes
    .. automethod:: decode_bytes
    .. automethod:: encode_transposed_bytes
    .. automethod:: decode_transposed_bytes

    ..
        .. automethod:: check_repair_unused
        .. automethod:: repair_unused

    Integers <-> Encoded Bytes
    ==========================
    The following methods allow encoding and decoding
    unsigned integers to and from the engine's specific base64 variant.
    Endianess is determined by the engine's ``big`` constructor keyword.

    .. automethod:: encode_int6
    .. automethod:: decode_int6

    .. automethod:: encode_int12
    .. automethod:: decode_int12

    .. automethod:: encode_int24
    .. automethod:: decode_int24

    .. automethod:: encode_int64
    .. automethod:: decode_int64

    Informational Attributes
    ========================
    .. attribute:: charmap

        unicode string containing list of characters used in encoding;
        position in string matches 6bit value of character.

    .. attribute:: bytemap

        bytes version of :attr:`charmap`

    .. attribute:: big

        boolean flag indicating this using big-endian encoding.
    Nc                 ó.  — t        |t        «      r|j                  d«      }n&t        |t        «      st	        j
                  |d«      ‚t        |«      dk7  rt        d«      ‚t        t        |«      «      dk7  rt        d«      ‚|| _	        |j                  | _        t        d„ t        |«      D «       «      }|j                  | _        || _        |r#| j                   | _        | j$                  | _        y | j(                  | _        | j*                  | _        y )Núlatin-1Úcharmapé@   z'charmap must be 64 characters in lengthz-charmap must not contain duplicate charactersc              3   ó*   K  — | ]  \  }}||f–— Œ y ­w©N© )Ú.0ÚidxÚvalues      rJ   Ú	<genexpr>z(Base64Engine.__init__.<locals>.<genexpr>]  s   è ø€ ÐHÑ5G¡z s¨E�u˜c”lÑ5Gùs   ‚)r;   r   rB   r<   r   ÚExpectedStringErrorr=   rU   ÚsetÚbytemapÚ__getitem__Ú	_encode64ÚdictÚ	enumerateÚ	_decode64ÚbigÚ_encode_bytes_bigÚ_encode_bytesÚ_decode_bytes_bigÚ_decode_bytesÚ_encode_bytes_littleÚ_decode_bytes_little)Úselfrs   r„   Úlookups       rJ   Ú__init__zBase64Engine.__init__Q  sæ   € ä�gœwÔ'Ø—n‘n YÓ/‰GÜ˜G¤UÔ+Ü×)Ñ)¨'°9Ó=Ð=Üˆw‹<˜2ÒÜÐFÓGÐGÜŒs�7‹|Ó Ò"ÜÐLÓMÐMØˆŒØ ×,Ñ,ˆŒÜÑH´Y¸wÔ5GÓHÓHˆØ×+Ñ+ˆŒð ˆŒÙØ!%×!7Ñ!7ˆDÔØ!%×!7Ñ!7ˆDÕà!%×!:Ñ!:ˆDÔØ!%×!:Ñ!:ˆDÕr3   c                 ó8   — | j                   j                  d«      S )zcharmap as unicoderr   )r~   Údecode)r‹   s    rJ   rs   zBase64Engine.charmaps  s   € ð �|‰|×"Ñ" 9Ó-Ð-r3   c                 óB  — t        |t        «      st        dt        |«      ›�«      ‚t	        t        |«      d«      \  }}t        rt        t        |«      «      }nt        d„ |D «       «      }| j                  |||«      }t        t        | j                  |«      «      }|S )z‹encode bytes to base64 string.

        :arg source: byte string to encode.
        :returns: byte string containing encoded data.
        úsource must be bytes, not rR   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrv   )r@   )rx   Úelems     rJ   r{   z,Base64Engine.encode_bytes.<locals>.<genexpr>‡  s   è ø€ Ð#A¹&°$¤C¨§I¹&ùs   ‚)r;   r<   rY   ÚtypeÚdivmodr=   r   r   Úiterr†   r   r   r€   )r‹   rF   ÚchunksÚtailÚ
next_valueÚgenÚouts          rJ   Úencode_byteszBase64Engine.encode_bytes{  s…   € ô ˜&¤%Ô(Ý¼dÀ6¼lÐLÓMÐMÜœc &›k¨1Ó-‰ˆ�ÝÜ#¤D¨£LÓ1‰Jä#Ñ#A¹&Ó#AÓAˆJØ× Ñ  ¨V°TÓ:ˆÜœd 4§>¡>°3Ó7Ó8ˆð
 ˆ
r3   c              #   óJ  K  — d}||k  rN |«       } |«       } |«       }|dz  –— |dz  dz  |dz	  z  –— |dz  dz  |dz	  z  –— |dz	  –— |dz  }||k  rŒN|rH |«       }|dk(  r|dz  –— |dz	  –— y	|dk(  sJ ‚ |«       }|dz  –— |dz  dz  |dz	  z  –— |dz	  –— y	y	­w)
z>helper used by encode_bytes() to handle little-endian encodingr   é?   é   rS   é   rR   é   r9   Nrw   ©r‹   r™   r—   r˜   ry   Úv1Úv2Úv3s           rJ   r‰   z!Base64Engine._encode_bytes_little�  sá   è ø€ ð ˆØ�FŠlÙ“ˆBÙ“ˆBÙ“ˆBØ�t‘)ŠOØ˜‘I ‘> B¨¡EÑ*Ò*Ø˜‘I ‘> B¨¡EÑ*Ò*Ø�a‘%ŠKØ�1‰HˆCð �F‹lñ Ù“ˆBØ�qŠyà˜4‘i’Ø˜!‘e“à˜q’yÐ �yá“\�Ø˜4‘i’Ø˜T™	 A‘~¨¨A©Ñ.Ò.Ø˜!‘e“ð ùs   ‚AB#ÁAB#c              #   óV  K  — d}||k  rN |«       } |«       } |«       }|dz	  –— |dz  dz  |dz	  z  –— |dz  dz  |dz	  z  –— |dz  –— |dz  }||k  rŒN|rN |«       }|dk(  r|dz	  –— |dz  dz  –— y	|dk(  sJ ‚ |«       }|dz	  –— |dz  dz  |dz	  z  –— |dz  dz  –— y	y	­w)
z;helper used by encode_bytes() to handle big-endian encodingr   rS   rR   r¡   rŸ   r    rž   r9   Nrw   r¢   s           rJ   r…   zBase64Engine._encode_bytes_big·  së   è ø€ ð ˆØ�FŠlÙ“ˆBÙ“ˆBÙ“ˆBØ�a‘%ŠKØ�t‘G˜a‘< " a¡%Ñ(Ò(Ø�t‘G˜a‘< " a¡%Ñ(Ò(Ø�t‘)ŠOØ�1‰HˆCð �F‹lñ Ù“ˆBØ�qŠyà˜!‘e’Ø˜$‘w ‘lÓ"à˜q’yÐ �yá“\�Ø˜!‘e’Ø˜4™ !‘| b¨!¡eÑ,Ò,Ø˜4™ !‘|Ó$ð ùs   ‚AB)ÁAB)c                 óp  — t        |t        «      st        dt        |«      ›�«      ‚t	        t        |«      d«      \  }}|dk(  rt        d«      ‚t        t        | j                  |«      «      }	 t        | j                  |||«      «      S # t        $ r }t        d|j                  d   ›�«      ‚d}~ww xY w)z�decode bytes from base64 string.

        :arg source: byte string to decode.
        :returns: byte string containing decoded data.
        r‘   r¡   r9   z(input string length cannot be == 1 mod 4zinvalid character: r   N)r;   r<   rY   r”   r•   r=   rU   r   r   rƒ   r   rˆ   ÚKeyErrorÚargs)r‹   rF   r—   r˜   r™   r[   s         rJ   Údecode_byteszBase64Engine.decode_bytesâ  s¦   € ô ˜&¤%Ô(Ý¼dÀ6¼lÐLÓMÐMô
 œc &›k¨1Ó-‰ˆ�Ø�1Š9äÐGÓHÐHÜ¤ T§^¡^°VÓ <Ó=ˆ
ð	GÜ# D×$6Ñ$6°zÀ6È4Ó$PÓQÐQøÜò 	GÝ¸¿¹ÀºÐEÓFÐFûð	Gús   Á0B Â	B5ÂB0Â0B5c              #   ó2  K  — d}||k  rQ |«       } |«       } |«       } |«       }||dz  dz  z  –— |dz	  |dz  dz  z  –— |dz	  |dz  z  –— |dz  }||k  rŒQ|r9 |«       } |«       }||dz  dz  z  –— |dk(  r |«       }|dz	  |dz  dz  z  –— yyy­w)	z>helper used by decode_bytes() to handle little-endian encodingr   rR   r    rS   rŸ   r¡   r9   Nrw   ©	r‹   r™   r—   r˜   ry   r£   r¤   r¥   Úv4s	            rJ   rŠ   z!Base64Engine._decode_bytes_littleø  sÔ   è ø€ ð ˆØ�FŠlÙ“ˆBÙ“ˆBÙ“ˆBÙ“ˆBØ˜˜c™ a™Ñ(Ò(Ø�q‘5˜b 3™h¨1™_Ñ-Ò-Ø�q‘5˜R ™UÑ#Ò#Ø�1‰HˆCð �F‹lñ á“ˆBÙ“ˆBØ˜˜c™ a™Ñ(Ò(à�qŠyá“\�Ø˜1‘u " s¡(¨q¡Ñ1Ó1ð ð ùó   ‚ABÁ<Bc              #   ó2  K  — d}||k  rQ |«       } |«       } |«       } |«       }|dz  |dz	  z  –— |dz  dz  |dz	  z  –— |dz  dz  |z  –— |dz  }||k  rŒQ|r9 |«       } |«       }|dz  |dz	  z  –— |dk(  r |«       }|dz  dz  |dz	  z  –— yyy­w)	z;helper used by decode_bytes() to handle big-endian encodingr   rS   r¡   rŸ   rR   r    r9   Nrw   r¬   s	            rJ   r‡   zBase64Engine._decode_bytes_big  sÔ   è ø€ ð ˆØ�FŠlÙ“ˆBÙ“ˆBÙ“ˆBÙ“ˆBØ�q‘5˜R ™UÑ#Ò#Ø�s‘F˜Q‘; 2 q¡5Ñ)Ò)Ø�s‘F˜Q‘; "Ñ$Ò$Ø�1‰HˆCð �F‹lñ á“ˆBÙ“ˆBØ�q‘5˜R ™UÑ#Ò#à�qŠyá“\�Ø˜3™ ‘{ r¨1¡uÑ-Ó-ð ð ùr®   c                 óÂ   ‡— t        ˆfd„t        | j                  «      D «       «      }|j                  ˆfd„t        | j                  «      D «       «       t        |«      S )z2helper to generate set of valid last chars & bytesc              3   ó4   •K  — | ]  \  }}|‰z  rŒ|–— Œ y ­wrv   rw   ©rx   ÚiÚcÚbitss      €rJ   r{   z-Base64Engine.__make_padset.<locals>.<genexpr>G  s   øè ø€ ÐHÑ 7™˜˜1¸qÀ4»x”1Ñ 7ùó   ƒ‘c              3   ó4   •K  — | ]  \  }}|‰z  rŒ|–— Œ y ­wrv   rw   r²   s      €rJ   r{   z-Base64Engine.__make_padset.<locals>.<genexpr>H  s   øè ø€ ÐIÑ!8™#˜!˜AÀÀDÃ”AÑ!8ùr¶   )r}   r‚   r~   Úupdaters   Ú	frozenset)r‹   rµ   Úpsets    ` rJ   Ú__make_padsetzBase64Engine.__make_padsetE  sA   ø€ äÓH¤	¨$¯,©,Ô 7ÓHÓHˆØ�‰ÓI¤¨4¯<©<Ô!8ÓIÔIÜ˜‹Ðr3   c                 óJ   — | j                   rdnd}| | j                  |«      fS )zDmask to clear padding bits, and valid last bytes (for strings 2 % 4)rŸ   é<   ©r„   Ú_Base64Engine__make_padset©r‹   rµ   s     rJ   Ú	_padinfo2zBase64Engine._padinfo2K  s)   € ð —X’X‰r EˆØˆu�d×(Ñ(¨Ó.Ð.Ð.r3   c                 óJ   — | j                   rdnd}| | j                  |«      fS )zDmask to clear padding bits, and valid last bytes (for strings 3 % 4)rR   é0   r¾   rÀ   s     rJ   Ú	_padinfo3zBase64Engine._padinfo3R  s)   € ð —H’H‰q 4ˆØˆu�d×(Ñ(¨Ó.Ð.Ð.r3   c                 ó¾  — t        |«      dz  }|dk(  r| j                  \  }}n&|dk(  r| j                  \  }}n|sd|fS t        d«      ‚|d   }||v rd|fS t	        |t
        «      r.| j                  }||j                  |«      |z     }||v sGJ d«       ‚| j                  | j                  |«      |z  «      }||v sJ d«       ‚t        rt        |g«      }d|dd |z   fS )	a  helper to detect & clear invalid unused bits in last character.

        :arg source:
            encoded data (as ascii bytes or unicode).

        :returns:
            `(True, result)` if the string was repaired,
            `(False, source)` if the string was ok as-is.
        rR   rS   Fzsource length must != 1 mod 4éÿÿÿÿz%failed to generate valid padding charTN)r=   rÁ   rÄ   rU   r;   r   rs   Úindexr€   rƒ   r   r<   )r‹   rF   r˜   ÚmaskÚpadsetÚlastÚcms          rJ   Úcheck_repair_unusedz Base64Engine.check_repair_unusedY  s   € ô �6‹{˜Q‰ˆØ�1Š9ØŸ>™>‰LˆD‘&Ø�QŠYØŸ>™>‰LˆD‘&ÙØ˜&�=Ð äÐ<Ó=Ð=ð �b‰zˆØ�6‰>Ø˜&�=Ð ô �fœgÔ&Ø—‘ˆBØ�b—h‘h˜t“n tÑ+Ñ,ˆDØ˜6‘>ÐJÐ#JÓJ�>ð —>‘> $§.¡.°Ó"6¸Ñ"=Ó>ˆDØ˜6‘>ÐJÐ#JÓJ�>ÝÜ˜d˜V“}�Ø�V˜C˜R�[ 4Ñ'Ð'Ð'r3   c                 ó*   — | j                  |«      d   S )Nr9   )rÌ   ©r‹   rF   s     rJ   Úrepair_unusedzBase64Engine.repair_unused‚  s   € Ø×'Ñ'¨Ó/°Ñ2Ð2r3   c                 óœ   ‡— t        ‰t        «      st        dt        ‰«      ›�«      ‚t	        ˆfd„|D «       «      }| j                  |«      S )z>encode byte string, first transposing source using offset listr‘   c              3   ó(   •K  — | ]	  }‰|   –— Œ y ­wrv   rw   )rx   rZ   rF   s     €rJ   r{   z7Base64Engine.encode_transposed_bytes.<locals>.<genexpr>˜  s   øè ø€ Ð=±W¨c˜f S�k±Wùs   ƒ)r;   r<   rY   r”   r   rœ   )r‹   rF   ÚoffsetsÚtmps    `  rJ   Úencode_transposed_bytesz$Base64Engine.encode_transposed_bytes”  s@   ø€ ä˜&¤%Ô(Ý¼dÀ6¼lÐLÓMÐMÜÓ=±WÓ=Ó=ˆØ× Ñ  Ó%Ð%r3   c                 óŠ   — | j                  |«      }dgt        |«      z  }t        ||«      D ]
  \  }}|||<   Œ t        |«      S )zGdecode byte string, then reverse transposition described by offset listN)rª   r=   Úzipr   )r‹   rF   rÒ   rÓ   ÚbufrZ   Úchars          rJ   Údecode_transposed_bytesz$Base64Engine.decode_transposed_bytes›  sM   € ð
 ×Ñ Ó'ˆØˆf”s˜7“|Ñ#ˆÜ˜W cÖ*‰IˆC�ØˆC�ŠHð +ä˜sÓ#Ð#r3   c                 óˆ  — t        |t        «      st        dt        |«      ›�«      ‚| j                  }| dz  }||z   dz  }t        |«      |k7  rt        d|fz  «      ‚| j                  }d}	 |r|n
t        |«      D ]  }|dz   ||«      z   }Œ 	 |r|r||z  }|S |d|z  dz
  z  }|S # t        $ r t        d›�«      ‚w xY w)a«  decode base64 string -> integer

        :arg source: base64 string to decode.
        :arg bits: number of bits in resulting integer.

        :raises ValueError:
            * if the string contains invalid base64 characters.
            * if the string is not long enough - it must be at least
              ``int(ceil(bits/6))`` in length.

        :returns:
            a integer in the range ``0 <= n < 2**bits``
        r‘   r    zsource must be %d charsr   zinvalid character in string: r9   )
r;   r<   rY   r”   r„   r=   rU   rƒ   Úreversedr¨   )	r‹   rF   rµ   r„   ÚpadÚcharsr�   r›   r´   s	            rJ   Ú_decode_intzBase64Engine._decode_int©  sî   € ô ˜&¤%Ô(Ý¼dÀ6¼lÐLÓMÐMØ�h‰hˆØˆe�a‰iˆØ�c‘˜1‘ˆÜˆv‹;˜%ÒÜÐ6¸%¸ÑAÓBÐBØ—‘ˆØˆð	GÙ"‘V¬°Ó(8Ò8�Ø˜A‘v¡¨£Ñ*‘ñ 9ñ áØ˜‘�ð ˆ
ð ˜˜4™ ‘{Ñ"�Øˆ
øô ò 	GÝÁ!ÐEÓFÐFð	Gús   Á."B) Â)Cc                 óì   — t        |t        «      st        dt        |«      ›�«      ‚t	        |«      dk7  rt        d«      ‚t        r|d   }	 | j                  |«      S # t        $ r t        d«      ‚w xY w)z(decode single character -> 6 bit integerr‘   r9   zsource must be exactly 1 byter   úinvalid character)	r;   r<   rY   r”   r=   rU   r   rƒ   r¨   rÎ   s     rJ   Údecode_int6zBase64Engine.decode_int6Ñ  sq   € ä˜&¤%Ô(Ý¼dÀ6¼lÐLÓMÐMÜˆv‹;˜!ÒÜÐ<Ó=Ð=Ýà˜A‘YˆFð	2Ø—>‘> &Ó)Ð)øÜò 	2ÜÐ0Ó1Ð1ð	2ús   ÁA ÁA3c                 óL  — t        |t        «      st        dt        |«      ›�«      ‚t	        |«      dk7  rt        d«      ‚| j                  }	 | j                  r ||d   «       ||d   «      dz  z   S  ||d   «       ||d   «      dz  z   S # t        $ r t        d«      ‚w xY w)z'decodes 2 char string -> 12-bit integerr‘   rS   zsource must be exactly 2 bytesr9   r   r    rà   ©	r;   r<   rY   r”   r=   rU   rƒ   r„   r¨   ©r‹   rF   r�   s      rJ   Údecode_int12zBase64Engine.decode_int12ß  sª   € ä˜&¤%Ô(Ý¼dÀ6¼lÐLÓMÐMÜˆv‹;˜!ÒÜÐ=Ó>Ð>Ø—‘ˆð	2Ø�xŠxÙ˜f Q™iÓ(©F°6¸!±9Ó,=¸qÑ,@ÑAÐAá˜f Q™iÓ(©F°6¸!±9Ó,=¸qÑ,@ÑAÐAøÜò 	2ÜÐ0Ó1Ð1ð	2ús   Á%B Á4B ÂB#c                 óÄ  — t        |t        «      st        dt        |«      ›�«      ‚t	        |«      dk7  rt        d«      ‚| j                  }	 | j                  r8 ||d   «       ||d   «      dz  z    ||d   «      dz  z    ||d	   «      d
z  z   S  ||d	   «       ||d   «      dz  z    ||d   «      dz  z    ||d   «      d
z  z   S # t        $ r t        d«      ‚w xY w)z'decodes 4 char string -> 24-bit integerr‘   r¡   zsource must be exactly 4 bytesrR   rS   r    r9   é   r   é   rà   rã   rä   s      rJ   Údecode_int24zBase64Engine.decode_int24î  s  € ä˜&¤%Ô(Ý¼dÀ6¼lÐLÓMÐMÜˆv‹;˜!ÒÜÐ=Ó>Ð>Ø—‘ˆð	2Ø�xŠxÙ˜f Q™iÓ(©F°6¸!±9Ó,=¸qÑ,@ÑAÙ˜v a™yÓ)¨2Ñ-ñ/Ù28¸À¹Ó2CÀRÑ2GñIð Iñ ˜f Q™iÓ(©F°6¸!±9Ó,=¸qÑ,@ÑAÙ˜v a™yÓ)¨2Ñ-ñ/Ù28¸À¹Ó2CÀRÑ2GñIð Iøäò 	2ÜÐ0Ó1Ð1ð	2ús   ÁAC
 Â7C
 Ã
Cc                 ó&   — | j                  |d«      S )ú&decode 5 char string -> 30 bit integeré   ©rÞ   rÎ   s     rJ   Údecode_int30zBase64Engine.decode_int30ÿ  s   € à×Ñ ¨Ó+Ð+r3   c                 ó&   — | j                  |d«      S )z±decode 11 char base64 string -> 64-bit integer

        this format is used primarily by des-crypt & variants to encode
        the DES output value used as a checksum.
        rt   rí   rÎ   s     rJ   Údecode_int64zBase64Engine.decode_int64  s   € ð ×Ñ ¨Ó+Ð+r3   c                 óà   ‡— ‰dk\  sJ d«       ‚| dz  }||z  }| j                   rt        |dz
  dd«      }‰|z  Šnt        d|d«      }t        t        | j                  ˆfd„|D «       «      «      S )zÕencode integer into base64 format

        :arg value: non-negative integer to encode
        :arg bits: number of bits to encode

        :returns:
            a string of length ``int(ceil(bits/6.0))``.
        r   zcaller did not sanitize inputr    iúÿÿÿc              3   ó.   •K  — | ]  }‰|z	  d z  –— Œ y­w)rž   Nrw   )rx   rZ   rz   s     €rJ   r{   z+Base64Engine._encode_int.<locals>.<genexpr>"  s   øè ø€ Ð DÁ¸ %¨¡*°Õ!4Áùs   ƒ)r„   r   r   r   r€   )r‹   rz   rµ   rÜ   Úitrs    `   rJ   Ú_encode_intzBase64Engine._encode_int  s€   ø€ ð ˜ŠzÐ:Ð:Ó:ˆzØˆe�a‰iˆØ�‰ˆØ�8Š8Ü˜˜a™  RÓ(ˆCà�c‰M‰Eä˜˜D !Ó$ˆCäœt D§N¡NÛ DÁÓ Dó Fó Gð 	Gr3   c                 ó~   — |dk  s|dkD  rt        d«      ‚t        r| j                  ||dz    S | j                  |«      S )z0encodes 6-bit integer -> single hash64 characterr   rž   úvalue out of ranger9   )rU   r   r~   r€   ©r‹   rz   s     rJ   Úencode_int6zBase64Engine.encode_int6(  sB   € à�1Š9˜ š
ÜÐ1Ó2Ð2ÝØ—<‘<  e¨A¡gÐ.Ð.à—>‘> %Ó(Ð(r3   c                 ó²   — |dk  s|dkD  rt        d«      ‚|dz  |dz	  dz  g}| j                  rt        |«      }t        t	        | j
                  |«      «      S )z'encodes 12-bit integer -> 2 char stringr   iÿ  rö   rž   r    ©rU   r„   rÛ   r   r   r€   ©r‹   rz   Úraws      rJ   Úencode_int12zBase64Engine.encode_int121  sX   € à�1Š9˜ šÜÐ1Ó2Ð2Ø�t‰|˜e Q™h¨$Ñ.Ð/ˆØ�8Š8Ü˜3“-ˆCÜœt D§N¡N°CÓ8Ó9Ð9r3   c                 óÎ   — |dk  s|dkD  rt        d«      ‚|dz  |dz	  dz  |dz	  dz  |dz	  dz  g}| j                  rt        |«      }t        t	        | j
                  |«      «      S )z'encodes 24-bit integer -> 4 char stringr   iÿÿÿ rö   rž   r    rç   rè   rú   rû   s      rJ   Úencode_int24zBase64Engine.encode_int24:  sr   € à�1Š9˜ Ò(ÜÐ1Ó2Ð2Ø�t‰|˜e Q™h¨$Ñ.Ø�r‘	˜TÑ! E¨2¡I°Ñ#5ð7ˆà�8Š8Ü˜3“-ˆCÜœt D§N¡N°CÓ8Ó9Ð9r3   c                 óP   — |dk  s|dkD  rt        d«      ‚| j                  |d«      S )rë   r   iÿÿÿ?rö   rì   ©rU   rô   r÷   s     rJ   Úencode_int30zBase64Engine.encode_int30D  s/   € à�1Š9˜ 
Ò*ÜÐ1Ó2Ð2Ø×Ñ  rÓ*Ð*r3   c                 óP   — |dk  s|dkD  rt        d«      ‚| j                  |d«      S )z±encode 64-bit integer -> 11 char hash64 string

        this format is used primarily by des-crypt & variants to encode
        the DES output value used as a checksum.
        r   l   ÿÿÿÿ rö   rt   r  r÷   s     rJ   Úencode_int64zBase64Engine.encode_int64J  s2   € ð �1Š9˜Ð 2Ò2ÜÐ1Ó2Ð2Ø×Ñ  rÓ*Ð*r3   )F)'Ú__name__Ú
__module__Ú__qualname__Ú__doc__r~   r„   r€   rƒ   r†   rˆ   r�   Úpropertyrs   rœ   r‰   r…   rª   rŠ   r‡   r¿   r   rÁ   rÄ   rÌ   rÏ   rÔ   rÙ   rÞ   rá   rå   ré   rî   rð   rô   rø   rý   rÿ   r  r  rw   r3   rJ   r)   r)   ý   sé   „ ñ>ðH €GØ
€Cð €IØ€Ið €MØ€Mó
;ðD ñ.ó ð.òò*%òN%%òVGò,!2òF!.òTð ñ/ó ð/ð ñ/ó ð/ò'(òR3ò$&ò	$ò"òP2ò2ò2ò",ò,òGò4)ò:ò:ò+ó+r3   r)   c                   ó2   ‡ — e Zd ZdZdZd„ Zˆ fd„Zd„ Zˆ xZS )r*   z<Base64Engine which delays initialization until it's accessedNc                 ó   — ||f| _         y rv   )Ú
_lazy_opts)r‹   r©   Úkwdss      rJ   r�   zLazyBase64Engine.__init__\  s   € Ø ˜,ˆ�r3   c                 ód   •— | j                   \  }}t        t        | �  |i |¤Ž | ` t        | _        y rv   )r  Úsuperr*   r�   r)   Ú	__class__)r‹   r©   r  r  s      €rJ   Ú
_lazy_initzLazyBase64Engine._lazy_init_  s1   ø€ Ø—_‘_‰
ˆˆdÜÔ Ñ.°Ð=¸Ò=ØˆOÜ%ˆ�r3   c                 óp   — |j                  d«      s| j                  «        t        j                  | |«      S )NÚ_)Ú
startswithr  ÚobjectÚ__getattribute__)r‹   Úattrs     rJ   r  z!LazyBase64Engine.__getattribute__e  s+   € Ø�‰˜sÔ#Ø�O‰OÔÜ×&Ñ& t¨TÓ2Ð2r3   )	r  r  r  r  r  r�   r  r  Ú__classcell__)r  s   @rJ   r*   r*   X  s   ø„ ÙFØ€Jò'ô&ö3r3   r*   T)r„   rv   )Er  Ú
__future__r   r   r   Úbase64r   r   r   rn   r	   rb   Úbinasciir
   r   r   rX   ÚloggingÚ	getLoggerr  ÚlogÚpasslibr   Úpasslib.utils.compatr   r   r   r   r   r   r   r   r   r   r   r   Úpasslib.utils.decorr   Ú__all__r   r   r   r   r   r    r"   r!   r#   rC   ÚB_NULLrc   r>   r:   r$   r'   r(   rM   rW   rV   r%   r&   rl   rm   r  r)   r*   r+   r,   r-   rw   r3   rJ   Ú<module>r$     s�  ðñ÷ AÑ @÷ó ÷ EÑ DÛ Ø€g×Ñ˜Ó!€õ ÷÷ ÷ ó õ 2ò€ñJ ÐSÓT€ñ ÐSÓT€
ñ ÐSÓT€ñ ÐSÓT€ð #¡Q s£VÑ+Ð ñ Ð&Ó'€	ñ Ð&Ó'€ñ Ð&Ó'€ñ #¡6¨#£;Ó/€ð €Ø	€Ø
€ñ ™¨Ó9Ó:Ð ó òB2ò-ð8 €Ø€Ø€ò
1ò1ò&=ñ *°¸#Ñ*>Ó?€ð ˜A‘+€ò$ô0U	+�6ô U	+ôv3�|ô 3ñ, �|Ó$€Ù	˜,¨DÔ	1€Ù˜L¨dÔ3�r3   