§
    D›j–k  ã                   óÜ  — 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m	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZmZmZmZ d dlZd dlZd d	lmZ d
dlmZ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)m*Z* d
dl+m,Z, d
dl-m.Z.m/Z/ d
dl0m1Z1m2Z2 d
dl3m4Z4 d
dl5m6Z6m7Z7 d
dl8m9Z9 d
dl:m;Z; d
dl<m=Z=m>Z> dZ?er
d dl@Z@d
dlAmBZB e	e(e2dedge;f         ZCe	e;gee>         f         ZD e(dde'i i dddd ejE        d¦  «        ¦
  «
        ZF G d„ d eG¦  «        ZH G d!„ d"eG¦  «        ZI eI¦   «         ZJ ejK        ddd¬#¦  «         G d$„ d%¦  «        ¦   «         ZLeMe(eLz  e2f         ZN G d&„ de!¦  «        ZOdS )'é    N)Údeque)Ú	AwaitableÚCallableÚSequence)Úsuppress)Úescape)Ú
HTTPStatus)ÚLogger)ÚTYPE_CHECKINGÚAnyÚOptionalÚcast)Úunder_cached_propertyé   )ÚAbstractAccessLoggerÚAbstractStreamWriter)ÚBaseProtocol)ÚDEFAULT_CHUNK_SIZEÚceil_timeout)ÚHttpProcessingErrorÚHttpRequestParserÚHttpVersion10ÚRawRequestMessageÚStreamWriterÚWebSocketReader)ÚBadHttpMethod)Úaccess_loggerÚserver_logger)ÚEMPTY_PAYLOADÚStreamReader)Útcp_keepalive)ÚHTTPExceptionÚHTTPInternalServerError)ÚAccessLogger)ÚBaseRequest)ÚResponseÚStreamResponse)ÚRequestHandlerÚRequestPayloadErrorÚPayloadAccessError)ÚServerr(   zasyncio.Task[None]ÚUNKNOWNú/TFc                   ó   — e Zd ZdZdS )r)   zPayload parsing error.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úS/home/lighthouse/health/venv/lib64/python3.11/site-packages/aiohttp/web_protocol.pyr)   r)   I   s   € € € € € Ø Ð Ð Ð r5   r)   c                   ó   — e Zd ZdZdS )r*   z-Payload was accessed after response was sent.Nr/   r4   r5   r6   r*   r*   M   s   € € € € € Ø7Ð7Ð7Ð7r5   r*   )Úauto_attribsÚfrozenÚslotsc                   ó.   — e Zd ZU eed<   eed<   eed<   dS )Ú_ErrInfoÚstatusÚexcÚmessageN)r0   r1   r2   ÚintÚ__annotations__ÚBaseExceptionÚstrr4   r5   r6   r<   r<   T   s.   € € € € € € à€K€K�KØ	ÐÐÑØ€L€L�L€L€Lr5   r<   c            !       ó€  ‡ — e Zd ZdZdZddeeeej        ddddde	dd	d
œddde
j        dedededee         dedededededededededef ˆ fd„Zdefd„Zeded         fd „¦   «         Zedeeeeeef         z  eeef         z  d!z  fd"„¦   «         Zedeeeeeef         z  eeef         z  d!z  fd#„¦   «         Zedefd$„¦   «         ZdKd&ed!z  dd!fd'„Zd(e
j        dd!fˆ fd)„Zd*e d!z  dd!fˆ fd+„Z!	 dLd,e"d-e#g d!f         d!z  dd!fd.„Z$dMd/„Z%d0e&dd!fd1„Z'd2edd!fd3„Z(dMd4„Z)dMd5„Z*d6e+d7e,d8ed!z  dd!fd9„Z-d:e.d;e.dd!fd<„Z/d:e.d;e.dd!fd=„Z0dMd>„Z1d6e+d?ed!z  d@e#e+ge2e,         f         dee,ef         fdA„Z3dMdB„Z4d6e+dCe,d?ed!z  dee,ef         fdD„Z5	 	 	 dNd6e+dFed*e d!z  dGed!z  de,f
dH„Z6dIe7de#e+ge2e,         f         fdJ„Z8ˆ xZ9S )Or(   aj  HTTP protocol implementation.

    RequestHandler handles incoming HTTP request. It reads request line,
    request headers and request payload and calls handle_request() method.
    By default it always returns with 404 response.

    RequestHandler handles errors in incoming request, like bad
    status line, bad headers or incomplete payload. If any error occurs,
    connection gets closed.

    keepalive_timeout -- number of seconds before closing
                         keep-alive connection

    tcp_keepalive -- TCP keep-alive is on, default is on

    debug -- enable debug mode

    logger -- custom logger object

    access_log_class -- custom class for access_logger

    access_log -- custom logging object

    access_log_format -- access log format string

    loop -- Optional event loop

    max_line_size -- Optional maximum header line size

    max_field_size -- Optional maximum header field size

    max_headers -- Optional maximum header size

    timeout_ceil_threshold -- Optional value to specify
                              threshold to ceil() timeout
                              values

    )Úmax_field_sizeÚmax_headersÚmax_line_sizeÚ_request_countÚ
_keepaliveÚ_managerÚ_request_handlerÚ_request_factoryÚ_tcp_keepaliveÚ_next_keepalive_close_timeÚ_keepalive_handleÚ_keepalive_timeoutÚ_lingering_timeÚ	_messagesÚ_message_tailÚ_handler_waiterÚ_waiterÚ_task_handlerÚ_payload_parserÚ_data_received_cbÚloggerÚdebugÚ
access_logr   Ú_closeÚ_force_closeÚ_current_requestÚ_timeout_ceil_thresholdÚ_request_in_progressÚ_logging_enabledÚ_cachei.  TFiþ  é€   g      $@é   )Úkeepalive_timeoutr!   rY   Úaccess_log_classr[   Úaccess_log_formatrZ   rG   rF   rE   Úlingering_timeÚread_bufsizeÚauto_decompressÚtimeout_ceil_thresholdÚmanagerr+   Úloopre   r!   rY   rf   r[   rg   rZ   rG   rF   rE   rh   ri   rj   rk   c          
      ó   •— t          | |||
||t          |¬¦  «        }t          ¦   «                              ||¦  «         d| _        d| _        d | _        || _        |j        | _	        |j
        | _        |
| _        || _        || _        || _        d| _        d | _        || _        t'          |¦  «        | _        t+          ¦   «         | _        d| _        d | _        d | _        d | _        d | _        d | _        d| _        	 t'          |¦  «        | _        n# t<          t>          f$ r Y nw xY w|| _         |	| _!        || _"        |r# |||¦  «        | _#        | j#        j$        | _%        nd | _#        d| _%        d| _&        d| _'        d| _(        i | _)        d S )N)rG   rE   rF   Úpayload_exceptionrj   r   Fg        r5   rd   )*r   r)   ÚsuperÚ__init__rH   rI   r^   rJ   Úrequest_handlerrK   Úrequest_factoryrL   rG   rF   rE   rM   rN   rO   rP   ÚfloatrQ   r   rR   rS   rX   rU   rT   rV   rW   r_   Ú	TypeErrorÚ
ValueErrorrY   rZ   r[   r   Úenabledra   r\   r]   r`   rb   )Úselfrl   rm   re   r!   rY   rf   r[   rg   rZ   rG   rF   rE   rh   ri   rj   rk   ÚparserÚ	__class__s                     €r6   rq   zRequestHandler.__init__¨   sÊ  ø€ õ* #ØØØØ'Ø)Ø#Ý1Ø+ð	
ñ 	
ô 	
ˆõ 	‰Œ×Ò˜˜vÑ&Ô&Ð&ð  ˆÔØˆŒØ48ˆÔØ'.ˆŒØ8?Ô8OˆÔØ8?Ô8OˆÔà*ˆÔØ&ˆÔØ,ˆÔà+ˆÔà*-ˆÔ'Ø8<ˆÔØ"3ˆÔÝ$ ^Ñ4Ô4ˆÔå*/©'¬'ˆŒØ ˆÔØ<@ˆÔà48ˆŒØ<@ˆÔØ8<ˆÔØ$(ˆÔà./ˆÔ$ð	Ý+0Ð1GÑ+HÔ+HˆDÔ(Ð(øÝ�:Ð&ð 	ð 	ð 	ØˆDð	øøøð ˆŒØˆŒ
Ø$ˆŒØð 	*Ø>NÐ>NØÐ-ñ?ô ?ˆDÔð %)Ô$6Ô$>ˆDÔ!Ð!à!%ˆDÔØ$)ˆDÔ!àˆŒØ!ˆÔØ$)ˆÔ!Ø&(ˆŒˆˆs   Ã>D ÄD'Ä&D'Úreturnc                 óT   — d                      | j        j        | j        �dnd¦  «        S )Nz<{} {}>Ú	connectedÚdisconnected)Úformatrz   r0   Ú	transport©rx   s    r6   Ú__repr__zRequestHandler.__repr__ü   s0   € Ø×ÒØŒNÔ#Øœ>Ð5ˆKˆK¸>ñ
ô 
ð 	
r5   zssl.SSLContextc                 óH   — | j         €dn| j                              d¦  «        S )zReturn SSLContext if available.NÚ
sslcontext©r€   Úget_extra_infor�   s    r6   Ússl_contextzRequestHandler.ssl_context  s+   € ð
 Œ~Ð%ð ˆDà”×.Ò.¨|Ñ<Ô<ð	
r5   Nc                 óH   — | j         €dn| j                              d¦  «        S )zReturn peername if available.NÚpeernamer…   r�   s    r6   r‰   zRequestHandler.peername  ó+   € ð Œ~Ð%ð ˆDà”×.Ò.¨zÑ:Ô:ð	
r5   c                 óH   — | j         €dn| j                              d¦  «        S )zReturn sockname if available.NÚsocknamer…   r�   s    r6   rŒ   zRequestHandler.sockname  rŠ   r5   c                 ó   — | j         S ©N)rP   r�   s    r6   re   z RequestHandler.keepalive_timeout!  s   € àÔ&Ð&r5   ç      .@Útimeoutc              ƒ   ól  K  — d| _         | j        �| j                             ¦   «          | j        rÈ| j                             ¦   «         | _        	 t          |¦  «        4 ƒd{V —† | j        ƒ d{V —† ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   nb# t          j	        t          j
        f$ rD d| _        t          j        dk    r*t          j        ¦   «         x}r|                     ¦   «         r‚ Y nw xY w	 t          |¦  «        4 ƒd{V —† | j        �+| j                             t          j	        ¦   «         ¦  «         | j        �8| j                             ¦   «         st          j        | j        ¦  «        ƒ d{V —† ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   n[# t          j	        t          j
        f$ r= t          j        dk    r*t          j        ¦   «         x}r|                     ¦   «         r‚ Y nw xY w| j        �| j                             ¦   «          |                      ¦   «          dS )z±Do worker process exit preparations.

        We need to clean up everything and stop accepting requests.
        It is especially important for keep-alive connections.
        TN©é   é   )r]   rO   Úcancelr`   Ú_loopÚcreate_futurerT   r   ÚasyncioÚCancelledErrorÚTimeoutErrorÚsysÚversion_infoÚcurrent_taskÚ
cancellingr^   Ú_cancelrV   ÚdoneÚshieldÚforce_close)rx   r�   Útasks      r6   ÚshutdownzRequestHandler.shutdown%  sg  è è € ð !ˆÔàÔ!Ð-ØÔ"×)Ò)Ñ+Ô+Ð+ð Ô$ð 	ð $(¤:×#;Ò#;Ñ#=Ô#=ˆDÔ ð
Ý'¨Ñ0Ô0ð /ð /ð /ð /ð /ð /ð /ð /ØÔ.Ð.Ð.Ð.Ð.Ð.Ð.Ð.ð/ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /øøåÔ*­GÔ,@ÐAð ð ð Ø'+�Ô$åÔ$¨Ò/Ð/Ý!(Ô!5Ñ!7Ô!7Ð7˜ð 0àŸšÑ)Ô)ð 0ð øøðøøøð	Ý# GÑ,Ô,ð =ð =ð =ð =ð =ð =ð =ð =ØÔ(Ð4ØÔ)×1Ò1µ'Ô2HÑ2JÔ2JÑKÔKÐKàÔ%Ð1¸$Ô:L×:QÒ:QÑ:SÔ:SÐ1Ý!œ.¨Ô);Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<ð=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =øøõ Ô&­Ô(<Ð=ð 	ð 	ð 	åÔ  GÒ+Ð+Ý$Ô1Ñ3Ô3Ð3�Tð ,à—O’OÑ%Ô%ð ,ð øøð	øøøð ÔÐ)ØÔ×%Ò%Ñ'Ô'Ð'à×ÒÑÔÐÐÐso   ÁB Á%BÁ3B Â
BÂB ÂBÂB ÂAC6Ã5C6Ã:F% ÄA2FÆF% Æ
FÆF% Æ FÆ!F% Æ%AG=Ç<G=r€   c                 óÐ  •— t          ¦   «                              |¦  «         t          t          j        |¦  «        }| j        rt          |¦  «         | j        €J ‚| j                             | |¦  «         | j        }t          j
        dk    r*t          j        |                      ¦   «         |d¬¦  «        }n'|                     |                      ¦   «         ¦  «        }|| _        d S )N©r“   é   T©rm   Úeager_start)rp   Úconnection_mader   r˜   Ú	TransportrM   r!   rJ   r–   r›   rœ   ÚTaskÚstartÚcreate_taskrV   )rx   r€   Úreal_transportrm   r£   rz   s        €r6   rª   zRequestHandler.connection_madeW  sÊ   ø€ Ý‰Œ×Ò 	Ñ*Ô*Ð*å�gÔ/°Ñ;Ô;ˆØÔð 	*Ý˜.Ñ)Ô)Ð)àŒ}Ð(Ð(Ð(ØŒ×%Ò% d¨NÑ;Ô;Ð;àŒzˆÝÔ˜wÒ&Ð&Ý”< §
¢
¡¤°4ÀTÐJÑJÔJˆDˆDà×#Ò# D§J¢J¡L¤LÑ1Ô1ˆDØ!ˆÔÐÐr5   r>   c                 óR  •— | j         €d S | j                              | |¦  «         | j         j        }|                      ¦   «          t	          ¦   «                              |¦  «         d | _         d | _        d | _        d | _        | j        �| j         	                    ¦   «          | j
        �+|€t          d¦  «        }| j
                             |¦  «         |r | j        �| j         	                    ¦   «          d | _        | j        �"| j                             ¦   «          d | _        d S d S )NzConnection lost)rJ   Úconnection_lostÚhandler_cancellationr¢   rp   rL   rK   Ú_parserrO   r•   r^   ÚConnectionResetErrorrŸ   rV   rW   Úfeed_eof)rx   r>   r²   rz   s      €r6   r±   zRequestHandler.connection_losth  s/  ø€ ØŒ=Ð ØˆFØŒ×%Ò% d¨CÑ0Ô0Ð0ð  $œ}ÔAÐà×ÒÑÔÐÝ‰Œ×Ò Ñ$Ô$Ð$ØˆŒØ $ˆÔØ $ˆÔØˆŒàÔ!Ð-ØÔ"×)Ò)Ñ+Ô+Ð+àÔ Ð,Øˆ{Ý*Ð+<Ñ=Ô=�ØÔ!×)Ò)¨#Ñ.Ô.Ð.àð 	( DÔ$6Ð$BØÔ×%Ò%Ñ'Ô'Ð'à!ˆÔàÔÐ+ØÔ ×)Ò)Ñ+Ô+Ð+Ø#'ˆDÔ Ð Ð ð ,Ð+r5   ry   Údata_received_cbc                 ó’   — | j         �J ‚|| _         || _        | j        r(| j                              | j        ¦  «         d| _        d S d S )Nr5   )rW   rX   rS   Ú	feed_data)rx   ry   r¶   s      r6   Ú
set_parserzRequestHandler.set_parserˆ  s`   € ð
 Ô#Ð+Ð+Ð+à%ˆÔØ!1ˆÔàÔð 	%ØÔ ×*Ò*¨4Ô+=Ñ>Ô>Ð>Ø!$ˆDÔÐÐð	%ð 	%r5   c                 ó   — d S rŽ   r4   r�   s    r6   Úeof_receivedzRequestHandler.eof_received–  s   € Øˆr5   Údatac                 óø  — | j         s| j        rd S | j        €ì| j        så| j        €J ‚	 | j                             |¦  «        \  }}}n:# t          $ r-}t          d||j        ¬¦  «        t          fg}d}d}Y d }~nd }~ww xY w|pdD ]1\  }}| xj
        dz  c_
        | j                             ||f¦  «         Œ2| j        }|r+|�)|                     ¦   «         s|                     d ¦  «         || _        |r|r|| _        d S d S d S | j        €| j        r|r| xj        |z  c_        d S |rP| j        �|                      ¦   «          | j                             |¦  «        \  }	}|	r|                      ¦   «          d S d S d S )Ni�  )r=   r>   r?   Fr5   r4   r   )r]   r\   rW   Ú	_upgradedr³   r¸   r   r<   r?   r   rH   rR   ÚappendrU   r    Ú
set_resultrS   rX   Úclose)
rx   r¼   ÚmessagesÚupgradedÚtailr>   ÚmsgÚpayloadÚwaiterÚeofs
             r6   Údata_receivedzRequestHandler.data_received™  s  € ØÔð 	 ¤ð 	ØˆFð ÔÐ'°´Ð'Ø”<Ð+Ð+Ð+ðØ+/¬<×+AÒ+AÀ$Ñ+GÔ+GÑ(�˜( D DøÝ&ð ð ð å S¨c¸3¼;ÐGÑGÔGÍÐWð�ð !�Ø������øøøøðøøøð !) ¨Bð 6ð 6‘��WØÐ#Ô# qÑ(Ð#Ô#Ø”×%Ò% s¨G nÑ5Ô5Ð5Ð5à”\ˆFØð (˜FÐ.°v·{²{±}´}Ð.à×!Ò! $Ñ'Ô'Ð'à%ˆDŒNØð *˜Dð *Ø%)�Ô"Ð"Ð"ð*ð *ð *ð *ð Ô!Ð)¨d¬nÐ)ÀÐ)ØÐÔ $Ñ&ÐÔÐÐð ð 	ØÔ%Ð1Ø×&Ò&Ñ(Ô(Ð(ØÔ,×6Ò6°tÑ<Ô<‰IˆC�Øð Ø—
’
‘”���ð	ð 	ðð s   ©A Á
A?Á#A:Á:A?Úvalc                 óf   — || _         | j        r"| j                             ¦   «          d| _        dS dS )zMSet keep-alive connection mode.

        :param bool val: new state.
        N)rI   rO   r•   )rx   rÊ   s     r6   Ú
keep_alivezRequestHandler.keep_aliveÂ  sC   € ð
 ˆŒØÔ!ð 	*ØÔ"×)Ò)Ñ+Ô+Ð+Ø%)ˆDÔ"Ð"Ð"ð	*ð 	*r5   c                 óX   — d| _         | j        r| j                             ¦   «          dS dS )z�Close connection.

        Stop accepting new pipelining messages and close
        connection when handlers done processing messages.
        TN)r\   rU   r•   r�   s    r6   rÁ   zRequestHandler.closeÌ  s9   € ð ˆŒØŒ<ð 	"ØŒL×ÒÑ!Ô!Ð!Ð!Ð!ð	"ð 	"r5   c                 ó¦   — d| _         | j        r| j                             ¦   «          | j        �"| j                             ¦   «          d| _        dS dS )zForcefully close connection.TN)r]   rU   r•   r€   rÁ   r�   s    r6   r¢   zRequestHandler.force_closeÖ  sW   € à ˆÔØŒ<ð 	"ØŒL×ÒÑ!Ô!Ð!ØŒ>Ð%ØŒN× Ò Ñ"Ô"Ð"Ø!ˆDŒNˆNˆNð &Ð%r5   ÚrequestÚresponseÚtimec                 ó¬   — | j         rJ| j        �Et          r|€J ‚| j                             ||| j                             ¦   «         |z
  ¦  «         d S d S d S rŽ   )ra   r   r   Úlogr–   rÑ   )rx   rÏ   rÐ   rÑ   s       r6   Ú
log_accesszRequestHandler.log_accessß  sp   € ð Ô ð 	P TÔ%7Ð%CÝð (ØÐ'Ð'Ð'ØÔ×"Ò" 7¨H°d´j·o²oÑ6GÔ6GÈ$Ñ6NÑOÔOÐOÐOÐOð	Pð 	PÐ%CÐ%Cr5   ÚargsÚkwc                 ó<   — | j         r | j        j         |i |¤Ž d S d S rŽ   )rZ   rY   ©rx   rÕ   rÖ   s      r6   Ú	log_debugzRequestHandler.log_debugç  s6   € ØŒ:ð 	+ØˆDŒKÔ˜tÐ* rÐ*Ð*Ð*Ð*Ð*ð	+ð 	+r5   c                 ó*   —  | j         j        |i |¤Ž d S rŽ   )rY   Ú	exceptionrØ   s      r6   Úlog_exceptionzRequestHandler.log_exceptionë  s"   € ØˆŒÔ˜tÐ* rÐ*Ð*Ð*Ð*Ð*r5   c                 ó8  — d | _         | j        s| j        sd S | j        }|                     ¦   «         }| j        }||k     r"|                     || j        ¦  «        | _         d S | j        r/| j         	                    ¦   «         s|  
                    ¦   «          d S d S d S rŽ   )rO   r]   rI   r–   rÑ   rN   Úcall_atÚ_process_keepaliverU   r    r¢   )rx   rm   ÚnowÚ
close_times       r6   rß   z!RequestHandler._process_keepaliveî  sµ   € Ø!%ˆÔØÔð 	 D¤Oð 	ØˆFàŒzˆØ�iŠi‰kŒkˆØÔ4ˆ
Ø�ÒÐà%)§\¢\°*¸dÔ>UÑ%VÔ%VˆDÔ"ØˆFð Œ<ð 	 ¤× 1Ò 1Ñ 3Ô 3ð 	Ø×ÒÑÔÐÐÐð	ð 	ð 	ð 	r5   Ú
start_timerr   c              ƒ   óª  K  — d| _         	 	 || _         ||¦  «        ƒ d {V —†}d | _        n# d | _        w xY w	 t          |dd¦  «        rt          j        dt
          ¦  «         |                      |||¦  «        ƒ d {V —†\  }}nõ# t          $ r,}|}|                      |||¦  «        ƒ d {V —†\  }}Y d }~nÄd }~wt          j	        $ r ‚ t          j
        $ rW}|                      d|¬¦  «         |                      |d¦  «        }|                      |||¦  «        ƒ d {V —†\  }}Y d }~nQd }~wt          $ rA}|                      |d|¦  «        }|                      |||¦  «        ƒ d {V —†\  }}Y d }~nd }~ww xY wd| _         | j        �| j                             d ¦  «         n.# d| _         | j        �| j                             d ¦  «         w w xY w||fS )	NTÚ__http_exception__Fzlreturning HTTPException object is deprecated (#2415) and will be removed, please raise the exception insteadzRequest handler timed out.©Úexc_infoiø  éô  )r`   r^   ÚgetattrÚwarningsÚwarnÚDeprecationWarningÚfinish_responser"   r˜   r™   rš   rÙ   Úhandle_errorÚ	ExceptionrT   rÀ   )rx   rÏ   râ   rr   ÚrespÚresetr>   s          r6   Ú_handle_requestzRequestHandler._handle_requestÿ  s—  è è € ð %)ˆÔ!ð 	6ð-Ø(/�Ô%Ø,˜_¨WÑ5Ô5Ð5Ð5Ð5Ð5Ð5Ð5�à(,�Ô%Ð%ø¨�Ô%Ð,Ð,Ð,Ð,Ð%õ �tÐ1°5Ñ9Ô9ð Ý”ð9õ 'ñ	ô ð ð !%× 4Ò 4°W¸dÀJÑ OÔ OÐOÐOÐOÐOÐOÐO‰KˆD�%�%øõ- ð 	Pð 	Pð 	PØˆDØ $× 4Ò 4°W¸dÀJÑ OÔ OÐOÐOÐOÐOÐOÐO‰KˆD�%�%�%�%�%�%øøøøÝÔ%ð 	ð 	ð 	ØÝÔ#ð 	Pð 	Pð 	PØ�NŠNÐ7À#ˆNÑFÔFÐFØ×$Ò$ W¨cÑ2Ô2ˆDØ $× 4Ò 4°W¸dÀJÑ OÔ OÐOÐOÐOÐOÐOÐO‰KˆD�%�%�%�%�%�%øøøøÝð 	Pð 	Pð 	PØ×$Ò$ W¨c°3Ñ7Ô7ˆDØ $× 4Ò 4°W¸dÀJÑ OÔ OÐOÐOÐOÐOÐOÐO‰KˆD�%�%�%�%�%�%øøøøð	Pøøøð ).ˆDÔ%ØÔ#Ð/ØÔ$×/Ò/°Ñ5Ô5Ð5øøð ).ˆDÔ%ØÔ#Ð/ØÔ$×/Ò/°Ñ5Ô5Ð5Ð5ð 0øøøð �Uˆ{Ðsa   Œ, ¤B ¬	5µB ¹AF# Â
E7Â"B6Â1F# Â6!E7ÃAD)Ä$F# Ä)E7Ä67E2Å-F# Å2E7Å7F# Æ#+Gc           	   ƒ   óì
  K  — | j         }| j        }|€J ‚| j        }d}| j        €J ‚| j        €J ‚| j        �s
| j        s;	 |                     ¦   «         | _        | j        ƒ d{V —† d| _        n# d| _        w xY w| j         	                    ¦   «         \  }}| j
        r|                     ¦   «         nd}|xj        dz  c_        t          | |¦  «        }t          |t          ¦  «        r|                      |¦  «        }	t"          }n| j        }	|                      ||| || j        pt'          j        |¦  «        ¦  «        }
	 |                      |
||	¦  «        }t,          j        dk    rt'          j        ||d¬¦  «        }n|                     |¦  «        }	 |ƒ d{V —†\  }}nK# t4          $ r> |                      d¦  «         Y d|
_        | j        €|�|                      d¦  «         �n[w xY w~|r=|                      d¦  «         	 d|
_        | j        €|�|                      d¦  «         �nt=          |j        ¦  «        | _         | !                    ¦   «         �s€| j"        }| j        �s-|�r*|                      d	|¦  «         |                     ¦   «         }||z   }	 | !                    ¦   «         sŠ||k     r„tG          ||z
  ¦  «        4 ƒd{V —† | $                    ¦   «         ƒ d{V —† ddd¦  «        ƒd{V —† n# 1 ƒd{V —†swxY w Y   |                     ¦   «         }| !                    ¦   «         s||k     °„n[# t&          j%        t&          j&        f$ r= t,          j        d
k    r*t'          j        ¦   «         x}r| '                    ¦   «         r‚ Y nw xY w| !                    ¦   «         s0| j        s)|                      d¦  «         |  (                    ¦   «          | )                    tT          ¦  «         n˜# t&          j%        $ r+ |                      d¦  «         |  +                    ¦   «          ‚ tX          $ r5}|  -                    d|¬¦  «         |  +                    ¦   «          Y d}~n&d}~wt\          $ r |  +                    ¦   «          ‚ w xY wd|
_        | j        €|�|                      d¦  «         n,# d|
_        | j        €|�|                      d¦  «         w w w xY w| j         rT| j/        sM| j        sF|                     ¦   «         |z   }|| _0        | j1        € | 2                    || j3        ¦  «        | _1        nn| j        �¯
| j        s)d| _        | j        �| j         (                    ¦   «          dS dS dS )a_  Process incoming request.

        It reads request line, request headers and request payload, then
        calls handle_request() method. Subclass has to override
        handle_request(). start() handles various exceptions in request
        or response handling. Connection is being closed always unless
        keep_alive(True) specified.
        Nr   r¦   Tr¨   z&Ignored premature client disconnectionz'Ignored premature client disconnection.z(Ignored premature client disconnection 2z'Start lingering close timer for %s sec.r’   zUncompleted request.zUnhandled exceptionrå   )4r–   rJ   rP   rL   rK   r]   rR   r—   rU   Úpopleftra   rÑ   Úrequests_countr   Ú
isinstancer<   Ú_make_error_handlerÚERRORrV   r˜   r�   rñ   r›   rœ   r¬   r®   ÚConnectionErrorrÙ   Ú_taskr€   ÚboolrÌ   rI   Úis_eofrQ   r   Úreadanyr™   rš   rž   rÁ   Úset_exceptionÚ_PAYLOAD_ACCESS_ERRORr¢   rî   rÜ   rB   r\   rN   rO   rÞ   rß   )rx   rm   rl   re   rï   r?   rÆ   r­   Úwriterrr   rÏ   Úcoror£   rð   rh   rà   Úend_tÚtr>   rá   s                       r6   r­   zRequestHandler.start*  sÎ  è è € ð ŒzˆØ”-ˆØÐ"Ð"Ð"Ø Ô3ÐØˆØÔ$Ð0Ð0Ð0ØÔ$Ð0Ð0Ð0àÔ#ñ p	Ø”>ð (ð(à#'×#5Ò#5Ñ#7Ô#7�D”LØœ,Ð&Ð&Ð&Ð&Ð&Ð&Ð&à#'�D”L�Lø 4�D”LÐ'Ð'Ð'Ð'à#œ~×5Ò5Ñ7Ô7ÑˆG�Wð $(Ô#8ÐB�D—I’I‘K”K�K¸dˆEàÐ"Ô" aÑ'Ð"Ô"Ý! $¨Ñ-Ô-ˆFÝ˜'¥8Ñ,Ô,ð 8à"&×":Ò":¸7Ñ"CÔ"C�Ý��à"&Ô"7�ð
 ×+Ò+ØØØØØÔ"Ð@¥gÔ&:¸4Ñ&@Ô&@ñô ˆGðCNà×+Ò+¨G°U¸OÑLÔL�ÝÔ# wÒ.Ð.Ý"œ<¨°4ÀTÐJÑJÔJ�D�Dà×+Ò+¨DÑ1Ô1�DðØ(, * * * * * *‘K�D˜%˜%øÝ&ð ð ð Ø—N’NÐ#KÑLÔLÐLØðl !%�”Ø”>Ð)¨dÐ.>Ø—N’NÐ#LÑMÔMÐMùðuøøøð
 Øð Ø—N’NÐ#MÑNÔNÐNØð` !%�”Ø”>Ð)¨dÐ.>Ø—N’NÐ#LÑMÔMÐMùõ_ #' t¤Ñ"7Ô"7�”ð —~’~Ñ'Ô'ñ %Ø%)Ô%9�NØÔ,ñ &°ñ &ØŸšØEÀ~ñô ð ð #Ÿiši™kœk˜Ø # nÑ 4˜ð&Ø&-§n¢nÑ&6Ô&6ð 2¸3Àº;¸;Ý+7¸À¹Ñ+DÔ+Dð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<à*1¯/ª/Ñ*;Ô*;Ð$;Ð$;Ð$;Ð$;Ð$;Ð$;Ð$;ð!<ð !<ð !<ñ !<ô !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<ð !<øøøð !<ð !<ð !<ð !<ð '+§i¢i¡k¤k ð	 '.§n¢nÑ&6Ô&6ð 2¸3Àº;¸;øøõ
 !(Ô 6½Ô8LÐMð &ð &ð &å #Ô 0°GÒ ;Ð ;Ý*1Ô*>Ñ*@Ô*@Ð%@ Qð !<à$%§L¢L¡N¤Nð !<ð !&øøð&øøøð #Ÿ>š>Ñ+Ô+ð %°DÔ4Eð %ØŸšÐ'=Ñ>Ô>Ð>ØŸ
š
™œ˜à×%Ò%Õ&;Ñ<Ô<Ð<Ð<øåÔ)ð ð ð Ø—’ÐGÑHÔHÐHØ× Ò Ñ"Ô"Ð"ØÝð #ð #ð #Ø×"Ò"Ð#8À3Ð"ÑGÔGÐGØ× Ò Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"øøøøÝ ð ð ð Ø× Ò Ñ"Ô"Ð"Øðøøøð !%�”Ø”>Ð)¨dÐ.>Ø—N’NÐ#LÑMÔMÐMøøð !%�”Ø”>Ð)¨dÐ.>Ø—N’NÐ#LÑMÔMÐMÐMð *Ð.>øøøð Œð 	 t¤{ð 	¸4Ô;Lð 	à!ŸYšY™[œ[Ð+<Ñ<�
Ø2<�Ô/ØÔ)Ð1Ø-1¯\ª\Ø" DÔ$;ñ.ô .�DÔ*øð ða Ô#ñ p	ðf Ô ð 	'Ø!%ˆDÔØŒ~Ð)Ø”×$Ò$Ñ&Ô&Ð&Ð&Ð&ð	'ð 	'à)Ð)s³   Á &A. Á.	A7Ä?AO4 ÆF  ÆO4 Æ G(Æ?O4 Ç'G(Ç(O4 È+A/O4 Ê2L: ËK:Ë(L: Ë:
LÌL: ÌLÌ1L: Ì9O4 Ì:ANÎO4 ÎNÎA!O4 Ï3R2 Ï4AR	Ð6+Q&Ñ!R2 Ñ&#R	Ò	R2 Ò2)Srï   c              ƒ   óÈ  K  — |                      ¦   «          | j        �N| j                             d¦  «         d| _        | j        r&| j                             | j        ¦  «         d| _        	 |j        }n|# t          $ ro |€|                      d¦  «         n|                      d|›�¦  «         t          ¦   «         }t          |j        |j        |j        |j        ¬¦  «        }|j        }Y nw xY w	  ||¦  «        ƒ d{V —† |                     ¦   «         ƒ d{V —† n+# t           $ r |                      |||¦  «         |dfcY S w xY w|                      |||¦  «         |dfS )a   Prepare the response and write_eof, then log access.

        This has to
        be called within the context of any exception so the access logger
        can get exception information. Returns True if the client disconnects
        prematurely.
        NFr5   z+Missing return statement on request handlerz3Web-handler should return a response instance, got )r=   ÚreasonÚtextÚheadersT)Ú_finishr³   Úset_upgradedr¾   rS   r¸   ÚprepareÚAttributeErrorrÜ   r#   r&   r=   r  r  r  Ú	write_eofrø   rÔ   )rx   rÏ   rï   râ   Úprepare_methr>   s         r6   rì   zRequestHandler.finish_response³  sÀ  è è € ð 	�ŠÑÔÐØŒ<Ð#ØŒL×%Ò% eÑ,Ô,Ð,Ø"ˆDŒNØÔ!ð )Ø”×&Ò& tÔ'9Ñ:Ô:Ð:Ø%(�Ô"ð	(Øœ<ˆLˆLøÝð 	(ð 	(ð 	(Øˆ|Ø×"Ò"Ð#PÑQÔQÐQÐQà×"Ò"ØRÈ$ÐRÐRñô ð õ *Ñ+Ô+ˆCÝØ”z¨#¬*¸3¼8ÈSÌ[ðñ ô ˆDð  œ<ˆLˆLˆLð	(øøøð	Ø�,˜wÑ'Ô'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ø—.’.Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"øÝð 	ð 	ð 	Ø�OŠO˜G T¨:Ñ6Ô6Ð6Ø˜�:ÐÐÐð	øøøð 	�Š˜  zÑ2Ô2Ð2Ø�Uˆ{Ðs%   Á-A5 Á5A6C.Ã-C.Ã2+D Ä%EÅErç   r=   r?   c                 ó  — | j         dk    r8t          |t          ¦  «        r#| j                             d|j        |¬¦  «         n|                      d|j        |¬¦  «         |j        j        dk    rt          d¦  «        ‚d}|t          j        k    rÍt          j        j        › dt          j        j        › �}t          j        j        }d}| j        r?t          t           ¦  «        5  t#          j        ¦   «         }ddd¦  «         n# 1 swxY w Y   d	|j                             d
d¦  «        v r&|rt+          |¦  «        }d|› d�}d|› d|› d|› d�}d	}n|r|}|dz   |z   }t-          |||¬¦  «        }	|	                     ¦   «          |	S )z›Handle errors.

        Returns HTTP response with specific status code. Logs additional
        information. It always closes current connection.
        r   zError handling request from %srå   r   zMResponse is sent already, cannot send another response with the error messagez
text/plainú Nz	text/htmlÚAcceptÚ z<h2>Traceback:</h2>
<pre>z</pre>z<html><head><title>z</title></head><body>
<h1>z</h1>
z
</body></html>
z

)r=   r  Úcontent_type)rH   rõ   r   rY   rZ   ÚremoterÜ   rÿ   Úoutput_sizerø   r	   ÚINTERNAL_SERVER_ERRORÚvalueÚphraseÚdescriptionr   rî   Ú	tracebackÚ
format_excr  ÚgetÚhtml_escaper&   r¢   )
rx   rÏ   r=   r>   r?   ÚctÚtitlerÅ   Útbrï   s
             r6   rí   zRequestHandler.handle_errorÜ  s*  € ð Ô !Ò#Ð#­
°3½Ñ(FÔ(FÐ#ð
 ŒK×ÒØ0°'´.È3ð ñ ô ð ð ð ×ÒØ0°'´.È3ð ñ ô ð ð
 Œ>Ô%¨Ò)Ð)Ý!ð)ñô ð ð
 ˆØ•ZÔ5Ò5Ð5Ý!Ô7Ô=ÐiÐiÅ
Ô@`Ô@gÐiÐiˆEÝÔ2Ô>ˆCØˆBØŒzð 0Ý�iÑ(Ô(ð 0ð 0Ý"Ô-Ñ/Ô/�Bð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð ˜gœo×1Ò1°(¸BÑ?Ô?Ð?Ð?Øð BÝ$ R™œ�BØA°rÐAÐAÐA�Cð1Ø#ð1ð 1à*/ð1ð 1ð ð1ð 1ð 1ð ð !��àð Ø�CØ &™.¨3Ñ.�å˜v¨GÀ"ÐEÑEÔEˆØ×ÒÑÔÐàˆs   Ã%DÄD	ÄD	Úerr_infoc                 ó4   ‡ ‡— dt           dt          fˆˆ fd„}|S )NrÏ   r{   c              “   óV   •K  — ‰                      | ‰j        ‰j        ‰j        ¦  «        S rŽ   )rí   r=   r>   r?   )rÏ   r  rx   s    €€r6   Úhandlerz3RequestHandler._make_error_handler.<locals>.handler  s/   øè è € Ø×$Ò$Ø˜œ¨(¬,¸Ô8Hñô ð r5   )r%   r'   )rx   r  r"  s   `` r6   rö   z"RequestHandler._make_error_handler  s<   øø€ ð	¥;ð 	µ>ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð
 ˆr5   )r�   rŽ   )r{   N)rç   NN):r0   r1   r2   r3   Ú	__slots__r   r$   r   Ú
LOG_FORMATr   r˜   ÚAbstractEventLooprt   rú   r
   Útyper   rC   r@   rq   r‚   r   r   r‡   Útupler‰   rŒ   Úpropertyre   r¤   ÚBaseTransportrª   rB   r±   r   r   r¹   r»   ÚbytesrÉ   rÌ   rÁ   r¢   r%   r'   rÔ   r   rÙ   rÜ   rß   r   rñ   r­   rì   rí   r<   rö   Ú__classcell__)rz   s   @r6   r(   r(   ^   sš  ø€ € € € € ð%ð %ðN €IðP $(Ø"Ø&Ø7CØ*Ø!-Ô!8ØØ!ØØ"Ø $Ø.Ø $Ø()ð'R)ð R)ð R)àðR)ð Ô'ð	R)ð !ðR)ð ðR)ð ðR)ð Ð3Ô4ðR)ð ðR)ð ðR)ð ðR)ð ðR)ð ðR)ð ðR)ð  ð!R)ð" ð#R)ð$ ð%R)ð& !&ð'R)ð R)ð R)ð R)ð R)ð R)ðh
˜#ð 
ð 
ð 
ð 
ð ð
˜XÐ&6Ô7ð 
ð 
ð 
ñ Ôð
ð ð
à	ˆu�S˜#˜s CÐ'Ô(Ñ	(¨5°°c°¬?Ñ	:¸TÑ	Að
ð 
ð 
ñ Ôð
ð ð
à	ˆu�S˜#˜s CÐ'Ô(Ñ	(¨5°°c°¬?Ñ	:¸TÑ	Að
ð 
ð 
ñ Ôð
ð ð' 5ð 'ð 'ð 'ñ „Xð'ð0ð 0 e¨d¡lð 0¸dð 0ð 0ð 0ð 0ðd"¨Ô)>ð "À4ð "ð "ð "ð "ð "ð "ð"( =°4Ñ#7ð (¸Dð (ð (ð (ð (ð (ð (ðF 7;ð%ð %àð%ð # 2 t 8Ô,¨tÑ3ð%ð 
ð	%ð %ð %ð %ðð ð ð ð' %ð '¨Dð 'ð 'ð 'ð 'ðR*˜dð * tð *ð *ð *ð *ð"ð "ð "ð "ð"ð "ð "ð "ðPØ"ðPØ.<ðPØDIÈDÁLðPà	ðPð Pð Pð Pð+˜sð +¨#ð +°$ð +ð +ð +ð +ð+ 3ð +¨cð +°dð +ð +ð +ð +ðð ð ð ð")àð)ð ˜D‘Lð)ð " ; -°¸>Ô1JÐ"JÔKð	)ð
 
ˆ~˜tÐ#Ô	$ð)ð )ð )ð )ðVG'ð G'ð G'ð G'ðR'Ø"ð'Ø*8ð'ØFKÈdÁlð'à	ˆ~˜tÐ#Ô	$ð'ð 'ð 'ð 'ðX Ø$(Ø"ð<ð <àð<ð ð<ð ˜TÑ!ð	<ð
 �t‘ð<ð 
ð<ð <ð <ð <ð|Ø ðà	�;�- ¨>Ô!:Ð:Ô	;ðð ð ð ð ð ð ð r5   )Pr˜   Úasyncio.streamsr›   r  ré   Úcollectionsr   Úcollections.abcr   r   r   Ú
contextlibr   Úhtmlr   r  Úhttpr	   Úloggingr
   Útypingr   r   r   r   ÚattrÚyarlÚ	propcacher   Úabcr   r   Úbase_protocolr   Úhelpersr   r   r   r   r   r   r   r   Úhttp_exceptionsr   rÓ   r   r   Ústreamsr   r    Útcp_helpersr!   Úweb_exceptionsr"   r#   Úweb_logr$   Úweb_requestr%   Úweb_responser&   r'   Ú__all__ÚsslÚ
web_serverr+   Ú_RequestFactoryÚ_RequestHandlerÚURLr÷   rî   r)   r*   rþ   Úsr<   r'  Ú_MsgTyper(   r4   r5   r6   ú<module>rI     sÚ  ðØ €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø Ð Ð Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5à €€€Ø €€€Ø +Ð +Ð +Ð +Ð +Ð +à ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5Ð 5ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø &Ð &Ð &Ð &Ð &Ð &Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ !Ð !Ð !Ð !Ð !Ð !Ø $Ð $Ð $Ð $Ð $Ð $Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à
I€àð #Ø€J€J€Jà"Ð"Ð"Ð"Ð"Ð"ð àØØØØðð ðô	€ð ˜K˜=¨)°NÔ*CÐCÔD€àÐØØØØØØØØ	Ø	Ø€D„HˆS�M„Mñ	ô 	€ð!ð !ð !ð !ð !˜)ñ !ô !ð !ð8ð 8ð 8ð 8ð 8˜ñ 8ô 8ð 8ð +Ð*Ñ,Ô,Ð ð €„�T $¨dÐ3Ñ3Ô3ðð ð ð ð ñ ô ñ 4Ô3ðð Ð" XÑ-¨|Ð;Ô<€ðDð Dð Dð Dð D�\ñ Dô Dð Dð Dð Dr5   