Ë
    êmxiHa  ã                   óš  — d 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	 ddl
mZ ddl
mZ ddlmZmZ ddlmZmZmZmZmZ ddlmZ dd	lmZmZmZmZmZ ddlZej<                  rdd
lmZm Z   ejB                  d«      Z" ejF                  d«      Z$ G d„ de«      Z% G d„ de«      Z&e'dk(  r ejP                  e%«        e«        yy)z5Non-blocking HTTP client implementation using pycurl.é    N)ÚBytesIO)Úhttputil)Úioloop)Úutf8Ú
native_str)ÚHTTPRequestÚHTTPResponseÚ	HTTPErrorÚAsyncHTTPClientÚmain)Úapp_log)ÚDictÚAnyÚCallableÚUnionÚOptional)ÚDequeÚTupleztornado.curl_httpclients   |
c            
       óÊ  ‡ — e Zd Z	 d&dedeeeef      ddfˆ fd„Zd'ˆ fd„Z	de
deegdf   ddfd	„Zd
ededededdf
d„Zdeddfd„Zdededdfd„Zd'd„Zd'd„Zd'd„Zd'd„Z	 	 d(dej.                  dee   dee   ddfd„Zdeddfd„Zdej.                  fd„Zdej.                  de
dedej:                  ddf
d„Zdej:                  d eegdf   d!eddfd"„Zd#ed$eddfd%„Z ˆ xZ!S ))ÚCurlAsyncHTTPClientNÚmax_clientsÚdefaultsÚreturnc                 ó  •— t         ‰| �  |¬«       t        j                  «       | _        | j                  j                  t        j                  | j                  «       | j                  j                  t        j                  | j                  «       t        |«      D �cg c]  }| j                  «       ‘Œ c}| _        | j                  d d  | _        t        j                  «       | _        i | _        d | _        t'        j(                  | j*                  d«      | _        | j,                  j/                  «        t        j0                  «       }| j                  j3                  |«       | j                  j5                  |«       y c c}w )N)r   éè  )ÚsuperÚ
initializeÚpycurlÚ	CurlMultiÚ_multiÚsetoptÚM_TIMERFUNCTIONÚ_set_timeoutÚM_SOCKETFUNCTIONÚ_handle_socketÚrangeÚ_curl_createÚ_curlsÚ
_free_listÚcollectionsÚdequeÚ	_requestsÚ_fdsÚ_timeoutr   ÚPeriodicCallbackÚ_handle_force_timeoutÚ_force_timeout_callbackÚstartÚCurlÚ
add_handleÚremove_handle)Úselfr   r   ÚiÚdummy_curl_handleÚ	__class__s        €úN/home/htdocs/ttos/venv/lib/python3.12/site-packages/tornado/curl_httpclient.pyr   zCurlAsyncHTTPClient.initialize4   s%  ø€ ô 	‰Ñ HÐÔ-ä×&Ñ&Ó(ˆŒØ�‰×Ñœ6×1Ñ1°4×3DÑ3DÔEØ�‰×Ñœ6×2Ñ2°D×4GÑ4GÔHÜ49¸+Ó4FÖG¨q�t×(Ñ(Õ*ÒGˆŒØŸ+™+¡a˜.ˆŒä×ÑÓð 	Œð ˆŒ	ØˆŒô (.×'>Ñ'>Ø×&Ñ&¨ó(
ˆÔ$ð 	×$Ñ$×*Ñ*Ô,ô #ŸK™K›MÐØ�‰×ÑÐ0Ô1Ø�‰×!Ñ!Ð"3Õ4ùò1 Hs   Â Fc                 óJ  •— | j                   j                  «        | j                  �%| j                  j	                  | j                  «       | j
                  D ]  }|j                  «        Œ | j                  j                  «        t        ‰| �  «        d | _         d | _        y ©N)	r1   Ústopr.   Úio_loopÚremove_timeoutr(   Úcloser    r   )r6   Úcurlr9   s     €r:   r@   zCurlAsyncHTTPClient.closeV   s{   ø€ Ø×$Ñ$×)Ñ)Ô+Ø�=‰=Ð$Ø�L‰L×'Ñ'¨¯©Ô6Ø—K‘Kò 	ˆDØ�J‰J�Lð	à�‰×ÑÔÜ‰‰Œð
 (,ˆÔ$Øˆ�ó    ÚrequestÚcallbackc                 ó²   — | j                   j                  ||| j                  j                  «       f«       | j	                  «        | j                  d«       y ©Nr   )r,   Úappendr>   ÚtimeÚ_process_queuer#   )r6   rC   rD   s      r:   Ú
fetch_implzCurlAsyncHTTPClient.fetch_imple   sD   € ð 	�‰×Ñ˜w¨°$·,±,×2CÑ2CÓ2EÐFÔGØ×ÑÔØ×Ñ˜!ÕrB   ÚeventÚfdÚmultiÚdatac           	      óÜ  — t         j                  t        j                  j                  t         j
                  t        j                  j                  t         j                  t        j                  j                  t         j                  t        j                  j                  t        j                  j                  z  i}|t         j                  k(  r8|| j                  v r)| j                  j                  |«       | j                  |= yy||   }|| j                  v r| j                  j                  |«       | j                  j                  || j                  |«       || j                  |<   y)z_Called by libcurl when it wants to change the file descriptors
        it cares about.
        N)r   Ú	POLL_NONEr   ÚIOLoopÚNONEÚPOLL_INÚREADÚPOLL_OUTÚWRITEÚ
POLL_INOUTÚPOLL_REMOVEr-   r>   Úremove_handlerÚadd_handlerÚ_handle_events)r6   rK   rL   rM   rN   Ú	event_mapÚioloop_events          r:   r%   z"CurlAsyncHTTPClient._handle_socketl   sû   € ô
 ×ÑœfŸm™m×0Ñ0Ü�N‰NœFŸM™M×.Ñ.Ü�O‰OœVŸ]™]×0Ñ0Ü×ÑœvŸ}™}×1Ñ1´F·M±M×4GÑ4GÑGð	
ˆ	ð ”F×&Ñ&Ò&Ø�T—Y‘Y‰Ø—‘×+Ñ+¨BÔ/Ø—I‘I˜b‘Mð ð % UÑ+ˆLð �T—Y‘Y‰Ø—‘×+Ñ+¨BÔ/Ø�L‰L×$Ñ$ R¨×)<Ñ)<¸lÔKØ(ˆD�I‰I�bŠMrB   Úmsecsc                 óø   — | j                   �%| j                  j                  | j                   «       | j                  j                  | j                  j	                  «       |dz  z   | j
                  «      | _         y)z(Called by libcurl to schedule a timeout.Ng     @�@)r.   r>   r?   Úadd_timeoutrH   Ú_handle_timeout)r6   r^   s     r:   r#   z CurlAsyncHTTPClient._set_timeout‰   sY   € à�=‰=Ð$Ø�L‰L×'Ñ'¨¯©Ô6ØŸ™×0Ñ0Ø�L‰L×ÑÓ %¨&¡.Ñ0°$×2FÑ2Fó
ˆ�rB   Úeventsc                 ó²  — d}|t         j                  j                  z  r|t        j                  z  }|t         j                  j
                  z  r|t        j                  z  }	 	 | j                  j                  ||«      \  }}|t        j                  k7  rnŒ5| j                  «        y# t        j                  $ r}|j                  d   }Y d}~ŒMd}~ww xY w)zXCalled by IOLoop when there is activity on one of our
        file descriptors.
        r   N)r   rQ   rT   r   Ú
CSELECT_INrV   ÚCSELECT_OUTr    Úsocket_actionÚerrorÚargsÚE_CALL_MULTI_PERFORMÚ_finish_pending_requests)r6   rL   rb   ÚactionÚretÚnum_handlesÚes          r:   r[   z"CurlAsyncHTTPClient._handle_events‘   s¹   € ð ˆØ”F—M‘M×&Ñ&Ò&Ø”f×'Ñ'Ñ'ˆFØ”F—M‘M×'Ñ'Ò'Ø”f×(Ñ(Ñ(ˆFØð Ø#'§;¡;×#<Ñ#<¸RÀÓ#HÑ ��[ð ”f×1Ñ1Ò1Øð ð 	×%Ñ%Õ'øô	 —<‘<ò  Ø—f‘f˜Q‘i•ûð ús   Á%B* Â*CÂ=CÃCc                 óz  — d| _         	 	 | j                  j                  t        j                  d«      \  }}|t        j                  k7  rnŒC| j                  «        | j                  j                  «       }|dk\  r| j                  |«       yy# t        j
                  $ r}|j                  d   }Y d}~Œ~d}~ww xY w)z7Called by IOLoop when the requested timeout has passed.Nr   )r.   r    rf   r   ÚSOCKET_TIMEOUTrg   rh   ri   rj   Útimeoutr#   )r6   rl   rm   rn   Únew_timeouts        r:   ra   z#CurlAsyncHTTPClient._handle_timeout£   s«   € àˆŒØð Ø#'§;¡;×#<Ñ#<¼V×=RÑ=RÐTUÓ#VÑ ��[ð ”f×1Ñ1Ò1Øð ð 	×%Ñ%Ô'ð —k‘k×)Ñ)Ó+ˆØ˜!ÒØ×Ñ˜kÕ*ð øô) —<‘<ò  Ø—f‘f˜Q‘i•ûð ús   Š-B ÂB:Â!B5Â5B:c                 óê   — 	 	 | j                   j                  «       \  }}|t        j
                  k7  rnŒ3| j                  «        y# t        j                  $ r}|j                  d   }Y d}~ŒMd}~ww xY w)zpCalled by IOLoop periodically to ask libcurl to process any
        events it may have forgotten about.
        r   N)r    Ú
socket_allr   rg   rh   ri   rj   )r6   rl   rm   rn   s       r:   r0   z)CurlAsyncHTTPClient._handle_force_timeoutÀ   sl   € ð ð Ø#'§;¡;×#9Ñ#9Ó#;Ñ ��[ð ”f×1Ñ1Ò1Øð ð 	×%Ñ%Õ'øô	 —<‘<ò  Ø—f‘f˜Q‘i•ûð ús   ƒA ÁA2ÁA-Á-A2c                 óÜ   — 	 | j                   j                  «       \  }}}|D ]  }| j                  |«       Œ |D ]  \  }}}| j                  |||«       Œ |dk(  rnŒ[| j                  «        y)zbProcess any requests that were completed by the last
        call to multi.socket_action.
        r   N)r    Ú	info_readÚ_finishrI   )r6   Únum_qÚok_listÚerr_listrA   ÚerrnumÚerrmsgs          r:   rj   z,CurlAsyncHTTPClient._finish_pending_requestsÍ   s~   € ð Ø'+§{¡{×'<Ñ'<Ó'>Ñ$ˆE�7˜HØò #�Ø—‘˜TÕ"ð#à(0ò 3Ñ$��f˜fØ—‘˜T 6¨6Õ2ð3à˜ŠzØð ð 	×ÑÕrB   c                 óÔ  — 	 d}| j                   �r| j                  �r|dz  }| j                   j                  «       }| j                  j                  «       \  }}}t	        j
                  «       t        «       |||t        j                  «       | j                  j                  «       j                  «       dœ|_
        	 | j                  |||j                  d   |j                  d   «       | j                  j                  |«       | j                   r| j                  r�Œ|sy �Œ## t        $ r9}| j                   j                  |«        |t!        |d|¬«      «       Y d }~Œ\d }~ww xY w)Nr   é   )ÚheadersÚbufferrC   rD   Úqueue_start_timeÚcurl_start_timeÚcurl_start_ioloop_timer€   r   éW  )rC   Úcoderg   )r)   r,   ÚpopÚpopleftr   ÚHTTPHeadersr   rH   r>   ÚcurrentÚinfoÚ_curl_setup_requestr    r4   Ú	ExceptionrG   r	   )r6   ÚstartedrA   rC   rD   r�   rn   s          r:   rI   z"CurlAsyncHTTPClient._process_queueÛ   s3  € ØØˆGØ—/“/ d§n£nØ˜1‘�Ø—‘×*Ñ*Ó,�Ø8<¿¹×8NÑ8NÓ8PÑ5�˜(Ð$4ô  (×3Ñ3Ó5Ü%›iØ&Ø (Ø(8Ü'+§y¡y£{Ø.2¯l©l×.BÑ.BÓ.D×.IÑ.IÓ.Kñ�”	ð1Ø×,Ñ,ØØØŸ	™	 (Ñ+ØŸ	™	 )Ñ,ô	ð$ —K‘K×*Ñ*¨4Ô0ðC —/’/ d§n¤nñF ØñM øô. !ò 
Oð —O‘O×*Ñ*¨4Ô0Ùœ\°'ÀÈ1ÔM×NÑNûð
Oús   Â=.D% Ä%	E'Ä./E"Å"E'rA   Ú
curl_errorÚcurl_messagec                 óv  — |j                   }d |_         | j                  j                  |«       | j                  j	                  |«       |d   }|r5|€J ‚t        ||«      }|€J ‚|j                  }d }|j                  «        d }nQd }|j                  t        j                  «      }|j                  t        j                  «      }|j                  d«       t        |d   |d   z
  |j                  t        j                  «      |j                  t        j                  «      |j                  t        j                   «      |j                  t        j"                  «      |j                  t        j$                  «      |j                  t        j&                  «      |j                  t        j(                  «      ¬«      }		  |d   t+        |d   ||d   ||||d   j-                  d	d «      | j.                  j1                  «       |d   z
  |d
   |	¬«
      «       y # t2        $ r | j5                  |d   «       Y y w xY w)Nr€   r   rƒ   r�   )ÚqueueÚ
namelookupÚconnectÚ
appconnectÚpretransferÚstarttransferÚtotalÚredirectrD   rC   r   zX-Http-Reasonr‚   )
rC   r…   r   r€   Úeffective_urlrg   ÚreasonÚrequest_timeÚ
start_timeÚ	time_info)rŠ   r    r5   r)   rG   Ú	CurlErrorr…   r@   Úgetinfor   Ú	HTTP_CODEÚEFFECTIVE_URLÚseekÚdictÚNAMELOOKUP_TIMEÚCONNECT_TIMEÚAPPCONNECT_TIMEÚPRETRANSFER_TIMEÚSTARTTRANSFER_TIMEÚ
TOTAL_TIMEÚREDIRECT_TIMEr	   Úgetr>   rH   rŒ   Úhandle_callback_exception)
r6   rA   rŽ   r�   rŠ   r€   rg   r…   r™   r�   s
             r:   rw   zCurlAsyncHTTPClient._finish  sï  € ð �y‰yˆØˆŒ	Ø�‰×!Ñ! $Ô'Ø�‰×Ñ˜tÔ$Ø�h‘ˆÙØÐ+Ð+Ð+Ü˜j¨,Ó7ˆEØÐ$Ð$Ð$Ø—:‘:ˆDØ ˆMØ�L‰LŒNØ‰FàˆEØ—<‘<¤× 0Ñ 0Ó1ˆDØ ŸL™L¬×)=Ñ)=Ó>ˆMØ�K‰K˜ŒNô ØÐ/Ñ0°4Ð8JÑ3KÑKØ—|‘|¤F×$:Ñ$:Ó;Ø—L‘L¤×!4Ñ!4Ó5Ø—|‘|¤F×$:Ñ$:Ó;ØŸ™¤V×%<Ñ%<Ó=ØŸ,™,¤v×'@Ñ'@ÓAØ—,‘,œv×0Ñ0Ó1Ø—\‘\¤&×"6Ñ"6Ó7ô	
ˆ	ð	=ØˆD�ÑÜØ  ™OØØ  ™OØ!Ø"/ØØ 	™?×.Ñ.¨ÀÓEØ!%§¡×!2Ñ!2Ó!4°tÐ<TÑ7UÑ!UØ#Ð$5Ñ6Ø'ôõøô ò 	=Ø×*Ñ*¨4°
Ñ+;Ö<ð	=ús   Æ?AH ÈH8È7H8c                 ó4   — t        j                  d|d¬«       y )NzException in callback %rT)Úexc_info)r   rg   )r6   rD   s     r:   r¬   z-CurlAsyncHTTPClient.handle_callback_exception:  s   € Ü�‰Ð0°(ÀTÖJrB   c                 ó$  — t        j                  «       }t        j                  t        j
                  «      rJ|j                  t         j                  d«       |j                  t         j                  | j                  «       t        t         d«      r~|j                  t         j                  t         j                  t         j                  z  «       |j                  t         j                  t         j                  t         j                  z  «       |S )Nr~   Ú	PROTOCOLS)r   r3   Úcurl_logÚisEnabledForÚloggingÚDEBUGr!   ÚVERBOSEÚDEBUGFUNCTIONÚ_curl_debugÚhasattrr°   Ú
PROTO_HTTPÚPROTO_HTTPSÚREDIR_PROTOCOLS)r6   rA   s     r:   r'   z CurlAsyncHTTPClient._curl_create=  s©   € Ü�{‰{‹}ˆÜ× Ñ ¤§¡Ô/Ø�K‰KœŸ™¨Ô*Ø�K‰Kœ×,Ñ,¨d×.>Ñ.>Ô?ÜÜ�Kô
ð �K‰Kœ×(Ñ(¬&×*;Ñ*;¼f×>PÑ>PÑ*PÔQØ�K‰Kœ×.Ñ.´×0AÑ0AÄF×DVÑDVÑ0VÔWØˆrB   r€   r   c           	      ó   ‡ ‡‡‡— ‰j                  t        j                  t        ‰j                  «      «       d‰j
                  vrd‰j
                  d<   d‰j
                  vrd‰j
                  d<   ‰j
                  j                  «       D ��cg c]<  \  }}dt        |«      j                  d«      t        |«      j                  d«      fz  ‘Œ> }}}|D ]%  }t        j                  |«      sŒt        d|z  «      ‚ ‰j                  t        j                  |«       ‰j                  t        j                  t        j                  ‰ j                  |‰j                   «      «       ‰j"                  r!dt$        t&        t(        f   d	t*        fˆˆ fd
„}	n|j,                  }	‰j                  t        j.                  |	«       ‰j                  t        j0                  ‰j2                  «       ‰j                  t        j4                  ‰j6                  «       ‰j8                  €J ‚‰j                  t        j:                  t+        d‰j8                  z  «      «       ‰j<                  €J ‚‰j                  t        j>                  t+        d‰j<                  z  «      «       ‰j@                  r4‰j                  t        jB                  t        ‰j@                  «      «       n ‰j                  t        jB                  d«       ‰jD                  r*‰j                  t        jF                  ‰jD                  «       ‰jH                  r!‰j                  t        jJ                  d«       n ‰j                  t        jJ                  d «       ‰jL                  �re‰jN                  �rX‰j                  t        jP                  ‰jL                  «       ‰j                  t        jR                  ‰jN                  «       ‰jT                  rX‰jV                  €J ‚tY        jZ                  ‰jT                  ‰jV                  «      }
‰j                  t        j\                  |
«       ‰j^                  �‰j^                  dk(  r/‰j                  t        j`                  t        jb                  «       n•‰j^                  dk(  r/‰j                  t        j`                  t        jd                  «       nWt        d‰j^                  z  «      ‚	 ‰jg                  t        jP                  «       ‰jg                  t        j\                  «       ‰jj                  rA‰j                  t        jl                  d«       ‰j                  t        jn                  d«       n@‰j                  t        jl                  d«       ‰j                  t        jn                  d«       ‰jp                  �+‰j                  t        jr                  ‰jp                  «       n	 ‰jt                  du r/‰j                  t        jv                  t        jx                  «       n.‰j                  t        jv                  t        jz                  «       t        j|                  t        j~                  t        j€                  t        j‚                  dœ}h d£}|j…                  «       D ]  }‰j                  |d«       Œ ‰j†                  |v r?‰jg                  t        jˆ                  «       ‰j                  |‰j†                     d«       n]‰jŠ                  s‰j†                  |v r+‰j                  t        jˆ                  ‰j†                  «       nt�        d‰j†                  z   «      ‚‰j†                  dv }‰jŽ                  d u}‰jŠ                  s(|r|r|r"|s t        d|rdnd›d‰j†                  ›d�«      ‚|s|�r3‰j†                  dk(  rt        d«      ‚t‘        t“        ‰jŽ                  xs d«      «      Šd t*        d	d fˆˆfd!„}‰j                  t        j”                  ‰j–                  «       ‰j                  t        j˜                  |«       ‰j†                  d"k(  r8‰j                  t        jš                  t�        ‰jŽ                  xs d«      «       nW‰j                  t        j€                  d«       ‰j                  t        jž                  t�        ‰jŽ                  xs d«      «       ‰j                   ��/‰j¢                  €J ‚‰j¤                  �‰j¤                  dk(  r/‰j                  t        j¦                  t        jb                  «       nV‰j¤                  dk(  r/‰j                  t        j¦                  t        jd                  «       nt        d#‰j¤                  z  «      ‚tY        jZ                  ‰j                   ‰j¢                  «      }‰j                  t        j¨                  |«       tª        j­                  d$‰j†                  ‰j                  ‰j                   «       nJ‰jg                  t        j¨                  «       tª        j­                  d%‰j†                  ‰j                  «       ‰j®                  �*‰j                  t        j°                  ‰j®                  «       ‰j²                  �*‰j                  t        j´                  ‰j²                  «       ‰j¶                  �t        d&«      ‚t¹        jº                  «       dkD  r ‰j                  t        j¼                  d«       ‰j¾                  �‰j¿                  ‰«       y y c c}}w # th        $ r$ ‰j                  t        jP                  d«       Y �Œ|w xY w)'NÚExpectÚ ÚPragmas   %s: %sÚASCIIz	ISO8859-1z+Illegal characters in header (CR or LF): %rÚbr   c                 ó‚   •— ‰j                   €J ‚‰j                  j                  ‰j                   | «       t        | «      S r<   )Ústreaming_callbackr>   Úadd_callbackÚlen)rÁ   rC   r6   s    €€r:   Úwrite_functionz?CurlAsyncHTTPClient._curl_setup_request.<locals>.write_functions  s8   ø€ Ø×1Ñ1Ð=Ð=Ð=Ø—‘×)Ñ)¨'×*DÑ*DÀaÔHÜ˜1“v�rB   r   z Mozilla/5.0 (compatible; pycurl)zgzip,deflateÚbasicÚdigestzUnsupported proxy_auth_mode %sr~   é   r   F)ÚGETÚPOSTÚPUTÚHEAD>   ÚPATCHÚDELETEÚOPTIONSTzunknown method )rË   rÎ   rÌ   z
Body must znot zbe None for method z+ (unless allow_nonstandard_methods is true)rÊ   z!Body must be None for GET requestÚcmdc                 óH   •— | ‰j                   k(  r‰j                  d«       y y rF   )ÚIOCMD_RESTARTREADr¢   )rÑ   rA   Úrequest_buffers    €€r:   Úioctlz6CurlAsyncHTTPClient._curl_setup_request.<locals>.ioctlç  s$   ø€ Ø˜$×0Ñ0Ò0Ø"×'Ñ'¨Õ*ð 1rB   rË   zUnsupported auth_mode %sz%s %s (username: %r)ú%s %sz,ssl_options not supported in curl_httpclient)`r!   r   ÚURLr   Úurlr   Úget_allÚencodeÚCR_OR_LF_REÚsearchÚ
ValueErrorÚ
HTTPHEADERÚHEADERFUNCTIONÚ	functoolsÚpartialÚ_curl_header_callbackÚheader_callbackrÃ   r   ÚbytesÚ	bytearrayÚintÚwriteÚWRITEFUNCTIONÚFOLLOWLOCATIONÚfollow_redirectsÚ	MAXREDIRSÚmax_redirectsÚconnect_timeoutÚCONNECTTIMEOUT_MSÚrequest_timeoutÚ
TIMEOUT_MSÚ
user_agentÚ	USERAGENTÚnetwork_interfaceÚ	INTERFACEÚdecompress_responseÚENCODINGÚ
proxy_hostÚ
proxy_portÚPROXYÚ	PROXYPORTÚproxy_usernameÚproxy_passwordr   Úencode_username_passwordÚPROXYUSERPWDÚproxy_auth_modeÚ	PROXYAUTHÚHTTPAUTH_BASICÚHTTPAUTH_DIGESTÚunsetoptÚ	TypeErrorÚvalidate_certÚSSL_VERIFYPEERÚSSL_VERIFYHOSTÚca_certsÚCAINFOÚ
allow_ipv6Ú	IPRESOLVEÚIPRESOLVE_V4ÚIPRESOLVE_WHATEVERÚHTTPGETrË   ÚUPLOADÚNOBODYÚvaluesÚmethodÚCUSTOMREQUESTÚallow_nonstandard_methodsÚKeyErrorÚbodyr   r   ÚREADFUNCTIONÚreadÚIOCTLFUNCTIONÚPOSTFIELDSIZErÅ   Ú
INFILESIZEÚauth_usernameÚauth_passwordÚ	auth_modeÚHTTPAUTHÚUSERPWDr±   ÚdebugÚclient_certÚSSLCERTÚ
client_keyÚSSLKEYÚssl_optionsÚ	threadingÚactive_countÚNOSIGNALÚprepare_curl_callback)r6   rA   rC   r€   r   ÚkÚvÚencoded_headersÚlinerÆ   ÚcredentialsÚcurl_optionsÚcustom_methodsÚoÚbody_expectedÚbody_presentrÕ   ÚuserpwdrÔ   s   ```               @r:   r‹   z'CurlAsyncHTTPClient._curl_setup_requestI  s  û€ ð 	�‰”F—J‘J¤
¨7¯;©;Ó 7Ô8ð ˜7Ÿ?™?Ñ*Ø(*ˆG�O‰O˜HÑ%ð ˜7Ÿ?™?Ñ*Ø(*ˆG�O‰O˜HÑ%ð
  Ÿ™×/Ñ/Ó1÷
ñ ��1ð Ü˜!‹}×#Ñ# GÓ,¬j¸«m×.BÑ.BÀ;Ó.OÐPóQð
ˆñ 
ð
 $ò 	WˆDÜ×!Ñ! $Õ'Ü Ð!NÐQUÑ!UÓVÐVð	Wð 	�‰”F×%Ñ% Ô7à�‰Ü×!Ñ!Ü×ÑØ×*Ñ*¨G°W×5LÑ5Lóô	
ð ×%Ò%ð¤%¬¬yÐ(8Ñ"9ð ¼c÷ ð $Ÿ\™\ˆNØ�‰”F×(Ñ(¨.Ô9Ø�‰”F×)Ñ)¨7×+CÑ+CÔDØ�‰”F×$Ñ$ g×&;Ñ&;Ô<Ø×&Ñ&Ð2Ð2Ð2Ø�‰”F×,Ñ,¬c°$¸×9PÑ9PÑ2PÓ.QÔRØ×&Ñ&Ð2Ð2Ð2Ø�‰”F×%Ñ%¤s¨4°'×2IÑ2IÑ+IÓ'JÔKØ×ÒØ�K‰Kœ×(Ñ(¬*°W×5GÑ5GÓ*HÕIà�K‰Kœ×(Ñ(Ð*LÔMØ×$Ò$Ø�K‰Kœ×(Ñ(¨'×*CÑ*CÔDØ×&Ò&Ø�K‰KœŸ™¨Õ8à�K‰KœŸ™¨Ô.Ø×Ó '×"4Ó"4Ø�K‰KœŸ™ g×&8Ñ&8Ô9Ø�K‰Kœ×(Ñ(¨'×*<Ñ*<Ô=Ø×%Ò%Ø×-Ñ-Ð9Ð9Ð9Ü&×?Ñ?Ø×*Ñ*¨G×,BÑ,Bó�ð —‘œF×/Ñ/°Ô=à×&Ñ&Ð.°'×2IÑ2IÈWÒ2TØ—‘œF×,Ñ,¬f×.CÑ.CÕDØ×(Ñ(¨HÒ4Ø—‘œF×,Ñ,¬f×.DÑ.DÕEä Ø4°w×7NÑ7NÑNóð ð.Ø—‘œfŸl™lÔ+ð �M‰Mœ&×-Ñ-Ô.Ø× Ò Ø�K‰Kœ×-Ñ-¨qÔ1Ø�K‰Kœ×-Ñ-¨qÕ1à�K‰Kœ×-Ñ-¨qÔ1Ø�K‰Kœ×-Ñ-¨qÔ1Ø×ÑÐ'Ø�K‰KœŸ™ w×'7Ñ'7Õ8ð à×Ñ Ñ&ð �K‰Kœ×(Ñ(¬&×*=Ñ*=Õ>à�K‰Kœ×(Ñ(¬&×*CÑ*CÔDô
 —>‘>Ü—K‘KÜ—=‘=Ü—M‘Mñ	
ˆò 8ˆØ×$Ñ$Ó&ò 	"ˆAØ�K‰K˜˜5Õ!ð	"à�>‰>˜\Ñ)Ø�M‰Mœ&×.Ñ.Ô/Ø�K‰K˜ W§^¡^Ñ4°dÕ;Ø×.Ò.°'·.±.ÀNÑ2RØ�K‰Kœ×,Ñ,¨g¯n©nÕ=äÐ,¨w¯~©~Ñ=Ó>Ð>àŸ™Ð*BÐBˆØ—|‘|¨4Ð/ˆØ×0Ò0ñ ¡lÙ¡]å ñ "/‘v°BÑ6¸¿»ðHóð ñ šLØ�~‰~ Ò&ô !Ð!DÓEÐEÜ$¤T¨'¯,©,Ò*<¸"Ó%=Ó>ˆNð+œ3ð + 4ö +ð �K‰Kœ×+Ñ+¨^×-@Ñ-@ÔAØ�K‰Kœ×,Ñ,¨eÔ4Ø�~‰~ Ò'Ø—‘œF×0Ñ0´#°g·l±lÒ6HÀbÓ2IÕJà—‘œFŸM™M¨4Ô0Ø—‘œF×-Ñ-¬s°7·<±<Ò3EÀ2Ó/FÔGà× Ñ Ñ,Ø×(Ñ(Ð4Ð4Ð4Ø× Ñ Ð(¨G×,=Ñ,=ÀÒ,HØ—‘œFŸO™O¬V×-BÑ-BÕCØ×"Ñ" hÒ.Ø—‘œFŸO™O¬V×-CÑ-CÕDä Ð!;¸g×>OÑ>OÑ!OÓPÐPä×7Ñ7Ø×%Ñ% w×'<Ñ'<óˆGð �K‰KœŸ™¨Ô0Ü�N‰NØ&Ø—‘Ø—‘Ø×%Ñ%õ	ð �M‰Mœ&Ÿ.™.Ô)Ü�N‰N˜7 G§N¡N°G·K±KÔ@à×ÑÐ*Ø�K‰KœŸ™¨×(;Ñ(;Ô<à×ÑÐ)Ø�K‰KœŸ™ w×'9Ñ'9Ô:à×ÑÐ*ÜÐKÓLÐLä×!Ñ!Ó# aÒ'ð �K‰KœŸ™¨Ô+Ø×(Ñ(Ð4Ø×)Ñ)¨$Õ/ð 5ùóy
øô~ ò .Ø—‘œFŸL™L¨"×-ð.ús   ÂAmÓ1m  í )nînrã   Úheader_line_bytesc                 ón  — t        |j                  d«      «      }|�| j                  j                  ||«       |j	                  «       }|j                  d«      r/|j                  «        	 t        j                  |«      \  }}}d|z  }|sy |j                  |«       y # t        j                  $ r Y y w xY w)NÚlatin1zHTTP/zX-Http-Reason: %s)r   Údecoder>   rÄ   ÚrstripÚ
startswithÚclearr   Úparse_response_start_lineÚHTTPInputErrorÚ
parse_line)r6   r   rã   r6  Úheader_lineÚ_versionÚ_coderš   s           r:   râ   z)CurlAsyncHTTPClient._curl_header_callback   s¶   € ô !Ð!2×!9Ñ!9¸(Ó!CÓDˆØÐ&Ø�L‰L×%Ñ% o°{ÔCð "×(Ñ(Ó*ˆØ×!Ñ! 'Ô*Ø�M‰MŒOðÜ,4×,NÑ,NØó-Ñ)�˜5 &ð 2°FÑ:�ñ ØØ×Ñ˜;Õ'øô	 ×*Ñ*ò Ùðús   Á+B ÂB4Â3B4Ú
debug_typeÚ	debug_msgc                 ó0  — d}|dk(  r0t        |«      }t        j                  d|j                  «       «       y |dv r;t        |«      }|j	                  «       D ]  }t        j                  d||   |«       Œ y |dk(  rt        j                  d||   |«       y y )N)ÚIú<ú>rG  rH  r   z%s)r~   rÉ   rÖ   é   z%s %r)r   r±   r!  ÚstripÚ
splitlines)r6   rC  rD  Údebug_typesr.  s        r:   r·   zCurlAsyncHTTPClient._curl_debug9  s�   € Ø/ˆØ˜Š?Ü" 9Ó-ˆIÜ�N‰N˜4 §¡Ó!2Õ3Ø˜6Ñ!Ü" 9Ó-ˆIØ!×,Ñ,Ó.ò G�Ü—‘˜w¨°JÑ(?ÀÕFñGà˜1Š_Ü�N‰N˜7 K°
Ñ$;¸YÕGð rB   )é
   N)r   N)NN)"Ú__name__Ú
__module__Ú__qualname__ræ   r   r   Ústrr   r   r@   r   r   r	   rJ   rä   r%   r#   r[   ra   r0   rj   rI   r   r3   rw   r¬   r'   r   r   rˆ   r‹   râ   r·   Ú__classcell__)r9   s   @r:   r   r   3   sÏ  ø„ àJNñ 5Øð 5Ø/7¸¸SÀ#¸X¹Ñ/Gð 5à	õ 5õDðØ"ðØ.6¸°~ÀtÐ7KÑ.Lðà	óð) Cð )¨Sð )¸ð )ÀEð )Èdó )ð:
 #ð 
¨$ó 
ð( ð (¨cð (°dó (ó$+ó:(óó'ðX %)Ø&*ñ	4=à�k‰kð4=ð ˜S‘Mð4=ð ˜s‘mð	4=ð
 
ó4=ðlK°#ð K¸$ó Kð
˜fŸk™kó 
ðU0à�k‰kðU0ð ðU0ð ð	U0ð
 ×%Ñ%ðU0ð 
óU0ðn(à×%Ñ%ð(ð " 3 %¨ +Ñ.ð(ð !ð	(ð
 
ó(ð2
H cð 
H°cð 
H¸d÷ 
HrB   r   c                   ó    — e Zd Zdededdfd„Zy)rž   ÚerrnoÚmessager   Nc                 ó@   — t        j                  | d|«       || _        y )Nr„   )r
   Ú__init__rT  )r6   rT  rU  s      r:   rW  zCurlError.__init__G  s   € Ü×Ñ˜4  gÔ.Øˆ�
rB   )rN  rO  rP  ræ   rQ  rW  © rB   r:   rž   rž   F  s   „ ð˜cð ¨Cð °Dô rB   rž   Ú__main__))Ú__doc__r*   rà   r³   r   Úrer'  rH   Úior   Útornador   r   Útornado.escaper   r   Útornado.httpclientr   r	   r
   r   r   Útornado.logr   Útypingr   r   r   r   r   ÚTYPE_CHECKINGr   r   Ú	getLoggerr±   ÚcompilerÛ   r   rž   rN  Ú	configurerX  rB   r:   ú<module>rf     s´   ðñ  <ã Û Û Û Û 	Û Û Ý å Ý ç +÷õ õ  ç 7Õ 7Û à	×Òß#àˆ7×ÑÐ6Ó7€àˆb�j‰j˜Ó"€ôPH˜/ô PHôf�	ô ð ˆzÒØ€O×ÑÐ1Ô2Ù…Fð rB   