.pnp.cjs 612 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456745774587459746074617462746374647465746674677468746974707471747274737474747574767477747874797480748174827483748474857486748774887489749074917492749374947495749674977498749975007501750275037504750575067507750875097510751175127513751475157516751775187519752075217522752375247525752675277528752975307531753275337534753575367537753875397540754175427543754475457546754775487549755075517552755375547555755675577558755975607561756275637564756575667567756875697570757175727573757475757576757775787579758075817582758375847585758675877588758975907591759275937594759575967597759875997600760176027603760476057606760776087609761076117612761376147615761676177618761976207621762276237624762576267627762876297630763176327633763476357636763776387639764076417642764376447645764676477648764976507651765276537654765576567657765876597660766176627663766476657666766776687669767076717672767376747675767676777678767976807681768276837684768576867687768876897690769176927693769476957696769776987699770077017702770377047705770677077708770977107711771277137714771577167717771877197720772177227723772477257726772777287729773077317732773377347735773677377738773977407741774277437744774577467747774877497750775177527753775477557756775777587759776077617762776377647765776677677768776977707771777277737774777577767777777877797780778177827783778477857786778777887789779077917792779377947795779677977798779978007801780278037804780578067807780878097810781178127813781478157816781778187819782078217822782378247825782678277828782978307831783278337834783578367837783878397840784178427843784478457846784778487849785078517852785378547855785678577858785978607861786278637864786578667867786878697870787178727873787478757876787778787879788078817882788378847885788678877888788978907891789278937894789578967897789878997900790179027903790479057906790779087909791079117912791379147915791679177918791979207921792279237924792579267927792879297930793179327933793479357936793779387939794079417942794379447945794679477948794979507951795279537954795579567957795879597960796179627963796479657966796779687969797079717972797379747975797679777978797979807981798279837984798579867987798879897990799179927993799479957996799779987999800080018002800380048005800680078008800980108011801280138014801580168017801880198020802180228023802480258026802780288029803080318032803380348035803680378038803980408041804280438044804580468047804880498050805180528053805480558056805780588059806080618062806380648065806680678068806980708071807280738074807580768077807880798080808180828083808480858086808780888089809080918092809380948095809680978098809981008101810281038104810581068107810881098110811181128113811481158116811781188119812081218122812381248125812681278128812981308131813281338134813581368137813881398140814181428143814481458146814781488149815081518152815381548155815681578158815981608161816281638164816581668167816881698170817181728173817481758176817781788179818081818182818381848185818681878188818981908191819281938194819581968197819881998200820182028203820482058206820782088209821082118212821382148215821682178218821982208221822282238224822582268227822882298230823182328233823482358236823782388239824082418242824382448245824682478248824982508251825282538254825582568257825882598260826182628263826482658266826782688269827082718272827382748275827682778278827982808281828282838284828582868287828882898290829182928293829482958296829782988299830083018302830383048305830683078308830983108311831283138314831583168317831883198320832183228323832483258326832783288329833083318332833383348335833683378338833983408341834283438344834583468347834883498350835183528353835483558356835783588359836083618362836383648365836683678368836983708371837283738374837583768377837883798380838183828383838483858386838783888389839083918392839383948395839683978398839984008401840284038404840584068407840884098410841184128413841484158416841784188419842084218422842384248425842684278428842984308431843284338434843584368437843884398440844184428443844484458446844784488449845084518452845384548455845684578458845984608461846284638464846584668467846884698470847184728473847484758476847784788479848084818482848384848485848684878488848984908491849284938494849584968497849884998500850185028503850485058506850785088509851085118512851385148515851685178518851985208521852285238524852585268527852885298530853185328533853485358536853785388539854085418542854385448545854685478548854985508551855285538554855585568557855885598560856185628563856485658566856785688569857085718572857385748575857685778578857985808581858285838584858585868587858885898590859185928593859485958596859785988599860086018602860386048605860686078608860986108611861286138614861586168617861886198620862186228623862486258626862786288629863086318632863386348635863686378638863986408641864286438644864586468647864886498650865186528653865486558656865786588659866086618662866386648665866686678668866986708671867286738674867586768677867886798680868186828683868486858686868786888689869086918692869386948695869686978698869987008701870287038704870587068707870887098710871187128713871487158716871787188719872087218722872387248725872687278728872987308731873287338734873587368737873887398740874187428743874487458746874787488749875087518752875387548755875687578758875987608761876287638764876587668767876887698770877187728773877487758776877787788779878087818782878387848785878687878788878987908791879287938794879587968797879887998800880188028803880488058806880788088809881088118812881388148815881688178818881988208821882288238824882588268827882888298830883188328833883488358836883788388839884088418842884388448845884688478848884988508851885288538854885588568857885888598860886188628863886488658866886788688869887088718872887388748875887688778878887988808881888288838884888588868887888888898890889188928893889488958896889788988899890089018902890389048905890689078908890989108911891289138914891589168917891889198920892189228923892489258926892789288929893089318932893389348935893689378938893989408941894289438944894589468947894889498950895189528953895489558956895789588959896089618962896389648965896689678968896989708971897289738974897589768977897889798980898189828983898489858986898789888989899089918992899389948995899689978998899990009001900290039004900590069007900890099010901190129013901490159016901790189019902090219022902390249025902690279028902990309031903290339034903590369037903890399040904190429043904490459046904790489049905090519052905390549055905690579058905990609061906290639064906590669067906890699070907190729073907490759076907790789079908090819082908390849085908690879088908990909091909290939094909590969097909890999100910191029103910491059106910791089109911091119112911391149115911691179118911991209121912291239124912591269127912891299130913191329133913491359136913791389139914091419142914391449145914691479148914991509151915291539154915591569157915891599160916191629163916491659166916791689169917091719172917391749175917691779178917991809181918291839184918591869187918891899190919191929193919491959196919791989199920092019202920392049205920692079208920992109211921292139214921592169217921892199220922192229223922492259226922792289229923092319232923392349235923692379238923992409241924292439244924592469247924892499250925192529253925492559256925792589259926092619262926392649265926692679268926992709271927292739274927592769277927892799280928192829283928492859286928792889289929092919292929392949295929692979298929993009301930293039304930593069307930893099310931193129313931493159316931793189319932093219322932393249325932693279328932993309331933293339334933593369337933893399340934193429343934493459346934793489349935093519352935393549355935693579358935993609361936293639364936593669367936893699370937193729373937493759376937793789379938093819382938393849385938693879388938993909391939293939394939593969397939893999400940194029403940494059406940794089409941094119412941394149415941694179418941994209421942294239424942594269427942894299430943194329433943494359436943794389439944094419442944394449445944694479448944994509451945294539454945594569457945894599460946194629463946494659466946794689469947094719472947394749475947694779478947994809481948294839484948594869487948894899490949194929493949494959496949794989499950095019502950395049505950695079508950995109511951295139514951595169517951895199520952195229523952495259526952795289529953095319532953395349535953695379538953995409541954295439544954595469547954895499550955195529553955495559556955795589559956095619562956395649565956695679568956995709571957295739574957595769577957895799580958195829583958495859586958795889589959095919592959395949595959695979598959996009601960296039604960596069607960896099610961196129613961496159616961796189619962096219622962396249625962696279628962996309631963296339634963596369637963896399640964196429643964496459646964796489649965096519652965396549655965696579658965996609661966296639664966596669667966896699670967196729673967496759676967796789679968096819682968396849685968696879688968996909691969296939694969596969697969896999700970197029703970497059706970797089709971097119712971397149715971697179718971997209721972297239724972597269727972897299730973197329733973497359736973797389739974097419742974397449745974697479748974997509751975297539754975597569757975897599760976197629763976497659766976797689769977097719772977397749775977697779778977997809781978297839784978597869787978897899790979197929793979497959796979797989799980098019802980398049805980698079808980998109811981298139814981598169817981898199820982198229823982498259826982798289829983098319832983398349835983698379838983998409841984298439844984598469847984898499850985198529853985498559856985798589859986098619862986398649865986698679868986998709871987298739874987598769877987898799880988198829883988498859886988798889889989098919892989398949895989698979898989999009901990299039904990599069907990899099910991199129913991499159916991799189919992099219922992399249925992699279928992999309931993299339934993599369937993899399940994199429943994499459946994799489949995099519952995399549955995699579958995999609961996299639964996599669967996899699970997199729973997499759976997799789979998099819982998399849985998699879988998999909991999299939994999599969997999899991000010001100021000310004100051000610007100081000910010100111001210013100141001510016100171001810019100201002110022100231002410025100261002710028100291003010031100321003310034100351003610037100381003910040100411004210043100441004510046100471004810049100501005110052100531005410055100561005710058100591006010061100621006310064100651006610067100681006910070100711007210073100741007510076100771007810079100801008110082100831008410085100861008710088100891009010091100921009310094100951009610097100981009910100101011010210103101041010510106101071010810109101101011110112101131011410115101161011710118101191012010121101221012310124101251012610127101281012910130101311013210133101341013510136101371013810139101401014110142101431014410145101461014710148101491015010151101521015310154101551015610157101581015910160101611016210163101641016510166101671016810169101701017110172101731017410175101761017710178101791018010181101821018310184101851018610187101881018910190101911019210193101941019510196101971019810199102001020110202102031020410205102061020710208102091021010211102121021310214102151021610217102181021910220102211022210223102241022510226102271022810229102301023110232102331023410235102361023710238102391024010241102421024310244102451024610247102481024910250102511025210253102541025510256102571025810259102601026110262102631026410265102661026710268102691027010271102721027310274102751027610277102781027910280102811028210283102841028510286102871028810289102901029110292102931029410295102961029710298102991030010301103021030310304103051030610307103081030910310103111031210313103141031510316103171031810319103201032110322103231032410325103261032710328103291033010331103321033310334103351033610337103381033910340103411034210343103441034510346103471034810349103501035110352103531035410355103561035710358103591036010361103621036310364103651036610367103681036910370103711037210373103741037510376103771037810379103801038110382103831038410385103861038710388103891039010391103921039310394103951039610397103981039910400104011040210403104041040510406104071040810409104101041110412104131041410415104161041710418104191042010421104221042310424104251042610427104281042910430104311043210433104341043510436104371043810439104401044110442104431044410445104461044710448104491045010451104521045310454104551045610457104581045910460104611046210463104641046510466104671046810469104701047110472104731047410475104761047710478104791048010481104821048310484104851048610487104881048910490104911049210493104941049510496104971049810499105001050110502105031050410505105061050710508105091051010511105121051310514105151051610517105181051910520105211052210523105241052510526105271052810529105301053110532105331053410535105361053710538105391054010541105421054310544105451054610547105481054910550105511055210553105541055510556105571055810559105601056110562105631056410565105661056710568105691057010571105721057310574105751057610577105781057910580105811058210583105841058510586105871058810589105901059110592105931059410595105961059710598105991060010601106021060310604106051060610607106081060910610106111061210613106141061510616106171061810619106201062110622106231062410625106261062710628106291063010631106321063310634106351063610637106381063910640106411064210643106441064510646106471064810649106501065110652106531065410655106561065710658106591066010661106621066310664106651066610667106681066910670106711067210673106741067510676106771067810679106801068110682106831068410685106861068710688106891069010691106921069310694106951069610697106981069910700107011070210703107041070510706107071070810709107101071110712107131071410715107161071710718107191072010721107221072310724107251072610727107281072910730107311073210733107341073510736107371073810739107401074110742107431074410745107461074710748107491075010751107521075310754107551075610757107581075910760107611076210763107641076510766107671076810769107701077110772107731077410775107761077710778107791078010781107821078310784107851078610787107881078910790107911079210793107941079510796107971079810799108001080110802108031080410805108061080710808108091081010811108121081310814108151081610817108181081910820108211082210823108241082510826108271082810829108301083110832108331083410835108361083710838108391084010841108421084310844108451084610847108481084910850108511085210853108541085510856108571085810859108601086110862108631086410865108661086710868108691087010871108721087310874108751087610877108781087910880108811088210883108841088510886108871088810889108901089110892108931089410895108961089710898108991090010901109021090310904109051090610907109081090910910109111091210913109141091510916109171091810919109201092110922109231092410925109261092710928109291093010931109321093310934109351093610937109381093910940109411094210943109441094510946109471094810949109501095110952109531095410955109561095710958109591096010961109621096310964109651096610967109681096910970109711097210973109741097510976109771097810979109801098110982109831098410985109861098710988109891099010991109921099310994109951099610997109981099911000110011100211003110041100511006110071100811009110101101111012110131101411015110161101711018110191102011021110221102311024110251102611027110281102911030110311103211033110341103511036110371103811039110401104111042110431104411045110461104711048110491105011051110521105311054110551105611057110581105911060110611106211063110641106511066110671106811069110701107111072110731107411075110761107711078110791108011081110821108311084110851108611087110881108911090110911109211093110941109511096110971109811099111001110111102111031110411105111061110711108111091111011111111121111311114111151111611117111181111911120111211112211123111241112511126111271112811129111301113111132111331113411135111361113711138111391114011141111421114311144111451114611147111481114911150111511115211153111541115511156111571115811159111601116111162111631116411165111661116711168111691117011171111721117311174111751117611177111781117911180111811118211183111841118511186111871118811189111901119111192111931119411195111961119711198111991120011201112021120311204112051120611207112081120911210112111121211213112141121511216112171121811219112201122111222112231122411225112261122711228112291123011231112321123311234112351123611237112381123911240112411124211243112441124511246112471124811249112501125111252112531125411255112561125711258112591126011261112621126311264112651126611267112681126911270112711127211273112741127511276112771127811279112801128111282112831128411285112861128711288112891129011291112921129311294112951129611297112981129911300113011130211303113041130511306113071130811309113101131111312113131131411315113161131711318113191132011321113221132311324113251132611327113281132911330113311133211333113341133511336113371133811339113401134111342113431134411345113461134711348113491135011351113521135311354113551135611357113581135911360113611136211363113641136511366113671136811369113701137111372113731137411375113761137711378113791138011381113821138311384113851138611387113881138911390113911139211393113941139511396113971139811399114001140111402114031140411405114061140711408114091141011411114121141311414114151141611417114181141911420114211142211423114241142511426114271142811429114301143111432114331143411435114361143711438114391144011441114421144311444114451144611447114481144911450114511145211453114541145511456114571145811459114601146111462114631146411465114661146711468114691147011471114721147311474114751147611477114781147911480114811148211483114841148511486114871148811489114901149111492114931149411495114961149711498114991150011501115021150311504115051150611507115081150911510115111151211513115141151511516115171151811519115201152111522115231152411525
  1. #!/usr/bin/env node
  2. /* eslint-disable */
  3. "use strict";
  4. function $$SETUP_STATE(hydrateRuntimeState, basePath) {
  5. return hydrateRuntimeState(JSON.parse('{\
  6. "__info": [\
  7. "This file is automatically generated. Do not touch it, or risk",\
  8. "your modifications being lost. We also recommend you not to read",\
  9. "it either without using the @yarnpkg/pnp package, as the data layout",\
  10. "is entirely unspecified and WILL change from a version to another."\
  11. ],\
  12. "dependencyTreeRoots": [\
  13. {\
  14. "name": "project-chooser",\
  15. "reference": "workspace:."\
  16. }\
  17. ],\
  18. "enableTopLevelFallback": true,\
  19. "ignorePatternData": "(^(?:\\\\.yarn\\\\/sdks(?:\\\\/(?!\\\\.{1,2}(?:\\\\/|$))(?:(?:(?!(?:^|\\\\/)\\\\.{1,2}(?:\\\\/|$)).)*?)|$))$)",\
  20. "fallbackExclusionList": [\
  21. ["project-chooser", ["workspace:."]]\
  22. ],\
  23. "fallbackPool": [\
  24. ],\
  25. "packageRegistryData": [\
  26. [null, [\
  27. [null, {\
  28. "packageLocation": "./",\
  29. "packageDependencies": [\
  30. ["esbuild", "npm:0.17.11"],\
  31. ["react", "npm:18.2.0"],\
  32. ["react-bootstrap", "virtual:a82377e9024110427b36e1a1b1c3d0704008fdabde672e728f436d163c4d7d2b5096fc51b633eadd5a69a798ef8869b90b5e6c075dc78b08bfe93d509781ce86#npm:2.7.3"],\
  33. ["react-dom", "virtual:a82377e9024110427b36e1a1b1c3d0704008fdabde672e728f436d163c4d7d2b5096fc51b633eadd5a69a798ef8869b90b5e6c075dc78b08bfe93d509781ce86#npm:18.2.0"]\
  34. ],\
  35. "linkType": "SOFT"\
  36. }]\
  37. ]],\
  38. ["@babel/runtime", [\
  39. ["npm:7.21.0", {\
  40. "packageLocation": "./.yarn/cache/@babel-runtime-npm-7.21.0-c4ef698c89-7b33e25bfa.zip/node_modules/@babel/runtime/",\
  41. "packageDependencies": [\
  42. ["@babel/runtime", "npm:7.21.0"],\
  43. ["regenerator-runtime", "npm:0.13.11"]\
  44. ],\
  45. "linkType": "HARD"\
  46. }]\
  47. ]],\
  48. ["@esbuild/android-arm", [\
  49. ["npm:0.17.11", {\
  50. "packageLocation": "./.yarn/unplugged/@esbuild-android-arm-npm-0.17.11-025c6e0b0f/node_modules/@esbuild/android-arm/",\
  51. "packageDependencies": [\
  52. ["@esbuild/android-arm", "npm:0.17.11"]\
  53. ],\
  54. "linkType": "HARD"\
  55. }]\
  56. ]],\
  57. ["@esbuild/android-arm64", [\
  58. ["npm:0.17.11", {\
  59. "packageLocation": "./.yarn/unplugged/@esbuild-android-arm64-npm-0.17.11-7e5222f87b/node_modules/@esbuild/android-arm64/",\
  60. "packageDependencies": [\
  61. ["@esbuild/android-arm64", "npm:0.17.11"]\
  62. ],\
  63. "linkType": "HARD"\
  64. }]\
  65. ]],\
  66. ["@esbuild/android-x64", [\
  67. ["npm:0.17.11", {\
  68. "packageLocation": "./.yarn/unplugged/@esbuild-android-x64-npm-0.17.11-f1c0446d89/node_modules/@esbuild/android-x64/",\
  69. "packageDependencies": [\
  70. ["@esbuild/android-x64", "npm:0.17.11"]\
  71. ],\
  72. "linkType": "HARD"\
  73. }]\
  74. ]],\
  75. ["@esbuild/darwin-arm64", [\
  76. ["npm:0.17.11", {\
  77. "packageLocation": "./.yarn/unplugged/@esbuild-darwin-arm64-npm-0.17.11-e3cf5a48ce/node_modules/@esbuild/darwin-arm64/",\
  78. "packageDependencies": [\
  79. ["@esbuild/darwin-arm64", "npm:0.17.11"]\
  80. ],\
  81. "linkType": "HARD"\
  82. }]\
  83. ]],\
  84. ["@esbuild/darwin-x64", [\
  85. ["npm:0.17.11", {\
  86. "packageLocation": "./.yarn/unplugged/@esbuild-darwin-x64-npm-0.17.11-1e6488f11c/node_modules/@esbuild/darwin-x64/",\
  87. "packageDependencies": [\
  88. ["@esbuild/darwin-x64", "npm:0.17.11"]\
  89. ],\
  90. "linkType": "HARD"\
  91. }]\
  92. ]],\
  93. ["@esbuild/freebsd-arm64", [\
  94. ["npm:0.17.11", {\
  95. "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-arm64-npm-0.17.11-258bba5685/node_modules/@esbuild/freebsd-arm64/",\
  96. "packageDependencies": [\
  97. ["@esbuild/freebsd-arm64", "npm:0.17.11"]\
  98. ],\
  99. "linkType": "HARD"\
  100. }]\
  101. ]],\
  102. ["@esbuild/freebsd-x64", [\
  103. ["npm:0.17.11", {\
  104. "packageLocation": "./.yarn/unplugged/@esbuild-freebsd-x64-npm-0.17.11-b1744d8acb/node_modules/@esbuild/freebsd-x64/",\
  105. "packageDependencies": [\
  106. ["@esbuild/freebsd-x64", "npm:0.17.11"]\
  107. ],\
  108. "linkType": "HARD"\
  109. }]\
  110. ]],\
  111. ["@esbuild/linux-arm", [\
  112. ["npm:0.17.11", {\
  113. "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm-npm-0.17.11-7778575e8f/node_modules/@esbuild/linux-arm/",\
  114. "packageDependencies": [\
  115. ["@esbuild/linux-arm", "npm:0.17.11"]\
  116. ],\
  117. "linkType": "HARD"\
  118. }]\
  119. ]],\
  120. ["@esbuild/linux-arm64", [\
  121. ["npm:0.17.11", {\
  122. "packageLocation": "./.yarn/unplugged/@esbuild-linux-arm64-npm-0.17.11-1afc44f7a7/node_modules/@esbuild/linux-arm64/",\
  123. "packageDependencies": [\
  124. ["@esbuild/linux-arm64", "npm:0.17.11"]\
  125. ],\
  126. "linkType": "HARD"\
  127. }]\
  128. ]],\
  129. ["@esbuild/linux-ia32", [\
  130. ["npm:0.17.11", {\
  131. "packageLocation": "./.yarn/unplugged/@esbuild-linux-ia32-npm-0.17.11-d7f0431df0/node_modules/@esbuild/linux-ia32/",\
  132. "packageDependencies": [\
  133. ["@esbuild/linux-ia32", "npm:0.17.11"]\
  134. ],\
  135. "linkType": "HARD"\
  136. }]\
  137. ]],\
  138. ["@esbuild/linux-loong64", [\
  139. ["npm:0.17.11", {\
  140. "packageLocation": "./.yarn/unplugged/@esbuild-linux-loong64-npm-0.17.11-33d1afdf79/node_modules/@esbuild/linux-loong64/",\
  141. "packageDependencies": [\
  142. ["@esbuild/linux-loong64", "npm:0.17.11"]\
  143. ],\
  144. "linkType": "HARD"\
  145. }]\
  146. ]],\
  147. ["@esbuild/linux-mips64el", [\
  148. ["npm:0.17.11", {\
  149. "packageLocation": "./.yarn/unplugged/@esbuild-linux-mips64el-npm-0.17.11-28ea26d356/node_modules/@esbuild/linux-mips64el/",\
  150. "packageDependencies": [\
  151. ["@esbuild/linux-mips64el", "npm:0.17.11"]\
  152. ],\
  153. "linkType": "HARD"\
  154. }]\
  155. ]],\
  156. ["@esbuild/linux-ppc64", [\
  157. ["npm:0.17.11", {\
  158. "packageLocation": "./.yarn/unplugged/@esbuild-linux-ppc64-npm-0.17.11-c38f0755c9/node_modules/@esbuild/linux-ppc64/",\
  159. "packageDependencies": [\
  160. ["@esbuild/linux-ppc64", "npm:0.17.11"]\
  161. ],\
  162. "linkType": "HARD"\
  163. }]\
  164. ]],\
  165. ["@esbuild/linux-riscv64", [\
  166. ["npm:0.17.11", {\
  167. "packageLocation": "./.yarn/unplugged/@esbuild-linux-riscv64-npm-0.17.11-fde108a4d7/node_modules/@esbuild/linux-riscv64/",\
  168. "packageDependencies": [\
  169. ["@esbuild/linux-riscv64", "npm:0.17.11"]\
  170. ],\
  171. "linkType": "HARD"\
  172. }]\
  173. ]],\
  174. ["@esbuild/linux-s390x", [\
  175. ["npm:0.17.11", {\
  176. "packageLocation": "./.yarn/unplugged/@esbuild-linux-s390x-npm-0.17.11-7bddec2b9b/node_modules/@esbuild/linux-s390x/",\
  177. "packageDependencies": [\
  178. ["@esbuild/linux-s390x", "npm:0.17.11"]\
  179. ],\
  180. "linkType": "HARD"\
  181. }]\
  182. ]],\
  183. ["@esbuild/linux-x64", [\
  184. ["npm:0.17.11", {\
  185. "packageLocation": "./.yarn/unplugged/@esbuild-linux-x64-npm-0.17.11-bbbe6c4471/node_modules/@esbuild/linux-x64/",\
  186. "packageDependencies": [\
  187. ["@esbuild/linux-x64", "npm:0.17.11"]\
  188. ],\
  189. "linkType": "HARD"\
  190. }]\
  191. ]],\
  192. ["@esbuild/netbsd-x64", [\
  193. ["npm:0.17.11", {\
  194. "packageLocation": "./.yarn/unplugged/@esbuild-netbsd-x64-npm-0.17.11-4389935ae7/node_modules/@esbuild/netbsd-x64/",\
  195. "packageDependencies": [\
  196. ["@esbuild/netbsd-x64", "npm:0.17.11"]\
  197. ],\
  198. "linkType": "HARD"\
  199. }]\
  200. ]],\
  201. ["@esbuild/openbsd-x64", [\
  202. ["npm:0.17.11", {\
  203. "packageLocation": "./.yarn/unplugged/@esbuild-openbsd-x64-npm-0.17.11-2ef10d4cba/node_modules/@esbuild/openbsd-x64/",\
  204. "packageDependencies": [\
  205. ["@esbuild/openbsd-x64", "npm:0.17.11"]\
  206. ],\
  207. "linkType": "HARD"\
  208. }]\
  209. ]],\
  210. ["@esbuild/sunos-x64", [\
  211. ["npm:0.17.11", {\
  212. "packageLocation": "./.yarn/unplugged/@esbuild-sunos-x64-npm-0.17.11-f5af38a00d/node_modules/@esbuild/sunos-x64/",\
  213. "packageDependencies": [\
  214. ["@esbuild/sunos-x64", "npm:0.17.11"]\
  215. ],\
  216. "linkType": "HARD"\
  217. }]\
  218. ]],\
  219. ["@esbuild/win32-arm64", [\
  220. ["npm:0.17.11", {\
  221. "packageLocation": "./.yarn/unplugged/@esbuild-win32-arm64-npm-0.17.11-3308053fd8/node_modules/@esbuild/win32-arm64/",\
  222. "packageDependencies": [\
  223. ["@esbuild/win32-arm64", "npm:0.17.11"]\
  224. ],\
  225. "linkType": "HARD"\
  226. }]\
  227. ]],\
  228. ["@esbuild/win32-ia32", [\
  229. ["npm:0.17.11", {\
  230. "packageLocation": "./.yarn/unplugged/@esbuild-win32-ia32-npm-0.17.11-76a5a14ae3/node_modules/@esbuild/win32-ia32/",\
  231. "packageDependencies": [\
  232. ["@esbuild/win32-ia32", "npm:0.17.11"]\
  233. ],\
  234. "linkType": "HARD"\
  235. }]\
  236. ]],\
  237. ["@esbuild/win32-x64", [\
  238. ["npm:0.17.11", {\
  239. "packageLocation": "./.yarn/unplugged/@esbuild-win32-x64-npm-0.17.11-c0cd62dcf2/node_modules/@esbuild/win32-x64/",\
  240. "packageDependencies": [\
  241. ["@esbuild/win32-x64", "npm:0.17.11"]\
  242. ],\
  243. "linkType": "HARD"\
  244. }]\
  245. ]],\
  246. ["@popperjs/core", [\
  247. ["npm:2.11.7", {\
  248. "packageLocation": "./.yarn/cache/@popperjs-core-npm-2.11.7-c1bac58243-5b65537478.zip/node_modules/@popperjs/core/",\
  249. "packageDependencies": [\
  250. ["@popperjs/core", "npm:2.11.7"]\
  251. ],\
  252. "linkType": "HARD"\
  253. }]\
  254. ]],\
  255. ["@react-aria/ssr", [\
  256. ["npm:3.6.0", {\
  257. "packageLocation": "./.yarn/cache/@react-aria-ssr-npm-3.6.0-4d15a68cc5-fab5cf0efb.zip/node_modules/@react-aria/ssr/",\
  258. "packageDependencies": [\
  259. ["@react-aria/ssr", "npm:3.6.0"]\
  260. ],\
  261. "linkType": "SOFT"\
  262. }],\
  263. ["virtual:0196e43c535182ab68b2f9821d75eca8493fcf5566c8bac3c4a859d2154ca3bed76d96c7218f875f1dd3fafe4dcd38f4250603cf51b66af2b9c08124272933aa#npm:3.6.0", {\
  264. "packageLocation": "./.yarn/__virtual__/@react-aria-ssr-virtual-62ecbd51eb/0/cache/@react-aria-ssr-npm-3.6.0-4d15a68cc5-fab5cf0efb.zip/node_modules/@react-aria/ssr/",\
  265. "packageDependencies": [\
  266. ["@react-aria/ssr", "virtual:0196e43c535182ab68b2f9821d75eca8493fcf5566c8bac3c4a859d2154ca3bed76d96c7218f875f1dd3fafe4dcd38f4250603cf51b66af2b9c08124272933aa#npm:3.6.0"],\
  267. ["@swc/helpers", "npm:0.4.14"],\
  268. ["@types/react", null],\
  269. ["react", "npm:18.2.0"]\
  270. ],\
  271. "packagePeers": [\
  272. "@types/react",\
  273. "react"\
  274. ],\
  275. "linkType": "HARD"\
  276. }]\
  277. ]],\
  278. ["@restart/hooks", [\
  279. ["npm:0.4.9", {\
  280. "packageLocation": "./.yarn/cache/@restart-hooks-npm-0.4.9-09e7290a74-2481b21ee9.zip/node_modules/@restart/hooks/",\
  281. "packageDependencies": [\
  282. ["@restart/hooks", "npm:0.4.9"]\
  283. ],\
  284. "linkType": "SOFT"\
  285. }],\
  286. ["virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:0.4.9", {\
  287. "packageLocation": "./.yarn/__virtual__/@restart-hooks-virtual-0ea6a8f6bd/0/cache/@restart-hooks-npm-0.4.9-09e7290a74-2481b21ee9.zip/node_modules/@restart/hooks/",\
  288. "packageDependencies": [\
  289. ["@restart/hooks", "virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:0.4.9"],\
  290. ["@types/react", null],\
  291. ["dequal", "npm:2.0.3"],\
  292. ["react", "npm:18.2.0"]\
  293. ],\
  294. "packagePeers": [\
  295. "@types/react",\
  296. "react"\
  297. ],\
  298. "linkType": "HARD"\
  299. }]\
  300. ]],\
  301. ["@restart/ui", [\
  302. ["npm:1.6.2", {\
  303. "packageLocation": "./.yarn/cache/@restart-ui-npm-1.6.2-b84d838854-599c71cf1f.zip/node_modules/@restart/ui/",\
  304. "packageDependencies": [\
  305. ["@restart/ui", "npm:1.6.2"]\
  306. ],\
  307. "linkType": "SOFT"\
  308. }],\
  309. ["virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:1.6.2", {\
  310. "packageLocation": "./.yarn/__virtual__/@restart-ui-virtual-0196e43c53/0/cache/@restart-ui-npm-1.6.2-b84d838854-599c71cf1f.zip/node_modules/@restart/ui/",\
  311. "packageDependencies": [\
  312. ["@restart/ui", "virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:1.6.2"],\
  313. ["@babel/runtime", "npm:7.21.0"],\
  314. ["@popperjs/core", "npm:2.11.7"],\
  315. ["@react-aria/ssr", "virtual:0196e43c535182ab68b2f9821d75eca8493fcf5566c8bac3c4a859d2154ca3bed76d96c7218f875f1dd3fafe4dcd38f4250603cf51b66af2b9c08124272933aa#npm:3.6.0"],\
  316. ["@restart/hooks", "virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:0.4.9"],\
  317. ["@types/react", null],\
  318. ["@types/react-dom", null],\
  319. ["@types/warning", "npm:3.0.0"],\
  320. ["dequal", "npm:2.0.3"],\
  321. ["dom-helpers", "npm:5.2.1"],\
  322. ["react", "npm:18.2.0"],\
  323. ["react-dom", "virtual:a82377e9024110427b36e1a1b1c3d0704008fdabde672e728f436d163c4d7d2b5096fc51b633eadd5a69a798ef8869b90b5e6c075dc78b08bfe93d509781ce86#npm:18.2.0"],\
  324. ["uncontrollable", "virtual:0196e43c535182ab68b2f9821d75eca8493fcf5566c8bac3c4a859d2154ca3bed76d96c7218f875f1dd3fafe4dcd38f4250603cf51b66af2b9c08124272933aa#npm:8.0.0"],\
  325. ["warning", "npm:4.0.3"]\
  326. ],\
  327. "packagePeers": [\
  328. "@types/react-dom",\
  329. "@types/react",\
  330. "react-dom",\
  331. "react"\
  332. ],\
  333. "linkType": "HARD"\
  334. }]\
  335. ]],\
  336. ["@swc/helpers", [\
  337. ["npm:0.4.14", {\
  338. "packageLocation": "./.yarn/cache/@swc-helpers-npm-0.4.14-f806c3fb16-273fd3f3fc.zip/node_modules/@swc/helpers/",\
  339. "packageDependencies": [\
  340. ["@swc/helpers", "npm:0.4.14"],\
  341. ["tslib", "npm:2.5.0"]\
  342. ],\
  343. "linkType": "HARD"\
  344. }]\
  345. ]],\
  346. ["@types/prop-types", [\
  347. ["npm:15.7.5", {\
  348. "packageLocation": "./.yarn/cache/@types-prop-types-npm-15.7.5-2aa48aa177-5b43b8b154.zip/node_modules/@types/prop-types/",\
  349. "packageDependencies": [\
  350. ["@types/prop-types", "npm:15.7.5"]\
  351. ],\
  352. "linkType": "HARD"\
  353. }]\
  354. ]],\
  355. ["@types/react", [\
  356. ["npm:18.0.35", {\
  357. "packageLocation": "./.yarn/cache/@types-react-npm-18.0.35-84c1b4f8a7-e656703972.zip/node_modules/@types/react/",\
  358. "packageDependencies": [\
  359. ["@types/react", "npm:18.0.35"],\
  360. ["@types/prop-types", "npm:15.7.5"],\
  361. ["@types/scheduler", "npm:0.16.3"],\
  362. ["csstype", "npm:3.1.2"]\
  363. ],\
  364. "linkType": "HARD"\
  365. }]\
  366. ]],\
  367. ["@types/react-transition-group", [\
  368. ["npm:4.4.5", {\
  369. "packageLocation": "./.yarn/cache/@types-react-transition-group-npm-4.4.5-8f92107b07-265f1c7406.zip/node_modules/@types/react-transition-group/",\
  370. "packageDependencies": [\
  371. ["@types/react-transition-group", "npm:4.4.5"],\
  372. ["@types/react", "npm:18.0.35"]\
  373. ],\
  374. "linkType": "HARD"\
  375. }]\
  376. ]],\
  377. ["@types/scheduler", [\
  378. ["npm:0.16.3", {\
  379. "packageLocation": "./.yarn/cache/@types-scheduler-npm-0.16.3-887bfc0086-2b0aec39c2.zip/node_modules/@types/scheduler/",\
  380. "packageDependencies": [\
  381. ["@types/scheduler", "npm:0.16.3"]\
  382. ],\
  383. "linkType": "HARD"\
  384. }]\
  385. ]],\
  386. ["@types/warning", [\
  387. ["npm:3.0.0", {\
  388. "packageLocation": "./.yarn/cache/@types-warning-npm-3.0.0-aafa4d7846-120dcf9060.zip/node_modules/@types/warning/",\
  389. "packageDependencies": [\
  390. ["@types/warning", "npm:3.0.0"]\
  391. ],\
  392. "linkType": "HARD"\
  393. }]\
  394. ]],\
  395. ["classnames", [\
  396. ["npm:2.3.2", {\
  397. "packageLocation": "./.yarn/cache/classnames-npm-2.3.2-d2fdae468d-2c62199789.zip/node_modules/classnames/",\
  398. "packageDependencies": [\
  399. ["classnames", "npm:2.3.2"]\
  400. ],\
  401. "linkType": "HARD"\
  402. }]\
  403. ]],\
  404. ["csstype", [\
  405. ["npm:3.1.2", {\
  406. "packageLocation": "./.yarn/cache/csstype-npm-3.1.2-cead7d99b2-e1a52e6c25.zip/node_modules/csstype/",\
  407. "packageDependencies": [\
  408. ["csstype", "npm:3.1.2"]\
  409. ],\
  410. "linkType": "HARD"\
  411. }]\
  412. ]],\
  413. ["dequal", [\
  414. ["npm:2.0.3", {\
  415. "packageLocation": "./.yarn/cache/dequal-npm-2.0.3-53a630c60e-8679b850e1.zip/node_modules/dequal/",\
  416. "packageDependencies": [\
  417. ["dequal", "npm:2.0.3"]\
  418. ],\
  419. "linkType": "HARD"\
  420. }]\
  421. ]],\
  422. ["dom-helpers", [\
  423. ["npm:5.2.1", {\
  424. "packageLocation": "./.yarn/cache/dom-helpers-npm-5.2.1-b38bb4470b-863ba9e086.zip/node_modules/dom-helpers/",\
  425. "packageDependencies": [\
  426. ["dom-helpers", "npm:5.2.1"],\
  427. ["@babel/runtime", "npm:7.21.0"],\
  428. ["csstype", "npm:3.1.2"]\
  429. ],\
  430. "linkType": "HARD"\
  431. }]\
  432. ]],\
  433. ["esbuild", [\
  434. ["npm:0.17.11", {\
  435. "packageLocation": "./.yarn/unplugged/esbuild-npm-0.17.11-8e5971c771/node_modules/esbuild/",\
  436. "packageDependencies": [\
  437. ["esbuild", "npm:0.17.11"],\
  438. ["@esbuild/android-arm", "npm:0.17.11"],\
  439. ["@esbuild/android-arm64", "npm:0.17.11"],\
  440. ["@esbuild/android-x64", "npm:0.17.11"],\
  441. ["@esbuild/darwin-arm64", "npm:0.17.11"],\
  442. ["@esbuild/darwin-x64", "npm:0.17.11"],\
  443. ["@esbuild/freebsd-arm64", "npm:0.17.11"],\
  444. ["@esbuild/freebsd-x64", "npm:0.17.11"],\
  445. ["@esbuild/linux-arm", "npm:0.17.11"],\
  446. ["@esbuild/linux-arm64", "npm:0.17.11"],\
  447. ["@esbuild/linux-ia32", "npm:0.17.11"],\
  448. ["@esbuild/linux-loong64", "npm:0.17.11"],\
  449. ["@esbuild/linux-mips64el", "npm:0.17.11"],\
  450. ["@esbuild/linux-ppc64", "npm:0.17.11"],\
  451. ["@esbuild/linux-riscv64", "npm:0.17.11"],\
  452. ["@esbuild/linux-s390x", "npm:0.17.11"],\
  453. ["@esbuild/linux-x64", "npm:0.17.11"],\
  454. ["@esbuild/netbsd-x64", "npm:0.17.11"],\
  455. ["@esbuild/openbsd-x64", "npm:0.17.11"],\
  456. ["@esbuild/sunos-x64", "npm:0.17.11"],\
  457. ["@esbuild/win32-arm64", "npm:0.17.11"],\
  458. ["@esbuild/win32-ia32", "npm:0.17.11"],\
  459. ["@esbuild/win32-x64", "npm:0.17.11"]\
  460. ],\
  461. "linkType": "HARD"\
  462. }]\
  463. ]],\
  464. ["invariant", [\
  465. ["npm:2.2.4", {\
  466. "packageLocation": "./.yarn/cache/invariant-npm-2.2.4-717fbdb119-cc3182d793.zip/node_modules/invariant/",\
  467. "packageDependencies": [\
  468. ["invariant", "npm:2.2.4"],\
  469. ["loose-envify", "npm:1.4.0"]\
  470. ],\
  471. "linkType": "HARD"\
  472. }]\
  473. ]],\
  474. ["js-tokens", [\
  475. ["npm:4.0.0", {\
  476. "packageLocation": "./.yarn/cache/js-tokens-npm-4.0.0-0ac852e9e2-8a95213a5a.zip/node_modules/js-tokens/",\
  477. "packageDependencies": [\
  478. ["js-tokens", "npm:4.0.0"]\
  479. ],\
  480. "linkType": "HARD"\
  481. }]\
  482. ]],\
  483. ["loose-envify", [\
  484. ["npm:1.4.0", {\
  485. "packageLocation": "./.yarn/cache/loose-envify-npm-1.4.0-6307b72ccf-6517e24e0c.zip/node_modules/loose-envify/",\
  486. "packageDependencies": [\
  487. ["loose-envify", "npm:1.4.0"],\
  488. ["js-tokens", "npm:4.0.0"]\
  489. ],\
  490. "linkType": "HARD"\
  491. }]\
  492. ]],\
  493. ["object-assign", [\
  494. ["npm:4.1.1", {\
  495. "packageLocation": "./.yarn/cache/object-assign-npm-4.1.1-1004ad6dec-fcc6e4ea8c.zip/node_modules/object-assign/",\
  496. "packageDependencies": [\
  497. ["object-assign", "npm:4.1.1"]\
  498. ],\
  499. "linkType": "HARD"\
  500. }]\
  501. ]],\
  502. ["project-chooser", [\
  503. ["workspace:.", {\
  504. "packageLocation": "./",\
  505. "packageDependencies": [\
  506. ["project-chooser", "workspace:."],\
  507. ["esbuild", "npm:0.17.11"],\
  508. ["react", "npm:18.2.0"],\
  509. ["react-bootstrap", "virtual:a82377e9024110427b36e1a1b1c3d0704008fdabde672e728f436d163c4d7d2b5096fc51b633eadd5a69a798ef8869b90b5e6c075dc78b08bfe93d509781ce86#npm:2.7.3"],\
  510. ["react-dom", "virtual:a82377e9024110427b36e1a1b1c3d0704008fdabde672e728f436d163c4d7d2b5096fc51b633eadd5a69a798ef8869b90b5e6c075dc78b08bfe93d509781ce86#npm:18.2.0"]\
  511. ],\
  512. "linkType": "SOFT"\
  513. }]\
  514. ]],\
  515. ["prop-types", [\
  516. ["npm:15.8.1", {\
  517. "packageLocation": "./.yarn/cache/prop-types-npm-15.8.1-17c71ee7ee-c056d3f1c0.zip/node_modules/prop-types/",\
  518. "packageDependencies": [\
  519. ["prop-types", "npm:15.8.1"],\
  520. ["loose-envify", "npm:1.4.0"],\
  521. ["object-assign", "npm:4.1.1"],\
  522. ["react-is", "npm:16.13.1"]\
  523. ],\
  524. "linkType": "HARD"\
  525. }]\
  526. ]],\
  527. ["prop-types-extra", [\
  528. ["npm:1.1.1", {\
  529. "packageLocation": "./.yarn/cache/prop-types-extra-npm-1.1.1-ebbe8d351d-ebf1c04868.zip/node_modules/prop-types-extra/",\
  530. "packageDependencies": [\
  531. ["prop-types-extra", "npm:1.1.1"]\
  532. ],\
  533. "linkType": "SOFT"\
  534. }],\
  535. ["virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:1.1.1", {\
  536. "packageLocation": "./.yarn/__virtual__/prop-types-extra-virtual-86cf018612/0/cache/prop-types-extra-npm-1.1.1-ebbe8d351d-ebf1c04868.zip/node_modules/prop-types-extra/",\
  537. "packageDependencies": [\
  538. ["prop-types-extra", "virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:1.1.1"],\
  539. ["@types/react", null],\
  540. ["react", "npm:18.2.0"],\
  541. ["react-is", "npm:16.13.1"],\
  542. ["warning", "npm:4.0.3"]\
  543. ],\
  544. "packagePeers": [\
  545. "@types/react",\
  546. "react"\
  547. ],\
  548. "linkType": "HARD"\
  549. }]\
  550. ]],\
  551. ["react", [\
  552. ["npm:18.2.0", {\
  553. "packageLocation": "./.yarn/cache/react-npm-18.2.0-1eae08fee2-88e38092da.zip/node_modules/react/",\
  554. "packageDependencies": [\
  555. ["react", "npm:18.2.0"],\
  556. ["loose-envify", "npm:1.4.0"]\
  557. ],\
  558. "linkType": "HARD"\
  559. }]\
  560. ]],\
  561. ["react-bootstrap", [\
  562. ["npm:2.7.3", {\
  563. "packageLocation": "./.yarn/cache/react-bootstrap-npm-2.7.3-28d1ce6f1d-54531b398c.zip/node_modules/react-bootstrap/",\
  564. "packageDependencies": [\
  565. ["react-bootstrap", "npm:2.7.3"]\
  566. ],\
  567. "linkType": "SOFT"\
  568. }],\
  569. ["virtual:a82377e9024110427b36e1a1b1c3d0704008fdabde672e728f436d163c4d7d2b5096fc51b633eadd5a69a798ef8869b90b5e6c075dc78b08bfe93d509781ce86#npm:2.7.3", {\
  570. "packageLocation": "./.yarn/__virtual__/react-bootstrap-virtual-7039c5b2cd/0/cache/react-bootstrap-npm-2.7.3-28d1ce6f1d-54531b398c.zip/node_modules/react-bootstrap/",\
  571. "packageDependencies": [\
  572. ["react-bootstrap", "virtual:a82377e9024110427b36e1a1b1c3d0704008fdabde672e728f436d163c4d7d2b5096fc51b633eadd5a69a798ef8869b90b5e6c075dc78b08bfe93d509781ce86#npm:2.7.3"],\
  573. ["@babel/runtime", "npm:7.21.0"],\
  574. ["@restart/hooks", "virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:0.4.9"],\
  575. ["@restart/ui", "virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:1.6.2"],\
  576. ["@types/react", null],\
  577. ["@types/react-dom", null],\
  578. ["@types/react-transition-group", "npm:4.4.5"],\
  579. ["classnames", "npm:2.3.2"],\
  580. ["dom-helpers", "npm:5.2.1"],\
  581. ["invariant", "npm:2.2.4"],\
  582. ["prop-types", "npm:15.8.1"],\
  583. ["prop-types-extra", "virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:1.1.1"],\
  584. ["react", "npm:18.2.0"],\
  585. ["react-dom", "virtual:a82377e9024110427b36e1a1b1c3d0704008fdabde672e728f436d163c4d7d2b5096fc51b633eadd5a69a798ef8869b90b5e6c075dc78b08bfe93d509781ce86#npm:18.2.0"],\
  586. ["react-transition-group", "virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:4.4.5"],\
  587. ["uncontrollable", "virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:7.2.1"],\
  588. ["warning", "npm:4.0.3"]\
  589. ],\
  590. "packagePeers": [\
  591. "@types/react-dom",\
  592. "@types/react",\
  593. "react-dom",\
  594. "react"\
  595. ],\
  596. "linkType": "HARD"\
  597. }]\
  598. ]],\
  599. ["react-dom", [\
  600. ["npm:18.2.0", {\
  601. "packageLocation": "./.yarn/cache/react-dom-npm-18.2.0-dd675bca1c-7d323310be.zip/node_modules/react-dom/",\
  602. "packageDependencies": [\
  603. ["react-dom", "npm:18.2.0"]\
  604. ],\
  605. "linkType": "SOFT"\
  606. }],\
  607. ["virtual:a82377e9024110427b36e1a1b1c3d0704008fdabde672e728f436d163c4d7d2b5096fc51b633eadd5a69a798ef8869b90b5e6c075dc78b08bfe93d509781ce86#npm:18.2.0", {\
  608. "packageLocation": "./.yarn/__virtual__/react-dom-virtual-560d52a1c5/0/cache/react-dom-npm-18.2.0-dd675bca1c-7d323310be.zip/node_modules/react-dom/",\
  609. "packageDependencies": [\
  610. ["react-dom", "virtual:a82377e9024110427b36e1a1b1c3d0704008fdabde672e728f436d163c4d7d2b5096fc51b633eadd5a69a798ef8869b90b5e6c075dc78b08bfe93d509781ce86#npm:18.2.0"],\
  611. ["@types/react", null],\
  612. ["loose-envify", "npm:1.4.0"],\
  613. ["react", "npm:18.2.0"],\
  614. ["scheduler", "npm:0.23.0"]\
  615. ],\
  616. "packagePeers": [\
  617. "@types/react",\
  618. "react"\
  619. ],\
  620. "linkType": "HARD"\
  621. }]\
  622. ]],\
  623. ["react-is", [\
  624. ["npm:16.13.1", {\
  625. "packageLocation": "./.yarn/cache/react-is-npm-16.13.1-a9b9382b4f-f7a19ac349.zip/node_modules/react-is/",\
  626. "packageDependencies": [\
  627. ["react-is", "npm:16.13.1"]\
  628. ],\
  629. "linkType": "HARD"\
  630. }]\
  631. ]],\
  632. ["react-lifecycles-compat", [\
  633. ["npm:3.0.4", {\
  634. "packageLocation": "./.yarn/cache/react-lifecycles-compat-npm-3.0.4-d5e285a39e-a904b0fc0a.zip/node_modules/react-lifecycles-compat/",\
  635. "packageDependencies": [\
  636. ["react-lifecycles-compat", "npm:3.0.4"]\
  637. ],\
  638. "linkType": "HARD"\
  639. }]\
  640. ]],\
  641. ["react-transition-group", [\
  642. ["npm:4.4.5", {\
  643. "packageLocation": "./.yarn/cache/react-transition-group-npm-4.4.5-98ea4ef96e-7560284010.zip/node_modules/react-transition-group/",\
  644. "packageDependencies": [\
  645. ["react-transition-group", "npm:4.4.5"]\
  646. ],\
  647. "linkType": "SOFT"\
  648. }],\
  649. ["virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:4.4.5", {\
  650. "packageLocation": "./.yarn/__virtual__/react-transition-group-virtual-55c8781bba/0/cache/react-transition-group-npm-4.4.5-98ea4ef96e-7560284010.zip/node_modules/react-transition-group/",\
  651. "packageDependencies": [\
  652. ["react-transition-group", "virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:4.4.5"],\
  653. ["@babel/runtime", "npm:7.21.0"],\
  654. ["@types/react", null],\
  655. ["@types/react-dom", null],\
  656. ["dom-helpers", "npm:5.2.1"],\
  657. ["loose-envify", "npm:1.4.0"],\
  658. ["prop-types", "npm:15.8.1"],\
  659. ["react", "npm:18.2.0"],\
  660. ["react-dom", "virtual:a82377e9024110427b36e1a1b1c3d0704008fdabde672e728f436d163c4d7d2b5096fc51b633eadd5a69a798ef8869b90b5e6c075dc78b08bfe93d509781ce86#npm:18.2.0"]\
  661. ],\
  662. "packagePeers": [\
  663. "@types/react-dom",\
  664. "@types/react",\
  665. "react-dom",\
  666. "react"\
  667. ],\
  668. "linkType": "HARD"\
  669. }]\
  670. ]],\
  671. ["regenerator-runtime", [\
  672. ["npm:0.13.11", {\
  673. "packageLocation": "./.yarn/cache/regenerator-runtime-npm-0.13.11-90bf536060-27481628d2.zip/node_modules/regenerator-runtime/",\
  674. "packageDependencies": [\
  675. ["regenerator-runtime", "npm:0.13.11"]\
  676. ],\
  677. "linkType": "HARD"\
  678. }]\
  679. ]],\
  680. ["scheduler", [\
  681. ["npm:0.23.0", {\
  682. "packageLocation": "./.yarn/cache/scheduler-npm-0.23.0-a379a6bc3b-d79192eeaa.zip/node_modules/scheduler/",\
  683. "packageDependencies": [\
  684. ["scheduler", "npm:0.23.0"],\
  685. ["loose-envify", "npm:1.4.0"]\
  686. ],\
  687. "linkType": "HARD"\
  688. }]\
  689. ]],\
  690. ["tslib", [\
  691. ["npm:2.5.0", {\
  692. "packageLocation": "./.yarn/cache/tslib-npm-2.5.0-bb364efebd-ae3ed5f9ce.zip/node_modules/tslib/",\
  693. "packageDependencies": [\
  694. ["tslib", "npm:2.5.0"]\
  695. ],\
  696. "linkType": "HARD"\
  697. }]\
  698. ]],\
  699. ["uncontrollable", [\
  700. ["npm:7.2.1", {\
  701. "packageLocation": "./.yarn/cache/uncontrollable-npm-7.2.1-85b30af5c9-3345c0c191.zip/node_modules/uncontrollable/",\
  702. "packageDependencies": [\
  703. ["uncontrollable", "npm:7.2.1"]\
  704. ],\
  705. "linkType": "SOFT"\
  706. }],\
  707. ["npm:8.0.0", {\
  708. "packageLocation": "./.yarn/cache/uncontrollable-npm-8.0.0-96cef5cc40-d46a2e2911.zip/node_modules/uncontrollable/",\
  709. "packageDependencies": [\
  710. ["uncontrollable", "npm:8.0.0"]\
  711. ],\
  712. "linkType": "SOFT"\
  713. }],\
  714. ["virtual:0196e43c535182ab68b2f9821d75eca8493fcf5566c8bac3c4a859d2154ca3bed76d96c7218f875f1dd3fafe4dcd38f4250603cf51b66af2b9c08124272933aa#npm:8.0.0", {\
  715. "packageLocation": "./.yarn/__virtual__/uncontrollable-virtual-6c55d9429f/0/cache/uncontrollable-npm-8.0.0-96cef5cc40-d46a2e2911.zip/node_modules/uncontrollable/",\
  716. "packageDependencies": [\
  717. ["uncontrollable", "virtual:0196e43c535182ab68b2f9821d75eca8493fcf5566c8bac3c4a859d2154ca3bed76d96c7218f875f1dd3fafe4dcd38f4250603cf51b66af2b9c08124272933aa#npm:8.0.0"],\
  718. ["@types/react", "npm:18.0.35"],\
  719. ["react", "npm:18.2.0"]\
  720. ],\
  721. "packagePeers": [\
  722. "react"\
  723. ],\
  724. "linkType": "HARD"\
  725. }],\
  726. ["virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:7.2.1", {\
  727. "packageLocation": "./.yarn/__virtual__/uncontrollable-virtual-35623ac67b/0/cache/uncontrollable-npm-7.2.1-85b30af5c9-3345c0c191.zip/node_modules/uncontrollable/",\
  728. "packageDependencies": [\
  729. ["uncontrollable", "virtual:7039c5b2cda4ae25b8a8cda77098d1576edfac9bd86677aa3b97cd1c74403f5da61395e249979a6eb7b645108c0348b75e3dce5292bb28f82d8e304289da7454#npm:7.2.1"],\
  730. ["@babel/runtime", "npm:7.21.0"],\
  731. ["@types/react", "npm:18.0.35"],\
  732. ["invariant", "npm:2.2.4"],\
  733. ["react", "npm:18.2.0"],\
  734. ["react-lifecycles-compat", "npm:3.0.4"]\
  735. ],\
  736. "packagePeers": [\
  737. "react"\
  738. ],\
  739. "linkType": "HARD"\
  740. }]\
  741. ]],\
  742. ["warning", [\
  743. ["npm:4.0.3", {\
  744. "packageLocation": "./.yarn/cache/warning-npm-4.0.3-291e921d6d-4f2cb6a957.zip/node_modules/warning/",\
  745. "packageDependencies": [\
  746. ["warning", "npm:4.0.3"],\
  747. ["loose-envify", "npm:1.4.0"]\
  748. ],\
  749. "linkType": "HARD"\
  750. }]\
  751. ]]\
  752. ]\
  753. }'), {basePath: basePath || __dirname});
  754. }
  755. const fs = require('fs');
  756. const path = require('path');
  757. const require$$0 = require('module');
  758. const StringDecoder = require('string_decoder');
  759. const url = require('url');
  760. const os = require('os');
  761. const nodeUtils = require('util');
  762. const readline = require('readline');
  763. const assert = require('assert');
  764. const stream = require('stream');
  765. const zlib = require('zlib');
  766. const events = require('events');
  767. const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
  768. function _interopNamespace(e) {
  769. if (e && e.__esModule) return e;
  770. const n = Object.create(null);
  771. if (e) {
  772. for (const k in e) {
  773. if (k !== 'default') {
  774. const d = Object.getOwnPropertyDescriptor(e, k);
  775. Object.defineProperty(n, k, d.get ? d : {
  776. enumerable: true,
  777. get: () => e[k]
  778. });
  779. }
  780. }
  781. }
  782. n.default = e;
  783. return Object.freeze(n);
  784. }
  785. const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
  786. const path__default = /*#__PURE__*/_interopDefaultLegacy(path);
  787. const require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);
  788. const StringDecoder__default = /*#__PURE__*/_interopDefaultLegacy(StringDecoder);
  789. const nodeUtils__namespace = /*#__PURE__*/_interopNamespace(nodeUtils);
  790. const assert__default = /*#__PURE__*/_interopDefaultLegacy(assert);
  791. const zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib);
  792. const S_IFMT = 61440;
  793. const S_IFDIR = 16384;
  794. const S_IFREG = 32768;
  795. const S_IFLNK = 40960;
  796. const SAFE_TIME = 456789e3;
  797. const DEFAULT_MODE = S_IFREG | 420;
  798. class StatEntry {
  799. constructor() {
  800. this.uid = 0;
  801. this.gid = 0;
  802. this.size = 0;
  803. this.blksize = 0;
  804. this.atimeMs = 0;
  805. this.mtimeMs = 0;
  806. this.ctimeMs = 0;
  807. this.birthtimeMs = 0;
  808. this.atime = new Date(0);
  809. this.mtime = new Date(0);
  810. this.ctime = new Date(0);
  811. this.birthtime = new Date(0);
  812. this.dev = 0;
  813. this.ino = 0;
  814. this.mode = DEFAULT_MODE;
  815. this.nlink = 1;
  816. this.rdev = 0;
  817. this.blocks = 1;
  818. }
  819. isBlockDevice() {
  820. return false;
  821. }
  822. isCharacterDevice() {
  823. return false;
  824. }
  825. isDirectory() {
  826. return (this.mode & S_IFMT) === S_IFDIR;
  827. }
  828. isFIFO() {
  829. return false;
  830. }
  831. isFile() {
  832. return (this.mode & S_IFMT) === S_IFREG;
  833. }
  834. isSocket() {
  835. return false;
  836. }
  837. isSymbolicLink() {
  838. return (this.mode & S_IFMT) === S_IFLNK;
  839. }
  840. }
  841. class BigIntStatsEntry {
  842. constructor() {
  843. this.uid = BigInt(0);
  844. this.gid = BigInt(0);
  845. this.size = BigInt(0);
  846. this.blksize = BigInt(0);
  847. this.atimeMs = BigInt(0);
  848. this.mtimeMs = BigInt(0);
  849. this.ctimeMs = BigInt(0);
  850. this.birthtimeMs = BigInt(0);
  851. this.atimeNs = BigInt(0);
  852. this.mtimeNs = BigInt(0);
  853. this.ctimeNs = BigInt(0);
  854. this.birthtimeNs = BigInt(0);
  855. this.atime = new Date(0);
  856. this.mtime = new Date(0);
  857. this.ctime = new Date(0);
  858. this.birthtime = new Date(0);
  859. this.dev = BigInt(0);
  860. this.ino = BigInt(0);
  861. this.mode = BigInt(DEFAULT_MODE);
  862. this.nlink = BigInt(1);
  863. this.rdev = BigInt(0);
  864. this.blocks = BigInt(1);
  865. }
  866. isBlockDevice() {
  867. return false;
  868. }
  869. isCharacterDevice() {
  870. return false;
  871. }
  872. isDirectory() {
  873. return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFDIR);
  874. }
  875. isFIFO() {
  876. return false;
  877. }
  878. isFile() {
  879. return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFREG);
  880. }
  881. isSocket() {
  882. return false;
  883. }
  884. isSymbolicLink() {
  885. return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFLNK);
  886. }
  887. }
  888. function makeDefaultStats() {
  889. return new StatEntry();
  890. }
  891. function clearStats(stats) {
  892. for (const key in stats) {
  893. if (Object.prototype.hasOwnProperty.call(stats, key)) {
  894. const element = stats[key];
  895. if (typeof element === `number`) {
  896. stats[key] = 0;
  897. } else if (typeof element === `bigint`) {
  898. stats[key] = BigInt(0);
  899. } else if (nodeUtils__namespace.types.isDate(element)) {
  900. stats[key] = new Date(0);
  901. }
  902. }
  903. }
  904. return stats;
  905. }
  906. function convertToBigIntStats(stats) {
  907. const bigintStats = new BigIntStatsEntry();
  908. for (const key in stats) {
  909. if (Object.prototype.hasOwnProperty.call(stats, key)) {
  910. const element = stats[key];
  911. if (typeof element === `number`) {
  912. bigintStats[key] = BigInt(element);
  913. } else if (nodeUtils__namespace.types.isDate(element)) {
  914. bigintStats[key] = new Date(element);
  915. }
  916. }
  917. }
  918. bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6);
  919. bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6);
  920. bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6);
  921. bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6);
  922. return bigintStats;
  923. }
  924. function areStatsEqual(a, b) {
  925. if (a.atimeMs !== b.atimeMs)
  926. return false;
  927. if (a.birthtimeMs !== b.birthtimeMs)
  928. return false;
  929. if (a.blksize !== b.blksize)
  930. return false;
  931. if (a.blocks !== b.blocks)
  932. return false;
  933. if (a.ctimeMs !== b.ctimeMs)
  934. return false;
  935. if (a.dev !== b.dev)
  936. return false;
  937. if (a.gid !== b.gid)
  938. return false;
  939. if (a.ino !== b.ino)
  940. return false;
  941. if (a.isBlockDevice() !== b.isBlockDevice())
  942. return false;
  943. if (a.isCharacterDevice() !== b.isCharacterDevice())
  944. return false;
  945. if (a.isDirectory() !== b.isDirectory())
  946. return false;
  947. if (a.isFIFO() !== b.isFIFO())
  948. return false;
  949. if (a.isFile() !== b.isFile())
  950. return false;
  951. if (a.isSocket() !== b.isSocket())
  952. return false;
  953. if (a.isSymbolicLink() !== b.isSymbolicLink())
  954. return false;
  955. if (a.mode !== b.mode)
  956. return false;
  957. if (a.mtimeMs !== b.mtimeMs)
  958. return false;
  959. if (a.nlink !== b.nlink)
  960. return false;
  961. if (a.rdev !== b.rdev)
  962. return false;
  963. if (a.size !== b.size)
  964. return false;
  965. if (a.uid !== b.uid)
  966. return false;
  967. const aN = a;
  968. const bN = b;
  969. if (aN.atimeNs !== bN.atimeNs)
  970. return false;
  971. if (aN.mtimeNs !== bN.mtimeNs)
  972. return false;
  973. if (aN.ctimeNs !== bN.ctimeNs)
  974. return false;
  975. if (aN.birthtimeNs !== bN.birthtimeNs)
  976. return false;
  977. return true;
  978. }
  979. const PortablePath = {
  980. root: `/`,
  981. dot: `.`,
  982. parent: `..`
  983. };
  984. const Filename = {
  985. nodeModules: `node_modules`,
  986. manifest: `package.json`,
  987. lockfile: `yarn.lock`,
  988. virtual: `__virtual__`,
  989. pnpJs: `.pnp.js`,
  990. pnpCjs: `.pnp.cjs`,
  991. rc: `.yarnrc.yml`
  992. };
  993. const npath = Object.create(path__default.default);
  994. const ppath = Object.create(path__default.default.posix);
  995. npath.cwd = () => process.cwd();
  996. ppath.cwd = () => toPortablePath(process.cwd());
  997. ppath.resolve = (...segments) => {
  998. if (segments.length > 0 && ppath.isAbsolute(segments[0])) {
  999. return path__default.default.posix.resolve(...segments);
  1000. } else {
  1001. return path__default.default.posix.resolve(ppath.cwd(), ...segments);
  1002. }
  1003. };
  1004. const contains = function(pathUtils, from, to) {
  1005. from = pathUtils.normalize(from);
  1006. to = pathUtils.normalize(to);
  1007. if (from === to)
  1008. return `.`;
  1009. if (!from.endsWith(pathUtils.sep))
  1010. from = from + pathUtils.sep;
  1011. if (to.startsWith(from)) {
  1012. return to.slice(from.length);
  1013. } else {
  1014. return null;
  1015. }
  1016. };
  1017. npath.fromPortablePath = fromPortablePath;
  1018. npath.toPortablePath = toPortablePath;
  1019. npath.contains = (from, to) => contains(npath, from, to);
  1020. ppath.contains = (from, to) => contains(ppath, from, to);
  1021. const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/;
  1022. const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/;
  1023. const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/;
  1024. const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/;
  1025. function fromPortablePath(p) {
  1026. if (process.platform !== `win32`)
  1027. return p;
  1028. let portablePathMatch, uncPortablePathMatch;
  1029. if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP))
  1030. p = portablePathMatch[1];
  1031. else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP))
  1032. p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`;
  1033. else
  1034. return p;
  1035. return p.replace(/\//g, `\\`);
  1036. }
  1037. function toPortablePath(p) {
  1038. if (process.platform !== `win32`)
  1039. return p;
  1040. p = p.replace(/\\/g, `/`);
  1041. let windowsPathMatch, uncWindowsPathMatch;
  1042. if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP))
  1043. p = `/${windowsPathMatch[1]}`;
  1044. else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP))
  1045. p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`;
  1046. return p;
  1047. }
  1048. function convertPath(targetPathUtils, sourcePath) {
  1049. return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath);
  1050. }
  1051. const defaultTime = new Date(SAFE_TIME * 1e3);
  1052. async function copyPromise(destinationFs, destination, sourceFs, source, opts) {
  1053. const normalizedDestination = destinationFs.pathUtils.normalize(destination);
  1054. const normalizedSource = sourceFs.pathUtils.normalize(source);
  1055. const prelayout = [];
  1056. const postlayout = [];
  1057. const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource);
  1058. await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] });
  1059. const updateTime = typeof destinationFs.lutimesPromise === `function` ? destinationFs.lutimesPromise.bind(destinationFs) : destinationFs.utimesPromise.bind(destinationFs);
  1060. await copyImpl(prelayout, postlayout, updateTime, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true });
  1061. for (const operation of prelayout)
  1062. await operation();
  1063. await Promise.all(postlayout.map((operation) => {
  1064. return operation();
  1065. }));
  1066. }
  1067. async function copyImpl(prelayout, postlayout, updateTime, destinationFs, destination, sourceFs, source, opts) {
  1068. var _a, _b;
  1069. const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null;
  1070. const sourceStat = await sourceFs.lstatPromise(source);
  1071. const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat;
  1072. let updated;
  1073. switch (true) {
  1074. case sourceStat.isDirectory():
  1075. {
  1076. updated = await copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
  1077. }
  1078. break;
  1079. case sourceStat.isFile():
  1080. {
  1081. updated = await copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
  1082. }
  1083. break;
  1084. case sourceStat.isSymbolicLink():
  1085. {
  1086. updated = await copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
  1087. }
  1088. break;
  1089. default:
  1090. {
  1091. throw new Error(`Unsupported file type (${sourceStat.mode})`);
  1092. }
  1093. }
  1094. if (updated || ((_a = destinationStat == null ? void 0 : destinationStat.mtime) == null ? void 0 : _a.getTime()) !== mtime.getTime() || ((_b = destinationStat == null ? void 0 : destinationStat.atime) == null ? void 0 : _b.getTime()) !== atime.getTime()) {
  1095. postlayout.push(() => updateTime(destination, atime, mtime));
  1096. updated = true;
  1097. }
  1098. if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) {
  1099. postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511));
  1100. updated = true;
  1101. }
  1102. return updated;
  1103. }
  1104. async function maybeLStat(baseFs, p) {
  1105. try {
  1106. return await baseFs.lstatPromise(p);
  1107. } catch (e) {
  1108. return null;
  1109. }
  1110. }
  1111. async function copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
  1112. if (destinationStat !== null && !destinationStat.isDirectory()) {
  1113. if (opts.overwrite) {
  1114. prelayout.push(async () => destinationFs.removePromise(destination));
  1115. destinationStat = null;
  1116. } else {
  1117. return false;
  1118. }
  1119. }
  1120. let updated = false;
  1121. if (destinationStat === null) {
  1122. prelayout.push(async () => {
  1123. try {
  1124. await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode });
  1125. } catch (err) {
  1126. if (err.code !== `EEXIST`) {
  1127. throw err;
  1128. }
  1129. }
  1130. });
  1131. updated = true;
  1132. }
  1133. const entries = await sourceFs.readdirPromise(source);
  1134. const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts;
  1135. if (opts.stableSort) {
  1136. for (const entry of entries.sort()) {
  1137. if (await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) {
  1138. updated = true;
  1139. }
  1140. }
  1141. } else {
  1142. const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => {
  1143. await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts);
  1144. }));
  1145. if (entriesUpdateStatus.some((status) => status)) {
  1146. updated = true;
  1147. }
  1148. }
  1149. return updated;
  1150. }
  1151. const isCloneSupportedCache = /* @__PURE__ */ new WeakMap();
  1152. function makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy) {
  1153. return async () => {
  1154. await opFs.linkPromise(source, destination);
  1155. if (linkStrategy === "readOnly" /* ReadOnly */) {
  1156. sourceStat.mode &= ~146;
  1157. await opFs.chmodPromise(destination, sourceStat.mode);
  1158. }
  1159. };
  1160. }
  1161. function makeCloneLinkOperation(opFs, destination, source, sourceStat, linkStrategy) {
  1162. const isCloneSupported = isCloneSupportedCache.get(opFs);
  1163. if (typeof isCloneSupported === `undefined`) {
  1164. return async () => {
  1165. try {
  1166. await opFs.copyFilePromise(source, destination, fs__default.default.constants.COPYFILE_FICLONE_FORCE);
  1167. isCloneSupportedCache.set(opFs, true);
  1168. } catch (err) {
  1169. if (err.code === `ENOSYS` || err.code === `ENOTSUP`) {
  1170. isCloneSupportedCache.set(opFs, false);
  1171. await makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy)();
  1172. } else {
  1173. throw err;
  1174. }
  1175. }
  1176. };
  1177. } else {
  1178. if (isCloneSupported) {
  1179. return async () => opFs.copyFilePromise(source, destination, fs__default.default.constants.COPYFILE_FICLONE_FORCE);
  1180. } else {
  1181. return makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy);
  1182. }
  1183. }
  1184. }
  1185. async function copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
  1186. var _a;
  1187. if (destinationStat !== null) {
  1188. if (opts.overwrite) {
  1189. prelayout.push(async () => destinationFs.removePromise(destination));
  1190. destinationStat = null;
  1191. } else {
  1192. return false;
  1193. }
  1194. }
  1195. const linkStrategy = (_a = opts.linkStrategy) != null ? _a : null;
  1196. const op = destinationFs === sourceFs ? linkStrategy !== null ? makeCloneLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.copyFilePromise(source, destination, fs__default.default.constants.COPYFILE_FICLONE) : linkStrategy !== null ? makeLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.writeFilePromise(destination, await sourceFs.readFilePromise(source));
  1197. prelayout.push(async () => op());
  1198. return true;
  1199. }
  1200. async function copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
  1201. if (destinationStat !== null) {
  1202. if (opts.overwrite) {
  1203. prelayout.push(async () => destinationFs.removePromise(destination));
  1204. destinationStat = null;
  1205. } else {
  1206. return false;
  1207. }
  1208. }
  1209. prelayout.push(async () => {
  1210. await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination);
  1211. });
  1212. return true;
  1213. }
  1214. function makeError$1(code, message) {
  1215. return Object.assign(new Error(`${code}: ${message}`), { code });
  1216. }
  1217. function EBUSY(message) {
  1218. return makeError$1(`EBUSY`, message);
  1219. }
  1220. function ENOSYS(message, reason) {
  1221. return makeError$1(`ENOSYS`, `${message}, ${reason}`);
  1222. }
  1223. function EINVAL(reason) {
  1224. return makeError$1(`EINVAL`, `invalid argument, ${reason}`);
  1225. }
  1226. function EBADF(reason) {
  1227. return makeError$1(`EBADF`, `bad file descriptor, ${reason}`);
  1228. }
  1229. function ENOENT(reason) {
  1230. return makeError$1(`ENOENT`, `no such file or directory, ${reason}`);
  1231. }
  1232. function ENOTDIR(reason) {
  1233. return makeError$1(`ENOTDIR`, `not a directory, ${reason}`);
  1234. }
  1235. function EISDIR(reason) {
  1236. return makeError$1(`EISDIR`, `illegal operation on a directory, ${reason}`);
  1237. }
  1238. function EEXIST(reason) {
  1239. return makeError$1(`EEXIST`, `file already exists, ${reason}`);
  1240. }
  1241. function EROFS(reason) {
  1242. return makeError$1(`EROFS`, `read-only filesystem, ${reason}`);
  1243. }
  1244. function ENOTEMPTY(reason) {
  1245. return makeError$1(`ENOTEMPTY`, `directory not empty, ${reason}`);
  1246. }
  1247. function EOPNOTSUPP(reason) {
  1248. return makeError$1(`EOPNOTSUPP`, `operation not supported, ${reason}`);
  1249. }
  1250. function ERR_DIR_CLOSED() {
  1251. return makeError$1(`ERR_DIR_CLOSED`, `Directory handle was closed`);
  1252. }
  1253. class LibzipError extends Error {
  1254. constructor(message, code) {
  1255. super(message);
  1256. this.name = `Libzip Error`;
  1257. this.code = code;
  1258. }
  1259. }
  1260. class CustomDir {
  1261. constructor(path, nextDirent, opts = {}) {
  1262. this.path = path;
  1263. this.nextDirent = nextDirent;
  1264. this.opts = opts;
  1265. this.closed = false;
  1266. }
  1267. throwIfClosed() {
  1268. if (this.closed) {
  1269. throw ERR_DIR_CLOSED();
  1270. }
  1271. }
  1272. async *[Symbol.asyncIterator]() {
  1273. try {
  1274. let dirent;
  1275. while ((dirent = await this.read()) !== null) {
  1276. yield dirent;
  1277. }
  1278. } finally {
  1279. await this.close();
  1280. }
  1281. }
  1282. read(cb) {
  1283. const dirent = this.readSync();
  1284. if (typeof cb !== `undefined`)
  1285. return cb(null, dirent);
  1286. return Promise.resolve(dirent);
  1287. }
  1288. readSync() {
  1289. this.throwIfClosed();
  1290. return this.nextDirent();
  1291. }
  1292. close(cb) {
  1293. this.closeSync();
  1294. if (typeof cb !== `undefined`)
  1295. return cb(null);
  1296. return Promise.resolve();
  1297. }
  1298. closeSync() {
  1299. var _a, _b;
  1300. this.throwIfClosed();
  1301. (_b = (_a = this.opts).onClose) == null ? void 0 : _b.call(_a);
  1302. this.closed = true;
  1303. }
  1304. }
  1305. function opendir(fakeFs, path, entries, opts) {
  1306. const nextDirent = () => {
  1307. const filename = entries.shift();
  1308. if (typeof filename === `undefined`)
  1309. return null;
  1310. return Object.assign(fakeFs.statSync(fakeFs.pathUtils.join(path, filename)), {
  1311. name: filename
  1312. });
  1313. };
  1314. return new CustomDir(path, nextDirent, opts);
  1315. }
  1316. class FakeFS {
  1317. constructor(pathUtils) {
  1318. this.pathUtils = pathUtils;
  1319. }
  1320. async *genTraversePromise(init, { stableSort = false } = {}) {
  1321. const stack = [init];
  1322. while (stack.length > 0) {
  1323. const p = stack.shift();
  1324. const entry = await this.lstatPromise(p);
  1325. if (entry.isDirectory()) {
  1326. const entries = await this.readdirPromise(p);
  1327. if (stableSort) {
  1328. for (const entry2 of entries.sort()) {
  1329. stack.push(this.pathUtils.join(p, entry2));
  1330. }
  1331. } else {
  1332. throw new Error(`Not supported`);
  1333. }
  1334. } else {
  1335. yield p;
  1336. }
  1337. }
  1338. }
  1339. async removePromise(p, { recursive = true, maxRetries = 5 } = {}) {
  1340. let stat;
  1341. try {
  1342. stat = await this.lstatPromise(p);
  1343. } catch (error) {
  1344. if (error.code === `ENOENT`) {
  1345. return;
  1346. } else {
  1347. throw error;
  1348. }
  1349. }
  1350. if (stat.isDirectory()) {
  1351. if (recursive) {
  1352. const entries = await this.readdirPromise(p);
  1353. await Promise.all(entries.map((entry) => {
  1354. return this.removePromise(this.pathUtils.resolve(p, entry));
  1355. }));
  1356. }
  1357. for (let t = 0; t <= maxRetries; t++) {
  1358. try {
  1359. await this.rmdirPromise(p);
  1360. break;
  1361. } catch (error) {
  1362. if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) {
  1363. throw error;
  1364. } else if (t < maxRetries) {
  1365. await new Promise((resolve) => setTimeout(resolve, t * 100));
  1366. }
  1367. }
  1368. }
  1369. } else {
  1370. await this.unlinkPromise(p);
  1371. }
  1372. }
  1373. removeSync(p, { recursive = true } = {}) {
  1374. let stat;
  1375. try {
  1376. stat = this.lstatSync(p);
  1377. } catch (error) {
  1378. if (error.code === `ENOENT`) {
  1379. return;
  1380. } else {
  1381. throw error;
  1382. }
  1383. }
  1384. if (stat.isDirectory()) {
  1385. if (recursive)
  1386. for (const entry of this.readdirSync(p))
  1387. this.removeSync(this.pathUtils.resolve(p, entry));
  1388. this.rmdirSync(p);
  1389. } else {
  1390. this.unlinkSync(p);
  1391. }
  1392. }
  1393. async mkdirpPromise(p, { chmod, utimes } = {}) {
  1394. p = this.resolve(p);
  1395. if (p === this.pathUtils.dirname(p))
  1396. return void 0;
  1397. const parts = p.split(this.pathUtils.sep);
  1398. let createdDirectory;
  1399. for (let u = 2; u <= parts.length; ++u) {
  1400. const subPath = parts.slice(0, u).join(this.pathUtils.sep);
  1401. if (!this.existsSync(subPath)) {
  1402. try {
  1403. await this.mkdirPromise(subPath);
  1404. } catch (error) {
  1405. if (error.code === `EEXIST`) {
  1406. continue;
  1407. } else {
  1408. throw error;
  1409. }
  1410. }
  1411. createdDirectory != null ? createdDirectory : createdDirectory = subPath;
  1412. if (chmod != null)
  1413. await this.chmodPromise(subPath, chmod);
  1414. if (utimes != null) {
  1415. await this.utimesPromise(subPath, utimes[0], utimes[1]);
  1416. } else {
  1417. const parentStat = await this.statPromise(this.pathUtils.dirname(subPath));
  1418. await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime);
  1419. }
  1420. }
  1421. }
  1422. return createdDirectory;
  1423. }
  1424. mkdirpSync(p, { chmod, utimes } = {}) {
  1425. p = this.resolve(p);
  1426. if (p === this.pathUtils.dirname(p))
  1427. return void 0;
  1428. const parts = p.split(this.pathUtils.sep);
  1429. let createdDirectory;
  1430. for (let u = 2; u <= parts.length; ++u) {
  1431. const subPath = parts.slice(0, u).join(this.pathUtils.sep);
  1432. if (!this.existsSync(subPath)) {
  1433. try {
  1434. this.mkdirSync(subPath);
  1435. } catch (error) {
  1436. if (error.code === `EEXIST`) {
  1437. continue;
  1438. } else {
  1439. throw error;
  1440. }
  1441. }
  1442. createdDirectory != null ? createdDirectory : createdDirectory = subPath;
  1443. if (chmod != null)
  1444. this.chmodSync(subPath, chmod);
  1445. if (utimes != null) {
  1446. this.utimesSync(subPath, utimes[0], utimes[1]);
  1447. } else {
  1448. const parentStat = this.statSync(this.pathUtils.dirname(subPath));
  1449. this.utimesSync(subPath, parentStat.atime, parentStat.mtime);
  1450. }
  1451. }
  1452. }
  1453. return createdDirectory;
  1454. }
  1455. async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) {
  1456. return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy });
  1457. }
  1458. copySync(destination, source, { baseFs = this, overwrite = true } = {}) {
  1459. const stat = baseFs.lstatSync(source);
  1460. const exists = this.existsSync(destination);
  1461. if (stat.isDirectory()) {
  1462. this.mkdirpSync(destination);
  1463. const directoryListing = baseFs.readdirSync(source);
  1464. for (const entry of directoryListing) {
  1465. this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite });
  1466. }
  1467. } else if (stat.isFile()) {
  1468. if (!exists || overwrite) {
  1469. if (exists)
  1470. this.removeSync(destination);
  1471. const content = baseFs.readFileSync(source);
  1472. this.writeFileSync(destination, content);
  1473. }
  1474. } else if (stat.isSymbolicLink()) {
  1475. if (!exists || overwrite) {
  1476. if (exists)
  1477. this.removeSync(destination);
  1478. const target = baseFs.readlinkSync(source);
  1479. this.symlinkSync(convertPath(this.pathUtils, target), destination);
  1480. }
  1481. } else {
  1482. throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`);
  1483. }
  1484. const mode = stat.mode & 511;
  1485. this.chmodSync(destination, mode);
  1486. }
  1487. async changeFilePromise(p, content, opts = {}) {
  1488. if (Buffer.isBuffer(content)) {
  1489. return this.changeFileBufferPromise(p, content, opts);
  1490. } else {
  1491. return this.changeFileTextPromise(p, content, opts);
  1492. }
  1493. }
  1494. async changeFileBufferPromise(p, content, { mode } = {}) {
  1495. let current = Buffer.alloc(0);
  1496. try {
  1497. current = await this.readFilePromise(p);
  1498. } catch (error) {
  1499. }
  1500. if (Buffer.compare(current, content) === 0)
  1501. return;
  1502. await this.writeFilePromise(p, content, { mode });
  1503. }
  1504. async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) {
  1505. let current = ``;
  1506. try {
  1507. current = await this.readFilePromise(p, `utf8`);
  1508. } catch (error) {
  1509. }
  1510. const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content;
  1511. if (current === normalizedContent)
  1512. return;
  1513. await this.writeFilePromise(p, normalizedContent, { mode });
  1514. }
  1515. changeFileSync(p, content, opts = {}) {
  1516. if (Buffer.isBuffer(content)) {
  1517. return this.changeFileBufferSync(p, content, opts);
  1518. } else {
  1519. return this.changeFileTextSync(p, content, opts);
  1520. }
  1521. }
  1522. changeFileBufferSync(p, content, { mode } = {}) {
  1523. let current = Buffer.alloc(0);
  1524. try {
  1525. current = this.readFileSync(p);
  1526. } catch (error) {
  1527. }
  1528. if (Buffer.compare(current, content) === 0)
  1529. return;
  1530. this.writeFileSync(p, content, { mode });
  1531. }
  1532. changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) {
  1533. let current = ``;
  1534. try {
  1535. current = this.readFileSync(p, `utf8`);
  1536. } catch (error) {
  1537. }
  1538. const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content;
  1539. if (current === normalizedContent)
  1540. return;
  1541. this.writeFileSync(p, normalizedContent, { mode });
  1542. }
  1543. async movePromise(fromP, toP) {
  1544. try {
  1545. await this.renamePromise(fromP, toP);
  1546. } catch (error) {
  1547. if (error.code === `EXDEV`) {
  1548. await this.copyPromise(toP, fromP);
  1549. await this.removePromise(fromP);
  1550. } else {
  1551. throw error;
  1552. }
  1553. }
  1554. }
  1555. moveSync(fromP, toP) {
  1556. try {
  1557. this.renameSync(fromP, toP);
  1558. } catch (error) {
  1559. if (error.code === `EXDEV`) {
  1560. this.copySync(toP, fromP);
  1561. this.removeSync(fromP);
  1562. } else {
  1563. throw error;
  1564. }
  1565. }
  1566. }
  1567. async lockPromise(affectedPath, callback) {
  1568. const lockPath = `${affectedPath}.flock`;
  1569. const interval = 1e3 / 60;
  1570. const startTime = Date.now();
  1571. let fd = null;
  1572. const isAlive = async () => {
  1573. let pid;
  1574. try {
  1575. [pid] = await this.readJsonPromise(lockPath);
  1576. } catch (error) {
  1577. return Date.now() - startTime < 500;
  1578. }
  1579. try {
  1580. process.kill(pid, 0);
  1581. return true;
  1582. } catch (error) {
  1583. return false;
  1584. }
  1585. };
  1586. while (fd === null) {
  1587. try {
  1588. fd = await this.openPromise(lockPath, `wx`);
  1589. } catch (error) {
  1590. if (error.code === `EEXIST`) {
  1591. if (!await isAlive()) {
  1592. try {
  1593. await this.unlinkPromise(lockPath);
  1594. continue;
  1595. } catch (error2) {
  1596. }
  1597. }
  1598. if (Date.now() - startTime < 60 * 1e3) {
  1599. await new Promise((resolve) => setTimeout(resolve, interval));
  1600. } else {
  1601. throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`);
  1602. }
  1603. } else {
  1604. throw error;
  1605. }
  1606. }
  1607. }
  1608. await this.writePromise(fd, JSON.stringify([process.pid]));
  1609. try {
  1610. return await callback();
  1611. } finally {
  1612. try {
  1613. await this.closePromise(fd);
  1614. await this.unlinkPromise(lockPath);
  1615. } catch (error) {
  1616. }
  1617. }
  1618. }
  1619. async readJsonPromise(p) {
  1620. const content = await this.readFilePromise(p, `utf8`);
  1621. try {
  1622. return JSON.parse(content);
  1623. } catch (error) {
  1624. error.message += ` (in ${p})`;
  1625. throw error;
  1626. }
  1627. }
  1628. readJsonSync(p) {
  1629. const content = this.readFileSync(p, `utf8`);
  1630. try {
  1631. return JSON.parse(content);
  1632. } catch (error) {
  1633. error.message += ` (in ${p})`;
  1634. throw error;
  1635. }
  1636. }
  1637. async writeJsonPromise(p, data) {
  1638. return await this.writeFilePromise(p, `${JSON.stringify(data, null, 2)}
  1639. `);
  1640. }
  1641. writeJsonSync(p, data) {
  1642. return this.writeFileSync(p, `${JSON.stringify(data, null, 2)}
  1643. `);
  1644. }
  1645. async preserveTimePromise(p, cb) {
  1646. const stat = await this.lstatPromise(p);
  1647. const result = await cb();
  1648. if (typeof result !== `undefined`)
  1649. p = result;
  1650. if (this.lutimesPromise) {
  1651. await this.lutimesPromise(p, stat.atime, stat.mtime);
  1652. } else if (!stat.isSymbolicLink()) {
  1653. await this.utimesPromise(p, stat.atime, stat.mtime);
  1654. }
  1655. }
  1656. async preserveTimeSync(p, cb) {
  1657. const stat = this.lstatSync(p);
  1658. const result = cb();
  1659. if (typeof result !== `undefined`)
  1660. p = result;
  1661. if (this.lutimesSync) {
  1662. this.lutimesSync(p, stat.atime, stat.mtime);
  1663. } else if (!stat.isSymbolicLink()) {
  1664. this.utimesSync(p, stat.atime, stat.mtime);
  1665. }
  1666. }
  1667. }
  1668. class BasePortableFakeFS extends FakeFS {
  1669. constructor() {
  1670. super(ppath);
  1671. }
  1672. }
  1673. function getEndOfLine(content) {
  1674. const matches = content.match(/\r?\n/g);
  1675. if (matches === null)
  1676. return os.EOL;
  1677. const crlf = matches.filter((nl) => nl === `\r
  1678. `).length;
  1679. const lf = matches.length - crlf;
  1680. return crlf > lf ? `\r
  1681. ` : `
  1682. `;
  1683. }
  1684. function normalizeLineEndings(originalContent, newContent) {
  1685. return newContent.replace(/\r?\n/g, getEndOfLine(originalContent));
  1686. }
  1687. class NodeFS extends BasePortableFakeFS {
  1688. constructor(realFs = fs__default.default) {
  1689. super();
  1690. this.realFs = realFs;
  1691. if (typeof this.realFs.lutimes !== `undefined`) {
  1692. this.lutimesPromise = this.lutimesPromiseImpl;
  1693. this.lutimesSync = this.lutimesSyncImpl;
  1694. }
  1695. }
  1696. getExtractHint() {
  1697. return false;
  1698. }
  1699. getRealPath() {
  1700. return PortablePath.root;
  1701. }
  1702. resolve(p) {
  1703. return ppath.resolve(p);
  1704. }
  1705. async openPromise(p, flags, mode) {
  1706. return await new Promise((resolve, reject) => {
  1707. this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject));
  1708. });
  1709. }
  1710. openSync(p, flags, mode) {
  1711. return this.realFs.openSync(npath.fromPortablePath(p), flags, mode);
  1712. }
  1713. async opendirPromise(p, opts) {
  1714. return await new Promise((resolve, reject) => {
  1715. if (typeof opts !== `undefined`) {
  1716. this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
  1717. } else {
  1718. this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
  1719. }
  1720. }).then((dir) => {
  1721. return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true });
  1722. });
  1723. }
  1724. opendirSync(p, opts) {
  1725. const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p));
  1726. return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true });
  1727. }
  1728. async readPromise(fd, buffer, offset = 0, length = 0, position = -1) {
  1729. return await new Promise((resolve, reject) => {
  1730. this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => {
  1731. if (error) {
  1732. reject(error);
  1733. } else {
  1734. resolve(bytesRead);
  1735. }
  1736. });
  1737. });
  1738. }
  1739. readSync(fd, buffer, offset, length, position) {
  1740. return this.realFs.readSync(fd, buffer, offset, length, position);
  1741. }
  1742. async writePromise(fd, buffer, offset, length, position) {
  1743. return await new Promise((resolve, reject) => {
  1744. if (typeof buffer === `string`) {
  1745. return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject));
  1746. } else {
  1747. return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject));
  1748. }
  1749. });
  1750. }
  1751. writeSync(fd, buffer, offset, length, position) {
  1752. if (typeof buffer === `string`) {
  1753. return this.realFs.writeSync(fd, buffer, offset);
  1754. } else {
  1755. return this.realFs.writeSync(fd, buffer, offset, length, position);
  1756. }
  1757. }
  1758. async closePromise(fd) {
  1759. await new Promise((resolve, reject) => {
  1760. this.realFs.close(fd, this.makeCallback(resolve, reject));
  1761. });
  1762. }
  1763. closeSync(fd) {
  1764. this.realFs.closeSync(fd);
  1765. }
  1766. createReadStream(p, opts) {
  1767. const realPath = p !== null ? npath.fromPortablePath(p) : p;
  1768. return this.realFs.createReadStream(realPath, opts);
  1769. }
  1770. createWriteStream(p, opts) {
  1771. const realPath = p !== null ? npath.fromPortablePath(p) : p;
  1772. return this.realFs.createWriteStream(realPath, opts);
  1773. }
  1774. async realpathPromise(p) {
  1775. return await new Promise((resolve, reject) => {
  1776. this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject));
  1777. }).then((path) => {
  1778. return npath.toPortablePath(path);
  1779. });
  1780. }
  1781. realpathSync(p) {
  1782. return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {}));
  1783. }
  1784. async existsPromise(p) {
  1785. return await new Promise((resolve) => {
  1786. this.realFs.exists(npath.fromPortablePath(p), resolve);
  1787. });
  1788. }
  1789. accessSync(p, mode) {
  1790. return this.realFs.accessSync(npath.fromPortablePath(p), mode);
  1791. }
  1792. async accessPromise(p, mode) {
  1793. return await new Promise((resolve, reject) => {
  1794. this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject));
  1795. });
  1796. }
  1797. existsSync(p) {
  1798. return this.realFs.existsSync(npath.fromPortablePath(p));
  1799. }
  1800. async statPromise(p, opts) {
  1801. return await new Promise((resolve, reject) => {
  1802. if (opts) {
  1803. this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
  1804. } else {
  1805. this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
  1806. }
  1807. });
  1808. }
  1809. statSync(p, opts) {
  1810. if (opts) {
  1811. return this.realFs.statSync(npath.fromPortablePath(p), opts);
  1812. } else {
  1813. return this.realFs.statSync(npath.fromPortablePath(p));
  1814. }
  1815. }
  1816. async fstatPromise(fd, opts) {
  1817. return await new Promise((resolve, reject) => {
  1818. if (opts) {
  1819. this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject));
  1820. } else {
  1821. this.realFs.fstat(fd, this.makeCallback(resolve, reject));
  1822. }
  1823. });
  1824. }
  1825. fstatSync(fd, opts) {
  1826. if (opts) {
  1827. return this.realFs.fstatSync(fd, opts);
  1828. } else {
  1829. return this.realFs.fstatSync(fd);
  1830. }
  1831. }
  1832. async lstatPromise(p, opts) {
  1833. return await new Promise((resolve, reject) => {
  1834. if (opts) {
  1835. this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
  1836. } else {
  1837. this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
  1838. }
  1839. });
  1840. }
  1841. lstatSync(p, opts) {
  1842. if (opts) {
  1843. return this.realFs.lstatSync(npath.fromPortablePath(p), opts);
  1844. } else {
  1845. return this.realFs.lstatSync(npath.fromPortablePath(p));
  1846. }
  1847. }
  1848. async fchmodPromise(fd, mask) {
  1849. return await new Promise((resolve, reject) => {
  1850. this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject));
  1851. });
  1852. }
  1853. fchmodSync(fd, mask) {
  1854. return this.realFs.fchmodSync(fd, mask);
  1855. }
  1856. async chmodPromise(p, mask) {
  1857. return await new Promise((resolve, reject) => {
  1858. this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject));
  1859. });
  1860. }
  1861. chmodSync(p, mask) {
  1862. return this.realFs.chmodSync(npath.fromPortablePath(p), mask);
  1863. }
  1864. async fchownPromise(fd, uid, gid) {
  1865. return await new Promise((resolve, reject) => {
  1866. this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject));
  1867. });
  1868. }
  1869. fchownSync(fd, uid, gid) {
  1870. return this.realFs.fchownSync(fd, uid, gid);
  1871. }
  1872. async chownPromise(p, uid, gid) {
  1873. return await new Promise((resolve, reject) => {
  1874. this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject));
  1875. });
  1876. }
  1877. chownSync(p, uid, gid) {
  1878. return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid);
  1879. }
  1880. async renamePromise(oldP, newP) {
  1881. return await new Promise((resolve, reject) => {
  1882. this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject));
  1883. });
  1884. }
  1885. renameSync(oldP, newP) {
  1886. return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP));
  1887. }
  1888. async copyFilePromise(sourceP, destP, flags = 0) {
  1889. return await new Promise((resolve, reject) => {
  1890. this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject));
  1891. });
  1892. }
  1893. copyFileSync(sourceP, destP, flags = 0) {
  1894. return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags);
  1895. }
  1896. async appendFilePromise(p, content, opts) {
  1897. return await new Promise((resolve, reject) => {
  1898. const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
  1899. if (opts) {
  1900. this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject));
  1901. } else {
  1902. this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject));
  1903. }
  1904. });
  1905. }
  1906. appendFileSync(p, content, opts) {
  1907. const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
  1908. if (opts) {
  1909. this.realFs.appendFileSync(fsNativePath, content, opts);
  1910. } else {
  1911. this.realFs.appendFileSync(fsNativePath, content);
  1912. }
  1913. }
  1914. async writeFilePromise(p, content, opts) {
  1915. return await new Promise((resolve, reject) => {
  1916. const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
  1917. if (opts) {
  1918. this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject));
  1919. } else {
  1920. this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject));
  1921. }
  1922. });
  1923. }
  1924. writeFileSync(p, content, opts) {
  1925. const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
  1926. if (opts) {
  1927. this.realFs.writeFileSync(fsNativePath, content, opts);
  1928. } else {
  1929. this.realFs.writeFileSync(fsNativePath, content);
  1930. }
  1931. }
  1932. async unlinkPromise(p) {
  1933. return await new Promise((resolve, reject) => {
  1934. this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
  1935. });
  1936. }
  1937. unlinkSync(p) {
  1938. return this.realFs.unlinkSync(npath.fromPortablePath(p));
  1939. }
  1940. async utimesPromise(p, atime, mtime) {
  1941. return await new Promise((resolve, reject) => {
  1942. this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject));
  1943. });
  1944. }
  1945. utimesSync(p, atime, mtime) {
  1946. this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime);
  1947. }
  1948. async lutimesPromiseImpl(p, atime, mtime) {
  1949. const lutimes = this.realFs.lutimes;
  1950. if (typeof lutimes === `undefined`)
  1951. throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`);
  1952. return await new Promise((resolve, reject) => {
  1953. lutimes.call(this.realFs, npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject));
  1954. });
  1955. }
  1956. lutimesSyncImpl(p, atime, mtime) {
  1957. const lutimesSync = this.realFs.lutimesSync;
  1958. if (typeof lutimesSync === `undefined`)
  1959. throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`);
  1960. lutimesSync.call(this.realFs, npath.fromPortablePath(p), atime, mtime);
  1961. }
  1962. async mkdirPromise(p, opts) {
  1963. return await new Promise((resolve, reject) => {
  1964. this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
  1965. });
  1966. }
  1967. mkdirSync(p, opts) {
  1968. return this.realFs.mkdirSync(npath.fromPortablePath(p), opts);
  1969. }
  1970. async rmdirPromise(p, opts) {
  1971. return await new Promise((resolve, reject) => {
  1972. if (opts) {
  1973. this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
  1974. } else {
  1975. this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
  1976. }
  1977. });
  1978. }
  1979. rmdirSync(p, opts) {
  1980. return this.realFs.rmdirSync(npath.fromPortablePath(p), opts);
  1981. }
  1982. async linkPromise(existingP, newP) {
  1983. return await new Promise((resolve, reject) => {
  1984. this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject));
  1985. });
  1986. }
  1987. linkSync(existingP, newP) {
  1988. return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP));
  1989. }
  1990. async symlinkPromise(target, p, type) {
  1991. return await new Promise((resolve, reject) => {
  1992. this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject));
  1993. });
  1994. }
  1995. symlinkSync(target, p, type) {
  1996. return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type);
  1997. }
  1998. async readFilePromise(p, encoding) {
  1999. return await new Promise((resolve, reject) => {
  2000. const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
  2001. this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject));
  2002. });
  2003. }
  2004. readFileSync(p, encoding) {
  2005. const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
  2006. return this.realFs.readFileSync(fsNativePath, encoding);
  2007. }
  2008. async readdirPromise(p, opts) {
  2009. return await new Promise((resolve, reject) => {
  2010. if (opts == null ? void 0 : opts.withFileTypes) {
  2011. this.realFs.readdir(npath.fromPortablePath(p), { withFileTypes: true }, this.makeCallback(resolve, reject));
  2012. } else {
  2013. this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback((value) => resolve(value), reject));
  2014. }
  2015. });
  2016. }
  2017. readdirSync(p, opts) {
  2018. if (opts == null ? void 0 : opts.withFileTypes) {
  2019. return this.realFs.readdirSync(npath.fromPortablePath(p), { withFileTypes: true });
  2020. } else {
  2021. return this.realFs.readdirSync(npath.fromPortablePath(p));
  2022. }
  2023. }
  2024. async readlinkPromise(p) {
  2025. return await new Promise((resolve, reject) => {
  2026. this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
  2027. }).then((path) => {
  2028. return npath.toPortablePath(path);
  2029. });
  2030. }
  2031. readlinkSync(p) {
  2032. return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p)));
  2033. }
  2034. async truncatePromise(p, len) {
  2035. return await new Promise((resolve, reject) => {
  2036. this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject));
  2037. });
  2038. }
  2039. truncateSync(p, len) {
  2040. return this.realFs.truncateSync(npath.fromPortablePath(p), len);
  2041. }
  2042. async ftruncatePromise(fd, len) {
  2043. return await new Promise((resolve, reject) => {
  2044. this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject));
  2045. });
  2046. }
  2047. ftruncateSync(fd, len) {
  2048. return this.realFs.ftruncateSync(fd, len);
  2049. }
  2050. watch(p, a, b) {
  2051. return this.realFs.watch(
  2052. npath.fromPortablePath(p),
  2053. a,
  2054. b
  2055. );
  2056. }
  2057. watchFile(p, a, b) {
  2058. return this.realFs.watchFile(
  2059. npath.fromPortablePath(p),
  2060. a,
  2061. b
  2062. );
  2063. }
  2064. unwatchFile(p, cb) {
  2065. return this.realFs.unwatchFile(npath.fromPortablePath(p), cb);
  2066. }
  2067. makeCallback(resolve, reject) {
  2068. return (err, result) => {
  2069. if (err) {
  2070. reject(err);
  2071. } else {
  2072. resolve(result);
  2073. }
  2074. };
  2075. }
  2076. }
  2077. function assertStatus(current, expected) {
  2078. if (current !== expected) {
  2079. throw new Error(`Invalid StatWatcher status: expected '${expected}', got '${current}'`);
  2080. }
  2081. }
  2082. class CustomStatWatcher extends events.EventEmitter {
  2083. constructor(fakeFs, path, { bigint = false } = {}) {
  2084. super();
  2085. this.status = "ready" /* Ready */;
  2086. this.changeListeners = /* @__PURE__ */ new Map();
  2087. this.startTimeout = null;
  2088. this.fakeFs = fakeFs;
  2089. this.path = path;
  2090. this.bigint = bigint;
  2091. this.lastStats = this.stat();
  2092. }
  2093. static create(fakeFs, path, opts) {
  2094. const statWatcher = new CustomStatWatcher(fakeFs, path, opts);
  2095. statWatcher.start();
  2096. return statWatcher;
  2097. }
  2098. start() {
  2099. assertStatus(this.status, "ready" /* Ready */);
  2100. this.status = "running" /* Running */;
  2101. this.startTimeout = setTimeout(() => {
  2102. this.startTimeout = null;
  2103. if (!this.fakeFs.existsSync(this.path)) {
  2104. this.emit("change" /* Change */, this.lastStats, this.lastStats);
  2105. }
  2106. }, 3);
  2107. }
  2108. stop() {
  2109. assertStatus(this.status, "running" /* Running */);
  2110. this.status = "stopped" /* Stopped */;
  2111. if (this.startTimeout !== null) {
  2112. clearTimeout(this.startTimeout);
  2113. this.startTimeout = null;
  2114. }
  2115. this.emit("stop" /* Stop */);
  2116. }
  2117. stat() {
  2118. try {
  2119. return this.fakeFs.statSync(this.path, { bigint: this.bigint });
  2120. } catch (error) {
  2121. const statInstance = this.bigint ? new BigIntStatsEntry() : new StatEntry();
  2122. return clearStats(statInstance);
  2123. }
  2124. }
  2125. makeInterval(opts) {
  2126. const interval = setInterval(() => {
  2127. const currentStats = this.stat();
  2128. const previousStats = this.lastStats;
  2129. if (areStatsEqual(currentStats, previousStats))
  2130. return;
  2131. this.lastStats = currentStats;
  2132. this.emit("change" /* Change */, currentStats, previousStats);
  2133. }, opts.interval);
  2134. return opts.persistent ? interval : interval.unref();
  2135. }
  2136. registerChangeListener(listener, opts) {
  2137. this.addListener("change" /* Change */, listener);
  2138. this.changeListeners.set(listener, this.makeInterval(opts));
  2139. }
  2140. unregisterChangeListener(listener) {
  2141. this.removeListener("change" /* Change */, listener);
  2142. const interval = this.changeListeners.get(listener);
  2143. if (typeof interval !== `undefined`)
  2144. clearInterval(interval);
  2145. this.changeListeners.delete(listener);
  2146. }
  2147. unregisterAllChangeListeners() {
  2148. for (const listener of this.changeListeners.keys()) {
  2149. this.unregisterChangeListener(listener);
  2150. }
  2151. }
  2152. hasChangeListeners() {
  2153. return this.changeListeners.size > 0;
  2154. }
  2155. ref() {
  2156. for (const interval of this.changeListeners.values())
  2157. interval.ref();
  2158. return this;
  2159. }
  2160. unref() {
  2161. for (const interval of this.changeListeners.values())
  2162. interval.unref();
  2163. return this;
  2164. }
  2165. }
  2166. const statWatchersByFakeFS = /* @__PURE__ */ new WeakMap();
  2167. function watchFile(fakeFs, path, a, b) {
  2168. let bigint;
  2169. let persistent;
  2170. let interval;
  2171. let listener;
  2172. switch (typeof a) {
  2173. case `function`:
  2174. {
  2175. bigint = false;
  2176. persistent = true;
  2177. interval = 5007;
  2178. listener = a;
  2179. }
  2180. break;
  2181. default:
  2182. {
  2183. ({
  2184. bigint = false,
  2185. persistent = true,
  2186. interval = 5007
  2187. } = a);
  2188. listener = b;
  2189. }
  2190. break;
  2191. }
  2192. let statWatchers = statWatchersByFakeFS.get(fakeFs);
  2193. if (typeof statWatchers === `undefined`)
  2194. statWatchersByFakeFS.set(fakeFs, statWatchers = /* @__PURE__ */ new Map());
  2195. let statWatcher = statWatchers.get(path);
  2196. if (typeof statWatcher === `undefined`) {
  2197. statWatcher = CustomStatWatcher.create(fakeFs, path, { bigint });
  2198. statWatchers.set(path, statWatcher);
  2199. }
  2200. statWatcher.registerChangeListener(listener, { persistent, interval });
  2201. return statWatcher;
  2202. }
  2203. function unwatchFile(fakeFs, path, cb) {
  2204. const statWatchers = statWatchersByFakeFS.get(fakeFs);
  2205. if (typeof statWatchers === `undefined`)
  2206. return;
  2207. const statWatcher = statWatchers.get(path);
  2208. if (typeof statWatcher === `undefined`)
  2209. return;
  2210. if (typeof cb === `undefined`)
  2211. statWatcher.unregisterAllChangeListeners();
  2212. else
  2213. statWatcher.unregisterChangeListener(cb);
  2214. if (!statWatcher.hasChangeListeners()) {
  2215. statWatcher.stop();
  2216. statWatchers.delete(path);
  2217. }
  2218. }
  2219. function unwatchAllFiles(fakeFs) {
  2220. const statWatchers = statWatchersByFakeFS.get(fakeFs);
  2221. if (typeof statWatchers === `undefined`)
  2222. return;
  2223. for (const path of statWatchers.keys()) {
  2224. unwatchFile(fakeFs, path);
  2225. }
  2226. }
  2227. const DEFAULT_COMPRESSION_LEVEL = `mixed`;
  2228. function toUnixTimestamp(time) {
  2229. if (typeof time === `string` && String(+time) === time)
  2230. return +time;
  2231. if (Number.isFinite(time)) {
  2232. if (time < 0) {
  2233. return Date.now() / 1e3;
  2234. } else {
  2235. return time;
  2236. }
  2237. }
  2238. if (nodeUtils.types.isDate(time))
  2239. return time.getTime() / 1e3;
  2240. throw new Error(`Invalid time`);
  2241. }
  2242. function makeEmptyArchive() {
  2243. return Buffer.from([
  2244. 80,
  2245. 75,
  2246. 5,
  2247. 6,
  2248. 0,
  2249. 0,
  2250. 0,
  2251. 0,
  2252. 0,
  2253. 0,
  2254. 0,
  2255. 0,
  2256. 0,
  2257. 0,
  2258. 0,
  2259. 0,
  2260. 0,
  2261. 0,
  2262. 0,
  2263. 0,
  2264. 0,
  2265. 0
  2266. ]);
  2267. }
  2268. class ZipFS extends BasePortableFakeFS {
  2269. constructor(source, opts) {
  2270. super();
  2271. this.lzSource = null;
  2272. this.listings = /* @__PURE__ */ new Map();
  2273. this.entries = /* @__PURE__ */ new Map();
  2274. this.fileSources = /* @__PURE__ */ new Map();
  2275. this.fds = /* @__PURE__ */ new Map();
  2276. this.nextFd = 0;
  2277. this.ready = false;
  2278. this.readOnly = false;
  2279. this.libzip = opts.libzip;
  2280. const pathOptions = opts;
  2281. this.level = typeof pathOptions.level !== `undefined` ? pathOptions.level : DEFAULT_COMPRESSION_LEVEL;
  2282. source != null ? source : source = makeEmptyArchive();
  2283. if (typeof source === `string`) {
  2284. const { baseFs = new NodeFS() } = pathOptions;
  2285. this.baseFs = baseFs;
  2286. this.path = source;
  2287. } else {
  2288. this.path = null;
  2289. this.baseFs = null;
  2290. }
  2291. if (opts.stats) {
  2292. this.stats = opts.stats;
  2293. } else {
  2294. if (typeof source === `string`) {
  2295. try {
  2296. this.stats = this.baseFs.statSync(source);
  2297. } catch (error) {
  2298. if (error.code === `ENOENT` && pathOptions.create) {
  2299. this.stats = makeDefaultStats();
  2300. } else {
  2301. throw error;
  2302. }
  2303. }
  2304. } else {
  2305. this.stats = makeDefaultStats();
  2306. }
  2307. }
  2308. const errPtr = this.libzip.malloc(4);
  2309. try {
  2310. let flags = 0;
  2311. if (typeof source === `string` && pathOptions.create)
  2312. flags |= this.libzip.ZIP_CREATE | this.libzip.ZIP_TRUNCATE;
  2313. if (opts.readOnly) {
  2314. flags |= this.libzip.ZIP_RDONLY;
  2315. this.readOnly = true;
  2316. }
  2317. if (typeof source === `string`) {
  2318. this.zip = this.libzip.open(npath.fromPortablePath(source), flags, errPtr);
  2319. } else {
  2320. const lzSource = this.allocateUnattachedSource(source);
  2321. try {
  2322. this.zip = this.libzip.openFromSource(lzSource, flags, errPtr);
  2323. this.lzSource = lzSource;
  2324. } catch (error) {
  2325. this.libzip.source.free(lzSource);
  2326. throw error;
  2327. }
  2328. }
  2329. if (this.zip === 0) {
  2330. const error = this.libzip.struct.errorS();
  2331. this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`));
  2332. throw this.makeLibzipError(error);
  2333. }
  2334. } finally {
  2335. this.libzip.free(errPtr);
  2336. }
  2337. this.listings.set(PortablePath.root, /* @__PURE__ */ new Set());
  2338. const entryCount = this.libzip.getNumEntries(this.zip, 0);
  2339. for (let t = 0; t < entryCount; ++t) {
  2340. const raw = this.libzip.getName(this.zip, t, 0);
  2341. if (ppath.isAbsolute(raw))
  2342. continue;
  2343. const p = ppath.resolve(PortablePath.root, raw);
  2344. this.registerEntry(p, t);
  2345. if (raw.endsWith(`/`)) {
  2346. this.registerListing(p);
  2347. }
  2348. }
  2349. this.symlinkCount = this.libzip.ext.countSymlinks(this.zip);
  2350. if (this.symlinkCount === -1)
  2351. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2352. this.ready = true;
  2353. }
  2354. makeLibzipError(error) {
  2355. const errorCode = this.libzip.struct.errorCodeZip(error);
  2356. const strerror = this.libzip.error.strerror(error);
  2357. const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]);
  2358. if (errorCode === this.libzip.errors.ZIP_ER_CHANGED)
  2359. throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`);
  2360. return libzipError;
  2361. }
  2362. getExtractHint(hints) {
  2363. for (const fileName of this.entries.keys()) {
  2364. const ext = this.pathUtils.extname(fileName);
  2365. if (hints.relevantExtensions.has(ext)) {
  2366. return true;
  2367. }
  2368. }
  2369. return false;
  2370. }
  2371. getAllFiles() {
  2372. return Array.from(this.entries.keys());
  2373. }
  2374. getRealPath() {
  2375. if (!this.path)
  2376. throw new Error(`ZipFS don't have real paths when loaded from a buffer`);
  2377. return this.path;
  2378. }
  2379. getBufferAndClose() {
  2380. this.prepareClose();
  2381. if (!this.lzSource)
  2382. throw new Error(`ZipFS was not created from a Buffer`);
  2383. if (this.entries.size === 0) {
  2384. this.discardAndClose();
  2385. return makeEmptyArchive();
  2386. }
  2387. try {
  2388. this.libzip.source.keep(this.lzSource);
  2389. if (this.libzip.close(this.zip) === -1)
  2390. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2391. if (this.libzip.source.open(this.lzSource) === -1)
  2392. throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
  2393. if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1)
  2394. throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
  2395. const size = this.libzip.source.tell(this.lzSource);
  2396. if (size === -1)
  2397. throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
  2398. if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1)
  2399. throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
  2400. const buffer = this.libzip.malloc(size);
  2401. if (!buffer)
  2402. throw new Error(`Couldn't allocate enough memory`);
  2403. try {
  2404. const rc = this.libzip.source.read(this.lzSource, buffer, size);
  2405. if (rc === -1)
  2406. throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
  2407. else if (rc < size)
  2408. throw new Error(`Incomplete read`);
  2409. else if (rc > size)
  2410. throw new Error(`Overread`);
  2411. const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size);
  2412. return Buffer.from(memory);
  2413. } finally {
  2414. this.libzip.free(buffer);
  2415. }
  2416. } finally {
  2417. this.libzip.source.close(this.lzSource);
  2418. this.libzip.source.free(this.lzSource);
  2419. this.ready = false;
  2420. }
  2421. }
  2422. prepareClose() {
  2423. if (!this.ready)
  2424. throw EBUSY(`archive closed, close`);
  2425. unwatchAllFiles(this);
  2426. }
  2427. saveAndClose() {
  2428. if (!this.path || !this.baseFs)
  2429. throw new Error(`ZipFS cannot be saved and must be discarded when loaded from a buffer`);
  2430. this.prepareClose();
  2431. if (this.readOnly) {
  2432. this.discardAndClose();
  2433. return;
  2434. }
  2435. const newMode = this.baseFs.existsSync(this.path) || this.stats.mode === DEFAULT_MODE ? void 0 : this.stats.mode;
  2436. if (this.entries.size === 0) {
  2437. this.discardAndClose();
  2438. this.baseFs.writeFileSync(this.path, makeEmptyArchive(), { mode: newMode });
  2439. } else {
  2440. const rc = this.libzip.close(this.zip);
  2441. if (rc === -1)
  2442. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2443. if (typeof newMode !== `undefined`) {
  2444. this.baseFs.chmodSync(this.path, newMode);
  2445. }
  2446. }
  2447. this.ready = false;
  2448. }
  2449. discardAndClose() {
  2450. this.prepareClose();
  2451. this.libzip.discard(this.zip);
  2452. this.ready = false;
  2453. }
  2454. resolve(p) {
  2455. return ppath.resolve(PortablePath.root, p);
  2456. }
  2457. async openPromise(p, flags, mode) {
  2458. return this.openSync(p, flags, mode);
  2459. }
  2460. openSync(p, flags, mode) {
  2461. const fd = this.nextFd++;
  2462. this.fds.set(fd, { cursor: 0, p });
  2463. return fd;
  2464. }
  2465. hasOpenFileHandles() {
  2466. return !!this.fds.size;
  2467. }
  2468. async opendirPromise(p, opts) {
  2469. return this.opendirSync(p, opts);
  2470. }
  2471. opendirSync(p, opts = {}) {
  2472. const resolvedP = this.resolveFilename(`opendir '${p}'`, p);
  2473. if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
  2474. throw ENOENT(`opendir '${p}'`);
  2475. const directoryListing = this.listings.get(resolvedP);
  2476. if (!directoryListing)
  2477. throw ENOTDIR(`opendir '${p}'`);
  2478. const entries = [...directoryListing];
  2479. const fd = this.openSync(resolvedP, `r`);
  2480. const onClose = () => {
  2481. this.closeSync(fd);
  2482. };
  2483. return opendir(this, resolvedP, entries, { onClose });
  2484. }
  2485. async readPromise(fd, buffer, offset, length, position) {
  2486. return this.readSync(fd, buffer, offset, length, position);
  2487. }
  2488. readSync(fd, buffer, offset = 0, length = buffer.byteLength, position = -1) {
  2489. const entry = this.fds.get(fd);
  2490. if (typeof entry === `undefined`)
  2491. throw EBADF(`read`);
  2492. const realPosition = position === -1 || position === null ? entry.cursor : position;
  2493. const source = this.readFileSync(entry.p);
  2494. source.copy(buffer, offset, realPosition, realPosition + length);
  2495. const bytesRead = Math.max(0, Math.min(source.length - realPosition, length));
  2496. if (position === -1 || position === null)
  2497. entry.cursor += bytesRead;
  2498. return bytesRead;
  2499. }
  2500. async writePromise(fd, buffer, offset, length, position) {
  2501. if (typeof buffer === `string`) {
  2502. return this.writeSync(fd, buffer, position);
  2503. } else {
  2504. return this.writeSync(fd, buffer, offset, length, position);
  2505. }
  2506. }
  2507. writeSync(fd, buffer, offset, length, position) {
  2508. const entry = this.fds.get(fd);
  2509. if (typeof entry === `undefined`)
  2510. throw EBADF(`read`);
  2511. throw new Error(`Unimplemented`);
  2512. }
  2513. async closePromise(fd) {
  2514. return this.closeSync(fd);
  2515. }
  2516. closeSync(fd) {
  2517. const entry = this.fds.get(fd);
  2518. if (typeof entry === `undefined`)
  2519. throw EBADF(`read`);
  2520. this.fds.delete(fd);
  2521. }
  2522. createReadStream(p, { encoding } = {}) {
  2523. if (p === null)
  2524. throw new Error(`Unimplemented`);
  2525. const fd = this.openSync(p, `r`);
  2526. const stream$1 = Object.assign(
  2527. new stream.PassThrough({
  2528. emitClose: true,
  2529. autoDestroy: true,
  2530. destroy: (error, callback) => {
  2531. clearImmediate(immediate);
  2532. this.closeSync(fd);
  2533. callback(error);
  2534. }
  2535. }),
  2536. {
  2537. close() {
  2538. stream$1.destroy();
  2539. },
  2540. bytesRead: 0,
  2541. path: p
  2542. }
  2543. );
  2544. const immediate = setImmediate(async () => {
  2545. try {
  2546. const data = await this.readFilePromise(p, encoding);
  2547. stream$1.bytesRead = data.length;
  2548. stream$1.end(data);
  2549. } catch (error) {
  2550. stream$1.destroy(error);
  2551. }
  2552. });
  2553. return stream$1;
  2554. }
  2555. createWriteStream(p, { encoding } = {}) {
  2556. if (this.readOnly)
  2557. throw EROFS(`open '${p}'`);
  2558. if (p === null)
  2559. throw new Error(`Unimplemented`);
  2560. const chunks = [];
  2561. const fd = this.openSync(p, `w`);
  2562. const stream$1 = Object.assign(
  2563. new stream.PassThrough({
  2564. autoDestroy: true,
  2565. emitClose: true,
  2566. destroy: (error, callback) => {
  2567. try {
  2568. if (error) {
  2569. callback(error);
  2570. } else {
  2571. this.writeFileSync(p, Buffer.concat(chunks), encoding);
  2572. callback(null);
  2573. }
  2574. } catch (err) {
  2575. callback(err);
  2576. } finally {
  2577. this.closeSync(fd);
  2578. }
  2579. }
  2580. }),
  2581. {
  2582. bytesWritten: 0,
  2583. path: p,
  2584. close() {
  2585. stream$1.destroy();
  2586. }
  2587. }
  2588. );
  2589. stream$1.on(`data`, (chunk) => {
  2590. const chunkBuffer = Buffer.from(chunk);
  2591. stream$1.bytesWritten += chunkBuffer.length;
  2592. chunks.push(chunkBuffer);
  2593. });
  2594. return stream$1;
  2595. }
  2596. async realpathPromise(p) {
  2597. return this.realpathSync(p);
  2598. }
  2599. realpathSync(p) {
  2600. const resolvedP = this.resolveFilename(`lstat '${p}'`, p);
  2601. if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
  2602. throw ENOENT(`lstat '${p}'`);
  2603. return resolvedP;
  2604. }
  2605. async existsPromise(p) {
  2606. return this.existsSync(p);
  2607. }
  2608. existsSync(p) {
  2609. if (!this.ready)
  2610. throw EBUSY(`archive closed, existsSync '${p}'`);
  2611. if (this.symlinkCount === 0) {
  2612. const resolvedP2 = ppath.resolve(PortablePath.root, p);
  2613. return this.entries.has(resolvedP2) || this.listings.has(resolvedP2);
  2614. }
  2615. let resolvedP;
  2616. try {
  2617. resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, false);
  2618. } catch (error) {
  2619. return false;
  2620. }
  2621. if (resolvedP === void 0)
  2622. return false;
  2623. return this.entries.has(resolvedP) || this.listings.has(resolvedP);
  2624. }
  2625. async accessPromise(p, mode) {
  2626. return this.accessSync(p, mode);
  2627. }
  2628. accessSync(p, mode = fs.constants.F_OK) {
  2629. const resolvedP = this.resolveFilename(`access '${p}'`, p);
  2630. if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
  2631. throw ENOENT(`access '${p}'`);
  2632. if (this.readOnly && mode & fs.constants.W_OK) {
  2633. throw EROFS(`access '${p}'`);
  2634. }
  2635. }
  2636. async statPromise(p, opts = { bigint: false }) {
  2637. if (opts.bigint)
  2638. return this.statSync(p, { bigint: true });
  2639. return this.statSync(p);
  2640. }
  2641. statSync(p, opts = { bigint: false, throwIfNoEntry: true }) {
  2642. const resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, opts.throwIfNoEntry);
  2643. if (resolvedP === void 0)
  2644. return void 0;
  2645. if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) {
  2646. if (opts.throwIfNoEntry === false)
  2647. return void 0;
  2648. throw ENOENT(`stat '${p}'`);
  2649. }
  2650. if (p[p.length - 1] === `/` && !this.listings.has(resolvedP))
  2651. throw ENOTDIR(`stat '${p}'`);
  2652. return this.statImpl(`stat '${p}'`, resolvedP, opts);
  2653. }
  2654. async fstatPromise(fd, opts) {
  2655. return this.fstatSync(fd, opts);
  2656. }
  2657. fstatSync(fd, opts) {
  2658. const entry = this.fds.get(fd);
  2659. if (typeof entry === `undefined`)
  2660. throw EBADF(`fstatSync`);
  2661. const { p } = entry;
  2662. const resolvedP = this.resolveFilename(`stat '${p}'`, p);
  2663. if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
  2664. throw ENOENT(`stat '${p}'`);
  2665. if (p[p.length - 1] === `/` && !this.listings.has(resolvedP))
  2666. throw ENOTDIR(`stat '${p}'`);
  2667. return this.statImpl(`fstat '${p}'`, resolvedP, opts);
  2668. }
  2669. async lstatPromise(p, opts = { bigint: false }) {
  2670. if (opts.bigint)
  2671. return this.lstatSync(p, { bigint: true });
  2672. return this.lstatSync(p);
  2673. }
  2674. lstatSync(p, opts = { bigint: false, throwIfNoEntry: true }) {
  2675. const resolvedP = this.resolveFilename(`lstat '${p}'`, p, false, opts.throwIfNoEntry);
  2676. if (resolvedP === void 0)
  2677. return void 0;
  2678. if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) {
  2679. if (opts.throwIfNoEntry === false)
  2680. return void 0;
  2681. throw ENOENT(`lstat '${p}'`);
  2682. }
  2683. if (p[p.length - 1] === `/` && !this.listings.has(resolvedP))
  2684. throw ENOTDIR(`lstat '${p}'`);
  2685. return this.statImpl(`lstat '${p}'`, resolvedP, opts);
  2686. }
  2687. statImpl(reason, p, opts = {}) {
  2688. const entry = this.entries.get(p);
  2689. if (typeof entry !== `undefined`) {
  2690. const stat = this.libzip.struct.statS();
  2691. const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat);
  2692. if (rc === -1)
  2693. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2694. const uid = this.stats.uid;
  2695. const gid = this.stats.gid;
  2696. const size = this.libzip.struct.statSize(stat) >>> 0;
  2697. const blksize = 512;
  2698. const blocks = Math.ceil(size / blksize);
  2699. const mtimeMs = (this.libzip.struct.statMtime(stat) >>> 0) * 1e3;
  2700. const atimeMs = mtimeMs;
  2701. const birthtimeMs = mtimeMs;
  2702. const ctimeMs = mtimeMs;
  2703. const atime = new Date(atimeMs);
  2704. const birthtime = new Date(birthtimeMs);
  2705. const ctime = new Date(ctimeMs);
  2706. const mtime = new Date(mtimeMs);
  2707. const type = this.listings.has(p) ? S_IFDIR : this.isSymbolicLink(entry) ? S_IFLNK : S_IFREG;
  2708. const defaultMode = type === S_IFDIR ? 493 : 420;
  2709. const mode = type | this.getUnixMode(entry, defaultMode) & 511;
  2710. const crc = this.libzip.struct.statCrc(stat);
  2711. const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc });
  2712. return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance;
  2713. }
  2714. if (this.listings.has(p)) {
  2715. const uid = this.stats.uid;
  2716. const gid = this.stats.gid;
  2717. const size = 0;
  2718. const blksize = 512;
  2719. const blocks = 0;
  2720. const atimeMs = this.stats.mtimeMs;
  2721. const birthtimeMs = this.stats.mtimeMs;
  2722. const ctimeMs = this.stats.mtimeMs;
  2723. const mtimeMs = this.stats.mtimeMs;
  2724. const atime = new Date(atimeMs);
  2725. const birthtime = new Date(birthtimeMs);
  2726. const ctime = new Date(ctimeMs);
  2727. const mtime = new Date(mtimeMs);
  2728. const mode = S_IFDIR | 493;
  2729. const crc = 0;
  2730. const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc });
  2731. return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance;
  2732. }
  2733. throw new Error(`Unreachable`);
  2734. }
  2735. getUnixMode(index, defaultMode) {
  2736. const rc = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S);
  2737. if (rc === -1)
  2738. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2739. const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0;
  2740. if (opsys !== this.libzip.ZIP_OPSYS_UNIX)
  2741. return defaultMode;
  2742. return this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16;
  2743. }
  2744. registerListing(p) {
  2745. const existingListing = this.listings.get(p);
  2746. if (existingListing)
  2747. return existingListing;
  2748. const parentListing = this.registerListing(ppath.dirname(p));
  2749. parentListing.add(ppath.basename(p));
  2750. const newListing = /* @__PURE__ */ new Set();
  2751. this.listings.set(p, newListing);
  2752. return newListing;
  2753. }
  2754. registerEntry(p, index) {
  2755. const parentListing = this.registerListing(ppath.dirname(p));
  2756. parentListing.add(ppath.basename(p));
  2757. this.entries.set(p, index);
  2758. }
  2759. unregisterListing(p) {
  2760. this.listings.delete(p);
  2761. const parentListing = this.listings.get(ppath.dirname(p));
  2762. parentListing == null ? void 0 : parentListing.delete(ppath.basename(p));
  2763. }
  2764. unregisterEntry(p) {
  2765. this.unregisterListing(p);
  2766. const entry = this.entries.get(p);
  2767. this.entries.delete(p);
  2768. if (typeof entry === `undefined`)
  2769. return;
  2770. this.fileSources.delete(entry);
  2771. if (this.isSymbolicLink(entry)) {
  2772. this.symlinkCount--;
  2773. }
  2774. }
  2775. deleteEntry(p, index) {
  2776. this.unregisterEntry(p);
  2777. const rc = this.libzip.delete(this.zip, index);
  2778. if (rc === -1) {
  2779. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2780. }
  2781. }
  2782. resolveFilename(reason, p, resolveLastComponent = true, throwIfNoEntry = true) {
  2783. if (!this.ready)
  2784. throw EBUSY(`archive closed, ${reason}`);
  2785. let resolvedP = ppath.resolve(PortablePath.root, p);
  2786. if (resolvedP === `/`)
  2787. return PortablePath.root;
  2788. const fileIndex = this.entries.get(resolvedP);
  2789. if (resolveLastComponent && fileIndex !== void 0) {
  2790. if (this.symlinkCount !== 0 && this.isSymbolicLink(fileIndex)) {
  2791. const target = this.getFileSource(fileIndex).toString();
  2792. return this.resolveFilename(reason, ppath.resolve(ppath.dirname(resolvedP), target), true, throwIfNoEntry);
  2793. } else {
  2794. return resolvedP;
  2795. }
  2796. }
  2797. while (true) {
  2798. const parentP = this.resolveFilename(reason, ppath.dirname(resolvedP), true, throwIfNoEntry);
  2799. if (parentP === void 0)
  2800. return parentP;
  2801. const isDir = this.listings.has(parentP);
  2802. const doesExist = this.entries.has(parentP);
  2803. if (!isDir && !doesExist) {
  2804. if (throwIfNoEntry === false)
  2805. return void 0;
  2806. throw ENOENT(reason);
  2807. }
  2808. if (!isDir)
  2809. throw ENOTDIR(reason);
  2810. resolvedP = ppath.resolve(parentP, ppath.basename(resolvedP));
  2811. if (!resolveLastComponent || this.symlinkCount === 0)
  2812. break;
  2813. const index = this.libzip.name.locate(this.zip, resolvedP.slice(1));
  2814. if (index === -1)
  2815. break;
  2816. if (this.isSymbolicLink(index)) {
  2817. const target = this.getFileSource(index).toString();
  2818. resolvedP = ppath.resolve(ppath.dirname(resolvedP), target);
  2819. } else {
  2820. break;
  2821. }
  2822. }
  2823. return resolvedP;
  2824. }
  2825. allocateBuffer(content) {
  2826. if (!Buffer.isBuffer(content))
  2827. content = Buffer.from(content);
  2828. const buffer = this.libzip.malloc(content.byteLength);
  2829. if (!buffer)
  2830. throw new Error(`Couldn't allocate enough memory`);
  2831. const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength);
  2832. heap.set(content);
  2833. return { buffer, byteLength: content.byteLength };
  2834. }
  2835. allocateUnattachedSource(content) {
  2836. const error = this.libzip.struct.errorS();
  2837. const { buffer, byteLength } = this.allocateBuffer(content);
  2838. const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, true, error);
  2839. if (source === 0) {
  2840. this.libzip.free(error);
  2841. throw this.makeLibzipError(error);
  2842. }
  2843. return source;
  2844. }
  2845. allocateSource(content) {
  2846. const { buffer, byteLength } = this.allocateBuffer(content);
  2847. const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, true);
  2848. if (source === 0) {
  2849. this.libzip.free(buffer);
  2850. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2851. }
  2852. return source;
  2853. }
  2854. setFileSource(p, content) {
  2855. const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content);
  2856. const target = ppath.relative(PortablePath.root, p);
  2857. const lzSource = this.allocateSource(content);
  2858. try {
  2859. const newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE);
  2860. if (newIndex === -1)
  2861. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2862. if (this.level !== `mixed`) {
  2863. const method = this.level === 0 ? this.libzip.ZIP_CM_STORE : this.libzip.ZIP_CM_DEFLATE;
  2864. const rc = this.libzip.file.setCompression(this.zip, newIndex, 0, method, this.level);
  2865. if (rc === -1) {
  2866. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2867. }
  2868. }
  2869. this.fileSources.set(newIndex, buffer);
  2870. return newIndex;
  2871. } catch (error) {
  2872. this.libzip.source.free(lzSource);
  2873. throw error;
  2874. }
  2875. }
  2876. isSymbolicLink(index) {
  2877. if (this.symlinkCount === 0)
  2878. return false;
  2879. const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S);
  2880. if (attrs === -1)
  2881. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2882. const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0;
  2883. if (opsys !== this.libzip.ZIP_OPSYS_UNIX)
  2884. return false;
  2885. const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16;
  2886. return (attributes & S_IFMT) === S_IFLNK;
  2887. }
  2888. getFileSource(index, opts = { asyncDecompress: false }) {
  2889. const cachedFileSource = this.fileSources.get(index);
  2890. if (typeof cachedFileSource !== `undefined`)
  2891. return cachedFileSource;
  2892. const stat = this.libzip.struct.statS();
  2893. const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat);
  2894. if (rc === -1)
  2895. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2896. const size = this.libzip.struct.statCompSize(stat);
  2897. const compressionMethod = this.libzip.struct.statCompMethod(stat);
  2898. const buffer = this.libzip.malloc(size);
  2899. try {
  2900. const file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED);
  2901. if (file === 0)
  2902. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2903. try {
  2904. const rc2 = this.libzip.fread(file, buffer, size, 0);
  2905. if (rc2 === -1)
  2906. throw this.makeLibzipError(this.libzip.file.getError(file));
  2907. else if (rc2 < size)
  2908. throw new Error(`Incomplete read`);
  2909. else if (rc2 > size)
  2910. throw new Error(`Overread`);
  2911. const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size);
  2912. const data = Buffer.from(memory);
  2913. if (compressionMethod === 0) {
  2914. this.fileSources.set(index, data);
  2915. return data;
  2916. } else if (opts.asyncDecompress) {
  2917. return new Promise((resolve, reject) => {
  2918. zlib__default.default.inflateRaw(data, (error, result) => {
  2919. if (error) {
  2920. reject(error);
  2921. } else {
  2922. this.fileSources.set(index, result);
  2923. resolve(result);
  2924. }
  2925. });
  2926. });
  2927. } else {
  2928. const decompressedData = zlib__default.default.inflateRawSync(data);
  2929. this.fileSources.set(index, decompressedData);
  2930. return decompressedData;
  2931. }
  2932. } finally {
  2933. this.libzip.fclose(file);
  2934. }
  2935. } finally {
  2936. this.libzip.free(buffer);
  2937. }
  2938. }
  2939. async fchmodPromise(fd, mask) {
  2940. return this.chmodPromise(this.fdToPath(fd, `fchmod`), mask);
  2941. }
  2942. fchmodSync(fd, mask) {
  2943. return this.chmodSync(this.fdToPath(fd, `fchmodSync`), mask);
  2944. }
  2945. async chmodPromise(p, mask) {
  2946. return this.chmodSync(p, mask);
  2947. }
  2948. chmodSync(p, mask) {
  2949. if (this.readOnly)
  2950. throw EROFS(`chmod '${p}'`);
  2951. mask &= 493;
  2952. const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false);
  2953. const entry = this.entries.get(resolvedP);
  2954. if (typeof entry === `undefined`)
  2955. throw new Error(`Assertion failed: The entry should have been registered (${resolvedP})`);
  2956. const oldMod = this.getUnixMode(entry, S_IFREG | 0);
  2957. const newMod = oldMod & ~511 | mask;
  2958. const rc = this.libzip.file.setExternalAttributes(this.zip, entry, 0, 0, this.libzip.ZIP_OPSYS_UNIX, newMod << 16);
  2959. if (rc === -1) {
  2960. throw this.makeLibzipError(this.libzip.getError(this.zip));
  2961. }
  2962. }
  2963. async fchownPromise(fd, uid, gid) {
  2964. return this.chownPromise(this.fdToPath(fd, `fchown`), uid, gid);
  2965. }
  2966. fchownSync(fd, uid, gid) {
  2967. return this.chownSync(this.fdToPath(fd, `fchownSync`), uid, gid);
  2968. }
  2969. async chownPromise(p, uid, gid) {
  2970. return this.chownSync(p, uid, gid);
  2971. }
  2972. chownSync(p, uid, gid) {
  2973. throw new Error(`Unimplemented`);
  2974. }
  2975. async renamePromise(oldP, newP) {
  2976. return this.renameSync(oldP, newP);
  2977. }
  2978. renameSync(oldP, newP) {
  2979. throw new Error(`Unimplemented`);
  2980. }
  2981. async copyFilePromise(sourceP, destP, flags) {
  2982. const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags);
  2983. const source = await this.getFileSource(indexSource, { asyncDecompress: true });
  2984. const newIndex = this.setFileSource(resolvedDestP, source);
  2985. if (newIndex !== indexDest) {
  2986. this.registerEntry(resolvedDestP, newIndex);
  2987. }
  2988. }
  2989. copyFileSync(sourceP, destP, flags = 0) {
  2990. const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags);
  2991. const source = this.getFileSource(indexSource);
  2992. const newIndex = this.setFileSource(resolvedDestP, source);
  2993. if (newIndex !== indexDest) {
  2994. this.registerEntry(resolvedDestP, newIndex);
  2995. }
  2996. }
  2997. prepareCopyFile(sourceP, destP, flags = 0) {
  2998. if (this.readOnly)
  2999. throw EROFS(`copyfile '${sourceP} -> '${destP}'`);
  3000. if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0)
  3001. throw ENOSYS(`unsupported clone operation`, `copyfile '${sourceP}' -> ${destP}'`);
  3002. const resolvedSourceP = this.resolveFilename(`copyfile '${sourceP} -> ${destP}'`, sourceP);
  3003. const indexSource = this.entries.get(resolvedSourceP);
  3004. if (typeof indexSource === `undefined`)
  3005. throw EINVAL(`copyfile '${sourceP}' -> '${destP}'`);
  3006. const resolvedDestP = this.resolveFilename(`copyfile '${sourceP}' -> ${destP}'`, destP);
  3007. const indexDest = this.entries.get(resolvedDestP);
  3008. if ((flags & (fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest !== `undefined`)
  3009. throw EEXIST(`copyfile '${sourceP}' -> '${destP}'`);
  3010. return {
  3011. indexSource,
  3012. resolvedDestP,
  3013. indexDest
  3014. };
  3015. }
  3016. async appendFilePromise(p, content, opts) {
  3017. if (this.readOnly)
  3018. throw EROFS(`open '${p}'`);
  3019. if (typeof opts === `undefined`)
  3020. opts = { flag: `a` };
  3021. else if (typeof opts === `string`)
  3022. opts = { flag: `a`, encoding: opts };
  3023. else if (typeof opts.flag === `undefined`)
  3024. opts = { flag: `a`, ...opts };
  3025. return this.writeFilePromise(p, content, opts);
  3026. }
  3027. appendFileSync(p, content, opts = {}) {
  3028. if (this.readOnly)
  3029. throw EROFS(`open '${p}'`);
  3030. if (typeof opts === `undefined`)
  3031. opts = { flag: `a` };
  3032. else if (typeof opts === `string`)
  3033. opts = { flag: `a`, encoding: opts };
  3034. else if (typeof opts.flag === `undefined`)
  3035. opts = { flag: `a`, ...opts };
  3036. return this.writeFileSync(p, content, opts);
  3037. }
  3038. fdToPath(fd, reason) {
  3039. var _a;
  3040. const path = (_a = this.fds.get(fd)) == null ? void 0 : _a.p;
  3041. if (typeof path === `undefined`)
  3042. throw EBADF(reason);
  3043. return path;
  3044. }
  3045. async writeFilePromise(p, content, opts) {
  3046. const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts);
  3047. if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`))
  3048. content = Buffer.concat([await this.getFileSource(index, { asyncDecompress: true }), Buffer.from(content)]);
  3049. if (encoding !== null)
  3050. content = content.toString(encoding);
  3051. const newIndex = this.setFileSource(resolvedP, content);
  3052. if (newIndex !== index)
  3053. this.registerEntry(resolvedP, newIndex);
  3054. if (mode !== null) {
  3055. await this.chmodPromise(resolvedP, mode);
  3056. }
  3057. }
  3058. writeFileSync(p, content, opts) {
  3059. const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts);
  3060. if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`))
  3061. content = Buffer.concat([this.getFileSource(index), Buffer.from(content)]);
  3062. if (encoding !== null)
  3063. content = content.toString(encoding);
  3064. const newIndex = this.setFileSource(resolvedP, content);
  3065. if (newIndex !== index)
  3066. this.registerEntry(resolvedP, newIndex);
  3067. if (mode !== null) {
  3068. this.chmodSync(resolvedP, mode);
  3069. }
  3070. }
  3071. prepareWriteFile(p, opts) {
  3072. if (typeof p === `number`)
  3073. p = this.fdToPath(p, `read`);
  3074. if (this.readOnly)
  3075. throw EROFS(`open '${p}'`);
  3076. const resolvedP = this.resolveFilename(`open '${p}'`, p);
  3077. if (this.listings.has(resolvedP))
  3078. throw EISDIR(`open '${p}'`);
  3079. let encoding = null, mode = null;
  3080. if (typeof opts === `string`) {
  3081. encoding = opts;
  3082. } else if (typeof opts === `object`) {
  3083. ({
  3084. encoding = null,
  3085. mode = null
  3086. } = opts);
  3087. }
  3088. const index = this.entries.get(resolvedP);
  3089. return {
  3090. encoding,
  3091. mode,
  3092. resolvedP,
  3093. index
  3094. };
  3095. }
  3096. async unlinkPromise(p) {
  3097. return this.unlinkSync(p);
  3098. }
  3099. unlinkSync(p) {
  3100. if (this.readOnly)
  3101. throw EROFS(`unlink '${p}'`);
  3102. const resolvedP = this.resolveFilename(`unlink '${p}'`, p);
  3103. if (this.listings.has(resolvedP))
  3104. throw EISDIR(`unlink '${p}'`);
  3105. const index = this.entries.get(resolvedP);
  3106. if (typeof index === `undefined`)
  3107. throw EINVAL(`unlink '${p}'`);
  3108. this.deleteEntry(resolvedP, index);
  3109. }
  3110. async utimesPromise(p, atime, mtime) {
  3111. return this.utimesSync(p, atime, mtime);
  3112. }
  3113. utimesSync(p, atime, mtime) {
  3114. if (this.readOnly)
  3115. throw EROFS(`utimes '${p}'`);
  3116. const resolvedP = this.resolveFilename(`utimes '${p}'`, p);
  3117. this.utimesImpl(resolvedP, mtime);
  3118. }
  3119. async lutimesPromise(p, atime, mtime) {
  3120. return this.lutimesSync(p, atime, mtime);
  3121. }
  3122. lutimesSync(p, atime, mtime) {
  3123. if (this.readOnly)
  3124. throw EROFS(`lutimes '${p}'`);
  3125. const resolvedP = this.resolveFilename(`utimes '${p}'`, p, false);
  3126. this.utimesImpl(resolvedP, mtime);
  3127. }
  3128. utimesImpl(resolvedP, mtime) {
  3129. if (this.listings.has(resolvedP)) {
  3130. if (!this.entries.has(resolvedP))
  3131. this.hydrateDirectory(resolvedP);
  3132. }
  3133. const entry = this.entries.get(resolvedP);
  3134. if (entry === void 0)
  3135. throw new Error(`Unreachable`);
  3136. const rc = this.libzip.file.setMtime(this.zip, entry, 0, toUnixTimestamp(mtime), 0);
  3137. if (rc === -1) {
  3138. throw this.makeLibzipError(this.libzip.getError(this.zip));
  3139. }
  3140. }
  3141. async mkdirPromise(p, opts) {
  3142. return this.mkdirSync(p, opts);
  3143. }
  3144. mkdirSync(p, { mode = 493, recursive = false } = {}) {
  3145. if (recursive)
  3146. return this.mkdirpSync(p, { chmod: mode });
  3147. if (this.readOnly)
  3148. throw EROFS(`mkdir '${p}'`);
  3149. const resolvedP = this.resolveFilename(`mkdir '${p}'`, p);
  3150. if (this.entries.has(resolvedP) || this.listings.has(resolvedP))
  3151. throw EEXIST(`mkdir '${p}'`);
  3152. this.hydrateDirectory(resolvedP);
  3153. this.chmodSync(resolvedP, mode);
  3154. return void 0;
  3155. }
  3156. async rmdirPromise(p, opts) {
  3157. return this.rmdirSync(p, opts);
  3158. }
  3159. rmdirSync(p, { recursive = false } = {}) {
  3160. if (this.readOnly)
  3161. throw EROFS(`rmdir '${p}'`);
  3162. if (recursive) {
  3163. this.removeSync(p);
  3164. return;
  3165. }
  3166. const resolvedP = this.resolveFilename(`rmdir '${p}'`, p);
  3167. const directoryListing = this.listings.get(resolvedP);
  3168. if (!directoryListing)
  3169. throw ENOTDIR(`rmdir '${p}'`);
  3170. if (directoryListing.size > 0)
  3171. throw ENOTEMPTY(`rmdir '${p}'`);
  3172. const index = this.entries.get(resolvedP);
  3173. if (typeof index === `undefined`)
  3174. throw EINVAL(`rmdir '${p}'`);
  3175. this.deleteEntry(p, index);
  3176. }
  3177. hydrateDirectory(resolvedP) {
  3178. const index = this.libzip.dir.add(this.zip, ppath.relative(PortablePath.root, resolvedP));
  3179. if (index === -1)
  3180. throw this.makeLibzipError(this.libzip.getError(this.zip));
  3181. this.registerListing(resolvedP);
  3182. this.registerEntry(resolvedP, index);
  3183. return index;
  3184. }
  3185. async linkPromise(existingP, newP) {
  3186. return this.linkSync(existingP, newP);
  3187. }
  3188. linkSync(existingP, newP) {
  3189. throw EOPNOTSUPP(`link '${existingP}' -> '${newP}'`);
  3190. }
  3191. async symlinkPromise(target, p) {
  3192. return this.symlinkSync(target, p);
  3193. }
  3194. symlinkSync(target, p) {
  3195. if (this.readOnly)
  3196. throw EROFS(`symlink '${target}' -> '${p}'`);
  3197. const resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p);
  3198. if (this.listings.has(resolvedP))
  3199. throw EISDIR(`symlink '${target}' -> '${p}'`);
  3200. if (this.entries.has(resolvedP))
  3201. throw EEXIST(`symlink '${target}' -> '${p}'`);
  3202. const index = this.setFileSource(resolvedP, target);
  3203. this.registerEntry(resolvedP, index);
  3204. const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, this.libzip.ZIP_OPSYS_UNIX, (S_IFLNK | 511) << 16);
  3205. if (rc === -1)
  3206. throw this.makeLibzipError(this.libzip.getError(this.zip));
  3207. this.symlinkCount += 1;
  3208. }
  3209. async readFilePromise(p, encoding) {
  3210. if (typeof encoding === `object`)
  3211. encoding = encoding ? encoding.encoding : void 0;
  3212. const data = await this.readFileBuffer(p, { asyncDecompress: true });
  3213. return encoding ? data.toString(encoding) : data;
  3214. }
  3215. readFileSync(p, encoding) {
  3216. if (typeof encoding === `object`)
  3217. encoding = encoding ? encoding.encoding : void 0;
  3218. const data = this.readFileBuffer(p);
  3219. return encoding ? data.toString(encoding) : data;
  3220. }
  3221. readFileBuffer(p, opts = { asyncDecompress: false }) {
  3222. if (typeof p === `number`)
  3223. p = this.fdToPath(p, `read`);
  3224. const resolvedP = this.resolveFilename(`open '${p}'`, p);
  3225. if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
  3226. throw ENOENT(`open '${p}'`);
  3227. if (p[p.length - 1] === `/` && !this.listings.has(resolvedP))
  3228. throw ENOTDIR(`open '${p}'`);
  3229. if (this.listings.has(resolvedP))
  3230. throw EISDIR(`read`);
  3231. const entry = this.entries.get(resolvedP);
  3232. if (entry === void 0)
  3233. throw new Error(`Unreachable`);
  3234. return this.getFileSource(entry, opts);
  3235. }
  3236. async readdirPromise(p, opts) {
  3237. return this.readdirSync(p, opts);
  3238. }
  3239. readdirSync(p, opts) {
  3240. const resolvedP = this.resolveFilename(`scandir '${p}'`, p);
  3241. if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
  3242. throw ENOENT(`scandir '${p}'`);
  3243. const directoryListing = this.listings.get(resolvedP);
  3244. if (!directoryListing)
  3245. throw ENOTDIR(`scandir '${p}'`);
  3246. const entries = [...directoryListing];
  3247. if (!(opts == null ? void 0 : opts.withFileTypes))
  3248. return entries;
  3249. return entries.map((name) => {
  3250. return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), {
  3251. name
  3252. });
  3253. });
  3254. }
  3255. async readlinkPromise(p) {
  3256. const entry = this.prepareReadlink(p);
  3257. return (await this.getFileSource(entry, { asyncDecompress: true })).toString();
  3258. }
  3259. readlinkSync(p) {
  3260. const entry = this.prepareReadlink(p);
  3261. return this.getFileSource(entry).toString();
  3262. }
  3263. prepareReadlink(p) {
  3264. const resolvedP = this.resolveFilename(`readlink '${p}'`, p, false);
  3265. if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
  3266. throw ENOENT(`readlink '${p}'`);
  3267. if (p[p.length - 1] === `/` && !this.listings.has(resolvedP))
  3268. throw ENOTDIR(`open '${p}'`);
  3269. if (this.listings.has(resolvedP))
  3270. throw EINVAL(`readlink '${p}'`);
  3271. const entry = this.entries.get(resolvedP);
  3272. if (entry === void 0)
  3273. throw new Error(`Unreachable`);
  3274. if (!this.isSymbolicLink(entry))
  3275. throw EINVAL(`readlink '${p}'`);
  3276. return entry;
  3277. }
  3278. async truncatePromise(p, len = 0) {
  3279. const resolvedP = this.resolveFilename(`open '${p}'`, p);
  3280. const index = this.entries.get(resolvedP);
  3281. if (typeof index === `undefined`)
  3282. throw EINVAL(`open '${p}'`);
  3283. const source = await this.getFileSource(index, { asyncDecompress: true });
  3284. const truncated = Buffer.alloc(len, 0);
  3285. source.copy(truncated);
  3286. return await this.writeFilePromise(p, truncated);
  3287. }
  3288. truncateSync(p, len = 0) {
  3289. const resolvedP = this.resolveFilename(`open '${p}'`, p);
  3290. const index = this.entries.get(resolvedP);
  3291. if (typeof index === `undefined`)
  3292. throw EINVAL(`open '${p}'`);
  3293. const source = this.getFileSource(index);
  3294. const truncated = Buffer.alloc(len, 0);
  3295. source.copy(truncated);
  3296. return this.writeFileSync(p, truncated);
  3297. }
  3298. async ftruncatePromise(fd, len) {
  3299. return this.truncatePromise(this.fdToPath(fd, `ftruncate`), len);
  3300. }
  3301. ftruncateSync(fd, len) {
  3302. return this.truncateSync(this.fdToPath(fd, `ftruncateSync`), len);
  3303. }
  3304. watch(p, a, b) {
  3305. let persistent;
  3306. switch (typeof a) {
  3307. case `function`:
  3308. case `string`:
  3309. case `undefined`:
  3310. {
  3311. persistent = true;
  3312. }
  3313. break;
  3314. default:
  3315. {
  3316. ({ persistent = true } = a);
  3317. }
  3318. break;
  3319. }
  3320. if (!persistent)
  3321. return { on: () => {
  3322. }, close: () => {
  3323. } };
  3324. const interval = setInterval(() => {
  3325. }, 24 * 60 * 60 * 1e3);
  3326. return { on: () => {
  3327. }, close: () => {
  3328. clearInterval(interval);
  3329. } };
  3330. }
  3331. watchFile(p, a, b) {
  3332. const resolvedP = ppath.resolve(PortablePath.root, p);
  3333. return watchFile(this, resolvedP, a, b);
  3334. }
  3335. unwatchFile(p, cb) {
  3336. const resolvedP = ppath.resolve(PortablePath.root, p);
  3337. return unwatchFile(this, resolvedP, cb);
  3338. }
  3339. }
  3340. class ProxiedFS extends FakeFS {
  3341. getExtractHint(hints) {
  3342. return this.baseFs.getExtractHint(hints);
  3343. }
  3344. resolve(path) {
  3345. return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path)));
  3346. }
  3347. getRealPath() {
  3348. return this.mapFromBase(this.baseFs.getRealPath());
  3349. }
  3350. async openPromise(p, flags, mode) {
  3351. return this.baseFs.openPromise(this.mapToBase(p), flags, mode);
  3352. }
  3353. openSync(p, flags, mode) {
  3354. return this.baseFs.openSync(this.mapToBase(p), flags, mode);
  3355. }
  3356. async opendirPromise(p, opts) {
  3357. return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p });
  3358. }
  3359. opendirSync(p, opts) {
  3360. return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p });
  3361. }
  3362. async readPromise(fd, buffer, offset, length, position) {
  3363. return await this.baseFs.readPromise(fd, buffer, offset, length, position);
  3364. }
  3365. readSync(fd, buffer, offset, length, position) {
  3366. return this.baseFs.readSync(fd, buffer, offset, length, position);
  3367. }
  3368. async writePromise(fd, buffer, offset, length, position) {
  3369. if (typeof buffer === `string`) {
  3370. return await this.baseFs.writePromise(fd, buffer, offset);
  3371. } else {
  3372. return await this.baseFs.writePromise(fd, buffer, offset, length, position);
  3373. }
  3374. }
  3375. writeSync(fd, buffer, offset, length, position) {
  3376. if (typeof buffer === `string`) {
  3377. return this.baseFs.writeSync(fd, buffer, offset);
  3378. } else {
  3379. return this.baseFs.writeSync(fd, buffer, offset, length, position);
  3380. }
  3381. }
  3382. async closePromise(fd) {
  3383. return this.baseFs.closePromise(fd);
  3384. }
  3385. closeSync(fd) {
  3386. this.baseFs.closeSync(fd);
  3387. }
  3388. createReadStream(p, opts) {
  3389. return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts);
  3390. }
  3391. createWriteStream(p, opts) {
  3392. return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts);
  3393. }
  3394. async realpathPromise(p) {
  3395. return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p)));
  3396. }
  3397. realpathSync(p) {
  3398. return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p)));
  3399. }
  3400. async existsPromise(p) {
  3401. return this.baseFs.existsPromise(this.mapToBase(p));
  3402. }
  3403. existsSync(p) {
  3404. return this.baseFs.existsSync(this.mapToBase(p));
  3405. }
  3406. accessSync(p, mode) {
  3407. return this.baseFs.accessSync(this.mapToBase(p), mode);
  3408. }
  3409. async accessPromise(p, mode) {
  3410. return this.baseFs.accessPromise(this.mapToBase(p), mode);
  3411. }
  3412. async statPromise(p, opts) {
  3413. return this.baseFs.statPromise(this.mapToBase(p), opts);
  3414. }
  3415. statSync(p, opts) {
  3416. return this.baseFs.statSync(this.mapToBase(p), opts);
  3417. }
  3418. async fstatPromise(fd, opts) {
  3419. return this.baseFs.fstatPromise(fd, opts);
  3420. }
  3421. fstatSync(fd, opts) {
  3422. return this.baseFs.fstatSync(fd, opts);
  3423. }
  3424. lstatPromise(p, opts) {
  3425. return this.baseFs.lstatPromise(this.mapToBase(p), opts);
  3426. }
  3427. lstatSync(p, opts) {
  3428. return this.baseFs.lstatSync(this.mapToBase(p), opts);
  3429. }
  3430. async fchmodPromise(fd, mask) {
  3431. return this.baseFs.fchmodPromise(fd, mask);
  3432. }
  3433. fchmodSync(fd, mask) {
  3434. return this.baseFs.fchmodSync(fd, mask);
  3435. }
  3436. async chmodPromise(p, mask) {
  3437. return this.baseFs.chmodPromise(this.mapToBase(p), mask);
  3438. }
  3439. chmodSync(p, mask) {
  3440. return this.baseFs.chmodSync(this.mapToBase(p), mask);
  3441. }
  3442. async fchownPromise(fd, uid, gid) {
  3443. return this.baseFs.fchownPromise(fd, uid, gid);
  3444. }
  3445. fchownSync(fd, uid, gid) {
  3446. return this.baseFs.fchownSync(fd, uid, gid);
  3447. }
  3448. async chownPromise(p, uid, gid) {
  3449. return this.baseFs.chownPromise(this.mapToBase(p), uid, gid);
  3450. }
  3451. chownSync(p, uid, gid) {
  3452. return this.baseFs.chownSync(this.mapToBase(p), uid, gid);
  3453. }
  3454. async renamePromise(oldP, newP) {
  3455. return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP));
  3456. }
  3457. renameSync(oldP, newP) {
  3458. return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP));
  3459. }
  3460. async copyFilePromise(sourceP, destP, flags = 0) {
  3461. return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags);
  3462. }
  3463. copyFileSync(sourceP, destP, flags = 0) {
  3464. return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags);
  3465. }
  3466. async appendFilePromise(p, content, opts) {
  3467. return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts);
  3468. }
  3469. appendFileSync(p, content, opts) {
  3470. return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts);
  3471. }
  3472. async writeFilePromise(p, content, opts) {
  3473. return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts);
  3474. }
  3475. writeFileSync(p, content, opts) {
  3476. return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts);
  3477. }
  3478. async unlinkPromise(p) {
  3479. return this.baseFs.unlinkPromise(this.mapToBase(p));
  3480. }
  3481. unlinkSync(p) {
  3482. return this.baseFs.unlinkSync(this.mapToBase(p));
  3483. }
  3484. async utimesPromise(p, atime, mtime) {
  3485. return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime);
  3486. }
  3487. utimesSync(p, atime, mtime) {
  3488. return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime);
  3489. }
  3490. async mkdirPromise(p, opts) {
  3491. return this.baseFs.mkdirPromise(this.mapToBase(p), opts);
  3492. }
  3493. mkdirSync(p, opts) {
  3494. return this.baseFs.mkdirSync(this.mapToBase(p), opts);
  3495. }
  3496. async rmdirPromise(p, opts) {
  3497. return this.baseFs.rmdirPromise(this.mapToBase(p), opts);
  3498. }
  3499. rmdirSync(p, opts) {
  3500. return this.baseFs.rmdirSync(this.mapToBase(p), opts);
  3501. }
  3502. async linkPromise(existingP, newP) {
  3503. return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP));
  3504. }
  3505. linkSync(existingP, newP) {
  3506. return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP));
  3507. }
  3508. async symlinkPromise(target, p, type) {
  3509. const mappedP = this.mapToBase(p);
  3510. if (this.pathUtils.isAbsolute(target))
  3511. return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type);
  3512. const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target));
  3513. const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget);
  3514. return this.baseFs.symlinkPromise(mappedTarget, mappedP, type);
  3515. }
  3516. symlinkSync(target, p, type) {
  3517. const mappedP = this.mapToBase(p);
  3518. if (this.pathUtils.isAbsolute(target))
  3519. return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type);
  3520. const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target));
  3521. const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget);
  3522. return this.baseFs.symlinkSync(mappedTarget, mappedP, type);
  3523. }
  3524. async readFilePromise(p, encoding) {
  3525. if (encoding === `utf8`) {
  3526. return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding);
  3527. } else {
  3528. return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding);
  3529. }
  3530. }
  3531. readFileSync(p, encoding) {
  3532. if (encoding === `utf8`) {
  3533. return this.baseFs.readFileSync(this.fsMapToBase(p), encoding);
  3534. } else {
  3535. return this.baseFs.readFileSync(this.fsMapToBase(p), encoding);
  3536. }
  3537. }
  3538. async readdirPromise(p, opts) {
  3539. return this.baseFs.readdirPromise(this.mapToBase(p), opts);
  3540. }
  3541. readdirSync(p, opts) {
  3542. return this.baseFs.readdirSync(this.mapToBase(p), opts);
  3543. }
  3544. async readlinkPromise(p) {
  3545. return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p)));
  3546. }
  3547. readlinkSync(p) {
  3548. return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p)));
  3549. }
  3550. async truncatePromise(p, len) {
  3551. return this.baseFs.truncatePromise(this.mapToBase(p), len);
  3552. }
  3553. truncateSync(p, len) {
  3554. return this.baseFs.truncateSync(this.mapToBase(p), len);
  3555. }
  3556. async ftruncatePromise(fd, len) {
  3557. return this.baseFs.ftruncatePromise(fd, len);
  3558. }
  3559. ftruncateSync(fd, len) {
  3560. return this.baseFs.ftruncateSync(fd, len);
  3561. }
  3562. watch(p, a, b) {
  3563. return this.baseFs.watch(
  3564. this.mapToBase(p),
  3565. a,
  3566. b
  3567. );
  3568. }
  3569. watchFile(p, a, b) {
  3570. return this.baseFs.watchFile(
  3571. this.mapToBase(p),
  3572. a,
  3573. b
  3574. );
  3575. }
  3576. unwatchFile(p, cb) {
  3577. return this.baseFs.unwatchFile(this.mapToBase(p), cb);
  3578. }
  3579. fsMapToBase(p) {
  3580. if (typeof p === `number`) {
  3581. return p;
  3582. } else {
  3583. return this.mapToBase(p);
  3584. }
  3585. }
  3586. }
  3587. class PosixFS extends ProxiedFS {
  3588. constructor(baseFs) {
  3589. super(npath);
  3590. this.baseFs = baseFs;
  3591. }
  3592. mapFromBase(path) {
  3593. return npath.fromPortablePath(path);
  3594. }
  3595. mapToBase(path) {
  3596. return npath.toPortablePath(path);
  3597. }
  3598. }
  3599. const NUMBER_REGEXP = /^[0-9]+$/;
  3600. const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/;
  3601. const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/;
  3602. class VirtualFS extends ProxiedFS {
  3603. constructor({ baseFs = new NodeFS() } = {}) {
  3604. super(ppath);
  3605. this.baseFs = baseFs;
  3606. }
  3607. static makeVirtualPath(base, component, to) {
  3608. if (ppath.basename(base) !== `__virtual__`)
  3609. throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`);
  3610. if (!ppath.basename(component).match(VALID_COMPONENT))
  3611. throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`);
  3612. const target = ppath.relative(ppath.dirname(base), to);
  3613. const segments = target.split(`/`);
  3614. let depth = 0;
  3615. while (depth < segments.length && segments[depth] === `..`)
  3616. depth += 1;
  3617. const finalSegments = segments.slice(depth);
  3618. const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments);
  3619. return fullVirtualPath;
  3620. }
  3621. static resolveVirtual(p) {
  3622. const match = p.match(VIRTUAL_REGEXP);
  3623. if (!match || !match[3] && match[5])
  3624. return p;
  3625. const target = ppath.dirname(match[1]);
  3626. if (!match[3] || !match[4])
  3627. return target;
  3628. const isnum = NUMBER_REGEXP.test(match[4]);
  3629. if (!isnum)
  3630. return p;
  3631. const depth = Number(match[4]);
  3632. const backstep = `../`.repeat(depth);
  3633. const subpath = match[5] || `.`;
  3634. return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath));
  3635. }
  3636. getExtractHint(hints) {
  3637. return this.baseFs.getExtractHint(hints);
  3638. }
  3639. getRealPath() {
  3640. return this.baseFs.getRealPath();
  3641. }
  3642. realpathSync(p) {
  3643. const match = p.match(VIRTUAL_REGEXP);
  3644. if (!match)
  3645. return this.baseFs.realpathSync(p);
  3646. if (!match[5])
  3647. return p;
  3648. const realpath = this.baseFs.realpathSync(this.mapToBase(p));
  3649. return VirtualFS.makeVirtualPath(match[1], match[3], realpath);
  3650. }
  3651. async realpathPromise(p) {
  3652. const match = p.match(VIRTUAL_REGEXP);
  3653. if (!match)
  3654. return await this.baseFs.realpathPromise(p);
  3655. if (!match[5])
  3656. return p;
  3657. const realpath = await this.baseFs.realpathPromise(this.mapToBase(p));
  3658. return VirtualFS.makeVirtualPath(match[1], match[3], realpath);
  3659. }
  3660. mapToBase(p) {
  3661. if (p === ``)
  3662. return p;
  3663. if (this.pathUtils.isAbsolute(p))
  3664. return VirtualFS.resolveVirtual(p);
  3665. const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot));
  3666. const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p));
  3667. return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot;
  3668. }
  3669. mapFromBase(p) {
  3670. return p;
  3671. }
  3672. }
  3673. const ZIP_MASK = 4278190080;
  3674. const ZIP_MAGIC = 704643072;
  3675. const getArchivePart = (path, extension) => {
  3676. let idx = path.indexOf(extension);
  3677. if (idx <= 0)
  3678. return null;
  3679. let nextCharIdx = idx;
  3680. while (idx >= 0) {
  3681. nextCharIdx = idx + extension.length;
  3682. if (path[nextCharIdx] === ppath.sep)
  3683. break;
  3684. if (path[idx - 1] === ppath.sep)
  3685. return null;
  3686. idx = path.indexOf(extension, nextCharIdx);
  3687. }
  3688. if (path.length > nextCharIdx && path[nextCharIdx] !== ppath.sep)
  3689. return null;
  3690. return path.slice(0, nextCharIdx);
  3691. };
  3692. class ZipOpenFS extends BasePortableFakeFS {
  3693. constructor({ libzip, baseFs = new NodeFS(), filter = null, maxOpenFiles = Infinity, readOnlyArchives = false, useCache = true, maxAge = 5e3, fileExtensions = null }) {
  3694. super();
  3695. this.fdMap = /* @__PURE__ */ new Map();
  3696. this.nextFd = 3;
  3697. this.isZip = /* @__PURE__ */ new Set();
  3698. this.notZip = /* @__PURE__ */ new Set();
  3699. this.realPaths = /* @__PURE__ */ new Map();
  3700. this.limitOpenFilesTimeout = null;
  3701. this.libzipFactory = typeof libzip !== `function` ? () => libzip : libzip;
  3702. this.baseFs = baseFs;
  3703. this.zipInstances = useCache ? /* @__PURE__ */ new Map() : null;
  3704. this.filter = filter;
  3705. this.maxOpenFiles = maxOpenFiles;
  3706. this.readOnlyArchives = readOnlyArchives;
  3707. this.maxAge = maxAge;
  3708. this.fileExtensions = fileExtensions;
  3709. }
  3710. static async openPromise(fn, opts) {
  3711. const zipOpenFs = new ZipOpenFS(opts);
  3712. try {
  3713. return await fn(zipOpenFs);
  3714. } finally {
  3715. zipOpenFs.saveAndClose();
  3716. }
  3717. }
  3718. get libzip() {
  3719. if (typeof this.libzipInstance === `undefined`)
  3720. this.libzipInstance = this.libzipFactory();
  3721. return this.libzipInstance;
  3722. }
  3723. getExtractHint(hints) {
  3724. return this.baseFs.getExtractHint(hints);
  3725. }
  3726. getRealPath() {
  3727. return this.baseFs.getRealPath();
  3728. }
  3729. saveAndClose() {
  3730. unwatchAllFiles(this);
  3731. if (this.zipInstances) {
  3732. for (const [path, { zipFs }] of this.zipInstances.entries()) {
  3733. zipFs.saveAndClose();
  3734. this.zipInstances.delete(path);
  3735. }
  3736. }
  3737. }
  3738. discardAndClose() {
  3739. unwatchAllFiles(this);
  3740. if (this.zipInstances) {
  3741. for (const [path, { zipFs }] of this.zipInstances.entries()) {
  3742. zipFs.discardAndClose();
  3743. this.zipInstances.delete(path);
  3744. }
  3745. }
  3746. }
  3747. resolve(p) {
  3748. return this.baseFs.resolve(p);
  3749. }
  3750. remapFd(zipFs, fd) {
  3751. const remappedFd = this.nextFd++ | ZIP_MAGIC;
  3752. this.fdMap.set(remappedFd, [zipFs, fd]);
  3753. return remappedFd;
  3754. }
  3755. async openPromise(p, flags, mode) {
  3756. return await this.makeCallPromise(p, async () => {
  3757. return await this.baseFs.openPromise(p, flags, mode);
  3758. }, async (zipFs, { subPath }) => {
  3759. return this.remapFd(zipFs, await zipFs.openPromise(subPath, flags, mode));
  3760. });
  3761. }
  3762. openSync(p, flags, mode) {
  3763. return this.makeCallSync(p, () => {
  3764. return this.baseFs.openSync(p, flags, mode);
  3765. }, (zipFs, { subPath }) => {
  3766. return this.remapFd(zipFs, zipFs.openSync(subPath, flags, mode));
  3767. });
  3768. }
  3769. async opendirPromise(p, opts) {
  3770. return await this.makeCallPromise(p, async () => {
  3771. return await this.baseFs.opendirPromise(p, opts);
  3772. }, async (zipFs, { subPath }) => {
  3773. return await zipFs.opendirPromise(subPath, opts);
  3774. }, {
  3775. requireSubpath: false
  3776. });
  3777. }
  3778. opendirSync(p, opts) {
  3779. return this.makeCallSync(p, () => {
  3780. return this.baseFs.opendirSync(p, opts);
  3781. }, (zipFs, { subPath }) => {
  3782. return zipFs.opendirSync(subPath, opts);
  3783. }, {
  3784. requireSubpath: false
  3785. });
  3786. }
  3787. async readPromise(fd, buffer, offset, length, position) {
  3788. if ((fd & ZIP_MASK) !== ZIP_MAGIC)
  3789. return await this.baseFs.readPromise(fd, buffer, offset, length, position);
  3790. const entry = this.fdMap.get(fd);
  3791. if (typeof entry === `undefined`)
  3792. throw EBADF(`read`);
  3793. const [zipFs, realFd] = entry;
  3794. return await zipFs.readPromise(realFd, buffer, offset, length, position);
  3795. }
  3796. readSync(fd, buffer, offset, length, position) {
  3797. if ((fd & ZIP_MASK) !== ZIP_MAGIC)
  3798. return this.baseFs.readSync(fd, buffer, offset, length, position);
  3799. const entry = this.fdMap.get(fd);
  3800. if (typeof entry === `undefined`)
  3801. throw EBADF(`readSync`);
  3802. const [zipFs, realFd] = entry;
  3803. return zipFs.readSync(realFd, buffer, offset, length, position);
  3804. }
  3805. async writePromise(fd, buffer, offset, length, position) {
  3806. if ((fd & ZIP_MASK) !== ZIP_MAGIC) {
  3807. if (typeof buffer === `string`) {
  3808. return await this.baseFs.writePromise(fd, buffer, offset);
  3809. } else {
  3810. return await this.baseFs.writePromise(fd, buffer, offset, length, position);
  3811. }
  3812. }
  3813. const entry = this.fdMap.get(fd);
  3814. if (typeof entry === `undefined`)
  3815. throw EBADF(`write`);
  3816. const [zipFs, realFd] = entry;
  3817. if (typeof buffer === `string`) {
  3818. return await zipFs.writePromise(realFd, buffer, offset);
  3819. } else {
  3820. return await zipFs.writePromise(realFd, buffer, offset, length, position);
  3821. }
  3822. }
  3823. writeSync(fd, buffer, offset, length, position) {
  3824. if ((fd & ZIP_MASK) !== ZIP_MAGIC) {
  3825. if (typeof buffer === `string`) {
  3826. return this.baseFs.writeSync(fd, buffer, offset);
  3827. } else {
  3828. return this.baseFs.writeSync(fd, buffer, offset, length, position);
  3829. }
  3830. }
  3831. const entry = this.fdMap.get(fd);
  3832. if (typeof entry === `undefined`)
  3833. throw EBADF(`writeSync`);
  3834. const [zipFs, realFd] = entry;
  3835. if (typeof buffer === `string`) {
  3836. return zipFs.writeSync(realFd, buffer, offset);
  3837. } else {
  3838. return zipFs.writeSync(realFd, buffer, offset, length, position);
  3839. }
  3840. }
  3841. async closePromise(fd) {
  3842. if ((fd & ZIP_MASK) !== ZIP_MAGIC)
  3843. return await this.baseFs.closePromise(fd);
  3844. const entry = this.fdMap.get(fd);
  3845. if (typeof entry === `undefined`)
  3846. throw EBADF(`close`);
  3847. this.fdMap.delete(fd);
  3848. const [zipFs, realFd] = entry;
  3849. return await zipFs.closePromise(realFd);
  3850. }
  3851. closeSync(fd) {
  3852. if ((fd & ZIP_MASK) !== ZIP_MAGIC)
  3853. return this.baseFs.closeSync(fd);
  3854. const entry = this.fdMap.get(fd);
  3855. if (typeof entry === `undefined`)
  3856. throw EBADF(`closeSync`);
  3857. this.fdMap.delete(fd);
  3858. const [zipFs, realFd] = entry;
  3859. return zipFs.closeSync(realFd);
  3860. }
  3861. createReadStream(p, opts) {
  3862. if (p === null)
  3863. return this.baseFs.createReadStream(p, opts);
  3864. return this.makeCallSync(p, () => {
  3865. return this.baseFs.createReadStream(p, opts);
  3866. }, (zipFs, { archivePath, subPath }) => {
  3867. const stream = zipFs.createReadStream(subPath, opts);
  3868. stream.path = npath.fromPortablePath(this.pathUtils.join(archivePath, subPath));
  3869. return stream;
  3870. });
  3871. }
  3872. createWriteStream(p, opts) {
  3873. if (p === null)
  3874. return this.baseFs.createWriteStream(p, opts);
  3875. return this.makeCallSync(p, () => {
  3876. return this.baseFs.createWriteStream(p, opts);
  3877. }, (zipFs, { subPath }) => {
  3878. return zipFs.createWriteStream(subPath, opts);
  3879. });
  3880. }
  3881. async realpathPromise(p) {
  3882. return await this.makeCallPromise(p, async () => {
  3883. return await this.baseFs.realpathPromise(p);
  3884. }, async (zipFs, { archivePath, subPath }) => {
  3885. let realArchivePath = this.realPaths.get(archivePath);
  3886. if (typeof realArchivePath === `undefined`) {
  3887. realArchivePath = await this.baseFs.realpathPromise(archivePath);
  3888. this.realPaths.set(archivePath, realArchivePath);
  3889. }
  3890. return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, await zipFs.realpathPromise(subPath)));
  3891. });
  3892. }
  3893. realpathSync(p) {
  3894. return this.makeCallSync(p, () => {
  3895. return this.baseFs.realpathSync(p);
  3896. }, (zipFs, { archivePath, subPath }) => {
  3897. let realArchivePath = this.realPaths.get(archivePath);
  3898. if (typeof realArchivePath === `undefined`) {
  3899. realArchivePath = this.baseFs.realpathSync(archivePath);
  3900. this.realPaths.set(archivePath, realArchivePath);
  3901. }
  3902. return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, zipFs.realpathSync(subPath)));
  3903. });
  3904. }
  3905. async existsPromise(p) {
  3906. return await this.makeCallPromise(p, async () => {
  3907. return await this.baseFs.existsPromise(p);
  3908. }, async (zipFs, { subPath }) => {
  3909. return await zipFs.existsPromise(subPath);
  3910. });
  3911. }
  3912. existsSync(p) {
  3913. return this.makeCallSync(p, () => {
  3914. return this.baseFs.existsSync(p);
  3915. }, (zipFs, { subPath }) => {
  3916. return zipFs.existsSync(subPath);
  3917. });
  3918. }
  3919. async accessPromise(p, mode) {
  3920. return await this.makeCallPromise(p, async () => {
  3921. return await this.baseFs.accessPromise(p, mode);
  3922. }, async (zipFs, { subPath }) => {
  3923. return await zipFs.accessPromise(subPath, mode);
  3924. });
  3925. }
  3926. accessSync(p, mode) {
  3927. return this.makeCallSync(p, () => {
  3928. return this.baseFs.accessSync(p, mode);
  3929. }, (zipFs, { subPath }) => {
  3930. return zipFs.accessSync(subPath, mode);
  3931. });
  3932. }
  3933. async statPromise(p, opts) {
  3934. return await this.makeCallPromise(p, async () => {
  3935. return await this.baseFs.statPromise(p, opts);
  3936. }, async (zipFs, { subPath }) => {
  3937. return await zipFs.statPromise(subPath, opts);
  3938. });
  3939. }
  3940. statSync(p, opts) {
  3941. return this.makeCallSync(p, () => {
  3942. return this.baseFs.statSync(p, opts);
  3943. }, (zipFs, { subPath }) => {
  3944. return zipFs.statSync(subPath, opts);
  3945. });
  3946. }
  3947. async fstatPromise(fd, opts) {
  3948. if ((fd & ZIP_MASK) !== ZIP_MAGIC)
  3949. return this.baseFs.fstatPromise(fd, opts);
  3950. const entry = this.fdMap.get(fd);
  3951. if (typeof entry === `undefined`)
  3952. throw EBADF(`fstat`);
  3953. const [zipFs, realFd] = entry;
  3954. return zipFs.fstatPromise(realFd, opts);
  3955. }
  3956. fstatSync(fd, opts) {
  3957. if ((fd & ZIP_MASK) !== ZIP_MAGIC)
  3958. return this.baseFs.fstatSync(fd, opts);
  3959. const entry = this.fdMap.get(fd);
  3960. if (typeof entry === `undefined`)
  3961. throw EBADF(`fstatSync`);
  3962. const [zipFs, realFd] = entry;
  3963. return zipFs.fstatSync(realFd, opts);
  3964. }
  3965. async lstatPromise(p, opts) {
  3966. return await this.makeCallPromise(p, async () => {
  3967. return await this.baseFs.lstatPromise(p, opts);
  3968. }, async (zipFs, { subPath }) => {
  3969. return await zipFs.lstatPromise(subPath, opts);
  3970. });
  3971. }
  3972. lstatSync(p, opts) {
  3973. return this.makeCallSync(p, () => {
  3974. return this.baseFs.lstatSync(p, opts);
  3975. }, (zipFs, { subPath }) => {
  3976. return zipFs.lstatSync(subPath, opts);
  3977. });
  3978. }
  3979. async fchmodPromise(fd, mask) {
  3980. if ((fd & ZIP_MASK) !== ZIP_MAGIC)
  3981. return this.baseFs.fchmodPromise(fd, mask);
  3982. const entry = this.fdMap.get(fd);
  3983. if (typeof entry === `undefined`)
  3984. throw EBADF(`fchmod`);
  3985. const [zipFs, realFd] = entry;
  3986. return zipFs.fchmodPromise(realFd, mask);
  3987. }
  3988. fchmodSync(fd, mask) {
  3989. if ((fd & ZIP_MASK) !== ZIP_MAGIC)
  3990. return this.baseFs.fchmodSync(fd, mask);
  3991. const entry = this.fdMap.get(fd);
  3992. if (typeof entry === `undefined`)
  3993. throw EBADF(`fchmodSync`);
  3994. const [zipFs, realFd] = entry;
  3995. return zipFs.fchmodSync(realFd, mask);
  3996. }
  3997. async chmodPromise(p, mask) {
  3998. return await this.makeCallPromise(p, async () => {
  3999. return await this.baseFs.chmodPromise(p, mask);
  4000. }, async (zipFs, { subPath }) => {
  4001. return await zipFs.chmodPromise(subPath, mask);
  4002. });
  4003. }
  4004. chmodSync(p, mask) {
  4005. return this.makeCallSync(p, () => {
  4006. return this.baseFs.chmodSync(p, mask);
  4007. }, (zipFs, { subPath }) => {
  4008. return zipFs.chmodSync(subPath, mask);
  4009. });
  4010. }
  4011. async fchownPromise(fd, uid, gid) {
  4012. if ((fd & ZIP_MASK) !== ZIP_MAGIC)
  4013. return this.baseFs.fchownPromise(fd, uid, gid);
  4014. const entry = this.fdMap.get(fd);
  4015. if (typeof entry === `undefined`)
  4016. throw EBADF(`fchown`);
  4017. const [zipFs, realFd] = entry;
  4018. return zipFs.fchownPromise(realFd, uid, gid);
  4019. }
  4020. fchownSync(fd, uid, gid) {
  4021. if ((fd & ZIP_MASK) !== ZIP_MAGIC)
  4022. return this.baseFs.fchownSync(fd, uid, gid);
  4023. const entry = this.fdMap.get(fd);
  4024. if (typeof entry === `undefined`)
  4025. throw EBADF(`fchownSync`);
  4026. const [zipFs, realFd] = entry;
  4027. return zipFs.fchownSync(realFd, uid, gid);
  4028. }
  4029. async chownPromise(p, uid, gid) {
  4030. return await this.makeCallPromise(p, async () => {
  4031. return await this.baseFs.chownPromise(p, uid, gid);
  4032. }, async (zipFs, { subPath }) => {
  4033. return await zipFs.chownPromise(subPath, uid, gid);
  4034. });
  4035. }
  4036. chownSync(p, uid, gid) {
  4037. return this.makeCallSync(p, () => {
  4038. return this.baseFs.chownSync(p, uid, gid);
  4039. }, (zipFs, { subPath }) => {
  4040. return zipFs.chownSync(subPath, uid, gid);
  4041. });
  4042. }
  4043. async renamePromise(oldP, newP) {
  4044. return await this.makeCallPromise(oldP, async () => {
  4045. return await this.makeCallPromise(newP, async () => {
  4046. return await this.baseFs.renamePromise(oldP, newP);
  4047. }, async () => {
  4048. throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` });
  4049. });
  4050. }, async (zipFsO, { subPath: subPathO }) => {
  4051. return await this.makeCallPromise(newP, async () => {
  4052. throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` });
  4053. }, async (zipFsN, { subPath: subPathN }) => {
  4054. if (zipFsO !== zipFsN) {
  4055. throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` });
  4056. } else {
  4057. return await zipFsO.renamePromise(subPathO, subPathN);
  4058. }
  4059. });
  4060. });
  4061. }
  4062. renameSync(oldP, newP) {
  4063. return this.makeCallSync(oldP, () => {
  4064. return this.makeCallSync(newP, () => {
  4065. return this.baseFs.renameSync(oldP, newP);
  4066. }, () => {
  4067. throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` });
  4068. });
  4069. }, (zipFsO, { subPath: subPathO }) => {
  4070. return this.makeCallSync(newP, () => {
  4071. throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` });
  4072. }, (zipFsN, { subPath: subPathN }) => {
  4073. if (zipFsO !== zipFsN) {
  4074. throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` });
  4075. } else {
  4076. return zipFsO.renameSync(subPathO, subPathN);
  4077. }
  4078. });
  4079. });
  4080. }
  4081. async copyFilePromise(sourceP, destP, flags = 0) {
  4082. const fallback = async (sourceFs, sourceP2, destFs, destP2) => {
  4083. if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0)
  4084. throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` });
  4085. if (flags & fs.constants.COPYFILE_EXCL && await this.existsPromise(sourceP2))
  4086. throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` });
  4087. let content;
  4088. try {
  4089. content = await sourceFs.readFilePromise(sourceP2);
  4090. } catch (error) {
  4091. throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` });
  4092. }
  4093. await destFs.writeFilePromise(destP2, content);
  4094. };
  4095. return await this.makeCallPromise(sourceP, async () => {
  4096. return await this.makeCallPromise(destP, async () => {
  4097. return await this.baseFs.copyFilePromise(sourceP, destP, flags);
  4098. }, async (zipFsD, { subPath: subPathD }) => {
  4099. return await fallback(this.baseFs, sourceP, zipFsD, subPathD);
  4100. });
  4101. }, async (zipFsS, { subPath: subPathS }) => {
  4102. return await this.makeCallPromise(destP, async () => {
  4103. return await fallback(zipFsS, subPathS, this.baseFs, destP);
  4104. }, async (zipFsD, { subPath: subPathD }) => {
  4105. if (zipFsS !== zipFsD) {
  4106. return await fallback(zipFsS, subPathS, zipFsD, subPathD);
  4107. } else {
  4108. return await zipFsS.copyFilePromise(subPathS, subPathD, flags);
  4109. }
  4110. });
  4111. });
  4112. }
  4113. copyFileSync(sourceP, destP, flags = 0) {
  4114. const fallback = (sourceFs, sourceP2, destFs, destP2) => {
  4115. if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0)
  4116. throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` });
  4117. if (flags & fs.constants.COPYFILE_EXCL && this.existsSync(sourceP2))
  4118. throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` });
  4119. let content;
  4120. try {
  4121. content = sourceFs.readFileSync(sourceP2);
  4122. } catch (error) {
  4123. throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` });
  4124. }
  4125. destFs.writeFileSync(destP2, content);
  4126. };
  4127. return this.makeCallSync(sourceP, () => {
  4128. return this.makeCallSync(destP, () => {
  4129. return this.baseFs.copyFileSync(sourceP, destP, flags);
  4130. }, (zipFsD, { subPath: subPathD }) => {
  4131. return fallback(this.baseFs, sourceP, zipFsD, subPathD);
  4132. });
  4133. }, (zipFsS, { subPath: subPathS }) => {
  4134. return this.makeCallSync(destP, () => {
  4135. return fallback(zipFsS, subPathS, this.baseFs, destP);
  4136. }, (zipFsD, { subPath: subPathD }) => {
  4137. if (zipFsS !== zipFsD) {
  4138. return fallback(zipFsS, subPathS, zipFsD, subPathD);
  4139. } else {
  4140. return zipFsS.copyFileSync(subPathS, subPathD, flags);
  4141. }
  4142. });
  4143. });
  4144. }
  4145. async appendFilePromise(p, content, opts) {
  4146. return await this.makeCallPromise(p, async () => {
  4147. return await this.baseFs.appendFilePromise(p, content, opts);
  4148. }, async (zipFs, { subPath }) => {
  4149. return await zipFs.appendFilePromise(subPath, content, opts);
  4150. });
  4151. }
  4152. appendFileSync(p, content, opts) {
  4153. return this.makeCallSync(p, () => {
  4154. return this.baseFs.appendFileSync(p, content, opts);
  4155. }, (zipFs, { subPath }) => {
  4156. return zipFs.appendFileSync(subPath, content, opts);
  4157. });
  4158. }
  4159. async writeFilePromise(p, content, opts) {
  4160. return await this.makeCallPromise(p, async () => {
  4161. return await this.baseFs.writeFilePromise(p, content, opts);
  4162. }, async (zipFs, { subPath }) => {
  4163. return await zipFs.writeFilePromise(subPath, content, opts);
  4164. });
  4165. }
  4166. writeFileSync(p, content, opts) {
  4167. return this.makeCallSync(p, () => {
  4168. return this.baseFs.writeFileSync(p, content, opts);
  4169. }, (zipFs, { subPath }) => {
  4170. return zipFs.writeFileSync(subPath, content, opts);
  4171. });
  4172. }
  4173. async unlinkPromise(p) {
  4174. return await this.makeCallPromise(p, async () => {
  4175. return await this.baseFs.unlinkPromise(p);
  4176. }, async (zipFs, { subPath }) => {
  4177. return await zipFs.unlinkPromise(subPath);
  4178. });
  4179. }
  4180. unlinkSync(p) {
  4181. return this.makeCallSync(p, () => {
  4182. return this.baseFs.unlinkSync(p);
  4183. }, (zipFs, { subPath }) => {
  4184. return zipFs.unlinkSync(subPath);
  4185. });
  4186. }
  4187. async utimesPromise(p, atime, mtime) {
  4188. return await this.makeCallPromise(p, async () => {
  4189. return await this.baseFs.utimesPromise(p, atime, mtime);
  4190. }, async (zipFs, { subPath }) => {
  4191. return await zipFs.utimesPromise(subPath, atime, mtime);
  4192. });
  4193. }
  4194. utimesSync(p, atime, mtime) {
  4195. return this.makeCallSync(p, () => {
  4196. return this.baseFs.utimesSync(p, atime, mtime);
  4197. }, (zipFs, { subPath }) => {
  4198. return zipFs.utimesSync(subPath, atime, mtime);
  4199. });
  4200. }
  4201. async mkdirPromise(p, opts) {
  4202. return await this.makeCallPromise(p, async () => {
  4203. return await this.baseFs.mkdirPromise(p, opts);
  4204. }, async (zipFs, { subPath }) => {
  4205. return await zipFs.mkdirPromise(subPath, opts);
  4206. });
  4207. }
  4208. mkdirSync(p, opts) {
  4209. return this.makeCallSync(p, () => {
  4210. return this.baseFs.mkdirSync(p, opts);
  4211. }, (zipFs, { subPath }) => {
  4212. return zipFs.mkdirSync(subPath, opts);
  4213. });
  4214. }
  4215. async rmdirPromise(p, opts) {
  4216. return await this.makeCallPromise(p, async () => {
  4217. return await this.baseFs.rmdirPromise(p, opts);
  4218. }, async (zipFs, { subPath }) => {
  4219. return await zipFs.rmdirPromise(subPath, opts);
  4220. });
  4221. }
  4222. rmdirSync(p, opts) {
  4223. return this.makeCallSync(p, () => {
  4224. return this.baseFs.rmdirSync(p, opts);
  4225. }, (zipFs, { subPath }) => {
  4226. return zipFs.rmdirSync(subPath, opts);
  4227. });
  4228. }
  4229. async linkPromise(existingP, newP) {
  4230. return await this.makeCallPromise(newP, async () => {
  4231. return await this.baseFs.linkPromise(existingP, newP);
  4232. }, async (zipFs, { subPath }) => {
  4233. return await zipFs.linkPromise(existingP, subPath);
  4234. });
  4235. }
  4236. linkSync(existingP, newP) {
  4237. return this.makeCallSync(newP, () => {
  4238. return this.baseFs.linkSync(existingP, newP);
  4239. }, (zipFs, { subPath }) => {
  4240. return zipFs.linkSync(existingP, subPath);
  4241. });
  4242. }
  4243. async symlinkPromise(target, p, type) {
  4244. return await this.makeCallPromise(p, async () => {
  4245. return await this.baseFs.symlinkPromise(target, p, type);
  4246. }, async (zipFs, { subPath }) => {
  4247. return await zipFs.symlinkPromise(target, subPath);
  4248. });
  4249. }
  4250. symlinkSync(target, p, type) {
  4251. return this.makeCallSync(p, () => {
  4252. return this.baseFs.symlinkSync(target, p, type);
  4253. }, (zipFs, { subPath }) => {
  4254. return zipFs.symlinkSync(target, subPath);
  4255. });
  4256. }
  4257. async readFilePromise(p, encoding) {
  4258. return this.makeCallPromise(p, async () => {
  4259. switch (encoding) {
  4260. case `utf8`:
  4261. return await this.baseFs.readFilePromise(p, encoding);
  4262. default:
  4263. return await this.baseFs.readFilePromise(p, encoding);
  4264. }
  4265. }, async (zipFs, { subPath }) => {
  4266. return await zipFs.readFilePromise(subPath, encoding);
  4267. });
  4268. }
  4269. readFileSync(p, encoding) {
  4270. return this.makeCallSync(p, () => {
  4271. switch (encoding) {
  4272. case `utf8`:
  4273. return this.baseFs.readFileSync(p, encoding);
  4274. default:
  4275. return this.baseFs.readFileSync(p, encoding);
  4276. }
  4277. }, (zipFs, { subPath }) => {
  4278. return zipFs.readFileSync(subPath, encoding);
  4279. });
  4280. }
  4281. async readdirPromise(p, opts) {
  4282. return await this.makeCallPromise(p, async () => {
  4283. return await this.baseFs.readdirPromise(p, opts);
  4284. }, async (zipFs, { subPath }) => {
  4285. return await zipFs.readdirPromise(subPath, opts);
  4286. }, {
  4287. requireSubpath: false
  4288. });
  4289. }
  4290. readdirSync(p, opts) {
  4291. return this.makeCallSync(p, () => {
  4292. return this.baseFs.readdirSync(p, opts);
  4293. }, (zipFs, { subPath }) => {
  4294. return zipFs.readdirSync(subPath, opts);
  4295. }, {
  4296. requireSubpath: false
  4297. });
  4298. }
  4299. async readlinkPromise(p) {
  4300. return await this.makeCallPromise(p, async () => {
  4301. return await this.baseFs.readlinkPromise(p);
  4302. }, async (zipFs, { subPath }) => {
  4303. return await zipFs.readlinkPromise(subPath);
  4304. });
  4305. }
  4306. readlinkSync(p) {
  4307. return this.makeCallSync(p, () => {
  4308. return this.baseFs.readlinkSync(p);
  4309. }, (zipFs, { subPath }) => {
  4310. return zipFs.readlinkSync(subPath);
  4311. });
  4312. }
  4313. async truncatePromise(p, len) {
  4314. return await this.makeCallPromise(p, async () => {
  4315. return await this.baseFs.truncatePromise(p, len);
  4316. }, async (zipFs, { subPath }) => {
  4317. return await zipFs.truncatePromise(subPath, len);
  4318. });
  4319. }
  4320. truncateSync(p, len) {
  4321. return this.makeCallSync(p, () => {
  4322. return this.baseFs.truncateSync(p, len);
  4323. }, (zipFs, { subPath }) => {
  4324. return zipFs.truncateSync(subPath, len);
  4325. });
  4326. }
  4327. async ftruncatePromise(fd, len) {
  4328. if ((fd & ZIP_MASK) !== ZIP_MAGIC)
  4329. return this.baseFs.ftruncatePromise(fd, len);
  4330. const entry = this.fdMap.get(fd);
  4331. if (typeof entry === `undefined`)
  4332. throw EBADF(`ftruncate`);
  4333. const [zipFs, realFd] = entry;
  4334. return zipFs.ftruncatePromise(realFd, len);
  4335. }
  4336. ftruncateSync(fd, len) {
  4337. if ((fd & ZIP_MASK) !== ZIP_MAGIC)
  4338. return this.baseFs.ftruncateSync(fd, len);
  4339. const entry = this.fdMap.get(fd);
  4340. if (typeof entry === `undefined`)
  4341. throw EBADF(`ftruncateSync`);
  4342. const [zipFs, realFd] = entry;
  4343. return zipFs.ftruncateSync(realFd, len);
  4344. }
  4345. watch(p, a, b) {
  4346. return this.makeCallSync(p, () => {
  4347. return this.baseFs.watch(
  4348. p,
  4349. a,
  4350. b
  4351. );
  4352. }, (zipFs, { subPath }) => {
  4353. return zipFs.watch(
  4354. subPath,
  4355. a,
  4356. b
  4357. );
  4358. });
  4359. }
  4360. watchFile(p, a, b) {
  4361. return this.makeCallSync(p, () => {
  4362. return this.baseFs.watchFile(
  4363. p,
  4364. a,
  4365. b
  4366. );
  4367. }, () => {
  4368. return watchFile(this, p, a, b);
  4369. });
  4370. }
  4371. unwatchFile(p, cb) {
  4372. return this.makeCallSync(p, () => {
  4373. return this.baseFs.unwatchFile(p, cb);
  4374. }, () => {
  4375. return unwatchFile(this, p, cb);
  4376. });
  4377. }
  4378. async makeCallPromise(p, discard, accept, { requireSubpath = true } = {}) {
  4379. if (typeof p !== `string`)
  4380. return await discard();
  4381. const normalizedP = this.resolve(p);
  4382. const zipInfo = this.findZip(normalizedP);
  4383. if (!zipInfo)
  4384. return await discard();
  4385. if (requireSubpath && zipInfo.subPath === `/`)
  4386. return await discard();
  4387. return await this.getZipPromise(zipInfo.archivePath, async (zipFs) => await accept(zipFs, zipInfo));
  4388. }
  4389. makeCallSync(p, discard, accept, { requireSubpath = true } = {}) {
  4390. if (typeof p !== `string`)
  4391. return discard();
  4392. const normalizedP = this.resolve(p);
  4393. const zipInfo = this.findZip(normalizedP);
  4394. if (!zipInfo)
  4395. return discard();
  4396. if (requireSubpath && zipInfo.subPath === `/`)
  4397. return discard();
  4398. return this.getZipSync(zipInfo.archivePath, (zipFs) => accept(zipFs, zipInfo));
  4399. }
  4400. findZip(p) {
  4401. if (this.filter && !this.filter.test(p))
  4402. return null;
  4403. let filePath = ``;
  4404. while (true) {
  4405. const pathPartWithArchive = p.substring(filePath.length);
  4406. let archivePart;
  4407. if (!this.fileExtensions) {
  4408. archivePart = getArchivePart(pathPartWithArchive, `.zip`);
  4409. } else {
  4410. for (const ext of this.fileExtensions) {
  4411. archivePart = getArchivePart(pathPartWithArchive, ext);
  4412. if (archivePart) {
  4413. break;
  4414. }
  4415. }
  4416. }
  4417. if (!archivePart)
  4418. return null;
  4419. filePath = this.pathUtils.join(filePath, archivePart);
  4420. if (this.isZip.has(filePath) === false) {
  4421. if (this.notZip.has(filePath))
  4422. continue;
  4423. try {
  4424. if (!this.baseFs.lstatSync(filePath).isFile()) {
  4425. this.notZip.add(filePath);
  4426. continue;
  4427. }
  4428. } catch {
  4429. return null;
  4430. }
  4431. this.isZip.add(filePath);
  4432. }
  4433. return {
  4434. archivePath: filePath,
  4435. subPath: this.pathUtils.join(PortablePath.root, p.substring(filePath.length))
  4436. };
  4437. }
  4438. }
  4439. limitOpenFiles(max) {
  4440. if (this.zipInstances === null)
  4441. return;
  4442. const now = Date.now();
  4443. let nextExpiresAt = now + this.maxAge;
  4444. let closeCount = max === null ? 0 : this.zipInstances.size - max;
  4445. for (const [path, { zipFs, expiresAt, refCount }] of this.zipInstances.entries()) {
  4446. if (refCount !== 0 || zipFs.hasOpenFileHandles()) {
  4447. continue;
  4448. } else if (now >= expiresAt) {
  4449. zipFs.saveAndClose();
  4450. this.zipInstances.delete(path);
  4451. closeCount -= 1;
  4452. continue;
  4453. } else if (max === null || closeCount <= 0) {
  4454. nextExpiresAt = expiresAt;
  4455. break;
  4456. }
  4457. zipFs.saveAndClose();
  4458. this.zipInstances.delete(path);
  4459. closeCount -= 1;
  4460. }
  4461. if (this.limitOpenFilesTimeout === null && (max === null && this.zipInstances.size > 0 || max !== null)) {
  4462. this.limitOpenFilesTimeout = setTimeout(() => {
  4463. this.limitOpenFilesTimeout = null;
  4464. this.limitOpenFiles(null);
  4465. }, nextExpiresAt - now).unref();
  4466. }
  4467. }
  4468. async getZipPromise(p, accept) {
  4469. const getZipOptions = async () => ({
  4470. baseFs: this.baseFs,
  4471. libzip: this.libzip,
  4472. readOnly: this.readOnlyArchives,
  4473. stats: await this.baseFs.statPromise(p)
  4474. });
  4475. if (this.zipInstances) {
  4476. let cachedZipFs = this.zipInstances.get(p);
  4477. if (!cachedZipFs) {
  4478. const zipOptions = await getZipOptions();
  4479. cachedZipFs = this.zipInstances.get(p);
  4480. if (!cachedZipFs) {
  4481. cachedZipFs = {
  4482. zipFs: new ZipFS(p, zipOptions),
  4483. expiresAt: 0,
  4484. refCount: 0
  4485. };
  4486. }
  4487. }
  4488. this.zipInstances.delete(p);
  4489. this.limitOpenFiles(this.maxOpenFiles - 1);
  4490. this.zipInstances.set(p, cachedZipFs);
  4491. cachedZipFs.expiresAt = Date.now() + this.maxAge;
  4492. cachedZipFs.refCount += 1;
  4493. try {
  4494. return await accept(cachedZipFs.zipFs);
  4495. } finally {
  4496. cachedZipFs.refCount -= 1;
  4497. }
  4498. } else {
  4499. const zipFs = new ZipFS(p, await getZipOptions());
  4500. try {
  4501. return await accept(zipFs);
  4502. } finally {
  4503. zipFs.saveAndClose();
  4504. }
  4505. }
  4506. }
  4507. getZipSync(p, accept) {
  4508. const getZipOptions = () => ({
  4509. baseFs: this.baseFs,
  4510. libzip: this.libzip,
  4511. readOnly: this.readOnlyArchives,
  4512. stats: this.baseFs.statSync(p)
  4513. });
  4514. if (this.zipInstances) {
  4515. let cachedZipFs = this.zipInstances.get(p);
  4516. if (!cachedZipFs) {
  4517. cachedZipFs = {
  4518. zipFs: new ZipFS(p, getZipOptions()),
  4519. expiresAt: 0,
  4520. refCount: 0
  4521. };
  4522. }
  4523. this.zipInstances.delete(p);
  4524. this.limitOpenFiles(this.maxOpenFiles - 1);
  4525. this.zipInstances.set(p, cachedZipFs);
  4526. cachedZipFs.expiresAt = Date.now() + this.maxAge;
  4527. return accept(cachedZipFs.zipFs);
  4528. } else {
  4529. const zipFs = new ZipFS(p, getZipOptions());
  4530. try {
  4531. return accept(zipFs);
  4532. } finally {
  4533. zipFs.saveAndClose();
  4534. }
  4535. }
  4536. }
  4537. }
  4538. class NodePathFS extends ProxiedFS {
  4539. constructor(baseFs) {
  4540. super(npath);
  4541. this.baseFs = baseFs;
  4542. }
  4543. mapFromBase(path) {
  4544. return path;
  4545. }
  4546. mapToBase(path) {
  4547. if (typeof path === `string`)
  4548. return path;
  4549. if (path instanceof url.URL)
  4550. return url.fileURLToPath(path);
  4551. if (Buffer.isBuffer(path)) {
  4552. const str = path.toString();
  4553. if (Buffer.byteLength(str) !== path.byteLength)
  4554. throw new Error(`Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942`);
  4555. return str;
  4556. }
  4557. throw new Error(`Unsupported path type: ${nodeUtils.inspect(path)}`);
  4558. }
  4559. }
  4560. var _a, _b, _c, _d;
  4561. const kBaseFs = Symbol(`kBaseFs`);
  4562. const kFd = Symbol(`kFd`);
  4563. const kClosePromise = Symbol(`kClosePromise`);
  4564. const kCloseResolve = Symbol(`kCloseResolve`);
  4565. const kCloseReject = Symbol(`kCloseReject`);
  4566. const kRefs = Symbol(`kRefs`);
  4567. const kRef = Symbol(`kRef`);
  4568. const kUnref = Symbol(`kUnref`);
  4569. class FileHandle {
  4570. constructor(fd, baseFs) {
  4571. this[_a] = 1;
  4572. this[_b] = void 0;
  4573. this[_c] = void 0;
  4574. this[_d] = void 0;
  4575. this[kBaseFs] = baseFs;
  4576. this[kFd] = fd;
  4577. }
  4578. get fd() {
  4579. return this[kFd];
  4580. }
  4581. async appendFile(data, options) {
  4582. var _a2;
  4583. try {
  4584. this[kRef](this.appendFile);
  4585. const encoding = (_a2 = typeof options === `string` ? options : options == null ? void 0 : options.encoding) != null ? _a2 : void 0;
  4586. return await this[kBaseFs].appendFilePromise(this.fd, data, encoding ? { encoding } : void 0);
  4587. } finally {
  4588. this[kUnref]();
  4589. }
  4590. }
  4591. async chown(uid, gid) {
  4592. try {
  4593. this[kRef](this.chown);
  4594. return await this[kBaseFs].fchownPromise(this.fd, uid, gid);
  4595. } finally {
  4596. this[kUnref]();
  4597. }
  4598. }
  4599. async chmod(mode) {
  4600. try {
  4601. this[kRef](this.chmod);
  4602. return await this[kBaseFs].fchmodPromise(this.fd, mode);
  4603. } finally {
  4604. this[kUnref]();
  4605. }
  4606. }
  4607. createReadStream(options) {
  4608. return this[kBaseFs].createReadStream(null, { ...options, fd: this.fd });
  4609. }
  4610. createWriteStream(options) {
  4611. return this[kBaseFs].createWriteStream(null, { ...options, fd: this.fd });
  4612. }
  4613. datasync() {
  4614. throw new Error(`Method not implemented.`);
  4615. }
  4616. sync() {
  4617. throw new Error(`Method not implemented.`);
  4618. }
  4619. async read(bufferOrOptions, offset, length, position) {
  4620. var _a2, _b2, _c2;
  4621. try {
  4622. this[kRef](this.read);
  4623. let buffer;
  4624. if (!Buffer.isBuffer(bufferOrOptions)) {
  4625. bufferOrOptions != null ? bufferOrOptions : bufferOrOptions = {};
  4626. buffer = (_a2 = bufferOrOptions.buffer) != null ? _a2 : Buffer.alloc(16384);
  4627. offset = bufferOrOptions.offset || 0;
  4628. length = (_b2 = bufferOrOptions.length) != null ? _b2 : buffer.byteLength;
  4629. position = (_c2 = bufferOrOptions.position) != null ? _c2 : null;
  4630. } else {
  4631. buffer = bufferOrOptions;
  4632. }
  4633. offset != null ? offset : offset = 0;
  4634. length != null ? length : length = 0;
  4635. if (length === 0) {
  4636. return {
  4637. bytesRead: length,
  4638. buffer
  4639. };
  4640. }
  4641. const bytesRead = await this[kBaseFs].readPromise(this.fd, buffer, offset, length, position);
  4642. return {
  4643. bytesRead,
  4644. buffer
  4645. };
  4646. } finally {
  4647. this[kUnref]();
  4648. }
  4649. }
  4650. async readFile(options) {
  4651. var _a2;
  4652. try {
  4653. this[kRef](this.readFile);
  4654. const encoding = (_a2 = typeof options === `string` ? options : options == null ? void 0 : options.encoding) != null ? _a2 : void 0;
  4655. return await this[kBaseFs].readFilePromise(this.fd, encoding);
  4656. } finally {
  4657. this[kUnref]();
  4658. }
  4659. }
  4660. readLines(options) {
  4661. return readline.createInterface({
  4662. input: this.createReadStream(options),
  4663. crlfDelay: Infinity
  4664. });
  4665. }
  4666. async stat(opts) {
  4667. try {
  4668. this[kRef](this.stat);
  4669. return await this[kBaseFs].fstatPromise(this.fd, opts);
  4670. } finally {
  4671. this[kUnref]();
  4672. }
  4673. }
  4674. async truncate(len) {
  4675. try {
  4676. this[kRef](this.truncate);
  4677. return await this[kBaseFs].ftruncatePromise(this.fd, len);
  4678. } finally {
  4679. this[kUnref]();
  4680. }
  4681. }
  4682. utimes(atime, mtime) {
  4683. throw new Error(`Method not implemented.`);
  4684. }
  4685. async writeFile(data, options) {
  4686. var _a2;
  4687. try {
  4688. this[kRef](this.writeFile);
  4689. const encoding = (_a2 = typeof options === `string` ? options : options == null ? void 0 : options.encoding) != null ? _a2 : void 0;
  4690. await this[kBaseFs].writeFilePromise(this.fd, data, encoding);
  4691. } finally {
  4692. this[kUnref]();
  4693. }
  4694. }
  4695. async write(...args) {
  4696. try {
  4697. this[kRef](this.write);
  4698. if (ArrayBuffer.isView(args[0])) {
  4699. const [buffer, offset, length, position] = args;
  4700. const bytesWritten = await this[kBaseFs].writePromise(this.fd, buffer, offset != null ? offset : void 0, length != null ? length : void 0, position != null ? position : void 0);
  4701. return { bytesWritten, buffer };
  4702. } else {
  4703. const [data, position, encoding] = args;
  4704. const bytesWritten = await this[kBaseFs].writePromise(this.fd, data, position, encoding);
  4705. return { bytesWritten, buffer: data };
  4706. }
  4707. } finally {
  4708. this[kUnref]();
  4709. }
  4710. }
  4711. async writev(buffers, position) {
  4712. try {
  4713. this[kRef](this.writev);
  4714. let bytesWritten = 0;
  4715. if (typeof position !== `undefined`) {
  4716. for (const buffer of buffers) {
  4717. const writeResult = await this.write(buffer, void 0, void 0, position);
  4718. bytesWritten += writeResult.bytesWritten;
  4719. position += writeResult.bytesWritten;
  4720. }
  4721. } else {
  4722. for (const buffer of buffers) {
  4723. const writeResult = await this.write(buffer);
  4724. bytesWritten += writeResult.bytesWritten;
  4725. }
  4726. }
  4727. return {
  4728. buffers,
  4729. bytesWritten
  4730. };
  4731. } finally {
  4732. this[kUnref]();
  4733. }
  4734. }
  4735. readv(buffers, position) {
  4736. throw new Error(`Method not implemented.`);
  4737. }
  4738. close() {
  4739. if (this[kFd] === -1)
  4740. return Promise.resolve();
  4741. if (this[kClosePromise])
  4742. return this[kClosePromise];
  4743. this[kRefs]--;
  4744. if (this[kRefs] === 0) {
  4745. const fd = this[kFd];
  4746. this[kFd] = -1;
  4747. this[kClosePromise] = this[kBaseFs].closePromise(fd).finally(() => {
  4748. this[kClosePromise] = void 0;
  4749. });
  4750. } else {
  4751. this[kClosePromise] = new Promise((resolve, reject) => {
  4752. this[kCloseResolve] = resolve;
  4753. this[kCloseReject] = reject;
  4754. }).finally(() => {
  4755. this[kClosePromise] = void 0;
  4756. this[kCloseReject] = void 0;
  4757. this[kCloseResolve] = void 0;
  4758. });
  4759. }
  4760. return this[kClosePromise];
  4761. }
  4762. [(_a = kRefs, _b = kClosePromise, _c = kCloseResolve, _d = kCloseReject, kRef)](caller) {
  4763. if (this[kFd] === -1) {
  4764. const err = new Error(`file closed`);
  4765. err.code = `EBADF`;
  4766. err.syscall = caller.name;
  4767. throw err;
  4768. }
  4769. this[kRefs]++;
  4770. }
  4771. [kUnref]() {
  4772. this[kRefs]--;
  4773. if (this[kRefs] === 0) {
  4774. const fd = this[kFd];
  4775. this[kFd] = -1;
  4776. this[kBaseFs].closePromise(fd).then(this[kCloseResolve], this[kCloseReject]);
  4777. }
  4778. }
  4779. }
  4780. const SYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([
  4781. `accessSync`,
  4782. `appendFileSync`,
  4783. `createReadStream`,
  4784. `createWriteStream`,
  4785. `chmodSync`,
  4786. `fchmodSync`,
  4787. `chownSync`,
  4788. `fchownSync`,
  4789. `closeSync`,
  4790. `copyFileSync`,
  4791. `linkSync`,
  4792. `lstatSync`,
  4793. `fstatSync`,
  4794. `lutimesSync`,
  4795. `mkdirSync`,
  4796. `openSync`,
  4797. `opendirSync`,
  4798. `readlinkSync`,
  4799. `readFileSync`,
  4800. `readdirSync`,
  4801. `readlinkSync`,
  4802. `realpathSync`,
  4803. `renameSync`,
  4804. `rmdirSync`,
  4805. `statSync`,
  4806. `symlinkSync`,
  4807. `truncateSync`,
  4808. `ftruncateSync`,
  4809. `unlinkSync`,
  4810. `unwatchFile`,
  4811. `utimesSync`,
  4812. `watch`,
  4813. `watchFile`,
  4814. `writeFileSync`,
  4815. `writeSync`
  4816. ]);
  4817. const ASYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([
  4818. `accessPromise`,
  4819. `appendFilePromise`,
  4820. `fchmodPromise`,
  4821. `chmodPromise`,
  4822. `fchownPromise`,
  4823. `chownPromise`,
  4824. `closePromise`,
  4825. `copyFilePromise`,
  4826. `linkPromise`,
  4827. `fstatPromise`,
  4828. `lstatPromise`,
  4829. `lutimesPromise`,
  4830. `mkdirPromise`,
  4831. `openPromise`,
  4832. `opendirPromise`,
  4833. `readdirPromise`,
  4834. `realpathPromise`,
  4835. `readFilePromise`,
  4836. `readdirPromise`,
  4837. `readlinkPromise`,
  4838. `renamePromise`,
  4839. `rmdirPromise`,
  4840. `statPromise`,
  4841. `symlinkPromise`,
  4842. `truncatePromise`,
  4843. `ftruncatePromise`,
  4844. `unlinkPromise`,
  4845. `utimesPromise`,
  4846. `writeFilePromise`,
  4847. `writeSync`
  4848. ]);
  4849. function patchFs(patchedFs, fakeFs) {
  4850. fakeFs = new NodePathFS(fakeFs);
  4851. const setupFn = (target, name, replacement) => {
  4852. const orig = target[name];
  4853. target[name] = replacement;
  4854. if (typeof (orig == null ? void 0 : orig[nodeUtils.promisify.custom]) !== `undefined`) {
  4855. replacement[nodeUtils.promisify.custom] = orig[nodeUtils.promisify.custom];
  4856. }
  4857. };
  4858. {
  4859. setupFn(patchedFs, `exists`, (p, ...args) => {
  4860. const hasCallback = typeof args[args.length - 1] === `function`;
  4861. const callback = hasCallback ? args.pop() : () => {
  4862. };
  4863. process.nextTick(() => {
  4864. fakeFs.existsPromise(p).then((exists) => {
  4865. callback(exists);
  4866. }, () => {
  4867. callback(false);
  4868. });
  4869. });
  4870. });
  4871. setupFn(patchedFs, `read`, (...args) => {
  4872. let [fd, buffer, offset, length, position, callback] = args;
  4873. if (args.length <= 3) {
  4874. let options = {};
  4875. if (args.length < 3) {
  4876. callback = args[1];
  4877. } else {
  4878. options = args[1];
  4879. callback = args[2];
  4880. }
  4881. ({
  4882. buffer = Buffer.alloc(16384),
  4883. offset = 0,
  4884. length = buffer.byteLength,
  4885. position
  4886. } = options);
  4887. }
  4888. if (offset == null)
  4889. offset = 0;
  4890. length |= 0;
  4891. if (length === 0) {
  4892. process.nextTick(() => {
  4893. callback(null, 0, buffer);
  4894. });
  4895. return;
  4896. }
  4897. if (position == null)
  4898. position = -1;
  4899. process.nextTick(() => {
  4900. fakeFs.readPromise(fd, buffer, offset, length, position).then((bytesRead) => {
  4901. callback(null, bytesRead, buffer);
  4902. }, (error) => {
  4903. callback(error, 0, buffer);
  4904. });
  4905. });
  4906. });
  4907. for (const fnName of ASYNC_IMPLEMENTATIONS) {
  4908. const origName = fnName.replace(/Promise$/, ``);
  4909. if (typeof patchedFs[origName] === `undefined`)
  4910. continue;
  4911. const fakeImpl = fakeFs[fnName];
  4912. if (typeof fakeImpl === `undefined`)
  4913. continue;
  4914. const wrapper = (...args) => {
  4915. const hasCallback = typeof args[args.length - 1] === `function`;
  4916. const callback = hasCallback ? args.pop() : () => {
  4917. };
  4918. process.nextTick(() => {
  4919. fakeImpl.apply(fakeFs, args).then((result) => {
  4920. callback(null, result);
  4921. }, (error) => {
  4922. callback(error);
  4923. });
  4924. });
  4925. };
  4926. setupFn(patchedFs, origName, wrapper);
  4927. }
  4928. patchedFs.realpath.native = patchedFs.realpath;
  4929. }
  4930. {
  4931. setupFn(patchedFs, `existsSync`, (p) => {
  4932. try {
  4933. return fakeFs.existsSync(p);
  4934. } catch (error) {
  4935. return false;
  4936. }
  4937. });
  4938. setupFn(patchedFs, `readSync`, (...args) => {
  4939. let [fd, buffer, offset, length, position] = args;
  4940. if (args.length <= 3) {
  4941. const options = args[2] || {};
  4942. ({ offset = 0, length = buffer.byteLength, position } = options);
  4943. }
  4944. if (offset == null)
  4945. offset = 0;
  4946. length |= 0;
  4947. if (length === 0)
  4948. return 0;
  4949. if (position == null)
  4950. position = -1;
  4951. return fakeFs.readSync(fd, buffer, offset, length, position);
  4952. });
  4953. for (const fnName of SYNC_IMPLEMENTATIONS) {
  4954. const origName = fnName;
  4955. if (typeof patchedFs[origName] === `undefined`)
  4956. continue;
  4957. const fakeImpl = fakeFs[fnName];
  4958. if (typeof fakeImpl === `undefined`)
  4959. continue;
  4960. setupFn(patchedFs, origName, fakeImpl.bind(fakeFs));
  4961. }
  4962. patchedFs.realpathSync.native = patchedFs.realpathSync;
  4963. }
  4964. {
  4965. const origEmitWarning = process.emitWarning;
  4966. process.emitWarning = () => {
  4967. };
  4968. let patchedFsPromises;
  4969. try {
  4970. patchedFsPromises = patchedFs.promises;
  4971. } finally {
  4972. process.emitWarning = origEmitWarning;
  4973. }
  4974. if (typeof patchedFsPromises !== `undefined`) {
  4975. for (const fnName of ASYNC_IMPLEMENTATIONS) {
  4976. const origName = fnName.replace(/Promise$/, ``);
  4977. if (typeof patchedFsPromises[origName] === `undefined`)
  4978. continue;
  4979. const fakeImpl = fakeFs[fnName];
  4980. if (typeof fakeImpl === `undefined`)
  4981. continue;
  4982. if (fnName === `open`)
  4983. continue;
  4984. setupFn(patchedFsPromises, origName, (pathLike, ...args) => {
  4985. if (pathLike instanceof FileHandle) {
  4986. return pathLike[origName].apply(pathLike, args);
  4987. } else {
  4988. return fakeImpl.call(fakeFs, pathLike, ...args);
  4989. }
  4990. });
  4991. }
  4992. setupFn(patchedFsPromises, `open`, async (...args) => {
  4993. const fd = await fakeFs.openPromise(...args);
  4994. return new FileHandle(fd, fakeFs);
  4995. });
  4996. }
  4997. }
  4998. {
  4999. patchedFs.read[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => {
  5000. const res = fakeFs.readPromise(fd, buffer, ...args);
  5001. return { bytesRead: await res, buffer };
  5002. };
  5003. patchedFs.write[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => {
  5004. const res = fakeFs.writePromise(fd, buffer, ...args);
  5005. return { bytesWritten: await res, buffer };
  5006. };
  5007. }
  5008. }
  5009. var libzipSync = {exports: {}};
  5010. (function (module, exports) {
  5011. var frozenFs = Object.assign({}, fs__default.default);
  5012. var createModule = function() {
  5013. var _scriptDir = void 0;
  5014. if (typeof __filename !== "undefined")
  5015. _scriptDir = _scriptDir || __filename;
  5016. return function(createModule2) {
  5017. createModule2 = createModule2 || {};
  5018. var Module = typeof createModule2 !== "undefined" ? createModule2 : {};
  5019. var readyPromiseResolve, readyPromiseReject;
  5020. Module["ready"] = new Promise(function(resolve, reject) {
  5021. readyPromiseResolve = resolve;
  5022. readyPromiseReject = reject;
  5023. });
  5024. var moduleOverrides = {};
  5025. var key;
  5026. for (key in Module) {
  5027. if (Module.hasOwnProperty(key)) {
  5028. moduleOverrides[key] = Module[key];
  5029. }
  5030. }
  5031. var scriptDirectory = "";
  5032. function locateFile(path) {
  5033. if (Module["locateFile"]) {
  5034. return Module["locateFile"](path, scriptDirectory);
  5035. }
  5036. return scriptDirectory + path;
  5037. }
  5038. var read_, readBinary;
  5039. var nodeFS;
  5040. var nodePath;
  5041. {
  5042. {
  5043. scriptDirectory = __dirname + "/";
  5044. }
  5045. read_ = function shell_read(filename, binary) {
  5046. var ret = tryParseAsDataURI(filename);
  5047. if (ret) {
  5048. return binary ? ret : ret.toString();
  5049. }
  5050. if (!nodeFS)
  5051. nodeFS = frozenFs;
  5052. if (!nodePath)
  5053. nodePath = path__default.default;
  5054. filename = nodePath["normalize"](filename);
  5055. return nodeFS["readFileSync"](filename, binary ? null : "utf8");
  5056. };
  5057. readBinary = function readBinary2(filename) {
  5058. var ret = read_(filename, true);
  5059. if (!ret.buffer) {
  5060. ret = new Uint8Array(ret);
  5061. }
  5062. assert(ret.buffer);
  5063. return ret;
  5064. };
  5065. if (process["argv"].length > 1) {
  5066. process["argv"][1].replace(/\\/g, "/");
  5067. }
  5068. process["argv"].slice(2);
  5069. Module["inspect"] = function() {
  5070. return "[Emscripten Module object]";
  5071. };
  5072. }
  5073. var out = Module["print"] || console.log.bind(console);
  5074. var err = Module["printErr"] || console.warn.bind(console);
  5075. for (key in moduleOverrides) {
  5076. if (moduleOverrides.hasOwnProperty(key)) {
  5077. Module[key] = moduleOverrides[key];
  5078. }
  5079. }
  5080. moduleOverrides = null;
  5081. if (Module["arguments"])
  5082. ;
  5083. if (Module["thisProgram"])
  5084. ;
  5085. if (Module["quit"])
  5086. ;
  5087. var STACK_ALIGN = 16;
  5088. function alignMemory(size, factor) {
  5089. if (!factor)
  5090. factor = STACK_ALIGN;
  5091. return Math.ceil(size / factor) * factor;
  5092. }
  5093. var wasmBinary;
  5094. if (Module["wasmBinary"])
  5095. wasmBinary = Module["wasmBinary"];
  5096. Module["noExitRuntime"] || true;
  5097. if (typeof WebAssembly !== "object") {
  5098. abort("no native wasm support detected");
  5099. }
  5100. function getValue(ptr, type, noSafe) {
  5101. type = type || "i8";
  5102. if (type.charAt(type.length - 1) === "*")
  5103. type = "i32";
  5104. switch (type) {
  5105. case "i1":
  5106. return HEAP8[ptr >> 0];
  5107. case "i8":
  5108. return HEAP8[ptr >> 0];
  5109. case "i16":
  5110. return HEAP16[ptr >> 1];
  5111. case "i32":
  5112. return HEAP32[ptr >> 2];
  5113. case "i64":
  5114. return HEAP32[ptr >> 2];
  5115. case "float":
  5116. return HEAPF32[ptr >> 2];
  5117. case "double":
  5118. return HEAPF64[ptr >> 3];
  5119. default:
  5120. abort("invalid type for getValue: " + type);
  5121. }
  5122. return null;
  5123. }
  5124. var wasmMemory;
  5125. var ABORT = false;
  5126. function assert(condition, text) {
  5127. if (!condition) {
  5128. abort("Assertion failed: " + text);
  5129. }
  5130. }
  5131. function getCFunc(ident) {
  5132. var func = Module["_" + ident];
  5133. assert(
  5134. func,
  5135. "Cannot call unknown function " + ident + ", make sure it is exported"
  5136. );
  5137. return func;
  5138. }
  5139. function ccall(ident, returnType, argTypes, args, opts) {
  5140. var toC = {
  5141. string: function(str) {
  5142. var ret2 = 0;
  5143. if (str !== null && str !== void 0 && str !== 0) {
  5144. var len = (str.length << 2) + 1;
  5145. ret2 = stackAlloc(len);
  5146. stringToUTF8(str, ret2, len);
  5147. }
  5148. return ret2;
  5149. },
  5150. array: function(arr) {
  5151. var ret2 = stackAlloc(arr.length);
  5152. writeArrayToMemory(arr, ret2);
  5153. return ret2;
  5154. }
  5155. };
  5156. function convertReturnValue(ret2) {
  5157. if (returnType === "string")
  5158. return UTF8ToString(ret2);
  5159. if (returnType === "boolean")
  5160. return Boolean(ret2);
  5161. return ret2;
  5162. }
  5163. var func = getCFunc(ident);
  5164. var cArgs = [];
  5165. var stack = 0;
  5166. if (args) {
  5167. for (var i = 0; i < args.length; i++) {
  5168. var converter = toC[argTypes[i]];
  5169. if (converter) {
  5170. if (stack === 0)
  5171. stack = stackSave();
  5172. cArgs[i] = converter(args[i]);
  5173. } else {
  5174. cArgs[i] = args[i];
  5175. }
  5176. }
  5177. }
  5178. var ret = func.apply(null, cArgs);
  5179. ret = convertReturnValue(ret);
  5180. if (stack !== 0)
  5181. stackRestore(stack);
  5182. return ret;
  5183. }
  5184. function cwrap(ident, returnType, argTypes, opts) {
  5185. argTypes = argTypes || [];
  5186. var numericArgs = argTypes.every(function(type) {
  5187. return type === "number";
  5188. });
  5189. var numericRet = returnType !== "string";
  5190. if (numericRet && numericArgs && !opts) {
  5191. return getCFunc(ident);
  5192. }
  5193. return function() {
  5194. return ccall(ident, returnType, argTypes, arguments);
  5195. };
  5196. }
  5197. var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : void 0;
  5198. function UTF8ArrayToString(heap, idx, maxBytesToRead) {
  5199. var endIdx = idx + maxBytesToRead;
  5200. var endPtr = idx;
  5201. while (heap[endPtr] && !(endPtr >= endIdx))
  5202. ++endPtr;
  5203. if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) {
  5204. return UTF8Decoder.decode(heap.subarray(idx, endPtr));
  5205. } else {
  5206. var str = "";
  5207. while (idx < endPtr) {
  5208. var u0 = heap[idx++];
  5209. if (!(u0 & 128)) {
  5210. str += String.fromCharCode(u0);
  5211. continue;
  5212. }
  5213. var u1 = heap[idx++] & 63;
  5214. if ((u0 & 224) == 192) {
  5215. str += String.fromCharCode((u0 & 31) << 6 | u1);
  5216. continue;
  5217. }
  5218. var u2 = heap[idx++] & 63;
  5219. if ((u0 & 240) == 224) {
  5220. u0 = (u0 & 15) << 12 | u1 << 6 | u2;
  5221. } else {
  5222. u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63;
  5223. }
  5224. if (u0 < 65536) {
  5225. str += String.fromCharCode(u0);
  5226. } else {
  5227. var ch = u0 - 65536;
  5228. str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
  5229. }
  5230. }
  5231. }
  5232. return str;
  5233. }
  5234. function UTF8ToString(ptr, maxBytesToRead) {
  5235. return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";
  5236. }
  5237. function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
  5238. if (!(maxBytesToWrite > 0))
  5239. return 0;
  5240. var startIdx = outIdx;
  5241. var endIdx = outIdx + maxBytesToWrite - 1;
  5242. for (var i = 0; i < str.length; ++i) {
  5243. var u = str.charCodeAt(i);
  5244. if (u >= 55296 && u <= 57343) {
  5245. var u1 = str.charCodeAt(++i);
  5246. u = 65536 + ((u & 1023) << 10) | u1 & 1023;
  5247. }
  5248. if (u <= 127) {
  5249. if (outIdx >= endIdx)
  5250. break;
  5251. heap[outIdx++] = u;
  5252. } else if (u <= 2047) {
  5253. if (outIdx + 1 >= endIdx)
  5254. break;
  5255. heap[outIdx++] = 192 | u >> 6;
  5256. heap[outIdx++] = 128 | u & 63;
  5257. } else if (u <= 65535) {
  5258. if (outIdx + 2 >= endIdx)
  5259. break;
  5260. heap[outIdx++] = 224 | u >> 12;
  5261. heap[outIdx++] = 128 | u >> 6 & 63;
  5262. heap[outIdx++] = 128 | u & 63;
  5263. } else {
  5264. if (outIdx + 3 >= endIdx)
  5265. break;
  5266. heap[outIdx++] = 240 | u >> 18;
  5267. heap[outIdx++] = 128 | u >> 12 & 63;
  5268. heap[outIdx++] = 128 | u >> 6 & 63;
  5269. heap[outIdx++] = 128 | u & 63;
  5270. }
  5271. }
  5272. heap[outIdx] = 0;
  5273. return outIdx - startIdx;
  5274. }
  5275. function stringToUTF8(str, outPtr, maxBytesToWrite) {
  5276. return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
  5277. }
  5278. function lengthBytesUTF8(str) {
  5279. var len = 0;
  5280. for (var i = 0; i < str.length; ++i) {
  5281. var u = str.charCodeAt(i);
  5282. if (u >= 55296 && u <= 57343)
  5283. u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023;
  5284. if (u <= 127)
  5285. ++len;
  5286. else if (u <= 2047)
  5287. len += 2;
  5288. else if (u <= 65535)
  5289. len += 3;
  5290. else
  5291. len += 4;
  5292. }
  5293. return len;
  5294. }
  5295. function allocateUTF8(str) {
  5296. var size = lengthBytesUTF8(str) + 1;
  5297. var ret = _malloc(size);
  5298. if (ret)
  5299. stringToUTF8Array(str, HEAP8, ret, size);
  5300. return ret;
  5301. }
  5302. function writeArrayToMemory(array, buffer2) {
  5303. HEAP8.set(array, buffer2);
  5304. }
  5305. function alignUp(x, multiple) {
  5306. if (x % multiple > 0) {
  5307. x += multiple - x % multiple;
  5308. }
  5309. return x;
  5310. }
  5311. var buffer, HEAP8, HEAPU8, HEAP16, HEAP32, HEAPF32, HEAPF64;
  5312. function updateGlobalBufferAndViews(buf) {
  5313. buffer = buf;
  5314. Module["HEAP8"] = HEAP8 = new Int8Array(buf);
  5315. Module["HEAP16"] = HEAP16 = new Int16Array(buf);
  5316. Module["HEAP32"] = HEAP32 = new Int32Array(buf);
  5317. Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf);
  5318. Module["HEAPU16"] = new Uint16Array(buf);
  5319. Module["HEAPU32"] = new Uint32Array(buf);
  5320. Module["HEAPF32"] = HEAPF32 = new Float32Array(buf);
  5321. Module["HEAPF64"] = HEAPF64 = new Float64Array(buf);
  5322. }
  5323. Module["INITIAL_MEMORY"] || 16777216;
  5324. var wasmTable;
  5325. var __ATPRERUN__ = [];
  5326. var __ATINIT__ = [];
  5327. var __ATPOSTRUN__ = [];
  5328. function preRun() {
  5329. if (Module["preRun"]) {
  5330. if (typeof Module["preRun"] == "function")
  5331. Module["preRun"] = [Module["preRun"]];
  5332. while (Module["preRun"].length) {
  5333. addOnPreRun(Module["preRun"].shift());
  5334. }
  5335. }
  5336. callRuntimeCallbacks(__ATPRERUN__);
  5337. }
  5338. function initRuntime() {
  5339. if (!Module["noFSInit"] && !FS.init.initialized)
  5340. FS.init();
  5341. callRuntimeCallbacks(__ATINIT__);
  5342. }
  5343. function postRun() {
  5344. if (Module["postRun"]) {
  5345. if (typeof Module["postRun"] == "function")
  5346. Module["postRun"] = [Module["postRun"]];
  5347. while (Module["postRun"].length) {
  5348. addOnPostRun(Module["postRun"].shift());
  5349. }
  5350. }
  5351. callRuntimeCallbacks(__ATPOSTRUN__);
  5352. }
  5353. function addOnPreRun(cb) {
  5354. __ATPRERUN__.unshift(cb);
  5355. }
  5356. function addOnInit(cb) {
  5357. __ATINIT__.unshift(cb);
  5358. }
  5359. function addOnPostRun(cb) {
  5360. __ATPOSTRUN__.unshift(cb);
  5361. }
  5362. var runDependencies = 0;
  5363. var dependenciesFulfilled = null;
  5364. function addRunDependency(id) {
  5365. runDependencies++;
  5366. if (Module["monitorRunDependencies"]) {
  5367. Module["monitorRunDependencies"](runDependencies);
  5368. }
  5369. }
  5370. function removeRunDependency(id) {
  5371. runDependencies--;
  5372. if (Module["monitorRunDependencies"]) {
  5373. Module["monitorRunDependencies"](runDependencies);
  5374. }
  5375. if (runDependencies == 0) {
  5376. if (dependenciesFulfilled) {
  5377. var callback = dependenciesFulfilled;
  5378. dependenciesFulfilled = null;
  5379. callback();
  5380. }
  5381. }
  5382. }
  5383. Module["preloadedImages"] = {};
  5384. Module["preloadedAudios"] = {};
  5385. function abort(what) {
  5386. if (Module["onAbort"]) {
  5387. Module["onAbort"](what);
  5388. }
  5389. what += "";
  5390. err(what);
  5391. ABORT = true;
  5392. what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info.";
  5393. var e = new WebAssembly.RuntimeError(what);
  5394. readyPromiseReject(e);
  5395. throw e;
  5396. }
  5397. var dataURIPrefix = "data:application/octet-stream;base64,";
  5398. function isDataURI(filename) {
  5399. return filename.startsWith(dataURIPrefix);
  5400. }
  5401. var wasmBinaryFile = "data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIcKAJABEAgASgCCCgCKCABKAIIKAIcKAJAIAEoAggoAiQRBAALIAEoAggoAhwoAjgEQCABKAIIKAIoIAEoAggoAhwoAjggASgCCCgCJBEEAAsgASgCCCgCKCABKAIIKAIcIAEoAggoAiQRBAAgASgCCEEANgIcIAFBfUEAIAEoAgRB8QBGGzYCDAsgASgCDCEAIAFBEGokACAAC+sXAQJ/IwBB8ABrIgMgADYCbCADIAE2AmggAyACNgJkIANBfzYCXCADIAMoAmgvAQI2AlQgA0EANgJQIANBBzYCTCADQQQ2AkggAygCVEUEQCADQYoBNgJMIANBAzYCSAsgA0EANgJgA0AgAygCYCADKAJkSkUEQCADIAMoAlQ2AlggAyADKAJoIAMoAmBBAWpBAnRqLwECNgJUIAMgAygCUEEBaiIANgJQAkACQCADKAJMIABMDQAgAygCWCADKAJURw0ADAELAkAgAygCUCADKAJISARAA0AgAyADKAJsQfwUaiADKAJYQQJ0ai8BAjYCRAJAIAMoAmwoArwtQRAgAygCRGtKBEAgAyADKAJsQfwUaiADKAJYQQJ0ai8BADYCQCADKAJsIgAgAC8BuC0gAygCQEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAJAQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCREEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJsQfwUaiADKAJYQQJ0ai8BACADKAJsKAK8LXRyOwG4LSADKAJsIgAgAygCRCAAKAK8LWo2ArwtCyADIAMoAlBBAWsiADYCUCAADQALDAELAkAgAygCWARAIAMoAlggAygCXEcEQCADIAMoAmxB/BRqIAMoAlhBAnRqLwECNgI8AkAgAygCbCgCvC1BECADKAI8a0oEQCADIAMoAmxB/BRqIAMoAlhBAnRqLwEANgI4IAMoAmwiACAALwG4LSADKAI4Qf//A3EgAygCbCgCvC10cjsBuC0gAygCbC8BuC1B/wFxIQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbC8BuC1BCHYhASADKAJsKAIIIQIgAygCbCIEKAIUIQAgBCAAQQFqNgIUIAAgAmogAToAACADKAJsIAMoAjhB//8DcUEQIAMoAmwoArwta3U7AbgtIAMoAmwiACAAKAK8LSADKAI8QRBrajYCvC0MAQsgAygCbCIAIAAvAbgtIAMoAmxB/BRqIAMoAlhBAnRqLwEAIAMoAmwoArwtdHI7AbgtIAMoAmwiACADKAI8IAAoArwtajYCvC0LIAMgAygCUEEBazYCUAsgAyADKAJsLwG+FTYCNAJAIAMoAmwoArwtQRAgAygCNGtKBEAgAyADKAJsLwG8FTYCMCADKAJsIgAgAC8BuC0gAygCMEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAIwQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCNEEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJsLwG8FSADKAJsKAK8LXRyOwG4LSADKAJsIgAgAygCNCAAKAK8LWo2ArwtCyADQQI2AiwCQCADKAJsKAK8LUEQIAMoAixrSgRAIAMgAygCUEEDazYCKCADKAJsIgAgAC8BuC0gAygCKEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAIoQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCLEEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJQQQNrQf//A3EgAygCbCgCvC10cjsBuC0gAygCbCIAIAMoAiwgACgCvC1qNgK8LQsMAQsCQCADKAJQQQpMBEAgAyADKAJsLwHCFTYCJAJAIAMoAmwoArwtQRAgAygCJGtKBEAgAyADKAJsLwHAFTYCICADKAJsIgAgAC8BuC0gAygCIEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAIgQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCJEEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJsLwHAFSADKAJsKAK8LXRyOwG4LSADKAJsIgAgAygCJCAAKAK8LWo2ArwtCyADQQM2AhwCQCADKAJsKAK8LUEQIAMoAhxrSgRAIAMgAygCUEEDazYCGCADKAJsIgAgAC8BuC0gAygCGEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAIYQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCHEEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJQQQNrQf//A3EgAygCbCgCvC10cjsBuC0gAygCbCIAIAMoAhwgACgCvC1qNgK8LQsMAQsgAyADKAJsLwHGFTYCFAJAIAMoAmwoArwtQRAgAygCFGtKBEAgAyADKAJsLwHEFTYCECADKAJsIgAgAC8BuC0gAygCEEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAIQQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCFEEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJsLwHEFSADKAJsKAK8LXRyOwG4LSADKAJsIgAgAygCFCAAKAK8LWo2ArwtCyADQQc2AgwCQCADKAJsKAK8LUEQIAMoAgxrSgRAIAMgAygCUEELazYCCCADKAJsIgAgAC8BuC0gAygCCEH//wNxIAMoAmwoArwtdHI7AbgtIAMoAmwvAbgtQf8BcSEBIAMoAmwoAgghAiADKAJsIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAmwvAbgtQQh2IQEgAygCbCgCCCECIAMoAmwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCbCADKAIIQf//A3FBECADKAJsKAK8LWt1OwG4LSADKAJsIgAgACgCvC0gAygCDEEQa2o2ArwtDAELIAMoAmwiACAALwG4LSADKAJQQQtrQf//A3EgAygCbCgCvC10cjsBuC0gAygCbCIAIAMoAgwgACgCvC1qNgK8LQsLCwsgA0EANgJQIAMgAygCWDYCXAJAIAMoAlRFBEAgA0GKATYCTCADQQM2AkgMAQsCQCADKAJYIAMoAlRGBEAgA0EGNgJMIANBAzYCSAwBCyADQQc2AkwgA0EENgJICwsLIAMgAygCYEEBajYCYAwBCwsLkQQBAX8jAEEwayIDIAA2AiwgAyABNgIoIAMgAjYCJCADQX82AhwgAyADKAIoLwECNgIUIANBADYCECADQQc2AgwgA0EENgIIIAMoAhRFBEAgA0GKATYCDCADQQM2AggLIAMoAiggAygCJEEBakECdGpB//8DOwECIANBADYCIANAIAMoAiAgAygCJEpFBEAgAyADKAIUNgIYIAMgAygCKCADKAIgQQFqQQJ0ai8BAjYCFCADIAMoAhBBAWoiADYCEAJAAkAgAygCDCAATA0AIAMoAhggAygCFEcNAAwBCwJAIAMoAhAgAygCCEgEQCADKAIsQfwUaiADKAIYQQJ0aiIAIAMoAhAgAC8BAGo7AQAMAQsCQCADKAIYBEAgAygCGCADKAIcRwRAIAMoAiwgAygCGEECdGpB/BRqIgAgAC8BAEEBajsBAAsgAygCLCIAIABBvBVqLwEAQQFqOwG8FQwBCwJAIAMoAhBBCkwEQCADKAIsIgAgAEHAFWovAQBBAWo7AcAVDAELIAMoAiwiACAAQcQVai8BAEEBajsBxBULCwsgA0EANgIQIAMgAygCGDYCHAJAIAMoAhRFBEAgA0GKATYCDCADQQM2AggMAQsCQCADKAIYIAMoAhRGBEAgA0EGNgIMIANBAzYCCAwBCyADQQc2AgwgA0EENgIICwsLIAMgAygCIEEBajYCIAwBCwsLpxIBAn8jAEHQAGsiAyAANgJMIAMgATYCSCADIAI2AkQgA0EANgI4IAMoAkwoAqAtBEADQCADIAMoAkwoAqQtIAMoAjhBAXRqLwEANgJAIAMoAkwoApgtIQAgAyADKAI4IgFBAWo2AjggAyAAIAFqLQAANgI8AkAgAygCQEUEQCADIAMoAkggAygCPEECdGovAQI2AiwCQCADKAJMKAK8LUEQIAMoAixrSgRAIAMgAygCSCADKAI8QQJ0ai8BADYCKCADKAJMIgAgAC8BuC0gAygCKEH//wNxIAMoAkwoArwtdHI7AbgtIAMoAkwvAbgtQf8BcSEBIAMoAkwoAgghAiADKAJMIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAkwvAbgtQQh2IQEgAygCTCgCCCECIAMoAkwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCTCADKAIoQf//A3FBECADKAJMKAK8LWt1OwG4LSADKAJMIgAgACgCvC0gAygCLEEQa2o2ArwtDAELIAMoAkwiACAALwG4LSADKAJIIAMoAjxBAnRqLwEAIAMoAkwoArwtdHI7AbgtIAMoAkwiACADKAIsIAAoArwtajYCvC0LDAELIAMgAygCPC0A0F02AjQgAyADKAJIIAMoAjRBgQJqQQJ0ai8BAjYCJAJAIAMoAkwoArwtQRAgAygCJGtKBEAgAyADKAJIIAMoAjRBgQJqQQJ0ai8BADYCICADKAJMIgAgAC8BuC0gAygCIEH//wNxIAMoAkwoArwtdHI7AbgtIAMoAkwvAbgtQf8BcSEBIAMoAkwoAgghAiADKAJMIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAkwvAbgtQQh2IQEgAygCTCgCCCECIAMoAkwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCTCADKAIgQf//A3FBECADKAJMKAK8LWt1OwG4LSADKAJMIgAgACgCvC0gAygCJEEQa2o2ArwtDAELIAMoAkwiACAALwG4LSADKAJIIAMoAjRBgQJqQQJ0ai8BACADKAJMKAK8LXRyOwG4LSADKAJMIgAgAygCJCAAKAK8LWo2ArwtCyADIAMoAjRBAnRBkOoAaigCADYCMCADKAIwBEAgAyADKAI8IAMoAjRBAnRBgO0AaigCAGs2AjwgAyADKAIwNgIcAkAgAygCTCgCvC1BECADKAIca0oEQCADIAMoAjw2AhggAygCTCIAIAAvAbgtIAMoAhhB//8DcSADKAJMKAK8LXRyOwG4LSADKAJMLwG4LUH/AXEhASADKAJMKAIIIQIgAygCTCIEKAIUIQAgBCAAQQFqNgIUIAAgAmogAToAACADKAJMLwG4LUEIdiEBIAMoAkwoAgghAiADKAJMIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAkwgAygCGEH//wNxQRAgAygCTCgCvC1rdTsBuC0gAygCTCIAIAAoArwtIAMoAhxBEGtqNgK8LQwBCyADKAJMIgAgAC8BuC0gAygCPEH//wNxIAMoAkwoArwtdHI7AbgtIAMoAkwiACADKAIcIAAoArwtajYCvC0LCyADIAMoAkBBAWs2AkAgAwJ/IAMoAkBBgAJJBEAgAygCQC0A0FkMAQsgAygCQEEHdkGAAmotANBZCzYCNCADIAMoAkQgAygCNEECdGovAQI2AhQCQCADKAJMKAK8LUEQIAMoAhRrSgRAIAMgAygCRCADKAI0QQJ0ai8BADYCECADKAJMIgAgAC8BuC0gAygCEEH//wNxIAMoAkwoArwtdHI7AbgtIAMoAkwvAbgtQf8BcSEBIAMoAkwoAgghAiADKAJMIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAkwvAbgtQQh2IQEgAygCTCgCCCECIAMoAkwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCTCADKAIQQf//A3FBECADKAJMKAK8LWt1OwG4LSADKAJMIgAgACgCvC0gAygCFEEQa2o2ArwtDAELIAMoAkwiACAALwG4LSADKAJEIAMoAjRBAnRqLwEAIAMoAkwoArwtdHI7AbgtIAMoAkwiACADKAIUIAAoArwtajYCvC0LIAMgAygCNEECdEGQ6wBqKAIANgIwIAMoAjAEQCADIAMoAkAgAygCNEECdEGA7gBqKAIAazYCQCADIAMoAjA2AgwCQCADKAJMKAK8LUEQIAMoAgxrSgRAIAMgAygCQDYCCCADKAJMIgAgAC8BuC0gAygCCEH//wNxIAMoAkwoArwtdHI7AbgtIAMoAkwvAbgtQf8BcSEBIAMoAkwoAgghAiADKAJMIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAkwvAbgtQQh2IQEgAygCTCgCCCECIAMoAkwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCTCADKAIIQf//A3FBECADKAJMKAK8LWt1OwG4LSADKAJMIgAgACgCvC0gAygCDEEQa2o2ArwtDAELIAMoAkwiACAALwG4LSADKAJAQf//A3EgAygCTCgCvC10cjsBuC0gAygCTCIAIAMoAgwgACgCvC1qNgK8LQsLCyADKAI4IAMoAkwoAqAtSQ0ACwsgAyADKAJILwGCCDYCBAJAIAMoAkwoArwtQRAgAygCBGtKBEAgAyADKAJILwGACDYCACADKAJMIgAgAC8BuC0gAygCAEH//wNxIAMoAkwoArwtdHI7AbgtIAMoAkwvAbgtQf8BcSEBIAMoAkwoAgghAiADKAJMIgQoAhQhACAEIABBAWo2AhQgACACaiABOgAAIAMoAkwvAbgtQQh2IQEgAygCTCgCCCECIAMoAkwiBCgCFCEAIAQgAEEBajYCFCAAIAJqIAE6AAAgAygCTCADKAIAQf//A3FBECADKAJMKAK8LWt1OwG4LSADKAJMIgAgACgCvC0gAygCBEEQa2o2ArwtDAELIAMoAkwiACAALwG4LSADKAJILwGACCADKAJMKAK8LXRyOwG4LSADKAJMIgAgAygCBCAAKAK8LWo2ArwtCwuXAgEEfyMAQRBrIgEgADYCDAJAIAEoAgwoArwtQRBGBEAgASgCDC8BuC1B/wFxIQIgASgCDCgCCCEDIAEoAgwiBCgCFCEAIAQgAEEBajYCFCAAIANqIAI6AAAgASgCDC8BuC1BCHYhAiABKAIMKAIIIQMgASgCDCIEKAIUIQAgBCAAQQFqNgIUIAAgA2ogAjoAACABKAIMQQA7AbgtIAEoAgxBADYCvC0MAQsgASgCDCgCvC1BCE4EQCABKAIMLwG4LSECIAEoAgwoAgghAyABKAIMIgQoAhQhACAEIABBAWo2AhQgACADaiACOgAAIAEoAgwiACAALwG4LUEIdjsBuC0gASgCDCIAIAAoArwtQQhrNgK8LQsLC+8BAQR/IwBBEGsiASAANgIMAkAgASgCDCgCvC1BCEoEQCABKAIMLwG4LUH/AXEhAiABKAIMKAIIIQMgASgCDCIEKAIUIQAgBCAAQQFqNgIUIAAgA2ogAjoAACABKAIMLwG4LUEIdiECIAEoAgwoAgghAyABKAIMIgQoAhQhACAEIABBAWo2AhQgACADaiACOgAADAELIAEoAgwoArwtQQBKBEAgASgCDC8BuC0hAiABKAIMKAIIIQMgASgCDCIEKAIUIQAgBCAAQQFqNgIUIAAgA2ogAjoAAAsLIAEoAgxBADsBuC0gASgCDEEANgK8LQv8AQEBfyMAQRBrIgEgADYCDCABQQA2AggDQCABKAIIQZ4CTkUEQCABKAIMQZQBaiABKAIIQQJ0akEAOwEAIAEgASgCCEEBajYCCAwBCwsgAUEANgIIA0AgASgCCEEeTkUEQCABKAIMQYgTaiABKAIIQQJ0akEAOwEAIAEgASgCCEEBajYCCAwBCwsgAUEANgIIA0AgASgCCEETTkUEQCABKAIMQfwUaiABKAIIQQJ0akEAOwEAIAEgASgCCEEBajYCCAwBCwsgASgCDEEBOwGUCSABKAIMQQA2AqwtIAEoAgxBADYCqC0gASgCDEEANgKwLSABKAIMQQA2AqAtCyIBAX8jAEEQayIBJAAgASAANgIMIAEoAgwQFSABQRBqJAAL6QEBAX8jAEEwayICIAA2AiQgAiABNwMYIAJCADcDECACIAIoAiQpAwhCAX03AwgCQANAIAIpAxAgAikDCFQEQCACIAIpAxAgAikDCCACKQMQfUIBiHw3AwACQCACKAIkKAIEIAIpAwCnQQN0aikDACACKQMYVgRAIAIgAikDAEIBfTcDCAwBCwJAIAIpAwAgAigCJCkDCFIEQCACKAIkKAIEIAIpAwBCAXynQQN0aikDACACKQMYWA0BCyACIAIpAwA3AygMBAsgAiACKQMAQgF8NwMQCwwBCwsgAiACKQMQNwMoCyACKQMoC6cBAQF/IwBBMGsiBCQAIAQgADYCKCAEIAE2AiQgBCACNwMYIAQgAzYCFCAEIAQoAigpAzggBCgCKCkDMCAEKAIkIAQpAxggBCgCFBCIATcDCAJAIAQpAwhCAFMEQCAEQX82AiwMAQsgBCgCKCAEKQMINwM4IAQoAiggBCgCKCkDOBDAASECIAQoAiggAjcDQCAEQQA2AiwLIAQoAiwhACAEQTBqJAAgAAvrAQEBfyMAQSBrIgMkACADIAA2AhggAyABNwMQIAMgAjYCDAJAIAMpAxAgAygCGCkDEFQEQCADQQE6AB8MAQsgAyADKAIYKAIAIAMpAxBCBIanEE4iADYCCCAARQRAIAMoAgxBDkEAEBQgA0EAOgAfDAELIAMoAhggAygCCDYCACADIAMoAhgoAgQgAykDEEIBfEIDhqcQTiIANgIEIABFBEAgAygCDEEOQQAQFCADQQA6AB8MAQsgAygCGCADKAIENgIEIAMoAhggAykDEDcDECADQQE6AB8LIAMtAB9BAXEhACADQSBqJAAgAAvOAgEBfyMAQTBrIgQkACAEIAA2AiggBCABNwMgIAQgAjYCHCAEIAM2AhgCQAJAIAQoAigNACAEKQMgUA0AIAQoAhhBEkEAEBQgBEEANgIsDAELIAQgBCgCKCAEKQMgIAQoAhwgBCgCGBBMIgA2AgwgAEUEQCAEQQA2AiwMAQsgBEEYEBgiADYCFCAARQRAIAQoAhhBDkEAEBQgBCgCDBAyIARBADYCLAwBCyAEKAIUIAQoAgw2AhAgBCgCFEEANgIUQQAQASEAIAQoAhQgADYCDCMAQRBrIgAgBCgCFDYCDCAAKAIMQQA2AgAgACgCDEEANgIEIAAoAgxBADYCCCAEQQIgBCgCFCAEKAIYEIMBIgA2AhAgAEUEQCAEKAIUKAIQEDIgBCgCFBAVIARBADYCLAwBCyAEIAQoAhA2AiwLIAQoAiwhACAEQTBqJAAgAAupAQEBfyMAQTBrIgQkACAEIAA2AiggBCABNwMgIAQgAjYCHCAEIAM2AhgCQCAEKAIoRQRAIAQpAyBCAFIEQCAEKAIYQRJBABAUIARBADYCLAwCCyAEQQBCACAEKAIcIAQoAhgQwwE2AiwMAQsgBCAEKAIoNgIIIAQgBCkDIDcDECAEIARBCGpCASAEKAIcIAQoAhgQwwE2AiwLIAQoAiwhACAEQTBqJAAgAAtGAQF/IwBBIGsiAyQAIAMgADYCHCADIAE3AxAgAyACNgIMIAMoAhwgAykDECADKAIMIAMoAhxBCGoQTSEAIANBIGokACAAC4sMAQZ/IAAgAWohBQJAAkAgACgCBCICQQFxDQAgAkEDcUUNASAAKAIAIgIgAWohAQJAIAAgAmsiAEH4mwEoAgBHBEAgAkH/AU0EQCAAKAIIIgQgAkEDdiICQQN0QYycAWpGGiAAKAIMIgMgBEcNAkHkmwFB5JsBKAIAQX4gAndxNgIADAMLIAAoAhghBgJAIAAgACgCDCIDRwRAIAAoAggiAkH0mwEoAgBJGiACIAM2AgwgAyACNgIIDAELAkAgAEEUaiICKAIAIgQNACAAQRBqIgIoAgAiBA0AQQAhAwwBCwNAIAIhByAEIgNBFGoiAigCACIEDQAgA0EQaiECIAMoAhAiBA0ACyAHQQA2AgALIAZFDQICQCAAIAAoAhwiBEECdEGUngFqIgIoAgBGBEAgAiADNgIAIAMNAUHomwFB6JsBKAIAQX4gBHdxNgIADAQLIAZBEEEUIAYoAhAgAEYbaiADNgIAIANFDQMLIAMgBjYCGCAAKAIQIgIEQCADIAI2AhAgAiADNgIYCyAAKAIUIgJFDQIgAyACNgIUIAIgAzYCGAwCCyAFKAIEIgJBA3FBA0cNAUHsmwEgATYCACAFIAJBfnE2AgQgACABQQFyNgIEIAUgATYCAA8LIAQgAzYCDCADIAQ2AggLAkAgBSgCBCICQQJxRQRAIAVB/JsBKAIARgRAQfybASAANgIAQfCbAUHwmwEoAgAgAWoiATYCACAAIAFBAXI2AgQgAEH4mwEoAgBHDQNB7JsBQQA2AgBB+JsBQQA2AgAPCyAFQfibASgCAEYEQEH4mwEgADYCAEHsmwFB7JsBKAIAIAFqIgE2AgAgACABQQFyNgIEIAAgAWogATYCAA8LIAJBeHEgAWohAQJAIAJB/wFNBEAgBSgCCCIEIAJBA3YiAkEDdEGMnAFqRhogBCAFKAIMIgNGBEBB5JsBQeSbASgCAEF+IAJ3cTYCAAwCCyAEIAM2AgwgAyAENgIIDAELIAUoAhghBgJAIAUgBSgCDCIDRwRAIAUoAggiAkH0mwEoAgBJGiACIAM2AgwgAyACNgIIDAELAkAgBUEUaiIEKAIAIgINACAFQRBqIgQoAgAiAg0AQQAhAwwBCwNAIAQhByACIgNBFGoiBCgCACICDQAgA0EQaiEEIAMoAhAiAg0ACyAHQQA2AgALIAZFDQACQCAFIAUoAhwiBEECdEGUngFqIgIoAgBGBEAgAiADNgIAIAMNAUHomwFB6JsBKAIAQX4gBHdxNgIADAILIAZBEEEUIAYoAhAgBUYbaiADNgIAIANFDQELIAMgBjYCGCAFKAIQIgIEQCADIAI2AhAgAiADNgIYCyAFKAIUIgJFDQAgAyACNgIUIAIgAzYCGAsgACABQQFyNgIEIAAgAWogATYCACAAQfibASgCAEcNAUHsmwEgATYCAA8LIAUgAkF+cTYCBCAAIAFBAXI2AgQgACABaiABNgIACyABQf8BTQRAIAFBA3YiAkEDdEGMnAFqIQECf0HkmwEoAgAiA0EBIAJ0IgJxRQRAQeSbASACIANyNgIAIAEMAQsgASgCCAshAiABIAA2AgggAiAANgIMIAAgATYCDCAAIAI2AggPC0EfIQIgAEIANwIQIAFB////B00EQCABQQh2IgIgAkGA/j9qQRB2QQhxIgR0IgIgAkGA4B9qQRB2QQRxIgN0IgIgAkGAgA9qQRB2QQJxIgJ0QQ92IAMgBHIgAnJrIgJBAXQgASACQRVqdkEBcXJBHGohAgsgACACNgIcIAJBAnRBlJ4BaiEHAkACQEHomwEoAgAiBEEBIAJ0IgNxRQRAQeibASADIARyNgIAIAcgADYCACAAIAc2AhgMAQsgAUEAQRkgAkEBdmsgAkEfRht0IQIgBygCACEDA0AgAyIEKAIEQXhxIAFGDQIgAkEddiEDIAJBAXQhAiAEIANBBHFqIgdBEGooAgAiAw0ACyAHIAA2AhAgACAENgIYCyAAIAA2AgwgACAANgIIDwsgBCgCCCIBIAA2AgwgBCAANgIIIABBADYCGCAAIAQ2AgwgACABNgIICwsGAEG0mwELtQkBAX8jAEHgwABrIgUkACAFIAA2AtRAIAUgATYC0EAgBSACNgLMQCAFIAM3A8BAIAUgBDYCvEAgBSAFKALQQDYCuEACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgBSgCvEAOEQMEAAYBAgUJCgoKCgoKCAoHCgsgBUIANwPYQAwKCyAFIAUoArhAQeQAaiAFKALMQCAFKQPAQBBDNwPYQAwJCyAFKAK4QBAVIAVCADcD2EAMCAsgBSgCuEAoAhAEQCAFIAUoArhAKAIQIAUoArhAKQMYIAUoArhAQeQAahBgIgM3A5hAIANQBEAgBUJ/NwPYQAwJCyAFKAK4QCkDCCAFKAK4QCkDCCAFKQOYQHxWBEAgBSgCuEBB5ABqQRVBABAUIAVCfzcD2EAMCQsgBSgCuEAiACAFKQOYQCAAKQMAfDcDACAFKAK4QCIAIAUpA5hAIAApAwh8NwMIIAUoArhAQQA2AhALIAUoArhALQB4QQFxRQRAIAVCADcDqEADQCAFKQOoQCAFKAK4QCkDAFQEQCAFIAUoArhAKQMAIAUpA6hAfUKAwABWBH5CgMAABSAFKAK4QCkDACAFKQOoQH0LNwOgQCAFIAUoAtRAIAVBEGogBSkDoEAQKyIDNwOwQCADQgBTBEAgBSgCuEBB5ABqIAUoAtRAEBcgBUJ/NwPYQAwLCyAFKQOwQFAEQCAFKAK4QEHkAGpBEUEAEBQgBUJ/NwPYQAwLBSAFIAUpA7BAIAUpA6hAfDcDqEAMAgsACwsLIAUoArhAIAUoArhAKQMANwMgIAVCADcD2EAMBwsgBSkDwEAgBSgCuEApAwggBSgCuEApAyB9VgRAIAUgBSgCuEApAwggBSgCuEApAyB9NwPAQAsgBSkDwEBQBEAgBUIANwPYQAwHCyAFKAK4QC0AeEEBcQRAIAUoAtRAIAUoArhAKQMgQQAQJ0EASARAIAUoArhAQeQAaiAFKALUQBAXIAVCfzcD2EAMCAsLIAUgBSgC1EAgBSgCzEAgBSkDwEAQKyIDNwOwQCADQgBTBEAgBSgCuEBB5ABqQRFBABAUIAVCfzcD2EAMBwsgBSgCuEAiACAFKQOwQCAAKQMgfDcDICAFKQOwQFAEQCAFKAK4QCkDICAFKAK4QCkDCFQEQCAFKAK4QEHkAGpBEUEAEBQgBUJ/NwPYQAwICwsgBSAFKQOwQDcD2EAMBgsgBSAFKAK4QCkDICAFKAK4QCkDAH0gBSgCuEApAwggBSgCuEApAwB9IAUoAsxAIAUpA8BAIAUoArhAQeQAahCIATcDCCAFKQMIQgBTBEAgBUJ/NwPYQAwGCyAFKAK4QCAFKQMIIAUoArhAKQMAfDcDICAFQgA3A9hADAULIAUgBSgCzEA2AgQgBSgCBCAFKAK4QEEoaiAFKAK4QEHkAGoQhAFBAEgEQCAFQn83A9hADAULIAVCADcD2EAMBAsgBSAFKAK4QCwAYKw3A9hADAMLIAUgBSgCuEApA3A3A9hADAILIAUgBSgCuEApAyAgBSgCuEApAwB9NwPYQAwBCyAFKAK4QEHkAGpBHEEAEBQgBUJ/NwPYQAsgBSkD2EAhAyAFQeDAAGokACADCwgAQQFBDBB/CyIBAX8jAEEQayIBIAA2AgwgASgCDCIAIAAoAjBBAWo2AjALBwAgACgCLAsHACAAKAIoCxgBAX8jAEEQayIBIAA2AgwgASgCDEEMagsHACAAKAIYCwcAIAAoAhALBwAgACgCCAtFAEGgmwFCADcDAEGYmwFCADcDAEGQmwFCADcDAEGImwFCADcDAEGAmwFCADcDAEH4mgFCADcDAEHwmgFCADcDAEHwmgELFAAgACABrSACrUIghoQgAyAEEH4LEwEBfiAAEEkiAUIgiKcQACABpwsVACAAIAGtIAKtQiCGhCADIAQQxAELFAAgACABIAKtIAOtQiCGhCAEEH0LrQQBAX8jAEEgayIFJAAgBSAANgIYIAUgAa0gAq1CIIaENwMQIAUgAzYCDCAFIAQ2AggCQAJAIAUpAxAgBSgCGCkDMFQEQCAFKAIIQQlNDQELIAUoAhhBCGpBEkEAEBQgBUF/NgIcDAELIAUoAhgoAhhBAnEEQCAFKAIYQQhqQRlBABAUIAVBfzYCHAwBCwJ/IAUoAgwhASMAQRBrIgAkACAAIAE2AgggAEEBOgAHAkAgACgCCEUEQCAAQQE6AA8MAQsgACAAKAIIIAAtAAdBAXEQswFBAEc6AA8LIAAtAA9BAXEhASAAQRBqJAAgAUULBEAgBSgCGEEIakEQQQAQFCAFQX82AhwMAQsgBSAFKAIYKAJAIAUpAxCnQQR0ajYCBCAFIAUoAgQoAgAEfyAFKAIEKAIAKAIQBUF/CzYCAAJAIAUoAgwgBSgCAEYEQCAFKAIEKAIEBEAgBSgCBCgCBCIAIAAoAgBBfnE2AgAgBSgCBCgCBEEAOwFQIAUoAgQoAgQoAgBFBEAgBSgCBCgCBBA3IAUoAgRBADYCBAsLDAELIAUoAgQoAgRFBEAgBSgCBCgCABBAIQAgBSgCBCAANgIEIABFBEAgBSgCGEEIakEOQQAQFCAFQX82AhwMAwsLIAUoAgQoAgQgBSgCDDYCECAFKAIEKAIEIAUoAgg7AVAgBSgCBCgCBCIAIAAoAgBBAXI2AgALIAVBADYCHAsgBSgCHCEAIAVBIGokACAACxcBAX4gACABIAIQciIDQiCIpxAAIAOnCx8BAX4gACABIAKtIAOtQiCGhBArIgRCIIinEAAgBKcLrgECAX8BfgJ/IwBBIGsiAiAANgIUIAIgATYCEAJAIAIoAhRFBEAgAkJ/NwMYDAELIAIoAhBBCHEEQCACIAIoAhQpAzA3AwgDQCACKQMIQgBSBH8gAigCFCgCQCACKQMIQgF9p0EEdGooAgAFQQELRQRAIAIgAikDCEIBfTcDCAwBCwsgAiACKQMINwMYDAELIAIgAigCFCkDMDcDGAsgAikDGCIDQiCIpwsQACADpwsTACAAIAGtIAKtQiCGhCADEMUBC4gCAgF/AX4CfyMAQSBrIgQkACAEIAA2AhQgBCABNgIQIAQgAq0gA61CIIaENwMIAkAgBCgCFEUEQCAEQn83AxgMAQsgBCgCFCgCBARAIARCfzcDGAwBCyAEKQMIQv///////////wBWBEAgBCgCFEEEakESQQAQFCAEQn83AxgMAQsCQCAEKAIULQAQQQFxRQRAIAQpAwhQRQ0BCyAEQgA3AxgMAQsgBCAEKAIUKAIUIAQoAhAgBCkDCBArIgU3AwAgBUIAUwRAIAQoAhRBBGogBCgCFCgCFBAXIARCfzcDGAwBCyAEIAQpAwA3AxgLIAQpAxghBSAEQSBqJAAgBUIgiKcLEAAgBacLTwEBfyMAQSBrIgQkACAEIAA2AhwgBCABrSACrUIghoQ3AxAgBCADNgIMIAQoAhwgBCkDECAEKAIMIAQoAhwoAhwQrQEhACAEQSBqJAAgAAvZAwEBfyMAQSBrIgUkACAFIAA2AhggBSABrSACrUIghoQ3AxAgBSADNgIMIAUgBDYCCAJAIAUoAhggBSkDEEEAQQAQP0UEQCAFQX82AhwMAQsgBSgCGCgCGEECcQRAIAUoAhhBCGpBGUEAEBQgBUF/NgIcDAELIAUoAhgoAkAgBSkDEKdBBHRqKAIIBEAgBSgCGCgCQCAFKQMQp0EEdGooAgggBSgCDBBnQQBIBEAgBSgCGEEIakEPQQAQFCAFQX82AhwMAgsgBUEANgIcDAELIAUgBSgCGCgCQCAFKQMQp0EEdGo2AgQgBSAFKAIEKAIABH8gBSgCDCAFKAIEKAIAKAIURwVBAQtBAXE2AgACQCAFKAIABEAgBSgCBCgCBEUEQCAFKAIEKAIAEEAhACAFKAIEIAA2AgQgAEUEQCAFKAIYQQhqQQ5BABAUIAVBfzYCHAwECwsgBSgCBCgCBCAFKAIMNgIUIAUoAgQoAgQiACAAKAIAQSByNgIADAELIAUoAgQoAgQEQCAFKAIEKAIEIgAgACgCAEFfcTYCACAFKAIEKAIEKAIARQRAIAUoAgQoAgQQNyAFKAIEQQA2AgQLCwsgBUEANgIcCyAFKAIcIQAgBUEgaiQAIAALFwAgACABrSACrUIghoQgAyAEIAUQmQELEgAgACABrSACrUIghoQgAxAnC48BAgF/AX4CfyMAQSBrIgQkACAEIAA2AhQgBCABNgIQIAQgAjYCDCAEIAM2AggCQAJAIAQoAhAEQCAEKAIMDQELIAQoAhRBCGpBEkEAEBQgBEJ/NwMYDAELIAQgBCgCFCAEKAIQIAQoAgwgBCgCCBCaATcDGAsgBCkDGCEFIARBIGokACAFQiCIpwsQACAFpwuFBQIBfwF+An8jAEEwayIDJAAgAyAANgIkIAMgATYCICADIAI2AhwCQCADKAIkKAIYQQJxBEAgAygCJEEIakEZQQAQFCADQn83AygMAQsgAygCIEUEQCADKAIkQQhqQRJBABAUIANCfzcDKAwBCyADQQA2AgwgAyADKAIgEC42AhggAygCICADKAIYQQFraiwAAEEvRwRAIAMgAygCGEECahAYIgA2AgwgAEUEQCADKAIkQQhqQQ5BABAUIANCfzcDKAwCCwJAAkAgAygCDCIBIAMoAiAiAHNBA3ENACAAQQNxBEADQCABIAAtAAAiAjoAACACRQ0DIAFBAWohASAAQQFqIgBBA3ENAAsLIAAoAgAiAkF/cyACQYGChAhrcUGAgYKEeHENAANAIAEgAjYCACAAKAIEIQIgAUEEaiEBIABBBGohACACQYGChAhrIAJBf3NxQYCBgoR4cUUNAAsLIAEgAC0AACICOgAAIAJFDQADQCABIAAtAAEiAjoAASABQQFqIQEgAEEBaiEAIAINAAsLIAMoAgwgAygCGGpBLzoAACADKAIMIAMoAhhBAWpqQQA6AAALIAMgAygCJEEAQgBBABB9IgA2AgggAEUEQCADKAIMEBUgA0J/NwMoDAELIAMgAygCJAJ/IAMoAgwEQCADKAIMDAELIAMoAiALIAMoAgggAygCHBCaATcDECADKAIMEBUCQCADKQMQQgBTBEAgAygCCBAbDAELIAMoAiQgAykDEEEAQQNBgID8jwQQmQFBAEgEQCADKAIkIAMpAxAQmAEaIANCfzcDKAwCCwsgAyADKQMQNwMoCyADKQMoIQQgA0EwaiQAIARCIIinCxAAIASnCxEAIAAgAa0gAq1CIIaEEJgBCxcAIAAgAa0gAq1CIIaEIAMgBCAFEIoBC38CAX8BfiMAQSBrIgMkACADIAA2AhggAyABNgIUIAMgAjYCECADIAMoAhggAygCFCADKAIQEHIiBDcDCAJAIARCAFMEQCADQQA2AhwMAQsgAyADKAIYIAMpAwggAygCECADKAIYKAIcEK0BNgIcCyADKAIcIQAgA0EgaiQAIAALEAAjACAAa0FwcSIAJAAgAAsGACAAJAALBAAjAAuCAQIBfwF+IwBBIGsiBCQAIAQgADYCGCAEIAE2AhQgBCACNgIQIAQgAzYCDCAEIAQoAhggBCgCFCAEKAIQEHIiBTcDAAJAIAVCAFMEQCAEQX82AhwMAQsgBCAEKAIYIAQpAwAgBCgCECAEKAIMEH42AhwLIAQoAhwhACAEQSBqJAAgAAvQRQMGfwF+AnwjAEHgAGsiASQAIAEgADYCWAJAIAEoAlhFBEAgAUF/NgJcDAELIwBBIGsiACABKAJYNgIcIAAgAUFAazYCGCAAQQA2AhQgAEIANwMAAkAgACgCHC0AKEEBcUUEQCAAKAIcKAIYIAAoAhwoAhRGDQELIABBATYCFAsgAEIANwMIA0AgACkDCCAAKAIcKQMwVARAAkACQCAAKAIcKAJAIAApAwinQQR0aigCCA0AIAAoAhwoAkAgACkDCKdBBHRqLQAMQQFxDQAgACgCHCgCQCAAKQMIp0EEdGooAgRFDQEgACgCHCgCQCAAKQMIp0EEdGooAgQoAgBFDQELIABBATYCFAsgACgCHCgCQCAAKQMIp0EEdGotAAxBAXFFBEAgACAAKQMAQgF8NwMACyAAIAApAwhCAXw3AwgMAQsLIAAoAhgEQCAAKAIYIAApAwA3AwALIAEgACgCFDYCJCABKQNAUARAAkAgASgCWCgCBEEIcUUEQCABKAIkRQ0BCwJ/IAEoAlgoAgAhAiMAQRBrIgAkACAAIAI2AggCQCAAKAIIKAIkQQNGBEAgAEEANgIMDAELIAAoAggoAiAEQCAAKAIIEC9BAEgEQCAAQX82AgwMAgsLIAAoAggoAiQEQCAAKAIIEGILIAAoAghBAEIAQQ8QIEIAUwRAIABBfzYCDAwBCyAAKAIIQQM2AiQgAEEANgIMCyAAKAIMIQIgAEEQaiQAIAJBAEgLBEACQAJ/IwBBEGsiACABKAJYKAIANgIMIwBBEGsiAiAAKAIMQQxqNgIMIAIoAgwoAgBBFkYLBEAjAEEQayIAIAEoAlgoAgA2AgwjAEEQayICIAAoAgxBDGo2AgwgAigCDCgCBEEsRg0BCyABKAJYQQhqIAEoAlgoAgAQFyABQX82AlwMBAsLCyABKAJYEDwgAUEANgJcDAELIAEoAiRFBEAgASgCWBA8IAFBADYCXAwBCyABKQNAIAEoAlgpAzBWBEAgASgCWEEIakEUQQAQFCABQX82AlwMAQsgASABKQNAp0EDdBAYIgA2AiggAEUEQCABQX82AlwMAQsgAUJ/NwM4IAFCADcDSCABQgA3A1ADQCABKQNQIAEoAlgpAzBUBEACQCABKAJYKAJAIAEpA1CnQQR0aigCAEUNAAJAIAEoAlgoAkAgASkDUKdBBHRqKAIIDQAgASgCWCgCQCABKQNQp0EEdGotAAxBAXENACABKAJYKAJAIAEpA1CnQQR0aigCBEUNASABKAJYKAJAIAEpA1CnQQR0aigCBCgCAEUNAQsgAQJ+IAEpAzggASgCWCgCQCABKQNQp0EEdGooAgApA0hUBEAgASkDOAwBCyABKAJYKAJAIAEpA1CnQQR0aigCACkDSAs3AzgLIAEoAlgoAkAgASkDUKdBBHRqLQAMQQFxRQRAIAEpA0ggASkDQFoEQCABKAIoEBUgASgCWEEIakEUQQAQFCABQX82AlwMBAsgASgCKCABKQNIp0EDdGogASkDUDcDACABIAEpA0hCAXw3A0gLIAEgASkDUEIBfDcDUAwBCwsgASkDSCABKQNAVARAIAEoAigQFSABKAJYQQhqQRRBABAUIAFBfzYCXAwBCwJAAn8jAEEQayIAIAEoAlgoAgA2AgwgACgCDCkDGEKAgAiDUAsEQCABQgA3AzgMAQsgASkDOEJ/UQRAIAFCfzcDGCABQgA3AzggAUIANwNQA0AgASkDUCABKAJYKQMwVARAIAEoAlgoAkAgASkDUKdBBHRqKAIABEAgASgCWCgCQCABKQNQp0EEdGooAgApA0ggASkDOFoEQCABIAEoAlgoAkAgASkDUKdBBHRqKAIAKQNINwM4IAEgASkDUDcDGAsLIAEgASkDUEIBfDcDUAwBCwsgASkDGEJ/UgRAIAEoAlghAiABKQMYIQcgASgCWEEIaiEDIwBBMGsiACQAIAAgAjYCJCAAIAc3AxggACADNgIUIAAgACgCJCAAKQMYIAAoAhQQYCIHNwMIAkAgB1AEQCAAQgA3AygMAQsgACAAKAIkKAJAIAApAxinQQR0aigCADYCBAJAIAApAwggACkDCCAAKAIEKQMgfFgEQCAAKQMIIAAoAgQpAyB8Qv///////////wBYDQELIAAoAhRBBEEWEBQgAEIANwMoDAELIAAgACgCBCkDICAAKQMIfDcDCCAAKAIELwEMQQhxBEAgACgCJCgCACAAKQMIQQAQJ0EASARAIAAoAhQgACgCJCgCABAXIABCADcDKAwCCyAAKAIkKAIAIABCBBArQgRSBEAgACgCFCAAKAIkKAIAEBcgAEIANwMoDAILIAAoAABB0JadwABGBEAgACAAKQMIQgR8NwMICyAAIAApAwhCDHw3AwggACgCBEEAEGVBAXEEQCAAIAApAwhCCHw3AwgLIAApAwhC////////////AFYEQCAAKAIUQQRBFhAUIABCADcDKAwCCwsgACAAKQMINwMoCyAAKQMoIQcgAEEwaiQAIAEgBzcDOCAHUARAIAEoAigQFSABQX82AlwMBAsLCyABKQM4QgBSBEACfyABKAJYKAIAIQIgASkDOCEHIwBBEGsiACQAIAAgAjYCCCAAIAc3AwACQCAAKAIIKAIkQQFGBEAgACgCCEEMakESQQAQFCAAQX82AgwMAQsgACgCCEEAIAApAwBBERAgQgBTBEAgAEF/NgIMDAELIAAoAghBATYCJCAAQQA2AgwLIAAoAgwhAiAAQRBqJAAgAkEASAsEQCABQgA3AzgLCwsgASkDOFAEQAJ/IAEoAlgoAgAhAiMAQRBrIgAkACAAIAI2AggCQCAAKAIIKAIkQQFGBEAgACgCCEEMakESQQAQFCAAQX82AgwMAQsgACgCCEEAQgBBCBAgQgBTBEAgAEF/NgIMDAELIAAoAghBATYCJCAAQQA2AgwLIAAoAgwhAiAAQRBqJAAgAkEASAsEQCABKAJYQQhqIAEoAlgoAgAQFyABKAIoEBUgAUF/NgJcDAILCyABKAJYKAJUIQIjAEEQayIAJAAgACACNgIMIAAoAgwEQCAAKAIMRAAAAAAAAAAAOQMYIAAoAgwoAgBEAAAAAAAAAAAgACgCDCgCDCAAKAIMKAIEERYACyAAQRBqJAAgAUEANgIsIAFCADcDSANAAkAgASkDSCABKQNAWg0AIAEoAlgoAlQhAiABKQNIIge6IAEpA0C6IgijIQkjAEEgayIAJAAgACACNgIcIAAgCTkDECAAIAdCAXy6IAijOQMIIAAoAhwEQCAAKAIcIAArAxA5AyAgACgCHCAAKwMIOQMoIAAoAhxEAAAAAAAAAAAQVwsgAEEgaiQAIAEgASgCKCABKQNIp0EDdGopAwA3A1AgASABKAJYKAJAIAEpA1CnQQR0ajYCEAJAAkAgASgCECgCAEUNACABKAIQKAIAKQNIIAEpAzhaDQAMAQsgAQJ/QQEgASgCECgCCA0AGiABKAIQKAIEBEBBASABKAIQKAIEKAIAQQFxDQEaCyABKAIQKAIEBH8gASgCECgCBCgCAEHAAHFBAEcFQQALC0EBcTYCFCABKAIQKAIERQRAIAEoAhAoAgAQQCEAIAEoAhAgADYCBCAARQRAIAEoAlhBCGpBDkEAEBQgAUEBNgIsDAMLCyABIAEoAhAoAgQ2AgwCfyABKAJYIQIgASkDUCEHIwBBMGsiACQAIAAgAjYCKCAAIAc3AyACQCAAKQMgIAAoAigpAzBaBEAgACgCKEEIakESQQAQFCAAQX82AiwMAQsgACAAKAIoKAJAIAApAyCnQQR0ajYCHAJAIAAoAhwoAgAEQCAAKAIcKAIALQAEQQFxRQ0BCyAAQQA2AiwMAQsgACgCHCgCACkDSEIafEL///////////8AVgRAIAAoAihBCGpBBEEWEBQgAEF/NgIsDAELIAAoAigoAgAgACgCHCgCACkDSEIafEEAECdBAEgEQCAAKAIoQQhqIAAoAigoAgAQFyAAQX82AiwMAQsgACAAKAIoKAIAQgQgAEEYaiAAKAIoQQhqEEIiAjYCFCACRQRAIABBfzYCLAwBCyAAIAAoAhQQHTsBEiAAIAAoAhQQHTsBECAAKAIUEEdBAXFFBEAgACgCFBAWIAAoAihBCGpBFEEAEBQgAEF/NgIsDAELIAAoAhQQFiAALwEQBEAgACgCKCgCACAALwESrUEBECdBAEgEQCAAKAIoQQhqQQRBtJsBKAIAEBQgAEF/NgIsDAILIABBACAAKAIoKAIAIAAvARBBACAAKAIoQQhqEGM2AgggACgCCEUEQCAAQX82AiwMAgsgACgCCCAALwEQQYACIABBDGogACgCKEEIahCUAUEBcUUEQCAAKAIIEBUgAEF/NgIsDAILIAAoAggQFSAAKAIMBEAgACAAKAIMEJMBNgIMIAAoAhwoAgAoAjQgACgCDBCVASECIAAoAhwoAgAgAjYCNAsLIAAoAhwoAgBBAToABAJAIAAoAhwoAgRFDQAgACgCHCgCBC0ABEEBcQ0AIAAoAhwoAgQgACgCHCgCACgCNDYCNCAAKAIcKAIEQQE6AAQLIABBADYCLAsgACgCLCECIABBMGokACACQQBICwRAIAFBATYCLAwCCyABIAEoAlgoAgAQNSIHNwMwIAdCAFMEQCABQQE2AiwMAgsgASgCDCABKQMwNwNIAkAgASgCFARAIAFBADYCCCABKAIQKAIIRQRAIAEgASgCWCABKAJYIAEpA1BBCEEAEK4BIgA2AgggAEUEQCABQQE2AiwMBQsLAn8gASgCWCECAn8gASgCCARAIAEoAggMAQsgASgCECgCCAshAyABKAIMIQQjAEGgAWsiACQAIAAgAjYCmAEgACADNgKUASAAIAQ2ApABAkAgACgClAEgAEE4ahA5QQBIBEAgACgCmAFBCGogACgClAEQFyAAQX82ApwBDAELIAApAzhCwACDUARAIAAgACkDOELAAIQ3AzggAEEAOwFoCwJAAkAgACgCkAEoAhBBf0cEQCAAKAKQASgCEEF+Rw0BCyAALwFoRQ0AIAAoApABIAAvAWg2AhAMAQsCQAJAIAAoApABKAIQDQAgACkDOEIEg1ANACAAIAApAzhCCIQ3AzggACAAKQNQNwNYDAELIAAgACkDOEL3////D4M3AzgLCyAAKQM4QoABg1AEQCAAIAApAzhCgAGENwM4IABBADsBagsgAEGAAjYCJAJAIAApAzhCBINQBEAgACAAKAIkQYAIcjYCJCAAQn83A3AMAQsgACgCkAEgACkDUDcDKCAAIAApA1A3A3ACQCAAKQM4QgiDUARAAkACQAJAAkACQAJ/AkAgACgCkAEoAhBBf0cEQCAAKAKQASgCEEF+Rw0BC0EIDAELIAAoApABKAIQC0H//wNxDg0CAwMDAwMDAwEDAwMAAwsgAEKUwuTzDzcDEAwDCyAAQoODsP8PNwMQDAILIABC/////w83AxAMAQsgAEIANwMQCyAAKQNQIAApAxBWBEAgACAAKAIkQYAIcjYCJAsMAQsgACgCkAEgACkDWDcDIAsLIAAgACgCmAEoAgAQNSIHNwOIASAHQgBTBEAgACgCmAFBCGogACgCmAEoAgAQFyAAQX82ApwBDAELIAAoApABIgIgAi8BDEH3/wNxOwEMIAAgACgCmAEgACgCkAEgACgCJBBUIgI2AiggAkEASARAIABBfzYCnAEMAQsgACAALwFoAn8CQCAAKAKQASgCEEF/RwRAIAAoApABKAIQQX5HDQELQQgMAQsgACgCkAEoAhALQf//A3FHOgAiIAAgAC0AIkEBcQR/IAAvAWhBAEcFQQALQQFxOgAhIAAgAC8BaAR/IAAtACEFQQELQQFxOgAgIAAgAC0AIkEBcQR/IAAoApABKAIQQQBHBUEAC0EBcToAHyAAAn9BASAALQAiQQFxDQAaQQEgACgCkAEoAgBBgAFxDQAaIAAoApABLwFSIAAvAWpHC0EBcToAHiAAIAAtAB5BAXEEfyAALwFqQQBHBUEAC0EBcToAHSAAIAAtAB5BAXEEfyAAKAKQAS8BUkEARwVBAAtBAXE6ABwgACAAKAKUATYCNCMAQRBrIgIgACgCNDYCDCACKAIMIgIgAigCMEEBajYCMCAALQAdQQFxBEAgACAALwFqQQAQeyICNgIMIAJFBEAgACgCmAFBCGpBGEEAEBQgACgCNBAbIABBfzYCnAEMAgsgACAAKAKYASAAKAI0IAAvAWpBACAAKAKYASgCHCAAKAIMEQUAIgI2AjAgAkUEQCAAKAI0EBsgAEF/NgKcAQwCCyAAKAI0EBsgACAAKAIwNgI0CyAALQAhQQFxBEAgACAAKAKYASAAKAI0IAAvAWgQsAEiAjYCMCACRQRAIAAoAjQQGyAAQX82ApwBDAILIAAoAjQQGyAAIAAoAjA2AjQLIAAtACBBAXEEQCAAIAAoApgBIAAoAjRBABCvASICNgIwIAJFBEAgACgCNBAbIABBfzYCnAEMAgsgACgCNBAbIAAgACgCMDYCNAsgAC0AH0EBcQRAIAAoApgBIQMgACgCNCEEIAAoApABKAIQIQUgACgCkAEvAVAhBiMAQRBrIgIkACACIAM2AgwgAiAENgIIIAIgBTYCBCACIAY2AgAgAigCDCACKAIIIAIoAgRBASACKAIAELIBIQMgAkEQaiQAIAAgAyICNgIwIAJFBEAgACgCNBAbIABBfzYCnAEMAgsgACgCNBAbIAAgACgCMDYCNAsgAC0AHEEBcQRAIABBADYCBAJAIAAoApABKAJUBEAgACAAKAKQASgCVDYCBAwBCyAAKAKYASgCHARAIAAgACgCmAEoAhw2AgQLCyAAIAAoApABLwFSQQEQeyICNgIIIAJFBEAgACgCmAFBCGpBGEEAEBQgACgCNBAbIABBfzYCnAEMAgsgACAAKAKYASAAKAI0IAAoApABLwFSQQEgACgCBCAAKAIIEQUAIgI2AjAgAkUEQCAAKAI0EBsgAEF/NgKcAQwCCyAAKAI0EBsgACAAKAIwNgI0CyAAIAAoApgBKAIAEDUiBzcDgAEgB0IAUwRAIAAoApgBQQhqIAAoApgBKAIAEBcgAEF/NgKcAQwBCyAAKAKYASEDIAAoAjQhBCAAKQNwIQcjAEHAwABrIgIkACACIAM2ArhAIAIgBDYCtEAgAiAHNwOoQAJAIAIoArRAEEhBAEgEQCACKAK4QEEIaiACKAK0QBAXIAJBfzYCvEAMAQsgAkEANgIMIAJCADcDEANAAkAgAiACKAK0QCACQSBqQoDAABArIgc3AxggB0IAVw0AIAIoArhAIAJBIGogAikDGBA2QQBIBEAgAkF/NgIMBSACKQMYQoDAAFINAiACKAK4QCgCVEUNAiACKQOoQEIAVw0CIAIgAikDGCACKQMQfDcDECACKAK4QCgCVCACKQMQuSACKQOoQLmjEFcMAgsLCyACKQMYQgBTBEAgAigCuEBBCGogAigCtEAQFyACQX82AgwLIAIoArRAEC8aIAIgAigCDDYCvEALIAIoArxAIQMgAkHAwABqJAAgACADNgIsIAAoAjQgAEE4ahA5QQBIBEAgACgCmAFBCGogACgCNBAXIABBfzYCLAsgACgCNCEDIwBBEGsiAiQAIAIgAzYCCAJAA0AgAigCCARAIAIoAggpAxhCgIAEg0IAUgRAIAIgAigCCEEAQgBBEBAgNwMAIAIpAwBCAFMEQCACQf8BOgAPDAQLIAIpAwBCA1UEQCACKAIIQQxqQRRBABAUIAJB/wE6AA8MBAsgAiACKQMAPAAPDAMFIAIgAigCCCgCADYCCAwCCwALCyACQQA6AA8LIAIsAA8hAyACQRBqJAAgACADIgI6ACMgAkEYdEEYdUEASARAIAAoApgBQQhqIAAoAjQQFyAAQX82AiwLIAAoAjQQGyAAKAIsQQBIBEAgAEF/NgKcAQwBCyAAIAAoApgBKAIAEDUiBzcDeCAHQgBTBEAgACgCmAFBCGogACgCmAEoAgAQFyAAQX82ApwBDAELIAAoApgBKAIAIAApA4gBEJsBQQBIBEAgACgCmAFBCGogACgCmAEoAgAQFyAAQX82ApwBDAELIAApAzhC5ACDQuQAUgRAIAAoApgBQQhqQRRBABAUIABBfzYCnAEMAQsgACgCkAEoAgBBIHFFBEACQCAAKQM4QhCDQgBSBEAgACgCkAEgACgCYDYCFAwBCyAAKAKQAUEUahABGgsLIAAoApABIAAvAWg2AhAgACgCkAEgACgCZDYCGCAAKAKQASAAKQNQNwMoIAAoApABIAApA3ggACkDgAF9NwMgIAAoApABIAAoApABLwEMQfn/A3EgAC0AI0EBdHI7AQwgACgCkAEhAyAAKAIkQYAIcUEARyEEIwBBEGsiAiQAIAIgAzYCDCACIAQ6AAsCQCACKAIMKAIQQQ5GBEAgAigCDEE/OwEKDAELIAIoAgwoAhBBDEYEQCACKAIMQS47AQoMAQsCQCACLQALQQFxRQRAIAIoAgxBABBlQQFxRQ0BCyACKAIMQS07AQoMAQsCQCACKAIMKAIQQQhHBEAgAigCDC8BUkEBRw0BCyACKAIMQRQ7AQoMAQsgAiACKAIMKAIwEFEiAzsBCCADQf//A3EEQCACKAIMKAIwKAIAIAIvAQhBAWtqLQAAQS9GBEAgAigCDEEUOwEKDAILCyACKAIMQQo7AQoLIAJBEGokACAAIAAoApgBIAAoApABIAAoAiQQVCICNgIsIAJBAEgEQCAAQX82ApwBDAELIAAoAiggACgCLEcEQCAAKAKYAUEIakEUQQAQFCAAQX82ApwBDAELIAAoApgBKAIAIAApA3gQmwFBAEgEQCAAKAKYAUEIaiAAKAKYASgCABAXIABBfzYCnAEMAQsgAEEANgKcAQsgACgCnAEhAiAAQaABaiQAIAJBAEgLBEAgAUEBNgIsIAEoAggEQCABKAIIEBsLDAQLIAEoAggEQCABKAIIEBsLDAELIAEoAgwiACAALwEMQff/A3E7AQwgASgCWCABKAIMQYACEFRBAEgEQCABQQE2AiwMAwsgASABKAJYIAEpA1AgASgCWEEIahBgIgc3AwAgB1AEQCABQQE2AiwMAwsgASgCWCgCACABKQMAQQAQJ0EASARAIAEoAlhBCGogASgCWCgCABAXIAFBATYCLAwDCwJ/IAEoAlghAiABKAIMKQMgIQcjAEGgwABrIgAkACAAIAI2AphAIAAgBzcDkEAgACAAKQOQQLo5AwACQANAIAApA5BAUEUEQCAAIAApA5BAQoDAAFYEfkKAwAAFIAApA5BACz4CDCAAKAKYQCgCACAAQRBqIAAoAgytIAAoAphAQQhqEGRBAEgEQCAAQX82ApxADAMLIAAoAphAIABBEGogACgCDK0QNkEASARAIABBfzYCnEAMAwUgACAAKQOQQCAANQIMfTcDkEAgACgCmEAoAlQgACsDACAAKQOQQLqhIAArAwCjEFcMAgsACwsgAEEANgKcQAsgACgCnEAhAiAAQaDAAGokACACQQBICwRAIAFBATYCLAwDCwsLIAEgASkDSEIBfDcDSAwBCwsgASgCLEUEQAJ/IAEoAlghACABKAIoIQMgASkDQCEHIwBBMGsiAiQAIAIgADYCKCACIAM2AiQgAiAHNwMYIAIgAigCKCgCABA1Igc3AxACQCAHQgBTBEAgAkF/NgIsDAELIAIoAighAyACKAIkIQQgAikDGCEHIwBBwAFrIgAkACAAIAM2ArQBIAAgBDYCsAEgACAHNwOoASAAIAAoArQBKAIAEDUiBzcDIAJAIAdCAFMEQCAAKAK0AUEIaiAAKAK0ASgCABAXIABCfzcDuAEMAQsgACAAKQMgNwOgASAAQQA6ABcgAEIANwMYA0AgACkDGCAAKQOoAVQEQCAAIAAoArQBKAJAIAAoArABIAApAxinQQN0aikDAKdBBHRqNgIMIAAgACgCtAECfyAAKAIMKAIEBEAgACgCDCgCBAwBCyAAKAIMKAIAC0GABBBUIgM2AhAgA0EASARAIABCfzcDuAEMAwsgACgCEARAIABBAToAFwsgACAAKQMYQgF8NwMYDAELCyAAIAAoArQBKAIAEDUiBzcDICAHQgBTBEAgACgCtAFBCGogACgCtAEoAgAQFyAAQn83A7gBDAELIAAgACkDICAAKQOgAX03A5gBAkAgACkDoAFC/////w9YBEAgACkDqAFC//8DWA0BCyAAQQE6ABcLIAAgAEEwakLiABApIgM2AiwgA0UEQCAAKAK0AUEIakEOQQAQFCAAQn83A7gBDAELIAAtABdBAXEEQCAAKAIsQecSQQQQQSAAKAIsQiwQLSAAKAIsQS0QHyAAKAIsQS0QHyAAKAIsQQAQISAAKAIsQQAQISAAKAIsIAApA6gBEC0gACgCLCAAKQOoARAtIAAoAiwgACkDmAEQLSAAKAIsIAApA6ABEC0gACgCLEHiEkEEEEEgACgCLEEAECEgACgCLCAAKQOgASAAKQOYAXwQLSAAKAIsQQEQIQsgACgCLEHsEkEEEEEgACgCLEEAECEgACgCLCAAKQOoAUL//wNaBH5C//8DBSAAKQOoAQunQf//A3EQHyAAKAIsIAApA6gBQv//A1oEfkL//wMFIAApA6gBC6dB//8DcRAfIAAoAiwgACkDmAFC/////w9aBH9BfwUgACkDmAGnCxAhIAAoAiwgACkDoAFC/////w9aBH9BfwUgACkDoAGnCxAhIAACfyAAKAK0AS0AKEEBcQRAIAAoArQBKAIkDAELIAAoArQBKAIgCzYClAEgACgCLAJ/IAAoApQBBEAgACgClAEvAQQMAQtBAAtB//8DcRAfAn8jAEEQayIDIAAoAiw2AgwgAygCDC0AAEEBcUULBEAgACgCtAFBCGpBFEEAEBQgACgCLBAWIABCfzcDuAEMAQsgACgCtAECfyMAQRBrIgMgACgCLDYCDCADKAIMKAIECwJ+IwBBEGsiAyAAKAIsNgIMAn4gAygCDC0AAEEBcQRAIAMoAgwpAxAMAQtCAAsLEDZBAEgEQCAAKAIsEBYgAEJ/NwO4AQwBCyAAKAIsEBYgACgClAEEQCAAKAK0ASAAKAKUASgCACAAKAKUAS8BBK0QNkEASARAIABCfzcDuAEMAgsLIAAgACkDmAE3A7gBCyAAKQO4ASEHIABBwAFqJAAgAiAHNwMAIAdCAFMEQCACQX82AiwMAQsgAiACKAIoKAIAEDUiBzcDCCAHQgBTBEAgAkF/NgIsDAELIAJBADYCLAsgAigCLCEAIAJBMGokACAAQQBICwRAIAFBATYCLAsLIAEoAigQFSABKAIsRQRAAn8gASgCWCgCACECIwBBEGsiACQAIAAgAjYCCAJAIAAoAggoAiRBAUcEQCAAKAIIQQxqQRJBABAUIABBfzYCDAwBCyAAKAIIKAIgQQFLBEAgACgCCEEMakEdQQAQFCAAQX82AgwMAQsgACgCCCgCIARAIAAoAggQL0EASARAIABBfzYCDAwCCwsgACgCCEEAQgBBCRAgQgBTBEAgACgCCEECNgIkIABBfzYCDAwBCyAAKAIIQQA2AiQgAEEANgIMCyAAKAIMIQIgAEEQaiQAIAILBEAgASgCWEEIaiABKAJYKAIAEBcgAUEBNgIsCwsgASgCWCgCVCECIwBBEGsiACQAIAAgAjYCDCAAKAIMRAAAAAAAAPA/EFcgAEEQaiQAIAEoAiwEQCABKAJYKAIAEGIgAUF/NgJcDAELIAEoAlgQPCABQQA2AlwLIAEoAlwhACABQeAAaiQAIAAL0g4CB38CfiMAQTBrIgMkACADIAA2AiggAyABNgIkIAMgAjYCICMAQRBrIgAgA0EIajYCDCAAKAIMQQA2AgAgACgCDEEANgIEIAAoAgxBADYCCCADKAIoIQAjAEEgayIEJAAgBCAANgIYIARCADcDECAEQn83AwggBCADQQhqNgIEAkACQCAEKAIYBEAgBCkDCEJ/WQ0BCyAEKAIEQRJBABAUIARBADYCHAwBCyAEKAIYIQAgBCkDECEKIAQpAwghCyAEKAIEIQEjAEGgAWsiAiQAIAIgADYCmAEgAkEANgKUASACIAo3A4gBIAIgCzcDgAEgAkEANgJ8IAIgATYCeAJAAkAgAigClAENACACKAKYAQ0AIAIoAnhBEkEAEBQgAkEANgKcAQwBCyACKQOAAUIAUwRAIAJCADcDgAELAkAgAikDiAFC////////////AFgEQCACKQOIASACKQOIASACKQOAAXxYDQELIAIoAnhBEkEAEBQgAkEANgKcAQwBCyACQYgBEBgiADYCdCAARQRAIAIoAnhBDkEAEBQgAkEANgKcAQwBCyACKAJ0QQA2AhggAigCmAEEQCACKAKYASIAEC5BAWoiARAYIgUEfyAFIAAgARAZBUEACyEAIAIoAnQgADYCGCAARQRAIAIoAnhBDkEAEBQgAigCdBAVIAJBADYCnAEMAgsLIAIoAnQgAigClAE2AhwgAigCdCACKQOIATcDaCACKAJ0IAIpA4ABNwNwAkAgAigCfARAIAIoAnQiACACKAJ8IgEpAwA3AyAgACABKQMwNwNQIAAgASkDKDcDSCAAIAEpAyA3A0AgACABKQMYNwM4IAAgASkDEDcDMCAAIAEpAwg3AyggAigCdEEANgIoIAIoAnQiACAAKQMgQv7///8PgzcDIAwBCyACKAJ0QSBqEDsLIAIoAnQpA3BCAFIEQCACKAJ0IAIoAnQpA3A3AzggAigCdCIAIAApAyBCBIQ3AyALIwBBEGsiACACKAJ0QdgAajYCDCAAKAIMQQA2AgAgACgCDEEANgIEIAAoAgxBADYCCCACKAJ0QQA2AoABIAIoAnRBADYChAEjAEEQayIAIAIoAnQ2AgwgACgCDEEANgIAIAAoAgxBADYCBCAAKAIMQQA2AgggAkF/NgIEIAJBBzYCAEEOIAIQNEI/hCEKIAIoAnQgCjcDEAJAIAIoAnQoAhgEQCACIAIoAnQoAhggAkEYahCmAUEATjoAFyACLQAXQQFxRQRAAkAgAigCdCkDaFBFDQAgAigCdCkDcFBFDQAgAigCdEL//wM3AxALCwwBCwJAIAIoAnQoAhwiACgCTEEASA0ACyAAKAI8IQBBACEFIwBBIGsiBiQAAn8CQCAAIAJBGGoiCRAKIgFBeEYEQCMAQSBrIgckACAAIAdBCGoQCSIIBH9BtJsBIAg2AgBBAAVBAQshCCAHQSBqJAAgCA0BCyABQYFgTwR/QbSbAUEAIAFrNgIAQX8FIAELDAELA0AgBSAGaiIBIAVBxxJqLQAAOgAAIAVBDkchByAFQQFqIQUgBw0ACwJAIAAEQEEPIQUgACEBA0AgAUEKTwRAIAVBAWohBSABQQpuIQEMAQsLIAUgBmpBADoAAANAIAYgBUEBayIFaiAAIABBCm4iAUEKbGtBMHI6AAAgAEEJSyEHIAEhACAHDQALDAELIAFBMDoAACAGQQA6AA8LIAYgCRACIgBBgWBPBH9BtJsBQQAgAGs2AgBBfwUgAAsLIQAgBkEgaiQAIAIgAEEATjoAFwsCQCACLQAXQQFxRQRAIAIoAnRB2ABqQQVBtJsBKAIAEBQMAQsgAigCdCkDIEIQg1AEQCACKAJ0IAIoAlg2AkggAigCdCIAIAApAyBCEIQ3AyALIAIoAiRBgOADcUGAgAJGBEAgAigCdEL/gQE3AxAgAikDQCACKAJ0KQNoIAIoAnQpA3B8VARAIAIoAnhBEkEAEBQgAigCdCgCGBAVIAIoAnQQFSACQQA2ApwBDAMLIAIoAnQpA3BQBEAgAigCdCACKQNAIAIoAnQpA2h9NwM4IAIoAnQiACAAKQMgQgSENwMgAkAgAigCdCgCGEUNACACKQOIAVBFDQAgAigCdEL//wM3AxALCwsLIAIoAnQiACAAKQMQQoCAEIQ3AxAgAkEeIAIoAnQgAigCeBCDASIANgJwIABFBEAgAigCdCgCGBAVIAIoAnQQFSACQQA2ApwBDAELIAIgAigCcDYCnAELIAIoApwBIQAgAkGgAWokACAEIAA2AhwLIAQoAhwhACAEQSBqJAAgAyAANgIYAkAgAEUEQCADKAIgIANBCGoQnQEgA0EIahA4IANBADYCLAwBCyADIAMoAhggAygCJCADQQhqEJwBIgA2AhwgAEUEQCADKAIYEBsgAygCICADQQhqEJ0BIANBCGoQOCADQQA2AiwMAQsgA0EIahA4IAMgAygCHDYCLAsgAygCLCEAIANBMGokACAAC5IfAQZ/IwBB4ABrIgQkACAEIAA2AlQgBCABNgJQIAQgAjcDSCAEIAM2AkQgBCAEKAJUNgJAIAQgBCgCUDYCPAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAQoAkQOEwYHAgwEBQoOAQMJEAsPDQgREQARCyAEQgA3A1gMEQsgBCgCQCgCGEUEQCAEKAJAQRxBABAUIARCfzcDWAwRCyAEKAJAIQAjAEGAAWsiASQAIAEgADYCeCABIAEoAngoAhgQLkEIahAYIgA2AnQCQCAARQRAIAEoAnhBDkEAEBQgAUF/NgJ8DAELAkAgASgCeCgCGCABQRBqEKYBRQRAIAEgASgCHDYCbAwBCyABQX82AmwLIAEoAnQhACABIAEoAngoAhg2AgAgAEGrEiABEG8gASgCdCEDIAEoAmwhByMAQTBrIgAkACAAIAM2AiggACAHNgIkIABBADYCECAAIAAoAiggACgCKBAuajYCGCAAIAAoAhhBAWs2AhwDQCAAKAIcIAAoAihPBH8gACgCHCwAAEHYAEYFQQALQQFxBEAgACAAKAIQQQFqNgIQIAAgACgCHEEBazYCHAwBCwsCQCAAKAIQRQRAQbSbAUEcNgIAIABBfzYCLAwBCyAAIAAoAhxBAWo2AhwDQCMAQRBrIgckAAJAAn8jAEEQayIDJAAgAyAHQQhqNgIIIANBBDsBBiADQegLQQBBABBsIgU2AgACQCAFQQBIBEAgA0EAOgAPDAELAn8gAygCACEGIAMoAgghCCADLwEGIQkjAEEQayIFJAAgBSAJNgIMIAUgCDYCCCAGIAVBCGpBASAFQQRqEAYiBgR/QbSbASAGNgIAQX8FQQALIQYgBSgCBCEIIAVBEGokACADLwEGQX8gCCAGG0cLBEAgAygCABBrIANBADoADwwBCyADKAIAEGsgA0EBOgAPCyADLQAPQQFxIQUgA0EQaiQAIAULBEAgByAHKAIINgIMDAELQcCgAS0AAEEBcUUEQEEAEAEhBgJAQciZASgCACIDRQRAQcyZASgCACAGNgIADAELQdCZAUEDQQNBASADQQdGGyADQR9GGzYCAEG8oAFBADYCAEHMmQEoAgAhBSADQQFOBEAgBq0hAkEAIQYDQCAFIAZBAnRqIAJCrf7V5NSF/ajYAH5CAXwiAkIgiD4CACAGQQFqIgYgA0cNAAsLIAUgBSgCAEEBcjYCAAsLQcyZASgCACEDAkBByJkBKAIAIgVFBEAgAyADKAIAQe2cmY4EbEG54ABqQf////8HcSIDNgIADAELIANB0JkBKAIAIgZBAnRqIgggCCgCACADQbygASgCACIIQQJ0aigCAGoiAzYCAEG8oAFBACAIQQFqIgggBSAIRhs2AgBB0JkBQQAgBkEBaiIGIAUgBkYbNgIAIANBAXYhAwsgByADNgIMCyAHKAIMIQMgB0EQaiQAIAAgAzYCDCAAIAAoAhw2AhQDQCAAKAIUIAAoAhhJBEAgACAAKAIMQSRwOgALAn8gACwAC0EKSARAIAAsAAtBMGoMAQsgACwAC0HXAGoLIQMgACAAKAIUIgdBAWo2AhQgByADOgAAIAAgACgCDEEkbjYCDAwBCwsgACgCKCEDIAAgACgCJEF/RgR/QbYDBSAAKAIkCzYCACAAIANBwoEgIAAQbCIDNgIgIANBAE4EQCAAKAIkQX9HBEAgACgCKCAAKAIkEA8iA0GBYE8Ef0G0mwFBACADazYCAEEABSADCxoLIAAgACgCIDYCLAwCC0G0mwEoAgBBFEYNAAsgAEF/NgIsCyAAKAIsIQMgAEEwaiQAIAEgAyIANgJwIABBf0YEQCABKAJ4QQxBtJsBKAIAEBQgASgCdBAVIAFBfzYCfAwBCyABIAEoAnBBoxIQoQEiADYCaCAARQRAIAEoAnhBDEG0mwEoAgAQFCABKAJwEGsgASgCdBBtGiABKAJ0EBUgAUF/NgJ8DAELIAEoAnggASgCaDYChAEgASgCeCABKAJ0NgKAASABQQA2AnwLIAEoAnwhACABQYABaiQAIAQgAKw3A1gMEAsgBCgCQCgCGARAIAQoAkAoAhwQVhogBCgCQEEANgIcCyAEQgA3A1gMDwsgBCgCQCgChAEQVkEASARAIAQoAkBBADYChAEgBCgCQEEGQbSbASgCABAUCyAEKAJAQQA2AoQBIAQoAkAoAoABIAQoAkAoAhgQCCIAQYFgTwR/QbSbAUEAIABrNgIAQX8FIAALQQBIBEAgBCgCQEECQbSbASgCABAUIARCfzcDWAwPCyAEKAJAKAKAARAVIAQoAkBBADYCgAEgBEIANwNYDA4LIAQgBCgCQCAEKAJQIAQpA0gQQzcDWAwNCyAEKAJAKAIYEBUgBCgCQCgCgAEQFSAEKAJAKAIcBEAgBCgCQCgCHBBWGgsgBCgCQBAVIARCADcDWAwMCyAEKAJAKAIYBEAgBCgCQCgCGCEBIwBBIGsiACQAIAAgATYCGCAAQQA6ABcgAEGAgCA2AgwCQCAALQAXQQFxBEAgACAAKAIMQQJyNgIMDAELIAAgACgCDDYCDAsgACgCGCEBIAAoAgwhAyAAQbYDNgIAIAAgASADIAAQbCIBNgIQAkAgAUEASARAIABBADYCHAwBCyAAIAAoAhBBoxJBoBIgAC0AF0EBcRsQoQEiATYCCCABRQRAIABBADYCHAwBCyAAIAAoAgg2AhwLIAAoAhwhASAAQSBqJAAgBCgCQCABNgIcIAFFBEAgBCgCQEELQbSbASgCABAUIARCfzcDWAwNCwsgBCgCQCkDaEIAUgRAIAQoAkAoAhwgBCgCQCkDaCAEKAJAEJ8BQQBIBEAgBEJ/NwNYDA0LCyAEKAJAQgA3A3ggBEIANwNYDAsLAkAgBCgCQCkDcEIAUgRAIAQgBCgCQCkDcCAEKAJAKQN4fTcDMCAEKQMwIAQpA0hWBEAgBCAEKQNINwMwCwwBCyAEIAQpA0g3AzALIAQpAzBC/////w9WBEAgBEL/////DzcDMAsgBAJ/IAQoAjwhByAEKQMwpyEAIAQoAkAoAhwiAygCTBogAyADLQBKIgFBAWsgAXI6AEogAygCCCADKAIEIgVrIgFBAUgEfyAABSAHIAUgASAAIAAgAUsbIgEQGRogAyADKAIEIAFqNgIEIAEgB2ohByAAIAFrCyIBBEADQAJAAn8gAyADLQBKIgVBAWsgBXI6AEogAygCFCADKAIcSwRAIANBAEEAIAMoAiQRAQAaCyADQQA2AhwgA0IANwMQIAMoAgAiBUEEcQRAIAMgBUEgcjYCAEF/DAELIAMgAygCLCADKAIwaiIGNgIIIAMgBjYCBCAFQRt0QR91C0UEQCADIAcgASADKAIgEQEAIgVBAWpBAUsNAQsgACABawwDCyAFIAdqIQcgASAFayIBDQALCyAACyIANgIsIABFBEACfyAEKAJAKAIcIgAoAkxBf0wEQCAAKAIADAELIAAoAgALQQV2QQFxBEAgBCgCQEEFQbSbASgCABAUIARCfzcDWAwMCwsgBCgCQCIAIAApA3ggBCgCLK18NwN4IAQgBCgCLK03A1gMCgsgBCgCQCgCGBBtQQBIBEAgBCgCQEEWQbSbASgCABAUIARCfzcDWAwKCyAEQgA3A1gMCQsgBCgCQCgChAEEQCAEKAJAKAKEARBWGiAEKAJAQQA2AoQBCyAEKAJAKAKAARBtGiAEKAJAKAKAARAVIAQoAkBBADYCgAEgBEIANwNYDAgLIAQCfyAEKQNIQhBUBEAgBCgCQEESQQAQFEEADAELIAQoAlALNgIYIAQoAhhFBEAgBEJ/NwNYDAgLIARBATYCHAJAAkACQAJAAkAgBCgCGCgCCA4DAAIBAwsgBCAEKAIYKQMANwMgDAMLAkAgBCgCQCkDcFAEQCAEKAJAKAIcIAQoAhgpAwBBAiAEKAJAEGpBAEgEQCAEQn83A1gMDQsgBCAEKAJAKAIcEKMBIgI3AyAgAkIAUwRAIAQoAkBBBEG0mwEoAgAQFCAEQn83A1gMDQsgBCAEKQMgIAQoAkApA2h9NwMgIARBADYCHAwBCyAEIAQoAkApA3AgBCgCGCkDAHw3AyALDAILIAQgBCgCQCkDeCAEKAIYKQMAfDcDIAwBCyAEKAJAQRJBABAUIARCfzcDWAwICwJAAkAgBCkDIEIAUw0AIAQoAkApA3BCAFIEQCAEKQMgIAQoAkApA3BWDQELIAQoAkApA2ggBCkDICAEKAJAKQNofFgNAQsgBCgCQEESQQAQFCAEQn83A1gMCAsgBCgCQCAEKQMgNwN4IAQoAhwEQCAEKAJAKAIcIAQoAkApA3ggBCgCQCkDaHwgBCgCQBCfAUEASARAIARCfzcDWAwJCwsgBEIANwNYDAcLIAQCfyAEKQNIQhBUBEAgBCgCQEESQQAQFEEADAELIAQoAlALNgIUIAQoAhRFBEAgBEJ/NwNYDAcLIAQoAkAoAoQBIAQoAhQpAwAgBCgCFCgCCCAEKAJAEGpBAEgEQCAEQn83A1gMBwsgBEIANwNYDAYLIAQpA0hCOFQEQCAEQn83A1gMBgsCfyMAQRBrIgAgBCgCQEHYAGo2AgwgACgCDCgCAAsEQCAEKAJAAn8jAEEQayIAIAQoAkBB2ABqNgIMIAAoAgwoAgALAn8jAEEQayIAIAQoAkBB2ABqNgIMIAAoAgwoAgQLEBQgBEJ/NwNYDAYLIAQoAlAiACAEKAJAIgEpACA3AAAgACABKQBQNwAwIAAgASkASDcAKCAAIAEpAEA3ACAgACABKQA4NwAYIAAgASkAMDcAECAAIAEpACg3AAggBEI4NwNYDAULIAQgBCgCQCkDEDcDWAwECyAEIAQoAkApA3g3A1gMAwsgBCAEKAJAKAKEARCjATcDCCAEKQMIQgBTBEAgBCgCQEEeQbSbASgCABAUIARCfzcDWAwDCyAEIAQpAwg3A1gMAgsgBCgCQCgChAEiACgCTEEAThogACAAKAIAQU9xNgIAIAQCfyAEKAJQIQEgBCkDSKciACAAAn8gBCgCQCgChAEiAygCTEF/TARAIAEgACADEHEMAQsgASAAIAMQcQsiAUYNABogAQs2AgQCQCAEKQNIIAQoAgStUQRAAn8gBCgCQCgChAEiACgCTEF/TARAIAAoAgAMAQsgACgCAAtBBXZBAXFFDQELIAQoAkBBBkG0mwEoAgAQFCAEQn83A1gMAgsgBCAEKAIErTcDWAwBCyAEKAJAQRxBABAUIARCfzcDWAsgBCkDWCECIARB4ABqJAAgAgsJACAAKAI8EAUL5AEBBH8jAEEgayIDJAAgAyABNgIQIAMgAiAAKAIwIgRBAEdrNgIUIAAoAiwhBSADIAQ2AhwgAyAFNgIYQX8hBAJAAkAgACgCPCADQRBqQQIgA0EMahAGIgUEf0G0mwEgBTYCAEF/BUEAC0UEQCADKAIMIgRBAEoNAQsgACAAKAIAIARBMHFBEHNyNgIADAELIAQgAygCFCIGTQ0AIAAgACgCLCIFNgIEIAAgBSAEIAZrajYCCCAAKAIwBEAgACAFQQFqNgIEIAEgAmpBAWsgBS0AADoAAAsgAiEECyADQSBqJAAgBAv0AgEHfyMAQSBrIgMkACADIAAoAhwiBTYCECAAKAIUIQQgAyACNgIcIAMgATYCGCADIAQgBWsiATYCFCABIAJqIQVBAiEHIANBEGohAQJ/AkACQCAAKAI8IANBEGpBAiADQQxqEAMiBAR/QbSbASAENgIAQX8FQQALRQRAA0AgBSADKAIMIgRGDQIgBEF/TA0DIAEgBCABKAIEIghLIgZBA3RqIgkgBCAIQQAgBhtrIgggCSgCAGo2AgAgAUEMQQQgBhtqIgkgCSgCACAIazYCACAFIARrIQUgACgCPCABQQhqIAEgBhsiASAHIAZrIgcgA0EMahADIgQEf0G0mwEgBDYCAEF/BUEAC0UNAAsLIAVBf0cNAQsgACAAKAIsIgE2AhwgACABNgIUIAAgASAAKAIwajYCECACDAELIABBADYCHCAAQgA3AxAgACAAKAIAQSByNgIAQQAgB0ECRg0AGiACIAEoAgRrCyEAIANBIGokACAAC1IBAX8jAEEQayIDJAAgACgCPCABpyABQiCIpyACQf8BcSADQQhqEA0iAAR/QbSbASAANgIAQX8FQQALIQAgAykDCCEBIANBEGokAEJ/IAEgABsL1QQBBX8jAEGwAWsiASQAIAEgADYCqAEgASgCqAEQOAJAAkAgASgCqAEoAgBBAE4EQCABKAKoASgCAEGAFCgCAEgNAQsgASABKAKoASgCADYCECABQSBqQY8SIAFBEGoQbyABQQA2AqQBIAEgAUEgajYCoAEMAQsgASABKAKoASgCAEECdEGAE2ooAgA2AqQBAkACQAJAAkAgASgCqAEoAgBBAnRBkBRqKAIAQQFrDgIAAQILIAEoAqgBKAIEIQJBkJkBKAIAIQRBACEAAkACQANAIAIgAEGgiAFqLQAARwRAQdcAIQMgAEEBaiIAQdcARw0BDAILCyAAIgMNAEGAiQEhAgwBC0GAiQEhAANAIAAtAAAhBSAAQQFqIgIhACAFDQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMI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ADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyAB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AG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=";
  5402. if (!isDataURI(wasmBinaryFile)) {
  5403. wasmBinaryFile = locateFile(wasmBinaryFile);
  5404. }
  5405. function getBinary(file) {
  5406. try {
  5407. if (file == wasmBinaryFile && wasmBinary) {
  5408. return new Uint8Array(wasmBinary);
  5409. }
  5410. var binary = tryParseAsDataURI(file);
  5411. if (binary) {
  5412. return binary;
  5413. }
  5414. if (readBinary) {
  5415. return readBinary(file);
  5416. } else {
  5417. throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";
  5418. }
  5419. } catch (err2) {
  5420. abort(err2);
  5421. }
  5422. }
  5423. function instantiateSync(file, info) {
  5424. var instance;
  5425. var module2;
  5426. var binary;
  5427. try {
  5428. binary = getBinary(file);
  5429. module2 = new WebAssembly.Module(binary);
  5430. instance = new WebAssembly.Instance(module2, info);
  5431. } catch (e) {
  5432. var str = e.toString();
  5433. err("failed to compile wasm module: " + str);
  5434. if (str.includes("imported Memory") || str.includes("memory import")) {
  5435. err(
  5436. "Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."
  5437. );
  5438. }
  5439. throw e;
  5440. }
  5441. return [instance, module2];
  5442. }
  5443. function createWasm() {
  5444. var info = { a: asmLibraryArg };
  5445. function receiveInstance(instance, module2) {
  5446. var exports3 = instance.exports;
  5447. Module["asm"] = exports3;
  5448. wasmMemory = Module["asm"]["u"];
  5449. updateGlobalBufferAndViews(wasmMemory.buffer);
  5450. wasmTable = Module["asm"]["pa"];
  5451. addOnInit(Module["asm"]["v"]);
  5452. removeRunDependency();
  5453. }
  5454. addRunDependency();
  5455. if (Module["instantiateWasm"]) {
  5456. try {
  5457. var exports2 = Module["instantiateWasm"](info, receiveInstance);
  5458. return exports2;
  5459. } catch (e) {
  5460. err("Module.instantiateWasm callback failed with error: " + e);
  5461. return false;
  5462. }
  5463. }
  5464. var result = instantiateSync(wasmBinaryFile, info);
  5465. receiveInstance(result[0]);
  5466. return Module["asm"];
  5467. }
  5468. var tempDouble;
  5469. var tempI64;
  5470. function callRuntimeCallbacks(callbacks) {
  5471. while (callbacks.length > 0) {
  5472. var callback = callbacks.shift();
  5473. if (typeof callback == "function") {
  5474. callback(Module);
  5475. continue;
  5476. }
  5477. var func = callback.func;
  5478. if (typeof func === "number") {
  5479. if (callback.arg === void 0) {
  5480. wasmTable.get(func)();
  5481. } else {
  5482. wasmTable.get(func)(callback.arg);
  5483. }
  5484. } else {
  5485. func(callback.arg === void 0 ? null : callback.arg);
  5486. }
  5487. }
  5488. }
  5489. function _gmtime_r(time, tmPtr) {
  5490. var date = new Date(HEAP32[time >> 2] * 1e3);
  5491. HEAP32[tmPtr >> 2] = date.getUTCSeconds();
  5492. HEAP32[tmPtr + 4 >> 2] = date.getUTCMinutes();
  5493. HEAP32[tmPtr + 8 >> 2] = date.getUTCHours();
  5494. HEAP32[tmPtr + 12 >> 2] = date.getUTCDate();
  5495. HEAP32[tmPtr + 16 >> 2] = date.getUTCMonth();
  5496. HEAP32[tmPtr + 20 >> 2] = date.getUTCFullYear() - 1900;
  5497. HEAP32[tmPtr + 24 >> 2] = date.getUTCDay();
  5498. HEAP32[tmPtr + 36 >> 2] = 0;
  5499. HEAP32[tmPtr + 32 >> 2] = 0;
  5500. var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);
  5501. var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0;
  5502. HEAP32[tmPtr + 28 >> 2] = yday;
  5503. if (!_gmtime_r.GMTString)
  5504. _gmtime_r.GMTString = allocateUTF8("GMT");
  5505. HEAP32[tmPtr + 40 >> 2] = _gmtime_r.GMTString;
  5506. return tmPtr;
  5507. }
  5508. function ___gmtime_r(a0, a1) {
  5509. return _gmtime_r(a0, a1);
  5510. }
  5511. var PATH = {
  5512. splitPath: function(filename) {
  5513. var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
  5514. return splitPathRe.exec(filename).slice(1);
  5515. },
  5516. normalizeArray: function(parts, allowAboveRoot) {
  5517. var up = 0;
  5518. for (var i = parts.length - 1; i >= 0; i--) {
  5519. var last = parts[i];
  5520. if (last === ".") {
  5521. parts.splice(i, 1);
  5522. } else if (last === "..") {
  5523. parts.splice(i, 1);
  5524. up++;
  5525. } else if (up) {
  5526. parts.splice(i, 1);
  5527. up--;
  5528. }
  5529. }
  5530. if (allowAboveRoot) {
  5531. for (; up; up--) {
  5532. parts.unshift("..");
  5533. }
  5534. }
  5535. return parts;
  5536. },
  5537. normalize: function(path) {
  5538. var isAbsolute = path.charAt(0) === "/", trailingSlash = path.substr(-1) === "/";
  5539. path = PATH.normalizeArray(
  5540. path.split("/").filter(function(p) {
  5541. return !!p;
  5542. }),
  5543. !isAbsolute
  5544. ).join("/");
  5545. if (!path && !isAbsolute) {
  5546. path = ".";
  5547. }
  5548. if (path && trailingSlash) {
  5549. path += "/";
  5550. }
  5551. return (isAbsolute ? "/" : "") + path;
  5552. },
  5553. dirname: function(path) {
  5554. var result = PATH.splitPath(path), root = result[0], dir = result[1];
  5555. if (!root && !dir) {
  5556. return ".";
  5557. }
  5558. if (dir) {
  5559. dir = dir.substr(0, dir.length - 1);
  5560. }
  5561. return root + dir;
  5562. },
  5563. basename: function(path) {
  5564. if (path === "/")
  5565. return "/";
  5566. path = PATH.normalize(path);
  5567. path = path.replace(/\/$/, "");
  5568. var lastSlash = path.lastIndexOf("/");
  5569. if (lastSlash === -1)
  5570. return path;
  5571. return path.substr(lastSlash + 1);
  5572. },
  5573. extname: function(path) {
  5574. return PATH.splitPath(path)[3];
  5575. },
  5576. join: function() {
  5577. var paths = Array.prototype.slice.call(arguments, 0);
  5578. return PATH.normalize(paths.join("/"));
  5579. },
  5580. join2: function(l, r) {
  5581. return PATH.normalize(l + "/" + r);
  5582. }
  5583. };
  5584. function getRandomDevice() {
  5585. {
  5586. try {
  5587. var crypto_module = require("crypto");
  5588. return function() {
  5589. return crypto_module["randomBytes"](1)[0];
  5590. };
  5591. } catch (e) {
  5592. }
  5593. }
  5594. return function() {
  5595. abort("randomDevice");
  5596. };
  5597. }
  5598. var PATH_FS = {
  5599. resolve: function() {
  5600. var resolvedPath = "", resolvedAbsolute = false;
  5601. for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
  5602. var path = i >= 0 ? arguments[i] : FS.cwd();
  5603. if (typeof path !== "string") {
  5604. throw new TypeError("Arguments to path.resolve must be strings");
  5605. } else if (!path) {
  5606. return "";
  5607. }
  5608. resolvedPath = path + "/" + resolvedPath;
  5609. resolvedAbsolute = path.charAt(0) === "/";
  5610. }
  5611. resolvedPath = PATH.normalizeArray(
  5612. resolvedPath.split("/").filter(function(p) {
  5613. return !!p;
  5614. }),
  5615. !resolvedAbsolute
  5616. ).join("/");
  5617. return (resolvedAbsolute ? "/" : "") + resolvedPath || ".";
  5618. },
  5619. relative: function(from, to) {
  5620. from = PATH_FS.resolve(from).substr(1);
  5621. to = PATH_FS.resolve(to).substr(1);
  5622. function trim(arr) {
  5623. var start = 0;
  5624. for (; start < arr.length; start++) {
  5625. if (arr[start] !== "")
  5626. break;
  5627. }
  5628. var end = arr.length - 1;
  5629. for (; end >= 0; end--) {
  5630. if (arr[end] !== "")
  5631. break;
  5632. }
  5633. if (start > end)
  5634. return [];
  5635. return arr.slice(start, end - start + 1);
  5636. }
  5637. var fromParts = trim(from.split("/"));
  5638. var toParts = trim(to.split("/"));
  5639. var length = Math.min(fromParts.length, toParts.length);
  5640. var samePartsLength = length;
  5641. for (var i = 0; i < length; i++) {
  5642. if (fromParts[i] !== toParts[i]) {
  5643. samePartsLength = i;
  5644. break;
  5645. }
  5646. }
  5647. var outputParts = [];
  5648. for (var i = samePartsLength; i < fromParts.length; i++) {
  5649. outputParts.push("..");
  5650. }
  5651. outputParts = outputParts.concat(toParts.slice(samePartsLength));
  5652. return outputParts.join("/");
  5653. }
  5654. };
  5655. var TTY = {
  5656. ttys: [],
  5657. init: function() {
  5658. },
  5659. shutdown: function() {
  5660. },
  5661. register: function(dev, ops) {
  5662. TTY.ttys[dev] = { input: [], output: [], ops };
  5663. FS.registerDevice(dev, TTY.stream_ops);
  5664. },
  5665. stream_ops: {
  5666. open: function(stream) {
  5667. var tty = TTY.ttys[stream.node.rdev];
  5668. if (!tty) {
  5669. throw new FS.ErrnoError(43);
  5670. }
  5671. stream.tty = tty;
  5672. stream.seekable = false;
  5673. },
  5674. close: function(stream) {
  5675. stream.tty.ops.flush(stream.tty);
  5676. },
  5677. flush: function(stream) {
  5678. stream.tty.ops.flush(stream.tty);
  5679. },
  5680. read: function(stream, buffer2, offset, length, pos) {
  5681. if (!stream.tty || !stream.tty.ops.get_char) {
  5682. throw new FS.ErrnoError(60);
  5683. }
  5684. var bytesRead = 0;
  5685. for (var i = 0; i < length; i++) {
  5686. var result;
  5687. try {
  5688. result = stream.tty.ops.get_char(stream.tty);
  5689. } catch (e) {
  5690. throw new FS.ErrnoError(29);
  5691. }
  5692. if (result === void 0 && bytesRead === 0) {
  5693. throw new FS.ErrnoError(6);
  5694. }
  5695. if (result === null || result === void 0)
  5696. break;
  5697. bytesRead++;
  5698. buffer2[offset + i] = result;
  5699. }
  5700. if (bytesRead) {
  5701. stream.node.timestamp = Date.now();
  5702. }
  5703. return bytesRead;
  5704. },
  5705. write: function(stream, buffer2, offset, length, pos) {
  5706. if (!stream.tty || !stream.tty.ops.put_char) {
  5707. throw new FS.ErrnoError(60);
  5708. }
  5709. try {
  5710. for (var i = 0; i < length; i++) {
  5711. stream.tty.ops.put_char(stream.tty, buffer2[offset + i]);
  5712. }
  5713. } catch (e) {
  5714. throw new FS.ErrnoError(29);
  5715. }
  5716. if (length) {
  5717. stream.node.timestamp = Date.now();
  5718. }
  5719. return i;
  5720. }
  5721. },
  5722. default_tty_ops: {
  5723. get_char: function(tty) {
  5724. if (!tty.input.length) {
  5725. var result = null;
  5726. {
  5727. var BUFSIZE = 256;
  5728. var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE);
  5729. var bytesRead = 0;
  5730. try {
  5731. bytesRead = nodeFS.readSync(
  5732. process.stdin.fd,
  5733. buf,
  5734. 0,
  5735. BUFSIZE,
  5736. null
  5737. );
  5738. } catch (e) {
  5739. if (e.toString().includes("EOF"))
  5740. bytesRead = 0;
  5741. else
  5742. throw e;
  5743. }
  5744. if (bytesRead > 0) {
  5745. result = buf.slice(0, bytesRead).toString("utf-8");
  5746. } else {
  5747. result = null;
  5748. }
  5749. }
  5750. if (!result) {
  5751. return null;
  5752. }
  5753. tty.input = intArrayFromString(result, true);
  5754. }
  5755. return tty.input.shift();
  5756. },
  5757. put_char: function(tty, val) {
  5758. if (val === null || val === 10) {
  5759. out(UTF8ArrayToString(tty.output, 0));
  5760. tty.output = [];
  5761. } else {
  5762. if (val != 0)
  5763. tty.output.push(val);
  5764. }
  5765. },
  5766. flush: function(tty) {
  5767. if (tty.output && tty.output.length > 0) {
  5768. out(UTF8ArrayToString(tty.output, 0));
  5769. tty.output = [];
  5770. }
  5771. }
  5772. },
  5773. default_tty1_ops: {
  5774. put_char: function(tty, val) {
  5775. if (val === null || val === 10) {
  5776. err(UTF8ArrayToString(tty.output, 0));
  5777. tty.output = [];
  5778. } else {
  5779. if (val != 0)
  5780. tty.output.push(val);
  5781. }
  5782. },
  5783. flush: function(tty) {
  5784. if (tty.output && tty.output.length > 0) {
  5785. err(UTF8ArrayToString(tty.output, 0));
  5786. tty.output = [];
  5787. }
  5788. }
  5789. }
  5790. };
  5791. function mmapAlloc(size) {
  5792. var alignedSize = alignMemory(size, 65536);
  5793. var ptr = _malloc(alignedSize);
  5794. while (size < alignedSize)
  5795. HEAP8[ptr + size++] = 0;
  5796. return ptr;
  5797. }
  5798. var MEMFS = {
  5799. ops_table: null,
  5800. mount: function(mount) {
  5801. return MEMFS.createNode(null, "/", 16384 | 511, 0);
  5802. },
  5803. createNode: function(parent, name, mode, dev) {
  5804. if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
  5805. throw new FS.ErrnoError(63);
  5806. }
  5807. if (!MEMFS.ops_table) {
  5808. MEMFS.ops_table = {
  5809. dir: {
  5810. node: {
  5811. getattr: MEMFS.node_ops.getattr,
  5812. setattr: MEMFS.node_ops.setattr,
  5813. lookup: MEMFS.node_ops.lookup,
  5814. mknod: MEMFS.node_ops.mknod,
  5815. rename: MEMFS.node_ops.rename,
  5816. unlink: MEMFS.node_ops.unlink,
  5817. rmdir: MEMFS.node_ops.rmdir,
  5818. readdir: MEMFS.node_ops.readdir,
  5819. symlink: MEMFS.node_ops.symlink
  5820. },
  5821. stream: { llseek: MEMFS.stream_ops.llseek }
  5822. },
  5823. file: {
  5824. node: {
  5825. getattr: MEMFS.node_ops.getattr,
  5826. setattr: MEMFS.node_ops.setattr
  5827. },
  5828. stream: {
  5829. llseek: MEMFS.stream_ops.llseek,
  5830. read: MEMFS.stream_ops.read,
  5831. write: MEMFS.stream_ops.write,
  5832. allocate: MEMFS.stream_ops.allocate,
  5833. mmap: MEMFS.stream_ops.mmap,
  5834. msync: MEMFS.stream_ops.msync
  5835. }
  5836. },
  5837. link: {
  5838. node: {
  5839. getattr: MEMFS.node_ops.getattr,
  5840. setattr: MEMFS.node_ops.setattr,
  5841. readlink: MEMFS.node_ops.readlink
  5842. },
  5843. stream: {}
  5844. },
  5845. chrdev: {
  5846. node: {
  5847. getattr: MEMFS.node_ops.getattr,
  5848. setattr: MEMFS.node_ops.setattr
  5849. },
  5850. stream: FS.chrdev_stream_ops
  5851. }
  5852. };
  5853. }
  5854. var node = FS.createNode(parent, name, mode, dev);
  5855. if (FS.isDir(node.mode)) {
  5856. node.node_ops = MEMFS.ops_table.dir.node;
  5857. node.stream_ops = MEMFS.ops_table.dir.stream;
  5858. node.contents = {};
  5859. } else if (FS.isFile(node.mode)) {
  5860. node.node_ops = MEMFS.ops_table.file.node;
  5861. node.stream_ops = MEMFS.ops_table.file.stream;
  5862. node.usedBytes = 0;
  5863. node.contents = null;
  5864. } else if (FS.isLink(node.mode)) {
  5865. node.node_ops = MEMFS.ops_table.link.node;
  5866. node.stream_ops = MEMFS.ops_table.link.stream;
  5867. } else if (FS.isChrdev(node.mode)) {
  5868. node.node_ops = MEMFS.ops_table.chrdev.node;
  5869. node.stream_ops = MEMFS.ops_table.chrdev.stream;
  5870. }
  5871. node.timestamp = Date.now();
  5872. if (parent) {
  5873. parent.contents[name] = node;
  5874. parent.timestamp = node.timestamp;
  5875. }
  5876. return node;
  5877. },
  5878. getFileDataAsTypedArray: function(node) {
  5879. if (!node.contents)
  5880. return new Uint8Array(0);
  5881. if (node.contents.subarray)
  5882. return node.contents.subarray(0, node.usedBytes);
  5883. return new Uint8Array(node.contents);
  5884. },
  5885. expandFileStorage: function(node, newCapacity) {
  5886. var prevCapacity = node.contents ? node.contents.length : 0;
  5887. if (prevCapacity >= newCapacity)
  5888. return;
  5889. var CAPACITY_DOUBLING_MAX = 1024 * 1024;
  5890. newCapacity = Math.max(
  5891. newCapacity,
  5892. prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0
  5893. );
  5894. if (prevCapacity != 0)
  5895. newCapacity = Math.max(newCapacity, 256);
  5896. var oldContents = node.contents;
  5897. node.contents = new Uint8Array(newCapacity);
  5898. if (node.usedBytes > 0)
  5899. node.contents.set(oldContents.subarray(0, node.usedBytes), 0);
  5900. },
  5901. resizeFileStorage: function(node, newSize) {
  5902. if (node.usedBytes == newSize)
  5903. return;
  5904. if (newSize == 0) {
  5905. node.contents = null;
  5906. node.usedBytes = 0;
  5907. } else {
  5908. var oldContents = node.contents;
  5909. node.contents = new Uint8Array(newSize);
  5910. if (oldContents) {
  5911. node.contents.set(
  5912. oldContents.subarray(0, Math.min(newSize, node.usedBytes))
  5913. );
  5914. }
  5915. node.usedBytes = newSize;
  5916. }
  5917. },
  5918. node_ops: {
  5919. getattr: function(node) {
  5920. var attr = {};
  5921. attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
  5922. attr.ino = node.id;
  5923. attr.mode = node.mode;
  5924. attr.nlink = 1;
  5925. attr.uid = 0;
  5926. attr.gid = 0;
  5927. attr.rdev = node.rdev;
  5928. if (FS.isDir(node.mode)) {
  5929. attr.size = 4096;
  5930. } else if (FS.isFile(node.mode)) {
  5931. attr.size = node.usedBytes;
  5932. } else if (FS.isLink(node.mode)) {
  5933. attr.size = node.link.length;
  5934. } else {
  5935. attr.size = 0;
  5936. }
  5937. attr.atime = new Date(node.timestamp);
  5938. attr.mtime = new Date(node.timestamp);
  5939. attr.ctime = new Date(node.timestamp);
  5940. attr.blksize = 4096;
  5941. attr.blocks = Math.ceil(attr.size / attr.blksize);
  5942. return attr;
  5943. },
  5944. setattr: function(node, attr) {
  5945. if (attr.mode !== void 0) {
  5946. node.mode = attr.mode;
  5947. }
  5948. if (attr.timestamp !== void 0) {
  5949. node.timestamp = attr.timestamp;
  5950. }
  5951. if (attr.size !== void 0) {
  5952. MEMFS.resizeFileStorage(node, attr.size);
  5953. }
  5954. },
  5955. lookup: function(parent, name) {
  5956. throw FS.genericErrors[44];
  5957. },
  5958. mknod: function(parent, name, mode, dev) {
  5959. return MEMFS.createNode(parent, name, mode, dev);
  5960. },
  5961. rename: function(old_node, new_dir, new_name) {
  5962. if (FS.isDir(old_node.mode)) {
  5963. var new_node;
  5964. try {
  5965. new_node = FS.lookupNode(new_dir, new_name);
  5966. } catch (e) {
  5967. }
  5968. if (new_node) {
  5969. for (var i in new_node.contents) {
  5970. throw new FS.ErrnoError(55);
  5971. }
  5972. }
  5973. }
  5974. delete old_node.parent.contents[old_node.name];
  5975. old_node.parent.timestamp = Date.now();
  5976. old_node.name = new_name;
  5977. new_dir.contents[new_name] = old_node;
  5978. new_dir.timestamp = old_node.parent.timestamp;
  5979. old_node.parent = new_dir;
  5980. },
  5981. unlink: function(parent, name) {
  5982. delete parent.contents[name];
  5983. parent.timestamp = Date.now();
  5984. },
  5985. rmdir: function(parent, name) {
  5986. var node = FS.lookupNode(parent, name);
  5987. for (var i in node.contents) {
  5988. throw new FS.ErrnoError(55);
  5989. }
  5990. delete parent.contents[name];
  5991. parent.timestamp = Date.now();
  5992. },
  5993. readdir: function(node) {
  5994. var entries = [".", ".."];
  5995. for (var key2 in node.contents) {
  5996. if (!node.contents.hasOwnProperty(key2)) {
  5997. continue;
  5998. }
  5999. entries.push(key2);
  6000. }
  6001. return entries;
  6002. },
  6003. symlink: function(parent, newname, oldpath) {
  6004. var node = MEMFS.createNode(parent, newname, 511 | 40960, 0);
  6005. node.link = oldpath;
  6006. return node;
  6007. },
  6008. readlink: function(node) {
  6009. if (!FS.isLink(node.mode)) {
  6010. throw new FS.ErrnoError(28);
  6011. }
  6012. return node.link;
  6013. }
  6014. },
  6015. stream_ops: {
  6016. read: function(stream, buffer2, offset, length, position) {
  6017. var contents = stream.node.contents;
  6018. if (position >= stream.node.usedBytes)
  6019. return 0;
  6020. var size = Math.min(stream.node.usedBytes - position, length);
  6021. if (size > 8 && contents.subarray) {
  6022. buffer2.set(contents.subarray(position, position + size), offset);
  6023. } else {
  6024. for (var i = 0; i < size; i++)
  6025. buffer2[offset + i] = contents[position + i];
  6026. }
  6027. return size;
  6028. },
  6029. write: function(stream, buffer2, offset, length, position, canOwn) {
  6030. if (buffer2.buffer === HEAP8.buffer) {
  6031. canOwn = false;
  6032. }
  6033. if (!length)
  6034. return 0;
  6035. var node = stream.node;
  6036. node.timestamp = Date.now();
  6037. if (buffer2.subarray && (!node.contents || node.contents.subarray)) {
  6038. if (canOwn) {
  6039. node.contents = buffer2.subarray(offset, offset + length);
  6040. node.usedBytes = length;
  6041. return length;
  6042. } else if (node.usedBytes === 0 && position === 0) {
  6043. node.contents = buffer2.slice(offset, offset + length);
  6044. node.usedBytes = length;
  6045. return length;
  6046. } else if (position + length <= node.usedBytes) {
  6047. node.contents.set(
  6048. buffer2.subarray(offset, offset + length),
  6049. position
  6050. );
  6051. return length;
  6052. }
  6053. }
  6054. MEMFS.expandFileStorage(node, position + length);
  6055. if (node.contents.subarray && buffer2.subarray) {
  6056. node.contents.set(
  6057. buffer2.subarray(offset, offset + length),
  6058. position
  6059. );
  6060. } else {
  6061. for (var i = 0; i < length; i++) {
  6062. node.contents[position + i] = buffer2[offset + i];
  6063. }
  6064. }
  6065. node.usedBytes = Math.max(node.usedBytes, position + length);
  6066. return length;
  6067. },
  6068. llseek: function(stream, offset, whence) {
  6069. var position = offset;
  6070. if (whence === 1) {
  6071. position += stream.position;
  6072. } else if (whence === 2) {
  6073. if (FS.isFile(stream.node.mode)) {
  6074. position += stream.node.usedBytes;
  6075. }
  6076. }
  6077. if (position < 0) {
  6078. throw new FS.ErrnoError(28);
  6079. }
  6080. return position;
  6081. },
  6082. allocate: function(stream, offset, length) {
  6083. MEMFS.expandFileStorage(stream.node, offset + length);
  6084. stream.node.usedBytes = Math.max(
  6085. stream.node.usedBytes,
  6086. offset + length
  6087. );
  6088. },
  6089. mmap: function(stream, address, length, position, prot, flags) {
  6090. if (address !== 0) {
  6091. throw new FS.ErrnoError(28);
  6092. }
  6093. if (!FS.isFile(stream.node.mode)) {
  6094. throw new FS.ErrnoError(43);
  6095. }
  6096. var ptr;
  6097. var allocated;
  6098. var contents = stream.node.contents;
  6099. if (!(flags & 2) && contents.buffer === buffer) {
  6100. allocated = false;
  6101. ptr = contents.byteOffset;
  6102. } else {
  6103. if (position > 0 || position + length < contents.length) {
  6104. if (contents.subarray) {
  6105. contents = contents.subarray(position, position + length);
  6106. } else {
  6107. contents = Array.prototype.slice.call(
  6108. contents,
  6109. position,
  6110. position + length
  6111. );
  6112. }
  6113. }
  6114. allocated = true;
  6115. ptr = mmapAlloc(length);
  6116. if (!ptr) {
  6117. throw new FS.ErrnoError(48);
  6118. }
  6119. HEAP8.set(contents, ptr);
  6120. }
  6121. return { ptr, allocated };
  6122. },
  6123. msync: function(stream, buffer2, offset, length, mmapFlags) {
  6124. if (!FS.isFile(stream.node.mode)) {
  6125. throw new FS.ErrnoError(43);
  6126. }
  6127. if (mmapFlags & 2) {
  6128. return 0;
  6129. }
  6130. MEMFS.stream_ops.write(
  6131. stream,
  6132. buffer2,
  6133. 0,
  6134. length,
  6135. offset,
  6136. false
  6137. );
  6138. return 0;
  6139. }
  6140. }
  6141. };
  6142. var ERRNO_CODES = {
  6143. EPERM: 63,
  6144. ENOENT: 44,
  6145. ESRCH: 71,
  6146. EINTR: 27,
  6147. EIO: 29,
  6148. ENXIO: 60,
  6149. E2BIG: 1,
  6150. ENOEXEC: 45,
  6151. EBADF: 8,
  6152. ECHILD: 12,
  6153. EAGAIN: 6,
  6154. EWOULDBLOCK: 6,
  6155. ENOMEM: 48,
  6156. EACCES: 2,
  6157. EFAULT: 21,
  6158. ENOTBLK: 105,
  6159. EBUSY: 10,
  6160. EEXIST: 20,
  6161. EXDEV: 75,
  6162. ENODEV: 43,
  6163. ENOTDIR: 54,
  6164. EISDIR: 31,
  6165. EINVAL: 28,
  6166. ENFILE: 41,
  6167. EMFILE: 33,
  6168. ENOTTY: 59,
  6169. ETXTBSY: 74,
  6170. EFBIG: 22,
  6171. ENOSPC: 51,
  6172. ESPIPE: 70,
  6173. EROFS: 69,
  6174. EMLINK: 34,
  6175. EPIPE: 64,
  6176. EDOM: 18,
  6177. ERANGE: 68,
  6178. ENOMSG: 49,
  6179. EIDRM: 24,
  6180. ECHRNG: 106,
  6181. EL2NSYNC: 156,
  6182. EL3HLT: 107,
  6183. EL3RST: 108,
  6184. ELNRNG: 109,
  6185. EUNATCH: 110,
  6186. ENOCSI: 111,
  6187. EL2HLT: 112,
  6188. EDEADLK: 16,
  6189. ENOLCK: 46,
  6190. EBADE: 113,
  6191. EBADR: 114,
  6192. EXFULL: 115,
  6193. ENOANO: 104,
  6194. EBADRQC: 103,
  6195. EBADSLT: 102,
  6196. EDEADLOCK: 16,
  6197. EBFONT: 101,
  6198. ENOSTR: 100,
  6199. ENODATA: 116,
  6200. ETIME: 117,
  6201. ENOSR: 118,
  6202. ENONET: 119,
  6203. ENOPKG: 120,
  6204. EREMOTE: 121,
  6205. ENOLINK: 47,
  6206. EADV: 122,
  6207. ESRMNT: 123,
  6208. ECOMM: 124,
  6209. EPROTO: 65,
  6210. EMULTIHOP: 36,
  6211. EDOTDOT: 125,
  6212. EBADMSG: 9,
  6213. ENOTUNIQ: 126,
  6214. EBADFD: 127,
  6215. EREMCHG: 128,
  6216. ELIBACC: 129,
  6217. ELIBBAD: 130,
  6218. ELIBSCN: 131,
  6219. ELIBMAX: 132,
  6220. ELIBEXEC: 133,
  6221. ENOSYS: 52,
  6222. ENOTEMPTY: 55,
  6223. ENAMETOOLONG: 37,
  6224. ELOOP: 32,
  6225. EOPNOTSUPP: 138,
  6226. EPFNOSUPPORT: 139,
  6227. ECONNRESET: 15,
  6228. ENOBUFS: 42,
  6229. EAFNOSUPPORT: 5,
  6230. EPROTOTYPE: 67,
  6231. ENOTSOCK: 57,
  6232. ENOPROTOOPT: 50,
  6233. ESHUTDOWN: 140,
  6234. ECONNREFUSED: 14,
  6235. EADDRINUSE: 3,
  6236. ECONNABORTED: 13,
  6237. ENETUNREACH: 40,
  6238. ENETDOWN: 38,
  6239. ETIMEDOUT: 73,
  6240. EHOSTDOWN: 142,
  6241. EHOSTUNREACH: 23,
  6242. EINPROGRESS: 26,
  6243. EALREADY: 7,
  6244. EDESTADDRREQ: 17,
  6245. EMSGSIZE: 35,
  6246. EPROTONOSUPPORT: 66,
  6247. ESOCKTNOSUPPORT: 137,
  6248. EADDRNOTAVAIL: 4,
  6249. ENETRESET: 39,
  6250. EISCONN: 30,
  6251. ENOTCONN: 53,
  6252. ETOOMANYREFS: 141,
  6253. EUSERS: 136,
  6254. EDQUOT: 19,
  6255. ESTALE: 72,
  6256. ENOTSUP: 138,
  6257. ENOMEDIUM: 148,
  6258. EILSEQ: 25,
  6259. EOVERFLOW: 61,
  6260. ECANCELED: 11,
  6261. ENOTRECOVERABLE: 56,
  6262. EOWNERDEAD: 62,
  6263. ESTRPIPE: 135
  6264. };
  6265. var NODEFS = {
  6266. isWindows: false,
  6267. staticInit: function() {
  6268. NODEFS.isWindows = !!process.platform.match(/^win/);
  6269. var flags = { fs: fs.constants };
  6270. if (flags["fs"]) {
  6271. flags = flags["fs"];
  6272. }
  6273. NODEFS.flagsForNodeMap = {
  6274. 1024: flags["O_APPEND"],
  6275. 64: flags["O_CREAT"],
  6276. 128: flags["O_EXCL"],
  6277. 256: flags["O_NOCTTY"],
  6278. 0: flags["O_RDONLY"],
  6279. 2: flags["O_RDWR"],
  6280. 4096: flags["O_SYNC"],
  6281. 512: flags["O_TRUNC"],
  6282. 1: flags["O_WRONLY"]
  6283. };
  6284. },
  6285. bufferFrom: function(arrayBuffer) {
  6286. return Buffer["alloc"] ? Buffer.from(arrayBuffer) : new Buffer(arrayBuffer);
  6287. },
  6288. convertNodeCode: function(e) {
  6289. var code = e.code;
  6290. return ERRNO_CODES[code];
  6291. },
  6292. mount: function(mount) {
  6293. return NODEFS.createNode(null, "/", NODEFS.getMode(mount.opts.root), 0);
  6294. },
  6295. createNode: function(parent, name, mode, dev) {
  6296. if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
  6297. throw new FS.ErrnoError(28);
  6298. }
  6299. var node = FS.createNode(parent, name, mode);
  6300. node.node_ops = NODEFS.node_ops;
  6301. node.stream_ops = NODEFS.stream_ops;
  6302. return node;
  6303. },
  6304. getMode: function(path) {
  6305. var stat;
  6306. try {
  6307. stat = fs.lstatSync(path);
  6308. if (NODEFS.isWindows) {
  6309. stat.mode = stat.mode | (stat.mode & 292) >> 2;
  6310. }
  6311. } catch (e) {
  6312. if (!e.code)
  6313. throw e;
  6314. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6315. }
  6316. return stat.mode;
  6317. },
  6318. realPath: function(node) {
  6319. var parts = [];
  6320. while (node.parent !== node) {
  6321. parts.push(node.name);
  6322. node = node.parent;
  6323. }
  6324. parts.push(node.mount.opts.root);
  6325. parts.reverse();
  6326. return PATH.join.apply(null, parts);
  6327. },
  6328. flagsForNode: function(flags) {
  6329. flags &= ~2097152;
  6330. flags &= ~2048;
  6331. flags &= ~32768;
  6332. flags &= ~524288;
  6333. var newFlags = 0;
  6334. for (var k in NODEFS.flagsForNodeMap) {
  6335. if (flags & k) {
  6336. newFlags |= NODEFS.flagsForNodeMap[k];
  6337. flags ^= k;
  6338. }
  6339. }
  6340. if (!flags) {
  6341. return newFlags;
  6342. } else {
  6343. throw new FS.ErrnoError(28);
  6344. }
  6345. },
  6346. node_ops: {
  6347. getattr: function(node) {
  6348. var path = NODEFS.realPath(node);
  6349. var stat;
  6350. try {
  6351. stat = fs.lstatSync(path);
  6352. } catch (e) {
  6353. if (!e.code)
  6354. throw e;
  6355. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6356. }
  6357. if (NODEFS.isWindows && !stat.blksize) {
  6358. stat.blksize = 4096;
  6359. }
  6360. if (NODEFS.isWindows && !stat.blocks) {
  6361. stat.blocks = (stat.size + stat.blksize - 1) / stat.blksize | 0;
  6362. }
  6363. return {
  6364. dev: stat.dev,
  6365. ino: stat.ino,
  6366. mode: stat.mode,
  6367. nlink: stat.nlink,
  6368. uid: stat.uid,
  6369. gid: stat.gid,
  6370. rdev: stat.rdev,
  6371. size: stat.size,
  6372. atime: stat.atime,
  6373. mtime: stat.mtime,
  6374. ctime: stat.ctime,
  6375. blksize: stat.blksize,
  6376. blocks: stat.blocks
  6377. };
  6378. },
  6379. setattr: function(node, attr) {
  6380. var path = NODEFS.realPath(node);
  6381. try {
  6382. if (attr.mode !== void 0) {
  6383. fs.chmodSync(path, attr.mode);
  6384. node.mode = attr.mode;
  6385. }
  6386. if (attr.timestamp !== void 0) {
  6387. var date = new Date(attr.timestamp);
  6388. fs.utimesSync(path, date, date);
  6389. }
  6390. if (attr.size !== void 0) {
  6391. fs.truncateSync(path, attr.size);
  6392. }
  6393. } catch (e) {
  6394. if (!e.code)
  6395. throw e;
  6396. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6397. }
  6398. },
  6399. lookup: function(parent, name) {
  6400. var path = PATH.join2(NODEFS.realPath(parent), name);
  6401. var mode = NODEFS.getMode(path);
  6402. return NODEFS.createNode(parent, name, mode);
  6403. },
  6404. mknod: function(parent, name, mode, dev) {
  6405. var node = NODEFS.createNode(parent, name, mode, dev);
  6406. var path = NODEFS.realPath(node);
  6407. try {
  6408. if (FS.isDir(node.mode)) {
  6409. fs.mkdirSync(path, node.mode);
  6410. } else {
  6411. fs.writeFileSync(path, "", { mode: node.mode });
  6412. }
  6413. } catch (e) {
  6414. if (!e.code)
  6415. throw e;
  6416. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6417. }
  6418. return node;
  6419. },
  6420. rename: function(oldNode, newDir, newName) {
  6421. var oldPath = NODEFS.realPath(oldNode);
  6422. var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
  6423. try {
  6424. fs.renameSync(oldPath, newPath);
  6425. } catch (e) {
  6426. if (!e.code)
  6427. throw e;
  6428. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6429. }
  6430. oldNode.name = newName;
  6431. },
  6432. unlink: function(parent, name) {
  6433. var path = PATH.join2(NODEFS.realPath(parent), name);
  6434. try {
  6435. fs.unlinkSync(path);
  6436. } catch (e) {
  6437. if (!e.code)
  6438. throw e;
  6439. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6440. }
  6441. },
  6442. rmdir: function(parent, name) {
  6443. var path = PATH.join2(NODEFS.realPath(parent), name);
  6444. try {
  6445. fs.rmdirSync(path);
  6446. } catch (e) {
  6447. if (!e.code)
  6448. throw e;
  6449. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6450. }
  6451. },
  6452. readdir: function(node) {
  6453. var path = NODEFS.realPath(node);
  6454. try {
  6455. return fs.readdirSync(path);
  6456. } catch (e) {
  6457. if (!e.code)
  6458. throw e;
  6459. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6460. }
  6461. },
  6462. symlink: function(parent, newName, oldPath) {
  6463. var newPath = PATH.join2(NODEFS.realPath(parent), newName);
  6464. try {
  6465. fs.symlinkSync(oldPath, newPath);
  6466. } catch (e) {
  6467. if (!e.code)
  6468. throw e;
  6469. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6470. }
  6471. },
  6472. readlink: function(node) {
  6473. var path = NODEFS.realPath(node);
  6474. try {
  6475. path = fs.readlinkSync(path);
  6476. path = NODEJS_PATH.relative(
  6477. NODEJS_PATH.resolve(node.mount.opts.root),
  6478. path
  6479. );
  6480. return path;
  6481. } catch (e) {
  6482. if (!e.code)
  6483. throw e;
  6484. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6485. }
  6486. }
  6487. },
  6488. stream_ops: {
  6489. open: function(stream) {
  6490. var path = NODEFS.realPath(stream.node);
  6491. try {
  6492. if (FS.isFile(stream.node.mode)) {
  6493. stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags));
  6494. }
  6495. } catch (e) {
  6496. if (!e.code)
  6497. throw e;
  6498. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6499. }
  6500. },
  6501. close: function(stream) {
  6502. try {
  6503. if (FS.isFile(stream.node.mode) && stream.nfd) {
  6504. fs.closeSync(stream.nfd);
  6505. }
  6506. } catch (e) {
  6507. if (!e.code)
  6508. throw e;
  6509. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6510. }
  6511. },
  6512. read: function(stream, buffer2, offset, length, position) {
  6513. if (length === 0)
  6514. return 0;
  6515. try {
  6516. return fs.readSync(
  6517. stream.nfd,
  6518. NODEFS.bufferFrom(buffer2.buffer),
  6519. offset,
  6520. length,
  6521. position
  6522. );
  6523. } catch (e) {
  6524. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6525. }
  6526. },
  6527. write: function(stream, buffer2, offset, length, position) {
  6528. try {
  6529. return fs.writeSync(
  6530. stream.nfd,
  6531. NODEFS.bufferFrom(buffer2.buffer),
  6532. offset,
  6533. length,
  6534. position
  6535. );
  6536. } catch (e) {
  6537. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6538. }
  6539. },
  6540. llseek: function(stream, offset, whence) {
  6541. var position = offset;
  6542. if (whence === 1) {
  6543. position += stream.position;
  6544. } else if (whence === 2) {
  6545. if (FS.isFile(stream.node.mode)) {
  6546. try {
  6547. var stat = fs.fstatSync(stream.nfd);
  6548. position += stat.size;
  6549. } catch (e) {
  6550. throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
  6551. }
  6552. }
  6553. }
  6554. if (position < 0) {
  6555. throw new FS.ErrnoError(28);
  6556. }
  6557. return position;
  6558. },
  6559. mmap: function(stream, address, length, position, prot, flags) {
  6560. if (address !== 0) {
  6561. throw new FS.ErrnoError(28);
  6562. }
  6563. if (!FS.isFile(stream.node.mode)) {
  6564. throw new FS.ErrnoError(43);
  6565. }
  6566. var ptr = mmapAlloc(length);
  6567. NODEFS.stream_ops.read(stream, HEAP8, ptr, length, position);
  6568. return { ptr, allocated: true };
  6569. },
  6570. msync: function(stream, buffer2, offset, length, mmapFlags) {
  6571. if (!FS.isFile(stream.node.mode)) {
  6572. throw new FS.ErrnoError(43);
  6573. }
  6574. if (mmapFlags & 2) {
  6575. return 0;
  6576. }
  6577. NODEFS.stream_ops.write(
  6578. stream,
  6579. buffer2,
  6580. 0,
  6581. length,
  6582. offset,
  6583. false
  6584. );
  6585. return 0;
  6586. }
  6587. }
  6588. };
  6589. var NODERAWFS = {
  6590. lookupPath: function(path) {
  6591. return { path, node: { mode: NODEFS.getMode(path) } };
  6592. },
  6593. createStandardStreams: function() {
  6594. FS.streams[0] = {
  6595. fd: 0,
  6596. nfd: 0,
  6597. position: 0,
  6598. path: "",
  6599. flags: 0,
  6600. tty: true,
  6601. seekable: false
  6602. };
  6603. for (var i = 1; i < 3; i++) {
  6604. FS.streams[i] = {
  6605. fd: i,
  6606. nfd: i,
  6607. position: 0,
  6608. path: "",
  6609. flags: 577,
  6610. tty: true,
  6611. seekable: false
  6612. };
  6613. }
  6614. },
  6615. cwd: function() {
  6616. return process.cwd();
  6617. },
  6618. chdir: function() {
  6619. process.chdir.apply(void 0, arguments);
  6620. },
  6621. mknod: function(path, mode) {
  6622. if (FS.isDir(path)) {
  6623. fs.mkdirSync(path, mode);
  6624. } else {
  6625. fs.writeFileSync(path, "", { mode });
  6626. }
  6627. },
  6628. mkdir: function() {
  6629. fs.mkdirSync.apply(void 0, arguments);
  6630. },
  6631. symlink: function() {
  6632. fs.symlinkSync.apply(void 0, arguments);
  6633. },
  6634. rename: function() {
  6635. fs.renameSync.apply(void 0, arguments);
  6636. },
  6637. rmdir: function() {
  6638. fs.rmdirSync.apply(void 0, arguments);
  6639. },
  6640. readdir: function() {
  6641. fs.readdirSync.apply(void 0, arguments);
  6642. },
  6643. unlink: function() {
  6644. fs.unlinkSync.apply(void 0, arguments);
  6645. },
  6646. readlink: function() {
  6647. return fs.readlinkSync.apply(void 0, arguments);
  6648. },
  6649. stat: function() {
  6650. return fs.statSync.apply(void 0, arguments);
  6651. },
  6652. lstat: function() {
  6653. return fs.lstatSync.apply(void 0, arguments);
  6654. },
  6655. chmod: function() {
  6656. fs.chmodSync.apply(void 0, arguments);
  6657. },
  6658. fchmod: function() {
  6659. fs.fchmodSync.apply(void 0, arguments);
  6660. },
  6661. chown: function() {
  6662. fs.chownSync.apply(void 0, arguments);
  6663. },
  6664. fchown: function() {
  6665. fs.fchownSync.apply(void 0, arguments);
  6666. },
  6667. truncate: function() {
  6668. fs.truncateSync.apply(void 0, arguments);
  6669. },
  6670. ftruncate: function(fd, len) {
  6671. if (len < 0) {
  6672. throw new FS.ErrnoError(28);
  6673. }
  6674. fs.ftruncateSync.apply(void 0, arguments);
  6675. },
  6676. utime: function() {
  6677. fs.utimesSync.apply(void 0, arguments);
  6678. },
  6679. open: function(path, flags, mode, suggestFD) {
  6680. if (typeof flags === "string") {
  6681. flags = VFS.modeStringToFlags(flags);
  6682. }
  6683. var nfd = fs.openSync(path, NODEFS.flagsForNode(flags), mode);
  6684. var fd = suggestFD != null ? suggestFD : FS.nextfd(nfd);
  6685. var stream = {
  6686. fd,
  6687. nfd,
  6688. position: 0,
  6689. path,
  6690. flags,
  6691. seekable: true
  6692. };
  6693. FS.streams[fd] = stream;
  6694. return stream;
  6695. },
  6696. close: function(stream) {
  6697. if (!stream.stream_ops) {
  6698. fs.closeSync(stream.nfd);
  6699. }
  6700. FS.closeStream(stream.fd);
  6701. },
  6702. llseek: function(stream, offset, whence) {
  6703. if (stream.stream_ops) {
  6704. return VFS.llseek(stream, offset, whence);
  6705. }
  6706. var position = offset;
  6707. if (whence === 1) {
  6708. position += stream.position;
  6709. } else if (whence === 2) {
  6710. position += fs.fstatSync(stream.nfd).size;
  6711. } else if (whence !== 0) {
  6712. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  6713. }
  6714. if (position < 0) {
  6715. throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
  6716. }
  6717. stream.position = position;
  6718. return position;
  6719. },
  6720. read: function(stream, buffer2, offset, length, position) {
  6721. if (stream.stream_ops) {
  6722. return VFS.read(stream, buffer2, offset, length, position);
  6723. }
  6724. var seeking = typeof position !== "undefined";
  6725. if (!seeking && stream.seekable)
  6726. position = stream.position;
  6727. var bytesRead = fs.readSync(
  6728. stream.nfd,
  6729. NODEFS.bufferFrom(buffer2.buffer),
  6730. offset,
  6731. length,
  6732. position
  6733. );
  6734. if (!seeking)
  6735. stream.position += bytesRead;
  6736. return bytesRead;
  6737. },
  6738. write: function(stream, buffer2, offset, length, position) {
  6739. if (stream.stream_ops) {
  6740. return VFS.write(stream, buffer2, offset, length, position);
  6741. }
  6742. if (stream.flags & +"1024") {
  6743. FS.llseek(stream, 0, +"2");
  6744. }
  6745. var seeking = typeof position !== "undefined";
  6746. if (!seeking && stream.seekable)
  6747. position = stream.position;
  6748. var bytesWritten = fs.writeSync(
  6749. stream.nfd,
  6750. NODEFS.bufferFrom(buffer2.buffer),
  6751. offset,
  6752. length,
  6753. position
  6754. );
  6755. if (!seeking)
  6756. stream.position += bytesWritten;
  6757. return bytesWritten;
  6758. },
  6759. allocate: function() {
  6760. throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
  6761. },
  6762. mmap: function(stream, address, length, position, prot, flags) {
  6763. if (stream.stream_ops) {
  6764. return VFS.mmap(stream, address, length, position, prot, flags);
  6765. }
  6766. if (address !== 0) {
  6767. throw new FS.ErrnoError(28);
  6768. }
  6769. var ptr = mmapAlloc(length);
  6770. FS.read(stream, HEAP8, ptr, length, position);
  6771. return { ptr, allocated: true };
  6772. },
  6773. msync: function(stream, buffer2, offset, length, mmapFlags) {
  6774. if (stream.stream_ops) {
  6775. return VFS.msync(stream, buffer2, offset, length, mmapFlags);
  6776. }
  6777. if (mmapFlags & 2) {
  6778. return 0;
  6779. }
  6780. FS.write(stream, buffer2, 0, length, offset);
  6781. return 0;
  6782. },
  6783. munmap: function() {
  6784. return 0;
  6785. },
  6786. ioctl: function() {
  6787. throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
  6788. }
  6789. };
  6790. var FS = {
  6791. root: null,
  6792. mounts: [],
  6793. devices: {},
  6794. streams: [],
  6795. nextInode: 1,
  6796. nameTable: null,
  6797. currentPath: "/",
  6798. initialized: false,
  6799. ignorePermissions: true,
  6800. trackingDelegate: {},
  6801. tracking: { openFlags: { READ: 1, WRITE: 2 } },
  6802. ErrnoError: null,
  6803. genericErrors: {},
  6804. filesystems: null,
  6805. syncFSRequests: 0,
  6806. lookupPath: function(path, opts) {
  6807. path = PATH_FS.resolve(FS.cwd(), path);
  6808. opts = opts || {};
  6809. if (!path)
  6810. return { path: "", node: null };
  6811. var defaults = { follow_mount: true, recurse_count: 0 };
  6812. for (var key2 in defaults) {
  6813. if (opts[key2] === void 0) {
  6814. opts[key2] = defaults[key2];
  6815. }
  6816. }
  6817. if (opts.recurse_count > 8) {
  6818. throw new FS.ErrnoError(32);
  6819. }
  6820. var parts = PATH.normalizeArray(
  6821. path.split("/").filter(function(p) {
  6822. return !!p;
  6823. }),
  6824. false
  6825. );
  6826. var current = FS.root;
  6827. var current_path = "/";
  6828. for (var i = 0; i < parts.length; i++) {
  6829. var islast = i === parts.length - 1;
  6830. if (islast && opts.parent) {
  6831. break;
  6832. }
  6833. current = FS.lookupNode(current, parts[i]);
  6834. current_path = PATH.join2(current_path, parts[i]);
  6835. if (FS.isMountpoint(current)) {
  6836. if (!islast || islast && opts.follow_mount) {
  6837. current = current.mounted.root;
  6838. }
  6839. }
  6840. if (!islast || opts.follow) {
  6841. var count = 0;
  6842. while (FS.isLink(current.mode)) {
  6843. var link = FS.readlink(current_path);
  6844. current_path = PATH_FS.resolve(PATH.dirname(current_path), link);
  6845. var lookup = FS.lookupPath(current_path, {
  6846. recurse_count: opts.recurse_count
  6847. });
  6848. current = lookup.node;
  6849. if (count++ > 40) {
  6850. throw new FS.ErrnoError(32);
  6851. }
  6852. }
  6853. }
  6854. }
  6855. return { path: current_path, node: current };
  6856. },
  6857. getPath: function(node) {
  6858. var path;
  6859. while (true) {
  6860. if (FS.isRoot(node)) {
  6861. var mount = node.mount.mountpoint;
  6862. if (!path)
  6863. return mount;
  6864. return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path;
  6865. }
  6866. path = path ? node.name + "/" + path : node.name;
  6867. node = node.parent;
  6868. }
  6869. },
  6870. hashName: function(parentid, name) {
  6871. var hash = 0;
  6872. for (var i = 0; i < name.length; i++) {
  6873. hash = (hash << 5) - hash + name.charCodeAt(i) | 0;
  6874. }
  6875. return (parentid + hash >>> 0) % FS.nameTable.length;
  6876. },
  6877. hashAddNode: function(node) {
  6878. var hash = FS.hashName(node.parent.id, node.name);
  6879. node.name_next = FS.nameTable[hash];
  6880. FS.nameTable[hash] = node;
  6881. },
  6882. hashRemoveNode: function(node) {
  6883. var hash = FS.hashName(node.parent.id, node.name);
  6884. if (FS.nameTable[hash] === node) {
  6885. FS.nameTable[hash] = node.name_next;
  6886. } else {
  6887. var current = FS.nameTable[hash];
  6888. while (current) {
  6889. if (current.name_next === node) {
  6890. current.name_next = node.name_next;
  6891. break;
  6892. }
  6893. current = current.name_next;
  6894. }
  6895. }
  6896. },
  6897. lookupNode: function(parent, name) {
  6898. var errCode = FS.mayLookup(parent);
  6899. if (errCode) {
  6900. throw new FS.ErrnoError(errCode, parent);
  6901. }
  6902. var hash = FS.hashName(parent.id, name);
  6903. for (var node = FS.nameTable[hash]; node; node = node.name_next) {
  6904. var nodeName = node.name;
  6905. if (node.parent.id === parent.id && nodeName === name) {
  6906. return node;
  6907. }
  6908. }
  6909. return FS.lookup(parent, name);
  6910. },
  6911. createNode: function(parent, name, mode, rdev) {
  6912. var node = new FS.FSNode(parent, name, mode, rdev);
  6913. FS.hashAddNode(node);
  6914. return node;
  6915. },
  6916. destroyNode: function(node) {
  6917. FS.hashRemoveNode(node);
  6918. },
  6919. isRoot: function(node) {
  6920. return node === node.parent;
  6921. },
  6922. isMountpoint: function(node) {
  6923. return !!node.mounted;
  6924. },
  6925. isFile: function(mode) {
  6926. return (mode & 61440) === 32768;
  6927. },
  6928. isDir: function(mode) {
  6929. return (mode & 61440) === 16384;
  6930. },
  6931. isLink: function(mode) {
  6932. return (mode & 61440) === 40960;
  6933. },
  6934. isChrdev: function(mode) {
  6935. return (mode & 61440) === 8192;
  6936. },
  6937. isBlkdev: function(mode) {
  6938. return (mode & 61440) === 24576;
  6939. },
  6940. isFIFO: function(mode) {
  6941. return (mode & 61440) === 4096;
  6942. },
  6943. isSocket: function(mode) {
  6944. return (mode & 49152) === 49152;
  6945. },
  6946. flagModes: { r: 0, "r+": 2, w: 577, "w+": 578, a: 1089, "a+": 1090 },
  6947. modeStringToFlags: function(str) {
  6948. var flags = FS.flagModes[str];
  6949. if (typeof flags === "undefined") {
  6950. throw new Error("Unknown file open mode: " + str);
  6951. }
  6952. return flags;
  6953. },
  6954. flagsToPermissionString: function(flag) {
  6955. var perms = ["r", "w", "rw"][flag & 3];
  6956. if (flag & 512) {
  6957. perms += "w";
  6958. }
  6959. return perms;
  6960. },
  6961. nodePermissions: function(node, perms) {
  6962. if (FS.ignorePermissions) {
  6963. return 0;
  6964. }
  6965. if (perms.includes("r") && !(node.mode & 292)) {
  6966. return 2;
  6967. } else if (perms.includes("w") && !(node.mode & 146)) {
  6968. return 2;
  6969. } else if (perms.includes("x") && !(node.mode & 73)) {
  6970. return 2;
  6971. }
  6972. return 0;
  6973. },
  6974. mayLookup: function(dir) {
  6975. var errCode = FS.nodePermissions(dir, "x");
  6976. if (errCode)
  6977. return errCode;
  6978. if (!dir.node_ops.lookup)
  6979. return 2;
  6980. return 0;
  6981. },
  6982. mayCreate: function(dir, name) {
  6983. try {
  6984. var node = FS.lookupNode(dir, name);
  6985. return 20;
  6986. } catch (e) {
  6987. }
  6988. return FS.nodePermissions(dir, "wx");
  6989. },
  6990. mayDelete: function(dir, name, isdir) {
  6991. var node;
  6992. try {
  6993. node = FS.lookupNode(dir, name);
  6994. } catch (e) {
  6995. return e.errno;
  6996. }
  6997. var errCode = FS.nodePermissions(dir, "wx");
  6998. if (errCode) {
  6999. return errCode;
  7000. }
  7001. if (isdir) {
  7002. if (!FS.isDir(node.mode)) {
  7003. return 54;
  7004. }
  7005. if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
  7006. return 10;
  7007. }
  7008. } else {
  7009. if (FS.isDir(node.mode)) {
  7010. return 31;
  7011. }
  7012. }
  7013. return 0;
  7014. },
  7015. mayOpen: function(node, flags) {
  7016. if (!node) {
  7017. return 44;
  7018. }
  7019. if (FS.isLink(node.mode)) {
  7020. return 32;
  7021. } else if (FS.isDir(node.mode)) {
  7022. if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) {
  7023. return 31;
  7024. }
  7025. }
  7026. return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
  7027. },
  7028. MAX_OPEN_FDS: 4096,
  7029. nextfd: function(fd_start, fd_end) {
  7030. fd_start = fd_start || 0;
  7031. fd_end = fd_end || FS.MAX_OPEN_FDS;
  7032. for (var fd = fd_start; fd <= fd_end; fd++) {
  7033. if (!FS.streams[fd]) {
  7034. return fd;
  7035. }
  7036. }
  7037. throw new FS.ErrnoError(33);
  7038. },
  7039. getStream: function(fd) {
  7040. return FS.streams[fd];
  7041. },
  7042. createStream: function(stream, fd_start, fd_end) {
  7043. if (!FS.FSStream) {
  7044. FS.FSStream = function() {
  7045. };
  7046. FS.FSStream.prototype = {
  7047. object: {
  7048. get: function() {
  7049. return this.node;
  7050. },
  7051. set: function(val) {
  7052. this.node = val;
  7053. }
  7054. },
  7055. isRead: {
  7056. get: function() {
  7057. return (this.flags & 2097155) !== 1;
  7058. }
  7059. },
  7060. isWrite: {
  7061. get: function() {
  7062. return (this.flags & 2097155) !== 0;
  7063. }
  7064. },
  7065. isAppend: {
  7066. get: function() {
  7067. return this.flags & 1024;
  7068. }
  7069. }
  7070. };
  7071. }
  7072. var newStream = new FS.FSStream();
  7073. for (var p in stream) {
  7074. newStream[p] = stream[p];
  7075. }
  7076. stream = newStream;
  7077. var fd = FS.nextfd(fd_start, fd_end);
  7078. stream.fd = fd;
  7079. FS.streams[fd] = stream;
  7080. return stream;
  7081. },
  7082. closeStream: function(fd) {
  7083. FS.streams[fd] = null;
  7084. },
  7085. chrdev_stream_ops: {
  7086. open: function(stream) {
  7087. var device = FS.getDevice(stream.node.rdev);
  7088. stream.stream_ops = device.stream_ops;
  7089. if (stream.stream_ops.open) {
  7090. stream.stream_ops.open(stream);
  7091. }
  7092. },
  7093. llseek: function() {
  7094. throw new FS.ErrnoError(70);
  7095. }
  7096. },
  7097. major: function(dev) {
  7098. return dev >> 8;
  7099. },
  7100. minor: function(dev) {
  7101. return dev & 255;
  7102. },
  7103. makedev: function(ma, mi) {
  7104. return ma << 8 | mi;
  7105. },
  7106. registerDevice: function(dev, ops) {
  7107. FS.devices[dev] = { stream_ops: ops };
  7108. },
  7109. getDevice: function(dev) {
  7110. return FS.devices[dev];
  7111. },
  7112. getMounts: function(mount) {
  7113. var mounts = [];
  7114. var check = [mount];
  7115. while (check.length) {
  7116. var m = check.pop();
  7117. mounts.push(m);
  7118. check.push.apply(check, m.mounts);
  7119. }
  7120. return mounts;
  7121. },
  7122. syncfs: function(populate, callback) {
  7123. if (typeof populate === "function") {
  7124. callback = populate;
  7125. populate = false;
  7126. }
  7127. FS.syncFSRequests++;
  7128. if (FS.syncFSRequests > 1) {
  7129. err(
  7130. "warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work"
  7131. );
  7132. }
  7133. var mounts = FS.getMounts(FS.root.mount);
  7134. var completed = 0;
  7135. function doCallback(errCode) {
  7136. FS.syncFSRequests--;
  7137. return callback(errCode);
  7138. }
  7139. function done(errCode) {
  7140. if (errCode) {
  7141. if (!done.errored) {
  7142. done.errored = true;
  7143. return doCallback(errCode);
  7144. }
  7145. return;
  7146. }
  7147. if (++completed >= mounts.length) {
  7148. doCallback(null);
  7149. }
  7150. }
  7151. mounts.forEach(function(mount) {
  7152. if (!mount.type.syncfs) {
  7153. return done(null);
  7154. }
  7155. mount.type.syncfs(mount, populate, done);
  7156. });
  7157. },
  7158. mount: function(type, opts, mountpoint) {
  7159. var root = mountpoint === "/";
  7160. var pseudo = !mountpoint;
  7161. var node;
  7162. if (root && FS.root) {
  7163. throw new FS.ErrnoError(10);
  7164. } else if (!root && !pseudo) {
  7165. var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
  7166. mountpoint = lookup.path;
  7167. node = lookup.node;
  7168. if (FS.isMountpoint(node)) {
  7169. throw new FS.ErrnoError(10);
  7170. }
  7171. if (!FS.isDir(node.mode)) {
  7172. throw new FS.ErrnoError(54);
  7173. }
  7174. }
  7175. var mount = {
  7176. type,
  7177. opts,
  7178. mountpoint,
  7179. mounts: []
  7180. };
  7181. var mountRoot = type.mount(mount);
  7182. mountRoot.mount = mount;
  7183. mount.root = mountRoot;
  7184. if (root) {
  7185. FS.root = mountRoot;
  7186. } else if (node) {
  7187. node.mounted = mount;
  7188. if (node.mount) {
  7189. node.mount.mounts.push(mount);
  7190. }
  7191. }
  7192. return mountRoot;
  7193. },
  7194. unmount: function(mountpoint) {
  7195. var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
  7196. if (!FS.isMountpoint(lookup.node)) {
  7197. throw new FS.ErrnoError(28);
  7198. }
  7199. var node = lookup.node;
  7200. var mount = node.mounted;
  7201. var mounts = FS.getMounts(mount);
  7202. Object.keys(FS.nameTable).forEach(function(hash) {
  7203. var current = FS.nameTable[hash];
  7204. while (current) {
  7205. var next = current.name_next;
  7206. if (mounts.includes(current.mount)) {
  7207. FS.destroyNode(current);
  7208. }
  7209. current = next;
  7210. }
  7211. });
  7212. node.mounted = null;
  7213. var idx = node.mount.mounts.indexOf(mount);
  7214. node.mount.mounts.splice(idx, 1);
  7215. },
  7216. lookup: function(parent, name) {
  7217. return parent.node_ops.lookup(parent, name);
  7218. },
  7219. mknod: function(path, mode, dev) {
  7220. var lookup = FS.lookupPath(path, { parent: true });
  7221. var parent = lookup.node;
  7222. var name = PATH.basename(path);
  7223. if (!name || name === "." || name === "..") {
  7224. throw new FS.ErrnoError(28);
  7225. }
  7226. var errCode = FS.mayCreate(parent, name);
  7227. if (errCode) {
  7228. throw new FS.ErrnoError(errCode);
  7229. }
  7230. if (!parent.node_ops.mknod) {
  7231. throw new FS.ErrnoError(63);
  7232. }
  7233. return parent.node_ops.mknod(parent, name, mode, dev);
  7234. },
  7235. create: function(path, mode) {
  7236. mode = mode !== void 0 ? mode : 438;
  7237. mode &= 4095;
  7238. mode |= 32768;
  7239. return FS.mknod(path, mode, 0);
  7240. },
  7241. mkdir: function(path, mode) {
  7242. mode = mode !== void 0 ? mode : 511;
  7243. mode &= 511 | 512;
  7244. mode |= 16384;
  7245. return FS.mknod(path, mode, 0);
  7246. },
  7247. mkdirTree: function(path, mode) {
  7248. var dirs = path.split("/");
  7249. var d = "";
  7250. for (var i = 0; i < dirs.length; ++i) {
  7251. if (!dirs[i])
  7252. continue;
  7253. d += "/" + dirs[i];
  7254. try {
  7255. FS.mkdir(d, mode);
  7256. } catch (e) {
  7257. if (e.errno != 20)
  7258. throw e;
  7259. }
  7260. }
  7261. },
  7262. mkdev: function(path, mode, dev) {
  7263. if (typeof dev === "undefined") {
  7264. dev = mode;
  7265. mode = 438;
  7266. }
  7267. mode |= 8192;
  7268. return FS.mknod(path, mode, dev);
  7269. },
  7270. symlink: function(oldpath, newpath) {
  7271. if (!PATH_FS.resolve(oldpath)) {
  7272. throw new FS.ErrnoError(44);
  7273. }
  7274. var lookup = FS.lookupPath(newpath, { parent: true });
  7275. var parent = lookup.node;
  7276. if (!parent) {
  7277. throw new FS.ErrnoError(44);
  7278. }
  7279. var newname = PATH.basename(newpath);
  7280. var errCode = FS.mayCreate(parent, newname);
  7281. if (errCode) {
  7282. throw new FS.ErrnoError(errCode);
  7283. }
  7284. if (!parent.node_ops.symlink) {
  7285. throw new FS.ErrnoError(63);
  7286. }
  7287. return parent.node_ops.symlink(parent, newname, oldpath);
  7288. },
  7289. rename: function(old_path, new_path) {
  7290. var old_dirname = PATH.dirname(old_path);
  7291. var new_dirname = PATH.dirname(new_path);
  7292. var old_name = PATH.basename(old_path);
  7293. var new_name = PATH.basename(new_path);
  7294. var lookup, old_dir, new_dir;
  7295. lookup = FS.lookupPath(old_path, { parent: true });
  7296. old_dir = lookup.node;
  7297. lookup = FS.lookupPath(new_path, { parent: true });
  7298. new_dir = lookup.node;
  7299. if (!old_dir || !new_dir)
  7300. throw new FS.ErrnoError(44);
  7301. if (old_dir.mount !== new_dir.mount) {
  7302. throw new FS.ErrnoError(75);
  7303. }
  7304. var old_node = FS.lookupNode(old_dir, old_name);
  7305. var relative = PATH_FS.relative(old_path, new_dirname);
  7306. if (relative.charAt(0) !== ".") {
  7307. throw new FS.ErrnoError(28);
  7308. }
  7309. relative = PATH_FS.relative(new_path, old_dirname);
  7310. if (relative.charAt(0) !== ".") {
  7311. throw new FS.ErrnoError(55);
  7312. }
  7313. var new_node;
  7314. try {
  7315. new_node = FS.lookupNode(new_dir, new_name);
  7316. } catch (e) {
  7317. }
  7318. if (old_node === new_node) {
  7319. return;
  7320. }
  7321. var isdir = FS.isDir(old_node.mode);
  7322. var errCode = FS.mayDelete(old_dir, old_name, isdir);
  7323. if (errCode) {
  7324. throw new FS.ErrnoError(errCode);
  7325. }
  7326. errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name);
  7327. if (errCode) {
  7328. throw new FS.ErrnoError(errCode);
  7329. }
  7330. if (!old_dir.node_ops.rename) {
  7331. throw new FS.ErrnoError(63);
  7332. }
  7333. if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) {
  7334. throw new FS.ErrnoError(10);
  7335. }
  7336. if (new_dir !== old_dir) {
  7337. errCode = FS.nodePermissions(old_dir, "w");
  7338. if (errCode) {
  7339. throw new FS.ErrnoError(errCode);
  7340. }
  7341. }
  7342. try {
  7343. if (FS.trackingDelegate["willMovePath"]) {
  7344. FS.trackingDelegate["willMovePath"](old_path, new_path);
  7345. }
  7346. } catch (e) {
  7347. err(
  7348. "FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message
  7349. );
  7350. }
  7351. FS.hashRemoveNode(old_node);
  7352. try {
  7353. old_dir.node_ops.rename(old_node, new_dir, new_name);
  7354. } catch (e) {
  7355. throw e;
  7356. } finally {
  7357. FS.hashAddNode(old_node);
  7358. }
  7359. try {
  7360. if (FS.trackingDelegate["onMovePath"])
  7361. FS.trackingDelegate["onMovePath"](old_path, new_path);
  7362. } catch (e) {
  7363. err(
  7364. "FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message
  7365. );
  7366. }
  7367. },
  7368. rmdir: function(path) {
  7369. var lookup = FS.lookupPath(path, { parent: true });
  7370. var parent = lookup.node;
  7371. var name = PATH.basename(path);
  7372. var node = FS.lookupNode(parent, name);
  7373. var errCode = FS.mayDelete(parent, name, true);
  7374. if (errCode) {
  7375. throw new FS.ErrnoError(errCode);
  7376. }
  7377. if (!parent.node_ops.rmdir) {
  7378. throw new FS.ErrnoError(63);
  7379. }
  7380. if (FS.isMountpoint(node)) {
  7381. throw new FS.ErrnoError(10);
  7382. }
  7383. try {
  7384. if (FS.trackingDelegate["willDeletePath"]) {
  7385. FS.trackingDelegate["willDeletePath"](path);
  7386. }
  7387. } catch (e) {
  7388. err(
  7389. "FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message
  7390. );
  7391. }
  7392. parent.node_ops.rmdir(parent, name);
  7393. FS.destroyNode(node);
  7394. try {
  7395. if (FS.trackingDelegate["onDeletePath"])
  7396. FS.trackingDelegate["onDeletePath"](path);
  7397. } catch (e) {
  7398. err(
  7399. "FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message
  7400. );
  7401. }
  7402. },
  7403. readdir: function(path) {
  7404. var lookup = FS.lookupPath(path, { follow: true });
  7405. var node = lookup.node;
  7406. if (!node.node_ops.readdir) {
  7407. throw new FS.ErrnoError(54);
  7408. }
  7409. return node.node_ops.readdir(node);
  7410. },
  7411. unlink: function(path) {
  7412. var lookup = FS.lookupPath(path, { parent: true });
  7413. var parent = lookup.node;
  7414. var name = PATH.basename(path);
  7415. var node = FS.lookupNode(parent, name);
  7416. var errCode = FS.mayDelete(parent, name, false);
  7417. if (errCode) {
  7418. throw new FS.ErrnoError(errCode);
  7419. }
  7420. if (!parent.node_ops.unlink) {
  7421. throw new FS.ErrnoError(63);
  7422. }
  7423. if (FS.isMountpoint(node)) {
  7424. throw new FS.ErrnoError(10);
  7425. }
  7426. try {
  7427. if (FS.trackingDelegate["willDeletePath"]) {
  7428. FS.trackingDelegate["willDeletePath"](path);
  7429. }
  7430. } catch (e) {
  7431. err(
  7432. "FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message
  7433. );
  7434. }
  7435. parent.node_ops.unlink(parent, name);
  7436. FS.destroyNode(node);
  7437. try {
  7438. if (FS.trackingDelegate["onDeletePath"])
  7439. FS.trackingDelegate["onDeletePath"](path);
  7440. } catch (e) {
  7441. err(
  7442. "FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message
  7443. );
  7444. }
  7445. },
  7446. readlink: function(path) {
  7447. var lookup = FS.lookupPath(path);
  7448. var link = lookup.node;
  7449. if (!link) {
  7450. throw new FS.ErrnoError(44);
  7451. }
  7452. if (!link.node_ops.readlink) {
  7453. throw new FS.ErrnoError(28);
  7454. }
  7455. return PATH_FS.resolve(
  7456. FS.getPath(link.parent),
  7457. link.node_ops.readlink(link)
  7458. );
  7459. },
  7460. stat: function(path, dontFollow) {
  7461. var lookup = FS.lookupPath(path, { follow: !dontFollow });
  7462. var node = lookup.node;
  7463. if (!node) {
  7464. throw new FS.ErrnoError(44);
  7465. }
  7466. if (!node.node_ops.getattr) {
  7467. throw new FS.ErrnoError(63);
  7468. }
  7469. return node.node_ops.getattr(node);
  7470. },
  7471. lstat: function(path) {
  7472. return FS.stat(path, true);
  7473. },
  7474. chmod: function(path, mode, dontFollow) {
  7475. var node;
  7476. if (typeof path === "string") {
  7477. var lookup = FS.lookupPath(path, { follow: !dontFollow });
  7478. node = lookup.node;
  7479. } else {
  7480. node = path;
  7481. }
  7482. if (!node.node_ops.setattr) {
  7483. throw new FS.ErrnoError(63);
  7484. }
  7485. node.node_ops.setattr(node, {
  7486. mode: mode & 4095 | node.mode & ~4095,
  7487. timestamp: Date.now()
  7488. });
  7489. },
  7490. lchmod: function(path, mode) {
  7491. FS.chmod(path, mode, true);
  7492. },
  7493. fchmod: function(fd, mode) {
  7494. var stream = FS.getStream(fd);
  7495. if (!stream) {
  7496. throw new FS.ErrnoError(8);
  7497. }
  7498. FS.chmod(stream.node, mode);
  7499. },
  7500. chown: function(path, uid, gid, dontFollow) {
  7501. var node;
  7502. if (typeof path === "string") {
  7503. var lookup = FS.lookupPath(path, { follow: !dontFollow });
  7504. node = lookup.node;
  7505. } else {
  7506. node = path;
  7507. }
  7508. if (!node.node_ops.setattr) {
  7509. throw new FS.ErrnoError(63);
  7510. }
  7511. node.node_ops.setattr(node, { timestamp: Date.now() });
  7512. },
  7513. lchown: function(path, uid, gid) {
  7514. FS.chown(path, uid, gid, true);
  7515. },
  7516. fchown: function(fd, uid, gid) {
  7517. var stream = FS.getStream(fd);
  7518. if (!stream) {
  7519. throw new FS.ErrnoError(8);
  7520. }
  7521. FS.chown(stream.node, uid, gid);
  7522. },
  7523. truncate: function(path, len) {
  7524. if (len < 0) {
  7525. throw new FS.ErrnoError(28);
  7526. }
  7527. var node;
  7528. if (typeof path === "string") {
  7529. var lookup = FS.lookupPath(path, { follow: true });
  7530. node = lookup.node;
  7531. } else {
  7532. node = path;
  7533. }
  7534. if (!node.node_ops.setattr) {
  7535. throw new FS.ErrnoError(63);
  7536. }
  7537. if (FS.isDir(node.mode)) {
  7538. throw new FS.ErrnoError(31);
  7539. }
  7540. if (!FS.isFile(node.mode)) {
  7541. throw new FS.ErrnoError(28);
  7542. }
  7543. var errCode = FS.nodePermissions(node, "w");
  7544. if (errCode) {
  7545. throw new FS.ErrnoError(errCode);
  7546. }
  7547. node.node_ops.setattr(node, { size: len, timestamp: Date.now() });
  7548. },
  7549. ftruncate: function(fd, len) {
  7550. var stream = FS.getStream(fd);
  7551. if (!stream) {
  7552. throw new FS.ErrnoError(8);
  7553. }
  7554. if ((stream.flags & 2097155) === 0) {
  7555. throw new FS.ErrnoError(28);
  7556. }
  7557. FS.truncate(stream.node, len);
  7558. },
  7559. utime: function(path, atime, mtime) {
  7560. var lookup = FS.lookupPath(path, { follow: true });
  7561. var node = lookup.node;
  7562. node.node_ops.setattr(node, { timestamp: Math.max(atime, mtime) });
  7563. },
  7564. open: function(path, flags, mode, fd_start, fd_end) {
  7565. if (path === "") {
  7566. throw new FS.ErrnoError(44);
  7567. }
  7568. flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags;
  7569. mode = typeof mode === "undefined" ? 438 : mode;
  7570. if (flags & 64) {
  7571. mode = mode & 4095 | 32768;
  7572. } else {
  7573. mode = 0;
  7574. }
  7575. var node;
  7576. if (typeof path === "object") {
  7577. node = path;
  7578. } else {
  7579. path = PATH.normalize(path);
  7580. try {
  7581. var lookup = FS.lookupPath(path, { follow: !(flags & 131072) });
  7582. node = lookup.node;
  7583. } catch (e) {
  7584. }
  7585. }
  7586. var created = false;
  7587. if (flags & 64) {
  7588. if (node) {
  7589. if (flags & 128) {
  7590. throw new FS.ErrnoError(20);
  7591. }
  7592. } else {
  7593. node = FS.mknod(path, mode, 0);
  7594. created = true;
  7595. }
  7596. }
  7597. if (!node) {
  7598. throw new FS.ErrnoError(44);
  7599. }
  7600. if (FS.isChrdev(node.mode)) {
  7601. flags &= ~512;
  7602. }
  7603. if (flags & 65536 && !FS.isDir(node.mode)) {
  7604. throw new FS.ErrnoError(54);
  7605. }
  7606. if (!created) {
  7607. var errCode = FS.mayOpen(node, flags);
  7608. if (errCode) {
  7609. throw new FS.ErrnoError(errCode);
  7610. }
  7611. }
  7612. if (flags & 512) {
  7613. FS.truncate(node, 0);
  7614. }
  7615. flags &= ~(128 | 512 | 131072);
  7616. var stream = FS.createStream(
  7617. {
  7618. node,
  7619. path: FS.getPath(node),
  7620. flags,
  7621. seekable: true,
  7622. position: 0,
  7623. stream_ops: node.stream_ops,
  7624. ungotten: [],
  7625. error: false
  7626. },
  7627. fd_start,
  7628. fd_end
  7629. );
  7630. if (stream.stream_ops.open) {
  7631. stream.stream_ops.open(stream);
  7632. }
  7633. if (Module["logReadFiles"] && !(flags & 1)) {
  7634. if (!FS.readFiles)
  7635. FS.readFiles = {};
  7636. if (!(path in FS.readFiles)) {
  7637. FS.readFiles[path] = 1;
  7638. err("FS.trackingDelegate error on read file: " + path);
  7639. }
  7640. }
  7641. try {
  7642. if (FS.trackingDelegate["onOpenFile"]) {
  7643. var trackingFlags = 0;
  7644. if ((flags & 2097155) !== 1) {
  7645. trackingFlags |= FS.tracking.openFlags.READ;
  7646. }
  7647. if ((flags & 2097155) !== 0) {
  7648. trackingFlags |= FS.tracking.openFlags.WRITE;
  7649. }
  7650. FS.trackingDelegate["onOpenFile"](path, trackingFlags);
  7651. }
  7652. } catch (e) {
  7653. err(
  7654. "FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message
  7655. );
  7656. }
  7657. return stream;
  7658. },
  7659. close: function(stream) {
  7660. if (FS.isClosed(stream)) {
  7661. throw new FS.ErrnoError(8);
  7662. }
  7663. if (stream.getdents)
  7664. stream.getdents = null;
  7665. try {
  7666. if (stream.stream_ops.close) {
  7667. stream.stream_ops.close(stream);
  7668. }
  7669. } catch (e) {
  7670. throw e;
  7671. } finally {
  7672. FS.closeStream(stream.fd);
  7673. }
  7674. stream.fd = null;
  7675. },
  7676. isClosed: function(stream) {
  7677. return stream.fd === null;
  7678. },
  7679. llseek: function(stream, offset, whence) {
  7680. if (FS.isClosed(stream)) {
  7681. throw new FS.ErrnoError(8);
  7682. }
  7683. if (!stream.seekable || !stream.stream_ops.llseek) {
  7684. throw new FS.ErrnoError(70);
  7685. }
  7686. if (whence != 0 && whence != 1 && whence != 2) {
  7687. throw new FS.ErrnoError(28);
  7688. }
  7689. stream.position = stream.stream_ops.llseek(stream, offset, whence);
  7690. stream.ungotten = [];
  7691. return stream.position;
  7692. },
  7693. read: function(stream, buffer2, offset, length, position) {
  7694. if (length < 0 || position < 0) {
  7695. throw new FS.ErrnoError(28);
  7696. }
  7697. if (FS.isClosed(stream)) {
  7698. throw new FS.ErrnoError(8);
  7699. }
  7700. if ((stream.flags & 2097155) === 1) {
  7701. throw new FS.ErrnoError(8);
  7702. }
  7703. if (FS.isDir(stream.node.mode)) {
  7704. throw new FS.ErrnoError(31);
  7705. }
  7706. if (!stream.stream_ops.read) {
  7707. throw new FS.ErrnoError(28);
  7708. }
  7709. var seeking = typeof position !== "undefined";
  7710. if (!seeking) {
  7711. position = stream.position;
  7712. } else if (!stream.seekable) {
  7713. throw new FS.ErrnoError(70);
  7714. }
  7715. var bytesRead = stream.stream_ops.read(
  7716. stream,
  7717. buffer2,
  7718. offset,
  7719. length,
  7720. position
  7721. );
  7722. if (!seeking)
  7723. stream.position += bytesRead;
  7724. return bytesRead;
  7725. },
  7726. write: function(stream, buffer2, offset, length, position, canOwn) {
  7727. if (length < 0 || position < 0) {
  7728. throw new FS.ErrnoError(28);
  7729. }
  7730. if (FS.isClosed(stream)) {
  7731. throw new FS.ErrnoError(8);
  7732. }
  7733. if ((stream.flags & 2097155) === 0) {
  7734. throw new FS.ErrnoError(8);
  7735. }
  7736. if (FS.isDir(stream.node.mode)) {
  7737. throw new FS.ErrnoError(31);
  7738. }
  7739. if (!stream.stream_ops.write) {
  7740. throw new FS.ErrnoError(28);
  7741. }
  7742. if (stream.seekable && stream.flags & 1024) {
  7743. FS.llseek(stream, 0, 2);
  7744. }
  7745. var seeking = typeof position !== "undefined";
  7746. if (!seeking) {
  7747. position = stream.position;
  7748. } else if (!stream.seekable) {
  7749. throw new FS.ErrnoError(70);
  7750. }
  7751. var bytesWritten = stream.stream_ops.write(
  7752. stream,
  7753. buffer2,
  7754. offset,
  7755. length,
  7756. position,
  7757. canOwn
  7758. );
  7759. if (!seeking)
  7760. stream.position += bytesWritten;
  7761. try {
  7762. if (stream.path && FS.trackingDelegate["onWriteToFile"])
  7763. FS.trackingDelegate["onWriteToFile"](stream.path);
  7764. } catch (e) {
  7765. err(
  7766. "FS.trackingDelegate['onWriteToFile']('" + stream.path + "') threw an exception: " + e.message
  7767. );
  7768. }
  7769. return bytesWritten;
  7770. },
  7771. allocate: function(stream, offset, length) {
  7772. if (FS.isClosed(stream)) {
  7773. throw new FS.ErrnoError(8);
  7774. }
  7775. if (offset < 0 || length <= 0) {
  7776. throw new FS.ErrnoError(28);
  7777. }
  7778. if ((stream.flags & 2097155) === 0) {
  7779. throw new FS.ErrnoError(8);
  7780. }
  7781. if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {
  7782. throw new FS.ErrnoError(43);
  7783. }
  7784. if (!stream.stream_ops.allocate) {
  7785. throw new FS.ErrnoError(138);
  7786. }
  7787. stream.stream_ops.allocate(stream, offset, length);
  7788. },
  7789. mmap: function(stream, address, length, position, prot, flags) {
  7790. if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) {
  7791. throw new FS.ErrnoError(2);
  7792. }
  7793. if ((stream.flags & 2097155) === 1) {
  7794. throw new FS.ErrnoError(2);
  7795. }
  7796. if (!stream.stream_ops.mmap) {
  7797. throw new FS.ErrnoError(43);
  7798. }
  7799. return stream.stream_ops.mmap(
  7800. stream,
  7801. address,
  7802. length,
  7803. position,
  7804. prot,
  7805. flags
  7806. );
  7807. },
  7808. msync: function(stream, buffer2, offset, length, mmapFlags) {
  7809. if (!stream || !stream.stream_ops.msync) {
  7810. return 0;
  7811. }
  7812. return stream.stream_ops.msync(
  7813. stream,
  7814. buffer2,
  7815. offset,
  7816. length,
  7817. mmapFlags
  7818. );
  7819. },
  7820. munmap: function(stream) {
  7821. return 0;
  7822. },
  7823. ioctl: function(stream, cmd, arg) {
  7824. if (!stream.stream_ops.ioctl) {
  7825. throw new FS.ErrnoError(59);
  7826. }
  7827. return stream.stream_ops.ioctl(stream, cmd, arg);
  7828. },
  7829. readFile: function(path, opts) {
  7830. opts = opts || {};
  7831. opts.flags = opts.flags || 0;
  7832. opts.encoding = opts.encoding || "binary";
  7833. if (opts.encoding !== "utf8" && opts.encoding !== "binary") {
  7834. throw new Error('Invalid encoding type "' + opts.encoding + '"');
  7835. }
  7836. var ret;
  7837. var stream = FS.open(path, opts.flags);
  7838. var stat = FS.stat(path);
  7839. var length = stat.size;
  7840. var buf = new Uint8Array(length);
  7841. FS.read(stream, buf, 0, length, 0);
  7842. if (opts.encoding === "utf8") {
  7843. ret = UTF8ArrayToString(buf, 0);
  7844. } else if (opts.encoding === "binary") {
  7845. ret = buf;
  7846. }
  7847. FS.close(stream);
  7848. return ret;
  7849. },
  7850. writeFile: function(path, data, opts) {
  7851. opts = opts || {};
  7852. opts.flags = opts.flags || 577;
  7853. var stream = FS.open(path, opts.flags, opts.mode);
  7854. if (typeof data === "string") {
  7855. var buf = new Uint8Array(lengthBytesUTF8(data) + 1);
  7856. var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);
  7857. FS.write(stream, buf, 0, actualNumBytes, void 0, opts.canOwn);
  7858. } else if (ArrayBuffer.isView(data)) {
  7859. FS.write(stream, data, 0, data.byteLength, void 0, opts.canOwn);
  7860. } else {
  7861. throw new Error("Unsupported data type");
  7862. }
  7863. FS.close(stream);
  7864. },
  7865. cwd: function() {
  7866. return FS.currentPath;
  7867. },
  7868. chdir: function(path) {
  7869. var lookup = FS.lookupPath(path, { follow: true });
  7870. if (lookup.node === null) {
  7871. throw new FS.ErrnoError(44);
  7872. }
  7873. if (!FS.isDir(lookup.node.mode)) {
  7874. throw new FS.ErrnoError(54);
  7875. }
  7876. var errCode = FS.nodePermissions(lookup.node, "x");
  7877. if (errCode) {
  7878. throw new FS.ErrnoError(errCode);
  7879. }
  7880. FS.currentPath = lookup.path;
  7881. },
  7882. createDefaultDirectories: function() {
  7883. FS.mkdir("/tmp");
  7884. FS.mkdir("/home");
  7885. FS.mkdir("/home/web_user");
  7886. },
  7887. createDefaultDevices: function() {
  7888. FS.mkdir("/dev");
  7889. FS.registerDevice(FS.makedev(1, 3), {
  7890. read: function() {
  7891. return 0;
  7892. },
  7893. write: function(stream, buffer2, offset, length, pos) {
  7894. return length;
  7895. }
  7896. });
  7897. FS.mkdev("/dev/null", FS.makedev(1, 3));
  7898. TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
  7899. TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
  7900. FS.mkdev("/dev/tty", FS.makedev(5, 0));
  7901. FS.mkdev("/dev/tty1", FS.makedev(6, 0));
  7902. var random_device = getRandomDevice();
  7903. FS.createDevice("/dev", "random", random_device);
  7904. FS.createDevice("/dev", "urandom", random_device);
  7905. FS.mkdir("/dev/shm");
  7906. FS.mkdir("/dev/shm/tmp");
  7907. },
  7908. createSpecialDirectories: function() {
  7909. FS.mkdir("/proc");
  7910. var proc_self = FS.mkdir("/proc/self");
  7911. FS.mkdir("/proc/self/fd");
  7912. FS.mount(
  7913. {
  7914. mount: function() {
  7915. var node = FS.createNode(proc_self, "fd", 16384 | 511, 73);
  7916. node.node_ops = {
  7917. lookup: function(parent, name) {
  7918. var fd = +name;
  7919. var stream = FS.getStream(fd);
  7920. if (!stream)
  7921. throw new FS.ErrnoError(8);
  7922. var ret = {
  7923. parent: null,
  7924. mount: { mountpoint: "fake" },
  7925. node_ops: {
  7926. readlink: function() {
  7927. return stream.path;
  7928. }
  7929. }
  7930. };
  7931. ret.parent = ret;
  7932. return ret;
  7933. }
  7934. };
  7935. return node;
  7936. }
  7937. },
  7938. {},
  7939. "/proc/self/fd"
  7940. );
  7941. },
  7942. createStandardStreams: function() {
  7943. if (Module["stdin"]) {
  7944. FS.createDevice("/dev", "stdin", Module["stdin"]);
  7945. } else {
  7946. FS.symlink("/dev/tty", "/dev/stdin");
  7947. }
  7948. if (Module["stdout"]) {
  7949. FS.createDevice("/dev", "stdout", null, Module["stdout"]);
  7950. } else {
  7951. FS.symlink("/dev/tty", "/dev/stdout");
  7952. }
  7953. if (Module["stderr"]) {
  7954. FS.createDevice("/dev", "stderr", null, Module["stderr"]);
  7955. } else {
  7956. FS.symlink("/dev/tty1", "/dev/stderr");
  7957. }
  7958. FS.open("/dev/stdin", 0);
  7959. FS.open("/dev/stdout", 1);
  7960. FS.open("/dev/stderr", 1);
  7961. },
  7962. ensureErrnoError: function() {
  7963. if (FS.ErrnoError)
  7964. return;
  7965. FS.ErrnoError = function ErrnoError(errno, node) {
  7966. this.node = node;
  7967. this.setErrno = function(errno2) {
  7968. this.errno = errno2;
  7969. };
  7970. this.setErrno(errno);
  7971. this.message = "FS error";
  7972. };
  7973. FS.ErrnoError.prototype = new Error();
  7974. FS.ErrnoError.prototype.constructor = FS.ErrnoError;
  7975. [44].forEach(function(code) {
  7976. FS.genericErrors[code] = new FS.ErrnoError(code);
  7977. FS.genericErrors[code].stack = "<generic error, no stack>";
  7978. });
  7979. },
  7980. staticInit: function() {
  7981. FS.ensureErrnoError();
  7982. FS.nameTable = new Array(4096);
  7983. FS.mount(MEMFS, {}, "/");
  7984. FS.createDefaultDirectories();
  7985. FS.createDefaultDevices();
  7986. FS.createSpecialDirectories();
  7987. FS.filesystems = { MEMFS, NODEFS };
  7988. },
  7989. init: function(input, output, error) {
  7990. FS.init.initialized = true;
  7991. FS.ensureErrnoError();
  7992. Module["stdin"] = input || Module["stdin"];
  7993. Module["stdout"] = output || Module["stdout"];
  7994. Module["stderr"] = error || Module["stderr"];
  7995. FS.createStandardStreams();
  7996. },
  7997. quit: function() {
  7998. FS.init.initialized = false;
  7999. var fflush = Module["_fflush"];
  8000. if (fflush)
  8001. fflush(0);
  8002. for (var i = 0; i < FS.streams.length; i++) {
  8003. var stream = FS.streams[i];
  8004. if (!stream) {
  8005. continue;
  8006. }
  8007. FS.close(stream);
  8008. }
  8009. },
  8010. getMode: function(canRead, canWrite) {
  8011. var mode = 0;
  8012. if (canRead)
  8013. mode |= 292 | 73;
  8014. if (canWrite)
  8015. mode |= 146;
  8016. return mode;
  8017. },
  8018. findObject: function(path, dontResolveLastLink) {
  8019. var ret = FS.analyzePath(path, dontResolveLastLink);
  8020. if (ret.exists) {
  8021. return ret.object;
  8022. } else {
  8023. return null;
  8024. }
  8025. },
  8026. analyzePath: function(path, dontResolveLastLink) {
  8027. try {
  8028. var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
  8029. path = lookup.path;
  8030. } catch (e) {
  8031. }
  8032. var ret = {
  8033. isRoot: false,
  8034. exists: false,
  8035. error: 0,
  8036. name: null,
  8037. path: null,
  8038. object: null,
  8039. parentExists: false,
  8040. parentPath: null,
  8041. parentObject: null
  8042. };
  8043. try {
  8044. var lookup = FS.lookupPath(path, { parent: true });
  8045. ret.parentExists = true;
  8046. ret.parentPath = lookup.path;
  8047. ret.parentObject = lookup.node;
  8048. ret.name = PATH.basename(path);
  8049. lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
  8050. ret.exists = true;
  8051. ret.path = lookup.path;
  8052. ret.object = lookup.node;
  8053. ret.name = lookup.node.name;
  8054. ret.isRoot = lookup.path === "/";
  8055. } catch (e) {
  8056. ret.error = e.errno;
  8057. }
  8058. return ret;
  8059. },
  8060. createPath: function(parent, path, canRead, canWrite) {
  8061. parent = typeof parent === "string" ? parent : FS.getPath(parent);
  8062. var parts = path.split("/").reverse();
  8063. while (parts.length) {
  8064. var part = parts.pop();
  8065. if (!part)
  8066. continue;
  8067. var current = PATH.join2(parent, part);
  8068. try {
  8069. FS.mkdir(current);
  8070. } catch (e) {
  8071. }
  8072. parent = current;
  8073. }
  8074. return current;
  8075. },
  8076. createFile: function(parent, name, properties, canRead, canWrite) {
  8077. var path = PATH.join2(
  8078. typeof parent === "string" ? parent : FS.getPath(parent),
  8079. name
  8080. );
  8081. var mode = FS.getMode(canRead, canWrite);
  8082. return FS.create(path, mode);
  8083. },
  8084. createDataFile: function(parent, name, data, canRead, canWrite, canOwn) {
  8085. var path = name ? PATH.join2(
  8086. typeof parent === "string" ? parent : FS.getPath(parent),
  8087. name
  8088. ) : parent;
  8089. var mode = FS.getMode(canRead, canWrite);
  8090. var node = FS.create(path, mode);
  8091. if (data) {
  8092. if (typeof data === "string") {
  8093. var arr = new Array(data.length);
  8094. for (var i = 0, len = data.length; i < len; ++i)
  8095. arr[i] = data.charCodeAt(i);
  8096. data = arr;
  8097. }
  8098. FS.chmod(node, mode | 146);
  8099. var stream = FS.open(node, 577);
  8100. FS.write(stream, data, 0, data.length, 0, canOwn);
  8101. FS.close(stream);
  8102. FS.chmod(node, mode);
  8103. }
  8104. return node;
  8105. },
  8106. createDevice: function(parent, name, input, output) {
  8107. var path = PATH.join2(
  8108. typeof parent === "string" ? parent : FS.getPath(parent),
  8109. name
  8110. );
  8111. var mode = FS.getMode(!!input, !!output);
  8112. if (!FS.createDevice.major)
  8113. FS.createDevice.major = 64;
  8114. var dev = FS.makedev(FS.createDevice.major++, 0);
  8115. FS.registerDevice(dev, {
  8116. open: function(stream) {
  8117. stream.seekable = false;
  8118. },
  8119. close: function(stream) {
  8120. if (output && output.buffer && output.buffer.length) {
  8121. output(10);
  8122. }
  8123. },
  8124. read: function(stream, buffer2, offset, length, pos) {
  8125. var bytesRead = 0;
  8126. for (var i = 0; i < length; i++) {
  8127. var result;
  8128. try {
  8129. result = input();
  8130. } catch (e) {
  8131. throw new FS.ErrnoError(29);
  8132. }
  8133. if (result === void 0 && bytesRead === 0) {
  8134. throw new FS.ErrnoError(6);
  8135. }
  8136. if (result === null || result === void 0)
  8137. break;
  8138. bytesRead++;
  8139. buffer2[offset + i] = result;
  8140. }
  8141. if (bytesRead) {
  8142. stream.node.timestamp = Date.now();
  8143. }
  8144. return bytesRead;
  8145. },
  8146. write: function(stream, buffer2, offset, length, pos) {
  8147. for (var i = 0; i < length; i++) {
  8148. try {
  8149. output(buffer2[offset + i]);
  8150. } catch (e) {
  8151. throw new FS.ErrnoError(29);
  8152. }
  8153. }
  8154. if (length) {
  8155. stream.node.timestamp = Date.now();
  8156. }
  8157. return i;
  8158. }
  8159. });
  8160. return FS.mkdev(path, mode, dev);
  8161. },
  8162. forceLoadFile: function(obj) {
  8163. if (obj.isDevice || obj.isFolder || obj.link || obj.contents)
  8164. return true;
  8165. if (read_) {
  8166. try {
  8167. obj.contents = intArrayFromString(read_(obj.url), true);
  8168. obj.usedBytes = obj.contents.length;
  8169. } catch (e) {
  8170. throw new FS.ErrnoError(29);
  8171. }
  8172. } else {
  8173. throw new Error("Cannot load without read() or XMLHttpRequest.");
  8174. }
  8175. },
  8176. createLazyFile: function(parent, name, url, canRead, canWrite) {
  8177. var properties; {
  8178. var properties = { isDevice: false, url };
  8179. }
  8180. var node = FS.createFile(parent, name, properties, canRead, canWrite);
  8181. if (properties.contents) {
  8182. node.contents = properties.contents;
  8183. } else if (properties.url) {
  8184. node.contents = null;
  8185. node.url = properties.url;
  8186. }
  8187. Object.defineProperties(node, {
  8188. usedBytes: {
  8189. get: function() {
  8190. return this.contents.length;
  8191. }
  8192. }
  8193. });
  8194. var stream_ops = {};
  8195. var keys = Object.keys(node.stream_ops);
  8196. keys.forEach(function(key2) {
  8197. var fn = node.stream_ops[key2];
  8198. stream_ops[key2] = function forceLoadLazyFile() {
  8199. FS.forceLoadFile(node);
  8200. return fn.apply(null, arguments);
  8201. };
  8202. });
  8203. stream_ops.read = function stream_ops_read(stream, buffer2, offset, length, position) {
  8204. FS.forceLoadFile(node);
  8205. var contents = stream.node.contents;
  8206. if (position >= contents.length)
  8207. return 0;
  8208. var size = Math.min(contents.length - position, length);
  8209. if (contents.slice) {
  8210. for (var i = 0; i < size; i++) {
  8211. buffer2[offset + i] = contents[position + i];
  8212. }
  8213. } else {
  8214. for (var i = 0; i < size; i++) {
  8215. buffer2[offset + i] = contents.get(position + i);
  8216. }
  8217. }
  8218. return size;
  8219. };
  8220. node.stream_ops = stream_ops;
  8221. return node;
  8222. },
  8223. createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) {
  8224. Browser.init();
  8225. var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;
  8226. function processData(byteArray) {
  8227. function finish(byteArray2) {
  8228. if (preFinish)
  8229. preFinish();
  8230. if (!dontCreateFile) {
  8231. FS.createDataFile(
  8232. parent,
  8233. name,
  8234. byteArray2,
  8235. canRead,
  8236. canWrite,
  8237. canOwn
  8238. );
  8239. }
  8240. if (onload)
  8241. onload();
  8242. removeRunDependency();
  8243. }
  8244. var handled = false;
  8245. Module["preloadPlugins"].forEach(function(plugin) {
  8246. if (handled)
  8247. return;
  8248. if (plugin["canHandle"](fullname)) {
  8249. plugin["handle"](byteArray, fullname, finish, function() {
  8250. if (onerror)
  8251. onerror();
  8252. removeRunDependency();
  8253. });
  8254. handled = true;
  8255. }
  8256. });
  8257. if (!handled)
  8258. finish(byteArray);
  8259. }
  8260. addRunDependency();
  8261. if (typeof url == "string") {
  8262. Browser.asyncLoad(
  8263. url,
  8264. function(byteArray) {
  8265. processData(byteArray);
  8266. },
  8267. onerror
  8268. );
  8269. } else {
  8270. processData(url);
  8271. }
  8272. },
  8273. indexedDB: function() {
  8274. return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
  8275. },
  8276. DB_NAME: function() {
  8277. return "EM_FS_" + window.location.pathname;
  8278. },
  8279. DB_VERSION: 20,
  8280. DB_STORE_NAME: "FILE_DATA",
  8281. saveFilesToDB: function(paths, onload, onerror) {
  8282. onload = onload || function() {
  8283. };
  8284. onerror = onerror || function() {
  8285. };
  8286. var indexedDB = FS.indexedDB();
  8287. try {
  8288. var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
  8289. } catch (e) {
  8290. return onerror(e);
  8291. }
  8292. openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
  8293. out("creating db");
  8294. var db = openRequest.result;
  8295. db.createObjectStore(FS.DB_STORE_NAME);
  8296. };
  8297. openRequest.onsuccess = function openRequest_onsuccess() {
  8298. var db = openRequest.result;
  8299. var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite");
  8300. var files = transaction.objectStore(FS.DB_STORE_NAME);
  8301. var ok = 0, fail = 0, total = paths.length;
  8302. function finish() {
  8303. if (fail == 0)
  8304. onload();
  8305. else
  8306. onerror();
  8307. }
  8308. paths.forEach(function(path) {
  8309. var putRequest = files.put(
  8310. FS.analyzePath(path).object.contents,
  8311. path
  8312. );
  8313. putRequest.onsuccess = function putRequest_onsuccess() {
  8314. ok++;
  8315. if (ok + fail == total)
  8316. finish();
  8317. };
  8318. putRequest.onerror = function putRequest_onerror() {
  8319. fail++;
  8320. if (ok + fail == total)
  8321. finish();
  8322. };
  8323. });
  8324. transaction.onerror = onerror;
  8325. };
  8326. openRequest.onerror = onerror;
  8327. },
  8328. loadFilesFromDB: function(paths, onload, onerror) {
  8329. onload = onload || function() {
  8330. };
  8331. onerror = onerror || function() {
  8332. };
  8333. var indexedDB = FS.indexedDB();
  8334. try {
  8335. var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
  8336. } catch (e) {
  8337. return onerror(e);
  8338. }
  8339. openRequest.onupgradeneeded = onerror;
  8340. openRequest.onsuccess = function openRequest_onsuccess() {
  8341. var db = openRequest.result;
  8342. try {
  8343. var transaction = db.transaction([FS.DB_STORE_NAME], "readonly");
  8344. } catch (e) {
  8345. onerror(e);
  8346. return;
  8347. }
  8348. var files = transaction.objectStore(FS.DB_STORE_NAME);
  8349. var ok = 0, fail = 0, total = paths.length;
  8350. function finish() {
  8351. if (fail == 0)
  8352. onload();
  8353. else
  8354. onerror();
  8355. }
  8356. paths.forEach(function(path) {
  8357. var getRequest = files.get(path);
  8358. getRequest.onsuccess = function getRequest_onsuccess() {
  8359. if (FS.analyzePath(path).exists) {
  8360. FS.unlink(path);
  8361. }
  8362. FS.createDataFile(
  8363. PATH.dirname(path),
  8364. PATH.basename(path),
  8365. getRequest.result,
  8366. true,
  8367. true,
  8368. true
  8369. );
  8370. ok++;
  8371. if (ok + fail == total)
  8372. finish();
  8373. };
  8374. getRequest.onerror = function getRequest_onerror() {
  8375. fail++;
  8376. if (ok + fail == total)
  8377. finish();
  8378. };
  8379. });
  8380. transaction.onerror = onerror;
  8381. };
  8382. openRequest.onerror = onerror;
  8383. }
  8384. };
  8385. var SYSCALLS = {
  8386. mappings: {},
  8387. DEFAULT_POLLMASK: 5,
  8388. umask: 511,
  8389. calculateAt: function(dirfd, path, allowEmpty) {
  8390. if (path[0] === "/") {
  8391. return path;
  8392. }
  8393. var dir;
  8394. if (dirfd === -100) {
  8395. dir = FS.cwd();
  8396. } else {
  8397. var dirstream = FS.getStream(dirfd);
  8398. if (!dirstream)
  8399. throw new FS.ErrnoError(8);
  8400. dir = dirstream.path;
  8401. }
  8402. if (path.length == 0) {
  8403. if (!allowEmpty) {
  8404. throw new FS.ErrnoError(44);
  8405. }
  8406. return dir;
  8407. }
  8408. return PATH.join2(dir, path);
  8409. },
  8410. doStat: function(func, path, buf) {
  8411. try {
  8412. var stat = func(path);
  8413. } catch (e) {
  8414. if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) {
  8415. return -54;
  8416. }
  8417. throw e;
  8418. }
  8419. HEAP32[buf >> 2] = stat.dev;
  8420. HEAP32[buf + 4 >> 2] = 0;
  8421. HEAP32[buf + 8 >> 2] = stat.ino;
  8422. HEAP32[buf + 12 >> 2] = stat.mode;
  8423. HEAP32[buf + 16 >> 2] = stat.nlink;
  8424. HEAP32[buf + 20 >> 2] = stat.uid;
  8425. HEAP32[buf + 24 >> 2] = stat.gid;
  8426. HEAP32[buf + 28 >> 2] = stat.rdev;
  8427. HEAP32[buf + 32 >> 2] = 0;
  8428. tempI64 = [
  8429. stat.size >>> 0,
  8430. (tempDouble = stat.size, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil(
  8431. (tempDouble - +(~~tempDouble >>> 0)) / 4294967296
  8432. ) >>> 0 : 0)
  8433. ], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1];
  8434. HEAP32[buf + 48 >> 2] = 4096;
  8435. HEAP32[buf + 52 >> 2] = stat.blocks;
  8436. HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0;
  8437. HEAP32[buf + 60 >> 2] = 0;
  8438. HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0;
  8439. HEAP32[buf + 68 >> 2] = 0;
  8440. HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0;
  8441. HEAP32[buf + 76 >> 2] = 0;
  8442. tempI64 = [
  8443. stat.ino >>> 0,
  8444. (tempDouble = stat.ino, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil(
  8445. (tempDouble - +(~~tempDouble >>> 0)) / 4294967296
  8446. ) >>> 0 : 0)
  8447. ], HEAP32[buf + 80 >> 2] = tempI64[0], HEAP32[buf + 84 >> 2] = tempI64[1];
  8448. return 0;
  8449. },
  8450. doMsync: function(addr, stream, len, flags, offset) {
  8451. var buffer2 = HEAPU8.slice(addr, addr + len);
  8452. FS.msync(stream, buffer2, offset, len, flags);
  8453. },
  8454. doMkdir: function(path, mode) {
  8455. path = PATH.normalize(path);
  8456. if (path[path.length - 1] === "/")
  8457. path = path.substr(0, path.length - 1);
  8458. FS.mkdir(path, mode, 0);
  8459. return 0;
  8460. },
  8461. doMknod: function(path, mode, dev) {
  8462. switch (mode & 61440) {
  8463. case 32768:
  8464. case 8192:
  8465. case 24576:
  8466. case 4096:
  8467. case 49152:
  8468. break;
  8469. default:
  8470. return -28;
  8471. }
  8472. FS.mknod(path, mode, dev);
  8473. return 0;
  8474. },
  8475. doReadlink: function(path, buf, bufsize) {
  8476. if (bufsize <= 0)
  8477. return -28;
  8478. var ret = FS.readlink(path);
  8479. var len = Math.min(bufsize, lengthBytesUTF8(ret));
  8480. var endChar = HEAP8[buf + len];
  8481. stringToUTF8(ret, buf, bufsize + 1);
  8482. HEAP8[buf + len] = endChar;
  8483. return len;
  8484. },
  8485. doAccess: function(path, amode) {
  8486. if (amode & ~7) {
  8487. return -28;
  8488. }
  8489. var node;
  8490. var lookup = FS.lookupPath(path, { follow: true });
  8491. node = lookup.node;
  8492. if (!node) {
  8493. return -44;
  8494. }
  8495. var perms = "";
  8496. if (amode & 4)
  8497. perms += "r";
  8498. if (amode & 2)
  8499. perms += "w";
  8500. if (amode & 1)
  8501. perms += "x";
  8502. if (perms && FS.nodePermissions(node, perms)) {
  8503. return -2;
  8504. }
  8505. return 0;
  8506. },
  8507. doDup: function(path, flags, suggestFD) {
  8508. var suggest = FS.getStream(suggestFD);
  8509. if (suggest)
  8510. FS.close(suggest);
  8511. return FS.open(path, flags, 0, suggestFD, suggestFD).fd;
  8512. },
  8513. doReadv: function(stream, iov, iovcnt, offset) {
  8514. var ret = 0;
  8515. for (var i = 0; i < iovcnt; i++) {
  8516. var ptr = HEAP32[iov + i * 8 >> 2];
  8517. var len = HEAP32[iov + (i * 8 + 4) >> 2];
  8518. var curr = FS.read(stream, HEAP8, ptr, len, offset);
  8519. if (curr < 0)
  8520. return -1;
  8521. ret += curr;
  8522. if (curr < len)
  8523. break;
  8524. }
  8525. return ret;
  8526. },
  8527. doWritev: function(stream, iov, iovcnt, offset) {
  8528. var ret = 0;
  8529. for (var i = 0; i < iovcnt; i++) {
  8530. var ptr = HEAP32[iov + i * 8 >> 2];
  8531. var len = HEAP32[iov + (i * 8 + 4) >> 2];
  8532. var curr = FS.write(stream, HEAP8, ptr, len, offset);
  8533. if (curr < 0)
  8534. return -1;
  8535. ret += curr;
  8536. }
  8537. return ret;
  8538. },
  8539. varargs: void 0,
  8540. get: function() {
  8541. SYSCALLS.varargs += 4;
  8542. var ret = HEAP32[SYSCALLS.varargs - 4 >> 2];
  8543. return ret;
  8544. },
  8545. getStr: function(ptr) {
  8546. var ret = UTF8ToString(ptr);
  8547. return ret;
  8548. },
  8549. getStreamFromFD: function(fd) {
  8550. var stream = FS.getStream(fd);
  8551. if (!stream)
  8552. throw new FS.ErrnoError(8);
  8553. return stream;
  8554. },
  8555. get64: function(low, high) {
  8556. return low;
  8557. }
  8558. };
  8559. function ___sys_chmod(path, mode) {
  8560. try {
  8561. path = SYSCALLS.getStr(path);
  8562. FS.chmod(path, mode);
  8563. return 0;
  8564. } catch (e) {
  8565. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8566. abort(e);
  8567. return -e.errno;
  8568. }
  8569. }
  8570. function setErrNo(value) {
  8571. HEAP32[___errno_location() >> 2] = value;
  8572. return value;
  8573. }
  8574. function ___sys_fcntl64(fd, cmd, varargs) {
  8575. SYSCALLS.varargs = varargs;
  8576. try {
  8577. var stream = SYSCALLS.getStreamFromFD(fd);
  8578. switch (cmd) {
  8579. case 0: {
  8580. var arg = SYSCALLS.get();
  8581. if (arg < 0) {
  8582. return -28;
  8583. }
  8584. var newStream;
  8585. newStream = FS.open(stream.path, stream.flags, 0, arg);
  8586. return newStream.fd;
  8587. }
  8588. case 1:
  8589. case 2:
  8590. return 0;
  8591. case 3:
  8592. return stream.flags;
  8593. case 4: {
  8594. var arg = SYSCALLS.get();
  8595. stream.flags |= arg;
  8596. return 0;
  8597. }
  8598. case 12: {
  8599. var arg = SYSCALLS.get();
  8600. var offset = 0;
  8601. HEAP16[arg + offset >> 1] = 2;
  8602. return 0;
  8603. }
  8604. case 13:
  8605. case 14:
  8606. return 0;
  8607. case 16:
  8608. case 8:
  8609. return -28;
  8610. case 9:
  8611. setErrNo(28);
  8612. return -1;
  8613. default: {
  8614. return -28;
  8615. }
  8616. }
  8617. } catch (e) {
  8618. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8619. abort(e);
  8620. return -e.errno;
  8621. }
  8622. }
  8623. function ___sys_fstat64(fd, buf) {
  8624. try {
  8625. var stream = SYSCALLS.getStreamFromFD(fd);
  8626. return SYSCALLS.doStat(FS.stat, stream.path, buf);
  8627. } catch (e) {
  8628. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8629. abort(e);
  8630. return -e.errno;
  8631. }
  8632. }
  8633. function ___sys_ioctl(fd, op, varargs) {
  8634. SYSCALLS.varargs = varargs;
  8635. try {
  8636. var stream = SYSCALLS.getStreamFromFD(fd);
  8637. switch (op) {
  8638. case 21509:
  8639. case 21505: {
  8640. if (!stream.tty)
  8641. return -59;
  8642. return 0;
  8643. }
  8644. case 21510:
  8645. case 21511:
  8646. case 21512:
  8647. case 21506:
  8648. case 21507:
  8649. case 21508: {
  8650. if (!stream.tty)
  8651. return -59;
  8652. return 0;
  8653. }
  8654. case 21519: {
  8655. if (!stream.tty)
  8656. return -59;
  8657. var argp = SYSCALLS.get();
  8658. HEAP32[argp >> 2] = 0;
  8659. return 0;
  8660. }
  8661. case 21520: {
  8662. if (!stream.tty)
  8663. return -59;
  8664. return -28;
  8665. }
  8666. case 21531: {
  8667. var argp = SYSCALLS.get();
  8668. return FS.ioctl(stream, op, argp);
  8669. }
  8670. case 21523: {
  8671. if (!stream.tty)
  8672. return -59;
  8673. return 0;
  8674. }
  8675. case 21524: {
  8676. if (!stream.tty)
  8677. return -59;
  8678. return 0;
  8679. }
  8680. default:
  8681. abort("bad ioctl syscall " + op);
  8682. }
  8683. } catch (e) {
  8684. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8685. abort(e);
  8686. return -e.errno;
  8687. }
  8688. }
  8689. function ___sys_open(path, flags, varargs) {
  8690. SYSCALLS.varargs = varargs;
  8691. try {
  8692. var pathname = SYSCALLS.getStr(path);
  8693. var mode = varargs ? SYSCALLS.get() : 0;
  8694. var stream = FS.open(pathname, flags, mode);
  8695. return stream.fd;
  8696. } catch (e) {
  8697. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8698. abort(e);
  8699. return -e.errno;
  8700. }
  8701. }
  8702. function ___sys_rename(old_path, new_path) {
  8703. try {
  8704. old_path = SYSCALLS.getStr(old_path);
  8705. new_path = SYSCALLS.getStr(new_path);
  8706. FS.rename(old_path, new_path);
  8707. return 0;
  8708. } catch (e) {
  8709. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8710. abort(e);
  8711. return -e.errno;
  8712. }
  8713. }
  8714. function ___sys_rmdir(path) {
  8715. try {
  8716. path = SYSCALLS.getStr(path);
  8717. FS.rmdir(path);
  8718. return 0;
  8719. } catch (e) {
  8720. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8721. abort(e);
  8722. return -e.errno;
  8723. }
  8724. }
  8725. function ___sys_stat64(path, buf) {
  8726. try {
  8727. path = SYSCALLS.getStr(path);
  8728. return SYSCALLS.doStat(FS.stat, path, buf);
  8729. } catch (e) {
  8730. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8731. abort(e);
  8732. return -e.errno;
  8733. }
  8734. }
  8735. function ___sys_unlink(path) {
  8736. try {
  8737. path = SYSCALLS.getStr(path);
  8738. FS.unlink(path);
  8739. return 0;
  8740. } catch (e) {
  8741. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8742. abort(e);
  8743. return -e.errno;
  8744. }
  8745. }
  8746. function _emscripten_memcpy_big(dest, src, num) {
  8747. HEAPU8.copyWithin(dest, src, src + num);
  8748. }
  8749. function emscripten_realloc_buffer(size) {
  8750. try {
  8751. wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16);
  8752. updateGlobalBufferAndViews(wasmMemory.buffer);
  8753. return 1;
  8754. } catch (e) {
  8755. }
  8756. }
  8757. function _emscripten_resize_heap(requestedSize) {
  8758. var oldSize = HEAPU8.length;
  8759. requestedSize = requestedSize >>> 0;
  8760. var maxHeapSize = 2147483648;
  8761. if (requestedSize > maxHeapSize) {
  8762. return false;
  8763. }
  8764. for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
  8765. var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);
  8766. overGrownHeapSize = Math.min(
  8767. overGrownHeapSize,
  8768. requestedSize + 100663296
  8769. );
  8770. var newSize = Math.min(
  8771. maxHeapSize,
  8772. alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)
  8773. );
  8774. var replacement = emscripten_realloc_buffer(newSize);
  8775. if (replacement) {
  8776. return true;
  8777. }
  8778. }
  8779. return false;
  8780. }
  8781. function _fd_close(fd) {
  8782. try {
  8783. var stream = SYSCALLS.getStreamFromFD(fd);
  8784. FS.close(stream);
  8785. return 0;
  8786. } catch (e) {
  8787. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8788. abort(e);
  8789. return e.errno;
  8790. }
  8791. }
  8792. function _fd_fdstat_get(fd, pbuf) {
  8793. try {
  8794. var stream = SYSCALLS.getStreamFromFD(fd);
  8795. var type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4;
  8796. HEAP8[pbuf >> 0] = type;
  8797. return 0;
  8798. } catch (e) {
  8799. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8800. abort(e);
  8801. return e.errno;
  8802. }
  8803. }
  8804. function _fd_read(fd, iov, iovcnt, pnum) {
  8805. try {
  8806. var stream = SYSCALLS.getStreamFromFD(fd);
  8807. var num = SYSCALLS.doReadv(stream, iov, iovcnt);
  8808. HEAP32[pnum >> 2] = num;
  8809. return 0;
  8810. } catch (e) {
  8811. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8812. abort(e);
  8813. return e.errno;
  8814. }
  8815. }
  8816. function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
  8817. try {
  8818. var stream = SYSCALLS.getStreamFromFD(fd);
  8819. var HIGH_OFFSET = 4294967296;
  8820. var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0);
  8821. var DOUBLE_LIMIT = 9007199254740992;
  8822. if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) {
  8823. return -61;
  8824. }
  8825. FS.llseek(stream, offset, whence);
  8826. tempI64 = [
  8827. stream.position >>> 0,
  8828. (tempDouble = stream.position, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil(
  8829. (tempDouble - +(~~tempDouble >>> 0)) / 4294967296
  8830. ) >>> 0 : 0)
  8831. ], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1];
  8832. if (stream.getdents && offset === 0 && whence === 0)
  8833. stream.getdents = null;
  8834. return 0;
  8835. } catch (e) {
  8836. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8837. abort(e);
  8838. return e.errno;
  8839. }
  8840. }
  8841. function _fd_write(fd, iov, iovcnt, pnum) {
  8842. try {
  8843. var stream = SYSCALLS.getStreamFromFD(fd);
  8844. var num = SYSCALLS.doWritev(stream, iov, iovcnt);
  8845. HEAP32[pnum >> 2] = num;
  8846. return 0;
  8847. } catch (e) {
  8848. if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
  8849. abort(e);
  8850. return e.errno;
  8851. }
  8852. }
  8853. function _setTempRet0(val) {
  8854. }
  8855. function _time(ptr) {
  8856. var ret = Date.now() / 1e3 | 0;
  8857. if (ptr) {
  8858. HEAP32[ptr >> 2] = ret;
  8859. }
  8860. return ret;
  8861. }
  8862. function _tzset() {
  8863. if (_tzset.called)
  8864. return;
  8865. _tzset.called = true;
  8866. var currentYear = new Date().getFullYear();
  8867. var winter = new Date(currentYear, 0, 1);
  8868. var summer = new Date(currentYear, 6, 1);
  8869. var winterOffset = winter.getTimezoneOffset();
  8870. var summerOffset = summer.getTimezoneOffset();
  8871. var stdTimezoneOffset = Math.max(winterOffset, summerOffset);
  8872. HEAP32[__get_timezone() >> 2] = stdTimezoneOffset * 60;
  8873. HEAP32[__get_daylight() >> 2] = Number(winterOffset != summerOffset);
  8874. function extractZone(date) {
  8875. var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/);
  8876. return match ? match[1] : "GMT";
  8877. }
  8878. var winterName = extractZone(winter);
  8879. var summerName = extractZone(summer);
  8880. var winterNamePtr = allocateUTF8(winterName);
  8881. var summerNamePtr = allocateUTF8(summerName);
  8882. if (summerOffset < winterOffset) {
  8883. HEAP32[__get_tzname() >> 2] = winterNamePtr;
  8884. HEAP32[__get_tzname() + 4 >> 2] = summerNamePtr;
  8885. } else {
  8886. HEAP32[__get_tzname() >> 2] = summerNamePtr;
  8887. HEAP32[__get_tzname() + 4 >> 2] = winterNamePtr;
  8888. }
  8889. }
  8890. function _timegm(tmPtr) {
  8891. _tzset();
  8892. var time = Date.UTC(
  8893. HEAP32[tmPtr + 20 >> 2] + 1900,
  8894. HEAP32[tmPtr + 16 >> 2],
  8895. HEAP32[tmPtr + 12 >> 2],
  8896. HEAP32[tmPtr + 8 >> 2],
  8897. HEAP32[tmPtr + 4 >> 2],
  8898. HEAP32[tmPtr >> 2],
  8899. 0
  8900. );
  8901. var date = new Date(time);
  8902. HEAP32[tmPtr + 24 >> 2] = date.getUTCDay();
  8903. var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);
  8904. var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0;
  8905. HEAP32[tmPtr + 28 >> 2] = yday;
  8906. return date.getTime() / 1e3 | 0;
  8907. }
  8908. var FSNode = function(parent, name, mode, rdev) {
  8909. if (!parent) {
  8910. parent = this;
  8911. }
  8912. this.parent = parent;
  8913. this.mount = parent.mount;
  8914. this.mounted = null;
  8915. this.id = FS.nextInode++;
  8916. this.name = name;
  8917. this.mode = mode;
  8918. this.node_ops = {};
  8919. this.stream_ops = {};
  8920. this.rdev = rdev;
  8921. };
  8922. var readMode = 292 | 73;
  8923. var writeMode = 146;
  8924. Object.defineProperties(FSNode.prototype, {
  8925. read: {
  8926. get: function() {
  8927. return (this.mode & readMode) === readMode;
  8928. },
  8929. set: function(val) {
  8930. val ? this.mode |= readMode : this.mode &= ~readMode;
  8931. }
  8932. },
  8933. write: {
  8934. get: function() {
  8935. return (this.mode & writeMode) === writeMode;
  8936. },
  8937. set: function(val) {
  8938. val ? this.mode |= writeMode : this.mode &= ~writeMode;
  8939. }
  8940. },
  8941. isFolder: {
  8942. get: function() {
  8943. return FS.isDir(this.mode);
  8944. }
  8945. },
  8946. isDevice: {
  8947. get: function() {
  8948. return FS.isChrdev(this.mode);
  8949. }
  8950. }
  8951. });
  8952. FS.FSNode = FSNode;
  8953. FS.staticInit();
  8954. {
  8955. var fs = frozenFs;
  8956. var NODEJS_PATH = path__default.default;
  8957. NODEFS.staticInit();
  8958. }
  8959. {
  8960. var _wrapNodeError = function(func) {
  8961. return function() {
  8962. try {
  8963. return func.apply(this, arguments);
  8964. } catch (e) {
  8965. if (!e.code)
  8966. throw e;
  8967. throw new FS.ErrnoError(ERRNO_CODES[e.code]);
  8968. }
  8969. };
  8970. };
  8971. var VFS = Object.assign({}, FS);
  8972. for (var _key in NODERAWFS)
  8973. FS[_key] = _wrapNodeError(NODERAWFS[_key]);
  8974. }
  8975. function intArrayFromString(stringy, dontAddNull, length) {
  8976. var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;
  8977. var u8array = new Array(len);
  8978. var numBytesWritten = stringToUTF8Array(
  8979. stringy,
  8980. u8array,
  8981. 0,
  8982. u8array.length
  8983. );
  8984. if (dontAddNull)
  8985. u8array.length = numBytesWritten;
  8986. return u8array;
  8987. }
  8988. function intArrayFromBase64(s) {
  8989. {
  8990. var buf;
  8991. try {
  8992. buf = Buffer.from(s, "base64");
  8993. } catch (_) {
  8994. buf = new Buffer(s, "base64");
  8995. }
  8996. return new Uint8Array(
  8997. buf["buffer"],
  8998. buf["byteOffset"],
  8999. buf["byteLength"]
  9000. );
  9001. }
  9002. }
  9003. function tryParseAsDataURI(filename) {
  9004. if (!isDataURI(filename)) {
  9005. return;
  9006. }
  9007. return intArrayFromBase64(filename.slice(dataURIPrefix.length));
  9008. }
  9009. var asmLibraryArg = {
  9010. s: ___gmtime_r,
  9011. p: ___sys_chmod,
  9012. e: ___sys_fcntl64,
  9013. k: ___sys_fstat64,
  9014. o: ___sys_ioctl,
  9015. q: ___sys_open,
  9016. i: ___sys_rename,
  9017. r: ___sys_rmdir,
  9018. c: ___sys_stat64,
  9019. h: ___sys_unlink,
  9020. l: _emscripten_memcpy_big,
  9021. m: _emscripten_resize_heap,
  9022. f: _fd_close,
  9023. j: _fd_fdstat_get,
  9024. g: _fd_read,
  9025. n: _fd_seek,
  9026. d: _fd_write,
  9027. a: _setTempRet0,
  9028. b: _time,
  9029. t: _timegm
  9030. };
  9031. var asm = createWasm();
  9032. Module["___wasm_call_ctors"] = asm["v"];
  9033. Module["_zip_ext_count_symlinks"] = asm["w"];
  9034. Module["_zip_file_get_external_attributes"] = asm["x"];
  9035. Module["_zipstruct_stat"] = asm["y"];
  9036. Module["_zipstruct_statS"] = asm["z"];
  9037. Module["_zipstruct_stat_name"] = asm["A"];
  9038. Module["_zipstruct_stat_index"] = asm["B"];
  9039. Module["_zipstruct_stat_size"] = asm["C"];
  9040. Module["_zipstruct_stat_mtime"] = asm["D"];
  9041. Module["_zipstruct_stat_crc"] = asm["E"];
  9042. Module["_zipstruct_error"] = asm["F"];
  9043. Module["_zipstruct_errorS"] = asm["G"];
  9044. Module["_zipstruct_error_code_zip"] = asm["H"];
  9045. Module["_zipstruct_stat_comp_size"] = asm["I"];
  9046. Module["_zipstruct_stat_comp_method"] = asm["J"];
  9047. Module["_zip_close"] = asm["K"];
  9048. Module["_zip_delete"] = asm["L"];
  9049. Module["_zip_dir_add"] = asm["M"];
  9050. Module["_zip_discard"] = asm["N"];
  9051. Module["_zip_error_init_with_code"] = asm["O"];
  9052. Module["_zip_get_error"] = asm["P"];
  9053. Module["_zip_file_get_error"] = asm["Q"];
  9054. Module["_zip_error_strerror"] = asm["R"];
  9055. Module["_zip_fclose"] = asm["S"];
  9056. Module["_zip_file_add"] = asm["T"];
  9057. Module["_free"] = asm["U"];
  9058. var _malloc = Module["_malloc"] = asm["V"];
  9059. var ___errno_location = Module["___errno_location"] = asm["W"];
  9060. Module["_zip_source_error"] = asm["X"];
  9061. Module["_zip_source_seek"] = asm["Y"];
  9062. Module["_zip_file_set_external_attributes"] = asm["Z"];
  9063. Module["_zip_file_set_mtime"] = asm["_"];
  9064. Module["_zip_fopen"] = asm["$"];
  9065. Module["_zip_fopen_index"] = asm["aa"];
  9066. Module["_zip_fread"] = asm["ba"];
  9067. Module["_zip_get_name"] = asm["ca"];
  9068. Module["_zip_get_num_entries"] = asm["da"];
  9069. Module["_zip_source_read"] = asm["ea"];
  9070. Module["_zip_name_locate"] = asm["fa"];
  9071. Module["_zip_open"] = asm["ga"];
  9072. Module["_zip_open_from_source"] = asm["ha"];
  9073. Module["_zip_set_file_compression"] = asm["ia"];
  9074. Module["_zip_source_buffer"] = asm["ja"];
  9075. Module["_zip_source_buffer_create"] = asm["ka"];
  9076. Module["_zip_source_close"] = asm["la"];
  9077. Module["_zip_source_free"] = asm["ma"];
  9078. Module["_zip_source_keep"] = asm["na"];
  9079. Module["_zip_source_open"] = asm["oa"];
  9080. Module["_zip_source_set_mtime"] = asm["qa"];
  9081. Module["_zip_source_tell"] = asm["ra"];
  9082. Module["_zip_stat"] = asm["sa"];
  9083. Module["_zip_stat_index"] = asm["ta"];
  9084. var __get_tzname = Module["__get_tzname"] = asm["ua"];
  9085. var __get_daylight = Module["__get_daylight"] = asm["va"];
  9086. var __get_timezone = Module["__get_timezone"] = asm["wa"];
  9087. var stackSave = Module["stackSave"] = asm["xa"];
  9088. var stackRestore = Module["stackRestore"] = asm["ya"];
  9089. var stackAlloc = Module["stackAlloc"] = asm["za"];
  9090. Module["cwrap"] = cwrap;
  9091. Module["getValue"] = getValue;
  9092. var calledRun;
  9093. dependenciesFulfilled = function runCaller() {
  9094. if (!calledRun)
  9095. run();
  9096. if (!calledRun)
  9097. dependenciesFulfilled = runCaller;
  9098. };
  9099. function run(args) {
  9100. if (runDependencies > 0) {
  9101. return;
  9102. }
  9103. preRun();
  9104. if (runDependencies > 0) {
  9105. return;
  9106. }
  9107. function doRun() {
  9108. if (calledRun)
  9109. return;
  9110. calledRun = true;
  9111. Module["calledRun"] = true;
  9112. if (ABORT)
  9113. return;
  9114. initRuntime();
  9115. readyPromiseResolve(Module);
  9116. if (Module["onRuntimeInitialized"])
  9117. Module["onRuntimeInitialized"]();
  9118. postRun();
  9119. }
  9120. if (Module["setStatus"]) {
  9121. Module["setStatus"]("Running...");
  9122. setTimeout(function() {
  9123. setTimeout(function() {
  9124. Module["setStatus"]("");
  9125. }, 1);
  9126. doRun();
  9127. }, 1);
  9128. } else {
  9129. doRun();
  9130. }
  9131. }
  9132. Module["run"] = run;
  9133. if (Module["preInit"]) {
  9134. if (typeof Module["preInit"] == "function")
  9135. Module["preInit"] = [Module["preInit"]];
  9136. while (Module["preInit"].length > 0) {
  9137. Module["preInit"].pop()();
  9138. }
  9139. }
  9140. run();
  9141. return createModule2;
  9142. };
  9143. }();
  9144. module.exports = createModule;
  9145. }(libzipSync));
  9146. const createModule = libzipSync.exports;
  9147. const number64 = [
  9148. `number`,
  9149. `number`
  9150. ];
  9151. var Errors = /* @__PURE__ */ ((Errors2) => {
  9152. Errors2[Errors2["ZIP_ER_OK"] = 0] = "ZIP_ER_OK";
  9153. Errors2[Errors2["ZIP_ER_MULTIDISK"] = 1] = "ZIP_ER_MULTIDISK";
  9154. Errors2[Errors2["ZIP_ER_RENAME"] = 2] = "ZIP_ER_RENAME";
  9155. Errors2[Errors2["ZIP_ER_CLOSE"] = 3] = "ZIP_ER_CLOSE";
  9156. Errors2[Errors2["ZIP_ER_SEEK"] = 4] = "ZIP_ER_SEEK";
  9157. Errors2[Errors2["ZIP_ER_READ"] = 5] = "ZIP_ER_READ";
  9158. Errors2[Errors2["ZIP_ER_WRITE"] = 6] = "ZIP_ER_WRITE";
  9159. Errors2[Errors2["ZIP_ER_CRC"] = 7] = "ZIP_ER_CRC";
  9160. Errors2[Errors2["ZIP_ER_ZIPCLOSED"] = 8] = "ZIP_ER_ZIPCLOSED";
  9161. Errors2[Errors2["ZIP_ER_NOENT"] = 9] = "ZIP_ER_NOENT";
  9162. Errors2[Errors2["ZIP_ER_EXISTS"] = 10] = "ZIP_ER_EXISTS";
  9163. Errors2[Errors2["ZIP_ER_OPEN"] = 11] = "ZIP_ER_OPEN";
  9164. Errors2[Errors2["ZIP_ER_TMPOPEN"] = 12] = "ZIP_ER_TMPOPEN";
  9165. Errors2[Errors2["ZIP_ER_ZLIB"] = 13] = "ZIP_ER_ZLIB";
  9166. Errors2[Errors2["ZIP_ER_MEMORY"] = 14] = "ZIP_ER_MEMORY";
  9167. Errors2[Errors2["ZIP_ER_CHANGED"] = 15] = "ZIP_ER_CHANGED";
  9168. Errors2[Errors2["ZIP_ER_COMPNOTSUPP"] = 16] = "ZIP_ER_COMPNOTSUPP";
  9169. Errors2[Errors2["ZIP_ER_EOF"] = 17] = "ZIP_ER_EOF";
  9170. Errors2[Errors2["ZIP_ER_INVAL"] = 18] = "ZIP_ER_INVAL";
  9171. Errors2[Errors2["ZIP_ER_NOZIP"] = 19] = "ZIP_ER_NOZIP";
  9172. Errors2[Errors2["ZIP_ER_INTERNAL"] = 20] = "ZIP_ER_INTERNAL";
  9173. Errors2[Errors2["ZIP_ER_INCONS"] = 21] = "ZIP_ER_INCONS";
  9174. Errors2[Errors2["ZIP_ER_REMOVE"] = 22] = "ZIP_ER_REMOVE";
  9175. Errors2[Errors2["ZIP_ER_DELETED"] = 23] = "ZIP_ER_DELETED";
  9176. Errors2[Errors2["ZIP_ER_ENCRNOTSUPP"] = 24] = "ZIP_ER_ENCRNOTSUPP";
  9177. Errors2[Errors2["ZIP_ER_RDONLY"] = 25] = "ZIP_ER_RDONLY";
  9178. Errors2[Errors2["ZIP_ER_NOPASSWD"] = 26] = "ZIP_ER_NOPASSWD";
  9179. Errors2[Errors2["ZIP_ER_WRONGPASSWD"] = 27] = "ZIP_ER_WRONGPASSWD";
  9180. Errors2[Errors2["ZIP_ER_OPNOTSUPP"] = 28] = "ZIP_ER_OPNOTSUPP";
  9181. Errors2[Errors2["ZIP_ER_INUSE"] = 29] = "ZIP_ER_INUSE";
  9182. Errors2[Errors2["ZIP_ER_TELL"] = 30] = "ZIP_ER_TELL";
  9183. Errors2[Errors2["ZIP_ER_COMPRESSED_DATA"] = 31] = "ZIP_ER_COMPRESSED_DATA";
  9184. return Errors2;
  9185. })(Errors || {});
  9186. const makeInterface = (libzip) => ({
  9187. get HEAP8() {
  9188. return libzip.HEAP8;
  9189. },
  9190. get HEAPU8() {
  9191. return libzip.HEAPU8;
  9192. },
  9193. errors: Errors,
  9194. SEEK_SET: 0,
  9195. SEEK_CUR: 1,
  9196. SEEK_END: 2,
  9197. ZIP_CHECKCONS: 4,
  9198. ZIP_CREATE: 1,
  9199. ZIP_EXCL: 2,
  9200. ZIP_TRUNCATE: 8,
  9201. ZIP_RDONLY: 16,
  9202. ZIP_FL_OVERWRITE: 8192,
  9203. ZIP_FL_COMPRESSED: 4,
  9204. ZIP_OPSYS_DOS: 0,
  9205. ZIP_OPSYS_AMIGA: 1,
  9206. ZIP_OPSYS_OPENVMS: 2,
  9207. ZIP_OPSYS_UNIX: 3,
  9208. ZIP_OPSYS_VM_CMS: 4,
  9209. ZIP_OPSYS_ATARI_ST: 5,
  9210. ZIP_OPSYS_OS_2: 6,
  9211. ZIP_OPSYS_MACINTOSH: 7,
  9212. ZIP_OPSYS_Z_SYSTEM: 8,
  9213. ZIP_OPSYS_CPM: 9,
  9214. ZIP_OPSYS_WINDOWS_NTFS: 10,
  9215. ZIP_OPSYS_MVS: 11,
  9216. ZIP_OPSYS_VSE: 12,
  9217. ZIP_OPSYS_ACORN_RISC: 13,
  9218. ZIP_OPSYS_VFAT: 14,
  9219. ZIP_OPSYS_ALTERNATE_MVS: 15,
  9220. ZIP_OPSYS_BEOS: 16,
  9221. ZIP_OPSYS_TANDEM: 17,
  9222. ZIP_OPSYS_OS_400: 18,
  9223. ZIP_OPSYS_OS_X: 19,
  9224. ZIP_CM_DEFAULT: -1,
  9225. ZIP_CM_STORE: 0,
  9226. ZIP_CM_DEFLATE: 8,
  9227. uint08S: libzip._malloc(1),
  9228. uint16S: libzip._malloc(2),
  9229. uint32S: libzip._malloc(4),
  9230. uint64S: libzip._malloc(8),
  9231. malloc: libzip._malloc,
  9232. free: libzip._free,
  9233. getValue: libzip.getValue,
  9234. open: libzip.cwrap(`zip_open`, `number`, [`string`, `number`, `number`]),
  9235. openFromSource: libzip.cwrap(`zip_open_from_source`, `number`, [`number`, `number`, `number`]),
  9236. close: libzip.cwrap(`zip_close`, `number`, [`number`]),
  9237. discard: libzip.cwrap(`zip_discard`, null, [`number`]),
  9238. getError: libzip.cwrap(`zip_get_error`, `number`, [`number`]),
  9239. getName: libzip.cwrap(`zip_get_name`, `string`, [`number`, `number`, `number`]),
  9240. getNumEntries: libzip.cwrap(`zip_get_num_entries`, `number`, [`number`, `number`]),
  9241. delete: libzip.cwrap(`zip_delete`, `number`, [`number`, `number`]),
  9242. stat: libzip.cwrap(`zip_stat`, `number`, [`number`, `string`, `number`, `number`]),
  9243. statIndex: libzip.cwrap(`zip_stat_index`, `number`, [`number`, ...number64, `number`, `number`]),
  9244. fopen: libzip.cwrap(`zip_fopen`, `number`, [`number`, `string`, `number`]),
  9245. fopenIndex: libzip.cwrap(`zip_fopen_index`, `number`, [`number`, ...number64, `number`]),
  9246. fread: libzip.cwrap(`zip_fread`, `number`, [`number`, `number`, `number`, `number`]),
  9247. fclose: libzip.cwrap(`zip_fclose`, `number`, [`number`]),
  9248. dir: {
  9249. add: libzip.cwrap(`zip_dir_add`, `number`, [`number`, `string`])
  9250. },
  9251. file: {
  9252. add: libzip.cwrap(`zip_file_add`, `number`, [`number`, `string`, `number`, `number`]),
  9253. getError: libzip.cwrap(`zip_file_get_error`, `number`, [`number`]),
  9254. getExternalAttributes: libzip.cwrap(`zip_file_get_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]),
  9255. setExternalAttributes: libzip.cwrap(`zip_file_set_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]),
  9256. setMtime: libzip.cwrap(`zip_file_set_mtime`, `number`, [`number`, ...number64, `number`, `number`]),
  9257. setCompression: libzip.cwrap(`zip_set_file_compression`, `number`, [`number`, ...number64, `number`, `number`])
  9258. },
  9259. ext: {
  9260. countSymlinks: libzip.cwrap(`zip_ext_count_symlinks`, `number`, [`number`])
  9261. },
  9262. error: {
  9263. initWithCode: libzip.cwrap(`zip_error_init_with_code`, null, [`number`, `number`]),
  9264. strerror: libzip.cwrap(`zip_error_strerror`, `string`, [`number`])
  9265. },
  9266. name: {
  9267. locate: libzip.cwrap(`zip_name_locate`, `number`, [`number`, `string`, `number`])
  9268. },
  9269. source: {
  9270. fromUnattachedBuffer: libzip.cwrap(`zip_source_buffer_create`, `number`, [`number`, `number`, `number`, `number`]),
  9271. fromBuffer: libzip.cwrap(`zip_source_buffer`, `number`, [`number`, `number`, ...number64, `number`]),
  9272. free: libzip.cwrap(`zip_source_free`, null, [`number`]),
  9273. keep: libzip.cwrap(`zip_source_keep`, null, [`number`]),
  9274. open: libzip.cwrap(`zip_source_open`, `number`, [`number`]),
  9275. close: libzip.cwrap(`zip_source_close`, `number`, [`number`]),
  9276. seek: libzip.cwrap(`zip_source_seek`, `number`, [`number`, ...number64, `number`]),
  9277. tell: libzip.cwrap(`zip_source_tell`, `number`, [`number`]),
  9278. read: libzip.cwrap(`zip_source_read`, `number`, [`number`, `number`, `number`]),
  9279. error: libzip.cwrap(`zip_source_error`, `number`, [`number`]),
  9280. setMtime: libzip.cwrap(`zip_source_set_mtime`, `number`, [`number`, `number`])
  9281. },
  9282. struct: {
  9283. stat: libzip.cwrap(`zipstruct_stat`, `number`, []),
  9284. statS: libzip.cwrap(`zipstruct_statS`, `number`, []),
  9285. statName: libzip.cwrap(`zipstruct_stat_name`, `string`, [`number`]),
  9286. statIndex: libzip.cwrap(`zipstruct_stat_index`, `number`, [`number`]),
  9287. statSize: libzip.cwrap(`zipstruct_stat_size`, `number`, [`number`]),
  9288. statCompSize: libzip.cwrap(`zipstruct_stat_comp_size`, `number`, [`number`]),
  9289. statCompMethod: libzip.cwrap(`zipstruct_stat_comp_method`, `number`, [`number`]),
  9290. statMtime: libzip.cwrap(`zipstruct_stat_mtime`, `number`, [`number`]),
  9291. statCrc: libzip.cwrap(`zipstruct_stat_crc`, `number`, [`number`]),
  9292. error: libzip.cwrap(`zipstruct_error`, `number`, []),
  9293. errorS: libzip.cwrap(`zipstruct_errorS`, `number`, []),
  9294. errorCodeZip: libzip.cwrap(`zipstruct_error_code_zip`, `number`, [`number`])
  9295. }
  9296. });
  9297. let mod = null;
  9298. function getLibzipSync() {
  9299. if (mod === null)
  9300. mod = makeInterface(createModule());
  9301. return mod;
  9302. }
  9303. var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {
  9304. ErrorCode2["API_ERROR"] = `API_ERROR`;
  9305. ErrorCode2["BUILTIN_NODE_RESOLUTION_FAILED"] = `BUILTIN_NODE_RESOLUTION_FAILED`;
  9306. ErrorCode2["EXPORTS_RESOLUTION_FAILED"] = `EXPORTS_RESOLUTION_FAILED`;
  9307. ErrorCode2["MISSING_DEPENDENCY"] = `MISSING_DEPENDENCY`;
  9308. ErrorCode2["MISSING_PEER_DEPENDENCY"] = `MISSING_PEER_DEPENDENCY`;
  9309. ErrorCode2["QUALIFIED_PATH_RESOLUTION_FAILED"] = `QUALIFIED_PATH_RESOLUTION_FAILED`;
  9310. ErrorCode2["INTERNAL"] = `INTERNAL`;
  9311. ErrorCode2["UNDECLARED_DEPENDENCY"] = `UNDECLARED_DEPENDENCY`;
  9312. ErrorCode2["UNSUPPORTED"] = `UNSUPPORTED`;
  9313. return ErrorCode2;
  9314. })(ErrorCode || {});
  9315. const MODULE_NOT_FOUND_ERRORS = /* @__PURE__ */ new Set([
  9316. "BUILTIN_NODE_RESOLUTION_FAILED" /* BUILTIN_NODE_RESOLUTION_FAILED */,
  9317. "MISSING_DEPENDENCY" /* MISSING_DEPENDENCY */,
  9318. "MISSING_PEER_DEPENDENCY" /* MISSING_PEER_DEPENDENCY */,
  9319. "QUALIFIED_PATH_RESOLUTION_FAILED" /* QUALIFIED_PATH_RESOLUTION_FAILED */,
  9320. "UNDECLARED_DEPENDENCY" /* UNDECLARED_DEPENDENCY */
  9321. ]);
  9322. function makeError(pnpCode, message, data = {}, code) {
  9323. code != null ? code : code = MODULE_NOT_FOUND_ERRORS.has(pnpCode) ? `MODULE_NOT_FOUND` : pnpCode;
  9324. const propertySpec = {
  9325. configurable: true,
  9326. writable: true,
  9327. enumerable: false
  9328. };
  9329. return Object.defineProperties(new Error(message), {
  9330. code: {
  9331. ...propertySpec,
  9332. value: code
  9333. },
  9334. pnpCode: {
  9335. ...propertySpec,
  9336. value: pnpCode
  9337. },
  9338. data: {
  9339. ...propertySpec,
  9340. value: data
  9341. }
  9342. });
  9343. }
  9344. function getIssuerModule(parent) {
  9345. let issuer = parent;
  9346. while (issuer && (issuer.id === `[eval]` || issuer.id === `<repl>` || !issuer.filename))
  9347. issuer = issuer.parent;
  9348. return issuer || null;
  9349. }
  9350. function getPathForDisplay(p) {
  9351. return npath.normalize(npath.fromPortablePath(p));
  9352. }
  9353. const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10));
  9354. const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13;
  9355. const builtinModules = new Set(require$$0.Module.builtinModules || Object.keys(process.binding(`natives`)));
  9356. const isBuiltinModule = (request) => request.startsWith(`node:`) || builtinModules.has(request);
  9357. function readPackageScope(checkPath) {
  9358. const rootSeparatorIndex = checkPath.indexOf(npath.sep);
  9359. let separatorIndex;
  9360. do {
  9361. separatorIndex = checkPath.lastIndexOf(npath.sep);
  9362. checkPath = checkPath.slice(0, separatorIndex);
  9363. if (checkPath.endsWith(`${npath.sep}node_modules`))
  9364. return false;
  9365. const pjson = readPackage(checkPath + npath.sep);
  9366. if (pjson) {
  9367. return {
  9368. data: pjson,
  9369. path: checkPath
  9370. };
  9371. }
  9372. } while (separatorIndex > rootSeparatorIndex);
  9373. return false;
  9374. }
  9375. function readPackage(requestPath) {
  9376. const jsonPath = npath.resolve(requestPath, `package.json`);
  9377. if (!fs__default.default.existsSync(jsonPath))
  9378. return null;
  9379. return JSON.parse(fs__default.default.readFileSync(jsonPath, `utf8`));
  9380. }
  9381. function ERR_REQUIRE_ESM(filename, parentPath = null) {
  9382. const basename = parentPath && path__default.default.basename(filename) === path__default.default.basename(parentPath) ? filename : path__default.default.basename(filename);
  9383. const msg = `require() of ES Module ${filename}${parentPath ? ` from ${parentPath}` : ``} not supported.
  9384. Instead change the require of ${basename} in ${parentPath} to a dynamic import() which is available in all CommonJS modules.`;
  9385. const err = new Error(msg);
  9386. err.code = `ERR_REQUIRE_ESM`;
  9387. return err;
  9388. }
  9389. function reportRequiredFilesToWatchMode(files) {
  9390. if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) {
  9391. files = files.map((filename) => npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename))));
  9392. if (WATCH_MODE_MESSAGE_USES_ARRAYS) {
  9393. process.send({ "watch:require": files });
  9394. } else {
  9395. for (const filename of files) {
  9396. process.send({ "watch:require": filename });
  9397. }
  9398. }
  9399. }
  9400. }
  9401. function applyPatch(pnpapi, opts) {
  9402. const defaultCache = {};
  9403. let enableNativeHooks = true;
  9404. process.versions.pnp = String(pnpapi.VERSIONS.std);
  9405. const moduleExports = require$$0__default.default;
  9406. moduleExports.findPnpApi = (lookupSource) => {
  9407. const lookupPath = lookupSource instanceof url.URL ? url.fileURLToPath(lookupSource) : lookupSource;
  9408. const apiPath = opts.manager.findApiPathFor(lookupPath);
  9409. if (apiPath === null)
  9410. return null;
  9411. const apiEntry = opts.manager.getApiEntry(apiPath, true);
  9412. return apiEntry.instance.findPackageLocator(lookupPath) ? apiEntry.instance : null;
  9413. };
  9414. function getRequireStack(parent) {
  9415. const requireStack = [];
  9416. for (let cursor = parent; cursor; cursor = cursor.parent)
  9417. requireStack.push(cursor.filename || cursor.id);
  9418. return requireStack;
  9419. }
  9420. const originalModuleLoad = require$$0.Module._load;
  9421. require$$0.Module._load = function(request, parent, isMain) {
  9422. if (!enableNativeHooks)
  9423. return originalModuleLoad.call(require$$0.Module, request, parent, isMain);
  9424. if (isBuiltinModule(request)) {
  9425. try {
  9426. enableNativeHooks = false;
  9427. return originalModuleLoad.call(require$$0.Module, request, parent, isMain);
  9428. } finally {
  9429. enableNativeHooks = true;
  9430. }
  9431. }
  9432. const parentApiPath = opts.manager.getApiPathFromParent(parent);
  9433. const parentApi = parentApiPath !== null ? opts.manager.getApiEntry(parentApiPath, true).instance : null;
  9434. if (parentApi === null)
  9435. return originalModuleLoad(request, parent, isMain);
  9436. if (request === `pnpapi`)
  9437. return parentApi;
  9438. const modulePath = require$$0.Module._resolveFilename(request, parent, isMain);
  9439. const isOwnedByRuntime = parentApi !== null ? parentApi.findPackageLocator(modulePath) !== null : false;
  9440. const moduleApiPath = isOwnedByRuntime ? parentApiPath : opts.manager.findApiPathFor(npath.dirname(modulePath));
  9441. const entry = moduleApiPath !== null ? opts.manager.getApiEntry(moduleApiPath) : { instance: null, cache: defaultCache };
  9442. const cacheEntry = entry.cache[modulePath];
  9443. if (cacheEntry) {
  9444. if (cacheEntry.loaded === false && cacheEntry.isLoading !== true) {
  9445. try {
  9446. cacheEntry.isLoading = true;
  9447. if (isMain) {
  9448. process.mainModule = cacheEntry;
  9449. cacheEntry.id = `.`;
  9450. }
  9451. cacheEntry.load(modulePath);
  9452. } finally {
  9453. cacheEntry.isLoading = false;
  9454. }
  9455. }
  9456. return cacheEntry.exports;
  9457. }
  9458. const module = new require$$0.Module(modulePath, parent != null ? parent : void 0);
  9459. module.pnpApiPath = moduleApiPath;
  9460. reportRequiredFilesToWatchMode([modulePath]);
  9461. entry.cache[modulePath] = module;
  9462. if (isMain) {
  9463. process.mainModule = module;
  9464. module.id = `.`;
  9465. }
  9466. let hasThrown = true;
  9467. try {
  9468. module.isLoading = true;
  9469. module.load(modulePath);
  9470. hasThrown = false;
  9471. } finally {
  9472. module.isLoading = false;
  9473. if (hasThrown) {
  9474. delete require$$0.Module._cache[modulePath];
  9475. }
  9476. }
  9477. return module.exports;
  9478. };
  9479. function getIssuerSpecsFromPaths(paths) {
  9480. return paths.map((path) => ({
  9481. apiPath: opts.manager.findApiPathFor(path),
  9482. path,
  9483. module: null
  9484. }));
  9485. }
  9486. function getIssuerSpecsFromModule(module) {
  9487. var _a;
  9488. if (module && module.id !== `<repl>` && module.id !== `internal/preload` && !module.parent && !module.filename && module.paths.length > 0) {
  9489. return [{
  9490. apiPath: opts.manager.findApiPathFor(module.paths[0]),
  9491. path: module.paths[0],
  9492. module
  9493. }];
  9494. }
  9495. const issuer = getIssuerModule(module);
  9496. if (issuer !== null) {
  9497. const path = npath.dirname(issuer.filename);
  9498. const apiPath = opts.manager.getApiPathFromParent(issuer);
  9499. return [{ apiPath, path, module }];
  9500. } else {
  9501. const path = process.cwd();
  9502. const apiPath = (_a = opts.manager.findApiPathFor(npath.join(path, `[file]`))) != null ? _a : opts.manager.getApiPathFromParent(null);
  9503. return [{ apiPath, path, module }];
  9504. }
  9505. }
  9506. function makeFakeParent(path) {
  9507. const fakeParent = new require$$0.Module(``);
  9508. const fakeFilePath = npath.join(path, `[file]`);
  9509. fakeParent.paths = require$$0.Module._nodeModulePaths(fakeFilePath);
  9510. return fakeParent;
  9511. }
  9512. const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/;
  9513. const originalModuleResolveFilename = require$$0.Module._resolveFilename;
  9514. require$$0.Module._resolveFilename = function(request, parent, isMain, options) {
  9515. if (isBuiltinModule(request))
  9516. return request;
  9517. if (!enableNativeHooks)
  9518. return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, options);
  9519. if (options && options.plugnplay === false) {
  9520. const { plugnplay, ...rest } = options;
  9521. const forwardedOptions = Object.keys(rest).length > 0 ? rest : void 0;
  9522. try {
  9523. enableNativeHooks = false;
  9524. return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, forwardedOptions);
  9525. } finally {
  9526. enableNativeHooks = true;
  9527. }
  9528. }
  9529. if (options) {
  9530. const optionNames = new Set(Object.keys(options));
  9531. optionNames.delete(`paths`);
  9532. optionNames.delete(`plugnplay`);
  9533. if (optionNames.size > 0) {
  9534. throw makeError(
  9535. ErrorCode.UNSUPPORTED,
  9536. `Some options passed to require() aren't supported by PnP yet (${Array.from(optionNames).join(`, `)})`
  9537. );
  9538. }
  9539. }
  9540. const issuerSpecs = options && options.paths ? getIssuerSpecsFromPaths(options.paths) : getIssuerSpecsFromModule(parent);
  9541. if (request.match(pathRegExp) === null) {
  9542. const parentDirectory = (parent == null ? void 0 : parent.filename) != null ? npath.dirname(parent.filename) : null;
  9543. const absoluteRequest = npath.isAbsolute(request) ? request : parentDirectory !== null ? npath.resolve(parentDirectory, request) : null;
  9544. if (absoluteRequest !== null) {
  9545. const apiPath = parentDirectory === npath.dirname(absoluteRequest) && (parent == null ? void 0 : parent.pnpApiPath) ? parent.pnpApiPath : opts.manager.findApiPathFor(absoluteRequest);
  9546. if (apiPath !== null) {
  9547. issuerSpecs.unshift({
  9548. apiPath,
  9549. path: parentDirectory,
  9550. module: null
  9551. });
  9552. }
  9553. }
  9554. }
  9555. let firstError;
  9556. for (const { apiPath, path, module } of issuerSpecs) {
  9557. let resolution;
  9558. const issuerApi = apiPath !== null ? opts.manager.getApiEntry(apiPath, true).instance : null;
  9559. try {
  9560. if (issuerApi !== null) {
  9561. resolution = issuerApi.resolveRequest(request, path !== null ? `${path}/` : null);
  9562. } else {
  9563. if (path === null)
  9564. throw new Error(`Assertion failed: Expected the path to be set`);
  9565. resolution = originalModuleResolveFilename.call(require$$0.Module, request, module || makeFakeParent(path), isMain);
  9566. }
  9567. } catch (error) {
  9568. firstError = firstError || error;
  9569. continue;
  9570. }
  9571. if (resolution !== null) {
  9572. return resolution;
  9573. }
  9574. }
  9575. const requireStack = getRequireStack(parent);
  9576. Object.defineProperty(firstError, `requireStack`, {
  9577. configurable: true,
  9578. writable: true,
  9579. enumerable: false,
  9580. value: requireStack
  9581. });
  9582. if (requireStack.length > 0)
  9583. firstError.message += `
  9584. Require stack:
  9585. - ${requireStack.join(`
  9586. - `)}`;
  9587. if (typeof firstError.pnpCode === `string`)
  9588. Error.captureStackTrace(firstError);
  9589. throw firstError;
  9590. };
  9591. const originalFindPath = require$$0.Module._findPath;
  9592. require$$0.Module._findPath = function(request, paths, isMain) {
  9593. if (request === `pnpapi`)
  9594. return false;
  9595. if (!enableNativeHooks)
  9596. return originalFindPath.call(require$$0.Module, request, paths, isMain);
  9597. const isAbsolute = npath.isAbsolute(request);
  9598. if (isAbsolute)
  9599. paths = [``];
  9600. else if (!paths || paths.length === 0)
  9601. return false;
  9602. for (const path of paths) {
  9603. let resolution;
  9604. try {
  9605. const pnpApiPath = opts.manager.findApiPathFor(isAbsolute ? request : path);
  9606. if (pnpApiPath !== null) {
  9607. const api = opts.manager.getApiEntry(pnpApiPath, true).instance;
  9608. resolution = api.resolveRequest(request, path) || false;
  9609. } else {
  9610. resolution = originalFindPath.call(require$$0.Module, request, [path], isMain);
  9611. }
  9612. } catch (error) {
  9613. continue;
  9614. }
  9615. if (resolution) {
  9616. return resolution;
  9617. }
  9618. }
  9619. return false;
  9620. };
  9621. const originalExtensionJSFunction = require$$0.Module._extensions[`.js`];
  9622. require$$0.Module._extensions[`.js`] = function(module, filename) {
  9623. var _a, _b;
  9624. if (filename.endsWith(`.js`)) {
  9625. const pkg = readPackageScope(filename);
  9626. if (pkg && ((_a = pkg.data) == null ? void 0 : _a.type) === `module`) {
  9627. const err = ERR_REQUIRE_ESM(filename, (_b = module.parent) == null ? void 0 : _b.filename);
  9628. Error.captureStackTrace(err);
  9629. throw err;
  9630. }
  9631. }
  9632. originalExtensionJSFunction.call(this, module, filename);
  9633. };
  9634. const originalDlopen = process.dlopen;
  9635. process.dlopen = function(...args) {
  9636. const [module, filename, ...rest] = args;
  9637. return originalDlopen.call(
  9638. this,
  9639. module,
  9640. npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename))),
  9641. ...rest
  9642. );
  9643. };
  9644. const originalEmit = process.emit;
  9645. process.emit = function(name, data, ...args) {
  9646. if (name === `warning` && typeof data === `object` && data.name === `ExperimentalWarning` && (data.message.includes(`--experimental-loader`) || data.message.includes(`Custom ESM Loaders is an experimental feature`)))
  9647. return false;
  9648. return originalEmit.apply(process, arguments);
  9649. };
  9650. patchFs(fs__default.default, new PosixFS(opts.fakeFs));
  9651. }
  9652. function hydrateRuntimeState(data, { basePath }) {
  9653. const portablePath = npath.toPortablePath(basePath);
  9654. const absolutePortablePath = ppath.resolve(portablePath);
  9655. const ignorePattern = data.ignorePatternData !== null ? new RegExp(data.ignorePatternData) : null;
  9656. const packageLocatorsByLocations = /* @__PURE__ */ new Map();
  9657. const packageRegistry = new Map(data.packageRegistryData.map(([packageName, packageStoreData]) => {
  9658. return [packageName, new Map(packageStoreData.map(([packageReference, packageInformationData]) => {
  9659. var _a;
  9660. if (packageName === null !== (packageReference === null))
  9661. throw new Error(`Assertion failed: The name and reference should be null, or neither should`);
  9662. const discardFromLookup = (_a = packageInformationData.discardFromLookup) != null ? _a : false;
  9663. const packageLocator = { name: packageName, reference: packageReference };
  9664. const entry = packageLocatorsByLocations.get(packageInformationData.packageLocation);
  9665. if (!entry) {
  9666. packageLocatorsByLocations.set(packageInformationData.packageLocation, { locator: packageLocator, discardFromLookup });
  9667. } else {
  9668. entry.discardFromLookup = entry.discardFromLookup && discardFromLookup;
  9669. if (!discardFromLookup) {
  9670. entry.locator = packageLocator;
  9671. }
  9672. }
  9673. let resolvedPackageLocation = null;
  9674. return [packageReference, {
  9675. packageDependencies: new Map(packageInformationData.packageDependencies),
  9676. packagePeers: new Set(packageInformationData.packagePeers),
  9677. linkType: packageInformationData.linkType,
  9678. discardFromLookup,
  9679. get packageLocation() {
  9680. return resolvedPackageLocation || (resolvedPackageLocation = ppath.join(absolutePortablePath, packageInformationData.packageLocation));
  9681. }
  9682. }];
  9683. }))];
  9684. }));
  9685. const fallbackExclusionList = new Map(data.fallbackExclusionList.map(([packageName, packageReferences]) => {
  9686. return [packageName, new Set(packageReferences)];
  9687. }));
  9688. const fallbackPool = new Map(data.fallbackPool);
  9689. const dependencyTreeRoots = data.dependencyTreeRoots;
  9690. const enableTopLevelFallback = data.enableTopLevelFallback;
  9691. return {
  9692. basePath: portablePath,
  9693. dependencyTreeRoots,
  9694. enableTopLevelFallback,
  9695. fallbackExclusionList,
  9696. fallbackPool,
  9697. ignorePattern,
  9698. packageLocatorsByLocations,
  9699. packageRegistry
  9700. };
  9701. }
  9702. /**
  9703. * @param {object} exports
  9704. * @param {Set<string>} keys
  9705. */
  9706. function loop(exports, keys) {
  9707. if (typeof exports === 'string') {
  9708. return exports;
  9709. }
  9710. if (exports) {
  9711. let idx, tmp;
  9712. if (Array.isArray(exports)) {
  9713. for (idx=0; idx < exports.length; idx++) {
  9714. if (tmp = loop(exports[idx], keys)) return tmp;
  9715. }
  9716. } else {
  9717. for (idx in exports) {
  9718. if (keys.has(idx)) {
  9719. return loop(exports[idx], keys);
  9720. }
  9721. }
  9722. }
  9723. }
  9724. }
  9725. /**
  9726. * @param {string} name The package name
  9727. * @param {string} entry The target entry, eg "."
  9728. * @param {number} [condition] Unmatched condition?
  9729. */
  9730. function bail(name, entry, condition) {
  9731. throw new Error(
  9732. condition
  9733. ? `No known conditions for "${entry}" entry in "${name}" package`
  9734. : `Missing "${entry}" export in "${name}" package`
  9735. );
  9736. }
  9737. /**
  9738. * @param {string} name the package name
  9739. * @param {string} entry the target path/import
  9740. */
  9741. function toName(name, entry) {
  9742. return entry === name ? '.'
  9743. : entry[0] === '.' ? entry
  9744. : entry.replace(new RegExp('^' + name + '\/'), './');
  9745. }
  9746. /**
  9747. * @param {object} pkg package.json contents
  9748. * @param {string} [entry] entry name or import path
  9749. * @param {object} [options]
  9750. * @param {boolean} [options.browser]
  9751. * @param {boolean} [options.require]
  9752. * @param {string[]} [options.conditions]
  9753. * @param {boolean} [options.unsafe]
  9754. */
  9755. function resolve(pkg, entry='.', options={}) {
  9756. let { name, exports } = pkg;
  9757. if (exports) {
  9758. let { browser, require, unsafe, conditions=[] } = options;
  9759. let target = toName(name, entry);
  9760. if (target[0] !== '.') target = './' + target;
  9761. if (typeof exports === 'string') {
  9762. return target === '.' ? exports : bail(name, target);
  9763. }
  9764. let allows = new Set(['default', ...conditions]);
  9765. unsafe || allows.add(require ? 'require' : 'import');
  9766. unsafe || allows.add(browser ? 'browser' : 'node');
  9767. let key, tmp, isSingle=false;
  9768. for (key in exports) {
  9769. isSingle = key[0] !== '.';
  9770. break;
  9771. }
  9772. if (isSingle) {
  9773. return target === '.'
  9774. ? loop(exports, allows) || bail(name, target, 1)
  9775. : bail(name, target);
  9776. }
  9777. if (tmp = exports[target]) {
  9778. return loop(tmp, allows) || bail(name, target, 1);
  9779. }
  9780. for (key in exports) {
  9781. tmp = key[key.length - 1];
  9782. if (tmp === '/' && target.startsWith(key)) {
  9783. return (tmp = loop(exports[key], allows))
  9784. ? (tmp + target.substring(key.length))
  9785. : bail(name, target, 1);
  9786. }
  9787. if (tmp === '*' && target.startsWith(key.slice(0, -1))) {
  9788. // do not trigger if no *content* to inject
  9789. if (target.substring(key.length - 1).length > 0) {
  9790. return (tmp = loop(exports[key], allows))
  9791. ? tmp.replace('*', target.substring(key.length - 1))
  9792. : bail(name, target, 1);
  9793. }
  9794. }
  9795. }
  9796. return bail(name, target);
  9797. }
  9798. }
  9799. const ArrayIsArray = Array.isArray;
  9800. const JSONStringify = JSON.stringify;
  9801. const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames;
  9802. const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
  9803. const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string);
  9804. const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest);
  9805. const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest);
  9806. const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest);
  9807. const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest);
  9808. const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest);
  9809. const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest);
  9810. const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest);
  9811. const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest);
  9812. const SafeMap = Map;
  9813. const JSONParse = JSON.parse;
  9814. function createErrorType(code, messageCreator, errorType) {
  9815. return class extends errorType {
  9816. constructor(...args) {
  9817. super(messageCreator(...args));
  9818. this.code = code;
  9819. this.name = `${errorType.name} [${code}]`;
  9820. }
  9821. };
  9822. }
  9823. const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType(
  9824. `ERR_PACKAGE_IMPORT_NOT_DEFINED`,
  9825. (specifier, packagePath, base) => {
  9826. return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`;
  9827. },
  9828. TypeError
  9829. );
  9830. const ERR_INVALID_MODULE_SPECIFIER = createErrorType(
  9831. `ERR_INVALID_MODULE_SPECIFIER`,
  9832. (request, reason, base = void 0) => {
  9833. return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`;
  9834. },
  9835. TypeError
  9836. );
  9837. const ERR_INVALID_PACKAGE_TARGET = createErrorType(
  9838. `ERR_INVALID_PACKAGE_TARGET`,
  9839. (pkgPath, key, target, isImport = false, base = void 0) => {
  9840. const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`);
  9841. if (key === `.`) {
  9842. assert__default.default(isImport === false);
  9843. return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`;
  9844. }
  9845. return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify(
  9846. target
  9847. )} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`;
  9848. },
  9849. Error
  9850. );
  9851. const ERR_INVALID_PACKAGE_CONFIG = createErrorType(
  9852. `ERR_INVALID_PACKAGE_CONFIG`,
  9853. (path, base, message) => {
  9854. return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`;
  9855. },
  9856. Error
  9857. );
  9858. function filterOwnProperties(source, keys) {
  9859. const filtered = /* @__PURE__ */ Object.create(null);
  9860. for (let i = 0; i < keys.length; i++) {
  9861. const key = keys[i];
  9862. if (ObjectPrototypeHasOwnProperty(source, key)) {
  9863. filtered[key] = source[key];
  9864. }
  9865. }
  9866. return filtered;
  9867. }
  9868. const packageJSONCache = new SafeMap();
  9869. function getPackageConfig(path, specifier, base, readFileSyncFn) {
  9870. const existing = packageJSONCache.get(path);
  9871. if (existing !== void 0) {
  9872. return existing;
  9873. }
  9874. const source = readFileSyncFn(path);
  9875. if (source === void 0) {
  9876. const packageConfig2 = {
  9877. pjsonPath: path,
  9878. exists: false,
  9879. main: void 0,
  9880. name: void 0,
  9881. type: "none",
  9882. exports: void 0,
  9883. imports: void 0
  9884. };
  9885. packageJSONCache.set(path, packageConfig2);
  9886. return packageConfig2;
  9887. }
  9888. let packageJSON;
  9889. try {
  9890. packageJSON = JSONParse(source);
  9891. } catch (error) {
  9892. throw new ERR_INVALID_PACKAGE_CONFIG(
  9893. path,
  9894. (base ? `"${specifier}" from ` : "") + url.fileURLToPath(base || specifier),
  9895. error.message
  9896. );
  9897. }
  9898. let { imports, main, name, type } = filterOwnProperties(packageJSON, [
  9899. "imports",
  9900. "main",
  9901. "name",
  9902. "type"
  9903. ]);
  9904. const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0;
  9905. if (typeof imports !== "object" || imports === null) {
  9906. imports = void 0;
  9907. }
  9908. if (typeof main !== "string") {
  9909. main = void 0;
  9910. }
  9911. if (typeof name !== "string") {
  9912. name = void 0;
  9913. }
  9914. if (type !== "module" && type !== "commonjs") {
  9915. type = "none";
  9916. }
  9917. const packageConfig = {
  9918. pjsonPath: path,
  9919. exists: true,
  9920. main,
  9921. name,
  9922. type,
  9923. exports,
  9924. imports
  9925. };
  9926. packageJSONCache.set(path, packageConfig);
  9927. return packageConfig;
  9928. }
  9929. function getPackageScopeConfig(resolved, readFileSyncFn) {
  9930. let packageJSONUrl = new URL("./package.json", resolved);
  9931. while (true) {
  9932. const packageJSONPath2 = packageJSONUrl.pathname;
  9933. if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) {
  9934. break;
  9935. }
  9936. const packageConfig2 = getPackageConfig(
  9937. url.fileURLToPath(packageJSONUrl),
  9938. resolved,
  9939. void 0,
  9940. readFileSyncFn
  9941. );
  9942. if (packageConfig2.exists) {
  9943. return packageConfig2;
  9944. }
  9945. const lastPackageJSONUrl = packageJSONUrl;
  9946. packageJSONUrl = new URL("../package.json", packageJSONUrl);
  9947. if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) {
  9948. break;
  9949. }
  9950. }
  9951. const packageJSONPath = url.fileURLToPath(packageJSONUrl);
  9952. const packageConfig = {
  9953. pjsonPath: packageJSONPath,
  9954. exists: false,
  9955. main: void 0,
  9956. name: void 0,
  9957. type: "none",
  9958. exports: void 0,
  9959. imports: void 0
  9960. };
  9961. packageJSONCache.set(packageJSONPath, packageConfig);
  9962. return packageConfig;
  9963. }
  9964. /**
  9965. @license
  9966. Copyright Node.js contributors. All rights reserved.
  9967. Permission is hereby granted, free of charge, to any person obtaining a copy
  9968. of this software and associated documentation files (the "Software"), to
  9969. deal in the Software without restriction, including without limitation the
  9970. rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  9971. sell copies of the Software, and to permit persons to whom the Software is
  9972. furnished to do so, subject to the following conditions:
  9973. The above copyright notice and this permission notice shall be included in
  9974. all copies or substantial portions of the Software.
  9975. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  9976. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  9977. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  9978. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  9979. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  9980. FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
  9981. IN THE SOFTWARE.
  9982. */
  9983. function throwImportNotDefined(specifier, packageJSONUrl, base) {
  9984. throw new ERR_PACKAGE_IMPORT_NOT_DEFINED(
  9985. specifier,
  9986. packageJSONUrl && url.fileURLToPath(new URL(".", packageJSONUrl)),
  9987. url.fileURLToPath(base)
  9988. );
  9989. }
  9990. function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) {
  9991. const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${url.fileURLToPath(packageJSONUrl)}`;
  9992. throw new ERR_INVALID_MODULE_SPECIFIER(
  9993. subpath,
  9994. reason,
  9995. base && url.fileURLToPath(base)
  9996. );
  9997. }
  9998. function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) {
  9999. if (typeof target === "object" && target !== null) {
  10000. target = JSONStringify(target, null, "");
  10001. } else {
  10002. target = `${target}`;
  10003. }
  10004. throw new ERR_INVALID_PACKAGE_TARGET(
  10005. url.fileURLToPath(new URL(".", packageJSONUrl)),
  10006. subpath,
  10007. target,
  10008. internal,
  10009. base && url.fileURLToPath(base)
  10010. );
  10011. }
  10012. const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i;
  10013. const patternRegEx = /\*/g;
  10014. function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) {
  10015. if (subpath !== "" && !pattern && target[target.length - 1] !== "/")
  10016. throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base);
  10017. if (!StringPrototypeStartsWith(target, "./")) {
  10018. if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) {
  10019. let isURL = false;
  10020. try {
  10021. new URL(target);
  10022. isURL = true;
  10023. } catch {
  10024. }
  10025. if (!isURL) {
  10026. const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath;
  10027. return exportTarget;
  10028. }
  10029. }
  10030. throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base);
  10031. }
  10032. if (RegExpPrototypeExec(
  10033. invalidSegmentRegEx,
  10034. StringPrototypeSlice(target, 2)
  10035. ) !== null)
  10036. throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base);
  10037. const resolved = new URL(target, packageJSONUrl);
  10038. const resolvedPath = resolved.pathname;
  10039. const packagePath = new URL(".", packageJSONUrl).pathname;
  10040. if (!StringPrototypeStartsWith(resolvedPath, packagePath))
  10041. throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base);
  10042. if (subpath === "")
  10043. return resolved;
  10044. if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) {
  10045. const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath;
  10046. throwInvalidSubpath(request, packageJSONUrl, internal, base);
  10047. }
  10048. if (pattern) {
  10049. return new URL(
  10050. RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath)
  10051. );
  10052. }
  10053. return new URL(subpath, resolved);
  10054. }
  10055. function isArrayIndex(key) {
  10056. const keyNum = +key;
  10057. if (`${keyNum}` !== key)
  10058. return false;
  10059. return keyNum >= 0 && keyNum < 4294967295;
  10060. }
  10061. function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) {
  10062. if (typeof target === "string") {
  10063. return resolvePackageTargetString(
  10064. target,
  10065. subpath,
  10066. packageSubpath,
  10067. packageJSONUrl,
  10068. base,
  10069. pattern,
  10070. internal);
  10071. } else if (ArrayIsArray(target)) {
  10072. if (target.length === 0) {
  10073. return null;
  10074. }
  10075. let lastException;
  10076. for (let i = 0; i < target.length; i++) {
  10077. const targetItem = target[i];
  10078. let resolveResult;
  10079. try {
  10080. resolveResult = resolvePackageTarget(
  10081. packageJSONUrl,
  10082. targetItem,
  10083. subpath,
  10084. packageSubpath,
  10085. base,
  10086. pattern,
  10087. internal,
  10088. conditions
  10089. );
  10090. } catch (e) {
  10091. lastException = e;
  10092. if (e.code === "ERR_INVALID_PACKAGE_TARGET") {
  10093. continue;
  10094. }
  10095. throw e;
  10096. }
  10097. if (resolveResult === void 0) {
  10098. continue;
  10099. }
  10100. if (resolveResult === null) {
  10101. lastException = null;
  10102. continue;
  10103. }
  10104. return resolveResult;
  10105. }
  10106. if (lastException === void 0 || lastException === null)
  10107. return lastException;
  10108. throw lastException;
  10109. } else if (typeof target === "object" && target !== null) {
  10110. const keys = ObjectGetOwnPropertyNames(target);
  10111. for (let i = 0; i < keys.length; i++) {
  10112. const key = keys[i];
  10113. if (isArrayIndex(key)) {
  10114. throw new ERR_INVALID_PACKAGE_CONFIG(
  10115. url.fileURLToPath(packageJSONUrl),
  10116. base,
  10117. '"exports" cannot contain numeric property keys.'
  10118. );
  10119. }
  10120. }
  10121. for (let i = 0; i < keys.length; i++) {
  10122. const key = keys[i];
  10123. if (key === "default" || conditions.has(key)) {
  10124. const conditionalTarget = target[key];
  10125. const resolveResult = resolvePackageTarget(
  10126. packageJSONUrl,
  10127. conditionalTarget,
  10128. subpath,
  10129. packageSubpath,
  10130. base,
  10131. pattern,
  10132. internal,
  10133. conditions
  10134. );
  10135. if (resolveResult === void 0)
  10136. continue;
  10137. return resolveResult;
  10138. }
  10139. }
  10140. return void 0;
  10141. } else if (target === null) {
  10142. return null;
  10143. }
  10144. throwInvalidPackageTarget(
  10145. packageSubpath,
  10146. target,
  10147. packageJSONUrl,
  10148. internal,
  10149. base
  10150. );
  10151. }
  10152. function patternKeyCompare(a, b) {
  10153. const aPatternIndex = StringPrototypeIndexOf(a, "*");
  10154. const bPatternIndex = StringPrototypeIndexOf(b, "*");
  10155. const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1;
  10156. const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1;
  10157. if (baseLenA > baseLenB)
  10158. return -1;
  10159. if (baseLenB > baseLenA)
  10160. return 1;
  10161. if (aPatternIndex === -1)
  10162. return 1;
  10163. if (bPatternIndex === -1)
  10164. return -1;
  10165. if (a.length > b.length)
  10166. return -1;
  10167. if (b.length > a.length)
  10168. return 1;
  10169. return 0;
  10170. }
  10171. function packageImportsResolve({
  10172. name,
  10173. base,
  10174. conditions,
  10175. readFileSyncFn
  10176. }) {
  10177. if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) {
  10178. const reason = "is not a valid internal imports specifier name";
  10179. throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, url.fileURLToPath(base));
  10180. }
  10181. let packageJSONUrl;
  10182. const packageConfig = getPackageScopeConfig(base, readFileSyncFn);
  10183. if (packageConfig.exists) {
  10184. packageJSONUrl = url.pathToFileURL(packageConfig.pjsonPath);
  10185. const imports = packageConfig.imports;
  10186. if (imports) {
  10187. if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) {
  10188. const resolveResult = resolvePackageTarget(
  10189. packageJSONUrl,
  10190. imports[name],
  10191. "",
  10192. name,
  10193. base,
  10194. false,
  10195. true,
  10196. conditions
  10197. );
  10198. if (resolveResult != null) {
  10199. return resolveResult;
  10200. }
  10201. } else {
  10202. let bestMatch = "";
  10203. let bestMatchSubpath;
  10204. const keys = ObjectGetOwnPropertyNames(imports);
  10205. for (let i = 0; i < keys.length; i++) {
  10206. const key = keys[i];
  10207. const patternIndex = StringPrototypeIndexOf(key, "*");
  10208. if (patternIndex !== -1 && StringPrototypeStartsWith(
  10209. name,
  10210. StringPrototypeSlice(key, 0, patternIndex)
  10211. )) {
  10212. const patternTrailer = StringPrototypeSlice(key, patternIndex + 1);
  10213. if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) {
  10214. bestMatch = key;
  10215. bestMatchSubpath = StringPrototypeSlice(
  10216. name,
  10217. patternIndex,
  10218. name.length - patternTrailer.length
  10219. );
  10220. }
  10221. }
  10222. }
  10223. if (bestMatch) {
  10224. const target = imports[bestMatch];
  10225. const resolveResult = resolvePackageTarget(
  10226. packageJSONUrl,
  10227. target,
  10228. bestMatchSubpath,
  10229. bestMatch,
  10230. base,
  10231. true,
  10232. true,
  10233. conditions
  10234. );
  10235. if (resolveResult != null) {
  10236. return resolveResult;
  10237. }
  10238. }
  10239. }
  10240. }
  10241. }
  10242. throwImportNotDefined(name, packageJSONUrl, base);
  10243. }
  10244. const flagSymbol = Symbol('arg flag');
  10245. class ArgError extends Error {
  10246. constructor(msg, code) {
  10247. super(msg);
  10248. this.name = 'ArgError';
  10249. this.code = code;
  10250. Object.setPrototypeOf(this, ArgError.prototype);
  10251. }
  10252. }
  10253. function arg(
  10254. opts,
  10255. {
  10256. argv = process.argv.slice(2),
  10257. permissive = false,
  10258. stopAtPositional = false
  10259. } = {}
  10260. ) {
  10261. if (!opts) {
  10262. throw new ArgError(
  10263. 'argument specification object is required',
  10264. 'ARG_CONFIG_NO_SPEC'
  10265. );
  10266. }
  10267. const result = { _: [] };
  10268. const aliases = {};
  10269. const handlers = {};
  10270. for (const key of Object.keys(opts)) {
  10271. if (!key) {
  10272. throw new ArgError(
  10273. 'argument key cannot be an empty string',
  10274. 'ARG_CONFIG_EMPTY_KEY'
  10275. );
  10276. }
  10277. if (key[0] !== '-') {
  10278. throw new ArgError(
  10279. `argument key must start with '-' but found: '${key}'`,
  10280. 'ARG_CONFIG_NONOPT_KEY'
  10281. );
  10282. }
  10283. if (key.length === 1) {
  10284. throw new ArgError(
  10285. `argument key must have a name; singular '-' keys are not allowed: ${key}`,
  10286. 'ARG_CONFIG_NONAME_KEY'
  10287. );
  10288. }
  10289. if (typeof opts[key] === 'string') {
  10290. aliases[key] = opts[key];
  10291. continue;
  10292. }
  10293. let type = opts[key];
  10294. let isFlag = false;
  10295. if (
  10296. Array.isArray(type) &&
  10297. type.length === 1 &&
  10298. typeof type[0] === 'function'
  10299. ) {
  10300. const [fn] = type;
  10301. type = (value, name, prev = []) => {
  10302. prev.push(fn(value, name, prev[prev.length - 1]));
  10303. return prev;
  10304. };
  10305. isFlag = fn === Boolean || fn[flagSymbol] === true;
  10306. } else if (typeof type === 'function') {
  10307. isFlag = type === Boolean || type[flagSymbol] === true;
  10308. } else {
  10309. throw new ArgError(
  10310. `type missing or not a function or valid array type: ${key}`,
  10311. 'ARG_CONFIG_VAD_TYPE'
  10312. );
  10313. }
  10314. if (key[1] !== '-' && key.length > 2) {
  10315. throw new ArgError(
  10316. `short argument keys (with a single hyphen) must have only one character: ${key}`,
  10317. 'ARG_CONFIG_SHORTOPT_TOOLONG'
  10318. );
  10319. }
  10320. handlers[key] = [type, isFlag];
  10321. }
  10322. for (let i = 0, len = argv.length; i < len; i++) {
  10323. const wholeArg = argv[i];
  10324. if (stopAtPositional && result._.length > 0) {
  10325. result._ = result._.concat(argv.slice(i));
  10326. break;
  10327. }
  10328. if (wholeArg === '--') {
  10329. result._ = result._.concat(argv.slice(i + 1));
  10330. break;
  10331. }
  10332. if (wholeArg.length > 1 && wholeArg[0] === '-') {
  10333. /* eslint-disable operator-linebreak */
  10334. const separatedArguments =
  10335. wholeArg[1] === '-' || wholeArg.length === 2
  10336. ? [wholeArg]
  10337. : wholeArg
  10338. .slice(1)
  10339. .split('')
  10340. .map((a) => `-${a}`);
  10341. /* eslint-enable operator-linebreak */
  10342. for (let j = 0; j < separatedArguments.length; j++) {
  10343. const arg = separatedArguments[j];
  10344. const [originalArgName, argStr] =
  10345. arg[1] === '-' ? arg.split(/=(.*)/, 2) : [arg, undefined];
  10346. let argName = originalArgName;
  10347. while (argName in aliases) {
  10348. argName = aliases[argName];
  10349. }
  10350. if (!(argName in handlers)) {
  10351. if (permissive) {
  10352. result._.push(arg);
  10353. continue;
  10354. } else {
  10355. throw new ArgError(
  10356. `unknown or unexpected option: ${originalArgName}`,
  10357. 'ARG_UNKNOWN_OPTION'
  10358. );
  10359. }
  10360. }
  10361. const [type, isFlag] = handlers[argName];
  10362. if (!isFlag && j + 1 < separatedArguments.length) {
  10363. throw new ArgError(
  10364. `option requires argument (but was followed by another short argument): ${originalArgName}`,
  10365. 'ARG_MISSING_REQUIRED_SHORTARG'
  10366. );
  10367. }
  10368. if (isFlag) {
  10369. result[argName] = type(true, argName, result[argName]);
  10370. } else if (argStr === undefined) {
  10371. if (
  10372. argv.length < i + 2 ||
  10373. (argv[i + 1].length > 1 &&
  10374. argv[i + 1][0] === '-' &&
  10375. !(
  10376. argv[i + 1].match(/^-?\d*(\.(?=\d))?\d*$/) &&
  10377. (type === Number ||
  10378. // eslint-disable-next-line no-undef
  10379. (typeof BigInt !== 'undefined' && type === BigInt))
  10380. ))
  10381. ) {
  10382. const extended =
  10383. originalArgName === argName ? '' : ` (alias for ${argName})`;
  10384. throw new ArgError(
  10385. `option requires argument: ${originalArgName}${extended}`,
  10386. 'ARG_MISSING_REQUIRED_LONGARG'
  10387. );
  10388. }
  10389. result[argName] = type(argv[i + 1], argName, result[argName]);
  10390. ++i;
  10391. } else {
  10392. result[argName] = type(argStr, argName, result[argName]);
  10393. }
  10394. }
  10395. } else {
  10396. result._.push(wholeArg);
  10397. }
  10398. }
  10399. return result;
  10400. }
  10401. arg.flag = (fn) => {
  10402. fn[flagSymbol] = true;
  10403. return fn;
  10404. };
  10405. // Utility types
  10406. arg.COUNT = arg.flag((v, name, existingCount) => (existingCount || 0) + 1);
  10407. // Expose error class
  10408. arg.ArgError = ArgError;
  10409. var arg_1 = arg;
  10410. /**
  10411. @license
  10412. The MIT License (MIT)
  10413. Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)
  10414. Permission is hereby granted, free of charge, to any person obtaining a copy
  10415. of this software and associated documentation files (the "Software"), to deal
  10416. in the Software without restriction, including without limitation the rights
  10417. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10418. copies of the Software, and to permit persons to whom the Software is
  10419. furnished to do so, subject to the following conditions:
  10420. The above copyright notice and this permission notice shall be included in
  10421. all copies or substantial portions of the Software.
  10422. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  10423. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  10424. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  10425. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  10426. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  10427. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  10428. THE SOFTWARE.
  10429. */
  10430. function getOptionValue(opt) {
  10431. parseOptions();
  10432. return options[opt];
  10433. }
  10434. let options;
  10435. function parseOptions() {
  10436. if (!options) {
  10437. options = {
  10438. "--conditions": [],
  10439. ...parseArgv(getNodeOptionsEnvArgv()),
  10440. ...parseArgv(process.execArgv)
  10441. };
  10442. }
  10443. }
  10444. function parseArgv(argv) {
  10445. return arg_1(
  10446. {
  10447. "--conditions": [String],
  10448. "-C": "--conditions"
  10449. },
  10450. {
  10451. argv,
  10452. permissive: true
  10453. }
  10454. );
  10455. }
  10456. function getNodeOptionsEnvArgv() {
  10457. const errors = [];
  10458. const envArgv = ParseNodeOptionsEnvVar(process.env.NODE_OPTIONS || "", errors);
  10459. if (errors.length !== 0) ;
  10460. return envArgv;
  10461. }
  10462. function ParseNodeOptionsEnvVar(node_options, errors) {
  10463. const env_argv = [];
  10464. let is_in_string = false;
  10465. let will_start_new_arg = true;
  10466. for (let index = 0; index < node_options.length; ++index) {
  10467. let c = node_options[index];
  10468. if (c === "\\" && is_in_string) {
  10469. if (index + 1 === node_options.length) {
  10470. errors.push("invalid value for NODE_OPTIONS (invalid escape)\n");
  10471. return env_argv;
  10472. } else {
  10473. c = node_options[++index];
  10474. }
  10475. } else if (c === " " && !is_in_string) {
  10476. will_start_new_arg = true;
  10477. continue;
  10478. } else if (c === '"') {
  10479. is_in_string = !is_in_string;
  10480. continue;
  10481. }
  10482. if (will_start_new_arg) {
  10483. env_argv.push(c);
  10484. will_start_new_arg = false;
  10485. } else {
  10486. env_argv[env_argv.length - 1] += c;
  10487. }
  10488. }
  10489. if (is_in_string) {
  10490. errors.push("invalid value for NODE_OPTIONS (unterminated string)\n");
  10491. }
  10492. return env_argv;
  10493. }
  10494. function makeApi(runtimeState, opts) {
  10495. const alwaysWarnOnFallback = Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK) > 0;
  10496. const debugLevel = Number(process.env.PNP_DEBUG_LEVEL);
  10497. const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/;
  10498. const isStrictRegExp = /^(\/|\.{1,2}(\/|$))/;
  10499. const isDirRegExp = /\/$/;
  10500. const isRelativeRegexp = /^\.{0,2}\//;
  10501. const topLevelLocator = { name: null, reference: null };
  10502. const fallbackLocators = [];
  10503. const emittedWarnings = /* @__PURE__ */ new Set();
  10504. if (runtimeState.enableTopLevelFallback === true)
  10505. fallbackLocators.push(topLevelLocator);
  10506. if (opts.compatibilityMode !== false) {
  10507. for (const name of [`react-scripts`, `gatsby`]) {
  10508. const packageStore = runtimeState.packageRegistry.get(name);
  10509. if (packageStore) {
  10510. for (const reference of packageStore.keys()) {
  10511. if (reference === null) {
  10512. throw new Error(`Assertion failed: This reference shouldn't be null`);
  10513. } else {
  10514. fallbackLocators.push({ name, reference });
  10515. }
  10516. }
  10517. }
  10518. }
  10519. }
  10520. const {
  10521. ignorePattern,
  10522. packageRegistry,
  10523. packageLocatorsByLocations
  10524. } = runtimeState;
  10525. function makeLogEntry(name, args) {
  10526. return {
  10527. fn: name,
  10528. args,
  10529. error: null,
  10530. result: null
  10531. };
  10532. }
  10533. function trace(entry) {
  10534. var _a, _b, _c, _d, _e, _f;
  10535. const colors = (_c = (_b = (_a = process.stderr) == null ? void 0 : _a.hasColors) == null ? void 0 : _b.call(_a)) != null ? _c : process.stdout.isTTY;
  10536. const c = (n, str) => `\x1B[${n}m${str}\x1B[0m`;
  10537. const error = entry.error;
  10538. if (error)
  10539. console.error(c(`31;1`, `\u2716 ${(_d = entry.error) == null ? void 0 : _d.message.replace(/\n.*/s, ``)}`));
  10540. else
  10541. console.error(c(`33;1`, `\u203C Resolution`));
  10542. if (entry.args.length > 0)
  10543. console.error();
  10544. for (const arg of entry.args)
  10545. console.error(` ${c(`37;1`, `In \u2190`)} ${nodeUtils.inspect(arg, { colors, compact: true })}`);
  10546. if (entry.result) {
  10547. console.error();
  10548. console.error(` ${c(`37;1`, `Out \u2192`)} ${nodeUtils.inspect(entry.result, { colors, compact: true })}`);
  10549. }
  10550. const stack = (_f = (_e = new Error().stack.match(/(?<=^ +)at.*/gm)) == null ? void 0 : _e.slice(2)) != null ? _f : [];
  10551. if (stack.length > 0) {
  10552. console.error();
  10553. for (const line of stack) {
  10554. console.error(` ${c(`38;5;244`, line)}`);
  10555. }
  10556. }
  10557. console.error();
  10558. }
  10559. function maybeLog(name, fn) {
  10560. if (opts.allowDebug === false)
  10561. return fn;
  10562. if (Number.isFinite(debugLevel)) {
  10563. if (debugLevel >= 2) {
  10564. return (...args) => {
  10565. const logEntry = makeLogEntry(name, args);
  10566. try {
  10567. return logEntry.result = fn(...args);
  10568. } catch (error) {
  10569. throw logEntry.error = error;
  10570. } finally {
  10571. trace(logEntry);
  10572. }
  10573. };
  10574. } else if (debugLevel >= 1) {
  10575. return (...args) => {
  10576. try {
  10577. return fn(...args);
  10578. } catch (error) {
  10579. const logEntry = makeLogEntry(name, args);
  10580. logEntry.error = error;
  10581. trace(logEntry);
  10582. throw error;
  10583. }
  10584. };
  10585. }
  10586. }
  10587. return fn;
  10588. }
  10589. function getPackageInformationSafe(packageLocator) {
  10590. const packageInformation = getPackageInformation(packageLocator);
  10591. if (!packageInformation) {
  10592. throw makeError(
  10593. ErrorCode.INTERNAL,
  10594. `Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)`
  10595. );
  10596. }
  10597. return packageInformation;
  10598. }
  10599. function isDependencyTreeRoot(packageLocator) {
  10600. if (packageLocator.name === null)
  10601. return true;
  10602. for (const dependencyTreeRoot of runtimeState.dependencyTreeRoots)
  10603. if (dependencyTreeRoot.name === packageLocator.name && dependencyTreeRoot.reference === packageLocator.reference)
  10604. return true;
  10605. return false;
  10606. }
  10607. const defaultExportsConditions = /* @__PURE__ */ new Set([
  10608. `default`,
  10609. `node`,
  10610. `require`,
  10611. ...getOptionValue(`--conditions`)
  10612. ]);
  10613. function applyNodeExportsResolution(unqualifiedPath, conditions = defaultExportsConditions) {
  10614. const locator = findPackageLocator(ppath.join(unqualifiedPath, `internal.js`), {
  10615. resolveIgnored: true,
  10616. includeDiscardFromLookup: true
  10617. });
  10618. if (locator === null) {
  10619. throw makeError(
  10620. ErrorCode.INTERNAL,
  10621. `The locator that owns the "${unqualifiedPath}" path can't be found inside the dependency tree (this is probably an internal error)`
  10622. );
  10623. }
  10624. const { packageLocation } = getPackageInformationSafe(locator);
  10625. const manifestPath = ppath.join(packageLocation, Filename.manifest);
  10626. if (!opts.fakeFs.existsSync(manifestPath))
  10627. return null;
  10628. const pkgJson = JSON.parse(opts.fakeFs.readFileSync(manifestPath, `utf8`));
  10629. let subpath = ppath.contains(packageLocation, unqualifiedPath);
  10630. if (subpath === null) {
  10631. throw makeError(
  10632. ErrorCode.INTERNAL,
  10633. `unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)`
  10634. );
  10635. }
  10636. if (!isRelativeRegexp.test(subpath))
  10637. subpath = `./${subpath}`;
  10638. let resolvedExport;
  10639. try {
  10640. resolvedExport = resolve(pkgJson, ppath.normalize(subpath), {
  10641. conditions,
  10642. unsafe: true
  10643. });
  10644. } catch (error) {
  10645. throw makeError(
  10646. ErrorCode.EXPORTS_RESOLUTION_FAILED,
  10647. error.message,
  10648. { unqualifiedPath: getPathForDisplay(unqualifiedPath), locator, pkgJson, subpath: getPathForDisplay(subpath), conditions },
  10649. `ERR_PACKAGE_PATH_NOT_EXPORTED`
  10650. );
  10651. }
  10652. if (typeof resolvedExport === `string`)
  10653. return ppath.join(packageLocation, resolvedExport);
  10654. return null;
  10655. }
  10656. function applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }) {
  10657. let stat;
  10658. try {
  10659. candidates.push(unqualifiedPath);
  10660. stat = opts.fakeFs.statSync(unqualifiedPath);
  10661. } catch (error) {
  10662. }
  10663. if (stat && !stat.isDirectory())
  10664. return opts.fakeFs.realpathSync(unqualifiedPath);
  10665. if (stat && stat.isDirectory()) {
  10666. let pkgJson;
  10667. try {
  10668. pkgJson = JSON.parse(opts.fakeFs.readFileSync(ppath.join(unqualifiedPath, Filename.manifest), `utf8`));
  10669. } catch (error) {
  10670. }
  10671. let nextUnqualifiedPath;
  10672. if (pkgJson && pkgJson.main)
  10673. nextUnqualifiedPath = ppath.resolve(unqualifiedPath, pkgJson.main);
  10674. if (nextUnqualifiedPath && nextUnqualifiedPath !== unqualifiedPath) {
  10675. const resolution = applyNodeExtensionResolution(nextUnqualifiedPath, candidates, { extensions });
  10676. if (resolution !== null) {
  10677. return resolution;
  10678. }
  10679. }
  10680. }
  10681. for (let i = 0, length = extensions.length; i < length; i++) {
  10682. const candidateFile = `${unqualifiedPath}${extensions[i]}`;
  10683. candidates.push(candidateFile);
  10684. if (opts.fakeFs.existsSync(candidateFile)) {
  10685. return candidateFile;
  10686. }
  10687. }
  10688. if (stat && stat.isDirectory()) {
  10689. for (let i = 0, length = extensions.length; i < length; i++) {
  10690. const candidateFile = ppath.format({ dir: unqualifiedPath, name: `index`, ext: extensions[i] });
  10691. candidates.push(candidateFile);
  10692. if (opts.fakeFs.existsSync(candidateFile)) {
  10693. return candidateFile;
  10694. }
  10695. }
  10696. }
  10697. return null;
  10698. }
  10699. function makeFakeModule(path) {
  10700. const fakeModule = new require$$0.Module(path, null);
  10701. fakeModule.filename = path;
  10702. fakeModule.paths = require$$0.Module._nodeModulePaths(path);
  10703. return fakeModule;
  10704. }
  10705. function callNativeResolution(request, issuer) {
  10706. if (issuer.endsWith(`/`))
  10707. issuer = ppath.join(issuer, `internal.js`);
  10708. return require$$0.Module._resolveFilename(npath.fromPortablePath(request), makeFakeModule(npath.fromPortablePath(issuer)), false, { plugnplay: false });
  10709. }
  10710. function isPathIgnored(path) {
  10711. if (ignorePattern === null)
  10712. return false;
  10713. const subPath = ppath.contains(runtimeState.basePath, path);
  10714. if (subPath === null)
  10715. return false;
  10716. if (ignorePattern.test(subPath.replace(/\/$/, ``))) {
  10717. return true;
  10718. } else {
  10719. return false;
  10720. }
  10721. }
  10722. const VERSIONS = { std: 3, resolveVirtual: 1, getAllLocators: 1 };
  10723. const topLevel = topLevelLocator;
  10724. function getPackageInformation({ name, reference }) {
  10725. const packageInformationStore = packageRegistry.get(name);
  10726. if (!packageInformationStore)
  10727. return null;
  10728. const packageInformation = packageInformationStore.get(reference);
  10729. if (!packageInformation)
  10730. return null;
  10731. return packageInformation;
  10732. }
  10733. function findPackageDependents({ name, reference }) {
  10734. const dependents = [];
  10735. for (const [dependentName, packageInformationStore] of packageRegistry) {
  10736. if (dependentName === null)
  10737. continue;
  10738. for (const [dependentReference, packageInformation] of packageInformationStore) {
  10739. if (dependentReference === null)
  10740. continue;
  10741. const dependencyReference = packageInformation.packageDependencies.get(name);
  10742. if (dependencyReference !== reference)
  10743. continue;
  10744. if (dependentName === name && dependentReference === reference)
  10745. continue;
  10746. dependents.push({
  10747. name: dependentName,
  10748. reference: dependentReference
  10749. });
  10750. }
  10751. }
  10752. return dependents;
  10753. }
  10754. function findBrokenPeerDependencies(dependency, initialPackage) {
  10755. const brokenPackages = /* @__PURE__ */ new Map();
  10756. const alreadyVisited = /* @__PURE__ */ new Set();
  10757. const traversal = (currentPackage) => {
  10758. const identifier = JSON.stringify(currentPackage.name);
  10759. if (alreadyVisited.has(identifier))
  10760. return;
  10761. alreadyVisited.add(identifier);
  10762. const dependents = findPackageDependents(currentPackage);
  10763. for (const dependent of dependents) {
  10764. const dependentInformation = getPackageInformationSafe(dependent);
  10765. if (dependentInformation.packagePeers.has(dependency)) {
  10766. traversal(dependent);
  10767. } else {
  10768. let brokenSet = brokenPackages.get(dependent.name);
  10769. if (typeof brokenSet === `undefined`)
  10770. brokenPackages.set(dependent.name, brokenSet = /* @__PURE__ */ new Set());
  10771. brokenSet.add(dependent.reference);
  10772. }
  10773. }
  10774. };
  10775. traversal(initialPackage);
  10776. const brokenList = [];
  10777. for (const name of [...brokenPackages.keys()].sort())
  10778. for (const reference of [...brokenPackages.get(name)].sort())
  10779. brokenList.push({ name, reference });
  10780. return brokenList;
  10781. }
  10782. function findPackageLocator(location, { resolveIgnored = false, includeDiscardFromLookup = false } = {}) {
  10783. if (isPathIgnored(location) && !resolveIgnored)
  10784. return null;
  10785. let relativeLocation = ppath.relative(runtimeState.basePath, location);
  10786. if (!relativeLocation.match(isStrictRegExp))
  10787. relativeLocation = `./${relativeLocation}`;
  10788. if (!relativeLocation.endsWith(`/`))
  10789. relativeLocation = `${relativeLocation}/`;
  10790. do {
  10791. const entry = packageLocatorsByLocations.get(relativeLocation);
  10792. if (typeof entry === `undefined` || entry.discardFromLookup && !includeDiscardFromLookup) {
  10793. relativeLocation = relativeLocation.substring(0, relativeLocation.lastIndexOf(`/`, relativeLocation.length - 2) + 1);
  10794. continue;
  10795. }
  10796. return entry.locator;
  10797. } while (relativeLocation !== ``);
  10798. return null;
  10799. }
  10800. function tryReadFile(filePath) {
  10801. try {
  10802. return opts.fakeFs.readFileSync(npath.toPortablePath(filePath), `utf8`);
  10803. } catch (err) {
  10804. if (err.code === `ENOENT`)
  10805. return void 0;
  10806. throw err;
  10807. }
  10808. }
  10809. function resolveToUnqualified(request, issuer, { considerBuiltins = true } = {}) {
  10810. if (request.startsWith(`#`))
  10811. throw new Error(`resolveToUnqualified can not handle private import mappings`);
  10812. if (request === `pnpapi`)
  10813. return npath.toPortablePath(opts.pnpapiResolution);
  10814. if (considerBuiltins && isBuiltinModule(request))
  10815. return null;
  10816. const requestForDisplay = getPathForDisplay(request);
  10817. const issuerForDisplay = issuer && getPathForDisplay(issuer);
  10818. if (issuer && isPathIgnored(issuer)) {
  10819. if (!ppath.isAbsolute(request) || findPackageLocator(request) === null) {
  10820. const result = callNativeResolution(request, issuer);
  10821. if (result === false) {
  10822. throw makeError(
  10823. ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED,
  10824. `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)
  10825. Require request: "${requestForDisplay}"
  10826. Required by: ${issuerForDisplay}
  10827. `,
  10828. { request: requestForDisplay, issuer: issuerForDisplay }
  10829. );
  10830. }
  10831. return npath.toPortablePath(result);
  10832. }
  10833. }
  10834. let unqualifiedPath;
  10835. const dependencyNameMatch = request.match(pathRegExp);
  10836. if (!dependencyNameMatch) {
  10837. if (ppath.isAbsolute(request)) {
  10838. unqualifiedPath = ppath.normalize(request);
  10839. } else {
  10840. if (!issuer) {
  10841. throw makeError(
  10842. ErrorCode.API_ERROR,
  10843. `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`,
  10844. { request: requestForDisplay, issuer: issuerForDisplay }
  10845. );
  10846. }
  10847. const absoluteIssuer = ppath.resolve(issuer);
  10848. if (issuer.match(isDirRegExp)) {
  10849. unqualifiedPath = ppath.normalize(ppath.join(absoluteIssuer, request));
  10850. } else {
  10851. unqualifiedPath = ppath.normalize(ppath.join(ppath.dirname(absoluteIssuer), request));
  10852. }
  10853. }
  10854. } else {
  10855. if (!issuer) {
  10856. throw makeError(
  10857. ErrorCode.API_ERROR,
  10858. `The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`,
  10859. { request: requestForDisplay, issuer: issuerForDisplay }
  10860. );
  10861. }
  10862. const [, dependencyName, subPath] = dependencyNameMatch;
  10863. const issuerLocator = findPackageLocator(issuer);
  10864. if (!issuerLocator) {
  10865. const result = callNativeResolution(request, issuer);
  10866. if (result === false) {
  10867. throw makeError(
  10868. ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED,
  10869. `The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).
  10870. Require path: "${requestForDisplay}"
  10871. Required by: ${issuerForDisplay}
  10872. `,
  10873. { request: requestForDisplay, issuer: issuerForDisplay }
  10874. );
  10875. }
  10876. return npath.toPortablePath(result);
  10877. }
  10878. const issuerInformation = getPackageInformationSafe(issuerLocator);
  10879. let dependencyReference = issuerInformation.packageDependencies.get(dependencyName);
  10880. let fallbackReference = null;
  10881. if (dependencyReference == null) {
  10882. if (issuerLocator.name !== null) {
  10883. const exclusionEntry = runtimeState.fallbackExclusionList.get(issuerLocator.name);
  10884. const canUseFallbacks = !exclusionEntry || !exclusionEntry.has(issuerLocator.reference);
  10885. if (canUseFallbacks) {
  10886. for (let t = 0, T = fallbackLocators.length; t < T; ++t) {
  10887. const fallbackInformation = getPackageInformationSafe(fallbackLocators[t]);
  10888. const reference = fallbackInformation.packageDependencies.get(dependencyName);
  10889. if (reference == null)
  10890. continue;
  10891. if (alwaysWarnOnFallback)
  10892. fallbackReference = reference;
  10893. else
  10894. dependencyReference = reference;
  10895. break;
  10896. }
  10897. if (runtimeState.enableTopLevelFallback) {
  10898. if (dependencyReference == null && fallbackReference === null) {
  10899. const reference = runtimeState.fallbackPool.get(dependencyName);
  10900. if (reference != null) {
  10901. fallbackReference = reference;
  10902. }
  10903. }
  10904. }
  10905. }
  10906. }
  10907. }
  10908. let error = null;
  10909. if (dependencyReference === null) {
  10910. if (isDependencyTreeRoot(issuerLocator)) {
  10911. error = makeError(
  10912. ErrorCode.MISSING_PEER_DEPENDENCY,
  10913. `Your application tried to access ${dependencyName} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.
  10914. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
  10915. Required by: ${issuerForDisplay}
  10916. `,
  10917. { request: requestForDisplay, issuer: issuerForDisplay, dependencyName }
  10918. );
  10919. } else {
  10920. const brokenAncestors = findBrokenPeerDependencies(dependencyName, issuerLocator);
  10921. if (brokenAncestors.every((ancestor) => isDependencyTreeRoot(ancestor))) {
  10922. error = makeError(
  10923. ErrorCode.MISSING_PEER_DEPENDENCY,
  10924. `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.
  10925. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
  10926. Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay})
  10927. ${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference}
  10928. `).join(``)}
  10929. `,
  10930. { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors }
  10931. );
  10932. } else {
  10933. error = makeError(
  10934. ErrorCode.MISSING_PEER_DEPENDENCY,
  10935. `${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.
  10936. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
  10937. Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay})
  10938. ${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference}
  10939. `).join(``)}
  10940. `,
  10941. { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors }
  10942. );
  10943. }
  10944. }
  10945. } else if (dependencyReference === void 0) {
  10946. if (!considerBuiltins && isBuiltinModule(request)) {
  10947. if (isDependencyTreeRoot(issuerLocator)) {
  10948. error = makeError(
  10949. ErrorCode.UNDECLARED_DEPENDENCY,
  10950. `Your application tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.
  10951. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
  10952. Required by: ${issuerForDisplay}
  10953. `,
  10954. { request: requestForDisplay, issuer: issuerForDisplay, dependencyName }
  10955. );
  10956. } else {
  10957. error = makeError(
  10958. ErrorCode.UNDECLARED_DEPENDENCY,
  10959. `${issuerLocator.name} tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in ${issuerLocator.name}'s dependencies, this makes the require call ambiguous and unsound.
  10960. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
  10961. Required by: ${issuerForDisplay}
  10962. `,
  10963. { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName }
  10964. );
  10965. }
  10966. } else {
  10967. if (isDependencyTreeRoot(issuerLocator)) {
  10968. error = makeError(
  10969. ErrorCode.UNDECLARED_DEPENDENCY,
  10970. `Your application tried to access ${dependencyName}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.
  10971. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
  10972. Required by: ${issuerForDisplay}
  10973. `,
  10974. { request: requestForDisplay, issuer: issuerForDisplay, dependencyName }
  10975. );
  10976. } else {
  10977. error = makeError(
  10978. ErrorCode.UNDECLARED_DEPENDENCY,
  10979. `${issuerLocator.name} tried to access ${dependencyName}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.
  10980. Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
  10981. Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay})
  10982. `,
  10983. { request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName }
  10984. );
  10985. }
  10986. }
  10987. }
  10988. if (dependencyReference == null) {
  10989. if (fallbackReference === null || error === null)
  10990. throw error || new Error(`Assertion failed: Expected an error to have been set`);
  10991. dependencyReference = fallbackReference;
  10992. const message = error.message.replace(/\n.*/g, ``);
  10993. error.message = message;
  10994. if (!emittedWarnings.has(message) && debugLevel !== 0) {
  10995. emittedWarnings.add(message);
  10996. process.emitWarning(error);
  10997. }
  10998. }
  10999. const dependencyLocator = Array.isArray(dependencyReference) ? { name: dependencyReference[0], reference: dependencyReference[1] } : { name: dependencyName, reference: dependencyReference };
  11000. const dependencyInformation = getPackageInformationSafe(dependencyLocator);
  11001. if (!dependencyInformation.packageLocation) {
  11002. throw makeError(
  11003. ErrorCode.MISSING_DEPENDENCY,
  11004. `A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.
  11005. Required package: ${dependencyLocator.name}@${dependencyLocator.reference}${dependencyLocator.name !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
  11006. Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay})
  11007. `,
  11008. { request: requestForDisplay, issuer: issuerForDisplay, dependencyLocator: Object.assign({}, dependencyLocator) }
  11009. );
  11010. }
  11011. const dependencyLocation = dependencyInformation.packageLocation;
  11012. if (subPath) {
  11013. unqualifiedPath = ppath.join(dependencyLocation, subPath);
  11014. } else {
  11015. unqualifiedPath = dependencyLocation;
  11016. }
  11017. }
  11018. return ppath.normalize(unqualifiedPath);
  11019. }
  11020. function resolveUnqualifiedExport(request, unqualifiedPath, conditions = defaultExportsConditions) {
  11021. if (isStrictRegExp.test(request))
  11022. return unqualifiedPath;
  11023. const unqualifiedExportPath = applyNodeExportsResolution(unqualifiedPath, conditions);
  11024. if (unqualifiedExportPath) {
  11025. return ppath.normalize(unqualifiedExportPath);
  11026. } else {
  11027. return unqualifiedPath;
  11028. }
  11029. }
  11030. function resolveUnqualified(unqualifiedPath, { extensions = Object.keys(require$$0.Module._extensions) } = {}) {
  11031. var _a, _b;
  11032. const candidates = [];
  11033. const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions });
  11034. if (qualifiedPath) {
  11035. return ppath.normalize(qualifiedPath);
  11036. } else {
  11037. reportRequiredFilesToWatchMode(candidates.map((candidate) => npath.fromPortablePath(candidate)));
  11038. const unqualifiedPathForDisplay = getPathForDisplay(unqualifiedPath);
  11039. const containingPackage = findPackageLocator(unqualifiedPath);
  11040. if (containingPackage) {
  11041. const { packageLocation } = getPackageInformationSafe(containingPackage);
  11042. let exists = true;
  11043. try {
  11044. opts.fakeFs.accessSync(packageLocation);
  11045. } catch (err) {
  11046. if ((err == null ? void 0 : err.code) === `ENOENT`) {
  11047. exists = false;
  11048. } else {
  11049. const readableError = ((_b = (_a = err == null ? void 0 : err.message) != null ? _a : err) != null ? _b : `empty exception thrown`).replace(/^[A-Z]/, ($0) => $0.toLowerCase());
  11050. throw makeError(ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, `Required package exists but could not be accessed (${readableError}).
  11051. Missing package: ${containingPackage.name}@${containingPackage.reference}
  11052. Expected package location: ${getPathForDisplay(packageLocation)}
  11053. `, { unqualifiedPath: unqualifiedPathForDisplay, extensions });
  11054. }
  11055. }
  11056. if (!exists) {
  11057. const errorMessage = packageLocation.includes(`/unplugged/`) ? `Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).` : `Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.`;
  11058. throw makeError(
  11059. ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED,
  11060. `${errorMessage}
  11061. Missing package: ${containingPackage.name}@${containingPackage.reference}
  11062. Expected package location: ${getPathForDisplay(packageLocation)}
  11063. `,
  11064. { unqualifiedPath: unqualifiedPathForDisplay, extensions }
  11065. );
  11066. }
  11067. }
  11068. throw makeError(
  11069. ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED,
  11070. `Qualified path resolution failed: we looked for the following paths, but none could be accessed.
  11071. Source path: ${unqualifiedPathForDisplay}
  11072. ${candidates.map((candidate) => `Not found: ${getPathForDisplay(candidate)}
  11073. `).join(``)}`,
  11074. { unqualifiedPath: unqualifiedPathForDisplay, extensions }
  11075. );
  11076. }
  11077. }
  11078. function resolvePrivateRequest(request, issuer, opts2) {
  11079. var _a;
  11080. if (!issuer)
  11081. throw new Error(`Assertion failed: An issuer is required to resolve private import mappings`);
  11082. const resolved = packageImportsResolve({
  11083. name: request,
  11084. base: url.pathToFileURL(npath.fromPortablePath(issuer)),
  11085. conditions: (_a = opts2.conditions) != null ? _a : defaultExportsConditions,
  11086. readFileSyncFn: tryReadFile
  11087. });
  11088. if (resolved instanceof URL) {
  11089. return resolveUnqualified(npath.toPortablePath(url.fileURLToPath(resolved)), { extensions: opts2.extensions });
  11090. } else {
  11091. if (resolved.startsWith(`#`))
  11092. throw new Error(`Mapping from one private import to another isn't allowed`);
  11093. return resolveRequest(resolved, issuer, opts2);
  11094. }
  11095. }
  11096. function resolveRequest(request, issuer, opts2 = {}) {
  11097. try {
  11098. if (request.startsWith(`#`))
  11099. return resolvePrivateRequest(request, issuer, opts2);
  11100. const { considerBuiltins, extensions, conditions } = opts2;
  11101. const unqualifiedPath = resolveToUnqualified(request, issuer, { considerBuiltins });
  11102. if (request === `pnpapi`)
  11103. return unqualifiedPath;
  11104. if (unqualifiedPath === null)
  11105. return null;
  11106. const isIssuerIgnored = () => issuer !== null ? isPathIgnored(issuer) : false;
  11107. const remappedPath = (!considerBuiltins || !isBuiltinModule(request)) && !isIssuerIgnored() ? resolveUnqualifiedExport(request, unqualifiedPath, conditions) : unqualifiedPath;
  11108. return resolveUnqualified(remappedPath, { extensions });
  11109. } catch (error) {
  11110. if (Object.prototype.hasOwnProperty.call(error, `pnpCode`))
  11111. Object.assign(error.data, { request: getPathForDisplay(request), issuer: issuer && getPathForDisplay(issuer) });
  11112. throw error;
  11113. }
  11114. }
  11115. function resolveVirtual(request) {
  11116. const normalized = ppath.normalize(request);
  11117. const resolved = VirtualFS.resolveVirtual(normalized);
  11118. return resolved !== normalized ? resolved : null;
  11119. }
  11120. return {
  11121. VERSIONS,
  11122. topLevel,
  11123. getLocator: (name, referencish) => {
  11124. if (Array.isArray(referencish)) {
  11125. return { name: referencish[0], reference: referencish[1] };
  11126. } else {
  11127. return { name, reference: referencish };
  11128. }
  11129. },
  11130. getDependencyTreeRoots: () => {
  11131. return [...runtimeState.dependencyTreeRoots];
  11132. },
  11133. getAllLocators() {
  11134. const locators = [];
  11135. for (const [name, entry] of packageRegistry)
  11136. for (const reference of entry.keys())
  11137. if (name !== null && reference !== null)
  11138. locators.push({ name, reference });
  11139. return locators;
  11140. },
  11141. getPackageInformation: (locator) => {
  11142. const info = getPackageInformation(locator);
  11143. if (info === null)
  11144. return null;
  11145. const packageLocation = npath.fromPortablePath(info.packageLocation);
  11146. const nativeInfo = { ...info, packageLocation };
  11147. return nativeInfo;
  11148. },
  11149. findPackageLocator: (path) => {
  11150. return findPackageLocator(npath.toPortablePath(path));
  11151. },
  11152. resolveToUnqualified: maybeLog(`resolveToUnqualified`, (request, issuer, opts2) => {
  11153. const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null;
  11154. const resolution = resolveToUnqualified(npath.toPortablePath(request), portableIssuer, opts2);
  11155. if (resolution === null)
  11156. return null;
  11157. return npath.fromPortablePath(resolution);
  11158. }),
  11159. resolveUnqualified: maybeLog(`resolveUnqualified`, (unqualifiedPath, opts2) => {
  11160. return npath.fromPortablePath(resolveUnqualified(npath.toPortablePath(unqualifiedPath), opts2));
  11161. }),
  11162. resolveRequest: maybeLog(`resolveRequest`, (request, issuer, opts2) => {
  11163. const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null;
  11164. const resolution = resolveRequest(npath.toPortablePath(request), portableIssuer, opts2);
  11165. if (resolution === null)
  11166. return null;
  11167. return npath.fromPortablePath(resolution);
  11168. }),
  11169. resolveVirtual: maybeLog(`resolveVirtual`, (path) => {
  11170. const result = resolveVirtual(npath.toPortablePath(path));
  11171. if (result !== null) {
  11172. return npath.fromPortablePath(result);
  11173. } else {
  11174. return null;
  11175. }
  11176. })
  11177. };
  11178. }
  11179. function makeManager(pnpapi, opts) {
  11180. const initialApiPath = npath.toPortablePath(pnpapi.resolveToUnqualified(`pnpapi`, null));
  11181. const initialApiStats = opts.fakeFs.statSync(npath.toPortablePath(initialApiPath));
  11182. const apiMetadata = /* @__PURE__ */ new Map([
  11183. [initialApiPath, {
  11184. cache: require$$0.Module._cache,
  11185. instance: pnpapi,
  11186. stats: initialApiStats,
  11187. lastRefreshCheck: Date.now()
  11188. }]
  11189. ]);
  11190. function loadApiInstance(pnpApiPath) {
  11191. const nativePath = npath.fromPortablePath(pnpApiPath);
  11192. const module = new require$$0.Module(nativePath, null);
  11193. module.load(nativePath);
  11194. return module.exports;
  11195. }
  11196. function refreshApiEntry(pnpApiPath, apiEntry) {
  11197. const timeNow = Date.now();
  11198. if (timeNow - apiEntry.lastRefreshCheck < 500)
  11199. return;
  11200. apiEntry.lastRefreshCheck = timeNow;
  11201. const stats = opts.fakeFs.statSync(pnpApiPath);
  11202. if (stats.mtime > apiEntry.stats.mtime) {
  11203. process.emitWarning(`[Warning] The runtime detected new informations in a PnP file; reloading the API instance (${npath.fromPortablePath(pnpApiPath)})`);
  11204. apiEntry.stats = stats;
  11205. apiEntry.instance = loadApiInstance(pnpApiPath);
  11206. }
  11207. }
  11208. function getApiEntry(pnpApiPath, refresh = false) {
  11209. let apiEntry = apiMetadata.get(pnpApiPath);
  11210. if (typeof apiEntry !== `undefined`) {
  11211. if (refresh) {
  11212. refreshApiEntry(pnpApiPath, apiEntry);
  11213. }
  11214. } else {
  11215. apiMetadata.set(pnpApiPath, apiEntry = {
  11216. cache: {},
  11217. instance: loadApiInstance(pnpApiPath),
  11218. stats: opts.fakeFs.statSync(pnpApiPath),
  11219. lastRefreshCheck: Date.now()
  11220. });
  11221. }
  11222. return apiEntry;
  11223. }
  11224. const findApiPathCache = /* @__PURE__ */ new Map();
  11225. function addToCacheAndReturn(start, end, target) {
  11226. if (target !== null)
  11227. target = VirtualFS.resolveVirtual(target);
  11228. let curr;
  11229. let next = start;
  11230. do {
  11231. curr = next;
  11232. findApiPathCache.set(curr, target);
  11233. next = ppath.dirname(curr);
  11234. } while (curr !== end);
  11235. return target;
  11236. }
  11237. function findApiPathFor(modulePath) {
  11238. let bestCandidate = null;
  11239. for (const [apiPath, apiEntry] of apiMetadata) {
  11240. const locator = apiEntry.instance.findPackageLocator(modulePath);
  11241. if (!locator)
  11242. continue;
  11243. if (apiMetadata.size === 1)
  11244. return apiPath;
  11245. const packageInformation = apiEntry.instance.getPackageInformation(locator);
  11246. if (!packageInformation)
  11247. throw new Error(`Assertion failed: Couldn't get package information for '${modulePath}'`);
  11248. if (!bestCandidate)
  11249. bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [] };
  11250. if (packageInformation.packageLocation === bestCandidate.packageLocation) {
  11251. bestCandidate.apiPaths.push(apiPath);
  11252. } else if (packageInformation.packageLocation.length > bestCandidate.packageLocation.length) {
  11253. bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [apiPath] };
  11254. }
  11255. }
  11256. if (bestCandidate) {
  11257. if (bestCandidate.apiPaths.length === 1)
  11258. return bestCandidate.apiPaths[0];
  11259. const controlSegment = bestCandidate.apiPaths.map((apiPath) => ` ${npath.fromPortablePath(apiPath)}`).join(`
  11260. `);
  11261. throw new Error(`Unable to locate pnpapi, the module '${modulePath}' is controlled by multiple pnpapi instances.
  11262. This is usually caused by using the global cache (enableGlobalCache: true)
  11263. Controlled by:
  11264. ${controlSegment}
  11265. `);
  11266. }
  11267. const start = ppath.resolve(npath.toPortablePath(modulePath));
  11268. let curr;
  11269. let next = start;
  11270. do {
  11271. curr = next;
  11272. const cached = findApiPathCache.get(curr);
  11273. if (cached !== void 0)
  11274. return addToCacheAndReturn(start, curr, cached);
  11275. const cjsCandidate = ppath.join(curr, Filename.pnpCjs);
  11276. if (opts.fakeFs.existsSync(cjsCandidate) && opts.fakeFs.statSync(cjsCandidate).isFile())
  11277. return addToCacheAndReturn(start, curr, cjsCandidate);
  11278. const legacyCjsCandidate = ppath.join(curr, Filename.pnpJs);
  11279. if (opts.fakeFs.existsSync(legacyCjsCandidate) && opts.fakeFs.statSync(legacyCjsCandidate).isFile())
  11280. return addToCacheAndReturn(start, curr, legacyCjsCandidate);
  11281. next = ppath.dirname(curr);
  11282. } while (curr !== PortablePath.root);
  11283. return addToCacheAndReturn(start, curr, null);
  11284. }
  11285. function getApiPathFromParent(parent) {
  11286. if (parent == null)
  11287. return initialApiPath;
  11288. if (typeof parent.pnpApiPath === `undefined`) {
  11289. if (parent.filename !== null) {
  11290. return parent.pnpApiPath = findApiPathFor(parent.filename);
  11291. } else {
  11292. return initialApiPath;
  11293. }
  11294. }
  11295. if (parent.pnpApiPath !== null)
  11296. return parent.pnpApiPath;
  11297. return null;
  11298. }
  11299. return {
  11300. getApiPathFromParent,
  11301. findApiPathFor,
  11302. getApiEntry
  11303. };
  11304. }
  11305. const localFs = { ...fs__default.default };
  11306. const nodeFs = new NodeFS(localFs);
  11307. const defaultRuntimeState = $$SETUP_STATE(hydrateRuntimeState);
  11308. const defaultPnpapiResolution = __filename;
  11309. const defaultFsLayer = new VirtualFS({
  11310. baseFs: new ZipOpenFS({
  11311. baseFs: nodeFs,
  11312. libzip: () => getLibzipSync(),
  11313. maxOpenFiles: 80,
  11314. readOnlyArchives: true
  11315. })
  11316. });
  11317. class DynamicFS extends ProxiedFS {
  11318. constructor() {
  11319. super(ppath);
  11320. this.baseFs = defaultFsLayer;
  11321. }
  11322. mapToBase(p) {
  11323. return p;
  11324. }
  11325. mapFromBase(p) {
  11326. return p;
  11327. }
  11328. }
  11329. const dynamicFsLayer = new DynamicFS();
  11330. let manager;
  11331. const defaultApi = Object.assign(makeApi(defaultRuntimeState, {
  11332. fakeFs: dynamicFsLayer,
  11333. pnpapiResolution: defaultPnpapiResolution
  11334. }), {
  11335. makeApi: ({
  11336. basePath = void 0,
  11337. fakeFs = dynamicFsLayer,
  11338. pnpapiResolution = defaultPnpapiResolution,
  11339. ...rest
  11340. }) => {
  11341. const apiRuntimeState = typeof basePath !== `undefined` ? $$SETUP_STATE(hydrateRuntimeState, basePath) : defaultRuntimeState;
  11342. return makeApi(apiRuntimeState, {
  11343. fakeFs,
  11344. pnpapiResolution,
  11345. ...rest
  11346. });
  11347. },
  11348. setup: (api) => {
  11349. applyPatch(api || defaultApi, {
  11350. fakeFs: defaultFsLayer,
  11351. manager
  11352. });
  11353. dynamicFsLayer.baseFs = new NodeFS(fs__default.default);
  11354. }
  11355. });
  11356. manager = makeManager(defaultApi, {
  11357. fakeFs: dynamicFsLayer
  11358. });
  11359. if (module.parent && module.parent.id === `internal/preload`) {
  11360. defaultApi.setup();
  11361. if (module.filename) {
  11362. delete require$$0__default.default._cache[module.filename];
  11363. }
  11364. }
  11365. if (process.mainModule === module) {
  11366. const reportError = (code, message, data) => {
  11367. process.stdout.write(`${JSON.stringify([{ code, message, data }, null])}
  11368. `);
  11369. };
  11370. const reportSuccess = (resolution) => {
  11371. process.stdout.write(`${JSON.stringify([null, resolution])}
  11372. `);
  11373. };
  11374. const processResolution = (request, issuer) => {
  11375. try {
  11376. reportSuccess(defaultApi.resolveRequest(request, issuer));
  11377. } catch (error) {
  11378. reportError(error.code, error.message, error.data);
  11379. }
  11380. };
  11381. const processRequest = (data) => {
  11382. try {
  11383. const [request, issuer] = JSON.parse(data);
  11384. processResolution(request, issuer);
  11385. } catch (error) {
  11386. reportError(`INVALID_JSON`, error.message, error.data);
  11387. }
  11388. };
  11389. if (process.argv.length > 2) {
  11390. if (process.argv.length !== 4) {
  11391. process.stderr.write(`Usage: ${process.argv[0]} ${process.argv[1]} <request> <issuer>
  11392. `);
  11393. process.exitCode = 64;
  11394. } else {
  11395. processResolution(process.argv[2], process.argv[3]);
  11396. }
  11397. } else {
  11398. let buffer = ``;
  11399. const decoder = new StringDecoder__default.default.StringDecoder();
  11400. process.stdin.on(`data`, (chunk) => {
  11401. buffer += decoder.write(chunk);
  11402. do {
  11403. const index = buffer.indexOf(`
  11404. `);
  11405. if (index === -1)
  11406. break;
  11407. const line = buffer.slice(0, index);
  11408. buffer = buffer.slice(index + 1);
  11409. processRequest(line);
  11410. } while (true);
  11411. });
  11412. }
  11413. }
  11414. module.exports = defaultApi;