ó
    ê7iny  ã            	       ó¼  • S SK Jr   S SKJr  S SKJrJrJ	r	  S SK
r
S SKJr  S SKrS SKrS SKJr  S SKrS SKrS SKrSr\R(                  S:X  a  \R*                  S	:  a   S SKr\R.                  " \5      rS=rrS=rrS=rr\\\S.r \!" \"" \ RG                  5       \ RI                  5       5      5      r%\R                   =r&r'S r( " S S\)5      r* " S S\*5      r+ " S S\*5      r, " S S\*5      r- " S S\*5      r. " S S\*5      r/ " S S\*5      r0SSS S!.r1S"S#S$S%S&S'S(S)S*.r2\S+\S+\S,0r3  S8S- jr4S. r5S/ r6\6r7S0 r8\8r9     S9S1 jr: " S2 S3\R                   5      r;S4 r<S5 HH  r\=" \;\S5      r>\?" \>\5      (       a  M  \;R€                  Rƒ                  \5        \B" \;\\<" \5      5        MJ      " S6 S7\;5      rCg! \ a
    S SKJr   GNºf = f! \ a	    \" S
5      ef = f):é    )Ú	b64encode)ÚCallable)Ú
EOPNOTSUPPÚEINVALÚEAGAINN)ÚBytesIO)ÚSEEK_CURz1.7.1Únt)é   r   z8To run PySocks on Windows you must install win_inet_ptoné   é   r   )ÚSOCKS4ÚSOCKS5ÚHTTPc                 óF   ^ • [         R                  " T 5      U 4S j5       nU$ )Nc                  óþ   >• U S   n UR                  5       nUS:X  a  UR                  S5        T" U 0 UD6US:X  a  UR                  S5        $ $ ! [         a  ne S nAff = f! WS:X  a  UR                  S5        f f = f)Nr   TF)Ú
gettimeoutÚsetblockingÚ	Exception)ÚargsÚkwargsÚselfÚ_is_blockingÚeÚfunctions        €ÚLib\site-packages\socks.pyÚwrapperÚ"set_self_blocking.<locals>.wrapper(   s�   ø€ à�A‰wˆð
	(ØŸ?™?Ó,ˆLØ˜qÓ Ø× Ñ  Ô&Ù˜TÐ, VÑ,ð
 ˜qÓ Ø× Ñ  Õ'ð !øô	 ó 	Øûð	ûð ˜qÓ Ø× Ñ  Õ'ð !ús#   ˆ.A Á
AÁAÁAÁA" Á"A<)Ú	functoolsÚwraps)r   r   s   ` r   Úset_self_blockingr!   &   s%   ø€ ä‡_‚_�XÓô(ó ð(ð €Nó    c                   ó(   • \ rS rSrSrSS jrS rSrg)Ú
ProxyErroré9   z4Socket_err contains original socket.error exception.Nc                 ót   • Xl         X l        U(       a%  U =R                   SR                  U5      -  sl         g g )Nz: {})ÚmsgÚ
socket_errÚformat)r   r'   r(   s      r   Ú__init__ÚProxyError.__init__;   s+   € ØŒØ$ŒæØ�HŠH˜Ÿ™ jÓ1Ñ1ŽHð r"   c                 ó   • U R                   $ ©N)r'   ©r   s    r   Ú__str__ÚProxyError.__str__B   s   € Ø�x‰xˆr"   )r'   r(   r-   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r*   r/   Ú__static_attributes__© r"   r   r$   r$   9   s   † Ù>ô2õr"   r$   c                   ó   • \ rS rSrSrg)ÚGeneralProxyErroréF   r7   N©r1   r2   r3   r4   r6   r7   r"   r   r9   r9   F   ó   † Úr"   r9   c                   ó   • \ rS rSrSrg)ÚProxyConnectionErroréJ   r7   Nr;   r7   r"   r   r>   r>   J   r<   r"   r>   c                   ó   • \ rS rSrSrg)ÚSOCKS5AuthErroréN   r7   Nr;   r7   r"   r   rA   rA   N   r<   r"   rA   c                   ó   • \ rS rSrSrg)ÚSOCKS5ErroréR   r7   Nr;   r7   r"   r   rD   rD   R   r<   r"   rD   c                   ó   • \ rS rSrSrg)ÚSOCKS4ErroréV   r7   Nr;   r7   r"   r   rG   rG   V   r<   r"   rG   c                   ó   • \ rS rSrSrg)Ú	HTTPErroréZ   r7   Nr;   r7   r"   r   rJ   rJ   Z   r<   r"   rJ   zRequest rejected or failedzLRequest rejected because SOCKS server cannot connect to identd on the clientzPRequest rejected because the client program and identd report different user-ids)é[   é\   é]   zGeneral SOCKS server failurez!Connection not allowed by rulesetzNetwork unreachablezHost unreachablezConnection refusedzTTL expiredz(Command not supported, or protocol errorzAddress type not supported)r   r   r   é   é   é   é   é   i8  i�  c                 ó~   • XX#U(       a  UR                  5       OSU(       a  UR                  5       OS4[        l        g)z“Sets a default proxy.

All further socksocket objects will use the default unless explicitly
changed. All parameters are as for socket.set_proxy().N)ÚencodeÚ
socksocketÚdefault_proxy)Ú
proxy_typeÚaddrÚportÚrdnsÚusernameÚpasswords         r   Úset_default_proxyr^   s   s0   € ð !+°$Þ5= §¡Ô 1À4Þ5= §¡Ô 1À4ð I„JÕr"   c                  óL   • SU;   a  UR                  S5      US'   [        U 0 UD6$ ©NÚ	proxytyperX   )Úpopr^   )r   r   s     r   Úsetdefaultproxyrc   ~   s-   € Ø�fÓØ%Ÿz™z¨+Ó6ˆˆ|ÑÜ˜dÐ- fÑ-Ð-r"   c                  ó"   • [         R                  $ )z4Returns the default proxy, set by set_default_proxy.)rV   rW   r7   r"   r   Úget_default_proxyre   „   s   € ä×#Ñ#Ð#r"   c                 ón   • [         R                  (       a  [         U R                  l        g[        S5      e)a  Attempts to replace a module's socket library with a SOCKS socket.

Must set a default proxy using set_default_proxy(...) first. This will
only work on modules that import socket directly into the namespace;
most of the Python Standard Library falls into this category.zNo default proxy specifiedN)rV   rW   Úsocketr9   )Úmodules    r   Úwrap_moduleri   ‹   s%   € ô ××Ü)ˆ�‰ÕäÐ <Ó=Ð=r"   c
           	      ó4  • U u  p«U
R                  S5      (       a  U
R                  S5      n
U(       a'  UR                  S5      (       a  UR                  S5      nSn[        R                  " XES[        R                  5       Hª  nUu  pïnnnSn [        XïU5      nU	(       a  U	 H  nUR                  " U6   M     [        U[        [        45      (       a  UR                  U5        U(       a  UR                  X4XVXx5        U(       a  UR                  U5        UR                  X«45        Us  $    U(       a  Ue[        R                  " S5      e! [        R                  [        4 a.  nUnU(       a  UR!                  5         Sn SnAGM	   SnAGM  SnAff = f)aÍ  create_connection(dest_pair, *[, timeout], **proxy_args) -> socket object

Like socket.create_connection(), but connects to proxy
before returning the socket object.

dest_pair - 2-tuple of (IP/hostname, port).
**proxy_args - Same args passed to socksocket.set_proxy() if present.
timeout - Optional socket timeout value, in seconds.
source_address - tuple (host, port) for the socket to bind to as its source
address before connecting (only for compatibility)
Ú[z[]Nr   zgai returned empty list.)Ú
startswithÚstriprg   ÚgetaddrinfoÚSOCK_STREAMrV   Ú
setsockoptÚ
isinstanceÚintÚfloatÚ
settimeoutÚ	set_proxyÚbindÚconnectÚerrorr$   Úclose)Ú	dest_pairÚtimeoutÚsource_addressrX   Ú
proxy_addrÚ
proxy_portÚ
proxy_rdnsÚproxy_usernameÚproxy_passwordÚsocket_optionsÚremote_hostÚremote_portÚerrÚrÚfamilyÚsocket_typeÚprotoÚ	canonnameÚsaÚsockÚoptr   s                         r   Úcreate_connectionrŽ   ™   s\  € ð$  )Ñ€KØ×Ñ˜c×"Ñ"Ø!×'Ñ'¨Ó-ˆÞ�j×+Ñ+¨C×0Ñ0Ø×%Ñ% dÓ+ˆ
à
€Cô ×Ò 
¸¼6×;MÑ;MÖNˆØ45Ñ1ˆ˜U I¨rØˆð	Ü˜f°5Ó9ˆDæÛ)�CØ—O’O SÓ)ñ *ô ˜'¤C¬ <×0Ñ0Ø—‘ Ô(æØ—‘˜z°zØ-ô?æØ—	‘	˜.Ô)à�L‰L˜+Ð3Ô4ØŠKñ) Oö8 Øˆ	ä
�,Š,Ð1Ó
2Ð2øô —‘œjÐ)ó 	ØˆCÞØ—
‘
”Ø—ö ûð	ús   ÂBEÅFÅ)FÆFc                   ó,   • \ rS rSrSrS r\" 5       rSrg)Ú_BaseSocketéÖ   zBAllows Python 2 delegated methods such as send() to be overridden.c                 óÂ   • [         R                  " U /UQ70 UD6  [        5       U l        U R                   H&  n[        X5      U R                  U'   [        X5        M(     g r-   )Ú_orig_socketr*   ÚdictÚ_savedmethodsÚ
_savenamesÚgetattrÚdelattr©r   ÚposÚkwÚnames       r   r*   Ú_BaseSocket.__init__Ø   sO   € Ü×Ò˜dÐ/ SÒ/¨BÒ/ä!›VˆÔØ—O”OˆDÜ'.¨tÓ':ˆD×Ñ˜tÑ$Ü�DÖò $r"   ©r•   N)	r1   r2   r3   r4   r5   r*   Úlistr–   r6   r7   r"   r   r�   r�   Ö   s   † ÙLò ñ “ƒJr"   r�   c                 ó   ^ • U 4S j$ )Nc                 ó.   >• U R                   T   " U0 UD6$ r-   rž   r™   s      €r   Ú<lambda>Ú_makemethod.<locals>.<lambda>ä   s   ø€  D×$6Ñ$6°tÒ$<¸cÐ$HÀRÒ$Hr"   r7   )rœ   s   `r   Ú_makemethodr¤   ã   s	   ø€ ÜHÐHr"   )ÚsendtoÚsendÚrecvfromÚrecvc                   óf  ^ • \ rS rSrSrSr\R                  \R                  S4U 4S jjr	S r
U 4S jrS rS	 r  SS
 jrS rU 4S jrU 4S jrS U 4S jjrS U 4S jjrS rU 4S jrS r\rS r\rS r\rS rU 4S jrS rS rS r S r!\"\ \#\\$\!0r%\&S!U 4S jj5       r'\&S 5       r(S r)Sr*U =r+$ )"rV   éñ   a  socksocket([family[, type[, proto]]]) -> socket object

Open a SOCKS enabled socket. The parameters are the same as
those of the standard socket init. In order for SOCKS to work,
you must specify family=AF_INET and proto=0.
The "type" argument must be either SOCK_STREAM or SOCK_DGRAM.
Nr   c                 óD  >• U[         R                  [         R                  4;  a  Sn[        UR	                  U5      5      e[
        [        U ]  " XU/UQ70 UD6  S U l        U R                  (       a  U R                  U l
        OSU l
        S U l        S U l        S U l        g )Nz0Socket type must be stream or datagram, not {!r})NNNNNN)rg   ro   Ú
SOCK_DGRAMÚ
ValueErrorr)   ÚsuperrV   r*   Ú
_proxyconnrW   ÚproxyÚproxy_socknameÚproxy_peernameÚ_timeout)r   r‡   Útyper‰   r   r   r'   Ú	__class__s          €r   r*   Úsocksocket.__init__ü   s‹   ø€ àœ×*Ñ*¬F×,=Ñ,=Ð>Ó>ØDˆCÜ˜SŸZ™Z¨Ó-Ó.Ð.äŒj˜$Ò(¨°uÐN¸tÒNÀvÒNØˆŒà××Ø×+Ñ+ˆD�Jà=ˆDŒJØ"ˆÔØ"ˆÔàˆ�r"   c                 ó°   • Sn[        U5      U:  aD  UR                  U[        U5      -
  5      nU(       d  [        S5      eX4-  n[        U5      U:  a  MD  U$ )z‚Receive EXACTLY the number of bytes requested from the file object.

Blocks until the required number of bytes have been received.r"   úConnection closed unexpectedly)ÚlenÚreadr9   )r   ÚfileÚcountÚdataÚds        r   Ú_readallÚsocksocket._readall  sW   € ð ˆÜ�$‹i˜%ÓØ—	‘	˜%¤# d£)Ñ+Ó,ˆAÞÜ'Ð(HÓIÐIØ‰IˆDô	 �$‹i˜%Õð
 ˆr"   c                 ó¢   >• Xl          U R                  5       n[        [        U ]  U R                   5        g ! [
        R                   a     g f = fr-   )r³   Úget_proxy_peernamer®   rV   rt   rg   rx   )r   r{   Úpeerrµ   s      €r   rt   Úsocksocket.settimeout  sD   ø€ ØŒð	à×*Ñ*Ó,ˆDÜ”*˜dÑ.¨t¯}©}Õ=øÜ�|‰|ó 	Ùð	ús   ‰-7 ·AÁAc                 ó   • U R                   $ r-   )r³   r.   s    r   r   Úsocksocket.gettimeout#  s   € Ø�}‰}Ðr"   c                 óX   • U(       a  U R                  S 5        g U R                  S5        g )Ng        )rt   )r   Úvs     r   r   Úsocksocket.setblocking&  s   € ÞØ�O‰O˜DÕ!à�O‰O˜CÕ r"   c                 óv   • XX4U(       a  UR                  5       OSU(       a  UR                  5       OS4U l        g)a&  Sets the proxy to be used.

proxy_type -  The type of the proxy to be used. Three types
                are supported: PROXY_TYPE_SOCKS4 (including socks4a),
                PROXY_TYPE_SOCKS5 and PROXY_TYPE_HTTP
addr -        The address of the server (IP or DNS).
port -        The port of the server. Defaults to 1080 for SOCKS
                servers and 8080 for HTTP proxy servers.
rdns -        Should DNS queries be performed on the remote side
               (rather than the local side). The default is True.
               Note: This has no effect with SOCKS4 servers.
username -    Username to authenticate with to the server.
               The default is no authentication.
password -    Password to authenticate with to the server.
               Only relevant when username is also provided.N)rU   r°   )r   rX   rY   rZ   r[   r\   r]   s          r   ru   Úsocksocket.set_proxy,  s.   € ð" !¨Þ+3�h—o‘oÔ'¸Þ+3�h—o‘oÔ'¸ð?ˆ�
r"   c                 óZ   • SU;   a  UR                  S5      US'   U R                  " U0 UD6$ r`   )rb   ru   )r   r   r   s      r   ÚsetproxyÚsocksocket.setproxyA  s1   € Ø˜&Ó Ø#)§:¡:¨kÓ#:ˆF�<Ñ Ø�~Š~˜tÐ. vÑ.Ð.r"   c                 óØ  >• U R                   u  p4pVnnU(       a  U R                  [        R                  :w  a  [        R
                  " U /UQ70 UD6$ U R                  (       a  [        R                  " [        S5      eU[        :w  a  Sn	[        R                  " [        U	5      e[        [        U ]  " U0 UD6  U R                  5       u  p«SU4n[	        5       U l        U R                  5       nU R                  R                  U5        SnU R!                  U R                  Xì5      u  p¯Uu  nn
Uu  p«[        [        U ]?  UU45        [        [        U ]G  U R$                  5        SU l        g)zNImplements proxy connection for UDP sockets.

Happens during the bind() phase.z"Socket already bound to an addressz'UDP only supported by SOCKS5 proxy typeÚ0ó   )ú0.0.0.0r   N)r°   r´   rg   r¬   r“   rv   r¯   rx   r   r   r   r®   rV   ÚgetsocknameÚ_proxy_addrrw   Ú_SOCKS5_requestrt   r³   r±   )r   rš   r›   rX   r}   r~   r[   r\   r]   r'   Ú_rZ   Údstr°   ÚUDP_ASSOCIATEÚrelayÚhostrµ   s                    €r   rv   Úsocksocket.bindF  s5  ø€ ð
 —Z‘Zñ	ˆ °8Ø	Þ˜TŸY™Y¬&×*;Ñ*;Ó;Ü×$Ò$ TÐ6¨CÒ6°2Ñ6Ð6à�?�?Ü—,’,œvÐ'KÓLÐLØœÓØ;ˆCÜ—,’,œz¨3Ó/Ð/ÜŒj˜$Ò$ cÐ0¨RÒ0ð
 ×"Ñ"Ó$‰ˆØ�Dˆkˆä&›.ˆŒØ× Ñ Ó"ˆØ�‰×Ñ Ô&àˆØ×'Ñ'¨¯©¸ÓL‰ˆð ‰ˆˆaØ‰ˆÜŒj˜$Ñ'¨¨t¨Ô5ÜŒj˜$Ñ*¨4¯=©=Ô9Ø,ˆÕr"   c                 óÀ  >• U R                   [        R                  :w  a  [        [        U ]  " U/UQ70 UD6$ U R                  (       d  U R                  S5        US   nUS S n[        5       nSnUR                  U5        SnUR                  U5        U R                  XF5        [        [        U ].  " UR                  5       U-   /UQ70 UD6n	X–R                  5       -
  $ )N©Ú r   éÿÿÿÿs     ó    )r´   rg   r¬   r®   rV   r¥   r¯   rv   r   ÚwriteÚ_write_SOCKS5_addressr¦   ÚgetvalueÚtell)r   Úbytesr   r   ÚaddressÚflagsÚheaderÚRSVÚ
STANDALONEÚsentrµ   s             €r   r¥   Úsocksocket.sendtok  sÌ   ø€ Ø�9‰9œ×)Ñ)Ó)Üœ TÒ1°%ÐI¸$ÒIÀ&ÑIÐIØ��Ø�I‰I�gÔà�r‘(ˆØ�S�b�	ˆä“ˆØˆØ�‰�SÔØˆ
Ø�‰�ZÔ Ø×"Ñ" 7Ô3ä”Z Ò+¨F¯O©OÓ,=ÀÑ,Eð 6Èò 6Ø.4ñ6ˆà—k‘k“mÑ#Ð#r"   c                 ó¦   >• U R                   [        R                  :X  a  U R                  " XU R                  40 UD6$ [
        [        U ]  " X40 UD6$ r-   )r´   rg   r¬   r¥   r²   r®   rV   r¦   )r   rå   rç   r   rµ   s       €r   r¦   Úsocksocket.send  sH   ø€ Ø�9‰9œ×)Ñ)Ó)Ø—;’;˜u¨T×-@Ñ-@ÑKÀFÑKÐKäœ TÒ/°ÑGÀÑGÐGr"   c                 óJ  >• U R                   [        R                  :w  a  [        [        U ]  X5      $ U R                  (       d  U R                  S5        [        [        [        U ]'  US-   U5      5      nUR                  S[        5        UR                  S5      n[        U5      (       a  [        S5      eU R                  U5      u  pVU R                   (       a6  U R                   u  pxXW:w  d  USU4;  a  [        R"                  " [$        S5      eUR                  U5      XV44$ )NrÝ   i   r   r   zReceived UDP packet fragmentr   zPacket filtered)r´   rg   r¬   r®   rV   r§   r¯   rv   r   r¨   Úseekr	   rº   ÚordÚNotImplementedErrorÚ_read_SOCKS5_addressr²   rx   r   )
r   Úbufsizerç   ÚbufÚfragÚfromhostÚfromportÚpeerhostÚpeerportrµ   s
            €r   r§   Úsocksocket.recvfrom…  sê   ø€ Ø�9‰9œ×)Ñ)Ó)Üœ TÑ3°GÓCÐCØ��Ø�I‰I�gÔä”eœJ¨Ñ2°7¸T±>À5ÓIÓJˆØ�‰�”HÔØ�x‰x˜‹{ˆÜˆt�9‰9Ü%Ð&DÓEÐEØ!×6Ñ6°sÓ;Ñˆà××Ø!%×!4Ñ!4ÑˆHØÓ# x¸¸8°}Ó'DÜ—l’l¤6Ð+<Ó=Ð=à—‘˜Ó! HÐ#7Ð8Ð8r"   c                 ó.   • U R                   " U0 UD6u  p4U$ r-   )r§   )r   rš   r›   rå   rÖ   s        r   r¨   Úsocksocket.recv™  s   € Ø—=’= #Ð,¨Ñ,‰ˆØˆr"   c                 ó~   >• U R                   (       a  U R                   R                  5         [        [        U ]  5       $ r-   )r¯   ry   r®   rV   )r   rµ   s    €r   ry   Úsocksocket.close�  s*   ø€ Ø�?�?Ø�O‰O×!Ñ!Ô#Ü”Z Ñ,Ó.Ð.r"   c                 ó   • U R                   $ )z:Returns the bound IP address and port number at the proxy.)r±   r.   s    r   Úget_proxy_socknameÚsocksocket.get_proxy_sockname¢  s   € à×"Ñ"Ð"r"   c                 ó"   • U R                  5       $ )z.
Returns the IP and port number of the proxy.
)Úgetpeernamer.   s    r   rÂ   Úsocksocket.get_proxy_peername¨  s   € ð ×ÑÓ!Ð!r"   c                 ó   • U R                   $ )zoReturns the IP address and port number of the destination machine.

Note: get_proxy_peername returns the proxy.)r²   r.   s    r   Úget_peernameÚsocksocket.get_peername°  s   € ð ×"Ñ"Ð"r"   c                 óF   • SnU R                  XU5      u  U l        U l        g)z7Negotiates a stream connection through a SOCKS5 server.ó   N)rÕ   r²   r±   )r   Ú	dest_addrÚCONNECTs      r   Ú_negotiate_SOCKS5Úsocksocket._negotiate_SOCKS5¸  s'   € àˆØ37×3GÑ3GØ˜9ó4&Ñ0ˆÔ˜TÕ0r"   c                 óR  >• U R                   u  pEpgp‰UR                  S5      n
UR                  SS5      n U(       a  U	(       a  U
R                  S5        OU
R                  S5        U
R                  5         U R	                  US5      nUSS S:w  a  [        S	5      eUSS S
:X  aÁ  U(       a  U	(       d  [        S5      eU
R                  S[        [        U5      5      R                  5       -   U-   [        [        U	5      5      R                  5       -   U	-   5        U
R                  5         U R	                  US5      nUSS S:w  a  [        S	5      eUSS S:w  a  [        S5      eO(USS S:w  a  USS S:X  a  [        S5      e[        S	5      eU
R                  SU-   S-   5        U R                  X:5      nU
R                  5         U R	                  US5      nUSS S:w  a  [        S	5      e[        USS 5      nUS:w  a1  [        R                  US5      n[        SR                  UU5      5      eU R!                  U5      n["        [$        U ]O  U R(                  5        UU4UR+                  5         U
R+                  5         $ ! UR+                  5         U
R+                  5         f = f)zy
Send SOCKS5 request with given command (CMD field) and
address (DST field). Returns resolved DST address that was used.
ÚwbÚrbr   s    s    r   r   ó   ú%SOCKS5 proxy server sent invalid dataó   zPNo username/password supplied. Server requested username/password authenticationr
  rà   zSOCKS5 authentication failedó   ÿz7All offered SOCKS5 authentication methods were rejectedr   úUnknown errorú{:#04x}: {})r°   Úmakefilerá   Úflushr¿   r9   rA   Úchrr¹   rU   râ   rñ   ÚSOCKS5_ERRORSÚgetrD   r)   ró   r®   rV   rt   r³   ry   )r   ÚconnÚcmdr×   rX   rY   rZ   r[   r\   r]   ÚwriterÚreaderÚchosen_authÚauth_statusÚresolvedÚrespÚstatusrx   Úbndrµ   s                      €r   rÕ   Úsocksocket._SOCKS5_request¾  s¯  ø€ ð
 <@¿:¹:Ñ8ˆ
˜$ hà—‘˜tÓ$ˆØ—‘˜t QÓ'ˆðW	æžHð —‘Ð0Õ1ð —‘˜_Ô-ð �L‰LŒNØŸ-™-¨°Ó2ˆKà˜1˜QÐ 7Ó*ô (Ø;ó=ð =ð
 ˜1˜QÐ 7Ó*ö !¦Xô *ð +<ó =ð =ð —‘˜W¤s¬3¨x«=Ó'9×'@Ñ'@Ó'BÑBØ'ñ(ä"¤3 x£=Ó1×8Ñ8Ó:ñ;ð  (ñ(ô )ð —‘”Ø"Ÿm™m¨F°AÓ6�Ø˜q Ð# wÓ.ä+Ø?óAð Aà˜q Ð# wÓ.ä)Ð*HÓIÐIð /ð ˜Q˜qÐ! WÓ,à˜q Ð# wÓ.Ü)ð$ó%ð %ô ,Ø?óAð Að �L‰L˜ 3™¨Ñ0Ô1Ø×1Ñ1°#Ó>ˆHØ�L‰LŒNð —=‘= ¨Ó+ˆDØ�A�aˆy˜GÓ#Ü'Ø;ó=ð =ô ˜˜a ˜“^ˆFØ˜‹~ä%×)Ñ)¨&°/ÓB�Ü! -×"6Ñ"6°v¸uÓ"EÓFÐFð ×+Ñ+¨FÓ3ˆCä”*˜dÑ.¨t¯}©}Ô=Ø˜c�?à�L‰LŒNØ�L‰L�Nøð �L‰LŒNØ�L‰L�Nús   ¶H-J Ê"J&c                 ó  • Uu  p4U R                   u  n  pgp‰[        R                  S[        R                  S0n
[        R                  [        R                  4 Ho  n [        R                  " X³5      nUR                  X«   U-   5        [        R                  " X¼5      nUR                  [        R                  " SU5      5        X44s  $    U(       aI  UR                  S5      nUR                  S[        [        U5      5      R                  5       -   U-   5        O¦[        R                  " X4[        R                  [        R                  [        R                   [        R"                  5      nUS   nUS   nUS   S   n[        R                  " X³5      nUR                  X«   U-   5        [        R                  " X¼5      nUR                  [        R                  " SU5      5        X44$ ! [        R                   a     GMª  f = f)zf
Return the host and port packed for the SOCKS5 protocol,
and the resolved address as a tuple object.
r
  ó   ú>HÚidnarÑ   r   rO   )r°   rg   ÚAF_INETÚAF_INET6Ú	inet_ptonrá   Ú	inet_ntopÚstructÚpackrx   rU   r  r¹   rn   Ú	AF_UNSPECro   ÚIPPROTO_TCPÚAI_ADDRCONFIG)r   rY   r»   rÚ   rZ   rX   rÖ   r[   r\   r]   Úfamily_to_byter‡   Ú
addr_bytesÚ
host_bytesÚ	addressesÚtarget_addrs                   r   râ   Ú socksocket._write_SOCKS5_address   s¤  € ð
 ‰
ˆØ59·Z±ZÑ2ˆ
�A�q Ü Ÿ.™.¨'´6·?±?ÀGÐLˆô
 —~‘~¤v§¡Ó7ˆFðÜ#×-Ò-¨fÓ;�
Ø—
‘
˜>Ñ1°JÑ>Ô?Ü×'Ò'¨Ó;�Ø—
‘
œ6Ÿ;š; t¨TÓ2Ô3Ø�zÒ!ñ 8ö àŸ™ VÓ,ˆJØ�J‰J�w¤¤S¨£_Ó!5×!<Ñ!<Ó!>Ñ>ÀÑKÕLô ×*Ò*¨4´v×7GÑ7GÜ+1×+=Ñ+=Ü+1×+=Ñ+=Ü+1×+?Ñ+?óAˆIð $ A™,ˆKØ  ‘^ˆFØ˜q‘> !Ñ$ˆDä×)Ò)¨&Ó7ˆJØ�J‰J�~Ñ-°
Ñ:Ô;Ü×#Ò# FÓ7ˆDØ�
‰
”6—;’;˜t TÓ*Ô+ØˆzÐøô1 —<‘<ó Ûðús   ÁA*G*Ç*HÈHc                 óÐ  • U R                  US5      nUS:X  a'  [        R                  " U R                  US5      5      nO{US:X  a.  U R                  US5      nU R                  U[        U5      5      nOGUS:X  a6  [        R                  " [        R
                  U R                  US5      5      nO[        S5      e[        R                  " SU R                  US	5      5      S
   nX54$ )Nr   r
  rO   rÑ   r)  é   r  r*  r   r   )	r¿   rg   Ú	inet_ntoarñ   r/  r-  r9   r0  Úunpack)r   r»   ÚatyprY   ÚlengthrZ   s         r   ró   Úsocksocket._read_SOCKS5_addressM  s»   € Ø�}‰}˜T 1Ó%ˆØ�7‹?Ü×#Ò# D§M¡M°$¸Ó$:Ó;‰DØ�W‹_Ø—]‘] 4¨Ó+ˆFØ—=‘= ¤s¨6£{Ó3‰DØ�W‹_Ü×#Ò#¤F§O¡O°T·]±]À4ÈÓ5LÓM‰Dä#Ð$KÓLÐLä�}Š}˜T 4§=¡=°°qÓ#9Ó:¸1Ñ=ˆØˆzÐr"   c                 óª  • U R                   u  p4pVpxU R                  S5      n	U R                  SS5      n
 Sn [        R                  " U5      nU	R                  [        R                  " SSS	U5      5        U	R                  U5        U(       a  U	R                  U5        U	R                  S
5        U(       a#  U	R                  UR                  S5      S
-   5        U	R                  5         U R                  U
S5      nUSS	 S
:w  a  [        S5      e[        US	S 5      nUS:w  a0  [        R                  US5      n[!        SR#                  Xï5      5      e[        R$                  " USS 5      [        R&                  " SUSS 5      S   4U l        U(       a  [        R$                  " U5      U4U l        OX4U l        U
R-                  5         U	R-                  5         g! [        R                   a<    U(       a  SnSn GN±[        R                  " [        R
                  " U5      5      n GNÞf = f! U
R-                  5         U	R-                  5         f = f)z0Negotiates a connection through a SOCKS4 server.r  r  r   Fs      Tz>BBHrO   r   rà   r+  rS   z%SOCKS4 proxy server sent invalid datar   rK   r  r  Nr*  )r°   r  rg   Ú	inet_atonrx   Úgethostbynamerá   r0  r1  rU   r  r¿   r9   rñ   ÚSOCKS4_ERRORSr  rG   r)   r=  r>  r±   r²   ry   )r   r  Ú	dest_portrX   rY   rZ   r[   r\   r]   r  r   Úremote_resolver6  r$  r%  rx   s                   r   Ú_negotiate_SOCKS4Úsocksocket._negotiate_SOCKS4\  sø  € à;?¿:¹:Ñ8ˆ
˜$ hà—‘˜tÓ$ˆØ—‘˜t QÓ'ˆð4	à"ˆNð	9Ü#×-Ò-¨iÓ8�
ð �L‰LœŸš V¨T°4¸ÓCÔDØ�L‰L˜Ô$ö Ø—‘˜XÔ&Ø�L‰L˜Ô!ö
 Ø—‘˜Y×-Ñ-¨fÓ5¸Ñ?Ô@Ø�L‰LŒNð —=‘= ¨Ó+ˆDØ�A�aˆy˜GÓ#ä'Ø;ó=ð =ô ˜˜a ˜“^ˆFØ˜‹~ä%×)Ñ)¨&°/ÓB�Ü! -×"6Ñ"6°vÓ"EÓFÐFô $*×#3Ò#3°D¸¸°HÓ#=Ü#)§=¢=°°t¸A¸a°yÓ#AÀ!Ñ#Dð#FˆDÔæÜ&,×&6Ò&6°zÓ&BÀIÐ&M�Õ#à&/Ð&:�Ô#à�L‰LŒNØ�L‰L�Nøô_ —<‘<ó 9æØ!4�JØ%)“Nä!'×!1Ò!1Ü×,Ò,¨YÓ7ó"9“Jð9ûð\ �L‰LŒNØ�L‰L�Nús;   µH0 ¸G ÁE.H0 ÇH-Ç<H0 Ç?*H-È)H0 È,H-È-H0 È0"Ic                 óœ  • U R                   u  p4pVpxU(       a  UO[        R                  " U5      nSUR                  S5      -   S-   [	        U5      R                  5       -   S-   SUR                  S5      -   /n	U(       a*  U(       a#  U	R                  S[        US-   U-   5      -   5        U	R                  S5        U R                  SR                  U	5      5        U R                  5       n
U
R                  5       nU
R                  5         U(       d  [        S5      e UR                  S	S
5      u  pÍnUR                  S5      (       d  [        S5      e [!        U5      nUS:w  a'  SR%                  XÞ5      nUS;   a  US-  n[#        U5      eSU l        XB4U l        g! [         a    [        S5      ef = f! [         a    [#        S5      ef = f)zoNegotiates a connection through an HTTP server.

NOTE: This currently only supports HTTP CONNECT-style proxies.s   CONNECT r+  ó   :s	    HTTP/1.1s   Host: s   Proxy-Authorization: basic s   
r¸   Ú r   z'HTTP proxy server sent invalid responsezHTTP/z0Proxy server does not appear to be an HTTP proxyz4HTTP proxy server did not return a valid HTTP statuséÈ   z{}: {})i�  i“  i•  za
[*] Note: The HTTP proxy server may not be supported by PySocks (must be a CONNECT tunnel proxy))s   0.0.0.0r   N)r°   rg   rD  rU   ÚstrÚappendr   ÚsendallÚjoinr  Úreadlinery   r9   Úsplitr­   rl   rr   rJ   r)   r±   r²   )r   r  rF  rX   rY   rZ   r[   r\   r]   Úhttp_headersÚfobjÚstatus_liner‰   Ústatus_codeÚ
status_msgrx   s                   r   Ú_negotiate_HTTPÚsocksocket._negotiate_HTTP˜  sä  € ð <@¿:¹:Ñ8ˆ
˜$ hö !‰y¤f×&:Ò&:¸9Ó&Eˆð ˜4Ÿ;™; vÓ.Ñ.°Ñ5Ü�9‹~×$Ñ$Ó&ñ'Ø)5ñ6à˜	×(Ñ(¨Ó0Ñ0ð
ˆö žØ×ÑÐ >Ü"+¨H°t©O¸hÑ,FÓ"Gñ!Hô Ið 	×Ñ˜GÔ$à�‰�W—\‘\ ,Ó/Ô0ð �}‰}‹ˆØ—m‘m“oˆØ�
‰
ŒæÜ#Ð$DÓEÐEð	OØ-8×->Ñ->¸sÀAÓ-FÑ*ˆE 
ð ×Ñ ×(Ñ(Ü#ØBóDð Dð	HÜ˜kÓ*ˆKð
 ˜#ÓØ—O‘O KÓ<ˆEØ˜oÓ-ð ð $ñ %�ô ˜EÓ"Ð"à-ˆÔØ"˜oˆÕøô1 ó 	OÜ#Ð$MÓNÐNð	Oûô ó 	HÜØFóHð Hð	Hús   ÄF ÅF5 ÆF2Æ5Gc                 ó:  >• [        U5      S:w  d  US   R                  S5      (       a"  [        R                  " S[	        U5      -  5      eUu  p4U R
                  [        R                  :X  aV  U R                  (       d  U R                  S5        [        R                  " U5      nUS:X  a  U(       d  SU l
        gX44U l
        gU R                  u  pVpxn	n
[        U[        [        45      (       a+  [        U5      S:w  d  U(       a  [        U[        5      (       d  [!        S5      e["        [$        U ]O  U R(                  5        Uc8  Xl
        ["        [$        U ]O  U R(                  5        ["        [$        U ]W  X445        gU R-                  5       n ["        [$        U ]W  U5         U R.                  U   nU" XU5        g! [        R                   a*  nU(       d  U R1                  5         [!        S	U5      eUeSnAf[2         a    U R1                  5         e f = f! [        R                   ao  nU R1                  5         U(       dQ  Uu  pgS
R5                  Xg5      n[6        U   nSR5                  UU5      n[8        R;                  SXü5        [=        Xü5      eUeSnAff = f)z»
Connects to the specified destination through a proxy.
Uses the same API as socket's connect().
To select the proxy server, use set_proxy().

dest_pair - 2-tuple of (IP/hostname, port).
r   r   rk   z PySocks doesn't support IPv6: %srÝ   rÒ   Nz0Invalid destination-connection (host, port) pairzSocket errorz{}:{}zError connecting to {} proxy {}z%s due to: %s)r¹   rl   rg   rx   rN  r´   r¬   r¯   rv   rD  r²   r°   rq   rŸ   Útuplerr   r9   r®   rV   rt   r³   rw   rÔ   Ú_proxy_negotiatorsry   r$   r)   ÚPRINTABLE_PROXY_TYPESÚlogÚdebugr>   )r   rz   Úcatch_errorsr  rF  rX   r}   r~   r[   r\   r]   Ú	negotiaterx   Úproxy_serverÚprintable_typer'   rµ   s                   €r   rw   Úsocksocket.connectÙ  sL  ø€ ô ˆy‹>˜QÓ )¨A¡,×"9Ñ"9¸#×">Ñ">ô —,’,ÐAÜ!$ Y£ñ 0ó 1ð 1ð  )Ñˆ	à�9‰9œ×)Ñ)Ó)Ø—?—?Ø—	‘	˜'Ô"Ü×,Ò,¨YÓ7ˆIð ˜IÓ%®iØ&*�Ô#ð ð (1Ð&<�Ô#Øð —Z‘Zñ	ˆ °8Ø	ô ˜9¤t¬U m×4Ñ4Ü�y“> QÓ&Þ Ü! )¬S×1Ñ1ä#ØBóDð Dô
 	Œj˜$Ñ*¨4¯=©=Ô9àÑà"+ÔÜ”*˜dÑ.¨t¯}©}Ô=Ü”*˜dÑ+¨YÐ,BÔCØà×%Ñ%Ó'ˆ
ð#	ä”*˜dÑ+¨JÔ7ð&à ×3Ñ3°JÑ?�	Ù˜$¨9Õ5øÜ—<‘<ó  Þ#à—J‘J”LÜ+¨N¸EÓBÐBà�KûÜó à—
‘
”Øðûô9 �|‰|ó 	à�J‰JŒLÞØ)3Ñ&�
Ø&Ÿ~™~¨jÓE�Ü!6°zÑ!B�à7×>Ñ>¸~ØDPóR�ä—	‘	˜/¨3Ô6Ü*¨3Ó6Ð6à�ûð	ús1   ÆH Æ#F< Æ<HÇ%G5Ç5HÈJÈ+A*JÊJc                 ó�   •  U R                  USS9  g! [         a(  nUR                  (       a  UR                  s SnA$ e SnAff = f)a  https://docs.python.org/3/library/socket.html#socket.socket.connect_ex
Like connect(address), but return an error indicator instead of raising an exception for errors returned by the C-level connect() call (other problems, such as "host not found" can still raise exceptions).
T)ra  r   N)rw   ÚOSErrorÚerrno)r   rz   r   s      r   Ú
connect_exÚsocksocket.connect_ex6  s?   € ð
		Ø�L‰L˜°ˆLÑ6ØøÜó 	ð �w�wØ—w‘w•àûð	ús   ‚ “
A�A ¹A¿A Á Ac                 óŠ   • U R                   u  pp4nnU=(       d    [        R                  U5      nU(       d  [        S5      eX#4$ )z4
Return proxy address to connect to as tuple object
zInvalid proxy type)r°   ÚDEFAULT_PORTSr  r9   )r   rX   r}   r~   r[   r\   r]   s          r   rÔ   Úsocksocket._proxy_addrF  sF   € ð
 —Z‘Zñ	ˆ °8Ø	Ø×@¤=×#4Ñ#4°ZÓ#@ˆ
ÞÜ#Ð$8Ó9Ð9ØÐ%Ð%r"   )r¯   r³   r°   r²   r±   ©NNNTNN)r   r-   ),r1   r2   r3   r4   r5   rW   rg   r,  ro   r*   r¿   rt   r   r   ru   rÍ   rv   r¥   r¦   r§   r¨   ry   r  ÚgetproxysocknamerÂ   Úgetproxypeernamer  r  r  rÕ   râ   ró   rH  rY  r   r   r   r]  r!   rw   ri  rÔ   r6   Ú__classcell__)rµ   s   @r   rV   rV   ñ   s  ø† ñð €Mà$Ÿn™n°6×3EÑ3EØ÷ò$
õòò!ð EIØ*.ô?ò*/õ
#-õJ$÷(H÷9ò(õ/ò
#ð *Ðò"ð *Ðò#ð €Kò&õ`òD+òZò:òx9.ðx "Ð#4Ø!Ð#4Ø ðÐð öZó ðZðx ñó ð÷	&ð 	&r"   rV   rn  )	NNNNNTNNN)DÚbase64r   Úcollections.abcr   ÚImportErrorÚcollectionsrh  r   r   r   r   Úior   ÚloggingÚosr	   rg   r0  ÚsysÚ__version__rœ   Úversion_infoÚwin_inet_ptonÚ	getLoggerr1   r_  ÚPROXY_TYPE_SOCKS4r   ÚPROXY_TYPE_SOCKS5r   ÚPROXY_TYPE_HTTPr   ÚPROXY_TYPESr”   ÚzipÚvaluesÚkeysr^  Ú
_orgsocketr“   r!   ÚIOErrorr$   r9   r>   rA   rD   rG   rJ   rE  r  rl  r^   rc   re   Úgetdefaultproxyri   Ú
wrapmodulerŽ   r�   r¤   r—   Úmethodrq   r–   rO  ÚsetattrrV   r7   r"   r   Ú<module>r‹     s\  ðÝ ð%Ý(÷ -Ñ ,Û Ý Û Û 	Ý Û Û Û 
à€ð ‡7�7ˆdƒ?�s×'Ñ'¨&Ó0ðHÛð
 ×Ò˜Ó!€àÐ Ð �FØÐ Ð �FØÐ €�$à¨6¸4Ñ@€Ù™S ×!3Ñ!3Ó!5°{×7GÑ7GÓ7IÓJÓKÐ à"ŸM™MÐ )€
ˆ\òô&
�ô 
ô	˜
ô 	ô	˜:ô 	ô	�jô 	ô	�*ô 	ô	�*ô 	ô	�
ô 	ð 'ðð!ñ	€ð )Ø
-Ø
Ø
Ø
Ø
Ø
4Ø
&ñ	€ð ˜˜v t¨T°4Ð8€ð CGØ.2ôIò.ò$ð $€ò	>ð €
ð 48Ø26Ø26Ø:>Ø%)ô:3ôz
�&—-‘-ô 
òIã2€DÙ�[ $¨Ó-€Fñ �f˜h×'Ó'Ø×Ñ×%Ñ% dÔ+Ù�˜T¡;¨tÓ#4Ö5ñ 3ô^	&�õ ^	&øð[ ó %ß$Ð$ð%ûð$ ó HÙØFóHð 	HðHús   ˆF9 ÁG Æ9G	ÇG	ÇG