PK APOCALYPSE V1

APOCALYPSE V1

Current Path : /opt/alt/python311/lib64/python3.11/email/__pycache__/
Upload File :
Current File : //opt/alt/python311/lib64/python3.11/email/__pycache__/_header_value_parser.cpython-311.opt-2.pyc

�

�/�gM��	�$�	ddlZddlZddlZddlmZddlmZddlmZ	ddlm
Z
ddlmZed��Z
e
ed��zZed	��Zee
zZeed
��z
Zeed��z
Zeed��zed
��z
Zee
zZeed
��zZee
zZeed��z
ZddhZeezZd�Zd�Zejdejejz��ZGd�de ��Z!Gd�de!��Z"Gd�de!��Z#Gd�de!��Z$Gd�de!��Z%Gd�de"��Z&Gd �d!e!��Z'Gd"�d#e!��Z(Gd$�d%e!��Z)Gd&�d'e!��Z*Gd(�d)e*��Z+Gd*�d+e"��Z,Gd,�d-e!��Z-Gd.�d/e!��Z.Gd0�d1e!��Z/Gd2�d3e!��Z0Gd4�d5e!��Z1Gd6�d7e!��Z2Gd8�d9e!��Z3Gd:�d;e!��Z4Gd<�d=e!��Z5Gd>�d?e!��Z6Gd@�dAe!��Z7GdB�dCe!��Z8GdD�dEe!��Z9GdF�dGe!��Z:GdH�dIe!��Z;GdJ�dKe!��Z<GdL�dMe$��Z=GdN�dOe!��Z>GdP�dQe!��Z?GdR�dSe!��Z@GdT�dUe!��ZAGdV�dWeA��ZBGdX�dYe!��ZCGdZ�d[e!��ZDGd\�d]e!��ZEGd^�d_e!��ZFGd`�dae!��ZGGdb�dceG��ZHGdd�deeG��ZIGdf�dge!��ZJGdh�die!��ZKGdj�dke!��ZLGdl�dmeL��ZMGdn�doeM��ZNGdp�dqe!��ZOGdr�dseP��ZQGdt�dueQ��ZRGdv�dweQ��ZSGdx�dyeR��ZTGdz�d{e
jU��ZVeSd
d|��ZWeSd}d~��ZXdeX_YdeX_ZeSd�d���Z[ejd��\d��]e
������j^Z_ejd��\ej`d��]e��������jaZbejd���jcZdejd��\ej`d��]e��������jaZeejd��\ej`d��]e��������jaZfejd��\ej`d��]e��������jaZgd��Zhd��Zid��Zjd�d��Zkd��Zld��Zmd��Znd��Zod��Zpd��Zqd��Zrd��Zsd��Ztd��Zud��Zvd��Zwd��Zxd��Zyd��Zzd��Z{d��Z|d��Z}d��Z~d��Zd��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�d��Z�dS)��N)�	hexdigits)�
itemgetter)�_encoded_words)�errors)�utilsz 	�(z
()<>@,:;.\"[]�.z."(z/?=z*'%�%�
�
c�r�	t|���dd���dd��S)N�\�\\�"z\")�str�replace��values �A/opt/alt/python311/lib64/python3.11/email/_header_value_parser.py�make_quoted_pairsrcs1��E��u�:�:���d�F�+�+�3�3�C��?�?�?�c�,�t|��}d|�d�S)Nr)r)r�escapeds  r�quote_stringrhs����&�&�G��w�>�>�>�rz�
   =\?            # literal =?
   [^?]*          # charset
   \?             # literal ?
   [qQbB]         # literal 'q' or 'b', case insensitive
   \?             # literal ?
  .*?             # encoded word
  \?=             # literal ?=
c���eZdZdZdZdZ�fd�Zd�Z�fd�Ze	d���Z
e	d���Zd�Ze	d	���Z
e	d
���Zd�Zdd
�Zdd�Zdd�Z�xZS)�	TokenListNTc�H��t��j|i|��g|_dS�N)�super�__init__�defects)�self�args�kw�	__class__s   �rr zTokenList.__init__�s*��������$�%�"�%�%�%�����rc�@�d�d�|D����S)N�c3�4K�|]}t|��V��dSr�r��.0�xs  r�	<genexpr>z$TokenList.__str__.<locals>.<genexpr>��(����,�,�!�s�1�v�v�,�,�,�,�,�,r��join�r"s r�__str__zTokenList.__str__�s#���w�w�,�,�t�,�,�,�,�,�,rc���d�|jjt�������S�Nz{}({})��formatr%�__name__r�__repr__�r"r%s �rr8zTokenList.__repr__�s3������t�~�6�"�W�W�-�-�/�/�1�1�	1rc�@�d�d�|D����S)Nr'c3�2K�|]}|j�	|jV��dSrrr*s  rr-z"TokenList.value.<locals>.<genexpr>�s+����8�8�1���8�q�w�8�8�8�8�8�8rr/r1s rrzTokenList.value�s#���w�w�8�8��8�8�8�8�8�8rc�@�td�|D��|j��S)Nc3�$K�|]}|jV��dSr)�all_defectsr*s  rr-z(TokenList.all_defects.<locals>.<genexpr>�s$����0�0�a�A�M�0�0�0�0�0�0r)�sumr!r1s rr>zTokenList.all_defects�s#���0�0�4�0�0�0�$�,�?�?�?rc�6�|d���S�Nr)�startswith_fwsr1s rrBzTokenList.startswith_fws�s���A�w�%�%�'�'�'rc�6�	td�|D����S)Nc3�$K�|]}|jV��dSr)�
as_ew_allowed)r+�parts  rr-z*TokenList.as_ew_allowed.<locals>.<genexpr>�s%����7�7�$�4�%�7�7�7�7�7�7r)�allr1s rrEzTokenList.as_ew_allowed�s"��O��7�7�$�7�7�7�7�7�7rc�H�g}|D]}|�|j���|Sr)�extend�comments)r"rJ�tokens   rrJzTokenList.comments�s2�����	,�	,�E��O�O�E�N�+�+�+�+��rc�$�t||���S)N��policy)�_refold_parse_tree�r"rNs  r�foldzTokenList.fold�s��!�$�v�6�6�6�6rr'c�L�t|�|�����dS)N��indent)�print�ppstr�r"rTs  r�pprintzTokenList.pprint�s$��
�d�j�j��j�'�'�(�(�(�(�(rc�T�d�|�|�����S)NrrS)r0�_pprWs  rrVzTokenList.ppstr�s"���y�y������0�0�1�1�1rc#�nK�d�||jj|j��V�|D]K}t	|d��s|d�|��zV��-|�|dz��Ed{V���L|jrd�|j��}nd}d�||��V�dS)Nz{}{}/{}(rZz*    !! invalid element in token list: {!r}z    z Defects: {}r'z{}){})r6r%r7�
token_type�hasattrrZr!)r"rTrK�extras    rrZz
TokenList._pp�s����������N�#��O���	�	�	��	4�	4�E��5�%�(�(�
4��!5�5;�V�E�]�]�C�D�D�D�D�!�9�9�V�F�]�3�3�3�3�3�3�3�3�3�3��<�	�"�)�)�$�,�7�7�E�E��E��n�n�V�U�+�+�+�+�+�+�+r�r')r7�
__module__�__qualname__r\�syntactic_break�ew_combine_allowedr r2r8�propertyrr>rBrErJrQrXrVrZ�
__classcell__�r%s@rrr}s9��������J��O��������-�-�-�1�1�1�1�1��9�9��X�9��@�@��X�@�(�(�(��8�8��X�8�����X��7�7�7�)�)�)�)�2�2�2�2�,�,�,�,�,�,�,�,rrc�:�eZdZed���Zed���ZdS)�WhiteSpaceTokenListc��dS�N� �r1s rrzWhiteSpaceTokenList.value�����src��d�|D��S)Nc�2�g|]}|jdk�
|j��S)�comment)r\�contentr*s  r�
<listcomp>z0WhiteSpaceTokenList.comments.<locals>.<listcomp>�s&��C�C�C�a�1�<��+B�+B��	�+B�+B�+Brrlr1s rrJzWhiteSpaceTokenList.comments�s��C�C�4�C�C�C�CrN)r7r`rardrrJrlrrrhrh�sM������
����X���D�D��X�D�D�Drrhc��eZdZdZdS)�UnstructuredTokenList�unstructuredN�r7r`rar\rlrrrtrt�s�������J�J�Jrrtc��eZdZdZdS)�Phrase�phraseNrvrlrrrxrx���������J�J�Jrrxc��eZdZdZdS)�Word�wordNrvrlrrr|r|���������J�J�Jrr|c��eZdZdZdS)�CFWSList�cfwsNrvrlrrr�r��r~rr�c��eZdZdZdS)�Atom�atomNrvrlrrr�r��r~rr�c��eZdZdZdZdS)�TokenrKFN)r7r`rar\�encode_as_ewrlrrr�r��s�������J��L�L�Lrr�c��eZdZdZdZdZdZdS)�EncodedWord�encoded-wordN)r7r`rar\�cte�charset�langrlrrr�r��s"�������J�
�C��G��D�D�Drr�c�T�eZdZdZed���Zed���Zed���ZdS)�QuotedString�
quoted-stringc�8�|D]}|jdkr	|jcS�dS�N�bare-quoted-string�r\r�r"r,s  rrqzQuotedString.content�s9���	�	�A��|�3�3�3��w����4�	�	rc���g}|D]J}|jdkr#|�t|�����0|�|j���Kd�|��S)Nr�r')r\�appendrrr0)r"�resr,s   r�quoted_valuezQuotedString.quoted_value�sf�����	$�	$�A��|�3�3�3��
�
�3�q�6�6�"�"�"�"��
�
�1�7�#�#�#�#��w�w�s�|�|�rc�8�|D]}|jdkr	|jcS�dSr�r��r"rKs  r�stripped_valuezQuotedString.stripped_value�s=���	#�	#�E���#7�7�7��{�"�"�"�8�	#�	#rN)r7r`rar\rdrqr�r�rlrrr�r��sh������ �J�
����X��
����X���#�#��X�#�#�#rr�c�.�eZdZdZd�Zed���ZdS)�BareQuotedStringr�c�Z�td�d�|D������S)Nr'c3�4K�|]}t|��V��dSrr)r*s  rr-z+BareQuotedString.__str__.<locals>.<genexpr>
s(����#9�#9�q�C��F�F�#9�#9�#9�#9�#9�#9r)rr0r1s rr2zBareQuotedString.__str__	s+���B�G�G�#9�#9�D�#9�#9�#9�9�9�:�:�:rc�@�d�d�|D����S)Nr'c3�4K�|]}t|��V��dSrr)r*s  rr-z)BareQuotedString.value.<locals>.<genexpr>r.rr/r1s rrzBareQuotedString.value�#���w�w�,�,�t�,�,�,�,�,�,rN)r7r`rar\r2rdrrlrrr�r�sC������%�J�;�;�;��-�-��X�-�-�-rr�c�J�eZdZdZd�Zd�Zed���Zed���ZdS)�Commentrpc�l��d�tdg�fd��D��dggg����S)Nr'rc�:��g|]}��|����Srl)�quote)r+r,r"s  �rrrz#Comment.__str__.<locals>.<listcomp>s#���9�9�9�q�T�Z�Z��]�]�9�9�9r�))r0r?r1s`rr2zComment.__str__sP����w�w�s� �E�9�9�9�9�D�9�9�9� �E�� "�	#�#�$�$�	$rc���|jdkrt|��St|���dd���dd���dd��S)Nrprrrz\(r�z\))r\rr)r"rs  rr�z
Comment.quotesc����y�(�(��u�:�:���5�z�z�!�!�$��/�/�7�7�"%�u�.�.�.5�g�"%�u�/.�/.�	.rc�@�d�d�|D����S)Nr'c3�4K�|]}t|��V��dSrr)r*s  rr-z"Comment.content.<locals>.<genexpr>%r.rr/r1s rrqzComment.content#r�rc��|jgSr)rqr1s rrJzComment.comments's����~�rN)	r7r`rar\r2r�rdrqrJrlrrr�r�sm�������J�$�$�$�.�.�.��-�-��X�-�����X���rr�c�T�eZdZdZed���Zed���Zed���ZdS)�AddressListzaddress-listc��d�|D��S)Nc�(�g|]}|jdk�
|��S)�address�r\r*s  rrrz)AddressList.addresses.<locals>.<listcomp>1�$��;�;�;�a�1�<��#:�#:��#:�#:�#:rrlr1s r�	addresseszAddressList.addresses/���;�;�4�;�;�;�;rc�6�td�|D��g��S)Nc3�:K�|]}|jdk�
|jV��dS�r�N�r\�	mailboxesr*s  rr-z(AddressList.mailboxes.<locals>.<genexpr>5s<����>�>��Q�\�9�%<�%<��K�%<�%<�%<�%<�>�>r�r?r1s rr�zAddressList.mailboxes3�6���>�>�!�>�>�>�?A�C�C�	Crc�6�td�|D��g��S)Nc3�:K�|]}|jdk�
|jV��dSr��r\�
all_mailboxesr*s  rr-z,AddressList.all_mailboxes.<locals>.<genexpr>:s<����>�>��Q�\�9�%<�%<��O�%<�%<�%<�%<�>�>rr�r1s rr�zAddressList.all_mailboxes8r�rN)r7r`rar\rdr�r�r�rlrrr�r�+sp�������J�
�<�<��X�<��C�C��X�C��C�C��X�C�C�Crr�c�T�eZdZdZed���Zed���Zed���ZdS)�Addressr�c�B�|djdkr
|djSdS)Nr�group�r\�display_namer1s rr�zAddress.display_nameBs)����7���(�(���7�'�'�)�(rc�v�|djdkr	|dgS|djdkrgS|djS�Nr�mailbox�invalid-mailboxr�r1s rr�zAddress.mailboxesGsE����7���*�*���G�9��
�!�W�
�#4�
4�
4��I��A�w� � rc��|djdkr	|dgS|djdkr	|dgS|djSr�r�r1s rr�zAddress.all_mailboxesOsL����7���*�*���G�9��
�!�W�
�#4�
4�
4���G�9���A�w�$�$rN)r7r`rar\rdr�r�r�rlrrr�r�>sh�������J�
�(�(��X�(��!�!��X�!��%�%��X�%�%�%rr�c�>�eZdZdZed���Zed���ZdS)�MailboxList�mailbox-listc��d�|D��S)Nc�(�g|]}|jdk�
|��S)r�r�r*s  rrrz)MailboxList.mailboxes.<locals>.<listcomp>]r�rrlr1s rr�zMailboxList.mailboxes[r�rc��d�|D��S)Nc�$�g|]
}|jdv�|��S))r�r�r�r*s  rrrz-MailboxList.all_mailboxes.<locals>.<listcomp>as/��?�?�?�a��|�=�=�=��=�=�=rrlr1s rr�zMailboxList.all_mailboxes_s"��?�?�4�?�?�?�	?rN�r7r`rar\rdr�r�rlrrr�r�WsM�������J�
�<�<��X�<��?�?��X�?�?�?rr�c�>�eZdZdZed���Zed���ZdS)�	GroupList�
group-listc�F�|r|djdkrgS|djS�Nrr�r�r1s rr�zGroupList.mailboxesis-���	�t�A�w�)�^�;�;��I��A�w� � rc�F�|r|djdkrgS|djSr�r�r1s rr�zGroupList.all_mailboxesos-���	�t�A�w�)�^�;�;��I��A�w�$�$rNr�rlrrr�r�esM�������J�
�!�!��X�!�
�%�%��X�%�%�%rr�c�T�eZdZdZed���Zed���Zed���ZdS)�Groupr�c�B�|djdkrgS|djS�N�r�r�r1s rr�zGroup.mailboxeszs&����7���-�-��I��A�w� � rc�B�|djdkrgS|djSr�r�r1s rr�zGroup.all_mailboxes�s&����7���-�-��I��A�w�$�$rc��|djSrA)r�r1s rr�zGroup.display_name�s���A�w�#�#rN)r7r`rar\rdr�r�r�rlrrr�r�vsh�������J�
�!�!��X�!�
�%�%��X�%�
�$�$��X�$�$�$rr�c��eZdZdZed���Zed���Zed���Zed���Zed���Z	dS)�NameAddr�	name-addrc�F�t|��dkrdS|djS�N�r)�lenr�r1s rr�zNameAddr.display_name�s#���t�9�9��>�>��4��A�w�#�#rc��|djS�N�����
local_partr1s rr�zNameAddr.local_part�s���B�x�"�"rc��|djSr���domainr1s rr�zNameAddr.domain�s���B�x��rc��|djSr�)�router1s rr�zNameAddr.route�s���B�x�~�rc��|djSr���	addr_specr1s rr�zNameAddr.addr_spec�s���B�x�!�!rN�
r7r`rar\rdr�r�r�r�r�rlrrr�r��s��������J�
�$�$��X�$�
�#�#��X�#�����X������X���"�"��X�"�"�"rr�c�j�eZdZdZed���Zed���Zed���Zed���ZdS)�	AngleAddrz
angle-addrc�8�|D]}|jdkr	|jcS�dS�N�	addr-spec)r\r�r�s  rr�zAngleAddr.local_part�s;���	$�	$�A��|�{�*�*��|�#�#�#�+�	$�	$rc�8�|D]}|jdkr	|jcS�dSr��r\r�r�s  rr�zAngleAddr.domain�s8���	 �	 �A��|�{�*�*��x����+�	 �	 rc�8�|D]}|jdkr	|jcS�dS)N�	obs-route)r\�domainsr�s  rr�zAngleAddr.route�s;���	!�	!�A��|�{�*�*��y� � � �+�	!�	!rc��|D];}|jdkr.|jr	|jcSt|j��|jzcS�<dS)Nr�z<>)r\r�r�rr�s  rr�zAngleAddr.addr_spec�s`���	�	�A��|�{�*�*��<�D��;�&�&�&�'���5�5���C�C�C�C�	+��4rN)	r7r`rar\rdr�r�r�r�rlrrr�r��s��������J�
�$�$��X�$�
� � ��X� �
�!�!��X�!�
����X���rr�c�(�eZdZdZed���ZdS)�ObsRouter�c��d�|D��S)Nc�2�g|]}|jdk�
|j��Sr�r�r*s  rrrz$ObsRoute.domains.<locals>.<listcomp>�s&��C�C�C�Q�!�,�(�*B�*B���*B�*B�*Brrlr1s rrzObsRoute.domains�s��C�C�$�C�C�C�CrN)r7r`rar\rdrrlrrrr�s7�������J�
�D�D��X�D�D�Drrc��eZdZdZed���Zed���Zed���Zed���Zed���Z	dS)�Mailboxr�c�B�|djdkr
|djSdS�Nrr�r�r1s rr�zMailbox.display_name�s)����7���,�,���7�'�'�-�,rc��|djSrAr�r1s rr�zMailbox.local_part�����A�w�!�!rc��|djSrAr�r1s rr�zMailbox.domain�s���A�w�~�rc�B�|djdkr
|djSdSr	)r\r�r1s rr�z
Mailbox.route�s(����7���,�,���7�=� �-�,rc��|djSrAr�r1s rr�zMailbox.addr_spec�s���A�w� � rNr�rlrrrr�s��������J�
�(�(��X�(��"�"��X�"�����X���!�!��X�!��!�!��X�!�!�!rrc�8�eZdZdZed���ZexZxZxZZ	dS)�InvalidMailboxr�c��dSrrlr1s rr�zInvalidMailbox.display_name�����trNr�rlrrrr�sB������"�J�
����X��/;�:�J�:��:�%�)�)�)rrc�6��eZdZdZdZe�fd���Z�xZS)�Domainr�Fc�t��d�t��j�����S�Nr'�r0rr�splitr9s �rr�z
Domain.domain��'����w�w�u�w�w�}�*�*�,�,�-�-�-r)r7r`rar\rErdr�rerfs@rrr�sL��������J��M�
�.�.�.�.��X�.�.�.�.�.rrc��eZdZdZdS)�DotAtom�dot-atomNrvrlrrrrs�������J�J�Jrrc��eZdZdZdZdS)�DotAtomTextz
dot-atom-textTN�r7r`rar\rErlrrrrs������ �J��M�M�Mrrc��eZdZdZdZdS)�
NoFoldLiteralzno-fold-literalFNrrlrrr!r!
s������"�J��M�M�Mrr!c�n�eZdZdZdZed���Zed���Zed���Zed���Z	dS)�AddrSpecr�Fc��|djSrAr�r1s rr�zAddrSpec.local_partrrc�F�t|��dkrdS|djS)N�r�)r�r�r1s rr�zAddrSpec.domains"���t�9�9�q�=�=��4��B�x��rc���t|��dkr
|djS|dj���|djz|dj���zS)Nr&rr�r�)r�r�rstrip�lstripr1s rrzAddrSpec.valuesW���t�9�9�q�=�=���7�=� ��A�w�}�#�#�%�%�d�1�g�m�3�D��G�M�4H�4H�4J�4J�J�Jrc���t|j��}t|��t|tz
��krt	|j��}n|j}|j�
|dz|jzS|S)N�@)�setr�r��
DOT_ATOM_ENDSrr�)r"�nameset�lps   rr�zAddrSpec.addr_spec$se���d�o�&�&���w�<�<�#�g�m�3�4�4�4�4��d�o�.�.�B�B���B��;�"���8�d�k�)�)��	rN)
r7r`rar\rErdr�r�rr�rlrrr#r#s��������J��M�
�"�"��X�"�����X��
�K�K��X�K�
����X���rr#c��eZdZdZdZdS)�ObsLocalPartzobs-local-partFNrrlrrr1r10s������!�J��M�M�Mrr1c�L��eZdZdZdZed���Ze�fd���Z�xZS)�DisplayNamezdisplay-nameFc���t|��}t|��dkr|jS|djdkr|�d��n7|ddjdkr t|ddd���|d<|djdkr|���n7|ddjdkr t|ddd���|d<|jS)Nrr�r�r�)rr�rr\�pop)r"r�s  rr�zDisplayName.display_name;s�����o�o���s�8�8�q�=�=��9���q�6���&�&��G�G�A�J�J�J�J��1�v�a�y�#�v�-�-�"�3�q�6�!�"�"�:�.�.��A���r�7���'�'��G�G�I�I�I�I��2�w�r�{�%��/�/�#�C��G�C�R�C�L�1�1��B���y�rc�t��d}|jrd}n|D]}|jdkrd}�t|��dkrt|rrdx}}|djdks|ddjdkrd}|djdks|ddjdkrd}|t|j��z|zSt��jS)	NFTr�rr'r�rkr�)r!r\r�rr�rr)r"r�r,�pre�postr%s     �rrzDisplayName.valueLs�������<�	!��E�E��
!�
!���<�?�2�2� �E���t�9�9��>�>�e�>��O�C�$��A�w�!�6�)�)�T�!�W�Q�Z�-B�F�-J�-J����B�x�"�F�*�*�d�2�h�r�l�.E�v�.M�.M����|�D�$5�6�6�6�t�;�;��7�7�=� r)	r7r`rar\rcrdr�rrerfs@rr3r36sh��������J���
����X�� �!�!�!�!��X�!�!�!�!�!rr3c�B�eZdZdZdZed���Zed���ZdS)�	LocalPartz
local-partFc�X�|djdkr
|djS|djS)Nrr�)r\r�rr1s rrzLocalPart.valuees-����7���0�0���7�'�'���7�=� rc�
�tg}t}d}|dtgzD]�}|jdkr�|r6|jdkr+|djdkrt|dd���|d<t|t��}|rG|jdkr<|djdkr+|�t|dd�����n|�|��|d}|}��t|dd���}|jS)NFrr��dotr�r�)�DOTr\r�
isinstancer�r)r"r��last�
last_is_tl�tok�is_tls      rr�zLocalPart.local_partls���e�����
���7�c�U�?�
	�
	�C��~��'�'���
/�s�~��6�6���H�'�6�1�1�#�D��"��I�.�.��B���s�I�.�.�E��
 �$�/�U�2�2���F�%��/�/��
�
�9�S����W�-�-�.�.�.�.��
�
�3�����r�7�D��J�J���A�b�D�	�"�"���y�rN)r7r`rar\rErdrr�rlrrr:r:`sR�������J��M�
�!�!��X�!�����X���rr:c�L��eZdZdZdZe�fd���Zed���Z�xZS)�
DomainLiteralzdomain-literalFc�t��d�t��j�����Srrr9s �rr�zDomainLiteral.domain�rrc�8�|D]}|jdkr	|jcS�dS)N�ptextr�r�s  r�ipzDomainLiteral.ip�s8���	�	�A��|�w�&�&��w����'�	�	r)	r7r`rar\rErdr�rIrerfs@rrErE�sg�������!�J��M�
�.�.�.�.��X�.�����X�����rrEc��eZdZdZdZdZdS)�MIMEVersionzmime-versionN)r7r`rar\�major�minorrlrrrKrK�s�������J��E��E�E�ErrKc�J�eZdZdZdZdZdZed���Zed���Z	dS)�	Parameter�	parameterF�us-asciic�.�|jr
|djndSr�)�	sectioned�numberr1s r�section_numberzParameter.section_number�s��"&��6�t�A�w�~�~�Q�6rc��|D]N}|jdkr	|jcS|jdkr-|D]*}|jdkr|D]}|jdkr
|jcccS��+�OdS)Nrr�r�r')r\r�r�s  r�param_valuezParameter.param_value�s����	<�	<�E���7�*�*��+�+�+�+���?�2�2�"�<�<�E��'�+?�?�?�%*�<�<�E�$�/�7�:�:�',�';� ;� ;� ;� ;� ;� ;� ;� ;����rrN)
r7r`rar\rS�extendedr�rdrUrWrlrrrOrO�s\�������J��I��H��G�
�7�7��X�7�
����X���rrOc��eZdZdZdS)�InvalidParameter�invalid-parameterNrvrlrrrZrZ�s������$�J�J�JrrZc�(�eZdZdZed���ZdS)�	Attribute�	attributec�V�|D]%}|j�d��r	|jcS�&dS)N�attrtext)r\�endswithrr�s  rr�zAttribute.stripped_value�sG���	#�	#�E���(�(��4�4�
#��{�"�"�"�
#�	#�	#rN�r7r`rar\rdr�rlrrr]r]�s2�������J�
�#�#��X�#�#�#rr]c��eZdZdZdZdS)�Section�sectionN)r7r`rar\rTrlrrrdrd�s�������J�
�F�F�Frrdc�(�eZdZdZed���ZdS)�Valuerc��|d}|jdkr|d}|j�d��r|jS|jS)Nrr�r�)r�r^zextended-attribute)r\rar�rr�s  rr�zValue.stripped_value�sS���Q�����v�%�%���G�E���$�$�D�F�F�	(��'�'��z�rNrbrlrrrgrg�s2�������J�
����X���rrgc�2�eZdZdZdZed���Zd�ZdS)�MimeParameters�mime-parametersFc#�K�i}|D]y}|j�d��s�|djdkr�/|dj���}||vrg||<||�|j|f���z|���D�]4\}}t|td�����}|dd}|j	}|j
sgt|��dkrT|dddkrB|ddj�tjd����|dd�}g}d}|D�]j\}	}
|	|kr`|
j
s-|
j�tjd�����@|
j�tjd����|dz
}|
j}|
j
r�	t j�|��}	|�|d	��}n-#t(t*f$r|�d
d	��}YnwxYwt-j|��r+|
j�tj����n1#t*$r$t j�|d���}YnwxYw|�|����ld
�|��}||fV���6dS)NrPrr^)�keyr�z.duplicate parameter name; duplicate(s) ignoredz+duplicate parameter name; duplicate ignoredz(inconsistent RFC2231 parameter numbering�surrogateescaperQzlatin-1)�encodingr')r\rar�stripr�rU�items�sortedrr�rXr�r!r�InvalidHeaderDefectrW�urllib�parse�unquote_to_bytes�decode�LookupError�UnicodeEncodeErrorr�_has_surrogates�UndecodableBytesDefect�unquoter0)r"�paramsrK�name�parts�first_paramr��value_parts�irU�paramrs            rr}zMimeParameters.params�sF�������	?�	?�E��#�,�,�[�9�9�
���Q�x�"�k�1�1����8�>�'�'�)�)�D��6�!�!�!��t���4�L����!5�u� =�>�>�>�>�!�<�<�>�>�3	�3	�K�D�%��5�j��m�m�4�4�4�E���(�1�+�K�!�)�G��'�
&�C��J�J��N�N���8�A�;�!�#�#��!�H�Q�K�'�.�.�v�/I�H�0J�0J�K�K�K�!�"�1�"�I�E��K��A�).�!
*�!
*�%���!�Q�&�&�!�>�I��
�,�,�V�-G�I�.K�.K�L�L�L� ��
�,�,�V�-G�F�.H�.H�I�I�I��Q����)���>�R�R� &�� =� =�e� D� D��P�$)�L�L��:K�$L�$L�E�E�� +�-?�@�P�P�P�
%*�L�L��=N�$O�$O�E�E�E�P����!�0��7�7�R�!�M�0�0��1N�1P�1P�Q�Q�Q���.�P�P�P�!'�� 4� 4�U�Y� 4� O� O����	P���� �"�"�5�)�)�)�)��G�G�K�(�(�E���+�����g3	�3	s$�I&�"G9�9'H#�"H#�&+J�Jc	��g}|jD]S\}}|r7|�d�|t|�������>|�|���Td�|��}|rd|zndS)N�{}={}z; rkr')r}r�r6rr0)r"r}r~rs    rr2zMimeParameters.__str__&s������;�	$�	$�K�D�%��
$��
�
�g�n�n�T�<��3F�3F�G�G�H�H�H�H��
�
�d�#�#�#�#����6�"�"��%�-�s�V�|�|�2�-rN)r7r`rar\rbrdr}r2rlrrrjrj�sJ������"�J��O�
�C�C��X�C�J.�.�.�.�.rrjc�(�eZdZdZed���ZdS)�ParameterizedHeaderValueFc�R�t|��D]}|jdkr	|jcS�iS)Nrk)�reversedr\r}r�s  rr}zParameterizedHeaderValue.params7s>���d�^�^�	$�	$�E���#4�4�4��|�#�#�#�5��	rN)r7r`rarbrdr}rlrrr�r�1s4�������O�
����X���rr�c��eZdZdZdZdZdZdS)�ContentTypezcontent-typeF�text�plainN)r7r`rar\rE�maintype�subtyperlrrr�r�?s"�������J��M��H��G�G�Grr�c��eZdZdZdZdZdS)�ContentDispositionzcontent-dispositionFN)r7r`rar\rE�content_dispositionrlrrr�r�Fs ������&�J��M����rr�c��eZdZdZdZdZdS)�ContentTransferEncodingzcontent-transfer-encodingF�7bitN)r7r`rar\rEr�rlrrr�r�Ls������,�J��M�
�C�C�Crr�c��eZdZdZdZdS)�HeaderLabelzheader-labelFNrrlrrr�r�Rs�������J��M�M�Mrr�c��eZdZdZdZd�ZdS)�MsgIDzmsg-idFc�0�t|��|jzSr)r�lineseprPs  rrQz
MsgID.fold[s���4�y�y�6�>�)�)rN)r7r`rar\rErQrlrrr�r�Ws-�������J��M�*�*�*�*�*rr�c��eZdZdZdS)�	MessageIDz
message-idNrvrlrrr�r�`s�������J�J�Jrr�c��eZdZdZdS)�InvalidMessageIDzinvalid-message-idNrvrlrrr�r�ds������%�J�J�Jrr�c��eZdZdZdS)�Header�headerNrvrlrrr�r�hrzrr�c�~��eZdZdZdZdZ�fd�Z�fd�Zd�Ze	d���Z
d�fd�	Zd�Ze	d	���Z
d
�Z�xZS)�TerminalTc�h��t���||��}||_g|_|Sr)r�__new__r\r!)�clsrr\r"r%s    �rr�zTerminal.__new__vs-����w�w���s�E�*�*��$�������rc���d�|jjt�������Sr4r5r9s �rr8zTerminal.__repr__|s,������t�~�6����8H�8H�8J�8J�K�K�Krc�N�t|jjdz|jz��dS)N�/)rUr%r7r\r1s rrXzTerminal.pprints'��
�d�n�%��+�d�o�=�>�>�>�>�>rc�*�t|j��Sr)�listr!r1s rr>zTerminal.all_defects�s���D�L�!�!�!rr'c	����d�||jj|jt	�����|jsdnd�|j����gS)Nz
{}{}/{}({}){}r'z {})r6r%r7r\rr8r!)r"rTr%s  �rrZzTerminal._pp�s_����&�&���N�#��O��G�G������l�B�B�B����T�\�(B�(B����	rc��dSrrlr1s r�pop_trailing_wszTerminal.pop_trailing_ws�rrc��gSrrlr1s rrJzTerminal.comments�s���	rc�.�t|��|jfSr)rr\r1s r�__getnewargs__zTerminal.__getnewargs__�s���4�y�y�$�/�*�*rr_)r7r`rarErcrbr�r8rXrdr>rZr�rJr�rerfs@rr�r�ps���������M����O������L�L�L�L�L�?�?�?��"�"��X�"��������������X��+�+�+�+�+�+�+rr�c�*�eZdZed���Zd�ZdS)�WhiteSpaceTerminalc��dSrjrlr1s rrzWhiteSpaceTerminal.value�rmrc��dS)NTrlr1s rrBz!WhiteSpaceTerminal.startswith_fws�s���trN�r7r`rardrrBrlrrr�r��s<������
����X������rr�c�*�eZdZed���Zd�ZdS)�
ValueTerminalc��|Srrlr1s rrzValueTerminal.value�s���rc��dS)NFrlr1s rrBzValueTerminal.startswith_fws�s���urNr�rlrrr�r��s<������
����X������rr�c�*�eZdZed���Zd�ZdS)�EWWhiteSpaceTerminalc��dSrrlr1s rrzEWWhiteSpaceTerminal.value�s���rrc��dSrrlr1s rr2zEWWhiteSpaceTerminal.__str__�s���rrN)r7r`rardrr2rlrrr�r��s<������
����X������rr�c��eZdZdS)�_InvalidEwErrorN)r7r`rarlrrr�r��s������;�;rr�r=�,zlist-separatorFr+zroute-component-markerz([{}]+)r'z[^{}]+z[\x00-\x20\x7F]c��	t|��}|r,|j�tj|����tj|��r.|j�tjd����dSdS)Nz*Non-ASCII characters found in header token)�_non_printable_finderr!r�r�NonPrintableDefectrrzr{)�xtext�non_printabless  r�_validate_xtextr��s���J�*�5�1�1�N��H�
�
���V�6�~�F�F�G�G�G���U�#�#�;�
�
���V�:�8�:�:�	;�	;�	;�	;�	;�;�;rc�n�	t|d��^}}g}d}d}tt|����D]D}||dkr
|rd}d}nd}�|rd}n|||vrn!|�||���E|dz}d�|��d�||d�g|z��|fS)Nr�FrTr')�
_wsp_splitter�ranger�r�r0)r�endchars�fragment�	remainder�vchars�escape�had_qp�poss        r�_get_ptext_to_endcharsr��s����)���2�2��H�y�
�F�
�F�
�F��S��]�]�#�#�����C�=�D� � ��
����������	��F�F�
�c�]�h�
&�
&��E��
�
�h�s�m�$�$�$�$��A�g��
�7�7�6�?�?�B�G�G�X�c�d�d�^�$4�y�$@�A�A�6�I�Irc��	|���}t|dt|��t|��z
�d��}||fS)N�fws)r)r�r�)r�newvaluer�s   r�get_fwsr�sK����|�|�~�~�H�
�U�#<�C��J�J�s�8�}�}�$<�#<�=�u�
E�
E�C���=�r�vtextc���	t��}|�d��s'tjd�|�����|dd��dd��^}}||dd�kr'tjd�|�����d�|��}t|��dkrW|dtvrH|dtvr9|�	d��dkr |�dd��^}}|dz|z}t|�����dkr,|j
�tjd	����||_
d�|��}	tjd|zdz��\}}}	}
n<#t t"f$r(t%d
�|j
�����wxYw||_|	|_|j
�|
��|r�|dt,vr(t/|��\}}|�|���9t1|d��^}}t3||��}
t5|
��|�|
��d�|��}|��|r;|dt,vr,|j
�tjd����||fS)N�=?z"expected encoded word but found {}r�z?=r�r'r�?zwhitespace inside encoded wordz!encoded word format invalid: '{}'z.missing trailing whitespace after encoded-word)r��
startswithr�HeaderParseErrorr6rr0r�r�countr!r�rsr��_ewrw�
ValueError�KeyErrorr�r�r�rI�WSPr�r�r�r�)r�
terminal_type�ewrBr��remstr�restr�r�r�r!rK�charsr�s              r�get_encoded_wordr�s���
���B����D�!�!�@��%�0�7�7��>�>�@�@�	@��A�B�B�i�o�o�d�A�.�.�O�C�)�
�e�A�B�B�i����%�0�7�7��>�>�@�@�	@�
�W�W�Y�
�
�F��F���a����q�	�Y����q�	�Y����	�	�#������!�<�<��a�0�0���y��D�j�4���
�3�9�9�;�;���!���
�
���&�4�,�.�.�	/�	/�	/�
�B�F��G�G�I���E�@�'*�z�$��*�t�2C�'D�'D�$��g�t�W�W����!�@�@�@��/�6�6�r�v�>�>�@�@�	@�@�����B�J��B�G��J���g����
�	"���7�c�>�>�!�$�-�-�K�E�4��I�I�e�����)�$��2�2���	��e�]�3�3�������
�	�	�%�����w�w�y�!�!���	"�
�?��q���$�$�
�
���&�4�<�>�>�	?�	?�	?�
�u�9�s�F.�.9G'c��	t��}|�r�|dtvr(t|��\}}|�|���:d}|�d��r�	t|d��\}}d}t
|��dkr?|djdkr.|j�tj
d����d}|r=t
|��d	kr*|d
jdkrt|dd��|d<|�|����#t$rd}Yntj
$rYnwxYwt|d	��^}}|r1t�|��r|�d��^}}t%|d��}t'|��|�|��d�|��}|���|S)
NrTr��utextr�r�z&missing whitespace before encoded wordFr����r�r')rtr�r�r�r�r�r�r\r!rrsr�r�r�r��rfc2047_matcher�search�	partitionr�r�r0)rrurK�valid_ew�have_wsrBr�r�s        r�get_unstructuredr�Ks)���,)�*�*�L�
�(#���8�s�?�?�"�5�>�>�L�E�5�����&�&�&�������D�!�!�	�
�/��w�?�?���u����|�$�$�q�(�(�#�B�'�2�e�;�;�$�,�3�3�F�4N�D�5F�5F�G�G�G�"'���5�s�<�0�0�1�4�4�#�B�'�2�n�D�D�+?�(��,�e�,5�,5��R�(��#�#�E�*�*�*���%#�
!�
!�
!� �����*�
�
�
���
����"(��q�1�1���i��	4��.�.�s�3�3�	4�#�o�o�d�3�3�O�C�)��c�7�+�+����������E�"�"�"����	�"�"��Q�(#�R�s�"D�D>�-D>�=D>c�r�	t|d��\}}}t|d��}t|��||fS)Nz()rH)r�r�r��rrH�_s   r�get_qp_ctextr��sE��
�-�U�D�9�9�O�E�5�!��u�g�.�.�E��E�����%�<�rc�r�	t|d��\}}}t|d��}t|��||fS)NrrH)r�r�r�r�s   r�get_qcontentr��sE���-�U�C�8�8�O�E�5�!��%��)�)�E��E�����%�<�rc��	t|��}|s'tjd�|�����|���}|t|��d�}t
|d��}t|��||fS)Nzexpected atext but found '{}'�atext)�_non_atom_end_matcherrr�r6r�r�r�r�)r�mr�s   r�	get_atextr��s����
	�e�$�$�A��;��%�+�2�2�5�9�9�;�;�	;�
�G�G�I�I�E��#�e�*�*�+�+��E��%��)�)�E��E�����%�<�rc���	|ddkr'tjd�|�����t��}|dd�}|r3|ddkr't	|��\}}|�|��|�r/|ddk�r"|dtvrt|��\}}n�|dd�dkr�d}	t|��\}}|j	�tj
d����d	}n'#tj$rt	|��\}}YnwxYw|rNt|��dkr;|d
jdkr*|djd
krt|d
d��|d
<nt	|��\}}|�|��|r
|ddk��"|s0|j	�tj
d����||fS||dd�fS)Nrrzexpected '"' but found '{}'r�r�r�Fz!encoded word inside quoted stringTr�r�r�r�z"end of header inside quoted string)rr�r6r�r�r�r�r�r�r!rsr�r\r�)r�bare_quoted_stringrKr�s    r�get_bare_quoted_stringr��sJ���
�Q�x�3����%�*�1�1�%�8�8�:�:�	:�)�+�+���!�"�"�I�E��)��q��S���#�E�*�*���u��!�!�%�(�(�(�
�)�E�!�H��O�O���8�s�?�?�"�5�>�>�L�E�5�5�
�2�A�2�Y�$�
�
��H�
3�/��6�6���u�"�*�1�1�&�2L�7�39�39�:�:�:������*�
3�
3�
3�+�E�2�2���u�u�u�
3�����
7�C� 2�3�3�a�7�7�&�r�*�5��>�>�*�2�.�9�^�K�K�-A�*�2�.��.7�.7�&�r�*��(��.�.�L�E�5��!�!�%�(�(�(�+�)�E�!�H��O�O�,�)��"�)�)�&�*D�0�+2�+2�	3�	3�	3�!�5�(�(��u�Q�R�R�y�(�(s�AD�!D*�)D*c�"�	|r3|ddkr'tjd�|�����t��}|dd�}|r�|ddkrv|dtvrt|��\}}n1|ddkrt
|��\}}nt|��\}}|�|��|r|ddk�v|s0|j	�tj
d����||fS||dd�fS)Nrrzexpected '(' but found '{}'r�r�zend of header inside comment)rr�r6r�r�r��get_commentr�r�r!rs)rrprKs   rrr�s7���

�9��q��S����%�)�0�0��7�7�9�9�	9��i�i�G��!�"�"�I�E�
��E�!�H��O�O���8�s�?�?�"�5�>�>�L�E�5�5�
�1�X��_�_�&�u�-�-�L�E�5�5�'��.�.�L�E�5����u������E�!�H��O�O�������v�9�*� ,� ,�	-�	-�	-���~���E�!�"�"�I��rc��	t��}|ri|dtvrZ|dtvrt|��\}}nt	|��\}}|�|��|r|dtv�Z||fSrA)r��CFWS_LEADERr�r�rr�)rr�rKs   r�get_cfwsrs�����:�:�D�
��E�!�H��+�+���8�s�?�?�"�5�>�>�L�E�5�5�&�u�-�-�L�E�5����E������E�!�H��+�+���;�rc�V�	t��}|r6|dtvr't|��\}}|�|��t	|��\}}|�|��|r6|dtvr't|��\}}|�|��||fSrA)r�rrr�r�)r�
quoted_stringrKs   r�get_quoted_stringrs����!�N�N�M��$��q��[�(�(�������u����U�#�#�#�)�%�0�0�L�E�5���������$��q��[�(�(�������u����U�#�#�#��%��rc�f�	t��}|r6|dtvr't|��\}}|�|��|r6|dtvr'tjd�|�����|�d��r;	t|��\}}n9#t
j$rt|��\}}YnwxYwt|��\}}|�|��|r6|dtvr't|��\}}|�|��||fS)Nrzexpected atom but found '{}'r�)r�rrr��	ATOM_ENDSrr�r6r�r�r�)rr�rKs   r�get_atomr
!sN����6�6�D����q��[�(�(�������u����E�����:��q��Y�&�&��%�*�1�1�%�8�8�:�:�	:�������(�	,�+�E�2�2�L�E�5�5���&�	,�	,�	,�%�U�+�+�L�E�5�5�5�	,����
!��'�'���u��K�K��������q��[�(�(�������u����E������;�s�B)�)!C
�C
c��	t��}|r|dtvr'tjd�|�����|ry|dtvrjt|��\}}|�|��|r0|ddkr$|�t��|dd�}|r|dtv�j|dtur*tjd�d|z�����||fS)Nrz8expected atom at a start of dot-atom-text but found '{}'r	r�r�z4expected atom at end of dot-atom-text but found '{}')rr	rr�r6r�r�r>)r�
dot_atom_textrKs   r�get_dot_atom_textr
<s��� �M�M�M��:�E�!�H�	�)�)��%�'+�+1�6�%�=�=�:�:�	:�
��E�!�H�I�-�-� ��'�'���u����U�#�#�#��	�U�1�X��_�_�� � ��%�%�%��!�"�"�I�E���E�!�H�I�-�-��R��C����%�'�#�V�C��I�.�.�0�0�	0��%��rc���	t��}|dtvr't|��\}}|�|��|�d��r;	t|��\}}n9#tj$rt|��\}}YnwxYwt|��\}}|�|��|r6|dtvr't|��\}}|�|��||fS)Nrr�)	rrrr�r�r�rr�r
)r�dot_atomrKs   r�get_dot_atomrOs���
�y�y�H��Q�x�;���������u��������������0�	4�+�E�2�2�L�E�5�5���&�	4�	4�	4�-�U�3�3�L�E�5�5�5�	4����
)��/�/���u��O�O�E�������q��[�(�(�������u���������U�?�s�A/�/!B�Bc�b�	|dtvrt|��\}}nd}|stjd���|ddkrt	|��\}}nH|dt
vr'tjd�|�����t|��\}}|�|g|dd�<||fS)Nrz5Expected 'atom' or 'quoted-string' but found nothing.rz1Expected 'atom' or 'quoted-string' but found '{}')rrrr�r�SPECIALSr6r
)r�leaderrKs   r�get_wordrhs����
�Q�x�;��� ����
�������E��%�C�E�E�	E��Q�x��}�}�(��/�/���u�u�	�q��X�	�	��%�'7�7=�v�e�}�}�F�F�	F� ������u�
���H��b�q�b�	��%�<�rc��	t��}	t|��\}}|�|��nA#tj$r/|j�tjd����YnwxYw|�r
|dtvr�|ddkrQ|�t��|j�tj	d����|dd�}n�	t|��\}}nd#tj$rR|dtvr?t|��\}}|j�tj	d����n�YnwxYw|�|��|r|dtv��||fS)Nzphrase does not start with wordrr	zperiod in 'phrase'r�zcomment found without atom)rxrr�rr�r!rs�PHRASE_ENDSr>�ObsoleteHeaderDefectrr)rryrKs   r�
get_phraser�s���
��X�X�F�0�������u��
�
�e�������"�0�0�0�����f�8�-�/�/�	0�	0�	0�	0�	0�0�����!�E�!�H�K�/�/���8�S�=�=��M�M�#�����N�!�!�&�"=�$�#&�#&�
'�
'�
'��!�"�"�I�E�E�
�'������u�u���*�
�
�
���8�{�*�*�#+�E�?�?�L�E�5��N�)�)�&�*E�4�+6�+6�7�7�7�7��7�7�
����
�M�M�%� � � �!�!�E�!�H�K�/�/�"�5�=�s"�'9�;A7�6A7�*C=�=AE�Ec��	t��}d}|dtvrt|��\}}|s'tjd�|�����	t
|��\}}nh#tj$rV	t|��\}}n?#tj$r-|ddkr|dtvr�t��}YnwxYwYnwxYw|�|g|dd�<|�
|��|r�|ddks|dtvr�tt|��|z��\}}|j
dkr-|j�
tjd����n,|j�
tjd����||d<	|j�d��n<#t&$r/|j�
tjd����YnwxYw||fS)	Nrz"expected local-part but found '{}'r�invalid-obs-local-partz<local-part is not dot-atom, quoted-string, or obs-local-partz,local-part is not a dot-atom (contains CFWS)�asciiz)local-part contains non-ASCII characters))r:rrrr�r6rrrrr��get_obs_local_partrr\r!rsrr�encodery�NonASCIILocalPartDefect)rr�rrK�obs_local_parts     r�get_local_partr �sl������J�
�F��Q�x�;��� ����
����@��%�0�7�7��>�>�@�@�	@� �#�E�*�*���u�u���"� � � �	 �#�E�?�?�L�E�5�5���&�	 �	 �	 ��Q�x�4���E�!�H��$;�$;���K�K�E�E�E�	 ������ �������H��b�q�b�	����e�����'�%��(�D�.�.�E�!�H�K�$?�$?� 2�3�z�?�?�U�3J� K� K�����$�(@�@�@���%�%�f�&@�N�'P�'P�
Q�
Q�
Q�
Q�
��%�%�f�&A�>�'@�'@�
A�
A�
A�&�
�1�
�>������(�(�(�(���>�>�>���!�!�&�"@�;�#=�#=�	>�	>�	>�	>�	>�>�����u��sH�A0�0C�B�C�9C�C�C�C�C� F;�;6G4�3G4c� �	t��}d}|�r�|ddks|dtv�r�|ddkrU|r,|j�t	jd����|�t��d}|dd�}��|ddkrb|�t|dd����|dd�}|j�t	jd	����d}��|r=|d
jdkr,|j�t	jd����	t|��\}}d}n7#tj
$r%|dtvr�t|��\}}YnwxYw|�|��|r|ddk��|dtv���|djdks"|djd
kr=|djdkr,|j�t	jd����|d
jdks"|d
jd
kr=|djdkr,|j�t	jd����|jrd|_||fS)NFrrr	zinvalid repeated '.'Tr��misplaced-specialz/'\' character outside of quoted-string/ccontentr�r=zmissing '.' between wordsr�z!Invalid leading '.' in local partr�z"Invalid trailing '.' in local partr)
r1rr!r�rrsr>r�r\rr�rr)rr�last_non_ws_was_dotrKs    rrr�s����!�^�^�N���
�%�U�1�X�t�^�^�u�Q�x�{�'B�'B���8�s�?�?�"�
-��&�-�-�f�.H�*�/,�/,�-�-�-��!�!�#�&�&�&�"&���!�"�"�I�E��
�1�X�t�^�^��!�!�-��a��0C�#E�#E�
F�
F�
F��!�"�"�I�E��"�)�)�&�*D�B�+D�+D�
E�
E�
E�"'����	.�n�R�0�;�u�D�D��"�)�)�&�*D�+�+-�+-�
.�
.�
.�	+�#�E�?�?�L�E�5�"'�����&�	+�	+�	+��Q�x�{�*�*��#�E�?�?�L�E�5�5�5�	+����	���e�$�$�$�7�%�U�1�X�t�^�^�u�Q�x�{�'B�'B�8	�q��$��-�-��1��(�&�0�0��1��(�%�/�/���%�%�f�&@�/�'1�'1�	2�	2�	2��r��%��.�.��2��)�6�1�1��2��)�5�0�0���%�%�f�&@�0�'2�'2�	3�	3�	3���=�$<��!��5� � s�E�1F	�F	c���	t|d��\}}}t|d��}|r,|j�t	jd����t
|��||fS)Nz[]rHz(quoted printable found in domain-literal)r�r�r!r�rrr�)rrHr�s   r�	get_dtextr%sz��
�2�%��>�>��E�5�&��%��)�)�E�
�9�
�
���V�8�6�8�8�	9�	9�	9��E�����%�<�rc��|rdS|�tjd����|�tdd����dS)NFz"end of input inside domain-literal�]�domain-literal-endT)r�rrsr�)r�domain_literals  r�_check_for_early_dl_endr*s]�����u����&�4�,�.�.�/�/�/����-��-A�B�B�C�C�C��4rc�N�	t��}|dtvr't|��\}}|�|��|st	jd���|ddkr't	jd�|�����|dd�}t||��r||fS|�tdd����|dtvr't|��\}}|�|��t|��\}}|�|��t||��r||fS|dtvr't|��\}}|�|��t||��r||fS|ddkr't	jd�|�����|�tdd	����|dd�}|r6|dtvr't|��\}}|�|��||fS)
Nrzexpected domain-literal�[z6expected '[' at start of domain-literal but found '{}'r�zdomain-literal-startr'z4expected ']' at end of domain-literal but found '{}'r()rErrr�rr�r6r*r�r�r�r%)rr)rKs   r�get_domain_literalr-"s;���#�_�_�N��Q�x�;���������u����e�$�$�$��A��%�&?�@�@�@��Q�x�3����%�'!�!'�����0�0�	0��!�"�"�I�E��u�n�5�5�%��u�$�$����-��-C�D�D�E�E�E��Q�x�3����u�~�~���u����e�$�$�$��U�#�#�L�E�5����%� � � ��u�n�5�5�%��u�$�$��Q�x�3����u�~�~���u����e�$�$�$��u�n�5�5�%��u�$�$��Q�x�3����%�'!�!'�����0�0�	0����-��-A�B�B�C�C�C��!�"�"�I�E��%��q��[�(�(�������u����e�$�$�$��5� � rc��	t��}d}|dtvrt|��\}}|s'tjd�|�����|ddkr5t
|��\}}|�|g|dd�<|�|��||fS	t|��\}}n'#tj$rt|��\}}YnwxYw|r |ddkrtjd���|�|g|dd�<|�|��|r�|ddkr�|j
�tjd����|djdkr
|d|dd�<|rc|ddkrW|�t��t|d	d���\}}|�|��|r|ddk�W||fS)
Nrzexpected domain but found '{}'r,r+zInvalid Domainr	z(domain is not a dot-atom (contains CFWS)rr�)rrrrr�r6r-r�rr
r!rr\r>)rr�rrKs    r�
get_domainr/Is����X�X�F�
�F��Q�x�;��� ����
����<��%�,�3�3�E�:�:�<�<�	<��Q�x�3���)�%�0�0���u�����E�"�1�"�I��
�
�e�����u�}��'�#�E�*�*���u�u���"�'�'�'�������u�u�u�'�����8��q��S����%�&6�7�7�7�
���H��b�q�b�	�
�M�M�%�����!��q��S�������f�9�6�8�8�	9�	9�	9��!�9��:�-�-��q�	�F�1�1�1�I��	!��a��C����M�M�#����#�E�!�"�"�I�.�.�L�E�5��M�M�%� � � ��	!��a��C����5�=�s�B1�1!C�Cc��	t��}t|��\}}|�|��|r|ddkr0|j�t	jd����||fS|�t
dd����t|dd���\}}|�|��||fS)Nrr+z#addr-spec local part with no domain�address-at-symbolr�)r#r r�r!rrsr�r/)rr�rKs   r�
get_addr_specr2os�����
�
�I�!�%�(�(�L�E�5�
���U����� �E�!�H��O�O��� � ��!;�1�"3�"3�	4�	4�	4��%���
���]�3�(;�<�<�=�=�=��e�A�B�B�i�(�(�L�E�5�
���U�����e��rc���	t��}|r�|ddks|dtvr�|dtvr(t|��\}}|�|��n0|ddkr$|�t��|dd�}|r|ddk�u|dtv��|r|ddkr'tjd�|�����|�t��t|dd���\}}|�|��|r�|ddkr�|�t��|dd�}|sn�|dtvr't|��\}}|�|��|ddkrI|�t��t|dd���\}}|�|��|r|ddk��|stjd���|ddkr'tjd�|�����|�tdd	����||dd�fS)
Nrr�r�r+z(expected obs-route domain but found '{}'z%end of header while parsing obs-route�:z4expected ':' marking end of obs-route but found '{}'zend-of-obs-route-marker)rrrr��
ListSeparatorrr�r6�RouteComponentMarkerr/r�)r�	obs_routerKs   r�
get_obs_router8s�����
�
�I�
��U�1�X�s�]�]�e�A�h�+�&=�&=���8�{�"�"�#�E�?�?�L�E�5����U�#�#�#�#�
�1�X��_�_����]�+�+�+��!�"�"�I�E�
��U�1�X�s�]�]�e�A�h�+�&=�&=��F�E�!�H��O�O��%�6�=�=�e�D�D�F�F�	F�
���)�*�*�*��e�A�B�B�i�(�(�L�E�5�
���U����
�$�E�!�H�c�M�M�����'�'�'��a�b�b�	���	����8�{�"�"�#�E�?�?�L�E�5����U�#�#�#���8�s�?�?����1�2�2�2�%�e�A�B�B�i�0�0�L�E�5����U�#�#�#��$�E�!�H�c�M�M��O��%�&M�N�N�N��Q�x�3����%�('�'-�v�e�}�}�6�6�	6�
���]�3�(A�B�B�C�C�C��e�A�B�B�i��rc�(�	t��}|dtvr't|��\}}|�|��|r|ddkr't	jd�|�����|�tdd����|dd�}|ddkr]|�tdd����|j�t	j	d����|dd�}||fS	t|��\}}n�#tj$r�	t|��\}}|j�t	jd	����n:#tj$r(t	jd
�|�����wxYw|�|��t|��\}}YnwxYw|�|��|r|ddkr|dd�}n,|j�t	j	d����|�tdd����|r6|dtvr't|��\}}|�|��||fS)Nr�<z"expected angle-addr but found '{}'zangle-addr-startr��>zangle-addr-endznull addr-spec in angle-addrz*obsolete route specification in angle-addrz.expected addr-spec or obs-route but found '{}'z"missing trailing '>' on angle-addr)
r�rrr�rr�r6r�r!rsr2r8r)r�
angle_addrrKs   r�get_angle_addrr=�s�������J��Q�x�;���������u����%� � � ��@�E�!�H��O�O��%�0�7�7��>�>�@�@�	@����m�C�);�<�<�=�=�=��!�"�"�I�E�
�Q�x�3������-��-=�>�>�?�?�?���!�!�&�"<�*�#,�#,�	-�	-�	-��a�b�b�	���5� � �,�$�U�+�+���u�u���"�	,�	,�	,�	P�(��/�/�L�E�5���%�%�f�&A�<�'>�'>�
?�
?�
?�
?���&�	P�	P�	P��)�@�G�G��N�N�P�P�
P�	P����	���%� � � �$�U�+�+���u�u�u�	,�������e�����3��q��S����a�b�b�	�����!�!�&�"<�0�#2�#2�	3�	3�	3����m�C�)9�:�:�;�;�;��!��q��[�(�(�������u����%� � � ��u��s*�D%�%G�5>E4�3G�47F+�+*G�Gc��	t��}t|��\}}|�|dd���|jdd�|_||fSr)r3rrIr!)rr�rKs   r�get_display_namer?�s]����=�=�L��e�$�$�L�E�5�����a�a�a��!�!�!� �=����+�L�����rc�j�	t��}d}|dtvr;t|��\}}|s'tjd�|�����|ddkr�|dtvr'tjd�|�����t|��\}}|s'tjd�|�����|�|g|ddd�<d}|�|��t|��\}}|�|g|dd�<|�|��||fS)Nrz!expected name-addr but found '{}'r:)
r�rrrr�r6rr?r�r=)r�	name_addrrrKs    r�
get_name_addrrB�sf����
�
�I�
�F��Q�x�;��� ����
����	D��)�3�:�:�6�B�B�D�D�
D��Q�x�3�����8�{�"�"��)�3�:�:�5�A�A�C�C�
C�'��.�.���u��	C��)�3�:�:�5�A�A�C�C�
C���"�8�E�!�H�R�a�R�L��F��������!�%�(�(�L�E�5�
���H��b�q�b�	�
���U�����e��rc��	t��}	t|��\}}nc#tj$rQ	t	|��\}}n:#tj$r(tjd�|�����wxYwYnwxYwt
d�|jD����rd|_|�	|��||fS)Nzexpected mailbox but found '{}'c3�JK�|]}t|tj��V��dSr)r?rrsr*s  rr-zget_mailbox.<locals>.<genexpr>sC����3�3���a��3�4�4�3�3�3�3�3�3rr�)
rrBrr�r2r6�anyr>r\r�)rr�rKs   r�get_mailboxrFs���
�i�i�G�A�$�U�+�+���u�u���"�A�A�A�	A�(��/�/�L�E�5�5���&�	A�	A�	A��)�1�8�8��?�?�A�A�
A�	A�����5�A�����3�3� %� 1�3�3�3�3�3�/�.����N�N�5�����E�>��&�$�B�A�B�7A>�>B�Bc�,�	t��}|r�|d|vrv|dtvr4|�t|dd����|dd�}n't	|��\}}|�|��|r
|d|v�v||fS)Nrr"r�)rrr�r�r)rr��invalid_mailboxrKs    r�get_invalid_mailboxrJs����%�&�&�O�
�*�E�!�H�H�,�,���8�{�"�"��"�"�=��q��1D�$F�$F�
G�
G�
G��!�"�"�I�E�E�%�e�,�,�L�E�5��"�"�5�)�)�)��*�E�!�H�H�,�,��E�!�!rc��	t��}|�rd|ddk�rW	t|��\}}|�|���n}#tj$�rjd}|dt
vr�t
|��\}}|r
|ddvrB|�|��|j�tjd����n�t|d��\}}|�|g|dd�<|�|��|j�tj
d����n�|ddkr-|j�tjd����n^t|d��\}}|�|g|dd�<|�|��|j�tj
d����YnwxYw|rm|ddvrc|d}d|_t|d��\}}|�|��|j�tj
d����|r0|ddkr$|�t��|d	d�}|r
|ddk��W||fS)
Nr�;z,;zempty element in mailbox-listzinvalid mailbox in mailbox-listr�r�r�r�)r�rFr�rr�rrr!rrJrsr\rIr5)r�mailbox_listrKrr�s     r�get_mailbox_listrN*s���
��=�=�L�
�(�E�!�H��O�O�	8�&�u�-�-�L�E�5�����&�&�&�&���&�	8�	8�	8��F��Q�x�;�&�&� (����
����
<��a��D� 0� 0� �'�'��/�/�/� �(�/�/��0K�7�19�19�:�:�:�:�$7�u�d�#C�#C�L�E�5��)�%+�H��b�q�b�	� �'�'��.�.�.� �(�/�/��0J�9�1;�1;�<�<�<�<��q��S����$�+�+�F�,G�3�-5�-5�6�6�6�6� 3�5�$�?�?���u��%�!'��E�"�1�"�I��#�#�E�*�*�*��$�+�+�F�,F�5�-7�-7�8�8�8���/	8����2�	4�U�1�X�T�)�)�#�2�&�G�!2�G��.�u�d�;�;�L�E�5��N�N�5�!�!�!�� �'�'��(B�1�)3�)3�
4�
4�
4��	�U�1�X��_�_����
�.�.�.��!�"�"�I�E�Q�(�E�!�H��O�O�R���s�'A
�
E7G�Gc��	t��}|s0|j�tjd����||fSd}|r�|dt
vr~t
|��\}}|sE|j�tjd����|�|��||fS|ddkr|�|��||fSt|��\}}t|j	��dkr\|�|�|��|�
|��|j�tjd����||fS|�|g|dd�<|�|��||fS)Nzend of header before group-listrzend of header in group-listrLzgroup-list with empty entries)r�r!r�rrsrrrNr�r�rIr)r�
group_listrrKs    r�get_group_listrQcs�������J��!���!�!�&�"<�-�#/�#/�	0�	0�	0��5� � �
�F��%��q��[�(�(� ����
����	%�
��%�%�f�&@�-�'/�'/�
0�
0�
0����f�%�%�%��u�$�$���8�s�?�?����f�%�%�%��u�$�$�#�E�*�*�L�E�5�
�5�����"�"������f�%�%�%����%� � � ���!�!�&�"=�+�#-�#-�	.�	.�	.��5� � �
���H��b�q�b�	����e�����u��rc��	t��}t|��\}}|r|ddkr'tjd�|�����|�|��|�t
dd����|dd�}|r;|ddkr/|�t
dd����||dd�fSt|��\}}|�|��|s-|j�tj	d����n3|ddkr'tjd	�|�����|�t
dd����|dd�}|r6|dtvr't|��\}}|�|��||fS)
Nrr4z8expected ':' at end of group display name but found '{}'zgroup-display-name-terminatorr�rLzgroup-terminatorzend of header in groupz)expected ';' at end of group but found {})r�r?rr�r6r�r�rQr!rsrr)rr�rKs   r�	get_grouprS�s����
�G�G�E�#�E�*�*�L�E�5��9�E�!�H��O�O��%�'*�*0�&��-�-�9�9�	9�	�L�L�����	�L�L��s�$C�D�D�E�E�E��!�"�"�I�E�� ��q��S���
���]�3�(:�;�;�<�<�<��e�A�B�B�i���!�%�(�(�L�E�5�	�L�L������G�
�
���V�7�$�&�&�	'�	'�	'�	'�	�q��S����%�7�>�>�u�E�E�G�G�	G�	�L�L��s�$6�7�7�8�8�8��!�"�"�I�E����q��[�(�(�������u�
���U�����%�<�rc�@�	t��}	t|��\}}nc#tj$rQ	t	|��\}}n:#tj$r(tjd�|�����wxYwYnwxYw|�|��||fS)Nzexpected address but found '{}')r�rSrr�rFr6r�)rr�rKs   r�get_addressrU�s���� �i�i�G�A� ��'�'���u�u���"�A�A�A�	A�&�u�-�-�L�E�5�5���&�	A�	A�	A��)�1�8�8��?�?�A�A�
A�	A�����5�A�����N�N�5�����E�>�rGc��	t��}|�rm	t|��\}}|�|���n�#tj$�r�}d}|dt
vr�t
|��\}}|r|ddkrC|�|��|j�tjd�����nt|d��\}}|�|g|dd�<|�t|g����|j�tjd����n�|ddkr-|j�tjd����nlt|d��\}}|�|g|dd�<|�t|g����|j�tjd����Yd}~nd}~wwxYw|ru|ddkri|dd}d|_t|d��\}}|�
|��|j�tjd����|r$|�t��|dd�}|��m||fS)	Nrr�z"address-list entry with no contentzinvalid address in address-listzempty element in address-listr�r�r�)r�rUr�rr�rrr!rrJr�rsr\rIr5)r�address_listrK�errrr�s      r�get_address_listrY�s�����=�=�L�
�(�	8�&�u�-�-�L�E�5�����&�&�&�&���&�	8�	8�	8��F��Q�x�;�&�&� (����
����
<��a��C��� �'�'��/�/�/� �(�/�/��0K�<�1>�1>�?�?�?�?�$7�u�c�#B�#B�L�E�5��)�%+�H��b�q�b�	� �'�'����(8�(8�9�9�9� �(�/�/��0J�9�1;�1;�<�<�<�<��q��S����$�+�+�F�,G�3�-5�-5�6�6�6�6� 3�5�#�>�>���u��%�!'��E�"�1�"�I��#�#�G�U�G�$4�$4�5�5�5��$�+�+�F�,F�5�-7�-7�8�8�8����������/	8����2�	4�U�1�X��_�_�#�2�&�q�)�G�!2�G��.�u�c�:�:�L�E�5��N�N�5�!�!�!�� �'�'��(B�1�)3�)3�
4�
4�
4��	����
�.�.�.��!�"�"�I�E�Q�(�R���s�'=�G�
FG�Gc�H�	t��}|s'tjd�|�����|ddkr'tjd�|�����|�tdd����|dd�}t
|��\}}|�|��|r|ddkr'tjd�|�����|�tdd	����||dd�fS)
Nz'expected no-fold-literal but found '{}'rr,z;expected '[' at the start of no-fold-literal but found '{}'zno-fold-literal-startr�r'z9expected ']' at the end of no-fold-literal but found '{}'zno-fold-literal-end)r!rr�r6r�r�r%)r�no_fold_literalrKs   r�get_no_fold_literalr\�s4���#�o�o�O��E��%�5�<�<�U�C�C�E�E�	E��Q�x�3����%�
�#�V�E�]�]�,�,�	,����=��.E�F�F�G�G�G��!�"�"�I�E��U�#�#�L�E�5����5�!�!�!��,�E�!�H��O�O��%�
�#�V�E�]�]�,�,�	,����=��.C�D�D�E�E�E��E�!�"�"�I�%�%rc�(�	t��}|r6|dtvr't|��\}}|�|��|r|ddkr't	jd�|�����|�tdd����|dd�}	t|��\}}n�#tj$r}	t|��\}}|j
�t	jd����n:#tj$r(t	jd�|�����wxYwYnwxYw|�|��|r|ddkrk|j
�t	jd	����|r9|dd
kr-|�td
d����|dd�}||fS|�tdd����|dd�}	t|��\}}n�#tj$r�	t|��\}}n�#tj$r�}	t|��\}}|j
�t	jd
����n:#tj$r(t	jd�|�����wxYwYd}~nd}~wwxYwYnwxYw|�|��|r|dd
kr|dd�}n,|j
�t	jd����|�td
d����|r6|dtvr't|��\}}|�|��||fS)Nrr:zexpected msg-id but found '{}'zmsg-id-startr�zobsolete id-left in msg-idz4expected dot-atom-text or obs-id-left but found '{}'r+zmsg-id with no id-rightr;z
msg-id-endr1zobsolete id-right in msg-idzFexpected dot-atom-text, no-fold-literal or obs-id-right but found '{}'zmissing trailing '>' on msg-id)r�rrr�rr�r6r�r
rr!rrsr\r/)r�msg_idrK�es    r�
get_msg_idr`s���
�W�W�F����q��[�(�(�������u��
�
�e�����<�E�!�H��O�O��%�,�3�3�E�:�:�<�<�	<�
�M�M�-��^�4�4�5�5�5��!�"�"�I�E�1�(��/�/���u�u���"�	1�	1�	1�	1�-�e�4�4�L�E�5��N�!�!�&�"=�,�#.�#.�
/�
/�
/�
/���&�	1�	1�	1��)�"�"(�&��-�-�1�1�
1�	1����
/�
/�		1�����M�M�%�����	�E�!�H��O�O�����f�8�%�'�'�	(�	(�	(�
�	�U�1�X��_�_��M�M�-��\�:�:�;�;�;��!�"�"�I�E��u�}��
�M�M�-��%8�9�9�:�:�:��!�"�"�I�E�
5�(��/�/���u�u���"�5�5�5�
	5�.�u�5�5�L�E�5�5���&�	5�	5�	5�
5�)�%�0�0���u���%�%�f�&A�1�'3�'3�4�4�4�4���*�
5�
5�
5��-�&�&,�f�U�m�m�5�5�5�
5����4�4�4�4�4�����	5������5�����M�M�%�����/��q��S����a�b�b�	�������f�8�,�.�.�	/�	/�	/�
�M�M�-��\�2�2�3�3�3����q��[�(�(�������u��
�
�e�����5�=�sx�+B>�>E
�>D
�E
�
7E�E
�	E
�	H�K�,H?�>K�?K�>J�
K
�7K�K
�K�
K�K�Kc���	t��}	t|��\}}|�|��|r?|j�t	jd�|������ny#tj$rg}t|��}t|��}|j�t	jd�|������Yd}~nd}~wwxYw|S)NzUnexpected {!r}zInvalid msg-id: {!r})
r�r`r�r!rrsr6r�r�r�)r�
message_idrK�exs    r�parse_message_idrdUs#������J�2�!�%�(�(���u����%� � � ��	2���%�%�f�&@�!�(�(��/�/�'1�'1�
2�
2�
2����"�K�K�K� ��'�'��%�e�,�,�
���!�!��&�'=�'D�'D�R�'H�'H�I�I�	K�	K�	K�	K�	K�	K�	K�	K�����K�����s�'A:�:C0�	AC+�+C0c��	t��}|s.|j�tjd����|S|dt
vrUt
|��\}}|�|��|s,|j�tjd����d}|rM|ddkrA|dt
vr2||dz
}|dd�}|r|ddkr|dt
v�2|���sc|j�tjd�	|������|�t|d����n7t|��|_|�t|d	����|r6|dt
vr't
|��\}}|�|��|r|ddkrZ|j�,|j�tjd
����|r#|�t|d����|S|�tdd����|dd�}|r6|dt
vr't
|��\}}|�|��|s5|j�,|j�tjd
����|Sd}|r5|dt
vr&||dz
}|dd�}|r|dt
v�&|���sc|j�tjd�	|������|�t|d����n7t|��|_
|�t|d	����|r6|dt
vr't
|��\}}|�|��|rO|j�tjd
����|�t|d����|S)Nz%Missing MIME version number (eg: 1.0)rz0Expected MIME version number but found only CFWSr'r	r�z1Expected MIME major version number but found {!r}r��digitsz0Incomplete MIME version; found only major numberzversion-separatorz1Expected MIME minor version number but found {!r}z'Excess non-CFWS text after MIME version)rKr!r�r�HeaderMissingRequiredValuerr�isdigitrsr6r��intrLrM)r�mime_versionrKrfs    r�parse_mime_versionrkqs����
�=�=�L�����#�#�F�$E�3�%5�%5�	6�	6�	6����Q�x�;���������u����E�"�"�"��	E�� �'�'��(I�B�)D�)D�
E�
E�
E�
�F�
��E�!�H��O�O��a���(C�(C��%��(����a�b�b�	����E�!�H��O�O��a���(C�(C��>�>���=���#�#�F�$>�?�F�F�v�N�N�%P�%P�	Q�	Q�	Q����M�&�'�:�:�;�;�;�;� ��[�[������M�&�(�;�;�<�<�<��#��q��[�(�(�������u����E�"�"�"���E�!�H��O�O���)�� �'�'��(B�B�)D�)D�
E�
E�
E��	?����
�e�W� =� =�>�>�>������
�c�+>�?�?�@�@�@��!�"�"�I�E��#��q��[�(�(�������u����E�"�"�"�����)�� �'�'��(B�B�)D�)D�
E�
E�
E���
�F�
��E�!�H�K�/�/��%��(����a�b�b�	����E�!�H�K�/�/��>�>���=���#�#�F�$>�?�F�F�v�N�N�%P�%P�	Q�	Q�	Q����M�&�'�:�:�;�;�;�;� ��[�[������M�&�(�;�;�<�<�<��#��q��[�(�(�������u����E�"�"�"��;���#�#�F�$>�5�%7�%7�	8�	8�	8����M�%��9�9�:�:�:��rc�4�	t��}|r�|ddkrx|dtvr4|�t|dd����|dd�}n't	|��\}}|�|��|r|ddk�x||fS)NrrLr"r�)rZrr�r�r)r�invalid_parameterrKs   r�get_invalid_parameterrn�s����)�*�*��
�,�E�!�H��O�O���8�{�"�"��$�$�]�5��8�3F�&H�&H�
I�
I�
I��!�"�"�I�E�E�%�e�,�,�L�E�5��$�$�U�+�+�+��,�E�!�H��O�O��e�#�#rc��	t|��}|s'tjd�|�����|���}|t|��d�}t
|d��}t|��||fS)Nzexpected ttext but found '{}'�ttext)�_non_token_end_matcherrr�r6r�r�r�r�)rr�rps   r�	get_ttextrr�s����	�u�%�%�A��;��%�+�2�2�5�9�9�;�;�	;�
�G�G�I�I�E��#�e�*�*�+�+��E��%��)�)�E��E�����%�<�rc���	t��}|r6|dtvr't|��\}}|�|��|r6|dtvr'tjd�|�����t|��\}}|�|��|r6|dtvr't|��\}}|�|��||fS�Nrzexpected token but found '{}')	r�rrr��
TOKEN_ENDSrr�r6rr)r�mtokenrKs   r�	get_tokenrw�s�����W�W�F����q��[�(�(�������u��
�
�e�����;��q��Z�'�'��%�+�2�2�5�9�9�;�;�	;��U�#�#�L�E�5�
�M�M�%�������q��[�(�(�������u��
�
�e�����5�=�rc��	t|��}|s'tjd�|�����|���}|t|��d�}t
|d��}t|��||fS)Nz expected attrtext but found {!r}r`)�_non_attribute_end_matcherrr�r6r�r�r�r��rr�r`s   r�get_attrtextr{�s����	#�5�)�)�A��>��%�.�5�5�e�<�<�>�>�	>��w�w�y�y�H��#�h�-�-�.�.�!�E��X�z�2�2�H��H�����U�?�rc���	t��}|r6|dtvr't|��\}}|�|��|r6|dtvr'tjd�|�����t|��\}}|�|��|r6|dtvr't|��\}}|�|��||fSrt)	r]rrr��ATTRIBUTE_ENDSrr�r6r{�rr^rKs   r�
get_attributer	s�������I�� ��q��[�(�(�������u���������;��q��^�+�+��%�+�2�2�5�9�9�;�;�	;���&�&�L�E�5�
���U����� ��q��[�(�(�������u���������e��rc��	t|��}|s'tjd�|�����|���}|t|��d�}t
|d��}t|��||fS)Nz)expected extended attrtext but found {!r}�extended-attrtext)�#_non_extended_attribute_end_matcherrr�r6r�r�r�r�rzs   r�get_extended_attrtextr�	s����	,�E�2�2�A��G��%�7�>�>�u�E�E�G�G�	G��w�w�y�y�H��#�h�-�-�.�.�!�E��X�':�;�;�H��H�����U�?�rc���	t��}|r6|dtvr't|��\}}|�|��|r6|dtvr'tjd�|�����t|��\}}|�|��|r6|dtvr't|��\}}|�|��||fSrt)	r]rrr��EXTENDED_ATTRIBUTE_ENDSrr�r6r�r~s   r�get_extended_attributer�-	s�������I�� ��q��[�(�(�������u���������;��q��4�4�4��%�+�2�2�5�9�9�;�;�	;�(��/�/�L�E�5�
���U����� ��q��[�(�(�������u���������e��rc��	t��}|r|ddkr'tjd�|�����|�tdd����|dd�}|r|d���s'tjd�|�����d}|rK|d���r1||dz
}|dd�}|r|d����1|ddkr2|dkr,|j�tjd	����t|��|_
|�t|d
����||fS)Nr�*zExpected section but found {}zsection-markerr�z$Expected section number but found {}r'�0z'section number has an invalid leading 0rf)rdrr�r6r�r�rhr!rsrirT)rrerfs   r�get_sectionr�C	s�����i�i�G��0�E�!�H��O�O��%�&E�&L�&L�(-�'/�'/�0�0�	0��N�N�=��&6�7�7�8�8�8��!�"�"�I�E��@��a��(�(�*�*�@��%�'1�17�����@�@�	@�
�F�
��E�!�H�$�$�&�&���%��(����a�b�b�	����E�!�H�$�$�&�&���a�y�C���F�c�M�M�����v�9�9� ;� ;�	<�	<�	<���[�[�G�N��N�N�=���2�2�3�3�3��E�>�rc��	t��}|stjd���d}|dtvrt	|��\}}|s'tjd�|�����|ddkrt
|��\}}nt|��\}}|�|g|dd�<|�|��||fS)Nz&Expected value but found end of stringrz Expected value but found only {}r)	rgrr�rrr6rr�r�)r�vrrKs    r�	get_valuer�a	s����	���A��P��%�&N�O�O�O�
�F��Q�x�;��� ����
����@��%�'0�06��v���@�@�	@��Q�x�3���(��/�/���u�u�-�e�4�4���u�
���H��b�q�b�	��H�H�U�O�O�O��e�8�Orc�T�	t��}t|��\}}|�|��|r|ddkrC|j�t	jd�|������||fS|ddkr�	t|��\}}d|_|�|��n#tj	$rYnwxYw|st	j	d���|ddkr4|�tdd����|dd�}d|_|dd	krt	j	d
���|�td	d����|dd�}d}|r6|dtvr't|��\}}|�|��d}|}|j�r|�r|ddk�rt|��\}}|j}d
}|jdkr4|r|ddkrd}nBt#|��\}}	|	r|	ddkrd}n	t%|��\}}	|	sd}n#YnxYw|r_|j�t	jd����|�|��|D]}
|
jdkrg|
dd�<|
}n�|}n.d}|j�t	jd����|r|ddkrd}nt)|��\}}|jr|jdkrW|r|ddkr|�|��|�|}||fS|j�t	jd����|sI|j�t	jd����|�|��|�||fS�nC|�>|D]}
|
jdkrn�|
jdk|�|
��|
j|_|ddkr't	j	d�|�����|�tdd����|dd�}|rt|ddkrht#|��\}}|�|��|j|_|r|ddkr't	j	d�|�����|�tdd����|dd�}|��t1��}|rr|dt2vrt5|��\}}n9|ddkrtdd��}|dd�}nt7|��\}}|�|��|�r|}nt)|��\}}|�|��|�|}||fS)NrrLz)Parameter contains name ({}) but no valuer�TzIncomplete parameterzextended-parameter-markerr��=zParameter not followed by '='�parameter-separatorrF�'z5Quoted string value for extended parameter is invalidr�zZParameter marked as extended but appears to have a quoted string value that is non-encodedzcApparent initial-extended-value but attribute was not marked as extended or was not initial sectionz(Missing required charset/lang delimitersr�r`z=Expected RFC2231 char/lang encoding delimiter, but found {!r}zRFC2231-delimiterz;Expected RFC2231 char/lang encoding delimiter, but found {}�DQUOTE)rOrr�r!rrsr6r�rSr�r�rXrrrr�rUr{r�r\r�rr�r�rgr�r�r�)rr�rKrr��appendto�qstring�inner_value�
semi_validr��tr�s            r�
get_parameterr�w	s����
�K�K�E� ��'�'�L�E�5�	�L�L�������E�!�H��O�O�
�
���V�7�9%�%+�V�E�]�]�4�4�	5�	5�	5��e�|���Q�x�3���	�&�u�-�-�L�E�5�"�E�O��L�L��������&�	�	�	��D�	�����	B��)�*@�A�A�A���8�s�?�?��L�L��s�,G�H�H�I�I�I��!�"�"�I�E�!�E�N��Q�x�3����%�&E�F�F�F�	�L�L��s�$9�:�:�;�;�;��!�"�"�I�E�
�F����q��[�(�(�������u�
���U�����I��H��~�$<�%�$<�E�!�H��O�O�/�u�5�5�����,���
���1�$�$��
&�{�1�~��4�4�!�
�
�*�;�7�7���t��&�D��G�s�N�N�!%�J��
&�3�K�@�@���t��&�!%�J���	
�������	<��M� � ��!;�G�"I�"I�
J�
J�
J��L�L��!�!�!��
�
���<�#7�7�7��A�a�a�a�D� �H��E�8� �E�E��I��M� � ��!;�:�";�";�
<�
<�
<�
�(��q��S������ ��'�'���u��>�	F�U�1�A�5�5��	 ��a��C����O�O�E�"�"�"��$�!���%�<��
�
���V�7�
D�E�E�	F�	F�	F���
�
���V�7�6�8�8�	9�	9�	9�����������%�<������
�
���<�#6�6�6��E�7�
�L�J�&�&��O�O�A�����G�E�M���8�s�?�?��)�+F�FL�f�U�m�m�U�U�
U����
�c�+>�?�?�@�@�@��a�b�b�	���	K�U�1�X��_�_�'��.�.�L�E�5��O�O�E�"�"�"���E�J��
K�E�!�H��O�O��-�/<�<B�F�5�M�M�K�K�K����
�c�+>�?�?�@�@�@��a�b�b�	�����G�G���	��Q�x�3���&�u�~�~���u�u��q��S���%�c�8�4�4���a�b�b�	���+�E�2�2���u�
�H�H�U�O�O�O��	���� ��'�'���u��O�O�E���������%�<�s�.C�C�C�-I�Ic�$�	t��}|�r�	t|��\}}|�|���n#tj$�r}d}|dt
vrt
|��\}}|s|�|��|cYd}~S|ddkrD|�|�|��|j�tjd����npt|��\}}|r|g|dd�<|�|��|j�tjd�
|������Yd}~nd}~wwxYw|r�|ddkru|d}d|_t|��\}}|�|��|j�tjd�
|������|r-|�tdd����|d	d�}|���|S)
NrrLzparameter entry with no contentzinvalid parameter {!r}r�r[z)parameter with invalid trailing text {!r}r�r�)rjr�r�rr�rrr!rsrnr6r\rIr�)r�mime_parametersrKrXrr�s      r�parse_mime_parametersr�
sl���%�&�&�O�
�#�	=�(��/�/�L�E�5��"�"�5�)�)�)�)���&�	=�	=�	=��F��Q�x�;�&�&� (����
����
'��&�&�v�.�.�.�&�&�&�&�&�&�&��Q�x�3����%�#�*�*�6�2�2�2��'�.�.�v�/I�5�07�07�8�8�8�8� 5�U�;�;���u��)�!'��E�"�1�"�I��&�&�u�-�-�-��'�.�.�v�/I�,�3�3�E�:�:�0<�0<�=�=�=����������#	=����&�	L�U�1�X��_�_�$�B�'�E�2�E��0��7�7�L�E�5��L�L������#�*�*�6�+E�;�B�B�5�I�I�,K�,K�
L�
L�
L��	��"�"�=��6K�#L�#L�M�M�M��!�"�"�I�E�G�#�H�s"�'=�E�
;E�E�CE�Ec��	|r�|ddkrx|dtvr4|�t|dd����|dd�}n't|��\}}|�|��|r|ddk�x|sdS|�tdd����|�t	|dd�����dS)NrrLr"r�r�)rr�r�rr�)�	tokenlistrrKs   r�_find_mime_parametersr�9
s�����$�E�!�H��O�O���8�{�"�"����]�5��8�5H�I�I�J�J�J��!�"�"�I�E�E�%�e�,�,�L�E�5����U�#�#�#�
�$�E�!�H��O�O�����
���]�3�(=�>�>�?�?�?�
���*�5����9�5�5�6�6�6�6�6rc���	t��}d}|s.|j�tjd����|S	t|��\}}nf#tj$rT|j�tjd�|������t||��|cYSwxYw|�|��|r|ddkr@|j�tjd����|rt||��|S|j
������|_
|�tdd����|dd�}	t|��\}}nf#tj$rT|j�tjd	�|������t||��|cYSwxYw|�|��|j
������|_|s|S|dd
krU|j�tjd�|������|`
|`t||��|S|�td
d����|�t!|dd�����|S)
NFz"Missing content type specificationz(Expected content maintype but found {!r}rr�zInvalid content typezcontent-type-separatorr�z'Expected content subtype but found {!r}rLz<Only parameters are valid after content type, but found {!r}r�)r�r!r�rrgrwr�rsr6r�rrp�lowerr�r�r�r�)r�ctype�recoverrKs    r�parse_content_type_headerr�I
s���
�M�M�E��G���
�
���V�>�0�2�2�	3�	3�	3���� ��'�'���u�u���"����
�
���V�7�6�=�=�e�D�D�F�F�	G�	G�	G��e�U�+�+�+�����	����

�L�L�������E�!�H��O�O�
�
���V�7�"�$�$�	%�	%�	%��	0�!�%��/�/�/����[�&�&�(�(�.�.�0�0�E�N�	�L�L��s�$<�=�=�>�>�>��!�"�"�I�E�� ��'�'���u�u���"����
�
���V�7�5�<�<�U�C�C�E�E�	F�	F�	F��e�U�+�+�+�����	����

�L�L������K�%�%�'�'�-�-�/�/�E�M������Q�x�3���
�
���V�7�
������(�(�	)�	)�	)�
�N�E�M��e�U�+�+�+���	�L�L��s�$9�:�:�;�;�;�	�L�L�&�u�Q�R�R�y�1�1�2�2�2��Ls&�A�A B9�8B9�=F�A G3�2G3c�^�	t��}|s.|j�tjd����|S	t|��\}}nf#tj$rT|j�tjd�|������t||��|cYSwxYw|�|��|j
������|_
|s|S|ddkrQ|j�tjd�|������t||��|S|�tdd����|�t|dd�����|S)NzMissing content dispositionz+Expected content disposition but found {!r}rrLzCOnly parameters are valid after content disposition, but found {!r}r�r�)r�r!r�rrgrwr�rsr6r�rrpr�r�r�r�)r�disp_headerrKs   r� parse_content_disposition_headerr��
s����%�&�&�K�����"�"�6�#D�)�$+�$+�	,�	,�	,���� ��'�'���u�u���"������"�"�6�#=�9�@�@��G�G�$I�$I�	J�	J�	J��k�5�1�1�1�����	����
���u����&+�k�&7�&7�&9�&9�&?�&?�&A�&A�K�#������Q�x�3�����"�"�6�#=�
������$(�$(�	)�	)�	)�	�k�5�1�1�1������}�S�*?�@�@�A�A�A����,�U�1�2�2�Y�7�7�8�8�8��s�A�A B7�6B7c��	t��}|s.|j�tjd����|S	t|��\}}|�|��|j������|_	nT#tj
$rB|j�tjd�|������YnwxYw|s|S|r�|j�tjd����|dtvr4|�t|dd����|dd�}n't|��\}}|�|��|��|S)Nz!Missing content transfer encodingz1Expected content transfer encoding but found {!r}z*Extra text after content transfer encodingrr"r�)r�r!r�rrgrwrrpr�r�r�rsr6rr�r)r�
cte_headerrKs   r�&parse_content_transfer_encoding_headerr��
s����)�*�*�J�����!�!�&�"C�/�#1�#1�	2�	2�	2���5� ��'�'���u�
	���%� � � ���*�*�,�,�2�2�4�4�
�����"�P�P�P���!�!�&�"<�?�F�F�u�M�M�#O�#O�	P�	P�	P�	P�	P�P��������
�%���!�!�&�"<�8�#:�#:�	;�	;�	;���8�{�"�"����m�E�!�H�6I�J�J�K�K�K��!�"�"�I�E�E�%�e�,�,�L�E�5����e�$�$�$��%��s�B�AC*�)C*c��d}|r>|dr6|ddtvr!|dd}|ddd�|d<|S)Nr'r�)r�)�lines�wsps  r�_steal_trailing_WSP_if_existsr��
sS��
�C��#��r��#�u�R�y��}��3�3��B�i��m���"�I�c�r�c�N��b�	��Jrc���	|jptj}|jrdnd}dg}d}d}d}d}t	dd��}	t|��}
|
�r�|
�d��}||	ur|dz}�"t|��}|s@|jdvrt�
|��}nt�
|��}	|�|��|}
n5#t$r(td	�|jD����rd
}
nd}
d}YnwxYw|jdkrt!||||����|�r|�s|js�d}d}|jr�|�|�
��dt)|j���}|j|vr_t)|��|t)|d��z
kr$t-|��}|�|��|dxx|z
cc<���t1|d��st|��|
z}
d}���|jr;|�|
|kr|d
ks|dkr|
dkrd}t3|||||j|
��}|
}d}���d}d}t)|��|t)|d��z
kr|dxx|z
cc<��7|jrWt)|��dz|krAt-|��}|s|���r|�||z��d}���t1|d��srt|��}|jdkr0t9dd��gd�|D��zt9dd��gz}|js|dz
}|�|	��||
z}
��|jr|s|
�d|��d}��:t-|��}|s|���r|�||z��n|dxx|z
cc<|
���|j�|��|jzS)N�utf-8rQr'rF�wrap_as_ew_blockedr�)rHr�c3�JK�|]}t|tj��V��dSr)r?rr{r*s  rr-z%_refold_parse_tree.<locals>.<genexpr>�
sC����.�.���a��!>�?�?�.�.�.�.�.�.r�unknown-8bitTrkrMr�rr�rrHc�H�g|]}tt|��d���� S)rH)r�r)r+�ps  rrrz&_refold_parse_tree.<locals>.<listcomp>Cs;��(�(�(��#�#4�Q�#7�#7��A�A�(�(�(r)�max_line_length�sys�maxsize�utf8r�r�r5rr\�
SPECIALSNL�
isdisjoint�NLSETrryrEr>�_fold_mime_parametersrErbrQr�r�r�r�r]�_fold_as_ewrcrBr��insertr0)�
parse_treerN�maxlenror��last_ew�last_charsetr��
want_encoding�end_ew_not_allowedrrF�tstrr��encoded_part�newline�newpartss                 rrOrO�
s����
#�
2�s�{�F� �+�5�w�w�:�H�
�D�E��G��L����M�!�"�&:�;�;������E�
�s��y�y��|�|���%�%�%��!�#����4�y�y���	;���"4�4�4�$.�$9�$9�$�$?�$?� ?�
�
�%*�$4�$4�T�$:�$:� :�
�	!��K�K��!�!�!��G�G��!�	!�	!�	!��.�.� �,�.�.�.�.�.�
"�(���"�� �M�M�M�	!�����?�/�/�/�!�$��v�x�@�@�@���)	&�!3�)	&��%�

!� %�
����'�
!�#'�9�9�F�9�#;�#;�<Q�c�&�.�>Q�>Q�=Q�<Q�#R�L��~�\�9�9��|�,�,�v��E�"�I���/F�F�F�&C�E�&J�&J�G�!�L�L��1�1�1��b�	�	�	�\�1�	�	�	� �
�4��*�*�
&��T�
�
�U�*�� %�
���#�
&��'��|�+�+�!�^�3�3�!�W�,�,��J�1F�1F�"�G�%�d�E�6�7�&*�&=�w�H�H��&�� %�
���� %�
��t�9�9���U�2�Y���/�/�/��"�I�I�I���I�I�I��
� �	��D�	�	�A�
��'�'�3�E�:�:�G��
�$�-�-�/�/�
����W�t�^�,�,�,�����t�X�&�&�	��D�z�z�H���"6�6�6�
#�3��0�0�1�(�(�&�(�(�(�(�#�3��0�0�1�2��
�%�
4�"�a�'�"���� 2�3�3�3��u�$�E����	�&8�	�
�L�L��D�!�!�!� �M��/��6�6���	�d�)�)�+�+�	��L�L��4��(�(�(�(�
�"�I�I�I���I�I�I�g�s�h�>���u�%�%���6�6s�>C�/D�Dc�z�	|�B|r@tt|d|d�|z����}|dd|�|d<|dtvr]|d}|dd�}t|d��|kr"|�t|����|dxx|z
cc<d}|dtvr|d}|dd�}|�t|d��n|}|dkrdn|}	t|	��dz}
|
dz|krt
jd���|r�|t|d��z
}||
z
}|dkr|�d	���;|d|�}
tj	|
|	�
��}t|��|z
}|dkr8|
dd�}
tj	|
|	�
��}t|��|z
}|dk�8|dxx|z
cc<|t|
��d�}|r*|�d	��t|d��}|��|dxx|z
cc<|r|ndS)Nr�rr�r'rQr��z3max_line_length is too small to fit an encoded wordrk)r�)
rr�r�r�r�r�rr�r�r)�	to_encoder�r�r�rcr��leading_wsp�trailing_wsp�new_last_ew�	encode_as�
chrome_len�remaining_space�
text_space�to_encode_word�encoded_word�excesss                rr�r�Zs���	���1����U�2�Y�w�x�x�0�9�<�=�=�?�?�	��"�I�h�w�h�'��b�	���|�s��� ��l���a�b�b�M�	���b�	�N�N�f�$�$��L�L�6�u�=�=�>�>�>�
�b�	�	�	�[� �	�	�	��L���}���� ��}���c�r�c�N�	�$+�O�#�e�B�i�.�.�.��K�"�j�0�0���g�I��Y���!�#�J��Q��6�!�!��%�A�C�C�	C��)� �3�u�R�y�>�>�1��$�z�1�
���?�?��L�L������"�;�J�;�/���z�.�)�D�D�D���\�"�"�_�4���q�j�j�,�C�R�C�0�N��:�n�i�H�H�H�L���&�&��8�F��q�j�j�	�b�	�	�	�\�!�	�	�	��c�.�1�1�2�2�3�	��	)��L�L������e�B�i�.�.�K�+�)�,
�"�I�I�I���I�I�I�,�6�;�;�$�6rc	��	|jD�]O\}}|d����d��s|dxxdz
cc<|}d}	|�|��d}n-#t$r d}tj|��rd}d}nd}YnwxYw|r:tj�	|d	|�
��}	d�
|||	��}
n#d�
|t|����}
t|d��t|
��zd
z|kr|ddz|
z|d<��+t|
��dz|kr|�
d|
z����[d}|dz}|r�t|��tt|����zdzt|��z}
||
dzkrd}||
z
dz
x}}	|d|�}tj�	|d	|�
��}	t|	��|krn|d
z}�F|�
d�
||||	����d	}|d
z
}||d�}|r|dxxdz
cc<|���QdS)Nr�rL�strictFTr�rnr�r')�saferz
{}*={}''{}r�r�rkr�rz''r&�Nz {}*{}*={}{})r}r(rarryrrzrtrur�r6rr�r�r)rFr�r�ror~rr��
error_handler�encoding_required�
encoded_valuer�re�extra_chromer��
splitpoint�maxchars�partials                 rr�r��s�����{�:!�:!���e��R�y���!�!�*�*�3�/�/�	��"�I�I�I���I�I�I��� �
�		"��L�L��"�"�"� %����!�	"�	"�	"� $���$�U�+�+�
"�(�� 1�
�
�!����
	"�����	=�"�L�.�.��B�}�/�6�6�M��&�&�t�W�m�D�D�D�D��>�>�$��U�(;�(;�<�<�D��u�R�y�>�>�C��I�I�%��)�F�2�2��b�	�C��$�.�E�"�I��
��Y�Y��]�f�
$�
$��L�L��t��$�$�$������~���	!��T���S��W���%6�%6�6��:�S��=N�=N�N�J���a��'�'�
��$*�Z�$7�!�$;�;�J��
 �����,�� &�� 2� 2��"�]�!3�!<�!<�
��}�%�%��1�1���a��
�

 �
�L�L��.�.��g�|�]�<�<�
=�
=�
=��L��q�L�G��*�+�+�&�E��
!��b�	�	�	�S� �	�	�	�-�	!��I:!�:!s�A)�)'B�B)r�)��rer�rt�stringr�operatorr�emailrr�rrr,r�rrr	r-r�	TSPECIALSru�	ASPECIALSr}r�r�r�rr�compile�VERBOSE�	MULTILINEr�r�rrhrtrxr|r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr!r#r1r3r:rErKrOrZr]rdrgrjr�r�r�r�r�r�r�r�r�rr�r�r�r�r�r�r>r5rErbr6r6r0rr�r��matchr��findallr�rqryr�r�r�r�r�r�r�r�r�r�rrrr
r
rrrr rr%r*r-r/r2r8r=r?rBrFrJrNrQrSrUrYr\r`rdrkrnrrrwr{rr�r�r�r�r�r�r�r�r�r�r�rOr�r�rlrr�<module>r�s���C�J
�	�	�	�
�
�
�
�
�
�
�
�������������'�'�'�'�'�'�������������
�c�%�j�j���C�C��H�H�n���3�� � ���s�N�	��C�C��H�H�$�
����U���#��
���E�
�
�
"�c�c�#�h�h�.�	�
��_�
����E�
�
�"�	��S���(�3�3�s�8�8�3��	
�t���
��
�
�@�@�@�
����"�*���Z�"�,�� � ��@,�@,�@,�@,�@,��@,�@,�@,�FD�D�D�D�D�)�D�D�D� � � � � �I� � � ������Y���������9���������"���������9���������I����
�����)����#�#�#�#�#�9�#�#�#�6	-�	-�	-�	-�	-�|�	-�	-�	-������!����4C�C�C�C�C�)�C�C�C�&%�%�%�%�%�i�%�%�%�2?�?�?�?�?�)�?�?�?�%�%�%�%�%�	�%�%�%�"$�$�$�$�$�I�$�$�$�*"�"�"�"�"�y�"�"�"�6�����	����DD�D�D�D�D�y�D�D�D�!�!�!�!�!�i�!�!�!�6;�;�;�;�;�Y�;�;�;�.�.�.�.�.�Y�.�.�.������i���������)����
�����I����
�����y����B�����9����'!�'!�'!�'!�'!�&�'!�'!�'!�T!�!�!�!�!�	�!�!�!�H
�
�
�
�
�I�
�
�
� �����)���������	����8%�%�%�%�%�y�%�%�%�
#�#�#�#�#�	�#�#�#������i���������I����S.�S.�S.�S.�S.�Y�S.�S.�S.�l�����y���������*���������1���������i���������)����
*�*�*�*�*�I�*�*�*����������&�&�&�&�&�y�&�&�&������Y����(+�(+�(+�(+�(+�s�(+�(+�(+�V��������������H���������-����<�<�<�<�<�f�-�<�<�<��m�C������
�c�#3�4�4�
�#�
�� %�
��$�}�S�*B�C�C��.��
�:�,�,�R�W�W�S�\�\�:�:�;�;�A�
�"��
�9�#3�#3�
�B�I�b�g�g�i� � �!�!�$#�$#�$�$�$)��"��
�#5�6�6�>��#���I�$4�$4�
�B�I�b�g�g�j�!�!�"�"�%$�%$�%�%�%*��'�R�Z�	�(8�(8�
�B�I�b�g�g�n�%�%�&�&�)(�)(�)�)�).��&0�b�j��1A�1A�
�B�I�b�g�g�-�.�.�/�/�21�21�'2�'2�27�$�;�;�;�J�J�J�<
�
�
�/�/�/�/�bA�A�A�F���"
�
�
���� ))�))�))�V���2��� � � �$���6 � � �&���2 � � �D$�$�$�L%�%�%�N-!�-!�-!�^���(���%!�%!�%!�N$�$�$�L��� ' �' �' �R,�,�,�\������<���*"�"�"�$6�6�6�r#�#�#�J���<���:4�4�4�n&�&�&�,B�B�B�J���8B�B�B�H$�$�$�$���&���.���&���.���$���,���<���,L�L�L�\2�2�2�h7�7�7� 7�7�7�r���<���^���B7�B7�B7�H?7�?7�?7�BI!�I!�I!�I!�I!r

if you don't want to be vaporized in a nuclear explosion, i simply have to become nuclear myself… i am atomic