3 Õì2a’‡ã@sfddlZddlZddlmZddlmZddlmZddlm Z ddlm Z ddlm 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/Gdd?„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ƒZGdZd[„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ƒZJeId dpƒ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ú9/opt/alt/python36/lib64/python3.6/_header_value_parser.pyÚ quote_string`srcsšeZdZdZdZdZ‡fdd„Zdd„Z‡fdd„Ze d d „ƒZ e d d „ƒZ d 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ú rsz$TokenList.__str__..)Ú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..)r)rrrrrxszTokenList.valuecCstdd„|Dƒ|jƒS)Ncss|] }|jVqdS)N)Ú all_defects)rrrrrr~sz(TokenList.all_defects..)Ú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..)Ú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ú ²sz0WhiteSpaceTokenList.comments..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__..)rr)rrrrr úszBareQuotedString.__str__cCsdjdd„|DƒƒS)Nrcss|]}t|ƒVqdS)N)r )rrrrrrÿsz)BareQuotedString.value..)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__..ú))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..)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..r)rrrrÚ addresses szAddressList.addressescCstdd„|DƒgƒS)Ncss|]}|jdkr|jVqdS)r[N)r6Ú mailboxes)rrrrrr&sz(AddressList.mailboxes..)r%)rrrrr]$szAddressList.mailboxescCstdd„|DƒgƒS)Ncss|]}|jdkr|jVqdS)r[N)r6Ú all_mailboxes)rrrrrr+sz,AddressList.all_mailboxes..)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..r)rrrrr]LszMailboxList.mailboxescCsdd„|DƒS)NcSsg|]}|jdkr|‘qS)rbúinvalid-mailbox)rbrd)r6)rrrrrrBRsz-MailboxList.all_mailboxes..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..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 d S) Ú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 d jdkr€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ÚpartsZ first_paramrOZ value_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‡fd d „ Z d 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 tj dƒƒ||_ 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Í) rZewr‡rÑZremstrÚrestr¶rOrPrr,ÚcharsrØrrrÚget_encoded_wordõsH    $        ràc Cstƒ}�x|�r |dtkr4t|ƒ\}}|j|ƒq |jdƒrÖyt|ƒ\}}Wntjk rdYnrXd}t|ƒdkrš|d j dkrš|j jtj dƒƒd}|rÊt|ƒdkrÊ|d j d krÊt |ddƒ|d<|j|ƒq t |dƒ^}}t|d ƒ}t|ƒ|j|ƒd j|ƒ}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)Nr r‰)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éc Cs|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) Nrr zexpected '"' 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îc CsÐ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ñc Cs¬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)Nrr z1Expected '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�r2t t |ƒ|ƒ\}}|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-partzzangle-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¦rrr÷)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           r cCs’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..zinvalid-mailbox) rsr rrÚ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   rc CsÀ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 |ƒ|jjtj dƒƒ||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ƒƒ|jjtj dƒƒnh|ddkrø|jjtjdƒƒnHt |dƒ\}}|dk �r|g|dd…<|jt |gƒƒ|jjtj dƒƒWYdd}~XnX|�r¢|ddk�r¢|d d}d|_ t |dƒ\}}|j |ƒ|jjtj dƒƒ|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       r/c Csœtƒ}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 �rptƒ} xd|�rh|dtk�r(t|ƒ\}}n2|dd k�rNt d dƒ}|dd…}n t|ƒ\}}| j|ƒ�qW| }n t|ƒ\}}|j|ƒ|dk �r”|}||fS)Nrrz)Parameter contains name ({}) but no valuer+TzIncomplete parameterzextended-parameter-markerriú=zParameter not followed by '='zparameter-separatorr Fú'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 {}ZDQUOTE)rŽr&rRrrr¦r!r-r�rÚrÇr”rìrírîrUr’r$r(r6r/rrOrPrœrÝr×rå) rr²r,rôrÑZappendtoZqstringZ inner_valueZ semi_validrÞÚtr.rrrÚ get_parameterÄsâ                                              r3cCshtƒ}�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Ÿr3rRrrÚrìrírr¦rr!r6r*rÇ)rZmime_parametersr,rrôr²rrrÚparse_mime_parametersR sD                 r4cCsŒxX|rX|ddkrX|dtkr@|jt|ddƒƒ|dd…}qt|ƒ\}}|j|ƒqW|sbdS|jtddƒƒ|jt|dd…ƒƒdS)Nrrzmisplaced-specialrizparameter-separator)rörRrÇrør4)Z tokenlistrr,rrrÚ_find_mime_parameters† s  r5cCs°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†|jjtjd j|ƒƒƒ|` |`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.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<|rrCrErGrHrJrLrMrQrVrWrZr_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Ërr#r'rÍrÕr×ràrârärårérêrërírîrðrñròrõrørýrúrþrrrrrr r r rrrrrrrrrr r"r$r&r(r*r-r/r3r4r5r7r8r9r;r.rAr?rrrrÚFs           C  "   !($ V +            *8" &'/'&).9%>D49/cA