
    yIfc              
         d Z 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mZmZ ddlmZ  edg d          Zd Z e            Z ej        d	          Z G d
 d          Zedk    rej        dd         Z ee          dk    red         Zedd         ZndZ ee          dk    red         Zedd         ZndZej        dd         ez   e_         e                                            Zej                            d                    eddd         eeddd         f                     dS dS )z
The PythonInfo contains information about a concrete instance of a Python interpreter.

Note: this file is also used to query target interpreters, so can only use standard library methods
    )annotationsN)OrderedDict
namedtuple)digitsVersionInfo)majorminormicroreleaselevelserialc            	         t          t          j        dgt          j                            dd                                                              t          j                                      S )N PATHEXT)	listr   fromkeysosenvirongetlowersplitpathsep     P/var/www/piapp/venv/lib/python3.11/site-packages/virtualenv/discovery/py_info.py_get_path_extensionsr      sQ    $b%c2:>>)R+H+H+N+N+P+P+V+VWYWa+b+b%cddeeer   z\{\w+\}c                  0   e Zd ZdZd)dZd Zd Zed             Ze	d             Z
e	d	             Ze	d
             Ze	d             Ze	d             Zdej        fdZd*dZe	d             Ze	d             Ze	d             Zd+dZd+dZe	d             Zed             Zd ZdZdZed,d            Zed,d-d            Zd Z d Z!e	 	 	 	 	 d.d            Z"ed              Z#ed!             Z$ed"             Z%i Z&d/d#Z'd$ Z(ed%             Z)d& Z*d' Z+d( Z,dS )0
PythonInfoz.Contains information for a Python interpreter.returnNonec           	     	    d }t           j         _        t          j                     _         j        dk    rt	          t           j                   _        t          t           j          _        t           j        dk    rdnd _	        t          j        d           _        t           j         _        t          j         _         |t!          t           dd                      _         |t!          t           dd                      _         |t!          t           d	d                      _         |t!          t           d
d                      _         |t!          t           dd                      _         |t           j                   _         | j                   _                                          _        	 t5          d           d}n# t6          $ r d}Y nw xY w| _        t           j         _        t          j                     _        t!          t           j         dd            _!        t          j"                    }d|v r3d _#         fdt          j$                    D              _%        i  _&        nt           j        d d         dk    r7d|v r3d _#         fdt          j$                    D              _%        i  _&        nTd  _#        d t          j$                    D              _%         '                                (                                 _&        t!          t          dt!          t          dd                     }d d |            ffD              _
        tS                      } j%        *                                D ]9}|+                    d tX          -                    |          D                        :|.                    d           d |D              _/         fd j/        0                                D             } 1                    d|           _2         1                    d |           _3        t!          t           d!t!          t           d"d                      _4        d  _5        d S )#Nc                H    | d nt           j                            |           S N)r   pathabspath)vs    r   abs_pathz%PythonInfo.__init__.<locals>.abs_path#   s    944"'//!*<*<<r   PyPyl        @       py_version_nodotprefixbase_prefixreal_prefixbase_exec_prefixexec_prefixvenvTFencodingc                J    i | ]}|t          j        |d j                   S F)expandscheme	sysconfigget_pathsysconfig_scheme.0iselfs     r   
<dictcomp>z'PythonInfo.__init__.<locals>.<dictcomp>R   =     $ $ $YZ9%ad>STTT$ $ $r      )   
   
deb_systemposix_prefixc                J    i | ]}|t          j        |d j                   S r3   r6   r:   s     r   r>   z'PythonInfo.__init__.<locals>.<dictcomp>\   r?   r   c                <    i | ]}|t          j        |d           S )F)r4   )r7   r8   r;   r<   s     r   r>   z'PythonInfo.__init__.<locals>.<dictcomp>c   s*    #o#o#oqAy'9!E'J'J'J#o#o#or   get_makefile_filename_get_makefile_filenamec                    i | ]
\  }}|||S r"   r   r;   kr%   s      r   r>   z'PythonInfo.__init__.<locals>.<dictcomp>h   s/     
 
 
1 } q
 }}r   makefile_filenamec              3  *   K   | ]}|d d         V  dS )   Nr   )r;   rL   s     r   	<genexpr>z&PythonInfo.__init__.<locals>.<genexpr>s   s*      "R"Rq1QrT7"R"R"R"R"R"Rr   PYTHONFRAMEWORKc                <    i | ]}|t          j        |pd           S r   )r7   get_config_varrG   s     r   r>   z'PythonInfo.__init__.<locals>.<dictcomp>v   s)    ]]]q)":17"C"C]]]r   c                b    i | ]+\  }}||!|                     j                  rj        n|,S r"   
startswithr+   system_prefixr;   rL   r%   r=   s      r   r>   z'PythonInfo.__init__.<locals>.<dictcomp>x   sN     
 
 
1 amT[8Q8Qm""WX
 
 
r   stdlib
platstdlibmaxsizemaxint)6sysplatformpython_implementationimplementationtuplepypy_version_infor   version_infor]   architecturer7   rU   version_nodotversionr   namegetattrr+   r,   r-   r.   r/   
executableoriginal_executable_fast_get_system_executablesystem_executable
__import__ImportErrorhas_venvr#   getfilesystemencodingfile_system_encodingstdoutstdout_encodingget_scheme_namesr9   get_path_namessysconfig_pathsdistutils_install_distutils_installcopysetvaluesupdate_CONF_VAR_REfindalladdsysconfig_varsitemssysconfig_pathsystem_stdlibsystem_stdlib_platformmax_size	_creators)r=   r&   hasscheme_namesmakefileconfig_var_keyselementconfss   `       r   __init__zPythonInfo.__init__"   sr   	= 	= 	= &<>>&((%*3+@%A%AD" ()9:"%+"5"5BB2 '56HII{' hwsHd;;<<#8GC$E$EFF#8GC$E$EFF !)6H$)O)O P P#8GC$E$EFF"(3>22#+8DO#<#< !%!A!A!C!C	vCC 	 	 	CCC	H	$'$=$?$?!&sz:tDD 133\!!$*D!$ $ $ $^g^v^x^x$ $ $D  &(D"" bqb!W,,1M1M$2D!$ $ $ $^g^v^x^x$ $ $D  &(D""$(D!#o#oT]TlTnTn#o#o#oD %)%<%<%>%>%C%C%E%ED" 9&=wyRjlp?q?qrr
 
 %hhjj1
 
 
 %%+2244 	S 	SG"""R"RL4H4H4Q4Q"R"R"RRRRR-...]]_]]]
 
 
 
+1133
 
 
 "005AA&*&9&9,&N&N#YXt0L0LMMs    G G! G!c                   | j         s| j        | j        | j        k    r| j         t          t          dd          }|t          j        |k    rt          j                            |          r|S | j	        j
        | j	        j        }}| j        dk    rf||fdk    r^t          j                            |          fdd| d| d| fD             D ]%}t          j                            |          r|c S &dS | j        S )z?Try to get the system executable by just looking at properties.N_base_executableposix)rA      c                P    g | ]"}t           j                            |          #S r   )r   r#   join)r;   exebase_dirs     r   
<listcomp>z:PythonInfo._fast_get_system_executable.<locals>.<listcomp>   s6     4 4 4@CXs ; ;4 4 4r   python.)r-   r,   r+   rj   r_   rk   r   r#   existsre   r   r	   dirnamerl   )r=   base_executabler   r	   r   s       @r   rm   z&PythonInfo._fast_get_system_executable   sA    	(T-=-L-L'")#/A4"H"H".~887>>/:: 3#22 (,'8'>@Q@Wu7g--5%.G2K2K')w'G'GH4 4 4 4HXQVHXHXZrchZrZrkpZrZrGs4 4 4 ; ; $&7>>/#B#B !;+:$:$:$:!;4 ''r   c                &   | j                             |          }|s| j        | j        | j        | j        ffd| j                                        D             }|                     ||          	                    t          j                  }|S )Nc                (    i | ]\  }}||v rd n|S rT   r   )r;   rL   r%   prefixess      r   r>   z+PythonInfo.install_path.<locals>.<dictcomp>   s+    ```DAq!1==RRa```r   )
config_var)ry   r   r+   r/   r,   r.   r   r   r   lstripr   sep)r=   keyresultr   r   s       @r   install_pathzPythonInfo.install_path   s    '++C00>{D$4d6FH]]H````DDWD]D]D_D_```J(((DDKKBFSSFr   c                 ^   t          j                    5  t          j        d           	 ddlm}  ddlm} n# t          $ r i cY cd d d            S w xY w	 d d d            n# 1 swxY w Y   |                     ddi          }t          t          d          rd t          _        t          j                    5  t          j        d           |                    dd	
          d d d            n# 1 swxY w Y   t          j        _                                         fd|D             S )Nignorer   )dist)SCHEME_KEYSscript_argsz--no-user-cfg
_frameworkinstallT)createc                    i | ];}|t          d |           dd                             t          j                  <S )install_rO   N)rj   r   r   r   )r;   r   r<   s     r   r>   z1PythonInfo._distutils_install.<locals>.<dictcomp>   sG    ^^^3ga!1C!1!1221226>>rvFF^^^r   )warningscatch_warningssimplefilter	distutilsr   distutils.command.installr   rp   Distributionhasattrr_   r   get_command_objr   r   r+   finalize_options)r   r   dr<   s      @r   rz   zPythonInfo._distutils_install   s   
 $&& 	 	!(+++******AAAAAAA   			 	 	 	 	 	 	 	
 B		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 }o>??3%% 	"!CN$&& 	: 	:!(+++!!)D!99A	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 	: 6	^^^^R]^^^^sC   A#8A#AA#AA##A'*A'9,C11C58C5c                Z    d                     d | j        dd         D                       S )Nr   c              3  4   K   | ]}t          |          V  d S r"   strrG   s     r   rQ   z)PythonInfo.version_str.<locals>.<genexpr>   (      ??1A??????r   r   rA   r   re   r=   s    r   version_strzPythonInfo.version_str   /    xx??(9!A#(>??????r   c                Z    d                     d | j        dd         D                       S )Nr   c              3  4   K   | ]}t          |          V  d S r"   r   rG   s     r   rQ   z1PythonInfo.version_release_str.<locals>.<genexpr>   r   r   r   r@   r   r   s    r   version_release_strzPythonInfo.version_release_str   r   r   c                4    | j         }d|j         d|j         S )Nr   r   )re   r   r	   )r=   re   s     r   python_namezPythonInfo.python_name   s&    (A*AA\-?AAAr   c                    | j         d uS r"   )r-   r   s    r   is_old_virtualenvzPythonInfo.is_old_virtualenv       t++r   c                    | j         d uS r"   )r,   r   s    r   is_venvzPythonInfo.is_venv   r   r   Nc                    | j         |         }|| j        }n0| j                                        }|                    |           |} |j        di |                    d|          S )N/r   )rx   r   r{   r~   formatreplace)r=   r   r   r   patternbases         r   r   zPythonInfo.sysconfig_path   sr    &s+,JJ&++--DKK
###Jw~++
++33C===r   Fc                f    | j         |du r ddlm} |                    |           | _         | j         S )NTr   )CreatorSelector)r   virtualenv.run.plugin.creatorsr   for_interpreter)r=   refreshr   s      r   creatorszPythonInfo.creators   sA    >!W__FFFFFF,<<TBBDN~r   c                                          d fd j                                        D                       }t          j                            |          svt          j                             j        t          j                             	                    d                              }t          j                            |          r|}|S )Nincludec                b    i | ]+\  }}||!|                     j                  rj        n|,S r"   rW   rZ   s      r   r>   z-PythonInfo.system_include.<locals>.<dictcomp>   sN       Aq !-ALL<U<U-D&&[\  r   headers)
r   r   r   r   r#   r   r   r+   r   r   )r=   r#   fallbacks   `  r   system_includezPythonInfo.system_include   s    ""    /5577  
 
 w~~d## 	 w||DKARARS\A]A]1^1^__Hw~~h''  r   c                ,    | j         p| j        p| j        S r"   )r-   r,   r+   r   s    r   rY   zPythonInfo.system_prefix   s    B4#3Bt{Br   c                ,    | j         p| j        p| j        S r"   )r-   r.   r/   r   s    r   system_exec_prefixzPythonInfo.system_exec_prefix   s    L4#8LD<LLr   r   c                    d                     | j        j        d | j                                        D                       S )Nz{}({!r})c                D    i | ]\  }}|                     d           ||S )_)rX   rK   s      r   r>   z'PythonInfo.__repr__.<locals>.<dictcomp>  s/    MMMda1<<;L;LMQMMMr   )r   	__class____name____dict__r   r   s    r   __repr__zPythonInfo.__repr__   sA      N#MMdm1133MMM
 
 	
r   c                z   d                     | j        j        d                    d d| j        f| j        | j        | j        k    rdnd | j        f| j        | j        | j        hvrdnd | j        fd| j        fd| j        fd	t          | j
                  fd
| j         d| j         ffD                                 S )Nz{}({})z, c              3  .   K   | ]\  }}|| d| V  d S )N=r   rK   s      r   rQ   z%PythonInfo.__str__.<locals>.<genexpr>	  sB        Aq& =) 

q

( !===+ r   specsystemoriginalr   r`   rh   encoding_fs_io-)r   r   r   r   r   rn   rk   rl   r`   reprrh   rs   ru   r   s    r   __str__zPythonInfo.__str__  s   N#II   TY'  1=$BX\`\kBkBk !!.	  3D<RTXTc;ddd #
!0	 DO,/T\ 2 23%$*C'\'\dFZ'\'\]#    
 
 	
r   c                    d                     | j        d                    d | j        D                       | j                  S )Nz{}{}-{}r   c              3  4   K   | ]}t          |          V  d S r"   r   rG   s     r   rQ   z"PythonInfo.spec.<locals>.<genexpr>$  s(      =`=`c!ff=`=`=`=`=`=`r   )r   rb   r   re   rf   r   s    r   r   zPythonInfo.spec"  s?     3SXX=`=`dN_=`=`=`5`5`bfbstttr   c                Z    ddl m}  ||           | j                                         d S )Nr   )clear)#virtualenv.discovery.cached_py_infor   _cache_exe_discovery)clsapp_datar   s      r   clear_cachezPythonInfo.clear_cache&  s>     	>=====h &&(((((r   c                   |j         r| j        t          j                             |j                   k    rdS |j        st          j                             | j                  }|j         }t          j        dk    rOt          j         	                    |          \  }}|
                    |          r|dt          |                    }||k    rdS |r=|j        6|j                                        | j                                        k    rdS |j        |j        | j        k    rdS t          | j        dd         |j        |j        |j        f          D ]\  }}||	||k    r dS dS )zXCheck if a given specification can be satisfied by the this python interpreter instance.Twin32NFr   rA   )r#   rk   r   r$   is_absbasenamerl   r_   r`   splitextendswithlenrb   r   rf   zipre   r   r	   r
   )r=   r   impl_must_matchr   	spec_pathsuffixourreqs           r   	satisfieszPythonInfo.satisfies.  sm   9 	!"'//$)"<"<<<t; 	!7++D,DEE I	<7**')w'7'7'A'A$Hf ))&11 >$-nVn$=	y(( 5 	#/#))++t/B/H/H/J/JJJ5(T->$BS-S-S5D-ac2TZTZ4XYY 	 	HC3?sczzuutr   c                n    | j         (|                     t          j        |dd          | _         | j         S )
        This locates the current host interpreter information. This might be different than what we run into in case
        the host python has been upgraded from underneath us.
        NTFraise_on_errorresolve_to_host)_currentfrom_exer_   rk   r   r   s     r   currentzPythonInfo.currentP  s3     <<<QUgl<mmCL|r   c                n    | j         (|                     t          j        |dd          | _         | j         S )r  NTr  )_current_systemr  r_   rk   r  s     r   current_systemzPythonInfo.current_systemZ  s6     &"%,,s~xX\nr,"s"sC""r   c                R    t          j        |                                 d          S )Nr@   )indent)jsondumps_to_dictr   s    r   _to_jsonzPythonInfo._to_jsond  s    z$--//!4444r   c                x      fdt                     D             }|d                                         |d<   |S )Nc                B    i | ]}||d k    rt          |          ndS )r   N)rj   )r;   varr=   s     r   r>   z'PythonInfo._to_dict.<locals>.<dictcomp>i  s4    ```cC;,>,>gdC(((D```r   re   )vars_asdict)r=   datas   ` r   r  zPythonInfo._to_dicth  sF    ````UYZ^U_U_```#N3;;==^r   Tc                    ddl m} |t          j        n|} || |||||          }t	          |t
                    rQ|rO	 |                    ||          }n7# t          $ r*}	|r t          j	        d|j
        |	           d}Y d}	~	nd}	~	ww xY w|S )z9Given a path to an executable get the python information.r   )r  N)envr  ignore_cachez-ignore %s due cannot resolve system due to %r)r   r  r   r   
isinstancer   _resolve_to_system	Exceptionlogginginforl   )
r   r   r   r  r%  r  r$  r  proposed	exceptions
             r   r  zPythonInfo.from_exen  s     	A@@@@@KbjjS8C3Ceqrrrh
++ 	  	  #66xJJ      ! LhNjluvvv	 
 s    A 
B! BBc                x    t          j        |          }|                     |                                          S r"   )r  loads
_from_dictr{   )r   payloadraws      r   
_from_jsonzPythonInfo._from_json  s-     j!!~~chhjj)))r   c                v    t          di |d         |d<    |             }|                                |_        |S )Nre   r   )r   r{   r   )r   r"  r   s      r   r/  zPythonInfo._from_dict  s>    *BBT.-ABB^))++r   c                   |j         }t                      }|j        &|j        p|j        p|j        }||v rt          |          dk    r"t          j        d|           |j         |_        nt          |
                                d          D ]\  }\  }}t          j        d|||            t          j        dt          |          dz   ||           d                    d                    |                                                    }	t          |	          |||<   |                    ||d          }|j        &|j         |j        k    r|                     |j        |          }||_         |S )	NrO   z$%r links back to itself via prefixes)startz%d: prefix=%s, info=%rz prefixes are causing a circle {}|F)r+   exact)rk   r   rn   r-   r,   r+   r  r)  r*  	enumerater   errorr   r   keysRuntimeErrordiscover_exer  )
r   r   targetstart_executabler   r+   atptmsgs
             r   r'  zPythonInfo._resolve_to_system  sx   !,==&.'N6+=NF!!x==A%%L!GPPP/5/@F,"+HNN,<,<A"F"F"F F FJBAM":B1EEEE6H8I6SYZZZ8??@Y@YZZ"3'''%HV((&(NNF &.  888\\&":HEEF,r   c           
        ||f}|| j         v r1|r/t          j        d||| j         |                    | j         |         S t          j        d| |           |                                 }|                     |          }g }|t
          j        n|}|D ]3}	|D ].}
|                     ||	|
|||          }||| j         |<   |c c S /4|du rY|rW|                     ||           }t
          j	        
                    |          }|| j         |<   t          j        d||           |S d                    d
                    |          t
          j	        
                    |                    }t          |          )Nz)discover exe from cache %s - exact %s: %rzdiscover exe for %s in %sFzFno exact match found, chosen most similar of %s within base folders %szfailed to detect {} in {}r6  )r   r)  debug_find_possible_exe_names_find_possible_foldersr   r   
_check_exe_select_most_likelyr   r   r   r;  )r=   r   r+   r7  r$  r   possible_namespossible_folders
discoveredfolderri   r*  foldersrB  s                 r   r<  zPythonInfo.discover_exe  s   em$++++MEvuVZVopsVtuuu,S1114@@@668866v>>
KbjjS& 	  	 F&    xujRUVV#59D-c2KKKKK $ 
 E>>j>++J==Djoo&677G-1D%c*MbdhjqrrrK)00.1I1I2:??[kKlKlmm3r   c                   t           j                            ||          }t           j                            |          sd S |                     ||dd|          }|d S dD ]}	t          ||	          }
t          | |	          }|
|k    r~|	dk    r>d                    d |
D                       d                    d |D                       }}
|j        }t          j        d||	|
|           |du r|	                    |            n|S d S )	NF)r  r  r$  )rb   rf   re   re   r   c              3  4   K   | ]}t          |          V  d S r"   r   rG   s     r   rQ   z(PythonInfo._check_exe.<locals>.<genexpr>  s(      .E.E!s1vv.E.E.E.E.E.Er   c              3  4   K   | ]}t          |          V  d S r"   r   rG   s     r   rQ   z(PythonInfo._check_exe.<locals>.<genexpr>  s-      OiOi[\PSTUPVPVOiOiOiOiOiOir   z2refused interpreter %s because %s differs %s != %s)
r   r#   r   r   r  rj   rk   r)  rD  append)r=   r   rL  ri   r7  rK  r$  exe_pathr*  itemfoundsearchedrk   s                r   rG  zPythonInfo._check_exe  s3   7<<--w~~h'' 	4}}XxW\be}ff<4F 	 	DD$''EtT**H  >))&)hh.E.Eu.E.E.E&E&EsxxOiOi`hOiOiOiGiGi8E!_
RT^`dfkmuvvvE>>%%d+++ ! Ktr   c                B    fd}t          | |d          }|d         S )Nc                   | j         j         k    | j        j        j        j        k    | j        j        j        j        k    | j        j        k    | j        j        j        j        k    | j        j        j        j        k    | j        j        j        j        k    g}t          d t          t          |                    D                       S )Nc              3  .   K   | ]\  }}|rd |z  ndV  dS )rO   r   Nr   )r;   posmatchs      r   rQ   zBPythonInfo._select_most_likely.<locals>.sort_by.<locals>.<genexpr>  s3      aajc5E0Sqaaaaaar   )rb   re   r   r	   rf   r
   r   r   sumr8  reversed)r*  matchesr=  s     r   sort_byz/PythonInfo._select_most_likely.<locals>.sort_by  s     #v'<<!'6+>+DD!'6+>+DD!V%88!'6+>+DD!.&2E2RR!(F,?,FFG aaIhW^N_N_D`D`aaaaaar   T)r   reverser   )sorted)rK  r=  r^  sorted_discovereds    `  r   rH  zPythonInfo._select_most_likely  sC    	b 	b 	b 	b 	b #:7DIII ##r   c                   t                      }t                      }d |t          j                            | j                  <   d || j        <   d |t          j                            | j                  <   d || j        <   |D ]`}t          j                            |          }|                    | j                  r%|t          | j                  d          }d || | <   ad ||<   d |D             S )Nc                P    g | ]#}t           j                            |          !|$S r   )r   r#   r   rG   s     r   r   z5PythonInfo._find_possible_folders.<locals>.<listcomp>  s+    AAAarw~~a/@/@AAAAr   )
r   r   r#   realpathrk   rl   r   rX   r+   r  )r=   inside_foldercandidate_folderexecutablesr   r   relatives          r   rF  z!PythonInfo._find_possible_folders  s    &==!mm9=BG$$T_556'+DO$BFBG$$T%=>>?04D,- 	F 	FC7??3''Dt{++ FDK 0 0 2 23AE M!=8!=!=> +/'AA+AAAAr   c                @   t                      }|                                 D ][}dD ]V}d                    d | j        d |         D                       }d| j         dfD ]}t
          D ]}| | | | }d ||<   W\t          |                                          S )N)rA   r@   rO   r   r   c              3  4   K   | ]}t          |          V  d S r"   r   rG   s     r   rQ   z6PythonInfo._find_possible_exe_names.<locals>.<genexpr>  s(      "J"Ja3q66"J"J"J"J"J"Jr   r   r   )r   _possible_baser   re   rf   
EXTENSIONSr   r:  )r=   name_candidateri   r?  rh   archext	candidates           r   rE  z#PythonInfo._find_possible_exe_names  s    $'')) 	9 	9D" 9 9(("J"J43DSbS3I"J"J"JJJ4!244b9 9 9D) 9 9'+$AW$Ad$AC$A$A	48y11999 N''))***r   c              #    K   t                      }t          j                            t          j                            | j                            d                             t                    }d ||<   d || j        <   d|v r|d= d |d<   |D ]R}|	                                }|V  ddl
m}  |            r(||k    r|V  |                                }||k    r|V  Sd S )Nr   r   )fs_is_case_sensitive)r   r   r#   r  r   rk   rstripr   rb   r   virtualenv.inforr  upper)r=   possible_baser   r   r   rr  ru  s          r   rk  zPythonInfo._possible_base  s     #7##BG$4$4T_$E$EFFqIPPQWXX"&h-1d)*}$$h'"&h! 
	  
	 DJJLLEKKK<<<<<<##%%  5==JJJ

D==KKK
	  
	 r   )r   r   )F)r   r   r"   )r   r   )NTFTN)TN)-r   
__module____qualname____doc__r   rm   r   staticmethodrz   propertyr   r   r   r   r   r   r   r   r   r   rY   r   r   r   r   classmethodr   r
  r  r  r  r  r  r  r  r2  r/  r'  r   r<  rG  rH  rF  rE  rk  r   r   r   r   r      s\       88] ] ] ]~( ( (>   _ _ \_0 @ @ X@ @ @ X@ B B XB , , X, , , X, .2rv > > > >      X C C XC M M XM
 
 
 

 
 
 
8 u u Xu ) ) [)  > OH   [ # # # # [#5 5 5       [4 * * [*
   [   [.        4  , $ $ \$(B B B$	+ 	+ 	+         r   r   __main__rO   r   rP   ) ry  
__future__r   r  r)  r   r`   rer_   r7   r   collectionsr   r   stringr   r   r   rl  compiler   r   r   argvr  start_cookie
end_cookier  r*  rt   writer   r   r   r   <module>r     s    # " " " " "   				  				 



      / / / / / / / /      j(](](]^^f f f "!##
rz*%%F  F  F  F  F  F  F  F R z 8ABB<D
s4yyA~~AwABBx
s4yyA~~!W
ABBx
x|d"CH:<<  ""DJRWWl44R40$
44R48HIJJKKKKK) r   