Ë =_ƒ°œHãó*—dZddlmZddlmZddlmZddlm Z ddlZddlZddl Z ddl Z ddl Z ddl Z ddlZddlZddlmZdd lmZmZd d lmZdd lmZdd lmZddlmZddlmZddlmZddlm Z ddl!m"Z"ddl#m$Z$ddl%m&Z&djNe jPŽZ)Gd„d«Z*d„Z+Gd„d«Z,Gd„de,e«Z-Gd„de«ZGd„de«Z.d „Z/d!„Z0d"„Z1ejdZ2ejfZ3d#„Z4d$„Z5d*d%„Z6d&„Z7d+d'„Z8Gd(„d)e&«Z9y),zUsetuptools.command.egg_info Create a distribution's .egg-info directory and contentsé)ÚFileList)ÚDistutilsInternalError)Ú convert_path)ÚlogNé)Úmetadata)Ú _entry_pointsÚ_normalizationé)Ú _requirestxt)ÚCommand)Úsdist)Ú walk_revctrl)Ú edit_config)Ú bdist_egg)Úglob)Ú packaging)ÚSetuptoolsDeprecationWarningz{}.{}có@—eZdZdZdej ddfd„Zd„Zd„Zy)Ú_NormalizedMatchera� Wrap a compiled pattern so that matching is insensitive to Unicode normalization form. File names walked from disk (NFD on macOS APFS/HFS+) and patterns from ``MANIFEST.in`` (typically NFC) can denote the same file while differing byte-for-byte. Normalizing both sides before matching keeps an exclusion (or inclusion) from silently failing. See GHSA-h35f-9h28-mq5c. ÚpatternÚreturnNcó—||_y©N)Ú_pattern)Úselfrs ú@/usr/lib/python3.12/site-packages/setuptools/command/egg_info.pyÚ__init__z_NormalizedMatcher.__init__0s €Øˆ� ócó^—|jjtj|««Sr)rÚmatchÚ unicode_utilsÚ normalize©rÚpaths rr!z_NormalizedMatcher.match3s"€Ø�}‰}×"Ñ"¤=×#:Ñ#:¸4Ó#@ÓAÐArcó^—|jjtj|««Sr)rÚsearchr"r#r$s rr'z_NormalizedMatcher.search6s"€Ø�}‰}×#Ñ#¤M×$;Ñ$;¸DÓ$AÓBÐBr) Ú__name__Ú __module__Ú __qualname__Ú__doc__ÚreÚPatternrr!r'©rrrr%s*„ñð  § ¡ ð ¨tó òBóCrrcóè—d}tj|«}|jtjj «}t jtj «}d|›d�}t|«D�]6\}}|t|«dz k(}|dk(r|r|dz }n |d|›d|›d �z }Œ2d }t|«} || krê||} | d k(r ||d zz }nÌ| d k(r||z }nÁ| d k(r¤|dz} | | kr || dk(r| dz} | | kr || dk(r| dz} | | kr|| dk7r| dz} | | kr || dk7rŒ| | k\r|t j| «z }nU||dz| } d} | d dk(rd} | dd} | t j| «z } |d | ›d�z }| }n|t j| «z }|dz }|| krŒê|r�Œ2||z }�Œ9|dz }tt j|t jt jz¬««S)zö Translate a file path glob like '*.txt' in to a regular expression. This differs from fnmatch.translate which allows wildcards to match directory separators. It also knows about '**/' which matches any number of directories. Úz[^Ú]r ú**z.*z(?:Ú+z)*rÚ*Ú?Ú[Ú!Ú^Nz\Z)Úflags)r"r#ÚsplitÚosr%Úsepr,ÚescapeÚ enumerateÚlenrÚcompileÚ MULTILINEÚDOTALL)rÚpatÚchunksr<Ú valid_charÚcÚchunkÚ last_chunkÚiÚ chunk_lenÚcharÚinner_iÚinnerÚ char_classs rÚtranslate_patternrO:s<€ð €Cô × "Ñ " 4Ó (€DðˆT�Z‰ZœŸ™Ÿ ™ Ó $€Fä �)‰)”B—F‘FÓ �CÚÐ!€Jä˜f×%‰ˆˆ5Øœ#˜f›+¨™/Ñ)ˆ ð �DŠ=Ùà�t‘ ‘ñ¢z²3Ð7Ñ7�Ø ð ˆÜ˜“Jˆ Ø�)Šmؘ‘8ˆDØ�sŠ{à�z CÑ'Ñ'‘ؘ’à�zÑ!‘ؘ’à˜a™%�à˜YÒ&¨5°©>¸SÒ+@Ø%¨™k�GؘYÒ&¨5°©>¸SÒ+@Ø%¨™k�Gð  Ò)¨e°G©nÀÒ.CØ%¨™k�Gð  Ò)¨e°G©nÀÓ.Cð˜iÒ'ðœ2Ÿ9™9 T›?Ñ*‘Cð" ! a¡%¨'Ð2�EØ!#�Jð˜Q‘x 3’Ø%(˜ Ø % a b  ˜à¤"§)¡)¨EÓ"2Ñ2�JÙ¢ZÐ1Ñ1�Cð ‘Aà”r—y‘y “Ñ&�Ø �‰FˆAðU�)‹móZØ �3‰JŠCð}&ð@ˆ5�L€CÜ œbŸj™j¨´B·L±LÄ2Ç9Á9Ñ4LÔMÓ NÐNrcóh—eZdZdZdZed„«Zd„Zd„Zde de fd„Z de fd„Z de fd „Z ee «Zy) Ú InfoCommonNcó\—tj|jj««Sr)r Ú safe_nameÚ distributionÚget_name©rs rÚnamezInfoCommon.name–s"€ä×'Ñ'¨×(9Ñ(9×(BÑ(BÓ(DÓEÐErcó~—|j|jj««}tj|«Sr)Ú _maybe_tagrTÚ get_versionr Ú safe_version)rÚtaggeds rÚtagged_versionzInfoCommon.tagged_versionšs0€Ø—‘ ×!2Ñ!2×!>Ñ!>Ó!@ÓAˆÜ×*Ñ*¨6Ó2Ð2rcó^—|jr|j|«r|S||jzS)z� egg_info may be called more than once for a distribution, in which case the version string already contains all tags. )ÚvtagsÚ_already_tagged©rÚversions rrYzInfoCommon._maybe_tagžs5€ð�zŠz˜d×2Ñ2°7Ô;ð ð ð˜4Ÿ:™:Ñ%ð rrbrcóz—|j|j«xs|j|j««Sr)Úendswithr_Ú _safe_tagsras rr`zInfoCommon._already_tagged©s0€ð×Ñ § ¡ Ó+ÒR¨w×/?Ñ/?ÀÇÁÓ@QÓ/RÐRrcóò— tjd|j›�«ddS#tjj $r2tj |jjdd««cYSwxYw)NÚ0r Ú Ú.)r r[r_rrbÚInvalidVersionrSÚreplacerVs rrezInfoCommon._safe_tags®sj€ð JÜ!×.Ñ.°°4·:±:°,Ð/?Ó@ÀÀÐDÐ DøÜ× Ñ ×/Ñ/ò JÜ!×+Ñ+¨D¯J©J×,>Ñ,>¸sÀCÓ,HÓIÒ Ið Jús‚$'§A A6Á5A6cóˆ—d}|jr||jz }|jr|tjd«z }|S)Nr0z%Y%m%d)Ú tag_buildÚtag_dateÚtimeÚstrftimeras rÚtagszInfoCommon.tags¶s;€ØˆØ �>Š>Ø �t—~‘~Ñ %ˆGØ �=Š=Ø ”t—}‘} XÓ.Ñ .ˆG؈r)r(r)r*rmrnÚpropertyrWr]rYÚstrÚboolr`rerqr_r.rrrQrQ’se„Ø€IØ€Hà ñFóðFò3ò  ðS sðS¨tóSð J˜CóJð�cóñ �T‹N�ErrQcó˜—eZdZdZgd¢ZdgZddiZd„Zed„«Z e jd„«Z d„Z d „Z e d fd „Zdd „Zd „Zd„Zd„Zd„Zy )Úegg_infoz+create a distribution's .egg-info directory))z egg-base=ÚezLdirectory containing .egg-info directories (default: top of the source tree))útag-dateÚdz0Add date stamp (e.g. 20050528) to version number)z tag-build=Úbz-Specify explicit tag to add to version number)úno-dateÚDz"Don't include date stamp [default]rxr{cóJ—d|_d|_d|_d|_d|_y)NF)Úegg_baseÚegg_namervÚ egg_versionÚignore_egg_info_in_manifestrVs rÚinitialize_optionszegg_info.initialize_optionsÕs'€ØˆŒ ؈Œ ؈Œ ØˆÔØ+0ˆÕ(rcó—yrr.rVs rÚtag_svn_revisionzegg_info.tag_svn_revisionßó€à rcó—yrr.)rÚvalues rr„zegg_info.tag_svn_revisionãr…rcóˆ—tj«}|j«|d<d|d<t|t |¬««y)z³ Materialize the value of date into the build tag. Install build keys in a deterministic order to avoid arbitrary reordering on subsequent builds. rmrrn)rvN)Ú collectionsÚ OrderedDictrqrÚdict)rÚfilenamervs rÚsave_version_infozegg_info.save_version_infoés=€ô ×*Ñ*Ó,ˆð!%§ ¡ £ ˆ�ÑØ ˆ�ÑÜ�Hœd¨HÔ5Õ6rcó@—|j|_|j«|_tj j |j«} t|tj j «}|rdnd}tjj||j|jfz«|j€?|jj }|xsij#dt$j&«|_|j)d«t+j,|j«dz|_|jt$j&k7r9t$j0j3|j|j.«|_|j|jj4_|jj6}t9|dd«xs t9|d d«}|�o||jj;«k(rQ|j|_tj j |j«|_d|j_yyy#t$r?}tjjd|j›d|j›�«|‚d}~wwxYw) Nz%s==%sz%s===%sz-Invalid distribution name or version syntax: Ú-r0r~ú .egg-infoÚkeyrW) rWrr]r€rrbÚVersionÚ isinstanceÚ requirementsÚ RequirementÚ ValueErrorÚ distutilsÚerrorsÚDistutilsOptionErrorr~rTÚ package_dirÚgetr;ÚcurdirÚensure_dirnamer Úfilename_componentrvr%ÚjoinrÚ _patched_distÚgetattrÚlowerÚ_versionÚ_parsed_version)rÚparsed_versionÚ is_versionÚspecrwÚdirsÚpdr‘s rÚfinalize_optionszegg_info.finalize_optionsös€ð Ÿ ™ ˆŒ Ø×.Ñ.Ó0ˆÔÜ"×*Ñ*×2Ñ2°4×3CÑ3CÓDˆð Ü# N´I×4EÑ4E×4MÑ4MÓNˆJÙ)‘8¨yˆDÜ × "Ñ "× .Ñ .¨t°t·}±}Àd×FVÑFVÐ6WÑ/WÔ Xð �=‰=Ð Ø×$Ñ$×0Ñ0ˆDØ!šZ R×,Ñ,¨R´·±Ó;ˆDŒMà ×јJÔ'Ü&×9Ñ9¸$¿-¹-ÓHÈ;ÑVˆŒ Ø �=‰=œBŸI™IÒ %ÜŸG™GŸL™L¨¯©¸¿ ¹ ÓFˆDŒMð .2×-=Ñ-=ˆ×Ñ×"Ñ"Ô*ð × Ñ × ,Ñ ,ˆÜ�b˜% Ó&ÒC¬'°"°f¸dÓ*CˆØ ˆ>˜c T§]¡]×%8Ñ%8Ó%:Ò:Ø×*Ñ*ˆBŒKÜ!*×!2Ñ!2×!:Ñ!:¸4×;KÑ;KÓ!LˆBÔ Ø.2ˆD× Ñ Õ +ð;ˆ>øô5ò Ü×"Ñ"×7Ò7à—=“= $×"2Ò"2ð4óðð ûð úsÁA"IÉ JÉ:JÊJNcóF—t|j|j||«S)ú0Compute filename of the output egg. Private API.)Ú _egg_basenamerr€)rÚ py_versionÚplatforms rÚ_get_egg_basenamezegg_info._get_egg_basename"s€ä˜TŸ]™]¨D×,<Ñ,<¸jÈ(ÓSÐSrcóÊ—|r|j|||«ytjj|«r.|€|st j d||«y|j |«yy)a¹Write `data` to `filename` or delete if empty If `data` is non-empty, this routine is the same as ``write_file()``. If `data` is empty but not ``None``, this is the same as calling ``delete_file(filename)`. If `data` is ``None``, then this is a no-op unless `filename` exists, in which case a warning is issued about the orphaned file (if `force` is false), or deleted (if `force` is true). Nz$%s not set in setup(), but %s exists)Ú write_filer;r%ÚexistsrÚwarnÚ delete_file)rÚwhatrŒÚdataÚforces rÚwrite_or_delete_filezegg_info.write_or_delete_file&sU€ñ Ø �O‰O˜D (¨DÕ 1Ü �W‰W�^‰^˜HÔ %؈|¡EÜ—‘Ð?ÀÀxÔPØà× Ñ  Õ*ð &rcóÈ—tjd||«|jd«}|js.t |d«}|j |«|j «yy)zªWrite `data` to `filename` (if not a dry run) after announcing it `what` is used in a log message to identify what is being written to the file. zwriting %s to %súutf-8ÚwbN)rÚinfoÚencodeÚdry_runÚopenÚwriteÚclose)rr¶rŒr·Úfs rr²zegg_info.write_file8sO€ô �‰Ð# T¨8Ô4Ø�{‰{˜7Ó#ˆØ�|Š|Ü�X˜tÓ$ˆAØ �G‰G�DŒMØ �G‰G�Iðrcót—tjd|«|jstj|«yy)z8Delete `filename` (if not a dry run) after announcing itz deleting %sN)rr½r¿r;Úunlink)rrŒs rrµzegg_info.delete_fileEs(€ä �‰� Ô)Ø�|Š|Ü �I‰I�hÕ ðrc ó´—|j|j« tj|jd«tjd¬«D]X}|j«}|||jtjj|j|j««ŒZtjj|jd«}tjj|«r|j|«|j!«y#t$r5}d|j›d�}t j j|«|‚d}~wwxYw)Nz'Cannot update time stamp of directory 'Ú'zegg_info.writers)Úgroupznative_libs.txt)Úmkpathrvr;ÚutimeÚOSErrorr—r˜ÚDistutilsFileErrorrÚ entry_pointsÚloadrWr%rŸr³rµÚ find_sources)rrwÚmsgÚepÚwriterÚnls rÚrunz egg_info.runKsù€Ø � ‰ �D—M‘MÔ"ð BÜ �H‰H�T—]‘] DÔ )ô×'Ñ'Ð.@×AˆBØ—W‘W“YˆFÙ �4˜Ÿ™¤"§'¡'§,¡,¨t¯}©}¸b¿g¹gÓ"FÕ GðBô �W‰W�\‰\˜$Ÿ-™-Ð):Ó ;ˆÜ �7‰7�>‰>˜"Ô Ø × Ñ ˜RÔ à ×ÑÕøôò BØ;¸D¿M¹M¸?È!ÐLˆCÜ×"Ñ"×5Ñ5°cÓ:ÀÐ Aûð Bús� DÄ EÄ"0EÅEcóô—tjj|jd«}t |j «}|j |_||_|j«|j|_ y)z"Generate SOURCES.txt manifest filez SOURCES.txtN) r;r%rŸrvÚmanifest_makerrTr�Úignore_egg_info_dirÚmanifestrÔÚfilelist)rÚmanifest_filenameÚmms rrÏzegg_info.find_sources]sT€äŸG™GŸL™L¨¯©¸ ÓFÐÜ ˜D×-Ñ-Ó .ˆØ!%×!AÑ!AˆÔØ'ˆŒ Ø �‰ŒØŸ ™ ˆ� r©F)r(r)r*Ú descriptionÚ user_optionsÚboolean_optionsÚ negative_optr‚rrr„Úsetterr�rªÚPY_MAJORr°r¹r²rµrÔrÏr.rrrvrvÁs‡„Ø?€Kò €Lð"�l€Oà�:ð€Lò1ðñ óð ð×Ññ óð ò 7ò*3ðX,4¸dóTó+ò$ ò ò ó$$rrvcót‡—eZdZdˆfd„ Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zd„ZˆxZS)rcó4•—t‰|�||«||_yr)Úsuperrr×)rr´Ú debug_printr×Ú __class__s €rrzFileList.__init__jsø€Ü ‰Ñ˜˜{Ô+Ø#6ˆÕ rc óˆ—|j|«\}}}}|j|j|j|jt j |j|«t j |j|«|j|jdœ}dddddddd dœ} ||}|jd «} |d vr|g}| r|fnd} ||} |jdj|g| r|gngz|z««|D]"} || «rŒ t!j"| | g| ¢­ŽŒ$y#t$rd |›d |›�} t| «d‚wxYw)N)ÚincludeÚexcludezglobal-includezglobal-excludezrecursive-includezrecursive-excludeÚgraftÚprunez%warning: no files found matching '%s'z9warning: no previously-included files found matching '%s'z>warning: no files found matching '%s' anywhere in distributionzRwarning: no previously-included files matching '%s' found anywhere in distributionz:warning: no files found matching '%s' under directory '%s'zNwarning: no previously-included files matching '%s' found under directory '%s'z+warning: no directories found matching '%s'z6no previously-included directories found matching '%s'z$Invalid MANIFEST.in: unknown action z in z recursive->rërìr.rh)Ú_parse_template_linerérêÚglobal_includeÚglobal_excludeÚ functoolsÚpartialÚrecursive_includeÚrecursive_excluderërìÚKeyErrorrÚ startswithrærŸrr´)rÚlineÚactionÚpatternsÚdirÚ dir_patternÚ action_mapÚlog_mapÚprocess_actionrÐÚaction_is_recursiveÚextra_log_argsÚlog_tmplrs rÚprocess_template_linezFileList.process_template_linens„€ð 04×/HÑ/HÈÓ/NÑ,ˆ�˜3  ð—|‘|Ø—|‘|Ø"×1Ñ1Ø"×1Ñ1Ü!*×!2Ñ!2Ø×&Ñ&Øó"ô"+×!2Ñ!2Ø×&Ñ&Øó"ð—Z‘ZØ—Z‘Zñ ˆ ð"?ØVàSð6ðPð2ðCØMñ% ˆð* 8Ø'¨Ñ/ˆNð%×/Ñ/° Ó=ÐØ Ð'Ñ 'Ø#�}ˆHÙ#6˜#™¸BˆØ˜6‘?ˆà ×ÑØ �H‰HØ�Ñ%8˜S™E¸bÑAÀHÑLó ô ó  ˆGÙ! 'Õ*Ü—‘˜ 7Ð<¨^Ô<ñ øô'ò 8Ø8¸¸ À$ÀtÀhÐOˆCÜ(¨Ó-°4Ð 7ð 8ús Â&D#Ä#Ecóæ—d}tt|j«dz dd«D]H}||j|«sŒ|jd|j|z«|j|=d}ŒJ|S)z† Remove all files from the file list that match the predicate. Return True if any matching files were removed Fr éÿÿÿÿz removing T)Úranger?Úfilesræ)rÚ predicateÚfoundrIs rÚ _remove_fileszFileList._remove_files´sk€ð ˆÜ”s˜4Ÿ:™:“¨Ñ*¨B°Ö3ˆAÙ˜Ÿ™ A™Õ'Ø× Ñ  °· ± ¸1± Ñ!=Ô>Ø—J‘J˜q�MØ‘ð 4ð ˆ rcó´—t|«D�cgc]$}tjj|«rŒ#|‘Œ&}}|j |«t |«Scc}w)z#Include files that match 'pattern'.)rr;r%ÚisdirÚextendrt)rrrÃrs rrézFileList.includeÁsE€ä  œMÓB™M�q´·±·±¸qÕ1A’˜MˆÐBØ � ‰ �EÔÜ�E‹{ÐùòCs Ž$A³AcóN—t|«}|j|j«S)z#Exclude files that match 'pattern'.)rOrr!©rrr!s rrêzFileList.excludeÇs!€ä! 'Ó*ˆØ×!Ñ! %§+¡+Ó.Ð.rcóú—tjj|d|«}t|d¬«D�cgc]$}tjj |«rŒ#|‘Œ&}}|j |«t |«Scc}w)zN Include all files anywhere in 'dir/' that match the pattern. r2T)Ú recursive)r;r%rŸrr r rt)rrùrÚ full_patternrÃrs rròzFileList.recursive_includeÌsc€ô—w‘w—|‘| C¨¨wÓ7ˆ Ü  ¸Õ>ÓWÑ>�qÄbÇgÁgÇmÁmÐTUÕFV’Ð>ˆÐWØ � ‰ �EÔÜ�E‹{ÐùòXs ±$A8ÁA8cóŒ—ttjj|d|««}|j |j «S)zM Exclude any file anywhere in 'dir/' that match the pattern. r2©rOr;r%rŸrr!)rrùrr!s rrózFileList.recursive_excludeÕs4€ô"¤"§'¡'§,¡,¨s°D¸'Ó"BÓCˆØ×!Ñ! %§+¡+Ó.Ð.rcó—t|«D��cgc](}tjj|«D]}|‘ŒŒ*}}}|j |«t |«Scc}}w)zInclude all files from 'dir/'.)rr—rÙÚfindallr rt)rrùÚ match_dirÚitemrs rrëzFileList.graftÜsc€ô" #œYô á&� Ü!×*Ñ*×2Ñ2°9Ö=�ò à=ð Ø&ð ñ ð � ‰ �EÔÜ�E‹{Ðùó  s�-AcóŠ—ttjj|d««}|j |j «S)zFilter out files from 'dir/'.r2r)rrùr!s rrìzFileList.pruneæs0€ä!¤"§'¡'§,¡,¨s°DÓ"9Ó:ˆØ×!Ñ! %§+¡+Ó.Ð.rcó$—|j€|j«ttjj d|««}|jD�cgc]}|j |«sŒ|‘Œ}}|j|«t|«Scc}w)z“ Include all files anywhere in the current directory that match the pattern. This is very inefficient on large file trees. r2) ÚallfilesrrOr;r%rŸr!r rt)rrr!rÃrs rrîzFileList.global_includeësm€ð �=‰=Ð Ø �L‰LŒNÜ!¤"§'¡'§,¡,¨t°WÓ"=Ó>ˆØ ŸMšMÓ<™M�q¨U¯[©[¸­^’˜MˆÐ<Ø � ‰ �EÔÜ�E‹{Ðùò=s ÁB Á+B cóŠ—ttjjd|««}|j |j «S)zD Exclude all files anywhere that match the pattern. r2rr s rrïzFileList.global_exclude÷s2€ô"¤"§'¡'§,¡,¨t°WÓ"=Ó>ˆØ×!Ñ! %§+¡+Ó.Ð.rcó —|jd«r|dd}t|«}|j|«r|jj |«yy)NÚ r)rdrÚ _safe_pathrÚappend)rrr%s rrzFileList.appendþsF€Ø �=‰=˜Ô ؘ˜�9ˆDܘDÓ!ˆà �?‰?˜4Ô Ø �J‰J× Ñ ˜dÕ #ð !rcób—|jjt|j|««yr)rr Úfilterr)rÚpathss rr zFileList.extends€Ø � ‰ ×Ñœ& §¡°%Ó8Õ9rcó`—tt|j|j««|_y)zÜ Replace self.files with only safe paths Because some owners of FileList manipulate the underlying ``files`` attribute directly, this method must be called to repair those paths. N)Úlistr rrrVs rÚ_repairzFileList._repair s€ôœ& §¡°$·*±*Ó=Ó>ˆ� rcóê—d}tj|«}|€tjd|z«ytj|d«}|€tj||d«y d|vxsd|v}|j r|ryt jj|«st jj|«ryy#t$r,tj||tj««YywxYw)Nz!'%s' not %s encodable -- skippingz''%s' in unexpected encoding -- skippingFr»r�s .egg-infoT) r"Úfilesys_decoderr´Ú try_encoder×r;r%r³ÚUnicodeEncodeErrorÚsysÚgetfilesystemencoding)rr%Úenc_warnÚu_pathÚ utf8_pathÚ is_egg_infos rrzFileList._safe_pathsÜ€Ø6ˆô×-Ñ-¨dÓ3ˆØ ˆ>Ü �H‰HÐ>ÀÑEÔ FØô"×,Ñ,¨V°WÓ=ˆ Ø Ð Ü �H‰H�X˜t WÔ -Øð Bà%¨Ð/ÒL°<À9Ð3LˆKØ×'Ò'©KØä�w‰w�~‰~˜fÔ%¬¯©¯©¸ Ô)BØð*Cøô"ò BÜ �H‰H�X˜t¤S×%>Ñ%>Ó%@Ö Að BúsÁ$B=Á=>B=Â=2C2Ã1C2)NNF)r(r)r*rrrrérêròrórërìrîrïrr r$rÚ __classcell__)rçs@rrrgsQø„õ7òD=òL òò /ò ò/òò/ò ò/ò$ò:ò?öBrrcób—eZdZdZd„Zd„Zd„Zd„Zd„Zd„Z e d„«Z d „Z d „Z d „Zd „Zd „Zy)rÖz MANIFEST.incóJ—d|_d|_d|_d|_d|_y)Nr F)Ú use_defaultsrìÚ manifest_onlyÚforce_manifestr×rVs rr‚z!manifest_maker.initialize_options2s)€ØˆÔ؈Œ ØˆÔØˆÔØ#(ˆÕ rcó—yrr.rVs rrªzmanifest_maker.finalize_options9s€Ø rcó&—t|j¬«|_tjj |j «s|j«|j«tjj |j«r|j«|j«|j«|j«|jj«|jj«|j«y)N)r×)rr×rÙr;r%r³rØÚwrite_manifestÚ add_defaultsÚtemplateÚ read_templateÚadd_license_filesÚ_add_referenced_filesÚprune_file_listÚsortÚremove_duplicatesrVs rrÔzmanifest_maker.run<s°€Ü °T×5MÑ5MÔNˆŒ Ü�w‰w�~‰~˜dŸm™mÔ,Ø × Ñ Ô !Ø ×ÑÔÜ �7‰7�>‰>˜$Ÿ-™-Ô (Ø × Ñ Ô Ø ×ÑÔ Ø ×"Ñ"Ô$Ø ×ÑÔØ � ‰ ×ÑÔØ � ‰ ×'Ñ'Ô)Ø ×ÑÕrcól—tj|«}|jtjd«S)NÚ/)r"r&rkr;r<r$s rÚ_manifest_normalizez"manifest_maker._manifest_normalizeJs'€Ü×+Ñ+¨DÓ1ˆØ�|‰|œBŸF™F CÓ(Ð(rcó —|jj«|jjD�cgc]}|j|«‘Œ}}d|jz}|j t |j|f|«ycc}w)zo Write the file list in 'self.filelist' to the manifest file named by 'self.manifest'. zwriting manifest file '%s'N)rÙr$rrBrØÚexecuter²)rrÃrrÐs rr7zmanifest_maker.write_manifestNsn€ð � ‰ ×ÑÔð7;·m±m×6IÒ6IÓJÑ6I°�×)Ñ)¨!Õ,Ð6IˆÐJØ*¨T¯]©]Ñ:ˆØ � ‰ ”Z $§-¡-°Ð!7¸Õ=ùòKs³BcóT—|j|«stj||«yyr)Ú_should_suppress_warningrr´)rrÐs rr´zmanifest_maker.warnZs#€Ø×,Ñ,¨SÔ1Ü �J‰J�t˜SÕ !ð2rcó.—tjd|«S)z; suppress missing-file warnings from sdist zstandard file .*not found)r,r!)rÐs rrFz'manifest_maker._should_suppress_warning^s€ô �x‰xÐ4°cÓ:Ð:rcóv—tj|«|jj|j«|jj|j «t t««}|r|jj|«n9tjj|j «r|j«tjjd«r|jjd«|jd«}|jj|j«y)Nzsetup.pyrv)rr8rÙrr9rØr#rr r;r%r³Ú read_manifestÚget_finalized_commandrërv)rÚrcfilesÚei_cmds rr8zmanifest_maker.add_defaultsesÇ€Ü ×ј4Ô Ø � ‰ ×јTŸ]™]Ô+Ø � ‰ ×јTŸ]™]Ô+Ü”|“~Ó&ˆÙ Ø �M‰M× Ñ  Õ )Ü �W‰W�^‰^˜DŸM™MÔ *Ø × Ñ Ô ä �7‰7�>‰>˜*Ô %ð �M‰M× Ñ  Ô ,à×+Ñ+¨JÓ7ˆØ � ‰ ×јFŸO™OÕ,rcó¼—|jjjxsg}|D]}tjd|«Œ|j j |«y)Nzadding license file '%s')rTrÚ license_filesrr½rÙr )rrNÚlfs rr;z manifest_maker.add_license_fileswsI€Ø×)Ñ)×2Ñ2×@Ñ@ÒFÀBˆ ÛˆBÜ �H‰HÐ/°Õ 4ð à � ‰ ×ј]Õ+rcó¢—t|jdg«}|D]}tjd|«Œ|jj |«y)zGAdd files referenced by the config (e.g. `file:` directive) to filelistÚ_referenced_filesz%adding file referenced by config '%s'N)r¡rTrÚdebugrÙr )rÚ referencedÚrfs rr<z$manifest_maker._add_referenced_files}sB€ä˜T×.Ñ.Ð0CÀRÓHˆ ãˆBÜ �I‰IÐ=¸rÕ Bðà � ‰ ×јZÕ(rcól—|jd«}|jj«}|jj |j «|jj |«t jtj«}|jjd|zdz|zd¬«y)NÚbuildz(^|z)(RCS|CVS|\.svn)r )Úis_regex) rJrTÚ get_fullnamerÙrìÚ build_baser,r=r;r<Úexclude_pattern)rrVÚbase_dirr<s rr=zmanifest_maker.prune_file_list…s�€Ø×*Ñ*¨7Ó3ˆØ×$Ñ$×1Ñ1Ó3ˆØ � ‰ ×јE×,Ñ,Ô-Ø � ‰ ×јHÔ%Ü�i‰iœŸ™ÓˆØ � ‰ ×%Ñ%Ø �S‰LÐ.Ñ .°Ñ 4¸qð &õ rcóŠ—t|d«r|j«Stjddd¬«|j «S)a0 The parent class implementation of this method (``sdist``) will try to include data files, which might cause recursion problems when ``include_package_data=True``. Therefore, avoid triggering any attempt of analyzing/building the manifest again. Úget_data_files_without_manifestz@`build_py` command does not inherit from setuptools' `build_py`.z± Custom 'build_py' does not implement 'get_data_files_without_manifest'. Please extend command classes from setuptools instead of distutils. z!https://peps.python.org/pep-0632/)Úsee_url)Úhasattrr]rÚemitÚget_data_files)rÚbuild_pys rÚ_safe_data_fileszmanifest_maker._safe_data_files�sJ€ô �8Ð>Ô ?Ø×;Ñ;Ó=Ð =ä$×)Ñ)Ø Nð ð8õ  ð×&Ñ&Ó(Ð(rN)r(r)r*r9r‚rªrÔrBr7r´Ú staticmethodrFr8r;r<r=rcr.rrrÖrÖ/sR„Ø€Hò)ò ò ò)ò >ò"ðñ;óð;ò -ò$,ò )ò ó)rrÖcó¬—dj|«}|jd«}t|d«5}|j|«ddd«y#1swYyxYw)z{Create a file with the specified name and write 'contents' (a sequence of strings without line terminators) to it. Ú r»r¼N)rŸr¾rÀrÁ)rŒÚcontentsrÃs rr²r²¨sF€ð�y‰y˜Ó"€Hð�‰˜wÓ'€Hä ˆh˜Ô  Ø �‰�Ô÷ × Ñ ús ¯A Á AcóÜ—tjd|«|js¶|jj}|j |j c|_}|j|jc|_} |j|j«||c|_|_t|jdd«}tj|j|«yy#||c|_|_wxYw)Nz writing %sÚzip_safe)rr½r¿rTrr€rbrrWÚwrite_pkg_inforvr¡rÚwrite_safety_flag)ÚcmdÚbasenamerŒrÚoldverÚoldnameÚsafes rrjrjµsŀ܇H�Hˆ\˜8Ô$Ø �;Š;Ø×#Ñ#×,Ñ,ˆØ#&§?¡?°H×4DÑ4DÐ ˆÔ˜&Ø!$§¡¨x¯}©}ЈŒ �wð >ð $ˆH× #Ñ # C§L¡LÔ 1à.5°vÐ +ˆHŒM˜8Ô+ä�s×'Ñ'¨°TÓ:ˆä×#Ñ# C§L¡L°$Õ7ð øð/6°vÐ +ˆHŒM˜8Õ+ús Á6CÃC+có—y)aj Unused: left to avoid errors when updating (from source) from <= 67.8. Old installations have a .dist-info directory with the entry-point ``depends.txt = setuptools.command.egg_info:warn_depends_obsolete``. This may trigger errors when running the first egg_info in build_meta. TODO: Remove this function in a version sufficiently > 68. Nr.©rlrmrŒs rÚwarn_depends_obsoletersÈs�rc ó—tj|jj«D�cgc]}|j dd«d‘Œc}«}|j d|dj t|««dz«ycc}w)Nrir rztop-level namesrf)r‹ÚfromkeysrTÚiter_distribution_namesr:r²rŸÚsorted)rlrmrŒÚkÚpkgss rÚwrite_toplevel_namesrz×sp€Ü �=‰=Ø$'×$4Ñ$4×$LÑ$LÔ$NóÙ$N˜qˆ�‰��Q‹˜ÓÐ$Nñó €Dð‡N�NÐ$ h°· ± ¼&À»,Ó0GÈ$Ñ0NÕOùòs¬A>có —t|||d«y)NT)Ú write_argrrs rÚ overwrite_argr}Þs€Ü ˆc�8˜X tÕ,rcóÊ—tjj|«d}t|j|d«}|�dj |«dz}|j ||||«y)Nrrf)r;r%Úsplitextr¡rTrŸr¹)rlrmrŒr¸Úargnamer‡s rr|r|âs\€Ü�g‰g×јxÓ(¨Ñ+€GÜ �C×$Ñ$ g¨tÓ 4€EØ ÐØ— ‘ ˜%Ó  4Ñ'ˆØ×јW h°°uÕ=rcó¨—tj|jj«}tj|«}|j d||d«y)Nz entry pointsT)r rÎrTrÍÚrenderr¹)rlrmrŒÚepsÚdefns rÚ write_entriesr…êsB€Ü × Ñ ˜S×-Ñ-×:Ñ:Ó ;€CÜ × Ñ  Ó $€DØ×ј^¨X°t¸TÕBrcó’—tj|«}tj|«}|›d|›d|xst›�}|r|d|›�z }|S)r¬r�z-py)r ržrâ)rr€r®r¯rWrbÚeggs rr­r­ðsV€ä × ,Ñ ,¨XÓ 6€DÜ×/Ñ/° Ó<€GØ ˆF�!�G�9˜C  Ò 6¬hÐ7Ð 8€CÙØ ��8�*ˆ~ÑˆØ €Jrcó—eZdZdZy)ÚEggInfoDeprecationWarningz?Deprecated behavior warning for EggInfo, bypassing suppression.N)r(r)r*r+r.rrr‰r‰ús„ÚIrr‰rÜ)NN):r+Údistutils.filelistrÚ _FileListÚdistutils.errorsrÚdistutils.utilrr—rrðr;r,r)ror‰Ú _importlibrr0r r r Ú setuptoolsr Úsetuptools.command.sdistrrÚsetuptools.command.setoptrÚsetuptools.commandrÚsetuptools.unicode_utilsr"Úsetuptools.globrÚsetuptools.externrÚwarningsrÚformatÚ version_inforârrOrQrvrÖr²rjrsÚwrite_requirementsÚwrite_setup_requirementsrzr}r|r…r­r‰r.rrÚr›sðñ<õ5Ý3Ý'ÝÛÛÛÛ Û Û Û Ûå!ß,ÝåÝ*Ý1Ý1Ý(Ý0Ý å'Ý3ð ˆ7�>‰>˜3×+Ñ+Ð ,€÷CñCò*UO÷p,ñ,ô^c$ˆz˜7ôc$ôLEBˆyôEBôPv)�Uôv)òr ò8ò&ð"×4Ñ4ÐØ'×@Ñ@ÐòPò-ó>òCó ôJÐ <õJr