§
    ‹ŸjÖo  ã                   ó2  — d dl mZmZmZmZmZmZmZmZm	Z	m
Z
mZ d dlmZmZ d dlmZ d dlmZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlmZmZmZ deeeee          f         eeee
         f         f         fd„Z! G d	„ d
ej"        ¦  «        Z# G d„ dej"        ¦  «        Z$ G d„ dej"        ¦  «        Z% G d„ dej"        ¦  «        Z& G d„ dej"        ¦  «        Z' G d„ dej"        ¦  «        Z( G d„ dej"        ¦  «        Z) G d„ dej"        ¦  «        Z*dS )é    )Ú
url_concatÚparse_multipart_form_dataÚHTTPHeadersÚformat_timestampÚHTTPServerRequestÚparse_request_start_lineÚparse_cookieÚ	qs_to_qslÚHTTPInputErrorÚHTTPFileÚParseMultipartConfig)Úutf8Ú
native_str)Úgen_log)Úignore_deprecationN)ÚTupleÚDictÚListÚreturnc                  ó
   — i i fS )zÇReturn two empty dicts suitable for use with parse_multipart_form_data.

    mypy insists on type annotations for dict literals, so this lets us avoid
    the verbose types throughout this test.
    © r   ó    úg/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/tornado/test/httputil_test.pyÚform_data_argsr      s   € ð ˆrˆ6€Mr   c                   óV   — e 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S )ÚTestUrlConcatc                 óV   — t          dddg¦  «        }|                      |d¦  «         d S )Núhttps://localhost/path©Úyr    ©Úzr"   úhttps://localhost/path?y=y&z=z©r   ÚassertEqual©ÚselfÚurls     r   Útest_url_concat_no_query_paramsz-TestUrlConcat.test_url_concat_no_query_params'   s4   € ÝÐ1°JÀ
Ð3KÑLÔLˆØ×Ò˜Ð>Ñ?Ô?Ð?Ð?Ð?r   c                 óV   — t          dddg¦  «        }|                      |d¦  «         d S )Nr   )r    z/yr!   z!https://localhost/path?y=%2Fy&z=zr$   r&   s     r   Útest_url_concat_encode_argsz)TestUrlConcat.test_url_concat_encode_args+   s4   € ÝÐ1°KÀÐ3LÑMÔMˆØ×Ò˜ÐAÑBÔBÐBÐBÐBr   c                 óV   — t          dddg¦  «        }|                      |d¦  «         d S )Nzhttps://localhost/path?r   r!   r#   r$   r&   s     r   Útest_url_concat_trailing_qz(TestUrlConcat.test_url_concat_trailing_q/   s4   € ÝÐ2°ZÀÐ4LÑMÔMˆØ×Ò˜Ð>Ñ?Ô?Ð?Ð?Ð?r   c                 óV   — t          dddg¦  «        }|                      |d¦  «         d S )Nzhttps://localhost/path?xr   r!   ú!https://localhost/path?x=&y=y&z=zr$   r&   s     r   Ú&test_url_concat_q_with_no_trailing_ampz4TestUrlConcat.test_url_concat_q_with_no_trailing_amp3   s4   € ÝÐ3°jÀ*Ð5MÑNÔNˆØ×Ò˜ÐAÑBÔBÐBÐBÐBr   c                 óV   — t          dddg¦  «        }|                      |d¦  «         d S )Nzhttps://localhost/path?x&r   r!   r/   r$   r&   s     r   Útest_url_concat_trailing_ampz*TestUrlConcat.test_url_concat_trailing_amp7   s4   € ÝÐ4°zÀ:Ð6NÑOÔOˆØ×Ò˜ÐAÑBÔBÐBÐBÐBr   c                 óV   — t          dddg¦  «        }|                      |d¦  «         d S )Nzhttps://localhost/path?a=1&b=2r   r!   z&https://localhost/path?a=1&b=2&y=y&z=zr$   r&   s     r   Útest_url_concat_mult_paramsz)TestUrlConcat.test_url_concat_mult_params;   s4   € ÝÐ9¸JÈ
Ð;SÑTÔTˆØ×Ò˜ÐFÑGÔGÐGÐGÐGr   c                 óR   — t          dg ¦  «        }|                      |d¦  «         d S ©Nzhttps://localhost/path?r=1&t=2r$   r&   s     r   Útest_url_concat_no_paramsz'TestUrlConcat.test_url_concat_no_params?   s/   € ÝÐ9¸2Ñ>Ô>ˆØ×Ò˜Ð>Ñ?Ô?Ð?Ð?Ð?r   c                 óR   — t          dd ¦  «        }|                      |d¦  «         d S r6   r$   r&   s     r   Útest_url_concat_none_paramsz)TestUrlConcat.test_url_concat_none_paramsC   s/   € ÝÐ9¸4Ñ@Ô@ˆØ×Ò˜Ð>Ñ?Ô?Ð?Ð?Ð?r   c                 óT   — t          ddg¦  «        }|                      |d¦  «         d S )Nzhttps://localhost/path#tabr   zhttps://localhost/path?y=y#tabr$   r&   s     r   Útest_url_concat_with_fragz'TestUrlConcat.test_url_concat_with_fragG   s1   € ÝÐ5¸
°|ÑDÔDˆØ×Ò˜Ð>Ñ?Ô?Ð?Ð?Ð?r   c                 óV   — t          dddg¦  «        }|                      |d¦  «         d S )Nr   )r    Úy1)r    Úy2z https://localhost/path?y=y1&y=y2r$   r&   s     r   Ú!test_url_concat_multi_same_paramsz/TestUrlConcat.test_url_concat_multi_same_paramsK   s4   € ÝÐ1°KÀÐ3MÑNÔNˆØ×Ò˜Ð@ÑAÔAÐAÐAÐAr   c                 óT   — t          ddg¦  «        }|                      |d¦  «         d S )Nzhttps://localhost/path?r=1&r=2r   z"https://localhost/path?r=1&r=2&y=yr$   r&   s     r   Ú'test_url_concat_multi_same_query_paramsz5TestUrlConcat.test_url_concat_multi_same_query_paramsO   s1   € ÝÐ9¸J¸<ÑHÔHˆØ×Ò˜ÐBÑCÔCÐCÐCÐCr   c                 ón   — t          dt          d¬¦  «        ¦  «        }|                      |d¦  «         d S )Nr   r    )r    zhttps://localhost/path?y=y)r   Údictr%   r&   s     r   Útest_url_concat_dict_paramsz)TestUrlConcat.test_url_concat_dict_paramsS   s7   € ÝÐ1µ4¸#°;±;´;Ñ?Ô?ˆØ×Ò˜Ð:Ñ;Ô;Ð;Ð;Ð;r   N)Ú__name__Ú
__module__Ú__qualname__r)   r+   r-   r0   r2   r4   r7   r9   r;   r?   rA   rD   r   r   r   r   r   &   sé   € € € € € ð@ð @ð @ðCð Cð Cð@ð @ð @ðCð Cð CðCð Cð CðHð Hð Hð@ð @ð @ð@ð @ð @ð@ð @ð @ðBð Bð BðDð Dð Dð<ð <ð <ð <ð <r   r   c                   ó   — e Zd Zd„ ZdS )ÚQsParseTestc                 ó  — d}t           j                             |¦  «        }t          t	          |¦  «        ¦  «        }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         d S )Nza=1&b=2&a=3)ÚaÚ1)rK   Ú3)ÚbÚ2)ÚurllibÚparseÚparse_qsÚlistr
   ÚassertIn)r'   ÚqsstringÚqsÚqsls       r   Útest_parsingzQsParseTest.test_parsingY   sq   € Ø ˆÝŒ\×"Ò" 8Ñ,Ô,ˆÝ•9˜R‘=”=Ñ!Ô!ˆØ�Š�j #Ñ&Ô&Ð&Ø�Š�j #Ñ&Ô&Ð&Ø�Š�j #Ñ&Ô&Ð&Ð&Ð&r   N)rE   rF   rG   rX   r   r   r   rI   rI   X   s#   € € € € € ð'ð 'ð 'ð 'ð 'r   rI   c                   ób   — e 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S )ÚMultipartFormDataTestc                 ó  — d                      dd¦  «        }t          ¦   «         \  }}t          d|||¦  «         |d         d         }|                      |d         d¦  «         |                      |d	         d
¦  «         d S )NóT   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"

Foo
--1234--ó   
ó   
ó   1234Úfilesr   Úfilenameúab.txtÚbodyó   Foo©Úreplacer   r   r%   ©r'   ÚdataÚargsr`   Úfiles        r   Útest_file_uploadz&MultipartFormDataTest.test_file_uploadc   s�   € ð÷
 ŠGØ�7ñ
ô 
ð 	õ %Ñ&Ô&‰ˆˆeÝ! '¨4°°uÑ=Ô=Ð=Ø�WŒ~˜aÔ ˆØ×Ò˜˜jÔ)¨8Ñ4Ô4Ð4Ø×Ò˜˜fœ vÑ.Ô.Ð.Ð.Ð.r   c                 ó  — d                      dd¦  «        }t          ¦   «         \  }}t          d|||¦  «         |d         d         }|                      |d         d¦  «         |                      |d	         d
¦  «         d S )NsP   --1234
Content-Disposition: form-data; name=files; filename=ab.txt

Foo
--1234--r]   r^   r_   r`   r   ra   rb   rc   rd   re   rg   s        r   Útest_unquoted_namesz)MultipartFormDataTest.test_unquoted_namesr   s�   € ð÷
 ŠGØ�7ñ
ô 
ð 	õ %Ñ&Ô&‰ˆˆeÝ! '¨4°°uÑ=Ô=Ð=Ø�WŒ~˜aÔ ˆØ×Ò˜˜jÔ)¨8Ñ4Ô4Ð4Ø×Ò˜˜fœ vÑ.Ô.Ð.Ð.Ð.r   c                 ó´  — g d¢}|D ]Ð}t          j        d|¦  «         d|                     dd¦  «                             dd¦  «        z  }t          |                     dd	¦  «        ¦  «        }t	          ¦   «         \  }}t          d
|||¦  «         |d         d         }|                      |d         |¦  «         |                      |d         d¦  «         ŒÑd S )N)	za;b.txtza"b.txtza";b.txtza;"b.txtz	a";";.txtza\"b.txtza\b.txtza b.txtza	b.txtztrying filename %rúP--1234
Content-Disposition: form-data; name="files"; filename="%s"

Foo
--1234--ú\ú\\ú"ú\"ú
ú
r_   r`   r   ra   rc   rd   )ÚloggingÚdebugrf   r   r   r   r%   )r'   Ú	filenamesra   Ústr_datarh   ri   r`   rj   s           r   Útest_special_filenamesz,MultipartFormDataTest.test_special_filenames‚   s  € ð

ð 

ð 

ˆ	ð "ð 	3ð 	3ˆHÝŒMÐ.°Ñ9Ô9Ð9ðð
 ×ÒØ�fñô çŠgØ�Uñô ñ	ˆHõ ˜×(Ò(¨¨vÑ6Ô6Ñ7Ô7ˆDÝ(Ñ*Ô*‰KˆD�%Ý% g¨t°T¸5ÑAÔAÐAØ˜”> !Ô$ˆDØ×Ò˜T *Ô-¨xÑ8Ô8Ð8Ø×Ò˜T &œ\¨6Ñ2Ô2Ð2Ð2ð#	3ð 	3r   c                 ó²  — g d¢}|D ]Ï}d|                      dd¦  «                              dd¦  «        z  }t          |                      dd¦  «        ¦  «        }t          ¦   «         \  }}|                      t          ¦  «        5 }t          d	|||¦  «         d d d ¦  «         n# 1 swxY w Y   |                      d
t          |j        ¦  «        ¦  «         ŒÐd S )N)zab.txtza b.txtzab.txtro   rp   rq   rr   rs   rt   ru   r_   zInvalid header value)	rf   r   r   ÚassertRaisesr   r   rT   ÚstrÚ	exception)r'   rx   ra   ry   rh   ri   r`   Úcms           r   Útest_invalid_charsz(MultipartFormDataTest.test_invalid_chars¡   sF  € ð
ð 
ð 
ˆ	ð
 "ð 	Eð 	EˆHðð
 ×ÒØ�fñô çŠgØ�Uñô ñ	ˆHõ ˜×(Ò(¨¨vÑ6Ô6Ñ7Ô7ˆDÝ(Ñ*Ô*‰KˆD�%Ø×"Ò"¥>Ñ2Ô2ð F°bÝ)¨'°4¸¸uÑEÔEÐEðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fà�MŠMÐ0µ#°b´lÑ2CÔ2CÑDÔDÐDÐDð	Eð 	Es   ÂB#Â#B'	Â*B'	c                 ó  — d                      dd¦  «        }t          ¦   «         \  }}t          d|||¦  «         |d         d         }|                      |d         d¦  «         |                      |d	         d
¦  «         d S )Nsr   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"; filename*=UTF-8''%C3%A1b.txt

Foo
--1234--r]   r^   r_   r`   r   ra   u   Ã¡b.txtrc   rd   re   rg   s        r   Útest_non_ascii_filename_rfc5987z5MultipartFormDataTest.test_non_ascii_filename_rfc5987¸   s�   € ð÷
 ŠGØ�7ñ
ô 
ð 	õ %Ñ&Ô&‰ˆˆeÝ! '¨4°°uÑ=Ô=Ð=Ø�WŒ~˜aÔ ˆØ×Ò˜˜jÔ)¨9Ñ5Ô5Ð5Ø×Ò˜˜fœ vÑ.Ô.Ð.Ð.Ð.r   c                 ó*  — d                      d¦  «                             dd¦  «        }t          ¦   «         \  }}t          d|||¦  «         |d         d         }|                      |d         d	¦  «         |                      |d
         d¦  «         d S )NuX   --1234
Content-Disposition: form-data; name="files"; filename="æµ‹è¯•.txt"

Foo
--1234--zutf-8r]   r^   r_   r`   r   ra   u
   æµ‹è¯•.txtrc   rd   )Úencoderf   r   r   r%   rg   s        r   Útest_non_ascii_filename_rawz1MultipartFormDataTest.test_non_ascii_filename_rawÇ   s¢   € ð÷
 ŠFØñ
ô 
ç
Š'Ø�7ñ
ô 
ð 	õ %Ñ&Ô&‰ˆˆeÝ! '¨4°°uÑ=Ô=Ð=Ø�WŒ~˜aÔ ˆØ×Ò˜˜jÔ)¨<Ñ8Ô8Ð8Ø×Ò˜˜fœ vÑ.Ô.Ð.Ð.Ð.r   c                 ó  — d                      dd¦  «        }t          ¦   «         \  }}t          d|||¦  «         |d         d         }|                      |d         d¦  «         |                      |d	         d
¦  «         d S )Nr\   r]   r^   s   "1234"r`   r   ra   rb   rc   rd   re   rg   s        r   Ú)test_boundary_starts_and_ends_with_quotesz?MultipartFormDataTest.test_boundary_starts_and_ends_with_quotesØ   s�   € ð÷
 ŠGØ�7ñ
ô 
ð 	õ %Ñ&Ô&‰ˆˆeÝ! )¨T°4¸Ñ?Ô?Ð?Ø�WŒ~˜aÔ ˆØ×Ò˜˜jÔ)¨8Ñ4Ô4Ð4Ø×Ò˜˜fœ vÑ.Ô.Ð.Ð.Ð.r   c                 ó  — d                      dd¦  «        }t          ¦   «         \  }}|                      t          d¬¦  «        5  t	          d|||¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |i ¦  «         d S )Ns   --1234

Foo
--1234--r]   r^   z#multipart/form-data missing headers©Úmsgr_   ©rf   r   r|   r   r   r%   ©r'   rh   ri   r`   s       r   Útest_missing_headersz*MultipartFormDataTest.test_missing_headersç   sî   € ð÷ ŠGØ�7ñ
ô 
ð	 	õ %Ñ&Ô&‰ˆˆeØ×ÒÝÐ Eð ñ 
ô 
ð 	Bð 	Bõ & g¨t°T¸5ÑAÔAÐAð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bð 	×Ò˜ Ñ#Ô#Ð#Ð#Ð#ó   ÁA#Á#A'Á*A'c                 ó  — d                      dd¦  «        }t          ¦   «         \  }}|                      t          d¬¦  «        5  t	          d|||¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |i ¦  «         d S )NsR   --1234
Content-Disposition: invalid; name="files"; filename="ab.txt"

Foo
--1234--r]   r^   úInvalid multipart/form-datar‰   r_   r‹   rŒ   s       r   Ú test_invalid_content_dispositionz6MultipartFormDataTest.test_invalid_content_dispositionö   sã   € ð÷
 ŠGØ�7ñ
ô 
ð 	õ %Ñ&Ô&‰ˆˆeØ×Ò�~Ð3PÐÑQÔQð 	Bð 	BÝ% g¨t°T¸5ÑAÔAÐAð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bà×Ò˜ Ñ#Ô#Ð#Ð#Ð#rŽ   c                 ó  — d                      dd¦  «        }t          ¦   «         \  }}|                      t          d¬¦  «        5  t	          d|||¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |i ¦  «         d S )NsS   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"

Foo--1234--r]   r^   r�   r‰   r_   r‹   rŒ   s       r   Ú.test_line_does_not_end_with_correct_line_breakzDMultipartFormDataTest.test_line_does_not_end_with_correct_line_break  sã   € ð÷ ŠwØ�7ñ
ô 
ð	 	õ %Ñ&Ô&‰ˆˆeØ×Ò�~Ð3PÐÑQÔQð 	Bð 	BÝ% g¨t°T¸5ÑAÔAÐAð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bà×Ò˜ Ñ#Ô#Ð#Ð#Ð#rŽ   c                 ó  — d                      dd¦  «        }t          ¦   «         \  }}|                      t          d¬¦  «        5  t	          d|||¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |i ¦  «         d S )NsF   --1234
Content-Disposition: form-data; filename="ab.txt"

Foo
--1234--r]   r^   z&multipart/form-data value missing namer‰   r_   r‹   rŒ   s       r   Ú6test_content_disposition_header_without_name_parameterzLMultipartFormDataTest.test_content_disposition_header_without_name_parameter  sî   € ð÷
 ŠGØ�7ñ
ô 
ð 	õ %Ñ&Ô&‰ˆˆeØ×ÒÝÐ Hð ñ 
ô 
ð 	Bð 	Bõ & g¨t°T¸5ÑAÔAÐAð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bð 	×Ò˜ Ñ#Ô#Ð#Ð#Ð#rŽ   c                 ó  — d                      dd¦  «        }t          ¦   «         \  }}t          d|||¦  «         |d         d         }|                      |d         d¦  «         |                      |d	         d
¦  «         d S )NsU   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"

Foo
--1234--
r]   r^   r_   r`   r   ra   rb   rc   rd   re   rg   s        r   Útest_data_after_final_boundaryz4MultipartFormDataTest.test_data_after_final_boundary!  s�   € ð÷ ‚GØ�7ñ
ô 
ð 	õ %Ñ&Ô&‰ˆˆeÝ! '¨4°°uÑ=Ô=Ð=Ø�WŒ~˜aÔ ˆØ×Ò˜˜jÔ)¨8Ñ4Ô4Ð4Ø×Ò˜˜fœ vÑ.Ô.Ð.Ð.Ð.r   c                 ó„   — d„ } |d¦  «        } |d¦  «        }||z  dk    r|                       d|›d|›�¦  «         d S d S )Nc                 óœ   — t          j        ¦   «         }dd| z  z   dz   dz   }i }i }t          d|||¦  «         t          j        ¦   «         |z
  S )Ns+   --1234
Content-Disposition: form-data; x="ó   ;s   "; s1   name="files"; filename="a.txt"

Foo
--1234--
r_   )ÚtimeÚperf_counterr   )ÚnÚstartÚmessageri   r`   s        r   ÚfzJMultipartFormDataTest.test_disposition_param_linear_performance.<locals>.f8  sp   € ÝÔ%Ñ'Ô'ˆEðà˜‘(ñð ñð Oñ	Oð ð ,.ˆDØ/1ˆEÝ% g¨w¸¸eÑDÔDÐDÝÔ$Ñ&Ô&¨Ñ.Ð.r   iè  é'  é   z,Disposition param parsing is not linear: d1=ú vs d2=©Úfail©r'   r    Úd1Úd2s       r   Ú)test_disposition_param_linear_performancez?MultipartFormDataTest.test_disposition_param_linear_performance4  sj   € ð	/ð 	/ð 	/ð ˆQˆu‰XŒXˆàˆQˆv‰YŒYˆØ�‰7�RŠ<ˆ<Ø�IŠIÐPÀ"ÐPÐPÈ2ÐPÐPÑQÔQÐQÐQÐQð ˆ<r   c                 óà  — d}d                      dd¦  «        }t          ¦   «         }t          ¦   «         \  }}t          |||||¬¦  «         |                      |d         d         d         d	¦  «         t          d¬
¦  «        }|                      t          ¦  «        5 }t          |||||¬¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j	        ¦  «        ¦  «         t          d¬¦  «        }|                      t          ¦  «        5 }t          |||||¬¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j	        ¦  «        ¦  «         t          d¬¦  «        }	|                      t          ¦  «        5 }t          |||||	¬¦  «         d d d ¦  «         n# 1 swxY w Y   |                      dt          |j	        ¦  «        ¦  «         d S )Nr_   sP   --1234
Content-Disposition: form-data; name="files"; filename="ab.txt"

--1234--r]   r^   )Úconfigr`   r   ra   rb   )Ú	max_partsztoo many partsé
   )Úmax_part_header_sizezheader too largeF)Úenabledz'multipart/form-data parsing is disabled)
rf   r   r   r   r%   r|   r   rT   r}   r~   )
r'   Úboundaryrc   r«   ri   r`   Úconfig_no_partsr   Úconfig_small_headersÚconfig_disableds
             r   Útest_multipart_configz+MultipartFormDataTest.test_multipart_configL  s³  € Øˆð÷ ŠGØ�7ñ
ô 
ð 	õ &Ñ'Ô'ˆÝ$Ñ&Ô&‰ˆˆeÝ! (¨D°$¸ÀfÐMÑMÔMÐMØ×Ò˜˜wœ¨Ô*¨:Ô6¸ÑAÔAÐAå.¸Ð;Ñ;Ô;ˆØ×Ò�~Ñ.Ô.ð 	°"Ý%Ø˜$  e°Oðñ ô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	�ŠÐ&­¨B¬LÑ(9Ô(9Ñ:Ô:Ð:å3ÈÐLÑLÔLÐØ×Ò�~Ñ.Ô.ð 	°"Ý%Ø˜$  eÐ4Hðñ ô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	�ŠÐ(­#¨b¬lÑ*;Ô*;Ñ<Ô<Ð<å.°uÐ=Ñ=Ô=ˆØ×Ò�~Ñ.Ô.ð 	°"Ý%Ø˜$  e°Oðñ ô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	�ŠÐ?ÅÀRÄ\ÑARÔARÑSÔSÐSÐSÐSs6   ÂB?Â?CÃCÄD=Ä=EÅEÆF;Æ;F?ÇF?N)rE   rF   rG   rk   rm   rz   r€   r‚   r…   r‡   r�   r‘   r“   r•   r—   r©   r´   r   r   r   rZ   rZ   b   sñ   € € € € € ð/ð /ð /ð/ð /ð /ð 3ð 3ð 3ð>Eð Eð Eð./ð /ð /ð/ð /ð /ð"/ð /ð /ð$ð $ð $ð$ð $ð $ð$ð $ð $ð$ð $ð $ð /ð /ð /ð&Rð Rð Rð0 Tð  Tð  Tð  Tð  Tr   rZ   c                   óV   — e 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S )ÚHTTPHeadersTestc                 óX  — d                      dd¦  «        }t          j        |¦  «        }|                      |d         d¦  «         |                      |                     d¦  «        dg¦  «         |                      |d         d¦  «         |                      |                     d¦  «        d	d
g¦  «         |                      t          t          |                     ¦   «         ¦  «        ¦  «        g d¢¦  «         |                      d|v ¦  «         |                      d|v ¦  «         d S )Nz>Foo: bar
 baz
Asdf: qwer
	zxcv
Foo: even
     more
     lines
rt   ru   Úasdfú	qwer zxcvÚFoozbar baz,even more linesÚfooúbar bazúeven more lines))ÚAsdfr¹   )rº   r¼   )rº   r½   r¾   )	rf   r   rQ   r%   Úget_listÚsortedrS   Úget_allÚ
assertTrue©r'   rh   Úheaderss      r   Útest_multi_linezHTTPHeadersTest.test_multi_linep  s-  € ð
÷ ‚GØ�&ñ
ô 
ð 	õ Ô# DÑ)Ô)ˆØ×Ò˜ œ¨+Ñ6Ô6Ð6Ø×Ò˜×)Ò)¨&Ñ1Ô1°K°=ÑAÔAÐAØ×Ò˜ œÐ)BÑCÔCÐCØ×Ò˜×)Ò)¨%Ñ0Ô0°9Ð>OÐ2PÑQÔQÐQØ×ÒÝ•4˜ŸšÑ)Ô)Ñ*Ô*Ñ+Ô+ØSÐSÐSñ	
ô 	
ð 	
ð
 	�Š˜ 'Ð)Ñ*Ô*Ð*Ø�Š˜ 'Ð)Ñ*Ô*Ð*Ð*Ð*r   c                 ó
  — d}t          j        |¦  «        }|                      |d         d¦  «         d}|                      t          t           j        |¦  «         d}|                      t          t           j        |¦  «         d S )NzFoo: bar
	asdfrº   zbar asdfz	 Foo: barzFoo: bar
asdf)r   rQ   r%   r|   r   rÃ   s      r   Útest_continuationz!HTTPHeadersTest.test_continuation�  s{   € Ø#ˆÝÔ# DÑ)Ô)ˆØ×Ò˜ œ¨Ñ4Ô4Ð4ð
 ˆØ×Ò�.­+Ô*;¸TÑBÔBÐBð $ˆØ×Ò�.­+Ô*;¸TÑBÔBÐBÐBÐBr   c                 óD  — t          d¦  «        D ]�}dt          |¦  «        › d�}|dk    s|dk    rH|dk    rBt          j        |¦  «        }|                      |d         dt          |¦  «        › d	�¦  «         Œi|                      t          t          j        |¦  «         Œ�d S )
Néÿ   zFoo: barzbaz
é	   é    é   rº   ÚbarÚbaz)ÚrangeÚchrr   rQ   r%   r|   r   )r'   Úcrh   rÄ   s       r   Útest_forbidden_ascii_charactersz/HTTPHeadersTest.test_forbidden_ascii_characters�  s³   € õ �t‘”ð 	Kð 	KˆAØ-�c !™fœfÐ-Ð-Ð-ˆDØ�DŠyˆy˜Q $šY˜Y¨1°ª9¨9Ý%Ô+¨DÑ1Ô1�Ø× Ò  ¨¤Ð1Bµs¸1±v´vÐ1BÐ1BÐ1BÑCÔCÐCÐCà×!Ò!¥.µ+Ô2CÀTÑJÔJÐJÐJð	Kð 	Kr   c           	      óô  — g d¢}|D ]ð}dD ]ë}	 	 |                      |¦  «        }n# t          $ r Y Œ&w xY wd|z   dz   }t          j        t	          |                     d¦  «        ¦  «        ¦  «        }ddt	          |                     d¦  «        ¦  «        z   dz   fg}|                      |t          |                     ¦   «         ¦  «        ¦  «         ŒÇ# t          $ r t          j        d	||¦  «         ‚ w xY wŒñd S )
N)õ   Â…u   â€¨u   â€©)r   Úlatin1s   Cookie: foo=s   barrÕ   ÚCookiezfoo=rÍ   zfailed while trying %r in %s)r„   ÚUnicodeEncodeErrorr   rQ   r   Údecoder%   rS   rÁ   Ú	Exceptionr   Úwarning)r'   ÚnewlinesÚnewlineÚencodingÚencodedrh   rÄ   Úexpecteds           r   Útest_unicode_newlinesz%HTTPHeadersTest.test_unicode_newlines¨  sH  € ð
ð 
ð 
ˆð  ð 	ð 	ˆGà.ð ð �ðð!Ø")§.¢.°Ñ":Ô":˜˜øÝ-ð !ð !ð !à ˜ð!øøøð +¨WÑ4°vÑ=�Dõ *Ô/µ
¸4¿;º;ÀxÑ;PÔ;PÑ0QÔ0QÑRÔR�Gð %Ø"¥Z°·²¸xÑ0HÔ0HÑ%IÔ%IÑIÈEÑQðð �Hð ×$Ò$ X­t°G·O²OÑ4EÔ4EÑ/FÔ/FÑGÔGÐGÐGøÝ ð ð ð Ý”OÐ$BÀGÈXÑVÔVÐVØðøøøð%ð	ð 	s"   �%¤C¥
2¯C±2²BCÃ"C4c                 óÒ   — g d¢}|D ]_\  }}t          j        d|z  ¦  «        }|rdg}ndd|z  fg}|                      |t          |                     ¦   «         ¦  «        ¦  «         Œ`d S )N))ú T)ú	T)õ   Â F)rÔ   FzTransfer-Encoding: %schunked)úTransfer-EncodingÚchunkedrå   z	%schunked)r   rQ   r%   rS   rÁ   )r'   Ú
whitespacerÑ   ÚstrippedrÄ   rß   s         r   Útest_unicode_whitespacez'HTTPHeadersTest.test_unicode_whitespaceÓ  s›   € ð

ð 
ð 
ˆ
ð &ð 	@ð 	@‰KˆAˆxÝ!Ô'Ð(FÈÑ(JÑKÔKˆGØð DØ<Ð=��à0°+À±/ÐBÐC�Ø×Ò˜X¥t¨G¯OªOÑ,=Ô,=Ñ'>Ô'>Ñ?Ô?Ð?Ð?ð	@ð 	@r   c                 ó(  — |                       t          ¦  «        5  t          j        d¦  «         d d d ¦  «         n# 1 swxY w Y   t          j        d¦  «        }|                      t          |                     ¦   «         ¦  «        g d¢¦  «         d S )Nz&CRLF: crlf
LF: lf
CR: crMore: more
zCRLF: crlf
LF: lf
More: more
))ÚCrlfÚcrlf)ÚLfÚlf)ÚMoreÚmore)r|   r   r   rQ   r%   rÀ   rÁ   ©r'   rÄ   s     r   Útest_optional_crz HTTPHeadersTest.test_optional_cræ  sá   € à×Ò�~Ñ.Ô.ð 	Nð 	NÝÔÐLÑMÔMÐMð	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøøøð 	Nð 	Nð 	Nð 	Nõ
 Ô#Ð$JÑKÔKˆØ×ÒÝ�7—?’?Ñ$Ô$Ñ%Ô%Ø>Ð>Ð>ñ	
ô 	
ð 	
ð 	
ð 	
s   ›<¼A ÁA c           	      ó(  — g d¢}t          ¦   «         }|D ]\  }}|                     ||¦  «         Œ|                     ¦   «         }t          j        |¦  «        }t          j        |¦  «        }||||fD ]D}|                      t          t          |                     ¦   «         ¦  «        ¦  «        |¦  «         ŒE|||fD ]T}|                      ||¦  «         |                      | 	                    d¦  «        | 	                    d¦  «        ¦  «         ŒUd S )N))ÚArL   )rô   rO   )ÚBrÑ   rô   )
r   ÚaddÚcopyÚdeepcopyr%   rS   rÀ   rÁ   ÚassertIsNotr¿   )	r'   Ú	all_pairsÚh1ÚkÚvÚh2Úh3Úh4rÄ   s	            r   Ú	test_copyzHTTPHeadersTest.test_copyó  s   € Ø8Ð8Ð8ˆ	Ý‰]Œ]ˆØð 	ð 	‰DˆAˆqØ�FŠF�1�a‰LŒLˆLˆLØ�WŠW‰YŒYˆÝŒY�r‰]Œ]ˆÝŒ]˜2ÑÔˆØ˜B  BÐ'ð 	Ið 	IˆGð ×Ò�T¥&¨¯ªÑ):Ô):Ñ";Ô";Ñ<Ô<¸iÑHÔHÐHÐHØ˜B �|ð 	Fð 	FˆGà×Ò˜W bÑ)Ô)Ð)Ø×Ò˜W×-Ò-¨cÑ2Ô2°B·K²KÀÑ4DÔ4DÑEÔEÐEÐEð	Fð 	Fr   c                 óF  — t          ¦   «         }|                     dd¦  «         |                     dd¦  «         |                     dd¦  «         t          j        |¦  «        }t          j        |¦  «        }|                      t          |                     ¦   «         ¦  «        t          |                     ¦   «         ¦  «        ¦  «         |                      t          |                     ¦   «         ¦  «        t          |                     ¦   «         ¦  «        ¦  «         d S )Nz
Set-Cookieza=bzc=dzContent-Typez	text/html)	r   rö   ÚpickleÚdumpsÚloadsr%   rÀ   rÁ   Úitems)r'   rÄ   ÚpickledÚ	unpickleds       r   Útest_pickle_roundtripz%HTTPHeadersTest.test_pickle_roundtrip  sß   € Ý‘-”-ˆØ�Š�L %Ñ(Ô(Ð(Ø�Š�L %Ñ(Ô(Ð(Ø�Š�N KÑ0Ô0Ð0Ý”,˜wÑ'Ô'ˆÝ”L Ñ)Ô)ˆ	Ø×Ò� §¢Ñ 1Ô 1Ñ2Ô2µF¸9×;LÒ;LÑ;NÔ;NÑ4OÔ4OÑPÔPÐPØ×Ò� §¢¡¤Ñ0Ô0µ&¸¿ºÑ9JÔ9JÑ2KÔ2KÑLÔLÐLÐLÐLr   c                 ó²  — t          ¦   «         }d|d<   |                      |                     dd¦  «        d¦  «         |                      |d         d¦  «         |                      |                     dd¦  «        d¦  «         |                      |d         d¦  «         |                      t          |                     ¦   «         ¦  «        ddg¦  «         d S )NrÍ   r»   rÎ   ÚquuxÚxyzzy)rº   rÍ   )ÚQuuxr  )r   r%   Ú
setdefaultrÀ   rÁ   rñ   s     r   Útest_setdefaultzHTTPHeadersTest.test_setdefault  sÈ   € Ý‘-”-ˆØˆ�‰à×Ò˜×+Ò+¨E°5Ñ9Ô9¸5ÑAÔAÐAØ×Ò˜ œ¨Ñ/Ô/Ð/à×Ò˜×+Ò+¨F°GÑ<Ô<¸gÑFÔFÐFØ×Ò˜ œ¨'Ñ2Ô2Ð2Ø×Ò� §¢Ñ 1Ô 1Ñ2Ô2°^ÐEVÐ4WÑXÔXÐXÐXÐXr   c                 ó  — t          ¦   «         }|                     dd¦  «         |                     dd¦  «         |                     dd¦  «         t          j        t          |¦  «        ¦  «        }|                      ||¦  «         d S )Nrº   rL   rO   rM   )r   rö   rQ   r}   r%   )r'   rÄ   Úheaders2s      r   Útest_stringzHTTPHeadersTest.test_string  sy   € Ý‘-”-ˆØ�Š�E˜3ÑÔÐØ�Š�E˜3ÑÔÐØ�Š�E˜3ÑÔÐÝÔ$¥S¨¡\¤\Ñ2Ô2ˆØ×Ò˜ (Ñ+Ô+Ð+Ð+Ð+r   c                 óÄ   — g d¢}|D ]X}t          ¦   «         }|                      t          ¦  «        5  |                     |d¦  «         d d d ¦  «         n# 1 swxY w Y   ŒYd S )N)Ú zfoo barzfoo	barzfoo
barzfoo barzfoo z fooõ   Ã©rÍ   )r   r|   r   rö   )r'   Úinvalid_namesÚnamerÄ   s       r   Útest_invalid_header_namesz)HTTPHeadersTest.test_invalid_header_names!  sµ   € ð	
ð 	
ð 	
ˆð "ð 	)ð 	)ˆDÝ!‘m”mˆGØ×"Ò"¥>Ñ2Ô2ð )ð )Ø—’˜D %Ñ(Ô(Ð(ð)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )øð	)ð 	)s   ±AÁA	ÁA	c                 ó„   — d„ } |d¦  «        } |d¦  «        }||z  dk    r|                       d|›d|›�¦  «         d S d S )Nc                 óÀ   — t          j        ¦   «         }t          ¦   «         }t          | ¦  «        D ]}|                     dd¦  «         Œt          j        ¦   «         |z
  S )NzX-FoorÍ   )r›   rœ   r   rÏ   rö   )r�   rž   rÄ   Úis       r   r    z2HTTPHeadersTest.test_linear_performance.<locals>.f2  sY   € ÝÔ%Ñ'Ô'ˆEÝ!‘m”mˆGÝ˜1‘X”Xð ,ð ,�Ø—’˜G UÑ+Ô+Ð+Ð+ÝÔ$Ñ&Ô&¨Ñ.Ð.r   r¡   é † r¢   z.HTTPHeaders.add() does not scale linearly: d1=r£   r¤   r¦   s       r   Útest_linear_performancez'HTTPHeadersTest.test_linear_performance1  sj   € ð	/ð 	/ð 	/ð ˆQˆv‰YŒYˆØˆQˆw‰ZŒZˆØ�‰7�RŠ<ˆ<à�IŠIÐRÀBÐRÐRÈRÐRÐRÑSÔSÐSÐSÐSð ˆ<r   N)rE   rF   rG   rÅ   rÇ   rÒ   rà   ré   rò   r  r	  r  r  r  r  r   r   r   r¶   r¶   o  sà   € € € € € ð+ð +ð +ð:Cð Cð Cð 	Kð 	Kð 	Kð)ð )ð )ðV@ð @ð @ð&
ð 
ð 
ðFð Fð Fð"Mð Mð Mð	Yð 	Yð 	Yð,ð ,ð ,ð)ð )ð )ð Tð Tð Tð Tð Tr   r¶   c                   óL   — e 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S )ÚFormatTimestampTestg*; R]AÔAzSun, 27 Jan 2013 18:43:20 GMTc                 óV   — |                       t          |¦  «        | j        ¦  «         d S ©N)r%   r   ÚEXPECTED)r'   Úvalues     r   ÚcheckzFormatTimestampTest.checkF  s)   € Ø×ÒÕ)¨%Ñ0Ô0°$´-Ñ@Ô@Ð@Ð@Ð@r   c                 ó:   — |                       | j        ¦  «         d S r!  )r$  Ú	TIMESTAMP©r'   s    r   Útest_unix_time_floatz(FormatTimestampTest.test_unix_time_floatI  s   € Ø�
Š
�4”>Ñ"Ô"Ð"Ð"Ð"r   c                 óT   — |                       t          | j        ¦  «        ¦  «         d S r!  )r$  Úintr&  r'  s    r   Útest_unix_time_intz&FormatTimestampTest.test_unix_time_intL  s$   € Ø�
Š
•3�t”~Ñ&Ô&Ñ'Ô'Ð'Ð'Ð'r   c                 ó^   — |                       t          j        | j        ¦  «        ¦  «         d S r!  )r$  r›   Úgmtimer&  r'  s    r   Útest_struct_timez$FormatTimestampTest.test_struct_timeO  s&   € Ø�
Š
•4”;˜tœ~Ñ.Ô.Ñ/Ô/Ð/Ð/Ð/r   c                 óÂ   — t          t          j        | j        ¦  «        ¦  «        }|                      dt          |¦  «        ¦  «         |                      |¦  «         d S )NrÊ   )Útupler›   r-  r&  r%   Úlenr$  )r'   Útups     r   Útest_time_tuplez#FormatTimestampTest.test_time_tupleR  sJ   € Ý•D”K ¤Ñ/Ô/Ñ0Ô0ˆØ×Ò˜�C ™HœHÑ%Ô%Ð%Ø�
Š
�3‰Œˆˆˆr   c                 ó¼   — |                       t          j                             | j        t          j        j        ¦  «                             d ¬¦  «        ¦  «         d S )N)Útzinfo)r$  ÚdatetimeÚfromtimestampr&  ÚtimezoneÚutcrf   r'  s    r   Útest_utc_naive_datetimez+FormatTimestampTest.test_utc_naive_datetimeW  sT   € Ø�
Š
ÝÔ×+Ò+Ø”¥Ô 1Ô 5ñô çŠg˜TˆgÑ"Ô"ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óÂ   — t          ¦   «         5  |                      t          j                             | j        ¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r!  )r   r$  r6  Úutcfromtimestampr&  r'  s    r   Ú"test_utc_naive_datetime_deprecatedz6FormatTimestampTest.test_utc_naive_datetime_deprecated^  s«   € ÝÑ!Ô!ð 	Kð 	KØ�JŠJ•xÔ(×9Ò9¸$¼.ÑIÔIÑJÔJÐJð	Kð 	Kð 	Kñ 	Kô 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð 	Køøøð 	Kð 	Kð 	Kð 	Kð 	Kð 	Ks   �8AÁAÁAc                 ó”   — |                       t          j                             | j        t          j        j        ¦  «        ¦  «         d S r!  )r$  r6  r7  r&  r8  r9  r'  s    r   Útest_utc_aware_datetimez+FormatTimestampTest.test_utc_aware_datetimeb  s@   € Ø�
Š
ÝÔ×+Ò+¨D¬N½HÔ<MÔ<QÑRÔRñ	
ô 	
ð 	
ð 	
ð 	
r   c           
      óÀ   — |                       t          j                             | j        t          j        t          j        d¬¦  «        ¦  «        ¦  «        ¦  «         d S )Néüÿÿÿ)Úhours)r$  r6  r7  r&  r8  Ú	timedeltar'  s    r   Útest_other_aware_datetimez-FormatTimestampTest.test_other_aware_datetimeg  sX   € à�
Š
ÝÔ×+Ò+Ø”¥Ô 1µ(Ô2DÈ2Ð2NÑ2NÔ2NÑ OÔ Oñô ñ	
ô 	
ð 	
ð 	
ð 	
r   N)rE   rF   rG   r&  r"  r$  r(  r+  r.  r3  r:  r=  r?  rD  r   r   r   r  r  A  s«   € € € € € à!€IØ.€HðAð Að Að#ð #ð #ð(ð (ð (ð0ð 0ð 0ðð ð ð

ð 
ð 
ðKð Kð Kð
ð 
ð 
ð

ð 
ð 
ð 
ð 
r   r  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚHTTPServerRequestTestc                 ó&   — t          d¬¦  «         d S ©Nú/)Úuri)r   r'  s    r   Útest_default_constructorz.HTTPServerRequestTest.test_default_constructors  s   € õ 	˜cÐ"Ñ"Ô"Ð"Ð"Ð"r   c                 óf   — t          d¬¦  «        }|                      |j        t          ¦  «         d S rH  )r   ÚassertIsInstancerc   Úbytes©r'   Úrequests     r   Útest_body_is_a_byte_stringz0HTTPServerRequestTest.test_body_is_a_byte_stringy  s0   € Ý#¨Ð,Ñ,Ô,ˆØ×Ò˜gœl­EÑ2Ô2Ð2Ð2Ð2r   c                 óŽ   — t          dt          ddgi¦  «        ¬¦  «        }|                      dt          |¦  «        ¦  «         d S )NrI  ÚCanaryz	Coal Mine)rJ  rÄ   )r   r   ÚassertNotInÚreprrO  s     r   Ú"test_repr_does_not_contain_headersz8HTTPServerRequestTest.test_repr_does_not_contain_headers}  sN   € Ý#Ø�[¨(°[°MÐ)BÑCÔCð
ñ 
ô 
ˆð 	×Ò˜¥4¨¡=¤=Ñ1Ô1Ð1Ð1Ð1r   N)rE   rF   rG   rK  rQ  rV  r   r   r   rF  rF  r  sA   € € € € € ð#ð #ð #ð3ð 3ð 3ð2ð 2ð 2ð 2ð 2r   rF  c                   ó    — e Zd ZdZdZdZd„ ZdS )ÚParseRequestStartLineTestÚGETz/foozHTTP/1.1c                 ó2  — d                      | j        | j        | j        g¦  «        }t	          |¦  «        }|                      |j        | j        ¦  «         |                      |j        | j        ¦  «         |                      |j        | j        ¦  «         d S )Nrâ   )	ÚjoinÚMETHODÚPATHÚVERSIONr   r%   ÚmethodÚpathÚversion)r'   Ú
start_lineÚparsed_start_lines      r   Útest_parse_request_start_linez7ParseRequestStartLineTest.test_parse_request_start_line‰  sˆ   € Ø—X’X˜tœ{¨D¬I°t´|ÐDÑEÔEˆ
Ý4°ZÑ@Ô@ÐØ×ÒÐ*Ô1°4´;Ñ?Ô?Ð?Ø×ÒÐ*Ô/°´Ñ;Ô;Ð;Ø×ÒÐ*Ô2°D´LÑAÔAÐAÐAÐAr   N)rE   rF   rG   r\  r]  r^  rd  r   r   r   rX  rX  „  s7   € € € € € Ø€FØ€DØ€GðBð Bð Bð Bð Br   rX  c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚParseCookieTestc                 ó†  — |                       t          d¦  «        dddœ¦  «         |                       t          d¦  «        dddd	d
œ¦  «         |                       t          d¦  «        ddi¦  «         |                       t          d¦  «        ddi¦  «         |                       t          d¦  «        dddddœ¦  «         dS )zO
        Test cases copied from Python's Lib/test/test_http_cookies.py
        zchips=ahoy; vienna=fingerÚahoyÚfinger)ÚchipsÚviennaz)keebler="E=mc2; L=\"Loves\"; fudge=\012;"z"E=mc2z	\"Loves\"z\012rr   )ÚkeeblerÚLÚfudger  zkeebler=E=mc2rl  zE=mc2zkey:term=value:termzkey:termz
value:termza=b; c=[; d=r; f=hrN   ú[ÚrÚh)rK   rÑ   Údr    N©r%   r	   r'  s    r   Útest_python_cookiesz#ParseCookieTest.test_python_cookies”  s÷   € ð 	×ÒÝÐ4Ñ5Ô5Ø¨Ð1Ð1ñ	
ô 	
ð 	
ð 	×ÒÝÐGÑHÔHØ  }¸wÈCÐPÐPñ	
ô 	
ð 	
ð
 	×Ò� oÑ6Ô6¸ÀGÐ8LÑMÔMÐMà×ÒÝÐ.Ñ/Ô/°*¸lÐ1Kñ	
ô 	
ð 	
ð 	×ÒÝÐ-Ñ.Ô.°cÀÈ#ÐTWÐ0XÐ0Xñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óž   — |                       t          d¦  «        dddœ¦  «         |                       t          d¦  «        dddœ¦  «         d S )	Nza=b; Domain=example.comrN   zexample.com)rK   ÚDomainza=b; h=i; a=crÑ   r  )rK   rq  rs  r'  s    r   Útest_cookie_edgecasesz%ParseCookieTest.test_cookie_edgecases­  s^   € à×ÒÝÐ2Ñ3Ô3¸3È-Ð5XÐ5Xñ	
ô 	
ð 	
ð
 	×Ò� oÑ6Ô6¸cÈÐ8LÐ8LÑMÔMÐMÐMÐMr   c                 ó  — |                       dt          d¦  «                             ¦   «         ¦  «         |                      t          d¦  «        ddddœ¦  «         |                      t          d¦  «        d	d
dœ¦  «         |                      t          d¦  «        ddi¦  «         |                      t          d¦  «        dt	          d¦  «        i¦  «         |                      t          d¦  «        dddœ¦  «         dS )zs
        Cookie strings that go against RFC6265 but browsers will send if set
        via document.cookie.
        Údjango_languagez$abc=def; unnamed; django_language=enza=b; "; c=drN   rr   rr  )rK   r  rÑ   za b c=d e = f; gh=izd e = fr  )za b cÚghza   b,c<>@:/[]?{}=d  "  =e,f gza   b,c<>@:/[]?{}zd  "  =e,f gu   saint=AndrÃ© BessetteÚsaintu   AndrÃ© Bessettez  =  b  ;  ;  =  ;   c  =  ;  r  )r  rÑ   N)rT   r	   Úkeysr%   r   r'  s    r   Útest_invalid_cookiesz$ParseCookieTest.test_invalid_cookies¶  s,  € ð 	�ŠØÝÐ?Ñ@Ô@×EÒEÑGÔGñ	
ô 	
ð 	
ð
 	×Ò� mÑ4Ô4¸CÀSÈsÐ6SÐ6SÑTÔTÐTà×ÒÝÐ.Ñ/Ô/¸9ÈCÐ1PÐ1Pñ	
ô 	
ð 	
ð 	×ÒÝÐ9Ñ:Ô:Ø  .Ð1ñ	
ô 	
ð 	
ð
 	×ÒÝÐ0Ñ1Ô1Ø•jÐ!2Ñ3Ô3Ð4ñ	
ô 	
ð 	
ð 	×ÒÝÐ9Ñ:Ô:ÀÈ2Ð<NÐ<Nñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óÎ   — g d¢}|D ]]\  }}|                       |¦  «        5  t          |¦  «        }|                      |d         |¦  «         d d d ¦  «         n# 1 swxY w Y   Œ^d S )N))za="b=\""úb=")za="b=\\"úb=\)za="b=\="zb==)za="b=\n"zb=n)z
a="b=\042"r  )z
a="b=\134"r€  )z
a="b=\377"u   b=Ã¿)z
a="b=\400"zb=400)z	a="b=\42"zb=42)za="b=\\042"zb=\042)za="b=\\134"zb=\134)z
a="b=\\\""úb=\")za="b=\\\042"r�  )za="b=\134\""r�  )za="b=\134\042"r�  rK   )ÚsubTestr	   r%   )r'   ÚcasesrÞ   ÚdecodedrÑ   s        r   Útest_unquotezParseCookieTest.test_unquoteØ  sÂ   € ð
ð 
ð 
ˆð" !&ð 	2ð 	2ÑˆG�WØ—’˜gÑ&Ô&ð 2ð 2Ý  Ñ)Ô)�Ø× Ò   3¤¨Ñ1Ô1Ð1ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2øð	2ð 	2s   ¡,AÁA	Á A	c                 óò  — d}dD ]ñ}|                       |¦  «        5  t          j        ¦   «         }d||z  z   dz   }t          |¦  «        d         }t          j        ¦   «         }|                      |d d…         d¦  «         |                      |dd …         d	¦  «         |                      t	          |¦  «        |d
z   ¦  «         |                      ||z
  dd¦  «         d d d ¦  «         n# 1 swxY w Y   Œòd S )Nr  )rq   z\134za="b=rr   rK   é   r€  éýÿÿÿz\\\é   é   zTest took too long)r‚  r›   r	   r%   r1  Ú
assertLess)r'   r�   rÞ   rž   rh   r#  Úends          r   Útest_unquote_largez"ParseCookieTest.test_unquote_largeñ  sS  € ð ˆØ%ð 	Fð 	FˆGØ—’˜gÑ&Ô&ð 
Fð 
FÝœ	™œ�Ø ¨1¡Ñ,¨sÑ2�Ý$ TÑ*Ô*¨3Ô/�Ý”i‘k”k�Ø× Ò   r¨ r¤¨FÑ3Ô3Ð3Ø× Ò   r s s¤¨XÑ6Ô6Ð6Ø× Ò ¥ U¡¤¨Q°©UÑ3Ô3Ð3ð —’  e¡¨QÐ0DÑEÔEÐEð
Fð 
Fð 
Fñ 
Fô 
Fð 
Fð 
Fð 
Fð 
Fð 
Fð 
Føøøð 
Fð 
Fð 
Fð 
Føð	Fð 	Fs   œCC+Ã+C/	Ã2C/	N)rE   rF   rG   rt  rw  r}  r…  r�  r   r   r   rf  rf  ‘  sh   € € € € € ð
ð 
ð 
ð2Nð Nð Nð 
ð  
ð  
ðD2ð 2ð 2ð2Fð Fð Fð Fð Fr   rf  )+Útornado.httputilr   r   r   r   r   r   r	   r
   r   r   r   Útornado.escaper   r   Útornado.logr   Útornado.test.utilr   r÷   r6  rv   r  r›   Úurllib.parserP   ÚunittestÚtypingr   r   r   r}   rN  r   ÚTestCaser   rI   rZ   r¶   r  rF  rX  rf  r   r   r   ú<module>r–     s  ððð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ,Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø Ð Ð Ð Ð Ð Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0à €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€à $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ð˜˜d 3¨¨U¬Ð#3Ô4°d¸3ÀÀXÄÐ;NÔ6OÐOÔPð ð ð ð ð/<ð /<ð /<ð /<ð /<�HÔ%ñ /<ô /<ð /<ðd'ð 'ð 'ð 'ð '�(Ô#ñ 'ô 'ð 'ðJTð JTð JTð JTð JT˜HÔ-ñ JTô JTð JTðZOTð OTð OTð OTð OT�hÔ'ñ OTô OTð OTðd,
ð ,
ð ,
ð ,
ð ,
˜(Ô+ñ ,
ô ,
ð ,
ðb2ð 2ð 2ð 2ð 2˜HÔ-ñ 2ô 2ð 2ð$
Bð 
Bð 
Bð 
Bð 
B Ô 1ñ 
Bô 
Bð 
BðsFð sFð sFð sFð sF�hÔ'ñ sFô sFð sFð sFð sFr   