+
    ‚V@i?  ã                   ó„  € R t ^ RIt^ RIt^ RIHt ^ RIHtHt ^ RIH	t	 ^ RIH
t
 ^ RIHt ^ RIHt ^ RIHt ^ RIt^ R	IHtHtHtHtHtHtHtHtHt ]P4                  '       d   ^ R
IHt  ! R R]]]	P8                  4      t ! R R]	P<                  4      t ! R R4      t  ! R R]	P<                  4      t!]	PD                  t#R# )a¼  A non-blocking, single-threaded HTTP server.

Typical applications have little direct interaction with the `HTTPServer`
class except to start a server at the beginning of the process
(and even that is often done indirectly via `tornado.web.Application.listen`).

.. versionchanged:: 4.0

   The ``HTTPRequest`` class that used to live in this module has been moved
   to `tornado.httputil.HTTPServerRequest`.  The old name remains as an alias.
N)Ú
native_str)ÚHTTP1ServerConnectionÚHTTP1ConnectionParameters)Úhttputil)Úiostream)Únetutil)Ú	TCPServer)ÚConfigurable)	ÚUnionÚAnyÚDictÚCallableÚListÚTypeÚTupleÚOptionalÚ	Awaitable)ÚSetc                   óÌ   a € ] tR t^.t o RtV 3R lR ltRV 3R lR llt]V 3R lR l4       t]V 3R	 lR
 l4       t	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )Ú
HTTPServera—  A non-blocking, single-threaded HTTP server.

A server is defined by a subclass of `.HTTPServerConnectionDelegate`,
or, for backwards compatibility, a callback that takes an
`.HTTPServerRequest` as an argument. The delegate is usually a
`tornado.web.Application`.

`HTTPServer` supports keep-alive connections by default
(automatically for HTTP/1.1, or for HTTP/1.0 when the client
requests ``Connection: keep-alive``).

If ``xheaders`` is ``True``, we support the
``X-Real-Ip``/``X-Forwarded-For`` and
``X-Scheme``/``X-Forwarded-Proto`` headers, which override the
remote IP and URI scheme/protocol for all requests.  These headers
are useful when running Tornado behind a reverse proxy or load
balancer.  The ``protocol`` argument can also be set to ``https``
if Tornado is run behind an SSL-decoding proxy that does not set one of
the supported ``xheaders``.

By default, when parsing the ``X-Forwarded-For`` header, Tornado will
select the last (i.e., the closest) address on the list of hosts as the
remote host IP address.  To select the next server in the chain, a list of
trusted downstream hosts may be passed as the ``trusted_downstream``
argument.  These hosts will be skipped when parsing the ``X-Forwarded-For``
header.

To make this server serve SSL traffic, send the ``ssl_options`` keyword
argument with an `ssl.SSLContext` object. For compatibility with older
versions of Python ``ssl_options`` may also be a dictionary of keyword
arguments for the `ssl.SSLContext.wrap_socket` method.::

   ssl_ctx = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
   ssl_ctx.load_cert_chain(os.path.join(data_dir, "mydomain.crt"),
                           os.path.join(data_dir, "mydomain.key"))
   HTTPServer(application, ssl_options=ssl_ctx)

`HTTPServer` initialization follows one of three patterns (the
initialization methods are defined on `tornado.tcpserver.TCPServer`):

1. `~tornado.tcpserver.TCPServer.listen`: single-process::

        async def main():
            server = HTTPServer()
            server.listen(8888)
            await asyncio.Event().wait()

        asyncio.run(main())

   In many cases, `tornado.web.Application.listen` can be used to avoid
   the need to explicitly create the `HTTPServer`.

   While this example does not create multiple processes on its own, when
   the ``reuse_port=True`` argument is passed to ``listen()`` you can run
   the program multiple times to create a multi-process service.

2. `~tornado.tcpserver.TCPServer.add_sockets`: multi-process::

        sockets = bind_sockets(8888)
        tornado.process.fork_processes(0)
        async def post_fork_main():
            server = HTTPServer()
            server.add_sockets(sockets)
            await asyncio.Event().wait()
        asyncio.run(post_fork_main())

   The ``add_sockets`` interface is more complicated, but it can be used with
   `tornado.process.fork_processes` to run a multi-process service with all
   worker processes forked from a single parent.  ``add_sockets`` can also be
   used in single-process servers if you want to create your listening
   sockets in some way other than `~tornado.netutil.bind_sockets`.

   Note that when using this pattern, nothing that touches the event loop
   can be run before ``fork_processes``.

3. `~tornado.tcpserver.TCPServer.bind`/`~tornado.tcpserver.TCPServer.start`:
   simple **deprecated** multi-process::

        server = HTTPServer()
        server.bind(8888)
        server.start(0)  # Forks multiple sub-processes
        IOLoop.current().start()

   This pattern is deprecated because it requires interfaces in the
   `asyncio` module that have been deprecated since Python 3.10. Support for
   creating multiple processes in the ``start`` method will be removed in a
   future version of Tornado.

.. versionchanged:: 4.0
   Added ``decompress_request``, ``chunk_size``, ``max_header_size``,
   ``idle_connection_timeout``, ``body_timeout``, ``max_body_size``
   arguments.  Added support for `.HTTPServerConnectionDelegate`
   instances as ``request_callback``.

.. versionchanged:: 4.1
   `.HTTPServerConnectionDelegate.start_request` is now called with
   two arguments ``(server_conn, request_conn)`` (in accordance with the
   documentation) instead of one ``(request_conn)``.

.. versionchanged:: 4.2
   `HTTPServer` is now a subclass of `tornado.util.Configurable`.

.. versionchanged:: 4.5
   Added the ``trusted_downstream`` argument.

.. versionchanged:: 5.0
   The ``io_loop`` argument has been removed.
c                ó*   <€ V ^8„  d   QhRS[ RS[ RR/# )é   ÚargsÚkwargsÚreturnN)r   )ÚformatÚ__classdict__s   "€Ú4/usr/lib/python3/dist-packages/tornado/httpserver.pyÚ__annotate__ÚHTTPServer.__annotate__œ   s"   ø€ ÷ ñ ™cð ©Sð °Tñ ó    c                ó   € R # ©N© )Úselfr   r   s   &*,r   Ú__init__ÚHTTPServer.__init__œ   s   € ñ 	r    Nc                ó   <€ V ^8„  d   QhRS[ S[P                  S[S[P                  .R3,          3,          RS[RS[RS[S[ S[S[S[	3,          S[
P                  3,          ,          RS[S[,          RS[RS[S[,          R	S[S[,          R
S[S[,          RS[S[,          RS[S[,          RS[S[,          RS[S[S[,          ,          RR/# )r   Úrequest_callbackNÚno_keep_aliveÚxheadersÚssl_optionsÚprotocolÚdecompress_requestÚ
chunk_sizeÚmax_header_sizeÚidle_connection_timeoutÚbody_timeoutÚmax_body_sizeÚmax_buffer_sizeÚtrusted_downstreamr   )r
   r   ÚHTTPServerConnectionDelegater   ÚHTTPServerRequestÚboolr   r   Ústrr   ÚsslÚ
SSLContextÚintÚfloatr   )r   r   s   "€r   r   r   ¤   s   ø€ ÷ *5ñ *5áÙ×1Ñ1Ù‘h×0Ñ0Ð1°4Ð7Õ8ð:õ
ð*5ñ ð*5ñ ð*5ñ ™e¡D©©c¨¥N±C·N±NÐ$BÕCÕDð*5ñ ™3•-ð*5ñ !ð*5ñ ™S•Mð*5ñ "¡#�ð*5ñ "*©%¥ð*5ñ ™u•oð*5ñ  ¡•}ð*5ñ  "¡#�ð!*5ñ" %¡T©#¥YÕ/ð#*5ð$ 
ñ%*5r    c           
     óÊ   € Wn         W0n        WPn        \        TTTT	;'       g    R VV
VR7      V n        \
        P                  ! V VVVR7       \        4       V n        WÐn	        R# )i  )Ú
decompressr.   r/   Úheader_timeoutr2   r1   r)   )r+   r3   Úread_chunk_sizeN)
r(   r*   r,   r   Úconn_paramsr   r%   ÚsetÚ_connectionsr4   )r$   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   s   &&&&&&&&&&&&&&r   Ú
initializeÚHTTPServer.initialize¤   sl   € ð. !1ÔØ ŒØ ŒÜ4Ø)Ø!Ø+Ø2×:Ð:°dØ'Ø%Ø'ô
ˆÔô 	×ÒØØ#Ø+Ø&õ		
ô  ›EˆÔØ"4Ör    c                ó0   <€ V ^8„  d   QhRS[ S[,          /# ©r   r   ©r   r	   )r   r   s   "€r   r   r   Ñ   s   ø€ ÷ ñ ¡$¡|Õ"4ñ r    c                ó   € \         # r"   ©r   ©Úclss   &r   Úconfigurable_baseÚHTTPServer.configurable_baseÐ   ó   € äÐr    c                ó0   <€ V ^8„  d   QhRS[ S[,          /# rG   rH   )r   r   s   "€r   r   r   Õ   s   ø€ ÷ ñ ¡T©,Õ%7ñ r    c                ó   € \         # r"   rJ   rK   s   &r   Úconfigurable_defaultÚHTTPServer.configurable_defaultÔ   rO   r    c                ó   <€ V ^8„  d   QhRR/# ©r   r   Nr#   )r   r   s   "€r   r   r   Ø   s   ø€ ÷ ñ ¨Tñ r    c              ƒ  ó¦   "  € V P                   '       d9   \        \        V P                   4      4      pVP                  4       G Rj  x€L
  KJ  R#  L5i)aæ  Close all open connections and asynchronously wait for them to finish.

This method is used in combination with `~.TCPServer.stop` to
support clean shutdowns (especially for unittests). Typical
usage would call ``stop()`` first to stop accepting new
connections, then ``await close_all_connections()`` to wait for
existing connections to finish.

This method does not currently close open websocket connections.

Note that this method is a coroutine and must be called with ``await``.

N)rC   ÚnextÚiterÚclose)r$   Úconns   & r   Úclose_all_connectionsÚ HTTPServer.close_all_connectionsØ   sA   é € ð ××Ðäœ˜T×.Ñ.Ó/Ó0ˆDØ—*‘*“,×Òñ  ñ ùs   ‚A•1AÁAÁ	Ac                ó>   <€ V ^8„  d   QhRS[ P                  RS[RR/# )r   ÚstreamÚaddressr   N)r   ÚIOStreamr   )r   r   s   "€r   r   r   ë   s(   ø€ ÷ !ñ !¡H×$5Ñ$5ð !Áð !È$ñ !r    c                óÌ   € \        WV P                  V P                  4      p\        WP                  V4      pV P
                  P                  V4       VP                  V 4       R # r"   )Ú_HTTPRequestContextr,   r4   r   rA   rC   ÚaddÚstart_serving)r$   r^   r_   ÚcontextrZ   s   &&&  r   Úhandle_streamÚHTTPServer.handle_streamë   sS   € Ü%Ø˜TŸ]™]¨D×,CÑ,Có
ˆô % V×-=Ñ-=¸wÓGˆØ×Ñ×Ñ˜dÔ#Ø×Ñ˜4Ö r    c                óT   <€ V ^8„  d   QhRS[ RS[P                  RS[P                  /# )r   Úserver_connÚrequest_connr   )Úobjectr   ÚHTTPConnectionÚHTTPMessageDelegate)r   r   s   "€r   r   r   ó   s1   ø€ ÷ ñ Ù!ðÙ19×1HÑ1Hðá	×	%Ñ	%ñr    c                óø   € \        V P                  \        P                  4      '       d   V P                  P	                  W4      pM\        V P                  V4      pV P                  '       d   \        W24      pV# r"   )Ú
isinstancer(   r   r5   Ústart_requestÚ_CallableAdapterr*   Ú_ProxyAdapter)r$   ri   rj   Údelegates   &&& r   rp   ÚHTTPServer.start_requestó   s]   € ô �d×+Ñ+¬X×-RÑ-R×SÒSØ×,Ñ,×:Ñ:¸;ÓU‰Hä'¨×(=Ñ(=¸|ÓLˆHà�=�=ˆ=Ü$ XÓ<ˆHàˆr    c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   ri   r   N)rk   )r   r   s   "€r   r   r      s   ø€ ÷ Rñ R¡Fð R¨tñ Rr    c                ón   € V P                   P                  \        P                  ! \        V4      4       R # r"   )rC   ÚremoveÚtypingÚcastr   )r$   ri   s   &&r   Úon_closeÚHTTPServer.on_close   s"   € Ø×Ñ× Ñ ¤§¢Ô-BÀKÓ!PÖQr    )rC   rA   r,   r(   r4   r*   )FFNNFNNNNNNN)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r%   rD   ÚclassmethodrM   rR   r[   rf   rp   rz   Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r   .   ss   ø‡ € ñk÷Zð ÷*5ò *5ðX ÷ó ðð ÷ó ð÷ð ÷&!ð !÷ð ÷Rö Rr    r   c                   óz   a € ] tR tRt o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR ltRt	V t
R# )rq   i  c                óh   <€ V ^8„  d   QhRS[ S[P                  .R3,          RS[P                  RR/# )r   r(   Nrj   r   )r   r   r6   rl   )r   r   s   "€r   r   Ú_CallableAdapter.__annotate__  sB   ø€ ÷ 	ñ 	á"¡H×$>Ñ$>Ð#?ÀÐ#EÕFð	ñ ×-Ñ-ð	ð 
ñ		r    c                óH   € W n         Wn        R V n        R V n        . V n        R # r"   )Ú
connectionr(   Úrequestrs   Ú_chunks)r$   r(   rj   s   &&&r   r%   Ú_CallableAdapter.__init__  s$   € ð
 'ŒØ 0ÔØˆŒØˆŒØˆŽr    c                óœ   <€ V ^8„  d   QhRS[ S[P                  S[P                  3,          RS[P                  RS[S[R,          ,          /# ©r   Ú
start_lineÚheadersr   N©r
   r   ÚRequestStartLineÚResponseStartLineÚHTTPHeadersr   r   )r   r   s   "€r   r   r‡     sN   ø€ ÷ 
ñ 
á™(×3Ñ3±X×5OÑ5OÐOÕPð
ñ ×%Ñ%ð
ñ 
‘)˜D•/Õ	"ñ	
r    c                óœ   € \         P                  ! V P                  \        P                  ! \         P
                  V4      VR 7      V n        R# ))r‰   r�   r�   N)r   r6   r‰   rx   ry   r’   rŠ   ©r$   r�   r�   s   &&&r   Úheaders_receivedÚ!_CallableAdapter.headers_received  s9   € ô
  ×1Ò1Ø—‘Ü—{’{¤8×#<Ñ#<¸jÓIØô
ˆŒñ
 r    c                óD   <€ V ^8„  d   QhRS[ RS[S[R,          ,          /# ©r   Úchunkr   N©Úbytesr   r   )r   r   s   "€r   r   r‡     s$   ø€ ÷ ñ ¡5ð ©X±iÀµoÕ-Fñ r    c                ó<   € V P                   P                  V4       R # r"   )r‹   Úappend©r$   r›   s   &&r   Údata_receivedÚ_CallableAdapter.data_received  s   € Ø�‰×Ñ˜EÔ"Ùr    c                ó   <€ V ^8„  d   QhRR/# rU   r#   )r   r   s   "€r   r   r‡      s   ø€ ÷ ,ñ ,˜ñ ,r    c                óä   € V P                   f   Q hRP                  V P                  4      V P                   n        V P                   P	                  4        V P                  V P                   4       R # )Nr    )rŠ   Újoinr‹   ÚbodyÚ_parse_bodyr(   ©r$   s   &r   ÚfinishÚ_CallableAdapter.finish   sM   € Ø�|‰|Ò'Ð'Ð'ØŸH™H T§\¡\Ó2ˆ�‰ÔØ�‰× Ñ Ô"Ø×Ñ˜dŸl™lÖ+r    c                ó   <€ V ^8„  d   QhRR/# rU   r#   )r   r   s   "€r   r   r‡   &  s   ø€ ÷ ñ  Tñ r    c                ó
   € V = R # r"   )r‹   r¨   s   &r   Úon_connection_closeÚ$_CallableAdapter.on_connection_close&  s   € ØŠLr    )r‹   r‰   rs   rŠ   r(   N)r|   r}   r~   r   r%   r—   r¡   r©   r­   r‚   rƒ   r„   s   @r   rq   rq     s7   ø‡ € ÷	ð 	÷
ð 
÷ð ÷,ð ,÷ö r    rq   c                   ól   a € ] tR tRt o RV 3R lR lltV 3R lR ltV 3R lR ltV 3R	 lR
 ltRtV t	R# )rb   i*  Nc          
      óz   <€ V ^8„  d   QhRS[ P                  RS[RS[S[,          RS[S[S[,          ,          RR/# )r   r^   r_   r,   r4   r   N)r   r`   r   r   r8   r   )r   r   s   "€r   r   Ú _HTTPRequestContext.__annotate__+  sW   ø€ ÷  @ñ  @á×!Ñ!ð @ñ ð @ñ ™3•-ð	 @ñ
 %¡T©#¥YÕ/ð @ð 
ñ @r    c                óú  € W n         VP                  e   VP                  P                  V n        MR V n        V P                  \        P                  \        P
                  39   d   Ve   V^ ,          V n        MRV n        V'       d   W0n        M/\        V\        P                  4      '       d	   RV n        MRV n        V P                  V n        V P                  V n        \        T;'       g    . 4      V n        R # )Nz0.0.0.0ÚhttpsÚhttp)r_   ÚsocketÚfamilyÚaddress_familyÚAF_INETÚAF_INET6Ú	remote_ipr,   ro   r   ÚSSLIOStreamÚ_orig_remote_ipÚ_orig_protocolrB   r4   )r$   r^   r_   r,   r4   s   &&&&&r   r%   Ú_HTTPRequestContext.__init__+  s½   € ð Œð �=‰=Ò$Ø"(§-¡-×"6Ñ"6ˆDÕà"&ˆDÔð ×Ñ¤F§N¡N´F·O±OÐ#DÔDØÒ#à$ Q�ZˆD�Nð 'ˆDŒNßØ$�MÜ˜¤× 4Ñ 4×5Ò5Ø#ˆD�Mà"ˆDŒMØ#Ÿ~™~ˆÔØ"Ÿm™mˆÔÜ"%Ð&8×&>Ð&>¸BÓ"?ˆÖr    c                ó    <€ V ^8„  d   QhRS[ /# rG   )r8   )r   r   s   "€r   r   r±   M  s   ø€ ÷ 	%ñ 	%™ñ 	%r    c                ó  € V P                   \        P                  \        P                  39   d   V P                  # \        V P                  \        4      '       d   \        V P                  4      # \        V P                  4      # r"   )
r·   rµ   r¸   r¹   rº   ro   r_   r�   r   r8   r¨   s   &r   Ú__str__Ú_HTTPRequestContext.__str__M  sX   € Ø×Ñ¤6§>¡>´6·?±?Ð"CÔCØ—>‘>Ð!Ü˜Ÿ™¤e×,Ò,ô ˜dŸl™lÓ+Ð+ä�t—|‘|Ó$Ð$r    c                ó8   <€ V ^8„  d   QhRS[ P                  RR/# )r   r�   r   N)r   r”   )r   r   s   "€r   r   r±   X  s!   ø€ ÷ )ñ )¡x×';Ñ';ð )Àñ )r    c                óì  € VP                  RV P                  4      pR \        VP                  R4      4       4        F  pW P                  9  g   K   M	  VP                  RV4      p\
        P                  ! V4      '       d   W n        VP                  RVP                  RV P                  4      4      pV'       d'   VP                  R4      R,          P                  4       pVR	9   d	   W0n        R# R# )
z2Rewrite the ``remote_ip`` and ``protocol`` fields.zX-Forwarded-Forc              3   ó@   "  € T F  qP                  4       x € K  	  R # 5ir"   )Ústrip)Ú.0Úcands   & r   Ú	<genexpr>Ú6_HTTPRequestContext._apply_xheaders.<locals>.<genexpr>]  s   é € ÐDÑ,C D—:‘:—<�<Ó,Cùs   ‚Ú,z	X-Real-IpzX-SchemezX-Forwarded-ProtoNéÿÿÿÿ)r´   r³   )	Úgetrº   ÚreversedÚsplitr4   r   Úis_valid_ipr,   rÆ   )r$   r�   ÚipÚproto_headers   &&  r   Ú_apply_xheadersÚ#_HTTPRequestContext._apply_xheadersX  sÈ   € ð �[‰[Ð*¨D¯N©NÓ;ˆáD¬H°R·X±X¸c³]Ô,CÖDˆBØ×0Ñ0Ö0Ùñ Eð �[‰[˜ bÓ)ˆÜ×Ò˜r×"Ò"ØŒNà—{‘{Ø˜Ÿ™Ð$7¸¿¹ÓGó
ˆ÷ ð (×-Ñ-¨cÓ2°2Õ6×<Ñ<Ó>ˆLØÐ,Ô,Ø(ŽMñ -r    c                ó   <€ V ^8„  d   QhRR/# rU   r#   )r   r   s   "€r   r   r±   n  s   ø€ ÷ ,ñ , 4ñ ,r    c                óJ   € V P                   V n        V P                  V n        R# )zƒUndo changes from `_apply_xheaders`.

Xheaders are per-request so they should not leak to the next
request on the same connection.
N)r¼   rº   r½   r,   r¨   s   &r   Ú_unapply_xheadersÚ%_HTTPRequestContext._unapply_xheadersn  s   € ð ×-Ñ-ˆŒØ×+Ñ+ˆŽr    )r½   r¼   r_   r·   r,   rº   r4   r"   )
r|   r}   r~   r   r%   rÁ   rÓ   r×   r‚   rƒ   r„   s   @r   rb   rb   *  s0   ø‡ € ÷ @ò  @÷D	%ð 	%÷)ð )÷,,ö ,r    rb   c                   óŒ   a € ] tR tRt o V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR ltV 3R lR lt	Rt
V tR# )rr   ix  c                óR   <€ V ^8„  d   QhRS[ P                  RS[ P                  RR/# )r   rs   rj   r   N)r   rm   rl   )r   r   s   "€r   r   Ú_ProxyAdapter.__annotate__y  s5   ø€ ÷ !ñ !á×.Ñ.ð!ñ ×-Ñ-ð!ð 
ñ	!r    c                ó   € W n         Wn        R # r"   ©r‰   rs   )r$   rs   rj   s   &&&r   r%   Ú_ProxyAdapter.__init__y  s   € ð
 'ŒØ Žr    c                óœ   <€ V ^8„  d   QhRS[ S[P                  S[P                  3,          RS[P                  RS[S[R,          ,          /# rŽ   r‘   )r   r   s   "€r   r   rÛ   �  sS   ø€ ÷ Cñ Cá™(×3Ñ3±X×5OÑ5OÐOÕPðCñ ×%Ñ%ðCñ 
‘)˜D•/Õ	"ñ	Cr    c                ó‚   € V P                   P                  P                  V4       V P                  P	                  W4      # r"   )r‰   re   rÓ   rs   r—   r–   s   &&&r   r—   Ú_ProxyAdapter.headers_received�  s1   € ð 	�‰×Ñ×/Ñ/°Ô8Ø�}‰}×-Ñ-¨jÓBÐBr    c                óD   <€ V ^8„  d   QhRS[ RS[S[R,          ,          /# rš   rœ   )r   r   s   "€r   r   rÛ   ‹  s$   ø€ ÷ 2ñ 2¡5ð 2©X±iÀµoÕ-Fñ 2r    c                ó8   € V P                   P                  V4      # r"   )rs   r¡   r    s   &&r   r¡   Ú_ProxyAdapter.data_received‹  s   € Ø�}‰}×*Ñ*¨5Ó1Ð1r    c                ó   <€ V ^8„  d   QhRR/# rU   r#   )r   r   s   "€r   r   rÛ   Ž  s   ø€ ÷ ñ ˜ñ r    c                óZ   € V P                   P                  4        V P                  4        R # r"   )rs   r©   Ú_cleanupr¨   s   &r   r©   Ú_ProxyAdapter.finishŽ  s   € Ø�‰×ÑÔØ�‰Žr    c                ó   <€ V ^8„  d   QhRR/# rU   r#   )r   r   s   "€r   r   rÛ   ’  s   ø€ ÷ ñ  Tñ r    c                óZ   € V P                   P                  4        V P                  4        R # r"   )rs   r­   rç   r¨   s   &r   r­   Ú!_ProxyAdapter.on_connection_close’  s   € Ø�‰×)Ñ)Ô+Ø�‰Žr    c                ó   <€ V ^8„  d   QhRR/# rU   r#   )r   r   s   "€r   r   rÛ   –  s   ø€ ÷ 4ñ 4˜$ñ 4r    c                óN   € V P                   P                  P                  4        R # r"   )r‰   re   r×   r¨   s   &r   rç   Ú_ProxyAdapter._cleanup–  s   € Ø�‰×Ñ×1Ñ1Ö3r    rÝ   N)r|   r}   r~   r   r%   r—   r¡   r©   r­   rç   r‚   rƒ   r„   s   @r   rr   rr   x  sC   ø‡ € ÷!ð !÷Cð C÷2ð 2÷ð ÷ð ÷4ö 4r    rr   )$r€   rµ   r9   Útornado.escaper   Útornado.http1connectionr   r   Útornador   r   r   Útornado.tcpserverr   Útornado.utilr	   rx   r
   r   r   r   r   r   r   r   r   ÚTYPE_CHECKINGr   r5   r   rm   rq   rb   rr   r6   ÚHTTPRequestr#   r    r   Ú<module>rö      s�   ðñ 
ó Û 
å %ß TÝ Ý Ý Ý 'Ý %ã ß U× UÕ Uà	××ÐÝôSR�˜L¨(×*OÑ*Oô SRôl#�x×3Ñ3ô #÷LK,ñ K,ô\4�H×0Ñ0ô 4ðD ×(Ñ(‚r    