U
    •uÄc†Ž  ã                   @   sŒ  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mZ d dl	m
Z
mZm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	d
gZi Zi ZG dd„ deƒZde jkZerðzd dlZdZW qø ek
rì   d dl Z dZY qøX nd dl Z e�re!dƒ ej"Z#ej$Z%eZ&nfd dl'Z'G dd„ de j(ƒZ)d dl m*Z* d dl+m,Z, e -d¡Z.G dd„ de j/ƒZ0d7dd„Z#d8dd„Z%e Z&G dd	„ d	eƒZ1e 2e1¡ e1ee1j3< G dd
„ d
eƒZ4e 2e4¡ e4ee4j5< dZ6e 7¡ dk�pàde jkZ8e8�s&zd dl9Z9W n ek
�r
   Y nX dZ6dd „ Z:d!d „ Z;e9Z<n8zd dl=Z=W n ek
�rH   Y nX dZ6e=j>Z:e=j?Z;e=Z<e6�rÀG d"d#„ d#eƒZ@e 2e@¡ e Ad#¡ e@ee@j3< G d$d%„ d%eƒZBe 2eB¡ eBeeBj5< e Ad%¡ dZCzd dlDZDW n ek
�ræ   Y nX dZCeDj"ZEeDj$ZFeDZGeC�r^G d&d'„ d'eƒZHe 2eH¡ eHeeHj3< e Ad'¡ G d(d)„ d)eƒZIe 2eI¡ eIeeIj5< e Ad)¡ zd dlJZJW n ek
�r€   Y n^X G d*d+„ d+eƒZKe 2eK¡ eKeeKj3< e Ad+¡ G d,d-„ d-eƒZLe 2eL¡ eLeeLj5< e Ad-¡ dZMzd dlNZNd d.lmOZO W n ek
�r   Y nX dZMeM�rxG d/d0„ d0eƒZPe 2eP¡ e Ad0¡ ePeePj3< G d1d2„ d2eƒZQe 2eQ¡ eQeeQj5< e Ad2¡ d3d4„ ZRd5d6„ ZSdS )9é    N)Úb2a_hexÚa2b_hex)ÚOptionalÚListÚTuple)Útime_ns)ÚIObjectSerializerÚISerializerÚIMessage)ÚProtocolError)ÚmessageÚ
SerializerÚJsonObjectSerializerÚJsonSerializerc                2   @   s‚  e Zd ZdZdZejjejejjejej	jej	ej
jej
ejjejejjejejjejejjejejjejejjejejjejejjejejjejejjejejjejejjejejjejejjejejjejejjejejjejejjejejjejejjejejjejiZ dd„ Z!dd„ Z"dd„ Z#d	d
„ Z$dd„ Z%ddd„Z&ddd„Z'e(e)e*e+f dœdd„Z,de*e-e+ e.e( dœdd„Z/dS )r   zœ
    Base class for WAMP serializers. A WAMP serializer is the core glue between
    parsed WAMP message objects and the bytes on wire (the transport).
    i   c                 C   sN   || _ tƒ | _d| _d| _d| _d| _d| _d| _d| _	d| _
d| _d| _dS )zÉ

        :param serializer: The object serializer to use for WAMP wire-level serialization.
        :type serializer: An object that implements :class:`autobahn.interfaces.IObjectSerializer`.
        r   N)Ú_serializerr   Ú_stats_resetÚ_stats_cycleÚ_serialized_bytesÚ_serialized_messagesÚ_serialized_rated_messagesÚ_unserialized_bytesÚ_unserialized_messagesÚ_unserialized_rated_messagesÚ_autoreset_rated_messagesÚ_autoreset_durationÚ_autoreset_callback)ÚselfÚ
serializer© r   úZ/var/www/html/NKSPORTS/school/venv/lib/python3.8/site-packages/autobahn/wamp/serializer.pyÚ__init___   s    zSerializer.__init__c                 C   s   | j S )z¶
        Get serializer statistics: timestamp when statistics were last reset.

        :return: Last reset time of statistics (UTC, ns since Unix epoch)
        :rtype: int
        )r   ©r   r   r   r   Ústats_resetv   s    zSerializer.stats_resetc                 C   s   | j | j S )z†
        Get serializer statistics: bytes (serialized + unserialized).

        :return: Number of bytes.
        :rtype: int
        )r   r   r!   r   r   r   Ústats_bytes   s    zSerializer.stats_bytesc                 C   s   | j | j S )zŒ
        Get serializer statistics: messages (serialized + unserialized).

        :return: Number of messages.
        :rtype: int
        )r   r   r!   r   r   r   Ústats_messagesˆ   s    zSerializer.stats_messagesc                 C   s   | j | j S )z˜
        Get serializer statistics: rated messages (serialized + unserialized).

        :return: Number of rated messages.
        :rtype: int
        )r   r   r!   r   r   r   Ústats_rated_messages‘   s    zSerializer.stats_rated_messagesFc                 C   s‚   |dkst |ƒtkst‚|dks0t |ƒtks0t‚|s<|s<t‚t|ƒsHt‚|| _|| _|| _| jr~|r~| jdd�}|  |¡ |S dS )a  
        Configure a user callback invoked when accumulated stats hit specified threshold.
        When the specified number of rated messages have been processed or the specified duration
        has passed, statistics are automatically reset, and the last statistics is provided to
        the user callback.

        :param rated_messages: Number of rated messages that should trigger an auto-reset.
        :type rated_messages: int

        :param duration: Duration in ns that when passed will trigger an auto-reset.
        :type duration: int

        :param callback: User callback to be invoked when statistics are auto-reset. The function
            will be invoked with a single positional argument: the accumulated statistics before the reset.
        :type callback: callable
        NT©Úreset)ÚtypeÚintÚAssertionErrorÚcallabler   r   r   Ústats)r   Úrated_messagesÚdurationÚcallbackZ	reset_nowr,   r   r   r   Úset_stats_autoresetš   s    

zSerializer.set_stats_autoresetTc              	   C   sÞ   t |ƒtkst‚t |ƒtks t‚|  jd7  _|rp| j| j| jtƒ | j | j| j| j	dœ| j
| j| jdœdœ}n:| j| j| jtƒ | j | j| j
 | j| j | j	| j dœ}|rÚd| _d| _d| _	d| _
d| _d| _tƒ | _|S )aw  
        Get (and reset) serializer statistics.

        :param reset: If ``True``, reset the serializer statistics.
        :type reset: bool

        :param details: If ``True``, return detailed statistics split up by serialization/unserialization.
        :type details: bool

        :return: Serializer statistics, eg:

            .. code-block:: json

                {
                    "timestamp": 1574156576688704693,
                    "duration": 34000000000,
                    "bytes": 0,
                    "messages": 0,
                    "rated_messages": 0
                }

        :rtype: dict
        é   )ÚbytesÚmessagesr-   )Úcycler   Ú	timestampr.   Z
serializedZunserialized)r4   r   r5   r.   r2   r3   r-   r   )r(   Úboolr*   r   ÚSERIALIZER_IDr   r   r   r   r   r   r   r   )r   r'   ÚdetailsÚdatar   r   r   r,   º   sD    
ýýö



ù	zSerializer.stats)ÚmsgÚreturnc                 C   s¬   |  | j¡| jj }}|  jt|ƒ7  _|  jd7  _|  jtt 	t
t|ƒƒ| j ¡ƒ7  _| jr¤| jrztƒ | j | jksŽ| jr¤|  ¡ | jkr¤| jdd�}|  |¡ ||fS )zS
        Implements :func:`autobahn.wamp.interfaces.ISerializer.serialize`
        r1   Tr&   )Ú	serializer   ÚBINARYr   Úlenr   r   r)   ÚmathÚceilÚfloatÚRATED_MESSAGE_SIZEr   r   r   r   r   r%   r,   )r   r:   r9   Z	is_binaryr,   r   r   r   r<   ü   s    &2
zSerializer.serializeN)ÚpayloadÚisBinaryr;   c              
   C   sÂ  |dk	r(|| j jkr(td || j j¡ƒ‚z| j  |¡}W n8 tk
rp } ztd t|ƒj|¡ƒ‚W 5 d}~X Y nX | j jdkr„|}nžg }|D ]”}t|ƒt	kr®td t|ƒ¡ƒ‚t
|ƒdkrÂtdƒ‚|d }t|ƒtkrètd t|ƒ¡ƒ‚| j |¡}|dk�rtd	 |¡ƒ‚| |¡}	| |	¡ qŒ|  jt
|ƒ7  _|  jt
|ƒ7  _|  jtt tt
|ƒƒ| j ¡ƒ7  _| j�r¾| j�r�tƒ | j | jk�s¨| j�r¾|  ¡ | jk�r¾| jd
d�}
|  |
¡ |S )zU
        Implements :func:`autobahn.wamp.interfaces.ISerializer.unserialize`
        NzDinvalid serialization of WAMP message (binary {0}, but expected {1})z.invalid serialization of WAMP message: {0} {1}Úflatbuffersz!invalid type {0} for WAMP messager   z$missing message type in WAMP messagez&invalid type {0} for WAMP message typezinvalid WAMP message type {0}Tr&   )r   r=   r   ÚformatÚunserializeÚ	Exceptionr(   Ú__name__ÚNAMEÚlistr>   r)   ÚMESSAGE_TYPE_MAPÚgetÚparseÚappendr   r   r   r?   r@   rA   rB   r   r   r   r   r   r%   r,   )r   rC   rD   Zraw_msgsÚeÚmsgsZraw_msgZmessage_typeZKlassr:   r,   r   r   r   rG     sD    ÿÿ(

&<
zSerializer.unserialize)F)TF)N)0rI   Ú
__module__Ú__qualname__Ú__doc__rB   r   ZHelloZMESSAGE_TYPEZWelcomeZAbortZ	ChallengeZAuthenticateZGoodbyeÚErrorÚPublishZ	PublishedZ	SubscribeZ
SubscribedZUnsubscribeZUnsubscribedÚEventZEventReceivedÚCallZCancelZResultZRegisterZ
RegisteredZ
UnregisterZUnregisteredZ
InvocationZ	InterruptZYieldrL   r    r"   r#   r$   r%   r0   r,   r
   r   r2   r6   r<   r   r   rG   r   r   r   r   r   4   s|                            ç				
 
BZAUTOBAHN_USE_UJSONTFz¡WARNING: Autobahn is using ujson accelerated JSON module - will run faster,
but only on CPython and will loose ability to transport binary payload transparently!c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_WAMPJsonEncoderc                 O   s8   d|kr|d | _ |d= nd| _ tjj| f|ž|Ž d S )NÚuse_binary_hex_encodingF)Ú_use_binary_hex_encodingÚjsonÚJSONEncoderr    )r   ÚargsÚkwargsr   r   r   r    ]  s
    
z_WAMPJsonEncoder.__init__c                 C   s^   t |tƒr8| jr"dt|ƒ d¡ S dt |¡ d¡ S n"t |tjƒrLt	|ƒS t
j | |¡S d S )NÚ0xÚasciiú )Ú
isinstancer2   r[   r   ÚdecodeÚbase64Ú	b64encodeÚdecimalÚDecimalÚstrr\   r]   Údefault©r   Úobjr   r   r   rj   e  s    
z_WAMPJsonEncoder.defaultN)rI   rR   rS   r    rj   r   r   r   r   rY   [  s   rY   )Úscanner)Ú
scanstringz^[\+\-E\.0-9]+$c                   @   s   e Zd Zdd„ ZdS )Ú_WAMPJsonDecoderc                    s¦   d|kr|d ˆ _ |d= ndˆ _ d|kr:|d ˆ _|d= ndˆ _d|krj|d ˆ _|d= ˆ jrptj|d< ndˆ _tjjˆ f|ž|Ž ‡ fdd„}|ˆ _t	 
ˆ ¡ˆ _d S )NrZ   FÚuse_decimal_from_strÚuse_decimal_from_floatÚparse_floatc                     s°   t | |Ž\}}ˆ jrB|rl|dd… dkrlt|dd … ƒ}||fS n*|rl|d dkrlt |dd … ¡}||fS ˆ jr¨t |¡r¨zt 	|¡}||fW S  tj
k
r¦   Y nX ||fS )Nr   é   r`   rb   r1   )rn   r[   r   re   Ú	b64decodeÚ_use_decimal_from_strÚ
_DEC_MATCHÚmatchrg   rh   ZInvalidOperation)r^   r_   ÚsÚidxr!   r   r   Ú_parse_string’  s    


z0_WAMPJsonDecoder.__init__.<locals>._parse_string)r[   ru   Ú_use_decimal_from_floatrg   rh   r\   ÚJSONDecoderr    Úparse_stringrm   Úpy_make_scannerÚ	scan_once)r   r^   r_   rz   r   r!   r   r    {  s$    


z_WAMPJsonDecoder.__init__N)rI   rR   rS   r    r   r   r   r   ro   y  s   ro   c                 C   s   t j| |||td�S )N)rZ   rp   rq   Úcls)r\   Úloadsro   )rx   rZ   rp   rq   r   r   r   Ú_loads­  s    ür‚   c                 C   s   t j| ddd|td�S )N)ú,ú:F)Ú
separatorsÚensure_asciiÚ	sort_keysrZ   r€   )r\   ÚdumpsrY   )rl   rZ   r   r   r   Ú_dumps´  s    ûr‰   c                   @   s2   e Zd ZeZdZdZd
dd„Zdd„ Zdd„ Z	d	S )r   r\   Fc                 C   s   || _ || _|| _|| _dS )aö  

        :param batched: Flag that controls whether serializer operates in batched mode.
        :type batched: bool

        :param use_binary_hex_encoding: Flag to enable HEX encoding prefixed with ``"0x"``,
            otherwise prefix binaries with a `` `` byte.
        :type use_binary_hex_encoding: bool

        :param use_decimal_from_str: Flag to automatically encode Decimals as strings, and
            to try to parse strings as Decimals.
        :type use_decimal_from_str: bool
        N)Ú_batchedr[   ru   r{   )r   ÚbatchedrZ   rp   rq   r   r   r   r    Ê  s    zJsonObjectSerializer.__init__c                 C   s8   t || jd�}t|tƒr"| d¡}| jr0|d S |S dS )zY
        Implements :func:`autobahn.wamp.interfaces.IObjectSerializer.serialize`
        )rZ   Úutf8ó   N)r‰   r[   rc   ri   ÚencoderŠ   )r   rl   rx   r   r   r   r<   Ý  s    

zJsonObjectSerializer.serializec                    sF   ˆ j r| d¡dd… }n|g}t|ƒdkr4tdƒ‚‡ fdd„|D ƒS )z[
        Implements :func:`autobahn.wamp.interfaces.IObjectSerializer.unserialize`
        r�   Néÿÿÿÿr   zbatch format errorc                    s(   g | ] }t | d ¡ˆ jˆ jˆ jd�‘qS )rŒ   )rZ   rp   rq   )r‚   rd   r[   ru   r{   )Ú.0r9   r!   r   r   Ú
<listcomp>ó  s   ý
ýz4JsonObjectSerializer.unserialize.<locals>.<listcomp>)rŠ   Úsplitr>   rH   )r   rC   Úchunksr   r!   r   rG   é  s    
ýz JsonObjectSerializer.unserializeN)FFFF)
rI   rR   rS   Ú_jsonZJSON_MODULErJ   r=   r    r<   rG   r   r   r   r   r   ¿  s   
c                   @   s"   e Zd ZdZdZdZddd„ZdS )	r   r\   r1   zapplication/jsonFc                 C   s$   t  | t|||d�¡ |r d| _dS )zŽ
        Ctor.

        :param batched: Flag to control whether to put this serialized into batched mode.
        :type batched: bool
        )r‹   rZ   rp   zjson.batchedN)r   r    r   r7   )r   r‹   rZ   rp   r   r   r   r      s    
þzJsonSerializer.__init__N)FFF©rI   rR   rS   r7   ZRAWSOCKET_SERIALIZER_IDZ	MIME_TYPEr    r   r   r   r   r   ý  s   ÚPyPyZAUTOBAHN_USE_UMSGPACKc                 C   s   t j| dd�S )NT)Zuse_bin_type)ÚmsgpackÚpackb)rl   r   r   r   Ú<lambda>0  ó    r™   c                 C   s   t j| dd�S )NF)Úraw)r—   Úunpackb)r9   r   r   r   r™   1  rš   c                   @   s2   e Zd ZdZeZdZddd„Zdd„ Zdd	„ Z	d
S )ÚMsgPackObjectSerializerr—   TFc                 C   s
   || _ dS ©úŠ

            :param batched: Flag that controls whether serializer operates in batched mode.
            :type batched: bool
            N©rŠ   ©r   r‹   r   r   r   r    Q  s    z MsgPackObjectSerializer.__init__c                 C   s*   t |ƒ}| jr"t dt|ƒ¡| S |S dS ©úa
            Implements :func:`autobahn.wamp.interfaces.IObjectSerializer.serialize`
            ú!LN)Ú_packbrŠ   ÚstructÚpackr>   ©r   rl   r9   r   r   r   r<   Y  s    z!MsgPackObjectSerializer.serializec                 C   sÀ   | j r®g }t|ƒ}d}||k rš|d |kr2tdƒ‚t d|||d … ¡d }|d | |krftdƒ‚||d |d | … }| t|ƒ¡ |d | }q||krªtdƒ‚|S t|ƒ}|gS dS ©úc
            Implements :func:`autobahn.wamp.interfaces.IObjectSerializer.unserialize`
            r   é   zbatch format error [1]r¤   zbatch format error [2]zbatch format error [3]N)rŠ   r>   rH   r¦   ÚunpackrO   Ú_unpackb©r   rC   rQ   ÚNÚiÚlr9   Zunpackedr   r   r   rG   c  s$    z#MsgPackObjectSerializer.unserializeN)F)
rI   rR   rS   rJ   Ú_msgpackZMSGPACK_MODULEr=   r    r<   rG   r   r   r   r   r�   F  s   

r�   c                   @   s"   e Zd ZdZdZdZddd„ZdS )	ÚMsgPackSerializerr—   rs   zapplication/x-msgpackFc                 C   s    t  | t|d�¡ |rd| _dS )úž
            Ctor.

            :param batched: Flag to control whether to put this serialized into batched mode.
            :type batched: bool
            ©r‹   zmsgpack.batchedN)r   r    r�   r7   r¡   r   r   r   r    ž  s    zMsgPackSerializer.__init__N)Fr•   r   r   r   r   r³   Š  s   r³   c                   @   s6   e Zd ZdZdZeZdZddd„Zdd„ Z	d	d
„ Z
dS )ÚCBORObjectSerializeraJ  
        CBOR serializer based on `cbor2 <https://github.com/agronholm/cbor2>`_.

        This CBOR serializer has proper support for arbitrary precision decimals,
        via tagged decimal fraction encoding, as described in
        `RFC7049 section 2.4.3 <https://datatracker.ietf.org/doc/html/rfc7049#section-2.4.3>`_.
        ÚcborTFc                 C   s
   || _ dS rž   r    r¡   r   r   r   r    Ñ  s    zCBORObjectSerializer.__init__c                 C   s*   t |ƒ}| jr"t dt|ƒ¡| S |S dS r¢   )Ú_cbor_dumpsrŠ   r¦   r§   r>   r¨   r   r   r   r<   Ù  s    zCBORObjectSerializer.serializec                 C   sÀ   | j r®g }t|ƒ}d}||k rš|d |kr2tdƒ‚t d|||d … ¡d }|d | |krftdƒ‚||d |d | … }| t|ƒ¡ |d | }q||krªtdƒ‚|S t|ƒ}|gS dS r©   )rŠ   r>   rH   r¦   r¬   rO   Ú_cbor_loadsr®   r   r   r   rG   ã  s$    z CBORObjectSerializer.unserializeN)F)rI   rR   rS   rT   rJ   Ú_cborZCBOR_MODULEr=   r    r<   rG   r   r   r   r   r¶   ¿  s   

r¶   c                   @   s"   e Zd ZdZdZdZddd„ZdS )	ÚCBORSerializerr·   é   zapplication/cborFc                 C   s    t  | t|d�¡ |rd| _dS )r´   rµ   zcbor.batchedN)r   r    r¶   r7   r¡   r   r   r   r      s    zCBORSerializer.__init__N)Fr•   r   r   r   r   r»   
  s   r»   c                   @   s2   e Zd ZdZeZdZddd„Zdd„ Zdd	„ Z	d
S )ÚUBJSONObjectSerializerÚubjsonTFc                 C   s
   || _ dS rž   r    r¡   r   r   r   r    D  s    zUBJSONObjectSerializer.__init__c                 C   s,   t  |¡}| jr$t dt|ƒ¡| S |S dS r¢   )r¾   ZdumpbrŠ   r¦   r§   r>   r¨   r   r   r   r<   L  s    
z UBJSONObjectSerializer.serializec                 C   sÄ   | j r°g }t|ƒ}d}||k rœ|d |kr2tdƒ‚t d|||d … ¡d }|d | |krftdƒ‚||d |d | … }| t |¡¡ |d | }q||kr¬tdƒ‚|S t |¡}|gS dS r©   )rŠ   r>   rH   r¦   r¬   rO   r¾   Zloadbr®   r   r   r   rG   V  s$    
z"UBJSONObjectSerializer.unserializeN)F)
rI   rR   rS   rJ   r¾   ZUBJSON_MODULEr=   r    r<   rG   r   r   r   r   r½   9  s   

r½   c                   @   s"   e Zd ZdZdZdZddd„ZdS )	ÚUBJSONSerializerr¾   r«   zapplication/ubjsonFc                 C   s    t  | t|d�¡ |rd| _dS )r´   rµ   zubjson.batchedN)r   r    r½   r7   r¡   r   r   r   r    ‘  s    zUBJSONSerializer.__init__N)Fr•   r   r   r   r   r¿   }  s   r¿   )Úmessage_fbsc                   @   sV   e Zd ZdZeZdZejj	ej
ej
fejjejejfiZddd„Zdd„ Zdd	„ Zd
S )ÚFlatBuffersObjectSerializerrE   TFc                 C   s   |rt dƒ‚|| _dS )rŸ   zJWAMP-FlatBuffers serialization does not support message batching currentlyN)r*   rŠ   r¡   r   r   r   r    ¾  s    z$FlatBuffersObjectSerializer.__init__c                 C   s
   t ƒ ‚dS )r£   N)ÚNotImplementedErrorrk   r   r   r   r<   Ç  s    z%FlatBuffersObjectSerializer.serializec           	      C   sp   t jj |d¡}| ¡ }|| jkr^| j| \}}|ƒ }| ¡ }| |j|j¡ ||d�}|gS t	d 
|¡ƒ‚dS )rª   r   )Zfrom_fbsz8message type {} not yet implemented for WAMP-FlatBuffersN)rÀ   ÚMessageZGetRootAsMessageZMsgTyperL   ZMsgZInitZBytesZPosrÂ   rF   )	r   rC   Z	union_msgÚmsg_typeZ	fbs_klassZ
wamp_klassZfbs_msgZ_tabr:   r   r   r   rG   Í  s    

z'FlatBuffersObjectSerializer.unserializeN)F)rI   rR   rS   rJ   rE   ZFLATBUFFERS_MODULEr=   rÀ   ZMessageTypeZEVENTrW   r   ZPUBLISHrV   rL   r    r<   rG   r   r   r   r   rÁ   ®  s    
 
þ
	rÁ   c                   @   s"   e Zd ZdZdZdZddd„ZdS )	ÚFlatBuffersSerializerrE   é   zapplication/x-flatbuffersFc                 C   s    t  | t|d�¡ |rd| _dS )zŒ

            :param batched: Flag to control whether to put this serialized into batched mode.
            :type batched: bool
            rµ   zflatbuffers.batchedN)r   r    rÁ   r7   r¡   r   r   r   r    ÷  s    zFlatBuffersSerializer.__init__N)Fr•   r   r   r   r   rÅ   ã  s   rÅ   c                 C   sl   d}d| kr:|   d¡}|d } t|ƒdkr:|d dkr:d}| tkrPt|  |d�S td | tt ¡ ƒ¡ƒ‚d S )	NFÚ.r   r1   r‹   Trµ   z4could not create serializer for "{}" (available: {}))r’   r>   ÚSERID_TO_SERÚRuntimeErrorrF   ÚsortedÚkeys)Úserializer_idr‹   r±   r   r   r   Úcreate_transport_serializer  s    
rÍ   c                 C   s"   g }| j D ]}| t|ƒ¡ q
|S )zK
    Create a list of serializers to use with a WAMP protocol factory.
    )ÚserializersrO   rÍ   )Ú	transportrÎ   rÌ   r   r   r   Úcreate_transport_serializers  s    
rÐ   )FFF)F)TÚosÚrer¦   Úplatformr?   rg   Úbinasciir   r   Útypingr   r   r   Ztxaior   Zautobahn.wamp.interfacesr   r	   r
   Zautobahn.wamp.exceptionr   Zautobahn.wampr   Ú__all__ZSERID_TO_OBJSERrÈ   Úobjectr   ÚenvironZ
_USE_UJSONZujsonÚImportErrorr\   Úprintr�   r‚   rˆ   r‰   r”   re   r]   rY   rm   Zjson.decoderrn   Úcompilerv   r|   ro   r   ÚregisterrJ   r   r7   Z_HAS_MSGPACKÚpython_implementationZ_USE_UMSGPACKr—   r¥   r­   r²   Zumsgpackr˜   rœ   r�   rO   r³   Z	_HAS_CBORZcbor2r¹   r¸   rº   r¶   r»   r¾   r½   r¿   Z_HAS_FLATBUFFERSrE   rÀ   rÁ   rÅ   rÍ   rÐ   r   r   r   r   Ú<module>   sú   þ  

4

:

"

?





F





?





0





