����JFIF��������� Mr.X
  
  __  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

deexcl@216.73.217.71: ~ $
�

�y���� ��v�ddlmZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl
mZddlmZddlmZddlmZddlmZdd	lmZdd
lmZmZmZmZmZmZm Z m!Z!ddl"m#Z#m$Z$	ddl%m&Z&n
#e'$rdZ&YnwxYwddl(Z)dd
l)m*Z*ddl+m,Z,ddl-m.Z/ddl0m1Z1m2Z2m3Z3m4Z4m5Z5ddl*m6Z6m7Z7ddl8m9Z9ddl:m;Z;m<Z<m=Z=ddl>m?Z?m@Z@mAZA	ddlBmCZCeCd��ZDn
#eE$rdZDYnwxYwdZFejGeH��ZIdZJdZKdZLdZMdZNdZOdZPd ZQeReQ��ZSd!ZTd"ZUd#ZVeMeQzZWeNeQzZXd$ZYd%ZZd&Z[d'Z\d(Z]d)Z^d'Z_d*Z`d+Zad,Zbd'Zcd-Zdd+Zeefd.��ZgeReg��Zhd/Zid0Zjd1ZkegedfZleeEgedfZmege!efenffZoeepgenfZqegepfZrGd2�d3e��Zse!epe epepfesefZteGd4�d5����ZueGd6�d7����Zveeeueepefge eeuewffZxGd8�d9��ZydAd>�ZzGd?�d@��Z{dS)B�)�annotationsN)�
UserString)�	dataclass)�BytesParser)�BytesIO)�Path)�shuffle)�	token_hex)�Any�	Awaitable�Callable�Dict�List�Optional�Tuple�Union)�ParseResult�urlparse)�parse_email)�errors)�NUID)�command)�AUTHORIZATION_VIOLATION�PERMISSIONS_ERR�PONG�STALE_CONNECTION�Parser�)�ErrInvalidUserCredentials�ErrStaleConnection)�Msg)�DEFAULT_SUB_PENDING_BYTES_LIMIT�DEFAULT_SUB_PENDING_MSGS_LIMIT�Subscription)�TcpTransport�	Transport�WebSocketTransport)�versionznats-pyz0.0.0�python3sINFOsCONNECTsPINGsPONGs+OKs-ERRs
� � �s_INBOXi i���<�xii�
�sNATS/1.0�503�100�c��eZdZdS)�RawCredentialsN)�__name__�
__module__�__qualname__���o/builddir/build/BUILD/imunify360-venv-2.6.2/opt/imunify360/venv/lib/python3.11/site-packages/nats/aio/client.pyr6r6ss�������Dr;r6c�,�eZdZUdZded<dZded<dS)�ServerzA
    Server represents a NATS server in the connection pool.
    r�urir�int�
reconnectsN)r7r8r9�__doc__�__annotations__rAr:r;r<r>r>zs;��������������J������r;r>c�r�eZdZUdZded<dZded<dZded	<d
Zded<d
Zded
<dZ	ded<dZ
ded<dS)�SrvzC
    Srv is a helper data structure to hold state of a server.
    rr?rr@rAN�Optional[float]�last_attemptF�bool�did_connect�
discovered�
Optional[str]�tls_name�server_version)r7r8r9rBrCrArGrIrJrLrMr:r;r<rErE�s���������������J�����$(�L�(�(�(�(��K������J�����"�H�"�"�"�"�$(�N�(�(�(�(�(�(r;rEc��eZdZdd�Zdd�Zedd���Zedd	���Zedd
���Zedd���Z	edd���Z
edd
���Zdd�ZdS)�
ServerVersionrM�str�return�Nonec�h�||_d|_d|_d|_d|_d|_d|_dS�N)�_server_version�_major_version�_minor_version�_patch_version�_prerelease_version�_build_version�_dev_version)�selfrMs  r<�__init__zServerVersion.__init__�s@��-���-1���-1���-1���26�� �-1���+/����r;c�$�d}tj|tj��}|�|j��}|�t|j�d����|���}t|d��|_t|d��|_	t|d��|_
|dpd|_|dpd|_|jr(d	�
|j|jg��|_dS|j|_dS)
Na�
            ^
            (?P<major>0|[1-9]\d*)
            \.
            (?P<minor>0|[1-9]\d*)
            \.
            (?P<patch>0|[1-9]\d*)
            (?:-(?P<prerelease>
                (?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)
                (?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*
            ))?
            (?:\+(?P<buildmetadata>
                [0-9a-zA-Z-]+
                (?:\.[0-9a-zA-Z-]+)*
            ))?
            $
        z  is not a valid Semantic Version�major�minor�patch�
prereleaser,�
buildmetadata�+)�re�compile�VERBOSE�matchrU�
ValueError�	groupdictr@rVrWrXrYrZ�joinr[)r\�
_SEMVER_REGEX�_REGEXrh�matchess     r<�
parse_versionzServerVersion.parse_version�s���
�"��M�2�:�6�6�����T�1�2�2���=��� 4�V�V�V�W�W�W��/�/�#�#��!�'�'�"2�3�3���!�'�'�"2�3�3���!�'�'�"2�3�3���#*�<�#8�#>�B�� �%�o�6�<�"�����	9� #���$�*B�D�DW�)X� Y� Y�D���� $� 8�D���r;r@c�F�|js|���|jSrT)rVro�r\s r<r_zServerVersion.major��(���"�	!���� � � ��"�"r;c�F�|js|���|jSrT)rWrorqs r<r`zServerVersion.minor�rrr;c�F�|js|���|jSrT)rXrorqs r<razServerVersion.patch�rrr;c�F�|js|���|jSrT)rYrorqs r<rbzServerVersion.prerelease�s(���'�	!���� � � ��'�'r;c�F�|js|���|jSrT)rZrorqs r<�buildzServerVersion.build�rrr;c�J�|js|���|jpdS)Nr,)r[rorqs r<�devzServerVersion.dev�s-��� �	!���� � � �� �&�B�&r;c��d|j�d�S)Nz<nats server v�>)rUrqs r<�__repr__zServerVersion.__repr__�s��7�� 4�7�7�7�7r;N)rMrPrQrR�rQrR�rQr@�rQrP)
r7r8r9r]ro�propertyr_r`rarbrwryr|r:r;r<rOrO�s������0�0�0�0� 9� 9� 9� 9�D�#�#�#��X�#�
�#�#�#��X�#�
�#�#�#��X�#�
�(�(�(��X�(�
�#�#�#��X�#�
�'�'�'��X�'�
8�8�8�8�8�8r;rO�ex�	ExceptionrQrRc��BK�t�d|���dS)z]
    Provides a default way to handle async errors if the user
    does not provide one.
    �nats: encountered error��exc_infoN)�_logger�error)r�s r<�_default_error_callbackr��s%����
�M�M�+�b�M�9�9�9�9�9r;c#��eZdZUdZeZded<dZdZdZ	dZ
dZd	Zd
Z
d�d
�Zd�d�Zdgdddddddddeeeeededddddddedddddeedddf#d�dF�Zd�dG�Zd�dH�Zd�dL�Zd�dN�Zd�dO�Zd�dP�Zd�d�dS�Z d�dT�Z!			d�d�d]�Z"d�d`�Z#dVddde$e%fd�dj�Z&d�d�dl�Z'd�dn�Z(d�do�Z)d�dr�Z*				d�d�dw�Z+		d�d�dx�Z,d�dy�Z-d�d�dz�Z.d�d�d|�Z/e0fd�d}�Z1e2d�d���Z3e2d�d����Z4e2d�d����Z5e2d�d����Z6d�d��Z7e2d�d����Z8e2d�d����Z9e2d�d����Z:e2d�d����Z;e2d�d����Z<e2d�d����Z=e2d�d����Z>e2d�d����Z?e2d�d����Z@e2d�d����ZAe2d�d����ZBe2d�d����ZCd�d�d��ZD	d�d�d��ZEeFd�d����ZGd�d��ZHd�d��ZId�d��ZJd�d��ZKd�d��ZLd�d��ZMd�d��ZNd�d��ZOd�d��ZPd�d��ZQd�d��ZRd�d��ZSd�d��ZTd�d��ZUd�d�d��ZVd�d��ZWd�d��ZXd�d�d��ZYd�d��ZZd�d��Z[d�d��Z\d�d„Z]d�dÄZ^d�dńZ_d�dDŽZ`dS)��Clientz(
    Asyncio based client for NATS.
    z	type[Msg]�	msg_classrrr-r4���rQrPc��dt�d�S)Nz<nats client vr{)�__version__rqs r<r|zClient.__repr__s��.��.�.�.�.r;rRc��d|_i|_g|_d|_d|_d|_d|_g|_d|_d|_	t|_d|_d|_
d|_d|_d|_d|_d|_t&|_d|_d|_i|_t0j|_t7|��|_g|_d|_d|_d|_ d|_!d|_"tG��|_$i|_%d|_&tO��|_(tStT��|_+d|_,d|_-d|_.d|_/d|_0d|_1d|_2i|_3ddddddd�|_4dS)NrF)�in_msgs�out_msgs�in_bytes�	out_bytesrA�errors_received)5�_current_server�_server_info�_server_pool�
_reading_task�_ping_interval_task�_pings_outstanding�_pongs_received�_pongs�
_transport�_errr��	_error_cb�_disconnected_cb�
_closed_cb�_discovered_server_cb�_reconnected_cb�_reconnect_to_server_handler�_reconnection_task�_reconnection_task_future�DEFAULT_MAX_PAYLOAD_SIZE�_max_payload�
_client_id�_sid�_subsr��DISCONNECTED�_statusr�_ps�_pending�_pending_data_size�_max_pending_size�_flush_queue�
_flusher_task�_flush_timeoutr�_hdr_parser�	_resp_map�_resp_sub_prefixr�_nuid�	bytearray�DEFAULT_INBOX_PREFIX�
_inbox_prefix�_auth_configured�_user_jwt_cb�
_signature_cb�_user_credentials�_nkeys_seed�_nkeys_seed_str�_public_nkey�options�statsrqs r<r]zClient.__init__s���.2���,.���')���59���;?�� �'(���$%���,.���/3���)-��	�)@���48���.2���9=��"�37���PT��)�@D���CG��&�!9���*.�����	�.0��
�"�/���!�$�<�<���&(��
�()���'(���JN���59���/0���(3�
�
���57���59����V�V��
�&�';�<�<���&+���48���
;?���9=���+/���.2���+/���')�������� �

�
��
�
�
r;znats://localhost:4222NFT�servers�Union[str, List[str]]�error_cb�Optional[ErrorCallback]�disconnected_cb�Optional[Callback]�	closed_cb�discovered_server_cb�reconnected_cb�namerK�pedanticrH�verbose�allow_reconnect�connect_timeoutr@�reconnect_time_wait�max_reconnect_attempts�
ping_interval�max_outstanding_pings�dont_randomize�flusher_queue_size�no_echo�tls�Optional[ssl.SSLContext]�tls_hostname�tls_handshake_first�user�password�token�#Optional[Union[str, TokenCallback]]�
drain_timeout�signature_cb�Optional[SignatureCallback]�user_jwt_cb�Optional[JWTCallback]�user_credentials�Optional[Credentials]�
nkeys_seed�nkeys_seed_str�inbox_prefix�Union[str, bytes]�pending_size�
flush_timeoutrF�ws_connection_headers�Optional[Dict[str, List[str]]]�reconnect_to_server_handler�"Optional[ReconnectToServerHandler]c$��|K�|||||fD]$}$|$r tj|$��stj��%|�|��|pt
|_||_||_||_	||_
|#|_t|t��r|���}t|t��sJ�t!|��|_||_||_||_||_||_|	|jd<||jd<||jd<|
|jd<||jd<||jd<|
|jd<||jd<||jd	<||jd
<||jd<||jd<||jd
<||jd<||jd<||jd<|"|jd<|r
||jd<|r
||jd<d}%t1|j��dkr&|jD]}&|&jjs|&jjrd}%n�|s|s|s|%rd|_|j�|j�|j�d|_|���tj|���|_ | |_!|!|_"|jddurtG|j��		|�$���d{V��|�%���d{V��|j&s
Jd���d|j&_'dS#tj($r$}'|jddkrYd}'~'�z|'|_)|'�d}'~'wtTtj+tj,f$r�}'|'|_)|�|'���d{V��|jds|'�|�-t\j/d���d{V��|j&�2taj1��|j&_2|j&xj'dz
c_'Yd}'~'nd}'~'wwxYw��E)a�
        Establishes a connection to NATS.

        :param servers: NATS Connection
        :param name: Label the connection with name (shown in NATS monitoring)
        :param error_cb: Callback to report errors.
        :param disconnected_cb: Callback to report disconnection from NATS.
        :param closed_cb: Callback to report when client stops reconnection to NATS.
        :param discovered_server_cb: Callback to report when a new server joins the cluster.
        :param pending_size: Max size of the pending buffer for publishing commands.
        :param flush_timeout: Max duration to wait for a forced flush to occur.

        Connecting setting all callbacks::

            import asyncio
            import nats

            async def main():
                async def disconnected_cb():
                    print('Got disconnected!')

                async def reconnected_cb():
                    print(f'Got reconnected to {nc.connected_url.netloc}')

                async def error_cb(e):
                    print(f'There was an error: {e}')

                async def closed_cb():
                    print('Connection is closed')

                # Connect to NATS with logging callbacks.
                nc = await nats.connect('demo.nats.io',
                                         error_cb=error_cb,
                                         reconnected_cb=reconnected_cb,
                                         disconnected_cb=disconnected_cb,
                                         closed_cb=closed_cb,
                                         )

                async def handler(msg):
                    print(f'Received a message on {msg.subject} {msg.reply}: {msg.data}')
                    await msg.respond(b'OK')

                sub = await nc.subscribe('help.please', cb=handler)

                resp = await nc.request('help.please', b'help')
                print('Response:', resp)

                await nc.close()

            if __name__ == '__main__':
                asyncio.run(main())

        Using a context manager::

            import asyncio
            import nats

            async def main():

                is_done = asyncio.Future()

                async def closed_cb():
                    print('Connection to NATS is closed.')
                    is_done.set_result(True)

                async with (await nats.connect('nats://demo.nats.io:4222', closed_cb=closed_cb)) as nc:
                    print(f'Connected to NATS at {nc.connected_url.netloc}...')

                    async def subscribe_handler(msg):
                        subject = msg.subject
                        reply = msg.reply
                        data = msg.data.decode()
                        print('Received a message on '{subject} {reply}': {data}'.format(
                            subject=subject, reply=reply, data=data))

                    await nc.subscribe('discover', cb=subscribe_handler)
                    await nc.flush()

                    for i in range(0, 10):
                        await nc.publish('discover', b'hello world')
                        await asyncio.sleep(0.1)

                await asyncio.wait_for(is_done, 60.0)

            if __name__ == '__main__':
                asyncio.run(main())

        r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�FrTN)�maxsizez5the current server must be set by _select_next_serverr)3�asyncio�iscoroutinefunctionr�InvalidCallbackTypeError�_setup_server_poolr�r�r�r�r�r�r��
isinstancerP�encode�bytesr�r�r�r�r�r�r�r��lenr�r?�usernamer�r��_setup_nkeys_connect�Queuer�r�r�r	�_select_next_server�_process_connect_initr�rA�NoServersErrorr��OSError�Error�TimeoutError�_closer�r��time�	monotonicrG)(r\r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��cb�server_auth_configured�server�es(                                        r<�connectzClient.connectVs�����@
���� �
�	6�	6�B��
6�'�5�b�9�9�
6��5�5������(�(�(�!�<�%<���#���%9��"�-��� /���,G��)��l�C�(�(�	1�'�.�.�0�0�L��,��.�.�.�.�.�&�|�4�4���*���'���!1���%���-���#*���Y��#+���Z� �#���V��*9���&�'�)7���%�&�.A���*�+�1G���-�.�(5���_�%�0E���,�-�")���Y��#���V��#+���Z� � %���W��*9���&�'�(5���_�%�.A���*�+�0E���,�-��	&�"%�D�L����	8�+7�D�L��(�"'���t� �!�!�A�%�%��+�
�
���:�&��&�*�*=��-1�*��E���	)�8�	)�u�	)�(>�	)�$(�D�!��!�-��1A�1M�QU�Qe�Qq�$(�D�!��%�%�'�'�'�$�M�2D�E�E�E���".���,����<�(�)�U�2�2��D�%�&�&�&�	9�
9��.�.�0�0�0�0�0�0�0�0�0��0�0�2�2�2�2�2�2�2�2�2��+�d�d�-d�d�d�+�23��$�/�����(�
�
�
��<� 8�9�A�=�=��H�H�H�H���	��������V�\�7�+?�@�
9�
9�
9���	��n�n�Q�'�'�'�'�'�'�'�'�'��|�$5�6���G��k�k�&�"5�u�=�=�=�=�=�=�=�=�=��'�3�8<��8H�8H�D�(�5��(�3�3�q�8�3�3����������
9����	9s,�:AK
�
N9�K;�2	K;�;$N9�BN4�4N9c�h�|j�|���dS|���dSrT)r��_setup_nkeys_jwt_connect�_setup_nkeys_seed_connectrqs r<rzClient._setup_nkeys_connect@s;���!�-��)�)�+�+�+�+�+��*�*�,�,�,�,�,r;c�������js
Jd���ddl�ddl��j�t�t��r4t���dksJ�d
��fd�}|�_d���fd
�}|�_dSt�t��s*t�t��st�t��rd
��fd�}|�_d���fd�}|�_dSdS)Nz_user_credentials requiredrr-rQr�c���d}t�dd��5}t��|�����j��}|�|��ddd��n#1swxYwY|S�Nr�rb)�openr��fstat�fileno�st_size�readinto)�contents�f�creds�oss  ��r<�user_cbz0Client._setup_nkeys_jwt_connect.<locals>.user_cbQs�������%��(�D�)�)�)�Q�(����!�(�(�*�*�)=�)=�)E�F�F�H��J�J�x�(�(�(�)�)�)�)�)�)�)�)�)�)�)����)�)�)�)� ���AA5�5A9�<A9�noncerPr�c����d}t�dd��5}t��|�����j��}|�|��ddd��n#1swxYwY��|��}|�|�����}tj
|��}|���~~|S)Nrr)rr�rrrr�	from_seed�signr��base64�	b64encode�wipe)	r#�seedr�kp�
raw_signed�sigr�nkeysr s	      ���r<�sig_cbz/Client._setup_nkeys_jwt_connect.<locals>.sig_cbZs�������%��(�D�)�)�%�Q�$�R�X�X�a�h�h�j�j�%9�%9�%A�B�B�D��J�J�t�$�$�$�%�%�%�%�%�%�%�%�%�%�%����%�%�%�%��_�_�T�*�*���W�W�U�\�\�^�^�4�4�
��&�z�2�2�����	�	�	����
r"c�.�������SrT)�_read_creds_user_jwt)rr\s��r<r!z0Client._setup_nkeys_jwt_connect.<locals>.user_cbls����0�0��7�7�7r;c��������}��|��}|�|�����}t	j|��}|���~~|SrT)�_read_creds_user_nkeyr%r&r�r'r(r))r#�	user_seedr+r,r-rr.r\s     ���r<r/z/Client._setup_nkeys_jwt_connect.<locals>.sig_cbqsj��� �6�6�u�=�=�	��_�_�Y�/�/���W�W�U�\�\�^�^�4�4�
��&�z�2�2�����	�	�	����
r;)rQr��r#rPrQr�)r�r r.r��tupler�r�r�rPrr)r\r!r/rr.r s`  @@@r<rzClient._setup_nkeys_jwt_connectFsg�������%�C�C�'C�C�C�%��	�	�	�����!�3���e�U�#�#�/	(��u�:�:��?�?�?�?�
 �
 �
 �
 �
 �
 �
 �!(�D��

�

�

�

�

�

�

�

�"(�D����
��s�
#�
#�	(�z�%��'D�'D�	(�
�SX�Z^�H_�H_�	(�
8�
8�
8�
8�
8�
8�
8�!(�D��

�

�

�

�

�

�

�

�"(�D����'	(�	(r;r�str | UserString | Pathr�c��d�}t|t��r/|t|j�������St|dd���5}||��cddd��S#1swxYwYdS)Nc�>�|D]�}d|vr�|���}	t|��n#t$rt�wxYw|���}||z
dz
}|�|��t|��}|�|��|cS��dS)NsBEGIN USER NKEY SEEDr)�tell�next�
StopIterationr�seekr�r)r�line�nkey_start_pos�nkey_end_pos�	nkey_sizer4s      r<�
get_user_seedz3Client._read_creds_user_nkey.<locals>.get_user_seed�s����
%�
%��+�d�2�2�%&�V�V�X�X�N�8��Q������(�8�8�8�7�7�8����#$�6�6�8�8�L� ,�~� =�� A�I��F�F�>�*�*�*�!*�)� 4� 4�I��J�J�y�)�)�)�$�$�$�$�3�	
%�
%s	�.�Arr)�	buffering�r�rr�datar�r)r\rrBrs    r<r3zClient._read_creds_user_nkeys���	%�	%�	%�*�e�Z�(�(�	?� �=����):�):�)<�)<�!=�!=�>�>�>�
�%���
+�
+�
+�	$�q� �=��#�#�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$�	$����	$�	$�	$�	$�	$�	$s�A2�2A6�9A6�str | RawCredentials | Pathc��d�}t|t��r/|t|j�������St|d��5}||��cddd��S#1swxYwYdS)Nc���d}	t|�����}d|vr"t|�����}n�H|dt|��dz
�S)NTsBEGIN NATS USER JWTr)r��readliner�)r�user_jwtr>s   r<�get_user_jwtz1Client._read_creds_user_jwt.<locals>.get_user_jwt�sg���H�
� ������.�.��)�T�1�1�(������6�6�H��	
��/�c�(�m�m�a�/�/�0�0r;rrD)r\rrKrs    r<r1zClient._read_creds_user_jwt�s���	1�	1�	1��e�Z�(�(�	>��<���
�(9�(9�(;�(;� <� <�=�=�=�
�%��
�
�	#�!��<��?�?�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#�	#����	#�	#�	#�	#�	#�	#s�A0�0A4�7A4c�������js�js
Jd���ddl�d
��fd�����}|j����_|���~d�fd	�}|�_dS)N�#Client.connect must be called firstrrQ�
nkeys.KeyPairc���ddl}�jr't�j�����}n}�j}t|d��5}t|�|�����j��}|�	|��ddd��n#1swxYwY��
|��}~|Sr)r r�r�r�r�rrrrrr%)r r*rr�key_pairr.r\s     ��r<�_get_nkeys_seedz9Client._setup_nkeys_seed_connect.<locals>._get_nkeys_seed�s�����I�I�I��#�
%� ��!5�!<�!<�!>�!>�?�?����(���%��&�&�%�!�$�R�X�X�a�h�h�j�j�%9�%9�%A�B�B�D��J�J�t�$�$�$�%�%�%�%�%�%�%�%�%�%�%����%�%�%�%����t�,�,�H���Os�AB&�&B*�-B*r#rPr�c������}|�|�����}tj|��}|���~|SrT)r&r�r'r(r))r#r+r,r-rQs    �r<r/z0Client._setup_nkeys_seed_connect.<locals>.sig_cb�sP��� ��"�"�B���������0�0�J��"�:�.�.�C�
�G�G�I�I�I���Jr;)rQrNr5)r�r�r.�
public_key�decoder�r)r�)r\r+r/rQr.s`  @@r<rz Client._setup_nkeys_seed_connect�s��������^�4�#7�^�^�9^�^�^�7�����	�	�	�	�	�	�	��_�
�
���M�0�0�2�2���
���	�	�	��	�	�	�	�	�	�$����r;c��TK�|�tj���d{V��dS)z�
        Closes the socket to which we are connected and
        sets the client to be in the CLOSED state.
        No further reconnections occur once reaching this point.
        N�r	r��CLOSEDrqs r<�closezClient.close�s4�����k�k�&�-�(�(�(�(�(�(�(�(�(�(�(r;�status�do_cbsc��xK�|jr	||_dStj|_|����d{V��|j�2|j���s|j���|j�2|j���s|j���|j	�2|j	���s|j	���|j
��|j
���s�|j
���	|j�D|j���s+tj|j|jd���d{V��n!#tjtjf$rYnwxYwtjd���d{V��|j�f|jr_|jdkrT|j�|jdd���g|_d|_|j����d{V��|j���D]�}|jr2|j���s|j���|jr|j���|jrI|j���D]}|����|j�����|j���|j�l|j� ��	|j�!���d{V��n2#tD$r%}|�#|���d{V��Yd}~nd}~wwxYw|rB|j$�|�$���d{V��|j%�|�%���d{V��d|_&d|_'dS)Nr�r)(�	is_closedr�r�rW�_flush_pendingr��	cancelled�cancelr�r�r��doner�r��wait_forr��CancelledErrorr�sleepr�r�r��
writelinesr��drainr��values�_wait_for_msgs_task�_message_iterator�_cancel�_pending_next_msgs_calls�clearrX�wait_closedr�r�r�r�r�r�)r\rYrZ�sub�futrs      r<r	z
Client._close�s,�����>�	�!�D�L��F��}����!�!�#�#�#�#�#�#�#�#�#���)�$�2D�2N�2N�2P�2P�)���%�%�'�'�'��#�/��8P�8Z�8Z�8\�8\�/��$�+�+�-�-�-���)�$�2D�2N�2N�2P�2P�)���%�%�'�'�'��"�.�t�7N�7S�7S�7U�7U�.��#�*�*�,�,�,�
��1�=�d�Fd�Fn�Fn�Fp�Fp�=�!�*��6���%:�;�������������*�G�,@�A�
�
�
���
�����m�A������������+���+��&��*�*���*�*�4�=����+;�<�<�<� "��
�*+��'��o�+�+�-�-�-�-�-�-�-�-�-��:�$�$�&�&�	5�	5�C��&�
1�s�/F�/K�/K�/M�/M�
1��'�.�.�0�0�0��$�
0��%�-�-�/�/�/��+�
5��7�>�>�@�@�!�!�C��J�J�L�L�L�L��,�2�2�4�4�4���
�������?�&��O�!�!�#�#�#�
(��o�1�1�3�3�3�3�3�3�3�3�3�3���
(�
(�
(��n�n�Q�'�'�'�'�'�'�'�'�'�'�'�'�'�'�����
(�����	(��$�0��+�+�-�-�-�-�-�-�-�-�-���*��o�o�'�'�'�'�'�'�'�'�'���� $����s+�#AE/�/F
�F
�L6�6
M%�M � M%c��NK�|jrdS|jrtj�|js|jrtj�g}|j���D]Q}|�	��}tj���|��}|�
|���Rtj|�}tjd���d{V��t j|_	tj||jd���d{V��ny#tj$rW|���|���|�tj�����d{V��Yntj$rYnwxYwt j|_|����d{V��|�t j���d{V��dS#t j|_|����d{V��|�t j���d{V��wxYw)a�
        drain will put a connection into a drain state. All subscriptions will
        immediately be put into a drain state. Upon completion, the publishers
        will be drained and can not publish any additional messages. Upon draining
        of the publishers, the connection will be closed. Use the `closed_cb`
        option to know when the connection has moved from draining to closed.

        Nrr�)�is_drainingr\r�ConnectionClosedError�
is_connecting�is_reconnecting�ConnectionReconnectingErrorr�rf�_drainr��get_running_loop�create_task�append�gatherrcr��
DRAINING_SUBSr�rar�r�	exceptionr_r��DrainTimeoutErrorrb�
DRAINING_PUBS�flushr	rW)r\�drain_tasksrm�coro�task�
drain_is_dones      r<rezClient.drain#sY������	��F��>�	/��.�.���	5��!5�	5��4�4����:�$�$�&�&�	%�	%�C��:�:�<�<�D��+�-�-�9�9�$�?�?�D����t�$�$�$�$����4�
�
�m�A�����������+���	-��"�=�$�,��2O�P�P�P�P�P�P�P�P�P�P���#�	=�	=�	=��#�#�%�%�%�� � �"�"�"��.�.��!9�!;�!;�<�<�<�<�<�<�<�<�<�<�<��%�	�	�	��D�	����"�/�D�L��*�*�,�,���������+�+�f�m�,�,�,�,�,�,�,�,�,�,�,��"�/�D�L��*�*�,�,���������+�+�f�m�,�,�,�,�,�,�,�,�,�,���s8� &D�G�A#E=�*G�,E=�:G�<E=�=G�AH$r;r,�subject�payloadr��reply�headers�Optional[Dict[str, str]]c��BK�|jrtj�|jrtj�t|��}|js*|jdks||jz|jkrtj	�||j
krtj�|�|||||���d{V��dS)ab
        Publishes a NATS message.

        :param subject: Subject to which the message will be published.
        :param payload: Message data.
        :param reply: Inbox to which a responder can respond.
        :param headers: Optional message header.

        ::

            import asyncio
            import nats

            async def main():
                nc = await nats.connect('demo.nats.io')

                # Publish as message with an inbox.
                inbox = nc.new_inbox()
                sub = await nc.subscribe('hello')

                # Simple publishing
                await nc.publish('hello', b'Hello World!')

                # Publish with a reply
                await nc.publish('hello', b'Hello World!', reply=inbox)

                # Publish with headers
                await nc.publish('hello', b'With Headers', headers={'Foo':'Bar'})

                while True:
                    try:
                        msg = await sub.next_msg()
                    except:
                        break
                    print('----------------------')
                    print('Subject:', msg.subject)
                    print('Reply  :', msg.reply)
                    print('Data   :', msg.data)
                    print('Headers:', msg.header)

            if __name__ == '__main__':
                asyncio.run(main())

        rN)
r\rrq�is_draining_pubs�ConnectionDrainingErrorr��is_connectedr�r��OutboundBufferLimitErrorr��MaxPayloadError�
_send_publish)r\r�r�r�r��payload_sizes      r<�publishzClient.publishNs�����h�>�	/��.�.�� �	1��0�0��7�|�|��� �	6��%��*�*�l�T�=T�.T�W[�Wm�.m�.m��5�5��$�+�+�+��(�(�� � ��%��,��P�P�P�P�P�P�P�P�P�P�Pr;r��Optional[Dict[str, Any]]c���K�|dkrtj�d}|�tj|||��}�n5t	��}|�t��|�t��|���D]�\}}	|�	��}
|
s�|�|
�
����|�d��|	�	��}|�|�
����|�t����|�t��tj||||��}|jdxxdz
cc<|jdxx|z
cc<|�
|���d{V��|j�5|j���r|����d{V��dSdSdS)z7
        Sends PUB command to the NATS server.
        r,Ns: r�rr�)r�BadSubjectError�prot_command�pub_cmdr��extend�
NATS_HDR_LINE�_CRLF_�items�stripr��hpub_cmdr��
_send_commandr��emptyr])r\r�r�r�r�r�r��hdr�k�v�key�values            r<r�zClient._send_publish�s������b�=�=��(�(����?�"�*�7�E�7�C�C�G�G��+�+�C��J�J�}�%�%�%��J�J�v�����
�
���	
#�	
#���1��g�g�i�i������
�
�3�:�:�<�<�(�(�(��
�
�5�!�!�!����	�	���
�
�5�<�<�>�>�*�*�*��
�
�6�"�"�"�"��J�J�v����"�+�G�U�C��I�I�G��
�:����!�#�����
�;����<�/����� � ��)�)�)�)�)�)�)�)�)���(�T�->�-D�-D�-F�-F�(��%�%�'�'�'�'�'�'�'�'�'�'�'�)�(�(�(r;�queuer�*Optional[Callable[[Msg], Awaitable[None]]]�future�Optional[asyncio.Future]�max_msgs�pending_msgs_limit�pending_bytes_limitr$c��zK�|rd|vrtj�|rd|vrtj�|jrtj�|jrtj�|xjdz
c_|j}t|||||||||��	�	}	|	�|j	��|	|j
|<|�|	���d{V��|	S)a
        subscribe registers interest in a given subject.

        If a callback is provided, messages will be processed asynchronously.

        If a callback isn't provided, messages can be retrieved via an
        asynchronous iterator on the returned subscription object.
        � r)r�rr�r�r�r�N)rr�r\rqrpr�r�r$�_startr�r��_send_subscribe)
r\r�r�rr�r�r�r��sidrms
          r<�	subscribezClient.subscribe�s�����$�	)�3�'�>�>��(�(��	)�c�U�l�l��(�(��>�	/��.�.���	1��0�0��	�	�Q��	�	��i����������1� 3�

�

�

��	�
�
�4�>�"�"�"���
�3���"�"�3�'�'�'�'�'�'�'�'�'��
r;r�c�<�|j�|d��dSrT)r��pop)r\r�r�s   r<�_remove_subzClient._remove_sub�s���
���s�D�!�!�!�!�!r;rmc��K�d}|j�&tj|jt|j��}n%tj|j|j|j��}|�|���d{V��|����d{V��dSrT)�_queuer��sub_cmd�_subject�EMPTY�_idr�r])r\rmr�s   r<r�zClient._send_subscribe�s��������:��"�*�3�<����H�H�G�G�"�*�3�<���S�W�M�M�G�� � ��)�)�)�)�)�)�)�)�)��!�!�#�#�#�#�#�#�#�#�#�#�#r;c��K�i|_|jdd�|_|j�d��|j�|j�����|j�d��|jdd�}|�d��|�|���|j����d{V��dS)N�.�*)r)	r�r�r�r�r�r;r�rT�_request_sub_callback)r\�resp_mux_subjects  r<�_init_request_subzClient._init_request_sub�s�������� $� 2�1�1�1� 5�����$�$�T�*�*�*���$�$�T�Z�_�_�%6�%6�7�7�7���$�$�T�*�*�*��0����3������%�%�%��n�n�-�4�4�6�6�4�;U�n�V�V�V�V�V�V�V�V�V�V�Vr;�msgr!c���K�|jt|j��dzdzd�}|j�|��}|sdS|���s|�|��dSdS)N�r-)r�r�r�r��getr`�
set_result)r\r�r�r�s    r<r�zClient._request_sub_callbacks�������C�� 2�3�3�b�8�1�<�>�>�?����#�#�E�*�*���	��F��{�{�}�}�	#����c�"�"�"�"�"�	#�	#r;��?�timeout�float�	old_stylec��&K�|r|�|||����d{V��S|�||||����d{V��}|jrH|j�tjjjj��tkrtj�|S)z�
        Implements the request/response pattern via pub/sub
        using a single wildcard subscription that handles
        the responses.

        )r�N)r�r�)�_request_old_style�_request_new_styler�r��nats�js�api�Header�STATUS�NO_RESPONDERS_STATUSr�NoRespondersError)r\r�r�r�r�r�r�s       r<�requestzClient.requests������	d��0�0��'�7�0�S�S�S�S�S�S�S�S�S��/�/���'�[b�/�c�c�c�c�c�c�c�c�C��;�	+�3�;�?�?�4�7�;�+=�+D�E�E�I]�]�]��*�*��
r;c�����K��jrtj��js�����d{V���jsJ��j������td���	�����jdd�}|����tj��}|���fd���|�j
����<��|||���|����d{V��	tj||���d{V��S#tj$r
tj�wxYw)Nr-c�^���j�����d��SrT)r�r�rT)rr\r�s ��r<�<lambda>z+Client._request_new_style.<locals>.<lambda>;s!���4�>�+=�+=�e�l�l�n�n�d�+S�+S�r;)r�r�)r�rr�r�r�r�r;r�r
r�r��Future�add_done_callbackr�rTr�rar)r\r�r�r�r��inboxr�r�s`      @r<r�zClient._request_new_style%s�������� �	1��0�0��$�	+��(�(�*�*�*�*�*�*�*�*�*��$�$�$�$��
���!�!��
���Y�q�\�\�(�(�*�*�+�+�+��%�a�a�a�(��
���U����")��!1�!1��� � �!S�!S�!S�!S�!S�T�T�T�)/���u�|�|�~�~�&��l�l�7�G�5�<�<�>�>�7�l�S�S�S�S�S�S�S�S�S�	&� �)�&�'�:�:�:�:�:�:�:�:�:���#�	&�	&�	&��%�%�	&���s�-E�E$c���|jdd�}|�d��|�|j�����|���S)aW
        new_inbox returns a unique inbox that can be used
        for NATS requests or subscriptions::

           # Create unique subscription to receive direct messages.
           inbox = nc.new_inbox()
           sub = await nc.subscribe(inbox)
           nc.publish('broadcast', b'', reply=inbox)
           msg = sub.next_msg()
        Nr�)r�r�r�r;rT)r\�
next_inboxs  r<�	new_inboxzClient.new_inboxGs[���'����*�
����$�������$�*�/�/�+�+�,�,�,�� � �"�"�"r;c��xK�|���}tj��}|�||d����d{V��}|�d����d{V��|�|||����d{V��	tj||���d{V��}|jrH|j�tj
jjj
��tkrtj�|S#tj$r;|����d{V��|���tj�wxYw)z�
        Implements the request/response pattern via pub/sub
        using an ephemeral subscription which will be published
        with a limited interest of 1 reply returning the response
        or raising a Timeout error.
        r)r�r�N)�limit)r�)r�r�r�r��unsubscriber�rar�r�r�r�r�r�r�r�rr�rr_)r\r�r�r�r�r�rmr�s        r<r�zClient._request_old_styleWsX������� � ��&-�n�&6�&6���N�N�5��!�N�D�D�D�D�D�D�D�D���o�o�A�o�&�&�&�&�&�&�&�&�&��l�l�7�G�5�l�9�9�9�9�9�9�9�9�9�		&��(���9�9�9�9�9�9�9�9�C��{�
3��;�?�?�4�7�;�#5�#<�=�=�AU�U�U� �2�2��J���#�	&�	&�	&��/�/�#�#�#�#�#�#�#�#�#��M�M�O�O�O��%�%�	&���s�A+C/�/A
D9r�c��K�tj||��}|�|���d{V��|����d{V��dSrT)r��	unsub_cmdr�r])r\r�r�r�s    r<�_send_unsubscribezClient._send_unsubscribepsh���� �*�3��6�6�	�� � ��+�+�+�+�+�+�+�+�+��!�!�#�#�#�#�#�#�#�#�#�#�#r;c��NK�|dkrtj�|jrtj�t	j��}	|�|���d{V��t	j||���d{V��dS#tj$r!|�	��tj
�wxYw)a7
        Sends a ping to the server expecting a pong back ensuring
        what we have written so far has made it to the server and
        also enabling measuring of roundtrip time.
        In case a pong is not returned within the allowed timeout,
        then it will raise nats.errors.TimeoutError
        rN)r�BadTimeoutErrorr\rqr�r��
_send_pingrarr_�FlushTimeoutError)r\r�r�s   r<r~zClient.flushus������a�<�<��(�(��>�	/��.�.�!(��!1�!1��	+��/�/�&�)�)�)�)�)�)�)�)�)��"�6�7�3�3�3�3�3�3�3�3�3�3�3���#�	+�	+�	+��M�M�O�O�O��*�*�	+���s�6A4�40B$�Optional[ParseResult]c�:�|jr|jr|jjSdSrT)r�r�r?rqs r<�
connected_urlzClient.connected_url�s(����	,�D�$5�	,��'�+�+��tr;�List[ParseResult]c�R�g}|jD]}|�|j���|SrT)r�rxr?�r\r��srvs   r<r�zClient.servers�s5�����$�	$�	$�C��N�N�3�7�#�#�#�#��r;c�`�g}|jD]#}|jr|�|j���$|SrT)r�rJrxr?r�s   r<�discovered_serverszClient.discovered_servers�s=�����$�	(�	(�C��~�
(����s�w�'�'�'���r;�List[Server]c�$�d�|jD��S)z<
        Returns a copy of the current server pool.
        c�D�g|]}t|j|j�����S�)r?rA�r>r?rA)�.0r�s  r<�
<listcomp>z&Client.server_pool.<locals>.<listcomp>�s)��\�\�\�3��3�7�s�~�>�>�>�\�\�\r;)r�rqs r<�server_poolzClient.server_pool�s��
]�\�$�J[�\�\�\�\r;�	List[str]c��|jrtj�g}|D]�}|�|��}t	|��}|jD]=}|jj|jkr&|j|_|j	|_	|j
|_
n�>|�|����||_|j�W|jjj}d}|D]}|jj|kr||_d}n�|s$t|��dkr|d|_dSdSdSdS)a�
        Replaces the current server pool with the provided list of server URLs.

        The new pool will be used on the next reconnect attempt. It does not
        trigger an immediate reconnect. The new pool is subject to the same
        rules as the default one (randomization unless disabled, max reconnect
        attempts, etc).

        Unless advertised server discovery is disabled, the client will
        continue to discover and add new servers to the pool as it receives
        INFO messages from the server.

        :param servers: List of server URLs to use as the new pool.
        :raises errors.ConnectionClosedError: If the connection is closed.
        NFTr)r\rrq�_parse_server_urirEr�r?�netlocrArIrGrxr�r�)	r\r��new_poolrr?r��old_srv�current_netloc�founds	         r<�set_server_poolzClient.set_server_pool�sN�� �>�	/��.�.�!���
	!�
	!�F��(�(��0�0�C��c�(�(�C��,�
�
���;�%���3�3�%,�%7�C�N�&-�&9�C�O�'.�';�C�$��E�	4�

�O�O�C� � � � �$�����+�!�1�5�<�N��E��
�
���7�>�^�3�3�+.�D�(� �E��E�4��
3�S��]�]�Q�.�.�'/��{��$�$�$�,�+�
3�
3�.�.r;c��|jS)zQ
        Returns the max payload which we received from the servers INFO
        )r�rqs r<�max_payloadzClient.max_payload�s
��
� � r;�
Optional[int]c��|jS)zO
        Returns the client id which we received from the servers INFO
        )r�rqs r<�	client_idzClient.client_id�s��
��r;�Optional[Exception]c��|jS)zA
        Returns the last error which may have occurred.
        )r�rqs r<�
last_errorzClient.last_error�s��
�y�r;c��|jSrT)r�rqs r<�pending_data_sizezClient.pending_data_size�s���&�&r;c�,�|jtjkSrT)r�r�rWrqs r<r\zClient.is_closed�s���|�v�}�,�,r;c�,�|jtjkSrT)r�r��RECONNECTINGrqs r<rszClient.is_reconnecting�s���|�v�2�2�2r;c�:�|jtjkp|jSrT)r�r��	CONNECTEDrprqs r<r�zClient.is_connected�s����� 0�0�E�T�5E�Er;c�,�|jtjkSrT)r�r��
CONNECTINGrqs r<rrzClient.is_connecting�s���|�v�0�0�0r;c�V�|jtjkp|jtjkSrT)r�r�rzr}rqs r<rpzClient.is_drainings!���|�v�3�3�[�t�|�v�G[�7[�[r;c�,�|jtjkSrT)r�r�r}rqs r<r�zClient.is_draining_pubss���|�v�3�3�3r;rOc�x�|jr%|jjrt|jj��Std��S)zm
        Returns the ServerVersion of the server to which the client
        is currently connected.
        z
0.0.0-unknown)r�rMrOrqs r<�connected_server_versionzClient.connected_server_versions@����	F�D�$8�$G�	F� ��!5�!D�E�E�E��_�-�-�-r;�ssl.SSLContextc��d}d|jvr|j�d��}ntj��}|�t	jd���|S)Nr�znats: no ssl context provided)r�r��ssl�create_default_contextrr)r\�ssl_contexts  r<rzClient.ssl_contextsV��04���D�L� � ��,�*�*�5�1�1�K�K��4�6�6�K����,�>�?�?�?��r;�cmd�priorityc��*K�|r|j�d|��n|j�|��|xjt	|��z
c_|jdkr.|j|jkr |�d����d{V��dSdSdS)NrT)�force_flush)r��insertrxr�r�r�r])r\rrs   r<r�zClient._send_commands������	&��M� � ��C�(�(�(�(��M� � ��%�%�%����3�s�8�8�+����!�A�%�%�$�*A�D�DZ�*Z�*Z��%�%�$�%�7�7�7�7�7�7�7�7�7�7�7�&�%�*Z�*Zr;rrc���K�|js
Jd���	tj��}|js|�d��|S|j�|���d{V��|re	tj||j���d{V��dS#tj$r0|�	tj�����d{V��YdSwxYwdS#tj$rYdSwxYw�NrM)
r�r�r�r�r��putrar�rr�rr�rb)r\rr�s   r<r]zClient._flush_pending'sI����� �G�G�"G�G�G� �	�%,�^�%5�%5�F��$�
��!�!�$�'�'�'��
��#�'�'��/�/�/�/�/�/�/�/�/��
E�E�!�*�6�4�3F�G�G�G�G�G�G�G�G�G�G�G���+�E�E�E��.�.��)A�)C�)C�D�D�D�D�D�D�D�D�D�D�D�D�E����
E�
E���%�	�	�	��D�D�	���s5�0C�"C�) B�;C
�C�	C
�
C�C"�!C"�connect_urlrc��	d|vsd|vrt|��}nBd|vsd|vrt|��}n*d|vrtd|����}ntd|�d���}|j�!|jdvrtd|j�d���}n"#t$rtjd	���wxYw|j�|jd
krtjd���|S)zy
        Parse a single server URL string into a ParseResult.
        Handles scheme defaults and port defaults.
        znats://ztls://zws://zwss://�:z:4222N��ws�wss� nats: invalid connect url option�nonez%nats: invalid hostname in connect url)r�port�scheme�hostnamerirr)r"r?s  r<r�zClient._parse_server_uri?s��
	C��K�'�'�8�{�+B�+B��{�+�+����K�'�'�8�{�+B�+B��{�+�+�����#�#��6��6�6�7�7����;��;�;�;�<�<���x��C�J�m�$C�$C��<���<�<�<�=�=�����	C�	C�	C��,�A�B�B�B�	C�����<��3�<�6�#9�#9��,�F�G�G�G��
s�BB�B$�Union[List[str]]c�`�t|t��r>|�|��}|j�t|����dSt|t��r�	|D]8}t|��}|j�t|�����9n"#t$rtj
d���wxYwtd�|jD����s2td�|jD����stj
d���dSdStj
d���)Nr(c3�2K�|]}|jjdvV��dS))r�r�N�r?r+�r�rs  r<�	<genexpr>z,Client._setup_server_pool.<locals>.<genexpr>es,����Y�Y�V�F�J�%��8�Y�Y�Y�Y�Y�Yr;c3�2K�|]}|jjdvV��dS)r%Nr0r1s  r<r2z,Client._setup_server_pool.<locals>.<genexpr>fs,����Z�Z�f�v�z�(�M�9�Z�Z�Z�Z�Z�Zr;z?nats: mixing of websocket and non websocket URLs is not allowed)r�rPr�r�rxrE�listrrirr�all)r\r"r?rs    r<r�zClient._setup_server_poolXs]���k�3�'�'�	C��(�(��5�5�C���$�$�S��X�X�.�.�.�.�.�
��T�
*�
*�	C�
G�)�7�7�F�"�6�*�*�C��%�,�,�S��X�X�6�6�6�6�7���
G�
G�
G��l�#E�F�F�F�
G�����Y�Y�t�GX�Y�Y�Y�Y�Y�
f��Z�Z��HY�Z�Z�Z�Z�Z�
f��l�#d�e�e�e�	
f�
f�
f�
f��,�A�B�B�Bs�*;B&�&C�srEc���K�tj��|_|jsB|jjdvr!t
|jd���|_nt��|_|jjdkr@|j�	|j|j
t|jd����d{V��dS|j�|jt|jd����d{V��dS)	zM
        Establishes a TCP/WebSocket connection to the given server.
        r%r�)�
ws_headersr'r�)r�buffer_sizer�N)r9r�)
r
rrGr�r?r+r'r�r%�connect_tlsr�DEFAULT_BUFFER_SIZEr)r\r6s  r<�_connect_to_serverzClient._connect_to_serverls"������)�)�����	1��u�|�}�,�,�"4���Md�@e�"f�"f�"f����".�.�.����5�<�5� � ��/�-�-��� �,�/� $��->� ?�	.���
�
�
�
�
�
�
�
�
��/�)�)���/� $��->� ?�*���
�
�
�
�
�
�
�
�
r;c���K�	t|j��dkrd|_tj�tj��}|j�d��}|jddkr|j	|jdkr��|j�
|��|j�>||j|jdzkr%tj
|jd���d{V��	|�|���d{V��||_dS#t$rU}tj��|_|xj	dz
c_	||_|�|���d{V��Yd}~��_d}~wwxYw)zf
        Looks up in the server pool for an available server
        and attempts to connect.
        TrNr�r�r)r�r�r�rrr
rr�r�rArxrGr�rcr<r�r�r�)r\�nowr6rs    r<rzClient._select_next_server�s�����	��4�$�%�%��*�*�'+��$��+�+��.�"�"�C��!�%�%�a�(�(�A��|�4�5��9�9��<�$�,�/G�"H�H�H��
��$�$�Q�'�'�'��~�)�c�A�N�T�\�Rg�Eh�4h�.h�.h��m�D�L�1F�$G�H�H�H�H�H�H�H�H�H�

��-�-�a�0�0�0�0�0�0�0�0�0�'(��$�����
�
�
�!%��!1�!1�������!�����	��n�n�Q�'�'�'�'�'�'�'�'�'����������

���s�$"D�
E'�A
E"�"E'�err_msgc���K�t|vr.|�tj�����d{V��dSt|vrtj��|_n[|�d��}d|��}tj|��}||_t|vr|�
|���d{V��dSd}|jsd}tj
|�tj|����dS)zv
        Processes the raw error message sent by the server
        and close connection with current server.
        N�'�nats: FT)r�_process_op_errr�StaleConnectionErrorr�AuthorizationErrorr�r�rrr�rrr�rwr	r�rW)r\r?�prot_err�m�errrZs      r<�_process_errzClient._process_err�s����
�w�&�&��&�&�v�'B�'D�'D�E�E�E�E�E�E�E�E�E��F�"�g�-�-��1�3�3�D�I�I��}�}�S�)�)�H�#��#�#�A��,�q�/�/�C��D�I��!�#�#��n�n�S�)�)�)�)�)�)�)�)�)������!�	��F�
	��D�K�K��
�v�>�>�?�?�?�?�?r;rr�c��&K�|js|jrdS|jdr�|js|jr�t
j|_|j�	��|j
�2|j
���s|j
���tj���|�����|_
dS|���||_|�t
jd���d{V��dS)z�
        Process errors which occurred while reading or parsing
        the protocol. If allow_reconnect is enabled it will
        try to switch the server to which it is currently connected
        otherwise it will disconnect.
        Nr�T)r\rsr�r�rrr�rr�r��resetr�r^r_r�rvrw�_attempt_reconnect�_process_disconnectr�r	rW)r\rs  r<rCzClient._process_op_err�s�����>�	�T�1�	��F��<�)�*�	3��0A�	3�T�EW�	3�!�.�D�L��H�N�N�����&�2�4�;R�;\�;\�;^�;^�2��'�.�.�0�0�0�&-�&>�&@�&@�&L�&L�T�Md�Md�Mf�Mf�&g�&g�D�#�#�#��$�$�&�&�&��D�I��+�+�f�m�T�2�2�2�2�2�2�2�2�2�2�2r;c��\�K�|js
Jd���|j�2|j���s|j���|j�2|j���s|j���|j�2|j���s|j���|j�l|j���	|j����d{V��n2#t$r%}|�
|���d{V��Yd}~nd}~wwxYwd|_|j�|����d{V��|j
rdSd|jvs
|jdst|j��t#j��|_		|j��y|jd��dkr�fd�|jD��}nt+|j��}t-|��dkrt.j�d�|D��}	|�||j�����\}}n2#t$r%}|�
|���d{V��Yd}~��d}~wwxYw|�]d}|D] }|jj|jjkr|}n�!|�||_n.|�
t/j�����d{V��d}|�
|d|_|dkrt#j|���d{V��|�|j���d{V��n|� ���d{V��|jsJ�|�!���d{V��|j"dxxd	z
cc<d|j_#d|j_$g}|j%�&��D]�\}	}
d}|
j'dkr5|
j(|
j'kr|�)|	���8|
j'|
j(z
}tUj+|
j,|
j-|	��}|j�.|��|dkr/tUj/|	|��}
|j�.|
����|D]}	|j%�0|	���|j�1���d{V��|�2���d{V��tfj4|_5|�6���d{V��|j7�|�7���d{V��d|_n�#t.j$r+}||_|����d{V��Yd}~n�d}~wtpt.j9t"j:f$ro}||_|�
|���d{V��tfj;|_5tyj=��|j_>|jxj$d	z
c_$Yd}~nd}~wt"j?$rYnwxYw��G|j�5|j���s|j�@d��dSdSdS)
NrMr�Tr�rc�*��g|]}|j�k�
|��Sr:)rA)r�r6�
max_reconnects  �r<r�z-Client._attempt_reconnect.<locals>.<listcomp>s&���#b�#b�#b�!�A�L�Ta�Da�Da�A�Da�Da�Dar;c�D�g|]}t|j|j�����Sr�r�)r�r6s  r<r�z-Client._attempt_reconnect.<locals>.<listcomp>
s*��&d�&d�&d�VW�v�!�%�A�L�'Q�'Q�'Q�&d�&d�&dr;rAr)Ar�r�r^r_r�r�r�rXrlr�r�r�r�r\r�r	r�r�r�r�r�r4r�rrr��copyr?r��ServerNotInPoolErrorrcr<rrr�rIrAr�r��	_max_msgs�	_receivedrxr�r�r�r��writer�r�rer]r�rr�r~r�rrrrr
rrGrbr�)r\r�eligible�server_snapshot�selected�callback_delay�matchedr6�subs_to_remover�rmr�r�r�rPs              @r<rLzClient._attempt_reconnect�sT������#�J�J�%J�J�J�#���)�$�2D�2N�2N�2P�2P�)���%�%�'�'�'��#�/��8P�8Z�8Z�8\�8\�/��$�+�+�-�-�-���)�$�2D�2N�2N�2P�2P�)���%�%�'�'�'��?�&��O�!�!�#�#�#�
(��o�1�1�3�3�3�3�3�3�3�3�3�3���
(�
(�
(��n�n�Q�'�'�'�'�'�'�'�'�'�'�'�'�'�'�����
(������	�� �,��'�'�)�)�)�)�)�)�)�)�)��>�	��F��4�<�/�/�t�|�DT�7U�/��D�%�&�&�&�*1��)9�)9��&�h	�g
��4�@�$(�L�1I�$J�M�$�q�(�(�#b�#b�#b�#b�t�/@�#b�#b�#b���#'��(9�#:�#:���8�}�}��)�)�$�3�3�&d�&d�[c�&d�&d�&d�O�!�37�3T�3T�+�T�->�-C�-C�-E�-E�4�4�0��.�.��%�!�!�!�"�n�n�Q�/�/�/�/�/�/�/�/�/� ���������!���� �+�"&��!)�&�&�A� �u�|�x�|�/B�B�B�*+�� %�� C�#�.�3:�D�0�0�"&�.�.��1L�1N�1N�"O�"O�O�O�O�O�O�O�O�'+�H��'�/7��{��,�%��)�)�%�m�N�;�;�;�;�;�;�;�;�;��1�1�$�2F�G�G�G�G�G�G�G�G�G�G��2�2�4�4�4�4�4�4�4�4�4���&�&���0�0�2�2�2�2�2�2�2�2�2��
�<�(�(�(�A�-�(�(�(�48��$�0�23��$�/�"$�� $�
� 0� 0� 2� 2�9�9�H�C�� �H��}�q�(�(��=�C�M�9�9�*�1�1�#�6�6�6�$�#&�=�3�=�#@��*�2�3�<���S�Q�Q�G��O�)�)�'�2�2�2��!�|�|�$0�$:�3��$I�$I�	���-�-�i�8�8�8��)�(�(�C��J�N�N�3�'�'�'�'��o�+�+�-�-�-�-�-�-�-�-�-��)�)�+�+�+�+�+�+�+�+�+�%�/����j�j�l�l�"�"�"�"�"�"�"��'�3��.�.�0�0�0�0�0�0�0�0�0�15��.����(�
�
�
���	��j�j�l�l�"�"�"�"�"�"�"�����������V�\�7�+?�@�
5�
5�
5���	��n�n�Q�'�'�'�'�'�'�'�'�'�%�2���48�N�4D�4D��$�1��$�/�/�1�4�/�/�/�/�/�/�/������)�
�
�
���
����Oh	�T�)�5�d�>\�>f�>f�>h�>h�5��*�5�5�d�;�;�;�;�;�6�5�5�5so�!D�
D0�D+�+D0�(A.T�0I�T�
I7�I2�-T�2I7�7JT�W)� !U�$W)�*A%W�W)�(W)c��|jd|jdtttd�}d|jvr |jd|d<|jd|d<|j�rfd|jvr�|j�||�|jd��}|���|d<|j�,|���}|���|d	<n�|j	�
|j	|d
<n�|jd�.|jd�!|jd|d<|jd|d
<n�|jd�,|jd}t|��r
|��}||d<nf|jr_|jjj
�N|jjj�|jjj
|d<n(|jjj
|d<|jjj|d
<|jd�|jd|d<|jd�|jd|d<tj|d���}d�t$t&z|���zt*zg��S)z�
        Generates a JSON string with the params to be used
        when sending CONNECT to the server.

          ->> CONNECT {"lang": "python3"}

        r�r�)r�r��langr(�protocolr��
no_respondersr#Nr-�jwt�nkeyr�r��passr��
auth_tokenr�r��echoT)�	sort_keysr;)r��__lang__r��PROTOCOLr�r�r�rTr�r��callabler�r?rr��json�dumpsrk�
CONNECT_OP�_SPC_r�r�)r\r�r-rar��connect_optss      r<�_connect_commandzClient._connect_commandjsR���|�I�.���Z�0��"� �
�
����)�)�)�!%�!2�9�!=�G�I��'+�'8��'C�G�O�$�� �	H��$�+�+�+��0B�0N��(�(��):�7�)C�D�D��!$���������$�0��+�+�-�-�C�%(�Z�Z�\�\�G�E�N�N��&�2�&*�&7�G�F�O����f�%�1�d�l�:�6N�6Z�"&�,�v�"6����"&�,�z�":�������g�&�2���W�-���E�?�?�$�!�E�G�G�E�(-���%�%��%�
H�$�*>�*B�*K�*W��'�+�4�<�,0�,@�,D�,M�G�L�)�)�&*�&:�&>�&G�G�F�O�&*�&:�&>�&G�G�F�O��<���+�"�l�6�2�G�F�O��<�	�"�.�"&�,�y�"9�9�G�F�O��z�'�T�:�:�:���x�x��e�+�l�.A�.A�.C�.C�C�f�L�M�N�N�Nr;c��~K�|�t���d{V��|����d{V��dS)z.
        Process PING sent by server.
        N)r�rr]rqs r<�
_process_pingzClient._process_ping�sX����� � ��&�&�&�&�&�&�&�&�&��!�!�#�#�#�#�#�#�#�#�#�#�#r;c���K�t|j��dkrH|j�d��}|�d��|xjdz
c_d|_dSdS)z.
        Process PONG sent by server.
        rTrN)r�r�r�r�r�r��r\r�s  r<�
_process_pongzClient._process_pong�sn�����t�{���a����[�_�_�Q�'�'�F����d�#�#�#�� � �A�%� � �&'�D�#�#�#�	 �r;�header�Dict[str, str]c��t|��dkrdS|�tjjjj��}|tkr.|�tjjjj��SdS)Nr)	r�r�r�r�r�r�r��CTRL_STATUS�DESCRIPTION)r\rErurYs    r<�_is_control_messagezClient._is_control_message�s]���t�9�9�q�=�=��4����D�G�K�.�5�6�6���[� � ��:�:�d�g�k�0�<�=�=�=��tr;c��b�
K�|sdSd}|td�}|dtk�r�|tt��dzd�}|dt�}|tdzt|��t
z
t
z
�}|������}i}|���r#||tj
jjj
j<|�t ��}||t
zd�}t|��dkr�|�t ��}|dkr�|d|����|tj
jjj<|j�||t
zd���}	|	���D]
\�
}
|
|�
<�n0|���|tj
jjj<t|��t
ks|S|tt
zd�}	t*rt+|��j}	n6d�|j�|�����D��}	|r|�|	��n|	}t*r[g}|���D]<�
t3�
fd�t4jD����r|��
���=|D]�
|�
=�n4#t:$r'}|�|���d{V��|cYd}~Sd}~wwxYw|pdS)Nrrc�b�i|],\}}|���|�����-Sr:)r�)r�r�r�s   r<�
<dictcomp>z+Client._process_headers.<locals>.<dictcomp>�s.��p�p�p�t�q�!�a�g�g�i�i������p�p�pr;c3� �K�|]}|�vV��	dSrTr:)r��cr�s  �r<r2z*Client._process_headers.<locals>.<genexpr>�s'�����=�=�a�1��6�=�=�=�=�=�=r;)�NATS_HDR_LINE_SIZE�
_SPC_BYTE_r�r��STATUS_MSG_LEN�
_CRLF_LEN_r�rT�isdigitr�r�r�r�r�r��findr�ryr��
parsebytesr�rr��update�keys�any�string�
whitespacerxr�r�)r\r�r��raw_headersr>rY�desc�stripped_status�i�
parsed_hdrr��	to_deleterr�s             @r<�_process_headerszClient._process_headers�s=������	��4�(,���0�1�1�2���q�>�Z�'�'��3�}�-�-��1�3�3�4�D��/�>�/�*�F����*�S��Y�Y��-C�j�-P�P�Q�D�$�l�l�n�n�3�3�5�5�O��C��&�&�(�(�
G�7F��D�G�K�&�-�3�4�� � ��(�(�A�%�a�*�n�&6�&6�7�K��4�y�y�1�}�}��I�I�f�%�%���q�5�5�:>�r��r�(�/�/�:K�:K�C����*�6�7�!%�!1�!<�!<�T�!�j�.�BR�BR�=S�!T�!T�J� *� 0� 0� 2� 2�#�#���1�!"��A���#�;?�+�+�-�-�C����*�6�7��;���*�,�,��J��0�:�=�?�?�@��	��
q�(��5�5�=�
�
�p�p�t�?O�?Z�?Z�[f�?g�?g�?m�?m�?o�?o�p�p�p�
��
!��
�
�:�&�&�&�&� ���
��	������,�,�A��=�=�=�=�6�+<�=�=�=�=�=�,�!�(�(��+�+�+��"���A��A������	�	�	��.�.��#�#�#�#�#�#�#�#�#��J�J�J�J�J�J�����	�����{�d�s�*CK9�9
L*�L%�L*�%L*rEc	��|K�t|��}|jdxxdz
cc<|jdxx|z
cc<|j�|��}|sdS|xjdz
c_|jdkr+|j|jkr|j�|d��|�|���d{V��}|�|||||��}	|	sdSd}
d}|j	�r|j	}d|_
|r[|�||��}
|
rC|
�d��r.|�tjjjj��}|
s�|jr�|	jr�d}
t(j�|	j��}t/|d��}t/|d	��}||jkr$|�|jdz���d{V��}
n|dz|_||_|
rdS|
�sk|jr7|j���rdS|j�|	��dS	|xj|z
c_|jdkr]|j|jkrM|xj|zc_|� tCj"|	j#|	j||�
�����d{V��dS|j$�%|	��nr#tLj'$r`|xjt|	j(��zc_|� tCj"|	j#|	j||�
�����d{V��YnwxYw|j	r|j	�)|	j��nq|
�d��r\|	jrU|j	rN|j	�*��|j	j+kr|	j}n|j	�,|	j��|r|�-|���d{V��|
rE|	js@|
�d��r-|j	r(|j	�.|	���d{V��dSdSdSdSdS)z-
        Process MSG sent by server.
        r�rr�NrT�Idler�r�)r�r�r�rm�Flow)/r�r�r�r�rUrTr�r��_build_message�_jsi�_activerz�
startswithr�r�r�r��CONSUMER_STALLED�_orderedr�r!�Metadata�_get_metadata_fieldsr@�_dseq�reset_ordered_consumer�_sseq�_futurer^r��
_pending_size�_pending_bytes_limitr�r�SlowConsumerErrorr��_pending_queue�
put_nowaitr��	QueueFullrE�track_sequences�get_js_delivered�_fciseq�schedule_flow_control_responser��check_for_sequence_mismatch)r\r�r�r�rEr�r�rmr�r��ctrl_msg�fc_reply�jsi�	did_reset�tokens�sseq�dseqs                 r<�_process_msgzClient._process_msg
s�����4�y�y���
�9�����"�����
�:����,�.�����j�n�n�S�!�!���	��F��
�
���
�
��=�1�����#�-�!?�!?�

�J�N�N�3��%�%�%��)�)�'�2�2�2�2�2�2�2�2���!�!�#�w��t�S�A�A���	��F������8� 	��(�C��C�K��
L��3�3�D�#�>�>��
�L�� 3� 3�F� ;� ;�L�"�w�w�t�w�{�'9�'J�K�K�H��
���
���
� �	���:�:�3�9�E�E���6�!�9�~�~���6�!�9�~�~���3�9�$�$�&)�&@�&@���Q��&O�&O� O� O� O� O� O� O�I�I�!%�q��C�I� $�C�I����F��+	C��{�
��;�(�(�*�*���F���&�&�s�+�+�+���

w��!�!�\�1�!�!��+�a�/�/�C�4E��Ia�4a�4a��%�%��5�%�%��.�.��0���C�I�[^�dg�h�h�h�����������F��"�-�-�c�2�2�2�2���$�
w�
w�
w��!�!�S���]�]�2�!�!��n�n�V�%=�c�k�Y\�Yb�hk�qt�%u�%u�%u�v�v�v�v�v�v�v�v�v�v�v�
w�����x�
4���(�(���3�3�3��
�
 �
 ��
(�
(�
	C�S�Y�
	C�3�8�
	C��x�(�(�*�*�c�h�.>�>�>��9�����7�7��	�B�B�B��	)��,�,�x�(�(�(�(�(�(�(�(�(��	@�C�I�	@�(�*=�*=�f�*E�*E�	@��x�
@��h�:�:�3�?�?�?�?�?�?�?�?�?�?�?�	@�	@�	@�	@�	@�	@�
@�
@s�5A6K�-K�A,L7�6L7c��|�|���|���||||���S)N)r�r�rEr��_clientr�)r�rT)r\r�r�r�rEr�s      r<r�zClient._build_message�sC���~�~��N�N�$�$��,�,�.�.�����
�
�
�	
r;c�(�tj|_dS)zf
        Process disconnection from the server and set client status
        to DISCONNECTED.
        N)r�r�r�rqs r<rMzClient._process_disconnect�s��
�*����r;�info�Dict[str, Any]�initial_connectionc���K�|js
Jd���d|v�r@|d�r9g}|dD]�}d}|jjjdkrd}nd}t|�d|����}t	|��}d|_d|jvr=|jdr0|�|j��r|jjj|_	d}|j
D]}	|j|	jjkrd	}�|r|�|����|j
d
durt|��|D]}|j
�|���|s)|r)|jr$|����d{V��dSdSdSdSdSdS)z�
        Process INFO lines sent by the server to reconfigure client
        with latest updates from cluster to enable server discovery.
        rM�connect_urlsr,r�r�z://T�tls_requiredFr�N)r�r?r+rrErJr��_host_is_ipr,rLr�r�rxr�r	r�)
r\r�r�r�r"r+r?r��
should_addr6s
          r<�
_process_infozClient._process_info�s�����
�#�J�J�%J�J�J�#��T�!�!��N�#�#
7�!��#'��#7�1�1�K��F��+�/�6�%�?�?�!&���!'��"�f�#>�#>��#>�#>�?�?�C��c�(�(�C�%)�C�N�'�$�*;�;�;� �-�n�=�<� �,�,�S�\�:�:�<�(,�';�'?�'H���"&�J�!�.�/�/���:����5�5�).�J��!�1�$�+�+�C�0�0�0���<� 0�1��=�=��L�)�)�)�'�2�2�C��%�,�,�S�1�1�1�1�)�7�l�7�t�?Y�7��4�4�6�6�6�6�6�6�6�6�6�6�6�I"�!�#
7�#
7�D7�7�7�7�7�7r;c�Z�|�dS	tj|��dS#t$rYdSwxYw)NFT)�	ipaddress�
ip_addressr�)r\r"s  r<r�zClient._host_is_ip�sJ�����5�	�� ��-�-�-��4���	�	�	��5�5�	���s��
*�*c��XK�|js
Jd���|js
Jd���tj|_d}d|jvr|jd}n*|jj�
|jj}n|jjj}|jd}|r8|j�	||j
t|jd���d{V��|j���}tj||jd���d{V��}t|vrt!jd���|�tt&zd��\}}	t)j|�����}||_n"#t0$rt!jd���wxYw|�d	d
��rd|_|�|d����d{V��d
|jvr|jd
|j_d|jvr|jd|_d|jvr|jd|_d|jvr{|jdrn|jjjdkrY|sW|j� ���d{V��|j�	||j
t|jd���d{V��|j!r|j"�#��|jsJ�|�$��}|j�%|��|j� ���d{V��|jdr�|j���}	tj|	|jd���d{V��}
tL|
vrn`tN|
vrW|
���}|�dd��\}}t!jd|�(d��z���|j�%tR��|j� ���d{V��|j���}	tj|	|jd���d{V��}
tT|
vrtj+|_n`tN|
vrW|
���}|�dd��\}}t!jd|�(d��z���tT|
vrtj+|_tj,���-|�.����|_/g|_0d|_1tj,���-|�2����|_3tj,���-|�4����|_5dS)z�
        Process INFO received from the server and CONNECT to the server
        with authentication.  It is also responsible of setting up the
        reading and ping interval tasks from the client.
        z'must be called only from Client.connectNr�r�r�z<nats: empty response from server when expecting INFO messagerz$nats: info message, json parse error�
auth_requiredFT)r�r(rrr�r&r�r�rBz
r)6r�r�r�rr�r�rLr?r,r:rr;rIr�ra�INFO_OPrr�splitrmrj�loadsrTr�r�r�r�r�rMr�r�r+rersr�rKrorV�OK_OP�ERR_OP�rstrip�
PING_PROTO�
PONG_PROTOrrvrw�
_read_loopr�r�r��_ping_intervalr��_flusherr�)
r\r,�handshake_first�connection_completed�	info_line�_r��srv_info�connect_cmdr��next_op�err_liner?s
             r<rzClient._process_connect_init�s�������I�I� I�I�I���#�N�N�%N�N�N�#��(������T�\�)�)��|�N�3�H�H�
�
!�
*�
6��+�4�H�H��+�/�8�H��,�'<�=���	��/�-�-��� �#���.�/�	��
�
�
�
�
�
�
� $��7�7�9�9��!�*�+?���N_�A`�a�a�a�a�a�a�a�a�	��)�#�#��,�]�^�^�^��/�/�'�E�/�1�5�5���4�	G��z�$�+�+�-�-�0�0�H� (�D�����	G�	G�	G��,�E�F�F�F�	G�����<�<���/�/�	)�$(�D�!�� � ��d� �C�C�C�C�C�C�C�C�C���)�)�)�26�2C�I�2N�D� �/��D�-�-�-� $� 1�-� @�D���$�+�+�+�"�/��<�D�O�
�d�/�/�/��!�.�1�
0��$�(�/�4�7�7�"�	
��o�+�+�-�-�-�-�-�-�-�-�-��o�1�1���$�'��L�!2�3�	�����������	��H�N�N����������+�+�-�-������k�*�*�*��o�#�#�%�%�%�%�%�%�%�%�%��<�	�"�
	F��_�-�-�/�/�F�#�,�V�T�\�BS�5T�U�U�U�U�U�U�U�U�G�������7�"�"�"�>�>�+�+��%�^�^�C��3�3�
��7�
�l�8�g�n�n�V�.D�.D�#D�E�E�E�����j�)�)�)��o�#�#�%�%�%�%�%�%�%�%�%���)�)�+�+���(����>O�1P�Q�Q�Q�Q�Q�Q�Q�Q���� � �!�+�D�L�L�
�w�
�
��~�~�'�'�H�!����Q�/�/�J�A�w�
�,�x�'�.�.��*@�*@�@�A�A�A��� � �!�+�D�L�$�5�7�7�C�C�D�O�O�DU�DU�V�V������"#���#*�#;�#=�#=�#I�#I�$�J]�J]�J_�J_�#`�#`�� �%�5�7�7�C�C�D�M�M�O�O�T�T����s�-E1�1Fc��@K�|js
Jd���|�tj��}|j�|��|j�t��|xjtt��z
c_|�	���d{V��dSr )
r�r�r�r�rxrVr�r�r�r]rss  r<r�zClient._send_pingOs�������E�E� E�E�E���>��^�%�%�F�����6�"�"�"�����j�)�)�)����3�z�?�?�2����!�!�#�#�#�#�#�#�#�#�#�#�#r;c��K�|js
Jd���|js
Jd���	|jr|jrdS|j����d{V��}	|jdkrT|j�|jdd���g|_d|_|j����d{V��n�#t$rl}|�
|���d{V��|�|���d{V��Yd}~|���s|�
d��dSdSd}~wtjt t"f$r/Y|���s|�
d��dSdSwxYw|���s|�
d��n/#|���s|�
d��wwxYw���)z}
        Coroutine which continuously tries to consume pending commands
        and then flushes them to the socket.
        rMTNr)r�r�r�rrr�r�rdr�rerr�rCr`r�r�rb�RuntimeError�AttributeError)r\r�rs   r<r�zClient._flusherXsB����
��E�E� E�E�E��� �G�G�"G�G�G� �	,��$�
��(:�
���+/�+<�+@�+@�+B�+B�%B�%B�%B�%B�%B�%B�F�
,��*�Q�.�.��O�.�.�t�}�Q�Q�Q�/?�@�@�@�$&�D�M�./�D�+��/�/�/�1�1�1�1�1�1�1�1�1����
�
�
��n�n�Q�'�'�'�'�'�'�'�'�'��*�*�1�-�-�-�-�-�-�-�-�-������{�{�}�}�,��%�%�d�+�+�+�+�+�,�,������*�L�.�I�
�
�
���{�{�}�}�,��%�%�d�+�+�+�+�+�,�,�
����
�{�{�}�}�,��%�%�d�+�+�+����{�{�}�}�,��%�%�d�+�+�+�+�,����+	,s=�AB6�5F"�6
E5�6D'�6F"�'E5�F"�4E5�5F"�",Gc��K�	tj|jd���d{V��|js�.	|xjdz
c_|j|jdkr)|�t
�����d{V��dS|����d{V��n##tjttf$rYdSwxYw��)NTr�rr�)r�rcr�r�r�rCr r�rbr�r�rqs r<r�zClient._ping_intervalws�����	��-���_� =�>�>�>�>�>�>�>�>�>��$�
��
��'�'�1�,�'�'��*�T�\�:Q�-R�R�R��.�.�/A�/C�/C�D�D�D�D�D�D�D�D�D��F��o�o�'�'�'�'�'�'�'�'�'�'���*�L�.�I�
�
�
����
����	s�A
B�B�B<�;B<c���K�		|jp|j}|s|j�dS|j���rKt	j��}|�|���d{V��|�|���d{V��dS|j�t���d{V��}|j
�|���d{V��n�#tj$r0|�t	j�����d{V��YdSt$r&}|�|���d{V��Yd}~dSd}~wtj$rYdSt $r'}t"�d|���Yd}~dSd}~wwxYw��v)z�
        Coroutine which gathers bytes sent by the server
        and feeds them to the protocol parser.
        In case of error while reading, it will stop running
        and its task has to be rescheduled.
        TNr�r�)r\rsr��at_eofr�
UnexpectedEOFr�rC�readr;r��parse�
ProtocolErrorrr�rbr�r�r�)r\�should_bailrH�brr�s      r<r�zClient._read_loop�s�����	�
�"�n�D��0D����$�/�"9��E��?�)�)�+�+�� �.�0�0�C��.�.��-�-�-�-�-�-�-�-�-��.�.�s�3�3�3�3�3�3�3�3�3��E��/�.�.�/B�C�C�C�C�C�C�C�C���h�n�n�Q�'�'�'�'�'�'�'�'�'�'���'�
�
�
��*�*�6�+?�+A�+A�B�B�B�B�B�B�B�B�B�����
�
�
��*�*�1�-�-�-�-�-�-�-�-�-������������)�
�
�
�����
�
�
��
�
�7�"�
�E�E�E�����������
����+	s<�C�A"C�AC�;E5�	E5�D0�0E5�	E5�E0�0E5�'Client'c��
K�|S)z1For when NATS client is used in a context managerr:rqs r<�
__aenter__zClient.__aenter__�s�����r;c��XK�|�tjd����d{V��dS)z7Close connection to NATS when used in a context managerT)rZNrV)r\r�s  r<�	__aexit__zClient.__aexit__�s6�����k�k�&�-��k�5�5�5�5�5�5�5�5�5�5�5r;�nats.js.JetStreamContextc�0�tjj|fi|��S)aA
        jetstream returns a context that can be used to produce and consume
        messages from NATS JetStream.

        :param prefix: Default JetStream API Prefix.
        :param domain: Optional domain used by the JetStream API.
        :param timeout: Timeout for all JS API actions.

        ::

            import asyncio
            import nats

            async def main():
                nc = await nats.connect()
                js = nc.jetstream()

                await js.add_stream(name='hello', subjects=['hello'])
                ack = await js.publish('hello', b'Hello JS!')
                print(f'Ack: stream={ack.stream}, sequence={ack.seq}')
                # Ack: stream=hello, sequence=1
                await nc.close()

            if __name__ == '__main__':
                asyncio.run(main())
        )r�r��JetStreamContext�r\�optss  r<�	jetstreamzClient.jetstream�s��6�w�'��5�5��5�5�5r;�nats.js.JetStreamManagerc�0�tjj|fi|��S)z3JetStream context for managing JetStream via JS API)r�r��JetStreamManagerr�s  r<�jsmz
Client.jsm�s���w�'��5�5��5�5�5r;rr})Hr�r�r�r�r�r�r�r�r�r�r�r�r�rKr�rHr�rHr�rHr�r@r�r@r�r@r�r@r�r@r�rHr�r@r�rHr�r�r�rKr�rHr�rKr�rKr�r�r�r@r�r�r�r�r�r�r�rKr�rKr�r�r�r@r�rFr�r�r�r�rQrR)rr7rQr�)rrF)T)rYr@rZrHrQrR)r;r,N)
r�rPr�r�r�rPr�r�rQrR)r�rPr�rPr�r�r�r@r�r�rQrR)r�rPr�rPrr�r�r�r�r@r�r@r�r@rQr$)r)r�r@r�r@rQrR)rmr$rQrR)r�r!rQrR)r;r�FN)r�rPr�r�r�r�r�rHr�r�rQr!)rN)
r�rPr�r�r�r�r�r�rQr!)r)r�rPr�r�r�r�rQr!)r�r@r�r@rQrR)r�r@rQrR)rQr�)rQr�)rQr�)r�r�rQrRr~)rQr)rQr)rQrH)rQrO)rQr)F)rr�rrHrQrR)rrHrQr)r"rPrQr)r"r-rQrR)r6rErQrR)r?rPrQrR)rr�rQrR)rQr�)rurvrQrK)rQr�)r�r@r�r�r�r�rEr�r�r�rQrR)
r�r@r�r�r�r�rEr�r�r�)r�r�r�rHrQrR)r"rKrQrHrT)r�r�rQrR)rQr�)rQr�)rQr�)ar7r8r9rBr!r�rCr�rrWrrrzr}r|r]�DEFAULT_CONNECT_TIMEOUT�DEFAULT_RECONNECT_TIME_WAIT�DEFAULT_MAX_RECONNECT_ATTEMPTS�DEFAULT_PING_INTERVAL�DEFAULT_MAX_OUTSTANDING_PINGS�DEFAULT_MAX_FLUSHER_QUEUE_SIZE�DEFAULT_DRAIN_TIMEOUTr��DEFAULT_PENDING_SIZErrrr3r1rrXr	rer�r�r#r"r�r�r�r�r�r�r�r�r�r��DEFAULT_FLUSH_TIMEOUTr~r�r�r�r�r�r�rrrr	r\rsr�rrrpr�rrr�r]�staticmethodr�r�r<rrIrCrLrorqrtrzr�r�r�rMr�r�rr�r�r�r�r�r�r�r�r:r;r<r�r��s�����������I������L��I�
�F��L��J��M��M�/�/�/�/�O
�O
�O
�O
�f+B�)B�,0�.2�(,�37�-1�"��� $�6�#>�&D�2�%B�$�"@��(,�&*�$)�"�"&�59�2�48�-1�26�$(�(,�*>�0�)-�@D�JN�Ih9�h9�h9�h9�h9�T-�-�-�-�7(�7(�7(�7(�r$�$�$�$�8#�#�#�#�""$�"$�"$�"$�H)�)�)�)�I%�I%�I%�I%�I%�V)-�)-�)-�)-�\��,0�BQ�BQ�BQ�BQ�BQ�H'(�'(�'(�'(�X�9=�+/��"@�#B�0�0�0�0�0�d"�"�"�"�"�$�$�$�$�	W�	W�	W�	W�#�#�#�#����,0�
�����6�,0� &� &� &� &� &�D#�#�#�#� &�&�&�&�&�2$�$�$�$�$�
*?�+�+�+�+�+�,�����X��
�����X�������X���]�]�]��X�]�.3�.3�.3�.3�`�!�!�!��X�!������X�������X���'�'�'��X�'��-�-�-��X�-��3�3�3��X�3��F�F�F��X�F��1�1�1��X�1��\�\�\��X�\��4�4�4��X�4��.�.�.��X�.������X��8�8�8�8�8�"������0�����\��0C�C�C�C�(����0"�"�"�"�H@�@�@�@�<3�3�3�3�0J<�J<�J<�J<�X4O�4O�4O�4O�l$�$�$�$�(�(�(�(�����O�O�O�O�bz@�z@�z@�z@�x
�
�
�
�"+�+�+�+�*7�*7�*7�*7�*7�X����zU�zU�zU�zU�x$�$�$�$�$�,�,�,�,�>���� ����D����6�6�6�6�6�6�6�6�:6�6�6�6�6�6r;r�)r�r�rQrR)|�
__future__rr�r'r�rj�loggingrerr�r
�collectionsr�dataclassesr�email.parserr�ior�pathlibr�randomr	�secretsr
�typingrrr
rrrrr�urllib.parserr�fast_mail_parserr�ImportError�nats.jsr�r�	nats.nuidr�
nats.protocolrr��nats.protocol.parserrrrrrrr r�r!�subscriptionr"r#r$�	transportr%r&r'�importlib.metadatar(r�r�rg�	getLoggerr7r�rhr�rl�PING_OP�PONG_OPr�r�r�r�r�rmr�r�r�r�r�r�r;r�r�r�r�r�r�r�r�r��MAX_CONTROL_LINE_SIZEr�r�r�r�rxr��Callback�
ErrorCallbackr��JWTCallbackrP�SignatureCallback�
TokenCallbackr6�Credentialsr>rEr��ReconnectToServerHandlerrOr�r�r:r;r<�<module>rs���#�"�"�"�"�"�����
�
�
�
�������������	�	�	�	�
�
�
�
�
�
�
�
�����"�"�"�"�"�"�!�!�!�!�!�!�$�$�$�$�$�$�������������������������O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�O�.�.�.�.�.�.�.�.��,�,�,�,�,�,�,�������K�K�K���������������������1�1�1�1�1�1���������������B�A�A�A�A�A�A�A�����������������
C�B�B�B�B�B�B�B�B�B��*�*�*�*�*�*��'�)�$�$�K�K�������K�K�K�������
�'�
�H�
%�
%����
��
�
�
��
����	��	��
�S��[�[�
���
�
�
��
�v�
�
�
�v�
�
� ��&������!#���� !��"��!%�����������	�+�&�&�
��S��'�'���������B�	�$��'�(���)��i��o�5�6�
��r�5��E�!1�2�2�3���c�U�E�\�*����S��!�
�	�	�	�	�	�Z�	�	�	��C��s�C�x��.�$�>�?��������������)�)�)�)�)�)�)���)�$�T�&�\�4��S��>�$B�E�(�SY�JZ�\a�Ja�Db�$b�c��Q8�Q8�Q8�Q8�Q8�Q8�Q8�Q8�h:�:�:�:�^6�^6�^6�^6�^6�^6�^6�^6�^6�^6s$�2A9�9B�B�
C�C)�(C)

Filemanager

Name Type Size Permission Actions
__init__.cpython-311.pyc File 222 B 0644
client.cpython-311.pyc File 100.51 KB 0644
errors.cpython-311.pyc File 6.81 KB 0644
msg.cpython-311.pyc File 11.96 KB 0644
subscription.cpython-311.pyc File 15.52 KB 0644
transport.cpython-311.pyc File 14.55 KB 0644