???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \&^                 @   s   d ddgZ ddlZddlZddlZddlZddlmZ ddlmZ	 e	j
Z
dZdZd	ZdZdZdZdZe
dZe
dZejdejejB ejB ZejdZejdZejjZdd ZdddZG dd  d ZG dd dZ G dd de!Z"dS )Headerdecode_headermake_header    N)HeaderParseError)charset
         N   z 	zus-asciizutf-8ai  
  =\?                   # literal =?
  (?P<charset>[^?]*?)   # non-greedy up to the next ? is the charset
  \?                    # literal ?
  (?P<encoding>[qb])    # either a "q" or a "b", case insensitive
  \?                    # literal ?
  (?P<encoded>.*?)      # non-greedy up to the next ?= is the encoded string
  \?=                   # literal ?=
  z[\041-\176]+:$z
\n[^ \t]+:c             C   s  t | drdd | jD S tj| s.| d fgS g }x| j D ]}tj|}d}xp|r|jd}|rn|j }d}|r|j|d d f |rP|jdj	 }|jdj	 }|jd}|j|||f qPW q<W g }	xVt
|D ]J\}
}|
dkr|d r||
d  d r||
d  d j r|	j|
d  qW xt|	D ]}||= q*W g }x|D ]\}}}|d krh|j||f n|d	krtjj|}|j||f n~|d
kr t|d }|r|dd d|  7 }ytjj|}W n  tjk
r   tdY nX |j||f ntd| qDW g }d  }}x~|D ]v\}}t|trBt|d}|d krV|}|}nB||krx|j||f |}|}n |d kr|t| 7 }n||7 }q$W |j||f |S )N_chunksc             S   s(   g | ] \}}t j|t|t|fqS  )_charsetZ_encodestr).0stringr   r   r   $/usr/lib64/python3.6/email/header.py
<listcomp>M   s   z!decode_header.<locals>.<listcomp>Tr   F      qb   z===zBase64 decoding errorzUnexpected encoding: zraw-unicode-escape)hasattrr   ecresearch
splitlinessplitpoplstripappendlower	enumerateisspacereversedemail
quoprimimeZheader_decodelenZ
base64mimedecodebinasciiErrorr   AssertionError
isinstancer   bytesBSPACE)headerZwordslinepartsfirstZ	unencodedr   encodingZencodedZdroplistnwdZdecoded_wordsZencoded_stringZwordZpaderrZ	collapsedZ	last_wordlast_charsetr   r   r   r   =   sz    






4






c             C   sL   t |||d}x8| D ]0\}}|d k	r8t|t r8t|}|j|| qW |S )N)
maxlinelenheader_namecontinuation_ws)r   r-   Charsetr!   )Zdecoded_seqr9   r:   r;   hsr   r   r   r   r      s    c               @   sJ   e Zd ZdddZdd Zdd	 Zdd
dZdd ZdddZdd Z	dS )r   Nr   strictc             C   s|   |d krt }nt|ts t|}|| _|| _g | _|d k	rH| j||| |d krTt}|| _|d krjd| _	nt
|d | _	d S )Nr   r   )USASCIIr-   r<   r   _continuation_wsr   r!   
MAXLINELEN_maxlinelen
_headerlenr(   )selfr>   r   r9   r:   r;   errorsr   r   r   __init__   s    
zHeader.__init__c       	      C   s   | j   g }d }d }x| jD ]\}}|}|tjkrJ|jdd}|jdd}|r|o^| j|d }|dkr|dkr| r|jt d }n|d	kr| r|jt |o| j|d
 }|}|j| qW t	j
|S )Nasciisurrogateescapereplacer   us-asciir   )NrK   )NrK   )NrK   )
_normalizer   r   UNKNOWN8BITencoder)   	_nonctextr!   SPACEEMPTYSTRINGjoin)	rE   Zuchunkslastcs	lastspacer   r   ZnextcsZoriginal_byteshasspacer   r   r   __str__   s*    


zHeader.__str__c             C   s   |t | kS )N)r   )rE   otherr   r   r   __eq__  s    zHeader.__eq__c             C   s   |d kr| j }nt|ts"t|}t|tsZ|jp4d}|t jkrN|jdd}n|j||}|jpbd}|t jkry|j|| W n" t	k
r   |dkr t
}Y nX | jj||f d S )Nzus-asciirI   )r   r-   r<   r   Zinput_codecrN   r)   Zoutput_codecrO   UnicodeEncodeErrorUTF8r   r!   )rE   r>   r   rF   Zinput_charsetZoutput_charsetr   r   r   r!   	  s$    






zHeader.appendc             C   s   |j  p|dkS )N()\)r\   r]   r^   )r$   )rE   r>   r   r   r   rP   4  s    zHeader._nonctext;, 	r   c             C   s  | j   |d kr| j}|dkr"d}t| j|| j|}d }d  }}x4| jD ](\}}	|d k	r|ol| j|d }|d	kr| s|	d
kr|j  n|	dkr| r|j  |o| j|d }|	}d}|j }
|
r|j	d|
d |	 n|j	dd|	 xr|
dd  D ]b}|j
  |	jd k	r,|j	| jd|j  |	 n.|j }|d t|t|  }|j	|||	  qW t|
dkrJ|j
  qJW | jr|j  |j|}tj|rtdj||S )Nr   i@B us-asciir   Fr   r   z8header value appears to contain an embedded header: {!r})Nr`   )Nr`   )Nr`   rL   )rM   rC   _ValueFormatterrD   rA   r   rP   add_transitionr   feednewlineheader_encodingr    r(   _str_embedded_headerr   r   format)rE   
splitcharsr9   linesepZ	formatterrT   rV   rU   r   r   linesr1   Zslinefwsvaluer   r   r   rO   9  sR    !


zHeader.encodec             C   s|   g }d }g }xL| j D ]B\}}||kr0|j| q|d k	rL|jtj||f |g}|}qW |rr|jtj||f || _ d S )N)r   r!   rQ   rS   )rE   Zchunksr8   Z
last_chunkr   r   r   r   r   rM     s    zHeader._normalize)NNNNr   r?   )Nr?   )r_   Nr   )
__name__
__module____qualname__rG   rW   rY   r!   rP   rO   rM   r   r   r   r   r      s     
- 
+
Pc               @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )ra   c             C   s0   || _ || _t|| _|| _g | _t|| _d S )N)_maxlenrA   r(   _continuation_ws_len_splitchars_lines_Accumulator_current_line)rE   Z	headerlenmaxlenr;   ri   r   r   r   rG     s    
z_ValueFormatter.__init__c             C   s   | j   |j| jS )N)rd   rS   rt   )rE   rj   r   r   r   rf     s    z_ValueFormatter._strc             C   s
   | j tS )N)rf   NL)rE   r   r   r   rW     s    z_ValueFormatter.__str__c             C   sp   | j j }|dkr| j j|  t| j dkrb| j j rP| jd  t| j 7  < n| jjt| j  | j j  d S )Nr   r   r   r   )r   r   rL   )	rv   r   pushr(   	is_onlywsrt   r   r!   reset)rE   Zend_of_liner   r   r   rd     s    

z_ValueFormatter.newlinec             C   s   | j jdd d S )Nr   r   )rv   ry   )rE   r   r   r   rb     s    z_ValueFormatter.add_transitionc             C   s   |j d kr| j||| j d S |j|| j }y|jd}W n tk
rP   d S X |d k	rf| j|| y|j }W n tk
r   d S X | j  | j	j
| j| x|D ]}| jj| j|  qW d S )Nr   )re   _ascii_splitrs   Zheader_encode_lines_maxlengthsr   
IndexError_append_chunkrd   rv   ry   rA   rt   r!   )rE   rl   r   r   Zencoded_linesZ
first_line	last_liner1   r   r   r   rc     s$    

z_ValueFormatter.feedc             c   s*   | j t| j V  x| j | j V  qW d S )N)rq   r(   rv   rr   )rE   r   r   r   r}     s    z_ValueFormatter._maxlengthsc             C   sj   t jdt d || }|d r0dg|d d< n
|jd x*tt|gd  D ]\}}| j|| qNW d S )Nz([z]+)r   r   r   )rer   FWSr   zipiterr   )rE   rl   r   ri   r2   partr   r   r   r|     s    
z_ValueFormatter._ascii_splitc             C   s
  | j j|| t| j | jkrx| jD ]t}xlt| j j d ddD ]P}|j rp| j | d }|rp|d |krpP | j |d  d }|rD|d |krDP qDW q(P q(W | j j \}}| j j	dkr| j
  |sd}| j j|| d S | j j|}| jjt| j  | j j| d S )Nr   r   r   rL   rL   )rv   ry   r(   rq   rs   range
part_countr$   r   _initial_sizerd   pop_fromrt   r!   r   r{   )rE   rl   r   ZchiZprevpartr   Z	remainderr   r   r   r     s.    z_ValueFormatter._append_chunkN)rn   ro   rp   rG   rf   rW   rd   rb   rc   r}   r|   r   r   r   r   r   ra     s   %ra   c                   sj   e Zd Zd fdd	Zdd ZdddZ fdd	Zd
d Zdd ZdddZ	dd Z
 fddZ  ZS )ru   r   c                s   || _ t j  d S )N)r   superrG   )rE   Zinitial_size)	__class__r   r   rG     s    z_Accumulator.__init__c             C   s   | j ||f d S )N)r!   )rE   rl   r   r   r   r   ry   #  s    z_Accumulator.pushc             C   s   | |d  }g | |d < |S )Nr   )rE   r   Zpoppedr   r   r   r   &  s    z_Accumulator.pop_fromc                s   | j  dkrdS t j S )Nr   r   )r   r   )r   r   r   )rE   )r   r   r   r   +  s    z_Accumulator.popc             C   s   t dd | D | jS )Nc             s   s"   | ]\}}t |t | V  qd S )N)r(   )r   rl   r   r   r   r   	<genexpr>1  s    z'_Accumulator.__len__.<locals>.<genexpr>)sumr   )rE   r   r   r   __len__0  s    z_Accumulator.__len__c             C   s   t jdd | D S )Nc             s   s    | ]\}}t j||fV  qd S )N)rR   rS   )r   rl   r   r   r   r   r   5  s   z'_Accumulator.__str__.<locals>.<genexpr>)rR   rS   )rE   r   r   r   rW   4  s    
z_Accumulator.__str__Nc             C   s"   |d krg }|| d d < d| _ d S )Nr   )r   )rE   Zstartvalr   r   r   r{   8  s    z_Accumulator.resetc             C   s   | j dko|  pt| j S )Nr   )r   r   r$   )rE   r   r   r   rz   >  s    z_Accumulator.is_onlywsc                s
   t  j S )N)r   r   )rE   )r   r   r   r   A  s    z_Accumulator.part_count)r   )r   )N)rn   ro   rp   rG   ry   r   r   r   rW   r{   rz   r   __classcell__r   r   )r   r   ru     s   

ru   z        )NNr   )#__all__r   r*   Zemail.quoprimimer&   Zemail.base64mimeZemail.errorsr   r   r   r<   rx   rQ   r/   ZSPACE8rR   rB   r   r@   r[   compileVERBOSE
IGNORECASE	MULTILINEr   Zfcrerg   r'   Z_max_appendr   r   r   ra   listru   r   r   r   r   <module>   s>   

_ 
 k 