Ë
    �V.jSå  ã                   óZ  — d dl Z d dlZd dlZd dlZd dlZd dl mZ d dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZmZmZ d dlZd dlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ dZ  G d„ de«      Z! G d„ de"e«      Z# G d„ d«      Z$ G d„ de$«      Z% G d„ d«      Z& G d„ de«      Z'y)é    N)Úsleep)ÚEnum)Úrandom)Úgaierror)ÚOptionalÚListÚDictÚCallableÚAny)ÚConnectionClosedErroré   )ÚAsyncClient)ÚFuturesType)ÚBinanceWebsocketUnableToConnect)ÚContractType)Úget_loop)ÚThreadedApiManageri,  c                   ó   — e Zd ZdZdZdZdZy)ÚWSListenerStateÚInitialisingÚ	StreamingÚReconnectingÚExitingN)Ú__name__Ú
__module__Ú__qualname__ÚINITIALISINGÚ	STREAMINGÚRECONNECTINGÚEXITING© ó    úQC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\binance/streams.pyr   r      s   „ Ø!€LØ€IØ!€LØ�Gr"   r   c                   ó    — e Zd ZdZdZdZdZdZy)ÚBinanceSocketTypeÚSpotÚUSD_M_FuturesÚCoin_M_FuturesÚVanilla_OptionsÚAccountN)r   r   r   ÚSPOTÚUSD_M_FUTURESÚCOIN_M_FUTURESÚOPTIONSÚACCOUNTr!   r"   r#   r%   r%       s   „ Ø€DØ#€MØ%€NØ€GØ�Gr"   r%   c            	       óª   — e Zd ZdZdZdZdZdZdZ	 dde	de
e	   d	e	d
efd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdedefd„Zd„ Zd„ Zd„ Zy)ÚReconnectingWebsocketé   é<   çš™™™™™¹?é
   éd   NÚurlÚpathÚprefixÚ	is_binaryc                 óF  — t        «       | _        t        j                  t        «      | _        || _        || _        || _        || _	        d| _
        || _        d | _        d | _        d | _        t        j                   | _        t%        j&                  «       | _        d | _        y )Nr   )r   Ú_loopÚloggingÚ	getLoggerr   Ú_logÚ_pathÚ_urlÚ
_exit_coroÚ_prefixÚ_reconnectsÚ
_is_binaryÚ_connÚ_socketÚwsr   r   Úws_stateÚasyncioÚQueueÚ_queueÚ_handle_read_loop)Úselfr7   r8   r9   r:   Ú	exit_coros         r#   Ú__init__zReconnectingWebsocket.__init__0   s�   € ô “ZˆŒ
Ü×%Ñ%¤hÓ/ˆŒ	ØˆŒ
ØˆŒ	Ø#ˆŒØˆŒØˆÔØ#ˆŒØˆŒ
ØˆŒØ8<ˆŒÜ'×4Ñ4ˆŒÜ—m‘m“oˆŒØ!%ˆÕr"   c              ƒ   óB   K  — | j                  «       ƒ d {  –—†  | S 7 Œ­w©N)Úconnect©rN   s    r#   Ú
__aenter__z ReconnectingWebsocket.__aenter__B   s   è ø€ Ø�l‰l‹n×ÐØˆð 	ús   ‚–—c              ƒ   ó  K  — | j                   r#| j                  | j                  «      ƒ d {  –—†  t        j                  | _        | j
                  r| j
                  j                  «        | j                  r;t        | j                  d«      r%| j                  j                  |||«      ƒ d {  –—†  d | _        | j                  s4| j                  j                  d«       | j                  «       ƒ d {  –—†  y y 7 ŒÎ7 ŒN7 Œ
­w)NÚprotocolzCANCEL read_loop)rB   r@   r   r    rI   rH   Úfail_connectionrF   ÚhasattrÚ	__aexit__rM   r?   ÚerrorÚ_kill_read_loop)rN   Úexc_typeÚexc_valÚexc_tbs       r#   rZ   zReconnectingWebsocket.__aexit__F   sÁ   è ø€ Ø�?Š?Ø—/‘/ $§*¡*Ó-×-Ð-Ü'×/Ñ/ˆŒØ�7Š7Ø�G‰G×#Ñ#Ô%Ø�:Š:œ' $§*¡*¨jÔ9Ø—*‘*×&Ñ& x°¸&ÓA×AÐAØˆŒØ×%Ò%Ø�I‰I�O‰OÐ.Ô/Ø×&Ñ&Ó(×(Ñ(ð &ð .øð
 Bøð )ús5   ‚+D­C<®BDÂ/C>Â0ADÃ5D Ã6DÃ>DÄ Dc              ƒ   ót  K  — | j                  «       ƒ d {  –—†  | j                  sJ ‚| j                  | j                  z   | j                  z   }t	        j
                  |d¬«      | _        	 | j                  j                  «       ƒ d {  –—† | _        t        j                  | _        d| _        | j                  «       ƒ d {  –—†  | j                  s>| j                  j!                  t"        j$                  | j'                  «       «      | _        y y 7 Œû7 ŒŠ#  | j                  «       ƒ d {  –—†7   Y y xY w7 Œs­w)Nr4   )Úclose_timeoutr   )Ú_before_connectr@   rA   rC   rH   rS   rF   rU   Ú
_reconnectr   r   rI   rD   Ú_after_connectrM   r<   Úcall_soon_threadsaferJ   Úcreate_taskÚ
_read_loop)rN   Úws_urls     r#   rS   zReconnectingWebsocket.connectS   s÷   è ø€ Ø×"Ñ"Ó$×$Ð$Ø�zŠzÐˆzØ—‘˜TŸ\™\Ñ)¨D¯J©JÑ6ˆÜ—Z‘Z °cÔ:ˆŒ
ð	Ø ŸJ™J×1Ñ1Ó3×3ˆDŒGô (×1Ñ1ˆŒØˆÔØ×!Ñ!Ó#×#Ð#à×%Ò%Ø%)§Z¡Z×%DÑ%DÄW×EXÑEXÐZ^×ZiÑZiÓZkÓ%lˆDÕ"ð &ð 	%øð
 4ùð	Ø—/‘/Ó#×#Ñ#Ùúð 	$úsS   ‚D8–D—AD8Á,D Â	DÂ
	D Â/D8ÃD6ÃAD8ÄD ÄD3Ä+D.Ä,D3Ä1D8c              ƒ   ó”   K  — t         j                  | _        | j                  r!t	        d«      ƒ d {  –—†  | j                  rŒ y y 7 Œ­w©Nr4   )r   r    rI   rM   r   rT   s    r#   r\   z%ReconnectingWebsocket._kill_read_loopd   s7   è ø€ Ü'×/Ñ/ˆŒØ×$Ò$Ü˜“*×Ðð ×$Õ$Øús   ‚0A²A³AÁAc              ƒ   ó   K  — y ­wrR   r!   rT   s    r#   rb   z%ReconnectingWebsocket._before_connecti   ó	   è ø€ Øùó   ‚c              ƒ   ó   K  — y ­wrR   r!   rT   s    r#   rd   z$ReconnectingWebsocket._after_connectl   rl   rm   c                 óö   — | j                   r	 t        j                  |«      }	 t        j                  |«      S # t        t        f$ r Y y w xY w# t        $ r! | j                  j                  d|› �«       Y y w xY w)Nzerror parsing evt json:)	rE   ÚgzipÚ
decompressÚ
ValueErrorÚOSErrorÚjsonÚloadsr?   Údebug)rN   Úevts     r#   Ú_handle_messagez%ReconnectingWebsocket._handle_messageo   ss   € Ø�?Š?ðÜ—o‘o cÓ*�ð	Ü—:‘:˜c“?Ð"øô ¤Ð(ò Ùðûô ò 	Ø�I‰I�O‰OÐ5°c°UÐ;Ô<Ùð	ús    Ž9 ¤A ¹AÁ
AÁ'A8Á7A8c              ƒ   óR  K  — 	 	 	 | j                   t        j                  k(  r6| j                  «       ƒ d {  –—†  | j                   t        j                  k(  rŒ6| j                   t        j                  k(  r7| j
                  j                  d| j                  › d| j                   › �«       �nÑ| j                  j                  t        j                  j                  j                  k(  rt        j                  d«      ƒ d {  –—†  �Œ| j                  j                  t        j                  j                  j                  k(  r| j!                  «       ƒ d {  –—†  �n | j                   t        j"                  k(  �r| j                  sJ ‚t        j$                  | j                  j'                  «       | j(                  ¬«      ƒ d {  –—† }| j+                  |«      }|r | j,                  j/                  «       | j0                  k  r$| j,                  j3                  |«      ƒ d {  –—†  nU| j
                  j                  d| j0                  › d�«       | j,                  j3                  ddd	œ«      ƒ d {  –—†  t4        ‚�Œyd | _!        d| _"        y 7 �ŒW7 �Œ�7 �Œ>7 ŒÑ7 Œv7 Œ(# t        j6                  $ r, | j
                  j                  d
| j(                  › d�«       Y Œ^t        j8                  $ r(}| j
                  j                  d|› �«       Y d }~Œ‘d }~wt        j:                  $ r)}| j
                  j                  d|› d�«       Y d }~ŒÍd }~wt<        $ r)}| j
                  j                  d|› d�«       Y d }~Œýd }~wt>        $ r*}| j
                  j                  d|› d�«       Y d }~�Œ.d }~wt4        $ r*}| j
                  j                  d|› d�«       Y d }~�Œ]d }~wt@        $ r*}| j
                  j                  d|› d�«       Y d }~�Œd }~ww xY w# d | _!        d| _"        w xY w­w)Nz_read_loop z break for r4   ©ÚtimeoutzQueue overflow z. Message not filledr[   z"Queue overflow. Message not filled©ÚeÚmúno message in ú secondszcancelled error zincomplete read error (Ú)zconnection close error (zDNS Error (z!BinanceWebsocketUnableToConnect (zUnknown exception (r   )#rI   r   r   Ú_run_reconnectr    r?   rv   r@   rH   ÚstaterW   ÚStateÚCLOSINGrJ   r   ÚCLOSEDrc   r   Úwait_forÚrecvÚTIMEOUTrx   rL   ÚqsizeÚMAX_QUEUE_SIZEÚputr   ÚTimeoutErrorÚCancelledErrorÚIncompleteReadErrorr   r   Ú	ExceptionrM   rD   )rN   Úresr}   s      r#   rg   z ReconnectingWebsocket._read_loop{   s2  è ø€ ð0	!Øð+ØŸ-™-¬?×+GÑ+GÒGØ"×1Ñ1Ó3×3Ð3ð Ÿ-™-¬?×+GÑ+GÓGð —}‘}¬×(?Ñ(?Ò?ØŸ	™	Ÿ™¨+°d·j±j°\ÀÈTÏ]É]ÈOÐ(\Ô]ÙØŸ™Ÿ™¬"¯+©+×*;Ñ*;×*CÑ*CÒCÜ%Ÿm™m¨CÓ0×0Ð0Ù ØŸ™Ÿ™¬"¯+©+×*;Ñ*;×*BÑ*BÒBØ"Ÿo™oÓ/×/Ò/ØŸ™¬/×*CÑ*CÓCØ#Ÿwšw˜˜wÜ$+×$4Ñ$4°T·W±W·\±\³^ÈTÏ\É\Ô$Z×Z˜Ø"×2Ñ2°3Ó7˜ÙØ#Ÿ{™{×0Ñ0Ó2°T×5HÑ5HÒHØ&*§k¡k§o¡o°cÓ&:× :Ñ :à $§	¡	§¡°/À$×BUÑBUÐAVÐVjÐ0kÔ lØ&*§k¡k§o¡oØ)0Ø)Mñ7"ó '#÷ !#ð !#ô 'FÐ Eñ5 ð\ &*ˆDÔ"Ø ˆDÕðY 4ùð 1ùð 0ùð [øð !;øð!#ùô
 ×+Ñ+ò MØ—I‘I—O‘O n°T·\±\°NÀ(Ð$KÖLä×-Ñ-ò Ø—I‘I—O‘OÐ&6°q°cÐ$:Ô;ÜûÜ×2Ñ2ò DØ—I‘I—O‘OÐ&=¸a¸SÀÐ$B×CÑCûÜ,ò EØ—I‘I—O‘OÐ&>¸q¸cÀÐ$C×DÑDûÜò 8Ø—I‘I—O‘O k°!°°AÐ$6×7Ò7ûÜ6ò Ø—I‘I—O‘OÐ&GÈÀsÈ!Ð$LÔMÝûÜ ò Ø—I‘I—O‘OÐ&9¸!¸¸AÐ$>Ô?Ýûðûð &*ˆDÔ"Ø ˆDÕüs9  ‚P'„P †0J ¶J·!J ÁAJ Â+P Â-AJ Ä JÄJ ÄP ÄAJ ÅJÅA.J ÇJÇAJ È!JÈ"AJ É1JÉ2
J É<P É>P'ÊJ ÊJ ÊJ ÊJ ÊJ ÊJ Ê<PËP ËPË,LÌ
P ÌPÌ%M	ÍP Í	PÍM9Í4P Í9PÎN*Î$P Î*PÎ6OÏP ÏPÏ'PÐP ÐPÐP ÐP$Ð$P'c              ƒ   ó8  K  — | j                  «       ƒ d {  –—†  | j                  | j                  k  r‰| j                  | j                  «      }| j                  j                  d| j                  | j                  z
  › d|› �«       t        j                  |«      ƒ d {  –—†  | j                  «       ƒ d {  –—†  y | j                  j                  d| j                  › d�«       | j                  j                  dddœ«      ƒ d {  –—†  t        ‚7 Œû7 Œt7 Œ^7 Œ­w)Nzwebsocket reconnecting. z reconnects left - waiting zMax reconnections z	 reached:r[   zMax reconnect retries reachedr|   )Úbefore_reconnectrD   ÚMAX_RECONNECTSÚ_get_reconnect_waitr?   rv   rJ   r   rS   r[   rL   rŒ   r   )rN   Úreconnect_waits     r#   r‚   z$ReconnectingWebsocket._run_reconnect®   s  è ø€ Ø×#Ñ#Ó%×%Ð%Ø×Ñ˜d×1Ñ1Ò1Ø!×5Ñ5°d×6FÑ6FÓGˆNØ�I‰I�O‰OØ*¨4×+>Ñ+>À×AQÑAQÑ+QÐ*Rð SØ)Ð*ð,ôô —-‘- Ó/×/Ð/Ø—,‘,“.× Ñ à�I‰I�O‰OÐ0°×1DÑ1DÐ0EÀYÐOÔPà—+‘+—/‘/ØØ4ñ#ó ÷ ð ô 2Ð1ð! 	&øð 0øØ øðúsG   ‚D–D—BDÂDÂ DÂ7DÂ8ADÄDÄDÄDÄDÄDc              ƒ   ó(  K  — d }|sE	 t        j                  | j                  j                  «       | j                  ¬«      ƒ d {  –—† }|sŒE|S 7 Œ	# t         j
                  $ r, | j                  j                  d| j                  › d�«       Y ŒEw xY w­w)Nrz   r   r€   )rJ   r‡   rL   Úgetr‰   r�   r?   rv   )rN   r‘   s     r#   rˆ   zReconnectingWebsocket.recvÁ   s}   è ø€ ØˆÙðIÜ#×,Ñ,¨T¯[©[¯_©_Ó->ÈÏÉÔU×U�ò ð
 ˆ
ð VùÜ×'Ñ'ò IØ—	‘	—‘ .°·±°¸hÐ GÖHðIüs@   ‚Bˆ<A ÁAÁA Á	BÁBÁA Á<BÂBÂBÂBc              ƒ   ó&  K  — | j                   t        j                  k7  rn| j                   t        j                  k7  rPt	        d«      ƒ d {  –—†  | j                   t        j                  k7  r| j                   t        j                  k7  rŒNy y y y 7 ŒC­wrj   )rI   r   r   r    r   rT   s    r#   Ú_wait_for_reconnectz)ReconnectingWebsocket._wait_for_reconnectÊ   sg   è ø€ Ø�m‰mœ×8Ñ8Ò8¸T¿]¹]Ìo×NeÑNeÒ=eÜ˜“*×Ðð �m‰mœ×8Ñ8Ò8¸T¿]¹]Ìo×NeÑNeÔ=eÐ8Ð=eÐ8Øús   ‚A	BÁBÁ>BÂBÚattemptsÚreturnc                 ól   — d|z  }t        t        «       t        | j                  |dz
  «      z  dz   «      S )Né   r   )Úroundr   ÚminÚMAX_RECONNECT_SECONDS)rN   r›   Úexpos      r#   r•   z)ReconnectingWebsocket._get_reconnect_waitÎ   s3   € Ø�H‰}ˆÜ”V“X¤ D×$>Ñ$>ÀÀqÁÓ IÑIÈAÑMÓNÐNr"   c              ƒ   óÂ   K  — | j                   r8| j                  r,| j                  j                  d d d «      ƒ d {  –—†  d | _         | xj                  dz  c_        y 7 Œ!­w)Nr   )rH   rF   rZ   rD   rT   s    r#   r“   z&ReconnectingWebsocket.before_reconnectÒ   sL   è ø€ Ø�7Š7�t—z’zØ—*‘*×&Ñ& t¨T°4Ó8×8Ð8ØˆDŒGØ×Ò˜AÑÖð 9ús   ‚9A»A¼"Ac                 ód   — | j                   j                  d«       t        j                  | _        y )Nz!No message received, reconnecting)r?   rv   r   r   rI   rT   s    r#   Ú_no_message_received_reconnectz4ReconnectingWebsocket._no_message_received_reconnectØ   s    € Ø�	‰	�‰Ð;Ô<Ü'×4Ñ4ˆ�r"   c              ƒ   ó6   K  — t         j                  | _        y ­wrR   )r   r   rI   rT   s    r#   rc   z ReconnectingWebsocket._reconnectÜ   s   è ø€ Ü'×4Ñ4ˆ�ùs   ‚)Núws/FN)r   r   r   r”   r¡   ÚMIN_RECONNECT_WAITr‰   ÚNO_MESSAGE_RECONNECT_TIMEOUTr‹   Ústrr   ÚboolrP   rU   rZ   rS   r\   rb   rd   rx   rg   r‚   rˆ   rš   Úintr•   r“   r¥   rc   r!   r"   r#   r1   r1   (   s±   „ Ø€NØÐØÐØ€GØ#%Ð Ø€Nð mqñ&Øð&Ø& s™mð&Ø<?ð&ØTXó&ò$ò)òmò"ò
òò
ò1!òf2ò&òðO¨Cð O°Có Oòò5ó5r"   r1   c                   óR   ‡ — e Zd Z	 	 d	defˆ fd„Zˆ fd„Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ˆ xZS )
ÚKeepAliveWebsocketÚclientc                 óv   •— t         ‰| �  d ||||¬«       || _        || _        |xs t        | _        d | _        y )N)r8   r7   r9   r:   rO   )ÚsuperrP   Ú_keepalive_typeÚ_clientÚKEEPALIVE_TIMEOUTÚ_user_timeoutÚ_timer)	rN   r¯   r7   Úkeepalive_typer9   r:   rO   Úuser_timeoutÚ	__class__s	           €r#   rP   zKeepAliveWebsocket.__init__â   sB   ø€ ô 	‰Ñ˜d¨°FÀiÐ[dÐÔeØ-ˆÔØˆŒØ)Ò>Ô->ˆÔØˆ�r"   c              �   ó´   •K  — | j                   sy | j                  r!| j                  j                  «        d | _        t        ‰| �  |i |¤Žƒ d {  –—†  y 7 Œ­wrR   )r@   r¶   Úcancelr±   rZ   )rN   ÚargsÚkwargsr¹   s      €r#   rZ   zKeepAliveWebsocket.__aexit__ì   sG   øè ø€ Ø�zŠzØØ�;Š;Ø�K‰K×ÑÔ ØˆDŒKÜ‰gÑ Ð0¨Ñ0×0Ò0ús   ƒAAÁAÁAc              ƒ   ód   K  — | j                   s| j                  «       ƒ d {  –—† | _         y y 7 Œ­wrR   )r@   Ú_get_listen_keyrT   s    r#   rb   z"KeepAliveWebsocket._before_connectô   s(   è ø€ Ø�zŠzØ#×3Ñ3Ó5×5ˆD�Jð Ø5ús   ‚ 0¢.£0c              ƒ   ó,   K  — | j                  «        y ­wrR   )Ú_start_socket_timerrT   s    r#   rd   z!KeepAliveWebsocket._after_connectø   s   è ø€ Ø× Ñ Õ"ùs   ‚c                 ób   ‡ — ‰ j                   j                  ‰ j                  ˆ fd„«      ‰ _        y )Nc                  óJ   •— t        j                  ‰ j                  «       «      S rR   )rJ   rf   Ú_keepalive_socketrT   s   €r#   Ú<lambda>z8KeepAliveWebsocket._start_socket_timer.<locals>.<lambda>þ   s   ø€ ”G×'Ñ'¨×(>Ñ(>Ó(@ÔAr"   )r<   Ú
call_laterrµ   r¶   rT   s   `r#   rÁ   z&KeepAliveWebsocket._start_socket_timerû   s%   ø€ Ø—j‘j×+Ñ+Ø×ÑÛAó
ˆ�r"   c              ƒ   ó  K  — | j                   dk(  r$| j                  j                  «       ƒ d {  –—† }|S | j                   dk(  r$| j                  j                  «       ƒ d {  –—† }|S | j                   dk(  r$| j                  j	                  «       ƒ d {  –—† }|S | j                   dk(  r$| j                  j                  «       ƒ d {  –—† }|S | j                  j                  | j                   «      ƒ d {  –—† }|S 7 ŒÎ7 Œ�7 Œl7 Œ;7 Œ­w)NÚuserÚmarginÚfuturesÚcoin_futures)r²   r³   Ústream_get_listen_keyÚmargin_stream_get_listen_keyÚfutures_stream_get_listen_keyÚ"futures_coin_stream_get_listen_keyÚ%isolated_margin_stream_get_listen_key©rN   Ú
listen_keys     r#   r¿   z"KeepAliveWebsocket._get_listen_key  s÷   è ø€ Ø×Ñ 6Ò)Ø#Ÿ|™|×AÑAÓC×CˆJð Ðð ×!Ñ! XÒ-Ø#Ÿ|™|×HÑHÓJ×JˆJð Ðð ×!Ñ! YÒ.Ø#Ÿ|™|×IÑIÓK×KˆJð Ðð ×!Ñ! ^Ò3Ø#Ÿ|™|×NÑNÓP×PˆJð Ðð  $Ÿ|™|×QÑQÐRV×RfÑRfÓg×gˆJØÐð DøàJøàKøàPøð húsW   ‚-D¯C>°2DÁ"D Á#2DÂDÂ2DÃDÃ	.DÃ7DÃ8DÄ DÄDÄDÄDc              ƒ   óì  K  — 	 | j                  «       ƒ d {  –—† }|| j                  k7  r<| j                  j                  d«       || _        | j	                  «       ƒ d {  –—†  �nG| j                  j                  d«       | j
                  dk(  r.| j                  j                  | j                  «      ƒ d {  –—†  nï| j
                  dk(  r.| j                  j                  | j                  «      ƒ d {  –—†  n²| j
                  dk(  r.| j                  j                  | j                  «      ƒ d {  –—†  nu| j
                  dk(  r.| j                  j                  | j                  «      ƒ d {  –—†  n8| j                  j                  | j
                  | j                  «      ƒ d {  –—†  | j                  «        y 7 �Œ¨7 �Œb7 �Œ7 ŒÑ7 Œ–7 Œ[7 Œ$# t        $ r Y Œ-w xY w# | j                  «        w xY w­w)Nzlisten key changed: reconnectzlisten key same: keepaliverÈ   rÉ   rÊ   rË   )r¿   r@   r?   rv   rc   r²   r³   Ústream_keepaliveÚmargin_stream_keepaliveÚfutures_stream_keepaliveÚfutures_coin_stream_keepaliveÚ isolated_margin_stream_keepaliver�   rÁ   rÑ   s     r#   rÄ   z$KeepAliveWebsocket._keepalive_socket  s…  è ø€ ð	'Ø#×3Ñ3Ó5×5ˆJØ˜TŸZ™ZÒ'Ø—	‘	—‘Ð ?Ô@Ø'�”
Ø—o‘oÓ'×'Ò'à—	‘	—‘Ð <Ô=Ø×'Ñ'¨6Ò1ØŸ,™,×7Ñ7¸¿
¹
ÓC×CÑCØ×)Ñ)¨XÒ5ØŸ,™,×>Ñ>¸t¿z¹zÓJ×JÑJØ×)Ñ)¨YÒ6ØŸ,™,×?Ñ?ÀÇ
Á
ÓK×KÑKØ×)Ñ)¨^Ò;ØŸ,™,×DÑDÀTÇZÁZÓP×PÑPð Ÿ,™,×GÑGÈ×H\ÑH\Ð^b×^hÑ^hÓi×iÐið ×$Ñ$Õ&ð+ 6ùð (ùð DùàJøàKøàPøð jùÜò 	Ùð	ûð ×$Ñ$Õ&üs²   ‚G4„G —F?˜AG Á GÁ!AG Â9GÂ:<G Ã6GÃ7<G Ä3G
Ä4<G Å0GÅ18G Æ)GÆ*G Æ.G4Æ?G ÇG ÇG ÇG Ç
G ÇG ÇG Ç	GÇG ÇGÇG ÇG1Ç1G4)r§   FNN)r   r   r   r   rP   rZ   rb   rd   rÁ   r¿   rÄ   Ú__classcell__©r¹   s   @r#   r®   r®   à   s8   ø„ ð bfØñØ!õô1ò6ò#ò
òö'r"   r®   c                   óú  — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZefdefd„ZdIdee   fd„Zdddej*                  fdedee   dedededefd„Z	 dJdedee   dedefd„ZdKdededefd„ZdLdedefd„Zdefd„ZdMdedee   d ee   fd!„Zej@                  fdefd"„Z!ej@                  ejD                  e#jH                  fdeded#e#fd$„Z%dNd%efd&„Z&defd'„Z'defd(„Z(ejD                  fdedefd)„Z)defd*„Z*defd+„Z+d,„ Z,dOded.efd/„Z-d
ejD                  fdedefd0„Z.d-ejD                  fded.edefd1„Z/d-ejD                  fd.edefd2„Z0ejD                  fdedefd3„Z1ejD                  fdedefd4„Z2ejD                  fdefd5„Z3defd6„Z4d7„ Z5d8e6e   fd9„Z7d8e6e   fd:„Z8ejD                  fd8e6e   defd;„Z9d<„ Z:d=„ Z;d>„ Z<d?„ Z=d@„ Z>defdA„Z?defdB„Z@dedCefdD„ZAdefdE„ZBej@                  fdefdF„ZCdPdedefdG„ZDdH„ ZEy)QÚBinanceSocketManagerzwss://stream.binance.{}:9443/zwss://testnet.binance.vision/zwss://fstream.binance.{}/zwss://stream.binancefuture.com/zwss://dstream.binance.{}/z wss://dstream.binancefuture.com/zwss://vstream.binance.{}/zwss://testnetws.binanceops.{}/Ú5Ú10Ú20r¯   c                 ó&  — | j                   j                  |j                  «      | _         | j                  j                  |j                  «      | _        | j                  j                  |j                  «      | _        | j
                  j                  |j                  «      | _        | j                  j                  |j                  «      | _        i | _        t        «       | _	        || _
        || _        | j                  j                  | _        y)z‚Initialise the BinanceSocketManager

        :param client: Binance API client
        :type client: binance.AsyncClient

        N)Ú
STREAM_URLÚformatÚtldÚFSTREAM_URLÚDSTREAM_URLÚVSTREAM_URLÚVSTREAM_TESTNET_URLÚ_connsr   r<   r³   rµ   Útestnet)rN   r¯   r¸   s      r#   rP   zBinanceSocketManager.__init__7  sÂ   € ð Ÿ/™/×0Ñ0°·±Ó<ˆŒØ×+Ñ+×2Ñ2°6·:±:Ó>ˆÔØ×+Ñ+×2Ñ2°6·:±:Ó>ˆÔØ×+Ñ+×2Ñ2°6·:±:Ó>ˆÔØ#'×#;Ñ#;×#BÑ#BÀ6Ç:Á:Ó#NˆÔ àˆŒÜ“ZˆŒ
ØˆŒØ)ˆÔà—|‘|×+Ñ+ˆ�r"   NÚ
stream_urlc                 óV   — |r|S | j                   }| j                  r| j                  }|S rR   )rá   ré   ÚSTREAM_TESTNET_URL©rN   rê   s     r#   Ú_get_stream_urlz$BinanceSocketManager._get_stream_urlK  s,   € ÙØÐØ—_‘_ˆ
Ø�<Š<Ø×0Ñ0ˆJØÐr"   r§   Fr8   r9   r:   Úsocket_typerœ   c                 ó®   ‡ ‡— ‰› d|› �}|‰ j                   vr0t        |‰ j                  |«      |ˆ ˆfd„|¬«      ‰ j                   |<   ‰ j                   |   S )NÚ_c                 ó0   •— ‰j                  ‰› d| › �«      S )Nrñ   )Ú_exit_socket)ÚprN   rï   s    €€r#   rÅ   z2BinanceSocketManager._get_socket.<locals>.<lambda>]  s   ø€  D×$5Ñ$5¸¸ÀQÀqÀcÐ6JÔ$Kr"   )r8   r7   r9   rO   r:   )rè   r1   rî   )rN   r8   rê   r9   r:   rï   Úconn_ids   `    ` r#   Ú_get_socketz BinanceSocketManager._get_socketS  s_   ù€ ð !�M  4 &Ð)ˆØ˜$Ÿ+™+Ñ%Ü#8ØØ×(Ñ(¨Ó4ØÜKØ#ô$ˆD�K‰K˜Ñ ð �{‰{˜7Ñ#Ð#r"   c           	      óþ   — t         j                  › d|› �}|| j                  vrLt        | j                  | j                  |«      ||| j                  || j                  ¬«      | j                  |<   | j                  |   S )Nrñ   )r¯   r7   r·   r9   rO   r:   r¸   )r%   r/   rè   r®   r³   rî   ró   rµ   )rN   r8   rê   r9   r:   rõ   s         r#   Ú_get_account_socketz(BinanceSocketManager._get_account_socketc  s{   € ô '×.Ñ.Ð/¨q°°Ð7ˆØ˜$Ÿ+™+Ñ%Ü#5Ø—|‘|Ø×(Ñ(¨Ó4Ø#ØØ×+Ñ+Ø#Ø!×/Ñ/ô$ˆD�K‰K˜Ñ ð �{‰{˜7Ñ#Ð#r"   Úfutures_typec                 ó  — t         j                  }|t        j                  k(  r%| j                  }| j
                  r1| j                  }n$| j                  }| j
                  r| j                  }| j                  ||||¬«      S )N)rï   )
r%   r,   r   ÚUSD_Mrä   ré   ÚFSTREAM_TESTNET_URLrå   ÚDSTREAM_TESTNET_URLrö   )rN   r8   rù   r9   rï   rê   s         r#   Ú_get_futures_socketz(BinanceSocketManager._get_futures_sockett  so   € Ü):×)HÑ)HˆØœ;×,Ñ,Ò,Ø×)Ñ)ˆJØ�|Š|Ø!×5Ñ5‘
à×)Ñ)ˆJØ�|Š|Ø!×5Ñ5�
Ø×Ñ  j°&ÀkÐÓRÐRr"   c                 ó’   — | j                   }| j                  r| j                  }| j                  |||dt        j
                  ¬«      S )NT)r:   rï   )ræ   ré   rç   rö   r%   r.   )rN   r8   r9   rê   s       r#   Ú_get_options_socketz(BinanceSocketManager._get_options_socket€  sB   € Ø×%Ñ%ˆ
Ø�<Š<Ø×1Ñ1ˆJØ×Ñ  j°&ÀDÔVg×VoÑVoÐÓpÐpr"   c              ƒ   óB   K  — | j                  |«      ƒ d {  –—†  y 7 Œ­wrR   )Ú_stop_socket)rN   r8   s     r#   ró   z!BinanceSocketManager._exit_socket†  s   è ø€ Ø×Ñ Ó%×%Ò%ús   ‚—˜ÚsymbolÚdepthÚintervalc                 ó˜   — |j                  «       dz   }|r|dk7  r|› |› �}|r|dv r	|› d|› d�}nt        d«      ‚| j                  |«      S )a		  Start a websocket for symbol market depth returning either a diff or a partial book

        https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md#partial-book-depth-streams

        :param symbol: required
        :type symbol: str
        :param depth: optional Number of depth entries to return, default None. If passed returns a partial book instead of a diff
        :type depth: str
        :param interval: optional interval for updates, default None. If not set, updates happen every second. Must be 0, None (1s) or 100 (100ms)
        :type interval: int

        :returns: connection key string if successful, False otherwise

        Partial Message Format

        .. code-block:: python

            {
                "lastUpdateId": 160,  # Last update ID
                "bids": [             # Bids to be updated
                    [
                        "0.0024",     # price level to be updated
                        "10",         # quantity
                        []            # ignore
                    ]
                ],
                "asks": [             # Asks to be updated
                    [
                        "0.0026",     # price level to be updated
                        "100",        # quantity
                        []            # ignore
                    ]
                ]
            }


        Diff Message Format

        .. code-block:: python

            {
                "e": "depthUpdate", # Event type
                "E": 123456789,     # Event time
                "s": "BNBBTC",      # Symbol
                "U": 157,           # First update ID in event
                "u": 160,           # Final update ID in event
                "b": [              # Bids to be updated
                    [
                        "0.0024",   # price level to be updated
                        "10",       # quantity
                        []          # ignore
                    ]
                ],
                "a": [              # Asks to be updated
                    [
                        "0.0026",   # price level to be updated
                        "100",      # quantity
                        []          # ignore
                    ]
                ]
            }

        ú@depthÚ1)r   r6   Ú@ÚmszAWebsocket interval value not allowed. Allowed values are [0, 100])Úlowerrr   rö   )rN   r  r  r  Úsocket_names        r#   Údepth_socketz!BinanceSocketManager.depth_socket‰  sf   € ð@ —l‘l“n xÑ/ˆÙ�U˜c’\Ø(˜M¨%¨Ð1ˆKÙØ˜8Ñ#Ø!, ¨Q¨x¨j¸Ð;‘ä Ð!dÓeÐeØ×Ñ Ó,Ð,r"   c                 óN   — |j                  «       › d|› �}| j                  |«      S )aW  Start a websocket for symbol kline data

        https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md#klinecandlestick-streams

        :param symbol: required
        :type symbol: str
        :param interval: Kline interval, default KLINE_INTERVAL_1MINUTE
        :type interval: str

        :returns: connection key string if successful, False otherwise

        Message Format

        .. code-block:: python

            {
                "e": "kline",					# event type
                "E": 1499404907056,				# event time
                "s": "ETHBTC",					# symbol
                "k": {
                    "t": 1499404860000, 		# start time of this bar
                    "T": 1499404919999, 		# end time of this bar
                    "s": "ETHBTC",				# symbol
                    "i": "1m",					# interval
                    "f": 77462,					# first trade id
                    "L": 77465,					# last trade id
                    "o": "0.10278577",			# open
                    "c": "0.10278645",			# close
                    "h": "0.10278712",			# high
                    "l": "0.10278518",			# low
                    "v": "17.47929838",			# volume
                    "n": 4,						# number of trades
                    "x": false,					# whether this bar is final
                    "q": "1.79662878",			# quote volume
                    "V": "2.34879839",			# volume of active buy
                    "Q": "0.24142166",			# quote volume of active buy
                    "B": "13279784.01349473"	# can be ignored
                    }
            }
        ú@kline_)r  rö   )rN   r  r  r8   s       r#   Úkline_socketz!BinanceSocketManager.kline_socketÓ  s-   € ðR —,‘,“.Ð! ¨¨
Ð3ˆØ×Ñ Ó%Ð%r"   Úcontract_typec                 ón   — |j                  «       › d|j                  › d|› �}| j                  |d|¬«      S )a½  Start a websocket for symbol kline data for the perpeual futures stream

        https://binance-docs.github.io/apidocs/futures/en/#continuous-contract-kline-candlestick-streams

        :param symbol: required
        :type symbol: str
        :param interval: Kline interval, default KLINE_INTERVAL_1MINUTE
        :type interval: str
        :param futures_type: use USD-M or COIN-M futures default USD-M
        :param contract_type: use PERPETUAL or CURRENT_QUARTER or NEXT_QUARTER default PERPETUAL

        :returns: connection key string if successful, False otherwise

        Message Format

        .. code-block:: python

                {
                "e":"continuous_kline",   // Event type
                "E":1607443058651,        // Event time
                "ps":"BTCUSDT",           // Pair
                "ct":"PERPETUAL"          // Contract type
                "k":{
                    "t":1607443020000,      // Kline start time
                    "T":1607443079999,      // Kline close time
                    "i":"1m",               // Interval
                    "f":116467658886,       // First trade ID
                    "L":116468012423,       // Last trade ID
                    "o":"18787.00",         // Open price
                    "c":"18804.04",         // Close price
                    "h":"18804.04",         // High price
                    "l":"18786.54",         // Low price
                    "v":"197.664",          // volume
                    "n": 543,               // Number of trades
                    "x":false,              // Is this kline closed?
                    "q":"3715253.19494",    // Quote asset volume
                    "V":"184.769",          // Taker buy volume
                    "Q":"3472925.84746",    //Taker buy quote asset volume
                    "B":"0"                 // Ignore
                }
            }
            <pair>_<contractType>@continuousKline_<interval>
        rñ   z@continuousKline_r§   ©r9   rù   )r  Úvaluerþ   )rN   r  r  rù   r  r8   s         r#   Úkline_futures_socketz)BinanceSocketManager.kline_futures_socketÿ  sB   € ð^ —,‘,“.Ð!  =×#6Ñ#6Ð"7Ð7HÈÈ
ÐSˆØ×'Ñ'¨°UÈÐ'ÓVÐVr"   Úupdate_timec                 ó,   — | j                  d|› d�«      S )aØ  Start a miniticker websocket for all trades

        This is not in the official Binance api docs, but this is what
        feeds the right column on a ticker page on Binance.

        :param update_time: time between callbacks in milliseconds, must be 1000 or greater
        :type update_time: int

        :returns: connection key string if successful, False otherwise

        Message Format

        .. code-block:: python

            [
                {
                    'e': '24hrMiniTicker',  # Event type
                    'E': 1515906156273,     # Event time
                    's': 'QTUMETH',         # Symbol
                    'c': '0.03836900',      # close
                    'o': '0.03953500',      # open
                    'h': '0.04400000',      # high
                    'l': '0.03756000',      # low
                    'v': '147435.80000000', # volume
                    'q': '5903.84338533'    # quote volume
                }
            ]
        z!miniTicker@arr@r
  ©rö   )rN   r  s     r#   Úminiticker_socketz&BinanceSocketManager.miniticker_socket1  s   € ð< ×ÑÐ"2°;°-¸rÐ BÓCÐCr"   c                 óF   — | j                  |j                  «       dz   «      S )a’  Start a websocket for symbol trade data

        https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md#trade-streams

        :param symbol: required
        :type symbol: str

        :returns: connection key string if successful, False otherwise

        Message Format

        .. code-block:: python

            {
                "e": "trade",     # Event type
                "E": 123456789,   # Event time
                "s": "BNBBTC",    # Symbol
                "t": 12345,       # Trade ID
                "p": "0.001",     # Price
                "q": "100",       # Quantity
                "b": 88,          # Buyer order Id
                "a": 50,          # Seller order Id
                "T": 123456785,   # Trade time
                "m": true,        # Is the buyer the market maker?
                "M": true         # Ignore.
            }

        ú@trade©rö   r  ©rN   r  s     r#   Útrade_socketz!BinanceSocketManager.trade_socketQ  s    € ð< ×Ñ §¡£°Ñ 9Ó:Ð:r"   c                 óF   — | j                  |j                  «       dz   «      S )a±  Start a websocket for symbol trade data

        https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md#aggregate-trade-streams

        :param symbol: required
        :type symbol: str

        :returns: connection key string if successful, False otherwise

        Message Format

        .. code-block:: python

            {
                "e": "aggTrade",		# event type
                "E": 1499405254326,		# event time
                "s": "ETHBTC",			# symbol
                "a": 70232,				# aggregated tradeid
                "p": "0.10281118",		# price
                "q": "8.15632997",		# quantity
                "f": 77489,				# first breakdown trade id
                "l": 77489,				# last breakdown trade id
                "T": 1499405254324,		# trade time
                "m": false,				# whether buyer is a maker
                "M": true				# can be ignored
            }

        ú	@aggTrader  r  s     r#   Úaggtrade_socketz$BinanceSocketManager.aggtrade_socketq  s    € ð: ×Ñ §¡£°Ñ <Ó=Ð=r"   c                 óJ   — | j                  |j                  «       dz   |¬«      S )aP  Start a websocket for aggregate symbol trade data for the futures stream

        :param symbol: required
        :param futures_type: use USD-M or COIN-M futures default USD-M

        :returns: connection key string if successful, False otherwise

        Message Format

        .. code-block:: python

            {
                "e": "aggTrade",  // Event type
                "E": 123456789,   // Event time
                "s": "BTCUSDT",    // Symbol
                "a": 5933014,     // Aggregate trade ID
                "p": "0.001",     // Price
                "q": "100",       // Quantity
                "f": 100,         // First trade ID
                "l": 105,         // Last trade ID
                "T": 123456785,   // Trade time
                "m": true,        // Is the buyer the market maker?
            }

        r   ©rù   ©rþ   r  ©rN   r  rù   s      r#   Úaggtrade_futures_socketz,BinanceSocketManager.aggtrade_futures_socket�  s&   € ð4 ×'Ñ'¨¯©«¸Ñ(DÐS_Ð'Ó`Ð`r"   c                 óF   — | j                  |j                  «       dz   «      S )a  Start a websocket for a symbol's miniTicker data

                https://binance-docs.github.io/apidocs/spot/en/#individual-symbol-mini-ticker-stream

                :param symbol: required
                :type symbol: str

                :returns: connection key string if successful, False otherwise

                Message Format

                .. code-block:: python

                    {
                        "e": "24hrMiniTicker",  // Event type
                        "E": 123456789,         // Event time
                        "s": "BNBBTC",          // Symbol
                        "c": "0.0025",          // Close price
                        "o": "0.0010",          // Open price
                        "h": "0.0025",          // High price
                        "l": "0.0010",          // Low price
                        "v": "10000",           // Total traded base asset volume
                        "q": "18"               // Total traded quote asset volume
                    }

                z@miniTickerr  r  s     r#   Úsymbol_miniticker_socketz-BinanceSocketManager.symbol_miniticker_socket¬  s    € ð6 ×Ñ §¡£°Ñ >Ó?Ð?r"   c                 óF   — | j                  |j                  «       dz   «      S )a£  Start a websocket for a symbol's ticker data

        https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md#individual-symbol-ticker-streams

        :param symbol: required
        :type symbol: str

        :returns: connection key string if successful, False otherwise

        Message Format

        .. code-block:: python

            {
                "e": "24hrTicker",  # Event type
                "E": 123456789,     # Event time
                "s": "BNBBTC",      # Symbol
                "p": "0.0015",      # Price change
                "P": "250.00",      # Price change percent
                "w": "0.0018",      # Weighted average price
                "x": "0.0009",      # Previous day's close price
                "c": "0.0025",      # Current day's close price
                "Q": "10",          # Close trade's quantity
                "b": "0.0024",      # Best bid price
                "B": "10",          # Bid bid quantity
                "a": "0.0026",      # Best ask price
                "A": "100",         # Best ask quantity
                "o": "0.0010",      # Open price
                "h": "0.0025",      # High price
                "l": "0.0010",      # Low price
                "v": "10000",       # Total traded base asset volume
                "q": "18",          # Total traded quote asset volume
                "O": 0,             # Statistics open time
                "C": 86400000,      # Statistics close time
                "F": 0,             # First trade ID
                "L": 18150,         # Last trade Id
                "n": 18151          # Total number of trades
            }

        ú@tickerr  r  s     r#   Úsymbol_ticker_socketz)BinanceSocketManager.symbol_ticker_socketÉ  s!   € ðR ×Ñ §¡£°Ñ :Ó;Ð;r"   c                 ó$   — | j                  d«      S )a"  Start a websocket for all ticker data

        By default all markets are included in an array.

        https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md#all-market-tickers-stream

        :param coro: callback function to handle messages
        :type coro: function

        :returns: connection key string if successful, False otherwise

        Message Format

        .. code-block:: python

            [
                {
                    'F': 278610,
                    'o': '0.07393000',
                    's': 'BCCBTC',
                    'C': 1509622420916,
                    'b': '0.07800800',
                    'l': '0.07160300',
                    'h': '0.08199900',
                    'L': 287722,
                    'P': '6.694',
                    'Q': '0.10000000',
                    'q': '1202.67106335',
                    'p': '0.00494900',
                    'O': 1509536020916,
                    'a': '0.07887800',
                    'n': 9113,
                    'B': '1.00000000',
                    'c': '0.07887900',
                    'x': '0.07399600',
                    'w': '0.07639068',
                    'A': '2.41900000',
                    'v': '15743.68900000'
                }
            ]
        z!ticker@arrr  rT   s    r#   Úticker_socketz"BinanceSocketManager.ticker_socketô  s   € ðT ×Ñ Ó.Ð.r"   TÚfastc                 ór   — |rdnd}| j                  |j                  «       |z   t        j                  ¬«      S )aP  Start a websocket for a symbol's futures mark price
        https://binance-docs.github.io/apidocs/delivery/en/#index-price-stream
        :param symbol: required
        :param fast: use faster or 1s default
        :returns: connection key string if successful, False otherwise

        Message Format
        .. code-block:: python
            {
                "e": "indexPriceUpdate",  // Event type
                "E": 1591261236000,       // Event time
                "i": "BTCUSD",            // Pair
                "p": "9636.57860000",     // Index Price
              }
        z@indexPrice@1sz@indexPricer#  )rþ   r  r   ÚCOIN_M)rN   r  r.  Ústream_names       r#   Úindex_price_socketz'BinanceSocketManager.index_price_socket   s6   € ñ  +/Ñ&°MˆØ×'Ñ'¨¯©«¸Ñ(DÔS^×SeÑSeÐ'ÓfÐfr"   c                 ób   — | j                  |j                  «       dz   t        |«      z   |¬«      S )aq  Subscribe to a futures depth data stream

        https://binance-docs.github.io/apidocs/futures/en/#partial-book-depth-streams

        :param symbol: required
        :type symbol: str
        :param depth: optional Number of depth entries to return, default 10.
        :type depth: str
        :param futures_type: use USD-M or COIN-M futures default USD-M
        r  r#  )rþ   r  rª   )rN   r  r  rù   s       r#   Úfutures_depth_socketz)BinanceSocketManager.futures_depth_socket3  s/   € ð ×'Ñ'¨¯©«¸Ñ(AÄCÈÃJÑ(NÐ]iÐ'ÓjÐjr"   c                 óV   — |rdnd}| j                  |j                  «       |z   |¬«      S )a  Start a websocket for a symbol's futures mark price
        https://binance-docs.github.io/apidocs/futures/en/#mark-price-stream
        :param symbol: required
        :param fast: use faster or 1s default
        :param futures_type: use USD-M or COIN-M futures default USD-M
        :returns: connection key string if successful, False otherwise
        Message Format
        .. code-block:: python
            {
                "e": "markPriceUpdate",  // Event type
                "E": 1562305380000,      // Event time
                "s": "BTCUSDT",          // Symbol
                "p": "11185.87786614",   // Mark price
                "r": "0.00030000",       // Funding rate
                "T": 1562306400000       // Next funding time
            }
        z@markPrice@1sz
@markPricer#  r$  )rN   r  r.  rù   r1  s        r#   Úsymbol_mark_price_socketz-BinanceSocketManager.symbol_mark_price_socket@  s/   € ñ$ *.‘o°<ˆØ×'Ñ'¨¯©«¸Ñ(DÐS_Ð'Ó`Ð`r"   c                 ó4   — |rdnd}| j                  ||¬«      S )ai  Start a websocket for all futures mark price data
        By default all symbols are included in an array.
        https://binance-docs.github.io/apidocs/futures/en/#mark-price-stream-for-all-market
        :param fast: use faster or 1s default
        :param futures_type: use USD-M or COIN-M futures default USD-M
        :returns: connection key string if successful, False otherwise
        Message Format
        .. code-block:: python

            [
                {
                    "e": "markPriceUpdate",  // Event type
                    "E": 1562305380000,      // Event time
                    "s": "BTCUSDT",          // Symbol
                    "p": "11185.87786614",   // Mark price
                    "r": "0.00030000",       // Funding rate
                    "T": 1562306400000       // Next funding time
                }
            ]
        z!markPrice@arr@1sz!markPrice@arrr#  ©rþ   )rN   r.  rù   r1  s       r#   Úall_mark_price_socketz*BinanceSocketManager.all_mark_price_socketU  s%   € ñ* .2Ñ)Ð7GˆØ×'Ñ'¨À,Ð'ÓOÐOr"   c                 óJ   — | j                  |j                  «       dz   |¬«      S )a  Start a websocket for a symbol's ticker data
        By default all markets are included in an array.
        https://binance-docs.github.io/apidocs/futures/en/#individual-symbol-book-ticker-streams
        :param symbol: required
        :param futures_type: use USD-M or COIN-M futures default USD-M
        :returns: connection key string if successful, False otherwise
        .. code-block:: python
            [
                {
                  "u":400900217,     // order book updateId
                  "s":"BNBUSDT",     // symbol
                  "b":"25.35190000", // best bid price
                  "B":"31.21000000", // best bid qty
                  "a":"25.36520000", // best ask price
                  "A":"40.66000000"  // best ask qty
                }
            ]
        ú@bookTickerr#  r$  r%  s      r#   Úsymbol_ticker_futures_socketz1BinanceSocketManager.symbol_ticker_futures_socketm  s&   € ð& ×'Ñ'¨¯©«¸Ñ(FÐUaÐ'ÓbÐbr"   c                 óJ   — | j                  |j                  «       dz   |¬«      S )ai  Start a futures websocket for a single symbol's ticker data
        https://binance-docs.github.io/apidocs/futures/en/#individual-symbol-ticker-streams
        :param symbol: required
        :type symbol: str
        :param futures_type: use USD-M or COIN-M futures default USD-M
        :returns: connection key string if successful, False otherwise
        .. code-block:: python
            {
                "e": "24hrTicker",  // Event type
                "E": 123456789,     // Event time
                "s": "BTCUSDT",     // Symbol
                "p": "0.0015",      // Price change
            }
        r*  r#  r$  r%  s      r#   Ú'individual_symbol_ticker_futures_socketz<BinanceSocketManager.individual_symbol_ticker_futures_socket‚  s&   € ð ×'Ñ'¨¯©«¸Ñ(BÐQ]Ð'Ó^Ð^r"   c                 ó(   — | j                  d|¬«      S )a  Start a websocket for all ticker data
        By default all markets are included in an array.
        https://binance-docs.github.io/apidocs/futures/en/#all-book-tickers-stream
        :param futures_type: use USD-M or COIN-M futures default USD-M
        :returns: connection key string if successful, False otherwise
        Message Format
        .. code-block:: python
            [
                {
                  "u":400900217,     // order book updateId
                  "s":"BNBUSDT",     // symbol
                  "b":"25.35190000", // best bid price
                  "B":"31.21000000", // best bid qty
                  "a":"25.36520000", // best ask price
                  "A":"40.66000000"  // best ask qty
                }
            ]
        ú!bookTickerr#  r8  )rN   rù   s     r#   Úall_ticker_futures_socketz.BinanceSocketManager.all_ticker_futures_socket“  s   € ð( ×'Ñ'¨ÀLÐ'ÓQÐQr"   c                 óF   — | j                  |j                  «       dz   «      S )aý  Start a websocket for the best bid or ask's price or quantity for a specified symbol.

        https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md#individual-symbol-book-ticker-streams

        :param symbol: required
        :type symbol: str

        :returns: connection key string if successful, False otherwise

        Message Format

        .. code-block:: python

            {
                "u":400900217,     // order book updateId
                "s":"BNBUSDT",     // symbol
                "b":"25.35190000", // best bid price
                "B":"31.21000000", // best bid qty
                "a":"25.36520000", // best ask price
                "A":"40.66000000"  // best ask qty
            }

        r;  r  r  s     r#   Úsymbol_book_ticker_socketz.BinanceSocketManager.symbol_book_ticker_socket©  s    € ð0 ×Ñ §¡£°Ñ >Ó?Ð?r"   c                 ó$   — | j                  d«      S )a­  Start a websocket for the best bid or ask's price or quantity for all symbols.

        https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md#all-book-tickers-stream

        :returns: connection key string if successful, False otherwise

        Message Format

        .. code-block:: python

            {
                // Same as <symbol>@bookTicker payload
            }

        r@  r  rT   s    r#   Úbook_ticker_socketz'BinanceSocketManager.book_ticker_socketÃ  s   € ð  ×Ñ Ó.Ð.r"   Ústreamsc                 óP   — ddj                  |«      › �}| j                  |d¬«      S )at  Start a multiplexed socket using a list of socket names.
        User stream sockets can not be included.

        Symbols in socket name must be lowercase i.e bnbbtc@aggTrade, neobtc@ticker

        Combined stream events are wrapped as follows: {"stream":"<streamName>","data":<rawPayload>}

        https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md

        :param streams: list of stream names in lower case
        :type streams: list

        :returns: connection key string if successful, False otherwise

        Message Format - see Binance API docs for all types

        ústreams=Ú/ústream?©r9   )Újoinrö   )rN   rF  r8   s      r#   Úmultiplex_socketz%BinanceSocketManager.multiplex_socketÕ  s0   € ð$ ˜#Ÿ(™( 7Ó+Ð,Ð-ˆØ×Ñ ¨YÐÓ7Ð7r"   c                 ó–   — dj                  |D �cg c]  }|j                  «       ‘Œ c}«      }d|› �}| j                  |d¬«      S c c}w )af  Start a multiplexed socket using a list of socket names.
        User stream sockets can not be included.

        Symbols in socket name must be lowercase i.e bnbbtc@aggTrade, neobtc@ticker

        Combined stream events are wrapped as follows: {"stream":"<streamName>","data":<rawPayload>}

        https://binance-docs.github.io/apidocs/voptions/en/#account-and-trading-interface

        :param streams: list of stream names in lower case
        :type streams: list

        :returns: connection key string if successful, False otherwise

        Message Format - see Binance API docs for all types

        rI  rH  rJ  rK  )rL  r  r   )rN   rF  Úsr1  Ústream_paths        r#   Úoptions_multiplex_socketz-BinanceSocketManager.options_multiplex_socketê  sN   € ð$ —h‘h±7Ó;±7¨a §¡¥	°7Ñ;Ó<ˆØ   Ð.ˆØ×'Ñ'¨¸IÐ'ÓFÐFùò  <s   �Ac                 óR   — ddj                  |«      › �}| j                  |d|¬«      S )aŸ  Start a multiplexed socket using a list of socket names.
        User stream sockets can not be included.

        Symbols in socket name must be lowercase i.e bnbbtc@aggTrade, neobtc@ticker

        Combined stream events are wrapped as follows: {"stream":"<streamName>","data":<rawPayload>}

        https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md

        :param streams: list of stream names in lower case
        :param futures_type: use USD-M or COIN-M futures default USD-M

        :returns: connection key string if successful, False otherwise

        Message Format - see Binance API docs for all types

        rH  rI  rJ  r  )rL  rþ   )rN   rF  rù   r8   s       r#   Úfutures_multiplex_socketz-BinanceSocketManager.futures_multiplex_socket   s2   € ð$ ˜#Ÿ(™( 7Ó+Ð,Ð-ˆØ×'Ñ'¨°YÈ\Ð'ÓZÐZr"   c                 óp   — | j                   }| j                  r| j                  }| j                  d|¬«      S )a\  Start a websocket for user data

        https://github.com/binance-exchange/binance-official-api-docs/blob/master/user-data-stream.md
        https://binance-docs.github.io/apidocs/spot/en/#listen-key-spot

        :returns: connection key string if successful, False otherwise

        Message Format - see Binance API docs for all types
        rÈ   ©rê   ©rá   ré   rì   rø   rí   s     r#   Úuser_socketz BinanceSocketManager.user_socket  s5   € ð —_‘_ˆ
Ø�<Š<Ø×0Ñ0ˆJØ×'Ñ'¨¸:Ð'ÓFÐFr"   c                 óp   — | j                   }| j                  r| j                  }| j                  d|¬«      S )a	  Start a websocket for coin futures user data

        https://binance-docs.github.io/apidocs/futures/en/#user-data-streams

        :returns: connection key string if successful, False otherwise

        Message Format - see Binanace API docs for all types
        rÊ   rU  ©rä   ré   rü   rø   rí   s     r#   Úfutures_user_socketz(BinanceSocketManager.futures_user_socket$  s7   € ð ×%Ñ%ˆ
Ø�<Š<Ø×1Ñ1ˆJØ×'Ñ'¨	¸jÐ'ÓIÐIr"   c                 óp   — | j                   }| j                  r| j                  }| j                  d|¬«      S )a   Start a websocket for cross-margin data

        https://binance-docs.github.io/apidocs/spot/en/#listen-key-margin

        :returns: connection key string if successful, False otherwise

        Message Format - see Binance API docs for all types
        rÉ   rU  rV  rí   s     r#   Úmargin_socketz"BinanceSocketManager.margin_socket3  s5   € ð —_‘_ˆ
Ø�<Š<Ø×0Ñ0ˆJØ×'Ñ'¨¸ZÐ'ÓHÐHr"   c                 óp   — | j                   }| j                  r| j                  }| j                  d|¬«      S )a	  Start a websocket for futures data

            https://binance-docs.github.io/apidocs/futures/en/#websocket-market-streams

        :returns: connection key string if successful, False otherwise

        Message Format - see Binance API docs for all types
        rÊ   rU  rY  rí   s     r#   Úfutures_socketz#BinanceSocketManager.futures_socketA  s7   € ð ×%Ñ%ˆ
Ø�<Š<Ø×1Ñ1ˆJØ×'Ñ'¨	¸jÐ'ÓIÐIr"   c                 óp   — | j                   }| j                  r| j                  }| j                  d|¬«      S )a  Start a websocket for coin futures data

            https://binance-docs.github.io/apidocs/delivery/en/#websocket-market-streams

        :returns: connection key string if successful, False otherwise

        Message Format - see Binance API docs for all types
        rË   rU  )rå   ré   rý   rø   rí   s     r#   Úcoin_futures_socketz(BinanceSocketManager.coin_futures_socketO  s7   € ð ×%Ñ%ˆ
Ø�<Š<Ø×1Ñ1ˆJØ×'Ñ'¨À:Ð'ÓNÐNr"   c                 óp   — | j                   }| j                  r| j                  }| j                  ||¬«      S )ap  Start a websocket for isolated margin data

        https://binance-docs.github.io/apidocs/spot/en/#listen-key-isolated-margin

        :param symbol: required - symbol for the isolated margin account
        :type symbol: str

        :returns: connection key string if successful, False otherwise

        Message Format - see Binance API docs for all types
        rU  rV  )rN   r  rê   s      r#   Úisolated_margin_socketz+BinanceSocketManager.isolated_margin_socket]  s5   € ð —_‘_ˆ
Ø�<Š<Ø×0Ñ0ˆJØ×'Ñ'¨¸:Ð'ÓFÐFr"   c                 óF   — | j                  |j                  «       dz   «      S )zÐSubscribe to a 24 hour ticker info stream

        https://binance-docs.github.io/apidocs/voptions/en/#market-streams-payload-24-hour-ticker

        :param symbol: required
        :type symbol: str
        r*  ©r   r  r  s     r#   Úoptions_ticker_socketz*BinanceSocketManager.options_ticker_socketn  s    € ð ×'Ñ'¨¯©«¸Ñ(BÓCÐCr"   Úexpiration_datec                 óL   — | j                  |j                  «       dz   |z   «      S )a,  Subscribe to a 24 hour ticker info stream
        https://binance-docs.github.io/apidocs/voptions/en/#24-hour-ticker-by-underlying-asset-and-expiration-data
        :param symbol: required
        :type symbol: str
        :param expiration_date : required
        :type expiration_date: str
        z@ticker@rd  )rN   r  rf  s      r#   Ú#options_ticker_by_expiration_socketz8BinanceSocketManager.options_ticker_by_expiration_socketx  s%   € ð ×'Ñ'¨¯©«¸Ñ(CÀoÑ(UÓVÐVr"   c                 óF   — | j                  |j                  «       dz   «      S )zÝSubscribe to a latest completed trades stream

        https://binance-docs.github.io/apidocs/voptions/en/#market-streams-payload-latest-completed-trades

        :param symbol: required
        :type symbol: str
        r  rd  r  s     r#   Úoptions_recent_trades_socketz1BinanceSocketManager.options_recent_trades_socket‚  s    € ð ×'Ñ'¨¯©«¸Ñ(AÓBÐBr"   c                 óL   — | j                  |j                  «       dz   |z   «      S )a)  Subscribe to a candlestick data stream

        https://binance-docs.github.io/apidocs/voptions/en/#market-streams-payload-candle

        :param symbol: required
        :type symbol: str
        :param interval: Kline interval, default KLINE_INTERVAL_1MINUTE
        :type interval: str
        r  rd  )rN   r  r  s      r#   Úoptions_kline_socketz)BinanceSocketManager.options_kline_socketŒ  s%   € ð ×'Ñ'¨¯©«¸Ñ(BÀXÑ(MÓNÐNr"   c                 ó^   — | j                  |j                  «       dz   t        |«      z   «      S )a%  Subscribe to a depth data stream

        https://binance-docs.github.io/apidocs/voptions/en/#market-streams-payload-depth

        :param symbol: required
        :type symbol: str
        :param depth: optional Number of depth entries to return, default 10.
        :type depth: str
        r  )r   r  rª   )rN   r  r  s      r#   Úoptions_depth_socketz)BinanceSocketManager.options_depth_socket˜  s)   € ð ×'Ñ'¨¯©«¸Ñ(AÄCÈÃJÑ(NÓOÐOr"   c              ƒ   óD   K  — || j                   vry| j                   |= y­w)z™Stop a websocket given the connection key

        :param conn_key: Socket connection key
        :type conn_key: string

        :returns: None
        N)rè   )rN   Úconn_keys     r#   r  z!BinanceSocketManager._stop_socket¤  s#   è ø€ ð ˜4Ÿ;™;Ñ&Øà�[‰[˜Ñ"ùs   ‚ rR   )Nr§   F)zstream?streams=)r§   ©NN©iè  ©T©rÞ   )Fr   r   r   rá   rì   rä   rü   rå   rý   ræ   rç   ÚWEBSOCKET_DEPTH_5ÚWEBSOCKET_DEPTH_10ÚWEBSOCKET_DEPTH_20r´   r   rP   r   rª   rî   r%   r+   r«   r1   rö   rø   r   rþ   r   ró   r¬   r  ÚKLINE_INTERVAL_1MINUTEr  rû   r   Ú	PERPETUALr  r  r  r!  r&  r(  r+  r-  r2  r4  r6  r9  r<  r>  rA  rC  rE  r   rM  rQ  rS  rW  rZ  r\  r^  r`  rb  re  rh  rj  rl  rn  r  r!   r"   r#   rÜ   rÜ   )  sé  „ Ø0€JØ8ÐØ-€KØ;ÐØ-€KØ<ÐØ-€KØ:ÐàÐØÐØÐà9Jñ ,˜{ó ,ñ(¨(°3©-ó ð 6:ÈÐbgØ):×)?Ñ)?ñ$Øð$Ø%-¨c¡]ð$ØCFð$Ø[_ð$à&ð$ð 
ó$ð" chñ$Øð$Ø%-¨c¡]ð$ØCFð$Ø[_ó$ñ"
S¨ð 
S¸;ð 
SÐPSó 
Sñq¨ð q°Só qð& só &ñH- 3ð H-¨x¸©}ð H-ÈxÐX[É}ó H-ðT 2=×1SÑ1Sñ *& 3ó *&ðX :E×9[Ñ9[Ø9D×9JÑ9JØ;G×;QÑ;Qñ0W¨3ð 0WØ+6ð0Wà,8ó0WñdD¨Só Dð@; 3ó ;ð@> có >ð> P[×O`ÑO`ñ a¨cð aÀó að8@¨só @ð:)<¨3ó )<òV*/ñXg¨ð g°Dó gð& >BÐP[×PaÑPañ k¨3ð k°só kð BFÐcn×ctÑctñ a¨sð a¸$ð aÐU`ó að* 26ÐS^×SdÑSdñ P¨$ð PÀ[ó Pð0 U`×TeÑTeñ c°3ð cÀkó cð* `k×_pÑ_pñ _¸cð _ÐQ\ó _ð" EP×DUÑDUñ R°kó Rð,@°ó @ò4/ð$8¨¨S©	ó 8ð*G°°S±	ó Gð, Xc×WhÑWhñ [°°S±	ð [Èó [ò*GòJòIòJòOðG¨Só Gð"D¨Có DðW¸#ð WÐPSó WðC°3ó Cð :E×9[Ñ9[ñ 
O¨3ó 
Oñ
P¨3ð 
P°só 
Pó$r"   rÜ   c                   ó¸  ‡ — e Zd Z	 	 	 d;dee   dee   deeeef      dededeeeef      fˆ fd„Zd„ Z		 d<d	e
d
edeeef   dee   def
d„Z	 d=d	e
dedee   dee   def
d„Zej                  fd	e
dedefd„Zej                  ej$                  ej(                  fd	e
dedededef
d„Zd>d	e
dedefd„Zd	e
dedefd„Zd	e
dedefd„Zej$                  fd	e
dededefd„Zd	e
dedefd„Zd	e
dedefd„Zd	e
defd„Zd?d	e
ded edefd!„Zdej$                  fd	e
ded ededef
d"„Zdej$                  fd	e
d ededefd#„Zej$                  fd	e
dededefd$„Z ej$                  fd	e
dededefd%„Z!ej$                  fd	e
dedefd&„Z"d	e
dedefd'„Z#d	e
defd(„Z$d	e
d)e%e   defd*„Z&d	e
d)e%e   defd+„Z'ej$                  fd	e
d)e%e   dedefd,„Z(d	e
defd-„Z)d	e
defd.„Z*d	e
defd/„Z+d	e
defd0„Z,d	e
defd1„Z-d	e
dedefd2„Z.d	e
dedefd3„Z/d	e
ded4edefd5„Z0d	e
dedefd6„Z1ej                  fd	e
dedefd7„Z2d@d	e
dededefd9„Z3d8ej$                  fd	e
dededefd:„Z4ˆ xZ5S )AÚThreadedWebsocketManagerÚapi_keyÚ
api_secretÚrequests_paramsrã   ré   Úsession_paramsc                 ó<   •— t         ‰| �  ||||||«       d | _        y rR   )r±   rP   Ú_bsm)rN   r|  r}  r~  rã   ré   r  r¹   s          €r#   rP   z!ThreadedWebsocketManager.__init__´  s#   ø€ ô
 	‰Ñ˜ *¨o¸sÀGÈ^Ô\Ø48ˆ�	r"   c              ƒ   ó^   K  — | j                   sJ ‚t        | j                   ¬«      | _        y ­w)N)r¯   )r³   rÜ   r�  rT   s    r#   Ú_before_socket_listener_startz6ThreadedWebsocketManager._before_socket_listener_start¼  s"   è ø€ Ø�|Š|Ðˆ|Ü(°·±Ô=ˆ�	ùs   ‚+-Úcallbackr  Úparamsr8   rœ   c                 óN  — | j                   s"t        j                  d«       | j                   sŒ" t        | j                   |«      di |¤Ž}|xs |j                  }d| j
                  |<   | j                  j                  t        j                  | j                  |||«      «       |S )Nr4   Tr!   )r�  Útimer   Úgetattrr@   Ú_socket_runningr<   re   rJ   rf   Ústart_listener)rN   r„  r  r…  r8   ÚsocketÚsocket_paths          r#   Ú_start_async_socketz,ThreadedWebsocketManager._start_async_socketÀ  s‰   € ð —)’)Ü�J‰J�sŒOð —)“)à0”˜Ÿ™ KÓ0Ñ:°6Ñ:ˆØÒ/ 6§<¡<ˆØ,0ˆ×Ñ˜[Ñ)Ø�
‰
×'Ñ'¬×(;Ñ(;¸T×=PÑ=PÐQWÐYdÐfnÓ=oÔpØÐr"   r  r  r  c                 ó2   — | j                  |d|||dœ¬«      S )Nr  )r  r  r  ©r„  r  r…  ©r�  )rN   r„  r  r  r  s        r#   Ústart_depth_socketz+ThreadedWebsocketManager.start_depth_socketË  s0   € ð ×'Ñ'ØØ&à ØØ$ñð (ó 
ð 	
r"   c                 ó0   — | j                  |d||dœ¬«      S )Nr  ©r  r  r�  r�  ©rN   r„  r  r  s       r#   Ústart_kline_socketz+ThreadedWebsocketManager.start_kline_socketØ  s+   € Ø×'Ñ'ØØ&à Ø$ñð (ó 
ð 	
r"   rù   r  c           	      ó4   — | j                  |d||||dœ¬«      S )Nr  )r  r  rù   r  r�  r�  )rN   r„  r  r  rù   r  s         r#   Ústart_kline_futures_socketz3ThreadedWebsocketManager.start_kline_futures_socketâ  s3   € ð ×'Ñ'ØØ.à Ø$Ø ,Ø!.ñ	ð (ó 	
ð 		
r"   r  c                 ó.   — | j                  |dd|i¬«      S )Nr  r  r�  r�  )rN   r„  r  s      r#   Ústart_miniticker_socketz0ThreadedWebsocketManager.start_miniticker_socketñ  s*   € Ø×'Ñ'ØØ+à˜{ðð (ó 
ð 	
r"   c                 ó.   — | j                  |dd|i¬«      S )Nr  r  r�  r�  ©rN   r„  r  s      r#   Ústart_trade_socketz+ThreadedWebsocketManager.start_trade_socketú  s*   € Ø×'Ñ'ØØ&à˜&ðð (ó 
ð 	
r"   c                 ó.   — | j                  |dd|i¬«      S )Nr!  r  r�  r�  r›  s      r#   Ústart_aggtrade_socketz.ThreadedWebsocketManager.start_aggtrade_socket  s*   € Ø×'Ñ'ØØ)à˜&ðð (ó 
ð 	
r"   c                 ó0   — | j                  |d||dœ¬«      S )Nr&  ©r  rù   r�  r�  ©rN   r„  r  rù   s       r#   Ústart_aggtrade_futures_socketz6ThreadedWebsocketManager.start_aggtrade_futures_socket  s-   € ð ×'Ñ'ØØ1à Ø ,ñð (ó 
ð 	
r"   c                 ó.   — | j                  |dd|i¬«      S )Nr(  r  r�  r�  r›  s      r#   Ústart_symbol_miniticker_socketz7ThreadedWebsocketManager.start_symbol_miniticker_socket  s*   € Ø×'Ñ'ØØ2à˜&ðð (ó 
ð 	
r"   c                 ó.   — | j                  |dd|i¬«      S )Nr+  r  r�  r�  r›  s      r#   Ústart_symbol_ticker_socketz3ThreadedWebsocketManager.start_symbol_ticker_socket!  s*   € Ø×'Ñ'ØØ.à˜&ðð (ó 
ð 	
r"   c                 ó*   — | j                  |di ¬«      S )Nr-  r�  r�  ©rN   r„  s     r#   Ústart_ticker_socketz,ThreadedWebsocketManager.start_ticker_socket*  ó#   € Ø×'Ñ'ØØ'Øð (ó 
ð 	
r"   Tr.  c                 ó0   — | j                  |d||dœ¬«      S )Nr2  )r  r.  r�  r�  )rN   r„  r  r.  s       r#   Ústart_index_price_socketz1ThreadedWebsocketManager.start_index_price_socket1  s+   € Ø×'Ñ'ØØ,à Øñð (ó 
ð 	
r"   c                 ó2   — | j                  |d|||dœ¬«      S )Nr6  )r  r.  rù   r�  r�  )rN   r„  r  r.  rù   s        r#   Ústart_symbol_mark_price_socketz7ThreadedWebsocketManager.start_symbol_mark_price_socket;  s0   € ð ×'Ñ'ØØ2à ØØ ,ñð (ó 
ð 	
r"   c                 ó0   — | j                  |d||dœ¬«      S )Nr9  )r.  rù   r�  r�  )rN   r„  r.  rù   s       r#   Ústart_all_mark_price_socketz4ThreadedWebsocketManager.start_all_mark_price_socketH  s-   € ð ×'Ñ'ØØ/àØ ,ñð (ó 
ð 	
r"   c                 ó0   — | j                  |d||dœ¬«      S )Nr<  r   r�  r�  r¡  s       r#   Ú"start_symbol_ticker_futures_socketz;ThreadedWebsocketManager.start_symbol_ticker_futures_socketT  s-   € ð ×'Ñ'ØØ6à Ø ,ñð (ó 
ð 	
r"   c                 ó0   — | j                  |d||dœ¬«      S )Nr>  r   r�  r�  r¡  s       r#   Ú-start_individual_symbol_ticker_futures_socketzFThreadedWebsocketManager.start_individual_symbol_ticker_futures_socket`  s-   € ð ×'Ñ'ØØAà Ø ,ñð (ó 
ð 	
r"   c                 ó.   — | j                  |dd|i¬«      S )NrA  rù   r�  r�  )rN   r„  rù   s      r#   Ústart_all_ticker_futures_socketz8ThreadedWebsocketManager.start_all_ticker_futures_socketl  s*   € Ø×'Ñ'ØØ3à ðð (ó 
ð 	
r"   c                 ó.   — | j                  |dd|i¬«      S )NrC  r  r�  r�  r›  s      r#   Ústart_symbol_book_ticker_socketz8ThreadedWebsocketManager.start_symbol_book_ticker_socketu  s*   € Ø×'Ñ'ØØ3à˜&ðð (ó 
ð 	
r"   c                 ó*   — | j                  |di ¬«      S )NrE  r�  r�  r¨  s     r#   Ústart_book_ticker_socketz1ThreadedWebsocketManager.start_book_ticker_socket~  s#   € Ø×'Ñ'ØØ,Øð (ó 
ð 	
r"   rF  c                 ó.   — | j                  |dd|i¬«      S )NrM  rF  r�  r�  ©rN   r„  rF  s      r#   Ústart_multiplex_socketz/ThreadedWebsocketManager.start_multiplex_socket…  s*   € Ø×'Ñ'ØØ*à˜7ðð (ó 
ð 	
r"   c                 ó.   — | j                  |dd|i¬«      S )NrQ  rF  r�  r�  r¼  s      r#   Ústart_options_multiplex_socketz7ThreadedWebsocketManager.start_options_multiplex_socketŽ  s*   € Ø×'Ñ'ØØ2à˜7ðð (ó 
ð 	
r"   c                 ó0   — | j                  |d||dœ¬«      S )NrS  )rF  rù   r�  r�  )rN   r„  rF  rù   s       r#   Ústart_futures_multiplex_socketz7ThreadedWebsocketManager.start_futures_multiplex_socket—  s-   € ð ×'Ñ'ØØ2à"Ø ,ñð (ó 
ð 	
r"   c                 ó*   — | j                  |di ¬«      S )NrW  r�  r�  r¨  s     r#   Ústart_user_socketz*ThreadedWebsocketManager.start_user_socket£  s#   € Ø×'Ñ'ØØ%Øð (ó 
ð 	
r"   c                 ó*   — | j                  |di ¬«      S )NrZ  r�  r�  r¨  s     r#   Ústart_futures_user_socketz2ThreadedWebsocketManager.start_futures_user_socketª  ó#   € Ø×'Ñ'ØØ-Øð (ó 
ð 	
r"   c                 ó*   — | j                  |di ¬«      S )Nr\  r�  r�  r¨  s     r#   Ústart_margin_socketz,ThreadedWebsocketManager.start_margin_socket±  rª  r"   c                 ó*   — | j                  |di ¬«      S )Nr^  r�  r�  r¨  s     r#   Ústart_futures_socketz-ThreadedWebsocketManager.start_futures_socket¸  s#   € Ø×'Ñ'ØØ(Øð (ó 
ð 	
r"   c                 ó*   — | j                  |di ¬«      S )Nr`  r�  r�  r¨  s     r#   Ústart_coin_futures_socketz2ThreadedWebsocketManager.start_coin_futures_socket¿  rÆ  r"   c                 ó.   — | j                  |dd|i¬«      S )Nrb  r  r�  r�  r›  s      r#   Ústart_isolated_margin_socketz5ThreadedWebsocketManager.start_isolated_margin_socketÆ  s*   € Ø×'Ñ'ØØ0à˜&ðð (ó 
ð 	
r"   c                 ó.   — | j                  |dd|i¬«      S )Nre  r  r�  r�  r›  s      r#   Ústart_options_ticker_socketz4ThreadedWebsocketManager.start_options_ticker_socketÏ  s*   € Ø×'Ñ'ØØ/à˜&ðð (ó 
ð 	
r"   rf  c                 ó0   — | j                  |d||dœ¬«      S )Nrh  )r  rf  r�  r�  )rN   r„  r  rf  s       r#   Ú)start_options_ticker_by_expiration_socketzBThreadedWebsocketManager.start_options_ticker_by_expiration_socketØ  s+   € Ø×'Ñ'ØØ=à Ø#2ñð (ó 
ð 	
r"   c                 ó.   — | j                  |dd|i¬«      S )Nrj  r  r�  r�  r›  s      r#   Ú"start_options_recent_trades_socketz;ThreadedWebsocketManager.start_options_recent_trades_socketâ  s*   € Ø×'Ñ'ØØ6à˜&ðð (ó 
ð 	
r"   c                 ó0   — | j                  |d||dœ¬«      S )Nrl  r“  r�  r�  r”  s       r#   Ústart_options_kline_socketz3ThreadedWebsocketManager.start_options_kline_socketë  s-   € ð ×'Ñ'ØØ.à Ø$ñð (ó 
ð 	
r"   rÞ   c                 ó0   — | j                  |d||dœ¬«      S )Nrn  )r  r  r�  r�  )rN   r„  r  r  s       r#   Ústart_options_depth_socketz3ThreadedWebsocketManager.start_options_depth_socket÷  s+   € Ø×'Ñ'ØØ.à Øñð (ó 
ð 	
r"   c                 ó2   — | j                  |d|||dœ¬«      S )Nr4  )r  r  rù   r�  r�  )rN   r„  r  r  rù   s        r#   Ústart_futures_depth_socketz3ThreadedWebsocketManager.start_futures_depth_socket  s.   € Ø×'Ñ'ØØ.à ØØ ,ñð (ó 
ð 	
r"   )NNNÚcomFNrR   rq  rr  rs  rt  )6r   r   r   r   rª   r	   r   r«   rP   rƒ  r
   r�  r¬   r‘  r   rx  r•  r   rû   r   ry  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Ú   s   @r#   r{  r{  ²  sD  ø„ ð JNØEJØJNñ9Ø ‘}ð9Ø9AÀ#¹ð9à! $ s¨C x¡.Ñ1ð9à?Bð9ð ð9ð 08¸¸SÀ#¸X¹Ñ/Gõ9ò>ð
 cgñ	Ø ð	Ø/2ð	Ø<@ÀÀcÀ¹Nð	ØRZÐ[^ÑR_ð	à	ó	ð gkñ
Ø ð
Ø*-ð
Ø6>¸s±mð
ØV^Ð_bÑVcð
à	ó
ð LW×KmÑKmñ 
¨8ð 
¸Sð 
Ðruó 
ð -8×,NÑ,NØ?J×?PÑ?PØAM×AWÑAWñ
°8ð 
ÀSð 
à1<ð
ð 3?ð
ð ]`ó
ñ
°ð 
Àsð 
ÐVYó 
ð
¨8ð 
¸Sð 
ÀSó 
ð
¨hð 
Àð 
Èó 
ð LW×K\ÑK\ñ

Ø ð

Ø*-ð

Ø=Hð

à	ó

ð
°xð 
Èð 
ÐQTó 
ð
°8ð 
ÀSð 
ÈSó 
ð
¨Hð 
¸ó 
ñ
°ð 
À3ð 
Èdð 
Ð^aó 
ð =AÐ^i×^oÑ^oñ
Ø ð
Ø*-ð
Ø59ð
ØP[ð
à	ó
ð 04ÐQ\×QbÑQbñ

Ø ð

Ø(,ð

ØCNð

à	ó

ð LW×K\ÑK\ñ

Ø ð

Ø*-ð

Ø=Hð

à	ó

ð LW×K\ÑK\ñ

Ø ð

Ø*-ð

Ø=Hð

à	ó

ð _j×^oÑ^oñ 
¸ð 
ÐP[ð 
Ðtwó 
ð
¸ð 
È#ð 
ÐRUó 
ð
°ð 
¸có 
ð
¨xð 
À$ÀsÁ)ð 
ÐPSó 
ð
°xð 
È$ÈsÉ)ð 
ÐX[ó 
ð S^×RcÑRcñ

Ø ð

Ø+/°©9ð

ØDOð

à	ó

ð
¨(ð 
°só 
ð
°(ð 
¸só 
ð
¨Hð 
¸ó 
ð
¨Xð 
¸#ó 
ð
°(ð 
¸só 
ð
°Xð 
Àsð 
Èsó 
ð
°Hð 
Àcð 
Ècó 
ð
À(ð 
ÐTWð 
Ðjmð 
Ðruó 
ð
¸8ð 
ÈSð 
ÐUXó 
ð 9D×8ZÑ8Zñ

Ø ð

Ø*-ð

à	ó

ñ
°8ð 
ÀSð 
ÐQTð 
Ð`có 
ð X\Ðju×j{Ñj{ñ 	
°8ð 	
ÀSð 	
ÐQTð 	
ð  AD÷ 	
r"   r{  )(rJ   rp   rt   r=   r‡  r   Úenumr   r   r‹  r   Útypingr   r   r	   r
   r   Ú
websocketsrH   Úwebsockets.exceptionsr   r¯   r   Úenumsr   Ú
exceptionsr   r   Úhelpersr   Úthreaded_streamr   r´   r   rª   r%   r1   r®   rÜ   r{  r!   r"   r#   Ú<module>rä     s—   ðÛ Û Û Û Û Ý Ý Ý Ý ß 6Õ 6ã Ý 7å Ý Ý 7Ý Ý Ý /àÐ ô�dô ô˜˜Tô ÷u5ñ u5ôpF'Ð.ô F'÷RF$ñ F$ôRX
Ð1õ X
r"   