
    -hhG             	       
   S SK r S SKrS SKrS SKJr  S SKJr  S SKJr	  S SKJ
r
  S SKJr  \" S5      r\\" S5      -  r\" S	5      r\\-  r\\" S
5      -
  r\\" S5      -
  r\\" S5      -  \" S
5      -
  r\\-  r\\" S5      -  r\\-  r\\" S5      -
  rSS1r\\-  rS rS r\ R8                  " S\ R:                  \ R<                  -  5      r " S S\ 5      r! " S S\!5      r" " S S\!5      r# " S S\!5      r$ " S S\!5      r% " S S\"5      r& " S  S!\!5      r' " S" S#\!5      r( " S$ S%\!5      r) " S& S'\!5      r* " S( S)\*5      r+ " S* S+\"5      r, " S, S-\!5      r- " S. S/\!5      r. " S0 S1\!5      r/ " S2 S3\!5      r0 " S4 S5\!5      r1 " S6 S7\!5      r2 " S8 S9\!5      r3 " S: S;\!5      r4 " S< S=\!5      r5 " S> S?\!5      r6 " S@ SA\!5      r7 " SB SC\!5      r8 " SD SE\!5      r9 " SF SG\!5      r: " SH SI\!5      r; " SJ SK\!5      r< " SL SM\$5      r= " SN SO\!5      r> " SP SQ\!5      r? " SR SS\!5      r@ " ST SU\!5      rA " SV SW\A5      rB " SX SY\!5      rC " SZ S[\!5      rD " S\ S]\!5      rE " S^ S_\!5      rF " S` Sa\!5      rG " Sb Sc\G5      rH " Sd Se\G5      rI " Sf Sg\!5      rJ " Sh Si\!5      rK " Sj Sk\!5      rL " Sl Sm\L5      rM " Sn So\M5      rN " Sp Sq\!5      rO " Sr Ss\P5      rQ " St Su\Q5      rR " Sv Sw\Q5      rS " Sx Sy\R5      rT " Sz S{\
R                  5      rV\S" S
S|5      rW\S" S}S~5      rXS\XlY        S\XlZ        \S" SS5      r[\ R8                  " SR                  SR                  \5      5      5      R                  r_\ R8                  " SR                  \ R                  " SR                  \5      5      5      5      R                  rb\ R8                  " S5      R                  rd\ R8                  " SR                  \ R                  " SR                  \5      5      5      5      R                  re\ R8                  " SR                  \ R                  " SR                  \5      5      5      5      R                  rf\ R8                  " SR                  \ R                  " SR                  \5      5      5      5      R                  rgS rhS riS rjSS jrkS rlS rmS rnS roS rpS rqS rrS rsS rtS ruS rvS rwS rxS ryS rzS r{S r|S r}S r~S rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rS rg)    N)	hexdigits)
itemgetter)_encoded_words)errors)utilsz 	(z()<>@,:;.\"[].z."(z/?=z*'%%
c                 X    [        U 5      R                  SS5      R                  SS5      $ )N\\\"z\")strreplacevalues    C/opt/python-3.13.8/usr/lib/python3.13/email/_header_value_parser.pymake_quoted_pairsr   c   s&    u:dF+33C??    c                 $    [        U 5      nSU S3$ )Nr   )r   )r   escapeds     r   quote_stringr   h   s    &Gwiq>r   z
   =\?            # literal =?
   [^?]*          # charset
   \?             # literal ?
   [qQbB]         # literal 'q' or 'b', case insensitive
   \?             # literal ?
  .*?             # encoded word
  \?=             # literal ?=
c                      ^  \ rS rSrSrSrSrU 4S jrS rU 4S jr	\
S 5       r\
S 5       rS	 r\
S
 5       r\
S 5       rS rSS jrSS jrSS jrSrU =r$ )	TokenList}   NTc                 4   > [         TU ]  " U0 UD6  / U l        g N)super__init__defects)selfargskw	__class__s      r   r!   TokenList.__init__   s    $%"%r   c                 2    SR                  S U  5       5      $ )N c              3   8   #    U  H  n[        U5      v   M     g 7fr   r   .0xs     r   	<genexpr>$TokenList.__str__.<locals>.<genexpr>        ,t!s1vvt   joinr#   s    r   __str__TokenList.__str__   s    ww,t,,,r   c                 h   > SR                  U R                  R                  [        TU ]  5       5      $ Nz{}({})formatr&   __name__r    __repr__r#   r&   s    r   r=   TokenList.__repr__   s+    t~~66"W-/1 	1r   c                 2    SR                  S U  5       5      $ )Nr)   c              3   ^   #    U  H#  oR                   (       d  M  UR                   v   M%     g 7fr   r   r,   s     r   r/   "TokenList.value.<locals>.<genexpr>   s     81wqwws   --r3   r5   s    r   r   TokenList.value   s    ww8888r   c                 <    [        S U  5       U R                  5      $ )Nc              3   8   #    U  H  oR                   v   M     g 7fr   )all_defectsr,   s     r   r/   (TokenList.all_defects.<locals>.<genexpr>   s     04aMM4r2   )sumr"   r5   s    r   rF   TokenList.all_defects   s    040$,,??r   c                 (    U S   R                  5       $ Nr   )startswith_fwsr5   s    r   rL   TokenList.startswith_fws   s    Aw%%''r   c                 &    [        S U  5       5      $ )Nc              3   8   #    U  H  oR                   v   M     g 7fr   )as_ew_allowed)r-   parts     r   r/   *TokenList.as_ew_allowed.<locals>.<genexpr>   s     7$$%%$r2   )allr5   s    r   rP   TokenList.as_ew_allowed   s     7$777r   c                 R    / nU  H  nUR                  UR                  5        M      U$ r   )extendcomments)r#   rW   tokens      r   rW   TokenList.comments   s&    EOOENN+ r   c                    [        XS9$ )Npolicy)_refold_parse_treer#   r\   s     r   foldTokenList.fold   s    !$66r   c                 4    [        U R                  US95        g )Nindent)printppstrr#   rc   s     r   pprintTokenList.pprint   s    djjj'(r   c                 >    SR                  U R                  US95      $ )Nr   rb   )r4   _pprf   s     r   re   TokenList.ppstr   s    yy011r   c              #     #    SR                  UU R                  R                  U R                  5      v   U  HH  n[	        US5      (       d  USR                  U5      -   v   M,  UR                  US-   5       S h  vN   MJ     U R                  (       a  SR                  U R                  5      nOSnSR                  X5      v   g  NK7f)Nz{}{}/{}(rj   z*    !! invalid element in token list: {!r}z    z Defects: {}r)   z{}){})r;   r&   r<   
token_typehasattrrj   r"   )r#   rc   rX   extras       r   rj   TokenList._pp   s     NN##OO 	 E5%(( !55;VE]C D !99VF]333  <<"))$,,7EEnnV++ 4s   A9C	;C<AC	)r"   r)   )r<   
__module____qualname____firstlineno__rm   syntactic_breakew_combine_allowedr!   r6   r=   propertyr   rF   rL   rP   rW   r_   rg   re   rj   __static_attributes____classcell__r&   s   @r   r   r   }   s    JO-1 9 9 @ @( 8 8  7)2, ,r   r   c                   4    \ rS rSr\S 5       r\S 5       rSrg)WhiteSpaceTokenList   c                     gN  r5   s    r   r   WhiteSpaceTokenList.value       r   c                 h    U  Vs/ s H   oR                   S:X  d  M  UR                  PM"     sn$ s  snf )Ncomment)rm   contentr#   r.   s     r   rW   WhiteSpaceTokenList.comments   s)    #'C4a<<+B			4CCC   //r   N)r<   rr   rs   rt   rw   r   rW   rx   r   r   r   r|   r|      s*      D Dr   r|   c                       \ rS rSrSrSrg)UnstructuredTokenList   unstructuredr   Nr<   rr   rs   rt   rm   rx   r   r   r   r   r      s    Jr   r   c                       \ rS rSrSrSrg)Phrase   phraser   Nr   r   r   r   r   r          Jr   r   c                       \ rS rSrSrSrg)Word   wordr   Nr   r   r   r   r   r          Jr   r   c                       \ rS rSrSrSrg)CFWSList   cfwsr   Nr   r   r   r   r   r      r   r   r   c                       \ rS rSrSrSrg)Atom   atomr   Nr   r   r   r   r   r      r   r   r   c                       \ rS rSrSrSrSrg)Token   rX   Fr   N)r<   rr   rs   rt   rm   encode_as_ewrx   r   r   r   r   r      s    JLr   r   c                   $    \ rS rSrSrSrSrSrSrg)EncodedWord   encoded-wordNr   )	r<   rr   rs   rt   rm   ctecharsetlangrx   r   r   r   r   r      s    J
CGDr   r   c                   H    \ rS rSrSr\S 5       r\S 5       r\S 5       rSr	g)QuotedString   quoted-stringc                 R    U  H!  nUR                   S:X  d  M  UR                  s  $    g Nbare-quoted-stringrm   r   r   s     r   r   QuotedString.content   s"    A||33ww r   c                     / nU  HJ  nUR                   S:X  a  UR                  [        U5      5        M/  UR                  UR                  5        ML     SR	                  U5      $ )Nr   r)   )rm   appendr   r   r4   )r#   resr.   s      r   quoted_valueQuotedString.quoted_value   sN    A||33

3q6"

177#	 
 wws|r   c                 R    U  H!  nUR                   S:X  d  M  UR                  s  $    g r   r   r#   rX   s     r   stripped_valueQuotedString.stripped_value   s%    E#77{{" r   r   N)
r<   rr   rs   rt   rm   rw   r   r   r   rx   r   r   r   r   r      sA     J 
   # #r   r   c                   .    \ rS rSrSrS r\S 5       rSrg)BareQuotedStringi  r   c                 D    [        SR                  S U  5       5      5      $ )Nr)   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r+   r,   s     r   r/   +BareQuotedString.__str__.<locals>.<genexpr>
  s     #9DqCFFDr2   )r   r4   r5   s    r   r6   BareQuotedString.__str__	  s    BGG#9D#99::r   c                 2    SR                  S U  5       5      $ )Nr)   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r+   r,   s     r   r/   )BareQuotedString.value.<locals>.<genexpr>  r1   r2   r3   r5   s    r   r   BareQuotedString.value      ww,t,,,r   r   N)	r<   rr   rs   rt   rm   r6   rw   r   rx   r   r   r   r   r     s     %J; - -r   r   c                   D    \ rS rSrSrS rS r\S 5       r\S 5       r	Sr
g)	Commenti  r   c                     SR                  [        S/U  Vs/ s H  oR                  U5      PM     snS/// 5      5      $ s  snf )Nr)   r   ))r4   rH   quoter   s     r   r6   Comment.__str__  sI    wws E489DqZZ]D9 E  "	# $ 	$9s   A c                     UR                   S:X  a  [        U5      $ [        U5      R                  SS5      R                  SS5      R                  SS5      $ )Nr   r   r   r   z\(r   z\))rm   r   r   )r#   r   s     r   r   Comment.quote  sR    y(u:5z!!$/77"%u..5g"%u/.	.r   c                 2    SR                  S U  5       5      $ )Nr)   c              3   8   #    U  H  n[        U5      v   M     g 7fr   r+   r,   s     r   r/   "Comment.content.<locals>.<genexpr>%  r1   r2   r3   r5   s    r   r   Comment.content#  r   r   c                     U R                   /$ r   )r   r5   s    r   rW   Comment.comments'  s    ~r   r   N)r<   rr   rs   rt   rm   r6   r   rw   r   rW   rx   r   r   r   r   r     s9    J$. - -  r   r   c                   H    \ rS rSrSr\S 5       r\S 5       r\S 5       rSr	g)AddressListi+  zaddress-listc                 T    U  Vs/ s H  oR                   S:X  d  M  UPM     sn$ s  snf )Naddressrm   r   s     r   	addressesAddressList.addresses/  #    ;4a<<#:4;;;   %%c                 (    [        S U  5       / 5      $ )Nc              3   \   #    U  H"  oR                   S :X  d  M  UR                  v   M$     g7fr   Nrm   	mailboxesr,   s     r   r/   (AddressList.mailboxes.<locals>.<genexpr>5  s&      >!\\9%<  AKK!   ,,rH   r5   s    r   r   AddressList.mailboxes3  !     >!>?AC 	Cr   c                 (    [        S U  5       / 5      $ )Nc              3   \   #    U  H"  oR                   S :X  d  M  UR                  v   M$     g7fr   rm   all_mailboxesr,   s     r   r/   ,AddressList.all_mailboxes.<locals>.<genexpr>:  s&      >!\\9%< $AOO!r   r   r5   s    r   r   AddressList.all_mailboxes8  r   r   r   N)
r<   rr   rs   rt   rm   rw   r   r   r   rx   r   r   r   r   r   +  sE    J< < C C C Cr   r   c                   H    \ rS rSrSr\S 5       r\S 5       r\S 5       rSr	g)Addressi>  r   c                 H    U S   R                   S:X  a  U S   R                  $ g )Nr   grouprm   display_namer5   s    r   r   Address.display_nameB  s)    7(7''' )r   c                 |    U S   R                   S:X  a  U S   /$ U S   R                   S:X  a  / $ U S   R                  $ Nr   mailboxinvalid-mailboxr   r5   s    r   r   Address.mailboxesG  sH    7*G9!W#44IAw   r   c                     U S   R                   S:X  a  U S   /$ U S   R                   S:X  a  U S   /$ U S   R                  $ r   r   r5   s    r   r   Address.all_mailboxesO  sO    7*G9!W#44G9Aw$$$r   r   N)
r<   rr   rs   rt   rm   rw   r   r   r   rx   r   r   r   r   r   >  sA    J( ( ! ! % %r   r   c                   8    \ rS rSrSr\S 5       r\S 5       rSrg)MailboxListiW  mailbox-listc                 T    U  Vs/ s H  oR                   S:X  d  M  UPM     sn$ s  snf )Nr   r   r   s     r   r   MailboxList.mailboxes[  r   r   c                 V    U  Vs/ s H  nUR                   S;   d  M  UPM     sn$ s  snf )N)r   r   r   r   s     r   r   MailboxList.all_mailboxes_  s2     ?4a||== 4 ? 	? ?s   &&r   N	r<   rr   rs   rt   rm   rw   r   r   rx   r   r   r   r   r   W  s-    J< < ? ?r   r   c                   8    \ rS rSrSr\S 5       r\S 5       rSrg)	GroupListie  
group-listc                 X    U (       a  U S   R                   S:w  a  / $ U S   R                  $ Nr   r   r   r5   s    r   r   GroupList.mailboxesi  s+    tAw))^;IAw   r   c                 X    U (       a  U S   R                   S:w  a  / $ U S   R                  $ r
  r   r5   s    r   r   GroupList.all_mailboxeso  s+    tAw))^;IAw$$$r   r   Nr  r   r   r   r  r  e  s-    J! !
 % %r   r  c                   H    \ rS rSrSr\S 5       r\S 5       r\S 5       rSr	g)Groupiv  r   c                 J    U S   R                   S:w  a  / $ U S   R                  $ N   r  r   r5   s    r   r   Group.mailboxesz  s)    7-IAw   r   c                 J    U S   R                   S:w  a  / $ U S   R                  $ r  r   r5   s    r   r   Group.all_mailboxes  s)    7-IAw$$$r   c                      U S   R                   $ rK   )r   r5   s    r   r   Group.display_name  s    Aw###r   r   N)
r<   rr   rs   rt   rm   rw   r   r   r   rx   r   r   r   r  r  v  sA    J! !
 % %
 $ $r   r  c                   h    \ rS rSrSr\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
Srg	)
NameAddri  	name-addrc                 @    [        U 5      S:X  a  g U S   R                  $ N   r   )lenr   r5   s    r   r   NameAddr.display_name  s     t9>Aw###r   c                      U S   R                   $ N
local_partr5   s    r   r$  NameAddr.local_part  s    Bx"""r   c                      U S   R                   $ r!  domainr5   s    r   r(  NameAddr.domain  s    Bxr   c                      U S   R                   $ r!  )router5   s    r   r+  NameAddr.route  s    Bx~~r   c                      U S   R                   $ r!  	addr_specr5   s    r   r/  NameAddr.addr_spec  s    Bx!!!r   r   Nr<   rr   rs   rt   rm   rw   r   r$  r(  r+  r/  rx   r   r   r   r  r    si    J$ $
 # #     " "r   r  c                   X    \ rS rSrSr\S 5       r\S 5       r\S 5       r\S 5       r	Sr
g)		AngleAddri  z
angle-addrc                 R    U  H!  nUR                   S:X  d  M  UR                  s  $    g N	addr-spec)rm   r$  r   s     r   r$  AngleAddr.local_part  s"    A||{*||# r   c                 R    U  H!  nUR                   S:X  d  M  UR                  s  $    g r5  rm   r(  r   s     r   r(  AngleAddr.domain  s!    A||{*xx r   c                 R    U  H!  nUR                   S:X  d  M  UR                  s  $    g )N	obs-route)rm   domainsr   s     r   r+  AngleAddr.route  s"    A||{*yy  r   c                     U  HV  nUR                   S:X  d  M  UR                  (       a  UR                  s  $ [        UR                  5      UR                  -   s  $    g)Nr6  z<>)rm   r$  r/  r   r   s     r   r/  AngleAddr.addr_spec  sF    A||{*<<;;&'5CC  r   r   N)r<   rr   rs   rt   rm   rw   r$  r(  r+  r/  rx   r   r   r   r3  r3    sU    J$ $
    
 ! !
  r   r3  c                   (    \ rS rSrSr\S 5       rSrg)ObsRoutei  r<  c                 h    U  Vs/ s H   oR                   S:X  d  M  UR                  PM"     sn$ s  snf )Nr(  r9  r   s     r   r=  ObsRoute.domains  s)    "&C$Q,,(*B$CCCr   r   N)r<   rr   rs   rt   rm   rw   r=  rx   r   r   r   rB  rB    s    JD Dr   rB  c                   h    \ rS rSrSr\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
Srg	)
Mailboxi  r   c                 H    U S   R                   S:X  a  U S   R                  $ g Nr   r  r   r5   s    r   r   Mailbox.display_name  s)    7,7''' -r   c                      U S   R                   $ rK   r#  r5   s    r   r$  Mailbox.local_part      Aw!!!r   c                      U S   R                   $ rK   r'  r5   s    r   r(  Mailbox.domain  s    Aw~~r   c                 H    U S   R                   S:X  a  U S   R                  $ g rH  )rm   r+  r5   s    r   r+  Mailbox.route  s'    7,7==  -r   c                      U S   R                   $ rK   r.  r5   s    r   r/  Mailbox.addr_spec  s    Aw   r   r   Nr1  r   r   r   rF  rF    si    J( ( " "   ! ! ! !r   rF  c                   8    \ rS rSrSr\S 5       r\=r=r=r	r
Srg)InvalidMailboxi  r   c                     g r   r   r5   s    r   r   InvalidMailbox.display_name      r   r   Nr1  r   r   r   rT  rT    s/    "J  /;:J::%)r   rT  c                   :   ^  \ rS rSrSrSr\U 4S j5       rSrU =r	$ )Domaini  r(  Fc                 R   > SR                  [        TU ]  R                  5       5      $ Nr)   r4   r    r   splitr>   s    r   r(  Domain.domain      wwuw}**,--r   r   )
r<   rr   rs   rt   rm   rP   rw   r(  rx   ry   rz   s   @r   rY  rY    s    JM. .r   rY  c                       \ rS rSrSrSrg)DotAtomi  dot-atomr   Nr   r   r   r   ra  ra    s    Jr   ra  c                       \ rS rSrSrSrSrg)DotAtomTexti  zdot-atom-textTr   Nr<   rr   rs   rt   rm   rP   rx   r   r   r   rd  rd    s     JMr   rd  c                       \ rS rSrSrSrSrg)NoFoldLiterali
  zno-fold-literalFr   Nre  r   r   r   rg  rg  
  s    "JMr   rg  c                   \    \ rS rSrSrSr\S 5       r\S 5       r\S 5       r	\S 5       r
Srg	)
AddrSpeci  r6  Fc                      U S   R                   $ rK   r#  r5   s    r   r$  AddrSpec.local_part  rL  r   c                 @    [        U 5      S:  a  g U S   R                  $ )N   r"  )r  r(  r5   s    r   r(  AddrSpec.domain  s    t9q=Bxr   c                     [        U 5      S:  a  U S   R                  $ U S   R                  R                  5       U S   R                  -   U S   R                  R                  5       -   $ )Nrm  r   r  r  )r  r   rstriplstripr5   s    r   r   AddrSpec.value  sU    t9q=7== Aw}}##%d1gmm3DGMM4H4H4JJJr   c                     [        U R                  5      n[        U5      [        U[        -
  5      :  a  [	        U R                  5      nOU R                  nU R
                  b  US-   U R
                  -   $ U$ )N@)setr$  r  DOT_ATOM_ENDSr   r(  )r#   namesetlps      r   r/  AddrSpec.addr_spec$  s_    doo&w<#gm344doo.BB;;"8dkk))	r   r   N)r<   rr   rs   rt   rm   rP   rw   r$  r(  r   r/  rx   r   r   r   ri  ri    s\    JM" "  
 K K
  r   ri  c                       \ rS rSrSrSrSrg)ObsLocalParti0  zobs-local-partFr   Nre  r   r   r   r{  r{  0  s    !JMr   r{  c                   J   ^  \ rS rSrSrSr\S 5       r\U 4S j5       rSr	U =r
$ )DisplayNamei6  zdisplay-nameFc                    [        U 5      n[        U5      S:X  a  UR                  $ US   R                  S:X  a  UR	                  S5        OB[        US   [         5      (       a*  US   S   R                  S:X  a  [        US   SS  5      US'   US   R                  S:X  a  UR	                  5         UR                  $ [        US   [         5      (       a*  US   S   R                  S:X  a  [        US   S S 5      US'   UR                  $ )Nr   r   r  r"  )r   r  r   rm   pop
isinstance)r#   r   s     r   r   DisplayName.display_name;  s    os8q=99q6&GGAJ3q69--F1I((F2"3q6!":.Ar7'GGI
 yy 3r7I..GBK**f4#CGCRL1Byyr   c                   > SnU R                   (       a  SnOU  H  nUR                  S:X  d  M  SnM     [        U 5      S:w  a  U(       a  S=p4U S   R                  S:X  d.  [        U S   [        5      (       a  U S   S   R                  S:X  a  SnU S   R                  S:X  d.  [        U S   [        5      (       a  U S   S   R                  S:X  a  SnU[        U R                  5      -   U-   $ [        TU ]   $ )	NFTr   r   r)   r   r   r"  )	r"   rm   r  r  r   r   r   r    r   )r#   r   r.   prepostr&   s        r   r   DisplayName.valueN  s    <<E<<?2 E  t9>eOCQ""f,47I..Q
%%/R##v-48Y//R''61|D$5$566t;;7= r   r   )r<   rr   rs   rt   rm   rv   rw   r   r   rx   ry   rz   s   @r   r}  r}  6  s4    J $ ! !r   r}  c                   <    \ rS rSrSrSr\S 5       r\S 5       rSr	g)	LocalPartif  z
local-partFc                 d    U S   R                   S:X  a  U S   R                  $ U S   R                  $ )Nr   r   )rm   r   r   r5   s    r   r   LocalPart.valuek  s2    707'''7== r   c                    [         /n[         nSnU S   [         /-    H  nUR                  S:X  a  M  U(       a4  UR                  S:X  a$  US   R                  S:X  a  [        US S 5      US'   [        U[        5      nU(       aA  UR                  S:X  a1  US   R                  S:X  a  UR	                  [        USS  5      5        OUR	                  U5        US   nUnM     [        USS 5      nUR
                  $ )NFr   r   dotr"  r  )DOTrm   r   r  r   r   )r#   r   last
last_is_tltokis_tls         r   r$  LocalPart.local_partr  s     e
7cU?C~~'s~~6H''61#D"I.BsI.E$//U2F%%/

9SW-.

3r7DJ # Ab	"yyr   r   N)
r<   rr   rs   rt   rm   rP   rw   r   r$  rx   r   r   r   r  r  f  s2    JM! !  r   r  c                   J   ^  \ rS rSrSrSr\U 4S j5       r\S 5       rSr	U =r
$ )DomainLiterali  zdomain-literalFc                 R   > SR                  [        TU ]  R                  5       5      $ r[  r\  r>   s    r   r(  DomainLiteral.domain  r_  r   c                 R    U  H!  nUR                   S:X  d  M  UR                  s  $    g )Nptextr   r   s     r   ipDomainLiteral.ip  s!    A||w&ww r   r   )r<   rr   rs   rt   rm   rP   rw   r(  r  rx   ry   rz   s   @r   r  r    s3    !JM. .  r   r  c                        \ rS rSrSrSrSrSrg)MIMEVersioni  zmime-versionNr   )r<   rr   rs   rt   rm   majorminorrx   r   r   r   r  r    s    JEEr   r  c                   D    \ rS rSrSrSrSrSr\S 5       r	\S 5       r
Srg)		Parameteri  	parameterFus-asciic                 F    U R                   (       a  U S   R                  $ S$ r  )	sectionednumberr5   s    r   section_numberParameter.section_number  s     "&tAw~~6Q6r   c                    U  Hy  nUR                   S:X  a  UR                  s  $ UR                   S:X  d  M3  U H@  nUR                   S:X  d  M  U H%  nUR                   S:X  d  M  UR                  s  s  s  $    MB     M{     g)Nr   r   r   r)   )rm   r   r   s     r   param_valueParameter.param_value  sx     E7*+++?2"E''+??%*E$//7:',';'; ; &+ #	  r   r   N)r<   rr   rs   rt   rm   r  extendedr   rw   r  r  rx   r   r   r   r  r    s<    JIHG7 7
  r   r  c                       \ rS rSrSrSrg)InvalidParameteri  invalid-parameterr   Nr   r   r   r   r  r    s    $Jr   r  c                   (    \ rS rSrSr\S 5       rSrg)	Attributei  	attributec                 r    U  H1  nUR                   R                  S5      (       d  M%  UR                  s  $    g )Nattrtext)rm   endswithr   r   s     r   r   Attribute.stripped_value  s-    E((44{{" r   r   Nr<   rr   rs   rt   rm   rw   r   rx   r   r   r   r  r    s    J# #r   r  c                       \ rS rSrSrSrSrg)Sectioni  sectionNr   )r<   rr   rs   rt   rm   r  rx   r   r   r   r  r    s    JFr   r  c                   (    \ rS rSrSr\S 5       rSrg)Valuei  r   c                     U S   nUR                   S:X  a  U S   nUR                   R                  S5      (       a  UR                  $ U R                  $ )Nr   r   r  )r   r  zextended-attribute)rm   r  r   r   r   s     r   r   Value.stripped_value  sV    Qv%GE$$DF F'''zzr   r   Nr  r   r   r   r  r    s    J r   r  c                   2    \ rS rSrSrSr\S 5       rS rSr	g)MimeParametersi  mime-parametersFc              #     #    0 nU  H  nUR                   R                  S5      (       d  M%  US   R                   S:w  a  M:  US   R                  R                  5       nX1;  a  / X'   X   R	                  UR
                  U45        M     UR                  5        GH  u  p4[        U[        S5      S9nUS   S   nUR                  nUR                  (       dU  [        U5      S:  aF  US   S   S:X  a:  US   S   R                  R	                  [        R                  " S5      5        US S n/ nSnU GH+  u  pX:w  aq  U
R                  (       d1  U
R                  R	                  [        R                  " S5      5        MM  U
R                  R	                  [        R                  " S5      5        US-  nU
R                  nU
R                  (       a|   [         R"                  R%                  U5      n UR'                  US	5      n[,        R.                  " U5      (       a.  U
R                  R	                  [        R0                  " 5       5        UR	                  U5        GM.     SR5                  U5      nX;4v   GM     g ! [(        [*        4 a    UR'                  S
S	5      n Nf = f! [*         a!    [         R"                  R3                  USS9n Nf = f7f)Nr  r   r  )keyr  z.duplicate parameter name; duplicate(s) ignoredz+duplicate parameter name; duplicate ignoredz(inconsistent RFC2231 parameter numberingsurrogateescaper  zlatin-1)encodingr)   )rm   r  r   stripr   r  itemssortedr   r   r  r  r"   r   InvalidHeaderDefectr  urllibparseunquote_to_bytesdecodeLookupErrorUnicodeEncodeErrorr   _has_surrogatesUndecodableBytesDefectunquoter4   )r#   paramsrX   namepartsfirst_paramr   value_partsir  paramr   s               r   r  MimeParameters.params  s     E##,,[99Qx""k18>>'')D!!L!5!5u =>  "<<>KD5jm4E(1+K!))G ''CJN8A;!#!HQK''..v/I/IH0J K!"1IE KA).%!& !>>,,V-G-GI.K L ,,V-G-GF.H IQ))>>R & = =e DP$)LL:K$LE !0077!MM001N1N1PQ""5)C */D GGK(E+g *R !,-?@ P
 %*LL=N$OEP . P !' 4 4UY 4 O	PsI   GKJ'2I?A;K?"J$!K#J$$K'(KKKKc           	          / nU R                    HI  u  p#U(       a,  UR                  SR                  U[        U5      5      5        M8  UR                  U5        MK     SR	                  U5      nU(       a  SU-   $ S$ )N{}={}z; r   r)   )r  r   r;   r   r4   )r#   r  r  r   s       r   r6   MimeParameters.__str__,  sc    ;;KDgnnT<3FGHd#	 '
 6"%sV|-2-r   r   N)
r<   rr   rs   rt   rm   ru   rw   r  r6   rx   r   r   r   r  r    s&    "JOC CJ.r   r  c                   (    \ rS rSrSr\S 5       rSrg)ParameterizedHeaderValuei7  Fc                 f    [        U 5       H!  nUR                  S:X  d  M  UR                  s  $    0 $ )Nr  )reversedrm   r  r   s     r   r  ParameterizedHeaderValue.params=  s0    d^E#44||# $ 	r   r   N)r<   rr   rs   rt   ru   rw   r  rx   r   r   r   r  r  7  s     O r   r  c                   $    \ rS rSrSrSrSrSrSrg)ContentTypeiE  zcontent-typeFtextplainr   N)	r<   rr   rs   rt   rm   rP   maintypesubtyperx   r   r   r   r  r  E  s    JMHGr   r  c                        \ rS rSrSrSrSrSrg)ContentDispositioniL  zcontent-dispositionFNr   )r<   rr   rs   rt   rm   rP   content_dispositionrx   r   r   r   r  r  L  s    &JMr   r  c                        \ rS rSrSrSrSrSrg)ContentTransferEncodingiR  zcontent-transfer-encodingF7bitr   N)r<   rr   rs   rt   rm   rP   r   rx   r   r   r   r  r  R  s    ,JM
Cr   r  c                       \ rS rSrSrSrSrg)HeaderLabeliX  zheader-labelFr   Nre  r   r   r   r  r  X  s    JMr   r  c                   "    \ rS rSrSrSrS rSrg)MsgIDi]  zmsg-idFc                 2    [        U 5      UR                  -   $ r   )r   linesepr^   s     r   r_   
MsgID.folda  s    4y6>>))r   r   N)r<   rr   rs   rt   rm   rP   r_   rx   r   r   r   r  r  ]  s    JM*r   r  c                       \ rS rSrSrSrg)	MessageIDif  z
message-idr   Nr   r   r   r   r  r  f  s    Jr   r  c                       \ rS rSrSrSrg)InvalidMessageIDij  zinvalid-message-idr   Nr   r   r   r   r  r  j  s    %Jr   r  c                       \ rS rSrSrSrg)Headerin  headerr   Nr   r   r   r   r  r  n  r   r   r  c                      ^  \ rS rSrSrSrSrU 4S jrU 4S jrS r	\
S 5       rSU 4S jjrS r\
S	 5       rS
 rSrU =r$ )Terminaliv  Tc                 @   > [         TU ]  X5      nX#l        / Ul        U$ r   )r    __new__rm   r"   )clsr   rm   r#   r&   s       r   r  Terminal.__new__|  s"    ws*$r   c                 h   > SR                  U R                  R                  [        TU ]  5       5      $ r9   r:   r>   s    r   r=   Terminal.__repr__  s&    t~~668H8JKKr   c                 b    [        U R                  R                  S-   U R                  -   5        g )N/)rd   r&   r<   rm   r5   s    r   rg   Terminal.pprint  s"    dnn%%+doo=>r   c                 ,    [        U R                  5      $ r   )listr"   r5   s    r   rF   Terminal.all_defects  s    DLL!!r   c           	         > SR                  UU R                  R                  U R                  [        TU ]  5       U R                  (       d  S5      /$ SR                  U R                  5      5      /$ )Nz{}{}/{}({}){}r)   z {})r;   r&   r<   rm   r    r=   r"   )r#   rc   r&   s     r   rj   Terminal._pp  sg    &&NN##OOGllB  	
 ).T\\(B  	r   c                     g r   r   r5   s    r   pop_trailing_wsTerminal.pop_trailing_ws  rW  r   c                     / $ r   r   r5   s    r   rW   Terminal.comments  s    	r   c                 0    [        U 5      U R                  4$ r   )r   rm   r5   s    r   __getnewargs__Terminal.__getnewargs__  s    4y$//**r   )r"   rm   rq   )r<   rr   rs   rt   rP   rv   ru   r  r=   rg   rw   rF   rj   r  rW   r  rx   ry   rz   s   @r   r  r  v  s_    MOL? " "  + +r   r  c                   *    \ rS rSr\S 5       rS rSrg)WhiteSpaceTerminali  c                     gr   r   r5   s    r   r   WhiteSpaceTerminal.value  r   r   c                     g)NTr   r5   s    r   rL   !WhiteSpaceTerminal.startswith_fws  s    r   r   Nr<   rr   rs   rt   rw   r   rL   rx   r   r   r   r  r    s     r   r  c                   *    \ rS rSr\S 5       rS rSrg)ValueTerminali  c                     U $ r   r   r5   s    r   r   ValueTerminal.value  s    r   c                     g)NFr   r5   s    r   rL   ValueTerminal.startswith_fws  s    r   r   Nr  r   r   r   r  r    s     r   r  c                   *    \ rS rSr\S 5       rS rSrg)EWWhiteSpaceTerminali  c                     gr[  r   r5   s    r   r   EWWhiteSpaceTerminal.value  s    r   c                     gr[  r   r5   s    r   r6   EWWhiteSpaceTerminal.__str__  s    r   r   N)r<   rr   rs   rt   rw   r   r6   rx   r   r   r   r!  r!    s     r   r!  c                       \ rS rSrSrg)_InvalidEwErrori  r   N)r<   rr   rs   rt   rx   r   r   r   r'  r'    s     r   r'  r  ,zlist-separatorFrt  zroute-component-markerz([{}]+)r)   z[^{}]+z[\x00-\x20\x7F]c                    [        U 5      nU(       a/  U R                  R                  [        R                  " U5      5        [
        R                  " U 5      (       a0  U R                  R                  [        R                  " S5      5        g g )Nz*Non-ASCII characters found in header token)_non_printable_finderr"   r   r   NonPrintableDefectr   r  r  )xtextnon_printabless     r   _validate_xtextr.    sf     +51NV66~FGU##V::8: 	; $r   c                 H   U (       d  g[        U S5      tp#/ nSnSn[        [        U5      5       HB  nX'   S:X  a  U(       a  SnSnOSnM  U(       a  SnO
X'   U;   a    OUR                  X'   5        MD     WS-   nSR	                  U5      SR	                  X'S  /U-   5      U4$ )N)r)   r)   Fr  Fr   Tr)   )_wsp_splitterranger  r   r4   )r   endcharsfragment	remaindervcharsescapehad_qpposs           r   _get_ptext_to_endcharsr9    s     (2HFFFS]#=D F]h&hm$ $ Ag776?BGGXd^$4y$@A6IIr   c                 p    U R                  5       n[        U S [        U 5      [        U5      -
   S5      nX!4$ )Nfws)rq  r  r  )r   newvaluer;  s      r   get_fwsr=    s8     ||~H
U#<CJs8}$<=u
EC=r   c                 :   [        5       nU R                  S5      (       d%  [        R                  " SR	                  U 5      5      eU SS  R                  SS5      tp4X0SS  :X  a%  [        R                  " SR	                  U 5      5      eSR                  U5      n[        U5      S:  aJ  US   [        ;   a=  US   [        ;   a0  UR                  S5      S:  a  UR                  SS5      tpdUS-   U-   n[        UR                  5       5      S:  a/  UR                  R                  [        R                  " S	5      5        Xl        SR                  U5      n  [        R                  " SU-   S-   5      u  pxpXl        Xl        UR                  R+                  U
5        U(       a{  US   [,        ;   a   [/        U5      u  pUR                  U5        M4  [1        US5      tp[3        X5      n[5        U5        UR                  U5        SR                  U5      nU(       a  M{  U (       a<  U S   [,        ;  a/  UR                  R                  [        R                  " S5      5        X 4$ ! [         ["        4 a%    [%        S
R	                  UR                  5      5      ef = f)N=?z"expected encoded word but found {}r  z?=r  r)   r   ?zwhitespace inside encoded wordz!encoded word format invalid: '{}'z.missing trailing whitespace after encoded-word)r   
startswithr   HeaderParseErrorr;   r]  r4   r  r   countr"   r   r  r   _ewr  
ValueErrorKeyErrorr'  r   r   rV   WSPr=  r0  r  r.  )r   terminal_typeewr  r4  remstrrestr  r   r   r"   rX   charsvtexts                 r   get_encoded_wordrN  "  sM    
BD!!%%077>@ 	@ABioodA.OC
ABi%%077>@ 	@WWYFFaq	Yq	Y		#!<<a0Dj4
399;!


&44,. 	/FGGIE@'*zz$*t2C'D$t JGJJg
7c>!$-KEIIe)$2e3
		%wwy! $ q$


&44<> 	?9) ! @/66rvv>@ 	@@s   I% %5Jc                 l   [        5       nU (       Gaz  U S   [        ;   a   [        U 5      u  p UR                  U5        M5  SnU R	                  S5      (       a   [        U S5      u  p Sn[        U5      S:  aD  US   R                  S:w  a1  UR                  R                  [        R                  " S5      5        SnU(       a4  [        U5      S	:  a%  US
   R                  S:X  a  [        US   S5      US'   UR                  U5        M  [        U S	5      tpVU(       a,  [        R!                  U5      (       a  U R#                  S5      tpV[%        US5      n['        U5        UR                  U5        SR)                  U5      n U (       a  GMz  U$ ! [         a    Sn N[        R                   a     Nf = f)Nr   Tr?  utextr"  r;  z&missing whitespace before encoded wordFr  r   r)   )r   rG  r=  r   rA  rN  r  rm   r"   r   r  r!  r'  rB  r0  rfc2047_matchersearch	partitionr  r.  r4   )r   r   rX   valid_ewhave_wsr  r4  rM  s           r   get_unstructuredrW  S  s   . )*L
8s?"5>LE&D!!/w? |$q(#B'22e;$,,33F4N4ND5F G"'s<014#B'22nD+?(,e,5R(##E*'q1 ..s33#ood3OCc7+E"	"Q %R A # ! **  s   F F3F32F3c                 T    [        U S5      u  pn[        US5      n[        U5        X4$ )Nz()r  )r9  r  r.  r   r  _s      r   get_qp_ctextr[    s0     -UD9OE!ug.EE<r   c                 T    [        U S5      u  pn[        US5      n[        U5        X4$ )Nr   r  )r9  r  r.  rY  s      r   get_qcontentr]    s0     -UC8OE!%)EE<r   c                     [        U 5      nU(       d%  [        R                  " SR                  U 5      5      eUR	                  5       nU [        U5      S  n [        US5      n[        U5        X 4$ )Nzexpected atext but found '{}'atext)_non_atom_end_matcherr   rB  r;   r   r  r  r.  )r   mr_  s      r   	get_atextrb    si     	e$A%%+2259; 	;GGIE#e*+E%)EE<r   c                    U (       a	  U S   S:w  a%  [         R                  " SR                  U 5      5      e[        5       nU SS  n U (       a'  U S   S:X  a  [	        U 5      u  p UR                  U5        U (       a  U S   S:w  a  U S   [        ;   a  [        U 5      u  p OU S S S:X  a  Sn [        U 5      u  p UR                  R                  [         R                  " S5      5        S	nU(       aG  [        U5      S:  a8  US
   R                  S:X  a%  US   R                  S:X  a  [        US
   S5      US
'   O[	        U 5      u  p UR                  U5        U (       a  U S   S:w  a  M  U (       d2  UR                  R                  [         R                  " S5      5        X4$ XSS  4$ ! [         R                   a    [	        U 5      u  p  Nf = f)Nr   r   zexpected '"' but found '{}'r  r  r?  Fz!encoded word inside quoted stringTr"  r;  rQ  r   z"end of header inside quoted string)r   rB  r;   r   r]  r   rG  r=  rN  r"   r  r  rm   r!  )r   bare_quoted_stringrX   rU  s       r   get_bare_quoted_stringre    s    E!HO%%*11%8: 	:)+!"IEqS#E*!!%(
E!HO8s?"5>LE52AY$H3/6"**11&2L2L739 :
 C 23a7&r*55>*2.99^K-A*2..7&r* (.LE!!%(+ E!HO, ""))&*D*D0+2 	3!((QRy((! ** 3+E2u3s   *>F& &!G
	G
c                    U (       a.  U S   S:w  a%  [         R                  " SR                  U 5      5      e[        5       nU SS  n U (       ak  U S   S:w  ab  U S   [        ;   a  [        U 5      u  p O$U S   S:X  a  [        U 5      u  p O[        U 5      u  p UR                  U5        U (       a  U S   S:w  a  Mb  U (       d2  UR                  R                  [         R                  " S5      5        X4$ XSS  4$ )Nr   r   zexpected '(' but found '{}'r  r   zend of header inside comment)r   rB  r;   r   rG  r=  get_commentr[  r   r"   r  )r   r   rX   s      r   rg  rg    s     qS%%)0079 	9iG!"IE
E!HO8s?"5>LE51X_&u-LE5'.LEu E!HO v99* , 	-~!"Ir   c                     [        5       nU (       a\  U S   [        ;   aO  U S   [        ;   a  [        U 5      u  p O[	        U 5      u  p UR                  U5        U (       a  U S   [        ;   a  MO  X4$ rK   )r   CFWS_LEADERrG  r=  rg  r   )r   r   rX   s      r   get_cfwsrj  
  sc     :D
E!H+8s?"5>LE5&u-LEE E!H+ ;r   c                     [        5       nU (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        [	        U 5      u  p UR                  U5        U (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        X4$ rK   )r   ri  rj  r   re  )r   quoted_stringrX   s      r   get_quoted_stringrm    s|     !NMq[(U#)%0LEq[(U#r   c                 *   [        5       nU (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        U (       a2  U S   [        ;   a%  [
        R                  " SR                  U 5      5      eU R                  S5      (       a   [        U 5      u  p O[        U 5      u  p UR                  U5        U (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        X4$ ! [
        R                   a    [        U 5      u  p  Nif = f)Nr   zexpected atom but found '{}'r?  )r   ri  rj  r   	ATOM_ENDSr   rB  r;   rA  rN  rb  )r   r   rX   s      r   get_atomrp  )  s    
 6Dq[(EqY&%%*11%8: 	:	,+E2LE5 !'KKq[(E; && 	, %U+LE5	,s   C. .!DDc                    [        5       nU (       a  U S   [        ;   a%  [        R                  " SR	                  U 5      5      eU (       ak  U S   [        ;  a^  [        U 5      u  p UR                  U5        U (       a#  U S   S:X  a  UR                  [        5        U SS  n U (       a  U S   [        ;  a  M^  US   [        L a(  [        R                  " SR	                  SU -   5      5      eX4$ )Nr   z8expected atom at a start of dot-atom-text but found '{}'r	   r  r"  z4expected atom at end of dot-atom-text but found '{}')rd  ro  r   rB  r;   rb  r   r  )r   dot_atom_textrX   s      r   get_dot_atom_textrs  D  s      MME!H	)%% '++16%=: 	:
E!HI- 'U#U1X_  %!"IE E!HI- RC%% '#VCI.0 	0r   c                    [        5       nU S   [        ;   a  [        U 5      u  p UR                  U5        U R	                  S5      (       a   [        U 5      u  p O[        U 5      u  p UR                  U5        U (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        X4$ ! [        R                   a    [        U 5      u  p  Nif = f)Nr   r?  )	ra  ri  rj  r   rA  rN  r   rB  rs  )r   dot_atomrX   s      r   get_dot_atomrv  W  s     yHQx;	4+E2LE5 )/OOEq[(? && 	4 -U3LE5	4s   B. .!CCc                 :   U S   [         ;   a  [        U 5      u  pOS nU (       d  [        R                  " S5      eU S   S:X  a  [	        U 5      u  p O?U S   [
        ;   a%  [        R                  " SR                  U 5      5      e[        U 5      u  p Ub  U/US S& X 4$ )Nr   z5Expected 'atom' or 'quoted-string' but found nothing.r   z1Expected 'atom' or 'quoted-string' but found '{}')ri  rj  r   rB  rm  SPECIALSr;   rp  )r   leaderrX   s      r   get_wordrz  p  s      Qx; %%CE 	EQx}(/u	qX	%% '77=ve}F 	F  Hbq	<r   c                    [        5       n [        U 5      u  p UR                  U5        U (       a  U S   [        ;  a  U S   S:X  aJ  UR                  [        5        UR
                  R                  [        R                  " S5      5        U SS  n O [        U 5      u  p UR                  U5        U (       a  U S   [        ;  a  M  X4$ ! [        R                   a2    UR
                  R                  [        R                  " S5      5         Nf = f! [        R                   aM    U S   [        ;   a>  [        U 5      u  p UR
                  R                  [        R                  " S5      5         Ne f = f)Nzphrase does not start with wordr   r	   zperiod in 'phrase'r  zcomment found without atom)r   rz  r   r   rB  r"   r  PHRASE_ENDSr  ObsoleteHeaderDefectri  rj  )r   r   rX   s      r   
get_phraser~    s@    XF0e E!HK/8S=MM#NN!!&"="=$#& '!"IE' MM% ! E!HK/" =) "" 0f88-/ 	00 ** 8{*#+E?LENN))&*E*E4+6 7 s%   C	 D 	ADDAE31E3c                    [        5       nS nU (       a  U S   [        ;   a  [        U 5      u  p U (       d%  [        R                  " SR                  U 5      5      e [        U 5      u  p0Ub  U/US S& UR                  U5        U (       a  U S   S:X  d  U S   [        ;  a  [        [        U5      U -   5      u  p@UR                  S:X  a0  UR                  R                  [        R                  " S5      5        O/UR                  R                  [        R                   " S5      5        XAS'    UR"                  R%                  S5        X4$ ! [        R                   aO     [        U 5      u  p0 GN! [        R                   a&    U S   S:w  a  U S   [        ;   a  e [        5       n  GN@f = ff = f! [&         a4    UR                  R                  [        R(                  " S5      5         X4$ f = f)	Nr   z"expected local-part but found '{}'r   invalid-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  ri  rj  r   rB  r;   rv  rz  r|  r   r   get_obs_local_partr   rm   r"   r  r}  r   encoder  NonASCIILocalPartDefect)r   r$  ry  rX   obs_local_parts        r   get_local_partr    s    JFq[( %%077>@ 	@ #E* Hbq	e%(D.E!HK$? 23z?U3J K$$(@@%%f&@&@N'P Q %%f&A&A>'@ A&1>( 1 ""  	 #E?LE5&& 	 Qx4E!H$;KE	  *  >!!&"@"@;#= 	>>s<   E
 ,F0 
F-E//5F)$F-(F))F-09G.-G.c                    [        5       nSnU (       Ga`  U S   S:X  d  U S   [        ;  GaI  U S   S:X  aT  U(       a/  UR                  R                  [        R
                  " S5      5        UR                  [        5        SnU SS  n M|  U S   S:X  aV  UR                  [        U S   S5      5        U SS  n UR                  R                  [        R
                  " S	5      5        SnM  U(       aB  US
   R                  S:w  a/  UR                  R                  [        R
                  " S5      5         [        U 5      u  p0SnUR                  U5        U (       a  U S   S:X  a  GM9  U S   [        ;  a  GMI  U(       d%  [        R                  " SR                  U 5      5      eUS   R                  S:X  d5  US   R                  S:X  aQ  [        U5      S:  aB  US   R                  S:X  a/  UR                  R                  [        R
                  " S5      5        US
   R                  S:X  d5  US
   R                  S:X  aQ  [        U5      S:  aB  US   R                  S:X  a/  UR                  R                  [        R
                  " S5      5        UR                  (       a  SUl        X4$ ! [        R                   a    U S   [        ;  a  e [        U 5      u  p0 GNf = f)NFr   r   r	   zinvalid repeated '.'Tr  misplaced-specialz/'\' character outside of quoted-string/ccontentr"  r  zmissing '.' between wordsz&expected obs-local-part but found '{}'r   z!Invalid leading '.' in local partrQ  z"Invalid trailing '.' in local partr  )r{  r|  r"   r   r   r  r  r  rm   rz  rB  ri  rj  r;   r  )r   r  last_non_ws_was_dotrX   s       r   r  r    s    "^N
U1Xt^uQx{'B8s?"&&--f.H.H*/, -!!#&"&!"IE1Xt^!!-a0C#E F!"IE""))&*D*DB+D E"'nR0;;uD""))&*D*D++- .	+#E?LE"'
 	e$7 U1Xt^uQx{'B8 %%4;;EBD 	Dq$$-1((&0!#1((%/%%f&@&@/'1 	2r%%.2))61!#2))50%%f&@&@0'2 	3$<!  - && 	+Qx{*#E?LE5	+s   2J* */KKc                     [        U S5      u  pn[        US5      nU(       a/  UR                  R                  [        R
                  " S5      5        [        U5        X4$ )Nz[]r  z(quoted printable found in domain-literal)r9  r  r"   r   r   r}  r.  )r   r  r7  s      r   	get_dtextr    sV     2%>E&%)EV8868 	9E<r   c                     U (       a  gUR                   R                  [        R                  " S5      5        UR                  [	        SS5      5        g)NFz"end of input inside domain-literal]domain-literal-endT)r"   r   r   r  r  )r   domain_literals     r   _check_for_early_dl_endr  '  sE    !!&"<"<,#. /--ABCr   c                    [        5       nU S   [        ;   a  [        U 5      u  p UR                  U5        U (       d  [        R
                  " S5      eU S   S:w  a%  [        R
                  " SR                  U 5      5      eU SS  n UR                  [        SS5      5        [        X5      (       a  X4$ U S   [        ;   a  [        U 5      u  p UR                  U5        [        U 5      u  p UR                  U5        [        X5      (       a  X4$ U S   [        ;   a  [        U 5      u  p UR                  U5        [        X5      (       a  X4$ U S   S:w  a%  [        R
                  " SR                  U 5      5      eUR                  [        SS	5      5        U SS  n U (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        X4$ )
Nr   zexpected domain-literal[z6expected '[' at start of domain-literal but found '{}'r  zdomain-literal-startr  z4expected ']' at end of domain-literal but found '{}'r  )r  ri  rj  r   r   rB  r;   r  r  rG  r=  r  )r   r  rX   s      r   get_domain_literalr  /  s    #_NQx;e$%%&?@@Qx3%% '!!'0 	0!"IE--CDEu55$$Qx3u~e$U#LE% u55$$Qx3u~e$u55$$Qx3%% '!!'0 	0--ABC!"IEq[(e$  r   c                 p   [        5       nS nU (       a  U S   [        ;   a  [        U 5      u  p U (       d%  [        R                  " SR                  U 5      5      eU S   S:X  a*  [        U 5      u  p0Ub  U/US S& UR                  U5        X4$  [        U 5      u  p0U (       a  U S   S:X  a  [        R                  " S5      eUb  U/US S& UR                  U5        U (       a  U S   S:X  a  UR                  R                  [        R                  " S5      5        US   R                  S:X  a  US   US S & U (       aQ  U S   S:X  aH  UR                  [        5        [        U S	S  5      u  p0UR                  U5        U (       a  U S   S:X  a  MH  X4$ ! [        R                   a    [        U 5      u  p0 GNf = f)
Nr   zexpected domain but found '{}'r  rt  zInvalid Domainr	   z(domain is not a dot-atom (contains CFWS)rb  r  )rY  ri  rj  r   rB  r;   r  r   rv  rp  r"   r}  rm   r  )r   r(  ry  rX   s       r   
get_domainr  V  s   
 XFFq[( %%,33E:< 	<Qx3)%0E"1Ie}'#E* qS%%&677Hbq	
MM%qSf9968 	9!9:-q	F1IaCMM##E!"I.LEMM%  aC =! "" 'u's   F !F54F5c                 T   [        5       n[        U 5      u  p UR                  U5        U (       a	  U S   S:w  a2  UR                  R                  [        R
                  " S5      5        X4$ UR                  [        SS5      5        [        U SS  5      u  p UR                  U5        X4$ )Nr   rt  z#addr-spec local part with no domainaddress-at-symbolr  )ri  r  r   r"   r   r  r  r  )r   r/  rX   s      r   get_addr_specr  |  s     
I!%(LEUE!HO  !;!;1"3 	4]3(;<=eABi(LEUr   c                 J   [        5       nU (       a  U S   S:X  d  U S   [        ;   ap  U S   [        ;   a  [        U 5      u  p UR                  U5        O#U S   S:X  a  UR                  [        5        U SS  n U (       a  U S   S:X  a  Ma  U S   [        ;   a  Mp  U (       a	  U S   S:w  a%  [
        R                  " SR                  U 5      5      eUR                  [        5        [        U SS  5      u  p UR                  U5        U (       a  U S   S:X  a  UR                  [        5        U SS  n U (       d  OU S   [        ;   a  [        U 5      u  p UR                  U5        U (       d  OQU S   S:X  a6  UR                  [        5        [        U SS  5      u  p UR                  U5        U (       a  U S   S:X  a  M  U (       d  [
        R                  " S5      eU S   S:w  a%  [
        R                  " SR                  U 5      5      eUR                  [        SS	5      5        XSS  4$ )
Nr   r(  r  rt  z(expected obs-route domain but found '{}'z%end of header while parsing obs-route:z4expected ':' marking end of obs-route but found '{}'zend-of-obs-route-marker)rB  ri  rj  r   ListSeparatorr   rB  r;   RouteComponentMarkerr  r  )r   	obs_routerX   s      r   get_obs_router    s    
I
U1Xs]eAh+&=8{"#E?LEU#1X_]+!"IE U1Xs]eAh+&= E!HO%%6==eDF 	F)*eABi(LEU
E!HcM'ab	8{"#E?LEU#8s?12%eABi0LEU# E!HcM %%&MNNQx3%% (''-ve}6 	6]3(ABCABir   c                    [        5       nU (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        U (       a	  U S   S:w  a%  [        R
                  " SR                  U 5      5      eUR                  [        SS5      5        U SS  n U (       a[  U S   S:X  aR  UR                  [        SS5      5        UR                  R                  [        R                  " S5      5        U SS  n X4$  [        U 5      u  p UR                  U5        U (       a  U S   S:X  a  U SS  n O/UR                  R                  [        R                  " S5      5        UR                  [        SS5      5        U (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        X4$ ! [        R
                   a     [        U 5      u  p UR                  R                  [        R                  " S	5      5        O=! [        R
                   a&    [        R
                  " S
R                  U 5      5      ef = fUR                  U5        [        U 5      u  p  GNVf = f)Nr   <z"expected angle-addr but found '{}'zangle-addr-startr  >zangle-addr-endznull 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)r3  ri  rj  r   r   rB  r;   r  r"   r  r  r  r}  )r   
angle_addrrX   s      r   get_angle_addrr    s(   
 Jq[(% E!HO%%077>@ 	@mC);<=!"IE qS--=>?!!&"<"<*#, 	-ab	  ,$U+ eqSab	!!&"<"<0#2 	3mC)9:;q[(% ) "" 	,	P(/LE%%f&A&A<'> ?&& 	P))@GGNP P	P 	% $U+u	,s*   5F( (I=<G:9I::H44!IIc                     [        5       n[        U 5      u  p UR                  US S  5        UR                  S S  Ul        X4$ r   )r}  r~  rV   r"   )r   r   rX   s      r   get_display_namer    sC     =Le$LEa! ==+Lr   c                    [        5       nS nU (       d%  [        R                  " SR                  U 5      5      eU S   [        ;   a9  [        U 5      u  p U (       d%  [        R                  " SR                  U5      5      eU S   S:w  a  U S   [        ;   a%  [        R                  " SR                  U 5      5      e[        U 5      u  p0U (       d%  [        R                  " SR                  U5      5      eUb*  [        US   [        5      (       a
  U/US   S S& OU/US S& S nUR                  U5        [        U 5      u  p0Ub  U/US S& UR                  U5        X4$ )Nz!expected name-addr but found '{}'r   r  )r  r   rB  r;   ri  rj  r|  r  r  r   r   r  )r   	name_addrry  rX   s       r   get_name_addrr    s[    
IF%%/66u=? 	?Qx; ))3::6BD DQx38{"))3::5AC C'.))3::5AC C%(I.. &xa!#Hbq	F!%(LEHbq	Ur   c                 t   [        5       n [        U 5      u  p [        S UR                   5       5      (       a  SUl        UR                  U5        X4$ ! [        R                   aN     [	        U 5      u  p  N`! [        R                   a&    [        R                  " SR                  U 5      5      ef = ff = f)Nzexpected mailbox but found '{}'c              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7fr   )r  r   r  r,   s     r   r/   get_mailbox.<locals>.<genexpr>'  s'      3 11 a3344 1   ')r   )
rF  r  r   rB  r  r;   anyrF   rm   r   )r   r   rX   s      r   get_mailboxr    s     iGA$U+  3 % 1 13 3 3.NN5> "" A	A(/LE5&& 	A))188?A A	AAs   A B7*A99:B33B7c                     [        5       nU (       aj  U S   U;  aa  U S   [        ;   a$  UR                  [        U S   S5      5        U SS  n O[	        U 5      u  p0UR                  U5        U (       a  U S   U;  a  Ma  X 4$ )Nr   r  r  )rT  r|  r   r  r~  )r   r2  invalid_mailboxrX   s       r   get_invalid_mailboxr  -  s     %&O
E!HH,8{"""=q1D$F G!"IE%e,LE""5) E!HH, !!r   c                    [        5       nU (       a  U S   S:w  a   [        U 5      u  p UR                  U5        U (       ac  U S   S;  aZ  US   nSUl        [        U S5      u  p UR                  U5        UR                  R                  [        R                  " S5      5        U (       a#  U S   S:X  a  UR                  [        5        U S	S  n U (       a  U S   S:w  a  M  X4$ ! [        R                   Ga_    S nU S   [
        ;   a  [        U 5      u  p0U (       a	  U S   S;   aC  UR                  U5        UR                  R                  [        R                  " S5      5         GN-[        U S5      u  p Ub  U/US S& UR                  U5        UR                  R                  [        R                  " S5      5         GNU S   S:X  a2  UR                  R                  [        R                  " S5      5         GN[        U S5      u  p Ub  U/US S& UR                  U5        UR                  R                  [        R                  " S5      5         GNf = f)
Nr   ;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listr(  r"  r   r  )r   r  r   r   rB  ri  rj  r"   r}  r  r  rm   rV   r  )r   mailbox_listrX   ry  r   s        r   get_mailbox_listr  ?  s(    =L
E!HO	8&u-LE&4 U1XT) #2&G!2G.ud;LENN5!  ''(B(B1)3 4U1X_.!"IEQ E!HOR K && 	8FQx;& (aD 0 ''/ ((//0K0K719 : $7ud#CLE)%+Hbq	 ''. ((//0J0J91; <qS$$++F,G,G3-5 6  35$?%!'E"1I##E*$$++F,F,F5-7 8/	8s&   C# #BI'AI8I<AIIc                    [        5       nU (       d2  UR                  R                  [        R                  " S5      5        X4$ S nU (       a  U S   [
        ;   at  [        U 5      u  p U (       dC  UR                  R                  [        R                  " S5      5        UR                  U5        X4$ U S   S:X  a  UR                  U5        X4$ [        U 5      u  p0[        UR                  5      S:X  aW  Ub  UR                  U5        UR                  U5        UR                  R                  [        R                  " S5      5        X4$ Ub  U/US S& UR                  U5        X4$ )Nzend of header before group-listr   zend of header in group-listr  zgroup-list with empty entries)r  r"   r   r   r  ri  rj  r  r  r   rV   r}  )r   
group_listry  rX   s       r   get_group_listr  x  sS   
 J!!&"<"<-#/ 	0  Fq[(  %%f&@&@-'/ 0f%$$8s?f%$$#E*LE
5"f%% !!&"="=+#- 	.  Hbq	er   c                    [        5       n[        U 5      u  p U (       a	  U S   S:w  a%  [        R                  " SR	                  U 5      5      eUR                  U5        UR                  [        SS5      5        U SS  n U (       a*  U S   S:X  a!  UR                  [        SS5      5        XSS  4$ [        U 5      u  p UR                  U5        U (       d0  UR                  R                  [        R                  " S5      5        O.U S   S:w  a%  [        R                  " S	R	                  U 5      5      eUR                  [        SS5      5        U SS  n U (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        X4$ )
Nr   r  z8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorr  r  zgroup-terminatorzend of header in groupz)expected ';' at end of group but found {})r  r  r   rB  r;   r   r  r  r"   r  ri  rj  )r   r   rX   s      r   	get_groupr    sW    GE#E*LEE!HO%% '**0&-9 	9	LL	LLs$CDE!"IEqS]3(:;<ABi!%(LE	LLV77$& 	'	qS%%7>>uEG 	G	LLs$678!"IEq[(U<r   c                 $   [        5       n [        U 5      u  p UR                  U5        X4$ ! [        R                   aN     [	        U 5      u  p  N8! [        R                   a&    [        R                  " SR                  U 5      5      ef = ff = f)Nzexpected address but found '{}')r   r  r   rB  r  r;   r   )r   r   rX   s      r   get_addressr    s    " iGA ' NN5> "" A	A&u-LE5&& 	A))188?A A	AAs   - BA:BBc                    [        5       nU (       a   [        U 5      u  p UR                  U5        U (       af  U S   S:w  a]  US   S   nSUl        [        U S5      u  p UR                  U5        UR                  R                  [        R                  " S5      5        U (       a  UR                  [        5        U SS  n U (       a  M  X4$ ! [        R                   Gas    S nU S   [
        ;   a  [        U 5      u  p0U (       a	  U S   S:X  aC  UR                  U5        UR                  R                  [        R                  " S5      5         GN[        U S5      u  p Ub  U/US S& UR                  [        U/5      5        UR                  R                  [        R                  " S5      5         GNU S   S:X  a2  UR                  R                  [        R                  " S5      5         GN[        U S5      u  p Ub  U/US S& UR                  [        U/5      5        UR                  R                  [        R                  " S5      5         GN!f = f)	Nr   r(  z"address-list entry with no contentzinvalid address in address-listzempty element in address-listr"  r   r  )r   r  r   r   rB  ri  rj  r"   r}  r  r   r  rm   rV   r  )r   address_listrX   ry  r   s        r   get_address_listr    s    =L
	8&u-LE&4 U1X_ #2&q)G!2G.uc:LENN5!  ''(B(B1)3 4.!"IEQ %R K && 	8FQx;& (aC ''/ ((//0K0K<1> ? $7uc#BLE)%+Hbq	 ''(89 ((//0J0J91; <qS$$++F,G,G3-5 6  35#>%!'E"1I##GUG$45$$++F,F,F5-7 8/	8s&   C BIA!I38I.A!IIc                    [        5       nU (       d%  [        R                  " SR                  U 5      5      eU S   S:w  a%  [        R                  " SR                  U 5      5      eUR	                  [        SS5      5        U SS  n [        U 5      u  p UR	                  U5        U (       a	  U S   S:w  a%  [        R                  " SR                  U 5      5      eUR	                  [        SS	5      5        XSS  4$ )
Nz'expected no-fold-literal but found '{}'r   r  z;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startr  r  z9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)rg  r   rB  r;   r   r  r  )r   no_fold_literalrX   s      r   get_no_fold_literalr    s     $oO%%5<<UCE 	EQx3%%#VE], 	, =.EFG!"IEU#LE5!E!HO%%#VE], 	, =.CDE!"I%%r   c                    [        5       nU (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        U (       a	  U S   S:w  a%  [        R
                  " SR                  U 5      5      eUR                  [        SS5      5        U SS  n  [        U 5      u  p UR                  U5        U (       a	  U S   S:w  ab  UR                  R                  [        R                  " S	5      5        U (       a)  U S   S
:X  a   UR                  [        S
S5      5        U SS  n X4$ UR                  [        SS5      5        U SS  n  [        U 5      u  p UR                  U5        U (       a  U S   S
:X  a  U SS  n O/UR                  R                  [        R                  " S5      5        UR                  [        S
S5      5        U (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        X4$ ! [        R
                   a~     [        U 5      u  p UR                  R                  [        R                  " S5      5         GN! [        R
                   a&    [        R
                  " SR                  U 5      5      ef = ff = f! [        R
                   a     [        U 5      u  p  GN`! [        R
                   a     [        U 5      u  p UR                  R                  [        R                  " S5      5          GN! [        R
                   a&    [        R
                  " SR                  U 5      5      ef = ff = ff = f)Nr   r  zexpected msg-id but found '{}'zmsg-id-startr  zobsolete id-left in msg-idz4expected dot-atom-text or obs-id-left but found '{}'rt  zmsg-id with no id-rightr  z
msg-id-endr  zobsolete id-right in msg-idzFexpected dot-atom-text, no-fold-literal or obs-id-right but found '{}'zmissing trailing '>' on msg-id)r  ri  rj  r   r   rB  r;   r  rs  r  r"   r}  r  r  r  )r   msg_idrX   s      r   
get_msg_idr  %  s    WFq[(eE!HO%%,33E:< 	<
MM-^45!"IE1(/ MM%E!HOf88%' 	(
 U1X_MM-\:;!"IE}
MM-%89:!"IE5(/ MM%qSab	f88,. 	/
MM-\23q[(e=a "" 	1	1-e4LENN!!&"="=,#. /&& 	1))""(&-1 1	1	14 "" 5
	5.u5LE5&& 	55)%0%%f&A&A1'3 4 4** 5--&&,fUm5 55	55sT   G7 J 7J	<I:JJ	M!J11M<LM:M  MMc                    [        5       n [        U 5      u  p UR                  U5        U (       a>  UR                  R                  [        R
                  " SR                  U 5      5      5        U$ ! [        R                   a_  n[        U 5      n[        U5      nUR                  R                  [        R
                  " SR                  U5      5      5         S nAU$ S nAff = f)NzUnexpected {!r}zInvalid msg-id: {!r})
r  r  r   r"   r   r  r;   rB  rW  r  )r   
message_idrX   exs       r   parse_message_idr  j  s     J2!%(%  %%f&@&@!((/'1 2  "" K '%e,
!!&&'='D'DR'HI	K 	K Ks   A1 1C$ACC$c                 0   [        5       nU (       d1  UR                  R                  [        R                  " S5      5        U$ U S   [
        ;   aT  [        U 5      u  p UR                  U5        U (       d/  UR                  R                  [        R                  " S5      5        SnU (       aA  U S   S:w  a8  U S   [
        ;  a+  X0S   -  nU SS  n U (       a  U S   S:w  a  U S   [
        ;  a  M+  UR                  5       (       dZ  UR                  R                  [        R                  " SR                  U5      5      5        UR                  [        US5      5        O+[        U5      Ul        UR                  [        US	5      5        U (       a+  U S   [
        ;   a  [        U 5      u  p UR                  U5        U (       a	  U S   S:w  a`  UR                  b/  UR                  R                  [        R                  " S
5      5        U (       a  UR                  [        U S5      5        U$ UR                  [        SS5      5        U SS  n U (       a+  U S   [
        ;   a  [        U 5      u  p UR                  U5        U (       d>  UR                  b/  UR                  R                  [        R                  " S
5      5        U$ SnU (       a/  U S   [
        ;  a"  X0S   -  nU SS  n U (       a  U S   [
        ;  a  M"  UR                  5       (       dZ  UR                  R                  [        R                  " SR                  U5      5      5        UR                  [        US5      5        O+[        U5      Ul        UR                  [        US	5      5        U (       a+  U S   [
        ;   a  [        U 5      u  p UR                  U5        U (       aJ  UR                  R                  [        R                  " S5      5        UR                  [        U S5      5        U$ )Nz%Missing MIME version number (eg: 1.0)r   z0Expected MIME version number but found only CFWSr)   r	   r  z1Expected MIME major version number but found {!r}r,  digitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)r  r"   r   r   HeaderMissingRequiredValueri  rj  isdigitr  r;   r  intr  r  )r   mime_versionrX   r  s       r   parse_mime_versionr    sj    =L##F$E$E3%5 	6Qx;E"  ''(I(IB)D EF
E!HOa(C(ab	 E!HOa(C >>##F$>$>?FFvN%P 	QM&':; [M&(;<q[(E"E!HO)  ''(B(BB)D EeW =>c+>?@!"IEq[(E")  ''(B(BB)D EF
E!HK/(ab	 E!HK/ >>##F$>$>?FFvN%P 	QM&':; [M&(;<q[(E"##F$>$>5%7 	8M%9:r   c                     [        5       nU (       aj  U S   S:w  aa  U S   [        ;   a$  UR                  [        U S   S5      5        U SS  n O[	        U 5      u  p UR                  U5        U (       a  U S   S:w  a  Ma  X4$ )Nr   r  r  r  )r  r|  r   r  r~  )r   invalid_parameterrX   s      r   get_invalid_parameterr    s     )*
E!HO8{"$$]583F&H I!"IE%e,LE$$U+ E!HO ##r   c                     [        U 5      nU(       d%  [        R                  " SR                  U 5      5      eUR	                  5       nU [        U5      S  n [        US5      n[        U5        X 4$ )Nzexpected ttext but found '{}'ttext)_non_token_end_matcherr   rB  r;   r   r  r  r.  )r   ra  r  s      r   	get_ttextr    si     	u%A%%+2259; 	;GGIE#e*+E%)EE<r   c                    [        5       nU (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        U (       a2  U S   [        ;   a%  [
        R                  " SR                  U 5      5      e[        U 5      u  p UR                  U5        U (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        X4$ Nr   zexpected token but found '{}')	r   ri  rj  r   
TOKEN_ENDSr   rB  r;   r  )r   mtokenrX   s      r   	get_tokenr    s     WFq[(eqZ'%%+2259; 	;U#LE
MM%q[(e=r   c                     [        U 5      nU(       d%  [        R                  " SR                  U 5      5      eUR	                  5       nU [        U5      S  n [        US5      n[        U5        X 4$ )Nz expected attrtext but found {!r}r  )_non_attribute_end_matcherr   rB  r;   r   r  r  r.  r   ra  r  s      r   get_attrtextr  	  si     	#5)A%%.55e<> 	>wwyH#h-.!EXz2HH?r   c                    [        5       nU (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        U (       a2  U S   [        ;   a%  [
        R                  " SR                  U 5      5      e[        U 5      u  p UR                  U5        U (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        X4$ r  )	r  ri  rj  r   ATTRIBUTE_ENDSr   rB  r;   r  r   r  rX   s      r   get_attributer  	  s     Iq[(q^+%%+2259; 	;&LEUq[(r   c                     [        U 5      nU(       d%  [        R                  " SR                  U 5      5      eUR	                  5       nU [        U5      S  n [        US5      n[        U5        X 4$ )Nz)expected extended attrtext but found {!r}extended-attrtext)#_non_extended_attribute_end_matcherr   rB  r;   r   r  r  r.  r  s      r   get_extended_attrtextr  0	  sl     	,E2A%%7>>uEG 	GwwyH#h-.!EX':;HH?r   c                    [        5       nU (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        U (       a2  U S   [        ;   a%  [
        R                  " SR                  U 5      5      e[        U 5      u  p UR                  U5        U (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        X4$ r  )	r  ri  rj  r   EXTENDED_ATTRIBUTE_ENDSr   rB  r;   r  r  s      r   get_extended_attributer  B	  s     Iq[(q44%%+2259; 	;(/LEUq[(r   c                    [        5       nU (       a	  U S   S:w  a%  [        R                  " SR                  U 5      5      eUR	                  [        SS5      5        U SS  n U (       a  U S   R                  5       (       d%  [        R                  " SR                  U 5      5      eSnU (       aE  U S   R                  5       (       a-  X S   -  nU SS  n U (       a  U S   R                  5       (       a  M-  US   S:X  a5  US:w  a/  UR                  R	                  [        R                  " S	5      5        [        U5      Ul
        UR	                  [        US
5      5        X4$ )Nr   *zExpected section but found {}zsection-markerr  z$Expected section number but found {}r)   0z'section number has an invalid leading 0r  )r  r   rB  r;   r   r  r  r"   r  r  r  )r   r  r  s      r   get_sectionr  X	  s7    iGE!HO%%&E&L&L(-'/ 0 	0NN=&678!"IEa((**%% '117@ 	@F
E!H$$&&(ab	 E!H$$&& ayCFcMv999 ; 	<[GNNN=23>r   c                 b   [        5       nU (       d  [        R                  " S5      eS nU S   [        ;   a  [	        U 5      u  p U (       d%  [        R                  " SR                  U5      5      eU S   S:X  a  [        U 5      u  p0O[        U 5      u  p0Ub  U/US S& UR                  U5        X4$ )Nz&Expected value but found end of stringr   z Expected value but found only {}r   )	r  r   rB  ri  rj  r;   rm  r  r   )r   vry  rX   s       r   	get_valuer  v	  s     	A%%&NOOFQx; %% '006v@ 	@Qx3(/u-e4Hbq	HHUO8Or   c                 
   [        5       n[        U 5      u  p UR                  U5        U (       a	  U S   S:X  aA  UR                  R                  [        R
                  " SR                  U5      5      5        X4$ U S   S:X  as   [        U 5      u  p SUl        UR                  U5        U (       d  [        R                  " S5      eU S   S:X  a'  UR                  [        SS5      5        U SS  n SUl        U S   S	:w  a  [        R                  " S
5      eUR                  [        S	S5      5        U SS  n U (       a+  U S   [        ;   a  [        U 5      u  p UR                  U5        S nUnUR                  (       Ga$  U (       Ga  U S   S:X  Ga  [        U 5      u  pSUR                  nSnUR                   S:X  a3  U(       a  US   S:X  a  SnO7[#        U5      u  p(U(       a  US   S:X  a  SnO [%        U5      u  p(U(       d  SnU(       ae  UR                  R                  [        R
                  " S5      5        UR                  U5        U H  n	U	R&                  S:X  d  M  / U	S S & U	n  O   Un O1S nUR                  R                  [        R
                  " S5      5        U (       a  U S   S:X  a  S nO[)        U 5      u  p UR                  (       a  UR                   S:  aX  U (       a	  U S   S:w  a  UR                  U5        Ub  Un X4$ UR                  R                  [        R
                  " S5      5        U (       dH  UR                  R                  [        R
                  " S5      5        UR                  U5        Uc  X4$ GO1UbL  U H  n	U	R&                  S:X  d  M    O   W	R&                  S:H    UR                  U	5        U	R*                  Ul        U S   S:w  a%  [        R                  " SR                  U 5      5      eUR                  [        SS5      5        U SS  n U (       am  U S   S:w  ad  [#        U 5      u  p UR                  U5        UR*                  Ul        U (       a	  U S   S:w  a%  [        R                  " SR                  U 5      5      eUR                  [        SS5      5        U SS  n Ubq  [1        5       n
U (       a]  U S   [2        ;   a  [5        U 5      u  p O(U S   S:X  a  [        SS5      nU SS  n O[7        U 5      u  p U
R                  U5        U (       a  M]  U
nO[)        U 5      u  p UR                  U5        Ub  Un X4$ ! [        R                   a     GNf = f!    GNp= f)Nr   r  z)Parameter contains name ({}) but no valuer  TzIncomplete parameterzextended-parameter-markerr  =zParameter 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 delimitersr  r  z=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}DQUOTE)r  r  r   r"   r   r  r;   r  r  rB  r  r  ri  rj  rm  r   r  r  r  rm   r  r   r   r   r  rG  r=  r]  )r   r  rX   r4  appendtoqstringinner_value
semi_validrK  tr  s              r   get_parameterr  	  s    KE 'LE	LLE!HOV77 9%%+VE]4 	5|Qx3	&u-LE"EOLL ))*@AA8s?LLs,GHI!"IE!ENQx3%%&EFF	LLs$9:;!"IEq[(UIH~~~%E!HO /u5,,
1${1~4!
*;7DGsN!%J&3K@ !%JMM  !;!;G"I JLL!<<#77AaD H	 
  EIMM  !;!;:"; < qS '>>U11A5aCOOE"$!<V77DE 	F V7768 	9<  <<#66  LLJ&OOAGGEM8s?)) +FFLfUmU Uc+>?@ab	U1X_'.LEOOE"EJE!HO-- /<<BF5MK Kc+>?@ab	GQx3&u~uqS%c84ab	+E2HHUO e  'OOE<i && 		Ds   %U .U/ U,+U,/U4c                    [        5       nU (       a   [        U 5      u  p UR                  U5        U (       aq  U S   S:w  ah  US   nSUl        [        U 5      u  p UR                  U5        UR                  R                  [        R                  " SR                  U5      5      5        U (       a   UR                  [        SS5      5        U S	S  n U (       a  M  U$ ! [        R                   a    S nU S   [
        ;   a  [        U 5      u  p0U (       d  UR                  U5        Us $ U S   S:X  aF  Ub  UR                  U5        UR                  R                  [        R                  " S5      5         GNE[        U 5      u  p U(       a  U/US S& UR                  U5        UR                  R                  [        R                  " SR                  U5      5      5         GNf = f)
Nr   r  zparameter entry with no contentzinvalid parameter {!r}r"  r  z)parameter with invalid trailing text {!r}r  r  )r  r  r   r   rB  ri  rj  r"   r  r  r;   rm   rV   r  )r   mime_parametersrX   ry  r  s        r   parse_mime_parametersr   
  s    %&O
	=(/LE""5)( U1X_ $B'E2E07LELL##**6+E+E;BB5I,K L""=6K#LM!"IEG %H A && 	=FQx;& (&&v.&&Qx3%#**62''..v/I/I507 8  5U;!'E"1I&&u-''..v/I/I,33E:0< =#	=s    C A
G#'AG#6A)G#"G#c                 f   U(       aj  US   S:w  aa  US   [         ;   a$  U R                  [        US   S5      5        USS  nO[        U5      u  p!U R                  U5        U(       a  US   S:w  a  Ma  U(       d  g U R                  [        SS5      5        U R                  [	        USS  5      5        g )Nr   r  r  r  r  )r|  r   r  r~  r   )	tokenlistr   rX   s      r   _find_mime_parametersr  M
  s     E!HO8{"]585HIJ!"IE%e,LEU# E!HO ]3(=>?*5956r   c                 f   [        5       nU (       d1  UR                  R                  [        R                  " S5      5        U$  [        U 5      u  p UR                  U5        U (       a	  U S   S:w  aC  UR                  R                  [        R                  " S5      5        U (       a  [        X5        U$ UR                  R                  5       R                  5       Ul        UR                  [        SS5      5        U SS  n  [        U 5      u  p UR                  U5        UR                  R                  5       R                  5       Ul        U (       d  U$ U S   S	:w  aO  UR                  R                  [        R                  " S
R                  U 5      5      5        U?U?[        X5        U$ UR                  [        S	S5      5        UR                  [!        U SS  5      5        U$ ! [        R                   aN    UR                  R                  [        R                  " SR                  U 5      5      5        [        X5        Us $ f = f! [        R                   aN    UR                  R                  [        R                  " SR                  U 5      5      5        [        X5        Us $ f = f)Nz"Missing content type specificationz(Expected content maintype but found {!r}r   r  zInvalid content typezcontent-type-separatorr  z'Expected content subtype but found {!r}r  z<Only parameters are valid after content type, but found {!r}r  )r  r"   r   r   r  r  rB  r  r;   r  r   r  lowerr  r  r  r   )r   ctyperX   s      r   parse_content_type_headerr  ]
  s<    MEV>>02 	3 ' 
LL E!HOV77"$ 	%!%/[[&&(..0EN	LLs$<=>!"IE ' 
LLKK%%'--/EMQx3V77( 	) NEMe+	LLs$9:;	LL&uQRy12LQ "" V776==eDF 	Ge+	& "" V775<<UCE 	Fe+	s&   G) I )AI
IAJ0/J0c                    [        5       nU (       d1  UR                  R                  [        R                  " S5      5        U$  [        U 5      u  p UR                  U5        UR                  R                  5       R                  5       Ul        U (       d  U$ U S   S:w  aK  UR                  R                  [        R                  " SR                  U 5      5      5        [        X5        U$ UR                  [        SS5      5        UR                  [        U SS  5      5        U$ ! [        R                   aN    UR                  R                  [        R                  " SR                  U 5      5      5        [        X5        Us $ f = f)NzMissing content dispositionz+Expected content disposition but found {!r}r   r  zCOnly parameters are valid after content disposition, but found {!r}r  r  )r  r"   r   r   r  r  rB  r  r;   r  r   r  r  r  r  r   )r   disp_headerrX   s      r    parse_content_disposition_headerr
  
  sW    %&K""6#D#D)$+ 	, ' u&+kk&7&7&9&?&?&AK#Qx3""6#=#=$( 	) 	k1}S*?@A,U12Y78# "" ""6#=#=9@@G$I 	Jk1	s   D& &AFFc                     [        5       nU (       d1  UR                  R                  [        R                  " S5      5        U$  [        U 5      u  p UR                  U5        UR                  R                  5       R                  5       Ul	        U (       d  U$ U (       a  UR                  R                  [        R                  " S5      5        U S   [        ;   a$  UR                  [        U S   S5      5        U SS  n O[        U 5      u  p UR                  U5        U (       a  M  U$ ! [        R                   aA    UR                  R                  [        R                  " SR                  U 5      5      5         Nf = f)Nz!Missing content transfer encodingz1Expected content transfer encoding but found {!r}z*Extra text after content transfer encodingr   r  r  )r  r"   r   r   r  r  r   r  r  r   rB  r  r;   r|  r  r~  )r   
cte_headerrX   s      r   &parse_content_transfer_encoding_headerr  
  sK   
 )*J!!&"C"C/#1 	25 '
 	% **,224

!!&"<"<8#: 	;8{"mE!H6IJK!"IE%e,LEe$ % # "" P!!&"<"<?FFuM#O 	PPs   D( (AE=<E=c                 r    SnU (       a-  U S   (       a#  U S   S   [         ;   a  U S   S   nU S   S S U S'   U$ )Nr)   r"  )rG  )lineswsps     r   _steal_trailing_WSP_if_existsr  
  sD    
CruRy}3Bim"IcrNb	Jr   c          	      	   UR                   =(       d    [        R                  nUR                  (       a  SOSnS/nSnS nS nSnSn	[	        SS5      n
[        U 5      nU(       Ga  UR                  S5      nXL a  US-  nM$  [        U5      nU	(       dE  UR                  S;   a  [        R                  U5      (       + n	O[        R                  U5      (       + n	 UR                  U5        UnUR                  S:X  a  [!        XX#5        M  U	(       Ga$  U(       Gd  UR"                  (       d  Sn	S nUR$                  (       a  UR'                  US9S [)        UR*                  5      *  nUR*                  U;  aJ  [)        U5      U[)        US   5      -
  :  a  [-        U5      nUR/                  U5        US==   U-  ss'   GMc  [1        US5      (       d  [        U5      U-   nSn	GM  UR"                  (       a=  Ub  X:w  a  US
:X  d  US:X  a  US:w  a  S n[3        XX&UR4                  X5      nSnUnSn	GM  S nSn	[)        U5      U[)        US   5      -
  ::  a  US==   U-  ss'   GM  SnUR$                  (       a  [)        U5      S-   U::  a|  [-        U5      nU(       d  UR7                  5       (       aU  UR/                  UU-   5        / nUS    H   nU[8        ;  a    OUR/                  U5        M"     SR;                  U5      nS nGM  [1        US5      (       d  [        U5      nUR                  S:X  aB  [=        SS5      /U Vs/ s H  n[=        [?        U5      S5      PM     sn-   [=        SS5      /-   nUR"                  (       d  US-  nUR/                  U
5        UU-   nGME  UR"                  (       a  U(       d  URA                  SU5        Sn	GMt  [-        U5      nU(       d  UR7                  5       (       a  UR/                  UU-   5        OUS==   U-  ss'   U(       a  GM  UR*                  R;                  U5      UR*                  -   $ ! [         a,    [        S	 UR                   5       5      (       a  S
nOSnSn	 GNf = fs  snf )Nutf-8r  r)   r   Fwrap_as_ew_blockedr  )r  rM  c              3   V   #    U  H  n[        U[        R                  5      v   M!     g 7fr   )r  r   r  r,   s     r   r/   %_refold_parse_tree.<locals>.<genexpr>  s'      .,q a!>!>??,r  unknown-8bitTr  r[   r"  r  r   r   r  )!max_line_lengthsysmaxsizeutf8r  r  r  r   rm   
SPECIALSNL
isdisjointNLSETr  r  r  rF   _fold_mime_parametersrP   ru   r_   r  r  r  r   rn   _fold_as_ewrv   rL   rG  r4   r  r   insert)
parse_treer\   maxlenr  r  leading_whitespacelast_ewlast_charsetr  want_encodingend_ew_not_allowedr  rQ   tstrr   encoded_partnewlinewhitespace_accumulatorcharnewpartsps                        r   r]   r]   
  sV   
 ##2s{{F ++w:HDE GLM!"&:;E
yy|%!#4y"44$.$9$9$$? ? %*$4$4T$: :	!KK!G ??//!$v@!3%% %''#'99F9#;<Qc&..>Q=Q#RL~~\9|,vE"I/FF&CE&JG!LL1b	\1	 
 4**T
U* %## '+!^3!W,J1F"G%d6&*&=&=w\ &("& %  % t9U2Y//"II
    D	A'3E:G$--//
 Wt^,)+&!"ID3*11$7 & &(WW-C%D"tX&&DzH"66
 #301&(& ##4Q#7A&(( #3012 
 %%"a'" 23u$E&8 LLD! M/6d))++LL4( "IIK %N >>u%66o " 	! . ,,. . .( " M	!B(s   Q R2RRc                 j   Ub0  U(       a)  [        [        US   US  U -   5      5      n US   S U US'   OPU S   [        ;   aC  U S   nU SS  n [        US   5      U:X  a  UR	                  [        U5      5        US==   U-  ss'   SnU S   [        ;   a
  U S   nU S S n Uc  [        US   5      OUn	US:X  a  SOUn
[        U
5      S-   nUS-   U:  a  [        R                  " S5      eU (       Ga.  U[        US   5      -
  nX-
  [        U5      -
  nUS::  a  UR	                  S	5        MB  [        U5      S:  a<  [        US   5      S:X  a*  U(       a#  [        R                  " XjS
9nUS==   U-  ss'   SnU S U n[        R                  " XS
9n[        U5      U-
  nUS:  a/  US S n[        R                  " XS
9n[        U5      U-
  nUS:  a  M/  US==   U-  ss'   U [        U5      S  n SnU (       a  UR	                  S	5        [        US   5      n	U (       a  GM.  US==   U-  ss'   U(       a  U	$ S $ )Nr"  r   r  r)   r  r     z3max_line_length is too small to fit an encoded wordr   )r   )
r   rW  rG  r  r   r  r   rB  rD  r  )	to_encoder  r#  r%  rv   r   r$  leading_wsptrailing_wspnew_last_ew	encode_as
chrome_lenremaining_space
text_spaceencoded_wordto_encode_wordexcesss                    r   r   r     s^    1U2Ywx09<=?	"Ihw'b		1	  labM	b	Nf$LL6u=>b	[ 	L} }crN	$+O#eBi.K"j0gI Y!#JQ6!%%AC 	C  3uRy>1$1C8J4KK
?LL u:>c%)n16H::&8LL"I%I!#";J/zz.D\"_4qj ,CR0N::nHL&8F qj 	b	\!	c.123	LLeBi.K? )@ 
"II,;6$6r   c           	      @   U R                    GH  u  pEUS   R                  5       R                  S5      (       d  US==   S-  ss'   UnSn UR                  U5        SnU(       a2  [        R                  R                  US	US
9n	SR                  XFU	5      n
OSR                  U[        U5      5      n
[        US   5      [        U
5      -   S-   U:  a  US   S-   U
-   US'   M  [        U
5      S-   U::  a  UR                  SU
-   5        M  SnUS-   nU(       d  GM  [        U5      [        [        U5      5      -   S-   [        U5      -   nX-S-   ::  a  SnX--
  S-
  =p US U n[        R                  R                  US	US
9n	[        U	5      U::  a  OUS-  nM;  UR                  SR                  XKX5      5        S	nUS-  nX^S  nU(       a  US==   S-  ss'   U(       a  M  GM     g ! [         a*    Sn[
        R                  " U5      (       a  SnSn GNSn GNf = f)Nr"  r  strictFTr  r  r  r)   )safer   z
{}*={}''{}r  r  r   r  r   z''rm  N   z {}*{}*={}{})r  rp  r  r  r  r   r  r  r  r   r;   r   r  r   r   )rQ   r  r#  r  r  r   r   error_handlerencoding_requiredencoded_valuer)  r  extra_chromer7  
splitpointmaxcharspartials                    r   r  r    s:    {{ Ry!**3//"II 		"LL" % "LL..B} / 6M&&tmDD>>$U(;<DuRy>CI%)F2b	C$.E"IY]f$LLt$ ~eTSW%66:S=NNJa'
 $*$7!$;;J, & 2 2"] !3 !<}%1a
  LL..|< =LqLG+&Eb	S 	- eI # " 	" $$$U++( 1!	"s   G))+HHH)rM  )rer  r  stringr   operatorr   emailr   rD  r   r   ru  rG  ri  rx  ro  rv  r|  	TSPECIALSr  	ASPECIALSr  r  r  r  r   r   compileVERBOSE	MULTILINErR  r  r   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r3  rB  rF  rT  rY  ra  rd  rg  ri  r{  r}  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r!  rB  r'  r  r  rP   ru   r  r;   r4   r]  r0  r6  matchr`  findallr*  r  r  r  r.  r9  r=  rN  rW  r[  r]  rb  re  rg  rj  rm  rp  rs  rv  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r
  r  r  r]   r   r  r   r   r   <module>rS     s  L 
 
    '   
%jCHn sN	CH$U#E
"c#h.	_
E
"	S(3s83 	t
@
 **  ZZ",, @, @,FD) D I  Y 9 " 9 I 
) #9 #6	-| 	-! 4C) C&%i %2?) ?%	 %"$I $*"y "6	 DDy D!i !6;Y ;.Y .i ) 
I 
y B9 -!& -!`!	 !HI  ) 	 8%y %
#	 #i I S.Y S.ly * 1 i ) 
*I * &y &Y (+s (+V H - <f-- < Cc#34#  % $S*BC . 

:,,RWWS\:;AA

9#3#3IIbggi !$# $$)E 

#56>> I$4$4IIbggj!"%$ %%*U ZZ	(8(8IIbggn%&)( )). &(jj1A1AIIbgg-./21 '227% $;J@
/bAF" ))V2 $6 &2 D$L%N2!h(%!N$L ) V,\"H*"$6r#J<:4n&,BJ8BH$$&.&.$,<,KZ2h7 6p<^Y7vJ7XI!r   