§
    ¨öÉgi[  ã                   óŠ  — d Z ddlZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZmZ erddlmZ d„  ed	¦  «        D ¦   «         Z G d
„ d¦  «        Z G d„ d¦  «        ZdZdZdZdZdZeZdZdZdZdZdZ dZ!dZ" G d„ de¦  «        Z# G d„ de¦  «        Z$e$j%        e$j&        e$j'        fZ(dZ)dZ*dZ+dZ,dZ-d Z.d!Z/d!Z0 ej1        d"d¦  «        Z2 G d#„ d$e3¦  «        Z4 G d%„ d&e¦  «        Z5 G d'„ d(e¦  «        Z6 G d)„ d*e¦  «        Z7d+e8d,e9d-e8fd.„Z: G d/„ d0¦  «        Z; G d1„ d2¦  «        Z< G d3„ d4¦  «        Z= G d5„ d6¦  «        Z>dS )7zY
wsproto/frame_protocol
~~~~~~~~~~~~~~~~~~~~~~

WebSocket frame protocol implementation.
é    N)ÚgetincrementaldecoderÚIncrementalDecoder)ÚIntEnum)Ú	GeneratorÚListÚ
NamedTupleÚOptionalÚTupleÚTYPE_CHECKINGÚUnioné   )Ú	Extensionc                 ó`   ‡— g | ]*Št          ˆfd „t          d¦  «        D ¦   «         ¦  «        ‘Œ+S )c              3   ó"   •K  — | ]	}|‰z  V — Œ
d S ©N© )Ú.0ÚaÚbs     €úb/var/www/html/nodeJS/PythonScripts/venv3.11/lib/python3.11/site-packages/wsproto/frame_protocol.pyú	<genexpr>z<listcomp>.<genexpr>   s'   øè è € Ð.Ð.˜a�A˜‘EÐ.Ð.Ð.Ð.Ð.Ð.ó    é   )ÚbytesÚrange)r   r   s    @r   ú
<listcomp>r      s<   ø€ ÐCÐCÐC°1�eÐ.Ð.Ð.Ð.¥5¨¡:¤:Ð.Ñ.Ô.Ñ.Ô.ÐCÐCÐCr   r   c                   ó.   — e Zd Zdeddfd„Zdedefd„ZdS )ÚXorMaskerSimpleÚmasking_keyÚreturnNc                 ó   — || _         d S r   )Ú_masking_key)Úselfr   s     r   Ú__init__zXorMaskerSimple.__init__   s   € Ø'ˆÔÐÐr   Údatac                 óþ  — |rút          |¦  «        }d„ | j        D ¦   «         \  }}}}|d d d…                              |¦  «        |d d d…<   |dd d…                              |¦  «        |dd d…<   |dd d…                              |¦  «        |dd d…<   |dd d…                              |¦  «        |dd d…<   t          |¦  «        dz  }| j        |d …         | j        d |…         z   | _        t	          |¦  «        S |S )Nc              3   ó0   K  — | ]}t           |         V — Œd S r   )Ú
_XOR_TABLE)r   Úns     r   r   z*XorMaskerSimple.process.<locals>.<genexpr>   s&   è è € ÐCÐC¨A�* Qœ-ÐCÐCÐCÐCÐCÐCr   é   r   é   é   )Ú	bytearrayr"   Ú	translateÚlenr   )r#   r%   Ú
data_arrayr   r   ÚcÚdÚkey_rotations           r   ÚprocesszXorMaskerSimple.process   s#  € Øð 	%Ý" 4™œˆJØCÐC°Ô1BÐCÑCÔC‰JˆAˆq�!�QØ(¨¨¨1¨œo×7Ò7¸Ñ:Ô:ˆJ�s�s˜�s‰OØ)¨!¨$¨Q¨$Ô/×9Ò9¸!Ñ<Ô<ˆJ�q�t˜!�tÑØ)¨!¨$¨Q¨$Ô/×9Ò9¸!Ñ<Ô<ˆJ�q�t˜!�tÑØ)¨!¨$¨Q¨$Ô/×9Ò9¸!Ñ<Ô<ˆJ�q�t˜!�tÑõ ˜t™9œ9 q™=ˆLàÔ! , - -Ô0°4Ô3DÀ]ÀlÀ]Ô3SÑSð Ôõ ˜Ñ$Ô$Ð$Øˆr   )Ú__name__Ú
__module__Ú__qualname__r   r$   r4   r   r   r   r   r      sX   € € € € € ð( Eð (¨dð (ð (ð (ð (ð˜Eð  eð ð ð ð ð ð r   r   c                   ó   — e Zd Zdedefd„ZdS )ÚXorMaskerNullr%   r    c                 ó   — |S r   r   ©r#   r%   s     r   r4   zXorMaskerNull.process.   s   € Øˆr   N)r5   r6   r7   r   r4   r   r   r   r9   r9   -   s6   € € € € € ð˜Eð  eð ð ð ð ð ð r   r9   é~   é   é}   iÿÿ  l   ÿÿÿÿ é€   é@   é    é   é   c                   ó6   — e Zd ZdZdZdZdZdZdZdZ	de
fd	„Zd
S )ÚOpcodez7
    RFC 6455, Section 5.2 - Base Framing Protocol
    r   r   r+   é   é	   é
   r    c                 ó&   — t          | dz  ¦  «        S )NrF   )Úbool©r#   s    r   Ú	iscontrolzOpcode.iscontrol_   s   € Ý�D˜4‘KÑ Ô Ð r   N)r5   r6   r7   Ú__doc__ÚCONTINUATIONÚTEXTÚBINARYÚCLOSEÚPINGÚPONGrJ   rL   r   r   r   rE   rE   H   sc   € € € € € ðð ð
 €Lð €Dð €Fð €Eð €Dð €Dð!˜4ð !ð !ð !ð !ð !ð !r   rE   c                   óJ   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdS )ÚCloseReasonz8
    RFC 6455, Section 7.4.1 - Defined Status Codes
    éè  ié  iê  ië  ií  iî  iï  ið  iñ  iò  ió  iô  iõ  i÷  N)r5   r6   r7   rM   ÚNORMAL_CLOSUREÚ
GOING_AWAYÚPROTOCOL_ERRORÚUNSUPPORTED_DATAÚNO_STATUS_RCVDÚABNORMAL_CLOSUREÚINVALID_FRAME_PAYLOAD_DATAÚPOLICY_VIOLATIONÚMESSAGE_TOO_BIGÚMANDATORY_EXTÚINTERNAL_ERRORÚSERVICE_RESTARTÚTRY_AGAIN_LATERÚTLS_HANDSHAKE_FAILEDr   r   r   rU   rU   c   s�   € € € € € ðð ð €Nð €Jð €Nð Ðð €Nð Ðð "&Ðð Ðð
 €Oð €Mð
 €Nð €Oð €Oð  ÐÐÐr   rU   rV   i·  i¸  iŸ  i   i‡  z!Ic                   ó:   ‡ — e Zd Zej        fdededdfˆ fd„Zˆ xZS )ÚParseFailedÚmsgÚcoder    Nc                 óX   •— t          ¦   «                              |¦  «         || _        d S r   )Úsuperr$   rh   )r#   rg   rh   Ú	__class__s      €r   r$   zParseFailed.__init__Ñ   s(   ø€ õ 	‰Œ×Ò˜ÑÔÐØˆŒ	ˆ	ˆ	r   )r5   r6   r7   rU   rY   Ústrr$   Ú__classcell__)rk   s   @r   rf   rf   Ð   s`   ø€ € € € € à,7Ô,Fðð ØðØ)ðà	ðð ð ð ð ð ð ð ð ð r   rf   c                   ó.   — e Zd ZU eed<   eed<   eed<   dS )ÚRsvBitsÚrsv1Úrsv2Úrsv3N)r5   r6   r7   rJ   Ú__annotations__r   r   r   ro   ro   Ø   s+   € € € € € € Ø
€J€J�JØ
€J€J�JØ
€J€J�J€J€Jr   ro   c                   óN   — e Zd ZU eed<   eed<   eed<   eed<   ee	         ed<   dS )ÚHeaderÚfinÚrsvÚopcodeÚpayload_lenr   N)
r5   r6   r7   rJ   rs   ro   rE   Úintr	   r   r   r   r   ru   ru   Þ   sI   € € € € € € Ø	€I€I�IØ	€L€L�LØ€N€N�NØÐÐÑØ˜%”Ð Ð Ñ Ð Ð r   ru   c                   óZ   — e Zd ZU eed<   eeeee	ef         f         ed<   e
ed<   e
ed<   dS )ÚFramerx   ÚpayloadÚframe_finishedÚmessage_finishedN)r5   r6   r7   rE   rs   r   r   rl   r
   rz   rJ   r   r   r   r|   r|   æ   sS   € € € € € € Ø€N€N�NØ�5˜#˜u S¨# XœÐ.Ô/Ð/Ð/Ñ/ØÐÐÑØÐÐÑÐÐr   r|   r%   Únbytesr    c                 ó˜   — t          | ¦  «        |k    r| S | d |…         } |                      dd¬¦  «                             d¦  «        } | S )Núutf-8Úignore)Úerrors)r/   ÚdecodeÚencode)r%   r€   s     r   Ú_truncate_utf8r‡   í   sQ   € Ý
ˆ4�y„y�FÒÐØˆð ���Œ=€Dð �;Š;�w xˆ;Ñ0Ô0×7Ò7¸Ñ@Ô@€DØ€Kr   c                   ó„   — e Zd Zddee         ddfd„Zdeddfd„Zdedefd„Zdedee         fd	„Z	dd
„Z
dd„Zdefd„ZdS )ÚBufferNÚinitial_bytesr    c                 ól   — t          ¦   «         | _        d| _        |r|                      |¦  «         d S d S ©Nr   )r-   ÚbufferÚ
bytes_usedÚfeed)r#   rŠ   s     r   r$   zBuffer.__init__þ   s>   € Ý‘k”kˆŒØˆŒØð 	%Ø�IŠI�mÑ$Ô$Ð$Ð$Ð$ð	%ð 	%r   Ú	new_bytesc                 ó&   — | xj         |z  c_         d S r   )r�   )r#   r�   s     r   r�   zBuffer.feed  s   € ØˆŒ�yÑ ˆŒˆˆr   r€   c                 ó˜   — |st          ¦   «         S | j        | j        | j        |z   …         }| xj        t          |¦  «        z  c_        |S r   )r-   r�   rŽ   r/   )r#   r€   r%   s      r   Úconsume_at_mostzBuffer.consume_at_most  sI   € Øð 	Ý‘;”;ÐàŒ{˜4œ?¨T¬_¸vÑ-EÐEÔFˆØˆŒ�3˜t™9œ9Ñ$ˆŒØˆr   c                 óp   — t          | j        ¦  «        | j        z
  |k     rd S |                      |¦  «        S r   )r/   r�   rŽ   r“   )r#   r€   s     r   Úconsume_exactlyzBuffer.consume_exactly  s7   € ÝˆtŒ{ÑÔ˜dœoÑ-°Ò6Ð6Ø�4à×#Ò# FÑ+Ô+Ð+r   c                 ó2   — | j         d | j        …= d| _        d S rŒ   )r�   rŽ   rK   s    r   ÚcommitzBuffer.commit  s   € àŒKÐ)˜$œ/Ð)Ð*ØˆŒˆˆr   c                 ó   — d| _         d S rŒ   )rŽ   rK   s    r   ÚrollbackzBuffer.rollback  s   € ØˆŒˆˆr   c                 ó*   — t          | j        ¦  «        S r   )r/   r�   rK   s    r   Ú__len__zBuffer.__len__  s   € Ý�4”;ÑÔÐr   r   ©r    N)r5   r6   r7   r	   r   r$   r�   rz   r“   r•   r—   r™   r›   r   r   r   r‰   r‰   ý   sì   € € € € € ð%ð % h¨u¤oð %Àð %ð %ð %ð %ð!˜eð !¨ð !ð !ð !ð !ð cð ¨eð ð ð ð ð, cð ,¨h°u¬oð ,ð ,ð ,ð ,ðð ð ð ð
ð ð ð ð ˜ð  ð  ð  ð  ð  ð  r   r‰   c                   ó&   — e Zd Zdd„Zdedefd„ZdS )ÚMessageDecoderr    Nc                 ó"   — d | _         d | _        d S r   )rx   ÚdecoderrK   s    r   r$   zMessageDecoder.__init__"  s   € Ø(,ˆŒØ59ˆŒˆˆr   Úframec                 óè  — |j                              ¦   «         rJ ‚| j         €/|j         t          j        u rt	          d¦  «        ‚|j         | _         n*|j         t          j        urt	          d|j         z  ¦  «        ‚|j         t          j        u r t          d¦  «        ¦   «         | _        |j        o|j	        }| j        €|j
        }n~t          |j
        t          t          f¦  «        sJ ‚	 | j                             |j
        |¦  «        }n9# t          $ r,}t	          t!          |¦  «        t"          j        ¦  «        ‚d }~ww xY wt'          | j         ||j        |¦  «        }|rd | _         d | _        |S )Nzunexpected CONTINUATIONzexpected CONTINUATION, got %rr‚   )rx   rL   rE   rN   rf   rO   r   r    r~   r   r}   Ú
isinstancer   r-   r…   ÚUnicodeDecodeErrorrl   rU   r]   r|   )r#   r¡   Úfinishedr%   Úexcs        r   Úprocess_framezMessageDecoder.process_frame&  sk  € Ø”<×)Ò)Ñ+Ô+Ð+Ð+Ð+àŒ;ÐØŒ|�vÔ2Ð2Ð2Ý!Ð";Ñ<Ô<Ð<Øœ,ˆDŒKˆKØŒ\¥Ô!4Ð4Ð4ÝÐ=ÀÄÑLÑMÔMÐMàŒ<�6œ;Ð&Ð&Ø9Õ0°Ñ9Ô9Ñ;Ô;ˆDŒLàÔ'ÐB¨EÔ,BˆàŒ<ÐØ”=ˆDˆDå˜eœm­eµYÐ-?Ñ@Ô@Ð@Ð@Ð@ðTØ”|×*Ò*¨5¬=¸(ÑCÔC��øÝ%ð Tð Tð TÝ!¥# c¡(¤(­KÔ,RÑSÔSÐSøøøøðTøøøõ �d”k 4¨Ô)=¸xÑHÔHˆàð 	 ØˆDŒKØˆDŒLàˆs   Ã, D Ä
EÄ'D>Ä>Erœ   )r5   r6   r7   r$   r|   r§   r   r   r   rž   rž   !  sJ   € € € € € ð:ð :ð :ð :ð 5ð ¨Uð ð ð ð ð ð r   rž   c                   óª   — e Zd Z	 ddedeed                  ddfd„Zdeddfd„Zdee	         fd	„Z
defd
„Zdededee         fd„Zdedededdfd„ZdS )ÚFrameDecoderNÚclientÚ
extensionsr   r    c                 ó’   — || _         |pg | _        t          ¦   «         | _        d | _        d | _        d | _        d| _        d| _        d S rŒ   )	rª   r«   r‰   r�   ÚheaderÚeffective_opcodeÚmaskerÚpayload_requiredÚpayload_consumed©r#   rª   r«   s      r   r$   zFrameDecoder.__init__H  sN   € ð ˆŒØ$Ð*¨ˆŒå‘h”hˆŒà(,ˆŒØ26ˆÔØCGˆŒØ !ˆÔØ !ˆÔÐÐr   r%   c                 ó:   — | j                              |¦  «         d S r   )r�   r�   r;   s     r   Úreceive_byteszFrameDecoder.receive_bytesV  s   € ØŒ×Ò˜ÑÔÐÐÐr   c                 óú  — | j         s|                      ¦   «         sd S | j         €J ‚| j        €J ‚| j        €J ‚t	          | j        ¦  «        | j        k     rd S | j         j        | j        z
  }| j         	                    |¦  «        }|s| j         j        dk    rd S | j         
                    ¦   «          | xj        t	          |¦  «        z  c_        | j        | j         j        k    }| j                             |¦  «        }| j        D ]?}|                     | |¦  «        }t          |t          ¦  «        rt!          d|¦  «        ‚|}Œ@|rit#          ¦   «         }| j        D ]N}|                     | | j         j        ¦  «        }t          |t          ¦  «        rt!          d|¦  «        ‚|�||z  }ŒO||z  }t)          | j        ||| j         j        ¦  «        }|rd | _         d | _        d | _        nt*          j        | _        |S )Nr   úerror in extension)r­   Úparse_headerr¯   r®   r/   r�   r°   ry   r±   r“   r—   r4   r«   Úframe_inbound_payload_datar£   rU   rf   r-   Úframe_inbound_completerv   r|   rE   rN   )	r#   Úpayload_remainingr}   r¥   Ú	extensionÚpayload_ÚfinalÚresultr¡   s	            r   Úprocess_bufferzFrameDecoder.process_bufferY  s  € ØŒ{ð 	Ø×$Ò$Ñ&Ô&ð Ø�tàŒ{Ð&Ð&Ð&ØŒ{Ð&Ð&Ð&ØÔ$Ð0Ð0Ð0åˆtŒ{ÑÔ˜dÔ3Ò3Ð3Ø�4à œKÔ3°dÔ6KÑKÐØ”+×-Ò-Ð.?Ñ@Ô@ˆØð 	˜4œ;Ô2°QÒ6Ð6Ø�4ØŒ×ÒÑÔÐàÐÔ¥ W¡¤Ñ-ÐÔØÔ(¨D¬KÔ,CÒCˆà”+×%Ò% gÑ.Ô.ˆàœð 	ð 	ˆIØ ×;Ò;¸DÀ'ÑJÔJˆHÝ˜(¥KÑ0Ô0ð BÝ!Ð"6¸ÑAÔAÐAØˆGˆGàð 	Ý‘K”KˆEØ!œ_ð $ð $�	Ø"×9Ò9¸$ÀÄÄÑPÔP�Ý˜f¥kÑ2Ô2ð DÝ%Ð&:¸FÑCÔCÐCØÐ%Ø˜V‘O�EøØ�uÑˆGå�dÔ+¨W°hÀÄÄÑPÔPˆàð 	8ØˆDŒKØ$(ˆDÔ!ØˆDŒKˆKå$*Ô$7ˆDÔ!àˆr   c                 ó<  — | j                              d¦  «        }|€| j                              ¦   «          dS t          |d         t          z  ¦  «        }t          t          |d         t          z  ¦  «        t          |d         t          z  ¦  «        t          |d         t          z  ¦  «        ¦  «        }|d         t          z  }	 t          |¦  «        }n!# t          $ r t          d|d›�¦  «        ‚w xY w|                     ¦   «         r|st          d¦  «        ‚t          |d         t          z  ¦  «        }|d         t          z  }|                      ||¦  «        }|€| j                              ¦   «          dS |                      |||¦  «         |r| j        rt          d¦  «        ‚|s| j        st          d	¦  «        ‚|rL| j                              d
¦  «        }|€| j                              ¦   «          dS t'          |¦  «        | _        nt+          ¦   «         | _        | j                              ¦   «          t/          ||||d ¦  «        | _        | j        j        | _        | j        j                             ¦   «         r|| _        nd| _        d| _        dS )Nr+   Fr   zInvalid opcode z#xz)Invalid attempt to fragment control framer   z'client received unexpected masked framez)server received unexpected unmasked framer*   T)r�   r•   r™   rJ   ÚFIN_MASKro   Ú	RSV1_MASKÚ	RSV2_MASKÚ	RSV3_MASKÚOPCODE_MASKrE   Ú
ValueErrorrf   rL   Ú	MASK_MASKÚPAYLOAD_LEN_MASKÚparse_extended_payload_lengthÚextension_processingrª   r   r¯   r9   r—   ru   r­   rx   r®   r°   r±   )	r#   r%   rv   rw   rx   Úhas_maskÚpayload_len_shortry   r   s	            r   r·   zFrameDecoder.parse_header‹  s›  € ØŒ{×*Ò*¨1Ñ-Ô-ˆØˆ<ØŒK× Ò Ñ"Ô"Ð"Ø�5å�4˜”7�XÑ%Ñ&Ô&ˆÝÝ��a”�9Ñ$Ñ%Ô%Ý��a”�9Ñ$Ñ%Ô%Ý��a”�9Ñ$Ñ%Ô%ñ
ô 
ˆð
 �a”�;Ñ&ˆð	=Ý˜F‘^”^ˆFˆFøÝð 	=ð 	=ð 	=ÝÐ;°Ð;Ð;Ð;Ñ<Ô<Ð<ð	=øøøð ×ÒÑÔð 	K cð 	KÝÐIÑJÔJÐJå˜˜Qœ¥)Ñ+Ñ,Ô,ˆØ  œGÕ&6Ñ6ÐØ×8Ò8¸ÐARÑSÔSˆØÐØŒK× Ò Ñ"Ô"Ð"Ø�5à×!Ò! &¨#¨{Ñ;Ô;Ð;àð 	I˜œð 	IÝÐGÑHÔHÐHØð 	K ¤ð 	KÝÐIÑJÔJÐJØð 	*Øœ+×5Ò5°aÑ8Ô8ˆKØÐ"Ø”×$Ò$Ñ&Ô&Ð&Ø�uÝ)¨+Ñ6Ô6ˆDŒKˆKå'™/œ/ˆDŒKàŒ×ÒÑÔÐÝ˜S # v¨{¸DÑAÔAˆŒØ $¤Ô 2ˆÔØŒ;Ô×'Ò'Ñ)Ô)ð 	&Ø$/ˆDÔ!Ð!à$%ˆDÔ!Ø !ˆÔØˆts   ÃC ÃC6rx   ry   c                 óô  — |                      ¦   «         r|t          k    rt          d¦  «        ‚|t          k    rP| j                             d¦  «        }|€d S t          j        d|¦  «        \  }|t          k    rt          d¦  «        ‚nn|t          k    rc| j                             d¦  «        }|€d S t          j        d|¦  «        \  }|t          k    rt          d¦  «        ‚|dz	  rt          d	¦  «        ‚|S )
Nz$Control frame with payload len > 125r+   ú!Hz6Payload length used 2 bytes when 1 would have sufficedrF   ú!Qz6Payload length used 8 bytes when 2 would have sufficedé?   z'8-byte payload length with non-zero MSB)
rL   ÚMAX_PAYLOAD_NORMALrf   ÚPAYLOAD_LENGTH_TWO_BYTEr�   r•   ÚstructÚunpackÚPAYLOAD_LENGTH_EIGHT_BYTEÚMAX_PAYLOAD_TWO_BYTE)r#   rx   ry   r%   s       r   rÉ   z*FrameDecoder.parse_extended_payload_lengthÀ  s  € ð ×ÒÑÔð 	F +Õ0BÒ"BÐ"BÝÐDÑEÔEÐEØÕ1Ò1Ð1Ø”;×.Ò.¨qÑ1Ô1ˆDØˆ|Ø�tÝ#œ]¨4°Ñ6Ô6‰Nˆ[ØÕ0Ò0Ð0Ý!ØLñô ð ð 1ð Õ5Ò5Ð5Ø”;×.Ò.¨qÑ1Ô1ˆDØˆ|Ø�tÝ#œ]¨4°Ñ6Ô6‰Nˆ[ØÕ2Ò2Ð2Ý!ØLñô ð ð ˜bÑ ð Mõ "Ð"KÑLÔLÐLàÐr   rw   c                 ó&  — g d¢}| j         D ][}|                     | |||¦  «        }t          |t          ¦  «        rt	          d|¦  «        ‚t          |¦  «        D ]\  }}|rd||<   ŒŒ\t          ||¦  «        D ]\  }	}
|
r|	st	          d¦  «        ‚Œd S )N)FFFr¶   TzReserved bit set unexpectedly)r«   Úframe_inbound_headerr£   rU   rf   Ú	enumerateÚzip)r#   rx   rw   ry   Úrsv_usedr»   r¾   ÚbitÚusedÚexpectedÚfounds              r   rÊ   z!FrameDecoder.extension_processingÞ  sÝ   € ð )Ð(Ð(ˆØœð 	)ð 	)ˆIØ×3Ò3°D¸&À#À{ÑSÔSˆFÝ˜&¥+Ñ.Ô.ð @Ý!Ð"6¸Ñ?Ô?Ð?Ý& vÑ.Ô.ð )ð )‘	��TØð )Ø$(�H˜S‘Møð)õ  # 8¨SÑ1Ô1ð 	Cð 	C‰OˆH�eØð C˜Xð CÝ!Ð"AÑBÔBÐBøð	Cð 	Cr   r   )r5   r6   r7   rJ   r	   r   r$   r   r´   r|   r¿   r·   rE   rz   rÉ   ro   rÊ   r   r   r   r©   r©   G  s  € € € € € àFJð"ð "Øð"Ø(0°°kÔ1BÔ(Cð"à	ð"ð "ð "ð "ð %ð ¨Dð ð ð ð ð0 ¨¤ð 0ð 0ð 0ð 0ðd3˜dð 3ð 3ð 3ð 3ðjØðØ+.ðà	�#Œðð ð ð ð<CØðCØ#*ðCØ9<ðCà	ðCð Cð Cð Cð Cð Cr   r©   c            	       óF  — e Zd Zdeded         ddfd„Zdedefd„Zdee	e         ddf         fd	„Z
d
eddfd„Zdeeddf         fd„Zdde	e         de	e         defd„Zddedefd„Zddedefd„Z	 ddeeeef         dedefd„Zdedededefd„Z	 ddedededefd„ZdS )ÚFrameProtocolrª   r«   r   r    Nc                 óÚ   — || _         d„ |D ¦   «         | _        t          | j         | j        ¦  «        | _        t	          ¦   «         | _        |                      ¦   «         | _        d | _        d S )Nc                 ó:   — g | ]}|                      ¦   «         ¯|‘ŒS r   ©Úenabled©r   Úexts     r   r   z*FrameProtocol.__init__.<locals>.<listcomp>ñ  s%   € ÐFÐFÐF 3¸¿º¹¼ÐF˜3ÐFÐFÐFr   )	rª   r«   r©   Ú_frame_decoderrž   Ú_message_decoderÚ_parse_more_genÚ_parse_moreÚ_outbound_opcoder²   s      r   r$   zFrameProtocol.__init__ï  sf   € ØˆŒØFÐF¨*ÐFÑFÔFˆŒõ +¨4¬;¸¼ÑHÔHˆÔÝ .Ñ 0Ô 0ˆÔØ×/Ò/Ñ1Ô1ˆÔà26ˆÔÐÐr   r¡   c                 ó  — |j         }t          |t          t          f¦  «        sJ ‚|st          j        df}�n-t          |¦  «        dk    rt          d¦  «        ‚t          j	        d|d d…         ¦  «        \  }|t          k     s|t          k    rt          d¦  «        ‚	 t	          |¦  «        }n# t          $ r Y nw xY w|t          v rt          d¦  «        ‚t          |t          ¦  «        s|t          k    rt          d¦  «        ‚	 |dd …                              d	¦  «        }n<# t           $ r/}t          d
t#          |¦  «        z   t          j        ¦  «        ‚d }~ww xY w||f}t'          |j        ||j        |j        ¦  «        S )NÚ r   zCLOSE with 1 byte payloadrÎ   r+   zCLOSE with invalid codez#remote CLOSE with local-only reasonz CLOSE with unknown reserved coder‚   zError decoding CLOSE reason: )r}   r£   r   r-   rU   r[   r/   rf   rÓ   rÔ   ÚMIN_CLOSE_REASONÚMAX_CLOSE_REASONrÆ   ÚLOCAL_ONLY_CLOSE_REASONSÚMAX_PROTOCOL_CLOSE_REASONr…   r¤   rl   r]   r|   rx   r~   r   )r#   r¡   r%   rh   Úreasonr¦   s         r   Ú_process_closezFrameProtocol._process_closeú  s¤  € ØŒ}ˆÝ˜$¥­	Ð 2Ñ3Ô3Ð3Ð3Ð3àð 	"õ  Ô.°Ð3ˆD‰DÝ�‰YŒY˜!Š^ˆ^ÝÐ9Ñ:Ô:Ð:å”m D¨$¨r°¨r¬(Ñ3Ô3‰GˆTØÕ&Ò&Ð&¨$Õ1AÒ*AÐ*AÝ!Ð";Ñ<Ô<Ð<ðÝ" 4Ñ(Ô(��øÝð ð ð Ø�ðøøøàÕ/Ð/Ð/Ý!Ð"GÑHÔHÐHÝ˜d¥KÑ0Ô0ð F°TÕ=VÒ5VÐ5VÝ!Ð"DÑEÔEÐEðØ˜a˜b˜bœŸš¨Ñ1Ô1��øÝ%ð ð ð Ý!Ø3µc¸#±h´hÑ>ÝÔ:ñô ð øøøøðøøøð
 ˜&�>ˆDå�U”\ 4¨Ô)=¸uÔ?UÑVÔVÐVs*   ÂB/ Â/
B<Â;B<ÄD% Ä%
EÄ/*EÅEc              #   óD  K  — d„ | j         D ¦   «         | _         d}|sƒ| j                             ¦   «         }|�`|j                             ¦   «         s| j                             |¦  «        }n,|j        t          j        k    r|  	                    |¦  «        }d}|V — |¯�d S d S )Nc                 ó:   — g | ]}|                      ¦   «         ¯|‘ŒS r   rä   ræ   s     r   r   z1FrameProtocol._parse_more_gen.<locals>.<listcomp>!  s%   € ÐKÐKÐK 3¸S¿[º[¹]¼]ÐK˜3ÐKÐKÐKr   FT)
r«   rè   r¿   rx   rL   ré   r§   rE   rQ   rô   )r#   Úclosedr¡   s      r   rê   zFrameProtocol._parse_more_gen  sÃ   è è € ð LÐK¨$¬/ÐKÑKÔKˆŒØˆàð 
	ØÔ'×6Ò6Ñ8Ô8ˆEàÐ Ø”|×-Ò-Ñ/Ô/ð "Ø Ô1×?Ò?ÀÑFÔF�E�EØ”\¥V¤\Ò1Ð1Ø ×/Ò/°Ñ6Ô6�EØ!�FàˆKˆKˆKð ð 
	ð 
	ð 
	ð 
	ð 
	r   r%   c                 ó:   — | j                              |¦  «         d S r   )rè   r´   r;   s     r   r´   zFrameProtocol.receive_bytes0  s   € ØÔ×)Ò)¨$Ñ/Ô/Ð/Ð/Ð/r   c              #   ó0   K  — | j         D ]}|€ d S |V — Œd S r   )rë   )r#   Úevents     r   Úreceived_frameszFrameProtocol.received_frames3  s9   è è € ØÔ%ð 	ð 	ˆEØˆ}Ø��à����ð		ð 	r   rh   ró   c                 ó|  — t          ¦   «         }|t          j        u rd }|€|rt          d¦  «        ‚|t          v rt          j        }|�U|t          t          j        d|¦  «        ¦  «        z  }|�.|t          | 	                    d¦  «        t          dz
  ¦  «        z  }|                      t          j        |¦  «        S )Nz&cannot specify a reason without a coderÎ   r‚   r+   )r-   rU   r[   Ú	TypeErrorrñ   rW   rÓ   Úpackr‡   r†   rÑ   Ú_serialize_framerE   rQ   )r#   rh   ró   r}   s       r   ÚclosezFrameProtocol.close:  s»   € Ý‘+”+ˆØ•;Ô-Ð-Ð-ØˆDØˆ<˜Fˆ<ÝÐDÑEÔEÐEØÕ+Ð+Ð+ÝÔ-ˆDØÐØ•y¥¤¨T°4Ñ!8Ô!8Ñ9Ô9Ñ9ˆGØÐ!Ø�>Ø—M’M 'Ñ*Ô*Õ,>ÀÑ,Bñô ñ �ð ×$Ò$¥V¤\°7Ñ;Ô;Ð;r   r   r}   c                 óB   — |                       t          j        |¦  «        S r   )rÿ   rE   rR   ©r#   r}   s     r   ÚpingzFrameProtocol.pingK  ó   € Ø×$Ò$¥V¤[°'Ñ:Ô:Ð:r   c                 óB   — |                       t          j        |¦  «        S r   )rÿ   rE   rS   r  s     r   ÚpongzFrameProtocol.pongN  r  r   Trv   c                 ó’  — t          |t          t          t          f¦  «        rt          j        }nFt          |t          ¦  «        r"t          j        }|                     d¦  «        }nt          d¦  «        ‚| j
        €|| _
        n$| j
        |urt          d¦  «        ‚t          j        }|rd | _
        |                      |||¦  «        S )Nr‚   zMust provide bytes or textz!Data type mismatch inside message)r£   r   r-   Ú
memoryviewrE   rP   rl   rO   r†   rÆ   rì   rý   rN   rÿ   )r#   r}   rv   rx   s       r   Ú	send_datazFrameProtocol.send_dataQ  sÂ   € õ �g¥¥yµ*Ð=Ñ>Ô>ð 	;Ý”]ˆFˆFÝ˜¥Ñ%Ô%ð 	;Ý”[ˆFØ—n’n WÑ-Ô-ˆGˆGåÐ9Ñ:Ô:Ð:àÔ Ð(Ø$*ˆDÔ!Ð!ØÔ"¨&Ð0Ð0ÝÐ?Ñ@Ô@Ð@åÔ(ˆFàð 	)Ø$(ˆDÔ!à×$Ò$ V¨W°cÑ:Ô:Ð:r   rw   rx   c                 óâ   — t          |¦  «        dz  }t          |j        ¦  «        dz  t          |j        ¦  «        dz  z   t          |j        ¦  «        dz  z   }t          |¦  «        }||z  |z  S )Né   é   é   r*   )rz   rp   rq   rr   )r#   rv   rw   rx   Úfin_bitsÚrsv_bitsÚopcode_bitss          r   Ú_make_fin_rsv_opcodez"FrameProtocol._make_fin_rsv_opcodeh  sc   € Ý�s‘8”8˜q‘=ˆÝ˜œ‘M”M QÑ&­3¨s¬x©=¬=¸AÑ+=Ñ>Å#ÀcÄhÁ-Ä-ÐSTÑBTÑUˆÝ˜&‘k”kˆà˜(Ñ" [Ñ0Ð0r   c                 óì  — t          ddd¦  «        }t          | j        ¦  «        D ]}|                     | ||||¦  «        \  }}Œ|                      |||¦  «        }t          |¦  «        }d}|t          k    r|}	d }
n |t          k    r
t          }	|}
nt          }	|}
d}| j
        r|	dz  }	t          ||	g¦  «        }|
�p|                     ¦   «         rt          d¦  «        ‚|r&|t          t          j        d|
¦  «        ¦  «        z  }n%|t          t          j        d|
¦  «        ¦  «        z  }| j
        r>t!          j        d¦  «        }t%          |¦  «        }||z   |                     |¦  «        z   S ||z   S )NFTr?   z"payload too long for control framerÏ   rÎ   r*   )ro   Úreversedr«   Úframe_outboundr  r/   rÑ   rÖ   rÒ   rÕ   rª   r-   rL   rÆ   rÓ   rþ   ÚosÚurandomr   r4   )r#   rx   r}   rv   rw   r»   Úfin_rsv_opcodeÚpayload_lengthÚquad_payloadÚfirst_payloadÚsecond_payloadr­   r   r¯   s                 r   rÿ   zFrameProtocol._serialize_frameo  s�  € õ �e˜U EÑ*Ô*ˆÝ! $¤/Ñ2Ô2ð 	Uð 	UˆIØ$×3Ò3°D¸&À#ÀwÐPSÑTÔT‰LˆC��à×2Ò2°3¸¸VÑDÔDˆå˜W™œˆØˆØÕ/Ò/Ð/Ø*ˆMØ!ˆNˆNØÕ3Ò3Ð3Ý3ˆMØ+ˆNˆNå5ˆMØ+ˆNØˆLàŒ;ð 	$Ø˜VÑ#ˆMå˜N¨MÐ:Ñ;Ô;ˆØÐ%Ø×ÒÑ!Ô!ð GÝ Ð!EÑFÔFÐFØð GØ�)¥F¤K°°nÑ$EÔ$EÑFÔFÑF��à�)¥F¤K°°nÑ$EÔ$EÑFÔFÑF�àŒ;ð 	Bõ œ* Q™-œ-ˆKÝ$ [Ñ1Ô1ˆFØ˜KÑ'¨&¯.ª.¸Ñ*AÔ*AÑAÐAà˜ÑÐr   )NN)r   )r   T)r5   r6   r7   rJ   r   r$   r|   rô   r   r	   rê   r   r´   rû   rz   rl   r   r  r  r   r-   r	  ro   rE   r  rÿ   r   r   r   rá   rá   î  s  € € € € € ð	7˜tð 	7°°kÔ1Bð 	7Àtð 	7ð 	7ð 	7ð 	7ðW Eð W¨eð Wð Wð Wð WðB ¨8°E¬?¸DÀ$Ð+FÔ!Gð ð ð ð ð*0 %ð 0¨Dð 0ð 0ð 0ð 0ð ¨5°$¸Ð+<Ô!=ð ð ð ð ð<ð <˜( 3œ-ð <¸À¼ð <ÐQVð <ð <ð <ð <ð";ð ;˜Eð ;¨Eð ;ð ;ð ;ð ;ð;ð ;˜Eð ;¨Eð ;ð ;ð ;ð ;ð HLð;ð ;Ø˜U I¨sÐ2Ô3ð;Ø@Dð;à	ð;ð ;ð ;ð ;ð.1¨ð 1°7ð 1ÀFð 1Èsð 1ð 1ð 1ð 1ð AEð2 ð 2 Øð2 Ø',ð2 Ø9=ð2 à	ð2 ð 2 ð 2 ð 2 ð 2 ð 2 r   rá   )?rM   r  rÓ   Úcodecsr   r   Úenumr   Útypingr   r   r   r	   r
   r   r   r«   r   r   r(   r   r9   rÒ   rÕ   rÑ   rÖ   ÚMAX_PAYLOAD_EIGHT_BYTEÚMAX_FRAME_PAYLOADrÇ   rÈ   rÁ   rÂ   rÃ   rÄ   rÅ   rE   rU   r[   r\   rd   rñ   rï   ÚMIN_PROTOCOL_CLOSE_REASONrò   ÚMIN_LIBRARY_CLOSE_REASONÚMAX_LIBRARY_CLOSE_REASONÚMIN_PRIVATE_CLOSE_REASONÚMAX_PRIVATE_CLOSE_REASONrð   rþ   Ú	NULL_MASKÚ	Exceptionrf   ro   ru   r|   r   rz   r‡   r‰   rž   r©   rá   r   r   r   ú<module>r(     s±  ððð ð 
€	€	€	Ø €€€Ø <Ð <Ð <Ð <Ð <Ð <Ð <Ð <Ø Ð Ð Ð Ð Ð Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ Uàð &Ø%Ð%Ð%Ð%Ð%Ð%ð DÐC¸¸¸c¹
¼
ÐCÑCÔC€
ðð ð ð ð ñ ô ð ð0ð ð ð ð ñ ô ð ð Ð ØÐ ØÐ Ø Ð Ø"Ð Ø*Ð ð €	ØÐ ð €Ø€	Ø€	Ø€	Ø€ð!ð !ð !ð !ð !ˆWñ !ô !ð !ð6T ð T ð T ð T ð T �'ñ T ô T ð T ðr ÔØÔ ØÔ$ðÐ ð Ð Ø Ð Ø Ð ØÐ ØÐ ØÐ ØÐ ØÐ ð ˆFŒK˜˜aÑ Ô €	ðð ð ð ð �)ñ ô ð ðð ð ð ð ˆjñ ô ð ð!ð !ð !ð !ð !ˆZñ !ô !ð !ðð ð ð ð ˆJñ ô ð ð˜ð ¨ð °ð ð ð ð ð ! ð ! ð ! ð ! ð ! ñ ! ô ! ð ! ðH#ð #ð #ð #ð #ñ #ô #ð #ðLdCð dCð dCð dCð dCñ dCô dCð dCðNs ð s ð s ð s ð s ñ s ô s ð s ð s ð s r   