G@b ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl mZmZddlmZddlZddlmZddlmZddlmZd d lmZd Zeejd d ZdejvZ ej!"ej#dkoe dZ$GddZ%Gdde%Z&Gdde%Z'ededdededdededddedieded d!edd ed d"gZ(Gd#d$Z)Gd%d&e)Z*ej!+d'd(Z,d)Z-dS)*N)futures)Path)AnyCallable)ZipFile)path) Requirement)SetuptoolsDeprecationWarning)DALSz __import__('setuptools').setup()TIMEOUT_BACKEND_TEST180__pypy__win32z_The combination of PyPy + Windows + pytest-xdist + ProcessPoolExecutor is flaky and problematic)reasonceZdZddZdS)BuildBackendBase.Nsetuptools.build_metac4||_|pi|_||_dS)N)cwdenv backend_name)selfrrrs r/builddir/build/BUILD/cloudlinux-venv-1.0.10/venv/lib/python3.11/site-packages/setuptools/tests/test_build_meta.py__init__zBuildBackendBase.__init__&s"9"()rNr)__name__ __module__ __qualname__rrrrr%s())))))rrcHeZdZdZfdZdededeffdZdZ xZ S) BuildBackendzPEP 517 Build Backendcntj|i|tjd|_dS)Nr ) max_workers)superrrProcessPoolExecutorpool)rargskwargs __class__s rrzBuildBackend.__init__/s8$)&)))/A>>> rnamereturn.cfd}|S).method6s;7??48,,D'dh8IJJFC i&&ry1188AA'ty'BtBBBrBBII'RRR' V V V """... 3 TTTTUUUUUUO5{GL   XL!VWWW sA*B//AE =E r!)rr,rGs`` r __getattr__zBuildBackend.__getattr__3s)        rc|dStjtt5t j|tjdkr tjn tj ddddS#1swxYwYdS)Nnt) contextlibsuppressProcessLookupErrorrAr2killr,signalSIGTERMSIGKILL)rrFs rr;zBuildBackend._killHs ; F  !3W = = P P GC27d?? O O O P P P P P P P P P P P P P P P P P Psed?iZ&d@Z'd>edAiZ(dBZ)ej dCdDdEZ*d S)FTestBuildMetaBackendrc,t|jS)Nr)r#r)rs rget_build_backendz&TestBuildMetaBackend.get_build_backends):;;;;r)paramsc#Ktj|jt||5|VddddS#1swxYwYdS)N)prefix)rbuildparamrSas_cwdro)rtmpdirrequests r build_backendz"TestBuildMetaBackend.build_backends 7=V5555 ]]__ + +((** * * * + + + + + + + + + + + + + + + + + +sA##A'*A'cx|}dg}t|t|ksJdSNsix)get_requires_for_build_wheelsortedrrxactualexpecteds r!test_get_requires_for_build_wheelz6TestBuildMetaBackend.test_get_requires_for_build_wheel?;;==7f~~!1!1111111rcx|}dg}t|t|ksJdSrz)get_requires_for_build_sdistr}r~s r!test_get_requires_for_build_sdistz6TestBuildMetaBackend.test_get_requires_for_build_sdistrrcDtjd}tj|||}tj||}tj|sJtjdrJt|5}t| }dddn #1swxYwYd|D}d|D}t|dksJdS)Nz pip-wheelworld.pyc3DK|]}|d|VdS)z.pyNendswith.0fs r z8TestBuildMetaBackend.test_build_wheel..s3IIqzz%7H7HI!IIIIIIrc<g|]}|d|S)rhrrs r z9TestBuildMetaBackend.test_build_wheel.. s)KKKAJJz4J4JK1KKKrr ) r2rr3makedirs build_wheeljoinisfilersetnamelistlen) rrxdist_dir wheel_name wheel_filezipfilewheel_contentspython_scriptsmoduless rtest_build_wheelz%TestBuildMetaBackend.test_build_wheelsB7??;// H"..x88 W\\(J77 w~~j)))))7>>*----- Z  5G !1!1!3!344N 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 JI^IIIKKnKKK7||q      s:"C((C,/C, build_type)wheelsdistcfddtdtdd}tj|tjd|z}|}t |d|z}||}tdd d 5}|d dddn #1swxYwY||} tj tj ||sJ|| ksJttj || d  ||} | | ksJtj tj || dksJdS)Nz$from setuptools import setup setup()z0.0.1zo [metadata] name = foo version = file: VERSION [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta" )rhVERSIONrjpyproject.tomlz preexisting-build_rwtutf-8encodingz0.0.2wbr) r rrsr2r3rorbopenwriterrclosegetsize) rr tmpdir_cwdfilesrrx build_method first_result version_file second_result third_results r%test_build_with_existing_file_presentz:TestBuildMetaBackend.test_build_with_existing_file_present s @#  & 57??>J#>??..00 }h.CDD $|H-- )TG 4 4 4 (   w ' ' ' ( ( ( ( ( ( ( ( ( ( ( ( ( ( (% X.. w~~bgll8\BBCCCCC},,,, RW\\(M 2 2D99??AAA#|H-- },,,,wrw||HlCCDDqHHHHHHsB>>CC setup_scriptNc tdtddddddddd d id }|r||d <|}|5tj|d dg}t j5|D]}t jd|t| d}| d}dddn #1swxYwYdddn #1swxYwYtj tj|d|5} t| } dddn #1swxYwYt#tj|d|5} t| } t'| dd} t'| dd}t'| dd}dddn #1swxYwY| dhz hdksJ| hdksJ|dksJddddddt't+dzdt't+dzfD]}|| vs J|| f| dsJ|d ksJdS)!Naj [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta" [project] name = "foo" license = {text = "MIT"} description = "This is a Python package" dynamic = ["version", "readme"] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers" ] urls = {Homepage = "http://github.com"} dependencies = [ "appdirs", ] [project.optional-dependencies] all = [ "tomli>=1", "pyscaffold>=4,<5", 'importlib; python_version == "2.6"', ] [project.scripts] foo = "foo.cli:main" [tool.setuptools] zip-safe = false package-dir = {"" = "src"} packages = {find = {where = ["src"]}} license-files = ["LICENSE*"] [tool.setuptools.dynamic] version = {attr = "foo.__version__"} readme = {file = "README.rst"} [tool.distutils.sdist] formats = "gztar" zd global-include *.py *.txt global-exclude *.py[cod] zThis is a ``README``z!---- placeholder MIT license ----fooz__version__ = '0.1'z__version__: strz def main(): print('hello world')) __init__.pyz __init__.pyizcli.pyzdata.txtzpy.typed)r MANIFEST.inz README.rstz LICENSE.txtsrcrhzQ'tool.setuptools.license-files' is deprecated in favor of 'project.license-files'z/`project.license` as a TOML table is deprecatedignoretempfoo-0.1.dist-info/METADATAr&foo-0.1.dist-info/licenses/LICENSE.txt"foo-0.1.dist-info/entry_points.txtzfoo-0.1/setup.py>foo-0.1 foo-0.1/srcfoo-0.1/src/foofoo-0.1/PKG-INFOfoo-0.1/setup.cfgfoo-0.1/README.rstfoo-0.1/LICENSE.txtfoo-0.1/MANIFEST.infoo-0.1/pyproject.tomlfoo-0.1/src/foo/cli.pyfoo-0.1/src/foo.egg-infofoo-0.1/src/foo/data.txtfoo-0.1/src/foo/py.typedfoo-0.1/src/foo/__init__.pyfoo-0.1/src/foo/__init__.pyi!foo-0.1/src/foo.egg-info/PKG-INFO$foo-0.1/src/foo.egg-info/SOURCES.txt%foo-0.1/src/foo.egg-info/not-zip-safe%foo-0.1/src/foo.egg-info/requires.txt&foo-0.1/src/foo.egg-info/top_level.txt)foo-0.1/src/foo.egg-info/entry_points.txt-foo-0.1/src/foo.egg-info/dependency_links.txt> foo/cli.py foo/data.txt foo/py.typedfoo/__init__.pyfoo/__init__.pyifoo-0.1.dist-info/WHEELfoo-0.1.dist-info/RECORDfoo-0.1.dist-info/top_level.txtrrrz!Summary: This is a Python packagez License: MITzLicense-File: LICENSE.txtz+Classifier: Intended Audience :: DeveloperszRequires-Dist: appdirszRequires-Dist: ztomli>=1 ; extra == "all"z2importlib; python_version=="2.6" and extra =="all"z$[console_scripts] foo = foo.cli:main)r rorurrswarningscatch_warningsfilterwarningsr build_sdistrtarfilerr2rrgetnamesrrrSreadr stripr)rrvrrrxmsgsmsg sdist_pathrtarsdist_contentsrrmetadatalicenseepointslines r test_build_with_pyproject_configz5TestBuildMetaBackend.test_build_with_pyproject_config?sm#)++X  1>#8$6@ B " k> > ~  - ,E* ..00 ]]__ ? ? Ju   cAD(** ? ?YYC+Hc;WXXXX*66v>> *66v>>  ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?\"',,vvzBB C C 1s 00N 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1RW\\&&*== > > W' !1!1!3!344N7<<(DEEwOOH EFFG',,'KLLgVVG  W W W W W W W W W W W W W W W!3 449 9 9     0 " " "     ===== 0  ' 9 $ K0K$L$L M M M +RSSTT U  6 6D8###dH%5####~~(()?@@@@@}}"IIIIIIIs\,C4A C C4C! !C4$C! %C44C8;C82"E  E$'E$B H00H47H4cdtdtdtdd}|}|5tj||d}|d}dddn #1swxYwY|dz sJ|dz sJ|dz rJ|d z rJ|d z rJ|d z rJ|d z rJ|d z rJtj tj |d|5}t| dd}|}d|vsJ dddn #1swxYwYt!tj |d|5} t| dd} | }d|vsJ dddn #1swxYwY|| fD]} dD]} | | vsJ dD]} | | vsJ dS)NaR [build-system] requires = ["setuptools", "wheel"] build-backend = "setuptools.build_meta" [project] name = "foo" description = "This is a Python package" version = "42" dependencies = ["six"] zO def run(): print('hello') z __import__('setuptools').setup( name='bar', version='13', ) )rrirhrztemp/foo-42.tar.gzztemp/foo-42-py3-none-any.whlztemp/bar-13.tar.gzztemp/bar-42.tar.gzztemp/foo-13.tar.gzztemp/bar-13-py3-none-any.whlztemp/bar-42-py3-none-any.whlztemp/foo-13-py3-none-any.whlzfoo-42/PKG-INFOrzbar-13/PKG-INFOzfoo-42.dist-info/METADATAzbar-13.dist-info/METADATA)z Name: fooz Version: 42)z Name: barz Version: 13)r rorurrsrrexistsrrr2rrS extractfilerrrr) rrvrrxrrrpkg_infomembersrrfilers r(test_static_metadata_in_pyproject_configz=TestBuildMetaBackend.test_static_metadata_in_pyproject_configs#    )  :..00 ]]__ ; ; Ju   &226::J&226::J ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; --557777777??AAAAA1199;;;;;1199;;;;;1199;;;;;;;CCEEEEE;;CCEEEEE;;CCEEEEE \"',,vvzBB C C 4s3??+<==BBDDgNNHllnnG$G33333 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 RW\\&&*== > > >'7<<(CDDgNNH&&((G.g===== > > > > > > > > > > > > > > > h& ( (D4 $ $t|||||4 ( (4''''' ( ( (s7?B!!B%(B%'AHH H=>JJ J ctjd}tj|||}tjtj||sJdS)Nz pip-sdist)r2rr3rrrrrrxr sdist_names rtest_build_sdistz%TestBuildMetaBackend.test_build_sdistsh7??;// H"..x88 w~~bgll8Z@@AAAAAAArctjd}tj|||}tjtj||dsJdS)N pip-dist-infoMETADATA)r2rr3r prepare_metadata_for_build_wheelrr)rrxr dist_infos r%test_prepare_metadata_for_build_wheelz:TestBuildMetaBackend.test_prepare_metadata_for_build_wheelsj7???33 H!BB8LL w~~bgll8Y KKLLLLLLLrcdD]}tj|d|d}tjtj|dsJdS)zy Some users might pass metadata_directory pre-populated with `.tox` or `.venv`. See issue #3523. )z?.tox/python/lib/python3.10/site-packages/attrs-22.1.0.dist-infozD.tox/python/lib/python3.10/site-packages/autocommand-2.2.1.dist-infoz>.nox/python/lib/python3.10/site-packages/build-0.8.0.dist-infoz4.venv/python3.10/site-packages/click-8.1.3.dist-infoz5venv/python3.10/site-packages/distlib-0.3.5.dist-infoz4env/python3.10/site-packages/docutils-0.19.dist-infoT)exist_okrrN)r2rrrrr)rrx pre_existingrs rtest_prepare_metadata_inplacez2TestBuildMetaBackend.test_prepare_metadata_inplacesp   5 5L K t 4 4 4 4 4!BB3GG w~~bgll9jAABBBBBBBrctjd}||}tjtj||sJdS)Ndist)r2rr3rrrrs rtest_build_sdist_explicit_distz3TestBuildMetaBackend.test_build_sdist_explicit_dist0sZ7??6**"..x88 w~~bgll8Z@@AAAAAAArc"tjd}tj|||}tjtj||sJtjd}tj|stjd}t|dd5}| }dddn #1swxYwYt|dd5}| | dd dddn #1swxYwYtj |tj||d}tjtjtjd|sJdS) N out_sdistrhrjrtrrrzversion='0.0.0'zversion='0.0.1')r2rr3rrrrrrrrreplaceshutilrmtree)rrxsdist_into_directoryr setup_loc file_handlercontents rtest_build_sdist_version_changez4TestBuildMetaBackend.test_build_sdist_version_change7s,!w{;; ()))"../CDD w~~bgll+?LLMMMMM GOOJ// w~~i(( 5 44I )TG 4 4 4 * "''))G * * * * * * * * * * * * * * * )TG 4 4 4 V   w/@BSTT U U U V V V V V V V V V V V V V V V  *+++ ()))"..{;; w~~bgll27??;+G+GTTUUUUUUUs$7DDD5*E++E/2E/ctddtdd}tj||}|d}t jtjd|5}td| DsJ ddddS#1swxYwYdS)N __import__('setuptools').setup( name='foo', version='0.0.0', py_modules=['hello'] )rr)rhrirrc3K|]}d|vV dS)rNr!rr,s rrzNTestBuildMetaBackend.test_build_sdist_pyproject_toml_exists..gs(KKD'4/KKKKKKr r rrsrorrrr2ranyrrrrrx targz_pathrs r&test_build_sdist_pyproject_toml_existsz;TestBuildMetaBackend.test_build_sdist_pyproject_toml_existsPs/"  $ 5..00 "..v66 \"',,vz:: ; ; LsKKCLLNNKKKKK K KK K L L L L L L L L L L L L L L L L L L.C  CCctjtd|}|d}t jtjd|5}td| DsJ ddddS#1swxYwYdS)Nrrc3K|]}d|vV dSrhNr!rs rrzHTestBuildMetaBackend.test_build_sdist_setup_py_exists..qs'EEdzT)EEEEEEr) rrsdefnsrorrrr2rrr)rrrxrrs r test_build_sdist_setup_py_existsz5TestBuildMetaBackend.test_build_sdist_setup_py_existsis 58..00 "..v66 \"',,vz:: ; ; FsEEcllnnEEEEE E EE E F F F F F F F F F F F F F F F F F Fs;.B77B;>B;ctddtdd}tj||}|d}t jtjd|5}td| DrJ ddddS#1swxYwYdS)Nz __import__('setuptools').setup( name='foo', version='0.0.0', py_modules=['hello'] )rz" exclude setup.py )rhrirrc3K|]}d|vV dSr$r!rs rrzSTestBuildMetaBackend.test_build_sdist_setup_py_manifest_excluded..s'II$:-IIIIIIrrrs r+test_build_sdist_setup_py_manifest_excludedz@TestBuildMetaBackend.test_build_sdist_setup_py_manifest_excludedss1    " 5..00 "..v66 \"',,vz:: ; ; JsII#,,..IIIII I II I J J J J J J J J J J J J J J J J J Jr!ctddtdd}tj||}|ddS)NrrzE [sdist] formats=zip rhrirjr)r rrsror)rrrrxs r3test_build_sdist_builds_targz_even_if_zip_indicatedzHTestBuildMetaBackend.test_build_sdist_builds_targz_even_if_zip_indicatedst  $ 5..00 !!&)))))rz __import__('setuptools').setup( name='foo', version=__import__('hello').__version__, py_modules=['hello'] )z__version__ = "0.0.0"z9 [sdist] formats=zip r+ctj|j|}t jt d5|dddddS#1swxYwYdS)Nz^No module named 'hello'$matchr)rrs_relative_path_import_filesror<raises ImportErrorrrrrxs r%test_build_sdist_relative_path_importz:TestBuildMetaBackend.test_build_sdist_relative_path_imports 43444..00 ];.I J J J . .  % %f - - - . . . . . . . . . . . . . . . . . .s A,,A03A0zX [project] name = "proj" version = "42" projrr)rrctt|d}|sJ|D]5}|st j|jdksJ6dS)z?All files in the directory should be either links or hard linksz**/*rN)listrglob is_symlinkr2statst_nlink)r parent_dirrrs r_assert_link_treez&TestBuildMetaBackend._assert_link_treeswT*%%**62233 u C CD??$$ B (>(B(B(BB C Crctj|j|}t drJ|dt drJdS)z Sanity check to ensure tests with --mode=strict are different from the ones without --mode. --mode=strict should create a local directory with a package tree. The directory should not get created otherwise. rsrN)rrs_simple_pyproject_examplerorrbuild_editabler3s r%test_editable_without_config_settingsz:TestBuildMetaBackend.test_editable_without_config_settingss~ 41222..00 =='')))))$$V,,,=='')))))))rcdddgi}tj|j|}t drJt d|d||d|t dsJdS)Nz--build-option build_extz --inplacerszbuild/proj-42-py3-none-any.whl) rrsr?rorrmkdirrrrrconfig_settingsrxs rtest_build_wheel_inplacez-TestBuildMetaBackend.test_build_wheel_inplaces+k;-GH 41222..00 ==''))))) W 66wPPP!!'?;;;455<<>>>>>>>rrFz editable-modestrictctji|jdiitdrJ|}|d||d|d|ttd ddS)N_metarsrz__editable__.*) rrsr?rrro#prepare_metadata_for_build_editabler@r=nextr8rEs r"test_editable_with_config_settingsz7TestBuildMetaBackend.test_editable_with_config_settingss Bd4BgrBBCCC=='')))))..00 99'?SSS$$V_gFFF tDMM$6$67G$H$HIIJJJJJr) setup_literal requirementsz'foo'rz['foo']z'foo\n'z 'foo\n\n'z['foo', 'bar']barz'# Has a comment line\nfoo'z'foo # Has an inline comment'z'foo \\\n >=3.0'zfoo>=3.0z 'foo\nbar'z 'foo\nbar\n'z['foo\n', 'bar\n'] use_wheelTFc:td|tdd}tj||}|r|j}n|j}t|}|} |t| ksJdS)Na from setuptools import setup setup( name="qux", version="0.0.0", py_modules=["hello"], setup_requires={setup_literal}, ) )rNrfrg)r formatrrsror|rr}) rrNrOrQrrrx get_requiresrrs rtest_setup_requiresz(TestBuildMetaBackend.test_setup_requiress&   f=f11  * 5..00  F(ELL(EL,''6&>>))))))rctdtdddd}tj||}|}|dgksJdS)Nzd [project] name = "proj" version = "42" z __import__('setuptools').setup( setup_requires=["foo"], py_modules = ["hello", "world"] ) z'hello'z'world')rrhrirr)r rrsror|)rrrrxsetup_requiress r'test_setup_requires_with_auto_discoveryz99"], ) z[ def run(): print('hello') rgr)r rrsror2r3rr)rrrrxrs r test_dont_install_setup_requiresz5TestBuildMetaBackend.test_dont_install_setup_requiresBs     * 5..00 7???33 H 66x@@@@@rrhaD import os import sys __import__('setuptools').setup( name='foo', version='0.0.0', ) sys_argv = os.path.abspath(sys.argv[0]) file_path = os.path.abspath('setup.py') assert sys_argv == file_path ctj|j|}t jt 5|dddddS#1swxYwYdSNr)rrs_sys_argv_0_passthroughror<r1AssertionErrorrr3s rtest_sys_argv_passthroughz.TestBuildMetaBackend.test_sys_argv_passthroughus 4/000..00 ]> * * . .  % %f - - - . . . . . . . . . . . . . . . . . .sA**A.1A.a import os assert os.path.isabs(__file__) __import__('setuptools').setup( name='foo', version='0.0.0', py_modules=['hello'], setup_requires=['six'], ) ctj|j|}|ddSr\)rrs_setup_py_file_abspathrorr3s rtest_setup_py_file_abspathz/TestBuildMetaBackend.test_setup_py_file_abspaths@ 4.///..00 !!&)))))r build_hook)rrcddi}tj|tjd}t jt |5t||dddddS#1swxYwYdS)NrhrzNo distribution was found.r.r)rrsreescaper<r1 ValueErrorrb)rrxrcrrs rtest_build_with_empty_setuppyz2TestBuildMetaBackend.test_build_with_empty_setuppysR  5i455 ]:S 1 1 1 7 7 .GM: . .v 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7sA//A36A3)+rrr rror<fixturer%rxrrrmark parametrizerSETUP_SCRIPT_STUBrrrrr r rr r&r)r,r r0r4r?r=rArGrMrUrXrZr]r_rarbrhr!rrrlrls*L<<<V^5!!!++"!+ 222 222 !!!( [\+=>>0I0I?>0Id [^d4E-FGGOJOJHGOJb=(=(=(~BBBMMMCCC"BBBVVV2LLL2FFFJJJ4***2D   ,T   ##$...$   +, ! !CCC * * *??? [./81L0MNNKKONK [) ug   % ! E7 # u~ . +eW 5 -w 7 :, / UEN + uen - "UEN 3   [[4-88#*#*98!"#*J)))8AAAD DD   $... DD     ***  [\+IJJ77KJ777rrlceZdZdZdZdZdS)TestBuildMetaLegacyBackendz setuptools.build_meta:__legacy__ctj|j|}|ddSr\)rrsr0rorr3s rr4z@TestBuildMetaLegacyBackend.test_build_sdist_relative_path_imports@ 43444..00 !!&)))))rctj|j|}|ddSr\)rrsr]rorr3s rr_z4TestBuildMetaLegacyBackend.test_sys_argv_passthroughs@ 4/000..00 !!&)))))rN)rrr rr4r_r!rrrnrns75L********rrnz/ignore::setuptools.SetuptoolsDeprecationWarningc||d}|dz t|dtd}|gksJdS)zHSetuptools should be resilient to setup.py with ``sys.exit(0)`` (#3973).zr import sys, setuptools setuptools.setup(name='foo', version='0.0.0') sys.exit(0) rhrrrrnN)r] write_textr r#r| monkeypatchtmp_pathsetuppyrds rtest_sys_exit_0_in_setuppyrwsyh G  &&tG}}w&GGG(?@@@G  / / 1 1R 7 7 7 7 7 7rc||d}|dz |dtjtd5t d}|ddddS#1swxYwYdS) Nz"import sys; sys.exit('some error')rhrrz some errorr.rrn)r]rrr<r1 SystemExitr#r|rss rtest_system_exit_in_setuppyrzsh2G &&w&AAA z 6 6 6//,CDDD,,...//////////////////s %A??BB).rKr`r2rerrOsysrr concurrentrpathlibrtypingrrrrr<jaracorpackaging.requirementsr setuptools.warningsr textwrapr rlintgetenvr8builtin_module_namesrBrjskipifplatform pytestmarkrr#r4r%rlrnrrwrzr!rrrs   ......<<<<<<6 #ibi.66 7 7 0 0[  LG'   )))))))) P P P P P# P P PF33333)333,D    D   &D    D   (D    D   . DD   4T    D   (T    7D   Q| ~t 7t 7t 7t 7t 7t 7t 7t 7n*****!5***$MNN 8 8ON 8/////r