Ë
    Bü´j_=  ã                   ó¶  — 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mZm	Z	m
Z
 ddlmZmZ ddlmZ 	 	 d dlmZ de j                   d	e j                   d
efd„Zg 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Z#dZ$dZ%dZ&eeeeeee e!e"e#e$e%fZ' G d„ d«      Z( G d„ d «      Z) G d!„ d"«      Z*y# e$ r- ej*                  Zde j                   d	e j                   d
efd„ZY Œ€w xY w)#é    N)ÚLock)ÚCallableÚOptionalÚUnionÚAnyé   )ÚWebSocketPayloadExceptionÚWebSocketProtocolException)Úvalidate_utf8)ÚXorMaskerSimpleÚ
mask_valueÚ
data_valueÚreturnc                 ó:   — t        | «      j                  |«      }|S ©N)r   Úprocess)r   r   Úmask_results      úM/root/workspace/ytshorts/venv/lib/python3.12/site-packages/websocket/_abnf.pyÚ_maskr   %   s   € Ü,¨ZÓ8×@Ñ@ÀÓLˆØÐó    c                 óÐ   — t        |«      }t        j                  |t        «      }t        j                  | |dz  z  | d |dz   z   t        «      }||z  j	                  |t        «      S )Né   )ÚlenÚintÚ
from_bytesÚnative_byteorderÚto_bytes)r   r   ÚdatalenÚint_data_valueÚint_mask_values        r   r   r   -   sd   € Ü�j“/ˆÜŸ™¨
Ô4DÓEˆÜŸ™Ø˜' Q™,Ñ'¨*°]°wÀ±{Ð*CÑCÔEUó
ˆð  Ñ/×9Ñ9¸'ÔCSÓTÐTr   )ÚABNFÚcontinuous_frameÚframe_bufferÚSTATUS_NORMALÚSTATUS_GOING_AWAYÚSTATUS_PROTOCOL_ERRORÚSTATUS_UNSUPPORTED_DATA_TYPEÚSTATUS_STATUS_NOT_AVAILABLEÚSTATUS_ABNORMAL_CLOSEDÚSTATUS_INVALID_PAYLOADÚSTATUS_POLICY_VIOLATIONÚSTATUS_MESSAGE_TOO_BIGÚSTATUS_INVALID_EXTENSIONÚSTATUS_UNEXPECTED_CONDITIONÚSTATUS_SERVICE_RESTARTÚSTATUS_TRY_AGAIN_LATERÚSTATUS_BAD_GATEWAYÚSTATUS_TLS_HANDSHAKE_ERRORiè  ié  iê  ië  ií  iî  iï  ið  iñ  iò  ió  iô  iõ  iö  i÷  c                   óf  — e Zd ZdZdZdZdZdZdZdZ	eeeeee	fZ
eded	ed
edede	diZdZdZdZddddeddfdededededededeeeef      ddfd„Zd&deddfd„Zededefd„«       Zdefd „Zed'deeef   dededd fd!„«       Zdefd"„Zd#eeef   defd$„Zed#eeef   deeef   defd%„«       Zy)(r!   z}
    ABNF frame class.
    See http://tools.ietf.org/html/rfc5234
    and http://tools.ietf.org/html/rfc6455#section-5.2
    r   r   é   é   é	   é
   ÚcontÚtextÚbinaryÚcloseÚpingÚpongé~   i   l            Ú ÚfinÚrsv1Úrsv2Úrsv3Úopcoder   Údatar   Nc                 ó˜   — || _         || _        || _        || _        || _        || _        |€d}|| _        t        j                  | _	        y)zG
        Constructor for ABNF. Please check RFC for arguments.
        Nr?   )
r@   rA   rB   rC   rD   r   rE   ÚosÚurandomÚget_mask_key)Úselfr@   rA   rB   rC   rD   r   rE   s           r   Ú__init__zABNF.__init__”   sK   € ð ˆŒØˆŒ	ØˆŒ	ØˆŒ	ØˆŒØ$ˆŒØˆ<ØˆDØˆŒ	ÜŸJ™JˆÕr   Úskip_utf8_validationc                 ó  — | j                   s| j                  s| j                  rt        d«      ‚| j                  t
        j                  vrt        d| j                  ›�«      ‚| j                  t
        j                  k(  r| j                  st        d«      ‚| j                  t
        j                  k(  r×t        | j                  «      }|sy|dk(  s|dk\  rt        d«      ‚|dkD  r%|s#t        | j                  dd «      st        d«      ‚t        | j                  t        «      r| j                  dd n| j                  dd j                  d	«      }t!        j"                  d
|«      d   }| j%                  |«      st        d|›�«      ‚yy)z…
        Validate the ABNF frame.

        Parameters
        ----------
        skip_utf8_validation: skip utf8 validation.
        zrsv is not implemented, yetzInvalid opcode zInvalid ping frame.Nr   r>   zInvalid close frame.r4   úutf-8ú!Hr   zInvalid close opcode )rA   rB   rC   r
   rD   r!   ÚOPCODESÚOPCODE_PINGr@   ÚOPCODE_CLOSEr   rE   r   Ú
isinstanceÚbytesÚencodeÚstructÚunpackÚ_is_valid_close_status)rJ   rL   Údata_lengthÚ
data_bytesÚcodes        r   ÚvalidatezABNF.validate¬   sS  € ð �9Š9˜Ÿ	š	 T§Y¢YÜ,Ð-JÓKÐKà�;‰;œdŸl™lÑ*Ü,¨¸t¿{¹{¸oÐ-NÓOÐOà�;‰;œ$×*Ñ*Ò*°4·8²8Ü,Ð-BÓCÐCà�;‰;œ$×+Ñ+Ò+Ü˜dŸi™i›.ˆKÙØØ˜aÒ ;°#Ò#5Ü0Ð1GÓHÐHà˜a’Ù,Ü% d§i¡i°° mÔ4ä0Ð1GÓHÐHô ˜dŸi™i¬Ô/ð —	‘	˜"˜1‘à—Y‘Y˜r �]×)Ñ)¨'Ó2ð ô
 —=‘=  zÓ2°1Ñ5ˆDØ×.Ñ.¨tÔ4Ü0Ð3HÈÈÐ1QÓRÐRð 5ð' ,r   r[   c                 ó6   — | t         v xs d| cxk  xr dk  S c S )Ni¸  iˆ  )ÚVALID_CLOSE_STATUS)r[   s    r   rX   zABNF._is_valid_close_statusÓ   s#   € àÔ)Ð)ÒB¨d°dÖ.A¸TÑ.AÐBÑ.AÐBr   c                 ó¶   — t        | j                  t        «      r| j                  nt        | j                  «      }d| j                  › d| j
                  › d|› �S )Nzfin=z opcode=z data=)rS   rE   ÚstrÚreprr@   rD   )rJ   Ú	data_reprs     r   Ú__str__zABNF.__str__×   sC   € Ü!+¨D¯I©I´sÔ!;�D—I’IÄÀdÇiÁiÃˆ	Ø�d—h‘h�Z˜x¨¯© }°F¸9¸+ÐFÐFr   c           	      óŒ   — |t         j                  k(  r!t        | t        «      r| j	                  d«      } t        |ddd|d| «      S )aÚ  
        Create frame to send text, binary and other data.

        Parameters
        ----------
        data: str
            data to send. This is string value(byte array).
            If opcode is OPCODE_TEXT and this value is unicode,
            data value is converted into unicode string, automatically.
        opcode: int
            operation code. please see OPCODE_MAP.
        fin: int
            fin flag. if set to 0, create continue fragmentation.
        rN   r   r   )r!   ÚOPCODE_TEXTrS   r`   rU   )rE   rD   r@   s      r   Úcreate_framezABNF.create_frameÛ   s@   € ð  ”T×%Ñ%Ò%¬*°T¼3Ô*?Ø—;‘;˜wÓ'ˆDä�C˜˜A˜q &¨!¨TÓ2Ð2r   c                 óÆ  — t        d„ | j                  | j                  | j                  | j                  fD «       «      rt        d«      ‚| j                  t        j                  vrt        d«      ‚t        | j                  «      }|t        j                  k\  rt        d«      ‚t        | j                  dz  | j                  dz  z  | j                  dz  z  | j                  dz  z  | j                  z  «      j                  d	«      }|t        j                  k  r.|t        | j                  dz  |z  «      j                  d	«      z  }n |t        j                   k  rG|t        | j                  dz  d
z  «      j                  d	«      z  }|t#        j$                  d|«      z  }nF|t        | j                  dz  dz  «      j                  d	«      z  }|t#        j$                  d|«      z  }| j                  sIt'        | j                  t(        «      r | j                  j                  d«      | _
        || j                  z   S | j+                  d«      }|| j-                  |«      z   S )zR
        Format this object to string(byte array) to send data to server.
        c              3   ó$   K  — | ]  }|d v–— Œ
 y­w))r   r   N© )Ú.0Úxs     r   ú	<genexpr>zABNF.format.<locals>.<genexpr>ô   s   è ø€ ÒT 1ˆq˜ŒÑTùs   ‚z
not 0 or 1zInvalid OPCODEzdata is too longé   é   é   r   úlatin-1r>   rO   é   ú!QrN   )Úanyr@   rA   rB   rC   Ú
ValueErrorrD   r!   rP   r   rE   Ú	LENGTH_63ÚchrrU   ÚLENGTH_7r   Ú	LENGTH_16rV   ÚpackrS   r`   rI   Ú_get_masked)rJ   ÚlengthÚframe_headerÚmask_keys       r   ÚformatzABNF.formatð   s÷  € ô ÑT¨¯©°4·9±9¸d¿i¹iÈÏÉÐ(SÔTÔTÜ˜\Ó*Ð*Ø�;‰;œdŸl™lÑ*ÜÐ-Ó.Ð.Ü�T—Y‘Y“ˆØ”T—^‘^Ò#ÜÐ/Ó0Ð0äØ�H‰H˜‰MØ�i‰i˜1‰nñà�i‰i˜1‰nñð �i‰i˜1‰nñð �k‰kñ	ó
÷ ‰&�Ó
ð 	ð ”D—M‘MÒ!ØœC §¡°1Ñ 4°vÑ =Ó>×EÑEÀiÓPÑP‰LØ”d—n‘nÒ$ØœC §¡°1Ñ 4°tÑ ;Ó<×CÑCÀIÓNÑNˆLØœFŸK™K¨¨fÓ5Ñ5‰LàœC §¡°1Ñ 4°tÑ ;Ó<×CÑCÀIÓNÑNˆLØœFŸK™K¨¨fÓ5Ñ5ˆLà�ŠÜ˜$Ÿ)™)¤SÔ)Ø ŸI™I×,Ñ,¨WÓ5�”	Ø $§)¡)Ñ+Ð+Ø×$Ñ$ QÓ'ˆØ˜d×.Ñ.¨xÓ8Ñ8Ð8r   r}   c                 óŽ   — t         j                  || j                  «      }t        |t        «      r|j                  d«      }||z   S )NrN   )r!   ÚmaskrE   rS   r`   rU   )rJ   r}   Úss      r   rz   zABNF._get_masked  s8   € Ü�I‰I�h §	¡	Ó*ˆä�h¤Ô$Ø—‘ wÓ/ˆHà˜!‰|Ðr   c                 óö   — |€d}t        | t        «      r| j                  d«      } t        |t        «      r|j                  d«      }t        t	        j                  d| «      t	        j                  d|«      «      S )zÛ
        Mask or unmask data. Just do xor for each byte

        Parameters
        ----------
        mask_key: bytes or str
            4 byte mask.
        data: bytes or str
            data to mask/unmask.
        r?   rp   ÚB)rS   r`   rU   r   Úarray)r}   rE   s     r   r€   z	ABNF.mask  sa   € ð ˆ<ØˆDä�h¤Ô$Ø—‘ yÓ1ˆHä�dœCÔ Ø—;‘;˜yÓ)ˆDä”U—[‘[  hÓ/´·±¸SÀ$Ó1GÓHÐHr   )F)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚOPCODE_CONTre   ÚOPCODE_BINARYrR   rQ   ÚOPCODE_PONGrP   Ú
OPCODE_MAPrw   rx   ru   r   r   r   r`   rT   rK   Úboolr\   ÚstaticmethodrX   rc   rf   r~   rz   r€   ri   r   r   r!   r!   l   sß  „ ñð €KØ€KØ€MØ€LØ€KØ€Kð 	ØØØØØð€Gð 	�VØ�VØ�xØ�gØ�VØ�Vð€Jð €HØ€IØ€Ið ØØØØ!ØØ,.ñ'àð'ð ð'ð ð	'ð
 ð'ð ð'ð ð'ð �u˜S %˜ZÑ(Ñ)ð'ð 
ó'ñ0%S¨Tð %S¸dó %SðN ðC Sð C¨Tò Có ðCðG˜ó Gð ñ3˜5 ¨ Ñ,ð 3°cð 3Àð 3ÈFò 3ó ð3ð(!9˜ó !9ðF E¨#¨u¨*Ñ$5ð ¸%ó ð ðI�u˜S %˜ZÑ(ð I°°c¸5°jÑ0Að IÀeò Ió ñIr   r!   c                   óª   — e Zd ZdZdZdeegef   deddfd„Z	dd„Z
defd	„Zdd
„Zdeeef   fd„Zdefd„Zdd„Zdefd„Zdd„Zdefd„Zdedefd„Zy)r#   ro   rn   Úrecv_fnrL   r   Nc                 ól   — || _         || _        g | _        | j                  «        t	        «       | _        y r   )ÚrecvrL   Úrecv_bufferÚclearr   Úlock)rJ   r�   rL   s      r   rK   zframe_buffer.__init__7  s/   € ð ˆŒ	Ø$8ˆÔ!ð "$ˆÔØ�
‰
ŒÜ“Fˆ�	r   c                 ó.   — d | _         d | _        d | _        y r   )Úheaderr{   r   ©rJ   s    r   r”   zframe_buffer.clearB  s   € Ø'+ˆŒØ%)ˆŒØ7;ˆ�r   c                 ó   — | j                   d u S r   )r—   r˜   s    r   Úneeds_headerzframe_buffer.needs_headerG  ó   € Ø�{‰{˜dÐ"Ð"r   c                 óº   — | j                  d«      }|d   }|dz	  dz  }|dz	  dz  }|dz	  dz  }|dz	  dz  }|dz  }|d   }|dz	  dz  }	|d	z  }
||||||	|
f| _        y )
Nr4   r   rm   r   rn   ro   r   é   rq   )Úrecv_strictr—   )rJ   r—   Úb1r@   rA   rB   rC   rD   Úb2Úhas_maskÚlength_bitss              r   Úrecv_headerzframe_buffer.recv_headerJ  s�   € Ø×!Ñ! !Ó$ˆØ�A‰YˆØ�A‰g˜‰kˆØ�Q‰w˜‰{ˆØ�Q‰w˜‰{ˆØ�Q‰w˜‰{ˆØ�c‘ˆØ�A‰YˆØ˜‘7˜Q‘;ˆØ˜4‘iˆà˜D $¨¨f°hÀÐLˆ�r   c                 óZ   — | j                   sy| j                   t        j                     }|S )NF)r—   r#   Ú_HEADER_MASK_INDEX)rJ   Ú
header_vals     r   r¡   zframe_buffer.has_maskX  s&   € Ø�{Š{ØØŸ+™+¤l×&EÑ&EÑFˆ
ØÐr   c                 ó   — | j                   d u S r   )r{   r˜   s    r   Úneeds_lengthzframe_buffer.needs_length^  r›   r   c                 óX  — | j                   €t        d«      ‚| j                   t        j                     }|dz  }|dk(  r0| j	                  d«      }t        j                  d|«      d   | _        y |dk(  r0| j	                  d«      }t        j                  d|«      d   | _        y || _        y )	NúHeader not receivedrq   r>   r4   rO   r   r5   rr   )r—   r
   r#   Ú_HEADER_LENGTH_INDEXrž   rV   rW   r{   )rJ   Úbitsr¢   Úvs       r   Úrecv_lengthzframe_buffer.recv_lengtha  sš   € Ø�;‰;ÐÜ,Ð-BÓCÐCØ�{‰{œ<×<Ñ<Ñ=ˆØ˜T‘kˆØ˜$ÒØ× Ñ  Ó#ˆAÜ Ÿ-™-¨¨aÓ0°Ñ3ˆD�KØ˜DÒ Ø× Ñ  Ó#ˆAÜ Ÿ-™-¨¨aÓ0°Ñ3ˆD�Kà%ˆD�Kr   c                 ó   — | j                   d u S r   )r   r˜   s    r   Ú
needs_maskzframe_buffer.needs_masko  s   € Ø�‰ $Ð&Ð&r   c                 ó`   — | j                  «       r| j                  d«      | _        y d| _        y )Nr   r?   )r¡   rž   r   r˜   s    r   Ú	recv_maskzframe_buffer.recv_maskr  s"   € Ø15·±´˜$×*Ñ*¨1Ó-ˆ�Àbˆ�r   c           
      óŽ  — | j                   5  | j                  «       r| j                  «        | j                  €t	        d«      ‚| j                  \  }}}}}}}| j                  «       r| j                  «        | j                  }| j                  «       r| j                  «        | j                  }	|€t	        d«      ‚| j                  |«      }
|r#|	€t	        d«      ‚t        j                  |	|
«      }
| j                  «        t        |||||||
«      }|j                  | j                   «       d d d «       |S # 1 sw Y   S xY w)Nrª   zLength not receivedzMask not received)r•   rš   r£   r—   r
   r¨   r®   r{   r°   r²   r   rž   r!   r€   r”   r\   rL   )rJ   r@   rA   rB   rC   rD   r¡   Ú_r{   r   ÚpayloadÚframes               r   Ú
recv_framezframe_buffer.recv_frameu  s-  € Ø�Y‰Yñ 	6à× Ñ Ô"Ø× Ñ Ô"Ø�{‰{Ð"Ü0Ð1FÓGÐGØ9=¿¹Ñ6ˆC��t˜T 6¨8°Qð × Ñ Ô"Ø× Ñ Ô"Ø—[‘[ˆFð �‰Ô Ø—‘Ô ØŸ™ˆJð ˆ~Ü0Ð1FÓGÐGØ×&Ñ& vÓ.ˆGÙØÐ%Ü4Ð5HÓIÐIÜŸ)™) J°Ó8�ð �J‰JŒLä˜˜d D¨$°¸À'ÓJˆEØ�N‰N˜4×4Ñ4Ô5÷?	6ðB ˆ÷C	6ðB ˆús   �D#D:Ä:EÚbufsizec                 óª  — t        |t        «      st        d«      ‚|t        d„ | j                  D «       «      z
  }|dkD  r\| j                  t        d|«      «      }t        |t        «      r*| j                  j                  |«       |t        |«      z  }nn|dkD  rŒ\dj                  | j                  «      }|dk(  r	g | _        |S ||d  g| _        |d | S )Nzbufsize must be an integerc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )r   )rj   Úbufs     r   rl   z+frame_buffer.recv_strict.<locals>.<genexpr>œ  s   è ø€ Ò F¨c¤ S§Ñ Fùs   ‚r   i @  r   )rS   r   rt   Úsumr“   r’   ÚminrT   Úappendr   Újoin)rJ   r¸   ÚshortageÚbytes_Úunifieds        r   rž   zframe_buffer.recv_strict™  sÔ   € Ü˜'¤3Ô'ÜÐ9Ó:Ð:ØœSÑ F°T×5EÑ5EÔ FÓFÑFˆØ˜Šlð —Y‘Yœs 5¨(Ó3Ó4ˆFÜ˜&¤%Ô(Ø× Ñ ×'Ñ'¨Ô/ØœC ›KÑ'‘ð ð ˜‹lð —(‘(˜4×+Ñ+Ó,ˆà�qŠ=Ø!ˆDÔØˆNà '¨¨Ð 1Ð2ˆDÔØ˜8˜GÐ$Ð$r   )r   N)r…   r†   r‡   r¥   r«   r   r   rT   r�   rK   r”   rš   r£   r   r¡   r¨   r®   r°   r²   r!   r·   rž   ri   r   r   r#   r#   3  s¥   „ ØÐØÐð	Ø   u Ñ-ð	ØEIð	à	ó	ó<ð
#˜dó #óMð˜%  c 	Ñ*ó ð#˜dó #ó&ð'˜Dó 'óIð"˜Dó "ðH% 3ð %¨5ô %r   r#   c                   ój   — e Zd Zdededdfd„Zdeddfd„Zdeddfd„Zdedeee	f   fd	„Z
dedefd
„Zy)r"   Úfire_cont_framerL   r   Nc                 ó<   — || _         || _        d | _        d | _        y r   )rÄ   rL   Ú	cont_dataÚrecving_frames)rJ   rÄ   rL   s      r   rK   zcontinuous_frame.__init__·  s!   € Ø.ˆÔØ$8ˆÔ!Ø.2ˆŒØ-1ˆÕr   r¶   c                 óô   — | j                   s(|j                  t        j                  k(  rt	        d«      ‚| j                   r8|j                  t        j
                  t        j                  fv rt	        d«      ‚y y )NzIllegal frame)rÇ   rD   r!   r‰   r
   re   rŠ   ©rJ   r¶   s     r   r\   zcontinuous_frame.validate½  sg   € Ø×"Ò" u§|¡|´t×7GÑ7GÒ'GÜ,¨_Ó=Ð=Ø×Ò 5§<¡<Ü×ÑÜ×Ñð4
ñ $
ô -¨_Ó=Ð=ð	$
Ðr   c                 ó<  — | j                   r"| j                   dxx   |j                  z  cc<   nZ|j                  t        j                  t        j
                  fv r|j                  | _        |j                  |j                  g| _         |j                  rd | _        y y )Nr   )rÆ   rE   rD   r!   re   rŠ   rÇ   r@   rÉ   s     r   Úaddzcontinuous_frame.addÆ  sr   € Ø�>Š>Ø�N‰N˜1Ó §¡Ñ+Ôà�|‰|¤× 0Ñ 0´$×2DÑ2DÐEÑEØ&+§l¡l�Ô#Ø#Ÿl™l¨E¯J©JÐ7ˆDŒNà�9Š9Ø"&ˆDÕð r   c                 ó6   — |j                   xs | j                  S r   )r@   rÄ   rÉ   s     r   Úis_firezcontinuous_frame.is_fireÑ  s   € Ø�y‰yÒ0˜D×0Ñ0Ð0r   c                 óJ  — | j                   }|€t        d«      ‚d | _         |d   |_        | j                  sZ|�X|d   t        j
                  k(  rB| j                  s6t        |j                  «      s!t        dt        |j                  «      › �«      ‚|€t        d«      ‚|d   |fS )NzNo continuation data availabler   r   zcannot decode: )
rÆ   r
   rE   rÄ   r!   re   rL   r   r	   ra   )rJ   r¶   rE   s      r   Úextractzcontinuous_frame.extractÔ  sŸ   € Ø�~‰~ˆØˆ<Ü,Ð-MÓNÐNØˆŒØ˜!‘WˆŒ
à×$Ò$ØÐ Ø�Q‘œ4×+Ñ+Ò+Ø×-Ò-Ü! %§*¡*Ô-ä+¨o¼dÀ5Ç:Á:Ó>NÐ=OÐ,PÓQÐQØˆ<Ü,Ð-MÓNÐNØ�A‰w˜ˆ~Ðr   )r…   r†   r‡   r�   rK   r!   r\   rË   r   r   rÍ   ÚtuplerÏ   ri   r   r   r"   r"   ¶  sq   „ ð2¨ð 2ÀDð 2ÈTó 2ð>˜dð > tó >ð	'˜ð 	' $ó 	'ð1˜Tð 1 e¨D°#¨IÑ&6ó 1ð˜Tð  eô r   r"   )+r„   rG   rV   ÚsysÚ	threadingr   Útypingr   r   r   r   Ú_exceptionsr	   r
   Ú_utilsr   Úwsaccel.xormaskr   rT   r   ÚImportErrorÚ	byteorderr   Ú__all__r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r^   r!   r#   r"   ri   r   r   ú<module>rÚ      sL  ðÛ Û 	Û Û 
Ý ß 1Ó 1ç NÝ !ðð&Uõ
 0ð˜%Ÿ+™+ð °5·;±;ð À5ó ò"€ð, €ØÐ ØÐ Ø#Ð Ø"Ð ØÐ ØÐ ØÐ ØÐ ØÐ Ø"Ð ØÐ ØÐ ØÐ Ø!Ð ð ØØØ ØØØØØØØØðÐ ÷ DIñ DI÷N@%ñ @%÷F.ò .øð[ ò 
Uà—}‘}ÐðU˜%Ÿ+™+ð U°5·;±;ð UÀ5õ Uð	
Uús   ³$B& Â&/CÃC