o ?OgƢ @s ddlZddlZddlZddlmZddlmZddlmZ ddlm Z ddlm Z e dZ e e dBZe d Zee BZee d Zee d Zee d Be d Zee BZee d BZee BZee dZddhZeeBZddZedejejBZGdddeZ Gddde Z!Gddde Z"Gddde Z#Gddde Z$Gddde!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-Gd0d1d1e Z.Gd2d3d3e Z/Gd4d5d5e Z0Gd6d7d7e Z1Gd8d9d9e Z2Gd:d;d;e Z3Gdd?d?e Z5Gd@dAdAe Z6GdBdCdCe Z7GdDdEdEe Z8GdFdGdGe Z9GdHdIdIe Z:GdJdKdKe Z;GdLdMdMe#ZGdRdSdSe Z?GdTdUdUe Z@GdVdWdWe@ZAGdXdYdYe ZBGdZd[d[e ZCGd\d]d]e ZDGd^d_d_e ZEGd`dadae ZFGdbdcdceFZGGdddedeeFZHGdfdgdge ZIGdhdidie ZJGdjdkdke ZKGdldmdmeKZLGdndodoeLZMGdpdqdqe ZNGdrdsdseOZPGdtduduePZQGdvdwdwePZRGdxdydyeQZSGdzd{d{e jTZUeRd d|ZVeRd}d~ZWeRddZXedYdZe j[Z\edYe]dZej^Z_edj`ZaedYe]dZej^ZbedYe]dZej^ZcedYe]dZej^ZdddZeddZfddZgddZhddZiddZjddZkddZlddZmddZnddZoddZpddZqddZrddZsddZtddZuddZvddZwddZxddZyddZzddZ{ddZ|ddZ}ddZ~ddZddZddZddZdd„ZddĄZddƄZddȄZddʄZdd̄Zdd΄ZddЄZdd҄ZddԄZddքZdd؄ZddڄZdd܄ZddބZddZddZddZddZddZddZddZddZddZddZddZddZddZdS)N) hexdigits) itemgetter)_encoded_words)errors)utilsz (z ()<>@,:;.\"[].z."(z/?=z*'%%  cCs dt|dddddS)N"\\\z\")strreplacevaluerA/opt/alt/python310/lib64/python3.10/email/_header_value_parser.py quote_stringbs rz =\? # 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__rrr{s zTokenList.__init__cCddd|DS)Ncs|]}t|VqdSrr.0xrrr z$TokenList.__str__..joinrrrr__str__zTokenList.__str__cd|jjtSNz{}({})formatr__name__r__repr__r+rrrr3s zTokenList.__repr__cCr )Nr!css|] }|jr|jVqdSrrr$rrrr'sz"TokenList.value..r)r+rrrrzTokenList.valuecCstdd|D|jS)Ncs|]}|jVqdSr) all_defectsr$rrrr'z(TokenList.all_defects..)sumrr+rrrr6szTokenList.all_defectscCs |dSNr)startswith_fwsr+rrrr: zTokenList.startswith_fwscCs tdd|DS)Ncsr5r) as_ew_allowed)r%partrrrr'r7z*TokenList.as_ew_allowed..)allr+rrrr<szTokenList.as_ew_allowedcCsg}|D]}||jq|Sr)extendcomments)rr@tokenrrrr@szTokenList.commentscCs t||dS)Npolicy)_refold_parse_treerrCrrrfoldr;zTokenList.foldr!cCst|j|ddS)Nindent)printppstrrrHrrrpprintr-zTokenList.pprintcCsd|j|dS)Nr rG)r*_pprKrrrrJszTokenList.ppstrccs|d||jj|jV|D]}t|ds|d|Vq||dEdHq|jr3d|j}nd}d||VdS)Nz{}{}/{}(rMz* !! invalid element in token list: {!r}z z Defects: {}r!z{}){})r1rr2 token_typehasattrrMr)rrHrAZextrarrrrMs  z TokenList._ppr!)r2 __module__ __qualname__rNsyntactic_breakew_combine_allowedrr,r3propertyrr6r:r<r@rFrLrJrM __classcell__rrrrrus(        rc@s$eZdZeddZeddZdS)WhiteSpaceTokenListcCdSN rr+rrrrzWhiteSpaceTokenList.valuecCdd|DS)NcSg|] }|jdkr|jqS)comment)rNcontentr$rrr z0WhiteSpaceTokenList.comments..rr+rrrr@zWhiteSpaceTokenList.commentsN)r2rQrRrUrr@rrrrrWs  rWc@eZdZdZdS)UnstructuredTokenList unstructuredNr2rQrRrNrrrrrdrdc@rc)PhrasephraseNrfrrrrrhrgrhc@rc)WordZwordNrfrrrrrjrgrjc@rc)CFWSListcfwsNrfrrrrrkrgrkc@rc)AtomatomNrfrrrrrmrgrmc@eZdZdZdZdS)TokenrAFN)r2rQrRrNZ encode_as_ewrrrrrprpc@seZdZdZdZdZdZdS) EncodedWord encoded-wordN)r2rQrRrNctecharsetlangrrrrrr rrc@4eZdZdZeddZeddZeddZdS) QuotedString quoted-stringcC"|D] }|jdkr|jSqdSNbare-quoted-stringrNrrr&rrrr_   zQuotedString.contentcCs>g}|D]}|jdkr|t|q||jqd|S)Nr}r!)rNappendrrr*)rresr&rrr quoted_values   zQuotedString.quoted_valuecCr{r|r~rrArrrstripped_valuerzQuotedString.stripped_valueN)r2rQrRrNrUr_rrrrrrrys   ryc@s$eZdZdZddZeddZdS)BareQuotedStringr}cCstddd|DS)Nr!csr"rr#r$rrrr'r(z+BareQuotedString.__str__..)rr*r+rrrr,szBareQuotedString.__str__cCr )Nr!csr"rr#r$rrrr'r(z)BareQuotedString.value..r)r+rrrrr4zBareQuotedString.valueN)r2rQrRrNr,rUrrrrrrs rc@s8eZdZdZddZddZeddZedd Zd S) Commentr^cs(dtdgfddDdgggS)Nr!rcsg|]}|qSr)quoter$r+rrr`sz#Comment.__str__..))r*r8r+rr+rr, szComment.__str__cCs2|jdkr t|St|ddddddS)Nr^r rrz\(rz\))rNrr)rrrrrrs z Comment.quotecCr )Nr!csr"rr#r$rrrr'r(z"Comment.content..r)r+rrrr_r4zComment.contentcCs|jgSr)r_r+rrrr@szComment.commentsN) r2rQrRrNr,rrUr_r@rrrrr s rc@rx) AddressListz address-listcCr\)NcSg|] }|jdkr|qS)addressrNr$rrrr`)z)AddressList.addresses..rr+rrr addresses'rbzAddressList.addressescCtdd|DgS)Ncs |] }|jdkr|jVqdSrNrN mailboxesr$rrrr'-  z(AddressList.mailboxes..r8r+rrrr+ zAddressList.mailboxescCr)NcsrrrN all_mailboxesr$rrrr'2rz,AddressList.all_mailboxes..rr+rrrr0rzAddressList.all_mailboxesN)r2rQrRrNrUrrrrrrrr#s  rc@rx) AddressrcC|djdkr |djSdS)NrgrouprN display_namer+rrrr: zAddress.display_namecCs4|djdkr |dgS|djdkrgS|djSNrmailboxinvalid-mailboxrr+rrrr?s   zAddress.mailboxescCs:|djdkr |dgS|djdkr|dgS|djSrrr+rrrrGs    zAddress.all_mailboxesN)r2rQrRrNrUrrrrrrrr6s  rc@(eZdZdZeddZeddZdS) MailboxList mailbox-listcCr\)NcSr)rrr$rrrr`Urz)MailboxList.mailboxes..rr+rrrrSrbzMailboxList.mailboxescCr\)NcSsg|] }|jdvr|qS))rrrr$rrrr`Ys z-MailboxList.all_mailboxes..rr+rrrrWrbzMailboxList.all_mailboxesNr2rQrRrNrUrrrrrrrOs  rc@r) GroupList group-listcC |r |djdkr gS|djSNrrrr+rrrra zGroupList.mailboxescCrrrr+rrrrgrzGroupList.all_mailboxesNrrrrrr]s  rc@rx) GrouprcC|djdkr gS|djSNrrr+rrrrr zGroup.mailboxescCrrrr+rrrrxrzGroup.all_mailboxescC |djSr9)rr+rrrr~ zGroup.display_nameN)r2rQrRrNrUrrrrrrrrns  rc@LeZdZdZeddZeddZeddZedd Zed d Z d S) NameAddr name-addrcCst|dkrdS|djSNr)lenrr+rrrr  zNameAddr.display_namecCrN local_partr+rrrrrzNameAddr.local_partcCrrdomainr+rrrrrzNameAddr.domaincCrr)router+rrrrrzNameAddr.routecCrr addr_specr+rrrrrzNameAddr.addr_specN r2rQrRrNrUrrrrrrrrrrs    rc@s@eZdZdZeddZeddZeddZedd Zd S) AngleAddrz angle-addrcCr{N addr-spec)rNrrrrrrrzAngleAddr.local_partcCr{rrNrrrrrrrzAngleAddr.domaincCr{)N obs-route)rNdomainsrrrrrrzAngleAddr.routecCs<|D]}|jdkr|jr|jSt|j|jSqdS)Nrz<>)rNrrrrrrrrs  zAngleAddr.addr_specN) r2rQrRrNrUrrrrrrrrrs   rc@eZdZdZeddZdS)ObsRoutercCr\)NcSr]rrr$rrrr`raz$ObsRoute.domains..rr+rrrrrbzObsRoute.domainsN)r2rQrRrNrUrrrrrrrc@r) MailboxrcCrNrrrr+rrrrrzMailbox.display_namecCrr9rr+rrrrrzMailbox.local_partcCrr9rr+rrrrrzMailbox.domaincCrr)rNrr+rrrrrz Mailbox.routecCrr9rr+rrrrrzMailbox.addr_specNrrrrrrs    rc@s,eZdZdZeddZeZZZZ dS)InvalidMailboxrcCdSrrr+rrrrr[zInvalidMailbox.display_nameNrrrrrrs  rcs(eZdZdZdZefddZZS)DomainrFcdtjSNr!r*rrsplitr+rrrrz Domain.domain)r2rQrRrNr<rUrrVrrrrrs rc@rc)DotAtomdot-atomNrfrrrrrrgrc@ro) DotAtomTextz dot-atom-textTNr2rQrRrNr<rrrrrrqrc@ro) NoFoldLiteralzno-fold-literalFNrrrrrrrqrc@sDeZdZdZdZeddZeddZeddZed d Z d S) AddrSpecrFcCrr9rr+rrrr rzAddrSpec.local_partcCst|dkrdS|djS)Nr)rrr+rrrrrzAddrSpec.domaincCs<t|dkr |djS|dj|dj|djS)Nrrrr)rrrstriplstripr+rrrrs  &zAddrSpec.valuecCsLt|j}t|t|tkrt|j}n|j}|jdur$|d|jS|S)N@)setrr DOT_ATOM_ENDSrr)rZnamesetZlprrrrs   zAddrSpec.addr_specN) r2rQrRrNr<rUrrrrrrrrrs   rc@ro) ObsLocalPartzobs-local-partFNrrrrrr(rcs4eZdZdZdZeddZefddZZS) DisplayNamez display-nameFcCst|}t|dkr |jS|djdkr|dn|ddjdkr/t|ddd|d<|djdkr=||jS|ddjdkrRt|ddd|d<|jS)Nrrlrr)rrrrNpop)rrrrrr3s  zDisplayName.display_namecsd}|jrd}n |D] }|jdkrd}q t|dkrM|rMd}}|djdks0|ddjdkr2d}|djdksB|ddjdkrDd}|t|j|StjS) NFTrzrr!rlrZr)rrNrrrrr)rrr&ZpreZpostrrrrDs   zDisplayName.value) r2rQrRrNrTrUrrrVrrrrr.s rc@s,eZdZdZdZeddZeddZdS) LocalPartz local-partFcCs"|djdkr |djS|djS)Nrrz)rNrrr+rrrr]s  zLocalPart.valuecCstg}t}d}|dtgD]J}|jdkrq|r.|jdkr.|djdkr.t|dd|d<t|t}|rM|jdkrM|djdkrM|t|ddn|||d}|}qt|dd}|jS)NFrrldotrr)DOTrNr isinstancerr)rrZlastZ last_is_tltokZis_tlrrrrds$   zLocalPart.local_partN)r2rQrRrNr<rUrrrrrrrXs rcs4eZdZdZdZefddZeddZZS) DomainLiteralzdomain-literalFcrrrr+rrrrrzDomainLiteral.domaincCr{)Nptextr~rrrriprzDomainLiteral.ip) r2rQrRrNr<rUrrrVrrrrr|src@seZdZdZdZdZdS) MIMEVersionz mime-versionN)r2rQrRrNmajorminorrrrrrsrc@s4eZdZdZdZdZdZeddZeddZ dS) Parameter parameterFus-asciicCs|jr|djSdSr) sectionednumberr+rrrsection_numberszParameter.section_numbercCsf|D].}|jdkr|jS|jdkr0|D]}|jdkr/|D]}|jdkr.|jSqqqdS)Nrrzr}r!)rNrrrrr param_values     zParameter.param_valueN) r2rQrRrNrextendedrurUrrrrrrrs rc@rc)InvalidParameterinvalid-parameterNrfrrrrrsrc@r) Attribute attributecCs$|D] }|jdr|jSqdS)Nattrtext)rNendswithrrrrrrs   zAttribute.stripped_valueNr2rQrRrNrUrrrrrrrrc@seZdZdZdZdS)SectionsectionN)r2rQrRrNrrrrrrrrc@r)ValuercCs2|d}|jdkr |d}|jdr|jS|jS)Nrrlr)rzrzextended-attribute)rNrrrrrrrrs zValue.stripped_valueNrrrrrrrrc@s(eZdZdZdZeddZddZdS)MimeParametersmime-parametersFc csi}|D]*}|jdsq|djdkrq|dj}||vr%g||<|||j|fq|D]\}}t|tdd}|dd}|j }|j smt |dkrm|dddkrm|ddj t d|dd}g}d}|D]n\} } | |kr| j s| j t dqs| j t d|d7}| j} | j rztj| } Wntytjj| d d } Yn(wz| |d } Wnttfy| d d } Ynwt| r| j t || qsd |} || fVq4dS)Nrrr)keyrz.duplicate parameter name; duplicate(s) ignoredz+duplicate parameter name; duplicate ignoredz(inconsistent RFC2231 parameter numberingzlatin-1)encodingsurrogateescaperr!)rNrrstriprritemssortedrrurrrrInvalidHeaderDefectrurllibparseZunquote_to_bytesUnicodeEncodeErrorZunquotedecode LookupErrorr_has_surrogatesUndecodableBytesDefectr*) rparamsrAnamepartsZ first_paramruZ value_partsirparamrrrrrsh           zMimeParameters.paramscCsTg}|jD]\}}|r|d|t|q||qd|}|r(d|SdS)N{}={}z; rZr!)rrr1rr*)rrrrrrrr,s  zMimeParameters.__str__N)r2rQrRrNrSrUrr,rrrrrs   Erc@r)ParameterizedHeaderValueFcCs&t|D] }|jdkr|jSqiS)Nr)reversedrNrrrrrr/s   zParameterizedHeaderValue.paramsN)r2rQrRrSrUrrrrrr)src@seZdZdZdZdZdZdS) ContentTypez content-typeFtextZplainN)r2rQrRrNr<maintypesubtyperrrrr7rwrc@seZdZdZdZdZdS)ContentDispositionzcontent-dispositionFN)r2rQrRrNr<content_dispositionrrrrr >r c@seZdZdZdZdZdS)ContentTransferEncodingzcontent-transfer-encodingFZ7bitN)r2rQrRrNr<rtrrrrr#Dr"r#c@ro) HeaderLabelz header-labelFNrrrrrr$Jrqr$c@seZdZdZdZddZdS)MsgIDzmsg-idFcCst||jSr)rlineseprErrrrFSrbz MsgID.foldN)r2rQrRrNr<rFrrrrr%Os r%c@rc) MessageIDz message-idNrfrrrrr'Xrgr'c@rc)InvalidMessageIDzinvalid-message-idNrfrrrrr(\rgr(c@rc)HeaderheaderNrfrrrrr)`rgr)csreZdZdZdZdZfddZfddZddZe dd Z dfd d Z d dZ e ddZ ddZZS)TerminalTcst||}||_g|_|Sr)r__new__rNr)clsrrNrrrrr,nszTerminal.__new__cr.r/r0r+rrrr3tszTerminal.__repr__cCst|jjd|jdS)N/)rIrr2rNr+rrrrLwszTerminal.pprintcCs t|jSr)listrr+rrrr6zrzTerminal.all_defectsr!c s6d||jj|jt|jsdgSd|jgS)Nz {}{}/{}({}){}r!z {})r1rr2rNrr3rrKrrrrM~s z Terminal._ppcCrrrr+rrrpop_trailing_wsr[zTerminal.pop_trailing_wscCsgSrrr+rrrr@r[zTerminal.commentscCst||jfSr)rrNr+rrr__getnewargs__szTerminal.__getnewargs__rP)r2rQrRr<rTrSr,r3rLrUr6rMr0r@r1rVrrrrr+hs     r+c@ eZdZeddZddZdS)WhiteSpaceTerminalcCrXrYrr+rrrrr[zWhiteSpaceTerminal.valuecCrX)NTrr+rrrr:z!WhiteSpaceTerminal.startswith_fwsNr2rQrRrUrr:rrrrr3  r3c@r2) ValueTerminalcCs|Srrr+rrrrr[zValueTerminal.valuecCrX)NFrr+rrrr:r4zValueTerminal.startswith_fwsNr5rrrrr7r6r7c@r2)EWWhiteSpaceTerminalcCrXrrr+rrrrr[zEWWhiteSpaceTerminal.valuecCrXrrr+rrrr,r4zEWWhiteSpaceTerminal.__str__N)r2rQrRrUrr,rrrrr8r6r8c@s eZdZdS)_InvalidEwErrorN)r2rQrRrrrrr9sr9r,list-separatorrzroute-component-markerz([{}]+)r!z[^{}]+z[\x00-\x20\x7F]cCsD t|}|r|jt|t|r |jtddSdS)Nz*Non-ASCII characters found in header token)_non_printable_finderrrrZNonPrintableDefectrrr)xtextZnon_printablesrrr_validate_xtexts   r>cCs t|d^}}g}d}d}tt|D]&}||dkr&|r#d}d}nd}q|r+d}n|||vr3n |||q|d}d|d||dg||fS)NrFr Tr!) _wsp_splitterrangerrr*)rendcharsZfragment remainderZvcharsescapehad_qpposrrr_get_ptext_to_endcharss&  $rFcCs0 |}t|dt|t|d}||fS)Nfws)rr3r)rZnewvaluerGrrrget_fwssrHc Cs t}|dstd||dddd^}}||ddkr-td|d|}t|dkrY|dtvrY|dtvrY| ddkrY|dd^}}|d|}t|dkrj|j t d ||_ d|}ztd|d\}}}} Wnttfytd |j w||_||_|j | |r|dtvrt|\} }| | qt|d^} }t| d } t| | | d|}|s|r|dtvr|j t d ||fS) N=?z"expected encoded word but found {}rz?=rr!r?zwhitespace inside encoded wordz!encoded word format invalid: '{}'vtextz.missing trailing whitespace after encoded-word)rr startswithrHeaderParseErrorr1rr*rrcountrrr rt_ewr ValueErrorKeyErrorr9rurvr?WSPrHr?r7r>) rZewrrBZremstrrestrrurvrrAcharsrKrrrget_encoded_wordsd                 rUcCs@ t}|r|dtvrt|\}}||qd}|drtzt|\}}Wnty2d}YnBtjy;Yn9wd}t |dkrV|dj dkrV|j t dd}|rnt |dkrn|d j d krnt |dd|d<||qt|d^}}|rt|r|d^}}t|d }t|||d |}|s|S) NrTrIFrrGz&missing whitespace before encoded wordrrsrKr!)rdrRrHrrLrUr9rrMrrNrr r8r?rfc2047_matchersearch partitionr7r>r*)rrerAvalid_ewZhave_wsrrBrKrrrget_unstructuredAsN           )r[cC, t|d\}}}t|d}t|||fS)Nz()r)rFr3r>rr_rrr get_qp_ctexts  r_cCr\)Nr r)rFr7r>r]rrr get_qcontents  r`cCP t|}|std||}|t|d}t|d}t|||fS)Nzexpected atext but found '{}'atext)_non_atom_end_matcherrrMr1rrr7r>)rmrbrrr get_atexts recCsp |ddkrtd|t}|dd}|r+|ddkr+t|\}}|||r|ddkr|dtvr@t|\}}nT|dddkrd}zt|\}}|j t dd }Wntjymt|\}}Ynw|rt |dkr|d j d kr|d j d krt |d d |d <nt|\}}|||r|ddks3|s|j t d||fS||ddfS)Nrr zexpected '"' but found '{}'rrrIFz!encoded word inside quoted stringTrrGrVrsz"end of header inside quoted string)rrMr1rr`rrRrHrUrr rrNr8)rZbare_quoted_stringrArZrrrget_bare_quoted_stringsP          rfcCs |r|ddkrtd|t}|dd}|rO|ddkrO|dtvr/t|\}}n|ddkr           rtc Csn t}d}|dtvrt|\}}|std|zt|\}}Wn-tjyQzt|\}}WntjyN|ddkrI|dtvrIt }YnwYnw|dur]|g|dd<| ||r|ddksp|dtvrt t ||\}}|j dkr|j tdn |j td||d<z |jdW||fSty|j tdY||fSw) Nrz"expected local-part but found '{}'r invalid-obs-local-partz)rrrDrrr get_dtexts  r|cCs,|rdS|td|tdddS)NFz"end of input inside domain-literal]domain-literal-endT)rrr r7)rdomain_literalrrr_check_for_early_dl_endsrcCsf t}|dtvrt|\}}|||std|ddkr*td||dd}t||r9||fS|tdd|dt vrRt |\}}||t |\}}||t||rf||fS|dt vrwt |\}}||t||r||fS|ddkrtd||tdd |dd}|r|dtvrt|\}}||||fS) Nrzexpected domain-literal[z6expected '[' at start of domain-literal but found '{}'rzdomain-literal-startr}z4expected ']' at end of domain-literal but found '{}'r~) rrhrirrrMr1rr7rRrHr|)rrrArrrget_domain_literalsJ                     rcCst t}d}|dtvrt|\}}|std||ddkrzangle-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) rrhrirrrMr1r7rr rrrs)rZ angle_addrrArrrget_angle_addrsZ               rcCs> t}t|\}}||dd|jdd|_||fSr)rrtr?r)rrrArrrget_display_names  rcCs t}d}|dtvrt|\}}|std||ddkrT|dtvr0td|t|\}}|s@td||durO|g|ddd<d}||t |\}}|dure|g|dd<||||fS)Nrz!expected name-addr but found '{}'r) rrhrirrMr1rrrrr)rZ name_addrrprArrr get_name_addrs8        rc Cs t}zt|\}}Wn#tjy/zt|\}}Wntjy,td|wYnwtdd|jDr=d|_| |||fS)Nzexpected mailbox but found '{}'cs|] }t|tjVqdSr)rrr r$rrrr'zget_mailbox..r) rrrrMrr1anyr6rNr)rrrArrr get_mailboxs( rcCst t}|r6|d|vr6|dtvr#|t|dd|dd}n t|\}}|||r6|d|vs ||fS)Nrr{r)rrrrr7rt)rrAZinvalid_mailboxrArrrget_invalid_mailbox    rcCs t}|r|ddkrz t|\}}||Wntjyd}|dtvrgt|\}}|r7|ddvrF|||jtdnQt |d\}}|durX|g|dd<|||jt dn0|ddkrw|jtdn t |d\}}|dur|g|dd<|||jt dYnw|r|ddvr|d}d|_ t |d\}}| ||jt d|r|ddkr|t |d d}|r|ddks ||fS) Nr;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listr:rrr)rrrrrMrhrirrsrr rNr?r)rZ mailbox_listrArprrrrget_mailbox_list s`                )rcCs t}|s|jtd||fSd}|rF|dtvrFt|\}}|s7|jtd||||fS|ddkrF||||fSt|\}}t|j dkrn|dur\||| ||jt d||fS|dury|g|dd<||||fS)Nzend of header before group-listrzend of header in group-listrzgroup-list with empty entries) rrrrr rhrirrrr?rs)rZ group_listrprArrrget_group_listYs@           rcCs t}t|\}}|r|ddkrtd||||tdd|dd}|rE|ddkrE|tdd||ddfSt|\}}|||s\|jt dn|ddkrjtd ||tdd|dd}|r|dt vrt |\}}||||fS) Nrrz8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorrrzgroup-terminatorzend of header in groupz)expected ';' at end of group but found {}) rrrrMr1rr7rrr rhri)rrrArrr get_group~s:          rc Csr t}zt|\}}Wn#tjy/zt|\}}Wntjy,td|wYnw||||fS)Nzexpected address but found '{}')rrrrMrr1r)rrrArrr get_addresss  rc Cs t}|rz t|\}}||Wntjy}zd}|dtvret|\}}|r2|ddkrA|||jtdnWt |d\}}|durS|g|dd<|t |g|jt dn3|ddkru|jtdn#t |d\}}|dur|g|dd<|t |g|jt dWYd}~nd}~ww|r|ddkr|dd}d|_ t |d\}}| ||jt d|r|tdd|d d}|s||fS) Nrr:z"address-list entry with no contentzinvalid address in address-listzempty element in address-listrrr;r)rrrrrMrhrirrsrrr rNr?r7)rZ address_listrAerrrprrrrget_address_lists`              )rcCs t}|std||ddkrtd||tdd|dd}t|\}}|||r=|ddkrEtd||tdd ||ddfS) Nz'expected no-fold-literal but found '{}'rrz;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startrr}z9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)rrrMr1rr7r|)rZno_fold_literalrArrrget_no_fold_literals,    rcCsr t}|r|dtvrt|\}}|||r|ddkr'td||tdd|dd}zt|\}}Wn,tjyizt |\}}|j t dWntjyftd|wYnw|||rw|ddkr|j t d |r|dd kr|td d |dd}||fS|tdd |dd}zt|\}}WnHtjyzt |\}}Wn5tjy}z(zt|\}}|j t d Wntjytd|wWYd}~nd}~wwYnw|||r|dd kr|dd}n |j t d|td d |r5|dtvr5t|\}}||||fS)Nrrzexpected 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-rightrz msg-id-endrzobsolete id-right in msg-idzFexpected dot-atom-text, no-fold-literal or obs-id-right but found '{}'zmissing trailing '>' on msg-id)r%rhrirrrMr1r7rmrwrrsr rr)rZmsg_idrAerrr get_msg_ids                  rc Cs t}z t|\}}||Wn(tjy9}zt|}t|}|jtd |WYd}~|Sd}~ww|rH|jtd ||S)NzInvalid msg-id: {!r}zUnexpected {!r}) r'rrrrMr[r(rr r1)rZ message_idrAZexrrrparse_message_idKs&  rcCs t}|s|jtd|S|dtvr-t|\}}|||s-|jtdd}|rW|ddkrW|dtvrW||d7}|dd}|rW|ddkrW|dtvs=|sp|jtd ||t |dn t ||_ |t |d |r|dtvrt|\}}|||r|ddkr|j dur|jtd |r|t |d|S|t dd |dd}|r|dtvrt|\}}|||s|j dur|jtd |Sd}|r|dtvr||d7}|dd}|r|dtvs|s |jtd ||t |dn t ||_ |t |d |rB|dtvrBt|\}}|||rV|jtd |t |d|S)Nz%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSr!rrz1Expected 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)rrrrHeaderMissingRequiredValuerhriisdigitr r1r7intrr)rZ mime_versionrArrrrparse_mime_versiongs                          rcCst t}|r6|ddkr6|dtvr#|t|dd|dd}n t|\}}|||r6|ddks ||fS)Nrrr{r)rrrrr7rt)rZinvalid_parameterrArrrget_invalid_parameterrrcCra)Nzexpected ttext but found '{}'ttext)_non_token_end_matcherrrMr1rrr7r>)rrdrrrr get_ttext rcC t}|r|dtvrt|\}}|||r'|dtvr'td|t|\}}|||rE|dtvrEt|\}}||||fSNrzexpected token but found '{}') rprhrir TOKEN_ENDSrrMr1r)rZmtokenrArrr get_token      rcCra)Nz expected attrtext but found {!r}r)_non_attribute_end_matcherrrMr1rrr7r>rrdrrrr get_attrtextrrcCrr) rrhrirATTRIBUTE_ENDSrrMr1rrrrArrr get_attributerrcCra)Nz)expected extended attrtext but found {!r}extended-attrtext)#_non_extended_attribute_end_matcherrrMr1rrr7r>rrrrget_extended_attrtext s rcCrr) rrhrirEXTENDED_ATTRIBUTE_ENDSrrMr1rrrrrget_extended_attribute# s      rcCs t}|r |ddkrtd||tdd|dd}|r*|ds2td|d}|rP|drP||d7}|dd}|rP|ds<|ddkrc|dkrc|jtd t ||_ |t|d ||fS) Nr*zExpected section but found {}zsection-markerrz$Expected section number but found {}r!0z'section number has an invalid leading 0r) rrrMr1rr7rrr rr)rrrrrr get_section9 s0     rcCs t}|s tdd}|dtvrt|\}}|s#td||ddkr0t|\}}nt|\}}|durA|g|dd<||||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r ) rrrMrhrir1rjrr)rvrprArrr get_valueW s$      rc Csz t}t|\}}|||r|ddkr'|jtd|||fS|ddkrfzt|\}}d|_||Wn tj yGYnw|sOt d|ddkrf|t dd|dd}d|_ |dd krqt d |t d d |dd}d}|r|dt vrt |\}}||d}|}|j r|r|dd krt|\}}|j}d }|jdkr|r|ddkrd}n#t|\}} | r| ddkrd}nzt|\}} WnYn| sd}|r |jtd|||D]} | jdkr g| dd<| }nq|}n d}|jtd|r%|ddkr%d}nt|\}}|j r5|jdkrX|r?|ddkrO|||durK|}||fS|jtd|ss|jtd|||durr||fSnw|dur|D] } | jdkrnqz| jdk|| | j|_|ddkrt d||t dd|dd}|r|ddkrt|\}}|||j|_|r|ddkrt d||t dd|dd}|dur't} |r$|dtvrt|\}}n|dd krt d d}|dd}nt|\}}| ||s| }nt|\}}|||dur9|}||fS)Nrrz)Parameter contains name ({}) but no valuerTzIncomplete parameterzextended-parameter-markerr=zParameter not followed by '='parameter-separatorr F'z5Quoted string value for extended parameter is invalidr}zZParameter 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)rrrrrr r1rrrMr7rrhrirjrrrrrNrrrurvrrRrHr`) rrrArprBZappendtoZqstringZ inner_valueZ semi_validrStrrrr get_parameterm s                                           rc Csn t}|rz t|\}}||Wnitjy|}z\d}|dtvr*t|\}}|s9|||WYd}~S|ddkrR|durH|||jtdn t |\}}|ra|g|dd<|||jtd |WYd}~nd}~ww|r|ddkr|d}d|_ t |\}}| ||jtd ||r|t dd|d d}|s|S) Nrrzparameter entry with no contentzinvalid parameter {!r}rrz)parameter with invalid trailing text {!r}rr)rrrrrMrhrirr rr1rNr?r7)rZmime_parametersrArrprrrrparse_mime_parameters sR               $rcCs |r3|ddkr3|dtvr |t|dd|dd}n t|\}}|||r3|ddks |s7dS|tdd|t|dddS)Nrrr{rr)rrrr7rtr)Z tokenlistrrArrr_find_mime_parameters/ s   rc Cs t}d}|s|jtd|Szt|\}}Wntjy8|jtd|t |||YSw|||rF|ddkrX|jtd|rVt |||S|j |_ |tdd|dd}zt|\}}Wntjy|jtd |t |||YSw|||j |_|s|S|dd kr|jtd ||` |`t |||S|td d |t|dd|S) NFz"Missing content type specificationz(Expected content maintype but found {!r}rr.zInvalid content typezcontent-type-separatorrz'Expected content subtype but found {!r}rz. unknown-8bitTrrBrrx)Zmax_line_lengthsysmaxsizeutf8r+r/rrrN SPECIALSNL isdisjointNLSETrxrrr6_fold_mime_parametersr<rSrFrr&rrrO _fold_as_ewrTr:insertr*)Z parse_treerCmaxlenrrlast_ewrZ want_encodingZend_ew_not_allowedrr=tstrruZ encoded_partnewlineZnewpartsrrrrD s               \rDcCs |dur|rtt|d|d|}|dd||d<|dtvrF|d}|dd}t|d|kr>|t||d|7<d}|dtvrX|d}|dd}|durbt|dn|}|dkrjdn|} t| d} | d|kr}td|r|t|d} | | } | dkr|d q}|d| } tj | | d }t|| }|dkr| dd} tj | | d }t|| }|dks|d|7<|t| d}|r|d t|d}|s|d|7<|r|SdS) Nrrrr!rrz3max_line_length is too small to fit an encoded wordrZ)ru) rr[rRrrrrrMrOrx)Z to_encoderrrrTruZ leading_wspZ trailing_wspZ new_last_ewZ encode_as chrome_lenZremaining_spaceZ text_spaceZto_encode_wordZ encoded_wordZexcessrrrr7 sZ               rc Cs |jD]\}}|dds|dd7<|}d}z ||d}Wnty=d}t|r9d}d}nd}Ynw|rQtjj |d |d } d ||| } nd |t |} t |dt | d |krr|dd| |d<qt | d|kr| d| qd} |d} |rt |t t| dt | } || dkrd}|| d}} |d|}tjj |d |d } t | |krn|d 8}q| d || | | d } | d 7} ||d}|r|dd7<|sqdS)NrrstrictFTrrrr!)Zsaferz {}*={}''{}rrrZrrz''rNz {}*{}*={}{})rrrrxrrrr rrr1rrrr)r=rrrrrruZ error_handlerZencoding_requiredZ encoded_valuerrZ extra_chromerZ splitpointZmaxcharspartialrrrrx sp        r)rerr stringroperatorrZemailrrOrrrrRrhrorkrrrZ TSPECIALSrZ ASPECIALSrrrrrcompileVERBOSE MULTILINErWr/rrWrdrhrjrkrmrprrryrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr r#r$r%r'r(r)rr+r3r7r8rMr9rrrr1r*rr?rCmatchrcfindallr<rrrr>rFrHrUr[r_r`rerfrgrirjrlrmrnrqrtrzrwr|rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrDrrrrrrsDE           C  "   !*$ V +        1C+ "&'/'&).9%7ED49/k A