a
    ze]!                     @   s   d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZ g dZ	e
e djdd Zdd	 ZG d
d deZe Zdeed< dd Zdd Zdd Zdd Zdd ZeedZdd ZeedZeedZdddZdS )     N)ascii_lettersdigits)errors)decode_qencode_qdecode_bencode_blen_qlen_bdecodeencodes   =([a-fA-F0-9]{2})c                 C   s   t | d S )N   )bytesfromhexgroupr   )m r   */usr/lib/python3.9/email/_encoded_words.py<lambda>A       r   c                 C   s   |  dd} t| g fS )N   _    )replace_q_byte_subber)encodedr   r   r   r   C   s    r   c                   @   s,   e Zd Zded ed Zdd ZdS )	_QByteMaps   -!*+/asciic                 C   s.   || j v rt|| |< nd|| |< | | S )Nz={:02X})safechrformat)selfkeyr   r   r   __missing__M   s    
z_QByteMap.__missing__N)__name__
__module____qualname__r   r   r   r   r"   r   r   r   r   r   I   s   r   _ c                 C   s   d dd | D S )N c                 s   s   | ]}t | V  qd S N)_q_byte_map.0xr   r   r   	<genexpr>Z   r   zencode_q.<locals>.<genexpr>)joinbstringr   r   r   r   Y   s    r   c                 C   s   t dd | D S )Nc                 s   s   | ]}t t| V  qd S r)   )lenr*   r+   r   r   r   r.   ]   r   zlen_q.<locals>.<genexpr>)sumr0   r   r   r   r	   \   s    r	   c                 C   s   t | d }|r dd d|  nd}z&tj| | dd|rDt gng fW S  tjy   ztj| ddt gfW  Y S  tjy   z,tj| d ddt t gfW  Y  Y S  tjy   | t gf Y  Y  Y S 0 Y n0 Y n0 d S )N   s   ===r   T)validateFs   ==)	r2   base64Z	b64decoder   ZInvalidBase64PaddingDefectbinasciiErrorZInvalidBase64CharactersDefectZInvalidBase64LengthDefect)r   Zpad_errZmissing_paddingr   r   r   r   d   s(    
r   c                 C   s   t | dS )Nr   )r6   Z	b64encoder   r0   r   r   r   r      s    r   c                 C   s&   t t| d\}}|d |r dnd S )N   r4   r   )divmodr2   )r1   Zgroups_of_3Zleftoverr   r   r   r
      s    r
   )qbc           	   
   C   s   |  d\}}}}}|d\}}}| }|dd}t| |\}}z||}W nz ty   |t	d|d ||d}Y nF t
tfy   |dd}| dkr|td|d	 Y n0 ||||fS )
N?*r   surrogateescapez0Encoded word contains bytes not decodable using z charsetunknown-8bitzUnknown charset z* in encoded word; decoded as unknown bytes)split	partitionlowerr   _cte_decodersr   UnicodeDecodeErrorappendr   ZUndecodableBytesDefectLookupErrorUnicodeEncodeErrorZCharsetError)	Zewr&   charsetZcteZ
cte_stringlangr1   Zdefectsstringr   r   r   r      s"    
r   utf-8r(   c                 C   s|   |dkr|  dd}n
|  |}|d u rTtd |}td |}|| dk rPdnd}t| |}|rld| }d||||S )	Nr@   r   r?   r;   r<      r>   z=?{}{}?{}?{}?=)r   _cte_encode_length_cte_encodersr   )rK   rI   encodingrJ   r1   ZqlenZblenr   r   r   r   r      s    
r   )rL   Nr(   )rer6   r7   	functoolsrK   r   r   Zemailr   __all__partialcompilesubr   r   dictr   r*   ordr   r	   r   r   r
   rD   r   rO   rN   r   r   r   r   r   <module>*   s:   &+