§
    ÏÁ³gHZ  ã                  óF  — 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
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mZmZ ddlmZmZmZ ddlmZ d	d
lmZ  ej        d¦  «        Z dd„Z! G d„ dej"        ¦  «        Z# G d„ de¦  «        Z$ G d„ d¦  «        Z%dS )é    )ÚannotationsNé   )ÚNetworkStream)ÚConnectionNotAvailableÚLocalProtocolErrorÚRemoteProtocolError)ÚOriginÚRequestÚResponse)ÚLockÚ	SemaphoreÚShieldCancellation)ÚTraceé   )ÚConnectionInterfacezhttpcore.http2Úrequestr
   ÚreturnÚboolc                ó>   — t          d„ | j        D ¦   «         ¦  «        S )Nc              3  ó|   K  — | ]7\  }}|                      ¦   «         d k    p|                      ¦   «         dk    V — Œ8dS )s   content-lengthó   transfer-encodingN©Úlower©Ú.0ÚkÚvs      úR/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/httpcore/_sync/http2.pyú	<genexpr>z#has_body_headers.<locals>.<genexpr>   s[   è è € ð ð áˆAˆqð 	
�Š‰	Œ	Ð&Ò&ÐK¨!¯'ª'©)¬)Ð7KÒ*Kðð ð ð ð ð ó    )ÚanyÚheaders)r   s    r   Úhas_body_headersr#      s2   € Ýð ð à”Oðñ ô ñ ô ð r    c                  ó   — e Zd ZdZdZdZdS )ÚHTTPConnectionStater   r   é   N)Ú__name__Ú
__module__Ú__qualname__ÚACTIVEÚIDLEÚCLOSED© r    r   r%   r%   $   s   € € € € € Ø€FØ€DØ€F€F€Fr    r%   c                  ó(  — e Zd ZdZej                             d¬¦  «        Z	 d=d>d„Zd?d„Z	d@d„Z
dAd„ZdAd„ZdBd„ZdAd„ZdCd„ZdDd„ZdEd „Z	 d=dFd"„ZdGd%„ZdHd&„ZdId'„ZdJd)„Zd@d*„ZdKd+„ZdLd-„ZdMd.„ZdMd/„ZdMd0„ZdMd1„ZdNd3„ZdNd4„ZdOd5„Z 	 	 	 dPdQd<„Z!dS )RÚHTTP2Connectioné   F)Úvalidate_inbound_headersNÚoriginr	   Ústreamr   Úkeepalive_expiryúfloat | Nonec                ó¼  — || _         || _        || _        t          j                             | j        ¬¦  «        | _        t          j	        | _
        d | _        d| _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        t          ¦   «         | _        d| _        d| _        d| _        i | _        d | _        d | _        d | _        d S )N)Úconfigr   F)Ú_originÚ_network_streamÚ_keepalive_expiryÚh2Ú
connectionÚH2ConnectionÚCONFIGÚ	_h2_stater%   r+   Ú_stateÚ
_expire_atÚ_request_countr   Ú
_init_lockÚ_state_lockÚ
_read_lockÚ_write_lockÚ_sent_connection_initÚ_used_all_stream_idsÚ_connection_errorÚ_eventsÚ_connection_terminatedÚ_read_exceptionÚ_write_exception)Úselfr2   r3   r4   s       r   Ú__init__zHTTP2Connection.__init__.   sÄ   € ð ˆŒØ%ˆÔØ/?ˆÔÝœ×3Ò3¸4¼;Ð3ÑGÔGˆŒÝ)Ô.ˆŒØ(,ˆŒØˆÔÝ™&œ&ˆŒÝ™6œ6ˆÔÝ™&œ&ˆŒÝ™6œ6ˆÔØ%*ˆÔ"Ø$)ˆÔ!Ø!&ˆÔð ð 	Œð NRˆÔ#à15ˆÔØ26ˆÔÐÐr    r   r
   r   r   c           	     óZ  — |                       |j        j        ¦  «        s$t          d|j        j        › d| j        › �¦  «        ‚| j        5  | j        t          j        t          j	        fv r)| xj
        dz  c_
        d | _        t          j        | _        nt          ¦   «         ‚	 d d d ¦  «         n# 1 swxY w Y   | j        5  | j        sö	 d|i}t          dt           ||¦  «        5   | j        di |¤Ž d d d ¦  «         n# 1 swxY w Y   nN# t$          $ rA}t'          ¦   «         5  |                      ¦   «          d d d ¦  «         n# 1 swxY w Y   |‚d }~ww xY wd| _        d| _        | j        j        j        }t3          |¦  «        | _        t7          || j        z
  ¦  «        D ]}| j                             ¦   «          Œd d d ¦  «         n# 1 swxY w Y   | j                             ¦   «          	 | j                             ¦   «         }g | j        |<   n=# t>          j         j!        $ r& d| _"        | xj
        dz  c_
        t          ¦   «         ‚w xY w	 ||dœ}t          dt           ||¦  «        5  |  #                    ||¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          d	t           ||¦  «        5  |  $                    ||¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          d
t           ||¦  «        5 }|  %                    ||¬¦  «        \  }}	||	f|_&        d d d ¦  «         n# 1 swxY w Y   tO          ||	tQ          | ||¬¦  «        d| j)        |dœ¬¦  «        S # t$          $ r¿}t'          ¦   «         5  d|i}t          dt           ||¦  «        5  |  *                    |¬¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   tW          |t>          j         j,        ¦  «        r*| j-        rt]          | j-        ¦  «        ‚t_          |¦  «        ‚|‚d }~ww xY w)NzAttempted to send request to z on connection to r   r   Úsend_connection_initT©r   Ú	stream_idÚsend_request_headersÚsend_request_bodyÚreceive_response_headers©rS   s   HTTP/2)Úhttp_versionÚnetwork_streamrS   )Ústatusr"   ÚcontentÚ
extensionsrS   Úresponse_closedr-   )0Úcan_handle_requestÚurlr2   ÚRuntimeErrorr8   rD   r@   r%   r*   r+   rB   rA   r   rC   rG   r   ÚloggerÚ_send_connection_initÚBaseExceptionr   ÚcloseÚ_max_streamsr?   Úlocal_settingsÚmax_concurrent_streamsr   Ú_max_streams_semaphoreÚrangeÚacquireÚget_next_available_stream_idrJ   r;   Ú
exceptionsÚNoAvailableStreamIDErrorrH   Ú_send_request_headersÚ_send_request_bodyÚ_receive_responseÚreturn_valuer   ÚHTTP2ConnectionByteStreamr9   Ú_response_closedÚ
isinstanceÚProtocolErrorrK   r   r   )
rN   r   ÚkwargsÚexcÚlocal_settings_max_streamsÚ_rS   ÚtracerZ   r"   s
             r   Úhandle_requestzHTTP2Connection.handle_requestS   s  € Ø×&Ò& w¤{Ô'9Ñ:Ô:ð 	õ
 ð%°´Ô0Bð %ð %Ø”lð%ð %ñô ð ð
 Ôð 	/ð 	/ØŒ{Õ2Ô9Õ;NÔ;SÐTÐTÐTØÐ#Ô# qÑ(Ð#Ô#Ø"&�”Ý1Ô8�”�å,Ñ.Ô.Ð.ð ð		/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð Œ_ð 	:ð 	:ØÔ-ð :ðØ'¨Ð1�FÝÐ5µv¸wÈÑOÔOð =ð =Ø2˜Ô2Ð<Ð<°VÐ<Ð<Ð<ð=ð =ð =ñ =ô =ð =ð =ð =ð =ð =ð =øøøð =ð =ð =ð =øøå$ð ð ð Ý+Ñ-Ô-ð %ð %ØŸ
š
™œ˜ð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %à�Iøøøøðøøøð
 .2�Ô*ð %&�Ô!ð ”NÔ1ÔHð +õ /8Ð8RÑ.SÔ.S�Ô+åÐ9¸DÔ<MÑMÑNÔNð :ð :�AØÔ/×7Ò7Ñ9Ô9Ð9Ð9ð/	:ð 	:ð 	:ñ 	:ô 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:øøøð 	:ð 	:ð 	:ð 	:ð2 	Ô#×+Ò+Ñ-Ô-Ð-ð	+Øœ×CÒCÑEÔEˆIØ&(ˆDŒL˜Ñ#Ð#øÝŒ}Ô5ð 	+ð 	+ð 	+Ø(,ˆDÔ%ØÐÔ 1Ñ$ÐÔÝ(Ñ*Ô*Ð*ð	+øøøð
.	Ø!(°yÐAÐAˆFÝÐ-­v°wÀÑGÔGð Qð QØ×*Ò*°7ÀiÐ*ÑPÔPÐPðQð Qð Qñ Qô Qð Qð Qð Qð Qð Qð Qøøøð Qð Qð Qð QåÐ*­F°G¸VÑDÔDð Nð NØ×'Ò'°À9Ð'ÑMÔMÐMðNð Nð Nñ Nô Nð Nð Nð Nð Nð Nð Nøøøð Nð Nð Nð NåØ*­F°G¸Vñô ð 7àØ"&×"8Ò"8Ø#¨yð #9ñ #ô #‘�˜ð '-¨gÐ%6�Ô"ð7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7õ ØØÝ1°$¸È9ÐUÑUÔUà$-Ø&*Ô&:Ø!*ðð ð		ñ 	ô 	ð 	øõ ð 	ð 	ð 	Ý#Ñ%Ô%ð ?ð ?Ø% yÐ1�ÝÐ,­f°g¸vÑFÔFð ?ð ?Ø×)Ò)°IÐ)Ñ>Ô>Ð>ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?ð?ð ?ð ?ñ ?ô ?ð ?ð ?ð ?ð ?ð ?ð ?øøøð ?ð ?ð ?ð ?õ
 ˜#�rœ}Ô:Ñ;Ô;ð .ð Ô.ð KÝ-¨dÔ.IÑJÔJÐJõ )¨Ñ-Ô-Ð-àˆIøøøøð-	øøøsk  ÁAB/Â/B3Â6B3ÃGÃ
DÃ%C?Ã3DÃ?D	ÄDÄD	ÄDÄ
GÄ
EÄEÄ#EÄ8EÅEÅEÅEÅEÅEÅA)GÇGÇGÇ0#H È:IÉM! É.JÊM! ÊJÊM! ÊJÊM! Ê4KËM! ËKËM! ËKË M! Ë:$L*ÌM! Ì*L.Ì.M! Ì1L.Ì2.M! Í!
P*Í+P%Í9OÎN8Î,OÎ8N<Î<OÎ?N<Ï OÏP%ÏO	ÏP%ÏO	ÏAP%Ð%P*ÚNonec           	     ó²  — t           j                             dt           j        j        j        dt           j        j        j        dt           j        j        j        di¬¦  «        | j        _        | j        j        t           j        j        j	        = | j         
                    ¦   «          | j                             d¦  «         |                      |¦  «         dS )z�
        The HTTP/2 connection requires some initial setup before we can start
        using individual request/response streams on it.
        Tr   éd   r0   )ÚclientÚinitial_valuesé   N)r;   ÚsettingsÚSettingsÚSettingCodesÚENABLE_PUSHÚMAX_CONCURRENT_STREAMSÚMAX_HEADER_LIST_SIZEr?   rf   ÚENABLE_CONNECT_PROTOCOLÚinitiate_connectionÚincrement_flow_control_windowÚ_write_outgoing_data)rN   r   s     r   rb   z%HTTP2Connection._send_connection_init¹   s¶   € õ )+¬×(<Ò(<Øõ ”Ô(Ô4°aå”Ô(Ô?ÀÝ”Ô(Ô=¸uðð )=ñ 
)
ô 
)
ˆŒÔ%ð ŒNÔ)ÝŒKÔ$Ô<ð
ð 	Œ×*Ò*Ñ,Ô,Ð,ØŒ×4Ò4°UÑ;Ô;Ð;Ø×!Ò! 'Ñ*Ô*Ð*Ð*Ð*r    rS   Úintc                ób  — t          |¦  «         }d„ |j        D ¦   «         d         }d|j        fd|fd|j        j        fd|j        j        fgd„ |j        D ¦   «         z   }| j                             |||¬¦  «         | j                             d	|¬
¦  «         |  	                    |¦  «         dS )z@
        Send the request headers to a given stream ID.
        c                óH   — g | ]\  }}|                      ¦   «         d k    ¯|‘Œ S )ó   hostr   r   s      r   ú
<listcomp>z9HTTP2Connection._send_request_headers.<locals>.<listcomp>ä   s.   € ÐKÐKÐK™4˜1˜a°a·g²g±i´iÀ7Ò6JÐ6J�QÐ6JÐ6JÐ6Jr    r   s   :methods
   :authoritys   :schemes   :pathc                ól   — g | ]1\  }}|                      ¦   «         d v¯|                      ¦   «         |f‘Œ2S ))r�   r   r   r   s      r   r�   z9HTTP2Connection._send_request_headers.<locals>.<listcomp>ë   sR   € ð 
ð 
ð 
á��1Ø�wŠw‰yŒyððð ð �WŠW‰YŒY˜ˆNðð ð r    )Ú
end_streamr�   rW   N)
r#   r"   Úmethodr_   ÚschemeÚtargetr?   Úsend_headersrŠ   r‹   )rN   r   rS   r’   Ú	authorityr"   s         r   rn   z%HTTP2Connection._send_request_headersÚ   sÝ   € õ *¨'Ñ2Ô2Ð2ˆ
ð LÐK 7¤?ÐKÑKÔKÈAÔNˆ	ð ˜œÐ(Ø˜IÐ&Ø˜œÔ+Ð,Ø�w”{Ô)Ð*ð	
ð

ð 
àœð
ñ 
ô 
ñ
ˆð 	Œ×#Ò# I¨wÀ:Ð#ÑNÔNÐNØŒ×4Ò4°UÀiÐ4ÑPÔPÐPØ×!Ò! 'Ñ*Ô*Ð*Ð*Ð*r    c                óØ   — t          |¦  «        sdS t          |j        t          j        ¦  «        sJ ‚|j        D ]}|                      |||¦  «         Œ|                      ||¦  «         dS )zP
        Iterate over the request body sending it to a given stream ID.
        N)r#   rt   r3   ÚtypingÚIterableÚ_send_stream_dataÚ_send_end_stream)rN   r   rS   Údatas       r   ro   z"HTTP2Connection._send_request_bodyù   s{   € õ   Ñ(Ô(ð 	ØˆFå˜'œ.­&¬/Ñ:Ô:Ð:Ð:Ð:Ø”Nð 	=ð 	=ˆDØ×"Ò" 7¨I°tÑ<Ô<Ð<Ð<Ø×Ò˜g yÑ1Ô1Ð1Ð1Ð1r    r�   Úbytesc                ó   — |r{|                       ||¦  «        }t          t          |¦  «        |¦  «        }|d|…         ||d…         }}| j                             ||¦  «         |                      |¦  «         |°ydS dS )zI
        Send a single chunk of data in one or more data frames.
        N)Ú_wait_for_outgoing_flowÚminÚlenr?   Ú	send_datar‹   )rN   r   rS   r�   Úmax_flowÚ
chunk_sizeÚchunks          r   r›   z!HTTP2Connection._send_stream_data  s›   € ð ð 	/Ø×3Ò3°G¸YÑGÔGˆHÝ�S ™YœY¨Ñ1Ô1ˆJØ˜{ 
˜{Ô+¨T°*°+°+Ô->�4ˆEØŒN×$Ò$ Y°Ñ6Ô6Ð6Ø×%Ò% gÑ.Ô.Ð.ð ð 	/ð 	/ð 	/ð 	/ð 	/r    c                ód   — | j                              |¦  «         |                      |¦  «         dS )z`
        Send an empty data frame on on a given stream ID with the END_STREAM flag set.
        N)r?   r’   r‹   )rN   r   rS   s      r   rœ   z HTTP2Connection._send_end_stream  s4   € ð 	Œ×!Ò! )Ñ,Ô,Ð,Ø×!Ò! 'Ñ*Ô*Ð*Ð*Ð*r    ú%tuple[int, list[tuple[bytes, bytes]]]c                óJ  — 	 |                       ||¦  «        }t          |t          j        j        ¦  «        rnŒ7d}g }|j        D ]\\  }}|dk    r%t          |                     dd¬¦  «        ¦  «        }Œ0|                     d¦  «        s| 	                    ||f¦  «         Œ]||fS )zT
        Return the response status code and headers for a given stream ID.
        TéÈ   s   :statusÚasciiÚignore)Úerrorsó   :)
Ú_receive_stream_eventrt   r;   ÚeventsÚResponseReceivedr"   rŒ   ÚdecodeÚ
startswithÚappend)rN   r   rS   ÚeventÚstatus_coder"   r   r   s           r   rp   z!HTTP2Connection._receive_response  sº   € ð	Ø×.Ò.¨w¸	ÑBÔBˆEÝ˜%¥¤Ô!;Ñ<Ô<ð Øð	ð
 ˆØˆØ”Mð 	'ð 	'‰DˆAˆqØ�JŠˆÝ! !§(¢(¨7¸8 (Ñ"DÔ"DÑEÔE��Ø—\’\ $Ñ'Ô'ð 'Ø—’  1˜vÑ&Ô&Ð&øà˜WÐ%Ð%r    útyping.Iterator[bytes]c              #  ó8  K  — 	 |                       ||¦  «        }t          |t          j        j        ¦  «        rA|j        }| j                             ||¦  «         |                      |¦  «         |j	        V — n!t          |t          j        j
        ¦  «        rdS Œ˜)z]
        Iterator that returns the bytes of the response body for a given stream ID.
        TN)r¯   rt   r;   r°   ÚDataReceivedÚflow_controlled_lengthr?   Úacknowledge_received_datar‹   r�   ÚStreamEnded)rN   r   rS   rµ   Úamounts        r   Ú_receive_response_bodyz&HTTP2Connection._receive_response_body0  s�   è è € ð	Ø×.Ò.¨w¸	ÑBÔBˆEÝ˜%¥¤Ô!7Ñ8Ô8ð ØÔ5�Ø”×8Ò8¸ÀÑKÔKÐKØ×)Ò)¨'Ñ2Ô2Ð2Ø”jÐ Ð Ð Ð Ý˜E¥2¤9Ô#8Ñ9Ô9ð Ø�ð	r    úKh2.events.ResponseReceived | h2.events.DataReceived | h2.events.StreamEndedc                ó6  — | j                              |¦  «        s0|                      ||¦  «         | j                              |¦  «        ¯0| j         |                              d¦  «        }t	          |t
          j        j        ¦  «        rt          |¦  «        ‚|S )zƒ
        Return the next available event for a given stream ID.

        Will read more data from the network if required.
        r   )	rJ   ÚgetÚ_receive_eventsÚpoprt   r;   r°   ÚStreamResetr   )rN   r   rS   rµ   s       r   r¯   z%HTTP2Connection._receive_stream_event@  s�   € ð ”,×"Ò" 9Ñ-Ô-ð 	5Ø× Ò  ¨)Ñ4Ô4Ð4ð ”,×"Ò" 9Ñ-Ô-ð 	5à”˜YÔ'×+Ò+¨AÑ.Ô.ˆÝ�e�RœYÔ2Ñ3Ô3ð 	-Ý% eÑ,Ô,Ð,Øˆr    ú
int | Nonec           	     ó¦  — | j         5  | j        �H| j        j        }|r&|r$||k    r| xj        dz  c_        t	          ¦   «         ‚t          | j        ¦  «        ‚|�| j                             |¦  «        �s0|                      |¦  «        }|D �]}t          |t          j        j        ¦  «        rKt          dt          |¦  «        5 }|                      |¦  «         ||_        ddd¦  «         n# 1 swxY w Y   Œmt          |t          j        j        t          j        j        t          j        j        t          j        j        f¦  «        r4|j        | j        v r%| j        |j                                      |¦  «         Œñt          |t          j        j        ¦  «        r|| _        �Œddd¦  «         n# 1 swxY w Y   |                      |¦  «         dS )zp
        Read some data from the network until we see one or more events
        for a given stream ID.
        Nr   Úreceive_remote_settings)rE   rK   Úlast_stream_idrB   r   r   rJ   rÁ   Ú_read_incoming_datart   r;   r°   ÚRemoteSettingsChangedr   ra   Ú_receive_remote_settings_changerq   r±   r¹   r¼   rÄ   rS   r´   ÚConnectionTerminatedr‹   )rN   r   rS   rÈ   r°   rµ   rz   s          r   rÂ   zHTTP2Connection._receive_eventsO  sE  € ð Œ_ð %	<ð %	<ØÔ*Ð6Ø!%Ô!<Ô!K�Øð 3 ð 3°IÀÒ4NÐ4NØÐ'Ô'¨1Ñ,Ð'Ô'Ý0Ñ2Ô2Ð2Ý)¨$Ô*EÑFÔFÐFð Ð ¨¬×(8Ò(8¸Ñ(CÔ(CÑ Ø×1Ò1°'Ñ:Ô:�Ø#ð <ñ <�EÝ! %­¬Ô)HÑIÔIð <Ý"Ø5µv¸wñô ð 7à"Ø ×@Ò@ÀÑGÔGÐGØ16˜EÔ.ð	7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7øõ $ØåœIÔ6ÝœIÔ2ÝœIÔ1ÝœIÔ1ð	ñô ð <ð !œ?¨d¬lÐ:Ð:Ø œL¨¬Ô9×@Ò@ÀÑGÔGÐGøå# E­2¬9Ô+IÑJÔJð <Ø6;˜Ô3ùðK%	<ð %	<ð %	<ñ %	<ô %	<ð %	<ð %	<ð %	<ð %	<ð %	<ð %	<øøøð %	<ð %	<ð %	<ð %	<ðN 	×!Ò! 'Ñ*Ô*Ð*Ð*Ð*s7   ˆB<F1ÃC-Ã!F1Ã-C1Ã1F1Ã4C1Ã5B0F1Æ1F5Æ8F5rµ   úh2.events.Eventc                óÔ  — |j                              t          j        j        j        ¦  «        }|r±t          |j        | j        j	        j
        ¦  «        }|r�|| j        k    r„|| j        k    r4| j                             ¦   «          | xj        dz  c_        || j        k    °4|| j        k     r<| j                             ¦   «          | xj        dz  c_        || j        k     °4d S d S d S d S d S )Nr   )Úchanged_settingsrÁ   r;   r‚   r„   r†   r¡   Ú	new_valuer?   rf   rg   re   rh   Úreleaserj   )rN   rµ   rg   Únew_max_streamss       r   rË   z/HTTP2Connection._receive_remote_settings_change  s  € Ø!&Ô!7×!;Ò!;ÝŒKÔ$Ô;ñ"
ô "
Ðð "ð 	+Ý!Ø&Ô0Ø”Ô-ÔDñô ˆOð ð + ?°dÔ6GÒ#GÐ#GØ%¨Ô(9Ò9Ð9ØÔ/×7Ò7Ñ9Ô9Ð9ØÐ%Ô%¨Ñ*Ð%Ô%ð &¨Ô(9Ò9Ð9ð &¨Ô(9Ò9Ð9ØÔ/×7Ò7Ñ9Ô9Ð9ØÐ%Ô%¨Ñ*Ð%Ô%ð &¨Ô(9Ò9Ð9Ð9Ð9ð	+ð 	+ð
+ð +Ð#GÐ#Gð :Ð9r    c                ó°  — | j                              ¦   «          | j        |= | j        5  | j        r| j        s|                      ¦   «          nq| j        t          j        k    r\| j        sUt          j	        | _        | j
        �"t          j        ¦   «         }|| j
        z   | _        | j        r|                      ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S ©N)rh   rÑ   rJ   rD   rK   rd   r@   r%   r*   r+   r:   ÚtimeÚ	monotonicrA   rH   )rN   rS   Únows      r   rs   z HTTP2Connection._response_closed�  s  € ØÔ#×+Ò+Ñ-Ô-Ð-ØŒL˜Ð#ØÔð 
	!ð 
	!ØÔ*ð 	!°4´<ð 	!Ø—
’
‘”��à”Õ 3Ô :Ò:Ð:À4Ä<Ð:Ý1Ô6�”ØÔ)Ð5Ýœ.Ñ*Ô*�CØ&)¨DÔ,BÑ&B�D”OØÔ,ð !Ø—J’J‘L”L�Lð
	!ð 
	!ð 
	!ñ 
	!ô 
	!ð 
	!ð 
	!ð 
	!ð 
	!ð 
	!ð 
	!ð 
	!øøøð 
	!ð 
	!ð 
	!ð 
	!ð 
	!ð 
	!s   ©BCÃCÃCc                óŒ   — | j                              ¦   «          t          j        | _        | j                             ¦   «          d S rÔ   )r?   Úclose_connectionr%   r,   r@   r9   rd   ©rN   s    r   rd   zHTTP2Connection.closeŸ  s=   € ð 	Œ×'Ò'Ñ)Ô)Ð)Ý)Ô0ˆŒØÔ×"Ò"Ñ$Ô$Ð$Ð$Ð$r    úlist[h2.events.Event]c                ój  — |j                              di ¦  «        }|                     dd ¦  «        }| j        �| j        ‚	 | j                             | j        |¦  «        }|dk    rt          d¦  «        ‚n"# t          $ r}|| _        d| _        |‚d }~ww xY w| j	         
                    |¦  «        }|S )NÚtimeoutÚreadr    zServer disconnectedT)r\   rÁ   rL   r9   rÞ   ÚREAD_NUM_BYTESr   Ú	ExceptionrI   r?   Úreceive_data)rN   r   ÚtimeoutsrÝ   r�   rw   r°   s          r   rÉ   z#HTTP2Connection._read_incoming_data¨  sÎ   € ØÔ%×)Ò)¨)°RÑ8Ô8ˆØ—,’,˜v tÑ,Ô,ˆàÔÐ+ØÔ&Ð&ð	ØÔ'×,Ò,¨TÔ-@À'ÑJÔJˆDØ�sŠ{ˆ{Ý)Ð*?Ñ@Ô@Ð@ð øåð 	ð 	ð 	ð $'ˆDÔ Ø%)ˆDÔ"ØˆIøøøøð	øøøð )-¬×(CÒ(CÀDÑ(IÔ(Iˆàˆs   Á5A7 Á7
BÂBÂBc                óv  — |j                              di ¦  «        }|                     dd ¦  «        }| j        5  | j                             ¦   «         }| j        �| j        ‚	 | j                             ||¦  «         n"# t          $ r}|| _        d| _	        |‚d }~ww xY w	 d d d ¦  «         d S # 1 swxY w Y   d S )NrÝ   ÚwriteT)
r\   rÁ   rF   r?   Údata_to_sendrM   r9   rä   rà   rI   )rN   r   râ   rÝ   rå   rw   s         r   r‹   z$HTTP2Connection._write_outgoing_dataÄ  s  € ØÔ%×)Ò)¨)°RÑ8Ô8ˆØ—,’,˜w¨Ñ-Ô-ˆàÔð 	ð 	Øœ>×6Ò6Ñ8Ô8ˆLàÔ$Ð0ØÔ+Ð+ðØÔ$×*Ò*¨<¸ÑAÔAÐAÐAøÝð ð ð ð ),�Ô%Ø)-�Ô&Ø�	øøøøðøøøð Bð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s5   ¹(B.Á"A>Á=B.Á>
BÂBÂBÂB.Â.B2Â5B2c                ó   — | j                              |¦  «        }| j         j        }t          ||¦  «        }|dk    rQ|                      |¦  «         | j                              |¦  «        }| j         j        }t          ||¦  «        }|dk    °Q|S )a  
        Returns the maximum allowable outgoing flow for a given stream.

        If the allowable flow is zero, then waits on the network until
        WindowUpdated frames have increased the flow rate.
        https://tools.ietf.org/html/rfc7540#section-6.9
        r   )r?   Úlocal_flow_control_windowÚmax_outbound_frame_sizer¡   rÂ   )rN   r   rS   Ú
local_flowÚmax_frame_sizeÚflows         r   r    z'HTTP2Connection._wait_for_outgoing_flowß  s�   € ð œ.×BÒBÀ9ÑMÔMˆ
Ø"œnÔDˆÝ�:˜~Ñ.Ô.ˆØ�aŠiˆiØ× Ò  Ñ)Ô)Ð)Øœ×AÒAÀ)ÑLÔLˆJØ!œ^ÔCˆNÝ�z >Ñ2Ô2ˆDð	 �aŠiˆið
 ˆr    r   c                ó   — || j         k    S rÔ   )r8   ©rN   r2   s     r   r^   z"HTTP2Connection.can_handle_requestó  s   € Ø˜œÒ%Ð%r    c                ó    — | j         t          j        k    o9| j         o1| j         o)| j        j        j        t          j	        j
        j        k     S rÔ   )r@   r%   r,   rI   rH   r?   Ústate_machineÚstater;   r<   ÚConnectionStaterÚ   s    r   Úis_availablezHTTP2Connection.is_availableö  sX   € àŒKÕ.Ô5Ò5ð ØÔ*Ð*ðàÔ-Ð-ðð ”Ô,Ô2Ý”=Ô0Ô7ò8ðð		
r    c                óP   — t          j        ¦   «         }| j        d uo
|| j        k    S rÔ   )rÕ   rÖ   rA   )rN   r×   s     r   Úhas_expiredzHTTP2Connection.has_expired  s(   € ÝŒnÑÔˆØŒ dÐ*ÐD¨s°T´_Ò/DÐDr    c                ó,   — | j         t          j        k    S rÔ   )r@   r%   r+   rÚ   s    r   Úis_idlezHTTP2Connection.is_idle  s   € ØŒ{Õ1Ô6Ò6Ð6r    c                ó,   — | j         t          j        k    S rÔ   )r@   r%   r,   rÚ   s    r   Ú	is_closedzHTTP2Connection.is_closed  s   € ØŒ{Õ1Ô8Ò8Ð8r    Ústrc                ó\   — t          | j        ¦  «        }|›d| j        j        › d| j        › �S )Nz
, HTTP/2, ú, Request Count: )rù   r8   r@   ÚnamerB   rí   s     r   ÚinfozHTTP2Connection.info  sD   € Ý�T”\Ñ"Ô"ˆàð 4ð 4 4¤;Ô#3ð 4ð 4Ø"Ô1ð4ð 4ð	
r    c           	     ó~   — | j         j        }t          | j        ¦  «        }d|› d|›d| j        j        › d| j        › d�	S )Nú<z [z, rû   z]>)Ú	__class__r'   rù   r8   r@   rü   rB   )rN   Ú
class_namer2   s      r   Ú__repr__zHTTP2Connection.__repr__  sc   € Ø”^Ô,ˆ
Ý�T”\Ñ"Ô"ˆð6�
ð 6ð 6˜fð 6ð 6¨$¬+Ô*:ð 6ð 6Ø"Ô1ð6ð 6ð 6ð	
r    c                ó   — | S rÔ   r-   rÚ   s    r   Ú	__enter__zHTTP2Connection.__enter__  s   € Øˆr    Úexc_typeútype[BaseException] | NoneÚ	exc_valueúBaseException | NoneÚ	tracebackútypes.TracebackType | Nonec                ó.   — |                       ¦   «          d S rÔ   )rd   )rN   r  r  r	  s       r   Ú__exit__zHTTP2Connection.__exit__   s   € ð 	�
Š
‰Œˆˆˆr    rÔ   )r2   r	   r3   r   r4   r5   )r   r
   r   r   )r   r
   r   r|   )r   r
   rS   rŒ   r   r|   )r   r
   rS   rŒ   r�   rž   r   r|   )r   r
   rS   rŒ   r   r¨   )r   r
   rS   rŒ   r   r·   )r   r
   rS   rŒ   r   r¿   )r   r
   rS   rÅ   r   r|   )rµ   rÍ   r   r|   )rS   rŒ   r   r|   ©r   r|   )r   r
   r   rÛ   )r   r
   rS   rŒ   r   rŒ   )r2   r	   r   r   )r   r   )r   rù   )r   r/   )NNN)r  r  r  r  r	  r
  r   r|   )"r'   r(   r)   rß   r;   r7   ÚH2Configurationr>   rO   r{   rb   rn   ro   r›   rœ   rp   r¾   r¯   rÂ   rË   rs   rd   rÉ   r‹   r    r^   rò   rô   rö   rø   rý   r  r  r  r-   r    r   r/   r/   *   si  € € € € € Ø€NØŒY×&Ò&ÀÐ&ÑFÔF€Fð *.ð	#7ð #7ð #7ð #7ð #7ðJdð dð dð dðL+ð +ð +ð +ðB+ð +ð +ð +ð>
2ð 
2ð 
2ð 
2ð/ð /ð /ð /ð+ð +ð +ð +ð&ð &ð &ð &ð*ð ð ð ð ð ð ð ð  9=ð.+ð .+ð .+ð .+ð .+ð`+ð +ð +ð +ð"!ð !ð !ð !ð%ð %ð %ð %ðð ð ð ð8ð ð ð ð6ð ð ð ð(&ð &ð &ð &ð	
ð 	
ð 	
ð 	
ðEð Eð Eð Eð7ð 7ð 7ð 7ð9ð 9ð 9ð 9ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ðð ð ð ð
 04Ø*.Ø04ð	ð ð ð ð ð ð r    r/   c                  ó&   — e Zd Zdd	„Zdd„Zdd„ZdS )rr   r<   r/   r   r
   rS   rŒ   r   r|   c                ó>   — || _         || _        || _        d| _        d S )NF)Ú_connectionÚ_requestÚ
_stream_idÚ_closed)rN   r<   r   rS   s       r   rO   z"HTTP2ConnectionByteStream.__init__*  s%   € ð &ˆÔØˆŒØ#ˆŒØˆŒˆˆr    r·   c              #  óŒ  K  — | j         | j        dœ}	 t          dt          | j         |¦  «        5  | j                             | j         | j        ¬¦  «        D ]}|V — Œ	 d d d ¦  «         d S # 1 swxY w Y   d S # t          $ rA}t          ¦   «         5  |                      ¦   «          d d d ¦  «         n# 1 swxY w Y   |‚d }~ww xY w)NrR   Úreceive_response_body)	r  r  r   ra   r  r¾   rc   r   rd   )rN   rv   r¦   rw   s       r   Ú__iter__z"HTTP2ConnectionByteStream.__iter__2  sp  è è € Ø!œ]¸¼ÐIÐIˆð	ÝÐ.µ¸¼ÀvÑNÔNð  ð  Ø!Ô-×DÒDØ œM°T´_ð Eñ ô ð  ð  �Eð  �K�K�K�Kð ð ð  ð  ñ  ô  ð  ð  ð  ð  ð  ð  ð  øøøð  ð  ð  ð  ð  ð  øõ
 ð 	ð 	ð 	õ $Ñ%Ô%ð ð Ø—
’
‘”�ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð àˆIøøøøð	øøøs^   “A8 ¯.A+ÁA8 Á+A/Á/A8 Á2A/Á3A8 Á8
CÂB>ÂB1Â%B>Â1B5	Â5B>Â8B5	Â9B>Â>Cc                óâ   — | j         sgd| _         d| j        i}t          dt          | j        |¦  «        5  | j                             | j        ¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S d S )NTrS   r]   rW   )r  r  r   ra   r  r  rs   )rN   rv   s     r   rd   zHTTP2ConnectionByteStream.closeB  s×   € ØŒ|ð 	MØˆDŒLØ! 4¤?Ð3ˆFÝÐ(­&°$´-ÀÑHÔHð Mð MØÔ ×1Ò1¸D¼OÐ1ÑLÔLÐLðMð Mð Mñ Mô Mð Mð Mð Mð Mð Mð Mð Møøøð Mð Mð Mð Mð Mð Mð	Mð 	Ms   ´!A"Á"A&Á)A&N)r<   r/   r   r
   rS   rŒ   r   r|   )r   r·   r  )r'   r(   r)   rO   r  rd   r-   r    r   rr   rr   )  sV   € € € € € ðð ð ð ðð ð ð ð Mð Mð Mð Mð Mð Mr    rr   )r   r
   r   r   )&Ú
__future__r   ÚenumÚloggingrÕ   Útypesr™   Ú	h2.configr;   Úh2.connectionÚ	h2.eventsÚh2.exceptionsÚh2.settingsÚ_backends.baser   Ú_exceptionsr   r   r   Ú_modelsr	   r
   r   Ú_synchronizationr   r   r   Ú_tracer   Ú
interfacesr   Ú	getLoggerra   r#   ÚIntEnumr%   r/   rr   r-   r    r   ú<module>r*     sé  ðØ "Ð "Ð "Ð "Ð "Ð "à €€€Ø €€€Ø €€€Ø €€€Ø €€€à Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð à *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð ð ð ð ð ð ð
 0Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +à	ˆÔ	Ð+Ñ	,Ô	,€ðð ð ð ðð ð ð ð ˜$œ,ñ ô ð ð|ð |ð |ð |ð |Ð)ñ |ô |ð |ð~Mð Mð Mð Mð Mñ Mô Mð Mð Mð Mr    