+
   q            	       `   ^ RI t ^ RIt^ RIt^ RIHt ^ RIHt ^ RIHt	 ^ RIH
t
 ^ RIHt Rt]! ]4      t]]! R4      ,          t]! R	4      t]],          t]]! R
4      ,
          t]]! R4      ,
          t]]! R4      ,          ]! R
4      ,
          t]],          t]]! R4      ,          t]],          t]]! R4      ,
          tRR0t]],          tR tR tR t] P<                  ! R] P>                  ] P@                  ,          4      t! ! R R]"4      t# ! R R]#4      t$ ! R R]#4      t% ! R R]#4      t& ! R R]#4      t' ! R R ]$4      t( ! R! R"]#4      t) ! R# R$]#4      t* ! R% R&]#4      t+ ! R' R(]#4      t, ! R) R*],4      t- ! R+ R,]$4      t. ! R- R.]#4      t/ ! R/ R0]#4      t0 ! R1 R2]#4      t1 ! R3 R4]#4      t2 ! R5 R6]#4      t3 ! R7 R8]#4      t4 ! R9 R:]#4      t5 ! R; R<]#4      t6 ! R= R>]#4      t7 ! R? R@]#4      t8 ! RA RB]#4      t9 ! RC RD]#4      t: ! RE RF]#4      t; ! RG RH]#4      t< ! RI RJ]#4      t= ! RK RL]#4      t> ! RM RN]&4      t? ! RO RP]#4      t@ ! RQ RR]#4      tA ! RS RT]#4      tB ! RU RV]#4      tC ! RW RX]C4      tD ! RY RZ]#4      tE ! R[ R\]#4      tF ! R] R^]#4      tG ! R_ R`]#4      tH ! Ra Rb]#4      tI ! Rc Rd]I4      tJ ! Re Rf]I4      tK ! Rg Rh]#4      tL ! Ri Rj]#4      tM ! Rk Rl]#4      tN ! Rm Rn]N4      tO ! Ro Rp]O4      tP ! Rq Rr]#4      tQ ! Rs Rt]#4      tR ! Ru Rv]S4      tT ! Rw Rx]T4      tU ! Ry Rz]T4      tV ! R{ R|]U4      tW ! R} R~]
P                  4      tY]V! R
R4      tZ]V! RR4      t[R][n\        R][n]        ]V! RR4      t^] P<                  ! RP                  RP                  ]4      4      4      P                  tb] P<                  ! RP                  ] P                  ! RP                  ]4      4      4      4      P                  te] P<                  ! R4      P                  tg] P<                  ! RP                  ] P                  ! RP                  ]4      4      4      4      P                  th] P<                  ! RP                  ] P                  ! RP                  ]4      4      4      4      P                  ti] P<                  ! RP                  ] P                  ! RP                  ]4      4      4      4      P                  tjR tkR tlR tmRR ltnR toR tpR tqR trR tsR ttR tuR tvR twR txR tyR tzR t{R t|R t}R t~R tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR tR# )    N)	hexdigits)
itemgetter)_encoded_words)errors)utilsz 	(z()<>@,:;.\"[].z."(z/?=z*'%%
c                 X    \        V 4      P                  R R4      P                  RR4      # )\\\"z\"strreplacevalues   &1/usr/lib/python3.14/email/_header_value_parser.pymake_quoted_pairsr   d   s&    u:dF+33C??    c                 x    \        V 4      P                  R R4      P                  RR4      P                  RR4      # )r   r   r   \()\)r   r   s   &r   make_parenthesis_pairsr   i   s2    u:dF+	e	WWS%01r   c                 $    \        V 4      pR V R 2# )r   )r   )r   escapeds   & r   quote_stringr    o   s    &Gwiq>r   z
   =\?            # literal =?
   [^?]*          # charset
   \?             # literal ?
   [qQbB]         # literal 'q' or 'b', case insensitive
   \?             # literal ?
  .*?             # encoded word
  \?=             # literal ?=
c                      a a ] tR t^t oRtRtRtV 3R ltR tV 3R lt	]
R 4       t]
R 4       tR t]
R	 4       t]
R
 4       tR tRR ltRR ltRR ltRtVtV ;t# )	TokenListNTc                6   < \         SV `  ! V/ VB  . V n        R # N)super__init__defects)selfargskw	__class__s   &*,r   r&   TokenList.__init__   s    $%"%r   c                2    R P                  R V  4       4      # ) c              3   8   "   T F  p\        V4      x  K  	  R # 5i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   < R P                  V P                  P                  \        SV `  4       4      # z{}({})formatr+   __name__r%   __repr__r(   r+   s   &r   rB   TokenList.__repr__   s+    t~~66"W-/1 	1r   c                2    R P                  R V  4       4      # )r.   c              3   `   "   T F$  qP                   '       g   K  VP                   x  K&  	  R # 5ir$   r   r1   s   & r   r4   "TokenList.value.<locals>.<genexpr>   s     81wqwws   ..r8   r:   s   &r   r   TokenList.value   s    ww8888r   c                <    \        R  V  4       V P                  4      # )c              3   8   "   T F  qP                   x  K  	  R # 5ir$   )all_defectsr1   s   & r   r4   (TokenList.all_defects.<locals>.<genexpr>   s     04aMM4r7   )sumr'   r:   s   &r   rK   TokenList.all_defects   s    040$,,??r   c                0    V ^ ,          P                  4       # r   )startswith_fwsr:   s   &r   rQ   TokenList.startswith_fws   s    Aw%%''r   c                j    \         ;QJ d    R  V  4       F  '       d   K   R# 	  R# ! R  V  4       4      # )c              3   8   "   T F  qP                   x  K  	  R # 5ir$   )as_ew_allowed)r2   parts   & r   r4   *TokenList.as_ew_allowed.<locals>.<genexpr>   s     7$$%%$r7   FT)allr:   s   &r   rU   TokenList.as_ew_allowed   s-     s7$7ss7s7s7$777r   c                R    . pV  F  pVP                  VP                  4       K   	  V# r$   )extendcomments)r(   r\   tokens   &  r   r\   TokenList.comments   s&    EOOENN+ r   c                   \        WR 7      # )policy)_refold_parse_treer(   ra   s   &$r   foldTokenList.fold   s    !$66r   c                <    \        V P                  VR 7      4       R# )indentN)printppstrr(   rh   s   &&r   pprintTokenList.pprint   s    djjj'(r   c                D    R P                  V P                  VR7      4      # )r   rg   )r9   _pprk   s   &&r   rj   TokenList.ppstr   s    yy011r   c              #    "   R P                  VV P                  P                  V P                  4      x  V  FQ  p\	        VR4      '       g   VRP                  V4      ,           x  K1  VP                  VR,           4       Rj  xL
  KS  	  V P                  '       d   RP                  V P                  4      pMRpRP                  W4      x  R#  LM5i)z{}{}/{}(ro   z*    !! invalid element in token list: {!r}z    Nz Defects: {}r.   z{}){})r@   r+   rA   
token_typehasattrro   r'   )r(   rh   r]   extras   &&  r   ro   TokenList._pp   s     NN##OO 	 E5%(( !55;VE]C D !99VF]333  <<<"))$,,7EEnnV++ 4s   BCCC4C)r'   r.   )rA   
__module____qualname____firstlineno__rr   syntactic_breakew_combine_allowedr&   r;   rB   propertyr   rK   rQ   rU   r\   rd   rl   rj   ro   __static_attributes____classdictcell____classcell__r+   __classdict__s   @@r   r"   r"      s     JO-1 9 9 @ @( 8 8  7)2, ,r   r"   c                   @   a  ] tR t^t o ]R 4       t]R 4       tRtV tR# )WhiteSpaceTokenListc                    R #   r:   s   &r   r   WhiteSpaceTokenList.value       r   c                h    V  Uu. uF!  qP                   R 8X  g   K  VP                  NK#  	  up# u upi )comment)rr   contentr(   r3   s   & r   r\   WhiteSpaceTokenList.comments   s)    #'C4a<<+B			4CCC   //r   N)	rA   rw   rx   ry   r|   r   r\   r}   r~   r   s   @r   r   r      s-       D Dr   r   c                       ] tR t^tRtRtR# )UnstructuredTokenListunstructuredr   NrA   rw   rx   ry   rr   r}   r   r   r   r   r      s    Jr   r   c                       ] tR t^tRtRtR# )Phrasephraser   Nr   r   r   r   r   r          Jr   r   c                       ] tR t^tRtRtR# )Wordwordr   Nr   r   r   r   r   r          Jr   r   c                       ] tR t^tRtRtR# )CFWSListcfwsr   Nr   r   r   r   r   r      r   r   r   c                       ] tR t^tRtRtR# )Atomatomr   Nr   r   r   r   r   r      r   r   r   c                       ] tR t^tRtRtRtR# )Tokenr]   Fr   N)rA   rw   rx   ry   rr   encode_as_ewr}   r   r   r   r   r      s    JLr   r   c                   &    ] tR t^tRtRtRtRtRtR# )EncodedWordencoded-wordNr   )	rA   rw   rx   ry   rr   ctecharsetlangr}   r   r   r   r   r      s    J
CGDr   r   c                   T   a  ] tR t^t o Rt]R 4       t]R 4       t]R 4       tRt	V t
R# )QuotedStringquoted-stringc                V    V  F"  pVP                   R 8X  g   K  VP                  u # 	  R# bare-quoted-stringNrr   r   r   s   & r   r   QuotedString.content   s"    A||33ww r   c                    . pV  FK  pVP                   R 8X  d   VP                  \        V4      4       K0  VP                  VP                  4       KM  	  RP	                  V4      # )r   r.   )rr   appendr   r   r9   )r(   resr3   s   &  r   quoted_valueQuotedString.quoted_value   sN    A||33

3q6"

177#	 
 wws|r   c                V    V  F"  pVP                   R 8X  g   K  VP                  u # 	  R# r   r   r(   r]   s   & r   stripped_valueQuotedString.stripped_value  s%    E#77{{" r   r   N)rA   rw   rx   ry   rr   r|   r   r   r   r}   r~   r   s   @r   r   r      sD      J 
   # #r   r   c                   :   a  ] tR tRt o RtR t]R 4       tRtV t	R# )BareQuotedStringi  r   c                D    \        R P                  R V  4       4      4      # )r.   c              3   8   "   T F  p\        V4      x  K  	  R # 5ir$   r0   r1   s   & r   r4   +BareQuotedString.__str__.<locals>.<genexpr>  s     #9DqCFFDr7   )r    r9   r:   s   &r   r;   BareQuotedString.__str__  s    BGG#9D#99::r   c                2    R P                  R V  4       4      # )r.   c              3   8   "   T F  p\        V4      x  K  	  R # 5ir$   r0   r1   s   & r   r4   )BareQuotedString.value.<locals>.<genexpr>  r6   r7   r8   r:   s   &r   r   BareQuotedString.value      ww,t,,,r   r   N)
rA   rw   rx   ry   rr   r;   r|   r   r}   r~   r   s   @r   r   r     s#     %J; - -r   r   c                   P   a  ] tR tRt o RtR tR t]R 4       t]R 4       t	Rt
V tR# )	Commenti  r   c                    R P                  \        R.V  Uu. uF  qP                  V4      NK  	  upR... 4      4      # u upi )r.   r   r   )r9   rM   quoter   s   & r   r;   Comment.__str__  sI    wws E489DqZZ]D9 E  "	# $ 	$9s   ?c                    VP                   R 8X  d   \        V4      # \        V4      P                  RR4      P                  RR4      P                  RR4      # )r   r   r   r   r   r   r   )rr   r   r   )r(   r   s   &&r   r   Comment.quote#  sR    y(u:5z!!$/77"%u..5g"%u/.	.r   c                2    R P                  R V  4       4      # )r.   c              3   8   "   T F  p\        V4      x  K  	  R # 5ir$   r0   r1   s   & r   r4   "Comment.content.<locals>.<genexpr>,  r6   r7   r8   r:   s   &r   r   Comment.content*  r   r   c                    V P                   .# r$   )r   r:   s   &r   r\   Comment.comments.  s    ~r   r   N)rA   rw   rx   ry   rr   r;   r   r|   r   r\   r}   r~   r   s   @r   r   r     s<     J$. - -  r   r   c                   T   a  ] tR tRt o Rt]R 4       t]R 4       t]R 4       tRt	V t
R# )AddressListi2  zaddress-listc                T    V  Uu. uF  qP                   R 8X  g   K  VNK  	  up# u upi )addressrr   r   s   & r   	addressesAddressList.addresses6  %    ;4a<<#:4;;;   %%c                (    \        R  V  4       . 4      # )c              3   ^   "   T F#  qP                   R 8X  g   K  VP                  x  K%  	  R# 5ir   Nrr   	mailboxesr1   s   & r   r4   (AddressList.mailboxes.<locals>.<genexpr><  s&      >!\\9%<  AKK!   --rM   r:   s   &r   r   AddressList.mailboxes:  !     >!>?AC 	Cr   c                (    \        R  V  4       . 4      # )c              3   ^   "   T F#  qP                   R 8X  g   K  VP                  x  K%  	  R# 5ir   rr   all_mailboxesr1   s   & r   r4   ,AddressList.all_mailboxes.<locals>.<genexpr>A  s&      >!\\9%< $AOO!r   r   r:   s   &r   r   AddressList.all_mailboxes?  r   r   r   N)rA   rw   rx   ry   rr   r|   r   r   r   r}   r~   r   s   @r   r   r   2  sH     J< < C C C Cr   r   c                   T   a  ] tR tRt o Rt]R 4       t]R 4       t]R 4       tRt	V t
R# )AddressiE  r   c                \    V ^ ,          P                   R8X  d   V ^ ,          P                  # R# )r   groupNrr   display_namer:   s   &r   r   Address.display_nameI  s)    7(7''' )r   c                    V ^ ,          P                   R8X  d   V ^ ,          .# V ^ ,          P                   R8X  d   . # V ^ ,          P                  # r   mailboxinvalid-mailboxr   r:   s   &r   r   Address.mailboxesN  sH    7*G9!W#44IAw   r   c                    V ^ ,          P                   R8X  d   V ^ ,          .# V ^ ,          P                   R8X  d   V ^ ,          .# V ^ ,          P                  # r   r   r:   s   &r   r   Address.all_mailboxesV  sO    7*G9!W#44G9Aw$$$r   r   N)rA   rw   rx   ry   rr   r|   r   r   r   r}   r~   r   s   @r   r   r   E  sD     J( ( ! ! % %r   r   c                   D   a  ] tR tRt o Rt]R 4       t]R 4       tRtV t	R# )MailboxListi^  mailbox-listc                T    V  Uu. uF  qP                   R 8X  g   K  VNK  	  up# u upi )r   r   r   s   & r   r   MailboxList.mailboxesb  r   r   c                V    V  Uu. uF  pVP                   R9   g   K  VNK  	  up# u upi )r   )r   r   r   r   s   & r   r   MailboxList.all_mailboxesf  s4     ?4a||== 4 ? 	? ?s   &&r   N
rA   rw   rx   ry   rr   r|   r   r   r}   r~   r   s   @r   r   r   ^  s0     J< < ? ?r   r   c                   D   a  ] tR tRt o Rt]R 4       t]R 4       tRtV t	R# )	GroupListil  
group-listc                l    V '       d   V ^ ,          P                   R8w  d   . # V ^ ,          P                  # r   r   r   r:   s   &r   r   GroupList.mailboxesp  s+    tAw))^;IAw   r   c                l    V '       d   V ^ ,          P                   R8w  d   . # V ^ ,          P                  # r  r   r:   s   &r   r   GroupList.all_mailboxesv  s+    tAw))^;IAw$$$r   r   Nr  r   s   @r   r  r  l  s0     J! !
 % %r   r  c                   T   a  ] tR tRt o Rt]R 4       t]R 4       t]R 4       tRt	V t
R# )Groupi}  r   c                \    V ^,          P                   R8w  d   . # V ^,          P                  #    r  r   r:   s   &r   r   Group.mailboxes  s)    7-IAw   r   c                \    V ^,          P                   R8w  d   . # V ^,          P                  # r  r   r:   s   &r   r   Group.all_mailboxes  s)    7-IAw$$$r   c                (    V ^ ,          P                   # rP   )r   r:   s   &r   r   Group.display_name  s    Aw###r   r   N)rA   rw   rx   ry   rr   r|   r   r   r   r}   r~   r   s   @r   r  r  }  sD     J! !
 % %
 $ $r   r  c                   t   a  ] tR tRt o Rt]R 4       t]R 4       t]R 4       t]R 4       t	]R 4       t
RtV tR	# )
NameAddri  	name-addrc                L    \        V 4      ^8X  d   R# V ^ ,          P                  # )   N)lenr   r:   s   &r   r   NameAddr.display_name  s     t9>Aw###r   c                (    V R,          P                   # r  
local_partr:   s   &r   r!  NameAddr.local_part  s    Bx"""r   c                (    V R,          P                   # r  domainr:   s   &r   r%  NameAddr.domain  s    Bxr   c                (    V R,          P                   # r  )router:   s   &r   r(  NameAddr.route  s    Bx~~r   c                (    V R,          P                   # r  	addr_specr:   s   &r   r,  NameAddr.addr_spec  s    Bx!!!r   r   NrA   rw   rx   ry   rr   r|   r   r!  r%  r(  r,  r}   r~   r   s   @r   r  r    sl     J$ $
 # #     " "r   r  c                   d   a  ] tR tRt o Rt]R 4       t]R 4       t]R 4       t]R 4       t	Rt
V tR# )		AngleAddri  z
angle-addrc                V    V  F"  pVP                   R 8X  g   K  VP                  u # 	  R# 	addr-specN)rr   r!  r   s   & r   r!  AngleAddr.local_part  s"    A||{*||# r   c                V    V  F"  pVP                   R 8X  g   K  VP                  u # 	  R# r2  rr   r%  r   s   & r   r%  AngleAddr.domain  s!    A||{*xx r   c                V    V  F"  pVP                   R 8X  g   K  VP                  u # 	  R# )	obs-routeN)rr   domainsr   s   & r   r(  AngleAddr.route  s"    A||{*yy  r   c                    V  F\  pVP                   R 8X  g   K  VP                  '       d   VP                  u # \        VP                  4      VP                  ,           u # 	  R# )r3  z<>)rr   r!  r,  r    r   s   & r   r,  AngleAddr.addr_spec  sH    A||{*<<<;;&'5CC  r   r   N)rA   rw   rx   ry   rr   r|   r!  r%  r(  r,  r}   r~   r   s   @r   r0  r0    sX     J$ $
    
 ! !
  r   r0  c                   4   a  ] tR tRt o Rt]R 4       tRtV tR# )ObsRoutei  r9  c                h    V  Uu. uF!  qP                   R 8X  g   K  VP                  NK#  	  up# u upi r$  r6  r   s   & r   r:  ObsRoute.domains  s)    "&C$Q,,(*B$CCCr   r   N)	rA   rw   rx   ry   rr   r|   r:  r}   r~   r   s   @r   r?  r?    s     JD Dr   r?  c                   t   a  ] tR tRt o Rt]R 4       t]R 4       t]R 4       t]R 4       t	]R 4       t
RtV tR	# )
Mailboxi  r   c                \    V ^ ,          P                   R8X  d   V ^ ,          P                  # R# r   r  Nr   r:   s   &r   r   Mailbox.display_name  s)    7,7''' -r   c                (    V ^ ,          P                   # rP   r   r:   s   &r   r!  Mailbox.local_part      Aw!!!r   c                (    V ^ ,          P                   # rP   r$  r:   s   &r   r%  Mailbox.domain  s    Aw~~r   c                \    V ^ ,          P                   R8X  d   V ^ ,          P                  # R# rE  )rr   r(  r:   s   &r   r(  Mailbox.route  s'    7,7==  -r   c                (    V ^ ,          P                   # rP   r+  r:   s   &r   r,  Mailbox.addr_spec  s    Aw   r   r   Nr.  r   s   @r   rC  rC    sl     J( ( " "   ! ! ! !r   rC  c                   D   a  ] tR tRt o Rt]R 4       t];t;t;t	t
RtV tR# )InvalidMailboxi  r   c                    R # r$   r   r:   s   &r   r   InvalidMailbox.display_name      r   r   Nr.  r   s   @r   rQ  rQ    s2     "J  /;:J::%)r   rQ  c                   D   a a ] tR tRt oRtRt]V 3R l4       tRtVt	V ;t
# )Domaini  r%  Fc                R   < R P                  \        SV `  P                  4       4      # rv   r9   r%   r   splitrC   s   &r   r%  Domain.domain      wwuw}**,--r   r   )rA   rw   rx   ry   rr   rU   r|   r%  r}   r~   r   r   s   @@r   rV  rV    s&     JM. . .r   rV  c                       ] tR tRtRtRtR# )DotAtomi  dot-atomr   Nr   r   r   r   r]  r]    s    Jr   r]  c                       ] tR tRtRtRtRtR# )DotAtomTexti  zdot-atom-textTr   NrA   rw   rx   ry   rr   rU   r}   r   r   r   r`  r`    s     JMr   r`  c                       ] tR tRtRtRtRtR# )NoFoldLiterali  zno-fold-literalFr   Nra  r   r   r   rc  rc    s    "JMr   rc  c                   h   a  ] tR tRt o RtRt]R 4       t]R 4       t]R 4       t	]R 4       t
RtV tR	# )
AddrSpeci  r3  Fc                (    V ^ ,          P                   # rP   r   r:   s   &r   r!  AddrSpec.local_part  rI  r   c                L    \        V 4      ^8  d   R# V R,          P                  # )   Nr  )r  r%  r:   s   &r   r%  AddrSpec.domain  s    t9q=Bxr   c                   \        V 4      ^8  d   V ^ ,          P                  # V ^ ,          P                  P                  4       V ^,          P                  ,           V ^,          P                  P                  4       ,           # )ri  )r  r   rstriplstripr:   s   &r   r   AddrSpec.value%  sU    t9q=7== Aw}}##%d1gmm3DGMM4H4H4JJJr   c                   \        V P                  4      p\        V4      \        V\        ,
          4      8  d   \	        V P                  4      pMV P                  pV P
                  e   VR,           V P
                  ,           # V# )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)rA   rw   rx   ry   rr   rU   r|   r!  r%  r   r,  r}   r~   r   s   @r   re  re    s_     JM" "  
 K K
  r   re  c                       ] tR tRtRtRtRtR# )ObsLocalParti7  zobs-local-partFr   Nra  r   r   r   rw  rw  7  s    !JMr   rw  c                   T   a a ] tR tRt oRtRt]R 4       t]V 3R l4       tRt	Vt
V ;t# )DisplayNamei=  zdisplay-nameFc                |   \        V 4      p\        V4      ^ 8X  d   VP                  # V^ ,          P                  R8X  d   VP	                  ^ 4       MX\        V^ ,          \         4      '       d<   V^ ,          ^ ,          P                  R8X  d   \        V^ ,          R,          4      V^ &   VR,          P                  R8X  d   VP	                  4        VP                  # \        VR,          \         4      '       d8   VR,          R,          P                  R8X  d   \        VR,          RR 4      VR&   VP                  # )r   r   r  NNNr  )r"   r  r   rr   pop
isinstance)r(   r   s   & r   r   DisplayName.display_nameB  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                V  < R pV P                   '       d   RpMV  F  pVP                  R8X  g   K  RpK  	  \        V 4      ^ 8w  d   V'       d   R;r4V ^ ,          P                  R8X  g=   \        V ^ ,          \        4      '       d"   V ^ ,          ^ ,          P                  R8X  d   RpV R,          P                  R8X  g=   \        V R,          \        4      '       d"   V R,          R,          P                  R8X  d   RpV\        V P                  4      ,           V,           # \        SV `   # )FTr   r.   r   r   r  )	r'   rr   r  r}  r"   r    r   r%   r   )r(   r   r3   prepostr+   s   &    r   r   DisplayName.valueU  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   )rA   rw   rx   ry   rr   r{   r|   r   r   r}   r~   r   r   s   @@r   ry  ry  =  s;     J $ ! ! !r   ry  c                   H   a  ] tR tRt o RtRt]R 4       t]R 4       tRt	V t
R# )	LocalPartim  z
local-partFc                ~    V ^ ,          P                   R8X  d   V ^ ,          P                  # V ^ ,          P                  # )r   r   )rr   r   r   r:   s   &r   r   LocalPart.valuer  s2    707'''7== r   c                T   \         .p\         pR pV ^ ,          \         .,            F  pVP                  R8X  d   K  V'       dC   VP                  R8X  d2   V'       d*   VR,          P                  R8X  d   \        VRR 4      VR&   \        V\        4      pV'       dT   VP                  R8X  dC   V'       d;   V^ ,          P                  R8X  d#   VP	                  \        VR,          4      4       MVP	                  V4       VR,          pTpK  	  \        V^R 4      pVP
                  # )Fr   dotNr{  r  )DOTrr   r"   r}  r   r   )r(   r   last
last_is_tltokis_tls   &     r   r!  LocalPart.local_party  s     e
7cU??C~~'s~~64H''61#D"I.BsI.E$//U2sF%%/

9SW-.

3r7DJ # Ab	"yyr   r   N)rA   rw   rx   ry   rr   rU   r|   r   r!  r}   r~   r   s   @r   r  r  m  s5     JM! !  r   r  c                   T   a a ] tR tRt oRtRt]V 3R l4       t]R 4       tRt	Vt
V ;t# )DomainLiterali  zdomain-literalFc                R   < R P                  \        SV `  P                  4       4      # rv   rX  rC   s   &r   r%  DomainLiteral.domain  r[  r   c                V    V  F"  pVP                   R 8X  g   K  VP                  u # 	  R# )ptextNr   r   s   & r   ipDomainLiteral.ip  s!    A||w&ww r   r   )rA   rw   rx   ry   rr   rU   r|   r%  r  r}   r~   r   r   s   @@r   r  r    s:     !JM. .   r   r  c                   "    ] tR tRtRtRtRtRtR# )MIMEVersioni  zmime-versionNr   )rA   rw   rx   ry   rr   majorminorr}   r   r   r   r  r    s    JEEr   r  c                   P   a  ] tR tRt o RtRtRtRt]R 4       t	]R 4       t
RtV tR# )		Parameteri  	parameterFus-asciic                P    V P                   '       d   V ^,          P                  # ^ # )r  )	sectionednumberr:   s   &r   section_numberParameter.section_number  s     "&tAw~~6Q6r   c                   V  F}  pVP                   R 8X  d   VP                  u # VP                   R8X  g   K5  V FB  pVP                   R8X  g   K  V F&  pVP                   R 8X  g   K  VP                  u u u # 	  KD  	  K  	  R# )r   r   r   r.   )rr   r   r   s   & r   param_valueParameter.param_value  sx     E7*+++?2"E''+??%*E$//7:',';'; ; &+ #	  r   r   N)rA   rw   rx   ry   rr   r  extendedr   r|   r  r  r}   r~   r   s   @r   r  r    s?     JIHG7 7
  r   r  c                       ] tR tRtRtRtR# )InvalidParameteri  invalid-parameterr   Nr   r   r   r   r  r    s    $Jr   r  c                   4   a  ] tR tRt o Rt]R 4       tRtV tR# )	Attributei  	attributec                v    V  F2  pVP                   P                  R 4      '       g   K&  VP                  u # 	  R# )attrtextN)rr   endswithr   r   s   & r   r   Attribute.stripped_value  s-    E((44{{" r   r   N	rA   rw   rx   ry   rr   r|   r   r}   r~   r   s   @r   r  r    s     J# #r   r  c                       ] tR tRtRtRtRtR# )Sectioni  sectionNr   )rA   rw   rx   ry   rr   r  r}   r   r   r   r  r    s    JFr   r  c                   4   a  ] tR tRt o Rt]R 4       tRtV tR# )Valuei  r   c                    V ^ ,          pVP                   R8X  d
   V ^,          pVP                   P                  R4      '       d   VP                  # V P                  # )r   r   )r   r  zextended-attribute)rr   r  r   r   r   s   & r   r   Value.stripped_value  sV    Qv%GE$$DF F'''zzr   r   Nr  r   s   @r   r  r    s     J r   r  c                   >   a  ] tR tRt o RtRt]R 4       tR tRt	V t
R# )MimeParametersi  mime-parametersFc              #  ,  "   / pV  F  pVP                   P                  R 4      '       g   K&  V^ ,          P                   R8w  d   K@  V^ ,          P                  P                  4       pW19  d   . W&   W,          P	                  VP
                  V34       K  	  VP                  4        EF	  w  r4\        V\        ^ 4      R7      pV^ ,          ^,          pVP                  pVP                  '       gl   \        V4      ^8  d\   V^,          ^ ,          ^ 8X  dG   V^,          ^,          P                  P	                  \        P                  ! R4      4       VR,          p. p^ pV EF3  w  rW8w  ds   V
P                  '       g2   V
P                  P	                  \        P                  ! R4      4       KO  V
P                  P	                  \        P                  ! R4      4       V^,          pV
P                  pV
P                  '       d~    \         P"                  P%                  V4      p VP'                  VR4      p\,        P.                  ! V4      '       d/   V
P                  P	                  \        P0                  ! 4       4       VP	                  V4       EK6  	  RP5                  V4      pW;3x  EK  	  R#   \(        \*        3 d    TP'                  RR4      p Li ; i  \*         d%    \         P"                  P3                  TR	R
7      p Li ; i5i)r  r  )keyz.duplicate parameter name; duplicate(s) ignored:Nr  Nz+duplicate parameter name; duplicate ignoredz(inconsistent RFC2231 parameter numberingsurrogateescaper  zlatin-1)encodingr.   N)rr   r  r   stripr   r  itemssortedr   r   r  r  r'   r   InvalidHeaderDefectr  urllibparseunquote_to_bytesdecodeLookupErrorUnicodeEncodeErrorr   _has_surrogatesUndecodableBytesDefectunquoter9   )r(   paramsr]   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!"IE 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sV   E?LBL
K"*J9<LA!L9#KLKL",LLLLc           	        . pV P                    FJ  w  r#V'       d-   VP                  R P                  V\        V4      4      4       K9  VP                  V4       KL  	  RP	                  V4      pV'       d
   RV,           # R# ){}={}z; r   r.   )r  r   r@   r    r9   )r(   r  r  r   s   &   r   r;   MimeParameters.__str__3  sc    ;;KDgnnT<3FGHd#	 '
 6"%sV|-2-r   r   N)rA   rw   rx   ry   rr   rz   r|   r  r;   r}   r~   r   s   @r   r  r    s.     "JOC CJ. .r   r  c                   4   a  ] tR tRt o Rt]R 4       tRtV tR# )ParameterizedHeaderValuei>  Fc                h    \        V 4       F"  pVP                  R 8X  g   K  VP                  u # 	  / # )r  )reversedrr   r  r   s   & r   r  ParameterizedHeaderValue.paramsD  s0    d^E#44||# $ 	r   r   N)	rA   rw   rx   ry   rz   r|   r  r}   r~   r   s   @r   r  r  >  s      O r   r  c                   &    ] tR tRtRtRtRtRtRtR# )ContentTypeiL  zcontent-typeFtextplainr   N)	rA   rw   rx   ry   rr   rU   maintypesubtyper}   r   r   r   r  r  L  s    JMHGr   r  c                   "    ] tR tRtRtRtRtRtR# )ContentDispositioniS  zcontent-dispositionFNr   )rA   rw   rx   ry   rr   rU   content_dispositionr}   r   r   r   r  r  S  s    &JMr   r  c                   "    ] tR tRtRtRtRtRtR# )ContentTransferEncodingiY  zcontent-transfer-encodingF7bitr   N)rA   rw   rx   ry   rr   rU   r   r}   r   r   r   r  r  Y  s    ,JM
Cr   r  c                       ] tR tRtRtRtRtR# )HeaderLabeli_  zheader-labelFr   Nra  r   r   r   r  r  _  s    JMr   r  c                   .   a  ] tR tRt o RtRtR tRtV tR# )MsgIDid  msg-idFc                :    \        V 4      VP                  ,           # r$   )r   lineseprc   s   &&r   rd   
MsgID.foldh  s    4y6>>))r   r   N)	rA   rw   rx   ry   rr   rU   rd   r}   r~   r   s   @r   r  r  d  s     JM* *r   r  c                       ] tR tRtRtRtR# )	MessageIDim  z
message-idr   Nr   r   r   r   r  r  m  s    Jr   r  c                       ] tR tRtRtRtR# )InvalidMessageIDiq  zinvalid-message-idr   Nr   r   r   r   r  r  q  s    %Jr   r  c                   4   a  ] tR tRt o Rt]R 4       tRtV tR# )MessageIDListit  zmessage-id-listc                T    V  Uu. uF  qP                   R 8X  g   K  VNK  	  up# u upi )r  r   r   s   & r   message_idsMessageIDList.message_idsw  s%    :4a<<#94:::r   r   N)	rA   rw   rx   ry   rr   r|   r  r}   r~   r   s   @r   r  r  t  s     "J; ;r   r  c                       ] tR tRtRtRtR# )Headeri{  headerr   Nr   r   r   r   r  r  {  r   r   r  c                      a a ] tR tRt oRtRtRtV 3R ltV 3R ltR t	]
R 4       tRV 3R lltR t]
R	 4       tR
 tRtVtV ;t# )Terminali  Tc                @   < \         SV `  W4      pW#n        . Vn        V# r$   )r%   __new__rr   r'   )clsr   rr   r(   r+   s   &&& r   r  Terminal.__new__  s"    ws*$r   c                h   < R P                  V P                  P                  \        SV `  4       4      # r>   r?   rC   s   &r   rB   Terminal.__repr__  s&    t~~668H8JKKr   c                t    \        V P                  P                  R ,           V P                  ,           4       R# )/N)ri   r+   rA   rr   r:   s   &r   rl   Terminal.pprint  s"    dnn%%+doo=>r   c                ,    \        V P                  4      # r$   )listr'   r:   s   &r   rK   Terminal.all_defects  s    DLL!!r   c           	        < R P                  TV P                  P                  V P                  \        SV `  4       V P                  '       g   R4      .# RP                  V P                  4      4      .# )z{}{}/{}({}){}r.   z {})r@   r+   rA   rr   r%   rB   r'   )r(   rh   r+   s   &&r   ro   Terminal._pp  si    &&NN##OOGlllB  	
 ).T\\(B  	r   c                    R # r$   r   r:   s   &r   pop_trailing_wsTerminal.pop_trailing_ws  rT  r   c                    . # r$   r   r:   s   &r   r\   Terminal.comments  s    	r   c                0    \        V 4      V P                  3# r$   )r   rr   r:   s   &r   __getnewargs__Terminal.__getnewargs__  s    4y$//**r   )r'   rr   rv   )rA   rw   rx   ry   rU   r{   rz   r  rB   rl   r|   rK   ro   r  r\   r  r}   r~   r   r   s   @@r   r  r    sa     MOL? " "  + +r   r  c                   6   a  ] tR tRt o ]R 4       tR tRtV tR# )WhiteSpaceTerminali  c                    R # r   r   r:   s   &r   r   WhiteSpaceTerminal.value  r   r   c                6    T ;'       d    V ^ ,          \         9   # rP   )WSPr:   s   &r   rQ   !WhiteSpaceTerminal.startswith_fws  s    &&Q3&r   r   N	rA   rw   rx   ry   r|   r   rQ   r}   r~   r   s   @r   r  r    s!      ' 'r   r  c                   6   a  ] tR tRt o ]R 4       tR tRtV tR# )ValueTerminali  c                    V # r$   r   r:   s   &r   r   ValueTerminal.value  s    r   c                    R # )Fr   r:   s   &r   rQ   ValueTerminal.startswith_fws  s    r   r   Nr  r   s   @r   r  r    s!       r   r  c                   6   a  ] tR tRt o ]R 4       tR tRtV tR# )EWWhiteSpaceTerminali  c                    R # rv   r   r:   s   &r   r   EWWhiteSpaceTerminal.value  s    r   c                    R # rv   r   r:   s   &r   r;   EWWhiteSpaceTerminal.__str__  s    r   r   N)	rA   rw   rx   ry   r|   r   r;   r}   r~   r   s   @r   r%  r%    s!       r   r%  c                       ] tR tRtRtR# )_InvalidEwErrori  r   N)rA   rw   rx   ry   r}   r   r   r   r+  r+    s    r   r+  r  ,zlist-separatorFrp  zroute-component-markerz([{}]+)r.   z[^{}]+z[\x00-\x20\x7F]c                 $   \        V 4      pV'       d0   V P                  P                  \        P                  ! V4      4       \
        P                  ! V 4      '       d2   V P                  P                  \        P                  ! R 4      4       R# R# )z*Non-ASCII characters found in header tokenN)_non_printable_finderr'   r   r   NonPrintableDefectr   r  r  )xtextnon_printabless   & r   _validate_xtextr2    sf     +51NV66~FGU##V::8: 	; $r   c                 |   V '       g   R# \        V ^4      vr#. pRpRp\        \        V4      4       FR  pW',          R8X  d   V'       d   RpRpMRpK!  V'       d   RpMW',          V9   d    M$VP                  W',          4       KT  	  X^,           pR P	                  V4      R P	                  W'R .V,           4      V3# )r.   Fr   TN)r.   r.   F)_wsp_splitterranger  r   r9   )r   endcharsfragment	remaindervcharsescapehad_qpposs   &&      r   _get_ptext_to_endcharsr=    s     (2HFFFS]#=D F]h&hm$ $ Ag776?BGGXd^$4y$@A6IIr   c                 x    V P                  4       p\        V R \        V 4      \        V4      ,
           R4      pW!3# )Nfws)rm  r  r  )r   newvaluer?  s   &  r   get_fwsrA  #  s8     ||~H
U#<CJs8}$<=u
EC=r   c                    \        4       pV P                  R 4      '       g&   \        P                  ! RP	                  V 4      4      hV R,          P                  R^4      vr4W0R,          8X  d&   \        P                  ! RP	                  V 4      4      hRP                  V4      p\        V4      ^8  d^   V^ ,          \        9   dL   V^,          \        9   d:   VP                  R4      ^8  d$   VP                  R^4      vrdVR,           V,           p\        VP                  4       4      ^8  d0   VP                  P                  \        P                  ! R4      4       Wn        RP                  V4      p  \        P                  ! R V,           R,           4      w  rxrYn        Yn        TP                  P+                  T
4       T'       dz   T^ ,          \,        9   d!   \/        T4      w  rTP                  T4       K:  \1        T^4      vr\3        Y4      p\5        T4       TP                  T4       RP                  T4      pK  T '       dB   T ^ ,          \,        9  d0   TP                  P                  \        P                  ! R4      4       Y 3#   \         \"        3 d&    \%        RP	                  TP                  4      4      hi ; i)	=?z"expected encoded word but found {}:r  NNz?=r.   ?zwhitespace inside encoded wordz!encoded word format invalid: '{}'z.missing trailing whitespace after encoded-word)r   
startswithr   HeaderParseErrorr@   rY  r9   r  r   countr'   r   r  r   _ewr  
ValueErrorKeyErrorr+  r   r   r[   r  rA  r4  r  r2  )r   terminal_typeewr  r8  remstrrestr  r   r   r'   r]   charsvtexts   &&            r   get_encoded_wordrQ  /  s@    
BD!!%%077>@ 	@BioodA.OC
Bi%%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   6'J 6Kc                    \        4       pV '       Ed   V ^ ,          \        9   d!   \        V 4      w  r VP                  V4       K;  RpV P	                  R4      '       d    \        V R4      w  r Rp\        V4      ^ 8  dJ   VR	,          P                  R8w  d2   VP                  P                  \        P                  ! R4      4       RpV'       d?   \        V4      ^8  d/   VR
,          P                  R8X  d   \        VR	,          R4      VR	&   VP                  V4       EK  \        V ^4      vrVV'       d.   \        P!                  V4      '       d   V P#                  R4      vrV\%        VR4      p\'        V4       VP                  V4       RP)                  V4      p EK  V#   \         d    Rp L\        P                   d     Li ; i)r   TrC  utextr?  z&missing whitespace before encoded wordFr   r.   r  )r   r  rA  r   rE  rQ  r  rr   r'   r   r  r%  r+  rF  r4  rfc2047_matchersearch	partitionr  r2  r9   )r   r   r]   valid_ewhave_wsr  r8  rP  s   &       r   get_unstructuredrZ  `  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"	"A # ! **  s    F# #G	2G	G	G	c                 T    \        V R 4      w  rp\        VR4      p\        V4       W3# )z()r  )r=  r  r2  r   r  _s   &  r   get_qp_ctextr^    s0     -UD9OE!ug.EE<r   c                 T    \        V R 4      w  rp\        VR4      p\        V4       W3# )r   r  )r=  r  r2  r\  s   &  r   get_qcontentr`    s0     -UC8OE!%)EE<r   c                     \        V 4      pV'       g&   \        P                  ! R P                  V 4      4      hVP	                  4       pV \        V4      R p \        VR4      p\        V4       W 3# )zexpected atext but found '{}'Natext)_non_atom_end_matcherr   rF  r@   r   r  r  r2  )r   mrb  s   &  r   	get_atextre    si     	e$A%%+2259; 	;GGIE#e*+E%)EE<r   c                    V '       d   V ^ ,          R8w  d&   \         P                  ! RP                  V 4      4      h\        4       pV R,          p V '       d   V ^ ,          R8X  d   WR,          3# V '       d   V ^ ,          R8w  d   V ^ ,          \        9   d   \        V 4      w  r MV R,          R8X  d   Rp \        V 4      w  r VP                  P                  \         P                  ! R4      4       RpV'       dW   \        V4      ^8  dG   VR,          P                  R	8X  d/   VR,          P                  R
8X  d   \        VR,          R	4      VR&   M\        V 4      w  r VP                  V4       EK  V '       g3   VP                  P                  \         P                  ! R4      4       W3# WR,          3#   \         P                   d    \        T 4      w  r  Li ; i)r   r   zexpected '"' but found '{}'r{  :Nr  NrC  Fz!encoded word inside quoted stringTr?  r   z"end of header inside quoted stringr  rT  )r   rF  r@   r   r  rA  rQ  r'   r   r  r`  r  rr   r%  )r   bare_quoted_stringr]   rX  s   &   r   get_bare_quoted_stringrh    s    E!HO%%*11%8: 	:)+"IEqS!9,,
E!HO8s?"5>LE52Y$H3/6"**11&2L2L739 :
 C 23a7&r*55>*2.99^K-A*2..7&r* (.LE!!%(""))&*D*D0+2 	3!((Ry((! ** 3+E2u3s   6>F8 8"GGc                 
   V '       d4   V ^ ,          R8w  d&   \         P                  ! RP                  V 4      4      h\        4       pV R,          p V '       dk   V ^ ,          R8w  d]   V ^ ,          \        9   d   \        V 4      w  r M)V ^ ,          R8X  d   \        V 4      w  r M\        V 4      w  r VP                  V4       Kr  V '       g3   VP                  P                  \         P                  ! R4      4       W3# WR,          3# )r   r   zexpected '(' but found '{}'r{  r   zend of header inside comment)r   rF  r@   r   r  rA  get_commentr^  r   r'   r  )r   r   r]   s   &  r   rj  rj    s     qS%%)0079 	9iG"IE
E!HO8s?"5>LE51X_&u-LE5'.LEuv99* , 	-~"Ir   c                     \        4       pV '       dS   V ^ ,          \        9   dA   V ^ ,          \        9   d   \        V 4      w  r M\	        V 4      w  r VP                  V4       KZ  W3# rP   )r   CFWS_LEADERr  rA  rj  r   )r   r   r]   s   &  r   get_cfwsrm    sQ     :D
E!H+8s?"5>LE5&u-LEE;r   c                 8   \        4       pV '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       \	        V 4      w  r VP                  V4       V '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       W3# rP   )r   rl  rm  r   rh  )r   quoted_stringr]   s   &  r   get_quoted_stringrp  #  s|     !NMq[(U#)%0LEq[(U#r   c                 R   \        4       pV '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       V '       d8   V ^ ,          \        9   d&   \
        P                  ! RP                  V 4      4      hV P                  R4      '       d    \        V 4      w  r M\        V 4      w  r VP                  V4       V '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       W3#   \
        P                   d    \        T 4      w  r  Lpi ; i)r   zexpected atom but found '{}'rC  )r   rl  rm  r   	ATOM_ENDSr   rF  r@   rE  rQ  re  )r   r   r]   s   &  r   get_atomrs  5  s    
 6Dq[(EqY&%%*11%8: 	:	,+E2LE5 !'KKq[(E; && 	, %U+LE5	,s   D "D&%D&c                    \        4       pV '       d   V ^ ,          \        9   d&   \        P                  ! RP	                  V 4      4      hV '       dk   V ^ ,          \        9  dY   \        V 4      w  r VP                  V4       V '       g   KB  V ^ ,          R8X  g   KR  VP                  \        4       V R,          p Kr  VR,          \        J d-   \        P                  ! RP	                  RV ,           4      4      hW3# )r   z8expected atom at a start of dot-atom-text but found '{}'r	   r{  z4expected atom at end of dot-atom-text but found '{}'r  )r`  rr  r   rF  r@   re  r   r  )r   dot_atom_textr]   s   &  r   get_dot_atom_textrv  P  s      MME!H	)%% '++16%=: 	:
E!HI- 'U#5U1X_  %"IERC%% '#VCI.0 	0r   c                    \        4       pV ^ ,          \        9   d   \        V 4      w  r VP                  V4       V P	                  R4      '       d    \        V 4      w  r M\        V 4      w  r VP                  V4       V '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       W3#   \        P                   d    \        T 4      w  r  Lpi ; i)r   rC  )	r]  rl  rm  r   rE  rQ  r   rF  rv  )r   dot_atomr]   s   &  r   get_dot_atomry  c  s     yHQx;	4+E2LE5 )/OOEq[(? && 	4 -U3LE5	4s   B: :"CCc                 \   V ^ ,          \         9   d   \        V 4      w  rMRpV '       g   \        P                  ! R4      hV ^ ,          R8X  d   \	        V 4      w  r MDV ^ ,          \
        9   d&   \        P                  ! RP                  V 4      4      h\        V 4      w  r Ve   V.VR&   W 3# )r   Nz5Expected 'atom' or 'quoted-string' but found nothing.r   z1Expected 'atom' or 'quoted-string' but found '{}'Nr   N)rl  rm  r   rF  rp  SPECIALSr@   rs  )r   leaderr]   s   &  r   get_wordr~  |  s      Qx; %%CE 	EQx}(/u	qX	%% '77=ve}F 	F  Hb	<r   c                    \        4       p \        V 4      w  r VP                  V4       V '       Ed]   V ^ ,          \        9  EdJ   V ^ ,          R8X  dP   VP                  \        4       VP
                  P                  \        P                  ! R4      4       V R,          p Ky   \        V 4      w  r V^ ,          P                  R8X  d   V'       d   VR	,          P                  R8X  d   \        VR	,          4      ^8  d|   VR	,          R
,          P                  R8X  d]   VR	,          R	,          P                  R8X  d>   VR	,          R	,          P                  '       g   \        VR	,          R4      VR	,          R	&   TP                  T4       EKe  W3#   \        P                   d4    TP
                  P                  \        P                  ! R 4      4        ELi ; i  \        P                   dS    T ^ ,          \        9   d?   \        T 4      w  r TP
                  P                  \        P                  ! R4      4        Lh i ; i)zphrase does not start with wordr	   zperiod in 'phrase'r{  r   r   r   r?  zcomment found without atomr  rT  )r   r~  r   r   rF  r'   r  PHRASE_ENDSr  ObsoleteHeaderDefectrr   r  r\   r%  rl  rm  )r   r   r]   s   &  r   
get_phraser    s    XF0e %E!HK/8S=MM#NN!!&"="=$#& '"IE'!H''>9r
--7F2J!+r
211^Cr
211V;"2JrN333 &:&*e%LF2JrN MM% == "" 0f88-/ 	00, ** 8{*#+E?LENN))&*E*E4+6 7 s,   F $,G B*G AGGA#IIc                 ,   \        4       pR pV '       d    V ^ ,          \        9   d   \        V 4      w  r V '       g&   \        P                  ! RP                  V 4      4      h \        V 4      w  r0Te   T.TR&   TP                  T4       T '       d   T ^ ,          R8X  g   T ^ ,          \        9  d   \        \        T4      T ,           4      w  r@TP                  R8X  d1   TP                  P                  \        P                  ! R4      4       M/TP                  P                  \        P                   ! R4      4       YA^ &    TP"                  P%                  R4       Y3#   \        P                   d[     \        T 4      w  r0 EL  \        P                   d1    T ^ ,          R8w  d   T ^ ,          \        9   d   h \        4       p  EL]i ; ii ; i  \&         d5    TP                  P                  \        P(                  ! R4      4        Y3# i ; i)	Nz"expected local-part but found '{}'r   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  rl  rm  r   rF  r@   ry  r~  r  r"   r   get_obs_local_partr   rr   r'   r  r  r   encoder  NonASCIILocalPartDefect)r   r!  r}  r]   obs_local_parts   &    r   get_local_partr    s    JFq[( %%077>@ 	@ #E* Hb	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" G "G8FA GGGG:HHc                     \        4       pR pV '       Edh   V ^ ,          R8X  g   V ^ ,          \        9  EdG   V ^ ,          R8X  dZ   V'       d0   VP                  P                  \        P
                  ! R4      4       VP                  \        4       RpV R,          p K  V ^ ,          R8X  d_   VP                  \        V ^ ,          R4      4       V R,          p VP                  P                  \        P
                  ! R4      4       R pK  V'       dH   VR,          P                  R8w  d0   VP                  P                  \        P
                  ! R	4      4        \        V 4      w  r0R pVP                  V4       EKp  V'       g&   \        P                  ! R
P                  V 4      4      hV^ ,          P                  R8X  gA   V^ ,          P                  R8X  dX   \        V4      ^8  dH   V^,          P                  R8X  d0   VP                  P                  \        P
                  ! R4      4       VR,          P                  R8X  gA   VR,          P                  R8X  dX   \        V4      ^8  dH   VR,          P                  R8X  d0   VP                  P                  \        P
                  ! R4      4       VP                  '       d   RVn        W3#   \        P                   d%    T ^ ,          \        9  d   h \        T 4      w  r0 ELi ; i)Fr   r	   zinvalid repeated '.'Tr{  misplaced-specialz/'\' character outside of quoted-string/ccontentr  zmissing '.' between wordsz&expected obs-local-part but found '{}'r   z!Invalid leading '.' in local partz"Invalid trailing '.' in local partr  r  rT  )rw  r  r'   r   r   r  r  r  rr   r~  rF  rl  rm  r@   r  )r   r  last_non_ws_was_dotr]   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$%%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   K 5LLc                     \        V R 4      w  rp\        VR4      pV'       d0   VP                  P                  \        P
                  ! R4      4       \        V4       W3# )z[]r  z(quoted printable found in domain-literal)r=  r  r'   r   r   r  r2  )r   r  r;  s   &  r   	get_dtextr  )  sV     2%>E&%)EV8868 	9E<r   c                     V '       d   R # VP                   P                  \        P                  ! R4      4       VP                  \	        RR4      4       R# )Fz"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                    \        4       pV ^ ,          \        9   d   \        V 4      w  r VP                  V4       V '       g   \        P
                  ! R4      hV ^ ,          R8w  d&   \        P
                  ! RP                  V 4      4      hV R,          p VP                  \        RR4      4       \        W4      '       d   W3# V ^ ,          \        9   d   \        V 4      w  r VP                  V4       \        V 4      w  r VP                  V4       \        W4      '       d   W3# V ^ ,          \        9   d   \        V 4      w  r VP                  V4       \        W4      '       d   W3# V ^ ,          R8w  d&   \        P
                  ! RP                  V 4      4      hVP                  \        RR4      4       V R,          p V '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       W3# )	r   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  rl  rm  r   r   rF  r@   r  r  r  rA  r  )r   r  r]   s   &  r   get_domain_literalr  E  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                    \        4       pR pV '       d    V ^ ,          \        9   d   \        V 4      w  r V '       g&   \        P                  ! RP                  V 4      4      hV ^ ,          R8X  d,   \        V 4      w  r0Ve   V.VR&   VP                  V4       W3#  \        V 4      w  r0V '       d%   V ^ ,          R8X  d   \        P                  ! R4      hVe   V.VR&   VP                  V4       V '       d   V ^ ,          R8X  d   VP                  P                  \        P                  ! R4      4       V^ ,          P                  R8X  d   V^ ,          VR	&   V '       dK   V ^ ,          R8X  d=   VP                  \        4       \        V R
,          4      w  r0VP                  V4       KR  W3#   \        P                   d    \        T 4      w  r0 EL*i ; i)Nzexpected domain but found '{}'r  r{  rp  zInvalid Domainr	   z(domain is not a dot-atom (contains CFWS)r^  NNNr{  )rV  rl  rm  r   rF  r@   r  r   ry  rs  r'   r  rr   r  )r   r%  r}  r]   s   &   r   
get_domainr  l  s   
 XFFq[( %%,33E:< 	<Qx3)%0E"Ie}'#E* qS%%&677Hb	
MM%qSf9968 	9!9:-q	F1IaCMM##E"I.LEMM% =! "" 'u's   F- -"GGc                 h   \        4       p\        V 4      w  r VP                  V4       V '       d   V ^ ,          R8w  d3   VP                  P                  \        P
                  ! R4      4       W3# VP                  \        RR4      4       \        V R,          4      w  r VP                  V4       W3# )r   rp  z#addr-spec local part with no domainaddress-at-symbolr{  )re  r  r   r'   r   r  r  r  )r   r,  r]   s   &  r   get_addr_specr    s     
I!%(LEUE!HO  !;!;1"3 	4]3(;<=eBi(LEUr   c                    \        4       pV '       d   V ^ ,          R8X  g   V ^ ,          \        9   dc   V ^ ,          \        9   d!   \        V 4      w  r VP                  V4       KZ  V ^ ,          R8X  g   Kj  VP                  \        4       V R,          p K  V '       d   V ^ ,          R8w  d&   \
        P                  ! RP                  V 4      4      hVP                  \        4       \        V R,          4      w  r VP                  V4       V '       d   V ^ ,          R8X  d   VP                  \        4       V R,          p V '       g   MV ^ ,          \        9   d   \        V 4      w  r VP                  V4       V '       g   MLV ^ ,          R8X  g   K  VP                  \        4       \        V R,          4      w  r VP                  V4       K  V '       g   \
        P                  ! R4      hV ^ ,          R8w  d&   \
        P                  ! RP                  V 4      4      hVP                  \        RR4      4       WR,          3# )	r   r,  r{  rp  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)r?  rl  rm  r   ListSeparatorr   rF  r@   RouteComponentMarkerr  r  )r   	obs_router]   s   &  r   get_obs_router    s    
I
U1Xs]eAh+&=8{"#E?LEU#1X_]+"IEE!HO%%6==eDF 	F)*eBi(LEU
E!HcM'b	8{"#E?LEU#8s?12%eBi0LEU#%%&MNNQx3%% (''-ve}6 	6]3(ABCBir   c                    \        4       pV '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       V '       d   V ^ ,          R8w  d&   \        P
                  ! RP                  V 4      4      hVP                  \        RR4      4       V R,          p V '       de   V ^ ,          R8X  dW   VP                  \        RR4      4       VP                  P                  \        P                  ! R4      4       V R,          p W3#  \        V 4      w  r TP                  T4       T '       d   T ^ ,          R8X  d   T R,          p M/TP                  P                  \        P                  ! R
4      4       TP                  \        RR4      4       T '       d1   T ^ ,          \        9   d   \        T 4      w  r TP                  T4       Y3#   \        P
                   d     \        T 4      w  r TP                  P                  \        P                  ! R4      4       M>  \        P
                   d'    \        P
                  ! R	P                  T 4      4      hi ; iTP                  T4       \        T 4      w  r  ELhi ; i)r   <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)r0  rl  rm  r   r   rF  r@   r  r'   r  r  r  r  )r   
angle_addrr]   s   &  r   get_angle_addrr    s"   
 Jq[(% E!HO%%077>@ 	@mC);<="IE qS--=>?!!&"<"<*#, 	-b	  ,$U+ eqSb	!!&"<"<0#2 	3mC)9:;q[(% ) "" 	,	P(/LE%%f&A&A<'> ?&& 	P))@GGNP P	P 	% $U+u	,s*   G J(<H%$J%;I  !JJc                     \        4       p\        V 4      w  r VP                  VR ,          4       VP                  R ,          Vn        W3# )r  )ry  r  r[   r'   )r   r   r]   s   &  r   get_display_namer    sC     =Le$LEa! ==+Lr   c                    \        4       pR pV '       g&   \        P                  ! RP                  V 4      4      hV ^ ,          \        9   d;   \        V 4      w  r V '       g&   \        P                  ! RP                  V4      4      hV ^ ,          R8w  d   V ^ ,          \        9   d&   \        P                  ! RP                  V 4      4      h\        V 4      w  r0V '       g&   \        P                  ! RP                  V4      4      hVe4   \        V^ ,          \        4      '       d   V.V^ ,          R&   MV.VR&   R pVP                  V4       \        V 4      w  r0Ve   V.VR&   VP                  V4       W3# )Nz!expected name-addr but found '{}'r  r{  )r  r   rF  r@   rl  rm  r  r  r}  r"   r   r  )r   	name_addrr}  r]   s   &   r   get_name_addrr  
  sU    
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b	F!%(LEHb	Ur   c                    \        4       p \        V 4      w  r \        ;QJ d&    R TP                   4       F  '       g   K   RM	  RM! R TP                   4       4      '       d   RTn        TP                  T4       Y3#   \        P                   dP     \	        T 4      w  r  L  \        P                   d'    \        P                  ! R P                  T 4      4      hi ; ii ; i)zexpected mailbox but found '{}'c              3   V   "   T F  p\        V\        P                  4      x  K!  	  R # 5ir$   )r}  r   r  r1   s   & r   r4   get_mailbox.<locals>.<genexpr>=  s'      3 11 a3344 1   ')TFr   )
rC  r  r   rF  r  r@   anyrK   rr   r   )r   r   r]   s   &  r   get_mailboxr  .  s     iGA$U+ s 3 % 1 13sss 3 % 1 13 3 3.NN5> "" A	A(/LE5&& 	A))188?A A	AAs   B C&B'';C""C&c                    \        4       pV '       dn   V ^ ,          V9  d`   V ^ ,          \        9   d.   VP                  \        V ^ ,          R4      4       V R,          p KU  \	        V 4      w  r0VP                  V4       Ku  W 3# )r   r  r{  )rQ  r  r   r  r  )r   r6  invalid_mailboxr]   s   &&  r   get_invalid_mailboxr  C  sr     %&O
E!HH,8{"""=q1D$F G"IE%e,LE""5)!!r   c                    \        4       pV '       d   V ^ ,          R8w  d    \        V 4      w  r VP                  V4       V '       dm   V ^ ,          R9  d_   VR
,          pRVn        \        V R4      w  r VP                  V4       VP                  P                  \        P                  ! R4      4       V '       g   K  V ^ ,          R8X  g   K  VP                  \        4       V R	,          p K  W3#   \        P                   Edr    RpT ^ ,          \
        9   d   \        T 4      w  r0T '       d   T ^ ,          R9   dD   TP                  T4       TP                  P                  \        P                  ! R4      4        ELA\        T R4      w  r Te   T.TR&   TP                  T4       TP                  P                  \        P                  ! R4      4        ELT ^ ,          R8X  d3   TP                  P                  \        P                  ! R4      4        EL\        T R4      w  r Te   T.TR&   TP                  T4       TP                  P                  \        P                  ! R4      4        EL7i ; i)r   ;Nz,;zempty element in mailbox-listr{  zinvalid mailbox in mailbox-listr,  r   r{  r  )r   r  r   r   rF  rl  rm  r'   r  r  r  rr   r[   r  )r   mailbox_listr]   r}  r   s   &    r   get_mailbox_listr  U  s    =L
E!HO	8&u-LE&4 U1XT) #2&G!2G.ud;LENN5!  ''(B(B1)3 45U1X_."IEK && 	8FQx;& (aD 0 ''/ ((//0K0K719 : $7ud#CLE)%+Hb	 ''. ((//0J0J91; <qS$$++F,G,G3-5 6  35$?%!'E"I##E*$$++F,F,F5-7 8/	8s&   C1 1BI8AI8=I8AI87I8c                    \        4       pV '       g3   VP                  P                  \        P                  ! R 4      4       W3# RpV '       d   V ^ ,          \
        9   d{   \        V 4      w  r V '       gD   VP                  P                  \        P                  ! R4      4       VP                  V4       W3# V ^ ,          R8X  d   VP                  V4       W3# \        V 4      w  r0\        VP                  4      ^ 8X  dY   Ve   VP                  V4       VP                  V4       VP                  P                  \        P                  ! R4      4       W3# Ve   V.VR&   VP                  V4       W3# )zend of header before group-listNzend of header in group-listr  zgroup-list with empty entriesr{  )r  r'   r   r   r  rl  rm  r  r  r   r[   r  )r   
group_listr}  r]   s   &   r   get_group_listr    sQ   
 J!!&"<"<-#/ 	0  Fq[(  %%f&@&@-'/ 0f%$$8s?f%$$#E*LE
5"f%% !!&"="=+#- 	.  Hb	er   c                 V   \        4       p\        V 4      w  r V '       d   V ^ ,          R8w  d&   \        P                  ! RP	                  V 4      4      hVP                  V4       VP                  \        RR4      4       V R,          p V '       d4   V ^ ,          R8X  d&   VP                  \        RR4      4       WR,          3# \        V 4      w  r VP                  V4       V '       g1   VP                  P                  \        P                  ! R4      4       M3V ^ ,          R8w  d&   \        P                  ! RP	                  V 4      4      hVP                  \        RR4      4       V R,          p V '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       W3# )	r   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   rF  r@   r   r  r  r'   r  rl  rm  )r   r   r]   s   &  r   	get_groupr    sQ    GE#E*LEE!HO%% '**0&-9 	9	LL	LLs$CDE"IEqS]3(:;<Bi!%(LE	LLV77$& 	'	qS%%7>>uEG 	G	LLs$678"IEq[(U<r   c                 (   \        4       p \        V 4      w  r TP                  T4       Y3#   \        P                   dP     \	        T 4      w  r  L9  \        P                   d'    \        P                  ! R P                  T 4      4      hi ; ii ; i)zexpected address but found '{}')r   r  r   rF  r  r@   r   )r   r   r]   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                    \        4       pV '       d    \        V 4      w  r VP                  V4       V '       dg   V ^ ,          R8w  dY   \        V R4      w  r VP                  \        V.4      4       VP                  P                  \        P                  ! R4      4       V '       g   K  VP                  \        4       V R,          p K  W3#   \        P                   Ed    R pT ^ ,          \
        9   d   \        T 4      w  r0T '       d   T ^ ,          R8X  dD   TP                  T4       TP                  P                  \        P                  ! R4      4        EL+\        T R4      w  r Te   T.TR&   TP                  \        T.4      4       TP                  P                  \        P                  ! R4      4        ELT ^ ,          R8X  d3   TP                  P                  \        P                  ! R4      4        EL\        T R4      w  r Te   T.TR&   TP                  \        T.4      4       TP                  P                  \        P                  ! R4      4        EL5i ; i)Nr,  z"address-list entry with no contentr{  zinvalid address in address-listzempty element in address-listr{  )r   r  r   r   rF  rl  rm  r'   r  r  r   r  r  )r   address_listr]   r}  s   &   r   get_address_listr    s     =L
	8&u-LE&4 U1X_ /uc:LE 01  ''(B(B1)3 45."IEG && 	8FQx;& (aC ''/ ((//0K0K<1> ? $7uc#BLE)%+Hb	 ''(89 ((//0J0J91; <qS$$++F,G,G3-5 6  35#>%!'E"I##GUG$45$$++F,F,F5-7 8/	8s&   C BI(A"I(=I(A"I('I(c                    \        4       pV '       g&   \        P                  ! R P                  V 4      4      hV ^ ,          R8w  d&   \        P                  ! RP                  V 4      4      hVP	                  \        RR4      4       V R,          p \        V 4      w  r VP	                  V4       V '       d   V ^ ,          R8w  d&   \        P                  ! RP                  V 4      4      hVP	                  \        RR4      4       WR,          3# )z'expected no-fold-literal but found '{}'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)rc  r   rF  r@   r   r  r  )r   no_fold_literalr]   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                    \        4       pV '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       V '       d   V ^ ,          R8w  d&   \        P
                  ! RP                  V 4      4      hVP                  \        RR4      4       V R,          p  \        V 4      w  r TP                  T4       T '       d   T ^ ,          R8w  dm   TP                  P                  \        P                  ! R4      4       T '       d3   T ^ ,          R	8X  d%   TP                  \        R	R
4      4       T R,          p Y3# TP                  \        RR4      4       T R,          p  \        T 4      w  r TP                  T4       T '       d   T ^ ,          R	8X  d   T R,          p M/TP                  P                  \        P                  ! R4      4       TP                  \        R	R
4      4       T '       d1   T ^ ,          \        9   d   \        T 4      w  r TP                  T4       Y3#   \        P
                   d     \        T 4      w  r TP                  P                  \        P                  ! R4      4        EL  \        P
                   d'    \        P
                  ! RP                  T 4      4      hi ; ii ; i  \        P
                   d     \        T 4      w  r  ELs  \        P
                   d     \        T 4      w  r TP                  P                  \        P                  ! R4      4         EL  \        P
                   d'    \        P
                  ! RP                  T 4      4      hi ; ii ; ii ; i)r   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 '{}'rp  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  rl  rm  r   r   rF  r@   r  rv  r  r'   r  r  r  r  )r   msg_idr]   s   &  r   
get_msg_idr  9  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b	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   #H+ (K +J?<J  ;J;;J?NK((M=><L>:N>;M99M==Nc                    \        4       p \        V 4      w  r VP                  V4       V '       d?   VP                  P                  \        P
                  ! R P                  V 4      4      4       V#   \        P                   d`   p\        T 4      p\        T4      pTP                  P                  \        P
                  ! RP                  T4      4      4        Rp?T# Rp?ii ; i)zUnexpected {!r}Invalid msg-id: {!r}N)
r  r  r   r'   r   r  r@   rF  rZ  r  )r   
message_idr]   exs   &   r   parse_message_idr  ~  s     J2!%(%  %%f&@&@!((/'1 2  "" K '%e,
!!&&'='D'DR'HI	K 	K Ks   A2 2C&AC!!C&c                 >   \        4       pV '       d   V ^ ,          R8X  dV   VP                  P                  \        P                  ! R4      4       VP                  \        RR4      4       V R,          p Kk   \        V 4      w  r VP                  V4       K  V#   \        P                   do   p\        T 4      pTP                  \        T4      4       TP                  P                  \        P                  ! RP                  T4      4      4        Rp?T# Rp?ii ; i)r   r,  zcomma in msg-id listr   zinvalid-comma-replacementr{  r  N)r  r'   r   r   r  r  r  rF  rZ  r  r@   )r   message_id_listr]   r  s   &   r   parse_message_idsr    s     $oO
8s? ##****+ABD"""3(CDF"IE	%e,LE""5)  && 	$U+E""#3E#:;##****+A+H+H+LMO	s   7B D.A#DDc                 t   \        4       pV '       g2   VP                  P                  \        P                  ! R 4      4       V# V ^ ,          \
        9   dV   \        V 4      w  r VP                  V4       V '       g0   VP                  P                  \        P                  ! R4      4       RpV '       d;   V ^ ,          R8w  d-   V ^ ,          \
        9  d   W0^ ,          ,          pV R,          p KB  VP                  4       '       g[   VP                  P                  \        P                  ! RP                  V4      4      4       VP                  \        VR4      4       M+\        V4      Vn        VP                  \        VR4      4       V '       d1   V ^ ,          \
        9   d   \        V 4      w  r VP                  V4       V '       d   V ^ ,          R8w  dc   VP                  e0   VP                  P                  \        P                  ! R4      4       V '       d   VP                  \        V R4      4       V# VP                  \        RR	4      4       V R,          p V '       d1   V ^ ,          \
        9   d   \        V 4      w  r VP                  V4       V '       g@   VP                  e0   VP                  P                  \        P                  ! R4      4       V# RpV '       d-   V ^ ,          \
        9  d   W0^ ,          ,          pV R,          p K4  VP                  4       '       g[   VP                  P                  \        P                  ! R
P                  V4      4      4       VP                  \        VR4      4       M+\        V4      Vn        VP                  \        VR4      4       V '       d1   V ^ ,          \
        9   d   \        V 4      w  r VP                  V4       V '       dK   VP                  P                  \        P                  ! R4      4       VP                  \        V R4      4       V# )z%Missing MIME version number (eg: 1.0)z0Expected MIME version number but found only CFWSr.   r	   r{  z1Expected MIME major version number but found {!r}r0  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   HeaderMissingRequiredValuerl  rm  isdigitr  r@   r  intr  r  )r   mime_versionr]   r  s   &   r   parse_mime_versionr    s6    =L##F$E$E3%5 	6Qx;E"  ''(I(IB)D EF
E!HOa(C(b	>>##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/(b	>>##F$>$>?FFvN%P 	QM&':; [M&(;<q[(E"##F$>$>5%7 	8M%9:r   c                    \        4       pV '       dn   V ^ ,          R8w  d`   V ^ ,          \        9   d.   VP                  \        V ^ ,          R4      4       V R,          p KU  \	        V 4      w  r VP                  V4       Ku  W3# )r   r  r  r{  )r  r  r   r  r  )r   invalid_parameterr]   s   &  r   get_invalid_parameterr    sr     )*
E!HO8{"$$]583F&H I"IE%e,LE$$U+##r   c                     \        V 4      pV'       g&   \        P                  ! R P                  V 4      4      hVP	                  4       pV \        V4      R p \        VR4      p\        V4       W 3# )zexpected ttext but found '{}'Nttext)_non_token_end_matcherr   rF  r@   r   r  r  r2  )r   rd  r  s   &  r   	get_ttextr  
	  si     	u%A%%+2259; 	;GGIE#e*+E%)EE<r   c                    \        4       pV '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       V '       d8   V ^ ,          \        9   d&   \
        P                  ! RP                  V 4      4      h\        V 4      w  r VP                  V4       V '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       W3# r   zexpected token but found '{}')	r   rl  rm  r   
TOKEN_ENDSr   rF  r@   r  )r   mtokenr]   s   &  r   	get_tokenr  	  s     WFq[(eqZ'%%+2259; 	;U#LE
MM%q[(e=r   c                     \        V 4      pV'       g&   \        P                  ! R P                  V 4      4      hVP	                  4       pV \        V4      R p \        VR4      p\        V4       W 3# )z expected attrtext but found {!r}Nr  )_non_attribute_end_matcherr   rF  r@   r   r  r  r2  r   rd  r  s   &  r   get_attrtextr  4	  si     	#5)A%%.55e<> 	>wwyH#h-.!EXz2HH?r   c                    \        4       pV '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       V '       d8   V ^ ,          \        9   d&   \
        P                  ! RP                  V 4      4      h\        V 4      w  r VP                  V4       V '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       W3# r  )	r  rl  rm  r   ATTRIBUTE_ENDSr   rF  r@   r  r   r  r]   s   &  r   get_attributer  G	  s     Iq[(q^+%%+2259; 	;&LEUq[(r   c                     \        V 4      pV'       g&   \        P                  ! R P                  V 4      4      hVP	                  4       pV \        V4      R p \        VR4      p\        V4       W 3# )z)expected extended attrtext but found {!r}Nextended-attrtext)#_non_extended_attribute_end_matcherr   rF  r@   r   r  r  r2  r  s   &  r   get_extended_attrtextr  ^	  sl     	,E2A%%7>>uEG 	GwwyH#h-.!EX':;HH?r   c                    \        4       pV '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       V '       d8   V ^ ,          \        9   d&   \
        P                  ! RP                  V 4      4      h\        V 4      w  r VP                  V4       V '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       W3# r  )	r  rl  rm  r   EXTENDED_ATTRIBUTE_ENDSr   rF  r@   r  r  s   &  r   get_extended_attributer  p	  s     Iq[(q44%%+2259; 	;(/LEUq[(r   c                    \        4       pV '       d   V ^ ,          R8w  d&   \        P                  ! RP                  V 4      4      hVP	                  \        RR4      4       V R,          p V '       d   V ^ ,          P                  4       '       g&   \        P                  ! RP                  V 4      4      hRpV '       d8   V ^ ,          P                  4       '       d   W ^ ,          ,          pV R,          p K?  V^ ,          R8X  d7   VR8w  d0   VP                  P	                  \        P                  ! R4      4       \        V4      Vn
        VP	                  \        VR	4      4       W3# )
r   *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   rF  r@   r   r  r  r'   r  r  r  )r   r  r  s   &  r   get_sectionr  	  s    iGE!HO%%&E&L&L(-'/ 0 	0NN=&678"IEa((**%% '117@ 	@F
E!H$$&&(b	ayCFcMv999 ; 	<[GNNN=23>r   c                 |   \        4       pV '       g   \        P                  ! R 4      hRpV ^ ,          \        9   d   \	        V 4      w  r V '       g&   \        P                  ! RP                  V4      4      hV ^ ,          R8X  d   \        V 4      w  r0M\        V 4      w  r0Ve   V.VR&   VP                  V4       W3# )z&Expected value but found end of stringNz Expected value but found only {}r   r{  )	r  r   rF  rl  rm  r@   rp  r  r   )r   vr}  r]   s   &   r   	get_valuer  	  s     	A%%&NOOFQx; %% '006v@ 	@Qx3(/u-e4Hb	HHUO8Or   c                    \        4       p\        V 4      w  r VP                  V4       V '       d   V ^ ,          R8X  dB   VP                  P                  \        P
                  ! RP                  V4      4      4       W3# V ^ ,          R8X  d~    \        V 4      w  r RVn        VP                  V4       V '       g   \        P                  ! R4      hV ^ ,          R8X  d,   VP                  \        RR4      4       V R,          p RVn        V ^ ,          R8w  d   \        P                  ! R	4      hVP                  \        RR
4      4       V R,          p V '       d1   V ^ ,          \        9   d   \        V 4      w  r VP                  V4       RpTpVP                  '       Ed;   V '       Ed2   V ^ ,          R8X  Ed#   \        V 4      w  rSVP                  pRpVP                   ^ 8X  d@   V'       d   V^ ,          R8X  d   RpM>\#        V4      w  r(V'       d   V^ ,          R8X  d   RpM \%        V4      w  r(V'       g   RpV'       dg   VP                  P                  \        P
                  ! R4      4       VP                  V4       V F  p	V	P&                  R8X  g   K  . V	R&   T	p M	  Tp M1RpVP                  P                  \        P
                  ! R4      4       V '       d   V ^ ,          R8X  d   RpM\)        V 4      w  r VP                  '       d   VP                   ^ 8  d`   V '       d   V ^ ,          R8w  d   VP                  V4       Ve   Tp W3# VP                  P                  \        P
                  ! R4      4       V '       gJ   VP                  P                  \        P
                  ! R4      4       VP                  V4       Vf   W3# EMLVeN   V F  p	V	P&                  R8X  g   K   M	  X	P&                  R8H   VP                  V	4       V	P*                  Vn        V ^ ,          R8w  d&   \        P                  ! RP                  V 4      4      hVP                  \        RR4      4       V R,          p V '       dy   V ^ ,          R8w  dk   \#        V 4      w  r VP                  V4       VP*                  Vn        V '       d   V ^ ,          R8w  d&   \        P                  ! RP                  V 4      4      hVP                  \        RR4      4       V R,          p Vez   \1        4       p
V '       de   V ^ ,          \2        9   d   \5        V 4      w  r M1V ^ ,          R8X  d   \        RR4      pV R,          p M\7        V 4      w  r V
P                  V4       Kl  T
pM\)        V 4      w  r VP                  V4       Ve   Tp W3#   \        P                   d     EL)i ; i    EL; i)r   r  z)Parameter contains name ({}) but no valuer  TzIncomplete parameterzextended-parameter-markerr{  =zParameter not followed by '='parameter-separatorNr   F'z5Quoted string value for extended parameter is invalidr   r  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  rF  r  r  rl  rm  rp  r   r  r  r  rr   r  r   r   r   r  r  rA  r`  )r   r  r]   r8  appendtoqstringinner_value
semi_validrN  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+>?@b	U1X_'.LEOOE"EJE!HO-- /<<BF5MK Kc+>?@b	GQx3&u~uqS%c84b	+E2HHUO 'OOE<i && 		Ds   %W &W! WW!W&c                     \        4       pV '       d    \        V 4      w  r VP                  V4       V '       d{   V ^ ,          R8w  dm   VR	,          pRVn        \        V 4      w  r VP                  V4       VP                  P                  \        P                  ! RP                  V4      4      4       V '       g   K  VP                  \        RR4      4       V R,          p K  V#   \        P                   Ed    R pT ^ ,          \
        9   d   \        T 4      w  r0T '       g   TP                  T4       Tu # T ^ ,          R8X  dH   Te   TP                  T4       TP                  P                  \        P                  ! R4      4        EL]\        T 4      w  r T'       d   T.TR&   TP                  T4       TP                  P                  \        P                  ! RP                  T4      4      4        ELi ; i)
Nr  zparameter entry with no contentr{  zinvalid parameter {!r}r  z)parameter with invalid trailing text {!r}r  r{  r  )r  r  r   r   rF  rl  rm  r'   r  r  r@   rr   r[   r  )r   mime_parametersr]   r}  r  s   &    r   parse_mime_parametersr	  G
  s    %&O
	=(/LE""5)( U1X_ $B'E2E07LELL##**6+E+E;BB5I,K L5""=6K#LM"IEA && 	=FQx;& (&&v.&&Qx3%#**62''..v/I/I507 8  5U;!'E"I&&u-''..v/I/I,33E:0< =#	=s%   C& &>G=%G=:AG=A*G=<G=c                 |   V'       dn   V^ ,          R8w  d`   V^ ,          \         9   d.   V P                  \        V^ ,          R4      4       VR,          pKU  \        V4      w  r!V P                  V4       Ku  V'       g   R# V P                  \        RR4      4       V P                  \	        VR,          4      4       R# )r   r  r  r{  Nr  )r  r   r  r  r	  )	tokenlistr   r]   s   && r   _find_mime_parametersr  {
  s     E!HO8{"]585HIJ"IE%e,LEU#]3(=>?*5956r   c                    \        4       pV '       g2   VP                  P                  \        P                  ! R 4      4       V#  \        V 4      w  r TP                  T4       T '       d   T ^ ,          R8w  dE   TP                  P                  \        P                  ! R4      4       T '       d   \        Y4       T# TP                  P                  4       P                  4       Tn        TP                  \        RR4      4       T R,          p  \        T 4      w  r TP                  T4       TP                  P                  4       P                  4       Tn        T '       g   T# T ^ ,          R8w  dP   TP                  P                  \        P                  ! RP                  T 4      4      4       T=T=\        Y4       T# TP                  \        RR	4      4       TP                  \!        T R,          4      4       T#   \        P                   dO    TP                  P                  \        P                  ! RP                  T 4      4      4       \        Y4       Tu # i ; i  \        P                   dO    TP                  P                  \        P                  ! RP                  T 4      4      4       \        Y4       Tu # i ; i)
z"Missing content type specificationz(Expected content maintype but found {!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  rF  r  r@   r  r   r  lowerr  r  r  r	  )r   ctyper]   s   &  r   parse_content_type_headerr  
  s8    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&uRy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 KKc                 .   \        4       pV '       g2   VP                  P                  \        P                  ! R 4      4       V#  \        V 4      w  r TP                  T4       TP                  P                  4       P                  4       Tn        T '       g   T# T ^ ,          R8w  dL   TP                  P                  \        P                  ! RP                  T 4      4      4       \        Y4       T# TP                  \        RR4      4       TP                  \        T R,          4      4       T#   \        P                   dO    TP                  P                  \        P                  ! RP                  T 4      4      4       \        Y4       Tu # i ; i)zMissing content dispositionz+Expected content disposition but found {!r}r  zCOnly parameters are valid after content disposition, but found {!r}r  r{  )r  r'   r   r   r  r  rF  r  r@   r  r   r  r  r  r  r	  )r   disp_headerr]   s   &  r    parse_content_disposition_headerr  
  sU    %&K""6#D#D)$+ 	, ' u&+kk&7&7&9&?&?&AK#Qx3""6#=#=$( 	) 	k1}S*?@A,U2Y78# "" ""6#=#=9@@G$I 	Jk1	s   D1 1A FFc                    \        4       pV '       g2   VP                  P                  \        P                  ! R 4      4       V#  \        V 4      w  r VP                  V4       VP                  P                  4       P                  4       Vn	        V '       g   V# V '       d   VP                  P                  \        P                  ! R4      4       V ^ ,          \        9   d.   VP                  \        V ^ ,          R4      4       V R,          p Kv  \        V 4      w  r VP                  V4       K  V#   \        P                   dB    TP                  P                  \        P                  ! RP                  T 4      4      4        Li ; i)z!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   rF  r  r@   r  r  r  )r   
cte_headerr]   s   &  r   &parse_content_transfer_encoding_headerr  
  s@   
 )*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   D2 2AFFc                     R pV '       dg   V R,          '       dX   V R,          R,          \         9   d?   V R,          R,          pV R,          RR V R&   V R,          '       g   V P                  4        V# )r.   Nr  )r  r|  )lineswsps   & r   _steal_trailing_WSP_if_existsr    sX    
CruRy}3Bim"IcrNb	RyyIIKJr   c          	         VP                   ;'       g    \        P                  pVP                  '       d   R MRpR.pRpRpRp^ pRp	\	        RR4      p
\        V 4      pV'       Ed   VP                  ^ 4      pWJ d   V^,          pK*  \        V4      pV	'       gG   VP                  R9   d   \        P                  V4      '       * p	M\        P                  V4      '       * p	 VP                  V4       TpVP                  R
8X  d   \!        WW#4       RpK  V	'       EdM   V'       EgD   VP"                  '       g   Rp	RpVP$                  '       d   VP'                  VR7      R\)        VP*                  4      )  pVP*                  V9  d^   \)        V4      V\)        VR,          4      ,
          8  d   \-        V4      pVP/                  V4       VR;;,          V,          uu&   RpEK  \1        VR4      '       g   \        V4      V,           pRp	EK  VP"                  '       dF   Ve   W8w  d   VR	8X  g   VR 8X  d
   VR8w  d   Rp\3        VVVVVP4                  VV4      pRpTpRp	EK	  RpRp	\)        V4      V\)        VR,          4      ,
          8:  dF   VR;;,          V,          uu&   T;'       d$    \7        VP9                  \:        4      4      '       * pEKy  VP$                  '       d   \)        V4      ^,           V8:  d{   \-        V4      pV'       g   VP=                  4       '       dR   VP/                  VV,           4       T;'       d+    \7        VR,          P9                  \:        4      4      '       * pRpEK  \1        VR4      '       Eg   \        V4      pVP                  R8X  dJ   \?        RR4      .V Uu. uF  p\?        \A        V4      R4      NK  	  up,           \?        RR4      .,           pVP                  R8X  d]   \?        RR4      .V Uu. uF+  pVP                  R8X  d   \?        \C        V4      R4      MTNK-  	  up,           \?        RR4      .,           pVP"                  '       g   V^,          pVP/                  V
4       VV,           pEK9  VP"                  '       d    V'       g   VPE                  ^ V4       Rp	EKj  \-        V4      pV'       g   VP=                  4       '       d   VP/                  VV,           4       MVR;;,          V,          uu&   T;'       d$    \7        VP9                  \:        4      4      '       * pEK  VP*                  PG                  V4      VP*                  ,           #   \         dZ    \        ;QJ d&    R TP                   4       F  '       g   K   RM	  RM! R TP                   4       4      '       d   R	pMR pRp	 ELi ; iu upi u upi )utf-8r  r.   FNwrap_as_ew_blockedr  c              3   V   "   T F  p\        V\        P                  4      x  K!  	  R # 5ir$   )r}  r   r  r1   s   & r   r4   %_refold_parse_tree.<locals>.<genexpr><  s'      .,q a!>!>??,r  Tunknown-8bitr  r`   r  r   r   r   r   r   )r  rP  r  )$max_line_lengthsysmaxsizeutf8r  r
  r|  r   rr   
SPECIALSNL
isdisjointNLSETr  r  r  rK   _fold_mime_parametersrU   rz   rd   r  r  r  r   rs   _fold_as_ewr{   boolr  _WSPrQ   r  r   r   insertr9   )
parse_treera   maxlenr  r  last_word_is_ewlast_ewlast_charsetr  want_encodingend_ew_not_allowedr  rV   tstrr   encoded_partnewlinenewpartsps   &$                 r   rb   rb     s5   
 ##22s{{F +++w:HDEOGLM!"&:;E
%yy|%!#4y"44$.$9$9$$? ? %*$4$4T$: :	!KK!G ??//!$v@#O=!3!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%++# #'& %  % t9U2Y//"II-LLd4::d;K6L2LO
    D	A'3E:G$--//Wt^,#2 $G $G+/b	0E+F'F  tX&&DzH"66
 #301&(& ##4Q#7A&(( #3012 
 )+"301 '(& / ##9!#<gF567&(( #301	2  %%%"a'" 23u$E&8 LLD! M/6d))++LL4( "II)HH$tzz$7G2H.H>>u%66{ " 	!s . ,,.sss . ,,. . .( " M	!~((s0   #U< :W#1W(<W W 0$W W W c                    Ve>   V'       d6   \        \        VR,          VR  V ,           4      4      p VR,          R V VR&   MV'       d[   \        VR,          P                  \        4      4      pVR,          VR  pVR,          R V V'       d   RMR,           VR&   W,           p MjV ^ ,          \
        9   dY   V ^ ,          p	V R,          p \        VR,          4      V8X  d   VP                  \        V4      4       VR;;,          V	,          uu&   Rp
V R,          \
        9   d   V R,          p
V R R p Vf   \        VR,          4      MTpVR8X  d   RMTp\        V4      ^,           pV^,           V8  d   \        P                  ! R4      hV '       Ed   V\        VR,          4      ,
          pW,
          pV^ 8:  d;   \        V4      pTP                  T;'       g    R4       \        VR,          4      pKk  V R V p\        P                  ! VVR7      p\        V4      V,
          pV^ 8  d2   VR R p\        P                  ! VVR7      p\        V4      V,
          pK8  VR;;,          V,          uu&   V \        V4      R  p V '       g   EK   VP                  R4       \        VR,          4      pEK&  VR;;,          V
,          uu&   V'       d   V# R # )	Nr   r.   r{  r  r  z3max_line_length is too small to fit an encoded word)r   r  )r   rZ  r  rl  r+  r  r   r  r   rF  rH  r  )	to_encoder  r.  r0  r{   r   r/  len_without_wspleading_whitespaceleading_wsptrailing_wspnew_last_ew	encode_as
chrome_lenremaining_space
text_spacer6  to_encode_wordencoded_wordexcesss   &&&&&&&             r   r)  r)    sr    1U2Ywx09<=?	"Ihw'b		
 eBi..t45"2Y'782Y/01r;b	&2		1	  lbM	b	Nf$LL6u=>b	[ 	L} }crN	$+O#eBi.K"j0gI Y!#JQ6!%%AC 	C ) 3uRy>1$1
?3E:GLLC(eBi.K";J/zz.)D\"_4qj ,CR0N::niHL&8Fb	\!	c.123	9LLeBi.K	"II,;6$6r   c           	         V P                    EF6  w  rEVR,          P                  4       P                  R4      '       g   VR;;,          R,          uu&   TpRp VP                  V4       RpV'       d6   \        P                  P                  VRVR	7      p	R
P                  WFV	4      p
MRP                  V\        V4      4      p
\        VR,          4      \        V
4      ,           ^,           V8  d   VR,          R,           V
,           VR&   EK  \        V
4      ^,           V8:  d   VP                  RV
,           4       EK4  ^ pVR,           pV'       g   EKJ  \        V4      \        \        V4      4      ,           ^,           \        V4      ,           pW-^,           8:  d   ^NpW-,
          ^,
          ;r VRV p\        P                  P                  VRVR	7      p	\        V	4      V8:  d   MV^,          pKD  VP                  RP                  WKW4      4       RpV^,          pW^R pV'       g   K  VR;;,          R,          uu&   K  	  R#   \         d,    Rp\
        P                  ! T4      '       d   RpRp ELRp ELi ; i)r  r  strictFTr   r  r  r.   )safer   z
{}*={}''{}r  r   z''Nz {}*{}*={}{}r  )r  rl  r  r  r  r   r  r  r  r   r@   r    r  r   r   )rV   r  r.  r  r  r   r   error_handlerencoding_requiredencoded_valuer4  r  extra_chromerA  
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ub	S 	u # " 	" $$$U++( 1!	"s   I

(J 3J :J ?J )rP  )rer"  r  stringr   operatorr   emailr   rH  r   r   r+  rq  r  rl  r|  rr  rr  r  	TSPECIALSr  	ASPECIALSr  r  r'  r%  r   r   r    compileVERBOSE	MULTILINErU  r
  r"   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r0  r?  rC  rQ  rV  r]  r`  rc  re  rw  ry  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r%  rF  r+  r  r  rU   rz   r  r@   r9   rY  r4  r:  matchrc  findallr.  r  r  r  r2  r=  rA  rQ  rZ  r^  r`  re  rh  rj  rm  rp  rs  rv  ry  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  rb   r)  r(  r   r   r   <module>r\     s6  L 
 
    '   	$iCHn sN	CH$U#E
"c#h.	_
E
"	S(3s83 	t
@
1 **  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 &;I ;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" ()T2 $6 &2 D.`%N2!h(%!N$L ) V,\"H*"$6r#J<:2j&,BJ(DBH$$&.&.$,<,KZ2h7 6p<^]7~L7\I!r   