
     fny              	          d dl mZ 	 d dlmZ n# e$ r	 d dlmZ Y nw xY wd dlmZmZm	Z	 d dl
Z
d dlmZ d dlZd dlZd dlmZ d dlZd dlZd dlZdZej        dk    r%ej        d	k     r	 d dlZn# e$ r  ed
          w xY w ej        e          ZdxZZdxZZdxZZeeedZ  e! e"e #                                e $                                                    Z%ej        xZ&Z'd Z( G d de)          Z* G d de*          Z+ G d de*          Z, G d de*          Z- G d de*          Z. G d de*          Z/ G d de*          Z0ddd d!Z1d"d#d$d%d&d'd(d)d*Z2ed+ed+ed,iZ3	 	 d9d.Z4d/ Z5d0 Z6e6Z7d1 Z8e8Z9	 	 	 	 	 d:d2Z: G d3 d4ej                  Z;d5 Z<d6D ]KZ e=e;ed          Z> e?e>e          s0e;j@        A                    e            eBe;e e<e                     L G d7 d8e;          ZCdS );    )	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     t          j                    fd            }|S )Nc                  $   | d         }	 |                                 }|dk    r|                    d            | i ||dk    r|                    d           S S # t          $ r} d }~ww xY w# |dk    r|                    d           w w xY w)Nr   TF)
gettimeoutsetblocking	Exception)argskwargsself_is_blockingefunctions        H/var/www/api.educacionweb.es/myenv/lib/python3.11/site-packages/socks.pywrapperz"set_self_blocking.<locals>.wrapper(   s    Aw
	(??,,Lq    &&&8T,V,,
 q    '''' !	  	 	 		 q    '''' !s#   6A 
A.(A))A..A1 1B)	functoolswraps)r   r   s   ` r   set_self_blockingr    &   s8    _X( ( ( ( ( N    c                        e Zd ZdZddZd ZdS )
ProxyErrorz4Socket_err contains original socket.error exception.Nc                 p    || _         || _        |r%| xj         d                    |          z  c_         d S d S )Nz: {})msg
socket_errformat)r   r%   r&   s      r   __init__zProxyError.__init__;   sB    $ 	2HHj111HHHH	2 	2r!   c                     | j         S N)r%   r   s    r   __str__zProxyError.__str__B   s	    xr!   r*   )__name__
__module____qualname____doc__r(   r,    r!   r   r#   r#   9   s=        >>2 2 2 2    r!   r#   c                       e Zd ZdS )GeneralProxyErrorNr-   r.   r/   r1   r!   r   r3   r3   F           Dr!   r3   c                       e Zd ZdS )ProxyConnectionErrorNr4   r1   r!   r   r7   r7   J   r5   r!   r7   c                       e Zd ZdS )SOCKS5AuthErrorNr4   r1   r!   r   r9   r9   N   r5   r!   r9   c                       e Zd ZdS )SOCKS5ErrorNr4   r1   r!   r   r;   r;   R   r5   r!   r;   c                       e Zd ZdS )SOCKS4ErrorNr4   r1   r!   r   r=   r=   V   r5   r!   r=   c                       e Zd ZdS )	HTTPErrorNr4   r1   r!   r   r?   r?   Z   r5   r!   r?   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  Tc                     | ||||r|                                 nd|r|                                 ndft          _        dS )zSets 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_proxyrR   s   sL     !+D$5= G 1 1 145= G 1 1 14 IJr!   c                  R    d|v r|                     d          |d<   t          | i |S N	proxytyperL   )poprR   )r   r   s     r   setdefaultproxyrW   ~   s6    f%zz+66|d-f---r!   c                      t           j        S )z4Returns the default proxy, set by set_default_proxy.)rJ   rK   r1   r!   r   get_default_proxyrY      s    ##r!   c                 ^    t           j        rt           | j        _        dS t          d          )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)rJ   rK   socketr3   )modules    r   wrap_moduler]      s.      >) <===r!   c
           	         | \  }
}|
                     d          r|
                    d          }
|r*|                     d          r|                    d          }d}t          j        ||dt          j                  D ]}|\  }}}}}d}	 t          |||          }|	r|	D ]} |j        |  t          |t          t          f          r|
                    |           |r|                    ||||||           |r|                    |           |                    |
|f           |c S # t          j        t          f$ r$}|}|r|                                 d}Y d}~d}~ww xY w|r|t          j        d          )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stripr[   getaddrinfoSOCK_STREAMrJ   
setsockopt
isinstanceintfloat
settimeout	set_proxybindconnecterrorr#   close)	dest_pairtimeoutsource_addressrL   
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 
J6;MNN  451UIr	fk599D *) * *C#DOS)))'C<00 )((( ?z:z:-~? ? ? *		.)))LL+{3444KKKj) 	 	 	C 

		  	
,1
2
22s   BD--E'E""E'c                   ,    e Zd ZdZd Z e            ZdS )_BaseSocketzBAllows Python 2 delegated methods such as send() to be overridden.c                     t          j        | g|R i | t                      | _        | j        D ]*}t          | |          | j        |<   t          | |           +d S r*   )_orig_socketr(   dict_savedmethods
_savenamesgetattrdelattrr   poskwnames       r   r(   z_BaseSocket.__init__   st    d/S///B///!VVO 	  	 D'.tT':':Dt$D$	  	 r!   N)r-   r.   r/   r0   r(   listr   r1   r!   r   r   r      s0        LL      JJJr!   r   c                       fdS )Nc                 *     | j                  |i |S r*   )r   r   s      r   <lambda>z_makemethod.<locals>.<lambda>   s    $<D$6t$<c$HR$H$H r!   r1   )r   s   `r   _makemethodr      s    HHHHHr!   )sendtosendrecvfromrecvc                   :    e Zd ZdZdZej        ej        df fd	Zd Z	 fdZ
d Zd Z	 	 dd
Zd Z fdZ fdZd fd	Zd fd	Zd Z fdZd ZeZd ZeZd ZeZd Z fdZd Zd Zd Zd Z e!ee"ee#e iZ$e%d  fd	            Z&e%d             Z'd Z( xZ)S )!rJ   a2  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                 >   |t           j        t           j        fvr$d}t          |                    |                     t          t          |           j        |||g|R i | d | _        | j	        r| j	        | _
        nd| _
        d | _        d | _        d | _        d S )Nz0Socket type must be stream or datagram, not {!r})NNNNNN)r[   rc   
SOCK_DGRAM
ValueErrorr'   superrJ   r(   
_proxyconnrK   proxyproxy_socknameproxy_peername_timeout)r   r{   typer}   r   r   r%   	__class__s          r   r(   zsocksocket.__init__   s    *F,=>>>DCSZZ--...(j$(uNtNNNvNNN 	>+DJJ=DJ""r!   c                     d}t          |          |k     rN|                    |t          |          z
            }|st          d          ||z  }t          |          |k     N|S )zReceive 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readr3   )r   filecountdatads        r   _readallzsocksocket._readall  sq     $ii%		%#d))+,,A J'(HIIIAID	 $ii%
 r!   c                     || _         	 |                                 }t          t          |                               | j                    d S # t
          j        $ r Y d S w xY wr*   )r   get_proxy_peernamer   rJ   rh   r[   rl   )r   ro   peerr   s      r   rh   zsocksocket.settimeout  sj    	**,,D*d##..t}=====| 	 	 	DD	s   AA A A c                     | j         S r*   )r   r+   s    r   r   zsocksocket.gettimeout#  s
    }r!   c                 b    |r|                      d            d S |                      d           d S )Ng        )rh   )r   vs     r   r   zsocksocket.setblocking&  s:     	!OOD!!!!!OOC     r!   Tc                 x    |||||r|                                 nd|r|                                 ndf| _        dS )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)rI   r   )r   rL   rM   rN   rO   rP   rQ   s          r   ri   zsocksocket.set_proxy,  sH    " !$d+3=hoo'''+3=hoo'''?


r!   c                 T    d|v r|                     d          |d<    | j        |i |S rT   )rV   ri   )r   r   r   s      r   setproxyzsocksocket.setproxyA  s:    &  #)::k#:#:F< t~t.v...r!   c                    | j         \  }}}}}}|r| j        t          j        k    rt	          j        | g|R i |S | j        rt          j        t          d          |t          k    rd}	t          j        t          |	           t          t          |           j        |i | |                                 \  }
}d|f}t	                      | _        |                                 }| j                            |           d}|                     | j        ||          \  }
}|\  }}
|\  }
}t          t          |                               ||f           t          t          |                               | j                   d| _        dS )zVImplements 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   r[   r   r   rj   r   rl   r   r   r   r   rJ   getsockname_proxy_addrrk   _SOCKS5_requestrh   r   r   )r   r   r   rL   rq   rr   rO   rP   rQ   r%   _rN   dstr   UDP_ASSOCIATErelayhostr   s                    r   rj   zsocksocket.bindF  s   
 Z	ZT8	 	7TY&*;;;$T6C6662666? 	M,v'KLLL;C,z3///$j$$c0R000
 ""$$4Dk&..  ""&&&''LL5 a4j$''t555j$**4=999,r!   c                    | j         t          j        k    r$ t          t          |           j        |g|R i |S | j        s|                     d           |d         }|d d         }t                      }d}|	                    |           d}|	                    |           | 
                    ||            t          t          |           j        |                                |z   g|R i |}	|	|                                z
  S )N r   s         )r   r[   r   r   rJ   r   r   rj   r   write_write_SOCKS5_addressr   getvaluetell)r   bytesr   r   addressflagsheaderRSV
STANDALONEsentr   s             r   r   zsocksocket.sendtok  s   9)))15T**1%I$III&III 	IIgr(SbS	S
Z   ""7F333+uZ&&+FOO,=,=,E 6 6 6 6.46 6fkkmm##r!   c                     | j         t          j        k    r | j        ||| j        fi |S  t          t          |           j        ||fi |S r*   )r   r[   r   r   r   r   rJ   r   )r   r   r   r   r   s       r   r   zsocksocket.send  s[    9)))4;ueT-@KKFKKK/5T**/uGGGGGr!   c                    | j         t          j        k    r)t          t          |                               ||          S | j        s|                     d           t          t          t          |           	                    |dz   |                    }|
                    dt                     |                    d          }t          |          rt          d          |                     |          \  }}| j        r0| j        \  }}||k    s|d|fvrt          j        t$          d          |                    |          ||ffS )Nr   i   r   r   zReceived UDP packet fragmentr   zPacket filtered)r   r[   r   r   rJ   r   r   rj   r   r   seekr	   r   ordNotImplementedError_read_SOCKS5_addressr   rl   r   )
r   bufsizer   buffragfromhostfromportpeerhostpeerportr   s
            r   r   zsocksocket.recvfrom  s3   9)))T**33GUCCC 	IIgeJ--227T>5IIJJHxx{{t99 	F%&DEEE!66s;;( 	>!%!4Hh8##x8}'D'Dl6+<===!!Hh#788r!   c                 &     | j         |i |\  }}|S r*   )r   )r   r   r   r   r   s        r   r   zsocksocket.recv  s!     4=#,,,qr!   c                     | j         r| j                                          t          t          |                                           S r*   )r   rm   r   rJ   )r   r   s    r   rm   zsocksocket.close  s=    ? 	$O!!###Z&&,,...r!   c                     | j         S )z:Returns the bound IP address and port number at the proxy.)r   r+   s    r   get_proxy_socknamezsocksocket.get_proxy_sockname  s    ""r!   c                 *    |                                  S )z>
        Returns the IP and port number of the proxy.
        )getpeernamer+   s    r   r   zsocksocket.get_proxy_peername  s     !!!r!   c                     | j         S )zwReturns the IP address and port number of the destination machine.

        Note: get_proxy_peername returns the proxy.)r   r+   s    r   get_peernamezsocksocket.get_peername  s     ""r!   c                 R    d}|                      | ||          \  | _        | _        dS )z7Negotiates a stream connection through a SOCKS5 server.   N)r   r   r   )r   	dest_addrCONNECTs      r   _negotiate_SOCKS5zsocksocket._negotiate_SOCKS5  s4    373G3G'94& 4&0T000r!   c                    | j         \  }}}}}}	|                    d          }
|                    dd          }	 |r|	r|
                    d           n|
                    d           |
                                 |                     |d          }|dd         dk    rt          d	          |dd         d
k    r|r|	st          d          |
                    dt          t          |                    	                                z   |z   t          t          |	                    	                                z   |	z              |
                                 |                     |d          }|dd         dk    rt          d	          |dd         dk    rt          d          n:|dd         dk    r,|dd         dk    rt          d          t          d	          |
                    d|z   dz              | 
                    ||
          }|
                                 |                     |d          }|dd         dk    rt          d	          t          |dd                   }|dk    r>t                              |d          }t          d                    ||                    |                     |          }t#          t$          |                               | j                   ||f|                                 |
                                 S # |                                 |
                                 w xY w)z
        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   r3   r9   chrr   rI   r   r   SOCKS5_ERRORSgetr;   r'   r   r   rJ   rh   r   rm   )r   conncmdr   rL   rM   rN   rO   rP   rQ   writerreaderchosen_authauth_statusresolvedrespstatusrl   bndr   s                      r   r   zsocksocket._SOCKS5_request  s   
 <@:8
D$ht$$tQ''W	 .H . 01111 _--- LLNNN--22K1Q37** (;= = =
 1Q37** ! =X = * +< = = = Ws3x=='9'9'@'@'B'BB'("3x==1188::;  (( ) ) ) "mmFA66qs#w..+?A A Aqs#w..)*HIII / QqS!W,,qs#w..)$% % % ,?A A A LL3011111#v>>HLLNNN ==++DAaCyG##';= = = ac^^F~~%))&/BB!-"6"6vu"E"EFFF ++F33C*d##..t}===c?LLNNNLLNNNN LLNNNLLNNNNs   KL, ,*Mc                    |\  }}| j         \  }}}}}}	t          j        dt          j        di}
t          j        t          j        fD ]}	 t          j        ||          }|                    |
|         |z              t          j        ||          }|                    t          j        d|                     ||fc S # t          j	        $ r Y w xY w|r]|
                    d          }|                    dt          t          |                    
                                z   |z              nt          j        ||t          j        t          j        t          j        t          j                  }|d         }|d         }|d         d         }t          j        ||          }|                    |
|         |z              t          j        ||          }|                    t          j        d|                     ||fS )z~
        Return the host and port packed for the SOCKS5 protocol,
        and the resolved address as a tuple object.
        r      >Hidnar   r   rC   )r   r[   AF_INETAF_INET6	inet_ptonr   	inet_ntopstructpackrl   rI   r   r   rb   	AF_UNSPECrc   IPPROTO_TCPAI_ADDRCONFIG)r   rM   r   r   rN   rL   r   rO   rP   rQ   family_to_byter{   
addr_bytes
host_bytes	addressestarget_addrs                   r   r   z socksocket._write_SOCKS5_address   s   
 
d59Z2
Aq$( .'6?GL
 ~v7 	 	F#-fd;;


>&1J>???'
;;

6;tT22333Tz!!!<     	8V,,JJJwS__!5!5!<!<!>!>>KLLLL *4v7G+1+=+1+=+1+?A AI $A,K ^Fq>!$D)&$77JJJ~f-
:;;;#FJ77D

6;tT**+++Tzs   	A3B??CCc                    |                      |d          }|dk    r)t          j        |                      |d                    }n|dk    r:|                      |d          }|                      |t          |                    }nI|dk    r4t          j        t          j        |                      |d                    }nt          d          t          j        d|                      |d	                    d
         }||fS )Nr   r   rC   r   r     r   r  r   r   )	r   r[   	inet_ntoar   r  r
  r3   r  unpack)r   r   atyprM   lengthrN   s         r   r   zsocksocket._read_SOCKS5_addressM  s    }}T1%%7??#DMM$$:$:;;DDW__]]4++F==s6{{33DDW__#FOT]]45L5LMMDD#$KLLL}T4==q#9#9::1=Tzr!   c                 "   | j         \  }}}}}}|                     d          }	|                     dd          }
	 d}	 t          j        |          }nB# t          j        $ r0 |rd}d}n&t          j        t          j        |                    }Y nw xY w|	                    t          j        ddd	|                     |	                    |           |r|	                    |           |	                    d
           |r+|	                    |	                    d          d
z              |	
                                 |                     |
d          }|dd	         d
k    rt          d          t          |d	d                   }|dk    r>t                              |d          }t!          d                    ||                    t          j        |dd                   t          j        d|dd                   d         f| _        |rt          j        |          |f| _        n	||f| _        |
                                 |	                                 dS # |
                                 |	                                 w xY w)z0Negotiates a connection through a SOCKS4 server.r   r   r   Fs      Tz>BBHrC   r   r   r  rG   z%SOCKS4 proxy server sent invalid datar   Z   r   r   Nr  )r   r   r[   	inet_atonrl   gethostbynamer   r  r  rI   r   r   r3   r   SOCKS4_ERRORSr   r=   r'   r  r  r   r   rm   )r   r   	dest_portrL   rM   rN   rO   rP   rQ   r   r   remote_resolver  r  r  rl   s                   r   _negotiate_SOCKS4zsocksocket._negotiate_SOCKS4\  s   ;?:8
D$ht$$tQ''4	"N	9#-i88

< 9 9 9 9!4J%)NN!'!1,Y77"9 "9J9 LLVT4CCDDDLL$$$  'X&&&LL!!!
  AY--f55?@@@LLNNN ==++DAaCyG##';= = = ac^^F~~%))&/BB!-"6"6vu"E"EFFF $*#3DH#=#=#)=tAaCy#A#A!#D#FD ;&,&6z&B&BI&M##&/&:#LLNNNLLNNNNN LLNNNLLNNNNs/   I$ A I$ <BI$ BF(I$ $*Jc                    | j         \  }}}}}}|r|nt          j        |          }d|                    d          z   dz   t	          |                                          z   dz   d|                    d          z   g}	|r-|r+|	                    dt          |dz   |z             z              |	                    d           |                     d                    |	                     | 	                                }
|

                                }|
                                 |st          d          	 |                    d	d
          \  }}}n# t          $ r t          d          w xY w|                    d          st          d          	 t!          |          }n# t          $ r t#          d          w xY w|dk    r.d                    ||          }|dv r|dz  }t#          |          d| _        ||f| _        dS )zwNegotiates 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   r[   r   rI   strappendr   sendalljoinr   readlinerm   r3   splitr   r`   rf   r?   r'   r   r   )r   r   r"  rL   rM   rN   rO   rP   rQ   http_headersfobjstatus_liner}   status_code
status_msgrl   s                   r   _negotiate_HTTPzsocksocket._negotiate_HTTP  s    <@:8
D$h !Eyyf&:9&E&E 4;;v...59~~$$&&')56	((000
  	I 	I >"+HtOh,F"G"G!H I I I 	G$$$W\\,//000 }}mmoo

 	F#$DEEE	O-8->->sA-F-F*E;

 	O 	O 	O#$MNNN	O (( 	D#BD D D	Hk**KK 	H 	H 	HFH H H	H #OOK<<Eo--  $ % E"""-"Ios   9E E.F& &G c                    t          |          dk    s|d                             d          r$t          j        dt	          |          z            |\  }}| j        t          j        k    rK| j        s|                     d           t          j	        |          }|dk    r
|sd| _
        n	||f| _
        dS | j        \  }}}}}	}
t          |t          t          f          r*t          |          dk    s|rt          |t                    st!          d          t#          t$          |                               | j                   |`|| _
        t#          t$          |                               | j                   t#          t$          |                               ||f           dS |                                 }	 t#          t$          |                               |           	 | j        |         } || ||           dS # t          j        $ r-}|s$|                                  t!          d	|          |d}~wt2          $ r |                                   w xY w# t          j        $ r}|                                  |sj|\  }}d
                    ||          }t6          |         }d                    ||          }t8                              d||           t=          ||          |d}~ww xY w)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   r_   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   r`   r[   rl   r)  r   r   r   rj   r   r   r   re   r   tuplerf   r3   r   rJ   rh   r   rk   r   _proxy_negotiatorsrm   r#   r'   PRINTABLE_PROXY_TYPESlogdebugr7   )r   rn   catch_errorsr   r"  rL   rq   rr   rO   rP   rQ   	negotiaterl   proxy_serverprintable_typer%   r   s                   r   rk   zsocksocket.connect  s-    y>>Q)A,"9"9#">"> ,A!$Y 0 1 1 1  )	99)))? #		'""",Y77I I%%i%&*##'0)&<#F Z	ZT8	 9tUm44 	Dy>>Q&&  '!)S11 ' $BD D D
 	j$**4=999"+D*d##..t}===*d##++Y	,BCCCF%%''
#	*d##++J777& 3J?		$	955555<      #  JJLLL+NEBBBK   

9 | 	 	 	JJLLL 
)3&
J&~~j*EE!6z!B7>>~DPR R		/3666*3666	s1    (I" )H I(H<<#I"K81BK33K8c                     	 |                      |d           dS # t          $ r}|j        r|j        cY d}~S  d}~ww xY w)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)r;  r   N)rk   OSErrorerrno)r   rn   r   s      r   
connect_exzsocksocket.connect_ex6  sa    
		LLL6661 	 	 	 w w	s    
>9>9>c                     | j         \  }}}}}}|pt                              |          }|st          d          ||fS )zD
        Return proxy address to connect to as tuple object
        zInvalid proxy type)r   DEFAULT_PORTSr   r3   )r   rL   rq   rr   rO   rP   rQ   s          r   r   zsocksocket._proxy_addrF  sU    
 Z	ZT8	@=#4#4Z#@#@
 	:#$8999:%%r!   NNNTNN)r   r*   )*r-   r.   r/   r0   rK   r[   r	  rc   r(   r   rh   r   r   ri   r   rj   r   r   r   r   rm   r   getproxysocknamer   getproxypeernamer   r   r   r   r   r   r$  r4  r   r   r   r7  r    rk   rB  r   __classcell__)r   s   @r   rJ   rJ      s         M$n63E     $
 
 
      ! ! ! EI*.? ? ? ?*/ / /
#- #- #- #- #-J$ $ $ $ $(H H H H H H9 9 9 9 9 9(  / / / / /
# # # *" " " *# # # K& & &` ` ` ` `D+ + +Z  : : :x9. 9. 9.x "#4!#4 Z Z Z Z Z Zx   	& 	& 	& 	& 	& 	& 	&r!   rJ   rE  )	NNNNNTNNN)Dbase64r   collections.abcr   ImportErrorcollectionsrA  r   r   r   r   ior   loggingosr	   r[   r  sys__version__r   version_infowin_inet_pton	getLoggerr-   r9  PROXY_TYPE_SOCKS4r   PROXY_TYPE_SOCKS5r   PROXY_TYPE_HTTPr   PROXY_TYPESr   zipvalueskeysr8  
_orgsocketr   r    IOErrorr#   r3   r7   r9   r;   r=   r?   r!  r   rD  rR   rW   rY   getdefaultproxyr]   
wrapmoduler   r   r   r   methodre   r   r*  setattrrJ   r1   r!   r   <module>rb     s        %((((((( % % %$$$$$$$$% , , , , , , , , , ,            				         



 7d??s'&00H H H HkFH H 	HH g!!  F  F $64@@SS!3!3!5!5{7G7G7I7IJJKK "M )
\  &
 
 
 
 
 
 
 
	 	 	 	 	
 	 	 		 	 	 	 	: 	 	 		 	 	 	 	j 	 	 		 	 	 	 	* 	 	 		 	 	 	 	* 	 	 		 	 	 	 	
 	 	 	 '!	  )
-




4
&	 	 vtT48 CG.2I I I I. . .$ $ $ $	> 	> 	> 
 482626:>%):3 :3 :3 :3z
 
 
 
 
&- 
 
 
I I I2 	6 	6DW[$--F :fh'' 6%%d+++T;;t#4#4555^	& ^	& ^	& ^	& ^	& ^	& ^	& ^	& ^	& ^	&s    'A, ,A=