Your IP : 3.21.100.233


Current Path : /lib64/python3.6/email/__pycache__/
Upload File :
Current File : //lib64/python3.6/email/__pycache__/_header_value_parser.cpython-36.opt-2.pyc

3

�me��@sfddlZddlZddlmZddlmZddlmZddlm	Z
ddlmZddlmZe
d�Zee
d	�BZe
d
�ZeeBZee
d�Zee
d�Zee
d
�Be
d�ZeeBZee
d�BZeeBZee
d�Zdd�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�ZGdd�de�Z Gdd�de�Z!Gd d!�d!e�Z"Gd"d#�d#e�Z#Gd$d%�d%e�Z$Gd&d'�d'e$�Z%Gd(d)�d)e�Z&Gd*d+�d+e�Z'Gd,d-�d-e�Z(Gd.d/�d/e�Z)Gd0d1�d1e�Z*Gd2d3�d3e�Z+Gd4d5�d5e�Z,Gd6d7�d7e�Z-Gd8d9�d9e�Z.Gd:d;�d;e�Z/Gd<d=�d=e�Z0Gd>d?�d?e�Z1Gd@dA�dAe�Z2GdBdC�dCe�Z3GdDdE�dEe�Z4GdFdG�dGe�Z5GdHdI�dIe�Z6GdJdK�dKe�Z7GdLdM�dMe�Z8GdNdO�dOe�Z9GdPdQ�dQe�Z:GdRdS�dSe:�Z;GdTdU�dUe�Z<GdVdW�dWe�Z=GdXdY�dYe�Z>GdZd[�d[e�Z?Gd\d]�d]e�Z@Gd^d_�d_e@�ZAGd`da�dae@�ZBGdbdc�dce�ZCGddde�dee�ZDGdfdg�dge�ZEGdhdi�dieF�ZGGdjdk�dkeG�ZHGdldm�dmeG�ZIGdndo�doeH�ZJeIddp�ZKeIdqdr�ZLeIdsdt�ZMejNdujOdvjPe���jQZRejNdwjOdvjPe�jSdxdy�jSdzd{���jTZUejNd|�jVZWejNdwjOdvjPe�jSdxdy�jSdzd{���jTZXejNdwjOdvjPe�jSdxdy�jSdzd{���jTZYejNdwjOdvjPe�jSdxdy�jSdzd{���jTZZd}d~�Z[dd��Z\d�d��Z]d�d��Z^d�d��Z_d�d��Z`d�d��Zad�d��Zbd�d��Zcd�d��Zdd�d��Zed�d��Zfd�d��Zgd�d��Zhd�d��Zid�d��Zjd�d��Zkd�d��Zld�d��Zmd�d��Znd�d��Zod�d��Zpd�d��Zqd�d��Zrd�d��Zsd�d��Ztd�d��Zud�d��Zvd�d��Zwd�d��Zxd�d��Zyd�d��Zzd�d��Z{d�d��Z|d�d„Z}d�dĄZ~d�dƄZd�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�d܄Z�d�dބZ�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�d�d�Z�dS)��N)�	hexdigits)�OrderedDict)�
itemgetter)�_encoded_words)�errors)�utilsz 	�(z
()<>@,:;.\"[]�.z."(z/?=z*'%�%cCs dt|�jdd�jdd�dS)N�"�\z\\z\")�str�replace)�value�r�2/usr/lib64/python3.6/email/_header_value_parser.py�quote_string`srcs�eZdZdZdZdZ�fdd�Zdd�Z�fdd�Ze	d	d
��Z
e	dd��Zd
d�Ze	dd��Z
e	dd��Zdd�Zddd�Zddd�Zddd�Z�ZS)�	TokenListNTcst�j||�g|_dS)N)�super�__init__�defects)�self�args�kw)�	__class__rrrmszTokenList.__init__cCsdjdd�|D��S)N�css|]}t|�VqdS)N)r
)�.0�xrrr�	<genexpr>rsz$TokenList.__str__.<locals>.<genexpr>)�join)rrrr�__str__qszTokenList.__str__csdj|jjt�j��S)Nz{}({}))�formatr�__name__r�__repr__)r)rrrr#ts
zTokenList.__repr__cCsdjdd�|D��S)Nrcss|]}|jr|jVqdS)N)r)rrrrrrzsz"TokenList.value.<locals>.<genexpr>)r)rrrrrxszTokenList.valuecCstdd�|D�|j�S)Ncss|]}|jVqdS)N)�all_defects)rrrrrr~sz(TokenList.all_defects.<locals>.<genexpr>)�sumr)rrrrr$|szTokenList.all_defectscCs|dj�S)Nr)�startswith_fws)rrrrr&�szTokenList.startswith_fwscCstdd�|D��S)Ncss|]}|jVqdS)N)�
as_ew_allowed)r�partrrrr�sz*TokenList.as_ew_allowed.<locals>.<genexpr>)�all)rrrrr'�szTokenList.as_ew_allowedcCs"g}x|D]}|j|j�q
W|S)N)�extend�comments)rr+�tokenrrrr+�s
zTokenList.commentscCst||d�S)N)�policy)�_refold_parse_tree)rr-rrr�fold�szTokenList.foldrcCst|j|d��dS)N)�indent)�print�ppstr)rr0rrr�pprint�szTokenList.pprintcCsdj|j|d��S)N�
)r0)r�_pp)rr0rrrr2�szTokenList.ppstrccs~dj||jj|j�Vx<|D]4}t|d�s<|dj|�Vq|j|d�EdHqW|jrhdj|j�}nd}dj||�VdS)Nz{}{}/{}(r5z*    !! invalid element in token list: {!r}z    z Defects: {}rz{}){})r!rr"�
token_type�hasattrr5r)rr0r,Zextrarrrr5�s


z
TokenList._pp)r)r)r)r"�
__module__�__qualname__r6�syntactic_break�ew_combine_allowedrr r#�propertyrr$r&r'r+r/r3r2r5�
__classcell__rr)rrrgs

rc@s$eZdZedd��Zedd��ZdS)�WhiteSpaceTokenListcCsdS)N� r)rrrrr�szWhiteSpaceTokenList.valuecCsdd�|D�S)NcSsg|]}|jdkr|j�qS)�comment)r6�content)rrrrr�
<listcomp>�sz0WhiteSpaceTokenList.comments.<locals>.<listcomp>r)rrrrr+�szWhiteSpaceTokenList.commentsN)r"r8r9r<rr+rrrrr>�sr>c@seZdZdZdS)�UnstructuredTokenList�unstructuredN)r"r8r9r6rrrrrC�srCc@seZdZdZdS)�Phrase�phraseN)r"r8r9r6rrrrrE�srEc@seZdZdZdS)�WordZwordN)r"r8r9r6rrrrrG�srGc@seZdZdZdS)�CFWSList�cfwsN)r"r8r9r6rrrrrH�srHc@seZdZdZdS)�Atom�atomN)r"r8r9r6rrrrrJ�srJc@seZdZdZdZdS)�Tokenr,FN)r"r8r9r6Zencode_as_ewrrrrrL�srLc@seZdZdZdZdZdZdS)�EncodedWordzencoded-wordN)r"r8r9r6�cte�charset�langrrrrrM�srMc@s4eZdZdZedd��Zedd��Zedd��ZdS)	�QuotedStringz
quoted-stringcCs"x|D]}|jdkr|jSqWdS)Nzbare-quoted-string)r6r)rrrrrrA�s

zQuotedString.contentcCsBg}x2|D]*}|jdkr(|jt|��q
|j|j�q
Wdj|�S)Nzbare-quoted-stringr)r6�appendr
rr)r�resrrrr�quoted_value�s

zQuotedString.quoted_valuecCs"x|D]}|jdkr|jSqWdS)Nzbare-quoted-string)r6r)rr,rrr�stripped_value�s

zQuotedString.stripped_valueN)r"r8r9r6r<rArTrUrrrrrQ�s
rQc@s$eZdZdZdd�Zedd��ZdS)�BareQuotedStringzbare-quoted-stringcCstdjdd�|D���S)Nrcss|]}t|�VqdS)N)r
)rrrrrr�sz+BareQuotedString.__str__.<locals>.<genexpr>)rr)rrrrr �szBareQuotedString.__str__cCsdjdd�|D��S)Nrcss|]}t|�VqdS)N)r
)rrrrrr�sz)BareQuotedString.value.<locals>.<genexpr>)r)rrrrr�szBareQuotedString.valueN)r"r8r9r6r r<rrrrrrV�srVc@s8eZdZdZdd�Zdd�Zedd��Zedd	��Zd
S)�Commentr@cs(djtdg�fdd��D�dggg��S)Nrrcsg|]}�j|��qSr)�quote)rr)rrrrB	sz#Comment.__str__.<locals>.<listcomp>�))rr%)rr)rrr s
zComment.__str__cCs2|jdkrt|�St|�jdd�jdd�jdd�S)Nr@rz\\rz\(rYz\))r6r
r)rrrrrrX
s

z
Comment.quotecCsdjdd�|D��S)Nrcss|]}t|�VqdS)N)r
)rrrrrrsz"Comment.content.<locals>.<genexpr>)r)rrrrrAszComment.contentcCs|jgS)N)rA)rrrrr+szComment.commentsN)	r"r8r9r6r rXr<rAr+rrrrrWs
rWc@s4eZdZdZedd��Zedd��Zedd��ZdS)	�AddressListzaddress-listcCsdd�|D�S)NcSsg|]}|jdkr|�qS)�address)r6)rrrrrrB"sz)AddressList.addresses.<locals>.<listcomp>r)rrrr�	addresses szAddressList.addressescCstdd�|D�g�S)Ncss|]}|jdkr|jVqdS)r[N)r6�	mailboxes)rrrrrr&sz(AddressList.mailboxes.<locals>.<genexpr>)r%)rrrrr]$szAddressList.mailboxescCstdd�|D�g�S)Ncss|]}|jdkr|jVqdS)r[N)r6�
all_mailboxes)rrrrrr+sz,AddressList.all_mailboxes.<locals>.<genexpr>)r%)rrrrr^)szAddressList.all_mailboxesN)r"r8r9r6r<r\r]r^rrrrrZsrZc@s4eZdZdZedd��Zedd��Zedd��ZdS)	�Addressr[cCs|djdkr|djSdS)Nr�group)r6�display_name)rrrrra3szAddress.display_namecCs4|djdkr|dgS|djdkr*gS|djS)Nr�mailboxzinvalid-mailbox)r6r])rrrrr]8s

zAddress.mailboxescCs:|djdkr|dgS|djdkr0|dgS|djS)Nrrbzinvalid-mailbox)r6r^)rrrrr^@s


zAddress.all_mailboxesN)r"r8r9r6r<rar]r^rrrrr_/sr_c@s(eZdZdZedd��Zedd��ZdS)�MailboxListzmailbox-listcCsdd�|D�S)NcSsg|]}|jdkr|�qS)rb)r6)rrrrrrBNsz)MailboxList.mailboxes.<locals>.<listcomp>r)rrrrr]LszMailboxList.mailboxescCsdd�|D�S)NcSsg|]}|jdkr|�qS)rb�invalid-mailbox)rbrd)r6)rrrrrrBRsz-MailboxList.all_mailboxes.<locals>.<listcomp>r)rrrrr^PszMailboxList.all_mailboxesN)r"r8r9r6r<r]r^rrrrrcHsrcc@s(eZdZdZedd��Zedd��ZdS)�	GroupListz
group-listcCs"|s|djdkrgS|djS)Nrzmailbox-list)r6r])rrrrr]ZszGroupList.mailboxescCs"|s|djdkrgS|djS)Nrzmailbox-list)r6r^)rrrrr^`szGroupList.all_mailboxesN)r"r8r9r6r<r]r^rrrrreVsrec@s4eZdZdZedd��Zedd��Zedd��ZdS)	�Groupr`cCs|djdkrgS|djS)N�z
group-list)r6r])rrrrr]kszGroup.mailboxescCs|djdkrgS|djS)Nrgz
group-list)r6r^)rrrrr^qszGroup.all_mailboxescCs
|djS)Nr)ra)rrrrrawszGroup.display_nameN)r"r8r9r6r<r]r^rarrrrrfgsrfc@sLeZdZdZedd��Zedd��Zedd��Zedd	��Zed
d��Z	dS)
�NameAddrz	name-addrcCst|�dkrdS|djS)N�r)�lenra)rrrrra�szNameAddr.display_namecCs
|djS)Nri���)�
local_part)rrrrrl�szNameAddr.local_partcCs
|djS)Nrirk)�domain)rrrrrm�szNameAddr.domaincCs
|djS)Nrirk)�route)rrrrrn�szNameAddr.routecCs
|djS)Nrirk)�	addr_spec)rrrrro�szNameAddr.addr_specN)
r"r8r9r6r<rarlrmrnrorrrrrh|srhc@s@eZdZdZedd��Zedd��Zedd��Zedd	��Zd
S)�	AngleAddrz
angle-addrcCs"x|D]}|jdkr|jSqWdS)Nz	addr-spec)r6rl)rrrrrrl�s

zAngleAddr.local_partcCs"x|D]}|jdkr|jSqWdS)Nz	addr-spec)r6rm)rrrrrrm�s

zAngleAddr.domaincCs"x|D]}|jdkr|jSqWdS)Nz	obs-route)r6�domains)rrrrrrn�s

zAngleAddr.routecCs<x6|D]*}|jdkr|jr |jSt|j�|jSqWdSdS)Nz	addr-specz<>)r6rlror)rrrrrro�s

zAngleAddr.addr_specN)	r"r8r9r6r<rlrmrnrorrrrrp�s
rpc@seZdZdZedd��ZdS)�ObsRoutez	obs-routecCsdd�|D�S)NcSsg|]}|jdkr|j�qS)rm)r6rm)rrrrrrB�sz$ObsRoute.domains.<locals>.<listcomp>r)rrrrrq�szObsRoute.domainsN)r"r8r9r6r<rqrrrrrr�srrc@sLeZdZdZedd��Zedd��Zedd��Zedd	��Zed
d��Z	dS)
�MailboxrbcCs|djdkr|djSdS)Nrz	name-addr)r6ra)rrrrra�szMailbox.display_namecCs
|djS)Nr)rl)rrrrrl�szMailbox.local_partcCs
|djS)Nr)rm)rrrrrm�szMailbox.domaincCs|djdkr|djSdS)Nrz	name-addr)r6rn)rrrrrn�sz
Mailbox.routecCs
|djS)Nr)ro)rrrrro�szMailbox.addr_specN)
r"r8r9r6r<rarlrmrnrorrrrrs�srsc@s,eZdZdZedd��ZeZZZZ	dS)�InvalidMailboxzinvalid-mailboxcCsdS)Nr)rrrrra�szInvalidMailbox.display_nameN)
r"r8r9r6r<rarlrmrnrorrrrrt�srtcs(eZdZdZdZe�fdd��Z�ZS)�DomainrmFcsdjt�jj��S)Nr)rrr�split)r)rrrrm�sz
Domain.domain)r"r8r9r6r'r<rmr=rr)rrru�sruc@seZdZdZdS)�DotAtomzdot-atomN)r"r8r9r6rrrrrw�srwc@seZdZdZdZdS)�DotAtomTextz
dot-atom-textTN)r"r8r9r6r'rrrrrx�srxc@sDeZdZdZdZedd��Zedd��Zedd��Zed	d
��Z	dS)�AddrSpecz	addr-specFcCs
|djS)Nr)rl)rrrrrlszAddrSpec.local_partcCst|�dkrdS|djS)N�rirk)rjrm)rrrrrmszAddrSpec.domaincCs<t|�dkr|djS|djj�|dj|djj�S)Nrzrrirg)rjr�rstrip�lstrip)rrrrrs
zAddrSpec.valuecCsLt|j�}t|�t|t�kr*t|j�}n|j}|jdk	rH|d|jS|S)N�@)�setrlrj�
DOT_ATOM_ENDSrrm)rZnamesetZlprrrros

zAddrSpec.addr_specN)
r"r8r9r6r'r<rlrmrrorrrrry�sryc@seZdZdZdZdS)�ObsLocalPartzobs-local-partFN)r"r8r9r6r'rrrrr�sr�cs4eZdZdZdZedd��Ze�fdd��Z�ZS)�DisplayNamezdisplay-nameFcCs�t|�}|djdkr"|jd�n*|ddjdkrLt|ddd��|d<|djdkrd|j�n*|ddjdkr�t|ddd��|d	<|jS)
NrrIrirkrkrkrkrkrk)rr6�popr)rrSrrrra)s
zDisplayName.display_namecs�d}|jrd}nx|D]}|jdkrd}qW|r�d}}|djdksX|ddjdkr\d}|d	jdks||d
djdkr�d}|t|j�|St�jSdS)NFTz
quoted-stringrrrIr?rirkrkrk)rr6rrarr)rrXrZpreZpost)rrrr8s

  zDisplayName.value)	r"r8r9r6r;r<rarr=rr)rrr�$sr�c@s,eZdZdZdZedd��Zedd��ZdS)�	LocalPartz
local-partFcCs&|djdkr|djS|djSdS)Nrz
quoted-string)r6rTr)rrrrrQs
zLocalPart.valuecCs�tg}t}d}x�|dtgD]�}|jdkr.q|r^|jdkr^|djdkr^t|dd��|d<t|t�}|r�|jdkr�|djdkr�|jt|dd���n
|j|�|d	}|}qWt|dd
��}|jS)NFrrI�dotrirkrkrkrkrk)�DOTr6r�
isinstancerRr)rrSZlastZ
last_is_tl�tokZis_tlrrrrlXs$


zLocalPart.local_partN)r"r8r9r6r'r<rrlrrrrr�Lsr�cs4eZdZdZdZe�fdd��Zedd��Z�ZS)�
DomainLiteralzdomain-literalFcsdjt�jj��S)Nr)rrrrv)r)rrrrmuszDomainLiteral.domaincCs"x|D]}|jdkr|jSqWdS)N�ptext)r6r)rrrrr�ipys

zDomainLiteral.ip)	r"r8r9r6r'r<rmr�r=rr)rrr�psr�c@seZdZdZdZdZdS)�MIMEVersionzmime-versionN)r"r8r9r6�major�minorrrrrr��sr�c@s4eZdZdZdZdZdZedd��Zedd��Z	dS)	�	Parameter�	parameterFzus-asciicCs|jr|djSdS)Nrir)�	sectioned�number)rrrr�section_number�szParameter.section_numbercCsbx\|D]T}|jdkr|jS|jdkrx4|D],}|jdkr*x|D]}|jdkr>|jSq>Wq*WqWdS)Nrz
quoted-stringzbare-quoted-stringr)r6rU)rr,rrr�param_value�s






zParameter.param_valueN)
r"r8r9r6r��extendedrOr<r�r�rrrrr��sr�c@seZdZdZdS)�InvalidParameterzinvalid-parameterN)r"r8r9r6rrrrr��sr�c@seZdZdZedd��ZdS)�	Attribute�	attributecCs$x|D]}|jjd�r|jSqWdS)N�attrtext)r6�endswithr)rr,rrrrU�s
zAttribute.stripped_valueN)r"r8r9r6r<rUrrrrr��sr�c@seZdZdZdZdS)�Section�sectionN)r"r8r9r6r�rrrrr��sr�c@seZdZdZedd��ZdS)�ValuercCs2|d}|jdkr|d}|jjd�r,|jS|jS)NrrIri�
quoted-stringr��extended-attribute)r�r�r�)r6r�rUr)rr,rrrrU�s
zValue.stripped_valueN)r"r8r9r6r<rUrrrrr��sr�c@s(eZdZdZdZedd��Zdd�ZdS)�MimeParameterszmime-parametersFccs�t�}x\|D]T}|jjd�sq|djdkr.q|djj�}||krLg||<||j|j|f�qW�x�|j�D�]�\}}t|t	d�d�}|dd}|j
}|jr�t|�dkr�|dddkr�|ddj
jtjd��|dd�}g}d}x�|D]�\}	}
|	|k�r6|
j�s$|
j
jtjd��q�n|
j
jtjd��|d7}|
j}|
j�r�ytjj|�}Wn&tk
�r�tjj|d	d
�}YnRXy|j|d�}Wn"tk
�r�|jdd�}YnXtj|��r�|
j
jtj��|j|�q�Wd
j|�}||fVqpWdS)Nr�rr�)�keyriz.duplicate parameter name; duplicate(s) ignoredz+duplicate parameter name; duplicate ignoredz(inconsistent RFC2231 parameter numberingzlatin-1)�encoding�surrogateescapezus-asciir)rr6r�r�striprRr��items�sortedrrOr�rjrr�InvalidHeaderDefectr��urllib�parseZunquote_to_bytes�UnicodeEncodeErrorZunquote�decode�LookupErrorr�_has_surrogates�UndecodableBytesDefectr)r�paramsr,�name�partsZfirst_paramrOZvalue_parts�ir��paramrrrrr��sZ




zMimeParameters.paramscCsXg}x8|jD].\}}|r0|jdj|t|���q|j|�qWdj|�}|rTd|SdS)Nz{}={}z; r?r)r�rRr!rr)rr�r�rrrrr s
zMimeParameters.__str__N)r"r8r9r6r:r<r�r rrrrr��sFr�c@seZdZdZedd��ZdS)�ParameterizedHeaderValueFcCs&x t|�D]}|jdkr
|jSq
WiS)Nzmime-parameters)�reversedr6r�)rr,rrrr�#s

zParameterizedHeaderValue.paramsN)r"r8r9r:r<r�rrrrr�sr�c@seZdZdZdZdZdZdS)�ContentTypezcontent-typeF�textZplainN)r"r8r9r6r'�maintype�subtyperrrrr�+sr�c@seZdZdZdZdZdS)�ContentDispositionzcontent-dispositionFN)r"r8r9r6r'�content_dispositionrrrrr�3sr�c@seZdZdZdZdZdS)�ContentTransferEncodingzcontent-transfer-encodingFZ7bitN)r"r8r9r6r'rNrrrrr�:sr�c@seZdZdZdZdS)�HeaderLabelzheader-labelFN)r"r8r9r6r'rrrrr�Asr�c@seZdZdZdS)�Header�headerN)r"r8r9r6rrrrr�Gsr�csreZdZdZdZdZ�fdd�Z�fdd�Zdd�Ze	dd	��Z
d�fdd�	Zd
d�Ze	dd��Z
dd�Z�ZS)�TerminalTcst�j||�}||_g|_|S)N)r�__new__r6r)�clsrr6r)rrrr�VszTerminal.__new__csdj|jjt�j��S)Nz{}({}))r!rr"rr#)r)rrrr#\szTerminal.__repr__cCst|jjd|j�dS)N�/)r1rr"r6)rrrrr3_szTerminal.pprintcCs
t|j�S)N)�listr)rrrrr$bszTerminal.all_defectsrcs2dj||jj|jt�j�|js"dn
dj|j��gS)Nz
{}{}/{}({}){}rz {})r!rr"r6rr#r)rr0)rrrr5fszTerminal._ppcCsdS)Nr)rrrr�pop_trailing_wsoszTerminal.pop_trailing_wscCsgS)Nr)rrrrr+sszTerminal.commentscCst|�|jfS)N)r
r6)rrrr�__getnewargs__wszTerminal.__getnewargs__)r)r"r8r9r'r;r:r�r#r3r<r$r5r�r+r�r=rr)rrr�Ps	r�c@s eZdZedd��Zdd�ZdS)�WhiteSpaceTerminalcCsdS)Nr?r)rrrrr}szWhiteSpaceTerminal.valuecCsdS)NTr)rrrrr&�sz!WhiteSpaceTerminal.startswith_fwsN)r"r8r9r<rr&rrrrr�{sr�c@s eZdZedd��Zdd�ZdS)�
ValueTerminalcCs|S)Nr)rrrrr�szValueTerminal.valuecCsdS)NFr)rrrrr&�szValueTerminal.startswith_fwsN)r"r8r9r<rr&rrrrr��sr�c@s eZdZedd��Zdd�ZdS)�EWWhiteSpaceTerminalcCsdS)Nrr)rrrrr�szEWWhiteSpaceTerminal.valuecCsdS)Nrr)rrrrr �szEWWhiteSpaceTerminal.__str__N)r"r8r9r<rr rrrrr��sr�r��,zlist-separatorr}zroute-component-markerz([{}]+)rz[^{}]+rz\\�]z\]z[\x00-\x20\x7F]cCs>t|�}|r|jjtj|��tj|�r:|jjtjd��dS)Nz*Non-ASCII characters found in header token)�_non_printable_finderrrRrZNonPrintableDefectrr�r�)�xtextZnon_printablesrrr�_validate_xtext�s

r�cCs�t|d�^}}g}d}d}xbtt|��D]J}||dkrL|rFd}d}nd}q(|rVd}n|||krdP|j||�q(W|d}dj|�dj||d�g|�|fS)NriFrTr)�
_wsp_splitter�rangerjrRr)r�endcharsZfragment�	remainderZvchars�escape�had_qp�posrrr�_get_ptext_to_endchars�s$	r�cCs.|j�}t|dt|�t|��d�}||fS)N�fws)r|r�rj)rZnewvaluer�rrr�get_fws�sr�c
Cs�t�}|jd�s tjdj|���|dd�jdd�^}}||dd�krXtjdj|���dj|�}t|�dkr�|dtkr�|dtkr�|jdd�^}}|d|}t|j��dkr�|j	j
tjd��||_dj|�}yt
jd|d�\}}}}	Wn(tk
�rtjd	j|j���YnX||_||_|j	j|	�xh|�r�|dtk�rdt|�\}
}|j
|
��q6t|d�^}}t|d
�}t|�|j
|�dj|�}�q6W||fS)Nz=?z"expected encoded word but found {}rgz?=rirrzwhitespace inside encoded wordz!encoded word format invalid: '{}'�vtext)rM�
startswithr�HeaderParseErrorr!rvrrjrrrRr�rN�_ewr��
ValueErrorrOrPr*�WSPr�r�r�r�)
r�ewr�r�Zremstr�restr�rOrPrr,�charsr�rrr�get_encoded_word�sH

$




r�cCst�}�x|�r|dtkr4t|�\}}|j|�q
|jd�r�yt|�\}}Wntjk
rdYnrXd}t|�dkr�|dj	dkr�|j
jtjd��d}|r�t|�dkr�|d
j	d	kr�t|dd�|d<|j|�q
t
|d�^}}t|d
�}t|�|j|�dj|�}q
W|S)Nrz=?Trir�z&missing whitespace before encoded wordFrgzencoded-wordr�rrk���rkrk)rCr�r�rRr�r�rr�rjr6rr�r�r�r�r�r)rrDr,Zhave_wsr�r�r�rrr�get_unstructureds:






r�cCs*t|d�\}}}t|d�}t|�||fS)Nz()r�)r�r�r�)rr��_rrr�get_qp_ctextWs
r�cCs*t|d�\}}}t|d�}t|�||fS)Nrr�)r�r�r�)rr�r�rrr�get_qcontenths

r�cCsNt|�}|stjdj|���|j�}|t|�d�}t|d�}t|�||fS)Nzexpected atext but found '{}'�atext)�_non_atom_end_matcherrr�r!r`rjr�r�)r�mr�rrr�	get_atextws
r�cCs|ddkrtjdj|���t�}|dd�}|ddkrPt|�\}}|j|�x�|r�|ddkr�|dtkr|t|�\}}nd|dd�dkr�y"t|�\}}|j	jtj
d��Wq�tjk
r�t|�\}}Yq�Xnt|�\}}|j|�qRW|�s|j	jtj
d��||fS||dd�fS)	Nrrzexpected '"' but found '{}'rirgz=?z!encoded word inside quoted stringz"end of header inside quoted string)rr�r!rVr�rRr�r�r�rr�)rZbare_quoted_stringr,rrr�get_bare_quoted_string�s2


r�cCs�|r |ddkr tjdj|���t�}|dd�}x^|r�|ddkr�|dtkr^t|�\}}n&|ddkrxt|�\}}nt|�\}}|j|�q4W|s�|j	jtj
d��||fS||dd�fS)Nrrzexpected '(' but found '{}'rirYzend of header inside comment)rr�r!rWr�r��get_commentr�rRrr�)rr@r,rrrr��s"
r�cCsTt�}xD|rJ|dtkrJ|dtkr2t|�\}}nt|�\}}|j|�qW||fS)Nr)rH�CFWS_LEADERr�r�r�rR)rrIr,rrr�get_cfws�sr�cCspt�}|r,|dtkr,t|�\}}|j|�t|�\}}|j|�|rh|dtkrht|�\}}|j|�||fS)Nr)rQr�r�rRr�)rZ
quoted_stringr,rrr�get_quoted_string�s


r�cCs�t�}|r,|dtkr,t|�\}}|j|�|rL|dtkrLtjdj|���|jd�r�yt	|�\}}Wq�tjk
r�t
|�\}}Yq�Xnt
|�\}}|j|�|r�|dtkr�t|�\}}|j|�||fS)Nrzexpected atom but found '{}'z=?)rJr�r�rR�	ATOM_ENDSrr�r!r�r�r�)rrKr,rrr�get_atom�s$



r�cCs�t�}|s|dtkr(tjdj|���xP|rx|dtkrxt|�\}}|j|�|r*|ddkr*|jt�|dd�}q*W|dtkr�tjdjd|���||fS)Nrz8expected atom at a start of dot-atom-text but found '{}'r	riz4expected atom at end of dot-atom-text but found '{}'rk)rxr�rr�r!r�rRr�)rZ
dot_atom_textr,rrr�get_dot_atom_text�s

r�cCs�t�}|dtkr(t|�\}}|j|�|jd�rhyt|�\}}Wqttjk
rdt|�\}}YqtXnt|�\}}|j|�|r�|dtkr�t|�\}}|j|�||fS)Nrz=?)	rwr�r�rRr�r�rr�r�)rZdot_atomr,rrr�get_dot_atoms



r�cCs�|dtkrt|�\}}nd}|ddkr8t|�\}}n*|dtkrVtjdj|���nt|�\}}|dk	rx|g|dd�<||fS)Nrrz1Expected 'atom' or 'quoted-string' but found '{}')r�r�r��SPECIALSrr�r!r�)r�leaderr,rrr�get_word(s
r�cCs�t�}yt|�\}}|j|�Wn(tjk
rH|jjtjd��YnXx�|r�|dtkr�|ddkr�|jt�|jjtj	d��|dd�}qLyt|�\}}WnDtjk
r�|dt
kr�t|�\}}|jjtj	d��n�YnX|j|�qLW||fS)Nzphrase does not start with wordrr	zperiod in 'phrase'rizcomment found without atom)rEr�rRrr�rr��PHRASE_ENDSr��ObsoleteHeaderDefectr�r�)rrFr,rrr�
get_phraseGs.




r�cCstt�}d}|dtkr"t|�\}}|s6tjdj|���yt|�\}}Wn^tjk
r�yt|�\}}Wn6tjk
r�|ddkr�|dtkr��t	�}YnXYnX|dk	r�|g|dd�<|j
|�|o�|ddks�|dtk�r2tt|�|�\}}|j
dk�r|jj
tjd��n|jj
tjd��||d<y|jjd�Wn(tk
�rj|jj
tjd��YnX||fS)	Nrz"expected local-part but found '{}'rzinvalid-obs-local-partz<local-part is not dot-atom, quoted-string, or obs-local-partz,local-part is not a dot-atom (contains CFWS)�asciiz)local-part contains non-ASCII characters))r�r�r�rr�r!r�r�r�rrR�get_obs_local_partr
r6rr�r�r�encoder�ZNonASCIILocalPartDefect)rrlr�r,�obs_local_partrrr�get_local_partmsB




r�cCs�t�}d}�x|o(|ddks,|dtk�r*|ddkrl|rN|jjtjd��|jt�d}|dd�}qnD|ddkr�|jt|dd��|dd�}|jjtjd	��d}q|r�|djd
kr�|jjtjd��yt	|�\}}d}Wn4tj
k
�r|dtk�r�t|�\}}YnX|j|�qW|djd
k�s\|djdk�rn|djd
k�rn|jjtjd
��|djd
k�s�|djdk�r�|djd
k�r�|jjtjd��|j�r�d|_||fS)NFrrr	zinvalid repeated '.'Trizmisplaced-specialz/'\' character outside of quoted-string/ccontentr�zmissing '.' between wordsrIz!Invalid leading '.' in local partrgz"Invalid trailing '.' in local partzinvalid-obs-local-partrkrkrkr�)
r�r�rrRrr�r�r�r6r�r�r�r�)rr�Zlast_non_ws_was_dotr,rrrr��sV"





r�cCs@t|d�\}}}t|d�}|r0|jjtjd��t|�||fS)Nz[]r�z(quoted printable found in domain-literal)r�r�rrRrr�r�)rr�r�rrr�	get_dtext�s

r�cCs,|rdS|jtjd��|jtdd��dS)NFz"end of input inside domain-literalr�zdomain-literal-endT)rRrr�r�)r�domain_literalrrr�_check_for_early_dl_end�srcCslt�}|dtkr(t|�\}}|j|�|s6tjd��|ddkrRtjdj|���|dd�}t||�rp||fS|jtdd��|dt	kr�t
|�\}}|j|�t|�\}}|j|�t||�r�||fS|dt	kr�t
|�\}}|j|�t||��r||fS|ddk�rtjdj|���|jtdd	��|dd�}|�rd|dtk�rdt|�\}}|j|�||fS)
Nrzexpected domain-literal�[z6expected '[' at start of domain-literal but found '{}'rizdomain-literal-startr�z4expected ']' at end of domain-literal but found '{}'zdomain-literal-end)r�r�r�rRrr�r!rr�r�r�r�)rrr,rrr�get_domain_literal�sD







rcCstt�}d}|dtkr"t|�\}}|s6tjdj|���|ddkrvt|�\}}|dk	rd|g|dd�<|j|�||fSyt|�\}}Wn"tjk
r�t	|�\}}YnX|r�|ddkr�tjd��|dk	r�|g|dd�<|j|�|o�|ddk�rl|j
jtjd��|djdk�r(|d|dd�<xB|�rj|ddk�rj|jt
�t	|d	d��\}}|j|��q*W||fS)
Nrzexpected domain but found '{}'rr}zInvalid Domainr	z(domain is not a dot-atom (contains CFWS)zdot-atomri)rur�r�rr�r!rrRr�r�rr�r6r�)rrmr�r,rrr�
get_domains@




rcCs~t�}t|�\}}|j|�|s.|ddkrH|jjtjd��||fS|jtdd��t|dd��\}}|j|�||fS)Nrr}z"add-spec local part with no domainzaddress-at-symbolri)ryr�rRrrr�r�r)rror,rrr�
get_addr_spec,s


rcCs�t�}xf|rl|ddks$|dtkrl|dtkrHt|�\}}|j|�q|ddkr|jt�|dd�}qW|s�|ddkr�tjdj|���|jt�t	|dd��\}}|j|�x�|o�|ddk�rB|jt�|dd�}|s�P|dtk�rt|�\}}|j|�|ddkr�|jt�t	|dd��\}}|j|�q�W|�sTtjd��|ddk�rrtjdj|���|jt
dd	��||dd�fS)
Nrr�rir}z(expected obs-route domain but found '{}'z%end of header while parsing obs-route�:z4expected ':' marking end of obs-route but found '{}'zend-of-obs-route-marker)rrr�r�rR�
ListSeparatorrr�r!�RouteComponentMarkerrr�)rZ	obs_router,rrr�
get_obs_route<sB






r	cCs�t�}|dtkr(t|�\}}|j|�|s:|ddkrJtjdj|���|jtdd��|dd�}|ddkr�|jtdd��|jjtj	d��|dd�}||fSyt
|�\}}Wnztjk
�r2y"t|�\}}|jjtjd	��Wn(tjk
�rtjd
j|���YnX|j|�t
|�\}}YnX|j|�|�r`|ddk�r`|dd�}n|jjtj	d��|jtdd��|�r�|dtk�r�t|�\}}|j|�||fS)Nr�<z"expected angle-addr but found '{}'zangle-addr-startri�>zangle-addr-endznull addr-spec in angle-addrz*obsolete route specification in angle-addrz.expected addr-spec or obs-route but found '{}'z"missing trailing '>' on angle-addr)
rpr�r�rRrr�r!r�rr�rr	r�)rZ
angle_addrr,rrr�get_angle_addresJ






rcCs<t�}t|�\}}|j|dd��|jdd�|_||fS)N)r�r�r*r)rrar,rrr�get_display_name�s
r
cCs�t�}d}|dtkr6t|�\}}|s6tjdj|���|ddkr�|dtkr^tjdj|���t|�\}}|s~tjdj|���|dk	r�|g|ddd�<d}|j|�t	|�\}}|dk	r�|g|dd�<|j|�||fS)Nrz!expected name-addr but found '{}'r
)
rhr�r�rr�r!r�r
rRr)rZ	name_addrr�r,rrr�
get_name_addr�s0

rcCs�t�}yt|�\}}WnNtjk
rdyt|�\}}Wn&tjk
r^tjdj|���YnXYnXtdd�|jD��r�d|_|j	|�||fS)Nzexpected mailbox but found '{}'css|]}t|tj�VqdS)N)r�rr�)rrrrrr�szget_mailbox.<locals>.<genexpr>zinvalid-mailbox)
rsrrr�rr!�anyr$r6rR)rrbr,rrr�get_mailbox�s
rcCsht�}xX|r^|d|kr^|dtkrF|jt|dd��|dd�}qt|�\}}|j|�qW||fS)Nrzmisplaced-specialri)rtr�rRr�r�)rr�Zinvalid_mailboxr,rrr�get_invalid_mailbox�srcCs�t�}�x�|o|ddk�r�yt|�\}}|j|�W�ntjk
�r@d}|dtkr�t|�\}}|sz|ddkr�|j|�|jjtjd��n@t	|d�\}}|dk	r�|g|dd�<|j|�|jjtj
d��nb|ddkr�|jjtjd��nBt	|d�\}}|dk	�r |g|dd�<|j|�|jjtj
d��YnX|�r�|ddk�r�|d	}d|_t	|d�\}}|j|�|jjtj
d��|r
|ddkr
|jt
�|dd�}q
W||fS)
Nr�;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listr�rizinvalid-mailboxrk)rcrrRrr�r�r�rr�rr�r6r*r)rZmailbox_listr,r�rbrrr�get_mailbox_list�sN













rcCst�}|s$|jjtjd��||fSd}|r�|dtkr�t|�\}}|sl|jjtjd��|j|�||fS|ddkr�|j|�||fSt|�\}}t|j	�dkr�|dk	r�|j|�|j
|�|jjtjd��||fS|dk	r�|g|dd�<|j|�||fS)Nzend of header before group-listrzend of header in group-listrzgroup-list with empty entries)rerrRrr�r�r�rrjr^r*r�)rZ
group_listr�r,rrr�get_group_list s8







rcCs"t�}t|�\}}|s$|ddkr4tjdj|���|j|�|jtdd��|dd�}|r�|ddkr�|jtdd��||dd�fSt|�\}}|j|�|s�|jjtj	d��n|ddkr�tjd	j|���|jtdd��|dd�}|�r|dt
k�rt|�\}}|j|�||fS)
Nrrz8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorrirzgroup-terminatorzend of header in groupz)expected ';' at end of group but found {})rfr
rr�r!rRr�rrr�r�r�)rr`r,rrr�	get_groupEs2




rcCsxt�}yt|�\}}WnNtjk
rdyt|�\}}Wn&tjk
r^tjdj|���YnXYnX|j|�||fS)Nzexpected address but found '{}')r_rrr�rr!rR)rr[r,rrr�get_addresscs
rcCs�t�}�x�|�r�yt|�\}}|j|�W�n$tjk
�rP}�zd}|dtkr�t|�\}}|sr|ddkr�|j|�|jjtjd��nFt	|d�\}}|dk	r�|g|dd�<|jt
|g��|jjtjd��nh|ddkr�|jjtjd��nHt	|d�\}}|dk	�r|g|dd�<|jt
|g��|jjtjd��WYdd}~XnX|�r�|ddk�r�|d	d}d|_t	|d�\}}|j
|�|jjtjd��|r
|jtdd��|dd�}q
W||fS)
Nrr�z"address-list entry with no contentzinvalid address in address-listzempty element in address-listrizinvalid-mailboxzlist-separatorrk)rZrrRrr�r�r�rr�rr_r�r6r*r�)rZaddress_listr,�errr�rbrrr�get_address_list�sN












rcCs�t�}|s |jjtjd��|S|dtkrXt|�\}}|j|�|sX|jjtjd��d}x8|r�|ddkr�|dtkr�||d7}|dd�}q^W|j�s�|jjtjdj	|���|jt
|d��nt|�|_|jt
|d	��|o�|dtk�r
t|�\}}|j|�|�s |ddk�rX|jdk	�r>|jjtjd
��|�rT|jt
|d��|S|jt
dd��|dd�}|�r�|dtk�r�t|�\}}|j|�|�s�|jdk	�r�|jjtjd
��|Sd}x2|�r�|dtk�r�||d7}|dd�}�q�W|j��s2|jjtjdj	|���|jt
|d��nt|�|_
|jt
|d	��|�rv|dtk�rvt|�\}}|j|�|�r�|jjtjd
��|jt
|d��|S)Nz%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSrr	riz1Expected MIME major version number but found {!r}r��digitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)r�rrRr�HeaderMissingRequiredValuer�r��isdigitr�r!r��intr�r�)rZmime_versionr,rrrr�parse_mime_version�sv













rcCsht�}xX|r^|ddkr^|dtkrF|jt|dd��|dd�}qt|�\}}|j|�qW||fS)Nrrzmisplaced-specialri)r�r�rRr�r�)rZinvalid_parameterr,rrr�get_invalid_parametersrcCsNt|�}|stjdj|���|j�}|t|�d�}t|d�}t|�||fS)Nzexpected ttext but found '{}'�ttext)�_non_token_end_matcherrr�r!r`rjr�r�)rr�rrrr�	get_ttexts	
r!cCs�t�}|r,|dtkr,t|�\}}|j|�|rL|dtkrLtjdj|���t|�\}}|j|�|r�|dtkr�t|�\}}|j|�||fS)Nrzexpected token but found '{}')	rLr�r�rR�
TOKEN_ENDSrr�r!r!)rZmtokenr,rrr�	get_token's	


r#cCsNt|�}|stjdj|���|j�}|t|�d�}t|d�}t|�||fS)Nz expected attrtext but found {!r}r�)�_non_attribute_end_matcherrr�r!r`rjr�r�)rr�r�rrr�get_attrtext>s	
r%cCs�t�}|r,|dtkr,t|�\}}|j|�|rL|dtkrLtjdj|���t|�\}}|j|�|r�|dtkr�t|�\}}|j|�||fS)Nrzexpected token but found '{}')	r�r�r�rR�ATTRIBUTE_ENDSrr�r!r%)rr�r,rrr�
get_attributeQs	


r'cCsNt|�}|stjdj|���|j�}|t|�d�}t|d�}t|�||fS)Nz)expected extended attrtext but found {!r}zextended-attrtext)�#_non_extended_attribute_end_matcherrr�r!r`rjr�r�)rr�r�rrr�get_extended_attrtexths
r)cCs�t�}|r,|dtkr,t|�\}}|j|�|rL|dtkrLtjdj|���t|�\}}|j|�|r�|dtkr�t|�\}}|j|�||fS)Nrzexpected token but found '{}')	r�r�r�rR�EXTENDED_ATTRIBUTE_ENDSrr�r!r))rr�r,rrr�get_extended_attributezs


r+cCs�t�}|s|ddkr(tjdj|���|jtdd��|dd�}|sX|dj�rhtjdj|���d}x,|r�|dj�r�||d7}|dd�}qnW|ddkr�|dkr�|jjtjd	��t	|�|_
|jt|d
��||fS)Nr�*zExpected section but found {}zsection-markerriz$Expected section number but found {}r�0z'section number has an invalid leading 0r)r�rr�r!rRr�rrZInvalidHeaderErrorrr�)rr�rrrr�get_section�s&	

r.cCs�t�}|stjd��d}|dtkr0t|�\}}|sDtjdj|���|ddkr^t|�\}}nt|�\}}|dk	r�|g|dd�<|j|�||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r)	r�rr�r�r�r!r�r+rR)r�vr�r,rrr�	get_value�s 

r0cCsvt�}t|�\}}|j|�|s.|ddkrN|jjtjdj|���||fS|ddkr�y t|�\}}d|_|j|�Wntj	k
r�YnX|s�tj	d��|ddkr�|jt
dd��|dd�}d|_|dd	kr�tj	d
��|jt
d	d��|dd�}d}|�r.|dtk�r.t
|�\}}|j|�d}|}|j�rH|�rH|ddk�rHt|�\}}|j}d
}|jdk�r�|�r�|ddk�r�d}n$t|�\}}	|	�r�|	ddk�r�d}n(yt|�\}}	WnYnX|	�s�d}|�r2|jjtjd��|j|�x,|D]$}
|
jdk�rg|
dd�<|
}P�qW|}nd}|jjtjd��|�rb|ddk�rbd}nt|�\}}|j�s�|jdk�r�|�s�|ddk�r�|j|�|dk	�r�|}||fS|jjtjd��|�s|jjtjd��|j|�|dk�r�||fSn�|dk	�rFx|D]}
|
jdk�rP�qW|
jdk|j|
�|
j|_|ddk�rdtj	dj|���|jt
dd��|dd�}|�r�|ddk�r�t|�\}}|j|�|j|_|�s�|ddk�r�tj	dj|���|jt
dd��|dd�}|dk	�rJt�}x>|�rB|dtk�r(t|�\}}nt|�\}}|j|��qW|}nt|�\}}|j|�|dk	�rn|}||fS)Nrrz)Parameter contains name ({}) but no valuer,TzIncomplete parameterzextended-parameter-markerri�=zParameter not followed by '='zparameter-separatorrF�'z5Quoted string value for extended parameter is invalidzbare-quoted-stringzZParameter marked as extended but appears to have a quoted string value that is non-encodedzcApparent initial-extended-value but attribute was not marked as extended or was not initial sectionz(Missing required charset/lang delimiterszextended-attrtextr�z=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {})r�r'rRrrr�r!r.r�r�r�r�r�r�r�rUr�r%r)r6r0rrOrPr�r�r�r�)rr�r,r�r�ZappendtoZqstringZinner_valueZ
semi_validr��tr/rrr�
get_parameter�s�























r4cCsht�}�xZ|�rbyt|�\}}|j|�Wn�tjk
r�}z�d}|dtkrZt|�\}}|sl|j|�|S|ddkr�|dk	r�|j|�|jjtjd��n@t	|�\}}|r�|g|dd�<|j|�|jjtjdj
|���WYdd}~XnX|�r@|ddk�r@|d	}d|_t	|�\}}|j|�|jjtjdj
|���|r
|jt
dd��|dd�}q
W|S)
Nrrzparameter entry with no contentzinvalid parameter {!r}rizinvalid-parameterz)parameter with invalid trailing text {!r}zparameter-separatorrk)r�r4rRrr�r�r�rr�rr!r6r*r�)rZmime_parametersr,rr�r�rrr�parse_mime_parametersO	sD







 

r5cCs�xX|rX|ddkrX|dtkr@|jt|dd��|dd�}qt|�\}}|j|�qW|sbdS|jtdd��|jt|dd���dS)Nrrzmisplaced-specialrizparameter-separator)r�rRr�r�r5)Z	tokenlistrr,rrr�_find_mime_parameters�	sr6cCs�t�}d}|s$|jjtjd��|Syt|�\}}Wn8tjk
rl|jjtjdj|���t	||�|SX|j|�|s�|ddkr�|jjtjd��|r�t	||�|S|j
j�j�|_
|jtdd��|dd�}yt|�\}}Wn:tjk
�r$|jjtjd	j|���t	||�|SX|j|�|j
j�j�|_|�sJ|S|dd
k�r�|jjtjdj|���|`
|`t	||�|S|jtd
d��|jt|dd���|S)
NFz"Missing content type specificationz(Expected content maintype but found {!r}rr�zInvalid content typezcontent-type-separatorriz'Expected content subtype but found {!r}rz<Only parameters are valid after content type, but found {!r}zparameter-separator)r�rrRrrr#r�r�r!r6rr��lowerr�r�r�r5)rZctypeZrecoverr,rrr�parse_content_type_header�	sX











r8c
Cs�t�}|s |jjtjd��|Syt|�\}}Wn8tjk
rh|jjtjdj|���t	||�|SX|j|�|j
j�j�|_
|s�|S|ddkr�|jjtjdj|���t	||�|S|jtdd��|jt|dd���|S)NzMissing content dispositionz+Expected content disposition but found {!r}rrzCOnly parameters are valid after content disposition, but found {!r}zparameter-separatorri)r�rrRrrr#r�r�r!r6rr�r7r�r�r5)rZdisp_headerr,rrr� parse_content_disposition_header�	s2






r9cCs�t�}|s |jjtjd��|Syt|�\}}Wn.tjk
r^|jjtjdj|���YnX|j|�|j	j
�j�|_|s�|Sx^|r�|jjtjd��|dt
kr�|jt|dd��|dd�}q�t|�\}}|j|�q�W|S)Nz!Missing content transfer encodingz1Expected content transfer encoding but found {!r}z*Extra text after content transfer encodingrzmisplaced-specialri)r�rrRrrr#r�r�r!rr�r7rNr�r�r�)rZ
cte_headerr,rrr�&parse_content_transfer_encoding_header�	s.



r:cCsDd}|r@|dr@|ddtkr@|dd}|ddd	�|d
<|S)Nrrirkrkrkrkrkrkrkrk)r�)�linesZwsprrr�_steal_trailing_WSP_if_exists
s
r<cCs�|jptd�}|jrdnd}dg}d}d}d}tdd�}t|�}	�xH|	�r�|	jd�}
|
|krf|d8}qDt|
�}y|j|�|}Wn6tk
r�t	d	d
�|
j
D��r�d}nd}d}YnX|
jd
kr�t|
|||�qD|o�|�r�|
j
�sTd}d}|
j�rT|
j|d�dd�}
|j|
k�rTt|
�|t|d�k�rBt|�}|j|�|d|
7<qDt|
d��snt|
�|	}	nt|||||
j|�}d}qDt|�|t|d�k�r�|d|7<qD|
j�r�t|�d|k�r�t|�}|�s�|
j��r�|j||�qDt|
d��s.t|
�}|
j
�s$|d7}|j|�||	}	qD|
j
�rP|�rP|	jd|
�d}qDt|�}|�sh|
j��rx|j||�qD|d|7<qDW|jj|�|jS)Nz+infzutf-8zus-asciirrF�wrap_as_ew_blockedricss|]}t|tj�VqdS)N)r�rr�)rrrrrr7
sz%_refold_parse_tree.<locals>.<genexpr>zunknown-8bitTzmime-parameters)r-r�rkrkrkrkrkrk)Zmax_line_length�float�utf8r�r�r�r
r�r�rr$r6�_fold_mime_parametersr'r:r/�lineseprjr<rRr7�_fold_as_ewr;r&�insertr)Z
parse_treer-�maxlenr�r;�last_ewr=Z
want_encodingZend_ew_not_allowedr�r(�tstrrOZencoded_part�newlineZnewpartsrrrr. 
s�









r.cCs�|dk	r<|r<tt|d	|d�|��}|d
d|�|d<|dtkr�|d}|dd�}t|d�|krz|jt|��|d
|7<d}|dtkr�|d}|dd�}|dkr�t|d�n|}x�|�r�|t|d�}	|dkr�dn|}
|	t|
�d}|dk�r|jd�q�|d|�}tj||
d�}
t|
�|	}|dk�r\|d|�}tj|�}
|d|
7<|t|�d�}|r�|jd�t|d�}q�W|d|7<|�r�|SdS)Nrirrzus-asciizutf-8�r?)rOrkrkrkrkrkrkrkrkrkrkrkrkrk)r
r�r�rjrRr<r�r�)Z	to_encoder;rDrEr;rOZleading_wspZtrailing_wspZnew_last_ewZremaining_spaceZ	encode_asZ
text_spaceZ
first_partr�ZexcessrrrrB�
sF




rBcCs��x�|jD�]�\}}|dj�jd�s6|dd7<|}d}y|j|�d}Wn0tk
r�d}tj|�rxd}d}nd}YnX|r�tjj	|d	|d
�}	dj
|||	�}
ndj
|t|��}
t|d�t|
�d|kr�|dd
|
|d<q
n"t|
�d|k�r|j
d
|
�q
d}|d}x�|�r�t|�tt|��dt|�}
||
dk�rTd}||
d}}x<|d|�}tjj	|d	|d
�}	t|	�|k�r�P|d8}�qfW|j
dj
||||	��d	}|d7}||d�}|�r|dd7<�qWq
WdS)Nrir�strictFTzunknown-8bitr�zutf-8r)Zsaferz
{}*={}''{}z{}={}r?rgrz''rz�Nz {}*{}*={}{}rkrkrkrkrkrk)r�r{r�r�r�rr�r�r�rXr!rrjrRr
)r(r;rDr�r�rrOZ
error_handlerZencoding_requiredZ
encoded_valuerFr�Zextra_chromeZ
chrome_lenZ
splitpointZmaxchars�partialrrrr@�
s\


 r@)��rer��stringr�collectionsr�operatorrZemailrr�rrr~r�r�r�r�rr�Z	TSPECIALSr"Z	ASPECIALSr&r*rr�rr>rCrErGrHrJrLrMrQrVrWrZr_rcrerfrhrprrrsrtrurwrxryr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
r�r�r�r�r�rr�compiler!rrvr�r�matchr��findallr�r r$r(r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrr	rr
rrrrrrrrrrr!r#r%r'r)r+r.r0r4r5r6r8r9r:r<r.rBr@rrrr�<module>FsC"	
!($
V	+




   

*8"
&'/'&).9%>D49/c7