python (3.11.7)

(root)/
lib/
python3.11/
site-packages/
setuptools/
__pycache__/
package_index.cpython-311.pyc

*eTdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
ZddlZddlZddlZddlmZddlZddlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ddl%m&Z&ddl'm(Z(ddl)m*Z*ddl+m,Z,dd	l-m.Z.ej/d
Z0ej/dej1Z2ej/dZ3ej/d
ej1j4Z5d6Z7gdZ8dZ9dZ:e:;dj;ej<eZ=dZ>dZ?dZ@d1dZAd1dZBd1dZCdedfdZDdZEej/dej1ZFeEdZGGddZHGd d!eHZIGd"d#eZJej/d$jKZLd%ZMd&ZNd2d'ZOd(ZPGd)d*ZQGd+d,ejRZSejTjUfd-ZVd.ZWeOe9eVZVd/ZXd0ZYdS)3z#PyPI and direct package downloadingNwraps)
CHECKOUT_DISTDistributionBINARY_DISTnormalize_pathSOURCE_DISTEnvironmentfind_distributions	safe_namesafe_versionto_filenameRequirementDEVELOP_DISTEGG_DIST
parse_version)log)DistutilsError)	translate)Wheelunique_everseenz^egg=([-A-Za-z0-9_.+!]+)$zhref\s*=\s*['"]?([^'"> ]+)z<a href="([^"#]+)">([^<]+)</a>\n\s+\(<a (?:title="MD5 hash"\n\s+)href="[^?]+\?:action=show_md5&amp;digest=([0-9a-f]{32})">md5</a>\)z([-+.a-z0-9]{2,}):z.tar.gz .tar.bz2 .tar .zip .tgz)PackageIndexdistros_for_urlparse_bdist_wininstinterpret_distro_namez<setuptools/{setuptools.__version__} Python-urllib/{py_major}z{}.{})py_major
setuptoolscv	tj|S#t$r}td||d}~wwxYw)Nz/Not a URL, existing file, or requirement spec: )rparse
ValueErrorr)speces  Z/BuggyBox/python/3.11.7/bootstrap/lib/python3.11/site-packages/setuptools/package_index.pyparse_requirement_argr&6sV &&&nCG4I

	s
838c|}d\}}}|dr|dr
|dd}d}n{|ddr|d	d
}|dd}d}nN|dr
|dd}d
}n,|ddr|d	d
}|dd}d
}|||fS)z=Return (base,pyversion) or (None,None) for possible .exe name)NNN.exez
.win32.exeNiwin32z	.win32-pyiiz.win-amd64.exeiz	win-amd64z
.win-amd64-pyi)lowerendswith
startswith)namer+basepy_verplats     r%rr?s
JJLLE)D&$~~f>>,''
	:DDD


k3
/
/
	"R%[F:DDD
^^,
-
-	:DDD


os
3
3	"R%[F:DDctj|}|\}}}}}}tj|dd}|dkr>|dkr8tj|dd}d|vr|dd\}}||fS)N/zsourceforge.netdownload#)urllibr!urlparseunquotesplit)	urlpartsschemeserverpath
parametersqueryfragmentr/s	         r%egg_info_for_urlrFWsL!!#&&E8=5FFD*eX<

3 344D
"""tz'9'9|##DJJsOOB$788
d{{C++h>r2c#Kt|\}}t|||D]}|V|rNt|}|r4t	||d|tD]
}|VdSdSdS)zEYield egg or source distribution objects that might be found at a URLr9)
precedenceN)rFdistros_for_locationEGG_FRAGMENTmatchrgroupr)r>metadatar/rEdistrKs      r%rrbs%c**ND($S$99



""8,,	-U[[^^X-






		

r2c|dr
|dd}|drd|vrtj|||gS|drOd|vrKt|}|sgSt||j|jtdzgS|d	r.t|\}}}|t||||t|StD]B}||r+|dt|}t|||cSCgS)
z:Yield egg or source distribution objects based on basename.egg.zipNr*z.egg-z.whlr9)locationproject_nameversionrHr()
r,r
from_locationr
is_compatiblerSrTrrrr
EXTENSIONSlen)rRbasenamerMwheelwin_baser0platformexts        r%rIrIps$$!CRC=  JSH__*8XxHHII  
SH__h""$$	I+M!|


	  %8%B%B"&(((Hfk8

GGS!!	G
#c((
+H(8XFFFFF	GIr2cxtt|tj||S)zEYield possible egg or source distribution objects based on a filename)rIrosrBrY)filenamerMs  r%distros_for_filenameras3x  "'"2"28"<"<hr2c#`K|d}|s#td|ddDrdStdt|dzD]P}t	||d|d|d||d|||VQdS)zGenerate alternative interpretations of a source distro name

    Note: if `location` is a filesystem filename, you should call
    ``pkg_resources.normalize_path()`` on it before passing it to this
    routine!
    rQc3@K|]}tjd|VdS)z	py\d\.\d$N)rerK).0ps  r%	<genexpr>z(interpret_distro_name.<locals>.<genexpr>s.KKAbh|Q77KKKKKKr2Nr9)
py_versionrHr\)r=anyrangerXrjoin)rRrYrMrirHr\r?rfs        r%rrs,
NN3E#KKqrrKKKKK
1c%jj1n
%
%

hrr 3 3SXXeABBi5H5H!j


	
	
	
	


r2c<tfd}|S)zs
    Wrap a function returning an iterable such that the resulting iterable
    only ever yields unique items.
    c.t|i|SNr)argskwargsfuncs  r%wrapperzunique_values.<locals>.wrappers ttT4V44555r2r)rrrss` r%
unique_valuesrts54[[6666[6Nr2z(<([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>c
#Kt|D]}|\}}tt	t
j|d}d|vsd|vr_t|D]D}tj|t|dVEdD]|}||}|dkr_t||}|rBtj|t|dV}dS)zEFind rel="homepage" and rel="download" links in `page`, yielding URLs,homepager6r9)z
<th>Home Pagez<th>Download URLr5N)RELfinditergroupssetmapstrstripr+r=HREFr:r!urljoin
htmldecoderLfindsearch)r>pagerKtagrelrelsposs       r%find_external_linksrsMd##LL<<>>S3sy#))++"3"3C"8"899::t!3!3s++
L
Ll**3
5;;q>>0J0JKKKKKK4LLiinn"99KKc**E
Ll**3
5;;q>>0J0JKKKKKLLr2c$eZdZdZdZdZdZdS)ContentCheckerzP
    A null content checker that defines the interface for checking content
    cdS)z3
        Feed a block of data to the hash.
        Nselfblocks  r%feedzContentChecker.feeds		r2cdS)zC
        Check the hash. Return False if validation fails.
        Trrs r%is_validzContentChecker.is_valids	tr2cdS)zu
        Call reporter with information about the checker (hash name)
        substituted into the template.
        Nr)rreportertemplates   r%reportzContentChecker.reports	
	r2N)__name__
__module____qualname____doc__rrrrr2r%rrsKr2rc\eZdZejdZdZedZdZ	dZ
dZdS)HashCheckerzK(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=(?P<expected>[a-f0-9]+)cT||_tj||_||_dSro)	hash_namehashlibnewhashexpected)rrrs   r%__init__zHashChecker.__init__s%"K	**	 


r2ctj|d}|stS|j|}|stS|di|S)z5Construct a (possibly null) ContentChecker from a URLr5r)r:r!r;rpatternr	groupdict)clsr>rErKs    r%from_urlzHashChecker.from_urls{<((--b1	$!###""8,,	$!###s''U__&&'''r2c:|j|dSro)rupdaters  r%rzHashChecker.feeds	r2cF|j|jkSro)r	hexdigestrrs r%rzHashChecker.is_validsy""$$
55r2c,||jz}||Sro)r)rrrmsgs    r%rzHashChecker.reports'x}}r2N)rrrrdcompilerrclassmethodrrrrrr2r%rrsbj	#G
!!!
(([(   666r2rc&eZdZdZ		d+fd	ZfdZd,d	Zd,d
Zd,dZdZ	d
Z
dZdZdZ
d-dZdZd-fd	ZdZdZdZdZdZ		d.dZd/dZdZdZdZdZd-dZd Zd!Zd"Zd#Z d$Z!e"d,d%Z#d&Z$d'Z%d(Z&d)Z'd*Z(xZ)S)0rz;A distribution index that scans web pages for download URLshttps://pypi.org/simple/*NTcrtj|i||dd|dz|_i|_i|_i|_tjd	tt|j|_
g|_tjj|_dS)Nr4|)superrr,	index_urlscanned_urlsfetched_urls
package_pagesrdrrlr|rrKallowsto_scanr:requesturlopenopener)rrhosts	ca_bundle
verify_sslrpkw	__class__s       r%rzPackageIndex.__init__s	$%"%%%"S*Fy/A/A#/F/F+F*F%GGj#i*?*?!@!@AAGn,r2c	t|jn#t$rYdSwxYwt|Sro)rrT	Exceptionradd)rrNrs  r%rzPackageIndex.add)sS	$,''''			FF	ww{{4   s
&&Fc	||jvr|sdSd|j|<t|s||dStt	|}|r-||sdS|d||s|r	||jvr$tt|j	|dS||sd|j|<dS|
d|d|j|<d}||||z}|dSt|tjjr(|jdkr|
d|jzd|j|j<d|jd	d
vr|dS|j}|}t|t0sTt|tjjrd}n|jdpd}||d
}|t6|D]W}	tj|t?|	 d}
|!|
X|"|j#r-tI|dddkr|%||}dSdSdS)z<Evaluate a URL as a possible download, and maybe retrieve itNTzFound link: %sz
Reading %sz<Download error on %s: %%s -- Some packages may not be found!izAuthentication error: %shtmlcontent-typezlatin-1charsetignorer9code)&r
URL_SCHEMEprocess_filenamelistrurl_okdebugrr|rinfoopen_url
isinstancer:error	HTTPErrorrrr>headersgetr+closereadr}	get_paramdecoderryr!rrrLprocess_urlr-rgetattr
process_index)rr>retrievediststmplfr/rrrKlinks           r%rzPackageIndex.process_url2s$###H#F!%##	2!!#&&&F--..E
2{{3''F

+S111		C4+<$<$<TXu%%&&&F{{3	%)Dc"F		,$$$!%#MMM#tcz**9Fa/00	:QVs]]II0158999#'!% ~r::@@BBBB
GGIIIFuvvxx$$$	2!V\344
F#)--i88EI;;w11D				]]4((	#	#E<''jQ.H.HIIDT"""">>$.))	1ga.F.F#.M.M%%c400DDD	1	1.M.Mr2c tj|s|d|dStj|rl|sjtj|}tj|D]6}|tj||d7t|}|r:|
d|tt|j
|dSdS)Nz
Not found: %sTz	Found: %s)r_rBexistswarnisdirrealpathlistdirrrlrarrr|r)rfnnestedrBitemrs      r%rzPackageIndex.process_filenamegsw~~b!!	IIor***F
7==	FV	F7##B''D
4((
F
F%%bgll4&>&>EEEE$R((	'JJ{B'''TXu%%&&&&&	'	'r2cNt|}|o*|ddk}|s8|tj|drdSd}|rt||z|||dS)Nr9fileTzN
Note: Bypassing %s (disallowed host; see http://bit.ly/2hrImnY for details).
)	rrLr+rr:r!r;rr)rr>fatalsis_filers      r%rzPackageIndex.url_okwssOO4

((**f4	dkk&,"7"7"<"<Q"?@@	4
4		  s+++IIc3r2cttjj|}d|D}t	tj|j|dS)Nc3vK|]4}tj|D]}|d||fV5dS)z	.egg-linkN)r_rr,)rerBentrys   r%rgz.PackageIndex.scan_egg_links.<locals>.<genexpr>sm

D))

~~k**	

5M






r2)filterr_rBrr	itertoolsstarmap
scan_egg_link)rsearch_pathdirs	egg_linkss    r%scan_egg_linkszPackageIndex.scan_egg_linkssYbgm[11




		
Y
t19
=
=>>>>>r2c
ttj||5}t	tdt
tj|}dddn#1swxYwYt|dkrdS|\}}ttj||D]?}tjj|g|R|_t|_
||@dS)Nrh)openr_rBrlrrr|r}r~rXrrRr	rHr)rrBr	raw_lineslinesegg_path
setup_pathrNs        r%rzPackageIndex.scan_egg_links)
"',,tU++
,
,	B	c#)Y&?&?@@AAE	B	B	B	B	B	B	B	B	B	B	B	B	B	B	Bu::??F$*&rw||D('C'CDD		DGL6666DM)DOHHTNNNN		s6A00A47A4c	d}||js|Stttjj|t|jdd}t|dks
d|dvr|St|d}t|d}d|j|
i|<t|t|fS)N)NNr4rhr8r9rT)r-rrr|r:r!r<rXr=rr
r
setdefaultr+r)rrNO_MATCH_SENTINELr?pkgvers      r%_scanzPackageIndex._scans&t~..	%$$SL $s4>':':';';"<"B"B3"G"G

u::??cU1Xoo$$a!!58$$?C%%ciikk266t<3S!1!111r2c\t|D]f}	|tj|t
|dW#t$rYcwxYw||\}}|sdSt||D]c}t|\}}|dr%|s#|r|d|d|z
}n|||
|dtd|S)z#Process the contents of a PyPI pager9r.pyz#egg=rQc6d|dddzS)Nz<a href="%s#md5=%s">%s</a>r9rh)rL)ms r%<lambda>z,PackageIndex.process_index.<locals>.<lambda>s2QWWQ15E5EEr2)rryrr:r!rrrLr"rrFr,need_version_infoscan_urlPYPI_MD5sub)	rr>rrKr
rnew_urlr/frags	         r%rzPackageIndex.process_indexsN]]4((		E


6<//ZA5O5OPPQQQQ



::c??S	2+355	#	#G)'22JD$}}U##
0D
00GsssCC88GG**3///MM'""""||EEt

	
sAA22
A?>A?c2|d|dS)NzPPage at %s links to .py file(s) without version info; an index scan is required.)scan_allrr>s  r%rzPackageIndex.need_version_infos*


 !$	
	
	
	
	
r2c|j|jvr%|r|j|g|R|d||jdS)Nz6Scanning index of all packages (this may take a while))rrrrrrrrps   r%rzPackageIndex.scan_allsi>!222
&	#%%%%%IIH


	


dn%%%%%r2c||j|jzdz|j|js%||j|jzdz|j|js||t|j|jdD]}||dS)Nr4r)	rrunsafe_namerrkeyrSnot_found_in_indexr)rrequirementr>s   r%
find_packageszPackageIndex.find_packagess

dn{'>>DEEE!%%ko66	KMM$.;+CCcIJJJ!%%ko66	1##K000*..{CCDD		CMM#		r2c|||||jD]!}||vr|cS|d||"t	t
|||S)Nz%s does not match %s)prescanr&r#rrrobtain)rr%	installerrNrs    r%r)zPackageIndex.obtains;''')	B	BD{""JJ-{DAAAA\4((//YGGGr2c2||jd|z|sd|t	j|t
|jjdtj	
|ddS)z-
        checker is a ContentChecker
        zValidating %%s checksum for %sz validation failed for z; possible download problem?N)rrrrr_unlinkrrr.rBrY)rcheckerr`tfps    r%
check_hashzPackageIndex.check_hashs	J,x7	9	9	9!!	IIKKKIh <$$$bg&6&6x&@&@&@&@B
		r2c|D]y}|j@t|r1|dstt	|r||_|j|zdS)z;Add `urls` to the list that will be prescanned for searchesNfile:)rrr-rrrappend)rurlsr>s   r%add_find_linkszPackageIndex.add_find_linkss	)	)C$!#%>>'**%,,--%

c""""##C((((	)	)r2cp|jr'tt|j|jd|_dS)z7Scan urls scheduled for prescanning (e.g. --find-links)N)rrr|rrs r%r(zPackageIndex.prescans3<	3T]DL11222r2c||jr
|jd}}n	|jd}}|||j|dS)Nz#Couldn't retrieve index page for %rz3Couldn't find index page for %r (maybe misspelled?))r#rrr"r)rr%methrs    r%r$zPackageIndex.not_found_in_indexsY 	G	#H#DD	ED	
S+)***

r2ct|tst|}|rj||d||}t|\}}|dr||||}|Stj	
|r|St|}t|
||ddS)aLocate and/or download `spec` to `tmpdir`, returning a local path

        `spec` may be a ``Requirement`` object, or a string containing a URL,
        an existing local filename, or a project/version requirement spec
        (i.e. the string form of a ``Requirement`` object).  If it is the URL
        of a .py file with an unambiguous ``#egg=name-version`` tag (i.e., one
        that escapes ``-`` as ``_`` throughout), a trivial ``setup.py`` is
        automatically created alongside the downloaded file.

        If `spec` is a ``Requirement`` object or a string containing a
        project/version requirement spec, this method returns the location of
        a matching distribution (possibly after downloading it to `tmpdir`).
        If `spec` is a locally existing file or directory name, it is simply
        returned unchanged.  If `spec` is a URL, it is downloaded to a subpath
        of `tmpdir`, and the local filename is returned.  Various errors may be
        raised if a problem occurs during downloading.
        r9rrRN)rrr
_download_urlrLrFr,	gen_setupr_rBrr&rfetch_distribution)rr#tmpdirr@foundr/rEs       r%r6zPackageIndex.download#s$$,,
	3%%F
3**6<<??D&II!1$!7!7h==''D NN5(FCCE%%
3,T22t..tV<<j$OOOr2c	d|i	d}d		fd	}|r4|||}|s||||}|&j||}|"|s |||}|drdpd|dSd|||jS)
a|Obtain a distribution suitable for fulfilling `requirement`

        `requirement` must be a ``pkg_resources.Requirement`` instance.
        If necessary, or if the `force_scan` flag is set, the requirement is
        searched for in the (online) package index as well as the locally
        installed packages.  If a distribution matching `requirement` is found,
        the returned distribution's ``location`` is the value you would have
        gotten from calling the ``download()`` method with the matching
        distribution's URL or filename.  If no matching distribution is found,
        ``None`` is returned.

        If the `source` flag is set, only source distributions and source
        checkout links will be considered.  Unless the `develop_ok` flag is
        set, development and system eggs (i.e., those using the ``.egg-info``
        format) will be ignored.
        zSearching for %sNcZ|}||jD]}|jtkr"s |vrd|d|<4||vo|jtkp}|rJ|j	}||_tj	
|jr|cSdS)Nz&Skipping development or system egg: %sr9)r#rHrrr	r6rRdownload_locationr_rBr)
reqenvrNtestloc
develop_okrskippedsourcer<s
     r%rz-PackageIndex.fetch_distribution.<locals>.find]s{CG
$
$?l22:27**		Dd)*
CKGK7Ev:$--
v>>C-0D*w~~d&<==$#%
$
$r2z:No local packages or working download links found for %s%sza source distribution of rzBest match: %s)rRro)rr(r&rrcloner@)
rr%r<
force_scanrGrElocal_indexrNrrFs
` ` ``   @r%r;zPackageIndex.fetch_distributionEsn(	
		$k222	$	$	$	$	$	$	$	$	$	$2	%LLNNN{+++4$$D	2/4[11D<|'4$$D<
<{+++4$$D<IIL77=2





II&---::t'=:>>>r2cH|||||}||jSdS)a3Obtain a file suitable for fulfilling `requirement`

        DEPRECATED; use the ``fetch_distribution()`` method now instead.  For
        backward compatibility, this routine is identical but returns the
        ``location`` of the downloaded distribution instead of a distribution
        object.
        N)r;rR)rr%r<rIrGrNs      r%fetchzPackageIndex.fetchs0&&{FJOO= tr2ct|}|r.dt||ddDpg}t	|dkrXt
j|}t
j||krvt
j	||}t
j
|r t
j||stj
|||}tt
j	|dd5}|d|djd|djdt
j|dd	dddn#1swxYwY|S|rt'd
|d|t'd)
Nc g|]}|j	|Sr)rT)reds  r%
<listcomp>z*PackageIndex.gen_setup.<locals>.<listcomp>s0


EFY




r2r9zsetup.pywz(from setuptools import setup
setup(name=rz
, version=z, py_modules=[z])
z9Can't unambiguously interpret project/version identifier zI; any dashes in the name or version should be escaped using underscores. zpCan't process plain .py files without an '#egg=name-version' suffix to enable automatic setup script generation.)rJrKrrLrXr_rBrYdirnamerlrsamefileshutilcopy2rwriterSrTsplitextr)	rr`rEr<rKrrYdstrs	         r%r:zPackageIndex.gen_setups""8,,


!(EKKNNDAA


	
u::??w''11Hwx((F22gll6844s++#0@0@30O0O#L3///"Hbgll6:66<<



a---uQx/?/?/?((221555	














O

	 .&.XXuu6
!G
sAF,,F03F0i c|d|d}	t|}||}t	|t
jjr"td|d|j	d|j
|}d}|j}d}d|vrP|d}	ttt|	}||||||t#|d	5}
	||}|rI|||
||dz
}||||||nnb||||
dddn#1swxYwY||r|SS#|r|wwxYw)NzDownloading %szCan't download :  rr5zcontent-lengthzContent-LengthwbTr9)rrrrrr:rrrrrdl_blocksizeget_allmaxr|int
reporthookrrrrVr/r)rr>r`fpr-rblocknumbssizesizesr.rs            r%_download_tozPackageIndex._download_tos		"C(((
	!**3//Gs##B"fl455
$n25##rwwwGggiiGH"BD7**(8993sE??++XxTBBBh%%

8GGBKKEU+++		%((( A
XxTJJJJ3777

8

8

8

8

8

8

8

8

8

8

8

8

8

8

8





r





s1C3F8
A;FF8FF8FF88GcdSror)rr>r`rcblksizeres      r%razPackageIndex.reporthooksr2c|drt|S	t||jS#tt
jjf$r]}dd|j	D}|r|
||nt|d||Yd}~dSd}~wtj
j$r}|cYd}~Sd}~wtj
j$rD}|r|
||jntd|d|j|Yd}~dSd}~wt
jj$rC}|r|
||jnt|d|j|Yd}~dSd}~wt
jjt(j
f$r:}|r|
||ntd|d||Yd}~dSd}~wwxYw)Nr1r[c,g|]}t|Sr)r})reargs  r%rPz)PackageIndex.open_url.<locals>.<listcomp>s777CHH777r2zDownload error for rZz7 returned a bad status line. The server might be down, )r-
local_openopen_with_authrr"httpclient
InvalidURLrlrprrr:rrURLErrorreason
BadStatusLineline
HTTPExceptionsocket)rr>warningvrs     r%rzPackageIndex.open_urlsv>>'""	#c??"	8!#t{333DK23	B	B	B((7777788C
B		'3''''$SS%9::A('''''|%			HHHHHH|$	?	?	?
?		'18,,,,$n(+QXX&788=>?-,,,,,{(			
		'16****$SS!&&"	+*****)6<8	8	8	8
8		'1%%%%$n(+QQ&011678&%%%%%	8sL;GAB..GCGG#9D""G98E77#G/GGct|\}}|r3d|vr.|dddd}d|v.nd}|dr
|dd}tj||}|dks|d	r|||S|d
ks|dr|||S|dr|	||S|d
krBtjtj
|dS||d|||S)Nz...\___downloaded__rPr*svnzsvn+gitzgit+zhg+rrhT)rFreplacer,r_rBrlr-
_download_svn
_download_git_download_hgr:rurl2pathnamer!r;r_attempt_download)rr@r>r<r.rEr`s       r%r9zPackageIndex._download_urls*#..h	$$,,||D#..66tSAA$,,$D==$$	9D7<<--U??f//77?%%c8444
u__ 1 1& 9 9_%%c8444


u
%
%	9$$S(333
v

>..v|/D/DS/I/I!/LMMMKKT"""))#x888r2c2||ddS)NT)rrs  r%rzPackageIndex.scan_url0sd#####r2c|||}d|ddvr||||S|S)Nrrr)rgrr+_download_html)rr>r`rs    r%rzPackageIndex._attempt_download3sY##C22W[[44::<<<<&&sGX>>>Or2ctt|}|D]m}|rWtjd|r@|tj||||cSnn|tj|td|z)Nz <title>([^- ]+ - )?Revision \d+:zUnexpected HTML page found at )	rr~rdrrr_r,rr)rr>rr`rrus      r%rzPackageIndex._download_html:sH~~		Dzz||
9@$GG=JJLLLIh'''--c8<<<<<
	


	(=CDDDr2ctjdt|ddd}d}|drd|vrtj|\}}}}}}	|s|drd	|d
dvr|d
dd	d\}}t|\}
}|
rTd|
vr"|
dd\}}
d|d
|
}nd|
z}|}||||||	f}tj
|}|d||tj
d|d|d||S)Nz"SVN download support is deprecatedr8r9rrzsvn:@z//r4rh:z --username=z --password=z'Doing subversion checkout from %s to %szsvn checkoutz -q r[)warningsrUserWarningr=r+r-r:r!r;
_splituser
urlunparserr_system)rr>r`credsr@netlocrBrfqrauthhostuserpwr?s               r%rzPackageIndex._download_svnIs
:KHHHiiQ"99;;!!&))
	9cSjj,2L,A,A#,F,F)FFD!Q
9dood33
9tABBx#ABBx~~c155'//
d9d{{#'::c1#5#5bbBF$$ K . 5!F"FCAq8E ,11%88C		;S(KKK
		uuuccc88DEEEr2cJtj|\}}}}}|ddd}|ddd}d}d|vr|dd\}}tj||||df}||fS)N+r9r5r8rrr)r:r!urlsplitr=rsplit
urlunsplit)r>
pop_prefixr@rrBrDrrevs        r%_vcs_split_rev_from_urlz$PackageIndex._vcs_split_rev_from_url_s,2L,A,A#,F,F)eTc1%%b)zz#q!!!$$;;C++ID#l%%vvtUB&GHHCxr2c8|ddd}||d\}}|d||tjd|d||0|d	|tjd
|d||S)Nr8r9rTrzDoing git clone from %s to %szgit clone --quiet r[zChecking out %szgit -C z checkout --quiet r=rrr_rrr>r`rs    r%rzPackageIndex._download_gitqs>>#q))!,///EES		13AAA
		sssHH=>>>?II'---II



r2c:|ddd}||d\}}|d||tjd|d||1|d	|tjd
|d|d|S)
Nr8r9rTrzDoing hg clone from %s to %szhg clone --quiet r[zUpdating to %sz	hg --cwd z
 up -C -r z -qrrs    r%rzPackageIndex._download_hgs>>#q))!,///EES		0#x@@@
		ccc88<===?II&,,,II



r2c*tj|g|RdSro)rrr s   r%rzPackageIndex.debugs 	#r2c*tj|g|RdSro)rrr s   r%rzPackageIndex.info tr2c*tj|g|RdSro)rrr s   r%rzPackageIndex.warnrr2)rrNT)Fro)FFFN)FF)*rrrrrrrrrrrrrrrr&r)r/r4r(r$r6r;rLr:r]rgrarr9rrrrstaticmethodrrrrrr
__classcell__rs@r%rrsEE?E'+------!!!!!31313131j''''     ??? 222$


:


&&&&


HHHHHH 
)
)
) P P PFAF*.J?J?J?J?X&&&PL"""H


!8!8!8!8F999:$$$
E
E
E,\"  r2rz!&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?cT|d}tj|S)Nr)rLrunescape)rKwhats  r%
decode_entityrs!;;q>>D=r2c,tt|S)a
    Decode HTML entities in the given text.

    >>> htmldecode(
    ...     'https://../package_name-0.1.2.tar.gz'
    ...     '?tokena=A&amp;tokenb=B">package_name-0.1.2.tar.gz')
    'https://../package_name-0.1.2.tar.gz?tokena=A&tokenb=B">package_name-0.1.2.tar.gz'
    )
entity_subr)texts r%rrsmT***r2cfd}|S)Ncfd}|S)Nctj}tj	|i|tj|S#tj|wxYwro)rwgetdefaulttimeoutsetdefaulttimeout)rprqold_timeoutrrtimeouts   r%_socket_timeoutz@socket_timeout.<locals>._socket_timeout.<locals>._socket_timeoutsd 244K$W---
6tT,V,,(5555(5555sAAr)rrrrs` r%rz'socket_timeout.<locals>._socket_timeouts*	6	6	6	6	6	6r2r)rrs` r%socket_timeoutrs$					r2ctj|}|}t	j|}|}|ddS)a9
    Encode auth from a URL suitable for an HTTP header.
    >>> str(_encode_auth('username%3Apassword'))
    'dXNlcm5hbWU6cGFzc3dvcmQ='

    Long auth strings should not cause a newline to be inserted.
    >>> long_auth = 'username:' + 'password'*10
    >>> chr(10) in str(_encode_auth(long_auth))
    False
    
r)r:r!r<encodebase64	b64encoderr)rauth_s
auth_bytes
encoded_bytesencodeds     r%_encode_authrs[\
!
!$
'
'FJ$Z00M""$$G??4$$$r2c$eZdZdZdZdZdZdS)
Credentialz:
    A username/password pair. Use like a namedtuple.
    c"||_||_dSrousernamepassword)rrrs   r%rzCredential.__init__s 
 


r2c#.K|jV|jVdSrorrs r%__iter__zCredential.__iter__s(mmr2c&dt|zS)Nz%(username)s:%(password)s)varsrs r%__str__zCredential.__str__s*T$ZZ77r2N)rrrrrrrrr2r%rrsK!!!88888r2rc@eZdZfdZedZdZdZxZS)
PyPIConfigcjtgdd}t|tjtjdd}tj|r|	|dSdS)z%
        Load from ~/.pypirc
        )rr
repositoryr~z.pypircN)
dictfromkeysrrr_rBrl
expanduserrr)rdefaultsrcrs   r%rzPyPIConfig.__init__s==!G!G!GLL
"""
W\\"',,S119
=
=
7>>"	IIbMMMMM		r2cfdD}ttj|S)Ncdg|],}|d*|-S)r)rr~)resectionrs  r%rPz2PyPIConfig.creds_by_repository.<locals>.<listcomp>sI&
&
&
xx..4466&
&
&
&
r2)sectionsrr|_get_repo_cred)rsections_with_repositoriess` r%creds_by_repositoryzPyPIConfig.creds_by_repositorysR&
&
&
&
#'==??&
&
&
"
C+-GHHIIIr2c||d}|t||d||dfS)Nrrr)rr~r)rrrepos   r%rzPyPIConfig._get_repo_credstxx..4466ZHHWj))//11HHWj))//11


	
r2cv|jD]\}}||r|cSdS)z
        If the URL indicated appears to be a repository defined in this
        config, return the credential for that repository.
        N)ritemsr-)rr>rcreds    r%find_credentialzPyPIConfig.find_credentialsS
!% 8 > > @ @		J~~j))

		r2)	rrrrpropertyrrrrrs@r%rrst					JJXJ


r2rctj|}|\}}}}}}|drtjd|dvrt|\}	}
nd}	|	sMt	|}|r*t|}	|j|f}tj
dg|R|	rodt|	z}	||
||||f}
tj|
}tj|}|d|	ntj|}|dt&||}|	rctj|j\}}}}}}||kr2||
kr,||||||f}
tj|
|_|S)	z4Open a urllib2 request, handling HTTP authenticationrznonnumeric port: '')rohttpsNz*Authenticating as %s for %s (from .pypirc)zBasic 
Authorizationz
User-Agent)r:r!r;r,rorprqrrrr}rrrrrrRequest
add_header
user_agentr>)r>rparsedr@rrBparamsrDrraddressrrr?rrrbs2h2path2param2query2frag2s                       r%rnrns\
"
"3
'
'F06-FFD&%s<k$$%:;;;
""""6**
ggJ||++C00	Jt99D=#%DHAIDIIII.,t,,,vud:,))%00.((11?D1111.((--|Z000	B406|/D/DRV/L/L,Bvvu
<<B'MMvvu<E\,,U33BF
Ir2cD|d\}}}|r|nd|fS)zNsplituser('user[:passwd]@host[:port]')
    --> 'user[:passwd]', 'host[:port]'.rN)
rpartition)rrdelims   r%rr;s0,,D%#DDtd**r2c|Sror)r>s r%
fix_sf_urlrFsJr2ctj|\}}}}}}tj|}t
j|rtj|S|	drt
j
|rg}tj|D]}	t
j||	}
|	dkr>t|
d5}|}dddn#1swxYwYnzt
j
|
r|	dz
}	|d|	d}
|
|d|	}d
\}}nd\}}}dd
i}t#j|}tj|||||S)z7Read a local path, with special support for directoriesr4z
index.htmlrNz<a href="{name}">{name}</a>)r.zB<html><head><title>{url}</title></head><body>{files}</body></html>r)r>files)OK)rzPath not foundz	Not foundrz	text/html)r:r!r;rrr_rBisfilerr,rrrlrrr2formatioStringIOrr)r>r@rArBparamrDrr`rrfilepathrbbodyrstatusmessagerbody_streams                  r%rmrmJs/5|/D/DS/I/I,FFD%~**400H	w~~hC~%%c***	
s		C

h 7 7CH%%
	@
	@Aw||Ha00HL  (C((%B7799D%%%%%%%%%%%%%%%x((
SLL6==1=EEFFFF5
;;3dii.>.>;??D# B{+G+d##K<!!#vwMMMsD((D,	/D,	ro)r)Zrsysr_rdrrTrwrrrrconfigparserrhttp.clientrourllib.parser:urllib.requesturllib.error	functoolsrr
pkg_resourcesrrrrr	r
rrr
rrrrr	distutilsrdistutils.errorsrfnmatchrsetuptools.wheelr setuptools.extern.more_itertoolsrrrJIrrrKrr=rW__all___SOCKET_TIMEOUT_tmplrversion_inforr&rrFrrIrarrtrxrrrrrrrrrrrRawConfigParserrrrrnrrrmrr2r%<module>r!s))



												












++++++""""""<<<<<<rz677rz3RT::2:JRZ,bd
3
3
9

.
4
4
6
6

F
\\
W^S-
.:GG
0B26+ 
 
 
 
F


bj@"$GGLLL$2.B					;			HRZ<
=
=
A

	+	+	+%%%*88888888"#####-###L &~5++++^+++100@@NNNNNr2