idddlZddlmZddlZddlZddlmZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZ ddlZn #e$rdZYnwxYwddlZddlZddlZddlZddlZ ddlZn#e$rddlZYnwxYwddlZddlmZddlmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0e j1e2Z3e j4dZ5e j4dZ6e j4d Z7e j4d Z8e j4d Z9e j4d Z:e j4d Z;e j4dZdZ?dZ@dZAdkdZBdZCdZDdZEejFdZGejFdZHejFdldZIGddeJZKdZLGdd eJZMd!ZNGd"d#eJZOe j4d$e jPZQd%ZRdmd&ZSd'ZTd(ZUd)ZVd*ZWd+ZXe j4d,e jYZZe j4d-Z[dmd.Z\e j4d/Z]d0Z^d1Z_d2Z`d3Zad4Zbd5ZcGd6d7eJZdGd8d9eJZeGd:d;eJZfdZhd?Zid@ZjGdAdBeJZke j4dCZle j4dDZme j4dEZndFZdGZoer:ddHlmpZqmrZrmsZsGdIdJe$jtZtGdKdLeqZpGdMdNepe'ZuGdOdPe%jvZverGdQdRe%jwZwGdSdTe%jxZxdUZyGdVdWeJZzGdXdYezZ{GdZd[ezZ|Gd\d]e(Z}Gd^d_eJZ~d`ZGdadbeJZdcZddZdeZdfdgdhdiZdjZdS)oN)deque)iglob)DistlibException) string_types text_typeshutil raw_inputStringIOcache_from_sourceurlopenurljoinhttplib xmlrpclib splittype HTTPHandlerBaseConfigurator valid_ident Container configparserURLErrorZipFilefsdecodeunquoteurlparsez^([\w\.-]+)\s*z^([\w\.*+-]+)\s*z^(<=?|>=?|={2,3}|[~!]=)\s*z*^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*z^or\b\s*z ^and\b\s*z(\S+)\s*z(([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)cFdfdfdfd|S)ae Parse a marker string and return a dictionary containing a marker expression. The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in the expression grammar, or strings. A string contained in quotes is to be interpreted as a literal string, and a string not contained in quotes is a variable (such as os_name). ct|}|r8|d}||d}ns|st d|d}|dvrt d|zd|d}|dd}|g}|r|d|krn|d|kr |||dd}nwt|}|st d|z||d||d}|d|}t d|z||d|}|dd }||fS) Nrzunexpected end of inputz'"zinvalid expression: %srzerror in string literal: %szunterminated string: %s) IDENTIFIERmatchgroupsend SyntaxErrorreplaceappend STRING_CHUNKjoinlstrip) remainingmresultqoqpartsss A/opt/cloudlinux/venv/lib/python3.11/site-packages/distlib/util.py marker_varz parse_marker..marker_varAs   Y ' '  /XXZZ]F!!%%''((+II /788 8! A~~!":Y"FGGGq"%%B!!"" ICE AQ<1$$q\R''LL$$$ )!"" II$**955AU)*G)*STTTLLA/// )!%%''(( 3I AGGENN!";a"?@@@ LLOOOWWU^^F!!"" ,,..Iy  c|ro|ddkrc|dd\}}|ddkrtd|z|dd}n{|\}}|rit|}|snL|d}||d}|\}}|||d}|i|}||fS)Nr(r)unterminated parenthesis: %soplhsrhs)r(r# MARKER_OPr r!r")r)r+r9r*r8r:markerr1s r0 marker_exprz!parse_marker..marker_expres  1,, &y}';';'='= > > FI|s""!"@9"LMMM!!"" ,,..II'Z 22NC 9OOI..XXZZ]%aeegghh/ !+I!6!6YC88 9Fy  r2c|\}}|rOt|}|sn2||d}|\}}d||d}|O||fS)Nandr7)ANDr r")r)r9r*r:r=s r0 marker_andz parse_marker..marker_andxs$Y//Y 8 )$$A !!%%''((+I([33NCs377C  8I~r2c|\}}|rOt|}|sn2||d}|\}}d||d}|O||fS)Norr7)ORr r")r)r9r*r:rAs r0r<zparse_marker..markers#I..Y 7##A !!%%''((+I'Z 22NCc#66C  7I~r2) marker_stringr<rAr=r1s @@@@r0 parse_markerrG8sx"!"!"!H!!!!!!&           6-  r2c|}|r|drdSt|}|st d|z|d}||d}dx}x}x}}|r"|ddkr|dd}|dkrt d|z|d|} ||dzd}g}| rt| }|st d | z| |d| |d} | sn<| dd krt d | z| dd} | |sd}|r|dd kr|dd}t|}|st d |z|d}t|} | j r| j st d|z||d}n.d} |ddkr| |\}}n|dd}|dkrt d|z|d|} ||dzd}t| r| | \}} nt| }|st d| z|d} | |d} | rt d| zd| fg}|rL|ddkrt d|z|dd}t!|\}}|r|ddkrt d|z|s|}n$|ddd|D}t%||||||S)z Parse a requirement passed in as a string. Return a Container whose attributes contain the various parts of the requirement. #Nzname expected: %sr[]rzunterminated extra: %szmalformed extra: %s,zcomma expected in extras: %s@zinvalid URI: %szInvalid URL: %sctt|}d}|rg} |d}||d}t|}|st d|z|d}|||f||d}|r |ddkrnO|dd}|sn0t|}|st d|z|sd}||fS)z| Return a list of operator, version tuples if any are specified, else None. NTrzinvalid version: %srLrinvalid constraint: %s) COMPARE_OPr r!r"VERSION_IDENTIFIERr#r%r() ver_remainingr*versionsr8vs r0 get_versionsz'parse_requirement..get_versionssT $$]33(!HXXXZZ](5aeegghh(? .44]CC U"-.Cm.S"T"TTHHJJqM Q000(5aeegghh(? ," a0@C0G0G!(5abb(9(@(@(B(B  -"!&,,];; X"-.F.V"W"WW%X&$(#'..r2r4r5r6rOz~=;zinvalid requirement: %szunexpected trailing data: %s , cg|]}d|zS)z%s %srE).0cons r0 z%parse_requirement.. s,O,O,OsWs],O,O,Or2)nameextras constraintsr<url requirement)strip startswithrr r#r!r"findr(r% NON_SPACErschemenetlocrPrQrGr'r)reqr)r*distnamer^ mark_exprrSuriir/trU_rTrss r0parse_requirementrps  I  ,,S11t##A ;- 9:::xxzz!}H!%%''((#I*..F.Y.CYq\S(( NN3 " " q556BCC C acNa!eff%,,..    ##A =!"7!";<<< MM!((**Q- ( ( (!%%''(( A ts{{!"@1"DEEE!"" A  FG+ Q<3  !!"" ,,..I **A A!"3i"?@@@((**Q-C A H ; ;!"3c"9:::!!%%''((+2244II / / /@|s""&2l9&=&=#))NN3**q55%&Dy&PQQQacN%a!eff-4466 ##A&& +".,q//KHaa*0033AH)*BQ*FGGG 1 A!%%''(( **,,AH)*BQ*FGGG!%q {H7 Q<3  7)CDD DabbM((** +I66 9FYq\S((89DEEE R  $)),O,Oh,O,O,O"P"P"P Q (6x%3B @ @ @@r2cd}i}|D]\}}}tj||}t|D]}tj||} t| D]v} ||| } ||| d'||| } |tjjdd} | dz| z|| <w|S)z%Find destinations for resources filesc|tjjd}|tjjd}|t |ddSN/)r$ospathseplenr()rootrvs r0 get_rel_pathz)get_resources_dests..get_rel_pathsS||BGK--||BGK--CIIJJ&&s+++r2Nrt)rurvr'rpopr$rwrstrip)resources_rootrulesrz destinationsbasesuffixdestprefixabs_baseabs_globabs_path resource_filerel_pathrel_dests r0get_resources_destsrs,,,L# L Lfdnd33f L LHw||Hf55H!(OO L L , ^X F F < $$]D9999+|Hh??H#||BGK==DDSIIH2:S.82KL// L L r2cttdrd}n.tjttdtjk}|S)N real_prefixT base_prefix)hasattrsysrgetattrr+s r0in_venvr(s=sM""GwsM3:FFF Mr2cftj}t|tst |}|SN)r executable isinstancerrrs r0get_executabler2s/^F fi ( ("&!! Mr2c|} t|}|}|s|r|}|r)|d}||vrn |rd|||fz}C|S)NTrz %c: %s %s)r lower)prompt allowed_chars error_promptdefaultpr/cs r0proceedrDs|A = aLL  W A  =! AM!! = A|V#<< = Hr2ct|tr|}i}|D]}||vr ||||<|Sr)rrsplit)dkeysr+keys r0extract_by_keyrTsQ$ %%zz|| F!! !88C&F3K Mr2ctjddkrtjd|}|}t |} t j|}|ddd}|D]:\}}|D] \}}|d|}t|} | ||<!;|S#t$r| ddYnwxYwd} tj } | | |nX#tj$rF|t!j|}t |}| | |YnwxYwi}| D]?} ix|| <}| | D] \} }| d|}t|} | || <!@|S) Nrutf-8 extensionszpython.exportsexports = c~t|dr||dS||dS)N read_file)rrreadfp)cpstreams r0 read_streamz!read_exports..read_streamqsD 2{ # #  LL IIf     r2)r version_infocodecs getreaderreadr jsonloaditemsget_export_entry Exceptionseekr ConfigParserMissingSectionHeaderErrorclosetextwrapdedentsections)rdatajdatar+groupentrieskrTr/entryrrrr]values r0 read_exportsr]s$ a*!'**622 ;;==D d^^F  &!!|$%56yA$llnn # #NE7  # #1!"AA&(++"  #   Aq  " $ $B  B  1    t$$$ B  F{{}}"" ""s g88C== " "KD%!TT55)A$Q''E"GDMM  " Ms&A8C C43C4 DAE0/E0ctjddkrtjd|}t j}|D]\}}|||D]e}|j |j }n|j d|j }|j r |dd |j d}| ||j|f||dS)Nrrr:z [rXrK)rrr getwriterrrr add_sectionvaluesrrflagsr'setr]write)rrrrrTrr/s r0 write_exportsrs  a*!'**622  " $ $B  % %1 qXXZZ % %E|#L$|||U\\:{ >'**?+g5CCW^^G,,?RW^^G5L5L?4w>C F 'D!DEEE OFG , , , w'''''r2Nc|tj|td|||jsn|t|d}ntj|d|} tj ||| n#| wxYw| |dS)NzCopying stream %s to %swbwencoding) rrurvrrrropenrr copyfileobjrr )rinstreamrr& outstreams r0 copy_streamzFileOperator.copy_streams 00111 -xAAA| " $// "KxHHH  ""8Y777!!!! !!!! w'''''s B++Cc|tj||jsptj|rtj|t|d5}||dddn #1swxYwY| |dS)Nr#) rrurvrrrrr'rr )rrvrfs r0write_binary_filezFileOperator.write_binary_file's --...| w~~d##  $dD!! Q                 t$$$$$s=BB#&B#cX||||dSr)r.encode)rrvrr&s r0write_text_filezFileOperator.write_text_file0s* tT[[%:%:;;;;;r2c^tjdks tjdkrtjdkrz|D]y}|jrtd|%tj|j|z|z}td||tj||vdSdSdS)Nposixjavazchanging mode of %szchanging mode of %s to %o) rur]_namerrrrst_modechmod)rbitsmaskfilesr-modes r0set_modezFileOperator.set_mode3s 7g  "'V"3"3G8K8K & &<&KK 5q9999GAJJ.5=DKK ;QEEEHQ%%%%#4"38K8K & &r2c0|dd|S)Nimi)r<)r/r-s r0zFileOperator.?sqzz%'C'Cr2ctj|}||jvrtj|s|j|tj|\}}||t d|z|j stj ||j r |j |dSdSdSdS)Nz Creating %s)rurvrrrr rrrrrmkdirrr)rrvrr-s r0rzFileOperator.ensure_dirAswt$$ t| # #BGNN4,@,@ # L  T " " "7==&&DAq OOA    KK , - - -< { ,!%%d+++++ $ # # # , ,r2ct|| }td|||jsv|s|||r|sd}n|t |d}i}|r)t tdrtjj |d<tj |||dfi|| ||S)NzByte-compiling %s to %sPycInvalidationModeinvalidation_modeT) r rrrrrxr py_compilerB CHECKED_HASHcompiler ) rrvoptimizeforcerhashed_invalidationdpathdiagpathcompile_kwargss r0 byte_compilezFileOperator.byte_compileMs!$H 55 -tU;;;| N 2 4// 22#HH $CKKLL1HN" bwz;P'Q'Q b6@6T6a23  tUHd M Mn M M M u%%% r2ctj|r+tj|rtj|sft d||jstj ||j r%||j vr|j |dSdSdStj|rd}nd}t d|||jstj ||j r'||j vr |j |dSdSdSdS)NzRemoving directory tree at %slinkfilezRemoving %s %s)rurvrisdirrrdebugrr rrrrr)rrvr/s r0ensure_removedzFileOperator.ensure_removed^sX 7>>$   8w}}T"" 827>>$+?+? 8 >$''AAA -q$777|$IdOOO;8t111*11$77777% 8 8 8811r2cd}|sitj|r tj|tj}n*tj|}||krn|}|i|Sr)rurvraccessW_OKr)rrvr+parents r0 is_writablezFileOperator.is_writablessp w~~d## 411W__T**F~~D  r2cJ|j|jf}||S)zV Commit recorded changes, turn off recording, return changes. )rrr)rr+s r0commitzFileOperator.commits+ #T%66  r2c|jst|jD]5}tj|rtj|6t|jd}|D]f}tj |}|r:tj ||d}tj |tj |g| dS)NT)reverser) rlistrrurvrrsortedrlistdirr'rmdirr)rr-dirsrflistsds r0rollbackzFileOperator.rollbacks| $,-- ! !7>>!$$!IaLLL$+T:::D   1 !aq22BHRLLL  r2FTr)FFNF)rrrrrr rr!r+r.r1r<set_executable_moderrMrSrXrZrdrEr2r0rrs """ )))CCC(((((" ( ( ( (%%%<<< & & &DC , , ,"888*   r2rc |tjvrtj|}nt|}||}nM|d}t ||d}|D]}t ||}|S)N.r)rmodules __import__rrr{) module_name dotted_pathmodr+r.rs r0resolverosck!!k+&%%!!#&&eiill++ ( (AVQ''FF Mr2cDeZdZdZedZdZdZej Z dS) ExportEntryc>||_||_||_||_dSrr]rrr)rr]rrrs r0rzExportEntry.__init__s"    r2c6t|j|jSr)rorrr s r0rzExportEntry.valuest{DK000r2c Hd|jd|jd|jd|jd S)Nz rsr s r0__repr__zExportEntry.__repr__s204 4;;;04 TZZZI Ir2ct|tsd}n@|j|jko/|j|jko|j|jko|j|jk}|Sr)rrqr]rrr)rotherr+s r0__eq__zExportEntry.__eq__sh%-- 1FFi5:-0kU\10kU\10jEK/  r2N) rrrrrrrwrzr__hash__rEr2r0rqrqsb 11_1IIIHHHr2rqz(?P([^\[]\S*)) \s*=\s*(?P(\w+)([:\.]\w+)*) \s*(\[\s*(?P[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? ct|}|sd}d|vsd|vrtd|zn|}|d}|d}|d}|dkr|d}}n0|dkrtd|z|d\}}|d } | d|vsd|vrtd|zg} nd | d D} t |||| }|S) NrJrKzInvalid specification '%s'r]callablerrrrc6g|]}|SrErb)rZr-s r0r\z$get_export_entry..s 9991QWWYY999r2rL)ENTRY_REsearchr groupdictcountrrq) specificationr*r+rr]rvcolonsrrrs r0rrsX &&A : -  3-#7#7"$*,9$:;; ;$8 KKMMy}C Q;;!4FFF{{&(.0=(>???!ZZ__NFF'  =m##sm';';&(.0=(>???EE99 C(8(8999ET66599 Mr2c|d}tjdkr.dtjvr tjd}ntjd}tj|r=tj|tj}|st d|nG tj |d}n/#t$r"t d |d d }YnwxYw|s.tj}t d |tj||S) a Return the default base location for distlib caches. If the directory does not exist, it is created. Use the suffix provided for the base directory, and default to '.distlib' if it isn't provided. On Windows, if LOCALAPPDATA is defined in the environment, then it is assumed to be a directory, and will be the parent directory of the result. On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home directory - using os.expanduser('~') - will be the parent directory of the result. The result is just the directory '.distlib' in the parent directory as determined above, or with the name specified with ``suffix``. Nz.distlibnt LOCALAPPDATAz $localappdata~z(Directory exists but is not writable: %sTzUnable to create %s)exc_infoFz#Default location unusable, using %s)rur]environrv expandvars expanduserrQrUrVrwarningmakedirsOSErrorrrr')rr+usables r0get_cache_basers:~ w$>RZ77##O44##C(( w}}V 627++ O NNEv N N N  K   FF    NN0&4N H H HFFF  F!##sM F A#1!\** F E  Mr2z3([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-([a-z0-9_.+-]+)z -py(\d\.?\d?)czd}d}t|dd}t|}|r1|d}|d|}|r{t |t |dzkrXtjtj |dz|}|r,| }|d|||dzd|f}|Gt|}|r+|d|d|f}|S)zw Extract name, version, python version from a filename (no extension) Return name, version, pyver or None NrW-rz\br) rr$PYTHON_VERSIONrrstartrxrer escaper"PROJECT_NAME_AND_VERSION)filename project_namer+pyverr*ns r0split_filenamerMs+ F Ex  ((c22Hh''A( JQWWYYJ';H L(9(9A(=== HRY|,,u4h ? ?  ;Abqb\8AEFF#3U:F ~ $ * *8 4 4  3WWQZZU2F Mr2z-(?P[\w .-]+)\s*\(\s*(?P[^\s)]+)\)$ct|}|std|z|}|d|dfS)z A utility method used to get name and version from a string. From e.g. a Provides-Dist value. :param p: A value in a form 'foo (1.0)' :return: The name and version as a tuple. z$Ill-formed name/version string: '%s'r]ver)NAME_VERSION_REr rrrbr)rr*rs r0parse_name_and_versionrisj a  A MG!KLLL A V9??   " " $ $ah ..r2ct}t|pg}t|pg}d|vr|d||z}|D]}|dkr|||drE|dd}||vrtd|z||vr||x||vrtd|z|||S)N*rrzundeclared extra: %s)rrr rcrr) requested availabler+runwanteds r0 get_extrasrxs UUFIO$$IIO$$I i)    88 JJqMMMM \\#   uHy((5@AAA6!! h''' !!59::: JJqMMMM Mr2ci} t|}|}|d}|dstd|n1t jd|}tj |}n3#t$r&}t d||Yd}~nd}~wwxYw|S)Nz Content-Typezapplication/jsonz(Unexpected response for JSON request: %srz&Failed to get external data for %s: %s) r rgetrcrrRrrrrr exception)r`r+respheadersctreaderes r0_get_external_datars FKs||))++ [[ ( (}}/00 ' LLCR H H H H.V%g..t44FYv&&F KKKA3JJJJJJJJK MsBB C)C  Cz'https://www.red-dove.com/pypi/projects/c|dd|d}tt|}t|}|S)Nrrtz /project.jsonupperr_external_data_base_urlr)r]r`r+s r0get_project_datarsB"&q'--////444 8C )3 / /C  $ $F Mr2c|dd|d|d}tt|}t|S)Nrrtz /package-z.jsonr)r]versionr`s r0get_package_datarsD%)!W]]____dddGGG DC )3 / /C c " ""r2c$eZdZdZdZdZdZdS)Cachez A class implementing a cache for resources that need to live in the file system e.g. shared libraries. This class was moved from resources to here because it could be used by other modules, e.g. the wheel module. cdtj|stj|tj|jdzdkrt d|tjtj ||_ dS)zu Initialise an instance. :param base: The base directory where the cache should be located. ?rzDirectory '%s' is not privateN) rurvrQrrr6rrrnormpathr)rrs r0rzCache.__init__sw}}T""  K    GDMM !D (Q . . NN>"%%&););&IbMMMMW]]2&&&M"%%% ' ' '""2&&&&& 'sBC  C-,C-N)rrr__doc__rrrrEr2r0rrsK < < <))) r2rc2eZdZdZdZd dZdZdZdZdS) EventMixinz1 A very simple publish/subscribe system. ci|_dSr) _subscribersr s r0rzEventMixin.__init__sr2Tc|j}||vrt|g||<dS||}|r||dS||dS)a` Add a subscriber for an event. :param event: The name of an event. :param subscriber: The subscriber to be added (and called when the event is published). :param append: Whether to append or prepend the subscriber to an existing subscriber list for the event. N)rrr% appendleft)revent subscriberr%subssqs r0r zEventMixin.addso     --DKKKeB * *%%%%% j)))))r2cv|j}||vrtd|z|||dS)z Remove a subscriber for an event. :param event: The name of an event. :param subscriber: The subscriber to be removed. zNo subscribers: %rN)rrr)rrrrs r0rzEventMixin.removesI    1E9:: : U :&&&&&r2cRt|j|dS)z Return an iterator for the subscribers for an event. :param event: The event to return subscribers for. rE)iterrr)rrs r0get_subscriberszEventMixin.get_subscriberss% D%))%44555r2cg}||D]Q} ||g|Ri|}n,#t$rtdd}YnwxYw||Rtd|||||S)a^ Publish a event and return a list of values returned by its subscribers. :param event: The event to publish. :param args: The positional arguments to pass to the event's subscribers. :param kwargs: The keyword arguments to pass to the event's subscribers. z"Exception during event publicationNz/publish %s: args = %s, kwargs = %s, result = %s)rrrrr%rR)rrargskwargsr+rrs r0publishzEventMixin.publish s..u55 ! !J " 5:4:::6::     !EFFF  MM%  FD&& 2 2 2 s (&AANrf) rrrrrr rrrrEr2r0rrsn****( ' ' '666r2rcfeZdZdZdZd dZdZdZdZdZ e d Z e d Z d S) SequencercHi|_i|_t|_dSr)_preds_succsr_nodesr s r0rzSequencer.__init__(s  ee r2c:|j|dSr)rr )rnodes r0add_nodezSequencer.add_node-s r2Fc0||jvr|j||rt|j|dD]}|||t|j|dD]}|||t |jD]\}}|s|j|=t |jD]\}}|s|j|=dSdS)NrE)rrrrrrr]r)rredgesrr/rrTs r0 remove_nodezSequencer.remove_node0s3 4;   K  t $ $ $  'r2233 % % At$$$$r2233 % % D!$$$$T[..0011 ' '1' AT[..0011 ' '1' A ' ' ' 'r2c|j|t||j|t|dSr)r setdefaultrr r)rpredsuccs r0r z Sequencer.add@s\ tSUU++//555 tSUU++//55555r2c |j|}|j|}n #t$rtd|zwxYw ||||dS#t$rt|d|wxYw)Nz%r not a successor of anythingz not a successor of )rrKeyErrorrr)rrrpredssuccss r0rzSequencer.removeEs FK%EK%EE F F F=DEE E F H LL    LL      H H H444FGG G Hs:*A**B c8||jvp||jvp||jvSr)rrr)rsteps r0is_stepzSequencer.is_stepRs. #$tt{':$ # %r2c ||std|zg}g}t}|||r|d}||vr1||kr*||||nZ|||||j|d}| ||t|S)Nz Unknown: %rrrE) rrrr%r{rr rrextendreversed)rfinalr+todoseenrrs r0 get_stepszSequencer.get_stepsVs||E"" 4]U233 3uu E #88A;;Dt|| 5==MM$'''MM$''' d### b11 E""" # r2cvdggiig|jfdD]}|vr |S)Nrc<d|<d|<dxxdz cc< | |}n#t$rg}YnwxYw|D]T}|vr+ |t|||<1| vrt|||<U||krZg} }||||krn1t |} |dSdSNrr)r%rminr{tuple) r successors successorconnected_component componentgraphindex index_counterlowlinksr+stack strongconnects r0rz3Sequencer.strong_connections..strongconnectzsx'*E$K*1-HTN !    !    LL    "4[      ' J J H,,!M),,,%($8K%L%LHTNN%''&)$i8H%I%IHTN~t,,&(#0 % I'..y999 D((%0""566  i(((((-,sA AA)r) rrrrrrr+rrs @@@@@@@r0strong_connectionszSequencer.strong_connectionsos   ) ) ) ) ) ) ) ) ) ) )D $ $D8## d### r2c dg}|jD]0}|j|}|D]}|d|d|d1|jD]}|d|z|dd|S)Nz digraph G {z z -> rVz %s;} )rr%rr')rr+rrrrs r0dotz Sequencer.dotsK < .check_paths$ ** (;;w''D GOOBGLL488 9 9||H%% A4BF):):;a?@@ @*;):r2)r"r%zip)rr#tgzzr:gz)r r$tbzzr:bz2r!tarrzUnknown format for %rrrrc tj||S#tj$r!}tt |d}~wwxYw)z9Run tarfile.tar_filter, but raise the expected ValueErrorN)tarfile tar_filter FilterErrorrstr)memberrvexcs r0extraction_filterz$unarchive..extraction_filtersP +)&$777& + + + S*** +sAAA)rurvrrxrrrnamelistr1r'getnamesrr getmembersrr]rr(r7 extractallr) archive_filenamer)formatrr+archiver;namesr]tarinfor7r*s ` @r0 unarchiverAspAAAAAAwx((H x==DG ~  $ $%5 6 6 IFF  & &': ; ; IFDD  & &'; < < IFDD  & &v . . IFDD47GGHH H& U??.44G %((**!%%DJt$$$$l#3T::G %((**!%%DJt$$$$ U??s/2Q66 #--// @ @!', ::@#*<#6#6w#?#?GL  + + +%6!8$$$   MMOOOOO  7  MMOOOO s 4DGG*ctj}t|}t|d5}t j|D]k\}}}|D]b}tj||}||d} tj| |} ||| cl dddn #1swxYwY|S)z*zip a directory tree into a BytesIO objectr$N) ioBytesIOrxrruwalkrvr'r) directoryr+dlenzfryrar:r]fullrelrs r0zip_dirrKs Z\\F y>>D   %!#!3!3 % % D$ % %w||D$//455kw||C..t$$$$  % %%%%%%%%%%%%%%%% MsBCCC)rKMGTPceZdZdZddZdZdZdZdZe d Z e d Z d Z e d Z e d ZdS)ProgressUNKNOWNrdcZ|x|_|_||_d|_d|_d|_dS)NrF)r curmaxstartedelapseddone)rminvalmaxvals r0rzProgress.__init__s0$$48   r2cx||_tj}|j ||_dS||jz |_dSr)rVtimerXrY)rcurvalnows r0updatezProgress.updates;ikk < DLLL-DLLLr2c@||j|zdSr)rarV)rincrs r0 incrementzProgress.increment!s  DHtO$$$$$r2c:||j|Sr)rar r s r0rzProgress.start%s DH r2cV|j||jd|_dSNT)rWrarZr s r0stopz Progress.stop)s) 8  KK ! ! ! r2c,|j|jn|jSr)rWunknownr s r0maximumzProgress.maximum.s#x/t||TX=r2c||jrd}n1|jd}n'd|j|jz z|j|jz z }d|z}|S)Nz100 %z ?? %gY@z%3d %%)rZrWrVr )rr+rTs r0 percentagezProgress.percentage2sQ 9 "FF X FFDH,-DH1DEA\F r2c|dkr|j|j|jkrd}n'tjdtj|}|S)Nrz??:??:??z%H:%M:%S)rWrVr r^strftimegmtime)rdurationr+s r0format_durationzProgress.format_duration=sI MMtx/48tx3G3GFF]:t{8/D/DEEF r2c"|jr d}|j}ned}|jd}nY|jdks|j|jkrd}n;t |j|jz }||j|jz z}|dz |jz}|d||S)NDonezETA rrrz: )rZrYrWrVr floatrr)rrrms r0ETAz Progress.ETAFs 9 +F AAFx""tx48';';$(TX-..TX((Udl*!664#7#7#:#:#:;;r2c|jdkrd}n|j|jz |jz }tD]}|dkrn|dz}d||fzS)Nrgig@@z%d %sB/s)rYrVr UNITS)rr+units r0speedzProgress.speedYsc <1  FFh)T\9F  D}} f FFVTN**r2N)rrT)rrrrjrrardrrhrrkrmrrrvrzrEr2r0rRrR sG...%%% >>X>X<<X<$ + +X + + +r2rRz \{([^}]*)\}z[^/\\,{]\*\*|\*\*[^/\\,}]z^[^{]*\}|\{[^}]*$ct|rd}t||zt|rd}t||zt |S)zAExtended globbing function that supports ** and {opt1,opt2,opt3}.z7invalid glob %r: recursive glob "**" must be used alonez2invalid glob %r: mismatching set marker '{' or '}')_CHECK_RECURSIVE_GLOBrr_CHECK_MISMATCH_SET_iglob) path_globr s r0rrnsj##I..*Ky)))!!),,*Fy))) )  r2c#Kt|d}t|dkrL|\}}}|dD].}td|||fD]}|V/dSd|vrt |D]}|VdS|dd\}}|dkrd}|dkrd}n*|d}|d}tj|D]Y\}}} tj |}ttj ||D]} | VZdS) NrrLrz**rirrt\) RICH_GLOBrrxr~r' std_iglobr(rurErvr) rrich_path_globrrritemrvradicaldirr:rs r0r~r~ys__Y22N >Q,VIIcNN  Drwwf'=>>??       y !),,     (oodA66OFG||"}}"..--!....$&GFOO   c5w''-- dG!#>#>"$D #W%;A%>%>>D ""r2NrrrrrrrEr2r0rrs79999#####r2rceZdZddZdZdS) SafeTransportrcT||_tj||dSr)rrrrrs r0rzSafeTransport.__init__s("DL  # , ,T< @ @ @ @ @r2c||\}}}|si}|j|d<|jr||jdkr!||_|t j|dfi|f|_|jdS)Nrrr)rrrrrr)rrrrrs r0rzSafeTransport.make_connections ..t44MAr6  $ F9 # Ktt/?/B'B'B&(##')@D*K*KCI*K*K$K #A& &r2NrrrEr2r0rrs; A A A A ' ' ' ' 'r2rceZdZdZdS) ServerProxyc &|ddx|_}|Yt|d}|dd}|dkrt}nt }|||x|d<}||_tjj ||fi|dS)Nrrrhttps)r transport) r{rrrrrrrrr)rrkrrrfrtclsrms r0rzServerProxy.__init__s!'It!> >> r2c|SrrEr s r0__iter__zCSVReader.__iter__Hrr2ct|j}tjddkrBt |D]2\}}t |t s|d||<3|SNrrr)nextrrrrrrr()rr+rlrs r0rzCSVReader.nextKsldk""  A  " "$V,, 5 54!$ 225 $ G 4 4F1I r2N)rrrrrr__next__rEr2r0rr<sB ? ? ?HHHr2rceZdZdZdZdS) CSVWriterc rt|d|_tj|jfi|j|_dS)Nr$)rrrwriterr)rrrs r0rzCSVWriter.__init__Vs4C(( j>> >> r2ctjddkrHg}|D]A}t|tr|d}||B|}|j|dSr)rrrrr0r%rwriterow)rrowrrs r0rzCSVWriter.writerowZs~  A  " "A  dI..0;;w//DC S!!!!!r2N)rrrrrrEr2r0rrUs2???"""""r2rc\eZdZeejZded<dfd ZdZdZdZ xZ S) Configurator inc_convertincNctt|||ptj|_dSr)superrrrurr)rconfigr __class__s r0rzConfigurator.__init__ms7 lD!!**6222'BIKK r2c fd d}t|s|}dd}dd}|rt fd|D} fdD}t |}||i|}|r4|D]\}} t || |  |S)NcJt|ttfr%t|fd|D}n`t|tr6d|vr|}n1i}|D]}||||<n|}|S)Nc&g|] }|SrErE)rZrlconverts r0r\zBConfigurator.configure_custom..convert..ts!!8!8!8''!**!8!8!8r2())rr]rtypedictconfigure_customr)or+rrrs r0rz.Configurator.configure_custom..convertrs!dE]++ ) a!8!8!8!8a!8!8!899At$$ )199!22155FFF22$+GAaDMMq 2aMr2rriz[]rEc&g|] }|SrErE)rZrrs r0r\z1Configurator.configure_custom..s!333''!**333r2cTg|]$}t|||f%SrE)r)rZrrrs r0r\z1Configurator.configure_custom..s7KKKQKNNK!WWVAY''(KKKr2)r{r}rorrrsetattr) rrrpropsrrrr+rrTrs `` @r0rzConfigurator.configure_customqs#       JJt  {{  QA 3%%zz$##  53333d33344DKKKKK&KKKeD#F##  /  / /1771::.... r2c|j|}t|tr#d|vr||x|j|<}|S)Nr)rrrr)rrr+s r0 __getitem__zConfigurator.__getitem__sMS! fd # # F(,(=(=f(E(E EDK v r2ctj|s%tj|j|}t j|dd5}tj|}dddn #1swxYwY|S)z*Default converter for the inc:// protocol.rrr%N) rurvisabsr'rrr'rr)rrr-r+s r0rzConfigurator.inc_convertsw}}U## 3GLLE22E [g 6 6 6 "!Yq\\F " " " " " " " " " " " " " " " sA==BBr) rrrrrvalue_convertersrrr r __classcell__)rs@r0rrhst,=>>+U((((((> r2rc&eZdZdZddZdZdZdS)SubprocessMixinzC Mixin for running subprocesses and capturing their output FNc"||_||_dSr)verboseprogress)rrrs r0rzSubprocessMixin.__init__s   r2c~|j}|j} |}|sn| |||nr|s tjdn2tj|dtj|dS)z Read lines from a subprocess' output stream and either pass to a progress callable (if specified) or write progress information to sys.stderr. TNrir) rrreadlinerstderrrr(flushr)rrrrrr/s r0rzSubprocessMixin.readers =, #!!A #G$$$$8J$$S))))J$$QXXg%6%6777   """ #  r2c 0tj|ftjtjd|}tj|j|jdf}|tj|j|jdf}|| | | |j | ddn&|j rtjd|S)N)stdoutrr)rrrzdone.mainzdone. ) subprocessPopenPIPE threadingThreadrrrrwaitr'rrrr)rcmdrrt1t2s r0 run_commandzSubprocessMixin.run_commands  S ?$.O ? ?7= ? ?  T[(7K L L L   T[(7K L L L       = $ MM'6 * * * * \ ( J  Y ' ' 'r2)FN)rrrrrrr#rEr2r0rrsP!!!!*r2rcRtjdd|S)z,Normalize a python package name a la PEP 503z[-_.]+r)rsubr)r]s r0normalize_namer&s$ 6(C & & , , . ..r2c*eZdZdZdZddZdZdZdS) PyPIRCFilezhttps://upload.pypi.org/legacy/pypiNc|=tjtjdd}||_||_dS)Nrz.pypirc)rurvr'rrr`)rrr`s r0rzPyPIRCFile.__init__s> :bg0055yAAB r2ci}tj|jr|jp|j}t j}||j| }d|vr| dd}d| dD}|gkr d|vrdg}n|D]}d|i}| |d|d<d|jfd |j fd fD]:\}} | ||r| ||||<5| ||<;|dkr||jdfvr |j|d<|d|kr|d|kri}nod |vrkd }| |dr| |d}n|j}| |d| |d |||j d }|S)N distutilsz index-serverscfg|].}|dk|/S)rr)rZservers r0r\z#PyPIRCFile.read..s<555v%||~~33#LLNN333r2rr)r.r repositoryrealm)rNz server-loginr)rrr/r.r0)rurvrrr`DEFAULT_REPOSITORYrRawConfigParserrrrr DEFAULT_REALM has_option) rr+r/rr index_servers_serversr.rrs r0rzPyPIRCFile.readsJ 7>>$- ( (4 >))$*8"*(("*F!3-3ZZ -K-Kz*/;D > & 6: > >",$!/  r2ctj}|j}|||ds|d|dd||dd|t|d5}||ddddS#1swxYwYdS)Nr)rrr$) rr2rr has_sectionrrr'r)rrrrrr-s r0razPyPIRCFile.update!s-// ] B!!&)) '   v & & & 6:x000 6:x000 "c]] a LLOOO                  sB;;B?B?NN)rrrr1r3rrrarEr2r0r(r(sR:M 888t     r2r(cPt|jS)zG Read the PyPI access configuration as supported by distutils. )r`)r(r`rrs r0 _load_pypircr<-s# %) $ $ $ ) ) + ++r2c^t|j|jdSr)r(rarrr;s r0 _store_pypircr>3s&LL77777r2c$tjdkrrdtjvrdSdtjvrdSdtjvrdStjSdtjvrtjdStjd ksttd s tjStj\}}}}}| d d }| d d d d}|dddkr|d|S|dddkrQ|ddkrDd}dt|ddz |ddfz}ddd}|d|tj zz }n|dddkrddl m }|S|dd d!krMd!}tjd"tj}||}|r|}n\|dd d#krNddl} dd$lm} n#t,$rddl} YnwxYw| | |||\}}}|d|d|S)%aReturn a string that identifies the current platform. This is used mainly to distinguish platform-specific build directories and platform-specific built distributions. Typically includes the OS name and version and the architecture (as supplied by 'os.uname()'), although the exact information included depends on the OS; eg. on Linux, the kernel version isn't particularly important. Examples of returned values: linux-i586 linux-alpha (?) solaris-2.6-sun4u Windows will return one of: win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc) win32 (all others - specifically, sys.platform is returned) For other non-POSIX platforms, currently just returns 'sys.platform'. ramd64 win-amd64z(arm) win-arm32z(arm64)z win-arm64_PYTHON_HOST_PLATFORMr3unamertrrWrnrNlinuxsunosr5solarisz%d.%sr32bit64bit)ilz.%saix) aix_platformcygwinz[\d.]+darwin) sysconfig)rur]rrrplatformrrrDr$intmaxsize _aix_supportrNrrFASCIIr r _osx_supportr,rR ImportErrorget_platform_osxget_config_vars) osnamerreleasermachinebitnessrNrel_rer*rXrRs r0get_host_platformra;s( w$ ck'')) ) ); ck'')) ) );  ))++ + +;|"*,,z122 w'W!5!5|13 -VT7GW\\^^ # #C , ,Fooc3''//S99G bqbzW"6677++ w   1:  FWQZ1!4gabbk BBG#*wGGG uws{33 3G u  ------|~~ x  Y11 LL ! !  ggiiG x    + + + + + + +          #/#@#@(1(A(A(C(C(.$B$B  '' 22s?IIIwin32rArB)x86x64armctjdkrtStjd}|t vrtSt |S)NrVSCMD_ARG_TGT_ARCH)rur]rarr_TARGET_TO_PLAT)cross_compilation_targets r0 get_platformrjsQ w$ """!z~~.BCC66 """ 3 44r2r9)rrrg)r collectionsr contextlibrglobrrrCrloggingrurDrrrrYrrr1rrrdummy_threadingr^rrcompatrrr r r r r rrrrrrrrrrrrrr getLoggerrrrFrrQrPr;rDr@rer&rGrprrrrrrrcontextmanagerrrrrrrrrorqVERBOSErrrrrrrrIrrrrrrrrrrrrrARCHIVE_EXTENSIONSrArKrxrRrr|r}r~rrrrrrrrrrrrrrrr&r(r<r>rarhrjrEr2r0rvs    ######   JJJJ CCC ((((''''''( ((((((((((((((((((((((((((((((((((((((((((((((  8 $ $ RZ) * * RZ 344 RZ5 6 6 BJD E E RZ bj BJ{ # # rzEFF V!V!V!rz@z@z@z4$     ,,,^&   &&&&     f      6uuuuu6uuun   &8 2:: ' ' >&(&(&(&(R"   & & & &2:'89;??,--2"*9:: / / /2(D ### )))))F)))XCCCCCCCCPE!E!E!E!E!E!E!E!V.@@@@F   " $W+W+W+W+W+vW+W+W+z BJ~ & & " #?@@ bj!5666V3++++++++++'1B'R33333<333 # # # # # # # # #'''''' /'''"<<<<<)'<<<,$$$     f   2 " " " " " " " "&44444#444n+++++f+++\///OOOOOOOOb,,, 888R3R3R3l   55555s!;AAA"" A.-A.