
    eiՅ                         d dl Zd dlmZmZmZmZ d dlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ d dlmZ d dlmZ  G d dej        j                  ZdS )    N)
ArrayCacheArrayCacheBySymbolByIdArrayCacheBySymbolBySideArrayCacheByTimestamp)AnyBalancesBoolIntMarketOrder	OrderBookPositionStrStringsTickerTrade)Client)Listc                   L    e Zd Zdef fdZi fdededefdZd Zd Z	d	d
d
i fdedede
de
dee         f
dZdefdZd+dedefdZi fdedefdZdefdZd
d
i fdede
de
dee         fdZdefdZd
i fdede
defdZdefdZd
d
d
i fdede
de
dee         fdZdefdZd+dededefdZd
d
d
i fdede
de
dee         fdZ i fdefdZ!d+defdZ"d
d
d
i fd e#de
de
dee$         fd!Z%defd"Z&d+dede$fd#Z'i fde(fd$Z)defd%Z*d& Z+defd'Z,i fd(Z-i fd)Z.defd*Z/ xZ0S ),hashkeyreturnc                     |                      t          t          |                                           ddddddddddd
dddddd	d
dididd ddddddid          S )NTF)
wswatchBalancewatchMyTrades
watchOHLCVwatchOrderBookwatchOrderswatchTickerwatchTradeswatchTradesForSymbolswatchPositionsapiz(wss://stream-glb.hashkey.com/quote/ws/v1z&wss://stream-glb.hashkey.com/api/v1/ws)publicprivater   z/wss://stream-glb.sim.hashkeydev.com/quote/ws/v1z-wss://stream-glb.sim.hashkeydev.com/api/v1/ws)r   test6 )fetchBalanceSnapshotawaitBalanceSnapshot)listenKeyRefreshRate	listenKeyr   	keepAlivei'  )hasurlsoptions	streaming)deep_extendsuperr   describe)self	__class__s    N/var/www/html/volatility/venv/lib/python3.11/site-packages/ccxt/pro/hashkey.pyr3   zhashkey.describe   s    gt 4 4 = = ? ? $!%""&###)."'  "L#K 
 &W'V   )0!,0,1! !  UG&B
 &B
 & & &	    markettopicmessageHashc                    K   |d         |dd}| j         d         d         d         }|                     |||                     ||          |           d {V S )Nidsub)symbolr9   eventr#   r   r$   )r.   watchr1   )r4   r8   r9   r:   paramsrequesturls          r6   wath_publiczhashkey.wath_public8   sr      Tl
 

 it$X.ZZ[$2B2B7F2S2SU`aaaaaaaaar7   c                    K   |                                   d {V }|                     |          }|                     ||d |           d {V S N)authenticateget_private_urlr@   )r4   r:   r+   rC   s       r6   watch_privatezhashkey.watch_privateA   sf      ++--------	""9--ZZ[$DDDDDDDDDr7   c                 @    | j         d         d         d         dz   |z   S )Nr#   r   r%   /)r.   )r4   r+   s     r6   rH   zhashkey.get_private_urlF   s#    y%i036BBr7   1mNr>   	timeframesincelimitc                 t  K   |                                   d{V  |                     |          }|d         }|                     | j        ||          }d|z   }d|z   dz   |z   }	|                     |||	|           d{V }
| j        r|
                    ||          }|                     |
||dd          S )a  
        watches historical candlestick data containing the open, high, low, and close price, and the volume of a market

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#public-stream

        :param str symbol: unified symbol of the market to fetch OHLCV data for
        :param str timeframe: the length of time each candle represents
        :param int [since]: timestamp in ms of the earliest candle to fetch
        :param int [limit]: the maximum amount of candles to fetch
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param bool [params.binary]: True or False - default False
        :returns int[][]: A list of candles ordered, open, high, low, close, volume
        Nr>   kline_ohlcv::r   T)load_marketsr8   safe_string
timeframesrD   
newUpdatesgetLimitfilter_by_since_limit)r4   r>   rM   rN   rO   rA   r8   intervalr9   r:   ohlcvs              r6   watch_ohlcvzhashkey.watch_ohlcvI   s       !!!!!!!!!V$$!##DOY	JJ8#'#-	9&&vuk6JJJJJJJJ? 	2NN6511E))%q$GGGr7   clientc                    |                      |d          }|                     |          }|                     ||          }|| j        vr
i | j        |<   |                     |d          }|                      |d          }|                     |          }|| j        |         vr9|                     | j        dd          }	t          |	          | j        |         |<   | 	                    |dg           }
| j        |         |         }t          dt          |
                    D ]D}|                     |
|i           }|                     ||          }|                    |           Ed|z   d	z   |z   }|                    ||           d S )
Nr>   rA   	klineType
OHLCVLimit  datar   rR   rS   )rU   safe_marketsafe_symbolohlcvs	safe_dictfind_timeframesafe_integerr/   r   	safe_listrangelenparse_ws_ohlcvappendresolve)r4   r]   messagemarketIdr8   r>   rA   r_   rM   rO   rb   storedicandleparsedr:   s                   r6   handle_ohlcvzhashkey.handle_ohlcvb   s   6 ##GX66!!(++!!(F33$+%%"$DK22$$V[99	''	22	T[000%%dlL$GGE-B5-I-IDK	*~~gvr22V$Y/q#d))$$ 	" 	"A^^D!R00F((88FMM&!!!!'#-	9v{+++++r7   c           	         |                      |d          |                     |d          |                     |d          |                     |d          |                     |d          |                     |d          gS )Ntohlcv)rh   safe_number)r4   r[   r8   s      r6   rl   zhashkey.parse_ws_ohlcv   s     eS))UC((UC((UC((UC((UC((
 	
r7   c                    K   |                                   d{V  |                     |          }|d         }d}d|z   }|                     ||||           d{V S )a(  
        watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#public-stream

        :param str symbol: unified symbol of the market to fetch the ticker for
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param bool [params.binary]: True or False - default False
        :returns dict: a `ticker structure <https://docs.ccxt.com/?id=ticker-structure>`
        Nr>   	realtimesticker:)rT   r8   rD   )r4   r>   rA   r8   r9   r:   s         r6   watch_tickerzhashkey.watch_ticker   s       !!!!!!!!!V$$!&(%%fe[&IIIIIIIIIr7   c                     |                      |dg           }|                     |                     |d                    }|d         }d|z   }|| j        |<   |                    | j        |         |           d S )Nrb   r   r>   r   )ri   parse_tickerrf   tickersrn   )r4   r]   ro   rb   tickerr>   r:   s          r6   handle_tickerzhashkey.handle_ticker   s{    : ~~gvr22""4>>$#:#:;;!&(%Vt|F+[99999r7   c                 *  K   |                                   d{V  |                     |          }|d         }d}d|z   }|                     ||||           d{V }| j        r|                    ||          }|                     |||dd          S )a  
        watches information on multiple trades made in a market

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#public-stream

        :param str symbol: unified market symbol of the market trades were made in
        :param int [since]: the earliest time in ms to fetch orders for
        :param int [limit]: the maximum number of trade structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param bool [params.binary]: True or False - default False
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/?id=trade-structure>`
        Nr>   tradetrades:	timestampT)rT   r8   rD   rW   rX   rY   )	r4   r>   rN   rO   rA   r8   r9   r:   tradess	            r6   watch_tradeszhashkey.watch_trades   s       !!!!!!!!!V$$!&(''{FKKKKKKKK? 	3OOFE22E))&%TRRRr7   c                 R   |                      |d          }|                     |          }|d         }|| j        vr3|                     | j        dd          }t          |          | j        |<   | j        |         }|                     |d          }|w|                     |d          }t          dt          |                    D ]C}	| 
                    ||	          }
|                     |
|          }|                    |           Dd|z   }|                    ||           d S )Nr>   tradesLimitra   rb   rw   r   r   )rU   rc   r   rh   r/   r   ri   sort_byrj   rk   rf   parse_ws_traderm   rn   )r4   r]   ro   rp   r8   r>   rO   rq   rb   rr   r   rt   r:   s                r6   handle_tradeszhashkey.handle_trades   s(   2 ##GX66!!(++!$+%%%%dlM4HHE",U"3"3DKV$~~gv..<<c**D1c$ii(( & &tQ//,,UF;;f%%%%$v-v{+++++r7   c                    K   |                                   d{V  |                     |          }|d         }d}d|z   }|                     ||||           d{V }|                                S )aI  
        watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#public-stream

        :param str symbol: unified symbol of the market to fetch the order book for
        :param int [limit]: the maximum amount of order book entries to return.
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/?id=order-book-structure>` indexed by market symbols
        Nr>   depth
orderbook:)rT   r8   rD   rO   )r4   r>   rO   rA   r8   r9   r:   	orderbooks           r6   watch_order_bookzhashkey.watch_order_book  s       !!!!!!!!!V$$!"V+**65+vNNNNNNNN	   r7   c                     |                      |d          }|                     |          }d|z   }|| j        vr|                     i           | j        |<   | j        |         }|                     |dg           }|                     |d          }|                     |d          }	|                     |||	dd          }
|                    |
           |                     |d          |d	<   || j        |<   |	                    ||           d S )
Nr>   r   rb   r   rw   bar<   nonce)
rU   rd   
orderbooks
order_bookri   rf   rh   parse_order_bookresetrn   )r4   r]   ro   rp   r>   r:   r   rb   	dataEntryr   snapshots              r6   handle_order_bookzhashkey.handle_order_book1  s   < ##GX66!!(++"V+$/))&*oob&9&9DOF#OF+	~~gvr22NN4++	%%i55	((FIsCPP!!!!..w==	'"+y+.....r7   c                   K   |                                   d{V  d}||                     |          }|dz   |z   }|                     |           d{V }| j        r|                    ||          }|                     ||||d          S )aB  
        watches information on multiple orders made by the user

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#private-stream

        :param str symbol: unified market symbol of the market orders were made in
        :param int [since]: the earliest time in ms to fetch orders for
        :param int [limit]: the maximum number of order structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `order structures <https://docs.ccxt.com/?id=order-structure>`
        NordersrS   T)rT   r>   rI   rW   rX   filter_by_symbol_since_limit)r4   r>   rN   rO   rA   r:   r   s          r6   watch_orderszhashkey.watch_orders^  s       !!!!!!!!![[((F%+f4K))+66666666? 	3OOFE22E00tTTTr7   c                 R   | j         0|                     | j        dd          }t          |          | _         |                     |          }| j         }|                    |           d}|                    ||           |d         }|dz   |z   }|                    ||           d S )NordersLimitra   r   r>   rS   )r   rh   r/   r   parse_ws_orderrm   rn   )	r4   r]   ro   rO   rt   r   r:   r>   symbolSpecificMessageHashs	            r6   handle_orderzhashkey.handle_ordert  s    H ;%%dlM4HHE077DK$$W--fv{+++!$/#$5$>!v899999r7   orderc                    |                      |d          }|                     ||          }|                     |d          }|                     |d          }d }|                     |          \  }}|                     |                      |d                    }|                      |d          }d }	|                     ||          \  }}}	|d         rd }|                     i d|                      |d          d	|                      |d
          d|                     |          d|dd dd d| 	                    |                      |d                    d|d         d|d|d|d|                      |d          d|                      |d          d| 
                    |                      |d                    d|                      |d          d|                      |d          dd d d d | 
                    |                      |d                     d |                     |                      |d!                    | 
                    |                      |d"                    d#||	|d$	|          S )%NsOSrx   fcontractr<   rr   clientOrderIdr{   datetimer   lastTradeTimestamplastUpdateTimestampstatusXr>   typetimeInForcesidepricepaverageVamountqfilledz	remainingr	stopPriceZNn)currencyr   )	triggerPricetakeProfitPricestopLossPricecostr   fee
reduceOnlypostOnlyinfo)rU   rc   rh   safe_string_lowerparseOrderSideAndReduceOnlyparseOrderType$parseOrderTypeTimeInForceAndPostOnly
safe_orderiso8601parse_order_status	omit_zerosafe_currency_code)
r4   r   r8   rp   r   r   r   r   r   r   s
             r6   r   zhashkey.parse_ws_order  s   ##E3//!!(F33%%eS11	%%eS11
;;DAAj""4#3#3E3#?#?@@&&uc22&*&O&OPTVa&b&b#k8* 	D  
$""5#.. 
T--eS99 
 Y// 
 	 

 !$ 
 "4 
 d--d.>.>uc.J.JKK 
 fX& 
 D 
 ; 
 D 
 T%%eS11 
 t''s33 
 dnnT%5%5eS%A%ABB 
 d&&uc22 
  ))%55! 
" # 
$ !#!NN4#3#3E3#?#?@@ 33D4D4DUC4P4PQQ..)9)9%)E)EFF  % ; 
  
  
< =  	r7   c                   K   |                                   d{V  d}||                     |          }|d|z   z  }|                     |           d{V }| j        r|                    ||          }|                     |||dd          S )aB  
        watches information on multiple trades made by the user

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#private-stream

        :param str symbol: unified market symbol of the market trades were made in
        :param int [since]: the earliest time in ms to fetch trades for
        :param int [limit]: the maximum number of trade structures to retrieve
        :param dict [params]: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `trade structures <https://docs.ccxt.com/?id=trade-structure>`
        NmyTradesrS   r   T)rT   r>   rI   rW   rX   rY   )r4   r>   rN   rO   rA   r:   r   s          r6   watch_my_tradeszhashkey.watch_my_trades  s       !!!!!!!!! [[((F3<'K))+66666666? 	3OOFE22E))&%TRRRr7   c                 `   | j         0|                     | j        dd          }t          |          | _         | j         }|                     |          }|                    |           || _         d}|                    ||           |d         }|dz   |z   }	|                    ||	           d S )Nr   ra   r   r>   rS   )r   rh   r/   r   r   rm   rn   )
r4   r]   ro   subscriptionrO   tradesArrayrt   r:   r>   r   s
             r6   handle_my_tradezhashkey.handle_my_trade  s    " = %%dlM4HHE2599DMm$$W--6"""# {K000!$/#$5$>!{$=>>>>>r7   c                    |                      |d          }|                     ||          }|                     |d          }|                     |d          }d }||rd}nd}|                     |                     |dd          ||                     |          |d         |                     |d	          |                      |d
          |                      |d          d |d |                      |d          d |d|          S )Nr   rw   mmakertakerr|   Tr>   r   r   r   rx   )r<   r   r   r>   r   r   r   r   takerOrMakerr   r   r   r   )rU   rc   rh   	safe_bool
safe_tradesafe_string_2r   r   )r4   r   r8   rp   r   isMakerr   s          r6   r   zhashkey.parse_ws_trade  s$   6 ##E3//!!(F33%%eS11	..,,  '&&$$UC55"Y//X&**5#66%%eS11&&uc22(%%eS11 
  
   	r7   symbolsc                 
  K   |                                   d{V  |                                  d{V }|                     |          }d}g }||                    |           nCt	          dt          |                    D ]%}||         }	|                    |dz   |	z              &|                     |          }
|                     |
|d|           d{V }| j        r|S | 	                    | j
        |||d          S )a7  

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#private-stream

        watch all open positions
        :param str[] [symbols]: list of unified market symbols to watch positions for
        :param int [since]: the earliest time in ms to fetch positions for
        :param int [limit]: the maximum number of positions to retrieve
        :param dict params: extra parameters specific to the exchange API endpoint
        :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
        N	positionsr   rS   T)rT   rG   market_symbolsrm   rj   rk   rH   watch_multiplerW   filter_by_symbols_since_limitr   )r4   r   rN   rO   rA   r+   r:   messageHashesrr   r>   rC   r   s               r6   watch_positionszhashkey.watch_positions:  sA      !!!!!!!!!++--------	%%g..!?  ----1c'll++ A A $$[3%6%?@@@@""9----c=$VVVVVVVV	? 	11$.'5RWY]^^^r7   c                    | j         t                      | _         | j         }|                     |          }|                    |           d}|                    ||           |d         }|                    ||dz   |z              d S )Nr   r>   rS   )r   r   parse_ws_positionrm   rn   )r4   r]   ro   r   rt   r:   r>   s          r6   handle_positionzhashkey.handle_positionW  s    , >!577DNN	''00   !v{+++!v{S069:::::r7   c                    |                      |d          }|                     |          }|                     |d          }|                     i d|d         dd d|d|                     |          d|                     |d          d	d d
|                     |d          d|                     |d          d|                     |d          d|                     |d          d|                     |d          dd d|                     |d          dd d|                     |d          d|                     |d          dd|                     |d          d |                     |d          d d d d d d d |d           S )!Nr   Er>   r<   r   r   	contractsPcontractSizer   r   notionalpvleverager|   unrealizedPnluprealizedPnlr   
collateral
entryPricer   	markPriceliquidationPricer   
marginModemthedgedTmmr   )maintenanceMarginmaintenanceMarginPercentageinitialMargininitialMarginPercentagemarginRatior   	lastPricer   r   
percentager   )rU   rc   rh   safe_positionr   r}   r   )r4   positionr8   rp   r   s        r6   r   zhashkey.parse_ws_positionw  s   ##Hc22!!(++%%h44	!! #
fX&#
$#
 #
 Y//	#

 ))(C88#
 D#
 D**8S99#
 ((488#
 ))(C88#
 T--h==#
 4++Hc::#
 $#
 $**8S99#
 #
  0 03 ? ?#
  $004@@!#
" d##
$ "&!1!1(D!A!A+/!--h<<'+#'!#9#
 #
 #
   	r7   c                 <  K   |                                   d{V }|                                  d{V  d}|                     dd||          \  }}d|z   }|                     |          }|                     |          }|                     |||           d}d}|                     | j        ddd          \  }}|                     | j        ddd          \  }}|r |r|                    |d	z              d{V  | 	                    ||d|           d{V S )
a  
        watch balance and get the amount of funds available for trading or funds locked in orders

        https://hashkeyglobal-apidoc.readme.io/reference/websocket-api#private-stream

        :param dict [params]: extra parameters specific to the exchange API endpoint
        :param str [params.type]: 'spot' or 'swap' - the type of the market to watch balance for(default 'spot')
        :returns dict: a `balance structure <https://docs.ccxt.com/?id=balance-structure>`
        Nspotr   balance:r(   Tr)   Fz:fetchBalanceSnapshot)
rG   rT   handle_market_type_and_paramsrH   r]   set_balance_cachehandle_option_and_paramsr/   futurer@   )	r4   rA   r+   r   r:   rC   r]   r(   r)   s	            r6   watch_balancezhashkey.watch_balance  s      ++--------	!!!!!!!!!99.$PVX\]]f 4'""9--S!!vt[999##'+'D'DT\Sacy{  (A  (A$f'+'D'DT\Sacy  |A  (B  (B$f 	@$8 	@--'> >?????????ZZ[$DDDDDDDDDr7   c                    ||j         v rd S |                     | j        d          }|                     |dd          }|rC|dz   dz   }||j        vr2|                    |           |                     | j        |||           i | j        |<   d S )Nr   r(   TrS   )	subscriptionsrf   r/   r   futuresr  spawnload_balance_snapshotbalance)r4   r]   r   subscribeHashr/   r   r:   s          r6   r  zhashkey.set_balance_cache  s    F000F..~>>>>'+A4HH 	R*'==K6>11k***

45v{DQQQTr7   c                 T  K   |                      d|i           d {V }|                     ||                     | j        |i                     | j        |<   ||j        v rG|j        |         }|                                 |                    | j        |         d|z              d S d S )Nr   r  )fetch_balanceextend
safe_valuer   r  rn   )r4   r]   r:   r   responser  s         r6   r  zhashkey.load_balance_snapshot  s      ++VTN;;;;;;;;![[4??4<QUWY3Z3Z[[T&.((^K0FNNNN4<-zD/@AAAAA )(r7   c                    |                      |d          }|                     |dg           }|                     |d          }|dk    }|rdnd}|| j        vr
i | j        |<   || j        |         d<   |                      |d          }|                     |          }	|                                 }
|                      |d	          |
d
<   |                      |d          |
d<   |
| j        |         |	<   |                     | j        |                   | j        |<   d|z   }|                    | j        |         |           d S )NeBr   outboundAccountInfor  swapr   r   r   freerz   usedr  )rU   ri   rf   r   r   accountsafe_balancern   )r4   r]   ro   r?   rb   balanceUpdateisSpotr   
currencyIdcoder.  r:   s               r6   handle_balancezhashkey.handle_balance  sH   &   #..~~gsB//tQ////+vvV$$!#DL%,T6"%%mS99
&&z22,,..**=#>>**=#>>#*T4 !..t|D/ABBT 4't|D);77777r7   c                 0  K   |                      | j        d          }||S |                     |           d {V }|                      |d          }|| j        d<   |                     | j        dd          }|                     || j        ||           |S )Nr+   r*   r'   )rU   r/   privatePostApiV1UserDataStreamrh   delaykeep_alive_listen_key)r4   rA   r+   r&  r*   s        r6   rG   zhashkey.authenticate  s      $$T\;??	 <<VDDDDDDDD $$X{;;	$-[!#00?UW^__

')CYPVWWWr7   c                   K   |d S d|i}	 |                      |                     ||                     d {V  |                     | j        dd          }|                     || j        ||           d S # t          $ r\}|                     |          }|                     |          }d | j        d<   |	                    |           | j
        |= Y d }~d S d }~ww xY w)Nr+   r*   iO )privatePutApiV1UserDataStreamr$  rh   r/   r7  r8  	ExceptionrH   r]   rejectclients)r4   r+   rA   rB   r*   errorrC   r]   s           r6   r8  zhashkey.keep_alive_listen_key  s     F
		"44T[[&5Q5QRRRRRRRRR#'#4#4T\CY[b#c#c JJ+T-GTZ[[[[[ 	" 	" 	"&&y11C[[%%F(,DL%MM%   S!!!!!!!	"s   A(A6 6
C ACCc                    t          |t                    r|                     |di           }|                     |dd          }|dk    r|                     ||           d S |dk    r|                     ||           d S |dk    r|                     ||           d S |dk    r|                     ||           d S |dk    s|d	k    r|                     ||           d S |d
k    r| 	                    ||           d S |dk    r| 
                    ||           d S |dk    s|dk    r|                     ||           d S d S )Nr   r9   r(  kliner   r   r   contractExecutionReportexecutionReport
ticketInfooutboundContractPositionInfor*  outboundContractAccountInfo)
isinstancelistrf   r   ru   r   r   r   r   r   r   r4  )r4   r]   ro   r9   s       r6   handle_messagezhashkey.handle_message  s   gt$$ 	5nnWa44G""7GS99Gfg.....k!!vw/////gvw/////g""6733333000e?P6P6Pfg.....l""  11111444  11111,,,%;X2X2X00000 3Y2Xr7   rF   )1__name__
__module____qualname__r   r3   r   strrD   rI   rH   r
   r   rG  r\   r   ru   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   dictr   r   r   r   r   r   r   r   r   r   r  r  r  r4  rG   r8  rH  __classcell__)r5   s   @r6   r   r      s       '# ' ' ' ' ' 'R VX b b bs b b b b bE E E
C C C ?CQUdhqs H H H H3 H^a Hx|  ~B  yC H H H H2-,6 -, -, -, -,^
 
F 
d 
 
 
 
, 68 J J JF J J J J$":F ": ": ": ":H <@d[] S S SS S Sbfglbm S S S S.(,F (, (, (, (,T @DB ! !S ! !S\ ! ! ! !&+/ +/ +/ +/ +/Z 04$UYbd U U UC Us Uimnsit U U U U,.:6 .: .: .: .:`+ +D +& +E + + + +Z 37TX\eg S SC Ss SRU Slpqvlw S S S S, EG ? ?f ? ? ? ?<3 3E 3 3 3 3j 8<$]ajl _ _W _C _WZ _quv~q _ _ _ _:;f ; ; ; ;@! !& !H ! ! ! !F *, E E E E E E4
  
  
  
  
 B B B#8V #8 #8 #8 #8J )+      =? " " " ""1V 1 1 1 1 1 1 1 1r7   r   )ccxt.async_supportccxt ccxt.async_support.base.ws.cacher   r   r   r   ccxt.base.typesr   r   r	   r
   r   r   r   r   r   r   r   r   !ccxt.async_support.base.ws.clientr   typingr   async_supportr    r7   r6   <module>rW     s       A  A  A  A  A  A  A  A  A  A  A  A u u u u u u u u u u u u u u u u u u u u u u u u u u u u 4 4 4 4 4 4      V1 V1 V1 V1 V1d ( V1 V1 V1 V1 V1r7   