a  zeϡ @sddlZddlZddlZddlmZddlmZddlmZ ddlm Z ddlm Z e dZ e e dBZe d Zee BZee d Zee d Zee d Be d Zee BZee d BZee BZee dZddZedejejBZGdddeZGdddeZGdddeZ GdddeZ!GdddeZ"GdddeZ#GdddeZ$Gd d!d!eZ%Gd"d#d#eZ&Gd$d%d%eZ'Gd&d'd'e'Z(Gd(d)d)eZ)Gd*d+d+eZ*Gd,d-d-eZ+Gd.d/d/eZ,Gd0d1d1eZ-Gd2d3d3eZ.Gd4d5d5eZ/Gd6d7d7eZ0Gd8d9d9eZ1Gd:d;d;eZ2Gdd?d?eZ4Gd@dAdAeZ5GdBdCdCeZ6GdDdEdEeZ7GdFdGdGeZ8GdHdIdIeZ9GdJdKdKe!Z:GdLdMdMeZ;GdNdOdOeZGdTdUdUe>Z?GdVdWdWeZ@GdXdYdYeZAGdZd[d[eZBGd\d]d]eZCGd^d_d_eZDGd`dadaeDZEGdbdcdceDZFGdddedeeZGGdfdgdgeZHGdhdidieZIGdjdkdkeIZJGdldmdmeJZKGdndodoeZLGdpdqdqeMZNGdrdsdseNZOGdtdudueNZPGdvdwdweOZQGdxdydye jRZSePd dzZTePd{d|ZUePd}d~ZVedWdXe jYZZedWe[dXej\Z]edj^Z_edWe[dXej\Z`edWe[dXej\ZaedWe[dXej\ZbddZcddZdddZeddZfddZgddZhddZiddZjddZkddZlddZmddZnddZoddZpddZqddZrddZsddZtddZuddZvddZwddZxddZyddZzddZ{ddZ|ddZ}ddZ~ddZddZddZdd„ZddĄZddƄZddȄZddʄZdd̄Zdd΄ZddЄZdd҄ZddԄZddքZdd؄ZddڄZdd܄ZddބZddZddZddZddZddZddZddZddZddZddZddZddZdS)N) hexdigits) itemgetter)_encoded_words)errors)utilsz (z ()<>@,:;.\"[].z."(z/?=z*'%%cCs dt|dddddS)N"\\\z\")strreplacevaluerN/opt/bitninja-python-dojo/embedded/lib/python3.9/email/_header_value_parser.py quote_string`srz =\? # literal =? [^?]* # charset \? # literal ? [qQbB] # literal 'q' or 'b', case insensitive \? # literal ? .*? # encoded word \?= # literal ?= cseZdZdZdZdZfddZddZfddZe d d Z e d d Z d dZ e ddZ e ddZddZdddZdddZdddZZS) TokenListNTcstj|i|g|_dSN)super__init__defects)selfargskw __class__rrryszTokenList.__init__cCsddd|DS)Ncss|]}t|VqdSrr .0xrrr ~z$TokenList.__str__..joinrrrr__str__}szTokenList.__str__csd|jjtSNz{}({})formatr__name__r__repr__r'rrrr-s zTokenList.__repr__cCsddd|DS)Nrcss|]}|jr|jVqdSrrr rrrr#r$z"TokenList.value..r%r'rrrrszTokenList.valuecCstdd|D|jS)Ncss|] }|jVqdSr) all_defectsr rrrr#r$z(TokenList.all_defects..)sumrr'rrrr.szTokenList.all_defectscCs |dSNr)startswith_fwsr'rrrr1szTokenList.startswith_fwscCstdd|DS)Ncss|] }|jVqdSr) as_ew_allowed)r!partrrrr#r$z*TokenList.as_ew_allowed..)allr'rrrr2szTokenList.as_ew_allowedcCsg}|D]}||jq|Sr)extendcomments)rr6tokenrrrr6szTokenList.commentscCs t||dS)Npolicy)_refold_parse_treerr9rrrfoldszTokenList.foldrcCst|j|ddS)Nindent)printppstrrr>rrrpprintszTokenList.pprintcCsd|j|dS)N r=)r&_pprArrrr@szTokenList.ppstrccszd||jj|jV|D]4}t|ds:|d|Vq||dEdHq|jrdd|j}nd}d||VdS)Nz{}{}/{}(rDz* !! invalid element in token list: {!r}z z Defects: {}rz{}){})r+rr, token_typehasattrrDr)rr>r7extrarrrrDs  z TokenList._pp)r)r)r)r, __module__ __qualname__rEsyntactic_breakew_combine_allowedrr(r-propertyrr.r1r2r6r<rBr@rD __classcell__rrrrrss&        rc@s$eZdZeddZeddZdS)WhiteSpaceTokenListcCsdSN rr'rrrrszWhiteSpaceTokenList.valuecCsdd|DS)NcSsg|]}|jdkr|jqS)comment)rEcontentr rrr r$z0WhiteSpaceTokenList.comments..rr'rrrr6szWhiteSpaceTokenList.commentsN)r,rHrIrLrr6rrrrrNs rNc@seZdZdZdS)UnstructuredTokenList unstructuredNr,rHrIrErrrrrTsrTc@seZdZdZdS)PhrasephraseNrVrrrrrWsrWc@seZdZdZdS)WordZwordNrVrrrrrYsrYc@seZdZdZdS)CFWSListcfwsNrVrrrrrZsrZc@seZdZdZdS)AtomatomNrVrrrrr\sr\c@seZdZdZdZdS)Tokenr7FN)r,rHrIrEZ encode_as_ewrrrrr^sr^c@seZdZdZdZdZdZdS) EncodedWord encoded-wordN)r,rHrIrEctecharsetlangrrrrr_sr_c@s4eZdZdZeddZeddZeddZdS) QuotedString quoted-stringcCs"|D]}|jdkr|jSqdSNbare-quoted-stringrErrr"rrrrRs zQuotedString.contentcCs>g}|D]*}|jdkr&|t|q||jqd|S)Nrgr)rEappendr rr&)rresr"rrr quoted_values  zQuotedString.quoted_valuecCs"|D]}|jdkr|jSqdSrfrhrr7rrrstripped_values zQuotedString.stripped_valueN)r,rHrIrErLrRrlrnrrrrrds  rdc@s$eZdZdZddZeddZdS)BareQuotedStringrgcCstddd|DS)Nrcss|]}t|VqdSrrr rrrr#r$z+BareQuotedString.__str__..)rr&r'rrrr(szBareQuotedString.__str__cCsddd|DS)Nrcss|]}t|VqdSrrr rrrr#r$z)BareQuotedString.value..r%r'rrrrszBareQuotedString.valueN)r,rHrIrEr(rLrrrrrrosroc@s8eZdZdZddZddZeddZedd Zd S) CommentrQcs(dtdgfddDdgggS)Nrrcsg|]}|qSr)quoter r'rrrSr$z#Comment.__str__..))r&r/r'rr'rr( szComment.__str__cCs2|jdkrt|St|ddddddS)NrQr r rz\(rrz\))rEr r)rrrrrrqs z Comment.quotecCsddd|DS)Nrcss|]}t|VqdSrrr rrrr#r$z"Comment.content..r%r'rrrrRszComment.contentcCs|jgSr)rRr'rrrr6szComment.commentsN) r,rHrIrEr(rqrLrRr6rrrrrps rpc@s4eZdZdZeddZeddZeddZdS) AddressListz address-listcCsdd|DS)NcSsg|]}|jdkr|qS)addressrEr rrrrS'r$z)AddressList.addresses..rr'rrr addresses%szAddressList.addressescCstdd|DgS)Ncss|]}|jdkr|jVqdSrtNrE mailboxesr rrrr#+s z(AddressList.mailboxes..r/r'rrrry)s zAddressList.mailboxescCstdd|DgS)Ncss|]}|jdkr|jVqdSrwrE all_mailboxesr rrrr#0s z,AddressList.all_mailboxes..rzr'rrrr|.s zAddressList.all_mailboxesN)r,rHrIrErLrvryr|rrrrrs!s  rsc@s4eZdZdZeddZeddZeddZdS) AddressrtcCs|djdkr|djSdS)NrgrouprE display_namer'rrrr8szAddress.display_namecCs4|djdkr|dgS|djdkr*gS|djSNrmailboxinvalid-mailboxrxr'rrrry=s  zAddress.mailboxescCs:|djdkr|dgS|djdkr0|dgS|djSrr{r'rrrr|Es   zAddress.all_mailboxesN)r,rHrIrErLrryr|rrrrr}4s  r}c@s(eZdZdZeddZeddZdS) MailboxList mailbox-listcCsdd|DS)NcSsg|]}|jdkr|qS)rrur rrrrSSr$z)MailboxList.mailboxes..rr'rrrryQszMailboxList.mailboxescCsdd|DS)NcSsg|]}|jdvr|qS))rrrur rrrrSWs z-MailboxList.all_mailboxes..rr'rrrr|UszMailboxList.all_mailboxesNr,rHrIrErLryr|rrrrrMs  rc@s(eZdZdZeddZeddZdS) GroupList group-listcCs |r|djdkrgS|djSNrrrxr'rrrry_szGroupList.mailboxescCs |r|djdkrgS|djSrr{r'rrrr|eszGroupList.all_mailboxesNrrrrrr[s  rc@s4eZdZdZeddZeddZeddZdS) Groupr~cCs|djdkrgS|djSNrrxr'rrrrypszGroup.mailboxescCs|djdkrgS|djSrr{r'rrrr|vszGroup.all_mailboxescCs |djSr0)rr'rrrr|szGroup.display_nameN)r,rHrIrErLryr|rrrrrrls  rc@sLeZdZdZeddZeddZeddZedd Zed d Z d S) NameAddr name-addrcCst|dkrdS|djSNr)lenrr'rrrrs zNameAddr.display_namecCs |djSN local_partr'rrrrszNameAddr.local_partcCs |djSrdomainr'rrrrszNameAddr.domaincCs |djSr)router'rrrrszNameAddr.routecCs |djSr addr_specr'rrrrszNameAddr.addr_specN r,rHrIrErLrrrrrrrrrrs    rc@s@eZdZdZeddZeddZeddZedd Zd S) AngleAddrz angle-addrcCs"|D]}|jdkr|jSqdSN addr-spec)rErrirrrrs zAngleAddr.local_partcCs"|D]}|jdkr|jSqdSrrErrirrrrs zAngleAddr.domaincCs"|D]}|jdkr|jSqdS)N obs-route)rEdomainsrirrrrs zAngleAddr.routecCs<|D]2}|jdkr|jr"|jSt|j|jSqdS)Nrz<>)rErrrrirrrrs   zAngleAddr.addr_specN) r,rHrIrErLrrrrrrrrrs   rc@seZdZdZeddZdS)ObsRoutercCsdd|DS)NcSsg|]}|jdkr|jqSrrr rrrrSr$z$ObsRoute.domains..rr'rrrrszObsRoute.domainsN)r,rHrIrErLrrrrrrsrc@sLeZdZdZeddZeddZeddZedd Zed d Z d S) MailboxrcCs|djdkr|djSdSNrrrr'rrrrszMailbox.display_namecCs |djSr0rr'rrrrszMailbox.local_partcCs |djSr0rr'rrrrszMailbox.domaincCs|djdkr|djSdSr)rErr'rrrrsz Mailbox.routecCs |djSr0rr'rrrrszMailbox.addr_specNrrrrrrs    rc@s,eZdZdZeddZeZZZZ dS)InvalidMailboxrcCsdSrrr'rrrrszInvalidMailbox.display_nameNrrrrrrs rcs(eZdZdZdZefddZZS)DomainrFcsdtjSNrr&rrsplitr'rrrrsz Domain.domain)r,rHrIrEr2rLrrMrrrrrsrc@seZdZdZdS)DotAtomdot-atomNrVrrrrrsrc@seZdZdZdZdS) DotAtomTextz dot-atom-textTNr,rHrIrEr2rrrrrsrc@seZdZdZdZdS) NoFoldLiteralzno-fold-literalFNrrrrrrsrc@sDeZdZdZdZeddZeddZeddZed d Z d S) AddrSpecrFcCs |djSr0rr'rrrr szAddrSpec.local_partcCst|dkrdS|djS)Nr)rrr'rrrrs zAddrSpec.domaincCs<t|dkr|djS|dj|dj|djS)Nrrrr)rrrstriplstripr'rrrrs  zAddrSpec.valuecCsLt|j}t|t|tkr*t|j}n|j}|jdurH|d|jS|S)N@)setrr DOT_ATOM_ENDSrr)rZnamesetZlprrrrs   zAddrSpec.addr_specN) r,rHrIrEr2rLrrrrrrrrrs   rc@seZdZdZdZdS) ObsLocalPartzobs-local-partFNrrrrrr&srcs4eZdZdZdZeddZefddZZS) DisplayNamez display-nameFcCst|}t|dkr|jS|djdkr4|dn*|ddjdkr^t|ddd|d<|djdkrv|n*|ddjdkrt|ddd|d<|jS)Nrr[rr)rrrrEpop)rrkrrrr1s   zDisplayName.display_namecsd}|jrd}n|D]}|jdkrd}qt|dkr|rd}}|djdks`|ddjdkrdd}|djdks|ddjdkrd}|t|j|StjSdS) NFTrerrr[rPr)rrErrrrr)rrqr"preZpostrrrrBs   zDisplayName.value) r,rHrIrErKrLrrrMrrrrr,s  rc@s,eZdZdZdZeddZeddZdS) LocalPartz local-partFcCs&|djdkr|djS|djSdS)Nrre)rErlrr'rrrr[s zLocalPart.valuecCstg}t}d}|dtgD]}|jdkr,q|r\|jdkr\|djdkr\t|dd|d<t|t}|r|jdkr|djdkr|t|ddn |||d}|}qt|dd}|jS)NFrr[dotrr)DOTrEr isinstancerjr)rrkZlastZ last_is_tltokZis_tlrrrrbs(     zLocalPart.local_partN)r,rHrIrEr2rLrrrrrrrVs  rcs4eZdZdZdZefddZeddZZS) DomainLiteralzdomain-literalFcsdtjSrrr'rrrrszDomainLiteral.domaincCs"|D]}|jdkr|jSqdS)Nptextrhrirrrips zDomainLiteral.ip) r,rHrIrEr2rLrrrMrrrrrzs rc@seZdZdZdZdZdS) MIMEVersionz mime-versionN)r,rHrIrEmajorminorrrrrrsrc@s4eZdZdZdZdZdZeddZeddZ dS) Parameter parameterFus-asciicCs|jr|djSdSr) sectionednumberr'rrrsection_numberszParameter.section_numbercCsf|D]\}|jdkr|jS|jdkr|D]4}|jdkr*|D] }|jdkr<|jSqt|}|r|jt|t|r:|jtddS)Nz*Non-ASCII characters found in header token)_non_printable_finderrrjrZNonPrintableDefectrrr)xtextZnon_printablesrrr_validate_xtexts  rcCst|d^}}g}d}d}tt|D]L}||dkrJ|rDd}d}nd}q&|rTd}n|||vrdq||||q&|d}d|d||dg||fS)NrFr Tr) _wsp_splitterrangerrjr&)rendcharsfragment remainderZvcharsescapehad_qpposrrr_get_ptext_to_endcharss$   rcCs.|}t|dt|t|d}||fS)Nfws)rrr)rZnewvaluerrrrget_fwssrc Cst}|ds td||dddd^}}||ddkrXtd|d|}t|dkr|dtvr|dtvr| ddkr|dd^}}|d|}t|dkr|j t d ||_ d|}ztd|d\}}}} Wn(ttfy(td |j Yn0||_||_|j | |r|dtvrpt|\} }| | qBt|d^} }t| d } t| | | d|}qB|r|dtvr|j t d ||fS) N=?z"expected encoded word but found {}rz?=rrr?zwhitespace inside encoded wordz!encoded word format invalid: '{}'vtextz.missing trailing whitespace after encoded-word)r_ startswithrHeaderParseErrorr+rr&rrcountrrjrra_ewr ValueErrorKeyErrorr rbrcr5WSPrrrr) rZewrrZremstrrestrrbrcrr7charsrrrrget_encoded_wordsd                r'cCsBt}|r>|dtvr0t|\}}||qd}|drzt|\}}Wn(tydd}YntjyvYnr0d}t |dkr|dj dkr|j t dd}|rt |dkr|d j d krt |dd|d<||qt|d^}}|rt|r|d^}}t|d }t|||d |}q|S) NrTrFrrz&missing whitespace before encoded wordrr`rr)rTr$rrjrr'r rrrrErrr rrfc2047_matchersearch partitionrrr&)rrUr7valid_ewZhave_wsrrrrrrget_unstructured?sH           r-cCs*t|d\}}}t|d}t|||fS)Nz()r)rrrrr_rrr get_qp_ctexts  r0cCs*t|d\}}}t|d}t|||fS)Nr r)rrrr.rrr get_qcontents  r1cCsNt|}|std||}|t|d}t|d}t|||fS)Nzexpected atext but found '{}'atext)_non_atom_end_matcherrrr+r~rrr)rmr2rrr get_atexts r5cCsp|ddkrtd|t}|dd}|rT|ddkrTt|\}}|||r@|ddkr@|dtvrt|\}}n|dddkr(d}z&t|\}}|j t dd }Wn tjyt|\}}Yn0|r4t |dkr4|d j d kr4|d j d kr4t |d d |d <n t|\}}||qT|s`|j t d||fS||ddfS)Nrr zexpected '"' but found '{}'rrrFz!encoded word inside quoted stringTrrr(r`z"end of header inside quoted string)rrr+ror1rjr$rr'rrrrEr )rZbare_quoted_stringr7r,rrrget_bare_quoted_stringsJ            r6cCs|r |ddkr td|t}|dd}|r|ddkr|dtvr\t|\}}n&|ddkrvt|\}}n t|\}}||q2|s|j t d||fS||ddfS)Nrrzexpected '(' but found '{}'rrrzend of header inside comment) rrr+rpr$r get_commentr0rjrr)rrQr7rrrr7s&      r7cCsPt}|rH|dtvrH|dtvr0t|\}}n t|\}}||q||fSr0)rZ CFWS_LEADERr$rr7rj)rr[r7rrrget_cfwss   r9cCspt}|r,|dtvr,t|\}}||t|\}}|||rh|dtvrht|\}}||||fSr0)rdr8r9rjr6)rZ quoted_stringr7rrrget_quoted_strings      r:cCst}|r,|dtvr,t|\}}|||rL|dtvrLtd||drzt |\}}Wqtjyt |\}}Yq0n t |\}}|||r|dtvrt|\}}||||fS)Nrzexpected atom but found '{}'r) r\r8r9rj ATOM_ENDSrrr+rr'r5)rr]r7rrrget_atoms&       r<cCst}|r|dtvr&td||rt|dtvrtt|\}}|||r&|ddkr&|t|dd}q&|dturtdd|||fS)Nrz8expected atom at a start of dot-atom-text but found '{}'rrrz4expected atom at end of dot-atom-text but found '{}')rr;rrr+r5rjr)rZ dot_atom_textr7rrrget_dot_atom_text0s     r=cCst}|dtvr(t|\}}|||drfzt|\}}Wqrtjybt|\}}Yqr0n t|\}}|||r|dtvrt|\}}||||fS)Nrr) rr8r9rjrr'rrr=)rZdot_atomr7rrr get_dot_atomCs        r>cCs|dtvrt|\}}nd}|s,td|ddkrFt|\}}n*|dtvrdtd|n t|\}}|dur|g|dd<||fS)Nrz5Expected 'atom' or 'quoted-string' but found nothing.r z1Expected 'atom' or 'quoted-string' but found '{}')r8r9rrr:SPECIALSr+r<)rleaderr7rrrget_word\s"    rAcCst}zt|\}}||Wn&tjyF|jtdYn0|r|dtvr|ddkr|t|jt d|dd}qHzt|\}}WnBtjy|dt vrt |\}}|jt dnYn0||qH||fS)Nzphrase does not start with wordrrzperiod in 'phrase'rzcomment found without atom) rWrArjrrrr PHRASE_ENDSrObsoleteHeaderDefectr8r9)rrXr7rrr get_phrase~s4           rDc Cspt}d}|dtvr"t|\}}|s6td|zt|\}}WnZtjyzt|\}}Wn4tjy|ddkr|dtvrt }Yn0Yn0|dur|g|dd<| ||r0|ddks|dtvr0t t ||\}}|j dkr|j tdn|j td||d<z|jdWn&tyf|j tdYn0||fS) Nrz"expected local-part but found '{}'r invalid-obs-local-partzrArBrrjget_obs_local_partr rErrrCrencoderZNonASCIILocalPartDefect)rrr@r7obs_local_partrrrget_local_partsJ         rJcCst}d}|r&|ddks*|dtvr&|ddkrj|rL|jtd|td}|dd}q nD|ddkr|t|dd|dd}|jtd d}q |r|d jd kr|jtd zt |\}}d}Wn2tj y|dt vrt |\}}Yn0||q |djd ksV|djd krh|djd krh|jtd|d jd ks|d jd kr|djd kr|jtd|jrd|_||fS)NFrr rzinvalid repeated '.'Trmisplaced-specialz/'\' character outside of quoted-string/ccontentrrzmissing '.' between wordsr[z!Invalid leading '.' in local partr(z"Invalid trailing '.' in local partrE) rrBrrjrrrrrErArr8r9)rrIZlast_non_ws_was_dotr7rrrrGsj                  rGcCs@t|d\}}}t|d}|r0|jtdt|||fS)Nz[]rz(quoted printable found in domain-literal)rrrrjrrCr)rrrrrr get_dtexts   rLcCs,|rdS|td|tdddS)NFz"end of input inside domain-literal]domain-literal-endT)rjrrr)rdomain_literalrrr_check_for_early_dl_endsrPcCsjt}|dtvr(t|\}}|||s6td|ddkrRtd||dd}t||rp||fS|tdd|dt vrt |\}}||t |\}}||t||r||fS|dt vrt |\}}||t||r||fS|ddkrtd||tdd |dd}|rb|dtvrbt|\}}||||fS) Nrzexpected domain-literal[z6expected '[' at start of domain-literal but found '{}'rzdomain-literal-startrMz4expected ']' at end of domain-literal but found '{}'rN) rr8r9rjrrr+rPrr$rrL)rrOr7rrrget_domain_literalsH                    rRcCspt}d}|dtvr"t|\}}|s6td||ddkrvt|\}}|durd|g|dd<||||fSzt|\}}Wn tjyt |\}}Yn0|r|ddkrtd|dur|g|dd<|||rh|ddkrh|j t d|dj dkr(|d|dd<|rh|ddkrh|t t |d d\}}||q(||fS) Nrzexpected domain but found '{}'rQrzInvalid Domainrz(domain is not a dot-atom (contains CFWS)rr)rr8r9rrr+rRrjr>r<rrCrEr)rrr@r7rrr get_domain=sD         rScCs|t}t|\}}|||r,|ddkrF|jtd||fS|tddt|dd\}}||||fS)Nrrz#addr-spec local part with no domainaddress-at-symbolr)rrJrjrrrrrS)rrr7rrr get_addr_speccs    rUcCst}|rj|ddks"|dtvrj|dtvrFt|\}}||q|ddkr|t|dd}q|rz|ddkrtd||tt |dd\}}|||r>|ddkr>|t|dd}|sq>|dtvrt|\}}|||ddkr|tt |dd\}}||q|sNtd|ddkrltd||t dd ||ddfS) Nrr rrz(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) rr8r9rj ListSeparatorrrr+RouteComponentMarkerrSr)rZ obs_router7rrr get_obs_routessF               rYc Cst}|dtvr(t|\}}|||r8|ddkrHtd||tdd|dd}|ddkr|tdd|jt d|dd}||fSzt |\}}Wnvtjy,z"t |\}}|jt d Wn&tjytd |Yn0||t |\}}Yn0|||rZ|ddkrZ|dd}n|jt d |tdd|r|dtvrt|\}}||||fS) Nrzangle-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) rr8r9rjrrr+rrrrUrYrC)rZ angle_addrr7rrrget_angle_addrsT                r\cCs<t}t|\}}||dd|jdd|_||fSr)rrDr5r)rrr7rrrget_display_names  r]cCst}d}|dtvr6t|\}}|s6td||ddkr|dtvr^td|t|\}}|s~td||dur|g|ddd<d}||t |\}}|dur|g|dd<||||fS)Nrz!expected name-addr but found '{}'rZ) rr8r9rrr+rBr]rjr\)rZ name_addrr@r7rrr get_name_addrs6        r^c Cst}zt|\}}WnJtjy`zt|\}}Wn$tjyZtd|Yn0Yn0tdd|jDr|d|_| |||fS)Nzexpected mailbox but found '{}'css|]}t|tjVqdSr)rrrr rrrr#szget_mailbox..r) rr^rrrUr+anyr.rErj)rrr7rrr get_mailboxs  r`cCsdt}|r\|d|vr\|dtvrD|t|dd|dd}qt|\}}||q||fS)NrrKr)rrBrjrrD)rrZinvalid_mailboxr7rrrget_invalid_mailbox s    racCst}|r|ddkrzt|\}}||Wntjy:d}|dtvrt|\}}|rt|ddvr|||jtdn@t |d\}}|dur|g|dd<|||jt dnb|ddkr|jtdnBt |d\}}|dur|g|dd<|||jt dYn0|r|ddvr|d}d|_ t |d\}}| ||jt d|r|ddkr|t |d d}q||fS) Nr;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listr rrr)rr`rjrrr8r9rrCrarrEr5rW)rZ mailbox_listr7r@rrrrget_mailbox_listsX                 rccCst}|s$|jtd||fSd}|r|dtvrt|\}}|sl|jtd||||fS|ddkr||||fSt|\}}t|j dkr|dur||| ||jt d||fS|dur|g|dd<||||fS)Nzend of header before group-listrzend of header in group-listrbzgroup-list with empty entries) rrrjrrr8r9rcrr|r5rC)rZ group_listr@r7rrrget_group_listWs>           rdcCs t}t|\}}|r"|ddkr2td||||tdd|dd}|r|ddkr|tdd||ddfSt|\}}|||s|jt dn|ddkrtd ||tdd|dd}|r|dt vrt |\}}||||fS) NrrVz8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorrrbzgroup-terminatorzend of header in groupz)expected ';' at end of group but found {}) rr]rrr+rjrrdrrr8r9)rr~r7rrr get_group|s8          rec Cstt}zt|\}}WnJtjy`zt|\}}Wn$tjyZtd|Yn0Yn0||||fS)Nzexpected address but found '{}')r}rerrr`r+rj)rrtr7rrr get_addresss rfc Cst}|rzt|\}}||Wn$tjyL}zd}|dtvrt|\}}|rj|ddkr|||jtdnFt |d\}}|dur|g|dd<|t |g|jt dnh|ddkr|jtdnHt |d\}}|dur|g|dd<|t |g|jt dWYd}~n d}~00|r|ddkr|dd}d|_ t |d\}}| ||jt d|r|tdd|d d}q||fS) Nrr z"address-list entry with no contentzinvalid address in address-listzempty element in address-listrrr r)rsrfrjrrr8r9rrCrar}rrEr5r)rZ address_listr7errr@rrrrget_address_listsX              rhcCst}|std||ddkr6td||tdd|dd}t|\}}|||rx|ddkrtd||tdd ||ddfS) Nz'expected no-fold-literal but found '{}'rrQz;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startrrMz9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)rrrr+rjrrL)rZno_fold_literalr7rrrget_no_fold_literals.    ricCst}|r,|dtvr,t|\}}|||r<|ddkrLtd||tdd|dd}zt|\}}Wn\tjyz"t |\}}|j t dWn$tjytd|Yn0Yn0|||r|ddkr<|j t d |r4|dd kr4|td d |dd}||fS|tdd |dd}zt|\}}Wntjyzt |\}}Wnrtjy}zVz"t|\}}|j t d Wn&tjytd|Yn0WYd}~n d}~00Yn0|||r0|dd kr0|dd}n|j t d|td d |r||dtvr|t|\}}||||fS)NrrZzexpected msg-id but found '{}'z msg-id-startrzobsolete id-left in msg-idz4expected dot-atom-text or obs-id-left but found '{}'rzmsg-id with no id-rightr[z msg-id-endrTzobsolete id-right in msg-idzFexpected dot-atom-text, no-fold-literal or obs-id-right but found '{}'zmissing trailing '>' on msg-id)rr8r9rjrrr+rr=rGrrCrrirS)rZmsg_idr7errr get_msg_ids~             &    rkc Cst}zt|\}}||WnNtjyn}z4t|}t|}|jtd |WYd}~n&d}~00|r|jtd ||S)NzInvalid msg-id: {!r}zUnexpected {!r}) rrkrjrrr-rrrr+)rZ message_idr7exrrrparse_message_idIs  rmcCst}|s |jtd|S|dtvrXt|\}}|||sX|jtdd}|r|ddkr|dtvr||d7}|dd}q\|s|jtd ||t |dnt ||_ |t |d |r|dtvrt|\}}|||r|ddkrT|j dur:|jtd |rP|t |d|S|t dd |dd}|r|dtvrt|\}}|||s|j dur|jtd |Sd}|r|dtvr||d7}|dd}q|s*|jtd ||t |dnt ||_ |t |d |rn|dtvrnt|\}}|||r|jtd |t |d|S)Nz%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSrrrz1Expected MIME major version number but found {!r}rdigitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)rrrjrHeaderMissingRequiredValuer8r9isdigitrr+rintrr)rZ mime_versionr7rnrrrparse_mime_versiones                        rrcCsdt}|r\|ddkr\|dtvrD|t|dd|dd}qt|\}}||q||fS)NrrbrKr)rrBrjrrD)rZinvalid_parameterr7rrrget_invalid_parameters    rscCsNt|}|std||}|t|d}t|d}t|||fS)Nzexpected ttext but found '{}'ttext)_non_token_end_matcherrrr+r~rrr)rr4rtrrr get_ttexts  rvcCst}|r,|dtvr,t|\}}|||rL|dtvrLtd|t|\}}|||r|dtvrt|\}}||||fSNrzexpected token but found '{}') r^r8r9rj TOKEN_ENDSrrr+rv)rZmtokenr7rrr get_tokens       rycCsNt|}|std||}|t|d}t|d}t|||fS)Nz expected attrtext but found {!r}r)_non_attribute_end_matcherrrr+r~rrrrr4rrrr get_attrtexts  r|cCst}|r,|dtvr,t|\}}|||rL|dtvrLtd|t|\}}|||r|dtvrt|\}}||||fSrw) rr8r9rjATTRIBUTE_ENDSrrr+r|rrr7rrr get_attributes       rcCsNt|}|std||}|t|d}t|d}t|||fS)Nz)expected extended attrtext but found {!r}extended-attrtext)#_non_extended_attribute_end_matcherrrr+r~rrrr{rrrget_extended_attrtext s rcCst}|r,|dtvr,t|\}}|||rL|dtvrLtd|t|\}}|||r|dtvrt|\}}||||fSrw) rr8r9rjEXTENDED_ATTRIBUTE_ENDSrrr+rr~rrrget_extended_attribute! s      rcCst}|r|ddkr&td||tdd|dd}|rR|dsbtd|d}|r|dr||d7}|dd}qf|ddkr|dkr|jtd t ||_ |t|d ||fS) Nr*zExpected section but found {}zsection-markerrz$Expected section number but found {}r0z'section number has an invalid leading 0rn) rrrr+rjrrprZInvalidHeaderErrorrqr)rrrnrrr get_section7 s,     rcCst}|stdd}|dtvr0t|\}}|sDtd||ddkr^t|\}}n t|\}}|dur|g|dd<||||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r ) rrrr8r9r+r:rrj)rvr@r7rrr get_valueU s"      rc Cst}t|\}}|||r,|ddkrL|jtd|||fS|ddkrz t|\}}d|_||Wntj yYn0|st d|ddkr|t dd|dd}d|_ |dd krt d |t d d |dd}d}|r*|dt vr*t |\}}||d}|}|j rD|rD|dd krDt|\}}|j}d }|jdkr|r|ddkrd}n$t|\}} | r| ddkrd}n(zt|\}} Wn Yn 0| sd}|r.|jtd|||D](} | jdkrg| dd<| }q(q|}nd}|jtd|r^|ddkr^d}n t|\}}|j r~|jdkr|r|ddkr|||dur|}||fS|jtd|s|jtd|||dur||fSn|dur>|D]} | jdkrq"q| jdk|| | j|_|ddkr\t d||t dd|dd}|r|ddkrt|\}}|||j|_|r|ddkrt d||t dd|dd}|durbt} |r\|dtvrt|\}}n2|dd krBt d d}|dd}n t|\}}| |q| }n t|\}}|||dur|}||fS)Nrrbz)Parameter contains name ({}) but no valuerTzIncomplete parameterzextended-parameter-markerr=zParameter not followed by '='parameter-separatorr F'z5Quoted string value for extended parameter is invalidrgzZParameter 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 delimitersrrz=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}ZDQUOTE)rrrjrrrr+rrrrrr8r9r:rnrr|rrErrrbrcrr$rr1) rrr7r@rZappendtoZqstringZ inner_valueZ semi_validr%trrrr get_parameterk s                                             rc Cspt}|rlzt|\}}||Wntjy}zd}|dtvrTt|\}}|sr|||WYd}~S|ddkr|dur|||jtdn@t |\}}|r|g|dd<|||jtd |WYd}~n d}~00|rJ|ddkrJ|d}d|_ t |\}}| ||jtd ||r|t dd|d d}q|S) Nrrbzparameter entry with no contentzinvalid parameter {!r}rrz)parameter with invalid trailing text {!r}rr)rrrjrrr8r9rrrsr+rEr5r)rZmime_parametersr7rgr@rrrrparse_mime_parameters sJ              rcCs|rV|ddkrV|dtvr>|t|dd|dd}qt|\}}||q|s^dS|tdd|t|dddS)NrrbrKrr)rBrjrrDr)Z tokenlistrr7rrr_find_mime_parameters- s   rc Cst}d}|s$|jtd|Szt|\}}Wn:tjyn|jtd|t |||YS0|||r|ddkr|jtd|rt |||S|j |_ |tdd|dd}zt|\}}Wn<tjy&|jtd |t |||YS0|||j |_|sL|S|dd kr|jtd ||` |`t |||S|td d |t|dd|S) NFz"Missing content type specificationz(Expected content maintype but found {!r}rrzInvalid content typezcontent-type-separatorrz'Expected content subtype but found {!r}rbzt| } | jdkrt | t @rd }z| ||} Wn4t yt d d | jDrd } nd} d }Yn0| jd krt| |||q>|r|s| jsnd}d}| jrn| j|ddt|j } |j| vrnt| |t|dkr\t|}|||d| 7<q>t| dst| | } nt| |||| j| }d}q>t| |t|dkr|d| 7<q>| jrt| d|krt|}|s| r||| d}q>t| dsLt| }| jsB|d7}|||| } q>| jrl|sl| d| d }q>t|}|s| r||| q>|d| 7<q>|j||jS)Nutf-8rrrFwrap_as_ew_blockedrrTcss|]}t|tjVqdSr)rrrr rrrr# sz%_refold_parse_tree.. unknown-8bitrr8rrH)Zmax_line_lengthsysmaxsizeutf8rrrr rErr?rHrr_r._fold_mime_parametersr2rJr<rrrrjrF _fold_as_ewrKr1insertr&)Z parse_treer9maxlenrrlast_ewrZ want_encodingZend_ew_not_allowedrr3tstrrbZ encoded_partnewlineZnewpartsrrrr: s               r:cCs|dur<|rrArDrJrGrLrPrRrSrUrYr\r]r^r`rarcrdrerfrhrirkrmrrrsrvryr|rrrrrrrrrrrrr:rrrrrrFs,           C  "   !*$ V +         1C+ "&'/'&).9%7ED49/gA