a [Îdg¸ ã@s’ddlmZddlZddlZddlZddlZddlmZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZddlZddlZddlZddlZddlmZmZddlmZmZmZmZmZddlmZddlm Z m!Z!m"Z"m#Z#dd l$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-dd l.m/Z/m0Z0e  1e2¡Z3da4e5ed ƒr¡ ?dd¡ ?dd¡Z@e 9d¡ZAeArÜeA 8d¡rÜeA ?dd¡ZAndd„ZBeBƒZA[Be CdejDejEB¡ZFe CdejDejEB¡ZGe Cd¡ZHe Cd ¡ZId!ZJd"ZKe jLd#krFd$d%„ZMnd&d%„ZMGd'd(„d(eNƒZOeOƒZPGd)d*„d*eNƒZQd+d,„ZReRƒZS[Rd/d-d.„ZTdS)0é)Úunicode_literalsN)Úmessage_from_fileé)Ú __version__ÚDistlibException)Ú sysconfigÚZipFileÚfsdecodeÚ text_typeÚfilter)ÚInstalledDistribution)ÚMetadataÚMETADATA_FILENAMEÚWHEEL_METADATA_FILENAMEÚLEGACY_METADATA_FILENAME) Ú FileOperatorÚ convert_pathÚ CSVReaderÚ CSVWriterÚCacheÚcached_propertyÚget_cache_baseÚ read_exportsÚtempdir)ÚNormalizedVersionÚUnsupportedVersionErrorZpypy_version_infoÚppÚjavaZjyZcliZipÚcpZpy_version_nodotz%s%séÚpyú-Ú_Ú.ZSOABIzcpython-cCsRdtg}t d¡r| d¡t d¡r0| d¡t d¡dkrH| d¡d  |¡S) NrZPy_DEBUGÚdZ WITH_PYMALLOCÚmZPy_UNICODE_SIZEéÚuÚ)Ú VER_SUFFIXrÚget_config_varÚappendÚjoin)Úparts©r.úC/usr/local/lib/python3.9/site-packages/pip/_vendor/distlib/wheel.pyÚ _derive_abi<s     r0zz (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))? -(?P\w+\d+(\.\w+\d+)*) -(?P\w+) -(?P\w+(\.\w+)*) \.whl$ z7 (?P[^-]+) -(?P\d+[^-]*) (-(?P\d+[^-]*))?$ s \s*#![^\r\n]*s^(\s*#!("[^"]+"|\S+))\s+(.*)$s#!pythons #!pythonwú/cCs|S©Nr.©Úor.r.r/Ú^ór5cCs| tjd¡S)Nr1)ÚreplaceÚosÚsepr3r.r.r/r5`r6c@s6eZdZdd„Zdd„Zdd„Zd dd „Zd d „ZdS) ÚMountercCsi|_i|_dSr2)Ú impure_wheelsÚlibs©Úselfr.r.r/Ú__init__dszMounter.__init__cCs||j|<|j |¡dSr2)r;r<Úupdate)r>ÚpathnameÚ extensionsr.r.r/Úaddhs z Mounter.addcCs0|j |¡}|D]\}}||jvr|j|=qdSr2)r;Úpopr<)r>rArBÚkÚvr.r.r/Úremovels   zMounter.removeNcCs||jvr|}nd}|Sr2)r<)r>ÚfullnameÚpathÚresultr.r.r/Ú find_modulers zMounter.find_modulecCsj|tjvrtj|}nP||jvr,td|ƒ‚t ||j|¡}||_| dd¡}t|ƒdkrf|d|_ |S)Nzunable to find extension for %sr#rr) ÚsysÚmodulesr<Ú ImportErrorÚimpZ load_dynamicÚ __loader__ÚrsplitÚlenÚ __package__)r>rHrJr-r.r.r/Ú load_moduleys       zMounter.load_module)N)Ú__name__Ú __module__Ú __qualname__r?rCrGrKrTr.r.r.r/r:cs  r:c@sêeZdZdZdZd3dd„Zedd„ƒZed d „ƒZed d „ƒZ e d d„ƒZ dd„Z e dd„ƒZ dd„Zd4dd„Zdd„Zdd„Zdd„Zd5dd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd6d+d,„Zd-d.„Zd/d0„Zd7d1d2„ZdS)8ÚWheel)rrZsha256NFcCs8||_||_d|_tg|_dg|_dg|_t ¡|_ |durRd|_ d|_ |j |_ nât |¡}|rš| d¡}|d|_ |d dd ¡|_ |d |_|j |_ nštj |¡\}}t |¡}|sÄtd |ƒ‚|rÖtj |¡|_ ||_ | d¡}|d|_ |d|_ |d |_|d  d ¡|_|d d ¡|_|d d ¡|_dS)Nr(ÚnoneÚanyÚdummyz0.1ZnmZvnr"r!ZbnzInvalid name or filename: %rr r#ZbiÚar)ÚsignZ should_verifyÚbuildverÚPYVERÚpyverÚabiÚarchr8ÚgetcwdÚdirnameÚnameÚversionÚfilenameZ _filenameÚNAME_VERSION_REÚmatchÚ groupdictr7rIÚsplitÚ FILENAME_RErÚabspath)r>rgr]Úverifyr%Úinfordr.r.r/r?‘sD        ÿ    zWheel.__init__cCs^|jrd|j}nd}d |j¡}d |j¡}d |j¡}|j dd¡}d|j|||||fS)Nr!r(r#r"z%s-%s%s-%s-%s-%s.whl)r^r,r`rarbrfr7re)r>r^r`rarbrfr.r.r/rgºs     ÿzWheel.filenamecCstj |j|j¡}tj |¡Sr2)r8rIr,rdrgÚisfile)r>rIr.r.r/ÚexistsËsz Wheel.existsccs4|jD](}|jD]}|jD]}|||fVqqqdSr2)r`rarb)r>r`rarbr.r.r/ÚtagsÐs   z Wheel.tagsc Cs4tj |j|j¡}d|j|jf}d|}t d¡}t |dƒà}|  |¡}|d  dd¡}t dd „|Dƒƒ}t tg} d} | D]z} zbt || ¡} | | ¡8} || ƒ}t|d } | rÂWdƒWqøWdƒn1sÖ0YWq|tyôYq|0q|| std d  | ¡ƒ‚Wdƒn1s&0Y| S) Nú%s-%sú %s.dist-infoúutf-8Úrú Wheel-Versionr#rcSsg|] }t|ƒ‘qSr.©Úint©Ú.0Úir.r.r/Ú àr6z"Wheel.metadata..)Úfileobjz8Invalid wheel, because metadata is missing: looked in %sz, )r8rIr,rdrgrerfÚcodecsÚ getreaderrÚget_wheel_metadatarkÚtuplerrÚ posixpathÚopenr ÚKeyErrorÚ ValueError)r>rAÚname_verÚinfo_dirÚwrapperÚzfÚwheel_metadataÚwvÚ file_versionZfnsrJÚfnÚmetadata_filenameÚbfÚwfr.r.r/Úmetadata×s2      4 ÿ&zWheel.metadatacCsld|j|jf}d|}t |d¡}| |¡&}t d¡|ƒ}t|ƒ}Wdƒn1sZ0Yt|ƒS)NrsrtÚWHEELru) rerfrƒr,r„rr€rÚdict)r>rŠr‡rˆrrr‘Úmessager.r.r/r÷s  &zWheel.get_wheel_metadatacCsJtj |j|j¡}t|dƒ}| |¡}Wdƒn1s<0Y|S)Nrv)r8rIr,rdrgrr)r>rArŠrJr.r.r/ros (z Wheel.infoc CsÔt |¡}|r|| ¡}|d|…||d…}}d| ¡vrBt}nt}t |¡}|rfd| ¡d}nd}||}||}nT| d¡}| d¡} |dks || kr¦d} n|||d…d krÀd } nd} t| |}|S) Nspythonwó éÿÿÿÿr6ó ó rrs ) Ú SHEBANG_REriÚendÚlowerÚSHEBANG_PYTHONWÚSHEBANG_PYTHONÚSHEBANG_DETAIL_REÚgroupsÚfind) r>Údatar%r›ZshebangZdata_after_shebangZshebang_pythonÚargsZcrZlfZtermr.r.r/Úprocess_shebangs,       zWheel.process_shebangcCsf|dur|j}ztt|ƒ}Wnty:td|ƒ‚Yn0||ƒ ¡}t |¡ d¡  d¡}||fS)NzUnsupported hash algorithm: %ró=Úascii) Ú hash_kindÚgetattrÚhashlibÚAttributeErrorrÚdigestÚbase64Zurlsafe_b64encodeÚrstripÚdecode)r>r¢r§ÚhasherrJr.r.r/Úget_hash%s  zWheel.get_hashcCsjt|ƒ}ttj ||¡ƒ}| |ddf¡t|ƒ$}|D]}| |¡q8Wdƒn1s\0YdS)Nr()ÚlistÚto_posixr8rIÚrelpathr+rZwriterow)r>ÚrecordsZ record_pathÚbaseÚpÚwriterÚrowr.r.r/Ú write_record0s  zWheel.write_recordc CsÂg}|\}}tt|jƒ}|D]d\}} t| dƒ} |  ¡} Wdƒn1sL0Yd| | ¡} tj | ¡} |  || | f¡qtj  |d¡} |  || |¡t tj  |d¡ƒ}|  || f¡dS)NÚrbz%s=%sÚRECORD) r¨r©r§r„Úreadr°r8rIÚgetsizer+r,r¹r²)r>roÚlibdirÚ archive_pathsr´Údistinforˆr¯Úapr¶Úfr¢r«Úsizer.r.r/Ú write_records8s   & zWheel.write_recordscCsZt|dtjƒ8}|D]"\}}t d||¡| ||¡qWdƒn1sL0YdS)NÚwzWrote %s to %s in wheel)rÚzipfileÚ ZIP_DEFLATEDÚloggerÚdebugÚwrite)r>rAr¿rŠrÁr¶r.r.r/Ú build_zipHs zWheel.build_zipc" sÈ|dur i}tt‡fdd„dƒƒd}|dkrFd}tg}tg}tg}nd}tg}dg}d g}| d |¡|_| d |¡|_| d |¡|_ ˆ|} d |j |j f} d| } d| } g} dD] }|ˆvrÆq¶ˆ|}t j  |¡r¶t  |¡D]Ü\}}}|D]Ì}tt j  ||¡ƒ}t j  ||¡}tt j  | ||¡ƒ}|  ||f¡|dkrò| d¡sòt|dƒ}| ¡}Wdƒn1st0Y| |¡}t|dƒ}| |¡Wdƒqò1s´0Yqòqäq¶| }d}t  |¡D]¦\}}}||kr,t|ƒD]8\}}t|ƒ}| d¡ròt j  ||¡}||=q,qò|D]H}t|ƒ d¡rHq0t j  ||¡}tt j  ||¡ƒ}|  ||f¡q0qÖt  |¡}|D]B}|dvrŒtt j  ||¡ƒ}tt j  | |¡ƒ}|  ||f¡qŒd|pÜ|jdtd|g}|jD] \}}}| d|||f¡qôt j  |d¡}t|dƒ }| d |¡¡Wdƒn1sV0Ytt j  | d¡ƒ}|  ||f¡dd „} t| | d!} |  || f| | ¡t j  |j!|j"¡}!| #|!| ¡|!S)"Ncs|ˆvSr2r.r3©Úpathsr.r/r5Vr6zWheel.build..)ÚpurelibÚplatlibrrÏZfalseÚtruerYrZr`rarbrsú%s.datart)r¢ZheadersÚscriptsrÒú.exerºÚwbú .dist-info)z.pycz.pyo)r»Z INSTALLERZSHAREDr“zWheel-Version: %d.%dzGenerator: distlib %szRoot-Is-Purelib: %sz Tag: %s-%s-%sr“rÅÚ cSs*|d}| d¡}d|vr"|d7}||fS)Nrr1rÕi')Úcount)ÚtrÁÚnr.r.r/Úsorter²s  zWheel.build..sorter)Úkey)$r±r ÚIMPVERÚABIÚARCHr_Úgetr`rarbrerfr8rIÚisdirÚwalkr r,r³r²r+Úendswithr„r¼r¤rÊÚ enumerateÚlistdirÚ wheel_versionrrrÚsortedrÄrdrgrË)"r>rÍrrråZlibkeyZis_pureZ default_pyverZ default_abiZ default_archr¾r‡Údata_dirrˆr¿rÛrIÚrootÚdirsÚfilesrŽr¶ÚrprÁrÂr¢rÀr|Údnr‹r`rarbrÚrAr.rÌr/ÚbuildNs˜   (  0     ý 0  z Wheel.buildcCs | d¡S)N)r1z /RECORD.jws)râ)r>Úarcnamer.r.r/Ú skip_entryÂszWheel.skip_entrycC KsV|j}| d¡}| dd¡}| dd¡}tj |j|j¡}d|j|jf} d| } d| } t  | t ¡} t  | d¡} t  | d ¡}t   d ¡}t |d ƒ¬}| | ¡ }||ƒ}t|ƒ}Wdƒn1sÆ0Y|d  d d¡}tdd„|Dƒƒ}||jkr|r||j|ƒ|ddkr(|d}n|d}i}| |¡X}t|d,}|D]}|d}|||<qPWdƒn1s~0YWdƒn1sž0Yt  | d¡}t  | d¡}t  | dd¡}t|d}d|_tj } g}!t ¡}"|"|_d|_z$zê| ¡D] }#|#j}$t|$tƒr,|$}%n |$ d ¡}%|  |%¡rFq||%}|drxt!|#j"ƒ|dkrxt#d|%ƒ‚|drð|d dd¡\}&}'| |$¡}| $¡}(Wdƒn1sÀ0Y| %|(|&¡\})}*|*|'krðt#d|$ƒ‚|r|% &||f¡rt' (d|%¡q|% &|¡o,|% )d ¡ }+|% &|¡rd|% d!d¡\})},}-tj ||,t*|-ƒ¡}.n$|%| |fvrvqtj |t*|%ƒ¡}.|+sŽ| |$¡}| +||.¡Wdƒn1s¼0Y|! ,|.¡|s:|dr:t|.d"ƒ>}| $¡}(| %|(|&¡\})}/|/|*krt#d#|.ƒ‚Wdƒn1s00Y| r|. )d$¡rz|j-|.|d%}0|! ,|0¡Wn"t.yŠt'j/d&dd'Yn0nŠtj 0t*|$ƒ¡}1tj |"|1¡}2| |$¡}| +||2¡Wdƒn1sÚ0Ytj |.¡\}3}1|3|_| 1|1¡}4| 2|4¡|! 3|4¡q|r4t' (d(¡d}5nœd}6|j4d }|d)kr.t  | d*¡}7z´| |7¡}t5|ƒ}8Wdƒn1s„0Yi}6d+D]r}9d,|9}:|:|8vr–i|6d-|9<};|8|: 6¡D]<}|6 d6i¡}?|>sÐ|?rp| dd¡}@tj <|@¡sòt=d7ƒ‚|@|_|> >¡D]*\}:}¡D],\}:}.zRoot-Is-PurelibrÐrÎrÏ©Ústreamrr(rÒ)Údry_runTrúsize mismatch for %sú=údigest mismatch for %szlib_only: skipping %srÓr1rºzdigest mismatch on write for %sz.py)Zhashed_invalidationzByte-compilation failed)Úexc_infozlib_only: returning Nonez1.0zentry_points.txt)ZconsoleÚguiz %s_scriptszwrap_%sz%s:%sz [%s]ú,zAUnable to read legacy script metadata, so cannot generate scriptsrBzpython.commandsz8Unable to read JSON metadata, so cannot generate scriptsZ wrap_consoleZwrap_guizValid script path not specifiedz%s = %srùÚlibÚprefixzinstallation failed.)Grôrßr8rIr,rdrgrerfrƒrrr€rr„rrkr‚rårrÚrecordrLÚdont_write_bytecodeÚtempfileÚmkdtempZ source_dirZ target_dirÚinfolistÚ isinstancer r®rïÚstrÚ file_sizerr¼r°Ú startswithrÈrÉrârZ copy_streamr+Z byte_compileÚ ExceptionÚwarningÚbasenameZmakeZset_executable_modeÚextendrorÚvaluesrüÚsuffixÚflagsÚjsonÚloadràr†Úitemsr r”Zwrite_shared_locationsZwrite_installed_filesÚshutilÚrmtreeÚ exceptionZrollback)Cr>rÍZmakerÚkwargsrôrðrñZbc_hashed_invalidationrAr‡rçrˆÚ metadata_nameÚwheel_metadata_nameÚ record_namer‰rŠÚbwfr‘r•rŒrr¾r´rÚreaderr¸r¶Zdata_pfxZinfo_pfxZ script_pfxZfileopZbcZoutfilesÚworkdirÚzinforîÚ u_arcnameÚkindÚvaluer¢r"r«Z is_scriptÚwhererëZoutfileZ newdigestZpycrŽZworknamerìÚ filenamesÚdistÚcommandsZepZepdatarÛrEr$rFÚsZconsole_scriptsZ gui_scriptsZ script_dirZscriptÚoptionsr.r.r/ÚinstallÒsX        &    L      ÿ  ( ÿ   ÿ  ,   þ&ÿÿ ,       (  .           ÿ ú  z Wheel.installcCs8tdur4tj tƒtdƒdtjdd…¡}t|ƒatS)Nz dylib-cachez%s.%sr) Úcacher8rIr,rrrLÚ version_infor)r>rµr.r.r/Ú_get_dylib_cache¸s ÿzWheel._get_dylib_cachec Cs”tj |j|j¡}d|j|jf}d|}t |d¡}t  d¡}g}t |dƒ.}z|  |¡æ}||ƒ} t   | ¡} | ¡} |  |¡} tj | j| ¡} tj | ¡s¬t | ¡|  ¡D]‚\}}tj | t|ƒ¡}tj |¡sàd}n6t |¡j}tj |¡}| |¡}tj|jŽ}||k}|r(| || ¡| ||f¡q´Wdƒn1sN0YWntynYn0Wdƒn1s†0Y|S)NrsrtZ EXTENSIONSrurvT)r8rIr,rdrgrerfrƒrr€rr„r rr'Z prefix_to_dirrµràÚmakedirsrrrqÚstatÚst_mtimeÚdatetimeZ fromtimestampZgetinfoZ date_timeÚextractr+r…)r>rAr‡rˆrîr‰rJrŠrr‘rBr%rüZ cache_baserer³Údestr,Z file_timeroZ wheel_timer.r.r/Ú_get_extensionsÁs>             4&zWheel._get_extensionscCst|ƒSr2)Ú is_compatibler=r.r.r/r/ãszWheel.is_compatiblecCsdS)NTr.r=r.r.r/Ú is_mountableészWheel.is_mountablecCs´tj tj |j|j¡¡}| ¡s2d|}t|ƒ‚| ¡sJd|}t|ƒ‚|t jvrbt   d|¡nN|rtt j  |¡nt j  d|¡| ¡}|r°tt jvr¤t j  t¡t ||¡dS)Nz)Wheel %s not compatible with this Python.z$Wheel %s is marked as not mountable.z%s already in pathr)r8rIrmr,rdrgr/rr0rLrÈrÉr+Úinsertr.Ú_hookÚ meta_pathrC)r>r+rAÚmsgrBr.r.r/Úmountïs"   z Wheel.mountcCsrtj tj |j|j¡¡}|tjvr2t d|¡nrAr.r.r/Úunmounts     z Wheel.unmountc Csrtj |j|j¡}d|j|jf}d|}d|}t |t¡}t |d¡}t |d¡}t   d¡}t |dƒð} |   |¡ } || ƒ} t | ƒ} Wdƒn1sž0Y| d d d ¡} td d „| Dƒƒ}i}|   |¡V}t|d *}|D]}|d}|||<qêWdƒn1s0YWdƒn1s60Y|  ¡D]}|j}t|tƒrf|}n | d¡}| d¡}d|vrtd|ƒ‚| |¡r qH||}|drÒt|jƒ|dkrÒtd|ƒ‚|d rH|d  dd ¡\}}|   |¡}| ¡}Wdƒn1s0Y| ||¡\}}||krHtd|ƒ‚qHWdƒn1sd0YdS)NrsrÑrtr“r»rurvrwr#rcSsg|] }t|ƒ‘qSr.rxrzr.r.r/r}!r6z Wheel.verify..ròrr1ú..úinvalid entry in wheel: %rrrõrör÷)r8rIr,rdrgrerfrƒrrr€rr„rrkr‚rrrr r®rrïrrr¼r°)r>rAr‡rçrˆrrrr‰rŠrr‘r•rŒrr´rrr¸r¶rrîrrrr¢r"r«r.r.r/rns\     &  J    ÿ ÿ  ( ÿz Wheel.verifyc Ksdd„}dd„}tj |j|j¡}d|j|jf}d|}t |d¡} tƒ¢} t |dƒ†} i} |   ¡D]h} | j}t |t ƒr‚|}n |  d ¡}|| kr–qhd |vrªtd |ƒ‚|  | | ¡tj | t|ƒ¡}|| |<qhWdƒn1sæ0Y|| |ƒ\}}|| fi|¤Ž}|râ|| |ƒ\}}|r<||kr<|||ƒ|durftjd d | d\}}t |¡n*tj |¡s€td|ƒ‚tj ||j¡}t|  ¡ƒ}tj | |¡}||f}| || |¡| ||¡|durât ||¡Wdƒn1sø0Y|S)NcSsHd}}d|tf}||vr$d|}||vr@||}t|dj}||fS)Nz%s/%sz %s/PKG-INFO©rI)rr rf)Úpath_maprˆrfrIrÛr.r.r/Ú get_versionYs  z!Wheel.update..get_versioncSsÞd}z|t|ƒ}| d¡}|dkr*d|}nTdd„||dd… d¡Dƒ}|dd7<d |d|…d d d „|Dƒ¡f}Wntyžt d |¡Yn0|rÚt|d }||_|  t ¡}|j ||dt d||¡dS)Nr!rz%s+1cSsg|] }t|ƒ‘qSr.rx)r{r"r.r.r/r}kr6z8Wheel.update..update_version..rr#r—z%s+%scss|]}t|ƒVqdSr2)rrzr.r.r/Ú nr6z7Wheel.update..update_version..z0Cannot update non-compliant (PEP-440) version %rr9)rIÚlegacyzVersion updated from %r to %r) rr¡rkr,rrÈrÉr rfrârrÊ)rfrIÚupdatedrFr|r-Zmdr=r.r.r/Úupdate_versioncs.    ÿ  ÿ   ÿz$Wheel.update..update_versionrsrtr»rvrur7r8z.whlz wheel-update-)r rüÚdirzNot a directory: %r)r8rIr,rdrgrerfrƒrrrrr r®rr,rrÿÚmkstempÚcloseràr±rrÄrËrÚcopyfile)r>ÚmodifierZdest_dirrr;r?rAr‡rˆrrrŠr:rrîrrIZoriginal_versionr"ZmodifiedZcurrent_versionÚfdÚnewpathr¿rÀror.r.r/r@Hs\       ÿ (  þ      ,z Wheel.update)NFF)N)NN)F)N)rUrVrWrår§r?Úpropertyrgrqrrrr’rror¤r°r¹rÄrËrírïr$r'r.r/r0r5r6rnr@r.r.r.r/rX‰s> )        tg "  8rXc Csxtg}td}ttjddddƒD]}| d |t|ƒg¡¡q$g}t ¡D]*\}}}|  d¡rN| |  dd¡d¡qN|  ¡t dkr–|  dt ¡| d¡g}tg}tjd krŽt d t¡}|rŽ| ¡\} }}} t|ƒ}| g} | d vrø|  d ¡| d vr |  d¡| dvr |  d¡| dvr4|  d¡| dvrH|  d¡|dkrŽ| D]*} d| ||| f} | tkrV| | ¡qV|d8}qH|D]0}|D]$} | d t|df¡|| f¡qšq’t|ƒD]L\}}| d t|f¡ddf¡|dkrÌ| d t|df¡ddf¡qÌt|ƒD]L\}}| d d|f¡ddf¡|dkr"| d d|df¡ddf¡q"t|ƒS)Nrrr—r(z.abir#rrYÚdarwinz(\w+)_(\d+)_(\d+)_(\w+)$)Úi386ÚppcZfat)rIrJÚx86_64Zfat3)Úppc64rKZfat64)rIrKÚintel)rIrKrMrJrLÚ universalz %s_%s_%s_%srZr )r)ÚrangerLr&r+r,rrOZ get_suffixesrrkÚsortrÝr1rÞÚplatformÚrerir ryÚ IMP_PREFIXrãÚset)ZversionsÚmajorÚminorZabisr r"rJZarchesr%rerbÚmatchesrir"rar|rfr.r.r/Úcompatible_tags­s`                 & " "rXcCs\t|tƒst|ƒ}d}|dur"t}|D]0\}}}||jvr&||jvr&||jvr&d}qXq&|S)NFT)rrXÚCOMPATIBLE_TAGSr`rarb)ZwheelrrrJÚverrarbr.r.r/r/ðs r/)N)UZ __future__rr¬rr+Zdistutils.utilZ distutilsZemailrr©rOr Úloggingr8rƒrRrrLrÿrÆr(rrÚcompatrrr r r Zdatabaser r’r rrrÚutilrrrrrrrrrrfrrÚ getLoggerrUrÈr%ÚhasattrrSrQrr*r)r&r_rÜZ get_platformr7rÞrÝr0ÚcompileÚ IGNORECASEÚVERBOSErlrhršrŸržrr9r²Úobjectr:r2rXrXrYr/r.r.r.r/ÚsŠ   ,       ø  ü    #*>