
    RSi
                         d dl Z d dlZd dlZd dlZ	 d dlmZ n# e$ r dZY nw xY wg dZd Zed             Z	ddZ
d Zed	             Zd
 ZdS )    N)SSL)has_dualstack_ipv6hiliteis_ssl_sockmemoizestrerrorterm_supports_colorsc                       fd}i |S )z]A simple memoize decorator for functions supporting (hashable)
    positional arguments.
    c                      | t          t          |                                                    f}	 |         S # t          $ r  | i |x}|<   |cY S w xY wN)	frozensetsorteditemsKeyError)argskwargskeyretcachefuns       C/home/jrussi/.local/lib/python3.11/site-packages/pyftpdlib/utils.pywrapperzmemoize.<locals>.wrapper   su    Yvfllnn55667	: 	 	 	"sD3F333C%*JJJ	s   ; AA )r   r   r   s   ` @r   r   r      s.    
      EN    c                  6   t           j        dk    rdS 	 dd l} t          j                                        sJ t          j                                        sJ |                                  |                     d          dk    sJ 	 dS # t          $ r Y dS w xY w)NntFr   colorsT)
osnamecursessysstdoutisattystderr	setuptermtigetnum	Exception)r    s    r   r	   r	   *   s    	w$u
z  """""z  """""x((1,,,,, t    uus   A3B
 

BBFc                    t                      s| S g }t          ddddddddd	d

  
        }d|d<   	 ||         }nE# t          $ r8 d|dt          |                                           }t          |          dw xY w|                    |           |r|                    d           dd                    |           d|  dS )z*Return an highlighted version of 'string'.3433303237z38;5;66913593z38;5;208)
bluebrowndarkgreygreengrey	lightblueredvioletyelloworange29Nzinvalid color z; choose amongst 1z[;mz[0m)r	   dictr   listkeys
ValueErrorappendjoin)scolorboldattrr   msgs         r   r   r   ;   s   !! D  F F4L(u ( ( (NuNNfkkmm9L9LNNoo4'( 	KK C.388D>>..A....s
   ; AA=c                 |    t          | t                    rt          j        | j                  S t          |           S r   )
isinstanceOSErrorr   r   errnostr)errs    r   r   r   X   s1    #w &{39%%%s88Or   c                     t           j        r*t          t           d          rt          t           d          sdS 	 t          j        t          j         t           j        t           j                            5 } |                     t           j        t           j	        d           	 ddd           dS # 1 swxY w Y   dS # t          $ r Y dS w xY w)zReturn True if the platform supports creating a SOCK_STREAM socket
    which can handle both AF_INET and AF_INET6 (IPv4 / IPv6) connections.
    IPPROTO_IPV6IPV6_V6ONLYFr   NT)sockethas_ipv6hasattr
contextlibclosingAF_INET6SOCK_STREAM
setsockoptrQ   rR   rL   socks    r   r   r   _   s    Ov~.. v}--
 uM&/6+=>>
 
 	OOF/1CQGGG		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	
    uus5   ;B< 5-B/"B< /B33B< 6B37B< <
C
	C
c                 H    t           d uot          | t           j                  S r   )r   rK   
Connectionr[   s    r   r   r   t   s    d??z$???r   )NF)rV   r   rS   r!   OpenSSLr   ImportError__all__r   r	   r   r   r   r   r   r   r   <module>rb      s  
     				  



   
CCC    " 	  	 / / / /:   	  	(@ @ @ @ @s    ##