vendor.js 1.4 MB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064
  1. (global["webpackJsonp"] = global["webpackJsonp"] || []).push([["common/vendor"],{
  2. /***/ 1:
  3. /*!*************************************************************!*\
  4. !*** ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js ***!
  5. \*************************************************************/
  6. /*! no static exports found */
  7. /***/ (function(module, exports, __webpack_require__) {
  8. "use strict";
  9. Object.defineProperty(exports, "__esModule", { value: true });exports.createApp = createApp;exports.createComponent = createComponent;exports.createPage = createPage;exports.createPlugin = createPlugin;exports.createSubpackageApp = createSubpackageApp;exports.default = void 0;var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 2));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function ownKeys(object, enumerableOnly) {var keys = Object.keys(object);if (Object.getOwnPropertySymbols) {var symbols = Object.getOwnPropertySymbols(object);if (enumerableOnly) symbols = symbols.filter(function (sym) {return Object.getOwnPropertyDescriptor(object, sym).enumerable;});keys.push.apply(keys, symbols);}return keys;}function _objectSpread(target) {for (var i = 1; i < arguments.length; i++) {var source = arguments[i] != null ? arguments[i] : {};if (i % 2) {ownKeys(Object(source), true).forEach(function (key) {_defineProperty(target, key, source[key]);});} else if (Object.getOwnPropertyDescriptors) {Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));} else {ownKeys(Object(source)).forEach(function (key) {Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));});}}return target;}function _slicedToArray(arr, i) {return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();}function _nonIterableRest() {throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _iterableToArrayLimit(arr, i) {if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;var _arr = [];var _n = true;var _d = false;var _e = undefined;try {for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {_arr.push(_s.value);if (i && _arr.length === i) break;}} catch (err) {_d = true;_e = err;} finally {try {if (!_n && _i["return"] != null) _i["return"]();} finally {if (_d) throw _e;}}return _arr;}function _arrayWithHoles(arr) {if (Array.isArray(arr)) return arr;}function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}function _classCallCheck(instance, Constructor) {if (!(instance instanceof Constructor)) {throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target, props) {for (var i = 0; i < props.length; i++) {var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);}}function _createClass(Constructor, protoProps, staticProps) {if (protoProps) _defineProperties(Constructor.prototype, protoProps);if (staticProps) _defineProperties(Constructor, staticProps);return Constructor;}function _toConsumableArray(arr) {return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();}function _nonIterableSpread() {throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}function _unsupportedIterableToArray(o, minLen) {if (!o) return;if (typeof o === "string") return _arrayLikeToArray(o, minLen);var n = Object.prototype.toString.call(o).slice(8, -1);if (n === "Object" && o.constructor) n = o.constructor.name;if (n === "Map" || n === "Set") return Array.from(o);if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);}function _iterableToArray(iter) {if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);}function _arrayWithoutHoles(arr) {if (Array.isArray(arr)) return _arrayLikeToArray(arr);}function _arrayLikeToArray(arr, len) {if (len == null || len > arr.length) len = arr.length;for (var i = 0, arr2 = new Array(len); i < len; i++) {arr2[i] = arr[i];}return arr2;}
  10. function b64DecodeUnicode(str) {
  11. return decodeURIComponent(atob(str).split('').map(function (c) {
  12. return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
  13. }).join(''));
  14. }
  15. function getCurrentUserInfo() {
  16. var token = tt.getStorageSync('uni_id_token') || '';
  17. var tokenArr = token.split('.');
  18. if (!token || tokenArr.length !== 3) {
  19. return {
  20. uid: null,
  21. role: [],
  22. permission: [],
  23. tokenExpired: 0 };
  24. }
  25. var userInfo;
  26. try {
  27. userInfo = JSON.parse(b64DecodeUnicode(tokenArr[1]));
  28. } catch (error) {
  29. throw new Error('获取当前用户信息出错,详细错误信息为:' + error.message);
  30. }
  31. userInfo.tokenExpired = userInfo.exp * 1000;
  32. delete userInfo.exp;
  33. delete userInfo.iat;
  34. return userInfo;
  35. }
  36. function uniIdMixin(Vue) {
  37. Vue.prototype.uniIDHasRole = function (roleId) {var _getCurrentUserInfo =
  38. getCurrentUserInfo(),role = _getCurrentUserInfo.role;
  39. return role.indexOf(roleId) > -1;
  40. };
  41. Vue.prototype.uniIDHasPermission = function (permissionId) {var _getCurrentUserInfo2 =
  42. getCurrentUserInfo(),permission = _getCurrentUserInfo2.permission;
  43. return this.uniIDHasRole('admin') || permission.indexOf(permissionId) > -1;
  44. };
  45. Vue.prototype.uniIDTokenValid = function () {var _getCurrentUserInfo3 =
  46. getCurrentUserInfo(),tokenExpired = _getCurrentUserInfo3.tokenExpired;
  47. return tokenExpired > Date.now();
  48. };
  49. }
  50. var _toString = Object.prototype.toString;
  51. var hasOwnProperty = Object.prototype.hasOwnProperty;
  52. function isFn(fn) {
  53. return typeof fn === 'function';
  54. }
  55. function isStr(str) {
  56. return typeof str === 'string';
  57. }
  58. function isPlainObject(obj) {
  59. return _toString.call(obj) === '[object Object]';
  60. }
  61. function hasOwn(obj, key) {
  62. return hasOwnProperty.call(obj, key);
  63. }
  64. function noop() {}
  65. /**
  66. * Create a cached version of a pure function.
  67. */
  68. function cached(fn) {
  69. var cache = Object.create(null);
  70. return function cachedFn(str) {
  71. var hit = cache[str];
  72. return hit || (cache[str] = fn(str));
  73. };
  74. }
  75. /**
  76. * Camelize a hyphen-delimited string.
  77. */
  78. var camelizeRE = /-(\w)/g;
  79. var camelize = cached(function (str) {
  80. return str.replace(camelizeRE, function (_, c) {return c ? c.toUpperCase() : '';});
  81. });
  82. var HOOKS = [
  83. 'invoke',
  84. 'success',
  85. 'fail',
  86. 'complete',
  87. 'returnValue'];
  88. var globalInterceptors = {};
  89. var scopedInterceptors = {};
  90. function mergeHook(parentVal, childVal) {
  91. var res = childVal ?
  92. parentVal ?
  93. parentVal.concat(childVal) :
  94. Array.isArray(childVal) ?
  95. childVal : [childVal] :
  96. parentVal;
  97. return res ?
  98. dedupeHooks(res) :
  99. res;
  100. }
  101. function dedupeHooks(hooks) {
  102. var res = [];
  103. for (var i = 0; i < hooks.length; i++) {
  104. if (res.indexOf(hooks[i]) === -1) {
  105. res.push(hooks[i]);
  106. }
  107. }
  108. return res;
  109. }
  110. function removeHook(hooks, hook) {
  111. var index = hooks.indexOf(hook);
  112. if (index !== -1) {
  113. hooks.splice(index, 1);
  114. }
  115. }
  116. function mergeInterceptorHook(interceptor, option) {
  117. Object.keys(option).forEach(function (hook) {
  118. if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
  119. interceptor[hook] = mergeHook(interceptor[hook], option[hook]);
  120. }
  121. });
  122. }
  123. function removeInterceptorHook(interceptor, option) {
  124. if (!interceptor || !option) {
  125. return;
  126. }
  127. Object.keys(option).forEach(function (hook) {
  128. if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
  129. removeHook(interceptor[hook], option[hook]);
  130. }
  131. });
  132. }
  133. function addInterceptor(method, option) {
  134. if (typeof method === 'string' && isPlainObject(option)) {
  135. mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);
  136. } else if (isPlainObject(method)) {
  137. mergeInterceptorHook(globalInterceptors, method);
  138. }
  139. }
  140. function removeInterceptor(method, option) {
  141. if (typeof method === 'string') {
  142. if (isPlainObject(option)) {
  143. removeInterceptorHook(scopedInterceptors[method], option);
  144. } else {
  145. delete scopedInterceptors[method];
  146. }
  147. } else if (isPlainObject(method)) {
  148. removeInterceptorHook(globalInterceptors, method);
  149. }
  150. }
  151. function wrapperHook(hook) {
  152. return function (data) {
  153. return hook(data) || data;
  154. };
  155. }
  156. function isPromise(obj) {
  157. return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
  158. }
  159. function queue(hooks, data) {
  160. var promise = false;
  161. for (var i = 0; i < hooks.length; i++) {
  162. var hook = hooks[i];
  163. if (promise) {
  164. promise = Promise.resolve(wrapperHook(hook));
  165. } else {
  166. var res = hook(data);
  167. if (isPromise(res)) {
  168. promise = Promise.resolve(res);
  169. }
  170. if (res === false) {
  171. return {
  172. then: function then() {} };
  173. }
  174. }
  175. }
  176. return promise || {
  177. then: function then(callback) {
  178. return callback(data);
  179. } };
  180. }
  181. function wrapperOptions(interceptor) {var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  182. ['success', 'fail', 'complete'].forEach(function (name) {
  183. if (Array.isArray(interceptor[name])) {
  184. var oldCallback = options[name];
  185. options[name] = function callbackInterceptor(res) {
  186. queue(interceptor[name], res).then(function (res) {
  187. /* eslint-disable no-mixed-operators */
  188. return isFn(oldCallback) && oldCallback(res) || res;
  189. });
  190. };
  191. }
  192. });
  193. return options;
  194. }
  195. function wrapperReturnValue(method, returnValue) {
  196. var returnValueHooks = [];
  197. if (Array.isArray(globalInterceptors.returnValue)) {
  198. returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(globalInterceptors.returnValue));
  199. }
  200. var interceptor = scopedInterceptors[method];
  201. if (interceptor && Array.isArray(interceptor.returnValue)) {
  202. returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(interceptor.returnValue));
  203. }
  204. returnValueHooks.forEach(function (hook) {
  205. returnValue = hook(returnValue) || returnValue;
  206. });
  207. return returnValue;
  208. }
  209. function getApiInterceptorHooks(method) {
  210. var interceptor = Object.create(null);
  211. Object.keys(globalInterceptors).forEach(function (hook) {
  212. if (hook !== 'returnValue') {
  213. interceptor[hook] = globalInterceptors[hook].slice();
  214. }
  215. });
  216. var scopedInterceptor = scopedInterceptors[method];
  217. if (scopedInterceptor) {
  218. Object.keys(scopedInterceptor).forEach(function (hook) {
  219. if (hook !== 'returnValue') {
  220. interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
  221. }
  222. });
  223. }
  224. return interceptor;
  225. }
  226. function invokeApi(method, api, options) {for (var _len = arguments.length, params = new Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) {params[_key - 3] = arguments[_key];}
  227. var interceptor = getApiInterceptorHooks(method);
  228. if (interceptor && Object.keys(interceptor).length) {
  229. if (Array.isArray(interceptor.invoke)) {
  230. var res = queue(interceptor.invoke, options);
  231. return res.then(function (options) {
  232. return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));
  233. });
  234. } else {
  235. return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));
  236. }
  237. }
  238. return api.apply(void 0, [options].concat(params));
  239. }
  240. var promiseInterceptor = {
  241. returnValue: function returnValue(res) {
  242. if (!isPromise(res)) {
  243. return res;
  244. }
  245. return new Promise(function (resolve, reject) {
  246. res.then(function (res) {
  247. if (res[0]) {
  248. reject(res[0]);
  249. } else {
  250. resolve(res[1]);
  251. }
  252. });
  253. });
  254. } };
  255. var SYNC_API_RE =
  256. /^\$|Window$|WindowStyle$|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;
  257. var CONTEXT_API_RE = /^create|Manager$/;
  258. // Context例外情况
  259. var CONTEXT_API_RE_EXC = ['createBLEConnection'];
  260. // 同步例外情况
  261. var ASYNC_API = ['createBLEConnection'];
  262. var CALLBACK_API_RE = /^on|^off/;
  263. function isContextApi(name) {
  264. return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1;
  265. }
  266. function isSyncApi(name) {
  267. return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1;
  268. }
  269. function isCallbackApi(name) {
  270. return CALLBACK_API_RE.test(name) && name !== 'onPush';
  271. }
  272. function handlePromise(promise) {
  273. return promise.then(function (data) {
  274. return [null, data];
  275. }).
  276. catch(function (err) {return [err];});
  277. }
  278. function shouldPromise(name) {
  279. if (
  280. isContextApi(name) ||
  281. isSyncApi(name) ||
  282. isCallbackApi(name))
  283. {
  284. return false;
  285. }
  286. return true;
  287. }
  288. /* eslint-disable no-extend-native */
  289. if (!Promise.prototype.finally) {
  290. Promise.prototype.finally = function (callback) {
  291. var promise = this.constructor;
  292. return this.then(
  293. function (value) {return promise.resolve(callback()).then(function () {return value;});},
  294. function (reason) {return promise.resolve(callback()).then(function () {
  295. throw reason;
  296. });});
  297. };
  298. }
  299. function promisify(name, api) {
  300. if (!shouldPromise(name)) {
  301. return api;
  302. }
  303. return function promiseApi() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};for (var _len2 = arguments.length, params = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {params[_key2 - 1] = arguments[_key2];}
  304. if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
  305. return wrapperReturnValue(name, invokeApi.apply(void 0, [name, api, options].concat(params)));
  306. }
  307. return wrapperReturnValue(name, handlePromise(new Promise(function (resolve, reject) {
  308. invokeApi.apply(void 0, [name, api, Object.assign({}, options, {
  309. success: resolve,
  310. fail: reject })].concat(
  311. params));
  312. })));
  313. };
  314. }
  315. var EPS = 1e-4;
  316. var BASE_DEVICE_WIDTH = 750;
  317. var isIOS = false;
  318. var deviceWidth = 0;
  319. var deviceDPR = 0;
  320. function checkDeviceWidth() {var _tt$getSystemInfoSync =
  321. tt.getSystemInfoSync(),platform = _tt$getSystemInfoSync.platform,pixelRatio = _tt$getSystemInfoSync.pixelRatio,windowWidth = _tt$getSystemInfoSync.windowWidth; // uni=>tt runtime 编译目标是 uni 对象,内部不允许直接使用 uni
  322. deviceWidth = windowWidth;
  323. deviceDPR = pixelRatio;
  324. isIOS = platform === 'ios';
  325. }
  326. function upx2px(number, newDeviceWidth) {
  327. if (deviceWidth === 0) {
  328. checkDeviceWidth();
  329. }
  330. number = Number(number);
  331. if (number === 0) {
  332. return 0;
  333. }
  334. var result = number / BASE_DEVICE_WIDTH * (newDeviceWidth || deviceWidth);
  335. if (result < 0) {
  336. result = -result;
  337. }
  338. result = Math.floor(result + EPS);
  339. if (result === 0) {
  340. if (deviceDPR === 1 || !isIOS) {
  341. result = 1;
  342. } else {
  343. result = 0.5;
  344. }
  345. }
  346. return number < 0 ? -result : result;
  347. }
  348. var interceptors = {
  349. promiseInterceptor: promiseInterceptor };
  350. var baseApi = /*#__PURE__*/Object.freeze({
  351. __proto__: null,
  352. upx2px: upx2px,
  353. addInterceptor: addInterceptor,
  354. removeInterceptor: removeInterceptor,
  355. interceptors: interceptors });var
  356. EventChannel = /*#__PURE__*/function () {
  357. function EventChannel(id, events) {var _this = this;_classCallCheck(this, EventChannel);
  358. this.id = id;
  359. this.listener = {};
  360. this.emitCache = {};
  361. if (events) {
  362. Object.keys(events).forEach(function (name) {
  363. _this.on(name, events[name]);
  364. });
  365. }
  366. }_createClass(EventChannel, [{ key: "emit", value: function emit(
  367. eventName) {for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {args[_key3 - 1] = arguments[_key3];}
  368. var fns = this.listener[eventName];
  369. if (!fns) {
  370. return (this.emitCache[eventName] || (this.emitCache[eventName] = [])).push(args);
  371. }
  372. fns.forEach(function (opt) {
  373. opt.fn.apply(opt.fn, args);
  374. });
  375. this.listener[eventName] = fns.filter(function (opt) {return opt.type !== 'once';});
  376. } }, { key: "on", value: function on(
  377. eventName, fn) {
  378. this._addListener(eventName, 'on', fn);
  379. this._clearCache(eventName);
  380. } }, { key: "once", value: function once(
  381. eventName, fn) {
  382. this._addListener(eventName, 'once', fn);
  383. this._clearCache(eventName);
  384. } }, { key: "off", value: function off(
  385. eventName, fn) {
  386. var fns = this.listener[eventName];
  387. if (!fns) {
  388. return;
  389. }
  390. if (fn) {
  391. for (var i = 0; i < fns.length;) {
  392. if (fns[i].fn === fn) {
  393. fns.splice(i, 1);
  394. i--;
  395. }
  396. i++;
  397. }
  398. } else {
  399. delete this.listener[eventName];
  400. }
  401. } }, { key: "_clearCache", value: function _clearCache(
  402. eventName) {
  403. var cacheArgs = this.emitCache[eventName];
  404. if (cacheArgs) {
  405. for (; cacheArgs.length > 0;) {
  406. this.emit.apply(this, [eventName].concat(cacheArgs.shift()));
  407. }
  408. }
  409. } }, { key: "_addListener", value: function _addListener(
  410. eventName, type, fn) {
  411. (this.listener[eventName] || (this.listener[eventName] = [])).push({
  412. fn: fn,
  413. type: type });
  414. } }]);return EventChannel;}();
  415. var eventChannels = {};
  416. var eventChannelStack = [];
  417. var id = 0;
  418. function initEventChannel(events) {var cache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
  419. id++;
  420. var eventChannel = new EventChannel(id, events);
  421. if (cache) {
  422. eventChannels[id] = eventChannel;
  423. eventChannelStack.push(eventChannel);
  424. }
  425. return eventChannel;
  426. }
  427. function getEventChannel(id) {
  428. if (id) {
  429. var eventChannel = eventChannels[id];
  430. delete eventChannels[id];
  431. return eventChannel;
  432. }
  433. return eventChannelStack.shift();
  434. }
  435. var navigateTo = {
  436. args: function args(fromArgs, toArgs) {
  437. var id = initEventChannel(fromArgs.events).id;
  438. if (fromArgs.url) {
  439. fromArgs.url = fromArgs.url + (fromArgs.url.indexOf('?') === -1 ? '?' : '&') + '__id__=' + id;
  440. }
  441. },
  442. returnValue: function returnValue(fromRes, toRes) {
  443. fromRes.eventChannel = getEventChannel();
  444. } };
  445. function findExistsPageIndex(url) {
  446. var pages = getCurrentPages();
  447. var len = pages.length;
  448. while (len--) {
  449. var page = pages[len];
  450. if (page.$page && page.$page.fullPath === url) {
  451. return len;
  452. }
  453. }
  454. return -1;
  455. }
  456. var redirectTo = {
  457. name: function name(fromArgs) {
  458. if (fromArgs.exists === 'back' && fromArgs.delta) {
  459. return 'navigateBack';
  460. }
  461. return 'redirectTo';
  462. },
  463. args: function args(fromArgs) {
  464. if (fromArgs.exists === 'back' && fromArgs.url) {
  465. var existsPageIndex = findExistsPageIndex(fromArgs.url);
  466. if (existsPageIndex !== -1) {
  467. var delta = getCurrentPages().length - 1 - existsPageIndex;
  468. if (delta > 0) {
  469. fromArgs.delta = delta;
  470. }
  471. }
  472. }
  473. } };
  474. var previewImage = {
  475. args: function args(fromArgs) {
  476. var currentIndex = parseInt(fromArgs.current);
  477. if (isNaN(currentIndex)) {
  478. return;
  479. }
  480. var urls = fromArgs.urls;
  481. if (!Array.isArray(urls)) {
  482. return;
  483. }
  484. var len = urls.length;
  485. if (!len) {
  486. return;
  487. }
  488. if (currentIndex < 0) {
  489. currentIndex = 0;
  490. } else if (currentIndex >= len) {
  491. currentIndex = len - 1;
  492. }
  493. if (currentIndex > 0) {
  494. fromArgs.current = urls[currentIndex];
  495. fromArgs.urls = urls.filter(
  496. function (item, index) {return index < currentIndex ? item !== urls[currentIndex] : true;});
  497. } else {
  498. fromArgs.current = urls[0];
  499. }
  500. return {
  501. indicator: false,
  502. loop: false };
  503. } };
  504. var UUID_KEY = '__DC_STAT_UUID';
  505. var deviceId;
  506. function addUuid(result) {
  507. deviceId = deviceId || tt.getStorageSync(UUID_KEY);
  508. if (!deviceId) {
  509. deviceId = Date.now() + '' + Math.floor(Math.random() * 1e7);
  510. tt.setStorage({
  511. key: UUID_KEY,
  512. data: deviceId });
  513. }
  514. result.deviceId = deviceId;
  515. }
  516. function addSafeAreaInsets(result) {
  517. if (result.safeArea) {
  518. var safeArea = result.safeArea;
  519. result.safeAreaInsets = {
  520. top: safeArea.top,
  521. left: safeArea.left,
  522. right: result.windowWidth - safeArea.right,
  523. bottom: result.windowHeight - safeArea.bottom };
  524. }
  525. }
  526. var getSystemInfo = {
  527. returnValue: function returnValue(result) {
  528. addUuid(result);
  529. addSafeAreaInsets(result);
  530. } };
  531. var oName = 'getUserInfo';
  532. var nName = 'getUserProfile';
  533. var getUserProfile = {
  534. name: tt.canIUse(nName) ? nName : oName };
  535. // 不支持的 API 列表
  536. var todos = [
  537. 'preloadPage',
  538. 'unPreloadPage',
  539. 'loadSubPackage'
  540. // 'createCameraContext',
  541. // 'createLivePlayerContext',
  542. // 'getSavedFileInfo',
  543. // 'createMapContext',
  544. // 'onMemoryWarning',
  545. // 'onGyroscopeChange',
  546. // 'startGyroscope',
  547. // 'stopGyroscope',
  548. // 'setScreenBrightness',
  549. // 'getScreenBrightness',
  550. // 'addPhoneContact',
  551. // 'openBluetoothAdapter',
  552. // 'startBluetoothDevicesDiscovery',
  553. // 'onBluetoothDeviceFound',
  554. // 'stopBluetoothDevicesDiscovery',
  555. // 'onBluetoothAdapterStateChange',
  556. // 'getConnectedBluetoothDevices',
  557. // 'getBluetoothDevices',
  558. // 'getBluetoothAdapterState',
  559. // 'closeBluetoothAdapter',
  560. // 'writeBLECharacteristicValue',
  561. // 'readBLECharacteristicValue',
  562. // 'onBLEConnectionStateChange',
  563. // 'onBLECharacteristicValueChange',
  564. // 'notifyBLECharacteristicValueChange',
  565. // 'getBLEDeviceServices',
  566. // 'getBLEDeviceCharacteristics',
  567. // 'createBLEConnection',
  568. // 'closeBLEConnection',
  569. // 'onBeaconServiceChange',
  570. // 'onBeaconUpdate',
  571. // 'getBeacons',
  572. // 'startBeaconDiscovery',
  573. // 'stopBeaconDiscovery',
  574. // 'showNavigationBarLoading',
  575. // 'hideNavigationBarLoading',
  576. // 'setTabBarItem',
  577. // 'setTabBarStyle',
  578. // 'hideTabBar',
  579. // 'showTabBar',
  580. // 'setTabBarBadge',
  581. // 'removeTabBarBadge',
  582. // 'showTabBarRedDot',
  583. // 'hideTabBarRedDot',
  584. // 'setBackgroundColor',
  585. // 'setBackgroundTextStyle',
  586. // 'chooseInvoiceTitle',
  587. // 'addTemplate',
  588. // 'deleteTemplate',
  589. // 'getTemplateLibraryById',
  590. // 'getTemplateLibraryList',
  591. // 'getTemplateList',
  592. // 'sendTemplateMessage',
  593. // 'setEnableDebug',
  594. // 'onWindowResize',
  595. // 'offWindowResize',
  596. // 'createOffscreenCanvas',
  597. // 'vibrate'
  598. ];
  599. // 存在兼容性的 API 列表
  600. // 头条小程序自1.35.0+支持canIUses
  601. var canIUses = [
  602. // 'createIntersectionObserver',
  603. // 'getSavedFileList',
  604. // 'removeSavedFile',
  605. // 'hideKeyboard',
  606. // 'getImageInfo',
  607. // 'createVideoContext',
  608. // 'onSocketOpen',
  609. // 'onSocketError',
  610. // 'sendSocketMessage',
  611. // 'onSocketMessage',
  612. // 'closeSocket',
  613. // 'onSocketClose',
  614. // 'getExtConfig',
  615. // 'getExtConfigSync',
  616. // 'navigateToMiniProgram',
  617. // 'navigateBackMiniProgram',
  618. // 'compressImage',
  619. // 'chooseLocation',
  620. // 'openDocument',
  621. // 'onUserCaptureScreen',
  622. // 'getBackgroundAudioManager',
  623. // 'setNavigationBarColor',
  624. ];
  625. // 需要做转换的 API 列表
  626. var protocols = {
  627. chooseImage: {
  628. args: {
  629. sizeType: false } },
  630. navigateTo: navigateTo,
  631. redirectTo: redirectTo,
  632. previewImage: previewImage,
  633. getSystemInfo: getSystemInfo,
  634. getSystemInfoSync: getSystemInfo,
  635. getUserProfile: getUserProfile,
  636. connectSocket: {
  637. args: {
  638. method: false } },
  639. chooseVideo: {
  640. args: {
  641. camera: false } },
  642. scanCode: {
  643. args: {
  644. onlyFromCamera: false,
  645. scanType: false } },
  646. startAccelerometer: {
  647. args: {
  648. interval: false } },
  649. showToast: {
  650. args: {
  651. image: false,
  652. mask: false } },
  653. showLoading: {
  654. args: {
  655. mask: false } },
  656. showModal: {
  657. args: {
  658. cancelColor: false,
  659. confirmColor: false } },
  660. showActionSheet: {
  661. args: {
  662. itemColor: false } },
  663. login: {
  664. args: {
  665. scopes: false,
  666. timeout: false } },
  667. getUserInfo: {
  668. args: {
  669. lang: false,
  670. timeout: false } },
  671. requestPayment: {
  672. name: tt.pay ? 'pay' : 'requestPayment',
  673. args: {
  674. orderInfo: tt.pay ? 'orderInfo' : 'data' } },
  675. getFileInfo: {
  676. args: {
  677. digestAlgorithm: false } } };
  678. var CALLBACKS = ['success', 'fail', 'cancel', 'complete'];
  679. function processCallback(methodName, method, returnValue) {
  680. return function (res) {
  681. return method(processReturnValue(methodName, res, returnValue));
  682. };
  683. }
  684. function processArgs(methodName, fromArgs) {var argsOption = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};var returnValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};var keepFromArgs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
  685. if (isPlainObject(fromArgs)) {// 一般 api 的参数解析
  686. var toArgs = keepFromArgs === true ? fromArgs : {}; // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值
  687. if (isFn(argsOption)) {
  688. argsOption = argsOption(fromArgs, toArgs) || {};
  689. }
  690. for (var key in fromArgs) {
  691. if (hasOwn(argsOption, key)) {
  692. var keyOption = argsOption[key];
  693. if (isFn(keyOption)) {
  694. keyOption = keyOption(fromArgs[key], fromArgs, toArgs);
  695. }
  696. if (!keyOption) {// 不支持的参数
  697. console.warn("The '".concat(methodName, "' method of platform '\u5934\u6761\u5C0F\u7A0B\u5E8F' does not support option '").concat(key, "'"));
  698. } else if (isStr(keyOption)) {// 重写参数 key
  699. toArgs[keyOption] = fromArgs[key];
  700. } else if (isPlainObject(keyOption)) {// {name:newName,value:value}可重新指定参数 key:value
  701. toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;
  702. }
  703. } else if (CALLBACKS.indexOf(key) !== -1) {
  704. if (isFn(fromArgs[key])) {
  705. toArgs[key] = processCallback(methodName, fromArgs[key], returnValue);
  706. }
  707. } else {
  708. if (!keepFromArgs) {
  709. toArgs[key] = fromArgs[key];
  710. }
  711. }
  712. }
  713. return toArgs;
  714. } else if (isFn(fromArgs)) {
  715. fromArgs = processCallback(methodName, fromArgs, returnValue);
  716. }
  717. return fromArgs;
  718. }
  719. function processReturnValue(methodName, res, returnValue) {var keepReturnValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
  720. if (isFn(protocols.returnValue)) {// 处理通用 returnValue
  721. res = protocols.returnValue(methodName, res);
  722. }
  723. return processArgs(methodName, res, returnValue, {}, keepReturnValue);
  724. }
  725. function wrapper(methodName, method) {
  726. if (hasOwn(protocols, methodName)) {
  727. var protocol = protocols[methodName];
  728. if (!protocol) {// 暂不支持的 api
  729. return function () {
  730. console.error("Platform '\u5934\u6761\u5C0F\u7A0B\u5E8F' does not support '".concat(methodName, "'."));
  731. };
  732. }
  733. return function (arg1, arg2) {// 目前 api 最多两个参数
  734. var options = protocol;
  735. if (isFn(protocol)) {
  736. options = protocol(arg1);
  737. }
  738. arg1 = processArgs(methodName, arg1, options.args, options.returnValue);
  739. var args = [arg1];
  740. if (typeof arg2 !== 'undefined') {
  741. args.push(arg2);
  742. }
  743. if (isFn(options.name)) {
  744. methodName = options.name(arg1);
  745. } else if (isStr(options.name)) {
  746. methodName = options.name;
  747. }
  748. var returnValue = tt[methodName].apply(tt, args);
  749. if (isSyncApi(methodName)) {// 同步 api
  750. return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName));
  751. }
  752. return returnValue;
  753. };
  754. }
  755. return method;
  756. }
  757. var todoApis = Object.create(null);
  758. var TODOS = [
  759. 'onTabBarMidButtonTap',
  760. 'subscribePush',
  761. 'unsubscribePush',
  762. 'onPush',
  763. 'offPush',
  764. 'share'];
  765. function createTodoApi(name) {
  766. return function todoApi(_ref)
  767. {var fail = _ref.fail,complete = _ref.complete;
  768. var res = {
  769. errMsg: "".concat(name, ":fail method '").concat(name, "' not supported") };
  770. isFn(fail) && fail(res);
  771. isFn(complete) && complete(res);
  772. };
  773. }
  774. TODOS.forEach(function (name) {
  775. todoApis[name] = createTodoApi(name);
  776. });
  777. var providers = {
  778. oauth: ['toutiao'],
  779. share: ['toutiao'],
  780. payment: ['toutiao'],
  781. push: ['toutiao'] };
  782. function getProvider(_ref2)
  783. {var service = _ref2.service,success = _ref2.success,fail = _ref2.fail,complete = _ref2.complete;
  784. var res = false;
  785. if (providers[service]) {
  786. res = {
  787. errMsg: 'getProvider:ok',
  788. service: service,
  789. provider: providers[service] };
  790. isFn(success) && success(res);
  791. } else {
  792. res = {
  793. errMsg: 'getProvider:fail service not found' };
  794. isFn(fail) && fail(res);
  795. }
  796. isFn(complete) && complete(res);
  797. }
  798. var extraApi = /*#__PURE__*/Object.freeze({
  799. __proto__: null,
  800. getProvider: getProvider });
  801. var getEmitter = function () {
  802. var Emitter;
  803. return function getUniEmitter() {
  804. if (!Emitter) {
  805. Emitter = new _vue.default();
  806. }
  807. return Emitter;
  808. };
  809. }();
  810. function apply(ctx, method, args) {
  811. return ctx[method].apply(ctx, args);
  812. }
  813. function $on() {
  814. return apply(getEmitter(), '$on', Array.prototype.slice.call(arguments));
  815. }
  816. function $off() {
  817. return apply(getEmitter(), '$off', Array.prototype.slice.call(arguments));
  818. }
  819. function $once() {
  820. return apply(getEmitter(), '$once', Array.prototype.slice.call(arguments));
  821. }
  822. function $emit() {
  823. return apply(getEmitter(), '$emit', Array.prototype.slice.call(arguments));
  824. }
  825. var eventApi = /*#__PURE__*/Object.freeze({
  826. __proto__: null,
  827. $on: $on,
  828. $off: $off,
  829. $once: $once,
  830. $emit: $emit });
  831. function createMediaQueryObserver() {
  832. var mediaQueryObserver = {};var _tt$getSystemInfoSync2 =
  833. tt.getSystemInfoSync(),windowWidth = _tt$getSystemInfoSync2.windowWidth,windowHeight = _tt$getSystemInfoSync2.windowHeight;
  834. var orientation = windowWidth < windowHeight ? 'portrait' : 'landscape';
  835. mediaQueryObserver.observe = function (options, callback) {
  836. var matches = true;
  837. for (var item in options) {
  838. var itemValue = item === 'orientation' ? options[item] : Number(options[item]);
  839. if (options[item] !== '') {
  840. if (item === 'width') {
  841. if (itemValue === windowWidth) {
  842. matches = true;
  843. } else {
  844. matches = false;
  845. callback(matches);
  846. return matches;
  847. }
  848. }
  849. if (item === 'minWidth') {
  850. if (windowWidth >= itemValue) {
  851. matches = true;
  852. } else {
  853. matches = false;
  854. callback(matches);
  855. return matches;
  856. }
  857. }
  858. if (item === 'maxWidth') {
  859. if (windowWidth <= itemValue) {
  860. matches = true;
  861. } else {
  862. matches = false;
  863. callback(matches);
  864. return matches;
  865. }
  866. }
  867. if (item === 'height') {
  868. if (itemValue === windowHeight) {
  869. matches = true;
  870. } else {
  871. matches = false;
  872. callback(matches);
  873. return matches;
  874. }
  875. }
  876. if (item === 'minHeight') {
  877. if (windowHeight >= itemValue) {
  878. matches = true;
  879. } else {
  880. matches = false;
  881. callback(matches);
  882. return matches;
  883. }
  884. }
  885. if (item === 'maxHeight') {
  886. if (windowHeight <= itemValue) {
  887. matches = true;
  888. } else {
  889. matches = false;
  890. callback(matches);
  891. return matches;
  892. }
  893. }
  894. if (item === 'orientation') {
  895. if (options[item] === orientation) {
  896. matches = true;
  897. } else {
  898. matches = false;
  899. callback(matches);
  900. return matches;
  901. }
  902. }
  903. }
  904. }
  905. callback(matches);
  906. return matches;
  907. };
  908. mediaQueryObserver.disconnect = function () {
  909. };
  910. return mediaQueryObserver;
  911. }
  912. var api = /*#__PURE__*/Object.freeze({
  913. __proto__: null,
  914. createMediaQueryObserver: createMediaQueryObserver });
  915. var MPPage = Page;
  916. var MPComponent = Component;
  917. var customizeRE = /:/g;
  918. var customize = cached(function (str) {
  919. return camelize(str.replace(customizeRE, '-'));
  920. });
  921. function initTriggerEvent(mpInstance) {
  922. var oldTriggerEvent = mpInstance.triggerEvent;
  923. mpInstance.triggerEvent = function (event) {for (var _len4 = arguments.length, args = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {args[_key4 - 1] = arguments[_key4];}
  924. return oldTriggerEvent.apply(mpInstance, [customize(event)].concat(args));
  925. };
  926. }
  927. function initHook(name, options) {
  928. var oldHook = options[name];
  929. if (!oldHook) {
  930. options[name] = function () {
  931. initTriggerEvent(this);
  932. };
  933. } else {
  934. options[name] = function () {
  935. initTriggerEvent(this);for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {args[_key5] = arguments[_key5];}
  936. return oldHook.apply(this, args);
  937. };
  938. }
  939. }
  940. if (!MPPage.__$wrappered) {
  941. MPPage.__$wrappered = true;
  942. Page = function Page() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  943. initHook('onLoad', options);
  944. return MPPage(options);
  945. };
  946. Page.after = MPPage.after;
  947. Component = function Component() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  948. initHook('created', options);
  949. return MPComponent(options);
  950. };
  951. }
  952. var PAGE_EVENT_HOOKS = [
  953. 'onPullDownRefresh',
  954. 'onReachBottom',
  955. 'onAddToFavorites',
  956. 'onShareTimeline',
  957. 'onShareAppMessage',
  958. 'onPageScroll',
  959. 'onResize',
  960. 'onTabItemTap'];
  961. function initMocks(vm, mocks) {
  962. var mpInstance = vm.$mp[vm.mpType];
  963. mocks.forEach(function (mock) {
  964. if (hasOwn(mpInstance, mock)) {
  965. vm[mock] = mpInstance[mock];
  966. }
  967. });
  968. }
  969. function hasHook(hook, vueOptions) {
  970. if (!vueOptions) {
  971. return true;
  972. }
  973. if (_vue.default.options && Array.isArray(_vue.default.options[hook])) {
  974. return true;
  975. }
  976. vueOptions = vueOptions.default || vueOptions;
  977. if (isFn(vueOptions)) {
  978. if (isFn(vueOptions.extendOptions[hook])) {
  979. return true;
  980. }
  981. if (vueOptions.super &&
  982. vueOptions.super.options &&
  983. Array.isArray(vueOptions.super.options[hook])) {
  984. return true;
  985. }
  986. return false;
  987. }
  988. if (isFn(vueOptions[hook])) {
  989. return true;
  990. }
  991. var mixins = vueOptions.mixins;
  992. if (Array.isArray(mixins)) {
  993. return !!mixins.find(function (mixin) {return hasHook(hook, mixin);});
  994. }
  995. }
  996. function initHooks(mpOptions, hooks, vueOptions) {
  997. hooks.forEach(function (hook) {
  998. if (hasHook(hook, vueOptions)) {
  999. mpOptions[hook] = function (args) {
  1000. return this.$vm && this.$vm.__call_hook(hook, args);
  1001. };
  1002. }
  1003. });
  1004. }
  1005. function initVueComponent(Vue, vueOptions) {
  1006. vueOptions = vueOptions.default || vueOptions;
  1007. var VueComponent;
  1008. if (isFn(vueOptions)) {
  1009. VueComponent = vueOptions;
  1010. } else {
  1011. VueComponent = Vue.extend(vueOptions);
  1012. }
  1013. vueOptions = VueComponent.options;
  1014. return [VueComponent, vueOptions];
  1015. }
  1016. function initSlots(vm, vueSlots) {
  1017. if (Array.isArray(vueSlots) && vueSlots.length) {
  1018. var $slots = Object.create(null);
  1019. vueSlots.forEach(function (slotName) {
  1020. $slots[slotName] = true;
  1021. });
  1022. vm.$scopedSlots = vm.$slots = $slots;
  1023. }
  1024. }
  1025. function initVueIds(vueIds, mpInstance) {
  1026. vueIds = (vueIds || '').split(',');
  1027. var len = vueIds.length;
  1028. if (len === 1) {
  1029. mpInstance._$vueId = vueIds[0];
  1030. } else if (len === 2) {
  1031. mpInstance._$vueId = vueIds[0];
  1032. mpInstance._$vuePid = vueIds[1];
  1033. }
  1034. }
  1035. function initData(vueOptions, context) {
  1036. var data = vueOptions.data || {};
  1037. var methods = vueOptions.methods || {};
  1038. if (typeof data === 'function') {
  1039. try {
  1040. data = data.call(context); // 支持 Vue.prototype 上挂的数据
  1041. } catch (e) {
  1042. if (Object({"NODE_ENV":"development","VUE_APP_NAME":"鄂州市红十字会","VUE_APP_PLATFORM":"mp-toutiao","BASE_URL":"/"}).VUE_APP_DEBUG) {
  1043. console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data);
  1044. }
  1045. }
  1046. } else {
  1047. try {
  1048. // 对 data 格式化
  1049. data = JSON.parse(JSON.stringify(data));
  1050. } catch (e) {}
  1051. }
  1052. if (!isPlainObject(data)) {
  1053. data = {};
  1054. }
  1055. Object.keys(methods).forEach(function (methodName) {
  1056. if (context.__lifecycle_hooks__.indexOf(methodName) === -1 && !hasOwn(data, methodName)) {
  1057. data[methodName] = methods[methodName];
  1058. }
  1059. });
  1060. return data;
  1061. }
  1062. var PROP_TYPES = [String, Number, Boolean, Object, Array, null];
  1063. function createObserver(name) {
  1064. return function observer(newVal, oldVal) {
  1065. if (this.$vm) {
  1066. this.$vm[name] = newVal; // 为了触发其他非 render watcher
  1067. }
  1068. };
  1069. }
  1070. function initBehaviors(vueOptions, initBehavior) {
  1071. var vueBehaviors = vueOptions.behaviors;
  1072. var vueExtends = vueOptions.extends;
  1073. var vueMixins = vueOptions.mixins;
  1074. var vueProps = vueOptions.props;
  1075. if (!vueProps) {
  1076. vueOptions.props = vueProps = [];
  1077. }
  1078. var behaviors = [];
  1079. if (Array.isArray(vueBehaviors)) {
  1080. vueBehaviors.forEach(function (behavior) {
  1081. behaviors.push(behavior.replace('uni://', "tt".concat("://")));
  1082. if (behavior === 'uni://form-field') {
  1083. if (Array.isArray(vueProps)) {
  1084. vueProps.push('name');
  1085. vueProps.push('value');
  1086. } else {
  1087. vueProps.name = {
  1088. type: String,
  1089. default: '' };
  1090. vueProps.value = {
  1091. type: [String, Number, Boolean, Array, Object, Date],
  1092. default: '' };
  1093. }
  1094. }
  1095. });
  1096. }
  1097. if (isPlainObject(vueExtends) && vueExtends.props) {
  1098. behaviors.push(
  1099. initBehavior({
  1100. properties: initProperties(vueExtends.props, true) }));
  1101. }
  1102. if (Array.isArray(vueMixins)) {
  1103. vueMixins.forEach(function (vueMixin) {
  1104. if (isPlainObject(vueMixin) && vueMixin.props) {
  1105. behaviors.push(
  1106. initBehavior({
  1107. properties: initProperties(vueMixin.props, true) }));
  1108. }
  1109. });
  1110. }
  1111. return behaviors;
  1112. }
  1113. function parsePropType(key, type, defaultValue, file) {
  1114. // [String]=>String
  1115. if (Array.isArray(type) && type.length === 1) {
  1116. return type[0];
  1117. }
  1118. return type;
  1119. }
  1120. function initProperties(props) {var isBehavior = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
  1121. var properties = {};
  1122. if (!isBehavior) {
  1123. properties.vueId = {
  1124. type: String,
  1125. value: '' };
  1126. // 用于字节跳动小程序模拟抽象节点
  1127. properties.generic = {
  1128. type: Object,
  1129. value: null };
  1130. // scopedSlotsCompiler auto
  1131. properties.scopedSlotsCompiler = {
  1132. type: String,
  1133. value: '' };
  1134. properties.vueSlots = { // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots
  1135. type: null,
  1136. value: [],
  1137. observer: function observer(newVal, oldVal) {
  1138. var $slots = Object.create(null);
  1139. newVal.forEach(function (slotName) {
  1140. $slots[slotName] = true;
  1141. });
  1142. this.setData({
  1143. $slots: $slots });
  1144. } };
  1145. }
  1146. if (Array.isArray(props)) {// ['title']
  1147. props.forEach(function (key) {
  1148. properties[key] = {
  1149. type: null,
  1150. observer: createObserver(key) };
  1151. });
  1152. } else if (isPlainObject(props)) {// {title:{type:String,default:''},content:String}
  1153. Object.keys(props).forEach(function (key) {
  1154. var opts = props[key];
  1155. if (isPlainObject(opts)) {// title:{type:String,default:''}
  1156. var value = opts.default;
  1157. if (isFn(value)) {
  1158. value = value();
  1159. }
  1160. opts.type = parsePropType(key, opts.type);
  1161. properties[key] = {
  1162. type: PROP_TYPES.indexOf(opts.type) !== -1 ? opts.type : null,
  1163. value: value,
  1164. observer: createObserver(key) };
  1165. } else {// content:String
  1166. var type = parsePropType(key, opts);
  1167. properties[key] = {
  1168. type: PROP_TYPES.indexOf(type) !== -1 ? type : null,
  1169. observer: createObserver(key) };
  1170. }
  1171. });
  1172. }
  1173. return properties;
  1174. }
  1175. function wrapper$1(event) {
  1176. // TODO 又得兼容 mpvue 的 mp 对象
  1177. try {
  1178. event.mp = JSON.parse(JSON.stringify(event));
  1179. } catch (e) {}
  1180. event.stopPropagation = noop;
  1181. event.preventDefault = noop;
  1182. event.target = event.target || {};
  1183. if (!hasOwn(event, 'detail')) {
  1184. event.detail = {};
  1185. }
  1186. if (hasOwn(event, 'markerId')) {
  1187. event.detail = typeof event.detail === 'object' ? event.detail : {};
  1188. event.detail.markerId = event.markerId;
  1189. }
  1190. if (isPlainObject(event.detail)) {
  1191. event.target = Object.assign({}, event.target, event.detail);
  1192. }
  1193. return event;
  1194. }
  1195. function getExtraValue(vm, dataPathsArray) {
  1196. var context = vm;
  1197. dataPathsArray.forEach(function (dataPathArray) {
  1198. var dataPath = dataPathArray[0];
  1199. var value = dataPathArray[2];
  1200. if (dataPath || typeof value !== 'undefined') {// ['','',index,'disable']
  1201. var propPath = dataPathArray[1];
  1202. var valuePath = dataPathArray[3];
  1203. var vFor;
  1204. if (Number.isInteger(dataPath)) {
  1205. vFor = dataPath;
  1206. } else if (!dataPath) {
  1207. vFor = context;
  1208. } else if (typeof dataPath === 'string' && dataPath) {
  1209. if (dataPath.indexOf('#s#') === 0) {
  1210. vFor = dataPath.substr(3);
  1211. } else {
  1212. vFor = vm.__get_value(dataPath, context);
  1213. }
  1214. }
  1215. if (Number.isInteger(vFor)) {
  1216. context = value;
  1217. } else if (!propPath) {
  1218. context = vFor[value];
  1219. } else {
  1220. if (Array.isArray(vFor)) {
  1221. context = vFor.find(function (vForItem) {
  1222. return vm.__get_value(propPath, vForItem) === value;
  1223. });
  1224. } else if (isPlainObject(vFor)) {
  1225. context = Object.keys(vFor).find(function (vForKey) {
  1226. return vm.__get_value(propPath, vFor[vForKey]) === value;
  1227. });
  1228. } else {
  1229. console.error('v-for 暂不支持循环数据:', vFor);
  1230. }
  1231. }
  1232. if (valuePath) {
  1233. context = vm.__get_value(valuePath, context);
  1234. }
  1235. }
  1236. });
  1237. return context;
  1238. }
  1239. function processEventExtra(vm, extra, event) {
  1240. var extraObj = {};
  1241. if (Array.isArray(extra) && extra.length) {
  1242. /**
  1243. *[
  1244. * ['data.items', 'data.id', item.data.id],
  1245. * ['metas', 'id', meta.id]
  1246. *],
  1247. *[
  1248. * ['data.items', 'data.id', item.data.id],
  1249. * ['metas', 'id', meta.id]
  1250. *],
  1251. *'test'
  1252. */
  1253. extra.forEach(function (dataPath, index) {
  1254. if (typeof dataPath === 'string') {
  1255. if (!dataPath) {// model,prop.sync
  1256. extraObj['$' + index] = vm;
  1257. } else {
  1258. if (dataPath === '$event') {// $event
  1259. extraObj['$' + index] = event;
  1260. } else if (dataPath === 'arguments') {
  1261. if (event.detail && event.detail.__args__) {
  1262. extraObj['$' + index] = event.detail.__args__;
  1263. } else {
  1264. extraObj['$' + index] = [event];
  1265. }
  1266. } else if (dataPath.indexOf('$event.') === 0) {// $event.target.value
  1267. extraObj['$' + index] = vm.__get_value(dataPath.replace('$event.', ''), event);
  1268. } else {
  1269. extraObj['$' + index] = vm.__get_value(dataPath);
  1270. }
  1271. }
  1272. } else {
  1273. extraObj['$' + index] = getExtraValue(vm, dataPath);
  1274. }
  1275. });
  1276. }
  1277. return extraObj;
  1278. }
  1279. function getObjByArray(arr) {
  1280. var obj = {};
  1281. for (var i = 1; i < arr.length; i++) {
  1282. var element = arr[i];
  1283. obj[element[0]] = element[1];
  1284. }
  1285. return obj;
  1286. }
  1287. function processEventArgs(vm, event) {var args = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];var extra = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];var isCustom = arguments.length > 4 ? arguments[4] : undefined;var methodName = arguments.length > 5 ? arguments[5] : undefined;
  1288. var isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象
  1289. if (isCustom) {// 自定义事件
  1290. isCustomMPEvent = event.currentTarget &&
  1291. event.currentTarget.dataset &&
  1292. event.currentTarget.dataset.comType === 'wx';
  1293. if (!args.length) {// 无参数,直接传入 event 或 detail 数组
  1294. if (isCustomMPEvent) {
  1295. return [event];
  1296. }
  1297. return event.detail.__args__ || event.detail;
  1298. }
  1299. }
  1300. var extraObj = processEventExtra(vm, extra, event);
  1301. var ret = [];
  1302. args.forEach(function (arg) {
  1303. if (arg === '$event') {
  1304. if (methodName === '__set_model' && !isCustom) {// input v-model value
  1305. ret.push(event.target.value);
  1306. } else {
  1307. if (isCustom && !isCustomMPEvent) {
  1308. ret.push(event.detail.__args__[0]);
  1309. } else {// wxcomponent 组件或内置组件
  1310. ret.push(event);
  1311. }
  1312. }
  1313. } else {
  1314. if (Array.isArray(arg) && arg[0] === 'o') {
  1315. ret.push(getObjByArray(arg));
  1316. } else if (typeof arg === 'string' && hasOwn(extraObj, arg)) {
  1317. ret.push(extraObj[arg]);
  1318. } else {
  1319. ret.push(arg);
  1320. }
  1321. }
  1322. });
  1323. return ret;
  1324. }
  1325. var ONCE = '~';
  1326. var CUSTOM = '^';
  1327. function isMatchEventType(eventType, optType) {
  1328. return eventType === optType ||
  1329. optType === 'regionchange' && (
  1330. eventType === 'begin' ||
  1331. eventType === 'end');
  1332. }
  1333. function getContextVm(vm) {
  1334. var $parent = vm.$parent;
  1335. // 父组件是 scoped slots 或者其他自定义组件时继续查找
  1336. while ($parent && $parent.$parent && ($parent.$options.generic || $parent.$parent.$options.generic || $parent.$scope._$vuePid)) {
  1337. $parent = $parent.$parent;
  1338. }
  1339. return $parent && $parent.$parent;
  1340. }
  1341. function handleEvent(event) {var _this2 = this;
  1342. event = wrapper$1(event);
  1343. // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]]
  1344. var dataset = (event.currentTarget || event.target).dataset;
  1345. if (!dataset) {
  1346. return console.warn('事件信息不存在');
  1347. }
  1348. var eventOpts = dataset.eventOpts || dataset['event-opts']; // 支付宝 web-view 组件 dataset 非驼峰
  1349. if (!eventOpts) {
  1350. return console.warn('事件信息不存在');
  1351. }
  1352. // [['handle',[1,2,a]],['handle1',[1,2,a]]]
  1353. var eventType = event.type;
  1354. var ret = [];
  1355. eventOpts.forEach(function (eventOpt) {
  1356. var type = eventOpt[0];
  1357. var eventsArray = eventOpt[1];
  1358. var isCustom = type.charAt(0) === CUSTOM;
  1359. type = isCustom ? type.slice(1) : type;
  1360. var isOnce = type.charAt(0) === ONCE;
  1361. type = isOnce ? type.slice(1) : type;
  1362. if (eventsArray && isMatchEventType(eventType, type)) {
  1363. eventsArray.forEach(function (eventArray) {
  1364. var methodName = eventArray[0];
  1365. if (methodName) {
  1366. var handlerCtx = _this2.$vm;
  1367. if (handlerCtx.$options.generic) {// mp-weixin,mp-toutiao 抽象节点模拟 scoped slots
  1368. handlerCtx = getContextVm(handlerCtx) || handlerCtx;
  1369. }
  1370. if (methodName === '$emit') {
  1371. handlerCtx.$emit.apply(handlerCtx,
  1372. processEventArgs(
  1373. _this2.$vm,
  1374. event,
  1375. eventArray[1],
  1376. eventArray[2],
  1377. isCustom,
  1378. methodName));
  1379. return;
  1380. }
  1381. var handler = handlerCtx[methodName];
  1382. if (!isFn(handler)) {
  1383. throw new Error(" _vm.".concat(methodName, " is not a function"));
  1384. }
  1385. if (isOnce) {
  1386. if (handler.once) {
  1387. return;
  1388. }
  1389. handler.once = true;
  1390. }
  1391. var params = processEventArgs(
  1392. _this2.$vm,
  1393. event,
  1394. eventArray[1],
  1395. eventArray[2],
  1396. isCustom,
  1397. methodName);
  1398. params = Array.isArray(params) ? params : [];
  1399. // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据
  1400. if (/=\s*\S+\.eventParams\s*\|\|\s*\S+\[['"]event-params['"]\]/.test(handler.toString())) {
  1401. // eslint-disable-next-line no-sparse-arrays
  1402. params = params.concat([,,,,,,,,,, event]);
  1403. }
  1404. ret.push(handler.apply(handlerCtx, params));
  1405. }
  1406. });
  1407. }
  1408. });
  1409. if (
  1410. eventType === 'input' &&
  1411. ret.length === 1 &&
  1412. typeof ret[0] !== 'undefined')
  1413. {
  1414. return ret[0];
  1415. }
  1416. }
  1417. var hooks = [
  1418. 'onShow',
  1419. 'onHide',
  1420. 'onError',
  1421. 'onPageNotFound',
  1422. 'onThemeChange',
  1423. 'onUnhandledRejection'];
  1424. function initEventChannel$1() {
  1425. _vue.default.prototype.getOpenerEventChannel = function () {
  1426. if (!this.__eventChannel__) {
  1427. this.__eventChannel__ = new EventChannel();
  1428. }
  1429. return this.__eventChannel__;
  1430. };
  1431. var callHook = _vue.default.prototype.__call_hook;
  1432. _vue.default.prototype.__call_hook = function (hook, args) {
  1433. if (hook === 'onLoad' && args && args.__id__) {
  1434. this.__eventChannel__ = getEventChannel(args.__id__);
  1435. delete args.__id__;
  1436. }
  1437. return callHook.call(this, hook, args);
  1438. };
  1439. }
  1440. function initScopedSlotsParams() {
  1441. var center = {};
  1442. var parents = {};
  1443. _vue.default.prototype.$hasScopedSlotsParams = function (vueId) {
  1444. var has = center[vueId];
  1445. if (!has) {
  1446. parents[vueId] = this;
  1447. this.$on('hook:destory', function () {
  1448. delete parents[vueId];
  1449. });
  1450. }
  1451. return has;
  1452. };
  1453. _vue.default.prototype.$getScopedSlotsParams = function (vueId, name, key) {
  1454. var data = center[vueId];
  1455. if (data) {
  1456. var object = data[name] || {};
  1457. return key ? object[key] : object;
  1458. } else {
  1459. parents[vueId] = this;
  1460. this.$on('hook:destory', function () {
  1461. delete parents[vueId];
  1462. });
  1463. }
  1464. };
  1465. _vue.default.prototype.$setScopedSlotsParams = function (name, value) {
  1466. var vueIds = this.$options.propsData.vueId;
  1467. if (vueIds) {
  1468. var vueId = vueIds.split(',')[0];
  1469. var object = center[vueId] = center[vueId] || {};
  1470. object[name] = value;
  1471. if (parents[vueId]) {
  1472. parents[vueId].$forceUpdate();
  1473. }
  1474. }
  1475. };
  1476. _vue.default.mixin({
  1477. destroyed: function destroyed() {
  1478. var propsData = this.$options.propsData;
  1479. var vueId = propsData && propsData.vueId;
  1480. if (vueId) {
  1481. delete center[vueId];
  1482. delete parents[vueId];
  1483. }
  1484. } });
  1485. }
  1486. function parseBaseApp(vm, _ref3)
  1487. {var mocks = _ref3.mocks,initRefs = _ref3.initRefs;
  1488. initEventChannel$1();
  1489. {
  1490. initScopedSlotsParams();
  1491. }
  1492. if (vm.$options.store) {
  1493. _vue.default.prototype.$store = vm.$options.store;
  1494. }
  1495. uniIdMixin(_vue.default);
  1496. _vue.default.prototype.mpHost = "mp-toutiao";
  1497. _vue.default.mixin({
  1498. beforeCreate: function beforeCreate() {
  1499. if (!this.$options.mpType) {
  1500. return;
  1501. }
  1502. this.mpType = this.$options.mpType;
  1503. this.$mp = _defineProperty({
  1504. data: {} },
  1505. this.mpType, this.$options.mpInstance);
  1506. this.$scope = this.$options.mpInstance;
  1507. delete this.$options.mpType;
  1508. delete this.$options.mpInstance;
  1509. if (this.mpType === 'page' && typeof getApp === 'function') {// hack vue-i18n
  1510. var app = getApp();
  1511. if (app.$vm && app.$vm.$i18n) {
  1512. this._i18n = app.$vm.$i18n;
  1513. }
  1514. }
  1515. if (this.mpType !== 'app') {
  1516. initRefs(this);
  1517. initMocks(this, mocks);
  1518. }
  1519. } });
  1520. var appOptions = {
  1521. onLaunch: function onLaunch(args) {
  1522. if (this.$vm) {// 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前
  1523. return;
  1524. }
  1525. this.$vm = vm;
  1526. this.$vm.$mp = {
  1527. app: this };
  1528. this.$vm.$scope = this;
  1529. // vm 上也挂载 globalData
  1530. this.$vm.globalData = this.globalData;
  1531. this.$vm._isMounted = true;
  1532. this.$vm.__call_hook('mounted', args);
  1533. this.$vm.__call_hook('onLaunch', args);
  1534. } };
  1535. // 兼容旧版本 globalData
  1536. appOptions.globalData = vm.$options.globalData || {};
  1537. // 将 methods 中的方法挂在 getApp() 中
  1538. var methods = vm.$options.methods;
  1539. if (methods) {
  1540. Object.keys(methods).forEach(function (name) {
  1541. appOptions[name] = methods[name];
  1542. });
  1543. }
  1544. initHooks(appOptions, hooks);
  1545. return appOptions;
  1546. }
  1547. function findVmByVueId(vm, vuePid) {
  1548. var $children = vm.$children;
  1549. // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200)
  1550. for (var i = $children.length - 1; i >= 0; i--) {
  1551. var childVm = $children[i];
  1552. if (childVm.$scope._$vueId === vuePid) {
  1553. return childVm;
  1554. }
  1555. }
  1556. // 反向递归查找
  1557. var parentVm;
  1558. for (var _i = $children.length - 1; _i >= 0; _i--) {
  1559. parentVm = findVmByVueId($children[_i], vuePid);
  1560. if (parentVm) {
  1561. return parentVm;
  1562. }
  1563. }
  1564. }
  1565. function initBehavior(options) {
  1566. return Behavior(options);
  1567. }
  1568. function handleLink(event) {var _ref4 =
  1569. event.detail || event.value,vuePid = _ref4.vuePid,vueOptions = _ref4.vueOptions; // detail 是微信,value 是百度(dipatch)
  1570. var parentVm;
  1571. if (vuePid) {
  1572. parentVm = findVmByVueId(this.$vm, vuePid);
  1573. }
  1574. if (!parentVm) {
  1575. parentVm = this.$vm;
  1576. }
  1577. vueOptions.parent = parentVm;
  1578. }
  1579. var mocks = ['__route__', '__webviewId__', '__nodeid__', '__nodeId__'];
  1580. function isPage() {
  1581. return this.__nodeid__ === 0 || this.__nodeId__ === 0;
  1582. }
  1583. function initRefs(vm) {
  1584. var mpInstance = vm.$scope;
  1585. /* eslint-disable no-undef */
  1586. var minorVersion = parseInt(tt.getSystemInfoSync().SDKVersion.split('.')[1]);
  1587. if (minorVersion > 16) {
  1588. Object.defineProperty(vm, '$refs', {
  1589. get: function get() {
  1590. var $refs = {};
  1591. var components = mpInstance.selectAllComponents('.vue-ref');
  1592. components.forEach(function (component) {
  1593. var ref = component.dataset.ref;
  1594. $refs[ref] = component.$vm || component;
  1595. });
  1596. var forComponents = mpInstance.selectAllComponents('.vue-ref-in-for');
  1597. forComponents.forEach(function (component) {
  1598. var ref = component.dataset.ref;
  1599. if (!$refs[ref]) {
  1600. $refs[ref] = [];
  1601. }
  1602. $refs[ref].push(component.$vm || component);
  1603. });
  1604. return $refs;
  1605. } });
  1606. } else {
  1607. mpInstance.selectAllComponents('.vue-ref', function (components) {
  1608. components.forEach(function (component) {
  1609. var ref = component.dataset.ref;
  1610. vm.$refs[ref] = component.$vm || component;
  1611. });
  1612. });
  1613. mpInstance.selectAllComponents('.vue-ref-in-for', function (forComponents) {
  1614. forComponents.forEach(function (component) {
  1615. var ref = component.dataset.ref;
  1616. if (!vm.$refs[ref]) {
  1617. vm.$refs[ref] = [];
  1618. }
  1619. vm.$refs[ref].push(component.$vm || component);
  1620. });
  1621. });
  1622. }
  1623. }
  1624. var instances = Object.create(null);
  1625. function initRelation(_ref5)
  1626. {var vuePid = _ref5.vuePid,mpInstance = _ref5.mpInstance;
  1627. // 头条 triggerEvent 后,接收事件时机特别晚,已经到了 ready 之后
  1628. var nodeId = (mpInstance.__nodeId__ || mpInstance.__nodeid__) + '';
  1629. var webviewId = mpInstance.__webviewId__ + '';
  1630. instances[webviewId + '_' + nodeId] = mpInstance.$vm;
  1631. this.triggerEvent('__l', {
  1632. vuePid: vuePid,
  1633. nodeId: nodeId,
  1634. webviewId: webviewId });
  1635. }
  1636. function handleLink$1(_ref6)
  1637. {var _ref6$detail = _ref6.detail,vuePid = _ref6$detail.vuePid,nodeId = _ref6$detail.nodeId,webviewId = _ref6$detail.webviewId;
  1638. var vm = instances[webviewId + '_' + nodeId];
  1639. if (!vm) {
  1640. return;
  1641. }
  1642. var parentVm;
  1643. if (vuePid) {
  1644. parentVm = findVmByVueId(this.$vm, vuePid);
  1645. }
  1646. if (!parentVm) {
  1647. parentVm = this.$vm;
  1648. }
  1649. vm.$parent = parentVm;
  1650. vm.$root = parentVm.$root;
  1651. parentVm.$children.push(vm);
  1652. vm.__call_hook('created');
  1653. vm.__call_hook('beforeMount');
  1654. vm._isMounted = true;
  1655. vm.__call_hook('mounted');
  1656. vm.__call_hook('onReady');
  1657. }
  1658. function parseApp(vm) {
  1659. _vue.default.prototype._$fallback = true; // 降级(调整原 vue 的部分生命周期,如 created,beforeMount,inject,provide)
  1660. _vue.default.mixin({
  1661. created: function created() {// 处理 injections,头条 triggerEvent 是异步,且触发时机很慢,故延迟 relation 设置
  1662. if (this.mpType !== 'app') {
  1663. if (
  1664. this.mpType === 'page' &&
  1665. !this.$scope.route &&
  1666. this.$scope.__route__)
  1667. {
  1668. this.$scope.route = this.$scope.__route__;
  1669. }
  1670. initRefs(this);
  1671. this.__init_injections(this);
  1672. this.__init_provide(this);
  1673. }
  1674. } });
  1675. return parseBaseApp(vm, {
  1676. mocks: mocks,
  1677. initRefs: function initRefs() {} // attached 时,可能查询不到
  1678. });
  1679. }
  1680. function createApp(vm) {
  1681. App(parseApp(vm));
  1682. return vm;
  1683. }
  1684. var encodeReserveRE = /[!'()*]/g;
  1685. var encodeReserveReplacer = function encodeReserveReplacer(c) {return '%' + c.charCodeAt(0).toString(16);};
  1686. var commaRE = /%2C/g;
  1687. // fixed encodeURIComponent which is more conformant to RFC3986:
  1688. // - escapes [!'()*]
  1689. // - preserve commas
  1690. var encode = function encode(str) {return encodeURIComponent(str).
  1691. replace(encodeReserveRE, encodeReserveReplacer).
  1692. replace(commaRE, ',');};
  1693. function stringifyQuery(obj) {var encodeStr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : encode;
  1694. var res = obj ? Object.keys(obj).map(function (key) {
  1695. var val = obj[key];
  1696. if (val === undefined) {
  1697. return '';
  1698. }
  1699. if (val === null) {
  1700. return encodeStr(key);
  1701. }
  1702. if (Array.isArray(val)) {
  1703. var result = [];
  1704. val.forEach(function (val2) {
  1705. if (val2 === undefined) {
  1706. return;
  1707. }
  1708. if (val2 === null) {
  1709. result.push(encodeStr(key));
  1710. } else {
  1711. result.push(encodeStr(key) + '=' + encodeStr(val2));
  1712. }
  1713. });
  1714. return result.join('&');
  1715. }
  1716. return encodeStr(key) + '=' + encodeStr(val);
  1717. }).filter(function (x) {return x.length > 0;}).join('&') : null;
  1718. return res ? "?".concat(res) : '';
  1719. }
  1720. function parseBaseComponent(vueComponentOptions)
  1721. {var _ref7 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},isPage = _ref7.isPage,initRelation = _ref7.initRelation;var _initVueComponent =
  1722. initVueComponent(_vue.default, vueComponentOptions),_initVueComponent2 = _slicedToArray(_initVueComponent, 2),VueComponent = _initVueComponent2[0],vueOptions = _initVueComponent2[1];
  1723. var options = _objectSpread({
  1724. multipleSlots: true,
  1725. addGlobalClass: true },
  1726. vueOptions.options || {});
  1727. var componentOptions = {
  1728. options: options,
  1729. data: initData(vueOptions, _vue.default.prototype),
  1730. behaviors: initBehaviors(vueOptions, initBehavior),
  1731. properties: initProperties(vueOptions.props, false, vueOptions.__file),
  1732. lifetimes: {
  1733. attached: function attached() {
  1734. var properties = this.properties;
  1735. var options = {
  1736. mpType: isPage.call(this) ? 'page' : 'component',
  1737. mpInstance: this,
  1738. propsData: properties };
  1739. initVueIds(properties.vueId, this);
  1740. // 处理父子关系
  1741. initRelation.call(this, {
  1742. vuePid: this._$vuePid,
  1743. vueOptions: options });
  1744. // 初始化 vue 实例
  1745. this.$vm = new VueComponent(options);
  1746. // 处理$slots,$scopedSlots(暂不支持动态变化$slots)
  1747. initSlots(this.$vm, properties.vueSlots);
  1748. // 触发首次 setData
  1749. this.$vm.$mount();
  1750. },
  1751. ready: function ready() {
  1752. // 当组件 props 默认值为 true,初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发
  1753. // https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800
  1754. if (this.$vm) {
  1755. this.$vm._isMounted = true;
  1756. this.$vm.__call_hook('mounted');
  1757. this.$vm.__call_hook('onReady');
  1758. }
  1759. },
  1760. detached: function detached() {
  1761. this.$vm && this.$vm.$destroy();
  1762. } },
  1763. pageLifetimes: {
  1764. show: function show(args) {
  1765. this.$vm && this.$vm.__call_hook('onPageShow', args);
  1766. },
  1767. hide: function hide() {
  1768. this.$vm && this.$vm.__call_hook('onPageHide');
  1769. },
  1770. resize: function resize(size) {
  1771. this.$vm && this.$vm.__call_hook('onPageResize', size);
  1772. } },
  1773. methods: {
  1774. __l: handleLink,
  1775. __e: handleEvent } };
  1776. // externalClasses
  1777. if (vueOptions.externalClasses) {
  1778. componentOptions.externalClasses = vueOptions.externalClasses;
  1779. }
  1780. if (Array.isArray(vueOptions.wxsCallMethods)) {
  1781. vueOptions.wxsCallMethods.forEach(function (callMethod) {
  1782. componentOptions.methods[callMethod] = function (args) {
  1783. return this.$vm[callMethod](args);
  1784. };
  1785. });
  1786. }
  1787. if (isPage) {
  1788. return componentOptions;
  1789. }
  1790. return [componentOptions, VueComponent];
  1791. }
  1792. var components = [];
  1793. function parseComponent(vueOptions) {var _parseBaseComponent =
  1794. parseBaseComponent(vueOptions),_parseBaseComponent2 = _slicedToArray(_parseBaseComponent, 2),componentOptions = _parseBaseComponent2[0],VueComponent = _parseBaseComponent2[1];
  1795. // 基础库 2.0 以上 attached 顺序错乱,按照 created 顺序强制纠正
  1796. componentOptions.lifetimes.created = function created() {
  1797. components.push(this);
  1798. };
  1799. componentOptions.lifetimes.attached = function attached() {
  1800. this.__lifetimes_attached = function () {
  1801. var properties = this.properties;
  1802. var options = {
  1803. mpType: isPage.call(this) ? 'page' : 'component',
  1804. mpInstance: this,
  1805. propsData: properties };
  1806. initVueIds(properties.vueId, this);
  1807. // 初始化 vue 实例
  1808. this.$vm = new VueComponent(options);
  1809. // 处理$slots,$scopedSlots(暂不支持动态变化$slots)
  1810. initSlots(this.$vm, properties.vueSlots);
  1811. // 处理父子关系
  1812. initRelation.call(this, {
  1813. vuePid: this._$vuePid,
  1814. mpInstance: this });
  1815. // 触发首次 setData
  1816. this.$vm.$mount();
  1817. };
  1818. var component = this;
  1819. while (component && component.__lifetimes_attached && components[0] && component === components[0]) {
  1820. components.shift();
  1821. component.__lifetimes_attached();
  1822. delete component.__lifetimes_attached;
  1823. component = components[0];
  1824. }
  1825. };
  1826. // ready 比 handleLink 还早,初始化逻辑放到 handleLink 中
  1827. delete componentOptions.lifetimes.ready;
  1828. componentOptions.methods.__l = handleLink$1;
  1829. return componentOptions;
  1830. }
  1831. var hooks$1 = [
  1832. 'onShow',
  1833. 'onHide',
  1834. 'onUnload'];
  1835. hooks$1.push.apply(hooks$1, PAGE_EVENT_HOOKS);
  1836. function parseBasePage(vuePageOptions, _ref8)
  1837. {var isPage = _ref8.isPage,initRelation = _ref8.initRelation;
  1838. var pageOptions = parseComponent(vuePageOptions);
  1839. initHooks(pageOptions.methods, hooks$1, vuePageOptions);
  1840. pageOptions.methods.onLoad = function (query) {
  1841. this.options = query;
  1842. var copyQuery = Object.assign({}, query);
  1843. delete copyQuery.__id__;
  1844. this.$page = {
  1845. fullPath: '/' + (this.route || this.is) + stringifyQuery(copyQuery) };
  1846. this.$vm.$mp.query = query; // 兼容 mpvue
  1847. this.$vm.__call_hook('onLoad', query);
  1848. };
  1849. return pageOptions;
  1850. }
  1851. function parsePage(vuePageOptions) {
  1852. var pageOptions = parseBasePage(vuePageOptions, {
  1853. isPage: isPage,
  1854. initRelation: initRelation });
  1855. // 页面需要在 ready 中触发,其他组件是在 handleLink 中触发
  1856. pageOptions.lifetimes.ready = function ready() {
  1857. if (this.$vm && this.$vm.mpType === 'page') {
  1858. this.$vm.__call_hook('created');
  1859. this.$vm.__call_hook('beforeMount');
  1860. this.$vm._isMounted = true;
  1861. this.$vm.__call_hook('mounted');
  1862. this.$vm.__call_hook('onReady');
  1863. } else {
  1864. this.is && console.warn(this.is + ' is not ready');
  1865. }
  1866. };
  1867. pageOptions.lifetimes.detached = function detached() {
  1868. this.$vm && this.$vm.$destroy();
  1869. // 清理
  1870. var webviewId = this.__webviewId__;
  1871. webviewId && Object.keys(instances).forEach(function (key) {
  1872. if (key.indexOf(webviewId + '_') === 0) {
  1873. delete instances[key];
  1874. }
  1875. });
  1876. };
  1877. return pageOptions;
  1878. }
  1879. function createPage(vuePageOptions) {
  1880. {
  1881. return Component(parsePage(vuePageOptions));
  1882. }
  1883. }
  1884. function createComponent(vueOptions) {
  1885. {
  1886. return Component(parseComponent(vueOptions));
  1887. }
  1888. }
  1889. function createSubpackageApp(vm) {
  1890. var appOptions = parseApp(vm);
  1891. var app = getApp({
  1892. allowDefault: true });
  1893. vm.$scope = app;
  1894. var globalData = app.globalData;
  1895. if (globalData) {
  1896. Object.keys(appOptions.globalData).forEach(function (name) {
  1897. if (!hasOwn(globalData, name)) {
  1898. globalData[name] = appOptions.globalData[name];
  1899. }
  1900. });
  1901. }
  1902. Object.keys(appOptions).forEach(function (name) {
  1903. if (!hasOwn(app, name)) {
  1904. app[name] = appOptions[name];
  1905. }
  1906. });
  1907. if (isFn(appOptions.onShow) && tt.onAppShow) {
  1908. tt.onAppShow(function () {for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {args[_key6] = arguments[_key6];}
  1909. vm.__call_hook('onShow', args);
  1910. });
  1911. }
  1912. if (isFn(appOptions.onHide) && tt.onAppHide) {
  1913. tt.onAppHide(function () {for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {args[_key7] = arguments[_key7];}
  1914. vm.__call_hook('onHide', args);
  1915. });
  1916. }
  1917. if (isFn(appOptions.onLaunch)) {
  1918. var args = tt.getLaunchOptionsSync && tt.getLaunchOptionsSync();
  1919. vm.__call_hook('onLaunch', args);
  1920. }
  1921. return vm;
  1922. }
  1923. function createPlugin(vm) {
  1924. var appOptions = parseApp(vm);
  1925. if (isFn(appOptions.onShow) && tt.onAppShow) {
  1926. tt.onAppShow(function () {for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {args[_key8] = arguments[_key8];}
  1927. appOptions.onShow.apply(vm, args);
  1928. });
  1929. }
  1930. if (isFn(appOptions.onHide) && tt.onAppHide) {
  1931. tt.onAppHide(function () {for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {args[_key9] = arguments[_key9];}
  1932. appOptions.onHide.apply(vm, args);
  1933. });
  1934. }
  1935. if (isFn(appOptions.onLaunch)) {
  1936. var args = tt.getLaunchOptionsSync && tt.getLaunchOptionsSync();
  1937. appOptions.onLaunch.call(vm, args);
  1938. }
  1939. return vm;
  1940. }
  1941. todos.forEach(function (todoApi) {
  1942. protocols[todoApi] = false;
  1943. });
  1944. canIUses.forEach(function (canIUseApi) {
  1945. var apiName = protocols[canIUseApi] && protocols[canIUseApi].name ? protocols[canIUseApi].name :
  1946. canIUseApi;
  1947. if (!tt.canIUse(apiName)) {
  1948. protocols[canIUseApi] = false;
  1949. }
  1950. });
  1951. var uni = {};
  1952. if (typeof Proxy !== 'undefined' && "mp-toutiao" !== 'app-plus') {
  1953. uni = new Proxy({}, {
  1954. get: function get(target, name) {
  1955. if (hasOwn(target, name)) {
  1956. return target[name];
  1957. }
  1958. if (baseApi[name]) {
  1959. return baseApi[name];
  1960. }
  1961. if (api[name]) {
  1962. return promisify(name, api[name]);
  1963. }
  1964. {
  1965. if (extraApi[name]) {
  1966. return promisify(name, extraApi[name]);
  1967. }
  1968. if (todoApis[name]) {
  1969. return promisify(name, todoApis[name]);
  1970. }
  1971. }
  1972. if (eventApi[name]) {
  1973. return eventApi[name];
  1974. }
  1975. if (!hasOwn(tt, name) && !hasOwn(protocols, name)) {
  1976. return;
  1977. }
  1978. return promisify(name, wrapper(name, tt[name]));
  1979. },
  1980. set: function set(target, name, value) {
  1981. target[name] = value;
  1982. return true;
  1983. } });
  1984. } else {
  1985. Object.keys(baseApi).forEach(function (name) {
  1986. uni[name] = baseApi[name];
  1987. });
  1988. {
  1989. Object.keys(todoApis).forEach(function (name) {
  1990. uni[name] = promisify(name, todoApis[name]);
  1991. });
  1992. Object.keys(extraApi).forEach(function (name) {
  1993. uni[name] = promisify(name, todoApis[name]);
  1994. });
  1995. }
  1996. Object.keys(eventApi).forEach(function (name) {
  1997. uni[name] = eventApi[name];
  1998. });
  1999. Object.keys(api).forEach(function (name) {
  2000. uni[name] = promisify(name, api[name]);
  2001. });
  2002. Object.keys(tt).forEach(function (name) {
  2003. if (hasOwn(tt, name) || hasOwn(protocols, name)) {
  2004. uni[name] = promisify(name, wrapper(name, tt[name]));
  2005. }
  2006. });
  2007. }
  2008. tt.createApp = createApp;
  2009. tt.createPage = createPage;
  2010. tt.createComponent = createComponent;
  2011. tt.createSubpackageApp = createSubpackageApp;
  2012. tt.createPlugin = createPlugin;
  2013. var uni$1 = uni;var _default =
  2014. uni$1;exports.default = _default;
  2015. /***/ }),
  2016. /***/ 13:
  2017. /*!**********************************************************************************************************!*\
  2018. !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js ***!
  2019. \**********************************************************************************************************/
  2020. /*! exports provided: default */
  2021. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2022. "use strict";
  2023. __webpack_require__.r(__webpack_exports__);
  2024. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
  2025. /* globals __VUE_SSR_CONTEXT__ */
  2026. // IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
  2027. // This module is a runtime utility for cleaner component module output and will
  2028. // be included in the final webpack user bundle.
  2029. function normalizeComponent (
  2030. scriptExports,
  2031. render,
  2032. staticRenderFns,
  2033. functionalTemplate,
  2034. injectStyles,
  2035. scopeId,
  2036. moduleIdentifier, /* server only */
  2037. shadowMode, /* vue-cli only */
  2038. components, // fixed by xxxxxx auto components
  2039. renderjs // fixed by xxxxxx renderjs
  2040. ) {
  2041. // Vue.extend constructor export interop
  2042. var options = typeof scriptExports === 'function'
  2043. ? scriptExports.options
  2044. : scriptExports
  2045. // fixed by xxxxxx auto components
  2046. if (components) {
  2047. if (!options.components) {
  2048. options.components = {}
  2049. }
  2050. var hasOwn = Object.prototype.hasOwnProperty
  2051. for (var name in components) {
  2052. if (hasOwn.call(components, name) && !hasOwn.call(options.components, name)) {
  2053. options.components[name] = components[name]
  2054. }
  2055. }
  2056. }
  2057. // fixed by xxxxxx renderjs
  2058. if (renderjs) {
  2059. (renderjs.beforeCreate || (renderjs.beforeCreate = [])).unshift(function() {
  2060. this[renderjs.__module] = this
  2061. });
  2062. (options.mixins || (options.mixins = [])).push(renderjs)
  2063. }
  2064. // render functions
  2065. if (render) {
  2066. options.render = render
  2067. options.staticRenderFns = staticRenderFns
  2068. options._compiled = true
  2069. }
  2070. // functional template
  2071. if (functionalTemplate) {
  2072. options.functional = true
  2073. }
  2074. // scopedId
  2075. if (scopeId) {
  2076. options._scopeId = 'data-v-' + scopeId
  2077. }
  2078. var hook
  2079. if (moduleIdentifier) { // server build
  2080. hook = function (context) {
  2081. // 2.3 injection
  2082. context =
  2083. context || // cached call
  2084. (this.$vnode && this.$vnode.ssrContext) || // stateful
  2085. (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
  2086. // 2.2 with runInNewContext: true
  2087. if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
  2088. context = __VUE_SSR_CONTEXT__
  2089. }
  2090. // inject component styles
  2091. if (injectStyles) {
  2092. injectStyles.call(this, context)
  2093. }
  2094. // register component module identifier for async chunk inferrence
  2095. if (context && context._registeredComponents) {
  2096. context._registeredComponents.add(moduleIdentifier)
  2097. }
  2098. }
  2099. // used by ssr in case component is cached and beforeCreate
  2100. // never gets called
  2101. options._ssrRegister = hook
  2102. } else if (injectStyles) {
  2103. hook = shadowMode
  2104. ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
  2105. : injectStyles
  2106. }
  2107. if (hook) {
  2108. if (options.functional) {
  2109. // for template-only hot-reload because in that case the render fn doesn't
  2110. // go through the normalizer
  2111. options._injectStyles = hook
  2112. // register for functioal component in vue file
  2113. var originalRender = options.render
  2114. options.render = function renderWithStyleInjection (h, context) {
  2115. hook.call(context)
  2116. return originalRender(h, context)
  2117. }
  2118. } else {
  2119. // inject component registration as beforeCreate hook
  2120. var existing = options.beforeCreate
  2121. options.beforeCreate = existing
  2122. ? [].concat(existing, hook)
  2123. : [hook]
  2124. }
  2125. }
  2126. return {
  2127. exports: scriptExports,
  2128. options: options
  2129. }
  2130. }
  2131. /***/ }),
  2132. /***/ 2:
  2133. /*!******************************************************************************************!*\
  2134. !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js ***!
  2135. \******************************************************************************************/
  2136. /*! exports provided: default */
  2137. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  2138. "use strict";
  2139. __webpack_require__.r(__webpack_exports__);
  2140. /* WEBPACK VAR INJECTION */(function(global) {/*!
  2141. * Vue.js v2.6.11
  2142. * (c) 2014-2021 Evan You
  2143. * Released under the MIT License.
  2144. */
  2145. /* */
  2146. var emptyObject = Object.freeze({});
  2147. // These helpers produce better VM code in JS engines due to their
  2148. // explicitness and function inlining.
  2149. function isUndef (v) {
  2150. return v === undefined || v === null
  2151. }
  2152. function isDef (v) {
  2153. return v !== undefined && v !== null
  2154. }
  2155. function isTrue (v) {
  2156. return v === true
  2157. }
  2158. function isFalse (v) {
  2159. return v === false
  2160. }
  2161. /**
  2162. * Check if value is primitive.
  2163. */
  2164. function isPrimitive (value) {
  2165. return (
  2166. typeof value === 'string' ||
  2167. typeof value === 'number' ||
  2168. // $flow-disable-line
  2169. typeof value === 'symbol' ||
  2170. typeof value === 'boolean'
  2171. )
  2172. }
  2173. /**
  2174. * Quick object check - this is primarily used to tell
  2175. * Objects from primitive values when we know the value
  2176. * is a JSON-compliant type.
  2177. */
  2178. function isObject (obj) {
  2179. return obj !== null && typeof obj === 'object'
  2180. }
  2181. /**
  2182. * Get the raw type string of a value, e.g., [object Object].
  2183. */
  2184. var _toString = Object.prototype.toString;
  2185. function toRawType (value) {
  2186. return _toString.call(value).slice(8, -1)
  2187. }
  2188. /**
  2189. * Strict object type check. Only returns true
  2190. * for plain JavaScript objects.
  2191. */
  2192. function isPlainObject (obj) {
  2193. return _toString.call(obj) === '[object Object]'
  2194. }
  2195. function isRegExp (v) {
  2196. return _toString.call(v) === '[object RegExp]'
  2197. }
  2198. /**
  2199. * Check if val is a valid array index.
  2200. */
  2201. function isValidArrayIndex (val) {
  2202. var n = parseFloat(String(val));
  2203. return n >= 0 && Math.floor(n) === n && isFinite(val)
  2204. }
  2205. function isPromise (val) {
  2206. return (
  2207. isDef(val) &&
  2208. typeof val.then === 'function' &&
  2209. typeof val.catch === 'function'
  2210. )
  2211. }
  2212. /**
  2213. * Convert a value to a string that is actually rendered.
  2214. */
  2215. function toString (val) {
  2216. return val == null
  2217. ? ''
  2218. : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
  2219. ? JSON.stringify(val, null, 2)
  2220. : String(val)
  2221. }
  2222. /**
  2223. * Convert an input value to a number for persistence.
  2224. * If the conversion fails, return original string.
  2225. */
  2226. function toNumber (val) {
  2227. var n = parseFloat(val);
  2228. return isNaN(n) ? val : n
  2229. }
  2230. /**
  2231. * Make a map and return a function for checking if a key
  2232. * is in that map.
  2233. */
  2234. function makeMap (
  2235. str,
  2236. expectsLowerCase
  2237. ) {
  2238. var map = Object.create(null);
  2239. var list = str.split(',');
  2240. for (var i = 0; i < list.length; i++) {
  2241. map[list[i]] = true;
  2242. }
  2243. return expectsLowerCase
  2244. ? function (val) { return map[val.toLowerCase()]; }
  2245. : function (val) { return map[val]; }
  2246. }
  2247. /**
  2248. * Check if a tag is a built-in tag.
  2249. */
  2250. var isBuiltInTag = makeMap('slot,component', true);
  2251. /**
  2252. * Check if an attribute is a reserved attribute.
  2253. */
  2254. var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
  2255. /**
  2256. * Remove an item from an array.
  2257. */
  2258. function remove (arr, item) {
  2259. if (arr.length) {
  2260. var index = arr.indexOf(item);
  2261. if (index > -1) {
  2262. return arr.splice(index, 1)
  2263. }
  2264. }
  2265. }
  2266. /**
  2267. * Check whether an object has the property.
  2268. */
  2269. var hasOwnProperty = Object.prototype.hasOwnProperty;
  2270. function hasOwn (obj, key) {
  2271. return hasOwnProperty.call(obj, key)
  2272. }
  2273. /**
  2274. * Create a cached version of a pure function.
  2275. */
  2276. function cached (fn) {
  2277. var cache = Object.create(null);
  2278. return (function cachedFn (str) {
  2279. var hit = cache[str];
  2280. return hit || (cache[str] = fn(str))
  2281. })
  2282. }
  2283. /**
  2284. * Camelize a hyphen-delimited string.
  2285. */
  2286. var camelizeRE = /-(\w)/g;
  2287. var camelize = cached(function (str) {
  2288. return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
  2289. });
  2290. /**
  2291. * Capitalize a string.
  2292. */
  2293. var capitalize = cached(function (str) {
  2294. return str.charAt(0).toUpperCase() + str.slice(1)
  2295. });
  2296. /**
  2297. * Hyphenate a camelCase string.
  2298. */
  2299. var hyphenateRE = /\B([A-Z])/g;
  2300. var hyphenate = cached(function (str) {
  2301. return str.replace(hyphenateRE, '-$1').toLowerCase()
  2302. });
  2303. /**
  2304. * Simple bind polyfill for environments that do not support it,
  2305. * e.g., PhantomJS 1.x. Technically, we don't need this anymore
  2306. * since native bind is now performant enough in most browsers.
  2307. * But removing it would mean breaking code that was able to run in
  2308. * PhantomJS 1.x, so this must be kept for backward compatibility.
  2309. */
  2310. /* istanbul ignore next */
  2311. function polyfillBind (fn, ctx) {
  2312. function boundFn (a) {
  2313. var l = arguments.length;
  2314. return l
  2315. ? l > 1
  2316. ? fn.apply(ctx, arguments)
  2317. : fn.call(ctx, a)
  2318. : fn.call(ctx)
  2319. }
  2320. boundFn._length = fn.length;
  2321. return boundFn
  2322. }
  2323. function nativeBind (fn, ctx) {
  2324. return fn.bind(ctx)
  2325. }
  2326. var bind = Function.prototype.bind
  2327. ? nativeBind
  2328. : polyfillBind;
  2329. /**
  2330. * Convert an Array-like object to a real Array.
  2331. */
  2332. function toArray (list, start) {
  2333. start = start || 0;
  2334. var i = list.length - start;
  2335. var ret = new Array(i);
  2336. while (i--) {
  2337. ret[i] = list[i + start];
  2338. }
  2339. return ret
  2340. }
  2341. /**
  2342. * Mix properties into target object.
  2343. */
  2344. function extend (to, _from) {
  2345. for (var key in _from) {
  2346. to[key] = _from[key];
  2347. }
  2348. return to
  2349. }
  2350. /**
  2351. * Merge an Array of Objects into a single Object.
  2352. */
  2353. function toObject (arr) {
  2354. var res = {};
  2355. for (var i = 0; i < arr.length; i++) {
  2356. if (arr[i]) {
  2357. extend(res, arr[i]);
  2358. }
  2359. }
  2360. return res
  2361. }
  2362. /* eslint-disable no-unused-vars */
  2363. /**
  2364. * Perform no operation.
  2365. * Stubbing args to make Flow happy without leaving useless transpiled code
  2366. * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
  2367. */
  2368. function noop (a, b, c) {}
  2369. /**
  2370. * Always return false.
  2371. */
  2372. var no = function (a, b, c) { return false; };
  2373. /* eslint-enable no-unused-vars */
  2374. /**
  2375. * Return the same value.
  2376. */
  2377. var identity = function (_) { return _; };
  2378. /**
  2379. * Check if two values are loosely equal - that is,
  2380. * if they are plain objects, do they have the same shape?
  2381. */
  2382. function looseEqual (a, b) {
  2383. if (a === b) { return true }
  2384. var isObjectA = isObject(a);
  2385. var isObjectB = isObject(b);
  2386. if (isObjectA && isObjectB) {
  2387. try {
  2388. var isArrayA = Array.isArray(a);
  2389. var isArrayB = Array.isArray(b);
  2390. if (isArrayA && isArrayB) {
  2391. return a.length === b.length && a.every(function (e, i) {
  2392. return looseEqual(e, b[i])
  2393. })
  2394. } else if (a instanceof Date && b instanceof Date) {
  2395. return a.getTime() === b.getTime()
  2396. } else if (!isArrayA && !isArrayB) {
  2397. var keysA = Object.keys(a);
  2398. var keysB = Object.keys(b);
  2399. return keysA.length === keysB.length && keysA.every(function (key) {
  2400. return looseEqual(a[key], b[key])
  2401. })
  2402. } else {
  2403. /* istanbul ignore next */
  2404. return false
  2405. }
  2406. } catch (e) {
  2407. /* istanbul ignore next */
  2408. return false
  2409. }
  2410. } else if (!isObjectA && !isObjectB) {
  2411. return String(a) === String(b)
  2412. } else {
  2413. return false
  2414. }
  2415. }
  2416. /**
  2417. * Return the first index at which a loosely equal value can be
  2418. * found in the array (if value is a plain object, the array must
  2419. * contain an object of the same shape), or -1 if it is not present.
  2420. */
  2421. function looseIndexOf (arr, val) {
  2422. for (var i = 0; i < arr.length; i++) {
  2423. if (looseEqual(arr[i], val)) { return i }
  2424. }
  2425. return -1
  2426. }
  2427. /**
  2428. * Ensure a function is called only once.
  2429. */
  2430. function once (fn) {
  2431. var called = false;
  2432. return function () {
  2433. if (!called) {
  2434. called = true;
  2435. fn.apply(this, arguments);
  2436. }
  2437. }
  2438. }
  2439. var ASSET_TYPES = [
  2440. 'component',
  2441. 'directive',
  2442. 'filter'
  2443. ];
  2444. var LIFECYCLE_HOOKS = [
  2445. 'beforeCreate',
  2446. 'created',
  2447. 'beforeMount',
  2448. 'mounted',
  2449. 'beforeUpdate',
  2450. 'updated',
  2451. 'beforeDestroy',
  2452. 'destroyed',
  2453. 'activated',
  2454. 'deactivated',
  2455. 'errorCaptured',
  2456. 'serverPrefetch'
  2457. ];
  2458. /* */
  2459. var config = ({
  2460. /**
  2461. * Option merge strategies (used in core/util/options)
  2462. */
  2463. // $flow-disable-line
  2464. optionMergeStrategies: Object.create(null),
  2465. /**
  2466. * Whether to suppress warnings.
  2467. */
  2468. silent: false,
  2469. /**
  2470. * Show production mode tip message on boot?
  2471. */
  2472. productionTip: "development" !== 'production',
  2473. /**
  2474. * Whether to enable devtools
  2475. */
  2476. devtools: "development" !== 'production',
  2477. /**
  2478. * Whether to record perf
  2479. */
  2480. performance: false,
  2481. /**
  2482. * Error handler for watcher errors
  2483. */
  2484. errorHandler: null,
  2485. /**
  2486. * Warn handler for watcher warns
  2487. */
  2488. warnHandler: null,
  2489. /**
  2490. * Ignore certain custom elements
  2491. */
  2492. ignoredElements: [],
  2493. /**
  2494. * Custom user key aliases for v-on
  2495. */
  2496. // $flow-disable-line
  2497. keyCodes: Object.create(null),
  2498. /**
  2499. * Check if a tag is reserved so that it cannot be registered as a
  2500. * component. This is platform-dependent and may be overwritten.
  2501. */
  2502. isReservedTag: no,
  2503. /**
  2504. * Check if an attribute is reserved so that it cannot be used as a component
  2505. * prop. This is platform-dependent and may be overwritten.
  2506. */
  2507. isReservedAttr: no,
  2508. /**
  2509. * Check if a tag is an unknown element.
  2510. * Platform-dependent.
  2511. */
  2512. isUnknownElement: no,
  2513. /**
  2514. * Get the namespace of an element
  2515. */
  2516. getTagNamespace: noop,
  2517. /**
  2518. * Parse the real tag name for the specific platform.
  2519. */
  2520. parsePlatformTagName: identity,
  2521. /**
  2522. * Check if an attribute must be bound using property, e.g. value
  2523. * Platform-dependent.
  2524. */
  2525. mustUseProp: no,
  2526. /**
  2527. * Perform updates asynchronously. Intended to be used by Vue Test Utils
  2528. * This will significantly reduce performance if set to false.
  2529. */
  2530. async: true,
  2531. /**
  2532. * Exposed for legacy reasons
  2533. */
  2534. _lifecycleHooks: LIFECYCLE_HOOKS
  2535. });
  2536. /* */
  2537. /**
  2538. * unicode letters used for parsing html tags, component names and property paths.
  2539. * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
  2540. * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
  2541. */
  2542. var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
  2543. /**
  2544. * Check if a string starts with $ or _
  2545. */
  2546. function isReserved (str) {
  2547. var c = (str + '').charCodeAt(0);
  2548. return c === 0x24 || c === 0x5F
  2549. }
  2550. /**
  2551. * Define a property.
  2552. */
  2553. function def (obj, key, val, enumerable) {
  2554. Object.defineProperty(obj, key, {
  2555. value: val,
  2556. enumerable: !!enumerable,
  2557. writable: true,
  2558. configurable: true
  2559. });
  2560. }
  2561. /**
  2562. * Parse simple path.
  2563. */
  2564. var bailRE = new RegExp(("[^" + (unicodeRegExp.source) + ".$_\\d]"));
  2565. function parsePath (path) {
  2566. if (bailRE.test(path)) {
  2567. return
  2568. }
  2569. var segments = path.split('.');
  2570. return function (obj) {
  2571. for (var i = 0; i < segments.length; i++) {
  2572. if (!obj) { return }
  2573. obj = obj[segments[i]];
  2574. }
  2575. return obj
  2576. }
  2577. }
  2578. /* */
  2579. // can we use __proto__?
  2580. var hasProto = '__proto__' in {};
  2581. // Browser environment sniffing
  2582. var inBrowser = typeof window !== 'undefined';
  2583. var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;
  2584. var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();
  2585. var UA = inBrowser && window.navigator.userAgent.toLowerCase();
  2586. var isIE = UA && /msie|trident/.test(UA);
  2587. var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
  2588. var isEdge = UA && UA.indexOf('edge/') > 0;
  2589. var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');
  2590. var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');
  2591. var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
  2592. var isPhantomJS = UA && /phantomjs/.test(UA);
  2593. var isFF = UA && UA.match(/firefox\/(\d+)/);
  2594. // Firefox has a "watch" function on Object.prototype...
  2595. var nativeWatch = ({}).watch;
  2596. if (inBrowser) {
  2597. try {
  2598. var opts = {};
  2599. Object.defineProperty(opts, 'passive', ({
  2600. get: function get () {
  2601. }
  2602. })); // https://github.com/facebook/flow/issues/285
  2603. window.addEventListener('test-passive', null, opts);
  2604. } catch (e) {}
  2605. }
  2606. // this needs to be lazy-evaled because vue may be required before
  2607. // vue-server-renderer can set VUE_ENV
  2608. var _isServer;
  2609. var isServerRendering = function () {
  2610. if (_isServer === undefined) {
  2611. /* istanbul ignore if */
  2612. if (!inBrowser && !inWeex && typeof global !== 'undefined') {
  2613. // detect presence of vue-server-renderer and avoid
  2614. // Webpack shimming the process
  2615. _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';
  2616. } else {
  2617. _isServer = false;
  2618. }
  2619. }
  2620. return _isServer
  2621. };
  2622. // detect devtools
  2623. var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
  2624. /* istanbul ignore next */
  2625. function isNative (Ctor) {
  2626. return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
  2627. }
  2628. var hasSymbol =
  2629. typeof Symbol !== 'undefined' && isNative(Symbol) &&
  2630. typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);
  2631. var _Set;
  2632. /* istanbul ignore if */ // $flow-disable-line
  2633. if (typeof Set !== 'undefined' && isNative(Set)) {
  2634. // use native Set when available.
  2635. _Set = Set;
  2636. } else {
  2637. // a non-standard Set polyfill that only works with primitive keys.
  2638. _Set = /*@__PURE__*/(function () {
  2639. function Set () {
  2640. this.set = Object.create(null);
  2641. }
  2642. Set.prototype.has = function has (key) {
  2643. return this.set[key] === true
  2644. };
  2645. Set.prototype.add = function add (key) {
  2646. this.set[key] = true;
  2647. };
  2648. Set.prototype.clear = function clear () {
  2649. this.set = Object.create(null);
  2650. };
  2651. return Set;
  2652. }());
  2653. }
  2654. /* */
  2655. var warn = noop;
  2656. var tip = noop;
  2657. var generateComponentTrace = (noop); // work around flow check
  2658. var formatComponentName = (noop);
  2659. if (true) {
  2660. var hasConsole = typeof console !== 'undefined';
  2661. var classifyRE = /(?:^|[-_])(\w)/g;
  2662. var classify = function (str) { return str
  2663. .replace(classifyRE, function (c) { return c.toUpperCase(); })
  2664. .replace(/[-_]/g, ''); };
  2665. warn = function (msg, vm) {
  2666. var trace = vm ? generateComponentTrace(vm) : '';
  2667. if (config.warnHandler) {
  2668. config.warnHandler.call(null, msg, vm, trace);
  2669. } else if (hasConsole && (!config.silent)) {
  2670. console.error(("[Vue warn]: " + msg + trace));
  2671. }
  2672. };
  2673. tip = function (msg, vm) {
  2674. if (hasConsole && (!config.silent)) {
  2675. console.warn("[Vue tip]: " + msg + (
  2676. vm ? generateComponentTrace(vm) : ''
  2677. ));
  2678. }
  2679. };
  2680. formatComponentName = function (vm, includeFile) {
  2681. if (vm.$root === vm) {
  2682. if (vm.$options && vm.$options.__file) { // fixed by xxxxxx
  2683. return ('') + vm.$options.__file
  2684. }
  2685. return '<Root>'
  2686. }
  2687. var options = typeof vm === 'function' && vm.cid != null
  2688. ? vm.options
  2689. : vm._isVue
  2690. ? vm.$options || vm.constructor.options
  2691. : vm;
  2692. var name = options.name || options._componentTag;
  2693. var file = options.__file;
  2694. if (!name && file) {
  2695. var match = file.match(/([^/\\]+)\.vue$/);
  2696. name = match && match[1];
  2697. }
  2698. return (
  2699. (name ? ("<" + (classify(name)) + ">") : "<Anonymous>") +
  2700. (file && includeFile !== false ? (" at " + file) : '')
  2701. )
  2702. };
  2703. var repeat = function (str, n) {
  2704. var res = '';
  2705. while (n) {
  2706. if (n % 2 === 1) { res += str; }
  2707. if (n > 1) { str += str; }
  2708. n >>= 1;
  2709. }
  2710. return res
  2711. };
  2712. generateComponentTrace = function (vm) {
  2713. if (vm._isVue && vm.$parent) {
  2714. var tree = [];
  2715. var currentRecursiveSequence = 0;
  2716. while (vm && vm.$options.name !== 'PageBody') {
  2717. if (tree.length > 0) {
  2718. var last = tree[tree.length - 1];
  2719. if (last.constructor === vm.constructor) {
  2720. currentRecursiveSequence++;
  2721. vm = vm.$parent;
  2722. continue
  2723. } else if (currentRecursiveSequence > 0) {
  2724. tree[tree.length - 1] = [last, currentRecursiveSequence];
  2725. currentRecursiveSequence = 0;
  2726. }
  2727. }
  2728. !vm.$options.isReserved && tree.push(vm);
  2729. vm = vm.$parent;
  2730. }
  2731. return '\n\nfound in\n\n' + tree
  2732. .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
  2733. ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
  2734. : formatComponentName(vm))); })
  2735. .join('\n')
  2736. } else {
  2737. return ("\n\n(found in " + (formatComponentName(vm)) + ")")
  2738. }
  2739. };
  2740. }
  2741. /* */
  2742. var uid = 0;
  2743. /**
  2744. * A dep is an observable that can have multiple
  2745. * directives subscribing to it.
  2746. */
  2747. var Dep = function Dep () {
  2748. this.id = uid++;
  2749. this.subs = [];
  2750. };
  2751. Dep.prototype.addSub = function addSub (sub) {
  2752. this.subs.push(sub);
  2753. };
  2754. Dep.prototype.removeSub = function removeSub (sub) {
  2755. remove(this.subs, sub);
  2756. };
  2757. Dep.prototype.depend = function depend () {
  2758. if (Dep.SharedObject.target) {
  2759. Dep.SharedObject.target.addDep(this);
  2760. }
  2761. };
  2762. Dep.prototype.notify = function notify () {
  2763. // stabilize the subscriber list first
  2764. var subs = this.subs.slice();
  2765. if ( true && !config.async) {
  2766. // subs aren't sorted in scheduler if not running async
  2767. // we need to sort them now to make sure they fire in correct
  2768. // order
  2769. subs.sort(function (a, b) { return a.id - b.id; });
  2770. }
  2771. for (var i = 0, l = subs.length; i < l; i++) {
  2772. subs[i].update();
  2773. }
  2774. };
  2775. // The current target watcher being evaluated.
  2776. // This is globally unique because only one watcher
  2777. // can be evaluated at a time.
  2778. // fixed by xxxxxx (nvue shared vuex)
  2779. /* eslint-disable no-undef */
  2780. Dep.SharedObject = {};
  2781. Dep.SharedObject.target = null;
  2782. Dep.SharedObject.targetStack = [];
  2783. function pushTarget (target) {
  2784. Dep.SharedObject.targetStack.push(target);
  2785. Dep.SharedObject.target = target;
  2786. Dep.target = target;
  2787. }
  2788. function popTarget () {
  2789. Dep.SharedObject.targetStack.pop();
  2790. Dep.SharedObject.target = Dep.SharedObject.targetStack[Dep.SharedObject.targetStack.length - 1];
  2791. Dep.target = Dep.SharedObject.target;
  2792. }
  2793. /* */
  2794. var VNode = function VNode (
  2795. tag,
  2796. data,
  2797. children,
  2798. text,
  2799. elm,
  2800. context,
  2801. componentOptions,
  2802. asyncFactory
  2803. ) {
  2804. this.tag = tag;
  2805. this.data = data;
  2806. this.children = children;
  2807. this.text = text;
  2808. this.elm = elm;
  2809. this.ns = undefined;
  2810. this.context = context;
  2811. this.fnContext = undefined;
  2812. this.fnOptions = undefined;
  2813. this.fnScopeId = undefined;
  2814. this.key = data && data.key;
  2815. this.componentOptions = componentOptions;
  2816. this.componentInstance = undefined;
  2817. this.parent = undefined;
  2818. this.raw = false;
  2819. this.isStatic = false;
  2820. this.isRootInsert = true;
  2821. this.isComment = false;
  2822. this.isCloned = false;
  2823. this.isOnce = false;
  2824. this.asyncFactory = asyncFactory;
  2825. this.asyncMeta = undefined;
  2826. this.isAsyncPlaceholder = false;
  2827. };
  2828. var prototypeAccessors = { child: { configurable: true } };
  2829. // DEPRECATED: alias for componentInstance for backwards compat.
  2830. /* istanbul ignore next */
  2831. prototypeAccessors.child.get = function () {
  2832. return this.componentInstance
  2833. };
  2834. Object.defineProperties( VNode.prototype, prototypeAccessors );
  2835. var createEmptyVNode = function (text) {
  2836. if ( text === void 0 ) text = '';
  2837. var node = new VNode();
  2838. node.text = text;
  2839. node.isComment = true;
  2840. return node
  2841. };
  2842. function createTextVNode (val) {
  2843. return new VNode(undefined, undefined, undefined, String(val))
  2844. }
  2845. // optimized shallow clone
  2846. // used for static nodes and slot nodes because they may be reused across
  2847. // multiple renders, cloning them avoids errors when DOM manipulations rely
  2848. // on their elm reference.
  2849. function cloneVNode (vnode) {
  2850. var cloned = new VNode(
  2851. vnode.tag,
  2852. vnode.data,
  2853. // #7975
  2854. // clone children array to avoid mutating original in case of cloning
  2855. // a child.
  2856. vnode.children && vnode.children.slice(),
  2857. vnode.text,
  2858. vnode.elm,
  2859. vnode.context,
  2860. vnode.componentOptions,
  2861. vnode.asyncFactory
  2862. );
  2863. cloned.ns = vnode.ns;
  2864. cloned.isStatic = vnode.isStatic;
  2865. cloned.key = vnode.key;
  2866. cloned.isComment = vnode.isComment;
  2867. cloned.fnContext = vnode.fnContext;
  2868. cloned.fnOptions = vnode.fnOptions;
  2869. cloned.fnScopeId = vnode.fnScopeId;
  2870. cloned.asyncMeta = vnode.asyncMeta;
  2871. cloned.isCloned = true;
  2872. return cloned
  2873. }
  2874. /*
  2875. * not type checking this file because flow doesn't play well with
  2876. * dynamically accessing methods on Array prototype
  2877. */
  2878. var arrayProto = Array.prototype;
  2879. var arrayMethods = Object.create(arrayProto);
  2880. var methodsToPatch = [
  2881. 'push',
  2882. 'pop',
  2883. 'shift',
  2884. 'unshift',
  2885. 'splice',
  2886. 'sort',
  2887. 'reverse'
  2888. ];
  2889. /**
  2890. * Intercept mutating methods and emit events
  2891. */
  2892. methodsToPatch.forEach(function (method) {
  2893. // cache original method
  2894. var original = arrayProto[method];
  2895. def(arrayMethods, method, function mutator () {
  2896. var args = [], len = arguments.length;
  2897. while ( len-- ) args[ len ] = arguments[ len ];
  2898. var result = original.apply(this, args);
  2899. var ob = this.__ob__;
  2900. var inserted;
  2901. switch (method) {
  2902. case 'push':
  2903. case 'unshift':
  2904. inserted = args;
  2905. break
  2906. case 'splice':
  2907. inserted = args.slice(2);
  2908. break
  2909. }
  2910. if (inserted) { ob.observeArray(inserted); }
  2911. // notify change
  2912. ob.dep.notify();
  2913. return result
  2914. });
  2915. });
  2916. /* */
  2917. var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
  2918. /**
  2919. * In some cases we may want to disable observation inside a component's
  2920. * update computation.
  2921. */
  2922. var shouldObserve = true;
  2923. function toggleObserving (value) {
  2924. shouldObserve = value;
  2925. }
  2926. /**
  2927. * Observer class that is attached to each observed
  2928. * object. Once attached, the observer converts the target
  2929. * object's property keys into getter/setters that
  2930. * collect dependencies and dispatch updates.
  2931. */
  2932. var Observer = function Observer (value) {
  2933. this.value = value;
  2934. this.dep = new Dep();
  2935. this.vmCount = 0;
  2936. def(value, '__ob__', this);
  2937. if (Array.isArray(value)) {
  2938. if (hasProto) {
  2939. {// fixed by xxxxxx 微信小程序使用 plugins 之后,数组方法被直接挂载到了数组对象上,需要执行 copyAugment 逻辑
  2940. if(value.push !== value.__proto__.push){
  2941. copyAugment(value, arrayMethods, arrayKeys);
  2942. } else {
  2943. protoAugment(value, arrayMethods);
  2944. }
  2945. }
  2946. } else {
  2947. copyAugment(value, arrayMethods, arrayKeys);
  2948. }
  2949. this.observeArray(value);
  2950. } else {
  2951. this.walk(value);
  2952. }
  2953. };
  2954. /**
  2955. * Walk through all properties and convert them into
  2956. * getter/setters. This method should only be called when
  2957. * value type is Object.
  2958. */
  2959. Observer.prototype.walk = function walk (obj) {
  2960. var keys = Object.keys(obj);
  2961. for (var i = 0; i < keys.length; i++) {
  2962. defineReactive$$1(obj, keys[i]);
  2963. }
  2964. };
  2965. /**
  2966. * Observe a list of Array items.
  2967. */
  2968. Observer.prototype.observeArray = function observeArray (items) {
  2969. for (var i = 0, l = items.length; i < l; i++) {
  2970. observe(items[i]);
  2971. }
  2972. };
  2973. // helpers
  2974. /**
  2975. * Augment a target Object or Array by intercepting
  2976. * the prototype chain using __proto__
  2977. */
  2978. function protoAugment (target, src) {
  2979. /* eslint-disable no-proto */
  2980. target.__proto__ = src;
  2981. /* eslint-enable no-proto */
  2982. }
  2983. /**
  2984. * Augment a target Object or Array by defining
  2985. * hidden properties.
  2986. */
  2987. /* istanbul ignore next */
  2988. function copyAugment (target, src, keys) {
  2989. for (var i = 0, l = keys.length; i < l; i++) {
  2990. var key = keys[i];
  2991. def(target, key, src[key]);
  2992. }
  2993. }
  2994. /**
  2995. * Attempt to create an observer instance for a value,
  2996. * returns the new observer if successfully observed,
  2997. * or the existing observer if the value already has one.
  2998. */
  2999. function observe (value, asRootData) {
  3000. if (!isObject(value) || value instanceof VNode) {
  3001. return
  3002. }
  3003. var ob;
  3004. if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
  3005. ob = value.__ob__;
  3006. } else if (
  3007. shouldObserve &&
  3008. !isServerRendering() &&
  3009. (Array.isArray(value) || isPlainObject(value)) &&
  3010. Object.isExtensible(value) &&
  3011. !value._isVue
  3012. ) {
  3013. ob = new Observer(value);
  3014. }
  3015. if (asRootData && ob) {
  3016. ob.vmCount++;
  3017. }
  3018. return ob
  3019. }
  3020. /**
  3021. * Define a reactive property on an Object.
  3022. */
  3023. function defineReactive$$1 (
  3024. obj,
  3025. key,
  3026. val,
  3027. customSetter,
  3028. shallow
  3029. ) {
  3030. var dep = new Dep();
  3031. var property = Object.getOwnPropertyDescriptor(obj, key);
  3032. if (property && property.configurable === false) {
  3033. return
  3034. }
  3035. // cater for pre-defined getter/setters
  3036. var getter = property && property.get;
  3037. var setter = property && property.set;
  3038. if ((!getter || setter) && arguments.length === 2) {
  3039. val = obj[key];
  3040. }
  3041. var childOb = !shallow && observe(val);
  3042. Object.defineProperty(obj, key, {
  3043. enumerable: true,
  3044. configurable: true,
  3045. get: function reactiveGetter () {
  3046. var value = getter ? getter.call(obj) : val;
  3047. if (Dep.SharedObject.target) { // fixed by xxxxxx
  3048. dep.depend();
  3049. if (childOb) {
  3050. childOb.dep.depend();
  3051. if (Array.isArray(value)) {
  3052. dependArray(value);
  3053. }
  3054. }
  3055. }
  3056. return value
  3057. },
  3058. set: function reactiveSetter (newVal) {
  3059. var value = getter ? getter.call(obj) : val;
  3060. /* eslint-disable no-self-compare */
  3061. if (newVal === value || (newVal !== newVal && value !== value)) {
  3062. return
  3063. }
  3064. /* eslint-enable no-self-compare */
  3065. if ( true && customSetter) {
  3066. customSetter();
  3067. }
  3068. // #7981: for accessor properties without setter
  3069. if (getter && !setter) { return }
  3070. if (setter) {
  3071. setter.call(obj, newVal);
  3072. } else {
  3073. val = newVal;
  3074. }
  3075. childOb = !shallow && observe(newVal);
  3076. dep.notify();
  3077. }
  3078. });
  3079. }
  3080. /**
  3081. * Set a property on an object. Adds the new property and
  3082. * triggers change notification if the property doesn't
  3083. * already exist.
  3084. */
  3085. function set (target, key, val) {
  3086. if ( true &&
  3087. (isUndef(target) || isPrimitive(target))
  3088. ) {
  3089. warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target))));
  3090. }
  3091. if (Array.isArray(target) && isValidArrayIndex(key)) {
  3092. target.length = Math.max(target.length, key);
  3093. target.splice(key, 1, val);
  3094. return val
  3095. }
  3096. if (key in target && !(key in Object.prototype)) {
  3097. target[key] = val;
  3098. return val
  3099. }
  3100. var ob = (target).__ob__;
  3101. if (target._isVue || (ob && ob.vmCount)) {
  3102. true && warn(
  3103. 'Avoid adding reactive properties to a Vue instance or its root $data ' +
  3104. 'at runtime - declare it upfront in the data option.'
  3105. );
  3106. return val
  3107. }
  3108. if (!ob) {
  3109. target[key] = val;
  3110. return val
  3111. }
  3112. defineReactive$$1(ob.value, key, val);
  3113. ob.dep.notify();
  3114. return val
  3115. }
  3116. /**
  3117. * Delete a property and trigger change if necessary.
  3118. */
  3119. function del (target, key) {
  3120. if ( true &&
  3121. (isUndef(target) || isPrimitive(target))
  3122. ) {
  3123. warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target))));
  3124. }
  3125. if (Array.isArray(target) && isValidArrayIndex(key)) {
  3126. target.splice(key, 1);
  3127. return
  3128. }
  3129. var ob = (target).__ob__;
  3130. if (target._isVue || (ob && ob.vmCount)) {
  3131. true && warn(
  3132. 'Avoid deleting properties on a Vue instance or its root $data ' +
  3133. '- just set it to null.'
  3134. );
  3135. return
  3136. }
  3137. if (!hasOwn(target, key)) {
  3138. return
  3139. }
  3140. delete target[key];
  3141. if (!ob) {
  3142. return
  3143. }
  3144. ob.dep.notify();
  3145. }
  3146. /**
  3147. * Collect dependencies on array elements when the array is touched, since
  3148. * we cannot intercept array element access like property getters.
  3149. */
  3150. function dependArray (value) {
  3151. for (var e = (void 0), i = 0, l = value.length; i < l; i++) {
  3152. e = value[i];
  3153. e && e.__ob__ && e.__ob__.dep.depend();
  3154. if (Array.isArray(e)) {
  3155. dependArray(e);
  3156. }
  3157. }
  3158. }
  3159. /* */
  3160. /**
  3161. * Option overwriting strategies are functions that handle
  3162. * how to merge a parent option value and a child option
  3163. * value into the final value.
  3164. */
  3165. var strats = config.optionMergeStrategies;
  3166. /**
  3167. * Options with restrictions
  3168. */
  3169. if (true) {
  3170. strats.el = strats.propsData = function (parent, child, vm, key) {
  3171. if (!vm) {
  3172. warn(
  3173. "option \"" + key + "\" can only be used during instance " +
  3174. 'creation with the `new` keyword.'
  3175. );
  3176. }
  3177. return defaultStrat(parent, child)
  3178. };
  3179. }
  3180. /**
  3181. * Helper that recursively merges two data objects together.
  3182. */
  3183. function mergeData (to, from) {
  3184. if (!from) { return to }
  3185. var key, toVal, fromVal;
  3186. var keys = hasSymbol
  3187. ? Reflect.ownKeys(from)
  3188. : Object.keys(from);
  3189. for (var i = 0; i < keys.length; i++) {
  3190. key = keys[i];
  3191. // in case the object is already observed...
  3192. if (key === '__ob__') { continue }
  3193. toVal = to[key];
  3194. fromVal = from[key];
  3195. if (!hasOwn(to, key)) {
  3196. set(to, key, fromVal);
  3197. } else if (
  3198. toVal !== fromVal &&
  3199. isPlainObject(toVal) &&
  3200. isPlainObject(fromVal)
  3201. ) {
  3202. mergeData(toVal, fromVal);
  3203. }
  3204. }
  3205. return to
  3206. }
  3207. /**
  3208. * Data
  3209. */
  3210. function mergeDataOrFn (
  3211. parentVal,
  3212. childVal,
  3213. vm
  3214. ) {
  3215. if (!vm) {
  3216. // in a Vue.extend merge, both should be functions
  3217. if (!childVal) {
  3218. return parentVal
  3219. }
  3220. if (!parentVal) {
  3221. return childVal
  3222. }
  3223. // when parentVal & childVal are both present,
  3224. // we need to return a function that returns the
  3225. // merged result of both functions... no need to
  3226. // check if parentVal is a function here because
  3227. // it has to be a function to pass previous merges.
  3228. return function mergedDataFn () {
  3229. return mergeData(
  3230. typeof childVal === 'function' ? childVal.call(this, this) : childVal,
  3231. typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal
  3232. )
  3233. }
  3234. } else {
  3235. return function mergedInstanceDataFn () {
  3236. // instance merge
  3237. var instanceData = typeof childVal === 'function'
  3238. ? childVal.call(vm, vm)
  3239. : childVal;
  3240. var defaultData = typeof parentVal === 'function'
  3241. ? parentVal.call(vm, vm)
  3242. : parentVal;
  3243. if (instanceData) {
  3244. return mergeData(instanceData, defaultData)
  3245. } else {
  3246. return defaultData
  3247. }
  3248. }
  3249. }
  3250. }
  3251. strats.data = function (
  3252. parentVal,
  3253. childVal,
  3254. vm
  3255. ) {
  3256. if (!vm) {
  3257. if (childVal && typeof childVal !== 'function') {
  3258. true && warn(
  3259. 'The "data" option should be a function ' +
  3260. 'that returns a per-instance value in component ' +
  3261. 'definitions.',
  3262. vm
  3263. );
  3264. return parentVal
  3265. }
  3266. return mergeDataOrFn(parentVal, childVal)
  3267. }
  3268. return mergeDataOrFn(parentVal, childVal, vm)
  3269. };
  3270. /**
  3271. * Hooks and props are merged as arrays.
  3272. */
  3273. function mergeHook (
  3274. parentVal,
  3275. childVal
  3276. ) {
  3277. var res = childVal
  3278. ? parentVal
  3279. ? parentVal.concat(childVal)
  3280. : Array.isArray(childVal)
  3281. ? childVal
  3282. : [childVal]
  3283. : parentVal;
  3284. return res
  3285. ? dedupeHooks(res)
  3286. : res
  3287. }
  3288. function dedupeHooks (hooks) {
  3289. var res = [];
  3290. for (var i = 0; i < hooks.length; i++) {
  3291. if (res.indexOf(hooks[i]) === -1) {
  3292. res.push(hooks[i]);
  3293. }
  3294. }
  3295. return res
  3296. }
  3297. LIFECYCLE_HOOKS.forEach(function (hook) {
  3298. strats[hook] = mergeHook;
  3299. });
  3300. /**
  3301. * Assets
  3302. *
  3303. * When a vm is present (instance creation), we need to do
  3304. * a three-way merge between constructor options, instance
  3305. * options and parent options.
  3306. */
  3307. function mergeAssets (
  3308. parentVal,
  3309. childVal,
  3310. vm,
  3311. key
  3312. ) {
  3313. var res = Object.create(parentVal || null);
  3314. if (childVal) {
  3315. true && assertObjectType(key, childVal, vm);
  3316. return extend(res, childVal)
  3317. } else {
  3318. return res
  3319. }
  3320. }
  3321. ASSET_TYPES.forEach(function (type) {
  3322. strats[type + 's'] = mergeAssets;
  3323. });
  3324. /**
  3325. * Watchers.
  3326. *
  3327. * Watchers hashes should not overwrite one
  3328. * another, so we merge them as arrays.
  3329. */
  3330. strats.watch = function (
  3331. parentVal,
  3332. childVal,
  3333. vm,
  3334. key
  3335. ) {
  3336. // work around Firefox's Object.prototype.watch...
  3337. if (parentVal === nativeWatch) { parentVal = undefined; }
  3338. if (childVal === nativeWatch) { childVal = undefined; }
  3339. /* istanbul ignore if */
  3340. if (!childVal) { return Object.create(parentVal || null) }
  3341. if (true) {
  3342. assertObjectType(key, childVal, vm);
  3343. }
  3344. if (!parentVal) { return childVal }
  3345. var ret = {};
  3346. extend(ret, parentVal);
  3347. for (var key$1 in childVal) {
  3348. var parent = ret[key$1];
  3349. var child = childVal[key$1];
  3350. if (parent && !Array.isArray(parent)) {
  3351. parent = [parent];
  3352. }
  3353. ret[key$1] = parent
  3354. ? parent.concat(child)
  3355. : Array.isArray(child) ? child : [child];
  3356. }
  3357. return ret
  3358. };
  3359. /**
  3360. * Other object hashes.
  3361. */
  3362. strats.props =
  3363. strats.methods =
  3364. strats.inject =
  3365. strats.computed = function (
  3366. parentVal,
  3367. childVal,
  3368. vm,
  3369. key
  3370. ) {
  3371. if (childVal && "development" !== 'production') {
  3372. assertObjectType(key, childVal, vm);
  3373. }
  3374. if (!parentVal) { return childVal }
  3375. var ret = Object.create(null);
  3376. extend(ret, parentVal);
  3377. if (childVal) { extend(ret, childVal); }
  3378. return ret
  3379. };
  3380. strats.provide = mergeDataOrFn;
  3381. /**
  3382. * Default strategy.
  3383. */
  3384. var defaultStrat = function (parentVal, childVal) {
  3385. return childVal === undefined
  3386. ? parentVal
  3387. : childVal
  3388. };
  3389. /**
  3390. * Validate component names
  3391. */
  3392. function checkComponents (options) {
  3393. for (var key in options.components) {
  3394. validateComponentName(key);
  3395. }
  3396. }
  3397. function validateComponentName (name) {
  3398. if (!new RegExp(("^[a-zA-Z][\\-\\.0-9_" + (unicodeRegExp.source) + "]*$")).test(name)) {
  3399. warn(
  3400. 'Invalid component name: "' + name + '". Component names ' +
  3401. 'should conform to valid custom element name in html5 specification.'
  3402. );
  3403. }
  3404. if (isBuiltInTag(name) || config.isReservedTag(name)) {
  3405. warn(
  3406. 'Do not use built-in or reserved HTML elements as component ' +
  3407. 'id: ' + name
  3408. );
  3409. }
  3410. }
  3411. /**
  3412. * Ensure all props option syntax are normalized into the
  3413. * Object-based format.
  3414. */
  3415. function normalizeProps (options, vm) {
  3416. var props = options.props;
  3417. if (!props) { return }
  3418. var res = {};
  3419. var i, val, name;
  3420. if (Array.isArray(props)) {
  3421. i = props.length;
  3422. while (i--) {
  3423. val = props[i];
  3424. if (typeof val === 'string') {
  3425. name = camelize(val);
  3426. res[name] = { type: null };
  3427. } else if (true) {
  3428. warn('props must be strings when using array syntax.');
  3429. }
  3430. }
  3431. } else if (isPlainObject(props)) {
  3432. for (var key in props) {
  3433. val = props[key];
  3434. name = camelize(key);
  3435. res[name] = isPlainObject(val)
  3436. ? val
  3437. : { type: val };
  3438. }
  3439. } else if (true) {
  3440. warn(
  3441. "Invalid value for option \"props\": expected an Array or an Object, " +
  3442. "but got " + (toRawType(props)) + ".",
  3443. vm
  3444. );
  3445. }
  3446. options.props = res;
  3447. }
  3448. /**
  3449. * Normalize all injections into Object-based format
  3450. */
  3451. function normalizeInject (options, vm) {
  3452. var inject = options.inject;
  3453. if (!inject) { return }
  3454. var normalized = options.inject = {};
  3455. if (Array.isArray(inject)) {
  3456. for (var i = 0; i < inject.length; i++) {
  3457. normalized[inject[i]] = { from: inject[i] };
  3458. }
  3459. } else if (isPlainObject(inject)) {
  3460. for (var key in inject) {
  3461. var val = inject[key];
  3462. normalized[key] = isPlainObject(val)
  3463. ? extend({ from: key }, val)
  3464. : { from: val };
  3465. }
  3466. } else if (true) {
  3467. warn(
  3468. "Invalid value for option \"inject\": expected an Array or an Object, " +
  3469. "but got " + (toRawType(inject)) + ".",
  3470. vm
  3471. );
  3472. }
  3473. }
  3474. /**
  3475. * Normalize raw function directives into object format.
  3476. */
  3477. function normalizeDirectives (options) {
  3478. var dirs = options.directives;
  3479. if (dirs) {
  3480. for (var key in dirs) {
  3481. var def$$1 = dirs[key];
  3482. if (typeof def$$1 === 'function') {
  3483. dirs[key] = { bind: def$$1, update: def$$1 };
  3484. }
  3485. }
  3486. }
  3487. }
  3488. function assertObjectType (name, value, vm) {
  3489. if (!isPlainObject(value)) {
  3490. warn(
  3491. "Invalid value for option \"" + name + "\": expected an Object, " +
  3492. "but got " + (toRawType(value)) + ".",
  3493. vm
  3494. );
  3495. }
  3496. }
  3497. /**
  3498. * Merge two option objects into a new one.
  3499. * Core utility used in both instantiation and inheritance.
  3500. */
  3501. function mergeOptions (
  3502. parent,
  3503. child,
  3504. vm
  3505. ) {
  3506. if (true) {
  3507. checkComponents(child);
  3508. }
  3509. if (typeof child === 'function') {
  3510. child = child.options;
  3511. }
  3512. normalizeProps(child, vm);
  3513. normalizeInject(child, vm);
  3514. normalizeDirectives(child);
  3515. // Apply extends and mixins on the child options,
  3516. // but only if it is a raw options object that isn't
  3517. // the result of another mergeOptions call.
  3518. // Only merged options has the _base property.
  3519. if (!child._base) {
  3520. if (child.extends) {
  3521. parent = mergeOptions(parent, child.extends, vm);
  3522. }
  3523. if (child.mixins) {
  3524. for (var i = 0, l = child.mixins.length; i < l; i++) {
  3525. parent = mergeOptions(parent, child.mixins[i], vm);
  3526. }
  3527. }
  3528. }
  3529. var options = {};
  3530. var key;
  3531. for (key in parent) {
  3532. mergeField(key);
  3533. }
  3534. for (key in child) {
  3535. if (!hasOwn(parent, key)) {
  3536. mergeField(key);
  3537. }
  3538. }
  3539. function mergeField (key) {
  3540. var strat = strats[key] || defaultStrat;
  3541. options[key] = strat(parent[key], child[key], vm, key);
  3542. }
  3543. return options
  3544. }
  3545. /**
  3546. * Resolve an asset.
  3547. * This function is used because child instances need access
  3548. * to assets defined in its ancestor chain.
  3549. */
  3550. function resolveAsset (
  3551. options,
  3552. type,
  3553. id,
  3554. warnMissing
  3555. ) {
  3556. /* istanbul ignore if */
  3557. if (typeof id !== 'string') {
  3558. return
  3559. }
  3560. var assets = options[type];
  3561. // check local registration variations first
  3562. if (hasOwn(assets, id)) { return assets[id] }
  3563. var camelizedId = camelize(id);
  3564. if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }
  3565. var PascalCaseId = capitalize(camelizedId);
  3566. if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }
  3567. // fallback to prototype chain
  3568. var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
  3569. if ( true && warnMissing && !res) {
  3570. warn(
  3571. 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,
  3572. options
  3573. );
  3574. }
  3575. return res
  3576. }
  3577. /* */
  3578. function validateProp (
  3579. key,
  3580. propOptions,
  3581. propsData,
  3582. vm
  3583. ) {
  3584. var prop = propOptions[key];
  3585. var absent = !hasOwn(propsData, key);
  3586. var value = propsData[key];
  3587. // boolean casting
  3588. var booleanIndex = getTypeIndex(Boolean, prop.type);
  3589. if (booleanIndex > -1) {
  3590. if (absent && !hasOwn(prop, 'default')) {
  3591. value = false;
  3592. } else if (value === '' || value === hyphenate(key)) {
  3593. // only cast empty string / same name to boolean if
  3594. // boolean has higher priority
  3595. var stringIndex = getTypeIndex(String, prop.type);
  3596. if (stringIndex < 0 || booleanIndex < stringIndex) {
  3597. value = true;
  3598. }
  3599. }
  3600. }
  3601. // check default value
  3602. if (value === undefined) {
  3603. value = getPropDefaultValue(vm, prop, key);
  3604. // since the default value is a fresh copy,
  3605. // make sure to observe it.
  3606. var prevShouldObserve = shouldObserve;
  3607. toggleObserving(true);
  3608. observe(value);
  3609. toggleObserving(prevShouldObserve);
  3610. }
  3611. if (
  3612. true
  3613. ) {
  3614. assertProp(prop, key, value, vm, absent);
  3615. }
  3616. return value
  3617. }
  3618. /**
  3619. * Get the default value of a prop.
  3620. */
  3621. function getPropDefaultValue (vm, prop, key) {
  3622. // no default, return undefined
  3623. if (!hasOwn(prop, 'default')) {
  3624. return undefined
  3625. }
  3626. var def = prop.default;
  3627. // warn against non-factory defaults for Object & Array
  3628. if ( true && isObject(def)) {
  3629. warn(
  3630. 'Invalid default value for prop "' + key + '": ' +
  3631. 'Props with type Object/Array must use a factory function ' +
  3632. 'to return the default value.',
  3633. vm
  3634. );
  3635. }
  3636. // the raw prop value was also undefined from previous render,
  3637. // return previous default value to avoid unnecessary watcher trigger
  3638. if (vm && vm.$options.propsData &&
  3639. vm.$options.propsData[key] === undefined &&
  3640. vm._props[key] !== undefined
  3641. ) {
  3642. return vm._props[key]
  3643. }
  3644. // call factory function for non-Function types
  3645. // a value is Function if its prototype is function even across different execution context
  3646. return typeof def === 'function' && getType(prop.type) !== 'Function'
  3647. ? def.call(vm)
  3648. : def
  3649. }
  3650. /**
  3651. * Assert whether a prop is valid.
  3652. */
  3653. function assertProp (
  3654. prop,
  3655. name,
  3656. value,
  3657. vm,
  3658. absent
  3659. ) {
  3660. if (prop.required && absent) {
  3661. warn(
  3662. 'Missing required prop: "' + name + '"',
  3663. vm
  3664. );
  3665. return
  3666. }
  3667. if (value == null && !prop.required) {
  3668. return
  3669. }
  3670. var type = prop.type;
  3671. var valid = !type || type === true;
  3672. var expectedTypes = [];
  3673. if (type) {
  3674. if (!Array.isArray(type)) {
  3675. type = [type];
  3676. }
  3677. for (var i = 0; i < type.length && !valid; i++) {
  3678. var assertedType = assertType(value, type[i]);
  3679. expectedTypes.push(assertedType.expectedType || '');
  3680. valid = assertedType.valid;
  3681. }
  3682. }
  3683. if (!valid) {
  3684. warn(
  3685. getInvalidTypeMessage(name, value, expectedTypes),
  3686. vm
  3687. );
  3688. return
  3689. }
  3690. var validator = prop.validator;
  3691. if (validator) {
  3692. if (!validator(value)) {
  3693. warn(
  3694. 'Invalid prop: custom validator check failed for prop "' + name + '".',
  3695. vm
  3696. );
  3697. }
  3698. }
  3699. }
  3700. var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;
  3701. function assertType (value, type) {
  3702. var valid;
  3703. var expectedType = getType(type);
  3704. if (simpleCheckRE.test(expectedType)) {
  3705. var t = typeof value;
  3706. valid = t === expectedType.toLowerCase();
  3707. // for primitive wrapper objects
  3708. if (!valid && t === 'object') {
  3709. valid = value instanceof type;
  3710. }
  3711. } else if (expectedType === 'Object') {
  3712. valid = isPlainObject(value);
  3713. } else if (expectedType === 'Array') {
  3714. valid = Array.isArray(value);
  3715. } else {
  3716. valid = value instanceof type;
  3717. }
  3718. return {
  3719. valid: valid,
  3720. expectedType: expectedType
  3721. }
  3722. }
  3723. /**
  3724. * Use function string name to check built-in types,
  3725. * because a simple equality check will fail when running
  3726. * across different vms / iframes.
  3727. */
  3728. function getType (fn) {
  3729. var match = fn && fn.toString().match(/^\s*function (\w+)/);
  3730. return match ? match[1] : ''
  3731. }
  3732. function isSameType (a, b) {
  3733. return getType(a) === getType(b)
  3734. }
  3735. function getTypeIndex (type, expectedTypes) {
  3736. if (!Array.isArray(expectedTypes)) {
  3737. return isSameType(expectedTypes, type) ? 0 : -1
  3738. }
  3739. for (var i = 0, len = expectedTypes.length; i < len; i++) {
  3740. if (isSameType(expectedTypes[i], type)) {
  3741. return i
  3742. }
  3743. }
  3744. return -1
  3745. }
  3746. function getInvalidTypeMessage (name, value, expectedTypes) {
  3747. var message = "Invalid prop: type check failed for prop \"" + name + "\"." +
  3748. " Expected " + (expectedTypes.map(capitalize).join(', '));
  3749. var expectedType = expectedTypes[0];
  3750. var receivedType = toRawType(value);
  3751. var expectedValue = styleValue(value, expectedType);
  3752. var receivedValue = styleValue(value, receivedType);
  3753. // check if we need to specify expected value
  3754. if (expectedTypes.length === 1 &&
  3755. isExplicable(expectedType) &&
  3756. !isBoolean(expectedType, receivedType)) {
  3757. message += " with value " + expectedValue;
  3758. }
  3759. message += ", got " + receivedType + " ";
  3760. // check if we need to specify received value
  3761. if (isExplicable(receivedType)) {
  3762. message += "with value " + receivedValue + ".";
  3763. }
  3764. return message
  3765. }
  3766. function styleValue (value, type) {
  3767. if (type === 'String') {
  3768. return ("\"" + value + "\"")
  3769. } else if (type === 'Number') {
  3770. return ("" + (Number(value)))
  3771. } else {
  3772. return ("" + value)
  3773. }
  3774. }
  3775. function isExplicable (value) {
  3776. var explicitTypes = ['string', 'number', 'boolean'];
  3777. return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })
  3778. }
  3779. function isBoolean () {
  3780. var args = [], len = arguments.length;
  3781. while ( len-- ) args[ len ] = arguments[ len ];
  3782. return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })
  3783. }
  3784. /* */
  3785. function handleError (err, vm, info) {
  3786. // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
  3787. // See: https://github.com/vuejs/vuex/issues/1505
  3788. pushTarget();
  3789. try {
  3790. if (vm) {
  3791. var cur = vm;
  3792. while ((cur = cur.$parent)) {
  3793. var hooks = cur.$options.errorCaptured;
  3794. if (hooks) {
  3795. for (var i = 0; i < hooks.length; i++) {
  3796. try {
  3797. var capture = hooks[i].call(cur, err, vm, info) === false;
  3798. if (capture) { return }
  3799. } catch (e) {
  3800. globalHandleError(e, cur, 'errorCaptured hook');
  3801. }
  3802. }
  3803. }
  3804. }
  3805. }
  3806. globalHandleError(err, vm, info);
  3807. } finally {
  3808. popTarget();
  3809. }
  3810. }
  3811. function invokeWithErrorHandling (
  3812. handler,
  3813. context,
  3814. args,
  3815. vm,
  3816. info
  3817. ) {
  3818. var res;
  3819. try {
  3820. res = args ? handler.apply(context, args) : handler.call(context);
  3821. if (res && !res._isVue && isPromise(res) && !res._handled) {
  3822. res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
  3823. // issue #9511
  3824. // avoid catch triggering multiple times when nested calls
  3825. res._handled = true;
  3826. }
  3827. } catch (e) {
  3828. handleError(e, vm, info);
  3829. }
  3830. return res
  3831. }
  3832. function globalHandleError (err, vm, info) {
  3833. if (config.errorHandler) {
  3834. try {
  3835. return config.errorHandler.call(null, err, vm, info)
  3836. } catch (e) {
  3837. // if the user intentionally throws the original error in the handler,
  3838. // do not log it twice
  3839. if (e !== err) {
  3840. logError(e, null, 'config.errorHandler');
  3841. }
  3842. }
  3843. }
  3844. logError(err, vm, info);
  3845. }
  3846. function logError (err, vm, info) {
  3847. if (true) {
  3848. warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
  3849. }
  3850. /* istanbul ignore else */
  3851. if ((inBrowser || inWeex) && typeof console !== 'undefined') {
  3852. console.error(err);
  3853. } else {
  3854. throw err
  3855. }
  3856. }
  3857. /* */
  3858. var callbacks = [];
  3859. var pending = false;
  3860. function flushCallbacks () {
  3861. pending = false;
  3862. var copies = callbacks.slice(0);
  3863. callbacks.length = 0;
  3864. for (var i = 0; i < copies.length; i++) {
  3865. copies[i]();
  3866. }
  3867. }
  3868. // Here we have async deferring wrappers using microtasks.
  3869. // In 2.5 we used (macro) tasks (in combination with microtasks).
  3870. // However, it has subtle problems when state is changed right before repaint
  3871. // (e.g. #6813, out-in transitions).
  3872. // Also, using (macro) tasks in event handler would cause some weird behaviors
  3873. // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
  3874. // So we now use microtasks everywhere, again.
  3875. // A major drawback of this tradeoff is that there are some scenarios
  3876. // where microtasks have too high a priority and fire in between supposedly
  3877. // sequential events (e.g. #4521, #6690, which have workarounds)
  3878. // or even between bubbling of the same event (#6566).
  3879. var timerFunc;
  3880. // The nextTick behavior leverages the microtask queue, which can be accessed
  3881. // via either native Promise.then or MutationObserver.
  3882. // MutationObserver has wider support, however it is seriously bugged in
  3883. // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
  3884. // completely stops working after triggering a few times... so, if native
  3885. // Promise is available, we will use it:
  3886. /* istanbul ignore next, $flow-disable-line */
  3887. if (typeof Promise !== 'undefined' && isNative(Promise)) {
  3888. var p = Promise.resolve();
  3889. timerFunc = function () {
  3890. p.then(flushCallbacks);
  3891. // In problematic UIWebViews, Promise.then doesn't completely break, but
  3892. // it can get stuck in a weird state where callbacks are pushed into the
  3893. // microtask queue but the queue isn't being flushed, until the browser
  3894. // needs to do some other work, e.g. handle a timer. Therefore we can
  3895. // "force" the microtask queue to be flushed by adding an empty timer.
  3896. if (isIOS) { setTimeout(noop); }
  3897. };
  3898. } else if (!isIE && typeof MutationObserver !== 'undefined' && (
  3899. isNative(MutationObserver) ||
  3900. // PhantomJS and iOS 7.x
  3901. MutationObserver.toString() === '[object MutationObserverConstructor]'
  3902. )) {
  3903. // Use MutationObserver where native Promise is not available,
  3904. // e.g. PhantomJS, iOS7, Android 4.4
  3905. // (#6466 MutationObserver is unreliable in IE11)
  3906. var counter = 1;
  3907. var observer = new MutationObserver(flushCallbacks);
  3908. var textNode = document.createTextNode(String(counter));
  3909. observer.observe(textNode, {
  3910. characterData: true
  3911. });
  3912. timerFunc = function () {
  3913. counter = (counter + 1) % 2;
  3914. textNode.data = String(counter);
  3915. };
  3916. } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
  3917. // Fallback to setImmediate.
  3918. // Technically it leverages the (macro) task queue,
  3919. // but it is still a better choice than setTimeout.
  3920. timerFunc = function () {
  3921. setImmediate(flushCallbacks);
  3922. };
  3923. } else {
  3924. // Fallback to setTimeout.
  3925. timerFunc = function () {
  3926. setTimeout(flushCallbacks, 0);
  3927. };
  3928. }
  3929. function nextTick (cb, ctx) {
  3930. var _resolve;
  3931. callbacks.push(function () {
  3932. if (cb) {
  3933. try {
  3934. cb.call(ctx);
  3935. } catch (e) {
  3936. handleError(e, ctx, 'nextTick');
  3937. }
  3938. } else if (_resolve) {
  3939. _resolve(ctx);
  3940. }
  3941. });
  3942. if (!pending) {
  3943. pending = true;
  3944. timerFunc();
  3945. }
  3946. // $flow-disable-line
  3947. if (!cb && typeof Promise !== 'undefined') {
  3948. return new Promise(function (resolve) {
  3949. _resolve = resolve;
  3950. })
  3951. }
  3952. }
  3953. /* */
  3954. /* not type checking this file because flow doesn't play well with Proxy */
  3955. var initProxy;
  3956. if (true) {
  3957. var allowedGlobals = makeMap(
  3958. 'Infinity,undefined,NaN,isFinite,isNaN,' +
  3959. 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
  3960. 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
  3961. 'require' // for Webpack/Browserify
  3962. );
  3963. var warnNonPresent = function (target, key) {
  3964. warn(
  3965. "Property or method \"" + key + "\" is not defined on the instance but " +
  3966. 'referenced during render. Make sure that this property is reactive, ' +
  3967. 'either in the data option, or for class-based components, by ' +
  3968. 'initializing the property. ' +
  3969. 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',
  3970. target
  3971. );
  3972. };
  3973. var warnReservedPrefix = function (target, key) {
  3974. warn(
  3975. "Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " +
  3976. 'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
  3977. 'prevent conflicts with Vue internals. ' +
  3978. 'See: https://vuejs.org/v2/api/#data',
  3979. target
  3980. );
  3981. };
  3982. var hasProxy =
  3983. typeof Proxy !== 'undefined' && isNative(Proxy);
  3984. if (hasProxy) {
  3985. var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
  3986. config.keyCodes = new Proxy(config.keyCodes, {
  3987. set: function set (target, key, value) {
  3988. if (isBuiltInModifier(key)) {
  3989. warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key));
  3990. return false
  3991. } else {
  3992. target[key] = value;
  3993. return true
  3994. }
  3995. }
  3996. });
  3997. }
  3998. var hasHandler = {
  3999. has: function has (target, key) {
  4000. var has = key in target;
  4001. var isAllowed = allowedGlobals(key) ||
  4002. (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));
  4003. if (!has && !isAllowed) {
  4004. if (key in target.$data) { warnReservedPrefix(target, key); }
  4005. else { warnNonPresent(target, key); }
  4006. }
  4007. return has || !isAllowed
  4008. }
  4009. };
  4010. var getHandler = {
  4011. get: function get (target, key) {
  4012. if (typeof key === 'string' && !(key in target)) {
  4013. if (key in target.$data) { warnReservedPrefix(target, key); }
  4014. else { warnNonPresent(target, key); }
  4015. }
  4016. return target[key]
  4017. }
  4018. };
  4019. initProxy = function initProxy (vm) {
  4020. if (hasProxy) {
  4021. // determine which proxy handler to use
  4022. var options = vm.$options;
  4023. var handlers = options.render && options.render._withStripped
  4024. ? getHandler
  4025. : hasHandler;
  4026. vm._renderProxy = new Proxy(vm, handlers);
  4027. } else {
  4028. vm._renderProxy = vm;
  4029. }
  4030. };
  4031. }
  4032. /* */
  4033. var seenObjects = new _Set();
  4034. /**
  4035. * Recursively traverse an object to evoke all converted
  4036. * getters, so that every nested property inside the object
  4037. * is collected as a "deep" dependency.
  4038. */
  4039. function traverse (val) {
  4040. _traverse(val, seenObjects);
  4041. seenObjects.clear();
  4042. }
  4043. function _traverse (val, seen) {
  4044. var i, keys;
  4045. var isA = Array.isArray(val);
  4046. if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {
  4047. return
  4048. }
  4049. if (val.__ob__) {
  4050. var depId = val.__ob__.dep.id;
  4051. if (seen.has(depId)) {
  4052. return
  4053. }
  4054. seen.add(depId);
  4055. }
  4056. if (isA) {
  4057. i = val.length;
  4058. while (i--) { _traverse(val[i], seen); }
  4059. } else {
  4060. keys = Object.keys(val);
  4061. i = keys.length;
  4062. while (i--) { _traverse(val[keys[i]], seen); }
  4063. }
  4064. }
  4065. var mark;
  4066. var measure;
  4067. if (true) {
  4068. var perf = inBrowser && window.performance;
  4069. /* istanbul ignore if */
  4070. if (
  4071. perf &&
  4072. perf.mark &&
  4073. perf.measure &&
  4074. perf.clearMarks &&
  4075. perf.clearMeasures
  4076. ) {
  4077. mark = function (tag) { return perf.mark(tag); };
  4078. measure = function (name, startTag, endTag) {
  4079. perf.measure(name, startTag, endTag);
  4080. perf.clearMarks(startTag);
  4081. perf.clearMarks(endTag);
  4082. // perf.clearMeasures(name)
  4083. };
  4084. }
  4085. }
  4086. /* */
  4087. var normalizeEvent = cached(function (name) {
  4088. var passive = name.charAt(0) === '&';
  4089. name = passive ? name.slice(1) : name;
  4090. var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first
  4091. name = once$$1 ? name.slice(1) : name;
  4092. var capture = name.charAt(0) === '!';
  4093. name = capture ? name.slice(1) : name;
  4094. return {
  4095. name: name,
  4096. once: once$$1,
  4097. capture: capture,
  4098. passive: passive
  4099. }
  4100. });
  4101. function createFnInvoker (fns, vm) {
  4102. function invoker () {
  4103. var arguments$1 = arguments;
  4104. var fns = invoker.fns;
  4105. if (Array.isArray(fns)) {
  4106. var cloned = fns.slice();
  4107. for (var i = 0; i < cloned.length; i++) {
  4108. invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler");
  4109. }
  4110. } else {
  4111. // return handler return value for single handlers
  4112. return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler")
  4113. }
  4114. }
  4115. invoker.fns = fns;
  4116. return invoker
  4117. }
  4118. function updateListeners (
  4119. on,
  4120. oldOn,
  4121. add,
  4122. remove$$1,
  4123. createOnceHandler,
  4124. vm
  4125. ) {
  4126. var name, def$$1, cur, old, event;
  4127. for (name in on) {
  4128. def$$1 = cur = on[name];
  4129. old = oldOn[name];
  4130. event = normalizeEvent(name);
  4131. if (isUndef(cur)) {
  4132. true && warn(
  4133. "Invalid handler for event \"" + (event.name) + "\": got " + String(cur),
  4134. vm
  4135. );
  4136. } else if (isUndef(old)) {
  4137. if (isUndef(cur.fns)) {
  4138. cur = on[name] = createFnInvoker(cur, vm);
  4139. }
  4140. if (isTrue(event.once)) {
  4141. cur = on[name] = createOnceHandler(event.name, cur, event.capture);
  4142. }
  4143. add(event.name, cur, event.capture, event.passive, event.params);
  4144. } else if (cur !== old) {
  4145. old.fns = cur;
  4146. on[name] = old;
  4147. }
  4148. }
  4149. for (name in oldOn) {
  4150. if (isUndef(on[name])) {
  4151. event = normalizeEvent(name);
  4152. remove$$1(event.name, oldOn[name], event.capture);
  4153. }
  4154. }
  4155. }
  4156. /* */
  4157. /* */
  4158. // fixed by xxxxxx (mp properties)
  4159. function extractPropertiesFromVNodeData(data, Ctor, res, context) {
  4160. var propOptions = Ctor.options.mpOptions && Ctor.options.mpOptions.properties;
  4161. if (isUndef(propOptions)) {
  4162. return res
  4163. }
  4164. var externalClasses = Ctor.options.mpOptions.externalClasses || [];
  4165. var attrs = data.attrs;
  4166. var props = data.props;
  4167. if (isDef(attrs) || isDef(props)) {
  4168. for (var key in propOptions) {
  4169. var altKey = hyphenate(key);
  4170. var result = checkProp(res, props, key, altKey, true) ||
  4171. checkProp(res, attrs, key, altKey, false);
  4172. // externalClass
  4173. if (
  4174. result &&
  4175. res[key] &&
  4176. externalClasses.indexOf(altKey) !== -1 &&
  4177. context[camelize(res[key])]
  4178. ) {
  4179. // 赋值 externalClass 真正的值(模板里 externalClass 的值可能是字符串)
  4180. res[key] = context[camelize(res[key])];
  4181. }
  4182. }
  4183. }
  4184. return res
  4185. }
  4186. function extractPropsFromVNodeData (
  4187. data,
  4188. Ctor,
  4189. tag,
  4190. context// fixed by xxxxxx
  4191. ) {
  4192. // we are only extracting raw values here.
  4193. // validation and default values are handled in the child
  4194. // component itself.
  4195. var propOptions = Ctor.options.props;
  4196. if (isUndef(propOptions)) {
  4197. // fixed by xxxxxx
  4198. return extractPropertiesFromVNodeData(data, Ctor, {}, context)
  4199. }
  4200. var res = {};
  4201. var attrs = data.attrs;
  4202. var props = data.props;
  4203. if (isDef(attrs) || isDef(props)) {
  4204. for (var key in propOptions) {
  4205. var altKey = hyphenate(key);
  4206. if (true) {
  4207. var keyInLowerCase = key.toLowerCase();
  4208. if (
  4209. key !== keyInLowerCase &&
  4210. attrs && hasOwn(attrs, keyInLowerCase)
  4211. ) {
  4212. tip(
  4213. "Prop \"" + keyInLowerCase + "\" is passed to component " +
  4214. (formatComponentName(tag || Ctor)) + ", but the declared prop name is" +
  4215. " \"" + key + "\". " +
  4216. "Note that HTML attributes are case-insensitive and camelCased " +
  4217. "props need to use their kebab-case equivalents when using in-DOM " +
  4218. "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."
  4219. );
  4220. }
  4221. }
  4222. checkProp(res, props, key, altKey, true) ||
  4223. checkProp(res, attrs, key, altKey, false);
  4224. }
  4225. }
  4226. // fixed by xxxxxx
  4227. return extractPropertiesFromVNodeData(data, Ctor, res, context)
  4228. }
  4229. function checkProp (
  4230. res,
  4231. hash,
  4232. key,
  4233. altKey,
  4234. preserve
  4235. ) {
  4236. if (isDef(hash)) {
  4237. if (hasOwn(hash, key)) {
  4238. res[key] = hash[key];
  4239. if (!preserve) {
  4240. delete hash[key];
  4241. }
  4242. return true
  4243. } else if (hasOwn(hash, altKey)) {
  4244. res[key] = hash[altKey];
  4245. if (!preserve) {
  4246. delete hash[altKey];
  4247. }
  4248. return true
  4249. }
  4250. }
  4251. return false
  4252. }
  4253. /* */
  4254. // The template compiler attempts to minimize the need for normalization by
  4255. // statically analyzing the template at compile time.
  4256. //
  4257. // For plain HTML markup, normalization can be completely skipped because the
  4258. // generated render function is guaranteed to return Array<VNode>. There are
  4259. // two cases where extra normalization is needed:
  4260. // 1. When the children contains components - because a functional component
  4261. // may return an Array instead of a single root. In this case, just a simple
  4262. // normalization is needed - if any child is an Array, we flatten the whole
  4263. // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
  4264. // because functional components already normalize their own children.
  4265. function simpleNormalizeChildren (children) {
  4266. for (var i = 0; i < children.length; i++) {
  4267. if (Array.isArray(children[i])) {
  4268. return Array.prototype.concat.apply([], children)
  4269. }
  4270. }
  4271. return children
  4272. }
  4273. // 2. When the children contains constructs that always generated nested Arrays,
  4274. // e.g. <template>, <slot>, v-for, or when the children is provided by user
  4275. // with hand-written render functions / JSX. In such cases a full normalization
  4276. // is needed to cater to all possible types of children values.
  4277. function normalizeChildren (children) {
  4278. return isPrimitive(children)
  4279. ? [createTextVNode(children)]
  4280. : Array.isArray(children)
  4281. ? normalizeArrayChildren(children)
  4282. : undefined
  4283. }
  4284. function isTextNode (node) {
  4285. return isDef(node) && isDef(node.text) && isFalse(node.isComment)
  4286. }
  4287. function normalizeArrayChildren (children, nestedIndex) {
  4288. var res = [];
  4289. var i, c, lastIndex, last;
  4290. for (i = 0; i < children.length; i++) {
  4291. c = children[i];
  4292. if (isUndef(c) || typeof c === 'boolean') { continue }
  4293. lastIndex = res.length - 1;
  4294. last = res[lastIndex];
  4295. // nested
  4296. if (Array.isArray(c)) {
  4297. if (c.length > 0) {
  4298. c = normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i));
  4299. // merge adjacent text nodes
  4300. if (isTextNode(c[0]) && isTextNode(last)) {
  4301. res[lastIndex] = createTextVNode(last.text + (c[0]).text);
  4302. c.shift();
  4303. }
  4304. res.push.apply(res, c);
  4305. }
  4306. } else if (isPrimitive(c)) {
  4307. if (isTextNode(last)) {
  4308. // merge adjacent text nodes
  4309. // this is necessary for SSR hydration because text nodes are
  4310. // essentially merged when rendered to HTML strings
  4311. res[lastIndex] = createTextVNode(last.text + c);
  4312. } else if (c !== '') {
  4313. // convert primitive to vnode
  4314. res.push(createTextVNode(c));
  4315. }
  4316. } else {
  4317. if (isTextNode(c) && isTextNode(last)) {
  4318. // merge adjacent text nodes
  4319. res[lastIndex] = createTextVNode(last.text + c.text);
  4320. } else {
  4321. // default key for nested array children (likely generated by v-for)
  4322. if (isTrue(children._isVList) &&
  4323. isDef(c.tag) &&
  4324. isUndef(c.key) &&
  4325. isDef(nestedIndex)) {
  4326. c.key = "__vlist" + nestedIndex + "_" + i + "__";
  4327. }
  4328. res.push(c);
  4329. }
  4330. }
  4331. }
  4332. return res
  4333. }
  4334. /* */
  4335. function initProvide (vm) {
  4336. var provide = vm.$options.provide;
  4337. if (provide) {
  4338. vm._provided = typeof provide === 'function'
  4339. ? provide.call(vm)
  4340. : provide;
  4341. }
  4342. }
  4343. function initInjections (vm) {
  4344. var result = resolveInject(vm.$options.inject, vm);
  4345. if (result) {
  4346. toggleObserving(false);
  4347. Object.keys(result).forEach(function (key) {
  4348. /* istanbul ignore else */
  4349. if (true) {
  4350. defineReactive$$1(vm, key, result[key], function () {
  4351. warn(
  4352. "Avoid mutating an injected value directly since the changes will be " +
  4353. "overwritten whenever the provided component re-renders. " +
  4354. "injection being mutated: \"" + key + "\"",
  4355. vm
  4356. );
  4357. });
  4358. } else {}
  4359. });
  4360. toggleObserving(true);
  4361. }
  4362. }
  4363. function resolveInject (inject, vm) {
  4364. if (inject) {
  4365. // inject is :any because flow is not smart enough to figure out cached
  4366. var result = Object.create(null);
  4367. var keys = hasSymbol
  4368. ? Reflect.ownKeys(inject)
  4369. : Object.keys(inject);
  4370. for (var i = 0; i < keys.length; i++) {
  4371. var key = keys[i];
  4372. // #6574 in case the inject object is observed...
  4373. if (key === '__ob__') { continue }
  4374. var provideKey = inject[key].from;
  4375. var source = vm;
  4376. while (source) {
  4377. if (source._provided && hasOwn(source._provided, provideKey)) {
  4378. result[key] = source._provided[provideKey];
  4379. break
  4380. }
  4381. source = source.$parent;
  4382. }
  4383. if (!source) {
  4384. if ('default' in inject[key]) {
  4385. var provideDefault = inject[key].default;
  4386. result[key] = typeof provideDefault === 'function'
  4387. ? provideDefault.call(vm)
  4388. : provideDefault;
  4389. } else if (true) {
  4390. warn(("Injection \"" + key + "\" not found"), vm);
  4391. }
  4392. }
  4393. }
  4394. return result
  4395. }
  4396. }
  4397. /* */
  4398. /**
  4399. * Runtime helper for resolving raw children VNodes into a slot object.
  4400. */
  4401. function resolveSlots (
  4402. children,
  4403. context
  4404. ) {
  4405. if (!children || !children.length) {
  4406. return {}
  4407. }
  4408. var slots = {};
  4409. for (var i = 0, l = children.length; i < l; i++) {
  4410. var child = children[i];
  4411. var data = child.data;
  4412. // remove slot attribute if the node is resolved as a Vue slot node
  4413. if (data && data.attrs && data.attrs.slot) {
  4414. delete data.attrs.slot;
  4415. }
  4416. // named slots should only be respected if the vnode was rendered in the
  4417. // same context.
  4418. if ((child.context === context || child.fnContext === context) &&
  4419. data && data.slot != null
  4420. ) {
  4421. var name = data.slot;
  4422. var slot = (slots[name] || (slots[name] = []));
  4423. if (child.tag === 'template') {
  4424. slot.push.apply(slot, child.children || []);
  4425. } else {
  4426. slot.push(child);
  4427. }
  4428. } else {
  4429. // fixed by xxxxxx 临时 hack 掉 uni-app 中的异步 name slot page
  4430. if(child.asyncMeta && child.asyncMeta.data && child.asyncMeta.data.slot === 'page'){
  4431. (slots['page'] || (slots['page'] = [])).push(child);
  4432. }else{
  4433. (slots.default || (slots.default = [])).push(child);
  4434. }
  4435. }
  4436. }
  4437. // ignore slots that contains only whitespace
  4438. for (var name$1 in slots) {
  4439. if (slots[name$1].every(isWhitespace)) {
  4440. delete slots[name$1];
  4441. }
  4442. }
  4443. return slots
  4444. }
  4445. function isWhitespace (node) {
  4446. return (node.isComment && !node.asyncFactory) || node.text === ' '
  4447. }
  4448. /* */
  4449. function normalizeScopedSlots (
  4450. slots,
  4451. normalSlots,
  4452. prevSlots
  4453. ) {
  4454. var res;
  4455. var hasNormalSlots = Object.keys(normalSlots).length > 0;
  4456. var isStable = slots ? !!slots.$stable : !hasNormalSlots;
  4457. var key = slots && slots.$key;
  4458. if (!slots) {
  4459. res = {};
  4460. } else if (slots._normalized) {
  4461. // fast path 1: child component re-render only, parent did not change
  4462. return slots._normalized
  4463. } else if (
  4464. isStable &&
  4465. prevSlots &&
  4466. prevSlots !== emptyObject &&
  4467. key === prevSlots.$key &&
  4468. !hasNormalSlots &&
  4469. !prevSlots.$hasNormal
  4470. ) {
  4471. // fast path 2: stable scoped slots w/ no normal slots to proxy,
  4472. // only need to normalize once
  4473. return prevSlots
  4474. } else {
  4475. res = {};
  4476. for (var key$1 in slots) {
  4477. if (slots[key$1] && key$1[0] !== '$') {
  4478. res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);
  4479. }
  4480. }
  4481. }
  4482. // expose normal slots on scopedSlots
  4483. for (var key$2 in normalSlots) {
  4484. if (!(key$2 in res)) {
  4485. res[key$2] = proxyNormalSlot(normalSlots, key$2);
  4486. }
  4487. }
  4488. // avoriaz seems to mock a non-extensible $scopedSlots object
  4489. // and when that is passed down this would cause an error
  4490. if (slots && Object.isExtensible(slots)) {
  4491. (slots)._normalized = res;
  4492. }
  4493. def(res, '$stable', isStable);
  4494. def(res, '$key', key);
  4495. def(res, '$hasNormal', hasNormalSlots);
  4496. return res
  4497. }
  4498. function normalizeScopedSlot(normalSlots, key, fn) {
  4499. var normalized = function () {
  4500. var res = arguments.length ? fn.apply(null, arguments) : fn({});
  4501. res = res && typeof res === 'object' && !Array.isArray(res)
  4502. ? [res] // single vnode
  4503. : normalizeChildren(res);
  4504. return res && (
  4505. res.length === 0 ||
  4506. (res.length === 1 && res[0].isComment) // #9658
  4507. ) ? undefined
  4508. : res
  4509. };
  4510. // this is a slot using the new v-slot syntax without scope. although it is
  4511. // compiled as a scoped slot, render fn users would expect it to be present
  4512. // on this.$slots because the usage is semantically a normal slot.
  4513. if (fn.proxy) {
  4514. Object.defineProperty(normalSlots, key, {
  4515. get: normalized,
  4516. enumerable: true,
  4517. configurable: true
  4518. });
  4519. }
  4520. return normalized
  4521. }
  4522. function proxyNormalSlot(slots, key) {
  4523. return function () { return slots[key]; }
  4524. }
  4525. /* */
  4526. /**
  4527. * Runtime helper for rendering v-for lists.
  4528. */
  4529. function renderList (
  4530. val,
  4531. render
  4532. ) {
  4533. var ret, i, l, keys, key;
  4534. if (Array.isArray(val) || typeof val === 'string') {
  4535. ret = new Array(val.length);
  4536. for (i = 0, l = val.length; i < l; i++) {
  4537. ret[i] = render(val[i], i, i, i); // fixed by xxxxxx
  4538. }
  4539. } else if (typeof val === 'number') {
  4540. ret = new Array(val);
  4541. for (i = 0; i < val; i++) {
  4542. ret[i] = render(i + 1, i, i, i); // fixed by xxxxxx
  4543. }
  4544. } else if (isObject(val)) {
  4545. if (hasSymbol && val[Symbol.iterator]) {
  4546. ret = [];
  4547. var iterator = val[Symbol.iterator]();
  4548. var result = iterator.next();
  4549. while (!result.done) {
  4550. ret.push(render(result.value, ret.length, i, i++)); // fixed by xxxxxx
  4551. result = iterator.next();
  4552. }
  4553. } else {
  4554. keys = Object.keys(val);
  4555. ret = new Array(keys.length);
  4556. for (i = 0, l = keys.length; i < l; i++) {
  4557. key = keys[i];
  4558. ret[i] = render(val[key], key, i, i); // fixed by xxxxxx
  4559. }
  4560. }
  4561. }
  4562. if (!isDef(ret)) {
  4563. ret = [];
  4564. }
  4565. (ret)._isVList = true;
  4566. return ret
  4567. }
  4568. /* */
  4569. /**
  4570. * Runtime helper for rendering <slot>
  4571. */
  4572. function renderSlot (
  4573. name,
  4574. fallback,
  4575. props,
  4576. bindObject
  4577. ) {
  4578. var scopedSlotFn = this.$scopedSlots[name];
  4579. var nodes;
  4580. if (scopedSlotFn) { // scoped slot
  4581. props = props || {};
  4582. if (bindObject) {
  4583. if ( true && !isObject(bindObject)) {
  4584. warn(
  4585. 'slot v-bind without argument expects an Object',
  4586. this
  4587. );
  4588. }
  4589. props = extend(extend({}, bindObject), props);
  4590. }
  4591. // fixed by xxxxxx app-plus scopedSlot
  4592. nodes = scopedSlotFn(props, this, props._i) || fallback;
  4593. } else {
  4594. nodes = this.$slots[name] || fallback;
  4595. }
  4596. var target = props && props.slot;
  4597. if (target) {
  4598. return this.$createElement('template', { slot: target }, nodes)
  4599. } else {
  4600. return nodes
  4601. }
  4602. }
  4603. /* */
  4604. /**
  4605. * Runtime helper for resolving filters
  4606. */
  4607. function resolveFilter (id) {
  4608. return resolveAsset(this.$options, 'filters', id, true) || identity
  4609. }
  4610. /* */
  4611. function isKeyNotMatch (expect, actual) {
  4612. if (Array.isArray(expect)) {
  4613. return expect.indexOf(actual) === -1
  4614. } else {
  4615. return expect !== actual
  4616. }
  4617. }
  4618. /**
  4619. * Runtime helper for checking keyCodes from config.
  4620. * exposed as Vue.prototype._k
  4621. * passing in eventKeyName as last argument separately for backwards compat
  4622. */
  4623. function checkKeyCodes (
  4624. eventKeyCode,
  4625. key,
  4626. builtInKeyCode,
  4627. eventKeyName,
  4628. builtInKeyName
  4629. ) {
  4630. var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
  4631. if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
  4632. return isKeyNotMatch(builtInKeyName, eventKeyName)
  4633. } else if (mappedKeyCode) {
  4634. return isKeyNotMatch(mappedKeyCode, eventKeyCode)
  4635. } else if (eventKeyName) {
  4636. return hyphenate(eventKeyName) !== key
  4637. }
  4638. }
  4639. /* */
  4640. /**
  4641. * Runtime helper for merging v-bind="object" into a VNode's data.
  4642. */
  4643. function bindObjectProps (
  4644. data,
  4645. tag,
  4646. value,
  4647. asProp,
  4648. isSync
  4649. ) {
  4650. if (value) {
  4651. if (!isObject(value)) {
  4652. true && warn(
  4653. 'v-bind without argument expects an Object or Array value',
  4654. this
  4655. );
  4656. } else {
  4657. if (Array.isArray(value)) {
  4658. value = toObject(value);
  4659. }
  4660. var hash;
  4661. var loop = function ( key ) {
  4662. if (
  4663. key === 'class' ||
  4664. key === 'style' ||
  4665. isReservedAttribute(key)
  4666. ) {
  4667. hash = data;
  4668. } else {
  4669. var type = data.attrs && data.attrs.type;
  4670. hash = asProp || config.mustUseProp(tag, type, key)
  4671. ? data.domProps || (data.domProps = {})
  4672. : data.attrs || (data.attrs = {});
  4673. }
  4674. var camelizedKey = camelize(key);
  4675. var hyphenatedKey = hyphenate(key);
  4676. if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
  4677. hash[key] = value[key];
  4678. if (isSync) {
  4679. var on = data.on || (data.on = {});
  4680. on[("update:" + key)] = function ($event) {
  4681. value[key] = $event;
  4682. };
  4683. }
  4684. }
  4685. };
  4686. for (var key in value) loop( key );
  4687. }
  4688. }
  4689. return data
  4690. }
  4691. /* */
  4692. /**
  4693. * Runtime helper for rendering static trees.
  4694. */
  4695. function renderStatic (
  4696. index,
  4697. isInFor
  4698. ) {
  4699. var cached = this._staticTrees || (this._staticTrees = []);
  4700. var tree = cached[index];
  4701. // if has already-rendered static tree and not inside v-for,
  4702. // we can reuse the same tree.
  4703. if (tree && !isInFor) {
  4704. return tree
  4705. }
  4706. // otherwise, render a fresh tree.
  4707. tree = cached[index] = this.$options.staticRenderFns[index].call(
  4708. this._renderProxy,
  4709. null,
  4710. this // for render fns generated for functional component templates
  4711. );
  4712. markStatic(tree, ("__static__" + index), false);
  4713. return tree
  4714. }
  4715. /**
  4716. * Runtime helper for v-once.
  4717. * Effectively it means marking the node as static with a unique key.
  4718. */
  4719. function markOnce (
  4720. tree,
  4721. index,
  4722. key
  4723. ) {
  4724. markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true);
  4725. return tree
  4726. }
  4727. function markStatic (
  4728. tree,
  4729. key,
  4730. isOnce
  4731. ) {
  4732. if (Array.isArray(tree)) {
  4733. for (var i = 0; i < tree.length; i++) {
  4734. if (tree[i] && typeof tree[i] !== 'string') {
  4735. markStaticNode(tree[i], (key + "_" + i), isOnce);
  4736. }
  4737. }
  4738. } else {
  4739. markStaticNode(tree, key, isOnce);
  4740. }
  4741. }
  4742. function markStaticNode (node, key, isOnce) {
  4743. node.isStatic = true;
  4744. node.key = key;
  4745. node.isOnce = isOnce;
  4746. }
  4747. /* */
  4748. function bindObjectListeners (data, value) {
  4749. if (value) {
  4750. if (!isPlainObject(value)) {
  4751. true && warn(
  4752. 'v-on without argument expects an Object value',
  4753. this
  4754. );
  4755. } else {
  4756. var on = data.on = data.on ? extend({}, data.on) : {};
  4757. for (var key in value) {
  4758. var existing = on[key];
  4759. var ours = value[key];
  4760. on[key] = existing ? [].concat(existing, ours) : ours;
  4761. }
  4762. }
  4763. }
  4764. return data
  4765. }
  4766. /* */
  4767. function resolveScopedSlots (
  4768. fns, // see flow/vnode
  4769. res,
  4770. // the following are added in 2.6
  4771. hasDynamicKeys,
  4772. contentHashKey
  4773. ) {
  4774. res = res || { $stable: !hasDynamicKeys };
  4775. for (var i = 0; i < fns.length; i++) {
  4776. var slot = fns[i];
  4777. if (Array.isArray(slot)) {
  4778. resolveScopedSlots(slot, res, hasDynamicKeys);
  4779. } else if (slot) {
  4780. // marker for reverse proxying v-slot without scope on this.$slots
  4781. if (slot.proxy) {
  4782. slot.fn.proxy = true;
  4783. }
  4784. res[slot.key] = slot.fn;
  4785. }
  4786. }
  4787. if (contentHashKey) {
  4788. (res).$key = contentHashKey;
  4789. }
  4790. return res
  4791. }
  4792. /* */
  4793. function bindDynamicKeys (baseObj, values) {
  4794. for (var i = 0; i < values.length; i += 2) {
  4795. var key = values[i];
  4796. if (typeof key === 'string' && key) {
  4797. baseObj[values[i]] = values[i + 1];
  4798. } else if ( true && key !== '' && key !== null) {
  4799. // null is a special value for explicitly removing a binding
  4800. warn(
  4801. ("Invalid value for dynamic directive argument (expected string or null): " + key),
  4802. this
  4803. );
  4804. }
  4805. }
  4806. return baseObj
  4807. }
  4808. // helper to dynamically append modifier runtime markers to event names.
  4809. // ensure only append when value is already string, otherwise it will be cast
  4810. // to string and cause the type check to miss.
  4811. function prependModifier (value, symbol) {
  4812. return typeof value === 'string' ? symbol + value : value
  4813. }
  4814. /* */
  4815. function installRenderHelpers (target) {
  4816. target._o = markOnce;
  4817. target._n = toNumber;
  4818. target._s = toString;
  4819. target._l = renderList;
  4820. target._t = renderSlot;
  4821. target._q = looseEqual;
  4822. target._i = looseIndexOf;
  4823. target._m = renderStatic;
  4824. target._f = resolveFilter;
  4825. target._k = checkKeyCodes;
  4826. target._b = bindObjectProps;
  4827. target._v = createTextVNode;
  4828. target._e = createEmptyVNode;
  4829. target._u = resolveScopedSlots;
  4830. target._g = bindObjectListeners;
  4831. target._d = bindDynamicKeys;
  4832. target._p = prependModifier;
  4833. }
  4834. /* */
  4835. function FunctionalRenderContext (
  4836. data,
  4837. props,
  4838. children,
  4839. parent,
  4840. Ctor
  4841. ) {
  4842. var this$1 = this;
  4843. var options = Ctor.options;
  4844. // ensure the createElement function in functional components
  4845. // gets a unique context - this is necessary for correct named slot check
  4846. var contextVm;
  4847. if (hasOwn(parent, '_uid')) {
  4848. contextVm = Object.create(parent);
  4849. // $flow-disable-line
  4850. contextVm._original = parent;
  4851. } else {
  4852. // the context vm passed in is a functional context as well.
  4853. // in this case we want to make sure we are able to get a hold to the
  4854. // real context instance.
  4855. contextVm = parent;
  4856. // $flow-disable-line
  4857. parent = parent._original;
  4858. }
  4859. var isCompiled = isTrue(options._compiled);
  4860. var needNormalization = !isCompiled;
  4861. this.data = data;
  4862. this.props = props;
  4863. this.children = children;
  4864. this.parent = parent;
  4865. this.listeners = data.on || emptyObject;
  4866. this.injections = resolveInject(options.inject, parent);
  4867. this.slots = function () {
  4868. if (!this$1.$slots) {
  4869. normalizeScopedSlots(
  4870. data.scopedSlots,
  4871. this$1.$slots = resolveSlots(children, parent)
  4872. );
  4873. }
  4874. return this$1.$slots
  4875. };
  4876. Object.defineProperty(this, 'scopedSlots', ({
  4877. enumerable: true,
  4878. get: function get () {
  4879. return normalizeScopedSlots(data.scopedSlots, this.slots())
  4880. }
  4881. }));
  4882. // support for compiled functional template
  4883. if (isCompiled) {
  4884. // exposing $options for renderStatic()
  4885. this.$options = options;
  4886. // pre-resolve slots for renderSlot()
  4887. this.$slots = this.slots();
  4888. this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);
  4889. }
  4890. if (options._scopeId) {
  4891. this._c = function (a, b, c, d) {
  4892. var vnode = createElement(contextVm, a, b, c, d, needNormalization);
  4893. if (vnode && !Array.isArray(vnode)) {
  4894. vnode.fnScopeId = options._scopeId;
  4895. vnode.fnContext = parent;
  4896. }
  4897. return vnode
  4898. };
  4899. } else {
  4900. this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };
  4901. }
  4902. }
  4903. installRenderHelpers(FunctionalRenderContext.prototype);
  4904. function createFunctionalComponent (
  4905. Ctor,
  4906. propsData,
  4907. data,
  4908. contextVm,
  4909. children
  4910. ) {
  4911. var options = Ctor.options;
  4912. var props = {};
  4913. var propOptions = options.props;
  4914. if (isDef(propOptions)) {
  4915. for (var key in propOptions) {
  4916. props[key] = validateProp(key, propOptions, propsData || emptyObject);
  4917. }
  4918. } else {
  4919. if (isDef(data.attrs)) { mergeProps(props, data.attrs); }
  4920. if (isDef(data.props)) { mergeProps(props, data.props); }
  4921. }
  4922. var renderContext = new FunctionalRenderContext(
  4923. data,
  4924. props,
  4925. children,
  4926. contextVm,
  4927. Ctor
  4928. );
  4929. var vnode = options.render.call(null, renderContext._c, renderContext);
  4930. if (vnode instanceof VNode) {
  4931. return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)
  4932. } else if (Array.isArray(vnode)) {
  4933. var vnodes = normalizeChildren(vnode) || [];
  4934. var res = new Array(vnodes.length);
  4935. for (var i = 0; i < vnodes.length; i++) {
  4936. res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
  4937. }
  4938. return res
  4939. }
  4940. }
  4941. function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {
  4942. // #7817 clone node before setting fnContext, otherwise if the node is reused
  4943. // (e.g. it was from a cached normal slot) the fnContext causes named slots
  4944. // that should not be matched to match.
  4945. var clone = cloneVNode(vnode);
  4946. clone.fnContext = contextVm;
  4947. clone.fnOptions = options;
  4948. if (true) {
  4949. (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;
  4950. }
  4951. if (data.slot) {
  4952. (clone.data || (clone.data = {})).slot = data.slot;
  4953. }
  4954. return clone
  4955. }
  4956. function mergeProps (to, from) {
  4957. for (var key in from) {
  4958. to[camelize(key)] = from[key];
  4959. }
  4960. }
  4961. /* */
  4962. /* */
  4963. /* */
  4964. /* */
  4965. // inline hooks to be invoked on component VNodes during patch
  4966. var componentVNodeHooks = {
  4967. init: function init (vnode, hydrating) {
  4968. if (
  4969. vnode.componentInstance &&
  4970. !vnode.componentInstance._isDestroyed &&
  4971. vnode.data.keepAlive
  4972. ) {
  4973. // kept-alive components, treat as a patch
  4974. var mountedNode = vnode; // work around flow
  4975. componentVNodeHooks.prepatch(mountedNode, mountedNode);
  4976. } else {
  4977. var child = vnode.componentInstance = createComponentInstanceForVnode(
  4978. vnode,
  4979. activeInstance
  4980. );
  4981. child.$mount(hydrating ? vnode.elm : undefined, hydrating);
  4982. }
  4983. },
  4984. prepatch: function prepatch (oldVnode, vnode) {
  4985. var options = vnode.componentOptions;
  4986. var child = vnode.componentInstance = oldVnode.componentInstance;
  4987. updateChildComponent(
  4988. child,
  4989. options.propsData, // updated props
  4990. options.listeners, // updated listeners
  4991. vnode, // new parent vnode
  4992. options.children // new children
  4993. );
  4994. },
  4995. insert: function insert (vnode) {
  4996. var context = vnode.context;
  4997. var componentInstance = vnode.componentInstance;
  4998. if (!componentInstance._isMounted) {
  4999. callHook(componentInstance, 'onServiceCreated');
  5000. callHook(componentInstance, 'onServiceAttached');
  5001. componentInstance._isMounted = true;
  5002. callHook(componentInstance, 'mounted');
  5003. }
  5004. if (vnode.data.keepAlive) {
  5005. if (context._isMounted) {
  5006. // vue-router#1212
  5007. // During updates, a kept-alive component's child components may
  5008. // change, so directly walking the tree here may call activated hooks
  5009. // on incorrect children. Instead we push them into a queue which will
  5010. // be processed after the whole patch process ended.
  5011. queueActivatedComponent(componentInstance);
  5012. } else {
  5013. activateChildComponent(componentInstance, true /* direct */);
  5014. }
  5015. }
  5016. },
  5017. destroy: function destroy (vnode) {
  5018. var componentInstance = vnode.componentInstance;
  5019. if (!componentInstance._isDestroyed) {
  5020. if (!vnode.data.keepAlive) {
  5021. componentInstance.$destroy();
  5022. } else {
  5023. deactivateChildComponent(componentInstance, true /* direct */);
  5024. }
  5025. }
  5026. }
  5027. };
  5028. var hooksToMerge = Object.keys(componentVNodeHooks);
  5029. function createComponent (
  5030. Ctor,
  5031. data,
  5032. context,
  5033. children,
  5034. tag
  5035. ) {
  5036. if (isUndef(Ctor)) {
  5037. return
  5038. }
  5039. var baseCtor = context.$options._base;
  5040. // plain options object: turn it into a constructor
  5041. if (isObject(Ctor)) {
  5042. Ctor = baseCtor.extend(Ctor);
  5043. }
  5044. // if at this stage it's not a constructor or an async component factory,
  5045. // reject.
  5046. if (typeof Ctor !== 'function') {
  5047. if (true) {
  5048. warn(("Invalid Component definition: " + (String(Ctor))), context);
  5049. }
  5050. return
  5051. }
  5052. // async component
  5053. var asyncFactory;
  5054. if (isUndef(Ctor.cid)) {
  5055. asyncFactory = Ctor;
  5056. Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
  5057. if (Ctor === undefined) {
  5058. // return a placeholder node for async component, which is rendered
  5059. // as a comment node but preserves all the raw information for the node.
  5060. // the information will be used for async server-rendering and hydration.
  5061. return createAsyncPlaceholder(
  5062. asyncFactory,
  5063. data,
  5064. context,
  5065. children,
  5066. tag
  5067. )
  5068. }
  5069. }
  5070. data = data || {};
  5071. // resolve constructor options in case global mixins are applied after
  5072. // component constructor creation
  5073. resolveConstructorOptions(Ctor);
  5074. // transform component v-model data into props & events
  5075. if (isDef(data.model)) {
  5076. transformModel(Ctor.options, data);
  5077. }
  5078. // extract props
  5079. var propsData = extractPropsFromVNodeData(data, Ctor, tag, context); // fixed by xxxxxx
  5080. // functional component
  5081. if (isTrue(Ctor.options.functional)) {
  5082. return createFunctionalComponent(Ctor, propsData, data, context, children)
  5083. }
  5084. // extract listeners, since these needs to be treated as
  5085. // child component listeners instead of DOM listeners
  5086. var listeners = data.on;
  5087. // replace with listeners with .native modifier
  5088. // so it gets processed during parent component patch.
  5089. data.on = data.nativeOn;
  5090. if (isTrue(Ctor.options.abstract)) {
  5091. // abstract components do not keep anything
  5092. // other than props & listeners & slot
  5093. // work around flow
  5094. var slot = data.slot;
  5095. data = {};
  5096. if (slot) {
  5097. data.slot = slot;
  5098. }
  5099. }
  5100. // install component management hooks onto the placeholder node
  5101. installComponentHooks(data);
  5102. // return a placeholder vnode
  5103. var name = Ctor.options.name || tag;
  5104. var vnode = new VNode(
  5105. ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
  5106. data, undefined, undefined, undefined, context,
  5107. { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },
  5108. asyncFactory
  5109. );
  5110. return vnode
  5111. }
  5112. function createComponentInstanceForVnode (
  5113. vnode, // we know it's MountedComponentVNode but flow doesn't
  5114. parent // activeInstance in lifecycle state
  5115. ) {
  5116. var options = {
  5117. _isComponent: true,
  5118. _parentVnode: vnode,
  5119. parent: parent
  5120. };
  5121. // check inline-template render functions
  5122. var inlineTemplate = vnode.data.inlineTemplate;
  5123. if (isDef(inlineTemplate)) {
  5124. options.render = inlineTemplate.render;
  5125. options.staticRenderFns = inlineTemplate.staticRenderFns;
  5126. }
  5127. return new vnode.componentOptions.Ctor(options)
  5128. }
  5129. function installComponentHooks (data) {
  5130. var hooks = data.hook || (data.hook = {});
  5131. for (var i = 0; i < hooksToMerge.length; i++) {
  5132. var key = hooksToMerge[i];
  5133. var existing = hooks[key];
  5134. var toMerge = componentVNodeHooks[key];
  5135. if (existing !== toMerge && !(existing && existing._merged)) {
  5136. hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;
  5137. }
  5138. }
  5139. }
  5140. function mergeHook$1 (f1, f2) {
  5141. var merged = function (a, b) {
  5142. // flow complains about extra args which is why we use any
  5143. f1(a, b);
  5144. f2(a, b);
  5145. };
  5146. merged._merged = true;
  5147. return merged
  5148. }
  5149. // transform component v-model info (value and callback) into
  5150. // prop and event handler respectively.
  5151. function transformModel (options, data) {
  5152. var prop = (options.model && options.model.prop) || 'value';
  5153. var event = (options.model && options.model.event) || 'input'
  5154. ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;
  5155. var on = data.on || (data.on = {});
  5156. var existing = on[event];
  5157. var callback = data.model.callback;
  5158. if (isDef(existing)) {
  5159. if (
  5160. Array.isArray(existing)
  5161. ? existing.indexOf(callback) === -1
  5162. : existing !== callback
  5163. ) {
  5164. on[event] = [callback].concat(existing);
  5165. }
  5166. } else {
  5167. on[event] = callback;
  5168. }
  5169. }
  5170. /* */
  5171. var SIMPLE_NORMALIZE = 1;
  5172. var ALWAYS_NORMALIZE = 2;
  5173. // wrapper function for providing a more flexible interface
  5174. // without getting yelled at by flow
  5175. function createElement (
  5176. context,
  5177. tag,
  5178. data,
  5179. children,
  5180. normalizationType,
  5181. alwaysNormalize
  5182. ) {
  5183. if (Array.isArray(data) || isPrimitive(data)) {
  5184. normalizationType = children;
  5185. children = data;
  5186. data = undefined;
  5187. }
  5188. if (isTrue(alwaysNormalize)) {
  5189. normalizationType = ALWAYS_NORMALIZE;
  5190. }
  5191. return _createElement(context, tag, data, children, normalizationType)
  5192. }
  5193. function _createElement (
  5194. context,
  5195. tag,
  5196. data,
  5197. children,
  5198. normalizationType
  5199. ) {
  5200. if (isDef(data) && isDef((data).__ob__)) {
  5201. true && warn(
  5202. "Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
  5203. 'Always create fresh vnode data objects in each render!',
  5204. context
  5205. );
  5206. return createEmptyVNode()
  5207. }
  5208. // object syntax in v-bind
  5209. if (isDef(data) && isDef(data.is)) {
  5210. tag = data.is;
  5211. }
  5212. if (!tag) {
  5213. // in case of component :is set to falsy value
  5214. return createEmptyVNode()
  5215. }
  5216. // warn against non-primitive key
  5217. if ( true &&
  5218. isDef(data) && isDef(data.key) && !isPrimitive(data.key)
  5219. ) {
  5220. {
  5221. warn(
  5222. 'Avoid using non-primitive value as key, ' +
  5223. 'use string/number value instead.',
  5224. context
  5225. );
  5226. }
  5227. }
  5228. // support single function children as default scoped slot
  5229. if (Array.isArray(children) &&
  5230. typeof children[0] === 'function'
  5231. ) {
  5232. data = data || {};
  5233. data.scopedSlots = { default: children[0] };
  5234. children.length = 0;
  5235. }
  5236. if (normalizationType === ALWAYS_NORMALIZE) {
  5237. children = normalizeChildren(children);
  5238. } else if (normalizationType === SIMPLE_NORMALIZE) {
  5239. children = simpleNormalizeChildren(children);
  5240. }
  5241. var vnode, ns;
  5242. if (typeof tag === 'string') {
  5243. var Ctor;
  5244. ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
  5245. if (config.isReservedTag(tag)) {
  5246. // platform built-in elements
  5247. if ( true && isDef(data) && isDef(data.nativeOn)) {
  5248. warn(
  5249. ("The .native modifier for v-on is only valid on components but it was used on <" + tag + ">."),
  5250. context
  5251. );
  5252. }
  5253. vnode = new VNode(
  5254. config.parsePlatformTagName(tag), data, children,
  5255. undefined, undefined, context
  5256. );
  5257. } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
  5258. // component
  5259. vnode = createComponent(Ctor, data, context, children, tag);
  5260. } else {
  5261. // unknown or unlisted namespaced elements
  5262. // check at runtime because it may get assigned a namespace when its
  5263. // parent normalizes children
  5264. vnode = new VNode(
  5265. tag, data, children,
  5266. undefined, undefined, context
  5267. );
  5268. }
  5269. } else {
  5270. // direct component options / constructor
  5271. vnode = createComponent(tag, data, context, children);
  5272. }
  5273. if (Array.isArray(vnode)) {
  5274. return vnode
  5275. } else if (isDef(vnode)) {
  5276. if (isDef(ns)) { applyNS(vnode, ns); }
  5277. if (isDef(data)) { registerDeepBindings(data); }
  5278. return vnode
  5279. } else {
  5280. return createEmptyVNode()
  5281. }
  5282. }
  5283. function applyNS (vnode, ns, force) {
  5284. vnode.ns = ns;
  5285. if (vnode.tag === 'foreignObject') {
  5286. // use default namespace inside foreignObject
  5287. ns = undefined;
  5288. force = true;
  5289. }
  5290. if (isDef(vnode.children)) {
  5291. for (var i = 0, l = vnode.children.length; i < l; i++) {
  5292. var child = vnode.children[i];
  5293. if (isDef(child.tag) && (
  5294. isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
  5295. applyNS(child, ns, force);
  5296. }
  5297. }
  5298. }
  5299. }
  5300. // ref #5318
  5301. // necessary to ensure parent re-render when deep bindings like :style and
  5302. // :class are used on slot nodes
  5303. function registerDeepBindings (data) {
  5304. if (isObject(data.style)) {
  5305. traverse(data.style);
  5306. }
  5307. if (isObject(data.class)) {
  5308. traverse(data.class);
  5309. }
  5310. }
  5311. /* */
  5312. function initRender (vm) {
  5313. vm._vnode = null; // the root of the child tree
  5314. vm._staticTrees = null; // v-once cached trees
  5315. var options = vm.$options;
  5316. var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree
  5317. var renderContext = parentVnode && parentVnode.context;
  5318. vm.$slots = resolveSlots(options._renderChildren, renderContext);
  5319. vm.$scopedSlots = emptyObject;
  5320. // bind the createElement fn to this instance
  5321. // so that we get proper render context inside it.
  5322. // args order: tag, data, children, normalizationType, alwaysNormalize
  5323. // internal version is used by render functions compiled from templates
  5324. vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
  5325. // normalization is always applied for the public version, used in
  5326. // user-written render functions.
  5327. vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
  5328. // $attrs & $listeners are exposed for easier HOC creation.
  5329. // they need to be reactive so that HOCs using them are always updated
  5330. var parentData = parentVnode && parentVnode.data;
  5331. /* istanbul ignore else */
  5332. if (true) {
  5333. defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {
  5334. !isUpdatingChildComponent && warn("$attrs is readonly.", vm);
  5335. }, true);
  5336. defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {
  5337. !isUpdatingChildComponent && warn("$listeners is readonly.", vm);
  5338. }, true);
  5339. } else {}
  5340. }
  5341. var currentRenderingInstance = null;
  5342. function renderMixin (Vue) {
  5343. // install runtime convenience helpers
  5344. installRenderHelpers(Vue.prototype);
  5345. Vue.prototype.$nextTick = function (fn) {
  5346. return nextTick(fn, this)
  5347. };
  5348. Vue.prototype._render = function () {
  5349. var vm = this;
  5350. var ref = vm.$options;
  5351. var render = ref.render;
  5352. var _parentVnode = ref._parentVnode;
  5353. if (_parentVnode) {
  5354. vm.$scopedSlots = normalizeScopedSlots(
  5355. _parentVnode.data.scopedSlots,
  5356. vm.$slots,
  5357. vm.$scopedSlots
  5358. );
  5359. }
  5360. // set parent vnode. this allows render functions to have access
  5361. // to the data on the placeholder node.
  5362. vm.$vnode = _parentVnode;
  5363. // render self
  5364. var vnode;
  5365. try {
  5366. // There's no need to maintain a stack because all render fns are called
  5367. // separately from one another. Nested component's render fns are called
  5368. // when parent component is patched.
  5369. currentRenderingInstance = vm;
  5370. vnode = render.call(vm._renderProxy, vm.$createElement);
  5371. } catch (e) {
  5372. handleError(e, vm, "render");
  5373. // return error render result,
  5374. // or previous vnode to prevent render error causing blank component
  5375. /* istanbul ignore else */
  5376. if ( true && vm.$options.renderError) {
  5377. try {
  5378. vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
  5379. } catch (e) {
  5380. handleError(e, vm, "renderError");
  5381. vnode = vm._vnode;
  5382. }
  5383. } else {
  5384. vnode = vm._vnode;
  5385. }
  5386. } finally {
  5387. currentRenderingInstance = null;
  5388. }
  5389. // if the returned array contains only a single node, allow it
  5390. if (Array.isArray(vnode) && vnode.length === 1) {
  5391. vnode = vnode[0];
  5392. }
  5393. // return empty vnode in case the render function errored out
  5394. if (!(vnode instanceof VNode)) {
  5395. if ( true && Array.isArray(vnode)) {
  5396. warn(
  5397. 'Multiple root nodes returned from render function. Render function ' +
  5398. 'should return a single root node.',
  5399. vm
  5400. );
  5401. }
  5402. vnode = createEmptyVNode();
  5403. }
  5404. // set parent
  5405. vnode.parent = _parentVnode;
  5406. return vnode
  5407. };
  5408. }
  5409. /* */
  5410. function ensureCtor (comp, base) {
  5411. if (
  5412. comp.__esModule ||
  5413. (hasSymbol && comp[Symbol.toStringTag] === 'Module')
  5414. ) {
  5415. comp = comp.default;
  5416. }
  5417. return isObject(comp)
  5418. ? base.extend(comp)
  5419. : comp
  5420. }
  5421. function createAsyncPlaceholder (
  5422. factory,
  5423. data,
  5424. context,
  5425. children,
  5426. tag
  5427. ) {
  5428. var node = createEmptyVNode();
  5429. node.asyncFactory = factory;
  5430. node.asyncMeta = { data: data, context: context, children: children, tag: tag };
  5431. return node
  5432. }
  5433. function resolveAsyncComponent (
  5434. factory,
  5435. baseCtor
  5436. ) {
  5437. if (isTrue(factory.error) && isDef(factory.errorComp)) {
  5438. return factory.errorComp
  5439. }
  5440. if (isDef(factory.resolved)) {
  5441. return factory.resolved
  5442. }
  5443. var owner = currentRenderingInstance;
  5444. if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
  5445. // already pending
  5446. factory.owners.push(owner);
  5447. }
  5448. if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
  5449. return factory.loadingComp
  5450. }
  5451. if (owner && !isDef(factory.owners)) {
  5452. var owners = factory.owners = [owner];
  5453. var sync = true;
  5454. var timerLoading = null;
  5455. var timerTimeout = null
  5456. ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });
  5457. var forceRender = function (renderCompleted) {
  5458. for (var i = 0, l = owners.length; i < l; i++) {
  5459. (owners[i]).$forceUpdate();
  5460. }
  5461. if (renderCompleted) {
  5462. owners.length = 0;
  5463. if (timerLoading !== null) {
  5464. clearTimeout(timerLoading);
  5465. timerLoading = null;
  5466. }
  5467. if (timerTimeout !== null) {
  5468. clearTimeout(timerTimeout);
  5469. timerTimeout = null;
  5470. }
  5471. }
  5472. };
  5473. var resolve = once(function (res) {
  5474. // cache resolved
  5475. factory.resolved = ensureCtor(res, baseCtor);
  5476. // invoke callbacks only if this is not a synchronous resolve
  5477. // (async resolves are shimmed as synchronous during SSR)
  5478. if (!sync) {
  5479. forceRender(true);
  5480. } else {
  5481. owners.length = 0;
  5482. }
  5483. });
  5484. var reject = once(function (reason) {
  5485. true && warn(
  5486. "Failed to resolve async component: " + (String(factory)) +
  5487. (reason ? ("\nReason: " + reason) : '')
  5488. );
  5489. if (isDef(factory.errorComp)) {
  5490. factory.error = true;
  5491. forceRender(true);
  5492. }
  5493. });
  5494. var res = factory(resolve, reject);
  5495. if (isObject(res)) {
  5496. if (isPromise(res)) {
  5497. // () => Promise
  5498. if (isUndef(factory.resolved)) {
  5499. res.then(resolve, reject);
  5500. }
  5501. } else if (isPromise(res.component)) {
  5502. res.component.then(resolve, reject);
  5503. if (isDef(res.error)) {
  5504. factory.errorComp = ensureCtor(res.error, baseCtor);
  5505. }
  5506. if (isDef(res.loading)) {
  5507. factory.loadingComp = ensureCtor(res.loading, baseCtor);
  5508. if (res.delay === 0) {
  5509. factory.loading = true;
  5510. } else {
  5511. timerLoading = setTimeout(function () {
  5512. timerLoading = null;
  5513. if (isUndef(factory.resolved) && isUndef(factory.error)) {
  5514. factory.loading = true;
  5515. forceRender(false);
  5516. }
  5517. }, res.delay || 200);
  5518. }
  5519. }
  5520. if (isDef(res.timeout)) {
  5521. timerTimeout = setTimeout(function () {
  5522. timerTimeout = null;
  5523. if (isUndef(factory.resolved)) {
  5524. reject(
  5525. true
  5526. ? ("timeout (" + (res.timeout) + "ms)")
  5527. : undefined
  5528. );
  5529. }
  5530. }, res.timeout);
  5531. }
  5532. }
  5533. }
  5534. sync = false;
  5535. // return in case resolved synchronously
  5536. return factory.loading
  5537. ? factory.loadingComp
  5538. : factory.resolved
  5539. }
  5540. }
  5541. /* */
  5542. function isAsyncPlaceholder (node) {
  5543. return node.isComment && node.asyncFactory
  5544. }
  5545. /* */
  5546. function getFirstComponentChild (children) {
  5547. if (Array.isArray(children)) {
  5548. for (var i = 0; i < children.length; i++) {
  5549. var c = children[i];
  5550. if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
  5551. return c
  5552. }
  5553. }
  5554. }
  5555. }
  5556. /* */
  5557. /* */
  5558. function initEvents (vm) {
  5559. vm._events = Object.create(null);
  5560. vm._hasHookEvent = false;
  5561. // init parent attached events
  5562. var listeners = vm.$options._parentListeners;
  5563. if (listeners) {
  5564. updateComponentListeners(vm, listeners);
  5565. }
  5566. }
  5567. var target;
  5568. function add (event, fn) {
  5569. target.$on(event, fn);
  5570. }
  5571. function remove$1 (event, fn) {
  5572. target.$off(event, fn);
  5573. }
  5574. function createOnceHandler (event, fn) {
  5575. var _target = target;
  5576. return function onceHandler () {
  5577. var res = fn.apply(null, arguments);
  5578. if (res !== null) {
  5579. _target.$off(event, onceHandler);
  5580. }
  5581. }
  5582. }
  5583. function updateComponentListeners (
  5584. vm,
  5585. listeners,
  5586. oldListeners
  5587. ) {
  5588. target = vm;
  5589. updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);
  5590. target = undefined;
  5591. }
  5592. function eventsMixin (Vue) {
  5593. var hookRE = /^hook:/;
  5594. Vue.prototype.$on = function (event, fn) {
  5595. var vm = this;
  5596. if (Array.isArray(event)) {
  5597. for (var i = 0, l = event.length; i < l; i++) {
  5598. vm.$on(event[i], fn);
  5599. }
  5600. } else {
  5601. (vm._events[event] || (vm._events[event] = [])).push(fn);
  5602. // optimize hook:event cost by using a boolean flag marked at registration
  5603. // instead of a hash lookup
  5604. if (hookRE.test(event)) {
  5605. vm._hasHookEvent = true;
  5606. }
  5607. }
  5608. return vm
  5609. };
  5610. Vue.prototype.$once = function (event, fn) {
  5611. var vm = this;
  5612. function on () {
  5613. vm.$off(event, on);
  5614. fn.apply(vm, arguments);
  5615. }
  5616. on.fn = fn;
  5617. vm.$on(event, on);
  5618. return vm
  5619. };
  5620. Vue.prototype.$off = function (event, fn) {
  5621. var vm = this;
  5622. // all
  5623. if (!arguments.length) {
  5624. vm._events = Object.create(null);
  5625. return vm
  5626. }
  5627. // array of events
  5628. if (Array.isArray(event)) {
  5629. for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {
  5630. vm.$off(event[i$1], fn);
  5631. }
  5632. return vm
  5633. }
  5634. // specific event
  5635. var cbs = vm._events[event];
  5636. if (!cbs) {
  5637. return vm
  5638. }
  5639. if (!fn) {
  5640. vm._events[event] = null;
  5641. return vm
  5642. }
  5643. // specific handler
  5644. var cb;
  5645. var i = cbs.length;
  5646. while (i--) {
  5647. cb = cbs[i];
  5648. if (cb === fn || cb.fn === fn) {
  5649. cbs.splice(i, 1);
  5650. break
  5651. }
  5652. }
  5653. return vm
  5654. };
  5655. Vue.prototype.$emit = function (event) {
  5656. var vm = this;
  5657. if (true) {
  5658. var lowerCaseEvent = event.toLowerCase();
  5659. if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
  5660. tip(
  5661. "Event \"" + lowerCaseEvent + "\" is emitted in component " +
  5662. (formatComponentName(vm)) + " but the handler is registered for \"" + event + "\". " +
  5663. "Note that HTML attributes are case-insensitive and you cannot use " +
  5664. "v-on to listen to camelCase events when using in-DOM templates. " +
  5665. "You should probably use \"" + (hyphenate(event)) + "\" instead of \"" + event + "\"."
  5666. );
  5667. }
  5668. }
  5669. var cbs = vm._events[event];
  5670. if (cbs) {
  5671. cbs = cbs.length > 1 ? toArray(cbs) : cbs;
  5672. var args = toArray(arguments, 1);
  5673. var info = "event handler for \"" + event + "\"";
  5674. for (var i = 0, l = cbs.length; i < l; i++) {
  5675. invokeWithErrorHandling(cbs[i], vm, args, vm, info);
  5676. }
  5677. }
  5678. return vm
  5679. };
  5680. }
  5681. /* */
  5682. var activeInstance = null;
  5683. var isUpdatingChildComponent = false;
  5684. function setActiveInstance(vm) {
  5685. var prevActiveInstance = activeInstance;
  5686. activeInstance = vm;
  5687. return function () {
  5688. activeInstance = prevActiveInstance;
  5689. }
  5690. }
  5691. function initLifecycle (vm) {
  5692. var options = vm.$options;
  5693. // locate first non-abstract parent
  5694. var parent = options.parent;
  5695. if (parent && !options.abstract) {
  5696. while (parent.$options.abstract && parent.$parent) {
  5697. parent = parent.$parent;
  5698. }
  5699. parent.$children.push(vm);
  5700. }
  5701. vm.$parent = parent;
  5702. vm.$root = parent ? parent.$root : vm;
  5703. vm.$children = [];
  5704. vm.$refs = {};
  5705. vm._watcher = null;
  5706. vm._inactive = null;
  5707. vm._directInactive = false;
  5708. vm._isMounted = false;
  5709. vm._isDestroyed = false;
  5710. vm._isBeingDestroyed = false;
  5711. }
  5712. function lifecycleMixin (Vue) {
  5713. Vue.prototype._update = function (vnode, hydrating) {
  5714. var vm = this;
  5715. var prevEl = vm.$el;
  5716. var prevVnode = vm._vnode;
  5717. var restoreActiveInstance = setActiveInstance(vm);
  5718. vm._vnode = vnode;
  5719. // Vue.prototype.__patch__ is injected in entry points
  5720. // based on the rendering backend used.
  5721. if (!prevVnode) {
  5722. // initial render
  5723. vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
  5724. } else {
  5725. // updates
  5726. vm.$el = vm.__patch__(prevVnode, vnode);
  5727. }
  5728. restoreActiveInstance();
  5729. // update __vue__ reference
  5730. if (prevEl) {
  5731. prevEl.__vue__ = null;
  5732. }
  5733. if (vm.$el) {
  5734. vm.$el.__vue__ = vm;
  5735. }
  5736. // if parent is an HOC, update its $el as well
  5737. if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {
  5738. vm.$parent.$el = vm.$el;
  5739. }
  5740. // updated hook is called by the scheduler to ensure that children are
  5741. // updated in a parent's updated hook.
  5742. };
  5743. Vue.prototype.$forceUpdate = function () {
  5744. var vm = this;
  5745. if (vm._watcher) {
  5746. vm._watcher.update();
  5747. }
  5748. };
  5749. Vue.prototype.$destroy = function () {
  5750. var vm = this;
  5751. if (vm._isBeingDestroyed) {
  5752. return
  5753. }
  5754. callHook(vm, 'beforeDestroy');
  5755. vm._isBeingDestroyed = true;
  5756. // remove self from parent
  5757. var parent = vm.$parent;
  5758. if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
  5759. remove(parent.$children, vm);
  5760. }
  5761. // teardown watchers
  5762. if (vm._watcher) {
  5763. vm._watcher.teardown();
  5764. }
  5765. var i = vm._watchers.length;
  5766. while (i--) {
  5767. vm._watchers[i].teardown();
  5768. }
  5769. // remove reference from data ob
  5770. // frozen object may not have observer.
  5771. if (vm._data.__ob__) {
  5772. vm._data.__ob__.vmCount--;
  5773. }
  5774. // call the last hook...
  5775. vm._isDestroyed = true;
  5776. // invoke destroy hooks on current rendered tree
  5777. vm.__patch__(vm._vnode, null);
  5778. // fire destroyed hook
  5779. callHook(vm, 'destroyed');
  5780. // turn off all instance listeners.
  5781. vm.$off();
  5782. // remove __vue__ reference
  5783. if (vm.$el) {
  5784. vm.$el.__vue__ = null;
  5785. }
  5786. // release circular reference (#6759)
  5787. if (vm.$vnode) {
  5788. vm.$vnode.parent = null;
  5789. }
  5790. };
  5791. }
  5792. function updateChildComponent (
  5793. vm,
  5794. propsData,
  5795. listeners,
  5796. parentVnode,
  5797. renderChildren
  5798. ) {
  5799. if (true) {
  5800. isUpdatingChildComponent = true;
  5801. }
  5802. // determine whether component has slot children
  5803. // we need to do this before overwriting $options._renderChildren.
  5804. // check if there are dynamic scopedSlots (hand-written or compiled but with
  5805. // dynamic slot names). Static scoped slots compiled from template has the
  5806. // "$stable" marker.
  5807. var newScopedSlots = parentVnode.data.scopedSlots;
  5808. var oldScopedSlots = vm.$scopedSlots;
  5809. var hasDynamicScopedSlot = !!(
  5810. (newScopedSlots && !newScopedSlots.$stable) ||
  5811. (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
  5812. (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)
  5813. );
  5814. // Any static slot children from the parent may have changed during parent's
  5815. // update. Dynamic scoped slots may also have changed. In such cases, a forced
  5816. // update is necessary to ensure correctness.
  5817. var needsForceUpdate = !!(
  5818. renderChildren || // has new static slots
  5819. vm.$options._renderChildren || // has old static slots
  5820. hasDynamicScopedSlot
  5821. );
  5822. vm.$options._parentVnode = parentVnode;
  5823. vm.$vnode = parentVnode; // update vm's placeholder node without re-render
  5824. if (vm._vnode) { // update child tree's parent
  5825. vm._vnode.parent = parentVnode;
  5826. }
  5827. vm.$options._renderChildren = renderChildren;
  5828. // update $attrs and $listeners hash
  5829. // these are also reactive so they may trigger child update if the child
  5830. // used them during render
  5831. vm.$attrs = parentVnode.data.attrs || emptyObject;
  5832. vm.$listeners = listeners || emptyObject;
  5833. // update props
  5834. if (propsData && vm.$options.props) {
  5835. toggleObserving(false);
  5836. var props = vm._props;
  5837. var propKeys = vm.$options._propKeys || [];
  5838. for (var i = 0; i < propKeys.length; i++) {
  5839. var key = propKeys[i];
  5840. var propOptions = vm.$options.props; // wtf flow?
  5841. props[key] = validateProp(key, propOptions, propsData, vm);
  5842. }
  5843. toggleObserving(true);
  5844. // keep a copy of raw propsData
  5845. vm.$options.propsData = propsData;
  5846. }
  5847. // fixed by xxxxxx update properties(mp runtime)
  5848. vm._$updateProperties && vm._$updateProperties(vm);
  5849. // update listeners
  5850. listeners = listeners || emptyObject;
  5851. var oldListeners = vm.$options._parentListeners;
  5852. vm.$options._parentListeners = listeners;
  5853. updateComponentListeners(vm, listeners, oldListeners);
  5854. // resolve slots + force update if has children
  5855. if (needsForceUpdate) {
  5856. vm.$slots = resolveSlots(renderChildren, parentVnode.context);
  5857. vm.$forceUpdate();
  5858. }
  5859. if (true) {
  5860. isUpdatingChildComponent = false;
  5861. }
  5862. }
  5863. function isInInactiveTree (vm) {
  5864. while (vm && (vm = vm.$parent)) {
  5865. if (vm._inactive) { return true }
  5866. }
  5867. return false
  5868. }
  5869. function activateChildComponent (vm, direct) {
  5870. if (direct) {
  5871. vm._directInactive = false;
  5872. if (isInInactiveTree(vm)) {
  5873. return
  5874. }
  5875. } else if (vm._directInactive) {
  5876. return
  5877. }
  5878. if (vm._inactive || vm._inactive === null) {
  5879. vm._inactive = false;
  5880. for (var i = 0; i < vm.$children.length; i++) {
  5881. activateChildComponent(vm.$children[i]);
  5882. }
  5883. callHook(vm, 'activated');
  5884. }
  5885. }
  5886. function deactivateChildComponent (vm, direct) {
  5887. if (direct) {
  5888. vm._directInactive = true;
  5889. if (isInInactiveTree(vm)) {
  5890. return
  5891. }
  5892. }
  5893. if (!vm._inactive) {
  5894. vm._inactive = true;
  5895. for (var i = 0; i < vm.$children.length; i++) {
  5896. deactivateChildComponent(vm.$children[i]);
  5897. }
  5898. callHook(vm, 'deactivated');
  5899. }
  5900. }
  5901. function callHook (vm, hook) {
  5902. // #7573 disable dep collection when invoking lifecycle hooks
  5903. pushTarget();
  5904. var handlers = vm.$options[hook];
  5905. var info = hook + " hook";
  5906. if (handlers) {
  5907. for (var i = 0, j = handlers.length; i < j; i++) {
  5908. invokeWithErrorHandling(handlers[i], vm, null, vm, info);
  5909. }
  5910. }
  5911. if (vm._hasHookEvent) {
  5912. vm.$emit('hook:' + hook);
  5913. }
  5914. popTarget();
  5915. }
  5916. /* */
  5917. var MAX_UPDATE_COUNT = 100;
  5918. var queue = [];
  5919. var activatedChildren = [];
  5920. var has = {};
  5921. var circular = {};
  5922. var waiting = false;
  5923. var flushing = false;
  5924. var index = 0;
  5925. /**
  5926. * Reset the scheduler's state.
  5927. */
  5928. function resetSchedulerState () {
  5929. index = queue.length = activatedChildren.length = 0;
  5930. has = {};
  5931. if (true) {
  5932. circular = {};
  5933. }
  5934. waiting = flushing = false;
  5935. }
  5936. // Async edge case #6566 requires saving the timestamp when event listeners are
  5937. // attached. However, calling performance.now() has a perf overhead especially
  5938. // if the page has thousands of event listeners. Instead, we take a timestamp
  5939. // every time the scheduler flushes and use that for all event listeners
  5940. // attached during that flush.
  5941. var currentFlushTimestamp = 0;
  5942. // Async edge case fix requires storing an event listener's attach timestamp.
  5943. var getNow = Date.now;
  5944. // Determine what event timestamp the browser is using. Annoyingly, the
  5945. // timestamp can either be hi-res (relative to page load) or low-res
  5946. // (relative to UNIX epoch), so in order to compare time we have to use the
  5947. // same timestamp type when saving the flush timestamp.
  5948. // All IE versions use low-res event timestamps, and have problematic clock
  5949. // implementations (#9632)
  5950. if (inBrowser && !isIE) {
  5951. var performance = window.performance;
  5952. if (
  5953. performance &&
  5954. typeof performance.now === 'function' &&
  5955. getNow() > document.createEvent('Event').timeStamp
  5956. ) {
  5957. // if the event timestamp, although evaluated AFTER the Date.now(), is
  5958. // smaller than it, it means the event is using a hi-res timestamp,
  5959. // and we need to use the hi-res version for event listener timestamps as
  5960. // well.
  5961. getNow = function () { return performance.now(); };
  5962. }
  5963. }
  5964. /**
  5965. * Flush both queues and run the watchers.
  5966. */
  5967. function flushSchedulerQueue () {
  5968. currentFlushTimestamp = getNow();
  5969. flushing = true;
  5970. var watcher, id;
  5971. // Sort queue before flush.
  5972. // This ensures that:
  5973. // 1. Components are updated from parent to child. (because parent is always
  5974. // created before the child)
  5975. // 2. A component's user watchers are run before its render watcher (because
  5976. // user watchers are created before the render watcher)
  5977. // 3. If a component is destroyed during a parent component's watcher run,
  5978. // its watchers can be skipped.
  5979. queue.sort(function (a, b) { return a.id - b.id; });
  5980. // do not cache length because more watchers might be pushed
  5981. // as we run existing watchers
  5982. for (index = 0; index < queue.length; index++) {
  5983. watcher = queue[index];
  5984. if (watcher.before) {
  5985. watcher.before();
  5986. }
  5987. id = watcher.id;
  5988. has[id] = null;
  5989. watcher.run();
  5990. // in dev build, check and stop circular updates.
  5991. if ( true && has[id] != null) {
  5992. circular[id] = (circular[id] || 0) + 1;
  5993. if (circular[id] > MAX_UPDATE_COUNT) {
  5994. warn(
  5995. 'You may have an infinite update loop ' + (
  5996. watcher.user
  5997. ? ("in watcher with expression \"" + (watcher.expression) + "\"")
  5998. : "in a component render function."
  5999. ),
  6000. watcher.vm
  6001. );
  6002. break
  6003. }
  6004. }
  6005. }
  6006. // keep copies of post queues before resetting state
  6007. var activatedQueue = activatedChildren.slice();
  6008. var updatedQueue = queue.slice();
  6009. resetSchedulerState();
  6010. // call component updated and activated hooks
  6011. callActivatedHooks(activatedQueue);
  6012. callUpdatedHooks(updatedQueue);
  6013. // devtool hook
  6014. /* istanbul ignore if */
  6015. if (devtools && config.devtools) {
  6016. devtools.emit('flush');
  6017. }
  6018. }
  6019. function callUpdatedHooks (queue) {
  6020. var i = queue.length;
  6021. while (i--) {
  6022. var watcher = queue[i];
  6023. var vm = watcher.vm;
  6024. if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
  6025. callHook(vm, 'updated');
  6026. }
  6027. }
  6028. }
  6029. /**
  6030. * Queue a kept-alive component that was activated during patch.
  6031. * The queue will be processed after the entire tree has been patched.
  6032. */
  6033. function queueActivatedComponent (vm) {
  6034. // setting _inactive to false here so that a render function can
  6035. // rely on checking whether it's in an inactive tree (e.g. router-view)
  6036. vm._inactive = false;
  6037. activatedChildren.push(vm);
  6038. }
  6039. function callActivatedHooks (queue) {
  6040. for (var i = 0; i < queue.length; i++) {
  6041. queue[i]._inactive = true;
  6042. activateChildComponent(queue[i], true /* true */);
  6043. }
  6044. }
  6045. /**
  6046. * Push a watcher into the watcher queue.
  6047. * Jobs with duplicate IDs will be skipped unless it's
  6048. * pushed when the queue is being flushed.
  6049. */
  6050. function queueWatcher (watcher) {
  6051. var id = watcher.id;
  6052. if (has[id] == null) {
  6053. has[id] = true;
  6054. if (!flushing) {
  6055. queue.push(watcher);
  6056. } else {
  6057. // if already flushing, splice the watcher based on its id
  6058. // if already past its id, it will be run next immediately.
  6059. var i = queue.length - 1;
  6060. while (i > index && queue[i].id > watcher.id) {
  6061. i--;
  6062. }
  6063. queue.splice(i + 1, 0, watcher);
  6064. }
  6065. // queue the flush
  6066. if (!waiting) {
  6067. waiting = true;
  6068. if ( true && !config.async) {
  6069. flushSchedulerQueue();
  6070. return
  6071. }
  6072. nextTick(flushSchedulerQueue);
  6073. }
  6074. }
  6075. }
  6076. /* */
  6077. var uid$2 = 0;
  6078. /**
  6079. * A watcher parses an expression, collects dependencies,
  6080. * and fires callback when the expression value changes.
  6081. * This is used for both the $watch() api and directives.
  6082. */
  6083. var Watcher = function Watcher (
  6084. vm,
  6085. expOrFn,
  6086. cb,
  6087. options,
  6088. isRenderWatcher
  6089. ) {
  6090. this.vm = vm;
  6091. if (isRenderWatcher) {
  6092. vm._watcher = this;
  6093. }
  6094. vm._watchers.push(this);
  6095. // options
  6096. if (options) {
  6097. this.deep = !!options.deep;
  6098. this.user = !!options.user;
  6099. this.lazy = !!options.lazy;
  6100. this.sync = !!options.sync;
  6101. this.before = options.before;
  6102. } else {
  6103. this.deep = this.user = this.lazy = this.sync = false;
  6104. }
  6105. this.cb = cb;
  6106. this.id = ++uid$2; // uid for batching
  6107. this.active = true;
  6108. this.dirty = this.lazy; // for lazy watchers
  6109. this.deps = [];
  6110. this.newDeps = [];
  6111. this.depIds = new _Set();
  6112. this.newDepIds = new _Set();
  6113. this.expression = true
  6114. ? expOrFn.toString()
  6115. : undefined;
  6116. // parse expression for getter
  6117. if (typeof expOrFn === 'function') {
  6118. this.getter = expOrFn;
  6119. } else {
  6120. this.getter = parsePath(expOrFn);
  6121. if (!this.getter) {
  6122. this.getter = noop;
  6123. true && warn(
  6124. "Failed watching path: \"" + expOrFn + "\" " +
  6125. 'Watcher only accepts simple dot-delimited paths. ' +
  6126. 'For full control, use a function instead.',
  6127. vm
  6128. );
  6129. }
  6130. }
  6131. this.value = this.lazy
  6132. ? undefined
  6133. : this.get();
  6134. };
  6135. /**
  6136. * Evaluate the getter, and re-collect dependencies.
  6137. */
  6138. Watcher.prototype.get = function get () {
  6139. pushTarget(this);
  6140. var value;
  6141. var vm = this.vm;
  6142. try {
  6143. value = this.getter.call(vm, vm);
  6144. } catch (e) {
  6145. if (this.user) {
  6146. handleError(e, vm, ("getter for watcher \"" + (this.expression) + "\""));
  6147. } else {
  6148. throw e
  6149. }
  6150. } finally {
  6151. // "touch" every property so they are all tracked as
  6152. // dependencies for deep watching
  6153. if (this.deep) {
  6154. traverse(value);
  6155. }
  6156. popTarget();
  6157. this.cleanupDeps();
  6158. }
  6159. return value
  6160. };
  6161. /**
  6162. * Add a dependency to this directive.
  6163. */
  6164. Watcher.prototype.addDep = function addDep (dep) {
  6165. var id = dep.id;
  6166. if (!this.newDepIds.has(id)) {
  6167. this.newDepIds.add(id);
  6168. this.newDeps.push(dep);
  6169. if (!this.depIds.has(id)) {
  6170. dep.addSub(this);
  6171. }
  6172. }
  6173. };
  6174. /**
  6175. * Clean up for dependency collection.
  6176. */
  6177. Watcher.prototype.cleanupDeps = function cleanupDeps () {
  6178. var i = this.deps.length;
  6179. while (i--) {
  6180. var dep = this.deps[i];
  6181. if (!this.newDepIds.has(dep.id)) {
  6182. dep.removeSub(this);
  6183. }
  6184. }
  6185. var tmp = this.depIds;
  6186. this.depIds = this.newDepIds;
  6187. this.newDepIds = tmp;
  6188. this.newDepIds.clear();
  6189. tmp = this.deps;
  6190. this.deps = this.newDeps;
  6191. this.newDeps = tmp;
  6192. this.newDeps.length = 0;
  6193. };
  6194. /**
  6195. * Subscriber interface.
  6196. * Will be called when a dependency changes.
  6197. */
  6198. Watcher.prototype.update = function update () {
  6199. /* istanbul ignore else */
  6200. if (this.lazy) {
  6201. this.dirty = true;
  6202. } else if (this.sync) {
  6203. this.run();
  6204. } else {
  6205. queueWatcher(this);
  6206. }
  6207. };
  6208. /**
  6209. * Scheduler job interface.
  6210. * Will be called by the scheduler.
  6211. */
  6212. Watcher.prototype.run = function run () {
  6213. if (this.active) {
  6214. var value = this.get();
  6215. if (
  6216. value !== this.value ||
  6217. // Deep watchers and watchers on Object/Arrays should fire even
  6218. // when the value is the same, because the value may
  6219. // have mutated.
  6220. isObject(value) ||
  6221. this.deep
  6222. ) {
  6223. // set new value
  6224. var oldValue = this.value;
  6225. this.value = value;
  6226. if (this.user) {
  6227. try {
  6228. this.cb.call(this.vm, value, oldValue);
  6229. } catch (e) {
  6230. handleError(e, this.vm, ("callback for watcher \"" + (this.expression) + "\""));
  6231. }
  6232. } else {
  6233. this.cb.call(this.vm, value, oldValue);
  6234. }
  6235. }
  6236. }
  6237. };
  6238. /**
  6239. * Evaluate the value of the watcher.
  6240. * This only gets called for lazy watchers.
  6241. */
  6242. Watcher.prototype.evaluate = function evaluate () {
  6243. this.value = this.get();
  6244. this.dirty = false;
  6245. };
  6246. /**
  6247. * Depend on all deps collected by this watcher.
  6248. */
  6249. Watcher.prototype.depend = function depend () {
  6250. var i = this.deps.length;
  6251. while (i--) {
  6252. this.deps[i].depend();
  6253. }
  6254. };
  6255. /**
  6256. * Remove self from all dependencies' subscriber list.
  6257. */
  6258. Watcher.prototype.teardown = function teardown () {
  6259. if (this.active) {
  6260. // remove self from vm's watcher list
  6261. // this is a somewhat expensive operation so we skip it
  6262. // if the vm is being destroyed.
  6263. if (!this.vm._isBeingDestroyed) {
  6264. remove(this.vm._watchers, this);
  6265. }
  6266. var i = this.deps.length;
  6267. while (i--) {
  6268. this.deps[i].removeSub(this);
  6269. }
  6270. this.active = false;
  6271. }
  6272. };
  6273. /* */
  6274. var sharedPropertyDefinition = {
  6275. enumerable: true,
  6276. configurable: true,
  6277. get: noop,
  6278. set: noop
  6279. };
  6280. function proxy (target, sourceKey, key) {
  6281. sharedPropertyDefinition.get = function proxyGetter () {
  6282. return this[sourceKey][key]
  6283. };
  6284. sharedPropertyDefinition.set = function proxySetter (val) {
  6285. this[sourceKey][key] = val;
  6286. };
  6287. Object.defineProperty(target, key, sharedPropertyDefinition);
  6288. }
  6289. function initState (vm) {
  6290. vm._watchers = [];
  6291. var opts = vm.$options;
  6292. if (opts.props) { initProps(vm, opts.props); }
  6293. if (opts.methods) { initMethods(vm, opts.methods); }
  6294. if (opts.data) {
  6295. initData(vm);
  6296. } else {
  6297. observe(vm._data = {}, true /* asRootData */);
  6298. }
  6299. if (opts.computed) { initComputed(vm, opts.computed); }
  6300. if (opts.watch && opts.watch !== nativeWatch) {
  6301. initWatch(vm, opts.watch);
  6302. }
  6303. }
  6304. function initProps (vm, propsOptions) {
  6305. var propsData = vm.$options.propsData || {};
  6306. var props = vm._props = {};
  6307. // cache prop keys so that future props updates can iterate using Array
  6308. // instead of dynamic object key enumeration.
  6309. var keys = vm.$options._propKeys = [];
  6310. var isRoot = !vm.$parent;
  6311. // root instance props should be converted
  6312. if (!isRoot) {
  6313. toggleObserving(false);
  6314. }
  6315. var loop = function ( key ) {
  6316. keys.push(key);
  6317. var value = validateProp(key, propsOptions, propsData, vm);
  6318. /* istanbul ignore else */
  6319. if (true) {
  6320. var hyphenatedKey = hyphenate(key);
  6321. if (isReservedAttribute(hyphenatedKey) ||
  6322. config.isReservedAttr(hyphenatedKey)) {
  6323. warn(
  6324. ("\"" + hyphenatedKey + "\" is a reserved attribute and cannot be used as component prop."),
  6325. vm
  6326. );
  6327. }
  6328. defineReactive$$1(props, key, value, function () {
  6329. if (!isRoot && !isUpdatingChildComponent) {
  6330. {
  6331. if(vm.mpHost === 'mp-baidu' || vm.mpHost === 'mp-kuaishou'){//百度、快手 observer 在 setData callback 之后触发,直接忽略该 warn
  6332. return
  6333. }
  6334. //fixed by xxxxxx __next_tick_pending,uni://form-field 时不告警
  6335. if(
  6336. key === 'value' &&
  6337. Array.isArray(vm.$options.behaviors) &&
  6338. vm.$options.behaviors.indexOf('uni://form-field') !== -1
  6339. ){
  6340. return
  6341. }
  6342. if(vm._getFormData){
  6343. return
  6344. }
  6345. var $parent = vm.$parent;
  6346. while($parent){
  6347. if($parent.__next_tick_pending){
  6348. return
  6349. }
  6350. $parent = $parent.$parent;
  6351. }
  6352. }
  6353. warn(
  6354. "Avoid mutating a prop directly since the value will be " +
  6355. "overwritten whenever the parent component re-renders. " +
  6356. "Instead, use a data or computed property based on the prop's " +
  6357. "value. Prop being mutated: \"" + key + "\"",
  6358. vm
  6359. );
  6360. }
  6361. });
  6362. } else {}
  6363. // static props are already proxied on the component's prototype
  6364. // during Vue.extend(). We only need to proxy props defined at
  6365. // instantiation here.
  6366. if (!(key in vm)) {
  6367. proxy(vm, "_props", key);
  6368. }
  6369. };
  6370. for (var key in propsOptions) loop( key );
  6371. toggleObserving(true);
  6372. }
  6373. function initData (vm) {
  6374. var data = vm.$options.data;
  6375. data = vm._data = typeof data === 'function'
  6376. ? getData(data, vm)
  6377. : data || {};
  6378. if (!isPlainObject(data)) {
  6379. data = {};
  6380. true && warn(
  6381. 'data functions should return an object:\n' +
  6382. 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
  6383. vm
  6384. );
  6385. }
  6386. // proxy data on instance
  6387. var keys = Object.keys(data);
  6388. var props = vm.$options.props;
  6389. var methods = vm.$options.methods;
  6390. var i = keys.length;
  6391. while (i--) {
  6392. var key = keys[i];
  6393. if (true) {
  6394. if (methods && hasOwn(methods, key)) {
  6395. warn(
  6396. ("Method \"" + key + "\" has already been defined as a data property."),
  6397. vm
  6398. );
  6399. }
  6400. }
  6401. if (props && hasOwn(props, key)) {
  6402. true && warn(
  6403. "The data property \"" + key + "\" is already declared as a prop. " +
  6404. "Use prop default value instead.",
  6405. vm
  6406. );
  6407. } else if (!isReserved(key)) {
  6408. proxy(vm, "_data", key);
  6409. }
  6410. }
  6411. // observe data
  6412. observe(data, true /* asRootData */);
  6413. }
  6414. function getData (data, vm) {
  6415. // #7573 disable dep collection when invoking data getters
  6416. pushTarget();
  6417. try {
  6418. return data.call(vm, vm)
  6419. } catch (e) {
  6420. handleError(e, vm, "data()");
  6421. return {}
  6422. } finally {
  6423. popTarget();
  6424. }
  6425. }
  6426. var computedWatcherOptions = { lazy: true };
  6427. function initComputed (vm, computed) {
  6428. // $flow-disable-line
  6429. var watchers = vm._computedWatchers = Object.create(null);
  6430. // computed properties are just getters during SSR
  6431. var isSSR = isServerRendering();
  6432. for (var key in computed) {
  6433. var userDef = computed[key];
  6434. var getter = typeof userDef === 'function' ? userDef : userDef.get;
  6435. if ( true && getter == null) {
  6436. warn(
  6437. ("Getter is missing for computed property \"" + key + "\"."),
  6438. vm
  6439. );
  6440. }
  6441. if (!isSSR) {
  6442. // create internal watcher for the computed property.
  6443. watchers[key] = new Watcher(
  6444. vm,
  6445. getter || noop,
  6446. noop,
  6447. computedWatcherOptions
  6448. );
  6449. }
  6450. // component-defined computed properties are already defined on the
  6451. // component prototype. We only need to define computed properties defined
  6452. // at instantiation here.
  6453. if (!(key in vm)) {
  6454. defineComputed(vm, key, userDef);
  6455. } else if (true) {
  6456. if (key in vm.$data) {
  6457. warn(("The computed property \"" + key + "\" is already defined in data."), vm);
  6458. } else if (vm.$options.props && key in vm.$options.props) {
  6459. warn(("The computed property \"" + key + "\" is already defined as a prop."), vm);
  6460. }
  6461. }
  6462. }
  6463. }
  6464. function defineComputed (
  6465. target,
  6466. key,
  6467. userDef
  6468. ) {
  6469. var shouldCache = !isServerRendering();
  6470. if (typeof userDef === 'function') {
  6471. sharedPropertyDefinition.get = shouldCache
  6472. ? createComputedGetter(key)
  6473. : createGetterInvoker(userDef);
  6474. sharedPropertyDefinition.set = noop;
  6475. } else {
  6476. sharedPropertyDefinition.get = userDef.get
  6477. ? shouldCache && userDef.cache !== false
  6478. ? createComputedGetter(key)
  6479. : createGetterInvoker(userDef.get)
  6480. : noop;
  6481. sharedPropertyDefinition.set = userDef.set || noop;
  6482. }
  6483. if ( true &&
  6484. sharedPropertyDefinition.set === noop) {
  6485. sharedPropertyDefinition.set = function () {
  6486. warn(
  6487. ("Computed property \"" + key + "\" was assigned to but it has no setter."),
  6488. this
  6489. );
  6490. };
  6491. }
  6492. Object.defineProperty(target, key, sharedPropertyDefinition);
  6493. }
  6494. function createComputedGetter (key) {
  6495. return function computedGetter () {
  6496. var watcher = this._computedWatchers && this._computedWatchers[key];
  6497. if (watcher) {
  6498. if (watcher.dirty) {
  6499. watcher.evaluate();
  6500. }
  6501. if (Dep.SharedObject.target) {// fixed by xxxxxx
  6502. watcher.depend();
  6503. }
  6504. return watcher.value
  6505. }
  6506. }
  6507. }
  6508. function createGetterInvoker(fn) {
  6509. return function computedGetter () {
  6510. return fn.call(this, this)
  6511. }
  6512. }
  6513. function initMethods (vm, methods) {
  6514. var props = vm.$options.props;
  6515. for (var key in methods) {
  6516. if (true) {
  6517. if (typeof methods[key] !== 'function') {
  6518. warn(
  6519. "Method \"" + key + "\" has type \"" + (typeof methods[key]) + "\" in the component definition. " +
  6520. "Did you reference the function correctly?",
  6521. vm
  6522. );
  6523. }
  6524. if (props && hasOwn(props, key)) {
  6525. warn(
  6526. ("Method \"" + key + "\" has already been defined as a prop."),
  6527. vm
  6528. );
  6529. }
  6530. if ((key in vm) && isReserved(key)) {
  6531. warn(
  6532. "Method \"" + key + "\" conflicts with an existing Vue instance method. " +
  6533. "Avoid defining component methods that start with _ or $."
  6534. );
  6535. }
  6536. }
  6537. vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);
  6538. }
  6539. }
  6540. function initWatch (vm, watch) {
  6541. for (var key in watch) {
  6542. var handler = watch[key];
  6543. if (Array.isArray(handler)) {
  6544. for (var i = 0; i < handler.length; i++) {
  6545. createWatcher(vm, key, handler[i]);
  6546. }
  6547. } else {
  6548. createWatcher(vm, key, handler);
  6549. }
  6550. }
  6551. }
  6552. function createWatcher (
  6553. vm,
  6554. expOrFn,
  6555. handler,
  6556. options
  6557. ) {
  6558. if (isPlainObject(handler)) {
  6559. options = handler;
  6560. handler = handler.handler;
  6561. }
  6562. if (typeof handler === 'string') {
  6563. handler = vm[handler];
  6564. }
  6565. return vm.$watch(expOrFn, handler, options)
  6566. }
  6567. function stateMixin (Vue) {
  6568. // flow somehow has problems with directly declared definition object
  6569. // when using Object.defineProperty, so we have to procedurally build up
  6570. // the object here.
  6571. var dataDef = {};
  6572. dataDef.get = function () { return this._data };
  6573. var propsDef = {};
  6574. propsDef.get = function () { return this._props };
  6575. if (true) {
  6576. dataDef.set = function () {
  6577. warn(
  6578. 'Avoid replacing instance root $data. ' +
  6579. 'Use nested data properties instead.',
  6580. this
  6581. );
  6582. };
  6583. propsDef.set = function () {
  6584. warn("$props is readonly.", this);
  6585. };
  6586. }
  6587. Object.defineProperty(Vue.prototype, '$data', dataDef);
  6588. Object.defineProperty(Vue.prototype, '$props', propsDef);
  6589. Vue.prototype.$set = set;
  6590. Vue.prototype.$delete = del;
  6591. Vue.prototype.$watch = function (
  6592. expOrFn,
  6593. cb,
  6594. options
  6595. ) {
  6596. var vm = this;
  6597. if (isPlainObject(cb)) {
  6598. return createWatcher(vm, expOrFn, cb, options)
  6599. }
  6600. options = options || {};
  6601. options.user = true;
  6602. var watcher = new Watcher(vm, expOrFn, cb, options);
  6603. if (options.immediate) {
  6604. try {
  6605. cb.call(vm, watcher.value);
  6606. } catch (error) {
  6607. handleError(error, vm, ("callback for immediate watcher \"" + (watcher.expression) + "\""));
  6608. }
  6609. }
  6610. return function unwatchFn () {
  6611. watcher.teardown();
  6612. }
  6613. };
  6614. }
  6615. /* */
  6616. var uid$3 = 0;
  6617. function initMixin (Vue) {
  6618. Vue.prototype._init = function (options) {
  6619. var vm = this;
  6620. // a uid
  6621. vm._uid = uid$3++;
  6622. var startTag, endTag;
  6623. /* istanbul ignore if */
  6624. if ( true && config.performance && mark) {
  6625. startTag = "vue-perf-start:" + (vm._uid);
  6626. endTag = "vue-perf-end:" + (vm._uid);
  6627. mark(startTag);
  6628. }
  6629. // a flag to avoid this being observed
  6630. vm._isVue = true;
  6631. // merge options
  6632. if (options && options._isComponent) {
  6633. // optimize internal component instantiation
  6634. // since dynamic options merging is pretty slow, and none of the
  6635. // internal component options needs special treatment.
  6636. initInternalComponent(vm, options);
  6637. } else {
  6638. vm.$options = mergeOptions(
  6639. resolveConstructorOptions(vm.constructor),
  6640. options || {},
  6641. vm
  6642. );
  6643. }
  6644. /* istanbul ignore else */
  6645. if (true) {
  6646. initProxy(vm);
  6647. } else {}
  6648. // expose real self
  6649. vm._self = vm;
  6650. initLifecycle(vm);
  6651. initEvents(vm);
  6652. initRender(vm);
  6653. callHook(vm, 'beforeCreate');
  6654. !vm._$fallback && initInjections(vm); // resolve injections before data/props
  6655. initState(vm);
  6656. !vm._$fallback && initProvide(vm); // resolve provide after data/props
  6657. !vm._$fallback && callHook(vm, 'created');
  6658. /* istanbul ignore if */
  6659. if ( true && config.performance && mark) {
  6660. vm._name = formatComponentName(vm, false);
  6661. mark(endTag);
  6662. measure(("vue " + (vm._name) + " init"), startTag, endTag);
  6663. }
  6664. if (vm.$options.el) {
  6665. vm.$mount(vm.$options.el);
  6666. }
  6667. };
  6668. }
  6669. function initInternalComponent (vm, options) {
  6670. var opts = vm.$options = Object.create(vm.constructor.options);
  6671. // doing this because it's faster than dynamic enumeration.
  6672. var parentVnode = options._parentVnode;
  6673. opts.parent = options.parent;
  6674. opts._parentVnode = parentVnode;
  6675. var vnodeComponentOptions = parentVnode.componentOptions;
  6676. opts.propsData = vnodeComponentOptions.propsData;
  6677. opts._parentListeners = vnodeComponentOptions.listeners;
  6678. opts._renderChildren = vnodeComponentOptions.children;
  6679. opts._componentTag = vnodeComponentOptions.tag;
  6680. if (options.render) {
  6681. opts.render = options.render;
  6682. opts.staticRenderFns = options.staticRenderFns;
  6683. }
  6684. }
  6685. function resolveConstructorOptions (Ctor) {
  6686. var options = Ctor.options;
  6687. if (Ctor.super) {
  6688. var superOptions = resolveConstructorOptions(Ctor.super);
  6689. var cachedSuperOptions = Ctor.superOptions;
  6690. if (superOptions !== cachedSuperOptions) {
  6691. // super option changed,
  6692. // need to resolve new options.
  6693. Ctor.superOptions = superOptions;
  6694. // check if there are any late-modified/attached options (#4976)
  6695. var modifiedOptions = resolveModifiedOptions(Ctor);
  6696. // update base extend options
  6697. if (modifiedOptions) {
  6698. extend(Ctor.extendOptions, modifiedOptions);
  6699. }
  6700. options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
  6701. if (options.name) {
  6702. options.components[options.name] = Ctor;
  6703. }
  6704. }
  6705. }
  6706. return options
  6707. }
  6708. function resolveModifiedOptions (Ctor) {
  6709. var modified;
  6710. var latest = Ctor.options;
  6711. var sealed = Ctor.sealedOptions;
  6712. for (var key in latest) {
  6713. if (latest[key] !== sealed[key]) {
  6714. if (!modified) { modified = {}; }
  6715. modified[key] = latest[key];
  6716. }
  6717. }
  6718. return modified
  6719. }
  6720. function Vue (options) {
  6721. if ( true &&
  6722. !(this instanceof Vue)
  6723. ) {
  6724. warn('Vue is a constructor and should be called with the `new` keyword');
  6725. }
  6726. this._init(options);
  6727. }
  6728. initMixin(Vue);
  6729. stateMixin(Vue);
  6730. eventsMixin(Vue);
  6731. lifecycleMixin(Vue);
  6732. renderMixin(Vue);
  6733. /* */
  6734. function initUse (Vue) {
  6735. Vue.use = function (plugin) {
  6736. var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));
  6737. if (installedPlugins.indexOf(plugin) > -1) {
  6738. return this
  6739. }
  6740. // additional parameters
  6741. var args = toArray(arguments, 1);
  6742. args.unshift(this);
  6743. if (typeof plugin.install === 'function') {
  6744. plugin.install.apply(plugin, args);
  6745. } else if (typeof plugin === 'function') {
  6746. plugin.apply(null, args);
  6747. }
  6748. installedPlugins.push(plugin);
  6749. return this
  6750. };
  6751. }
  6752. /* */
  6753. function initMixin$1 (Vue) {
  6754. Vue.mixin = function (mixin) {
  6755. this.options = mergeOptions(this.options, mixin);
  6756. return this
  6757. };
  6758. }
  6759. /* */
  6760. function initExtend (Vue) {
  6761. /**
  6762. * Each instance constructor, including Vue, has a unique
  6763. * cid. This enables us to create wrapped "child
  6764. * constructors" for prototypal inheritance and cache them.
  6765. */
  6766. Vue.cid = 0;
  6767. var cid = 1;
  6768. /**
  6769. * Class inheritance
  6770. */
  6771. Vue.extend = function (extendOptions) {
  6772. extendOptions = extendOptions || {};
  6773. var Super = this;
  6774. var SuperId = Super.cid;
  6775. var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
  6776. if (cachedCtors[SuperId]) {
  6777. return cachedCtors[SuperId]
  6778. }
  6779. var name = extendOptions.name || Super.options.name;
  6780. if ( true && name) {
  6781. validateComponentName(name);
  6782. }
  6783. var Sub = function VueComponent (options) {
  6784. this._init(options);
  6785. };
  6786. Sub.prototype = Object.create(Super.prototype);
  6787. Sub.prototype.constructor = Sub;
  6788. Sub.cid = cid++;
  6789. Sub.options = mergeOptions(
  6790. Super.options,
  6791. extendOptions
  6792. );
  6793. Sub['super'] = Super;
  6794. // For props and computed properties, we define the proxy getters on
  6795. // the Vue instances at extension time, on the extended prototype. This
  6796. // avoids Object.defineProperty calls for each instance created.
  6797. if (Sub.options.props) {
  6798. initProps$1(Sub);
  6799. }
  6800. if (Sub.options.computed) {
  6801. initComputed$1(Sub);
  6802. }
  6803. // allow further extension/mixin/plugin usage
  6804. Sub.extend = Super.extend;
  6805. Sub.mixin = Super.mixin;
  6806. Sub.use = Super.use;
  6807. // create asset registers, so extended classes
  6808. // can have their private assets too.
  6809. ASSET_TYPES.forEach(function (type) {
  6810. Sub[type] = Super[type];
  6811. });
  6812. // enable recursive self-lookup
  6813. if (name) {
  6814. Sub.options.components[name] = Sub;
  6815. }
  6816. // keep a reference to the super options at extension time.
  6817. // later at instantiation we can check if Super's options have
  6818. // been updated.
  6819. Sub.superOptions = Super.options;
  6820. Sub.extendOptions = extendOptions;
  6821. Sub.sealedOptions = extend({}, Sub.options);
  6822. // cache constructor
  6823. cachedCtors[SuperId] = Sub;
  6824. return Sub
  6825. };
  6826. }
  6827. function initProps$1 (Comp) {
  6828. var props = Comp.options.props;
  6829. for (var key in props) {
  6830. proxy(Comp.prototype, "_props", key);
  6831. }
  6832. }
  6833. function initComputed$1 (Comp) {
  6834. var computed = Comp.options.computed;
  6835. for (var key in computed) {
  6836. defineComputed(Comp.prototype, key, computed[key]);
  6837. }
  6838. }
  6839. /* */
  6840. function initAssetRegisters (Vue) {
  6841. /**
  6842. * Create asset registration methods.
  6843. */
  6844. ASSET_TYPES.forEach(function (type) {
  6845. Vue[type] = function (
  6846. id,
  6847. definition
  6848. ) {
  6849. if (!definition) {
  6850. return this.options[type + 's'][id]
  6851. } else {
  6852. /* istanbul ignore if */
  6853. if ( true && type === 'component') {
  6854. validateComponentName(id);
  6855. }
  6856. if (type === 'component' && isPlainObject(definition)) {
  6857. definition.name = definition.name || id;
  6858. definition = this.options._base.extend(definition);
  6859. }
  6860. if (type === 'directive' && typeof definition === 'function') {
  6861. definition = { bind: definition, update: definition };
  6862. }
  6863. this.options[type + 's'][id] = definition;
  6864. return definition
  6865. }
  6866. };
  6867. });
  6868. }
  6869. /* */
  6870. function getComponentName (opts) {
  6871. return opts && (opts.Ctor.options.name || opts.tag)
  6872. }
  6873. function matches (pattern, name) {
  6874. if (Array.isArray(pattern)) {
  6875. return pattern.indexOf(name) > -1
  6876. } else if (typeof pattern === 'string') {
  6877. return pattern.split(',').indexOf(name) > -1
  6878. } else if (isRegExp(pattern)) {
  6879. return pattern.test(name)
  6880. }
  6881. /* istanbul ignore next */
  6882. return false
  6883. }
  6884. function pruneCache (keepAliveInstance, filter) {
  6885. var cache = keepAliveInstance.cache;
  6886. var keys = keepAliveInstance.keys;
  6887. var _vnode = keepAliveInstance._vnode;
  6888. for (var key in cache) {
  6889. var cachedNode = cache[key];
  6890. if (cachedNode) {
  6891. var name = getComponentName(cachedNode.componentOptions);
  6892. if (name && !filter(name)) {
  6893. pruneCacheEntry(cache, key, keys, _vnode);
  6894. }
  6895. }
  6896. }
  6897. }
  6898. function pruneCacheEntry (
  6899. cache,
  6900. key,
  6901. keys,
  6902. current
  6903. ) {
  6904. var cached$$1 = cache[key];
  6905. if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {
  6906. cached$$1.componentInstance.$destroy();
  6907. }
  6908. cache[key] = null;
  6909. remove(keys, key);
  6910. }
  6911. var patternTypes = [String, RegExp, Array];
  6912. var KeepAlive = {
  6913. name: 'keep-alive',
  6914. abstract: true,
  6915. props: {
  6916. include: patternTypes,
  6917. exclude: patternTypes,
  6918. max: [String, Number]
  6919. },
  6920. created: function created () {
  6921. this.cache = Object.create(null);
  6922. this.keys = [];
  6923. },
  6924. destroyed: function destroyed () {
  6925. for (var key in this.cache) {
  6926. pruneCacheEntry(this.cache, key, this.keys);
  6927. }
  6928. },
  6929. mounted: function mounted () {
  6930. var this$1 = this;
  6931. this.$watch('include', function (val) {
  6932. pruneCache(this$1, function (name) { return matches(val, name); });
  6933. });
  6934. this.$watch('exclude', function (val) {
  6935. pruneCache(this$1, function (name) { return !matches(val, name); });
  6936. });
  6937. },
  6938. render: function render () {
  6939. var slot = this.$slots.default;
  6940. var vnode = getFirstComponentChild(slot);
  6941. var componentOptions = vnode && vnode.componentOptions;
  6942. if (componentOptions) {
  6943. // check pattern
  6944. var name = getComponentName(componentOptions);
  6945. var ref = this;
  6946. var include = ref.include;
  6947. var exclude = ref.exclude;
  6948. if (
  6949. // not included
  6950. (include && (!name || !matches(include, name))) ||
  6951. // excluded
  6952. (exclude && name && matches(exclude, name))
  6953. ) {
  6954. return vnode
  6955. }
  6956. var ref$1 = this;
  6957. var cache = ref$1.cache;
  6958. var keys = ref$1.keys;
  6959. var key = vnode.key == null
  6960. // same constructor may get registered as different local components
  6961. // so cid alone is not enough (#3269)
  6962. ? componentOptions.Ctor.cid + (componentOptions.tag ? ("::" + (componentOptions.tag)) : '')
  6963. : vnode.key;
  6964. if (cache[key]) {
  6965. vnode.componentInstance = cache[key].componentInstance;
  6966. // make current key freshest
  6967. remove(keys, key);
  6968. keys.push(key);
  6969. } else {
  6970. cache[key] = vnode;
  6971. keys.push(key);
  6972. // prune oldest entry
  6973. if (this.max && keys.length > parseInt(this.max)) {
  6974. pruneCacheEntry(cache, keys[0], keys, this._vnode);
  6975. }
  6976. }
  6977. vnode.data.keepAlive = true;
  6978. }
  6979. return vnode || (slot && slot[0])
  6980. }
  6981. };
  6982. var builtInComponents = {
  6983. KeepAlive: KeepAlive
  6984. };
  6985. /* */
  6986. function initGlobalAPI (Vue) {
  6987. // config
  6988. var configDef = {};
  6989. configDef.get = function () { return config; };
  6990. if (true) {
  6991. configDef.set = function () {
  6992. warn(
  6993. 'Do not replace the Vue.config object, set individual fields instead.'
  6994. );
  6995. };
  6996. }
  6997. Object.defineProperty(Vue, 'config', configDef);
  6998. // exposed util methods.
  6999. // NOTE: these are not considered part of the public API - avoid relying on
  7000. // them unless you are aware of the risk.
  7001. Vue.util = {
  7002. warn: warn,
  7003. extend: extend,
  7004. mergeOptions: mergeOptions,
  7005. defineReactive: defineReactive$$1
  7006. };
  7007. Vue.set = set;
  7008. Vue.delete = del;
  7009. Vue.nextTick = nextTick;
  7010. // 2.6 explicit observable API
  7011. Vue.observable = function (obj) {
  7012. observe(obj);
  7013. return obj
  7014. };
  7015. Vue.options = Object.create(null);
  7016. ASSET_TYPES.forEach(function (type) {
  7017. Vue.options[type + 's'] = Object.create(null);
  7018. });
  7019. // this is used to identify the "base" constructor to extend all plain-object
  7020. // components with in Weex's multi-instance scenarios.
  7021. Vue.options._base = Vue;
  7022. extend(Vue.options.components, builtInComponents);
  7023. initUse(Vue);
  7024. initMixin$1(Vue);
  7025. initExtend(Vue);
  7026. initAssetRegisters(Vue);
  7027. }
  7028. initGlobalAPI(Vue);
  7029. Object.defineProperty(Vue.prototype, '$isServer', {
  7030. get: isServerRendering
  7031. });
  7032. Object.defineProperty(Vue.prototype, '$ssrContext', {
  7033. get: function get () {
  7034. /* istanbul ignore next */
  7035. return this.$vnode && this.$vnode.ssrContext
  7036. }
  7037. });
  7038. // expose FunctionalRenderContext for ssr runtime helper installation
  7039. Object.defineProperty(Vue, 'FunctionalRenderContext', {
  7040. value: FunctionalRenderContext
  7041. });
  7042. Vue.version = '2.6.11';
  7043. /**
  7044. * https://raw.githubusercontent.com/Tencent/westore/master/packages/westore/utils/diff.js
  7045. */
  7046. var ARRAYTYPE = '[object Array]';
  7047. var OBJECTTYPE = '[object Object]';
  7048. // const FUNCTIONTYPE = '[object Function]'
  7049. function diff(current, pre) {
  7050. var result = {};
  7051. syncKeys(current, pre);
  7052. _diff(current, pre, '', result);
  7053. return result
  7054. }
  7055. function syncKeys(current, pre) {
  7056. if (current === pre) { return }
  7057. var rootCurrentType = type(current);
  7058. var rootPreType = type(pre);
  7059. if (rootCurrentType == OBJECTTYPE && rootPreType == OBJECTTYPE) {
  7060. if(Object.keys(current).length >= Object.keys(pre).length){
  7061. for (var key in pre) {
  7062. var currentValue = current[key];
  7063. if (currentValue === undefined) {
  7064. current[key] = null;
  7065. } else {
  7066. syncKeys(currentValue, pre[key]);
  7067. }
  7068. }
  7069. }
  7070. } else if (rootCurrentType == ARRAYTYPE && rootPreType == ARRAYTYPE) {
  7071. if (current.length >= pre.length) {
  7072. pre.forEach(function (item, index) {
  7073. syncKeys(current[index], item);
  7074. });
  7075. }
  7076. }
  7077. }
  7078. function _diff(current, pre, path, result) {
  7079. if (current === pre) { return }
  7080. var rootCurrentType = type(current);
  7081. var rootPreType = type(pre);
  7082. if (rootCurrentType == OBJECTTYPE) {
  7083. if (rootPreType != OBJECTTYPE || Object.keys(current).length < Object.keys(pre).length) {
  7084. setResult(result, path, current);
  7085. } else {
  7086. var loop = function ( key ) {
  7087. var currentValue = current[key];
  7088. var preValue = pre[key];
  7089. var currentType = type(currentValue);
  7090. var preType = type(preValue);
  7091. if (currentType != ARRAYTYPE && currentType != OBJECTTYPE) {
  7092. // NOTE 此处将 != 修改为 !==。涉及地方太多恐怕测试不到,如果出现数据对比问题,将其修改回来。
  7093. if (currentValue !== pre[key]) {
  7094. setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
  7095. }
  7096. } else if (currentType == ARRAYTYPE) {
  7097. if (preType != ARRAYTYPE) {
  7098. setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
  7099. } else {
  7100. if (currentValue.length < preValue.length) {
  7101. setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
  7102. } else {
  7103. currentValue.forEach(function (item, index) {
  7104. _diff(item, preValue[index], (path == '' ? '' : path + ".") + key + '[' + index + ']', result);
  7105. });
  7106. }
  7107. }
  7108. } else if (currentType == OBJECTTYPE) {
  7109. if (preType != OBJECTTYPE || Object.keys(currentValue).length < Object.keys(preValue).length) {
  7110. setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
  7111. } else {
  7112. for (var subKey in currentValue) {
  7113. _diff(currentValue[subKey], preValue[subKey], (path == '' ? '' : path + ".") + key + '.' + subKey, result);
  7114. }
  7115. }
  7116. }
  7117. };
  7118. for (var key in current) loop( key );
  7119. }
  7120. } else if (rootCurrentType == ARRAYTYPE) {
  7121. if (rootPreType != ARRAYTYPE) {
  7122. setResult(result, path, current);
  7123. } else {
  7124. if (current.length < pre.length) {
  7125. setResult(result, path, current);
  7126. } else {
  7127. current.forEach(function (item, index) {
  7128. _diff(item, pre[index], path + '[' + index + ']', result);
  7129. });
  7130. }
  7131. }
  7132. } else {
  7133. setResult(result, path, current);
  7134. }
  7135. }
  7136. function setResult(result, k, v) {
  7137. // if (type(v) != FUNCTIONTYPE) {
  7138. result[k] = v;
  7139. // }
  7140. }
  7141. function type(obj) {
  7142. return Object.prototype.toString.call(obj)
  7143. }
  7144. /* */
  7145. function flushCallbacks$1(vm) {
  7146. if (vm.__next_tick_callbacks && vm.__next_tick_callbacks.length) {
  7147. if (Object({"NODE_ENV":"development","VUE_APP_NAME":"鄂州市红十字会","VUE_APP_PLATFORM":"mp-toutiao","BASE_URL":"/"}).VUE_APP_DEBUG) {
  7148. var mpInstance = vm.$scope;
  7149. console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +
  7150. ']:flushCallbacks[' + vm.__next_tick_callbacks.length + ']');
  7151. }
  7152. var copies = vm.__next_tick_callbacks.slice(0);
  7153. vm.__next_tick_callbacks.length = 0;
  7154. for (var i = 0; i < copies.length; i++) {
  7155. copies[i]();
  7156. }
  7157. }
  7158. }
  7159. function hasRenderWatcher(vm) {
  7160. return queue.find(function (watcher) { return vm._watcher === watcher; })
  7161. }
  7162. function nextTick$1(vm, cb) {
  7163. //1.nextTick 之前 已 setData 且 setData 还未回调完成
  7164. //2.nextTick 之前存在 render watcher
  7165. if (!vm.__next_tick_pending && !hasRenderWatcher(vm)) {
  7166. if(Object({"NODE_ENV":"development","VUE_APP_NAME":"鄂州市红十字会","VUE_APP_PLATFORM":"mp-toutiao","BASE_URL":"/"}).VUE_APP_DEBUG){
  7167. var mpInstance = vm.$scope;
  7168. console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +
  7169. ']:nextVueTick');
  7170. }
  7171. return nextTick(cb, vm)
  7172. }else{
  7173. if(Object({"NODE_ENV":"development","VUE_APP_NAME":"鄂州市红十字会","VUE_APP_PLATFORM":"mp-toutiao","BASE_URL":"/"}).VUE_APP_DEBUG){
  7174. var mpInstance$1 = vm.$scope;
  7175. console.log('[' + (+new Date) + '][' + (mpInstance$1.is || mpInstance$1.route) + '][' + vm._uid +
  7176. ']:nextMPTick');
  7177. }
  7178. }
  7179. var _resolve;
  7180. if (!vm.__next_tick_callbacks) {
  7181. vm.__next_tick_callbacks = [];
  7182. }
  7183. vm.__next_tick_callbacks.push(function () {
  7184. if (cb) {
  7185. try {
  7186. cb.call(vm);
  7187. } catch (e) {
  7188. handleError(e, vm, 'nextTick');
  7189. }
  7190. } else if (_resolve) {
  7191. _resolve(vm);
  7192. }
  7193. });
  7194. // $flow-disable-line
  7195. if (!cb && typeof Promise !== 'undefined') {
  7196. return new Promise(function (resolve) {
  7197. _resolve = resolve;
  7198. })
  7199. }
  7200. }
  7201. /* */
  7202. function cloneWithData(vm) {
  7203. // 确保当前 vm 所有数据被同步
  7204. var ret = Object.create(null);
  7205. var dataKeys = [].concat(
  7206. Object.keys(vm._data || {}),
  7207. Object.keys(vm._computedWatchers || {}));
  7208. dataKeys.reduce(function(ret, key) {
  7209. ret[key] = vm[key];
  7210. return ret
  7211. }, ret);
  7212. // vue-composition-api
  7213. var compositionApiState = vm.__composition_api_state__ || vm.__secret_vfa_state__;
  7214. var rawBindings = compositionApiState && compositionApiState.rawBindings;
  7215. if (rawBindings) {
  7216. Object.keys(rawBindings).forEach(function (key) {
  7217. ret[key] = vm[key];
  7218. });
  7219. }
  7220. //TODO 需要把无用数据处理掉,比如 list=>l0 则 list 需要移除,否则多传输一份数据
  7221. Object.assign(ret, vm.$mp.data || {});
  7222. if (
  7223. Array.isArray(vm.$options.behaviors) &&
  7224. vm.$options.behaviors.indexOf('uni://form-field') !== -1
  7225. ) { //form-field
  7226. ret['name'] = vm.name;
  7227. ret['value'] = vm.value;
  7228. }
  7229. return JSON.parse(JSON.stringify(ret))
  7230. }
  7231. var patch = function(oldVnode, vnode) {
  7232. var this$1 = this;
  7233. if (vnode === null) { //destroy
  7234. return
  7235. }
  7236. if (this.mpType === 'page' || this.mpType === 'component') {
  7237. var mpInstance = this.$scope;
  7238. var data = Object.create(null);
  7239. try {
  7240. data = cloneWithData(this);
  7241. } catch (err) {
  7242. console.error(err);
  7243. }
  7244. data.__webviewId__ = mpInstance.data.__webviewId__;
  7245. var mpData = Object.create(null);
  7246. Object.keys(data).forEach(function (key) { //仅同步 data 中有的数据
  7247. mpData[key] = mpInstance.data[key];
  7248. });
  7249. var diffData = this.$shouldDiffData === false ? data : diff(data, mpData);
  7250. if (Object.keys(diffData).length) {
  7251. if (Object({"NODE_ENV":"development","VUE_APP_NAME":"鄂州市红十字会","VUE_APP_PLATFORM":"mp-toutiao","BASE_URL":"/"}).VUE_APP_DEBUG) {
  7252. console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + this._uid +
  7253. ']差量更新',
  7254. JSON.stringify(diffData));
  7255. }
  7256. this.__next_tick_pending = true;
  7257. mpInstance.setData(diffData, function () {
  7258. this$1.__next_tick_pending = false;
  7259. flushCallbacks$1(this$1);
  7260. });
  7261. } else {
  7262. flushCallbacks$1(this);
  7263. }
  7264. }
  7265. };
  7266. /* */
  7267. function createEmptyRender() {
  7268. }
  7269. function mountComponent$1(
  7270. vm,
  7271. el,
  7272. hydrating
  7273. ) {
  7274. if (!vm.mpType) {//main.js 中的 new Vue
  7275. return vm
  7276. }
  7277. if (vm.mpType === 'app') {
  7278. vm.$options.render = createEmptyRender;
  7279. }
  7280. if (!vm.$options.render) {
  7281. vm.$options.render = createEmptyRender;
  7282. if (true) {
  7283. /* istanbul ignore if */
  7284. if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
  7285. vm.$options.el || el) {
  7286. warn(
  7287. 'You are using the runtime-only build of Vue where the template ' +
  7288. 'compiler is not available. Either pre-compile the templates into ' +
  7289. 'render functions, or use the compiler-included build.',
  7290. vm
  7291. );
  7292. } else {
  7293. warn(
  7294. 'Failed to mount component: template or render function not defined.',
  7295. vm
  7296. );
  7297. }
  7298. }
  7299. }
  7300. !vm._$fallback && callHook(vm, 'beforeMount');
  7301. var updateComponent = function () {
  7302. vm._update(vm._render(), hydrating);
  7303. };
  7304. // we set this to vm._watcher inside the watcher's constructor
  7305. // since the watcher's initial patch may call $forceUpdate (e.g. inside child
  7306. // component's mounted hook), which relies on vm._watcher being already defined
  7307. new Watcher(vm, updateComponent, noop, {
  7308. before: function before() {
  7309. if (vm._isMounted && !vm._isDestroyed) {
  7310. callHook(vm, 'beforeUpdate');
  7311. }
  7312. }
  7313. }, true /* isRenderWatcher */);
  7314. hydrating = false;
  7315. return vm
  7316. }
  7317. /* */
  7318. function renderClass (
  7319. staticClass,
  7320. dynamicClass
  7321. ) {
  7322. if (isDef(staticClass) || isDef(dynamicClass)) {
  7323. return concat(staticClass, stringifyClass(dynamicClass))
  7324. }
  7325. /* istanbul ignore next */
  7326. return ''
  7327. }
  7328. function concat (a, b) {
  7329. return a ? b ? (a + ' ' + b) : a : (b || '')
  7330. }
  7331. function stringifyClass (value) {
  7332. if (Array.isArray(value)) {
  7333. return stringifyArray(value)
  7334. }
  7335. if (isObject(value)) {
  7336. return stringifyObject(value)
  7337. }
  7338. if (typeof value === 'string') {
  7339. return value
  7340. }
  7341. /* istanbul ignore next */
  7342. return ''
  7343. }
  7344. function stringifyArray (value) {
  7345. var res = '';
  7346. var stringified;
  7347. for (var i = 0, l = value.length; i < l; i++) {
  7348. if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {
  7349. if (res) { res += ' '; }
  7350. res += stringified;
  7351. }
  7352. }
  7353. return res
  7354. }
  7355. function stringifyObject (value) {
  7356. var res = '';
  7357. for (var key in value) {
  7358. if (value[key]) {
  7359. if (res) { res += ' '; }
  7360. res += key;
  7361. }
  7362. }
  7363. return res
  7364. }
  7365. /* */
  7366. var parseStyleText = cached(function (cssText) {
  7367. var res = {};
  7368. var listDelimiter = /;(?![^(]*\))/g;
  7369. var propertyDelimiter = /:(.+)/;
  7370. cssText.split(listDelimiter).forEach(function (item) {
  7371. if (item) {
  7372. var tmp = item.split(propertyDelimiter);
  7373. tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
  7374. }
  7375. });
  7376. return res
  7377. });
  7378. // normalize possible array / string values into Object
  7379. function normalizeStyleBinding (bindingStyle) {
  7380. if (Array.isArray(bindingStyle)) {
  7381. return toObject(bindingStyle)
  7382. }
  7383. if (typeof bindingStyle === 'string') {
  7384. return parseStyleText(bindingStyle)
  7385. }
  7386. return bindingStyle
  7387. }
  7388. /* */
  7389. var MP_METHODS = ['createSelectorQuery', 'createIntersectionObserver', 'selectAllComponents', 'selectComponent'];
  7390. function getTarget(obj, path) {
  7391. var parts = path.split('.');
  7392. var key = parts[0];
  7393. if (key.indexOf('__$n') === 0) { //number index
  7394. key = parseInt(key.replace('__$n', ''));
  7395. }
  7396. if (parts.length === 1) {
  7397. return obj[key]
  7398. }
  7399. return getTarget(obj[key], parts.slice(1).join('.'))
  7400. }
  7401. function internalMixin(Vue) {
  7402. Vue.config.errorHandler = function(err, vm, info) {
  7403. Vue.util.warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
  7404. console.error(err);
  7405. /* eslint-disable no-undef */
  7406. var app = typeof getApp === 'function' && getApp();
  7407. if (app && app.onError) {
  7408. app.onError(err);
  7409. }
  7410. };
  7411. var oldEmit = Vue.prototype.$emit;
  7412. Vue.prototype.$emit = function(event) {
  7413. if (this.$scope && event) {
  7414. this.$scope['triggerEvent'](event, {
  7415. __args__: toArray(arguments, 1)
  7416. });
  7417. }
  7418. return oldEmit.apply(this, arguments)
  7419. };
  7420. Vue.prototype.$nextTick = function(fn) {
  7421. return nextTick$1(this, fn)
  7422. };
  7423. MP_METHODS.forEach(function (method) {
  7424. Vue.prototype[method] = function(args) {
  7425. if (this.$scope && this.$scope[method]) {
  7426. return this.$scope[method](args)
  7427. }
  7428. // mp-alipay
  7429. if (typeof my === 'undefined') {
  7430. return
  7431. }
  7432. if (method === 'createSelectorQuery') {
  7433. /* eslint-disable no-undef */
  7434. return my.createSelectorQuery(args)
  7435. } else if (method === 'createIntersectionObserver') {
  7436. /* eslint-disable no-undef */
  7437. return my.createIntersectionObserver(args)
  7438. }
  7439. // TODO mp-alipay 暂不支持 selectAllComponents,selectComponent
  7440. };
  7441. });
  7442. Vue.prototype.__init_provide = initProvide;
  7443. Vue.prototype.__init_injections = initInjections;
  7444. Vue.prototype.__call_hook = function(hook, args) {
  7445. var vm = this;
  7446. // #7573 disable dep collection when invoking lifecycle hooks
  7447. pushTarget();
  7448. var handlers = vm.$options[hook];
  7449. var info = hook + " hook";
  7450. var ret;
  7451. if (handlers) {
  7452. for (var i = 0, j = handlers.length; i < j; i++) {
  7453. ret = invokeWithErrorHandling(handlers[i], vm, args ? [args] : null, vm, info);
  7454. }
  7455. }
  7456. if (vm._hasHookEvent) {
  7457. vm.$emit('hook:' + hook, args);
  7458. }
  7459. popTarget();
  7460. return ret
  7461. };
  7462. Vue.prototype.__set_model = function(target, key, value, modifiers) {
  7463. if (Array.isArray(modifiers)) {
  7464. if (modifiers.indexOf('trim') !== -1) {
  7465. value = value.trim();
  7466. }
  7467. if (modifiers.indexOf('number') !== -1) {
  7468. value = this._n(value);
  7469. }
  7470. }
  7471. if (!target) {
  7472. target = this;
  7473. }
  7474. target[key] = value;
  7475. };
  7476. Vue.prototype.__set_sync = function(target, key, value) {
  7477. if (!target) {
  7478. target = this;
  7479. }
  7480. target[key] = value;
  7481. };
  7482. Vue.prototype.__get_orig = function(item) {
  7483. if (isPlainObject(item)) {
  7484. return item['$orig'] || item
  7485. }
  7486. return item
  7487. };
  7488. Vue.prototype.__get_value = function(dataPath, target) {
  7489. return getTarget(target || this, dataPath)
  7490. };
  7491. Vue.prototype.__get_class = function(dynamicClass, staticClass) {
  7492. return renderClass(staticClass, dynamicClass)
  7493. };
  7494. Vue.prototype.__get_style = function(dynamicStyle, staticStyle) {
  7495. if (!dynamicStyle && !staticStyle) {
  7496. return ''
  7497. }
  7498. var dynamicStyleObj = normalizeStyleBinding(dynamicStyle);
  7499. var styleObj = staticStyle ? extend(staticStyle, dynamicStyleObj) : dynamicStyleObj;
  7500. return Object.keys(styleObj).map(function (name) { return ((hyphenate(name)) + ":" + (styleObj[name])); }).join(';')
  7501. };
  7502. Vue.prototype.__map = function(val, iteratee) {
  7503. //TODO 暂不考虑 string
  7504. var ret, i, l, keys, key;
  7505. if (Array.isArray(val)) {
  7506. ret = new Array(val.length);
  7507. for (i = 0, l = val.length; i < l; i++) {
  7508. ret[i] = iteratee(val[i], i);
  7509. }
  7510. return ret
  7511. } else if (isObject(val)) {
  7512. keys = Object.keys(val);
  7513. ret = Object.create(null);
  7514. for (i = 0, l = keys.length; i < l; i++) {
  7515. key = keys[i];
  7516. ret[key] = iteratee(val[key], key, i);
  7517. }
  7518. return ret
  7519. } else if (typeof val === 'number') {
  7520. ret = new Array(val);
  7521. for (i = 0, l = val; i < l; i++) {
  7522. // 第一个参数暂时仍和小程序一致
  7523. ret[i] = iteratee(i, i);
  7524. }
  7525. return ret
  7526. }
  7527. return []
  7528. };
  7529. }
  7530. /* */
  7531. var LIFECYCLE_HOOKS$1 = [
  7532. //App
  7533. 'onLaunch',
  7534. 'onShow',
  7535. 'onHide',
  7536. 'onUniNViewMessage',
  7537. 'onPageNotFound',
  7538. 'onThemeChange',
  7539. 'onError',
  7540. 'onUnhandledRejection',
  7541. //Page
  7542. 'onInit',
  7543. 'onLoad',
  7544. // 'onShow',
  7545. 'onReady',
  7546. // 'onHide',
  7547. 'onUnload',
  7548. 'onPullDownRefresh',
  7549. 'onReachBottom',
  7550. 'onTabItemTap',
  7551. 'onAddToFavorites',
  7552. 'onShareTimeline',
  7553. 'onShareAppMessage',
  7554. 'onResize',
  7555. 'onPageScroll',
  7556. 'onNavigationBarButtonTap',
  7557. 'onBackPress',
  7558. 'onNavigationBarSearchInputChanged',
  7559. 'onNavigationBarSearchInputConfirmed',
  7560. 'onNavigationBarSearchInputClicked',
  7561. //Component
  7562. // 'onReady', // 兼容旧版本,应该移除该事件
  7563. 'onPageShow',
  7564. 'onPageHide',
  7565. 'onPageResize'
  7566. ];
  7567. function lifecycleMixin$1(Vue) {
  7568. //fixed vue-class-component
  7569. var oldExtend = Vue.extend;
  7570. Vue.extend = function(extendOptions) {
  7571. extendOptions = extendOptions || {};
  7572. var methods = extendOptions.methods;
  7573. if (methods) {
  7574. Object.keys(methods).forEach(function (methodName) {
  7575. if (LIFECYCLE_HOOKS$1.indexOf(methodName)!==-1) {
  7576. extendOptions[methodName] = methods[methodName];
  7577. delete methods[methodName];
  7578. }
  7579. });
  7580. }
  7581. return oldExtend.call(this, extendOptions)
  7582. };
  7583. var strategies = Vue.config.optionMergeStrategies;
  7584. var mergeHook = strategies.created;
  7585. LIFECYCLE_HOOKS$1.forEach(function (hook) {
  7586. strategies[hook] = mergeHook;
  7587. });
  7588. Vue.prototype.__lifecycle_hooks__ = LIFECYCLE_HOOKS$1;
  7589. }
  7590. /* */
  7591. // install platform patch function
  7592. Vue.prototype.__patch__ = patch;
  7593. // public mount method
  7594. Vue.prototype.$mount = function(
  7595. el ,
  7596. hydrating
  7597. ) {
  7598. return mountComponent$1(this, el, hydrating)
  7599. };
  7600. lifecycleMixin$1(Vue);
  7601. internalMixin(Vue);
  7602. /* */
  7603. /* harmony default export */ __webpack_exports__["default"] = (Vue);
  7604. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../webpack/buildin/global.js */ 3)))
  7605. /***/ }),
  7606. /***/ 20:
  7607. /*!**********************************!*\
  7608. !*** D:/gsxm/ezred/api/index.js ***!
  7609. \**********************************/
  7610. /*! no static exports found */
  7611. /***/ (function(module, exports, __webpack_require__) {
  7612. "use strict";
  7613. Object.defineProperty(exports, "__esModule", { value: true });exports.loadIndexs = loadIndexs;exports.bannerlist = bannerlist;exports.itemList = itemList;exports.upload = upload;exports.groom4 = groom4;exports.groom1 = groom1;exports.groom3 = groom3;exports.myCreateCircle = myCreateCircle;exports.getList = getList;exports.getNumber = getNumber;exports.add_volunteers = add_volunteers;exports.joinSec = joinSec;exports.joinSecc = joinSecc;exports.getdis = getdis;exports.tocall = tocall;exports.training = training;exports.getseek = getseek;exports.getcomAddress = getcomAddress;exports.getrescue = getrescue;exports.change_rescue = change_rescue;exports.getListAED = getListAED;exports.getListMechanism = getListMechanism;exports.getDistance = getDistance;exports.deleteList = deleteList;var _request = _interopRequireWildcard(__webpack_require__(/*! @/utils/request */ 21));function _getRequireWildcardCache() {if (typeof WeakMap !== "function") return null;var cache = new WeakMap();_getRequireWildcardCache = function _getRequireWildcardCache() {return cache;};return cache;}function _interopRequireWildcard(obj) {if (obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache();if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;}
  7614. // 获取轮播图
  7615. function loadIndexs(data) {
  7616. return (0, _request.default)({
  7617. url: '/api/index',
  7618. method: 'get',
  7619. data: data });
  7620. }
  7621. // 获取科普文章列表
  7622. function bannerlist(data) {
  7623. return (0, _request.default)({
  7624. url: '/api/article/list/1',
  7625. method: 'get',
  7626. data: data });
  7627. }
  7628. // 获取博爱项目文章列表
  7629. function itemList(data) {
  7630. return (0, _request.default)({
  7631. url: '/api/article/list/4',
  7632. method: 'get',
  7633. data: data });
  7634. }
  7635. //上传图片
  7636. function upload(data) {
  7637. return (0, _request.upFilse)({
  7638. url: '/api/upload/image',
  7639. method: 'post',
  7640. data: data });
  7641. }
  7642. // 促销商品
  7643. function groom4(data) {
  7644. return (0, _request.default)({
  7645. url: '/api/groom/list/4',
  7646. method: 'get',
  7647. data: data });
  7648. }
  7649. // 精品推荐
  7650. function groom1(data) {
  7651. return (0, _request.default)({
  7652. url: '/api/groom/list/1',
  7653. method: 'get',
  7654. data: data });
  7655. }
  7656. // 新品首发
  7657. function groom3(data) {
  7658. return (0, _request.default)({
  7659. url: '/api/groom/list/3',
  7660. method: 'get',
  7661. data: data });
  7662. }
  7663. // 获取我创建的圈子
  7664. function myCreateCircle(data) {
  7665. return (0, _request.default)({
  7666. url: '/api/circle/mycreate',
  7667. method: 'post',
  7668. data: data });
  7669. }
  7670. // 造血干细胞捐献
  7671. function getList(data) {
  7672. return (0, _request.default)({
  7673. url: '/api/sign_cell',
  7674. method: 'post',
  7675. data: data });
  7676. }
  7677. // 救护者页面获取参与人数
  7678. function getNumber(data) {
  7679. return (0, _request.default)({
  7680. url: '/api/get_rescuer',
  7681. method: 'get',
  7682. data: data });
  7683. }
  7684. // 志愿者报名
  7685. function add_volunteers(data) {
  7686. return (0, _request.default)({
  7687. url: '/api/add_registration',
  7688. method: 'post',
  7689. data: data });
  7690. }
  7691. // joinSec
  7692. function joinSec(data) {
  7693. return (0, _request.default)({
  7694. url: '/api/add_volunteers',
  7695. method: 'post',
  7696. data: data });
  7697. }
  7698. // joinSecc 器官捐赠
  7699. function joinSecc(data) {
  7700. return (0, _request.default)({
  7701. url: '/api/add_donation',
  7702. method: 'post',
  7703. data: data });
  7704. }
  7705. // 获取定位
  7706. function getdis(data) {
  7707. return (0, _request.default)({
  7708. url: '/api/getdis',
  7709. method: 'get',
  7710. data: data });
  7711. }
  7712. // 立即救援
  7713. function tocall(data) {
  7714. return (0, _request.default)({
  7715. url: '/api/do_getdis',
  7716. method: 'get',
  7717. data: data });
  7718. }
  7719. // 救护培训报名
  7720. function training(data) {
  7721. return (0, _request.default)({
  7722. url: '/api/training',
  7723. method: 'get',
  7724. data: data });
  7725. }
  7726. // 求助记录 getsee
  7727. function getseek(data) {
  7728. return (0, _request.default)({
  7729. url: '/api/seek',
  7730. method: 'get',
  7731. data: data });
  7732. }
  7733. // getcomAddress 获取常用地址
  7734. function getcomAddress(data) {
  7735. return (0, _request.default)({
  7736. url: '/api/get_commonly',
  7737. method: 'get',
  7738. data: data });
  7739. }
  7740. // 救援记录 rescue
  7741. function getrescue(data) {
  7742. return (0, _request.default)({
  7743. url: '/api/rescueee',
  7744. method: 'get',
  7745. data: data });
  7746. }
  7747. function change_rescue(data) {
  7748. return (0, _request.default)({
  7749. url: '/api/change_rescue',
  7750. method: 'get',
  7751. data: data });
  7752. }
  7753. // 获取ADE经纬度 getListAED getDistance
  7754. function getListAED(data) {
  7755. return (0, _request.default)({
  7756. url: '/api/getAed',
  7757. method: 'get',
  7758. data: data });
  7759. }
  7760. //获取机构
  7761. function getListMechanism(data) {
  7762. return (0, _request.default)({
  7763. url: '/api/mechanism',
  7764. method: 'get',
  7765. data: data });
  7766. }
  7767. function getDistance(data) {
  7768. return (0, _request.default)({
  7769. url: '/api/aeddiss',
  7770. method: 'get',
  7771. data: data });
  7772. }
  7773. // deleteList 删除救援地址
  7774. function deleteList(data) {
  7775. return (0, _request.default)({
  7776. url: '/api/del_resc',
  7777. method: 'get',
  7778. data: data });
  7779. }
  7780. /***/ }),
  7781. /***/ 21:
  7782. /*!**************************************!*\
  7783. !*** D:/gsxm/ezred/utils/request.js ***!
  7784. \**************************************/
  7785. /*! no static exports found */
  7786. /***/ (function(module, exports, __webpack_require__) {
  7787. "use strict";
  7788. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = exports.upFilse = void 0;var _newRequest = _interopRequireDefault(__webpack_require__(/*! ./newRequest.js */ 22));
  7789. var _store = _interopRequireDefault(__webpack_require__(/*! ../store */ 5));
  7790. var _loginUtils = __webpack_require__(/*! @/utils/loginUtils.js */ 26);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  7791. // 请求完成后拦截
  7792. _newRequest.default.interceptors.response(
  7793. function (response) {
  7794. try {
  7795. var res = response.data;
  7796. // 解析字符串为数字
  7797. if (res.status !== 200) {
  7798. if (res.status == 410000) {
  7799. // 存储当前地址
  7800. (0, _loginUtils.saveUrl)();
  7801. // 调用退出登录方法清空用户信息
  7802. _store.default.commit('user/logout');
  7803. // 判断是否开启强制登录
  7804. // 跳转页面
  7805. (0, _loginUtils.interceptor)();
  7806. uni.showModal({
  7807. title: "您未登录!是否马上登录?",
  7808. success: function success(e) {
  7809. if (e.confirm) {
  7810. // 保存当前页面地址
  7811. }
  7812. } });
  7813. } else {
  7814. if (res.msg != '系统出现异常') {
  7815. uni.showToast({
  7816. title: res.msg,
  7817. duration: 1500,
  7818. mask: false,
  7819. icon: 'none' });
  7820. }
  7821. }
  7822. console.log(res);
  7823. //return Promise.reject(new Error(res.msg || 'Error'))
  7824. } else {
  7825. return res;
  7826. }
  7827. } catch (e) {
  7828. console.log(e);
  7829. }
  7830. },
  7831. function (error) {
  7832. uni.showToast({
  7833. title: "加载错误请重试",
  7834. duration: 1500,
  7835. mask: false,
  7836. icon: 'none' });
  7837. return Promise.reject(error);
  7838. });
  7839. // 请求前拦截器
  7840. _newRequest.default.interceptors.request(
  7841. function (config) {
  7842. // config.data.token = getToken();
  7843. // console.log(config);
  7844. var token = uni.getStorageSync('token');
  7845. // console.log(token);
  7846. if (!config.header) {
  7847. config.header = {
  7848. "Authori-zation": 'Bearer ' + token };
  7849. } else {
  7850. // 添加key请求头
  7851. config.header["Authori-zation"] = 'Bearer ' + token;
  7852. }
  7853. return config;
  7854. },
  7855. function (error) {
  7856. // 错误处理
  7857. console.log(error);
  7858. return Promise.reject(error);
  7859. });
  7860. var upFilse = _newRequest.default.upFilse;exports.upFilse = upFilse;var _default =
  7861. _newRequest.default.open;exports.default = _default;
  7862. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
  7863. /***/ }),
  7864. /***/ 22:
  7865. /*!*****************************************!*\
  7866. !*** D:/gsxm/ezred/utils/newRequest.js ***!
  7867. \*****************************************/
  7868. /*! no static exports found */
  7869. /***/ (function(module, exports, __webpack_require__) {
  7870. "use strict";
  7871. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _regenerator = _interopRequireDefault(__webpack_require__(/*! ./node_modules/@babel/runtime/regenerator */ 23));var _store = _interopRequireDefault(__webpack_require__(/*! ../store */ 5));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {try {var info = gen[key](arg);var value = info.value;} catch (error) {reject(error);return;}if (info.done) {resolve(value);} else {Promise.resolve(value).then(_next, _throw);}}function _asyncToGenerator(fn) {return function () {var self = this,args = arguments;return new Promise(function (resolve, reject) {var gen = fn.apply(self, args);function _next(value) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);}function _throw(err) {asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);}_next(undefined);});};}
  7872. var service = {
  7873. // baseURL: store.state.baseURL, // 请求头
  7874. baseURL: '', // 请求头
  7875. header: {
  7876. 'Content-Type': "application/x-www-form-urlencoded" },
  7877. // 请求拦截器
  7878. interceptors: {
  7879. // 安装请求前拦截
  7880. request: function request(success, iserror) {
  7881. service.request.success = success;
  7882. service.request.error = iserror;
  7883. },
  7884. // 安装请求完成后拦截
  7885. response: function response(success, iserror) {
  7886. service.response.success = success;
  7887. service.response.error = iserror;
  7888. } },
  7889. // 请求前拦截
  7890. request: {
  7891. // 回调成功执行方法
  7892. success: function success(e) {
  7893. return e;
  7894. },
  7895. // 回调失败
  7896. error: function error(e) {
  7897. return e;
  7898. } },
  7899. // 请求完成后拦截
  7900. response: {
  7901. // 回调成功执行方法
  7902. success: function success(e) {
  7903. return e;
  7904. },
  7905. // 回调失败
  7906. error: function error(e) {
  7907. return e;
  7908. } },
  7909. // 开始请求
  7910. open: function () {var _open = _asyncToGenerator( /*#__PURE__*/_regenerator.default.mark(function _callee(data) {return _regenerator.default.wrap(function _callee$(_context) {while (1) {switch (_context.prev = _context.next) {case 0:_context.next = 2;return (
  7911. new Promise(function (resolve, reject) {
  7912. var requestData = ''; //保存处理完成后请求数据
  7913. //console.log(data);
  7914. // 请求前数据处理
  7915. requestData = service.request.success(data);
  7916. // 保存请求地址;
  7917. var url;
  7918. if (requestData.url.indexOf('http') > -1) {
  7919. url = requestData.url;
  7920. } else {
  7921. url = service.baseURL + requestData.url;
  7922. }
  7923. // 数据复制用于请求
  7924. uni.request({
  7925. url: url,
  7926. method: requestData.method || 'GET',
  7927. data: requestData.data,
  7928. header: data.header || service.header,
  7929. success: function success(res) {
  7930. if (res.statusCode == 200) {
  7931. try {
  7932. resolve(service.response.success(res));
  7933. } catch (e) {
  7934. service.response.error(e);
  7935. }
  7936. }
  7937. },
  7938. // 请求失败数据处理
  7939. fail: function fail(err) {
  7940. service.response.error(err);
  7941. } });
  7942. }));case 2:return _context.abrupt("return", _context.sent);case 3:case "end":return _context.stop();}}}, _callee);}));function open(_x) {return _open.apply(this, arguments);}return open;}(),
  7943. // 上传文件
  7944. upFilse: function () {var _upFilse = _asyncToGenerator( /*#__PURE__*/_regenerator.default.mark(function _callee4(data) {return _regenerator.default.wrap(function _callee4$(_context4) {while (1) {switch (_context4.prev = _context4.next) {case 0:_context4.next = 2;return (
  7945. new Promise(function (resolve, reject) {
  7946. var requestData = ''; //保存处理完成后请求数据
  7947. try {
  7948. // 请求前数据处理
  7949. requestData = service.request.success(data);
  7950. } catch (e) {
  7951. // 请求报错拦截
  7952. service.request.error(e);
  7953. }
  7954. var config = {
  7955. // 上传图片的API
  7956. upload_img_url: service.baseURL + requestData.url };
  7957. var Uploader = {
  7958. // 选择图片
  7959. choose: function choose(num) {
  7960. return new Promise(function (resolve, reject) {
  7961. uni.chooseImage({
  7962. count: num,
  7963. sourceType: ['album'],
  7964. sizeType: ['compressed'],
  7965. success: function success(res) {
  7966. // console.log(res);
  7967. // 缓存文件路径
  7968. resolve(res.tempFilePaths);
  7969. },
  7970. fail: function fail(err) {
  7971. console.log(err);
  7972. reject(err);
  7973. } });
  7974. });
  7975. },
  7976. // 上传图片
  7977. upload_one: function upload_one(path) {
  7978. return new Promise(function (resolve, reject) {
  7979. uni.showLoading({
  7980. title: '上传中' });
  7981. uni.uploadFile({
  7982. url: config.upload_img_url, //仅为示例,非真实的接口地址
  7983. filePath: path,
  7984. name: 'file',
  7985. header: {
  7986. "Authori-zation": 'Bearer ' + uni.getStorageSync('token') },
  7987. success: function success(uploadFileRes) {
  7988. if ("string" === typeof uploadFileRes.data) {
  7989. resolve(JSON.parse(uploadFileRes.data).data);
  7990. } else {
  7991. resolve(uploadFileRes.data.data);
  7992. }
  7993. },
  7994. complete: function complete() {
  7995. uni.hideLoading();
  7996. } });
  7997. });
  7998. },
  7999. // 上传多个图片
  8000. upload: function upload(path_arr) {var _this = this;
  8001. var num = path_arr.length;
  8002. return new Promise( /*#__PURE__*/function () {var _ref = _asyncToGenerator( /*#__PURE__*/_regenerator.default.mark(function _callee2(resolve, reject) {var img_urls, i, img_url;return _regenerator.default.wrap(function _callee2$(_context2) {while (1) {switch (_context2.prev = _context2.next) {case 0:
  8003. img_urls = [];
  8004. i = 0;case 2:if (!(i < num)) {_context2.next = 10;break;}_context2.next = 5;return (
  8005. _this.upload_one(path_arr[i]));case 5:img_url = _context2.sent;
  8006. img_urls.push(img_url);case 7:i++;_context2.next = 2;break;case 10:
  8007. ;
  8008. resolve(img_urls);case 12:case "end":return _context2.stop();}}}, _callee2);}));return function (_x3, _x4) {return _ref.apply(this, arguments);};}());
  8009. },
  8010. // 触发上传图片事件
  8011. choose_and_upload: function choose_and_upload(num) {var _this2 = this;
  8012. return new Promise( /*#__PURE__*/function () {var _ref2 = _asyncToGenerator( /*#__PURE__*/_regenerator.default.mark(function _callee3(resolve, reject) {var path_arr;return _regenerator.default.wrap(function _callee3$(_context3) {while (1) {switch (_context3.prev = _context3.next) {case 0:_context3.next = 2;return (
  8013. _this2.choose(num));case 2:path_arr = _context3.sent;_context3.next = 5;return (
  8014. _this2.upload(path_arr).then(function (e) {
  8015. resolve(e);
  8016. }).catch(function (e) {
  8017. reject(e);
  8018. }));case 5:case "end":return _context3.stop();}}}, _callee3);}));return function (_x5, _x6) {return _ref2.apply(this, arguments);};}());
  8019. } };
  8020. Uploader.choose_and_upload(1).then(function (e) {
  8021. resolve(e);
  8022. }).catch(function (e) {
  8023. console.log(e);
  8024. });
  8025. }));case 2:return _context4.abrupt("return", _context4.sent);case 3:case "end":return _context4.stop();}}}, _callee4);}));function upFilse(_x2) {return _upFilse.apply(this, arguments);}return upFilse;}() };var _default =
  8026. service;exports.default = _default;
  8027. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
  8028. /***/ }),
  8029. /***/ 23:
  8030. /*!**********************************************************!*\
  8031. !*** ./node_modules/@babel/runtime/regenerator/index.js ***!
  8032. \**********************************************************/
  8033. /*! no static exports found */
  8034. /***/ (function(module, exports, __webpack_require__) {
  8035. module.exports = __webpack_require__(/*! regenerator-runtime */ 24);
  8036. /***/ }),
  8037. /***/ 24:
  8038. /*!************************************************************!*\
  8039. !*** ./node_modules/regenerator-runtime/runtime-module.js ***!
  8040. \************************************************************/
  8041. /*! no static exports found */
  8042. /***/ (function(module, exports, __webpack_require__) {
  8043. /**
  8044. * Copyright (c) 2014-present, Facebook, Inc.
  8045. *
  8046. * This source code is licensed under the MIT license found in the
  8047. * LICENSE file in the root directory of this source tree.
  8048. */
  8049. // This method of obtaining a reference to the global object needs to be
  8050. // kept identical to the way it is obtained in runtime.js
  8051. var g = (function() {
  8052. return this || (typeof self === "object" && self);
  8053. })() || Function("return this")();
  8054. // Use `getOwnPropertyNames` because not all browsers support calling
  8055. // `hasOwnProperty` on the global `self` object in a worker. See #183.
  8056. var hadRuntime = g.regeneratorRuntime &&
  8057. Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0;
  8058. // Save the old regeneratorRuntime in case it needs to be restored later.
  8059. var oldRuntime = hadRuntime && g.regeneratorRuntime;
  8060. // Force reevalutation of runtime.js.
  8061. g.regeneratorRuntime = undefined;
  8062. module.exports = __webpack_require__(/*! ./runtime */ 25);
  8063. if (hadRuntime) {
  8064. // Restore the original runtime.
  8065. g.regeneratorRuntime = oldRuntime;
  8066. } else {
  8067. // Remove the global property added by runtime.js.
  8068. try {
  8069. delete g.regeneratorRuntime;
  8070. } catch(e) {
  8071. g.regeneratorRuntime = undefined;
  8072. }
  8073. }
  8074. /***/ }),
  8075. /***/ 25:
  8076. /*!*****************************************************!*\
  8077. !*** ./node_modules/regenerator-runtime/runtime.js ***!
  8078. \*****************************************************/
  8079. /*! no static exports found */
  8080. /***/ (function(module, exports) {
  8081. /**
  8082. * Copyright (c) 2014-present, Facebook, Inc.
  8083. *
  8084. * This source code is licensed under the MIT license found in the
  8085. * LICENSE file in the root directory of this source tree.
  8086. */
  8087. !(function(global) {
  8088. "use strict";
  8089. var Op = Object.prototype;
  8090. var hasOwn = Op.hasOwnProperty;
  8091. var undefined; // More compressible than void 0.
  8092. var $Symbol = typeof Symbol === "function" ? Symbol : {};
  8093. var iteratorSymbol = $Symbol.iterator || "@@iterator";
  8094. var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
  8095. var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
  8096. var inModule = typeof module === "object";
  8097. var runtime = global.regeneratorRuntime;
  8098. if (runtime) {
  8099. if (inModule) {
  8100. // If regeneratorRuntime is defined globally and we're in a module,
  8101. // make the exports object identical to regeneratorRuntime.
  8102. module.exports = runtime;
  8103. }
  8104. // Don't bother evaluating the rest of this file if the runtime was
  8105. // already defined globally.
  8106. return;
  8107. }
  8108. // Define the runtime globally (as expected by generated code) as either
  8109. // module.exports (if we're in a module) or a new, empty object.
  8110. runtime = global.regeneratorRuntime = inModule ? module.exports : {};
  8111. function wrap(innerFn, outerFn, self, tryLocsList) {
  8112. // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
  8113. var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
  8114. var generator = Object.create(protoGenerator.prototype);
  8115. var context = new Context(tryLocsList || []);
  8116. // The ._invoke method unifies the implementations of the .next,
  8117. // .throw, and .return methods.
  8118. generator._invoke = makeInvokeMethod(innerFn, self, context);
  8119. return generator;
  8120. }
  8121. runtime.wrap = wrap;
  8122. // Try/catch helper to minimize deoptimizations. Returns a completion
  8123. // record like context.tryEntries[i].completion. This interface could
  8124. // have been (and was previously) designed to take a closure to be
  8125. // invoked without arguments, but in all the cases we care about we
  8126. // already have an existing method we want to call, so there's no need
  8127. // to create a new function object. We can even get away with assuming
  8128. // the method takes exactly one argument, since that happens to be true
  8129. // in every case, so we don't have to touch the arguments object. The
  8130. // only additional allocation required is the completion record, which
  8131. // has a stable shape and so hopefully should be cheap to allocate.
  8132. function tryCatch(fn, obj, arg) {
  8133. try {
  8134. return { type: "normal", arg: fn.call(obj, arg) };
  8135. } catch (err) {
  8136. return { type: "throw", arg: err };
  8137. }
  8138. }
  8139. var GenStateSuspendedStart = "suspendedStart";
  8140. var GenStateSuspendedYield = "suspendedYield";
  8141. var GenStateExecuting = "executing";
  8142. var GenStateCompleted = "completed";
  8143. // Returning this object from the innerFn has the same effect as
  8144. // breaking out of the dispatch switch statement.
  8145. var ContinueSentinel = {};
  8146. // Dummy constructor functions that we use as the .constructor and
  8147. // .constructor.prototype properties for functions that return Generator
  8148. // objects. For full spec compliance, you may wish to configure your
  8149. // minifier not to mangle the names of these two functions.
  8150. function Generator() {}
  8151. function GeneratorFunction() {}
  8152. function GeneratorFunctionPrototype() {}
  8153. // This is a polyfill for %IteratorPrototype% for environments that
  8154. // don't natively support it.
  8155. var IteratorPrototype = {};
  8156. IteratorPrototype[iteratorSymbol] = function () {
  8157. return this;
  8158. };
  8159. var getProto = Object.getPrototypeOf;
  8160. var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
  8161. if (NativeIteratorPrototype &&
  8162. NativeIteratorPrototype !== Op &&
  8163. hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
  8164. // This environment has a native %IteratorPrototype%; use it instead
  8165. // of the polyfill.
  8166. IteratorPrototype = NativeIteratorPrototype;
  8167. }
  8168. var Gp = GeneratorFunctionPrototype.prototype =
  8169. Generator.prototype = Object.create(IteratorPrototype);
  8170. GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
  8171. GeneratorFunctionPrototype.constructor = GeneratorFunction;
  8172. GeneratorFunctionPrototype[toStringTagSymbol] =
  8173. GeneratorFunction.displayName = "GeneratorFunction";
  8174. // Helper for defining the .next, .throw, and .return methods of the
  8175. // Iterator interface in terms of a single ._invoke method.
  8176. function defineIteratorMethods(prototype) {
  8177. ["next", "throw", "return"].forEach(function(method) {
  8178. prototype[method] = function(arg) {
  8179. return this._invoke(method, arg);
  8180. };
  8181. });
  8182. }
  8183. runtime.isGeneratorFunction = function(genFun) {
  8184. var ctor = typeof genFun === "function" && genFun.constructor;
  8185. return ctor
  8186. ? ctor === GeneratorFunction ||
  8187. // For the native GeneratorFunction constructor, the best we can
  8188. // do is to check its .name property.
  8189. (ctor.displayName || ctor.name) === "GeneratorFunction"
  8190. : false;
  8191. };
  8192. runtime.mark = function(genFun) {
  8193. if (Object.setPrototypeOf) {
  8194. Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
  8195. } else {
  8196. genFun.__proto__ = GeneratorFunctionPrototype;
  8197. if (!(toStringTagSymbol in genFun)) {
  8198. genFun[toStringTagSymbol] = "GeneratorFunction";
  8199. }
  8200. }
  8201. genFun.prototype = Object.create(Gp);
  8202. return genFun;
  8203. };
  8204. // Within the body of any async function, `await x` is transformed to
  8205. // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
  8206. // `hasOwn.call(value, "__await")` to determine if the yielded value is
  8207. // meant to be awaited.
  8208. runtime.awrap = function(arg) {
  8209. return { __await: arg };
  8210. };
  8211. function AsyncIterator(generator) {
  8212. function invoke(method, arg, resolve, reject) {
  8213. var record = tryCatch(generator[method], generator, arg);
  8214. if (record.type === "throw") {
  8215. reject(record.arg);
  8216. } else {
  8217. var result = record.arg;
  8218. var value = result.value;
  8219. if (value &&
  8220. typeof value === "object" &&
  8221. hasOwn.call(value, "__await")) {
  8222. return Promise.resolve(value.__await).then(function(value) {
  8223. invoke("next", value, resolve, reject);
  8224. }, function(err) {
  8225. invoke("throw", err, resolve, reject);
  8226. });
  8227. }
  8228. return Promise.resolve(value).then(function(unwrapped) {
  8229. // When a yielded Promise is resolved, its final value becomes
  8230. // the .value of the Promise<{value,done}> result for the
  8231. // current iteration.
  8232. result.value = unwrapped;
  8233. resolve(result);
  8234. }, function(error) {
  8235. // If a rejected Promise was yielded, throw the rejection back
  8236. // into the async generator function so it can be handled there.
  8237. return invoke("throw", error, resolve, reject);
  8238. });
  8239. }
  8240. }
  8241. var previousPromise;
  8242. function enqueue(method, arg) {
  8243. function callInvokeWithMethodAndArg() {
  8244. return new Promise(function(resolve, reject) {
  8245. invoke(method, arg, resolve, reject);
  8246. });
  8247. }
  8248. return previousPromise =
  8249. // If enqueue has been called before, then we want to wait until
  8250. // all previous Promises have been resolved before calling invoke,
  8251. // so that results are always delivered in the correct order. If
  8252. // enqueue has not been called before, then it is important to
  8253. // call invoke immediately, without waiting on a callback to fire,
  8254. // so that the async generator function has the opportunity to do
  8255. // any necessary setup in a predictable way. This predictability
  8256. // is why the Promise constructor synchronously invokes its
  8257. // executor callback, and why async functions synchronously
  8258. // execute code before the first await. Since we implement simple
  8259. // async functions in terms of async generators, it is especially
  8260. // important to get this right, even though it requires care.
  8261. previousPromise ? previousPromise.then(
  8262. callInvokeWithMethodAndArg,
  8263. // Avoid propagating failures to Promises returned by later
  8264. // invocations of the iterator.
  8265. callInvokeWithMethodAndArg
  8266. ) : callInvokeWithMethodAndArg();
  8267. }
  8268. // Define the unified helper method that is used to implement .next,
  8269. // .throw, and .return (see defineIteratorMethods).
  8270. this._invoke = enqueue;
  8271. }
  8272. defineIteratorMethods(AsyncIterator.prototype);
  8273. AsyncIterator.prototype[asyncIteratorSymbol] = function () {
  8274. return this;
  8275. };
  8276. runtime.AsyncIterator = AsyncIterator;
  8277. // Note that simple async functions are implemented on top of
  8278. // AsyncIterator objects; they just return a Promise for the value of
  8279. // the final result produced by the iterator.
  8280. runtime.async = function(innerFn, outerFn, self, tryLocsList) {
  8281. var iter = new AsyncIterator(
  8282. wrap(innerFn, outerFn, self, tryLocsList)
  8283. );
  8284. return runtime.isGeneratorFunction(outerFn)
  8285. ? iter // If outerFn is a generator, return the full iterator.
  8286. : iter.next().then(function(result) {
  8287. return result.done ? result.value : iter.next();
  8288. });
  8289. };
  8290. function makeInvokeMethod(innerFn, self, context) {
  8291. var state = GenStateSuspendedStart;
  8292. return function invoke(method, arg) {
  8293. if (state === GenStateExecuting) {
  8294. throw new Error("Generator is already running");
  8295. }
  8296. if (state === GenStateCompleted) {
  8297. if (method === "throw") {
  8298. throw arg;
  8299. }
  8300. // Be forgiving, per 25.3.3.3.3 of the spec:
  8301. // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
  8302. return doneResult();
  8303. }
  8304. context.method = method;
  8305. context.arg = arg;
  8306. while (true) {
  8307. var delegate = context.delegate;
  8308. if (delegate) {
  8309. var delegateResult = maybeInvokeDelegate(delegate, context);
  8310. if (delegateResult) {
  8311. if (delegateResult === ContinueSentinel) continue;
  8312. return delegateResult;
  8313. }
  8314. }
  8315. if (context.method === "next") {
  8316. // Setting context._sent for legacy support of Babel's
  8317. // function.sent implementation.
  8318. context.sent = context._sent = context.arg;
  8319. } else if (context.method === "throw") {
  8320. if (state === GenStateSuspendedStart) {
  8321. state = GenStateCompleted;
  8322. throw context.arg;
  8323. }
  8324. context.dispatchException(context.arg);
  8325. } else if (context.method === "return") {
  8326. context.abrupt("return", context.arg);
  8327. }
  8328. state = GenStateExecuting;
  8329. var record = tryCatch(innerFn, self, context);
  8330. if (record.type === "normal") {
  8331. // If an exception is thrown from innerFn, we leave state ===
  8332. // GenStateExecuting and loop back for another invocation.
  8333. state = context.done
  8334. ? GenStateCompleted
  8335. : GenStateSuspendedYield;
  8336. if (record.arg === ContinueSentinel) {
  8337. continue;
  8338. }
  8339. return {
  8340. value: record.arg,
  8341. done: context.done
  8342. };
  8343. } else if (record.type === "throw") {
  8344. state = GenStateCompleted;
  8345. // Dispatch the exception by looping back around to the
  8346. // context.dispatchException(context.arg) call above.
  8347. context.method = "throw";
  8348. context.arg = record.arg;
  8349. }
  8350. }
  8351. };
  8352. }
  8353. // Call delegate.iterator[context.method](context.arg) and handle the
  8354. // result, either by returning a { value, done } result from the
  8355. // delegate iterator, or by modifying context.method and context.arg,
  8356. // setting context.delegate to null, and returning the ContinueSentinel.
  8357. function maybeInvokeDelegate(delegate, context) {
  8358. var method = delegate.iterator[context.method];
  8359. if (method === undefined) {
  8360. // A .throw or .return when the delegate iterator has no .throw
  8361. // method always terminates the yield* loop.
  8362. context.delegate = null;
  8363. if (context.method === "throw") {
  8364. if (delegate.iterator.return) {
  8365. // If the delegate iterator has a return method, give it a
  8366. // chance to clean up.
  8367. context.method = "return";
  8368. context.arg = undefined;
  8369. maybeInvokeDelegate(delegate, context);
  8370. if (context.method === "throw") {
  8371. // If maybeInvokeDelegate(context) changed context.method from
  8372. // "return" to "throw", let that override the TypeError below.
  8373. return ContinueSentinel;
  8374. }
  8375. }
  8376. context.method = "throw";
  8377. context.arg = new TypeError(
  8378. "The iterator does not provide a 'throw' method");
  8379. }
  8380. return ContinueSentinel;
  8381. }
  8382. var record = tryCatch(method, delegate.iterator, context.arg);
  8383. if (record.type === "throw") {
  8384. context.method = "throw";
  8385. context.arg = record.arg;
  8386. context.delegate = null;
  8387. return ContinueSentinel;
  8388. }
  8389. var info = record.arg;
  8390. if (! info) {
  8391. context.method = "throw";
  8392. context.arg = new TypeError("iterator result is not an object");
  8393. context.delegate = null;
  8394. return ContinueSentinel;
  8395. }
  8396. if (info.done) {
  8397. // Assign the result of the finished delegate to the temporary
  8398. // variable specified by delegate.resultName (see delegateYield).
  8399. context[delegate.resultName] = info.value;
  8400. // Resume execution at the desired location (see delegateYield).
  8401. context.next = delegate.nextLoc;
  8402. // If context.method was "throw" but the delegate handled the
  8403. // exception, let the outer generator proceed normally. If
  8404. // context.method was "next", forget context.arg since it has been
  8405. // "consumed" by the delegate iterator. If context.method was
  8406. // "return", allow the original .return call to continue in the
  8407. // outer generator.
  8408. if (context.method !== "return") {
  8409. context.method = "next";
  8410. context.arg = undefined;
  8411. }
  8412. } else {
  8413. // Re-yield the result returned by the delegate method.
  8414. return info;
  8415. }
  8416. // The delegate iterator is finished, so forget it and continue with
  8417. // the outer generator.
  8418. context.delegate = null;
  8419. return ContinueSentinel;
  8420. }
  8421. // Define Generator.prototype.{next,throw,return} in terms of the
  8422. // unified ._invoke helper method.
  8423. defineIteratorMethods(Gp);
  8424. Gp[toStringTagSymbol] = "Generator";
  8425. // A Generator should always return itself as the iterator object when the
  8426. // @@iterator function is called on it. Some browsers' implementations of the
  8427. // iterator prototype chain incorrectly implement this, causing the Generator
  8428. // object to not be returned from this call. This ensures that doesn't happen.
  8429. // See https://github.com/facebook/regenerator/issues/274 for more details.
  8430. Gp[iteratorSymbol] = function() {
  8431. return this;
  8432. };
  8433. Gp.toString = function() {
  8434. return "[object Generator]";
  8435. };
  8436. function pushTryEntry(locs) {
  8437. var entry = { tryLoc: locs[0] };
  8438. if (1 in locs) {
  8439. entry.catchLoc = locs[1];
  8440. }
  8441. if (2 in locs) {
  8442. entry.finallyLoc = locs[2];
  8443. entry.afterLoc = locs[3];
  8444. }
  8445. this.tryEntries.push(entry);
  8446. }
  8447. function resetTryEntry(entry) {
  8448. var record = entry.completion || {};
  8449. record.type = "normal";
  8450. delete record.arg;
  8451. entry.completion = record;
  8452. }
  8453. function Context(tryLocsList) {
  8454. // The root entry object (effectively a try statement without a catch
  8455. // or a finally block) gives us a place to store values thrown from
  8456. // locations where there is no enclosing try statement.
  8457. this.tryEntries = [{ tryLoc: "root" }];
  8458. tryLocsList.forEach(pushTryEntry, this);
  8459. this.reset(true);
  8460. }
  8461. runtime.keys = function(object) {
  8462. var keys = [];
  8463. for (var key in object) {
  8464. keys.push(key);
  8465. }
  8466. keys.reverse();
  8467. // Rather than returning an object with a next method, we keep
  8468. // things simple and return the next function itself.
  8469. return function next() {
  8470. while (keys.length) {
  8471. var key = keys.pop();
  8472. if (key in object) {
  8473. next.value = key;
  8474. next.done = false;
  8475. return next;
  8476. }
  8477. }
  8478. // To avoid creating an additional object, we just hang the .value
  8479. // and .done properties off the next function object itself. This
  8480. // also ensures that the minifier will not anonymize the function.
  8481. next.done = true;
  8482. return next;
  8483. };
  8484. };
  8485. function values(iterable) {
  8486. if (iterable) {
  8487. var iteratorMethod = iterable[iteratorSymbol];
  8488. if (iteratorMethod) {
  8489. return iteratorMethod.call(iterable);
  8490. }
  8491. if (typeof iterable.next === "function") {
  8492. return iterable;
  8493. }
  8494. if (!isNaN(iterable.length)) {
  8495. var i = -1, next = function next() {
  8496. while (++i < iterable.length) {
  8497. if (hasOwn.call(iterable, i)) {
  8498. next.value = iterable[i];
  8499. next.done = false;
  8500. return next;
  8501. }
  8502. }
  8503. next.value = undefined;
  8504. next.done = true;
  8505. return next;
  8506. };
  8507. return next.next = next;
  8508. }
  8509. }
  8510. // Return an iterator with no values.
  8511. return { next: doneResult };
  8512. }
  8513. runtime.values = values;
  8514. function doneResult() {
  8515. return { value: undefined, done: true };
  8516. }
  8517. Context.prototype = {
  8518. constructor: Context,
  8519. reset: function(skipTempReset) {
  8520. this.prev = 0;
  8521. this.next = 0;
  8522. // Resetting context._sent for legacy support of Babel's
  8523. // function.sent implementation.
  8524. this.sent = this._sent = undefined;
  8525. this.done = false;
  8526. this.delegate = null;
  8527. this.method = "next";
  8528. this.arg = undefined;
  8529. this.tryEntries.forEach(resetTryEntry);
  8530. if (!skipTempReset) {
  8531. for (var name in this) {
  8532. // Not sure about the optimal order of these conditions:
  8533. if (name.charAt(0) === "t" &&
  8534. hasOwn.call(this, name) &&
  8535. !isNaN(+name.slice(1))) {
  8536. this[name] = undefined;
  8537. }
  8538. }
  8539. }
  8540. },
  8541. stop: function() {
  8542. this.done = true;
  8543. var rootEntry = this.tryEntries[0];
  8544. var rootRecord = rootEntry.completion;
  8545. if (rootRecord.type === "throw") {
  8546. throw rootRecord.arg;
  8547. }
  8548. return this.rval;
  8549. },
  8550. dispatchException: function(exception) {
  8551. if (this.done) {
  8552. throw exception;
  8553. }
  8554. var context = this;
  8555. function handle(loc, caught) {
  8556. record.type = "throw";
  8557. record.arg = exception;
  8558. context.next = loc;
  8559. if (caught) {
  8560. // If the dispatched exception was caught by a catch block,
  8561. // then let that catch block handle the exception normally.
  8562. context.method = "next";
  8563. context.arg = undefined;
  8564. }
  8565. return !! caught;
  8566. }
  8567. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  8568. var entry = this.tryEntries[i];
  8569. var record = entry.completion;
  8570. if (entry.tryLoc === "root") {
  8571. // Exception thrown outside of any try block that could handle
  8572. // it, so set the completion value of the entire function to
  8573. // throw the exception.
  8574. return handle("end");
  8575. }
  8576. if (entry.tryLoc <= this.prev) {
  8577. var hasCatch = hasOwn.call(entry, "catchLoc");
  8578. var hasFinally = hasOwn.call(entry, "finallyLoc");
  8579. if (hasCatch && hasFinally) {
  8580. if (this.prev < entry.catchLoc) {
  8581. return handle(entry.catchLoc, true);
  8582. } else if (this.prev < entry.finallyLoc) {
  8583. return handle(entry.finallyLoc);
  8584. }
  8585. } else if (hasCatch) {
  8586. if (this.prev < entry.catchLoc) {
  8587. return handle(entry.catchLoc, true);
  8588. }
  8589. } else if (hasFinally) {
  8590. if (this.prev < entry.finallyLoc) {
  8591. return handle(entry.finallyLoc);
  8592. }
  8593. } else {
  8594. throw new Error("try statement without catch or finally");
  8595. }
  8596. }
  8597. }
  8598. },
  8599. abrupt: function(type, arg) {
  8600. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  8601. var entry = this.tryEntries[i];
  8602. if (entry.tryLoc <= this.prev &&
  8603. hasOwn.call(entry, "finallyLoc") &&
  8604. this.prev < entry.finallyLoc) {
  8605. var finallyEntry = entry;
  8606. break;
  8607. }
  8608. }
  8609. if (finallyEntry &&
  8610. (type === "break" ||
  8611. type === "continue") &&
  8612. finallyEntry.tryLoc <= arg &&
  8613. arg <= finallyEntry.finallyLoc) {
  8614. // Ignore the finally entry if control is not jumping to a
  8615. // location outside the try/catch block.
  8616. finallyEntry = null;
  8617. }
  8618. var record = finallyEntry ? finallyEntry.completion : {};
  8619. record.type = type;
  8620. record.arg = arg;
  8621. if (finallyEntry) {
  8622. this.method = "next";
  8623. this.next = finallyEntry.finallyLoc;
  8624. return ContinueSentinel;
  8625. }
  8626. return this.complete(record);
  8627. },
  8628. complete: function(record, afterLoc) {
  8629. if (record.type === "throw") {
  8630. throw record.arg;
  8631. }
  8632. if (record.type === "break" ||
  8633. record.type === "continue") {
  8634. this.next = record.arg;
  8635. } else if (record.type === "return") {
  8636. this.rval = this.arg = record.arg;
  8637. this.method = "return";
  8638. this.next = "end";
  8639. } else if (record.type === "normal" && afterLoc) {
  8640. this.next = afterLoc;
  8641. }
  8642. return ContinueSentinel;
  8643. },
  8644. finish: function(finallyLoc) {
  8645. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  8646. var entry = this.tryEntries[i];
  8647. if (entry.finallyLoc === finallyLoc) {
  8648. this.complete(entry.completion, entry.afterLoc);
  8649. resetTryEntry(entry);
  8650. return ContinueSentinel;
  8651. }
  8652. }
  8653. },
  8654. "catch": function(tryLoc) {
  8655. for (var i = this.tryEntries.length - 1; i >= 0; --i) {
  8656. var entry = this.tryEntries[i];
  8657. if (entry.tryLoc === tryLoc) {
  8658. var record = entry.completion;
  8659. if (record.type === "throw") {
  8660. var thrown = record.arg;
  8661. resetTryEntry(entry);
  8662. }
  8663. return thrown;
  8664. }
  8665. }
  8666. // The context.catch method must only be called with a location
  8667. // argument that corresponds to a known catch block.
  8668. throw new Error("illegal catch attempt");
  8669. },
  8670. delegateYield: function(iterable, resultName, nextLoc) {
  8671. this.delegate = {
  8672. iterator: values(iterable),
  8673. resultName: resultName,
  8674. nextLoc: nextLoc
  8675. };
  8676. if (this.method === "next") {
  8677. // Deliberately forget the last sent value so that we don't
  8678. // accidentally pass it on to the delegate.
  8679. this.arg = undefined;
  8680. }
  8681. return ContinueSentinel;
  8682. }
  8683. };
  8684. })(
  8685. // In sloppy mode, unbound `this` refers to the global object, fallback to
  8686. // Function constructor if we're in global strict mode. That is sadly a form
  8687. // of indirect eval which violates Content Security Policy.
  8688. (function() {
  8689. return this || (typeof self === "object" && self);
  8690. })() || Function("return this")()
  8691. );
  8692. /***/ }),
  8693. /***/ 26:
  8694. /*!*****************************************!*\
  8695. !*** D:/gsxm/ezred/utils/loginUtils.js ***!
  8696. \*****************************************/
  8697. /*! no static exports found */
  8698. /***/ (function(module, exports, __webpack_require__) {
  8699. "use strict";
  8700. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.getActionPage = getActionPage;exports.getPageUrl = getPageUrl;exports.interceptor = interceptor;exports.saveUrl = saveUrl; // 获取当前页面
  8701. function getActionPage() {
  8702. var pages = getCurrentPages();
  8703. return pages[pages.length - 1];
  8704. }
  8705. // 处理分享链接地址
  8706. function getPageUrl(config) {
  8707. var page = getActionPage();
  8708. var path = '/' + page.route;
  8709. var url = '';
  8710. // 获取对象可枚举键值列表
  8711. var objKeys = Object.keys(page.options);
  8712. // 判断有无传值
  8713. if (objKeys.length > 0) {
  8714. // 循环赋值对象数据
  8715. for (var a in page.options) {
  8716. // 判断有无邀请人
  8717. if (a != 'spread') {
  8718. url += a + "=" + page.options[a] + "&";
  8719. }
  8720. }
  8721. path += '?' + url.substr(0, url.length - 1);
  8722. }
  8723. // 返回处理邀请人后的邀请地址
  8724. return path;
  8725. }
  8726. //登录拦截
  8727. function interceptor() {
  8728. var pages = getActionPage();
  8729. // 获取当前页面
  8730. var pageUrl = '/' + pages.route;
  8731. var url = '/pages/login/login';
  8732. if (pageUrl != url) {
  8733. uni.navigateTo({
  8734. url: url });
  8735. }
  8736. }
  8737. // 保存页面
  8738. function saveUrl() {
  8739. // 获取当前页面
  8740. var page = getActionPage();
  8741. // 获取跳转前路由地址
  8742. var path = '/' + page.route;
  8743. var url = '';
  8744. // 获取对象可枚举键值列表
  8745. var objKeys = Object.keys(page.options);
  8746. // 判断有无传值
  8747. if (objKeys.length > 0) {
  8748. // 循环赋值对象数据
  8749. for (var a in page.options) {
  8750. url += a + "=" + page.options[a] + "&";
  8751. }
  8752. path += '?' + url.substr(0, url.length - 1);
  8753. }
  8754. // uni.showModal({
  8755. // title: '地址',
  8756. // content: path,
  8757. // fail: function (res) {
  8758. // console.log(res.errMsg);
  8759. // uni.showModal({
  8760. // title: 'error',
  8761. // content: res.errMsg
  8762. // })
  8763. // }
  8764. // })
  8765. uni.setStorageSync('present', path);
  8766. // // 获取当前页面
  8767. // let page = getActionPage();
  8768. // // 获取跳转前路由地址
  8769. // let path = '/' + page.route;
  8770. // let url = '';
  8771. // // 获取对象可枚举键值列表
  8772. // let objKeys = Object.keys(page.options);
  8773. // // 判断有无传值
  8774. // if (objKeys.length > 0) {
  8775. // // 循环赋值对象数据
  8776. // for (let a in page.options) {
  8777. // url += a + "=" + page.options[a] + "&"
  8778. // }
  8779. // path += '?' + url.substr(0, url.length - 1);
  8780. // }
  8781. // console.log(path,1)
  8782. // uni.setStorageSync('present', path);
  8783. }
  8784. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
  8785. /***/ }),
  8786. /***/ 27:
  8787. /*!*********************************!*\
  8788. !*** D:/gsxm/ezred/api/user.js ***!
  8789. \*********************************/
  8790. /*! no static exports found */
  8791. /***/ (function(module, exports, __webpack_require__) {
  8792. "use strict";
  8793. Object.defineProperty(exports, "__esModule", { value: true });exports.orderData = orderData;exports.userinfo = userinfo;exports.userinfoid = userinfoid;var _request = _interopRequireDefault(__webpack_require__(/*! @/utils/request */ 21));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  8794. // 订单统计信息
  8795. function orderData(data) {
  8796. return (0, _request.default)({
  8797. url: '/api/order/data',
  8798. method: 'get',
  8799. data: data });
  8800. }
  8801. // 获取用户信息
  8802. function userinfo(data) {
  8803. return (0, _request.default)({
  8804. url: '/api/userinfo',
  8805. method: 'get',
  8806. data: data });
  8807. }
  8808. //获取名片信息
  8809. function userinfoid(data) {
  8810. return (0, _request.default)({
  8811. url: '/api/level/recharge',
  8812. method: 'post',
  8813. data: data });
  8814. }
  8815. /***/ }),
  8816. /***/ 28:
  8817. /*!*******************************************!*\
  8818. !*** D:/gsxm/ezred/utils/wxAuthorized.js ***!
  8819. \*******************************************/
  8820. /*! no static exports found */
  8821. /***/ (function(module, exports, __webpack_require__) {
  8822. "use strict";
  8823. Object.defineProperty(exports, "__esModule", { value: true });exports.loginWinxin = loginWinxin;exports.weixindata = weixindata;exports.weixinhideMenu = weixinhideMenu;exports.default = void 0;var _wx = __webpack_require__(/*! @/api/wx */ 29);
  8824. var _store = _interopRequireDefault(__webpack_require__(/*! ../store */ 5));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  8825. // 保存wx对象
  8826. var weixinObj = __webpack_require__(/*! jweixin-module */ 30);
  8827. // 保存分享数据
  8828. var shareData = '';
  8829. // 保存注册返回appId数据
  8830. var appId = '';
  8831. //微信登录
  8832. /**
  8833. * @param {string} 当前页面地址信息
  8834. */
  8835. function loginWinxin() {
  8836. var pages, page, path;
  8837. try {
  8838. pages = getCurrentPages();
  8839. // 获取跳转前页面
  8840. page = pages[pages.length - 1];
  8841. // 获取跳转前路由地址
  8842. path = page.route;
  8843. } catch (e) {
  8844. console.log(e);
  8845. }
  8846. // 判断是否在登录页
  8847. if (path != 'pages/redirect/redirect') {
  8848. setTimeout(function (e) {
  8849. weixinObj.ready(function () {
  8850. console.log('weixinObj.ready');
  8851. // 调用
  8852. try {
  8853. console.log(shareData);
  8854. console.log(path);
  8855. weixinSq(shareData, path);
  8856. } catch (e) {
  8857. console.log(e);
  8858. //TODO handle the exception
  8859. }
  8860. });
  8861. weixinObj.error(function (e) {
  8862. console.log(e);
  8863. });
  8864. }, 10);
  8865. }
  8866. };
  8867. // 微信授权登录
  8868. function weixinSq(data, path) {
  8869. // 微信授权后跳转页面
  8870. try {
  8871. var ul = encodeURIComponent(_store.default.state.baseURL + _store.default.state.urlFile + '/#/pages/redirect/redirect');
  8872. console.log(ul, "ul");
  8873. // 打开微信授权页面
  8874. var url =
  8875. 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
  8876. appId +
  8877. '&redirect_uri=' +
  8878. ul +
  8879. '&response_type=code&scope=snsapi_userinfo&state=' +
  8880. new Date().getTime() +
  8881. '#wechat_redirect';
  8882. console.log(url, "url");
  8883. window.location.href = url;
  8884. } catch (e) {
  8885. console.log(e);
  8886. }
  8887. };
  8888. // 微信注册
  8889. function weixindata(config) {
  8890. // console.log(config);
  8891. //注册微信信息
  8892. var weixinObj = __webpack_require__(/*! jweixin-module */ 30);
  8893. // 保存微信对象到全局仓库
  8894. _store.default.commit('setWeiChatObj', weixinObj);
  8895. console.log(window.location.href);
  8896. console.log('当前注册url地址', window.location.href);
  8897. (0, _wx.wechatConfig)({
  8898. // url: 'pages/applic/location',
  8899. url: _store.default.state.baseURL + _store.default.state.urlFile + '/' }).
  8900. then(function (_ref)
  8901. {var data = _ref.data;
  8902. // uni.showModal({
  8903. // // url: 'http://yyred.igxys.com/index/',
  8904. // title:'地址',
  8905. // content: window.location.href
  8906. // })
  8907. // 保存appId
  8908. _store.default.commit('setWeiChatInfo', data);
  8909. appId = data.appId;
  8910. // 微信信息配置
  8911. weixinObj.config({
  8912. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  8913. appId: data.appId, // 必填,企业号的唯一标识,此处填写企业号corpid
  8914. timestamp: data.timestamp, // 必填,生成签名的时间戳
  8915. nonceStr: data.nonceStr, // 必填,生成签名的随机串
  8916. signature: data.signature, // 必填,签名,见附录1
  8917. jsApiList: data.jsApiList // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  8918. });
  8919. weixinObj.ready(function (e) {
  8920. console.log('分享数据', shareData);
  8921. if (shareData == '') {
  8922. (0, _wx.share)({}).then(function (_ref2)
  8923. {var data = _ref2.data;
  8924. shareData = data.data;
  8925. shareLoad(config);
  8926. });
  8927. } else {
  8928. shareLoad(config);
  8929. }
  8930. });
  8931. }).
  8932. catch(function (e) {
  8933. console.log(e);
  8934. });
  8935. }
  8936. // 加载分享数据
  8937. function shareLoad(config) {
  8938. var mess;
  8939. if (config) {
  8940. mess = {
  8941. link: config.link, // 分享链接
  8942. imgUrl: config.imgUrl,
  8943. desc: config.desc,
  8944. title: config.title,
  8945. success: config.success,
  8946. fail: config.fail || function (e) {
  8947. console.log(e);
  8948. } };
  8949. } else {
  8950. // console.log(window.location.href, 55)
  8951. // let url = window.location.href + '?spread=' + store.state.userInfo.uid;
  8952. var url = window.location.href;
  8953. url = url.replace(/[\?,&]{0,1}from=singlemessage/g, '');
  8954. mess = {
  8955. title: shareData.title,
  8956. link: url, // 分享链接
  8957. imgUrl: shareData.img, // 分享图标
  8958. desc: shareData.synopsis,
  8959. success: function success() {
  8960. },
  8961. fail: function fail(e) {
  8962. console.log(e);
  8963. } };
  8964. }
  8965. // 获取仓库数据
  8966. // 分享好友
  8967. // weixinObj.updateAppMessageShareData(mess);
  8968. weixinObj.onMenuShareAppMessage(mess); // 即将废弃
  8969. // 分享朋友圈
  8970. // weixinObj.updateTimelineShareData(mess)
  8971. weixinObj.onMenuShareTimeline(mess); // 即将废弃
  8972. }
  8973. // 隐藏功能按钮
  8974. function weixinhideMenu(config) {
  8975. console.log(config);
  8976. weixinObj.ready(function (e) {
  8977. weixinObj.hideMenuItems({
  8978. menuList: config // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
  8979. });
  8980. });
  8981. }
  8982. // export function getLoca(config) {
  8983. // console.log(config)
  8984. // weixinObj.ready((e) => {
  8985. // weixinObj.getLocation({
  8986. // type: 'wgs84',
  8987. // success: function (res) {
  8988. // config.longitude = res.longitude;
  8989. // config.latitude = res.latitude;
  8990. // uni.showModal({
  8991. // title: '提示',
  8992. // content: res.longitude
  8993. // })
  8994. // console.log('当前位置的经度:' + res.longitude);
  8995. // console.log('当前位置的纬度:' + res.latitude);
  8996. // }
  8997. // });
  8998. // })
  8999. // }
  9000. var _default =
  9001. {
  9002. weixinObj: weixinObj,
  9003. shareData: shareData,
  9004. appId: appId };exports.default = _default;
  9005. /***/ }),
  9006. /***/ 29:
  9007. /*!*******************************!*\
  9008. !*** D:/gsxm/ezred/api/wx.js ***!
  9009. \*******************************/
  9010. /*! no static exports found */
  9011. /***/ (function(module, exports, __webpack_require__) {
  9012. "use strict";
  9013. var _request = _interopRequireDefault(__webpack_require__(/*! @/utils/request */ 21));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  9014. /***/ }),
  9015. /***/ 3:
  9016. /*!***********************************!*\
  9017. !*** (webpack)/buildin/global.js ***!
  9018. \***********************************/
  9019. /*! no static exports found */
  9020. /***/ (function(module, exports) {
  9021. var g;
  9022. // This works in non-strict mode
  9023. g = (function() {
  9024. return this;
  9025. })();
  9026. try {
  9027. // This works if eval is allowed (see CSP)
  9028. g = g || new Function("return this")();
  9029. } catch (e) {
  9030. // This works if the window reference is available
  9031. if (typeof window === "object") g = window;
  9032. }
  9033. // g can still be undefined, but nothing to do about it...
  9034. // We return undefined, instead of nothing here, so it's
  9035. // easier to handle this case. if(!global) { ...}
  9036. module.exports = g;
  9037. /***/ }),
  9038. /***/ 30:
  9039. /*!**************************************************************!*\
  9040. !*** D:/gsxm/ezred/node_modules/jweixin-module/out/index.js ***!
  9041. \**************************************************************/
  9042. /*! no static exports found */
  9043. /***/ (function(module, exports, __webpack_require__) {
  9044. /* WEBPACK VAR INJECTION */(function(wx) {function _defineProperty(obj, key, value) {if (key in obj) {Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true });} else {obj[key] = value;}return obj;}!function (e, n) { true ? module.exports = n(e) : undefined;}(window, function (o, e) {function c(n, e, i) {o.WeixinJSBridge ? WeixinJSBridge.invoke(n, r(e), function (e) {a(n, e, i);}) : d(n, i);}function i(n, i, t) {o.WeixinJSBridge ? WeixinJSBridge.on(n, function (e) {t && t.trigger && t.trigger(e), a(n, e, i);}) : d(n, t || i);}function r(e) {return (e = e || {}).appId = M.appId, e.verifyAppId = M.appId, e.verifySignType = "sha1", e.verifyTimestamp = M.timestamp + "", e.verifyNonceStr = M.nonceStr, e.verifySignature = M.signature, e;}function n(e) {return { timeStamp: e.timestamp + "", nonceStr: e.nonceStr, package: e.package, paySign: e.paySign, signType: e.signType || "SHA1" };}function a(e, n, i) {"openEnterpriseChat" == e && (n.errCode = n.err_code), delete n.err_code, delete n.err_desc, delete n.err_detail;var t = n.errMsg;t || (t = n.err_msg, delete n.err_msg, t = function (e, n) {var i = e,t = f[i];t && (i = t);var o = "ok";if (n) {var r = n.indexOf(":");"confirm" == (o = n.substring(r + 1)) && (o = "ok"), "failed" == o && (o = "fail"), -1 != o.indexOf("failed_") && (o = o.substring(7)), -1 != o.indexOf("fail_") && (o = o.substring(5)), "access denied" != (o = (o = o.replace(/_/g, " ")).toLowerCase()) && "no permission to execute" != o || (o = "permission denied"), "config" == i && "function not exist" == o && (o = "ok"), "" == o && (o = "fail");}return n = i + ":" + o;}(e, t), n.errMsg = t), (i = i || {})._complete && (i._complete(n), delete i._complete), t = n.errMsg || "", M.debug && !i.isInnerInvoke && alert(JSON.stringify(n));var o = t.indexOf(":");switch (t.substring(o + 1)) {case "ok":i.success && i.success(n);break;case "cancel":i.cancel && i.cancel(n);break;default:i.fail && i.fail(n);}i.complete && i.complete(n);}function s(e) {if (e) {for (var n = 0, i = e.length; n < i; ++n) {var t = e[n],o = p[t];o && (e[n] = o);}return e;}}function d(e, n) {if (!(!M.debug || n && n.isInnerInvoke)) {var i = f[e];i && (e = i), n && n._complete && delete n._complete, console.log('"' + e + '",', n || "");}}function l() {return new Date().getTime();}function u(e) {I && (o.WeixinJSBridge ? e() : t.addEventListener && t.addEventListener("WeixinJSBridgeReady", e, !1));}if (!o.jWeixin) {var _C;var p = { config: "preVerifyJSAPI", onMenuShareTimeline: "menu:share:timeline", onMenuShareAppMessage: "menu:share:appmessage", onMenuShareQQ: "menu:share:qq", onMenuShareWeibo: "menu:share:weiboApp", onMenuShareQZone: "menu:share:QZone", previewImage: "imagePreview", getLocation: "geoLocation", openProductSpecificView: "openProductViewWithPid", addCard: "batchAddCard", openCard: "batchViewCard", chooseWXPay: "getBrandWCPayRequest", openEnterpriseRedPacket: "getRecevieBizHongBaoRequest", startSearchBeacons: "startMonitoringBeacons", stopSearchBeacons: "stopMonitoringBeacons", onSearchBeacons: "onBeaconsInRange", consumeAndShareCard: "consumedShareCard", openAddress: "editAddress" },f = function () {var e = {};for (var n in p) {e[p[n]] = n;}return e;}(),t = o.document,m = t.title,g = navigator.userAgent.toLowerCase(),h = navigator.platform.toLowerCase(),v = !(!h.match("mac") && !h.match("win")),S = -1 != g.indexOf("wxdebugger"),I = -1 != g.indexOf("micromessenger"),y = -1 != g.indexOf("android"),_ = -1 != g.indexOf("iphone") || -1 != g.indexOf("ipad"),w = (O = g.match(/micromessenger\/(\d+\.\d+\.\d+)/) || g.match(/micromessenger\/(\d+\.\d+)/)) ? O[1] : "",k = { initStartTime: l(), initEndTime: 0, preVerifyStartTime: 0, preVerifyEndTime: 0 },T = { version: 1, appId: "", initTime: 0, preVerifyTime: 0, networkType: "", isPreVerifyOk: 1, systemType: _ ? 1 : y ? 2 : -1, clientVersion: w, url: encodeURIComponent(location.href) },M = {},P = { _completes: [] },x = { state: 0, data: {} };u(function () {k.initEndTime = l();});var A = !1,V = [],C = (_C = { config: function config(e) {d("config", M = e);var t = !1 !== M.check;u(function () {if (t) c(p.config, { verifyJsApiList: s(M.jsApiList) }, function () {P._complete = function (e) {k.preVerifyEndTime = l(), x.state = 1, x.data = e;}, P.success = function (e) {T.isPreVerifyOk = 0;}, P.fail = function (e) {P._fail ? P._fail(e) : x.state = -1;};var t = P._completes;return t.push(function () {!function (e) {if (!(v || S || M.debug || w < "6.0.2" || T.systemType < 0)) {var i = new Image();T.appId = M.appId, T.initTime = k.initEndTime - k.initStartTime, T.preVerifyTime = k.preVerifyEndTime - k.preVerifyStartTime, C.getNetworkType({ isInnerInvoke: !0, success: function success(e) {T.networkType = e.networkType;var n = "https://open.weixin.qq.com/sdk/report?v=" + T.version + "&o=" + T.isPreVerifyOk + "&s=" + T.systemType + "&c=" + T.clientVersion + "&a=" + T.appId + "&n=" + T.networkType + "&i=" + T.initTime + "&p=" + T.preVerifyTime + "&u=" + T.url;i.src = n;} });}}();}), P.complete = function (e) {for (var n = 0, i = t.length; n < i; ++n) {t[n]();}P._completes = [];}, P;}()), k.preVerifyStartTime = l();else {x.state = 1;for (var e = P._completes, n = 0, i = e.length; n < i; ++n) {e[n]();}P._completes = [];}}), C.invoke || (C.invoke = function (e, n, i) {o.WeixinJSBridge && WeixinJSBridge.invoke(e, r(n), i);}, C.on = function (e, n) {o.WeixinJSBridge && WeixinJSBridge.on(e, n);});}, ready: function ready(e) {0 != x.state ? e() : (P._completes.push(e), !I && M.debug && e());}, error: function error(e) {w < "6.0.2" || (-1 == x.state ? e(x.data) : P._fail = e);}, checkJsApi: function checkJsApi(e) {c("checkJsApi", { jsApiList: s(e.jsApiList) }, (e._complete = function (e) {if (y) {var n = e.checkResult;n && (e.checkResult = JSON.parse(n));}e = function (e) {var n = e.checkResult;for (var i in n) {var t = f[i];t && (n[t] = n[i], delete n[i]);}return e;}(e);}, e));}, onMenuShareTimeline: function onMenuShareTimeline(e) {i(p.onMenuShareTimeline, { complete: function complete() {c("shareTimeline", { title: e.title || m, desc: e.title || m, img_url: e.imgUrl || "", link: e.link || location.href, type: e.type || "link", data_url: e.dataUrl || "" }, e);} }, e);}, onMenuShareAppMessage: function onMenuShareAppMessage(n) {i(p.onMenuShareAppMessage, { complete: function complete(e) {"favorite" === e.scene ? c("sendAppMessage", { title: n.title || m, desc: n.desc || "", link: n.link || location.href, img_url: n.imgUrl || "", type: n.type || "link", data_url: n.dataUrl || "" }) : c("sendAppMessage", { title: n.title || m, desc: n.desc || "", link: n.link || location.href, img_url: n.imgUrl || "", type: n.type || "link", data_url: n.dataUrl || "" }, n);} }, n);}, onMenuShareQQ: function onMenuShareQQ(e) {i(p.onMenuShareQQ, { complete: function complete() {c("shareQQ", { title: e.title || m, desc: e.desc || "", img_url: e.imgUrl || "", link: e.link || location.href }, e);} }, e);}, onMenuShareWeibo: function onMenuShareWeibo(e) {i(p.onMenuShareWeibo, { complete: function complete() {c("shareWeiboApp", { title: e.title || m, desc: e.desc || "", img_url: e.imgUrl || "", link: e.link || location.href }, e);} }, e);}, onMenuShareQZone: function onMenuShareQZone(e) {i(p.onMenuShareQZone, { complete: function complete() {c("shareQZone", { title: e.title || m, desc: e.desc || "", img_url: e.imgUrl || "", link: e.link || location.href }, e);} }, e);}, updateTimelineShareData: function updateTimelineShareData(e) {c("updateTimelineShareData", { title: e.title, link: e.link, imgUrl: e.imgUrl }, e);}, updateAppMessageShareData: function updateAppMessageShareData(e) {c("updateAppMessageShareData", { title: e.title, desc: e.desc, link: e.link, imgUrl: e.imgUrl }, e);}, startRecord: function startRecord(e) {c("startRecord", {}, e);}, stopRecord: function stopRecord(e) {c("stopRecord", {}, e);}, onVoiceRecordEnd: function onVoiceRecordEnd(e) {i("onVoiceRecordEnd", e);}, playVoice: function playVoice(e) {c("playVoice", { localId: e.localId }, e);}, pauseVoice: function pauseVoice(e) {c("pauseVoice", { localId: e.localId }, e);}, stopVoice: function stopVoice(e) {c("stopVoice", { localId: e.localId }, e);}, onVoicePlayEnd: function onVoicePlayEnd(e) {i("onVoicePlayEnd", e);}, uploadVoice: function uploadVoice(e) {c("uploadVoice", { localId: e.localId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e);}, downloadVoice: function downloadVoice(e) {c("downloadVoice", { serverId: e.serverId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e);}, translateVoice: function translateVoice(e) {c("translateVoice", { localId: e.localId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e);}, chooseImage: function chooseImage(e) {c("chooseImage", { scene: "1|2", count: e.count || 9, sizeType: e.sizeType || ["original", "compressed"], sourceType: e.sourceType || ["album", "camera"] }, (e._complete = function (e) {if (y) {var n = e.localIds;try {n && (e.localIds = JSON.parse(n));} catch (e) {}}}, e));}, getLocation: function getLocation(e) {}, previewImage: function previewImage(e) {c(p.previewImage, { current: e.current, urls: e.urls }, e);}, uploadImage: function uploadImage(e) {c("uploadImage", { localId: e.localId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e);}, downloadImage: function downloadImage(e) {c("downloadImage", { serverId: e.serverId, isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1 }, e);}, getLocalImgData: function getLocalImgData(e) {!1 === A ? (A = !0, c("getLocalImgData", { localId: e.localId }, (e._complete = function (e) {if (A = !1, 0 < V.length) {var n = V.shift();wx.getLocalImgData(n);}}, e))) : V.push(e);}, getNetworkType: function getNetworkType(e) {c("getNetworkType", {}, (e._complete = function (e) {e = function (e) {var n = e.errMsg;e.errMsg = "getNetworkType:ok";var i = e.subtype;if (delete e.subtype, i) e.networkType = i;else {var t = n.indexOf(":"),o = n.substring(t + 1);switch (o) {case "wifi":case "edge":case "wwan":e.networkType = o;break;default:e.errMsg = "getNetworkType:fail";}}return e;}(e);}, e));}, openLocation: function openLocation(e) {c("openLocation", { latitude: e.latitude, longitude: e.longitude, name: e.name || "", address: e.address || "", scale: e.scale || 28, infoUrl: e.infoUrl || "" }, e);} }, _defineProperty(_C, "getLocation", function getLocation(e) {c(p.getLocation, { type: (e = e || {}).type || "wgs84" }, (e._complete = function (e) {delete e.type;}, e));}), _defineProperty(_C, "hideOptionMenu", function hideOptionMenu(e) {c("hideOptionMenu", {}, e);}), _defineProperty(_C, "showOptionMenu", function showOptionMenu(e) {c("showOptionMenu", {}, e);}), _defineProperty(_C, "closeWindow", function closeWindow(e) {c("closeWindow", {}, e = e || {});}), _defineProperty(_C, "hideMenuItems", function hideMenuItems(e) {c("hideMenuItems", { menuList: e.menuList }, e);}), _defineProperty(_C, "showMenuItems", function showMenuItems(e) {c("showMenuItems", { menuList: e.menuList }, e);}), _defineProperty(_C, "hideAllNonBaseMenuItem", function hideAllNonBaseMenuItem(e) {c("hideAllNonBaseMenuItem", {}, e);}), _defineProperty(_C, "showAllNonBaseMenuItem", function showAllNonBaseMenuItem(e) {c("showAllNonBaseMenuItem", {}, e);}), _defineProperty(_C, "scanQRCode", function scanQRCode(e) {c("scanQRCode", { needResult: (e = e || {}).needResult || 0, scanType: e.scanType || ["qrCode", "barCode"] }, (e._complete = function (e) {if (_) {var n = e.resultStr;if (n) {var i = JSON.parse(n);e.resultStr = i && i.scan_code && i.scan_code.scan_result;}}}, e));}), _defineProperty(_C, "openAddress", function openAddress(e) {c(p.openAddress, {}, (e._complete = function (e) {var n;(n = e).postalCode = n.addressPostalCode, delete n.addressPostalCode, n.provinceName = n.proviceFirstStageName, delete n.proviceFirstStageName, n.cityName = n.addressCitySecondStageName, delete n.addressCitySecondStageName, n.countryName = n.addressCountiesThirdStageName, delete n.addressCountiesThirdStageName, n.detailInfo = n.addressDetailInfo, delete n.addressDetailInfo, e = n;}, e));}), _defineProperty(_C, "openProductSpecificView", function openProductSpecificView(e) {c(p.openProductSpecificView, { pid: e.productId, view_type: e.viewType || 0, ext_info: e.extInfo }, e);}), _defineProperty(_C, "addCard", function addCard(e) {for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) {var r = n[t],a = { card_id: r.cardId, card_ext: r.cardExt };i.push(a);}c(p.addCard, { card_list: i }, (e._complete = function (e) {var n = e.card_list;if (n) {for (var i = 0, t = (n = JSON.parse(n)).length; i < t; ++i) {var o = n[i];o.cardId = o.card_id, o.cardExt = o.card_ext, o.isSuccess = !!o.is_succ, delete o.card_id, delete o.card_ext, delete o.is_succ;}e.cardList = n, delete e.card_list;}}, e));}), _defineProperty(_C, "chooseCard", function chooseCard(e) {c("chooseCard", { app_id: M.appId, location_id: e.shopId || "", sign_type: e.signType || "SHA1", card_id: e.cardId || "", card_type: e.cardType || "", card_sign: e.cardSign, time_stamp: e.timestamp + "", nonce_str: e.nonceStr }, (e._complete = function (e) {e.cardList = e.choose_card_info, delete e.choose_card_info;}, e));}), _defineProperty(_C, "openCard", function openCard(e) {for (var n = e.cardList, i = [], t = 0, o = n.length; t < o; ++t) {var r = n[t],a = { card_id: r.cardId, code: r.code };i.push(a);}c(p.openCard, { card_list: i }, e);}), _defineProperty(_C, "consumeAndShareCard", function consumeAndShareCard(e) {c(p.consumeAndShareCard, { consumedCardId: e.cardId, consumedCode: e.code }, e);}), _defineProperty(_C, "chooseWXPay", function chooseWXPay(e) {c(p.chooseWXPay, n(e), e);}), _defineProperty(_C, "openEnterpriseRedPacket", function openEnterpriseRedPacket(e) {c(p.openEnterpriseRedPacket, n(e), e);}), _defineProperty(_C, "startSearchBeacons", function startSearchBeacons(e) {c(p.startSearchBeacons, { ticket: e.ticket }, e);}), _defineProperty(_C, "stopSearchBeacons", function stopSearchBeacons(e) {c(p.stopSearchBeacons, {}, e);}), _defineProperty(_C, "onSearchBeacons", function onSearchBeacons(e) {i(p.onSearchBeacons, e);}), _defineProperty(_C, "openEnterpriseChat", function openEnterpriseChat(e) {c("openEnterpriseChat", { useridlist: e.userIds, chatname: e.groupName }, e);}), _defineProperty(_C, "launchMiniProgram", function launchMiniProgram(e) {c("launchMiniProgram", { targetAppId: e.targetAppId, path: function (e) {if ("string" == typeof e && 0 < e.length) {var n = e.split("?")[0],i = e.split("?")[1];return n += ".html", void 0 !== i ? n + "?" + i : n;}}(e.path), envVersion: e.envVersion }, e);}), _defineProperty(_C, "miniProgram", { navigateBack: function navigateBack(e) {e = e || {}, u(function () {c("invokeMiniProgramAPI", { name: "navigateBack", arg: { delta: e.delta || 1 } }, e);});}, navigateTo: function navigateTo(e) {u(function () {c("invokeMiniProgramAPI", { name: "navigateTo", arg: { url: e.url } }, e);});}, redirectTo: function redirectTo(e) {u(function () {c("invokeMiniProgramAPI", { name: "redirectTo", arg: { url: e.url } }, e);});}, switchTab: function switchTab(e) {u(function () {c("invokeMiniProgramAPI", { name: "switchTab", arg: { url: e.url } }, e);});}, reLaunch: function reLaunch(e) {u(function () {c("invokeMiniProgramAPI", { name: "reLaunch", arg: { url: e.url } }, e);});}, postMessage: function postMessage(e) {u(function () {c("invokeMiniProgramAPI", { name: "postMessage", arg: e.data || {} }, e);});}, getEnv: function getEnv(e) {u(function () {e({ miniprogram: "miniprogram" === o.__wxjs_environment });});} }), _C),L = 1,B = {};return t.addEventListener("error", function (e) {if (!y) {var n = e.target,i = n.tagName,t = n.src;if (("IMG" == i || "VIDEO" == i || "AUDIO" == i || "SOURCE" == i) && -1 != t.indexOf("wxlocalresource://")) {e.preventDefault(), e.stopPropagation();var o = n["wx-id"];if (o || (o = L++, n["wx-id"] = o), B[o]) return;B[o] = !0, wx.ready(function () {wx.getLocalImgData({ localId: t, success: function success(e) {n.src = e.localData;} });});}}}, !0), t.addEventListener("load", function (e) {if (!y) {var n = e.target,i = n.tagName;if (n.src, "IMG" == i || "VIDEO" == i || "AUDIO" == i || "SOURCE" == i) {var t = n["wx-id"];t && (B[t] = !1);}}}, !0), e && (o.wx = o.jWeixin = C), C;}var O;});
  9045. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
  9046. /***/ }),
  9047. /***/ 325:
  9048. /*!*********************************!*\
  9049. !*** D:/gsxm/ezred/api/info.js ***!
  9050. \*********************************/
  9051. /*! no static exports found */
  9052. /***/ (function(module, exports, __webpack_require__) {
  9053. "use strict";
  9054. Object.defineProperty(exports, "__esModule", { value: true });exports.articletop = articletop;exports.articledel = articledel;exports.details = details;exports.deconstructArticle = deconstructArticle;var _request = _interopRequireDefault(__webpack_require__(/*! @/utils/request */ 21));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  9055. // 置顶 取消置顶
  9056. function articletop(data) {
  9057. return (0, _request.default)({
  9058. url: '/api/circle/articletop',
  9059. method: 'post',
  9060. data: data });
  9061. }
  9062. // 删除贴子
  9063. function articledel(data) {
  9064. return (0, _request.default)({
  9065. url: '/api/circle/articledel',
  9066. method: 'post',
  9067. data: data });
  9068. }
  9069. // 文章详情
  9070. function details(data, id) {
  9071. return (0, _request.default)({
  9072. url: '/api/article/details/' + id,
  9073. method: 'get',
  9074. data: data });
  9075. }
  9076. //处理文章详情页
  9077. function deconstructArticle(data) {
  9078. if (data) {
  9079. data = data.replace(/<img/g, '<img style="width: 100% !important;height:auto"').replace(
  9080. /<p>\S*<img/g, '<p style="line-height: 0;"><img');
  9081. }
  9082. return data;
  9083. }
  9084. /***/ }),
  9085. /***/ 334:
  9086. /*!**********************************!*\
  9087. !*** D:/gsxm/ezred/api/login.js ***!
  9088. \**********************************/
  9089. /*! no static exports found */
  9090. /***/ (function(module, exports, __webpack_require__) {
  9091. "use strict";
  9092. Object.defineProperty(exports, "__esModule", { value: true });exports.login = login;exports.register = register;exports.verify = verify;exports.getUserInfo = getUserInfo;exports.loginMobile = loginMobile;var _request = _interopRequireDefault(__webpack_require__(/*! @/utils/request */ 21));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  9093. // 登录
  9094. function login(data) {
  9095. return (0, _request.default)({
  9096. url: '/api/login',
  9097. method: 'post',
  9098. data: data });
  9099. }
  9100. // 注册
  9101. function register(data) {
  9102. return (0, _request.default)({
  9103. url: '/api/register',
  9104. method: 'post',
  9105. data: data });
  9106. }
  9107. // 验证码
  9108. function verify(data) {
  9109. // type=register为注册
  9110. // type=login为登录
  9111. return (0, _request.default)({
  9112. url: '/api/register/verify',
  9113. method: 'post',
  9114. data: data });
  9115. }
  9116. // 获取用户信息
  9117. function getUserInfo(data) {
  9118. return (0, _request.default)({
  9119. url: '/api/userinfo',
  9120. method: 'get',
  9121. data: data });
  9122. }
  9123. // 短信登录
  9124. function loginMobile(data) {
  9125. return (0, _request.default)({
  9126. url: '/api/login/mobile',
  9127. method: 'post',
  9128. data: data });
  9129. }
  9130. /***/ }),
  9131. /***/ 397:
  9132. /*!***********************************************************!*\
  9133. !*** D:/gsxm/ezred/components/js_sdk/xb-copy/uni-copy.js ***!
  9134. \***********************************************************/
  9135. /*! no static exports found */
  9136. /***/ (function(module, exports, __webpack_require__) {
  9137. "use strict";
  9138. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = uniCopy;function uniCopy(content) {
  9139. /**
  9140. * 小程序端 和 app端的复制逻辑
  9141. */
  9142. uni.setClipboardData({
  9143. data: content,
  9144. success: function success() {
  9145. console.log('success');
  9146. return true;
  9147. } });
  9148. /**
  9149. * H5端的复制逻辑
  9150. */
  9151. }
  9152. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
  9153. /***/ }),
  9154. /***/ 4:
  9155. /*!********************************!*\
  9156. !*** D:/gsxm/ezred/pages.json ***!
  9157. \********************************/
  9158. /*! no static exports found */
  9159. /***/ (function(module, exports) {
  9160. /***/ }),
  9161. /***/ 412:
  9162. /*!***************************************************!*\
  9163. !*** D:/gsxm/ezred/components/uni-popup/popup.js ***!
  9164. \***************************************************/
  9165. /*! no static exports found */
  9166. /***/ (function(module, exports, __webpack_require__) {
  9167. "use strict";
  9168. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _message = _interopRequireDefault(__webpack_require__(/*! ./message.js */ 413));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  9169. // 定义 type 类型:弹出类型:top/bottom/center
  9170. var config = {
  9171. // 顶部弹出
  9172. top: 'top',
  9173. // 底部弹出
  9174. bottom: 'bottom',
  9175. // 居中弹出
  9176. center: 'center',
  9177. // 消息提示
  9178. message: 'top',
  9179. // 对话框
  9180. dialog: 'center',
  9181. // 分享
  9182. share: 'bottom' };var _default =
  9183. {
  9184. data: function data() {
  9185. return {
  9186. config: config };
  9187. },
  9188. mixins: [_message.default] };exports.default = _default;
  9189. /***/ }),
  9190. /***/ 413:
  9191. /*!*****************************************************!*\
  9192. !*** D:/gsxm/ezred/components/uni-popup/message.js ***!
  9193. \*****************************************************/
  9194. /*! no static exports found */
  9195. /***/ (function(module, exports, __webpack_require__) {
  9196. "use strict";
  9197. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _default = {
  9198. created: function created() {
  9199. if (this.type === 'message') {
  9200. // 不显示遮罩
  9201. this.maskShow = false;
  9202. // 获取子组件对象
  9203. this.childrenMsg = null;
  9204. }
  9205. },
  9206. methods: {
  9207. customOpen: function customOpen() {
  9208. if (this.childrenMsg) {
  9209. this.childrenMsg.open();
  9210. }
  9211. },
  9212. customClose: function customClose() {
  9213. if (this.childrenMsg) {
  9214. this.childrenMsg.close();
  9215. }
  9216. } } };exports.default = _default;
  9217. /***/ }),
  9218. /***/ 435:
  9219. /*!****************************************************************!*\
  9220. !*** D:/gsxm/ezred/components/jyf-parser/libs/MpHtmlParser.js ***!
  9221. \****************************************************************/
  9222. /*! no static exports found */
  9223. /***/ (function(module, exports, __webpack_require__) {
  9224. /* WEBPACK VAR INJECTION */(function(uni) {/**
  9225. * html 解析器
  9226. * @tutorial https://github.com/jin-yufeng/Parser
  9227. * @version 20200728
  9228. * @author JinYufeng
  9229. * @listens MIT
  9230. */
  9231. var cfg = __webpack_require__(/*! ./config.js */ 436),
  9232. blankChar = cfg.blankChar,
  9233. CssHandler = __webpack_require__(/*! ./CssHandler.js */ 437),
  9234. windowWidth = uni.getSystemInfoSync().windowWidth;
  9235. var emoji;
  9236. function MpHtmlParser(data) {var _this = this;var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  9237. this.attrs = {};
  9238. this.CssHandler = new CssHandler(options.tagStyle, windowWidth);
  9239. this.data = data;
  9240. this.domain = options.domain;
  9241. this.DOM = [];
  9242. this.i = this.start = this.audioNum = this.imgNum = this.videoNum = 0;
  9243. options.prot = (this.domain || '').includes('://') ? this.domain.split('://')[0] : 'http';
  9244. this.options = options;
  9245. this.state = this.Text;
  9246. this.STACK = [];
  9247. // 工具函数
  9248. this.bubble = function () {
  9249. for (var i = _this.STACK.length, item; item = _this.STACK[--i];) {
  9250. if (cfg.richOnlyTags[item.name]) {
  9251. if (item.name == 'table' && !Object.hasOwnProperty.call(item, 'c')) item.c = 1;
  9252. return false;
  9253. }
  9254. item.c = 1;
  9255. }
  9256. return true;
  9257. };
  9258. this.decode = function (val, amp) {
  9259. var i = -1,
  9260. j,en;
  9261. while (1) {
  9262. if ((i = val.indexOf('&', i + 1)) == -1) break;
  9263. if ((j = val.indexOf(';', i + 2)) == -1) break;
  9264. if (val[i + 1] == '#') {
  9265. en = parseInt((val[i + 2] == 'x' ? '0' : '') + val.substring(i + 2, j));
  9266. if (!isNaN(en)) val = val.substr(0, i) + String.fromCharCode(en) + val.substr(j + 1);
  9267. } else {
  9268. en = val.substring(i + 1, j);
  9269. if (cfg.entities[en] || en == amp)
  9270. val = val.substr(0, i) + (cfg.entities[en] || '&') + val.substr(j + 1);
  9271. }
  9272. }
  9273. return val;
  9274. };
  9275. this.getUrl = function (url) {
  9276. if (url[0] == '/') {
  9277. if (url[1] == '/') url = _this.options.prot + ':' + url;else
  9278. if (_this.domain) url = _this.domain + url;
  9279. } else if (_this.domain && url.indexOf('data:') != 0 && !url.includes('://'))
  9280. url = _this.domain + '/' + url;
  9281. return url;
  9282. };
  9283. this.isClose = function () {return _this.data[_this.i] == '>' || _this.data[_this.i] == '/' && _this.data[_this.i + 1] == '>';};
  9284. this.section = function () {return _this.data.substring(_this.start, _this.i);};
  9285. this.parent = function () {return _this.STACK[_this.STACK.length - 1];};
  9286. this.siblings = function () {return _this.STACK.length ? _this.parent().children : _this.DOM;};
  9287. }
  9288. MpHtmlParser.prototype.parse = function () {
  9289. if (emoji) this.data = emoji.parseEmoji(this.data);
  9290. for (var c; c = this.data[this.i]; this.i++) {
  9291. this.state(c);}
  9292. if (this.state == this.Text) this.setText();
  9293. while (this.STACK.length) {this.popNode(this.STACK.pop());}
  9294. return this.DOM;
  9295. };
  9296. // 设置属性
  9297. MpHtmlParser.prototype.setAttr = function () {
  9298. var name = this.attrName.toLowerCase(),
  9299. val = this.attrVal;
  9300. if (cfg.boolAttrs[name]) this.attrs[name] = 'T';else
  9301. if (val) {
  9302. if (name == 'src' || name == 'data-src' && !this.attrs.src) this.attrs.src = this.getUrl(this.decode(val, 'amp'));else
  9303. if (name == 'href' || name == 'style') this.attrs[name] = this.decode(val, 'amp');else
  9304. if (name.substr(0, 5) != 'data-') this.attrs[name] = val;
  9305. }
  9306. this.attrVal = '';
  9307. while (blankChar[this.data[this.i]]) {this.i++;}
  9308. if (this.isClose()) this.setNode();else
  9309. {
  9310. this.start = this.i;
  9311. this.state = this.AttrName;
  9312. }
  9313. };
  9314. // 设置文本节点
  9315. MpHtmlParser.prototype.setText = function () {
  9316. var back,text = this.section();
  9317. if (!text) return;
  9318. text = cfg.onText && cfg.onText(text, function () {return back = true;}) || text;
  9319. if (back) {
  9320. this.data = this.data.substr(0, this.start) + text + this.data.substr(this.i);
  9321. var j = this.start + text.length;
  9322. for (this.i = this.start; this.i < j; this.i++) {this.state(this.data[this.i]);}
  9323. return;
  9324. }
  9325. if (!this.pre) {
  9326. // 合并空白符
  9327. var flag,tmp = [];
  9328. for (var i = text.length, c; c = text[--i];) {
  9329. if (!blankChar[c]) {
  9330. tmp.unshift(c);
  9331. if (!flag) flag = 1;
  9332. } else {
  9333. if (tmp[0] != ' ') tmp.unshift(' ');
  9334. if (c == '\n' && flag == void 0) flag = 0;
  9335. }}
  9336. if (flag == 0) return;
  9337. text = tmp.join('');
  9338. }
  9339. this.siblings().push({
  9340. type: 'text',
  9341. text: this.decode(text) });
  9342. };
  9343. // 设置元素节点
  9344. MpHtmlParser.prototype.setNode = function () {
  9345. var node = {
  9346. name: this.tagName.toLowerCase(),
  9347. attrs: this.attrs },
  9348. close = cfg.selfClosingTags[node.name];
  9349. if (this.options.nodes.length) node.type = 'node';
  9350. this.attrs = {};
  9351. if (!cfg.ignoreTags[node.name]) {
  9352. // 处理属性
  9353. var attrs = node.attrs,
  9354. style = this.CssHandler.match(node.name, attrs, node) + (attrs.style || ''),
  9355. styleObj = {};
  9356. if (attrs.id) {
  9357. if (this.options.compress & 1) attrs.id = void 0;else
  9358. if (this.options.useAnchor) this.bubble();
  9359. }
  9360. if (this.options.compress & 2 && attrs.class) attrs.class = void 0;
  9361. switch (node.name) {
  9362. case 'a':
  9363. case 'ad':
  9364. this.bubble();
  9365. break;
  9366. case 'font':
  9367. if (attrs.color) {
  9368. styleObj['color'] = attrs.color;
  9369. attrs.color = void 0;
  9370. }
  9371. if (attrs.face) {
  9372. styleObj['font-family'] = attrs.face;
  9373. attrs.face = void 0;
  9374. }
  9375. if (attrs.size) {
  9376. var size = parseInt(attrs.size);
  9377. if (size < 1) size = 1;else
  9378. if (size > 7) size = 7;
  9379. var map = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'];
  9380. styleObj['font-size'] = map[size - 1];
  9381. attrs.size = void 0;
  9382. }
  9383. break;
  9384. case 'embed':
  9385. var src = node.attrs.src || '',
  9386. type = node.attrs.type || '';
  9387. if (type.includes('video') || src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8'))
  9388. node.name = 'video';else
  9389. if (type.includes('audio') || src.includes('.m4a') || src.includes('.wav') || src.includes('.mp3') || src.includes(
  9390. '.aac'))
  9391. node.name = 'audio';else
  9392. break;
  9393. if (node.attrs.autostart)
  9394. node.attrs.autoplay = 'T';
  9395. node.attrs.controls = 'T';
  9396. case 'video':
  9397. case 'audio':
  9398. if (!attrs.id) attrs.id = node.name + ++this["".concat(node.name, "Num")];else
  9399. this["".concat(node.name, "Num")]++;
  9400. if (node.name == 'video') {
  9401. if (this.videoNum > 3)
  9402. node.lazyLoad = 1;
  9403. if (attrs.width) {
  9404. styleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px');
  9405. attrs.width = void 0;
  9406. }
  9407. if (attrs.height) {
  9408. styleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px');
  9409. attrs.height = void 0;
  9410. }
  9411. }
  9412. if (!attrs.controls && !attrs.autoplay) attrs.controls = 'T';
  9413. attrs.source = [];
  9414. if (attrs.src) {
  9415. attrs.source.push(attrs.src);
  9416. attrs.src = void 0;
  9417. }
  9418. this.bubble();
  9419. break;
  9420. case 'td':
  9421. case 'th':
  9422. if (attrs.colspan || attrs.rowspan)
  9423. for (var k = this.STACK.length, item; item = this.STACK[--k];) {
  9424. if (item.name == 'table') {
  9425. item.c = void 0;
  9426. break;
  9427. }}}
  9428. if (attrs.align) {
  9429. styleObj['text-align'] = attrs.align;
  9430. attrs.align = void 0;
  9431. }
  9432. // 压缩 style
  9433. var styles = style.split(';');
  9434. style = '';
  9435. for (var i = 0, len = styles.length; i < len; i++) {
  9436. var info = styles[i].split(':');
  9437. if (info.length < 2) continue;
  9438. var _key = info[0].trim().toLowerCase(),
  9439. _value = info.slice(1).join(':').trim();
  9440. if (_value[0] == '-' || _value.includes('safe'))
  9441. style += ";".concat(_key, ":").concat(_value);else
  9442. if (!styleObj[_key] || _value.includes('import') || !styleObj[_key].includes('import'))
  9443. styleObj[_key] = _value;
  9444. }
  9445. if (node.name == 'img') {
  9446. if (attrs.src && !attrs.ignore) {
  9447. if (this.bubble())
  9448. attrs.i = (this.imgNum++).toString();else
  9449. attrs.ignore = 'T';
  9450. }
  9451. if (attrs.ignore) {
  9452. style += ';-webkit-touch-callout:none';
  9453. styleObj['max-width'] = '100%';
  9454. }
  9455. var width;
  9456. if (styleObj.width) width = styleObj.width;else
  9457. if (attrs.width) width = attrs.width.includes('%') ? attrs.width : attrs.width + 'px';
  9458. if (width) {
  9459. styleObj.width = width;
  9460. attrs.width = '100%';
  9461. if (parseInt(width) > windowWidth) {
  9462. styleObj.height = '';
  9463. if (attrs.height) attrs.height = void 0;
  9464. }
  9465. }
  9466. if (styleObj.height) {
  9467. attrs.height = styleObj.height;
  9468. styleObj.height = '';
  9469. } else if (attrs.height && !attrs.height.includes('%'))
  9470. attrs.height += 'px';
  9471. }
  9472. for (var key in styleObj) {
  9473. var value = styleObj[key];
  9474. if (!value) continue;
  9475. if (key.includes('flex') || key == 'order' || key == 'self-align') node.c = 1;
  9476. // 填充链接
  9477. if (value.includes('url')) {
  9478. var j = value.indexOf('(');
  9479. if (j++ != -1) {
  9480. while (value[j] == '"' || value[j] == "'" || blankChar[value[j]]) {j++;}
  9481. value = value.substr(0, j) + this.getUrl(value.substr(j));
  9482. }
  9483. }
  9484. // 转换 rpx
  9485. else if (value.includes('rpx'))
  9486. value = value.replace(/[0-9.]+\s*rpx/g, function ($) {return parseFloat($) * windowWidth / 750 + 'px';});else
  9487. if (key == 'white-space' && value.includes('pre') && !close)
  9488. this.pre = node.pre = true;
  9489. style += ";".concat(key, ":").concat(value);
  9490. }
  9491. style = style.substr(1);
  9492. if (style) attrs.style = style;
  9493. if (!close) {
  9494. node.children = [];
  9495. if (node.name == 'pre' && cfg.highlight) {
  9496. this.remove(node);
  9497. this.pre = node.pre = true;
  9498. }
  9499. this.siblings().push(node);
  9500. this.STACK.push(node);
  9501. } else if (!cfg.filter || cfg.filter(node, this) != false)
  9502. this.siblings().push(node);
  9503. } else {
  9504. if (!close) this.remove(node);else
  9505. if (node.name == 'source') {
  9506. var parent = this.parent();
  9507. if (parent && (parent.name == 'video' || parent.name == 'audio') && node.attrs.src)
  9508. parent.attrs.source.push(node.attrs.src);
  9509. } else if (node.name == 'base' && !this.domain) this.domain = node.attrs.href;
  9510. }
  9511. if (this.data[this.i] == '/') this.i++;
  9512. this.start = this.i + 1;
  9513. this.state = this.Text;
  9514. };
  9515. // 移除标签
  9516. MpHtmlParser.prototype.remove = function (node) {var _this2 = this;
  9517. var name = node.name,
  9518. j = this.i;
  9519. // 处理 svg
  9520. var handleSvg = function handleSvg() {
  9521. var src = _this2.data.substring(j, _this2.i + 1);
  9522. if (!node.attrs.xmlns) src = ' xmlns="http://www.w3.org/2000/svg"' + src;
  9523. var i = j;
  9524. while (_this2.data[j] != '<') {j--;}
  9525. src = _this2.data.substring(j, i).replace("viewbox", "viewBox") + src;
  9526. var parent = _this2.parent();
  9527. if (node.attrs.width == '100%' && parent && (parent.attrs.style || '').includes('inline'))
  9528. parent.attrs.style = 'width:300px;max-width:100%;' + parent.attrs.style;
  9529. _this2.siblings().push({
  9530. name: 'img',
  9531. attrs: {
  9532. src: 'data:image/svg+xml;utf8,' + src.replace(/#/g, '%23'),
  9533. style: (/vertical[^;]+/.exec(node.attrs.style) || []).shift(),
  9534. ignore: 'T' } });
  9535. };
  9536. if (node.name == 'svg' && this.data[j] == '/') return handleSvg(this.i++);
  9537. while (1) {
  9538. if ((this.i = this.data.indexOf('</', this.i + 1)) == -1) {
  9539. if (name == 'pre' || name == 'svg') this.i = j;else
  9540. this.i = this.data.length;
  9541. return;
  9542. }
  9543. this.start = this.i += 2;
  9544. while (!blankChar[this.data[this.i]] && !this.isClose()) {this.i++;}
  9545. if (this.section().toLowerCase() == name) {
  9546. // 代码块高亮
  9547. if (name == 'pre') {
  9548. this.data = this.data.substr(0, j + 1) + cfg.highlight(this.data.substring(j + 1, this.i - 5), node.attrs) + this.data.
  9549. substr(this.i - 5);
  9550. return this.i = j;
  9551. } else if (name == 'style')
  9552. this.CssHandler.getStyle(this.data.substring(j + 1, this.i - 7));else
  9553. if (name == 'title')
  9554. this.DOM.title = this.data.substring(j + 1, this.i - 7);
  9555. if ((this.i = this.data.indexOf('>', this.i)) == -1) this.i = this.data.length;
  9556. if (name == 'svg') handleSvg();
  9557. return;
  9558. }
  9559. }
  9560. };
  9561. // 节点出栈处理
  9562. MpHtmlParser.prototype.popNode = function (node) {
  9563. // 空白符处理
  9564. if (node.pre) {
  9565. node.pre = this.pre = void 0;
  9566. for (var i = this.STACK.length; i--;) {
  9567. if (this.STACK[i].pre)
  9568. this.pre = true;}
  9569. }
  9570. var siblings = this.siblings(),
  9571. len = siblings.length,
  9572. childs = node.children;
  9573. if (node.name == 'head' || cfg.filter && cfg.filter(node, this) == false)
  9574. return siblings.pop();
  9575. var attrs = node.attrs;
  9576. // 替换一些标签名
  9577. if (cfg.blockTags[node.name]) node.name = 'div';else
  9578. if (!cfg.trustTags[node.name]) node.name = 'span';
  9579. // 处理列表
  9580. if (node.c && (node.name == 'ul' || node.name == 'ol')) {
  9581. if ((node.attrs.style || '').includes('list-style:none')) {
  9582. for (var _i = 0, child; child = childs[_i++];) {
  9583. if (child.name == 'li')
  9584. child.name = 'div';}
  9585. } else if (node.name == 'ul') {
  9586. var floor = 1;
  9587. for (var _i2 = this.STACK.length; _i2--;) {
  9588. if (this.STACK[_i2].name == 'ul') floor++;}
  9589. if (floor != 1)
  9590. for (var _i3 = childs.length; _i3--;) {
  9591. childs[_i3].floor = floor;}
  9592. } else {
  9593. for (var _i4 = 0, num = 1, _child; _child = childs[_i4++];) {
  9594. if (_child.name == 'li') {
  9595. _child.type = 'ol';
  9596. _child.num = function (num, type) {
  9597. if (type == 'a') return String.fromCharCode(97 + (num - 1) % 26);
  9598. if (type == 'A') return String.fromCharCode(65 + (num - 1) % 26);
  9599. if (type == 'i' || type == 'I') {
  9600. num = (num - 1) % 99 + 1;
  9601. var one = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'],
  9602. ten = ['X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'],
  9603. res = (ten[Math.floor(num / 10) - 1] || '') + (one[num % 10 - 1] || '');
  9604. if (type == 'i') return res.toLowerCase();
  9605. return res;
  9606. }
  9607. return num;
  9608. }(num++, attrs.type) + '.';
  9609. }}
  9610. }
  9611. }
  9612. // 处理表格的边框
  9613. if (node.name == 'table') {
  9614. var padding = attrs.cellpadding,
  9615. spacing = attrs.cellspacing,
  9616. border = attrs.border;
  9617. if (node.c) {
  9618. this.bubble();
  9619. attrs.style = (attrs.style || '') + ';display:table';
  9620. if (!padding) padding = 2;
  9621. if (!spacing) spacing = 2;
  9622. }
  9623. if (border) attrs.style = "border:".concat(border, "px solid gray;").concat(attrs.style || '');
  9624. if (spacing) attrs.style = "border-spacing:".concat(spacing, "px;").concat(attrs.style || '');
  9625. if (border || padding || node.c)
  9626. (function f(ns) {
  9627. for (var i = 0, n; n = ns[i]; i++) {
  9628. if (n.type == 'text') continue;
  9629. var style = n.attrs.style || '';
  9630. if (node.c && n.name[0] == 't') {
  9631. n.c = 1;
  9632. style += ';display:table-' + (n.name == 'th' || n.name == 'td' ? 'cell' : n.name == 'tr' ? 'row' : 'row-group');
  9633. }
  9634. if (n.name == 'th' || n.name == 'td') {
  9635. if (border) style = "border:".concat(border, "px solid gray;").concat(style);
  9636. if (padding) style = "padding:".concat(padding, "px;").concat(style);
  9637. } else f(n.children || []);
  9638. if (style) n.attrs.style = style;
  9639. }
  9640. })(childs);
  9641. if (this.options.autoscroll) {
  9642. var table = Object.assign({}, node);
  9643. node.name = 'div';
  9644. node.attrs = {
  9645. style: 'overflow:scroll' };
  9646. node.children = [table];
  9647. }
  9648. }
  9649. this.CssHandler.pop && this.CssHandler.pop(node);
  9650. // 自动压缩
  9651. if (node.name == 'div' && !Object.keys(attrs).length && childs.length == 1 && childs[0].name == 'div')
  9652. siblings[len - 1] = childs[0];
  9653. };
  9654. // 状态机
  9655. MpHtmlParser.prototype.Text = function (c) {
  9656. if (c == '<') {
  9657. var next = this.data[this.i + 1],
  9658. isLetter = function isLetter(c) {return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';};
  9659. if (isLetter(next)) {
  9660. this.setText();
  9661. this.start = this.i + 1;
  9662. this.state = this.TagName;
  9663. } else if (next == '/') {
  9664. this.setText();
  9665. if (isLetter(this.data[++this.i + 1])) {
  9666. this.start = this.i + 1;
  9667. this.state = this.EndTag;
  9668. } else this.Comment();
  9669. } else if (next == '!' || next == '?') {
  9670. this.setText();
  9671. this.Comment();
  9672. }
  9673. }
  9674. };
  9675. MpHtmlParser.prototype.Comment = function () {
  9676. var key;
  9677. if (this.data.substring(this.i + 2, this.i + 4) == '--') key = '-->';else
  9678. if (this.data.substring(this.i + 2, this.i + 9) == '[CDATA[') key = ']]>';else
  9679. key = '>';
  9680. if ((this.i = this.data.indexOf(key, this.i + 2)) == -1) this.i = this.data.length;else
  9681. this.i += key.length - 1;
  9682. this.start = this.i + 1;
  9683. this.state = this.Text;
  9684. };
  9685. MpHtmlParser.prototype.TagName = function (c) {
  9686. if (blankChar[c]) {
  9687. this.tagName = this.section();
  9688. while (blankChar[this.data[this.i]]) {this.i++;}
  9689. if (this.isClose()) this.setNode();else
  9690. {
  9691. this.start = this.i;
  9692. this.state = this.AttrName;
  9693. }
  9694. } else if (this.isClose()) {
  9695. this.tagName = this.section();
  9696. this.setNode();
  9697. }
  9698. };
  9699. MpHtmlParser.prototype.AttrName = function (c) {
  9700. if (c == '=' || blankChar[c] || this.isClose()) {
  9701. this.attrName = this.section();
  9702. if (blankChar[c])
  9703. while (blankChar[this.data[++this.i]]) {;}
  9704. if (this.data[this.i] == '=') {
  9705. while (blankChar[this.data[++this.i]]) {;}
  9706. this.start = this.i--;
  9707. this.state = this.AttrValue;
  9708. } else this.setAttr();
  9709. }
  9710. };
  9711. MpHtmlParser.prototype.AttrValue = function (c) {
  9712. if (c == '"' || c == "'") {
  9713. this.start++;
  9714. if ((this.i = this.data.indexOf(c, this.i + 1)) == -1) return this.i = this.data.length;
  9715. this.attrVal = this.section();
  9716. this.i++;
  9717. } else {
  9718. for (; !blankChar[this.data[this.i]] && !this.isClose(); this.i++) {;}
  9719. this.attrVal = this.section();
  9720. }
  9721. this.setAttr();
  9722. };
  9723. MpHtmlParser.prototype.EndTag = function (c) {
  9724. if (blankChar[c] || c == '>' || c == '/') {
  9725. var name = this.section().toLowerCase();
  9726. for (var i = this.STACK.length; i--;) {
  9727. if (this.STACK[i].name == name) break;}
  9728. if (i != -1) {
  9729. var node;
  9730. while ((node = this.STACK.pop()).name != name) {this.popNode(node);}
  9731. this.popNode(node);
  9732. } else if (name == 'p' || name == 'br')
  9733. this.siblings().push({
  9734. name: name,
  9735. attrs: {} });
  9736. this.i = this.data.indexOf('>', this.i);
  9737. this.start = this.i + 1;
  9738. if (this.i == -1) this.i = this.data.length;else
  9739. this.state = this.Text;
  9740. }
  9741. };
  9742. module.exports = MpHtmlParser;
  9743. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
  9744. /***/ }),
  9745. /***/ 436:
  9746. /*!**********************************************************!*\
  9747. !*** D:/gsxm/ezred/components/jyf-parser/libs/config.js ***!
  9748. \**********************************************************/
  9749. /*! no static exports found */
  9750. /***/ (function(module, exports) {
  9751. /* 配置文件 */
  9752. var cfg = {
  9753. // 出错占位图
  9754. errorImg: null,
  9755. // 过滤器函数
  9756. filter: null,
  9757. // 代码高亮函数
  9758. highlight: null,
  9759. // 文本处理函数
  9760. onText: null,
  9761. // 实体编码列表
  9762. entities: {
  9763. quot: '"',
  9764. apos: "'",
  9765. semi: ';',
  9766. nbsp: '\xA0',
  9767. ensp: "\u2002",
  9768. emsp: "\u2003",
  9769. ndash: '–',
  9770. mdash: '—',
  9771. middot: '·',
  9772. lsquo: '‘',
  9773. rsquo: '’',
  9774. ldquo: '“',
  9775. rdquo: '”',
  9776. bull: '•',
  9777. hellip: '…' },
  9778. blankChar: makeMap(' ,\xA0,\t,\r,\n,\f'),
  9779. boolAttrs: makeMap('allowfullscreen,autoplay,autostart,controls,ignore,loop,muted'),
  9780. // 块级标签,将被转为 div
  9781. blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section'),
  9782. // 将被移除的标签
  9783. ignoreTags: makeMap('area,base,canvas,frame,iframe,input,link,map,meta,param,script,source,style,svg,textarea,title,track,wbr'),
  9784. // 只能被 rich-text 显示的标签
  9785. richOnlyTags: makeMap('a,colgroup,fieldset,legend,table'),
  9786. // 自闭合的标签
  9787. selfClosingTags: makeMap('area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr'),
  9788. // 信任的标签
  9789. trustTags: makeMap('a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video'),
  9790. // 默认的标签样式
  9791. userAgentStyles: {
  9792. address: 'font-style:italic',
  9793. big: 'display:inline;font-size:1.2em',
  9794. blockquote: 'background-color:#f6f6f6;border-left:3px solid #dbdbdb;color:#6c6c6c;padding:5px 0 5px 10px',
  9795. caption: 'display:table-caption;text-align:center',
  9796. center: 'text-align:center',
  9797. cite: 'font-style:italic',
  9798. dd: 'margin-left:40px',
  9799. mark: 'background-color:yellow',
  9800. pre: 'font-family:monospace;white-space:pre;overflow:scroll',
  9801. s: 'text-decoration:line-through',
  9802. small: 'display:inline;font-size:0.8em',
  9803. u: 'text-decoration:underline' } };
  9804. function makeMap(str) {
  9805. var map = Object.create(null),
  9806. list = str.split(',');
  9807. for (var i = list.length; i--;) {
  9808. map[list[i]] = true;}
  9809. return map;
  9810. }
  9811. module.exports = cfg;
  9812. /***/ }),
  9813. /***/ 437:
  9814. /*!**************************************************************!*\
  9815. !*** D:/gsxm/ezred/components/jyf-parser/libs/CssHandler.js ***!
  9816. \**************************************************************/
  9817. /*! no static exports found */
  9818. /***/ (function(module, exports, __webpack_require__) {
  9819. var cfg = __webpack_require__(/*! ./config.js */ 436),
  9820. isLetter = function isLetter(c) {return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';};
  9821. function CssHandler(tagStyle) {
  9822. var styles = Object.assign(Object.create(null), cfg.userAgentStyles);
  9823. for (var item in tagStyle) {
  9824. styles[item] = (styles[item] ? styles[item] + ';' : '') + tagStyle[item];}
  9825. this.styles = styles;
  9826. }
  9827. CssHandler.prototype.getStyle = function (data) {
  9828. this.styles = new parser(data, this.styles).parse();
  9829. };
  9830. CssHandler.prototype.match = function (name, attrs) {
  9831. var tmp,matched = (tmp = this.styles[name]) ? tmp + ';' : '';
  9832. if (attrs.class) {
  9833. var items = attrs.class.split(' ');
  9834. for (var i = 0, item; item = items[i]; i++) {
  9835. if (tmp = this.styles['.' + item])
  9836. matched += tmp + ';';}
  9837. }
  9838. if (tmp = this.styles['#' + attrs.id])
  9839. matched += tmp + ';';
  9840. return matched;
  9841. };
  9842. module.exports = CssHandler;
  9843. function parser(data, init) {
  9844. this.data = data;
  9845. this.floor = 0;
  9846. this.i = 0;
  9847. this.list = [];
  9848. this.res = init;
  9849. this.state = this.Space;
  9850. }
  9851. parser.prototype.parse = function () {
  9852. for (var c; c = this.data[this.i]; this.i++) {
  9853. this.state(c);}
  9854. return this.res;
  9855. };
  9856. parser.prototype.section = function () {
  9857. return this.data.substring(this.start, this.i);
  9858. };
  9859. // 状态机
  9860. parser.prototype.Space = function (c) {
  9861. if (c == '.' || c == '#' || isLetter(c)) {
  9862. this.start = this.i;
  9863. this.state = this.Name;
  9864. } else if (c == '/' && this.data[this.i + 1] == '*')
  9865. this.Comment();else
  9866. if (!cfg.blankChar[c] && c != ';')
  9867. this.state = this.Ignore;
  9868. };
  9869. parser.prototype.Comment = function () {
  9870. this.i = this.data.indexOf('*/', this.i) + 1;
  9871. if (!this.i) this.i = this.data.length;
  9872. this.state = this.Space;
  9873. };
  9874. parser.prototype.Ignore = function (c) {
  9875. if (c == '{') this.floor++;else
  9876. if (c == '}' && ! --this.floor) this.state = this.Space;
  9877. };
  9878. parser.prototype.Name = function (c) {
  9879. if (cfg.blankChar[c]) {
  9880. this.list.push(this.section());
  9881. this.state = this.NameSpace;
  9882. } else if (c == '{') {
  9883. this.list.push(this.section());
  9884. this.Content();
  9885. } else if (c == ',') {
  9886. this.list.push(this.section());
  9887. this.Comma();
  9888. } else if (!isLetter(c) && (c < '0' || c > '9') && c != '-' && c != '_')
  9889. this.state = this.Ignore;
  9890. };
  9891. parser.prototype.NameSpace = function (c) {
  9892. if (c == '{') this.Content();else
  9893. if (c == ',') this.Comma();else
  9894. if (!cfg.blankChar[c]) this.state = this.Ignore;
  9895. };
  9896. parser.prototype.Comma = function () {
  9897. while (cfg.blankChar[this.data[++this.i]]) {;}
  9898. if (this.data[this.i] == '{') this.Content();else
  9899. {
  9900. this.start = this.i--;
  9901. this.state = this.Name;
  9902. }
  9903. };
  9904. parser.prototype.Content = function () {
  9905. this.start = ++this.i;
  9906. if ((this.i = this.data.indexOf('}', this.i)) == -1) this.i = this.data.length;
  9907. var content = this.section();
  9908. for (var i = 0, item; item = this.list[i++];) {
  9909. if (this.res[item]) this.res[item] += ';' + content;else
  9910. this.res[item] = content;}
  9911. this.list = [];
  9912. this.state = this.Space;
  9913. };
  9914. /***/ }),
  9915. /***/ 452:
  9916. /*!***************************************************************!*\
  9917. !*** D:/gsxm/ezred/components/wangding-pickerAddress/data.js ***!
  9918. \***************************************************************/
  9919. /*! no static exports found */
  9920. /***/ (function(module, exports, __webpack_require__) {
  9921. "use strict";
  9922. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _default = [
  9923. {
  9924. "name": "北京市",
  9925. "city": [
  9926. {
  9927. "name": "北京市",
  9928. "area": [
  9929. "东城区",
  9930. "西城区",
  9931. "崇文区",
  9932. "宣武区",
  9933. "朝阳区",
  9934. "丰台区",
  9935. "石景山区",
  9936. "海淀区",
  9937. "门头沟区",
  9938. "房山区",
  9939. "通州区",
  9940. "顺义区",
  9941. "昌平区",
  9942. "大兴区",
  9943. "平谷区",
  9944. "怀柔区",
  9945. "密云县",
  9946. "延庆县"] }] },
  9947. {
  9948. "name": "天津市",
  9949. "city": [
  9950. {
  9951. "name": "天津市",
  9952. "area": [
  9953. "和平区",
  9954. "河东区",
  9955. "河西区",
  9956. "南开区",
  9957. "河北区",
  9958. "红桥区",
  9959. "塘沽区",
  9960. "汉沽区",
  9961. "大港区",
  9962. "东丽区",
  9963. "西青区",
  9964. "津南区",
  9965. "北辰区",
  9966. "武清区",
  9967. "宝坻区",
  9968. "宁河县",
  9969. "静海县",
  9970. "蓟 县"] }] },
  9971. {
  9972. "name": "河北省",
  9973. "city": [
  9974. {
  9975. "name": "石家庄市",
  9976. "area": [
  9977. "长安区",
  9978. "桥东区",
  9979. "桥西区",
  9980. "新华区",
  9981. "郊 区",
  9982. "井陉矿区",
  9983. "井陉县",
  9984. "正定县",
  9985. "栾城县",
  9986. "行唐县",
  9987. "灵寿县",
  9988. "高邑县",
  9989. "深泽县",
  9990. "赞皇县",
  9991. "无极县",
  9992. "平山县",
  9993. "元氏县",
  9994. "赵 县",
  9995. "辛集市",
  9996. "藁",
  9997. "晋州市",
  9998. "新乐市",
  9999. "鹿泉市"] },
  10000. {
  10001. "name": "唐山市",
  10002. "area": [
  10003. "路南区",
  10004. "路北区",
  10005. "古冶区",
  10006. "开平区",
  10007. "新 区",
  10008. "丰润县",
  10009. "滦 县",
  10010. "滦南县",
  10011. "乐亭县",
  10012. "迁西县",
  10013. "玉田县",
  10014. "唐海县",
  10015. "遵化市",
  10016. "丰南市",
  10017. "迁安市"] },
  10018. {
  10019. "name": "秦皇岛市",
  10020. "area": [
  10021. "海港区",
  10022. "山海关区",
  10023. "北戴河区",
  10024. "青龙满族自治县",
  10025. "昌黎县",
  10026. "抚宁县",
  10027. "卢龙县"] },
  10028. {
  10029. "name": "邯郸市",
  10030. "area": [
  10031. "邯山区",
  10032. "丛台区",
  10033. "复兴区",
  10034. "峰峰矿区",
  10035. "邯郸县",
  10036. "临漳县",
  10037. "成安县",
  10038. "大名县",
  10039. "涉 县",
  10040. "磁 县",
  10041. "肥乡县",
  10042. "永年县",
  10043. "邱 县",
  10044. "鸡泽县",
  10045. "广平县",
  10046. "馆陶县",
  10047. "魏 县",
  10048. "曲周县",
  10049. "武安市"] },
  10050. {
  10051. "name": "邢台市",
  10052. "area": [
  10053. "桥东区",
  10054. "桥西区",
  10055. "邢台县",
  10056. "临城县",
  10057. "内丘县",
  10058. "柏乡县",
  10059. "隆尧县",
  10060. "任 县",
  10061. "南和县",
  10062. "宁晋县",
  10063. "巨鹿县",
  10064. "新河县",
  10065. "广宗县",
  10066. "平乡县",
  10067. "威 县",
  10068. "清河县",
  10069. "临西县",
  10070. "南宫市",
  10071. "沙河市"] },
  10072. {
  10073. "name": "保定市",
  10074. "area": [
  10075. "新市区",
  10076. "北市区",
  10077. "南市区",
  10078. "满城县",
  10079. "清苑县",
  10080. "涞水县",
  10081. "阜平县",
  10082. "徐水县",
  10083. "定兴县",
  10084. "唐 县",
  10085. "高阳县",
  10086. "容城县",
  10087. "涞源县",
  10088. "望都县",
  10089. "安新县",
  10090. "易 县",
  10091. "曲阳县",
  10092. "蠡 县",
  10093. "顺平县",
  10094. "博野",
  10095. "雄县",
  10096. "涿州市",
  10097. "定州市",
  10098. "安国市",
  10099. "高碑店市"] },
  10100. {
  10101. "name": "张家口",
  10102. "area": [
  10103. "桥东区",
  10104. "桥西区",
  10105. "宣化区",
  10106. "下花园区",
  10107. "宣化县",
  10108. "张北县",
  10109. "康保县",
  10110. "沽源县",
  10111. "尚义县",
  10112. "蔚 县",
  10113. "阳原县",
  10114. "怀安县",
  10115. "万全县",
  10116. "怀来县",
  10117. "涿鹿县",
  10118. "赤城县",
  10119. "崇礼县"] },
  10120. {
  10121. "name": "承德市",
  10122. "area": [
  10123. "双桥区",
  10124. "双滦区",
  10125. "鹰手营子矿区",
  10126. "承德县",
  10127. "兴隆县",
  10128. "平泉县",
  10129. "滦平县",
  10130. "隆化县",
  10131. "丰宁满族自治县",
  10132. "宽城满族自治县",
  10133. "围场满族蒙古族自治县"] },
  10134. {
  10135. "name": "沧州市",
  10136. "area": [
  10137. "新华区",
  10138. "运河区",
  10139. "沧 县",
  10140. "青 县",
  10141. "东光县",
  10142. "海兴县",
  10143. "盐山县",
  10144. "肃宁县",
  10145. "南皮县",
  10146. "吴桥县",
  10147. "献 县",
  10148. "孟村回族自治县",
  10149. "泊头市",
  10150. "任丘市",
  10151. "黄骅市",
  10152. "河间市"] },
  10153. {
  10154. "name": "廊坊市",
  10155. "area": [
  10156. "安次区",
  10157. "固安县",
  10158. "永清县",
  10159. "香河县",
  10160. "大城县",
  10161. "文安县",
  10162. "大厂回族自治县",
  10163. "霸州市",
  10164. "三河市"] },
  10165. {
  10166. "name": "衡水市",
  10167. "area": [
  10168. "桃城区",
  10169. "枣强县",
  10170. "武邑县",
  10171. "武强县",
  10172. "饶阳县",
  10173. "安平县",
  10174. "故城县",
  10175. "景 县",
  10176. "阜城县",
  10177. "冀州市",
  10178. "深州市"] }] },
  10179. {
  10180. "name": "山西省",
  10181. "city": [
  10182. {
  10183. "name": "太原市",
  10184. "area": [
  10185. "小店区",
  10186. "迎泽区",
  10187. "杏花岭区",
  10188. "尖草坪区",
  10189. "万柏林区",
  10190. "晋源区",
  10191. "清徐县",
  10192. "阳曲县",
  10193. "娄烦县",
  10194. "古交市"] },
  10195. {
  10196. "name": "大同市",
  10197. "area": [
  10198. "城 区",
  10199. "矿 区",
  10200. "南郊区",
  10201. "新荣区",
  10202. "阳高县",
  10203. "天镇县",
  10204. "广灵县",
  10205. "灵丘县",
  10206. "浑源县",
  10207. "左云县",
  10208. "大同县"] },
  10209. {
  10210. "name": "阳泉市",
  10211. "area": [
  10212. "城 区",
  10213. "矿 区",
  10214. "郊 区",
  10215. "平定县",
  10216. "盂 县"] },
  10217. {
  10218. "name": "长治市",
  10219. "area": [
  10220. "城 区",
  10221. "郊 区",
  10222. "长治县",
  10223. "襄垣县",
  10224. "屯留县",
  10225. "平顺县",
  10226. "黎城县",
  10227. "壶关县",
  10228. "长子县",
  10229. "武乡县",
  10230. "沁 县",
  10231. "沁源县",
  10232. "潞城市"] },
  10233. {
  10234. "name": "晋城市",
  10235. "area": [
  10236. "城 区",
  10237. "沁水县",
  10238. "阳城县",
  10239. "陵川县",
  10240. "泽州县",
  10241. "高平市"] },
  10242. {
  10243. "name": "朔州市",
  10244. "area": [
  10245. "朔城区",
  10246. "平鲁区",
  10247. "山阴县",
  10248. "应 县",
  10249. "右玉县",
  10250. "怀仁县"] },
  10251. {
  10252. "name": "忻州市",
  10253. "area": [
  10254. "忻府区",
  10255. "原平市",
  10256. "定襄县",
  10257. "五台县",
  10258. "代 县",
  10259. "繁峙县",
  10260. "宁武县",
  10261. "静乐县",
  10262. "神池县",
  10263. "五寨县",
  10264. "岢岚县",
  10265. "河曲县",
  10266. "保德县",
  10267. "偏关县"] },
  10268. {
  10269. "name": "吕梁市",
  10270. "area": [
  10271. "离石区",
  10272. "孝义市",
  10273. "汾阳市",
  10274. "文水县",
  10275. "交城县",
  10276. "兴 县",
  10277. "临 县",
  10278. "柳林县",
  10279. "石楼县",
  10280. "岚 县",
  10281. "方山县",
  10282. "中阳县",
  10283. "交口县"] },
  10284. {
  10285. "name": "晋中市",
  10286. "area": [
  10287. "榆次市",
  10288. "介休市",
  10289. "榆社县",
  10290. "左权县",
  10291. "和顺县",
  10292. "昔阳县",
  10293. "寿阳县",
  10294. "太谷县",
  10295. "祁 县",
  10296. "平遥县",
  10297. "灵石县"] },
  10298. {
  10299. "name": "临汾市",
  10300. "area": [
  10301. "临汾市",
  10302. "侯马市",
  10303. "霍州市",
  10304. "曲沃县",
  10305. "翼城县",
  10306. "襄汾县",
  10307. "洪洞县",
  10308. "古 县",
  10309. "安泽县",
  10310. "浮山县",
  10311. "吉 县",
  10312. "乡宁县",
  10313. "蒲 县",
  10314. "大宁县",
  10315. "永和县",
  10316. "隰 县",
  10317. "汾西县"] },
  10318. {
  10319. "name": "运城市",
  10320. "area": [
  10321. "运城市",
  10322. "永济市",
  10323. "河津市",
  10324. "芮城县",
  10325. "临猗县",
  10326. "万荣县",
  10327. "新绛县",
  10328. "稷山县",
  10329. "闻喜县",
  10330. "夏 县",
  10331. "绛 县",
  10332. "平陆县",
  10333. "垣曲县"] }] },
  10334. {
  10335. "name": "内蒙古",
  10336. "city": [
  10337. {
  10338. "name": "呼和浩特市",
  10339. "area": [
  10340. "新城区",
  10341. "回民区",
  10342. "玉泉区",
  10343. "郊 区",
  10344. "土默特左旗",
  10345. "托克托县",
  10346. "和林格尔县",
  10347. "清水河县",
  10348. "武川县"] },
  10349. {
  10350. "name": "包头市",
  10351. "area": [
  10352. "东河区",
  10353. "昆都伦区",
  10354. "青山区",
  10355. "石拐矿区",
  10356. "白云矿区",
  10357. "郊 区",
  10358. "土默特右旗",
  10359. "固阳县",
  10360. "达尔罕茂明安联合旗"] },
  10361. {
  10362. "name": "乌海市",
  10363. "area": [
  10364. "海勃湾区",
  10365. "海南区",
  10366. "乌达区"] },
  10367. {
  10368. "name": "赤峰市",
  10369. "area": [
  10370. "红山区",
  10371. "元宝山区",
  10372. "松山区",
  10373. "阿鲁科尔沁旗",
  10374. "巴林左旗",
  10375. "巴林右旗",
  10376. "林西县",
  10377. "克什克腾旗",
  10378. "翁牛特旗",
  10379. "喀喇沁旗",
  10380. "宁城县",
  10381. "敖汉旗"] },
  10382. {
  10383. "name": "呼伦贝尔市",
  10384. "area": [
  10385. "海拉尔市",
  10386. "满洲里市",
  10387. "扎兰屯市",
  10388. "牙克石市",
  10389. "根河市",
  10390. "额尔古纳市",
  10391. "阿荣旗",
  10392. "莫力达瓦达斡尔族自治旗",
  10393. "鄂伦春自治旗",
  10394. "鄂温克族自治旗",
  10395. "新巴尔虎右旗",
  10396. "新巴尔虎左旗",
  10397. "陈巴尔虎旗"] },
  10398. {
  10399. "name": "兴安盟",
  10400. "area": [
  10401. "乌兰浩特市",
  10402. "阿尔山市",
  10403. "科尔沁右翼前旗",
  10404. "科尔沁右翼中旗",
  10405. "扎赉特旗",
  10406. "突泉县"] },
  10407. {
  10408. "name": "通辽市",
  10409. "area": [
  10410. "科尔沁区",
  10411. "霍林郭勒市",
  10412. "科尔沁左翼中旗",
  10413. "科尔沁左翼后旗",
  10414. "开鲁县",
  10415. "库伦旗",
  10416. "奈曼旗",
  10417. "扎鲁特旗"] },
  10418. {
  10419. "name": "锡林郭勒盟",
  10420. "area": [
  10421. "二连浩特市",
  10422. "锡林浩特市",
  10423. "阿巴嘎旗",
  10424. "苏尼特左旗",
  10425. "苏尼特右旗",
  10426. "东乌珠穆沁旗",
  10427. "西乌珠穆沁旗",
  10428. "太仆寺旗",
  10429. "镶黄旗",
  10430. "正镶白旗",
  10431. "正蓝旗",
  10432. "多伦县"] },
  10433. {
  10434. "name": "乌兰察布盟",
  10435. "area": [
  10436. "集宁市",
  10437. "丰镇市",
  10438. "卓资县",
  10439. "化德县",
  10440. "商都县",
  10441. "兴和县",
  10442. "凉城县",
  10443. "察哈尔右翼前旗",
  10444. "察哈尔右翼中旗",
  10445. "察哈尔右翼后旗",
  10446. "四子王旗"] },
  10447. {
  10448. "name": "伊克昭盟",
  10449. "area": [
  10450. "东胜市",
  10451. "达拉特旗",
  10452. "准格尔旗",
  10453. "鄂托克前旗",
  10454. "鄂托克旗",
  10455. "杭锦旗",
  10456. "乌审旗",
  10457. "伊金霍洛旗"] },
  10458. {
  10459. "name": "巴彦淖尔盟",
  10460. "area": [
  10461. "临河市",
  10462. "五原县",
  10463. "磴口县",
  10464. "乌拉特前旗",
  10465. "乌拉特中旗",
  10466. "乌拉特后旗",
  10467. "杭锦后旗"] },
  10468. {
  10469. "name": "阿拉善盟",
  10470. "area": [
  10471. "阿拉善左旗",
  10472. "阿拉善右旗",
  10473. "额济纳旗"] }] },
  10474. {
  10475. "name": "辽宁省",
  10476. "city": [
  10477. {
  10478. "name": "沈阳市",
  10479. "area": [
  10480. "沈河区",
  10481. "皇姑区",
  10482. "和平区",
  10483. "大东区",
  10484. "铁西区",
  10485. "苏家屯区",
  10486. "东陵区",
  10487. "于洪区",
  10488. "新民市",
  10489. "法库县",
  10490. "辽中县",
  10491. "康平县",
  10492. "新城子区"] },
  10493. {
  10494. "name": "大连市",
  10495. "area": [
  10496. "西岗区",
  10497. "中山区",
  10498. "沙河口区",
  10499. "甘井子区",
  10500. "旅顺口区",
  10501. "金州区",
  10502. "瓦房店市",
  10503. "普兰店市",
  10504. "庄河市",
  10505. "长海县"] },
  10506. {
  10507. "name": "鞍山市",
  10508. "area": [
  10509. "铁东区",
  10510. "铁西区",
  10511. "立山区",
  10512. "千山区",
  10513. "海城市",
  10514. "台安县",
  10515. "岫岩满族自治县"] },
  10516. {
  10517. "name": "抚顺市",
  10518. "area": [
  10519. "顺城区",
  10520. "新抚区",
  10521. "东洲区",
  10522. "望花区",
  10523. "抚顺县",
  10524. "清原满族自治县",
  10525. "新宾满族自治县"] },
  10526. {
  10527. "name": "本溪市",
  10528. "area": [
  10529. "平山区",
  10530. "明山区",
  10531. "溪湖区",
  10532. "南芬区",
  10533. "本溪满族自治县",
  10534. "桓仁满族自治县"] },
  10535. {
  10536. "name": "丹东市",
  10537. "area": [
  10538. "振兴区",
  10539. "元宝区",
  10540. "振安区",
  10541. "东港市",
  10542. "凤城市",
  10543. "宽甸满族自治县"] },
  10544. {
  10545. "name": "锦州市",
  10546. "area": [
  10547. "太和区",
  10548. "古塔区",
  10549. "凌河区",
  10550. "凌海市",
  10551. "黑山县",
  10552. "义县",
  10553. "北宁市"] },
  10554. {
  10555. "name": "营口市",
  10556. "area": [
  10557. "站前区",
  10558. "西市区",
  10559. "鲅鱼圈区",
  10560. "老边区",
  10561. "大石桥市",
  10562. "盖州市"] },
  10563. {
  10564. "name": "阜新市",
  10565. "area": [
  10566. "海州区",
  10567. "新邱区",
  10568. "太平区",
  10569. "清河门区",
  10570. "细河区",
  10571. "彰武县",
  10572. "阜新蒙古族自治县"] },
  10573. {
  10574. "name": "辽阳市",
  10575. "area": [
  10576. "白塔区",
  10577. "文圣区",
  10578. "宏伟区",
  10579. "太子河区",
  10580. "弓长岭区",
  10581. "灯塔市",
  10582. "辽阳县"] },
  10583. {
  10584. "name": "盘锦",
  10585. "area": [
  10586. "双台子区",
  10587. "兴隆台区",
  10588. "盘山县",
  10589. "大洼县"] },
  10590. {
  10591. "name": "铁岭市",
  10592. "area": [
  10593. "银州区",
  10594. "清河区",
  10595. "调兵山市",
  10596. "开原市",
  10597. "铁岭县",
  10598. "昌图县",
  10599. "西丰县"] },
  10600. {
  10601. "name": "朝阳市",
  10602. "area": [
  10603. "双塔区",
  10604. "龙城区",
  10605. "凌源市",
  10606. "北票市",
  10607. "朝阳县",
  10608. "建平县",
  10609. "喀喇沁左翼蒙古族自治县"] },
  10610. {
  10611. "name": "葫芦岛市",
  10612. "area": [
  10613. "龙港区",
  10614. "南票区",
  10615. "连山区",
  10616. "兴城市",
  10617. "绥中县",
  10618. "建昌县"] }] },
  10619. {
  10620. "name": "吉林省",
  10621. "city": [
  10622. {
  10623. "name": "长春市",
  10624. "area": [
  10625. "朝阳区",
  10626. "宽城区",
  10627. "二道区",
  10628. "南关区",
  10629. "绿园区",
  10630. "双阳区",
  10631. "九台市",
  10632. "榆树市",
  10633. "德惠市",
  10634. "农安县"] },
  10635. {
  10636. "name": "吉林市",
  10637. "area": [
  10638. "船营区",
  10639. "昌邑区",
  10640. "龙潭区",
  10641. "丰满区",
  10642. "舒兰市",
  10643. "桦甸市",
  10644. "蛟河市",
  10645. "磐石市",
  10646. "永吉县"] },
  10647. {
  10648. "name": "四平",
  10649. "area": [
  10650. "铁西区",
  10651. "铁东区",
  10652. "公主岭市",
  10653. "双辽市",
  10654. "梨树县",
  10655. "伊通满族自治县"] },
  10656. {
  10657. "name": "辽源市",
  10658. "area": [
  10659. "龙山区",
  10660. "西安区",
  10661. "东辽县",
  10662. "东丰县"] },
  10663. {
  10664. "name": "通化市",
  10665. "area": [
  10666. "东昌区",
  10667. "二道江区",
  10668. "梅河口市",
  10669. "集安市",
  10670. "通化县",
  10671. "辉南县",
  10672. "柳河县"] },
  10673. {
  10674. "name": "白山市",
  10675. "area": [
  10676. "八道江区",
  10677. "江源区",
  10678. "临江市",
  10679. "靖宇县",
  10680. "抚松县",
  10681. "长白朝鲜族自治县"] },
  10682. {
  10683. "name": "松原市",
  10684. "area": [
  10685. "宁江区",
  10686. "乾安县",
  10687. "长岭县",
  10688. "扶余县",
  10689. "前郭尔罗斯蒙古族自治县"] },
  10690. {
  10691. "name": "白城市",
  10692. "area": [
  10693. "洮北区",
  10694. "大安市",
  10695. "洮南市",
  10696. "镇赉县",
  10697. "通榆县"] },
  10698. {
  10699. "name": "延边朝鲜族自治州",
  10700. "area": [
  10701. "延吉市",
  10702. "图们市",
  10703. "敦化市",
  10704. "龙井市",
  10705. "珲春市",
  10706. "和龙市",
  10707. "安图县",
  10708. "汪清县"] }] },
  10709. {
  10710. "name": "黑龙江省",
  10711. "city": [
  10712. {
  10713. "name": "哈尔滨市",
  10714. "area": [
  10715. "松北区",
  10716. "道里区",
  10717. "南岗区",
  10718. "平房区",
  10719. "香坊区",
  10720. "道外区",
  10721. "呼兰区",
  10722. "阿城区",
  10723. "双城市",
  10724. "尚志市",
  10725. "五常市",
  10726. "宾县",
  10727. "方正县",
  10728. "通河县",
  10729. "巴彦县",
  10730. "延寿县",
  10731. "木兰县",
  10732. "依兰县"] },
  10733. {
  10734. "name": "齐齐哈尔市",
  10735. "area": [
  10736. "龙沙区",
  10737. "昂昂溪区",
  10738. "铁锋区",
  10739. "建华区",
  10740. "富拉尔基区",
  10741. "碾子山区",
  10742. "梅里斯达斡尔族区",
  10743. "讷河市",
  10744. "富裕县",
  10745. "拜泉县",
  10746. "甘南县",
  10747. "依安县",
  10748. "克山县",
  10749. "泰来县",
  10750. "克东县",
  10751. "龙江县"] },
  10752. {
  10753. "name": "鹤岗市",
  10754. "area": [
  10755. "兴山区",
  10756. "工农区",
  10757. "南山区",
  10758. "兴安区",
  10759. "向阳区",
  10760. "东山区",
  10761. "萝北县",
  10762. "绥滨县"] },
  10763. {
  10764. "name": "双鸭山",
  10765. "area": [
  10766. "尖山区",
  10767. "岭东区",
  10768. "四方台区",
  10769. "宝山区",
  10770. "集贤县",
  10771. "宝清县",
  10772. "友谊县",
  10773. "饶河县"] },
  10774. {
  10775. "name": "鸡西市",
  10776. "area": [
  10777. "鸡冠区",
  10778. "恒山区",
  10779. "城子河区",
  10780. "滴道区",
  10781. "梨树区",
  10782. "麻山区",
  10783. "密山市",
  10784. "虎林市",
  10785. "鸡东县"] },
  10786. {
  10787. "name": "大庆市",
  10788. "area": [
  10789. "萨尔图区",
  10790. "红岗区",
  10791. "龙凤区",
  10792. "让胡路区",
  10793. "大同区",
  10794. "林甸县",
  10795. "肇州县",
  10796. "肇源县",
  10797. "杜尔伯特蒙古族自治县"] },
  10798. {
  10799. "name": "伊春市",
  10800. "area": [
  10801. "伊春区",
  10802. "带岭区",
  10803. "南岔区",
  10804. "金山屯区",
  10805. "西林区",
  10806. "美溪区",
  10807. "乌马河区",
  10808. "翠峦区",
  10809. "友好区",
  10810. "上甘岭区",
  10811. "五营区",
  10812. "红星区",
  10813. "新青区",
  10814. "汤旺河区",
  10815. "乌伊岭区",
  10816. "铁力市",
  10817. "嘉荫县"] },
  10818. {
  10819. "name": "牡丹江市",
  10820. "area": [
  10821. "爱民区",
  10822. "东安区",
  10823. "阳明区",
  10824. "西安区",
  10825. "绥芬河市",
  10826. "宁安市",
  10827. "海林市",
  10828. "穆棱市",
  10829. "林口县",
  10830. "东宁县"] },
  10831. {
  10832. "name": "佳木斯市",
  10833. "area": [
  10834. "向阳区",
  10835. "前进区",
  10836. "东风区",
  10837. "郊区",
  10838. "同江市",
  10839. "富锦市",
  10840. "桦川县",
  10841. "抚远县",
  10842. "桦南县",
  10843. "汤原县"] },
  10844. {
  10845. "name": "七台河市",
  10846. "area": [
  10847. "桃山区",
  10848. "新兴区",
  10849. "茄子河区",
  10850. "勃利县"] },
  10851. {
  10852. "name": "黑河市",
  10853. "area": [
  10854. "爱辉区",
  10855. "北安市",
  10856. "五大连池市",
  10857. "逊克县",
  10858. "嫩江县",
  10859. "孙吴县"] },
  10860. {
  10861. "name": "绥化市",
  10862. "area": [
  10863. "北林区",
  10864. "安达市",
  10865. "肇东市",
  10866. "海伦市",
  10867. "绥棱县",
  10868. "兰西县",
  10869. "明水县",
  10870. "青冈县",
  10871. "庆安县",
  10872. "望奎县"] },
  10873. {
  10874. "name": "大兴安岭地区",
  10875. "area": [
  10876. "呼玛县",
  10877. "塔河县",
  10878. "漠河县",
  10879. "大兴安岭辖区"] }] },
  10880. {
  10881. "name": "上海市",
  10882. "city": [
  10883. {
  10884. "name": "上海市",
  10885. "area": [
  10886. "黄浦区",
  10887. "卢湾区",
  10888. "徐汇区",
  10889. "长宁区",
  10890. "静安区",
  10891. "普陀区",
  10892. "闸北区",
  10893. "虹口区",
  10894. "杨浦区",
  10895. "宝山区",
  10896. "闵行区",
  10897. "嘉定区",
  10898. "松江区",
  10899. "金山区",
  10900. "青浦区",
  10901. "南汇区",
  10902. "奉贤区",
  10903. "浦东新区",
  10904. "崇明县"] }] },
  10905. {
  10906. "name": "江苏省",
  10907. "city": [
  10908. {
  10909. "name": "南京市",
  10910. "area": [
  10911. "玄武区",
  10912. "白下区",
  10913. "秦淮区",
  10914. "建邺区",
  10915. "鼓楼区",
  10916. "下关区",
  10917. "栖霞区",
  10918. "雨花台区",
  10919. "浦口区",
  10920. "江宁区",
  10921. "六合区",
  10922. "溧水县",
  10923. "高淳县"] },
  10924. {
  10925. "name": "苏州市",
  10926. "area": [
  10927. "金阊区",
  10928. "平江区",
  10929. "沧浪区",
  10930. "虎丘区",
  10931. "吴中区",
  10932. "相城区",
  10933. "常熟市",
  10934. "张家港市",
  10935. "昆山市",
  10936. "吴江市",
  10937. "太仓市"] },
  10938. {
  10939. "name": "无锡市",
  10940. "area": [
  10941. "崇安区",
  10942. "南长区",
  10943. "北塘区",
  10944. "滨湖区",
  10945. "锡山区",
  10946. "惠山区",
  10947. "江阴市",
  10948. "宜兴市"] },
  10949. {
  10950. "name": "常州市",
  10951. "area": [
  10952. "钟楼区",
  10953. "天宁区",
  10954. "戚墅堰区",
  10955. "新北区",
  10956. "武进区",
  10957. "金坛市",
  10958. "溧阳市"] },
  10959. {
  10960. "name": "镇江市",
  10961. "area": [
  10962. "京口区",
  10963. "润州区",
  10964. "丹徒区",
  10965. "丹阳市",
  10966. "扬中市",
  10967. "句容市"] },
  10968. {
  10969. "name": "南通市",
  10970. "area": [
  10971. "崇川区",
  10972. "港闸区",
  10973. "通州市",
  10974. "如皋市",
  10975. "海门市",
  10976. "启东市",
  10977. "海安县",
  10978. "如东县"] },
  10979. {
  10980. "name": "泰州市",
  10981. "area": [
  10982. "海陵区",
  10983. "高港区",
  10984. "姜堰市",
  10985. "泰兴市",
  10986. "靖江市",
  10987. "兴化市"] },
  10988. {
  10989. "name": "扬州市",
  10990. "area": [
  10991. "广陵区",
  10992. "维扬区",
  10993. "邗江区",
  10994. "江都市",
  10995. "仪征市",
  10996. "高邮市",
  10997. "宝应县"] },
  10998. {
  10999. "name": "盐城市",
  11000. "area": [
  11001. "亭湖区",
  11002. "盐都区",
  11003. "大丰市",
  11004. "东台市",
  11005. "建湖县",
  11006. "射阳县",
  11007. "阜宁县",
  11008. "滨海县",
  11009. "响水县"] },
  11010. {
  11011. "name": "连云港市",
  11012. "area": [
  11013. "新浦区",
  11014. "海州区",
  11015. "连云区",
  11016. "东海县",
  11017. "灌云县",
  11018. "赣榆县",
  11019. "灌南县"] },
  11020. {
  11021. "name": "徐州市",
  11022. "area": [
  11023. "云龙区",
  11024. "鼓楼区",
  11025. "九里区",
  11026. "泉山区",
  11027. "贾汪区",
  11028. "邳州市",
  11029. "新沂市",
  11030. "铜山县",
  11031. "睢宁县",
  11032. "沛县",
  11033. "丰县"] },
  11034. {
  11035. "name": "淮安市",
  11036. "area": [
  11037. "清河区",
  11038. "清浦区",
  11039. "楚州区",
  11040. "淮阴区",
  11041. "涟水县",
  11042. "洪泽县",
  11043. "金湖县",
  11044. "盱眙县"] },
  11045. {
  11046. "name": "宿迁市",
  11047. "area": [
  11048. "宿城区",
  11049. "宿豫区",
  11050. "沭阳县",
  11051. "泗阳县",
  11052. "泗洪县"] }] },
  11053. {
  11054. "name": "浙江省",
  11055. "city": [
  11056. {
  11057. "name": "杭州市",
  11058. "area": [
  11059. "拱墅区",
  11060. "西湖区",
  11061. "上城区",
  11062. "下城区",
  11063. "江干区",
  11064. "滨江区",
  11065. "余杭区",
  11066. "萧山区",
  11067. "建德市",
  11068. "富阳市",
  11069. "临安市",
  11070. "桐庐县",
  11071. "淳安县"] },
  11072. {
  11073. "name": "宁波市",
  11074. "area": [
  11075. "海曙区",
  11076. "江东区",
  11077. "江北区",
  11078. "镇海区",
  11079. "北仑区",
  11080. "鄞州区",
  11081. "余姚市",
  11082. "慈溪市",
  11083. "奉化市",
  11084. "宁海县",
  11085. "象山县"] },
  11086. {
  11087. "name": "温州市",
  11088. "area": [
  11089. "鹿城区",
  11090. "龙湾区",
  11091. "瓯海区",
  11092. "瑞安市",
  11093. "乐清市",
  11094. "永嘉县",
  11095. "洞头县",
  11096. "平阳县",
  11097. "苍南县",
  11098. "文成县",
  11099. "泰顺县"] },
  11100. {
  11101. "name": "嘉兴市",
  11102. "area": [
  11103. "秀城区",
  11104. "秀洲区",
  11105. "海宁市",
  11106. "平湖市",
  11107. "桐乡市",
  11108. "嘉善县",
  11109. "海盐县"] },
  11110. {
  11111. "name": "湖州市",
  11112. "area": [
  11113. "吴兴区",
  11114. "南浔区",
  11115. "长兴县",
  11116. "德清县",
  11117. "安吉县"] },
  11118. {
  11119. "name": "绍兴市",
  11120. "area": [
  11121. "越城区",
  11122. "诸暨市",
  11123. "上虞市",
  11124. "嵊州市",
  11125. "绍兴县",
  11126. "新昌县"] },
  11127. {
  11128. "name": "金华市",
  11129. "area": [
  11130. "婺城区",
  11131. "金东区",
  11132. "兰溪市",
  11133. "义乌市",
  11134. "东阳市",
  11135. "永康市",
  11136. "武义县",
  11137. "浦江县",
  11138. "磐安县"] },
  11139. {
  11140. "name": "衢州市",
  11141. "area": [
  11142. "柯城区",
  11143. "衢江区",
  11144. "江山市",
  11145. "龙游县",
  11146. "常山县",
  11147. "开化县"] },
  11148. {
  11149. "name": "舟山市",
  11150. "area": [
  11151. "定海区",
  11152. "普陀区",
  11153. "岱山县",
  11154. "嵊泗县"] },
  11155. {
  11156. "name": "台州市",
  11157. "area": [
  11158. "椒江区",
  11159. "黄岩区",
  11160. "路桥区",
  11161. "临海市",
  11162. "温岭市",
  11163. "玉环县",
  11164. "天台县",
  11165. "仙居县",
  11166. "三门县"] },
  11167. {
  11168. "name": "丽水市",
  11169. "area": [
  11170. "莲都区",
  11171. "龙泉市",
  11172. "缙云县",
  11173. "青田县",
  11174. "云和县",
  11175. "遂昌县",
  11176. "松阳县",
  11177. "庆元县",
  11178. "景宁畲族自治县"] }] },
  11179. {
  11180. "name": "安徽省",
  11181. "city": [
  11182. {
  11183. "name": "合肥市",
  11184. "area": [
  11185. "庐阳区",
  11186. "瑶海区",
  11187. "蜀山区",
  11188. "包河区",
  11189. "长丰县",
  11190. "肥东县",
  11191. "肥西县"] },
  11192. {
  11193. "name": "芜湖市",
  11194. "area": [
  11195. "镜湖区",
  11196. "弋江区",
  11197. "鸠江区",
  11198. "三山区",
  11199. "芜湖县",
  11200. "南陵县",
  11201. "繁昌县"] },
  11202. {
  11203. "name": "蚌埠市",
  11204. "area": [
  11205. "蚌山区",
  11206. "龙子湖区",
  11207. "禹会区",
  11208. "淮上区",
  11209. "怀远县",
  11210. "固镇县",
  11211. "五河县"] },
  11212. {
  11213. "name": "淮南市",
  11214. "area": [
  11215. "田家庵区",
  11216. "大通区",
  11217. "谢家集区",
  11218. "八公山区",
  11219. "潘集区",
  11220. "凤台县"] },
  11221. {
  11222. "name": "马鞍山市",
  11223. "area": [
  11224. "雨山区",
  11225. "花山区",
  11226. "金家庄区",
  11227. "当涂县"] },
  11228. {
  11229. "name": "淮北市",
  11230. "area": [
  11231. "相山区",
  11232. "杜集区",
  11233. "烈山区",
  11234. "濉溪县"] },
  11235. {
  11236. "name": "铜陵市",
  11237. "area": [
  11238. "铜官山区",
  11239. "狮子山区",
  11240. "郊区",
  11241. "铜陵县"] },
  11242. {
  11243. "name": "安庆市",
  11244. "area": [
  11245. "迎江区",
  11246. "大观区",
  11247. "宜秀区",
  11248. "桐城市",
  11249. "宿松县",
  11250. "枞阳县",
  11251. "太湖县",
  11252. "怀宁县",
  11253. "岳西县",
  11254. "望江县",
  11255. "潜山县"] },
  11256. {
  11257. "name": "黄山市",
  11258. "area": [
  11259. "屯溪区",
  11260. "黄山区",
  11261. "徽州区",
  11262. "休宁县",
  11263. "歙县",
  11264. "祁门县",
  11265. "黟县"] },
  11266. {
  11267. "name": "滁州市",
  11268. "area": [
  11269. "琅琊区",
  11270. "南谯区",
  11271. "天长市",
  11272. "明光市",
  11273. "全椒县",
  11274. "来安县",
  11275. "定远县",
  11276. "凤阳县"] },
  11277. {
  11278. "name": "阜阳市",
  11279. "area": [
  11280. "颍州区",
  11281. "颍东区",
  11282. "颍泉区",
  11283. "界首市",
  11284. "临泉县",
  11285. "颍上县",
  11286. "阜南县",
  11287. "太和县"] },
  11288. {
  11289. "name": "宿州市",
  11290. "area": [
  11291. "埇桥区",
  11292. "萧县",
  11293. "泗县",
  11294. "砀山县",
  11295. "灵璧县"] },
  11296. {
  11297. "name": "巢湖市",
  11298. "area": [
  11299. "居巢区",
  11300. "含山县",
  11301. "无为县",
  11302. "庐江县",
  11303. "和县"] },
  11304. {
  11305. "name": "六安市",
  11306. "area": [
  11307. "金安区",
  11308. "裕安区",
  11309. "寿县",
  11310. "霍山县",
  11311. "霍邱县",
  11312. "舒城县",
  11313. "金寨县"] },
  11314. {
  11315. "name": "亳州市",
  11316. "area": [
  11317. "谯城区",
  11318. "利辛县",
  11319. "涡阳县",
  11320. "蒙城县"] },
  11321. {
  11322. "name": "池州市",
  11323. "area": [
  11324. "贵池区",
  11325. "东至县",
  11326. "石台县",
  11327. "青阳县"] },
  11328. {
  11329. "name": "宣城市",
  11330. "area": [
  11331. "宣州区",
  11332. "宁国市",
  11333. "广德县",
  11334. "郎溪县",
  11335. "泾县",
  11336. "旌德县",
  11337. "绩溪县"] }] },
  11338. {
  11339. "name": "福建省",
  11340. "city": [
  11341. {
  11342. "name": "福州市",
  11343. "area": [
  11344. "鼓楼区",
  11345. "台江区",
  11346. "仓山区",
  11347. "马尾区",
  11348. "晋安区",
  11349. "福清市",
  11350. "长乐市",
  11351. "闽侯县",
  11352. "闽清县",
  11353. "永泰县",
  11354. "连江县",
  11355. "罗源县",
  11356. "平潭县"] },
  11357. {
  11358. "name": "厦门市",
  11359. "area": [
  11360. "思明区",
  11361. "海沧区",
  11362. "湖里区",
  11363. "集美区",
  11364. "同安区",
  11365. "翔安区"] },
  11366. {
  11367. "name": "莆田市",
  11368. "area": [
  11369. "城厢区",
  11370. "涵江区",
  11371. "荔城区",
  11372. "秀屿区",
  11373. "仙游县"] },
  11374. {
  11375. "name": "三明市",
  11376. "area": [
  11377. "梅列区",
  11378. "三元区",
  11379. "永安市",
  11380. "明溪县",
  11381. "将乐县",
  11382. "大田县",
  11383. "宁化县",
  11384. "建宁县",
  11385. "沙县",
  11386. "尤溪县",
  11387. "清流县",
  11388. "泰宁县"] },
  11389. {
  11390. "name": "泉州市",
  11391. "area": [
  11392. "鲤城区",
  11393. "丰泽区",
  11394. "洛江区",
  11395. "泉港区",
  11396. "石狮市",
  11397. "晋江市",
  11398. "南安市",
  11399. "惠安县",
  11400. "永春县",
  11401. "安溪县",
  11402. "德化县",
  11403. "金门县"] },
  11404. {
  11405. "name": "漳州市",
  11406. "area": [
  11407. "芗城区",
  11408. "龙文区",
  11409. "龙海市",
  11410. "平和县",
  11411. "南靖县",
  11412. "诏安县",
  11413. "漳浦县",
  11414. "华安县",
  11415. "东山县",
  11416. "长泰县",
  11417. "云霄县"] },
  11418. {
  11419. "name": "南平市",
  11420. "area": [
  11421. "延平区",
  11422. "建瓯市",
  11423. "邵武市",
  11424. "武夷山市",
  11425. "建阳市",
  11426. "松溪县",
  11427. "光泽县",
  11428. "顺昌县",
  11429. "浦城县",
  11430. "政和县"] },
  11431. {
  11432. "name": "龙岩市",
  11433. "area": [
  11434. "新罗区",
  11435. "漳平市",
  11436. "长汀县",
  11437. "武平县",
  11438. "上杭县",
  11439. "永定县",
  11440. "连城县"] },
  11441. {
  11442. "name": "宁德市",
  11443. "area": [
  11444. "蕉城区",
  11445. "福安市",
  11446. "福鼎市",
  11447. "寿宁县",
  11448. "霞浦县",
  11449. "柘荣县",
  11450. "屏南县",
  11451. "古田县",
  11452. "周宁县"] }] },
  11453. {
  11454. "name": "江西省",
  11455. "city": [
  11456. {
  11457. "name": "南昌市",
  11458. "area": [
  11459. "东湖区",
  11460. "西湖区",
  11461. "青云谱区",
  11462. "湾里区",
  11463. "青山湖区",
  11464. "新建县",
  11465. "南昌县",
  11466. "进贤县",
  11467. "安义县"] },
  11468. {
  11469. "name": "景德镇市",
  11470. "area": [
  11471. "珠山区",
  11472. "昌江区",
  11473. "乐平市",
  11474. "浮梁县"] },
  11475. {
  11476. "name": "萍乡市",
  11477. "area": [
  11478. "安源区",
  11479. "湘东区",
  11480. "莲花县",
  11481. "上栗县",
  11482. "芦溪县"] },
  11483. {
  11484. "name": "九江市",
  11485. "area": [
  11486. "浔阳区",
  11487. "庐山区",
  11488. "瑞昌市",
  11489. "九江县",
  11490. "星子县",
  11491. "武宁县",
  11492. "彭泽县",
  11493. "永修县",
  11494. "修水县",
  11495. "湖口县",
  11496. "德安县",
  11497. "都昌县"] },
  11498. {
  11499. "name": "新余市",
  11500. "area": [
  11501. "渝水区",
  11502. "分宜县"] },
  11503. {
  11504. "name": "鹰潭市",
  11505. "area": [
  11506. "月湖区",
  11507. "贵溪市",
  11508. "余江县"] },
  11509. {
  11510. "name": "赣州市",
  11511. "area": [
  11512. "章贡区",
  11513. "瑞金市",
  11514. "南康市",
  11515. "石城县",
  11516. "安远县",
  11517. "赣县",
  11518. "宁都县",
  11519. "寻乌县",
  11520. "兴国县",
  11521. "定南县",
  11522. "上犹县",
  11523. "于都县",
  11524. "龙南县",
  11525. "崇义县",
  11526. "信丰县",
  11527. "全南县",
  11528. "大余县",
  11529. "会昌县"] },
  11530. {
  11531. "name": "吉安市",
  11532. "area": [
  11533. "吉州区",
  11534. "青原区",
  11535. "井冈山市",
  11536. "吉安县",
  11537. "永丰县",
  11538. "永新县",
  11539. "新干县",
  11540. "泰和县",
  11541. "峡江县",
  11542. "遂川县",
  11543. "安福县",
  11544. "吉水县",
  11545. "万安县"] },
  11546. {
  11547. "name": "宜春市",
  11548. "area": [
  11549. "袁州区",
  11550. "丰城市",
  11551. "樟树市",
  11552. "高安市",
  11553. "铜鼓县",
  11554. "靖安县",
  11555. "宜丰县",
  11556. "奉新县",
  11557. "万载县",
  11558. "上高县"] },
  11559. {
  11560. "name": "抚州市",
  11561. "area": [
  11562. "临川区",
  11563. "南丰县",
  11564. "乐安县",
  11565. "金溪县",
  11566. "南城县",
  11567. "东乡县",
  11568. "资溪县",
  11569. "宜黄县",
  11570. "广昌县",
  11571. "黎川县",
  11572. "崇仁县"] },
  11573. {
  11574. "name": "上饶市",
  11575. "area": [
  11576. "信州区",
  11577. "德兴市",
  11578. "上饶县",
  11579. "广丰县",
  11580. "鄱阳县",
  11581. "婺源县",
  11582. "铅山县",
  11583. "余干县",
  11584. "横峰县",
  11585. "弋阳县",
  11586. "玉山县",
  11587. "万年县"] }] },
  11588. {
  11589. "name": "山东省",
  11590. "city": [
  11591. {
  11592. "name": "济南市",
  11593. "area": [
  11594. "市中区",
  11595. "历下区",
  11596. "天桥区",
  11597. "槐荫区",
  11598. "历城区",
  11599. "长清区",
  11600. "章丘市",
  11601. "平阴县",
  11602. "济阳县",
  11603. "商河县"] },
  11604. {
  11605. "name": "青岛市",
  11606. "area": [
  11607. "市南区",
  11608. "市北区",
  11609. "城阳区",
  11610. "四方区",
  11611. "李沧区",
  11612. "黄岛区",
  11613. "崂山区",
  11614. "胶南市",
  11615. "胶州市",
  11616. "平度市",
  11617. "莱西市",
  11618. "即墨市"] },
  11619. {
  11620. "name": "淄博市",
  11621. "area": [
  11622. "张店区",
  11623. "临淄区",
  11624. "淄川区",
  11625. "博山区",
  11626. "周村区",
  11627. "桓台县",
  11628. "高青县",
  11629. "沂源县"] },
  11630. {
  11631. "name": "枣庄市",
  11632. "area": [
  11633. "市中区",
  11634. "山亭区",
  11635. "峄城区",
  11636. "台儿庄区",
  11637. "薛城区",
  11638. "滕州市"] },
  11639. {
  11640. "name": "东营市",
  11641. "area": [
  11642. "东营区",
  11643. "河口区",
  11644. "垦利县",
  11645. "广饶县",
  11646. "利津县"] },
  11647. {
  11648. "name": "烟台市",
  11649. "area": [
  11650. "芝罘区",
  11651. "福山区",
  11652. "牟平区",
  11653. "莱山区",
  11654. "龙口市",
  11655. "莱阳市",
  11656. "莱州市",
  11657. "招远市",
  11658. "蓬莱市",
  11659. "栖霞市",
  11660. "海阳市",
  11661. "长岛县"] },
  11662. {
  11663. "name": "潍坊市",
  11664. "area": [
  11665. "潍城区",
  11666. "寒亭区",
  11667. "坊子区",
  11668. "奎文区",
  11669. "青州市",
  11670. "诸城市",
  11671. "寿光市",
  11672. "安丘市",
  11673. "高密市",
  11674. "昌邑市",
  11675. "昌乐县",
  11676. "临朐县"] },
  11677. {
  11678. "name": "济宁市",
  11679. "area": [
  11680. "市中区",
  11681. "任城区",
  11682. "曲阜市",
  11683. "兖州市",
  11684. "邹城市",
  11685. "鱼台县",
  11686. "金乡县",
  11687. "嘉祥县",
  11688. "微山县",
  11689. "汶上县",
  11690. "泗水县",
  11691. "梁山县"] },
  11692. {
  11693. "name": "泰安市",
  11694. "area": [
  11695. "泰山区",
  11696. "岱岳区",
  11697. "新泰市",
  11698. "肥城市",
  11699. "宁阳县",
  11700. "东平县"] },
  11701. {
  11702. "name": "威海市",
  11703. "area": [
  11704. "环翠区",
  11705. "乳山市",
  11706. "文登市",
  11707. "荣成市"] },
  11708. {
  11709. "name": "日照市",
  11710. "area": [
  11711. "东港区",
  11712. "岚山区",
  11713. "五莲县",
  11714. "莒县"] },
  11715. {
  11716. "name": "莱芜市",
  11717. "area": [
  11718. "莱城区",
  11719. "钢城区"] },
  11720. {
  11721. "name": "临沂市",
  11722. "area": [
  11723. "兰山区",
  11724. "罗庄区",
  11725. "河东区",
  11726. "沂南县",
  11727. "郯城县",
  11728. "沂水县",
  11729. "苍山县",
  11730. "费县",
  11731. "平邑县",
  11732. "莒南县",
  11733. "蒙阴县",
  11734. "临沭县"] },
  11735. {
  11736. "name": "德州市",
  11737. "area": [
  11738. "德城区",
  11739. "乐陵市",
  11740. "禹城市",
  11741. "陵县",
  11742. "宁津县",
  11743. "齐河县",
  11744. "武城县",
  11745. "庆云县",
  11746. "平原县",
  11747. "夏津县",
  11748. "临邑县"] },
  11749. {
  11750. "name": "聊城市",
  11751. "area": [
  11752. "东昌府区",
  11753. "临清市",
  11754. "高唐县",
  11755. "阳谷县",
  11756. "茌平县",
  11757. "莘县",
  11758. "东阿县",
  11759. "冠县"] },
  11760. {
  11761. "name": "滨州市",
  11762. "area": [
  11763. "滨城区",
  11764. "邹平县",
  11765. "沾化县",
  11766. "惠民县",
  11767. "博兴县",
  11768. "阳信县",
  11769. "无棣县"] },
  11770. {
  11771. "name": "菏泽市",
  11772. "area": [
  11773. "牡丹区",
  11774. "鄄城县",
  11775. "单县",
  11776. "郓城县",
  11777. "曹县",
  11778. "定陶县",
  11779. "巨野县",
  11780. "东明县",
  11781. "成武县"] }] },
  11782. {
  11783. "name": "河南省",
  11784. "city": [
  11785. {
  11786. "name": "郑州市",
  11787. "area": [
  11788. "中原区",
  11789. "金水区",
  11790. "二七区",
  11791. "管城回族区",
  11792. "上街区",
  11793. "惠济区",
  11794. "巩义市",
  11795. "新郑市",
  11796. "新密市",
  11797. "登封市",
  11798. "荥阳市",
  11799. "中牟县"] },
  11800. {
  11801. "name": "开封市",
  11802. "area": [
  11803. "鼓楼区",
  11804. "龙亭区",
  11805. "顺河回族区",
  11806. "禹王台区",
  11807. "金明区",
  11808. "开封县",
  11809. "尉氏县",
  11810. "兰考县",
  11811. "杞县",
  11812. "通许县"] },
  11813. {
  11814. "name": "洛阳市",
  11815. "area": [
  11816. "西工区",
  11817. "老城区",
  11818. "涧西区",
  11819. "瀍河回族区",
  11820. "洛龙区",
  11821. "吉利区",
  11822. "偃师市",
  11823. "孟津县",
  11824. "汝阳县",
  11825. "伊川县",
  11826. "洛宁县",
  11827. "嵩县",
  11828. "宜阳县",
  11829. "新安县",
  11830. "栾川县"] },
  11831. {
  11832. "name": "平顶山市",
  11833. "area": [
  11834. "新华区",
  11835. "卫东区",
  11836. "湛河区",
  11837. "石龙区",
  11838. "汝州市",
  11839. "舞钢市",
  11840. "宝丰县",
  11841. "叶县",
  11842. "郏县",
  11843. "鲁山县"] },
  11844. {
  11845. "name": "安阳市",
  11846. "area": [
  11847. "北关区",
  11848. "文峰区",
  11849. "殷都区",
  11850. "龙安区",
  11851. "林州市",
  11852. "安阳县",
  11853. "滑县",
  11854. "内黄县",
  11855. "汤阴县"] },
  11856. {
  11857. "name": "鹤壁市",
  11858. "area": [
  11859. "淇滨区",
  11860. "山城区",
  11861. "鹤山区",
  11862. "浚县",
  11863. "淇县"] },
  11864. {
  11865. "name": "新乡市",
  11866. "area": [
  11867. "卫滨区",
  11868. "红旗区",
  11869. "凤泉区",
  11870. "牧野区",
  11871. "卫辉市",
  11872. "辉县市",
  11873. "新乡县",
  11874. "获嘉县",
  11875. "原阳县",
  11876. "长垣县",
  11877. "封丘县",
  11878. "延津县"] },
  11879. {
  11880. "name": "焦作市",
  11881. "area": [
  11882. "解放区",
  11883. "中站区",
  11884. "马村区",
  11885. "山阳区",
  11886. "沁阳市",
  11887. "孟州市",
  11888. "修武县",
  11889. "温县",
  11890. "武陟县",
  11891. "博爱县"] },
  11892. {
  11893. "name": "濮阳市",
  11894. "area": [
  11895. "华龙区",
  11896. "濮阳县",
  11897. "南乐县",
  11898. "台前县",
  11899. "清丰县",
  11900. "范县"] },
  11901. {
  11902. "name": "许昌市",
  11903. "area": [
  11904. "魏都区",
  11905. "禹州市",
  11906. "长葛市",
  11907. "许昌县",
  11908. "鄢陵县",
  11909. "襄城县"] },
  11910. {
  11911. "name": "漯河市",
  11912. "area": [
  11913. "源汇区",
  11914. "郾城区",
  11915. "召陵区",
  11916. "临颍县",
  11917. "舞阳县"] },
  11918. {
  11919. "name": "三门峡市",
  11920. "area": [
  11921. "湖滨区",
  11922. "义马市",
  11923. "灵宝市",
  11924. "渑池县",
  11925. "卢氏县",
  11926. "陕县"] },
  11927. {
  11928. "name": "南阳市",
  11929. "area": [
  11930. "卧龙区",
  11931. "宛城区",
  11932. "邓州市",
  11933. "桐柏县",
  11934. "方城县",
  11935. "淅川县",
  11936. "镇平县",
  11937. "唐河县",
  11938. "南召县",
  11939. "内乡县",
  11940. "新野县",
  11941. "社旗县",
  11942. "西峡县"] },
  11943. {
  11944. "name": "商丘市",
  11945. "area": [
  11946. "梁园区",
  11947. "睢阳区",
  11948. "永城市",
  11949. "宁陵县",
  11950. "虞城县",
  11951. "民权县",
  11952. "夏邑县",
  11953. "柘城县",
  11954. "睢县"] },
  11955. {
  11956. "name": "信阳市",
  11957. "area": [
  11958. "浉河区",
  11959. "平桥区",
  11960. "潢川县",
  11961. "淮滨县",
  11962. "息县",
  11963. "新县",
  11964. "商城县",
  11965. "固始县",
  11966. "罗山县",
  11967. "光山县"] },
  11968. {
  11969. "name": "周口市",
  11970. "area": [
  11971. "川汇区",
  11972. "项城市",
  11973. "商水县",
  11974. "淮阳县",
  11975. "太康县",
  11976. "鹿邑县",
  11977. "西华县",
  11978. "扶沟县",
  11979. "沈丘县",
  11980. "郸城县"] },
  11981. {
  11982. "name": "驻马店市",
  11983. "area": [
  11984. "驿城区",
  11985. "确山县",
  11986. "新蔡县",
  11987. "上蔡县",
  11988. "西平县",
  11989. "泌阳县",
  11990. "平舆县",
  11991. "汝南县",
  11992. "遂平县",
  11993. "正阳县"] },
  11994. {
  11995. "name": "焦作市",
  11996. "area": [
  11997. "济源市"] }] },
  11998. {
  11999. "name": "湖北省",
  12000. "city": [
  12001. {
  12002. "name": "武汉市",
  12003. "area": [
  12004. "江岸区",
  12005. "武昌区",
  12006. "江汉区",
  12007. "硚口区",
  12008. "汉阳区",
  12009. "青山区",
  12010. "洪山区",
  12011. "东西湖区",
  12012. "汉南区",
  12013. "蔡甸区",
  12014. "江夏区",
  12015. "黄陂区",
  12016. "新洲区"] },
  12017. {
  12018. "name": "黄石市",
  12019. "area": [
  12020. "黄石港区",
  12021. "西塞山区",
  12022. "下陆区",
  12023. "铁山区",
  12024. "大冶市",
  12025. "阳新县"] },
  12026. {
  12027. "name": "十堰市",
  12028. "area": [
  12029. "张湾区",
  12030. "茅箭区",
  12031. "丹江口市",
  12032. "郧县",
  12033. "竹山县",
  12034. "房县",
  12035. "郧西县",
  12036. "竹溪县"] },
  12037. {
  12038. "name": "荆州市",
  12039. "area": [
  12040. "沙市区",
  12041. "荆州区",
  12042. "洪湖市",
  12043. "石首市",
  12044. "松滋市",
  12045. "监利县",
  12046. "公安县",
  12047. "江陵县"] },
  12048. {
  12049. "name": "宜昌市",
  12050. "area": [
  12051. "西陵区",
  12052. "伍家岗区",
  12053. "点军区",
  12054. "猇亭区",
  12055. "夷陵区",
  12056. "宜都市",
  12057. "当阳市",
  12058. "枝江市",
  12059. "秭归县",
  12060. "远安县",
  12061. "兴山县",
  12062. "五峰土家族自治县",
  12063. "长阳土家族自治县"] },
  12064. {
  12065. "name": "襄樊市",
  12066. "area": [
  12067. "襄城区",
  12068. "樊城区",
  12069. "襄阳区",
  12070. "老河口市",
  12071. "枣阳市",
  12072. "宜城市",
  12073. "南漳县",
  12074. "谷城县",
  12075. "保康县"] },
  12076. {
  12077. "name": "鄂州市",
  12078. "area": [
  12079. "鄂城区",
  12080. "华容区",
  12081. "梁子湖区"] },
  12082. {
  12083. "name": "荆门市",
  12084. "area": [
  12085. "东宝区",
  12086. "掇刀区",
  12087. "钟祥市",
  12088. "京山县",
  12089. "沙洋县"] },
  12090. {
  12091. "name": "孝感市",
  12092. "area": [
  12093. "孝南区",
  12094. "应城市",
  12095. "安陆市",
  12096. "汉川市",
  12097. "云梦县",
  12098. "大悟县",
  12099. "孝昌县"] },
  12100. {
  12101. "name": "黄冈市",
  12102. "area": [
  12103. "黄州区",
  12104. "麻城市",
  12105. "武穴市",
  12106. "红安县",
  12107. "罗田县",
  12108. "浠水县",
  12109. "蕲春县",
  12110. "黄梅县",
  12111. "英山县",
  12112. "团风县"] },
  12113. {
  12114. "name": "咸宁市",
  12115. "area": [
  12116. "咸安区",
  12117. "赤壁市",
  12118. "嘉鱼县",
  12119. "通山县",
  12120. "崇阳县",
  12121. "通城县"] },
  12122. {
  12123. "name": "随州市",
  12124. "area": [
  12125. "曾都区",
  12126. "广水市"] },
  12127. {
  12128. "name": "恩施土家族苗族自治州",
  12129. "area": [
  12130. "恩施市",
  12131. "利川市",
  12132. "建始县",
  12133. "来凤县",
  12134. "巴东县",
  12135. "鹤峰县",
  12136. "宣恩县",
  12137. "咸丰县"] },
  12138. {
  12139. "name": "仙桃市",
  12140. "area": [
  12141. "仙桃"] },
  12142. {
  12143. "name": "天门市",
  12144. "area": [
  12145. "天门"] },
  12146. {
  12147. "name": "潜江市",
  12148. "area": [
  12149. "潜江"] },
  12150. {
  12151. "name": "神农架林区",
  12152. "area": [
  12153. "神农架林区"] }] },
  12154. {
  12155. "name": "湖南省",
  12156. "city": [
  12157. {
  12158. "name": "长沙市",
  12159. "area": [
  12160. "岳麓区",
  12161. "芙蓉区",
  12162. "天心区",
  12163. "开福区",
  12164. "雨花区",
  12165. "浏阳市",
  12166. "长沙县",
  12167. "望城县",
  12168. "宁乡县"] },
  12169. {
  12170. "name": "株洲市",
  12171. "area": [
  12172. "天元区",
  12173. "荷塘区",
  12174. "芦淞区",
  12175. "石峰区",
  12176. "醴陵市",
  12177. "株洲县",
  12178. "炎陵县",
  12179. "茶陵县",
  12180. "攸县"] },
  12181. {
  12182. "name": "湘潭市",
  12183. "area": [
  12184. "岳塘区",
  12185. "雨湖区",
  12186. "湘乡市",
  12187. "韶山市",
  12188. "湘潭县"] },
  12189. {
  12190. "name": "衡阳市",
  12191. "area": [
  12192. "雁峰区",
  12193. "珠晖区",
  12194. "石鼓区",
  12195. "蒸湘区",
  12196. "南岳区",
  12197. "耒阳市",
  12198. "常宁市",
  12199. "衡阳县",
  12200. "衡东县",
  12201. "衡山县",
  12202. "衡南县",
  12203. "祁东县"] },
  12204. {
  12205. "name": "邵阳市",
  12206. "area": [
  12207. "双清区",
  12208. "大祥区",
  12209. "北塔区",
  12210. "武冈市",
  12211. "邵东县",
  12212. "洞口县",
  12213. "新邵县",
  12214. "绥宁县",
  12215. "新宁县",
  12216. "邵阳县",
  12217. "隆回县",
  12218. "城步苗族自治县"] },
  12219. {
  12220. "name": "岳阳市",
  12221. "area": [
  12222. "岳阳楼区",
  12223. "云溪区",
  12224. "君山区",
  12225. "临湘市",
  12226. "汨罗市",
  12227. "岳阳县",
  12228. "湘阴县",
  12229. "平江县",
  12230. "华容县"] },
  12231. {
  12232. "name": "常德市",
  12233. "area": [
  12234. "武陵区",
  12235. "鼎城区",
  12236. "津市市",
  12237. "澧县",
  12238. "临澧县",
  12239. "桃源县",
  12240. "汉寿县",
  12241. "安乡县",
  12242. "石门县"] },
  12243. {
  12244. "name": "张家界市",
  12245. "area": [
  12246. "永定区",
  12247. "武陵源区",
  12248. "慈利县",
  12249. "桑植县"] },
  12250. {
  12251. "name": "益阳市",
  12252. "area": [
  12253. "赫山区",
  12254. "资阳区",
  12255. "沅江市",
  12256. "桃江县",
  12257. "南县",
  12258. "安化县"] },
  12259. {
  12260. "name": "郴州市",
  12261. "area": [
  12262. "北湖区",
  12263. "苏仙区",
  12264. "资兴市",
  12265. "宜章县",
  12266. "汝城县",
  12267. "安仁县",
  12268. "嘉禾县",
  12269. "临武县",
  12270. "桂东县",
  12271. "永兴县",
  12272. "桂阳县"] },
  12273. {
  12274. "name": "永州市",
  12275. "area": [
  12276. "冷水滩区",
  12277. "零陵区",
  12278. "祁阳县",
  12279. "蓝山县",
  12280. "宁远县",
  12281. "新田县",
  12282. "东安县",
  12283. "江永县",
  12284. "道县",
  12285. "双牌县",
  12286. "江华瑶族自治县"] },
  12287. {
  12288. "name": "怀化市",
  12289. "area": [
  12290. "鹤城区",
  12291. "洪江市",
  12292. "会同县",
  12293. "沅陵县",
  12294. "辰溪县",
  12295. "溆浦县",
  12296. "中方县",
  12297. "新晃侗族自治县",
  12298. "芷江侗族自治县",
  12299. "通道侗族自治县",
  12300. "靖州苗族侗族自治县",
  12301. "麻阳苗族自治县"] },
  12302. {
  12303. "name": "娄底市",
  12304. "area": [
  12305. "娄星区",
  12306. "冷水江市",
  12307. "涟源市",
  12308. "新化县",
  12309. "双峰县"] },
  12310. {
  12311. "name": "湘西土家族苗族自治州",
  12312. "area": [
  12313. "吉首市",
  12314. "古丈县",
  12315. "龙山县",
  12316. "永顺县",
  12317. "凤凰县",
  12318. "泸溪县",
  12319. "保靖县",
  12320. "花垣县"] }] },
  12321. {
  12322. "name": "广东省",
  12323. "city": [
  12324. {
  12325. "name": "广州市",
  12326. "area": [
  12327. "越秀区",
  12328. "荔湾区",
  12329. "海珠区",
  12330. "天河区",
  12331. "白云区",
  12332. "黄埔区",
  12333. "番禺区",
  12334. "花都区",
  12335. "南沙区",
  12336. "萝岗区",
  12337. "增城市",
  12338. "从化市"] },
  12339. {
  12340. "name": "深圳市",
  12341. "area": [
  12342. "福田区",
  12343. "罗湖区",
  12344. "南山区",
  12345. "宝安区",
  12346. "龙岗区",
  12347. "盐田区"] },
  12348. {
  12349. "name": "东莞市",
  12350. "area": [
  12351. "莞城",
  12352. "常平",
  12353. "塘厦",
  12354. "塘厦",
  12355. "塘厦"] },
  12356. {
  12357. "name": "中山市",
  12358. "area": [
  12359. "中山"] },
  12360. {
  12361. "name": "潮州市",
  12362. "area": [
  12363. "湘桥区",
  12364. "潮安县",
  12365. "饶平县"] },
  12366. {
  12367. "name": "揭阳市",
  12368. "area": [
  12369. "榕城区",
  12370. "揭东县",
  12371. "揭西县",
  12372. "惠来县",
  12373. "普宁市"] },
  12374. {
  12375. "name": "云浮市",
  12376. "area": [
  12377. "云城区",
  12378. "新兴县",
  12379. "郁南县",
  12380. "云安县",
  12381. "罗定市"] },
  12382. {
  12383. "name": "珠海市",
  12384. "area": [
  12385. "香洲区",
  12386. "斗门区",
  12387. "金湾区"] },
  12388. {
  12389. "name": "汕头市",
  12390. "area": [
  12391. "金平区",
  12392. "濠江区",
  12393. "龙湖区",
  12394. "潮阳区",
  12395. "潮南区",
  12396. "澄海区",
  12397. "南澳县"] },
  12398. {
  12399. "name": "韶关市",
  12400. "area": [
  12401. "浈江区",
  12402. "武江区",
  12403. "曲江区",
  12404. "乐昌市",
  12405. "南雄市",
  12406. "始兴县",
  12407. "仁化县",
  12408. "翁源县",
  12409. "新丰县",
  12410. "乳源瑶族自治县"] },
  12411. {
  12412. "name": "佛山市",
  12413. "area": [
  12414. "禅城区",
  12415. "南海区",
  12416. "顺德区",
  12417. "三水区",
  12418. "高明区"] },
  12419. {
  12420. "name": "江门市",
  12421. "area": [
  12422. "蓬江区",
  12423. "江海区",
  12424. "新会区",
  12425. "恩平市",
  12426. "台山市",
  12427. "开平市",
  12428. "鹤山市"] },
  12429. {
  12430. "name": "湛江市",
  12431. "area": [
  12432. "赤坎区",
  12433. "霞山区",
  12434. "坡头区",
  12435. "麻章区",
  12436. "吴川市",
  12437. "廉江市",
  12438. "雷州市",
  12439. "遂溪县",
  12440. "徐闻县"] },
  12441. {
  12442. "name": "茂名市",
  12443. "area": [
  12444. "茂南区",
  12445. "茂港区",
  12446. "化州市",
  12447. "信宜市",
  12448. "高州市",
  12449. "电白县"] },
  12450. {
  12451. "name": "肇庆市",
  12452. "area": [
  12453. "端州区",
  12454. "鼎湖区",
  12455. "高要市",
  12456. "四会市",
  12457. "广宁县",
  12458. "怀集县",
  12459. "封开县",
  12460. "德庆县"] },
  12461. {
  12462. "name": "惠州市",
  12463. "area": [
  12464. "惠城区",
  12465. "惠阳区",
  12466. "博罗县",
  12467. "惠东县",
  12468. "龙门县"] },
  12469. {
  12470. "name": "梅州市",
  12471. "area": [
  12472. "梅江区",
  12473. "兴宁市",
  12474. "梅县",
  12475. "大埔县",
  12476. "丰顺县",
  12477. "五华县",
  12478. "平远县",
  12479. "蕉岭县"] },
  12480. {
  12481. "name": "汕尾市",
  12482. "area": [
  12483. "城区",
  12484. "陆丰市",
  12485. "海丰县",
  12486. "陆河县"] },
  12487. {
  12488. "name": "河源市",
  12489. "area": [
  12490. "源城区",
  12491. "紫金县",
  12492. "龙川县",
  12493. "连平县",
  12494. "和平县",
  12495. "东源县"] },
  12496. {
  12497. "name": "阳江市",
  12498. "area": [
  12499. "江城区",
  12500. "阳春市",
  12501. "阳西县",
  12502. "阳东县"] },
  12503. {
  12504. "name": "清远市",
  12505. "area": [
  12506. "清城区",
  12507. "英德市",
  12508. "连州市",
  12509. "佛冈县",
  12510. "阳山县",
  12511. "清新县",
  12512. "连山壮族瑶族自治县",
  12513. "连南瑶族自治县"] }] },
  12514. {
  12515. "name": "广西",
  12516. "city": [
  12517. {
  12518. "name": "南宁市",
  12519. "area": [
  12520. "青秀区",
  12521. "兴宁区",
  12522. "西乡塘区",
  12523. "良庆区",
  12524. "江南区",
  12525. "邕宁区",
  12526. "武鸣县",
  12527. "隆安县",
  12528. "马山县",
  12529. "上林县",
  12530. "宾阳县",
  12531. "横县"] },
  12532. {
  12533. "name": "柳州市",
  12534. "area": [
  12535. "城中区",
  12536. "鱼峰区",
  12537. "柳北区",
  12538. "柳南区",
  12539. "柳江县",
  12540. "柳城县",
  12541. "鹿寨县",
  12542. "融安县",
  12543. "融水苗族自治县",
  12544. "三江侗族自治县"] },
  12545. {
  12546. "name": "桂林市",
  12547. "area": [
  12548. "象山区",
  12549. "秀峰区",
  12550. "叠彩区",
  12551. "七星区",
  12552. "雁山区",
  12553. "阳朔县",
  12554. "临桂县",
  12555. "灵川县",
  12556. "全州县",
  12557. "平乐县",
  12558. "兴安县",
  12559. "灌阳县",
  12560. "荔浦县",
  12561. "资源县",
  12562. "永福县",
  12563. "龙胜各族自治县",
  12564. "恭城瑶族自治县"] },
  12565. {
  12566. "name": "梧州市",
  12567. "area": [
  12568. "万秀区",
  12569. "蝶山区",
  12570. "长洲区",
  12571. "岑溪市",
  12572. "苍梧县",
  12573. "藤县",
  12574. "蒙山县"] },
  12575. {
  12576. "name": "北海市",
  12577. "area": [
  12578. "海城区",
  12579. "银海区",
  12580. "铁山港区",
  12581. "合浦县"] },
  12582. {
  12583. "name": "防城港市",
  12584. "area": [
  12585. "港口区",
  12586. "防城区",
  12587. "东兴市",
  12588. "上思县"] },
  12589. {
  12590. "name": "钦州市",
  12591. "area": [
  12592. "钦南区",
  12593. "钦北区",
  12594. "灵山县",
  12595. "浦北县"] },
  12596. {
  12597. "name": "贵港市",
  12598. "area": [
  12599. "港北区",
  12600. "港南区",
  12601. "覃塘区",
  12602. "桂平市",
  12603. "平南县"] },
  12604. {
  12605. "name": "玉林市",
  12606. "area": [
  12607. "玉州区",
  12608. "北流市",
  12609. "容县",
  12610. "陆川县",
  12611. "博白县",
  12612. "兴业县"] },
  12613. {
  12614. "name": "百色市",
  12615. "area": [
  12616. "右江区",
  12617. "凌云县",
  12618. "平果县",
  12619. "西林县",
  12620. "乐业县",
  12621. "德保县",
  12622. "田林县",
  12623. "田阳县",
  12624. "靖西县",
  12625. "田东县",
  12626. "那坡县",
  12627. "隆林各族自治县"] },
  12628. {
  12629. "name": "贺州市",
  12630. "area": [
  12631. "八步区",
  12632. "钟山县",
  12633. "昭平县",
  12634. "富川瑶族自治县"] },
  12635. {
  12636. "name": "河池市",
  12637. "area": [
  12638. "金城江区",
  12639. "宜州市",
  12640. "天峨县",
  12641. "凤山县",
  12642. "南丹县",
  12643. "东兰县",
  12644. "都安瑶族自治县",
  12645. "罗城仫佬族自治县",
  12646. "巴马瑶族自治县",
  12647. "环江毛南族自治县",
  12648. "大化瑶族自治县"] },
  12649. {
  12650. "name": "来宾市",
  12651. "area": [
  12652. "兴宾区",
  12653. "合山市",
  12654. "象州县",
  12655. "武宣县",
  12656. "忻城县",
  12657. "金秀瑶族自治县"] },
  12658. {
  12659. "name": "崇左市",
  12660. "area": [
  12661. "江州区",
  12662. "凭祥市",
  12663. "宁明县",
  12664. "扶绥县",
  12665. "龙州县",
  12666. "大新县",
  12667. "天等县"] }] },
  12668. {
  12669. "name": "海南省",
  12670. "city": [
  12671. {
  12672. "name": "海口市",
  12673. "area": [
  12674. "龙华区",
  12675. "秀英区",
  12676. "琼山区",
  12677. "美兰区"] },
  12678. {
  12679. "name": "三亚市",
  12680. "area": [
  12681. "三亚市"] },
  12682. {
  12683. "name": "五指山市",
  12684. "area": [
  12685. "五指山"] },
  12686. {
  12687. "name": "琼海市",
  12688. "area": [
  12689. "琼海"] },
  12690. {
  12691. "name": "儋州市",
  12692. "area": [
  12693. "儋州"] },
  12694. {
  12695. "name": "文昌市",
  12696. "area": [
  12697. "文昌"] },
  12698. {
  12699. "name": "万宁市",
  12700. "area": [
  12701. "万宁"] },
  12702. {
  12703. "name": "东方市",
  12704. "area": [
  12705. "东方"] },
  12706. {
  12707. "name": "澄迈县",
  12708. "area": [
  12709. "澄迈县"] },
  12710. {
  12711. "name": "定安县",
  12712. "area": [
  12713. "定安县"] },
  12714. {
  12715. "name": "屯昌县",
  12716. "area": [
  12717. "屯昌县"] },
  12718. {
  12719. "name": "临高县",
  12720. "area": [
  12721. "临高县"] },
  12722. {
  12723. "name": "白沙黎族自治县",
  12724. "area": [
  12725. "白沙黎族自治县"] },
  12726. {
  12727. "name": "昌江黎族自治县",
  12728. "area": [
  12729. "昌江黎族自治县"] },
  12730. {
  12731. "name": "乐东黎族自治县",
  12732. "area": [
  12733. "乐东黎族自治县"] },
  12734. {
  12735. "name": "陵水黎族自治县",
  12736. "area": [
  12737. "陵水黎族自治县"] },
  12738. {
  12739. "name": "保亭黎族苗族自治县",
  12740. "area": [
  12741. "保亭黎族苗族自治县"] },
  12742. {
  12743. "name": "琼中黎族苗族自治县",
  12744. "area": [
  12745. "琼中黎族苗族自治县"] }] },
  12746. {
  12747. "name": "重庆市",
  12748. "city": [
  12749. {
  12750. "name": "重庆市",
  12751. "area": [
  12752. "渝中区",
  12753. "大渡口区",
  12754. "江北区",
  12755. "南岸区",
  12756. "北碚区",
  12757. "渝北区",
  12758. "巴南区",
  12759. "长寿区",
  12760. "双桥区",
  12761. "沙坪坝区",
  12762. "万盛区",
  12763. "万州区",
  12764. "涪陵区",
  12765. "黔江区",
  12766. "永川区",
  12767. "合川区",
  12768. "江津区",
  12769. "九龙坡区",
  12770. "南川区",
  12771. "綦江县",
  12772. "潼南县",
  12773. "荣昌县",
  12774. "璧山县",
  12775. "大足县",
  12776. "铜梁县",
  12777. "梁平县",
  12778. "开县",
  12779. "忠县",
  12780. "城口县",
  12781. "垫江县",
  12782. "武隆县",
  12783. "丰都县",
  12784. "奉节县",
  12785. "云阳县",
  12786. "巫溪县",
  12787. "巫山县",
  12788. "石柱土家族自治县",
  12789. "秀山土家族苗族自治县",
  12790. "酉阳土家族苗族自治县",
  12791. "彭水苗族土家族自治县"] }] },
  12792. {
  12793. "name": "四川省",
  12794. "city": [
  12795. {
  12796. "name": "成都市",
  12797. "area": [
  12798. "青羊区",
  12799. "锦江区",
  12800. "金牛区",
  12801. "武侯区",
  12802. "成华区",
  12803. "龙泉驿区",
  12804. "青白江区",
  12805. "新都区",
  12806. "温江区",
  12807. "都江堰市",
  12808. "彭州市",
  12809. "邛崃市",
  12810. "崇州市",
  12811. "金堂县",
  12812. "郫县",
  12813. "新津县",
  12814. "双流县",
  12815. "蒲江县",
  12816. "大邑县"] },
  12817. {
  12818. "name": "自贡市",
  12819. "area": [
  12820. "大安区",
  12821. "自流井区",
  12822. "贡井区",
  12823. "沿滩区",
  12824. "荣县",
  12825. "富顺县"] },
  12826. {
  12827. "name": "攀枝花市",
  12828. "area": [
  12829. "仁和区",
  12830. "米易县",
  12831. "盐边县",
  12832. "东区",
  12833. "西区"] },
  12834. {
  12835. "name": "泸州市",
  12836. "area": [
  12837. "江阳区",
  12838. "纳溪区",
  12839. "龙马潭区",
  12840. "泸县",
  12841. "合江县",
  12842. "叙永县",
  12843. "古蔺县"] },
  12844. {
  12845. "name": "德阳市",
  12846. "area": [
  12847. "旌阳区",
  12848. "广汉市",
  12849. "什邡市",
  12850. "绵竹市",
  12851. "罗江县",
  12852. "中江县"] },
  12853. {
  12854. "name": "绵阳市",
  12855. "area": [
  12856. "涪城区",
  12857. "游仙区",
  12858. "江油市",
  12859. "盐亭县",
  12860. "三台县",
  12861. "平武县",
  12862. "安县",
  12863. "梓潼县",
  12864. "北川羌族自治县"] },
  12865. {
  12866. "name": "广元市",
  12867. "area": [
  12868. "元坝区",
  12869. "朝天区",
  12870. "青川县",
  12871. "旺苍县",
  12872. "剑阁县",
  12873. "苍溪县",
  12874. "市中区"] },
  12875. {
  12876. "name": "遂宁市",
  12877. "area": [
  12878. "船山区",
  12879. "安居区",
  12880. "射洪县",
  12881. "蓬溪县",
  12882. "大英县"] },
  12883. {
  12884. "name": "内江市",
  12885. "area": [
  12886. "市中区",
  12887. "东兴区",
  12888. "资中县",
  12889. "隆昌县",
  12890. "威远县"] },
  12891. {
  12892. "name": "乐山市",
  12893. "area": [
  12894. "市中区",
  12895. "五通桥区",
  12896. "沙湾区",
  12897. "金口河区",
  12898. "峨眉山市",
  12899. "夹江县",
  12900. "井研县",
  12901. "犍为县",
  12902. "沐川县",
  12903. "马边彝族自治县",
  12904. "峨边彝族自治县"] },
  12905. {
  12906. "name": "南充",
  12907. "area": [
  12908. "顺庆区",
  12909. "高坪区",
  12910. "嘉陵区",
  12911. "阆中市",
  12912. "营山县",
  12913. "蓬安县",
  12914. "仪陇县",
  12915. "南部县",
  12916. "西充县"] },
  12917. {
  12918. "name": "眉山市",
  12919. "area": [
  12920. "东坡区",
  12921. "仁寿县",
  12922. "彭山县",
  12923. "洪雅县",
  12924. "丹棱县",
  12925. "青神县"] },
  12926. {
  12927. "name": "宜宾市",
  12928. "area": [
  12929. "翠屏区",
  12930. "宜宾县",
  12931. "兴文县",
  12932. "南溪县",
  12933. "珙县",
  12934. "长宁县",
  12935. "高县",
  12936. "江安县",
  12937. "筠连县",
  12938. "屏山县"] },
  12939. {
  12940. "name": "广安市",
  12941. "area": [
  12942. "广安区",
  12943. "华蓥市",
  12944. "岳池县",
  12945. "邻水县",
  12946. "武胜县"] },
  12947. {
  12948. "name": "达州市",
  12949. "area": [
  12950. "通川区",
  12951. "万源市",
  12952. "达县",
  12953. "渠县",
  12954. "宣汉县",
  12955. "开江县",
  12956. "大竹县"] },
  12957. {
  12958. "name": "雅安市",
  12959. "area": [
  12960. "雨城区",
  12961. "芦山县",
  12962. "石棉县",
  12963. "名山县",
  12964. "天全县",
  12965. "荥经县",
  12966. "宝兴县",
  12967. "汉源县"] },
  12968. {
  12969. "name": "巴中市",
  12970. "area": [
  12971. "巴州区",
  12972. "南江县",
  12973. "平昌县",
  12974. "通江县"] },
  12975. {
  12976. "name": "资阳市",
  12977. "area": [
  12978. "雁江区",
  12979. "简阳市",
  12980. "安岳县",
  12981. "乐至县"] },
  12982. {
  12983. "name": "阿坝藏族羌族自治州",
  12984. "area": [
  12985. "马尔康县",
  12986. "九寨沟县",
  12987. "红原县",
  12988. "汶川县",
  12989. "阿坝县",
  12990. "理县",
  12991. "若尔盖县",
  12992. "小金县",
  12993. "黑水县",
  12994. "金川县",
  12995. "松潘县",
  12996. "壤塘县",
  12997. "茂县"] },
  12998. {
  12999. "name": "甘孜藏族自治州",
  13000. "area": [
  13001. "康定县",
  13002. "丹巴县",
  13003. "炉霍县",
  13004. "九龙县",
  13005. "甘孜县",
  13006. "雅江县",
  13007. "新龙县",
  13008. "道孚县",
  13009. "白玉县",
  13010. "理塘县",
  13011. "德格县",
  13012. "乡城县",
  13013. "石渠县",
  13014. "稻城县",
  13015. "色达县",
  13016. "巴塘县",
  13017. "泸定县",
  13018. "得荣县"] },
  13019. {
  13020. "name": "凉山彝族自治州",
  13021. "area": [
  13022. "西昌市",
  13023. "美姑县",
  13024. "昭觉县",
  13025. "金阳县",
  13026. "甘洛县",
  13027. "布拖县",
  13028. "雷波县",
  13029. "普格县",
  13030. "宁南县",
  13031. "喜德县",
  13032. "会东县",
  13033. "越西县",
  13034. "会理县",
  13035. "盐源县",
  13036. "德昌县",
  13037. "冕宁县",
  13038. "木里藏族自治县"] }] },
  13039. {
  13040. "name": "贵州省",
  13041. "city": [
  13042. {
  13043. "name": "贵阳市",
  13044. "area": [
  13045. "南明区",
  13046. "云岩区",
  13047. "花溪区",
  13048. "乌当区",
  13049. "白云区",
  13050. "小河区",
  13051. "清镇市",
  13052. "开阳县",
  13053. "修文县",
  13054. "息烽县"] },
  13055. {
  13056. "name": "六盘水市",
  13057. "area": [
  13058. "钟山区",
  13059. "水城县",
  13060. "盘县",
  13061. "六枝特区"] },
  13062. {
  13063. "name": "遵义市",
  13064. "area": [
  13065. "红花岗区",
  13066. "汇川区",
  13067. "赤水市",
  13068. "仁怀市",
  13069. "遵义县",
  13070. "绥阳县",
  13071. "桐梓县",
  13072. "习水县",
  13073. "凤冈县",
  13074. "正安县",
  13075. "余庆县",
  13076. "湄潭县",
  13077. "道真仡佬族苗族自治县",
  13078. "务川仡佬族苗族自治县"] },
  13079. {
  13080. "name": "安顺市",
  13081. "area": [
  13082. "西秀区",
  13083. "普定县",
  13084. "平坝县",
  13085. "镇宁布依族苗族自治县",
  13086. "紫云苗族布依族自治县",
  13087. "关岭布依族苗族自治县"] },
  13088. {
  13089. "name": "铜仁地区",
  13090. "area": [
  13091. "铜仁市",
  13092. "德江县",
  13093. "江口县",
  13094. "思南县",
  13095. "石阡县",
  13096. "玉屏侗族自治县",
  13097. "松桃苗族自治县",
  13098. "印江土家族苗族自治县",
  13099. "沿河土家族自治县",
  13100. "万山特区"] },
  13101. {
  13102. "name": "毕节地区",
  13103. "area": [
  13104. "毕节市",
  13105. "黔西县",
  13106. "大方县",
  13107. "织金县",
  13108. "金沙县",
  13109. "赫章县",
  13110. "纳雍县",
  13111. "威宁彝族回族苗族自治县"] },
  13112. {
  13113. "name": "黔西南布依族苗族自治州",
  13114. "area": [
  13115. "兴义市",
  13116. "望谟县",
  13117. "兴仁县",
  13118. "普安县",
  13119. "册亨县",
  13120. "晴隆县",
  13121. "贞丰县",
  13122. "安龙县"] },
  13123. {
  13124. "name": "黔东南苗族侗族自治州",
  13125. "area": [
  13126. "凯里市",
  13127. "施秉县",
  13128. "从江县",
  13129. "锦屏县",
  13130. "镇远县",
  13131. "麻江县",
  13132. "台江县",
  13133. "天柱县",
  13134. "黄平县",
  13135. "榕江县",
  13136. "剑河县",
  13137. "三穗县",
  13138. "雷山县",
  13139. "黎平县",
  13140. "岑巩县",
  13141. "丹寨县"] },
  13142. {
  13143. "name": "黔南布依族苗族自治州",
  13144. "area": [
  13145. "都匀市",
  13146. "福泉市",
  13147. "贵定县",
  13148. "惠水县",
  13149. "罗甸县",
  13150. "瓮安县",
  13151. "荔波县",
  13152. "龙里县",
  13153. "平塘县",
  13154. "长顺县",
  13155. "独山县",
  13156. "三都水族自治县"] }] },
  13157. {
  13158. "name": "云南省",
  13159. "city": [
  13160. {
  13161. "name": "昆明市",
  13162. "area": [
  13163. "盘龙区",
  13164. "五华区",
  13165. "官渡区",
  13166. "西山区",
  13167. "东川区",
  13168. "安宁市",
  13169. "呈贡县",
  13170. "晋宁县",
  13171. "富民县",
  13172. "宜良县",
  13173. "嵩明县",
  13174. "石林彝族自治县",
  13175. "禄劝彝族苗族自治县",
  13176. "寻甸回族彝族自治县"] },
  13177. {
  13178. "name": "曲靖市",
  13179. "area": [
  13180. "麒麟区",
  13181. "宣威市",
  13182. "马龙县",
  13183. "沾益县",
  13184. "富源县",
  13185. "罗平县",
  13186. "师宗县",
  13187. "陆良县",
  13188. "会泽县"] },
  13189. {
  13190. "name": "玉溪市",
  13191. "area": [
  13192. "红塔区",
  13193. "江川县",
  13194. "澄江县",
  13195. "通海县",
  13196. "华宁县",
  13197. "易门县",
  13198. "峨山彝族自治县",
  13199. "新平彝族傣族自治县",
  13200. "元江哈尼族彝族傣族自治县"] },
  13201. {
  13202. "name": "保山市",
  13203. "area": [
  13204. "隆阳区",
  13205. "施甸县",
  13206. "腾冲县",
  13207. "龙陵县",
  13208. "昌宁县"] },
  13209. {
  13210. "name": "昭通市",
  13211. "area": [
  13212. "昭阳区",
  13213. "鲁甸县",
  13214. "巧家县",
  13215. "盐津县",
  13216. "大关县",
  13217. "永善县",
  13218. "绥江县",
  13219. "镇雄县",
  13220. "彝良县",
  13221. "威信县",
  13222. "水富县"] },
  13223. {
  13224. "name": "丽江市",
  13225. "area": [
  13226. "古城区",
  13227. "永胜县",
  13228. "华坪县",
  13229. "玉龙纳西族自治县",
  13230. "宁蒗彝族自治县"] },
  13231. {
  13232. "name": "普洱市",
  13233. "area": [
  13234. "思茅区",
  13235. "普洱哈尼族彝族自治县",
  13236. "墨江哈尼族自治县",
  13237. "景东彝族自治县",
  13238. "景谷傣族彝族自治县",
  13239. "镇沅彝族哈尼族拉祜族自治县",
  13240. "江城哈尼族彝族自治县",
  13241. "孟连傣族拉祜族佤族自治县",
  13242. "澜沧拉祜族自治县",
  13243. "西盟佤族自治县"] },
  13244. {
  13245. "name": "临沧市",
  13246. "area": [
  13247. "临翔区",
  13248. "凤庆县",
  13249. "云县",
  13250. "永德县",
  13251. "镇康县",
  13252. "双江拉祜族佤族布朗族傣族自治县",
  13253. "耿马傣族佤族自治县",
  13254. "沧源佤族自治县"] },
  13255. {
  13256. "name": "德宏傣族景颇族自治州",
  13257. "area": [
  13258. "潞西市",
  13259. "瑞丽市",
  13260. "梁河县",
  13261. "盈江县",
  13262. "陇川县"] },
  13263. {
  13264. "name": "怒江傈僳族自治州",
  13265. "area": [
  13266. "泸水县",
  13267. "福贡县",
  13268. "贡山独龙族怒族自治县",
  13269. "兰坪白族普米族自治县"] },
  13270. {
  13271. "name": "迪庆藏族自治州",
  13272. "area": [
  13273. "香格里拉县",
  13274. "德钦县",
  13275. "维西傈僳族自治县"] },
  13276. {
  13277. "name": "大理白族自治州",
  13278. "area": [
  13279. "大理市",
  13280. "祥云县",
  13281. "宾川县",
  13282. "弥渡县",
  13283. "永平县",
  13284. "云龙县",
  13285. "洱源县",
  13286. "剑川县",
  13287. "鹤庆县",
  13288. "漾濞彝族自治县",
  13289. "南涧彝族自治县",
  13290. "巍山彝族回族自治县"] },
  13291. {
  13292. "name": "楚雄彝族自治州",
  13293. "area": [
  13294. "楚雄市",
  13295. "双柏县",
  13296. "牟定县",
  13297. "南华县",
  13298. "姚安县",
  13299. "大姚县",
  13300. "永仁县",
  13301. "元谋县",
  13302. "武定县",
  13303. "禄丰县"] },
  13304. {
  13305. "name": "红河哈尼族彝族自治州",
  13306. "area": [
  13307. "蒙自县",
  13308. "个旧市",
  13309. "开远市",
  13310. "绿春县",
  13311. "建水县",
  13312. "石屏县",
  13313. "弥勒县",
  13314. "泸西县",
  13315. "元阳县",
  13316. "红河县",
  13317. "金平苗族瑶族傣族自治县",
  13318. "河口瑶族自治县",
  13319. "屏边苗族自治县"] },
  13320. {
  13321. "name": "文山壮族苗族自治州",
  13322. "area": [
  13323. "文山县",
  13324. "砚山县",
  13325. "西畴县",
  13326. "麻栗坡县",
  13327. "马关县",
  13328. "丘北县",
  13329. "广南县",
  13330. "富宁县"] },
  13331. {
  13332. "name": "西双版纳傣族自治州",
  13333. "area": [
  13334. "景洪市",
  13335. "勐海县",
  13336. "勐腊县"] }] },
  13337. {
  13338. "name": "西藏",
  13339. "city": [
  13340. {
  13341. "name": "拉萨市",
  13342. "area": [
  13343. "城关区",
  13344. "林周县",
  13345. "当雄县",
  13346. "尼木县",
  13347. "曲水县",
  13348. "堆龙德庆县",
  13349. "达孜县",
  13350. "墨竹工卡县"] },
  13351. {
  13352. "name": "那曲地区",
  13353. "area": [
  13354. "那曲县",
  13355. "嘉黎县",
  13356. "比如县",
  13357. "聂荣县",
  13358. "安多县",
  13359. "申扎县",
  13360. "索县",
  13361. "班戈县",
  13362. "巴青县",
  13363. "尼玛县"] },
  13364. {
  13365. "name": "昌都地区",
  13366. "area": [
  13367. "昌都县",
  13368. "江达县",
  13369. "贡觉县",
  13370. "类乌齐县",
  13371. "丁青县",
  13372. "察雅县",
  13373. "八宿县",
  13374. "左贡县",
  13375. "芒康县",
  13376. "洛隆县",
  13377. "边坝县"] },
  13378. {
  13379. "name": "林芝地区",
  13380. "area": [
  13381. "林芝县",
  13382. "工布江达县",
  13383. "米林县",
  13384. "墨脱县",
  13385. "波密县",
  13386. "察隅县",
  13387. "朗县"] },
  13388. {
  13389. "name": "山南地区",
  13390. "area": [
  13391. "乃东县",
  13392. "扎囊县",
  13393. "贡嘎县",
  13394. "桑日县",
  13395. "琼结县",
  13396. "曲松县",
  13397. "措美县",
  13398. "洛扎县",
  13399. "加查县",
  13400. "隆子县",
  13401. "错那县",
  13402. "浪卡子县"] },
  13403. {
  13404. "name": "日喀则地区",
  13405. "area": [
  13406. "日喀则市",
  13407. "南木林县",
  13408. "江孜县",
  13409. "定日县",
  13410. "萨迦县",
  13411. "拉孜县",
  13412. "昂仁县",
  13413. "谢通门县",
  13414. "白朗县",
  13415. "仁布县",
  13416. "康马县",
  13417. "定结县",
  13418. "仲巴县",
  13419. "亚东县",
  13420. "吉隆县",
  13421. "聂拉木县",
  13422. "萨嘎县",
  13423. "岗巴县"] },
  13424. {
  13425. "name": "阿里地区",
  13426. "area": [
  13427. "噶尔县",
  13428. "普兰县",
  13429. "札达县",
  13430. "日土县",
  13431. "革吉县",
  13432. "改则县",
  13433. "措勤县"] }] },
  13434. {
  13435. "name": "陕西省",
  13436. "city": [
  13437. {
  13438. "name": "西安市",
  13439. "area": [
  13440. "莲湖区",
  13441. "新城区",
  13442. "碑林区",
  13443. "雁塔区",
  13444. "灞桥区",
  13445. "未央区",
  13446. "阎良区",
  13447. "临潼区",
  13448. "长安区",
  13449. "高陵县",
  13450. "蓝田县",
  13451. "户县",
  13452. "周至县"] },
  13453. {
  13454. "name": "铜川市",
  13455. "area": [
  13456. "耀州区",
  13457. "王益区",
  13458. "印台区",
  13459. "宜君县"] },
  13460. {
  13461. "name": "宝鸡市",
  13462. "area": [
  13463. "渭滨区",
  13464. "金台区",
  13465. "陈仓区",
  13466. "岐山县",
  13467. "凤翔县",
  13468. "陇县",
  13469. "太白县",
  13470. "麟游县",
  13471. "扶风县",
  13472. "千阳县",
  13473. "眉县",
  13474. "凤县"] },
  13475. {
  13476. "name": "咸阳市",
  13477. "area": [
  13478. "秦都区",
  13479. "渭城区",
  13480. "杨陵区",
  13481. "兴平市",
  13482. "礼泉县",
  13483. "泾阳县",
  13484. "永寿县",
  13485. "三原县",
  13486. "彬县",
  13487. "旬邑县",
  13488. "长武县",
  13489. "乾县",
  13490. "武功县",
  13491. "淳化县"] },
  13492. {
  13493. "name": "渭南市",
  13494. "area": [
  13495. "临渭区",
  13496. "韩城市",
  13497. "华阴市",
  13498. "蒲城县",
  13499. "潼关县",
  13500. "白水县",
  13501. "澄城县",
  13502. "华县",
  13503. "合阳县",
  13504. "富平县",
  13505. "大荔县"] },
  13506. {
  13507. "name": "延安市",
  13508. "area": [
  13509. "宝塔区",
  13510. "安塞县",
  13511. "洛川县",
  13512. "子长县",
  13513. "黄陵县",
  13514. "延川县",
  13515. "富县",
  13516. "延长县",
  13517. "甘泉县",
  13518. "宜川县",
  13519. "志丹县",
  13520. "黄龙县",
  13521. "吴起县"] },
  13522. {
  13523. "name": "汉中市",
  13524. "area": [
  13525. "汉台区",
  13526. "留坝县",
  13527. "镇巴县",
  13528. "城固县",
  13529. "南郑县",
  13530. "洋县",
  13531. "宁强县",
  13532. "佛坪县",
  13533. "勉县",
  13534. "西乡县",
  13535. "略阳县"] },
  13536. {
  13537. "name": "榆林市",
  13538. "area": [
  13539. "榆阳区",
  13540. "清涧县",
  13541. "绥德县",
  13542. "神木县",
  13543. "佳县",
  13544. "府谷县",
  13545. "子洲县",
  13546. "靖边县",
  13547. "横山县",
  13548. "米脂县",
  13549. "吴堡县",
  13550. "定边县"] },
  13551. {
  13552. "name": "安康市",
  13553. "area": [
  13554. "汉滨区",
  13555. "紫阳县",
  13556. "岚皋县",
  13557. "旬阳县",
  13558. "镇坪县",
  13559. "平利县",
  13560. "石泉县",
  13561. "宁陕县",
  13562. "白河县",
  13563. "汉阴县"] },
  13564. {
  13565. "name": "商洛市",
  13566. "area": [
  13567. "商州区",
  13568. "镇安县",
  13569. "山阳县",
  13570. "洛南县",
  13571. "商南县",
  13572. "丹凤县",
  13573. "柞水县"] }] },
  13574. {
  13575. "name": "甘肃省",
  13576. "city": [
  13577. {
  13578. "name": "兰州市",
  13579. "area": [
  13580. "城关区",
  13581. "七里河区",
  13582. "西固区",
  13583. "安宁区",
  13584. "红古区",
  13585. "永登县",
  13586. "皋兰县",
  13587. "榆中县"] },
  13588. {
  13589. "name": "嘉峪关市",
  13590. "area": [
  13591. "嘉峪关市"] },
  13592. {
  13593. "name": "金昌市",
  13594. "area": [
  13595. "金川区",
  13596. "永昌县"] },
  13597. {
  13598. "name": "白银市",
  13599. "area": [
  13600. "白银区",
  13601. "平川区",
  13602. "靖远县",
  13603. "会宁县",
  13604. "景泰县"] },
  13605. {
  13606. "name": "天水市",
  13607. "area": [
  13608. "清水县",
  13609. "秦安县",
  13610. "甘谷县",
  13611. "武山县",
  13612. "张家川回族自治县",
  13613. "北道区",
  13614. "秦城区"] },
  13615. {
  13616. "name": "武威市",
  13617. "area": [
  13618. "凉州区",
  13619. "民勤县",
  13620. "古浪县",
  13621. "天祝藏族自治县"] },
  13622. {
  13623. "name": "酒泉市",
  13624. "area": [
  13625. "肃州区",
  13626. "玉门市",
  13627. "敦煌市",
  13628. "金塔县",
  13629. "肃北蒙古族自治县",
  13630. "阿克塞哈萨克族自治县",
  13631. "安西县"] },
  13632. {
  13633. "name": "张掖市",
  13634. "area": [
  13635. "甘州区",
  13636. "民乐县",
  13637. "临泽县",
  13638. "高台县",
  13639. "山丹县",
  13640. "肃南裕固族自治县"] },
  13641. {
  13642. "name": "庆阳市",
  13643. "area": [
  13644. "西峰区",
  13645. "庆城县",
  13646. "环县",
  13647. "华池县",
  13648. "合水县",
  13649. "正宁县",
  13650. "宁县",
  13651. "镇原县"] },
  13652. {
  13653. "name": "平凉市",
  13654. "area": [
  13655. "崆峒区",
  13656. "泾川县",
  13657. "灵台县",
  13658. "崇信县",
  13659. "华亭县",
  13660. "庄浪县",
  13661. "静宁县"] },
  13662. {
  13663. "name": "定西市",
  13664. "area": [
  13665. "安定区",
  13666. "通渭县",
  13667. "临洮县",
  13668. "漳县",
  13669. "岷县",
  13670. "渭源县",
  13671. "陇西县"] },
  13672. {
  13673. "name": "陇南市",
  13674. "area": [
  13675. "武都区",
  13676. "成县",
  13677. "宕昌县",
  13678. "康县",
  13679. "文县",
  13680. "西和县",
  13681. "礼县",
  13682. "两当县",
  13683. "徽县"] },
  13684. {
  13685. "name": "临夏回族自治州",
  13686. "area": [
  13687. "临夏市",
  13688. "临夏县",
  13689. "康乐县",
  13690. "永靖县",
  13691. "广河县",
  13692. "和政县",
  13693. "东乡族自治县",
  13694. "积石山保安族东乡族撒拉族自治县"] },
  13695. {
  13696. "name": "甘南藏族自治州",
  13697. "area": [
  13698. "合作市",
  13699. "临潭县",
  13700. "卓尼县",
  13701. "舟曲县",
  13702. "迭部县",
  13703. "玛曲县",
  13704. "碌曲县",
  13705. "夏河县"] }] },
  13706. {
  13707. "name": "青海省",
  13708. "city": [
  13709. {
  13710. "name": "西宁市",
  13711. "area": [
  13712. "城中区",
  13713. "城东区",
  13714. "城西区",
  13715. "城北区",
  13716. "湟源县",
  13717. "湟中县",
  13718. "大通回族土族自治县"] },
  13719. {
  13720. "name": "海东地区",
  13721. "area": [
  13722. "平安县",
  13723. "乐都县",
  13724. "民和回族土族自治县",
  13725. "互助土族自治县",
  13726. "化隆回族自治县",
  13727. "循化撒拉族自治县"] },
  13728. {
  13729. "name": "海北藏族自治州",
  13730. "area": [
  13731. "海晏县",
  13732. "祁连县",
  13733. "刚察县",
  13734. "门源回族自治县"] },
  13735. {
  13736. "name": "海南藏族自治州",
  13737. "area": [
  13738. "共和县",
  13739. "同德县",
  13740. "贵德县",
  13741. "兴海县",
  13742. "贵南县"] },
  13743. {
  13744. "name": "黄南藏族自治州",
  13745. "area": [
  13746. "同仁县",
  13747. "尖扎县",
  13748. "泽库县",
  13749. "河南蒙古族自治县"] },
  13750. {
  13751. "name": "果洛藏族自治州",
  13752. "area": [
  13753. "玛沁县",
  13754. "班玛县",
  13755. "甘德县",
  13756. "达日县",
  13757. "久治县",
  13758. "玛多县"] },
  13759. {
  13760. "name": "玉树藏族自治州",
  13761. "area": [
  13762. "玉树县",
  13763. "杂多县",
  13764. "称多县",
  13765. "治多县",
  13766. "囊谦县",
  13767. "曲麻莱县"] },
  13768. {
  13769. "name": "海西蒙古族藏族自治州",
  13770. "area": [
  13771. "德令哈市",
  13772. "格尔木市",
  13773. "乌兰县",
  13774. "都兰县",
  13775. "天峻县"] }] },
  13776. {
  13777. "name": "宁夏",
  13778. "city": [
  13779. {
  13780. "name": "银川市",
  13781. "area": [
  13782. "兴庆区",
  13783. "西夏区",
  13784. "金凤区",
  13785. "灵武市",
  13786. "永宁县",
  13787. "贺兰县"] },
  13788. {
  13789. "name": "石嘴山市",
  13790. "area": [
  13791. "大武口区",
  13792. "惠农区",
  13793. "平罗县"] },
  13794. {
  13795. "name": "吴忠市",
  13796. "area": [
  13797. "利通区",
  13798. "青铜峡市",
  13799. "盐池县",
  13800. "同心县"] },
  13801. {
  13802. "name": "固原市",
  13803. "area": [
  13804. "原州区",
  13805. "西吉县",
  13806. "隆德县",
  13807. "泾源县",
  13808. "彭阳县"] },
  13809. {
  13810. "name": "中卫市",
  13811. "area": [
  13812. "沙坡头区",
  13813. "中宁县",
  13814. "海原县"] }] },
  13815. {
  13816. "name": "新疆",
  13817. "city": [
  13818. {
  13819. "name": "乌鲁木齐市",
  13820. "area": [
  13821. "天山区",
  13822. "沙依巴克区",
  13823. "新市区",
  13824. "水磨沟区",
  13825. "头屯河区",
  13826. "达坂城区",
  13827. "东山区",
  13828. "乌鲁木齐县"] },
  13829. {
  13830. "name": "克拉玛依市",
  13831. "area": [
  13832. "克拉玛依区",
  13833. "独山子区",
  13834. "白碱滩区",
  13835. "乌尔禾区"] },
  13836. {
  13837. "name": "吐鲁番地区",
  13838. "area": [
  13839. "吐鲁番市",
  13840. "托克逊县",
  13841. "鄯善县"] },
  13842. {
  13843. "name": "哈密地区",
  13844. "area": [
  13845. "哈密市",
  13846. "伊吾县",
  13847. "巴里坤哈萨克自治县"] },
  13848. {
  13849. "name": "和田地区",
  13850. "area": [
  13851. "和田市",
  13852. "和田县",
  13853. "洛浦县",
  13854. "民丰县",
  13855. "皮山县",
  13856. "策勒县",
  13857. "于田县",
  13858. "墨玉县"] },
  13859. {
  13860. "name": "阿克苏地区",
  13861. "area": [
  13862. "阿克苏市",
  13863. "温宿县",
  13864. "沙雅县",
  13865. "拜城县",
  13866. "阿瓦提县",
  13867. "库车县",
  13868. "柯坪县",
  13869. "新和县",
  13870. "乌什县"] },
  13871. {
  13872. "name": "喀什地区",
  13873. "area": [
  13874. "喀什市",
  13875. "巴楚县",
  13876. "泽普县",
  13877. "伽师县",
  13878. "叶城县",
  13879. "岳普湖县",
  13880. "疏勒县",
  13881. "麦盖提县",
  13882. "英吉沙县",
  13883. "莎车县",
  13884. "疏附县",
  13885. "塔什库尔干塔吉克自治县"] },
  13886. {
  13887. "name": "克孜勒苏柯尔克孜自治州",
  13888. "area": [
  13889. "阿图什市",
  13890. "阿合奇县",
  13891. "乌恰县",
  13892. "阿克陶县"] },
  13893. {
  13894. "name": "巴音郭楞蒙古自治州",
  13895. "area": [
  13896. "库尔勒市",
  13897. "和静县",
  13898. "尉犁县",
  13899. "和硕县",
  13900. "且末县",
  13901. "博湖县",
  13902. "轮台县",
  13903. "若羌县",
  13904. "焉耆回族自治县"] },
  13905. {
  13906. "name": "昌吉回族自治州",
  13907. "area": [
  13908. "昌吉市",
  13909. "阜康市",
  13910. "奇台县",
  13911. "玛纳斯县",
  13912. "吉木萨尔县",
  13913. "呼图壁县",
  13914. "木垒哈萨克自治县",
  13915. "米泉市"] },
  13916. {
  13917. "name": "博尔塔拉蒙古自治州",
  13918. "area": [
  13919. "博乐市",
  13920. "精河县",
  13921. "温泉县"] },
  13922. {
  13923. "name": "石河子",
  13924. "area": [
  13925. "石河子"] },
  13926. {
  13927. "name": "阿拉尔",
  13928. "area": [
  13929. "阿拉尔"] },
  13930. {
  13931. "name": "图木舒克",
  13932. "area": [
  13933. "图木舒克"] },
  13934. {
  13935. "name": "五家渠",
  13936. "area": [
  13937. "五家渠"] },
  13938. {
  13939. "name": "伊犁哈萨克自治州",
  13940. "area": [
  13941. "伊宁市",
  13942. "奎屯市",
  13943. "伊宁县",
  13944. "特克斯县",
  13945. "尼勒克县",
  13946. "昭苏县",
  13947. "新源县",
  13948. "霍城县",
  13949. "巩留县",
  13950. "察布查尔锡伯自治县",
  13951. "塔城地区",
  13952. "阿勒泰地区"] }] },
  13953. {
  13954. "name": "台湾省",
  13955. "city": [
  13956. {
  13957. "name": "台北市",
  13958. "area": [
  13959. "内湖区",
  13960. "南港区",
  13961. "中正区",
  13962. "万华区",
  13963. "大同区",
  13964. "中山区",
  13965. "松山区",
  13966. "大安区",
  13967. "信义区",
  13968. "文山区",
  13969. "士林区",
  13970. "北投区"] },
  13971. {
  13972. "name": "新北市",
  13973. "area": [
  13974. "板桥区",
  13975. "汐止区",
  13976. "新店区"] },
  13977. {
  13978. "name": "桃园市",
  13979. "area": [
  13980. "其他"] },
  13981. {
  13982. "name": "台中市",
  13983. "area": [
  13984. "其他"] },
  13985. {
  13986. "name": "台南市",
  13987. "area": [
  13988. "其他"] },
  13989. {
  13990. "name": "高雄市",
  13991. "area": [
  13992. "其他"] }] },
  13993. {
  13994. "name": "澳门",
  13995. "city": [
  13996. {
  13997. "name": "澳门",
  13998. "area": [
  13999. "花地玛堂区",
  14000. "圣安多尼堂区",
  14001. "大堂区",
  14002. "望德堂区",
  14003. "风顺堂区",
  14004. "嘉模堂区",
  14005. "圣方济各堂区",
  14006. "路凼"] }] },
  14007. {
  14008. "name": "香港",
  14009. "city": [
  14010. {
  14011. "name": "香港",
  14012. "area": [
  14013. "深水埗区",
  14014. "油尖旺区",
  14015. "九龙城区",
  14016. "黄大仙区",
  14017. "观塘区",
  14018. "北区",
  14019. "大埔区",
  14020. "沙田区",
  14021. "西贡区",
  14022. "元朗区",
  14023. "屯门区",
  14024. "荃湾区",
  14025. "葵青区",
  14026. "离岛区",
  14027. "中西区",
  14028. "湾仔区",
  14029. "东区",
  14030. "南区"] }] }];exports.default = _default;
  14031. /***/ }),
  14032. /***/ 47:
  14033. /*!********************************!*\
  14034. !*** D:/gsxm/ezred/api/ask.js ***!
  14035. \********************************/
  14036. /*! no static exports found */
  14037. /***/ (function(module, exports, __webpack_require__) {
  14038. "use strict";
  14039. Object.defineProperty(exports, "__esModule", { value: true });exports.addrescuer = addrescuer;exports.upload = upload;exports.articlesave = articlesave;exports.myarticle = myarticle;exports.replyask = replyask;exports.replylist = replylist;exports.myreplylist = myreplylist;exports.mechanism = mechanism;exports.chosintention = chosintention;exports.joinDona = joinDona;exports.getDonaList = getDonaList;exports.MyDonaList = MyDonaList;exports.getCertificate = getCertificate;var _request = _interopRequireWildcard(__webpack_require__(/*! @/utils/request */ 21));function _getRequireWildcardCache() {if (typeof WeakMap !== "function") return null;var cache = new WeakMap();_getRequireWildcardCache = function _getRequireWildcardCache() {return cache;};return cache;}function _interopRequireWildcard(obj) {if (obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache();if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;}
  14040. //上传救护者信息
  14041. function addrescuer(data) {
  14042. return (0, _request.default)({
  14043. url: '/api/add_rescuer',
  14044. method: 'post',
  14045. data: data });
  14046. }
  14047. //上传图片
  14048. function upload(data) {
  14049. return (0, _request.upFilse)({
  14050. url: '/api/upload/image',
  14051. method: 'post',
  14052. data: data });
  14053. }
  14054. //发表文章
  14055. function articlesave(data) {
  14056. return (0, _request.default)({
  14057. url: '/api/circle/articlesave',
  14058. method: 'post',
  14059. data: data });
  14060. }
  14061. //我发表的文章
  14062. function myarticle(data) {
  14063. return (0, _request.default)({
  14064. url: '/api/circle/myarticle',
  14065. method: 'post',
  14066. data: data });
  14067. }
  14068. //发表评论
  14069. function replyask(data) {
  14070. return (0, _request.default)({
  14071. url: '/api/add_a',
  14072. method: 'post',
  14073. data: data });
  14074. }
  14075. //问答详情
  14076. function replylist(data) {
  14077. return (0, _request.default)({
  14078. url: '/api/q_list',
  14079. method: 'get',
  14080. data: data });
  14081. }
  14082. //评论列表
  14083. function myreplylist(data) {
  14084. return (0, _request.default)({
  14085. url: '/api/a_list',
  14086. method: 'get',
  14087. data: data });
  14088. }
  14089. //机构搜索
  14090. function mechanism(data) {
  14091. return (0, _request.default)({
  14092. url: '/api/mechanism',
  14093. method: 'get',
  14094. data: data });
  14095. }
  14096. // 捐款意向 chosintention
  14097. function chosintention(data) {
  14098. return (0, _request.default)({
  14099. url: '/api/intention',
  14100. method: 'get',
  14101. data: data });
  14102. }
  14103. // 爱心捐赠 joinDona 提交
  14104. function joinDona(data) {
  14105. return (0, _request.default)({
  14106. url: '/api/intention',
  14107. method: 'get',
  14108. data: data });
  14109. }
  14110. // 捐赠列表 getDonaList
  14111. function getDonaList(data) {
  14112. return (0, _request.default)({
  14113. url: '/api/bulletin',
  14114. method: 'get',
  14115. data: data });
  14116. }
  14117. // 我的捐赠 MyDonaList
  14118. function MyDonaList(data) {
  14119. return (0, _request.default)({
  14120. url: '/api/my_donate',
  14121. method: 'get',
  14122. data: data });
  14123. }
  14124. // 获得证书 getCertificate
  14125. function getCertificate(data) {
  14126. return (0, _request.default)({
  14127. url: '/api/detail_training',
  14128. method: 'get',
  14129. data: data });
  14130. }
  14131. /***/ }),
  14132. /***/ 48:
  14133. /*!**********************************!*\
  14134. !*** D:/gsxm/ezred/api/money.js ***!
  14135. \**********************************/
  14136. /*! no static exports found */
  14137. /***/ (function(module, exports, __webpack_require__) {
  14138. "use strict";
  14139. Object.defineProperty(exports, "__esModule", { value: true });exports.computedOrderkey = computedOrderkey;exports.createOrderkey = createOrderkey;exports.balance = balance;exports.orderPay = orderPay;var _request = _interopRequireDefault(__webpack_require__(/*! @/utils/request */ 21));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  14140. // 统计金额
  14141. function computedOrderkey(data) {
  14142. return (0, _request.default)({
  14143. url: '/api/order/computed/' + data.orderkey,
  14144. method: 'post',
  14145. data: data });
  14146. }
  14147. // 创建订单
  14148. function createOrderkey(data, key) {
  14149. return (0, _request.default)({
  14150. url: '/api/donate/create',
  14151. method: 'post',
  14152. data: data });
  14153. }
  14154. // 账户余额
  14155. function balance(data) {
  14156. return (0, _request.default)({
  14157. url: '/api/user/balance',
  14158. method: 'get',
  14159. data: data });
  14160. }
  14161. // 订单支付
  14162. function orderPay(data) {
  14163. return (0, _request.default)({
  14164. url: '/api/order/pay',
  14165. method: 'post',
  14166. data: data });
  14167. }
  14168. /***/ }),
  14169. /***/ 498:
  14170. /*!*****************************************************************!*\
  14171. !*** D:/gsxm/ezred/components/uni-swipe-action-item/mpother.js ***!
  14172. \*****************************************************************/
  14173. /*! no static exports found */
  14174. /***/ (function(module, exports, __webpack_require__) {
  14175. "use strict";
  14176. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var MIN_DISTANCE = 10;var _default =
  14177. {
  14178. data: function data() {
  14179. return {
  14180. uniShow: false,
  14181. left: 0,
  14182. buttonShow: 'none',
  14183. ani: false,
  14184. moveLeft: '' };
  14185. },
  14186. watch: {
  14187. show: function show(newVal) {
  14188. if (this.autoClose) return;
  14189. this.openState(newVal);
  14190. },
  14191. left: function left() {
  14192. this.moveLeft = "translateX(".concat(this.left, "px)");
  14193. },
  14194. buttonShow: function buttonShow(newVal) {
  14195. if (this.autoClose) return;
  14196. this.openState(newVal);
  14197. },
  14198. leftOptions: function leftOptions() {
  14199. this.init();
  14200. },
  14201. rightOptions: function rightOptions() {
  14202. this.init();
  14203. } },
  14204. mounted: function mounted() {
  14205. // this.position = {}
  14206. if (this.swipeaction.children !== undefined) {
  14207. this.swipeaction.children.push(this);
  14208. }
  14209. this.init();
  14210. },
  14211. beforeDestoy: function beforeDestoy() {var _this = this;
  14212. this.swipeaction.children.forEach(function (item, index) {
  14213. if (item === _this) {
  14214. _this.swipeaction.children.splice(index, 1);
  14215. }
  14216. });
  14217. },
  14218. methods: {
  14219. init: function init() {var _this2 = this;
  14220. clearTimeout(this.timer);
  14221. this.timer = setTimeout(function () {
  14222. _this2.getSelectorQuery();
  14223. }, 100);
  14224. // 移动距离
  14225. this.left = 0;
  14226. this.x = 0;
  14227. },
  14228. closeSwipe: function closeSwipe(e) {
  14229. if (!this.autoClose) return;
  14230. this.swipeaction.closeOther(this);
  14231. },
  14232. appTouchStart: function appTouchStart(e) {var
  14233. clientX =
  14234. e.changedTouches[0].clientX;
  14235. this.clientX = clientX;
  14236. this.timestamp = new Date().getTime();
  14237. },
  14238. appTouchEnd: function appTouchEnd(e, index, item, position) {var
  14239. clientX =
  14240. e.changedTouches[0].clientX;
  14241. // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题
  14242. var diff = Math.abs(this.clientX - clientX);
  14243. var time = new Date().getTime() - this.timestamp;
  14244. if (diff < 40 && time < 300) {
  14245. this.$emit('click', {
  14246. content: item,
  14247. index: index,
  14248. position: position });
  14249. }
  14250. },
  14251. touchstart: function touchstart(e) {
  14252. if (this.disabled) return;
  14253. this.ani = false;
  14254. this.x = this.left || 0;
  14255. this.stopTouchStart(e);
  14256. this.autoClose && this.closeSwipe();
  14257. },
  14258. touchmove: function touchmove(e) {
  14259. if (this.disabled) return;
  14260. // 是否可以滑动页面
  14261. this.stopTouchMove(e);
  14262. if (this.direction !== 'horizontal') {
  14263. return;
  14264. }
  14265. this.move(this.x + this.deltaX);
  14266. },
  14267. touchend: function touchend() {
  14268. if (this.disabled) return;
  14269. this.moveDirection(this.left);
  14270. },
  14271. /**
  14272. * 设置移动距离
  14273. * @param {Object} value
  14274. */
  14275. move: function move(value) {
  14276. value = value || 0;
  14277. var leftWidth = this.leftWidth;
  14278. var rightWidth = this.rightWidth;
  14279. // 获取可滑动范围
  14280. this.left = this.range(value, -rightWidth, leftWidth);
  14281. },
  14282. /**
  14283. * 获取范围
  14284. * @param {Object} num
  14285. * @param {Object} min
  14286. * @param {Object} max
  14287. */
  14288. range: function range(num, min, max) {
  14289. return Math.min(Math.max(num, min), max);
  14290. },
  14291. /**
  14292. * 移动方向判断
  14293. * @param {Object} left
  14294. * @param {Object} value
  14295. */
  14296. moveDirection: function moveDirection(left) {
  14297. var threshold = this.threshold;
  14298. var isopen = this.isopen || 'none';
  14299. var leftWidth = this.leftWidth;
  14300. var rightWidth = this.rightWidth;
  14301. if (this.deltaX === 0) {
  14302. this.openState('none');
  14303. return;
  14304. }
  14305. if (isopen === 'none' && rightWidth > 0 && -left > threshold || isopen !== 'none' && rightWidth > 0 && rightWidth +
  14306. left < threshold) {
  14307. // right
  14308. this.openState('right');
  14309. } else if (isopen === 'none' && leftWidth > 0 && left > threshold || isopen !== 'none' && leftWidth > 0 &&
  14310. leftWidth - left < threshold) {
  14311. // left
  14312. this.openState('left');
  14313. } else {
  14314. // default
  14315. this.openState('none');
  14316. }
  14317. },
  14318. /**
  14319. * 开启状态
  14320. * @param {Boolean} type
  14321. */
  14322. openState: function openState(type) {var _this3 = this;
  14323. var leftWidth = this.leftWidth;
  14324. var rightWidth = this.rightWidth;
  14325. var left = '';
  14326. this.isopen = this.isopen ? this.isopen : 'none';
  14327. switch (type) {
  14328. case "left":
  14329. left = leftWidth;
  14330. break;
  14331. case "right":
  14332. left = -rightWidth;
  14333. break;
  14334. default:
  14335. left = 0;}
  14336. if (this.isopen !== type) {
  14337. this.throttle = true;
  14338. this.$emit('change', type);
  14339. }
  14340. this.isopen = type;
  14341. // 添加动画类
  14342. this.ani = true;
  14343. this.$nextTick(function () {
  14344. _this3.move(left);
  14345. });
  14346. // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的
  14347. },
  14348. close: function close() {
  14349. this.openState('none');
  14350. },
  14351. getDirection: function getDirection(x, y) {
  14352. if (x > y && x > MIN_DISTANCE) {
  14353. return 'horizontal';
  14354. }
  14355. if (y > x && y > MIN_DISTANCE) {
  14356. return 'vertical';
  14357. }
  14358. return '';
  14359. },
  14360. /**
  14361. * 重置滑动状态
  14362. * @param {Object} event
  14363. */
  14364. resetTouchStatus: function resetTouchStatus() {
  14365. this.direction = '';
  14366. this.deltaX = 0;
  14367. this.deltaY = 0;
  14368. this.offsetX = 0;
  14369. this.offsetY = 0;
  14370. },
  14371. /**
  14372. * 设置滑动开始位置
  14373. * @param {Object} event
  14374. */
  14375. stopTouchStart: function stopTouchStart(event) {
  14376. this.resetTouchStatus();
  14377. var touch = event.touches[0];
  14378. this.startX = touch.clientX;
  14379. this.startY = touch.clientY;
  14380. },
  14381. /**
  14382. * 滑动中,是否禁止打开
  14383. * @param {Object} event
  14384. */
  14385. stopTouchMove: function stopTouchMove(event) {
  14386. var touch = event.touches[0];
  14387. this.deltaX = touch.clientX - this.startX;
  14388. this.deltaY = touch.clientY - this.startY;
  14389. this.offsetX = Math.abs(this.deltaX);
  14390. this.offsetY = Math.abs(this.deltaY);
  14391. this.direction = this.direction || this.getDirection(this.offsetX, this.offsetY);
  14392. },
  14393. getSelectorQuery: function getSelectorQuery() {var _this4 = this;
  14394. var views = uni.createSelectorQuery().in(this);
  14395. views.
  14396. selectAll('.uni-swipe_button-group').
  14397. boundingClientRect(function (data) {
  14398. var show = 'none';
  14399. if (_this4.autoClose) {
  14400. show = 'none';
  14401. } else {
  14402. show = _this4.show;
  14403. }
  14404. _this4.leftWidth = data[0].width || 0;
  14405. _this4.rightWidth = data[1].width || 0;
  14406. _this4.buttonShow = show;
  14407. }).
  14408. exec();
  14409. } } };exports.default = _default;
  14410. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
  14411. /***/ }),
  14412. /***/ 5:
  14413. /*!************************************!*\
  14414. !*** D:/gsxm/ezred/store/index.js ***!
  14415. \************************************/
  14416. /*! no static exports found */
  14417. /***/ (function(module, exports, __webpack_require__) {
  14418. "use strict";
  14419. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 2));
  14420. var _vuex = _interopRequireDefault(__webpack_require__(/*! vuex */ 6));
  14421. var _user = _interopRequireDefault(__webpack_require__(/*! ./model/user */ 7));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  14422. _vue.default.use(_vuex.default);
  14423. var store = new _vuex.default.Store({
  14424. state: {
  14425. baseURL: 'http://ez.igxys.com', //请求地址配置
  14426. // baseURL: 'http://yrh.liuniu946.com', //请求地址配置
  14427. urlFile: '/index', //项目部署所在文件夹
  14428. loginInterceptor: false, //是否打开强制登录
  14429. token: ''
  14430. // shareData:'',//分享信息
  14431. },
  14432. mutations: {},
  14433. modules: {
  14434. user: _user.default },
  14435. actions: {} });var _default =
  14436. store;exports.default = _default;
  14437. /***/ }),
  14438. /***/ 527:
  14439. /*!***************************************************!*\
  14440. !*** D:/gsxm/ezred/components/uni-icons/icons.js ***!
  14441. \***************************************************/
  14442. /*! no static exports found */
  14443. /***/ (function(module, exports, __webpack_require__) {
  14444. "use strict";
  14445. Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _default = {
  14446. 'contact': "\uE100",
  14447. 'person': "\uE101",
  14448. 'personadd': "\uE102",
  14449. 'contact-filled': "\uE130",
  14450. 'person-filled': "\uE131",
  14451. 'personadd-filled': "\uE132",
  14452. 'phone': "\uE200",
  14453. 'email': "\uE201",
  14454. 'chatbubble': "\uE202",
  14455. 'chatboxes': "\uE203",
  14456. 'phone-filled': "\uE230",
  14457. 'email-filled': "\uE231",
  14458. 'chatbubble-filled': "\uE232",
  14459. 'chatboxes-filled': "\uE233",
  14460. 'weibo': "\uE260",
  14461. 'weixin': "\uE261",
  14462. 'pengyouquan': "\uE262",
  14463. 'chat': "\uE263",
  14464. 'qq': "\uE264",
  14465. 'videocam': "\uE300",
  14466. 'camera': "\uE301",
  14467. 'mic': "\uE302",
  14468. 'location': "\uE303",
  14469. 'mic-filled': "\uE332",
  14470. 'speech': "\uE332",
  14471. 'location-filled': "\uE333",
  14472. 'micoff': "\uE360",
  14473. 'image': "\uE363",
  14474. 'map': "\uE364",
  14475. 'compose': "\uE400",
  14476. 'trash': "\uE401",
  14477. 'upload': "\uE402",
  14478. 'download': "\uE403",
  14479. 'close': "\uE404",
  14480. 'redo': "\uE405",
  14481. 'undo': "\uE406",
  14482. 'refresh': "\uE407",
  14483. 'star': "\uE408",
  14484. 'plus': "\uE409",
  14485. 'minus': "\uE410",
  14486. 'circle': "\uE411",
  14487. 'checkbox': "\uE411",
  14488. 'close-filled': "\uE434",
  14489. 'clear': "\uE434",
  14490. 'refresh-filled': "\uE437",
  14491. 'star-filled': "\uE438",
  14492. 'plus-filled': "\uE439",
  14493. 'minus-filled': "\uE440",
  14494. 'circle-filled': "\uE441",
  14495. 'checkbox-filled': "\uE442",
  14496. 'closeempty': "\uE460",
  14497. 'refreshempty': "\uE461",
  14498. 'reload': "\uE462",
  14499. 'starhalf': "\uE463",
  14500. 'spinner': "\uE464",
  14501. 'spinner-cycle': "\uE465",
  14502. 'search': "\uE466",
  14503. 'plusempty': "\uE468",
  14504. 'forward': "\uE470",
  14505. 'back': "\uE471",
  14506. 'left-nav': "\uE471",
  14507. 'checkmarkempty': "\uE472",
  14508. 'home': "\uE500",
  14509. 'navigate': "\uE501",
  14510. 'gear': "\uE502",
  14511. 'paperplane': "\uE503",
  14512. 'info': "\uE504",
  14513. 'help': "\uE505",
  14514. 'locked': "\uE506",
  14515. 'more': "\uE507",
  14516. 'flag': "\uE508",
  14517. 'home-filled': "\uE530",
  14518. 'gear-filled': "\uE532",
  14519. 'info-filled': "\uE534",
  14520. 'help-filled': "\uE535",
  14521. 'more-filled': "\uE537",
  14522. 'settings': "\uE560",
  14523. 'list': "\uE562",
  14524. 'bars': "\uE563",
  14525. 'loop': "\uE565",
  14526. 'paperclip': "\uE567",
  14527. 'eye': "\uE568",
  14528. 'arrowup': "\uE580",
  14529. 'arrowdown': "\uE581",
  14530. 'arrowleft': "\uE582",
  14531. 'arrowright': "\uE583",
  14532. 'arrowthinup': "\uE584",
  14533. 'arrowthindown': "\uE585",
  14534. 'arrowthinleft': "\uE586",
  14535. 'arrowthinright': "\uE587",
  14536. 'pulldown': "\uE588",
  14537. 'closefill': "\uE589",
  14538. 'sound': "\uE590",
  14539. 'scan': "\uE612" };exports.default = _default;
  14540. /***/ }),
  14541. /***/ 6:
  14542. /*!********************************************!*\
  14543. !*** ./node_modules/vuex/dist/vuex.esm.js ***!
  14544. \********************************************/
  14545. /*! exports provided: default, Store, createNamespacedHelpers, install, mapActions, mapGetters, mapMutations, mapState */
  14546. /***/ (function(module, __webpack_exports__, __webpack_require__) {
  14547. "use strict";
  14548. __webpack_require__.r(__webpack_exports__);
  14549. /* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Store", function() { return Store; });
  14550. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createNamespacedHelpers", function() { return createNamespacedHelpers; });
  14551. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "install", function() { return install; });
  14552. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapActions", function() { return mapActions; });
  14553. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapGetters", function() { return mapGetters; });
  14554. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapMutations", function() { return mapMutations; });
  14555. /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapState", function() { return mapState; });
  14556. /*!
  14557. * vuex v3.4.0
  14558. * (c) 2020 Evan You
  14559. * @license MIT
  14560. */
  14561. function applyMixin (Vue) {
  14562. var version = Number(Vue.version.split('.')[0]);
  14563. if (version >= 2) {
  14564. Vue.mixin({ beforeCreate: vuexInit });
  14565. } else {
  14566. // override init and inject vuex init procedure
  14567. // for 1.x backwards compatibility.
  14568. var _init = Vue.prototype._init;
  14569. Vue.prototype._init = function (options) {
  14570. if ( options === void 0 ) options = {};
  14571. options.init = options.init
  14572. ? [vuexInit].concat(options.init)
  14573. : vuexInit;
  14574. _init.call(this, options);
  14575. };
  14576. }
  14577. /**
  14578. * Vuex init hook, injected into each instances init hooks list.
  14579. */
  14580. function vuexInit () {
  14581. var options = this.$options;
  14582. // store injection
  14583. if (options.store) {
  14584. this.$store = typeof options.store === 'function'
  14585. ? options.store()
  14586. : options.store;
  14587. } else if (options.parent && options.parent.$store) {
  14588. this.$store = options.parent.$store;
  14589. }
  14590. }
  14591. }
  14592. var target = typeof window !== 'undefined'
  14593. ? window
  14594. : typeof global !== 'undefined'
  14595. ? global
  14596. : {};
  14597. var devtoolHook = target.__VUE_DEVTOOLS_GLOBAL_HOOK__;
  14598. function devtoolPlugin (store) {
  14599. if (!devtoolHook) { return }
  14600. store._devtoolHook = devtoolHook;
  14601. devtoolHook.emit('vuex:init', store);
  14602. devtoolHook.on('vuex:travel-to-state', function (targetState) {
  14603. store.replaceState(targetState);
  14604. });
  14605. store.subscribe(function (mutation, state) {
  14606. devtoolHook.emit('vuex:mutation', mutation, state);
  14607. }, { prepend: true });
  14608. store.subscribeAction(function (action, state) {
  14609. devtoolHook.emit('vuex:action', action, state);
  14610. }, { prepend: true });
  14611. }
  14612. /**
  14613. * Get the first item that pass the test
  14614. * by second argument function
  14615. *
  14616. * @param {Array} list
  14617. * @param {Function} f
  14618. * @return {*}
  14619. */
  14620. /**
  14621. * forEach for object
  14622. */
  14623. function forEachValue (obj, fn) {
  14624. Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });
  14625. }
  14626. function isObject (obj) {
  14627. return obj !== null && typeof obj === 'object'
  14628. }
  14629. function isPromise (val) {
  14630. return val && typeof val.then === 'function'
  14631. }
  14632. function assert (condition, msg) {
  14633. if (!condition) { throw new Error(("[vuex] " + msg)) }
  14634. }
  14635. function partial (fn, arg) {
  14636. return function () {
  14637. return fn(arg)
  14638. }
  14639. }
  14640. // Base data struct for store's module, package with some attribute and method
  14641. var Module = function Module (rawModule, runtime) {
  14642. this.runtime = runtime;
  14643. // Store some children item
  14644. this._children = Object.create(null);
  14645. // Store the origin module object which passed by programmer
  14646. this._rawModule = rawModule;
  14647. var rawState = rawModule.state;
  14648. // Store the origin module's state
  14649. this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};
  14650. };
  14651. var prototypeAccessors = { namespaced: { configurable: true } };
  14652. prototypeAccessors.namespaced.get = function () {
  14653. return !!this._rawModule.namespaced
  14654. };
  14655. Module.prototype.addChild = function addChild (key, module) {
  14656. this._children[key] = module;
  14657. };
  14658. Module.prototype.removeChild = function removeChild (key) {
  14659. delete this._children[key];
  14660. };
  14661. Module.prototype.getChild = function getChild (key) {
  14662. return this._children[key]
  14663. };
  14664. Module.prototype.hasChild = function hasChild (key) {
  14665. return key in this._children
  14666. };
  14667. Module.prototype.update = function update (rawModule) {
  14668. this._rawModule.namespaced = rawModule.namespaced;
  14669. if (rawModule.actions) {
  14670. this._rawModule.actions = rawModule.actions;
  14671. }
  14672. if (rawModule.mutations) {
  14673. this._rawModule.mutations = rawModule.mutations;
  14674. }
  14675. if (rawModule.getters) {
  14676. this._rawModule.getters = rawModule.getters;
  14677. }
  14678. };
  14679. Module.prototype.forEachChild = function forEachChild (fn) {
  14680. forEachValue(this._children, fn);
  14681. };
  14682. Module.prototype.forEachGetter = function forEachGetter (fn) {
  14683. if (this._rawModule.getters) {
  14684. forEachValue(this._rawModule.getters, fn);
  14685. }
  14686. };
  14687. Module.prototype.forEachAction = function forEachAction (fn) {
  14688. if (this._rawModule.actions) {
  14689. forEachValue(this._rawModule.actions, fn);
  14690. }
  14691. };
  14692. Module.prototype.forEachMutation = function forEachMutation (fn) {
  14693. if (this._rawModule.mutations) {
  14694. forEachValue(this._rawModule.mutations, fn);
  14695. }
  14696. };
  14697. Object.defineProperties( Module.prototype, prototypeAccessors );
  14698. var ModuleCollection = function ModuleCollection (rawRootModule) {
  14699. // register root module (Vuex.Store options)
  14700. this.register([], rawRootModule, false);
  14701. };
  14702. ModuleCollection.prototype.get = function get (path) {
  14703. return path.reduce(function (module, key) {
  14704. return module.getChild(key)
  14705. }, this.root)
  14706. };
  14707. ModuleCollection.prototype.getNamespace = function getNamespace (path) {
  14708. var module = this.root;
  14709. return path.reduce(function (namespace, key) {
  14710. module = module.getChild(key);
  14711. return namespace + (module.namespaced ? key + '/' : '')
  14712. }, '')
  14713. };
  14714. ModuleCollection.prototype.update = function update$1 (rawRootModule) {
  14715. update([], this.root, rawRootModule);
  14716. };
  14717. ModuleCollection.prototype.register = function register (path, rawModule, runtime) {
  14718. var this$1 = this;
  14719. if ( runtime === void 0 ) runtime = true;
  14720. if ((true)) {
  14721. assertRawModule(path, rawModule);
  14722. }
  14723. var newModule = new Module(rawModule, runtime);
  14724. if (path.length === 0) {
  14725. this.root = newModule;
  14726. } else {
  14727. var parent = this.get(path.slice(0, -1));
  14728. parent.addChild(path[path.length - 1], newModule);
  14729. }
  14730. // register nested modules
  14731. if (rawModule.modules) {
  14732. forEachValue(rawModule.modules, function (rawChildModule, key) {
  14733. this$1.register(path.concat(key), rawChildModule, runtime);
  14734. });
  14735. }
  14736. };
  14737. ModuleCollection.prototype.unregister = function unregister (path) {
  14738. var parent = this.get(path.slice(0, -1));
  14739. var key = path[path.length - 1];
  14740. if (!parent.getChild(key).runtime) { return }
  14741. parent.removeChild(key);
  14742. };
  14743. ModuleCollection.prototype.isRegistered = function isRegistered (path) {
  14744. var parent = this.get(path.slice(0, -1));
  14745. var key = path[path.length - 1];
  14746. return parent.hasChild(key)
  14747. };
  14748. function update (path, targetModule, newModule) {
  14749. if ((true)) {
  14750. assertRawModule(path, newModule);
  14751. }
  14752. // update target module
  14753. targetModule.update(newModule);
  14754. // update nested modules
  14755. if (newModule.modules) {
  14756. for (var key in newModule.modules) {
  14757. if (!targetModule.getChild(key)) {
  14758. if ((true)) {
  14759. console.warn(
  14760. "[vuex] trying to add a new module '" + key + "' on hot reloading, " +
  14761. 'manual reload is needed'
  14762. );
  14763. }
  14764. return
  14765. }
  14766. update(
  14767. path.concat(key),
  14768. targetModule.getChild(key),
  14769. newModule.modules[key]
  14770. );
  14771. }
  14772. }
  14773. }
  14774. var functionAssert = {
  14775. assert: function (value) { return typeof value === 'function'; },
  14776. expected: 'function'
  14777. };
  14778. var objectAssert = {
  14779. assert: function (value) { return typeof value === 'function' ||
  14780. (typeof value === 'object' && typeof value.handler === 'function'); },
  14781. expected: 'function or object with "handler" function'
  14782. };
  14783. var assertTypes = {
  14784. getters: functionAssert,
  14785. mutations: functionAssert,
  14786. actions: objectAssert
  14787. };
  14788. function assertRawModule (path, rawModule) {
  14789. Object.keys(assertTypes).forEach(function (key) {
  14790. if (!rawModule[key]) { return }
  14791. var assertOptions = assertTypes[key];
  14792. forEachValue(rawModule[key], function (value, type) {
  14793. assert(
  14794. assertOptions.assert(value),
  14795. makeAssertionMessage(path, key, type, value, assertOptions.expected)
  14796. );
  14797. });
  14798. });
  14799. }
  14800. function makeAssertionMessage (path, key, type, value, expected) {
  14801. var buf = key + " should be " + expected + " but \"" + key + "." + type + "\"";
  14802. if (path.length > 0) {
  14803. buf += " in module \"" + (path.join('.')) + "\"";
  14804. }
  14805. buf += " is " + (JSON.stringify(value)) + ".";
  14806. return buf
  14807. }
  14808. var Vue; // bind on install
  14809. var Store = function Store (options) {
  14810. var this$1 = this;
  14811. if ( options === void 0 ) options = {};
  14812. // Auto install if it is not done yet and `window` has `Vue`.
  14813. // To allow users to avoid auto-installation in some cases,
  14814. // this code should be placed here. See #731
  14815. if (!Vue && typeof window !== 'undefined' && window.Vue) {
  14816. install(window.Vue);
  14817. }
  14818. if ((true)) {
  14819. assert(Vue, "must call Vue.use(Vuex) before creating a store instance.");
  14820. assert(typeof Promise !== 'undefined', "vuex requires a Promise polyfill in this browser.");
  14821. assert(this instanceof Store, "store must be called with the new operator.");
  14822. }
  14823. var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];
  14824. var strict = options.strict; if ( strict === void 0 ) strict = false;
  14825. // store internal state
  14826. this._committing = false;
  14827. this._actions = Object.create(null);
  14828. this._actionSubscribers = [];
  14829. this._mutations = Object.create(null);
  14830. this._wrappedGetters = Object.create(null);
  14831. this._modules = new ModuleCollection(options);
  14832. this._modulesNamespaceMap = Object.create(null);
  14833. this._subscribers = [];
  14834. this._watcherVM = new Vue();
  14835. this._makeLocalGettersCache = Object.create(null);
  14836. // bind commit and dispatch to self
  14837. var store = this;
  14838. var ref = this;
  14839. var dispatch = ref.dispatch;
  14840. var commit = ref.commit;
  14841. this.dispatch = function boundDispatch (type, payload) {
  14842. return dispatch.call(store, type, payload)
  14843. };
  14844. this.commit = function boundCommit (type, payload, options) {
  14845. return commit.call(store, type, payload, options)
  14846. };
  14847. // strict mode
  14848. this.strict = strict;
  14849. var state = this._modules.root.state;
  14850. // init root module.
  14851. // this also recursively registers all sub-modules
  14852. // and collects all module getters inside this._wrappedGetters
  14853. installModule(this, state, [], this._modules.root);
  14854. // initialize the store vm, which is responsible for the reactivity
  14855. // (also registers _wrappedGetters as computed properties)
  14856. resetStoreVM(this, state);
  14857. // apply plugins
  14858. plugins.forEach(function (plugin) { return plugin(this$1); });
  14859. var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;
  14860. if (useDevtools) {
  14861. devtoolPlugin(this);
  14862. }
  14863. };
  14864. var prototypeAccessors$1 = { state: { configurable: true } };
  14865. prototypeAccessors$1.state.get = function () {
  14866. return this._vm._data.$$state
  14867. };
  14868. prototypeAccessors$1.state.set = function (v) {
  14869. if ((true)) {
  14870. assert(false, "use store.replaceState() to explicit replace store state.");
  14871. }
  14872. };
  14873. Store.prototype.commit = function commit (_type, _payload, _options) {
  14874. var this$1 = this;
  14875. // check object-style commit
  14876. var ref = unifyObjectStyle(_type, _payload, _options);
  14877. var type = ref.type;
  14878. var payload = ref.payload;
  14879. var options = ref.options;
  14880. var mutation = { type: type, payload: payload };
  14881. var entry = this._mutations[type];
  14882. if (!entry) {
  14883. if ((true)) {
  14884. console.error(("[vuex] unknown mutation type: " + type));
  14885. }
  14886. return
  14887. }
  14888. this._withCommit(function () {
  14889. entry.forEach(function commitIterator (handler) {
  14890. handler(payload);
  14891. });
  14892. });
  14893. this._subscribers
  14894. .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
  14895. .forEach(function (sub) { return sub(mutation, this$1.state); });
  14896. if (
  14897. ( true) &&
  14898. options && options.silent
  14899. ) {
  14900. console.warn(
  14901. "[vuex] mutation type: " + type + ". Silent option has been removed. " +
  14902. 'Use the filter functionality in the vue-devtools'
  14903. );
  14904. }
  14905. };
  14906. Store.prototype.dispatch = function dispatch (_type, _payload) {
  14907. var this$1 = this;
  14908. // check object-style dispatch
  14909. var ref = unifyObjectStyle(_type, _payload);
  14910. var type = ref.type;
  14911. var payload = ref.payload;
  14912. var action = { type: type, payload: payload };
  14913. var entry = this._actions[type];
  14914. if (!entry) {
  14915. if ((true)) {
  14916. console.error(("[vuex] unknown action type: " + type));
  14917. }
  14918. return
  14919. }
  14920. try {
  14921. this._actionSubscribers
  14922. .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
  14923. .filter(function (sub) { return sub.before; })
  14924. .forEach(function (sub) { return sub.before(action, this$1.state); });
  14925. } catch (e) {
  14926. if ((true)) {
  14927. console.warn("[vuex] error in before action subscribers: ");
  14928. console.error(e);
  14929. }
  14930. }
  14931. var result = entry.length > 1
  14932. ? Promise.all(entry.map(function (handler) { return handler(payload); }))
  14933. : entry[0](payload);
  14934. return new Promise(function (resolve, reject) {
  14935. result.then(function (res) {
  14936. try {
  14937. this$1._actionSubscribers
  14938. .filter(function (sub) { return sub.after; })
  14939. .forEach(function (sub) { return sub.after(action, this$1.state); });
  14940. } catch (e) {
  14941. if ((true)) {
  14942. console.warn("[vuex] error in after action subscribers: ");
  14943. console.error(e);
  14944. }
  14945. }
  14946. resolve(res);
  14947. }, function (error) {
  14948. try {
  14949. this$1._actionSubscribers
  14950. .filter(function (sub) { return sub.error; })
  14951. .forEach(function (sub) { return sub.error(action, this$1.state, error); });
  14952. } catch (e) {
  14953. if ((true)) {
  14954. console.warn("[vuex] error in error action subscribers: ");
  14955. console.error(e);
  14956. }
  14957. }
  14958. reject(error);
  14959. });
  14960. })
  14961. };
  14962. Store.prototype.subscribe = function subscribe (fn, options) {
  14963. return genericSubscribe(fn, this._subscribers, options)
  14964. };
  14965. Store.prototype.subscribeAction = function subscribeAction (fn, options) {
  14966. var subs = typeof fn === 'function' ? { before: fn } : fn;
  14967. return genericSubscribe(subs, this._actionSubscribers, options)
  14968. };
  14969. Store.prototype.watch = function watch (getter, cb, options) {
  14970. var this$1 = this;
  14971. if ((true)) {
  14972. assert(typeof getter === 'function', "store.watch only accepts a function.");
  14973. }
  14974. return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)
  14975. };
  14976. Store.prototype.replaceState = function replaceState (state) {
  14977. var this$1 = this;
  14978. this._withCommit(function () {
  14979. this$1._vm._data.$$state = state;
  14980. });
  14981. };
  14982. Store.prototype.registerModule = function registerModule (path, rawModule, options) {
  14983. if ( options === void 0 ) options = {};
  14984. if (typeof path === 'string') { path = [path]; }
  14985. if ((true)) {
  14986. assert(Array.isArray(path), "module path must be a string or an Array.");
  14987. assert(path.length > 0, 'cannot register the root module by using registerModule.');
  14988. }
  14989. this._modules.register(path, rawModule);
  14990. installModule(this, this.state, path, this._modules.get(path), options.preserveState);
  14991. // reset store to update getters...
  14992. resetStoreVM(this, this.state);
  14993. };
  14994. Store.prototype.unregisterModule = function unregisterModule (path) {
  14995. var this$1 = this;
  14996. if (typeof path === 'string') { path = [path]; }
  14997. if ((true)) {
  14998. assert(Array.isArray(path), "module path must be a string or an Array.");
  14999. }
  15000. this._modules.unregister(path);
  15001. this._withCommit(function () {
  15002. var parentState = getNestedState(this$1.state, path.slice(0, -1));
  15003. Vue.delete(parentState, path[path.length - 1]);
  15004. });
  15005. resetStore(this);
  15006. };
  15007. Store.prototype.hasModule = function hasModule (path) {
  15008. if (typeof path === 'string') { path = [path]; }
  15009. if ((true)) {
  15010. assert(Array.isArray(path), "module path must be a string or an Array.");
  15011. }
  15012. return this._modules.isRegistered(path)
  15013. };
  15014. Store.prototype.hotUpdate = function hotUpdate (newOptions) {
  15015. this._modules.update(newOptions);
  15016. resetStore(this, true);
  15017. };
  15018. Store.prototype._withCommit = function _withCommit (fn) {
  15019. var committing = this._committing;
  15020. this._committing = true;
  15021. fn();
  15022. this._committing = committing;
  15023. };
  15024. Object.defineProperties( Store.prototype, prototypeAccessors$1 );
  15025. function genericSubscribe (fn, subs, options) {
  15026. if (subs.indexOf(fn) < 0) {
  15027. options && options.prepend
  15028. ? subs.unshift(fn)
  15029. : subs.push(fn);
  15030. }
  15031. return function () {
  15032. var i = subs.indexOf(fn);
  15033. if (i > -1) {
  15034. subs.splice(i, 1);
  15035. }
  15036. }
  15037. }
  15038. function resetStore (store, hot) {
  15039. store._actions = Object.create(null);
  15040. store._mutations = Object.create(null);
  15041. store._wrappedGetters = Object.create(null);
  15042. store._modulesNamespaceMap = Object.create(null);
  15043. var state = store.state;
  15044. // init all modules
  15045. installModule(store, state, [], store._modules.root, true);
  15046. // reset vm
  15047. resetStoreVM(store, state, hot);
  15048. }
  15049. function resetStoreVM (store, state, hot) {
  15050. var oldVm = store._vm;
  15051. // bind store public getters
  15052. store.getters = {};
  15053. // reset local getters cache
  15054. store._makeLocalGettersCache = Object.create(null);
  15055. var wrappedGetters = store._wrappedGetters;
  15056. var computed = {};
  15057. forEachValue(wrappedGetters, function (fn, key) {
  15058. // use computed to leverage its lazy-caching mechanism
  15059. // direct inline function use will lead to closure preserving oldVm.
  15060. // using partial to return function with only arguments preserved in closure environment.
  15061. computed[key] = partial(fn, store);
  15062. Object.defineProperty(store.getters, key, {
  15063. get: function () { return store._vm[key]; },
  15064. enumerable: true // for local getters
  15065. });
  15066. });
  15067. // use a Vue instance to store the state tree
  15068. // suppress warnings just in case the user has added
  15069. // some funky global mixins
  15070. var silent = Vue.config.silent;
  15071. Vue.config.silent = true;
  15072. store._vm = new Vue({
  15073. data: {
  15074. $$state: state
  15075. },
  15076. computed: computed
  15077. });
  15078. Vue.config.silent = silent;
  15079. // enable strict mode for new vm
  15080. if (store.strict) {
  15081. enableStrictMode(store);
  15082. }
  15083. if (oldVm) {
  15084. if (hot) {
  15085. // dispatch changes in all subscribed watchers
  15086. // to force getter re-evaluation for hot reloading.
  15087. store._withCommit(function () {
  15088. oldVm._data.$$state = null;
  15089. });
  15090. }
  15091. Vue.nextTick(function () { return oldVm.$destroy(); });
  15092. }
  15093. }
  15094. function installModule (store, rootState, path, module, hot) {
  15095. var isRoot = !path.length;
  15096. var namespace = store._modules.getNamespace(path);
  15097. // register in namespace map
  15098. if (module.namespaced) {
  15099. if (store._modulesNamespaceMap[namespace] && ("development" !== 'production')) {
  15100. console.error(("[vuex] duplicate namespace " + namespace + " for the namespaced module " + (path.join('/'))));
  15101. }
  15102. store._modulesNamespaceMap[namespace] = module;
  15103. }
  15104. // set state
  15105. if (!isRoot && !hot) {
  15106. var parentState = getNestedState(rootState, path.slice(0, -1));
  15107. var moduleName = path[path.length - 1];
  15108. store._withCommit(function () {
  15109. if ((true)) {
  15110. if (moduleName in parentState) {
  15111. console.warn(
  15112. ("[vuex] state field \"" + moduleName + "\" was overridden by a module with the same name at \"" + (path.join('.')) + "\"")
  15113. );
  15114. }
  15115. }
  15116. Vue.set(parentState, moduleName, module.state);
  15117. });
  15118. }
  15119. var local = module.context = makeLocalContext(store, namespace, path);
  15120. module.forEachMutation(function (mutation, key) {
  15121. var namespacedType = namespace + key;
  15122. registerMutation(store, namespacedType, mutation, local);
  15123. });
  15124. module.forEachAction(function (action, key) {
  15125. var type = action.root ? key : namespace + key;
  15126. var handler = action.handler || action;
  15127. registerAction(store, type, handler, local);
  15128. });
  15129. module.forEachGetter(function (getter, key) {
  15130. var namespacedType = namespace + key;
  15131. registerGetter(store, namespacedType, getter, local);
  15132. });
  15133. module.forEachChild(function (child, key) {
  15134. installModule(store, rootState, path.concat(key), child, hot);
  15135. });
  15136. }
  15137. /**
  15138. * make localized dispatch, commit, getters and state
  15139. * if there is no namespace, just use root ones
  15140. */
  15141. function makeLocalContext (store, namespace, path) {
  15142. var noNamespace = namespace === '';
  15143. var local = {
  15144. dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {
  15145. var args = unifyObjectStyle(_type, _payload, _options);
  15146. var payload = args.payload;
  15147. var options = args.options;
  15148. var type = args.type;
  15149. if (!options || !options.root) {
  15150. type = namespace + type;
  15151. if (( true) && !store._actions[type]) {
  15152. console.error(("[vuex] unknown local action type: " + (args.type) + ", global type: " + type));
  15153. return
  15154. }
  15155. }
  15156. return store.dispatch(type, payload)
  15157. },
  15158. commit: noNamespace ? store.commit : function (_type, _payload, _options) {
  15159. var args = unifyObjectStyle(_type, _payload, _options);
  15160. var payload = args.payload;
  15161. var options = args.options;
  15162. var type = args.type;
  15163. if (!options || !options.root) {
  15164. type = namespace + type;
  15165. if (( true) && !store._mutations[type]) {
  15166. console.error(("[vuex] unknown local mutation type: " + (args.type) + ", global type: " + type));
  15167. return
  15168. }
  15169. }
  15170. store.commit(type, payload, options);
  15171. }
  15172. };
  15173. // getters and state object must be gotten lazily
  15174. // because they will be changed by vm update
  15175. Object.defineProperties(local, {
  15176. getters: {
  15177. get: noNamespace
  15178. ? function () { return store.getters; }
  15179. : function () { return makeLocalGetters(store, namespace); }
  15180. },
  15181. state: {
  15182. get: function () { return getNestedState(store.state, path); }
  15183. }
  15184. });
  15185. return local
  15186. }
  15187. function makeLocalGetters (store, namespace) {
  15188. if (!store._makeLocalGettersCache[namespace]) {
  15189. var gettersProxy = {};
  15190. var splitPos = namespace.length;
  15191. Object.keys(store.getters).forEach(function (type) {
  15192. // skip if the target getter is not match this namespace
  15193. if (type.slice(0, splitPos) !== namespace) { return }
  15194. // extract local getter type
  15195. var localType = type.slice(splitPos);
  15196. // Add a port to the getters proxy.
  15197. // Define as getter property because
  15198. // we do not want to evaluate the getters in this time.
  15199. Object.defineProperty(gettersProxy, localType, {
  15200. get: function () { return store.getters[type]; },
  15201. enumerable: true
  15202. });
  15203. });
  15204. store._makeLocalGettersCache[namespace] = gettersProxy;
  15205. }
  15206. return store._makeLocalGettersCache[namespace]
  15207. }
  15208. function registerMutation (store, type, handler, local) {
  15209. var entry = store._mutations[type] || (store._mutations[type] = []);
  15210. entry.push(function wrappedMutationHandler (payload) {
  15211. handler.call(store, local.state, payload);
  15212. });
  15213. }
  15214. function registerAction (store, type, handler, local) {
  15215. var entry = store._actions[type] || (store._actions[type] = []);
  15216. entry.push(function wrappedActionHandler (payload) {
  15217. var res = handler.call(store, {
  15218. dispatch: local.dispatch,
  15219. commit: local.commit,
  15220. getters: local.getters,
  15221. state: local.state,
  15222. rootGetters: store.getters,
  15223. rootState: store.state
  15224. }, payload);
  15225. if (!isPromise(res)) {
  15226. res = Promise.resolve(res);
  15227. }
  15228. if (store._devtoolHook) {
  15229. return res.catch(function (err) {
  15230. store._devtoolHook.emit('vuex:error', err);
  15231. throw err
  15232. })
  15233. } else {
  15234. return res
  15235. }
  15236. });
  15237. }
  15238. function registerGetter (store, type, rawGetter, local) {
  15239. if (store._wrappedGetters[type]) {
  15240. if ((true)) {
  15241. console.error(("[vuex] duplicate getter key: " + type));
  15242. }
  15243. return
  15244. }
  15245. store._wrappedGetters[type] = function wrappedGetter (store) {
  15246. return rawGetter(
  15247. local.state, // local state
  15248. local.getters, // local getters
  15249. store.state, // root state
  15250. store.getters // root getters
  15251. )
  15252. };
  15253. }
  15254. function enableStrictMode (store) {
  15255. store._vm.$watch(function () { return this._data.$$state }, function () {
  15256. if ((true)) {
  15257. assert(store._committing, "do not mutate vuex store state outside mutation handlers.");
  15258. }
  15259. }, { deep: true, sync: true });
  15260. }
  15261. function getNestedState (state, path) {
  15262. return path.reduce(function (state, key) { return state[key]; }, state)
  15263. }
  15264. function unifyObjectStyle (type, payload, options) {
  15265. if (isObject(type) && type.type) {
  15266. options = payload;
  15267. payload = type;
  15268. type = type.type;
  15269. }
  15270. if ((true)) {
  15271. assert(typeof type === 'string', ("expects string as the type, but found " + (typeof type) + "."));
  15272. }
  15273. return { type: type, payload: payload, options: options }
  15274. }
  15275. function install (_Vue) {
  15276. if (Vue && _Vue === Vue) {
  15277. if ((true)) {
  15278. console.error(
  15279. '[vuex] already installed. Vue.use(Vuex) should be called only once.'
  15280. );
  15281. }
  15282. return
  15283. }
  15284. Vue = _Vue;
  15285. applyMixin(Vue);
  15286. }
  15287. /**
  15288. * Reduce the code which written in Vue.js for getting the state.
  15289. * @param {String} [namespace] - Module's namespace
  15290. * @param {Object|Array} states # Object's item can be a function which accept state and getters for param, you can do something for state and getters in it.
  15291. * @param {Object}
  15292. */
  15293. var mapState = normalizeNamespace(function (namespace, states) {
  15294. var res = {};
  15295. if (( true) && !isValidMap(states)) {
  15296. console.error('[vuex] mapState: mapper parameter must be either an Array or an Object');
  15297. }
  15298. normalizeMap(states).forEach(function (ref) {
  15299. var key = ref.key;
  15300. var val = ref.val;
  15301. res[key] = function mappedState () {
  15302. var state = this.$store.state;
  15303. var getters = this.$store.getters;
  15304. if (namespace) {
  15305. var module = getModuleByNamespace(this.$store, 'mapState', namespace);
  15306. if (!module) {
  15307. return
  15308. }
  15309. state = module.context.state;
  15310. getters = module.context.getters;
  15311. }
  15312. return typeof val === 'function'
  15313. ? val.call(this, state, getters)
  15314. : state[val]
  15315. };
  15316. // mark vuex getter for devtools
  15317. res[key].vuex = true;
  15318. });
  15319. return res
  15320. });
  15321. /**
  15322. * Reduce the code which written in Vue.js for committing the mutation
  15323. * @param {String} [namespace] - Module's namespace
  15324. * @param {Object|Array} mutations # Object's item can be a function which accept `commit` function as the first param, it can accept anthor params. You can commit mutation and do any other things in this function. specially, You need to pass anthor params from the mapped function.
  15325. * @return {Object}
  15326. */
  15327. var mapMutations = normalizeNamespace(function (namespace, mutations) {
  15328. var res = {};
  15329. if (( true) && !isValidMap(mutations)) {
  15330. console.error('[vuex] mapMutations: mapper parameter must be either an Array or an Object');
  15331. }
  15332. normalizeMap(mutations).forEach(function (ref) {
  15333. var key = ref.key;
  15334. var val = ref.val;
  15335. res[key] = function mappedMutation () {
  15336. var args = [], len = arguments.length;
  15337. while ( len-- ) args[ len ] = arguments[ len ];
  15338. // Get the commit method from store
  15339. var commit = this.$store.commit;
  15340. if (namespace) {
  15341. var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);
  15342. if (!module) {
  15343. return
  15344. }
  15345. commit = module.context.commit;
  15346. }
  15347. return typeof val === 'function'
  15348. ? val.apply(this, [commit].concat(args))
  15349. : commit.apply(this.$store, [val].concat(args))
  15350. };
  15351. });
  15352. return res
  15353. });
  15354. /**
  15355. * Reduce the code which written in Vue.js for getting the getters
  15356. * @param {String} [namespace] - Module's namespace
  15357. * @param {Object|Array} getters
  15358. * @return {Object}
  15359. */
  15360. var mapGetters = normalizeNamespace(function (namespace, getters) {
  15361. var res = {};
  15362. if (( true) && !isValidMap(getters)) {
  15363. console.error('[vuex] mapGetters: mapper parameter must be either an Array or an Object');
  15364. }
  15365. normalizeMap(getters).forEach(function (ref) {
  15366. var key = ref.key;
  15367. var val = ref.val;
  15368. // The namespace has been mutated by normalizeNamespace
  15369. val = namespace + val;
  15370. res[key] = function mappedGetter () {
  15371. if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {
  15372. return
  15373. }
  15374. if (( true) && !(val in this.$store.getters)) {
  15375. console.error(("[vuex] unknown getter: " + val));
  15376. return
  15377. }
  15378. return this.$store.getters[val]
  15379. };
  15380. // mark vuex getter for devtools
  15381. res[key].vuex = true;
  15382. });
  15383. return res
  15384. });
  15385. /**
  15386. * Reduce the code which written in Vue.js for dispatch the action
  15387. * @param {String} [namespace] - Module's namespace
  15388. * @param {Object|Array} actions # Object's item can be a function which accept `dispatch` function as the first param, it can accept anthor params. You can dispatch action and do any other things in this function. specially, You need to pass anthor params from the mapped function.
  15389. * @return {Object}
  15390. */
  15391. var mapActions = normalizeNamespace(function (namespace, actions) {
  15392. var res = {};
  15393. if (( true) && !isValidMap(actions)) {
  15394. console.error('[vuex] mapActions: mapper parameter must be either an Array or an Object');
  15395. }
  15396. normalizeMap(actions).forEach(function (ref) {
  15397. var key = ref.key;
  15398. var val = ref.val;
  15399. res[key] = function mappedAction () {
  15400. var args = [], len = arguments.length;
  15401. while ( len-- ) args[ len ] = arguments[ len ];
  15402. // get dispatch function from store
  15403. var dispatch = this.$store.dispatch;
  15404. if (namespace) {
  15405. var module = getModuleByNamespace(this.$store, 'mapActions', namespace);
  15406. if (!module) {
  15407. return
  15408. }
  15409. dispatch = module.context.dispatch;
  15410. }
  15411. return typeof val === 'function'
  15412. ? val.apply(this, [dispatch].concat(args))
  15413. : dispatch.apply(this.$store, [val].concat(args))
  15414. };
  15415. });
  15416. return res
  15417. });
  15418. /**
  15419. * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object
  15420. * @param {String} namespace
  15421. * @return {Object}
  15422. */
  15423. var createNamespacedHelpers = function (namespace) { return ({
  15424. mapState: mapState.bind(null, namespace),
  15425. mapGetters: mapGetters.bind(null, namespace),
  15426. mapMutations: mapMutations.bind(null, namespace),
  15427. mapActions: mapActions.bind(null, namespace)
  15428. }); };
  15429. /**
  15430. * Normalize the map
  15431. * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]
  15432. * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]
  15433. * @param {Array|Object} map
  15434. * @return {Object}
  15435. */
  15436. function normalizeMap (map) {
  15437. if (!isValidMap(map)) {
  15438. return []
  15439. }
  15440. return Array.isArray(map)
  15441. ? map.map(function (key) { return ({ key: key, val: key }); })
  15442. : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })
  15443. }
  15444. /**
  15445. * Validate whether given map is valid or not
  15446. * @param {*} map
  15447. * @return {Boolean}
  15448. */
  15449. function isValidMap (map) {
  15450. return Array.isArray(map) || isObject(map)
  15451. }
  15452. /**
  15453. * Return a function expect two param contains namespace and map. it will normalize the namespace and then the param's function will handle the new namespace and the map.
  15454. * @param {Function} fn
  15455. * @return {Function}
  15456. */
  15457. function normalizeNamespace (fn) {
  15458. return function (namespace, map) {
  15459. if (typeof namespace !== 'string') {
  15460. map = namespace;
  15461. namespace = '';
  15462. } else if (namespace.charAt(namespace.length - 1) !== '/') {
  15463. namespace += '/';
  15464. }
  15465. return fn(namespace, map)
  15466. }
  15467. }
  15468. /**
  15469. * Search a special module from store by namespace. if module not exist, print error message.
  15470. * @param {Object} store
  15471. * @param {String} helper
  15472. * @param {String} namespace
  15473. * @return {Object}
  15474. */
  15475. function getModuleByNamespace (store, helper, namespace) {
  15476. var module = store._modulesNamespaceMap[namespace];
  15477. if (( true) && !module) {
  15478. console.error(("[vuex] module namespace not found in " + helper + "(): " + namespace));
  15479. }
  15480. return module
  15481. }
  15482. var index = {
  15483. Store: Store,
  15484. install: install,
  15485. version: '3.4.0',
  15486. mapState: mapState,
  15487. mapMutations: mapMutations,
  15488. mapGetters: mapGetters,
  15489. mapActions: mapActions,
  15490. createNamespacedHelpers: createNamespacedHelpers
  15491. };
  15492. /* harmony default export */ __webpack_exports__["default"] = (index);
  15493. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 3)))
  15494. /***/ }),
  15495. /***/ 7:
  15496. /*!*****************************************!*\
  15497. !*** D:/gsxm/ezred/store/model/user.js ***!
  15498. \*****************************************/
  15499. /*! no static exports found */
  15500. /***/ (function(module, exports, __webpack_require__) {
  15501. "use strict";
  15502. /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var state = {
  15503. userInfo: {}, //用户信息
  15504. orderInfo: {
  15505. complete_count: 0, //完成
  15506. received_count: 0, //待收货
  15507. unshipped_count: 0, //待发货
  15508. order_count: 0, //订单总数
  15509. unpaid_count: 0 //待付款
  15510. }, //订单信息
  15511. hasLogin: false //是否登录
  15512. };
  15513. var mutations = {
  15514. // 登录
  15515. login: function login(state) {
  15516. state.hasLogin = true;
  15517. },
  15518. // 退出登录
  15519. logout: function logout(state, provider) {
  15520. state.hasLogin = false;
  15521. // 清空基础信息
  15522. state.userInfo = {};
  15523. state.orderInfo = {
  15524. complete_count: 0, //完成
  15525. received_count: 0, //待收货
  15526. unshipped_count: 0, //待发货
  15527. order_count: 0, //订单总数
  15528. unpaid_count: 0 //待付款
  15529. };
  15530. // 清除缓存用户信息
  15531. uni.removeStorage({
  15532. key: 'userInfo' });
  15533. // 清除缓存token
  15534. uni.removeStorage({
  15535. key: 'token' });
  15536. },
  15537. // 保存用户信息
  15538. setUserInfo: function setUserInfo(state, provider) {
  15539. state.userInfo = provider;
  15540. uni.setStorage({ //缓存用户登陆状态
  15541. key: 'userInfo',
  15542. data: provider });
  15543. },
  15544. // 保存订单信息
  15545. setOrderInfo: function setOrderInfo(state, provider) {
  15546. state.orderInfo = provider;
  15547. } };
  15548. var getters = {};var _default =
  15549. {
  15550. namespaced: true,
  15551. state: state,
  15552. mutations: mutations,
  15553. getters: getters };exports.default = _default;
  15554. /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
  15555. /***/ }),
  15556. /***/ 81:
  15557. /*!**********************************!*\
  15558. !*** D:/gsxm/ezred/api/train.js ***!
  15559. \**********************************/
  15560. /*! no static exports found */
  15561. /***/ (function(module, exports, __webpack_require__) {
  15562. "use strict";
  15563. Object.defineProperty(exports, "__esModule", { value: true });exports.get_training = get_training;exports.detail_training = detail_training;exports.sign_training = sign_training;exports.add_volunteers = add_volunteers;exports.cell = cell;exports.get_cell = get_cell;exports.sign_cell = sign_cell;var _request = _interopRequireDefault(__webpack_require__(/*! @/utils/request */ 21));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
  15564. //救护培训系详情
  15565. function get_training(data) {
  15566. return (0, _request.default)({
  15567. url: '/api/get_training',
  15568. method: 'get',
  15569. data: data });
  15570. }
  15571. function detail_training(data) {
  15572. return (0, _request.default)({
  15573. url: '/api/detail_training',
  15574. method: 'get',
  15575. data: data });
  15576. }
  15577. //救护培训报名
  15578. function sign_training(data) {
  15579. return (0, _request.default)({
  15580. url: '/api/sign_training',
  15581. method: 'post',
  15582. data: data });
  15583. }
  15584. //志愿者报名
  15585. function add_volunteers(data) {
  15586. return (0, _request.default)({
  15587. url: '/api/add_registration',
  15588. method: 'post',
  15589. data: data });
  15590. }
  15591. // 造血干细胞列表
  15592. function cell(data) {
  15593. return (0, _request.default)({
  15594. url: '/api/cell',
  15595. method: 'get',
  15596. data: data });
  15597. }
  15598. // 造血干细胞详情
  15599. function get_cell(data) {
  15600. return (0, _request.default)({
  15601. url: '/api/get_cell',
  15602. method: 'get',
  15603. data: data });
  15604. }
  15605. function sign_cell(data) {
  15606. return (0, _request.default)({
  15607. url: '/api/sign_cell',
  15608. method: 'post',
  15609. data: data });
  15610. }
  15611. /***/ })
  15612. }]);
  15613. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vRTovSEJ1aWxkZXJYL3BsdWdpbnMvdW5pYXBwLWNsaS9ub2RlX21vZHVsZXMvQGRjbG91ZGlvL3VuaS1tcC10b3V0aWFvL2Rpc3QvaW5kZXguanMiLCJ1bmktYXBwOi8vL0U6L0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL0BkY2xvdWRpby92dWUtY2xpLXBsdWdpbi11bmkvcGFja2FnZXMvdnVlLWxvYWRlci9saWIvcnVudGltZS9jb21wb25lbnROb3JtYWxpemVyLmpzIiwidW5pLWFwcDovLy9FOi9IQnVpbGRlclgvcGx1Z2lucy91bmlhcHAtY2xpL25vZGVfbW9kdWxlcy9AZGNsb3VkaW8vdnVlLWNsaS1wbHVnaW4tdW5pL3BhY2thZ2VzL21wLXZ1ZS9kaXN0L21wLnJ1bnRpbWUuZXNtLmpzIiwidW5pLWFwcDovLy9hcGkvaW5kZXguanMiLCJ1bmktYXBwOi8vL3V0aWxzL3JlcXVlc3QuanMiLCJ1bmktYXBwOi8vL3V0aWxzL25ld1JlcXVlc3QuanMiLCJ1bmktYXBwOi8vL0U6L0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwidW5pLWFwcDovLy9FOi9IQnVpbGRlclgvcGx1Z2lucy91bmlhcHAtY2xpL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUtbW9kdWxlLmpzIiwidW5pLWFwcDovLy9FOi9IQnVpbGRlclgvcGx1Z2lucy91bmlhcHAtY2xpL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCJ1bmktYXBwOi8vL3V0aWxzL2xvZ2luVXRpbHMuanMiLCJ1bmktYXBwOi8vL2FwaS91c2VyLmpzIiwidW5pLWFwcDovLy91dGlscy93eEF1dGhvcml6ZWQuanMiLCJ1bmktYXBwOi8vL2FwaS93eC5qcyIsInVuaS1hcHA6Ly8vRTovSEJ1aWxkZXJYL3BsdWdpbnMvdW5pYXBwLWNsaS9ub2RlX21vZHVsZXMvd2VicGFjay9idWlsZGluL2dsb2JhbC5qcyIsInVuaS1hcHA6Ly8vbm9kZV9tb2R1bGVzL2p3ZWl4aW4tbW9kdWxlL291dC9pbmRleC5qcyIsInVuaS1hcHA6Ly8vYXBpL2luZm8uanMiLCJ1bmktYXBwOi8vL2FwaS9sb2dpbi5qcyIsInVuaS1hcHA6Ly8vY29tcG9uZW50cy9qc19zZGsveGItY29weS91bmktY29weS5qcyIsInVuaS1hcHA6Ly8vY29tcG9uZW50cy91bmktcG9wdXAvcG9wdXAuanMiLCJ1bmktYXBwOi8vL2NvbXBvbmVudHMvdW5pLXBvcHVwL21lc3NhZ2UuanMiLCJ1bmktYXBwOi8vL2NvbXBvbmVudHMvanlmLXBhcnNlci9saWJzL01wSHRtbFBhcnNlci5qcyIsInVuaS1hcHA6Ly8vY29tcG9uZW50cy9qeWYtcGFyc2VyL2xpYnMvY29uZmlnLmpzIiwidW5pLWFwcDovLy9jb21wb25lbnRzL2p5Zi1wYXJzZXIvbGlicy9Dc3NIYW5kbGVyLmpzIiwidW5pLWFwcDovLy9jb21wb25lbnRzL3dhbmdkaW5nLXBpY2tlckFkZHJlc3MvZGF0YS5qcyIsInVuaS1hcHA6Ly8vYXBpL2Fzay5qcyIsInVuaS1hcHA6Ly8vYXBpL21vbmV5LmpzIiwidW5pLWFwcDovLy9jb21wb25lbnRzL3VuaS1zd2lwZS1hY3Rpb24taXRlbS9tcG90aGVyLmpzIiwidW5pLWFwcDovLy9zdG9yZS9pbmRleC5qcyIsInVuaS1hcHA6Ly8vY29tcG9uZW50cy91bmktaWNvbnMvaWNvbnMuanMiLCJ1bmktYXBwOi8vL0U6L0hCdWlsZGVyWC9wbHVnaW5zL3VuaWFwcC1jbGkvbm9kZV9tb2R1bGVzL3Z1ZXgvZGlzdC92dWV4LmVzbS5qcyIsInVuaS1hcHA6Ly8vc3RvcmUvbW9kZWwvdXNlci5qcyIsInVuaS1hcHA6Ly8vYXBpL3RyYWluLmpzIl0sIm5hbWVzIjpbImI2NERlY29kZVVuaWNvZGUiLCJzdHIiLCJkZWNvZGVVUklDb21wb25lbnQiLCJhdG9iIiwic3BsaXQiLCJtYXAiLCJjIiwiY2hhckNvZGVBdCIsInRvU3RyaW5nIiwic2xpY2UiLCJqb2luIiwiZ2V0Q3VycmVudFVzZXJJbmZvIiwidG9rZW4iLCJ0dCIsImdldFN0b3JhZ2VTeW5jIiwidG9rZW5BcnIiLCJsZW5ndGgiLCJ1aWQiLCJyb2xlIiwicGVybWlzc2lvbiIsInRva2VuRXhwaXJlZCIsInVzZXJJbmZvIiwiSlNPTiIsInBhcnNlIiwiZXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJleHAiLCJpYXQiLCJ1bmlJZE1peGluIiwiVnVlIiwicHJvdG90eXBlIiwidW5pSURIYXNSb2xlIiwicm9sZUlkIiwiaW5kZXhPZiIsInVuaUlESGFzUGVybWlzc2lvbiIsInBlcm1pc3Npb25JZCIsInVuaUlEVG9rZW5WYWxpZCIsIkRhdGUiLCJub3ciLCJfdG9TdHJpbmciLCJPYmplY3QiLCJoYXNPd25Qcm9wZXJ0eSIsImlzRm4iLCJmbiIsImlzU3RyIiwiaXNQbGFpbk9iamVjdCIsIm9iaiIsImNhbGwiLCJoYXNPd24iLCJrZXkiLCJub29wIiwiY2FjaGVkIiwiY2FjaGUiLCJjcmVhdGUiLCJjYWNoZWRGbiIsImhpdCIsImNhbWVsaXplUkUiLCJjYW1lbGl6ZSIsInJlcGxhY2UiLCJfIiwidG9VcHBlckNhc2UiLCJIT09LUyIsImdsb2JhbEludGVyY2VwdG9ycyIsInNjb3BlZEludGVyY2VwdG9ycyIsIm1lcmdlSG9vayIsInBhcmVudFZhbCIsImNoaWxkVmFsIiwicmVzIiwiY29uY2F0IiwiQXJyYXkiLCJpc0FycmF5IiwiZGVkdXBlSG9va3MiLCJob29rcyIsImkiLCJwdXNoIiwicmVtb3ZlSG9vayIsImhvb2siLCJpbmRleCIsInNwbGljZSIsIm1lcmdlSW50ZXJjZXB0b3JIb29rIiwiaW50ZXJjZXB0b3IiLCJvcHRpb24iLCJrZXlzIiwiZm9yRWFjaCIsInJlbW92ZUludGVyY2VwdG9ySG9vayIsImFkZEludGVyY2VwdG9yIiwibWV0aG9kIiwicmVtb3ZlSW50ZXJjZXB0b3IiLCJ3cmFwcGVySG9vayIsImRhdGEiLCJpc1Byb21pc2UiLCJ0aGVuIiwicXVldWUiLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjYWxsYmFjayIsIndyYXBwZXJPcHRpb25zIiwib3B0aW9ucyIsIm5hbWUiLCJvbGRDYWxsYmFjayIsImNhbGxiYWNrSW50ZXJjZXB0b3IiLCJ3cmFwcGVyUmV0dXJuVmFsdWUiLCJyZXR1cm5WYWx1ZSIsInJldHVyblZhbHVlSG9va3MiLCJnZXRBcGlJbnRlcmNlcHRvckhvb2tzIiwic2NvcGVkSW50ZXJjZXB0b3IiLCJpbnZva2VBcGkiLCJhcGkiLCJwYXJhbXMiLCJpbnZva2UiLCJwcm9taXNlSW50ZXJjZXB0b3IiLCJyZWplY3QiLCJTWU5DX0FQSV9SRSIsIkNPTlRFWFRfQVBJX1JFIiwiQ09OVEVYVF9BUElfUkVfRVhDIiwiQVNZTkNfQVBJIiwiQ0FMTEJBQ0tfQVBJX1JFIiwiaXNDb250ZXh0QXBpIiwidGVzdCIsImlzU3luY0FwaSIsImlzQ2FsbGJhY2tBcGkiLCJoYW5kbGVQcm9taXNlIiwiY2F0Y2giLCJlcnIiLCJzaG91bGRQcm9taXNlIiwiZmluYWxseSIsImNvbnN0cnVjdG9yIiwidmFsdWUiLCJyZWFzb24iLCJwcm9taXNpZnkiLCJwcm9taXNlQXBpIiwic3VjY2VzcyIsImZhaWwiLCJjb21wbGV0ZSIsImFzc2lnbiIsIkVQUyIsIkJBU0VfREVWSUNFX1dJRFRIIiwiaXNJT1MiLCJkZXZpY2VXaWR0aCIsImRldmljZURQUiIsImNoZWNrRGV2aWNlV2lkdGgiLCJnZXRTeXN0ZW1JbmZvU3luYyIsInBsYXRmb3JtIiwicGl4ZWxSYXRpbyIsIndpbmRvd1dpZHRoIiwidXB4MnB4IiwibnVtYmVyIiwibmV3RGV2aWNlV2lkdGgiLCJOdW1iZXIiLCJyZXN1bHQiLCJNYXRoIiwiZmxvb3IiLCJpbnRlcmNlcHRvcnMiLCJiYXNlQXBpIiwiZnJlZXplIiwiX19wcm90b19fIiwiRXZlbnRDaGFubmVsIiwiaWQiLCJldmVudHMiLCJsaXN0ZW5lciIsImVtaXRDYWNoZSIsIm9uIiwiZXZlbnROYW1lIiwiYXJncyIsImZucyIsIm9wdCIsImFwcGx5IiwiZmlsdGVyIiwidHlwZSIsIl9hZGRMaXN0ZW5lciIsIl9jbGVhckNhY2hlIiwiY2FjaGVBcmdzIiwiZW1pdCIsInNoaWZ0IiwiZXZlbnRDaGFubmVscyIsImV2ZW50Q2hhbm5lbFN0YWNrIiwiaW5pdEV2ZW50Q2hhbm5lbCIsImV2ZW50Q2hhbm5lbCIsImdldEV2ZW50Q2hhbm5lbCIsIm5hdmlnYXRlVG8iLCJmcm9tQXJncyIsInRvQXJncyIsInVybCIsImZyb21SZXMiLCJ0b1JlcyIsImZpbmRFeGlzdHNQYWdlSW5kZXgiLCJwYWdlcyIsImdldEN1cnJlbnRQYWdlcyIsImxlbiIsInBhZ2UiLCIkcGFnZSIsImZ1bGxQYXRoIiwicmVkaXJlY3RUbyIsImV4aXN0cyIsImRlbHRhIiwiZXhpc3RzUGFnZUluZGV4IiwicHJldmlld0ltYWdlIiwiY3VycmVudEluZGV4IiwicGFyc2VJbnQiLCJjdXJyZW50IiwiaXNOYU4iLCJ1cmxzIiwiaXRlbSIsImluZGljYXRvciIsImxvb3AiLCJVVUlEX0tFWSIsImRldmljZUlkIiwiYWRkVXVpZCIsInJhbmRvbSIsInNldFN0b3JhZ2UiLCJhZGRTYWZlQXJlYUluc2V0cyIsInNhZmVBcmVhIiwic2FmZUFyZWFJbnNldHMiLCJ0b3AiLCJsZWZ0IiwicmlnaHQiLCJib3R0b20iLCJ3aW5kb3dIZWlnaHQiLCJnZXRTeXN0ZW1JbmZvIiwib05hbWUiLCJuTmFtZSIsImdldFVzZXJQcm9maWxlIiwiY2FuSVVzZSIsInRvZG9zIiwiY2FuSVVzZXMiLCJwcm90b2NvbHMiLCJjaG9vc2VJbWFnZSIsInNpemVUeXBlIiwiY29ubmVjdFNvY2tldCIsImNob29zZVZpZGVvIiwiY2FtZXJhIiwic2NhbkNvZGUiLCJvbmx5RnJvbUNhbWVyYSIsInNjYW5UeXBlIiwic3RhcnRBY2NlbGVyb21ldGVyIiwiaW50ZXJ2YWwiLCJzaG93VG9hc3QiLCJpbWFnZSIsIm1hc2siLCJzaG93TG9hZGluZyIsInNob3dNb2RhbCIsImNhbmNlbENvbG9yIiwiY29uZmlybUNvbG9yIiwic2hvd0FjdGlvblNoZWV0IiwiaXRlbUNvbG9yIiwibG9naW4iLCJzY29wZXMiLCJ0aW1lb3V0IiwiZ2V0VXNlckluZm8iLCJsYW5nIiwicmVxdWVzdFBheW1lbnQiLCJwYXkiLCJvcmRlckluZm8iLCJnZXRGaWxlSW5mbyIsImRpZ2VzdEFsZ29yaXRobSIsIkNBTExCQUNLUyIsInByb2Nlc3NDYWxsYmFjayIsIm1ldGhvZE5hbWUiLCJwcm9jZXNzUmV0dXJuVmFsdWUiLCJwcm9jZXNzQXJncyIsImFyZ3NPcHRpb24iLCJrZWVwRnJvbUFyZ3MiLCJrZXlPcHRpb24iLCJjb25zb2xlIiwid2FybiIsImtlZXBSZXR1cm5WYWx1ZSIsIndyYXBwZXIiLCJwcm90b2NvbCIsImFyZzEiLCJhcmcyIiwidG9kb0FwaXMiLCJUT0RPUyIsImNyZWF0ZVRvZG9BcGkiLCJ0b2RvQXBpIiwiZXJyTXNnIiwicHJvdmlkZXJzIiwib2F1dGgiLCJzaGFyZSIsInBheW1lbnQiLCJnZXRQcm92aWRlciIsInNlcnZpY2UiLCJwcm92aWRlciIsImV4dHJhQXBpIiwiZ2V0RW1pdHRlciIsIkVtaXR0ZXIiLCJnZXRVbmlFbWl0dGVyIiwiY3R4IiwiJG9uIiwiYXJndW1lbnRzIiwiJG9mZiIsIiRvbmNlIiwiJGVtaXQiLCJldmVudEFwaSIsImNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZlciIsIm1lZGlhUXVlcnlPYnNlcnZlciIsIm9yaWVudGF0aW9uIiwib2JzZXJ2ZSIsIm1hdGNoZXMiLCJpdGVtVmFsdWUiLCJkaXNjb25uZWN0IiwiTVBQYWdlIiwiUGFnZSIsIk1QQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiY3VzdG9taXplUkUiLCJjdXN0b21pemUiLCJpbml0VHJpZ2dlckV2ZW50IiwibXBJbnN0YW5jZSIsIm9sZFRyaWdnZXJFdmVudCIsInRyaWdnZXJFdmVudCIsImV2ZW50IiwiaW5pdEhvb2siLCJvbGRIb29rIiwiX18kd3JhcHBlcmVkIiwiYWZ0ZXIiLCJQQUdFX0VWRU5UX0hPT0tTIiwiaW5pdE1vY2tzIiwidm0iLCJtb2NrcyIsIiRtcCIsIm1wVHlwZSIsIm1vY2siLCJoYXNIb29rIiwidnVlT3B0aW9ucyIsImRlZmF1bHQiLCJleHRlbmRPcHRpb25zIiwic3VwZXIiLCJtaXhpbnMiLCJmaW5kIiwibWl4aW4iLCJpbml0SG9va3MiLCJtcE9wdGlvbnMiLCIkdm0iLCJfX2NhbGxfaG9vayIsImluaXRWdWVDb21wb25lbnQiLCJWdWVDb21wb25lbnQiLCJleHRlbmQiLCJpbml0U2xvdHMiLCJ2dWVTbG90cyIsIiRzbG90cyIsInNsb3ROYW1lIiwiJHNjb3BlZFNsb3RzIiwiaW5pdFZ1ZUlkcyIsInZ1ZUlkcyIsIl8kdnVlSWQiLCJfJHZ1ZVBpZCIsImluaXREYXRhIiwiY29udGV4dCIsIm1ldGhvZHMiLCJlIiwicHJvY2VzcyIsIlZVRV9BUFBfREVCVUciLCJzdHJpbmdpZnkiLCJfX2xpZmVjeWNsZV9ob29rc19fIiwiUFJPUF9UWVBFUyIsIlN0cmluZyIsIkJvb2xlYW4iLCJjcmVhdGVPYnNlcnZlciIsIm9ic2VydmVyIiwibmV3VmFsIiwib2xkVmFsIiwiaW5pdEJlaGF2aW9ycyIsImluaXRCZWhhdmlvciIsInZ1ZUJlaGF2aW9ycyIsImJlaGF2aW9ycyIsInZ1ZUV4dGVuZHMiLCJleHRlbmRzIiwidnVlTWl4aW5zIiwidnVlUHJvcHMiLCJwcm9wcyIsImJlaGF2aW9yIiwicHJvcGVydGllcyIsImluaXRQcm9wZXJ0aWVzIiwidnVlTWl4aW4iLCJwYXJzZVByb3BUeXBlIiwiZGVmYXVsdFZhbHVlIiwiZmlsZSIsImlzQmVoYXZpb3IiLCJ2dWVJZCIsImdlbmVyaWMiLCJzY29wZWRTbG90c0NvbXBpbGVyIiwic2V0RGF0YSIsIm9wdHMiLCJ3cmFwcGVyJDEiLCJtcCIsInN0b3BQcm9wYWdhdGlvbiIsInByZXZlbnREZWZhdWx0IiwidGFyZ2V0IiwiZGV0YWlsIiwibWFya2VySWQiLCJnZXRFeHRyYVZhbHVlIiwiZGF0YVBhdGhzQXJyYXkiLCJkYXRhUGF0aEFycmF5IiwiZGF0YVBhdGgiLCJwcm9wUGF0aCIsInZhbHVlUGF0aCIsInZGb3IiLCJpc0ludGVnZXIiLCJzdWJzdHIiLCJfX2dldF92YWx1ZSIsInZGb3JJdGVtIiwidkZvcktleSIsInByb2Nlc3NFdmVudEV4dHJhIiwiZXh0cmEiLCJleHRyYU9iaiIsIl9fYXJnc19fIiwiZ2V0T2JqQnlBcnJheSIsImFyciIsImVsZW1lbnQiLCJwcm9jZXNzRXZlbnRBcmdzIiwiaXNDdXN0b20iLCJpc0N1c3RvbU1QRXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwiZGF0YXNldCIsImNvbVR5cGUiLCJyZXQiLCJhcmciLCJPTkNFIiwiQ1VTVE9NIiwiaXNNYXRjaEV2ZW50VHlwZSIsImV2ZW50VHlwZSIsIm9wdFR5cGUiLCJnZXRDb250ZXh0Vm0iLCIkcGFyZW50IiwiJG9wdGlvbnMiLCIkc2NvcGUiLCJoYW5kbGVFdmVudCIsImV2ZW50T3B0cyIsImV2ZW50T3B0IiwiZXZlbnRzQXJyYXkiLCJjaGFyQXQiLCJpc09uY2UiLCJldmVudEFycmF5IiwiaGFuZGxlckN0eCIsImhhbmRsZXIiLCJvbmNlIiwiaW5pdEV2ZW50Q2hhbm5lbCQxIiwiZ2V0T3BlbmVyRXZlbnRDaGFubmVsIiwiX19ldmVudENoYW5uZWxfXyIsImNhbGxIb29rIiwiX19pZF9fIiwiaW5pdFNjb3BlZFNsb3RzUGFyYW1zIiwiY2VudGVyIiwicGFyZW50cyIsIiRoYXNTY29wZWRTbG90c1BhcmFtcyIsImhhcyIsIiRnZXRTY29wZWRTbG90c1BhcmFtcyIsIm9iamVjdCIsIiRzZXRTY29wZWRTbG90c1BhcmFtcyIsInByb3BzRGF0YSIsIiRmb3JjZVVwZGF0ZSIsImRlc3Ryb3llZCIsInBhcnNlQmFzZUFwcCIsImluaXRSZWZzIiwic3RvcmUiLCIkc3RvcmUiLCJtcEhvc3QiLCJiZWZvcmVDcmVhdGUiLCJnZXRBcHAiLCJhcHAiLCIkaTE4biIsIl9pMThuIiwiYXBwT3B0aW9ucyIsIm9uTGF1bmNoIiwiZ2xvYmFsRGF0YSIsIl9pc01vdW50ZWQiLCJmaW5kVm1CeVZ1ZUlkIiwidnVlUGlkIiwiJGNoaWxkcmVuIiwiY2hpbGRWbSIsInBhcmVudFZtIiwiQmVoYXZpb3IiLCJoYW5kbGVMaW5rIiwicGFyZW50IiwiaXNQYWdlIiwiX19ub2RlaWRfXyIsIl9fbm9kZUlkX18iLCJtaW5vclZlcnNpb24iLCJTREtWZXJzaW9uIiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCIkcmVmcyIsImNvbXBvbmVudHMiLCJzZWxlY3RBbGxDb21wb25lbnRzIiwiY29tcG9uZW50IiwicmVmIiwiZm9yQ29tcG9uZW50cyIsImluc3RhbmNlcyIsImluaXRSZWxhdGlvbiIsIm5vZGVJZCIsIndlYnZpZXdJZCIsIl9fd2Vidmlld0lkX18iLCJoYW5kbGVMaW5rJDEiLCIkcm9vdCIsInBhcnNlQXBwIiwiXyRmYWxsYmFjayIsImNyZWF0ZWQiLCJyb3V0ZSIsIl9fcm91dGVfXyIsIl9faW5pdF9pbmplY3Rpb25zIiwiX19pbml0X3Byb3ZpZGUiLCJjcmVhdGVBcHAiLCJBcHAiLCJlbmNvZGVSZXNlcnZlUkUiLCJlbmNvZGVSZXNlcnZlUmVwbGFjZXIiLCJjb21tYVJFIiwiZW5jb2RlIiwiZW5jb2RlVVJJQ29tcG9uZW50Iiwic3RyaW5naWZ5UXVlcnkiLCJlbmNvZGVTdHIiLCJ2YWwiLCJ1bmRlZmluZWQiLCJ2YWwyIiwieCIsInBhcnNlQmFzZUNvbXBvbmVudCIsInZ1ZUNvbXBvbmVudE9wdGlvbnMiLCJtdWx0aXBsZVNsb3RzIiwiYWRkR2xvYmFsQ2xhc3MiLCJjb21wb25lbnRPcHRpb25zIiwiX19maWxlIiwibGlmZXRpbWVzIiwiYXR0YWNoZWQiLCIkbW91bnQiLCJyZWFkeSIsImRldGFjaGVkIiwiJGRlc3Ryb3kiLCJwYWdlTGlmZXRpbWVzIiwic2hvdyIsImhpZGUiLCJyZXNpemUiLCJzaXplIiwiX19sIiwiX19lIiwiZXh0ZXJuYWxDbGFzc2VzIiwid3hzQ2FsbE1ldGhvZHMiLCJjYWxsTWV0aG9kIiwicGFyc2VDb21wb25lbnQiLCJfX2xpZmV0aW1lc19hdHRhY2hlZCIsImhvb2tzJDEiLCJwYXJzZUJhc2VQYWdlIiwidnVlUGFnZU9wdGlvbnMiLCJwYWdlT3B0aW9ucyIsIm9uTG9hZCIsInF1ZXJ5IiwiY29weVF1ZXJ5IiwiaXMiLCJwYXJzZVBhZ2UiLCJjcmVhdGVQYWdlIiwiY3JlYXRlQ29tcG9uZW50IiwiY3JlYXRlU3VicGFja2FnZUFwcCIsImFsbG93RGVmYXVsdCIsIm9uU2hvdyIsIm9uQXBwU2hvdyIsIm9uSGlkZSIsIm9uQXBwSGlkZSIsImdldExhdW5jaE9wdGlvbnNTeW5jIiwiY3JlYXRlUGx1Z2luIiwiY2FuSVVzZUFwaSIsImFwaU5hbWUiLCJ1bmkiLCJQcm94eSIsInNldCIsInVuaSQxIiwibG9hZEluZGV4cyIsImJhbm5lcmxpc3QiLCJpdGVtTGlzdCIsInVwbG9hZCIsImdyb29tNCIsImdyb29tMSIsImdyb29tMyIsIm15Q3JlYXRlQ2lyY2xlIiwiZ2V0TGlzdCIsImdldE51bWJlciIsImFkZF92b2x1bnRlZXJzIiwiam9pblNlYyIsImpvaW5TZWNjIiwiZ2V0ZGlzIiwidG9jYWxsIiwidHJhaW5pbmciLCJnZXRzZWVrIiwiZ2V0Y29tQWRkcmVzcyIsImdldHJlc2N1ZSIsImNoYW5nZV9yZXNjdWUiLCJnZXRMaXN0QUVEIiwiZ2V0TGlzdE1lY2hhbmlzbSIsImdldERpc3RhbmNlIiwiZGVsZXRlTGlzdCIsInJlc3BvbnNlIiwic3RhdHVzIiwiY29tbWl0IiwidGl0bGUiLCJjb25maXJtIiwibXNnIiwiZHVyYXRpb24iLCJpY29uIiwibG9nIiwicmVxdWVzdCIsImNvbmZpZyIsImhlYWRlciIsInVwRmlsc2UiLCJvcGVuIiwiYmFzZVVSTCIsImlzZXJyb3IiLCJyZXF1ZXN0RGF0YSIsInN0YXR1c0NvZGUiLCJ1cGxvYWRfaW1nX3VybCIsIlVwbG9hZGVyIiwiY2hvb3NlIiwibnVtIiwiY291bnQiLCJzb3VyY2VUeXBlIiwidGVtcEZpbGVQYXRocyIsInVwbG9hZF9vbmUiLCJwYXRoIiwidXBsb2FkRmlsZSIsImZpbGVQYXRoIiwidXBsb2FkRmlsZVJlcyIsImhpZGVMb2FkaW5nIiwicGF0aF9hcnIiLCJpbWdfdXJscyIsImltZ191cmwiLCJjaG9vc2VfYW5kX3VwbG9hZCIsIm1vZHVsZSIsImV4cG9ydHMiLCJyZXF1aXJlIiwiZ2V0QWN0aW9uUGFnZSIsImdldFBhZ2VVcmwiLCJvYmpLZXlzIiwiYSIsInBhZ2VVcmwiLCJzYXZlVXJsIiwic2V0U3RvcmFnZVN5bmMiLCJvcmRlckRhdGEiLCJ1c2VyaW5mbyIsInVzZXJpbmZvaWQiLCJ3ZWl4aW5PYmoiLCJzaGFyZURhdGEiLCJhcHBJZCIsImxvZ2luV2lueGluIiwic2V0VGltZW91dCIsIndlaXhpblNxIiwidWwiLCJzdGF0ZSIsInVybEZpbGUiLCJnZXRUaW1lIiwid2luZG93IiwibG9jYXRpb24iLCJocmVmIiwid2VpeGluZGF0YSIsImRlYnVnIiwidGltZXN0YW1wIiwibm9uY2VTdHIiLCJzaWduYXR1cmUiLCJqc0FwaUxpc3QiLCJzaGFyZUxvYWQiLCJtZXNzIiwibGluayIsImltZ1VybCIsImRlc2MiLCJpbWciLCJzeW5vcHNpcyIsIm9uTWVudVNoYXJlQXBwTWVzc2FnZSIsIm9uTWVudVNoYXJlVGltZWxpbmUiLCJ3ZWl4aW5oaWRlTWVudSIsImhpZGVNZW51SXRlbXMiLCJtZW51TGlzdCIsIm4iLCJvIiwiV2VpeGluSlNCcmlkZ2UiLCJyIiwiZCIsInQiLCJ0cmlnZ2VyIiwiTSIsInZlcmlmeUFwcElkIiwidmVyaWZ5U2lnblR5cGUiLCJ2ZXJpZnlUaW1lc3RhbXAiLCJ2ZXJpZnlOb25jZVN0ciIsInZlcmlmeVNpZ25hdHVyZSIsInRpbWVTdGFtcCIsInBhY2thZ2UiLCJwYXlTaWduIiwic2lnblR5cGUiLCJlcnJDb2RlIiwiZXJyX2NvZGUiLCJlcnJfZGVzYyIsImVycl9kZXRhaWwiLCJlcnJfbXNnIiwiZiIsInN1YnN0cmluZyIsInRvTG93ZXJDYXNlIiwiX2NvbXBsZXRlIiwiaXNJbm5lckludm9rZSIsImFsZXJ0IiwiY2FuY2VsIiwicyIsInAiLCJsIiwidSIsIkkiLCJhZGRFdmVudExpc3RlbmVyIiwialdlaXhpbiIsIm9uTWVudVNoYXJlUVEiLCJvbk1lbnVTaGFyZVdlaWJvIiwib25NZW51U2hhcmVRWm9uZSIsImdldExvY2F0aW9uIiwib3BlblByb2R1Y3RTcGVjaWZpY1ZpZXciLCJhZGRDYXJkIiwib3BlbkNhcmQiLCJjaG9vc2VXWFBheSIsIm9wZW5FbnRlcnByaXNlUmVkUGFja2V0Iiwic3RhcnRTZWFyY2hCZWFjb25zIiwic3RvcFNlYXJjaEJlYWNvbnMiLCJvblNlYXJjaEJlYWNvbnMiLCJjb25zdW1lQW5kU2hhcmVDYXJkIiwib3BlbkFkZHJlc3MiLCJkb2N1bWVudCIsIm0iLCJnIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiaCIsInYiLCJtYXRjaCIsIlMiLCJ5IiwidyIsIk8iLCJrIiwiaW5pdFN0YXJ0VGltZSIsImluaXRFbmRUaW1lIiwicHJlVmVyaWZ5U3RhcnRUaW1lIiwicHJlVmVyaWZ5RW5kVGltZSIsIlQiLCJ2ZXJzaW9uIiwiaW5pdFRpbWUiLCJwcmVWZXJpZnlUaW1lIiwibmV0d29ya1R5cGUiLCJpc1ByZVZlcmlmeU9rIiwic3lzdGVtVHlwZSIsImNsaWVudFZlcnNpb24iLCJQIiwiX2NvbXBsZXRlcyIsIkEiLCJWIiwiQyIsImNoZWNrIiwidmVyaWZ5SnNBcGlMaXN0IiwiX2ZhaWwiLCJJbWFnZSIsImdldE5ldHdvcmtUeXBlIiwic3JjIiwiY2hlY2tKc0FwaSIsImNoZWNrUmVzdWx0IiwiZGF0YV91cmwiLCJkYXRhVXJsIiwic2NlbmUiLCJ1cGRhdGVUaW1lbGluZVNoYXJlRGF0YSIsInVwZGF0ZUFwcE1lc3NhZ2VTaGFyZURhdGEiLCJzdGFydFJlY29yZCIsInN0b3BSZWNvcmQiLCJvblZvaWNlUmVjb3JkRW5kIiwicGxheVZvaWNlIiwibG9jYWxJZCIsInBhdXNlVm9pY2UiLCJzdG9wVm9pY2UiLCJvblZvaWNlUGxheUVuZCIsInVwbG9hZFZvaWNlIiwiaXNTaG93UHJvZ3Jlc3NUaXBzIiwiZG93bmxvYWRWb2ljZSIsInNlcnZlcklkIiwidHJhbnNsYXRlVm9pY2UiLCJsb2NhbElkcyIsInVwbG9hZEltYWdlIiwiZG93bmxvYWRJbWFnZSIsImdldExvY2FsSW1nRGF0YSIsInd4Iiwic3VidHlwZSIsIm9wZW5Mb2NhdGlvbiIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwiYWRkcmVzcyIsInNjYWxlIiwiaW5mb1VybCIsIm5lZWRSZXN1bHQiLCJyZXN1bHRTdHIiLCJzY2FuX2NvZGUiLCJzY2FuX3Jlc3VsdCIsInBvc3RhbENvZGUiLCJhZGRyZXNzUG9zdGFsQ29kZSIsInByb3ZpbmNlTmFtZSIsInByb3ZpY2VGaXJzdFN0YWdlTmFtZSIsImNpdHlOYW1lIiwiYWRkcmVzc0NpdHlTZWNvbmRTdGFnZU5hbWUiLCJjb3VudHJ5TmFtZSIsImFkZHJlc3NDb3VudGllc1RoaXJkU3RhZ2VOYW1lIiwiZGV0YWlsSW5mbyIsImFkZHJlc3NEZXRhaWxJbmZvIiwicGlkIiwicHJvZHVjdElkIiwidmlld190eXBlIiwidmlld1R5cGUiLCJleHRfaW5mbyIsImV4dEluZm8iLCJjYXJkTGlzdCIsImNhcmRfaWQiLCJjYXJkSWQiLCJjYXJkX2V4dCIsImNhcmRFeHQiLCJjYXJkX2xpc3QiLCJpc1N1Y2Nlc3MiLCJpc19zdWNjIiwiYXBwX2lkIiwibG9jYXRpb25faWQiLCJzaG9wSWQiLCJzaWduX3R5cGUiLCJjYXJkX3R5cGUiLCJjYXJkVHlwZSIsImNhcmRfc2lnbiIsImNhcmRTaWduIiwidGltZV9zdGFtcCIsIm5vbmNlX3N0ciIsImNob29zZV9jYXJkX2luZm8iLCJjb2RlIiwiY29uc3VtZWRDYXJkSWQiLCJjb25zdW1lZENvZGUiLCJ0aWNrZXQiLCJ1c2VyaWRsaXN0IiwidXNlcklkcyIsImNoYXRuYW1lIiwiZ3JvdXBOYW1lIiwidGFyZ2V0QXBwSWQiLCJlbnZWZXJzaW9uIiwibmF2aWdhdGVCYWNrIiwic3dpdGNoVGFiIiwicmVMYXVuY2giLCJwb3N0TWVzc2FnZSIsImdldEVudiIsIm1pbmlwcm9ncmFtIiwiX193eGpzX2Vudmlyb25tZW50IiwiTCIsIkIiLCJ0YWdOYW1lIiwibG9jYWxEYXRhIiwiYXJ0aWNsZXRvcCIsImFydGljbGVkZWwiLCJkZXRhaWxzIiwiZGVjb25zdHJ1Y3RBcnRpY2xlIiwicmVnaXN0ZXIiLCJ2ZXJpZnkiLCJsb2dpbk1vYmlsZSIsInVuaUNvcHkiLCJjb250ZW50Iiwic2V0Q2xpcGJvYXJkRGF0YSIsImRpYWxvZyIsIm1hc2tTaG93IiwiY2hpbGRyZW5Nc2ciLCJjdXN0b21PcGVuIiwiY3VzdG9tQ2xvc2UiLCJjbG9zZSIsImNmZyIsImJsYW5rQ2hhciIsIkNzc0hhbmRsZXIiLCJlbW9qaSIsIk1wSHRtbFBhcnNlciIsImF0dHJzIiwidGFnU3R5bGUiLCJkb21haW4iLCJET00iLCJzdGFydCIsImF1ZGlvTnVtIiwiaW1nTnVtIiwidmlkZW9OdW0iLCJwcm90IiwiaW5jbHVkZXMiLCJUZXh0IiwiU1RBQ0siLCJidWJibGUiLCJyaWNoT25seVRhZ3MiLCJkZWNvZGUiLCJhbXAiLCJqIiwiZW4iLCJmcm9tQ2hhckNvZGUiLCJlbnRpdGllcyIsImdldFVybCIsImlzQ2xvc2UiLCJzZWN0aW9uIiwic2libGluZ3MiLCJjaGlsZHJlbiIsInBhcnNlRW1vamkiLCJzZXRUZXh0IiwicG9wTm9kZSIsInBvcCIsInNldEF0dHIiLCJhdHRyTmFtZSIsImF0dHJWYWwiLCJib29sQXR0cnMiLCJzZXROb2RlIiwiQXR0ck5hbWUiLCJiYWNrIiwidGV4dCIsIm9uVGV4dCIsInByZSIsImZsYWciLCJ0bXAiLCJ1bnNoaWZ0Iiwibm9kZSIsInNlbGZDbG9zaW5nVGFncyIsIm5vZGVzIiwiaWdub3JlVGFncyIsInN0eWxlIiwic3R5bGVPYmoiLCJjb21wcmVzcyIsInVzZUFuY2hvciIsImNsYXNzIiwiY29sb3IiLCJmYWNlIiwiYXV0b3N0YXJ0IiwiYXV0b3BsYXkiLCJjb250cm9scyIsImxhenlMb2FkIiwid2lkdGgiLCJwYXJzZUZsb2F0IiwiaGVpZ2h0Iiwic291cmNlIiwiY29sc3BhbiIsInJvd3NwYW4iLCJhbGlnbiIsInN0eWxlcyIsImluZm8iLCJ0cmltIiwiaWdub3JlIiwiJCIsImhpZ2hsaWdodCIsInJlbW92ZSIsImhhbmRsZVN2ZyIsInhtbG5zIiwiZXhlYyIsImdldFN0eWxlIiwiY2hpbGRzIiwiYmxvY2tUYWdzIiwidHJ1c3RUYWdzIiwiY2hpbGQiLCJvbmUiLCJ0ZW4iLCJwYWRkaW5nIiwiY2VsbHBhZGRpbmciLCJzcGFjaW5nIiwiY2VsbHNwYWNpbmciLCJib3JkZXIiLCJucyIsImF1dG9zY3JvbGwiLCJ0YWJsZSIsIm5leHQiLCJpc0xldHRlciIsIlRhZ05hbWUiLCJFbmRUYWciLCJDb21tZW50IiwiQXR0clZhbHVlIiwiZXJyb3JJbWciLCJxdW90IiwiYXBvcyIsInNlbWkiLCJuYnNwIiwiZW5zcCIsImVtc3AiLCJuZGFzaCIsIm1kYXNoIiwibWlkZG90IiwibHNxdW8iLCJyc3F1byIsImxkcXVvIiwicmRxdW8iLCJidWxsIiwiaGVsbGlwIiwibWFrZU1hcCIsInVzZXJBZ2VudFN0eWxlcyIsImJpZyIsImJsb2NrcXVvdGUiLCJjYXB0aW9uIiwiY2l0ZSIsImRkIiwibWFyayIsInNtYWxsIiwibGlzdCIsInBhcnNlciIsIm1hdGNoZWQiLCJpdGVtcyIsImluaXQiLCJTcGFjZSIsIk5hbWUiLCJJZ25vcmUiLCJOYW1lU3BhY2UiLCJDb250ZW50IiwiQ29tbWEiLCJhZGRyZXNjdWVyIiwiYXJ0aWNsZXNhdmUiLCJteWFydGljbGUiLCJyZXBseWFzayIsInJlcGx5bGlzdCIsIm15cmVwbHlsaXN0IiwibWVjaGFuaXNtIiwiY2hvc2ludGVudGlvbiIsImpvaW5Eb25hIiwiZ2V0RG9uYUxpc3QiLCJNeURvbmFMaXN0IiwiZ2V0Q2VydGlmaWNhdGUiLCJjb21wdXRlZE9yZGVya2V5Iiwib3JkZXJrZXkiLCJjcmVhdGVPcmRlcmtleSIsImJhbGFuY2UiLCJvcmRlclBheSIsIk1JTl9ESVNUQU5DRSIsInVuaVNob3ciLCJidXR0b25TaG93IiwiYW5pIiwibW92ZUxlZnQiLCJ3YXRjaCIsImF1dG9DbG9zZSIsIm9wZW5TdGF0ZSIsImxlZnRPcHRpb25zIiwicmlnaHRPcHRpb25zIiwibW91bnRlZCIsInN3aXBlYWN0aW9uIiwiYmVmb3JlRGVzdG95IiwiY2xlYXJUaW1lb3V0IiwidGltZXIiLCJnZXRTZWxlY3RvclF1ZXJ5IiwiY2xvc2VTd2lwZSIsImNsb3NlT3RoZXIiLCJhcHBUb3VjaFN0YXJ0IiwiY2xpZW50WCIsImNoYW5nZWRUb3VjaGVzIiwiYXBwVG91Y2hFbmQiLCJwb3NpdGlvbiIsImRpZmYiLCJhYnMiLCJ0aW1lIiwidG91Y2hzdGFydCIsImRpc2FibGVkIiwic3RvcFRvdWNoU3RhcnQiLCJ0b3VjaG1vdmUiLCJzdG9wVG91Y2hNb3ZlIiwiZGlyZWN0aW9uIiwibW92ZSIsImRlbHRhWCIsInRvdWNoZW5kIiwibW92ZURpcmVjdGlvbiIsImxlZnRXaWR0aCIsInJpZ2h0V2lkdGgiLCJyYW5nZSIsIm1pbiIsIm1heCIsInRocmVzaG9sZCIsImlzb3BlbiIsInRocm90dGxlIiwiJG5leHRUaWNrIiwiZ2V0RGlyZWN0aW9uIiwicmVzZXRUb3VjaFN0YXR1cyIsImRlbHRhWSIsIm9mZnNldFgiLCJvZmZzZXRZIiwidG91Y2giLCJ0b3VjaGVzIiwic3RhcnRYIiwic3RhcnRZIiwiY2xpZW50WSIsInZpZXdzIiwiY3JlYXRlU2VsZWN0b3JRdWVyeSIsImluIiwic2VsZWN0QWxsIiwiYm91bmRpbmdDbGllbnRSZWN0IiwidXNlIiwiVnVleCIsIlN0b3JlIiwibG9naW5JbnRlcmNlcHRvciIsIm11dGF0aW9ucyIsIm1vZHVsZXMiLCJ1c2VyIiwiYWN0aW9ucyIsImNvbXBsZXRlX2NvdW50IiwicmVjZWl2ZWRfY291bnQiLCJ1bnNoaXBwZWRfY291bnQiLCJvcmRlcl9jb3VudCIsInVucGFpZF9jb3VudCIsImhhc0xvZ2luIiwibG9nb3V0IiwicmVtb3ZlU3RvcmFnZSIsInNldFVzZXJJbmZvIiwic2V0T3JkZXJJbmZvIiwiZ2V0dGVycyIsIm5hbWVzcGFjZWQiLCJnZXRfdHJhaW5pbmciLCJkZXRhaWxfdHJhaW5pbmciLCJzaWduX3RyYWluaW5nIiwiY2VsbCIs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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDbEhBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsMkJBQTJCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxDQUFDOztBQUVEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsaUJBQWlCO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFFUTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUIsMkJBQTJCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLFNBQVM7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FB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O0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLE9BQU87QUFDOUM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLFNBQVM7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsSUFBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsT0FBTztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7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Q0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLEtBQXFDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7O0FBSUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixLQUFxQztBQUN6RDtBQUNBLE1BQU0sU0FBRTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDJCQUEyQjtBQUM5QyxxQkFBcUIsK0JBQStCO0FBQ3BEO0FBQ0E7QUFDQSxHQUFHO0FBQ0gseUJBQXlCO0FBQ3pCO0FBQ0Esc0JBQXNCLGlDQUFpQztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0U7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLLE1BQU0sRUFFTjtBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxVQUFVLElBQXFDO0FBQ3BEO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSw4QkFBOEI7QUFDOUIsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBLEtBQUssTUFBTSxFQUVOO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0Esc0NBQXNDO0FBQ3RDLDhDOztBQUVBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsZUFBZTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0U7QUFDdEU7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsWUFBWSxLQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0EsMENBQTBDLDJCQUEyQixFQUFFO0FBQ3ZFLEtBQUs7QUFDTDtBQUNBLDBDQUEwQyw0QkFBNEIsRUFBRTtBQUN4RSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FB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QUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFF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RUFoQk07OztBQXNCTjtBQUNFLFlBQVEsS0FEVjtBQUVFLFlBQVE7QUFDTixRQURNLENBRlYsRUF0Qk07OztBQTRCTjtBQUNFLFlBQVEsS0FEVjtBQUVFLFlBQVE7QUFDTixRQURNLENBRlYsRUE1Qk07OztBQWtDTjtBQUNFLFlBQVEsS0FEVjtBQUVFLFlBQVE7QUFDTixRQURNLENBRlYsRUFsQ007OztBQXdDTjtBQUNFLFlBQVEsS0FEVjtBQUVFLFlBQVE7QUFDTixRQURNLENBRlYsRUF4Q007OztBQThDTjtBQUNFLFlBQVEsS0FEVjtBQUVFLFlBQVE7QUFDTixRQURNLENBRlYsRUE5Q007OztBQW9ETjtBQUNFLFlBQVEsS0FEVjtBQUVFLFlBQVE7QUFDTixTQURNLENBRlYsRUFwRE07OztBQTBETjtBQUNFLFlBQVEsS0FEVjtBQUVFLFlBQVE7QUFDTixTQURNLENBRlYsRUExRE07OztBQWdFTjtBQUNFLFlBQVEsS0FEVjtBQUVFLFlBQVE7QUFDTixTQURNLENBRlYsRUFoRU07OztBQXNFTjtBQUNFLFlBQVEsS0FEVjtBQUVFLFlBQVE7QUFDTixTQURNLENBRlYsRUF0RU07OztBQTRFTjtBQUNFLFlBQVEsU0FEVjtBQUVFLFlBQVE7QUFDTixhQURNLENBRlYsRUE1RU07OztBQWtGTjtBQUNFLFlBQVEsU0FEVjtBQUVFLFlBQVE7QUFDTixhQURNLENBRlYsRUFsRk07OztBQXdGTjtBQUNFLFlBQVEsU0FEVjtBQUVFLFlBQVE7QUFDTixhQURNLENBRlYsRUF4Rk07OztBQThGTjtBQUNFLFlBQVEsU0FEVjtBQUVFLFlBQVE7QUFDTixhQURNLENBRlYsRUE5Rk07OztBQW9HTjtBQUNFLFlBQVEsV0FEVjtBQUVFLFlBQVE7QUFDTixlQURNLENBRlYsRUFwR007OztBQTBHTjtBQUNFLFlBQVEsV0FEVjtBQUVFLFlBQVE7QUFDTixlQURNLENBRlYsRUExR00sQ0FGVixFQXhyR2E7Ozs7O0FBNHlHYjtBQUNFLFVBQVEsS0FEVjtBQUVFLFVBQVE7QUFDTjtBQUNFLFlBQVEsS0FEVjtBQUVFLFlBQVE7QUFDTixT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aW1wb3J0IFZ1ZSBmcm9tICd2dWUnO1xyXG5cclxuZnVuY3Rpb24gYjY0RGVjb2RlVW5pY29kZSAoc3RyKSB7XHJcbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChhdG9iKHN0cikuc3BsaXQoJycpLm1hcChmdW5jdGlvbiAoYykge1xyXG4gICAgcmV0dXJuICclJyArICgnMDAnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpXHJcbiAgfSkuam9pbignJykpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEN1cnJlbnRVc2VySW5mbyAoKSB7XHJcbiAgY29uc3QgdG9rZW4gPSAoIHR0KS5nZXRTdG9yYWdlU3luYygndW5pX2lkX3Rva2VuJykgfHwgJyc7XHJcbiAgY29uc3QgdG9rZW5BcnIgPSB0b2tlbi5zcGxpdCgnLicpO1xyXG4gIGlmICghdG9rZW4gfHwgdG9rZW5BcnIubGVuZ3RoICE9PSAzKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB1aWQ6IG51bGwsXHJcbiAgICAgIHJvbGU6IFtdLFxyXG4gICAgICBwZXJtaXNzaW9uOiBbXSxcclxuICAgICAgdG9rZW5FeHBpcmVkOiAwXHJcbiAgICB9XHJcbiAgfVxyXG4gIGxldCB1c2VySW5mbztcclxuICB0cnkge1xyXG4gICAgdXNlckluZm8gPSBKU09OLnBhcnNlKGI2NERlY29kZVVuaWNvZGUodG9rZW5BcnJbMV0pKTtcclxuICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCfojrflj5blvZPliY3nlKjmiLfkv6Hmga/lh7rplJnvvIzor6bnu4bplJnor6/kv6Hmga/kuLrvvJonICsgZXJyb3IubWVzc2FnZSlcclxuICB9XHJcbiAgdXNlckluZm8udG9rZW5FeHBpcmVkID0gdXNlckluZm8uZXhwICogMTAwMDtcclxuICBkZWxldGUgdXNlckluZm8uZXhwO1xyXG4gIGRlbGV0ZSB1c2VySW5mby5pYXQ7XHJcbiAgcmV0dXJuIHVzZXJJbmZvXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVuaUlkTWl4aW4gKFZ1ZSkge1xyXG4gIFZ1ZS5wcm90b3R5cGUudW5pSURIYXNSb2xlID0gZnVuY3Rpb24gKHJvbGVJZCkge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICByb2xlXHJcbiAgICB9ID0gZ2V0Q3VycmVudFVzZXJJbmZvKCk7XHJcbiAgICByZXR1cm4gcm9sZS5pbmRleE9mKHJvbGVJZCkgPiAtMVxyXG4gIH07XHJcbiAgVnVlLnByb3RvdHlwZS51bmlJREhhc1Blcm1pc3Npb24gPSBmdW5jdGlvbiAocGVybWlzc2lvbklkKSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHBlcm1pc3Npb25cclxuICAgIH0gPSBnZXRDdXJyZW50VXNlckluZm8oKTtcclxuICAgIHJldHVybiB0aGlzLnVuaUlESGFzUm9sZSgnYWRtaW4nKSB8fCBwZXJtaXNzaW9uLmluZGV4T2YocGVybWlzc2lvbklkKSA+IC0xXHJcbiAgfTtcclxuICBWdWUucHJvdG90eXBlLnVuaUlEVG9rZW5WYWxpZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgdG9rZW5FeHBpcmVkXHJcbiAgICB9ID0gZ2V0Q3VycmVudFVzZXJJbmZvKCk7XHJcbiAgICByZXR1cm4gdG9rZW5FeHBpcmVkID4gRGF0ZS5ub3coKVxyXG4gIH07XHJcbn1cclxuXHJcbmNvbnN0IF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XHJcbmNvbnN0IGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcclxuXHJcbmZ1bmN0aW9uIGlzRm4gKGZuKSB7XHJcbiAgcmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJ1xyXG59XHJcblxyXG5mdW5jdGlvbiBpc1N0ciAoc3RyKSB7XHJcbiAgcmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QgKG9iaikge1xyXG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBPYmplY3RdJ1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYXNPd24gKG9iaiwga2V5KSB7XHJcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIG5vb3AgKCkge31cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGUgYSBjYWNoZWQgdmVyc2lvbiBvZiBhIHB1cmUgZnVuY3Rpb24uXHJcbiAqL1xyXG5mdW5jdGlvbiBjYWNoZWQgKGZuKSB7XHJcbiAgY29uc3QgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gIHJldHVybiBmdW5jdGlvbiBjYWNoZWRGbiAoc3RyKSB7XHJcbiAgICBjb25zdCBoaXQgPSBjYWNoZVtzdHJdO1xyXG4gICAgcmV0dXJuIGhpdCB8fCAoY2FjaGVbc3RyXSA9IGZuKHN0cikpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ2FtZWxpemUgYSBoeXBoZW4tZGVsaW1pdGVkIHN0cmluZy5cclxuICovXHJcbmNvbnN0IGNhbWVsaXplUkUgPSAvLShcXHcpL2c7XHJcbmNvbnN0IGNhbWVsaXplID0gY2FjaGVkKChzdHIpID0+IHtcclxuICByZXR1cm4gc3RyLnJlcGxhY2UoY2FtZWxpemVSRSwgKF8sIGMpID0+IGMgPyBjLnRvVXBwZXJDYXNlKCkgOiAnJylcclxufSk7XHJcblxyXG5jb25zdCBIT09LUyA9IFtcclxuICAnaW52b2tlJyxcclxuICAnc3VjY2VzcycsXHJcbiAgJ2ZhaWwnLFxyXG4gICdjb21wbGV0ZScsXHJcbiAgJ3JldHVyblZhbHVlJ1xyXG5dO1xyXG5cclxuY29uc3QgZ2xvYmFsSW50ZXJjZXB0b3JzID0ge307XHJcbmNvbnN0IHNjb3BlZEludGVyY2VwdG9ycyA9IHt9O1xyXG5cclxuZnVuY3Rpb24gbWVyZ2VIb29rIChwYXJlbnRWYWwsIGNoaWxkVmFsKSB7XHJcbiAgY29uc3QgcmVzID0gY2hpbGRWYWxcclxuICAgID8gcGFyZW50VmFsXHJcbiAgICAgID8gcGFyZW50VmFsLmNvbmNhdChjaGlsZFZhbClcclxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkVmFsKVxyXG4gICAgICAgID8gY2hpbGRWYWwgOiBbY2hpbGRWYWxdXHJcbiAgICA6IHBhcmVudFZhbDtcclxuICByZXR1cm4gcmVzXHJcbiAgICA/IGRlZHVwZUhvb2tzKHJlcylcclxuICAgIDogcmVzXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZHVwZUhvb2tzIChob29rcykge1xyXG4gIGNvbnN0IHJlcyA9IFtdO1xyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcclxuICAgIGlmIChyZXMuaW5kZXhPZihob29rc1tpXSkgPT09IC0xKSB7XHJcbiAgICAgIHJlcy5wdXNoKGhvb2tzW2ldKTtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHJlc1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVIb29rIChob29rcywgaG9vaykge1xyXG4gIGNvbnN0IGluZGV4ID0gaG9va3MuaW5kZXhPZihob29rKTtcclxuICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICBob29rcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gbWVyZ2VJbnRlcmNlcHRvckhvb2sgKGludGVyY2VwdG9yLCBvcHRpb24pIHtcclxuICBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goaG9vayA9PiB7XHJcbiAgICBpZiAoSE9PS1MuaW5kZXhPZihob29rKSAhPT0gLTEgJiYgaXNGbihvcHRpb25baG9va10pKSB7XHJcbiAgICAgIGludGVyY2VwdG9yW2hvb2tdID0gbWVyZ2VIb29rKGludGVyY2VwdG9yW2hvb2tdLCBvcHRpb25baG9va10pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW1vdmVJbnRlcmNlcHRvckhvb2sgKGludGVyY2VwdG9yLCBvcHRpb24pIHtcclxuICBpZiAoIWludGVyY2VwdG9yIHx8ICFvcHRpb24pIHtcclxuICAgIHJldHVyblxyXG4gIH1cclxuICBPYmplY3Qua2V5cyhvcHRpb24pLmZvckVhY2goaG9vayA9PiB7XHJcbiAgICBpZiAoSE9PS1MuaW5kZXhPZihob29rKSAhPT0gLTEgJiYgaXNGbihvcHRpb25baG9va10pKSB7XHJcbiAgICAgIHJlbW92ZUhvb2soaW50ZXJjZXB0b3JbaG9va10sIG9wdGlvbltob29rXSk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZEludGVyY2VwdG9yIChtZXRob2QsIG9wdGlvbikge1xyXG4gIGlmICh0eXBlb2YgbWV0aG9kID09PSAnc3RyaW5nJyAmJiBpc1BsYWluT2JqZWN0KG9wdGlvbikpIHtcclxuICAgIG1lcmdlSW50ZXJjZXB0b3JIb29rKHNjb3BlZEludGVyY2VwdG9yc1ttZXRob2RdIHx8IChzY29wZWRJbnRlcmNlcHRvcnNbbWV0aG9kXSA9IHt9KSwgb3B0aW9uKTtcclxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QobWV0aG9kKSkge1xyXG4gICAgbWVyZ2VJbnRlcmNlcHRvckhvb2soZ2xvYmFsSW50ZXJjZXB0b3JzLCBtZXRob2QpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlSW50ZXJjZXB0b3IgKG1ldGhvZCwgb3B0aW9uKSB7XHJcbiAgaWYgKHR5cGVvZiBtZXRob2QgPT09ICdzdHJpbmcnKSB7XHJcbiAgICBpZiAoaXNQbGFpbk9iamVjdChvcHRpb24pKSB7XHJcbiAgICAgIHJlbW92ZUludGVyY2VwdG9ySG9vayhzY29wZWRJbnRlcmNlcHRvcnNbbWV0aG9kXSwgb3B0aW9uKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlbGV0ZSBzY29wZWRJbnRlcmNlcHRvcnNbbWV0aG9kXTtcclxuICAgIH1cclxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QobWV0aG9kKSkge1xyXG4gICAgcmVtb3ZlSW50ZXJjZXB0b3JIb29rKGdsb2JhbEludGVyY2VwdG9ycywgbWV0aG9kKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdyYXBwZXJIb29rIChob29rKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICByZXR1cm4gaG9vayhkYXRhKSB8fCBkYXRhXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpc1Byb21pc2UgKG9iaikge1xyXG4gIHJldHVybiAhIW9iaiAmJiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykgJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHF1ZXVlIChob29rcywgZGF0YSkge1xyXG4gIGxldCBwcm9taXNlID0gZmFsc2U7XHJcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBob29rcy5sZW5ndGg7IGkrKykge1xyXG4gICAgY29uc3QgaG9vayA9IGhvb2tzW2ldO1xyXG4gICAgaWYgKHByb21pc2UpIHtcclxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh3cmFwcGVySG9vayhob29rKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCByZXMgPSBob29rKGRhdGEpO1xyXG4gICAgICBpZiAoaXNQcm9taXNlKHJlcykpIHtcclxuICAgICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHJlcyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlcyA9PT0gZmFsc2UpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgdGhlbiAoKSB7IH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIHByb21pc2UgfHwge1xyXG4gICAgdGhlbiAoY2FsbGJhY2spIHtcclxuICAgICAgcmV0dXJuIGNhbGxiYWNrKGRhdGEpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiB3cmFwcGVyT3B0aW9ucyAoaW50ZXJjZXB0b3IsIG9wdGlvbnMgPSB7fSkge1xyXG4gIFsnc3VjY2VzcycsICdmYWlsJywgJ2NvbXBsZXRlJ10uZm9yRWFjaChuYW1lID0+IHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGludGVyY2VwdG9yW25hbWVdKSkge1xyXG4gICAgICBjb25zdCBvbGRDYWxsYmFjayA9IG9wdGlvbnNbbmFtZV07XHJcbiAgICAgIG9wdGlvbnNbbmFtZV0gPSBmdW5jdGlvbiBjYWxsYmFja0ludGVyY2VwdG9yIChyZXMpIHtcclxuICAgICAgICBxdWV1ZShpbnRlcmNlcHRvcltuYW1lXSwgcmVzKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW1peGVkLW9wZXJhdG9ycyAqL1xyXG4gICAgICAgICAgcmV0dXJuIGlzRm4ob2xkQ2FsbGJhY2spICYmIG9sZENhbGxiYWNrKHJlcykgfHwgcmVzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgcmV0dXJuIG9wdGlvbnNcclxufVxyXG5cclxuZnVuY3Rpb24gd3JhcHBlclJldHVyblZhbHVlIChtZXRob2QsIHJldHVyblZhbHVlKSB7XHJcbiAgY29uc3QgcmV0dXJuVmFsdWVIb29rcyA9IFtdO1xyXG4gIGlmIChBcnJheS5pc0FycmF5KGdsb2JhbEludGVyY2VwdG9ycy5yZXR1cm5WYWx1ZSkpIHtcclxuICAgIHJldHVyblZhbHVlSG9va3MucHVzaCguLi5nbG9iYWxJbnRlcmNlcHRvcnMucmV0dXJuVmFsdWUpO1xyXG4gIH1cclxuICBjb25zdCBpbnRlcmNlcHRvciA9IHNjb3BlZEludGVyY2VwdG9yc1ttZXRob2RdO1xyXG4gIGlmIChpbnRlcmNlcHRvciAmJiBBcnJheS5pc0FycmF5KGludGVyY2VwdG9yLnJldHVyblZhbHVlKSkge1xyXG4gICAgcmV0dXJuVmFsdWVIb29rcy5wdXNoKC4uLmludGVyY2VwdG9yLnJldHVyblZhbHVlKTtcclxuICB9XHJcbiAgcmV0dXJuVmFsdWVIb29rcy5mb3JFYWNoKGhvb2sgPT4ge1xyXG4gICAgcmV0dXJuVmFsdWUgPSBob29rKHJldHVyblZhbHVlKSB8fCByZXR1cm5WYWx1ZTtcclxuICB9KTtcclxuICByZXR1cm4gcmV0dXJuVmFsdWVcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QXBpSW50ZXJjZXB0b3JIb29rcyAobWV0aG9kKSB7XHJcbiAgY29uc3QgaW50ZXJjZXB0b3IgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xyXG4gIE9iamVjdC5rZXlzKGdsb2JhbEludGVyY2VwdG9ycykuZm9yRWFjaChob29rID0+IHtcclxuICAgIGlmIChob29rICE9PSAncmV0dXJuVmFsdWUnKSB7XHJcbiAgICAgIGludGVyY2VwdG9yW2hvb2tdID0gZ2xvYmFsSW50ZXJjZXB0b3JzW2hvb2tdLnNsaWNlKCk7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgY29uc3Qgc2NvcGVkSW50ZXJjZXB0b3IgPSBzY29wZWRJbnRlcmNlcHRvcnNbbWV0aG9kXTtcclxuICBpZiAoc2NvcGVkSW50ZXJjZXB0b3IpIHtcclxuICAgIE9iamVjdC5rZXlzKHNjb3BlZEludGVyY2VwdG9yKS5mb3JFYWNoKGhvb2sgPT4ge1xyXG4gICAgICBpZiAoaG9vayAhPT0gJ3JldHVyblZhbHVlJykge1xyXG4gICAgICAgIGludGVyY2VwdG9yW2hvb2tdID0gKGludGVyY2VwdG9yW2hvb2tdIHx8IFtdKS5jb25jYXQoc2NvcGVkSW50ZXJjZXB0b3JbaG9va10pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmV0dXJuIGludGVyY2VwdG9yXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGludm9rZUFwaSAobWV0aG9kLCBhcGksIG9wdGlvbnMsIC4uLnBhcmFtcykge1xyXG4gIGNvbnN0IGludGVyY2VwdG9yID0gZ2V0QXBpSW50ZXJjZXB0b3JIb29rcyhtZXRob2QpO1xyXG4gIGlmIChpbnRlcmNlcHRvciAmJiBPYmplY3Qua2V5cyhpbnRlcmNlcHRvcikubGVuZ3RoKSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnRlcmNlcHRvci5pbnZva2UpKSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IHF1ZXVlKGludGVyY2VwdG9yLmludm9rZSwgb3B0aW9ucyk7XHJcbiAgICAgIHJldHVybiByZXMudGhlbigob3B0aW9ucykgPT4ge1xyXG4gICAgICAgIHJldHVybiBhcGkod3JhcHBlck9wdGlvbnMoaW50ZXJjZXB0b3IsIG9wdGlvbnMpLCAuLi5wYXJhbXMpXHJcbiAgICAgIH0pXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gYXBpKHdyYXBwZXJPcHRpb25zKGludGVyY2VwdG9yLCBvcHRpb25zKSwgLi4ucGFyYW1zKVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gYXBpKG9wdGlvbnMsIC4uLnBhcmFtcylcclxufVxyXG5cclxuY29uc3QgcHJvbWlzZUludGVyY2VwdG9yID0ge1xyXG4gIHJldHVyblZhbHVlIChyZXMpIHtcclxuICAgIGlmICghaXNQcm9taXNlKHJlcykpIHtcclxuICAgICAgcmV0dXJuIHJlc1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgcmVzLnRoZW4ocmVzID0+IHtcclxuICAgICAgICBpZiAocmVzWzBdKSB7XHJcbiAgICAgICAgICByZWplY3QocmVzWzBdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzb2x2ZShyZXNbMV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IFNZTkNfQVBJX1JFID1cclxuICAvXlxcJHxXaW5kb3ckfFdpbmRvd1N0eWxlJHxzZW5kTmF0aXZlRXZlbnR8cmVzdG9yZUdsb2JhbHxnZXRDdXJyZW50U3ViTlZ1ZXxnZXRNZW51QnV0dG9uQm91bmRpbmdDbGllbnRSZWN0fF5yZXBvcnR8aW50ZXJjZXB0b3JzfEludGVyY2VwdG9yJHxnZXRTdWJOVnVlQnlJZHxyZXF1aXJlTmF0aXZlUGx1Z2lufHVweDJweHxoaWRlS2V5Ym9hcmR8Y2FuSVVzZXxeY3JlYXRlfFN5bmMkfE1hbmFnZXIkfGJhc2U2NFRvQXJyYXlCdWZmZXJ8YXJyYXlCdWZmZXJUb0Jhc2U2NC87XHJcblxyXG5jb25zdCBDT05URVhUX0FQSV9SRSA9IC9eY3JlYXRlfE1hbmFnZXIkLztcclxuXHJcbi8vIENvbnRleHTkvovlpJbmg4XlhrVcclxuY29uc3QgQ09OVEVYVF9BUElfUkVfRVhDID0gWydjcmVhdGVCTEVDb25uZWN0aW9uJ107XHJcblxyXG4vLyDlkIzmraXkvovlpJbmg4XlhrVcclxuY29uc3QgQVNZTkNfQVBJID0gWydjcmVhdGVCTEVDb25uZWN0aW9uJ107XHJcblxyXG5jb25zdCBDQUxMQkFDS19BUElfUkUgPSAvXm9ufF5vZmYvO1xyXG5cclxuZnVuY3Rpb24gaXNDb250ZXh0QXBpIChuYW1lKSB7XHJcbiAgcmV0dXJuIENPTlRFWFRfQVBJX1JFLnRlc3QobmFtZSkgJiYgQ09OVEVYVF9BUElfUkVfRVhDLmluZGV4T2YobmFtZSkgPT09IC0xXHJcbn1cclxuZnVuY3Rpb24gaXNTeW5jQXBpIChuYW1lKSB7XHJcbiAgcmV0dXJuIFNZTkNfQVBJX1JFLnRlc3QobmFtZSkgJiYgQVNZTkNfQVBJLmluZGV4T2YobmFtZSkgPT09IC0xXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGlzQ2FsbGJhY2tBcGkgKG5hbWUpIHtcclxuICByZXR1cm4gQ0FMTEJBQ0tfQVBJX1JFLnRlc3QobmFtZSkgJiYgbmFtZSAhPT0gJ29uUHVzaCdcclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlUHJvbWlzZSAocHJvbWlzZSkge1xyXG4gIHJldHVybiBwcm9taXNlLnRoZW4oZGF0YSA9PiB7XHJcbiAgICByZXR1cm4gW251bGwsIGRhdGFdXHJcbiAgfSlcclxuICAgIC5jYXRjaChlcnIgPT4gW2Vycl0pXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNob3VsZFByb21pc2UgKG5hbWUpIHtcclxuICBpZiAoXHJcbiAgICBpc0NvbnRleHRBcGkobmFtZSkgfHxcclxuICAgIGlzU3luY0FwaShuYW1lKSB8fFxyXG4gICAgaXNDYWxsYmFja0FwaShuYW1lKVxyXG4gICkge1xyXG4gICAgcmV0dXJuIGZhbHNlXHJcbiAgfVxyXG4gIHJldHVybiB0cnVlXHJcbn1cclxuXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLWV4dGVuZC1uYXRpdmUgKi9cclxuaWYgKCFQcm9taXNlLnByb3RvdHlwZS5maW5hbGx5KSB7XHJcbiAgUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMuY29uc3RydWN0b3I7XHJcbiAgICByZXR1cm4gdGhpcy50aGVuKFxyXG4gICAgICB2YWx1ZSA9PiBwcm9taXNlLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB2YWx1ZSksXHJcbiAgICAgIHJlYXNvbiA9PiBwcm9taXNlLnJlc29sdmUoY2FsbGJhY2soKSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgcmVhc29uXHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJvbWlzaWZ5IChuYW1lLCBhcGkpIHtcclxuICBpZiAoIXNob3VsZFByb21pc2UobmFtZSkpIHtcclxuICAgIHJldHVybiBhcGlcclxuICB9XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIHByb21pc2VBcGkgKG9wdGlvbnMgPSB7fSwgLi4ucGFyYW1zKSB7XHJcbiAgICBpZiAoaXNGbihvcHRpb25zLnN1Y2Nlc3MpIHx8IGlzRm4ob3B0aW9ucy5mYWlsKSB8fCBpc0ZuKG9wdGlvbnMuY29tcGxldGUpKSB7XHJcbiAgICAgIHJldHVybiB3cmFwcGVyUmV0dXJuVmFsdWUobmFtZSwgaW52b2tlQXBpKG5hbWUsIGFwaSwgb3B0aW9ucywgLi4ucGFyYW1zKSlcclxuICAgIH1cclxuICAgIHJldHVybiB3cmFwcGVyUmV0dXJuVmFsdWUobmFtZSwgaGFuZGxlUHJvbWlzZShuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGludm9rZUFwaShuYW1lLCBhcGksIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcclxuICAgICAgICBzdWNjZXNzOiByZXNvbHZlLFxyXG4gICAgICAgIGZhaWw6IHJlamVjdFxyXG4gICAgICB9KSwgLi4ucGFyYW1zKTtcclxuICAgIH0pKSlcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IEVQUyA9IDFlLTQ7XHJcbmNvbnN0IEJBU0VfREVWSUNFX1dJRFRIID0gNzUwO1xyXG5sZXQgaXNJT1MgPSBmYWxzZTtcclxubGV0IGRldmljZVdpZHRoID0gMDtcclxubGV0IGRldmljZURQUiA9IDA7XHJcblxyXG5mdW5jdGlvbiBjaGVja0RldmljZVdpZHRoICgpIHtcclxuICBjb25zdCB7XHJcbiAgICBwbGF0Zm9ybSxcclxuICAgIHBpeGVsUmF0aW8sXHJcbiAgICB3aW5kb3dXaWR0aFxyXG4gIH0gPSB0dC5nZXRTeXN0ZW1JbmZvU3luYygpOyAvLyB1bmk9PnR0IHJ1bnRpbWUg57yW6K+R55uu5qCH5pivIHVuaSDlr7nosaHvvIzlhoXpg6jkuI3lhYHorrjnm7TmjqXkvb/nlKggdW5pXHJcblxyXG4gIGRldmljZVdpZHRoID0gd2luZG93V2lkdGg7XHJcbiAgZGV2aWNlRFBSID0gcGl4ZWxSYXRpbztcclxuICBpc0lPUyA9IHBsYXRmb3JtID09PSAnaW9zJztcclxufVxyXG5cclxuZnVuY3Rpb24gdXB4MnB4IChudW1iZXIsIG5ld0RldmljZVdpZHRoKSB7XHJcbiAgaWYgKGRldmljZVdpZHRoID09PSAwKSB7XHJcbiAgICBjaGVja0RldmljZVdpZHRoKCk7XHJcbiAgfVxyXG5cclxuICBudW1iZXIgPSBOdW1iZXIobnVtYmVyKTtcclxuICBpZiAobnVtYmVyID09PSAwKSB7XHJcbiAgICByZXR1cm4gMFxyXG4gIH1cclxuICBsZXQgcmVzdWx0ID0gKG51bWJlciAvIEJBU0VfREVWSUNFX1dJRFRIKSAqIChuZXdEZXZpY2VXaWR0aCB8fCBkZXZpY2VXaWR0aCk7XHJcbiAgaWYgKHJlc3VsdCA8IDApIHtcclxuICAgIHJlc3VsdCA9IC1yZXN1bHQ7XHJcbiAgfVxyXG4gIHJlc3VsdCA9IE1hdGguZmxvb3IocmVzdWx0ICsgRVBTKTtcclxuICBpZiAocmVzdWx0ID09PSAwKSB7XHJcbiAgICBpZiAoZGV2aWNlRFBSID09PSAxIHx8ICFpc0lPUykge1xyXG4gICAgICByZXN1bHQgPSAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmVzdWx0ID0gMC41O1xyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gbnVtYmVyIDwgMCA/IC1yZXN1bHQgOiByZXN1bHRcclxufVxyXG5cclxuY29uc3QgaW50ZXJjZXB0b3JzID0ge1xyXG4gIHByb21pc2VJbnRlcmNlcHRvclxyXG59O1xyXG5cclxudmFyIGJhc2VBcGkgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XHJcbiAgX19wcm90b19fOiBudWxsLFxyXG4gIHVweDJweDogdXB4MnB4LFxyXG4gIGFkZEludGVyY2VwdG9yOiBhZGRJbnRlcmNlcHRvcixcclxuICByZW1vdmVJbnRlcmNlcHRvcjogcmVtb3ZlSW50ZXJjZXB0b3IsXHJcbiAgaW50ZXJjZXB0b3JzOiBpbnRlcmNlcHRvcnNcclxufSk7XHJcblxyXG5jbGFzcyBFdmVudENoYW5uZWwge1xyXG4gIGNvbnN0cnVjdG9yIChpZCwgZXZlbnRzKSB7XHJcbiAgICB0aGlzLmlkID0gaWQ7XHJcbiAgICB0aGlzLmxpc3RlbmVyID0ge307XHJcbiAgICB0aGlzLmVtaXRDYWNoZSA9IHt9O1xyXG4gICAgaWYgKGV2ZW50cykge1xyXG4gICAgICBPYmplY3Qua2V5cyhldmVudHMpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgICAgdGhpcy5vbihuYW1lLCBldmVudHNbbmFtZV0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVtaXQgKGV2ZW50TmFtZSwgLi4uYXJncykge1xyXG4gICAgY29uc3QgZm5zID0gdGhpcy5saXN0ZW5lcltldmVudE5hbWVdO1xyXG4gICAgaWYgKCFmbnMpIHtcclxuICAgICAgcmV0dXJuICh0aGlzLmVtaXRDYWNoZVtldmVudE5hbWVdIHx8ICh0aGlzLmVtaXRDYWNoZVtldmVudE5hbWVdID0gW10pKS5wdXNoKGFyZ3MpXHJcbiAgICB9XHJcbiAgICBmbnMuZm9yRWFjaChvcHQgPT4ge1xyXG4gICAgICBvcHQuZm4uYXBwbHkob3B0LmZuLCBhcmdzKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5saXN0ZW5lcltldmVudE5hbWVdID0gZm5zLmZpbHRlcihvcHQgPT4gb3B0LnR5cGUgIT09ICdvbmNlJyk7XHJcbiAgfVxyXG5cclxuICBvbiAoZXZlbnROYW1lLCBmbikge1xyXG4gICAgdGhpcy5fYWRkTGlzdGVuZXIoZXZlbnROYW1lLCAnb24nLCBmbik7XHJcbiAgICB0aGlzLl9jbGVhckNhY2hlKGV2ZW50TmFtZSk7XHJcbiAgfVxyXG5cclxuICBvbmNlIChldmVudE5hbWUsIGZuKSB7XHJcbiAgICB0aGlzLl9hZGRMaXN0ZW5lcihldmVudE5hbWUsICdvbmNlJywgZm4pO1xyXG4gICAgdGhpcy5fY2xlYXJDYWNoZShldmVudE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgb2ZmIChldmVudE5hbWUsIGZuKSB7XHJcbiAgICBjb25zdCBmbnMgPSB0aGlzLmxpc3RlbmVyW2V2ZW50TmFtZV07XHJcbiAgICBpZiAoIWZucykge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGlmIChmbikge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZucy5sZW5ndGg7KSB7XHJcbiAgICAgICAgaWYgKGZuc1tpXS5mbiA9PT0gZm4pIHtcclxuICAgICAgICAgIGZucy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICBpLS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGkrKztcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJbZXZlbnROYW1lXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9jbGVhckNhY2hlIChldmVudE5hbWUpIHtcclxuICAgIGNvbnN0IGNhY2hlQXJncyA9IHRoaXMuZW1pdENhY2hlW2V2ZW50TmFtZV07XHJcbiAgICBpZiAoY2FjaGVBcmdzKSB7XHJcbiAgICAgIGZvciAoOyBjYWNoZUFyZ3MubGVuZ3RoID4gMDspIHtcclxuICAgICAgICB0aGlzLmVtaXQuYXBwbHkodGhpcywgW2V2ZW50TmFtZV0uY29uY2F0KGNhY2hlQXJncy5zaGlmdCgpKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9hZGRMaXN0ZW5lciAoZXZlbnROYW1lLCB0eXBlLCBmbikge1xyXG4gICAgKHRoaXMubGlzdGVuZXJbZXZlbnROYW1lXSB8fCAodGhpcy5saXN0ZW5lcltldmVudE5hbWVdID0gW10pKS5wdXNoKHtcclxuICAgICAgZm4sXHJcbiAgICAgIHR5cGVcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgZXZlbnRDaGFubmVscyA9IHt9O1xyXG5cclxuY29uc3QgZXZlbnRDaGFubmVsU3RhY2sgPSBbXTtcclxuXHJcbmxldCBpZCA9IDA7XHJcblxyXG5mdW5jdGlvbiBpbml0RXZlbnRDaGFubmVsIChldmVudHMsIGNhY2hlID0gdHJ1ZSkge1xyXG4gIGlkKys7XHJcbiAgY29uc3QgZXZlbnRDaGFubmVsID0gbmV3IEV2ZW50Q2hhbm5lbChpZCwgZXZlbnRzKTtcclxuICBpZiAoY2FjaGUpIHtcclxuICAgIGV2ZW50Q2hhbm5lbHNbaWRdID0gZXZlbnRDaGFubmVsO1xyXG4gICAgZXZlbnRDaGFubmVsU3RhY2sucHVzaChldmVudENoYW5uZWwpO1xyXG4gIH1cclxuICByZXR1cm4gZXZlbnRDaGFubmVsXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEV2ZW50Q2hhbm5lbCAoaWQpIHtcclxuICBpZiAoaWQpIHtcclxuICAgIGNvbnN0IGV2ZW50Q2hhbm5lbCA9IGV2ZW50Q2hhbm5lbHNbaWRdO1xyXG4gICAgZGVsZXRlIGV2ZW50Q2hhbm5lbHNbaWRdO1xyXG4gICAgcmV0dXJuIGV2ZW50Q2hhbm5lbFxyXG4gIH1cclxuICByZXR1cm4gZXZlbnRDaGFubmVsU3RhY2suc2hpZnQoKVxyXG59XHJcblxyXG52YXIgbmF2aWdhdGVUbyA9IHtcclxuICBhcmdzIChmcm9tQXJncywgdG9BcmdzKSB7XHJcbiAgICBjb25zdCBpZCA9IGluaXRFdmVudENoYW5uZWwoZnJvbUFyZ3MuZXZlbnRzKS5pZDtcclxuICAgIGlmIChmcm9tQXJncy51cmwpIHtcclxuICAgICAgZnJvbUFyZ3MudXJsID0gZnJvbUFyZ3MudXJsICsgKGZyb21BcmdzLnVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArICdfX2lkX189JyArIGlkO1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgcmV0dXJuVmFsdWUgKGZyb21SZXMsIHRvUmVzKSB7XHJcbiAgICBmcm9tUmVzLmV2ZW50Q2hhbm5lbCA9IGdldEV2ZW50Q2hhbm5lbCgpO1xyXG4gIH1cclxufTtcclxuXHJcbmZ1bmN0aW9uIGZpbmRFeGlzdHNQYWdlSW5kZXggKHVybCkge1xyXG4gIGNvbnN0IHBhZ2VzID0gZ2V0Q3VycmVudFBhZ2VzKCk7XHJcbiAgbGV0IGxlbiA9IHBhZ2VzLmxlbmd0aDtcclxuICB3aGlsZSAobGVuLS0pIHtcclxuICAgIGNvbnN0IHBhZ2UgPSBwYWdlc1tsZW5dO1xyXG4gICAgaWYgKHBhZ2UuJHBhZ2UgJiYgcGFnZS4kcGFnZS5mdWxsUGF0aCA9PT0gdXJsKSB7XHJcbiAgICAgIHJldHVybiBsZW5cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIC0xXHJcbn1cclxuXHJcbnZhciByZWRpcmVjdFRvID0ge1xyXG4gIG5hbWUgKGZyb21BcmdzKSB7XHJcbiAgICBpZiAoZnJvbUFyZ3MuZXhpc3RzID09PSAnYmFjaycgJiYgZnJvbUFyZ3MuZGVsdGEpIHtcclxuICAgICAgcmV0dXJuICduYXZpZ2F0ZUJhY2snXHJcbiAgICB9XHJcbiAgICByZXR1cm4gJ3JlZGlyZWN0VG8nXHJcbiAgfSxcclxuICBhcmdzIChmcm9tQXJncykge1xyXG4gICAgaWYgKGZyb21BcmdzLmV4aXN0cyA9PT0gJ2JhY2snICYmIGZyb21BcmdzLnVybCkge1xyXG4gICAgICBjb25zdCBleGlzdHNQYWdlSW5kZXggPSBmaW5kRXhpc3RzUGFnZUluZGV4KGZyb21BcmdzLnVybCk7XHJcbiAgICAgIGlmIChleGlzdHNQYWdlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgY29uc3QgZGVsdGEgPSBnZXRDdXJyZW50UGFnZXMoKS5sZW5ndGggLSAxIC0gZXhpc3RzUGFnZUluZGV4O1xyXG4gICAgICAgIGlmIChkZWx0YSA+IDApIHtcclxuICAgICAgICAgIGZyb21BcmdzLmRlbHRhID0gZGVsdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG59O1xyXG5cclxudmFyIHByZXZpZXdJbWFnZSA9IHtcclxuICBhcmdzIChmcm9tQXJncykge1xyXG4gICAgbGV0IGN1cnJlbnRJbmRleCA9IHBhcnNlSW50KGZyb21BcmdzLmN1cnJlbnQpO1xyXG4gICAgaWYgKGlzTmFOKGN1cnJlbnRJbmRleCkpIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBjb25zdCB1cmxzID0gZnJvbUFyZ3MudXJscztcclxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cmxzKSkge1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGNvbnN0IGxlbiA9IHVybHMubGVuZ3RoO1xyXG4gICAgaWYgKCFsZW4pIHtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcbiAgICBpZiAoY3VycmVudEluZGV4IDwgMCkge1xyXG4gICAgICBjdXJyZW50SW5kZXggPSAwO1xyXG4gICAgfSBlbHNlIGlmIChjdXJyZW50SW5kZXggPj0gbGVuKSB7XHJcbiAgICAgIGN1cnJlbnRJbmRleCA9IGxlbiAtIDE7XHJcbiAgICB9XHJcbiAgICBpZiAoY3VycmVudEluZGV4ID4gMCkge1xyXG4gICAgICBmcm9tQXJncy5jdXJyZW50ID0gdXJsc1tjdXJyZW50SW5kZXhdO1xyXG4gICAgICBmcm9tQXJncy51cmxzID0gdXJscy5maWx0ZXIoXHJcbiAgICAgICAgKGl0ZW0sIGluZGV4KSA9PiBpbmRleCA8IGN1cnJlbnRJbmRleCA/IGl0ZW0gIT09IHVybHNbY3VycmVudEluZGV4XSA6IHRydWVcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGZyb21BcmdzLmN1cnJlbnQgPSB1cmxzWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaW5kaWNhdG9yOiBmYWxzZSxcclxuICAgICAgbG9vcDogZmFsc2VcclxuICAgIH1cclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBVVUlEX0tFWSA9ICdfX0RDX1NUQVRfVVVJRCc7XHJcbmxldCBkZXZpY2VJZDtcclxuZnVuY3Rpb24gYWRkVXVpZCAocmVzdWx0KSB7XHJcbiAgZGV2aWNlSWQgPSBkZXZpY2VJZCB8fCB0dC5nZXRTdG9yYWdlU3luYyhVVUlEX0tFWSk7XHJcbiAgaWYgKCFkZXZpY2VJZCkge1xyXG4gICAgZGV2aWNlSWQgPSBEYXRlLm5vdygpICsgJycgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTcpO1xyXG4gICAgdHQuc2V0U3RvcmFnZSh7XHJcbiAgICAgIGtleTogVVVJRF9LRVksXHJcbiAgICAgIGRhdGE6IGRldmljZUlkXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmVzdWx0LmRldmljZUlkID0gZGV2aWNlSWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZFNhZmVBcmVhSW5zZXRzIChyZXN1bHQpIHtcclxuICBpZiAocmVzdWx0LnNhZmVBcmVhKSB7XHJcbiAgICBjb25zdCBzYWZlQXJlYSA9IHJlc3VsdC5zYWZlQXJlYTtcclxuICAgIHJlc3VsdC5zYWZlQXJlYUluc2V0cyA9IHtcclxuICAgICAgdG9wOiBzYWZlQXJlYS50b3AsXHJcbiAgICAgIGxlZnQ6IHNhZmVBcmVhLmxlZnQsXHJcbiAgICAgIHJpZ2h0OiByZXN1bHQud2luZG93V2lkdGggLSBzYWZlQXJlYS5yaWdodCxcclxuICAgICAgYm90dG9tOiByZXN1bHQud2luZG93SGVpZ2h0IC0gc2FmZUFyZWEuYm90dG9tXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG5cclxudmFyIGdldFN5c3RlbUluZm8gPSB7XHJcbiAgcmV0dXJuVmFsdWU6IGZ1bmN0aW9uIChyZXN1bHQpIHtcclxuICAgIGFkZFV1aWQocmVzdWx0KTtcclxuICAgIGFkZFNhZmVBcmVhSW5zZXRzKHJlc3VsdCk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3Qgb05hbWUgPSAnZ2V0VXNlckluZm8nO1xyXG5jb25zdCBuTmFtZSA9ICdnZXRVc2VyUHJvZmlsZSc7XHJcblxyXG52YXIgZ2V0VXNlclByb2ZpbGUgPSB7XHJcbiAgbmFtZTogdHQuY2FuSVVzZShuTmFtZSkgPyBuTmFtZSA6IG9OYW1lXHJcbn07XHJcblxyXG4vLyDkuI3mlK/mjIHnmoQgQVBJIOWIl+ihqFxyXG5jb25zdCB0b2RvcyA9IFtcclxuICAncHJlbG9hZFBhZ2UnLFxyXG4gICd1blByZWxvYWRQYWdlJyxcclxuICAnbG9hZFN1YlBhY2thZ2UnXHJcbiAgLy8gJ2NyZWF0ZUNhbWVyYUNvbnRleHQnLFxyXG4gIC8vICdjcmVhdGVMaXZlUGxheWVyQ29udGV4dCcsXHJcbiAgLy8gJ2dldFNhdmVkRmlsZUluZm8nLFxyXG4gIC8vICdjcmVhdGVNYXBDb250ZXh0JyxcclxuICAvLyAnb25NZW1vcnlXYXJuaW5nJyxcclxuICAvLyAnb25HeXJvc2NvcGVDaGFuZ2UnLFxyXG4gIC8vICdzdGFydEd5cm9zY29wZScsXHJcbiAgLy8gJ3N0b3BHeXJvc2NvcGUnLFxyXG4gIC8vICdzZXRTY3JlZW5CcmlnaHRuZXNzJyxcclxuICAvLyAnZ2V0U2NyZWVuQnJpZ2h0bmVzcycsXHJcbiAgLy8gJ2FkZFBob25lQ29udGFjdCcsXHJcbiAgLy8gJ29wZW5CbHVldG9vdGhBZGFwdGVyJyxcclxuICAvLyAnc3RhcnRCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5JyxcclxuICAvLyAnb25CbHVldG9vdGhEZXZpY2VGb3VuZCcsXHJcbiAgLy8gJ3N0b3BCbHVldG9vdGhEZXZpY2VzRGlzY292ZXJ5JyxcclxuICAvLyAnb25CbHVldG9vdGhBZGFwdGVyU3RhdGVDaGFuZ2UnLFxyXG4gIC8vICdnZXRDb25uZWN0ZWRCbHVldG9vdGhEZXZpY2VzJyxcclxuICAvLyAnZ2V0Qmx1ZXRvb3RoRGV2aWNlcycsXHJcbiAgLy8gJ2dldEJsdWV0b290aEFkYXB0ZXJTdGF0ZScsXHJcbiAgLy8gJ2Nsb3NlQmx1ZXRvb3RoQWRhcHRlcicsXHJcbiAgLy8gJ3dyaXRlQkxFQ2hhcmFjdGVyaXN0aWNWYWx1ZScsXHJcbiAgLy8gJ3JlYWRCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlJyxcclxuICAvLyAnb25CTEVDb25uZWN0aW9uU3RhdGVDaGFuZ2UnLFxyXG4gIC8vICdvbkJMRUNoYXJhY3RlcmlzdGljVmFsdWVDaGFuZ2UnLFxyXG4gIC8vICdub3RpZnlCTEVDaGFyYWN0ZXJpc3RpY1ZhbHVlQ2hhbmdlJyxcclxuICAvLyAnZ2V0QkxFRGV2aWNlU2VydmljZXMnLFxyXG4gIC8vICdnZXRCTEVEZXZpY2VDaGFyYWN0ZXJpc3RpY3MnLFxyXG4gIC8vICdjcmVhdGVCTEVDb25uZWN0aW9uJyxcclxuICAvLyAnY2xvc2VCTEVDb25uZWN0aW9uJyxcclxuICAvLyAnb25CZWFjb25TZXJ2aWNlQ2hhbmdlJyxcclxuICAvLyAnb25CZWFjb25VcGRhdGUnLFxyXG4gIC8vICdnZXRCZWFjb25zJyxcclxuICAvLyAnc3RhcnRCZWFjb25EaXNjb3ZlcnknLFxyXG4gIC8vICdzdG9wQmVhY29uRGlzY292ZXJ5JyxcclxuICAvLyAnc2hvd05hdmlnYXRpb25CYXJMb2FkaW5nJyxcclxuICAvLyAnaGlkZU5hdmlnYXRpb25CYXJMb2FkaW5nJyxcclxuICAvLyAnc2V0VGFiQmFySXRlbScsXHJcbiAgLy8gJ3NldFRhYkJhclN0eWxlJyxcclxuICAvLyAnaGlkZVRhYkJhcicsXHJcbiAgLy8gJ3Nob3dUYWJCYXInLFxyXG4gIC8vICdzZXRUYWJCYXJCYWRnZScsXHJcbiAgLy8gJ3JlbW92ZVRhYkJhckJhZGdlJyxcclxuICAvLyAnc2hvd1RhYkJhclJlZERvdCcsXHJcbiAgLy8gJ2hpZGVUYWJCYXJSZWREb3QnLFxyXG4gIC8vICdzZXRCYWNrZ3JvdW5kQ29sb3InLFxyXG4gIC8vICdzZXRCYWNrZ3JvdW5kVGV4dFN0eWxlJyxcclxuICAvLyAnY2hvb3NlSW52b2ljZVRpdGxlJyxcclxuICAvLyAnYWRkVGVtcGxhdGUnLFxyXG4gIC8vICdkZWxldGVUZW1wbGF0ZScsXHJcbiAgLy8gJ2dldFRlbXBsYXRlTGlicmFyeUJ5SWQnLFxyXG4gIC8vICdnZXRUZW1wbGF0ZUxpYnJhcnlMaXN0JyxcclxuICAvLyAnZ2V0VGVtcGxhdGVMaXN0JyxcclxuICAvLyAnc2VuZFRlbXBsYXRlTWVzc2FnZScsXHJcbiAgLy8gJ3NldEVuYWJsZURlYnVnJyxcclxuICAvLyAnb25XaW5kb3dSZXNpemUnLFxyXG4gIC8vICdvZmZXaW5kb3dSZXNpemUnLFxyXG4gIC8vICdjcmVhdGVPZmZzY3JlZW5DYW52YXMnLFxyXG4gIC8vICd2aWJyYXRlJ1xyXG5dO1xyXG5cclxuLy8g5a2Y5Zyo5YW85a655oCn55qEIEFQSSDliJfooahcclxuLy8g5aS05p2h5bCP56iL5bqP6IeqMS4zNS4wK+aUr+aMgWNhbklVc2VzXHJcbmNvbnN0IGNhbklVc2VzID0gW1xyXG4gIC8vICdjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlcicsXHJcbiAgLy8gJ2dldFNhdmVkRmlsZUxpc3QnLFxyXG4gIC8vICdyZW1vdmVTYXZlZEZpbGUnLFxyXG4gIC8vICdoaWRlS2V5Ym9hcmQnLFxyXG4gIC8vICdnZXRJbWFnZUluZm8nLFxyXG4gIC8vICdjcmVhdGVWaWRlb0NvbnRleHQnLFxyXG4gIC8vICdvblNvY2tldE9wZW4nLFxyXG4gIC8vICdvblNvY2tldEVycm9yJyxcclxuICAvLyAnc2VuZFNvY2tldE1lc3NhZ2UnLFxyXG4gIC8vICdvblNvY2tldE1lc3NhZ2UnLFxyXG4gIC8vICdjbG9zZVNvY2tldCcsXHJcbiAgLy8gJ29uU29ja2V0Q2xvc2UnLFxyXG4gIC8vICdnZXRFeHRDb25maWcnLFxyXG4gIC8vICdnZXRFeHRDb25maWdTeW5jJyxcclxuICAvLyAnbmF2aWdhdGVUb01pbmlQcm9ncmFtJyxcclxuICAvLyAnbmF2aWdhdGVCYWNrTWluaVByb2dyYW0nLFxyXG4gIC8vICdjb21wcmVzc0ltYWdlJyxcclxuICAvLyAnY2hvb3NlTG9jYXRpb24nLFxyXG4gIC8vICdvcGVuRG9jdW1lbnQnLFxyXG4gIC8vICdvblVzZXJDYXB0dXJlU2NyZWVuJyxcclxuICAvLyAnZ2V0QmFja2dyb3VuZEF1ZGlvTWFuYWdlcicsXHJcbiAgLy8gJ3NldE5hdmlnYXRpb25CYXJDb2xvcicsXHJcbl07XHJcblxyXG4vLyDpnIDopoHlgZrovazmjaLnmoQgQVBJIOWIl+ihqFxyXG5jb25zdCBwcm90b2NvbHMgPSB7XHJcbiAgY2hvb3NlSW1hZ2U6IHtcclxuICAgIGFyZ3M6IHtcclxuICAgICAgc2l6ZVR5cGU6IGZhbHNlXHJcbiAgICB9XHJcbiAgfSxcclxuICBuYXZpZ2F0ZVRvLFxyXG4gIHJlZGlyZWN0VG8sXHJcbiAgcHJldmlld0ltYWdlLFxyXG4gIGdldFN5c3RlbUluZm8sXHJcbiAgZ2V0U3lzdGVtSW5mb1N5bmM6IGdldFN5c3RlbUluZm8sXHJcbiAgZ2V0VXNlclByb2ZpbGUsXHJcbiAgY29ubmVjdFNvY2tldDoge1xyXG4gICAgYXJnczoge1xyXG4gICAgICBtZXRob2Q6IGZhbHNlXHJcbiAgICB9XHJcbiAgfSxcclxuICBjaG9vc2VWaWRlbzoge1xyXG4gICAgYXJnczoge1xyXG4gICAgICBjYW1lcmE6IGZhbHNlXHJcbiAgICB9XHJcbiAgfSxcclxuICBzY2FuQ29kZToge1xyXG4gICAgYXJnczoge1xyXG4gICAgICBvbmx5RnJvbUNhbWVyYTogZmFsc2UsXHJcbiAgICAgIHNjYW5UeXBlOiBmYWxzZVxyXG4gICAgfVxyXG4gIH0sXHJcbiAgc3RhcnRBY2NlbGVyb21ldGVyOiB7XHJcbiAgICBhcmdzOiB7XHJcbiAgICAgIGludGVydmFsOiBmYWxzZVxyXG4gICAgfVxyXG4gIH0sXHJcbiAgc2hvd1RvYXN0OiB7XHJcbiAgICBhcmdzOiB7XHJcbiAgICAgIGltYWdlOiBmYWxzZSxcclxuICAgICAgbWFzazogZmFsc2VcclxuICAgIH1cclxuICB9LFxyXG4gIHNob3dMb2FkaW5nOiB7XHJcbiAgICBhcmdzOiB7XHJcbiAgICAgIG1hc2s6IGZhbHNlXHJcbiAgICB9XHJcbiAgfSxcclxuICBzaG93TW9kYWw6IHtcclxuICAgIGFyZ3M6IHtcclxuICAgICAgY2FuY2VsQ29sb3I6IGZhbHNlLFxyXG4gICAgICBjb25maXJtQ29sb3I6IGZhbHNlXHJcbiAgICB9XHJcbiAgfSxcclxuICBzaG93QWN0aW9uU2hlZXQ6IHtcclxuICAgIGFyZ3M6IHtcclxuICAgICAgaXRlbUNvbG9yOiBmYWxzZVxyXG4gICAgfVxyXG4gIH0sXHJcbiAgbG9naW46IHtcclxuICAgIGFyZ3M6IHtcclxuICAgICAgc2NvcGVzOiBmYWxzZSxcclxuICAgICAgdGltZW91dDogZmFsc2VcclxuICAgIH1cclxuICB9LFxyXG4gIGdldFVzZXJJbmZvOiB7XHJcbiAgICBhcmdzOiB7XHJcbiAgICAgIGxhbmc6IGZhbHNlLFxyXG4gICAgICB0aW1lb3V0OiBmYWxzZVxyXG4gICAgfVxyXG4gIH0sXHJcbiAgcmVxdWVzdFBheW1lbnQ6IHtcclxuICAgIG5hbWU6IHR0LnBheSA/ICdwYXknIDogJ3JlcXVlc3RQYXltZW50JyxcclxuICAgIGFyZ3M6IHtcclxuICAgICAgb3JkZXJJbmZvOiB0dC5wYXkgPyAnb3JkZXJJbmZvJyA6ICdkYXRhJ1xyXG4gICAgfVxyXG4gIH0sXHJcbiAgZ2V0RmlsZUluZm86IHtcclxuICAgIGFyZ3M6IHtcclxuICAgICAgZGlnZXN0QWxnb3JpdGhtOiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IENBTExCQUNLUyA9IFsnc3VjY2VzcycsICdmYWlsJywgJ2NhbmNlbCcsICdjb21wbGV0ZSddO1xyXG5cclxuZnVuY3Rpb24gcHJvY2Vzc0NhbGxiYWNrIChtZXRob2ROYW1lLCBtZXRob2QsIHJldHVyblZhbHVlKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXMpIHtcclxuICAgIHJldHVybiBtZXRob2QocHJvY2Vzc1JldHVyblZhbHVlKG1ldGhvZE5hbWUsIHJlcywgcmV0dXJuVmFsdWUpKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcHJvY2Vzc0FyZ3MgKG1ldGhvZE5hbWUsIGZyb21BcmdzLCBhcmdzT3B0aW9uID0ge30sIHJldHVyblZhbHVlID0ge30sIGtlZXBGcm9tQXJncyA9IGZhbHNlKSB7XHJcbiAgaWYgKGlzUGxhaW5PYmplY3QoZnJvbUFyZ3MpKSB7IC8vIOS4gOiIrCBhcGkg55qE5Y+C5pWw6Kej5p6QXHJcbiAgICBjb25zdCB0b0FyZ3MgPSBrZWVwRnJvbUFyZ3MgPT09IHRydWUgPyBmcm9tQXJncyA6IHt9OyAvLyByZXR1cm5WYWx1ZSDkuLogZmFsc2Ug5pe277yM6K+05piO5piv5qC85byP5YyW6L+U5Zue5YC877yM55u05o6l5Zyo6L+U5Zue5YC85a+56LGh5LiK5L+u5pS56LWL5YC8XHJcbiAgICBpZiAoaXNGbihhcmdzT3B0aW9uKSkge1xyXG4gICAgICBhcmdzT3B0aW9uID0gYXJnc09wdGlvbihmcm9tQXJncywgdG9BcmdzKSB8fCB7fTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qga2V5IGluIGZyb21BcmdzKSB7XHJcbiAgICAgIGlmIChoYXNPd24oYXJnc09wdGlvbiwga2V5KSkge1xyXG4gICAgICAgIGxldCBrZXlPcHRpb24gPSBhcmdzT3B0aW9uW2tleV07XHJcbiAgICAgICAgaWYgKGlzRm4oa2V5T3B0aW9uKSkge1xyXG4gICAgICAgICAga2V5T3B0aW9uID0ga2V5T3B0aW9uKGZyb21BcmdzW2tleV0sIGZyb21BcmdzLCB0b0FyZ3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWtleU9wdGlvbikgeyAvLyDkuI3mlK/mjIHnmoTlj4LmlbBcclxuICAgICAgICAgIGNvbnNvbGUud2FybihgVGhlICcke21ldGhvZE5hbWV9JyBtZXRob2Qgb2YgcGxhdGZvcm0gJ+WktOadoeWwj+eoi+W6jycgZG9lcyBub3Qgc3VwcG9ydCBvcHRpb24gJyR7a2V5fSdgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGlzU3RyKGtleU9wdGlvbikpIHsgLy8g6YeN5YaZ5Y+C5pWwIGtleVxyXG4gICAgICAgICAgdG9BcmdzW2tleU9wdGlvbl0gPSBmcm9tQXJnc1trZXldO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChrZXlPcHRpb24pKSB7IC8vIHtuYW1lOm5ld05hbWUsdmFsdWU6dmFsdWV95Y+v6YeN5paw5oyH5a6a5Y+C5pWwIGtleTp2YWx1ZVxyXG4gICAgICAgICAgdG9BcmdzW2tleU9wdGlvbi5uYW1lID8ga2V5T3B0aW9uLm5hbWUgOiBrZXldID0ga2V5T3B0aW9uLnZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChDQUxMQkFDS1MuaW5kZXhPZihrZXkpICE9PSAtMSkge1xyXG4gICAgICAgIGlmIChpc0ZuKGZyb21BcmdzW2tleV0pKSB7XHJcbiAgICAgICAgICB0b0FyZ3Nba2V5XSA9IHByb2Nlc3NDYWxsYmFjayhtZXRob2ROYW1lLCBmcm9tQXJnc1trZXldLCByZXR1cm5WYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICgha2VlcEZyb21BcmdzKSB7XHJcbiAgICAgICAgICB0b0FyZ3Nba2V5XSA9IGZyb21BcmdzW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG9BcmdzXHJcbiAgfSBlbHNlIGlmIChpc0ZuKGZyb21BcmdzKSkge1xyXG4gICAgZnJvbUFyZ3MgPSBwcm9jZXNzQ2FsbGJhY2sobWV0aG9kTmFtZSwgZnJvbUFyZ3MsIHJldHVyblZhbHVlKTtcclxuICB9XHJcbiAgcmV0dXJuIGZyb21BcmdzXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByb2Nlc3NSZXR1cm5WYWx1ZSAobWV0aG9kTmFtZSwgcmVzLCByZXR1cm5WYWx1ZSwga2VlcFJldHVyblZhbHVlID0gZmFsc2UpIHtcclxuICBpZiAoaXNGbihwcm90b2NvbHMucmV0dXJuVmFsdWUpKSB7IC8vIOWkhOeQhumAmueUqCByZXR1cm5WYWx1ZVxyXG4gICAgcmVzID0gcHJvdG9jb2xzLnJldHVyblZhbHVlKG1ldGhvZE5hbWUsIHJlcyk7XHJcbiAgfVxyXG4gIHJldHVybiBwcm9jZXNzQXJncyhtZXRob2ROYW1lLCByZXMsIHJldHVyblZhbHVlLCB7fSwga2VlcFJldHVyblZhbHVlKVxyXG59XHJcblxyXG5mdW5jdGlvbiB3cmFwcGVyIChtZXRob2ROYW1lLCBtZXRob2QpIHtcclxuICBpZiAoaGFzT3duKHByb3RvY29scywgbWV0aG9kTmFtZSkpIHtcclxuICAgIGNvbnN0IHByb3RvY29sID0gcHJvdG9jb2xzW21ldGhvZE5hbWVdO1xyXG4gICAgaWYgKCFwcm90b2NvbCkgeyAvLyDmmoLkuI3mlK/mjIHnmoQgYXBpXHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihgUGxhdGZvcm0gJ+WktOadoeWwj+eoi+W6jycgZG9lcyBub3Qgc3VwcG9ydCAnJHttZXRob2ROYW1lfScuYCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMSwgYXJnMikgeyAvLyDnm67liY0gYXBpIOacgOWkmuS4pOS4quWPguaVsFxyXG4gICAgICBsZXQgb3B0aW9ucyA9IHByb3RvY29sO1xyXG4gICAgICBpZiAoaXNGbihwcm90b2NvbCkpIHtcclxuICAgICAgICBvcHRpb25zID0gcHJvdG9jb2woYXJnMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGFyZzEgPSBwcm9jZXNzQXJncyhtZXRob2ROYW1lLCBhcmcxLCBvcHRpb25zLmFyZ3MsIG9wdGlvbnMucmV0dXJuVmFsdWUpO1xyXG5cclxuICAgICAgY29uc3QgYXJncyA9IFthcmcxXTtcclxuICAgICAgaWYgKHR5cGVvZiBhcmcyICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgIGFyZ3MucHVzaChhcmcyKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaXNGbihvcHRpb25zLm5hbWUpKSB7XHJcbiAgICAgICAgbWV0aG9kTmFtZSA9IG9wdGlvbnMubmFtZShhcmcxKTtcclxuICAgICAgfSBlbHNlIGlmIChpc1N0cihvcHRpb25zLm5hbWUpKSB7XHJcbiAgICAgICAgbWV0aG9kTmFtZSA9IG9wdGlvbnMubmFtZTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IHR0W21ldGhvZE5hbWVdLmFwcGx5KHR0LCBhcmdzKTtcclxuICAgICAgaWYgKGlzU3luY0FwaShtZXRob2ROYW1lKSkgeyAvLyDlkIzmraUgYXBpXHJcbiAgICAgICAgcmV0dXJuIHByb2Nlc3NSZXR1cm5WYWx1ZShtZXRob2ROYW1lLCByZXR1cm5WYWx1ZSwgb3B0aW9ucy5yZXR1cm5WYWx1ZSwgaXNDb250ZXh0QXBpKG1ldGhvZE5hbWUpKVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXR1cm5WYWx1ZVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gbWV0aG9kXHJcbn1cclxuXHJcbmNvbnN0IHRvZG9BcGlzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuXHJcbmNvbnN0IFRPRE9TID0gW1xyXG4gICdvblRhYkJhck1pZEJ1dHRvblRhcCcsXHJcbiAgJ3N1YnNjcmliZVB1c2gnLFxyXG4gICd1bnN1YnNjcmliZVB1c2gnLFxyXG4gICdvblB1c2gnLFxyXG4gICdvZmZQdXNoJyxcclxuICAnc2hhcmUnXHJcbl07XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVUb2RvQXBpIChuYW1lKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvZG9BcGkgKHtcclxuICAgIGZhaWwsXHJcbiAgICBjb21wbGV0ZVxyXG4gIH0pIHtcclxuICAgIGNvbnN0IHJlcyA9IHtcclxuICAgICAgZXJyTXNnOiBgJHtuYW1lfTpmYWlsIG1ldGhvZCAnJHtuYW1lfScgbm90IHN1cHBvcnRlZGBcclxuICAgIH07XHJcbiAgICBpc0ZuKGZhaWwpICYmIGZhaWwocmVzKTtcclxuICAgIGlzRm4oY29tcGxldGUpICYmIGNvbXBsZXRlKHJlcyk7XHJcbiAgfVxyXG59XHJcblxyXG5UT0RPUy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgdG9kb0FwaXNbbmFtZV0gPSBjcmVhdGVUb2RvQXBpKG5hbWUpO1xyXG59KTtcclxuXHJcbnZhciBwcm92aWRlcnMgPSB7XHJcbiAgb2F1dGg6IFsndG91dGlhbyddLFxyXG4gIHNoYXJlOiBbJ3RvdXRpYW8nXSxcclxuICBwYXltZW50OiBbJ3RvdXRpYW8nXSxcclxuICBwdXNoOiBbJ3RvdXRpYW8nXVxyXG59O1xyXG5cclxuZnVuY3Rpb24gZ2V0UHJvdmlkZXIgKHtcclxuICBzZXJ2aWNlLFxyXG4gIHN1Y2Nlc3MsXHJcbiAgZmFpbCxcclxuICBjb21wbGV0ZVxyXG59KSB7XHJcbiAgbGV0IHJlcyA9IGZhbHNlO1xyXG4gIGlmIChwcm92aWRlcnNbc2VydmljZV0pIHtcclxuICAgIHJlcyA9IHtcclxuICAgICAgZXJyTXNnOiAnZ2V0UHJvdmlkZXI6b2snLFxyXG4gICAgICBzZXJ2aWNlLFxyXG4gICAgICBwcm92aWRlcjogcHJvdmlkZXJzW3NlcnZpY2VdXHJcbiAgICB9O1xyXG4gICAgaXNGbihzdWNjZXNzKSAmJiBzdWNjZXNzKHJlcyk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJlcyA9IHtcclxuICAgICAgZXJyTXNnOiAnZ2V0UHJvdmlkZXI6ZmFpbCBzZXJ2aWNlIG5vdCBmb3VuZCdcclxuICAgIH07XHJcbiAgICBpc0ZuKGZhaWwpICYmIGZhaWwocmVzKTtcclxuICB9XHJcbiAgaXNGbihjb21wbGV0ZSkgJiYgY29tcGxldGUocmVzKTtcclxufVxyXG5cclxudmFyIGV4dHJhQXBpID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xyXG4gIF9fcHJvdG9fXzogbnVsbCxcclxuICBnZXRQcm92aWRlcjogZ2V0UHJvdmlkZXJcclxufSk7XHJcblxyXG5jb25zdCBnZXRFbWl0dGVyID0gKGZ1bmN0aW9uICgpIHtcclxuICBsZXQgRW1pdHRlcjtcclxuICByZXR1cm4gZnVuY3Rpb24gZ2V0VW5pRW1pdHRlciAoKSB7XHJcbiAgICBpZiAoIUVtaXR0ZXIpIHtcclxuICAgICAgRW1pdHRlciA9IG5ldyBWdWUoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBFbWl0dGVyXHJcbiAgfVxyXG59KSgpO1xyXG5cclxuZnVuY3Rpb24gYXBwbHkgKGN0eCwgbWV0aG9kLCBhcmdzKSB7XHJcbiAgcmV0dXJuIGN0eFttZXRob2RdLmFwcGx5KGN0eCwgYXJncylcclxufVxyXG5cclxuZnVuY3Rpb24gJG9uICgpIHtcclxuICByZXR1cm4gYXBwbHkoZ2V0RW1pdHRlcigpLCAnJG9uJywgWy4uLmFyZ3VtZW50c10pXHJcbn1cclxuZnVuY3Rpb24gJG9mZiAoKSB7XHJcbiAgcmV0dXJuIGFwcGx5KGdldEVtaXR0ZXIoKSwgJyRvZmYnLCBbLi4uYXJndW1lbnRzXSlcclxufVxyXG5mdW5jdGlvbiAkb25jZSAoKSB7XHJcbiAgcmV0dXJuIGFwcGx5KGdldEVtaXR0ZXIoKSwgJyRvbmNlJywgWy4uLmFyZ3VtZW50c10pXHJcbn1cclxuZnVuY3Rpb24gJGVtaXQgKCkge1xyXG4gIHJldHVybiBhcHBseShnZXRFbWl0dGVyKCksICckZW1pdCcsIFsuLi5hcmd1bWVudHNdKVxyXG59XHJcblxyXG52YXIgZXZlbnRBcGkgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmZyZWV6ZSh7XHJcbiAgX19wcm90b19fOiBudWxsLFxyXG4gICRvbjogJG9uLFxyXG4gICRvZmY6ICRvZmYsXHJcbiAgJG9uY2U6ICRvbmNlLFxyXG4gICRlbWl0OiAkZW1pdFxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZU1lZGlhUXVlcnlPYnNlcnZlciAoKSB7XHJcbiAgY29uc3QgbWVkaWFRdWVyeU9ic2VydmVyID0ge307XHJcbiAgY29uc3Qge1xyXG4gICAgd2luZG93V2lkdGgsXHJcbiAgICB3aW5kb3dIZWlnaHRcclxuICB9ID0gdHQuZ2V0U3lzdGVtSW5mb1N5bmMoKTtcclxuXHJcbiAgY29uc3Qgb3JpZW50YXRpb24gPSB3aW5kb3dXaWR0aCA8IHdpbmRvd0hlaWdodCA/ICdwb3J0cmFpdCcgOiAnbGFuZHNjYXBlJztcclxuXHJcbiAgbWVkaWFRdWVyeU9ic2VydmVyLm9ic2VydmUgPSAob3B0aW9ucywgY2FsbGJhY2spID0+IHtcclxuICAgIGxldCBtYXRjaGVzID0gdHJ1ZTtcclxuICAgIGZvciAoY29uc3QgaXRlbSBpbiBvcHRpb25zKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IGl0ZW0gPT09ICdvcmllbnRhdGlvbicgPyBvcHRpb25zW2l0ZW1dIDogTnVtYmVyKG9wdGlvbnNbaXRlbV0pO1xyXG4gICAgICBpZiAob3B0aW9uc1tpdGVtXSAhPT0gJycpIHtcclxuICAgICAgICBpZiAoaXRlbSA9PT0gJ3dpZHRoJykge1xyXG4gICAgICAgICAgaWYgKGl0ZW1WYWx1ZSA9PT0gd2luZG93V2lkdGgpIHtcclxuICAgICAgICAgICAgbWF0Y2hlcyA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtYXRjaGVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG1hdGNoZXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlc1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbSA9PT0gJ21pbldpZHRoJykge1xyXG4gICAgICAgICAgaWYgKHdpbmRvd1dpZHRoID49IGl0ZW1WYWx1ZSkge1xyXG4gICAgICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGNoZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgY2FsbGJhY2sobWF0Y2hlcyk7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtID09PSAnbWF4V2lkdGgnKSB7XHJcbiAgICAgICAgICBpZiAod2luZG93V2lkdGggPD0gaXRlbVZhbHVlKSB7XHJcbiAgICAgICAgICAgIG1hdGNoZXMgPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWF0Y2hlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjYWxsYmFjayhtYXRjaGVzKTtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpdGVtID09PSAnaGVpZ2h0Jykge1xyXG4gICAgICAgICAgaWYgKGl0ZW1WYWx1ZSA9PT0gd2luZG93SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgIG1hdGNoZXMgPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWF0Y2hlcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjYWxsYmFjayhtYXRjaGVzKTtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0gPT09ICdtaW5IZWlnaHQnKSB7XHJcbiAgICAgICAgICBpZiAod2luZG93SGVpZ2h0ID49IGl0ZW1WYWx1ZSkge1xyXG4gICAgICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGNoZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgY2FsbGJhY2sobWF0Y2hlcyk7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtID09PSAnbWF4SGVpZ2h0Jykge1xyXG4gICAgICAgICAgaWYgKHdpbmRvd0hlaWdodCA8PSBpdGVtVmFsdWUpIHtcclxuICAgICAgICAgICAgbWF0Y2hlcyA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtYXRjaGVzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGNhbGxiYWNrKG1hdGNoZXMpO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlc1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGl0ZW0gPT09ICdvcmllbnRhdGlvbicpIHtcclxuICAgICAgICAgIGlmIChvcHRpb25zW2l0ZW1dID09PSBvcmllbnRhdGlvbikge1xyXG4gICAgICAgICAgICBtYXRjaGVzID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1hdGNoZXMgPSBmYWxzZTtcclxuICAgICAgICAgICAgY2FsbGJhY2sobWF0Y2hlcyk7XHJcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjYWxsYmFjayhtYXRjaGVzKTtcclxuXHJcbiAgICByZXR1cm4gbWF0Y2hlc1xyXG4gIH07XHJcblxyXG4gIG1lZGlhUXVlcnlPYnNlcnZlci5kaXNjb25uZWN0ID0gKCkgPT4ge1xyXG4gIH07XHJcblxyXG4gIHJldHVybiBtZWRpYVF1ZXJ5T2JzZXJ2ZXJcclxufVxyXG5cclxudmFyIGFwaSA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcclxuICBfX3Byb3RvX186IG51bGwsXHJcbiAgY3JlYXRlTWVkaWFRdWVyeU9ic2VydmVyOiBjcmVhdGVNZWRpYVF1ZXJ5T2JzZXJ2ZXJcclxufSk7XHJcblxyXG5jb25zdCBNUFBhZ2UgPSBQYWdlO1xyXG5jb25zdCBNUENvbXBvbmVudCA9IENvbXBvbmVudDtcclxuXHJcbmNvbnN0IGN1c3RvbWl6ZVJFID0gLzovZztcclxuXHJcbmNvbnN0IGN1c3RvbWl6ZSA9IGNhY2hlZCgoc3RyKSA9PiB7XHJcbiAgcmV0dXJuIGNhbWVsaXplKHN0ci5yZXBsYWNlKGN1c3RvbWl6ZVJFLCAnLScpKVxyXG59KTtcclxuXHJcbmZ1bmN0aW9uIGluaXRUcmlnZ2VyRXZlbnQgKG1wSW5zdGFuY2UpIHtcclxuICBjb25zdCBvbGRUcmlnZ2VyRXZlbnQgPSBtcEluc3RhbmNlLnRyaWdnZXJFdmVudDtcclxuICBtcEluc3RhbmNlLnRyaWdnZXJFdmVudCA9IGZ1bmN0aW9uIChldmVudCwgLi4uYXJncykge1xyXG4gICAgcmV0dXJuIG9sZFRyaWdnZXJFdmVudC5hcHBseShtcEluc3RhbmNlLCBbY3VzdG9taXplKGV2ZW50KSwgLi4uYXJnc10pXHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdEhvb2sgKG5hbWUsIG9wdGlvbnMpIHtcclxuICBjb25zdCBvbGRIb29rID0gb3B0aW9uc1tuYW1lXTtcclxuICBpZiAoIW9sZEhvb2spIHtcclxuICAgIG9wdGlvbnNbbmFtZV0gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGluaXRUcmlnZ2VyRXZlbnQodGhpcyk7XHJcbiAgICB9O1xyXG4gIH0gZWxzZSB7XHJcbiAgICBvcHRpb25zW25hbWVdID0gZnVuY3Rpb24gKC4uLmFyZ3MpIHtcclxuICAgICAgaW5pdFRyaWdnZXJFdmVudCh0aGlzKTtcclxuICAgICAgcmV0dXJuIG9sZEhvb2suYXBwbHkodGhpcywgYXJncylcclxuICAgIH07XHJcbiAgfVxyXG59XHJcbmlmICghTVBQYWdlLl9fJHdyYXBwZXJlZCkge1xyXG4gIE1QUGFnZS5fXyR3cmFwcGVyZWQgPSB0cnVlO1xyXG4gIFBhZ2UgPSBmdW5jdGlvbiAob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBpbml0SG9vaygnb25Mb2FkJywgb3B0aW9ucyk7XHJcbiAgICByZXR1cm4gTVBQYWdlKG9wdGlvbnMpXHJcbiAgfTtcclxuICBQYWdlLmFmdGVyID0gTVBQYWdlLmFmdGVyO1xyXG5cclxuICBDb21wb25lbnQgPSBmdW5jdGlvbiAob3B0aW9ucyA9IHt9KSB7XHJcbiAgICBpbml0SG9vaygnY3JlYXRlZCcsIG9wdGlvbnMpO1xyXG4gICAgcmV0dXJuIE1QQ29tcG9uZW50KG9wdGlvbnMpXHJcbiAgfTtcclxufVxyXG5cclxuY29uc3QgUEFHRV9FVkVOVF9IT09LUyA9IFtcclxuICAnb25QdWxsRG93blJlZnJlc2gnLFxyXG4gICdvblJlYWNoQm90dG9tJyxcclxuICAnb25BZGRUb0Zhdm9yaXRlcycsXHJcbiAgJ29uU2hhcmVUaW1lbGluZScsXHJcbiAgJ29uU2hhcmVBcHBNZXNzYWdlJyxcclxuICAnb25QYWdlU2Nyb2xsJyxcclxuICAnb25SZXNpemUnLFxyXG4gICdvblRhYkl0ZW1UYXAnXHJcbl07XHJcblxyXG5mdW5jdGlvbiBpbml0TW9ja3MgKHZtLCBtb2Nrcykge1xyXG4gIGNvbnN0IG1wSW5zdGFuY2UgPSB2bS4kbXBbdm0ubXBUeXBlXTtcclxuICBtb2Nrcy5mb3JFYWNoKG1vY2sgPT4ge1xyXG4gICAgaWYgKGhhc093bihtcEluc3RhbmNlLCBtb2NrKSkge1xyXG4gICAgICB2bVttb2NrXSA9IG1wSW5zdGFuY2VbbW9ja107XHJcbiAgICB9XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhc0hvb2sgKGhvb2ssIHZ1ZU9wdGlvbnMpIHtcclxuICBpZiAoIXZ1ZU9wdGlvbnMpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICBpZiAoVnVlLm9wdGlvbnMgJiYgQXJyYXkuaXNBcnJheShWdWUub3B0aW9uc1tob29rXSkpIHtcclxuICAgIHJldHVybiB0cnVlXHJcbiAgfVxyXG5cclxuICB2dWVPcHRpb25zID0gdnVlT3B0aW9ucy5kZWZhdWx0IHx8IHZ1ZU9wdGlvbnM7XHJcblxyXG4gIGlmIChpc0ZuKHZ1ZU9wdGlvbnMpKSB7XHJcbiAgICBpZiAoaXNGbih2dWVPcHRpb25zLmV4dGVuZE9wdGlvbnNbaG9va10pKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICBpZiAodnVlT3B0aW9ucy5zdXBlciAmJlxyXG4gICAgICB2dWVPcHRpb25zLnN1cGVyLm9wdGlvbnMgJiZcclxuICAgICAgQXJyYXkuaXNBcnJheSh2dWVPcHRpb25zLnN1cGVyLm9wdGlvbnNbaG9va10pKSB7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGlmIChpc0ZuKHZ1ZU9wdGlvbnNbaG9va10pKSB7XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuICBjb25zdCBtaXhpbnMgPSB2dWVPcHRpb25zLm1peGlucztcclxuICBpZiAoQXJyYXkuaXNBcnJheShtaXhpbnMpKSB7XHJcbiAgICByZXR1cm4gISFtaXhpbnMuZmluZChtaXhpbiA9PiBoYXNIb29rKGhvb2ssIG1peGluKSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRIb29rcyAobXBPcHRpb25zLCBob29rcywgdnVlT3B0aW9ucykge1xyXG4gIGhvb2tzLmZvckVhY2goaG9vayA9PiB7XHJcbiAgICBpZiAoaGFzSG9vayhob29rLCB2dWVPcHRpb25zKSkge1xyXG4gICAgICBtcE9wdGlvbnNbaG9va10gPSBmdW5jdGlvbiAoYXJncykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiR2bSAmJiB0aGlzLiR2bS5fX2NhbGxfaG9vayhob29rLCBhcmdzKVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0VnVlQ29tcG9uZW50IChWdWUsIHZ1ZU9wdGlvbnMpIHtcclxuICB2dWVPcHRpb25zID0gdnVlT3B0aW9ucy5kZWZhdWx0IHx8IHZ1ZU9wdGlvbnM7XHJcbiAgbGV0IFZ1ZUNvbXBvbmVudDtcclxuICBpZiAoaXNGbih2dWVPcHRpb25zKSkge1xyXG4gICAgVnVlQ29tcG9uZW50ID0gdnVlT3B0aW9ucztcclxuICB9IGVsc2Uge1xyXG4gICAgVnVlQ29tcG9uZW50ID0gVnVlLmV4dGVuZCh2dWVPcHRpb25zKTtcclxuICB9XHJcbiAgdnVlT3B0aW9ucyA9IFZ1ZUNvbXBvbmVudC5vcHRpb25zO1xyXG4gIHJldHVybiBbVnVlQ29tcG9uZW50LCB2dWVPcHRpb25zXVxyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0U2xvdHMgKHZtLCB2dWVTbG90cykge1xyXG4gIGlmIChBcnJheS5pc0FycmF5KHZ1ZVNsb3RzKSAmJiB2dWVTbG90cy5sZW5ndGgpIHtcclxuICAgIGNvbnN0ICRzbG90cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XHJcbiAgICB2dWVTbG90cy5mb3JFYWNoKHNsb3ROYW1lID0+IHtcclxuICAgICAgJHNsb3RzW3Nsb3ROYW1lXSA9IHRydWU7XHJcbiAgICB9KTtcclxuICAgIHZtLiRzY29wZWRTbG90cyA9IHZtLiRzbG90cyA9ICRzbG90cztcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluaXRWdWVJZHMgKHZ1ZUlkcywgbXBJbnN0YW5jZSkge1xyXG4gIHZ1ZUlkcyA9ICh2dWVJZHMgfHwgJycpLnNwbGl0KCcsJyk7XHJcbiAgY29uc3QgbGVuID0gdnVlSWRzLmxlbmd0aDtcclxuXHJcbiAgaWYgKGxlbiA9PT0gMSkge1xyXG4gICAgbXBJbnN0YW5jZS5fJHZ1ZUlkID0gdnVlSWRzWzBdO1xyXG4gIH0gZWxzZSBpZiAobGVuID09PSAyKSB7XHJcbiAgICBtcEluc3RhbmNlLl8kdnVlSWQgPSB2dWVJZHNbMF07XHJcbiAgICBtcEluc3RhbmNlLl8kdnVlUGlkID0gdnVlSWRzWzFdO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdERhdGEgKHZ1ZU9wdGlvbnMsIGNvbnRleHQpIHtcclxuICBsZXQgZGF0YSA9IHZ1ZU9wdGlvbnMuZGF0YSB8fCB7fTtcclxuICBjb25zdCBtZXRob2RzID0gdnVlT3B0aW9ucy5tZXRob2RzIHx8IHt9O1xyXG5cclxuICBpZiAodHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGRhdGEgPSBkYXRhLmNhbGwoY29udGV4dCk7IC8vIOaUr+aMgSBWdWUucHJvdG90eXBlIOS4iuaMgueahOaVsOaNrlxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuVlVFX0FQUF9ERUJVRykge1xyXG4gICAgICAgIGNvbnNvbGUud2Fybign5qC55o2uIFZ1ZSDnmoQgZGF0YSDlh73mlbDliJ3lp4vljJblsI/nqIvluo8gZGF0YSDlpLHotKXvvIzor7flsL3ph4/noa7kv50gZGF0YSDlh73mlbDkuK3kuI3orr/pl64gdm0g5a+56LGh77yM5ZCm5YiZ5Y+v6IO95b2x5ZON6aaW5qyh5pWw5o2u5riy5p+T6YCf5bqm44CCJywgZGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9IGVsc2Uge1xyXG4gICAgdHJ5IHtcclxuICAgICAgLy8g5a+5IGRhdGEg5qC85byP5YyWXHJcbiAgICAgIGRhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgfVxyXG5cclxuICBpZiAoIWlzUGxhaW5PYmplY3QoZGF0YSkpIHtcclxuICAgIGRhdGEgPSB7fTtcclxuICB9XHJcblxyXG4gIE9iamVjdC5rZXlzKG1ldGhvZHMpLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XHJcbiAgICBpZiAoY29udGV4dC5fX2xpZmVjeWNsZV9ob29rc19fLmluZGV4T2YobWV0aG9kTmFtZSkgPT09IC0xICYmICFoYXNPd24oZGF0YSwgbWV0aG9kTmFtZSkpIHtcclxuICAgICAgZGF0YVttZXRob2ROYW1lXSA9IG1ldGhvZHNbbWV0aG9kTmFtZV07XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiBkYXRhXHJcbn1cclxuXHJcbmNvbnN0IFBST1BfVFlQRVMgPSBbU3RyaW5nLCBOdW1iZXIsIEJvb2xlYW4sIE9iamVjdCwgQXJyYXksIG51bGxdO1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlT2JzZXJ2ZXIgKG5hbWUpIHtcclxuICByZXR1cm4gZnVuY3Rpb24gb2JzZXJ2ZXIgKG5ld1ZhbCwgb2xkVmFsKSB7XHJcbiAgICBpZiAodGhpcy4kdm0pIHtcclxuICAgICAgdGhpcy4kdm1bbmFtZV0gPSBuZXdWYWw7IC8vIOS4uuS6huinpuWPkeWFtuS7lumdniByZW5kZXIgd2F0Y2hlclxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdEJlaGF2aW9ycyAodnVlT3B0aW9ucywgaW5pdEJlaGF2aW9yKSB7XHJcbiAgY29uc3QgdnVlQmVoYXZpb3JzID0gdnVlT3B0aW9ucy5iZWhhdmlvcnM7XHJcbiAgY29uc3QgdnVlRXh0ZW5kcyA9IHZ1ZU9wdGlvbnMuZXh0ZW5kcztcclxuICBjb25zdCB2dWVNaXhpbnMgPSB2dWVPcHRpb25zLm1peGlucztcclxuXHJcbiAgbGV0IHZ1ZVByb3BzID0gdnVlT3B0aW9ucy5wcm9wcztcclxuXHJcbiAgaWYgKCF2dWVQcm9wcykge1xyXG4gICAgdnVlT3B0aW9ucy5wcm9wcyA9IHZ1ZVByb3BzID0gW107XHJcbiAgfVxyXG5cclxuICBjb25zdCBiZWhhdmlvcnMgPSBbXTtcclxuICBpZiAoQXJyYXkuaXNBcnJheSh2dWVCZWhhdmlvcnMpKSB7XHJcbiAgICB2dWVCZWhhdmlvcnMuZm9yRWFjaChiZWhhdmlvciA9PiB7XHJcbiAgICAgIGJlaGF2aW9ycy5wdXNoKGJlaGF2aW9yLnJlcGxhY2UoJ3VuaTovLycsIGAke1widHRcIn06Ly9gKSk7XHJcbiAgICAgIGlmIChiZWhhdmlvciA9PT0gJ3VuaTovL2Zvcm0tZmllbGQnKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodnVlUHJvcHMpKSB7XHJcbiAgICAgICAgICB2dWVQcm9wcy5wdXNoKCduYW1lJyk7XHJcbiAgICAgICAgICB2dWVQcm9wcy5wdXNoKCd2YWx1ZScpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB2dWVQcm9wcy5uYW1lID0ge1xyXG4gICAgICAgICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdnVlUHJvcHMudmFsdWUgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlciwgQm9vbGVhbiwgQXJyYXksIE9iamVjdCwgRGF0ZV0sXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6ICcnXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGlmIChpc1BsYWluT2JqZWN0KHZ1ZUV4dGVuZHMpICYmIHZ1ZUV4dGVuZHMucHJvcHMpIHtcclxuICAgIGJlaGF2aW9ycy5wdXNoKFxyXG4gICAgICBpbml0QmVoYXZpb3Ioe1xyXG4gICAgICAgIHByb3BlcnRpZXM6IGluaXRQcm9wZXJ0aWVzKHZ1ZUV4dGVuZHMucHJvcHMsIHRydWUpXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBpZiAoQXJyYXkuaXNBcnJheSh2dWVNaXhpbnMpKSB7XHJcbiAgICB2dWVNaXhpbnMuZm9yRWFjaCh2dWVNaXhpbiA9PiB7XHJcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZ1ZU1peGluKSAmJiB2dWVNaXhpbi5wcm9wcykge1xyXG4gICAgICAgIGJlaGF2aW9ycy5wdXNoKFxyXG4gICAgICAgICAgaW5pdEJlaGF2aW9yKHtcclxuICAgICAgICAgICAgcHJvcGVydGllczogaW5pdFByb3BlcnRpZXModnVlTWl4aW4ucHJvcHMsIHRydWUpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICByZXR1cm4gYmVoYXZpb3JzXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlUHJvcFR5cGUgKGtleSwgdHlwZSwgZGVmYXVsdFZhbHVlLCBmaWxlKSB7XHJcbiAgLy8gW1N0cmluZ109PlN0cmluZ1xyXG4gIGlmIChBcnJheS5pc0FycmF5KHR5cGUpICYmIHR5cGUubGVuZ3RoID09PSAxKSB7XHJcbiAgICByZXR1cm4gdHlwZVswXVxyXG4gIH1cclxuICByZXR1cm4gdHlwZVxyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0UHJvcGVydGllcyAocHJvcHMsIGlzQmVoYXZpb3IgPSBmYWxzZSwgZmlsZSA9ICcnKSB7XHJcbiAgY29uc3QgcHJvcGVydGllcyA9IHt9O1xyXG4gIGlmICghaXNCZWhhdmlvcikge1xyXG4gICAgcHJvcGVydGllcy52dWVJZCA9IHtcclxuICAgICAgdHlwZTogU3RyaW5nLFxyXG4gICAgICB2YWx1ZTogJydcclxuICAgIH07XHJcbiAgICAvLyDnlKjkuo7lrZfoioLot7PliqjlsI/nqIvluo/mqKHmi5/mir3osaHoioLngrlcclxuICAgIHByb3BlcnRpZXMuZ2VuZXJpYyA9IHtcclxuICAgICAgdHlwZTogT2JqZWN0LFxyXG4gICAgICB2YWx1ZTogbnVsbFxyXG4gICAgfTtcclxuICAgIC8vIHNjb3BlZFNsb3RzQ29tcGlsZXIgYXV0b1xyXG4gICAgcHJvcGVydGllcy5zY29wZWRTbG90c0NvbXBpbGVyID0ge1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIHZhbHVlOiAnJ1xyXG4gICAgfTtcclxuICAgIHByb3BlcnRpZXMudnVlU2xvdHMgPSB7IC8vIOWwj+eoi+W6j+S4jeiDveebtOaOpeWumuS5iSAkc2xvdHMg55qEIHByb3Bz77yM5omA5Lul6YCa6L+HIHZ1ZVNsb3RzIOi9rOaNouWIsCAkc2xvdHNcclxuICAgICAgdHlwZTogbnVsbCxcclxuICAgICAgdmFsdWU6IFtdLFxyXG4gICAgICBvYnNlcnZlcjogZnVuY3Rpb24gKG5ld1ZhbCwgb2xkVmFsKSB7XHJcbiAgICAgICAgY29uc3QgJHNsb3RzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuICAgICAgICBuZXdWYWwuZm9yRWFjaChzbG90TmFtZSA9PiB7XHJcbiAgICAgICAgICAkc2xvdHNbc2xvdE5hbWVdID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgICAgJHNsb3RzXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BzKSkgeyAvLyBbJ3RpdGxlJ11cclxuICAgIHByb3BzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgcHJvcGVydGllc1trZXldID0ge1xyXG4gICAgICAgIHR5cGU6IG51bGwsXHJcbiAgICAgICAgb2JzZXJ2ZXI6IGNyZWF0ZU9ic2VydmVyKGtleSlcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChwcm9wcykpIHsgLy8ge3RpdGxlOnt0eXBlOlN0cmluZyxkZWZhdWx0OicnfSxjb250ZW50OlN0cmluZ31cclxuICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgIGNvbnN0IG9wdHMgPSBwcm9wc1trZXldO1xyXG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChvcHRzKSkgeyAvLyB0aXRsZTp7dHlwZTpTdHJpbmcsZGVmYXVsdDonJ31cclxuICAgICAgICBsZXQgdmFsdWUgPSBvcHRzLmRlZmF1bHQ7XHJcbiAgICAgICAgaWYgKGlzRm4odmFsdWUpKSB7XHJcbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBvcHRzLnR5cGUgPSBwYXJzZVByb3BUeXBlKGtleSwgb3B0cy50eXBlKTtcclxuXHJcbiAgICAgICAgcHJvcGVydGllc1trZXldID0ge1xyXG4gICAgICAgICAgdHlwZTogUFJPUF9UWVBFUy5pbmRleE9mKG9wdHMudHlwZSkgIT09IC0xID8gb3B0cy50eXBlIDogbnVsbCxcclxuICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgb2JzZXJ2ZXI6IGNyZWF0ZU9ic2VydmVyKGtleSlcclxuICAgICAgICB9O1xyXG4gICAgICB9IGVsc2UgeyAvLyBjb250ZW50OlN0cmluZ1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBwYXJzZVByb3BUeXBlKGtleSwgb3B0cyk7XHJcbiAgICAgICAgcHJvcGVydGllc1trZXldID0ge1xyXG4gICAgICAgICAgdHlwZTogUFJPUF9UWVBFUy5pbmRleE9mKHR5cGUpICE9PSAtMSA/IHR5cGUgOiBudWxsLFxyXG4gICAgICAgICAgb2JzZXJ2ZXI6IGNyZWF0ZU9ic2VydmVyKGtleSlcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmV0dXJuIHByb3BlcnRpZXNcclxufVxyXG5cclxuZnVuY3Rpb24gd3JhcHBlciQxIChldmVudCkge1xyXG4gIC8vIFRPRE8g5Y+I5b6X5YW85a65IG1wdnVlIOeahCBtcCDlr7nosaFcclxuICB0cnkge1xyXG4gICAgZXZlbnQubXAgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGV2ZW50KSk7XHJcbiAgfSBjYXRjaCAoZSkge31cclxuXHJcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uID0gbm9vcDtcclxuICBldmVudC5wcmV2ZW50RGVmYXVsdCA9IG5vb3A7XHJcblxyXG4gIGV2ZW50LnRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCB7fTtcclxuXHJcbiAgaWYgKCFoYXNPd24oZXZlbnQsICdkZXRhaWwnKSkge1xyXG4gICAgZXZlbnQuZGV0YWlsID0ge307XHJcbiAgfVxyXG5cclxuICBpZiAoaGFzT3duKGV2ZW50LCAnbWFya2VySWQnKSkge1xyXG4gICAgZXZlbnQuZGV0YWlsID0gdHlwZW9mIGV2ZW50LmRldGFpbCA9PT0gJ29iamVjdCcgPyBldmVudC5kZXRhaWwgOiB7fTtcclxuICAgIGV2ZW50LmRldGFpbC5tYXJrZXJJZCA9IGV2ZW50Lm1hcmtlcklkO1xyXG4gIH1cclxuXHJcbiAgaWYgKGlzUGxhaW5PYmplY3QoZXZlbnQuZGV0YWlsKSkge1xyXG4gICAgZXZlbnQudGFyZ2V0ID0gT2JqZWN0LmFzc2lnbih7fSwgZXZlbnQudGFyZ2V0LCBldmVudC5kZXRhaWwpO1xyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGV2ZW50XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEV4dHJhVmFsdWUgKHZtLCBkYXRhUGF0aHNBcnJheSkge1xyXG4gIGxldCBjb250ZXh0ID0gdm07XHJcbiAgZGF0YVBhdGhzQXJyYXkuZm9yRWFjaChkYXRhUGF0aEFycmF5ID0+IHtcclxuICAgIGNvbnN0IGRhdGFQYXRoID0gZGF0YVBhdGhBcnJheVswXTtcclxuICAgIGNvbnN0IHZhbHVlID0gZGF0YVBhdGhBcnJheVsyXTtcclxuICAgIGlmIChkYXRhUGF0aCB8fCB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7IC8vIFsnJywnJyxpbmRleCwnZGlzYWJsZSddXHJcbiAgICAgIGNvbnN0IHByb3BQYXRoID0gZGF0YVBhdGhBcnJheVsxXTtcclxuICAgICAgY29uc3QgdmFsdWVQYXRoID0gZGF0YVBhdGhBcnJheVszXTtcclxuXHJcbiAgICAgIGxldCB2Rm9yO1xyXG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihkYXRhUGF0aCkpIHtcclxuICAgICAgICB2Rm9yID0gZGF0YVBhdGg7XHJcbiAgICAgIH0gZWxzZSBpZiAoIWRhdGFQYXRoKSB7XHJcbiAgICAgICAgdkZvciA9IGNvbnRleHQ7XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRhdGFQYXRoID09PSAnc3RyaW5nJyAmJiBkYXRhUGF0aCkge1xyXG4gICAgICAgIGlmIChkYXRhUGF0aC5pbmRleE9mKCcjcyMnKSA9PT0gMCkge1xyXG4gICAgICAgICAgdkZvciA9IGRhdGFQYXRoLnN1YnN0cigzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdkZvciA9IHZtLl9fZ2V0X3ZhbHVlKGRhdGFQYXRoLCBjb250ZXh0KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKHZGb3IpKSB7XHJcbiAgICAgICAgY29udGV4dCA9IHZhbHVlO1xyXG4gICAgICB9IGVsc2UgaWYgKCFwcm9wUGF0aCkge1xyXG4gICAgICAgIGNvbnRleHQgPSB2Rm9yW3ZhbHVlXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2Rm9yKSkge1xyXG4gICAgICAgICAgY29udGV4dCA9IHZGb3IuZmluZCh2Rm9ySXRlbSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB2bS5fX2dldF92YWx1ZShwcm9wUGF0aCwgdkZvckl0ZW0pID09PSB2YWx1ZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZGb3IpKSB7XHJcbiAgICAgICAgICBjb250ZXh0ID0gT2JqZWN0LmtleXModkZvcikuZmluZCh2Rm9yS2V5ID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHZtLl9fZ2V0X3ZhbHVlKHByb3BQYXRoLCB2Rm9yW3ZGb3JLZXldKSA9PT0gdmFsdWVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCd2LWZvciDmmoLkuI3mlK/mjIHlvqrnjq/mlbDmja7vvJonLCB2Rm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh2YWx1ZVBhdGgpIHtcclxuICAgICAgICBjb250ZXh0ID0gdm0uX19nZXRfdmFsdWUodmFsdWVQYXRoLCBjb250ZXh0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG4gIHJldHVybiBjb250ZXh0XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHByb2Nlc3NFdmVudEV4dHJhICh2bSwgZXh0cmEsIGV2ZW50KSB7XHJcbiAgY29uc3QgZXh0cmFPYmogPSB7fTtcclxuXHJcbiAgaWYgKEFycmF5LmlzQXJyYXkoZXh0cmEpICYmIGV4dHJhLmxlbmd0aCkge1xyXG4gICAgLyoqXHJcbiAgICAgKltcclxuICAgICAqICAgIFsnZGF0YS5pdGVtcycsICdkYXRhLmlkJywgaXRlbS5kYXRhLmlkXSxcclxuICAgICAqICAgIFsnbWV0YXMnLCAnaWQnLCBtZXRhLmlkXVxyXG4gICAgICpdLFxyXG4gICAgICpbXHJcbiAgICAgKiAgICBbJ2RhdGEuaXRlbXMnLCAnZGF0YS5pZCcsIGl0ZW0uZGF0YS5pZF0sXHJcbiAgICAgKiAgICBbJ21ldGFzJywgJ2lkJywgbWV0YS5pZF1cclxuICAgICAqXSxcclxuICAgICAqJ3Rlc3QnXHJcbiAgICAgKi9cclxuICAgIGV4dHJhLmZvckVhY2goKGRhdGFQYXRoLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAodHlwZW9mIGRhdGFQYXRoID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmICghZGF0YVBhdGgpIHsgLy8gbW9kZWwscHJvcC5zeW5jXHJcbiAgICAgICAgICBleHRyYU9ialsnJCcgKyBpbmRleF0gPSB2bTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGRhdGFQYXRoID09PSAnJGV2ZW50JykgeyAvLyAkZXZlbnRcclxuICAgICAgICAgICAgZXh0cmFPYmpbJyQnICsgaW5kZXhdID0gZXZlbnQ7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoID09PSAnYXJndW1lbnRzJykge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQuZGV0YWlsICYmIGV2ZW50LmRldGFpbC5fX2FyZ3NfXykge1xyXG4gICAgICAgICAgICAgIGV4dHJhT2JqWyckJyArIGluZGV4XSA9IGV2ZW50LmRldGFpbC5fX2FyZ3NfXztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBleHRyYU9ialsnJCcgKyBpbmRleF0gPSBbZXZlbnRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoLmluZGV4T2YoJyRldmVudC4nKSA9PT0gMCkgeyAvLyAkZXZlbnQudGFyZ2V0LnZhbHVlXHJcbiAgICAgICAgICAgIGV4dHJhT2JqWyckJyArIGluZGV4XSA9IHZtLl9fZ2V0X3ZhbHVlKGRhdGFQYXRoLnJlcGxhY2UoJyRldmVudC4nLCAnJyksIGV2ZW50KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGV4dHJhT2JqWyckJyArIGluZGV4XSA9IHZtLl9fZ2V0X3ZhbHVlKGRhdGFQYXRoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXh0cmFPYmpbJyQnICsgaW5kZXhdID0gZ2V0RXh0cmFWYWx1ZSh2bSwgZGF0YVBhdGgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJldHVybiBleHRyYU9ialxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRPYmpCeUFycmF5IChhcnIpIHtcclxuICBjb25zdCBvYmogPSB7fTtcclxuICBmb3IgKGxldCBpID0gMTsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGFycltpXTtcclxuICAgIG9ialtlbGVtZW50WzBdXSA9IGVsZW1lbnRbMV07XHJcbiAgfVxyXG4gIHJldHVybiBvYmpcclxufVxyXG5cclxuZnVuY3Rpb24gcHJvY2Vzc0V2ZW50QXJncyAodm0sIGV2ZW50LCBhcmdzID0gW10sIGV4dHJhID0gW10sIGlzQ3VzdG9tLCBtZXRob2ROYW1lKSB7XHJcbiAgbGV0IGlzQ3VzdG9tTVBFdmVudCA9IGZhbHNlOyAvLyB3eGNvbXBvbmVudCDnu4Tku7bvvIzkvKDpgJLljp/lp4sgZXZlbnQg5a+56LGhXHJcbiAgaWYgKGlzQ3VzdG9tKSB7IC8vIOiHquWumuS5ieS6i+S7tlxyXG4gICAgaXNDdXN0b21NUEV2ZW50ID0gZXZlbnQuY3VycmVudFRhcmdldCAmJlxyXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LmRhdGFzZXQgJiZcclxuICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5kYXRhc2V0LmNvbVR5cGUgPT09ICd3eCc7XHJcbiAgICBpZiAoIWFyZ3MubGVuZ3RoKSB7IC8vIOaXoOWPguaVsO+8jOebtOaOpeS8oOWFpSBldmVudCDmiJYgZGV0YWlsIOaVsOe7hFxyXG4gICAgICBpZiAoaXNDdXN0b21NUEV2ZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIFtldmVudF1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZXZlbnQuZGV0YWlsLl9fYXJnc19fIHx8IGV2ZW50LmRldGFpbFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgZXh0cmFPYmogPSBwcm9jZXNzRXZlbnRFeHRyYSh2bSwgZXh0cmEsIGV2ZW50KTtcclxuXHJcbiAgY29uc3QgcmV0ID0gW107XHJcbiAgYXJncy5mb3JFYWNoKGFyZyA9PiB7XHJcbiAgICBpZiAoYXJnID09PSAnJGV2ZW50Jykge1xyXG4gICAgICBpZiAobWV0aG9kTmFtZSA9PT0gJ19fc2V0X21vZGVsJyAmJiAhaXNDdXN0b20pIHsgLy8gaW5wdXQgdi1tb2RlbCB2YWx1ZVxyXG4gICAgICAgIHJldC5wdXNoKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGlzQ3VzdG9tICYmICFpc0N1c3RvbU1QRXZlbnQpIHtcclxuICAgICAgICAgIHJldC5wdXNoKGV2ZW50LmRldGFpbC5fX2FyZ3NfX1swXSk7XHJcbiAgICAgICAgfSBlbHNlIHsgLy8gd3hjb21wb25lbnQg57uE5Lu25oiW5YaF572u57uE5Lu2XHJcbiAgICAgICAgICByZXQucHVzaChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcmcpICYmIGFyZ1swXSA9PT0gJ28nKSB7XHJcbiAgICAgICAgcmV0LnB1c2goZ2V0T2JqQnlBcnJheShhcmcpKTtcclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJyAmJiBoYXNPd24oZXh0cmFPYmosIGFyZykpIHtcclxuICAgICAgICByZXQucHVzaChleHRyYU9ialthcmddKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXQucHVzaChhcmcpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSk7XHJcblxyXG4gIHJldHVybiByZXRcclxufVxyXG5cclxuY29uc3QgT05DRSA9ICd+JztcclxuY29uc3QgQ1VTVE9NID0gJ14nO1xyXG5cclxuZnVuY3Rpb24gaXNNYXRjaEV2ZW50VHlwZSAoZXZlbnRUeXBlLCBvcHRUeXBlKSB7XHJcbiAgcmV0dXJuIChldmVudFR5cGUgPT09IG9wdFR5cGUpIHx8XHJcbiAgICAoXHJcbiAgICAgIG9wdFR5cGUgPT09ICdyZWdpb25jaGFuZ2UnICYmXHJcbiAgICAgIChcclxuICAgICAgICBldmVudFR5cGUgPT09ICdiZWdpbicgfHxcclxuICAgICAgICBldmVudFR5cGUgPT09ICdlbmQnXHJcbiAgICAgIClcclxuICAgIClcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q29udGV4dFZtICh2bSkge1xyXG4gIGxldCAkcGFyZW50ID0gdm0uJHBhcmVudDtcclxuICAvLyDniLbnu4Tku7bmmK8gc2NvcGVkIHNsb3RzIOaIluiAheWFtuS7luiHquWumuS5iee7hOS7tuaXtue7p+e7reafpeaJvlxyXG4gIHdoaWxlICgkcGFyZW50ICYmICRwYXJlbnQuJHBhcmVudCAmJiAoJHBhcmVudC4kb3B0aW9ucy5nZW5lcmljIHx8ICRwYXJlbnQuJHBhcmVudC4kb3B0aW9ucy5nZW5lcmljIHx8ICRwYXJlbnQuJHNjb3BlLl8kdnVlUGlkKSkge1xyXG4gICAgJHBhcmVudCA9ICRwYXJlbnQuJHBhcmVudDtcclxuICB9XHJcbiAgcmV0dXJuICRwYXJlbnQgJiYgJHBhcmVudC4kcGFyZW50XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZUV2ZW50IChldmVudCkge1xyXG4gIGV2ZW50ID0gd3JhcHBlciQxKGV2ZW50KTtcclxuXHJcbiAgLy8gW1sndGFwJyxbWydoYW5kbGUnLFsxLDIsYV1dLFsnaGFuZGxlMScsWzEsMixhXV1dXV1cclxuICBjb25zdCBkYXRhc2V0ID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgfHwgZXZlbnQudGFyZ2V0KS5kYXRhc2V0O1xyXG4gIGlmICghZGF0YXNldCkge1xyXG4gICAgcmV0dXJuIGNvbnNvbGUud2Fybign5LqL5Lu25L+h5oGv5LiN5a2Y5ZyoJylcclxuICB9XHJcbiAgY29uc3QgZXZlbnRPcHRzID0gZGF0YXNldC5ldmVudE9wdHMgfHwgZGF0YXNldFsnZXZlbnQtb3B0cyddOyAvLyDmlK/ku5jlrp0gd2ViLXZpZXcg57uE5Lu2IGRhdGFzZXQg6Z2e6am85bOwXHJcbiAgaWYgKCFldmVudE9wdHMpIHtcclxuICAgIHJldHVybiBjb25zb2xlLndhcm4oJ+S6i+S7tuS/oeaBr+S4jeWtmOWcqCcpXHJcbiAgfVxyXG5cclxuICAvLyBbWydoYW5kbGUnLFsxLDIsYV1dLFsnaGFuZGxlMScsWzEsMixhXV1dXHJcbiAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnQudHlwZTtcclxuXHJcbiAgY29uc3QgcmV0ID0gW107XHJcblxyXG4gIGV2ZW50T3B0cy5mb3JFYWNoKGV2ZW50T3B0ID0+IHtcclxuICAgIGxldCB0eXBlID0gZXZlbnRPcHRbMF07XHJcbiAgICBjb25zdCBldmVudHNBcnJheSA9IGV2ZW50T3B0WzFdO1xyXG5cclxuICAgIGNvbnN0IGlzQ3VzdG9tID0gdHlwZS5jaGFyQXQoMCkgPT09IENVU1RPTTtcclxuICAgIHR5cGUgPSBpc0N1c3RvbSA/IHR5cGUuc2xpY2UoMSkgOiB0eXBlO1xyXG4gICAgY29uc3QgaXNPbmNlID0gdHlwZS5jaGFyQXQoMCkgPT09IE9OQ0U7XHJcbiAgICB0eXBlID0gaXNPbmNlID8gdHlwZS5zbGljZSgxKSA6IHR5cGU7XHJcblxyXG4gICAgaWYgKGV2ZW50c0FycmF5ICYmIGlzTWF0Y2hFdmVudFR5cGUoZXZlbnRUeXBlLCB0eXBlKSkge1xyXG4gICAgICBldmVudHNBcnJheS5mb3JFYWNoKGV2ZW50QXJyYXkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1ldGhvZE5hbWUgPSBldmVudEFycmF5WzBdO1xyXG4gICAgICAgIGlmIChtZXRob2ROYW1lKSB7XHJcbiAgICAgICAgICBsZXQgaGFuZGxlckN0eCA9IHRoaXMuJHZtO1xyXG4gICAgICAgICAgaWYgKGhhbmRsZXJDdHguJG9wdGlvbnMuZ2VuZXJpYykgeyAvLyBtcC13ZWl4aW4sbXAtdG91dGlhbyDmir3osaHoioLngrnmqKHmi58gc2NvcGVkIHNsb3RzXHJcbiAgICAgICAgICAgIGhhbmRsZXJDdHggPSBnZXRDb250ZXh0Vm0oaGFuZGxlckN0eCkgfHwgaGFuZGxlckN0eDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChtZXRob2ROYW1lID09PSAnJGVtaXQnKSB7XHJcbiAgICAgICAgICAgIGhhbmRsZXJDdHguJGVtaXQuYXBwbHkoaGFuZGxlckN0eCxcclxuICAgICAgICAgICAgICBwcm9jZXNzRXZlbnRBcmdzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy4kdm0sXHJcbiAgICAgICAgICAgICAgICBldmVudCxcclxuICAgICAgICAgICAgICAgIGV2ZW50QXJyYXlbMV0sXHJcbiAgICAgICAgICAgICAgICBldmVudEFycmF5WzJdLFxyXG4gICAgICAgICAgICAgICAgaXNDdXN0b20sXHJcbiAgICAgICAgICAgICAgICBtZXRob2ROYW1lXHJcbiAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgaGFuZGxlciA9IGhhbmRsZXJDdHhbbWV0aG9kTmFtZV07XHJcbiAgICAgICAgICBpZiAoIWlzRm4oaGFuZGxlcikpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAgX3ZtLiR7bWV0aG9kTmFtZX0gaXMgbm90IGEgZnVuY3Rpb25gKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKGlzT25jZSkge1xyXG4gICAgICAgICAgICBpZiAoaGFuZGxlci5vbmNlKSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaGFuZGxlci5vbmNlID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBwYXJhbXMgPSBwcm9jZXNzRXZlbnRBcmdzKFxyXG4gICAgICAgICAgICB0aGlzLiR2bSxcclxuICAgICAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgICAgIGV2ZW50QXJyYXlbMV0sXHJcbiAgICAgICAgICAgIGV2ZW50QXJyYXlbMl0sXHJcbiAgICAgICAgICAgIGlzQ3VzdG9tLFxyXG4gICAgICAgICAgICBtZXRob2ROYW1lXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcGFyYW1zID0gQXJyYXkuaXNBcnJheShwYXJhbXMpID8gcGFyYW1zIDogW107XHJcbiAgICAgICAgICAvLyDlj4LmlbDlsL7pg6jlop7liqDljp/lp4vkuovku7blr7nosaHnlKjkuo7lpI3mnYLooajovr7lvI/lhoXojrflj5bpop3lpJbmlbDmja5cclxuICAgICAgICAgIGlmICgvPVxccypcXFMrXFwuZXZlbnRQYXJhbXNcXHMqXFx8XFx8XFxzKlxcUytcXFtbJ1wiXWV2ZW50LXBhcmFtc1snXCJdXFxdLy50ZXN0KGhhbmRsZXIudG9TdHJpbmcoKSkpIHtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNwYXJzZS1hcnJheXNcclxuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLmNvbmNhdChbLCAsICwgLCAsICwgLCAsICwgLCBldmVudF0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0LnB1c2goaGFuZGxlci5hcHBseShoYW5kbGVyQ3R4LCBwYXJhbXMpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBpZiAoXHJcbiAgICBldmVudFR5cGUgPT09ICdpbnB1dCcgJiZcclxuICAgIHJldC5sZW5ndGggPT09IDEgJiZcclxuICAgIHR5cGVvZiByZXRbMF0gIT09ICd1bmRlZmluZWQnXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gcmV0WzBdXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBob29rcyA9IFtcclxuICAnb25TaG93JyxcclxuICAnb25IaWRlJyxcclxuICAnb25FcnJvcicsXHJcbiAgJ29uUGFnZU5vdEZvdW5kJyxcclxuICAnb25UaGVtZUNoYW5nZScsXHJcbiAgJ29uVW5oYW5kbGVkUmVqZWN0aW9uJ1xyXG5dO1xyXG5cclxuZnVuY3Rpb24gaW5pdEV2ZW50Q2hhbm5lbCQxICgpIHtcclxuICBWdWUucHJvdG90eXBlLmdldE9wZW5lckV2ZW50Q2hhbm5lbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGlmICghdGhpcy5fX2V2ZW50Q2hhbm5lbF9fKSB7XHJcbiAgICAgIHRoaXMuX19ldmVudENoYW5uZWxfXyA9IG5ldyBFdmVudENoYW5uZWwoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9fZXZlbnRDaGFubmVsX19cclxuICB9O1xyXG4gIGNvbnN0IGNhbGxIb29rID0gVnVlLnByb3RvdHlwZS5fX2NhbGxfaG9vaztcclxuICBWdWUucHJvdG90eXBlLl9fY2FsbF9ob29rID0gZnVuY3Rpb24gKGhvb2ssIGFyZ3MpIHtcclxuICAgIGlmIChob29rID09PSAnb25Mb2FkJyAmJiBhcmdzICYmIGFyZ3MuX19pZF9fKSB7XHJcbiAgICAgIHRoaXMuX19ldmVudENoYW5uZWxfXyA9IGdldEV2ZW50Q2hhbm5lbChhcmdzLl9faWRfXyk7XHJcbiAgICAgIGRlbGV0ZSBhcmdzLl9faWRfXztcclxuICAgIH1cclxuICAgIHJldHVybiBjYWxsSG9vay5jYWxsKHRoaXMsIGhvb2ssIGFyZ3MpXHJcbiAgfTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW5pdFNjb3BlZFNsb3RzUGFyYW1zICgpIHtcclxuICBjb25zdCBjZW50ZXIgPSB7fTtcclxuICBjb25zdCBwYXJlbnRzID0ge307XHJcblxyXG4gIFZ1ZS5wcm90b3R5cGUuJGhhc1Njb3BlZFNsb3RzUGFyYW1zID0gZnVuY3Rpb24gKHZ1ZUlkKSB7XHJcbiAgICBjb25zdCBoYXMgPSBjZW50ZXJbdnVlSWRdO1xyXG4gICAgaWYgKCFoYXMpIHtcclxuICAgICAgcGFyZW50c1t2dWVJZF0gPSB0aGlzO1xyXG4gICAgICB0aGlzLiRvbignaG9vazpkZXN0b3J5JywgKCkgPT4ge1xyXG4gICAgICAgIGRlbGV0ZSBwYXJlbnRzW3Z1ZUlkXTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGFzXHJcbiAgfTtcclxuXHJcbiAgVnVlLnByb3RvdHlwZS4kZ2V0U2NvcGVkU2xvdHNQYXJhbXMgPSBmdW5jdGlvbiAodnVlSWQsIG5hbWUsIGtleSkge1xyXG4gICAgY29uc3QgZGF0YSA9IGNlbnRlclt2dWVJZF07XHJcbiAgICBpZiAoZGF0YSkge1xyXG4gICAgICBjb25zdCBvYmplY3QgPSBkYXRhW25hbWVdIHx8IHt9O1xyXG4gICAgICByZXR1cm4ga2V5ID8gb2JqZWN0W2tleV0gOiBvYmplY3RcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhcmVudHNbdnVlSWRdID0gdGhpcztcclxuICAgICAgdGhpcy4kb24oJ2hvb2s6ZGVzdG9yeScsICgpID0+IHtcclxuICAgICAgICBkZWxldGUgcGFyZW50c1t2dWVJZF07XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIFZ1ZS5wcm90b3R5cGUuJHNldFNjb3BlZFNsb3RzUGFyYW1zID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XHJcbiAgICBjb25zdCB2dWVJZHMgPSB0aGlzLiRvcHRpb25zLnByb3BzRGF0YS52dWVJZDtcclxuICAgIGlmICh2dWVJZHMpIHtcclxuICAgICAgY29uc3QgdnVlSWQgPSB2dWVJZHMuc3BsaXQoJywnKVswXTtcclxuICAgICAgY29uc3Qgb2JqZWN0ID0gY2VudGVyW3Z1ZUlkXSA9IGNlbnRlclt2dWVJZF0gfHwge307XHJcbiAgICAgIG9iamVjdFtuYW1lXSA9IHZhbHVlO1xyXG4gICAgICBpZiAocGFyZW50c1t2dWVJZF0pIHtcclxuICAgICAgICBwYXJlbnRzW3Z1ZUlkXS4kZm9yY2VVcGRhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIFZ1ZS5taXhpbih7XHJcbiAgICBkZXN0cm95ZWQgKCkge1xyXG4gICAgICBjb25zdCBwcm9wc0RhdGEgPSB0aGlzLiRvcHRpb25zLnByb3BzRGF0YTtcclxuICAgICAgY29uc3QgdnVlSWQgPSBwcm9wc0RhdGEgJiYgcHJvcHNEYXRhLnZ1ZUlkO1xyXG4gICAgICBpZiAodnVlSWQpIHtcclxuICAgICAgICBkZWxldGUgY2VudGVyW3Z1ZUlkXTtcclxuICAgICAgICBkZWxldGUgcGFyZW50c1t2dWVJZF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcGFyc2VCYXNlQXBwICh2bSwge1xyXG4gIG1vY2tzLFxyXG4gIGluaXRSZWZzXHJcbn0pIHtcclxuICBpbml0RXZlbnRDaGFubmVsJDEoKTtcclxuICB7XHJcbiAgICBpbml0U2NvcGVkU2xvdHNQYXJhbXMoKTtcclxuICB9XHJcbiAgaWYgKHZtLiRvcHRpb25zLnN0b3JlKSB7XHJcbiAgICBWdWUucHJvdG90eXBlLiRzdG9yZSA9IHZtLiRvcHRpb25zLnN0b3JlO1xyXG4gIH1cclxuICB1bmlJZE1peGluKFZ1ZSk7XHJcblxyXG4gIFZ1ZS5wcm90b3R5cGUubXBIb3N0ID0gXCJtcC10b3V0aWFvXCI7XHJcblxyXG4gIFZ1ZS5taXhpbih7XHJcbiAgICBiZWZvcmVDcmVhdGUgKCkge1xyXG4gICAgICBpZiAoIXRoaXMuJG9wdGlvbnMubXBUeXBlKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMubXBUeXBlID0gdGhpcy4kb3B0aW9ucy5tcFR5cGU7XHJcblxyXG4gICAgICB0aGlzLiRtcCA9IHtcclxuICAgICAgICBkYXRhOiB7fSxcclxuICAgICAgICBbdGhpcy5tcFR5cGVdOiB0aGlzLiRvcHRpb25zLm1wSW5zdGFuY2VcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuJHNjb3BlID0gdGhpcy4kb3B0aW9ucy5tcEluc3RhbmNlO1xyXG5cclxuICAgICAgZGVsZXRlIHRoaXMuJG9wdGlvbnMubXBUeXBlO1xyXG4gICAgICBkZWxldGUgdGhpcy4kb3B0aW9ucy5tcEluc3RhbmNlO1xyXG4gICAgICBpZiAodGhpcy5tcFR5cGUgPT09ICdwYWdlJyAmJiB0eXBlb2YgZ2V0QXBwID09PSAnZnVuY3Rpb24nKSB7IC8vIGhhY2sgdnVlLWkxOG5cclxuICAgICAgICBjb25zdCBhcHAgPSBnZXRBcHAoKTtcclxuICAgICAgICBpZiAoYXBwLiR2bSAmJiBhcHAuJHZtLiRpMThuKSB7XHJcbiAgICAgICAgICB0aGlzLl9pMThuID0gYXBwLiR2bS4kaTE4bjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubXBUeXBlICE9PSAnYXBwJykge1xyXG4gICAgICAgIGluaXRSZWZzKHRoaXMpO1xyXG4gICAgICAgIGluaXRNb2Nrcyh0aGlzLCBtb2Nrcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuXHJcbiAgY29uc3QgYXBwT3B0aW9ucyA9IHtcclxuICAgIG9uTGF1bmNoIChhcmdzKSB7XHJcbiAgICAgIGlmICh0aGlzLiR2bSkgeyAvLyDlt7Lnu4/liJ3lp4vljJbov4fkuobvvIzkuLvopoHmmK/kuLrkuobnmb7luqbvvIznmb7luqYgb25TaG93IOWcqCBvbkxhdW5jaCDkuYvliY1cclxuICAgICAgICByZXR1cm5cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy4kdm0gPSB2bTtcclxuXHJcbiAgICAgIHRoaXMuJHZtLiRtcCA9IHtcclxuICAgICAgICBhcHA6IHRoaXNcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHRoaXMuJHZtLiRzY29wZSA9IHRoaXM7XHJcbiAgICAgIC8vIHZtIOS4iuS5n+aMgui9vSBnbG9iYWxEYXRhXHJcbiAgICAgIHRoaXMuJHZtLmdsb2JhbERhdGEgPSB0aGlzLmdsb2JhbERhdGE7XHJcblxyXG4gICAgICB0aGlzLiR2bS5faXNNb3VudGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy4kdm0uX19jYWxsX2hvb2soJ21vdW50ZWQnLCBhcmdzKTtcclxuXHJcbiAgICAgIHRoaXMuJHZtLl9fY2FsbF9ob29rKCdvbkxhdW5jaCcsIGFyZ3MpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8vIOWFvOWuueaXp+eJiOacrCBnbG9iYWxEYXRhXHJcbiAgYXBwT3B0aW9ucy5nbG9iYWxEYXRhID0gdm0uJG9wdGlvbnMuZ2xvYmFsRGF0YSB8fCB7fTtcclxuICAvLyDlsIYgbWV0aG9kcyDkuK3nmoTmlrnms5XmjILlnKggZ2V0QXBwKCkg5LitXHJcbiAgY29uc3QgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XHJcbiAgaWYgKG1ldGhvZHMpIHtcclxuICAgIE9iamVjdC5rZXlzKG1ldGhvZHMpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICAgIGFwcE9wdGlvbnNbbmFtZV0gPSBtZXRob2RzW25hbWVdO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0SG9va3MoYXBwT3B0aW9ucywgaG9va3MpO1xyXG5cclxuICByZXR1cm4gYXBwT3B0aW9uc1xyXG59XHJcblxyXG5mdW5jdGlvbiBmaW5kVm1CeVZ1ZUlkICh2bSwgdnVlUGlkKSB7XHJcbiAgY29uc3QgJGNoaWxkcmVuID0gdm0uJGNoaWxkcmVuO1xyXG4gIC8vIOS8mOWFiOafpeaJvuebtOWxnijlj43lkJHmn6Xmib46aHR0cHM6Ly9naXRodWIuY29tL2RjbG91ZGlvL3VuaS1hcHAvaXNzdWVzLzEyMDApXHJcbiAgZm9yIChsZXQgaSA9ICRjaGlsZHJlbi5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgY29uc3QgY2hpbGRWbSA9ICRjaGlsZHJlbltpXTtcclxuICAgIGlmIChjaGlsZFZtLiRzY29wZS5fJHZ1ZUlkID09PSB2dWVQaWQpIHtcclxuICAgICAgcmV0dXJuIGNoaWxkVm1cclxuICAgIH1cclxuICB9XHJcbiAgLy8g5Y+N5ZCR6YCS5b2S5p+l5om+XHJcbiAgbGV0IHBhcmVudFZtO1xyXG4gIGZvciAobGV0IGkgPSAkY2hpbGRyZW4ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgIHBhcmVudFZtID0gZmluZFZtQnlWdWVJZCgkY2hpbGRyZW5baV0sIHZ1ZVBpZCk7XHJcbiAgICBpZiAocGFyZW50Vm0pIHtcclxuICAgICAgcmV0dXJuIHBhcmVudFZtXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0QmVoYXZpb3IgKG9wdGlvbnMpIHtcclxuICByZXR1cm4gQmVoYXZpb3Iob3B0aW9ucylcclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlTGluayAoZXZlbnQpIHtcclxuICBjb25zdCB7XHJcbiAgICB2dWVQaWQsXHJcbiAgICB2dWVPcHRpb25zXHJcbiAgfSA9IGV2ZW50LmRldGFpbCB8fCBldmVudC52YWx1ZTsgLy8gZGV0YWlsIOaYr+W+ruS/oSx2YWx1ZSDmmK/nmb7luqYoZGlwYXRjaClcclxuXHJcbiAgbGV0IHBhcmVudFZtO1xyXG5cclxuICBpZiAodnVlUGlkKSB7XHJcbiAgICBwYXJlbnRWbSA9IGZpbmRWbUJ5VnVlSWQodGhpcy4kdm0sIHZ1ZVBpZCk7XHJcbiAgfVxyXG5cclxuICBpZiAoIXBhcmVudFZtKSB7XHJcbiAgICBwYXJlbnRWbSA9IHRoaXMuJHZtO1xyXG4gIH1cclxuXHJcbiAgdnVlT3B0aW9ucy5wYXJlbnQgPSBwYXJlbnRWbTtcclxufVxyXG5cclxuY29uc3QgbW9ja3MgPSBbJ19fcm91dGVfXycsICdfX3dlYnZpZXdJZF9fJywgJ19fbm9kZWlkX18nLCAnX19ub2RlSWRfXyddO1xyXG5cclxuZnVuY3Rpb24gaXNQYWdlICgpIHtcclxuICByZXR1cm4gdGhpcy5fX25vZGVpZF9fID09PSAwIHx8IHRoaXMuX19ub2RlSWRfXyA9PT0gMFxyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0UmVmcyAodm0pIHtcclxuICBjb25zdCBtcEluc3RhbmNlID0gdm0uJHNjb3BlO1xyXG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXHJcbiAgY29uc3QgbWlub3JWZXJzaW9uID0gcGFyc2VJbnQodHQuZ2V0U3lzdGVtSW5mb1N5bmMoKS5TREtWZXJzaW9uLnNwbGl0KCcuJylbMV0pO1xyXG4gIGlmIChtaW5vclZlcnNpb24gPiAxNikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZtLCAnJHJlZnMnLCB7XHJcbiAgICAgIGdldCAoKSB7XHJcbiAgICAgICAgY29uc3QgJHJlZnMgPSB7fTtcclxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gbXBJbnN0YW5jZS5zZWxlY3RBbGxDb21wb25lbnRzKCcudnVlLXJlZicpO1xyXG4gICAgICAgIGNvbXBvbmVudHMuZm9yRWFjaChjb21wb25lbnQgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcmVmID0gY29tcG9uZW50LmRhdGFzZXQucmVmO1xyXG4gICAgICAgICAgJHJlZnNbcmVmXSA9IGNvbXBvbmVudC4kdm0gfHwgY29tcG9uZW50O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGZvckNvbXBvbmVudHMgPSBtcEluc3RhbmNlLnNlbGVjdEFsbENvbXBvbmVudHMoJy52dWUtcmVmLWluLWZvcicpO1xyXG4gICAgICAgIGZvckNvbXBvbmVudHMuZm9yRWFjaChjb21wb25lbnQgPT4ge1xyXG4gICAgICAgICAgY29uc3QgcmVmID0gY29tcG9uZW50LmRhdGFzZXQucmVmO1xyXG4gICAgICAgICAgaWYgKCEkcmVmc1tyZWZdKSB7XHJcbiAgICAgICAgICAgICRyZWZzW3JlZl0gPSBbXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgICRyZWZzW3JlZl0ucHVzaChjb21wb25lbnQuJHZtIHx8IGNvbXBvbmVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuICRyZWZzXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBtcEluc3RhbmNlLnNlbGVjdEFsbENvbXBvbmVudHMoJy52dWUtcmVmJywgKGNvbXBvbmVudHMpID0+IHtcclxuICAgICAgY29tcG9uZW50cy5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVmID0gY29tcG9uZW50LmRhdGFzZXQucmVmO1xyXG4gICAgICAgIHZtLiRyZWZzW3JlZl0gPSBjb21wb25lbnQuJHZtIHx8IGNvbXBvbmVudDtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIG1wSW5zdGFuY2Uuc2VsZWN0QWxsQ29tcG9uZW50cygnLnZ1ZS1yZWYtaW4tZm9yJywgKGZvckNvbXBvbmVudHMpID0+IHtcclxuICAgICAgZm9yQ29tcG9uZW50cy5mb3JFYWNoKGNvbXBvbmVudCA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVmID0gY29tcG9uZW50LmRhdGFzZXQucmVmO1xyXG4gICAgICAgIGlmICghdm0uJHJlZnNbcmVmXSkge1xyXG4gICAgICAgICAgdm0uJHJlZnNbcmVmXSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2bS4kcmVmc1tyZWZdLnB1c2goY29tcG9uZW50LiR2bSB8fCBjb21wb25lbnQpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuY29uc3QgaW5zdGFuY2VzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcclxuXHJcbmZ1bmN0aW9uIGluaXRSZWxhdGlvbiAoe1xyXG4gIHZ1ZVBpZCxcclxuICBtcEluc3RhbmNlXHJcbn0pIHtcclxuICAvLyDlpLTmnaEgdHJpZ2dlckV2ZW50IOWQju+8jOaOpeaUtuS6i+S7tuaXtuacuueJueWIq+aZmu+8jOW3sue7j+WIsOS6hiByZWFkeSDkuYvlkI5cclxuICBjb25zdCBub2RlSWQgPSAobXBJbnN0YW5jZS5fX25vZGVJZF9fIHx8IG1wSW5zdGFuY2UuX19ub2RlaWRfXykgKyAnJztcclxuICBjb25zdCB3ZWJ2aWV3SWQgPSBtcEluc3RhbmNlLl9fd2Vidmlld0lkX18gKyAnJztcclxuXHJcbiAgaW5zdGFuY2VzW3dlYnZpZXdJZCArICdfJyArIG5vZGVJZF0gPSBtcEluc3RhbmNlLiR2bTtcclxuXHJcbiAgdGhpcy50cmlnZ2VyRXZlbnQoJ19fbCcsIHtcclxuICAgIHZ1ZVBpZCxcclxuICAgIG5vZGVJZCxcclxuICAgIHdlYnZpZXdJZFxyXG4gIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVMaW5rJDEgKHtcclxuICBkZXRhaWw6IHtcclxuICAgIHZ1ZVBpZCxcclxuICAgIG5vZGVJZCxcclxuICAgIHdlYnZpZXdJZFxyXG4gIH1cclxufSkge1xyXG4gIGNvbnN0IHZtID0gaW5zdGFuY2VzW3dlYnZpZXdJZCArICdfJyArIG5vZGVJZF07XHJcbiAgaWYgKCF2bSkge1xyXG4gICAgcmV0dXJuXHJcbiAgfVxyXG5cclxuICBsZXQgcGFyZW50Vm07XHJcblxyXG4gIGlmICh2dWVQaWQpIHtcclxuICAgIHBhcmVudFZtID0gZmluZFZtQnlWdWVJZCh0aGlzLiR2bSwgdnVlUGlkKTtcclxuICB9XHJcblxyXG4gIGlmICghcGFyZW50Vm0pIHtcclxuICAgIHBhcmVudFZtID0gdGhpcy4kdm07XHJcbiAgfVxyXG5cclxuICB2bS4kcGFyZW50ID0gcGFyZW50Vm07XHJcbiAgdm0uJHJvb3QgPSBwYXJlbnRWbS4kcm9vdDtcclxuICBwYXJlbnRWbS4kY2hpbGRyZW4ucHVzaCh2bSk7XHJcblxyXG4gIHZtLl9fY2FsbF9ob29rKCdjcmVhdGVkJyk7XHJcbiAgdm0uX19jYWxsX2hvb2soJ2JlZm9yZU1vdW50Jyk7XHJcbiAgdm0uX2lzTW91bnRlZCA9IHRydWU7XHJcbiAgdm0uX19jYWxsX2hvb2soJ21vdW50ZWQnKTtcclxuICB2bS5fX2NhbGxfaG9vaygnb25SZWFkeScpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUFwcCAodm0pIHtcclxuICBWdWUucHJvdG90eXBlLl8kZmFsbGJhY2sgPSB0cnVlOyAvLyDpmY3nuqfvvIjosIPmlbTljp8gdnVlIOeahOmDqOWIhueUn+WRveWRqOacn++8jOWmgiBjcmVhdGVk77yMYmVmb3JlTW91bnQsaW5qZWN0LHByb3ZpZGXvvIlcclxuXHJcbiAgVnVlLm1peGluKHtcclxuICAgIGNyZWF0ZWQgKCkgeyAvLyDlpITnkIYgaW5qZWN0aW9ucyzlpLTmnaEgdHJpZ2dlckV2ZW50IOaYr+W8guatpe+8jOS4lOinpuWPkeaXtuacuuW+iOaFou+8jOaVheW7tui/nyByZWxhdGlvbiDorr7nva5cclxuICAgICAgaWYgKHRoaXMubXBUeXBlICE9PSAnYXBwJykge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHRoaXMubXBUeXBlID09PSAncGFnZScgJiZcclxuICAgICAgICAgICAgICAgICAgICAhdGhpcy4kc2NvcGUucm91dGUgJiZcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRzY29wZS5fX3JvdXRlX19cclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuJHNjb3BlLnJvdXRlID0gdGhpcy4kc2NvcGUuX19yb3V0ZV9fO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaW5pdFJlZnModGhpcyk7XHJcblxyXG4gICAgICAgIHRoaXMuX19pbml0X2luamVjdGlvbnModGhpcyk7XHJcbiAgICAgICAgdGhpcy5fX2luaXRfcHJvdmlkZSh0aGlzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICByZXR1cm4gcGFyc2VCYXNlQXBwKHZtLCB7XHJcbiAgICBtb2NrcyxcclxuICAgIGluaXRSZWZzOiBmdW5jdGlvbiAoKSB7fSAvLyBhdHRhY2hlZCDml7bvvIzlj6/og73mn6Xor6LkuI3liLBcclxuICB9KVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBcHAgKHZtKSB7XHJcbiAgQXBwKHBhcnNlQXBwKHZtKSk7XHJcbiAgcmV0dXJuIHZtXHJcbn1cclxuXHJcbmNvbnN0IGVuY29kZVJlc2VydmVSRSA9IC9bIScoKSpdL2c7XHJcbmNvbnN0IGVuY29kZVJlc2VydmVSZXBsYWNlciA9IGMgPT4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KTtcclxuY29uc3QgY29tbWFSRSA9IC8lMkMvZztcclxuXHJcbi8vIGZpeGVkIGVuY29kZVVSSUNvbXBvbmVudCB3aGljaCBpcyBtb3JlIGNvbmZvcm1hbnQgdG8gUkZDMzk4NjpcclxuLy8gLSBlc2NhcGVzIFshJygpKl1cclxuLy8gLSBwcmVzZXJ2ZSBjb21tYXNcclxuY29uc3QgZW5jb2RlID0gc3RyID0+IGVuY29kZVVSSUNvbXBvbmVudChzdHIpXHJcbiAgLnJlcGxhY2UoZW5jb2RlUmVzZXJ2ZVJFLCBlbmNvZGVSZXNlcnZlUmVwbGFjZXIpXHJcbiAgLnJlcGxhY2UoY29tbWFSRSwgJywnKTtcclxuXHJcbmZ1bmN0aW9uIHN0cmluZ2lmeVF1ZXJ5IChvYmosIGVuY29kZVN0ciA9IGVuY29kZSkge1xyXG4gIGNvbnN0IHJlcyA9IG9iaiA/IE9iamVjdC5rZXlzKG9iaikubWFwKGtleSA9PiB7XHJcbiAgICBjb25zdCB2YWwgPSBvYmpba2V5XTtcclxuXHJcbiAgICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuICcnXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHZhbCA9PT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gZW5jb2RlU3RyKGtleSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICB2YWwuZm9yRWFjaCh2YWwyID0+IHtcclxuICAgICAgICBpZiAodmFsMiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICByZXR1cm5cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbDIgPT09IG51bGwpIHtcclxuICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVN0cihrZXkpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlU3RyKGtleSkgKyAnPScgKyBlbmNvZGVTdHIodmFsMikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybiByZXN1bHQuam9pbignJicpXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGVuY29kZVN0cihrZXkpICsgJz0nICsgZW5jb2RlU3RyKHZhbClcclxuICB9KS5maWx0ZXIoeCA9PiB4Lmxlbmd0aCA+IDApLmpvaW4oJyYnKSA6IG51bGw7XHJcbiAgcmV0dXJuIHJlcyA/IGA/JHtyZXN9YCA6ICcnXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQmFzZUNvbXBvbmVudCAodnVlQ29tcG9uZW50T3B0aW9ucywge1xyXG4gIGlzUGFnZSxcclxuICBpbml0UmVsYXRpb25cclxufSA9IHt9KSB7XHJcbiAgY29uc3QgW1Z1ZUNvbXBvbmVudCwgdnVlT3B0aW9uc10gPSBpbml0VnVlQ29tcG9uZW50KFZ1ZSwgdnVlQ29tcG9uZW50T3B0aW9ucyk7XHJcblxyXG4gIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICBtdWx0aXBsZVNsb3RzOiB0cnVlLFxyXG4gICAgYWRkR2xvYmFsQ2xhc3M6IHRydWUsXHJcbiAgICAuLi4odnVlT3B0aW9ucy5vcHRpb25zIHx8IHt9KVxyXG4gIH07XHJcblxyXG4gIGNvbnN0IGNvbXBvbmVudE9wdGlvbnMgPSB7XHJcbiAgICBvcHRpb25zLFxyXG4gICAgZGF0YTogaW5pdERhdGEodnVlT3B0aW9ucywgVnVlLnByb3RvdHlwZSksXHJcbiAgICBiZWhhdmlvcnM6IGluaXRCZWhhdmlvcnModnVlT3B0aW9ucywgaW5pdEJlaGF2aW9yKSxcclxuICAgIHByb3BlcnRpZXM6IGluaXRQcm9wZXJ0aWVzKHZ1ZU9wdGlvbnMucHJvcHMsIGZhbHNlLCB2dWVPcHRpb25zLl9fZmlsZSksXHJcbiAgICBsaWZldGltZXM6IHtcclxuICAgICAgYXR0YWNoZWQgKCkge1xyXG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLnByb3BlcnRpZXM7XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICBtcFR5cGU6IGlzUGFnZS5jYWxsKHRoaXMpID8gJ3BhZ2UnIDogJ2NvbXBvbmVudCcsXHJcbiAgICAgICAgICBtcEluc3RhbmNlOiB0aGlzLFxyXG4gICAgICAgICAgcHJvcHNEYXRhOiBwcm9wZXJ0aWVzXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgaW5pdFZ1ZUlkcyhwcm9wZXJ0aWVzLnZ1ZUlkLCB0aGlzKTtcclxuXHJcbiAgICAgICAgLy8g5aSE55CG54i25a2Q5YWz57O7XHJcbiAgICAgICAgaW5pdFJlbGF0aW9uLmNhbGwodGhpcywge1xyXG4gICAgICAgICAgdnVlUGlkOiB0aGlzLl8kdnVlUGlkLFxyXG4gICAgICAgICAgdnVlT3B0aW9uczogb3B0aW9uc1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyDliJ3lp4vljJYgdnVlIOWunuS+i1xyXG4gICAgICAgIHRoaXMuJHZtID0gbmV3IFZ1ZUNvbXBvbmVudChvcHRpb25zKTtcclxuXHJcbiAgICAgICAgLy8g5aSE55CGJHNsb3RzLCRzY29wZWRTbG90c++8iOaaguS4jeaUr+aMgeWKqOaAgeWPmOWMliRzbG90c++8iVxyXG4gICAgICAgIGluaXRTbG90cyh0aGlzLiR2bSwgcHJvcGVydGllcy52dWVTbG90cyk7XHJcblxyXG4gICAgICAgIC8vIOinpuWPkemmluasoSBzZXREYXRhXHJcbiAgICAgICAgdGhpcy4kdm0uJG1vdW50KCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHJlYWR5ICgpIHtcclxuICAgICAgICAvLyDlvZPnu4Tku7YgcHJvcHMg6buY6K6k5YC85Li6IHRydWXvvIzliJ3lp4vljJbml7bkvKDlhaUgZmFsc2Ug5Lya5a+86Ie0IGNyZWF0ZWQscmVhZHkg6Kem5Y+RLCDkvYYgYXR0YWNoZWQg5LiN6Kem5Y+RXHJcbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLndlaXhpbi5xcS5jb20vY29tbXVuaXR5L2RldmVsb3AvZG9jLzAwMDY2YWUyODQ0Y2MwZjhlYjg4M2UyYTU1NzgwMFxyXG4gICAgICAgIGlmICh0aGlzLiR2bSkge1xyXG4gICAgICAgICAgdGhpcy4kdm0uX2lzTW91bnRlZCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLiR2bS5fX2NhbGxfaG9vaygnbW91bnRlZCcpO1xyXG4gICAgICAgICAgdGhpcy4kdm0uX19jYWxsX2hvb2soJ29uUmVhZHknKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGRldGFjaGVkICgpIHtcclxuICAgICAgICB0aGlzLiR2bSAmJiB0aGlzLiR2bS4kZGVzdHJveSgpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgcGFnZUxpZmV0aW1lczoge1xyXG4gICAgICBzaG93IChhcmdzKSB7XHJcbiAgICAgICAgdGhpcy4kdm0gJiYgdGhpcy4kdm0uX19jYWxsX2hvb2soJ29uUGFnZVNob3cnLCBhcmdzKTtcclxuICAgICAgfSxcclxuICAgICAgaGlkZSAoKSB7XHJcbiAgICAgICAgdGhpcy4kdm0gJiYgdGhpcy4kdm0uX19jYWxsX2hvb2soJ29uUGFnZUhpZGUnKTtcclxuICAgICAgfSxcclxuICAgICAgcmVzaXplIChzaXplKSB7XHJcbiAgICAgICAgdGhpcy4kdm0gJiYgdGhpcy4kdm0uX19jYWxsX2hvb2soJ29uUGFnZVJlc2l6ZScsIHNpemUpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICBfX2w6IGhhbmRsZUxpbmssXHJcbiAgICAgIF9fZTogaGFuZGxlRXZlbnRcclxuICAgIH1cclxuICB9O1xyXG4gIC8vIGV4dGVybmFsQ2xhc3Nlc1xyXG4gIGlmICh2dWVPcHRpb25zLmV4dGVybmFsQ2xhc3Nlcykge1xyXG4gICAgY29tcG9uZW50T3B0aW9ucy5leHRlcm5hbENsYXNzZXMgPSB2dWVPcHRpb25zLmV4dGVybmFsQ2xhc3NlcztcclxuICB9XHJcblxyXG4gIGlmIChBcnJheS5pc0FycmF5KHZ1ZU9wdGlvbnMud3hzQ2FsbE1ldGhvZHMpKSB7XHJcbiAgICB2dWVPcHRpb25zLnd4c0NhbGxNZXRob2RzLmZvckVhY2goY2FsbE1ldGhvZCA9PiB7XHJcbiAgICAgIGNvbXBvbmVudE9wdGlvbnMubWV0aG9kc1tjYWxsTWV0aG9kXSA9IGZ1bmN0aW9uIChhcmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHZtW2NhbGxNZXRob2RdKGFyZ3MpXHJcbiAgICAgIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlmIChpc1BhZ2UpIHtcclxuICAgIHJldHVybiBjb21wb25lbnRPcHRpb25zXHJcbiAgfVxyXG4gIHJldHVybiBbY29tcG9uZW50T3B0aW9ucywgVnVlQ29tcG9uZW50XVxyXG59XHJcblxyXG5jb25zdCBjb21wb25lbnRzID0gW107XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNvbXBvbmVudCAodnVlT3B0aW9ucykge1xyXG4gIGNvbnN0IFtjb21wb25lbnRPcHRpb25zLCBWdWVDb21wb25lbnRdID0gcGFyc2VCYXNlQ29tcG9uZW50KHZ1ZU9wdGlvbnMpO1xyXG5cclxuICAvLyDln7rnoYDlupMgMi4wIOS7peS4iiBhdHRhY2hlZCDpobrluo/plJnkubHvvIzmjInnhacgY3JlYXRlZCDpobrluo/lvLrliLbnuqDmraNcclxuICBjb21wb25lbnRPcHRpb25zLmxpZmV0aW1lcy5jcmVhdGVkID0gZnVuY3Rpb24gY3JlYXRlZCAoKSB7XHJcbiAgICBjb21wb25lbnRzLnB1c2godGhpcyk7XHJcbiAgfTtcclxuXHJcbiAgY29tcG9uZW50T3B0aW9ucy5saWZldGltZXMuYXR0YWNoZWQgPSBmdW5jdGlvbiBhdHRhY2hlZCAoKSB7XHJcbiAgICB0aGlzLl9fbGlmZXRpbWVzX2F0dGFjaGVkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5wcm9wZXJ0aWVzO1xyXG5cclxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICBtcFR5cGU6IGlzUGFnZS5jYWxsKHRoaXMpID8gJ3BhZ2UnIDogJ2NvbXBvbmVudCcsXHJcbiAgICAgICAgbXBJbnN0YW5jZTogdGhpcyxcclxuICAgICAgICBwcm9wc0RhdGE6IHByb3BlcnRpZXNcclxuICAgICAgfTtcclxuXHJcbiAgICAgIGluaXRWdWVJZHMocHJvcGVydGllcy52dWVJZCwgdGhpcyk7XHJcblxyXG4gICAgICAvLyDliJ3lp4vljJYgdnVlIOWunuS+i1xyXG4gICAgICB0aGlzLiR2bSA9IG5ldyBWdWVDb21wb25lbnQob3B0aW9ucyk7XHJcblxyXG4gICAgICAvLyDlpITnkIYkc2xvdHMsJHNjb3BlZFNsb3Rz77yI5pqC5LiN5pSv5oyB5Yqo5oCB5Y+Y5YyWJHNsb3Rz77yJXHJcbiAgICAgIGluaXRTbG90cyh0aGlzLiR2bSwgcHJvcGVydGllcy52dWVTbG90cyk7XHJcblxyXG4gICAgICAvLyDlpITnkIbniLblrZDlhbPns7tcclxuICAgICAgaW5pdFJlbGF0aW9uLmNhbGwodGhpcywge1xyXG4gICAgICAgIHZ1ZVBpZDogdGhpcy5fJHZ1ZVBpZCxcclxuICAgICAgICBtcEluc3RhbmNlOiB0aGlzXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8g6Kem5Y+R6aaW5qyhIHNldERhdGFcclxuICAgICAgdGhpcy4kdm0uJG1vdW50KCk7XHJcbiAgICB9O1xyXG4gICAgbGV0IGNvbXBvbmVudCA9IHRoaXM7XHJcbiAgICB3aGlsZSAoY29tcG9uZW50ICYmIGNvbXBvbmVudC5fX2xpZmV0aW1lc19hdHRhY2hlZCAmJiBjb21wb25lbnRzWzBdICYmIGNvbXBvbmVudCA9PT0gY29tcG9uZW50c1swXSkge1xyXG4gICAgICBjb21wb25lbnRzLnNoaWZ0KCk7XHJcbiAgICAgIGNvbXBvbmVudC5fX2xpZmV0aW1lc19hdHRhY2hlZCgpO1xyXG4gICAgICBkZWxldGUgY29tcG9uZW50Ll9fbGlmZXRpbWVzX2F0dGFjaGVkO1xyXG4gICAgICBjb21wb25lbnQgPSBjb21wb25lbnRzWzBdO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8vIHJlYWR5IOavlCBoYW5kbGVMaW5rIOi/mOaXqe+8jOWIneWni+WMlumAu+i+keaUvuWIsCBoYW5kbGVMaW5rIOS4rVxyXG4gIGRlbGV0ZSBjb21wb25lbnRPcHRpb25zLmxpZmV0aW1lcy5yZWFkeTtcclxuXHJcbiAgY29tcG9uZW50T3B0aW9ucy5tZXRob2RzLl9fbCA9IGhhbmRsZUxpbmskMTtcclxuXHJcbiAgcmV0dXJuIGNvbXBvbmVudE9wdGlvbnNcclxufVxyXG5cclxuY29uc3QgaG9va3MkMSA9IFtcclxuICAnb25TaG93JyxcclxuICAnb25IaWRlJyxcclxuICAnb25VbmxvYWQnXHJcbl07XHJcblxyXG5ob29rcyQxLnB1c2goLi4uUEFHRV9FVkVOVF9IT09LUyk7XHJcblxyXG5mdW5jdGlvbiBwYXJzZUJhc2VQYWdlICh2dWVQYWdlT3B0aW9ucywge1xyXG4gIGlzUGFnZSxcclxuICBpbml0UmVsYXRpb25cclxufSkge1xyXG4gIGNvbnN0IHBhZ2VPcHRpb25zID0gcGFyc2VDb21wb25lbnQodnVlUGFnZU9wdGlvbnMpO1xyXG5cclxuICBpbml0SG9va3MocGFnZU9wdGlvbnMubWV0aG9kcywgaG9va3MkMSwgdnVlUGFnZU9wdGlvbnMpO1xyXG5cclxuICBwYWdlT3B0aW9ucy5tZXRob2RzLm9uTG9hZCA9IGZ1bmN0aW9uIChxdWVyeSkge1xyXG4gICAgdGhpcy5vcHRpb25zID0gcXVlcnk7XHJcbiAgICBjb25zdCBjb3B5UXVlcnkgPSBPYmplY3QuYXNzaWduKHt9LCBxdWVyeSk7XHJcbiAgICBkZWxldGUgY29weVF1ZXJ5Ll9faWRfXztcclxuICAgIHRoaXMuJHBhZ2UgPSB7XHJcbiAgICAgIGZ1bGxQYXRoOiAnLycgKyAodGhpcy5yb3V0ZSB8fCB0aGlzLmlzKSArIHN0cmluZ2lmeVF1ZXJ5KGNvcHlRdWVyeSlcclxuICAgIH07XHJcbiAgICB0aGlzLiR2bS4kbXAucXVlcnkgPSBxdWVyeTsgLy8g5YW85a65IG1wdnVlXHJcbiAgICB0aGlzLiR2bS5fX2NhbGxfaG9vaygnb25Mb2FkJywgcXVlcnkpO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiBwYWdlT3B0aW9uc1xyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZVBhZ2UgKHZ1ZVBhZ2VPcHRpb25zKSB7XHJcbiAgY29uc3QgcGFnZU9wdGlvbnMgPSBwYXJzZUJhc2VQYWdlKHZ1ZVBhZ2VPcHRpb25zLCB7XHJcbiAgICBpc1BhZ2UsXHJcbiAgICBpbml0UmVsYXRpb25cclxuICB9KTtcclxuICAvLyDpobXpnaLpnIDopoHlnKggcmVhZHkg5Lit6Kem5Y+R77yM5YW25LuW57uE5Lu25piv5ZyoIGhhbmRsZUxpbmsg5Lit6Kem5Y+RXHJcbiAgcGFnZU9wdGlvbnMubGlmZXRpbWVzLnJlYWR5ID0gZnVuY3Rpb24gcmVhZHkgKCkge1xyXG4gICAgaWYgKHRoaXMuJHZtICYmIHRoaXMuJHZtLm1wVHlwZSA9PT0gJ3BhZ2UnKSB7XHJcbiAgICAgIHRoaXMuJHZtLl9fY2FsbF9ob29rKCdjcmVhdGVkJyk7XHJcbiAgICAgIHRoaXMuJHZtLl9fY2FsbF9ob29rKCdiZWZvcmVNb3VudCcpO1xyXG4gICAgICB0aGlzLiR2bS5faXNNb3VudGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy4kdm0uX19jYWxsX2hvb2soJ21vdW50ZWQnKTtcclxuICAgICAgdGhpcy4kdm0uX19jYWxsX2hvb2soJ29uUmVhZHknKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaXMgJiYgY29uc29sZS53YXJuKHRoaXMuaXMgKyAnIGlzIG5vdCByZWFkeScpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHBhZ2VPcHRpb25zLmxpZmV0aW1lcy5kZXRhY2hlZCA9IGZ1bmN0aW9uIGRldGFjaGVkICgpIHtcclxuICAgIHRoaXMuJHZtICYmIHRoaXMuJHZtLiRkZXN0cm95KCk7XHJcbiAgICAvLyDmuIXnkIZcclxuICAgIGNvbnN0IHdlYnZpZXdJZCA9IHRoaXMuX193ZWJ2aWV3SWRfXztcclxuICAgIHdlYnZpZXdJZCAmJiBPYmplY3Qua2V5cyhpbnN0YW5jZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgaWYgKGtleS5pbmRleE9mKHdlYnZpZXdJZCArICdfJykgPT09IDApIHtcclxuICAgICAgICBkZWxldGUgaW5zdGFuY2VzW2tleV07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIHJldHVybiBwYWdlT3B0aW9uc1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVQYWdlICh2dWVQYWdlT3B0aW9ucykge1xyXG4gIHtcclxuICAgIHJldHVybiBDb21wb25lbnQocGFyc2VQYWdlKHZ1ZVBhZ2VPcHRpb25zKSlcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAodnVlT3B0aW9ucykge1xyXG4gIHtcclxuICAgIHJldHVybiBDb21wb25lbnQocGFyc2VDb21wb25lbnQodnVlT3B0aW9ucykpXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVTdWJwYWNrYWdlQXBwICh2bSkge1xyXG4gIGNvbnN0IGFwcE9wdGlvbnMgPSBwYXJzZUFwcCh2bSk7XHJcbiAgY29uc3QgYXBwID0gZ2V0QXBwKHtcclxuICAgIGFsbG93RGVmYXVsdDogdHJ1ZVxyXG4gIH0pO1xyXG4gIHZtLiRzY29wZSA9IGFwcDtcclxuICBjb25zdCBnbG9iYWxEYXRhID0gYXBwLmdsb2JhbERhdGE7XHJcbiAgaWYgKGdsb2JhbERhdGEpIHtcclxuICAgIE9iamVjdC5rZXlzKGFwcE9wdGlvbnMuZ2xvYmFsRGF0YSkuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgaWYgKCFoYXNPd24oZ2xvYmFsRGF0YSwgbmFtZSkpIHtcclxuICAgICAgICBnbG9iYWxEYXRhW25hbWVdID0gYXBwT3B0aW9ucy5nbG9iYWxEYXRhW25hbWVdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgT2JqZWN0LmtleXMoYXBwT3B0aW9ucykuZm9yRWFjaChuYW1lID0+IHtcclxuICAgIGlmICghaGFzT3duKGFwcCwgbmFtZSkpIHtcclxuICAgICAgYXBwW25hbWVdID0gYXBwT3B0aW9uc1tuYW1lXTtcclxuICAgIH1cclxuICB9KTtcclxuICBpZiAoaXNGbihhcHBPcHRpb25zLm9uU2hvdykgJiYgdHQub25BcHBTaG93KSB7XHJcbiAgICB0dC5vbkFwcFNob3coKC4uLmFyZ3MpID0+IHtcclxuICAgICAgdm0uX19jYWxsX2hvb2soJ29uU2hvdycsIGFyZ3MpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGlmIChpc0ZuKGFwcE9wdGlvbnMub25IaWRlKSAmJiB0dC5vbkFwcEhpZGUpIHtcclxuICAgIHR0Lm9uQXBwSGlkZSgoLi4uYXJncykgPT4ge1xyXG4gICAgICB2bS5fX2NhbGxfaG9vaygnb25IaWRlJywgYXJncyk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgaWYgKGlzRm4oYXBwT3B0aW9ucy5vbkxhdW5jaCkpIHtcclxuICAgIGNvbnN0IGFyZ3MgPSB0dC5nZXRMYXVuY2hPcHRpb25zU3luYyAmJiB0dC5nZXRMYXVuY2hPcHRpb25zU3luYygpO1xyXG4gICAgdm0uX19jYWxsX2hvb2soJ29uTGF1bmNoJywgYXJncyk7XHJcbiAgfVxyXG4gIHJldHVybiB2bVxyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVQbHVnaW4gKHZtKSB7XHJcbiAgY29uc3QgYXBwT3B0aW9ucyA9IHBhcnNlQXBwKHZtKTtcclxuICBpZiAoaXNGbihhcHBPcHRpb25zLm9uU2hvdykgJiYgdHQub25BcHBTaG93KSB7XHJcbiAgICB0dC5vbkFwcFNob3coKC4uLmFyZ3MpID0+IHtcclxuICAgICAgYXBwT3B0aW9ucy5vblNob3cuYXBwbHkodm0sIGFyZ3MpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGlmIChpc0ZuKGFwcE9wdGlvbnMub25IaWRlKSAmJiB0dC5vbkFwcEhpZGUpIHtcclxuICAgIHR0Lm9uQXBwSGlkZSgoLi4uYXJncykgPT4ge1xyXG4gICAgICBhcHBPcHRpb25zLm9uSGlkZS5hcHBseSh2bSwgYXJncyk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgaWYgKGlzRm4oYXBwT3B0aW9ucy5vbkxhdW5jaCkpIHtcclxuICAgIGNvbnN0IGFyZ3MgPSB0dC5nZXRMYXVuY2hPcHRpb25zU3luYyAmJiB0dC5nZXRMYXVuY2hPcHRpb25zU3luYygpO1xyXG4gICAgYXBwT3B0aW9ucy5vbkxhdW5jaC5jYWxsKHZtLCBhcmdzKTtcclxuICB9XHJcbiAgcmV0dXJuIHZtXHJcbn1cclxuXHJcbnRvZG9zLmZvckVhY2godG9kb0FwaSA9PiB7XHJcbiAgcHJvdG9jb2xzW3RvZG9BcGldID0gZmFsc2U7XHJcbn0pO1xyXG5cclxuY2FuSVVzZXMuZm9yRWFjaChjYW5JVXNlQXBpID0+IHtcclxuICBjb25zdCBhcGlOYW1lID0gcHJvdG9jb2xzW2NhbklVc2VBcGldICYmIHByb3RvY29sc1tjYW5JVXNlQXBpXS5uYW1lID8gcHJvdG9jb2xzW2NhbklVc2VBcGldLm5hbWVcclxuICAgIDogY2FuSVVzZUFwaTtcclxuICBpZiAoIXR0LmNhbklVc2UoYXBpTmFtZSkpIHtcclxuICAgIHByb3RvY29sc1tjYW5JVXNlQXBpXSA9IGZhbHNlO1xyXG4gIH1cclxufSk7XHJcblxyXG5sZXQgdW5pID0ge307XHJcblxyXG5pZiAodHlwZW9mIFByb3h5ICE9PSAndW5kZWZpbmVkJyAmJiBcIm1wLXRvdXRpYW9cIiAhPT0gJ2FwcC1wbHVzJykge1xyXG4gIHVuaSA9IG5ldyBQcm94eSh7fSwge1xyXG4gICAgZ2V0ICh0YXJnZXQsIG5hbWUpIHtcclxuICAgICAgaWYgKGhhc093bih0YXJnZXQsIG5hbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFtuYW1lXVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChiYXNlQXBpW25hbWVdKSB7XHJcbiAgICAgICAgcmV0dXJuIGJhc2VBcGlbbmFtZV1cclxuICAgICAgfVxyXG4gICAgICBpZiAoYXBpW25hbWVdKSB7XHJcbiAgICAgICAgcmV0dXJuIHByb21pc2lmeShuYW1lLCBhcGlbbmFtZV0pXHJcbiAgICAgIH1cclxuICAgICAge1xyXG4gICAgICAgIGlmIChleHRyYUFwaVtuYW1lXSkge1xyXG4gICAgICAgICAgcmV0dXJuIHByb21pc2lmeShuYW1lLCBleHRyYUFwaVtuYW1lXSlcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRvZG9BcGlzW25hbWVdKSB7XHJcbiAgICAgICAgICByZXR1cm4gcHJvbWlzaWZ5KG5hbWUsIHRvZG9BcGlzW25hbWVdKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoZXZlbnRBcGlbbmFtZV0pIHtcclxuICAgICAgICByZXR1cm4gZXZlbnRBcGlbbmFtZV1cclxuICAgICAgfVxyXG4gICAgICBpZiAoIWhhc093bih0dCwgbmFtZSkgJiYgIWhhc093bihwcm90b2NvbHMsIG5hbWUpKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHByb21pc2lmeShuYW1lLCB3cmFwcGVyKG5hbWUsIHR0W25hbWVdKSlcclxuICAgIH0sXHJcbiAgICBzZXQgKHRhcmdldCwgbmFtZSwgdmFsdWUpIHtcclxuICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9XHJcbiAgfSk7XHJcbn0gZWxzZSB7XHJcbiAgT2JqZWN0LmtleXMoYmFzZUFwaSkuZm9yRWFjaChuYW1lID0+IHtcclxuICAgIHVuaVtuYW1lXSA9IGJhc2VBcGlbbmFtZV07XHJcbiAgfSk7XHJcblxyXG4gIHtcclxuICAgIE9iamVjdC5rZXlzKHRvZG9BcGlzKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgICB1bmlbbmFtZV0gPSBwcm9taXNpZnkobmFtZSwgdG9kb0FwaXNbbmFtZV0pO1xyXG4gICAgfSk7XHJcbiAgICBPYmplY3Qua2V5cyhleHRyYUFwaSkuZm9yRWFjaChuYW1lID0+IHtcclxuICAgICAgdW5pW25hbWVdID0gcHJvbWlzaWZ5KG5hbWUsIHRvZG9BcGlzW25hbWVdKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgT2JqZWN0LmtleXMoZXZlbnRBcGkpLmZvckVhY2gobmFtZSA9PiB7XHJcbiAgICB1bmlbbmFtZV0gPSBldmVudEFwaVtuYW1lXTtcclxuICB9KTtcclxuXHJcbiAgT2JqZWN0LmtleXMoYXBpKS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgdW5pW25hbWVdID0gcHJvbWlzaWZ5KG5hbWUsIGFwaVtuYW1lXSk7XHJcbiAgfSk7XHJcblxyXG4gIE9iamVjdC5rZXlzKHR0KS5mb3JFYWNoKG5hbWUgPT4ge1xyXG4gICAgaWYgKGhhc093bih0dCwgbmFtZSkgfHwgaGFzT3duKHByb3RvY29scywgbmFtZSkpIHtcclxuICAgICAgdW5pW25hbWVdID0gcHJvbWlzaWZ5KG5hbWUsIHdyYXBwZXIobmFtZSwgdHRbbmFtZV0pKTtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxudHQuY3JlYXRlQXBwID0gY3JlYXRlQXBwO1xyXG50dC5jcmVhdGVQYWdlID0gY3JlYXRlUGFnZTtcclxudHQuY3JlYXRlQ29tcG9uZW50ID0gY3JlYXRlQ29tcG9uZW50O1xyXG50dC5jcmVhdGVTdWJwYWNrYWdlQXBwID0gY3JlYXRlU3VicGFja2FnZUFwcDtcclxudHQuY3JlYXRlUGx1Z2luID0gY3JlYXRlUGx1Z2luO1xyXG5cclxudmFyIHVuaSQxID0gdW5pO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgdW5pJDE7XHJcbmV4cG9ydCB7IGNyZWF0ZUFwcCwgY3JlYXRlQ29tcG9uZW50LCBjcmVhdGVQYWdlLCBjcmVhdGVQbHVnaW4sIGNyZWF0ZVN1YnBhY2thZ2VBcHAgfTtcclxuIiwiLyogZ2xvYmFscyBfX1ZVRV9TU1JfQ09OVEVYVF9fICovXG5cbi8vIElNUE9SVEFOVDogRG8gTk9UIHVzZSBFUzIwMTUgZmVhdHVyZXMgaW4gdGhpcyBmaWxlIChleGNlcHQgZm9yIG1vZHVsZXMpLlxuLy8gVGhpcyBtb2R1bGUgaXMgYSBydW50aW1lIHV0aWxpdHkgZm9yIGNsZWFuZXIgY29tcG9uZW50IG1vZHVsZSBvdXRwdXQgYW5kIHdpbGxcbi8vIGJlIGluY2x1ZGVkIGluIHRoZSBmaW5hbCB3ZWJwYWNrIHVzZXIgYnVuZGxlLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBub3JtYWxpemVDb21wb25lbnQgKFxuICBzY3JpcHRFeHBvcnRzLFxuICByZW5kZXIsXG4gIHN0YXRpY1JlbmRlckZucyxcbiAgZnVuY3Rpb25hbFRlbXBsYXRlLFxuICBpbmplY3RTdHlsZXMsXG4gIHNjb3BlSWQsXG4gIG1vZHVsZUlkZW50aWZpZXIsIC8qIHNlcnZlciBvbmx5ICovXG4gIHNoYWRvd01vZGUsIC8qIHZ1ZS1jbGkgb25seSAqL1xuICBjb21wb25lbnRzLCAvLyBmaXhlZCBieSB4eHh4eHggYXV0byBjb21wb25lbnRzXG4gIHJlbmRlcmpzIC8vIGZpeGVkIGJ5IHh4eHh4eCByZW5kZXJqc1xuKSB7XG4gIC8vIFZ1ZS5leHRlbmQgY29uc3RydWN0b3IgZXhwb3J0IGludGVyb3BcbiAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2NyaXB0RXhwb3J0cyA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gc2NyaXB0RXhwb3J0cy5vcHRpb25zXG4gICAgOiBzY3JpcHRFeHBvcnRzXG5cbiAgLy8gZml4ZWQgYnkgeHh4eHh4IGF1dG8gY29tcG9uZW50c1xuICBpZiAoY29tcG9uZW50cykge1xuICAgIGlmICghb3B0aW9ucy5jb21wb25lbnRzKSB7XG4gICAgICBvcHRpb25zLmNvbXBvbmVudHMgPSB7fVxuICAgIH1cbiAgICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eVxuICAgIGZvciAodmFyIG5hbWUgaW4gY29tcG9uZW50cykge1xuICAgICAgaWYgKGhhc093bi5jYWxsKGNvbXBvbmVudHMsIG5hbWUpICYmICFoYXNPd24uY2FsbChvcHRpb25zLmNvbXBvbmVudHMsIG5hbWUpKSB7XG4gICAgICAgIG9wdGlvbnMuY29tcG9uZW50c1tuYW1lXSA9IGNvbXBvbmVudHNbbmFtZV1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gZml4ZWQgYnkgeHh4eHh4IHJlbmRlcmpzXG4gIGlmIChyZW5kZXJqcykge1xuICAgIChyZW5kZXJqcy5iZWZvcmVDcmVhdGUgfHwgKHJlbmRlcmpzLmJlZm9yZUNyZWF0ZSA9IFtdKSkudW5zaGlmdChmdW5jdGlvbigpIHtcbiAgICAgIHRoaXNbcmVuZGVyanMuX19tb2R1bGVdID0gdGhpc1xuICAgIH0pO1xuICAgIChvcHRpb25zLm1peGlucyB8fCAob3B0aW9ucy5taXhpbnMgPSBbXSkpLnB1c2gocmVuZGVyanMpXG4gIH1cblxuICAvLyByZW5kZXIgZnVuY3Rpb25zXG4gIGlmIChyZW5kZXIpIHtcbiAgICBvcHRpb25zLnJlbmRlciA9IHJlbmRlclxuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gc3RhdGljUmVuZGVyRm5zXG4gICAgb3B0aW9ucy5fY29tcGlsZWQgPSB0cnVlXG4gIH1cblxuICAvLyBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChmdW5jdGlvbmFsVGVtcGxhdGUpIHtcbiAgICBvcHRpb25zLmZ1bmN0aW9uYWwgPSB0cnVlXG4gIH1cblxuICAvLyBzY29wZWRJZFxuICBpZiAoc2NvcGVJZCkge1xuICAgIG9wdGlvbnMuX3Njb3BlSWQgPSAnZGF0YS12LScgKyBzY29wZUlkXG4gIH1cblxuICB2YXIgaG9va1xuICBpZiAobW9kdWxlSWRlbnRpZmllcikgeyAvLyBzZXJ2ZXIgYnVpbGRcbiAgICBob29rID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgIC8vIDIuMyBpbmplY3Rpb25cbiAgICAgIGNvbnRleHQgPVxuICAgICAgICBjb250ZXh0IHx8IC8vIGNhY2hlZCBjYWxsXG4gICAgICAgICh0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0KSB8fCAvLyBzdGF0ZWZ1bFxuICAgICAgICAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQuJHZub2RlICYmIHRoaXMucGFyZW50LiR2bm9kZS5zc3JDb250ZXh0KSAvLyBmdW5jdGlvbmFsXG4gICAgICAvLyAyLjIgd2l0aCBydW5Jbk5ld0NvbnRleHQ6IHRydWVcbiAgICAgIGlmICghY29udGV4dCAmJiB0eXBlb2YgX19WVUVfU1NSX0NPTlRFWFRfXyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgY29udGV4dCA9IF9fVlVFX1NTUl9DT05URVhUX19cbiAgICAgIH1cbiAgICAgIC8vIGluamVjdCBjb21wb25lbnQgc3R5bGVzXG4gICAgICBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgICAgIGluamVjdFN0eWxlcy5jYWxsKHRoaXMsIGNvbnRleHQpXG4gICAgICB9XG4gICAgICAvLyByZWdpc3RlciBjb21wb25lbnQgbW9kdWxlIGlkZW50aWZpZXIgZm9yIGFzeW5jIGNodW5rIGluZmVycmVuY2VcbiAgICAgIGlmIChjb250ZXh0ICYmIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzKSB7XG4gICAgICAgIGNvbnRleHQuX3JlZ2lzdGVyZWRDb21wb25lbnRzLmFkZChtb2R1bGVJZGVudGlmaWVyKVxuICAgICAgfVxuICAgIH1cbiAgICAvLyB1c2VkIGJ5IHNzciBpbiBjYXNlIGNvbXBvbmVudCBpcyBjYWNoZWQgYW5kIGJlZm9yZUNyZWF0ZVxuICAgIC8vIG5ldmVyIGdldHMgY2FsbGVkXG4gICAgb3B0aW9ucy5fc3NyUmVnaXN0ZXIgPSBob29rXG4gIH0gZWxzZSBpZiAoaW5qZWN0U3R5bGVzKSB7XG4gICAgaG9vayA9IHNoYWRvd01vZGVcbiAgICAgID8gZnVuY3Rpb24gKCkgeyBpbmplY3RTdHlsZXMuY2FsbCh0aGlzLCB0aGlzLiRyb290LiRvcHRpb25zLnNoYWRvd1Jvb3QpIH1cbiAgICAgIDogaW5qZWN0U3R5bGVzXG4gIH1cblxuICBpZiAoaG9vaykge1xuICAgIGlmIChvcHRpb25zLmZ1bmN0aW9uYWwpIHtcbiAgICAgIC8vIGZvciB0ZW1wbGF0ZS1vbmx5IGhvdC1yZWxvYWQgYmVjYXVzZSBpbiB0aGF0IGNhc2UgdGhlIHJlbmRlciBmbiBkb2Vzbid0XG4gICAgICAvLyBnbyB0aHJvdWdoIHRoZSBub3JtYWxpemVyXG4gICAgICBvcHRpb25zLl9pbmplY3RTdHlsZXMgPSBob29rXG4gICAgICAvLyByZWdpc3RlciBmb3IgZnVuY3Rpb2FsIGNvbXBvbmVudCBpbiB2dWUgZmlsZVxuICAgICAgdmFyIG9yaWdpbmFsUmVuZGVyID0gb3B0aW9ucy5yZW5kZXJcbiAgICAgIG9wdGlvbnMucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyV2l0aFN0eWxlSW5qZWN0aW9uIChoLCBjb250ZXh0KSB7XG4gICAgICAgIGhvb2suY2FsbChjb250ZXh0KVxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW5kZXIoaCwgY29udGV4dClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW5qZWN0IGNvbXBvbmVudCByZWdpc3RyYXRpb24gYXMgYmVmb3JlQ3JlYXRlIGhvb2tcbiAgICAgIHZhciBleGlzdGluZyA9IG9wdGlvbnMuYmVmb3JlQ3JlYXRlXG4gICAgICBvcHRpb25zLmJlZm9yZUNyZWF0ZSA9IGV4aXN0aW5nXG4gICAgICAgID8gW10uY29uY2F0KGV4aXN0aW5nLCBob29rKVxuICAgICAgICA6IFtob29rXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwb3J0czogc2NyaXB0RXhwb3J0cyxcbiAgICBvcHRpb25zOiBvcHRpb25zXG4gIH1cbn1cbiIsIi8qIVxuICogVnVlLmpzIHYyLjYuMTFcbiAqIChjKSAyMDE0LTIwMjEgRXZhbiBZb3VcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuLyogICovXG5cbnZhciBlbXB0eU9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuXG4vLyBUaGVzZSBoZWxwZXJzIHByb2R1Y2UgYmV0dGVyIFZNIGNvZGUgaW4gSlMgZW5naW5lcyBkdWUgdG8gdGhlaXJcbi8vIGV4cGxpY2l0bmVzcyBhbmQgZnVuY3Rpb24gaW5saW5pbmcuXG5mdW5jdGlvbiBpc1VuZGVmICh2KSB7XG4gIHJldHVybiB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0RlZiAodikge1xuICByZXR1cm4gdiAhPT0gdW5kZWZpbmVkICYmIHYgIT09IG51bGxcbn1cblxuZnVuY3Rpb24gaXNUcnVlICh2KSB7XG4gIHJldHVybiB2ID09PSB0cnVlXG59XG5cbmZ1bmN0aW9uIGlzRmFsc2UgKHYpIHtcbiAgcmV0dXJuIHYgPT09IGZhbHNlXG59XG5cbi8qKlxuICogQ2hlY2sgaWYgdmFsdWUgaXMgcHJpbWl0aXZlLlxuICovXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8XG4gICAgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fFxuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcgfHxcbiAgICB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJ1xuICApXG59XG5cbi8qKlxuICogUXVpY2sgb2JqZWN0IGNoZWNrIC0gdGhpcyBpcyBwcmltYXJpbHkgdXNlZCB0byB0ZWxsXG4gKiBPYmplY3RzIGZyb20gcHJpbWl0aXZlIHZhbHVlcyB3aGVuIHdlIGtub3cgdGhlIHZhbHVlXG4gKiBpcyBhIEpTT04tY29tcGxpYW50IHR5cGUuXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0J1xufVxuXG4vKipcbiAqIEdldCB0aGUgcmF3IHR5cGUgc3RyaW5nIG9mIGEgdmFsdWUsIGUuZy4sIFtvYmplY3QgT2JqZWN0XS5cbiAqL1xudmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHRvUmF3VHlwZSAodmFsdWUpIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKHZhbHVlKS5zbGljZSg4LCAtMSlcbn1cblxuLyoqXG4gKiBTdHJpY3Qgb2JqZWN0IHR5cGUgY2hlY2suIE9ubHkgcmV0dXJucyB0cnVlXG4gKiBmb3IgcGxhaW4gSmF2YVNjcmlwdCBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0IChvYmopIHtcbiAgcmV0dXJuIF90b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IE9iamVjdF0nXG59XG5cbmZ1bmN0aW9uIGlzUmVnRXhwICh2KSB7XG4gIHJldHVybiBfdG9TdHJpbmcuY2FsbCh2KSA9PT0gJ1tvYmplY3QgUmVnRXhwXSdcbn1cblxuLyoqXG4gKiBDaGVjayBpZiB2YWwgaXMgYSB2YWxpZCBhcnJheSBpbmRleC5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEFycmF5SW5kZXggKHZhbCkge1xuICB2YXIgbiA9IHBhcnNlRmxvYXQoU3RyaW5nKHZhbCkpO1xuICByZXR1cm4gbiA+PSAwICYmIE1hdGguZmxvb3IobikgPT09IG4gJiYgaXNGaW5pdGUodmFsKVxufVxuXG5mdW5jdGlvbiBpc1Byb21pc2UgKHZhbCkge1xuICByZXR1cm4gKFxuICAgIGlzRGVmKHZhbCkgJiZcbiAgICB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2YgdmFsLmNhdGNoID09PSAnZnVuY3Rpb24nXG4gIClcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgdG8gYSBzdHJpbmcgdGhhdCBpcyBhY3R1YWxseSByZW5kZXJlZC5cbiAqL1xuZnVuY3Rpb24gdG9TdHJpbmcgKHZhbCkge1xuICByZXR1cm4gdmFsID09IG51bGxcbiAgICA/ICcnXG4gICAgOiBBcnJheS5pc0FycmF5KHZhbCkgfHwgKGlzUGxhaW5PYmplY3QodmFsKSAmJiB2YWwudG9TdHJpbmcgPT09IF90b1N0cmluZylcbiAgICAgID8gSlNPTi5zdHJpbmdpZnkodmFsLCBudWxsLCAyKVxuICAgICAgOiBTdHJpbmcodmFsKVxufVxuXG4vKipcbiAqIENvbnZlcnQgYW4gaW5wdXQgdmFsdWUgdG8gYSBudW1iZXIgZm9yIHBlcnNpc3RlbmNlLlxuICogSWYgdGhlIGNvbnZlcnNpb24gZmFpbHMsIHJldHVybiBvcmlnaW5hbCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIHRvTnVtYmVyICh2YWwpIHtcbiAgdmFyIG4gPSBwYXJzZUZsb2F0KHZhbCk7XG4gIHJldHVybiBpc05hTihuKSA/IHZhbCA6IG5cbn1cblxuLyoqXG4gKiBNYWtlIGEgbWFwIGFuZCByZXR1cm4gYSBmdW5jdGlvbiBmb3IgY2hlY2tpbmcgaWYgYSBrZXlcbiAqIGlzIGluIHRoYXQgbWFwLlxuICovXG5mdW5jdGlvbiBtYWtlTWFwIChcbiAgc3RyLFxuICBleHBlY3RzTG93ZXJDYXNlXG4pIHtcbiAgdmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBsaXN0ID0gc3RyLnNwbGl0KCcsJyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIG1hcFtsaXN0W2ldXSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGV4cGVjdHNMb3dlckNhc2VcbiAgICA/IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWwudG9Mb3dlckNhc2UoKV07IH1cbiAgICA6IGZ1bmN0aW9uICh2YWwpIHsgcmV0dXJuIG1hcFt2YWxdOyB9XG59XG5cbi8qKlxuICogQ2hlY2sgaWYgYSB0YWcgaXMgYSBidWlsdC1pbiB0YWcuXG4gKi9cbnZhciBpc0J1aWx0SW5UYWcgPSBtYWtlTWFwKCdzbG90LGNvbXBvbmVudCcsIHRydWUpO1xuXG4vKipcbiAqIENoZWNrIGlmIGFuIGF0dHJpYnV0ZSBpcyBhIHJlc2VydmVkIGF0dHJpYnV0ZS5cbiAqL1xudmFyIGlzUmVzZXJ2ZWRBdHRyaWJ1dGUgPSBtYWtlTWFwKCdrZXkscmVmLHNsb3Qsc2xvdC1zY29wZSxpcycpO1xuXG4vKipcbiAqIFJlbW92ZSBhbiBpdGVtIGZyb20gYW4gYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZSAoYXJyLCBpdGVtKSB7XG4gIGlmIChhcnIubGVuZ3RoKSB7XG4gICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHJldHVybiBhcnIuc3BsaWNlKGluZGV4LCAxKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYW4gb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkuXG4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5mdW5jdGlvbiBoYXNPd24gKG9iaiwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGNhY2hlZCB2ZXJzaW9uIG9mIGEgcHVyZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2FjaGVkIChmbikge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gKGZ1bmN0aW9uIGNhY2hlZEZuIChzdHIpIHtcbiAgICB2YXIgaGl0ID0gY2FjaGVbc3RyXTtcbiAgICByZXR1cm4gaGl0IHx8IChjYWNoZVtzdHJdID0gZm4oc3RyKSlcbiAgfSlcbn1cblxuLyoqXG4gKiBDYW1lbGl6ZSBhIGh5cGhlbi1kZWxpbWl0ZWQgc3RyaW5nLlxuICovXG52YXIgY2FtZWxpemVSRSA9IC8tKFxcdykvZztcbnZhciBjYW1lbGl6ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShjYW1lbGl6ZVJFLCBmdW5jdGlvbiAoXywgYykgeyByZXR1cm4gYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnOyB9KVxufSk7XG5cbi8qKlxuICogQ2FwaXRhbGl6ZSBhIHN0cmluZy5cbiAqL1xudmFyIGNhcGl0YWxpemUgPSBjYWNoZWQoZnVuY3Rpb24gKHN0cikge1xuICByZXR1cm4gc3RyLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpXG59KTtcblxuLyoqXG4gKiBIeXBoZW5hdGUgYSBjYW1lbENhc2Ugc3RyaW5nLlxuICovXG52YXIgaHlwaGVuYXRlUkUgPSAvXFxCKFtBLVpdKS9nO1xudmFyIGh5cGhlbmF0ZSA9IGNhY2hlZChmdW5jdGlvbiAoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShoeXBoZW5hdGVSRSwgJy0kMScpLnRvTG93ZXJDYXNlKClcbn0pO1xuXG4vKipcbiAqIFNpbXBsZSBiaW5kIHBvbHlmaWxsIGZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3Qgc3VwcG9ydCBpdCxcbiAqIGUuZy4sIFBoYW50b21KUyAxLnguIFRlY2huaWNhbGx5LCB3ZSBkb24ndCBuZWVkIHRoaXMgYW55bW9yZVxuICogc2luY2UgbmF0aXZlIGJpbmQgaXMgbm93IHBlcmZvcm1hbnQgZW5vdWdoIGluIG1vc3QgYnJvd3NlcnMuXG4gKiBCdXQgcmVtb3ZpbmcgaXQgd291bGQgbWVhbiBicmVha2luZyBjb2RlIHRoYXQgd2FzIGFibGUgdG8gcnVuIGluXG4gKiBQaGFudG9tSlMgMS54LCBzbyB0aGlzIG11c3QgYmUga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gcG9seWZpbGxCaW5kIChmbiwgY3R4KSB7XG4gIGZ1bmN0aW9uIGJvdW5kRm4gKGEpIHtcbiAgICB2YXIgbCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgcmV0dXJuIGxcbiAgICAgID8gbCA+IDFcbiAgICAgICAgPyBmbi5hcHBseShjdHgsIGFyZ3VtZW50cylcbiAgICAgICAgOiBmbi5jYWxsKGN0eCwgYSlcbiAgICAgIDogZm4uY2FsbChjdHgpXG4gIH1cblxuICBib3VuZEZuLl9sZW5ndGggPSBmbi5sZW5ndGg7XG4gIHJldHVybiBib3VuZEZuXG59XG5cbmZ1bmN0aW9uIG5hdGl2ZUJpbmQgKGZuLCBjdHgpIHtcbiAgcmV0dXJuIGZuLmJpbmQoY3R4KVxufVxuXG52YXIgYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kXG4gID8gbmF0aXZlQmluZFxuICA6IHBvbHlmaWxsQmluZDtcblxuLyoqXG4gKiBDb252ZXJ0IGFuIEFycmF5LWxpa2Ugb2JqZWN0IHRvIGEgcmVhbCBBcnJheS5cbiAqL1xuZnVuY3Rpb24gdG9BcnJheSAobGlzdCwgc3RhcnQpIHtcbiAgc3RhcnQgPSBzdGFydCB8fCAwO1xuICB2YXIgaSA9IGxpc3QubGVuZ3RoIC0gc3RhcnQ7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0pIHtcbiAgICByZXRbaV0gPSBsaXN0W2kgKyBzdGFydF07XG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG4vKipcbiAqIE1peCBwcm9wZXJ0aWVzIGludG8gdGFyZ2V0IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZXh0ZW5kICh0bywgX2Zyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIF9mcm9tKSB7XG4gICAgdG9ba2V5XSA9IF9mcm9tW2tleV07XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbi8qKlxuICogTWVyZ2UgYW4gQXJyYXkgb2YgT2JqZWN0cyBpbnRvIGEgc2luZ2xlIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gdG9PYmplY3QgKGFycikge1xuICB2YXIgcmVzID0ge307XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFycltpXSkge1xuICAgICAgZXh0ZW5kKHJlcywgYXJyW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXG4vKipcbiAqIFBlcmZvcm0gbm8gb3BlcmF0aW9uLlxuICogU3R1YmJpbmcgYXJncyB0byBtYWtlIEZsb3cgaGFwcHkgd2l0aG91dCBsZWF2aW5nIHVzZWxlc3MgdHJhbnNwaWxlZCBjb2RlXG4gKiB3aXRoIC4uLnJlc3QgKGh0dHBzOi8vZmxvdy5vcmcvYmxvZy8yMDE3LzA1LzA3L1N0cmljdC1GdW5jdGlvbi1DYWxsLUFyaXR5LykuXG4gKi9cbmZ1bmN0aW9uIG5vb3AgKGEsIGIsIGMpIHt9XG5cbi8qKlxuICogQWx3YXlzIHJldHVybiBmYWxzZS5cbiAqL1xudmFyIG5vID0gZnVuY3Rpb24gKGEsIGIsIGMpIHsgcmV0dXJuIGZhbHNlOyB9O1xuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXG5cbi8qKlxuICogUmV0dXJuIHRoZSBzYW1lIHZhbHVlLlxuICovXG52YXIgaWRlbnRpdHkgPSBmdW5jdGlvbiAoXykgeyByZXR1cm4gXzsgfTtcblxuLyoqXG4gKiBDaGVjayBpZiB0d28gdmFsdWVzIGFyZSBsb29zZWx5IGVxdWFsIC0gdGhhdCBpcyxcbiAqIGlmIHRoZXkgYXJlIHBsYWluIG9iamVjdHMsIGRvIHRoZXkgaGF2ZSB0aGUgc2FtZSBzaGFwZT9cbiAqL1xuZnVuY3Rpb24gbG9vc2VFcXVhbCAoYSwgYikge1xuICBpZiAoYSA9PT0gYikgeyByZXR1cm4gdHJ1ZSB9XG4gIHZhciBpc09iamVjdEEgPSBpc09iamVjdChhKTtcbiAgdmFyIGlzT2JqZWN0QiA9IGlzT2JqZWN0KGIpO1xuICBpZiAoaXNPYmplY3RBICYmIGlzT2JqZWN0Qikge1xuICAgIHRyeSB7XG4gICAgICB2YXIgaXNBcnJheUEgPSBBcnJheS5pc0FycmF5KGEpO1xuICAgICAgdmFyIGlzQXJyYXlCID0gQXJyYXkuaXNBcnJheShiKTtcbiAgICAgIGlmIChpc0FycmF5QSAmJiBpc0FycmF5Qikge1xuICAgICAgICByZXR1cm4gYS5sZW5ndGggPT09IGIubGVuZ3RoICYmIGEuZXZlcnkoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgICAgICByZXR1cm4gbG9vc2VFcXVhbChlLCBiW2ldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gYS5nZXRUaW1lKCkgPT09IGIuZ2V0VGltZSgpXG4gICAgICB9IGVsc2UgaWYgKCFpc0FycmF5QSAmJiAhaXNBcnJheUIpIHtcbiAgICAgICAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgICAgIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKGIpO1xuICAgICAgICByZXR1cm4ga2V5c0EubGVuZ3RoID09PSBrZXlzQi5sZW5ndGggJiYga2V5c0EuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgIHJldHVybiBsb29zZUVxdWFsKGFba2V5XSwgYltrZXldKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSBlbHNlIGlmICghaXNPYmplY3RBICYmICFpc09iamVjdEIpIHtcbiAgICByZXR1cm4gU3RyaW5nKGEpID09PSBTdHJpbmcoYilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgZmlyc3QgaW5kZXggYXQgd2hpY2ggYSBsb29zZWx5IGVxdWFsIHZhbHVlIGNhbiBiZVxuICogZm91bmQgaW4gdGhlIGFycmF5IChpZiB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdCwgdGhlIGFycmF5IG11c3RcbiAqIGNvbnRhaW4gYW4gb2JqZWN0IG9mIHRoZSBzYW1lIHNoYXBlKSwgb3IgLTEgaWYgaXQgaXMgbm90IHByZXNlbnQuXG4gKi9cbmZ1bmN0aW9uIGxvb3NlSW5kZXhPZiAoYXJyLCB2YWwpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAobG9vc2VFcXVhbChhcnJbaV0sIHZhbCkpIHsgcmV0dXJuIGkgfVxuICB9XG4gIHJldHVybiAtMVxufVxuXG4vKipcbiAqIEVuc3VyZSBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IG9uY2UuXG4gKi9cbmZ1bmN0aW9uIG9uY2UgKGZuKSB7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBBU1NFVF9UWVBFUyA9IFtcbiAgJ2NvbXBvbmVudCcsXG4gICdkaXJlY3RpdmUnLFxuICAnZmlsdGVyJ1xuXTtcblxudmFyIExJRkVDWUNMRV9IT09LUyA9IFtcbiAgJ2JlZm9yZUNyZWF0ZScsXG4gICdjcmVhdGVkJyxcbiAgJ2JlZm9yZU1vdW50JyxcbiAgJ21vdW50ZWQnLFxuICAnYmVmb3JlVXBkYXRlJyxcbiAgJ3VwZGF0ZWQnLFxuICAnYmVmb3JlRGVzdHJveScsXG4gICdkZXN0cm95ZWQnLFxuICAnYWN0aXZhdGVkJyxcbiAgJ2RlYWN0aXZhdGVkJyxcbiAgJ2Vycm9yQ2FwdHVyZWQnLFxuICAnc2VydmVyUHJlZmV0Y2gnXG5dO1xuXG4vKiAgKi9cblxuXG5cbnZhciBjb25maWcgPSAoe1xuICAvKipcbiAgICogT3B0aW9uIG1lcmdlIHN0cmF0ZWdpZXMgKHVzZWQgaW4gY29yZS91dGlsL29wdGlvbnMpXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAgb3B0aW9uTWVyZ2VTdHJhdGVnaWVzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN1cHByZXNzIHdhcm5pbmdzLlxuICAgKi9cbiAgc2lsZW50OiBmYWxzZSxcblxuICAvKipcbiAgICogU2hvdyBwcm9kdWN0aW9uIG1vZGUgdGlwIG1lc3NhZ2Ugb24gYm9vdD9cbiAgICovXG4gIHByb2R1Y3Rpb25UaXA6IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicsXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGRldnRvb2xzXG4gICAqL1xuICBkZXZ0b29sczogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyxcblxuICAvKipcbiAgICogV2hldGhlciB0byByZWNvcmQgcGVyZlxuICAgKi9cbiAgcGVyZm9ybWFuY2U6IGZhbHNlLFxuXG4gIC8qKlxuICAgKiBFcnJvciBoYW5kbGVyIGZvciB3YXRjaGVyIGVycm9yc1xuICAgKi9cbiAgZXJyb3JIYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBXYXJuIGhhbmRsZXIgZm9yIHdhdGNoZXIgd2FybnNcbiAgICovXG4gIHdhcm5IYW5kbGVyOiBudWxsLFxuXG4gIC8qKlxuICAgKiBJZ25vcmUgY2VydGFpbiBjdXN0b20gZWxlbWVudHNcbiAgICovXG4gIGlnbm9yZWRFbGVtZW50czogW10sXG5cbiAgLyoqXG4gICAqIEN1c3RvbSB1c2VyIGtleSBhbGlhc2VzIGZvciB2LW9uXG4gICAqL1xuICAvLyAkZmxvdy1kaXNhYmxlLWxpbmVcbiAga2V5Q29kZXM6IE9iamVjdC5jcmVhdGUobnVsbCksXG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFnIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHJlZ2lzdGVyZWQgYXMgYVxuICAgKiBjb21wb25lbnQuIFRoaXMgaXMgcGxhdGZvcm0tZGVwZW5kZW50IGFuZCBtYXkgYmUgb3ZlcndyaXR0ZW4uXG4gICAqL1xuICBpc1Jlc2VydmVkVGFnOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gYXR0cmlidXRlIGlzIHJlc2VydmVkIHNvIHRoYXQgaXQgY2Fubm90IGJlIHVzZWQgYXMgYSBjb21wb25lbnRcbiAgICogcHJvcC4gVGhpcyBpcyBwbGF0Zm9ybS1kZXBlbmRlbnQgYW5kIG1heSBiZSBvdmVyd3JpdHRlbi5cbiAgICovXG4gIGlzUmVzZXJ2ZWRBdHRyOiBubyxcblxuICAvKipcbiAgICogQ2hlY2sgaWYgYSB0YWcgaXMgYW4gdW5rbm93biBlbGVtZW50LlxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBpc1Vua25vd25FbGVtZW50OiBubyxcblxuICAvKipcbiAgICogR2V0IHRoZSBuYW1lc3BhY2Ugb2YgYW4gZWxlbWVudFxuICAgKi9cbiAgZ2V0VGFnTmFtZXNwYWNlOiBub29wLFxuXG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgcmVhbCB0YWcgbmFtZSBmb3IgdGhlIHNwZWNpZmljIHBsYXRmb3JtLlxuICAgKi9cbiAgcGFyc2VQbGF0Zm9ybVRhZ05hbWU6IGlkZW50aXR5LFxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBhdHRyaWJ1dGUgbXVzdCBiZSBib3VuZCB1c2luZyBwcm9wZXJ0eSwgZS5nLiB2YWx1ZVxuICAgKiBQbGF0Zm9ybS1kZXBlbmRlbnQuXG4gICAqL1xuICBtdXN0VXNlUHJvcDogbm8sXG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gdXBkYXRlcyBhc3luY2hyb25vdXNseS4gSW50ZW5kZWQgdG8gYmUgdXNlZCBieSBWdWUgVGVzdCBVdGlsc1xuICAgKiBUaGlzIHdpbGwgc2lnbmlmaWNhbnRseSByZWR1Y2UgcGVyZm9ybWFuY2UgaWYgc2V0IHRvIGZhbHNlLlxuICAgKi9cbiAgYXN5bmM6IHRydWUsXG5cbiAgLyoqXG4gICAqIEV4cG9zZWQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICAqL1xuICBfbGlmZWN5Y2xlSG9va3M6IExJRkVDWUNMRV9IT09LU1xufSk7XG5cbi8qICAqL1xuXG4vKipcbiAqIHVuaWNvZGUgbGV0dGVycyB1c2VkIGZvciBwYXJzaW5nIGh0bWwgdGFncywgY29tcG9uZW50IG5hbWVzIGFuZCBwcm9wZXJ0eSBwYXRocy5cbiAqIHVzaW5nIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNTMvc2VtYW50aWNzLXNjcmlwdGluZy5odG1sI3BvdGVudGlhbGN1c3RvbWVsZW1lbnRuYW1lXG4gKiBza2lwcGluZyBcXHUxMDAwMC1cXHVFRkZGRiBkdWUgdG8gaXQgZnJlZXppbmcgdXAgUGhhbnRvbUpTXG4gKi9cbnZhciB1bmljb2RlUmVnRXhwID0gL2EtekEtWlxcdTAwQjdcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDNGLVxcdTIwNDBcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQvO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgc3RyaW5nIHN0YXJ0cyB3aXRoICQgb3IgX1xuICovXG5mdW5jdGlvbiBpc1Jlc2VydmVkIChzdHIpIHtcbiAgdmFyIGMgPSAoc3RyICsgJycpLmNoYXJDb2RlQXQoMCk7XG4gIHJldHVybiBjID09PSAweDI0IHx8IGMgPT09IDB4NUZcbn1cblxuLyoqXG4gKiBEZWZpbmUgYSBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZGVmIChvYmosIGtleSwgdmFsLCBlbnVtZXJhYmxlKSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgIHZhbHVlOiB2YWwsXG4gICAgZW51bWVyYWJsZTogISFlbnVtZXJhYmxlLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBQYXJzZSBzaW1wbGUgcGF0aC5cbiAqL1xudmFyIGJhaWxSRSA9IG5ldyBSZWdFeHAoKFwiW15cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIi4kX1xcXFxkXVwiKSk7XG5mdW5jdGlvbiBwYXJzZVBhdGggKHBhdGgpIHtcbiAgaWYgKGJhaWxSRS50ZXN0KHBhdGgpKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHNlZ21lbnRzID0gcGF0aC5zcGxpdCgnLicpO1xuICByZXR1cm4gZnVuY3Rpb24gKG9iaikge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghb2JqKSB7IHJldHVybiB9XG4gICAgICBvYmogPSBvYmpbc2VnbWVudHNbaV1dO1xuICAgIH1cbiAgICByZXR1cm4gb2JqXG4gIH1cbn1cblxuLyogICovXG5cbi8vIGNhbiB3ZSB1c2UgX19wcm90b19fP1xudmFyIGhhc1Byb3RvID0gJ19fcHJvdG9fXycgaW4ge307XG5cbi8vIEJyb3dzZXIgZW52aXJvbm1lbnQgc25pZmZpbmdcbnZhciBpbkJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbnZhciBpbldlZXggPSB0eXBlb2YgV1hFbnZpcm9ubWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgISFXWEVudmlyb25tZW50LnBsYXRmb3JtO1xudmFyIHdlZXhQbGF0Zm9ybSA9IGluV2VleCAmJiBXWEVudmlyb25tZW50LnBsYXRmb3JtLnRvTG93ZXJDYXNlKCk7XG52YXIgVUEgPSBpbkJyb3dzZXIgJiYgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTtcbnZhciBpc0lFID0gVUEgJiYgL21zaWV8dHJpZGVudC8udGVzdChVQSk7XG52YXIgaXNJRTkgPSBVQSAmJiBVQS5pbmRleE9mKCdtc2llIDkuMCcpID4gMDtcbnZhciBpc0VkZ2UgPSBVQSAmJiBVQS5pbmRleE9mKCdlZGdlLycpID4gMDtcbnZhciBpc0FuZHJvaWQgPSAoVUEgJiYgVUEuaW5kZXhPZignYW5kcm9pZCcpID4gMCkgfHwgKHdlZXhQbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnKTtcbnZhciBpc0lPUyA9IChVQSAmJiAvaXBob25lfGlwYWR8aXBvZHxpb3MvLnRlc3QoVUEpKSB8fCAod2VleFBsYXRmb3JtID09PSAnaW9zJyk7XG52YXIgaXNDaHJvbWUgPSBVQSAmJiAvY2hyb21lXFwvXFxkKy8udGVzdChVQSkgJiYgIWlzRWRnZTtcbnZhciBpc1BoYW50b21KUyA9IFVBICYmIC9waGFudG9tanMvLnRlc3QoVUEpO1xudmFyIGlzRkYgPSBVQSAmJiBVQS5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS8pO1xuXG4vLyBGaXJlZm94IGhhcyBhIFwid2F0Y2hcIiBmdW5jdGlvbiBvbiBPYmplY3QucHJvdG90eXBlLi4uXG52YXIgbmF0aXZlV2F0Y2ggPSAoe30pLndhdGNoO1xuaWYgKGluQnJvd3Nlcikge1xuICB0cnkge1xuICAgIHZhciBvcHRzID0ge307XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdHMsICdwYXNzaXZlJywgKHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAgIH1cbiAgICB9KSk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8yODVcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdC1wYXNzaXZlJywgbnVsbCwgb3B0cyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59XG5cbi8vIHRoaXMgbmVlZHMgdG8gYmUgbGF6eS1ldmFsZWQgYmVjYXVzZSB2dWUgbWF5IGJlIHJlcXVpcmVkIGJlZm9yZVxuLy8gdnVlLXNlcnZlci1yZW5kZXJlciBjYW4gc2V0IFZVRV9FTlZcbnZhciBfaXNTZXJ2ZXI7XG52YXIgaXNTZXJ2ZXJSZW5kZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIGlmIChfaXNTZXJ2ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICghaW5Ccm93c2VyICYmICFpbldlZXggJiYgdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGRldGVjdCBwcmVzZW5jZSBvZiB2dWUtc2VydmVyLXJlbmRlcmVyIGFuZCBhdm9pZFxuICAgICAgLy8gV2VicGFjayBzaGltbWluZyB0aGUgcHJvY2Vzc1xuICAgICAgX2lzU2VydmVyID0gZ2xvYmFsWydwcm9jZXNzJ10gJiYgZ2xvYmFsWydwcm9jZXNzJ10uZW52LlZVRV9FTlYgPT09ICdzZXJ2ZXInO1xuICAgIH0gZWxzZSB7XG4gICAgICBfaXNTZXJ2ZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9pc1NlcnZlclxufTtcblxuLy8gZGV0ZWN0IGRldnRvb2xzXG52YXIgZGV2dG9vbHMgPSBpbkJyb3dzZXIgJiYgd2luZG93Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBpc05hdGl2ZSAoQ3Rvcikge1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT09ICdmdW5jdGlvbicgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KEN0b3IudG9TdHJpbmcoKSlcbn1cblxudmFyIGhhc1N5bWJvbCA9XG4gIHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFN5bWJvbCkgJiZcbiAgdHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFJlZmxlY3Qub3duS2V5cyk7XG5cbnZhciBfU2V0O1xuLyogaXN0YW5idWwgaWdub3JlIGlmICovIC8vICRmbG93LWRpc2FibGUtbGluZVxuaWYgKHR5cGVvZiBTZXQgIT09ICd1bmRlZmluZWQnICYmIGlzTmF0aXZlKFNldCkpIHtcbiAgLy8gdXNlIG5hdGl2ZSBTZXQgd2hlbiBhdmFpbGFibGUuXG4gIF9TZXQgPSBTZXQ7XG59IGVsc2Uge1xuICAvLyBhIG5vbi1zdGFuZGFyZCBTZXQgcG9seWZpbGwgdGhhdCBvbmx5IHdvcmtzIHdpdGggcHJpbWl0aXZlIGtleXMuXG4gIF9TZXQgPSAvKkBfX1BVUkVfXyovKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTZXQgKCkge1xuICAgICAgdGhpcy5zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH1cbiAgICBTZXQucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIGhhcyAoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXRba2V5XSA9PT0gdHJ1ZVxuICAgIH07XG4gICAgU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiBhZGQgKGtleSkge1xuICAgICAgdGhpcy5zZXRba2V5XSA9IHRydWU7XG4gICAgfTtcbiAgICBTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIgKCkge1xuICAgICAgdGhpcy5zZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH07XG5cbiAgICByZXR1cm4gU2V0O1xuICB9KCkpO1xufVxuXG4vKiAgKi9cblxudmFyIHdhcm4gPSBub29wO1xudmFyIHRpcCA9IG5vb3A7XG52YXIgZ2VuZXJhdGVDb21wb25lbnRUcmFjZSA9IChub29wKTsgLy8gd29yayBhcm91bmQgZmxvdyBjaGVja1xudmFyIGZvcm1hdENvbXBvbmVudE5hbWUgPSAobm9vcCk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBoYXNDb25zb2xlID0gdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnO1xuICB2YXIgY2xhc3NpZnlSRSA9IC8oPzpefFstX10pKFxcdykvZztcbiAgdmFyIGNsYXNzaWZ5ID0gZnVuY3Rpb24gKHN0cikgeyByZXR1cm4gc3RyXG4gICAgLnJlcGxhY2UoY2xhc3NpZnlSRSwgZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMudG9VcHBlckNhc2UoKTsgfSlcbiAgICAucmVwbGFjZSgvWy1fXS9nLCAnJyk7IH07XG5cbiAgd2FybiA9IGZ1bmN0aW9uIChtc2csIHZtKSB7XG4gICAgdmFyIHRyYWNlID0gdm0gPyBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlKHZtKSA6ICcnO1xuXG4gICAgaWYgKGNvbmZpZy53YXJuSGFuZGxlcikge1xuICAgICAgY29uZmlnLndhcm5IYW5kbGVyLmNhbGwobnVsbCwgbXNnLCB2bSwgdHJhY2UpO1xuICAgIH0gZWxzZSBpZiAoaGFzQ29uc29sZSAmJiAoIWNvbmZpZy5zaWxlbnQpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIltWdWUgd2Fybl06IFwiICsgbXNnICsgdHJhY2UpKTtcbiAgICB9XG4gIH07XG5cbiAgdGlwID0gZnVuY3Rpb24gKG1zZywgdm0pIHtcbiAgICBpZiAoaGFzQ29uc29sZSAmJiAoIWNvbmZpZy5zaWxlbnQpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJbVnVlIHRpcF06IFwiICsgbXNnICsgKFxuICAgICAgICB2bSA/IGdlbmVyYXRlQ29tcG9uZW50VHJhY2Uodm0pIDogJydcbiAgICAgICkpO1xuICAgIH1cbiAgfTtcblxuICBmb3JtYXRDb21wb25lbnROYW1lID0gZnVuY3Rpb24gKHZtLCBpbmNsdWRlRmlsZSkge1xuICAgIGlmICh2bS4kcm9vdCA9PT0gdm0pIHtcbiAgICAgIGlmICh2bS4kb3B0aW9ucyAmJiB2bS4kb3B0aW9ucy5fX2ZpbGUpIHsgLy8gZml4ZWQgYnkgeHh4eHh4XG4gICAgICAgIHJldHVybiAoJycpICsgdm0uJG9wdGlvbnMuX19maWxlXG4gICAgICB9XG4gICAgICByZXR1cm4gJzxSb290PidcbiAgICB9XG4gICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygdm0gPT09ICdmdW5jdGlvbicgJiYgdm0uY2lkICE9IG51bGxcbiAgICAgID8gdm0ub3B0aW9uc1xuICAgICAgOiB2bS5faXNWdWVcbiAgICAgICAgPyB2bS4kb3B0aW9ucyB8fCB2bS5jb25zdHJ1Y3Rvci5vcHRpb25zXG4gICAgICAgIDogdm07XG4gICAgdmFyIG5hbWUgPSBvcHRpb25zLm5hbWUgfHwgb3B0aW9ucy5fY29tcG9uZW50VGFnO1xuICAgIHZhciBmaWxlID0gb3B0aW9ucy5fX2ZpbGU7XG4gICAgaWYgKCFuYW1lICYmIGZpbGUpIHtcbiAgICAgIHZhciBtYXRjaCA9IGZpbGUubWF0Y2goLyhbXi9cXFxcXSspXFwudnVlJC8pO1xuICAgICAgbmFtZSA9IG1hdGNoICYmIG1hdGNoWzFdO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICAobmFtZSA/IChcIjxcIiArIChjbGFzc2lmeShuYW1lKSkgKyBcIj5cIikgOiBcIjxBbm9ueW1vdXM+XCIpICtcbiAgICAgIChmaWxlICYmIGluY2x1ZGVGaWxlICE9PSBmYWxzZSA/IChcIiBhdCBcIiArIGZpbGUpIDogJycpXG4gICAgKVxuICB9O1xuXG4gIHZhciByZXBlYXQgPSBmdW5jdGlvbiAoc3RyLCBuKSB7XG4gICAgdmFyIHJlcyA9ICcnO1xuICAgIHdoaWxlIChuKSB7XG4gICAgICBpZiAobiAlIDIgPT09IDEpIHsgcmVzICs9IHN0cjsgfVxuICAgICAgaWYgKG4gPiAxKSB7IHN0ciArPSBzdHI7IH1cbiAgICAgIG4gPj49IDE7XG4gICAgfVxuICAgIHJldHVybiByZXNcbiAgfTtcblxuICBnZW5lcmF0ZUNvbXBvbmVudFRyYWNlID0gZnVuY3Rpb24gKHZtKSB7XG4gICAgaWYgKHZtLl9pc1Z1ZSAmJiB2bS4kcGFyZW50KSB7XG4gICAgICB2YXIgdHJlZSA9IFtdO1xuICAgICAgdmFyIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICB3aGlsZSAodm0gJiYgdm0uJG9wdGlvbnMubmFtZSAhPT0gJ1BhZ2VCb2R5Jykge1xuICAgICAgICBpZiAodHJlZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIGxhc3QgPSB0cmVlW3RyZWUubGVuZ3RoIC0gMV07XG4gICAgICAgICAgaWYgKGxhc3QuY29uc3RydWN0b3IgPT09IHZtLmNvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICBjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UrKztcbiAgICAgICAgICAgIHZtID0gdm0uJHBhcmVudDtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UmVjdXJzaXZlU2VxdWVuY2UgPiAwKSB7XG4gICAgICAgICAgICB0cmVlW3RyZWUubGVuZ3RoIC0gMV0gPSBbbGFzdCwgY3VycmVudFJlY3Vyc2l2ZVNlcXVlbmNlXTtcbiAgICAgICAgICAgIGN1cnJlbnRSZWN1cnNpdmVTZXF1ZW5jZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICF2bS4kb3B0aW9ucy5pc1Jlc2VydmVkICYmIHRyZWUucHVzaCh2bSk7XG4gICAgICAgIHZtID0gdm0uJHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnXFxuXFxuZm91bmQgaW5cXG5cXG4nICsgdHJlZVxuICAgICAgICAubWFwKGZ1bmN0aW9uICh2bSwgaSkgeyByZXR1cm4gKFwiXCIgKyAoaSA9PT0gMCA/ICctLS0+ICcgOiByZXBlYXQoJyAnLCA1ICsgaSAqIDIpKSArIChBcnJheS5pc0FycmF5KHZtKVxuICAgICAgICAgICAgPyAoKGZvcm1hdENvbXBvbmVudE5hbWUodm1bMF0pKSArIFwiLi4uIChcIiArICh2bVsxXSkgKyBcIiByZWN1cnNpdmUgY2FsbHMpXCIpXG4gICAgICAgICAgICA6IGZvcm1hdENvbXBvbmVudE5hbWUodm0pKSk7IH0pXG4gICAgICAgIC5qb2luKCdcXG4nKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKFwiXFxuXFxuKGZvdW5kIGluIFwiICsgKGZvcm1hdENvbXBvbmVudE5hbWUodm0pKSArIFwiKVwiKVxuICAgIH1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciB1aWQgPSAwO1xuXG4vKipcbiAqIEEgZGVwIGlzIGFuIG9ic2VydmFibGUgdGhhdCBjYW4gaGF2ZSBtdWx0aXBsZVxuICogZGlyZWN0aXZlcyBzdWJzY3JpYmluZyB0byBpdC5cbiAqL1xudmFyIERlcCA9IGZ1bmN0aW9uIERlcCAoKSB7XG4gIHRoaXMuaWQgPSB1aWQrKztcbiAgdGhpcy5zdWJzID0gW107XG59O1xuXG5EZXAucHJvdG90eXBlLmFkZFN1YiA9IGZ1bmN0aW9uIGFkZFN1YiAoc3ViKSB7XG4gIHRoaXMuc3Vicy5wdXNoKHN1Yik7XG59O1xuXG5EZXAucHJvdG90eXBlLnJlbW92ZVN1YiA9IGZ1bmN0aW9uIHJlbW92ZVN1YiAoc3ViKSB7XG4gIHJlbW92ZSh0aGlzLnN1YnMsIHN1Yik7XG59O1xuXG5EZXAucHJvdG90eXBlLmRlcGVuZCA9IGZ1bmN0aW9uIGRlcGVuZCAoKSB7XG4gIGlmIChEZXAuU2hhcmVkT2JqZWN0LnRhcmdldCkge1xuICAgIERlcC5TaGFyZWRPYmplY3QudGFyZ2V0LmFkZERlcCh0aGlzKTtcbiAgfVxufTtcblxuRGVwLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiBub3RpZnkgKCkge1xuICAvLyBzdGFiaWxpemUgdGhlIHN1YnNjcmliZXIgbGlzdCBmaXJzdFxuICB2YXIgc3VicyA9IHRoaXMuc3Vicy5zbGljZSgpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhY29uZmlnLmFzeW5jKSB7XG4gICAgLy8gc3VicyBhcmVuJ3Qgc29ydGVkIGluIHNjaGVkdWxlciBpZiBub3QgcnVubmluZyBhc3luY1xuICAgIC8vIHdlIG5lZWQgdG8gc29ydCB0aGVtIG5vdyB0byBtYWtlIHN1cmUgdGhleSBmaXJlIGluIGNvcnJlY3RcbiAgICAvLyBvcmRlclxuICAgIHN1YnMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5pZCAtIGIuaWQ7IH0pO1xuICB9XG4gIGZvciAodmFyIGkgPSAwLCBsID0gc3Vicy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBzdWJzW2ldLnVwZGF0ZSgpO1xuICB9XG59O1xuXG4vLyBUaGUgY3VycmVudCB0YXJnZXQgd2F0Y2hlciBiZWluZyBldmFsdWF0ZWQuXG4vLyBUaGlzIGlzIGdsb2JhbGx5IHVuaXF1ZSBiZWNhdXNlIG9ubHkgb25lIHdhdGNoZXJcbi8vIGNhbiBiZSBldmFsdWF0ZWQgYXQgYSB0aW1lLlxuLy8gZml4ZWQgYnkgeHh4eHh4IChudnVlIHNoYXJlZCB2dWV4KVxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbkRlcC5TaGFyZWRPYmplY3QgPSB7fTtcbkRlcC5TaGFyZWRPYmplY3QudGFyZ2V0ID0gbnVsbDtcbkRlcC5TaGFyZWRPYmplY3QudGFyZ2V0U3RhY2sgPSBbXTtcblxuZnVuY3Rpb24gcHVzaFRhcmdldCAodGFyZ2V0KSB7XG4gIERlcC5TaGFyZWRPYmplY3QudGFyZ2V0U3RhY2sucHVzaCh0YXJnZXQpO1xuICBEZXAuU2hhcmVkT2JqZWN0LnRhcmdldCA9IHRhcmdldDtcbiAgRGVwLnRhcmdldCA9IHRhcmdldDtcbn1cblxuZnVuY3Rpb24gcG9wVGFyZ2V0ICgpIHtcbiAgRGVwLlNoYXJlZE9iamVjdC50YXJnZXRTdGFjay5wb3AoKTtcbiAgRGVwLlNoYXJlZE9iamVjdC50YXJnZXQgPSBEZXAuU2hhcmVkT2JqZWN0LnRhcmdldFN0YWNrW0RlcC5TaGFyZWRPYmplY3QudGFyZ2V0U3RhY2subGVuZ3RoIC0gMV07XG4gIERlcC50YXJnZXQgPSBEZXAuU2hhcmVkT2JqZWN0LnRhcmdldDtcbn1cblxuLyogICovXG5cbnZhciBWTm9kZSA9IGZ1bmN0aW9uIFZOb2RlIChcbiAgdGFnLFxuICBkYXRhLFxuICBjaGlsZHJlbixcbiAgdGV4dCxcbiAgZWxtLFxuICBjb250ZXh0LFxuICBjb21wb25lbnRPcHRpb25zLFxuICBhc3luY0ZhY3Rvcnlcbikge1xuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5kYXRhID0gZGF0YTtcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB0aGlzLnRleHQgPSB0ZXh0O1xuICB0aGlzLmVsbSA9IGVsbTtcbiAgdGhpcy5ucyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgdGhpcy5mbkNvbnRleHQgPSB1bmRlZmluZWQ7XG4gIHRoaXMuZm5PcHRpb25zID0gdW5kZWZpbmVkO1xuICB0aGlzLmZuU2NvcGVJZCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5rZXkgPSBkYXRhICYmIGRhdGEua2V5O1xuICB0aGlzLmNvbXBvbmVudE9wdGlvbnMgPSBjb21wb25lbnRPcHRpb25zO1xuICB0aGlzLmNvbXBvbmVudEluc3RhbmNlID0gdW5kZWZpbmVkO1xuICB0aGlzLnBhcmVudCA9IHVuZGVmaW5lZDtcbiAgdGhpcy5yYXcgPSBmYWxzZTtcbiAgdGhpcy5pc1N0YXRpYyA9IGZhbHNlO1xuICB0aGlzLmlzUm9vdEluc2VydCA9IHRydWU7XG4gIHRoaXMuaXNDb21tZW50ID0gZmFsc2U7XG4gIHRoaXMuaXNDbG9uZWQgPSBmYWxzZTtcbiAgdGhpcy5pc09uY2UgPSBmYWxzZTtcbiAgdGhpcy5hc3luY0ZhY3RvcnkgPSBhc3luY0ZhY3Rvcnk7XG4gIHRoaXMuYXN5bmNNZXRhID0gdW5kZWZpbmVkO1xuICB0aGlzLmlzQXN5bmNQbGFjZWhvbGRlciA9IGZhbHNlO1xufTtcblxudmFyIHByb3RvdHlwZUFjY2Vzc29ycyA9IHsgY2hpbGQ6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxuLy8gREVQUkVDQVRFRDogYWxpYXMgZm9yIGNvbXBvbmVudEluc3RhbmNlIGZvciBiYWNrd2FyZHMgY29tcGF0LlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnByb3RvdHlwZUFjY2Vzc29ycy5jaGlsZC5nZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0aGlzLmNvbXBvbmVudEluc3RhbmNlXG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyggVk5vZGUucHJvdG90eXBlLCBwcm90b3R5cGVBY2Nlc3NvcnMgKTtcblxudmFyIGNyZWF0ZUVtcHR5Vk5vZGUgPSBmdW5jdGlvbiAodGV4dCkge1xuICBpZiAoIHRleHQgPT09IHZvaWQgMCApIHRleHQgPSAnJztcblxuICB2YXIgbm9kZSA9IG5ldyBWTm9kZSgpO1xuICBub2RlLnRleHQgPSB0ZXh0O1xuICBub2RlLmlzQ29tbWVudCA9IHRydWU7XG4gIHJldHVybiBub2RlXG59O1xuXG5mdW5jdGlvbiBjcmVhdGVUZXh0Vk5vZGUgKHZhbCkge1xuICByZXR1cm4gbmV3IFZOb2RlKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIFN0cmluZyh2YWwpKVxufVxuXG4vLyBvcHRpbWl6ZWQgc2hhbGxvdyBjbG9uZVxuLy8gdXNlZCBmb3Igc3RhdGljIG5vZGVzIGFuZCBzbG90IG5vZGVzIGJlY2F1c2UgdGhleSBtYXkgYmUgcmV1c2VkIGFjcm9zc1xuLy8gbXVsdGlwbGUgcmVuZGVycywgY2xvbmluZyB0aGVtIGF2b2lkcyBlcnJvcnMgd2hlbiBET00gbWFuaXB1bGF0aW9ucyByZWx5XG4vLyBvbiB0aGVpciBlbG0gcmVmZXJlbmNlLlxuZnVuY3Rpb24gY2xvbmVWTm9kZSAodm5vZGUpIHtcbiAgdmFyIGNsb25lZCA9IG5ldyBWTm9kZShcbiAgICB2bm9kZS50YWcsXG4gICAgdm5vZGUuZGF0YSxcbiAgICAvLyAjNzk3NVxuICAgIC8vIGNsb25lIGNoaWxkcmVuIGFycmF5IHRvIGF2b2lkIG11dGF0aW5nIG9yaWdpbmFsIGluIGNhc2Ugb2YgY2xvbmluZ1xuICAgIC8vIGEgY2hpbGQuXG4gICAgdm5vZGUuY2hpbGRyZW4gJiYgdm5vZGUuY2hpbGRyZW4uc2xpY2UoKSxcbiAgICB2bm9kZS50ZXh0LFxuICAgIHZub2RlLmVsbSxcbiAgICB2bm9kZS5jb250ZXh0LFxuICAgIHZub2RlLmNvbXBvbmVudE9wdGlvbnMsXG4gICAgdm5vZGUuYXN5bmNGYWN0b3J5XG4gICk7XG4gIGNsb25lZC5ucyA9IHZub2RlLm5zO1xuICBjbG9uZWQuaXNTdGF0aWMgPSB2bm9kZS5pc1N0YXRpYztcbiAgY2xvbmVkLmtleSA9IHZub2RlLmtleTtcbiAgY2xvbmVkLmlzQ29tbWVudCA9IHZub2RlLmlzQ29tbWVudDtcbiAgY2xvbmVkLmZuQ29udGV4dCA9IHZub2RlLmZuQ29udGV4dDtcbiAgY2xvbmVkLmZuT3B0aW9ucyA9IHZub2RlLmZuT3B0aW9ucztcbiAgY2xvbmVkLmZuU2NvcGVJZCA9IHZub2RlLmZuU2NvcGVJZDtcbiAgY2xvbmVkLmFzeW5jTWV0YSA9IHZub2RlLmFzeW5jTWV0YTtcbiAgY2xvbmVkLmlzQ2xvbmVkID0gdHJ1ZTtcbiAgcmV0dXJuIGNsb25lZFxufVxuXG4vKlxuICogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoXG4gKiBkeW5hbWljYWxseSBhY2Nlc3NpbmcgbWV0aG9kcyBvbiBBcnJheSBwcm90b3R5cGVcbiAqL1xuXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbnZhciBhcnJheU1ldGhvZHMgPSBPYmplY3QuY3JlYXRlKGFycmF5UHJvdG8pO1xuXG52YXIgbWV0aG9kc1RvUGF0Y2ggPSBbXG4gICdwdXNoJyxcbiAgJ3BvcCcsXG4gICdzaGlmdCcsXG4gICd1bnNoaWZ0JyxcbiAgJ3NwbGljZScsXG4gICdzb3J0JyxcbiAgJ3JldmVyc2UnXG5dO1xuXG4vKipcbiAqIEludGVyY2VwdCBtdXRhdGluZyBtZXRob2RzIGFuZCBlbWl0IGV2ZW50c1xuICovXG5tZXRob2RzVG9QYXRjaC5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgLy8gY2FjaGUgb3JpZ2luYWwgbWV0aG9kXG4gIHZhciBvcmlnaW5hbCA9IGFycmF5UHJvdG9bbWV0aG9kXTtcbiAgZGVmKGFycmF5TWV0aG9kcywgbWV0aG9kLCBmdW5jdGlvbiBtdXRhdG9yICgpIHtcbiAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICB2YXIgcmVzdWx0ID0gb3JpZ2luYWwuYXBwbHkodGhpcywgYXJncyk7XG4gICAgdmFyIG9iID0gdGhpcy5fX29iX187XG4gICAgdmFyIGluc2VydGVkO1xuICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICBjYXNlICdwdXNoJzpcbiAgICAgIGNhc2UgJ3Vuc2hpZnQnOlxuICAgICAgICBpbnNlcnRlZCA9IGFyZ3M7XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzcGxpY2UnOlxuICAgICAgICBpbnNlcnRlZCA9IGFyZ3Muc2xpY2UoMik7XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICAgIGlmIChpbnNlcnRlZCkgeyBvYi5vYnNlcnZlQXJyYXkoaW5zZXJ0ZWQpOyB9XG4gICAgLy8gbm90aWZ5IGNoYW5nZVxuICAgIG9iLmRlcC5ub3RpZnkoKTtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH0pO1xufSk7XG5cbi8qICAqL1xuXG52YXIgYXJyYXlLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYXJyYXlNZXRob2RzKTtcblxuLyoqXG4gKiBJbiBzb21lIGNhc2VzIHdlIG1heSB3YW50IHRvIGRpc2FibGUgb2JzZXJ2YXRpb24gaW5zaWRlIGEgY29tcG9uZW50J3NcbiAqIHVwZGF0ZSBjb21wdXRhdGlvbi5cbiAqL1xudmFyIHNob3VsZE9ic2VydmUgPSB0cnVlO1xuXG5mdW5jdGlvbiB0b2dnbGVPYnNlcnZpbmcgKHZhbHVlKSB7XG4gIHNob3VsZE9ic2VydmUgPSB2YWx1ZTtcbn1cblxuLyoqXG4gKiBPYnNlcnZlciBjbGFzcyB0aGF0IGlzIGF0dGFjaGVkIHRvIGVhY2ggb2JzZXJ2ZWRcbiAqIG9iamVjdC4gT25jZSBhdHRhY2hlZCwgdGhlIG9ic2VydmVyIGNvbnZlcnRzIHRoZSB0YXJnZXRcbiAqIG9iamVjdCdzIHByb3BlcnR5IGtleXMgaW50byBnZXR0ZXIvc2V0dGVycyB0aGF0XG4gKiBjb2xsZWN0IGRlcGVuZGVuY2llcyBhbmQgZGlzcGF0Y2ggdXBkYXRlcy5cbiAqL1xudmFyIE9ic2VydmVyID0gZnVuY3Rpb24gT2JzZXJ2ZXIgKHZhbHVlKSB7XG4gIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgdGhpcy5kZXAgPSBuZXcgRGVwKCk7XG4gIHRoaXMudm1Db3VudCA9IDA7XG4gIGRlZih2YWx1ZSwgJ19fb2JfXycsIHRoaXMpO1xuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBpZiAoaGFzUHJvdG8pIHtcbiAgICAgIHsvLyBmaXhlZCBieSB4eHh4eHgg5b6u5L+h5bCP56iL5bqP5L2/55SoIHBsdWdpbnMg5LmL5ZCO77yM5pWw57uE5pa55rOV6KKr55u05o6l5oyC6L295Yiw5LqG5pWw57uE5a+56LGh5LiK77yM6ZyA6KaB5omn6KGMIGNvcHlBdWdtZW50IOmAu+i+kVxuICAgICAgICBpZih2YWx1ZS5wdXNoICE9PSB2YWx1ZS5fX3Byb3RvX18ucHVzaCl7XG4gICAgICAgICAgY29weUF1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcywgYXJyYXlLZXlzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm90b0F1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29weUF1Z21lbnQodmFsdWUsIGFycmF5TWV0aG9kcywgYXJyYXlLZXlzKTtcbiAgICB9XG4gICAgdGhpcy5vYnNlcnZlQXJyYXkodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMud2Fsayh2YWx1ZSk7XG4gIH1cbn07XG5cbi8qKlxuICogV2FsayB0aHJvdWdoIGFsbCBwcm9wZXJ0aWVzIGFuZCBjb252ZXJ0IHRoZW0gaW50b1xuICogZ2V0dGVyL3NldHRlcnMuIFRoaXMgbWV0aG9kIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuXG4gKiB2YWx1ZSB0eXBlIGlzIE9iamVjdC5cbiAqL1xuT2JzZXJ2ZXIucHJvdG90eXBlLndhbGsgPSBmdW5jdGlvbiB3YWxrIChvYmopIHtcbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMShvYmosIGtleXNbaV0pO1xuICB9XG59O1xuXG4vKipcbiAqIE9ic2VydmUgYSBsaXN0IG9mIEFycmF5IGl0ZW1zLlxuICovXG5PYnNlcnZlci5wcm90b3R5cGUub2JzZXJ2ZUFycmF5ID0gZnVuY3Rpb24gb2JzZXJ2ZUFycmF5IChpdGVtcykge1xuICBmb3IgKHZhciBpID0gMCwgbCA9IGl0ZW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIG9ic2VydmUoaXRlbXNbaV0pO1xuICB9XG59O1xuXG4vLyBoZWxwZXJzXG5cbi8qKlxuICogQXVnbWVudCBhIHRhcmdldCBPYmplY3Qgb3IgQXJyYXkgYnkgaW50ZXJjZXB0aW5nXG4gKiB0aGUgcHJvdG90eXBlIGNoYWluIHVzaW5nIF9fcHJvdG9fX1xuICovXG5mdW5jdGlvbiBwcm90b0F1Z21lbnQgKHRhcmdldCwgc3JjKSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG4gIHRhcmdldC5fX3Byb3RvX18gPSBzcmM7XG4gIC8qIGVzbGludC1lbmFibGUgbm8tcHJvdG8gKi9cbn1cblxuLyoqXG4gKiBBdWdtZW50IGEgdGFyZ2V0IE9iamVjdCBvciBBcnJheSBieSBkZWZpbmluZ1xuICogaGlkZGVuIHByb3BlcnRpZXMuXG4gKi9cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiBjb3B5QXVnbWVudCAodGFyZ2V0LCBzcmMsIGtleXMpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgIGRlZih0YXJnZXQsIGtleSwgc3JjW2tleV0pO1xuICB9XG59XG5cbi8qKlxuICogQXR0ZW1wdCB0byBjcmVhdGUgYW4gb2JzZXJ2ZXIgaW5zdGFuY2UgZm9yIGEgdmFsdWUsXG4gKiByZXR1cm5zIHRoZSBuZXcgb2JzZXJ2ZXIgaWYgc3VjY2Vzc2Z1bGx5IG9ic2VydmVkLFxuICogb3IgdGhlIGV4aXN0aW5nIG9ic2VydmVyIGlmIHRoZSB2YWx1ZSBhbHJlYWR5IGhhcyBvbmUuXG4gKi9cbmZ1bmN0aW9uIG9ic2VydmUgKHZhbHVlLCBhc1Jvb3REYXRhKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVk5vZGUpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgb2I7XG4gIGlmIChoYXNPd24odmFsdWUsICdfX29iX18nKSAmJiB2YWx1ZS5fX29iX18gaW5zdGFuY2VvZiBPYnNlcnZlcikge1xuICAgIG9iID0gdmFsdWUuX19vYl9fO1xuICB9IGVsc2UgaWYgKFxuICAgIHNob3VsZE9ic2VydmUgJiZcbiAgICAhaXNTZXJ2ZXJSZW5kZXJpbmcoKSAmJlxuICAgIChBcnJheS5pc0FycmF5KHZhbHVlKSB8fCBpc1BsYWluT2JqZWN0KHZhbHVlKSkgJiZcbiAgICBPYmplY3QuaXNFeHRlbnNpYmxlKHZhbHVlKSAmJlxuICAgICF2YWx1ZS5faXNWdWVcbiAgKSB7XG4gICAgb2IgPSBuZXcgT2JzZXJ2ZXIodmFsdWUpO1xuICB9XG4gIGlmIChhc1Jvb3REYXRhICYmIG9iKSB7XG4gICAgb2Iudm1Db3VudCsrO1xuICB9XG4gIHJldHVybiBvYlxufVxuXG4vKipcbiAqIERlZmluZSBhIHJlYWN0aXZlIHByb3BlcnR5IG9uIGFuIE9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZGVmaW5lUmVhY3RpdmUkJDEgKFxuICBvYmosXG4gIGtleSxcbiAgdmFsLFxuICBjdXN0b21TZXR0ZXIsXG4gIHNoYWxsb3dcbikge1xuICB2YXIgZGVwID0gbmV3IERlcCgpO1xuXG4gIHZhciBwcm9wZXJ0eSA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpO1xuICBpZiAocHJvcGVydHkgJiYgcHJvcGVydHkuY29uZmlndXJhYmxlID09PSBmYWxzZSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gY2F0ZXIgZm9yIHByZS1kZWZpbmVkIGdldHRlci9zZXR0ZXJzXG4gIHZhciBnZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5nZXQ7XG4gIHZhciBzZXR0ZXIgPSBwcm9wZXJ0eSAmJiBwcm9wZXJ0eS5zZXQ7XG4gIGlmICgoIWdldHRlciB8fCBzZXR0ZXIpICYmIGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICB2YWwgPSBvYmpba2V5XTtcbiAgfVxuXG4gIHZhciBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZSh2YWwpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIHJlYWN0aXZlR2V0dGVyICgpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGdldHRlciA/IGdldHRlci5jYWxsKG9iaikgOiB2YWw7XG4gICAgICBpZiAoRGVwLlNoYXJlZE9iamVjdC50YXJnZXQpIHsgLy8gZml4ZWQgYnkgeHh4eHh4XG4gICAgICAgIGRlcC5kZXBlbmQoKTtcbiAgICAgICAgaWYgKGNoaWxkT2IpIHtcbiAgICAgICAgICBjaGlsZE9iLmRlcC5kZXBlbmQoKTtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRlcGVuZEFycmF5KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiByZWFjdGl2ZVNldHRlciAobmV3VmFsKSB7XG4gICAgICB2YXIgdmFsdWUgPSBnZXR0ZXIgPyBnZXR0ZXIuY2FsbChvYmopIDogdmFsO1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICBpZiAobmV3VmFsID09PSB2YWx1ZSB8fCAobmV3VmFsICE9PSBuZXdWYWwgJiYgdmFsdWUgIT09IHZhbHVlKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBjdXN0b21TZXR0ZXIpIHtcbiAgICAgICAgY3VzdG9tU2V0dGVyKCk7XG4gICAgICB9XG4gICAgICAvLyAjNzk4MTogZm9yIGFjY2Vzc29yIHByb3BlcnRpZXMgd2l0aG91dCBzZXR0ZXJcbiAgICAgIGlmIChnZXR0ZXIgJiYgIXNldHRlcikgeyByZXR1cm4gfVxuICAgICAgaWYgKHNldHRlcikge1xuICAgICAgICBzZXR0ZXIuY2FsbChvYmosIG5ld1ZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXdWYWw7XG4gICAgICB9XG4gICAgICBjaGlsZE9iID0gIXNoYWxsb3cgJiYgb2JzZXJ2ZShuZXdWYWwpO1xuICAgICAgZGVwLm5vdGlmeSgpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgb24gYW4gb2JqZWN0LiBBZGRzIHRoZSBuZXcgcHJvcGVydHkgYW5kXG4gKiB0cmlnZ2VycyBjaGFuZ2Ugbm90aWZpY2F0aW9uIGlmIHRoZSBwcm9wZXJ0eSBkb2Vzbid0XG4gKiBhbHJlYWR5IGV4aXN0LlxuICovXG5mdW5jdGlvbiBzZXQgKHRhcmdldCwga2V5LCB2YWwpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpXG4gICkge1xuICAgIHdhcm4oKFwiQ2Fubm90IHNldCByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIgKyAoKHRhcmdldCkpKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0Lmxlbmd0aCA9IE1hdGgubWF4KHRhcmdldC5sZW5ndGgsIGtleSk7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEsIHZhbCk7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGlmIChrZXkgaW4gdGFyZ2V0ICYmICEoa2V5IGluIE9iamVjdC5wcm90b3R5cGUpKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ0F2b2lkIGFkZGluZyByZWFjdGl2ZSBwcm9wZXJ0aWVzIHRvIGEgVnVlIGluc3RhbmNlIG9yIGl0cyByb290ICRkYXRhICcgK1xuICAgICAgJ2F0IHJ1bnRpbWUgLSBkZWNsYXJlIGl0IHVwZnJvbnQgaW4gdGhlIGRhdGEgb3B0aW9uLidcbiAgICApO1xuICAgIHJldHVybiB2YWxcbiAgfVxuICBpZiAoIW9iKSB7XG4gICAgdGFyZ2V0W2tleV0gPSB2YWw7XG4gICAgcmV0dXJuIHZhbFxuICB9XG4gIGRlZmluZVJlYWN0aXZlJCQxKG9iLnZhbHVlLCBrZXksIHZhbCk7XG4gIG9iLmRlcC5ub3RpZnkoKTtcbiAgcmV0dXJuIHZhbFxufVxuXG4vKipcbiAqIERlbGV0ZSBhIHByb3BlcnR5IGFuZCB0cmlnZ2VyIGNoYW5nZSBpZiBuZWNlc3NhcnkuXG4gKi9cbmZ1bmN0aW9uIGRlbCAodGFyZ2V0LCBrZXkpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAoaXNVbmRlZih0YXJnZXQpIHx8IGlzUHJpbWl0aXZlKHRhcmdldCkpXG4gICkge1xuICAgIHdhcm4oKFwiQ2Fubm90IGRlbGV0ZSByZWFjdGl2ZSBwcm9wZXJ0eSBvbiB1bmRlZmluZWQsIG51bGwsIG9yIHByaW1pdGl2ZSB2YWx1ZTogXCIgKyAoKHRhcmdldCkpKSk7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJiBpc1ZhbGlkQXJyYXlJbmRleChrZXkpKSB7XG4gICAgdGFyZ2V0LnNwbGljZShrZXksIDEpO1xuICAgIHJldHVyblxuICB9XG4gIHZhciBvYiA9ICh0YXJnZXQpLl9fb2JfXztcbiAgaWYgKHRhcmdldC5faXNWdWUgfHwgKG9iICYmIG9iLnZtQ291bnQpKSB7XG4gICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgJ0F2b2lkIGRlbGV0aW5nIHByb3BlcnRpZXMgb24gYSBWdWUgaW5zdGFuY2Ugb3IgaXRzIHJvb3QgJGRhdGEgJyArXG4gICAgICAnLSBqdXN0IHNldCBpdCB0byBudWxsLidcbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIGlmICghaGFzT3duKHRhcmdldCwga2V5KSkge1xuICAgIHJldHVyblxuICB9XG4gIGRlbGV0ZSB0YXJnZXRba2V5XTtcbiAgaWYgKCFvYikge1xuICAgIHJldHVyblxuICB9XG4gIG9iLmRlcC5ub3RpZnkoKTtcbn1cblxuLyoqXG4gKiBDb2xsZWN0IGRlcGVuZGVuY2llcyBvbiBhcnJheSBlbGVtZW50cyB3aGVuIHRoZSBhcnJheSBpcyB0b3VjaGVkLCBzaW5jZVxuICogd2UgY2Fubm90IGludGVyY2VwdCBhcnJheSBlbGVtZW50IGFjY2VzcyBsaWtlIHByb3BlcnR5IGdldHRlcnMuXG4gKi9cbmZ1bmN0aW9uIGRlcGVuZEFycmF5ICh2YWx1ZSkge1xuICBmb3IgKHZhciBlID0gKHZvaWQgMCksIGkgPSAwLCBsID0gdmFsdWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZSA9IHZhbHVlW2ldO1xuICAgIGUgJiYgZS5fX29iX18gJiYgZS5fX29iX18uZGVwLmRlcGVuZCgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGUpKSB7XG4gICAgICBkZXBlbmRBcnJheShlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogT3B0aW9uIG92ZXJ3cml0aW5nIHN0cmF0ZWdpZXMgYXJlIGZ1bmN0aW9ucyB0aGF0IGhhbmRsZVxuICogaG93IHRvIG1lcmdlIGEgcGFyZW50IG9wdGlvbiB2YWx1ZSBhbmQgYSBjaGlsZCBvcHRpb25cbiAqIHZhbHVlIGludG8gdGhlIGZpbmFsIHZhbHVlLlxuICovXG52YXIgc3RyYXRzID0gY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcblxuLyoqXG4gKiBPcHRpb25zIHdpdGggcmVzdHJpY3Rpb25zXG4gKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHN0cmF0cy5lbCA9IHN0cmF0cy5wcm9wc0RhdGEgPSBmdW5jdGlvbiAocGFyZW50LCBjaGlsZCwgdm0sIGtleSkge1xuICAgIGlmICghdm0pIHtcbiAgICAgIHdhcm4oXG4gICAgICAgIFwib3B0aW9uIFxcXCJcIiArIGtleSArIFwiXFxcIiBjYW4gb25seSBiZSB1c2VkIGR1cmluZyBpbnN0YW5jZSBcIiArXG4gICAgICAgICdjcmVhdGlvbiB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkLidcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBkZWZhdWx0U3RyYXQocGFyZW50LCBjaGlsZClcbiAgfTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgdGhhdCByZWN1cnNpdmVseSBtZXJnZXMgdHdvIGRhdGEgb2JqZWN0cyB0b2dldGhlci5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhICh0bywgZnJvbSkge1xuICBpZiAoIWZyb20pIHsgcmV0dXJuIHRvIH1cbiAgdmFyIGtleSwgdG9WYWwsIGZyb21WYWw7XG5cbiAgdmFyIGtleXMgPSBoYXNTeW1ib2xcbiAgICA/IFJlZmxlY3Qub3duS2V5cyhmcm9tKVxuICAgIDogT2JqZWN0LmtleXMoZnJvbSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICAvLyBpbiBjYXNlIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBvYnNlcnZlZC4uLlxuICAgIGlmIChrZXkgPT09ICdfX29iX18nKSB7IGNvbnRpbnVlIH1cbiAgICB0b1ZhbCA9IHRvW2tleV07XG4gICAgZnJvbVZhbCA9IGZyb21ba2V5XTtcbiAgICBpZiAoIWhhc093bih0bywga2V5KSkge1xuICAgICAgc2V0KHRvLCBrZXksIGZyb21WYWwpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0b1ZhbCAhPT0gZnJvbVZhbCAmJlxuICAgICAgaXNQbGFpbk9iamVjdCh0b1ZhbCkgJiZcbiAgICAgIGlzUGxhaW5PYmplY3QoZnJvbVZhbClcbiAgICApIHtcbiAgICAgIG1lcmdlRGF0YSh0b1ZhbCwgZnJvbVZhbCk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG4vKipcbiAqIERhdGFcbiAqL1xuZnVuY3Rpb24gbWVyZ2VEYXRhT3JGbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtXG4pIHtcbiAgaWYgKCF2bSkge1xuICAgIC8vIGluIGEgVnVlLmV4dGVuZCBtZXJnZSwgYm90aCBzaG91bGQgYmUgZnVuY3Rpb25zXG4gICAgaWYgKCFjaGlsZFZhbCkge1xuICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgIH1cbiAgICBpZiAoIXBhcmVudFZhbCkge1xuICAgICAgcmV0dXJuIGNoaWxkVmFsXG4gICAgfVxuICAgIC8vIHdoZW4gcGFyZW50VmFsICYgY2hpbGRWYWwgYXJlIGJvdGggcHJlc2VudCxcbiAgICAvLyB3ZSBuZWVkIHRvIHJldHVybiBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGVcbiAgICAvLyBtZXJnZWQgcmVzdWx0IG9mIGJvdGggZnVuY3Rpb25zLi4uIG5vIG5lZWQgdG9cbiAgICAvLyBjaGVjayBpZiBwYXJlbnRWYWwgaXMgYSBmdW5jdGlvbiBoZXJlIGJlY2F1c2VcbiAgICAvLyBpdCBoYXMgdG8gYmUgYSBmdW5jdGlvbiB0byBwYXNzIHByZXZpb3VzIG1lcmdlcy5cbiAgICByZXR1cm4gZnVuY3Rpb24gbWVyZ2VkRGF0YUZuICgpIHtcbiAgICAgIHJldHVybiBtZXJnZURhdGEoXG4gICAgICAgIHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkVmFsLmNhbGwodGhpcywgdGhpcykgOiBjaGlsZFZhbCxcbiAgICAgICAgdHlwZW9mIHBhcmVudFZhbCA9PT0gJ2Z1bmN0aW9uJyA/IHBhcmVudFZhbC5jYWxsKHRoaXMsIHRoaXMpIDogcGFyZW50VmFsXG4gICAgICApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmdW5jdGlvbiBtZXJnZWRJbnN0YW5jZURhdGFGbiAoKSB7XG4gICAgICAvLyBpbnN0YW5jZSBtZXJnZVxuICAgICAgdmFyIGluc3RhbmNlRGF0YSA9IHR5cGVvZiBjaGlsZFZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGNoaWxkVmFsLmNhbGwodm0sIHZtKVxuICAgICAgICA6IGNoaWxkVmFsO1xuICAgICAgdmFyIGRlZmF1bHREYXRhID0gdHlwZW9mIHBhcmVudFZhbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IHBhcmVudFZhbC5jYWxsKHZtLCB2bSlcbiAgICAgICAgOiBwYXJlbnRWYWw7XG4gICAgICBpZiAoaW5zdGFuY2VEYXRhKSB7XG4gICAgICAgIHJldHVybiBtZXJnZURhdGEoaW5zdGFuY2VEYXRhLCBkZWZhdWx0RGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBkZWZhdWx0RGF0YVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5zdHJhdHMuZGF0YSA9IGZ1bmN0aW9uIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm1cbikge1xuICBpZiAoIXZtKSB7XG4gICAgaWYgKGNoaWxkVmFsICYmIHR5cGVvZiBjaGlsZFZhbCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAnVGhlIFwiZGF0YVwiIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiAnICtcbiAgICAgICAgJ3RoYXQgcmV0dXJucyBhIHBlci1pbnN0YW5jZSB2YWx1ZSBpbiBjb21wb25lbnQgJyArXG4gICAgICAgICdkZWZpbml0aW9ucy4nLFxuICAgICAgICB2bVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHBhcmVudFZhbFxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VEYXRhT3JGbihwYXJlbnRWYWwsIGNoaWxkVmFsKVxuICB9XG5cbiAgcmV0dXJuIG1lcmdlRGF0YU9yRm4ocGFyZW50VmFsLCBjaGlsZFZhbCwgdm0pXG59O1xuXG4vKipcbiAqIEhvb2tzIGFuZCBwcm9wcyBhcmUgbWVyZ2VkIGFzIGFycmF5cy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VIb29rIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbFxuKSB7XG4gIHZhciByZXMgPSBjaGlsZFZhbFxuICAgID8gcGFyZW50VmFsXG4gICAgICA/IHBhcmVudFZhbC5jb25jYXQoY2hpbGRWYWwpXG4gICAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRWYWwpXG4gICAgICAgID8gY2hpbGRWYWxcbiAgICAgICAgOiBbY2hpbGRWYWxdXG4gICAgOiBwYXJlbnRWYWw7XG4gIHJldHVybiByZXNcbiAgICA/IGRlZHVwZUhvb2tzKHJlcylcbiAgICA6IHJlc1xufVxuXG5mdW5jdGlvbiBkZWR1cGVIb29rcyAoaG9va3MpIHtcbiAgdmFyIHJlcyA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGhvb2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHJlcy5pbmRleE9mKGhvb2tzW2ldKSA9PT0gLTEpIHtcbiAgICAgIHJlcy5wdXNoKGhvb2tzW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5MSUZFQ1lDTEVfSE9PS1MuZm9yRWFjaChmdW5jdGlvbiAoaG9vaykge1xuICBzdHJhdHNbaG9va10gPSBtZXJnZUhvb2s7XG59KTtcblxuLyoqXG4gKiBBc3NldHNcbiAqXG4gKiBXaGVuIGEgdm0gaXMgcHJlc2VudCAoaW5zdGFuY2UgY3JlYXRpb24pLCB3ZSBuZWVkIHRvIGRvXG4gKiBhIHRocmVlLXdheSBtZXJnZSBiZXR3ZWVuIGNvbnN0cnVjdG9yIG9wdGlvbnMsIGluc3RhbmNlXG4gKiBvcHRpb25zIGFuZCBwYXJlbnQgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gbWVyZ2VBc3NldHMgKFxuICBwYXJlbnRWYWwsXG4gIGNoaWxkVmFsLFxuICB2bSxcbiAga2V5XG4pIHtcbiAgdmFyIHJlcyA9IE9iamVjdC5jcmVhdGUocGFyZW50VmFsIHx8IG51bGwpO1xuICBpZiAoY2hpbGRWYWwpIHtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICAgIHJldHVybiBleHRlbmQocmVzLCBjaGlsZFZhbClcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbn1cblxuQVNTRVRfVFlQRVMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICBzdHJhdHNbdHlwZSArICdzJ10gPSBtZXJnZUFzc2V0cztcbn0pO1xuXG4vKipcbiAqIFdhdGNoZXJzLlxuICpcbiAqIFdhdGNoZXJzIGhhc2hlcyBzaG91bGQgbm90IG92ZXJ3cml0ZSBvbmVcbiAqIGFub3RoZXIsIHNvIHdlIG1lcmdlIHRoZW0gYXMgYXJyYXlzLlxuICovXG5zdHJhdHMud2F0Y2ggPSBmdW5jdGlvbiAoXG4gIHBhcmVudFZhbCxcbiAgY2hpbGRWYWwsXG4gIHZtLFxuICBrZXlcbikge1xuICAvLyB3b3JrIGFyb3VuZCBGaXJlZm94J3MgT2JqZWN0LnByb3RvdHlwZS53YXRjaC4uLlxuICBpZiAocGFyZW50VmFsID09PSBuYXRpdmVXYXRjaCkgeyBwYXJlbnRWYWwgPSB1bmRlZmluZWQ7IH1cbiAgaWYgKGNoaWxkVmFsID09PSBuYXRpdmVXYXRjaCkgeyBjaGlsZFZhbCA9IHVuZGVmaW5lZDsgfVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKCFjaGlsZFZhbCkgeyByZXR1cm4gT2JqZWN0LmNyZWF0ZShwYXJlbnRWYWwgfHwgbnVsbCkgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGFzc2VydE9iamVjdFR5cGUoa2V5LCBjaGlsZFZhbCwgdm0pO1xuICB9XG4gIGlmICghcGFyZW50VmFsKSB7IHJldHVybiBjaGlsZFZhbCB9XG4gIHZhciByZXQgPSB7fTtcbiAgZXh0ZW5kKHJldCwgcGFyZW50VmFsKTtcbiAgZm9yICh2YXIga2V5JDEgaW4gY2hpbGRWYWwpIHtcbiAgICB2YXIgcGFyZW50ID0gcmV0W2tleSQxXTtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZFZhbFtrZXkkMV07XG4gICAgaWYgKHBhcmVudCAmJiAhQXJyYXkuaXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBwYXJlbnQgPSBbcGFyZW50XTtcbiAgICB9XG4gICAgcmV0W2tleSQxXSA9IHBhcmVudFxuICAgICAgPyBwYXJlbnQuY29uY2F0KGNoaWxkKVxuICAgICAgOiBBcnJheS5pc0FycmF5KGNoaWxkKSA/IGNoaWxkIDogW2NoaWxkXTtcbiAgfVxuICByZXR1cm4gcmV0XG59O1xuXG4vKipcbiAqIE90aGVyIG9iamVjdCBoYXNoZXMuXG4gKi9cbnN0cmF0cy5wcm9wcyA9XG5zdHJhdHMubWV0aG9kcyA9XG5zdHJhdHMuaW5qZWN0ID1cbnN0cmF0cy5jb21wdXRlZCA9IGZ1bmN0aW9uIChcbiAgcGFyZW50VmFsLFxuICBjaGlsZFZhbCxcbiAgdm0sXG4gIGtleVxuKSB7XG4gIGlmIChjaGlsZFZhbCAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgYXNzZXJ0T2JqZWN0VHlwZShrZXksIGNoaWxkVmFsLCB2bSk7XG4gIH1cbiAgaWYgKCFwYXJlbnRWYWwpIHsgcmV0dXJuIGNoaWxkVmFsIH1cbiAgdmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGV4dGVuZChyZXQsIHBhcmVudFZhbCk7XG4gIGlmIChjaGlsZFZhbCkgeyBleHRlbmQocmV0LCBjaGlsZFZhbCk7IH1cbiAgcmV0dXJuIHJldFxufTtcbnN0cmF0cy5wcm92aWRlID0gbWVyZ2VEYXRhT3JGbjtcblxuLyoqXG4gKiBEZWZhdWx0IHN0cmF0ZWd5LlxuICovXG52YXIgZGVmYXVsdFN0cmF0ID0gZnVuY3Rpb24gKHBhcmVudFZhbCwgY2hpbGRWYWwpIHtcbiAgcmV0dXJuIGNoaWxkVmFsID09PSB1bmRlZmluZWRcbiAgICA/IHBhcmVudFZhbFxuICAgIDogY2hpbGRWYWxcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgY29tcG9uZW50IG5hbWVzXG4gKi9cbmZ1bmN0aW9uIGNoZWNrQ29tcG9uZW50cyAob3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gb3B0aW9ucy5jb21wb25lbnRzKSB7XG4gICAgdmFsaWRhdGVDb21wb25lbnROYW1lKGtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDb21wb25lbnROYW1lIChuYW1lKSB7XG4gIGlmICghbmV3IFJlZ0V4cCgoXCJeW2EtekEtWl1bXFxcXC1cXFxcLjAtOV9cIiArICh1bmljb2RlUmVnRXhwLnNvdXJjZSkgKyBcIl0qJFwiKSkudGVzdChuYW1lKSkge1xuICAgIHdhcm4oXG4gICAgICAnSW52YWxpZCBjb21wb25lbnQgbmFtZTogXCInICsgbmFtZSArICdcIi4gQ29tcG9uZW50IG5hbWVzICcgK1xuICAgICAgJ3Nob3VsZCBjb25mb3JtIHRvIHZhbGlkIGN1c3RvbSBlbGVtZW50IG5hbWUgaW4gaHRtbDUgc3BlY2lmaWNhdGlvbi4nXG4gICAgKTtcbiAgfVxuICBpZiAoaXNCdWlsdEluVGFnKG5hbWUpIHx8IGNvbmZpZy5pc1Jlc2VydmVkVGFnKG5hbWUpKSB7XG4gICAgd2FybihcbiAgICAgICdEbyBub3QgdXNlIGJ1aWx0LWluIG9yIHJlc2VydmVkIEhUTUwgZWxlbWVudHMgYXMgY29tcG9uZW50ICcgK1xuICAgICAgJ2lkOiAnICsgbmFtZVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbnN1cmUgYWxsIHByb3BzIG9wdGlvbiBzeW50YXggYXJlIG5vcm1hbGl6ZWQgaW50byB0aGVcbiAqIE9iamVjdC1iYXNlZCBmb3JtYXQuXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVByb3BzIChvcHRpb25zLCB2bSkge1xuICB2YXIgcHJvcHMgPSBvcHRpb25zLnByb3BzO1xuICBpZiAoIXByb3BzKSB7IHJldHVybiB9XG4gIHZhciByZXMgPSB7fTtcbiAgdmFyIGksIHZhbCwgbmFtZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcHMpKSB7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7XG4gICAgICB2YWwgPSBwcm9wc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICBuYW1lID0gY2FtZWxpemUodmFsKTtcbiAgICAgICAgcmVzW25hbWVdID0geyB0eXBlOiBudWxsIH07XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgd2FybigncHJvcHMgbXVzdCBiZSBzdHJpbmdzIHdoZW4gdXNpbmcgYXJyYXkgc3ludGF4LicpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHByb3BzKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFsID0gcHJvcHNba2V5XTtcbiAgICAgIG5hbWUgPSBjYW1lbGl6ZShrZXkpO1xuICAgICAgcmVzW25hbWVdID0gaXNQbGFpbk9iamVjdCh2YWwpXG4gICAgICAgID8gdmFsXG4gICAgICAgIDogeyB0eXBlOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwicHJvcHNcXFwiOiBleHBlY3RlZCBhbiBBcnJheSBvciBhbiBPYmplY3QsIFwiICtcbiAgICAgIFwiYnV0IGdvdCBcIiArICh0b1Jhd1R5cGUocHJvcHMpKSArIFwiLlwiLFxuICAgICAgdm1cbiAgICApO1xuICB9XG4gIG9wdGlvbnMucHJvcHMgPSByZXM7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGFsbCBpbmplY3Rpb25zIGludG8gT2JqZWN0LWJhc2VkIGZvcm1hdFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVJbmplY3QgKG9wdGlvbnMsIHZtKSB7XG4gIHZhciBpbmplY3QgPSBvcHRpb25zLmluamVjdDtcbiAgaWYgKCFpbmplY3QpIHsgcmV0dXJuIH1cbiAgdmFyIG5vcm1hbGl6ZWQgPSBvcHRpb25zLmluamVjdCA9IHt9O1xuICBpZiAoQXJyYXkuaXNBcnJheShpbmplY3QpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmplY3QubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5vcm1hbGl6ZWRbaW5qZWN0W2ldXSA9IHsgZnJvbTogaW5qZWN0W2ldIH07XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QoaW5qZWN0KSkge1xuICAgIGZvciAodmFyIGtleSBpbiBpbmplY3QpIHtcbiAgICAgIHZhciB2YWwgPSBpbmplY3Rba2V5XTtcbiAgICAgIG5vcm1hbGl6ZWRba2V5XSA9IGlzUGxhaW5PYmplY3QodmFsKVxuICAgICAgICA/IGV4dGVuZCh7IGZyb206IGtleSB9LCB2YWwpXG4gICAgICAgIDogeyBmcm9tOiB2YWwgfTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHdhcm4oXG4gICAgICBcIkludmFsaWQgdmFsdWUgZm9yIG9wdGlvbiBcXFwiaW5qZWN0XFxcIjogZXhwZWN0ZWQgYW4gQXJyYXkgb3IgYW4gT2JqZWN0LCBcIiArXG4gICAgICBcImJ1dCBnb3QgXCIgKyAodG9SYXdUeXBlKGluamVjdCkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemUgcmF3IGZ1bmN0aW9uIGRpcmVjdGl2ZXMgaW50byBvYmplY3QgZm9ybWF0LlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEaXJlY3RpdmVzIChvcHRpb25zKSB7XG4gIHZhciBkaXJzID0gb3B0aW9ucy5kaXJlY3RpdmVzO1xuICBpZiAoZGlycykge1xuICAgIGZvciAodmFyIGtleSBpbiBkaXJzKSB7XG4gICAgICB2YXIgZGVmJCQxID0gZGlyc1trZXldO1xuICAgICAgaWYgKHR5cGVvZiBkZWYkJDEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZGlyc1trZXldID0geyBiaW5kOiBkZWYkJDEsIHVwZGF0ZTogZGVmJCQxIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydE9iamVjdFR5cGUgKG5hbWUsIHZhbHVlLCB2bSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgd2FybihcbiAgICAgIFwiSW52YWxpZCB2YWx1ZSBmb3Igb3B0aW9uIFxcXCJcIiArIG5hbWUgKyBcIlxcXCI6IGV4cGVjdGVkIGFuIE9iamVjdCwgXCIgK1xuICAgICAgXCJidXQgZ290IFwiICsgKHRvUmF3VHlwZSh2YWx1ZSkpICsgXCIuXCIsXG4gICAgICB2bVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXJnZSB0d28gb3B0aW9uIG9iamVjdHMgaW50byBhIG5ldyBvbmUuXG4gKiBDb3JlIHV0aWxpdHkgdXNlZCBpbiBib3RoIGluc3RhbnRpYXRpb24gYW5kIGluaGVyaXRhbmNlLlxuICovXG5mdW5jdGlvbiBtZXJnZU9wdGlvbnMgKFxuICBwYXJlbnQsXG4gIGNoaWxkLFxuICB2bVxuKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY2hlY2tDb21wb25lbnRzKGNoaWxkKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgY2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjaGlsZCA9IGNoaWxkLm9wdGlvbnM7XG4gIH1cblxuICBub3JtYWxpemVQcm9wcyhjaGlsZCwgdm0pO1xuICBub3JtYWxpemVJbmplY3QoY2hpbGQsIHZtKTtcbiAgbm9ybWFsaXplRGlyZWN0aXZlcyhjaGlsZCk7XG5cbiAgLy8gQXBwbHkgZXh0ZW5kcyBhbmQgbWl4aW5zIG9uIHRoZSBjaGlsZCBvcHRpb25zLFxuICAvLyBidXQgb25seSBpZiBpdCBpcyBhIHJhdyBvcHRpb25zIG9iamVjdCB0aGF0IGlzbid0XG4gIC8vIHRoZSByZXN1bHQgb2YgYW5vdGhlciBtZXJnZU9wdGlvbnMgY2FsbC5cbiAgLy8gT25seSBtZXJnZWQgb3B0aW9ucyBoYXMgdGhlIF9iYXNlIHByb3BlcnR5LlxuICBpZiAoIWNoaWxkLl9iYXNlKSB7XG4gICAgaWYgKGNoaWxkLmV4dGVuZHMpIHtcbiAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLmV4dGVuZHMsIHZtKTtcbiAgICB9XG4gICAgaWYgKGNoaWxkLm1peGlucykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZC5taXhpbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHBhcmVudCA9IG1lcmdlT3B0aW9ucyhwYXJlbnQsIGNoaWxkLm1peGluc1tpXSwgdm0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBvcHRpb25zID0ge307XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIHBhcmVudCkge1xuICAgIG1lcmdlRmllbGQoa2V5KTtcbiAgfVxuICBmb3IgKGtleSBpbiBjaGlsZCkge1xuICAgIGlmICghaGFzT3duKHBhcmVudCwga2V5KSkge1xuICAgICAgbWVyZ2VGaWVsZChrZXkpO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiBtZXJnZUZpZWxkIChrZXkpIHtcbiAgICB2YXIgc3RyYXQgPSBzdHJhdHNba2V5XSB8fCBkZWZhdWx0U3RyYXQ7XG4gICAgb3B0aW9uc1trZXldID0gc3RyYXQocGFyZW50W2tleV0sIGNoaWxkW2tleV0sIHZtLCBrZXkpO1xuICB9XG4gIHJldHVybiBvcHRpb25zXG59XG5cbi8qKlxuICogUmVzb2x2ZSBhbiBhc3NldC5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBiZWNhdXNlIGNoaWxkIGluc3RhbmNlcyBuZWVkIGFjY2Vzc1xuICogdG8gYXNzZXRzIGRlZmluZWQgaW4gaXRzIGFuY2VzdG9yIGNoYWluLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXNzZXQgKFxuICBvcHRpb25zLFxuICB0eXBlLFxuICBpZCxcbiAgd2Fybk1pc3Npbmdcbikge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKHR5cGVvZiBpZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm5cbiAgfVxuICB2YXIgYXNzZXRzID0gb3B0aW9uc1t0eXBlXTtcbiAgLy8gY2hlY2sgbG9jYWwgcmVnaXN0cmF0aW9uIHZhcmlhdGlvbnMgZmlyc3RcbiAgaWYgKGhhc093bihhc3NldHMsIGlkKSkgeyByZXR1cm4gYXNzZXRzW2lkXSB9XG4gIHZhciBjYW1lbGl6ZWRJZCA9IGNhbWVsaXplKGlkKTtcbiAgaWYgKGhhc093bihhc3NldHMsIGNhbWVsaXplZElkKSkgeyByZXR1cm4gYXNzZXRzW2NhbWVsaXplZElkXSB9XG4gIHZhciBQYXNjYWxDYXNlSWQgPSBjYXBpdGFsaXplKGNhbWVsaXplZElkKTtcbiAgaWYgKGhhc093bihhc3NldHMsIFBhc2NhbENhc2VJZCkpIHsgcmV0dXJuIGFzc2V0c1tQYXNjYWxDYXNlSWRdIH1cbiAgLy8gZmFsbGJhY2sgdG8gcHJvdG90eXBlIGNoYWluXG4gIHZhciByZXMgPSBhc3NldHNbaWRdIHx8IGFzc2V0c1tjYW1lbGl6ZWRJZF0gfHwgYXNzZXRzW1Bhc2NhbENhc2VJZF07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm5NaXNzaW5nICYmICFyZXMpIHtcbiAgICB3YXJuKFxuICAgICAgJ0ZhaWxlZCB0byByZXNvbHZlICcgKyB0eXBlLnNsaWNlKDAsIC0xKSArICc6ICcgKyBpZCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3AgKFxuICBrZXksXG4gIHByb3BPcHRpb25zLFxuICBwcm9wc0RhdGEsXG4gIHZtXG4pIHtcbiAgdmFyIHByb3AgPSBwcm9wT3B0aW9uc1trZXldO1xuICB2YXIgYWJzZW50ID0gIWhhc093bihwcm9wc0RhdGEsIGtleSk7XG4gIHZhciB2YWx1ZSA9IHByb3BzRGF0YVtrZXldO1xuICAvLyBib29sZWFuIGNhc3RpbmdcbiAgdmFyIGJvb2xlYW5JbmRleCA9IGdldFR5cGVJbmRleChCb29sZWFuLCBwcm9wLnR5cGUpO1xuICBpZiAoYm9vbGVhbkluZGV4ID4gLTEpIHtcbiAgICBpZiAoYWJzZW50ICYmICFoYXNPd24ocHJvcCwgJ2RlZmF1bHQnKSkge1xuICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gaHlwaGVuYXRlKGtleSkpIHtcbiAgICAgIC8vIG9ubHkgY2FzdCBlbXB0eSBzdHJpbmcgLyBzYW1lIG5hbWUgdG8gYm9vbGVhbiBpZlxuICAgICAgLy8gYm9vbGVhbiBoYXMgaGlnaGVyIHByaW9yaXR5XG4gICAgICB2YXIgc3RyaW5nSW5kZXggPSBnZXRUeXBlSW5kZXgoU3RyaW5nLCBwcm9wLnR5cGUpO1xuICAgICAgaWYgKHN0cmluZ0luZGV4IDwgMCB8fCBib29sZWFuSW5kZXggPCBzdHJpbmdJbmRleCkge1xuICAgICAgICB2YWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIGNoZWNrIGRlZmF1bHQgdmFsdWVcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB2YWx1ZSA9IGdldFByb3BEZWZhdWx0VmFsdWUodm0sIHByb3AsIGtleSk7XG4gICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBmcmVzaCBjb3B5LFxuICAgIC8vIG1ha2Ugc3VyZSB0byBvYnNlcnZlIGl0LlxuICAgIHZhciBwcmV2U2hvdWxkT2JzZXJ2ZSA9IHNob3VsZE9ic2VydmU7XG4gICAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xuICAgIG9ic2VydmUodmFsdWUpO1xuICAgIHRvZ2dsZU9ic2VydmluZyhwcmV2U2hvdWxkT2JzZXJ2ZSk7XG4gIH1cbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICAvLyBza2lwIHZhbGlkYXRpb24gZm9yIHdlZXggcmVjeWNsZS1saXN0IGNoaWxkIGNvbXBvbmVudCBwcm9wc1xuICAgICEoZmFsc2UpXG4gICkge1xuICAgIGFzc2VydFByb3AocHJvcCwga2V5LCB2YWx1ZSwgdm0sIGFic2VudCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgcHJvcC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcERlZmF1bHRWYWx1ZSAodm0sIHByb3AsIGtleSkge1xuICAvLyBubyBkZWZhdWx0LCByZXR1cm4gdW5kZWZpbmVkXG4gIGlmICghaGFzT3duKHByb3AsICdkZWZhdWx0JykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgdmFyIGRlZiA9IHByb3AuZGVmYXVsdDtcbiAgLy8gd2FybiBhZ2FpbnN0IG5vbi1mYWN0b3J5IGRlZmF1bHRzIGZvciBPYmplY3QgJiBBcnJheVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBpc09iamVjdChkZWYpKSB7XG4gICAgd2FybihcbiAgICAgICdJbnZhbGlkIGRlZmF1bHQgdmFsdWUgZm9yIHByb3AgXCInICsga2V5ICsgJ1wiOiAnICtcbiAgICAgICdQcm9wcyB3aXRoIHR5cGUgT2JqZWN0L0FycmF5IG11c3QgdXNlIGEgZmFjdG9yeSBmdW5jdGlvbiAnICtcbiAgICAgICd0byByZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUuJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyB0aGUgcmF3IHByb3AgdmFsdWUgd2FzIGFsc28gdW5kZWZpbmVkIGZyb20gcHJldmlvdXMgcmVuZGVyLFxuICAvLyByZXR1cm4gcHJldmlvdXMgZGVmYXVsdCB2YWx1ZSB0byBhdm9pZCB1bm5lY2Vzc2FyeSB3YXRjaGVyIHRyaWdnZXJcbiAgaWYgKHZtICYmIHZtLiRvcHRpb25zLnByb3BzRGF0YSAmJlxuICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YVtrZXldID09PSB1bmRlZmluZWQgJiZcbiAgICB2bS5fcHJvcHNba2V5XSAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiB2bS5fcHJvcHNba2V5XVxuICB9XG4gIC8vIGNhbGwgZmFjdG9yeSBmdW5jdGlvbiBmb3Igbm9uLUZ1bmN0aW9uIHR5cGVzXG4gIC8vIGEgdmFsdWUgaXMgRnVuY3Rpb24gaWYgaXRzIHByb3RvdHlwZSBpcyBmdW5jdGlvbiBldmVuIGFjcm9zcyBkaWZmZXJlbnQgZXhlY3V0aW9uIGNvbnRleHRcbiAgcmV0dXJuIHR5cGVvZiBkZWYgPT09ICdmdW5jdGlvbicgJiYgZ2V0VHlwZShwcm9wLnR5cGUpICE9PSAnRnVuY3Rpb24nXG4gICAgPyBkZWYuY2FsbCh2bSlcbiAgICA6IGRlZlxufVxuXG4vKipcbiAqIEFzc2VydCB3aGV0aGVyIGEgcHJvcCBpcyB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0UHJvcCAoXG4gIHByb3AsXG4gIG5hbWUsXG4gIHZhbHVlLFxuICB2bSxcbiAgYWJzZW50XG4pIHtcbiAgaWYgKHByb3AucmVxdWlyZWQgJiYgYWJzZW50KSB7XG4gICAgd2FybihcbiAgICAgICdNaXNzaW5nIHJlcXVpcmVkIHByb3A6IFwiJyArIG5hbWUgKyAnXCInLFxuICAgICAgdm1cbiAgICApO1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2YWx1ZSA9PSBudWxsICYmICFwcm9wLnJlcXVpcmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHR5cGUgPSBwcm9wLnR5cGU7XG4gIHZhciB2YWxpZCA9ICF0eXBlIHx8IHR5cGUgPT09IHRydWU7XG4gIHZhciBleHBlY3RlZFR5cGVzID0gW107XG4gIGlmICh0eXBlKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlID0gW3R5cGVdO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGUubGVuZ3RoICYmICF2YWxpZDsgaSsrKSB7XG4gICAgICB2YXIgYXNzZXJ0ZWRUeXBlID0gYXNzZXJ0VHlwZSh2YWx1ZSwgdHlwZVtpXSk7XG4gICAgICBleHBlY3RlZFR5cGVzLnB1c2goYXNzZXJ0ZWRUeXBlLmV4cGVjdGVkVHlwZSB8fCAnJyk7XG4gICAgICB2YWxpZCA9IGFzc2VydGVkVHlwZS52YWxpZDtcbiAgICB9XG4gIH1cblxuICBpZiAoIXZhbGlkKSB7XG4gICAgd2FybihcbiAgICAgIGdldEludmFsaWRUeXBlTWVzc2FnZShuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcyksXG4gICAgICB2bVxuICAgICk7XG4gICAgcmV0dXJuXG4gIH1cbiAgdmFyIHZhbGlkYXRvciA9IHByb3AudmFsaWRhdG9yO1xuICBpZiAodmFsaWRhdG9yKSB7XG4gICAgaWYgKCF2YWxpZGF0b3IodmFsdWUpKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAnSW52YWxpZCBwcm9wOiBjdXN0b20gdmFsaWRhdG9yIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcIicgKyBuYW1lICsgJ1wiLicsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG52YXIgc2ltcGxlQ2hlY2tSRSA9IC9eKFN0cmluZ3xOdW1iZXJ8Qm9vbGVhbnxGdW5jdGlvbnxTeW1ib2wpJC87XG5cbmZ1bmN0aW9uIGFzc2VydFR5cGUgKHZhbHVlLCB0eXBlKSB7XG4gIHZhciB2YWxpZDtcbiAgdmFyIGV4cGVjdGVkVHlwZSA9IGdldFR5cGUodHlwZSk7XG4gIGlmIChzaW1wbGVDaGVja1JFLnRlc3QoZXhwZWN0ZWRUeXBlKSkge1xuICAgIHZhciB0ID0gdHlwZW9mIHZhbHVlO1xuICAgIHZhbGlkID0gdCA9PT0gZXhwZWN0ZWRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgLy8gZm9yIHByaW1pdGl2ZSB3cmFwcGVyIG9iamVjdHNcbiAgICBpZiAoIXZhbGlkICYmIHQgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnT2JqZWN0Jykge1xuICAgIHZhbGlkID0gaXNQbGFpbk9iamVjdCh2YWx1ZSk7XG4gIH0gZWxzZSBpZiAoZXhwZWN0ZWRUeXBlID09PSAnQXJyYXknKSB7XG4gICAgdmFsaWQgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZCA9IHZhbHVlIGluc3RhbmNlb2YgdHlwZTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHZhbGlkOiB2YWxpZCxcbiAgICBleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZVxuICB9XG59XG5cbi8qKlxuICogVXNlIGZ1bmN0aW9uIHN0cmluZyBuYW1lIHRvIGNoZWNrIGJ1aWx0LWluIHR5cGVzLFxuICogYmVjYXVzZSBhIHNpbXBsZSBlcXVhbGl0eSBjaGVjayB3aWxsIGZhaWwgd2hlbiBydW5uaW5nXG4gKiBhY3Jvc3MgZGlmZmVyZW50IHZtcyAvIGlmcmFtZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFR5cGUgKGZuKSB7XG4gIHZhciBtYXRjaCA9IGZuICYmIGZuLnRvU3RyaW5nKCkubWF0Y2goL15cXHMqZnVuY3Rpb24gKFxcdyspLyk7XG4gIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJydcbn1cblxuZnVuY3Rpb24gaXNTYW1lVHlwZSAoYSwgYikge1xuICByZXR1cm4gZ2V0VHlwZShhKSA9PT0gZ2V0VHlwZShiKVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlSW5kZXggKHR5cGUsIGV4cGVjdGVkVHlwZXMpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVHlwZXMpKSB7XG4gICAgcmV0dXJuIGlzU2FtZVR5cGUoZXhwZWN0ZWRUeXBlcywgdHlwZSkgPyAwIDogLTFcbiAgfVxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGlmIChpc1NhbWVUeXBlKGV4cGVjdGVkVHlwZXNbaV0sIHR5cGUpKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gLTFcbn1cblxuZnVuY3Rpb24gZ2V0SW52YWxpZFR5cGVNZXNzYWdlIChuYW1lLCB2YWx1ZSwgZXhwZWN0ZWRUeXBlcykge1xuICB2YXIgbWVzc2FnZSA9IFwiSW52YWxpZCBwcm9wOiB0eXBlIGNoZWNrIGZhaWxlZCBmb3IgcHJvcCBcXFwiXCIgKyBuYW1lICsgXCJcXFwiLlwiICtcbiAgICBcIiBFeHBlY3RlZCBcIiArIChleHBlY3RlZFR5cGVzLm1hcChjYXBpdGFsaXplKS5qb2luKCcsICcpKTtcbiAgdmFyIGV4cGVjdGVkVHlwZSA9IGV4cGVjdGVkVHlwZXNbMF07XG4gIHZhciByZWNlaXZlZFR5cGUgPSB0b1Jhd1R5cGUodmFsdWUpO1xuICB2YXIgZXhwZWN0ZWRWYWx1ZSA9IHN0eWxlVmFsdWUodmFsdWUsIGV4cGVjdGVkVHlwZSk7XG4gIHZhciByZWNlaXZlZFZhbHVlID0gc3R5bGVWYWx1ZSh2YWx1ZSwgcmVjZWl2ZWRUeXBlKTtcbiAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IGV4cGVjdGVkIHZhbHVlXG4gIGlmIChleHBlY3RlZFR5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgaXNFeHBsaWNhYmxlKGV4cGVjdGVkVHlwZSkgJiZcbiAgICAgICFpc0Jvb2xlYW4oZXhwZWN0ZWRUeXBlLCByZWNlaXZlZFR5cGUpKSB7XG4gICAgbWVzc2FnZSArPSBcIiB3aXRoIHZhbHVlIFwiICsgZXhwZWN0ZWRWYWx1ZTtcbiAgfVxuICBtZXNzYWdlICs9IFwiLCBnb3QgXCIgKyByZWNlaXZlZFR5cGUgKyBcIiBcIjtcbiAgLy8gY2hlY2sgaWYgd2UgbmVlZCB0byBzcGVjaWZ5IHJlY2VpdmVkIHZhbHVlXG4gIGlmIChpc0V4cGxpY2FibGUocmVjZWl2ZWRUeXBlKSkge1xuICAgIG1lc3NhZ2UgKz0gXCJ3aXRoIHZhbHVlIFwiICsgcmVjZWl2ZWRWYWx1ZSArIFwiLlwiO1xuICB9XG4gIHJldHVybiBtZXNzYWdlXG59XG5cbmZ1bmN0aW9uIHN0eWxlVmFsdWUgKHZhbHVlLCB0eXBlKSB7XG4gIGlmICh0eXBlID09PSAnU3RyaW5nJykge1xuICAgIHJldHVybiAoXCJcXFwiXCIgKyB2YWx1ZSArIFwiXFxcIlwiKVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdOdW1iZXInKSB7XG4gICAgcmV0dXJuIChcIlwiICsgKE51bWJlcih2YWx1ZSkpKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAoXCJcIiArIHZhbHVlKVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzRXhwbGljYWJsZSAodmFsdWUpIHtcbiAgdmFyIGV4cGxpY2l0VHlwZXMgPSBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddO1xuICByZXR1cm4gZXhwbGljaXRUeXBlcy5zb21lKGZ1bmN0aW9uIChlbGVtKSB7IHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpID09PSBlbGVtOyB9KVxufVxuXG5mdW5jdGlvbiBpc0Jvb2xlYW4gKCkge1xuICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gIHJldHVybiBhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHsgcmV0dXJuIGVsZW0udG9Mb3dlckNhc2UoKSA9PT0gJ2Jvb2xlYW4nOyB9KVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgLy8gRGVhY3RpdmF0ZSBkZXBzIHRyYWNraW5nIHdoaWxlIHByb2Nlc3NpbmcgZXJyb3IgaGFuZGxlciB0byBhdm9pZCBwb3NzaWJsZSBpbmZpbml0ZSByZW5kZXJpbmcuXG4gIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZXgvaXNzdWVzLzE1MDVcbiAgcHVzaFRhcmdldCgpO1xuICB0cnkge1xuICAgIGlmICh2bSkge1xuICAgICAgdmFyIGN1ciA9IHZtO1xuICAgICAgd2hpbGUgKChjdXIgPSBjdXIuJHBhcmVudCkpIHtcbiAgICAgICAgdmFyIGhvb2tzID0gY3VyLiRvcHRpb25zLmVycm9yQ2FwdHVyZWQ7XG4gICAgICAgIGlmIChob29rcykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHZhciBjYXB0dXJlID0gaG9va3NbaV0uY2FsbChjdXIsIGVyciwgdm0sIGluZm8pID09PSBmYWxzZTtcbiAgICAgICAgICAgICAgaWYgKGNhcHR1cmUpIHsgcmV0dXJuIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgZ2xvYmFsSGFuZGxlRXJyb3IoZSwgY3VyLCAnZXJyb3JDYXB0dXJlZCBob29rJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGdsb2JhbEhhbmRsZUVycm9yKGVyciwgdm0sIGluZm8pO1xuICB9IGZpbmFsbHkge1xuICAgIHBvcFRhcmdldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZVdpdGhFcnJvckhhbmRsaW5nIChcbiAgaGFuZGxlcixcbiAgY29udGV4dCxcbiAgYXJncyxcbiAgdm0sXG4gIGluZm9cbikge1xuICB2YXIgcmVzO1xuICB0cnkge1xuICAgIHJlcyA9IGFyZ3MgPyBoYW5kbGVyLmFwcGx5KGNvbnRleHQsIGFyZ3MpIDogaGFuZGxlci5jYWxsKGNvbnRleHQpO1xuICAgIGlmIChyZXMgJiYgIXJlcy5faXNWdWUgJiYgaXNQcm9taXNlKHJlcykgJiYgIXJlcy5faGFuZGxlZCkge1xuICAgICAgcmVzLmNhdGNoKGZ1bmN0aW9uIChlKSB7IHJldHVybiBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyArIFwiIChQcm9taXNlL2FzeW5jKVwiKTsgfSk7XG4gICAgICAvLyBpc3N1ZSAjOTUxMVxuICAgICAgLy8gYXZvaWQgY2F0Y2ggdHJpZ2dlcmluZyBtdWx0aXBsZSB0aW1lcyB3aGVuIG5lc3RlZCBjYWxsc1xuICAgICAgcmVzLl9oYW5kbGVkID0gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGVFcnJvcihlLCB2bSwgaW5mbyk7XG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBnbG9iYWxIYW5kbGVFcnJvciAoZXJyLCB2bSwgaW5mbykge1xuICBpZiAoY29uZmlnLmVycm9ySGFuZGxlcikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY29uZmlnLmVycm9ySGFuZGxlci5jYWxsKG51bGwsIGVyciwgdm0sIGluZm8pXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gaWYgdGhlIHVzZXIgaW50ZW50aW9uYWxseSB0aHJvd3MgdGhlIG9yaWdpbmFsIGVycm9yIGluIHRoZSBoYW5kbGVyLFxuICAgICAgLy8gZG8gbm90IGxvZyBpdCB0d2ljZVxuICAgICAgaWYgKGUgIT09IGVycikge1xuICAgICAgICBsb2dFcnJvcihlLCBudWxsLCAnY29uZmlnLmVycm9ySGFuZGxlcicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBsb2dFcnJvcihlcnIsIHZtLCBpbmZvKTtcbn1cblxuZnVuY3Rpb24gbG9nRXJyb3IgKGVyciwgdm0sIGluZm8pIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICB3YXJuKChcIkVycm9yIGluIFwiICsgaW5mbyArIFwiOiBcXFwiXCIgKyAoZXJyLnRvU3RyaW5nKCkpICsgXCJcXFwiXCIpLCB2bSk7XG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKChpbkJyb3dzZXIgfHwgaW5XZWV4KSAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cblxuLyogICovXG5cbnZhciBjYWxsYmFja3MgPSBbXTtcbnZhciBwZW5kaW5nID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsdXNoQ2FsbGJhY2tzICgpIHtcbiAgcGVuZGluZyA9IGZhbHNlO1xuICB2YXIgY29waWVzID0gY2FsbGJhY2tzLnNsaWNlKDApO1xuICBjYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3BpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb3BpZXNbaV0oKTtcbiAgfVxufVxuXG4vLyBIZXJlIHdlIGhhdmUgYXN5bmMgZGVmZXJyaW5nIHdyYXBwZXJzIHVzaW5nIG1pY3JvdGFza3MuXG4vLyBJbiAyLjUgd2UgdXNlZCAobWFjcm8pIHRhc2tzIChpbiBjb21iaW5hdGlvbiB3aXRoIG1pY3JvdGFza3MpLlxuLy8gSG93ZXZlciwgaXQgaGFzIHN1YnRsZSBwcm9ibGVtcyB3aGVuIHN0YXRlIGlzIGNoYW5nZWQgcmlnaHQgYmVmb3JlIHJlcGFpbnRcbi8vIChlLmcuICM2ODEzLCBvdXQtaW4gdHJhbnNpdGlvbnMpLlxuLy8gQWxzbywgdXNpbmcgKG1hY3JvKSB0YXNrcyBpbiBldmVudCBoYW5kbGVyIHdvdWxkIGNhdXNlIHNvbWUgd2VpcmQgYmVoYXZpb3JzXG4vLyB0aGF0IGNhbm5vdCBiZSBjaXJjdW12ZW50ZWQgKGUuZy4gIzcxMDksICM3MTUzLCAjNzU0NiwgIzc4MzQsICM4MTA5KS5cbi8vIFNvIHdlIG5vdyB1c2UgbWljcm90YXNrcyBldmVyeXdoZXJlLCBhZ2Fpbi5cbi8vIEEgbWFqb3IgZHJhd2JhY2sgb2YgdGhpcyB0cmFkZW9mZiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHNjZW5hcmlvc1xuLy8gd2hlcmUgbWljcm90YXNrcyBoYXZlIHRvbyBoaWdoIGEgcHJpb3JpdHkgYW5kIGZpcmUgaW4gYmV0d2VlbiBzdXBwb3NlZGx5XG4vLyBzZXF1ZW50aWFsIGV2ZW50cyAoZS5nLiAjNDUyMSwgIzY2OTAsIHdoaWNoIGhhdmUgd29ya2Fyb3VuZHMpXG4vLyBvciBldmVuIGJldHdlZW4gYnViYmxpbmcgb2YgdGhlIHNhbWUgZXZlbnQgKCM2NTY2KS5cbnZhciB0aW1lckZ1bmM7XG5cbi8vIFRoZSBuZXh0VGljayBiZWhhdmlvciBsZXZlcmFnZXMgdGhlIG1pY3JvdGFzayBxdWV1ZSwgd2hpY2ggY2FuIGJlIGFjY2Vzc2VkXG4vLyB2aWEgZWl0aGVyIG5hdGl2ZSBQcm9taXNlLnRoZW4gb3IgTXV0YXRpb25PYnNlcnZlci5cbi8vIE11dGF0aW9uT2JzZXJ2ZXIgaGFzIHdpZGVyIHN1cHBvcnQsIGhvd2V2ZXIgaXQgaXMgc2VyaW91c2x5IGJ1Z2dlZCBpblxuLy8gVUlXZWJWaWV3IGluIGlPUyA+PSA5LjMuMyB3aGVuIHRyaWdnZXJlZCBpbiB0b3VjaCBldmVudCBoYW5kbGVycy4gSXRcbi8vIGNvbXBsZXRlbHkgc3RvcHMgd29ya2luZyBhZnRlciB0cmlnZ2VyaW5nIGEgZmV3IHRpbWVzLi4uIHNvLCBpZiBuYXRpdmVcbi8vIFByb21pc2UgaXMgYXZhaWxhYmxlLCB3ZSB3aWxsIHVzZSBpdDpcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0LCAkZmxvdy1kaXNhYmxlLWxpbmUgKi9cbmlmICh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoUHJvbWlzZSkpIHtcbiAgdmFyIHAgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHAudGhlbihmbHVzaENhbGxiYWNrcyk7XG4gICAgLy8gSW4gcHJvYmxlbWF0aWMgVUlXZWJWaWV3cywgUHJvbWlzZS50aGVuIGRvZXNuJ3QgY29tcGxldGVseSBicmVhaywgYnV0XG4gICAgLy8gaXQgY2FuIGdldCBzdHVjayBpbiBhIHdlaXJkIHN0YXRlIHdoZXJlIGNhbGxiYWNrcyBhcmUgcHVzaGVkIGludG8gdGhlXG4gICAgLy8gbWljcm90YXNrIHF1ZXVlIGJ1dCB0aGUgcXVldWUgaXNuJ3QgYmVpbmcgZmx1c2hlZCwgdW50aWwgdGhlIGJyb3dzZXJcbiAgICAvLyBuZWVkcyB0byBkbyBzb21lIG90aGVyIHdvcmssIGUuZy4gaGFuZGxlIGEgdGltZXIuIFRoZXJlZm9yZSB3ZSBjYW5cbiAgICAvLyBcImZvcmNlXCIgdGhlIG1pY3JvdGFzayBxdWV1ZSB0byBiZSBmbHVzaGVkIGJ5IGFkZGluZyBhbiBlbXB0eSB0aW1lci5cbiAgICBpZiAoaXNJT1MpIHsgc2V0VGltZW91dChub29wKTsgfVxuICB9O1xufSBlbHNlIGlmICghaXNJRSAmJiB0eXBlb2YgTXV0YXRpb25PYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgKFxuICBpc05hdGl2ZShNdXRhdGlvbk9ic2VydmVyKSB8fFxuICAvLyBQaGFudG9tSlMgYW5kIGlPUyA3LnhcbiAgTXV0YXRpb25PYnNlcnZlci50b1N0cmluZygpID09PSAnW29iamVjdCBNdXRhdGlvbk9ic2VydmVyQ29uc3RydWN0b3JdJ1xuKSkge1xuICAvLyBVc2UgTXV0YXRpb25PYnNlcnZlciB3aGVyZSBuYXRpdmUgUHJvbWlzZSBpcyBub3QgYXZhaWxhYmxlLFxuICAvLyBlLmcuIFBoYW50b21KUywgaU9TNywgQW5kcm9pZCA0LjRcbiAgLy8gKCM2NDY2IE11dGF0aW9uT2JzZXJ2ZXIgaXMgdW5yZWxpYWJsZSBpbiBJRTExKVxuICB2YXIgY291bnRlciA9IDE7XG4gIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKGZsdXNoQ2FsbGJhY2tzKTtcbiAgdmFyIHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoU3RyaW5nKGNvdW50ZXIpKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZSh0ZXh0Tm9kZSwge1xuICAgIGNoYXJhY3RlckRhdGE6IHRydWVcbiAgfSk7XG4gIHRpbWVyRnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb3VudGVyID0gKGNvdW50ZXIgKyAxKSAlIDI7XG4gICAgdGV4dE5vZGUuZGF0YSA9IFN0cmluZyhjb3VudGVyKTtcbiAgfTtcbn0gZWxzZSBpZiAodHlwZW9mIHNldEltbWVkaWF0ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNOYXRpdmUoc2V0SW1tZWRpYXRlKSkge1xuICAvLyBGYWxsYmFjayB0byBzZXRJbW1lZGlhdGUuXG4gIC8vIFRlY2huaWNhbGx5IGl0IGxldmVyYWdlcyB0aGUgKG1hY3JvKSB0YXNrIHF1ZXVlLFxuICAvLyBidXQgaXQgaXMgc3RpbGwgYSBiZXR0ZXIgY2hvaWNlIHRoYW4gc2V0VGltZW91dC5cbiAgdGltZXJGdW5jID0gZnVuY3Rpb24gKCkge1xuICAgIHNldEltbWVkaWF0ZShmbHVzaENhbGxiYWNrcyk7XG4gIH07XG59IGVsc2Uge1xuICAvLyBGYWxsYmFjayB0byBzZXRUaW1lb3V0LlxuICB0aW1lckZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgc2V0VGltZW91dChmbHVzaENhbGxiYWNrcywgMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIG5leHRUaWNrIChjYiwgY3R4KSB7XG4gIHZhciBfcmVzb2x2ZTtcbiAgY2FsbGJhY2tzLnB1c2goZnVuY3Rpb24gKCkge1xuICAgIGlmIChjYikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2IuY2FsbChjdHgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBoYW5kbGVFcnJvcihlLCBjdHgsICduZXh0VGljaycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX3Jlc29sdmUpIHtcbiAgICAgIF9yZXNvbHZlKGN0eCk7XG4gICAgfVxuICB9KTtcbiAgaWYgKCFwZW5kaW5nKSB7XG4gICAgcGVuZGluZyA9IHRydWU7XG4gICAgdGltZXJGdW5jKCk7XG4gIH1cbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIGlmICghY2IgJiYgdHlwZW9mIFByb21pc2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSlcbiAgfVxufVxuXG4vKiAgKi9cblxuLyogbm90IHR5cGUgY2hlY2tpbmcgdGhpcyBmaWxlIGJlY2F1c2UgZmxvdyBkb2Vzbid0IHBsYXkgd2VsbCB3aXRoIFByb3h5ICovXG5cbnZhciBpbml0UHJveHk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBhbGxvd2VkR2xvYmFscyA9IG1ha2VNYXAoXG4gICAgJ0luZmluaXR5LHVuZGVmaW5lZCxOYU4saXNGaW5pdGUsaXNOYU4sJyArXG4gICAgJ3BhcnNlRmxvYXQscGFyc2VJbnQsZGVjb2RlVVJJLGRlY29kZVVSSUNvbXBvbmVudCxlbmNvZGVVUkksZW5jb2RlVVJJQ29tcG9uZW50LCcgK1xuICAgICdNYXRoLE51bWJlcixEYXRlLEFycmF5LE9iamVjdCxCb29sZWFuLFN0cmluZyxSZWdFeHAsTWFwLFNldCxKU09OLEludGwsJyArXG4gICAgJ3JlcXVpcmUnIC8vIGZvciBXZWJwYWNrL0Jyb3dzZXJpZnlcbiAgKTtcblxuICB2YXIgd2Fybk5vblByZXNlbnQgPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICB3YXJuKFxuICAgICAgXCJQcm9wZXJ0eSBvciBtZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBpbnN0YW5jZSBidXQgXCIgK1xuICAgICAgJ3JlZmVyZW5jZWQgZHVyaW5nIHJlbmRlci4gTWFrZSBzdXJlIHRoYXQgdGhpcyBwcm9wZXJ0eSBpcyByZWFjdGl2ZSwgJyArXG4gICAgICAnZWl0aGVyIGluIHRoZSBkYXRhIG9wdGlvbiwgb3IgZm9yIGNsYXNzLWJhc2VkIGNvbXBvbmVudHMsIGJ5ICcgK1xuICAgICAgJ2luaXRpYWxpemluZyB0aGUgcHJvcGVydHkuICcgK1xuICAgICAgJ1NlZTogaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvcmVhY3Rpdml0eS5odG1sI0RlY2xhcmluZy1SZWFjdGl2ZS1Qcm9wZXJ0aWVzLicsXG4gICAgICB0YXJnZXRcbiAgICApO1xuICB9O1xuXG4gIHZhciB3YXJuUmVzZXJ2ZWRQcmVmaXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICB3YXJuKFxuICAgICAgXCJQcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgbXVzdCBiZSBhY2Nlc3NlZCB3aXRoIFxcXCIkZGF0YS5cIiArIGtleSArIFwiXFxcIiBiZWNhdXNlIFwiICtcbiAgICAgICdwcm9wZXJ0aWVzIHN0YXJ0aW5nIHdpdGggXCIkXCIgb3IgXCJfXCIgYXJlIG5vdCBwcm94aWVkIGluIHRoZSBWdWUgaW5zdGFuY2UgdG8gJyArXG4gICAgICAncHJldmVudCBjb25mbGljdHMgd2l0aCBWdWUgaW50ZXJuYWxzLiAnICtcbiAgICAgICdTZWU6IGh0dHBzOi8vdnVlanMub3JnL3YyL2FwaS8jZGF0YScsXG4gICAgICB0YXJnZXRcbiAgICApO1xuICB9O1xuXG4gIHZhciBoYXNQcm94eSA9XG4gICAgdHlwZW9mIFByb3h5ICE9PSAndW5kZWZpbmVkJyAmJiBpc05hdGl2ZShQcm94eSk7XG5cbiAgaWYgKGhhc1Byb3h5KSB7XG4gICAgdmFyIGlzQnVpbHRJbk1vZGlmaWVyID0gbWFrZU1hcCgnc3RvcCxwcmV2ZW50LHNlbGYsY3RybCxzaGlmdCxhbHQsbWV0YSxleGFjdCcpO1xuICAgIGNvbmZpZy5rZXlDb2RlcyA9IG5ldyBQcm94eShjb25maWcua2V5Q29kZXMsIHtcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0ICh0YXJnZXQsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgaWYgKGlzQnVpbHRJbk1vZGlmaWVyKGtleSkpIHtcbiAgICAgICAgICB3YXJuKChcIkF2b2lkIG92ZXJ3cml0aW5nIGJ1aWx0LWluIG1vZGlmaWVyIGluIGNvbmZpZy5rZXlDb2RlczogLlwiICsga2V5KSk7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICB2YXIgaGFzSGFuZGxlciA9IHtcbiAgICBoYXM6IGZ1bmN0aW9uIGhhcyAodGFyZ2V0LCBrZXkpIHtcbiAgICAgIHZhciBoYXMgPSBrZXkgaW4gdGFyZ2V0O1xuICAgICAgdmFyIGlzQWxsb3dlZCA9IGFsbG93ZWRHbG9iYWxzKGtleSkgfHxcbiAgICAgICAgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleS5jaGFyQXQoMCkgPT09ICdfJyAmJiAhKGtleSBpbiB0YXJnZXQuJGRhdGEpKTtcbiAgICAgIGlmICghaGFzICYmICFpc0FsbG93ZWQpIHtcbiAgICAgICAgaWYgKGtleSBpbiB0YXJnZXQuJGRhdGEpIHsgd2FyblJlc2VydmVkUHJlZml4KHRhcmdldCwga2V5KTsgfVxuICAgICAgICBlbHNlIHsgd2Fybk5vblByZXNlbnQodGFyZ2V0LCBrZXkpOyB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzIHx8ICFpc0FsbG93ZWRcbiAgICB9XG4gIH07XG5cbiAgdmFyIGdldEhhbmRsZXIgPSB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKHRhcmdldCwga2V5KSB7XG4gICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYgIShrZXkgaW4gdGFyZ2V0KSkge1xuICAgICAgICBpZiAoa2V5IGluIHRhcmdldC4kZGF0YSkgeyB3YXJuUmVzZXJ2ZWRQcmVmaXgodGFyZ2V0LCBrZXkpOyB9XG4gICAgICAgIGVsc2UgeyB3YXJuTm9uUHJlc2VudCh0YXJnZXQsIGtleSk7IH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0YXJnZXRba2V5XVxuICAgIH1cbiAgfTtcblxuICBpbml0UHJveHkgPSBmdW5jdGlvbiBpbml0UHJveHkgKHZtKSB7XG4gICAgaWYgKGhhc1Byb3h5KSB7XG4gICAgICAvLyBkZXRlcm1pbmUgd2hpY2ggcHJveHkgaGFuZGxlciB0byB1c2VcbiAgICAgIHZhciBvcHRpb25zID0gdm0uJG9wdGlvbnM7XG4gICAgICB2YXIgaGFuZGxlcnMgPSBvcHRpb25zLnJlbmRlciAmJiBvcHRpb25zLnJlbmRlci5fd2l0aFN0cmlwcGVkXG4gICAgICAgID8gZ2V0SGFuZGxlclxuICAgICAgICA6IGhhc0hhbmRsZXI7XG4gICAgICB2bS5fcmVuZGVyUHJveHkgPSBuZXcgUHJveHkodm0sIGhhbmRsZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm0uX3JlbmRlclByb3h5ID0gdm07XG4gICAgfVxuICB9O1xufVxuXG4vKiAgKi9cblxudmFyIHNlZW5PYmplY3RzID0gbmV3IF9TZXQoKTtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSB0cmF2ZXJzZSBhbiBvYmplY3QgdG8gZXZva2UgYWxsIGNvbnZlcnRlZFxuICogZ2V0dGVycywgc28gdGhhdCBldmVyeSBuZXN0ZWQgcHJvcGVydHkgaW5zaWRlIHRoZSBvYmplY3RcbiAqIGlzIGNvbGxlY3RlZCBhcyBhIFwiZGVlcFwiIGRlcGVuZGVuY3kuXG4gKi9cbmZ1bmN0aW9uIHRyYXZlcnNlICh2YWwpIHtcbiAgX3RyYXZlcnNlKHZhbCwgc2Vlbk9iamVjdHMpO1xuICBzZWVuT2JqZWN0cy5jbGVhcigpO1xufVxuXG5mdW5jdGlvbiBfdHJhdmVyc2UgKHZhbCwgc2Vlbikge1xuICB2YXIgaSwga2V5cztcbiAgdmFyIGlzQSA9IEFycmF5LmlzQXJyYXkodmFsKTtcbiAgaWYgKCghaXNBICYmICFpc09iamVjdCh2YWwpKSB8fCBPYmplY3QuaXNGcm96ZW4odmFsKSB8fCB2YWwgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVyblxuICB9XG4gIGlmICh2YWwuX19vYl9fKSB7XG4gICAgdmFyIGRlcElkID0gdmFsLl9fb2JfXy5kZXAuaWQ7XG4gICAgaWYgKHNlZW4uaGFzKGRlcElkKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNlZW4uYWRkKGRlcElkKTtcbiAgfVxuICBpZiAoaXNBKSB7XG4gICAgaSA9IHZhbC5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkgeyBfdHJhdmVyc2UodmFsW2ldLCBzZWVuKTsgfVxuICB9IGVsc2Uge1xuICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgIGkgPSBrZXlzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tKSB7IF90cmF2ZXJzZSh2YWxba2V5c1tpXV0sIHNlZW4pOyB9XG4gIH1cbn1cblxudmFyIG1hcms7XG52YXIgbWVhc3VyZTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIHBlcmYgPSBpbkJyb3dzZXIgJiYgd2luZG93LnBlcmZvcm1hbmNlO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgaWYgKFxuICAgIHBlcmYgJiZcbiAgICBwZXJmLm1hcmsgJiZcbiAgICBwZXJmLm1lYXN1cmUgJiZcbiAgICBwZXJmLmNsZWFyTWFya3MgJiZcbiAgICBwZXJmLmNsZWFyTWVhc3VyZXNcbiAgKSB7XG4gICAgbWFyayA9IGZ1bmN0aW9uICh0YWcpIHsgcmV0dXJuIHBlcmYubWFyayh0YWcpOyB9O1xuICAgIG1lYXN1cmUgPSBmdW5jdGlvbiAobmFtZSwgc3RhcnRUYWcsIGVuZFRhZykge1xuICAgICAgcGVyZi5tZWFzdXJlKG5hbWUsIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgICAgcGVyZi5jbGVhck1hcmtzKHN0YXJ0VGFnKTtcbiAgICAgIHBlcmYuY2xlYXJNYXJrcyhlbmRUYWcpO1xuICAgICAgLy8gcGVyZi5jbGVhck1lYXN1cmVzKG5hbWUpXG4gICAgfTtcbiAgfVxufVxuXG4vKiAgKi9cblxudmFyIG5vcm1hbGl6ZUV2ZW50ID0gY2FjaGVkKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciBwYXNzaXZlID0gbmFtZS5jaGFyQXQoMCkgPT09ICcmJztcbiAgbmFtZSA9IHBhc3NpdmUgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgdmFyIG9uY2UkJDEgPSBuYW1lLmNoYXJBdCgwKSA9PT0gJ34nOyAvLyBQcmVmaXhlZCBsYXN0LCBjaGVja2VkIGZpcnN0XG4gIG5hbWUgPSBvbmNlJCQxID8gbmFtZS5zbGljZSgxKSA6IG5hbWU7XG4gIHZhciBjYXB0dXJlID0gbmFtZS5jaGFyQXQoMCkgPT09ICchJztcbiAgbmFtZSA9IGNhcHR1cmUgPyBuYW1lLnNsaWNlKDEpIDogbmFtZTtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIG9uY2U6IG9uY2UkJDEsXG4gICAgY2FwdHVyZTogY2FwdHVyZSxcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBjcmVhdGVGbkludm9rZXIgKGZucywgdm0pIHtcbiAgZnVuY3Rpb24gaW52b2tlciAoKSB7XG4gICAgdmFyIGFyZ3VtZW50cyQxID0gYXJndW1lbnRzO1xuXG4gICAgdmFyIGZucyA9IGludm9rZXIuZm5zO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZucykpIHtcbiAgICAgIHZhciBjbG9uZWQgPSBmbnMuc2xpY2UoKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2xvbmVkLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNsb25lZFtpXSwgbnVsbCwgYXJndW1lbnRzJDEsIHZtLCBcInYtb24gaGFuZGxlclwiKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGhhbmRsZXIgcmV0dXJuIHZhbHVlIGZvciBzaW5nbGUgaGFuZGxlcnNcbiAgICAgIHJldHVybiBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhmbnMsIG51bGwsIGFyZ3VtZW50cywgdm0sIFwidi1vbiBoYW5kbGVyXCIpXG4gICAgfVxuICB9XG4gIGludm9rZXIuZm5zID0gZm5zO1xuICByZXR1cm4gaW52b2tlclxufVxuXG5mdW5jdGlvbiB1cGRhdGVMaXN0ZW5lcnMgKFxuICBvbixcbiAgb2xkT24sXG4gIGFkZCxcbiAgcmVtb3ZlJCQxLFxuICBjcmVhdGVPbmNlSGFuZGxlcixcbiAgdm1cbikge1xuICB2YXIgbmFtZSwgZGVmJCQxLCBjdXIsIG9sZCwgZXZlbnQ7XG4gIGZvciAobmFtZSBpbiBvbikge1xuICAgIGRlZiQkMSA9IGN1ciA9IG9uW25hbWVdO1xuICAgIG9sZCA9IG9sZE9uW25hbWVdO1xuICAgIGV2ZW50ID0gbm9ybWFsaXplRXZlbnQobmFtZSk7XG4gICAgaWYgKGlzVW5kZWYoY3VyKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIkludmFsaWQgaGFuZGxlciBmb3IgZXZlbnQgXFxcIlwiICsgKGV2ZW50Lm5hbWUpICsgXCJcXFwiOiBnb3QgXCIgKyBTdHJpbmcoY3VyKSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChpc1VuZGVmKG9sZCkpIHtcbiAgICAgIGlmIChpc1VuZGVmKGN1ci5mbnMpKSB7XG4gICAgICAgIGN1ciA9IG9uW25hbWVdID0gY3JlYXRlRm5JbnZva2VyKGN1ciwgdm0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzVHJ1ZShldmVudC5vbmNlKSkge1xuICAgICAgICBjdXIgPSBvbltuYW1lXSA9IGNyZWF0ZU9uY2VIYW5kbGVyKGV2ZW50Lm5hbWUsIGN1ciwgZXZlbnQuY2FwdHVyZSk7XG4gICAgICB9XG4gICAgICBhZGQoZXZlbnQubmFtZSwgY3VyLCBldmVudC5jYXB0dXJlLCBldmVudC5wYXNzaXZlLCBldmVudC5wYXJhbXMpO1xuICAgIH0gZWxzZSBpZiAoY3VyICE9PSBvbGQpIHtcbiAgICAgIG9sZC5mbnMgPSBjdXI7XG4gICAgICBvbltuYW1lXSA9IG9sZDtcbiAgICB9XG4gIH1cbiAgZm9yIChuYW1lIGluIG9sZE9uKSB7XG4gICAgaWYgKGlzVW5kZWYob25bbmFtZV0pKSB7XG4gICAgICBldmVudCA9IG5vcm1hbGl6ZUV2ZW50KG5hbWUpO1xuICAgICAgcmVtb3ZlJCQxKGV2ZW50Lm5hbWUsIG9sZE9uW25hbWVdLCBldmVudC5jYXB0dXJlKTtcbiAgICB9XG4gIH1cbn1cblxuLyogICovXG5cbi8qICAqL1xuXG4vLyBmaXhlZCBieSB4eHh4eHggKG1wIHByb3BlcnRpZXMpXG5mdW5jdGlvbiBleHRyYWN0UHJvcGVydGllc0Zyb21WTm9kZURhdGEoZGF0YSwgQ3RvciwgcmVzLCBjb250ZXh0KSB7XG4gIHZhciBwcm9wT3B0aW9ucyA9IEN0b3Iub3B0aW9ucy5tcE9wdGlvbnMgJiYgQ3Rvci5vcHRpb25zLm1wT3B0aW9ucy5wcm9wZXJ0aWVzO1xuICBpZiAoaXNVbmRlZihwcm9wT3B0aW9ucykpIHtcbiAgICByZXR1cm4gcmVzXG4gIH1cbiAgdmFyIGV4dGVybmFsQ2xhc3NlcyA9IEN0b3Iub3B0aW9ucy5tcE9wdGlvbnMuZXh0ZXJuYWxDbGFzc2VzIHx8IFtdO1xuICB2YXIgYXR0cnMgPSBkYXRhLmF0dHJzO1xuICB2YXIgcHJvcHMgPSBkYXRhLnByb3BzO1xuICBpZiAoaXNEZWYoYXR0cnMpIHx8IGlzRGVmKHByb3BzKSkge1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wT3B0aW9ucykge1xuICAgICAgdmFyIGFsdEtleSA9IGh5cGhlbmF0ZShrZXkpO1xuICAgICAgdmFyIHJlc3VsdCA9IGNoZWNrUHJvcChyZXMsIHByb3BzLCBrZXksIGFsdEtleSwgdHJ1ZSkgfHxcbiAgICAgICAgICBjaGVja1Byb3AocmVzLCBhdHRycywga2V5LCBhbHRLZXksIGZhbHNlKTtcbiAgICAgIC8vIGV4dGVybmFsQ2xhc3NcbiAgICAgIGlmIChcbiAgICAgICAgcmVzdWx0ICYmXG4gICAgICAgIHJlc1trZXldICYmXG4gICAgICAgIGV4dGVybmFsQ2xhc3Nlcy5pbmRleE9mKGFsdEtleSkgIT09IC0xICYmXG4gICAgICAgIGNvbnRleHRbY2FtZWxpemUocmVzW2tleV0pXVxuICAgICAgKSB7XG4gICAgICAgIC8vIOi1i+WAvCBleHRlcm5hbENsYXNzIOecn+ato+eahOWAvCjmqKHmnb/ph4wgZXh0ZXJuYWxDbGFzcyDnmoTlgLzlj6/og73mmK/lrZfnrKbkuLIpXG4gICAgICAgIHJlc1trZXldID0gY29udGV4dFtjYW1lbGl6ZShyZXNba2V5XSldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEgKFxuICBkYXRhLFxuICBDdG9yLFxuICB0YWcsXG4gIGNvbnRleHQvLyBmaXhlZCBieSB4eHh4eHhcbikge1xuICAvLyB3ZSBhcmUgb25seSBleHRyYWN0aW5nIHJhdyB2YWx1ZXMgaGVyZS5cbiAgLy8gdmFsaWRhdGlvbiBhbmQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGNoaWxkXG4gIC8vIGNvbXBvbmVudCBpdHNlbGYuXG4gIHZhciBwcm9wT3B0aW9ucyA9IEN0b3Iub3B0aW9ucy5wcm9wcztcbiAgaWYgKGlzVW5kZWYocHJvcE9wdGlvbnMpKSB7XG4gICAgLy8gZml4ZWQgYnkgeHh4eHh4XG4gICAgcmV0dXJuIGV4dHJhY3RQcm9wZXJ0aWVzRnJvbVZOb2RlRGF0YShkYXRhLCBDdG9yLCB7fSwgY29udGV4dClcbiAgfVxuICB2YXIgcmVzID0ge307XG4gIHZhciBhdHRycyA9IGRhdGEuYXR0cnM7XG4gIHZhciBwcm9wcyA9IGRhdGEucHJvcHM7XG4gIGlmIChpc0RlZihhdHRycykgfHwgaXNEZWYocHJvcHMpKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHByb3BPcHRpb25zKSB7XG4gICAgICB2YXIgYWx0S2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB2YXIga2V5SW5Mb3dlckNhc2UgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGtleSAhPT0ga2V5SW5Mb3dlckNhc2UgJiZcbiAgICAgICAgICBhdHRycyAmJiBoYXNPd24oYXR0cnMsIGtleUluTG93ZXJDYXNlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aXAoXG4gICAgICAgICAgICBcIlByb3AgXFxcIlwiICsga2V5SW5Mb3dlckNhc2UgKyBcIlxcXCIgaXMgcGFzc2VkIHRvIGNvbXBvbmVudCBcIiArXG4gICAgICAgICAgICAoZm9ybWF0Q29tcG9uZW50TmFtZSh0YWcgfHwgQ3RvcikpICsgXCIsIGJ1dCB0aGUgZGVjbGFyZWQgcHJvcCBuYW1lIGlzXCIgK1xuICAgICAgICAgICAgXCIgXFxcIlwiICsga2V5ICsgXCJcXFwiLiBcIiArXG4gICAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIGNhbWVsQ2FzZWQgXCIgK1xuICAgICAgICAgICAgXCJwcm9wcyBuZWVkIHRvIHVzZSB0aGVpciBrZWJhYi1jYXNlIGVxdWl2YWxlbnRzIHdoZW4gdXNpbmcgaW4tRE9NIFwiICtcbiAgICAgICAgICAgIFwidGVtcGxhdGVzLiBZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIgKyBhbHRLZXkgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBrZXkgKyBcIlxcXCIuXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjaGVja1Byb3AocmVzLCBwcm9wcywga2V5LCBhbHRLZXksIHRydWUpIHx8XG4gICAgICBjaGVja1Byb3AocmVzLCBhdHRycywga2V5LCBhbHRLZXksIGZhbHNlKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4ZWQgYnkgeHh4eHh4XG4gIHJldHVybiBleHRyYWN0UHJvcGVydGllc0Zyb21WTm9kZURhdGEoZGF0YSwgQ3RvciwgcmVzLCBjb250ZXh0KVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3AgKFxuICByZXMsXG4gIGhhc2gsXG4gIGtleSxcbiAgYWx0S2V5LFxuICBwcmVzZXJ2ZVxuKSB7XG4gIGlmIChpc0RlZihoYXNoKSkge1xuICAgIGlmIChoYXNPd24oaGFzaCwga2V5KSkge1xuICAgICAgcmVzW2tleV0gPSBoYXNoW2tleV07XG4gICAgICBpZiAoIXByZXNlcnZlKSB7XG4gICAgICAgIGRlbGV0ZSBoYXNoW2tleV07XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoaGFzT3duKGhhc2gsIGFsdEtleSkpIHtcbiAgICAgIHJlc1trZXldID0gaGFzaFthbHRLZXldO1xuICAgICAgaWYgKCFwcmVzZXJ2ZSkge1xuICAgICAgICBkZWxldGUgaGFzaFthbHRLZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qICAqL1xuXG4vLyBUaGUgdGVtcGxhdGUgY29tcGlsZXIgYXR0ZW1wdHMgdG8gbWluaW1pemUgdGhlIG5lZWQgZm9yIG5vcm1hbGl6YXRpb24gYnlcbi8vIHN0YXRpY2FsbHkgYW5hbHl6aW5nIHRoZSB0ZW1wbGF0ZSBhdCBjb21waWxlIHRpbWUuXG4vL1xuLy8gRm9yIHBsYWluIEhUTUwgbWFya3VwLCBub3JtYWxpemF0aW9uIGNhbiBiZSBjb21wbGV0ZWx5IHNraXBwZWQgYmVjYXVzZSB0aGVcbi8vIGdlbmVyYXRlZCByZW5kZXIgZnVuY3Rpb24gaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gQXJyYXk8Vk5vZGU+LiBUaGVyZSBhcmVcbi8vIHR3byBjYXNlcyB3aGVyZSBleHRyYSBub3JtYWxpemF0aW9uIGlzIG5lZWRlZDpcblxuLy8gMS4gV2hlbiB0aGUgY2hpbGRyZW4gY29udGFpbnMgY29tcG9uZW50cyAtIGJlY2F1c2UgYSBmdW5jdGlvbmFsIGNvbXBvbmVudFxuLy8gbWF5IHJldHVybiBhbiBBcnJheSBpbnN0ZWFkIG9mIGEgc2luZ2xlIHJvb3QuIEluIHRoaXMgY2FzZSwganVzdCBhIHNpbXBsZVxuLy8gbm9ybWFsaXphdGlvbiBpcyBuZWVkZWQgLSBpZiBhbnkgY2hpbGQgaXMgYW4gQXJyYXksIHdlIGZsYXR0ZW4gdGhlIHdob2xlXG4vLyB0aGluZyB3aXRoIEFycmF5LnByb3RvdHlwZS5jb25jYXQuIEl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgb25seSAxLWxldmVsIGRlZXBcbi8vIGJlY2F1c2UgZnVuY3Rpb25hbCBjb21wb25lbnRzIGFscmVhZHkgbm9ybWFsaXplIHRoZWlyIG93biBjaGlsZHJlbi5cbmZ1bmN0aW9uIHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuIChjaGlsZHJlbikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW5baV0pKSB7XG4gICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgY2hpbGRyZW4pXG4gICAgfVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG4vLyAyLiBXaGVuIHRoZSBjaGlsZHJlbiBjb250YWlucyBjb25zdHJ1Y3RzIHRoYXQgYWx3YXlzIGdlbmVyYXRlZCBuZXN0ZWQgQXJyYXlzLFxuLy8gZS5nLiA8dGVtcGxhdGU+LCA8c2xvdD4sIHYtZm9yLCBvciB3aGVuIHRoZSBjaGlsZHJlbiBpcyBwcm92aWRlZCBieSB1c2VyXG4vLyB3aXRoIGhhbmQtd3JpdHRlbiByZW5kZXIgZnVuY3Rpb25zIC8gSlNYLiBJbiBzdWNoIGNhc2VzIGEgZnVsbCBub3JtYWxpemF0aW9uXG4vLyBpcyBuZWVkZWQgdG8gY2F0ZXIgdG8gYWxsIHBvc3NpYmxlIHR5cGVzIG9mIGNoaWxkcmVuIHZhbHVlcy5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNoaWxkcmVuIChjaGlsZHJlbikge1xuICByZXR1cm4gaXNQcmltaXRpdmUoY2hpbGRyZW4pXG4gICAgPyBbY3JlYXRlVGV4dFZOb2RlKGNoaWxkcmVuKV1cbiAgICA6IEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pXG4gICAgICA/IG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4oY2hpbGRyZW4pXG4gICAgICA6IHVuZGVmaW5lZFxufVxuXG5mdW5jdGlvbiBpc1RleHROb2RlIChub2RlKSB7XG4gIHJldHVybiBpc0RlZihub2RlKSAmJiBpc0RlZihub2RlLnRleHQpICYmIGlzRmFsc2Uobm9kZS5pc0NvbW1lbnQpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUFycmF5Q2hpbGRyZW4gKGNoaWxkcmVuLCBuZXN0ZWRJbmRleCkge1xuICB2YXIgcmVzID0gW107XG4gIHZhciBpLCBjLCBsYXN0SW5kZXgsIGxhc3Q7XG4gIGZvciAoaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgIGMgPSBjaGlsZHJlbltpXTtcbiAgICBpZiAoaXNVbmRlZihjKSB8fCB0eXBlb2YgYyA9PT0gJ2Jvb2xlYW4nKSB7IGNvbnRpbnVlIH1cbiAgICBsYXN0SW5kZXggPSByZXMubGVuZ3RoIC0gMTtcbiAgICBsYXN0ID0gcmVzW2xhc3RJbmRleF07XG4gICAgLy8gIG5lc3RlZFxuICAgIGlmIChBcnJheS5pc0FycmF5KGMpKSB7XG4gICAgICBpZiAoYy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGMgPSBub3JtYWxpemVBcnJheUNoaWxkcmVuKGMsICgobmVzdGVkSW5kZXggfHwgJycpICsgXCJfXCIgKyBpKSk7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgaWYgKGlzVGV4dE5vZGUoY1swXSkgJiYgaXNUZXh0Tm9kZShsYXN0KSkge1xuICAgICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIChjWzBdKS50ZXh0KTtcbiAgICAgICAgICBjLnNoaWZ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzLnB1c2guYXBwbHkocmVzLCBjKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzUHJpbWl0aXZlKGMpKSB7XG4gICAgICBpZiAoaXNUZXh0Tm9kZShsYXN0KSkge1xuICAgICAgICAvLyBtZXJnZSBhZGphY2VudCB0ZXh0IG5vZGVzXG4gICAgICAgIC8vIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBTU1IgaHlkcmF0aW9uIGJlY2F1c2UgdGV4dCBub2RlcyBhcmVcbiAgICAgICAgLy8gZXNzZW50aWFsbHkgbWVyZ2VkIHdoZW4gcmVuZGVyZWQgdG8gSFRNTCBzdHJpbmdzXG4gICAgICAgIHJlc1tsYXN0SW5kZXhdID0gY3JlYXRlVGV4dFZOb2RlKGxhc3QudGV4dCArIGMpO1xuICAgICAgfSBlbHNlIGlmIChjICE9PSAnJykge1xuICAgICAgICAvLyBjb252ZXJ0IHByaW1pdGl2ZSB0byB2bm9kZVxuICAgICAgICByZXMucHVzaChjcmVhdGVUZXh0Vk5vZGUoYykpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaXNUZXh0Tm9kZShjKSAmJiBpc1RleHROb2RlKGxhc3QpKSB7XG4gICAgICAgIC8vIG1lcmdlIGFkamFjZW50IHRleHQgbm9kZXNcbiAgICAgICAgcmVzW2xhc3RJbmRleF0gPSBjcmVhdGVUZXh0Vk5vZGUobGFzdC50ZXh0ICsgYy50ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRlZmF1bHQga2V5IGZvciBuZXN0ZWQgYXJyYXkgY2hpbGRyZW4gKGxpa2VseSBnZW5lcmF0ZWQgYnkgdi1mb3IpXG4gICAgICAgIGlmIChpc1RydWUoY2hpbGRyZW4uX2lzVkxpc3QpICYmXG4gICAgICAgICAgaXNEZWYoYy50YWcpICYmXG4gICAgICAgICAgaXNVbmRlZihjLmtleSkgJiZcbiAgICAgICAgICBpc0RlZihuZXN0ZWRJbmRleCkpIHtcbiAgICAgICAgICBjLmtleSA9IFwiX192bGlzdFwiICsgbmVzdGVkSW5kZXggKyBcIl9cIiArIGkgKyBcIl9fXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmVzLnB1c2goYyk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRQcm92aWRlICh2bSkge1xuICB2YXIgcHJvdmlkZSA9IHZtLiRvcHRpb25zLnByb3ZpZGU7XG4gIGlmIChwcm92aWRlKSB7XG4gICAgdm0uX3Byb3ZpZGVkID0gdHlwZW9mIHByb3ZpZGUgPT09ICdmdW5jdGlvbidcbiAgICAgID8gcHJvdmlkZS5jYWxsKHZtKVxuICAgICAgOiBwcm92aWRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRJbmplY3Rpb25zICh2bSkge1xuICB2YXIgcmVzdWx0ID0gcmVzb2x2ZUluamVjdCh2bS4kb3B0aW9ucy5pbmplY3QsIHZtKTtcbiAgaWYgKHJlc3VsdCkge1xuICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgT2JqZWN0LmtleXMocmVzdWx0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwga2V5LCByZXN1bHRba2V5XSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICBcIkF2b2lkIG11dGF0aW5nIGFuIGluamVjdGVkIHZhbHVlIGRpcmVjdGx5IHNpbmNlIHRoZSBjaGFuZ2VzIHdpbGwgYmUgXCIgK1xuICAgICAgICAgICAgXCJvdmVyd3JpdHRlbiB3aGVuZXZlciB0aGUgcHJvdmlkZWQgY29tcG9uZW50IHJlLXJlbmRlcnMuIFwiICtcbiAgICAgICAgICAgIFwiaW5qZWN0aW9uIGJlaW5nIG11dGF0ZWQ6IFxcXCJcIiArIGtleSArIFwiXFxcIlwiLFxuICAgICAgICAgICAgdm1cbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCBrZXksIHJlc3VsdFtrZXldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUluamVjdCAoaW5qZWN0LCB2bSkge1xuICBpZiAoaW5qZWN0KSB7XG4gICAgLy8gaW5qZWN0IGlzIDphbnkgYmVjYXVzZSBmbG93IGlzIG5vdCBzbWFydCBlbm91Z2ggdG8gZmlndXJlIG91dCBjYWNoZWRcbiAgICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICB2YXIga2V5cyA9IGhhc1N5bWJvbFxuICAgICAgPyBSZWZsZWN0Lm93bktleXMoaW5qZWN0KVxuICAgICAgOiBPYmplY3Qua2V5cyhpbmplY3QpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgIC8vICM2NTc0IGluIGNhc2UgdGhlIGluamVjdCBvYmplY3QgaXMgb2JzZXJ2ZWQuLi5cbiAgICAgIGlmIChrZXkgPT09ICdfX29iX18nKSB7IGNvbnRpbnVlIH1cbiAgICAgIHZhciBwcm92aWRlS2V5ID0gaW5qZWN0W2tleV0uZnJvbTtcbiAgICAgIHZhciBzb3VyY2UgPSB2bTtcbiAgICAgIHdoaWxlIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKHNvdXJjZS5fcHJvdmlkZWQgJiYgaGFzT3duKHNvdXJjZS5fcHJvdmlkZWQsIHByb3ZpZGVLZXkpKSB7XG4gICAgICAgICAgcmVzdWx0W2tleV0gPSBzb3VyY2UuX3Byb3ZpZGVkW3Byb3ZpZGVLZXldO1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgc291cmNlID0gc291cmNlLiRwYXJlbnQ7XG4gICAgICB9XG4gICAgICBpZiAoIXNvdXJjZSkge1xuICAgICAgICBpZiAoJ2RlZmF1bHQnIGluIGluamVjdFtrZXldKSB7XG4gICAgICAgICAgdmFyIHByb3ZpZGVEZWZhdWx0ID0gaW5qZWN0W2tleV0uZGVmYXVsdDtcbiAgICAgICAgICByZXN1bHRba2V5XSA9IHR5cGVvZiBwcm92aWRlRGVmYXVsdCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgPyBwcm92aWRlRGVmYXVsdC5jYWxsKHZtKVxuICAgICAgICAgICAgOiBwcm92aWRlRGVmYXVsdDtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgICAgd2FybigoXCJJbmplY3Rpb24gXFxcIlwiICsga2V5ICsgXCJcXFwiIG5vdCBmb3VuZFwiKSwgdm0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG4vKiAgKi9cblxuXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyByYXcgY2hpbGRyZW4gVk5vZGVzIGludG8gYSBzbG90IG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVNsb3RzIChcbiAgY2hpbGRyZW4sXG4gIGNvbnRleHRcbikge1xuICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGgpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuICB2YXIgc2xvdHMgPSB7fTtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICB2YXIgZGF0YSA9IGNoaWxkLmRhdGE7XG4gICAgLy8gcmVtb3ZlIHNsb3QgYXR0cmlidXRlIGlmIHRoZSBub2RlIGlzIHJlc29sdmVkIGFzIGEgVnVlIHNsb3Qgbm9kZVxuICAgIGlmIChkYXRhICYmIGRhdGEuYXR0cnMgJiYgZGF0YS5hdHRycy5zbG90KSB7XG4gICAgICBkZWxldGUgZGF0YS5hdHRycy5zbG90O1xuICAgIH1cbiAgICAvLyBuYW1lZCBzbG90cyBzaG91bGQgb25seSBiZSByZXNwZWN0ZWQgaWYgdGhlIHZub2RlIHdhcyByZW5kZXJlZCBpbiB0aGVcbiAgICAvLyBzYW1lIGNvbnRleHQuXG4gICAgaWYgKChjaGlsZC5jb250ZXh0ID09PSBjb250ZXh0IHx8IGNoaWxkLmZuQ29udGV4dCA9PT0gY29udGV4dCkgJiZcbiAgICAgIGRhdGEgJiYgZGF0YS5zbG90ICE9IG51bGxcbiAgICApIHtcbiAgICAgIHZhciBuYW1lID0gZGF0YS5zbG90O1xuICAgICAgdmFyIHNsb3QgPSAoc2xvdHNbbmFtZV0gfHwgKHNsb3RzW25hbWVdID0gW10pKTtcbiAgICAgIGlmIChjaGlsZC50YWcgPT09ICd0ZW1wbGF0ZScpIHtcbiAgICAgICAgc2xvdC5wdXNoLmFwcGx5KHNsb3QsIGNoaWxkLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsb3QucHVzaChjaGlsZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZpeGVkIGJ5IHh4eHh4eCDkuLTml7YgaGFjayDmjokgdW5pLWFwcCDkuK3nmoTlvILmraUgbmFtZSBzbG90IHBhZ2VcbiAgICAgIGlmKGNoaWxkLmFzeW5jTWV0YSAmJiBjaGlsZC5hc3luY01ldGEuZGF0YSAmJiBjaGlsZC5hc3luY01ldGEuZGF0YS5zbG90ID09PSAncGFnZScpe1xuICAgICAgICAoc2xvdHNbJ3BhZ2UnXSB8fCAoc2xvdHNbJ3BhZ2UnXSA9IFtdKSkucHVzaChjaGlsZCk7XG4gICAgICB9ZWxzZXtcbiAgICAgICAgKHNsb3RzLmRlZmF1bHQgfHwgKHNsb3RzLmRlZmF1bHQgPSBbXSkpLnB1c2goY2hpbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBpZ25vcmUgc2xvdHMgdGhhdCBjb250YWlucyBvbmx5IHdoaXRlc3BhY2VcbiAgZm9yICh2YXIgbmFtZSQxIGluIHNsb3RzKSB7XG4gICAgaWYgKHNsb3RzW25hbWUkMV0uZXZlcnkoaXNXaGl0ZXNwYWNlKSkge1xuICAgICAgZGVsZXRlIHNsb3RzW25hbWUkMV07XG4gICAgfVxuICB9XG4gIHJldHVybiBzbG90c1xufVxuXG5mdW5jdGlvbiBpc1doaXRlc3BhY2UgKG5vZGUpIHtcbiAgcmV0dXJuIChub2RlLmlzQ29tbWVudCAmJiAhbm9kZS5hc3luY0ZhY3RvcnkpIHx8IG5vZGUudGV4dCA9PT0gJyAnXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVTY29wZWRTbG90cyAoXG4gIHNsb3RzLFxuICBub3JtYWxTbG90cyxcbiAgcHJldlNsb3RzXG4pIHtcbiAgdmFyIHJlcztcbiAgdmFyIGhhc05vcm1hbFNsb3RzID0gT2JqZWN0LmtleXMobm9ybWFsU2xvdHMpLmxlbmd0aCA+IDA7XG4gIHZhciBpc1N0YWJsZSA9IHNsb3RzID8gISFzbG90cy4kc3RhYmxlIDogIWhhc05vcm1hbFNsb3RzO1xuICB2YXIga2V5ID0gc2xvdHMgJiYgc2xvdHMuJGtleTtcbiAgaWYgKCFzbG90cykge1xuICAgIHJlcyA9IHt9O1xuICB9IGVsc2UgaWYgKHNsb3RzLl9ub3JtYWxpemVkKSB7XG4gICAgLy8gZmFzdCBwYXRoIDE6IGNoaWxkIGNvbXBvbmVudCByZS1yZW5kZXIgb25seSwgcGFyZW50IGRpZCBub3QgY2hhbmdlXG4gICAgcmV0dXJuIHNsb3RzLl9ub3JtYWxpemVkXG4gIH0gZWxzZSBpZiAoXG4gICAgaXNTdGFibGUgJiZcbiAgICBwcmV2U2xvdHMgJiZcbiAgICBwcmV2U2xvdHMgIT09IGVtcHR5T2JqZWN0ICYmXG4gICAga2V5ID09PSBwcmV2U2xvdHMuJGtleSAmJlxuICAgICFoYXNOb3JtYWxTbG90cyAmJlxuICAgICFwcmV2U2xvdHMuJGhhc05vcm1hbFxuICApIHtcbiAgICAvLyBmYXN0IHBhdGggMjogc3RhYmxlIHNjb3BlZCBzbG90cyB3LyBubyBub3JtYWwgc2xvdHMgdG8gcHJveHksXG4gICAgLy8gb25seSBuZWVkIHRvIG5vcm1hbGl6ZSBvbmNlXG4gICAgcmV0dXJuIHByZXZTbG90c1xuICB9IGVsc2Uge1xuICAgIHJlcyA9IHt9O1xuICAgIGZvciAodmFyIGtleSQxIGluIHNsb3RzKSB7XG4gICAgICBpZiAoc2xvdHNba2V5JDFdICYmIGtleSQxWzBdICE9PSAnJCcpIHtcbiAgICAgICAgcmVzW2tleSQxXSA9IG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSQxLCBzbG90c1trZXkkMV0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBleHBvc2Ugbm9ybWFsIHNsb3RzIG9uIHNjb3BlZFNsb3RzXG4gIGZvciAodmFyIGtleSQyIGluIG5vcm1hbFNsb3RzKSB7XG4gICAgaWYgKCEoa2V5JDIgaW4gcmVzKSkge1xuICAgICAgcmVzW2tleSQyXSA9IHByb3h5Tm9ybWFsU2xvdChub3JtYWxTbG90cywga2V5JDIpO1xuICAgIH1cbiAgfVxuICAvLyBhdm9yaWF6IHNlZW1zIHRvIG1vY2sgYSBub24tZXh0ZW5zaWJsZSAkc2NvcGVkU2xvdHMgb2JqZWN0XG4gIC8vIGFuZCB3aGVuIHRoYXQgaXMgcGFzc2VkIGRvd24gdGhpcyB3b3VsZCBjYXVzZSBhbiBlcnJvclxuICBpZiAoc2xvdHMgJiYgT2JqZWN0LmlzRXh0ZW5zaWJsZShzbG90cykpIHtcbiAgICAoc2xvdHMpLl9ub3JtYWxpemVkID0gcmVzO1xuICB9XG4gIGRlZihyZXMsICckc3RhYmxlJywgaXNTdGFibGUpO1xuICBkZWYocmVzLCAnJGtleScsIGtleSk7XG4gIGRlZihyZXMsICckaGFzTm9ybWFsJywgaGFzTm9ybWFsU2xvdHMpO1xuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNjb3BlZFNsb3Qobm9ybWFsU2xvdHMsIGtleSwgZm4pIHtcbiAgdmFyIG5vcm1hbGl6ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlcyA9IGFyZ3VtZW50cy5sZW5ndGggPyBmbi5hcHBseShudWxsLCBhcmd1bWVudHMpIDogZm4oe30pO1xuICAgIHJlcyA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShyZXMpXG4gICAgICA/IFtyZXNdIC8vIHNpbmdsZSB2bm9kZVxuICAgICAgOiBub3JtYWxpemVDaGlsZHJlbihyZXMpO1xuICAgIHJldHVybiByZXMgJiYgKFxuICAgICAgcmVzLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgKHJlcy5sZW5ndGggPT09IDEgJiYgcmVzWzBdLmlzQ29tbWVudCkgLy8gIzk2NThcbiAgICApID8gdW5kZWZpbmVkXG4gICAgICA6IHJlc1xuICB9O1xuICAvLyB0aGlzIGlzIGEgc2xvdCB1c2luZyB0aGUgbmV3IHYtc2xvdCBzeW50YXggd2l0aG91dCBzY29wZS4gYWx0aG91Z2ggaXQgaXNcbiAgLy8gY29tcGlsZWQgYXMgYSBzY29wZWQgc2xvdCwgcmVuZGVyIGZuIHVzZXJzIHdvdWxkIGV4cGVjdCBpdCB0byBiZSBwcmVzZW50XG4gIC8vIG9uIHRoaXMuJHNsb3RzIGJlY2F1c2UgdGhlIHVzYWdlIGlzIHNlbWFudGljYWxseSBhIG5vcm1hbCBzbG90LlxuICBpZiAoZm4ucHJveHkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobm9ybWFsU2xvdHMsIGtleSwge1xuICAgICAgZ2V0OiBub3JtYWxpemVkLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkXG59XG5cbmZ1bmN0aW9uIHByb3h5Tm9ybWFsU2xvdChzbG90cywga2V5KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBzbG90c1trZXldOyB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciByZW5kZXJpbmcgdi1mb3IgbGlzdHMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlckxpc3QgKFxuICB2YWwsXG4gIHJlbmRlclxuKSB7XG4gIHZhciByZXQsIGksIGwsIGtleXMsIGtleTtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSB8fCB0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHJldCA9IG5ldyBBcnJheSh2YWwubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKHZhbFtpXSwgaSwgaSwgaSk7IC8vIGZpeGVkIGJ5IHh4eHh4eFxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHJldCA9IG5ldyBBcnJheSh2YWwpO1xuICAgIGZvciAoaSA9IDA7IGkgPCB2YWw7IGkrKykge1xuICAgICAgcmV0W2ldID0gcmVuZGVyKGkgKyAxLCBpLCBpLCBpKTsgLy8gZml4ZWQgYnkgeHh4eHh4XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkpIHtcbiAgICBpZiAoaGFzU3ltYm9sICYmIHZhbFtTeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICByZXQgPSBbXTtcbiAgICAgIHZhciBpdGVyYXRvciA9IHZhbFtTeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgd2hpbGUgKCFyZXN1bHQuZG9uZSkge1xuICAgICAgICByZXQucHVzaChyZW5kZXIocmVzdWx0LnZhbHVlLCByZXQubGVuZ3RoLCBpLCBpKyspKTsgLy8gZml4ZWQgYnkgeHh4eHh4XG4gICAgICAgIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAga2V5cyA9IE9iamVjdC5rZXlzKHZhbCk7XG4gICAgICByZXQgPSBuZXcgQXJyYXkoa2V5cy5sZW5ndGgpO1xuICAgICAgZm9yIChpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgIHJldFtpXSA9IHJlbmRlcih2YWxba2V5XSwga2V5LCBpLCBpKTsgLy8gZml4ZWQgYnkgeHh4eHh4XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaXNEZWYocmV0KSkge1xuICAgIHJldCA9IFtdO1xuICB9XG4gIChyZXQpLl9pc1ZMaXN0ID0gdHJ1ZTtcbiAgcmV0dXJuIHJldFxufVxuXG4vKiAgKi9cblxuLyoqXG4gKiBSdW50aW1lIGhlbHBlciBmb3IgcmVuZGVyaW5nIDxzbG90PlxuICovXG5mdW5jdGlvbiByZW5kZXJTbG90IChcbiAgbmFtZSxcbiAgZmFsbGJhY2ssXG4gIHByb3BzLFxuICBiaW5kT2JqZWN0XG4pIHtcbiAgdmFyIHNjb3BlZFNsb3RGbiA9IHRoaXMuJHNjb3BlZFNsb3RzW25hbWVdO1xuICB2YXIgbm9kZXM7XG4gIGlmIChzY29wZWRTbG90Rm4pIHsgLy8gc2NvcGVkIHNsb3RcbiAgICBwcm9wcyA9IHByb3BzIHx8IHt9O1xuICAgIGlmIChiaW5kT2JqZWN0KSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiAhaXNPYmplY3QoYmluZE9iamVjdCkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAnc2xvdCB2LWJpbmQgd2l0aG91dCBhcmd1bWVudCBleHBlY3RzIGFuIE9iamVjdCcsXG4gICAgICAgICAgdGhpc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcHJvcHMgPSBleHRlbmQoZXh0ZW5kKHt9LCBiaW5kT2JqZWN0KSwgcHJvcHMpO1xuICAgIH1cbiAgICAvLyBmaXhlZCBieSB4eHh4eHggYXBwLXBsdXMgc2NvcGVkU2xvdFxuICAgIG5vZGVzID0gc2NvcGVkU2xvdEZuKHByb3BzLCB0aGlzLCBwcm9wcy5faSkgfHwgZmFsbGJhY2s7XG4gIH0gZWxzZSB7XG4gICAgbm9kZXMgPSB0aGlzLiRzbG90c1tuYW1lXSB8fCBmYWxsYmFjaztcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSBwcm9wcyAmJiBwcm9wcy5zbG90O1xuICBpZiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuJGNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJywgeyBzbG90OiB0YXJnZXQgfSwgbm9kZXMpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5vZGVzXG4gIH1cbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlc29sdmluZyBmaWx0ZXJzXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVGaWx0ZXIgKGlkKSB7XG4gIHJldHVybiByZXNvbHZlQXNzZXQodGhpcy4kb3B0aW9ucywgJ2ZpbHRlcnMnLCBpZCwgdHJ1ZSkgfHwgaWRlbnRpdHlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzS2V5Tm90TWF0Y2ggKGV4cGVjdCwgYWN0dWFsKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGV4cGVjdCkpIHtcbiAgICByZXR1cm4gZXhwZWN0LmluZGV4T2YoYWN0dWFsKSA9PT0gLTFcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZXhwZWN0ICE9PSBhY3R1YWxcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBjaGVja2luZyBrZXlDb2RlcyBmcm9tIGNvbmZpZy5cbiAqIGV4cG9zZWQgYXMgVnVlLnByb3RvdHlwZS5fa1xuICogcGFzc2luZyBpbiBldmVudEtleU5hbWUgYXMgbGFzdCBhcmd1bWVudCBzZXBhcmF0ZWx5IGZvciBiYWNrd2FyZHMgY29tcGF0XG4gKi9cbmZ1bmN0aW9uIGNoZWNrS2V5Q29kZXMgKFxuICBldmVudEtleUNvZGUsXG4gIGtleSxcbiAgYnVpbHRJbktleUNvZGUsXG4gIGV2ZW50S2V5TmFtZSxcbiAgYnVpbHRJbktleU5hbWVcbikge1xuICB2YXIgbWFwcGVkS2V5Q29kZSA9IGNvbmZpZy5rZXlDb2Rlc1trZXldIHx8IGJ1aWx0SW5LZXlDb2RlO1xuICBpZiAoYnVpbHRJbktleU5hbWUgJiYgZXZlbnRLZXlOYW1lICYmICFjb25maWcua2V5Q29kZXNba2V5XSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKGJ1aWx0SW5LZXlOYW1lLCBldmVudEtleU5hbWUpXG4gIH0gZWxzZSBpZiAobWFwcGVkS2V5Q29kZSkge1xuICAgIHJldHVybiBpc0tleU5vdE1hdGNoKG1hcHBlZEtleUNvZGUsIGV2ZW50S2V5Q29kZSlcbiAgfSBlbHNlIGlmIChldmVudEtleU5hbWUpIHtcbiAgICByZXR1cm4gaHlwaGVuYXRlKGV2ZW50S2V5TmFtZSkgIT09IGtleVxuICB9XG59XG5cbi8qICAqL1xuXG4vKipcbiAqIFJ1bnRpbWUgaGVscGVyIGZvciBtZXJnaW5nIHYtYmluZD1cIm9iamVjdFwiIGludG8gYSBWTm9kZSdzIGRhdGEuXG4gKi9cbmZ1bmN0aW9uIGJpbmRPYmplY3RQcm9wcyAoXG4gIGRhdGEsXG4gIHRhZyxcbiAgdmFsdWUsXG4gIGFzUHJvcCxcbiAgaXNTeW5jXG4pIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgJ3YtYmluZCB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IG9yIEFycmF5IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlID0gdG9PYmplY3QodmFsdWUpO1xuICAgICAgfVxuICAgICAgdmFyIGhhc2g7XG4gICAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAga2V5ID09PSAnY2xhc3MnIHx8XG4gICAgICAgICAga2V5ID09PSAnc3R5bGUnIHx8XG4gICAgICAgICAgaXNSZXNlcnZlZEF0dHJpYnV0ZShrZXkpXG4gICAgICAgICkge1xuICAgICAgICAgIGhhc2ggPSBkYXRhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciB0eXBlID0gZGF0YS5hdHRycyAmJiBkYXRhLmF0dHJzLnR5cGU7XG4gICAgICAgICAgaGFzaCA9IGFzUHJvcCB8fCBjb25maWcubXVzdFVzZVByb3AodGFnLCB0eXBlLCBrZXkpXG4gICAgICAgICAgICA/IGRhdGEuZG9tUHJvcHMgfHwgKGRhdGEuZG9tUHJvcHMgPSB7fSlcbiAgICAgICAgICAgIDogZGF0YS5hdHRycyB8fCAoZGF0YS5hdHRycyA9IHt9KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY2FtZWxpemVkS2V5ID0gY2FtZWxpemUoa2V5KTtcbiAgICAgICAgdmFyIGh5cGhlbmF0ZWRLZXkgPSBoeXBoZW5hdGUoa2V5KTtcbiAgICAgICAgaWYgKCEoY2FtZWxpemVkS2V5IGluIGhhc2gpICYmICEoaHlwaGVuYXRlZEtleSBpbiBoYXNoKSkge1xuICAgICAgICAgIGhhc2hba2V5XSA9IHZhbHVlW2tleV07XG5cbiAgICAgICAgICBpZiAoaXNTeW5jKSB7XG4gICAgICAgICAgICB2YXIgb24gPSBkYXRhLm9uIHx8IChkYXRhLm9uID0ge30pO1xuICAgICAgICAgICAgb25bKFwidXBkYXRlOlwiICsga2V5KV0gPSBmdW5jdGlvbiAoJGV2ZW50KSB7XG4gICAgICAgICAgICAgIHZhbHVlW2tleV0gPSAkZXZlbnQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHZhbHVlKSBsb29wKCBrZXkgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHJlbmRlcmluZyBzdGF0aWMgdHJlZXMuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlclN0YXRpYyAoXG4gIGluZGV4LFxuICBpc0luRm9yXG4pIHtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX3N0YXRpY1RyZWVzIHx8ICh0aGlzLl9zdGF0aWNUcmVlcyA9IFtdKTtcbiAgdmFyIHRyZWUgPSBjYWNoZWRbaW5kZXhdO1xuICAvLyBpZiBoYXMgYWxyZWFkeS1yZW5kZXJlZCBzdGF0aWMgdHJlZSBhbmQgbm90IGluc2lkZSB2LWZvcixcbiAgLy8gd2UgY2FuIHJldXNlIHRoZSBzYW1lIHRyZWUuXG4gIGlmICh0cmVlICYmICFpc0luRm9yKSB7XG4gICAgcmV0dXJuIHRyZWVcbiAgfVxuICAvLyBvdGhlcndpc2UsIHJlbmRlciBhIGZyZXNoIHRyZWUuXG4gIHRyZWUgPSBjYWNoZWRbaW5kZXhdID0gdGhpcy4kb3B0aW9ucy5zdGF0aWNSZW5kZXJGbnNbaW5kZXhdLmNhbGwoXG4gICAgdGhpcy5fcmVuZGVyUHJveHksXG4gICAgbnVsbCxcbiAgICB0aGlzIC8vIGZvciByZW5kZXIgZm5zIGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25hbCBjb21wb25lbnQgdGVtcGxhdGVzXG4gICk7XG4gIG1hcmtTdGF0aWModHJlZSwgKFwiX19zdGF0aWNfX1wiICsgaW5kZXgpLCBmYWxzZSk7XG4gIHJldHVybiB0cmVlXG59XG5cbi8qKlxuICogUnVudGltZSBoZWxwZXIgZm9yIHYtb25jZS5cbiAqIEVmZmVjdGl2ZWx5IGl0IG1lYW5zIG1hcmtpbmcgdGhlIG5vZGUgYXMgc3RhdGljIHdpdGggYSB1bmlxdWUga2V5LlxuICovXG5mdW5jdGlvbiBtYXJrT25jZSAoXG4gIHRyZWUsXG4gIGluZGV4LFxuICBrZXlcbikge1xuICBtYXJrU3RhdGljKHRyZWUsIChcIl9fb25jZV9fXCIgKyBpbmRleCArIChrZXkgPyAoXCJfXCIgKyBrZXkpIDogXCJcIikpLCB0cnVlKTtcbiAgcmV0dXJuIHRyZWVcbn1cblxuZnVuY3Rpb24gbWFya1N0YXRpYyAoXG4gIHRyZWUsXG4gIGtleSxcbiAgaXNPbmNlXG4pIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodHJlZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0cmVlW2ldICYmIHR5cGVvZiB0cmVlW2ldICE9PSAnc3RyaW5nJykge1xuICAgICAgICBtYXJrU3RhdGljTm9kZSh0cmVlW2ldLCAoa2V5ICsgXCJfXCIgKyBpKSwgaXNPbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbWFya1N0YXRpY05vZGUodHJlZSwga2V5LCBpc09uY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGF0aWNOb2RlIChub2RlLCBrZXksIGlzT25jZSkge1xuICBub2RlLmlzU3RhdGljID0gdHJ1ZTtcbiAgbm9kZS5rZXkgPSBrZXk7XG4gIG5vZGUuaXNPbmNlID0gaXNPbmNlO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gYmluZE9iamVjdExpc3RlbmVycyAoZGF0YSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlKSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICAndi1vbiB3aXRob3V0IGFyZ3VtZW50IGV4cGVjdHMgYW4gT2JqZWN0IHZhbHVlJyxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG9uID0gZGF0YS5vbiA9IGRhdGEub24gPyBleHRlbmQoe30sIGRhdGEub24pIDoge307XG4gICAgICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgdmFyIGV4aXN0aW5nID0gb25ba2V5XTtcbiAgICAgICAgdmFyIG91cnMgPSB2YWx1ZVtrZXldO1xuICAgICAgICBvbltrZXldID0gZXhpc3RpbmcgPyBbXS5jb25jYXQoZXhpc3RpbmcsIG91cnMpIDogb3VycztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGFcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlc29sdmVTY29wZWRTbG90cyAoXG4gIGZucywgLy8gc2VlIGZsb3cvdm5vZGVcbiAgcmVzLFxuICAvLyB0aGUgZm9sbG93aW5nIGFyZSBhZGRlZCBpbiAyLjZcbiAgaGFzRHluYW1pY0tleXMsXG4gIGNvbnRlbnRIYXNoS2V5XG4pIHtcbiAgcmVzID0gcmVzIHx8IHsgJHN0YWJsZTogIWhhc0R5bmFtaWNLZXlzIH07XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNsb3QgPSBmbnNbaV07XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2xvdCkpIHtcbiAgICAgIHJlc29sdmVTY29wZWRTbG90cyhzbG90LCByZXMsIGhhc0R5bmFtaWNLZXlzKTtcbiAgICB9IGVsc2UgaWYgKHNsb3QpIHtcbiAgICAgIC8vIG1hcmtlciBmb3IgcmV2ZXJzZSBwcm94eWluZyB2LXNsb3Qgd2l0aG91dCBzY29wZSBvbiB0aGlzLiRzbG90c1xuICAgICAgaWYgKHNsb3QucHJveHkpIHtcbiAgICAgICAgc2xvdC5mbi5wcm94eSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXNbc2xvdC5rZXldID0gc2xvdC5mbjtcbiAgICB9XG4gIH1cbiAgaWYgKGNvbnRlbnRIYXNoS2V5KSB7XG4gICAgKHJlcykuJGtleSA9IGNvbnRlbnRIYXNoS2V5O1xuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGJpbmREeW5hbWljS2V5cyAoYmFzZU9iaiwgdmFsdWVzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIGtleSA9IHZhbHVlc1tpXTtcbiAgICBpZiAodHlwZW9mIGtleSA9PT0gJ3N0cmluZycgJiYga2V5KSB7XG4gICAgICBiYXNlT2JqW3ZhbHVlc1tpXV0gPSB2YWx1ZXNbaSArIDFdO1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBrZXkgIT09ICcnICYmIGtleSAhPT0gbnVsbCkge1xuICAgICAgLy8gbnVsbCBpcyBhIHNwZWNpYWwgdmFsdWUgZm9yIGV4cGxpY2l0bHkgcmVtb3ZpbmcgYSBiaW5kaW5nXG4gICAgICB3YXJuKFxuICAgICAgICAoXCJJbnZhbGlkIHZhbHVlIGZvciBkeW5hbWljIGRpcmVjdGl2ZSBhcmd1bWVudCAoZXhwZWN0ZWQgc3RyaW5nIG9yIG51bGwpOiBcIiArIGtleSksXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIHJldHVybiBiYXNlT2JqXG59XG5cbi8vIGhlbHBlciB0byBkeW5hbWljYWxseSBhcHBlbmQgbW9kaWZpZXIgcnVudGltZSBtYXJrZXJzIHRvIGV2ZW50IG5hbWVzLlxuLy8gZW5zdXJlIG9ubHkgYXBwZW5kIHdoZW4gdmFsdWUgaXMgYWxyZWFkeSBzdHJpbmcsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGNhc3Rcbi8vIHRvIHN0cmluZyBhbmQgY2F1c2UgdGhlIHR5cGUgY2hlY2sgdG8gbWlzcy5cbmZ1bmN0aW9uIHByZXBlbmRNb2RpZmllciAodmFsdWUsIHN5bWJvbCkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHN5bWJvbCArIHZhbHVlIDogdmFsdWVcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluc3RhbGxSZW5kZXJIZWxwZXJzICh0YXJnZXQpIHtcbiAgdGFyZ2V0Ll9vID0gbWFya09uY2U7XG4gIHRhcmdldC5fbiA9IHRvTnVtYmVyO1xuICB0YXJnZXQuX3MgPSB0b1N0cmluZztcbiAgdGFyZ2V0Ll9sID0gcmVuZGVyTGlzdDtcbiAgdGFyZ2V0Ll90ID0gcmVuZGVyU2xvdDtcbiAgdGFyZ2V0Ll9xID0gbG9vc2VFcXVhbDtcbiAgdGFyZ2V0Ll9pID0gbG9vc2VJbmRleE9mO1xuICB0YXJnZXQuX20gPSByZW5kZXJTdGF0aWM7XG4gIHRhcmdldC5fZiA9IHJlc29sdmVGaWx0ZXI7XG4gIHRhcmdldC5fayA9IGNoZWNrS2V5Q29kZXM7XG4gIHRhcmdldC5fYiA9IGJpbmRPYmplY3RQcm9wcztcbiAgdGFyZ2V0Ll92ID0gY3JlYXRlVGV4dFZOb2RlO1xuICB0YXJnZXQuX2UgPSBjcmVhdGVFbXB0eVZOb2RlO1xuICB0YXJnZXQuX3UgPSByZXNvbHZlU2NvcGVkU2xvdHM7XG4gIHRhcmdldC5fZyA9IGJpbmRPYmplY3RMaXN0ZW5lcnM7XG4gIHRhcmdldC5fZCA9IGJpbmREeW5hbWljS2V5cztcbiAgdGFyZ2V0Ll9wID0gcHJlcGVuZE1vZGlmaWVyO1xufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgKFxuICBkYXRhLFxuICBwcm9wcyxcbiAgY2hpbGRyZW4sXG4gIHBhcmVudCxcbiAgQ3RvclxuKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICAvLyBlbnN1cmUgdGhlIGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gaW4gZnVuY3Rpb25hbCBjb21wb25lbnRzXG4gIC8vIGdldHMgYSB1bmlxdWUgY29udGV4dCAtIHRoaXMgaXMgbmVjZXNzYXJ5IGZvciBjb3JyZWN0IG5hbWVkIHNsb3QgY2hlY2tcbiAgdmFyIGNvbnRleHRWbTtcbiAgaWYgKGhhc093bihwYXJlbnQsICdfdWlkJykpIHtcbiAgICBjb250ZXh0Vm0gPSBPYmplY3QuY3JlYXRlKHBhcmVudCk7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgY29udGV4dFZtLl9vcmlnaW5hbCA9IHBhcmVudDtcbiAgfSBlbHNlIHtcbiAgICAvLyB0aGUgY29udGV4dCB2bSBwYXNzZWQgaW4gaXMgYSBmdW5jdGlvbmFsIGNvbnRleHQgYXMgd2VsbC5cbiAgICAvLyBpbiB0aGlzIGNhc2Ugd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgYXJlIGFibGUgdG8gZ2V0IGEgaG9sZCB0byB0aGVcbiAgICAvLyByZWFsIGNvbnRleHQgaW5zdGFuY2UuXG4gICAgY29udGV4dFZtID0gcGFyZW50O1xuICAgIC8vICRmbG93LWRpc2FibGUtbGluZVxuICAgIHBhcmVudCA9IHBhcmVudC5fb3JpZ2luYWw7XG4gIH1cbiAgdmFyIGlzQ29tcGlsZWQgPSBpc1RydWUob3B0aW9ucy5fY29tcGlsZWQpO1xuICB2YXIgbmVlZE5vcm1hbGl6YXRpb24gPSAhaXNDb21waWxlZDtcblxuICB0aGlzLmRhdGEgPSBkYXRhO1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMubGlzdGVuZXJzID0gZGF0YS5vbiB8fCBlbXB0eU9iamVjdDtcbiAgdGhpcy5pbmplY3Rpb25zID0gcmVzb2x2ZUluamVjdChvcHRpb25zLmluamVjdCwgcGFyZW50KTtcbiAgdGhpcy5zbG90cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXRoaXMkMS4kc2xvdHMpIHtcbiAgICAgIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBkYXRhLnNjb3BlZFNsb3RzLFxuICAgICAgICB0aGlzJDEuJHNsb3RzID0gcmVzb2x2ZVNsb3RzKGNoaWxkcmVuLCBwYXJlbnQpXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcyQxLiRzbG90c1xuICB9O1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnc2NvcGVkU2xvdHMnLCAoe1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQgKCkge1xuICAgICAgcmV0dXJuIG5vcm1hbGl6ZVNjb3BlZFNsb3RzKGRhdGEuc2NvcGVkU2xvdHMsIHRoaXMuc2xvdHMoKSlcbiAgICB9XG4gIH0pKTtcblxuICAvLyBzdXBwb3J0IGZvciBjb21waWxlZCBmdW5jdGlvbmFsIHRlbXBsYXRlXG4gIGlmIChpc0NvbXBpbGVkKSB7XG4gICAgLy8gZXhwb3NpbmcgJG9wdGlvbnMgZm9yIHJlbmRlclN0YXRpYygpXG4gICAgdGhpcy4kb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgLy8gcHJlLXJlc29sdmUgc2xvdHMgZm9yIHJlbmRlclNsb3QoKVxuICAgIHRoaXMuJHNsb3RzID0gdGhpcy5zbG90cygpO1xuICAgIHRoaXMuJHNjb3BlZFNsb3RzID0gbm9ybWFsaXplU2NvcGVkU2xvdHMoZGF0YS5zY29wZWRTbG90cywgdGhpcy4kc2xvdHMpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuX3Njb3BlSWQpIHtcbiAgICB0aGlzLl9jID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHtcbiAgICAgIHZhciB2bm9kZSA9IGNyZWF0ZUVsZW1lbnQoY29udGV4dFZtLCBhLCBiLCBjLCBkLCBuZWVkTm9ybWFsaXphdGlvbik7XG4gICAgICBpZiAodm5vZGUgJiYgIUFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHZub2RlLmZuU2NvcGVJZCA9IG9wdGlvbnMuX3Njb3BlSWQ7XG4gICAgICAgIHZub2RlLmZuQ29udGV4dCA9IHBhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2bm9kZVxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fYyA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkKSB7IHJldHVybiBjcmVhdGVFbGVtZW50KGNvbnRleHRWbSwgYSwgYiwgYywgZCwgbmVlZE5vcm1hbGl6YXRpb24pOyB9O1xuICB9XG59XG5cbmluc3RhbGxSZW5kZXJIZWxwZXJzKEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0LnByb3RvdHlwZSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxDb21wb25lbnQgKFxuICBDdG9yLFxuICBwcm9wc0RhdGEsXG4gIGRhdGEsXG4gIGNvbnRleHRWbSxcbiAgY2hpbGRyZW5cbikge1xuICB2YXIgb3B0aW9ucyA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBwcm9wT3B0aW9ucyA9IG9wdGlvbnMucHJvcHM7XG4gIGlmIChpc0RlZihwcm9wT3B0aW9ucykpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcE9wdGlvbnMpIHtcbiAgICAgIHByb3BzW2tleV0gPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wT3B0aW9ucywgcHJvcHNEYXRhIHx8IGVtcHR5T2JqZWN0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzRGVmKGRhdGEuYXR0cnMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEuYXR0cnMpOyB9XG4gICAgaWYgKGlzRGVmKGRhdGEucHJvcHMpKSB7IG1lcmdlUHJvcHMocHJvcHMsIGRhdGEucHJvcHMpOyB9XG4gIH1cblxuICB2YXIgcmVuZGVyQ29udGV4dCA9IG5ldyBGdW5jdGlvbmFsUmVuZGVyQ29udGV4dChcbiAgICBkYXRhLFxuICAgIHByb3BzLFxuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRleHRWbSxcbiAgICBDdG9yXG4gICk7XG5cbiAgdmFyIHZub2RlID0gb3B0aW9ucy5yZW5kZXIuY2FsbChudWxsLCByZW5kZXJDb250ZXh0Ll9jLCByZW5kZXJDb250ZXh0KTtcblxuICBpZiAodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkge1xuICAgIHJldHVybiBjbG9uZUFuZE1hcmtGdW5jdGlvbmFsUmVzdWx0KHZub2RlLCBkYXRhLCByZW5kZXJDb250ZXh0LnBhcmVudCwgb3B0aW9ucywgcmVuZGVyQ29udGV4dClcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZub2RlKSkge1xuICAgIHZhciB2bm9kZXMgPSBub3JtYWxpemVDaGlsZHJlbih2bm9kZSkgfHwgW107XG4gICAgdmFyIHJlcyA9IG5ldyBBcnJheSh2bm9kZXMubGVuZ3RoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzW2ldID0gY2xvbmVBbmRNYXJrRnVuY3Rpb25hbFJlc3VsdCh2bm9kZXNbaV0sIGRhdGEsIHJlbmRlckNvbnRleHQucGFyZW50LCBvcHRpb25zLCByZW5kZXJDb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsb25lQW5kTWFya0Z1bmN0aW9uYWxSZXN1bHQgKHZub2RlLCBkYXRhLCBjb250ZXh0Vm0sIG9wdGlvbnMsIHJlbmRlckNvbnRleHQpIHtcbiAgLy8gIzc4MTcgY2xvbmUgbm9kZSBiZWZvcmUgc2V0dGluZyBmbkNvbnRleHQsIG90aGVyd2lzZSBpZiB0aGUgbm9kZSBpcyByZXVzZWRcbiAgLy8gKGUuZy4gaXQgd2FzIGZyb20gYSBjYWNoZWQgbm9ybWFsIHNsb3QpIHRoZSBmbkNvbnRleHQgY2F1c2VzIG5hbWVkIHNsb3RzXG4gIC8vIHRoYXQgc2hvdWxkIG5vdCBiZSBtYXRjaGVkIHRvIG1hdGNoLlxuICB2YXIgY2xvbmUgPSBjbG9uZVZOb2RlKHZub2RlKTtcbiAgY2xvbmUuZm5Db250ZXh0ID0gY29udGV4dFZtO1xuICBjbG9uZS5mbk9wdGlvbnMgPSBvcHRpb25zO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIChjbG9uZS5kZXZ0b29sc01ldGEgPSBjbG9uZS5kZXZ0b29sc01ldGEgfHwge30pLnJlbmRlckNvbnRleHQgPSByZW5kZXJDb250ZXh0O1xuICB9XG4gIGlmIChkYXRhLnNsb3QpIHtcbiAgICAoY2xvbmUuZGF0YSB8fCAoY2xvbmUuZGF0YSA9IHt9KSkuc2xvdCA9IGRhdGEuc2xvdDtcbiAgfVxuICByZXR1cm4gY2xvbmVcbn1cblxuZnVuY3Rpb24gbWVyZ2VQcm9wcyAodG8sIGZyb20pIHtcbiAgZm9yICh2YXIga2V5IGluIGZyb20pIHtcbiAgICB0b1tjYW1lbGl6ZShrZXkpXSA9IGZyb21ba2V5XTtcbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbi8qICAqL1xuXG4vKiAgKi9cblxuLy8gaW5saW5lIGhvb2tzIHRvIGJlIGludm9rZWQgb24gY29tcG9uZW50IFZOb2RlcyBkdXJpbmcgcGF0Y2hcbnZhciBjb21wb25lbnRWTm9kZUhvb2tzID0ge1xuICBpbml0OiBmdW5jdGlvbiBpbml0ICh2bm9kZSwgaHlkcmF0aW5nKSB7XG4gICAgaWYgKFxuICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgJiZcbiAgICAgICF2bm9kZS5jb21wb25lbnRJbnN0YW5jZS5faXNEZXN0cm95ZWQgJiZcbiAgICAgIHZub2RlLmRhdGEua2VlcEFsaXZlXG4gICAgKSB7XG4gICAgICAvLyBrZXB0LWFsaXZlIGNvbXBvbmVudHMsIHRyZWF0IGFzIGEgcGF0Y2hcbiAgICAgIHZhciBtb3VudGVkTm9kZSA9IHZub2RlOyAvLyB3b3JrIGFyb3VuZCBmbG93XG4gICAgICBjb21wb25lbnRWTm9kZUhvb2tzLnByZXBhdGNoKG1vdW50ZWROb2RlLCBtb3VudGVkTm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjaGlsZCA9IHZub2RlLmNvbXBvbmVudEluc3RhbmNlID0gY3JlYXRlQ29tcG9uZW50SW5zdGFuY2VGb3JWbm9kZShcbiAgICAgICAgdm5vZGUsXG4gICAgICAgIGFjdGl2ZUluc3RhbmNlXG4gICAgICApO1xuICAgICAgY2hpbGQuJG1vdW50KGh5ZHJhdGluZyA/IHZub2RlLmVsbSA6IHVuZGVmaW5lZCwgaHlkcmF0aW5nKTtcbiAgICB9XG4gIH0sXG5cbiAgcHJlcGF0Y2g6IGZ1bmN0aW9uIHByZXBhdGNoIChvbGRWbm9kZSwgdm5vZGUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHZub2RlLmNvbXBvbmVudE9wdGlvbnM7XG4gICAgdmFyIGNoaWxkID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBvbGRWbm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICB1cGRhdGVDaGlsZENvbXBvbmVudChcbiAgICAgIGNoaWxkLFxuICAgICAgb3B0aW9ucy5wcm9wc0RhdGEsIC8vIHVwZGF0ZWQgcHJvcHNcbiAgICAgIG9wdGlvbnMubGlzdGVuZXJzLCAvLyB1cGRhdGVkIGxpc3RlbmVyc1xuICAgICAgdm5vZGUsIC8vIG5ldyBwYXJlbnQgdm5vZGVcbiAgICAgIG9wdGlvbnMuY2hpbGRyZW4gLy8gbmV3IGNoaWxkcmVuXG4gICAgKTtcbiAgfSxcblxuICBpbnNlcnQ6IGZ1bmN0aW9uIGluc2VydCAodm5vZGUpIHtcbiAgICB2YXIgY29udGV4dCA9IHZub2RlLmNvbnRleHQ7XG4gICAgdmFyIGNvbXBvbmVudEluc3RhbmNlID0gdm5vZGUuY29tcG9uZW50SW5zdGFuY2U7XG4gICAgaWYgKCFjb21wb25lbnRJbnN0YW5jZS5faXNNb3VudGVkKSB7XG4gICAgICBjYWxsSG9vayhjb21wb25lbnRJbnN0YW5jZSwgJ29uU2VydmljZUNyZWF0ZWQnKTtcbiAgICAgIGNhbGxIb29rKGNvbXBvbmVudEluc3RhbmNlLCAnb25TZXJ2aWNlQXR0YWNoZWQnKTtcbiAgICAgIGNvbXBvbmVudEluc3RhbmNlLl9pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgY2FsbEhvb2soY29tcG9uZW50SW5zdGFuY2UsICdtb3VudGVkJyk7XG4gICAgfVxuICAgIGlmICh2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgaWYgKGNvbnRleHQuX2lzTW91bnRlZCkge1xuICAgICAgICAvLyB2dWUtcm91dGVyIzEyMTJcbiAgICAgICAgLy8gRHVyaW5nIHVwZGF0ZXMsIGEga2VwdC1hbGl2ZSBjb21wb25lbnQncyBjaGlsZCBjb21wb25lbnRzIG1heVxuICAgICAgICAvLyBjaGFuZ2UsIHNvIGRpcmVjdGx5IHdhbGtpbmcgdGhlIHRyZWUgaGVyZSBtYXkgY2FsbCBhY3RpdmF0ZWQgaG9va3NcbiAgICAgICAgLy8gb24gaW5jb3JyZWN0IGNoaWxkcmVuLiBJbnN0ZWFkIHdlIHB1c2ggdGhlbSBpbnRvIGEgcXVldWUgd2hpY2ggd2lsbFxuICAgICAgICAvLyBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIHdob2xlIHBhdGNoIHByb2Nlc3MgZW5kZWQuXG4gICAgICAgIHF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGl2YXRlQ2hpbGRDb21wb25lbnQoY29tcG9uZW50SW5zdGFuY2UsIHRydWUgLyogZGlyZWN0ICovKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgZGVzdHJveTogZnVuY3Rpb24gZGVzdHJveSAodm5vZGUpIHtcbiAgICB2YXIgY29tcG9uZW50SW5zdGFuY2UgPSB2bm9kZS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICBpZiAoIWNvbXBvbmVudEluc3RhbmNlLl9pc0Rlc3Ryb3llZCkge1xuICAgICAgaWYgKCF2bm9kZS5kYXRhLmtlZXBBbGl2ZSkge1xuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS4kZGVzdHJveSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KGNvbXBvbmVudEluc3RhbmNlLCB0cnVlIC8qIGRpcmVjdCAqLyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuXG52YXIgaG9va3NUb01lcmdlID0gT2JqZWN0LmtleXMoY29tcG9uZW50Vk5vZGVIb29rcyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBvbmVudCAoXG4gIEN0b3IsXG4gIGRhdGEsXG4gIGNvbnRleHQsXG4gIGNoaWxkcmVuLFxuICB0YWdcbikge1xuICBpZiAoaXNVbmRlZihDdG9yKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgdmFyIGJhc2VDdG9yID0gY29udGV4dC4kb3B0aW9ucy5fYmFzZTtcblxuICAvLyBwbGFpbiBvcHRpb25zIG9iamVjdDogdHVybiBpdCBpbnRvIGEgY29uc3RydWN0b3JcbiAgaWYgKGlzT2JqZWN0KEN0b3IpKSB7XG4gICAgQ3RvciA9IGJhc2VDdG9yLmV4dGVuZChDdG9yKTtcbiAgfVxuXG4gIC8vIGlmIGF0IHRoaXMgc3RhZ2UgaXQncyBub3QgYSBjb25zdHJ1Y3RvciBvciBhbiBhc3luYyBjb21wb25lbnQgZmFjdG9yeSxcbiAgLy8gcmVqZWN0LlxuICBpZiAodHlwZW9mIEN0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgd2FybigoXCJJbnZhbGlkIENvbXBvbmVudCBkZWZpbml0aW9uOiBcIiArIChTdHJpbmcoQ3RvcikpKSwgY29udGV4dCk7XG4gICAgfVxuICAgIHJldHVyblxuICB9XG5cbiAgLy8gYXN5bmMgY29tcG9uZW50XG4gIHZhciBhc3luY0ZhY3Rvcnk7XG4gIGlmIChpc1VuZGVmKEN0b3IuY2lkKSkge1xuICAgIGFzeW5jRmFjdG9yeSA9IEN0b3I7XG4gICAgQ3RvciA9IHJlc29sdmVBc3luY0NvbXBvbmVudChhc3luY0ZhY3RvcnksIGJhc2VDdG9yKTtcbiAgICBpZiAoQ3RvciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciBub2RlIGZvciBhc3luYyBjb21wb25lbnQsIHdoaWNoIGlzIHJlbmRlcmVkXG4gICAgICAvLyBhcyBhIGNvbW1lbnQgbm9kZSBidXQgcHJlc2VydmVzIGFsbCB0aGUgcmF3IGluZm9ybWF0aW9uIGZvciB0aGUgbm9kZS5cbiAgICAgIC8vIHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZm9yIGFzeW5jIHNlcnZlci1yZW5kZXJpbmcgYW5kIGh5ZHJhdGlvbi5cbiAgICAgIHJldHVybiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyKFxuICAgICAgICBhc3luY0ZhY3RvcnksXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICB0YWdcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBkYXRhID0gZGF0YSB8fCB7fTtcblxuICAvLyByZXNvbHZlIGNvbnN0cnVjdG9yIG9wdGlvbnMgaW4gY2FzZSBnbG9iYWwgbWl4aW5zIGFyZSBhcHBsaWVkIGFmdGVyXG4gIC8vIGNvbXBvbmVudCBjb25zdHJ1Y3RvciBjcmVhdGlvblxuICByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3IpO1xuXG4gIC8vIHRyYW5zZm9ybSBjb21wb25lbnQgdi1tb2RlbCBkYXRhIGludG8gcHJvcHMgJiBldmVudHNcbiAgaWYgKGlzRGVmKGRhdGEubW9kZWwpKSB7XG4gICAgdHJhbnNmb3JtTW9kZWwoQ3Rvci5vcHRpb25zLCBkYXRhKTtcbiAgfVxuXG4gIC8vIGV4dHJhY3QgcHJvcHNcbiAgdmFyIHByb3BzRGF0YSA9IGV4dHJhY3RQcm9wc0Zyb21WTm9kZURhdGEoZGF0YSwgQ3RvciwgdGFnLCBjb250ZXh0KTsgLy8gZml4ZWQgYnkgeHh4eHh4XG5cbiAgLy8gZnVuY3Rpb25hbCBjb21wb25lbnRcbiAgaWYgKGlzVHJ1ZShDdG9yLm9wdGlvbnMuZnVuY3Rpb25hbCkpIHtcbiAgICByZXR1cm4gY3JlYXRlRnVuY3Rpb25hbENvbXBvbmVudChDdG9yLCBwcm9wc0RhdGEsIGRhdGEsIGNvbnRleHQsIGNoaWxkcmVuKVxuICB9XG5cbiAgLy8gZXh0cmFjdCBsaXN0ZW5lcnMsIHNpbmNlIHRoZXNlIG5lZWRzIHRvIGJlIHRyZWF0ZWQgYXNcbiAgLy8gY2hpbGQgY29tcG9uZW50IGxpc3RlbmVycyBpbnN0ZWFkIG9mIERPTSBsaXN0ZW5lcnNcbiAgdmFyIGxpc3RlbmVycyA9IGRhdGEub247XG4gIC8vIHJlcGxhY2Ugd2l0aCBsaXN0ZW5lcnMgd2l0aCAubmF0aXZlIG1vZGlmaWVyXG4gIC8vIHNvIGl0IGdldHMgcHJvY2Vzc2VkIGR1cmluZyBwYXJlbnQgY29tcG9uZW50IHBhdGNoLlxuICBkYXRhLm9uID0gZGF0YS5uYXRpdmVPbjtcblxuICBpZiAoaXNUcnVlKEN0b3Iub3B0aW9ucy5hYnN0cmFjdCkpIHtcbiAgICAvLyBhYnN0cmFjdCBjb21wb25lbnRzIGRvIG5vdCBrZWVwIGFueXRoaW5nXG4gICAgLy8gb3RoZXIgdGhhbiBwcm9wcyAmIGxpc3RlbmVycyAmIHNsb3RcblxuICAgIC8vIHdvcmsgYXJvdW5kIGZsb3dcbiAgICB2YXIgc2xvdCA9IGRhdGEuc2xvdDtcbiAgICBkYXRhID0ge307XG4gICAgaWYgKHNsb3QpIHtcbiAgICAgIGRhdGEuc2xvdCA9IHNsb3Q7XG4gICAgfVxuICB9XG5cbiAgLy8gaW5zdGFsbCBjb21wb25lbnQgbWFuYWdlbWVudCBob29rcyBvbnRvIHRoZSBwbGFjZWhvbGRlciBub2RlXG4gIGluc3RhbGxDb21wb25lbnRIb29rcyhkYXRhKTtcblxuICAvLyByZXR1cm4gYSBwbGFjZWhvbGRlciB2bm9kZVxuICB2YXIgbmFtZSA9IEN0b3Iub3B0aW9ucy5uYW1lIHx8IHRhZztcbiAgdmFyIHZub2RlID0gbmV3IFZOb2RlKFxuICAgIChcInZ1ZS1jb21wb25lbnQtXCIgKyAoQ3Rvci5jaWQpICsgKG5hbWUgPyAoXCItXCIgKyBuYW1lKSA6ICcnKSksXG4gICAgZGF0YSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY29udGV4dCxcbiAgICB7IEN0b3I6IEN0b3IsIHByb3BzRGF0YTogcHJvcHNEYXRhLCBsaXN0ZW5lcnM6IGxpc3RlbmVycywgdGFnOiB0YWcsIGNoaWxkcmVuOiBjaGlsZHJlbiB9LFxuICAgIGFzeW5jRmFjdG9yeVxuICApO1xuXG4gIHJldHVybiB2bm9kZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDb21wb25lbnRJbnN0YW5jZUZvclZub2RlIChcbiAgdm5vZGUsIC8vIHdlIGtub3cgaXQncyBNb3VudGVkQ29tcG9uZW50Vk5vZGUgYnV0IGZsb3cgZG9lc24ndFxuICBwYXJlbnQgLy8gYWN0aXZlSW5zdGFuY2UgaW4gbGlmZWN5Y2xlIHN0YXRlXG4pIHtcbiAgdmFyIG9wdGlvbnMgPSB7XG4gICAgX2lzQ29tcG9uZW50OiB0cnVlLFxuICAgIF9wYXJlbnRWbm9kZTogdm5vZGUsXG4gICAgcGFyZW50OiBwYXJlbnRcbiAgfTtcbiAgLy8gY2hlY2sgaW5saW5lLXRlbXBsYXRlIHJlbmRlciBmdW5jdGlvbnNcbiAgdmFyIGlubGluZVRlbXBsYXRlID0gdm5vZGUuZGF0YS5pbmxpbmVUZW1wbGF0ZTtcbiAgaWYgKGlzRGVmKGlubGluZVRlbXBsYXRlKSkge1xuICAgIG9wdGlvbnMucmVuZGVyID0gaW5saW5lVGVtcGxhdGUucmVuZGVyO1xuICAgIG9wdGlvbnMuc3RhdGljUmVuZGVyRm5zID0gaW5saW5lVGVtcGxhdGUuc3RhdGljUmVuZGVyRm5zO1xuICB9XG4gIHJldHVybiBuZXcgdm5vZGUuY29tcG9uZW50T3B0aW9ucy5DdG9yKG9wdGlvbnMpXG59XG5cbmZ1bmN0aW9uIGluc3RhbGxDb21wb25lbnRIb29rcyAoZGF0YSkge1xuICB2YXIgaG9va3MgPSBkYXRhLmhvb2sgfHwgKGRhdGEuaG9vayA9IHt9KTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob29rc1RvTWVyZ2UubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gaG9va3NUb01lcmdlW2ldO1xuICAgIHZhciBleGlzdGluZyA9IGhvb2tzW2tleV07XG4gICAgdmFyIHRvTWVyZ2UgPSBjb21wb25lbnRWTm9kZUhvb2tzW2tleV07XG4gICAgaWYgKGV4aXN0aW5nICE9PSB0b01lcmdlICYmICEoZXhpc3RpbmcgJiYgZXhpc3RpbmcuX21lcmdlZCkpIHtcbiAgICAgIGhvb2tzW2tleV0gPSBleGlzdGluZyA/IG1lcmdlSG9vayQxKHRvTWVyZ2UsIGV4aXN0aW5nKSA6IHRvTWVyZ2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1lcmdlSG9vayQxIChmMSwgZjIpIHtcbiAgdmFyIG1lcmdlZCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgLy8gZmxvdyBjb21wbGFpbnMgYWJvdXQgZXh0cmEgYXJncyB3aGljaCBpcyB3aHkgd2UgdXNlIGFueVxuICAgIGYxKGEsIGIpO1xuICAgIGYyKGEsIGIpO1xuICB9O1xuICBtZXJnZWQuX21lcmdlZCA9IHRydWU7XG4gIHJldHVybiBtZXJnZWRcbn1cblxuLy8gdHJhbnNmb3JtIGNvbXBvbmVudCB2LW1vZGVsIGluZm8gKHZhbHVlIGFuZCBjYWxsYmFjaykgaW50b1xuLy8gcHJvcCBhbmQgZXZlbnQgaGFuZGxlciByZXNwZWN0aXZlbHkuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Nb2RlbCAob3B0aW9ucywgZGF0YSkge1xuICB2YXIgcHJvcCA9IChvcHRpb25zLm1vZGVsICYmIG9wdGlvbnMubW9kZWwucHJvcCkgfHwgJ3ZhbHVlJztcbiAgdmFyIGV2ZW50ID0gKG9wdGlvbnMubW9kZWwgJiYgb3B0aW9ucy5tb2RlbC5ldmVudCkgfHwgJ2lucHV0J1xuICA7KGRhdGEuYXR0cnMgfHwgKGRhdGEuYXR0cnMgPSB7fSkpW3Byb3BdID0gZGF0YS5tb2RlbC52YWx1ZTtcbiAgdmFyIG9uID0gZGF0YS5vbiB8fCAoZGF0YS5vbiA9IHt9KTtcbiAgdmFyIGV4aXN0aW5nID0gb25bZXZlbnRdO1xuICB2YXIgY2FsbGJhY2sgPSBkYXRhLm1vZGVsLmNhbGxiYWNrO1xuICBpZiAoaXNEZWYoZXhpc3RpbmcpKSB7XG4gICAgaWYgKFxuICAgICAgQXJyYXkuaXNBcnJheShleGlzdGluZylcbiAgICAgICAgPyBleGlzdGluZy5pbmRleE9mKGNhbGxiYWNrKSA9PT0gLTFcbiAgICAgICAgOiBleGlzdGluZyAhPT0gY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIG9uW2V2ZW50XSA9IFtjYWxsYmFja10uY29uY2F0KGV4aXN0aW5nKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb25bZXZlbnRdID0gY2FsbGJhY2s7XG4gIH1cbn1cblxuLyogICovXG5cbnZhciBTSU1QTEVfTk9STUFMSVpFID0gMTtcbnZhciBBTFdBWVNfTk9STUFMSVpFID0gMjtcblxuLy8gd3JhcHBlciBmdW5jdGlvbiBmb3IgcHJvdmlkaW5nIGEgbW9yZSBmbGV4aWJsZSBpbnRlcmZhY2Vcbi8vIHdpdGhvdXQgZ2V0dGluZyB5ZWxsZWQgYXQgYnkgZmxvd1xuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCAoXG4gIGNvbnRleHQsXG4gIHRhZyxcbiAgZGF0YSxcbiAgY2hpbGRyZW4sXG4gIG5vcm1hbGl6YXRpb25UeXBlLFxuICBhbHdheXNOb3JtYWxpemVcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSB8fCBpc1ByaW1pdGl2ZShkYXRhKSkge1xuICAgIG5vcm1hbGl6YXRpb25UeXBlID0gY2hpbGRyZW47XG4gICAgY2hpbGRyZW4gPSBkYXRhO1xuICAgIGRhdGEgPSB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKGlzVHJ1ZShhbHdheXNOb3JtYWxpemUpKSB7XG4gICAgbm9ybWFsaXphdGlvblR5cGUgPSBBTFdBWVNfTk9STUFMSVpFO1xuICB9XG4gIHJldHVybiBfY3JlYXRlRWxlbWVudChjb250ZXh0LCB0YWcsIGRhdGEsIGNoaWxkcmVuLCBub3JtYWxpemF0aW9uVHlwZSlcbn1cblxuZnVuY3Rpb24gX2NyZWF0ZUVsZW1lbnQgKFxuICBjb250ZXh0LFxuICB0YWcsXG4gIGRhdGEsXG4gIGNoaWxkcmVuLFxuICBub3JtYWxpemF0aW9uVHlwZVxuKSB7XG4gIGlmIChpc0RlZihkYXRhKSAmJiBpc0RlZigoZGF0YSkuX19vYl9fKSkge1xuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgIFwiQXZvaWQgdXNpbmcgb2JzZXJ2ZWQgZGF0YSBvYmplY3QgYXMgdm5vZGUgZGF0YTogXCIgKyAoSlNPTi5zdHJpbmdpZnkoZGF0YSkpICsgXCJcXG5cIiArXG4gICAgICAnQWx3YXlzIGNyZWF0ZSBmcmVzaCB2bm9kZSBkYXRhIG9iamVjdHMgaW4gZWFjaCByZW5kZXIhJyxcbiAgICAgIGNvbnRleHRcbiAgICApO1xuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyBvYmplY3Qgc3ludGF4IGluIHYtYmluZFxuICBpZiAoaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5pcykpIHtcbiAgICB0YWcgPSBkYXRhLmlzO1xuICB9XG4gIGlmICghdGFnKSB7XG4gICAgLy8gaW4gY2FzZSBvZiBjb21wb25lbnQgOmlzIHNldCB0byBmYWxzeSB2YWx1ZVxuICAgIHJldHVybiBjcmVhdGVFbXB0eVZOb2RlKClcbiAgfVxuICAvLyB3YXJuIGFnYWluc3Qgbm9uLXByaW1pdGl2ZSBrZXlcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiZcbiAgICBpc0RlZihkYXRhKSAmJiBpc0RlZihkYXRhLmtleSkgJiYgIWlzUHJpbWl0aXZlKGRhdGEua2V5KVxuICApIHtcbiAgICB7XG4gICAgICB3YXJuKFxuICAgICAgICAnQXZvaWQgdXNpbmcgbm9uLXByaW1pdGl2ZSB2YWx1ZSBhcyBrZXksICcgK1xuICAgICAgICAndXNlIHN0cmluZy9udW1iZXIgdmFsdWUgaW5zdGVhZC4nLFxuICAgICAgICBjb250ZXh0XG4gICAgICApO1xuICAgIH1cbiAgfVxuICAvLyBzdXBwb3J0IHNpbmdsZSBmdW5jdGlvbiBjaGlsZHJlbiBhcyBkZWZhdWx0IHNjb3BlZCBzbG90XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgIHR5cGVvZiBjaGlsZHJlblswXSA9PT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICBkYXRhID0gZGF0YSB8fCB7fTtcbiAgICBkYXRhLnNjb3BlZFNsb3RzID0geyBkZWZhdWx0OiBjaGlsZHJlblswXSB9O1xuICAgIGNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH1cbiAgaWYgKG5vcm1hbGl6YXRpb25UeXBlID09PSBBTFdBWVNfTk9STUFMSVpFKSB7XG4gICAgY2hpbGRyZW4gPSBub3JtYWxpemVDaGlsZHJlbihjaGlsZHJlbik7XG4gIH0gZWxzZSBpZiAobm9ybWFsaXphdGlvblR5cGUgPT09IFNJTVBMRV9OT1JNQUxJWkUpIHtcbiAgICBjaGlsZHJlbiA9IHNpbXBsZU5vcm1hbGl6ZUNoaWxkcmVuKGNoaWxkcmVuKTtcbiAgfVxuICB2YXIgdm5vZGUsIG5zO1xuICBpZiAodHlwZW9mIHRhZyA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgQ3RvcjtcbiAgICBucyA9IChjb250ZXh0LiR2bm9kZSAmJiBjb250ZXh0LiR2bm9kZS5ucykgfHwgY29uZmlnLmdldFRhZ05hbWVzcGFjZSh0YWcpO1xuICAgIGlmIChjb25maWcuaXNSZXNlcnZlZFRhZyh0YWcpKSB7XG4gICAgICAvLyBwbGF0Zm9ybSBidWlsdC1pbiBlbGVtZW50c1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaXNEZWYoZGF0YSkgJiYgaXNEZWYoZGF0YS5uYXRpdmVPbikpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJUaGUgLm5hdGl2ZSBtb2RpZmllciBmb3Igdi1vbiBpcyBvbmx5IHZhbGlkIG9uIGNvbXBvbmVudHMgYnV0IGl0IHdhcyB1c2VkIG9uIDxcIiArIHRhZyArIFwiPi5cIiksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdm5vZGUgPSBuZXcgVk5vZGUoXG4gICAgICAgIGNvbmZpZy5wYXJzZVBsYXRmb3JtVGFnTmFtZSh0YWcpLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICgoIWRhdGEgfHwgIWRhdGEucHJlKSAmJiBpc0RlZihDdG9yID0gcmVzb2x2ZUFzc2V0KGNvbnRleHQuJG9wdGlvbnMsICdjb21wb25lbnRzJywgdGFnKSkpIHtcbiAgICAgIC8vIGNvbXBvbmVudFxuICAgICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQoQ3RvciwgZGF0YSwgY29udGV4dCwgY2hpbGRyZW4sIHRhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVua25vd24gb3IgdW5saXN0ZWQgbmFtZXNwYWNlZCBlbGVtZW50c1xuICAgICAgLy8gY2hlY2sgYXQgcnVudGltZSBiZWNhdXNlIGl0IG1heSBnZXQgYXNzaWduZWQgYSBuYW1lc3BhY2Ugd2hlbiBpdHNcbiAgICAgIC8vIHBhcmVudCBub3JtYWxpemVzIGNoaWxkcmVuXG4gICAgICB2bm9kZSA9IG5ldyBWTm9kZShcbiAgICAgICAgdGFnLCBkYXRhLCBjaGlsZHJlbixcbiAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbnRleHRcbiAgICAgICk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGRpcmVjdCBjb21wb25lbnQgb3B0aW9ucyAvIGNvbnN0cnVjdG9yXG4gICAgdm5vZGUgPSBjcmVhdGVDb21wb25lbnQodGFnLCBkYXRhLCBjb250ZXh0LCBjaGlsZHJlbik7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgcmV0dXJuIHZub2RlXG4gIH0gZWxzZSBpZiAoaXNEZWYodm5vZGUpKSB7XG4gICAgaWYgKGlzRGVmKG5zKSkgeyBhcHBseU5TKHZub2RlLCBucyk7IH1cbiAgICBpZiAoaXNEZWYoZGF0YSkpIHsgcmVnaXN0ZXJEZWVwQmluZGluZ3MoZGF0YSk7IH1cbiAgICByZXR1cm4gdm5vZGVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY3JlYXRlRW1wdHlWTm9kZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlOUyAodm5vZGUsIG5zLCBmb3JjZSkge1xuICB2bm9kZS5ucyA9IG5zO1xuICBpZiAodm5vZGUudGFnID09PSAnZm9yZWlnbk9iamVjdCcpIHtcbiAgICAvLyB1c2UgZGVmYXVsdCBuYW1lc3BhY2UgaW5zaWRlIGZvcmVpZ25PYmplY3RcbiAgICBucyA9IHVuZGVmaW5lZDtcbiAgICBmb3JjZSA9IHRydWU7XG4gIH1cbiAgaWYgKGlzRGVmKHZub2RlLmNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSB2bm9kZS5jaGlsZHJlbltpXTtcbiAgICAgIGlmIChpc0RlZihjaGlsZC50YWcpICYmIChcbiAgICAgICAgaXNVbmRlZihjaGlsZC5ucykgfHwgKGlzVHJ1ZShmb3JjZSkgJiYgY2hpbGQudGFnICE9PSAnc3ZnJykpKSB7XG4gICAgICAgIGFwcGx5TlMoY2hpbGQsIG5zLCBmb3JjZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIHJlZiAjNTMxOFxuLy8gbmVjZXNzYXJ5IHRvIGVuc3VyZSBwYXJlbnQgcmUtcmVuZGVyIHdoZW4gZGVlcCBiaW5kaW5ncyBsaWtlIDpzdHlsZSBhbmRcbi8vIDpjbGFzcyBhcmUgdXNlZCBvbiBzbG90IG5vZGVzXG5mdW5jdGlvbiByZWdpc3RlckRlZXBCaW5kaW5ncyAoZGF0YSkge1xuICBpZiAoaXNPYmplY3QoZGF0YS5zdHlsZSkpIHtcbiAgICB0cmF2ZXJzZShkYXRhLnN0eWxlKTtcbiAgfVxuICBpZiAoaXNPYmplY3QoZGF0YS5jbGFzcykpIHtcbiAgICB0cmF2ZXJzZShkYXRhLmNsYXNzKTtcbiAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdFJlbmRlciAodm0pIHtcbiAgdm0uX3Zub2RlID0gbnVsbDsgLy8gdGhlIHJvb3Qgb2YgdGhlIGNoaWxkIHRyZWVcbiAgdm0uX3N0YXRpY1RyZWVzID0gbnVsbDsgLy8gdi1vbmNlIGNhY2hlZCB0cmVlc1xuICB2YXIgb3B0aW9ucyA9IHZtLiRvcHRpb25zO1xuICB2YXIgcGFyZW50Vm5vZGUgPSB2bS4kdm5vZGUgPSBvcHRpb25zLl9wYXJlbnRWbm9kZTsgLy8gdGhlIHBsYWNlaG9sZGVyIG5vZGUgaW4gcGFyZW50IHRyZWVcbiAgdmFyIHJlbmRlckNvbnRleHQgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5jb250ZXh0O1xuICB2bS4kc2xvdHMgPSByZXNvbHZlU2xvdHMob3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4sIHJlbmRlckNvbnRleHQpO1xuICB2bS4kc2NvcGVkU2xvdHMgPSBlbXB0eU9iamVjdDtcbiAgLy8gYmluZCB0aGUgY3JlYXRlRWxlbWVudCBmbiB0byB0aGlzIGluc3RhbmNlXG4gIC8vIHNvIHRoYXQgd2UgZ2V0IHByb3BlciByZW5kZXIgY29udGV4dCBpbnNpZGUgaXQuXG4gIC8vIGFyZ3Mgb3JkZXI6IHRhZywgZGF0YSwgY2hpbGRyZW4sIG5vcm1hbGl6YXRpb25UeXBlLCBhbHdheXNOb3JtYWxpemVcbiAgLy8gaW50ZXJuYWwgdmVyc2lvbiBpcyB1c2VkIGJ5IHJlbmRlciBmdW5jdGlvbnMgY29tcGlsZWQgZnJvbSB0ZW1wbGF0ZXNcbiAgdm0uX2MgPSBmdW5jdGlvbiAoYSwgYiwgYywgZCkgeyByZXR1cm4gY3JlYXRlRWxlbWVudCh2bSwgYSwgYiwgYywgZCwgZmFsc2UpOyB9O1xuICAvLyBub3JtYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGZvciB0aGUgcHVibGljIHZlcnNpb24sIHVzZWQgaW5cbiAgLy8gdXNlci13cml0dGVuIHJlbmRlciBmdW5jdGlvbnMuXG4gIHZtLiRjcmVhdGVFbGVtZW50ID0gZnVuY3Rpb24gKGEsIGIsIGMsIGQpIHsgcmV0dXJuIGNyZWF0ZUVsZW1lbnQodm0sIGEsIGIsIGMsIGQsIHRydWUpOyB9O1xuXG4gIC8vICRhdHRycyAmICRsaXN0ZW5lcnMgYXJlIGV4cG9zZWQgZm9yIGVhc2llciBIT0MgY3JlYXRpb24uXG4gIC8vIHRoZXkgbmVlZCB0byBiZSByZWFjdGl2ZSBzbyB0aGF0IEhPQ3MgdXNpbmcgdGhlbSBhcmUgYWx3YXlzIHVwZGF0ZWRcbiAgdmFyIHBhcmVudERhdGEgPSBwYXJlbnRWbm9kZSAmJiBwYXJlbnRWbm9kZS5kYXRhO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZGVmaW5lUmVhY3RpdmUkJDEodm0sICckYXR0cnMnLCBwYXJlbnREYXRhICYmIHBhcmVudERhdGEuYXR0cnMgfHwgZW1wdHlPYmplY3QsIGZ1bmN0aW9uICgpIHtcbiAgICAgICFpc1VwZGF0aW5nQ2hpbGRDb21wb25lbnQgJiYgd2FybihcIiRhdHRycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGxpc3RlbmVycycsIG9wdGlvbnMuX3BhcmVudExpc3RlbmVycyB8fCBlbXB0eU9iamVjdCwgZnVuY3Rpb24gKCkge1xuICAgICAgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCAmJiB3YXJuKFwiJGxpc3RlbmVycyBpcyByZWFkb25seS5cIiwgdm0pO1xuICAgIH0sIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIGRlZmluZVJlYWN0aXZlJCQxKHZtLCAnJGF0dHJzJywgcGFyZW50RGF0YSAmJiBwYXJlbnREYXRhLmF0dHJzIHx8IGVtcHR5T2JqZWN0LCBudWxsLCB0cnVlKTtcbiAgICBkZWZpbmVSZWFjdGl2ZSQkMSh2bSwgJyRsaXN0ZW5lcnMnLCBvcHRpb25zLl9wYXJlbnRMaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3QsIG51bGwsIHRydWUpO1xuICB9XG59XG5cbnZhciBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2UgPSBudWxsO1xuXG5mdW5jdGlvbiByZW5kZXJNaXhpbiAoVnVlKSB7XG4gIC8vIGluc3RhbGwgcnVudGltZSBjb252ZW5pZW5jZSBoZWxwZXJzXG4gIGluc3RhbGxSZW5kZXJIZWxwZXJzKFZ1ZS5wcm90b3R5cGUpO1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgcmV0dXJuIG5leHRUaWNrKGZuLCB0aGlzKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuX3JlbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIHZhciByZWYgPSB2bS4kb3B0aW9ucztcbiAgICB2YXIgcmVuZGVyID0gcmVmLnJlbmRlcjtcbiAgICB2YXIgX3BhcmVudFZub2RlID0gcmVmLl9wYXJlbnRWbm9kZTtcblxuICAgIGlmIChfcGFyZW50Vm5vZGUpIHtcbiAgICAgIHZtLiRzY29wZWRTbG90cyA9IG5vcm1hbGl6ZVNjb3BlZFNsb3RzKFxuICAgICAgICBfcGFyZW50Vm5vZGUuZGF0YS5zY29wZWRTbG90cyxcbiAgICAgICAgdm0uJHNsb3RzLFxuICAgICAgICB2bS4kc2NvcGVkU2xvdHNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gc2V0IHBhcmVudCB2bm9kZS4gdGhpcyBhbGxvd3MgcmVuZGVyIGZ1bmN0aW9ucyB0byBoYXZlIGFjY2Vzc1xuICAgIC8vIHRvIHRoZSBkYXRhIG9uIHRoZSBwbGFjZWhvbGRlciBub2RlLlxuICAgIHZtLiR2bm9kZSA9IF9wYXJlbnRWbm9kZTtcbiAgICAvLyByZW5kZXIgc2VsZlxuICAgIHZhciB2bm9kZTtcbiAgICB0cnkge1xuICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIG1haW50YWluIGEgc3RhY2sgYmVjYXVzZSBhbGwgcmVuZGVyIGZucyBhcmUgY2FsbGVkXG4gICAgICAvLyBzZXBhcmF0ZWx5IGZyb20gb25lIGFub3RoZXIuIE5lc3RlZCBjb21wb25lbnQncyByZW5kZXIgZm5zIGFyZSBjYWxsZWRcbiAgICAgIC8vIHdoZW4gcGFyZW50IGNvbXBvbmVudCBpcyBwYXRjaGVkLlxuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gdm07XG4gICAgICB2bm9kZSA9IHJlbmRlci5jYWxsKHZtLl9yZW5kZXJQcm94eSwgdm0uJGNyZWF0ZUVsZW1lbnQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlclwiKTtcbiAgICAgIC8vIHJldHVybiBlcnJvciByZW5kZXIgcmVzdWx0LFxuICAgICAgLy8gb3IgcHJldmlvdXMgdm5vZGUgdG8gcHJldmVudCByZW5kZXIgZXJyb3IgY2F1c2luZyBibGFuayBjb21wb25lbnRcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB2bS4kb3B0aW9ucy5yZW5kZXJFcnJvcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHZub2RlID0gdm0uJG9wdGlvbnMucmVuZGVyRXJyb3IuY2FsbCh2bS5fcmVuZGVyUHJveHksIHZtLiRjcmVhdGVFbGVtZW50LCBlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCBcInJlbmRlckVycm9yXCIpO1xuICAgICAgICAgIHZub2RlID0gdm0uX3Zub2RlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZSA9IHZtLl92bm9kZTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFJlbmRlcmluZ0luc3RhbmNlID0gbnVsbDtcbiAgICB9XG4gICAgLy8gaWYgdGhlIHJldHVybmVkIGFycmF5IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgbm9kZSwgYWxsb3cgaXRcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2bm9kZSkgJiYgdm5vZGUubGVuZ3RoID09PSAxKSB7XG4gICAgICB2bm9kZSA9IHZub2RlWzBdO1xuICAgIH1cbiAgICAvLyByZXR1cm4gZW1wdHkgdm5vZGUgaW4gY2FzZSB0aGUgcmVuZGVyIGZ1bmN0aW9uIGVycm9yZWQgb3V0XG4gICAgaWYgKCEodm5vZGUgaW5zdGFuY2VvZiBWTm9kZSkpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIEFycmF5LmlzQXJyYXkodm5vZGUpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ011bHRpcGxlIHJvb3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSByZW5kZXIgZnVuY3Rpb24uIFJlbmRlciBmdW5jdGlvbiAnICtcbiAgICAgICAgICAnc2hvdWxkIHJldHVybiBhIHNpbmdsZSByb290IG5vZGUuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdm5vZGUgPSBjcmVhdGVFbXB0eVZOb2RlKCk7XG4gICAgfVxuICAgIC8vIHNldCBwYXJlbnRcbiAgICB2bm9kZS5wYXJlbnQgPSBfcGFyZW50Vm5vZGU7XG4gICAgcmV0dXJuIHZub2RlXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBlbnN1cmVDdG9yIChjb21wLCBiYXNlKSB7XG4gIGlmIChcbiAgICBjb21wLl9fZXNNb2R1bGUgfHxcbiAgICAoaGFzU3ltYm9sICYmIGNvbXBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ01vZHVsZScpXG4gICkge1xuICAgIGNvbXAgPSBjb21wLmRlZmF1bHQ7XG4gIH1cbiAgcmV0dXJuIGlzT2JqZWN0KGNvbXApXG4gICAgPyBiYXNlLmV4dGVuZChjb21wKVxuICAgIDogY29tcFxufVxuXG5mdW5jdGlvbiBjcmVhdGVBc3luY1BsYWNlaG9sZGVyIChcbiAgZmFjdG9yeSxcbiAgZGF0YSxcbiAgY29udGV4dCxcbiAgY2hpbGRyZW4sXG4gIHRhZ1xuKSB7XG4gIHZhciBub2RlID0gY3JlYXRlRW1wdHlWTm9kZSgpO1xuICBub2RlLmFzeW5jRmFjdG9yeSA9IGZhY3Rvcnk7XG4gIG5vZGUuYXN5bmNNZXRhID0geyBkYXRhOiBkYXRhLCBjb250ZXh0OiBjb250ZXh0LCBjaGlsZHJlbjogY2hpbGRyZW4sIHRhZzogdGFnIH07XG4gIHJldHVybiBub2RlXG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBc3luY0NvbXBvbmVudCAoXG4gIGZhY3RvcnksXG4gIGJhc2VDdG9yXG4pIHtcbiAgaWYgKGlzVHJ1ZShmYWN0b3J5LmVycm9yKSAmJiBpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5lcnJvckNvbXBcbiAgfVxuXG4gIGlmIChpc0RlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgIHJldHVybiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cblxuICB2YXIgb3duZXIgPSBjdXJyZW50UmVuZGVyaW5nSW5zdGFuY2U7XG4gIGlmIChvd25lciAmJiBpc0RlZihmYWN0b3J5Lm93bmVycykgJiYgZmFjdG9yeS5vd25lcnMuaW5kZXhPZihvd25lcikgPT09IC0xKSB7XG4gICAgLy8gYWxyZWFkeSBwZW5kaW5nXG4gICAgZmFjdG9yeS5vd25lcnMucHVzaChvd25lcik7XG4gIH1cblxuICBpZiAoaXNUcnVlKGZhY3RvcnkubG9hZGluZykgJiYgaXNEZWYoZmFjdG9yeS5sb2FkaW5nQ29tcCkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICB9XG5cbiAgaWYgKG93bmVyICYmICFpc0RlZihmYWN0b3J5Lm93bmVycykpIHtcbiAgICB2YXIgb3duZXJzID0gZmFjdG9yeS5vd25lcnMgPSBbb3duZXJdO1xuICAgIHZhciBzeW5jID0gdHJ1ZTtcbiAgICB2YXIgdGltZXJMb2FkaW5nID0gbnVsbDtcbiAgICB2YXIgdGltZXJUaW1lb3V0ID0gbnVsbFxuXG4gICAgOyhvd25lcikuJG9uKCdob29rOmRlc3Ryb3llZCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZShvd25lcnMsIG93bmVyKTsgfSk7XG5cbiAgICB2YXIgZm9yY2VSZW5kZXIgPSBmdW5jdGlvbiAocmVuZGVyQ29tcGxldGVkKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IG93bmVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgKG93bmVyc1tpXSkuJGZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZW5kZXJDb21wbGV0ZWQpIHtcbiAgICAgICAgb3duZXJzLmxlbmd0aCA9IDA7XG4gICAgICAgIGlmICh0aW1lckxvYWRpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJMb2FkaW5nKTtcbiAgICAgICAgICB0aW1lckxvYWRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aW1lclRpbWVvdXQgIT09IG51bGwpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXJUaW1lb3V0KTtcbiAgICAgICAgICB0aW1lclRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciByZXNvbHZlID0gb25jZShmdW5jdGlvbiAocmVzKSB7XG4gICAgICAvLyBjYWNoZSByZXNvbHZlZFxuICAgICAgZmFjdG9yeS5yZXNvbHZlZCA9IGVuc3VyZUN0b3IocmVzLCBiYXNlQ3Rvcik7XG4gICAgICAvLyBpbnZva2UgY2FsbGJhY2tzIG9ubHkgaWYgdGhpcyBpcyBub3QgYSBzeW5jaHJvbm91cyByZXNvbHZlXG4gICAgICAvLyAoYXN5bmMgcmVzb2x2ZXMgYXJlIHNoaW1tZWQgYXMgc3luY2hyb25vdXMgZHVyaW5nIFNTUilcbiAgICAgIGlmICghc3luYykge1xuICAgICAgICBmb3JjZVJlbmRlcih0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG93bmVycy5sZW5ndGggPSAwO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlamVjdCA9IG9uY2UoZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB3YXJuKFxuICAgICAgICBcIkZhaWxlZCB0byByZXNvbHZlIGFzeW5jIGNvbXBvbmVudDogXCIgKyAoU3RyaW5nKGZhY3RvcnkpKSArXG4gICAgICAgIChyZWFzb24gPyAoXCJcXG5SZWFzb246IFwiICsgcmVhc29uKSA6ICcnKVxuICAgICAgKTtcbiAgICAgIGlmIChpc0RlZihmYWN0b3J5LmVycm9yQ29tcCkpIHtcbiAgICAgICAgZmFjdG9yeS5lcnJvciA9IHRydWU7XG4gICAgICAgIGZvcmNlUmVuZGVyKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHJlcyA9IGZhY3RvcnkocmVzb2x2ZSwgcmVqZWN0KTtcblxuICAgIGlmIChpc09iamVjdChyZXMpKSB7XG4gICAgICBpZiAoaXNQcm9taXNlKHJlcykpIHtcbiAgICAgICAgLy8gKCkgPT4gUHJvbWlzZVxuICAgICAgICBpZiAoaXNVbmRlZihmYWN0b3J5LnJlc29sdmVkKSkge1xuICAgICAgICAgIHJlcy50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQcm9taXNlKHJlcy5jb21wb25lbnQpKSB7XG4gICAgICAgIHJlcy5jb21wb25lbnQudGhlbihyZXNvbHZlLCByZWplY3QpO1xuXG4gICAgICAgIGlmIChpc0RlZihyZXMuZXJyb3IpKSB7XG4gICAgICAgICAgZmFjdG9yeS5lcnJvckNvbXAgPSBlbnN1cmVDdG9yKHJlcy5lcnJvciwgYmFzZUN0b3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy5sb2FkaW5nKSkge1xuICAgICAgICAgIGZhY3RvcnkubG9hZGluZ0NvbXAgPSBlbnN1cmVDdG9yKHJlcy5sb2FkaW5nLCBiYXNlQ3Rvcik7XG4gICAgICAgICAgaWYgKHJlcy5kZWxheSA9PT0gMCkge1xuICAgICAgICAgICAgZmFjdG9yeS5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGltZXJMb2FkaW5nID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIHRpbWVyTG9hZGluZyA9IG51bGw7XG4gICAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpICYmIGlzVW5kZWYoZmFjdG9yeS5lcnJvcikpIHtcbiAgICAgICAgICAgICAgICBmYWN0b3J5LmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvcmNlUmVuZGVyKGZhbHNlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgcmVzLmRlbGF5IHx8IDIwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRGVmKHJlcy50aW1lb3V0KSkge1xuICAgICAgICAgIHRpbWVyVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGltZXJUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmKGZhY3RvcnkucmVzb2x2ZWQpKSB7XG4gICAgICAgICAgICAgIHJlamVjdChcbiAgICAgICAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgICAgICAgICAgICA/IChcInRpbWVvdXQgKFwiICsgKHJlcy50aW1lb3V0KSArIFwibXMpXCIpXG4gICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCByZXMudGltZW91dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzeW5jID0gZmFsc2U7XG4gICAgLy8gcmV0dXJuIGluIGNhc2UgcmVzb2x2ZWQgc3luY2hyb25vdXNseVxuICAgIHJldHVybiBmYWN0b3J5LmxvYWRpbmdcbiAgICAgID8gZmFjdG9yeS5sb2FkaW5nQ29tcFxuICAgICAgOiBmYWN0b3J5LnJlc29sdmVkXG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGlzQXN5bmNQbGFjZWhvbGRlciAobm9kZSkge1xuICByZXR1cm4gbm9kZS5pc0NvbW1lbnQgJiYgbm9kZS5hc3luY0ZhY3Rvcnlcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGdldEZpcnN0Q29tcG9uZW50Q2hpbGQgKGNoaWxkcmVuKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjID0gY2hpbGRyZW5baV07XG4gICAgICBpZiAoaXNEZWYoYykgJiYgKGlzRGVmKGMuY29tcG9uZW50T3B0aW9ucykgfHwgaXNBc3luY1BsYWNlaG9sZGVyKGMpKSkge1xuICAgICAgICByZXR1cm4gY1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRFdmVudHMgKHZtKSB7XG4gIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2bS5faGFzSG9va0V2ZW50ID0gZmFsc2U7XG4gIC8vIGluaXQgcGFyZW50IGF0dGFjaGVkIGV2ZW50c1xuICB2YXIgbGlzdGVuZXJzID0gdm0uJG9wdGlvbnMuX3BhcmVudExpc3RlbmVycztcbiAgaWYgKGxpc3RlbmVycykge1xuICAgIHVwZGF0ZUNvbXBvbmVudExpc3RlbmVycyh2bSwgbGlzdGVuZXJzKTtcbiAgfVxufVxuXG52YXIgdGFyZ2V0O1xuXG5mdW5jdGlvbiBhZGQgKGV2ZW50LCBmbikge1xuICB0YXJnZXQuJG9uKGV2ZW50LCBmbik7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSQxIChldmVudCwgZm4pIHtcbiAgdGFyZ2V0LiRvZmYoZXZlbnQsIGZuKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlT25jZUhhbmRsZXIgKGV2ZW50LCBmbikge1xuICB2YXIgX3RhcmdldCA9IHRhcmdldDtcbiAgcmV0dXJuIGZ1bmN0aW9uIG9uY2VIYW5kbGVyICgpIHtcbiAgICB2YXIgcmVzID0gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICBpZiAocmVzICE9PSBudWxsKSB7XG4gICAgICBfdGFyZ2V0LiRvZmYoZXZlbnQsIG9uY2VIYW5kbGVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlQ29tcG9uZW50TGlzdGVuZXJzIChcbiAgdm0sXG4gIGxpc3RlbmVycyxcbiAgb2xkTGlzdGVuZXJzXG4pIHtcbiAgdGFyZ2V0ID0gdm07XG4gIHVwZGF0ZUxpc3RlbmVycyhsaXN0ZW5lcnMsIG9sZExpc3RlbmVycyB8fCB7fSwgYWRkLCByZW1vdmUkMSwgY3JlYXRlT25jZUhhbmRsZXIsIHZtKTtcbiAgdGFyZ2V0ID0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBldmVudHNNaXhpbiAoVnVlKSB7XG4gIHZhciBob29rUkUgPSAvXmhvb2s6LztcbiAgVnVlLnByb3RvdHlwZS4kb24gPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShldmVudCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gZXZlbnQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIHZtLiRvbihldmVudFtpXSwgZm4pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAodm0uX2V2ZW50c1tldmVudF0gfHwgKHZtLl9ldmVudHNbZXZlbnRdID0gW10pKS5wdXNoKGZuKTtcbiAgICAgIC8vIG9wdGltaXplIGhvb2s6ZXZlbnQgY29zdCBieSB1c2luZyBhIGJvb2xlYW4gZmxhZyBtYXJrZWQgYXQgcmVnaXN0cmF0aW9uXG4gICAgICAvLyBpbnN0ZWFkIG9mIGEgaGFzaCBsb29rdXBcbiAgICAgIGlmIChob29rUkUudGVzdChldmVudCkpIHtcbiAgICAgICAgdm0uX2hhc0hvb2tFdmVudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2bVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJG9uY2UgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBmdW5jdGlvbiBvbiAoKSB7XG4gICAgICB2bS4kb2ZmKGV2ZW50LCBvbik7XG4gICAgICBmbi5hcHBseSh2bSwgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgb24uZm4gPSBmbjtcbiAgICB2bS4kb24oZXZlbnQsIG9uKTtcbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRvZmYgPSBmdW5jdGlvbiAoZXZlbnQsIGZuKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyBhbGxcbiAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHZtLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgcmV0dXJuIHZtXG4gICAgfVxuICAgIC8vIGFycmF5IG9mIGV2ZW50c1xuICAgIGlmIChBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgZm9yICh2YXIgaSQxID0gMCwgbCA9IGV2ZW50Lmxlbmd0aDsgaSQxIDwgbDsgaSQxKyspIHtcbiAgICAgICAgdm0uJG9mZihldmVudFtpJDFdLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgZXZlbnRcbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKCFjYnMpIHtcbiAgICAgIHJldHVybiB2bVxuICAgIH1cbiAgICBpZiAoIWZuKSB7XG4gICAgICB2bS5fZXZlbnRzW2V2ZW50XSA9IG51bGw7XG4gICAgICByZXR1cm4gdm1cbiAgICB9XG4gICAgLy8gc3BlY2lmaWMgaGFuZGxlclxuICAgIHZhciBjYjtcbiAgICB2YXIgaSA9IGNicy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY2IgPSBjYnNbaV07XG4gICAgICBpZiAoY2IgPT09IGZuIHx8IGNiLmZuID09PSBmbikge1xuICAgICAgICBjYnMuc3BsaWNlKGksIDEpO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdm1cbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRlbWl0ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgdmFyIGxvd2VyQ2FzZUV2ZW50ID0gZXZlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChsb3dlckNhc2VFdmVudCAhPT0gZXZlbnQgJiYgdm0uX2V2ZW50c1tsb3dlckNhc2VFdmVudF0pIHtcbiAgICAgICAgdGlwKFxuICAgICAgICAgIFwiRXZlbnQgXFxcIlwiICsgbG93ZXJDYXNlRXZlbnQgKyBcIlxcXCIgaXMgZW1pdHRlZCBpbiBjb21wb25lbnQgXCIgK1xuICAgICAgICAgIChmb3JtYXRDb21wb25lbnROYW1lKHZtKSkgKyBcIiBidXQgdGhlIGhhbmRsZXIgaXMgcmVnaXN0ZXJlZCBmb3IgXFxcIlwiICsgZXZlbnQgKyBcIlxcXCIuIFwiICtcbiAgICAgICAgICBcIk5vdGUgdGhhdCBIVE1MIGF0dHJpYnV0ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHlvdSBjYW5ub3QgdXNlIFwiICtcbiAgICAgICAgICBcInYtb24gdG8gbGlzdGVuIHRvIGNhbWVsQ2FzZSBldmVudHMgd2hlbiB1c2luZyBpbi1ET00gdGVtcGxhdGVzLiBcIiArXG4gICAgICAgICAgXCJZb3Ugc2hvdWxkIHByb2JhYmx5IHVzZSBcXFwiXCIgKyAoaHlwaGVuYXRlKGV2ZW50KSkgKyBcIlxcXCIgaW5zdGVhZCBvZiBcXFwiXCIgKyBldmVudCArIFwiXFxcIi5cIlxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgY2JzID0gdm0uX2V2ZW50c1tldmVudF07XG4gICAgaWYgKGNicykge1xuICAgICAgY2JzID0gY2JzLmxlbmd0aCA+IDEgPyB0b0FycmF5KGNicykgOiBjYnM7XG4gICAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICAgIHZhciBpbmZvID0gXCJldmVudCBoYW5kbGVyIGZvciBcXFwiXCIgKyBldmVudCArIFwiXFxcIlwiO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjYnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGludm9rZVdpdGhFcnJvckhhbmRsaW5nKGNic1tpXSwgdm0sIGFyZ3MsIHZtLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZtXG4gIH07XG59XG5cbi8qICAqL1xuXG52YXIgYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xudmFyIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBzZXRBY3RpdmVJbnN0YW5jZSh2bSkge1xuICB2YXIgcHJldkFjdGl2ZUluc3RhbmNlID0gYWN0aXZlSW5zdGFuY2U7XG4gIGFjdGl2ZUluc3RhbmNlID0gdm07XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgYWN0aXZlSW5zdGFuY2UgPSBwcmV2QWN0aXZlSW5zdGFuY2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdExpZmVjeWNsZSAodm0pIHtcbiAgdmFyIG9wdGlvbnMgPSB2bS4kb3B0aW9ucztcblxuICAvLyBsb2NhdGUgZmlyc3Qgbm9uLWFic3RyYWN0IHBhcmVudFxuICB2YXIgcGFyZW50ID0gb3B0aW9ucy5wYXJlbnQ7XG4gIGlmIChwYXJlbnQgJiYgIW9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICB3aGlsZSAocGFyZW50LiRvcHRpb25zLmFic3RyYWN0ICYmIHBhcmVudC4kcGFyZW50KSB7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQuJHBhcmVudDtcbiAgICB9XG4gICAgcGFyZW50LiRjaGlsZHJlbi5wdXNoKHZtKTtcbiAgfVxuXG4gIHZtLiRwYXJlbnQgPSBwYXJlbnQ7XG4gIHZtLiRyb290ID0gcGFyZW50ID8gcGFyZW50LiRyb290IDogdm07XG5cbiAgdm0uJGNoaWxkcmVuID0gW107XG4gIHZtLiRyZWZzID0ge307XG5cbiAgdm0uX3dhdGNoZXIgPSBudWxsO1xuICB2bS5faW5hY3RpdmUgPSBudWxsO1xuICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgdm0uX2lzTW91bnRlZCA9IGZhbHNlO1xuICB2bS5faXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgdm0uX2lzQmVpbmdEZXN0cm95ZWQgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbGlmZWN5Y2xlTWl4aW4gKFZ1ZSkge1xuICBWdWUucHJvdG90eXBlLl91cGRhdGUgPSBmdW5jdGlvbiAodm5vZGUsIGh5ZHJhdGluZykge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgdmFyIHByZXZFbCA9IHZtLiRlbDtcbiAgICB2YXIgcHJldlZub2RlID0gdm0uX3Zub2RlO1xuICAgIHZhciByZXN0b3JlQWN0aXZlSW5zdGFuY2UgPSBzZXRBY3RpdmVJbnN0YW5jZSh2bSk7XG4gICAgdm0uX3Zub2RlID0gdm5vZGU7XG4gICAgLy8gVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gaXMgaW5qZWN0ZWQgaW4gZW50cnkgcG9pbnRzXG4gICAgLy8gYmFzZWQgb24gdGhlIHJlbmRlcmluZyBiYWNrZW5kIHVzZWQuXG4gICAgaWYgKCFwcmV2Vm5vZGUpIHtcbiAgICAgIC8vIGluaXRpYWwgcmVuZGVyXG4gICAgICB2bS4kZWwgPSB2bS5fX3BhdGNoX18odm0uJGVsLCB2bm9kZSwgaHlkcmF0aW5nLCBmYWxzZSAvKiByZW1vdmVPbmx5ICovKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlc1xuICAgICAgdm0uJGVsID0gdm0uX19wYXRjaF9fKHByZXZWbm9kZSwgdm5vZGUpO1xuICAgIH1cbiAgICByZXN0b3JlQWN0aXZlSW5zdGFuY2UoKTtcbiAgICAvLyB1cGRhdGUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAocHJldkVsKSB7XG4gICAgICBwcmV2RWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIGlmICh2bS4kZWwpIHtcbiAgICAgIHZtLiRlbC5fX3Z1ZV9fID0gdm07XG4gICAgfVxuICAgIC8vIGlmIHBhcmVudCBpcyBhbiBIT0MsIHVwZGF0ZSBpdHMgJGVsIGFzIHdlbGxcbiAgICBpZiAodm0uJHZub2RlICYmIHZtLiRwYXJlbnQgJiYgdm0uJHZub2RlID09PSB2bS4kcGFyZW50Ll92bm9kZSkge1xuICAgICAgdm0uJHBhcmVudC4kZWwgPSB2bS4kZWw7XG4gICAgfVxuICAgIC8vIHVwZGF0ZWQgaG9vayBpcyBjYWxsZWQgYnkgdGhlIHNjaGVkdWxlciB0byBlbnN1cmUgdGhhdCBjaGlsZHJlbiBhcmVcbiAgICAvLyB1cGRhdGVkIGluIGEgcGFyZW50J3MgdXBkYXRlZCBob29rLlxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuJGZvcmNlVXBkYXRlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci51cGRhdGUoKTtcbiAgICB9XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS4kZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdm0gPSB0aGlzO1xuICAgIGlmICh2bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlRGVzdHJveScpO1xuICAgIHZtLl9pc0JlaW5nRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyByZW1vdmUgc2VsZiBmcm9tIHBhcmVudFxuICAgIHZhciBwYXJlbnQgPSB2bS4kcGFyZW50O1xuICAgIGlmIChwYXJlbnQgJiYgIXBhcmVudC5faXNCZWluZ0Rlc3Ryb3llZCAmJiAhdm0uJG9wdGlvbnMuYWJzdHJhY3QpIHtcbiAgICAgIHJlbW92ZShwYXJlbnQuJGNoaWxkcmVuLCB2bSk7XG4gICAgfVxuICAgIC8vIHRlYXJkb3duIHdhdGNoZXJzXG4gICAgaWYgKHZtLl93YXRjaGVyKSB7XG4gICAgICB2bS5fd2F0Y2hlci50ZWFyZG93bigpO1xuICAgIH1cbiAgICB2YXIgaSA9IHZtLl93YXRjaGVycy5sZW5ndGg7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgdm0uX3dhdGNoZXJzW2ldLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIC8vIHJlbW92ZSByZWZlcmVuY2UgZnJvbSBkYXRhIG9iXG4gICAgLy8gZnJvemVuIG9iamVjdCBtYXkgbm90IGhhdmUgb2JzZXJ2ZXIuXG4gICAgaWYgKHZtLl9kYXRhLl9fb2JfXykge1xuICAgICAgdm0uX2RhdGEuX19vYl9fLnZtQ291bnQtLTtcbiAgICB9XG4gICAgLy8gY2FsbCB0aGUgbGFzdCBob29rLi4uXG4gICAgdm0uX2lzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAvLyBpbnZva2UgZGVzdHJveSBob29rcyBvbiBjdXJyZW50IHJlbmRlcmVkIHRyZWVcbiAgICB2bS5fX3BhdGNoX18odm0uX3Zub2RlLCBudWxsKTtcbiAgICAvLyBmaXJlIGRlc3Ryb3llZCBob29rXG4gICAgY2FsbEhvb2sodm0sICdkZXN0cm95ZWQnKTtcbiAgICAvLyB0dXJuIG9mZiBhbGwgaW5zdGFuY2UgbGlzdGVuZXJzLlxuICAgIHZtLiRvZmYoKTtcbiAgICAvLyByZW1vdmUgX192dWVfXyByZWZlcmVuY2VcbiAgICBpZiAodm0uJGVsKSB7XG4gICAgICB2bS4kZWwuX192dWVfXyA9IG51bGw7XG4gICAgfVxuICAgIC8vIHJlbGVhc2UgY2lyY3VsYXIgcmVmZXJlbmNlICgjNjc1OSlcbiAgICBpZiAodm0uJHZub2RlKSB7XG4gICAgICB2bS4kdm5vZGUucGFyZW50ID0gbnVsbDtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoaWxkQ29tcG9uZW50IChcbiAgdm0sXG4gIHByb3BzRGF0YSxcbiAgbGlzdGVuZXJzLFxuICBwYXJlbnRWbm9kZSxcbiAgcmVuZGVyQ2hpbGRyZW5cbikge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IHRydWU7XG4gIH1cblxuICAvLyBkZXRlcm1pbmUgd2hldGhlciBjb21wb25lbnQgaGFzIHNsb3QgY2hpbGRyZW5cbiAgLy8gd2UgbmVlZCB0byBkbyB0aGlzIGJlZm9yZSBvdmVyd3JpdGluZyAkb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4uXG5cbiAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIGR5bmFtaWMgc2NvcGVkU2xvdHMgKGhhbmQtd3JpdHRlbiBvciBjb21waWxlZCBidXQgd2l0aFxuICAvLyBkeW5hbWljIHNsb3QgbmFtZXMpLiBTdGF0aWMgc2NvcGVkIHNsb3RzIGNvbXBpbGVkIGZyb20gdGVtcGxhdGUgaGFzIHRoZVxuICAvLyBcIiRzdGFibGVcIiBtYXJrZXIuXG4gIHZhciBuZXdTY29wZWRTbG90cyA9IHBhcmVudFZub2RlLmRhdGEuc2NvcGVkU2xvdHM7XG4gIHZhciBvbGRTY29wZWRTbG90cyA9IHZtLiRzY29wZWRTbG90cztcbiAgdmFyIGhhc0R5bmFtaWNTY29wZWRTbG90ID0gISEoXG4gICAgKG5ld1Njb3BlZFNsb3RzICYmICFuZXdTY29wZWRTbG90cy4kc3RhYmxlKSB8fFxuICAgIChvbGRTY29wZWRTbG90cyAhPT0gZW1wdHlPYmplY3QgJiYgIW9sZFNjb3BlZFNsb3RzLiRzdGFibGUpIHx8XG4gICAgKG5ld1Njb3BlZFNsb3RzICYmIHZtLiRzY29wZWRTbG90cy4ka2V5ICE9PSBuZXdTY29wZWRTbG90cy4ka2V5KVxuICApO1xuXG4gIC8vIEFueSBzdGF0aWMgc2xvdCBjaGlsZHJlbiBmcm9tIHRoZSBwYXJlbnQgbWF5IGhhdmUgY2hhbmdlZCBkdXJpbmcgcGFyZW50J3NcbiAgLy8gdXBkYXRlLiBEeW5hbWljIHNjb3BlZCBzbG90cyBtYXkgYWxzbyBoYXZlIGNoYW5nZWQuIEluIHN1Y2ggY2FzZXMsIGEgZm9yY2VkXG4gIC8vIHVwZGF0ZSBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIGNvcnJlY3RuZXNzLlxuICB2YXIgbmVlZHNGb3JjZVVwZGF0ZSA9ICEhKFxuICAgIHJlbmRlckNoaWxkcmVuIHx8ICAgICAgICAgICAgICAgLy8gaGFzIG5ldyBzdGF0aWMgc2xvdHNcbiAgICB2bS4kb3B0aW9ucy5fcmVuZGVyQ2hpbGRyZW4gfHwgIC8vIGhhcyBvbGQgc3RhdGljIHNsb3RzXG4gICAgaGFzRHluYW1pY1Njb3BlZFNsb3RcbiAgKTtcblxuICB2bS4kb3B0aW9ucy5fcGFyZW50Vm5vZGUgPSBwYXJlbnRWbm9kZTtcbiAgdm0uJHZub2RlID0gcGFyZW50Vm5vZGU7IC8vIHVwZGF0ZSB2bSdzIHBsYWNlaG9sZGVyIG5vZGUgd2l0aG91dCByZS1yZW5kZXJcblxuICBpZiAodm0uX3Zub2RlKSB7IC8vIHVwZGF0ZSBjaGlsZCB0cmVlJ3MgcGFyZW50XG4gICAgdm0uX3Zub2RlLnBhcmVudCA9IHBhcmVudFZub2RlO1xuICB9XG4gIHZtLiRvcHRpb25zLl9yZW5kZXJDaGlsZHJlbiA9IHJlbmRlckNoaWxkcmVuO1xuXG4gIC8vIHVwZGF0ZSAkYXR0cnMgYW5kICRsaXN0ZW5lcnMgaGFzaFxuICAvLyB0aGVzZSBhcmUgYWxzbyByZWFjdGl2ZSBzbyB0aGV5IG1heSB0cmlnZ2VyIGNoaWxkIHVwZGF0ZSBpZiB0aGUgY2hpbGRcbiAgLy8gdXNlZCB0aGVtIGR1cmluZyByZW5kZXJcbiAgdm0uJGF0dHJzID0gcGFyZW50Vm5vZGUuZGF0YS5hdHRycyB8fCBlbXB0eU9iamVjdDtcbiAgdm0uJGxpc3RlbmVycyA9IGxpc3RlbmVycyB8fCBlbXB0eU9iamVjdDtcblxuICAvLyB1cGRhdGUgcHJvcHNcbiAgaWYgKHByb3BzRGF0YSAmJiB2bS4kb3B0aW9ucy5wcm9wcykge1xuICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gICAgdmFyIHByb3BzID0gdm0uX3Byb3BzO1xuICAgIHZhciBwcm9wS2V5cyA9IHZtLiRvcHRpb25zLl9wcm9wS2V5cyB8fCBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIga2V5ID0gcHJvcEtleXNbaV07XG4gICAgICB2YXIgcHJvcE9wdGlvbnMgPSB2bS4kb3B0aW9ucy5wcm9wczsgLy8gd3RmIGZsb3c/XG4gICAgICBwcm9wc1trZXldID0gdmFsaWRhdGVQcm9wKGtleSwgcHJvcE9wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgIH1cbiAgICB0b2dnbGVPYnNlcnZpbmcodHJ1ZSk7XG4gICAgLy8ga2VlcCBhIGNvcHkgb2YgcmF3IHByb3BzRGF0YVxuICAgIHZtLiRvcHRpb25zLnByb3BzRGF0YSA9IHByb3BzRGF0YTtcbiAgfVxuICBcbiAgLy8gZml4ZWQgYnkgeHh4eHh4IHVwZGF0ZSBwcm9wZXJ0aWVzKG1wIHJ1bnRpbWUpXG4gIHZtLl8kdXBkYXRlUHJvcGVydGllcyAmJiB2bS5fJHVwZGF0ZVByb3BlcnRpZXModm0pO1xuICBcbiAgLy8gdXBkYXRlIGxpc3RlbmVyc1xuICBsaXN0ZW5lcnMgPSBsaXN0ZW5lcnMgfHwgZW1wdHlPYmplY3Q7XG4gIHZhciBvbGRMaXN0ZW5lcnMgPSB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzO1xuICB2bS4kb3B0aW9ucy5fcGFyZW50TGlzdGVuZXJzID0gbGlzdGVuZXJzO1xuICB1cGRhdGVDb21wb25lbnRMaXN0ZW5lcnModm0sIGxpc3RlbmVycywgb2xkTGlzdGVuZXJzKTtcblxuICAvLyByZXNvbHZlIHNsb3RzICsgZm9yY2UgdXBkYXRlIGlmIGhhcyBjaGlsZHJlblxuICBpZiAobmVlZHNGb3JjZVVwZGF0ZSkge1xuICAgIHZtLiRzbG90cyA9IHJlc29sdmVTbG90cyhyZW5kZXJDaGlsZHJlbiwgcGFyZW50Vm5vZGUuY29udGV4dCk7XG4gICAgdm0uJGZvcmNlVXBkYXRlKCk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzSW5JbmFjdGl2ZVRyZWUgKHZtKSB7XG4gIHdoaWxlICh2bSAmJiAodm0gPSB2bS4kcGFyZW50KSkge1xuICAgIGlmICh2bS5faW5hY3RpdmUpIHsgcmV0dXJuIHRydWUgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50ICh2bSwgZGlyZWN0KSB7XG4gIGlmIChkaXJlY3QpIHtcbiAgICB2bS5fZGlyZWN0SW5hY3RpdmUgPSBmYWxzZTtcbiAgICBpZiAoaXNJbkluYWN0aXZlVHJlZSh2bSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBlbHNlIGlmICh2bS5fZGlyZWN0SW5hY3RpdmUpIHtcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodm0uX2luYWN0aXZlIHx8IHZtLl9pbmFjdGl2ZSA9PT0gbnVsbCkge1xuICAgIHZtLl9pbmFjdGl2ZSA9IGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdm0uJGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnYWN0aXZhdGVkJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50ICh2bSwgZGlyZWN0KSB7XG4gIGlmIChkaXJlY3QpIHtcbiAgICB2bS5fZGlyZWN0SW5hY3RpdmUgPSB0cnVlO1xuICAgIGlmIChpc0luSW5hY3RpdmVUcmVlKHZtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG4gIGlmICghdm0uX2luYWN0aXZlKSB7XG4gICAgdm0uX2luYWN0aXZlID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZtLiRjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgZGVhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHZtLiRjaGlsZHJlbltpXSk7XG4gICAgfVxuICAgIGNhbGxIb29rKHZtLCAnZGVhY3RpdmF0ZWQnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsSG9vayAodm0sIGhvb2spIHtcbiAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGxpZmVjeWNsZSBob29rc1xuICBwdXNoVGFyZ2V0KCk7XG4gIHZhciBoYW5kbGVycyA9IHZtLiRvcHRpb25zW2hvb2tdO1xuICB2YXIgaW5mbyA9IGhvb2sgKyBcIiBob29rXCI7XG4gIGlmIChoYW5kbGVycykge1xuICAgIGZvciAodmFyIGkgPSAwLCBqID0gaGFuZGxlcnMubGVuZ3RoOyBpIDwgajsgaSsrKSB7XG4gICAgICBpbnZva2VXaXRoRXJyb3JIYW5kbGluZyhoYW5kbGVyc1tpXSwgdm0sIG51bGwsIHZtLCBpbmZvKTtcbiAgICB9XG4gIH1cbiAgaWYgKHZtLl9oYXNIb29rRXZlbnQpIHtcbiAgICB2bS4kZW1pdCgnaG9vazonICsgaG9vayk7XG4gIH1cbiAgcG9wVGFyZ2V0KCk7XG59XG5cbi8qICAqL1xuXG52YXIgTUFYX1VQREFURV9DT1VOVCA9IDEwMDtcblxudmFyIHF1ZXVlID0gW107XG52YXIgYWN0aXZhdGVkQ2hpbGRyZW4gPSBbXTtcbnZhciBoYXMgPSB7fTtcbnZhciBjaXJjdWxhciA9IHt9O1xudmFyIHdhaXRpbmcgPSBmYWxzZTtcbnZhciBmbHVzaGluZyA9IGZhbHNlO1xudmFyIGluZGV4ID0gMDtcblxuLyoqXG4gKiBSZXNldCB0aGUgc2NoZWR1bGVyJ3Mgc3RhdGUuXG4gKi9cbmZ1bmN0aW9uIHJlc2V0U2NoZWR1bGVyU3RhdGUgKCkge1xuICBpbmRleCA9IHF1ZXVlLmxlbmd0aCA9IGFjdGl2YXRlZENoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIGhhcyA9IHt9O1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNpcmN1bGFyID0ge307XG4gIH1cbiAgd2FpdGluZyA9IGZsdXNoaW5nID0gZmFsc2U7XG59XG5cbi8vIEFzeW5jIGVkZ2UgY2FzZSAjNjU2NiByZXF1aXJlcyBzYXZpbmcgdGhlIHRpbWVzdGFtcCB3aGVuIGV2ZW50IGxpc3RlbmVycyBhcmVcbi8vIGF0dGFjaGVkLiBIb3dldmVyLCBjYWxsaW5nIHBlcmZvcm1hbmNlLm5vdygpIGhhcyBhIHBlcmYgb3ZlcmhlYWQgZXNwZWNpYWxseVxuLy8gaWYgdGhlIHBhZ2UgaGFzIHRob3VzYW5kcyBvZiBldmVudCBsaXN0ZW5lcnMuIEluc3RlYWQsIHdlIHRha2UgYSB0aW1lc3RhbXBcbi8vIGV2ZXJ5IHRpbWUgdGhlIHNjaGVkdWxlciBmbHVzaGVzIGFuZCB1c2UgdGhhdCBmb3IgYWxsIGV2ZW50IGxpc3RlbmVyc1xuLy8gYXR0YWNoZWQgZHVyaW5nIHRoYXQgZmx1c2guXG52YXIgY3VycmVudEZsdXNoVGltZXN0YW1wID0gMDtcblxuLy8gQXN5bmMgZWRnZSBjYXNlIGZpeCByZXF1aXJlcyBzdG9yaW5nIGFuIGV2ZW50IGxpc3RlbmVyJ3MgYXR0YWNoIHRpbWVzdGFtcC5cbnZhciBnZXROb3cgPSBEYXRlLm5vdztcblxuLy8gRGV0ZXJtaW5lIHdoYXQgZXZlbnQgdGltZXN0YW1wIHRoZSBicm93c2VyIGlzIHVzaW5nLiBBbm5veWluZ2x5LCB0aGVcbi8vIHRpbWVzdGFtcCBjYW4gZWl0aGVyIGJlIGhpLXJlcyAocmVsYXRpdmUgdG8gcGFnZSBsb2FkKSBvciBsb3ctcmVzXG4vLyAocmVsYXRpdmUgdG8gVU5JWCBlcG9jaCksIHNvIGluIG9yZGVyIHRvIGNvbXBhcmUgdGltZSB3ZSBoYXZlIHRvIHVzZSB0aGVcbi8vIHNhbWUgdGltZXN0YW1wIHR5cGUgd2hlbiBzYXZpbmcgdGhlIGZsdXNoIHRpbWVzdGFtcC5cbi8vIEFsbCBJRSB2ZXJzaW9ucyB1c2UgbG93LXJlcyBldmVudCB0aW1lc3RhbXBzLCBhbmQgaGF2ZSBwcm9ibGVtYXRpYyBjbG9ja1xuLy8gaW1wbGVtZW50YXRpb25zICgjOTYzMilcbmlmIChpbkJyb3dzZXIgJiYgIWlzSUUpIHtcbiAgdmFyIHBlcmZvcm1hbmNlID0gd2luZG93LnBlcmZvcm1hbmNlO1xuICBpZiAoXG4gICAgcGVyZm9ybWFuY2UgJiZcbiAgICB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nICYmXG4gICAgZ2V0Tm93KCkgPiBkb2N1bWVudC5jcmVhdGVFdmVudCgnRXZlbnQnKS50aW1lU3RhbXBcbiAgKSB7XG4gICAgLy8gaWYgdGhlIGV2ZW50IHRpbWVzdGFtcCwgYWx0aG91Z2ggZXZhbHVhdGVkIEFGVEVSIHRoZSBEYXRlLm5vdygpLCBpc1xuICAgIC8vIHNtYWxsZXIgdGhhbiBpdCwgaXQgbWVhbnMgdGhlIGV2ZW50IGlzIHVzaW5nIGEgaGktcmVzIHRpbWVzdGFtcCxcbiAgICAvLyBhbmQgd2UgbmVlZCB0byB1c2UgdGhlIGhpLXJlcyB2ZXJzaW9uIGZvciBldmVudCBsaXN0ZW5lciB0aW1lc3RhbXBzIGFzXG4gICAgLy8gd2VsbC5cbiAgICBnZXROb3cgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTsgfTtcbiAgfVxufVxuXG4vKipcbiAqIEZsdXNoIGJvdGggcXVldWVzIGFuZCBydW4gdGhlIHdhdGNoZXJzLlxuICovXG5mdW5jdGlvbiBmbHVzaFNjaGVkdWxlclF1ZXVlICgpIHtcbiAgY3VycmVudEZsdXNoVGltZXN0YW1wID0gZ2V0Tm93KCk7XG4gIGZsdXNoaW5nID0gdHJ1ZTtcbiAgdmFyIHdhdGNoZXIsIGlkO1xuXG4gIC8vIFNvcnQgcXVldWUgYmVmb3JlIGZsdXNoLlxuICAvLyBUaGlzIGVuc3VyZXMgdGhhdDpcbiAgLy8gMS4gQ29tcG9uZW50cyBhcmUgdXBkYXRlZCBmcm9tIHBhcmVudCB0byBjaGlsZC4gKGJlY2F1c2UgcGFyZW50IGlzIGFsd2F5c1xuICAvLyAgICBjcmVhdGVkIGJlZm9yZSB0aGUgY2hpbGQpXG4gIC8vIDIuIEEgY29tcG9uZW50J3MgdXNlciB3YXRjaGVycyBhcmUgcnVuIGJlZm9yZSBpdHMgcmVuZGVyIHdhdGNoZXIgKGJlY2F1c2VcbiAgLy8gICAgdXNlciB3YXRjaGVycyBhcmUgY3JlYXRlZCBiZWZvcmUgdGhlIHJlbmRlciB3YXRjaGVyKVxuICAvLyAzLiBJZiBhIGNvbXBvbmVudCBpcyBkZXN0cm95ZWQgZHVyaW5nIGEgcGFyZW50IGNvbXBvbmVudCdzIHdhdGNoZXIgcnVuLFxuICAvLyAgICBpdHMgd2F0Y2hlcnMgY2FuIGJlIHNraXBwZWQuXG4gIHF1ZXVlLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuaWQgLSBiLmlkOyB9KTtcblxuICAvLyBkbyBub3QgY2FjaGUgbGVuZ3RoIGJlY2F1c2UgbW9yZSB3YXRjaGVycyBtaWdodCBiZSBwdXNoZWRcbiAgLy8gYXMgd2UgcnVuIGV4aXN0aW5nIHdhdGNoZXJzXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHF1ZXVlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIHdhdGNoZXIgPSBxdWV1ZVtpbmRleF07XG4gICAgaWYgKHdhdGNoZXIuYmVmb3JlKSB7XG4gICAgICB3YXRjaGVyLmJlZm9yZSgpO1xuICAgIH1cbiAgICBpZCA9IHdhdGNoZXIuaWQ7XG4gICAgaGFzW2lkXSA9IG51bGw7XG4gICAgd2F0Y2hlci5ydW4oKTtcbiAgICAvLyBpbiBkZXYgYnVpbGQsIGNoZWNrIGFuZCBzdG9wIGNpcmN1bGFyIHVwZGF0ZXMuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgaGFzW2lkXSAhPSBudWxsKSB7XG4gICAgICBjaXJjdWxhcltpZF0gPSAoY2lyY3VsYXJbaWRdIHx8IDApICsgMTtcbiAgICAgIGlmIChjaXJjdWxhcltpZF0gPiBNQVhfVVBEQVRFX0NPVU5UKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcCAnICsgKFxuICAgICAgICAgICAgd2F0Y2hlci51c2VyXG4gICAgICAgICAgICAgID8gKFwiaW4gd2F0Y2hlciB3aXRoIGV4cHJlc3Npb24gXFxcIlwiICsgKHdhdGNoZXIuZXhwcmVzc2lvbikgKyBcIlxcXCJcIilcbiAgICAgICAgICAgICAgOiBcImluIGEgY29tcG9uZW50IHJlbmRlciBmdW5jdGlvbi5cIlxuICAgICAgICAgICksXG4gICAgICAgICAgd2F0Y2hlci52bVxuICAgICAgICApO1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGtlZXAgY29waWVzIG9mIHBvc3QgcXVldWVzIGJlZm9yZSByZXNldHRpbmcgc3RhdGVcbiAgdmFyIGFjdGl2YXRlZFF1ZXVlID0gYWN0aXZhdGVkQ2hpbGRyZW4uc2xpY2UoKTtcbiAgdmFyIHVwZGF0ZWRRdWV1ZSA9IHF1ZXVlLnNsaWNlKCk7XG5cbiAgcmVzZXRTY2hlZHVsZXJTdGF0ZSgpO1xuXG4gIC8vIGNhbGwgY29tcG9uZW50IHVwZGF0ZWQgYW5kIGFjdGl2YXRlZCBob29rc1xuICBjYWxsQWN0aXZhdGVkSG9va3MoYWN0aXZhdGVkUXVldWUpO1xuICBjYWxsVXBkYXRlZEhvb2tzKHVwZGF0ZWRRdWV1ZSk7XG5cbiAgLy8gZGV2dG9vbCBob29rXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICBpZiAoZGV2dG9vbHMgJiYgY29uZmlnLmRldnRvb2xzKSB7XG4gICAgZGV2dG9vbHMuZW1pdCgnZmx1c2gnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsVXBkYXRlZEhvb2tzIChxdWV1ZSkge1xuICB2YXIgaSA9IHF1ZXVlLmxlbmd0aDtcbiAgd2hpbGUgKGktLSkge1xuICAgIHZhciB3YXRjaGVyID0gcXVldWVbaV07XG4gICAgdmFyIHZtID0gd2F0Y2hlci52bTtcbiAgICBpZiAodm0uX3dhdGNoZXIgPT09IHdhdGNoZXIgJiYgdm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XG4gICAgICBjYWxsSG9vayh2bSwgJ3VwZGF0ZWQnKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBRdWV1ZSBhIGtlcHQtYWxpdmUgY29tcG9uZW50IHRoYXQgd2FzIGFjdGl2YXRlZCBkdXJpbmcgcGF0Y2guXG4gKiBUaGUgcXVldWUgd2lsbCBiZSBwcm9jZXNzZWQgYWZ0ZXIgdGhlIGVudGlyZSB0cmVlIGhhcyBiZWVuIHBhdGNoZWQuXG4gKi9cbmZ1bmN0aW9uIHF1ZXVlQWN0aXZhdGVkQ29tcG9uZW50ICh2bSkge1xuICAvLyBzZXR0aW5nIF9pbmFjdGl2ZSB0byBmYWxzZSBoZXJlIHNvIHRoYXQgYSByZW5kZXIgZnVuY3Rpb24gY2FuXG4gIC8vIHJlbHkgb24gY2hlY2tpbmcgd2hldGhlciBpdCdzIGluIGFuIGluYWN0aXZlIHRyZWUgKGUuZy4gcm91dGVyLXZpZXcpXG4gIHZtLl9pbmFjdGl2ZSA9IGZhbHNlO1xuICBhY3RpdmF0ZWRDaGlsZHJlbi5wdXNoKHZtKTtcbn1cblxuZnVuY3Rpb24gY2FsbEFjdGl2YXRlZEhvb2tzIChxdWV1ZSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgcXVldWVbaV0uX2luYWN0aXZlID0gdHJ1ZTtcbiAgICBhY3RpdmF0ZUNoaWxkQ29tcG9uZW50KHF1ZXVlW2ldLCB0cnVlIC8qIHRydWUgKi8pO1xuICB9XG59XG5cbi8qKlxuICogUHVzaCBhIHdhdGNoZXIgaW50byB0aGUgd2F0Y2hlciBxdWV1ZS5cbiAqIEpvYnMgd2l0aCBkdXBsaWNhdGUgSURzIHdpbGwgYmUgc2tpcHBlZCB1bmxlc3MgaXQnc1xuICogcHVzaGVkIHdoZW4gdGhlIHF1ZXVlIGlzIGJlaW5nIGZsdXNoZWQuXG4gKi9cbmZ1bmN0aW9uIHF1ZXVlV2F0Y2hlciAod2F0Y2hlcikge1xuICB2YXIgaWQgPSB3YXRjaGVyLmlkO1xuICBpZiAoaGFzW2lkXSA9PSBudWxsKSB7XG4gICAgaGFzW2lkXSA9IHRydWU7XG4gICAgaWYgKCFmbHVzaGluZykge1xuICAgICAgcXVldWUucHVzaCh3YXRjaGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaWYgYWxyZWFkeSBmbHVzaGluZywgc3BsaWNlIHRoZSB3YXRjaGVyIGJhc2VkIG9uIGl0cyBpZFxuICAgICAgLy8gaWYgYWxyZWFkeSBwYXN0IGl0cyBpZCwgaXQgd2lsbCBiZSBydW4gbmV4dCBpbW1lZGlhdGVseS5cbiAgICAgIHZhciBpID0gcXVldWUubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlIChpID4gaW5kZXggJiYgcXVldWVbaV0uaWQgPiB3YXRjaGVyLmlkKSB7XG4gICAgICAgIGktLTtcbiAgICAgIH1cbiAgICAgIHF1ZXVlLnNwbGljZShpICsgMSwgMCwgd2F0Y2hlcik7XG4gICAgfVxuICAgIC8vIHF1ZXVlIHRoZSBmbHVzaFxuICAgIGlmICghd2FpdGluZykge1xuICAgICAgd2FpdGluZyA9IHRydWU7XG5cbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmICFjb25maWcuYXN5bmMpIHtcbiAgICAgICAgZmx1c2hTY2hlZHVsZXJRdWV1ZSgpO1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIG5leHRUaWNrKGZsdXNoU2NoZWR1bGVyUXVldWUpO1xuICAgIH1cbiAgfVxufVxuXG4vKiAgKi9cblxuXG5cbnZhciB1aWQkMiA9IDA7XG5cbi8qKlxuICogQSB3YXRjaGVyIHBhcnNlcyBhbiBleHByZXNzaW9uLCBjb2xsZWN0cyBkZXBlbmRlbmNpZXMsXG4gKiBhbmQgZmlyZXMgY2FsbGJhY2sgd2hlbiB0aGUgZXhwcmVzc2lvbiB2YWx1ZSBjaGFuZ2VzLlxuICogVGhpcyBpcyB1c2VkIGZvciBib3RoIHRoZSAkd2F0Y2goKSBhcGkgYW5kIGRpcmVjdGl2ZXMuXG4gKi9cbnZhciBXYXRjaGVyID0gZnVuY3Rpb24gV2F0Y2hlciAoXG4gIHZtLFxuICBleHBPckZuLFxuICBjYixcbiAgb3B0aW9ucyxcbiAgaXNSZW5kZXJXYXRjaGVyXG4pIHtcbiAgdGhpcy52bSA9IHZtO1xuICBpZiAoaXNSZW5kZXJXYXRjaGVyKSB7XG4gICAgdm0uX3dhdGNoZXIgPSB0aGlzO1xuICB9XG4gIHZtLl93YXRjaGVycy5wdXNoKHRoaXMpO1xuICAvLyBvcHRpb25zXG4gIGlmIChvcHRpb25zKSB7XG4gICAgdGhpcy5kZWVwID0gISFvcHRpb25zLmRlZXA7XG4gICAgdGhpcy51c2VyID0gISFvcHRpb25zLnVzZXI7XG4gICAgdGhpcy5sYXp5ID0gISFvcHRpb25zLmxhenk7XG4gICAgdGhpcy5zeW5jID0gISFvcHRpb25zLnN5bmM7XG4gICAgdGhpcy5iZWZvcmUgPSBvcHRpb25zLmJlZm9yZTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmRlZXAgPSB0aGlzLnVzZXIgPSB0aGlzLmxhenkgPSB0aGlzLnN5bmMgPSBmYWxzZTtcbiAgfVxuICB0aGlzLmNiID0gY2I7XG4gIHRoaXMuaWQgPSArK3VpZCQyOyAvLyB1aWQgZm9yIGJhdGNoaW5nXG4gIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgdGhpcy5kaXJ0eSA9IHRoaXMubGF6eTsgLy8gZm9yIGxhenkgd2F0Y2hlcnNcbiAgdGhpcy5kZXBzID0gW107XG4gIHRoaXMubmV3RGVwcyA9IFtdO1xuICB0aGlzLmRlcElkcyA9IG5ldyBfU2V0KCk7XG4gIHRoaXMubmV3RGVwSWRzID0gbmV3IF9TZXQoKTtcbiAgdGhpcy5leHByZXNzaW9uID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgID8gZXhwT3JGbi50b1N0cmluZygpXG4gICAgOiAnJztcbiAgLy8gcGFyc2UgZXhwcmVzc2lvbiBmb3IgZ2V0dGVyXG4gIGlmICh0eXBlb2YgZXhwT3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMuZ2V0dGVyID0gZXhwT3JGbjtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLmdldHRlciA9IHBhcnNlUGF0aChleHBPckZuKTtcbiAgICBpZiAoIXRoaXMuZ2V0dGVyKSB7XG4gICAgICB0aGlzLmdldHRlciA9IG5vb3A7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAgIFwiRmFpbGVkIHdhdGNoaW5nIHBhdGg6IFxcXCJcIiArIGV4cE9yRm4gKyBcIlxcXCIgXCIgK1xuICAgICAgICAnV2F0Y2hlciBvbmx5IGFjY2VwdHMgc2ltcGxlIGRvdC1kZWxpbWl0ZWQgcGF0aHMuICcgK1xuICAgICAgICAnRm9yIGZ1bGwgY29udHJvbCwgdXNlIGEgZnVuY3Rpb24gaW5zdGVhZC4nLFxuICAgICAgICB2bVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgdGhpcy52YWx1ZSA9IHRoaXMubGF6eVxuICAgID8gdW5kZWZpbmVkXG4gICAgOiB0aGlzLmdldCgpO1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSB0aGUgZ2V0dGVyLCBhbmQgcmUtY29sbGVjdCBkZXBlbmRlbmNpZXMuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIGdldCAoKSB7XG4gIHB1c2hUYXJnZXQodGhpcyk7XG4gIHZhciB2YWx1ZTtcbiAgdmFyIHZtID0gdGhpcy52bTtcbiAgdHJ5IHtcbiAgICB2YWx1ZSA9IHRoaXMuZ2V0dGVyLmNhbGwodm0sIHZtKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmICh0aGlzLnVzZXIpIHtcbiAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCAoXCJnZXR0ZXIgZm9yIHdhdGNoZXIgXFxcIlwiICsgKHRoaXMuZXhwcmVzc2lvbikgKyBcIlxcXCJcIikpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlXG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIC8vIFwidG91Y2hcIiBldmVyeSBwcm9wZXJ0eSBzbyB0aGV5IGFyZSBhbGwgdHJhY2tlZCBhc1xuICAgIC8vIGRlcGVuZGVuY2llcyBmb3IgZGVlcCB3YXRjaGluZ1xuICAgIGlmICh0aGlzLmRlZXApIHtcbiAgICAgIHRyYXZlcnNlKHZhbHVlKTtcbiAgICB9XG4gICAgcG9wVGFyZ2V0KCk7XG4gICAgdGhpcy5jbGVhbnVwRGVwcygpO1xuICB9XG4gIHJldHVybiB2YWx1ZVxufTtcblxuLyoqXG4gKiBBZGQgYSBkZXBlbmRlbmN5IHRvIHRoaXMgZGlyZWN0aXZlLlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS5hZGREZXAgPSBmdW5jdGlvbiBhZGREZXAgKGRlcCkge1xuICB2YXIgaWQgPSBkZXAuaWQ7XG4gIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGlkKSkge1xuICAgIHRoaXMubmV3RGVwSWRzLmFkZChpZCk7XG4gICAgdGhpcy5uZXdEZXBzLnB1c2goZGVwKTtcbiAgICBpZiAoIXRoaXMuZGVwSWRzLmhhcyhpZCkpIHtcbiAgICAgIGRlcC5hZGRTdWIodGhpcyk7XG4gICAgfVxuICB9XG59O1xuXG4vKipcbiAqIENsZWFuIHVwIGZvciBkZXBlbmRlbmN5IGNvbGxlY3Rpb24uXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmNsZWFudXBEZXBzID0gZnVuY3Rpb24gY2xlYW51cERlcHMgKCkge1xuICB2YXIgaSA9IHRoaXMuZGVwcy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIgZGVwID0gdGhpcy5kZXBzW2ldO1xuICAgIGlmICghdGhpcy5uZXdEZXBJZHMuaGFzKGRlcC5pZCkpIHtcbiAgICAgIGRlcC5yZW1vdmVTdWIodGhpcyk7XG4gICAgfVxuICB9XG4gIHZhciB0bXAgPSB0aGlzLmRlcElkcztcbiAgdGhpcy5kZXBJZHMgPSB0aGlzLm5ld0RlcElkcztcbiAgdGhpcy5uZXdEZXBJZHMgPSB0bXA7XG4gIHRoaXMubmV3RGVwSWRzLmNsZWFyKCk7XG4gIHRtcCA9IHRoaXMuZGVwcztcbiAgdGhpcy5kZXBzID0gdGhpcy5uZXdEZXBzO1xuICB0aGlzLm5ld0RlcHMgPSB0bXA7XG4gIHRoaXMubmV3RGVwcy5sZW5ndGggPSAwO1xufTtcblxuLyoqXG4gKiBTdWJzY3JpYmVyIGludGVyZmFjZS5cbiAqIFdpbGwgYmUgY2FsbGVkIHdoZW4gYSBkZXBlbmRlbmN5IGNoYW5nZXMuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIHVwZGF0ZSAoKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aGlzLmxhenkpIHtcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcbiAgfSBlbHNlIGlmICh0aGlzLnN5bmMpIHtcbiAgICB0aGlzLnJ1bigpO1xuICB9IGVsc2Uge1xuICAgIHF1ZXVlV2F0Y2hlcih0aGlzKTtcbiAgfVxufTtcblxuLyoqXG4gKiBTY2hlZHVsZXIgam9iIGludGVyZmFjZS5cbiAqIFdpbGwgYmUgY2FsbGVkIGJ5IHRoZSBzY2hlZHVsZXIuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uIHJ1biAoKSB7XG4gIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuZ2V0KCk7XG4gICAgaWYgKFxuICAgICAgdmFsdWUgIT09IHRoaXMudmFsdWUgfHxcbiAgICAgIC8vIERlZXAgd2F0Y2hlcnMgYW5kIHdhdGNoZXJzIG9uIE9iamVjdC9BcnJheXMgc2hvdWxkIGZpcmUgZXZlblxuICAgICAgLy8gd2hlbiB0aGUgdmFsdWUgaXMgdGhlIHNhbWUsIGJlY2F1c2UgdGhlIHZhbHVlIG1heVxuICAgICAgLy8gaGF2ZSBtdXRhdGVkLlxuICAgICAgaXNPYmplY3QodmFsdWUpIHx8XG4gICAgICB0aGlzLmRlZXBcbiAgICApIHtcbiAgICAgIC8vIHNldCBuZXcgdmFsdWVcbiAgICAgIHZhciBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAodGhpcy51c2VyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5jYi5jYWxsKHRoaXMudm0sIHZhbHVlLCBvbGRWYWx1ZSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBoYW5kbGVFcnJvcihlLCB0aGlzLnZtLCAoXCJjYWxsYmFjayBmb3Igd2F0Y2hlciBcXFwiXCIgKyAodGhpcy5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2IuY2FsbCh0aGlzLnZtLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSB0aGUgdmFsdWUgb2YgdGhlIHdhdGNoZXIuXG4gKiBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgZm9yIGxhenkgd2F0Y2hlcnMuXG4gKi9cbldhdGNoZXIucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gZXZhbHVhdGUgKCkge1xuICB0aGlzLnZhbHVlID0gdGhpcy5nZXQoKTtcbiAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xufTtcblxuLyoqXG4gKiBEZXBlbmQgb24gYWxsIGRlcHMgY29sbGVjdGVkIGJ5IHRoaXMgd2F0Y2hlci5cbiAqL1xuV2F0Y2hlci5wcm90b3R5cGUuZGVwZW5kID0gZnVuY3Rpb24gZGVwZW5kICgpIHtcbiAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICB3aGlsZSAoaS0tKSB7XG4gICAgdGhpcy5kZXBzW2ldLmRlcGVuZCgpO1xuICB9XG59O1xuXG4vKipcbiAqIFJlbW92ZSBzZWxmIGZyb20gYWxsIGRlcGVuZGVuY2llcycgc3Vic2NyaWJlciBsaXN0LlxuICovXG5XYXRjaGVyLnByb3RvdHlwZS50ZWFyZG93biA9IGZ1bmN0aW9uIHRlYXJkb3duICgpIHtcbiAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgLy8gcmVtb3ZlIHNlbGYgZnJvbSB2bSdzIHdhdGNoZXIgbGlzdFxuICAgIC8vIHRoaXMgaXMgYSBzb21ld2hhdCBleHBlbnNpdmUgb3BlcmF0aW9uIHNvIHdlIHNraXAgaXRcbiAgICAvLyBpZiB0aGUgdm0gaXMgYmVpbmcgZGVzdHJveWVkLlxuICAgIGlmICghdGhpcy52bS5faXNCZWluZ0Rlc3Ryb3llZCkge1xuICAgICAgcmVtb3ZlKHRoaXMudm0uX3dhdGNoZXJzLCB0aGlzKTtcbiAgICB9XG4gICAgdmFyIGkgPSB0aGlzLmRlcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMuZGVwc1tpXS5yZW1vdmVTdWIodGhpcyk7XG4gICAgfVxuICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gIH1cbn07XG5cbi8qICAqL1xuXG52YXIgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogbm9vcCxcbiAgc2V0OiBub29wXG59O1xuXG5mdW5jdGlvbiBwcm94eSAodGFyZ2V0LCBzb3VyY2VLZXksIGtleSkge1xuICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gZnVuY3Rpb24gcHJveHlHZXR0ZXIgKCkge1xuICAgIHJldHVybiB0aGlzW3NvdXJjZUtleV1ba2V5XVxuICB9O1xuICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gZnVuY3Rpb24gcHJveHlTZXR0ZXIgKHZhbCkge1xuICAgIHRoaXNbc291cmNlS2V5XVtrZXldID0gdmFsO1xuICB9O1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbik7XG59XG5cbmZ1bmN0aW9uIGluaXRTdGF0ZSAodm0pIHtcbiAgdm0uX3dhdGNoZXJzID0gW107XG4gIHZhciBvcHRzID0gdm0uJG9wdGlvbnM7XG4gIGlmIChvcHRzLnByb3BzKSB7IGluaXRQcm9wcyh2bSwgb3B0cy5wcm9wcyk7IH1cbiAgaWYgKG9wdHMubWV0aG9kcykgeyBpbml0TWV0aG9kcyh2bSwgb3B0cy5tZXRob2RzKTsgfVxuICBpZiAob3B0cy5kYXRhKSB7XG4gICAgaW5pdERhdGEodm0pO1xuICB9IGVsc2Uge1xuICAgIG9ic2VydmUodm0uX2RhdGEgPSB7fSwgdHJ1ZSAvKiBhc1Jvb3REYXRhICovKTtcbiAgfVxuICBpZiAob3B0cy5jb21wdXRlZCkgeyBpbml0Q29tcHV0ZWQodm0sIG9wdHMuY29tcHV0ZWQpOyB9XG4gIGlmIChvcHRzLndhdGNoICYmIG9wdHMud2F0Y2ggIT09IG5hdGl2ZVdhdGNoKSB7XG4gICAgaW5pdFdhdGNoKHZtLCBvcHRzLndhdGNoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0UHJvcHMgKHZtLCBwcm9wc09wdGlvbnMpIHtcbiAgdmFyIHByb3BzRGF0YSA9IHZtLiRvcHRpb25zLnByb3BzRGF0YSB8fCB7fTtcbiAgdmFyIHByb3BzID0gdm0uX3Byb3BzID0ge307XG4gIC8vIGNhY2hlIHByb3Aga2V5cyBzbyB0aGF0IGZ1dHVyZSBwcm9wcyB1cGRhdGVzIGNhbiBpdGVyYXRlIHVzaW5nIEFycmF5XG4gIC8vIGluc3RlYWQgb2YgZHluYW1pYyBvYmplY3Qga2V5IGVudW1lcmF0aW9uLlxuICB2YXIga2V5cyA9IHZtLiRvcHRpb25zLl9wcm9wS2V5cyA9IFtdO1xuICB2YXIgaXNSb290ID0gIXZtLiRwYXJlbnQ7XG4gIC8vIHJvb3QgaW5zdGFuY2UgcHJvcHMgc2hvdWxkIGJlIGNvbnZlcnRlZFxuICBpZiAoIWlzUm9vdCkge1xuICAgIHRvZ2dsZU9ic2VydmluZyhmYWxzZSk7XG4gIH1cbiAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoIGtleSApIHtcbiAgICBrZXlzLnB1c2goa2V5KTtcbiAgICB2YXIgdmFsdWUgPSB2YWxpZGF0ZVByb3Aoa2V5LCBwcm9wc09wdGlvbnMsIHByb3BzRGF0YSwgdm0pO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBoeXBoZW5hdGVkS2V5ID0gaHlwaGVuYXRlKGtleSk7XG4gICAgICBpZiAoaXNSZXNlcnZlZEF0dHJpYnV0ZShoeXBoZW5hdGVkS2V5KSB8fFxuICAgICAgICAgIGNvbmZpZy5pc1Jlc2VydmVkQXR0cihoeXBoZW5hdGVkS2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIChcIlxcXCJcIiArIGh5cGhlbmF0ZWRLZXkgKyBcIlxcXCIgaXMgYSByZXNlcnZlZCBhdHRyaWJ1dGUgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIGNvbXBvbmVudCBwcm9wLlwiKSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgZGVmaW5lUmVhY3RpdmUkJDEocHJvcHMsIGtleSwgdmFsdWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFpc1Jvb3QgJiYgIWlzVXBkYXRpbmdDaGlsZENvbXBvbmVudCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmKHZtLm1wSG9zdCA9PT0gJ21wLWJhaWR1JyB8fCB2bS5tcEhvc3QgPT09ICdtcC1rdWFpc2hvdScpey8v55m+5bqm44CB5b+r5omLIG9ic2VydmVyIOWcqCBzZXREYXRhIGNhbGxiYWNrIOS5i+WQjuinpuWPke+8jOebtOaOpeW/veeVpeivpSB3YXJuXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2ZpeGVkIGJ5IHh4eHh4eCBfX25leHRfdGlja19wZW5kaW5nLHVuaTovL2Zvcm0tZmllbGQg5pe25LiN5ZGK6K2mXG4gICAgICAgICAgICBpZihcbiAgICAgICAgICAgICAgICBrZXkgPT09ICd2YWx1ZScgJiYgXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheSh2bS4kb3B0aW9ucy5iZWhhdmlvcnMpICYmXG4gICAgICAgICAgICAgICAgdm0uJG9wdGlvbnMuYmVoYXZpb3JzLmluZGV4T2YoJ3VuaTovL2Zvcm0tZmllbGQnKSAhPT0gLTFcbiAgICAgICAgICAgICAgKXtcbiAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZih2bS5fZ2V0Rm9ybURhdGEpe1xuICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciAkcGFyZW50ID0gdm0uJHBhcmVudDtcbiAgICAgICAgICAgIHdoaWxlKCRwYXJlbnQpe1xuICAgICAgICAgICAgICBpZigkcGFyZW50Ll9fbmV4dF90aWNrX3BlbmRpbmcpe1xuICAgICAgICAgICAgICAgIHJldHVybiAgXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgJHBhcmVudCA9ICRwYXJlbnQuJHBhcmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgd2FybihcbiAgICAgICAgICAgIFwiQXZvaWQgbXV0YXRpbmcgYSBwcm9wIGRpcmVjdGx5IHNpbmNlIHRoZSB2YWx1ZSB3aWxsIGJlIFwiICtcbiAgICAgICAgICAgIFwib3ZlcndyaXR0ZW4gd2hlbmV2ZXIgdGhlIHBhcmVudCBjb21wb25lbnQgcmUtcmVuZGVycy4gXCIgK1xuICAgICAgICAgICAgXCJJbnN0ZWFkLCB1c2UgYSBkYXRhIG9yIGNvbXB1dGVkIHByb3BlcnR5IGJhc2VkIG9uIHRoZSBwcm9wJ3MgXCIgK1xuICAgICAgICAgICAgXCJ2YWx1ZS4gUHJvcCBiZWluZyBtdXRhdGVkOiBcXFwiXCIgKyBrZXkgKyBcIlxcXCJcIixcbiAgICAgICAgICAgIHZtXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmluZVJlYWN0aXZlJCQxKHByb3BzLCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgLy8gc3RhdGljIHByb3BzIGFyZSBhbHJlYWR5IHByb3hpZWQgb24gdGhlIGNvbXBvbmVudCdzIHByb3RvdHlwZVxuICAgIC8vIGR1cmluZyBWdWUuZXh0ZW5kKCkuIFdlIG9ubHkgbmVlZCB0byBwcm94eSBwcm9wcyBkZWZpbmVkIGF0XG4gICAgLy8gaW5zdGFudGlhdGlvbiBoZXJlLlxuICAgIGlmICghKGtleSBpbiB2bSkpIHtcbiAgICAgIHByb3h5KHZtLCBcIl9wcm9wc1wiLCBrZXkpO1xuICAgIH1cbiAgfTtcblxuICBmb3IgKHZhciBrZXkgaW4gcHJvcHNPcHRpb25zKSBsb29wKCBrZXkgKTtcbiAgdG9nZ2xlT2JzZXJ2aW5nKHRydWUpO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YSAodm0pIHtcbiAgdmFyIGRhdGEgPSB2bS4kb3B0aW9ucy5kYXRhO1xuICBkYXRhID0gdm0uX2RhdGEgPSB0eXBlb2YgZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgID8gZ2V0RGF0YShkYXRhLCB2bSlcbiAgICA6IGRhdGEgfHwge307XG4gIGlmICghaXNQbGFpbk9iamVjdChkYXRhKSkge1xuICAgIGRhdGEgPSB7fTtcbiAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIHdhcm4oXG4gICAgICAnZGF0YSBmdW5jdGlvbnMgc2hvdWxkIHJldHVybiBhbiBvYmplY3Q6XFxuJyArXG4gICAgICAnaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvY29tcG9uZW50cy5odG1sI2RhdGEtTXVzdC1CZS1hLUZ1bmN0aW9uJyxcbiAgICAgIHZtXG4gICAgKTtcbiAgfVxuICAvLyBwcm94eSBkYXRhIG9uIGluc3RhbmNlXG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICB2YXIgbWV0aG9kcyA9IHZtLiRvcHRpb25zLm1ldGhvZHM7XG4gIHZhciBpID0ga2V5cy5sZW5ndGg7XG4gIHdoaWxlIChpLS0pIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKG1ldGhvZHMgJiYgaGFzT3duKG1ldGhvZHMsIGtleSkpIHtcbiAgICAgICAgd2FybihcbiAgICAgICAgICAoXCJNZXRob2QgXFxcIlwiICsga2V5ICsgXCJcXFwiIGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCBhcyBhIGRhdGEgcHJvcGVydHkuXCIpLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChwcm9wcyAmJiBoYXNPd24ocHJvcHMsIGtleSkpIHtcbiAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgd2FybihcbiAgICAgICAgXCJUaGUgZGF0YSBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgaXMgYWxyZWFkeSBkZWNsYXJlZCBhcyBhIHByb3AuIFwiICtcbiAgICAgICAgXCJVc2UgcHJvcCBkZWZhdWx0IHZhbHVlIGluc3RlYWQuXCIsXG4gICAgICAgIHZtXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgcHJveHkodm0sIFwiX2RhdGFcIiwga2V5KTtcbiAgICB9XG4gIH1cbiAgLy8gb2JzZXJ2ZSBkYXRhXG4gIG9ic2VydmUoZGF0YSwgdHJ1ZSAvKiBhc1Jvb3REYXRhICovKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGF0YSAoZGF0YSwgdm0pIHtcbiAgLy8gIzc1NzMgZGlzYWJsZSBkZXAgY29sbGVjdGlvbiB3aGVuIGludm9raW5nIGRhdGEgZ2V0dGVyc1xuICBwdXNoVGFyZ2V0KCk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGRhdGEuY2FsbCh2bSwgdm0pXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBoYW5kbGVFcnJvcihlLCB2bSwgXCJkYXRhKClcIik7XG4gICAgcmV0dXJuIHt9XG4gIH0gZmluYWxseSB7XG4gICAgcG9wVGFyZ2V0KCk7XG4gIH1cbn1cblxudmFyIGNvbXB1dGVkV2F0Y2hlck9wdGlvbnMgPSB7IGxhenk6IHRydWUgfTtcblxuZnVuY3Rpb24gaW5pdENvbXB1dGVkICh2bSwgY29tcHV0ZWQpIHtcbiAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gIHZhciB3YXRjaGVycyA9IHZtLl9jb21wdXRlZFdhdGNoZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gY29tcHV0ZWQgcHJvcGVydGllcyBhcmUganVzdCBnZXR0ZXJzIGR1cmluZyBTU1JcbiAgdmFyIGlzU1NSID0gaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gY29tcHV0ZWQpIHtcbiAgICB2YXIgdXNlckRlZiA9IGNvbXB1dGVkW2tleV07XG4gICAgdmFyIGdldHRlciA9IHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nID8gdXNlckRlZiA6IHVzZXJEZWYuZ2V0O1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGdldHRlciA9PSBudWxsKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJHZXR0ZXIgaXMgbWlzc2luZyBmb3IgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiLlwiKSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFpc1NTUikge1xuICAgICAgLy8gY3JlYXRlIGludGVybmFsIHdhdGNoZXIgZm9yIHRoZSBjb21wdXRlZCBwcm9wZXJ0eS5cbiAgICAgIHdhdGNoZXJzW2tleV0gPSBuZXcgV2F0Y2hlcihcbiAgICAgICAgdm0sXG4gICAgICAgIGdldHRlciB8fCBub29wLFxuICAgICAgICBub29wLFxuICAgICAgICBjb21wdXRlZFdhdGNoZXJPcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNvbXBvbmVudC1kZWZpbmVkIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGVcbiAgICAvLyBjb21wb25lbnQgcHJvdG90eXBlLiBXZSBvbmx5IG5lZWQgdG8gZGVmaW5lIGNvbXB1dGVkIHByb3BlcnRpZXMgZGVmaW5lZFxuICAgIC8vIGF0IGluc3RhbnRpYXRpb24gaGVyZS5cbiAgICBpZiAoIShrZXkgaW4gdm0pKSB7XG4gICAgICBkZWZpbmVDb21wdXRlZCh2bSwga2V5LCB1c2VyRGVmKTtcbiAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChrZXkgaW4gdm0uJGRhdGEpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBpbiBkYXRhLlwiKSwgdm0pO1xuICAgICAgfSBlbHNlIGlmICh2bS4kb3B0aW9ucy5wcm9wcyAmJiBrZXkgaW4gdm0uJG9wdGlvbnMucHJvcHMpIHtcbiAgICAgICAgd2FybigoXCJUaGUgY29tcHV0ZWQgcHJvcGVydHkgXFxcIlwiICsga2V5ICsgXCJcXFwiIGlzIGFscmVhZHkgZGVmaW5lZCBhcyBhIHByb3AuXCIpLCB2bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmluZUNvbXB1dGVkIChcbiAgdGFyZ2V0LFxuICBrZXksXG4gIHVzZXJEZWZcbikge1xuICB2YXIgc2hvdWxkQ2FjaGUgPSAhaXNTZXJ2ZXJSZW5kZXJpbmcoKTtcbiAgaWYgKHR5cGVvZiB1c2VyRGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLmdldCA9IHNob3VsZENhY2hlXG4gICAgICA/IGNyZWF0ZUNvbXB1dGVkR2V0dGVyKGtleSlcbiAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmKTtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gbm9vcDtcbiAgfSBlbHNlIHtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uZ2V0ID0gdXNlckRlZi5nZXRcbiAgICAgID8gc2hvdWxkQ2FjaGUgJiYgdXNlckRlZi5jYWNoZSAhPT0gZmFsc2VcbiAgICAgICAgPyBjcmVhdGVDb21wdXRlZEdldHRlcihrZXkpXG4gICAgICAgIDogY3JlYXRlR2V0dGVySW52b2tlcih1c2VyRGVmLmdldClcbiAgICAgIDogbm9vcDtcbiAgICBzaGFyZWRQcm9wZXJ0eURlZmluaXRpb24uc2V0ID0gdXNlckRlZi5zZXQgfHwgbm9vcDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJlxuICAgICAgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uLnNldCA9PT0gbm9vcCkge1xuICAgIHNoYXJlZFByb3BlcnR5RGVmaW5pdGlvbi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFxuICAgICAgICAoXCJDb21wdXRlZCBwcm9wZXJ0eSBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIGFzc2lnbmVkIHRvIGJ1dCBpdCBoYXMgbm8gc2V0dGVyLlwiKSxcbiAgICAgICAgdGhpc1xuICAgICAgKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc2hhcmVkUHJvcGVydHlEZWZpbml0aW9uKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcHV0ZWRHZXR0ZXIgKGtleSkge1xuICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgIHZhciB3YXRjaGVyID0gdGhpcy5fY29tcHV0ZWRXYXRjaGVycyAmJiB0aGlzLl9jb21wdXRlZFdhdGNoZXJzW2tleV07XG4gICAgaWYgKHdhdGNoZXIpIHtcbiAgICAgIGlmICh3YXRjaGVyLmRpcnR5KSB7XG4gICAgICAgIHdhdGNoZXIuZXZhbHVhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChEZXAuU2hhcmVkT2JqZWN0LnRhcmdldCkgey8vIGZpeGVkIGJ5IHh4eHh4eFxuICAgICAgICB3YXRjaGVyLmRlcGVuZCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdhdGNoZXIudmFsdWVcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlR2V0dGVySW52b2tlcihmbikge1xuICByZXR1cm4gZnVuY3Rpb24gY29tcHV0ZWRHZXR0ZXIgKCkge1xuICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIHRoaXMpXG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdE1ldGhvZHMgKHZtLCBtZXRob2RzKSB7XG4gIHZhciBwcm9wcyA9IHZtLiRvcHRpb25zLnByb3BzO1xuICBmb3IgKHZhciBrZXkgaW4gbWV0aG9kcykge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIG1ldGhvZHNba2V5XSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIFwiTWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBoYXMgdHlwZSBcXFwiXCIgKyAodHlwZW9mIG1ldGhvZHNba2V5XSkgKyBcIlxcXCIgaW4gdGhlIGNvbXBvbmVudCBkZWZpbml0aW9uLiBcIiArXG4gICAgICAgICAgXCJEaWQgeW91IHJlZmVyZW5jZSB0aGUgZnVuY3Rpb24gY29ycmVjdGx5P1wiLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAocHJvcHMgJiYgaGFzT3duKHByb3BzLCBrZXkpKSB7XG4gICAgICAgIHdhcm4oXG4gICAgICAgICAgKFwiTWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQgYXMgYSBwcm9wLlwiKSxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKChrZXkgaW4gdm0pICYmIGlzUmVzZXJ2ZWQoa2V5KSkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgIFwiTWV0aG9kIFxcXCJcIiArIGtleSArIFwiXFxcIiBjb25mbGljdHMgd2l0aCBhbiBleGlzdGluZyBWdWUgaW5zdGFuY2UgbWV0aG9kLiBcIiArXG4gICAgICAgICAgXCJBdm9pZCBkZWZpbmluZyBjb21wb25lbnQgbWV0aG9kcyB0aGF0IHN0YXJ0IHdpdGggXyBvciAkLlwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHZtW2tleV0gPSB0eXBlb2YgbWV0aG9kc1trZXldICE9PSAnZnVuY3Rpb24nID8gbm9vcCA6IGJpbmQobWV0aG9kc1trZXldLCB2bSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdFdhdGNoICh2bSwgd2F0Y2gpIHtcbiAgZm9yICh2YXIga2V5IGluIHdhdGNoKSB7XG4gICAgdmFyIGhhbmRsZXIgPSB3YXRjaFtrZXldO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhhbmRsZXIpKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhbmRsZXIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY3JlYXRlV2F0Y2hlcih2bSwga2V5LCBoYW5kbGVyW2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY3JlYXRlV2F0Y2hlcih2bSwga2V5LCBoYW5kbGVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlV2F0Y2hlciAoXG4gIHZtLFxuICBleHBPckZuLFxuICBoYW5kbGVyLFxuICBvcHRpb25zXG4pIHtcbiAgaWYgKGlzUGxhaW5PYmplY3QoaGFuZGxlcikpIHtcbiAgICBvcHRpb25zID0gaGFuZGxlcjtcbiAgICBoYW5kbGVyID0gaGFuZGxlci5oYW5kbGVyO1xuICB9XG4gIGlmICh0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZycpIHtcbiAgICBoYW5kbGVyID0gdm1baGFuZGxlcl07XG4gIH1cbiAgcmV0dXJuIHZtLiR3YXRjaChleHBPckZuLCBoYW5kbGVyLCBvcHRpb25zKVxufVxuXG5mdW5jdGlvbiBzdGF0ZU1peGluIChWdWUpIHtcbiAgLy8gZmxvdyBzb21laG93IGhhcyBwcm9ibGVtcyB3aXRoIGRpcmVjdGx5IGRlY2xhcmVkIGRlZmluaXRpb24gb2JqZWN0XG4gIC8vIHdoZW4gdXNpbmcgT2JqZWN0LmRlZmluZVByb3BlcnR5LCBzbyB3ZSBoYXZlIHRvIHByb2NlZHVyYWxseSBidWlsZCB1cFxuICAvLyB0aGUgb2JqZWN0IGhlcmUuXG4gIHZhciBkYXRhRGVmID0ge307XG4gIGRhdGFEZWYuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fZGF0YSB9O1xuICB2YXIgcHJvcHNEZWYgPSB7fTtcbiAgcHJvcHNEZWYuZ2V0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fcHJvcHMgfTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBkYXRhRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdBdm9pZCByZXBsYWNpbmcgaW5zdGFuY2Ugcm9vdCAkZGF0YS4gJyArXG4gICAgICAgICdVc2UgbmVzdGVkIGRhdGEgcHJvcGVydGllcyBpbnN0ZWFkLicsXG4gICAgICAgIHRoaXNcbiAgICAgICk7XG4gICAgfTtcbiAgICBwcm9wc0RlZi5zZXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuKFwiJHByb3BzIGlzIHJlYWRvbmx5LlwiLCB0aGlzKTtcbiAgICB9O1xuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJGRhdGEnLCBkYXRhRGVmKTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFZ1ZS5wcm90b3R5cGUsICckcHJvcHMnLCBwcm9wc0RlZik7XG5cbiAgVnVlLnByb3RvdHlwZS4kc2V0ID0gc2V0O1xuICBWdWUucHJvdG90eXBlLiRkZWxldGUgPSBkZWw7XG5cbiAgVnVlLnByb3RvdHlwZS4kd2F0Y2ggPSBmdW5jdGlvbiAoXG4gICAgZXhwT3JGbixcbiAgICBjYixcbiAgICBvcHRpb25zXG4gICkge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QoY2IpKSB7XG4gICAgICByZXR1cm4gY3JlYXRlV2F0Y2hlcih2bSwgZXhwT3JGbiwgY2IsIG9wdGlvbnMpXG4gICAgfVxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIG9wdGlvbnMudXNlciA9IHRydWU7XG4gICAgdmFyIHdhdGNoZXIgPSBuZXcgV2F0Y2hlcih2bSwgZXhwT3JGbiwgY2IsIG9wdGlvbnMpO1xuICAgIGlmIChvcHRpb25zLmltbWVkaWF0ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY2IuY2FsbCh2bSwgd2F0Y2hlci52YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVFcnJvcihlcnJvciwgdm0sIChcImNhbGxiYWNrIGZvciBpbW1lZGlhdGUgd2F0Y2hlciBcXFwiXCIgKyAod2F0Y2hlci5leHByZXNzaW9uKSArIFwiXFxcIlwiKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiB1bndhdGNoRm4gKCkge1xuICAgICAgd2F0Y2hlci50ZWFyZG93bigpO1xuICAgIH1cbiAgfTtcbn1cblxuLyogICovXG5cbnZhciB1aWQkMyA9IDA7XG5cbmZ1bmN0aW9uIGluaXRNaXhpbiAoVnVlKSB7XG4gIFZ1ZS5wcm90b3R5cGUuX2luaXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciB2bSA9IHRoaXM7XG4gICAgLy8gYSB1aWRcbiAgICB2bS5fdWlkID0gdWlkJDMrKztcblxuICAgIHZhciBzdGFydFRhZywgZW5kVGFnO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICBzdGFydFRhZyA9IFwidnVlLXBlcmYtc3RhcnQ6XCIgKyAodm0uX3VpZCk7XG4gICAgICBlbmRUYWcgPSBcInZ1ZS1wZXJmLWVuZDpcIiArICh2bS5fdWlkKTtcbiAgICAgIG1hcmsoc3RhcnRUYWcpO1xuICAgIH1cblxuICAgIC8vIGEgZmxhZyB0byBhdm9pZCB0aGlzIGJlaW5nIG9ic2VydmVkXG4gICAgdm0uX2lzVnVlID0gdHJ1ZTtcbiAgICAvLyBtZXJnZSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5faXNDb21wb25lbnQpIHtcbiAgICAgIC8vIG9wdGltaXplIGludGVybmFsIGNvbXBvbmVudCBpbnN0YW50aWF0aW9uXG4gICAgICAvLyBzaW5jZSBkeW5hbWljIG9wdGlvbnMgbWVyZ2luZyBpcyBwcmV0dHkgc2xvdywgYW5kIG5vbmUgb2YgdGhlXG4gICAgICAvLyBpbnRlcm5hbCBjb21wb25lbnQgb3B0aW9ucyBuZWVkcyBzcGVjaWFsIHRyZWF0bWVudC5cbiAgICAgIGluaXRJbnRlcm5hbENvbXBvbmVudCh2bSwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLiRvcHRpb25zID0gbWVyZ2VPcHRpb25zKFxuICAgICAgICByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKHZtLmNvbnN0cnVjdG9yKSxcbiAgICAgICAgb3B0aW9ucyB8fCB7fSxcbiAgICAgICAgdm1cbiAgICAgICk7XG4gICAgfVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGluaXRQcm94eSh2bSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZtLl9yZW5kZXJQcm94eSA9IHZtO1xuICAgIH1cbiAgICAvLyBleHBvc2UgcmVhbCBzZWxmXG4gICAgdm0uX3NlbGYgPSB2bTtcbiAgICBpbml0TGlmZWN5Y2xlKHZtKTtcbiAgICBpbml0RXZlbnRzKHZtKTtcbiAgICBpbml0UmVuZGVyKHZtKTtcbiAgICBjYWxsSG9vayh2bSwgJ2JlZm9yZUNyZWF0ZScpO1xuICAgICF2bS5fJGZhbGxiYWNrICYmIGluaXRJbmplY3Rpb25zKHZtKTsgLy8gcmVzb2x2ZSBpbmplY3Rpb25zIGJlZm9yZSBkYXRhL3Byb3BzICBcbiAgICBpbml0U3RhdGUodm0pO1xuICAgICF2bS5fJGZhbGxiYWNrICYmIGluaXRQcm92aWRlKHZtKTsgLy8gcmVzb2x2ZSBwcm92aWRlIGFmdGVyIGRhdGEvcHJvcHNcbiAgICAhdm0uXyRmYWxsYmFjayAmJiBjYWxsSG9vayh2bSwgJ2NyZWF0ZWQnKTsgICAgICBcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIGNvbmZpZy5wZXJmb3JtYW5jZSAmJiBtYXJrKSB7XG4gICAgICB2bS5fbmFtZSA9IGZvcm1hdENvbXBvbmVudE5hbWUodm0sIGZhbHNlKTtcbiAgICAgIG1hcmsoZW5kVGFnKTtcbiAgICAgIG1lYXN1cmUoKFwidnVlIFwiICsgKHZtLl9uYW1lKSArIFwiIGluaXRcIiksIHN0YXJ0VGFnLCBlbmRUYWcpO1xuICAgIH1cblxuICAgIGlmICh2bS4kb3B0aW9ucy5lbCkge1xuICAgICAgdm0uJG1vdW50KHZtLiRvcHRpb25zLmVsKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGluaXRJbnRlcm5hbENvbXBvbmVudCAodm0sIG9wdGlvbnMpIHtcbiAgdmFyIG9wdHMgPSB2bS4kb3B0aW9ucyA9IE9iamVjdC5jcmVhdGUodm0uY29uc3RydWN0b3Iub3B0aW9ucyk7XG4gIC8vIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCdzIGZhc3RlciB0aGFuIGR5bmFtaWMgZW51bWVyYXRpb24uXG4gIHZhciBwYXJlbnRWbm9kZSA9IG9wdGlvbnMuX3BhcmVudFZub2RlO1xuICBvcHRzLnBhcmVudCA9IG9wdGlvbnMucGFyZW50O1xuICBvcHRzLl9wYXJlbnRWbm9kZSA9IHBhcmVudFZub2RlO1xuXG4gIHZhciB2bm9kZUNvbXBvbmVudE9wdGlvbnMgPSBwYXJlbnRWbm9kZS5jb21wb25lbnRPcHRpb25zO1xuICBvcHRzLnByb3BzRGF0YSA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5wcm9wc0RhdGE7XG4gIG9wdHMuX3BhcmVudExpc3RlbmVycyA9IHZub2RlQ29tcG9uZW50T3B0aW9ucy5saXN0ZW5lcnM7XG4gIG9wdHMuX3JlbmRlckNoaWxkcmVuID0gdm5vZGVDb21wb25lbnRPcHRpb25zLmNoaWxkcmVuO1xuICBvcHRzLl9jb21wb25lbnRUYWcgPSB2bm9kZUNvbXBvbmVudE9wdGlvbnMudGFnO1xuXG4gIGlmIChvcHRpb25zLnJlbmRlcikge1xuICAgIG9wdHMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XG4gICAgb3B0cy5zdGF0aWNSZW5kZXJGbnMgPSBvcHRpb25zLnN0YXRpY1JlbmRlckZucztcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zIChDdG9yKSB7XG4gIHZhciBvcHRpb25zID0gQ3Rvci5vcHRpb25zO1xuICBpZiAoQ3Rvci5zdXBlcikge1xuICAgIHZhciBzdXBlck9wdGlvbnMgPSByZXNvbHZlQ29uc3RydWN0b3JPcHRpb25zKEN0b3Iuc3VwZXIpO1xuICAgIHZhciBjYWNoZWRTdXBlck9wdGlvbnMgPSBDdG9yLnN1cGVyT3B0aW9ucztcbiAgICBpZiAoc3VwZXJPcHRpb25zICE9PSBjYWNoZWRTdXBlck9wdGlvbnMpIHtcbiAgICAgIC8vIHN1cGVyIG9wdGlvbiBjaGFuZ2VkLFxuICAgICAgLy8gbmVlZCB0byByZXNvbHZlIG5ldyBvcHRpb25zLlxuICAgICAgQ3Rvci5zdXBlck9wdGlvbnMgPSBzdXBlck9wdGlvbnM7XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGxhdGUtbW9kaWZpZWQvYXR0YWNoZWQgb3B0aW9ucyAoIzQ5NzYpXG4gICAgICB2YXIgbW9kaWZpZWRPcHRpb25zID0gcmVzb2x2ZU1vZGlmaWVkT3B0aW9ucyhDdG9yKTtcbiAgICAgIC8vIHVwZGF0ZSBiYXNlIGV4dGVuZCBvcHRpb25zXG4gICAgICBpZiAobW9kaWZpZWRPcHRpb25zKSB7XG4gICAgICAgIGV4dGVuZChDdG9yLmV4dGVuZE9wdGlvbnMsIG1vZGlmaWVkT3B0aW9ucyk7XG4gICAgICB9XG4gICAgICBvcHRpb25zID0gQ3Rvci5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHN1cGVyT3B0aW9ucywgQ3Rvci5leHRlbmRPcHRpb25zKTtcbiAgICAgIGlmIChvcHRpb25zLm5hbWUpIHtcbiAgICAgICAgb3B0aW9ucy5jb21wb25lbnRzW29wdGlvbnMubmFtZV0gPSBDdG9yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gb3B0aW9uc1xufVxuXG5mdW5jdGlvbiByZXNvbHZlTW9kaWZpZWRPcHRpb25zIChDdG9yKSB7XG4gIHZhciBtb2RpZmllZDtcbiAgdmFyIGxhdGVzdCA9IEN0b3Iub3B0aW9ucztcbiAgdmFyIHNlYWxlZCA9IEN0b3Iuc2VhbGVkT3B0aW9ucztcbiAgZm9yICh2YXIga2V5IGluIGxhdGVzdCkge1xuICAgIGlmIChsYXRlc3Rba2V5XSAhPT0gc2VhbGVkW2tleV0pIHtcbiAgICAgIGlmICghbW9kaWZpZWQpIHsgbW9kaWZpZWQgPSB7fTsgfVxuICAgICAgbW9kaWZpZWRba2V5XSA9IGxhdGVzdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbW9kaWZpZWRcbn1cblxuZnVuY3Rpb24gVnVlIChvcHRpb25zKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmXG4gICAgISh0aGlzIGluc3RhbmNlb2YgVnVlKVxuICApIHtcbiAgICB3YXJuKCdWdWUgaXMgYSBjb25zdHJ1Y3RvciBhbmQgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBgbmV3YCBrZXl3b3JkJyk7XG4gIH1cbiAgdGhpcy5faW5pdChvcHRpb25zKTtcbn1cblxuaW5pdE1peGluKFZ1ZSk7XG5zdGF0ZU1peGluKFZ1ZSk7XG5ldmVudHNNaXhpbihWdWUpO1xubGlmZWN5Y2xlTWl4aW4oVnVlKTtcbnJlbmRlck1peGluKFZ1ZSk7XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0VXNlIChWdWUpIHtcbiAgVnVlLnVzZSA9IGZ1bmN0aW9uIChwbHVnaW4pIHtcbiAgICB2YXIgaW5zdGFsbGVkUGx1Z2lucyA9ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zIHx8ICh0aGlzLl9pbnN0YWxsZWRQbHVnaW5zID0gW10pKTtcbiAgICBpZiAoaW5zdGFsbGVkUGx1Z2lucy5pbmRleE9mKHBsdWdpbikgPiAtMSkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG5cbiAgICAvLyBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcbiAgICB2YXIgYXJncyA9IHRvQXJyYXkoYXJndW1lbnRzLCAxKTtcbiAgICBhcmdzLnVuc2hpZnQodGhpcyk7XG4gICAgaWYgKHR5cGVvZiBwbHVnaW4uaW5zdGFsbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGx1Z2luLmluc3RhbGwuYXBwbHkocGx1Z2luLCBhcmdzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBsdWdpbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG4gICAgaW5zdGFsbGVkUGx1Z2lucy5wdXNoKHBsdWdpbik7XG4gICAgcmV0dXJuIHRoaXNcbiAgfTtcbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRNaXhpbiQxIChWdWUpIHtcbiAgVnVlLm1peGluID0gZnVuY3Rpb24gKG1peGluKSB7XG4gICAgdGhpcy5vcHRpb25zID0gbWVyZ2VPcHRpb25zKHRoaXMub3B0aW9ucywgbWl4aW4pO1xuICAgIHJldHVybiB0aGlzXG4gIH07XG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBpbml0RXh0ZW5kIChWdWUpIHtcbiAgLyoqXG4gICAqIEVhY2ggaW5zdGFuY2UgY29uc3RydWN0b3IsIGluY2x1ZGluZyBWdWUsIGhhcyBhIHVuaXF1ZVxuICAgKiBjaWQuIFRoaXMgZW5hYmxlcyB1cyB0byBjcmVhdGUgd3JhcHBlZCBcImNoaWxkXG4gICAqIGNvbnN0cnVjdG9yc1wiIGZvciBwcm90b3R5cGFsIGluaGVyaXRhbmNlIGFuZCBjYWNoZSB0aGVtLlxuICAgKi9cbiAgVnVlLmNpZCA9IDA7XG4gIHZhciBjaWQgPSAxO1xuXG4gIC8qKlxuICAgKiBDbGFzcyBpbmhlcml0YW5jZVxuICAgKi9cbiAgVnVlLmV4dGVuZCA9IGZ1bmN0aW9uIChleHRlbmRPcHRpb25zKSB7XG4gICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG4gICAgdmFyIFN1cGVyID0gdGhpcztcbiAgICB2YXIgU3VwZXJJZCA9IFN1cGVyLmNpZDtcbiAgICB2YXIgY2FjaGVkQ3RvcnMgPSBleHRlbmRPcHRpb25zLl9DdG9yIHx8IChleHRlbmRPcHRpb25zLl9DdG9yID0ge30pO1xuICAgIGlmIChjYWNoZWRDdG9yc1tTdXBlcklkXSkge1xuICAgICAgcmV0dXJuIGNhY2hlZEN0b3JzW1N1cGVySWRdXG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBleHRlbmRPcHRpb25zLm5hbWUgfHwgU3VwZXIub3B0aW9ucy5uYW1lO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nICYmIG5hbWUpIHtcbiAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgU3ViID0gZnVuY3Rpb24gVnVlQ29tcG9uZW50IChvcHRpb25zKSB7XG4gICAgICB0aGlzLl9pbml0KG9wdGlvbnMpO1xuICAgIH07XG4gICAgU3ViLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3VwZXIucHJvdG90eXBlKTtcbiAgICBTdWIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViO1xuICAgIFN1Yi5jaWQgPSBjaWQrKztcbiAgICBTdWIub3B0aW9ucyA9IG1lcmdlT3B0aW9ucyhcbiAgICAgIFN1cGVyLm9wdGlvbnMsXG4gICAgICBleHRlbmRPcHRpb25zXG4gICAgKTtcbiAgICBTdWJbJ3N1cGVyJ10gPSBTdXBlcjtcblxuICAgIC8vIEZvciBwcm9wcyBhbmQgY29tcHV0ZWQgcHJvcGVydGllcywgd2UgZGVmaW5lIHRoZSBwcm94eSBnZXR0ZXJzIG9uXG4gICAgLy8gdGhlIFZ1ZSBpbnN0YW5jZXMgYXQgZXh0ZW5zaW9uIHRpbWUsIG9uIHRoZSBleHRlbmRlZCBwcm90b3R5cGUuIFRoaXNcbiAgICAvLyBhdm9pZHMgT2JqZWN0LmRlZmluZVByb3BlcnR5IGNhbGxzIGZvciBlYWNoIGluc3RhbmNlIGNyZWF0ZWQuXG4gICAgaWYgKFN1Yi5vcHRpb25zLnByb3BzKSB7XG4gICAgICBpbml0UHJvcHMkMShTdWIpO1xuICAgIH1cbiAgICBpZiAoU3ViLm9wdGlvbnMuY29tcHV0ZWQpIHtcbiAgICAgIGluaXRDb21wdXRlZCQxKFN1Yik7XG4gICAgfVxuXG4gICAgLy8gYWxsb3cgZnVydGhlciBleHRlbnNpb24vbWl4aW4vcGx1Z2luIHVzYWdlXG4gICAgU3ViLmV4dGVuZCA9IFN1cGVyLmV4dGVuZDtcbiAgICBTdWIubWl4aW4gPSBTdXBlci5taXhpbjtcbiAgICBTdWIudXNlID0gU3VwZXIudXNlO1xuXG4gICAgLy8gY3JlYXRlIGFzc2V0IHJlZ2lzdGVycywgc28gZXh0ZW5kZWQgY2xhc3Nlc1xuICAgIC8vIGNhbiBoYXZlIHRoZWlyIHByaXZhdGUgYXNzZXRzIHRvby5cbiAgICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICBTdWJbdHlwZV0gPSBTdXBlclt0eXBlXTtcbiAgICB9KTtcbiAgICAvLyBlbmFibGUgcmVjdXJzaXZlIHNlbGYtbG9va3VwXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIFN1Yi5vcHRpb25zLmNvbXBvbmVudHNbbmFtZV0gPSBTdWI7XG4gICAgfVxuXG4gICAgLy8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgc3VwZXIgb3B0aW9ucyBhdCBleHRlbnNpb24gdGltZS5cbiAgICAvLyBsYXRlciBhdCBpbnN0YW50aWF0aW9uIHdlIGNhbiBjaGVjayBpZiBTdXBlcidzIG9wdGlvbnMgaGF2ZVxuICAgIC8vIGJlZW4gdXBkYXRlZC5cbiAgICBTdWIuc3VwZXJPcHRpb25zID0gU3VwZXIub3B0aW9ucztcbiAgICBTdWIuZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnM7XG4gICAgU3ViLnNlYWxlZE9wdGlvbnMgPSBleHRlbmQoe30sIFN1Yi5vcHRpb25zKTtcblxuICAgIC8vIGNhY2hlIGNvbnN0cnVjdG9yXG4gICAgY2FjaGVkQ3RvcnNbU3VwZXJJZF0gPSBTdWI7XG4gICAgcmV0dXJuIFN1YlxuICB9O1xufVxuXG5mdW5jdGlvbiBpbml0UHJvcHMkMSAoQ29tcCkge1xuICB2YXIgcHJvcHMgPSBDb21wLm9wdGlvbnMucHJvcHM7XG4gIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgIHByb3h5KENvbXAucHJvdG90eXBlLCBcIl9wcm9wc1wiLCBrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluaXRDb21wdXRlZCQxIChDb21wKSB7XG4gIHZhciBjb21wdXRlZCA9IENvbXAub3B0aW9ucy5jb21wdXRlZDtcbiAgZm9yICh2YXIga2V5IGluIGNvbXB1dGVkKSB7XG4gICAgZGVmaW5lQ29tcHV0ZWQoQ29tcC5wcm90b3R5cGUsIGtleSwgY29tcHV0ZWRba2V5XSk7XG4gIH1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIGluaXRBc3NldFJlZ2lzdGVycyAoVnVlKSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYXNzZXQgcmVnaXN0cmF0aW9uIG1ldGhvZHMuXG4gICAqL1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlW3R5cGVdID0gZnVuY3Rpb24gKFxuICAgICAgaWQsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKSB7XG4gICAgICBpZiAoIWRlZmluaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1t0eXBlICsgJ3MnXVtpZF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlID09PSAnY29tcG9uZW50Jykge1xuICAgICAgICAgIHZhbGlkYXRlQ29tcG9uZW50TmFtZShpZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdjb21wb25lbnQnICYmIGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBkZWZpbml0aW9uLm5hbWUgfHwgaWQ7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHRoaXMub3B0aW9ucy5fYmFzZS5leHRlbmQoZGVmaW5pdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGUgPT09ICdkaXJlY3RpdmUnICYmIHR5cGVvZiBkZWZpbml0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbiA9IHsgYmluZDogZGVmaW5pdGlvbiwgdXBkYXRlOiBkZWZpbml0aW9uIH07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vcHRpb25zW3R5cGUgKyAncyddW2lkXSA9IGRlZmluaXRpb247XG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uXG4gICAgICB9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qICAqL1xuXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSAob3B0cykge1xuICByZXR1cm4gb3B0cyAmJiAob3B0cy5DdG9yLm9wdGlvbnMubmFtZSB8fCBvcHRzLnRhZylcbn1cblxuZnVuY3Rpb24gbWF0Y2hlcyAocGF0dGVybiwgbmFtZSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShwYXR0ZXJuKSkge1xuICAgIHJldHVybiBwYXR0ZXJuLmluZGV4T2YobmFtZSkgPiAtMVxuICB9IGVsc2UgaWYgKHR5cGVvZiBwYXR0ZXJuID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXR0ZXJuLnNwbGl0KCcsJykuaW5kZXhPZihuYW1lKSA+IC0xXG4gIH0gZWxzZSBpZiAoaXNSZWdFeHAocGF0dGVybikpIHtcbiAgICByZXR1cm4gcGF0dGVybi50ZXN0KG5hbWUpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGUgKGtlZXBBbGl2ZUluc3RhbmNlLCBmaWx0ZXIpIHtcbiAgdmFyIGNhY2hlID0ga2VlcEFsaXZlSW5zdGFuY2UuY2FjaGU7XG4gIHZhciBrZXlzID0ga2VlcEFsaXZlSW5zdGFuY2Uua2V5cztcbiAgdmFyIF92bm9kZSA9IGtlZXBBbGl2ZUluc3RhbmNlLl92bm9kZTtcbiAgZm9yICh2YXIga2V5IGluIGNhY2hlKSB7XG4gICAgdmFyIGNhY2hlZE5vZGUgPSBjYWNoZVtrZXldO1xuICAgIGlmIChjYWNoZWROb2RlKSB7XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY2FjaGVkTm9kZS5jb21wb25lbnRPcHRpb25zKTtcbiAgICAgIGlmIChuYW1lICYmICFmaWx0ZXIobmFtZSkpIHtcbiAgICAgICAgcHJ1bmVDYWNoZUVudHJ5KGNhY2hlLCBrZXksIGtleXMsIF92bm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBydW5lQ2FjaGVFbnRyeSAoXG4gIGNhY2hlLFxuICBrZXksXG4gIGtleXMsXG4gIGN1cnJlbnRcbikge1xuICB2YXIgY2FjaGVkJCQxID0gY2FjaGVba2V5XTtcbiAgaWYgKGNhY2hlZCQkMSAmJiAoIWN1cnJlbnQgfHwgY2FjaGVkJCQxLnRhZyAhPT0gY3VycmVudC50YWcpKSB7XG4gICAgY2FjaGVkJCQxLmNvbXBvbmVudEluc3RhbmNlLiRkZXN0cm95KCk7XG4gIH1cbiAgY2FjaGVba2V5XSA9IG51bGw7XG4gIHJlbW92ZShrZXlzLCBrZXkpO1xufVxuXG52YXIgcGF0dGVyblR5cGVzID0gW1N0cmluZywgUmVnRXhwLCBBcnJheV07XG5cbnZhciBLZWVwQWxpdmUgPSB7XG4gIG5hbWU6ICdrZWVwLWFsaXZlJyxcbiAgYWJzdHJhY3Q6IHRydWUsXG5cbiAgcHJvcHM6IHtcbiAgICBpbmNsdWRlOiBwYXR0ZXJuVHlwZXMsXG4gICAgZXhjbHVkZTogcGF0dGVyblR5cGVzLFxuICAgIG1heDogW1N0cmluZywgTnVtYmVyXVxuICB9LFxuXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQgKCkge1xuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMua2V5cyA9IFtdO1xuICB9LFxuXG4gIGRlc3Ryb3llZDogZnVuY3Rpb24gZGVzdHJveWVkICgpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5jYWNoZSkge1xuICAgICAgcHJ1bmVDYWNoZUVudHJ5KHRoaXMuY2FjaGUsIGtleSwgdGhpcy5rZXlzKTtcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCAoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgICB0aGlzLiR3YXRjaCgnaW5jbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gbWF0Y2hlcyh2YWwsIG5hbWUpOyB9KTtcbiAgICB9KTtcbiAgICB0aGlzLiR3YXRjaCgnZXhjbHVkZScsIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgIHBydW5lQ2FjaGUodGhpcyQxLCBmdW5jdGlvbiAobmFtZSkgeyByZXR1cm4gIW1hdGNoZXModmFsLCBuYW1lKTsgfSk7XG4gICAgfSk7XG4gIH0sXG5cbiAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIgKCkge1xuICAgIHZhciBzbG90ID0gdGhpcy4kc2xvdHMuZGVmYXVsdDtcbiAgICB2YXIgdm5vZGUgPSBnZXRGaXJzdENvbXBvbmVudENoaWxkKHNsb3QpO1xuICAgIHZhciBjb21wb25lbnRPcHRpb25zID0gdm5vZGUgJiYgdm5vZGUuY29tcG9uZW50T3B0aW9ucztcbiAgICBpZiAoY29tcG9uZW50T3B0aW9ucykge1xuICAgICAgLy8gY2hlY2sgcGF0dGVyblxuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGNvbXBvbmVudE9wdGlvbnMpO1xuICAgICAgdmFyIHJlZiA9IHRoaXM7XG4gICAgICB2YXIgaW5jbHVkZSA9IHJlZi5pbmNsdWRlO1xuICAgICAgdmFyIGV4Y2x1ZGUgPSByZWYuZXhjbHVkZTtcbiAgICAgIGlmIChcbiAgICAgICAgLy8gbm90IGluY2x1ZGVkXG4gICAgICAgIChpbmNsdWRlICYmICghbmFtZSB8fCAhbWF0Y2hlcyhpbmNsdWRlLCBuYW1lKSkpIHx8XG4gICAgICAgIC8vIGV4Y2x1ZGVkXG4gICAgICAgIChleGNsdWRlICYmIG5hbWUgJiYgbWF0Y2hlcyhleGNsdWRlLCBuYW1lKSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdm5vZGVcbiAgICAgIH1cblxuICAgICAgdmFyIHJlZiQxID0gdGhpcztcbiAgICAgIHZhciBjYWNoZSA9IHJlZiQxLmNhY2hlO1xuICAgICAgdmFyIGtleXMgPSByZWYkMS5rZXlzO1xuICAgICAgdmFyIGtleSA9IHZub2RlLmtleSA9PSBudWxsXG4gICAgICAgIC8vIHNhbWUgY29uc3RydWN0b3IgbWF5IGdldCByZWdpc3RlcmVkIGFzIGRpZmZlcmVudCBsb2NhbCBjb21wb25lbnRzXG4gICAgICAgIC8vIHNvIGNpZCBhbG9uZSBpcyBub3QgZW5vdWdoICgjMzI2OSlcbiAgICAgICAgPyBjb21wb25lbnRPcHRpb25zLkN0b3IuY2lkICsgKGNvbXBvbmVudE9wdGlvbnMudGFnID8gKFwiOjpcIiArIChjb21wb25lbnRPcHRpb25zLnRhZykpIDogJycpXG4gICAgICAgIDogdm5vZGUua2V5O1xuICAgICAgaWYgKGNhY2hlW2tleV0pIHtcbiAgICAgICAgdm5vZGUuY29tcG9uZW50SW5zdGFuY2UgPSBjYWNoZVtrZXldLmNvbXBvbmVudEluc3RhbmNlO1xuICAgICAgICAvLyBtYWtlIGN1cnJlbnQga2V5IGZyZXNoZXN0XG4gICAgICAgIHJlbW92ZShrZXlzLCBrZXkpO1xuICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlW2tleV0gPSB2bm9kZTtcbiAgICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgICAgIC8vIHBydW5lIG9sZGVzdCBlbnRyeVxuICAgICAgICBpZiAodGhpcy5tYXggJiYga2V5cy5sZW5ndGggPiBwYXJzZUludCh0aGlzLm1heCkpIHtcbiAgICAgICAgICBwcnVuZUNhY2hlRW50cnkoY2FjaGUsIGtleXNbMF0sIGtleXMsIHRoaXMuX3Zub2RlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2bm9kZS5kYXRhLmtlZXBBbGl2ZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiB2bm9kZSB8fCAoc2xvdCAmJiBzbG90WzBdKVxuICB9XG59O1xuXG52YXIgYnVpbHRJbkNvbXBvbmVudHMgPSB7XG4gIEtlZXBBbGl2ZTogS2VlcEFsaXZlXG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gaW5pdEdsb2JhbEFQSSAoVnVlKSB7XG4gIC8vIGNvbmZpZ1xuICB2YXIgY29uZmlnRGVmID0ge307XG4gIGNvbmZpZ0RlZi5nZXQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBjb25maWc7IH07XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgY29uZmlnRGVmLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm4oXG4gICAgICAgICdEbyBub3QgcmVwbGFjZSB0aGUgVnVlLmNvbmZpZyBvYmplY3QsIHNldCBpbmRpdmlkdWFsIGZpZWxkcyBpbnN0ZWFkLidcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLCAnY29uZmlnJywgY29uZmlnRGVmKTtcblxuICAvLyBleHBvc2VkIHV0aWwgbWV0aG9kcy5cbiAgLy8gTk9URTogdGhlc2UgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgLSBhdm9pZCByZWx5aW5nIG9uXG4gIC8vIHRoZW0gdW5sZXNzIHlvdSBhcmUgYXdhcmUgb2YgdGhlIHJpc2suXG4gIFZ1ZS51dGlsID0ge1xuICAgIHdhcm46IHdhcm4sXG4gICAgZXh0ZW5kOiBleHRlbmQsXG4gICAgbWVyZ2VPcHRpb25zOiBtZXJnZU9wdGlvbnMsXG4gICAgZGVmaW5lUmVhY3RpdmU6IGRlZmluZVJlYWN0aXZlJCQxXG4gIH07XG5cbiAgVnVlLnNldCA9IHNldDtcbiAgVnVlLmRlbGV0ZSA9IGRlbDtcbiAgVnVlLm5leHRUaWNrID0gbmV4dFRpY2s7XG5cbiAgLy8gMi42IGV4cGxpY2l0IG9ic2VydmFibGUgQVBJXG4gIFZ1ZS5vYnNlcnZhYmxlID0gZnVuY3Rpb24gKG9iaikge1xuICAgIG9ic2VydmUob2JqKTtcbiAgICByZXR1cm4gb2JqXG4gIH07XG5cbiAgVnVlLm9wdGlvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBBU1NFVF9UWVBFUy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgVnVlLm9wdGlvbnNbdHlwZSArICdzJ10gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB9KTtcblxuICAvLyB0aGlzIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFwiYmFzZVwiIGNvbnN0cnVjdG9yIHRvIGV4dGVuZCBhbGwgcGxhaW4tb2JqZWN0XG4gIC8vIGNvbXBvbmVudHMgd2l0aCBpbiBXZWV4J3MgbXVsdGktaW5zdGFuY2Ugc2NlbmFyaW9zLlxuICBWdWUub3B0aW9ucy5fYmFzZSA9IFZ1ZTtcblxuICBleHRlbmQoVnVlLm9wdGlvbnMuY29tcG9uZW50cywgYnVpbHRJbkNvbXBvbmVudHMpO1xuXG4gIGluaXRVc2UoVnVlKTtcbiAgaW5pdE1peGluJDEoVnVlKTtcbiAgaW5pdEV4dGVuZChWdWUpO1xuICBpbml0QXNzZXRSZWdpc3RlcnMoVnVlKTtcbn1cblxuaW5pdEdsb2JhbEFQSShWdWUpO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVnVlLnByb3RvdHlwZSwgJyRpc1NlcnZlcicsIHtcbiAgZ2V0OiBpc1NlcnZlclJlbmRlcmluZ1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUucHJvdG90eXBlLCAnJHNzckNvbnRleHQnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0ICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0aGlzLiR2bm9kZSAmJiB0aGlzLiR2bm9kZS5zc3JDb250ZXh0XG4gIH1cbn0pO1xuXG4vLyBleHBvc2UgRnVuY3Rpb25hbFJlbmRlckNvbnRleHQgZm9yIHNzciBydW50aW1lIGhlbHBlciBpbnN0YWxsYXRpb25cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShWdWUsICdGdW5jdGlvbmFsUmVuZGVyQ29udGV4dCcsIHtcbiAgdmFsdWU6IEZ1bmN0aW9uYWxSZW5kZXJDb250ZXh0XG59KTtcblxuVnVlLnZlcnNpb24gPSAnMi42LjExJztcblxuLyoqXG4gKiBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vVGVuY2VudC93ZXN0b3JlL21hc3Rlci9wYWNrYWdlcy93ZXN0b3JlL3V0aWxzL2RpZmYuanNcbiAqL1xudmFyIEFSUkFZVFlQRSA9ICdbb2JqZWN0IEFycmF5XSc7XG52YXIgT0JKRUNUVFlQRSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuLy8gY29uc3QgRlVOQ1RJT05UWVBFID0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuXG5mdW5jdGlvbiBkaWZmKGN1cnJlbnQsIHByZSkge1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBzeW5jS2V5cyhjdXJyZW50LCBwcmUpO1xuICAgIF9kaWZmKGN1cnJlbnQsIHByZSwgJycsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdFxufVxuXG5mdW5jdGlvbiBzeW5jS2V5cyhjdXJyZW50LCBwcmUpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gcHJlKSB7IHJldHVybiB9XG4gICAgdmFyIHJvb3RDdXJyZW50VHlwZSA9IHR5cGUoY3VycmVudCk7XG4gICAgdmFyIHJvb3RQcmVUeXBlID0gdHlwZShwcmUpO1xuICAgIGlmIChyb290Q3VycmVudFR5cGUgPT0gT0JKRUNUVFlQRSAmJiByb290UHJlVHlwZSA9PSBPQkpFQ1RUWVBFKSB7XG4gICAgICAgIGlmKE9iamVjdC5rZXlzKGN1cnJlbnQpLmxlbmd0aCA+PSBPYmplY3Qua2V5cyhwcmUpLmxlbmd0aCl7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRWYWx1ZSA9IGN1cnJlbnRba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFtrZXldID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzeW5jS2V5cyhjdXJyZW50VmFsdWUsIHByZVtrZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJvb3RDdXJyZW50VHlwZSA9PSBBUlJBWVRZUEUgJiYgcm9vdFByZVR5cGUgPT0gQVJSQVlUWVBFKSB7XG4gICAgICAgIGlmIChjdXJyZW50Lmxlbmd0aCA+PSBwcmUubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcmUuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHtcbiAgICAgICAgICAgICAgICBzeW5jS2V5cyhjdXJyZW50W2luZGV4XSwgaXRlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gX2RpZmYoY3VycmVudCwgcHJlLCBwYXRoLCByZXN1bHQpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gcHJlKSB7IHJldHVybiB9XG4gICAgdmFyIHJvb3RDdXJyZW50VHlwZSA9IHR5cGUoY3VycmVudCk7XG4gICAgdmFyIHJvb3RQcmVUeXBlID0gdHlwZShwcmUpO1xuICAgIGlmIChyb290Q3VycmVudFR5cGUgPT0gT0JKRUNUVFlQRSkge1xuICAgICAgICBpZiAocm9vdFByZVR5cGUgIT0gT0JKRUNUVFlQRSB8fCBPYmplY3Qua2V5cyhjdXJyZW50KS5sZW5ndGggPCBPYmplY3Qua2V5cyhwcmUpLmxlbmd0aCkge1xuICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdCwgcGF0aCwgY3VycmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbG9vcCA9IGZ1bmN0aW9uICgga2V5ICkge1xuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50VmFsdWUgPSBjdXJyZW50W2tleV07XG4gICAgICAgICAgICAgICAgdmFyIHByZVZhbHVlID0gcHJlW2tleV07XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRUeXBlID0gdHlwZShjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhciBwcmVUeXBlID0gdHlwZShwcmVWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRUeXBlICE9IEFSUkFZVFlQRSAmJiBjdXJyZW50VHlwZSAhPSBPQkpFQ1RUWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5PVEUg5q2k5aSE5bCGICE9IOS/ruaUueS4uiAhPT3jgILmtonlj4rlnLDmlrnlpKrlpJrmgZDmgJXmtYvor5XkuI3liLDvvIzlpoLmnpzlh7rnjrDmlbDmja7lr7nmr5Tpl67popjvvIzlsIblhbbkv67mlLnlm57mnaXjgIJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gcHJlW2tleV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHQsIChwYXRoID09ICcnID8gJycgOiBwYXRoICsgXCIuXCIpICsga2V5LCBjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VHlwZSA9PSBBUlJBWVRZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZVR5cGUgIT0gQVJSQVlUWVBFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0LCAocGF0aCA9PSAnJyA/ICcnIDogcGF0aCArIFwiLlwiKSArIGtleSwgY3VycmVudFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUubGVuZ3RoIDwgcHJlVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHJlc3VsdCwgKHBhdGggPT0gJycgPyAnJyA6IHBhdGggKyBcIi5cIikgKyBrZXksIGN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZGlmZihpdGVtLCBwcmVWYWx1ZVtpbmRleF0sIChwYXRoID09ICcnID8gJycgOiBwYXRoICsgXCIuXCIpICsga2V5ICsgJ1snICsgaW5kZXggKyAnXScsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRUeXBlID09IE9CSkVDVFRZUEUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZVR5cGUgIT0gT0JKRUNUVFlQRSB8fCBPYmplY3Qua2V5cyhjdXJyZW50VmFsdWUpLmxlbmd0aCA8IE9iamVjdC5rZXlzKHByZVZhbHVlKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChyZXN1bHQsIChwYXRoID09ICcnID8gJycgOiBwYXRoICsgXCIuXCIpICsga2V5LCBjdXJyZW50VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgc3ViS2V5IGluIGN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kaWZmKGN1cnJlbnRWYWx1ZVtzdWJLZXldLCBwcmVWYWx1ZVtzdWJLZXldLCAocGF0aCA9PSAnJyA/ICcnIDogcGF0aCArIFwiLlwiKSArIGtleSArICcuJyArIHN1YktleSwgcmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50KSBsb29wKCBrZXkgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAocm9vdEN1cnJlbnRUeXBlID09IEFSUkFZVFlQRSkge1xuICAgICAgICBpZiAocm9vdFByZVR5cGUgIT0gQVJSQVlUWVBFKSB7XG4gICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0LCBwYXRoLCBjdXJyZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Lmxlbmd0aCA8IHByZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQocmVzdWx0LCBwYXRoLCBjdXJyZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3VycmVudC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBfZGlmZihpdGVtLCBwcmVbaW5kZXhdLCBwYXRoICsgJ1snICsgaW5kZXggKyAnXScsIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBzZXRSZXN1bHQocmVzdWx0LCBwYXRoLCBjdXJyZW50KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNldFJlc3VsdChyZXN1bHQsIGssIHYpIHtcbiAgICAvLyBpZiAodHlwZSh2KSAhPSBGVU5DVElPTlRZUEUpIHtcbiAgICAgICAgcmVzdWx0W2tdID0gdjtcbiAgICAvLyB9XG59XG5cbmZ1bmN0aW9uIHR5cGUob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopXG59XG5cbi8qICAqL1xuXG5mdW5jdGlvbiBmbHVzaENhbGxiYWNrcyQxKHZtKSB7XG4gICAgaWYgKHZtLl9fbmV4dF90aWNrX2NhbGxiYWNrcyAmJiB2bS5fX25leHRfdGlja19jYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5WVUVfQVBQX0RFQlVHKSB7XG4gICAgICAgICAgICB2YXIgbXBJbnN0YW5jZSA9IHZtLiRzY29wZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbJyArICgrbmV3IERhdGUpICsgJ11bJyArIChtcEluc3RhbmNlLmlzIHx8IG1wSW5zdGFuY2Uucm91dGUpICsgJ11bJyArIHZtLl91aWQgK1xuICAgICAgICAgICAgICAgICddOmZsdXNoQ2FsbGJhY2tzWycgKyB2bS5fX25leHRfdGlja19jYWxsYmFja3MubGVuZ3RoICsgJ10nKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29waWVzID0gdm0uX19uZXh0X3RpY2tfY2FsbGJhY2tzLnNsaWNlKDApO1xuICAgICAgICB2bS5fX25leHRfdGlja19jYWxsYmFja3MubGVuZ3RoID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3BpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvcGllc1tpXSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBoYXNSZW5kZXJXYXRjaGVyKHZtKSB7XG4gICAgcmV0dXJuIHF1ZXVlLmZpbmQoZnVuY3Rpb24gKHdhdGNoZXIpIHsgcmV0dXJuIHZtLl93YXRjaGVyID09PSB3YXRjaGVyOyB9KVxufVxuXG5mdW5jdGlvbiBuZXh0VGljayQxKHZtLCBjYikge1xuICAgIC8vMS5uZXh0VGljayDkuYvliY0g5beyIHNldERhdGEg5LiUIHNldERhdGEg6L+Y5pyq5Zue6LCD5a6M5oiQXG4gICAgLy8yLm5leHRUaWNrIOS5i+WJjeWtmOWcqCByZW5kZXIgd2F0Y2hlclxuICAgIGlmICghdm0uX19uZXh0X3RpY2tfcGVuZGluZyAmJiAhaGFzUmVuZGVyV2F0Y2hlcih2bSkpIHtcbiAgICAgICAgaWYocHJvY2Vzcy5lbnYuVlVFX0FQUF9ERUJVRyl7XG4gICAgICAgICAgICB2YXIgbXBJbnN0YW5jZSA9IHZtLiRzY29wZTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbJyArICgrbmV3IERhdGUpICsgJ11bJyArIChtcEluc3RhbmNlLmlzIHx8IG1wSW5zdGFuY2Uucm91dGUpICsgJ11bJyArIHZtLl91aWQgK1xuICAgICAgICAgICAgICAgICddOm5leHRWdWVUaWNrJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHRUaWNrKGNiLCB2bSlcbiAgICB9ZWxzZXtcbiAgICAgICAgaWYocHJvY2Vzcy5lbnYuVlVFX0FQUF9ERUJVRyl7XG4gICAgICAgICAgICB2YXIgbXBJbnN0YW5jZSQxID0gdm0uJHNjb3BlO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ1snICsgKCtuZXcgRGF0ZSkgKyAnXVsnICsgKG1wSW5zdGFuY2UkMS5pcyB8fCBtcEluc3RhbmNlJDEucm91dGUpICsgJ11bJyArIHZtLl91aWQgK1xuICAgICAgICAgICAgICAgICddOm5leHRNUFRpY2snKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgX3Jlc29sdmU7XG4gICAgaWYgKCF2bS5fX25leHRfdGlja19jYWxsYmFja3MpIHtcbiAgICAgICAgdm0uX19uZXh0X3RpY2tfY2FsbGJhY2tzID0gW107XG4gICAgfVxuICAgIHZtLl9fbmV4dF90aWNrX2NhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNiLmNhbGwodm0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGUsIHZtLCAnbmV4dFRpY2snKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChfcmVzb2x2ZSkge1xuICAgICAgICAgICAgX3Jlc29sdmUodm0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gJGZsb3ctZGlzYWJsZS1saW5lXG4gICAgaWYgKCFjYiAmJiB0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIH0pXG4gICAgfVxufVxuXG4vKiAgKi9cblxuZnVuY3Rpb24gY2xvbmVXaXRoRGF0YSh2bSkge1xuICAvLyDnoa7kv53lvZPliY0gdm0g5omA5pyJ5pWw5o2u6KKr5ZCM5q2lXG4gIHZhciByZXQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgZGF0YUtleXMgPSBbXS5jb25jYXQoXG4gICAgT2JqZWN0LmtleXModm0uX2RhdGEgfHwge30pLFxuICAgIE9iamVjdC5rZXlzKHZtLl9jb21wdXRlZFdhdGNoZXJzIHx8IHt9KSk7XG5cbiAgZGF0YUtleXMucmVkdWNlKGZ1bmN0aW9uKHJldCwga2V5KSB7XG4gICAgcmV0W2tleV0gPSB2bVtrZXldO1xuICAgIHJldHVybiByZXRcbiAgfSwgcmV0KTtcblxuICAvLyB2dWUtY29tcG9zaXRpb24tYXBpXG4gIHZhciBjb21wb3NpdGlvbkFwaVN0YXRlID0gdm0uX19jb21wb3NpdGlvbl9hcGlfc3RhdGVfXyB8fCB2bS5fX3NlY3JldF92ZmFfc3RhdGVfXztcbiAgdmFyIHJhd0JpbmRpbmdzID0gY29tcG9zaXRpb25BcGlTdGF0ZSAmJiBjb21wb3NpdGlvbkFwaVN0YXRlLnJhd0JpbmRpbmdzO1xuICBpZiAocmF3QmluZGluZ3MpIHtcbiAgICBPYmplY3Qua2V5cyhyYXdCaW5kaW5ncykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXRba2V5XSA9IHZtW2tleV07XG4gICAgfSk7XG4gIH1cblxuICAvL1RPRE8g6ZyA6KaB5oqK5peg55So5pWw5o2u5aSE55CG5o6J77yM5q+U5aaCIGxpc3Q9PmwwIOWImSBsaXN0IOmcgOimgeenu+mZpO+8jOWQpuWImeWkmuS8oOi+k+S4gOS7veaVsOaNrlxuICBPYmplY3QuYXNzaWduKHJldCwgdm0uJG1wLmRhdGEgfHwge30pO1xuICBpZiAoXG4gICAgQXJyYXkuaXNBcnJheSh2bS4kb3B0aW9ucy5iZWhhdmlvcnMpICYmXG4gICAgdm0uJG9wdGlvbnMuYmVoYXZpb3JzLmluZGV4T2YoJ3VuaTovL2Zvcm0tZmllbGQnKSAhPT0gLTFcbiAgKSB7IC8vZm9ybS1maWVsZFxuICAgIHJldFsnbmFtZSddID0gdm0ubmFtZTtcbiAgICByZXRbJ3ZhbHVlJ10gPSB2bS52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJldCkpXG59XG5cbnZhciBwYXRjaCA9IGZ1bmN0aW9uKG9sZFZub2RlLCB2bm9kZSkge1xuICB2YXIgdGhpcyQxID0gdGhpcztcblxuICBpZiAodm5vZGUgPT09IG51bGwpIHsgLy9kZXN0cm95XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHRoaXMubXBUeXBlID09PSAncGFnZScgfHwgdGhpcy5tcFR5cGUgPT09ICdjb21wb25lbnQnKSB7XG4gICAgdmFyIG1wSW5zdGFuY2UgPSB0aGlzLiRzY29wZTtcbiAgICB2YXIgZGF0YSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdHJ5IHtcbiAgICAgIGRhdGEgPSBjbG9uZVdpdGhEYXRhKHRoaXMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH1cbiAgICBkYXRhLl9fd2Vidmlld0lkX18gPSBtcEluc3RhbmNlLmRhdGEuX193ZWJ2aWV3SWRfXztcbiAgICB2YXIgbXBEYXRhID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgLy/ku4XlkIzmraUgZGF0YSDkuK3mnInnmoTmlbDmja5cbiAgICAgIG1wRGF0YVtrZXldID0gbXBJbnN0YW5jZS5kYXRhW2tleV07XG4gICAgfSk7XG4gICAgdmFyIGRpZmZEYXRhID0gdGhpcy4kc2hvdWxkRGlmZkRhdGEgPT09IGZhbHNlID8gZGF0YSA6IGRpZmYoZGF0YSwgbXBEYXRhKTtcbiAgICBpZiAoT2JqZWN0LmtleXMoZGlmZkRhdGEpLmxlbmd0aCkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52LlZVRV9BUFBfREVCVUcpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1snICsgKCtuZXcgRGF0ZSkgKyAnXVsnICsgKG1wSW5zdGFuY2UuaXMgfHwgbXBJbnN0YW5jZS5yb3V0ZSkgKyAnXVsnICsgdGhpcy5fdWlkICtcbiAgICAgICAgICAnXeW3rumHj+abtOaWsCcsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZGlmZkRhdGEpKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX19uZXh0X3RpY2tfcGVuZGluZyA9IHRydWU7XG4gICAgICBtcEluc3RhbmNlLnNldERhdGEoZGlmZkRhdGEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcyQxLl9fbmV4dF90aWNrX3BlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgZmx1c2hDYWxsYmFja3MkMSh0aGlzJDEpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsdXNoQ2FsbGJhY2tzJDEodGhpcyk7XG4gICAgfVxuICB9XG59O1xuXG4vKiAgKi9cblxuZnVuY3Rpb24gY3JlYXRlRW1wdHlSZW5kZXIoKSB7XG5cbn1cblxuZnVuY3Rpb24gbW91bnRDb21wb25lbnQkMShcbiAgdm0sXG4gIGVsLFxuICBoeWRyYXRpbmdcbikge1xuICBpZiAoIXZtLm1wVHlwZSkgey8vbWFpbi5qcyDkuK3nmoQgbmV3IFZ1ZVxuICAgIHJldHVybiB2bVxuICB9XG4gIGlmICh2bS5tcFR5cGUgPT09ICdhcHAnKSB7XG4gICAgdm0uJG9wdGlvbnMucmVuZGVyID0gY3JlYXRlRW1wdHlSZW5kZXI7XG4gIH1cbiAgaWYgKCF2bS4kb3B0aW9ucy5yZW5kZXIpIHtcbiAgICB2bS4kb3B0aW9ucy5yZW5kZXIgPSBjcmVhdGVFbXB0eVJlbmRlcjtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoKHZtLiRvcHRpb25zLnRlbXBsYXRlICYmIHZtLiRvcHRpb25zLnRlbXBsYXRlLmNoYXJBdCgwKSAhPT0gJyMnKSB8fFxuICAgICAgICB2bS4kb3B0aW9ucy5lbCB8fCBlbCkge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdZb3UgYXJlIHVzaW5nIHRoZSBydW50aW1lLW9ubHkgYnVpbGQgb2YgVnVlIHdoZXJlIHRoZSB0ZW1wbGF0ZSAnICtcbiAgICAgICAgICAnY29tcGlsZXIgaXMgbm90IGF2YWlsYWJsZS4gRWl0aGVyIHByZS1jb21waWxlIHRoZSB0ZW1wbGF0ZXMgaW50byAnICtcbiAgICAgICAgICAncmVuZGVyIGZ1bmN0aW9ucywgb3IgdXNlIHRoZSBjb21waWxlci1pbmNsdWRlZCBidWlsZC4nLFxuICAgICAgICAgIHZtXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3YXJuKFxuICAgICAgICAgICdGYWlsZWQgdG8gbW91bnQgY29tcG9uZW50OiB0ZW1wbGF0ZSBvciByZW5kZXIgZnVuY3Rpb24gbm90IGRlZmluZWQuJyxcbiAgICAgICAgICB2bVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBcbiAgIXZtLl8kZmFsbGJhY2sgJiYgY2FsbEhvb2sodm0sICdiZWZvcmVNb3VudCcpO1xuXG4gIHZhciB1cGRhdGVDb21wb25lbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdm0uX3VwZGF0ZSh2bS5fcmVuZGVyKCksIGh5ZHJhdGluZyk7XG4gIH07XG5cbiAgLy8gd2Ugc2V0IHRoaXMgdG8gdm0uX3dhdGNoZXIgaW5zaWRlIHRoZSB3YXRjaGVyJ3MgY29uc3RydWN0b3JcbiAgLy8gc2luY2UgdGhlIHdhdGNoZXIncyBpbml0aWFsIHBhdGNoIG1heSBjYWxsICRmb3JjZVVwZGF0ZSAoZS5nLiBpbnNpZGUgY2hpbGRcbiAgLy8gY29tcG9uZW50J3MgbW91bnRlZCBob29rKSwgd2hpY2ggcmVsaWVzIG9uIHZtLl93YXRjaGVyIGJlaW5nIGFscmVhZHkgZGVmaW5lZFxuICBuZXcgV2F0Y2hlcih2bSwgdXBkYXRlQ29tcG9uZW50LCBub29wLCB7XG4gICAgYmVmb3JlOiBmdW5jdGlvbiBiZWZvcmUoKSB7XG4gICAgICBpZiAodm0uX2lzTW91bnRlZCAmJiAhdm0uX2lzRGVzdHJveWVkKSB7XG4gICAgICAgIGNhbGxIb29rKHZtLCAnYmVmb3JlVXBkYXRlJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB0cnVlIC8qIGlzUmVuZGVyV2F0Y2hlciAqLyk7XG4gIGh5ZHJhdGluZyA9IGZhbHNlO1xuICByZXR1cm4gdm1cbn1cblxuLyogICovXG5cbmZ1bmN0aW9uIHJlbmRlckNsYXNzIChcbiAgc3RhdGljQ2xhc3MsXG4gIGR5bmFtaWNDbGFzc1xuKSB7XG4gIGlmIChpc0RlZihzdGF0aWNDbGFzcykgfHwgaXNEZWYoZHluYW1pY0NsYXNzKSkge1xuICAgIHJldHVybiBjb25jYXQoc3RhdGljQ2xhc3MsIHN0cmluZ2lmeUNsYXNzKGR5bmFtaWNDbGFzcykpXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuICcnXG59XG5cbmZ1bmN0aW9uIGNvbmNhdCAoYSwgYikge1xuICByZXR1cm4gYSA/IGIgPyAoYSArICcgJyArIGIpIDogYSA6IChiIHx8ICcnKVxufVxuXG5mdW5jdGlvbiBzdHJpbmdpZnlDbGFzcyAodmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN0cmluZ2lmeUFycmF5KHZhbHVlKVxuICB9XG4gIGlmIChpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3RyaW5naWZ5T2JqZWN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgcmV0dXJuICcnXG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeUFycmF5ICh2YWx1ZSkge1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBzdHJpbmdpZmllZDtcbiAgZm9yICh2YXIgaSA9IDAsIGwgPSB2YWx1ZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoaXNEZWYoc3RyaW5naWZpZWQgPSBzdHJpbmdpZnlDbGFzcyh2YWx1ZVtpXSkpICYmIHN0cmluZ2lmaWVkICE9PSAnJykge1xuICAgICAgaWYgKHJlcykgeyByZXMgKz0gJyAnOyB9XG4gICAgICByZXMgKz0gc3RyaW5naWZpZWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5T2JqZWN0ICh2YWx1ZSkge1xuICB2YXIgcmVzID0gJyc7XG4gIGZvciAodmFyIGtleSBpbiB2YWx1ZSkge1xuICAgIGlmICh2YWx1ZVtrZXldKSB7XG4gICAgICBpZiAocmVzKSB7IHJlcyArPSAnICc7IH1cbiAgICAgIHJlcyArPSBrZXk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuLyogICovXG5cbnZhciBwYXJzZVN0eWxlVGV4dCA9IGNhY2hlZChmdW5jdGlvbiAoY3NzVGV4dCkge1xuICB2YXIgcmVzID0ge307XG4gIHZhciBsaXN0RGVsaW1pdGVyID0gLzsoPyFbXihdKlxcKSkvZztcbiAgdmFyIHByb3BlcnR5RGVsaW1pdGVyID0gLzooLispLztcbiAgY3NzVGV4dC5zcGxpdChsaXN0RGVsaW1pdGVyKS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHZhciB0bXAgPSBpdGVtLnNwbGl0KHByb3BlcnR5RGVsaW1pdGVyKTtcbiAgICAgIHRtcC5sZW5ndGggPiAxICYmIChyZXNbdG1wWzBdLnRyaW0oKV0gPSB0bXBbMV0udHJpbSgpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxuLy8gbm9ybWFsaXplIHBvc3NpYmxlIGFycmF5IC8gc3RyaW5nIHZhbHVlcyBpbnRvIE9iamVjdFxuZnVuY3Rpb24gbm9ybWFsaXplU3R5bGVCaW5kaW5nIChiaW5kaW5nU3R5bGUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYmluZGluZ1N0eWxlKSkge1xuICAgIHJldHVybiB0b09iamVjdChiaW5kaW5nU3R5bGUpXG4gIH1cbiAgaWYgKHR5cGVvZiBiaW5kaW5nU3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhcnNlU3R5bGVUZXh0KGJpbmRpbmdTdHlsZSlcbiAgfVxuICByZXR1cm4gYmluZGluZ1N0eWxlXG59XG5cbi8qICAqL1xuXG52YXIgTVBfTUVUSE9EUyA9IFsnY3JlYXRlU2VsZWN0b3JRdWVyeScsICdjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlcicsICdzZWxlY3RBbGxDb21wb25lbnRzJywgJ3NlbGVjdENvbXBvbmVudCddO1xuXG5mdW5jdGlvbiBnZXRUYXJnZXQob2JqLCBwYXRoKSB7XG4gIHZhciBwYXJ0cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgdmFyIGtleSA9IHBhcnRzWzBdO1xuICBpZiAoa2V5LmluZGV4T2YoJ19fJG4nKSA9PT0gMCkgeyAvL251bWJlciBpbmRleFxuICAgIGtleSA9IHBhcnNlSW50KGtleS5yZXBsYWNlKCdfXyRuJywgJycpKTtcbiAgfVxuICBpZiAocGFydHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIG9ialtrZXldXG4gIH1cbiAgcmV0dXJuIGdldFRhcmdldChvYmpba2V5XSwgcGFydHMuc2xpY2UoMSkuam9pbignLicpKVxufVxuXG5mdW5jdGlvbiBpbnRlcm5hbE1peGluKFZ1ZSkge1xuXG4gIFZ1ZS5jb25maWcuZXJyb3JIYW5kbGVyID0gZnVuY3Rpb24oZXJyLCB2bSwgaW5mbykge1xuICAgIFZ1ZS51dGlsLndhcm4oKFwiRXJyb3IgaW4gXCIgKyBpbmZvICsgXCI6IFxcXCJcIiArIChlcnIudG9TdHJpbmcoKSkgKyBcIlxcXCJcIiksIHZtKTtcbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbiAgICB2YXIgYXBwID0gdHlwZW9mIGdldEFwcCA9PT0gJ2Z1bmN0aW9uJyAmJiBnZXRBcHAoKTtcbiAgICBpZiAoYXBwICYmIGFwcC5vbkVycm9yKSB7XG4gICAgICBhcHAub25FcnJvcihlcnIpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgb2xkRW1pdCA9IFZ1ZS5wcm90b3R5cGUuJGVtaXQ7XG5cbiAgVnVlLnByb3RvdHlwZS4kZW1pdCA9IGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuJHNjb3BlICYmIGV2ZW50KSB7XG4gICAgICB0aGlzLiRzY29wZVsndHJpZ2dlckV2ZW50J10oZXZlbnQsIHtcbiAgICAgICAgX19hcmdzX186IHRvQXJyYXkoYXJndW1lbnRzLCAxKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvbGRFbWl0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfTtcblxuICBWdWUucHJvdG90eXBlLiRuZXh0VGljayA9IGZ1bmN0aW9uKGZuKSB7XG4gICAgcmV0dXJuIG5leHRUaWNrJDEodGhpcywgZm4pXG4gIH07XG5cbiAgTVBfTUVUSE9EUy5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICBWdWUucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmdzKSB7XG4gICAgICBpZiAodGhpcy4kc2NvcGUgJiYgdGhpcy4kc2NvcGVbbWV0aG9kXSkge1xuICAgICAgICByZXR1cm4gdGhpcy4kc2NvcGVbbWV0aG9kXShhcmdzKVxuICAgICAgfVxuICAgICAgLy8gbXAtYWxpcGF5XG4gICAgICBpZiAodHlwZW9mIG15ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QgPT09ICdjcmVhdGVTZWxlY3RvclF1ZXJ5Jykge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuICAgICAgICByZXR1cm4gbXkuY3JlYXRlU2VsZWN0b3JRdWVyeShhcmdzKVxuICAgICAgfSBlbHNlIGlmIChtZXRob2QgPT09ICdjcmVhdGVJbnRlcnNlY3Rpb25PYnNlcnZlcicpIHtcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbiAgICAgICAgcmV0dXJuIG15LmNyZWF0ZUludGVyc2VjdGlvbk9ic2VydmVyKGFyZ3MpXG4gICAgICB9XG4gICAgICAvLyBUT0RPIG1wLWFsaXBheSDmmoLkuI3mlK/mjIEgc2VsZWN0QWxsQ29tcG9uZW50cyxzZWxlY3RDb21wb25lbnRcbiAgICB9O1xuICB9KTtcblxuICBWdWUucHJvdG90eXBlLl9faW5pdF9wcm92aWRlID0gaW5pdFByb3ZpZGU7XG5cbiAgVnVlLnByb3RvdHlwZS5fX2luaXRfaW5qZWN0aW9ucyA9IGluaXRJbmplY3Rpb25zO1xuXG4gIFZ1ZS5wcm90b3R5cGUuX19jYWxsX2hvb2sgPSBmdW5jdGlvbihob29rLCBhcmdzKSB7XG4gICAgdmFyIHZtID0gdGhpcztcbiAgICAvLyAjNzU3MyBkaXNhYmxlIGRlcCBjb2xsZWN0aW9uIHdoZW4gaW52b2tpbmcgbGlmZWN5Y2xlIGhvb2tzXG4gICAgcHVzaFRhcmdldCgpO1xuICAgIHZhciBoYW5kbGVycyA9IHZtLiRvcHRpb25zW2hvb2tdO1xuICAgIHZhciBpbmZvID0gaG9vayArIFwiIGhvb2tcIjtcbiAgICB2YXIgcmV0O1xuICAgIGlmIChoYW5kbGVycykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGogPSBoYW5kbGVycy5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgcmV0ID0gaW52b2tlV2l0aEVycm9ySGFuZGxpbmcoaGFuZGxlcnNbaV0sIHZtLCBhcmdzID8gW2FyZ3NdIDogbnVsbCwgdm0sIGluZm8pO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodm0uX2hhc0hvb2tFdmVudCkge1xuICAgICAgdm0uJGVtaXQoJ2hvb2s6JyArIGhvb2ssIGFyZ3MpO1xuICAgIH1cbiAgICBwb3BUYXJnZXQoKTtcbiAgICByZXR1cm4gcmV0XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS5fX3NldF9tb2RlbCA9IGZ1bmN0aW9uKHRhcmdldCwga2V5LCB2YWx1ZSwgbW9kaWZpZXJzKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobW9kaWZpZXJzKSkge1xuICAgICAgaWYgKG1vZGlmaWVycy5pbmRleE9mKCd0cmltJykgIT09IC0xKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGlmaWVycy5pbmRleE9mKCdudW1iZXInKSAhPT0gLTEpIHtcbiAgICAgICAgdmFsdWUgPSB0aGlzLl9uKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHRhcmdldCA9IHRoaXM7XG4gICAgfVxuICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS5fX3NldF9zeW5jID0gZnVuY3Rpb24odGFyZ2V0LCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHRhcmdldCA9IHRoaXM7XG4gICAgfVxuICAgIHRhcmdldFtrZXldID0gdmFsdWU7XG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS5fX2dldF9vcmlnID0gZnVuY3Rpb24oaXRlbSkge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KGl0ZW0pKSB7XG4gICAgICByZXR1cm4gaXRlbVsnJG9yaWcnXSB8fCBpdGVtXG4gICAgfVxuICAgIHJldHVybiBpdGVtXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS5fX2dldF92YWx1ZSA9IGZ1bmN0aW9uKGRhdGFQYXRoLCB0YXJnZXQpIHtcbiAgICByZXR1cm4gZ2V0VGFyZ2V0KHRhcmdldCB8fCB0aGlzLCBkYXRhUGF0aClcbiAgfTtcblxuXG4gIFZ1ZS5wcm90b3R5cGUuX19nZXRfY2xhc3MgPSBmdW5jdGlvbihkeW5hbWljQ2xhc3MsIHN0YXRpY0NsYXNzKSB7XG4gICAgcmV0dXJuIHJlbmRlckNsYXNzKHN0YXRpY0NsYXNzLCBkeW5hbWljQ2xhc3MpXG4gIH07XG5cbiAgVnVlLnByb3RvdHlwZS5fX2dldF9zdHlsZSA9IGZ1bmN0aW9uKGR5bmFtaWNTdHlsZSwgc3RhdGljU3R5bGUpIHtcbiAgICBpZiAoIWR5bmFtaWNTdHlsZSAmJiAhc3RhdGljU3R5bGUpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICB2YXIgZHluYW1pY1N0eWxlT2JqID0gbm9ybWFsaXplU3R5bGVCaW5kaW5nKGR5bmFtaWNTdHlsZSk7XG4gICAgdmFyIHN0eWxlT2JqID0gc3RhdGljU3R5bGUgPyBleHRlbmQoc3RhdGljU3R5bGUsIGR5bmFtaWNTdHlsZU9iaikgOiBkeW5hbWljU3R5bGVPYmo7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHN0eWxlT2JqKS5tYXAoZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuICgoaHlwaGVuYXRlKG5hbWUpKSArIFwiOlwiICsgKHN0eWxlT2JqW25hbWVdKSk7IH0pLmpvaW4oJzsnKVxuICB9O1xuXG4gIFZ1ZS5wcm90b3R5cGUuX19tYXAgPSBmdW5jdGlvbih2YWwsIGl0ZXJhdGVlKSB7XG4gICAgLy9UT0RPIOaaguS4jeiAg+iZkSBzdHJpbmdcbiAgICB2YXIgcmV0LCBpLCBsLCBrZXlzLCBrZXk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgcmV0ID0gbmV3IEFycmF5KHZhbC5sZW5ndGgpO1xuICAgICAgZm9yIChpID0gMCwgbCA9IHZhbC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgcmV0W2ldID0gaXRlcmF0ZWUodmFsW2ldLCBpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXRcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KHZhbCkpIHtcbiAgICAgIGtleXMgPSBPYmplY3Qua2V5cyh2YWwpO1xuICAgICAgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgIGZvciAoaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgICByZXRba2V5XSA9IGl0ZXJhdGVlKHZhbFtrZXldLCBrZXksIGkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJldFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldCA9IG5ldyBBcnJheSh2YWwpO1xuICAgICAgZm9yIChpID0gMCwgbCA9IHZhbDsgaSA8IGw7IGkrKykge1xuICAgICAgICAvLyDnrKzkuIDkuKrlj4LmlbDmmoLml7bku43lkozlsI/nqIvluo/kuIDoh7RcbiAgICAgICAgcmV0W2ldID0gaXRlcmF0ZWUoaSwgaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmV0XG4gICAgfVxuICAgIHJldHVybiBbXVxuICB9O1xuXG59XG5cbi8qICAqL1xuXG52YXIgTElGRUNZQ0xFX0hPT0tTJDEgPSBbXG4gICAgLy9BcHBcbiAgICAnb25MYXVuY2gnLFxuICAgICdvblNob3cnLFxuICAgICdvbkhpZGUnLFxuICAgICdvblVuaU5WaWV3TWVzc2FnZScsXG4gICAgJ29uUGFnZU5vdEZvdW5kJyxcbiAgICAnb25UaGVtZUNoYW5nZScsXG4gICAgJ29uRXJyb3InLFxuICAgICdvblVuaGFuZGxlZFJlamVjdGlvbicsXG4gICAgLy9QYWdlXG4gICAgJ29uSW5pdCcsXG4gICAgJ29uTG9hZCcsXG4gICAgLy8gJ29uU2hvdycsXG4gICAgJ29uUmVhZHknLFxuICAgIC8vICdvbkhpZGUnLFxuICAgICdvblVubG9hZCcsXG4gICAgJ29uUHVsbERvd25SZWZyZXNoJyxcbiAgICAnb25SZWFjaEJvdHRvbScsXG4gICAgJ29uVGFiSXRlbVRhcCcsXG4gICAgJ29uQWRkVG9GYXZvcml0ZXMnLFxuICAgICdvblNoYXJlVGltZWxpbmUnLFxuICAgICdvblNoYXJlQXBwTWVzc2FnZScsXG4gICAgJ29uUmVzaXplJyxcbiAgICAnb25QYWdlU2Nyb2xsJyxcbiAgICAnb25OYXZpZ2F0aW9uQmFyQnV0dG9uVGFwJyxcbiAgICAnb25CYWNrUHJlc3MnLFxuICAgICdvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENoYW5nZWQnLFxuICAgICdvbk5hdmlnYXRpb25CYXJTZWFyY2hJbnB1dENvbmZpcm1lZCcsXG4gICAgJ29uTmF2aWdhdGlvbkJhclNlYXJjaElucHV0Q2xpY2tlZCcsXG4gICAgLy9Db21wb25lbnRcbiAgICAvLyAnb25SZWFkeScsIC8vIOWFvOWuueaXp+eJiOacrO+8jOW6lOivpeenu+mZpOivpeS6i+S7tlxuICAgICdvblBhZ2VTaG93JyxcbiAgICAnb25QYWdlSGlkZScsXG4gICAgJ29uUGFnZVJlc2l6ZSdcbl07XG5mdW5jdGlvbiBsaWZlY3ljbGVNaXhpbiQxKFZ1ZSkge1xuXG4gICAgLy9maXhlZCB2dWUtY2xhc3MtY29tcG9uZW50XG4gICAgdmFyIG9sZEV4dGVuZCA9IFZ1ZS5leHRlbmQ7XG4gICAgVnVlLmV4dGVuZCA9IGZ1bmN0aW9uKGV4dGVuZE9wdGlvbnMpIHtcbiAgICAgICAgZXh0ZW5kT3B0aW9ucyA9IGV4dGVuZE9wdGlvbnMgfHwge307XG5cbiAgICAgICAgdmFyIG1ldGhvZHMgPSBleHRlbmRPcHRpb25zLm1ldGhvZHM7XG4gICAgICAgIGlmIChtZXRob2RzKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhtZXRob2RzKS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XG4gICAgICAgICAgICAgICAgaWYgKExJRkVDWUNMRV9IT09LUyQxLmluZGV4T2YobWV0aG9kTmFtZSkhPT0tMSkge1xuICAgICAgICAgICAgICAgICAgICBleHRlbmRPcHRpb25zW21ldGhvZE5hbWVdID0gbWV0aG9kc1ttZXRob2ROYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1ldGhvZHNbbWV0aG9kTmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2xkRXh0ZW5kLmNhbGwodGhpcywgZXh0ZW5kT3B0aW9ucylcbiAgICB9O1xuXG4gICAgdmFyIHN0cmF0ZWdpZXMgPSBWdWUuY29uZmlnLm9wdGlvbk1lcmdlU3RyYXRlZ2llcztcbiAgICB2YXIgbWVyZ2VIb29rID0gc3RyYXRlZ2llcy5jcmVhdGVkO1xuICAgIExJRkVDWUNMRV9IT09LUyQxLmZvckVhY2goZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgc3RyYXRlZ2llc1tob29rXSA9IG1lcmdlSG9vaztcbiAgICB9KTtcblxuICAgIFZ1ZS5wcm90b3R5cGUuX19saWZlY3ljbGVfaG9va3NfXyA9IExJRkVDWUNMRV9IT09LUyQxO1xufVxuXG4vKiAgKi9cblxuLy8gaW5zdGFsbCBwbGF0Zm9ybSBwYXRjaCBmdW5jdGlvblxuVnVlLnByb3RvdHlwZS5fX3BhdGNoX18gPSBwYXRjaDtcblxuLy8gcHVibGljIG1vdW50IG1ldGhvZFxuVnVlLnByb3RvdHlwZS4kbW91bnQgPSBmdW5jdGlvbihcbiAgICBlbCAsXG4gICAgaHlkcmF0aW5nIFxuKSB7XG4gICAgcmV0dXJuIG1vdW50Q29tcG9uZW50JDEodGhpcywgZWwsIGh5ZHJhdGluZylcbn07XG5cbmxpZmVjeWNsZU1peGluJDEoVnVlKTtcbmludGVybmFsTWl4aW4oVnVlKTtcblxuLyogICovXG5cbmV4cG9ydCBkZWZhdWx0IFZ1ZTtcbiIsImltcG9ydCByZXF1ZXN0IGZyb20gJ0AvdXRpbHMvcmVxdWVzdCdcclxuaW1wb3J0IHt1cEZpbHNlfSBmcm9tICdAL3V0aWxzL3JlcXVlc3QnXHJcblxyXG4vLyDojrflj5bova7mkq3lm75cclxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRJbmRleHMoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvaW5kZXgnLFxyXG5cdFx0bWV0aG9kOiAnZ2V0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG4vLyDojrflj5bnp5Hmma7mlofnq6DliJfooahcclxuZXhwb3J0IGZ1bmN0aW9uIGJhbm5lcmxpc3QoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvYXJ0aWNsZS9saXN0LzEnLFxyXG5cdFx0bWV0aG9kOiAnZ2V0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG4vLyDojrflj5bljZrniLHpobnnm67mlofnq6DliJfooahcclxuZXhwb3J0IGZ1bmN0aW9uIGl0ZW1MaXN0KGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2FydGljbGUvbGlzdC80JyxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuLy/kuIrkvKDlm77niYdcclxuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZChkYXRhKSB7XHJcblx0cmV0dXJuIHVwRmlsc2Uoe1xyXG5cdFx0dXJsOiAnL2FwaS91cGxvYWQvaW1hZ2UnLFxyXG5cdFx0bWV0aG9kOiAncG9zdCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuLy8g5L+D6ZSA5ZWG5ZOBXHJcbmV4cG9ydCBmdW5jdGlvbiBncm9vbTQoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvZ3Jvb20vbGlzdC80JyxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuLy8g57K+5ZOB5o6o6I2QXHJcbmV4cG9ydCBmdW5jdGlvbiBncm9vbTEoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvZ3Jvb20vbGlzdC8xJyxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuLy8g5paw5ZOB6aaW5Y+RXHJcbmV4cG9ydCBmdW5jdGlvbiBncm9vbTMoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvZ3Jvb20vbGlzdC8zJyxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcblxyXG4vLyDojrflj5bmiJHliJvlu7rnmoTlnIjlrZBcclxuZXhwb3J0IGZ1bmN0aW9uIG15Q3JlYXRlQ2lyY2xlKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2NpcmNsZS9teWNyZWF0ZScsXHJcblx0XHRtZXRob2Q6ICdwb3N0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG5cclxuLy8g6YCg6KGA5bmy57uG6IOe5o2Q54yuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0KGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL3NpZ25fY2VsbCcsXHJcblx0XHRtZXRob2Q6ICdwb3N0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG5cclxuLy8g5pWR5oqk6ICF6aG16Z2i6I635Y+W5Y+C5LiO5Lq65pWwICBcclxuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWJlcihkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9nZXRfcmVzY3VlcicsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG4vLyDlv5fmhL/ogIXmiqXlkI1cclxuZXhwb3J0IGZ1bmN0aW9uIGFkZF92b2x1bnRlZXJzKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2FkZF9yZWdpc3RyYXRpb24nLFxyXG5cdFx0bWV0aG9kOiAncG9zdCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIGpvaW5TZWNcclxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5TZWMoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvYWRkX3ZvbHVudGVlcnMnLFxyXG5cdFx0bWV0aG9kOiAncG9zdCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuLy8gam9pblNlY2Mg5Zmo5a6Y5o2Q6LWgXHJcbmV4cG9ydCBmdW5jdGlvbiBqb2luU2VjYyhkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9hZGRfZG9uYXRpb24nLFxyXG5cdFx0bWV0aG9kOiAncG9zdCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIOiOt+WPluWumuS9jVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0ZGlzIChkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9nZXRkaXMnLFxyXG5cdFx0bWV0aG9kOiAnZ2V0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG4vLyDnq4vljbPmlZHmj7RcclxuZXhwb3J0IGZ1bmN0aW9uIHRvY2FsbCAoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvZG9fZ2V0ZGlzJyxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIOaVkeaKpOWfueiureaKpeWQjSBcclxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluaW5nKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL3RyYWluaW5nJyxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIOaxguWKqeiusOW9lSBnZXRzZWVcclxuZXhwb3J0IGZ1bmN0aW9uIGdldHNlZWsoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvc2VlaycsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG4vLyBnZXRjb21BZGRyZXNzIOiOt+WPluW4uOeUqOWcsOWdgFxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Y29tQWRkcmVzcyhkYXRhKSB7XHJcbiByZXR1cm4gcmVxdWVzdCh7XHJcbiAgdXJsOiAnL2FwaS9nZXRfY29tbW9ubHknLFxyXG4gIG1ldGhvZDogJ2dldCcsXHJcbiAgZGF0YVxyXG4gfSk7XHJcbn1cclxuXHJcbi8vIOaVkeaPtOiusOW9lSByZXNjdWVcclxuZXhwb3J0IGZ1bmN0aW9uIGdldHJlc2N1ZShkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9yZXNjdWVlZScsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2hhbmdlX3Jlc2N1ZShkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9jaGFuZ2VfcmVzY3VlJyxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIOiOt+WPlkFERee7j+e6rOW6piBnZXRMaXN0QUVEIGdldERpc3RhbmNlXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0QUVEKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2dldEFlZCcsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcbi8v6I635Y+W5py65p6EXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0TWVjaGFuaXNtKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL21lY2hhbmlzbScsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlzdGFuY2UoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvYWVkZGlzcycsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG4vLyBkZWxldGVMaXN0IOWIoOmZpOaVkeaPtOWcsOWdgFxyXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlTGlzdChkYXRhKSB7XHJcbiByZXR1cm4gcmVxdWVzdCh7XHJcbiAgdXJsOiAnL2FwaS9kZWxfcmVzYycsXHJcbiAgbWV0aG9kOiAnZ2V0JyxcclxuICBkYXRhXHJcbiB9KTtcclxufVxyXG5cclxuXHJcbiIsImltcG9ydCBzZXJ2aWNlIGZyb20gJy4vbmV3UmVxdWVzdC5qcydcclxuaW1wb3J0IHN0b3JlIGZyb20gJy4uL3N0b3JlJztcclxuaW1wb3J0IHtcclxuXHRzYXZlVXJsLFxyXG5cdGludGVyY2VwdG9yXHJcbn0gZnJvbSAnQC91dGlscy9sb2dpblV0aWxzLmpzJztcclxuLy8g6K+35rGC5a6M5oiQ5ZCO5oum5oiqXHJcbnNlcnZpY2UuaW50ZXJjZXB0b3JzLnJlc3BvbnNlKFxyXG5cdHJlc3BvbnNlID0+IHtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGxldCByZXMgPSByZXNwb25zZS5kYXRhO1xyXG5cdFx0XHQvLyDop6PmnpDlrZfnrKbkuLLkuLrmlbDlrZdcclxuXHRcdFx0aWYgKHJlcy5zdGF0dXMgIT09IDIwMCkge1xyXG5cdFx0XHRcdGlmIChyZXMuc3RhdHVzID09IDQxMDAwMCkge1xyXG5cdFx0XHRcdFx0Ly8g5a2Y5YKo5b2T5YmN5Zyw5Z2AXHJcblx0XHRcdFx0XHRzYXZlVXJsKClcclxuXHRcdFx0XHRcdC8vIOiwg+eUqOmAgOWHuueZu+W9leaWueazlea4heepuueUqOaIt+S/oeaBr1xyXG5cdFx0XHRcdFx0c3RvcmUuY29tbWl0KCd1c2VyL2xvZ291dCcpO1xyXG5cdFx0XHRcdFx0Ly8g5Yik5pat5piv5ZCm5byA5ZCv5by65Yi255m75b2VXHJcblx0XHRcdFx0XHQvLyDot7PovazpobXpnaJcclxuXHRcdFx0XHRcdGludGVyY2VwdG9yKClcclxuXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG5cdFx0XHRcdFx0XHR0aXRsZTogXCLmgqjmnKrnmbvlvZXvvIHmmK/lkKbpqazkuIrnmbvlvZXvvJ9cIixcclxuXHRcdFx0XHRcdFx0c3VjY2VzczogKGUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRpZiAoZS5jb25maXJtKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyDkv53lrZjlvZPliY3pobXpnaLlnLDlnYBcclxuXHRcdFx0XHRcdFx0XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRpZihyZXMubXNnIT0n57O757uf5Ye6546w5byC5bi4Jyl7XHJcblx0XHRcdFx0XHRcdHVuaS5zaG93VG9hc3Qoe1xyXG5cdFx0XHRcdFx0XHRcdHRpdGxlOiByZXMubXNnLFxyXG5cdFx0XHRcdFx0XHRcdGR1cmF0aW9uOiAxNTAwLFxyXG5cdFx0XHRcdFx0XHRcdG1hc2s6IGZhbHNlLFxyXG5cdFx0XHRcdFx0XHRcdGljb246ICdub25lJyxcclxuXHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc29sZS5sb2cocmVzKTtcclxuXHRcdFx0XHQvL3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IocmVzLm1zZyB8fCAnRXJyb3InKSlcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXR1cm4gcmVzXHJcblx0XHRcdH1cclxuXHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0Y29uc29sZS5sb2coZSk7XHJcblx0XHR9XHJcblx0fSxcclxuXHRlcnJvciA9PiB7XHJcblx0XHR1bmkuc2hvd1RvYXN0KHtcclxuXHRcdFx0dGl0bGU6IFwi5Yqg6L296ZSZ6K+v6K+36YeN6K+VXCIsXHJcblx0XHRcdGR1cmF0aW9uOiAxNTAwLFxyXG5cdFx0XHRtYXNrOiBmYWxzZSxcclxuXHRcdFx0aWNvbjogJ25vbmUnLFxyXG5cdFx0fSlcclxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcclxuXHR9XHJcbilcclxuXHJcbi8vIOivt+axguWJjeaLpuaIquWZqFxyXG5zZXJ2aWNlLmludGVyY2VwdG9ycy5yZXF1ZXN0KFxyXG5cdGNvbmZpZyA9PiB7XHJcblx0XHQvLyBjb25maWcuZGF0YS50b2tlbiA9IGdldFRva2VuKCk7XHJcblx0XHQvLyBjb25zb2xlLmxvZyhjb25maWcpO1xyXG5cdFx0bGV0IHRva2VuID0gdW5pLmdldFN0b3JhZ2VTeW5jKCd0b2tlbicpO1xyXG5cdFx0Ly8gY29uc29sZS5sb2codG9rZW4pO1xyXG5cdFx0aWYgKCFjb25maWcuaGVhZGVyKSB7XHJcblx0XHRcdGNvbmZpZy5oZWFkZXIgPSB7XHJcblx0XHRcdFx0XCJBdXRob3JpLXphdGlvblwiOiAnQmVhcmVyICcgKyB0b2tlbixcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8g5re75Yqga2V56K+35rGC5aS0XHJcblx0XHRcdGNvbmZpZy5oZWFkZXJbXCJBdXRob3JpLXphdGlvblwiXSA9ICdCZWFyZXIgJyArIHRva2VuO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNvbmZpZ1xyXG5cdH0sXHJcblx0ZXJyb3IgPT4ge1xyXG5cdFx0Ly8g6ZSZ6K+v5aSE55CGXHJcblx0XHRjb25zb2xlLmxvZyhlcnJvcilcclxuXHRcdHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcilcclxuXHR9XHJcbilcclxubGV0IHVwRmlsc2UgPSBzZXJ2aWNlLnVwRmlsc2U7XHJcbmV4cG9ydCB7XHJcblx0dXBGaWxzZVxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCBzZXJ2aWNlLm9wZW47XHJcbiIsImltcG9ydCBzdG9yZSBmcm9tICcuLi9zdG9yZSdcclxubGV0IHNlcnZpY2UgPSB7XHJcblx0Ly8gYmFzZVVSTDogc3RvcmUuc3RhdGUuYmFzZVVSTCwgLy8g6K+35rGC5aS0XHJcblx0YmFzZVVSTDogJycsIC8vIOivt+axguWktFxyXG5cdGhlYWRlcjoge1xyXG5cdFx0J0NvbnRlbnQtVHlwZSc6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCJcclxuXHR9LFxyXG5cdC8vIOivt+axguaLpuaIquWZqFxyXG5cdGludGVyY2VwdG9yczoge1xyXG5cdFx0Ly8g5a6J6KOF6K+35rGC5YmN5oum5oiqXHJcblx0XHRyZXF1ZXN0OiBmdW5jdGlvbihzdWNjZXNzLCBpc2Vycm9yKSB7XHJcblx0XHRcdHNlcnZpY2UucmVxdWVzdC5zdWNjZXNzID0gc3VjY2VzcztcclxuXHRcdFx0c2VydmljZS5yZXF1ZXN0LmVycm9yID0gaXNlcnJvcjtcclxuXHRcdH0sXHJcblx0XHQvLyDlronoo4Xor7fmsYLlrozmiJDlkI7mi6bmiKpcclxuXHRcdHJlc3BvbnNlOiBmdW5jdGlvbihzdWNjZXNzLCBpc2Vycm9yKSB7XHJcblx0XHRcdHNlcnZpY2UucmVzcG9uc2Uuc3VjY2VzcyA9IHN1Y2Nlc3M7XHJcblx0XHRcdHNlcnZpY2UucmVzcG9uc2UuZXJyb3IgPSBpc2Vycm9yO1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0Ly8g6K+35rGC5YmN5oum5oiqXHJcblx0cmVxdWVzdDoge1xyXG5cdFx0Ly8g5Zue6LCD5oiQ5Yqf5omn6KGM5pa55rOVXHJcblx0XHRzdWNjZXNzOiBmdW5jdGlvbihlKSB7XHJcblx0XHRcdHJldHVybiBlXHJcblx0XHR9LFxyXG5cdFx0Ly8g5Zue6LCD5aSx6LSlXHJcblx0XHRlcnJvcjogZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRyZXR1cm4gZVxyXG5cdFx0fVxyXG5cdH0sXHJcblx0Ly8g6K+35rGC5a6M5oiQ5ZCO5oum5oiqXHJcblx0cmVzcG9uc2U6IHtcclxuXHRcdC8vIOWbnuiwg+aIkOWKn+aJp+ihjOaWueazlVxyXG5cdFx0c3VjY2VzczogZnVuY3Rpb24oZSkge1xyXG5cdFx0XHRyZXR1cm4gZVxyXG5cdFx0fSxcclxuXHRcdC8vIOWbnuiwg+Wksei0pVxyXG5cdFx0ZXJyb3I6IGZ1bmN0aW9uKGUpIHtcclxuXHRcdFx0cmV0dXJuIGVcclxuXHRcdH1cclxuXHR9LFxyXG5cdC8vIOW8gOWni+ivt+axglxyXG5cdG9wZW46IGFzeW5jIGZ1bmN0aW9uKGRhdGEpIHtcclxuXHRcdHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuXHRcdFx0bGV0IHJlcXVlc3REYXRhID0gJyc7IC8v5L+d5a2Y5aSE55CG5a6M5oiQ5ZCO6K+35rGC5pWw5o2uXHJcblx0XHRcdC8vY29uc29sZS5sb2coZGF0YSk7XHJcblx0XHRcdC8vIOivt+axguWJjeaVsOaNruWkhOeQhlxyXG5cdFx0XHRyZXF1ZXN0RGF0YSA9IHNlcnZpY2UucmVxdWVzdC5zdWNjZXNzKGRhdGEpO1xyXG5cdFx0XHQvLyDkv53lrZjor7fmsYLlnLDlnYDvvJtcclxuXHRcdFx0bGV0IHVybDtcclxuXHRcdFx0aWYgKHJlcXVlc3REYXRhLnVybC5pbmRleE9mKCdodHRwJykgPiAtMSkge1xyXG5cdFx0XHRcdHVybCA9IHJlcXVlc3REYXRhLnVybFxyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHVybCA9IHNlcnZpY2UuYmFzZVVSTCArIHJlcXVlc3REYXRhLnVybFxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIOaVsOaNruWkjeWItueUqOS6juivt+axglxyXG5cdFx0XHR1bmkucmVxdWVzdCh7XHJcblx0XHRcdFx0dXJsOiB1cmwsXHJcblx0XHRcdFx0bWV0aG9kOiByZXF1ZXN0RGF0YS5tZXRob2QgfHwgJ0dFVCcsXHJcblx0XHRcdFx0ZGF0YTogcmVxdWVzdERhdGEuZGF0YSxcclxuXHRcdFx0XHRoZWFkZXI6IGRhdGEuaGVhZGVyIHx8IHNlcnZpY2UuaGVhZGVyLFxyXG5cdFx0XHRcdHN1Y2Nlc3M6IHJlcyA9PiB7XHJcblx0XHRcdFx0XHRpZiAocmVzLnN0YXR1c0NvZGUgPT0gMjAwKSB7XHJcblx0XHRcdFx0XHRcdHRyeSB7XHJcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShzZXJ2aWNlLnJlc3BvbnNlLnN1Y2Nlc3MocmVzKSk7XHJcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRcdFx0XHRzZXJ2aWNlLnJlc3BvbnNlLmVycm9yKGUpXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvLyDor7fmsYLlpLHotKXmlbDmja7lpITnkIZcclxuXHRcdFx0XHRmYWlsOiAoZXJyKSA9PiB7XHJcblx0XHRcdFx0XHRzZXJ2aWNlLnJlc3BvbnNlLmVycm9yKGVycilcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fSlcclxuXHR9LFxyXG5cdC8vIOS4iuS8oOaWh+S7tlxyXG5cdHVwRmlsc2U6IGFzeW5jIGZ1bmN0aW9uKGRhdGEpIHtcclxuXHRcdHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcclxuXHRcdFx0bGV0IHJlcXVlc3REYXRhID0gJyc7IC8v5L+d5a2Y5aSE55CG5a6M5oiQ5ZCO6K+35rGC5pWw5o2uXHJcblx0XHRcdHRyeSB7XHJcblx0XHRcdFx0Ly8g6K+35rGC5YmN5pWw5o2u5aSE55CGXHJcblx0XHRcdFx0cmVxdWVzdERhdGEgPSBzZXJ2aWNlLnJlcXVlc3Quc3VjY2VzcyhkYXRhKTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdC8vIOivt+axguaKpemUmeaLpuaIqlxyXG5cdFx0XHRcdHNlcnZpY2UucmVxdWVzdC5lcnJvcihlKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRsZXQgY29uZmlnID0ge1xyXG5cdFx0XHRcdC8vIOS4iuS8oOWbvueJh+eahEFQSVxyXG5cdFx0XHRcdHVwbG9hZF9pbWdfdXJsOiBzZXJ2aWNlLmJhc2VVUkwgKyByZXF1ZXN0RGF0YS51cmxcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bGV0IFVwbG9hZGVyID0ge1xyXG5cdFx0XHRcdC8vIOmAieaLqeWbvueJh1xyXG5cdFx0XHRcdGNob29zZShudW0pIHtcclxuXHRcdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0XHRcdHVuaS5jaG9vc2VJbWFnZSh7XHJcblx0XHRcdFx0XHRcdFx0Y291bnQ6IG51bSxcclxuXHRcdFx0XHRcdFx0XHRzb3VyY2VUeXBlOiBbJ2FsYnVtJ10sXHJcblx0XHRcdFx0XHRcdFx0c2l6ZVR5cGU6IFsnY29tcHJlc3NlZCddLFxyXG5cdFx0XHRcdFx0XHRcdHN1Y2Nlc3MocmVzKSB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBjb25zb2xlLmxvZyhyZXMpO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly8g57yT5a2Y5paH5Lu26Lev5b6EXHJcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKHJlcy50ZW1wRmlsZVBhdGhzKVxyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0ZmFpbChlcnIpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUubG9nKGVycilcclxuXHRcdFx0XHRcdFx0XHRcdHJlamVjdChlcnIpXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0fSlcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdC8vIOS4iuS8oOWbvueJh1xyXG5cdFx0XHRcdHVwbG9hZF9vbmUocGF0aCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHRcdFx0XHRcdFx0dW5pLnNob3dMb2FkaW5nKHtcclxuXHRcdFx0XHRcdFx0XHR0aXRsZTogJ+S4iuS8oOS4rSdcclxuXHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0dW5pLnVwbG9hZEZpbGUoe1xyXG5cdFx0XHRcdFx0XHRcdHVybDogY29uZmlnLnVwbG9hZF9pbWdfdXJsLCAvL+S7heS4uuekuuS+i++8jOmdnuecn+WunueahOaOpeWPo+WcsOWdgFxyXG5cdFx0XHRcdFx0XHRcdGZpbGVQYXRoOiBwYXRoLFxyXG5cdFx0XHRcdFx0XHRcdG5hbWU6ICdmaWxlJyxcclxuXHRcdFx0XHRcdFx0XHRoZWFkZXI6IHtcclxuXHRcdFx0XHRcdFx0XHRcdFwiQXV0aG9yaS16YXRpb25cIjogJ0JlYXJlciAnICsgdW5pLmdldFN0b3JhZ2VTeW5jKCd0b2tlbicpXHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRzdWNjZXNzOiAodXBsb2FkRmlsZVJlcykgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdFx0aWYgKFwic3RyaW5nXCIgPT09IHR5cGVvZiB1cGxvYWRGaWxlUmVzLmRhdGEpIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShKU09OLnBhcnNlKHVwbG9hZEZpbGVSZXMuZGF0YSkuZGF0YSlcclxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUodXBsb2FkRmlsZVJlcy5kYXRhLmRhdGEpXHJcblx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSgpIHtcclxuXHRcdFx0XHRcdFx0XHRcdHVuaS5oaWRlTG9hZGluZygpXHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvLyDkuIrkvKDlpJrkuKrlm77niYdcclxuXHRcdFx0XHR1cGxvYWQocGF0aF9hcnIpIHtcclxuXHRcdFx0XHRcdGxldCBudW0gPSBwYXRoX2Fyci5sZW5ndGg7XHJcblx0XHRcdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRsZXQgaW1nX3VybHMgPSBbXVxyXG5cdFx0XHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG51bTsgaSsrKSB7XHJcblx0XHRcdFx0XHRcdFx0bGV0IGltZ191cmwgPSBhd2FpdCB0aGlzLnVwbG9hZF9vbmUocGF0aF9hcnJbaV0pO1xyXG5cdFx0XHRcdFx0XHRcdGltZ191cmxzLnB1c2goaW1nX3VybClcclxuXHRcdFx0XHRcdFx0fTtcclxuXHRcdFx0XHRcdFx0cmVzb2x2ZShpbWdfdXJscylcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHQvLyDop6blj5HkuIrkvKDlm77niYfkuovku7ZcclxuXHRcdFx0XHRjaG9vc2VfYW5kX3VwbG9hZChudW0pIHtcclxuXHRcdFx0XHRcdHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcblx0XHRcdFx0XHRcdC8vIOmAieaLqeWbvueJh1xyXG5cdFx0XHRcdFx0XHRsZXQgcGF0aF9hcnIgPSBhd2FpdCB0aGlzLmNob29zZShudW0pO1xyXG5cdFx0XHRcdFx0XHQvLyDkuIrkvKDlm77niYdcclxuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy51cGxvYWQocGF0aF9hcnIpLnRoZW4oKGUpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKGUpO1xyXG5cdFx0XHRcdFx0XHR9KS5jYXRjaCgoZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHJlamVjdChlKVxyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9O1xyXG5cdFx0XHRVcGxvYWRlci5jaG9vc2VfYW5kX3VwbG9hZCgxKS50aGVuKChlKSA9PiB7XHJcblx0XHRcdFx0cmVzb2x2ZShlKTtcclxuXHRcdFx0fSkuY2F0Y2goKGUpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhlKTtcclxuXHRcdFx0fSlcclxuXHRcdH0pXHJcblx0fSxcclxufTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBzZXJ2aWNlXHJcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWVcIik7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbi8vIFRoaXMgbWV0aG9kIG9mIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsIG9iamVjdCBuZWVkcyB0byBiZVxuLy8ga2VwdCBpZGVudGljYWwgdG8gdGhlIHdheSBpdCBpcyBvYnRhaW5lZCBpbiBydW50aW1lLmpzXG52YXIgZyA9IChmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMgfHwgKHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiICYmIHNlbGYpO1xufSkoKSB8fCBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG5cbi8vIFVzZSBgZ2V0T3duUHJvcGVydHlOYW1lc2AgYmVjYXVzZSBub3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgY2FsbGluZ1xuLy8gYGhhc093blByb3BlcnR5YCBvbiB0aGUgZ2xvYmFsIGBzZWxmYCBvYmplY3QgaW4gYSB3b3JrZXIuIFNlZSAjMTgzLlxudmFyIGhhZFJ1bnRpbWUgPSBnLnJlZ2VuZXJhdG9yUnVudGltZSAmJlxuICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhnKS5pbmRleE9mKFwicmVnZW5lcmF0b3JSdW50aW1lXCIpID49IDA7XG5cbi8vIFNhdmUgdGhlIG9sZCByZWdlbmVyYXRvclJ1bnRpbWUgaW4gY2FzZSBpdCBuZWVkcyB0byBiZSByZXN0b3JlZCBsYXRlci5cbnZhciBvbGRSdW50aW1lID0gaGFkUnVudGltZSAmJiBnLnJlZ2VuZXJhdG9yUnVudGltZTtcblxuLy8gRm9yY2UgcmVldmFsdXRhdGlvbiBvZiBydW50aW1lLmpzLlxuZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSB1bmRlZmluZWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vcnVudGltZVwiKTtcblxuaWYgKGhhZFJ1bnRpbWUpIHtcbiAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcnVudGltZS5cbiAgZy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBvbGRSdW50aW1lO1xufSBlbHNlIHtcbiAgLy8gUmVtb3ZlIHRoZSBnbG9iYWwgcHJvcGVydHkgYWRkZWQgYnkgcnVudGltZS5qcy5cbiAgdHJ5IHtcbiAgICBkZWxldGUgZy5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIH0gY2F0Y2goZSkge1xuICAgIGcucmVnZW5lcmF0b3JSdW50aW1lID0gdW5kZWZpbmVkO1xuICB9XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNC1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbiEoZnVuY3Rpb24oZ2xvYmFsKSB7XG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIHZhciBPcCA9IE9iamVjdC5wcm90b3R5cGU7XG4gIHZhciBoYXNPd24gPSBPcC5oYXNPd25Qcm9wZXJ0eTtcbiAgdmFyIHVuZGVmaW5lZDsgLy8gTW9yZSBjb21wcmVzc2libGUgdGhhbiB2b2lkIDAuXG4gIHZhciAkU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiID8gU3ltYm9sIDoge307XG4gIHZhciBpdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCI7XG4gIHZhciBhc3luY0l0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5hc3luY0l0ZXJhdG9yIHx8IFwiQEBhc3luY0l0ZXJhdG9yXCI7XG4gIHZhciB0b1N0cmluZ1RhZ1N5bWJvbCA9ICRTeW1ib2wudG9TdHJpbmdUYWcgfHwgXCJAQHRvU3RyaW5nVGFnXCI7XG5cbiAgdmFyIGluTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIjtcbiAgdmFyIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lO1xuICBpZiAocnVudGltZSkge1xuICAgIGlmIChpbk1vZHVsZSkge1xuICAgICAgLy8gSWYgcmVnZW5lcmF0b3JSdW50aW1lIGlzIGRlZmluZWQgZ2xvYmFsbHkgYW5kIHdlJ3JlIGluIGEgbW9kdWxlLFxuICAgICAgLy8gbWFrZSB0aGUgZXhwb3J0cyBvYmplY3QgaWRlbnRpY2FsIHRvIHJlZ2VuZXJhdG9yUnVudGltZS5cbiAgICAgIG1vZHVsZS5leHBvcnRzID0gcnVudGltZTtcbiAgICB9XG4gICAgLy8gRG9uJ3QgYm90aGVyIGV2YWx1YXRpbmcgdGhlIHJlc3Qgb2YgdGhpcyBmaWxlIGlmIHRoZSBydW50aW1lIHdhc1xuICAgIC8vIGFscmVhZHkgZGVmaW5lZCBnbG9iYWxseS5cbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBEZWZpbmUgdGhlIHJ1bnRpbWUgZ2xvYmFsbHkgKGFzIGV4cGVjdGVkIGJ5IGdlbmVyYXRlZCBjb2RlKSBhcyBlaXRoZXJcbiAgLy8gbW9kdWxlLmV4cG9ydHMgKGlmIHdlJ3JlIGluIGEgbW9kdWxlKSBvciBhIG5ldywgZW1wdHkgb2JqZWN0LlxuICBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZSA9IGluTW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgOiB7fTtcblxuICBmdW5jdGlvbiB3cmFwKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgLy8gSWYgb3V0ZXJGbiBwcm92aWRlZCBhbmQgb3V0ZXJGbi5wcm90b3R5cGUgaXMgYSBHZW5lcmF0b3IsIHRoZW4gb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IuXG4gICAgdmFyIHByb3RvR2VuZXJhdG9yID0gb3V0ZXJGbiAmJiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvciA/IG91dGVyRm4gOiBHZW5lcmF0b3I7XG4gICAgdmFyIGdlbmVyYXRvciA9IE9iamVjdC5jcmVhdGUocHJvdG9HZW5lcmF0b3IucHJvdG90eXBlKTtcbiAgICB2YXIgY29udGV4dCA9IG5ldyBDb250ZXh0KHRyeUxvY3NMaXN0IHx8IFtdKTtcblxuICAgIC8vIFRoZSAuX2ludm9rZSBtZXRob2QgdW5pZmllcyB0aGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSAubmV4dCxcbiAgICAvLyAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMuXG4gICAgZ2VuZXJhdG9yLl9pbnZva2UgPSBtYWtlSW52b2tlTWV0aG9kKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGdlbmVyYXRvcjtcbiAgfVxuICBydW50aW1lLndyYXAgPSB3cmFwO1xuXG4gIC8vIFRyeS9jYXRjaCBoZWxwZXIgdG8gbWluaW1pemUgZGVvcHRpbWl6YXRpb25zLiBSZXR1cm5zIGEgY29tcGxldGlvblxuICAvLyByZWNvcmQgbGlrZSBjb250ZXh0LnRyeUVudHJpZXNbaV0uY29tcGxldGlvbi4gVGhpcyBpbnRlcmZhY2UgY291bGRcbiAgLy8gaGF2ZSBiZWVuIChhbmQgd2FzIHByZXZpb3VzbHkpIGRlc2lnbmVkIHRvIHRha2UgYSBjbG9zdXJlIHRvIGJlXG4gIC8vIGludm9rZWQgd2l0aG91dCBhcmd1bWVudHMsIGJ1dCBpbiBhbGwgdGhlIGNhc2VzIHdlIGNhcmUgYWJvdXQgd2VcbiAgLy8gYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG1ldGhvZCB3ZSB3YW50IHRvIGNhbGwsIHNvIHRoZXJlJ3Mgbm8gbmVlZFxuICAvLyB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LiBXZSBjYW4gZXZlbiBnZXQgYXdheSB3aXRoIGFzc3VtaW5nXG4gIC8vIHRoZSBtZXRob2QgdGFrZXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIHNpbmNlIHRoYXQgaGFwcGVucyB0byBiZSB0cnVlXG4gIC8vIGluIGV2ZXJ5IGNhc2UsIHNvIHdlIGRvbid0IGhhdmUgdG8gdG91Y2ggdGhlIGFyZ3VtZW50cyBvYmplY3QuIFRoZVxuICAvLyBvbmx5IGFkZGl0aW9uYWwgYWxsb2NhdGlvbiByZXF1aXJlZCBpcyB0aGUgY29tcGxldGlvbiByZWNvcmQsIHdoaWNoXG4gIC8vIGhhcyBhIHN0YWJsZSBzaGFwZSBhbmQgc28gaG9wZWZ1bGx5IHNob3VsZCBiZSBjaGVhcCB0byBhbGxvY2F0ZS5cbiAgZnVuY3Rpb24gdHJ5Q2F0Y2goZm4sIG9iaiwgYXJnKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwibm9ybWFsXCIsIGFyZzogZm4uY2FsbChvYmosIGFyZykgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwidGhyb3dcIiwgYXJnOiBlcnIgfTtcbiAgICB9XG4gIH1cblxuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRTdGFydCA9IFwic3VzcGVuZGVkU3RhcnRcIjtcbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkWWllbGQgPSBcInN1c3BlbmRlZFlpZWxkXCI7XG4gIHZhciBHZW5TdGF0ZUV4ZWN1dGluZyA9IFwiZXhlY3V0aW5nXCI7XG4gIHZhciBHZW5TdGF0ZUNvbXBsZXRlZCA9IFwiY29tcGxldGVkXCI7XG5cbiAgLy8gUmV0dXJuaW5nIHRoaXMgb2JqZWN0IGZyb20gdGhlIGlubmVyRm4gaGFzIHRoZSBzYW1lIGVmZmVjdCBhc1xuICAvLyBicmVha2luZyBvdXQgb2YgdGhlIGRpc3BhdGNoIHN3aXRjaCBzdGF0ZW1lbnQuXG4gIHZhciBDb250aW51ZVNlbnRpbmVsID0ge307XG5cbiAgLy8gRHVtbXkgY29uc3RydWN0b3IgZnVuY3Rpb25zIHRoYXQgd2UgdXNlIGFzIHRoZSAuY29uc3RydWN0b3IgYW5kXG4gIC8vIC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgcHJvcGVydGllcyBmb3IgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIEdlbmVyYXRvclxuICAvLyBvYmplY3RzLiBGb3IgZnVsbCBzcGVjIGNvbXBsaWFuY2UsIHlvdSBtYXkgd2lzaCB0byBjb25maWd1cmUgeW91clxuICAvLyBtaW5pZmllciBub3QgdG8gbWFuZ2xlIHRoZSBuYW1lcyBvZiB0aGVzZSB0d28gZnVuY3Rpb25zLlxuICBmdW5jdGlvbiBHZW5lcmF0b3IoKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvbigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKCkge31cblxuICAvLyBUaGlzIGlzIGEgcG9seWZpbGwgZm9yICVJdGVyYXRvclByb3RvdHlwZSUgZm9yIGVudmlyb25tZW50cyB0aGF0XG4gIC8vIGRvbid0IG5hdGl2ZWx5IHN1cHBvcnQgaXQuXG4gIHZhciBJdGVyYXRvclByb3RvdHlwZSA9IHt9O1xuICBJdGVyYXRvclByb3RvdHlwZVtpdGVyYXRvclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHcC5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdlbmVyYXRvckZ1bmN0aW9uO1xuICBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZVt0b1N0cmluZ1RhZ1N5bWJvbF0gPVxuICAgIEdlbmVyYXRvckZ1bmN0aW9uLmRpc3BsYXlOYW1lID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuXG4gIC8vIEhlbHBlciBmb3IgZGVmaW5pbmcgdGhlIC5uZXh0LCAudGhyb3csIGFuZCAucmV0dXJuIG1ldGhvZHMgb2YgdGhlXG4gIC8vIEl0ZXJhdG9yIGludGVyZmFjZSBpbiB0ZXJtcyBvZiBhIHNpbmdsZSAuX2ludm9rZSBtZXRob2QuXG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhwcm90b3R5cGUpIHtcbiAgICBbXCJuZXh0XCIsIFwidGhyb3dcIiwgXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihtZXRob2QpIHtcbiAgICAgIHByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZva2UobWV0aG9kLCBhcmcpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIHJ1bnRpbWUubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgaWYgKCEodG9TdHJpbmdUYWdTeW1ib2wgaW4gZ2VuRnVuKSkge1xuICAgICAgICBnZW5GdW5bdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JGdW5jdGlvblwiO1xuICAgICAgfVxuICAgIH1cbiAgICBnZW5GdW4ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShHcCk7XG4gICAgcmV0dXJuIGdlbkZ1bjtcbiAgfTtcblxuICAvLyBXaXRoaW4gdGhlIGJvZHkgb2YgYW55IGFzeW5jIGZ1bmN0aW9uLCBgYXdhaXQgeGAgaXMgdHJhbnNmb3JtZWQgdG9cbiAgLy8gYHlpZWxkIHJlZ2VuZXJhdG9yUnVudGltZS5hd3JhcCh4KWAsIHNvIHRoYXQgdGhlIHJ1bnRpbWUgY2FuIHRlc3RcbiAgLy8gYGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIilgIHRvIGRldGVybWluZSBpZiB0aGUgeWllbGRlZCB2YWx1ZSBpc1xuICAvLyBtZWFudCB0byBiZSBhd2FpdGVkLlxuICBydW50aW1lLmF3cmFwID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHsgX19hd2FpdDogYXJnIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcihnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUuX19hd2FpdCkudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICAgIGludm9rZShcInRocm93XCIsIGVyciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oZnVuY3Rpb24odW53cmFwcGVkKSB7XG4gICAgICAgICAgLy8gV2hlbiBhIHlpZWxkZWQgUHJvbWlzZSBpcyByZXNvbHZlZCwgaXRzIGZpbmFsIHZhbHVlIGJlY29tZXNcbiAgICAgICAgICAvLyB0aGUgLnZhbHVlIG9mIHRoZSBQcm9taXNlPHt2YWx1ZSxkb25lfT4gcmVzdWx0IGZvciB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IGl0ZXJhdGlvbi5cbiAgICAgICAgICByZXN1bHQudmFsdWUgPSB1bndyYXBwZWQ7XG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIC8vIElmIGEgcmVqZWN0ZWQgUHJvbWlzZSB3YXMgeWllbGRlZCwgdGhyb3cgdGhlIHJlamVjdGlvbiBiYWNrXG4gICAgICAgICAgLy8gaW50byB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIHNvIGl0IGNhbiBiZSBoYW5kbGVkIHRoZXJlLlxuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCBlcnJvciwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBJbiBzbG9wcHkgbW9kZSwgdW5ib3VuZCBgdGhpc2AgcmVmZXJzIHRvIHRoZSBnbG9iYWwgb2JqZWN0LCBmYWxsYmFjayB0b1xuICAvLyBGdW5jdGlvbiBjb25zdHJ1Y3RvciBpZiB3ZSdyZSBpbiBnbG9iYWwgc3RyaWN0IG1vZGUuIFRoYXQgaXMgc2FkbHkgYSBmb3JtXG4gIC8vIG9mIGluZGlyZWN0IGV2YWwgd2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kuXG4gIChmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcyB8fCAodHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgJiYgc2VsZik7XG4gIH0pKCkgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpXG4pO1xuIiwiLy8g6I635Y+W5b2T5YmN6aG16Z2iXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25QYWdlKCkge1xyXG5cdGxldCBwYWdlcyA9IGdldEN1cnJlbnRQYWdlcygpO1xyXG5cdHJldHVybiBwYWdlc1twYWdlcy5sZW5ndGggLSAxXVxyXG59XHJcblxyXG5cclxuLy8g5aSE55CG5YiG5Lqr6ZO+5o6l5Zyw5Z2AXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlVXJsKGNvbmZpZykge1xyXG5cdGxldCBwYWdlID0gZ2V0QWN0aW9uUGFnZSgpO1xyXG5cdGxldCBwYXRoID0gJy8nICsgcGFnZS5yb3V0ZTtcclxuXHRsZXQgdXJsID0gJyc7XHJcblx0Ly8g6I635Y+W5a+56LGh5Y+v5p6a5Li+6ZSu5YC85YiX6KGoXHJcblx0bGV0IG9iaktleXM9IE9iamVjdC5rZXlzKHBhZ2Uub3B0aW9ucyk7XHJcblx0Ly8g5Yik5pat5pyJ5peg5Lyg5YC8XHJcblx0aWYob2JqS2V5cy5sZW5ndGg+MCl7XHJcblx0XHQvLyDlvqrnjq/otYvlgLzlr7nosaHmlbDmja5cclxuXHRcdGZvcihsZXQgYSBpbiBwYWdlLm9wdGlvbnMpIHtcclxuXHRcdFx0Ly8g5Yik5pat5pyJ5peg6YKA6K+35Lq6XHJcblx0XHRcdGlmKGEhPSdzcHJlYWQnKXtcclxuXHRcdFx0XHR1cmwgKz0gYStcIj1cIitwYWdlLm9wdGlvbnNbYV0rXCImXCJcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cGF0aCArPSAnPycgKyB1cmwuc3Vic3RyKDAsdXJsLmxlbmd0aC0xKTtcclxuXHR9XHJcblx0Ly8g6L+U5Zue5aSE55CG6YKA6K+35Lq65ZCO55qE6YKA6K+35Zyw5Z2AXHJcblx0cmV0dXJuIHBhdGhcclxufVxyXG5cclxuLy/nmbvlvZXmi6bmiKpcclxuZXhwb3J0IGZ1bmN0aW9uIGludGVyY2VwdG9yKCkge1xyXG5cdGxldCBwYWdlcyA9IGdldEFjdGlvblBhZ2UoKTtcclxuXHQvLyDojrflj5blvZPliY3pobXpnaJcclxuXHRsZXQgcGFnZVVybCA9ICcvJyArIHBhZ2VzLnJvdXRlO1xyXG5cdGxldCB1cmwgPSAnL3BhZ2VzL2xvZ2luL2xvZ2luJ1xyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHRpZiAocGFnZVVybCAhPSB1cmwpIHtcclxuXHRcdHVuaS5uYXZpZ2F0ZVRvKHtcclxuXHRcdFx0dXJsXHJcblx0XHR9KVxyXG5cdH1cclxufVxyXG5cclxuLy8g5L+d5a2Y6aG16Z2iXHJcbmV4cG9ydCBmdW5jdGlvbiBzYXZlVXJsKCkge1xyXG5cdC8vIOiOt+WPluW9k+WJjemhtemdolxyXG5cdGxldCBwYWdlID0gZ2V0QWN0aW9uUGFnZSgpO1xyXG5cdC8vIOiOt+WPlui3s+i9rOWJjei3r+eUseWcsOWdgFxyXG5cdGxldCBwYXRoID0gJy8nICsgcGFnZS5yb3V0ZTtcclxuXHRsZXQgdXJsID0gJyc7XHJcblx0Ly8g6I635Y+W5a+56LGh5Y+v5p6a5Li+6ZSu5YC85YiX6KGoXHJcblx0bGV0IG9iaktleXM9IE9iamVjdC5rZXlzKHBhZ2Uub3B0aW9ucyk7XHJcblx0Ly8g5Yik5pat5pyJ5peg5Lyg5YC8XHJcblx0aWYob2JqS2V5cy5sZW5ndGg+MCl7XHJcblx0XHQvLyDlvqrnjq/otYvlgLzlr7nosaHmlbDmja5cclxuXHRcdGZvcihsZXQgYSBpbiBwYWdlLm9wdGlvbnMpIHtcclxuXHRcdFx0dXJsICs9IGErXCI9XCIrcGFnZS5vcHRpb25zW2FdK1wiJlwiXHJcblx0XHR9XHJcblx0XHRwYXRoICs9ICc/JyArIHVybC5zdWJzdHIoMCx1cmwubGVuZ3RoLTEpO1xyXG5cdH1cclxuXHQvLyB1bmkuc2hvd01vZGFsKHtcclxuXHQvLyBcdHRpdGxlOiAn5Zyw5Z2AJyxcclxuXHQvLyBcdGNvbnRlbnQ6IHBhdGgsXHJcblx0Ly8gXHRmYWlsOiBmdW5jdGlvbiAocmVzKSB7XHJcblx0Ly8gXHRcdGNvbnNvbGUubG9nKHJlcy5lcnJNc2cpO1xyXG5cdC8vIFx0XHR1bmkuc2hvd01vZGFsKHtcclxuXHQvLyBcdFx0XHR0aXRsZTogJ2Vycm9yJyxcclxuXHQvLyBcdFx0XHRjb250ZW50OiByZXMuZXJyTXNnXHJcblx0Ly8gXHRcdH0pXHJcblx0Ly8gXHR9XHJcblx0Ly8gfSlcclxuXHR1bmkuc2V0U3RvcmFnZVN5bmMoJ3ByZXNlbnQnLCBwYXRoKTtcclxuXHQvLyAvLyDojrflj5blvZPliY3pobXpnaJcclxuXHQvLyBsZXQgcGFnZSA9IGdldEFjdGlvblBhZ2UoKTtcclxuXHQvLyAvLyDojrflj5bot7PovazliY3ot6/nlLHlnLDlnYBcclxuXHQvLyBsZXQgcGF0aCA9ICcvJyArIHBhZ2Uucm91dGU7XHJcblx0Ly8gbGV0IHVybCA9ICcnO1xyXG5cdC8vIC8vIOiOt+WPluWvueixoeWPr+aemuS4vumUruWAvOWIl+ihqFxyXG5cdC8vIGxldCBvYmpLZXlzID0gT2JqZWN0LmtleXMocGFnZS5vcHRpb25zKTtcclxuXHQvLyAvLyDliKTmlq3mnInml6DkvKDlgLxcclxuXHQvLyBpZiAob2JqS2V5cy5sZW5ndGggPiAwKSB7XHJcblx0Ly8gXHQvLyDlvqrnjq/otYvlgLzlr7nosaHmlbDmja5cclxuXHQvLyBcdGZvciAobGV0IGEgaW4gcGFnZS5vcHRpb25zKSB7XHJcblx0Ly8gXHRcdHVybCArPSBhICsgXCI9XCIgKyBwYWdlLm9wdGlvbnNbYV0gKyBcIiZcIlxyXG5cdC8vIFx0fVxyXG5cdC8vIFx0cGF0aCArPSAnPycgKyB1cmwuc3Vic3RyKDAsIHVybC5sZW5ndGggLSAxKTtcclxuXHQvLyB9XHJcblx0Ly8gY29uc29sZS5sb2cocGF0aCwxKVxyXG5cdC8vIHVuaS5zZXRTdG9yYWdlU3luYygncHJlc2VudCcsIHBhdGgpO1xyXG59XHJcbiIsImltcG9ydCByZXF1ZXN0IGZyb20gJ0AvdXRpbHMvcmVxdWVzdCdcclxuXHJcbi8vIOiuouWNlee7n+iuoeS/oeaBr1xyXG5leHBvcnQgZnVuY3Rpb24gb3JkZXJEYXRhKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL29yZGVyL2RhdGEnLFxyXG5cdFx0bWV0aG9kOiAnZ2V0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG5cclxuLy8g6I635Y+W55So5oi35L+h5oGvXHJcbmV4cG9ydCBmdW5jdGlvbiB1c2VyaW5mbyhkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS91c2VyaW5mbycsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG4vL+iOt+WPluWQjeeJh+S/oeaBr1xyXG5leHBvcnQgZnVuY3Rpb24gdXNlcmluZm9pZChkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9sZXZlbC9yZWNoYXJnZScsXHJcblx0XHRtZXRob2Q6ICdwb3N0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufSIsImltcG9ydCB7XHJcblx0d2VjaGF0Q29uZmlnLFxyXG5cdHNoYXJlXHJcbn0gZnJvbSAnQC9hcGkvd3gnO1xyXG5pbXBvcnQgc3RvcmUgZnJvbSAnLi4vc3RvcmUnO1xyXG4vLyDkv53lrZh3eOWvueixoVxyXG5sZXQgd2VpeGluT2JqID0gcmVxdWlyZSgnandlaXhpbi1tb2R1bGUnKTtcclxuLy8g5L+d5a2Y5YiG5Lqr5pWw5o2uXHJcbmxldCBzaGFyZURhdGEgPSAnJztcclxuLy8g5L+d5a2Y5rOo5YaM6L+U5ZueYXBwSWTmlbDmja5cclxubGV0IGFwcElkID0gJyc7XHJcblxyXG4vL+W+ruS/oeeZu+W9lVxyXG4vKipcclxuICogQHBhcmFtIHtzdHJpbmd9IOW9k+WJjemhtemdouWcsOWdgOS/oeaBr1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGxvZ2luV2lueGluKCkge1xyXG5cdGxldCBwYWdlcywgcGFnZSwgcGF0aDtcclxuXHR0cnkge1xyXG5cdFx0cGFnZXMgPSBnZXRDdXJyZW50UGFnZXMoKTtcclxuXHRcdC8vIOiOt+WPlui3s+i9rOWJjemhtemdolxyXG5cdFx0cGFnZSA9IHBhZ2VzW3BhZ2VzLmxlbmd0aCAtIDFdO1xyXG5cdFx0Ly8g6I635Y+W6Lez6L2s5YmN6Lev55Sx5Zyw5Z2AXHJcblx0XHRwYXRoID0gcGFnZS5yb3V0ZTtcclxuXHR9IGNhdGNoIChlKSB7XHJcblx0XHRjb25zb2xlLmxvZyhlKTtcclxuXHR9XHJcblx0Ly8g5Yik5pat5piv5ZCm5Zyo55m75b2V6aG1XHJcblx0aWYgKHBhdGggIT0gJ3BhZ2VzL3JlZGlyZWN0L3JlZGlyZWN0Jykge1xyXG5cdFx0c2V0VGltZW91dCgoZSkgPT4ge1xyXG5cdFx0XHR3ZWl4aW5PYmoucmVhZHkoKCkgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCd3ZWl4aW5PYmoucmVhZHknKTtcclxuXHRcdFx0XHQvLyDosIPnlKhcclxuXHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0Y29uc29sZS5sb2coc2hhcmVEYXRhKTtcclxuXHRcdFx0XHRcdGNvbnNvbGUubG9nKHBhdGgpO1xyXG5cdFx0XHRcdFx0d2VpeGluU3Eoc2hhcmVEYXRhLCBwYXRoKTtcclxuXHRcdFx0XHR9IGNhdGNoIChlKSB7XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhlKTtcclxuXHRcdFx0XHRcdC8vVE9ETyBoYW5kbGUgdGhlIGV4Y2VwdGlvblxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdHdlaXhpbk9iai5lcnJvcigoZSkgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGUpO1xyXG5cdFx0XHR9KVxyXG5cdFx0fSwgMTApXHJcblxyXG5cdH1cclxufTtcclxuLy8g5b6u5L+h5o6I5p2D55m75b2VXHJcbmZ1bmN0aW9uIHdlaXhpblNxKGRhdGEsIHBhdGgpIHtcclxuXHQvLyDlvq7kv6HmjojmnYPlkI7ot7PovazpobXpnaJcclxuXHR0cnkge1xyXG5cdFx0bGV0IHVsID0gZW5jb2RlVVJJQ29tcG9uZW50KHN0b3JlLnN0YXRlLmJhc2VVUkwgKyBzdG9yZS5zdGF0ZS51cmxGaWxlICsgJy8jL3BhZ2VzL3JlZGlyZWN0L3JlZGlyZWN0Jyk7XHJcblx0XHRjb25zb2xlLmxvZyh1bCwgXCJ1bFwiKVxyXG5cdFx0Ly8g5omT5byA5b6u5L+h5o6I5p2D6aG16Z2iXHJcblx0XHRcclxuXHRcdGxldCB1cmwgPVxyXG5cdFx0XHQnaHR0cHM6Ly9vcGVuLndlaXhpbi5xcS5jb20vY29ubmVjdC9vYXV0aDIvYXV0aG9yaXplP2FwcGlkPScgK1xyXG5cdFx0XHRhcHBJZCArXHJcblx0XHRcdCcmcmVkaXJlY3RfdXJpPScgK1xyXG5cdFx0XHR1bCArXHJcblx0XHRcdCcmcmVzcG9uc2VfdHlwZT1jb2RlJnNjb3BlPXNuc2FwaV91c2VyaW5mbyZzdGF0ZT0nICtcclxuXHRcdFx0bmV3IERhdGUoKS5nZXRUaW1lKCkgK1xyXG5cdFx0XHQnI3dlY2hhdF9yZWRpcmVjdCc7XHJcblx0XHRcdGNvbnNvbGUubG9nKHVybCwgXCJ1cmxcIilcclxuXHRcdHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdXJsO1xyXG5cdH0gY2F0Y2ggKGUpIHtcclxuXHRcdGNvbnNvbGUubG9nKGUpO1xyXG5cdH1cclxufTtcclxuXHJcbi8vIOW+ruS/oeazqOWGjFxyXG5leHBvcnQgZnVuY3Rpb24gd2VpeGluZGF0YShjb25maWcpIHtcclxuXHQvLyBjb25zb2xlLmxvZyhjb25maWcpO1xyXG5cdC8v5rOo5YaM5b6u5L+h5L+h5oGvXHJcblx0bGV0IHdlaXhpbk9iaiA9IHJlcXVpcmUoJ2p3ZWl4aW4tbW9kdWxlJyk7XHJcblx0Ly8g5L+d5a2Y5b6u5L+h5a+56LGh5Yiw5YWo5bGA5LuT5bqTXHJcblx0c3RvcmUuY29tbWl0KCdzZXRXZWlDaGF0T2JqJywgd2VpeGluT2JqKVxyXG5cdGNvbnNvbGUubG9nKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuXHRjb25zb2xlLmxvZygn5b2T5YmN5rOo5YaMdXJs5Zyw5Z2AJyx3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcblx0d2VjaGF0Q29uZmlnKHtcclxuXHRcdFx0Ly8gdXJsOiAncGFnZXMvYXBwbGljL2xvY2F0aW9uJyxcdFx0XHRcclxuXHRcdFx0dXJsOiBzdG9yZS5zdGF0ZS5iYXNlVVJMKyBzdG9yZS5zdGF0ZS51cmxGaWxlKycvJyxcclxuXHRcdH0pXHJcblx0XHQudGhlbigoe1xyXG5cdFx0XHRkYXRhXHJcblx0XHR9KSA9PiB7XHJcblx0XHRcdC8vIHVuaS5zaG93TW9kYWwoeyBcclxuXHRcdFx0Ly8gXHQvLyB1cmw6ICdodHRwOi8veXlyZWQuaWd4eXMuY29tL2luZGV4LycsXHJcblx0XHRcdC8vIFx0dGl0bGU6J+WcsOWdgCcsXHJcblx0XHRcdC8vIFx0Y29udGVudDogd2luZG93LmxvY2F0aW9uLmhyZWZcclxuXHRcdFx0Ly8gfSlcclxuXHRcdFx0XHJcblx0XHRcdC8vIOS/neWtmGFwcElkXHJcblx0XHRcdHN0b3JlLmNvbW1pdCgnc2V0V2VpQ2hhdEluZm8nLCBkYXRhKVxyXG5cdFx0XHRcclxuXHRcdFx0YXBwSWQgPSBkYXRhLmFwcElkO1xyXG5cdFx0XHQvLyDlvq7kv6Hkv6Hmga/phY3nva5cclxuXHRcdFx0d2VpeGluT2JqLmNvbmZpZyh7XHJcblx0XHRcdFx0ZGVidWc6IGZhbHNlLCAvLyDlvIDlkK/osIPor5XmqKHlvI8s6LCD55So55qE5omA5pyJYXBp55qE6L+U5Zue5YC85Lya5Zyo5a6i5oi356uvYWxlcnTlh7rmnaXvvIzoi6XopoHmn6XnnIvkvKDlhaXnmoTlj4LmlbDvvIzlj6/ku6XlnKhwY+err+aJk+W8gO+8jOWPguaVsOS/oeaBr+S8mumAmui/h2xvZ+aJk+WHuu+8jOS7heWcqHBj56uv5pe25omN5Lya5omT5Y2w44CCXHJcblx0XHRcdFx0YXBwSWQ6IGRhdGEuYXBwSWQsIC8vIOW/heWhq++8jOS8geS4muWPt+eahOWUr+S4gOagh+ivhu+8jOatpOWkhOWhq+WGmeS8geS4muWPt2NvcnBpZFxyXG5cdFx0XHRcdHRpbWVzdGFtcDogZGF0YS50aW1lc3RhbXAsIC8vIOW/heWhq++8jOeUn+aIkOetvuWQjeeahOaXtumXtOaIs1xyXG5cdFx0XHRcdG5vbmNlU3RyOiBkYXRhLm5vbmNlU3RyLCAvLyDlv4XloavvvIznlJ/miJDnrb7lkI3nmoTpmo/mnLrkuLJcclxuXHRcdFx0XHRzaWduYXR1cmU6IGRhdGEuc2lnbmF0dXJlLCAvLyDlv4XloavvvIznrb7lkI3vvIzop4HpmYTlvZUxXHJcblx0XHRcdFx0anNBcGlMaXN0OiBkYXRhLmpzQXBpTGlzdCAvLyDlv4XloavvvIzpnIDopoHkvb/nlKjnmoRKU+aOpeWPo+WIl+ihqO+8jOaJgOaciUpT5o6l5Y+j5YiX6KGo6KeB6ZmE5b2VMlxyXG5cdFx0XHR9KTtcclxuXHRcdFx0d2VpeGluT2JqLnJlYWR5KChlKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ+WIhuS6q+aVsOaNricsc2hhcmVEYXRhKTtcclxuXHRcdFx0XHRpZiAoc2hhcmVEYXRhID09ICcnKSB7XHJcblx0XHRcdFx0XHRzaGFyZSh7fSkudGhlbigoe1xyXG5cdFx0XHRcdFx0XHRkYXRhXHJcblx0XHRcdFx0XHR9KSA9PiB7XHJcblx0XHRcdFx0XHRcdHNoYXJlRGF0YSA9IGRhdGEuZGF0YVxyXG5cdFx0XHRcdFx0XHRzaGFyZUxvYWQoY29uZmlnKVxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHNoYXJlTG9hZChjb25maWcpXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KVxyXG5cdFx0fSlcclxuXHRcdC5jYXRjaChlID0+IHtcclxuXHRcdFx0Y29uc29sZS5sb2coZSk7XHJcblx0XHR9KTtcclxufVxyXG4vLyDliqDovb3liIbkuqvmlbDmja5cclxuZnVuY3Rpb24gc2hhcmVMb2FkKGNvbmZpZykge1xyXG5cdGxldCBtZXNzO1xyXG5cdGlmIChjb25maWcpIHtcclxuXHRcdG1lc3MgPSB7XHJcblx0XHRcdGxpbms6IGNvbmZpZy5saW5rLCAvLyDliIbkuqvpk77mjqVcclxuXHRcdFx0aW1nVXJsOiBjb25maWcuaW1nVXJsLFxyXG5cdFx0XHRkZXNjOiBjb25maWcuZGVzYyxcclxuXHRcdFx0dGl0bGU6IGNvbmZpZy50aXRsZSxcclxuXHRcdFx0c3VjY2VzczogY29uZmlnLnN1Y2Nlc3MsXHJcblx0XHRcdGZhaWw6IGNvbmZpZy5mYWlsfHxmdW5jdGlvbiAoZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKGUpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSBlbHNlIHtcclxuXHRcdC8vIGNvbnNvbGUubG9nKHdpbmRvdy5sb2NhdGlvbi5ocmVmLCA1NSlcclxuXHRcdC8vIGxldCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZiArICc/c3ByZWFkPScgKyBzdG9yZS5zdGF0ZS51c2VySW5mby51aWQ7XHJcblx0XHRsZXQgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcblx0XHR1cmwgPSB1cmwucmVwbGFjZSgvW1xcPywmXXswLDF9ZnJvbT1zaW5nbGVtZXNzYWdlL2csICcnKTtcclxuXHRcdG1lc3MgPSB7XHJcblx0XHRcdHRpdGxlOiBzaGFyZURhdGEudGl0bGUsXHJcblx0XHRcdGxpbms6IHVybCwgLy8g5YiG5Lqr6ZO+5o6lXHJcblx0XHRcdGltZ1VybDogc2hhcmVEYXRhLmltZywgLy8g5YiG5Lqr5Zu+5qCHXHJcblx0XHRcdGRlc2M6IHNoYXJlRGF0YS5zeW5vcHNpcyxcclxuXHRcdFx0c3VjY2VzczogZnVuY3Rpb24oKSB7XHJcblx0XHRcdH0sXHJcblx0XHRcdGZhaWw6ZnVuY3Rpb24gKGUpIHtcclxuXHRcdFx0XHRjb25zb2xlLmxvZyhlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHQvLyDojrflj5bku5PlupPmlbDmja5cclxuXHQvLyDliIbkuqvlpb3lj4tcclxuXHQvLyB3ZWl4aW5PYmoudXBkYXRlQXBwTWVzc2FnZVNoYXJlRGF0YShtZXNzKTtcclxuXHR3ZWl4aW5PYmoub25NZW51U2hhcmVBcHBNZXNzYWdlKG1lc3MpOy8vIOWNs+WwhuW6n+W8g1xyXG5cdC8vIOWIhuS6q+aci+WPi+WciFxyXG5cdC8vIHdlaXhpbk9iai51cGRhdGVUaW1lbGluZVNoYXJlRGF0YShtZXNzKVxyXG5cdHdlaXhpbk9iai5vbk1lbnVTaGFyZVRpbWVsaW5lKG1lc3MpOy8vIOWNs+WwhuW6n+W8g1xyXG59XHJcblxyXG4vLyDpmpDol4/lip/og73mjInpkq5cclxuZXhwb3J0IGZ1bmN0aW9uIHdlaXhpbmhpZGVNZW51KGNvbmZpZykge1xyXG5cdGNvbnNvbGUubG9nKGNvbmZpZylcclxuXHR3ZWl4aW5PYmoucmVhZHkoKGUpID0+IHtcclxuXHRcdHdlaXhpbk9iai5oaWRlTWVudUl0ZW1zKHtcclxuXHRcdFx0bWVudUxpc3Q6IGNvbmZpZywgLy8g6KaB6ZqQ6JeP55qE6I+c5Y2V6aG577yM5Y+q6IO96ZqQ6JeP4oCc5Lyg5pKt57G74oCd5ZKM4oCc5L+d5oqk57G74oCd5oyJ6ZKu77yM5omA5pyJbWVudemhueingemZhOW9lTNcclxuXHRcdH0pO1xyXG5cdH0pXHJcblx0XHJcbn1cclxuXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhKGNvbmZpZykge1xyXG4vLyBcdGNvbnNvbGUubG9nKGNvbmZpZylcclxuLy8gXHR3ZWl4aW5PYmoucmVhZHkoKGUpID0+IHtcclxuLy8gXHRcdHdlaXhpbk9iai5nZXRMb2NhdGlvbih7XHJcbi8vIFx0XHQgICAgdHlwZTogJ3dnczg0JyxcclxuLy8gXHRcdCAgICBzdWNjZXNzOiBmdW5jdGlvbiAocmVzKSB7XHJcbi8vIFx0XHRcdFx0XHRjb25maWcubG9uZ2l0dWRlID0gcmVzLmxvbmdpdHVkZTtcclxuLy8gXHRcdFx0XHRcdGNvbmZpZy5sYXRpdHVkZSA9IHJlcy5sYXRpdHVkZTtcclxuLy8gXHRcdFx0XHRcdHVuaS5zaG93TW9kYWwoe1xyXG4vLyBcdFx0XHRcdFx0XHR0aXRsZTogJ+aPkOekuicsXHJcbi8vIFx0XHRcdFx0XHRcdGNvbnRlbnQ6IHJlcy5sb25naXR1ZGVcclxuLy8gXHRcdFx0XHRcdH0pXHJcbi8vIFx0XHRcdFx0XHRjb25zb2xlLmxvZygn5b2T5YmN5L2N572u55qE57uP5bqm77yaJyArIHJlcy5sb25naXR1ZGUpO1xyXG4vLyBcdFx0XHRcdFx0Y29uc29sZS5sb2coJ+W9k+WJjeS9jee9rueahOe6rOW6pu+8micgKyByZXMubGF0aXR1ZGUpO1xyXG4vLyBcdFx0ICAgIH1cclxuLy8gXHRcdH0pO1xyXG4vLyBcdH0pXHJcblx0XHJcbi8vIH1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuXHR3ZWl4aW5PYmosXHJcblx0c2hhcmVEYXRhLFxyXG5cdGFwcElkXHJcbn1cclxuIiwiaW1wb3J0IHJlcXVlc3QgZnJvbSAnQC91dGlscy9yZXF1ZXN0J1xyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4iLCJ2YXIgZztcblxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcbmcgPSAoZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufSkoKTtcblxudHJ5IHtcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXG5cdGcgPSBnIHx8IG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XG59IGNhdGNoIChlKSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXG5cdGlmICh0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKSBnID0gd2luZG93O1xufVxuXG4vLyBnIGNhbiBzdGlsbCBiZSB1bmRlZmluZWQsIGJ1dCBub3RoaW5nIHRvIGRvIGFib3V0IGl0Li4uXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGc7XG4iLCIhZnVuY3Rpb24oZSxuKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1uKGUpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmKGRlZmluZS5hbWR8fGRlZmluZS5jbWQpP2RlZmluZShmdW5jdGlvbigpe3JldHVybiBuKGUpfSk6bihlLCEwKX0od2luZG93LGZ1bmN0aW9uKG8sZSl7ZnVuY3Rpb24gYyhuLGUsaSl7by5XZWl4aW5KU0JyaWRnZT9XZWl4aW5KU0JyaWRnZS5pbnZva2UobixyKGUpLGZ1bmN0aW9uKGUpe2EobixlLGkpfSk6ZChuLGkpfWZ1bmN0aW9uIGkobixpLHQpe28uV2VpeGluSlNCcmlkZ2U/V2VpeGluSlNCcmlkZ2Uub24obixmdW5jdGlvbihlKXt0JiZ0LnRyaWdnZXImJnQudHJpZ2dlcihlKSxhKG4sZSxpKX0pOmQobix0fHxpKX1mdW5jdGlvbiByKGUpe3JldHVybihlPWV8fHt9KS5hcHBJZD1NLmFwcElkLGUudmVyaWZ5QXBwSWQ9TS5hcHBJZCxlLnZlcmlmeVNpZ25UeXBlPVwic2hhMVwiLGUudmVyaWZ5VGltZXN0YW1wPU0udGltZXN0YW1wK1wiXCIsZS52ZXJpZnlOb25jZVN0cj1NLm5vbmNlU3RyLGUudmVyaWZ5U2lnbmF0dXJlPU0uc2lnbmF0dXJlLGV9ZnVuY3Rpb24gbihlKXtyZXR1cm57dGltZVN0YW1wOmUudGltZXN0YW1wK1wiXCIsbm9uY2VTdHI6ZS5ub25jZVN0cixwYWNrYWdlOmUucGFja2FnZSxwYXlTaWduOmUucGF5U2lnbixzaWduVHlwZTplLnNpZ25UeXBlfHxcIlNIQTFcIn19ZnVuY3Rpb24gYShlLG4saSl7XCJvcGVuRW50ZXJwcmlzZUNoYXRcIj09ZSYmKG4uZXJyQ29kZT1uLmVycl9jb2RlKSxkZWxldGUgbi5lcnJfY29kZSxkZWxldGUgbi5lcnJfZGVzYyxkZWxldGUgbi5lcnJfZGV0YWlsO3ZhciB0PW4uZXJyTXNnO3R8fCh0PW4uZXJyX21zZyxkZWxldGUgbi5lcnJfbXNnLHQ9ZnVuY3Rpb24oZSxuKXt2YXIgaT1lLHQ9ZltpXTt0JiYoaT10KTt2YXIgbz1cIm9rXCI7aWYobil7dmFyIHI9bi5pbmRleE9mKFwiOlwiKTtcImNvbmZpcm1cIj09KG89bi5zdWJzdHJpbmcocisxKSkmJihvPVwib2tcIiksXCJmYWlsZWRcIj09byYmKG89XCJmYWlsXCIpLC0xIT1vLmluZGV4T2YoXCJmYWlsZWRfXCIpJiYobz1vLnN1YnN0cmluZyg3KSksLTEhPW8uaW5kZXhPZihcImZhaWxfXCIpJiYobz1vLnN1YnN0cmluZyg1KSksXCJhY2Nlc3MgZGVuaWVkXCIhPShvPShvPW8ucmVwbGFjZSgvXy9nLFwiIFwiKSkudG9Mb3dlckNhc2UoKSkmJlwibm8gcGVybWlzc2lvbiB0byBleGVjdXRlXCIhPW98fChvPVwicGVybWlzc2lvbiBkZW5pZWRcIiksXCJjb25maWdcIj09aSYmXCJmdW5jdGlvbiBub3QgZXhpc3RcIj09byYmKG89XCJva1wiKSxcIlwiPT1vJiYobz1cImZhaWxcIil9cmV0dXJuIG49aStcIjpcIitvfShlLHQpLG4uZXJyTXNnPXQpLChpPWl8fHt9KS5fY29tcGxldGUmJihpLl9jb21wbGV0ZShuKSxkZWxldGUgaS5fY29tcGxldGUpLHQ9bi5lcnJNc2d8fFwiXCIsTS5kZWJ1ZyYmIWkuaXNJbm5lckludm9rZSYmYWxlcnQoSlNPTi5zdHJpbmdpZnkobikpO3ZhciBvPXQuaW5kZXhPZihcIjpcIik7c3dpdGNoKHQuc3Vic3RyaW5nKG8rMSkpe2Nhc2VcIm9rXCI6aS5zdWNjZXNzJiZpLnN1Y2Nlc3Mobik7YnJlYWs7Y2FzZVwiY2FuY2VsXCI6aS5jYW5jZWwmJmkuY2FuY2VsKG4pO2JyZWFrO2RlZmF1bHQ6aS5mYWlsJiZpLmZhaWwobil9aS5jb21wbGV0ZSYmaS5jb21wbGV0ZShuKX1mdW5jdGlvbiBzKGUpe2lmKGUpe2Zvcih2YXIgbj0wLGk9ZS5sZW5ndGg7bjxpOysrbil7dmFyIHQ9ZVtuXSxvPXBbdF07byYmKGVbbl09byl9cmV0dXJuIGV9fWZ1bmN0aW9uIGQoZSxuKXtpZighKCFNLmRlYnVnfHxuJiZuLmlzSW5uZXJJbnZva2UpKXt2YXIgaT1mW2VdO2kmJihlPWkpLG4mJm4uX2NvbXBsZXRlJiZkZWxldGUgbi5fY29tcGxldGUsY29uc29sZS5sb2coJ1wiJytlKydcIiwnLG58fFwiXCIpfX1mdW5jdGlvbiBsKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9ZnVuY3Rpb24gdShlKXtJJiYoby5XZWl4aW5KU0JyaWRnZT9lKCk6dC5hZGRFdmVudExpc3RlbmVyJiZ0LmFkZEV2ZW50TGlzdGVuZXIoXCJXZWl4aW5KU0JyaWRnZVJlYWR5XCIsZSwhMSkpfWlmKCFvLmpXZWl4aW4pe3ZhciBwPXtjb25maWc6XCJwcmVWZXJpZnlKU0FQSVwiLG9uTWVudVNoYXJlVGltZWxpbmU6XCJtZW51OnNoYXJlOnRpbWVsaW5lXCIsb25NZW51U2hhcmVBcHBNZXNzYWdlOlwibWVudTpzaGFyZTphcHBtZXNzYWdlXCIsb25NZW51U2hhcmVRUTpcIm1lbnU6c2hhcmU6cXFcIixvbk1lbnVTaGFyZVdlaWJvOlwibWVudTpzaGFyZTp3ZWlib0FwcFwiLG9uTWVudVNoYXJlUVpvbmU6XCJtZW51OnNoYXJlOlFab25lXCIscHJldmlld0ltYWdlOlwiaW1hZ2VQcmV2aWV3XCIsZ2V0TG9jYXRpb246XCJnZW9Mb2NhdGlvblwiLG9wZW5Qcm9kdWN0U3BlY2lmaWNWaWV3Olwib3BlblByb2R1Y3RWaWV3V2l0aFBpZFwiLGFkZENhcmQ6XCJiYXRjaEFkZENhcmRcIixvcGVuQ2FyZDpcImJhdGNoVmlld0NhcmRcIixjaG9vc2VXWFBheTpcImdldEJyYW5kV0NQYXlSZXF1ZXN0XCIsb3BlbkVudGVycHJpc2VSZWRQYWNrZXQ6XCJnZXRSZWNldmllQml6SG9uZ0Jhb1JlcXVlc3RcIixzdGFydFNlYXJjaEJlYWNvbnM6XCJzdGFydE1vbml0b3JpbmdCZWFjb25zXCIsc3RvcFNlYXJjaEJlYWNvbnM6XCJzdG9wTW9uaXRvcmluZ0JlYWNvbnNcIixvblNlYXJjaEJlYWNvbnM6XCJvbkJlYWNvbnNJblJhbmdlXCIsY29uc3VtZUFuZFNoYXJlQ2FyZDpcImNvbnN1bWVkU2hhcmVDYXJkXCIsb3BlbkFkZHJlc3M6XCJlZGl0QWRkcmVzc1wifSxmPWZ1bmN0aW9uKCl7dmFyIGU9e307Zm9yKHZhciBuIGluIHApZVtwW25dXT1uO3JldHVybiBlfSgpLHQ9by5kb2N1bWVudCxtPXQudGl0bGUsZz1uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCksaD1uYXZpZ2F0b3IucGxhdGZvcm0udG9Mb3dlckNhc2UoKSx2PSEoIWgubWF0Y2goXCJtYWNcIikmJiFoLm1hdGNoKFwid2luXCIpKSxTPS0xIT1nLmluZGV4T2YoXCJ3eGRlYnVnZ2VyXCIpLEk9LTEhPWcuaW5kZXhPZihcIm1pY3JvbWVzc2VuZ2VyXCIpLHk9LTEhPWcuaW5kZXhPZihcImFuZHJvaWRcIiksXz0tMSE9Zy5pbmRleE9mKFwiaXBob25lXCIpfHwtMSE9Zy5pbmRleE9mKFwiaXBhZFwiKSx3PShPPWcubWF0Y2goL21pY3JvbWVzc2VuZ2VyXFwvKFxcZCtcXC5cXGQrXFwuXFxkKykvKXx8Zy5tYXRjaCgvbWljcm9tZXNzZW5nZXJcXC8oXFxkK1xcLlxcZCspLykpP09bMV06XCJcIixrPXtpbml0U3RhcnRUaW1lOmwoKSxpbml0RW5kVGltZTowLHByZVZlcmlmeVN0YXJ0VGltZTowLHByZVZlcmlmeUVuZFRpbWU6MH0sVD17dmVyc2lvbjoxLGFwcElkOlwiXCIsaW5pdFRpbWU6MCxwcmVWZXJpZnlUaW1lOjAsbmV0d29ya1R5cGU6XCJcIixpc1ByZVZlcmlmeU9rOjEsc3lzdGVtVHlwZTpfPzE6eT8yOi0xLGNsaWVudFZlcnNpb246dyx1cmw6ZW5jb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLmhyZWYpfSxNPXt9LFA9e19jb21wbGV0ZXM6W119LHg9e3N0YXRlOjAsZGF0YTp7fX07dShmdW5jdGlvbigpe2suaW5pdEVuZFRpbWU9bCgpfSk7dmFyIEE9ITEsVj1bXSxDPXtjb25maWc6ZnVuY3Rpb24oZSl7ZChcImNvbmZpZ1wiLE09ZSk7dmFyIHQ9ITEhPT1NLmNoZWNrO3UoZnVuY3Rpb24oKXtpZih0KWMocC5jb25maWcse3ZlcmlmeUpzQXBpTGlzdDpzKE0uanNBcGlMaXN0KX0sZnVuY3Rpb24oKXtQLl9jb21wbGV0ZT1mdW5jdGlvbihlKXtrLnByZVZlcmlmeUVuZFRpbWU9bCgpLHguc3RhdGU9MSx4LmRhdGE9ZX0sUC5zdWNjZXNzPWZ1bmN0aW9uKGUpe1QuaXNQcmVWZXJpZnlPaz0wfSxQLmZhaWw9ZnVuY3Rpb24oZSl7UC5fZmFpbD9QLl9mYWlsKGUpOnguc3RhdGU9LTF9O3ZhciB0PVAuX2NvbXBsZXRlcztyZXR1cm4gdC5wdXNoKGZ1bmN0aW9uKCl7IWZ1bmN0aW9uKGUpe2lmKCEodnx8U3x8TS5kZWJ1Z3x8dzxcIjYuMC4yXCJ8fFQuc3lzdGVtVHlwZTwwKSl7dmFyIGk9bmV3IEltYWdlO1QuYXBwSWQ9TS5hcHBJZCxULmluaXRUaW1lPWsuaW5pdEVuZFRpbWUtay5pbml0U3RhcnRUaW1lLFQucHJlVmVyaWZ5VGltZT1rLnByZVZlcmlmeUVuZFRpbWUtay5wcmVWZXJpZnlTdGFydFRpbWUsQy5nZXROZXR3b3JrVHlwZSh7aXNJbm5lckludm9rZTohMCxzdWNjZXNzOmZ1bmN0aW9uKGUpe1QubmV0d29ya1R5cGU9ZS5uZXR3b3JrVHlwZTt2YXIgbj1cImh0dHBzOi8vb3Blbi53ZWl4aW4ucXEuY29tL3Nkay9yZXBvcnQ/dj1cIitULnZlcnNpb24rXCImbz1cIitULmlzUHJlVmVyaWZ5T2srXCImcz1cIitULnN5c3RlbVR5cGUrXCImYz1cIitULmNsaWVudFZlcnNpb24rXCImYT1cIitULmFwcElkK1wiJm49XCIrVC5uZXR3b3JrVHlwZStcIiZpPVwiK1QuaW5pdFRpbWUrXCImcD1cIitULnByZVZlcmlmeVRpbWUrXCImdT1cIitULnVybDtpLnNyYz1ufX0pfX0oKX0pLFAuY29tcGxldGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTAsaT10Lmxlbmd0aDtuPGk7KytuKXRbbl0oKTtQLl9jb21wbGV0ZXM9W119LFB9KCkpLGsucHJlVmVyaWZ5U3RhcnRUaW1lPWwoKTtlbHNle3guc3RhdGU9MTtmb3IodmFyIGU9UC5fY29tcGxldGVzLG49MCxpPWUubGVuZ3RoO248aTsrK24pZVtuXSgpO1AuX2NvbXBsZXRlcz1bXX19KSxDLmludm9rZXx8KEMuaW52b2tlPWZ1bmN0aW9uKGUsbixpKXtvLldlaXhpbkpTQnJpZGdlJiZXZWl4aW5KU0JyaWRnZS5pbnZva2UoZSxyKG4pLGkpfSxDLm9uPWZ1bmN0aW9uKGUsbil7by5XZWl4aW5KU0JyaWRnZSYmV2VpeGluSlNCcmlkZ2Uub24oZSxuKX0pfSxyZWFkeTpmdW5jdGlvbihlKXswIT14LnN0YXRlP2UoKTooUC5fY29tcGxldGVzLnB1c2goZSksIUkmJk0uZGVidWcmJmUoKSl9LGVycm9yOmZ1bmN0aW9uKGUpe3c8XCI2LjAuMlwifHwoLTE9PXguc3RhdGU/ZSh4LmRhdGEpOlAuX2ZhaWw9ZSl9LGNoZWNrSnNBcGk6ZnVuY3Rpb24oZSl7YyhcImNoZWNrSnNBcGlcIix7anNBcGlMaXN0OnMoZS5qc0FwaUxpc3QpfSwoZS5fY29tcGxldGU9ZnVuY3Rpb24oZSl7aWYoeSl7dmFyIG49ZS5jaGVja1Jlc3VsdDtuJiYoZS5jaGVja1Jlc3VsdD1KU09OLnBhcnNlKG4pKX1lPWZ1bmN0aW9uKGUpe3ZhciBuPWUuY2hlY2tSZXN1bHQ7Zm9yKHZhciBpIGluIG4pe3ZhciB0PWZbaV07dCYmKG5bdF09bltpXSxkZWxldGUgbltpXSl9cmV0dXJuIGV9KGUpfSxlKSl9LG9uTWVudVNoYXJlVGltZWxpbmU6ZnVuY3Rpb24oZSl7aShwLm9uTWVudVNoYXJlVGltZWxpbmUse2NvbXBsZXRlOmZ1bmN0aW9uKCl7YyhcInNoYXJlVGltZWxpbmVcIix7dGl0bGU6ZS50aXRsZXx8bSxkZXNjOmUudGl0bGV8fG0saW1nX3VybDplLmltZ1VybHx8XCJcIixsaW5rOmUubGlua3x8bG9jYXRpb24uaHJlZix0eXBlOmUudHlwZXx8XCJsaW5rXCIsZGF0YV91cmw6ZS5kYXRhVXJsfHxcIlwifSxlKX19LGUpfSxvbk1lbnVTaGFyZUFwcE1lc3NhZ2U6ZnVuY3Rpb24obil7aShwLm9uTWVudVNoYXJlQXBwTWVzc2FnZSx7Y29tcGxldGU6ZnVuY3Rpb24oZSl7XCJmYXZvcml0ZVwiPT09ZS5zY2VuZT9jKFwic2VuZEFwcE1lc3NhZ2VcIix7dGl0bGU6bi50aXRsZXx8bSxkZXNjOm4uZGVzY3x8XCJcIixsaW5rOm4ubGlua3x8bG9jYXRpb24uaHJlZixpbWdfdXJsOm4uaW1nVXJsfHxcIlwiLHR5cGU6bi50eXBlfHxcImxpbmtcIixkYXRhX3VybDpuLmRhdGFVcmx8fFwiXCJ9KTpjKFwic2VuZEFwcE1lc3NhZ2VcIix7dGl0bGU6bi50aXRsZXx8bSxkZXNjOm4uZGVzY3x8XCJcIixsaW5rOm4ubGlua3x8bG9jYXRpb24uaHJlZixpbWdfdXJsOm4uaW1nVXJsfHxcIlwiLHR5cGU6bi50eXBlfHxcImxpbmtcIixkYXRhX3VybDpuLmRhdGFVcmx8fFwiXCJ9LG4pfX0sbil9LG9uTWVudVNoYXJlUVE6ZnVuY3Rpb24oZSl7aShwLm9uTWVudVNoYXJlUVEse2NvbXBsZXRlOmZ1bmN0aW9uKCl7YyhcInNoYXJlUVFcIix7dGl0bGU6ZS50aXRsZXx8bSxkZXNjOmUuZGVzY3x8XCJcIixpbWdfdXJsOmUuaW1nVXJsfHxcIlwiLGxpbms6ZS5saW5rfHxsb2NhdGlvbi5ocmVmfSxlKX19LGUpfSxvbk1lbnVTaGFyZVdlaWJvOmZ1bmN0aW9uKGUpe2kocC5vbk1lbnVTaGFyZVdlaWJvLHtjb21wbGV0ZTpmdW5jdGlvbigpe2MoXCJzaGFyZVdlaWJvQXBwXCIse3RpdGxlOmUudGl0bGV8fG0sZGVzYzplLmRlc2N8fFwiXCIsaW1nX3VybDplLmltZ1VybHx8XCJcIixsaW5rOmUubGlua3x8bG9jYXRpb24uaHJlZn0sZSl9fSxlKX0sb25NZW51U2hhcmVRWm9uZTpmdW5jdGlvbihlKXtpKHAub25NZW51U2hhcmVRWm9uZSx7Y29tcGxldGU6ZnVuY3Rpb24oKXtjKFwic2hhcmVRWm9uZVwiLHt0aXRsZTplLnRpdGxlfHxtLGRlc2M6ZS5kZXNjfHxcIlwiLGltZ191cmw6ZS5pbWdVcmx8fFwiXCIsbGluazplLmxpbmt8fGxvY2F0aW9uLmhyZWZ9LGUpfX0sZSl9LHVwZGF0ZVRpbWVsaW5lU2hhcmVEYXRhOmZ1bmN0aW9uKGUpe2MoXCJ1cGRhdGVUaW1lbGluZVNoYXJlRGF0YVwiLHt0aXRsZTplLnRpdGxlLGxpbms6ZS5saW5rLGltZ1VybDplLmltZ1VybH0sZSl9LHVwZGF0ZUFwcE1lc3NhZ2VTaGFyZURhdGE6ZnVuY3Rpb24oZSl7YyhcInVwZGF0ZUFwcE1lc3NhZ2VTaGFyZURhdGFcIix7dGl0bGU6ZS50aXRsZSxkZXNjOmUuZGVzYyxsaW5rOmUubGluayxpbWdVcmw6ZS5pbWdVcmx9LGUpfSxzdGFydFJlY29yZDpmdW5jdGlvbihlKXtjKFwic3RhcnRSZWNvcmRcIix7fSxlKX0sc3RvcFJlY29yZDpmdW5jdGlvbihlKXtjKFwic3RvcFJlY29yZFwiLHt9LGUpfSxvblZvaWNlUmVjb3JkRW5kOmZ1bmN0aW9uKGUpe2koXCJvblZvaWNlUmVjb3JkRW5kXCIsZSl9LHBsYXlWb2ljZTpmdW5jdGlvbihlKXtjKFwicGxheVZvaWNlXCIse2xvY2FsSWQ6ZS5sb2NhbElkfSxlKX0scGF1c2VWb2ljZTpmdW5jdGlvbihlKXtjKFwicGF1c2VWb2ljZVwiLHtsb2NhbElkOmUubG9jYWxJZH0sZSl9LHN0b3BWb2ljZTpmdW5jdGlvbihlKXtjKFwic3RvcFZvaWNlXCIse2xvY2FsSWQ6ZS5sb2NhbElkfSxlKX0sb25Wb2ljZVBsYXlFbmQ6ZnVuY3Rpb24oZSl7aShcIm9uVm9pY2VQbGF5RW5kXCIsZSl9LHVwbG9hZFZvaWNlOmZ1bmN0aW9uKGUpe2MoXCJ1cGxvYWRWb2ljZVwiLHtsb2NhbElkOmUubG9jYWxJZCxpc1Nob3dQcm9ncmVzc1RpcHM6MD09ZS5pc1Nob3dQcm9ncmVzc1RpcHM/MDoxfSxlKX0sZG93bmxvYWRWb2ljZTpmdW5jdGlvbihlKXtjKFwiZG93bmxvYWRWb2ljZVwiLHtzZXJ2ZXJJZDplLnNlcnZlcklkLGlzU2hvd1Byb2dyZXNzVGlwczowPT1lLmlzU2hvd1Byb2dyZXNzVGlwcz8wOjF9LGUpfSx0cmFuc2xhdGVWb2ljZTpmdW5jdGlvbihlKXtjKFwidHJhbnNsYXRlVm9pY2VcIix7bG9jYWxJZDplLmxvY2FsSWQsaXNTaG93UHJvZ3Jlc3NUaXBzOjA9PWUuaXNTaG93UHJvZ3Jlc3NUaXBzPzA6MX0sZSl9LGNob29zZUltYWdlOmZ1bmN0aW9uKGUpe2MoXCJjaG9vc2VJbWFnZVwiLHtzY2VuZTpcIjF8MlwiLGNvdW50OmUuY291bnR8fDksc2l6ZVR5cGU6ZS5zaXplVHlwZXx8W1wib3JpZ2luYWxcIixcImNvbXByZXNzZWRcIl0sc291cmNlVHlwZTplLnNvdXJjZVR5cGV8fFtcImFsYnVtXCIsXCJjYW1lcmFcIl19LChlLl9jb21wbGV0ZT1mdW5jdGlvbihlKXtpZih5KXt2YXIgbj1lLmxvY2FsSWRzO3RyeXtuJiYoZS5sb2NhbElkcz1KU09OLnBhcnNlKG4pKX1jYXRjaChlKXt9fX0sZSkpfSxnZXRMb2NhdGlvbjpmdW5jdGlvbihlKXt9LHByZXZpZXdJbWFnZTpmdW5jdGlvbihlKXtjKHAucHJldmlld0ltYWdlLHtjdXJyZW50OmUuY3VycmVudCx1cmxzOmUudXJsc30sZSl9LHVwbG9hZEltYWdlOmZ1bmN0aW9uKGUpe2MoXCJ1cGxvYWRJbWFnZVwiLHtsb2NhbElkOmUubG9jYWxJZCxpc1Nob3dQcm9ncmVzc1RpcHM6MD09ZS5pc1Nob3dQcm9ncmVzc1RpcHM/MDoxfSxlKX0sZG93bmxvYWRJbWFnZTpmdW5jdGlvbihlKXtjKFwiZG93bmxvYWRJbWFnZVwiLHtzZXJ2ZXJJZDplLnNlcnZlcklkLGlzU2hvd1Byb2dyZXNzVGlwczowPT1lLmlzU2hvd1Byb2dyZXNzVGlwcz8wOjF9LGUpfSxnZXRMb2NhbEltZ0RhdGE6ZnVuY3Rpb24oZSl7ITE9PT1BPyhBPSEwLGMoXCJnZXRMb2NhbEltZ0RhdGFcIix7bG9jYWxJZDplLmxvY2FsSWR9LChlLl9jb21wbGV0ZT1mdW5jdGlvbihlKXtpZihBPSExLDA8Vi5sZW5ndGgpe3ZhciBuPVYuc2hpZnQoKTt3eC5nZXRMb2NhbEltZ0RhdGEobil9fSxlKSkpOlYucHVzaChlKX0sZ2V0TmV0d29ya1R5cGU6ZnVuY3Rpb24oZSl7YyhcImdldE5ldHdvcmtUeXBlXCIse30sKGUuX2NvbXBsZXRlPWZ1bmN0aW9uKGUpe2U9ZnVuY3Rpb24oZSl7dmFyIG49ZS5lcnJNc2c7ZS5lcnJNc2c9XCJnZXROZXR3b3JrVHlwZTpva1wiO3ZhciBpPWUuc3VidHlwZTtpZihkZWxldGUgZS5zdWJ0eXBlLGkpZS5uZXR3b3JrVHlwZT1pO2Vsc2V7dmFyIHQ9bi5pbmRleE9mKFwiOlwiKSxvPW4uc3Vic3RyaW5nKHQrMSk7c3dpdGNoKG8pe2Nhc2VcIndpZmlcIjpjYXNlXCJlZGdlXCI6Y2FzZVwid3dhblwiOmUubmV0d29ya1R5cGU9bzticmVhaztkZWZhdWx0OmUuZXJyTXNnPVwiZ2V0TmV0d29ya1R5cGU6ZmFpbFwifX1yZXR1cm4gZX0oZSl9LGUpKX0sb3BlbkxvY2F0aW9uOmZ1bmN0aW9uKGUpe2MoXCJvcGVuTG9jYXRpb25cIix7bGF0aXR1ZGU6ZS5sYXRpdHVkZSxsb25naXR1ZGU6ZS5sb25naXR1ZGUsbmFtZTplLm5hbWV8fFwiXCIsYWRkcmVzczplLmFkZHJlc3N8fFwiXCIsc2NhbGU6ZS5zY2FsZXx8MjgsaW5mb1VybDplLmluZm9Vcmx8fFwiXCJ9LGUpfSxnZXRMb2NhdGlvbjpmdW5jdGlvbihlKXtjKHAuZ2V0TG9jYXRpb24se3R5cGU6KGU9ZXx8e30pLnR5cGV8fFwid2dzODRcIn0sKGUuX2NvbXBsZXRlPWZ1bmN0aW9uKGUpe2RlbGV0ZSBlLnR5cGV9LGUpKX0saGlkZU9wdGlvbk1lbnU6ZnVuY3Rpb24oZSl7YyhcImhpZGVPcHRpb25NZW51XCIse30sZSl9LHNob3dPcHRpb25NZW51OmZ1bmN0aW9uKGUpe2MoXCJzaG93T3B0aW9uTWVudVwiLHt9LGUpfSxjbG9zZVdpbmRvdzpmdW5jdGlvbihlKXtjKFwiY2xvc2VXaW5kb3dcIix7fSxlPWV8fHt9KX0saGlkZU1lbnVJdGVtczpmdW5jdGlvbihlKXtjKFwiaGlkZU1lbnVJdGVtc1wiLHttZW51TGlzdDplLm1lbnVMaXN0fSxlKX0sc2hvd01lbnVJdGVtczpmdW5jdGlvbihlKXtjKFwic2hvd01lbnVJdGVtc1wiLHttZW51TGlzdDplLm1lbnVMaXN0fSxlKX0saGlkZUFsbE5vbkJhc2VNZW51SXRlbTpmdW5jdGlvbihlKXtjKFwiaGlkZUFsbE5vbkJhc2VNZW51SXRlbVwiLHt9LGUpfSxzaG93QWxsTm9uQmFzZU1lbnVJdGVtOmZ1bmN0aW9uKGUpe2MoXCJzaG93QWxsTm9uQmFzZU1lbnVJdGVtXCIse30sZSl9LHNjYW5RUkNvZGU6ZnVuY3Rpb24oZSl7YyhcInNjYW5RUkNvZGVcIix7bmVlZFJlc3VsdDooZT1lfHx7fSkubmVlZFJlc3VsdHx8MCxzY2FuVHlwZTplLnNjYW5UeXBlfHxbXCJxckNvZGVcIixcImJhckNvZGVcIl19LChlLl9jb21wbGV0ZT1mdW5jdGlvbihlKXtpZihfKXt2YXIgbj1lLnJlc3VsdFN0cjtpZihuKXt2YXIgaT1KU09OLnBhcnNlKG4pO2UucmVzdWx0U3RyPWkmJmkuc2Nhbl9jb2RlJiZpLnNjYW5fY29kZS5zY2FuX3Jlc3VsdH19fSxlKSl9LG9wZW5BZGRyZXNzOmZ1bmN0aW9uKGUpe2MocC5vcGVuQWRkcmVzcyx7fSwoZS5fY29tcGxldGU9ZnVuY3Rpb24oZSl7dmFyIG47KG49ZSkucG9zdGFsQ29kZT1uLmFkZHJlc3NQb3N0YWxDb2RlLGRlbGV0ZSBuLmFkZHJlc3NQb3N0YWxDb2RlLG4ucHJvdmluY2VOYW1lPW4ucHJvdmljZUZpcnN0U3RhZ2VOYW1lLGRlbGV0ZSBuLnByb3ZpY2VGaXJzdFN0YWdlTmFtZSxuLmNpdHlOYW1lPW4uYWRkcmVzc0NpdHlTZWNvbmRTdGFnZU5hbWUsZGVsZXRlIG4uYWRkcmVzc0NpdHlTZWNvbmRTdGFnZU5hbWUsbi5jb3VudHJ5TmFtZT1uLmFkZHJlc3NDb3VudGllc1RoaXJkU3RhZ2VOYW1lLGRlbGV0ZSBuLmFkZHJlc3NDb3VudGllc1RoaXJkU3RhZ2VOYW1lLG4uZGV0YWlsSW5mbz1uLmFkZHJlc3NEZXRhaWxJbmZvLGRlbGV0ZSBuLmFkZHJlc3NEZXRhaWxJbmZvLGU9bn0sZSkpfSxvcGVuUHJvZHVjdFNwZWNpZmljVmlldzpmdW5jdGlvbihlKXtjKHAub3BlblByb2R1Y3RTcGVjaWZpY1ZpZXcse3BpZDplLnByb2R1Y3RJZCx2aWV3X3R5cGU6ZS52aWV3VHlwZXx8MCxleHRfaW5mbzplLmV4dEluZm99LGUpfSxhZGRDYXJkOmZ1bmN0aW9uKGUpe2Zvcih2YXIgbj1lLmNhcmRMaXN0LGk9W10sdD0wLG89bi5sZW5ndGg7dDxvOysrdCl7dmFyIHI9blt0XSxhPXtjYXJkX2lkOnIuY2FyZElkLGNhcmRfZXh0OnIuY2FyZEV4dH07aS5wdXNoKGEpfWMocC5hZGRDYXJkLHtjYXJkX2xpc3Q6aX0sKGUuX2NvbXBsZXRlPWZ1bmN0aW9uKGUpe3ZhciBuPWUuY2FyZF9saXN0O2lmKG4pe2Zvcih2YXIgaT0wLHQ9KG49SlNPTi5wYXJzZShuKSkubGVuZ3RoO2k8dDsrK2kpe3ZhciBvPW5baV07by5jYXJkSWQ9by5jYXJkX2lkLG8uY2FyZEV4dD1vLmNhcmRfZXh0LG8uaXNTdWNjZXNzPSEhby5pc19zdWNjLGRlbGV0ZSBvLmNhcmRfaWQsZGVsZXRlIG8uY2FyZF9leHQsZGVsZXRlIG8uaXNfc3VjY31lLmNhcmRMaXN0PW4sZGVsZXRlIGUuY2FyZF9saXN0fX0sZSkpfSxjaG9vc2VDYXJkOmZ1bmN0aW9uKGUpe2MoXCJjaG9vc2VDYXJkXCIse2FwcF9pZDpNLmFwcElkLGxvY2F0aW9uX2lkOmUuc2hvcElkfHxcIlwiLHNpZ25fdHlwZTplLnNpZ25UeXBlfHxcIlNIQTFcIixjYXJkX2lkOmUuY2FyZElkfHxcIlwiLGNhcmRfdHlwZTplLmNhcmRUeXBlfHxcIlwiLGNhcmRfc2lnbjplLmNhcmRTaWduLHRpbWVfc3RhbXA6ZS50aW1lc3RhbXArXCJcIixub25jZV9zdHI6ZS5ub25jZVN0cn0sKGUuX2NvbXBsZXRlPWZ1bmN0aW9uKGUpe2UuY2FyZExpc3Q9ZS5jaG9vc2VfY2FyZF9pbmZvLGRlbGV0ZSBlLmNob29zZV9jYXJkX2luZm99LGUpKX0sb3BlbkNhcmQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPWUuY2FyZExpc3QsaT1bXSx0PTAsbz1uLmxlbmd0aDt0PG87Kyt0KXt2YXIgcj1uW3RdLGE9e2NhcmRfaWQ6ci5jYXJkSWQsY29kZTpyLmNvZGV9O2kucHVzaChhKX1jKHAub3BlbkNhcmQse2NhcmRfbGlzdDppfSxlKX0sY29uc3VtZUFuZFNoYXJlQ2FyZDpmdW5jdGlvbihlKXtjKHAuY29uc3VtZUFuZFNoYXJlQ2FyZCx7Y29uc3VtZWRDYXJkSWQ6ZS5jYXJkSWQsY29uc3VtZWRDb2RlOmUuY29kZX0sZSl9LGNob29zZVdYUGF5OmZ1bmN0aW9uKGUpe2MocC5jaG9vc2VXWFBheSxuKGUpLGUpfSxvcGVuRW50ZXJwcmlzZVJlZFBhY2tldDpmdW5jdGlvbihlKXtjKHAub3BlbkVudGVycHJpc2VSZWRQYWNrZXQsbihlKSxlKX0sc3RhcnRTZWFyY2hCZWFjb25zOmZ1bmN0aW9uKGUpe2MocC5zdGFydFNlYXJjaEJlYWNvbnMse3RpY2tldDplLnRpY2tldH0sZSl9LHN0b3BTZWFyY2hCZWFjb25zOmZ1bmN0aW9uKGUpe2MocC5zdG9wU2VhcmNoQmVhY29ucyx7fSxlKX0sb25TZWFyY2hCZWFjb25zOmZ1bmN0aW9uKGUpe2kocC5vblNlYXJjaEJlYWNvbnMsZSl9LG9wZW5FbnRlcnByaXNlQ2hhdDpmdW5jdGlvbihlKXtjKFwib3BlbkVudGVycHJpc2VDaGF0XCIse3VzZXJpZGxpc3Q6ZS51c2VySWRzLGNoYXRuYW1lOmUuZ3JvdXBOYW1lfSxlKX0sbGF1bmNoTWluaVByb2dyYW06ZnVuY3Rpb24oZSl7YyhcImxhdW5jaE1pbmlQcm9ncmFtXCIse3RhcmdldEFwcElkOmUudGFyZ2V0QXBwSWQscGF0aDpmdW5jdGlvbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmMDxlLmxlbmd0aCl7dmFyIG49ZS5zcGxpdChcIj9cIilbMF0saT1lLnNwbGl0KFwiP1wiKVsxXTtyZXR1cm4gbis9XCIuaHRtbFwiLHZvaWQgMCE9PWk/bitcIj9cIitpOm59fShlLnBhdGgpLGVudlZlcnNpb246ZS5lbnZWZXJzaW9ufSxlKX0sbWluaVByb2dyYW06e25hdmlnYXRlQmFjazpmdW5jdGlvbihlKXtlPWV8fHt9LHUoZnVuY3Rpb24oKXtjKFwiaW52b2tlTWluaVByb2dyYW1BUElcIix7bmFtZTpcIm5hdmlnYXRlQmFja1wiLGFyZzp7ZGVsdGE6ZS5kZWx0YXx8MX19LGUpfSl9LG5hdmlnYXRlVG86ZnVuY3Rpb24oZSl7dShmdW5jdGlvbigpe2MoXCJpbnZva2VNaW5pUHJvZ3JhbUFQSVwiLHtuYW1lOlwibmF2aWdhdGVUb1wiLGFyZzp7dXJsOmUudXJsfX0sZSl9KX0scmVkaXJlY3RUbzpmdW5jdGlvbihlKXt1KGZ1bmN0aW9uKCl7YyhcImludm9rZU1pbmlQcm9ncmFtQVBJXCIse25hbWU6XCJyZWRpcmVjdFRvXCIsYXJnOnt1cmw6ZS51cmx9fSxlKX0pfSxzd2l0Y2hUYWI6ZnVuY3Rpb24oZSl7dShmdW5jdGlvbigpe2MoXCJpbnZva2VNaW5pUHJvZ3JhbUFQSVwiLHtuYW1lOlwic3dpdGNoVGFiXCIsYXJnOnt1cmw6ZS51cmx9fSxlKX0pfSxyZUxhdW5jaDpmdW5jdGlvbihlKXt1KGZ1bmN0aW9uKCl7YyhcImludm9rZU1pbmlQcm9ncmFtQVBJXCIse25hbWU6XCJyZUxhdW5jaFwiLGFyZzp7dXJsOmUudXJsfX0sZSl9KX0scG9zdE1lc3NhZ2U6ZnVuY3Rpb24oZSl7dShmdW5jdGlvbigpe2MoXCJpbnZva2VNaW5pUHJvZ3JhbUFQSVwiLHtuYW1lOlwicG9zdE1lc3NhZ2VcIixhcmc6ZS5kYXRhfHx7fX0sZSl9KX0sZ2V0RW52OmZ1bmN0aW9uKGUpe3UoZnVuY3Rpb24oKXtlKHttaW5pcHJvZ3JhbTpcIm1pbmlwcm9ncmFtXCI9PT1vLl9fd3hqc19lbnZpcm9ubWVudH0pfSl9fX0sTD0xLEI9e307cmV0dXJuIHQuYWRkRXZlbnRMaXN0ZW5lcihcImVycm9yXCIsZnVuY3Rpb24oZSl7aWYoIXkpe3ZhciBuPWUudGFyZ2V0LGk9bi50YWdOYW1lLHQ9bi5zcmM7aWYoKFwiSU1HXCI9PWl8fFwiVklERU9cIj09aXx8XCJBVURJT1wiPT1pfHxcIlNPVVJDRVwiPT1pKSYmLTEhPXQuaW5kZXhPZihcInd4bG9jYWxyZXNvdXJjZTovL1wiKSl7ZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcFByb3BhZ2F0aW9uKCk7dmFyIG89bltcInd4LWlkXCJdO2lmKG98fChvPUwrKyxuW1wid3gtaWRcIl09byksQltvXSlyZXR1cm47QltvXT0hMCx3eC5yZWFkeShmdW5jdGlvbigpe3d4LmdldExvY2FsSW1nRGF0YSh7bG9jYWxJZDp0LHN1Y2Nlc3M6ZnVuY3Rpb24oZSl7bi5zcmM9ZS5sb2NhbERhdGF9fSl9KX19fSwhMCksdC5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLGZ1bmN0aW9uKGUpe2lmKCF5KXt2YXIgbj1lLnRhcmdldCxpPW4udGFnTmFtZTtpZihuLnNyYyxcIklNR1wiPT1pfHxcIlZJREVPXCI9PWl8fFwiQVVESU9cIj09aXx8XCJTT1VSQ0VcIj09aSl7dmFyIHQ9bltcInd4LWlkXCJdO3QmJihCW3RdPSExKX19fSwhMCksZSYmKG8ud3g9by5qV2VpeGluPUMpLEN9dmFyIE99KTsiLCJpbXBvcnQgcmVxdWVzdCBmcm9tICdAL3V0aWxzL3JlcXVlc3QnXHJcblxyXG4vLyDnva7pobYg5Y+W5raI572u6aG2XHJcbmV4cG9ydCBmdW5jdGlvbiBhcnRpY2xldG9wKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2NpcmNsZS9hcnRpY2xldG9wJyxcclxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG4vLyDliKDpmaTotLTlrZBcclxuZXhwb3J0IGZ1bmN0aW9uIGFydGljbGVkZWwoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvY2lyY2xlL2FydGljbGVkZWwnLFxyXG5cdFx0bWV0aG9kOiAncG9zdCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIOaWh+eroOivpuaDhVxyXG5leHBvcnQgZnVuY3Rpb24gZGV0YWlscyhkYXRhLGlkKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9hcnRpY2xlL2RldGFpbHMvJytpZCxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbi8v5aSE55CG5paH56ug6K+m5oOF6aG1XHJcbmV4cG9ydCBmdW5jdGlvbiBkZWNvbnN0cnVjdEFydGljbGUoZGF0YSkge1xyXG5cdGlmIChkYXRhKSB7XHJcblx0XHRkYXRhID0gZGF0YS5yZXBsYWNlKC88aW1nL2csICc8aW1nIHN0eWxlPVwid2lkdGg6IDEwMCUgIWltcG9ydGFudDtoZWlnaHQ6YXV0b1wiJykucmVwbGFjZShcclxuXHRcdFx0LzxwPlxcUyo8aW1nL2csICc8cCBzdHlsZT1cImxpbmUtaGVpZ2h0OiAwO1wiPjxpbWcnKTtcclxuXHR9XHJcblx0cmV0dXJuIGRhdGE7XHJcbn1cclxuIiwiaW1wb3J0IHJlcXVlc3QgZnJvbSAnQC91dGlscy9yZXF1ZXN0J1xyXG5cclxuLy8g55m75b2VXHJcbmV4cG9ydCBmdW5jdGlvbiBsb2dpbihkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9sb2dpbicsXHJcblx0XHRtZXRob2Q6ICdwb3N0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG4vLyDms6jlhoxcclxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL3JlZ2lzdGVyJyxcclxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcbi8vIOmqjOivgeeggVxyXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5KGRhdGEpIHtcclxuXHQvLyB0eXBlPXJlZ2lzdGVy5Li65rOo5YaMXHJcblx0Ly8gdHlwZT1sb2dpbuS4uueZu+W9lVxyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvcmVnaXN0ZXIvdmVyaWZ5JyxcclxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG4vLyDojrflj5bnlKjmiLfkv6Hmga9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJJbmZvKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL3VzZXJpbmZvJyxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIOefreS/oeeZu+W9lVxyXG5leHBvcnQgZnVuY3Rpb24gbG9naW5Nb2JpbGUoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvbG9naW4vbW9iaWxlJyxcclxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG5cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pQ29weShjb250ZW50KSB7XHJcblx0LyoqXHJcblx0ICog5bCP56iL5bqP56uvIOWSjCBhcHDnq6/nmoTlpI3liLbpgLvovpFcclxuXHQgKi9cclxuXHJcblx0dW5pLnNldENsaXBib2FyZERhdGEoe1xyXG5cdFx0ZGF0YTogY29udGVudCxcclxuXHRcdHN1Y2Nlc3M6IGZ1bmN0aW9uKCkge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnc3VjY2VzcycpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZVxyXG5cdFx0fVxyXG5cdH0pO1xyXG5cclxuXHRcclxuXHQvKipcclxuXHQgKiBINeerr+eahOWkjeWItumAu+i+kVxyXG5cdCAqL1xyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG59XHJcbiIsImltcG9ydCBtZXNzYWdlIGZyb20gJy4vbWVzc2FnZS5qcyc7XHJcbi8vIOWumuS5iSB0eXBlIOexu+WeizrlvLnlh7rnsbvlnovvvJp0b3AvYm90dG9tL2NlbnRlclxyXG5jb25zdCBjb25maWcgPSB7XHJcblx0Ly8g6aG26YOo5by55Ye6XHJcblx0dG9wOid0b3AnLFxyXG5cdC8vIOW6lemDqOW8ueWHulxyXG5cdGJvdHRvbTonYm90dG9tJyxcclxuXHQvLyDlsYXkuK3lvLnlh7pcclxuXHRjZW50ZXI6J2NlbnRlcicsXHJcblx0Ly8g5raI5oGv5o+Q56S6XHJcblx0bWVzc2FnZTondG9wJyxcclxuXHQvLyDlr7nor53moYZcclxuXHRkaWFsb2c6J2NlbnRlcicsXHJcblx0Ly8g5YiG5LqrXHJcblx0c2hhcmU6J2JvdHRvbScsXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IHtcclxuXHRkYXRhKCl7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRjb25maWc6Y29uZmlnXHJcblx0XHR9XHJcblx0fSxcclxuXHRtaXhpbnM6IFttZXNzYWdlXSxcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCB7XHJcblx0Y3JlYXRlZCgpIHtcclxuXHRcdGlmICh0aGlzLnR5cGUgPT09ICdtZXNzYWdlJykge1xyXG5cdFx0XHQvLyDkuI3mmL7npLrpga7nvalcclxuXHRcdFx0dGhpcy5tYXNrU2hvdyA9IGZhbHNlIFxyXG5cdFx0XHQvLyDojrflj5blrZDnu4Tku7blr7nosaFcclxuXHRcdFx0dGhpcy5jaGlsZHJlbk1zZyA9IG51bGxcclxuXHRcdH1cclxuXHR9LFxyXG5cdG1ldGhvZHM6IHtcclxuXHRcdGN1c3RvbU9wZW4oKSB7XHJcblx0XHRcdGlmICh0aGlzLmNoaWxkcmVuTXNnKSB7XHJcblx0XHRcdFx0dGhpcy5jaGlsZHJlbk1zZy5vcGVuKClcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdGN1c3RvbUNsb3NlKCkge1xyXG5cdFx0XHRpZiAodGhpcy5jaGlsZHJlbk1zZykge1xyXG5cdFx0XHRcdHRoaXMuY2hpbGRyZW5Nc2cuY2xvc2UoKVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsIi8qKlxyXG4gKiBodG1sIOino+aekOWZqFxyXG4gKiBAdHV0b3JpYWwgaHR0cHM6Ly9naXRodWIuY29tL2ppbi15dWZlbmcvUGFyc2VyXHJcbiAqIEB2ZXJzaW9uIDIwMjAwNzI4XHJcbiAqIEBhdXRob3IgSmluWXVmZW5nXHJcbiAqIEBsaXN0ZW5zIE1JVFxyXG4gKi9cclxuY29uc3QgY2ZnID0gcmVxdWlyZSgnLi9jb25maWcuanMnKSxcclxuXHRibGFua0NoYXIgPSBjZmcuYmxhbmtDaGFyLFxyXG5cdENzc0hhbmRsZXIgPSByZXF1aXJlKCcuL0Nzc0hhbmRsZXIuanMnKSxcclxuXHR3aW5kb3dXaWR0aCA9IHVuaS5nZXRTeXN0ZW1JbmZvU3luYygpLndpbmRvd1dpZHRoO1xyXG52YXIgZW1vamk7XHJcblxyXG5mdW5jdGlvbiBNcEh0bWxQYXJzZXIoZGF0YSwgb3B0aW9ucyA9IHt9KSB7XHJcblx0dGhpcy5hdHRycyA9IHt9O1xyXG5cdHRoaXMuQ3NzSGFuZGxlciA9IG5ldyBDc3NIYW5kbGVyKG9wdGlvbnMudGFnU3R5bGUsIHdpbmRvd1dpZHRoKTtcclxuXHR0aGlzLmRhdGEgPSBkYXRhO1xyXG5cdHRoaXMuZG9tYWluID0gb3B0aW9ucy5kb21haW47XHJcblx0dGhpcy5ET00gPSBbXTtcclxuXHR0aGlzLmkgPSB0aGlzLnN0YXJ0ID0gdGhpcy5hdWRpb051bSA9IHRoaXMuaW1nTnVtID0gdGhpcy52aWRlb051bSA9IDA7XHJcblx0b3B0aW9ucy5wcm90ID0gKHRoaXMuZG9tYWluIHx8ICcnKS5pbmNsdWRlcygnOi8vJykgPyB0aGlzLmRvbWFpbi5zcGxpdCgnOi8vJylbMF0gOiAnaHR0cCc7XHJcblx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcclxuXHR0aGlzLnN0YXRlID0gdGhpcy5UZXh0O1xyXG5cdHRoaXMuU1RBQ0sgPSBbXTtcclxuXHQvLyDlt6Xlhbflh73mlbBcclxuXHR0aGlzLmJ1YmJsZSA9ICgpID0+IHtcclxuXHRcdGZvciAodmFyIGkgPSB0aGlzLlNUQUNLLmxlbmd0aCwgaXRlbTsgaXRlbSA9IHRoaXMuU1RBQ0tbLS1pXTspIHtcclxuXHRcdFx0aWYgKGNmZy5yaWNoT25seVRhZ3NbaXRlbS5uYW1lXSkge1xyXG5cdFx0XHRcdGlmIChpdGVtLm5hbWUgPT0gJ3RhYmxlJyAmJiAhT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwoaXRlbSwgJ2MnKSkgaXRlbS5jID0gMTtcclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHRcdH1cclxuXHRcdFx0aXRlbS5jID0gMTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHR0aGlzLmRlY29kZSA9ICh2YWwsIGFtcCkgPT4ge1xyXG5cdFx0dmFyIGkgPSAtMSxcclxuXHRcdFx0aiwgZW47XHJcblx0XHR3aGlsZSAoMSkge1xyXG5cdFx0XHRpZiAoKGkgPSB2YWwuaW5kZXhPZignJicsIGkgKyAxKSkgPT0gLTEpIGJyZWFrO1xyXG5cdFx0XHRpZiAoKGogPSB2YWwuaW5kZXhPZignOycsIGkgKyAyKSkgPT0gLTEpIGJyZWFrO1xyXG5cdFx0XHRpZiAodmFsW2kgKyAxXSA9PSAnIycpIHtcclxuXHRcdFx0XHRlbiA9IHBhcnNlSW50KCh2YWxbaSArIDJdID09ICd4JyA/ICcwJyA6ICcnKSArIHZhbC5zdWJzdHJpbmcoaSArIDIsIGopKTtcclxuXHRcdFx0XHRpZiAoIWlzTmFOKGVuKSkgdmFsID0gdmFsLnN1YnN0cigwLCBpKSArIFN0cmluZy5mcm9tQ2hhckNvZGUoZW4pICsgdmFsLnN1YnN0cihqICsgMSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0ZW4gPSB2YWwuc3Vic3RyaW5nKGkgKyAxLCBqKTtcclxuXHRcdFx0XHRpZiAoY2ZnLmVudGl0aWVzW2VuXSB8fCBlbiA9PSBhbXApXHJcblx0XHRcdFx0XHR2YWwgPSB2YWwuc3Vic3RyKDAsIGkpICsgKGNmZy5lbnRpdGllc1tlbl0gfHwgJyYnKSArIHZhbC5zdWJzdHIoaiArIDEpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdmFsO1xyXG5cdH1cclxuXHR0aGlzLmdldFVybCA9IHVybCA9PiB7XHJcblx0XHRpZiAodXJsWzBdID09ICcvJykge1xyXG5cdFx0XHRpZiAodXJsWzFdID09ICcvJykgdXJsID0gdGhpcy5vcHRpb25zLnByb3QgKyAnOicgKyB1cmw7XHJcblx0XHRcdGVsc2UgaWYgKHRoaXMuZG9tYWluKSB1cmwgPSB0aGlzLmRvbWFpbiArIHVybDtcclxuXHRcdH0gZWxzZSBpZiAodGhpcy5kb21haW4gJiYgdXJsLmluZGV4T2YoJ2RhdGE6JykgIT0gMCAmJiAhdXJsLmluY2x1ZGVzKCc6Ly8nKSlcclxuXHRcdFx0dXJsID0gdGhpcy5kb21haW4gKyAnLycgKyB1cmw7XHJcblx0XHRyZXR1cm4gdXJsO1xyXG5cdH1cclxuXHR0aGlzLmlzQ2xvc2UgPSAoKSA9PiB0aGlzLmRhdGFbdGhpcy5pXSA9PSAnPicgfHwgKHRoaXMuZGF0YVt0aGlzLmldID09ICcvJyAmJiB0aGlzLmRhdGFbdGhpcy5pICsgMV0gPT0gJz4nKTtcclxuXHR0aGlzLnNlY3Rpb24gPSAoKSA9PiB0aGlzLmRhdGEuc3Vic3RyaW5nKHRoaXMuc3RhcnQsIHRoaXMuaSk7XHJcblx0dGhpcy5wYXJlbnQgPSAoKSA9PiB0aGlzLlNUQUNLW3RoaXMuU1RBQ0subGVuZ3RoIC0gMV07XHJcblx0dGhpcy5zaWJsaW5ncyA9ICgpID0+IHRoaXMuU1RBQ0subGVuZ3RoID8gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbiA6IHRoaXMuRE9NO1xyXG59XHJcbk1wSHRtbFBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbigpIHtcclxuXHRpZiAoZW1vamkpIHRoaXMuZGF0YSA9IGVtb2ppLnBhcnNlRW1vamkodGhpcy5kYXRhKTtcclxuXHRmb3IgKHZhciBjOyBjID0gdGhpcy5kYXRhW3RoaXMuaV07IHRoaXMuaSsrKVxyXG5cdFx0dGhpcy5zdGF0ZShjKTtcclxuXHRpZiAodGhpcy5zdGF0ZSA9PSB0aGlzLlRleHQpIHRoaXMuc2V0VGV4dCgpO1xyXG5cdHdoaWxlICh0aGlzLlNUQUNLLmxlbmd0aCkgdGhpcy5wb3BOb2RlKHRoaXMuU1RBQ0sucG9wKCkpO1xyXG5cdHJldHVybiB0aGlzLkRPTTtcclxufVxyXG4vLyDorr7nva7lsZ7mgKdcclxuTXBIdG1sUGFyc2VyLnByb3RvdHlwZS5zZXRBdHRyID0gZnVuY3Rpb24oKSB7XHJcblx0dmFyIG5hbWUgPSB0aGlzLmF0dHJOYW1lLnRvTG93ZXJDYXNlKCksXHJcblx0XHR2YWwgPSB0aGlzLmF0dHJWYWw7XHJcblx0aWYgKGNmZy5ib29sQXR0cnNbbmFtZV0pIHRoaXMuYXR0cnNbbmFtZV0gPSAnVCc7XHJcblx0ZWxzZSBpZiAodmFsKSB7XHJcblx0XHRpZiAobmFtZSA9PSAnc3JjJyB8fCAobmFtZSA9PSAnZGF0YS1zcmMnICYmICF0aGlzLmF0dHJzLnNyYykpIHRoaXMuYXR0cnMuc3JjID0gdGhpcy5nZXRVcmwodGhpcy5kZWNvZGUodmFsLCAnYW1wJykpO1xyXG5cdFx0ZWxzZSBpZiAobmFtZSA9PSAnaHJlZicgfHwgbmFtZSA9PSAnc3R5bGUnKSB0aGlzLmF0dHJzW25hbWVdID0gdGhpcy5kZWNvZGUodmFsLCAnYW1wJyk7XHJcblx0XHRlbHNlIGlmIChuYW1lLnN1YnN0cigwLCA1KSAhPSAnZGF0YS0nKSB0aGlzLmF0dHJzW25hbWVdID0gdmFsO1xyXG5cdH1cclxuXHR0aGlzLmF0dHJWYWwgPSAnJztcclxuXHR3aGlsZSAoYmxhbmtDaGFyW3RoaXMuZGF0YVt0aGlzLmldXSkgdGhpcy5pKys7XHJcblx0aWYgKHRoaXMuaXNDbG9zZSgpKSB0aGlzLnNldE5vZGUoKTtcclxuXHRlbHNlIHtcclxuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLmk7XHJcblx0XHR0aGlzLnN0YXRlID0gdGhpcy5BdHRyTmFtZTtcclxuXHR9XHJcbn1cclxuLy8g6K6+572u5paH5pys6IqC54K5XHJcbk1wSHRtbFBhcnNlci5wcm90b3R5cGUuc2V0VGV4dCA9IGZ1bmN0aW9uKCkge1xyXG5cdHZhciBiYWNrLCB0ZXh0ID0gdGhpcy5zZWN0aW9uKCk7XHJcblx0aWYgKCF0ZXh0KSByZXR1cm47XHJcblx0dGV4dCA9IChjZmcub25UZXh0ICYmIGNmZy5vblRleHQodGV4dCwgKCkgPT4gYmFjayA9IHRydWUpKSB8fCB0ZXh0O1xyXG5cdGlmIChiYWNrKSB7XHJcblx0XHR0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc3Vic3RyKDAsIHRoaXMuc3RhcnQpICsgdGV4dCArIHRoaXMuZGF0YS5zdWJzdHIodGhpcy5pKTtcclxuXHRcdGxldCBqID0gdGhpcy5zdGFydCArIHRleHQubGVuZ3RoO1xyXG5cdFx0Zm9yICh0aGlzLmkgPSB0aGlzLnN0YXJ0OyB0aGlzLmkgPCBqOyB0aGlzLmkrKykgdGhpcy5zdGF0ZSh0aGlzLmRhdGFbdGhpcy5pXSk7XHJcblx0XHRyZXR1cm47XHJcblx0fVxyXG5cdGlmICghdGhpcy5wcmUpIHtcclxuXHRcdC8vIOWQiOW5tuepuueZveesplxyXG5cdFx0dmFyIGZsYWcsIHRtcCA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaSA9IHRleHQubGVuZ3RoLCBjOyBjID0gdGV4dFstLWldOylcclxuXHRcdFx0aWYgKCFibGFua0NoYXJbY10pIHtcclxuXHRcdFx0XHR0bXAudW5zaGlmdChjKTtcclxuXHRcdFx0XHRpZiAoIWZsYWcpIGZsYWcgPSAxO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmICh0bXBbMF0gIT0gJyAnKSB0bXAudW5zaGlmdCgnICcpO1xyXG5cdFx0XHRcdGlmIChjID09ICdcXG4nICYmIGZsYWcgPT0gdm9pZCAwKSBmbGFnID0gMDtcclxuXHRcdFx0fVxyXG5cdFx0aWYgKGZsYWcgPT0gMCkgcmV0dXJuO1xyXG5cdFx0dGV4dCA9IHRtcC5qb2luKCcnKTtcclxuXHR9XHJcblx0dGhpcy5zaWJsaW5ncygpLnB1c2goe1xyXG5cdFx0dHlwZTogJ3RleHQnLFxyXG5cdFx0dGV4dDogdGhpcy5kZWNvZGUodGV4dClcclxuXHR9KTtcclxufVxyXG4vLyDorr7nva7lhYPntKDoioLngrlcclxuTXBIdG1sUGFyc2VyLnByb3RvdHlwZS5zZXROb2RlID0gZnVuY3Rpb24oKSB7XHJcblx0dmFyIG5vZGUgPSB7XHJcblx0XHRcdG5hbWU6IHRoaXMudGFnTmFtZS50b0xvd2VyQ2FzZSgpLFxyXG5cdFx0XHRhdHRyczogdGhpcy5hdHRyc1xyXG5cdFx0fSxcclxuXHRcdGNsb3NlID0gY2ZnLnNlbGZDbG9zaW5nVGFnc1tub2RlLm5hbWVdO1xyXG5cdGlmICh0aGlzLm9wdGlvbnMubm9kZXMubGVuZ3RoKSBub2RlLnR5cGUgPSAnbm9kZSc7XHJcblx0dGhpcy5hdHRycyA9IHt9O1xyXG5cdGlmICghY2ZnLmlnbm9yZVRhZ3Nbbm9kZS5uYW1lXSkge1xyXG5cdFx0Ly8g5aSE55CG5bGe5oCnXHJcblx0XHR2YXIgYXR0cnMgPSBub2RlLmF0dHJzLFxyXG5cdFx0XHRzdHlsZSA9IHRoaXMuQ3NzSGFuZGxlci5tYXRjaChub2RlLm5hbWUsIGF0dHJzLCBub2RlKSArIChhdHRycy5zdHlsZSB8fCAnJyksXHJcblx0XHRcdHN0eWxlT2JqID0ge307XHJcblx0XHRpZiAoYXR0cnMuaWQpIHtcclxuXHRcdFx0aWYgKHRoaXMub3B0aW9ucy5jb21wcmVzcyAmIDEpIGF0dHJzLmlkID0gdm9pZCAwO1xyXG5cdFx0XHRlbHNlIGlmICh0aGlzLm9wdGlvbnMudXNlQW5jaG9yKSB0aGlzLmJ1YmJsZSgpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCh0aGlzLm9wdGlvbnMuY29tcHJlc3MgJiAyKSAmJiBhdHRycy5jbGFzcykgYXR0cnMuY2xhc3MgPSB2b2lkIDA7XHJcblx0XHRzd2l0Y2ggKG5vZGUubmFtZSkge1xyXG5cdFx0XHRjYXNlICdhJzpcclxuXHRcdFx0Y2FzZSAnYWQnOlxyXG5cclxuXHJcblx0XHRcdFx0dGhpcy5idWJibGUoKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSAnZm9udCc6XHJcblx0XHRcdFx0aWYgKGF0dHJzLmNvbG9yKSB7XHJcblx0XHRcdFx0XHRzdHlsZU9ialsnY29sb3InXSA9IGF0dHJzLmNvbG9yO1xyXG5cdFx0XHRcdFx0YXR0cnMuY29sb3IgPSB2b2lkIDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChhdHRycy5mYWNlKSB7XHJcblx0XHRcdFx0XHRzdHlsZU9ialsnZm9udC1mYW1pbHknXSA9IGF0dHJzLmZhY2U7XHJcblx0XHRcdFx0XHRhdHRycy5mYWNlID0gdm9pZCAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoYXR0cnMuc2l6ZSkge1xyXG5cdFx0XHRcdFx0dmFyIHNpemUgPSBwYXJzZUludChhdHRycy5zaXplKTtcclxuXHRcdFx0XHRcdGlmIChzaXplIDwgMSkgc2l6ZSA9IDE7XHJcblx0XHRcdFx0XHRlbHNlIGlmIChzaXplID4gNykgc2l6ZSA9IDc7XHJcblx0XHRcdFx0XHR2YXIgbWFwID0gWyd4eC1zbWFsbCcsICd4LXNtYWxsJywgJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZScsICd4LWxhcmdlJywgJ3h4LWxhcmdlJ107XHJcblx0XHRcdFx0XHRzdHlsZU9ialsnZm9udC1zaXplJ10gPSBtYXBbc2l6ZSAtIDFdO1xyXG5cdFx0XHRcdFx0YXR0cnMuc2l6ZSA9IHZvaWQgMDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ2VtYmVkJzpcclxuXHJcblx0XHRcdFx0dmFyIHNyYyA9IG5vZGUuYXR0cnMuc3JjIHx8ICcnLFxyXG5cdFx0XHRcdFx0dHlwZSA9IG5vZGUuYXR0cnMudHlwZSB8fCAnJztcclxuXHRcdFx0XHRpZiAodHlwZS5pbmNsdWRlcygndmlkZW8nKSB8fCBzcmMuaW5jbHVkZXMoJy5tcDQnKSB8fCBzcmMuaW5jbHVkZXMoJy4zZ3AnKSB8fCBzcmMuaW5jbHVkZXMoJy5tM3U4JykpXHJcblx0XHRcdFx0XHRub2RlLm5hbWUgPSAndmlkZW8nO1xyXG5cdFx0XHRcdGVsc2UgaWYgKHR5cGUuaW5jbHVkZXMoJ2F1ZGlvJykgfHwgc3JjLmluY2x1ZGVzKCcubTRhJykgfHwgc3JjLmluY2x1ZGVzKCcud2F2JykgfHwgc3JjLmluY2x1ZGVzKCcubXAzJykgfHwgc3JjLmluY2x1ZGVzKFxyXG5cdFx0XHRcdFx0XHQnLmFhYycpKVxyXG5cdFx0XHRcdFx0bm9kZS5uYW1lID0gJ2F1ZGlvJztcclxuXHRcdFx0XHRlbHNlIGJyZWFrO1xyXG5cdFx0XHRcdGlmIChub2RlLmF0dHJzLmF1dG9zdGFydClcclxuXHRcdFx0XHRcdG5vZGUuYXR0cnMuYXV0b3BsYXkgPSAnVCc7XHJcblx0XHRcdFx0bm9kZS5hdHRycy5jb250cm9scyA9ICdUJztcclxuXHJcblxyXG5cclxuXHJcblxyXG5cdFx0XHRjYXNlICd2aWRlbyc6XHJcblx0XHRcdGNhc2UgJ2F1ZGlvJzpcclxuXHRcdFx0XHRpZiAoIWF0dHJzLmlkKSBhdHRycy5pZCA9IG5vZGUubmFtZSArICgrK3RoaXNbYCR7bm9kZS5uYW1lfU51bWBdKTtcclxuXHRcdFx0XHRlbHNlIHRoaXNbYCR7bm9kZS5uYW1lfU51bWBdKys7XHJcblx0XHRcdFx0aWYgKG5vZGUubmFtZSA9PSAndmlkZW8nKSB7XHJcblx0XHRcdFx0XHRpZiAodGhpcy52aWRlb051bSA+IDMpXHJcblx0XHRcdFx0XHRcdG5vZGUubGF6eUxvYWQgPSAxO1xyXG5cdFx0XHRcdFx0aWYgKGF0dHJzLndpZHRoKSB7XHJcblx0XHRcdFx0XHRcdHN0eWxlT2JqLndpZHRoID0gcGFyc2VGbG9hdChhdHRycy53aWR0aCkgKyAoYXR0cnMud2lkdGguaW5jbHVkZXMoJyUnKSA/ICclJyA6ICdweCcpO1xyXG5cdFx0XHRcdFx0XHRhdHRycy53aWR0aCA9IHZvaWQgMDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChhdHRycy5oZWlnaHQpIHtcclxuXHRcdFx0XHRcdFx0c3R5bGVPYmouaGVpZ2h0ID0gcGFyc2VGbG9hdChhdHRycy5oZWlnaHQpICsgKGF0dHJzLmhlaWdodC5pbmNsdWRlcygnJScpID8gJyUnIDogJ3B4Jyk7XHJcblx0XHRcdFx0XHRcdGF0dHJzLmhlaWdodCA9IHZvaWQgMDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0aWYgKCFhdHRycy5jb250cm9scyAmJiAhYXR0cnMuYXV0b3BsYXkpIGF0dHJzLmNvbnRyb2xzID0gJ1QnO1xyXG5cdFx0XHRcdGF0dHJzLnNvdXJjZSA9IFtdO1xyXG5cdFx0XHRcdGlmIChhdHRycy5zcmMpIHtcclxuXHRcdFx0XHRcdGF0dHJzLnNvdXJjZS5wdXNoKGF0dHJzLnNyYyk7XHJcblx0XHRcdFx0XHRhdHRycy5zcmMgPSB2b2lkIDA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMuYnViYmxlKCk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgJ3RkJzpcclxuXHRcdFx0Y2FzZSAndGgnOlxyXG5cdFx0XHRcdGlmIChhdHRycy5jb2xzcGFuIHx8IGF0dHJzLnJvd3NwYW4pXHJcblx0XHRcdFx0XHRmb3IgKHZhciBrID0gdGhpcy5TVEFDSy5sZW5ndGgsIGl0ZW07IGl0ZW0gPSB0aGlzLlNUQUNLWy0ta107KVxyXG5cdFx0XHRcdFx0XHRpZiAoaXRlbS5uYW1lID09ICd0YWJsZScpIHtcclxuXHRcdFx0XHRcdFx0XHRpdGVtLmMgPSB2b2lkIDA7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGlmIChhdHRycy5hbGlnbikge1xyXG5cdFx0XHRzdHlsZU9ialsndGV4dC1hbGlnbiddID0gYXR0cnMuYWxpZ247XHJcblx0XHRcdGF0dHJzLmFsaWduID0gdm9pZCAwO1xyXG5cdFx0fVxyXG5cdFx0Ly8g5Y6L57ypIHN0eWxlXHJcblx0XHR2YXIgc3R5bGVzID0gc3R5bGUuc3BsaXQoJzsnKTtcclxuXHRcdHN0eWxlID0gJyc7XHJcblx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gc3R5bGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcblx0XHRcdHZhciBpbmZvID0gc3R5bGVzW2ldLnNwbGl0KCc6Jyk7XHJcblx0XHRcdGlmIChpbmZvLmxlbmd0aCA8IDIpIGNvbnRpbnVlO1xyXG5cdFx0XHRsZXQga2V5ID0gaW5mb1swXS50cmltKCkudG9Mb3dlckNhc2UoKSxcclxuXHRcdFx0XHR2YWx1ZSA9IGluZm8uc2xpY2UoMSkuam9pbignOicpLnRyaW0oKTtcclxuXHRcdFx0aWYgKHZhbHVlWzBdID09ICctJyB8fCB2YWx1ZS5pbmNsdWRlcygnc2FmZScpKVxyXG5cdFx0XHRcdHN0eWxlICs9IGA7JHtrZXl9OiR7dmFsdWV9YDtcclxuXHRcdFx0ZWxzZSBpZiAoIXN0eWxlT2JqW2tleV0gfHwgdmFsdWUuaW5jbHVkZXMoJ2ltcG9ydCcpIHx8ICFzdHlsZU9ialtrZXldLmluY2x1ZGVzKCdpbXBvcnQnKSlcclxuXHRcdFx0XHRzdHlsZU9ialtrZXldID0gdmFsdWU7XHJcblx0XHR9XHJcblx0XHRpZiAobm9kZS5uYW1lID09ICdpbWcnKSB7XHJcblx0XHRcdGlmIChhdHRycy5zcmMgJiYgIWF0dHJzLmlnbm9yZSkge1xyXG5cdFx0XHRcdGlmICh0aGlzLmJ1YmJsZSgpKVxyXG5cdFx0XHRcdFx0YXR0cnMuaSA9ICh0aGlzLmltZ051bSsrKS50b1N0cmluZygpO1xyXG5cdFx0XHRcdGVsc2UgYXR0cnMuaWdub3JlID0gJ1QnO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChhdHRycy5pZ25vcmUpIHtcclxuXHRcdFx0XHRzdHlsZSArPSAnOy13ZWJraXQtdG91Y2gtY2FsbG91dDpub25lJztcclxuXHRcdFx0XHRzdHlsZU9ialsnbWF4LXdpZHRoJ10gPSAnMTAwJSc7XHJcblx0XHRcdH1cclxuXHRcdFx0dmFyIHdpZHRoO1xyXG5cdFx0XHRpZiAoc3R5bGVPYmoud2lkdGgpIHdpZHRoID0gc3R5bGVPYmoud2lkdGg7XHJcblx0XHRcdGVsc2UgaWYgKGF0dHJzLndpZHRoKSB3aWR0aCA9IGF0dHJzLndpZHRoLmluY2x1ZGVzKCclJykgPyBhdHRycy53aWR0aCA6IGF0dHJzLndpZHRoICsgJ3B4JztcclxuXHRcdFx0aWYgKHdpZHRoKSB7XHJcblx0XHRcdFx0c3R5bGVPYmoud2lkdGggPSB3aWR0aDtcclxuXHRcdFx0XHRhdHRycy53aWR0aCA9ICcxMDAlJztcclxuXHRcdFx0XHRpZiAocGFyc2VJbnQod2lkdGgpID4gd2luZG93V2lkdGgpIHtcclxuXHRcdFx0XHRcdHN0eWxlT2JqLmhlaWdodCA9ICcnO1xyXG5cdFx0XHRcdFx0aWYgKGF0dHJzLmhlaWdodCkgYXR0cnMuaGVpZ2h0ID0gdm9pZCAwO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoc3R5bGVPYmouaGVpZ2h0KSB7XHJcblx0XHRcdFx0YXR0cnMuaGVpZ2h0ID0gc3R5bGVPYmouaGVpZ2h0O1xyXG5cdFx0XHRcdHN0eWxlT2JqLmhlaWdodCA9ICcnO1xyXG5cdFx0XHR9IGVsc2UgaWYgKGF0dHJzLmhlaWdodCAmJiAhYXR0cnMuaGVpZ2h0LmluY2x1ZGVzKCclJykpXHJcblx0XHRcdFx0YXR0cnMuaGVpZ2h0ICs9ICdweCc7XHJcblx0XHR9XHJcblx0XHRmb3IgKHZhciBrZXkgaW4gc3R5bGVPYmopIHtcclxuXHRcdFx0dmFyIHZhbHVlID0gc3R5bGVPYmpba2V5XTtcclxuXHRcdFx0aWYgKCF2YWx1ZSkgY29udGludWU7XHJcblx0XHRcdGlmIChrZXkuaW5jbHVkZXMoJ2ZsZXgnKSB8fCBrZXkgPT0gJ29yZGVyJyB8fCBrZXkgPT0gJ3NlbGYtYWxpZ24nKSBub2RlLmMgPSAxO1xyXG5cdFx0XHQvLyDloavlhYXpk77mjqVcclxuXHRcdFx0aWYgKHZhbHVlLmluY2x1ZGVzKCd1cmwnKSkge1xyXG5cdFx0XHRcdHZhciBqID0gdmFsdWUuaW5kZXhPZignKCcpO1xyXG5cdFx0XHRcdGlmIChqKysgIT0gLTEpIHtcclxuXHRcdFx0XHRcdHdoaWxlICh2YWx1ZVtqXSA9PSAnXCInIHx8IHZhbHVlW2pdID09IFwiJ1wiIHx8IGJsYW5rQ2hhclt2YWx1ZVtqXV0pIGorKztcclxuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWUuc3Vic3RyKDAsIGopICsgdGhpcy5nZXRVcmwodmFsdWUuc3Vic3RyKGopKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0Ly8g6L2s5o2iIHJweFxyXG5cdFx0XHRlbHNlIGlmICh2YWx1ZS5pbmNsdWRlcygncnB4JykpXHJcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bMC05Ll0rXFxzKnJweC9nLCAkID0+IHBhcnNlRmxvYXQoJCkgKiB3aW5kb3dXaWR0aCAvIDc1MCArICdweCcpO1xyXG5cdFx0XHRlbHNlIGlmIChrZXkgPT0gJ3doaXRlLXNwYWNlJyAmJiB2YWx1ZS5pbmNsdWRlcygncHJlJykgJiYgIWNsb3NlKVxyXG5cdFx0XHRcdHRoaXMucHJlID0gbm9kZS5wcmUgPSB0cnVlO1xyXG5cdFx0XHRzdHlsZSArPSBgOyR7a2V5fToke3ZhbHVlfWA7XHJcblx0XHR9XHJcblx0XHRzdHlsZSA9IHN0eWxlLnN1YnN0cigxKTtcclxuXHRcdGlmIChzdHlsZSkgYXR0cnMuc3R5bGUgPSBzdHlsZTtcclxuXHRcdGlmICghY2xvc2UpIHtcclxuXHRcdFx0bm9kZS5jaGlsZHJlbiA9IFtdO1xyXG5cdFx0XHRpZiAobm9kZS5uYW1lID09ICdwcmUnICYmIGNmZy5oaWdobGlnaHQpIHtcclxuXHRcdFx0XHR0aGlzLnJlbW92ZShub2RlKTtcclxuXHRcdFx0XHR0aGlzLnByZSA9IG5vZGUucHJlID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLnNpYmxpbmdzKCkucHVzaChub2RlKTtcclxuXHRcdFx0dGhpcy5TVEFDSy5wdXNoKG5vZGUpO1xyXG5cdFx0fSBlbHNlIGlmICghY2ZnLmZpbHRlciB8fCBjZmcuZmlsdGVyKG5vZGUsIHRoaXMpICE9IGZhbHNlKVxyXG5cdFx0XHR0aGlzLnNpYmxpbmdzKCkucHVzaChub2RlKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0aWYgKCFjbG9zZSkgdGhpcy5yZW1vdmUobm9kZSk7XHJcblx0XHRlbHNlIGlmIChub2RlLm5hbWUgPT0gJ3NvdXJjZScpIHtcclxuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50KCk7XHJcblx0XHRcdGlmIChwYXJlbnQgJiYgKHBhcmVudC5uYW1lID09ICd2aWRlbycgfHwgcGFyZW50Lm5hbWUgPT0gJ2F1ZGlvJykgJiYgbm9kZS5hdHRycy5zcmMpXHJcblx0XHRcdFx0cGFyZW50LmF0dHJzLnNvdXJjZS5wdXNoKG5vZGUuYXR0cnMuc3JjKTtcclxuXHRcdH0gZWxzZSBpZiAobm9kZS5uYW1lID09ICdiYXNlJyAmJiAhdGhpcy5kb21haW4pIHRoaXMuZG9tYWluID0gbm9kZS5hdHRycy5ocmVmO1xyXG5cdH1cclxuXHRpZiAodGhpcy5kYXRhW3RoaXMuaV0gPT0gJy8nKSB0aGlzLmkrKztcclxuXHR0aGlzLnN0YXJ0ID0gdGhpcy5pICsgMTtcclxuXHR0aGlzLnN0YXRlID0gdGhpcy5UZXh0O1xyXG59XHJcbi8vIOenu+mZpOagh+etvlxyXG5NcEh0bWxQYXJzZXIucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuXHR2YXIgbmFtZSA9IG5vZGUubmFtZSxcclxuXHRcdGogPSB0aGlzLmk7XHJcblx0Ly8g5aSE55CGIHN2Z1xyXG5cdHZhciBoYW5kbGVTdmcgPSAoKSA9PiB7XHJcblx0XHR2YXIgc3JjID0gdGhpcy5kYXRhLnN1YnN0cmluZyhqLCB0aGlzLmkgKyAxKTtcclxuXHRcdGlmICghbm9kZS5hdHRycy54bWxucykgc3JjID0gJyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCInICsgc3JjO1xyXG5cdFx0dmFyIGkgPSBqO1xyXG5cdFx0d2hpbGUgKHRoaXMuZGF0YVtqXSAhPSAnPCcpIGotLTtcclxuXHRcdHNyYyA9IHRoaXMuZGF0YS5zdWJzdHJpbmcoaiwgaSkucmVwbGFjZShcInZpZXdib3hcIiwgXCJ2aWV3Qm94XCIpICsgc3JjO1xyXG5cdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50KCk7XHJcblx0XHRpZiAobm9kZS5hdHRycy53aWR0aCA9PSAnMTAwJScgJiYgcGFyZW50ICYmIChwYXJlbnQuYXR0cnMuc3R5bGUgfHwgJycpLmluY2x1ZGVzKCdpbmxpbmUnKSlcclxuXHRcdFx0cGFyZW50LmF0dHJzLnN0eWxlID0gJ3dpZHRoOjMwMHB4O21heC13aWR0aDoxMDAlOycgKyBwYXJlbnQuYXR0cnMuc3R5bGU7XHJcblx0XHR0aGlzLnNpYmxpbmdzKCkucHVzaCh7XHJcblx0XHRcdG5hbWU6ICdpbWcnLFxyXG5cdFx0XHRhdHRyczoge1xyXG5cdFx0XHRcdHNyYzogJ2RhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCcgKyBzcmMucmVwbGFjZSgvIy9nLCAnJTIzJyksXHJcblx0XHRcdFx0c3R5bGU6ICgvdmVydGljYWxbXjtdKy8uZXhlYyhub2RlLmF0dHJzLnN0eWxlKSB8fCBbXSkuc2hpZnQoKSxcclxuXHRcdFx0XHRpZ25vcmU6ICdUJ1xyXG5cdFx0XHR9XHJcblx0XHR9KVxyXG5cdH1cclxuXHRpZiAobm9kZS5uYW1lID09ICdzdmcnICYmIHRoaXMuZGF0YVtqXSA9PSAnLycpIHJldHVybiBoYW5kbGVTdmcodGhpcy5pKyspO1xyXG5cdHdoaWxlICgxKSB7XHJcblx0XHRpZiAoKHRoaXMuaSA9IHRoaXMuZGF0YS5pbmRleE9mKCc8LycsIHRoaXMuaSArIDEpKSA9PSAtMSkge1xyXG5cdFx0XHRpZiAobmFtZSA9PSAncHJlJyB8fCBuYW1lID09ICdzdmcnKSB0aGlzLmkgPSBqO1xyXG5cdFx0XHRlbHNlIHRoaXMuaSA9IHRoaXMuZGF0YS5sZW5ndGg7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuc3RhcnQgPSAodGhpcy5pICs9IDIpO1xyXG5cdFx0d2hpbGUgKCFibGFua0NoYXJbdGhpcy5kYXRhW3RoaXMuaV1dICYmICF0aGlzLmlzQ2xvc2UoKSkgdGhpcy5pKys7XHJcblx0XHRpZiAodGhpcy5zZWN0aW9uKCkudG9Mb3dlckNhc2UoKSA9PSBuYW1lKSB7XHJcblx0XHRcdC8vIOS7o+eggeWdl+mrmOS6rlxyXG5cdFx0XHRpZiAobmFtZSA9PSAncHJlJykge1xyXG5cdFx0XHRcdHRoaXMuZGF0YSA9IHRoaXMuZGF0YS5zdWJzdHIoMCwgaiArIDEpICsgY2ZnLmhpZ2hsaWdodCh0aGlzLmRhdGEuc3Vic3RyaW5nKGogKyAxLCB0aGlzLmkgLSA1KSwgbm9kZS5hdHRycykgKyB0aGlzLmRhdGFcclxuXHRcdFx0XHRcdC5zdWJzdHIodGhpcy5pIC0gNSk7XHJcblx0XHRcdFx0cmV0dXJuIHRoaXMuaSA9IGo7XHJcblx0XHRcdH0gZWxzZSBpZiAobmFtZSA9PSAnc3R5bGUnKVxyXG5cdFx0XHRcdHRoaXMuQ3NzSGFuZGxlci5nZXRTdHlsZSh0aGlzLmRhdGEuc3Vic3RyaW5nKGogKyAxLCB0aGlzLmkgLSA3KSk7XHJcblx0XHRcdGVsc2UgaWYgKG5hbWUgPT0gJ3RpdGxlJylcclxuXHRcdFx0XHR0aGlzLkRPTS50aXRsZSA9IHRoaXMuZGF0YS5zdWJzdHJpbmcoaiArIDEsIHRoaXMuaSAtIDcpO1xyXG5cdFx0XHRpZiAoKHRoaXMuaSA9IHRoaXMuZGF0YS5pbmRleE9mKCc+JywgdGhpcy5pKSkgPT0gLTEpIHRoaXMuaSA9IHRoaXMuZGF0YS5sZW5ndGg7XHJcblx0XHRcdGlmIChuYW1lID09ICdzdmcnKSBoYW5kbGVTdmcoKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4vLyDoioLngrnlh7rmoIjlpITnkIZcclxuTXBIdG1sUGFyc2VyLnByb3RvdHlwZS5wb3BOb2RlID0gZnVuY3Rpb24obm9kZSkge1xyXG5cdC8vIOepuueZveespuWkhOeQhlxyXG5cdGlmIChub2RlLnByZSkge1xyXG5cdFx0bm9kZS5wcmUgPSB0aGlzLnByZSA9IHZvaWQgMDtcclxuXHRcdGZvciAobGV0IGkgPSB0aGlzLlNUQUNLLmxlbmd0aDsgaS0tOylcclxuXHRcdFx0aWYgKHRoaXMuU1RBQ0tbaV0ucHJlKVxyXG5cdFx0XHRcdHRoaXMucHJlID0gdHJ1ZTtcclxuXHR9XHJcblx0dmFyIHNpYmxpbmdzID0gdGhpcy5zaWJsaW5ncygpLFxyXG5cdFx0bGVuID0gc2libGluZ3MubGVuZ3RoLFxyXG5cdFx0Y2hpbGRzID0gbm9kZS5jaGlsZHJlbjtcclxuXHRpZiAobm9kZS5uYW1lID09ICdoZWFkJyB8fCAoY2ZnLmZpbHRlciAmJiBjZmcuZmlsdGVyKG5vZGUsIHRoaXMpID09IGZhbHNlKSlcclxuXHRcdHJldHVybiBzaWJsaW5ncy5wb3AoKTtcclxuXHR2YXIgYXR0cnMgPSBub2RlLmF0dHJzO1xyXG5cdC8vIOabv+aNouS4gOS6m+agh+etvuWQjVxyXG5cdGlmIChjZmcuYmxvY2tUYWdzW25vZGUubmFtZV0pIG5vZGUubmFtZSA9ICdkaXYnO1xyXG5cdGVsc2UgaWYgKCFjZmcudHJ1c3RUYWdzW25vZGUubmFtZV0pIG5vZGUubmFtZSA9ICdzcGFuJztcclxuXHQvLyDlpITnkIbliJfooahcclxuXHRpZiAobm9kZS5jICYmIChub2RlLm5hbWUgPT0gJ3VsJyB8fCBub2RlLm5hbWUgPT0gJ29sJykpIHtcclxuXHRcdGlmICgobm9kZS5hdHRycy5zdHlsZSB8fCAnJykuaW5jbHVkZXMoJ2xpc3Qtc3R5bGU6bm9uZScpKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwLCBjaGlsZDsgY2hpbGQgPSBjaGlsZHNbaSsrXTspXHJcblx0XHRcdFx0aWYgKGNoaWxkLm5hbWUgPT0gJ2xpJylcclxuXHRcdFx0XHRcdGNoaWxkLm5hbWUgPSAnZGl2JztcclxuXHRcdH0gZWxzZSBpZiAobm9kZS5uYW1lID09ICd1bCcpIHtcclxuXHRcdFx0dmFyIGZsb29yID0gMTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IHRoaXMuU1RBQ0subGVuZ3RoOyBpLS07KVxyXG5cdFx0XHRcdGlmICh0aGlzLlNUQUNLW2ldLm5hbWUgPT0gJ3VsJykgZmxvb3IrKztcclxuXHRcdFx0aWYgKGZsb29yICE9IDEpXHJcblx0XHRcdFx0Zm9yIChsZXQgaSA9IGNoaWxkcy5sZW5ndGg7IGktLTspXHJcblx0XHRcdFx0XHRjaGlsZHNbaV0uZmxvb3IgPSBmbG9vcjtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwLCBudW0gPSAxLCBjaGlsZDsgY2hpbGQgPSBjaGlsZHNbaSsrXTspXHJcblx0XHRcdFx0aWYgKGNoaWxkLm5hbWUgPT0gJ2xpJykge1xyXG5cdFx0XHRcdFx0Y2hpbGQudHlwZSA9ICdvbCc7XHJcblx0XHRcdFx0XHRjaGlsZC5udW0gPSAoKG51bSwgdHlwZSkgPT4ge1xyXG5cdFx0XHRcdFx0XHRpZiAodHlwZSA9PSAnYScpIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDk3ICsgKG51bSAtIDEpICUgMjYpO1xyXG5cdFx0XHRcdFx0XHRpZiAodHlwZSA9PSAnQScpIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDY1ICsgKG51bSAtIDEpICUgMjYpO1xyXG5cdFx0XHRcdFx0XHRpZiAodHlwZSA9PSAnaScgfHwgdHlwZSA9PSAnSScpIHtcclxuXHRcdFx0XHRcdFx0XHRudW0gPSAobnVtIC0gMSkgJSA5OSArIDE7XHJcblx0XHRcdFx0XHRcdFx0dmFyIG9uZSA9IFsnSScsICdJSScsICdJSUknLCAnSVYnLCAnVicsICdWSScsICdWSUknLCAnVklJSScsICdJWCddLFxyXG5cdFx0XHRcdFx0XHRcdFx0dGVuID0gWydYJywgJ1hYJywgJ1hYWCcsICdYTCcsICdMJywgJ0xYJywgJ0xYWCcsICdMWFhYJywgJ1hDJ10sXHJcblx0XHRcdFx0XHRcdFx0XHRyZXMgPSAodGVuW01hdGguZmxvb3IobnVtIC8gMTApIC0gMV0gfHwgJycpICsgKG9uZVtudW0gJSAxMCAtIDFdIHx8ICcnKTtcclxuXHRcdFx0XHRcdFx0XHRpZiAodHlwZSA9PSAnaScpIHJldHVybiByZXMudG9Mb3dlckNhc2UoKTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdHJldHVybiBudW07XHJcblx0XHRcdFx0XHR9KShudW0rKywgYXR0cnMudHlwZSkgKyAnLic7XHJcblx0XHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHQvLyDlpITnkIbooajmoLznmoTovrnmoYZcclxuXHRpZiAobm9kZS5uYW1lID09ICd0YWJsZScpIHtcclxuXHRcdHZhciBwYWRkaW5nID0gYXR0cnMuY2VsbHBhZGRpbmcsXHJcblx0XHRcdHNwYWNpbmcgPSBhdHRycy5jZWxsc3BhY2luZyxcclxuXHRcdFx0Ym9yZGVyID0gYXR0cnMuYm9yZGVyO1xyXG5cdFx0aWYgKG5vZGUuYykge1xyXG5cdFx0XHR0aGlzLmJ1YmJsZSgpO1xyXG5cdFx0XHRhdHRycy5zdHlsZSA9IChhdHRycy5zdHlsZSB8fCAnJykgKyAnO2Rpc3BsYXk6dGFibGUnO1xyXG5cdFx0XHRpZiAoIXBhZGRpbmcpIHBhZGRpbmcgPSAyO1xyXG5cdFx0XHRpZiAoIXNwYWNpbmcpIHNwYWNpbmcgPSAyO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGJvcmRlcikgYXR0cnMuc3R5bGUgPSBgYm9yZGVyOiR7Ym9yZGVyfXB4IHNvbGlkIGdyYXk7JHthdHRycy5zdHlsZSB8fCAnJ31gO1xyXG5cdFx0aWYgKHNwYWNpbmcpIGF0dHJzLnN0eWxlID0gYGJvcmRlci1zcGFjaW5nOiR7c3BhY2luZ31weDske2F0dHJzLnN0eWxlIHx8ICcnfWA7XHJcblx0XHRpZiAoYm9yZGVyIHx8IHBhZGRpbmcgfHwgbm9kZS5jKVxyXG5cdFx0XHQoZnVuY3Rpb24gZihucykge1xyXG5cdFx0XHRcdGZvciAodmFyIGkgPSAwLCBuOyBuID0gbnNbaV07IGkrKykge1xyXG5cdFx0XHRcdFx0aWYgKG4udHlwZSA9PSAndGV4dCcpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdFx0dmFyIHN0eWxlID0gbi5hdHRycy5zdHlsZSB8fCAnJztcclxuXHRcdFx0XHRcdGlmIChub2RlLmMgJiYgbi5uYW1lWzBdID09ICd0Jykge1xyXG5cdFx0XHRcdFx0XHRuLmMgPSAxO1xyXG5cdFx0XHRcdFx0XHRzdHlsZSArPSAnO2Rpc3BsYXk6dGFibGUtJyArIChuLm5hbWUgPT0gJ3RoJyB8fCBuLm5hbWUgPT0gJ3RkJyA/ICdjZWxsJyA6IChuLm5hbWUgPT0gJ3RyJyA/ICdyb3cnIDogJ3Jvdy1ncm91cCcpKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmIChuLm5hbWUgPT0gJ3RoJyB8fCBuLm5hbWUgPT0gJ3RkJykge1xyXG5cdFx0XHRcdFx0XHRpZiAoYm9yZGVyKSBzdHlsZSA9IGBib3JkZXI6JHtib3JkZXJ9cHggc29saWQgZ3JheTske3N0eWxlfWA7XHJcblx0XHRcdFx0XHRcdGlmIChwYWRkaW5nKSBzdHlsZSA9IGBwYWRkaW5nOiR7cGFkZGluZ31weDske3N0eWxlfWA7XHJcblx0XHRcdFx0XHR9IGVsc2UgZihuLmNoaWxkcmVuIHx8IFtdKTtcclxuXHRcdFx0XHRcdGlmIChzdHlsZSkgbi5hdHRycy5zdHlsZSA9IHN0eWxlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSkoY2hpbGRzKVxyXG5cdFx0aWYgKHRoaXMub3B0aW9ucy5hdXRvc2Nyb2xsKSB7XHJcblx0XHRcdHZhciB0YWJsZSA9IE9iamVjdC5hc3NpZ24oe30sIG5vZGUpO1xyXG5cdFx0XHRub2RlLm5hbWUgPSAnZGl2JztcclxuXHRcdFx0bm9kZS5hdHRycyA9IHtcclxuXHRcdFx0XHRzdHlsZTogJ292ZXJmbG93OnNjcm9sbCdcclxuXHRcdFx0fVxyXG5cdFx0XHRub2RlLmNoaWxkcmVuID0gW3RhYmxlXTtcclxuXHRcdH1cclxuXHR9XHJcblx0dGhpcy5Dc3NIYW5kbGVyLnBvcCAmJiB0aGlzLkNzc0hhbmRsZXIucG9wKG5vZGUpO1xyXG5cdC8vIOiHquWKqOWOi+e8qVxyXG5cdGlmIChub2RlLm5hbWUgPT0gJ2RpdicgJiYgIU9iamVjdC5rZXlzKGF0dHJzKS5sZW5ndGggJiYgY2hpbGRzLmxlbmd0aCA9PSAxICYmIGNoaWxkc1swXS5uYW1lID09ICdkaXYnKVxyXG5cdFx0c2libGluZ3NbbGVuIC0gMV0gPSBjaGlsZHNbMF07XHJcbn1cclxuLy8g54q25oCB5py6XHJcbk1wSHRtbFBhcnNlci5wcm90b3R5cGUuVGV4dCA9IGZ1bmN0aW9uKGMpIHtcclxuXHRpZiAoYyA9PSAnPCcpIHtcclxuXHRcdHZhciBuZXh0ID0gdGhpcy5kYXRhW3RoaXMuaSArIDFdLFxyXG5cdFx0XHRpc0xldHRlciA9IGMgPT4gKGMgPj0gJ2EnICYmIGMgPD0gJ3onKSB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpO1xyXG5cdFx0aWYgKGlzTGV0dGVyKG5leHQpKSB7XHJcblx0XHRcdHRoaXMuc2V0VGV4dCgpO1xyXG5cdFx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5pICsgMTtcclxuXHRcdFx0dGhpcy5zdGF0ZSA9IHRoaXMuVGFnTmFtZTtcclxuXHRcdH0gZWxzZSBpZiAobmV4dCA9PSAnLycpIHtcclxuXHRcdFx0dGhpcy5zZXRUZXh0KCk7XHJcblx0XHRcdGlmIChpc0xldHRlcih0aGlzLmRhdGFbKyt0aGlzLmkgKyAxXSkpIHtcclxuXHRcdFx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5pICsgMTtcclxuXHRcdFx0XHR0aGlzLnN0YXRlID0gdGhpcy5FbmRUYWc7XHJcblx0XHRcdH0gZWxzZSB0aGlzLkNvbW1lbnQoKTtcclxuXHRcdH0gZWxzZSBpZiAobmV4dCA9PSAnIScgfHwgbmV4dCA9PSAnPycpIHtcclxuXHRcdFx0dGhpcy5zZXRUZXh0KCk7XHJcblx0XHRcdHRoaXMuQ29tbWVudCgpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5NcEh0bWxQYXJzZXIucHJvdG90eXBlLkNvbW1lbnQgPSBmdW5jdGlvbigpIHtcclxuXHR2YXIga2V5O1xyXG5cdGlmICh0aGlzLmRhdGEuc3Vic3RyaW5nKHRoaXMuaSArIDIsIHRoaXMuaSArIDQpID09ICctLScpIGtleSA9ICctLT4nO1xyXG5cdGVsc2UgaWYgKHRoaXMuZGF0YS5zdWJzdHJpbmcodGhpcy5pICsgMiwgdGhpcy5pICsgOSkgPT0gJ1tDREFUQVsnKSBrZXkgPSAnXV0+JztcclxuXHRlbHNlIGtleSA9ICc+JztcclxuXHRpZiAoKHRoaXMuaSA9IHRoaXMuZGF0YS5pbmRleE9mKGtleSwgdGhpcy5pICsgMikpID09IC0xKSB0aGlzLmkgPSB0aGlzLmRhdGEubGVuZ3RoO1xyXG5cdGVsc2UgdGhpcy5pICs9IGtleS5sZW5ndGggLSAxO1xyXG5cdHRoaXMuc3RhcnQgPSB0aGlzLmkgKyAxO1xyXG5cdHRoaXMuc3RhdGUgPSB0aGlzLlRleHQ7XHJcbn1cclxuTXBIdG1sUGFyc2VyLnByb3RvdHlwZS5UYWdOYW1lID0gZnVuY3Rpb24oYykge1xyXG5cdGlmIChibGFua0NoYXJbY10pIHtcclxuXHRcdHRoaXMudGFnTmFtZSA9IHRoaXMuc2VjdGlvbigpO1xyXG5cdFx0d2hpbGUgKGJsYW5rQ2hhclt0aGlzLmRhdGFbdGhpcy5pXV0pIHRoaXMuaSsrO1xyXG5cdFx0aWYgKHRoaXMuaXNDbG9zZSgpKSB0aGlzLnNldE5vZGUoKTtcclxuXHRcdGVsc2Uge1xyXG5cdFx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5pO1xyXG5cdFx0XHR0aGlzLnN0YXRlID0gdGhpcy5BdHRyTmFtZTtcclxuXHRcdH1cclxuXHR9IGVsc2UgaWYgKHRoaXMuaXNDbG9zZSgpKSB7XHJcblx0XHR0aGlzLnRhZ05hbWUgPSB0aGlzLnNlY3Rpb24oKTtcclxuXHRcdHRoaXMuc2V0Tm9kZSgpO1xyXG5cdH1cclxufVxyXG5NcEh0bWxQYXJzZXIucHJvdG90eXBlLkF0dHJOYW1lID0gZnVuY3Rpb24oYykge1xyXG5cdGlmIChjID09ICc9JyB8fCBibGFua0NoYXJbY10gfHwgdGhpcy5pc0Nsb3NlKCkpIHtcclxuXHRcdHRoaXMuYXR0ck5hbWUgPSB0aGlzLnNlY3Rpb24oKTtcclxuXHRcdGlmIChibGFua0NoYXJbY10pXHJcblx0XHRcdHdoaWxlIChibGFua0NoYXJbdGhpcy5kYXRhWysrdGhpcy5pXV0pO1xyXG5cdFx0aWYgKHRoaXMuZGF0YVt0aGlzLmldID09ICc9Jykge1xyXG5cdFx0XHR3aGlsZSAoYmxhbmtDaGFyW3RoaXMuZGF0YVsrK3RoaXMuaV1dKTtcclxuXHRcdFx0dGhpcy5zdGFydCA9IHRoaXMuaS0tO1xyXG5cdFx0XHR0aGlzLnN0YXRlID0gdGhpcy5BdHRyVmFsdWU7XHJcblx0XHR9IGVsc2UgdGhpcy5zZXRBdHRyKCk7XHJcblx0fVxyXG59XHJcbk1wSHRtbFBhcnNlci5wcm90b3R5cGUuQXR0clZhbHVlID0gZnVuY3Rpb24oYykge1xyXG5cdGlmIChjID09ICdcIicgfHwgYyA9PSBcIidcIikge1xyXG5cdFx0dGhpcy5zdGFydCsrO1xyXG5cdFx0aWYgKCh0aGlzLmkgPSB0aGlzLmRhdGEuaW5kZXhPZihjLCB0aGlzLmkgKyAxKSkgPT0gLTEpIHJldHVybiB0aGlzLmkgPSB0aGlzLmRhdGEubGVuZ3RoO1xyXG5cdFx0dGhpcy5hdHRyVmFsID0gdGhpcy5zZWN0aW9uKCk7XHJcblx0XHR0aGlzLmkrKztcclxuXHR9IGVsc2Uge1xyXG5cdFx0Zm9yICg7ICFibGFua0NoYXJbdGhpcy5kYXRhW3RoaXMuaV1dICYmICF0aGlzLmlzQ2xvc2UoKTsgdGhpcy5pKyspO1xyXG5cdFx0dGhpcy5hdHRyVmFsID0gdGhpcy5zZWN0aW9uKCk7XHJcblx0fVxyXG5cdHRoaXMuc2V0QXR0cigpO1xyXG59XHJcbk1wSHRtbFBhcnNlci5wcm90b3R5cGUuRW5kVGFnID0gZnVuY3Rpb24oYykge1xyXG5cdGlmIChibGFua0NoYXJbY10gfHwgYyA9PSAnPicgfHwgYyA9PSAnLycpIHtcclxuXHRcdHZhciBuYW1lID0gdGhpcy5zZWN0aW9uKCkudG9Mb3dlckNhc2UoKTtcclxuXHRcdGZvciAodmFyIGkgPSB0aGlzLlNUQUNLLmxlbmd0aDsgaS0tOylcclxuXHRcdFx0aWYgKHRoaXMuU1RBQ0tbaV0ubmFtZSA9PSBuYW1lKSBicmVhaztcclxuXHRcdGlmIChpICE9IC0xKSB7XHJcblx0XHRcdHZhciBub2RlO1xyXG5cdFx0XHR3aGlsZSAoKG5vZGUgPSB0aGlzLlNUQUNLLnBvcCgpKS5uYW1lICE9IG5hbWUpIHRoaXMucG9wTm9kZShub2RlKTtcclxuXHRcdFx0dGhpcy5wb3BOb2RlKG5vZGUpO1xyXG5cdFx0fSBlbHNlIGlmIChuYW1lID09ICdwJyB8fCBuYW1lID09ICdicicpXHJcblx0XHRcdHRoaXMuc2libGluZ3MoKS5wdXNoKHtcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdGF0dHJzOiB7fVxyXG5cdFx0XHR9KTtcclxuXHRcdHRoaXMuaSA9IHRoaXMuZGF0YS5pbmRleE9mKCc+JywgdGhpcy5pKTtcclxuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLmkgKyAxO1xyXG5cdFx0aWYgKHRoaXMuaSA9PSAtMSkgdGhpcy5pID0gdGhpcy5kYXRhLmxlbmd0aDtcclxuXHRcdGVsc2UgdGhpcy5zdGF0ZSA9IHRoaXMuVGV4dDtcclxuXHR9XHJcbn1cclxubW9kdWxlLmV4cG9ydHMgPSBNcEh0bWxQYXJzZXI7XHJcbiIsIi8qIOmFjee9ruaWh+S7tiAqL1xyXG52YXIgY2ZnID0ge1xyXG5cdC8vIOWHuumUmeWNoOS9jeWbvlxyXG5cdGVycm9ySW1nOiBudWxsLFxyXG5cdC8vIOi/h+a7pOWZqOWHveaVsFxyXG5cdGZpbHRlcjogbnVsbCxcclxuXHQvLyDku6PnoIHpq5jkuq7lh73mlbBcclxuXHRoaWdobGlnaHQ6IG51bGwsXHJcblx0Ly8g5paH5pys5aSE55CG5Ye95pWwXHJcblx0b25UZXh0OiBudWxsLFxyXG5cdC8vIOWunuS9k+e8lueggeWIl+ihqFxyXG5cdGVudGl0aWVzOiB7XHJcblx0XHRxdW90OiAnXCInLFxyXG5cdFx0YXBvczogXCInXCIsXHJcblx0XHRzZW1pOiAnOycsXHJcblx0XHRuYnNwOiAnXFx4QTAnLFxyXG5cdFx0ZW5zcDogJ1xcdTIwMDInLFxyXG5cdFx0ZW1zcDogJ1xcdTIwMDMnLFxyXG5cdFx0bmRhc2g6ICfigJMnLFxyXG5cdFx0bWRhc2g6ICfigJQnLFxyXG5cdFx0bWlkZG90OiAnwrcnLFxyXG5cdFx0bHNxdW86ICfigJgnLFxyXG5cdFx0cnNxdW86ICfigJknLFxyXG5cdFx0bGRxdW86ICfigJwnLFxyXG5cdFx0cmRxdW86ICfigJ0nLFxyXG5cdFx0YnVsbDogJ+KAoicsXHJcblx0XHRoZWxsaXA6ICfigKYnXHJcblx0fSxcclxuXHRibGFua0NoYXI6IG1ha2VNYXAoJyAsXFx4QTAsXFx0LFxccixcXG4sXFxmJyksXHJcblx0Ym9vbEF0dHJzOiBtYWtlTWFwKCdhbGxvd2Z1bGxzY3JlZW4sYXV0b3BsYXksYXV0b3N0YXJ0LGNvbnRyb2xzLGlnbm9yZSxsb29wLG11dGVkJyksXHJcblx0Ly8g5Z2X57qn5qCH562+77yM5bCG6KKr6L2s5Li6IGRpdlxyXG5cdGJsb2NrVGFnczogbWFrZU1hcCgnYWRkcmVzcyxhcnRpY2xlLGFzaWRlLGJvZHksY2FwdGlvbixjZW50ZXIsY2l0ZSxmb290ZXIsaGVhZGVyLGh0bWwsbmF2LHByZSxzZWN0aW9uJyksXHJcblx0Ly8g5bCG6KKr56e76Zmk55qE5qCH562+XHJcblx0aWdub3JlVGFnczogbWFrZU1hcCgnYXJlYSxiYXNlLGNhbnZhcyxmcmFtZSxpZnJhbWUsaW5wdXQsbGluayxtYXAsbWV0YSxwYXJhbSxzY3JpcHQsc291cmNlLHN0eWxlLHN2Zyx0ZXh0YXJlYSx0aXRsZSx0cmFjayx3YnInKSxcclxuXHQvLyDlj6rog73ooqsgcmljaC10ZXh0IOaYvuekuueahOagh+etvlxyXG5cdHJpY2hPbmx5VGFnczogbWFrZU1hcCgnYSxjb2xncm91cCxmaWVsZHNldCxsZWdlbmQsdGFibGUnKSxcclxuXHQvLyDoh6rpl63lkIjnmoTmoIfnrb5cclxuXHRzZWxmQ2xvc2luZ1RhZ3M6IG1ha2VNYXAoJ2FyZWEsYmFzZSxicixjb2wsY2lyY2xlLGVsbGlwc2UsZW1iZWQsZnJhbWUsaHIsaW1nLGlucHV0LGxpbmUsbGluayxtZXRhLHBhcmFtLHBhdGgscG9seWdvbixyZWN0LHNvdXJjZSx0cmFjayx1c2Usd2JyJyksXHJcblx0Ly8g5L+h5Lu755qE5qCH562+XHJcblx0dHJ1c3RUYWdzOiBtYWtlTWFwKCdhLGFiYnIsYWQsYXVkaW8sYixibG9ja3F1b3RlLGJyLGNvZGUsY29sLGNvbGdyb3VwLGRkLGRlbCxkbCxkdCxkaXYsZW0sZmllbGRzZXQsaDEsaDIsaDMsaDQsaDUsaDYsaHIsaSxpbWcsaW5zLGxhYmVsLGxlZ2VuZCxsaSxvbCxwLHEsc291cmNlLHNwYW4sc3Ryb25nLHN1YixzdXAsdGFibGUsdGJvZHksdGQsdGZvb3QsdGgsdGhlYWQsdHIsdGl0bGUsdWwsdmlkZW8nKSxcclxuXHQvLyDpu5jorqTnmoTmoIfnrb7moLflvI9cclxuXHR1c2VyQWdlbnRTdHlsZXM6IHtcclxuXHRcdGFkZHJlc3M6ICdmb250LXN0eWxlOml0YWxpYycsXHJcblx0XHRiaWc6ICdkaXNwbGF5OmlubGluZTtmb250LXNpemU6MS4yZW0nLFxyXG5cdFx0YmxvY2txdW90ZTogJ2JhY2tncm91bmQtY29sb3I6I2Y2ZjZmNjtib3JkZXItbGVmdDozcHggc29saWQgI2RiZGJkYjtjb2xvcjojNmM2YzZjO3BhZGRpbmc6NXB4IDAgNXB4IDEwcHgnLFxyXG5cdFx0Y2FwdGlvbjogJ2Rpc3BsYXk6dGFibGUtY2FwdGlvbjt0ZXh0LWFsaWduOmNlbnRlcicsXHJcblx0XHRjZW50ZXI6ICd0ZXh0LWFsaWduOmNlbnRlcicsXHJcblx0XHRjaXRlOiAnZm9udC1zdHlsZTppdGFsaWMnLFxyXG5cdFx0ZGQ6ICdtYXJnaW4tbGVmdDo0MHB4JyxcclxuXHRcdG1hcms6ICdiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdycsXHJcblx0XHRwcmU6ICdmb250LWZhbWlseTptb25vc3BhY2U7d2hpdGUtc3BhY2U6cHJlO292ZXJmbG93OnNjcm9sbCcsXHJcblx0XHRzOiAndGV4dC1kZWNvcmF0aW9uOmxpbmUtdGhyb3VnaCcsXHJcblx0XHRzbWFsbDogJ2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZTowLjhlbScsXHJcblx0XHR1OiAndGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSdcclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIG1ha2VNYXAoc3RyKSB7XHJcblx0dmFyIG1hcCA9IE9iamVjdC5jcmVhdGUobnVsbCksXHJcblx0XHRsaXN0ID0gc3RyLnNwbGl0KCcsJyk7XHJcblx0Zm9yICh2YXIgaSA9IGxpc3QubGVuZ3RoOyBpLS07KVxyXG5cdFx0bWFwW2xpc3RbaV1dID0gdHJ1ZTtcclxuXHRyZXR1cm4gbWFwO1xyXG59XHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gY2ZnO1xyXG4iLCJjb25zdCBjZmcgPSByZXF1aXJlKCcuL2NvbmZpZy5qcycpLFxyXG5cdGlzTGV0dGVyID0gYyA9PiAoYyA+PSAnYScgJiYgYyA8PSAneicpIHx8IChjID49ICdBJyAmJiBjIDw9ICdaJyk7XHJcblxyXG5mdW5jdGlvbiBDc3NIYW5kbGVyKHRhZ1N0eWxlKSB7XHJcblx0dmFyIHN0eWxlcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgY2ZnLnVzZXJBZ2VudFN0eWxlcyk7XHJcblx0Zm9yICh2YXIgaXRlbSBpbiB0YWdTdHlsZSlcclxuXHRcdHN0eWxlc1tpdGVtXSA9IChzdHlsZXNbaXRlbV0gPyBzdHlsZXNbaXRlbV0gKyAnOycgOiAnJykgKyB0YWdTdHlsZVtpdGVtXTtcclxuXHR0aGlzLnN0eWxlcyA9IHN0eWxlcztcclxufVxyXG5Dc3NIYW5kbGVyLnByb3RvdHlwZS5nZXRTdHlsZSA9IGZ1bmN0aW9uKGRhdGEpIHtcclxuXHR0aGlzLnN0eWxlcyA9IG5ldyBwYXJzZXIoZGF0YSwgdGhpcy5zdHlsZXMpLnBhcnNlKCk7XHJcbn1cclxuQ3NzSGFuZGxlci5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbihuYW1lLCBhdHRycykge1xyXG5cdHZhciB0bXAsIG1hdGNoZWQgPSAodG1wID0gdGhpcy5zdHlsZXNbbmFtZV0pID8gdG1wICsgJzsnIDogJyc7XHJcblx0aWYgKGF0dHJzLmNsYXNzKSB7XHJcblx0XHR2YXIgaXRlbXMgPSBhdHRycy5jbGFzcy5zcGxpdCgnICcpO1xyXG5cdFx0Zm9yICh2YXIgaSA9IDAsIGl0ZW07IGl0ZW0gPSBpdGVtc1tpXTsgaSsrKVxyXG5cdFx0XHRpZiAodG1wID0gdGhpcy5zdHlsZXNbJy4nICsgaXRlbV0pXHJcblx0XHRcdFx0bWF0Y2hlZCArPSB0bXAgKyAnOyc7XHJcblx0fVxyXG5cdGlmICh0bXAgPSB0aGlzLnN0eWxlc1snIycgKyBhdHRycy5pZF0pXHJcblx0XHRtYXRjaGVkICs9IHRtcCArICc7JztcclxuXHRyZXR1cm4gbWF0Y2hlZDtcclxufVxyXG5tb2R1bGUuZXhwb3J0cyA9IENzc0hhbmRsZXI7XHJcblxyXG5mdW5jdGlvbiBwYXJzZXIoZGF0YSwgaW5pdCkge1xyXG5cdHRoaXMuZGF0YSA9IGRhdGE7XHJcblx0dGhpcy5mbG9vciA9IDA7XHJcblx0dGhpcy5pID0gMDtcclxuXHR0aGlzLmxpc3QgPSBbXTtcclxuXHR0aGlzLnJlcyA9IGluaXQ7XHJcblx0dGhpcy5zdGF0ZSA9IHRoaXMuU3BhY2U7XHJcbn1cclxucGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uKCkge1xyXG5cdGZvciAodmFyIGM7IGMgPSB0aGlzLmRhdGFbdGhpcy5pXTsgdGhpcy5pKyspXHJcblx0XHR0aGlzLnN0YXRlKGMpO1xyXG5cdHJldHVybiB0aGlzLnJlcztcclxufVxyXG5wYXJzZXIucHJvdG90eXBlLnNlY3Rpb24gPSBmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcy5kYXRhLnN1YnN0cmluZyh0aGlzLnN0YXJ0LCB0aGlzLmkpO1xyXG59XHJcbi8vIOeKtuaAgeaculxyXG5wYXJzZXIucHJvdG90eXBlLlNwYWNlID0gZnVuY3Rpb24oYykge1xyXG5cdGlmIChjID09ICcuJyB8fCBjID09ICcjJyB8fCBpc0xldHRlcihjKSkge1xyXG5cdFx0dGhpcy5zdGFydCA9IHRoaXMuaTtcclxuXHRcdHRoaXMuc3RhdGUgPSB0aGlzLk5hbWU7XHJcblx0fSBlbHNlIGlmIChjID09ICcvJyAmJiB0aGlzLmRhdGFbdGhpcy5pICsgMV0gPT0gJyonKVxyXG5cdFx0dGhpcy5Db21tZW50KCk7XHJcblx0ZWxzZSBpZiAoIWNmZy5ibGFua0NoYXJbY10gJiYgYyAhPSAnOycpXHJcblx0XHR0aGlzLnN0YXRlID0gdGhpcy5JZ25vcmU7XHJcbn1cclxucGFyc2VyLnByb3RvdHlwZS5Db21tZW50ID0gZnVuY3Rpb24oKSB7XHJcblx0dGhpcy5pID0gdGhpcy5kYXRhLmluZGV4T2YoJyovJywgdGhpcy5pKSArIDE7XHJcblx0aWYgKCF0aGlzLmkpIHRoaXMuaSA9IHRoaXMuZGF0YS5sZW5ndGg7XHJcblx0dGhpcy5zdGF0ZSA9IHRoaXMuU3BhY2U7XHJcbn1cclxucGFyc2VyLnByb3RvdHlwZS5JZ25vcmUgPSBmdW5jdGlvbihjKSB7XHJcblx0aWYgKGMgPT0gJ3snKSB0aGlzLmZsb29yKys7XHJcblx0ZWxzZSBpZiAoYyA9PSAnfScgJiYgIS0tdGhpcy5mbG9vcikgdGhpcy5zdGF0ZSA9IHRoaXMuU3BhY2U7XHJcbn1cclxucGFyc2VyLnByb3RvdHlwZS5OYW1lID0gZnVuY3Rpb24oYykge1xyXG5cdGlmIChjZmcuYmxhbmtDaGFyW2NdKSB7XHJcblx0XHR0aGlzLmxpc3QucHVzaCh0aGlzLnNlY3Rpb24oKSk7XHJcblx0XHR0aGlzLnN0YXRlID0gdGhpcy5OYW1lU3BhY2U7XHJcblx0fSBlbHNlIGlmIChjID09ICd7Jykge1xyXG5cdFx0dGhpcy5saXN0LnB1c2godGhpcy5zZWN0aW9uKCkpO1xyXG5cdFx0dGhpcy5Db250ZW50KCk7XHJcblx0fSBlbHNlIGlmIChjID09ICcsJykge1xyXG5cdFx0dGhpcy5saXN0LnB1c2godGhpcy5zZWN0aW9uKCkpO1xyXG5cdFx0dGhpcy5Db21tYSgpO1xyXG5cdH0gZWxzZSBpZiAoIWlzTGV0dGVyKGMpICYmIChjIDwgJzAnIHx8IGMgPiAnOScpICYmIGMgIT0gJy0nICYmIGMgIT0gJ18nKVxyXG5cdFx0dGhpcy5zdGF0ZSA9IHRoaXMuSWdub3JlO1xyXG59XHJcbnBhcnNlci5wcm90b3R5cGUuTmFtZVNwYWNlID0gZnVuY3Rpb24oYykge1xyXG5cdGlmIChjID09ICd7JykgdGhpcy5Db250ZW50KCk7XHJcblx0ZWxzZSBpZiAoYyA9PSAnLCcpIHRoaXMuQ29tbWEoKTtcclxuXHRlbHNlIGlmICghY2ZnLmJsYW5rQ2hhcltjXSkgdGhpcy5zdGF0ZSA9IHRoaXMuSWdub3JlO1xyXG59XHJcbnBhcnNlci5wcm90b3R5cGUuQ29tbWEgPSBmdW5jdGlvbigpIHtcclxuXHR3aGlsZSAoY2ZnLmJsYW5rQ2hhclt0aGlzLmRhdGFbKyt0aGlzLmldXSk7XHJcblx0aWYgKHRoaXMuZGF0YVt0aGlzLmldID09ICd7JykgdGhpcy5Db250ZW50KCk7XHJcblx0ZWxzZSB7XHJcblx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5pLS07XHJcblx0XHR0aGlzLnN0YXRlID0gdGhpcy5OYW1lO1xyXG5cdH1cclxufVxyXG5wYXJzZXIucHJvdG90eXBlLkNvbnRlbnQgPSBmdW5jdGlvbigpIHtcclxuXHR0aGlzLnN0YXJ0ID0gKyt0aGlzLmk7XHJcblx0aWYgKCh0aGlzLmkgPSB0aGlzLmRhdGEuaW5kZXhPZignfScsIHRoaXMuaSkpID09IC0xKSB0aGlzLmkgPSB0aGlzLmRhdGEubGVuZ3RoO1xyXG5cdHZhciBjb250ZW50ID0gdGhpcy5zZWN0aW9uKCk7XHJcblx0Zm9yICh2YXIgaSA9IDAsIGl0ZW07IGl0ZW0gPSB0aGlzLmxpc3RbaSsrXTspXHJcblx0XHRpZiAodGhpcy5yZXNbaXRlbV0pIHRoaXMucmVzW2l0ZW1dICs9ICc7JyArIGNvbnRlbnQ7XHJcblx0XHRlbHNlIHRoaXMucmVzW2l0ZW1dID0gY29udGVudDtcclxuXHR0aGlzLmxpc3QgPSBbXTtcclxuXHR0aGlzLnN0YXRlID0gdGhpcy5TcGFjZTtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBbXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwi5YyX5Lqs5biCXCIsXHJcbiAgICBcImNpdHlcIjogW1xyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5YyX5Lqs5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Lic5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuilv+WfjuWMulwiLFxyXG4gICAgICAgICAgXCLltIfmlofljLpcIixcclxuICAgICAgICAgIFwi5a6j5q2m5Yy6XCIsXHJcbiAgICAgICAgICBcIuacnemYs+WMulwiLFxyXG4gICAgICAgICAgXCLkuLDlj7DljLpcIixcclxuICAgICAgICAgIFwi55+z5pmv5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIua1t+a3gOWMulwiLFxyXG4gICAgICAgICAgXCLpl6jlpLTmsp/ljLpcIixcclxuICAgICAgICAgIFwi5oi/5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIumAmuW3nuWMulwiLFxyXG4gICAgICAgICAgXCLpobrkuYnljLpcIixcclxuICAgICAgICAgIFwi5piM5bmz5Yy6XCIsXHJcbiAgICAgICAgICBcIuWkp+WFtOWMulwiLFxyXG4gICAgICAgICAgXCLlubPosLfljLpcIixcclxuICAgICAgICAgIFwi5oCA5p+U5Yy6XCIsXHJcbiAgICAgICAgICBcIuWvhuS6keWOv1wiLFxyXG4gICAgICAgICAgXCLlu7bluobljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwi5aSp5rSl5biCXCIsXHJcbiAgICBcImNpdHlcIjogW1xyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5aSp5rSl5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5ZKM5bmz5Yy6XCIsXHJcbiAgICAgICAgICBcIuays+S4nOWMulwiLFxyXG4gICAgICAgICAgXCLmsrPopb/ljLpcIixcclxuICAgICAgICAgIFwi5Y2X5byA5Yy6XCIsXHJcbiAgICAgICAgICBcIuays+WMl+WMulwiLFxyXG4gICAgICAgICAgXCLnuqLmoaXljLpcIixcclxuICAgICAgICAgIFwi5aGY5rK95Yy6XCIsXHJcbiAgICAgICAgICBcIuaxieayveWMulwiLFxyXG4gICAgICAgICAgXCLlpKfmuK/ljLpcIixcclxuICAgICAgICAgIFwi5Lic5Li95Yy6XCIsXHJcbiAgICAgICAgICBcIuilv+mdkuWMulwiLFxyXG4gICAgICAgICAgXCLmtKXljZfljLpcIixcclxuICAgICAgICAgIFwi5YyX6L6w5Yy6XCIsXHJcbiAgICAgICAgICBcIuatpua4heWMulwiLFxyXG4gICAgICAgICAgXCLlrp3lnbvljLpcIixcclxuICAgICAgICAgIFwi5a6B5rKz5Y6/XCIsXHJcbiAgICAgICAgICBcIumdmea1t+WOv1wiLFxyXG4gICAgICAgICAgXCLok58gIOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLmsrPljJfnnIFcIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLnn7PlrrbluoTluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLplb/lronljLpcIixcclxuICAgICAgICAgIFwi5qGl5Lic5Yy6XCIsXHJcbiAgICAgICAgICBcIuahpeilv+WMulwiLFxyXG4gICAgICAgICAgXCLmlrDljY7ljLpcIixcclxuICAgICAgICAgIFwi6YOKICDljLpcIixcclxuICAgICAgICAgIFwi5LqV6ZmJ55+/5Yy6XCIsXHJcbiAgICAgICAgICBcIuS6lemZieWOv1wiLFxyXG4gICAgICAgICAgXCLmraPlrprljr9cIixcclxuICAgICAgICAgIFwi5qC+5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuihjOWUkOWOv1wiLFxyXG4gICAgICAgICAgXCLngbXlr7/ljr9cIixcclxuICAgICAgICAgIFwi6auY6YKR5Y6/XCIsXHJcbiAgICAgICAgICBcIua3seazveWOv1wiLFxyXG4gICAgICAgICAgXCLotZ7nmofljr9cIixcclxuICAgICAgICAgIFwi5peg5p6B5Y6/XCIsXHJcbiAgICAgICAgICBcIuW5s+WxseWOv1wiLFxyXG4gICAgICAgICAgXCLlhYPmsI/ljr9cIixcclxuICAgICAgICAgIFwi6LW1ICDljr9cIixcclxuICAgICAgICAgIFwi6L6b6ZuG5biCXCIsXHJcbiAgICAgICAgICBcIuiXgVwiLFxyXG4gICAgICAgICAgXCLmmYvlt57luIJcIixcclxuICAgICAgICAgIFwi5paw5LmQ5biCXCIsXHJcbiAgICAgICAgICBcIum5v+azieW4glwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5ZSQ5bGx5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6Lev5Y2X5Yy6XCIsXHJcbiAgICAgICAgICBcIui3r+WMl+WMulwiLFxyXG4gICAgICAgICAgXCLlj6TlhrbljLpcIixcclxuICAgICAgICAgIFwi5byA5bmz5Yy6XCIsXHJcbiAgICAgICAgICBcIuaWsCAg5Yy6XCIsXHJcbiAgICAgICAgICBcIuS4sOa2puWOv1wiLFxyXG4gICAgICAgICAgXCLmu6YgIOWOv1wiLFxyXG4gICAgICAgICAgXCLmu6bljZfljr9cIixcclxuICAgICAgICAgIFwi5LmQ5Lqt5Y6/XCIsXHJcbiAgICAgICAgICBcIui/geilv+WOv1wiLFxyXG4gICAgICAgICAgXCLnjonnlLDljr9cIixcclxuICAgICAgICAgIFwi5ZSQ5rW35Y6/XCIsXHJcbiAgICAgICAgICBcIumBteWMluW4glwiLFxyXG4gICAgICAgICAgXCLkuLDljZfluIJcIixcclxuICAgICAgICAgIFwi6L+B5a6J5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLnp6bnmoflspvluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmtbfmuK/ljLpcIixcclxuICAgICAgICAgIFwi5bGx5rW35YWz5Yy6XCIsXHJcbiAgICAgICAgICBcIuWMl+aItOays+WMulwiLFxyXG4gICAgICAgICAgXCLpnZLpvpnmu6Hml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5piM6buO5Y6/XCIsXHJcbiAgICAgICAgICBcIuaKmuWugeWOv1wiLFxyXG4gICAgICAgICAgXCLljaLpvpnljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumCr+mDuOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumCr+WxseWMulwiLFxyXG4gICAgICAgICAgXCLkuJvlj7DljLpcIixcclxuICAgICAgICAgIFwi5aSN5YW05Yy6XCIsXHJcbiAgICAgICAgICBcIuWzsOWzsOefv+WMulwiLFxyXG4gICAgICAgICAgXCLpgq/pg7jljr9cIixcclxuICAgICAgICAgIFwi5Li05ryz5Y6/XCIsXHJcbiAgICAgICAgICBcIuaIkOWuieWOv1wiLFxyXG4gICAgICAgICAgXCLlpKflkI3ljr9cIixcclxuICAgICAgICAgIFwi5raJICDljr9cIixcclxuICAgICAgICAgIFwi56OBICDljr9cIixcclxuICAgICAgICAgIFwi6IKl5Lmh5Y6/XCIsXHJcbiAgICAgICAgICBcIuawuOW5tOWOv1wiLFxyXG4gICAgICAgICAgXCLpgrEgIOWOv1wiLFxyXG4gICAgICAgICAgXCLpuKHms73ljr9cIixcclxuICAgICAgICAgIFwi5bm/5bmz5Y6/XCIsXHJcbiAgICAgICAgICBcIummhumZtuWOv1wiLFxyXG4gICAgICAgICAgXCLprY8gIOWOv1wiLFxyXG4gICAgICAgICAgXCLmm7Llkajljr9cIixcclxuICAgICAgICAgIFwi5q2m5a6J5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpgqLlj7DluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmoaXkuJzljLpcIixcclxuICAgICAgICAgIFwi5qGl6KW/5Yy6XCIsXHJcbiAgICAgICAgICBcIumCouWPsOWOv1wiLFxyXG4gICAgICAgICAgXCLkuLTln47ljr9cIixcclxuICAgICAgICAgIFwi5YaF5LiY5Y6/XCIsXHJcbiAgICAgICAgICBcIuafj+S5oeWOv1wiLFxyXG4gICAgICAgICAgXCLpmoblsKfljr9cIixcclxuICAgICAgICAgIFwi5Lu7ICDljr9cIixcclxuICAgICAgICAgIFwi5Y2X5ZKM5Y6/XCIsXHJcbiAgICAgICAgICBcIuWugeaZi+WOv1wiLFxyXG4gICAgICAgICAgXCLlt6jpub/ljr9cIixcclxuICAgICAgICAgIFwi5paw5rKz5Y6/XCIsXHJcbiAgICAgICAgICBcIuW5v+Wul+WOv1wiLFxyXG4gICAgICAgICAgXCLlubPkuaHljr9cIixcclxuICAgICAgICAgIFwi5aiBICDljr9cIixcclxuICAgICAgICAgIFwi5riF5rKz5Y6/XCIsXHJcbiAgICAgICAgICBcIuS4tOilv+WOv1wiLFxyXG4gICAgICAgICAgXCLljZflrqvluIJcIixcclxuICAgICAgICAgIFwi5rKZ5rKz5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkv53lrprluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmlrDluILljLpcIixcclxuICAgICAgICAgIFwi5YyX5biC5Yy6XCIsXHJcbiAgICAgICAgICBcIuWNl+W4guWMulwiLFxyXG4gICAgICAgICAgXCLmu6Hln47ljr9cIixcclxuICAgICAgICAgIFwi5riF6IuR5Y6/XCIsXHJcbiAgICAgICAgICBcIua2nuawtOWOv1wiLFxyXG4gICAgICAgICAgXCLpmJzlubPljr9cIixcclxuICAgICAgICAgIFwi5b6Q5rC05Y6/XCIsXHJcbiAgICAgICAgICBcIuWumuWFtOWOv1wiLFxyXG4gICAgICAgICAgXCLllJAgIOWOv1wiLFxyXG4gICAgICAgICAgXCLpq5jpmLPljr9cIixcclxuICAgICAgICAgIFwi5a655Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIua2nua6kOWOv1wiLFxyXG4gICAgICAgICAgXCLmnJvpg73ljr9cIixcclxuICAgICAgICAgIFwi5a6J5paw5Y6/XCIsXHJcbiAgICAgICAgICBcIuaYkyAg5Y6/XCIsXHJcbiAgICAgICAgICBcIuabsumYs+WOv1wiLFxyXG4gICAgICAgICAgXCLooKEgIOWOv1wiLFxyXG4gICAgICAgICAgXCLpobrlubPljr9cIixcclxuICAgICAgICAgIFwi5Y2a6YeOXCIsXHJcbiAgICAgICAgICBcIumbhOWOv1wiLFxyXG4gICAgICAgICAgXCLmtr/lt57luIJcIixcclxuICAgICAgICAgIFwi5a6a5bee5biCXCIsXHJcbiAgICAgICAgICBcIuWuieWbveW4glwiLFxyXG4gICAgICAgICAgXCLpq5jnopHlupfluIJcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuW8oOWutuWPo1wiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuahpeS4nOWMulwiLFxyXG4gICAgICAgICAgXCLmoaXopb/ljLpcIixcclxuICAgICAgICAgIFwi5a6j5YyW5Yy6XCIsXHJcbiAgICAgICAgICBcIuS4i+iKseWbreWMulwiLFxyXG4gICAgICAgICAgXCLlrqPljJbljr9cIixcclxuICAgICAgICAgIFwi5byg5YyX5Y6/XCIsXHJcbiAgICAgICAgICBcIuW6t+S/neWOv1wiLFxyXG4gICAgICAgICAgXCLmsr3mupDljr9cIixcclxuICAgICAgICAgIFwi5bCa5LmJ5Y6/XCIsXHJcbiAgICAgICAgICBcIuiUmiAg5Y6/XCIsXHJcbiAgICAgICAgICBcIumYs+WOn+WOv1wiLFxyXG4gICAgICAgICAgXCLmgIDlronljr9cIixcclxuICAgICAgICAgIFwi5LiH5YWo5Y6/XCIsXHJcbiAgICAgICAgICBcIuaAgOadpeWOv1wiLFxyXG4gICAgICAgICAgXCLmtr/pub/ljr9cIixcclxuICAgICAgICAgIFwi6LWk5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuW0h+ekvOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5om/5b635biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Y+M5qGl5Yy6XCIsXHJcbiAgICAgICAgICBcIuWPjOa7puWMulwiLFxyXG4gICAgICAgICAgXCLpubDmiYvokKXlrZDnn7/ljLpcIixcclxuICAgICAgICAgIFwi5om/5b635Y6/XCIsXHJcbiAgICAgICAgICBcIuWFtOmahuWOv1wiLFxyXG4gICAgICAgICAgXCLlubPms4nljr9cIixcclxuICAgICAgICAgIFwi5rum5bmz5Y6/XCIsXHJcbiAgICAgICAgICBcIumahuWMluWOv1wiLFxyXG4gICAgICAgICAgXCLkuLDlroHmu6Hml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5a695Z+O5ruh5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuWbtOWcuua7oeaXj+iSmeWPpOaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5rKn5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5paw5Y2O5Yy6XCIsXHJcbiAgICAgICAgICBcIui/kOays+WMulwiLFxyXG4gICAgICAgICAgXCLmsqcgIOWOv1wiLFxyXG4gICAgICAgICAgXCLpnZIgIOWOv1wiLFxyXG4gICAgICAgICAgXCLkuJzlhYnljr9cIixcclxuICAgICAgICAgIFwi5rW35YW05Y6/XCIsXHJcbiAgICAgICAgICBcIuebkOWxseWOv1wiLFxyXG4gICAgICAgICAgXCLogoPlroHljr9cIixcclxuICAgICAgICAgIFwi5Y2X55qu5Y6/XCIsXHJcbiAgICAgICAgICBcIuWQtOahpeWOv1wiLFxyXG4gICAgICAgICAgXCLnjK4gIOWOv1wiLFxyXG4gICAgICAgICAgXCLlrZ/mnZHlm57ml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5rOK5aS05biCXCIsXHJcbiAgICAgICAgICBcIuS7u+S4mOW4glwiLFxyXG4gICAgICAgICAgXCLpu4TpqoXluIJcIixcclxuICAgICAgICAgIFwi5rKz6Ze05biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlu4rlnYrluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlronmrKHljLpcIixcclxuICAgICAgICAgIFwi5Zu65a6J5Y6/XCIsXHJcbiAgICAgICAgICBcIuawuOa4heWOv1wiLFxyXG4gICAgICAgICAgXCLpppnmsrPljr9cIixcclxuICAgICAgICAgIFwi5aSn5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuaWh+WuieWOv1wiLFxyXG4gICAgICAgICAgXCLlpKfljoLlm57ml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi6Zy45bee5biCXCIsXHJcbiAgICAgICAgICBcIuS4ieays+W4glwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6KGh5rC05biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5qGD5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuaeo+W8uuWOv1wiLFxyXG4gICAgICAgICAgXCLmrabpgpHljr9cIixcclxuICAgICAgICAgIFwi5q2m5by65Y6/XCIsXHJcbiAgICAgICAgICBcIumltumYs+WOv1wiLFxyXG4gICAgICAgICAgXCLlronlubPljr9cIixcclxuICAgICAgICAgIFwi5pWF5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuaZryAg5Y6/XCIsXHJcbiAgICAgICAgICBcIumYnOWfjuWOv1wiLFxyXG4gICAgICAgICAgXCLlhoDlt57luIJcIixcclxuICAgICAgICAgIFwi5rex5bee5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIuWxseilv+ecgVwiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWkquWOn+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWwj+W6l+WMulwiLFxyXG4gICAgICAgICAgXCLov47ms73ljLpcIixcclxuICAgICAgICAgIFwi5p2P6Iqx5bKt5Yy6XCIsXHJcbiAgICAgICAgICBcIuWwluiNieWdquWMulwiLFxyXG4gICAgICAgICAgXCLkuIfmn4/mnpfljLpcIixcclxuICAgICAgICAgIFwi5pmL5rqQ5Yy6XCIsXHJcbiAgICAgICAgICBcIua4heW+kOWOv1wiLFxyXG4gICAgICAgICAgXCLpmLPmm7Lljr9cIixcclxuICAgICAgICAgIFwi5aiE54Om5Y6/XCIsXHJcbiAgICAgICAgICBcIuWPpOS6pOW4glwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5aSn5ZCM5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Z+OICDljLpcIixcclxuICAgICAgICAgIFwi55+/ICDljLpcIixcclxuICAgICAgICAgIFwi5Y2X6YOK5Yy6XCIsXHJcbiAgICAgICAgICBcIuaWsOiNo+WMulwiLFxyXG4gICAgICAgICAgXCLpmLPpq5jljr9cIixcclxuICAgICAgICAgIFwi5aSp6ZWH5Y6/XCIsXHJcbiAgICAgICAgICBcIuW5v+eBteWOv1wiLFxyXG4gICAgICAgICAgXCLngbXkuJjljr9cIixcclxuICAgICAgICAgIFwi5rWR5rqQ5Y6/XCIsXHJcbiAgICAgICAgICBcIuW3puS6keWOv1wiLFxyXG4gICAgICAgICAgXCLlpKflkIzljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumYs+azieW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWfjiAg5Yy6XCIsXHJcbiAgICAgICAgICBcIuefvyAg5Yy6XCIsXHJcbiAgICAgICAgICBcIumDiiAg5Yy6XCIsXHJcbiAgICAgICAgICBcIuW5s+WumuWOv1wiLFxyXG4gICAgICAgICAgXCLnm4IgIOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6ZW/5rK75biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Z+OICDljLpcIixcclxuICAgICAgICAgIFwi6YOKICDljLpcIixcclxuICAgICAgICAgIFwi6ZW/5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuilhOWeo+WOv1wiLFxyXG4gICAgICAgICAgXCLlsa/nlZnljr9cIixcclxuICAgICAgICAgIFwi5bmz6aG65Y6/XCIsXHJcbiAgICAgICAgICBcIum7juWfjuWOv1wiLFxyXG4gICAgICAgICAgXCLlo7blhbPljr9cIixcclxuICAgICAgICAgIFwi6ZW/5a2Q5Y6/XCIsXHJcbiAgICAgICAgICBcIuatpuS5oeWOv1wiLFxyXG4gICAgICAgICAgXCLmsoEgIOWOv1wiLFxyXG4gICAgICAgICAgXCLmsoHmupDljr9cIixcclxuICAgICAgICAgIFwi5r2e5Z+O5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmmYvln47luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLln44gIOWMulwiLFxyXG4gICAgICAgICAgXCLmsoHmsLTljr9cIixcclxuICAgICAgICAgIFwi6Ziz5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIumZteW3neWOv1wiLFxyXG4gICAgICAgICAgXCLms73lt57ljr9cIixcclxuICAgICAgICAgIFwi6auY5bmz5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmnJTlt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmnJTln47ljLpcIixcclxuICAgICAgICAgIFwi5bmz6bKB5Yy6XCIsXHJcbiAgICAgICAgICBcIuWxsemYtOWOv1wiLFxyXG4gICAgICAgICAgXCLlupQgIOWOv1wiLFxyXG4gICAgICAgICAgXCLlj7Pnjonljr9cIixcclxuICAgICAgICAgIFwi5oCA5LuB5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlv7vlt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlv7vlupzljLpcIixcclxuICAgICAgICAgIFwi5Y6f5bmz5biCXCIsXHJcbiAgICAgICAgICBcIuWumuilhOWOv1wiLFxyXG4gICAgICAgICAgXCLkupTlj7Dljr9cIixcclxuICAgICAgICAgIFwi5LujICDljr9cIixcclxuICAgICAgICAgIFwi57mB5bOZ5Y6/XCIsXHJcbiAgICAgICAgICBcIuWugeatpuWOv1wiLFxyXG4gICAgICAgICAgXCLpnZnkuZDljr9cIixcclxuICAgICAgICAgIFwi56We5rGg5Y6/XCIsXHJcbiAgICAgICAgICBcIuS6lOWvqOWOv1wiLFxyXG4gICAgICAgICAgXCLlsqLlsprljr9cIixcclxuICAgICAgICAgIFwi5rKz5puy5Y6/XCIsXHJcbiAgICAgICAgICBcIuS/neW+t+WOv1wiLFxyXG4gICAgICAgICAgXCLlgY/lhbPljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWQleaigeW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuemu+efs+WMulwiLFxyXG4gICAgICAgICAgXCLlrZ3kuYnluIJcIixcclxuICAgICAgICAgIFwi5rG+6Ziz5biCXCIsXHJcbiAgICAgICAgICBcIuaWh+awtOWOv1wiLFxyXG4gICAgICAgICAgXCLkuqTln47ljr9cIixcclxuICAgICAgICAgIFwi5YW0ICDljr9cIixcclxuICAgICAgICAgIFwi5Li0ICDljr9cIixcclxuICAgICAgICAgIFwi5p+z5p6X5Y6/XCIsXHJcbiAgICAgICAgICBcIuefs+alvOWOv1wiLFxyXG4gICAgICAgICAgXCLlspogIOWOv1wiLFxyXG4gICAgICAgICAgXCLmlrnlsbHljr9cIixcclxuICAgICAgICAgIFwi5Lit6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuS6pOWPo+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5pmL5Lit5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5qaG5qyh5biCXCIsXHJcbiAgICAgICAgICBcIuS7i+S8keW4glwiLFxyXG4gICAgICAgICAgXCLmpobnpL7ljr9cIixcclxuICAgICAgICAgIFwi5bem5p2D5Y6/XCIsXHJcbiAgICAgICAgICBcIuWSjOmhuuWOv1wiLFxyXG4gICAgICAgICAgXCLmmJTpmLPljr9cIixcclxuICAgICAgICAgIFwi5a+/6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuWkquiwt+WOv1wiLFxyXG4gICAgICAgICAgXCLnpYEgIOWOv1wiLFxyXG4gICAgICAgICAgXCLlubPpgaXljr9cIixcclxuICAgICAgICAgIFwi54G155+z5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkuLTmsb7luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkuLTmsb7luIJcIixcclxuICAgICAgICAgIFwi5L6v6ams5biCXCIsXHJcbiAgICAgICAgICBcIumcjeW3nuW4glwiLFxyXG4gICAgICAgICAgXCLmm7LmsoPljr9cIixcclxuICAgICAgICAgIFwi57+85Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuilhOaxvuWOv1wiLFxyXG4gICAgICAgICAgXCLmtKrmtJ7ljr9cIixcclxuICAgICAgICAgIFwi5Y+kICDljr9cIixcclxuICAgICAgICAgIFwi5a6J5rO95Y6/XCIsXHJcbiAgICAgICAgICBcIua1ruWxseWOv1wiLFxyXG4gICAgICAgICAgXCLlkIkgIOWOv1wiLFxyXG4gICAgICAgICAgXCLkuaHlroHljr9cIixcclxuICAgICAgICAgIFwi6JKyICDljr9cIixcclxuICAgICAgICAgIFwi5aSn5a6B5Y6/XCIsXHJcbiAgICAgICAgICBcIuawuOWSjOWOv1wiLFxyXG4gICAgICAgICAgXCLpmrAgIOWOv1wiLFxyXG4gICAgICAgICAgXCLmsb7opb/ljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIui/kOWfjuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIui/kOWfjuW4glwiLFxyXG4gICAgICAgICAgXCLmsLjmtY7luIJcIixcclxuICAgICAgICAgIFwi5rKz5rSl5biCXCIsXHJcbiAgICAgICAgICBcIuiKruWfjuWOv1wiLFxyXG4gICAgICAgICAgXCLkuLTnjJfljr9cIixcclxuICAgICAgICAgIFwi5LiH6I2j5Y6/XCIsXHJcbiAgICAgICAgICBcIuaWsOe7m+WOv1wiLFxyXG4gICAgICAgICAgXCLnqLflsbHljr9cIixcclxuICAgICAgICAgIFwi6Ze75Zac5Y6/XCIsXHJcbiAgICAgICAgICBcIuWkjyAg5Y6/XCIsXHJcbiAgICAgICAgICBcIue7myAg5Y6/XCIsXHJcbiAgICAgICAgICBcIuW5s+mZhuWOv1wiLFxyXG4gICAgICAgICAgXCLlnqPmm7Lljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwi5YaF6JKZ5Y+kXCIsXHJcbiAgICBcImNpdHlcIjogW1xyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5ZG85ZKM5rWp54m55biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5paw5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuWbnuawkeWMulwiLFxyXG4gICAgICAgICAgXCLnjonms4nljLpcIixcclxuICAgICAgICAgIFwi6YOKICDljLpcIixcclxuICAgICAgICAgIFwi5Zyf6buY54m55bem5peXXCIsXHJcbiAgICAgICAgICBcIuaJmOWFi+aJmOWOv1wiLFxyXG4gICAgICAgICAgXCLlkozmnpfmoLzlsJTljr9cIixcclxuICAgICAgICAgIFwi5riF5rC05rKz5Y6/XCIsXHJcbiAgICAgICAgICBcIuatpuW3neWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5YyF5aS05biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Lic5rKz5Yy6XCIsXHJcbiAgICAgICAgICBcIuaYhumDveS8puWMulwiLFxyXG4gICAgICAgICAgXCLpnZLlsbHljLpcIixcclxuICAgICAgICAgIFwi55+z5ouQ55+/5Yy6XCIsXHJcbiAgICAgICAgICBcIueZveS6keefv+WMulwiLFxyXG4gICAgICAgICAgXCLpg4ogIOWMulwiLFxyXG4gICAgICAgICAgXCLlnJ/pu5jnibnlj7Pml5dcIixcclxuICAgICAgICAgIFwi5Zu66Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIui+vuWwlOe9leiMguaYjuWuieiBlOWQiOaXl1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5LmM5rW35biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5rW35YuD5rm+5Yy6XCIsXHJcbiAgICAgICAgICBcIua1t+WNl+WMulwiLFxyXG4gICAgICAgICAgXCLkuYzovr7ljLpcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIui1pOWzsOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIue6ouWxseWMulwiLFxyXG4gICAgICAgICAgXCLlhYPlrp3lsbHljLpcIixcclxuICAgICAgICAgIFwi5p2+5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIumYv+mygeenkeWwlOaygeaXl1wiLFxyXG4gICAgICAgICAgXCLlt7Tmnpflt6bml5dcIixcclxuICAgICAgICAgIFwi5be05p6X5Y+z5peXXCIsXHJcbiAgICAgICAgICBcIuael+ilv+WOv1wiLFxyXG4gICAgICAgICAgXCLlhYvku4DlhYvohb7ml5dcIixcclxuICAgICAgICAgIFwi57+B54mb54m55peXXCIsXHJcbiAgICAgICAgICBcIuWWgOWWh+aygeaXl1wiLFxyXG4gICAgICAgICAgXCLlroHln47ljr9cIixcclxuICAgICAgICAgIFwi5pWW5rGJ5peXXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlkbzkvKbotJ3lsJTluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmtbfmi4nlsJTluIJcIixcclxuICAgICAgICAgIFwi5ruh5rSy6YeM5biCXCIsXHJcbiAgICAgICAgICBcIuaJjuWFsOWxr+W4glwiLFxyXG4gICAgICAgICAgXCLniZnlhYvnn7PluIJcIixcclxuICAgICAgICAgIFwi5qC55rKz5biCXCIsXHJcbiAgICAgICAgICBcIumineWwlOWPpOe6s+W4glwiLFxyXG4gICAgICAgICAgXCLpmL/ojaPml5dcIixcclxuICAgICAgICAgIFwi6I6r5Yqb6L6+55Om6L6+5pah5bCU5peP6Ieq5rK75peXXCIsXHJcbiAgICAgICAgICBcIumEguS8puaYpeiHquayu+aXl1wiLFxyXG4gICAgICAgICAgXCLphILmuKnlhYvml4/oh6rmsrvml5dcIixcclxuICAgICAgICAgIFwi5paw5be05bCU6JmO5Y+z5peXXCIsXHJcbiAgICAgICAgICBcIuaWsOW3tOWwlOiZjuW3puaXl1wiLFxyXG4gICAgICAgICAgXCLpmYjlt7TlsJTomY7ml5dcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWFtOWuieebn1wiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuS5jOWFsOa1qeeJueW4glwiLFxyXG4gICAgICAgICAgXCLpmL/lsJTlsbHluIJcIixcclxuICAgICAgICAgIFwi56eR5bCU5rKB5Y+z57+85YmN5peXXCIsXHJcbiAgICAgICAgICBcIuenkeWwlOaygeWPs+e/vOS4reaXl1wiLFxyXG4gICAgICAgICAgXCLmiY7otYnnibnml5dcIixcclxuICAgICAgICAgIFwi56qB5rOJ5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpgJrovr3luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLnp5HlsJTmsoHljLpcIixcclxuICAgICAgICAgIFwi6ZyN5p6X6YOt5YuS5biCXCIsXHJcbiAgICAgICAgICBcIuenkeWwlOaygeW3pue/vOS4reaXl1wiLFxyXG4gICAgICAgICAgXCLnp5HlsJTmsoHlt6bnv7zlkI7ml5dcIixcclxuICAgICAgICAgIFwi5byA6bKB5Y6/XCIsXHJcbiAgICAgICAgICBcIuW6k+S8puaXl1wiLFxyXG4gICAgICAgICAgXCLlpYjmm7zml5dcIixcclxuICAgICAgICAgIFwi5omO6bKB54m55peXXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLplKHmnpfpg63li5Lnm59cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkuozov57mtannibnluIJcIixcclxuICAgICAgICAgIFwi6ZSh5p6X5rWp54m55biCXCIsXHJcbiAgICAgICAgICBcIumYv+W3tOWYjuaXl1wiLFxyXG4gICAgICAgICAgXCLoi4/lsLznibnlt6bml5dcIixcclxuICAgICAgICAgIFwi6IuP5bC854m55Y+z5peXXCIsXHJcbiAgICAgICAgICBcIuS4nOS5jOePoOephuaygeaXl1wiLFxyXG4gICAgICAgICAgXCLopb/kuYznj6DnqYbmsoHml5dcIixcclxuICAgICAgICAgIFwi5aSq5LuG5a+65peXXCIsXHJcbiAgICAgICAgICBcIumVtum7hOaXl1wiLFxyXG4gICAgICAgICAgXCLmraPplbbnmb3ml5dcIixcclxuICAgICAgICAgIFwi5q2j6JOd5peXXCIsXHJcbiAgICAgICAgICBcIuWkmuS8puWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5LmM5YWw5a+f5biD55ufXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6ZuG5a6B5biCXCIsXHJcbiAgICAgICAgICBcIuS4sOmVh+W4glwiLFxyXG4gICAgICAgICAgXCLljZPotYTljr9cIixcclxuICAgICAgICAgIFwi5YyW5b635Y6/XCIsXHJcbiAgICAgICAgICBcIuWVhumDveWOv1wiLFxyXG4gICAgICAgICAgXCLlhbTlkozljr9cIixcclxuICAgICAgICAgIFwi5YeJ5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuWvn+WTiOWwlOWPs+e/vOWJjeaXl1wiLFxyXG4gICAgICAgICAgXCLlr5/lk4jlsJTlj7Pnv7zkuK3ml5dcIixcclxuICAgICAgICAgIFwi5a+f5ZOI5bCU5Y+z57+85ZCO5peXXCIsXHJcbiAgICAgICAgICBcIuWbm+WtkOeOi+aXl1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5LyK5YWL5pit55ufXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Lic6IOc5biCXCIsXHJcbiAgICAgICAgICBcIui+vuaLieeJueaXl1wiLFxyXG4gICAgICAgICAgXCLlh4bmoLzlsJTml5dcIixcclxuICAgICAgICAgIFwi6YSC5omY5YWL5YmN5peXXCIsXHJcbiAgICAgICAgICBcIumEguaJmOWFi+aXl1wiLFxyXG4gICAgICAgICAgXCLmna3plKbml5dcIixcclxuICAgICAgICAgIFwi5LmM5a6h5peXXCIsXHJcbiAgICAgICAgICBcIuS8iumHkemcjea0m+aXl1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5be05b2m5reW5bCU55ufXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Li05rKz5biCXCIsXHJcbiAgICAgICAgICBcIuS6lOWOn+WOv1wiLFxyXG4gICAgICAgICAgXCLno7Tlj6Pljr9cIixcclxuICAgICAgICAgIFwi5LmM5ouJ54m55YmN5peXXCIsXHJcbiAgICAgICAgICBcIuS5jOaLieeJueS4reaXl1wiLFxyXG4gICAgICAgICAgXCLkuYzmi4nnibnlkI7ml5dcIixcclxuICAgICAgICAgIFwi5p2t6ZSm5ZCO5peXXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpmL/mi4nlloTnm59cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLpmL/mi4nlloTlt6bml5dcIixcclxuICAgICAgICAgIFwi6Zi/5ouJ5ZaE5Y+z5peXXCIsXHJcbiAgICAgICAgICBcIuminea1jue6s+aXl1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLovr3lroHnnIFcIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmsojpmLPluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmsojmsrPljLpcIixcclxuICAgICAgICAgIFwi55qH5aeR5Yy6XCIsXHJcbiAgICAgICAgICBcIuWSjOW5s+WMulwiLFxyXG4gICAgICAgICAgXCLlpKfkuJzljLpcIixcclxuICAgICAgICAgIFwi6ZOB6KW/5Yy6XCIsXHJcbiAgICAgICAgICBcIuiLj+WutuWxr+WMulwiLFxyXG4gICAgICAgICAgXCLkuJzpmbXljLpcIixcclxuICAgICAgICAgIFwi5LqO5rSq5Yy6XCIsXHJcbiAgICAgICAgICBcIuaWsOawkeW4glwiLFxyXG4gICAgICAgICAgXCLms5XlupPljr9cIixcclxuICAgICAgICAgIFwi6L695Lit5Y6/XCIsXHJcbiAgICAgICAgICBcIuW6t+W5s+WOv1wiLFxyXG4gICAgICAgICAgXCLmlrDln47lrZDljLpcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWkp+i/nuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuilv+Wyl+WMulwiLFxyXG4gICAgICAgICAgXCLkuK3lsbHljLpcIixcclxuICAgICAgICAgIFwi5rKZ5rKz5Y+j5Yy6XCIsXHJcbiAgICAgICAgICBcIueUmOS6leWtkOWMulwiLFxyXG4gICAgICAgICAgXCLml4Xpobrlj6PljLpcIixcclxuICAgICAgICAgIFwi6YeR5bee5Yy6XCIsXHJcbiAgICAgICAgICBcIueTpuaIv+W6l+W4glwiLFxyXG4gICAgICAgICAgXCLmma7lhbDlupfluIJcIixcclxuICAgICAgICAgIFwi5bqE5rKz5biCXCIsXHJcbiAgICAgICAgICBcIumVv+a1t+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6Z6N5bGx5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6ZOB5Lic5Yy6XCIsXHJcbiAgICAgICAgICBcIumTgeilv+WMulwiLFxyXG4gICAgICAgICAgXCLnq4vlsbHljLpcIixcclxuICAgICAgICAgIFwi5Y2D5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIua1t+WfjuW4glwiLFxyXG4gICAgICAgICAgXCLlj7Dlronljr9cIixcclxuICAgICAgICAgIFwi5bKr5bKp5ruh5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmiprpobrluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLpobrln47ljLpcIixcclxuICAgICAgICAgIFwi5paw5oqa5Yy6XCIsXHJcbiAgICAgICAgICBcIuS4nOa0suWMulwiLFxyXG4gICAgICAgICAgXCLmnJvoirHljLpcIixcclxuICAgICAgICAgIFwi5oqa6aG65Y6/XCIsXHJcbiAgICAgICAgICBcIua4heWOn+a7oeaXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLmlrDlrr7mu6Hml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuacrOa6quW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuW5s+WxseWMulwiLFxyXG4gICAgICAgICAgXCLmmI7lsbHljLpcIixcclxuICAgICAgICAgIFwi5rqq5rmW5Yy6XCIsXHJcbiAgICAgICAgICBcIuWNl+iKrOWMulwiLFxyXG4gICAgICAgICAgXCLmnKzmuqrmu6Hml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5qGT5LuB5ruh5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkuLnkuJzluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmjK/lhbTljLpcIixcclxuICAgICAgICAgIFwi5YWD5a6d5Yy6XCIsXHJcbiAgICAgICAgICBcIuaMr+WuieWMulwiLFxyXG4gICAgICAgICAgXCLkuJzmuK/luIJcIixcclxuICAgICAgICAgIFwi5Yek5Z+O5biCXCIsXHJcbiAgICAgICAgICBcIuWuveeUuOa7oeaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6ZSm5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5aSq5ZKM5Yy6XCIsXHJcbiAgICAgICAgICBcIuWPpOWhlOWMulwiLFxyXG4gICAgICAgICAgXCLlh4zmsrPljLpcIixcclxuICAgICAgICAgIFwi5YeM5rW35biCXCIsXHJcbiAgICAgICAgICBcIum7keWxseWOv1wiLFxyXG4gICAgICAgICAgXCLkuYnljr9cIixcclxuICAgICAgICAgIFwi5YyX5a6B5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLokKXlj6PluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLnq5nliY3ljLpcIixcclxuICAgICAgICAgIFwi6KW/5biC5Yy6XCIsXHJcbiAgICAgICAgICBcIumyhemxvOWciOWMulwiLFxyXG4gICAgICAgICAgXCLogIHovrnljLpcIixcclxuICAgICAgICAgIFwi5aSn55+z5qGl5biCXCIsXHJcbiAgICAgICAgICBcIuebluW3nuW4glwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6Zic5paw5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5rW35bee5Yy6XCIsXHJcbiAgICAgICAgICBcIuaWsOmCseWMulwiLFxyXG4gICAgICAgICAgXCLlpKrlubPljLpcIixcclxuICAgICAgICAgIFwi5riF5rKz6Zeo5Yy6XCIsXHJcbiAgICAgICAgICBcIue7huays+WMulwiLFxyXG4gICAgICAgICAgXCLlvbDmrabljr9cIixcclxuICAgICAgICAgIFwi6Zic5paw6JKZ5Y+k5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLovr3pmLPluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLnmb3loZTljLpcIixcclxuICAgICAgICAgIFwi5paH5Zyj5Yy6XCIsXHJcbiAgICAgICAgICBcIuWuj+S8n+WMulwiLFxyXG4gICAgICAgICAgXCLlpKrlrZDmsrPljLpcIixcclxuICAgICAgICAgIFwi5byT6ZW/5bKt5Yy6XCIsXHJcbiAgICAgICAgICBcIueBr+WhlOW4glwiLFxyXG4gICAgICAgICAgXCLovr3pmLPljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuebmOmUplwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWPjOWPsOWtkOWMulwiLFxyXG4gICAgICAgICAgXCLlhbTpmoblj7DljLpcIixcclxuICAgICAgICAgIFwi55uY5bGx5Y6/XCIsXHJcbiAgICAgICAgICBcIuWkp+a0vOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6ZOB5bKt5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6ZO25bee5Yy6XCIsXHJcbiAgICAgICAgICBcIua4heays+WMulwiLFxyXG4gICAgICAgICAgXCLosIPlhbXlsbHluIJcIixcclxuICAgICAgICAgIFwi5byA5Y6f5biCXCIsXHJcbiAgICAgICAgICBcIumTgeWyreWOv1wiLFxyXG4gICAgICAgICAgXCLmmIzlm77ljr9cIixcclxuICAgICAgICAgIFwi6KW/5Liw5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmnJ3pmLPluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlj4zloZTljLpcIixcclxuICAgICAgICAgIFwi6b6Z5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuWHjOa6kOW4glwiLFxyXG4gICAgICAgICAgXCLljJfnpajluIJcIixcclxuICAgICAgICAgIFwi5pyd6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuW7uuW5s+WOv1wiLFxyXG4gICAgICAgICAgXCLlloDllofmsoHlt6bnv7zokpnlj6Tml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuiRq+iKpuWym+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIum+mea4r+WMulwiLFxyXG4gICAgICAgICAgXCLljZfnpajljLpcIixcclxuICAgICAgICAgIFwi6L+e5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIuWFtOWfjuW4glwiLFxyXG4gICAgICAgICAgXCLnu6XkuK3ljr9cIixcclxuICAgICAgICAgIFwi5bu65piM5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIuWQieael+ecgVwiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumVv+aYpeW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuacnemYs+WMulwiLFxyXG4gICAgICAgICAgXCLlrr3ln47ljLpcIixcclxuICAgICAgICAgIFwi5LqM6YGT5Yy6XCIsXHJcbiAgICAgICAgICBcIuWNl+WFs+WMulwiLFxyXG4gICAgICAgICAgXCLnu7/lm63ljLpcIixcclxuICAgICAgICAgIFwi5Y+M6Ziz5Yy6XCIsXHJcbiAgICAgICAgICBcIuS5neWPsOW4glwiLFxyXG4gICAgICAgICAgXCLmpobmoJHluIJcIixcclxuICAgICAgICAgIFwi5b635oOg5biCXCIsXHJcbiAgICAgICAgICBcIuWGnOWuieWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5ZCJ5p6X5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6Ii56JCl5Yy6XCIsXHJcbiAgICAgICAgICBcIuaYjOmCkeWMulwiLFxyXG4gICAgICAgICAgXCLpvpnmva3ljLpcIixcclxuICAgICAgICAgIFwi5Liw5ruh5Yy6XCIsXHJcbiAgICAgICAgICBcIuiIkuWFsOW4glwiLFxyXG4gICAgICAgICAgXCLmoabnlLjluIJcIixcclxuICAgICAgICAgIFwi6Juf5rKz5biCXCIsXHJcbiAgICAgICAgICBcIuejkOefs+W4glwiLFxyXG4gICAgICAgICAgXCLmsLjlkInljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWbm+W5s1wiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumTgeilv+WMulwiLFxyXG4gICAgICAgICAgXCLpk4HkuJzljLpcIixcclxuICAgICAgICAgIFwi5YWs5Li75bKt5biCXCIsXHJcbiAgICAgICAgICBcIuWPjOi+veW4glwiLFxyXG4gICAgICAgICAgXCLmoqjmoJHljr9cIixcclxuICAgICAgICAgIFwi5LyK6YCa5ruh5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLovr3mupDluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLpvpnlsbHljLpcIixcclxuICAgICAgICAgIFwi6KW/5a6J5Yy6XCIsXHJcbiAgICAgICAgICBcIuS4nOi+veWOv1wiLFxyXG4gICAgICAgICAgXCLkuJzkuLDljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumAmuWMluW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuS4nOaYjOWMulwiLFxyXG4gICAgICAgICAgXCLkuozpgZPmsZ/ljLpcIixcclxuICAgICAgICAgIFwi5qKF5rKz5Y+j5biCXCIsXHJcbiAgICAgICAgICBcIumbhuWuieW4glwiLFxyXG4gICAgICAgICAgXCLpgJrljJbljr9cIixcclxuICAgICAgICAgIFwi6L6J5Y2X5Y6/XCIsXHJcbiAgICAgICAgICBcIuafs+ays+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi55m95bGx5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5YWr6YGT5rGf5Yy6XCIsXHJcbiAgICAgICAgICBcIuaxn+a6kOWMulwiLFxyXG4gICAgICAgICAgXCLkuLTmsZ/luIJcIixcclxuICAgICAgICAgIFwi6Z2W5a6H5Y6/XCIsXHJcbiAgICAgICAgICBcIuaKmuadvuWOv1wiLFxyXG4gICAgICAgICAgXCLplb/nmb3mnJ3pspzml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuadvuWOn+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWugeaxn+WMulwiLFxyXG4gICAgICAgICAgXCLkub7lronljr9cIixcclxuICAgICAgICAgIFwi6ZW/5bKt5Y6/XCIsXHJcbiAgICAgICAgICBcIuaJtuS9meWOv1wiLFxyXG4gICAgICAgICAgXCLliY3pg63lsJTnvZfmlq/okpnlj6Tml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIueZveWfjuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIua0ruWMl+WMulwiLFxyXG4gICAgICAgICAgXCLlpKflronluIJcIixcclxuICAgICAgICAgIFwi5rSu5Y2X5biCXCIsXHJcbiAgICAgICAgICBcIumVh+i1ieWOv1wiLFxyXG4gICAgICAgICAgXCLpgJrmpobljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuW7tui+ueacnemynOaXj+iHquayu+W3nlwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuW7tuWQieW4glwiLFxyXG4gICAgICAgICAgXCLlm77ku6zluIJcIixcclxuICAgICAgICAgIFwi5pWm5YyW5biCXCIsXHJcbiAgICAgICAgICBcIum+meS6leW4glwiLFxyXG4gICAgICAgICAgXCLnj7LmmKXluIJcIixcclxuICAgICAgICAgIFwi5ZKM6b6Z5biCXCIsXHJcbiAgICAgICAgICBcIuWuieWbvuWOv1wiLFxyXG4gICAgICAgICAgXCLmsarmuIXljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwi6buR6b6Z5rGf55yBXCIsXHJcbiAgICBcImNpdHlcIjogW1xyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5ZOI5bCU5ruo5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5p2+5YyX5Yy6XCIsXHJcbiAgICAgICAgICBcIumBk+mHjOWMulwiLFxyXG4gICAgICAgICAgXCLljZflspfljLpcIixcclxuICAgICAgICAgIFwi5bmz5oi/5Yy6XCIsXHJcbiAgICAgICAgICBcIummmeWdiuWMulwiLFxyXG4gICAgICAgICAgXCLpgZPlpJbljLpcIixcclxuICAgICAgICAgIFwi5ZG85YWw5Yy6XCIsXHJcbiAgICAgICAgICBcIumYv+WfjuWMulwiLFxyXG4gICAgICAgICAgXCLlj4zln47luIJcIixcclxuICAgICAgICAgIFwi5bCa5b+X5biCXCIsXHJcbiAgICAgICAgICBcIuS6lOW4uOW4glwiLFxyXG4gICAgICAgICAgXCLlrr7ljr9cIixcclxuICAgICAgICAgIFwi5pa55q2j5Y6/XCIsXHJcbiAgICAgICAgICBcIumAmuays+WOv1wiLFxyXG4gICAgICAgICAgXCLlt7Tlvabljr9cIixcclxuICAgICAgICAgIFwi5bu25a+/5Y6/XCIsXHJcbiAgICAgICAgICBcIuacqOWFsOWOv1wiLFxyXG4gICAgICAgICAgXCLkvp3lhbDljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIum9kOm9kOWTiOWwlOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIum+meaymeWMulwiLFxyXG4gICAgICAgICAgXCLmmILmmILmuqrljLpcIixcclxuICAgICAgICAgIFwi6ZOB6ZSL5Yy6XCIsXHJcbiAgICAgICAgICBcIuW7uuWNjuWMulwiLFxyXG4gICAgICAgICAgXCLlr4zmi4nlsJTln7rljLpcIixcclxuICAgICAgICAgIFwi56K+5a2Q5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIuaihemHjOaWr+i+vuaWoeWwlOaXj+WMulwiLFxyXG4gICAgICAgICAgXCLorrfmsrPluIJcIixcclxuICAgICAgICAgIFwi5a+M6KOV5Y6/XCIsXHJcbiAgICAgICAgICBcIuaLnOazieWOv1wiLFxyXG4gICAgICAgICAgXCLnlJjljZfljr9cIixcclxuICAgICAgICAgIFwi5L6d5a6J5Y6/XCIsXHJcbiAgICAgICAgICBcIuWFi+WxseWOv1wiLFxyXG4gICAgICAgICAgXCLms7DmnaXljr9cIixcclxuICAgICAgICAgIFwi5YWL5Lic5Y6/XCIsXHJcbiAgICAgICAgICBcIum+meaxn+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6bmk5bKX5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5YW05bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIuW3peWGnOWMulwiLFxyXG4gICAgICAgICAgXCLljZflsbHljLpcIixcclxuICAgICAgICAgIFwi5YW05a6J5Yy6XCIsXHJcbiAgICAgICAgICBcIuWQkemYs+WMulwiLFxyXG4gICAgICAgICAgXCLkuJzlsbHljLpcIixcclxuICAgICAgICAgIFwi6JCd5YyX5Y6/XCIsXHJcbiAgICAgICAgICBcIue7pea7qOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5Y+M6bit5bGxXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5bCW5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIuWyreS4nOWMulwiLFxyXG4gICAgICAgICAgXCLlm5vmlrnlj7DljLpcIixcclxuICAgICAgICAgIFwi5a6d5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIumbhui0pOWOv1wiLFxyXG4gICAgICAgICAgXCLlrp3muIXljr9cIixcclxuICAgICAgICAgIFwi5Y+L6LCK5Y6/XCIsXHJcbiAgICAgICAgICBcIumltuays+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6bih6KW/5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6bih5Yag5Yy6XCIsXHJcbiAgICAgICAgICBcIuaBkuWxseWMulwiLFxyXG4gICAgICAgICAgXCLln47lrZDmsrPljLpcIixcclxuICAgICAgICAgIFwi5ru06YGT5Yy6XCIsXHJcbiAgICAgICAgICBcIuaiqOagkeWMulwiLFxyXG4gICAgICAgICAgXCLpurvlsbHljLpcIixcclxuICAgICAgICAgIFwi5a+G5bGx5biCXCIsXHJcbiAgICAgICAgICBcIuiZjuael+W4glwiLFxyXG4gICAgICAgICAgXCLpuKHkuJzljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWkp+W6huW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuiQqOWwlOWbvuWMulwiLFxyXG4gICAgICAgICAgXCLnuqLlspfljLpcIixcclxuICAgICAgICAgIFwi6b6Z5Yek5Yy6XCIsXHJcbiAgICAgICAgICBcIuiuqeiDoei3r+WMulwiLFxyXG4gICAgICAgICAgXCLlpKflkIzljLpcIixcclxuICAgICAgICAgIFwi5p6X55S45Y6/XCIsXHJcbiAgICAgICAgICBcIuiCh+W3nuWOv1wiLFxyXG4gICAgICAgICAgXCLogofmupDljr9cIixcclxuICAgICAgICAgIFwi5p2c5bCU5Lyv54m56JKZ5Y+k5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkvIrmmKXluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkvIrmmKXljLpcIixcclxuICAgICAgICAgIFwi5bim5bKt5Yy6XCIsXHJcbiAgICAgICAgICBcIuWNl+WylOWMulwiLFxyXG4gICAgICAgICAgXCLph5HlsbHlsa/ljLpcIixcclxuICAgICAgICAgIFwi6KW/5p6X5Yy6XCIsXHJcbiAgICAgICAgICBcIue+jua6quWMulwiLFxyXG4gICAgICAgICAgXCLkuYzpqazmsrPljLpcIixcclxuICAgICAgICAgIFwi57+g5bOm5Yy6XCIsXHJcbiAgICAgICAgICBcIuWPi+WlveWMulwiLFxyXG4gICAgICAgICAgXCLkuIrnlJjlsq3ljLpcIixcclxuICAgICAgICAgIFwi5LqU6JCl5Yy6XCIsXHJcbiAgICAgICAgICBcIue6ouaYn+WMulwiLFxyXG4gICAgICAgICAgXCLmlrDpnZLljLpcIixcclxuICAgICAgICAgIFwi5rGk5pe65rKz5Yy6XCIsXHJcbiAgICAgICAgICBcIuS5jOS8iuWyreWMulwiLFxyXG4gICAgICAgICAgXCLpk4HlipvluIJcIixcclxuICAgICAgICAgIFwi5ZiJ6I2r5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLniaHkuLnmsZ/luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLniLHmsJHljLpcIixcclxuICAgICAgICAgIFwi5Lic5a6J5Yy6XCIsXHJcbiAgICAgICAgICBcIumYs+aYjuWMulwiLFxyXG4gICAgICAgICAgXCLopb/lronljLpcIixcclxuICAgICAgICAgIFwi57ul6Iqs5rKz5biCXCIsXHJcbiAgICAgICAgICBcIuWugeWuieW4glwiLFxyXG4gICAgICAgICAgXCLmtbfmnpfluIJcIixcclxuICAgICAgICAgIFwi56mG5qOx5biCXCIsXHJcbiAgICAgICAgICBcIuael+WPo+WOv1wiLFxyXG4gICAgICAgICAgXCLkuJzlroHljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuS9s+acqOaWr+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWQkemYs+WMulwiLFxyXG4gICAgICAgICAgXCLliY3ov5vljLpcIixcclxuICAgICAgICAgIFwi5Lic6aOO5Yy6XCIsXHJcbiAgICAgICAgICBcIumDiuWMulwiLFxyXG4gICAgICAgICAgXCLlkIzmsZ/luIJcIixcclxuICAgICAgICAgIFwi5a+M6ZSm5biCXCIsXHJcbiAgICAgICAgICBcIuahpuW3neWOv1wiLFxyXG4gICAgICAgICAgXCLmiprov5zljr9cIixcclxuICAgICAgICAgIFwi5qGm5Y2X5Y6/XCIsXHJcbiAgICAgICAgICBcIuaxpOWOn+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5LiD5Y+w5rKz5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5qGD5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIuaWsOWFtOWMulwiLFxyXG4gICAgICAgICAgXCLojITlrZDmsrPljLpcIixcclxuICAgICAgICAgIFwi5YuD5Yip5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpu5HmsrPluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLniLHovonljLpcIixcclxuICAgICAgICAgIFwi5YyX5a6J5biCXCIsXHJcbiAgICAgICAgICBcIuS6lOWkp+i/nuaxoOW4glwiLFxyXG4gICAgICAgICAgXCLpgIrlhYvljr9cIixcclxuICAgICAgICAgIFwi5aup5rGf5Y6/XCIsXHJcbiAgICAgICAgICBcIuWtmeWQtOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi57ul5YyW5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5YyX5p6X5Yy6XCIsXHJcbiAgICAgICAgICBcIuWuiei+vuW4glwiLFxyXG4gICAgICAgICAgXCLogofkuJzluIJcIixcclxuICAgICAgICAgIFwi5rW35Lym5biCXCIsXHJcbiAgICAgICAgICBcIue7peajseWOv1wiLFxyXG4gICAgICAgICAgXCLlhbDopb/ljr9cIixcclxuICAgICAgICAgIFwi5piO5rC05Y6/XCIsXHJcbiAgICAgICAgICBcIumdkuWGiOWOv1wiLFxyXG4gICAgICAgICAgXCLluoblronljr9cIixcclxuICAgICAgICAgIFwi5pyb5aWO5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlpKflhbTlronlsq3lnLDljLpcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlkbznjpvljr9cIixcclxuICAgICAgICAgIFwi5aGU5rKz5Y6/XCIsXHJcbiAgICAgICAgICBcIua8oOays+WOv1wiLFxyXG4gICAgICAgICAgXCLlpKflhbTlronlsq3ovpbljLpcIlxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwi5LiK5rW35biCXCIsXHJcbiAgICBcImNpdHlcIjogW1xyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5LiK5rW35biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6buE5rWm5Yy6XCIsXHJcbiAgICAgICAgICBcIuWNoua5vuWMulwiLFxyXG4gICAgICAgICAgXCLlvpDmsYfljLpcIixcclxuICAgICAgICAgIFwi6ZW/5a6B5Yy6XCIsXHJcbiAgICAgICAgICBcIumdmeWuieWMulwiLFxyXG4gICAgICAgICAgXCLmma7pmYDljLpcIixcclxuICAgICAgICAgIFwi6Ze45YyX5Yy6XCIsXHJcbiAgICAgICAgICBcIuiZueWPo+WMulwiLFxyXG4gICAgICAgICAgXCLmnajmtabljLpcIixcclxuICAgICAgICAgIFwi5a6d5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIumXteihjOWMulwiLFxyXG4gICAgICAgICAgXCLlmInlrprljLpcIixcclxuICAgICAgICAgIFwi5p2+5rGf5Yy6XCIsXHJcbiAgICAgICAgICBcIumHkeWxseWMulwiLFxyXG4gICAgICAgICAgXCLpnZLmtabljLpcIixcclxuICAgICAgICAgIFwi5Y2X5rGH5Yy6XCIsXHJcbiAgICAgICAgICBcIuWliei0pOWMulwiLFxyXG4gICAgICAgICAgXCLmtabkuJzmlrDljLpcIixcclxuICAgICAgICAgIFwi5bSH5piO5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIuaxn+iLj+ecgVwiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWNl+S6rOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIueOhOatpuWMulwiLFxyXG4gICAgICAgICAgXCLnmb3kuIvljLpcIixcclxuICAgICAgICAgIFwi56em5reu5Yy6XCIsXHJcbiAgICAgICAgICBcIuW7uumCuuWMulwiLFxyXG4gICAgICAgICAgXCLpvJPmpbzljLpcIixcclxuICAgICAgICAgIFwi5LiL5YWz5Yy6XCIsXHJcbiAgICAgICAgICBcIuaglumcnuWMulwiLFxyXG4gICAgICAgICAgXCLpm6joirHlj7DljLpcIixcclxuICAgICAgICAgIFwi5rWm5Y+j5Yy6XCIsXHJcbiAgICAgICAgICBcIuaxn+WugeWMulwiLFxyXG4gICAgICAgICAgXCLlha3lkIjljLpcIixcclxuICAgICAgICAgIFwi5rqn5rC05Y6/XCIsXHJcbiAgICAgICAgICBcIumrmOa3s+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6IuP5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6YeR6ZiK5Yy6XCIsXHJcbiAgICAgICAgICBcIuW5s+axn+WMulwiLFxyXG4gICAgICAgICAgXCLmsqfmtarljLpcIixcclxuICAgICAgICAgIFwi6JmO5LiY5Yy6XCIsXHJcbiAgICAgICAgICBcIuWQtOS4reWMulwiLFxyXG4gICAgICAgICAgXCLnm7jln47ljLpcIixcclxuICAgICAgICAgIFwi5bi454af5biCXCIsXHJcbiAgICAgICAgICBcIuW8oOWutua4r+W4glwiLFxyXG4gICAgICAgICAgXCLmmIblsbHluIJcIixcclxuICAgICAgICAgIFwi5ZC05rGf5biCXCIsXHJcbiAgICAgICAgICBcIuWkquS7k+W4glwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5peg6ZSh5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5bSH5a6J5Yy6XCIsXHJcbiAgICAgICAgICBcIuWNl+mVv+WMulwiLFxyXG4gICAgICAgICAgXCLljJfloZjljLpcIixcclxuICAgICAgICAgIFwi5ruo5rmW5Yy6XCIsXHJcbiAgICAgICAgICBcIumUoeWxseWMulwiLFxyXG4gICAgICAgICAgXCLmg6DlsbHljLpcIixcclxuICAgICAgICAgIFwi5rGf6Zi05biCXCIsXHJcbiAgICAgICAgICBcIuWunOWFtOW4glwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5bi45bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6ZKf5qW85Yy6XCIsXHJcbiAgICAgICAgICBcIuWkqeWugeWMulwiLFxyXG4gICAgICAgICAgXCLmiJrlooXloLDljLpcIixcclxuICAgICAgICAgIFwi5paw5YyX5Yy6XCIsXHJcbiAgICAgICAgICBcIuatpui/m+WMulwiLFxyXG4gICAgICAgICAgXCLph5HlnZvluIJcIixcclxuICAgICAgICAgIFwi5rqn6Ziz5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLplYfmsZ/luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkuqzlj6PljLpcIixcclxuICAgICAgICAgIFwi5ram5bee5Yy6XCIsXHJcbiAgICAgICAgICBcIuS4ueW+kuWMulwiLFxyXG4gICAgICAgICAgXCLkuLnpmLPluIJcIixcclxuICAgICAgICAgIFwi5oms5Lit5biCXCIsXHJcbiAgICAgICAgICBcIuWPpeWuueW4glwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5Y2X6YCa5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5bSH5bed5Yy6XCIsXHJcbiAgICAgICAgICBcIua4r+mXuOWMulwiLFxyXG4gICAgICAgICAgXCLpgJrlt57luIJcIixcclxuICAgICAgICAgIFwi5aaC55qL5biCXCIsXHJcbiAgICAgICAgICBcIua1t+mXqOW4glwiLFxyXG4gICAgICAgICAgXCLlkK/kuJzluIJcIixcclxuICAgICAgICAgIFwi5rW35a6J5Y6/XCIsXHJcbiAgICAgICAgICBcIuWmguS4nOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5rOw5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5rW36Zm15Yy6XCIsXHJcbiAgICAgICAgICBcIumrmOa4r+WMulwiLFxyXG4gICAgICAgICAgXCLlp5zloLDluIJcIixcclxuICAgICAgICAgIFwi5rOw5YW05biCXCIsXHJcbiAgICAgICAgICBcIumdluaxn+W4glwiLFxyXG4gICAgICAgICAgXCLlhbTljJbluIJcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuaJrOW3nuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuW5v+mZteWMulwiLFxyXG4gICAgICAgICAgXCLnu7TmiazljLpcIixcclxuICAgICAgICAgIFwi6YKX5rGf5Yy6XCIsXHJcbiAgICAgICAgICBcIuaxn+mDveW4glwiLFxyXG4gICAgICAgICAgXCLku6rlvoHluIJcIixcclxuICAgICAgICAgIFwi6auY6YKu5biCXCIsXHJcbiAgICAgICAgICBcIuWuneW6lOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi55uQ5Z+O5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Lqt5rmW5Yy6XCIsXHJcbiAgICAgICAgICBcIuebkOmDveWMulwiLFxyXG4gICAgICAgICAgXCLlpKfkuLDluIJcIixcclxuICAgICAgICAgIFwi5Lic5Y+w5biCXCIsXHJcbiAgICAgICAgICBcIuW7uua5luWOv1wiLFxyXG4gICAgICAgICAgXCLlsITpmLPljr9cIixcclxuICAgICAgICAgIFwi6Zic5a6B5Y6/XCIsXHJcbiAgICAgICAgICBcIua7qOa1t+WOv1wiLFxyXG4gICAgICAgICAgXCLlk43msLTljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIui/nuS6kea4r+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuaWsOa1puWMulwiLFxyXG4gICAgICAgICAgXCLmtbflt57ljLpcIixcclxuICAgICAgICAgIFwi6L+e5LqR5Yy6XCIsXHJcbiAgICAgICAgICBcIuS4nOa1t+WOv1wiLFxyXG4gICAgICAgICAgXCLngYzkupHljr9cIixcclxuICAgICAgICAgIFwi6LWj5qaG5Y6/XCIsXHJcbiAgICAgICAgICBcIueBjOWNl+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5b6Q5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5LqR6b6Z5Yy6XCIsXHJcbiAgICAgICAgICBcIum8k+alvOWMulwiLFxyXG4gICAgICAgICAgXCLkuZ3ph4zljLpcIixcclxuICAgICAgICAgIFwi5rOJ5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIui0vuaxquWMulwiLFxyXG4gICAgICAgICAgXCLpgrPlt57luIJcIixcclxuICAgICAgICAgIFwi5paw5rKC5biCXCIsXHJcbiAgICAgICAgICBcIumTnOWxseWOv1wiLFxyXG4gICAgICAgICAgXCLnnaLlroHljr9cIixcclxuICAgICAgICAgIFwi5rKb5Y6/XCIsXHJcbiAgICAgICAgICBcIuS4sOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5reu5a6J5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5riF5rKz5Yy6XCIsXHJcbiAgICAgICAgICBcIua4hea1puWMulwiLFxyXG4gICAgICAgICAgXCLmpZrlt57ljLpcIixcclxuICAgICAgICAgIFwi5reu6Zi05Yy6XCIsXHJcbiAgICAgICAgICBcIua2n+awtOWOv1wiLFxyXG4gICAgICAgICAgXCLmtKrms73ljr9cIixcclxuICAgICAgICAgIFwi6YeR5rmW5Y6/XCIsXHJcbiAgICAgICAgICBcIuebseecmeWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5a6/6L+B5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5a6/5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuWuv+ixq+WMulwiLFxyXG4gICAgICAgICAgXCLmsq3pmLPljr9cIixcclxuICAgICAgICAgIFwi5rOX6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuazl+a0quWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLmtZnmsZ/nnIFcIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmna3lt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmi7HlooXljLpcIixcclxuICAgICAgICAgIFwi6KW/5rmW5Yy6XCIsXHJcbiAgICAgICAgICBcIuS4iuWfjuWMulwiLFxyXG4gICAgICAgICAgXCLkuIvln47ljLpcIixcclxuICAgICAgICAgIFwi5rGf5bmy5Yy6XCIsXHJcbiAgICAgICAgICBcIua7qOaxn+WMulwiLFxyXG4gICAgICAgICAgXCLkvZnmna3ljLpcIixcclxuICAgICAgICAgIFwi6JCn5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIuW7uuW+t+W4glwiLFxyXG4gICAgICAgICAgXCLlr4zpmLPluIJcIixcclxuICAgICAgICAgIFwi5Li05a6J5biCXCIsXHJcbiAgICAgICAgICBcIuahkOW6kOWOv1wiLFxyXG4gICAgICAgICAgXCLmt7Plronljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWugeazouW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIua1t+abmeWMulwiLFxyXG4gICAgICAgICAgXCLmsZ/kuJzljLpcIixcclxuICAgICAgICAgIFwi5rGf5YyX5Yy6XCIsXHJcbiAgICAgICAgICBcIumVh+a1t+WMulwiLFxyXG4gICAgICAgICAgXCLljJfku5HljLpcIixcclxuICAgICAgICAgIFwi6YSe5bee5Yy6XCIsXHJcbiAgICAgICAgICBcIuS9meWnmuW4glwiLFxyXG4gICAgICAgICAgXCLmhYjmuqrluIJcIixcclxuICAgICAgICAgIFwi5aWJ5YyW5biCXCIsXHJcbiAgICAgICAgICBcIuWugea1t+WOv1wiLFxyXG4gICAgICAgICAgXCLosaHlsbHljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIua4qeW3nuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIum5v+WfjuWMulwiLFxyXG4gICAgICAgICAgXCLpvpnmub7ljLpcIixcclxuICAgICAgICAgIFwi55Ov5rW35Yy6XCIsXHJcbiAgICAgICAgICBcIueRnuWuieW4glwiLFxyXG4gICAgICAgICAgXCLkuZDmuIXluIJcIixcclxuICAgICAgICAgIFwi5rC45ZiJ5Y6/XCIsXHJcbiAgICAgICAgICBcIua0nuWktOWOv1wiLFxyXG4gICAgICAgICAgXCLlubPpmLPljr9cIixcclxuICAgICAgICAgIFwi6IuN5Y2X5Y6/XCIsXHJcbiAgICAgICAgICBcIuaWh+aIkOWOv1wiLFxyXG4gICAgICAgICAgXCLms7Dpobrljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWYieWFtOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuengOWfjuWMulwiLFxyXG4gICAgICAgICAgXCLnp4DmtLLljLpcIixcclxuICAgICAgICAgIFwi5rW35a6B5biCXCIsXHJcbiAgICAgICAgICBcIuW5s+a5luW4glwiLFxyXG4gICAgICAgICAgXCLmoZDkuaHluIJcIixcclxuICAgICAgICAgIFwi5ZiJ5ZaE5Y6/XCIsXHJcbiAgICAgICAgICBcIua1t+ebkOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5rmW5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5ZC05YW05Yy6XCIsXHJcbiAgICAgICAgICBcIuWNl+a1lOWMulwiLFxyXG4gICAgICAgICAgXCLplb/lhbTljr9cIixcclxuICAgICAgICAgIFwi5b635riF5Y6/XCIsXHJcbiAgICAgICAgICBcIuWuieWQieWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi57uN5YW05biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6LaK5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuivuOaaqOW4glwiLFxyXG4gICAgICAgICAgXCLkuIromZ7luIJcIixcclxuICAgICAgICAgIFwi5bWK5bee5biCXCIsXHJcbiAgICAgICAgICBcIue7jeWFtOWOv1wiLFxyXG4gICAgICAgICAgXCLmlrDmmIzljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumHkeWNjuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWpuuWfjuWMulwiLFxyXG4gICAgICAgICAgXCLph5HkuJzljLpcIixcclxuICAgICAgICAgIFwi5YWw5rqq5biCXCIsXHJcbiAgICAgICAgICBcIuS5ieS5jOW4glwiLFxyXG4gICAgICAgICAgXCLkuJzpmLPluIJcIixcclxuICAgICAgICAgIFwi5rC45bq35biCXCIsXHJcbiAgICAgICAgICBcIuatpuS5ieWOv1wiLFxyXG4gICAgICAgICAgXCLmtabmsZ/ljr9cIixcclxuICAgICAgICAgIFwi56OQ5a6J5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLooaLlt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmn6/ln47ljLpcIixcclxuICAgICAgICAgIFwi6KGi5rGf5Yy6XCIsXHJcbiAgICAgICAgICBcIuaxn+WxseW4glwiLFxyXG4gICAgICAgICAgXCLpvpnmuLjljr9cIixcclxuICAgICAgICAgIFwi5bi45bGx5Y6/XCIsXHJcbiAgICAgICAgICBcIuW8gOWMluWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6Iif5bGx5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5a6a5rW35Yy6XCIsXHJcbiAgICAgICAgICBcIuaZrumZgOWMulwiLFxyXG4gICAgICAgICAgXCLlsrHlsbHljr9cIixcclxuICAgICAgICAgIFwi5bWK5rOX5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlj7Dlt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmpJLmsZ/ljLpcIixcclxuICAgICAgICAgIFwi6buE5bKp5Yy6XCIsXHJcbiAgICAgICAgICBcIui3r+ahpeWMulwiLFxyXG4gICAgICAgICAgXCLkuLTmtbfluIJcIixcclxuICAgICAgICAgIFwi5rip5bKt5biCXCIsXHJcbiAgICAgICAgICBcIueOieeOr+WOv1wiLFxyXG4gICAgICAgICAgXCLlpKnlj7Dljr9cIixcclxuICAgICAgICAgIFwi5LuZ5bGF5Y6/XCIsXHJcbiAgICAgICAgICBcIuS4iemXqOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5Li95rC05biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6I6y6YO95Yy6XCIsXHJcbiAgICAgICAgICBcIum+meazieW4glwiLFxyXG4gICAgICAgICAgXCLnvJnkupHljr9cIixcclxuICAgICAgICAgIFwi6Z2S55Sw5Y6/XCIsXHJcbiAgICAgICAgICBcIuS6keWSjOWOv1wiLFxyXG4gICAgICAgICAgXCLpgYLmmIzljr9cIixcclxuICAgICAgICAgIFwi5p2+6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuW6huWFg+WOv1wiLFxyXG4gICAgICAgICAgXCLmma/lroHnlbLml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwi5a6J5b6955yBXCIsXHJcbiAgICBcImNpdHlcIjogW1xyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5ZCI6IKl5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5bqQ6Ziz5Yy6XCIsXHJcbiAgICAgICAgICBcIueRtua1t+WMulwiLFxyXG4gICAgICAgICAgXCLonIDlsbHljLpcIixcclxuICAgICAgICAgIFwi5YyF5rKz5Yy6XCIsXHJcbiAgICAgICAgICBcIumVv+S4sOWOv1wiLFxyXG4gICAgICAgICAgXCLogqXkuJzljr9cIixcclxuICAgICAgICAgIFwi6IKl6KW/5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLoipzmuZbluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLplZzmuZbljLpcIixcclxuICAgICAgICAgIFwi5byL5rGf5Yy6XCIsXHJcbiAgICAgICAgICBcIum4oOaxn+WMulwiLFxyXG4gICAgICAgICAgXCLkuInlsbHljLpcIixcclxuICAgICAgICAgIFwi6Iqc5rmW5Y6/XCIsXHJcbiAgICAgICAgICBcIuWNl+mZteWOv1wiLFxyXG4gICAgICAgICAgXCLnuYHmmIzljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuiajOWfoOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuiajOWxseWMulwiLFxyXG4gICAgICAgICAgXCLpvpnlrZDmuZbljLpcIixcclxuICAgICAgICAgIFwi56a55Lya5Yy6XCIsXHJcbiAgICAgICAgICBcIua3ruS4iuWMulwiLFxyXG4gICAgICAgICAgXCLmgIDov5zljr9cIixcclxuICAgICAgICAgIFwi5Zu66ZWH5Y6/XCIsXHJcbiAgICAgICAgICBcIuS6lOays+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5reu5Y2X5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi55Sw5a625bq15Yy6XCIsXHJcbiAgICAgICAgICBcIuWkp+mAmuWMulwiLFxyXG4gICAgICAgICAgXCLosKLlrrbpm4bljLpcIixcclxuICAgICAgICAgIFwi5YWr5YWs5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIua9mOmbhuWMulwiLFxyXG4gICAgICAgICAgXCLlh6Tlj7Dljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumprOmejeWxseW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumbqOWxseWMulwiLFxyXG4gICAgICAgICAgXCLoirHlsbHljLpcIixcclxuICAgICAgICAgIFwi6YeR5a625bqE5Yy6XCIsXHJcbiAgICAgICAgICBcIuW9k+a2guWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5reu5YyX5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi55u45bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIuadnOmbhuWMulwiLFxyXG4gICAgICAgICAgXCLng4jlsbHljLpcIixcclxuICAgICAgICAgIFwi5r+J5rqq5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpk5zpmbXluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLpk5zlrpjlsbHljLpcIixcclxuICAgICAgICAgIFwi54uu5a2Q5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIumDiuWMulwiLFxyXG4gICAgICAgICAgXCLpk5zpmbXljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWuieW6huW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIui/juaxn+WMulwiLFxyXG4gICAgICAgICAgXCLlpKfop4LljLpcIixcclxuICAgICAgICAgIFwi5a6c56eA5Yy6XCIsXHJcbiAgICAgICAgICBcIuahkOWfjuW4glwiLFxyXG4gICAgICAgICAgXCLlrr/mnb7ljr9cIixcclxuICAgICAgICAgIFwi5p6e6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuWkqua5luWOv1wiLFxyXG4gICAgICAgICAgXCLmgIDlroHljr9cIixcclxuICAgICAgICAgIFwi5bKz6KW/5Y6/XCIsXHJcbiAgICAgICAgICBcIuacm+axn+WOv1wiLFxyXG4gICAgICAgICAgXCLmvZzlsbHljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIum7hOWxseW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWxr+a6quWMulwiLFxyXG4gICAgICAgICAgXCLpu4TlsbHljLpcIixcclxuICAgICAgICAgIFwi5b695bee5Yy6XCIsXHJcbiAgICAgICAgICBcIuS8keWugeWOv1wiLFxyXG4gICAgICAgICAgXCLmrZnljr9cIixcclxuICAgICAgICAgIFwi56WB6Zeo5Y6/XCIsXHJcbiAgICAgICAgICBcIum7n+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5ruB5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi55CF55CK5Yy6XCIsXHJcbiAgICAgICAgICBcIuWNl+iwr+WMulwiLFxyXG4gICAgICAgICAgXCLlpKnplb/luIJcIixcclxuICAgICAgICAgIFwi5piO5YWJ5biCXCIsXHJcbiAgICAgICAgICBcIuWFqOakkuWOv1wiLFxyXG4gICAgICAgICAgXCLmnaXlronljr9cIixcclxuICAgICAgICAgIFwi5a6a6L+c5Y6/XCIsXHJcbiAgICAgICAgICBcIuWHpOmYs+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6Zic6Ziz5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6aKN5bee5Yy6XCIsXHJcbiAgICAgICAgICBcIumijeS4nOWMulwiLFxyXG4gICAgICAgICAgXCLpoo3ms4nljLpcIixcclxuICAgICAgICAgIFwi55WM6aaW5biCXCIsXHJcbiAgICAgICAgICBcIuS4tOazieWOv1wiLFxyXG4gICAgICAgICAgXCLpoo3kuIrljr9cIixcclxuICAgICAgICAgIFwi6Zic5Y2X5Y6/XCIsXHJcbiAgICAgICAgICBcIuWkquWSjOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5a6/5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Z+H5qGl5Yy6XCIsXHJcbiAgICAgICAgICBcIuiQp+WOv1wiLFxyXG4gICAgICAgICAgXCLms5fljr9cIixcclxuICAgICAgICAgIFwi56CA5bGx5Y6/XCIsXHJcbiAgICAgICAgICBcIueBteeSp+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5bei5rmW5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5bGF5bei5Yy6XCIsXHJcbiAgICAgICAgICBcIuWQq+WxseWOv1wiLFxyXG4gICAgICAgICAgXCLml6DkuLrljr9cIixcclxuICAgICAgICAgIFwi5bqQ5rGf5Y6/XCIsXHJcbiAgICAgICAgICBcIuWSjOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5YWt5a6J5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6YeR5a6J5Yy6XCIsXHJcbiAgICAgICAgICBcIuijleWuieWMulwiLFxyXG4gICAgICAgICAgXCLlr7/ljr9cIixcclxuICAgICAgICAgIFwi6ZyN5bGx5Y6/XCIsXHJcbiAgICAgICAgICBcIumcjemCseWOv1wiLFxyXG4gICAgICAgICAgXCLoiJLln47ljr9cIixcclxuICAgICAgICAgIFwi6YeR5a+o5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkurPlt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLosK/ln47ljLpcIixcclxuICAgICAgICAgIFwi5Yip6L6b5Y6/XCIsXHJcbiAgICAgICAgICBcIua2oemYs+WOv1wiLFxyXG4gICAgICAgICAgXCLokpnln47ljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuaxoOW3nuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIui0teaxoOWMulwiLFxyXG4gICAgICAgICAgXCLkuJzoh7Pljr9cIixcclxuICAgICAgICAgIFwi55+z5Y+w5Y6/XCIsXHJcbiAgICAgICAgICBcIumdkumYs+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5a6j5Z+O5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5a6j5bee5Yy6XCIsXHJcbiAgICAgICAgICBcIuWugeWbveW4glwiLFxyXG4gICAgICAgICAgXCLlub/lvrfljr9cIixcclxuICAgICAgICAgIFwi6YOO5rqq5Y6/XCIsXHJcbiAgICAgICAgICBcIuazvuWOv1wiLFxyXG4gICAgICAgICAgXCLml4zlvrfljr9cIixcclxuICAgICAgICAgIFwi57up5rqq5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIuemj+W7uuecgVwiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuemj+W3nuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIum8k+alvOWMulwiLFxyXG4gICAgICAgICAgXCLlj7DmsZ/ljLpcIixcclxuICAgICAgICAgIFwi5LuT5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIumprOWwvuWMulwiLFxyXG4gICAgICAgICAgXCLmmYvlronljLpcIixcclxuICAgICAgICAgIFwi56aP5riF5biCXCIsXHJcbiAgICAgICAgICBcIumVv+S5kOW4glwiLFxyXG4gICAgICAgICAgXCLpl73kvq/ljr9cIixcclxuICAgICAgICAgIFwi6Ze95riF5Y6/XCIsXHJcbiAgICAgICAgICBcIuawuOazsOWOv1wiLFxyXG4gICAgICAgICAgXCLov57msZ/ljr9cIixcclxuICAgICAgICAgIFwi572X5rqQ5Y6/XCIsXHJcbiAgICAgICAgICBcIuW5s+a9reWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5Y6m6Zeo5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5oCd5piO5Yy6XCIsXHJcbiAgICAgICAgICBcIua1t+ayp+WMulwiLFxyXG4gICAgICAgICAgXCLmuZbph4zljLpcIixcclxuICAgICAgICAgIFwi6ZuG576O5Yy6XCIsXHJcbiAgICAgICAgICBcIuWQjOWuieWMulwiLFxyXG4gICAgICAgICAgXCLnv5TlronljLpcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuiOhueUsOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWfjuWOouWMulwiLFxyXG4gICAgICAgICAgXCLmtrXmsZ/ljLpcIixcclxuICAgICAgICAgIFwi6I2U5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuengOWxv+WMulwiLFxyXG4gICAgICAgICAgXCLku5nmuLjljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuS4ieaYjuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuaiheWIl+WMulwiLFxyXG4gICAgICAgICAgXCLkuInlhYPljLpcIixcclxuICAgICAgICAgIFwi5rC45a6J5biCXCIsXHJcbiAgICAgICAgICBcIuaYjua6quWOv1wiLFxyXG4gICAgICAgICAgXCLlsIbkuZDljr9cIixcclxuICAgICAgICAgIFwi5aSn55Sw5Y6/XCIsXHJcbiAgICAgICAgICBcIuWugeWMluWOv1wiLFxyXG4gICAgICAgICAgXCLlu7rlroHljr9cIixcclxuICAgICAgICAgIFwi5rKZ5Y6/XCIsXHJcbiAgICAgICAgICBcIuWwpOa6quWOv1wiLFxyXG4gICAgICAgICAgXCLmuIXmtYHljr9cIixcclxuICAgICAgICAgIFwi5rOw5a6B5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLms4nlt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLpsqTln47ljLpcIixcclxuICAgICAgICAgIFwi5Liw5rO95Yy6XCIsXHJcbiAgICAgICAgICBcIua0m+axn+WMulwiLFxyXG4gICAgICAgICAgXCLms4nmuK/ljLpcIixcclxuICAgICAgICAgIFwi55+z54uu5biCXCIsXHJcbiAgICAgICAgICBcIuaZi+axn+W4glwiLFxyXG4gICAgICAgICAgXCLljZflronluIJcIixcclxuICAgICAgICAgIFwi5oOg5a6J5Y6/XCIsXHJcbiAgICAgICAgICBcIuawuOaYpeWOv1wiLFxyXG4gICAgICAgICAgXCLlronmuqrljr9cIixcclxuICAgICAgICAgIFwi5b635YyW5Y6/XCIsXHJcbiAgICAgICAgICBcIumHkemXqOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5ryz5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6IqX5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIum+meaWh+WMulwiLFxyXG4gICAgICAgICAgXCLpvpnmtbfluIJcIixcclxuICAgICAgICAgIFwi5bmz5ZKM5Y6/XCIsXHJcbiAgICAgICAgICBcIuWNl+mdluWOv1wiLFxyXG4gICAgICAgICAgXCLor4/lronljr9cIixcclxuICAgICAgICAgIFwi5ryz5rWm5Y6/XCIsXHJcbiAgICAgICAgICBcIuWNjuWuieWOv1wiLFxyXG4gICAgICAgICAgXCLkuJzlsbHljr9cIixcclxuICAgICAgICAgIFwi6ZW/5rOw5Y6/XCIsXHJcbiAgICAgICAgICBcIuS6kemchOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5Y2X5bmz5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5bu25bmz5Yy6XCIsXHJcbiAgICAgICAgICBcIuW7uueTr+W4glwiLFxyXG4gICAgICAgICAgXCLpgrXmrabluIJcIixcclxuICAgICAgICAgIFwi5q2m5aS35bGx5biCXCIsXHJcbiAgICAgICAgICBcIuW7uumYs+W4glwiLFxyXG4gICAgICAgICAgXCLmnb7muqrljr9cIixcclxuICAgICAgICAgIFwi5YWJ5rO95Y6/XCIsXHJcbiAgICAgICAgICBcIumhuuaYjOWOv1wiLFxyXG4gICAgICAgICAgXCLmtabln47ljr9cIixcclxuICAgICAgICAgIFwi5pS/5ZKM5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpvpnlsqnluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmlrDnvZfljLpcIixcclxuICAgICAgICAgIFwi5ryz5bmz5biCXCIsXHJcbiAgICAgICAgICBcIumVv+axgOWOv1wiLFxyXG4gICAgICAgICAgXCLmrablubPljr9cIixcclxuICAgICAgICAgIFwi5LiK5p2t5Y6/XCIsXHJcbiAgICAgICAgICBcIuawuOWumuWOv1wiLFxyXG4gICAgICAgICAgXCLov57ln47ljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWugeW+t+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuiVieWfjuWMulwiLFxyXG4gICAgICAgICAgXCLnpo/lronluIJcIixcclxuICAgICAgICAgIFwi56aP6byO5biCXCIsXHJcbiAgICAgICAgICBcIuWvv+WugeWOv1wiLFxyXG4gICAgICAgICAgXCLpnJ7mtabljr9cIixcclxuICAgICAgICAgIFwi5p+Y6I2j5Y6/XCIsXHJcbiAgICAgICAgICBcIuWxj+WNl+WOv1wiLFxyXG4gICAgICAgICAgXCLlj6TnlLDljr9cIixcclxuICAgICAgICAgIFwi5ZGo5a6B5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIuaxn+ilv+ecgVwiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWNl+aYjOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuS4nOa5luWMulwiLFxyXG4gICAgICAgICAgXCLopb/muZbljLpcIixcclxuICAgICAgICAgIFwi6Z2S5LqR6LCx5Yy6XCIsXHJcbiAgICAgICAgICBcIua5vumHjOWMulwiLFxyXG4gICAgICAgICAgXCLpnZLlsbHmuZbljLpcIixcclxuICAgICAgICAgIFwi5paw5bu65Y6/XCIsXHJcbiAgICAgICAgICBcIuWNl+aYjOWOv1wiLFxyXG4gICAgICAgICAgXCLov5votKTljr9cIixcclxuICAgICAgICAgIFwi5a6J5LmJ5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmma/lvrfplYfluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLnj6DlsbHljLpcIixcclxuICAgICAgICAgIFwi5piM5rGf5Yy6XCIsXHJcbiAgICAgICAgICBcIuS5kOW5s+W4glwiLFxyXG4gICAgICAgICAgXCLmta7mooHljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuiQjeS5oeW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWuiea6kOWMulwiLFxyXG4gICAgICAgICAgXCLmuZjkuJzljLpcIixcclxuICAgICAgICAgIFwi6I6y6Iqx5Y6/XCIsXHJcbiAgICAgICAgICBcIuS4iuagl+WOv1wiLFxyXG4gICAgICAgICAgXCLoiqbmuqrljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuS5neaxn+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIua1lOmYs+WMulwiLFxyXG4gICAgICAgICAgXCLlupDlsbHljLpcIixcclxuICAgICAgICAgIFwi55Ge5piM5biCXCIsXHJcbiAgICAgICAgICBcIuS5neaxn+WOv1wiLFxyXG4gICAgICAgICAgXCLmmJ/lrZDljr9cIixcclxuICAgICAgICAgIFwi5q2m5a6B5Y6/XCIsXHJcbiAgICAgICAgICBcIuW9reazveWOv1wiLFxyXG4gICAgICAgICAgXCLmsLjkv67ljr9cIixcclxuICAgICAgICAgIFwi5L+u5rC05Y6/XCIsXHJcbiAgICAgICAgICBcIua5luWPo+WOv1wiLFxyXG4gICAgICAgICAgXCLlvrflronljr9cIixcclxuICAgICAgICAgIFwi6YO95piM5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmlrDkvZnluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmuJ3msLTljLpcIixcclxuICAgICAgICAgIFwi5YiG5a6c5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpubDmva3luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmnIjmuZbljLpcIixcclxuICAgICAgICAgIFwi6LS15rqq5biCXCIsXHJcbiAgICAgICAgICBcIuS9meaxn+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6LWj5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi56ug6LSh5Yy6XCIsXHJcbiAgICAgICAgICBcIueRnumHkeW4glwiLFxyXG4gICAgICAgICAgXCLljZflurfluIJcIixcclxuICAgICAgICAgIFwi55+z5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuWuiei/nOWOv1wiLFxyXG4gICAgICAgICAgXCLotaPljr9cIixcclxuICAgICAgICAgIFwi5a6B6YO95Y6/XCIsXHJcbiAgICAgICAgICBcIuWvu+S5jOWOv1wiLFxyXG4gICAgICAgICAgXCLlhbTlm73ljr9cIixcclxuICAgICAgICAgIFwi5a6a5Y2X5Y6/XCIsXHJcbiAgICAgICAgICBcIuS4iueKueWOv1wiLFxyXG4gICAgICAgICAgXCLkuo7pg73ljr9cIixcclxuICAgICAgICAgIFwi6b6Z5Y2X5Y6/XCIsXHJcbiAgICAgICAgICBcIuW0h+S5ieWOv1wiLFxyXG4gICAgICAgICAgXCLkv6HkuLDljr9cIixcclxuICAgICAgICAgIFwi5YWo5Y2X5Y6/XCIsXHJcbiAgICAgICAgICBcIuWkp+S9meWOv1wiLFxyXG4gICAgICAgICAgXCLkvJrmmIzljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWQieWuieW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWQieW3nuWMulwiLFxyXG4gICAgICAgICAgXCLpnZLljp/ljLpcIixcclxuICAgICAgICAgIFwi5LqV5YaI5bGx5biCXCIsXHJcbiAgICAgICAgICBcIuWQieWuieWOv1wiLFxyXG4gICAgICAgICAgXCLmsLjkuLDljr9cIixcclxuICAgICAgICAgIFwi5rC45paw5Y6/XCIsXHJcbiAgICAgICAgICBcIuaWsOW5suWOv1wiLFxyXG4gICAgICAgICAgXCLms7Dlkozljr9cIixcclxuICAgICAgICAgIFwi5bOh5rGf5Y6/XCIsXHJcbiAgICAgICAgICBcIumBguW3neWOv1wiLFxyXG4gICAgICAgICAgXCLlronnpo/ljr9cIixcclxuICAgICAgICAgIFwi5ZCJ5rC05Y6/XCIsXHJcbiAgICAgICAgICBcIuS4h+WuieWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5a6c5pil5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6KKB5bee5Yy6XCIsXHJcbiAgICAgICAgICBcIuS4sOWfjuW4glwiLFxyXG4gICAgICAgICAgXCLmqJ/moJHluIJcIixcclxuICAgICAgICAgIFwi6auY5a6J5biCXCIsXHJcbiAgICAgICAgICBcIumTnOm8k+WOv1wiLFxyXG4gICAgICAgICAgXCLpnZblronljr9cIixcclxuICAgICAgICAgIFwi5a6c5Liw5Y6/XCIsXHJcbiAgICAgICAgICBcIuWlieaWsOWOv1wiLFxyXG4gICAgICAgICAgXCLkuIfovb3ljr9cIixcclxuICAgICAgICAgIFwi5LiK6auY5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmiprlt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkuLTlt53ljLpcIixcclxuICAgICAgICAgIFwi5Y2X5Liw5Y6/XCIsXHJcbiAgICAgICAgICBcIuS5kOWuieWOv1wiLFxyXG4gICAgICAgICAgXCLph5Hmuqrljr9cIixcclxuICAgICAgICAgIFwi5Y2X5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuS4nOS5oeWOv1wiLFxyXG4gICAgICAgICAgXCLotYTmuqrljr9cIixcclxuICAgICAgICAgIFwi5a6c6buE5Y6/XCIsXHJcbiAgICAgICAgICBcIuW5v+aYjOWOv1wiLFxyXG4gICAgICAgICAgXCLpu47lt53ljr9cIixcclxuICAgICAgICAgIFwi5bSH5LuB5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkuIrppbbluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkv6Hlt57ljLpcIixcclxuICAgICAgICAgIFwi5b635YW05biCXCIsXHJcbiAgICAgICAgICBcIuS4iumltuWOv1wiLFxyXG4gICAgICAgICAgXCLlub/kuLDljr9cIixcclxuICAgICAgICAgIFwi6YSx6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuWpuua6kOWOv1wiLFxyXG4gICAgICAgICAgXCLpk4XlsbHljr9cIixcclxuICAgICAgICAgIFwi5L2Z5bmy5Y6/XCIsXHJcbiAgICAgICAgICBcIuaoquWzsOWOv1wiLFxyXG4gICAgICAgICAgXCLlvIvpmLPljr9cIixcclxuICAgICAgICAgIFwi546J5bGx5Y6/XCIsXHJcbiAgICAgICAgICBcIuS4h+W5tOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLlsbHkuJznnIFcIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmtY7ljZfluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLluILkuK3ljLpcIixcclxuICAgICAgICAgIFwi5Y6G5LiL5Yy6XCIsXHJcbiAgICAgICAgICBcIuWkqeahpeWMulwiLFxyXG4gICAgICAgICAgXCLmp5DojavljLpcIixcclxuICAgICAgICAgIFwi5Y6G5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIumVv+a4heWMulwiLFxyXG4gICAgICAgICAgXCLnq6DkuJjluIJcIixcclxuICAgICAgICAgIFwi5bmz6Zi05Y6/XCIsXHJcbiAgICAgICAgICBcIua1jumYs+WOv1wiLFxyXG4gICAgICAgICAgXCLllYbmsrPljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumdkuWym+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuW4guWNl+WMulwiLFxyXG4gICAgICAgICAgXCLluILljJfljLpcIixcclxuICAgICAgICAgIFwi5Z+O6Ziz5Yy6XCIsXHJcbiAgICAgICAgICBcIuWbm+aWueWMulwiLFxyXG4gICAgICAgICAgXCLmnY7msqfljLpcIixcclxuICAgICAgICAgIFwi6buE5bKb5Yy6XCIsXHJcbiAgICAgICAgICBcIuW0guWxseWMulwiLFxyXG4gICAgICAgICAgXCLog7bljZfluIJcIixcclxuICAgICAgICAgIFwi6IO25bee5biCXCIsXHJcbiAgICAgICAgICBcIuW5s+W6puW4glwiLFxyXG4gICAgICAgICAgXCLojrHopb/luIJcIixcclxuICAgICAgICAgIFwi5Y2z5aKo5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmt4TljZrluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlvKDlupfljLpcIixcclxuICAgICAgICAgIFwi5Li05reE5Yy6XCIsXHJcbiAgICAgICAgICBcIua3hOW3neWMulwiLFxyXG4gICAgICAgICAgXCLljZrlsbHljLpcIixcclxuICAgICAgICAgIFwi5ZGo5p2R5Yy6XCIsXHJcbiAgICAgICAgICBcIuahk+WPsOWOv1wiLFxyXG4gICAgICAgICAgXCLpq5jpnZLljr9cIixcclxuICAgICAgICAgIFwi5rKC5rqQ5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmnqPluoTluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLluILkuK3ljLpcIixcclxuICAgICAgICAgIFwi5bGx5Lqt5Yy6XCIsXHJcbiAgICAgICAgICBcIuWzhOWfjuWMulwiLFxyXG4gICAgICAgICAgXCLlj7DlhL/luoTljLpcIixcclxuICAgICAgICAgIFwi6Jab5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIua7leW3nuW4glwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5Lic6JCl5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Lic6JCl5Yy6XCIsXHJcbiAgICAgICAgICBcIuays+WPo+WMulwiLFxyXG4gICAgICAgICAgXCLlnqbliKnljr9cIixcclxuICAgICAgICAgIFwi5bm/6aW25Y6/XCIsXHJcbiAgICAgICAgICBcIuWIqea0peWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi54Of5Y+w5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6Iqd572Y5Yy6XCIsXHJcbiAgICAgICAgICBcIuemj+WxseWMulwiLFxyXG4gICAgICAgICAgXCLniZ/lubPljLpcIixcclxuICAgICAgICAgIFwi6I6x5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIum+meWPo+W4glwiLFxyXG4gICAgICAgICAgXCLojrHpmLPluIJcIixcclxuICAgICAgICAgIFwi6I6x5bee5biCXCIsXHJcbiAgICAgICAgICBcIuaLm+i/nOW4glwiLFxyXG4gICAgICAgICAgXCLok6zojrHluIJcIixcclxuICAgICAgICAgIFwi5qCW6Zye5biCXCIsXHJcbiAgICAgICAgICBcIua1t+mYs+W4glwiLFxyXG4gICAgICAgICAgXCLplb/lspvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIua9jeWdiuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIua9jeWfjuWMulwiLFxyXG4gICAgICAgICAgXCLlr5Lkuq3ljLpcIixcclxuICAgICAgICAgIFwi5Z2K5a2Q5Yy6XCIsXHJcbiAgICAgICAgICBcIuWljuaWh+WMulwiLFxyXG4gICAgICAgICAgXCLpnZLlt57luIJcIixcclxuICAgICAgICAgIFwi6K+45Z+O5biCXCIsXHJcbiAgICAgICAgICBcIuWvv+WFieW4glwiLFxyXG4gICAgICAgICAgXCLlronkuJjluIJcIixcclxuICAgICAgICAgIFwi6auY5a+G5biCXCIsXHJcbiAgICAgICAgICBcIuaYjOmCkeW4glwiLFxyXG4gICAgICAgICAgXCLmmIzkuZDljr9cIixcclxuICAgICAgICAgIFwi5Li05pyQ5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmtY7lroHluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLluILkuK3ljLpcIixcclxuICAgICAgICAgIFwi5Lu75Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuabsumYnOW4glwiLFxyXG4gICAgICAgICAgXCLlhZblt57luIJcIixcclxuICAgICAgICAgIFwi6YK55Z+O5biCXCIsXHJcbiAgICAgICAgICBcIumxvOWPsOWOv1wiLFxyXG4gICAgICAgICAgXCLph5HkuaHljr9cIixcclxuICAgICAgICAgIFwi5ZiJ56Wl5Y6/XCIsXHJcbiAgICAgICAgICBcIuW+ruWxseWOv1wiLFxyXG4gICAgICAgICAgXCLmsbbkuIrljr9cIixcclxuICAgICAgICAgIFwi5rOX5rC05Y6/XCIsXHJcbiAgICAgICAgICBcIuaigeWxseWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5rOw5a6J5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5rOw5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIuWyseWys+WMulwiLFxyXG4gICAgICAgICAgXCLmlrDms7DluIJcIixcclxuICAgICAgICAgIFwi6IKl5Z+O5biCXCIsXHJcbiAgICAgICAgICBcIuWugemYs+WOv1wiLFxyXG4gICAgICAgICAgXCLkuJzlubPljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWogea1t+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIueOr+e/oOWMulwiLFxyXG4gICAgICAgICAgXCLkubPlsbHluIJcIixcclxuICAgICAgICAgIFwi5paH55m75biCXCIsXHJcbiAgICAgICAgICBcIuiNo+aIkOW4glwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5pel54Wn5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Lic5riv5Yy6XCIsXHJcbiAgICAgICAgICBcIuWymuWxseWMulwiLFxyXG4gICAgICAgICAgXCLkupTojrLljr9cIixcclxuICAgICAgICAgIFwi6I6S5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLojrHoipzluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLojrHln47ljLpcIixcclxuICAgICAgICAgIFwi6ZKi5Z+O5Yy6XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkuLTmsoLluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlhbDlsbHljLpcIixcclxuICAgICAgICAgIFwi572X5bqE5Yy6XCIsXHJcbiAgICAgICAgICBcIuays+S4nOWMulwiLFxyXG4gICAgICAgICAgXCLmsoLljZfljr9cIixcclxuICAgICAgICAgIFwi6YOv5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuayguawtOWOv1wiLFxyXG4gICAgICAgICAgXCLoi43lsbHljr9cIixcclxuICAgICAgICAgIFwi6LS55Y6/XCIsXHJcbiAgICAgICAgICBcIuW5s+mCkeWOv1wiLFxyXG4gICAgICAgICAgXCLojpLljZfljr9cIixcclxuICAgICAgICAgIFwi6JKZ6Zi05Y6/XCIsXHJcbiAgICAgICAgICBcIuS4tOayreWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5b635bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5b635Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuS5kOmZteW4glwiLFxyXG4gICAgICAgICAgXCLnprnln47luIJcIixcclxuICAgICAgICAgIFwi6Zm15Y6/XCIsXHJcbiAgICAgICAgICBcIuWugea0peWOv1wiLFxyXG4gICAgICAgICAgXCLpvZDmsrPljr9cIixcclxuICAgICAgICAgIFwi5q2m5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuW6huS6keWOv1wiLFxyXG4gICAgICAgICAgXCLlubPljp/ljr9cIixcclxuICAgICAgICAgIFwi5aSP5rSl5Y6/XCIsXHJcbiAgICAgICAgICBcIuS4tOmCkeWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6IGK5Z+O5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Lic5piM5bqc5Yy6XCIsXHJcbiAgICAgICAgICBcIuS4tOa4heW4glwiLFxyXG4gICAgICAgICAgXCLpq5jllJDljr9cIixcclxuICAgICAgICAgIFwi6Ziz6LC35Y6/XCIsXHJcbiAgICAgICAgICBcIuiMjOW5s+WOv1wiLFxyXG4gICAgICAgICAgXCLojpjljr9cIixcclxuICAgICAgICAgIFwi5Lic6Zi/5Y6/XCIsXHJcbiAgICAgICAgICBcIuWGoOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5ruo5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5ruo5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIumCueW5s+WOv1wiLFxyXG4gICAgICAgICAgXCLmsr7ljJbljr9cIixcclxuICAgICAgICAgIFwi5oOg5rCR5Y6/XCIsXHJcbiAgICAgICAgICBcIuWNmuWFtOWOv1wiLFxyXG4gICAgICAgICAgXCLpmLPkv6Hljr9cIixcclxuICAgICAgICAgIFwi5peg5qOj5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLoj4/ms73luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLniaHkuLnljLpcIixcclxuICAgICAgICAgIFwi6YSE5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuWNleWOv1wiLFxyXG4gICAgICAgICAgXCLpg5Pln47ljr9cIixcclxuICAgICAgICAgIFwi5pu55Y6/XCIsXHJcbiAgICAgICAgICBcIuWumumZtuWOv1wiLFxyXG4gICAgICAgICAgXCLlt6jph47ljr9cIixcclxuICAgICAgICAgIFwi5Lic5piO5Y6/XCIsXHJcbiAgICAgICAgICBcIuaIkOatpuWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLmsrPljZfnnIFcIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpg5Hlt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkuK3ljp/ljLpcIixcclxuICAgICAgICAgIFwi6YeR5rC05Yy6XCIsXHJcbiAgICAgICAgICBcIuS6jOS4g+WMulwiLFxyXG4gICAgICAgICAgXCLnrqHln47lm57ml4/ljLpcIixcclxuICAgICAgICAgIFwi5LiK6KGX5Yy6XCIsXHJcbiAgICAgICAgICBcIuaDoOa1juWMulwiLFxyXG4gICAgICAgICAgXCLlt6nkuYnluIJcIixcclxuICAgICAgICAgIFwi5paw6YOR5biCXCIsXHJcbiAgICAgICAgICBcIuaWsOWvhuW4glwiLFxyXG4gICAgICAgICAgXCLnmbvlsIHluIJcIixcclxuICAgICAgICAgIFwi6I2l6Ziz5biCXCIsXHJcbiAgICAgICAgICBcIuS4reeJn+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5byA5bCB5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6byT5qW85Yy6XCIsXHJcbiAgICAgICAgICBcIum+meS6reWMulwiLFxyXG4gICAgICAgICAgXCLpobrmsrPlm57ml4/ljLpcIixcclxuICAgICAgICAgIFwi56a5546L5Y+w5Yy6XCIsXHJcbiAgICAgICAgICBcIumHkeaYjuWMulwiLFxyXG4gICAgICAgICAgXCLlvIDlsIHljr9cIixcclxuICAgICAgICAgIFwi5bCJ5rCP5Y6/XCIsXHJcbiAgICAgICAgICBcIuWFsOiAg+WOv1wiLFxyXG4gICAgICAgICAgXCLmnZ7ljr9cIixcclxuICAgICAgICAgIFwi6YCa6K645Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmtJvpmLPluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLopb/lt6XljLpcIixcclxuICAgICAgICAgIFwi6ICB5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIua2p+ilv+WMulwiLFxyXG4gICAgICAgICAgXCLngI3msrPlm57ml4/ljLpcIixcclxuICAgICAgICAgIFwi5rSb6b6Z5Yy6XCIsXHJcbiAgICAgICAgICBcIuWQieWIqeWMulwiLFxyXG4gICAgICAgICAgXCLlgYPluIjluIJcIixcclxuICAgICAgICAgIFwi5a2f5rSl5Y6/XCIsXHJcbiAgICAgICAgICBcIuaxnemYs+WOv1wiLFxyXG4gICAgICAgICAgXCLkvIrlt53ljr9cIixcclxuICAgICAgICAgIFwi5rSb5a6B5Y6/XCIsXHJcbiAgICAgICAgICBcIuW1qeWOv1wiLFxyXG4gICAgICAgICAgXCLlrpzpmLPljr9cIixcclxuICAgICAgICAgIFwi5paw5a6J5Y6/XCIsXHJcbiAgICAgICAgICBcIuagvuW3neWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5bmz6aG25bGx5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5paw5Y2O5Yy6XCIsXHJcbiAgICAgICAgICBcIuWNq+S4nOWMulwiLFxyXG4gICAgICAgICAgXCLmuZvmsrPljLpcIixcclxuICAgICAgICAgIFwi55+z6b6Z5Yy6XCIsXHJcbiAgICAgICAgICBcIuaxneW3nuW4glwiLFxyXG4gICAgICAgICAgXCLoiJ7pkqLluIJcIixcclxuICAgICAgICAgIFwi5a6d5Liw5Y6/XCIsXHJcbiAgICAgICAgICBcIuWPtuWOv1wiLFxyXG4gICAgICAgICAgXCLpg4/ljr9cIixcclxuICAgICAgICAgIFwi6bKB5bGx5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlronpmLPluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLljJflhbPljLpcIixcclxuICAgICAgICAgIFwi5paH5bOw5Yy6XCIsXHJcbiAgICAgICAgICBcIuaut+mDveWMulwiLFxyXG4gICAgICAgICAgXCLpvpnlronljLpcIixcclxuICAgICAgICAgIFwi5p6X5bee5biCXCIsXHJcbiAgICAgICAgICBcIuWuiemYs+WOv1wiLFxyXG4gICAgICAgICAgXCLmu5Hljr9cIixcclxuICAgICAgICAgIFwi5YaF6buE5Y6/XCIsXHJcbiAgICAgICAgICBcIuaxpOmYtOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6bmk5aOB5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5reH5ruo5Yy6XCIsXHJcbiAgICAgICAgICBcIuWxseWfjuWMulwiLFxyXG4gICAgICAgICAgXCLpuaTlsbHljLpcIixcclxuICAgICAgICAgIFwi5rWa5Y6/XCIsXHJcbiAgICAgICAgICBcIua3h+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5paw5Lmh5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Y2r5ruo5Yy6XCIsXHJcbiAgICAgICAgICBcIue6ouaXl+WMulwiLFxyXG4gICAgICAgICAgXCLlh6Tms4nljLpcIixcclxuICAgICAgICAgIFwi54mn6YeO5Yy6XCIsXHJcbiAgICAgICAgICBcIuWNq+i+ieW4glwiLFxyXG4gICAgICAgICAgXCLovonljr/luIJcIixcclxuICAgICAgICAgIFwi5paw5Lmh5Y6/XCIsXHJcbiAgICAgICAgICBcIuiOt+WYieWOv1wiLFxyXG4gICAgICAgICAgXCLljp/pmLPljr9cIixcclxuICAgICAgICAgIFwi6ZW/5Z6j5Y6/XCIsXHJcbiAgICAgICAgICBcIuWwgeS4mOWOv1wiLFxyXG4gICAgICAgICAgXCLlu7bmtKXljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIueEpuS9nOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuino+aUvuWMulwiLFxyXG4gICAgICAgICAgXCLkuK3nq5nljLpcIixcclxuICAgICAgICAgIFwi6ams5p2R5Yy6XCIsXHJcbiAgICAgICAgICBcIuWxsemYs+WMulwiLFxyXG4gICAgICAgICAgXCLmsoHpmLPluIJcIixcclxuICAgICAgICAgIFwi5a2f5bee5biCXCIsXHJcbiAgICAgICAgICBcIuS/ruatpuWOv1wiLFxyXG4gICAgICAgICAgXCLmuKnljr9cIixcclxuICAgICAgICAgIFwi5q2m6Zmf5Y6/XCIsXHJcbiAgICAgICAgICBcIuWNmueIseWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5r+u6Ziz5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Y2O6b6Z5Yy6XCIsXHJcbiAgICAgICAgICBcIua/rumYs+WOv1wiLFxyXG4gICAgICAgICAgXCLljZfkuZDljr9cIixcclxuICAgICAgICAgIFwi5Y+w5YmN5Y6/XCIsXHJcbiAgICAgICAgICBcIua4heS4sOWOv1wiLFxyXG4gICAgICAgICAgXCLojIPljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuiuuOaYjOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumtj+mDveWMulwiLFxyXG4gICAgICAgICAgXCLnprnlt57luIJcIixcclxuICAgICAgICAgIFwi6ZW/6JGb5biCXCIsXHJcbiAgICAgICAgICBcIuiuuOaYjOWOv1wiLFxyXG4gICAgICAgICAgXCLphKLpmbXljr9cIixcclxuICAgICAgICAgIFwi6KWE5Z+O5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmvK/msrPluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmupDmsYfljLpcIixcclxuICAgICAgICAgIFwi6YO+5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuWPrOmZteWMulwiLFxyXG4gICAgICAgICAgXCLkuLTpoo3ljr9cIixcclxuICAgICAgICAgIFwi6Iie6Ziz5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkuInpl6jls6HluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmuZbmu6jljLpcIixcclxuICAgICAgICAgIFwi5LmJ6ams5biCXCIsXHJcbiAgICAgICAgICBcIueBteWuneW4glwiLFxyXG4gICAgICAgICAgXCLmuJHmsaDljr9cIixcclxuICAgICAgICAgIFwi5Y2i5rCP5Y6/XCIsXHJcbiAgICAgICAgICBcIumZleWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5Y2X6Ziz5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Y2n6b6Z5Yy6XCIsXHJcbiAgICAgICAgICBcIuWum+WfjuWMulwiLFxyXG4gICAgICAgICAgXCLpgpPlt57luIJcIixcclxuICAgICAgICAgIFwi5qGQ5p+P5Y6/XCIsXHJcbiAgICAgICAgICBcIuaWueWfjuWOv1wiLFxyXG4gICAgICAgICAgXCLmt4Xlt53ljr9cIixcclxuICAgICAgICAgIFwi6ZWH5bmz5Y6/XCIsXHJcbiAgICAgICAgICBcIuWUkOays+WOv1wiLFxyXG4gICAgICAgICAgXCLljZflj6zljr9cIixcclxuICAgICAgICAgIFwi5YaF5Lmh5Y6/XCIsXHJcbiAgICAgICAgICBcIuaWsOmHjuWOv1wiLFxyXG4gICAgICAgICAgXCLnpL7ml5fljr9cIixcclxuICAgICAgICAgIFwi6KW/5bOh5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLllYbkuJjluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmooHlm63ljLpcIixcclxuICAgICAgICAgIFwi552i6Ziz5Yy6XCIsXHJcbiAgICAgICAgICBcIuawuOWfjuW4glwiLFxyXG4gICAgICAgICAgXCLlroHpmbXljr9cIixcclxuICAgICAgICAgIFwi6Jme5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuawkeadg+WOv1wiLFxyXG4gICAgICAgICAgXCLlpI/pgpHljr9cIixcclxuICAgICAgICAgIFwi5p+Y5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuedouWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5L+h6Ziz5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5rWJ5rKz5Yy6XCIsXHJcbiAgICAgICAgICBcIuW5s+ahpeWMulwiLFxyXG4gICAgICAgICAgXCLmvaLlt53ljr9cIixcclxuICAgICAgICAgIFwi5reu5ruo5Y6/XCIsXHJcbiAgICAgICAgICBcIuaBr+WOv1wiLFxyXG4gICAgICAgICAgXCLmlrDljr9cIixcclxuICAgICAgICAgIFwi5ZWG5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuWbuuWni+WOv1wiLFxyXG4gICAgICAgICAgXCLnvZflsbHljr9cIixcclxuICAgICAgICAgIFwi5YWJ5bGx5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlkajlj6PluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlt53msYfljLpcIixcclxuICAgICAgICAgIFwi6aG55Z+O5biCXCIsXHJcbiAgICAgICAgICBcIuWVhuawtOWOv1wiLFxyXG4gICAgICAgICAgXCLmt67pmLPljr9cIixcclxuICAgICAgICAgIFwi5aSq5bq35Y6/XCIsXHJcbiAgICAgICAgICBcIum5v+mCkeWOv1wiLFxyXG4gICAgICAgICAgXCLopb/ljY7ljr9cIixcclxuICAgICAgICAgIFwi5om25rKf5Y6/XCIsXHJcbiAgICAgICAgICBcIuayiOS4mOWOv1wiLFxyXG4gICAgICAgICAgXCLpg7jln47ljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumpu+mprOW6l+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumpv+WfjuWMulwiLFxyXG4gICAgICAgICAgXCLnoa7lsbHljr9cIixcclxuICAgICAgICAgIFwi5paw6JSh5Y6/XCIsXHJcbiAgICAgICAgICBcIuS4iuiUoeWOv1wiLFxyXG4gICAgICAgICAgXCLopb/lubPljr9cIixcclxuICAgICAgICAgIFwi5rOM6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuW5s+iIhuWOv1wiLFxyXG4gICAgICAgICAgXCLmsZ3ljZfljr9cIixcclxuICAgICAgICAgIFwi6YGC5bmz5Y6/XCIsXHJcbiAgICAgICAgICBcIuato+mYs+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi54Sm5L2c5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5rWO5rqQ5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIua5luWMl+ecgVwiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuatpuaxieW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuaxn+WyuOWMulwiLFxyXG4gICAgICAgICAgXCLmrabmmIzljLpcIixcclxuICAgICAgICAgIFwi5rGf5rGJ5Yy6XCIsXHJcbiAgICAgICAgICBcIuehmuWPo+WMulwiLFxyXG4gICAgICAgICAgXCLmsYnpmLPljLpcIixcclxuICAgICAgICAgIFwi6Z2S5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIua0quWxseWMulwiLFxyXG4gICAgICAgICAgXCLkuJzopb/muZbljLpcIixcclxuICAgICAgICAgIFwi5rGJ5Y2X5Yy6XCIsXHJcbiAgICAgICAgICBcIuiUoeeUuOWMulwiLFxyXG4gICAgICAgICAgXCLmsZ/lpI/ljLpcIixcclxuICAgICAgICAgIFwi6buE6ZmC5Yy6XCIsXHJcbiAgICAgICAgICBcIuaWsOa0suWMulwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6buE55+z5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6buE55+z5riv5Yy6XCIsXHJcbiAgICAgICAgICBcIuilv+WhnuWxseWMulwiLFxyXG4gICAgICAgICAgXCLkuIvpmYbljLpcIixcclxuICAgICAgICAgIFwi6ZOB5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIuWkp+WGtuW4glwiLFxyXG4gICAgICAgICAgXCLpmLPmlrDljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWNgeWgsOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuW8oOa5vuWMulwiLFxyXG4gICAgICAgICAgXCLojIXnrq3ljLpcIixcclxuICAgICAgICAgIFwi5Li55rGf5Y+j5biCXCIsXHJcbiAgICAgICAgICBcIumDp+WOv1wiLFxyXG4gICAgICAgICAgXCLnq7nlsbHljr9cIixcclxuICAgICAgICAgIFwi5oi/5Y6/XCIsXHJcbiAgICAgICAgICBcIumDp+ilv+WOv1wiLFxyXG4gICAgICAgICAgXCLnq7nmuqrljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuiNhuW3nuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuaymeW4guWMulwiLFxyXG4gICAgICAgICAgXCLojYblt57ljLpcIixcclxuICAgICAgICAgIFwi5rSq5rmW5biCXCIsXHJcbiAgICAgICAgICBcIuefs+mmluW4glwiLFxyXG4gICAgICAgICAgXCLmnb7mu4vluIJcIixcclxuICAgICAgICAgIFwi55uR5Yip5Y6/XCIsXHJcbiAgICAgICAgICBcIuWFrOWuieWOv1wiLFxyXG4gICAgICAgICAgXCLmsZ/pmbXljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWunOaYjOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuilv+mZteWMulwiLFxyXG4gICAgICAgICAgXCLkvI3lrrblspfljLpcIixcclxuICAgICAgICAgIFwi54K55Yab5Yy6XCIsXHJcbiAgICAgICAgICBcIueMh+S6reWMulwiLFxyXG4gICAgICAgICAgXCLlpLfpmbXljLpcIixcclxuICAgICAgICAgIFwi5a6c6YO95biCXCIsXHJcbiAgICAgICAgICBcIuW9k+mYs+W4glwiLFxyXG4gICAgICAgICAgXCLmnp3msZ/luIJcIixcclxuICAgICAgICAgIFwi56et5b2S5Y6/XCIsXHJcbiAgICAgICAgICBcIui/nOWuieWOv1wiLFxyXG4gICAgICAgICAgXCLlhbTlsbHljr9cIixcclxuICAgICAgICAgIFwi5LqU5bOw5Zyf5a625peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIumVv+mYs+Wcn+WutuaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6KWE5qiK5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6KWE5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuaoiuWfjuWMulwiLFxyXG4gICAgICAgICAgXCLopYTpmLPljLpcIixcclxuICAgICAgICAgIFwi6ICB5rKz5Y+j5biCXCIsXHJcbiAgICAgICAgICBcIuaeo+mYs+W4glwiLFxyXG4gICAgICAgICAgXCLlrpzln47luIJcIixcclxuICAgICAgICAgIFwi5Y2X5ryz5Y6/XCIsXHJcbiAgICAgICAgICBcIuiwt+WfjuWOv1wiLFxyXG4gICAgICAgICAgXCLkv53lurfljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumEguW3nuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumEguWfjuWMulwiLFxyXG4gICAgICAgICAgXCLljY7lrrnljLpcIixcclxuICAgICAgICAgIFwi5qKB5a2Q5rmW5Yy6XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLojYbpl6jluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkuJzlrp3ljLpcIixcclxuICAgICAgICAgIFwi5o6H5YiA5Yy6XCIsXHJcbiAgICAgICAgICBcIumSn+elpeW4glwiLFxyXG4gICAgICAgICAgXCLkuqzlsbHljr9cIixcclxuICAgICAgICAgIFwi5rKZ5rSL5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlrZ3mhJ/luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlrZ3ljZfljLpcIixcclxuICAgICAgICAgIFwi5bqU5Z+O5biCXCIsXHJcbiAgICAgICAgICBcIuWuiemZhuW4glwiLFxyXG4gICAgICAgICAgXCLmsYnlt53luIJcIixcclxuICAgICAgICAgIFwi5LqR5qKm5Y6/XCIsXHJcbiAgICAgICAgICBcIuWkp+aCn+WOv1wiLFxyXG4gICAgICAgICAgXCLlrZ3mmIzljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIum7hOWGiOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIum7hOW3nuWMulwiLFxyXG4gICAgICAgICAgXCLpurvln47luIJcIixcclxuICAgICAgICAgIFwi5q2m56m05biCXCIsXHJcbiAgICAgICAgICBcIue6ouWuieWOv1wiLFxyXG4gICAgICAgICAgXCLnvZfnlLDljr9cIixcclxuICAgICAgICAgIFwi5rWg5rC05Y6/XCIsXHJcbiAgICAgICAgICBcIuiVsuaYpeWOv1wiLFxyXG4gICAgICAgICAgXCLpu4TmooXljr9cIixcclxuICAgICAgICAgIFwi6Iux5bGx5Y6/XCIsXHJcbiAgICAgICAgICBcIuWboumjjuWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5ZK45a6B5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5ZK45a6J5Yy6XCIsXHJcbiAgICAgICAgICBcIui1pOWjgeW4glwiLFxyXG4gICAgICAgICAgXCLlmInpsbzljr9cIixcclxuICAgICAgICAgIFwi6YCa5bGx5Y6/XCIsXHJcbiAgICAgICAgICBcIuW0h+mYs+WOv1wiLFxyXG4gICAgICAgICAgXCLpgJrln47ljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumaj+W3nuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuabvumDveWMulwiLFxyXG4gICAgICAgICAgXCLlub/msLTluIJcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuaBqeaWveWcn+WutuaXj+iLl+aXj+iHquayu+W3nlwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuaBqeaWveW4glwiLFxyXG4gICAgICAgICAgXCLliKnlt53luIJcIixcclxuICAgICAgICAgIFwi5bu65aeL5Y6/XCIsXHJcbiAgICAgICAgICBcIuadpeWHpOWOv1wiLFxyXG4gICAgICAgICAgXCLlt7TkuJzljr9cIixcclxuICAgICAgICAgIFwi6bmk5bOw5Y6/XCIsXHJcbiAgICAgICAgICBcIuWuo+aBqeWOv1wiLFxyXG4gICAgICAgICAgXCLlkrjkuLDljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuS7meahg+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuS7meahg1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5aSp6Zeo5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5aSp6ZeoXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmvZzmsZ/luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmvZzmsZ9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuelnuWGnOaetuael+WMulwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuelnuWGnOaetuael+WMulwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLmuZbljZfnnIFcIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLplb/mspnluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlsrPpupPljLpcIixcclxuICAgICAgICAgIFwi6IqZ6JOJ5Yy6XCIsXHJcbiAgICAgICAgICBcIuWkqeW/g+WMulwiLFxyXG4gICAgICAgICAgXCLlvIDnpo/ljLpcIixcclxuICAgICAgICAgIFwi6Zuo6Iqx5Yy6XCIsXHJcbiAgICAgICAgICBcIua1j+mYs+W4glwiLFxyXG4gICAgICAgICAgXCLplb/mspnljr9cIixcclxuICAgICAgICAgIFwi5pyb5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuWugeS5oeWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5qCq5rSy5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5aSp5YWD5Yy6XCIsXHJcbiAgICAgICAgICBcIuiNt+WhmOWMulwiLFxyXG4gICAgICAgICAgXCLoiqbmt57ljLpcIixcclxuICAgICAgICAgIFwi55+z5bOw5Yy6XCIsXHJcbiAgICAgICAgICBcIumGtOmZteW4glwiLFxyXG4gICAgICAgICAgXCLmoKrmtLLljr9cIixcclxuICAgICAgICAgIFwi54KO6Zm15Y6/XCIsXHJcbiAgICAgICAgICBcIuiMtumZteWOv1wiLFxyXG4gICAgICAgICAgXCLmlLjljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIua5mOa9reW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWys+WhmOWMulwiLFxyXG4gICAgICAgICAgXCLpm6jmuZbljLpcIixcclxuICAgICAgICAgIFwi5rmY5Lmh5biCXCIsXHJcbiAgICAgICAgICBcIumftuWxseW4glwiLFxyXG4gICAgICAgICAgXCLmuZjmva3ljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuihoemYs+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumbgeWzsOWMulwiLFxyXG4gICAgICAgICAgXCLnj6DmmZbljLpcIixcclxuICAgICAgICAgIFwi55+z6byT5Yy6XCIsXHJcbiAgICAgICAgICBcIuiSuOa5mOWMulwiLFxyXG4gICAgICAgICAgXCLljZflsrPljLpcIixcclxuICAgICAgICAgIFwi6ICS6Ziz5biCXCIsXHJcbiAgICAgICAgICBcIuW4uOWugeW4glwiLFxyXG4gICAgICAgICAgXCLooaHpmLPljr9cIixcclxuICAgICAgICAgIFwi6KGh5Lic5Y6/XCIsXHJcbiAgICAgICAgICBcIuihoeWxseWOv1wiLFxyXG4gICAgICAgICAgXCLooaHljZfljr9cIixcclxuICAgICAgICAgIFwi56WB5Lic5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpgrXpmLPluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlj4zmuIXljLpcIixcclxuICAgICAgICAgIFwi5aSn56Wl5Yy6XCIsXHJcbiAgICAgICAgICBcIuWMl+WhlOWMulwiLFxyXG4gICAgICAgICAgXCLmrablhojluIJcIixcclxuICAgICAgICAgIFwi6YK15Lic5Y6/XCIsXHJcbiAgICAgICAgICBcIua0nuWPo+WOv1wiLFxyXG4gICAgICAgICAgXCLmlrDpgrXljr9cIixcclxuICAgICAgICAgIFwi57ul5a6B5Y6/XCIsXHJcbiAgICAgICAgICBcIuaWsOWugeWOv1wiLFxyXG4gICAgICAgICAgXCLpgrXpmLPljr9cIixcclxuICAgICAgICAgIFwi6ZqG5Zue5Y6/XCIsXHJcbiAgICAgICAgICBcIuWfjuatpeiLl+aXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5bKz6Ziz5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5bKz6Ziz5qW85Yy6XCIsXHJcbiAgICAgICAgICBcIuS6kea6quWMulwiLFxyXG4gICAgICAgICAgXCLlkJvlsbHljLpcIixcclxuICAgICAgICAgIFwi5Li05rmY5biCXCIsXHJcbiAgICAgICAgICBcIuaxqOe9l+W4glwiLFxyXG4gICAgICAgICAgXCLlsrPpmLPljr9cIixcclxuICAgICAgICAgIFwi5rmY6Zi05Y6/XCIsXHJcbiAgICAgICAgICBcIuW5s+axn+WOv1wiLFxyXG4gICAgICAgICAgXCLljY7lrrnljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuW4uOW+t+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuatpumZteWMulwiLFxyXG4gICAgICAgICAgXCLpvI7ln47ljLpcIixcclxuICAgICAgICAgIFwi5rSl5biC5biCXCIsXHJcbiAgICAgICAgICBcIua+p+WOv1wiLFxyXG4gICAgICAgICAgXCLkuLTmvqfljr9cIixcclxuICAgICAgICAgIFwi5qGD5rqQ5Y6/XCIsXHJcbiAgICAgICAgICBcIuaxieWvv+WOv1wiLFxyXG4gICAgICAgICAgXCLlronkuaHljr9cIixcclxuICAgICAgICAgIFwi55+z6Zeo5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlvKDlrrbnlYzluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmsLjlrprljLpcIixcclxuICAgICAgICAgIFwi5q2m6Zm15rqQ5Yy6XCIsXHJcbiAgICAgICAgICBcIuaFiOWIqeWOv1wiLFxyXG4gICAgICAgICAgXCLmoZHmpI3ljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuebiumYs+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIui1q+WxseWMulwiLFxyXG4gICAgICAgICAgXCLotYTpmLPljLpcIixcclxuICAgICAgICAgIFwi5rKF5rGf5biCXCIsXHJcbiAgICAgICAgICBcIuahg+axn+WOv1wiLFxyXG4gICAgICAgICAgXCLljZfljr9cIixcclxuICAgICAgICAgIFwi5a6J5YyW5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpg7Tlt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLljJfmuZbljLpcIixcclxuICAgICAgICAgIFwi6IuP5LuZ5Yy6XCIsXHJcbiAgICAgICAgICBcIui1hOWFtOW4glwiLFxyXG4gICAgICAgICAgXCLlrpznq6Dljr9cIixcclxuICAgICAgICAgIFwi5rGd5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuWuieS7geWOv1wiLFxyXG4gICAgICAgICAgXCLlmInnpr7ljr9cIixcclxuICAgICAgICAgIFwi5Li05q2m5Y6/XCIsXHJcbiAgICAgICAgICBcIuahguS4nOWOv1wiLFxyXG4gICAgICAgICAgXCLmsLjlhbTljr9cIixcclxuICAgICAgICAgIFwi5qGC6Ziz5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmsLjlt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlhrfmsLTmu6nljLpcIixcclxuICAgICAgICAgIFwi6Zu26Zm15Yy6XCIsXHJcbiAgICAgICAgICBcIuelgemYs+WOv1wiLFxyXG4gICAgICAgICAgXCLok53lsbHljr9cIixcclxuICAgICAgICAgIFwi5a6B6L+c5Y6/XCIsXHJcbiAgICAgICAgICBcIuaWsOeUsOWOv1wiLFxyXG4gICAgICAgICAgXCLkuJzlronljr9cIixcclxuICAgICAgICAgIFwi5rGf5rC45Y6/XCIsXHJcbiAgICAgICAgICBcIumBk+WOv1wiLFxyXG4gICAgICAgICAgXCLlj4zniYzljr9cIixcclxuICAgICAgICAgIFwi5rGf5Y2O55G25peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmgIDljJbluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLpuaTln47ljLpcIixcclxuICAgICAgICAgIFwi5rSq5rGf5biCXCIsXHJcbiAgICAgICAgICBcIuS8muWQjOWOv1wiLFxyXG4gICAgICAgICAgXCLmsoXpmbXljr9cIixcclxuICAgICAgICAgIFwi6L6w5rqq5Y6/XCIsXHJcbiAgICAgICAgICBcIua6hua1puWOv1wiLFxyXG4gICAgICAgICAgXCLkuK3mlrnljr9cIixcclxuICAgICAgICAgIFwi5paw5pmD5L6X5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuiKt+axn+S+l+aXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLpgJrpgZPkvpfml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi6Z2W5bee6IuX5peP5L6X5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIum6u+mYs+iLl+aXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5aiE5bqV5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5aiE5pif5Yy6XCIsXHJcbiAgICAgICAgICBcIuWGt+awtOaxn+W4glwiLFxyXG4gICAgICAgICAgXCLmtp/mupDluIJcIixcclxuICAgICAgICAgIFwi5paw5YyW5Y6/XCIsXHJcbiAgICAgICAgICBcIuWPjOWzsOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5rmY6KW/5Zyf5a625peP6IuX5peP6Ieq5rK75beeXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5ZCJ6aaW5biCXCIsXHJcbiAgICAgICAgICBcIuWPpOS4iOWOv1wiLFxyXG4gICAgICAgICAgXCLpvpnlsbHljr9cIixcclxuICAgICAgICAgIFwi5rC46aG65Y6/XCIsXHJcbiAgICAgICAgICBcIuWHpOWHsOWOv1wiLFxyXG4gICAgICAgICAgXCLms7jmuqrljr9cIixcclxuICAgICAgICAgIFwi5L+d6Z2W5Y6/XCIsXHJcbiAgICAgICAgICBcIuiKseWeo+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLlub/kuJznnIFcIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlub/lt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLotornp4DljLpcIixcclxuICAgICAgICAgIFwi6I2U5rm+5Yy6XCIsXHJcbiAgICAgICAgICBcIua1t+ePoOWMulwiLFxyXG4gICAgICAgICAgXCLlpKnmsrPljLpcIixcclxuICAgICAgICAgIFwi55m95LqR5Yy6XCIsXHJcbiAgICAgICAgICBcIum7hOWflOWMulwiLFxyXG4gICAgICAgICAgXCLnlarnprrljLpcIixcclxuICAgICAgICAgIFwi6Iqx6YO95Yy6XCIsXHJcbiAgICAgICAgICBcIuWNl+aymeWMulwiLFxyXG4gICAgICAgICAgXCLokJ3lspfljLpcIixcclxuICAgICAgICAgIFwi5aKe5Z+O5biCXCIsXHJcbiAgICAgICAgICBcIuS7juWMluW4glwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5rex5Zyz5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi56aP55Sw5Yy6XCIsXHJcbiAgICAgICAgICBcIue9l+a5luWMulwiLFxyXG4gICAgICAgICAgXCLljZflsbHljLpcIixcclxuICAgICAgICAgIFwi5a6d5a6J5Yy6XCIsXHJcbiAgICAgICAgICBcIum+meWyl+WMulwiLFxyXG4gICAgICAgICAgXCLnm5DnlLDljLpcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuS4nOiOnuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuiOnuWfjlwiLFxyXG4gICAgICAgICAgXCLluLjlubNcIixcclxuICAgICAgICAgIFwi5aGY5Y6mXCIsXHJcbiAgICAgICAgICBcIuWhmOWOplwiLFxyXG4gICAgICAgICAgXCLloZjljqZcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuS4reWxseW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuS4reWxsVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5r2u5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5rmY5qGl5Yy6XCIsXHJcbiAgICAgICAgICBcIua9ruWuieWOv1wiLFxyXG4gICAgICAgICAgXCLppbblubPljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuaPremYs+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuamleWfjuWMulwiLFxyXG4gICAgICAgICAgXCLmj63kuJzljr9cIixcclxuICAgICAgICAgIFwi5o+t6KW/5Y6/XCIsXHJcbiAgICAgICAgICBcIuaDoOadpeWOv1wiLFxyXG4gICAgICAgICAgXCLmma7lroHluIJcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuS6kea1ruW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuS6keWfjuWMulwiLFxyXG4gICAgICAgICAgXCLmlrDlhbTljr9cIixcclxuICAgICAgICAgIFwi6YOB5Y2X5Y6/XCIsXHJcbiAgICAgICAgICBcIuS6keWuieWOv1wiLFxyXG4gICAgICAgICAgXCLnvZflrprluIJcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuePoOa1t+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIummmea0suWMulwiLFxyXG4gICAgICAgICAgXCLmlpfpl6jljLpcIixcclxuICAgICAgICAgIFwi6YeR5rm+5Yy6XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmsZXlpLTluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLph5HlubPljLpcIixcclxuICAgICAgICAgIFwi5r+g5rGf5Yy6XCIsXHJcbiAgICAgICAgICBcIum+mea5luWMulwiLFxyXG4gICAgICAgICAgXCLmva7pmLPljLpcIixcclxuICAgICAgICAgIFwi5r2u5Y2X5Yy6XCIsXHJcbiAgICAgICAgICBcIua+hOa1t+WMulwiLFxyXG4gICAgICAgICAgXCLljZfmvrPljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumftuWFs+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIua1iOaxn+WMulwiLFxyXG4gICAgICAgICAgXCLmrabmsZ/ljLpcIixcclxuICAgICAgICAgIFwi5puy5rGf5Yy6XCIsXHJcbiAgICAgICAgICBcIuS5kOaYjOW4glwiLFxyXG4gICAgICAgICAgXCLljZfpm4TluIJcIixcclxuICAgICAgICAgIFwi5aeL5YW05Y6/XCIsXHJcbiAgICAgICAgICBcIuS7geWMluWOv1wiLFxyXG4gICAgICAgICAgXCLnv4HmupDljr9cIixcclxuICAgICAgICAgIFwi5paw5Liw5Y6/XCIsXHJcbiAgICAgICAgICBcIuS5s+a6kOeRtuaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5L2b5bGx5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi56aF5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuWNl+a1t+WMulwiLFxyXG4gICAgICAgICAgXCLpobrlvrfljLpcIixcclxuICAgICAgICAgIFwi5LiJ5rC05Yy6XCIsXHJcbiAgICAgICAgICBcIumrmOaYjuWMulwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5rGf6Zeo5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6JOs5rGf5Yy6XCIsXHJcbiAgICAgICAgICBcIuaxn+a1t+WMulwiLFxyXG4gICAgICAgICAgXCLmlrDkvJrljLpcIixcclxuICAgICAgICAgIFwi5oGp5bmz5biCXCIsXHJcbiAgICAgICAgICBcIuWPsOWxseW4glwiLFxyXG4gICAgICAgICAgXCLlvIDlubPluIJcIixcclxuICAgICAgICAgIFwi6bmk5bGx5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmuZvmsZ/luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLotaTlnY7ljLpcIixcclxuICAgICAgICAgIFwi6Zye5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIuWdoeWktOWMulwiLFxyXG4gICAgICAgICAgXCLpurvnq6DljLpcIixcclxuICAgICAgICAgIFwi5ZC05bed5biCXCIsXHJcbiAgICAgICAgICBcIuW7ieaxn+W4glwiLFxyXG4gICAgICAgICAgXCLpm7flt57luIJcIixcclxuICAgICAgICAgIFwi6YGC5rqq5Y6/XCIsXHJcbiAgICAgICAgICBcIuW+kOmXu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6IyC5ZCN5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6IyC5Y2X5Yy6XCIsXHJcbiAgICAgICAgICBcIuiMgua4r+WMulwiLFxyXG4gICAgICAgICAgXCLljJblt57luIJcIixcclxuICAgICAgICAgIFwi5L+h5a6c5biCXCIsXHJcbiAgICAgICAgICBcIumrmOW3nuW4glwiLFxyXG4gICAgICAgICAgXCLnlLXnmb3ljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuiCh+W6huW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuerr+W3nuWMulwiLFxyXG4gICAgICAgICAgXCLpvI7muZbljLpcIixcclxuICAgICAgICAgIFwi6auY6KaB5biCXCIsXHJcbiAgICAgICAgICBcIuWbm+S8muW4glwiLFxyXG4gICAgICAgICAgXCLlub/lroHljr9cIixcclxuICAgICAgICAgIFwi5oCA6ZuG5Y6/XCIsXHJcbiAgICAgICAgICBcIuWwgeW8gOWOv1wiLFxyXG4gICAgICAgICAgXCLlvrfluobljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuaDoOW3nuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuaDoOWfjuWMulwiLFxyXG4gICAgICAgICAgXCLmg6DpmLPljLpcIixcclxuICAgICAgICAgIFwi5Y2a572X5Y6/XCIsXHJcbiAgICAgICAgICBcIuaDoOS4nOWOv1wiLFxyXG4gICAgICAgICAgXCLpvpnpl6jljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuaiheW3nuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuaiheaxn+WMulwiLFxyXG4gICAgICAgICAgXCLlhbTlroHluIJcIixcclxuICAgICAgICAgIFwi5qKF5Y6/XCIsXHJcbiAgICAgICAgICBcIuWkp+WflOWOv1wiLFxyXG4gICAgICAgICAgXCLkuLDpobrljr9cIixcclxuICAgICAgICAgIFwi5LqU5Y2O5Y6/XCIsXHJcbiAgICAgICAgICBcIuW5s+i/nOWOv1wiLFxyXG4gICAgICAgICAgXCLolYnlsq3ljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuaxleWwvuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWfjuWMulwiLFxyXG4gICAgICAgICAgXCLpmYbkuLDluIJcIixcclxuICAgICAgICAgIFwi5rW35Liw5Y6/XCIsXHJcbiAgICAgICAgICBcIumZhuays+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5rKz5rqQ5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5rqQ5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIue0q+mHkeWOv1wiLFxyXG4gICAgICAgICAgXCLpvpnlt53ljr9cIixcclxuICAgICAgICAgIFwi6L+e5bmz5Y6/XCIsXHJcbiAgICAgICAgICBcIuWSjOW5s+WOv1wiLFxyXG4gICAgICAgICAgXCLkuJzmupDljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumYs+axn+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuaxn+WfjuWMulwiLFxyXG4gICAgICAgICAgXCLpmLPmmKXluIJcIixcclxuICAgICAgICAgIFwi6Ziz6KW/5Y6/XCIsXHJcbiAgICAgICAgICBcIumYs+S4nOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5riF6L+c5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5riF5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuiLseW+t+W4glwiLFxyXG4gICAgICAgICAgXCLov57lt57luIJcIixcclxuICAgICAgICAgIFwi5L2b5YaI5Y6/XCIsXHJcbiAgICAgICAgICBcIumYs+WxseWOv1wiLFxyXG4gICAgICAgICAgXCLmuIXmlrDljr9cIixcclxuICAgICAgICAgIFwi6L+e5bGx5aOu5peP55G25peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIui/nuWNl+eRtuaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLlub/opb9cIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLljZflroHluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLpnZLnp4DljLpcIixcclxuICAgICAgICAgIFwi5YW05a6B5Yy6XCIsXHJcbiAgICAgICAgICBcIuilv+S5oeWhmOWMulwiLFxyXG4gICAgICAgICAgXCLoia/luobljLpcIixcclxuICAgICAgICAgIFwi5rGf5Y2X5Yy6XCIsXHJcbiAgICAgICAgICBcIumCleWugeWMulwiLFxyXG4gICAgICAgICAgXCLmrabpuKPljr9cIixcclxuICAgICAgICAgIFwi6ZqG5a6J5Y6/XCIsXHJcbiAgICAgICAgICBcIumprOWxseWOv1wiLFxyXG4gICAgICAgICAgXCLkuIrmnpfljr9cIixcclxuICAgICAgICAgIFwi5a6+6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuaoquWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5p+z5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Z+O5Lit5Yy6XCIsXHJcbiAgICAgICAgICBcIumxvOWzsOWMulwiLFxyXG4gICAgICAgICAgXCLmn7PljJfljLpcIixcclxuICAgICAgICAgIFwi5p+z5Y2X5Yy6XCIsXHJcbiAgICAgICAgICBcIuafs+axn+WOv1wiLFxyXG4gICAgICAgICAgXCLmn7Pln47ljr9cIixcclxuICAgICAgICAgIFwi6bm/5a+o5Y6/XCIsXHJcbiAgICAgICAgICBcIuiejeWuieWOv1wiLFxyXG4gICAgICAgICAgXCLono3msLToi5fml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5LiJ5rGf5L6X5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmoYLmnpfluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLosaHlsbHljLpcIixcclxuICAgICAgICAgIFwi56eA5bOw5Yy6XCIsXHJcbiAgICAgICAgICBcIuWPoOW9qeWMulwiLFxyXG4gICAgICAgICAgXCLkuIPmmJ/ljLpcIixcclxuICAgICAgICAgIFwi6ZuB5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIumYs+aclOWOv1wiLFxyXG4gICAgICAgICAgXCLkuLTmoYLljr9cIixcclxuICAgICAgICAgIFwi54G15bed5Y6/XCIsXHJcbiAgICAgICAgICBcIuWFqOW3nuWOv1wiLFxyXG4gICAgICAgICAgXCLlubPkuZDljr9cIixcclxuICAgICAgICAgIFwi5YW05a6J5Y6/XCIsXHJcbiAgICAgICAgICBcIueBjOmYs+WOv1wiLFxyXG4gICAgICAgICAgXCLojZTmtabljr9cIixcclxuICAgICAgICAgIFwi6LWE5rqQ5Y6/XCIsXHJcbiAgICAgICAgICBcIuawuOemj+WOv1wiLFxyXG4gICAgICAgICAgXCLpvpnog5zlkITml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5oGt5Z+O55G25peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmoqflt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkuIfnp4DljLpcIixcclxuICAgICAgICAgIFwi6J225bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIumVv+a0suWMulwiLFxyXG4gICAgICAgICAgXCLlspHmuqrluIJcIixcclxuICAgICAgICAgIFwi6IuN5qKn5Y6/XCIsXHJcbiAgICAgICAgICBcIuiXpOWOv1wiLFxyXG4gICAgICAgICAgXCLokpnlsbHljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWMl+a1t+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIua1t+WfjuWMulwiLFxyXG4gICAgICAgICAgXCLpk7bmtbfljLpcIixcclxuICAgICAgICAgIFwi6ZOB5bGx5riv5Yy6XCIsXHJcbiAgICAgICAgICBcIuWQiOa1puWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6Ziy5Z+O5riv5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5riv5Y+j5Yy6XCIsXHJcbiAgICAgICAgICBcIumYsuWfjuWMulwiLFxyXG4gICAgICAgICAgXCLkuJzlhbTluIJcIixcclxuICAgICAgICAgIFwi5LiK5oCd5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpkqblt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLpkqbljZfljLpcIixcclxuICAgICAgICAgIFwi6ZKm5YyX5Yy6XCIsXHJcbiAgICAgICAgICBcIueBteWxseWOv1wiLFxyXG4gICAgICAgICAgXCLmtabljJfljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIui0tea4r+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIua4r+WMl+WMulwiLFxyXG4gICAgICAgICAgXCLmuK/ljZfljLpcIixcclxuICAgICAgICAgIFwi6KaD5aGY5Yy6XCIsXHJcbiAgICAgICAgICBcIuahguW5s+W4glwiLFxyXG4gICAgICAgICAgXCLlubPljZfljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIueOieael+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIueOieW3nuWMulwiLFxyXG4gICAgICAgICAgXCLljJfmtYHluIJcIixcclxuICAgICAgICAgIFwi5a655Y6/XCIsXHJcbiAgICAgICAgICBcIumZhuW3neWOv1wiLFxyXG4gICAgICAgICAgXCLljZrnmb3ljr9cIixcclxuICAgICAgICAgIFwi5YW05Lia5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLnmb7oibLluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlj7PmsZ/ljLpcIixcclxuICAgICAgICAgIFwi5YeM5LqR5Y6/XCIsXHJcbiAgICAgICAgICBcIuW5s+aenOWOv1wiLFxyXG4gICAgICAgICAgXCLopb/mnpfljr9cIixcclxuICAgICAgICAgIFwi5LmQ5Lia5Y6/XCIsXHJcbiAgICAgICAgICBcIuW+t+S/neWOv1wiLFxyXG4gICAgICAgICAgXCLnlLDmnpfljr9cIixcclxuICAgICAgICAgIFwi55Sw6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIumdluilv+WOv1wiLFxyXG4gICAgICAgICAgXCLnlLDkuJzljr9cIixcclxuICAgICAgICAgIFwi6YKj5Z2h5Y6/XCIsXHJcbiAgICAgICAgICBcIumahuael+WQhOaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6LS65bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5YWr5q2l5Yy6XCIsXHJcbiAgICAgICAgICBcIumSn+WxseWOv1wiLFxyXG4gICAgICAgICAgXCLmmK3lubPljr9cIixcclxuICAgICAgICAgIFwi5a+M5bed55G25peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmsrPmsaDluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLph5Hln47msZ/ljLpcIixcclxuICAgICAgICAgIFwi5a6c5bee5biCXCIsXHJcbiAgICAgICAgICBcIuWkqeWzqOWOv1wiLFxyXG4gICAgICAgICAgXCLlh6TlsbHljr9cIixcclxuICAgICAgICAgIFwi5Y2X5Li55Y6/XCIsXHJcbiAgICAgICAgICBcIuS4nOWFsOWOv1wiLFxyXG4gICAgICAgICAgXCLpg73lronnkbbml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi572X5Z+O5Lur5L2s5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuW3tOmprOeRtuaXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLnjq/msZ/mr5vljZfml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5aSn5YyW55G25peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmnaXlrr7luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlhbTlrr7ljLpcIixcclxuICAgICAgICAgIFwi5ZCI5bGx5biCXCIsXHJcbiAgICAgICAgICBcIuixoeW3nuWOv1wiLFxyXG4gICAgICAgICAgXCLmrablrqPljr9cIixcclxuICAgICAgICAgIFwi5b+75Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIumHkeengOeRtuaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5bSH5bem5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5rGf5bee5Yy6XCIsXHJcbiAgICAgICAgICBcIuWHreelpeW4glwiLFxyXG4gICAgICAgICAgXCLlroHmmI7ljr9cIixcclxuICAgICAgICAgIFwi5om257ul5Y6/XCIsXHJcbiAgICAgICAgICBcIum+meW3nuWOv1wiLFxyXG4gICAgICAgICAgXCLlpKfmlrDljr9cIixcclxuICAgICAgICAgIFwi5aSp562J5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIua1t+WNl+ecgVwiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIua1t+WPo+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIum+meWNjuWMulwiLFxyXG4gICAgICAgICAgXCLnp4Doi7HljLpcIixcclxuICAgICAgICAgIFwi55C85bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIue+juWFsOWMulwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5LiJ5Lqa5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5LiJ5Lqa5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkupTmjIflsbHluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkupTmjIflsbFcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIueQvOa1t+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIueQvOa1t1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5YSL5bee5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5YSL5beeXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmlofmmIzluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmlofmmIxcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuS4h+WugeW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuS4h+WugVwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5Lic5pa55biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Lic5pa5XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmvoTov4jljr9cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmvoTov4jljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWumuWuieWOv1wiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWumuWuieWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5bGv5piM5Y6/XCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5bGv5piM5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkuLTpq5jljr9cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkuLTpq5jljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIueZveaymem7juaXj+iHquayu+WOv1wiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIueZveaymem7juaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5piM5rGf6buO5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5piM5rGf6buO5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkuZDkuJzpu47ml4/oh6rmsrvljr9cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkuZDkuJzpu47ml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumZteawtOm7juaXj+iHquayu+WOv1wiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumZteawtOm7juaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5L+d5Lqt6buO5peP6IuX5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5L+d5Lqt6buO5peP6IuX5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLnkLzkuK3pu47ml4/oi5fml4/oh6rmsrvljr9cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLnkLzkuK3pu47ml4/oi5fml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH0sXHJcbiAge1xyXG4gICAgXCJuYW1lXCI6IFwi6YeN5bqG5biCXCIsXHJcbiAgICBcImNpdHlcIjogW1xyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6YeN5bqG5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5rid5Lit5Yy6XCIsXHJcbiAgICAgICAgICBcIuWkp+a4oeWPo+WMulwiLFxyXG4gICAgICAgICAgXCLmsZ/ljJfljLpcIixcclxuICAgICAgICAgIFwi5Y2X5bK45Yy6XCIsXHJcbiAgICAgICAgICBcIuWMl+eimuWMulwiLFxyXG4gICAgICAgICAgXCLmuJ3ljJfljLpcIixcclxuICAgICAgICAgIFwi5be05Y2X5Yy6XCIsXHJcbiAgICAgICAgICBcIumVv+Wvv+WMulwiLFxyXG4gICAgICAgICAgXCLlj4zmoaXljLpcIixcclxuICAgICAgICAgIFwi5rKZ5Z2q5Z2d5Yy6XCIsXHJcbiAgICAgICAgICBcIuS4h+ebm+WMulwiLFxyXG4gICAgICAgICAgXCLkuIflt57ljLpcIixcclxuICAgICAgICAgIFwi5raq6Zm15Yy6XCIsXHJcbiAgICAgICAgICBcIum7lOaxn+WMulwiLFxyXG4gICAgICAgICAgXCLmsLjlt53ljLpcIixcclxuICAgICAgICAgIFwi5ZCI5bed5Yy6XCIsXHJcbiAgICAgICAgICBcIuaxn+a0peWMulwiLFxyXG4gICAgICAgICAgXCLkuZ3pvpnlnaHljLpcIixcclxuICAgICAgICAgIFwi5Y2X5bed5Yy6XCIsXHJcbiAgICAgICAgICBcIue2puaxn+WOv1wiLFxyXG4gICAgICAgICAgXCLmvbzljZfljr9cIixcclxuICAgICAgICAgIFwi6I2j5piM5Y6/XCIsXHJcbiAgICAgICAgICBcIueSp+WxseWOv1wiLFxyXG4gICAgICAgICAgXCLlpKfotrPljr9cIixcclxuICAgICAgICAgIFwi6ZOc5qKB5Y6/XCIsXHJcbiAgICAgICAgICBcIuaigeW5s+WOv1wiLFxyXG4gICAgICAgICAgXCLlvIDljr9cIixcclxuICAgICAgICAgIFwi5b+g5Y6/XCIsXHJcbiAgICAgICAgICBcIuWfjuWPo+WOv1wiLFxyXG4gICAgICAgICAgXCLlnqvmsZ/ljr9cIixcclxuICAgICAgICAgIFwi5q2m6ZqG5Y6/XCIsXHJcbiAgICAgICAgICBcIuS4sOmDveWOv1wiLFxyXG4gICAgICAgICAgXCLlpYnoioLljr9cIixcclxuICAgICAgICAgIFwi5LqR6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuW3q+a6quWOv1wiLFxyXG4gICAgICAgICAgXCLlt6vlsbHljr9cIixcclxuICAgICAgICAgIFwi55+z5p+x5Zyf5a625peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuengOWxseWcn+WutuaXj+iLl+aXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLphYnpmLPlnJ/lrrbml4/oi5fml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5b2t5rC06IuX5peP5Zyf5a625peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIuWbm+W3neecgVwiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuaIkOmDveW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumdkue+iuWMulwiLFxyXG4gICAgICAgICAgXCLplKbmsZ/ljLpcIixcclxuICAgICAgICAgIFwi6YeR54mb5Yy6XCIsXHJcbiAgICAgICAgICBcIuatpuS+r+WMulwiLFxyXG4gICAgICAgICAgXCLmiJDljY7ljLpcIixcclxuICAgICAgICAgIFwi6b6Z5rOJ6am/5Yy6XCIsXHJcbiAgICAgICAgICBcIumdkueZveaxn+WMulwiLFxyXG4gICAgICAgICAgXCLmlrDpg73ljLpcIixcclxuICAgICAgICAgIFwi5rip5rGf5Yy6XCIsXHJcbiAgICAgICAgICBcIumDveaxn+WgsOW4glwiLFxyXG4gICAgICAgICAgXCLlva3lt57luIJcIixcclxuICAgICAgICAgIFwi6YKb5bSD5biCXCIsXHJcbiAgICAgICAgICBcIuW0h+W3nuW4glwiLFxyXG4gICAgICAgICAgXCLph5HloILljr9cIixcclxuICAgICAgICAgIFwi6YOr5Y6/XCIsXHJcbiAgICAgICAgICBcIuaWsOa0peWOv1wiLFxyXG4gICAgICAgICAgXCLlj4zmtYHljr9cIixcclxuICAgICAgICAgIFwi6JKy5rGf5Y6/XCIsXHJcbiAgICAgICAgICBcIuWkp+mCkeWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6Ieq6LSh5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5aSn5a6J5Yy6XCIsXHJcbiAgICAgICAgICBcIuiHqua1geS6leWMulwiLFxyXG4gICAgICAgICAgXCLotKHkupXljLpcIixcclxuICAgICAgICAgIFwi5rK/5rup5Yy6XCIsXHJcbiAgICAgICAgICBcIuiNo+WOv1wiLFxyXG4gICAgICAgICAgXCLlr4zpobrljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuaUgOaeneiKseW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuS7geWSjOWMulwiLFxyXG4gICAgICAgICAgXCLnsbPmmJPljr9cIixcclxuICAgICAgICAgIFwi55uQ6L655Y6/XCIsXHJcbiAgICAgICAgICBcIuS4nOWMulwiLFxyXG4gICAgICAgICAgXCLopb/ljLpcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuazuOW3nuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuaxn+mYs+WMulwiLFxyXG4gICAgICAgICAgXCLnurPmuqrljLpcIixcclxuICAgICAgICAgIFwi6b6Z6ams5r2t5Yy6XCIsXHJcbiAgICAgICAgICBcIuazuOWOv1wiLFxyXG4gICAgICAgICAgXCLlkIjmsZ/ljr9cIixcclxuICAgICAgICAgIFwi5Y+Z5rC45Y6/XCIsXHJcbiAgICAgICAgICBcIuWPpOiUuuWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5b636Ziz5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5peM6Ziz5Yy6XCIsXHJcbiAgICAgICAgICBcIuW5v+axieW4glwiLFxyXG4gICAgICAgICAgXCLku4DpgqHluIJcIixcclxuICAgICAgICAgIFwi57u156u55biCXCIsXHJcbiAgICAgICAgICBcIue9l+axn+WOv1wiLFxyXG4gICAgICAgICAgXCLkuK3msZ/ljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIue7temYs+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIua2quWfjuWMulwiLFxyXG4gICAgICAgICAgXCLmuLjku5nljLpcIixcclxuICAgICAgICAgIFwi5rGf5rK55biCXCIsXHJcbiAgICAgICAgICBcIuebkOS6reWOv1wiLFxyXG4gICAgICAgICAgXCLkuInlj7Dljr9cIixcclxuICAgICAgICAgIFwi5bmz5q2m5Y6/XCIsXHJcbiAgICAgICAgICBcIuWuieWOv1wiLFxyXG4gICAgICAgICAgXCLmopPmvbzljr9cIixcclxuICAgICAgICAgIFwi5YyX5bed576M5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlub/lhYPluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlhYPlnZ3ljLpcIixcclxuICAgICAgICAgIFwi5pyd5aSp5Yy6XCIsXHJcbiAgICAgICAgICBcIumdkuW3neWOv1wiLFxyXG4gICAgICAgICAgXCLml7roi43ljr9cIixcclxuICAgICAgICAgIFwi5YmR6ZiB5Y6/XCIsXHJcbiAgICAgICAgICBcIuiLjea6quWOv1wiLFxyXG4gICAgICAgICAgXCLluILkuK3ljLpcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumBguWugeW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuiIueWxseWMulwiLFxyXG4gICAgICAgICAgXCLlronlsYXljLpcIixcclxuICAgICAgICAgIFwi5bCE5rSq5Y6/XCIsXHJcbiAgICAgICAgICBcIuiTrOa6quWOv1wiLFxyXG4gICAgICAgICAgXCLlpKfoi7Hljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWGheaxn+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuW4guS4reWMulwiLFxyXG4gICAgICAgICAgXCLkuJzlhbTljLpcIixcclxuICAgICAgICAgIFwi6LWE5Lit5Y6/XCIsXHJcbiAgICAgICAgICBcIumahuaYjOWOv1wiLFxyXG4gICAgICAgICAgXCLlqIHov5zljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuS5kOWxseW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuW4guS4reWMulwiLFxyXG4gICAgICAgICAgXCLkupTpgJrmoaXljLpcIixcclxuICAgICAgICAgIFwi5rKZ5rm+5Yy6XCIsXHJcbiAgICAgICAgICBcIumHkeWPo+ays+WMulwiLFxyXG4gICAgICAgICAgXCLls6jnnInlsbHluIJcIixcclxuICAgICAgICAgIFwi5aS55rGf5Y6/XCIsXHJcbiAgICAgICAgICBcIuS6leeglOWOv1wiLFxyXG4gICAgICAgICAgXCLnio3kuLrljr9cIixcclxuICAgICAgICAgIFwi5rKQ5bed5Y6/XCIsXHJcbiAgICAgICAgICBcIumprOi+ueW9neaXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLls6jovrnlvZ3ml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWNl+WFhVwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumhuuW6huWMulwiLFxyXG4gICAgICAgICAgXCLpq5jlnarljLpcIixcclxuICAgICAgICAgIFwi5ZiJ6Zm15Yy6XCIsXHJcbiAgICAgICAgICBcIumYhuS4reW4glwiLFxyXG4gICAgICAgICAgXCLokKXlsbHljr9cIixcclxuICAgICAgICAgIFwi6JOs5a6J5Y6/XCIsXHJcbiAgICAgICAgICBcIuS7qumZh+WOv1wiLFxyXG4gICAgICAgICAgXCLljZfpg6jljr9cIixcclxuICAgICAgICAgIFwi6KW/5YWF5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLnnInlsbHluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkuJzlnaHljLpcIixcclxuICAgICAgICAgIFwi5LuB5a+/5Y6/XCIsXHJcbiAgICAgICAgICBcIuW9reWxseWOv1wiLFxyXG4gICAgICAgICAgXCLmtKrpm4Xljr9cIixcclxuICAgICAgICAgIFwi5Li55qOx5Y6/XCIsXHJcbiAgICAgICAgICBcIumdkuelnuWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5a6c5a6+5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi57+g5bGP5Yy6XCIsXHJcbiAgICAgICAgICBcIuWunOWuvuWOv1wiLFxyXG4gICAgICAgICAgXCLlhbTmlofljr9cIixcclxuICAgICAgICAgIFwi5Y2X5rqq5Y6/XCIsXHJcbiAgICAgICAgICBcIuePmeWOv1wiLFxyXG4gICAgICAgICAgXCLplb/lroHljr9cIixcclxuICAgICAgICAgIFwi6auY5Y6/XCIsXHJcbiAgICAgICAgICBcIuaxn+WuieWOv1wiLFxyXG4gICAgICAgICAgXCLnraDov57ljr9cIixcclxuICAgICAgICAgIFwi5bGP5bGx5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlub/lronluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlub/lronljLpcIixcclxuICAgICAgICAgIFwi5Y2O6JOl5biCXCIsXHJcbiAgICAgICAgICBcIuWys+axoOWOv1wiLFxyXG4gICAgICAgICAgXCLpgrvmsLTljr9cIixcclxuICAgICAgICAgIFwi5q2m6IOc5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLovr7lt57luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLpgJrlt53ljLpcIixcclxuICAgICAgICAgIFwi5LiH5rqQ5biCXCIsXHJcbiAgICAgICAgICBcIui+vuWOv1wiLFxyXG4gICAgICAgICAgXCLmuKDljr9cIixcclxuICAgICAgICAgIFwi5a6j5rGJ5Y6/XCIsXHJcbiAgICAgICAgICBcIuW8gOaxn+WOv1wiLFxyXG4gICAgICAgICAgXCLlpKfnq7nljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumbheWuieW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumbqOWfjuWMulwiLFxyXG4gICAgICAgICAgXCLoiqblsbHljr9cIixcclxuICAgICAgICAgIFwi55+z5qOJ5Y6/XCIsXHJcbiAgICAgICAgICBcIuWQjeWxseWOv1wiLFxyXG4gICAgICAgICAgXCLlpKnlhajljr9cIixcclxuICAgICAgICAgIFwi6I2l57uP5Y6/XCIsXHJcbiAgICAgICAgICBcIuWuneWFtOWOv1wiLFxyXG4gICAgICAgICAgXCLmsYnmupDljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuW3tOS4reW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuW3tOW3nuWMulwiLFxyXG4gICAgICAgICAgXCLljZfmsZ/ljr9cIixcclxuICAgICAgICAgIFwi5bmz5piM5Y6/XCIsXHJcbiAgICAgICAgICBcIumAmuaxn+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6LWE6Ziz5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6ZuB5rGf5Yy6XCIsXHJcbiAgICAgICAgICBcIueugOmYs+W4glwiLFxyXG4gICAgICAgICAgXCLlronlsrPljr9cIixcclxuICAgICAgICAgIFwi5LmQ6Iez5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpmL/lnZ3ol4/ml4/nvozml4/oh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLpqazlsJTlurfljr9cIixcclxuICAgICAgICAgIFwi5Lmd5a+o5rKf5Y6/XCIsXHJcbiAgICAgICAgICBcIue6ouWOn+WOv1wiLFxyXG4gICAgICAgICAgXCLmsbblt53ljr9cIixcclxuICAgICAgICAgIFwi6Zi/5Z2d5Y6/XCIsXHJcbiAgICAgICAgICBcIueQhuWOv1wiLFxyXG4gICAgICAgICAgXCLoi6XlsJTnm5bljr9cIixcclxuICAgICAgICAgIFwi5bCP6YeR5Y6/XCIsXHJcbiAgICAgICAgICBcIum7keawtOWOv1wiLFxyXG4gICAgICAgICAgXCLph5Hlt53ljr9cIixcclxuICAgICAgICAgIFwi5p2+5r2Y5Y6/XCIsXHJcbiAgICAgICAgICBcIuWjpOWhmOWOv1wiLFxyXG4gICAgICAgICAgXCLojILljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIueUmOWtnOiXj+aXj+iHquayu+W3nlwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuW6t+WumuWOv1wiLFxyXG4gICAgICAgICAgXCLkuLnlt7Tljr9cIixcclxuICAgICAgICAgIFwi54KJ6ZyN5Y6/XCIsXHJcbiAgICAgICAgICBcIuS5nem+meWOv1wiLFxyXG4gICAgICAgICAgXCLnlJjlrZzljr9cIixcclxuICAgICAgICAgIFwi6ZuF5rGf5Y6/XCIsXHJcbiAgICAgICAgICBcIuaWsOm+meWOv1wiLFxyXG4gICAgICAgICAgXCLpgZPlrZrljr9cIixcclxuICAgICAgICAgIFwi55m9546J5Y6/XCIsXHJcbiAgICAgICAgICBcIueQhuWhmOWOv1wiLFxyXG4gICAgICAgICAgXCLlvrfmoLzljr9cIixcclxuICAgICAgICAgIFwi5Lmh5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuefs+a4oOWOv1wiLFxyXG4gICAgICAgICAgXCLnqLvln47ljr9cIixcclxuICAgICAgICAgIFwi6Imy6L6+5Y6/XCIsXHJcbiAgICAgICAgICBcIuW3tOWhmOWOv1wiLFxyXG4gICAgICAgICAgXCLms7jlrprljr9cIixcclxuICAgICAgICAgIFwi5b6X6I2j5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlh4nlsbHlvZ3ml4/oh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLopb/mmIzluIJcIixcclxuICAgICAgICAgIFwi576O5aeR5Y6/XCIsXHJcbiAgICAgICAgICBcIuaYreinieWOv1wiLFxyXG4gICAgICAgICAgXCLph5HpmLPljr9cIixcclxuICAgICAgICAgIFwi55SY5rSb5Y6/XCIsXHJcbiAgICAgICAgICBcIuW4g+aLluWOv1wiLFxyXG4gICAgICAgICAgXCLpm7fms6Lljr9cIixcclxuICAgICAgICAgIFwi5pmu5qC85Y6/XCIsXHJcbiAgICAgICAgICBcIuWugeWNl+WOv1wiLFxyXG4gICAgICAgICAgXCLllpzlvrfljr9cIixcclxuICAgICAgICAgIFwi5Lya5Lic5Y6/XCIsXHJcbiAgICAgICAgICBcIui2iuilv+WOv1wiLFxyXG4gICAgICAgICAgXCLkvJrnkIbljr9cIixcclxuICAgICAgICAgIFwi55uQ5rqQ5Y6/XCIsXHJcbiAgICAgICAgICBcIuW+t+aYjOWOv1wiLFxyXG4gICAgICAgICAgXCLlhpXlroHljr9cIixcclxuICAgICAgICAgIFwi5pyo6YeM6JeP5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIui0teW3nuecgVwiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIui0temYs+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWNl+aYjuWMulwiLFxyXG4gICAgICAgICAgXCLkupHlsqnljLpcIixcclxuICAgICAgICAgIFwi6Iqx5rqq5Yy6XCIsXHJcbiAgICAgICAgICBcIuS5jOW9k+WMulwiLFxyXG4gICAgICAgICAgXCLnmb3kupHljLpcIixcclxuICAgICAgICAgIFwi5bCP5rKz5Yy6XCIsXHJcbiAgICAgICAgICBcIua4hemVh+W4glwiLFxyXG4gICAgICAgICAgXCLlvIDpmLPljr9cIixcclxuICAgICAgICAgIFwi5L+u5paH5Y6/XCIsXHJcbiAgICAgICAgICBcIuaBr+eDveWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5YWt55uY5rC05biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6ZKf5bGx5Yy6XCIsXHJcbiAgICAgICAgICBcIuawtOWfjuWOv1wiLFxyXG4gICAgICAgICAgXCLnm5jljr9cIixcclxuICAgICAgICAgIFwi5YWt5p6d54m55Yy6XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpgbXkuYnluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLnuqLoirHlspfljLpcIixcclxuICAgICAgICAgIFwi5rGH5bed5Yy6XCIsXHJcbiAgICAgICAgICBcIui1pOawtOW4glwiLFxyXG4gICAgICAgICAgXCLku4HmgIDluIJcIixcclxuICAgICAgICAgIFwi6YG15LmJ5Y6/XCIsXHJcbiAgICAgICAgICBcIue7pemYs+WOv1wiLFxyXG4gICAgICAgICAgXCLmoZDmopPljr9cIixcclxuICAgICAgICAgIFwi5Lmg5rC05Y6/XCIsXHJcbiAgICAgICAgICBcIuWHpOWGiOWOv1wiLFxyXG4gICAgICAgICAgXCLmraPlronljr9cIixcclxuICAgICAgICAgIFwi5L2Z5bqG5Y6/XCIsXHJcbiAgICAgICAgICBcIua5hOa9reWOv1wiLFxyXG4gICAgICAgICAgXCLpgZPnnJ/ku6Hkvazml4/oi5fml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5Yqh5bed5Luh5L2s5peP6IuX5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlronpobrluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLopb/np4DljLpcIixcclxuICAgICAgICAgIFwi5pmu5a6a5Y6/XCIsXHJcbiAgICAgICAgICBcIuW5s+WdneWOv1wiLFxyXG4gICAgICAgICAgXCLplYflroHluIPkvp3ml4/oi5fml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi57Sr5LqR6IuX5peP5biD5L6d5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuWFs+WyreW4g+S+neaXj+iLl+aXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6ZOc5LuB5Zyw5Yy6XCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6ZOc5LuB5biCXCIsXHJcbiAgICAgICAgICBcIuW+t+axn+WOv1wiLFxyXG4gICAgICAgICAgXCLmsZ/lj6Pljr9cIixcclxuICAgICAgICAgIFwi5oCd5Y2X5Y6/XCIsXHJcbiAgICAgICAgICBcIuefs+mYoeWOv1wiLFxyXG4gICAgICAgICAgXCLnjonlsY/kvpfml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5p2+5qGD6IuX5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuWNsOaxn+Wcn+WutuaXj+iLl+aXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLmsr/msrPlnJ/lrrbml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5LiH5bGx54m55Yy6XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmr5XoioLlnLDljLpcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmr5XoioLluIJcIixcclxuICAgICAgICAgIFwi6buU6KW/5Y6/XCIsXHJcbiAgICAgICAgICBcIuWkp+aWueWOv1wiLFxyXG4gICAgICAgICAgXCLnu4fph5Hljr9cIixcclxuICAgICAgICAgIFwi6YeR5rKZ5Y6/XCIsXHJcbiAgICAgICAgICBcIui1q+eroOWOv1wiLFxyXG4gICAgICAgICAgXCLnurPpm43ljr9cIixcclxuICAgICAgICAgIFwi5aiB5a6B5b2d5peP5Zue5peP6IuX5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpu5Topb/ljZfluIPkvp3ml4/oi5fml4/oh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlhbTkuYnluIJcIixcclxuICAgICAgICAgIFwi5pyb6LCf5Y6/XCIsXHJcbiAgICAgICAgICBcIuWFtOS7geWOv1wiLFxyXG4gICAgICAgICAgXCLmma7lronljr9cIixcclxuICAgICAgICAgIFwi5YaM5Lqo5Y6/XCIsXHJcbiAgICAgICAgICBcIuaZtOmahuWOv1wiLFxyXG4gICAgICAgICAgXCLotJ7kuLDljr9cIixcclxuICAgICAgICAgIFwi5a6J6b6Z5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpu5TkuJzljZfoi5fml4/kvpfml4/oh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlh6/ph4zluIJcIixcclxuICAgICAgICAgIFwi5pa956eJ5Y6/XCIsXHJcbiAgICAgICAgICBcIuS7juaxn+WOv1wiLFxyXG4gICAgICAgICAgXCLplKblsY/ljr9cIixcclxuICAgICAgICAgIFwi6ZWH6L+c5Y6/XCIsXHJcbiAgICAgICAgICBcIum6u+axn+WOv1wiLFxyXG4gICAgICAgICAgXCLlj7DmsZ/ljr9cIixcclxuICAgICAgICAgIFwi5aSp5p+x5Y6/XCIsXHJcbiAgICAgICAgICBcIum7hOW5s+WOv1wiLFxyXG4gICAgICAgICAgXCLmppXmsZ/ljr9cIixcclxuICAgICAgICAgIFwi5YmR5rKz5Y6/XCIsXHJcbiAgICAgICAgICBcIuS4ieepl+WOv1wiLFxyXG4gICAgICAgICAgXCLpm7flsbHljr9cIixcclxuICAgICAgICAgIFwi6buO5bmz5Y6/XCIsXHJcbiAgICAgICAgICBcIuWykeW3qeWOv1wiLFxyXG4gICAgICAgICAgXCLkuLnlr6jljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIum7lOWNl+W4g+S+neaXj+iLl+aXj+iHquayu+W3nlwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumDveWMgOW4glwiLFxyXG4gICAgICAgICAgXCLnpo/ms4nluIJcIixcclxuICAgICAgICAgIFwi6LS15a6a5Y6/XCIsXHJcbiAgICAgICAgICBcIuaDoOawtOWOv1wiLFxyXG4gICAgICAgICAgXCLnvZfnlLjljr9cIixcclxuICAgICAgICAgIFwi55Ou5a6J5Y6/XCIsXHJcbiAgICAgICAgICBcIuiNlOazouWOv1wiLFxyXG4gICAgICAgICAgXCLpvpnph4zljr9cIixcclxuICAgICAgICAgIFwi5bmz5aGY5Y6/XCIsXHJcbiAgICAgICAgICBcIumVv+mhuuWOv1wiLFxyXG4gICAgICAgICAgXCLni6zlsbHljr9cIixcclxuICAgICAgICAgIFwi5LiJ6YO95rC05peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIuS6keWNl+ecgVwiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuaYhuaYjuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuebmOm+meWMulwiLFxyXG4gICAgICAgICAgXCLkupTljY7ljLpcIixcclxuICAgICAgICAgIFwi5a6Y5rih5Yy6XCIsXHJcbiAgICAgICAgICBcIuilv+WxseWMulwiLFxyXG4gICAgICAgICAgXCLkuJzlt53ljLpcIixcclxuICAgICAgICAgIFwi5a6J5a6B5biCXCIsXHJcbiAgICAgICAgICBcIuWRiOi0oeWOv1wiLFxyXG4gICAgICAgICAgXCLmmYvlroHljr9cIixcclxuICAgICAgICAgIFwi5a+M5rCR5Y6/XCIsXHJcbiAgICAgICAgICBcIuWunOiJr+WOv1wiLFxyXG4gICAgICAgICAgXCLltanmmI7ljr9cIixcclxuICAgICAgICAgIFwi55+z5p6X5b2d5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuemhOWKneW9neaXj+iLl+aXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLlr7vnlLjlm57ml4/lvZ3ml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuabsumdluW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIum6kum6n+WMulwiLFxyXG4gICAgICAgICAgXCLlrqPlqIHluIJcIixcclxuICAgICAgICAgIFwi6ams6b6Z5Y6/XCIsXHJcbiAgICAgICAgICBcIuayvuebiuWOv1wiLFxyXG4gICAgICAgICAgXCLlr4zmupDljr9cIixcclxuICAgICAgICAgIFwi572X5bmz5Y6/XCIsXHJcbiAgICAgICAgICBcIuW4iOWul+WOv1wiLFxyXG4gICAgICAgICAgXCLpmYboia/ljr9cIixcclxuICAgICAgICAgIFwi5Lya5rO95Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLnjonmuqrluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLnuqLloZTljLpcIixcclxuICAgICAgICAgIFwi5rGf5bed5Y6/XCIsXHJcbiAgICAgICAgICBcIua+hOaxn+WOv1wiLFxyXG4gICAgICAgICAgXCLpgJrmtbfljr9cIixcclxuICAgICAgICAgIFwi5Y2O5a6B5Y6/XCIsXHJcbiAgICAgICAgICBcIuaYk+mXqOWOv1wiLFxyXG4gICAgICAgICAgXCLls6jlsbHlvZ3ml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5paw5bmz5b2d5peP5YKj5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuWFg+axn+WTiOWwvOaXj+W9neaXj+WCo+aXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5L+d5bGx5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6ZqG6Ziz5Yy6XCIsXHJcbiAgICAgICAgICBcIuaWveeUuOWOv1wiLFxyXG4gICAgICAgICAgXCLohb7lhrLljr9cIixcclxuICAgICAgICAgIFwi6b6Z6Zm15Y6/XCIsXHJcbiAgICAgICAgICBcIuaYjOWugeWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5pit6YCa5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5pit6Ziz5Yy6XCIsXHJcbiAgICAgICAgICBcIumygeeUuOWOv1wiLFxyXG4gICAgICAgICAgXCLlt6flrrbljr9cIixcclxuICAgICAgICAgIFwi55uQ5rSl5Y6/XCIsXHJcbiAgICAgICAgICBcIuWkp+WFs+WOv1wiLFxyXG4gICAgICAgICAgXCLmsLjlloTljr9cIixcclxuICAgICAgICAgIFwi57ul5rGf5Y6/XCIsXHJcbiAgICAgICAgICBcIumVh+mbhOWOv1wiLFxyXG4gICAgICAgICAgXCLlvZ3oia/ljr9cIixcclxuICAgICAgICAgIFwi5aiB5L+h5Y6/XCIsXHJcbiAgICAgICAgICBcIuawtOWvjOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5Li95rGf5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Y+k5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIuawuOiDnOWOv1wiLFxyXG4gICAgICAgICAgXCLljY7lnarljr9cIixcclxuICAgICAgICAgIFwi546J6b6Z57qz6KW/5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuWugeiSl+W9neaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5pmu5rSx5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5oCd6IyF5Yy6XCIsXHJcbiAgICAgICAgICBcIuaZrua0seWTiOWwvOaXj+W9neaXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLloqjmsZ/lk4jlsLzml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5pmv5Lic5b2d5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuaZr+iwt+WCo+aXj+W9neaXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLplYfmsoXlvZ3ml4/lk4jlsLzml4/mi4nnpZzml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5rGf5Z+O5ZOI5bC85peP5b2d5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuWtn+i/nuWCo+aXj+aLieelnOaXj+S9pOaXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLmvpzmsqfmi4nnpZzml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi6KW/55uf5L2k5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkuLTmsqfluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkuLTnv5TljLpcIixcclxuICAgICAgICAgIFwi5Yek5bqG5Y6/XCIsXHJcbiAgICAgICAgICBcIuS6keWOv1wiLFxyXG4gICAgICAgICAgXCLmsLjlvrfljr9cIixcclxuICAgICAgICAgIFwi6ZWH5bq35Y6/XCIsXHJcbiAgICAgICAgICBcIuWPjOaxn+aLieelnOaXj+S9pOaXj+W4g+acl+aXj+WCo+aXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLogL/pqazlgqPml4/kvaTml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5rKn5rqQ5L2k5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlvrflro/lgqPml4/mma/poofml4/oh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmvZ7opb/luIJcIixcclxuICAgICAgICAgIFwi55Ge5Li95biCXCIsXHJcbiAgICAgICAgICBcIuaigeays+WOv1wiLFxyXG4gICAgICAgICAgXCLnm4jmsZ/ljr9cIixcclxuICAgICAgICAgIFwi6ZmH5bed5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmgJLmsZ/lgojlg7Pml4/oh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLms7jmsLTljr9cIixcclxuICAgICAgICAgIFwi56aP6LSh5Y6/XCIsXHJcbiAgICAgICAgICBcIui0oeWxseeLrOm+meaXj+aAkuaXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLlhbDlnarnmb3ml4/mma7nsbPml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIui/quW6huiXj+aXj+iHquayu+W3nlwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIummmeagvOmHjOaLieWOv1wiLFxyXG4gICAgICAgICAgXCLlvrfpkqbljr9cIixcclxuICAgICAgICAgIFwi57u06KW/5YKI5YOz5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlpKfnkIbnmb3ml4/oh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlpKfnkIbluIJcIixcclxuICAgICAgICAgIFwi56Wl5LqR5Y6/XCIsXHJcbiAgICAgICAgICBcIuWuvuW3neWOv1wiLFxyXG4gICAgICAgICAgXCLlvKXmuKHljr9cIixcclxuICAgICAgICAgIFwi5rC45bmz5Y6/XCIsXHJcbiAgICAgICAgICBcIuS6kem+meWOv1wiLFxyXG4gICAgICAgICAgXCLmtLHmupDljr9cIixcclxuICAgICAgICAgIFwi5YmR5bed5Y6/XCIsXHJcbiAgICAgICAgICBcIum5pOW6huWOv1wiLFxyXG4gICAgICAgICAgXCLmvL7mv57lvZ3ml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5Y2X5ran5b2d5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuW3jeWxseW9neaXj+WbnuaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5qWa6ZuE5b2d5peP6Ieq5rK75beeXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5qWa6ZuE5biCXCIsXHJcbiAgICAgICAgICBcIuWPjOafj+WOv1wiLFxyXG4gICAgICAgICAgXCLniZ/lrprljr9cIixcclxuICAgICAgICAgIFwi5Y2X5Y2O5Y6/XCIsXHJcbiAgICAgICAgICBcIuWnmuWuieWOv1wiLFxyXG4gICAgICAgICAgXCLlpKflp5rljr9cIixcclxuICAgICAgICAgIFwi5rC45LuB5Y6/XCIsXHJcbiAgICAgICAgICBcIuWFg+iwi+WOv1wiLFxyXG4gICAgICAgICAgXCLmrablrprljr9cIixcclxuICAgICAgICAgIFwi56aE5Liw5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLnuqLmsrPlk4jlsLzml4/lvZ3ml4/oh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLokpnoh6rljr9cIixcclxuICAgICAgICAgIFwi5Liq5pen5biCXCIsXHJcbiAgICAgICAgICBcIuW8gOi/nOW4glwiLFxyXG4gICAgICAgICAgXCLnu7/mmKXljr9cIixcclxuICAgICAgICAgIFwi5bu65rC05Y6/XCIsXHJcbiAgICAgICAgICBcIuefs+Wxj+WOv1wiLFxyXG4gICAgICAgICAgXCLlvKXli5Lljr9cIixcclxuICAgICAgICAgIFwi5rO46KW/5Y6/XCIsXHJcbiAgICAgICAgICBcIuWFg+mYs+WOv1wiLFxyXG4gICAgICAgICAgXCLnuqLmsrPljr9cIixcclxuICAgICAgICAgIFwi6YeR5bmz6IuX5peP55G25peP5YKj5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuays+WPo+eRtuaXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLlsY/ovrnoi5fml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuaWh+WxseWjruaXj+iLl+aXj+iHquayu+W3nlwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuaWh+WxseWOv1wiLFxyXG4gICAgICAgICAgXCLnoJrlsbHljr9cIixcclxuICAgICAgICAgIFwi6KW/55W05Y6/XCIsXHJcbiAgICAgICAgICBcIum6u+agl+WdoeWOv1wiLFxyXG4gICAgICAgICAgXCLpqazlhbPljr9cIixcclxuICAgICAgICAgIFwi5LiY5YyX5Y6/XCIsXHJcbiAgICAgICAgICBcIuW5v+WNl+WOv1wiLFxyXG4gICAgICAgICAgXCLlr4zlroHljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuilv+WPjOeJiOe6s+WCo+aXj+iHquayu+W3nlwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuaZr+a0quW4glwiLFxyXG4gICAgICAgICAgXCLli5Dmtbfljr9cIixcclxuICAgICAgICAgIFwi5YuQ6IWK5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIuilv+iXj1wiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuaLieiQqOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWfjuWFs+WMulwiLFxyXG4gICAgICAgICAgXCLmnpflkajljr9cIixcclxuICAgICAgICAgIFwi5b2T6ZuE5Y6/XCIsXHJcbiAgICAgICAgICBcIuWwvOacqOWOv1wiLFxyXG4gICAgICAgICAgXCLmm7LmsLTljr9cIixcclxuICAgICAgICAgIFwi5aCG6b6Z5b635bqG5Y6/XCIsXHJcbiAgICAgICAgICBcIui+vuWtnOWOv1wiLFxyXG4gICAgICAgICAgXCLloqjnq7nlt6XljaHljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumCo+absuWcsOWMulwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIumCo+absuWOv1wiLFxyXG4gICAgICAgICAgXCLlmInpu47ljr9cIixcclxuICAgICAgICAgIFwi5q+U5aaC5Y6/XCIsXHJcbiAgICAgICAgICBcIuiBguiNo+WOv1wiLFxyXG4gICAgICAgICAgXCLlronlpJrljr9cIixcclxuICAgICAgICAgIFwi55Sz5omO5Y6/XCIsXHJcbiAgICAgICAgICBcIue0ouWOv1wiLFxyXG4gICAgICAgICAgXCLnj63miIjljr9cIixcclxuICAgICAgICAgIFwi5be06Z2S5Y6/XCIsXHJcbiAgICAgICAgICBcIuWwvOeOm+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5piM6YO95Zyw5Yy6XCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5piM6YO95Y6/XCIsXHJcbiAgICAgICAgICBcIuaxn+i+vuWOv1wiLFxyXG4gICAgICAgICAgXCLotKHop4nljr9cIixcclxuICAgICAgICAgIFwi57G75LmM6b2Q5Y6/XCIsXHJcbiAgICAgICAgICBcIuS4gemdkuWOv1wiLFxyXG4gICAgICAgICAgXCLlr5/pm4Xljr9cIixcclxuICAgICAgICAgIFwi5YWr5a6/5Y6/XCIsXHJcbiAgICAgICAgICBcIuW3pui0oeWOv1wiLFxyXG4gICAgICAgICAgXCLoipLlurfljr9cIixcclxuICAgICAgICAgIFwi5rSb6ZqG5Y6/XCIsXHJcbiAgICAgICAgICBcIui+ueWdneWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5p6X6Iqd5Zyw5Yy6XCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5p6X6Iqd5Y6/XCIsXHJcbiAgICAgICAgICBcIuW3peW4g+axn+i+vuWOv1wiLFxyXG4gICAgICAgICAgXCLnsbPmnpfljr9cIixcclxuICAgICAgICAgIFwi5aKo6ISx5Y6/XCIsXHJcbiAgICAgICAgICBcIuazouWvhuWOv1wiLFxyXG4gICAgICAgICAgXCLlr5/pmoXljr9cIixcclxuICAgICAgICAgIFwi5pyX5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlsbHljZflnLDljLpcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkuYPkuJzljr9cIixcclxuICAgICAgICAgIFwi5omO5ZuK5Y6/XCIsXHJcbiAgICAgICAgICBcIui0oeWYjuWOv1wiLFxyXG4gICAgICAgICAgXCLmoZHml6Xljr9cIixcclxuICAgICAgICAgIFwi55C857uT5Y6/XCIsXHJcbiAgICAgICAgICBcIuabsuadvuWOv1wiLFxyXG4gICAgICAgICAgXCLmjqrnvo7ljr9cIixcclxuICAgICAgICAgIFwi5rSb5omO5Y6/XCIsXHJcbiAgICAgICAgICBcIuWKoOafpeWOv1wiLFxyXG4gICAgICAgICAgXCLpmoblrZDljr9cIixcclxuICAgICAgICAgIFwi6ZSZ6YKj5Y6/XCIsXHJcbiAgICAgICAgICBcIua1quWNoeWtkOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5pel5ZaA5YiZ5Zyw5Yy6XCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5pel5ZaA5YiZ5biCXCIsXHJcbiAgICAgICAgICBcIuWNl+acqOael+WOv1wiLFxyXG4gICAgICAgICAgXCLmsZ/lrZzljr9cIixcclxuICAgICAgICAgIFwi5a6a5pel5Y6/XCIsXHJcbiAgICAgICAgICBcIuiQqOi/puWOv1wiLFxyXG4gICAgICAgICAgXCLmi4nlrZzljr9cIixcclxuICAgICAgICAgIFwi5piC5LuB5Y6/XCIsXHJcbiAgICAgICAgICBcIuiwoumAmumXqOWOv1wiLFxyXG4gICAgICAgICAgXCLnmb3mnJfljr9cIixcclxuICAgICAgICAgIFwi5LuB5biD5Y6/XCIsXHJcbiAgICAgICAgICBcIuW6t+mprOWOv1wiLFxyXG4gICAgICAgICAgXCLlrprnu5Pljr9cIixcclxuICAgICAgICAgIFwi5Luy5be05Y6/XCIsXHJcbiAgICAgICAgICBcIuS6muS4nOWOv1wiLFxyXG4gICAgICAgICAgXCLlkInpmobljr9cIixcclxuICAgICAgICAgIFwi6IGC5ouJ5pyo5Y6/XCIsXHJcbiAgICAgICAgICBcIuiQqOWYjuWOv1wiLFxyXG4gICAgICAgICAgXCLlspflt7Tljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumYv+mHjOWcsOWMulwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWZtuWwlOWOv1wiLFxyXG4gICAgICAgICAgXCLmma7lhbDljr9cIixcclxuICAgICAgICAgIFwi5pyt6L6+5Y6/XCIsXHJcbiAgICAgICAgICBcIuaXpeWcn+WOv1wiLFxyXG4gICAgICAgICAgXCLpnanlkInljr9cIixcclxuICAgICAgICAgIFwi5pS55YiZ5Y6/XCIsXHJcbiAgICAgICAgICBcIuaOquWLpOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLpmZXopb/nnIFcIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLopb/lronluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLojrLmuZbljLpcIixcclxuICAgICAgICAgIFwi5paw5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIueikeael+WMulwiLFxyXG4gICAgICAgICAgXCLpm4HloZTljLpcIixcclxuICAgICAgICAgIFwi54Ge5qGl5Yy6XCIsXHJcbiAgICAgICAgICBcIuacquWkruWMulwiLFxyXG4gICAgICAgICAgXCLpmI7oia/ljLpcIixcclxuICAgICAgICAgIFwi5Li05r285Yy6XCIsXHJcbiAgICAgICAgICBcIumVv+WuieWMulwiLFxyXG4gICAgICAgICAgXCLpq5jpmbXljr9cIixcclxuICAgICAgICAgIFwi6JOd55Sw5Y6/XCIsXHJcbiAgICAgICAgICBcIuaIt+WOv1wiLFxyXG4gICAgICAgICAgXCLlkajoh7Pljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumTnOW3neW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuiAgOW3nuWMulwiLFxyXG4gICAgICAgICAgXCLnjovnm4rljLpcIixcclxuICAgICAgICAgIFwi5Y2w5Y+w5Yy6XCIsXHJcbiAgICAgICAgICBcIuWunOWQm+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5a6d6bih5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5rit5ruo5Yy6XCIsXHJcbiAgICAgICAgICBcIumHkeWPsOWMulwiLFxyXG4gICAgICAgICAgXCLpmYjku5PljLpcIixcclxuICAgICAgICAgIFwi5bKQ5bGx5Y6/XCIsXHJcbiAgICAgICAgICBcIuWHpOe/lOWOv1wiLFxyXG4gICAgICAgICAgXCLpmYfljr9cIixcclxuICAgICAgICAgIFwi5aSq55m95Y6/XCIsXHJcbiAgICAgICAgICBcIum6n+a4uOWOv1wiLFxyXG4gICAgICAgICAgXCLmibbpo47ljr9cIixcclxuICAgICAgICAgIFwi5Y2D6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuecieWOv1wiLFxyXG4gICAgICAgICAgXCLlh6Tljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWSuOmYs+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuenpumDveWMulwiLFxyXG4gICAgICAgICAgXCLmuK3ln47ljLpcIixcclxuICAgICAgICAgIFwi5p2o6Zm15Yy6XCIsXHJcbiAgICAgICAgICBcIuWFtOW5s+W4glwiLFxyXG4gICAgICAgICAgXCLnpLzms4nljr9cIixcclxuICAgICAgICAgIFwi5rO+6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuawuOWvv+WOv1wiLFxyXG4gICAgICAgICAgXCLkuInljp/ljr9cIixcclxuICAgICAgICAgIFwi5b2s5Y6/XCIsXHJcbiAgICAgICAgICBcIuaXrOmCkeWOv1wiLFxyXG4gICAgICAgICAgXCLplb/mrabljr9cIixcclxuICAgICAgICAgIFwi5Lm+5Y6/XCIsXHJcbiAgICAgICAgICBcIuatpuWKn+WOv1wiLFxyXG4gICAgICAgICAgXCLmt7PljJbljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIua4reWNl+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuS4tOa4reWMulwiLFxyXG4gICAgICAgICAgXCLpn6nln47luIJcIixcclxuICAgICAgICAgIFwi5Y2O6Zi05biCXCIsXHJcbiAgICAgICAgICBcIuiSsuWfjuWOv1wiLFxyXG4gICAgICAgICAgXCLmvbzlhbPljr9cIixcclxuICAgICAgICAgIFwi55m95rC05Y6/XCIsXHJcbiAgICAgICAgICBcIua+hOWfjuWOv1wiLFxyXG4gICAgICAgICAgXCLljY7ljr9cIixcclxuICAgICAgICAgIFwi5ZCI6Ziz5Y6/XCIsXHJcbiAgICAgICAgICBcIuWvjOW5s+WOv1wiLFxyXG4gICAgICAgICAgXCLlpKfojZTljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuW7tuWuieW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWuneWhlOWMulwiLFxyXG4gICAgICAgICAgXCLlronloZ7ljr9cIixcclxuICAgICAgICAgIFwi5rSb5bed5Y6/XCIsXHJcbiAgICAgICAgICBcIuWtkOmVv+WOv1wiLFxyXG4gICAgICAgICAgXCLpu4TpmbXljr9cIixcclxuICAgICAgICAgIFwi5bu25bed5Y6/XCIsXHJcbiAgICAgICAgICBcIuWvjOWOv1wiLFxyXG4gICAgICAgICAgXCLlu7bplb/ljr9cIixcclxuICAgICAgICAgIFwi55SY5rOJ5Y6/XCIsXHJcbiAgICAgICAgICBcIuWunOW3neWOv1wiLFxyXG4gICAgICAgICAgXCLlv5fkuLnljr9cIixcclxuICAgICAgICAgIFwi6buE6b6Z5Y6/XCIsXHJcbiAgICAgICAgICBcIuWQtOi1t+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5rGJ5Lit5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5rGJ5Y+w5Yy6XCIsXHJcbiAgICAgICAgICBcIueVmeWdneWOv1wiLFxyXG4gICAgICAgICAgXCLplYflt7Tljr9cIixcclxuICAgICAgICAgIFwi5Z+O5Zu65Y6/XCIsXHJcbiAgICAgICAgICBcIuWNl+mDkeWOv1wiLFxyXG4gICAgICAgICAgXCLmtIvljr9cIixcclxuICAgICAgICAgIFwi5a6B5by65Y6/XCIsXHJcbiAgICAgICAgICBcIuS9m+WdquWOv1wiLFxyXG4gICAgICAgICAgXCLli4nljr9cIixcclxuICAgICAgICAgIFwi6KW/5Lmh5Y6/XCIsXHJcbiAgICAgICAgICBcIueVpemYs+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5qaG5p6X5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5qaG6Ziz5Yy6XCIsXHJcbiAgICAgICAgICBcIua4hea2p+WOv1wiLFxyXG4gICAgICAgICAgXCLnu6Xlvrfljr9cIixcclxuICAgICAgICAgIFwi56We5pyo5Y6/XCIsXHJcbiAgICAgICAgICBcIuS9s+WOv1wiLFxyXG4gICAgICAgICAgXCLlupzosLfljr9cIixcclxuICAgICAgICAgIFwi5a2Q5rSy5Y6/XCIsXHJcbiAgICAgICAgICBcIumdlui+ueWOv1wiLFxyXG4gICAgICAgICAgXCLmqKrlsbHljr9cIixcclxuICAgICAgICAgIFwi57Gz6ISC5Y6/XCIsXHJcbiAgICAgICAgICBcIuWQtOWgoeWOv1wiLFxyXG4gICAgICAgICAgXCLlrprovrnljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWuieW6t+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuaxiea7qOWMulwiLFxyXG4gICAgICAgICAgXCLntKvpmLPljr9cIixcclxuICAgICAgICAgIFwi5bKa55qL5Y6/XCIsXHJcbiAgICAgICAgICBcIuaXrOmYs+WOv1wiLFxyXG4gICAgICAgICAgXCLplYflnarljr9cIixcclxuICAgICAgICAgIFwi5bmz5Yip5Y6/XCIsXHJcbiAgICAgICAgICBcIuefs+azieWOv1wiLFxyXG4gICAgICAgICAgXCLlroHpmZXljr9cIixcclxuICAgICAgICAgIFwi55m95rKz5Y6/XCIsXHJcbiAgICAgICAgICBcIuaxiemYtOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5ZWG5rSb5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5ZWG5bee5Yy6XCIsXHJcbiAgICAgICAgICBcIumVh+WuieWOv1wiLFxyXG4gICAgICAgICAgXCLlsbHpmLPljr9cIixcclxuICAgICAgICAgIFwi5rSb5Y2X5Y6/XCIsXHJcbiAgICAgICAgICBcIuWVhuWNl+WOv1wiLFxyXG4gICAgICAgICAgXCLkuLnlh6Tljr9cIixcclxuICAgICAgICAgIFwi5p+e5rC05Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIueUmOiCg+ecgVwiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWFsOW3nuW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWfjuWFs+WMulwiLFxyXG4gICAgICAgICAgXCLkuIPph4zmsrPljLpcIixcclxuICAgICAgICAgIFwi6KW/5Zu65Yy6XCIsXHJcbiAgICAgICAgICBcIuWuieWugeWMulwiLFxyXG4gICAgICAgICAgXCLnuqLlj6TljLpcIixcclxuICAgICAgICAgIFwi5rC455m75Y6/XCIsXHJcbiAgICAgICAgICBcIueai+WFsOWOv1wiLFxyXG4gICAgICAgICAgXCLmpobkuK3ljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWYieWzquWFs+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWYieWzquWFs+W4glwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6YeR5piM5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6YeR5bed5Yy6XCIsXHJcbiAgICAgICAgICBcIuawuOaYjOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi55m96ZO25biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi55m96ZO25Yy6XCIsXHJcbiAgICAgICAgICBcIuW5s+W3neWMulwiLFxyXG4gICAgICAgICAgXCLpnZbov5zljr9cIixcclxuICAgICAgICAgIFwi5Lya5a6B5Y6/XCIsXHJcbiAgICAgICAgICBcIuaZr+azsOWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5aSp5rC05biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5riF5rC05Y6/XCIsXHJcbiAgICAgICAgICBcIuenpuWuieWOv1wiLFxyXG4gICAgICAgICAgXCLnlJjosLfljr9cIixcclxuICAgICAgICAgIFwi5q2m5bGx5Y6/XCIsXHJcbiAgICAgICAgICBcIuW8oOWutuW3neWbnuaXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLljJfpgZPljLpcIixcclxuICAgICAgICAgIFwi56em5Z+O5Yy6XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmrablqIHluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlh4nlt57ljLpcIixcclxuICAgICAgICAgIFwi5rCR5Yuk5Y6/XCIsXHJcbiAgICAgICAgICBcIuWPpOa1quWOv1wiLFxyXG4gICAgICAgICAgXCLlpKnnpZ3ol4/ml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumFkuazieW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuiCg+W3nuWMulwiLFxyXG4gICAgICAgICAgXCLnjonpl6jluIJcIixcclxuICAgICAgICAgIFwi5pWm54WM5biCXCIsXHJcbiAgICAgICAgICBcIumHkeWhlOWOv1wiLFxyXG4gICAgICAgICAgXCLogoPljJfokpnlj6Tml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi6Zi/5YWL5aGe5ZOI6JCo5YWL5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuWuieilv+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5byg5o6W5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi55SY5bee5Yy6XCIsXHJcbiAgICAgICAgICBcIuawkeS5kOWOv1wiLFxyXG4gICAgICAgICAgXCLkuLTms73ljr9cIixcclxuICAgICAgICAgIFwi6auY5Y+w5Y6/XCIsXHJcbiAgICAgICAgICBcIuWxseS4ueWOv1wiLFxyXG4gICAgICAgICAgXCLogoPljZfoo5Xlm7rml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuW6humYs+W4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuilv+WzsOWMulwiLFxyXG4gICAgICAgICAgXCLluobln47ljr9cIixcclxuICAgICAgICAgIFwi546v5Y6/XCIsXHJcbiAgICAgICAgICBcIuWNjuaxoOWOv1wiLFxyXG4gICAgICAgICAgXCLlkIjmsLTljr9cIixcclxuICAgICAgICAgIFwi5q2j5a6B5Y6/XCIsXHJcbiAgICAgICAgICBcIuWugeWOv1wiLFxyXG4gICAgICAgICAgXCLplYfljp/ljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuW5s+WHieW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuW0huWzkuWMulwiLFxyXG4gICAgICAgICAgXCLms77lt53ljr9cIixcclxuICAgICAgICAgIFwi54G15Y+w5Y6/XCIsXHJcbiAgICAgICAgICBcIuW0h+S/oeWOv1wiLFxyXG4gICAgICAgICAgXCLljY7kuq3ljr9cIixcclxuICAgICAgICAgIFwi5bqE5rWq5Y6/XCIsXHJcbiAgICAgICAgICBcIumdmeWugeWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5a6a6KW/5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5a6J5a6a5Yy6XCIsXHJcbiAgICAgICAgICBcIumAmua4reWOv1wiLFxyXG4gICAgICAgICAgXCLkuLTmtK7ljr9cIixcclxuICAgICAgICAgIFwi5ryz5Y6/XCIsXHJcbiAgICAgICAgICBcIuWyt+WOv1wiLFxyXG4gICAgICAgICAgXCLmuK3mupDljr9cIixcclxuICAgICAgICAgIFwi6ZmH6KW/5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpmYfljZfluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmrabpg73ljLpcIixcclxuICAgICAgICAgIFwi5oiQ5Y6/XCIsXHJcbiAgICAgICAgICBcIuWuleaYjOWOv1wiLFxyXG4gICAgICAgICAgXCLlurfljr9cIixcclxuICAgICAgICAgIFwi5paH5Y6/XCIsXHJcbiAgICAgICAgICBcIuilv+WSjOWOv1wiLFxyXG4gICAgICAgICAgXCLnpLzljr9cIixcclxuICAgICAgICAgIFwi5Lik5b2T5Y6/XCIsXHJcbiAgICAgICAgICBcIuW+veWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5Li05aSP5Zue5peP6Ieq5rK75beeXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Li05aSP5biCXCIsXHJcbiAgICAgICAgICBcIuS4tOWkj+WOv1wiLFxyXG4gICAgICAgICAgXCLlurfkuZDljr9cIixcclxuICAgICAgICAgIFwi5rC46Z2W5Y6/XCIsXHJcbiAgICAgICAgICBcIuW5v+ays+WOv1wiLFxyXG4gICAgICAgICAgXCLlkozmlL/ljr9cIixcclxuICAgICAgICAgIFwi5Lic5Lmh5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuenr+efs+WxseS/neWuieaXj+S4nOS5oeaXj+aSkuaLieaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi55SY5Y2X6JeP5peP6Ieq5rK75beeXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5ZCI5L2c5biCXCIsXHJcbiAgICAgICAgICBcIuS4tOa9reWOv1wiLFxyXG4gICAgICAgICAgXCLljZPlsLzljr9cIixcclxuICAgICAgICAgIFwi6Iif5puy5Y6/XCIsXHJcbiAgICAgICAgICBcIui/remDqOWOv1wiLFxyXG4gICAgICAgICAgXCLnjpvmm7Lljr9cIixcclxuICAgICAgICAgIFwi56KM5puy5Y6/XCIsXHJcbiAgICAgICAgICBcIuWkj+ays+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLpnZLmtbfnnIFcIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLopb/lroHluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLln47kuK3ljLpcIixcclxuICAgICAgICAgIFwi5Z+O5Lic5Yy6XCIsXHJcbiAgICAgICAgICBcIuWfjuilv+WMulwiLFxyXG4gICAgICAgICAgXCLln47ljJfljLpcIixcclxuICAgICAgICAgIFwi5rmf5rqQ5Y6/XCIsXHJcbiAgICAgICAgICBcIua5n+S4reWOv1wiLFxyXG4gICAgICAgICAgXCLlpKfpgJrlm57ml4/lnJ/ml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIua1t+S4nOWcsOWMulwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuW5s+WuieWOv1wiLFxyXG4gICAgICAgICAgXCLkuZDpg73ljr9cIixcclxuICAgICAgICAgIFwi5rCR5ZKM5Zue5peP5Zyf5peP6Ieq5rK75Y6/XCIsXHJcbiAgICAgICAgICBcIuS6kuWKqeWcn+aXj+iHquayu+WOv1wiLFxyXG4gICAgICAgICAgXCLljJbpmoblm57ml4/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5b6q5YyW5pKS5ouJ5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmtbfljJfol4/ml4/oh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmtbfmmY/ljr9cIixcclxuICAgICAgICAgIFwi56WB6L+e5Y6/XCIsXHJcbiAgICAgICAgICBcIuWImuWvn+WOv1wiLFxyXG4gICAgICAgICAgXCLpl6jmupDlm57ml4/oh6rmsrvljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIua1t+WNl+iXj+aXj+iHquayu+W3nlwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWFseWSjOWOv1wiLFxyXG4gICAgICAgICAgXCLlkIzlvrfljr9cIixcclxuICAgICAgICAgIFwi6LS15b635Y6/XCIsXHJcbiAgICAgICAgICBcIuWFtOa1t+WOv1wiLFxyXG4gICAgICAgICAgXCLotLXljZfljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIum7hOWNl+iXj+aXj+iHquayu+W3nlwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWQjOS7geWOv1wiLFxyXG4gICAgICAgICAgXCLlsJbmiY7ljr9cIixcclxuICAgICAgICAgIFwi5rO95bqT5Y6/XCIsXHJcbiAgICAgICAgICBcIuays+WNl+iSmeWPpOaXj+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5p6c5rSb6JeP5peP6Ieq5rK75beeXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi546b5rKB5Y6/XCIsXHJcbiAgICAgICAgICBcIuePreeOm+WOv1wiLFxyXG4gICAgICAgICAgXCLnlJjlvrfljr9cIixcclxuICAgICAgICAgIFwi6L6+5pel5Y6/XCIsXHJcbiAgICAgICAgICBcIuS5heayu+WOv1wiLFxyXG4gICAgICAgICAgXCLnjpvlpJrljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIueOieagkeiXj+aXj+iHquayu+W3nlwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIueOieagkeWOv1wiLFxyXG4gICAgICAgICAgXCLmnYLlpJrljr9cIixcclxuICAgICAgICAgIFwi56ew5aSa5Y6/XCIsXHJcbiAgICAgICAgICBcIuayu+WkmuWOv1wiLFxyXG4gICAgICAgICAgXCLlm4rosKbljr9cIixcclxuICAgICAgICAgIFwi5puy6bq76I6x5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmtbfopb/okpnlj6Tml4/ol4/ml4/oh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlvrfku6Tlk4jluIJcIixcclxuICAgICAgICAgIFwi5qC85bCU5pyo5biCXCIsXHJcbiAgICAgICAgICBcIuS5jOWFsOWOv1wiLFxyXG4gICAgICAgICAgXCLpg73lhbDljr9cIixcclxuICAgICAgICAgIFwi5aSp5bO75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIuWugeWkj1wiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumTtuW3neW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWFtOW6huWMulwiLFxyXG4gICAgICAgICAgXCLopb/lpI/ljLpcIixcclxuICAgICAgICAgIFwi6YeR5Yek5Yy6XCIsXHJcbiAgICAgICAgICBcIueBteatpuW4glwiLFxyXG4gICAgICAgICAgXCLmsLjlroHljr9cIixcclxuICAgICAgICAgIFwi6LS65YWw5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLnn7PlmLTlsbHluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlpKfmrablj6PljLpcIixcclxuICAgICAgICAgIFwi5oOg5Yac5Yy6XCIsXHJcbiAgICAgICAgICBcIuW5s+e9l+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5ZC05b+g5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5Yip6YCa5Yy6XCIsXHJcbiAgICAgICAgICBcIumdkumTnOWzoeW4glwiLFxyXG4gICAgICAgICAgXCLnm5DmsaDljr9cIixcclxuICAgICAgICAgIFwi5ZCM5b+D5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlm7rljp/luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLljp/lt57ljLpcIixcclxuICAgICAgICAgIFwi6KW/5ZCJ5Y6/XCIsXHJcbiAgICAgICAgICBcIumahuW+t+WOv1wiLFxyXG4gICAgICAgICAgXCLms77mupDljr9cIixcclxuICAgICAgICAgIFwi5b2t6Ziz5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkuK3ljavluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmspnlnaHlpLTljLpcIixcclxuICAgICAgICAgIFwi5Lit5a6B5Y6/XCIsXHJcbiAgICAgICAgICBcIua1t+WOn+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLmlrDnloZcIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkuYzpsoHmnKjpvZDluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlpKnlsbHljLpcIixcclxuICAgICAgICAgIFwi5rKZ5L6d5be05YWL5Yy6XCIsXHJcbiAgICAgICAgICBcIuaWsOW4guWMulwiLFxyXG4gICAgICAgICAgXCLmsLTno6jmsp/ljLpcIixcclxuICAgICAgICAgIFwi5aS05bGv5rKz5Yy6XCIsXHJcbiAgICAgICAgICBcIui+vuWdguWfjuWMulwiLFxyXG4gICAgICAgICAgXCLkuJzlsbHljLpcIixcclxuICAgICAgICAgIFwi5LmM6bKB5pyo6b2Q5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlhYvmi4nnjpvkvp3luIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlhYvmi4nnjpvkvp3ljLpcIixcclxuICAgICAgICAgIFwi54us5bGx5a2Q5Yy6XCIsXHJcbiAgICAgICAgICBcIueZveeisea7qeWMulwiLFxyXG4gICAgICAgICAgXCLkuYzlsJTnpr7ljLpcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWQkOmygeeVquWcsOWMulwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWQkOmygeeVquW4glwiLFxyXG4gICAgICAgICAgXCLmiZjlhYvpgIrljr9cIixcclxuICAgICAgICAgIFwi6YSv5ZaE5Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlk4jlr4blnLDljLpcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlk4jlr4bluIJcIixcclxuICAgICAgICAgIFwi5LyK5ZC+5Y6/XCIsXHJcbiAgICAgICAgICBcIuW3tOmHjOWdpOWTiOiQqOWFi+iHquayu+WOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5ZKM55Sw5Zyw5Yy6XCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5ZKM55Sw5biCXCIsXHJcbiAgICAgICAgICBcIuWSjOeUsOWOv1wiLFxyXG4gICAgICAgICAgXCLmtJvmtabljr9cIixcclxuICAgICAgICAgIFwi5rCR5Liw5Y6/XCIsXHJcbiAgICAgICAgICBcIuearuWxseWOv1wiLFxyXG4gICAgICAgICAgXCLnrZbli5Lljr9cIixcclxuICAgICAgICAgIFwi5LqO55Sw5Y6/XCIsXHJcbiAgICAgICAgICBcIuWiqOeOieWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi6Zi/5YWL6IuP5Zyw5Yy6XCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi6Zi/5YWL6IuP5biCXCIsXHJcbiAgICAgICAgICBcIua4qeWuv+WOv1wiLFxyXG4gICAgICAgICAgXCLmspnpm4Xljr9cIixcclxuICAgICAgICAgIFwi5ouc5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIumYv+eTpuaPkOWOv1wiLFxyXG4gICAgICAgICAgXCLlupPovabljr9cIixcclxuICAgICAgICAgIFwi5p+v5Z2q5Y6/XCIsXHJcbiAgICAgICAgICBcIuaWsOWSjOWOv1wiLFxyXG4gICAgICAgICAgXCLkuYzku4Dljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWWgOS7gOWcsOWMulwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWWgOS7gOW4glwiLFxyXG4gICAgICAgICAgXCLlt7TmpZrljr9cIixcclxuICAgICAgICAgIFwi5rO95pmu5Y6/XCIsXHJcbiAgICAgICAgICBcIuS8veW4iOWOv1wiLFxyXG4gICAgICAgICAgXCLlj7bln47ljr9cIixcclxuICAgICAgICAgIFwi5bKz5pmu5rmW5Y6/XCIsXHJcbiAgICAgICAgICBcIueWj+WLkuWOv1wiLFxyXG4gICAgICAgICAgXCLpuqbnm5bmj5Dljr9cIixcclxuICAgICAgICAgIFwi6Iux5ZCJ5rKZ5Y6/XCIsXHJcbiAgICAgICAgICBcIuiOjui9puWOv1wiLFxyXG4gICAgICAgICAgXCLnlo/pmYTljr9cIixcclxuICAgICAgICAgIFwi5aGU5LuA5bqT5bCU5bmy5aGU5ZCJ5YWL6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlhYvlrZzli5Loi4/mn6/lsJTlhYvlrZzoh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLpmL/lm77ku4DluIJcIixcclxuICAgICAgICAgIFwi6Zi/5ZCI5aWH5Y6/XCIsXHJcbiAgICAgICAgICBcIuS5jOaBsOWOv1wiLFxyXG4gICAgICAgICAgXCLpmL/lhYvpmbbljr9cIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuW3tOmfs+mDrealnuiSmeWPpOiHquayu+W3nlwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuW6k+WwlOWLkuW4glwiLFxyXG4gICAgICAgICAgXCLlkozpnZnljr9cIixcclxuICAgICAgICAgIFwi5bCJ54qB5Y6/XCIsXHJcbiAgICAgICAgICBcIuWSjOehleWOv1wiLFxyXG4gICAgICAgICAgXCLkuJTmnKvljr9cIixcclxuICAgICAgICAgIFwi5Y2a5rmW5Y6/XCIsXHJcbiAgICAgICAgICBcIui9ruWPsOWOv1wiLFxyXG4gICAgICAgICAgXCLoi6Xnvozljr9cIixcclxuICAgICAgICAgIFwi54SJ6ICG5Zue5peP6Ieq5rK75Y6/XCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmmIzlkInlm57ml4/oh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLmmIzlkInluIJcIixcclxuICAgICAgICAgIFwi6Zic5bq35biCXCIsXHJcbiAgICAgICAgICBcIuWlh+WPsOWOv1wiLFxyXG4gICAgICAgICAgXCLnjpvnurPmlq/ljr9cIixcclxuICAgICAgICAgIFwi5ZCJ5pyo6JCo5bCU5Y6/XCIsXHJcbiAgICAgICAgICBcIuWRvOWbvuWjgeWOv1wiLFxyXG4gICAgICAgICAgXCLmnKjlnpLlk4jokKjlhYvoh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi57Gz5rOJ5biCXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLljZrlsJTloZTmi4nokpnlj6Toh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLljZrkuZDluIJcIixcclxuICAgICAgICAgIFwi57K+5rKz5Y6/XCIsXHJcbiAgICAgICAgICBcIua4qeazieWOv1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi55+z5rKz5a2QXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi55+z5rKz5a2QXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLpmL/mi4nlsJRcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLpmL/mi4nlsJRcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuWbvuacqOiIkuWFi1wiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWbvuacqOiIkuWFi1wiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5LqU5a625rigXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5LqU5a625rigXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLkvIrnioHlk4jokKjlhYvoh6rmsrvlt55cIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLkvIrlroHluIJcIixcclxuICAgICAgICAgIFwi5aWO5bGv5biCXCIsXHJcbiAgICAgICAgICBcIuS8iuWugeWOv1wiLFxyXG4gICAgICAgICAgXCLnibnlhYvmlq/ljr9cIixcclxuICAgICAgICAgIFwi5bC85YuS5YWL5Y6/XCIsXHJcbiAgICAgICAgICBcIuaYreiLj+WOv1wiLFxyXG4gICAgICAgICAgXCLmlrDmupDljr9cIixcclxuICAgICAgICAgIFwi6ZyN5Z+O5Y6/XCIsXHJcbiAgICAgICAgICBcIuW3qeeVmeWOv1wiLFxyXG4gICAgICAgICAgXCLlr5/luIPmn6XlsJTplKHkvK/oh6rmsrvljr9cIixcclxuICAgICAgICAgIFwi5aGU5Z+O5Zyw5Yy6XCIsXHJcbiAgICAgICAgICBcIumYv+WLkuazsOWcsOWMulwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLlj7Dmub7nnIFcIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlj7DljJfluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlhoXmuZbljLpcIixcclxuICAgICAgICAgIFwi5Y2X5riv5Yy6XCIsXHJcbiAgICAgICAgICBcIuS4reato+WMulwiLFxyXG4gICAgICAgICAgXCLkuIfljY7ljLpcIixcclxuICAgICAgICAgIFwi5aSn5ZCM5Yy6XCIsXHJcbiAgICAgICAgICBcIuS4reWxseWMulwiLFxyXG4gICAgICAgICAgXCLmnb7lsbHljLpcIixcclxuICAgICAgICAgIFwi5aSn5a6J5Yy6XCIsXHJcbiAgICAgICAgICBcIuS/oeS5ieWMulwiLFxyXG4gICAgICAgICAgXCLmloflsbHljLpcIixcclxuICAgICAgICAgIFwi5aOr5p6X5Yy6XCIsXHJcbiAgICAgICAgICBcIuWMl+aKleWMulwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5paw5YyX5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5p2/5qGl5Yy6XCIsXHJcbiAgICAgICAgICBcIuaxkOatouWMulwiLFxyXG4gICAgICAgICAgXCLmlrDlupfljLpcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIuahg+WbreW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWFtuS7llwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgXCJuYW1lXCI6IFwi5Y+w5Lit5biCXCIsXHJcbiAgICAgICAgXCJhcmVhXCI6IFtcclxuICAgICAgICAgIFwi5YW25LuWXCJcclxuICAgICAgICBdXHJcbiAgICAgIH0sXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLlj7DljZfluIJcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLlhbbku5ZcIlxyXG4gICAgICAgIF1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIumrmOmbhOW4glwiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIuWFtuS7llwiXHJcbiAgICAgICAgXVxyXG4gICAgICB9XHJcbiAgICBdXHJcbiAgfSxcclxuICB7XHJcbiAgICBcIm5hbWVcIjogXCLmvrPpl6hcIixcclxuICAgIFwiY2l0eVwiOiBbXHJcbiAgICAgIHtcclxuICAgICAgICBcIm5hbWVcIjogXCLmvrPpl6hcIixcclxuICAgICAgICBcImFyZWFcIjogW1xyXG4gICAgICAgICAgXCLoirHlnLDnjpvloILljLpcIixcclxuICAgICAgICAgIFwi5Zyj5a6J5aSa5bC85aCC5Yy6XCIsXHJcbiAgICAgICAgICBcIuWkp+WgguWMulwiLFxyXG4gICAgICAgICAgXCLmnJvlvrfloILljLpcIixcclxuICAgICAgICAgIFwi6aOO6aG65aCC5Yy6XCIsXHJcbiAgICAgICAgICBcIuWYieaooeWgguWMulwiLFxyXG4gICAgICAgICAgXCLlnKPmlrnmtY7lkITloILljLpcIixcclxuICAgICAgICAgIFwi6Lev5Ye8XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9LFxyXG4gIHtcclxuICAgIFwibmFtZVwiOiBcIummmea4r1wiLFxyXG4gICAgXCJjaXR5XCI6IFtcclxuICAgICAge1xyXG4gICAgICAgIFwibmFtZVwiOiBcIummmea4r1wiLFxyXG4gICAgICAgIFwiYXJlYVwiOiBbXHJcbiAgICAgICAgICBcIua3seawtOWfl+WMulwiLFxyXG4gICAgICAgICAgXCLmsrnlsJbml7rljLpcIixcclxuICAgICAgICAgIFwi5Lmd6b6Z5Z+O5Yy6XCIsXHJcbiAgICAgICAgICBcIum7hOWkp+S7meWMulwiLFxyXG4gICAgICAgICAgXCLop4LloZjljLpcIixcclxuICAgICAgICAgIFwi5YyX5Yy6XCIsXHJcbiAgICAgICAgICBcIuWkp+WflOWMulwiLFxyXG4gICAgICAgICAgXCLmspnnlLDljLpcIixcclxuICAgICAgICAgIFwi6KW/6LSh5Yy6XCIsXHJcbiAgICAgICAgICBcIuWFg+acl+WMulwiLFxyXG4gICAgICAgICAgXCLlsa/pl6jljLpcIixcclxuICAgICAgICAgIFwi6I2D5rm+5Yy6XCIsXHJcbiAgICAgICAgICBcIuiRtemdkuWMulwiLFxyXG4gICAgICAgICAgXCLnprvlspvljLpcIixcclxuICAgICAgICAgIFwi5Lit6KW/5Yy6XCIsXHJcbiAgICAgICAgICBcIua5vuS7lOWMulwiLFxyXG4gICAgICAgICAgXCLkuJzljLpcIixcclxuICAgICAgICAgIFwi5Y2X5Yy6XCJcclxuICAgICAgICBdXHJcbiAgICAgIH1cclxuICAgIF1cclxuICB9XHJcbl0iLCJpbXBvcnQgcmVxdWVzdCBmcm9tICdAL3V0aWxzL3JlcXVlc3QnXHJcbmltcG9ydCB7IHVwRmlsc2UgfSBmcm9tICdAL3V0aWxzL3JlcXVlc3QnO1xyXG5cclxuLy/kuIrkvKDmlZHmiqTogIXkv6Hmga9cclxuZXhwb3J0IGZ1bmN0aW9uIGFkZHJlc2N1ZXIoZGF0YSl7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOicvYXBpL2FkZF9yZXNjdWVyJyxcclxuXHRcdG1ldGhvZDoncG9zdCcsXHJcblx0XHRkYXRhXHJcblx0fSlcclxufVxyXG5cclxuLy/kuIrkvKDlm77niYdcclxuZXhwb3J0IGZ1bmN0aW9uIHVwbG9hZChkYXRhKXtcclxuXHRyZXR1cm4gdXBGaWxzZSh7XHJcblx0XHR1cmw6Jy9hcGkvdXBsb2FkL2ltYWdlJyxcclxuXHRcdG1ldGhvZDoncG9zdCcsXHJcblx0XHRkYXRhXHJcblx0fSlcclxufVxyXG4vL+WPkeihqOaWh+eroFxyXG5leHBvcnQgZnVuY3Rpb24gYXJ0aWNsZXNhdmUoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvY2lyY2xlL2FydGljbGVzYXZlJyxcclxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG4vL+aIkeWPkeihqOeahOaWh+eroFxyXG5leHBvcnQgZnVuY3Rpb24gbXlhcnRpY2xlKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2NpcmNsZS9teWFydGljbGUnLFxyXG5cdFx0bWV0aG9kOiAncG9zdCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbi8v5Y+R6KGo6K+E6K66XHJcbmV4cG9ydCBmdW5jdGlvbiByZXBseWFzayhkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9hZGRfYScsXHJcblx0XHRtZXRob2Q6ICdwb3N0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG5cclxuLy/pl67nrZTor6bmg4VcclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGx5bGlzdChkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9xX2xpc3QnLFxyXG5cdFx0bWV0aG9kOiAnZ2V0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG5cclxuLy/or4TorrrliJfooahcclxuZXhwb3J0IGZ1bmN0aW9uIG15cmVwbHlsaXN0KGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2FfbGlzdCcsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG4vL+acuuaehOaQnOe0olxyXG5leHBvcnQgZnVuY3Rpb24gbWVjaGFuaXNtKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL21lY2hhbmlzbScsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG4vLyDmjZDmrL7mhI/lkJEgY2hvc2ludGVudGlvblxyXG5leHBvcnQgZnVuY3Rpb24gY2hvc2ludGVudGlvbihkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9pbnRlbnRpb24nLFxyXG5cdFx0bWV0aG9kOiAnZ2V0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG5cclxuLy8g54ix5b+D5o2Q6LWgIGpvaW5Eb25hIOaPkOS6pFxyXG5leHBvcnQgZnVuY3Rpb24gam9pbkRvbmEoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvaW50ZW50aW9uJyxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIOaNkOi1oOWIl+ihqCAgZ2V0RG9uYUxpc3RcclxuZXhwb3J0IGZ1bmN0aW9uIGdldERvbmFMaXN0KGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2J1bGxldGluJyxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIOaIkeeahOaNkOi1oCBNeURvbmFMaXN0XHJcbmV4cG9ydCBmdW5jdGlvbiBNeURvbmFMaXN0KGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL215X2RvbmF0ZScsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG4vLyDojrflvpfor4HkuaYgZ2V0Q2VydGlmaWNhdGVcclxuZXhwb3J0IGZ1bmN0aW9uIGdldENlcnRpZmljYXRlKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2RldGFpbF90cmFpbmluZycsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59IiwiaW1wb3J0IHJlcXVlc3QgZnJvbSAnQC91dGlscy9yZXF1ZXN0J1xyXG5cclxuXHJcbi8vIOe7n+iuoemHkeminVxyXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZWRPcmRlcmtleShkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9vcmRlci9jb21wdXRlZC8nK2RhdGEub3JkZXJrZXksXHJcblx0XHRtZXRob2Q6ICdwb3N0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG5cclxuLy8g5Yib5bu66K6i5Y2VXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcmRlcmtleShkYXRhLGtleSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvZG9uYXRlL2NyZWF0ZScsXHJcblx0XHRtZXRob2Q6ICdwb3N0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG4vLyDotKbmiLfkvZnpop1cclxuZXhwb3J0IGZ1bmN0aW9uIGJhbGFuY2UoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvdXNlci9iYWxhbmNlJyxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbi8vIOiuouWNleaUr+S7mFxyXG5leHBvcnQgZnVuY3Rpb24gb3JkZXJQYXkoZGF0YSkge1xyXG5cdHJldHVybiByZXF1ZXN0KHtcclxuXHRcdHVybDogJy9hcGkvb3JkZXIvcGF5JyxcclxuXHRcdG1ldGhvZDogJ3Bvc3QnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG4iLCJjb25zdCBNSU5fRElTVEFOQ0UgPSAxMDtcclxuZXhwb3J0IGRlZmF1bHQge1xyXG5cdGRhdGEoKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR1bmlTaG93OiBmYWxzZSxcclxuXHRcdFx0bGVmdDogMCxcclxuXHRcdFx0YnV0dG9uU2hvdzogJ25vbmUnLFxyXG5cdFx0XHRhbmk6IGZhbHNlLFxyXG5cdFx0XHRtb3ZlTGVmdDonJ1xyXG5cdFx0fVxyXG5cdH0sXHJcblx0d2F0Y2g6IHtcclxuXHRcdHNob3cobmV3VmFsKSB7XHJcblx0XHRcdGlmICh0aGlzLmF1dG9DbG9zZSkgcmV0dXJuXHJcblx0XHRcdHRoaXMub3BlblN0YXRlKG5ld1ZhbClcclxuXHRcdH0sXHJcblx0XHRsZWZ0KCl7XHJcblx0XHRcdHRoaXMubW92ZUxlZnQgPSBgdHJhbnNsYXRlWCgke3RoaXMubGVmdH1weClgXHJcblx0XHR9LFxyXG5cdFx0YnV0dG9uU2hvdyhuZXdWYWwpe1xyXG5cdFx0XHRpZiAodGhpcy5hdXRvQ2xvc2UpIHJldHVyblxyXG5cdFx0XHR0aGlzLm9wZW5TdGF0ZShuZXdWYWwpXHJcblx0XHR9LFxyXG5cdFx0bGVmdE9wdGlvbnMoKSB7XHJcblx0XHRcdHRoaXMuaW5pdCgpXHJcblx0XHR9LFxyXG5cdFx0cmlnaHRPcHRpb25zKCkge1xyXG5cdFx0XHR0aGlzLmluaXQoKVxyXG5cdFx0fVxyXG5cdH0sXHJcblx0bW91bnRlZCgpIHtcclxuXHRcdC8vIHRoaXMucG9zaXRpb24gPSB7fVxyXG5cdFx0aWYgKHRoaXMuc3dpcGVhY3Rpb24uY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHR0aGlzLnN3aXBlYWN0aW9uLmNoaWxkcmVuLnB1c2godGhpcylcclxuXHRcdH1cclxuXHRcdHRoaXMuaW5pdCgpXHJcblx0fSxcclxuXHRiZWZvcmVEZXN0b3koKSB7XHJcblx0XHR0aGlzLnN3aXBlYWN0aW9uLmNoaWxkcmVuLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XHJcblx0XHRcdGlmIChpdGVtID09PSB0aGlzKSB7XHJcblx0XHRcdFx0dGhpcy5zd2lwZWFjdGlvbi5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpXHJcblx0XHRcdH1cclxuXHRcdH0pXHJcblx0fSxcclxuXHRtZXRob2RzOiB7XHJcblx0XHRpbml0KCl7XHJcblx0XHRcdGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKVxyXG5cdFx0XHR0aGlzLnRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5nZXRTZWxlY3RvclF1ZXJ5KClcclxuXHRcdFx0fSwgMTAwKVxyXG5cdFx0XHQvLyDnp7vliqjot53nprtcclxuXHRcdFx0dGhpcy5sZWZ0ID0gMFxyXG5cdFx0XHR0aGlzLnggPSAwXHJcblx0XHR9LFxyXG5cdFx0Y2xvc2VTd2lwZShlKSB7XHJcblx0XHRcdGlmICghdGhpcy5hdXRvQ2xvc2UpIHJldHVyblxyXG5cdFx0XHR0aGlzLnN3aXBlYWN0aW9uLmNsb3NlT3RoZXIodGhpcylcclxuXHRcdH0sXHJcblx0XHRhcHBUb3VjaFN0YXJ0KGUpIHtcclxuXHRcdFx0Y29uc3Qge1xyXG5cdFx0XHRcdGNsaWVudFhcclxuXHRcdFx0fSA9IGUuY2hhbmdlZFRvdWNoZXNbMF1cclxuXHRcdFx0dGhpcy5jbGllbnRYID0gY2xpZW50WFxyXG5cdFx0XHR0aGlzLnRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpXHJcblx0XHR9LFxyXG5cdFx0YXBwVG91Y2hFbmQoZSwgaW5kZXgsIGl0ZW0sIHBvc2l0aW9uKSB7XHJcblx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRjbGllbnRYXHJcblx0XHRcdH0gPSBlLmNoYW5nZWRUb3VjaGVzWzBdXHJcblx0XHRcdC8vIGZpeGVkIGJ5IHh4eHgg5qih5ouf54K55Ye75LqL5Lu277yM6Kej5YazIGlvcyAxMyDngrnlh7vljLrln5/plJnkvY3nmoTpl67pophcclxuXHRcdFx0bGV0IGRpZmYgPSBNYXRoLmFicyh0aGlzLmNsaWVudFggLSBjbGllbnRYKVxyXG5cdFx0XHRsZXQgdGltZSA9IChuZXcgRGF0ZSgpLmdldFRpbWUoKSkgLSB0aGlzLnRpbWVzdGFtcFxyXG5cdFx0XHRpZiAoZGlmZiA8IDQwICYmIHRpbWUgPCAzMDApIHtcclxuXHRcdFx0XHR0aGlzLiRlbWl0KCdjbGljaycsIHtcclxuXHRcdFx0XHRcdGNvbnRlbnQ6IGl0ZW0sXHJcblx0XHRcdFx0XHRpbmRleCxcclxuXHRcdFx0XHRcdHBvc2l0aW9uXHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHRcdHRvdWNoc3RhcnQoZSkge1xyXG5cdFx0XHRpZiAodGhpcy5kaXNhYmxlZCkgcmV0dXJuXHJcblx0XHRcdHRoaXMuYW5pID0gZmFsc2VcclxuXHRcdFx0dGhpcy54ID0gdGhpcy5sZWZ0IHx8IDBcclxuXHRcdFx0dGhpcy5zdG9wVG91Y2hTdGFydChlKVxyXG5cdFx0XHR0aGlzLmF1dG9DbG9zZSAmJiB0aGlzLmNsb3NlU3dpcGUoKVxyXG5cdFx0fSxcclxuXHRcdHRvdWNobW92ZShlKSB7XHJcblx0XHRcdGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm5cclxuXHRcdFx0Ly8g5piv5ZCm5Y+v5Lul5ruR5Yqo6aG16Z2iXHJcblx0XHRcdHRoaXMuc3RvcFRvdWNoTW92ZShlKTtcclxuXHRcdFx0aWYgKHRoaXMuZGlyZWN0aW9uICE9PSAnaG9yaXpvbnRhbCcpIHtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMubW92ZSh0aGlzLnggKyB0aGlzLmRlbHRhWClcclxuXHRcdH0sXHJcblx0XHR0b3VjaGVuZCgpIHtcclxuXHRcdFx0aWYgKHRoaXMuZGlzYWJsZWQpIHJldHVyblxyXG5cdFx0XHR0aGlzLm1vdmVEaXJlY3Rpb24odGhpcy5sZWZ0KVxyXG5cdFx0fSxcclxuXHRcdC8qKlxyXG5cdFx0ICog6K6+572u56e75Yqo6Led56a7XHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gdmFsdWVcclxuXHRcdCAqL1xyXG5cdFx0bW92ZSh2YWx1ZSkge1xyXG5cdFx0XHR2YWx1ZSA9IHZhbHVlIHx8IDBcclxuXHRcdFx0Y29uc3QgbGVmdFdpZHRoID0gdGhpcy5sZWZ0V2lkdGhcclxuXHRcdFx0Y29uc3QgcmlnaHRXaWR0aCA9IHRoaXMucmlnaHRXaWR0aFxyXG5cdFx0XHQvLyDojrflj5blj6/mu5HliqjojIPlm7RcclxuXHRcdFx0dGhpcy5sZWZ0ID0gdGhpcy5yYW5nZSh2YWx1ZSwgLXJpZ2h0V2lkdGgsIGxlZnRXaWR0aCk7XHJcblx0XHR9LFxyXG5cclxuXHRcdC8qKlxyXG5cdFx0ICog6I635Y+W6IyD5Zu0XHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gbnVtXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gbWluXHJcblx0XHQgKiBAcGFyYW0ge09iamVjdH0gbWF4XHJcblx0XHQgKi9cclxuXHRcdHJhbmdlKG51bSwgbWluLCBtYXgpIHtcclxuXHRcdFx0cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG51bSwgbWluKSwgbWF4KTtcclxuXHRcdH0sXHJcblx0XHQvKipcclxuXHRcdCAqIOenu+WKqOaWueWQkeWIpOaWrVxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGxlZnRcclxuXHRcdCAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZVxyXG5cdFx0ICovXHJcblx0XHRtb3ZlRGlyZWN0aW9uKGxlZnQpIHtcclxuXHRcdFx0Y29uc3QgdGhyZXNob2xkID0gdGhpcy50aHJlc2hvbGRcclxuXHRcdFx0Y29uc3QgaXNvcGVuID0gdGhpcy5pc29wZW4gfHwgJ25vbmUnXHJcblx0XHRcdGNvbnN0IGxlZnRXaWR0aCA9IHRoaXMubGVmdFdpZHRoXHJcblx0XHRcdGNvbnN0IHJpZ2h0V2lkdGggPSB0aGlzLnJpZ2h0V2lkdGhcclxuXHRcdFx0aWYgKHRoaXMuZGVsdGFYID09PSAwKSB7XHJcblx0XHRcdFx0dGhpcy5vcGVuU3RhdGUoJ25vbmUnKVxyXG5cdFx0XHRcdHJldHVyblxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICgoaXNvcGVuID09PSAnbm9uZScgJiYgcmlnaHRXaWR0aCA+IDAgJiYgLWxlZnQgPiB0aHJlc2hvbGQpIHx8IChpc29wZW4gIT09ICdub25lJyAmJiByaWdodFdpZHRoID4gMCAmJiByaWdodFdpZHRoICtcclxuXHRcdFx0XHRcdGxlZnQgPCB0aHJlc2hvbGQpKSB7XHJcblx0XHRcdFx0Ly8gcmlnaHRcclxuXHRcdFx0XHR0aGlzLm9wZW5TdGF0ZSgncmlnaHQnKVxyXG5cdFx0XHR9IGVsc2UgaWYgKChpc29wZW4gPT09ICdub25lJyAmJiBsZWZ0V2lkdGggPiAwICYmIGxlZnQgPiB0aHJlc2hvbGQpIHx8IChpc29wZW4gIT09ICdub25lJyAmJiBsZWZ0V2lkdGggPiAwICYmXHJcblx0XHRcdFx0XHRsZWZ0V2lkdGggLSBsZWZ0IDwgdGhyZXNob2xkKSkge1xyXG5cdFx0XHRcdC8vIGxlZnRcclxuXHRcdFx0XHR0aGlzLm9wZW5TdGF0ZSgnbGVmdCcpXHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Ly8gZGVmYXVsdFxyXG5cdFx0XHRcdHRoaXMub3BlblN0YXRlKCdub25lJylcclxuXHRcdFx0fVxyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIOW8gOWQr+eKtuaAgVxyXG5cdFx0ICogQHBhcmFtIHtCb29sZWFufSB0eXBlXHJcblx0XHQgKi9cclxuXHRcdG9wZW5TdGF0ZSh0eXBlKSB7XHJcblx0XHRcdGNvbnN0IGxlZnRXaWR0aCA9IHRoaXMubGVmdFdpZHRoXHJcblx0XHRcdGNvbnN0IHJpZ2h0V2lkdGggPSB0aGlzLnJpZ2h0V2lkdGhcclxuXHRcdFx0bGV0IGxlZnQgPSAnJ1xyXG5cdFx0XHR0aGlzLmlzb3BlbiA9IHRoaXMuaXNvcGVuID8gdGhpcy5pc29wZW4gOiAnbm9uZSdcclxuXHRcdFx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRcdFx0Y2FzZSBcImxlZnRcIjpcclxuXHRcdFx0XHRcdGxlZnQgPSBsZWZ0V2lkdGhcclxuXHRcdFx0XHRcdGJyZWFrXHJcblx0XHRcdFx0Y2FzZSBcInJpZ2h0XCI6XHJcblx0XHRcdFx0XHRsZWZ0ID0gLXJpZ2h0V2lkdGhcclxuXHRcdFx0XHRcdGJyZWFrXHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdGxlZnQgPSAwXHJcblx0XHRcdH1cclxuXHJcblxyXG5cdFx0XHRpZiAodGhpcy5pc29wZW4gIT09IHR5cGUpIHtcclxuXHRcdFx0XHR0aGlzLnRocm90dGxlID0gdHJ1ZVxyXG5cdFx0XHRcdHRoaXMuJGVtaXQoJ2NoYW5nZScsIHR5cGUpXHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuaXNvcGVuID0gdHlwZVxyXG5cdFx0XHQvLyDmt7vliqDliqjnlLvnsbtcclxuXHRcdFx0dGhpcy5hbmkgPSB0cnVlXHJcblx0XHRcdHRoaXMuJG5leHRUaWNrKCgpID0+IHtcclxuXHRcdFx0XHR0aGlzLm1vdmUobGVmdClcclxuXHRcdFx0fSlcclxuXHRcdFx0Ly8g6K6+572u5pyA57uI56e75Yqo5L2N572uLOeQhuiuuuS4iuWPquimgei/m+WFpeWIsOi/meS4quWHveaVsO+8jOiCr+WumuaYr+imgeaJk+W8gOeahFxyXG5cdFx0fSxcclxuXHRcdGNsb3NlKCkge1xyXG5cdFx0XHR0aGlzLm9wZW5TdGF0ZSgnbm9uZScpXHJcblx0XHR9LFxyXG5cdFx0Z2V0RGlyZWN0aW9uKHgsIHkpIHtcclxuXHRcdFx0aWYgKHggPiB5ICYmIHggPiBNSU5fRElTVEFOQ0UpIHtcclxuXHRcdFx0XHRyZXR1cm4gJ2hvcml6b250YWwnO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh5ID4geCAmJiB5ID4gTUlOX0RJU1RBTkNFKSB7XHJcblx0XHRcdFx0cmV0dXJuICd2ZXJ0aWNhbCc7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuICcnO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIOmHjee9rua7keWKqOeKtuaAgVxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XHJcblx0XHQgKi9cclxuXHRcdHJlc2V0VG91Y2hTdGF0dXMoKSB7XHJcblx0XHRcdHRoaXMuZGlyZWN0aW9uID0gJyc7XHJcblx0XHRcdHRoaXMuZGVsdGFYID0gMDtcclxuXHRcdFx0dGhpcy5kZWx0YVkgPSAwO1xyXG5cdFx0XHR0aGlzLm9mZnNldFggPSAwO1xyXG5cdFx0XHR0aGlzLm9mZnNldFkgPSAwO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIOiuvue9rua7keWKqOW8gOWni+S9jee9rlxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XHJcblx0XHQgKi9cclxuXHRcdHN0b3BUb3VjaFN0YXJ0KGV2ZW50KSB7XHJcblx0XHRcdHRoaXMucmVzZXRUb3VjaFN0YXR1cygpO1xyXG5cdFx0XHRjb25zdCB0b3VjaCA9IGV2ZW50LnRvdWNoZXNbMF07XHJcblx0XHRcdHRoaXMuc3RhcnRYID0gdG91Y2guY2xpZW50WDtcclxuXHRcdFx0dGhpcy5zdGFydFkgPSB0b3VjaC5jbGllbnRZO1xyXG5cdFx0fSxcclxuXHJcblx0XHQvKipcclxuXHRcdCAqIOa7keWKqOS4re+8jOaYr+WQpuemgeatouaJk+W8gFxyXG5cdFx0ICogQHBhcmFtIHtPYmplY3R9IGV2ZW50XHJcblx0XHQgKi9cclxuXHRcdHN0b3BUb3VjaE1vdmUoZXZlbnQpIHtcclxuXHRcdFx0Y29uc3QgdG91Y2ggPSBldmVudC50b3VjaGVzWzBdO1xyXG5cdFx0XHR0aGlzLmRlbHRhWCA9IHRvdWNoLmNsaWVudFggLSB0aGlzLnN0YXJ0WDtcclxuXHRcdFx0dGhpcy5kZWx0YVkgPSB0b3VjaC5jbGllbnRZIC0gdGhpcy5zdGFydFk7XHJcblx0XHRcdHRoaXMub2Zmc2V0WCA9IE1hdGguYWJzKHRoaXMuZGVsdGFYKTtcclxuXHRcdFx0dGhpcy5vZmZzZXRZID0gTWF0aC5hYnModGhpcy5kZWx0YVkpO1xyXG5cdFx0XHR0aGlzLmRpcmVjdGlvbiA9IHRoaXMuZGlyZWN0aW9uIHx8IHRoaXMuZ2V0RGlyZWN0aW9uKHRoaXMub2Zmc2V0WCwgdGhpcy5vZmZzZXRZKTtcclxuXHRcdH0sXHJcblxyXG5cdFx0Z2V0U2VsZWN0b3JRdWVyeSgpIHtcclxuXHRcdFx0Y29uc3Qgdmlld3MgPSB1bmkuY3JlYXRlU2VsZWN0b3JRdWVyeSgpLmluKHRoaXMpXHJcblx0XHRcdHZpZXdzXHJcblx0XHRcdFx0LnNlbGVjdEFsbCgnLnVuaS1zd2lwZV9idXR0b24tZ3JvdXAnKVxyXG5cdFx0XHRcdC5ib3VuZGluZ0NsaWVudFJlY3QoZGF0YSA9PiB7XHJcblx0XHRcdFx0XHRsZXQgc2hvdyA9ICdub25lJ1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuYXV0b0Nsb3NlKSB7XHJcblx0XHRcdFx0XHRcdHNob3cgPSAnbm9uZSdcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdHNob3cgPSB0aGlzLnNob3dcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHRoaXMubGVmdFdpZHRoID0gZGF0YVswXS53aWR0aCB8fCAwXHJcblx0XHRcdFx0XHR0aGlzLnJpZ2h0V2lkdGggPSBkYXRhWzFdLndpZHRoIHx8IDBcclxuXHRcdFx0XHRcdHRoaXMuYnV0dG9uU2hvdyA9IHNob3dcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHRcdC5leGVjKClcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IFZ1ZSBmcm9tICd2dWUnXHJcbmltcG9ydCBWdWV4IGZyb20gJ3Z1ZXgnXHJcbmltcG9ydCB1c2VyIGZyb20gJy4vbW9kZWwvdXNlcidcclxuVnVlLnVzZShWdWV4KVxyXG5jb25zdCBzdG9yZSA9IG5ldyBWdWV4LlN0b3JlKHtcclxuXHRzdGF0ZToge1xyXG5cclxuXHRcdGJhc2VVUkw6ICdodHRwOi8vZXouaWd4eXMuY29tJywgLy/or7fmsYLlnLDlnYDphY3nva5cclxuXHJcblxyXG5cclxuXHJcblx0XHQvLyBiYXNlVVJMOiAnaHR0cDovL3lyaC5saXVuaXU5NDYuY29tJywgLy/or7fmsYLlnLDlnYDphY3nva5cclxuXHRcdHVybEZpbGU6ICcvaW5kZXgnLCAvL+mhueebrumDqOe9suaJgOWcqOaWh+S7tuWkuVxyXG5cdFx0bG9naW5JbnRlcmNlcHRvcjogZmFsc2UsIC8v5piv5ZCm5omT5byA5by65Yi255m75b2VXHJcblx0XHR0b2tlbjonJyxcclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblx0XHQvLyBzaGFyZURhdGE6JycsLy/liIbkuqvkv6Hmga9cclxuXHR9LFxyXG5cdG11dGF0aW9uczoge1xyXG5cdFxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHR9LFxyXG5cdG1vZHVsZXM6e1xyXG5cdFx0dXNlclxyXG5cdH0sXHJcblx0YWN0aW9uczoge1xyXG5cclxuXHR9XHJcbn0pXHJcblxyXG5leHBvcnQgZGVmYXVsdCBzdG9yZVxyXG4iLCJleHBvcnQgZGVmYXVsdCB7XHJcblx0J2NvbnRhY3QnOiAnXFx1ZTEwMCcsXHJcblx0J3BlcnNvbic6ICdcXHVlMTAxJyxcclxuXHQncGVyc29uYWRkJzogJ1xcdWUxMDInLFxyXG5cdCdjb250YWN0LWZpbGxlZCc6ICdcXHVlMTMwJyxcclxuXHQncGVyc29uLWZpbGxlZCc6ICdcXHVlMTMxJyxcclxuXHQncGVyc29uYWRkLWZpbGxlZCc6ICdcXHVlMTMyJyxcclxuXHQncGhvbmUnOiAnXFx1ZTIwMCcsXHJcblx0J2VtYWlsJzogJ1xcdWUyMDEnLFxyXG5cdCdjaGF0YnViYmxlJzogJ1xcdWUyMDInLFxyXG5cdCdjaGF0Ym94ZXMnOiAnXFx1ZTIwMycsXHJcblx0J3Bob25lLWZpbGxlZCc6ICdcXHVlMjMwJyxcclxuXHQnZW1haWwtZmlsbGVkJzogJ1xcdWUyMzEnLFxyXG5cdCdjaGF0YnViYmxlLWZpbGxlZCc6ICdcXHVlMjMyJyxcclxuXHQnY2hhdGJveGVzLWZpbGxlZCc6ICdcXHVlMjMzJyxcclxuXHQnd2VpYm8nOiAnXFx1ZTI2MCcsXHJcblx0J3dlaXhpbic6ICdcXHVlMjYxJyxcclxuXHQncGVuZ3lvdXF1YW4nOiAnXFx1ZTI2MicsXHJcblx0J2NoYXQnOiAnXFx1ZTI2MycsXHJcblx0J3FxJzogJ1xcdWUyNjQnLFxyXG5cdCd2aWRlb2NhbSc6ICdcXHVlMzAwJyxcclxuXHQnY2FtZXJhJzogJ1xcdWUzMDEnLFxyXG5cdCdtaWMnOiAnXFx1ZTMwMicsXHJcblx0J2xvY2F0aW9uJzogJ1xcdWUzMDMnLFxyXG5cdCdtaWMtZmlsbGVkJzogJ1xcdWUzMzInLFxyXG5cdCdzcGVlY2gnOiAnXFx1ZTMzMicsXHJcblx0J2xvY2F0aW9uLWZpbGxlZCc6ICdcXHVlMzMzJyxcclxuXHQnbWljb2ZmJzogJ1xcdWUzNjAnLFxyXG5cdCdpbWFnZSc6ICdcXHVlMzYzJyxcclxuXHQnbWFwJzogJ1xcdWUzNjQnLFxyXG5cdCdjb21wb3NlJzogJ1xcdWU0MDAnLFxyXG5cdCd0cmFzaCc6ICdcXHVlNDAxJyxcclxuXHQndXBsb2FkJzogJ1xcdWU0MDInLFxyXG5cdCdkb3dubG9hZCc6ICdcXHVlNDAzJyxcclxuXHQnY2xvc2UnOiAnXFx1ZTQwNCcsXHJcblx0J3JlZG8nOiAnXFx1ZTQwNScsXHJcblx0J3VuZG8nOiAnXFx1ZTQwNicsXHJcblx0J3JlZnJlc2gnOiAnXFx1ZTQwNycsXHJcblx0J3N0YXInOiAnXFx1ZTQwOCcsXHJcblx0J3BsdXMnOiAnXFx1ZTQwOScsXHJcblx0J21pbnVzJzogJ1xcdWU0MTAnLFxyXG5cdCdjaXJjbGUnOiAnXFx1ZTQxMScsXHJcblx0J2NoZWNrYm94JzogJ1xcdWU0MTEnLFxyXG5cdCdjbG9zZS1maWxsZWQnOiAnXFx1ZTQzNCcsXHJcblx0J2NsZWFyJzogJ1xcdWU0MzQnLFxyXG5cdCdyZWZyZXNoLWZpbGxlZCc6ICdcXHVlNDM3JyxcclxuXHQnc3Rhci1maWxsZWQnOiAnXFx1ZTQzOCcsXHJcblx0J3BsdXMtZmlsbGVkJzogJ1xcdWU0MzknLFxyXG5cdCdtaW51cy1maWxsZWQnOiAnXFx1ZTQ0MCcsXHJcblx0J2NpcmNsZS1maWxsZWQnOiAnXFx1ZTQ0MScsXHJcblx0J2NoZWNrYm94LWZpbGxlZCc6ICdcXHVlNDQyJyxcclxuXHQnY2xvc2VlbXB0eSc6ICdcXHVlNDYwJyxcclxuXHQncmVmcmVzaGVtcHR5JzogJ1xcdWU0NjEnLFxyXG5cdCdyZWxvYWQnOiAnXFx1ZTQ2MicsXHJcblx0J3N0YXJoYWxmJzogJ1xcdWU0NjMnLFxyXG5cdCdzcGlubmVyJzogJ1xcdWU0NjQnLFxyXG5cdCdzcGlubmVyLWN5Y2xlJzogJ1xcdWU0NjUnLFxyXG5cdCdzZWFyY2gnOiAnXFx1ZTQ2NicsXHJcblx0J3BsdXNlbXB0eSc6ICdcXHVlNDY4JyxcclxuXHQnZm9yd2FyZCc6ICdcXHVlNDcwJyxcclxuXHQnYmFjayc6ICdcXHVlNDcxJyxcclxuXHQnbGVmdC1uYXYnOiAnXFx1ZTQ3MScsXHJcblx0J2NoZWNrbWFya2VtcHR5JzogJ1xcdWU0NzInLFxyXG5cdCdob21lJzogJ1xcdWU1MDAnLFxyXG5cdCduYXZpZ2F0ZSc6ICdcXHVlNTAxJyxcclxuXHQnZ2Vhcic6ICdcXHVlNTAyJyxcclxuXHQncGFwZXJwbGFuZSc6ICdcXHVlNTAzJyxcclxuXHQnaW5mbyc6ICdcXHVlNTA0JyxcclxuXHQnaGVscCc6ICdcXHVlNTA1JyxcclxuXHQnbG9ja2VkJzogJ1xcdWU1MDYnLFxyXG5cdCdtb3JlJzogJ1xcdWU1MDcnLFxyXG5cdCdmbGFnJzogJ1xcdWU1MDgnLFxyXG5cdCdob21lLWZpbGxlZCc6ICdcXHVlNTMwJyxcclxuXHQnZ2Vhci1maWxsZWQnOiAnXFx1ZTUzMicsXHJcblx0J2luZm8tZmlsbGVkJzogJ1xcdWU1MzQnLFxyXG5cdCdoZWxwLWZpbGxlZCc6ICdcXHVlNTM1JyxcclxuXHQnbW9yZS1maWxsZWQnOiAnXFx1ZTUzNycsXHJcblx0J3NldHRpbmdzJzogJ1xcdWU1NjAnLFxyXG5cdCdsaXN0JzogJ1xcdWU1NjInLFxyXG5cdCdiYXJzJzogJ1xcdWU1NjMnLFxyXG5cdCdsb29wJzogJ1xcdWU1NjUnLFxyXG5cdCdwYXBlcmNsaXAnOiAnXFx1ZTU2NycsXHJcblx0J2V5ZSc6ICdcXHVlNTY4JyxcclxuXHQnYXJyb3d1cCc6ICdcXHVlNTgwJyxcclxuXHQnYXJyb3dkb3duJzogJ1xcdWU1ODEnLFxyXG5cdCdhcnJvd2xlZnQnOiAnXFx1ZTU4MicsXHJcblx0J2Fycm93cmlnaHQnOiAnXFx1ZTU4MycsXHJcblx0J2Fycm93dGhpbnVwJzogJ1xcdWU1ODQnLFxyXG5cdCdhcnJvd3RoaW5kb3duJzogJ1xcdWU1ODUnLFxyXG5cdCdhcnJvd3RoaW5sZWZ0JzogJ1xcdWU1ODYnLFxyXG5cdCdhcnJvd3RoaW5yaWdodCc6ICdcXHVlNTg3JyxcclxuXHQncHVsbGRvd24nOiAnXFx1ZTU4OCcsXHJcblx0J2Nsb3NlZmlsbCc6ICdcXHVlNTg5JyxcclxuXHQnc291bmQnOiAnXFx1ZTU5MCcsXHJcblx0J3NjYW4nOiAnXFx1ZTYxMidcclxufVxyXG4iLCIvKiFcbiAqIHZ1ZXggdjMuNC4wXG4gKiAoYykgMjAyMCBFdmFuIFlvdVxuICogQGxpY2Vuc2UgTUlUXG4gKi9cbmZ1bmN0aW9uIGFwcGx5TWl4aW4gKFZ1ZSkge1xuICB2YXIgdmVyc2lvbiA9IE51bWJlcihWdWUudmVyc2lvbi5zcGxpdCgnLicpWzBdKTtcblxuICBpZiAodmVyc2lvbiA+PSAyKSB7XG4gICAgVnVlLm1peGluKHsgYmVmb3JlQ3JlYXRlOiB2dWV4SW5pdCB9KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBvdmVycmlkZSBpbml0IGFuZCBpbmplY3QgdnVleCBpbml0IHByb2NlZHVyZVxuICAgIC8vIGZvciAxLnggYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgdmFyIF9pbml0ID0gVnVlLnByb3RvdHlwZS5faW5pdDtcbiAgICBWdWUucHJvdG90eXBlLl9pbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBvcHRpb25zLmluaXQgPSBvcHRpb25zLmluaXRcbiAgICAgICAgPyBbdnVleEluaXRdLmNvbmNhdChvcHRpb25zLmluaXQpXG4gICAgICAgIDogdnVleEluaXQ7XG4gICAgICBfaW5pdC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVnVleCBpbml0IGhvb2ssIGluamVjdGVkIGludG8gZWFjaCBpbnN0YW5jZXMgaW5pdCBob29rcyBsaXN0LlxuICAgKi9cblxuICBmdW5jdGlvbiB2dWV4SW5pdCAoKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0aGlzLiRvcHRpb25zO1xuICAgIC8vIHN0b3JlIGluamVjdGlvblxuICAgIGlmIChvcHRpb25zLnN0b3JlKSB7XG4gICAgICB0aGlzLiRzdG9yZSA9IHR5cGVvZiBvcHRpb25zLnN0b3JlID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gb3B0aW9ucy5zdG9yZSgpXG4gICAgICAgIDogb3B0aW9ucy5zdG9yZTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucGFyZW50ICYmIG9wdGlvbnMucGFyZW50LiRzdG9yZSkge1xuICAgICAgdGhpcy4kc3RvcmUgPSBvcHRpb25zLnBhcmVudC4kc3RvcmU7XG4gICAgfVxuICB9XG59XG5cbnZhciB0YXJnZXQgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICA/IHdpbmRvd1xuICA6IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnXG4gICAgPyBnbG9iYWxcbiAgICA6IHt9O1xudmFyIGRldnRvb2xIb29rID0gdGFyZ2V0Ll9fVlVFX0RFVlRPT0xTX0dMT0JBTF9IT09LX187XG5cbmZ1bmN0aW9uIGRldnRvb2xQbHVnaW4gKHN0b3JlKSB7XG4gIGlmICghZGV2dG9vbEhvb2spIHsgcmV0dXJuIH1cblxuICBzdG9yZS5fZGV2dG9vbEhvb2sgPSBkZXZ0b29sSG9vaztcblxuICBkZXZ0b29sSG9vay5lbWl0KCd2dWV4OmluaXQnLCBzdG9yZSk7XG5cbiAgZGV2dG9vbEhvb2sub24oJ3Z1ZXg6dHJhdmVsLXRvLXN0YXRlJywgZnVuY3Rpb24gKHRhcmdldFN0YXRlKSB7XG4gICAgc3RvcmUucmVwbGFjZVN0YXRlKHRhcmdldFN0YXRlKTtcbiAgfSk7XG5cbiAgc3RvcmUuc3Vic2NyaWJlKGZ1bmN0aW9uIChtdXRhdGlvbiwgc3RhdGUpIHtcbiAgICBkZXZ0b29sSG9vay5lbWl0KCd2dWV4Om11dGF0aW9uJywgbXV0YXRpb24sIHN0YXRlKTtcbiAgfSwgeyBwcmVwZW5kOiB0cnVlIH0pO1xuXG4gIHN0b3JlLnN1YnNjcmliZUFjdGlvbihmdW5jdGlvbiAoYWN0aW9uLCBzdGF0ZSkge1xuICAgIGRldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6YWN0aW9uJywgYWN0aW9uLCBzdGF0ZSk7XG4gIH0sIHsgcHJlcGVuZDogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGZpcnN0IGl0ZW0gdGhhdCBwYXNzIHRoZSB0ZXN0XG4gKiBieSBzZWNvbmQgYXJndW1lbnQgZnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmXG4gKiBAcmV0dXJuIHsqfVxuICovXG5cbi8qKlxuICogZm9yRWFjaCBmb3Igb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hWYWx1ZSAob2JqLCBmbikge1xuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZm4ob2JqW2tleV0sIGtleSk7IH0pO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdCAob2JqKSB7XG4gIHJldHVybiBvYmogIT09IG51bGwgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCdcbn1cblxuZnVuY3Rpb24gaXNQcm9taXNlICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAmJiB0eXBlb2YgdmFsLnRoZW4gPT09ICdmdW5jdGlvbidcbn1cblxuZnVuY3Rpb24gYXNzZXJ0IChjb25kaXRpb24sIG1zZykge1xuICBpZiAoIWNvbmRpdGlvbikgeyB0aHJvdyBuZXcgRXJyb3IoKFwiW3Z1ZXhdIFwiICsgbXNnKSkgfVxufVxuXG5mdW5jdGlvbiBwYXJ0aWFsIChmbiwgYXJnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZuKGFyZylcbiAgfVxufVxuXG4vLyBCYXNlIGRhdGEgc3RydWN0IGZvciBzdG9yZSdzIG1vZHVsZSwgcGFja2FnZSB3aXRoIHNvbWUgYXR0cmlidXRlIGFuZCBtZXRob2RcbnZhciBNb2R1bGUgPSBmdW5jdGlvbiBNb2R1bGUgKHJhd01vZHVsZSwgcnVudGltZSkge1xuICB0aGlzLnJ1bnRpbWUgPSBydW50aW1lO1xuICAvLyBTdG9yZSBzb21lIGNoaWxkcmVuIGl0ZW1cbiAgdGhpcy5fY2hpbGRyZW4gPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAvLyBTdG9yZSB0aGUgb3JpZ2luIG1vZHVsZSBvYmplY3Qgd2hpY2ggcGFzc2VkIGJ5IHByb2dyYW1tZXJcbiAgdGhpcy5fcmF3TW9kdWxlID0gcmF3TW9kdWxlO1xuICB2YXIgcmF3U3RhdGUgPSByYXdNb2R1bGUuc3RhdGU7XG5cbiAgLy8gU3RvcmUgdGhlIG9yaWdpbiBtb2R1bGUncyBzdGF0ZVxuICB0aGlzLnN0YXRlID0gKHR5cGVvZiByYXdTdGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IHJhd1N0YXRlKCkgOiByYXdTdGF0ZSkgfHwge307XG59O1xuXG52YXIgcHJvdG90eXBlQWNjZXNzb3JzID0geyBuYW1lc3BhY2VkOiB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH07XG5cbnByb3RvdHlwZUFjY2Vzc29ycy5uYW1lc3BhY2VkLmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICEhdGhpcy5fcmF3TW9kdWxlLm5hbWVzcGFjZWRcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbiBhZGRDaGlsZCAoa2V5LCBtb2R1bGUpIHtcbiAgdGhpcy5fY2hpbGRyZW5ba2V5XSA9IG1vZHVsZTtcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUucmVtb3ZlQ2hpbGQgPSBmdW5jdGlvbiByZW1vdmVDaGlsZCAoa2V5KSB7XG4gIGRlbGV0ZSB0aGlzLl9jaGlsZHJlbltrZXldO1xufTtcblxuTW9kdWxlLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uIGdldENoaWxkIChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuW2tleV1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuaGFzQ2hpbGQgPSBmdW5jdGlvbiBoYXNDaGlsZCAoa2V5KSB7XG4gIHJldHVybiBrZXkgaW4gdGhpcy5fY2hpbGRyZW5cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlIChyYXdNb2R1bGUpIHtcbiAgdGhpcy5fcmF3TW9kdWxlLm5hbWVzcGFjZWQgPSByYXdNb2R1bGUubmFtZXNwYWNlZDtcbiAgaWYgKHJhd01vZHVsZS5hY3Rpb25zKSB7XG4gICAgdGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMgPSByYXdNb2R1bGUuYWN0aW9ucztcbiAgfVxuICBpZiAocmF3TW9kdWxlLm11dGF0aW9ucykge1xuICAgIHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMgPSByYXdNb2R1bGUubXV0YXRpb25zO1xuICB9XG4gIGlmIChyYXdNb2R1bGUuZ2V0dGVycykge1xuICAgIHRoaXMuX3Jhd01vZHVsZS5nZXR0ZXJzID0gcmF3TW9kdWxlLmdldHRlcnM7XG4gIH1cbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaENoaWxkID0gZnVuY3Rpb24gZm9yRWFjaENoaWxkIChmbikge1xuICBmb3JFYWNoVmFsdWUodGhpcy5fY2hpbGRyZW4sIGZuKTtcbn07XG5cbk1vZHVsZS5wcm90b3R5cGUuZm9yRWFjaEdldHRlciA9IGZ1bmN0aW9uIGZvckVhY2hHZXR0ZXIgKGZuKSB7XG4gIGlmICh0aGlzLl9yYXdNb2R1bGUuZ2V0dGVycykge1xuICAgIGZvckVhY2hWYWx1ZSh0aGlzLl9yYXdNb2R1bGUuZ2V0dGVycywgZm4pO1xuICB9XG59O1xuXG5Nb2R1bGUucHJvdG90eXBlLmZvckVhY2hBY3Rpb24gPSBmdW5jdGlvbiBmb3JFYWNoQWN0aW9uIChmbikge1xuICBpZiAodGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMpIHtcbiAgICBmb3JFYWNoVmFsdWUodGhpcy5fcmF3TW9kdWxlLmFjdGlvbnMsIGZuKTtcbiAgfVxufTtcblxuTW9kdWxlLnByb3RvdHlwZS5mb3JFYWNoTXV0YXRpb24gPSBmdW5jdGlvbiBmb3JFYWNoTXV0YXRpb24gKGZuKSB7XG4gIGlmICh0aGlzLl9yYXdNb2R1bGUubXV0YXRpb25zKSB7XG4gICAgZm9yRWFjaFZhbHVlKHRoaXMuX3Jhd01vZHVsZS5tdXRhdGlvbnMsIGZuKTtcbiAgfVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIE1vZHVsZS5wcm90b3R5cGUsIHByb3RvdHlwZUFjY2Vzc29ycyApO1xuXG52YXIgTW9kdWxlQ29sbGVjdGlvbiA9IGZ1bmN0aW9uIE1vZHVsZUNvbGxlY3Rpb24gKHJhd1Jvb3RNb2R1bGUpIHtcbiAgLy8gcmVnaXN0ZXIgcm9vdCBtb2R1bGUgKFZ1ZXguU3RvcmUgb3B0aW9ucylcbiAgdGhpcy5yZWdpc3RlcihbXSwgcmF3Um9vdE1vZHVsZSwgZmFsc2UpO1xufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gZ2V0IChwYXRoKSB7XG4gIHJldHVybiBwYXRoLnJlZHVjZShmdW5jdGlvbiAobW9kdWxlLCBrZXkpIHtcbiAgICByZXR1cm4gbW9kdWxlLmdldENoaWxkKGtleSlcbiAgfSwgdGhpcy5yb290KVxufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUuZ2V0TmFtZXNwYWNlID0gZnVuY3Rpb24gZ2V0TmFtZXNwYWNlIChwYXRoKSB7XG4gIHZhciBtb2R1bGUgPSB0aGlzLnJvb3Q7XG4gIHJldHVybiBwYXRoLnJlZHVjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBrZXkpIHtcbiAgICBtb2R1bGUgPSBtb2R1bGUuZ2V0Q2hpbGQoa2V5KTtcbiAgICByZXR1cm4gbmFtZXNwYWNlICsgKG1vZHVsZS5uYW1lc3BhY2VkID8ga2V5ICsgJy8nIDogJycpXG4gIH0sICcnKVxufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gdXBkYXRlJDEgKHJhd1Jvb3RNb2R1bGUpIHtcbiAgdXBkYXRlKFtdLCB0aGlzLnJvb3QsIHJhd1Jvb3RNb2R1bGUpO1xufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUucmVnaXN0ZXIgPSBmdW5jdGlvbiByZWdpc3RlciAocGF0aCwgcmF3TW9kdWxlLCBydW50aW1lKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG4gICAgaWYgKCBydW50aW1lID09PSB2b2lkIDAgKSBydW50aW1lID0gdHJ1ZTtcblxuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgYXNzZXJ0UmF3TW9kdWxlKHBhdGgsIHJhd01vZHVsZSk7XG4gIH1cblxuICB2YXIgbmV3TW9kdWxlID0gbmV3IE1vZHVsZShyYXdNb2R1bGUsIHJ1bnRpbWUpO1xuICBpZiAocGF0aC5sZW5ndGggPT09IDApIHtcbiAgICB0aGlzLnJvb3QgPSBuZXdNb2R1bGU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMuZ2V0KHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgICBwYXJlbnQuYWRkQ2hpbGQocGF0aFtwYXRoLmxlbmd0aCAtIDFdLCBuZXdNb2R1bGUpO1xuICB9XG5cbiAgLy8gcmVnaXN0ZXIgbmVzdGVkIG1vZHVsZXNcbiAgaWYgKHJhd01vZHVsZS5tb2R1bGVzKSB7XG4gICAgZm9yRWFjaFZhbHVlKHJhd01vZHVsZS5tb2R1bGVzLCBmdW5jdGlvbiAocmF3Q2hpbGRNb2R1bGUsIGtleSkge1xuICAgICAgdGhpcyQxLnJlZ2lzdGVyKHBhdGguY29uY2F0KGtleSksIHJhd0NoaWxkTW9kdWxlLCBydW50aW1lKTtcbiAgICB9KTtcbiAgfVxufTtcblxuTW9kdWxlQ29sbGVjdGlvbi5wcm90b3R5cGUudW5yZWdpc3RlciA9IGZ1bmN0aW9uIHVucmVnaXN0ZXIgKHBhdGgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMuZ2V0KHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgdmFyIGtleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcbiAgaWYgKCFwYXJlbnQuZ2V0Q2hpbGQoa2V5KS5ydW50aW1lKSB7IHJldHVybiB9XG5cbiAgcGFyZW50LnJlbW92ZUNoaWxkKGtleSk7XG59O1xuXG5Nb2R1bGVDb2xsZWN0aW9uLnByb3RvdHlwZS5pc1JlZ2lzdGVyZWQgPSBmdW5jdGlvbiBpc1JlZ2lzdGVyZWQgKHBhdGgpIHtcbiAgdmFyIHBhcmVudCA9IHRoaXMuZ2V0KHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgdmFyIGtleSA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcblxuICByZXR1cm4gcGFyZW50Lmhhc0NoaWxkKGtleSlcbn07XG5cbmZ1bmN0aW9uIHVwZGF0ZSAocGF0aCwgdGFyZ2V0TW9kdWxlLCBuZXdNb2R1bGUpIHtcbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgIGFzc2VydFJhd01vZHVsZShwYXRoLCBuZXdNb2R1bGUpO1xuICB9XG5cbiAgLy8gdXBkYXRlIHRhcmdldCBtb2R1bGVcbiAgdGFyZ2V0TW9kdWxlLnVwZGF0ZShuZXdNb2R1bGUpO1xuXG4gIC8vIHVwZGF0ZSBuZXN0ZWQgbW9kdWxlc1xuICBpZiAobmV3TW9kdWxlLm1vZHVsZXMpIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gbmV3TW9kdWxlLm1vZHVsZXMpIHtcbiAgICAgIGlmICghdGFyZ2V0TW9kdWxlLmdldENoaWxkKGtleSkpIHtcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgIFwiW3Z1ZXhdIHRyeWluZyB0byBhZGQgYSBuZXcgbW9kdWxlICdcIiArIGtleSArIFwiJyBvbiBob3QgcmVsb2FkaW5nLCBcIiArXG4gICAgICAgICAgICAnbWFudWFsIHJlbG9hZCBpcyBuZWVkZWQnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHVwZGF0ZShcbiAgICAgICAgcGF0aC5jb25jYXQoa2V5KSxcbiAgICAgICAgdGFyZ2V0TW9kdWxlLmdldENoaWxkKGtleSksXG4gICAgICAgIG5ld01vZHVsZS5tb2R1bGVzW2tleV1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmdW5jdGlvbkFzc2VydCA9IHtcbiAgYXNzZXJ0OiBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJzsgfSxcbiAgZXhwZWN0ZWQ6ICdmdW5jdGlvbidcbn07XG5cbnZhciBvYmplY3RBc3NlcnQgPSB7XG4gIGFzc2VydDogZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgfHxcbiAgICAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUuaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyk7IH0sXG4gIGV4cGVjdGVkOiAnZnVuY3Rpb24gb3Igb2JqZWN0IHdpdGggXCJoYW5kbGVyXCIgZnVuY3Rpb24nXG59O1xuXG52YXIgYXNzZXJ0VHlwZXMgPSB7XG4gIGdldHRlcnM6IGZ1bmN0aW9uQXNzZXJ0LFxuICBtdXRhdGlvbnM6IGZ1bmN0aW9uQXNzZXJ0LFxuICBhY3Rpb25zOiBvYmplY3RBc3NlcnRcbn07XG5cbmZ1bmN0aW9uIGFzc2VydFJhd01vZHVsZSAocGF0aCwgcmF3TW9kdWxlKSB7XG4gIE9iamVjdC5rZXlzKGFzc2VydFR5cGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoIXJhd01vZHVsZVtrZXldKSB7IHJldHVybiB9XG5cbiAgICB2YXIgYXNzZXJ0T3B0aW9ucyA9IGFzc2VydFR5cGVzW2tleV07XG5cbiAgICBmb3JFYWNoVmFsdWUocmF3TW9kdWxlW2tleV0sIGZ1bmN0aW9uICh2YWx1ZSwgdHlwZSkge1xuICAgICAgYXNzZXJ0KFxuICAgICAgICBhc3NlcnRPcHRpb25zLmFzc2VydCh2YWx1ZSksXG4gICAgICAgIG1ha2VBc3NlcnRpb25NZXNzYWdlKHBhdGgsIGtleSwgdHlwZSwgdmFsdWUsIGFzc2VydE9wdGlvbnMuZXhwZWN0ZWQpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbWFrZUFzc2VydGlvbk1lc3NhZ2UgKHBhdGgsIGtleSwgdHlwZSwgdmFsdWUsIGV4cGVjdGVkKSB7XG4gIHZhciBidWYgPSBrZXkgKyBcIiBzaG91bGQgYmUgXCIgKyBleHBlY3RlZCArIFwiIGJ1dCBcXFwiXCIgKyBrZXkgKyBcIi5cIiArIHR5cGUgKyBcIlxcXCJcIjtcbiAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgIGJ1ZiArPSBcIiBpbiBtb2R1bGUgXFxcIlwiICsgKHBhdGguam9pbignLicpKSArIFwiXFxcIlwiO1xuICB9XG4gIGJ1ZiArPSBcIiBpcyBcIiArIChKU09OLnN0cmluZ2lmeSh2YWx1ZSkpICsgXCIuXCI7XG4gIHJldHVybiBidWZcbn1cblxudmFyIFZ1ZTsgLy8gYmluZCBvbiBpbnN0YWxsXG5cbnZhciBTdG9yZSA9IGZ1bmN0aW9uIFN0b3JlIChvcHRpb25zKSB7XG4gIHZhciB0aGlzJDEgPSB0aGlzO1xuICBpZiAoIG9wdGlvbnMgPT09IHZvaWQgMCApIG9wdGlvbnMgPSB7fTtcblxuICAvLyBBdXRvIGluc3RhbGwgaWYgaXQgaXMgbm90IGRvbmUgeWV0IGFuZCBgd2luZG93YCBoYXMgYFZ1ZWAuXG4gIC8vIFRvIGFsbG93IHVzZXJzIHRvIGF2b2lkIGF1dG8taW5zdGFsbGF0aW9uIGluIHNvbWUgY2FzZXMsXG4gIC8vIHRoaXMgY29kZSBzaG91bGQgYmUgcGxhY2VkIGhlcmUuIFNlZSAjNzMxXG4gIGlmICghVnVlICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5WdWUpIHtcbiAgICBpbnN0YWxsKHdpbmRvdy5WdWUpO1xuICB9XG5cbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgIGFzc2VydChWdWUsIFwibXVzdCBjYWxsIFZ1ZS51c2UoVnVleCkgYmVmb3JlIGNyZWF0aW5nIGEgc3RvcmUgaW5zdGFuY2UuXCIpO1xuICAgIGFzc2VydCh0eXBlb2YgUHJvbWlzZSAhPT0gJ3VuZGVmaW5lZCcsIFwidnVleCByZXF1aXJlcyBhIFByb21pc2UgcG9seWZpbGwgaW4gdGhpcyBicm93c2VyLlwiKTtcbiAgICBhc3NlcnQodGhpcyBpbnN0YW5jZW9mIFN0b3JlLCBcInN0b3JlIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvci5cIik7XG4gIH1cblxuICB2YXIgcGx1Z2lucyA9IG9wdGlvbnMucGx1Z2luczsgaWYgKCBwbHVnaW5zID09PSB2b2lkIDAgKSBwbHVnaW5zID0gW107XG4gIHZhciBzdHJpY3QgPSBvcHRpb25zLnN0cmljdDsgaWYgKCBzdHJpY3QgPT09IHZvaWQgMCApIHN0cmljdCA9IGZhbHNlO1xuXG4gIC8vIHN0b3JlIGludGVybmFsIHN0YXRlXG4gIHRoaXMuX2NvbW1pdHRpbmcgPSBmYWxzZTtcbiAgdGhpcy5fYWN0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX2FjdGlvblN1YnNjcmliZXJzID0gW107XG4gIHRoaXMuX211dGF0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX3dyYXBwZWRHZXR0ZXJzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5fbW9kdWxlcyA9IG5ldyBNb2R1bGVDb2xsZWN0aW9uKG9wdGlvbnMpO1xuICB0aGlzLl9tb2R1bGVzTmFtZXNwYWNlTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcbiAgdGhpcy5fd2F0Y2hlclZNID0gbmV3IFZ1ZSgpO1xuICB0aGlzLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIC8vIGJpbmQgY29tbWl0IGFuZCBkaXNwYXRjaCB0byBzZWxmXG4gIHZhciBzdG9yZSA9IHRoaXM7XG4gIHZhciByZWYgPSB0aGlzO1xuICB2YXIgZGlzcGF0Y2ggPSByZWYuZGlzcGF0Y2g7XG4gIHZhciBjb21taXQgPSByZWYuY29tbWl0O1xuICB0aGlzLmRpc3BhdGNoID0gZnVuY3Rpb24gYm91bmREaXNwYXRjaCAodHlwZSwgcGF5bG9hZCkge1xuICAgIHJldHVybiBkaXNwYXRjaC5jYWxsKHN0b3JlLCB0eXBlLCBwYXlsb2FkKVxuICB9O1xuICB0aGlzLmNvbW1pdCA9IGZ1bmN0aW9uIGJvdW5kQ29tbWl0ICh0eXBlLCBwYXlsb2FkLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNvbW1pdC5jYWxsKHN0b3JlLCB0eXBlLCBwYXlsb2FkLCBvcHRpb25zKVxuICB9O1xuXG4gIC8vIHN0cmljdCBtb2RlXG4gIHRoaXMuc3RyaWN0ID0gc3RyaWN0O1xuXG4gIHZhciBzdGF0ZSA9IHRoaXMuX21vZHVsZXMucm9vdC5zdGF0ZTtcblxuICAvLyBpbml0IHJvb3QgbW9kdWxlLlxuICAvLyB0aGlzIGFsc28gcmVjdXJzaXZlbHkgcmVnaXN0ZXJzIGFsbCBzdWItbW9kdWxlc1xuICAvLyBhbmQgY29sbGVjdHMgYWxsIG1vZHVsZSBnZXR0ZXJzIGluc2lkZSB0aGlzLl93cmFwcGVkR2V0dGVyc1xuICBpbnN0YWxsTW9kdWxlKHRoaXMsIHN0YXRlLCBbXSwgdGhpcy5fbW9kdWxlcy5yb290KTtcblxuICAvLyBpbml0aWFsaXplIHRoZSBzdG9yZSB2bSwgd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHRoZSByZWFjdGl2aXR5XG4gIC8vIChhbHNvIHJlZ2lzdGVycyBfd3JhcHBlZEdldHRlcnMgYXMgY29tcHV0ZWQgcHJvcGVydGllcylcbiAgcmVzZXRTdG9yZVZNKHRoaXMsIHN0YXRlKTtcblxuICAvLyBhcHBseSBwbHVnaW5zXG4gIHBsdWdpbnMuZm9yRWFjaChmdW5jdGlvbiAocGx1Z2luKSB7IHJldHVybiBwbHVnaW4odGhpcyQxKTsgfSk7XG5cbiAgdmFyIHVzZURldnRvb2xzID0gb3B0aW9ucy5kZXZ0b29scyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5kZXZ0b29scyA6IFZ1ZS5jb25maWcuZGV2dG9vbHM7XG4gIGlmICh1c2VEZXZ0b29scykge1xuICAgIGRldnRvb2xQbHVnaW4odGhpcyk7XG4gIH1cbn07XG5cbnZhciBwcm90b3R5cGVBY2Nlc3NvcnMkMSA9IHsgc3RhdGU6IHsgY29uZmlndXJhYmxlOiB0cnVlIH0gfTtcblxucHJvdG90eXBlQWNjZXNzb3JzJDEuc3RhdGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdGhpcy5fdm0uX2RhdGEuJCRzdGF0ZVxufTtcblxucHJvdG90eXBlQWNjZXNzb3JzJDEuc3RhdGUuc2V0ID0gZnVuY3Rpb24gKHYpIHtcbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgIGFzc2VydChmYWxzZSwgXCJ1c2Ugc3RvcmUucmVwbGFjZVN0YXRlKCkgdG8gZXhwbGljaXQgcmVwbGFjZSBzdG9yZSBzdGF0ZS5cIik7XG4gIH1cbn07XG5cblN0b3JlLnByb3RvdHlwZS5jb21taXQgPSBmdW5jdGlvbiBjb21taXQgKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpIHtcbiAgICB2YXIgdGhpcyQxID0gdGhpcztcblxuICAvLyBjaGVjayBvYmplY3Qtc3R5bGUgY29tbWl0XG4gIHZhciByZWYgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpO1xuICAgIHZhciB0eXBlID0gcmVmLnR5cGU7XG4gICAgdmFyIHBheWxvYWQgPSByZWYucGF5bG9hZDtcbiAgICB2YXIgb3B0aW9ucyA9IHJlZi5vcHRpb25zO1xuXG4gIHZhciBtdXRhdGlvbiA9IHsgdHlwZTogdHlwZSwgcGF5bG9hZDogcGF5bG9hZCB9O1xuICB2YXIgZW50cnkgPSB0aGlzLl9tdXRhdGlvbnNbdHlwZV07XG4gIGlmICghZW50cnkpIHtcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIG11dGF0aW9uIHR5cGU6IFwiICsgdHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICBlbnRyeS5mb3JFYWNoKGZ1bmN0aW9uIGNvbW1pdEl0ZXJhdG9yIChoYW5kbGVyKSB7XG4gICAgICBoYW5kbGVyKHBheWxvYWQpO1xuICAgIH0pO1xuICB9KTtcblxuICB0aGlzLl9zdWJzY3JpYmVyc1xuICAgIC5zbGljZSgpIC8vIHNoYWxsb3cgY29weSB0byBwcmV2ZW50IGl0ZXJhdG9yIGludmFsaWRhdGlvbiBpZiBzdWJzY3JpYmVyIHN5bmNocm9ub3VzbHkgY2FsbHMgdW5zdWJzY3JpYmVcbiAgICAuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIobXV0YXRpb24sIHRoaXMkMS5zdGF0ZSk7IH0pO1xuXG4gIGlmIChcbiAgICAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiZcbiAgICBvcHRpb25zICYmIG9wdGlvbnMuc2lsZW50XG4gICkge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiW3Z1ZXhdIG11dGF0aW9uIHR5cGU6IFwiICsgdHlwZSArIFwiLiBTaWxlbnQgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWQuIFwiICtcbiAgICAgICdVc2UgdGhlIGZpbHRlciBmdW5jdGlvbmFsaXR5IGluIHRoZSB2dWUtZGV2dG9vbHMnXG4gICAgKTtcbiAgfVxufTtcblxuU3RvcmUucHJvdG90eXBlLmRpc3BhdGNoID0gZnVuY3Rpb24gZGlzcGF0Y2ggKF90eXBlLCBfcGF5bG9hZCkge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIC8vIGNoZWNrIG9iamVjdC1zdHlsZSBkaXNwYXRjaFxuICB2YXIgcmVmID0gdW5pZnlPYmplY3RTdHlsZShfdHlwZSwgX3BheWxvYWQpO1xuICAgIHZhciB0eXBlID0gcmVmLnR5cGU7XG4gICAgdmFyIHBheWxvYWQgPSByZWYucGF5bG9hZDtcblxuICB2YXIgYWN0aW9uID0geyB0eXBlOiB0eXBlLCBwYXlsb2FkOiBwYXlsb2FkIH07XG4gIHZhciBlbnRyeSA9IHRoaXMuX2FjdGlvbnNbdHlwZV07XG4gIGlmICghZW50cnkpIHtcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKChcIlt2dWV4XSB1bmtub3duIGFjdGlvbiB0eXBlOiBcIiArIHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuX2FjdGlvblN1YnNjcmliZXJzXG4gICAgICAuc2xpY2UoKSAvLyBzaGFsbG93IGNvcHkgdG8gcHJldmVudCBpdGVyYXRvciBpbnZhbGlkYXRpb24gaWYgc3Vic2NyaWJlciBzeW5jaHJvbm91c2x5IGNhbGxzIHVuc3Vic2NyaWJlXG4gICAgICAuZmlsdGVyKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIHN1Yi5iZWZvcmU7IH0pXG4gICAgICAuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIuYmVmb3JlKGFjdGlvbiwgdGhpcyQxLnN0YXRlKTsgfSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICBjb25zb2xlLndhcm4oXCJbdnVleF0gZXJyb3IgaW4gYmVmb3JlIGFjdGlvbiBzdWJzY3JpYmVyczogXCIpO1xuICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gZW50cnkubGVuZ3RoID4gMVxuICAgID8gUHJvbWlzZS5hbGwoZW50cnkubWFwKGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiBoYW5kbGVyKHBheWxvYWQpOyB9KSlcbiAgICA6IGVudHJ5WzBdKHBheWxvYWQpO1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgcmVzdWx0LnRoZW4oZnVuY3Rpb24gKHJlcykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcyQxLl9hY3Rpb25TdWJzY3JpYmVyc1xuICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHN1YikgeyByZXR1cm4gc3ViLmFmdGVyOyB9KVxuICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIHN1Yi5hZnRlcihhY3Rpb24sIHRoaXMkMS5zdGF0ZSk7IH0pO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW3Z1ZXhdIGVycm9yIGluIGFmdGVyIGFjdGlvbiBzdWJzY3JpYmVyczogXCIpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJlc29sdmUocmVzKTtcbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMkMS5fYWN0aW9uU3Vic2NyaWJlcnNcbiAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChzdWIpIHsgcmV0dXJuIHN1Yi5lcnJvcjsgfSlcbiAgICAgICAgICAuZm9yRWFjaChmdW5jdGlvbiAoc3ViKSB7IHJldHVybiBzdWIuZXJyb3IoYWN0aW9uLCB0aGlzJDEuc3RhdGUsIGVycm9yKTsgfSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbdnVleF0gZXJyb3IgaW4gZXJyb3IgYWN0aW9uIHN1YnNjcmliZXJzOiBcIik7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICB9KTtcbiAgfSlcbn07XG5cblN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiBzdWJzY3JpYmUgKGZuLCBvcHRpb25zKSB7XG4gIHJldHVybiBnZW5lcmljU3Vic2NyaWJlKGZuLCB0aGlzLl9zdWJzY3JpYmVycywgb3B0aW9ucylcbn07XG5cblN0b3JlLnByb3RvdHlwZS5zdWJzY3JpYmVBY3Rpb24gPSBmdW5jdGlvbiBzdWJzY3JpYmVBY3Rpb24gKGZuLCBvcHRpb25zKSB7XG4gIHZhciBzdWJzID0gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nID8geyBiZWZvcmU6IGZuIH0gOiBmbjtcbiAgcmV0dXJuIGdlbmVyaWNTdWJzY3JpYmUoc3VicywgdGhpcy5fYWN0aW9uU3Vic2NyaWJlcnMsIG9wdGlvbnMpXG59O1xuXG5TdG9yZS5wcm90b3R5cGUud2F0Y2ggPSBmdW5jdGlvbiB3YXRjaCAoZ2V0dGVyLCBjYiwgb3B0aW9ucykge1xuICAgIHZhciB0aGlzJDEgPSB0aGlzO1xuXG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICBhc3NlcnQodHlwZW9mIGdldHRlciA9PT0gJ2Z1bmN0aW9uJywgXCJzdG9yZS53YXRjaCBvbmx5IGFjY2VwdHMgYSBmdW5jdGlvbi5cIik7XG4gIH1cbiAgcmV0dXJuIHRoaXMuX3dhdGNoZXJWTS4kd2F0Y2goZnVuY3Rpb24gKCkgeyByZXR1cm4gZ2V0dGVyKHRoaXMkMS5zdGF0ZSwgdGhpcyQxLmdldHRlcnMpOyB9LCBjYiwgb3B0aW9ucylcbn07XG5cblN0b3JlLnByb3RvdHlwZS5yZXBsYWNlU3RhdGUgPSBmdW5jdGlvbiByZXBsYWNlU3RhdGUgKHN0YXRlKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgdGhpcy5fd2l0aENvbW1pdChmdW5jdGlvbiAoKSB7XG4gICAgdGhpcyQxLl92bS5fZGF0YS4kJHN0YXRlID0gc3RhdGU7XG4gIH0pO1xufTtcblxuU3RvcmUucHJvdG90eXBlLnJlZ2lzdGVyTW9kdWxlID0gZnVuY3Rpb24gcmVnaXN0ZXJNb2R1bGUgKHBhdGgsIHJhd01vZHVsZSwgb3B0aW9ucykge1xuICAgIGlmICggb3B0aW9ucyA9PT0gdm9pZCAwICkgb3B0aW9ucyA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHsgcGF0aCA9IFtwYXRoXTsgfVxuXG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICBhc3NlcnQoQXJyYXkuaXNBcnJheShwYXRoKSwgXCJtb2R1bGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIGFuIEFycmF5LlwiKTtcbiAgICBhc3NlcnQocGF0aC5sZW5ndGggPiAwLCAnY2Fubm90IHJlZ2lzdGVyIHRoZSByb290IG1vZHVsZSBieSB1c2luZyByZWdpc3Rlck1vZHVsZS4nKTtcbiAgfVxuXG4gIHRoaXMuX21vZHVsZXMucmVnaXN0ZXIocGF0aCwgcmF3TW9kdWxlKTtcbiAgaW5zdGFsbE1vZHVsZSh0aGlzLCB0aGlzLnN0YXRlLCBwYXRoLCB0aGlzLl9tb2R1bGVzLmdldChwYXRoKSwgb3B0aW9ucy5wcmVzZXJ2ZVN0YXRlKTtcbiAgLy8gcmVzZXQgc3RvcmUgdG8gdXBkYXRlIGdldHRlcnMuLi5cbiAgcmVzZXRTdG9yZVZNKHRoaXMsIHRoaXMuc3RhdGUpO1xufTtcblxuU3RvcmUucHJvdG90eXBlLnVucmVnaXN0ZXJNb2R1bGUgPSBmdW5jdGlvbiB1bnJlZ2lzdGVyTW9kdWxlIChwYXRoKSB7XG4gICAgdmFyIHRoaXMkMSA9IHRoaXM7XG5cbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgeyBwYXRoID0gW3BhdGhdOyB9XG5cbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhdGgpLCBcIm1vZHVsZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gQXJyYXkuXCIpO1xuICB9XG5cbiAgdGhpcy5fbW9kdWxlcy51bnJlZ2lzdGVyKHBhdGgpO1xuICB0aGlzLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50U3RhdGUgPSBnZXROZXN0ZWRTdGF0ZSh0aGlzJDEuc3RhdGUsIHBhdGguc2xpY2UoMCwgLTEpKTtcbiAgICBWdWUuZGVsZXRlKHBhcmVudFN0YXRlLCBwYXRoW3BhdGgubGVuZ3RoIC0gMV0pO1xuICB9KTtcbiAgcmVzZXRTdG9yZSh0aGlzKTtcbn07XG5cblN0b3JlLnByb3RvdHlwZS5oYXNNb2R1bGUgPSBmdW5jdGlvbiBoYXNNb2R1bGUgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykgeyBwYXRoID0gW3BhdGhdOyB9XG5cbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgIGFzc2VydChBcnJheS5pc0FycmF5KHBhdGgpLCBcIm1vZHVsZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgYW4gQXJyYXkuXCIpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX21vZHVsZXMuaXNSZWdpc3RlcmVkKHBhdGgpXG59O1xuXG5TdG9yZS5wcm90b3R5cGUuaG90VXBkYXRlID0gZnVuY3Rpb24gaG90VXBkYXRlIChuZXdPcHRpb25zKSB7XG4gIHRoaXMuX21vZHVsZXMudXBkYXRlKG5ld09wdGlvbnMpO1xuICByZXNldFN0b3JlKHRoaXMsIHRydWUpO1xufTtcblxuU3RvcmUucHJvdG90eXBlLl93aXRoQ29tbWl0ID0gZnVuY3Rpb24gX3dpdGhDb21taXQgKGZuKSB7XG4gIHZhciBjb21taXR0aW5nID0gdGhpcy5fY29tbWl0dGluZztcbiAgdGhpcy5fY29tbWl0dGluZyA9IHRydWU7XG4gIGZuKCk7XG4gIHRoaXMuX2NvbW1pdHRpbmcgPSBjb21taXR0aW5nO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoIFN0b3JlLnByb3RvdHlwZSwgcHJvdG90eXBlQWNjZXNzb3JzJDEgKTtcblxuZnVuY3Rpb24gZ2VuZXJpY1N1YnNjcmliZSAoZm4sIHN1YnMsIG9wdGlvbnMpIHtcbiAgaWYgKHN1YnMuaW5kZXhPZihmbikgPCAwKSB7XG4gICAgb3B0aW9ucyAmJiBvcHRpb25zLnByZXBlbmRcbiAgICAgID8gc3Vicy51bnNoaWZ0KGZuKVxuICAgICAgOiBzdWJzLnB1c2goZm4pO1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGkgPSBzdWJzLmluZGV4T2YoZm4pO1xuICAgIGlmIChpID4gLTEpIHtcbiAgICAgIHN1YnMuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldFN0b3JlIChzdG9yZSwgaG90KSB7XG4gIHN0b3JlLl9hY3Rpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgc3RvcmUuX211dGF0aW9ucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHN0b3JlLl93cmFwcGVkR2V0dGVycyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIHN0YXRlID0gc3RvcmUuc3RhdGU7XG4gIC8vIGluaXQgYWxsIG1vZHVsZXNcbiAgaW5zdGFsbE1vZHVsZShzdG9yZSwgc3RhdGUsIFtdLCBzdG9yZS5fbW9kdWxlcy5yb290LCB0cnVlKTtcbiAgLy8gcmVzZXQgdm1cbiAgcmVzZXRTdG9yZVZNKHN0b3JlLCBzdGF0ZSwgaG90KTtcbn1cblxuZnVuY3Rpb24gcmVzZXRTdG9yZVZNIChzdG9yZSwgc3RhdGUsIGhvdCkge1xuICB2YXIgb2xkVm0gPSBzdG9yZS5fdm07XG5cbiAgLy8gYmluZCBzdG9yZSBwdWJsaWMgZ2V0dGVyc1xuICBzdG9yZS5nZXR0ZXJzID0ge307XG4gIC8vIHJlc2V0IGxvY2FsIGdldHRlcnMgY2FjaGVcbiAgc3RvcmUuX21ha2VMb2NhbEdldHRlcnNDYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciB3cmFwcGVkR2V0dGVycyA9IHN0b3JlLl93cmFwcGVkR2V0dGVycztcbiAgdmFyIGNvbXB1dGVkID0ge307XG4gIGZvckVhY2hWYWx1ZSh3cmFwcGVkR2V0dGVycywgZnVuY3Rpb24gKGZuLCBrZXkpIHtcbiAgICAvLyB1c2UgY29tcHV0ZWQgdG8gbGV2ZXJhZ2UgaXRzIGxhenktY2FjaGluZyBtZWNoYW5pc21cbiAgICAvLyBkaXJlY3QgaW5saW5lIGZ1bmN0aW9uIHVzZSB3aWxsIGxlYWQgdG8gY2xvc3VyZSBwcmVzZXJ2aW5nIG9sZFZtLlxuICAgIC8vIHVzaW5nIHBhcnRpYWwgdG8gcmV0dXJuIGZ1bmN0aW9uIHdpdGggb25seSBhcmd1bWVudHMgcHJlc2VydmVkIGluIGNsb3N1cmUgZW52aXJvbm1lbnQuXG4gICAgY29tcHV0ZWRba2V5XSA9IHBhcnRpYWwoZm4sIHN0b3JlKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3RvcmUuZ2V0dGVycywga2V5LCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLl92bVtrZXldOyB9LFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSAvLyBmb3IgbG9jYWwgZ2V0dGVyc1xuICAgIH0pO1xuICB9KTtcblxuICAvLyB1c2UgYSBWdWUgaW5zdGFuY2UgdG8gc3RvcmUgdGhlIHN0YXRlIHRyZWVcbiAgLy8gc3VwcHJlc3Mgd2FybmluZ3MganVzdCBpbiBjYXNlIHRoZSB1c2VyIGhhcyBhZGRlZFxuICAvLyBzb21lIGZ1bmt5IGdsb2JhbCBtaXhpbnNcbiAgdmFyIHNpbGVudCA9IFZ1ZS5jb25maWcuc2lsZW50O1xuICBWdWUuY29uZmlnLnNpbGVudCA9IHRydWU7XG4gIHN0b3JlLl92bSA9IG5ldyBWdWUoe1xuICAgIGRhdGE6IHtcbiAgICAgICQkc3RhdGU6IHN0YXRlXG4gICAgfSxcbiAgICBjb21wdXRlZDogY29tcHV0ZWRcbiAgfSk7XG4gIFZ1ZS5jb25maWcuc2lsZW50ID0gc2lsZW50O1xuXG4gIC8vIGVuYWJsZSBzdHJpY3QgbW9kZSBmb3IgbmV3IHZtXG4gIGlmIChzdG9yZS5zdHJpY3QpIHtcbiAgICBlbmFibGVTdHJpY3RNb2RlKHN0b3JlKTtcbiAgfVxuXG4gIGlmIChvbGRWbSkge1xuICAgIGlmIChob3QpIHtcbiAgICAgIC8vIGRpc3BhdGNoIGNoYW5nZXMgaW4gYWxsIHN1YnNjcmliZWQgd2F0Y2hlcnNcbiAgICAgIC8vIHRvIGZvcmNlIGdldHRlciByZS1ldmFsdWF0aW9uIGZvciBob3QgcmVsb2FkaW5nLlxuICAgICAgc3RvcmUuX3dpdGhDb21taXQoZnVuY3Rpb24gKCkge1xuICAgICAgICBvbGRWbS5fZGF0YS4kJHN0YXRlID0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBWdWUubmV4dFRpY2soZnVuY3Rpb24gKCkgeyByZXR1cm4gb2xkVm0uJGRlc3Ryb3koKTsgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5zdGFsbE1vZHVsZSAoc3RvcmUsIHJvb3RTdGF0ZSwgcGF0aCwgbW9kdWxlLCBob3QpIHtcbiAgdmFyIGlzUm9vdCA9ICFwYXRoLmxlbmd0aDtcbiAgdmFyIG5hbWVzcGFjZSA9IHN0b3JlLl9tb2R1bGVzLmdldE5hbWVzcGFjZShwYXRoKTtcblxuICAvLyByZWdpc3RlciBpbiBuYW1lc3BhY2UgbWFwXG4gIGlmIChtb2R1bGUubmFtZXNwYWNlZCkge1xuICAgIGlmIChzdG9yZS5fbW9kdWxlc05hbWVzcGFjZU1hcFtuYW1lc3BhY2VdICYmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSkge1xuICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gZHVwbGljYXRlIG5hbWVzcGFjZSBcIiArIG5hbWVzcGFjZSArIFwiIGZvciB0aGUgbmFtZXNwYWNlZCBtb2R1bGUgXCIgKyAocGF0aC5qb2luKCcvJykpKSk7XG4gICAgfVxuICAgIHN0b3JlLl9tb2R1bGVzTmFtZXNwYWNlTWFwW25hbWVzcGFjZV0gPSBtb2R1bGU7XG4gIH1cblxuICAvLyBzZXQgc3RhdGVcbiAgaWYgKCFpc1Jvb3QgJiYgIWhvdCkge1xuICAgIHZhciBwYXJlbnRTdGF0ZSA9IGdldE5lc3RlZFN0YXRlKHJvb3RTdGF0ZSwgcGF0aC5zbGljZSgwLCAtMSkpO1xuICAgIHZhciBtb2R1bGVOYW1lID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgIHN0b3JlLl93aXRoQ29tbWl0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgICAgaWYgKG1vZHVsZU5hbWUgaW4gcGFyZW50U3RhdGUpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAoXCJbdnVleF0gc3RhdGUgZmllbGQgXFxcIlwiICsgbW9kdWxlTmFtZSArIFwiXFxcIiB3YXMgb3ZlcnJpZGRlbiBieSBhIG1vZHVsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXQgXFxcIlwiICsgKHBhdGguam9pbignLicpKSArIFwiXFxcIlwiKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFZ1ZS5zZXQocGFyZW50U3RhdGUsIG1vZHVsZU5hbWUsIG1vZHVsZS5zdGF0ZSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgbG9jYWwgPSBtb2R1bGUuY29udGV4dCA9IG1ha2VMb2NhbENvbnRleHQoc3RvcmUsIG5hbWVzcGFjZSwgcGF0aCk7XG5cbiAgbW9kdWxlLmZvckVhY2hNdXRhdGlvbihmdW5jdGlvbiAobXV0YXRpb24sIGtleSkge1xuICAgIHZhciBuYW1lc3BhY2VkVHlwZSA9IG5hbWVzcGFjZSArIGtleTtcbiAgICByZWdpc3Rlck11dGF0aW9uKHN0b3JlLCBuYW1lc3BhY2VkVHlwZSwgbXV0YXRpb24sIGxvY2FsKTtcbiAgfSk7XG5cbiAgbW9kdWxlLmZvckVhY2hBY3Rpb24oZnVuY3Rpb24gKGFjdGlvbiwga2V5KSB7XG4gICAgdmFyIHR5cGUgPSBhY3Rpb24ucm9vdCA/IGtleSA6IG5hbWVzcGFjZSArIGtleTtcbiAgICB2YXIgaGFuZGxlciA9IGFjdGlvbi5oYW5kbGVyIHx8IGFjdGlvbjtcbiAgICByZWdpc3RlckFjdGlvbihzdG9yZSwgdHlwZSwgaGFuZGxlciwgbG9jYWwpO1xuICB9KTtcblxuICBtb2R1bGUuZm9yRWFjaEdldHRlcihmdW5jdGlvbiAoZ2V0dGVyLCBrZXkpIHtcbiAgICB2YXIgbmFtZXNwYWNlZFR5cGUgPSBuYW1lc3BhY2UgKyBrZXk7XG4gICAgcmVnaXN0ZXJHZXR0ZXIoc3RvcmUsIG5hbWVzcGFjZWRUeXBlLCBnZXR0ZXIsIGxvY2FsKTtcbiAgfSk7XG5cbiAgbW9kdWxlLmZvckVhY2hDaGlsZChmdW5jdGlvbiAoY2hpbGQsIGtleSkge1xuICAgIGluc3RhbGxNb2R1bGUoc3RvcmUsIHJvb3RTdGF0ZSwgcGF0aC5jb25jYXQoa2V5KSwgY2hpbGQsIGhvdCk7XG4gIH0pO1xufVxuXG4vKipcbiAqIG1ha2UgbG9jYWxpemVkIGRpc3BhdGNoLCBjb21taXQsIGdldHRlcnMgYW5kIHN0YXRlXG4gKiBpZiB0aGVyZSBpcyBubyBuYW1lc3BhY2UsIGp1c3QgdXNlIHJvb3Qgb25lc1xuICovXG5mdW5jdGlvbiBtYWtlTG9jYWxDb250ZXh0IChzdG9yZSwgbmFtZXNwYWNlLCBwYXRoKSB7XG4gIHZhciBub05hbWVzcGFjZSA9IG5hbWVzcGFjZSA9PT0gJyc7XG5cbiAgdmFyIGxvY2FsID0ge1xuICAgIGRpc3BhdGNoOiBub05hbWVzcGFjZSA/IHN0b3JlLmRpc3BhdGNoIDogZnVuY3Rpb24gKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpIHtcbiAgICAgIHZhciBhcmdzID0gdW5pZnlPYmplY3RTdHlsZShfdHlwZSwgX3BheWxvYWQsIF9vcHRpb25zKTtcbiAgICAgIHZhciBwYXlsb2FkID0gYXJncy5wYXlsb2FkO1xuICAgICAgdmFyIG9wdGlvbnMgPSBhcmdzLm9wdGlvbnM7XG4gICAgICB2YXIgdHlwZSA9IGFyZ3MudHlwZTtcblxuICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLnJvb3QpIHtcbiAgICAgICAgdHlwZSA9IG5hbWVzcGFjZSArIHR5cGU7XG4gICAgICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIXN0b3JlLl9hY3Rpb25zW3R5cGVdKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gdW5rbm93biBsb2NhbCBhY3Rpb24gdHlwZTogXCIgKyAoYXJncy50eXBlKSArIFwiLCBnbG9iYWwgdHlwZTogXCIgKyB0eXBlKSk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHN0b3JlLmRpc3BhdGNoKHR5cGUsIHBheWxvYWQpXG4gICAgfSxcblxuICAgIGNvbW1pdDogbm9OYW1lc3BhY2UgPyBzdG9yZS5jb21taXQgOiBmdW5jdGlvbiAoX3R5cGUsIF9wYXlsb2FkLCBfb3B0aW9ucykge1xuICAgICAgdmFyIGFyZ3MgPSB1bmlmeU9iamVjdFN0eWxlKF90eXBlLCBfcGF5bG9hZCwgX29wdGlvbnMpO1xuICAgICAgdmFyIHBheWxvYWQgPSBhcmdzLnBheWxvYWQ7XG4gICAgICB2YXIgb3B0aW9ucyA9IGFyZ3Mub3B0aW9ucztcbiAgICAgIHZhciB0eXBlID0gYXJncy50eXBlO1xuXG4gICAgICBpZiAoIW9wdGlvbnMgfHwgIW9wdGlvbnMucm9vdCkge1xuICAgICAgICB0eXBlID0gbmFtZXNwYWNlICsgdHlwZTtcbiAgICAgICAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhc3RvcmUuX211dGF0aW9uc1t0eXBlXSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gbG9jYWwgbXV0YXRpb24gdHlwZTogXCIgKyAoYXJncy50eXBlKSArIFwiLCBnbG9iYWwgdHlwZTogXCIgKyB0eXBlKSk7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3RvcmUuY29tbWl0KHR5cGUsIHBheWxvYWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgfTtcblxuICAvLyBnZXR0ZXJzIGFuZCBzdGF0ZSBvYmplY3QgbXVzdCBiZSBnb3R0ZW4gbGF6aWx5XG4gIC8vIGJlY2F1c2UgdGhleSB3aWxsIGJlIGNoYW5nZWQgYnkgdm0gdXBkYXRlXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxvY2FsLCB7XG4gICAgZ2V0dGVyczoge1xuICAgICAgZ2V0OiBub05hbWVzcGFjZVxuICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0b3JlLmdldHRlcnM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAoKSB7IHJldHVybiBtYWtlTG9jYWxHZXR0ZXJzKHN0b3JlLCBuYW1lc3BhY2UpOyB9XG4gICAgfSxcbiAgICBzdGF0ZToge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBnZXROZXN0ZWRTdGF0ZShzdG9yZS5zdGF0ZSwgcGF0aCk7IH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBsb2NhbFxufVxuXG5mdW5jdGlvbiBtYWtlTG9jYWxHZXR0ZXJzIChzdG9yZSwgbmFtZXNwYWNlKSB7XG4gIGlmICghc3RvcmUuX21ha2VMb2NhbEdldHRlcnNDYWNoZVtuYW1lc3BhY2VdKSB7XG4gICAgdmFyIGdldHRlcnNQcm94eSA9IHt9O1xuICAgIHZhciBzcGxpdFBvcyA9IG5hbWVzcGFjZS5sZW5ndGg7XG4gICAgT2JqZWN0LmtleXMoc3RvcmUuZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgLy8gc2tpcCBpZiB0aGUgdGFyZ2V0IGdldHRlciBpcyBub3QgbWF0Y2ggdGhpcyBuYW1lc3BhY2VcbiAgICAgIGlmICh0eXBlLnNsaWNlKDAsIHNwbGl0UG9zKSAhPT0gbmFtZXNwYWNlKSB7IHJldHVybiB9XG5cbiAgICAgIC8vIGV4dHJhY3QgbG9jYWwgZ2V0dGVyIHR5cGVcbiAgICAgIHZhciBsb2NhbFR5cGUgPSB0eXBlLnNsaWNlKHNwbGl0UG9zKTtcblxuICAgICAgLy8gQWRkIGEgcG9ydCB0byB0aGUgZ2V0dGVycyBwcm94eS5cbiAgICAgIC8vIERlZmluZSBhcyBnZXR0ZXIgcHJvcGVydHkgYmVjYXVzZVxuICAgICAgLy8gd2UgZG8gbm90IHdhbnQgdG8gZXZhbHVhdGUgdGhlIGdldHRlcnMgaW4gdGhpcyB0aW1lLlxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdldHRlcnNQcm94eSwgbG9jYWxUeXBlLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RvcmUuZ2V0dGVyc1t0eXBlXTsgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgc3RvcmUuX21ha2VMb2NhbEdldHRlcnNDYWNoZVtuYW1lc3BhY2VdID0gZ2V0dGVyc1Byb3h5O1xuICB9XG5cbiAgcmV0dXJuIHN0b3JlLl9tYWtlTG9jYWxHZXR0ZXJzQ2FjaGVbbmFtZXNwYWNlXVxufVxuXG5mdW5jdGlvbiByZWdpc3Rlck11dGF0aW9uIChzdG9yZSwgdHlwZSwgaGFuZGxlciwgbG9jYWwpIHtcbiAgdmFyIGVudHJ5ID0gc3RvcmUuX211dGF0aW9uc1t0eXBlXSB8fCAoc3RvcmUuX211dGF0aW9uc1t0eXBlXSA9IFtdKTtcbiAgZW50cnkucHVzaChmdW5jdGlvbiB3cmFwcGVkTXV0YXRpb25IYW5kbGVyIChwYXlsb2FkKSB7XG4gICAgaGFuZGxlci5jYWxsKHN0b3JlLCBsb2NhbC5zdGF0ZSwgcGF5bG9hZCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckFjdGlvbiAoc3RvcmUsIHR5cGUsIGhhbmRsZXIsIGxvY2FsKSB7XG4gIHZhciBlbnRyeSA9IHN0b3JlLl9hY3Rpb25zW3R5cGVdIHx8IChzdG9yZS5fYWN0aW9uc1t0eXBlXSA9IFtdKTtcbiAgZW50cnkucHVzaChmdW5jdGlvbiB3cmFwcGVkQWN0aW9uSGFuZGxlciAocGF5bG9hZCkge1xuICAgIHZhciByZXMgPSBoYW5kbGVyLmNhbGwoc3RvcmUsIHtcbiAgICAgIGRpc3BhdGNoOiBsb2NhbC5kaXNwYXRjaCxcbiAgICAgIGNvbW1pdDogbG9jYWwuY29tbWl0LFxuICAgICAgZ2V0dGVyczogbG9jYWwuZ2V0dGVycyxcbiAgICAgIHN0YXRlOiBsb2NhbC5zdGF0ZSxcbiAgICAgIHJvb3RHZXR0ZXJzOiBzdG9yZS5nZXR0ZXJzLFxuICAgICAgcm9vdFN0YXRlOiBzdG9yZS5zdGF0ZVxuICAgIH0sIHBheWxvYWQpO1xuICAgIGlmICghaXNQcm9taXNlKHJlcykpIHtcbiAgICAgIHJlcyA9IFByb21pc2UucmVzb2x2ZShyZXMpO1xuICAgIH1cbiAgICBpZiAoc3RvcmUuX2RldnRvb2xIb29rKSB7XG4gICAgICByZXR1cm4gcmVzLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgc3RvcmUuX2RldnRvb2xIb29rLmVtaXQoJ3Z1ZXg6ZXJyb3InLCBlcnIpO1xuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZWdpc3RlckdldHRlciAoc3RvcmUsIHR5cGUsIHJhd0dldHRlciwgbG9jYWwpIHtcbiAgaWYgKHN0b3JlLl93cmFwcGVkR2V0dGVyc1t0eXBlXSkge1xuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIGR1cGxpY2F0ZSBnZXR0ZXIga2V5OiBcIiArIHR5cGUpKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgc3RvcmUuX3dyYXBwZWRHZXR0ZXJzW3R5cGVdID0gZnVuY3Rpb24gd3JhcHBlZEdldHRlciAoc3RvcmUpIHtcbiAgICByZXR1cm4gcmF3R2V0dGVyKFxuICAgICAgbG9jYWwuc3RhdGUsIC8vIGxvY2FsIHN0YXRlXG4gICAgICBsb2NhbC5nZXR0ZXJzLCAvLyBsb2NhbCBnZXR0ZXJzXG4gICAgICBzdG9yZS5zdGF0ZSwgLy8gcm9vdCBzdGF0ZVxuICAgICAgc3RvcmUuZ2V0dGVycyAvLyByb290IGdldHRlcnNcbiAgICApXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVuYWJsZVN0cmljdE1vZGUgKHN0b3JlKSB7XG4gIHN0b3JlLl92bS4kd2F0Y2goZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpcy5fZGF0YS4kJHN0YXRlIH0sIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpKSB7XG4gICAgICBhc3NlcnQoc3RvcmUuX2NvbW1pdHRpbmcsIFwiZG8gbm90IG11dGF0ZSB2dWV4IHN0b3JlIHN0YXRlIG91dHNpZGUgbXV0YXRpb24gaGFuZGxlcnMuXCIpO1xuICAgIH1cbiAgfSwgeyBkZWVwOiB0cnVlLCBzeW5jOiB0cnVlIH0pO1xufVxuXG5mdW5jdGlvbiBnZXROZXN0ZWRTdGF0ZSAoc3RhdGUsIHBhdGgpIHtcbiAgcmV0dXJuIHBhdGgucmVkdWNlKGZ1bmN0aW9uIChzdGF0ZSwga2V5KSB7IHJldHVybiBzdGF0ZVtrZXldOyB9LCBzdGF0ZSlcbn1cblxuZnVuY3Rpb24gdW5pZnlPYmplY3RTdHlsZSAodHlwZSwgcGF5bG9hZCwgb3B0aW9ucykge1xuICBpZiAoaXNPYmplY3QodHlwZSkgJiYgdHlwZS50eXBlKSB7XG4gICAgb3B0aW9ucyA9IHBheWxvYWQ7XG4gICAgcGF5bG9hZCA9IHR5cGU7XG4gICAgdHlwZSA9IHR5cGUudHlwZTtcbiAgfVxuXG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICBhc3NlcnQodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnLCAoXCJleHBlY3RzIHN0cmluZyBhcyB0aGUgdHlwZSwgYnV0IGZvdW5kIFwiICsgKHR5cGVvZiB0eXBlKSArIFwiLlwiKSk7XG4gIH1cblxuICByZXR1cm4geyB0eXBlOiB0eXBlLCBwYXlsb2FkOiBwYXlsb2FkLCBvcHRpb25zOiBvcHRpb25zIH1cbn1cblxuZnVuY3Rpb24gaW5zdGFsbCAoX1Z1ZSkge1xuICBpZiAoVnVlICYmIF9WdWUgPT09IFZ1ZSkge1xuICAgIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdbdnVleF0gYWxyZWFkeSBpbnN0YWxsZWQuIFZ1ZS51c2UoVnVleCkgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IG9uY2UuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgVnVlID0gX1Z1ZTtcbiAgYXBwbHlNaXhpbihWdWUpO1xufVxuXG4vKipcbiAqIFJlZHVjZSB0aGUgY29kZSB3aGljaCB3cml0dGVuIGluIFZ1ZS5qcyBmb3IgZ2V0dGluZyB0aGUgc3RhdGUuXG4gKiBAcGFyYW0ge1N0cmluZ30gW25hbWVzcGFjZV0gLSBNb2R1bGUncyBuYW1lc3BhY2VcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBzdGF0ZXMgIyBPYmplY3QncyBpdGVtIGNhbiBiZSBhIGZ1bmN0aW9uIHdoaWNoIGFjY2VwdCBzdGF0ZSBhbmQgZ2V0dGVycyBmb3IgcGFyYW0sIHlvdSBjYW4gZG8gc29tZXRoaW5nIGZvciBzdGF0ZSBhbmQgZ2V0dGVycyBpbiBpdC5cbiAqIEBwYXJhbSB7T2JqZWN0fVxuICovXG52YXIgbWFwU3RhdGUgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgc3RhdGVzKSB7XG4gIHZhciByZXMgPSB7fTtcbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhaXNWYWxpZE1hcChzdGF0ZXMpKSB7XG4gICAgY29uc29sZS5lcnJvcignW3Z1ZXhdIG1hcFN0YXRlOiBtYXBwZXIgcGFyYW1ldGVyIG11c3QgYmUgZWl0aGVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCcpO1xuICB9XG4gIG5vcm1hbGl6ZU1hcChzdGF0ZXMpLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgIHZhciBrZXkgPSByZWYua2V5O1xuICAgIHZhciB2YWwgPSByZWYudmFsO1xuXG4gICAgcmVzW2tleV0gPSBmdW5jdGlvbiBtYXBwZWRTdGF0ZSAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSB0aGlzLiRzdG9yZS5zdGF0ZTtcbiAgICAgIHZhciBnZXR0ZXJzID0gdGhpcy4kc3RvcmUuZ2V0dGVycztcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwU3RhdGUnLCBuYW1lc3BhY2UpO1xuICAgICAgICBpZiAoIW1vZHVsZSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHN0YXRlID0gbW9kdWxlLmNvbnRleHQuc3RhdGU7XG4gICAgICAgIGdldHRlcnMgPSBtb2R1bGUuY29udGV4dC5nZXR0ZXJzO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyB2YWwuY2FsbCh0aGlzLCBzdGF0ZSwgZ2V0dGVycylcbiAgICAgICAgOiBzdGF0ZVt2YWxdXG4gICAgfTtcbiAgICAvLyBtYXJrIHZ1ZXggZ2V0dGVyIGZvciBkZXZ0b29sc1xuICAgIHJlc1trZXldLnZ1ZXggPSB0cnVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc1xufSk7XG5cbi8qKlxuICogUmVkdWNlIHRoZSBjb2RlIHdoaWNoIHdyaXR0ZW4gaW4gVnVlLmpzIGZvciBjb21taXR0aW5nIHRoZSBtdXRhdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IFtuYW1lc3BhY2VdIC0gTW9kdWxlJ3MgbmFtZXNwYWNlXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gbXV0YXRpb25zICMgT2JqZWN0J3MgaXRlbSBjYW4gYmUgYSBmdW5jdGlvbiB3aGljaCBhY2NlcHQgYGNvbW1pdGAgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IHBhcmFtLCBpdCBjYW4gYWNjZXB0IGFudGhvciBwYXJhbXMuIFlvdSBjYW4gY29tbWl0IG11dGF0aW9uIGFuZCBkbyBhbnkgb3RoZXIgdGhpbmdzIGluIHRoaXMgZnVuY3Rpb24uIHNwZWNpYWxseSwgWW91IG5lZWQgdG8gcGFzcyBhbnRob3IgcGFyYW1zIGZyb20gdGhlIG1hcHBlZCBmdW5jdGlvbi5cbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xudmFyIG1hcE11dGF0aW9ucyA9IG5vcm1hbGl6ZU5hbWVzcGFjZShmdW5jdGlvbiAobmFtZXNwYWNlLCBtdXRhdGlvbnMpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc1ZhbGlkTWFwKG11dGF0aW9ucykpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbdnVleF0gbWFwTXV0YXRpb25zOiBtYXBwZXIgcGFyYW1ldGVyIG11c3QgYmUgZWl0aGVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCcpO1xuICB9XG4gIG5vcm1hbGl6ZU1hcChtdXRhdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgIHZhciBrZXkgPSByZWYua2V5O1xuICAgIHZhciB2YWwgPSByZWYudmFsO1xuXG4gICAgcmVzW2tleV0gPSBmdW5jdGlvbiBtYXBwZWRNdXRhdGlvbiAoKSB7XG4gICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgLy8gR2V0IHRoZSBjb21taXQgbWV0aG9kIGZyb20gc3RvcmVcbiAgICAgIHZhciBjb21taXQgPSB0aGlzLiRzdG9yZS5jb21taXQ7XG4gICAgICBpZiAobmFtZXNwYWNlKSB7XG4gICAgICAgIHZhciBtb2R1bGUgPSBnZXRNb2R1bGVCeU5hbWVzcGFjZSh0aGlzLiRzdG9yZSwgJ21hcE11dGF0aW9ucycsIG5hbWVzcGFjZSk7XG4gICAgICAgIGlmICghbW9kdWxlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgY29tbWl0ID0gbW9kdWxlLmNvbnRleHQuY29tbWl0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyB2YWwuYXBwbHkodGhpcywgW2NvbW1pdF0uY29uY2F0KGFyZ3MpKVxuICAgICAgICA6IGNvbW1pdC5hcHBseSh0aGlzLiRzdG9yZSwgW3ZhbF0uY29uY2F0KGFyZ3MpKVxuICAgIH07XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxuLyoqXG4gKiBSZWR1Y2UgdGhlIGNvZGUgd2hpY2ggd3JpdHRlbiBpbiBWdWUuanMgZm9yIGdldHRpbmcgdGhlIGdldHRlcnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZXNwYWNlXSAtIE1vZHVsZSdzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IGdldHRlcnNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xudmFyIG1hcEdldHRlcnMgPSBub3JtYWxpemVOYW1lc3BhY2UoZnVuY3Rpb24gKG5hbWVzcGFjZSwgZ2V0dGVycykge1xuICB2YXIgcmVzID0ge307XG4gIGlmICgocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykgJiYgIWlzVmFsaWRNYXAoZ2V0dGVycykpIHtcbiAgICBjb25zb2xlLmVycm9yKCdbdnVleF0gbWFwR2V0dGVyczogbWFwcGVyIHBhcmFtZXRlciBtdXN0IGJlIGVpdGhlciBhbiBBcnJheSBvciBhbiBPYmplY3QnKTtcbiAgfVxuICBub3JtYWxpemVNYXAoZ2V0dGVycykuZm9yRWFjaChmdW5jdGlvbiAocmVmKSB7XG4gICAgdmFyIGtleSA9IHJlZi5rZXk7XG4gICAgdmFyIHZhbCA9IHJlZi52YWw7XG5cbiAgICAvLyBUaGUgbmFtZXNwYWNlIGhhcyBiZWVuIG11dGF0ZWQgYnkgbm9ybWFsaXplTmFtZXNwYWNlXG4gICAgdmFsID0gbmFtZXNwYWNlICsgdmFsO1xuICAgIHJlc1trZXldID0gZnVuY3Rpb24gbWFwcGVkR2V0dGVyICgpIHtcbiAgICAgIGlmIChuYW1lc3BhY2UgJiYgIWdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwR2V0dGVycycsIG5hbWVzcGFjZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICEodmFsIGluIHRoaXMuJHN0b3JlLmdldHRlcnMpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoKFwiW3Z1ZXhdIHVua25vd24gZ2V0dGVyOiBcIiArIHZhbCkpO1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLiRzdG9yZS5nZXR0ZXJzW3ZhbF1cbiAgICB9O1xuICAgIC8vIG1hcmsgdnVleCBnZXR0ZXIgZm9yIGRldnRvb2xzXG4gICAgcmVzW2tleV0udnVleCA9IHRydWU7XG4gIH0pO1xuICByZXR1cm4gcmVzXG59KTtcblxuLyoqXG4gKiBSZWR1Y2UgdGhlIGNvZGUgd2hpY2ggd3JpdHRlbiBpbiBWdWUuanMgZm9yIGRpc3BhdGNoIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBbbmFtZXNwYWNlXSAtIE1vZHVsZSdzIG5hbWVzcGFjZVxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IGFjdGlvbnMgIyBPYmplY3QncyBpdGVtIGNhbiBiZSBhIGZ1bmN0aW9uIHdoaWNoIGFjY2VwdCBgZGlzcGF0Y2hgIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBwYXJhbSwgaXQgY2FuIGFjY2VwdCBhbnRob3IgcGFyYW1zLiBZb3UgY2FuIGRpc3BhdGNoIGFjdGlvbiBhbmQgZG8gYW55IG90aGVyIHRoaW5ncyBpbiB0aGlzIGZ1bmN0aW9uLiBzcGVjaWFsbHksIFlvdSBuZWVkIHRvIHBhc3MgYW50aG9yIHBhcmFtcyBmcm9tIHRoZSBtYXBwZWQgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cbnZhciBtYXBBY3Rpb25zID0gbm9ybWFsaXplTmFtZXNwYWNlKGZ1bmN0aW9uIChuYW1lc3BhY2UsIGFjdGlvbnMpIHtcbiAgdmFyIHJlcyA9IHt9O1xuICBpZiAoKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpICYmICFpc1ZhbGlkTWFwKGFjdGlvbnMpKSB7XG4gICAgY29uc29sZS5lcnJvcignW3Z1ZXhdIG1hcEFjdGlvbnM6IG1hcHBlciBwYXJhbWV0ZXIgbXVzdCBiZSBlaXRoZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0Jyk7XG4gIH1cbiAgbm9ybWFsaXplTWFwKGFjdGlvbnMpLmZvckVhY2goZnVuY3Rpb24gKHJlZikge1xuICAgIHZhciBrZXkgPSByZWYua2V5O1xuICAgIHZhciB2YWwgPSByZWYudmFsO1xuXG4gICAgcmVzW2tleV0gPSBmdW5jdGlvbiBtYXBwZWRBY3Rpb24gKCkge1xuICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgIC8vIGdldCBkaXNwYXRjaCBmdW5jdGlvbiBmcm9tIHN0b3JlXG4gICAgICB2YXIgZGlzcGF0Y2ggPSB0aGlzLiRzdG9yZS5kaXNwYXRjaDtcbiAgICAgIGlmIChuYW1lc3BhY2UpIHtcbiAgICAgICAgdmFyIG1vZHVsZSA9IGdldE1vZHVsZUJ5TmFtZXNwYWNlKHRoaXMuJHN0b3JlLCAnbWFwQWN0aW9ucycsIG5hbWVzcGFjZSk7XG4gICAgICAgIGlmICghbW9kdWxlKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgZGlzcGF0Y2ggPSBtb2R1bGUuY29udGV4dC5kaXNwYXRjaDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0eXBlb2YgdmFsID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdmFsLmFwcGx5KHRoaXMsIFtkaXNwYXRjaF0uY29uY2F0KGFyZ3MpKVxuICAgICAgICA6IGRpc3BhdGNoLmFwcGx5KHRoaXMuJHN0b3JlLCBbdmFsXS5jb25jYXQoYXJncykpXG4gICAgfTtcbiAgfSk7XG4gIHJldHVybiByZXNcbn0pO1xuXG4vKipcbiAqIFJlYmluZGluZyBuYW1lc3BhY2UgcGFyYW0gZm9yIG1hcFhYWCBmdW5jdGlvbiBpbiBzcGVjaWFsIHNjb3BlZCwgYW5kIHJldHVybiB0aGVtIGJ5IHNpbXBsZSBvYmplY3RcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xudmFyIGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzID0gZnVuY3Rpb24gKG5hbWVzcGFjZSkgeyByZXR1cm4gKHtcbiAgbWFwU3RhdGU6IG1hcFN0YXRlLmJpbmQobnVsbCwgbmFtZXNwYWNlKSxcbiAgbWFwR2V0dGVyczogbWFwR2V0dGVycy5iaW5kKG51bGwsIG5hbWVzcGFjZSksXG4gIG1hcE11dGF0aW9uczogbWFwTXV0YXRpb25zLmJpbmQobnVsbCwgbmFtZXNwYWNlKSxcbiAgbWFwQWN0aW9uczogbWFwQWN0aW9ucy5iaW5kKG51bGwsIG5hbWVzcGFjZSlcbn0pOyB9O1xuXG4vKipcbiAqIE5vcm1hbGl6ZSB0aGUgbWFwXG4gKiBub3JtYWxpemVNYXAoWzEsIDIsIDNdKSA9PiBbIHsga2V5OiAxLCB2YWw6IDEgfSwgeyBrZXk6IDIsIHZhbDogMiB9LCB7IGtleTogMywgdmFsOiAzIH0gXVxuICogbm9ybWFsaXplTWFwKHthOiAxLCBiOiAyLCBjOiAzfSkgPT4gWyB7IGtleTogJ2EnLCB2YWw6IDEgfSwgeyBrZXk6ICdiJywgdmFsOiAyIH0sIHsga2V5OiAnYycsIHZhbDogMyB9IF1cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBtYXBcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWFwIChtYXApIHtcbiAgaWYgKCFpc1ZhbGlkTWFwKG1hcCkpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuICByZXR1cm4gQXJyYXkuaXNBcnJheShtYXApXG4gICAgPyBtYXAubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICh7IGtleToga2V5LCB2YWw6IGtleSB9KTsgfSlcbiAgICA6IE9iamVjdC5rZXlzKG1hcCkubWFwKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICh7IGtleToga2V5LCB2YWw6IG1hcFtrZXldIH0pOyB9KVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIHdoZXRoZXIgZ2l2ZW4gbWFwIGlzIHZhbGlkIG9yIG5vdFxuICogQHBhcmFtIHsqfSBtYXBcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRNYXAgKG1hcCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShtYXApIHx8IGlzT2JqZWN0KG1hcClcbn1cblxuLyoqXG4gKiBSZXR1cm4gYSBmdW5jdGlvbiBleHBlY3QgdHdvIHBhcmFtIGNvbnRhaW5zIG5hbWVzcGFjZSBhbmQgbWFwLiBpdCB3aWxsIG5vcm1hbGl6ZSB0aGUgbmFtZXNwYWNlIGFuZCB0aGVuIHRoZSBwYXJhbSdzIGZ1bmN0aW9uIHdpbGwgaGFuZGxlIHRoZSBuZXcgbmFtZXNwYWNlIGFuZCB0aGUgbWFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lc3BhY2UgKGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAobmFtZXNwYWNlLCBtYXApIHtcbiAgICBpZiAodHlwZW9mIG5hbWVzcGFjZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIG1hcCA9IG5hbWVzcGFjZTtcbiAgICAgIG5hbWVzcGFjZSA9ICcnO1xuICAgIH0gZWxzZSBpZiAobmFtZXNwYWNlLmNoYXJBdChuYW1lc3BhY2UubGVuZ3RoIC0gMSkgIT09ICcvJykge1xuICAgICAgbmFtZXNwYWNlICs9ICcvJztcbiAgICB9XG4gICAgcmV0dXJuIGZuKG5hbWVzcGFjZSwgbWFwKVxuICB9XG59XG5cbi8qKlxuICogU2VhcmNoIGEgc3BlY2lhbCBtb2R1bGUgZnJvbSBzdG9yZSBieSBuYW1lc3BhY2UuIGlmIG1vZHVsZSBub3QgZXhpc3QsIHByaW50IGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RvcmVcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWxwZXJcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuZnVuY3Rpb24gZ2V0TW9kdWxlQnlOYW1lc3BhY2UgKHN0b3JlLCBoZWxwZXIsIG5hbWVzcGFjZSkge1xuICB2YXIgbW9kdWxlID0gc3RvcmUuX21vZHVsZXNOYW1lc3BhY2VNYXBbbmFtZXNwYWNlXTtcbiAgaWYgKChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSAmJiAhbW9kdWxlKSB7XG4gICAgY29uc29sZS5lcnJvcigoXCJbdnVleF0gbW9kdWxlIG5hbWVzcGFjZSBub3QgZm91bmQgaW4gXCIgKyBoZWxwZXIgKyBcIigpOiBcIiArIG5hbWVzcGFjZSkpO1xuICB9XG4gIHJldHVybiBtb2R1bGVcbn1cblxudmFyIGluZGV4ID0ge1xuICBTdG9yZTogU3RvcmUsXG4gIGluc3RhbGw6IGluc3RhbGwsXG4gIHZlcnNpb246ICczLjQuMCcsXG4gIG1hcFN0YXRlOiBtYXBTdGF0ZSxcbiAgbWFwTXV0YXRpb25zOiBtYXBNdXRhdGlvbnMsXG4gIG1hcEdldHRlcnM6IG1hcEdldHRlcnMsXG4gIG1hcEFjdGlvbnM6IG1hcEFjdGlvbnMsXG4gIGNyZWF0ZU5hbWVzcGFjZWRIZWxwZXJzOiBjcmVhdGVOYW1lc3BhY2VkSGVscGVyc1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaW5kZXg7XG5leHBvcnQgeyBTdG9yZSwgY3JlYXRlTmFtZXNwYWNlZEhlbHBlcnMsIGluc3RhbGwsIG1hcEFjdGlvbnMsIG1hcEdldHRlcnMsIG1hcE11dGF0aW9ucywgbWFwU3RhdGUgfTtcbiIsImxldCBzdGF0ZSA9IHtcclxuXHR1c2VySW5mbzoge30sIC8v55So5oi35L+h5oGvXHJcblx0b3JkZXJJbmZvOiB7XHJcblx0XHRjb21wbGV0ZV9jb3VudDogMCwgLy/lrozmiJBcclxuXHRcdHJlY2VpdmVkX2NvdW50OiAwLCAvL+W+heaUtui0p1xyXG5cdFx0dW5zaGlwcGVkX2NvdW50OiAwLCAvL+W+heWPkei0p1xyXG5cdFx0b3JkZXJfY291bnQ6IDAsIC8v6K6i5Y2V5oC75pWwXHJcblx0XHR1bnBhaWRfY291bnQ6IDAgLy/lvoXku5jmrL5cclxuXHR9LCAvL+iuouWNleS/oeaBr1xyXG5cdGhhc0xvZ2luOiBmYWxzZSwgLy/mmK/lkKbnmbvlvZVcclxufVxyXG5cclxubGV0IG11dGF0aW9ucyA9IHtcclxuXHQvLyDnmbvlvZVcclxuXHRsb2dpbihzdGF0ZSkge1xyXG5cdFx0c3RhdGUuaGFzTG9naW4gPSB0cnVlO1xyXG5cdH0sXHJcblx0Ly8g6YCA5Ye655m75b2VXHJcblx0bG9nb3V0KHN0YXRlLCBwcm92aWRlcikge1xyXG5cdFx0c3RhdGUuaGFzTG9naW4gPSBmYWxzZTtcclxuXHRcdC8vIOa4heepuuWfuuehgOS/oeaBr1xyXG5cdFx0c3RhdGUudXNlckluZm8gPSB7fTtcclxuXHRcdHN0YXRlLm9yZGVySW5mbyA9IHtcclxuXHRcdFx0Y29tcGxldGVfY291bnQ6IDAsIC8v5a6M5oiQXHJcblx0XHRcdHJlY2VpdmVkX2NvdW50OiAwLCAvL+W+heaUtui0p1xyXG5cdFx0XHR1bnNoaXBwZWRfY291bnQ6IDAsIC8v5b6F5Y+R6LSnXHJcblx0XHRcdG9yZGVyX2NvdW50OiAwLCAvL+iuouWNleaAu+aVsFxyXG5cdFx0XHR1bnBhaWRfY291bnQ6IDAgLy/lvoXku5jmrL5cclxuXHRcdH07XHJcblx0XHQvLyDmuIXpmaTnvJPlrZjnlKjmiLfkv6Hmga9cclxuXHRcdHVuaS5yZW1vdmVTdG9yYWdlKHtcclxuXHRcdFx0a2V5OiAndXNlckluZm8nXHJcblx0XHR9KVxyXG5cdFx0Ly8g5riF6Zmk57yT5a2YdG9rZW5cclxuXHRcdHVuaS5yZW1vdmVTdG9yYWdlKHtcclxuXHRcdFx0a2V5OiAndG9rZW4nXHJcblx0XHR9KVxyXG5cdH0sXHJcblx0Ly8g5L+d5a2Y55So5oi35L+h5oGvXHJcblx0c2V0VXNlckluZm8oc3RhdGUsIHByb3ZpZGVyKSB7XHJcblx0XHRzdGF0ZS51c2VySW5mbyA9IHByb3ZpZGVyO1xyXG5cdFx0dW5pLnNldFN0b3JhZ2UoeyAvL+e8k+WtmOeUqOaIt+eZu+mZhueKtuaAgVxyXG5cdFx0XHRrZXk6ICd1c2VySW5mbycsXHJcblx0XHRcdGRhdGE6IHByb3ZpZGVyXHJcblx0XHR9KVxyXG5cdH0sXHJcblx0Ly8g5L+d5a2Y6K6i5Y2V5L+h5oGvXHJcblx0c2V0T3JkZXJJbmZvKHN0YXRlLCBwcm92aWRlcikge1xyXG5cdFx0c3RhdGUub3JkZXJJbmZvID0gcHJvdmlkZXI7XHJcblx0fVxyXG5cclxufVxyXG5cclxubGV0IGdldHRlcnMgPSB7fVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG5cdG5hbWVzcGFjZWQ6IHRydWUsXHJcblx0c3RhdGUsXHJcblx0bXV0YXRpb25zLFxyXG5cdGdldHRlcnNcclxufVxyXG4iLCJpbXBvcnQgcmVxdWVzdCBmcm9tICdAL3V0aWxzL3JlcXVlc3QnXHJcblxyXG4vL+aVkeaKpOWfueiureezu+ivpuaDhVxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0X3RyYWluaW5nKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2dldF90cmFpbmluZycsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGV0YWlsX3RyYWluaW5nKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2RldGFpbF90cmFpbmluZycsXHJcblx0XHRtZXRob2Q6ICdnZXQnLFxyXG5cdFx0ZGF0YVxyXG5cdH0pO1xyXG59XHJcbi8v5pWR5oqk5Z+56K6t5oql5ZCNXHJcbmV4cG9ydCBmdW5jdGlvbiBzaWduX3RyYWluaW5nKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL3NpZ25fdHJhaW5pbmcnLFxyXG5cdFx0bWV0aG9kOiAncG9zdCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuLy/lv5fmhL/ogIXmiqXlkI1cclxuZXhwb3J0IGZ1bmN0aW9uIGFkZF92b2x1bnRlZXJzKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2FkZF9yZWdpc3RyYXRpb24nLFxyXG5cdFx0bWV0aG9kOiAncG9zdCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuLy8g6YCg6KGA5bmy57uG6IOe5YiX6KGoXHJcbmV4cG9ydCBmdW5jdGlvbiBjZWxsKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2NlbGwnLFxyXG5cdFx0bWV0aG9kOiAnZ2V0JyxcclxuXHRcdGRhdGFcclxuXHR9KTtcclxufVxyXG4vLyDpgKDooYDlubLnu4bog57or6bmg4VcclxuZXhwb3J0IGZ1bmN0aW9uIGdldF9jZWxsKGRhdGEpIHtcclxuXHRyZXR1cm4gcmVxdWVzdCh7XHJcblx0XHR1cmw6ICcvYXBpL2dldF9jZWxsJyxcclxuXHRcdG1ldGhvZDogJ2dldCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIHNpZ25fY2VsbChkYXRhKSB7XHJcblx0cmV0dXJuIHJlcXVlc3Qoe1xyXG5cdFx0dXJsOiAnL2FwaS9zaWduX2NlbGwnLFxyXG5cdFx0bWV0aG9kOiAncG9zdCcsXHJcblx0XHRkYXRhXHJcblx0fSk7XHJcbn1cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=