§
    Ìtºf†Ž  ã                   óÐ  — 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 g d¢Zi Zi Z G d	„ d
e¦  «        Zde j        v Zer	 d dlZdZn# e$ r	 d dl Z dZY nw xY wd dl Z er e!d¦  «         ej"        Z#ej$        Z%eZ&nPd dl'Z' G d„ de j(        ¦  «        Z)d dl m*Z* d dl+m,Z,  ej-        d¦  «        Z. G d„ de j/        ¦  «        Z0d3d„Z#d4d„Z%e Z& G d„ de¦  «        Z1 ej2        e1¦  «         e1ee1j3        <    G d„ de¦  «        Z4 ej2        e4¦  «         e4ee4j5        <   dZ6 ej7        ¦   «         dk    pde j        v Z8e8s	 d dl9Z9dZ6d„ Z:d„ Z;e9Z<n.# e$ r Y n'w xY w	 d dl=Z=dZ6e=j>        Z:e=j?        Z;e=Z<n# e$ r Y nw xY we6rz G d „ d!e¦  «        Z@ ej2        e@¦  «         e A                    d!¦  «         e@ee@j3        <    G d"„ d#e¦  «        ZB ej2        eB¦  «         eBeeBj5        <   e A                    d#¦  «         dZC	 d dlDZDdZCeDj"        ZEeDj$        ZFeDZGn# e$ r Y nw xY weCrz G d$„ d%e¦  «        ZH ej2        eH¦  «         eHeeHj3        <   e A                    d%¦  «          G d&„ d'e¦  «        ZI ej2        eI¦  «         eIeeIj5        <   e A                    d'¦  «         	 d dlJZJ G d(„ d)e¦  «        ZK ej2        eK¦  «         eKeeKj3        <   e A                    d)¦  «          G d*„ d+e¦  «        ZL ej2        eL¦  «         eLeeLj5        <   e A                    d+¦  «         n# e$ r Y nw xY wdZM	 d dlNZNd d,lmOZO dZMn# e$ r Y nw xY weMrz G d-„ d.e¦  «        ZP ej2        eP¦  «         e A                    d.¦  «         ePeePj3        <    G d/„ d0e¦  «        ZQ ej2        eQ¦  «         eQeeQj5        <   e A                    d0¦  «         d1„ ZRd2„ ZSdS )5é    N)Úb2a_hexÚa2b_hex)ÚOptionalÚListÚTuple)Útime_ns)ÚIObjectSerializerÚISerializerÚIMessage)ÚProtocolError)Úmessage)Ú
SerializerÚJsonObjectSerializerÚJsonSerializerc                   ó  — e Zd ZdZdZ	 i 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„ Z!d„ Z"d„ Z#d„ Z$d„ Z%dd	„Z&dd„Z'de(de)e*e+f         fd„Z,dde*de-e+         de.e(         f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                 óÆ   — || _         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Ú
serializers     úW/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/autobahn/wamp/serializer.pyÚ__init__zSerializer.__init___   sn   € ð &ˆÔå#™IœIˆÔØˆÔà!"ˆÔØ$%ˆÔ!Ø*+ˆÔ'à#$ˆÔ Ø&'ˆÔ#Ø,-ˆÔ)à)-ˆÔ&Ø#'ˆÔ Ø#'ˆÔ Ð Ð ó    c                 ó   — | 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   s    r!   Ústats_resetzSerializer.stats_resetv   s   € ð Ô Ð r#   c                 ó    — | j         | j        z   S )z†
        Get serializer statistics: bytes (serialized + unserialized).

        :return: Number of bytes.
        :rtype: int
        )r   r   r%   s    r!   Ústats_byteszSerializer.stats_bytes   s   € ð Ô%¨Ô(@Ñ@Ð@r#   c                 ó    — | j         | j        z   S )zŒ
        Get serializer statistics: messages (serialized + unserialized).

        :return: Number of messages.
        :rtype: int
        )r   r   r%   s    r!   Ústats_messageszSerializer.stats_messagesˆ   s   € ð Ô(¨4Ô+FÑFÐFr#   c                 ó    — | j         | j        z   S )z˜
        Get serializer statistics: rated messages (serialized + unserialized).

        :return: Number of rated messages.
        :rtype: int
        )r   r   r%   s    r!   Ústats_rated_messageszSerializer.stats_rated_messages‘   s   € ð Ô.°Ô1RÑRÐRr#   Fc                 ó>  — |�t          |¦  «        t          k    sJ ‚|�t          |¦  «        t          k    sJ ‚|s|sJ ‚t          |¦  «        sJ ‚|| _        || _        || _        | j        r/|r/|                      d¬¦  «        }|                      |¦  «         |S 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Úcallabler   r   r   Ústats)r   Úrated_messagesÚdurationÚcallbackÚ	reset_nowr3   s         r!   Úset_stats_autoresetzSerializer.set_stats_autoresetš   sÏ   € ð" Ð%­¨nÑ)=Ô)=ÅÒ)DÐ)DÐ)DÐ)DØÐ¥4¨¡>¤>µSÒ#8Ð#8Ð#8Ð#8ØÐ* Ð*Ð*Ð*Ý˜Ñ!Ô!Ð"Ð"Ð"à)7ˆÔ&Ø#+ˆÔ Ø#+ˆÔ ð Ô#ð 	¨	ð 	Ø—J’J T�JÑ*Ô*ˆEØ×$Ò$ UÑ+Ô+Ð+ØˆLð	ð 	ð 	ð 	r#   Tc           	      ó^  — t          |¦  «        t          k    sJ ‚t          |¦  «        t          k    sJ ‚| xj        dz  c_        |rS| j        | j        | j        t          ¦   «         | j        z
  | j        | j        | j        dœ| j	        | j
        | j        dœdœ}nT| j        | j        | j        t          ¦   «         | j        z
  | j        | j	        z   | j        | j
        z   | j        | j        z   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Úmessagesr4   )Úcycler    Ú	timestampr5   Ú
serializedÚunserialized)r=   r    r>   r5   r;   r<   r4   r   )r0   Úboolr   ÚSERIALIZER_IDr   r   r   r   r   r   r   r   )r   r/   ÚdetailsÚdatas       r!   r3   zSerializer.statsº   s[  € õ0 �E‰{Œ{�dÒ"Ð"Ð"Ð"Ý�G‰}Œ}¥Ò$Ð$Ð$Ð$àÐÔ˜QÑÐÔàð 	àÔ*Ø"Ô0Ø!Ô.Ý#™IœI¨Ô(9Ñ9à!Ô3Ø $Ô 9Ø&*Ô&Eðð ð "Ô5Ø $Ô ;Ø&*Ô&Gð!ð !ðð ˆDˆDð$ Ô*Ø"Ô0Ø!Ô.Ý#™IœI¨Ô(9Ñ9ØÔ/°$Ô2JÑJØ Ô5¸Ô8SÑSØ"&Ô"AÀDÔDeÑ"eðð ˆDð ð 	*Ø%&ˆDÔ"Ø()ˆDÔ%Ø./ˆDÔ+Ø'(ˆDÔ$Ø*+ˆDÔ'Ø01ˆDÔ-Ý '¡	¤	ˆDÔØˆr#   ÚmsgÚreturnc                 óJ  — |                      | j        ¦  «        | j        j        }}| xj        t	          |¦  «        z  c_        | xj        dz  c_        | xj        t          t          j	        t          t	          |¦  «        ¦  «        | j        z  ¦  «        ¦  «        z  c_        | j        ru| j        rt          ¦   «         | j        z
  | j        k    s$| j        rH|                      ¦   «         | j        k    r+|                      d¬¦  «        }|                      |¦  «         ||fS )zS
        Implements :func:`autobahn.wamp.interfaces.ISerializer.serialize`
        r:   Tr.   )Ú	serializer   ÚBINARYr   Úlenr   r   r1   ÚmathÚceilÚfloatÚRATED_MESSAGE_SIZEr   r   r   r   r   r,   r3   )r   rE   rD   Ú	is_binaryr3   s        r!   rH   zSerializer.serializeü   sQ  € ð Ÿ-š-¨Ô(8Ñ9Ô9¸4Ô;KÔ;Rˆiˆð 	ÐÔ¥# d¡)¤)Ñ+ÐÔØÐ!Ô! QÑ&Ð!Ô!ØÐ'Ô'­3­t¬y½½sÀ4¹y¼yÑ9IÔ9IÈDÔLcÑ9cÑ/dÔ/dÑ+eÔ+eÑeÐ'Ô'ð Ô#ð 	,¨$Ô*Bð 	,ÍÉ	Ì	ÐTXÔTeÑHeÐjnô  kCò  HCð  HCð  IMô  Igð  HCð  lp÷  lEò  lEñ  lGô  lGð  KOô  Kiò  lið  liØ—J’J T�JÑ*Ô*ˆEØ×$Ò$ UÑ+Ô+Ð+à�YˆÐr#   NÚpayloadÚisBinaryc                 óÒ  — |�=|| j         j        k    r-t          d                     || j         j        ¦  «        ¦  «        ‚	 | j                              |¦  «        }nG# t
          $ r:}t          d                     t          |¦  «        j        |¦  «        ¦  «        ‚d}~ww xY w| 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                             |¦  «        }|€"t          d	                     |¦  «        ¦  «        ‚|                     |¦  «        }	|                     |	¦  «         �Œ%| xj        t          |¦  «        z  c_        | xj        t          |¦  «        z  c_        | xj        t          t'          j        t+          t          |¦  «        ¦  «        | j        z  ¦  «        ¦  «        z  c_        | j        ru| j        rt3          ¦   «         | j        z
  | j        k    s$| j        rH|                      ¦   «         | j        k    r+|                      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   rI   r   ÚformatÚunserializeÚ	Exceptionr0   Ú__name__ÚNAMEÚlistrJ   r1   ÚMESSAGE_TYPE_MAPÚgetÚparseÚappendr   r   r   rK   rL   rM   rN   r   r   r   r   r   r,   r3   )r   rP   rQ   Úraw_msgsÚeÚmsgsÚraw_msgÚmessage_typeÚKlassrE   r3   s              r!   rU   zSerializer.unserialize  s  € ð ÐØ˜4Ô+Ô2Ò2Ð2Ý#ØZ×aÒaÐbjØbfÔbrÔbyñ{ô {ñ|ô |ð |ð	nØÔ'×3Ò3°GÑ<Ô<ˆHˆHøÝð 	nð 	nð 	nÝÐ P× WÒ WÕX\Ð]^ÑX_ÔX_ÔXhÐjkÑ lÔ lÑmÔmÐmøøøøð	nøøøð ÔÔ  MÒ1Ð1ØˆD‰DàˆDØ#ð !ñ !�å˜‘=”=¥DÒ(Ð(Ý'Ð(K×(RÒ(RÕSWÐX_ÑS`ÔS`Ñ(aÔ(aÑbÔbÐbå�w‘<”< 1Ò$Ð$Ý'Ð(NÑOÔOÐOà& qœz�å˜Ñ%Ô%­Ò,Ð,Ý'Ð(P×(WÒ(WÕX\Ð]iÑXjÔXjÑ(kÔ(kÑlÔlÐlàÔ-×1Ò1°,Ñ?Ô?�à�=Ý'Ð(G×(NÒ(NÈ|Ñ(\Ô(\Ñ]Ô]Ð]ð —k’k 'Ñ*Ô*�à—’˜CÑ Ô Ð Ñ ð 	Ð Ô ¥C¨¡L¤LÑ0Ð Ô ØÐ#Ô#¥s¨4¡y¤yÑ0Ð#Ô#ØÐ)Ô)­Sµ´½5ÅÀWÁÄÑ;NÔ;NÐQUÔQhÑ;hÑ1iÔ1iÑ-jÔ-jÑjÐ)Ô)ð Ô#ð 	,¨$Ô*Bð 	,ÍÉ	Ì	ÐTXÔTeÑHeÐjnô  kCò  HCð  HCð  IMô  Igð  HCð  lp÷  lEò  lEñ  lGô  lGð  KOô  Kiò  lið  liØ—J’J T�JÑ*Ô*ˆEØ×$Ò$ UÑ+Ô+Ð+àˆs   ÁA Á
B Á&5BÂB ©F)TF)N)0rW   Ú
__module__Ú__qualname__Ú__doc__rN   r   ÚHelloÚMESSAGE_TYPEÚWelcomeÚAbortÚ	ChallengeÚAuthenticateÚGoodbyeÚErrorÚPublishÚ	PublishedÚ	SubscribeÚ
SubscribedÚUnsubscribeÚUnsubscribedÚEventÚEventReceivedÚCallÚCancelÚResultÚRegisterÚ
RegisteredÚ
UnregisterÚUnregisteredÚ
InvocationÚ	InterruptÚYieldrZ   r"   r&   r(   r*   r,   r8   r3   r   r   r;   rA   rH   r   r   rU   © r#   r!   r   r   4   sã  € € € € € ðð ð
 Ððð
ØŒÔ" G¤MðàŒÔ$ g¤oðð 	ŒÔ" G¤Mðð 	ÔÔ&¨Ô(9ð	ð
 	ÔÔ)¨7Ô+?ðð 	ŒÔ$ g¤oðð 	ŒÔ" G¤Mðð 	ŒÔ$ g¤oðð 	ÔÔ&¨Ô(9ðð 	ÔÔ&¨Ô(9ðð 	ÔÔ'¨Ô);ðð 	ÔÔ(¨'Ô*=ðð 	ÔÔ)¨7Ô+?ðð 	ŒÔ" G¤Mðð 	ÔÔ*¨GÔ,Aðð  	ŒÔ! 7¤<ð!ð" 	ŒÔ# W¤^ð#ð$ 	ŒÔ# W¤^ØÔÔ% wÔ'7ØÔÔ'¨Ô);ØÔÔ'¨Ô);ØÔÔ)¨7Ô+?ØÔÔ'¨Ô);ØÔÔ&¨Ô(9ØŒÔ" G¤Mð3ð Ðð6ð(ð (ð (ð.!ð !ð !ðAð Að AðGð Gð GðSð Sð Sðð ð ð ð@@ð @ð @ð @ðD˜Xð ¨%°°t°Ô*<ð ð ð ð ð$3ð 3 5ð 3°H¸T´Nð 3ÈdÐS[Ìnð 3ð 3ð 3ð 3ð 3ð 3r#   r   Ú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                   ó   — e Zd Zd„ Zd„ ZdS )Ú_WAMPJsonEncoderc                 ór   — d|v r|d         | _         |d= nd| _         t          j        j        | g|¢R i |¤Ž d S )NÚuse_binary_hex_encodingF)Ú_use_binary_hex_encodingÚjsonÚJSONEncoderr"   )r   ÚargsÚkwargss      r!   r"   z_WAMPJsonEncoder.__init__]  sY   € Ø(¨FÐ2Ð2Ø06Ð7PÔ0Q�Ô-ØÐ4Ð5Ð5à05�Ô-ÝÔÔ% dÐ<¨TÐ<Ð<Ð<°VÐ<Ð<Ð<Ð<Ð<r#   c                 ój  — t          |t          ¦  «        rV| j        r%dt          |¦  «                             d¦  «        z   S dt          j        |¦  «                             d¦  «        z   S t          |t          j        ¦  «        rt          |¦  «        S t          j                             | |¦  «        S )NÚ0xÚasciiú )Ú
isinstancer;   rˆ   r   ÚdecodeÚbase64Ú	b64encodeÚdecimalÚDecimalÚstrr‰   rŠ   Údefault©r   Úobjs     r!   r˜   z_WAMPJsonEncoder.defaulte  s›   € Ý˜#�uÑ%Ô%ð ;ØÔ0ð JØ¥'¨#¡,¤,×"5Ò"5°gÑ">Ô">Ñ>Ð>à!¥FÔ$4°SÑ$9Ô$9×$@Ò$@ÀÑ$IÔ$IÑIÐIÝ˜C¥¤Ñ1Ô1ð ;Ý˜3‘x”x�åÔ'×/Ò/°°cÑ:Ô:Ð:r#   N)rW   re   rf   r"   r˜   r‚   r#   r!   r…   r…   [  s2   € € € € € ð	=ð 	=ð 	=ð		;ð 		;ð 		;ð 		;ð 		;r#   r…   )Úscanner)Ú
scanstringz^[\+\-E\.0-9]+$c                   ó   — e Zd Zd„ ZdS )Ú_WAMPJsonDecoderc                 óZ  ‡ — d|v r|d         ‰ _         |d= nd‰ _         d|v r|d         ‰ _        |d= nd‰ _        d|v r'|d         ‰ _        |d= ‰ j        rt          j        |d<   nd‰ _        t          j        j        ‰ g|¢R i |¤Ž ˆ fd„}|‰ _        t          j
        ‰ ¦  «        ‰ _        d S )Nr‡   FÚuse_decimal_from_strÚuse_decimal_from_floatÚparse_floatc                  óŠ  •— t          | i |¤Ž\  }}‰j        r,|r)|dd…         dk    rt          |dd …         ¦  «        }||fS n.|r,|d         dk    r t          j        |dd …         ¦  «        }||fS ‰j        rHt                               |¦  «        r.	 t          j	        |¦  «        }||fS # t          j
        $ r Y nw xY w||fS )Nr   é   rŽ   r�   r:   )rœ   rˆ   r   r“   Ú	b64decodeÚ_use_decimal_from_strÚ
_DEC_MATCHÚmatchr•   r–   ÚInvalidOperation)r‹   rŒ   ÚsÚidxr   s       €r!   Ú_parse_stringz0_WAMPJsonDecoder.__init__.<locals>._parse_string’  s÷   ø€ Ý# TÐ4¨VÐ4Ð4‘��3ØÔ0ð &Øð &˜Q˜q ˜sœV tš^˜^Ý# A a b b¤E™NœN˜Ø  #˜v˜øàð &˜Q˜qœT Vš^˜^Ý"Ô,¨Q¨q¨r¨r¬UÑ3Ô3˜Ø  #˜v˜ØÔ-ð µ*×2BÒ2BÀ1Ñ2EÔ2Eð ðÝ#œO¨AÑ.Ô.˜Ø  #˜v˜øÝ"Ô3ð ð ð Ø˜ðøøøà˜#�v�s   ÂB, Â,B>Â=B>)rˆ   r¦   Ú_use_decimal_from_floatr•   r–   r‰   ÚJSONDecoderr"   Úparse_stringr›   Úpy_make_scannerÚ	scan_once)r   r‹   rŒ   r¬   s   `   r!   r"   z_WAMPJsonDecoder.__init__{  sþ   ø€ Ø(¨FÐ2Ð2Ø06Ð7PÔ0Q�Ô-ØÐ4Ð5Ð5à05�Ô-à%¨Ð/Ð/Ø-3Ð4JÔ-K�Ô*ØÐ1Ð2Ð2à-2�Ô*à'¨6Ð1Ð1Ø/5Ð6NÔ/O�Ô,ØÐ3Ð4ØÔ/ð <Ý,3¬O�F˜=Ñ)øà-2�Ô*åÔÔ% dÐ<¨TÐ<Ð<Ð<°VÐ<Ð<Ð<ðð ð ð ð ð$ !.ˆDÔõ %Ô4°TÑ:Ô:ˆDŒNˆNˆNr#   N)rW   re   rf   r"   r‚   r#   r!   rž   rž   y  s#   € € € € € ð,	;ð ,	;ð ,	;ð ,	;ð ,	;r#   rž   c                 ó>   — t          j        | |||t          ¬¦  «        S )N)r‡   r    r¡   Úcls)r‰   Úloadsrž   )rª   r‡   r    r¡   s       r!   Ú_loadsrµ   ­  s)   € ÝŒz˜!Ø2IØ/CØ1GÝ.ð	0ñ 0ô 0ð 	0r#   c                 ó@   — t          j        | ddd|t          ¬¦  «        S )N)ú,ú:F)Ú
separatorsÚensure_asciiÚ	sort_keysr‡   r³   )r‰   Údumpsr…   )rš   r‡   s     r!   Ú_dumpsr½   ´  s,   € ÝŒz˜#Ø%/Ø',Ø$)Ø2IÝ.ð0ñ 0ô 0ð 	0r#   c                   ó0   — e Zd ZeZ	 dZdZdd„Zd„ Zd„ Z	dS )r   r‰   Fc                 ó>   — || _         || _        || _        || _        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ˆ   r¦   r­   )r   Úbatchedr‡   r    r¡   s        r!   r"   zJsonObjectSerializer.__init__Ê  s)   € ð  ˆŒØ(?ˆÔ%Ø%9ˆÔ"Ø'=ˆÔ$Ð$Ð$r#   c                 óž   — t          || j        ¬¦  «        }t          |t          ¦  «        r|                     d¦  «        }| j        r|dz   S |S )zY
        Implements :func:`autobahn.wamp.interfaces.IObjectSerializer.serialize`
        )r‡   Úutf8ó   )r½   rˆ   r‘   r—   ÚencoderÀ   )r   rš   rª   s      r!   rH   zJsonObjectSerializer.serializeÝ  sU   € õ �3°Ô0MÐNÑNÔNˆÝ�a�ÑÔð 	!Ø—’˜Ñ Ô ˆAØŒ=ð 	Ø�v‘:ÐàˆHr#   c                 ó´   ‡ — ‰ j         r|                     d¦  «        dd…         }n|g}t          |¦  «        dk    rt          d¦  «        ‚ˆ fd„|D ¦   «         S )z[
        Implements :func:`autobahn.wamp.interfaces.IObjectSerializer.unserialize`
        rÄ   Néÿÿÿÿr   zbatch format errorc                 óz   •— g | ]7}t          |                     d ¦  «        ‰j        ‰j        ‰j        ¬¦  «        ‘Œ8S )rÃ   )r‡   r    r¡   )rµ   r’   rˆ   r¦   r­   )Ú.0rD   r   s     €r!   ú
<listcomp>z4JsonObjectSerializer.unserialize.<locals>.<listcomp>ó  se   ø€ ð `ð `ð `ð QUõ �t—{’{ 6Ñ*Ô*Ø/3Ô/LØ,0Ô,FØ.2Ô.JðLñ Lô Lð `ð `ð `r#   )rÀ   ÚsplitrJ   rV   )r   rP   Úchunkss   `  r!   rU   z JsonObjectSerializer.unserializeé  s‰   ø€ ð Œ=ð 	Ø—]’] 6Ñ*Ô*¨3¨B¨3Ô/ˆFˆFà�YˆFÝˆv‰;Œ;˜!ÒÐÝÐ0Ñ1Ô1Ð1ð`ð `ð `ð `ð Y_ð`ñ `ô `ð 	`r#   N)FFFF)
rW   re   rf   Ú_jsonÚJSON_MODULErX   rI   r"   rH   rU   r‚   r#   r!   r   r   ¿  sa   € € € € € à€Kðð €Dà€Fð>ð >ð >ð >ð&
ð 
ð 
ð`ð `ð `ð `ð `r#   r   c                   ó(   — e Zd ZdZ	 dZ	 dZ	 dd„ZdS )r   r‰   r:   zapplication/jsonFc                 ór   — t                                | t          |||¬¦  «        ¦  «         |r	d| _        dS dS )zŽ
        Ctor.

        :param batched: Flag to control whether to put this serialized into batched mode.
        :type batched: bool
        )rÁ   r‡   r    zjson.batchedN)r   r"   r   rB   )r   rÁ   r‡   r    s       r!   r"   zJsonSerializer.__init__  s`   € õ 	×Ò˜DÕ"6¸wØOfØL`ð#bñ #bô #bñ 	cô 	cð 	cð ð 	0Ø!/ˆDÔÐÐð	0ð 	0r#   N©FFF©rW   re   rf   rB   ÚRAWSOCKET_SERIALIZER_IDÚ	MIME_TYPEr"   r‚   r#   r!   r   r   ý  sK   € € € € € à€Mðð
  Ððð
 #€Iðð
0ð 0ð 0ð 0ð 0ð 0r#   r   ÚPyPyÚAUTOBAHN_USE_UMSGPACKc                 ó.   — t          j        | d¬¦  «        S )NT)Úuse_bin_type)ÚmsgpackÚpackb)rš   s    r!   ú<lambda>rÛ   0  s   € �Wœ]¨3¸TÐBÑBÔB€ r#   c                 ó.   — t          j        | d¬¦  «        S )NF)Úraw)rÙ   Úunpackb)rD   s    r!   rÛ   rÛ   1  s   € ¥¤°¸%Ð @Ñ @Ô @€ r#   c                   ó0   — e Zd ZdZeZdZ	 dd„Zd„ Zd„ Z	dS )	ÚMsgPackObjectSerializerrÙ   TFc                 ó   — || _         dS ©úŠ

            :param batched: Flag that controls whether serializer operates in batched mode.
            :type batched: bool
            N©rÀ   ©r   rÁ   s     r!   r"   z MsgPackObjectSerializer.__init__Q  ó   € ð $ˆDŒMˆMˆMr#   c                 ó|   — t          |¦  «        }| j        r%t          j        dt	          |¦  «        ¦  «        |z   S |S ©úa
            Implements :func:`autobahn.wamp.interfaces.IObjectSerializer.serialize`
            ú!L)Ú_packbrÀ   ÚstructÚpackrJ   ©r   rš   rD   s      r!   rH   z!MsgPackObjectSerializer.serializeY  s;   € õ ˜#‘;”;ˆDØŒ}ð Ý”{ 4­¨T©¬Ñ3Ô3°dÑ:Ð:à�r#   c                 óÌ  — | j         rÌg }t          |¦  «        }d}||k     rœ|dz   |k    rt          d¦  «        ‚t          j        d|||dz   …         ¦  «        d         }|dz   |z   |k    rt          d¦  «        ‚||dz   |dz   |z   …         }|                     t          |¦  «        ¦  «         |dz   |z   }||k     °œ||k    rt          d¦  «        ‚|S t          |¦  «        }|g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])rÀ   rJ   rV   rì   Úunpackr]   Ú_unpackb©r   rP   r`   ÚNÚiÚlrD   Úunpackeds           r!   rU   z#MsgPackObjectSerializer.unserializec  s  € ð
 Œ}ð "Ø�Ý˜‘L”L�Ø�Ø˜!’e�eà˜1‘u˜q’y�yÝ'Ð(@ÑAÔAÐAÝœ d¨G°A°a¸!±e°GÔ,<Ñ=Ô=¸aÔ@�Að ˜1‘u˜q‘y 1’}�}Ý'Ð(@ÑAÔAÐAØ" 1 q¡5¨¨Q©°© ?Ô3�Dð —K’K¥¨¡¤Ñ/Ô/Ð/ð ˜A™ ™	�Að ˜!’e�eð" ˜’6�6Ý#Ð$<Ñ=Ô=Ð=Ø�õ $ GÑ,Ô,�Ø �zÐ!r#   Nrd   )
rW   re   rf   rX   Ú_msgpackÚMSGPACK_MODULErI   r"   rH   rU   r‚   r#   r!   rà   rà   F  sZ   € € € € € àˆà!ˆàˆð	ð	$ð 	$ð 	$ð 	$ð	ð 	ð 	ð 	"ð  	"ð  	"ð  	"ð  	"r#   rà   c                   ó(   — e Zd ZdZ	 dZ	 dZ	 dd„ZdS )ÚMsgPackSerializerrÙ   r¤   zapplication/x-msgpackFc                 ón   — t                                | t          |¬¦  «        ¦  «         |r	d| _        dS 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à   rB   rå   s     r!   r"   zMsgPackSerializer.__init__ž  sF   € õ ×Ò Õ&=ÀgÐ&NÑ&NÔ&NÑOÔOÐOØð 7Ø%6�Ô"Ð"Ð"ð7ð 7r#   Nrd   rÒ   r‚   r#   r!   rý   rý   Š  sK   € € € € € à!ˆð	ð
 #$Ðð	ð
 ,ˆ	ð	ð
		7ð 		7ð 		7ð 		7ð 		7ð 		7r#   rý   c                   ó4   — e Zd ZdZdZeZdZ	 d	d„Zd„ Z	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                 ó   — || _         dS râ   rä   rå   s     r!   r"   zCBORObjectSerializer.__init__Ñ  ræ   r#   c                 ó|   — t          |¦  «        }| j        r%t          j        dt	          |¦  «        ¦  «        |z   S |S rè   )Ú_cbor_dumpsrÀ   rì   rí   rJ   rî   s      r!   rH   zCBORObjectSerializer.serializeÙ  s=   € õ ˜sÑ#Ô#ˆDØŒ}ð Ý”{ 4­¨T©¬Ñ3Ô3°dÑ:Ð:à�r#   c                 óÌ  — | j         rÌg }t          |¦  «        }d}||k     rœ|dz   |k    rt          d¦  «        ‚t          j        d|||dz   …         ¦  «        d         }|dz   |z   |k    rt          d¦  «        ‚||dz   |dz   |z   …         }|                     t          |¦  «        ¦  «         |dz   |z   }||k     °œ||k    rt          d¦  «        ‚|S t          |¦  «        }|gS rð   )rÀ   rJ   rV   rì   ró   r]   Ú_cbor_loadsrõ   s           r!   rU   z CBORObjectSerializer.unserializeã  s  € ð
 Œ}ð "Ø�Ý˜‘L”L�Ø�Ø˜!’e�eà˜1‘u˜q’y�yÝ'Ð(@ÑAÔAÐAÝœ d¨G°A°a¸!±e°GÔ,<Ñ=Ô=¸aÔ@�Að ˜1‘u˜q‘y 1’}�}Ý'Ð(@ÑAÔAÐAØ" 1 q¡5¨¨Q©°© ?Ô3�Dð —K’K¥¨DÑ 1Ô 1Ñ2Ô2Ð2ð ˜A™ ™	�Að ˜!’e�eð" ˜’6�6Ý#Ð$<Ñ=Ô=Ð=Ø�õ ' wÑ/Ô/�Ø �zÐ!r#   Nrd   )rW   re   rf   rg   rX   Ú_cborÚCBOR_MODULErI   r"   rH   rU   r‚   r#   r!   r  r  ¿  sf   € € € € € ð	ð 	ð ˆàˆàˆð	ð	$ð 	$ð 	$ð 	$ð	ð 	ð 	ð 	"ð  	"ð  	"ð  	"ð  	"r#   r  c                   ó(   — e Zd ZdZ	 dZ	 dZ	 dd„ZdS )ÚCBORSerializerr  é   zapplication/cborFc                 ón   — t                                | t          |¬¦  «        ¦  «         |r	d| _        dS dS )rÿ   r   zcbor.batchedN)r   r"   r  rB   rå   s     r!   r"   zCBORSerializer.__init__  sF   € õ ×Ò Õ&:À7Ð&KÑ&KÔ&KÑLÔLÐLØð 4Ø%3�Ô"Ð"Ð"ð4ð 4r#   Nrd   rÒ   r‚   r#   r!   r  r  
  sK   € € € € € àˆð	ð
 #$Ðð	ð
 'ˆ	ð	ð
		4ð 		4ð 		4ð 		4ð 		4ð 		4r#   r  c                   ó0   — e Zd ZdZeZdZ	 dd„Zd„ Zd„ Z	dS )	ÚUBJSONObjectSerializerÚubjsonTFc                 ó   — || _         dS râ   rä   rå   s     r!   r"   zUBJSONObjectSerializer.__init__D  ræ   r#   c                 ó†   — t          j        |¦  «        }| j        r%t          j        dt          |¦  «        ¦  «        |z   S |S rè   )r  ÚdumpbrÀ   rì   rí   rJ   rî   s      r!   rH   z UBJSONObjectSerializer.serializeL  s?   € õ ”< Ñ$Ô$ˆDØŒ}ð Ý”{ 4­¨T©¬Ñ3Ô3°dÑ:Ð:à�r#   c                 óà  — | j         rÑg }t          |¦  «        }d}||k     r¡|dz   |k    rt          d¦  «        ‚t          j        d|||dz   …         ¦  «        d         }|dz   |z   |k    rt          d¦  «        ‚||dz   |dz   |z   …         }|                     t          j        |¦  «        ¦  «         |dz   |z   }||k     °¡||k    rt          d¦  «        ‚|S t          j        |¦  «        }|gS rð   )rÀ   rJ   rV   rì   ró   r]   r  Úloadbrõ   s           r!   rU   z"UBJSONObjectSerializer.unserializeV  s  € ð
 Œ}ð "Ø�Ý˜‘L”L�Ø�Ø˜!’e�eà˜1‘u˜q’y�yÝ'Ð(@ÑAÔAÐAÝœ d¨G°A°a¸!±e°GÔ,<Ñ=Ô=¸aÔ@�Að ˜1‘u˜q‘y 1’}�}Ý'Ð(@ÑAÔAÐAØ" 1 q¡5¨¨Q©°© ?Ô3�Dð —K’K¥¤¨TÑ 2Ô 2Ñ3Ô3Ð3ð ˜A™ ™	�Að ˜!’e�eð" ˜’6�6Ý#Ð$<Ñ=Ô=Ð=Ø�õ "œ<¨Ñ0Ô0�Ø �zÐ!r#   Nrd   )
rW   re   rf   rX   r  ÚUBJSON_MODULErI   r"   rH   rU   r‚   r#   r!   r  r  9  sZ   € € € € € àˆàˆàˆð	ð	$ð 	$ð 	$ð 	$ð	ð 	ð 	ð 	"ð  	"ð  	"ð  	"ð  	"r#   r  c                   ó(   — e Zd ZdZ	 dZ	 dZ	 dd„ZdS )ÚUBJSONSerializerr  rò   zapplication/ubjsonFc                 ón   — t                                | t          |¬¦  «        ¦  «         |r	d| _        dS dS )rÿ   r   zubjson.batchedN)r   r"   r  rB   rå   s     r!   r"   zUBJSONSerializer.__init__‘  sF   € õ ×Ò Õ&<ÀWÐ&MÑ&MÔ&MÑNÔNÐNØð 6Ø%5�Ô"Ð"Ð"ð6ð 6r#   Nrd   rÒ   r‚   r#   r!   r  r  }  sK   € € € € € à ˆð	ð
 #$Ðð	ð
 )ˆ	ð	ð
		6ð 		6ð 		6ð 		6ð 		6ð 		6r#   r  )Úmessage_fbsc                   ó”   — 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„Zd„ Zd„ ZdS )	ÚFlatBuffersObjectSerializerrS   TFc                 ó,   — |r
J d¦   «         ‚|| _         dS )rã   zJWAMP-FlatBuffers serialization does not support message batching currentlyNrä   rå   s     r!   r"   z$FlatBuffersObjectSerializer.__init__¾  s$   € ð ÐlÐlÐ lÑlÔlÐlØ#ˆDŒMˆMˆMr#   c                 ó   — t          ¦   «         ‚)ré   )ÚNotImplementedErrorr™   s     r!   rH   z%FlatBuffersObjectSerializer.serializeÇ  s   € õ &Ñ'Ô'Ð'r#   c                 ó„  — t           j        j                             |d¦  «        }|                     ¦   «         }|| j        v r]| j        |         \  }} |¦   «         }|                     ¦   «         }|                     |j        |j        ¦  «          ||¬¦  «        }|gS t          d 
                    |¦  «        ¦  «        ‚)rñ   r   )Úfrom_fbsz8message type {} not yet implemented for WAMP-FlatBuffers)r  ÚMessageÚGetRootAsMessageÚMsgTyperZ   ÚMsgÚInitÚBytesÚPosr   rT   )	r   rP   Ú	union_msgÚmsg_typeÚ	fbs_klassÚ
wamp_klassÚfbs_msgÚ_tabrE   s	            r!   rU   z'FlatBuffersObjectSerializer.unserializeÍ  s·   € õ $Ô+Ô3×DÒDÀWÈaÑPÔPˆIØ ×(Ò(Ñ*Ô*ˆHà˜4Ô0Ð0Ð0Ø(,Ô(=¸hÔ(GÑ%�	˜:Ø#˜)™+œ+�Ø —}’}‘”�Ø—’˜TœZ¨¬Ñ2Ô2Ð2Ø �j¨'Ð2Ñ2Ô2�Ø�u�å)Ð*d×*kÒ*kÐltÑ*uÔ*uÑvÔvÐvr#   Nrd   )rW   re   rf   rX   rS   ÚFLATBUFFERS_MODULErI   r  ÚMessageTypeÚEVENTrv   r   ÚPUBLISHrp   rZ   r"   rH   rU   r‚   r#   r!   r  r  ®  s”   € € € € € àˆà(Ðàˆð	ð
 Ô#Ô)¨KÔ,=¸w¼}Ð+MØÔ#Ô+¨kÔ.AÀ7Ä?Ð-Sð
Ðð
	$ð 	$ð 	$ð 	$ð	(ð 	(ð 	(ð	wð 	wð 	wð 	wð 	wr#   r  c                   ó(   — e Zd ZdZ	 dZ	 dZ	 dd„ZdS )ÚFlatBuffersSerializerrS   é   zapplication/x-flatbuffersFc                 ón   — t                                | t          |¬¦  «        ¦  «         |r	d| _        dS 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  rB   rå   s     r!   r"   zFlatBuffersSerializer.__init__÷  sF   € õ ×Ò Õ&AÈ'Ð&RÑ&RÔ&RÑSÔSÐSØð ;Ø%:�Ô"Ð"Ð"ð;ð ;r#   Nrd   rÒ   r‚   r#   r!   r5  r5  ã  sK   € € € € € à%ˆð	ð
 #$Ðð	ð
 0ˆ	ð	ð
	;ð 	;ð 	;ð 	;ð 	;ð 	;r#   r5  c           	      óV  — d}d| v r>|                       d¦  «        }|d         } t          |¦  «        dk    r|d         dk    rd}| t          v rt          |          |¬¦  «        S t          d                     | t          t                               ¦   «         ¦  «        ¦  «        ¦  «        ‚)	NFú.r   r:   rÁ   Tr   z4could not create serializer for "{}" (available: {}))rË   rJ   ÚSERID_TO_SERÚRuntimeErrorrT   ÚsortedÚkeys)Úserializer_idrÁ   rø   s      r!   Úcreate_transport_serializerr?    sÎ   € Ø€GØ
ˆmÐÐØ×Ò Ñ$Ô$ˆØ˜!œˆÝˆq‰6Œ6�AŠ:ˆ:˜!˜Aœ$ )Ò+Ð+ØˆGà�Ð$Ð$Ý˜MÔ*°7Ð;Ñ;Ô;Ð;åÐQ×XÒXÐYfÕhnÕo{÷  pAò  pAñ  pCô  pCñ  iDô  iDñ  Eô  Eñ  Fô  Fð  	Fr#   c                 ób   — g }| j         D ]$}|                     t          |¦  «        ¦  «         Œ%|S )zK
    Create a list of serializers to use with a WAMP protocol factory.
    )Úserializersr]   r?  )Ú	transportrA  r>  s      r!   Úcreate_transport_serializersrC    sC   € ð €KØ"Ô.ð Gð GˆØ×ÒÕ6°}ÑEÔEÑFÔFÐFÐFØÐr#   rÑ   rd   )TÚosÚrerì   ÚplatformrK   r•   Úbinasciir   r   Útypingr   r   r   Útxaior   Úautobahn.wamp.interfacesr	   r
   r   Úautobahn.wamp.exceptionr   Úautobahn.wampr   Ú__all__ÚSERID_TO_OBJSERr:  Úobjectr   ÚenvironÚ
_USE_UJSONÚujsonÚImportErrorr‰   Úprintr´   rµ   r¼   r½   rÍ   r“   rŠ   r…   r›   Újson.decoderrœ   Úcompiler§   r®   rž   r   ÚregisterrX   r   rB   Ú_HAS_MSGPACKÚpython_implementationÚ_USE_UMSGPACKrÙ   rë   rô   rú   ÚumsgpackrÚ   rÞ   rà   r]   rý   Ú	_HAS_CBORÚcbor2r  r  r	  r  r  r  r  r  Ú_HAS_FLATBUFFERSrS   r  r  r5  r?  rC  r‚   r#   r!   ú<module>r_     sF  ðð6 
€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (à Ð Ð Ð Ð Ð Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø !Ð !Ð !Ð !Ð !Ð !ðð ð €ð
 €Ø€ðMð Mð Mð Mð M�ñ Mô Mð Mðb " R¤ZÐ/€
Øð ðØˆˆˆØˆ
ˆ
øØð ð ð ØˆˆˆØˆ
ˆ
ˆ
ðøøøð €K€K€Kð ð kà	€Eð  oñ  pô  pð  pØŒ[€FØŒ[€FØ€E€Eð €M€M€Mð;ð ;ð ;ð ;ð ;˜4Ô+ñ ;ô ;ð ;ð2 ÐÐÐÐÐØ'Ð'Ð'Ð'Ð'Ð'à�”Ð.Ñ/Ô/€Jð.;ð .;ð .;ð .;ð .;˜4Ô+ñ .;ô .;ð .;ðh0ð 0ð 0ð 0ð0ð 0ð 0ð 0ð €Eð7`ð 7`ð 7`ð 7`ð 7`˜6ñ 7`ô 7`ð 7`ðt Ð Ô Ð/Ñ 0Ô 0Ð 0Ø-A€Ð$Ô)Ñ *ð0ð 0ð 0ð 0ð 0�Zñ 0ô 0ð 0ðD €Ô �^Ñ $Ô $Ð $Ø-;€ˆ^Ô)Ñ *ð €Ø.�Ô.Ñ0Ô0°FÒ:ÐcÐ>UÐY[ÔYcÐ>c€àð ðð 	ˆˆˆð ˆØBÐBˆØ@Ð@ˆØˆˆøð ð ð ð Øˆðøøøðð 	ˆˆˆð ˆØ”ˆØÔ#ˆØˆˆøð ð ð ð Øˆðøøøð ð h(ð="ð ="ð ="ð ="ð =" &ñ ="ô ="ð ="ð~ ÐÔÐ6Ñ7Ô7Ð7à‡N‚NÐ,Ñ-Ô-Ð-Ø4K€OÐ+Ô0Ñ1ð7ð 7ð 7ð 7ð 7˜Jñ 7ô 7ð 7ð> €KÔÐ*Ñ+Ô+Ð+Ø4E€LÐ"Ô0Ñ1à‡N‚NÐ&Ñ'Ô'Ð'ð €	ðØ€L€L€Lð €IØ”+€KØ”+€KØ€E€Eøð ð 	ð 	ð 	Ø€Dð	øøøð ð o%ðD"ð D"ð D"ð D"ð D"˜vñ D"ô D"ð D"ðL ÐÔÐ3Ñ4Ô4Ð4Ø1E€OÐ(Ô-Ñ.à‡N‚NÐ)Ñ*Ô*Ð*ð4ð 4ð 4ð 4ð 4˜ñ 4ô 4ð 4ð> €KÔ˜Ñ(Ô(Ð(Ø1?€L�Ô-Ñ.à‡N‚NÐ#Ñ$Ô$Ð$ðm'Ø€M€M€Mð="ð ="ð ="ð ="ð =" ñ ="ô ="ð ="ð~ ÐÔÐ5Ñ6Ô6Ð6Ø3I€OÐ*Ô/Ñ0à‡N‚NÐ+Ñ,Ô,Ð,ð6ð 6ð 6ð 6ð 6˜:ñ 6ô 6ð 6ð> €KÔÐ)Ñ*Ô*Ð*Ø3C€LÐ!Ô/Ñ0à‡N‚NÐ%Ñ&Ô&Ð&Ð&øðW ð 	ð 	ð 	Ø€Dð	øøøð\ Ð ðØÐÐÐØ)Ð)Ð)Ð)Ð)Ð)ð ÐÐøð ð 	ð 	ð 	Ø€Dð	øøøð ð X,ð.wð .wð .wð .wð .w fñ .wô .wð .wð` ÐÔÐ:Ñ;Ô;Ð;à‡N‚NÐ0Ñ1Ô1Ð1Ø8S€OÐ/Ô4Ñ5ð;ð ;ð ;ð ;ð ; 
ñ ;ô ;ð ;ð< €KÔÐ.Ñ/Ô/Ð/Ø8M€LÐ&Ô4Ñ5à‡N‚NÐ*Ñ+Ô+Ð+ðFð Fð Fðð ð ð ð sl   Á)A0 Á0A>Á=A>Å$E3 Å3E;Å:E;Å?F ÆFÆFÈ H7 È7H?È>H?Ê?L> Ì>MÍMÍ
M ÍM!Í M!