Ë
    ¸�©jì›  ã                  ó²  — d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Zd dlZd dlmZmZmZ d dlmZ d dlmZmZmZmZmZmZ ddlmZmZmZ ddlmZm Z  dd	l!m"Z"m#Z#m$Z$m%Z%m&Z& dd
l'm(Z( ddl)m*Z* ddl+m,Z, ddl-m.Z.m/Z/ ddl0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 ddlm:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@mAZA ddlBmCZC ddlDmEZE g d¢ZF eGej�                  j“                  dd«      «      ZJ G d„ deC«      ZK G d„ d«      ZLeddddddddddddddddddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d<d„«       ZMeddddddddddddddddddddd œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d=d!„«       ZMddddddd"de.d#ddd$d%d%d$d&d'ddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d>d(„ZM	 	 d?	 	 	 	 	 	 	 d@d)„ZNe	 	 dAdd*œ	 	 	 	 	 	 	 	 	 dBd+„«       ZOe	 	 dA	 	 	 	 	 	 	 	 	 dCd,„«       ZO	 	 d?dd*œ	 	 	 	 	 	 	 	 	 dDd-„ZO	 d d.lPmQZQ d d/lRm4ZS eQj¨                  eQj¨                  eQjª                  eQjª                  d0œZVd#d1d#d1d0œZW	 	 	 	 	 	 	 	 	 	 dEd2„ZXdFd4„ZZdddd5œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dGd6„Z[ ed7«      Z\ ed8ede\f   ¬9«      Z] G d:„ d;«      Z^y# eY$ r 	 	 	 	 	 	 	 	 	 	 dEd3„ZXY ŒSw xY w)Hé    )ÚannotationsN)Ú	GeneratorÚIteratorÚSequence)ÚTracebackType)ÚAnyÚCallableÚLiteralÚTypeVarÚcastÚoverloadé   )ÚClientProtocolÚbackoffÚprocess_exception)ÚHeadersÚHeadersLike)ÚInvalidProxyMessageÚInvalidProxyStatusÚInvalidStatusÚ
ProxyErrorÚSecurityError)ÚClientExtensionFactory)Ú enable_client_permessage_deflate)Úvalidate_subprotocols)Ú
USER_AGENTÚResponse)Ú
CONNECTINGÚEvent)ÚProxyÚ	get_proxyÚparse_proxyÚprepare_connect_request)ÚStreamReader)Ú	BytesLikeÚ
LoggerLikeÚOriginÚPathLikeÚSubprotocol)ÚWebSocketURIÚ	parse_urié   )Ú
Connection)ÚDeadline)ÚconnectÚunix_connectÚ	reconnectÚunix_reconnectÚClientConnectionÚWEBSOCKETS_MAX_REDIRECTSÚ10c                  ó”   ‡ — e Zd ZdZdddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Zdˆ fd„Zdd„Zd	ed	f	 	 	 	 	 	 	 dd
„Zdˆ fd„Z	dˆ fd„Z
ˆ xZS )r3   a+  
    :mod:`threading` implementation of a WebSocket client connection.

    :class:`ClientConnection` provides :meth:`recv` and :meth:`send` methods for
    receiving and sending messages.

    It supports iteration to receive messages::

        for message in websocket:
            process(message)

    The iterator exits normally when the connection is closed with code
    1000 (OK) or 1001 (going away) or without a close code. It raises a
    :exc:`~websockets.exceptions.ConnectionClosedError` when the connection is
    closed with any other code.

    The ``ping_interval``, ``ping_timeout``, ``close_timeout``, and
    ``max_queue`` arguments have the same meaning as in :func:`connect`.

    Args:
        socket: Socket connected to a WebSocket server.
        protocol: Sans-I/O connection.

    é   é
   é   ©Úping_intervalÚping_timeoutÚclose_timeoutÚ	max_queuec               ót   •— |  t        j                  «       | _        d| _        t        ‰| �  ||||||¬«       y )NTr:   )Ú	threadingr   Úresponse_rcvdÚpending_legacy_warningÚsuperÚ__init__)ÚselfÚsockÚprotocolr;   r<   r=   r>   Ú	__class__s          €ú]/var/www/html/streamforge-license/venv/lib/python3.12/site-packages/websockets/sync/client.pyrD   zClientConnection.__init__E   sC   ø€ ñ 	Ü&Ÿ_™_Ó.ˆÔØ&*ˆÔ#Ü‰ÑØØØ'Ø%Ø'Øð 	õ 	
ó    c                ó.   •— d| _         t        ‰| �	  «       S )NF)rB   rC   Ú	__enter__©rE   rH   s    €rI   rL   zClientConnection.__enter__[   s   ø€ Ø&+ˆÔ#Ü‰wÑ Ó"Ð"rJ   c                ód   — | j                   r$d| _         t        j                  dt        d¬«       y y )NFzžconnect() must be used as a context manager: with connect(...) as websocket: ...; alternatively, use websocket = connect(..., legacy=True) to connect directlyé   )Ú
stacklevel)rB   ÚwarningsÚwarnÚDeprecationWarning©rE   s    rI   Úmaybe_raise_legacy_warningz+ClientConnection.maybe_raise_legacy_warning_   s2   € Ø×&Ò&Ø*/ˆDÔ'Ü�M‰MðLô #Øöð 'rJ   Nc                ó$  — | j                   j                  «       | _        |�%| j                  j                  j	                  |«       |�&| j                  j                  j                  d|«       | j                  t        ¬«      5  | j                   j                  | j                  «       ddd«       | j                  j                  |«      st        d«      ‚| j                   j                  �| j                   j                  ‚y# 1 sw Y   Œ\xY w)z1
        Perform the opening handshake.

        Nz
User-Agent)Úexpected_statez.timed out while waiting for handshake response)rG   r/   ÚrequestÚheadersÚupdateÚ
setdefaultÚsend_contextr   Úsend_requestrA   ÚwaitÚTimeoutErrorÚhandshake_exc)rE   Úadditional_headersÚuser_agent_headerÚtimeouts       rI   Ú	handshakezClientConnection.handshakej   sÝ   € ð —}‘}×,Ñ,Ó.ˆŒØÐ)Ø�L‰L× Ñ ×'Ñ'Ð(:Ô;ØÐ(Ø�L‰L× Ñ ×+Ñ+¨LÐ:KÔLØ×Ñ¬jÐÓ9ñ 	5Ø�M‰M×&Ñ& t§|¡|Ô4÷	5ð ×!Ñ!×&Ñ& wÔ/ÜÐOÓPÐPð �=‰=×&Ñ&Ð2Ø—-‘-×-Ñ-Ð-ð 3÷	5ð 	5ús   Â&DÄDc                ó¤   •— | j                   €4t        |t        «      sJ ‚|| _         | j                  j	                  «        yt
        ‰| �  |«       y)z.
        Process one incoming event.

        N)ÚresponseÚ
isinstancer   rA   ÚsetrC   Úprocess_event)rE   ÚeventrH   s     €rI   ri   zClientConnection.process_event†   sG   ø€ ð �=‰=Ð Ü˜e¤XÔ.Ð.Ð.Ø!ˆDŒMØ×Ñ×"Ñ"Õ$ô ‰GÑ! %Õ(rJ   c                ó–   •— 	 t         ‰| �  «        | j                  j                  «        y# | j                  j                  «        w xY w)zI
        Read incoming data from the socket and process events.

        N)rC   Úrecv_eventsrA   rh   rM   s    €rI   rl   zClientConnection.recv_events”   s:   ø€ ð
	%Ü‰GÑÔ!ð ×Ñ×"Ñ"Õ$øˆD×Ñ×"Ñ"Õ$ús	   ƒ, ¬A)rF   úsocket.socketrG   r   r;   úfloat | Noner<   rn   r=   rn   r>   ú*int | None | tuple[int | None, int | None]ÚreturnÚNone©rp   r3   )rp   rq   )ra   úHeadersLike | Nonerb   ú
str | Nonerc   rn   rp   rq   )rj   r   rp   rq   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   rL   rU   r   rd   ri   rl   Ú__classcell__)rH   s   @rI   r3   r3   +   s®   ø„ ñð< ')Ø%'Ø&(Ø@Bñ
àð
ð !ð
ð
 $ð
ð #ð
ð $ð
ð >ð
ð 
õ
õ,#ó	ð 26Ø(2Ø $ð	.à.ð.ð &ð.ð ð	.ð
 
ó.õ8)÷	%ñ 	%rJ   r3   c                  óú   — e Zd ZdZddddddddedddeddddeddddd	œ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd
„Zdd„Zdd„Z	dd„Z
dd„Zdd„Zdd„Z	 	 	 	 	 	 	 	 dd„Zdd„Zy)r1   as  
    Similar to :func:`connect`, with support for automatic reconnection.

    :func:`reconnect` can also be treated as an infinite iterator to reconnect
    automatically on errors::

        for websocket in reconnect(...):
            try:
                ...
            except websockets.exceptions.ConnectionClosed:
                continue

    If the connection fails with a transient error, it is retried with
    exponential backoff. If it fails with a fatal error, the exception is
    raised, breaking out of the loop.

    The connection is closed automatically after each iteration of the loop.

    :func:`reconnect` accepts the same arguments as :func:`connect`, minus the
    ``legacy`` flag, plus those listed below. It raises the same exceptions.

    Args:
        process_exception: When reconnecting automatically, tell whether an
            error is transient or fatal. The default behavior is defined by
            :func:`~websockets.client.process_exception`. Refer to its
            documentation for details.
        reconnect_delays: Delays in seconds between reconnection attempts.
            Default is exponential backoff with 5s jitter, capped at 60s.

    .. admonition:: Why is :func:`reconnect` a separate API from :func:`connect`?
        :class: tip

        A new API was necessary to maintain backwards compatibility with this
        historical behavior of :func:`connect`::

            websocket = connect(...)
            for message in websocket:
                ...

        Once the deprecation period elapses, :func:`connect` will be changed to
        behave like :func:`reconnect` by default.

    NÚdeflateTr8   r7   é   r9   )rF   ÚsslÚserver_hostnameÚoriginÚ
extensionsÚsubprotocolsÚcompressionra   rb   ÚproxyÚ	proxy_sslÚproxy_server_hostnamer   Úopen_timeoutr;   r<   r=   Úreconnect_delaysÚmax_sizer>   ÚloggerÚcreate_connectionc               óŠ  — |€/d|v r+|j                  d«      }t        j                  dt        «       || _        t        |«      | _        | j                  j                  s|�t        d«      ‚|�t        |«       |dk(  rt        |«      }n|�t        d|› �«      ‚|€t        j                  d«      }|€t        }|| _        || _        || _        |	| _        |
| _        || _        || _        || _        || _        || _        || _        || _        || _        || _        t9        |||||¬«      | _        t9        ||||¬«      | _        y )	NÚssl_contextzssl_context was renamed to sslz-ssl argument is incompatible with a ws:// URIr{   zunsupported compression: zwebsockets.client)r   r€   r�   rˆ   r‰   r:   )ÚpoprQ   rR   rS   Úurir+   Úws_uriÚsecureÚ
ValueErrorr   r   ÚloggingÚ	getLoggerr3   rF   r}   r~   ra   rb   rƒ   r„   r…   r   r†   r‡   r‰   rŠ   Úopen_socket_kwargsÚdictÚprotocol_kwargsÚconnection_kwargs)rE   rŽ   rF   r}   r~   r   r€   r�   r‚   ra   rb   rƒ   r„   r…   r   r†   r;   r<   r=   r‡   rˆ   r>   r‰   rŠ   Úkwargss                            rI   rD   zreconnect.__init__Í   s_  € ðJ ˆ;˜=¨FÑ2Ø—*‘*˜]Ó+ˆCÜ�M‰MØ0Ü"ôð
 ˆŒÜ “nˆŒØ�{‰{×!Ò! c oÜÐLÓMÐMàÐ#Ü! ,Ô/à˜)Ò#Ü9¸*ÓE‰JØÐ$ÜÐ8¸¸ÐFÓGÐGàˆ>Ü×&Ñ&Ð':Ó;ˆFàÐ$Ü 0ÐàˆŒ	ØˆŒØ.ˆÔØ"4ˆÔØ!2ˆÔØˆŒ
Ø"ˆŒØ%:ˆÔ"Ø!2ˆÔØ(ˆÔØ 0ˆÔØˆŒØ!2ˆÔØ"(ˆÔÜ#ØØ!Ø%ØØô 
ˆÔô "&Ø'Ø%Ø'Øô	"
ˆÕrJ   c           	     ó�  — | j                   j                  «       }|j                  dd«      }| j                  }|rd}|du rt	        | j
                  «      }|r‡t        j                  t        j                  t        j                  «      }	 |j                  |j                  «       «       |j                  t        j                  |j                  d«      «      «       �n8|�Åt!        |«      }|j"                  dd dk(  r*t%        || j
                  ||j                  dd«      ¬	«      }nï|j"                  dd
 dk(  ra|j"                  dk7  r| j&                  �t)        d«      ‚t+        || j
                  |f| j,                  | j&                  | j.                  dœ|¤Ž}n|t1        d«      ‚|j3                  d| j
                  j4                  | j
                  j6                  f«       |j3                  d|j                  «       «       t        j8                  di |¤Ž}|j                  d«       |S # t        $ r |j                  «        ‚ w xY w)zFOpen a TCP or Unix connection to the server, possibly through a proxy.ÚunixFNTÚpathé   ÚsocksÚsource_address)Ú
local_addré   ÚhttpÚhttpsz8proxy_ssl argument is incompatible with an http:// proxy©rb   r}   r~   z&parse_proxy returned unsupported proxyÚaddressrc   © )r”   Úcopyr�   rƒ   r!   r�   ÚsocketÚAF_UNIXÚSOCK_STREAMÚ
settimeoutrc   r/   ÚosÚfspathÚ	ExceptionÚcloser"   ÚschemeÚconnect_socks_proxyr„   r‘   Úconnect_http_proxyrb   r…   ÚAssertionErrorr[   ÚhostÚportrŠ   )rE   Údeadliner˜   rš   rƒ   rF   Úproxy_parseds          rI   Úopen_socketzreconnect.open_socket(  s  € à×(Ñ(×-Ñ-Ó/ˆØ�z‰z˜& %Ó(ˆà—
‘
ˆÙØˆEØ�D‰=Ü˜dŸk™kÓ*ˆEáÜ—=‘=¤§¡´×1CÑ1CÓDˆDðØ—‘ × 0Ñ 0Ó 2Ô3Ø—‘œRŸY™Y v§z¡z°&Ó'9Ó:Ö;ð
 ÐÜ& uÓ-ˆLà×"Ñ" 2 AÐ&¨'Ò1Ü*Ø Ø—K‘KØð  &Ÿz™zÐ*:¸DÓAô‘ð ×$Ñ$ R aÐ(¨FÒ2Ø×&Ñ&¨'Ò1°d·n±nÐ6PÜ$ØRóð ô *Ø Ø—K‘KØðð '+×&<Ñ&<ØŸ™Ø$(×$>Ñ$>ñð ñ‘ô %Ð%MÓNÐNð ×Ñ˜i¨$¯+©+×*:Ñ*:¸D¿K¹K×<LÑ<LÐ)MÔNØ×Ñ˜i¨×)9Ñ)9Ó);Ô<Ü×+Ñ+Ñ5¨fÑ5ˆDà�‰˜ÔØˆøôS ò Ø—
‘
”Øðús   ÂAH* È*Ic                ó®  — | j                   €t        j                  «       }n| j                   }| j                  €| j                  j
                  }n| j                  }|j                  |j                  «       «       | j                  €|j                  ||¬«      }n(t        |||¬«      }t        t        j                  |«      }|j                  d«       |S )zEnable TLS on the connection.N©r~   )r}   Ú
ssl_moduleÚcreate_default_contextr~   r�   r³   rª   rc   r„   Úwrap_socketÚSSLSSLSocketr   r§   )rE   rF   rµ   r}   r~   Úsock_2s         rI   Ú
enable_tlszreconnect.enable_tlsc  s©   € à�8‰8ÐÜ×3Ñ3Ó5‰Cà—(‘(ˆCØ×ÑÐ'Ø"Ÿk™k×.Ñ.‰Oà"×2Ñ2ˆOØ�‰˜×(Ñ(Ó*Ô+Ø�>‰>Ð!Ø—?‘? 4¸�?ÓI‰Dä! $¨¸_ÔMˆFäœŸ™ vÓ.ˆDØ�‰˜ÔØˆrJ   c                óö  — | j                   €| j                  |«      }n| j                   }	 |j                  t        j                  t        j
                  hv r/|j                  t        j                  t        j                  d«       | j                  j                  r| j                  ||«      }t        | j                  fi | j                  ¤Ž} | j                  ||fi | j                  ¤Ž}	 |j%                  | j&                  | j(                  |j+                  «       «       |S # t         $ r |j#                  «        ‚ w xY w# t         $ r, |j-                  «        |j.                  j1                  «        ‚ w xY w)zCreate a WebSocket connection.T)rF   r·   Úfamilyr§   ÚAF_INETÚAF_INET6Ú
setsockoptÚIPPROTO_TCPÚTCP_NODELAYr�   r�   r¿   r   r–   rŠ   r—   r­   r®   rd   ra   rb   rc   Úclose_socketÚrecv_events_threadÚjoin)rE   rµ   rF   rG   Ú
connections        rI   Úopen_connectionzreconnect.open_connectionw  sL  € à�9‰9ÐØ×#Ñ# HÓ-‰Dà—9‘9ˆDð	Ø�{‰{œvŸ~™~¬v¯©Ð?Ñ?Ø—‘¤× 2Ñ 2´F×4FÑ4FÈÔMà�{‰{×!Ò!Ø—‘ t¨XÓ6�ä%Ø—‘ñà×&Ñ&ñˆHð 0˜×/Ñ/ØØñð ×(Ñ(ñˆJð		Ø× Ñ Ø×'Ñ'Ø×&Ñ&Ø× Ñ Ó"ôð Ðøô ò 	Ø�J‰JŒLØð	ûô ò 	Ø×#Ñ#Ô%Ø×)Ñ)×.Ñ.Ô0Øð	ús   ¬CD% Ã.5E Ä%E Å5E8c                ó„  — t        |t        «      r0|j                  j                  dv rd|j                  j                  v s|S | j
                  }t        j                  j                  | j                  |j                  j                  d   «      }t        |«      }| j                  �t        d|› d�«      S |j                  r|j                  st        d|› �«      S |j                  |j                  k7  s2|j                  |j                  k7  s|j                   |j                   k7  r™| j"                  j%                  dd«      rt        d|› d	�«      S | j"                  j%                  d
«      �t        d|› d�«      S | j&                  �8t)        d„ t)        | j&                  «      j+                  «       D «       «      | _        |S )z¬
        Determine whether a connection error is a redirect that can be followed.

        Return the new URI if it's a valid redirect. Else, return an exception.

        )é,  i-  i.  i/  i3  i4  ÚLocationzcannot follow redirect to z with a preexisting socketz)cannot follow redirect to non-secure URI rš   Fz'cannot follow cross-origin redirect to z with a Unix socketr¤   z with an explicit host and portc              3  óN   K  — | ]  \  }}|j                  «       d vr||f–— Œ y­w))ÚauthorizationÚcookiezproxy-authorizationN)Úlower)Ú.0ÚkeyÚvalues      rI   ú	<genexpr>z-reconnect.process_redirect.<locals>.<genexpr>Ý  s2   è ø€ ò á&˜C ØŸ9™9›;ØQñRð ˜eœñùs   ‚#%)rg   r   rf   Ústatus_coderY   r�   ÚurllibÚparseÚurljoinrŽ   r+   rF   r‘   r�   r   r³   r´   r”   Úgetra   r   Ú	raw_items)rE   ÚexcÚ
old_ws_uriÚnew_uriÚ
new_ws_uris        rI   Úprocess_redirectzreconnect.process_redirect¢  s®  € ô �sœMÔ*Ø—‘×(Ñ(ðñð ˜cŸl™l×2Ñ2Ñ2àˆJà—[‘[ˆ
Ü—,‘,×&Ñ& t§x¡x°·±×1EÑ1EÀjÑ1QÓRˆÜ˜wÓ'ˆ
ð �9‰9Ð ÜØ,¨W¨IÐ5OÐPóð ð
 ×Ò Z×%6Ò%6Ü Ð#LÈWÈIÐ!VÓWÐWð ×Ñ ×!2Ñ!2Ò2Ø�‰ *§/¡/Ò1Ø�‰ *§/¡/Ò1ð ×&Ñ&×*Ñ*¨6°5Ô9Ü!Ø=¸g¸Yð G)ð *óð ð ×&Ñ&×*Ñ*¨9Ó5ÐAÜ!Ø=¸g¸Yð G5ð 6óð ð ×&Ñ&Ð2Ü*1ñä*1°$×2IÑ2IÓ*J×*TÑ*TÓ*Vôó+�Ô'ð ˆrJ   c                óp  — t        | j                  «      }t        t        «      D ]'  }	 | j	                  |«      }|j                  «        |c S  t        dt        › d�«      ‚# t        $ rJ}| j                  |«      }t        |t        «      r||u r‚ ||‚|| _	        t        |«      | _        Y d}~Œ‹d}~ww xY w)z3Connect to a WebSocket server, following redirects.Nz
more than z
 redirects)r.   r†   ÚrangeÚMAX_REDIRECTSrË   Ústart_keepaliver­   rá   rg   rŽ   r+   r�   r   )rE   rµ   Ú_rÊ   rÝ   Ú
exc_or_uris         rI   r/   zreconnect.connectç  sÀ   € ô
 ˜D×-Ñ-Ó.ˆä”}Ó%ò 	HˆAð"Ø!×1Ñ1°(Ó;�
ð  ×*Ñ*Ô,Ø!Ò!ð'	Hô*   *¬]¨O¸:Ð FÓGÐGøô% ò Ø!×2Ñ2°3Ó7�
Ü˜j¬)Ô4à! SÑ(Øà(¨cÐ1ð  *�D”HÜ"+¨JÓ"7�D”KÜûðús   ©A"Á"	B5Á+A B0Â0B5c                ó”   — t        | d«      rt        d«      ‚| j                  «       | _        d| j                  _        | j                  S )NrÊ   zconnect() isn't reentrantF)ÚhasattrÚRuntimeErrorr/   rÊ   rB   rT   s    rI   rL   zreconnect.__enter__  s;   € Ü�4˜Ô&ÜÐ:Ó;Ð;ØŸ,™,›.ˆŒØ16ˆ�‰Ô.Ø�‰ÐrJ   c                óL   — 	 | j                   j                  «        | ` y # | ` w xY w©N)rÊ   r®   )rE   Úexc_typeÚ	exc_valueÚexc_tracebacks       rI   Ú__exit__zreconnect.__exit__  s"   € ð	 Ø�O‰O×!Ñ!Ô#à‘ø�‘ús   ‚ Ÿ#c              #  óÊ  K  — d }	 	 | 5 }|–— d d d «       d }Œ# 1 sw Y   ŒxY w# t         $ r²}	 | j                  |«      }n# t         $ r}|}Y d }~nd }~ww xY w||u r‚ |�||‚|€| j                  «       }t        |«      }| j                  j                  d|t        j                  |«      d   j                  «       «       t        j                  |«       Y d }~ŒÃd }~ww xY w­w)Nz0connect failed; reconnecting in %.1f seconds: %sr   )r­   r   r‡   Únextr‰   ÚinfoÚ	tracebackÚformat_exception_onlyÚstripÚtimeÚsleep)rE   ÚdelaysrÊ   rÝ   Únew_excÚ
raised_excÚdelays          rI   Ú__iter__zreconnect.__iter__  sö   è ø€ Ø*.ˆØð"Øð %˜ZØ$Ò$÷%ðB �ðG ÷%ð %ûäò "ð
)Ø"×4Ñ4°SÓ9‘GøÜ ò )Ø(•Gûð)úð
 ˜c‘>ØØÐ&Ø! sÐ*ð �>Ø!×2Ñ2Ó4�FÜ˜V›�Ø—‘× Ñ ØFØÜ×3Ñ3°CÓ8¸Ñ;×AÑAÓCôô
 —
‘
˜5×!Ñ!ûð7"üs_   ‚C#‡% ‰Ž% –C#™"ž% ¥	C ¯AÁ CÁ	AÁ
AÁCÁAÁB CÃC#ÃC Ã C#)2rŽ   ÚstrrF   úsocket.socket | Noner}   ússl_module.SSLContext | Noner~   rt   r   úOrigin | Noner€   ú'Sequence[ClientExtensionFactory] | Noner�   úSequence[Subprotocol] | Noner‚   rt   ra   rs   rb   rt   rƒ   ústr | Literal[True] | Noner„   r   r…   rt   r   z'Callable[[Exception], Exception | None]r†   rn   r;   rn   r<   rn   r=   rn   r‡   zCallable[[], Generator[float]]rˆ   ro   r>   ro   r‰   úLoggerLike | NonerŠ   útype[ClientConnection] | Noner˜   r   rp   rq   )rµ   r.   rp   rm   )rF   rm   rµ   r.   rp   rm   )rµ   r.   rp   r3   )rÝ   r­   rp   zException | strrr   )rí   ztype[BaseException] | Nonerî   zBaseException | Nonerï   zTracebackType | Nonerp   rq   )rp   zIterator[ClientConnection])ru   rv   rw   rx   r   r   r   rD   r·   r¿   rË   rá   r/   rL   rð   rý   r¥   rJ   rI   r1   r1       sÀ  „ ñ*ðb &*Ø,0Ø&*à $Ø>BØ59Ø"+à15Ø(2Ø,0Ø26Ø,0ØEVà%'Ø&(Ø%'Ø&(Ø;Bà?DØ@Bà$(à;?ñAY
àðY
ð
 #ðY
ð *ðY
ð $ðY
ð ðY
ð <ðY
ð 3ðY
ð  ðY
ð /ðY
ð &ðY
ð  *ð!Y
ð" 0ð#Y
ð$  *ð%Y
ð& Cð'Y
ð* #ð+Y
ð, $ð-Y
ð. #ð/Y
ð0 $ð1Y
ð2 9ð3Y
ð6 =ð7Y
ð8 >ð9Y
ð< "ð=Y
ð@ 9ðAY
ðD ðEY
ðF 
óGY
óv9óvó()óVCóJHó@ð	 à,ð	 ð (ð	 ð ,ð		 ð
 
ó	 ô%rJ   r1   .)rF   r}   r~   r   r€   r�   r‚   ra   rb   rƒ   r„   r…   r†   r;   r<   r=   rˆ   r>   r‰   rŠ   Úlegacyc                ó   — y rì   r¥   ©rŽ   rF   r}   r~   r   r€   r�   r‚   ra   rb   rƒ   r„   r…   r†   r;   r<   r=   rˆ   r>   r‰   rŠ   r  r˜   s                          rI   r/   r/   C  s   € ðF rJ   )rF   r}   r~   r   r€   r�   r‚   ra   rb   rƒ   r„   r…   r†   r;   r<   r=   rˆ   r>   r‰   rŠ   c                ó   — y rì   r¥   r	  s                          rI   r/   r/   i  s   € ðF rJ   r{   Tr8   r7   r|   r9   c               óÔ   — t        | fi d|“d|“d|“d|“d|“d|“d|“d|“d	|	“d
|
“d|“d|“d|“d|“d|“d|“d|“d|“d|“d|“|¤Ž}|du r|S |j                  «       }|rd|_        |S )aŒ  
    Connect to the WebSocket server at ``uri``.

    :func:`connect` should be treated as a context manager yielding a
    :class:`ClientConnection`, which can then receive and send messages::

        from websockets.sync.client import connect

        with connect(...) as websocket:
            ...

    The connection is closed automatically when exiting the context.

    Use :func:`reconnect` to reconnect automatically on errors.

    For backwards compatibility, :func:`connect` can be called directly::

        websocket = connect(..., legacy=True)

    In that case, you're responsible for closing the connection with
    :meth:`ClientConnection.close` when no longer needed.

    When the ``legacy`` flag is enabled, :func:`connect` returns directly a
    :class:`ClientConnection` and iterating that connection yields messages.
    Currently, this is the default behavior when ``legacy`` isn't specified.

    When the ``legacy`` flag is explicitly disabled, :func:`connect` behaves
    like :func:`reconnect`: using it as an iterator returns a new connection
    at each iteration, making it easy to reconnect automatically on errors.

    Args:
        uri: URI of the WebSocket server.
        sock: Preexisting TCP socket. ``sock`` overrides the host and port
            from ``uri``. You may call :func:`socket.create_connection` to
            create a suitable TCP socket.
        ssl: Configuration for enabling TLS on the connection.
        server_hostname: Host name for the TLS handshake. ``server_hostname``
            overrides the host name from ``uri``.
        origin: Value of the ``Origin`` header, for servers that require it.
        extensions: List of supported extensions, in order in which they
            should be negotiated and run.
        subprotocols: List of supported subprotocols, in order of decreasing
            preference.
        compression: The "permessage-deflate" extension is enabled by default.
            Set ``compression`` to :obj:`None` to disable it. See the
            :doc:`compression guide <../../topics/compression>` for details.
        additional_headers: Arbitrary HTTP headers to add to the handshake
            request.
        user_agent_header: Value of  the ``User-Agent`` request header.
            It defaults to ``"Python/x.y.z websockets/X.Y"``.
            Setting it to :obj:`None` removes the header.
        proxy: If a proxy is configured, it is used by default. Set ``proxy``
            to :obj:`None` to disable the proxy or to the address of a proxy
            to override the system configuration. See the :doc:`proxy docs
            <../../topics/proxies>` for details.
        proxy_ssl: Configuration for enabling TLS on the proxy connection.
        proxy_server_hostname: Host name for the TLS handshake with the proxy.
            ``proxy_server_hostname`` overrides the host name from ``proxy``.
        open_timeout: Timeout for opening the connection in seconds.
            :obj:`None` disables the timeout.
        ping_interval: Interval between keepalive pings in seconds.
            :obj:`None` disables keepalive.
        ping_timeout: Timeout for keepalive pings in seconds.
            :obj:`None` disables timeouts.
        close_timeout: Timeout for closing the connection in seconds.
            :obj:`None` disables the timeout.
        max_size: Maximum size of incoming messages in bytes.
            :obj:`None` disables the limit. You may pass a ``(max_message_size,
            max_fragment_size)`` tuple to set different limits for messages and
            fragments when you expect long messages sent in short fragments.
        max_queue: High-water mark of the buffer where frames are received.
            It defaults to 16 frames. The low-water mark defaults to ``max_queue
            // 4``. You may pass a ``(high, low)`` tuple to set the high-water
            and low-water marks. If you want to disable flow control entirely,
            you may set it to ``None``, although that's a bad idea.
        logger: Logger for this client.
            It defaults to ``logging.getLogger("websockets.client")``.
            See the :doc:`logging guide <../../topics/logging>` for details.
        legacy: Set to :obj:`True` to opt into the historical behavior of
            returning a :class:`ClientConnection`, without deprecation warning.
        create_connection: Factory for the :class:`ClientConnection` managing
            the connection. Set it to a wrapper or a subclass to customize
            connection handling.

    Any other keyword arguments are passed to :func:`~socket.create_connection`.
    For example, you can set ``address`` to a ``(host, port)`` tuple to connect
    to a different host and port from those found in ``uri``. This only changes
    the destination of the TCP connection. The host name from ``uri`` is still
    used in the TLS handshake for secure connections and in the ``Host`` header.

    Raises:
        InvalidURI: If ``uri`` isn't a valid WebSocket URI.
        InvalidProxy: If ``proxy`` isn't a valid proxy.
        OSError: If the TCP connection fails.
        InvalidHandshake: If the opening handshake fails.
        TimeoutError: If the opening handshake times out.

    rF   r}   r~   r   r€   r�   r‚   ra   rb   rƒ   r„   r…   r†   r;   r<   r=   rˆ   r>   r‰   rŠ   F)r1   r/   rB   )rŽ   rF   r}   r~   r   r€   r�   r‚   ra   rb   rƒ   r„   r…   r†   r;   r<   r=   rˆ   r>   r‰   rŠ   r  r˜   Ú	connecterrÊ   s                            rI   r/   r/   �  s  € ôJ Øòáðñ ðñ (ð	ñ
 ðñ ðñ "ðñ  ðñ .ðñ ,ðñ ðñ ðñ 4ðñ "ðñ $ðñ  "ð!ñ" $ð#ñ$ ð%ñ& ð'ñ( ð)ñ* ,Ø
ñ-€Ið4 ��ØÐØ×"Ñ"Ó$€Jñ Ø,1ˆ
Ô)ØÐrJ   c                óÐ   — |j                  d«      }| €|€t        d«      ‚| �|�t        d«      ‚|€'|j                  d«      €|j                  d«      €d}nd}t        d
|d| d	œ|¤ŽS )z¦
    Similar to :func:`unix_connect`, with support for automatic reconnection.

    Refer to the documentation of :func:`reconnect` for details on its behavior.

    rF   zmissing path argumentzpath is incompatible with sockr}   rŒ   zws://localhost/zwss://localhost/T)rŽ   rš   r›   r¥   )rÛ   r‘   r1   )r›   rŽ   r˜   rF   s       rI   r2   r2   8  s�   € ð �:‰:�fÓ€DØ€|˜˜ÜÐ0Ó1Ð1Ø	Ð	˜dÐ.ÜÐ9Ó:Ð:à
€{à�:‰:�eÓÐ$¨¯©°MÓ)BÐ)JØ#‰Cà$ˆCäÐ=˜ 4¨dÑ=°fÑ=Ð=rJ   )r  c                ó   — y rì   r¥   ©r›   rŽ   r  r˜   s       rI   r0   r0   S  s   € ð rJ   c                ó   — y rì   r¥   r  s       rI   r0   r0   ]  s   € ð rJ   c               ó^   — t        | |fi |¤Ž}|du r|S |j                  «       }|rd|_        |S )aÚ  
    Connect to a WebSocket server listening on a Unix socket.

    This function accepts the same keyword arguments as :func:`connect`.

    It's only available on Unix.

    It's mainly useful for debugging servers listening on Unix sockets.

    Args:
        path: File system path to the Unix socket.
        uri: URI of the WebSocket server. ``uri`` defaults to
            ``ws://localhost/`` or, when a ``ssl`` is provided, to
            ``wss://localhost/``.

    F)r2   r/   rB   )r›   rŽ   r  r˜   r  rÊ   s         rI   r0   r0   g  sE   € ô. ˜t SÑ3¨FÑ3€Ið ��ØÐØ×"Ñ"Ó$€Jñ Ø,1ˆ
Ô)ØÐrJ   )Ú	ProxyType)r    )Úsocks5hÚsocks5Úsocks4aÚsocks4Fc           	     ó¾  — t        t        | j                     | j                  | j                  | j
                  | j                  t        | j                     «      }|j                  d|j                  «       «       	  |j                  |j                  |j                  fi |¤ŽS # t        t        t        j                  f$ r ‚ t        $ r}t        d«      |‚d}~ww xY w)z0Connect via a SOCKS proxy and return the socket.rc   z failed to connect to SOCKS proxyN)Ú
SocksProxyÚSOCKS_PROXY_TYPESr¯   r³   r´   ÚusernameÚpasswordÚSOCKS_PROXY_RDNSr[   rc   r/   ÚOSErrorr_   r§   r­   r   )rƒ   r�   rµ   r˜   Úsocks_proxyrÝ   s         rI   r°   r°   ¨  s»   € ô !Ü˜eŸl™lÑ+Ø�J‰JØ�J‰JØ�N‰NØ�N‰NÜ˜UŸ\™\Ñ*ó
ˆð 	×Ñ˜) X×%5Ñ%5Ó%7Ô8ð	JØ&�;×&Ñ& v§{¡{°F·K±KÑJÀ6ÑJÐJøÜœ¤v§~¡~Ð6ò 	ØÜò 	JÜÐ?Ó@ÀcÐIûð	Jús   Á<'B$ Â$'CÃCÃCc                ó   — t        d«      ‚)Nz6connecting through a SOCKS proxy requires python-socks)ÚImportError)rƒ   r�   rµ   r˜   s       rI   r°   r°   ‘  s   € ô ÐRÓSÐSrJ   c                óÚ  — t        «       }t        j                  |j                  |j                  |j
                  d¬«      }	 	 | j                  |j                  «       «       | j                  d«      }|r|j                  |«       n|j                  «        t        |«       Œ`# t        $ rr}t        |j                  t        «      sJ ‚|j                  }d|j                  cxk  rdk  r%n t!        |«      ‚|cY d }~| j                  d «       S t!        |«      ‚d }~wt"        j                  $ r t%        d«      ‚t&        $ r}t)        d«      |‚d }~ww xY w# | j                  d «       w xY w)NT)rƒ   i   éÈ   rÍ   z(timed out while connecting to HTTP proxyz0did not receive a valid HTTP response from proxy)r$   r   rÙ   Ú	read_lineÚ
read_exactÚread_to_eofrª   rc   ÚrecvÚ	feed_dataÚfeed_eofrò   ÚStopIterationrg   rÕ   r×   r   r§   r_   r­   r   )rF   rµ   ÚreaderÚparserÚdatarÝ   rf   s          rI   Úread_connect_responser-  Â  s;  € Ü‹^€FÜ�^‰^Ø×ÑØ×ÑØ×ÑØô	€FðØØ�O‰O˜H×,Ñ,Ó.Ô/Ø—9‘9˜T“?ˆDÙØ× Ñ  Õ&à—‘Ô!Ü�ŒLð øô ò /Ü˜#Ÿ)™)¤XÔ.Ð.Ð.Ø—9‘9ˆØ�(×&Ñ&Ô,¨Ô,ô % XÓ.Ð.ð ŒOð 	�‰˜Õô % XÓ.Ð.ûÜ�>‰>ò GÜÐEÓFÐFÜò Ü!Ø>ó
àð	ûðûð
 	�‰˜ÕúsD   ÁA!B$ Â$	EÂ-ADÃ8EÃ9E ÄDÄ)EÅEÅEÅE ÅE*r£   c               ó  — |j                  d|j                  «       «       t        j                  | j                  | j
                  ffi |¤Ž}| j                  dk(  rg|€t        j                  «       }|€| j                  }|j                  |j                  «       «       |j                  ||¬«      }|j                  d «       t        | ||«      }|j                  |«       	 t        ||«       |S # t        $ r |j                  «        ‚ w xY w)Nrc   r¢   r¹   )r[   rc   r§   rŠ   r³   r´   r¯   rº   r»   rª   r¼   r#   Úsendallr-  r­   r®   )	rƒ   r�   rµ   rb   r}   r~   r˜   rF   rX   s	            rI   r±   r±   ä  sò   € ð ×Ñ�i ×!1Ñ!1Ó!3Ô4Ü×#Ñ# U§Z¡Z°·±Ð$<ÑGÀÑG€Dð ‡|�|�wÒØˆ;Ü×3Ñ3Ó5ˆCØÐ"Ø#Ÿj™jˆOØ�‰˜×(Ñ(Ó*Ô+Ø�‰˜t°_ˆÓEˆØ�‰˜Ôô & e¨VÐ5FÓG€GØ‡L�L�ÔðÜ˜d HÔ-ð
 €Køô	 ò Ø�
‰
ŒØðús   Ã"C0 Ã0DÚTÚF)Úboundc                  óV   — e Zd ZdZdZ	 d
	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Z	dd	„Z
y)r½   zr
    Socket-like object providing TLS-in-TLS.

    Only methods that are used by websockets are implemented.

    i   Nc                ó  — t        j                  «       | _        t        j                  «       | _        || _        |j                  | j                  | j                  |¬«      | _        | j                  | j                  j                  «       y )Nr¹   )	rº   Ú	MemoryBIOÚincomingÚoutgoingÚ
ssl_socketÚwrap_bioÚ
ssl_objectÚrun_ioÚdo_handshake)rE   rF   rŒ   r~   s       rI   rD   zSSLSSLSocket.__init__  sk   € ô #×,Ñ,Ó.ˆŒÜ"×,Ñ,Ó.ˆŒØˆŒØ%×.Ñ.Ø�M‰MØ�M‰MØ+ð /ó 
ˆŒð
 	�‰�D—O‘O×0Ñ0Õ1rJ   c                ó²  — 	 d}d}	  ||Ž }| j                  j	                  «       }|r| j
                  j                  |«       |r^| j
                  j                  | j                  «      }|r| j                  j                  |«       n| j                  j                  «        Œ¢|rŒ¥S # t         j                  $ r d}Y Œ³t         j                  $ r d}Y ŒÉw xY w)NTF)rº   ÚSSLWantReadErrorÚSSLWantWriteErrorr7  Úreadr8  r/  r&  Úrecv_bufsizer6  ÚwriteÚ	write_eof)rE   ÚfuncÚargsÚ	want_readÚ
want_writeÚresultr,  s          rI   r;  zSSLSSLSocket.run_io)  sÇ   € ØØˆIØˆJð"Ù˜t˜�ð —=‘=×%Ñ%Ó'ˆDÙØ—‘×'Ñ'¨Ô-ñ Ø—‘×+Ñ+¨D×,=Ñ,=Ó>�ÙØ—M‘M×'Ñ'¨Õ-à—M‘M×+Ñ+Ô-ØáØàˆMøô- ×.Ñ.ò !Ø ’	Ü×/Ñ/ò "Ø!’
ð"ús   ‡B( Â(CÂ?CÃCc                ó‚   — 	 | j                  | j                  j                  |«      S # t        j                  $ r Y yw xY w)NrJ   )r;  r:  r@  rº   ÚSSLEOFError)rE   Úbuflens     rI   r&  zSSLSSLSocket.recvG  s:   € ð	Ø—;‘;˜tŸ™×3Ñ3°VÓ<Ð<øÜ×%Ñ%ò 	Ùð	ús   ‚%( ¨>½>c                óN   — | j                  | j                  j                  |«      S rì   )r;  r:  rB  )rE   r,  s     rI   ÚsendzSSLSSLSocket.sendM  s   € Ø�{‰{˜4Ÿ?™?×0Ñ0°$Ó7Ð7rJ   c                óî   — d}t        |«      5 }|j                  d«      5 }t        |«      }||k  r|| j                  ||d  «      z  }||k  rŒd d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nr   ÚB)Ú
memoryviewr   ÚlenrM  )rE   r,  ÚcountÚviewÚ	byte_viewÚamounts         rI   r/  zSSLSSLSocket.sendallP  sz   € àˆÜ˜Óð 	6  t§y¡y°£~ð 	6¸Ü˜“^ˆFØ˜&’.Ø˜Ÿ™ 9¨U¨VÐ#4Ó5Ñ5�ð ˜&“.÷	6÷ 	6÷ 	6ñ 	6ú÷ 	6ð 	6ús"   ŽA+ -AÁA+ÁA(	Á$A+Á+A4c                ó.   — t        | j                  |«      S rì   )Úgetattrr8  )rE   Únames     rI   Ú__getattr__zSSLSSLSocket.__getattr__[  s   € Ü�t—‘¨Ó-Ð-rJ   rì   )rF   rm   rŒ   zssl_module.SSLContextr~   rt   rp   rq   )rD  zCallable[..., T]rE  r   rp   r0  )rK  Úintrp   Úbytes)r,  r%   rp   rZ  )r,  r%   rp   rq   )rX  rþ   rp   r   )ru   rv   rw   rx   rA  rD   r;  r&  rM  r/  rY  r¥   rJ   rI   r½   r½     sW   „ ñð €Lð '+ð	2àð2ð +ð2ð $ð	2ð
 
ó2ó ó<ó8ó6ô.rJ   r½   )0rŽ   rþ   rF   rÿ   r}   r   r~   rt   r   r  r€   r  r�   r  r‚   rt   ra   rs   rb   rt   rƒ   r  r„   r   r…   rt   r†   rn   r;   rn   r<   rn   r=   rn   rˆ   ro   r>   ro   r‰   r  rŠ   r  r  úLiteral[True] | Noner˜   r   rp   r3   )0rŽ   rþ   rF   rÿ   r}   r   r~   rt   r   r  r€   r  r�   r  r‚   rt   ra   rs   rb   rt   rƒ   r  r„   r   r…   rt   r†   rn   r;   rn   r<   rn   r=   rn   rˆ   ro   r>   ro   r‰   r  rŠ   r  r  úLiteral[False]r˜   r   rp   r1   )0rŽ   rþ   rF   rÿ   r}   r   r~   rt   r   r  r€   r  r�   r  r‚   rt   ra   rs   rb   rt   rƒ   r  r„   r   r…   rt   r†   rn   r;   rn   r<   rn   r=   rn   rˆ   ro   r>   ro   r‰   r  rŠ   r  r  úbool | Noner˜   r   rp   úClientConnection | reconnect)NN)r›   úPathLike | NonerŽ   rt   r˜   r   rp   r1   )..)
r›   r`  rŽ   rt   r  r\  r˜   r   rp   r3   )
r›   r`  rŽ   rt   r  r]  r˜   r   rp   r1   )
r›   r`  rŽ   rt   r  r^  r˜   r   rp   r_  )
rƒ   r    r�   r*   rµ   r.   r˜   r   rp   rm   )rF   rm   rµ   r.   rp   r   )rƒ   r    r�   r*   rµ   r.   rb   rt   r}   r   r~   rt   r˜   r   rp   rm   )_Ú
__future__r   r’   r«   r§   r}   rº   r@   r÷   rô   Úurllib.parserØ   rQ   Úcollections.abcr   r   r   Útypesr   Útypingr   r	   r
   r   r   r   Úclientr   r   r   Údatastructuresr   r   Ú
exceptionsr   r   r   r   r   Úextensions.baser   Úextensions.permessage_deflater   rY   r   Úhttp11r   r   rG   r   r   rƒ   r    r!   r"   r#   Ústreamsr$   r%   r&   r'   r(   r)   rŽ   r*   r+   rÊ   r-   Úutilsr.   Ú__all__rZ  ÚenvironrÛ   rä   r3   r1   r/   r2   r0   Úpython_socksr  Úpython_socks.syncr  ÚSOCKS5ÚSOCKS4r  r  r°   r   r-  r±   r0  r1  r½   r¥   rJ   rI   ú<module>rt     s  ðÝ "ã Û 	Û Û Û Û Û Û Û ß 9Ñ 9Ý ß B× Bç ?Ñ ?ß 1÷õ õ 5Ý LÝ +ß )ß (ß JÓ JÝ "ß IÕ Iß )Ý "Ý ò Y€á�B—J‘J—N‘NÐ#=¸tÓDÓE€ôr%�zô r%÷j`ñ `ðF 
ð
 "%Ø(+Ø"%àØ:=Ø14Ø!à-0Ø$'Ø(+Ø.1Ø(+à!$Ø"%Ø!$Ø"%à;>Ø<?à #à7:à#&ñ?"Ø	ð"ð ð	"ð
 
&ð"ð  ð"ð ð"ð 8ð"ð /ð"ð ð"ð +ð"ð "ð"ð &ð"ð  ,ð!"ð" &ð#"ð& ð'"ð(  ð)"ð* ð+"ð,  ð-"ð0 9ð1"ð2 :ð3"ð6 ð7"ð: 5ð;"ð> !ð?"ðB ðC"ðD òE"ó 
ð"ðJ 
ð
 "%Ø(+Ø"%àØ:=Ø14Ø!à-0Ø$'Ø(+Ø.1Ø(+à!$Ø"%Ø!$Ø"%à;>Ø<?à #à7:ñ;"Ø	ð"ð ð	"ð
 
&ð"ð  ð"ð ð"ð 8ð"ð /ð"ð ð"ð +ð"ð "ð"ð &ð"ð  ,ð!"ð" &ð#"ð& ð'"ð(  ð)"ð* ð+"ð,  ð-"ð0 9ð1"ð2 :ð3"ð6 ð7"ð: 5ð;"ð> ð?"ðB ðC"ðD òE"ó 
ð"ðR "&Ø(,Ø"&à Ø:>Ø15Ø'à-1Ø$.Ø(,Ø.2Ø(,à!#Ø"$Ø!#Ø"$à;@Ø<>à $à7;àñ?fØ	ðfð ð	fð
 
&ðfð  ðfð ðfð 8ðfð /ðfð ðfð +ðfð "ðfð &ðfð  ,ð!fð" &ð#fð& ð'fð(  ð)fð* ð+fð,  ð-fð0 9ð1fð2 :ð3fð6 ð7fð: 5ð;fð> ð?fðB ðCfðD "óEfðT !Øð>Ø
ð>à	ð>ð ð>ð ó	>ð6 
àØðð $'ñ	Ø
ðà	ðð !ð	ð
 ðð òó 
ðð 
àØðØ
ðà	ðð ð	ð
 ðð òó 
ðð !Øð!ð ñ	!Ø
ð!à	ð!ð ð	!ð
 ð!ð "ó!ðH4JÝ&Ý5ð ×#Ñ#Ø×"Ñ"Ø×#Ñ#Ø×"Ñ"ñ	Ðð ØØØñ	ÐðJØðJàðJð ðJð ð	Jð
 
óJó4ðN %)Ø(,Ø"&ñ$Øð$àð$ð ð$ð
 "ð$ð 
&ð$ð  ð$ð ð$ð ó$ñN ˆCƒL€ÙˆC�x  Q Ñ'Ô(€÷M.ò M.øðA ò TðTØðTàðTð ðTð ð	Tð
 
õTðTús   È2K  Ë KËK