| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771167721677316774167751677616777167781677916780167811678216783167841678516786167871678816789167901679116792167931679416795167961679716798167991680016801168021680316804168051680616807168081680916810168111681216813168141681516816168171681816819168201682116822168231682416825168261682716828168291683016831168321683316834168351683616837168381683916840168411684216843168441684516846168471684816849168501685116852168531685416855168561685716858168591686016861168621686316864168651686616867168681686916870168711687216873168741687516876168771687816879168801688116882168831688416885168861688716888168891689016891168921689316894168951689616897168981689916900169011690216903169041690516906169071690816909169101691116912169131691416915169161691716918169191692016921169221692316924169251692616927169281692916930169311693216933169341693516936169371693816939169401694116942169431694416945169461694716948169491695016951169521695316954169551695616957169581695916960169611696216963169641696516966169671696816969169701697116972169731697416975169761697716978169791698016981169821698316984169851698616987169881698916990169911699216993169941699516996169971699816999170001700117002170031700417005170061700717008170091701017011170121701317014170151701617017170181701917020170211702217023170241702517026170271702817029170301703117032170331703417035170361703717038170391704017041170421704317044170451704617047170481704917050170511705217053170541705517056170571705817059170601706117062170631706417065170661706717068170691707017071170721707317074170751707617077170781707917080170811708217083170841708517086170871708817089170901709117092170931709417095170961709717098170991710017101171021710317104171051710617107171081710917110171111711217113171141711517116171171711817119171201712117122171231712417125171261712717128171291713017131171321713317134171351713617137171381713917140171411714217143171441714517146171471714817149171501715117152171531715417155171561715717158171591716017161171621716317164171651716617167171681716917170171711717217173171741717517176171771717817179171801718117182171831718417185171861718717188171891719017191171921719317194171951719617197171981719917200172011720217203172041720517206172071720817209172101721117212172131721417215172161721717218172191722017221172221722317224172251722617227172281722917230172311723217233172341723517236172371723817239172401724117242172431724417245172461724717248172491725017251172521725317254172551725617257172581725917260172611726217263172641726517266172671726817269172701727117272172731727417275172761727717278172791728017281172821728317284172851728617287172881728917290172911729217293172941729517296172971729817299173001730117302173031730417305173061730717308173091731017311173121731317314173151731617317173181731917320173211732217323173241732517326173271732817329173301733117332173331733417335173361733717338173391734017341173421734317344173451734617347173481734917350173511735217353173541735517356173571735817359173601736117362173631736417365173661736717368173691737017371173721737317374173751737617377173781737917380173811738217383173841738517386173871738817389173901739117392173931739417395173961739717398173991740017401174021740317404174051740617407174081740917410174111741217413174141741517416174171741817419174201742117422174231742417425174261742717428174291743017431174321743317434174351743617437174381743917440174411744217443174441744517446174471744817449174501745117452174531745417455174561745717458174591746017461174621746317464174651746617467174681746917470174711747217473174741747517476174771747817479174801748117482174831748417485174861748717488174891749017491174921749317494174951749617497174981749917500175011750217503175041750517506175071750817509175101751117512175131751417515175161751717518175191752017521175221752317524175251752617527175281752917530175311753217533175341753517536175371753817539175401754117542175431754417545175461754717548175491755017551175521755317554175551755617557175581755917560175611756217563175641756517566175671756817569175701757117572175731757417575175761757717578175791758017581175821758317584175851758617587175881758917590175911759217593175941759517596175971759817599176001760117602176031760417605176061760717608176091761017611176121761317614176151761617617176181761917620176211762217623176241762517626176271762817629176301763117632176331763417635176361763717638176391764017641176421764317644176451764617647176481764917650176511765217653176541765517656176571765817659176601766117662176631766417665176661766717668176691767017671176721767317674176751767617677176781767917680176811768217683176841768517686176871768817689176901769117692176931769417695176961769717698176991770017701177021770317704177051770617707177081770917710177111771217713177141771517716177171771817719177201772117722177231772417725177261772717728177291773017731177321773317734177351773617737177381773917740177411774217743177441774517746177471774817749177501775117752177531775417755177561775717758177591776017761177621776317764177651776617767177681776917770177711777217773177741777517776177771777817779177801778117782177831778417785177861778717788177891779017791177921779317794177951779617797177981779917800178011780217803178041780517806178071780817809178101781117812178131781417815178161781717818178191782017821178221782317824178251782617827178281782917830178311783217833178341783517836178371783817839178401784117842178431784417845178461784717848178491785017851178521785317854178551785617857178581785917860178611786217863178641786517866178671786817869178701787117872178731787417875178761787717878178791788017881178821788317884178851788617887178881788917890178911789217893178941789517896178971789817899179001790117902179031790417905179061790717908179091791017911179121791317914179151791617917179181791917920179211792217923179241792517926179271792817929179301793117932179331793417935179361793717938179391794017941179421794317944179451794617947179481794917950179511795217953179541795517956179571795817959179601796117962179631796417965179661796717968179691797017971179721797317974179751797617977179781797917980179811798217983179841798517986179871798817989179901799117992179931799417995179961799717998179991800018001180021800318004180051800618007180081800918010180111801218013180141801518016180171801818019180201802118022180231802418025180261802718028180291803018031180321803318034180351803618037180381803918040180411804218043180441804518046180471804818049180501805118052180531805418055180561805718058180591806018061180621806318064 |
- (global["webpackJsonp"] = global["webpackJsonp"] || []).push([["common/vendor"],{
- /***/ 1:
- /*!*************************************************************!*\
- !*** ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js ***!
- \*************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- 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;}
- function b64DecodeUnicode(str) {
- return decodeURIComponent(atob(str).split('').map(function (c) {
- return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
- }).join(''));
- }
- function getCurrentUserInfo() {
- var token = tt.getStorageSync('uni_id_token') || '';
- var tokenArr = token.split('.');
- if (!token || tokenArr.length !== 3) {
- return {
- uid: null,
- role: [],
- permission: [],
- tokenExpired: 0 };
- }
- var userInfo;
- try {
- userInfo = JSON.parse(b64DecodeUnicode(tokenArr[1]));
- } catch (error) {
- throw new Error('获取当前用户信息出错,详细错误信息为:' + error.message);
- }
- userInfo.tokenExpired = userInfo.exp * 1000;
- delete userInfo.exp;
- delete userInfo.iat;
- return userInfo;
- }
- function uniIdMixin(Vue) {
- Vue.prototype.uniIDHasRole = function (roleId) {var _getCurrentUserInfo =
- getCurrentUserInfo(),role = _getCurrentUserInfo.role;
- return role.indexOf(roleId) > -1;
- };
- Vue.prototype.uniIDHasPermission = function (permissionId) {var _getCurrentUserInfo2 =
- getCurrentUserInfo(),permission = _getCurrentUserInfo2.permission;
- return this.uniIDHasRole('admin') || permission.indexOf(permissionId) > -1;
- };
- Vue.prototype.uniIDTokenValid = function () {var _getCurrentUserInfo3 =
- getCurrentUserInfo(),tokenExpired = _getCurrentUserInfo3.tokenExpired;
- return tokenExpired > Date.now();
- };
- }
- var _toString = Object.prototype.toString;
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- function isFn(fn) {
- return typeof fn === 'function';
- }
- function isStr(str) {
- return typeof str === 'string';
- }
- function isPlainObject(obj) {
- return _toString.call(obj) === '[object Object]';
- }
- function hasOwn(obj, key) {
- return hasOwnProperty.call(obj, key);
- }
- function noop() {}
- /**
- * Create a cached version of a pure function.
- */
- function cached(fn) {
- var cache = Object.create(null);
- return function cachedFn(str) {
- var hit = cache[str];
- return hit || (cache[str] = fn(str));
- };
- }
- /**
- * Camelize a hyphen-delimited string.
- */
- var camelizeRE = /-(\w)/g;
- var camelize = cached(function (str) {
- return str.replace(camelizeRE, function (_, c) {return c ? c.toUpperCase() : '';});
- });
- var HOOKS = [
- 'invoke',
- 'success',
- 'fail',
- 'complete',
- 'returnValue'];
- var globalInterceptors = {};
- var scopedInterceptors = {};
- function mergeHook(parentVal, childVal) {
- var res = childVal ?
- parentVal ?
- parentVal.concat(childVal) :
- Array.isArray(childVal) ?
- childVal : [childVal] :
- parentVal;
- return res ?
- dedupeHooks(res) :
- res;
- }
- function dedupeHooks(hooks) {
- var res = [];
- for (var i = 0; i < hooks.length; i++) {
- if (res.indexOf(hooks[i]) === -1) {
- res.push(hooks[i]);
- }
- }
- return res;
- }
- function removeHook(hooks, hook) {
- var index = hooks.indexOf(hook);
- if (index !== -1) {
- hooks.splice(index, 1);
- }
- }
- function mergeInterceptorHook(interceptor, option) {
- Object.keys(option).forEach(function (hook) {
- if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
- interceptor[hook] = mergeHook(interceptor[hook], option[hook]);
- }
- });
- }
- function removeInterceptorHook(interceptor, option) {
- if (!interceptor || !option) {
- return;
- }
- Object.keys(option).forEach(function (hook) {
- if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {
- removeHook(interceptor[hook], option[hook]);
- }
- });
- }
- function addInterceptor(method, option) {
- if (typeof method === 'string' && isPlainObject(option)) {
- mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);
- } else if (isPlainObject(method)) {
- mergeInterceptorHook(globalInterceptors, method);
- }
- }
- function removeInterceptor(method, option) {
- if (typeof method === 'string') {
- if (isPlainObject(option)) {
- removeInterceptorHook(scopedInterceptors[method], option);
- } else {
- delete scopedInterceptors[method];
- }
- } else if (isPlainObject(method)) {
- removeInterceptorHook(globalInterceptors, method);
- }
- }
- function wrapperHook(hook) {
- return function (data) {
- return hook(data) || data;
- };
- }
- function isPromise(obj) {
- return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
- }
- function queue(hooks, data) {
- var promise = false;
- for (var i = 0; i < hooks.length; i++) {
- var hook = hooks[i];
- if (promise) {
- promise = Promise.resolve(wrapperHook(hook));
- } else {
- var res = hook(data);
- if (isPromise(res)) {
- promise = Promise.resolve(res);
- }
- if (res === false) {
- return {
- then: function then() {} };
- }
- }
- }
- return promise || {
- then: function then(callback) {
- return callback(data);
- } };
- }
- function wrapperOptions(interceptor) {var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- ['success', 'fail', 'complete'].forEach(function (name) {
- if (Array.isArray(interceptor[name])) {
- var oldCallback = options[name];
- options[name] = function callbackInterceptor(res) {
- queue(interceptor[name], res).then(function (res) {
- /* eslint-disable no-mixed-operators */
- return isFn(oldCallback) && oldCallback(res) || res;
- });
- };
- }
- });
- return options;
- }
- function wrapperReturnValue(method, returnValue) {
- var returnValueHooks = [];
- if (Array.isArray(globalInterceptors.returnValue)) {
- returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(globalInterceptors.returnValue));
- }
- var interceptor = scopedInterceptors[method];
- if (interceptor && Array.isArray(interceptor.returnValue)) {
- returnValueHooks.push.apply(returnValueHooks, _toConsumableArray(interceptor.returnValue));
- }
- returnValueHooks.forEach(function (hook) {
- returnValue = hook(returnValue) || returnValue;
- });
- return returnValue;
- }
- function getApiInterceptorHooks(method) {
- var interceptor = Object.create(null);
- Object.keys(globalInterceptors).forEach(function (hook) {
- if (hook !== 'returnValue') {
- interceptor[hook] = globalInterceptors[hook].slice();
- }
- });
- var scopedInterceptor = scopedInterceptors[method];
- if (scopedInterceptor) {
- Object.keys(scopedInterceptor).forEach(function (hook) {
- if (hook !== 'returnValue') {
- interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
- }
- });
- }
- return interceptor;
- }
- 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];}
- var interceptor = getApiInterceptorHooks(method);
- if (interceptor && Object.keys(interceptor).length) {
- if (Array.isArray(interceptor.invoke)) {
- var res = queue(interceptor.invoke, options);
- return res.then(function (options) {
- return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));
- });
- } else {
- return api.apply(void 0, [wrapperOptions(interceptor, options)].concat(params));
- }
- }
- return api.apply(void 0, [options].concat(params));
- }
- var promiseInterceptor = {
- returnValue: function returnValue(res) {
- if (!isPromise(res)) {
- return res;
- }
- return new Promise(function (resolve, reject) {
- res.then(function (res) {
- if (res[0]) {
- reject(res[0]);
- } else {
- resolve(res[1]);
- }
- });
- });
- } };
- var SYNC_API_RE =
- /^\$|Window$|WindowStyle$|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;
- var CONTEXT_API_RE = /^create|Manager$/;
- // Context例外情况
- var CONTEXT_API_RE_EXC = ['createBLEConnection'];
- // 同步例外情况
- var ASYNC_API = ['createBLEConnection'];
- var CALLBACK_API_RE = /^on|^off/;
- function isContextApi(name) {
- return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1;
- }
- function isSyncApi(name) {
- return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1;
- }
- function isCallbackApi(name) {
- return CALLBACK_API_RE.test(name) && name !== 'onPush';
- }
- function handlePromise(promise) {
- return promise.then(function (data) {
- return [null, data];
- }).
- catch(function (err) {return [err];});
- }
- function shouldPromise(name) {
- if (
- isContextApi(name) ||
- isSyncApi(name) ||
- isCallbackApi(name))
- {
- return false;
- }
- return true;
- }
- /* eslint-disable no-extend-native */
- if (!Promise.prototype.finally) {
- Promise.prototype.finally = function (callback) {
- var promise = this.constructor;
- return this.then(
- function (value) {return promise.resolve(callback()).then(function () {return value;});},
- function (reason) {return promise.resolve(callback()).then(function () {
- throw reason;
- });});
- };
- }
- function promisify(name, api) {
- if (!shouldPromise(name)) {
- return api;
- }
- 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];}
- if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {
- return wrapperReturnValue(name, invokeApi.apply(void 0, [name, api, options].concat(params)));
- }
- return wrapperReturnValue(name, handlePromise(new Promise(function (resolve, reject) {
- invokeApi.apply(void 0, [name, api, Object.assign({}, options, {
- success: resolve,
- fail: reject })].concat(
- params));
- })));
- };
- }
- var EPS = 1e-4;
- var BASE_DEVICE_WIDTH = 750;
- var isIOS = false;
- var deviceWidth = 0;
- var deviceDPR = 0;
- function checkDeviceWidth() {var _tt$getSystemInfoSync =
- tt.getSystemInfoSync(),platform = _tt$getSystemInfoSync.platform,pixelRatio = _tt$getSystemInfoSync.pixelRatio,windowWidth = _tt$getSystemInfoSync.windowWidth; // uni=>tt runtime 编译目标是 uni 对象,内部不允许直接使用 uni
- deviceWidth = windowWidth;
- deviceDPR = pixelRatio;
- isIOS = platform === 'ios';
- }
- function upx2px(number, newDeviceWidth) {
- if (deviceWidth === 0) {
- checkDeviceWidth();
- }
- number = Number(number);
- if (number === 0) {
- return 0;
- }
- var result = number / BASE_DEVICE_WIDTH * (newDeviceWidth || deviceWidth);
- if (result < 0) {
- result = -result;
- }
- result = Math.floor(result + EPS);
- if (result === 0) {
- if (deviceDPR === 1 || !isIOS) {
- result = 1;
- } else {
- result = 0.5;
- }
- }
- return number < 0 ? -result : result;
- }
- var interceptors = {
- promiseInterceptor: promiseInterceptor };
- var baseApi = /*#__PURE__*/Object.freeze({
- __proto__: null,
- upx2px: upx2px,
- addInterceptor: addInterceptor,
- removeInterceptor: removeInterceptor,
- interceptors: interceptors });var
- EventChannel = /*#__PURE__*/function () {
- function EventChannel(id, events) {var _this = this;_classCallCheck(this, EventChannel);
- this.id = id;
- this.listener = {};
- this.emitCache = {};
- if (events) {
- Object.keys(events).forEach(function (name) {
- _this.on(name, events[name]);
- });
- }
- }_createClass(EventChannel, [{ key: "emit", value: function emit(
- eventName) {for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {args[_key3 - 1] = arguments[_key3];}
- var fns = this.listener[eventName];
- if (!fns) {
- return (this.emitCache[eventName] || (this.emitCache[eventName] = [])).push(args);
- }
- fns.forEach(function (opt) {
- opt.fn.apply(opt.fn, args);
- });
- this.listener[eventName] = fns.filter(function (opt) {return opt.type !== 'once';});
- } }, { key: "on", value: function on(
- eventName, fn) {
- this._addListener(eventName, 'on', fn);
- this._clearCache(eventName);
- } }, { key: "once", value: function once(
- eventName, fn) {
- this._addListener(eventName, 'once', fn);
- this._clearCache(eventName);
- } }, { key: "off", value: function off(
- eventName, fn) {
- var fns = this.listener[eventName];
- if (!fns) {
- return;
- }
- if (fn) {
- for (var i = 0; i < fns.length;) {
- if (fns[i].fn === fn) {
- fns.splice(i, 1);
- i--;
- }
- i++;
- }
- } else {
- delete this.listener[eventName];
- }
- } }, { key: "_clearCache", value: function _clearCache(
- eventName) {
- var cacheArgs = this.emitCache[eventName];
- if (cacheArgs) {
- for (; cacheArgs.length > 0;) {
- this.emit.apply(this, [eventName].concat(cacheArgs.shift()));
- }
- }
- } }, { key: "_addListener", value: function _addListener(
- eventName, type, fn) {
- (this.listener[eventName] || (this.listener[eventName] = [])).push({
- fn: fn,
- type: type });
- } }]);return EventChannel;}();
- var eventChannels = {};
- var eventChannelStack = [];
- var id = 0;
- function initEventChannel(events) {var cache = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
- id++;
- var eventChannel = new EventChannel(id, events);
- if (cache) {
- eventChannels[id] = eventChannel;
- eventChannelStack.push(eventChannel);
- }
- return eventChannel;
- }
- function getEventChannel(id) {
- if (id) {
- var eventChannel = eventChannels[id];
- delete eventChannels[id];
- return eventChannel;
- }
- return eventChannelStack.shift();
- }
- var navigateTo = {
- args: function args(fromArgs, toArgs) {
- var id = initEventChannel(fromArgs.events).id;
- if (fromArgs.url) {
- fromArgs.url = fromArgs.url + (fromArgs.url.indexOf('?') === -1 ? '?' : '&') + '__id__=' + id;
- }
- },
- returnValue: function returnValue(fromRes, toRes) {
- fromRes.eventChannel = getEventChannel();
- } };
- function findExistsPageIndex(url) {
- var pages = getCurrentPages();
- var len = pages.length;
- while (len--) {
- var page = pages[len];
- if (page.$page && page.$page.fullPath === url) {
- return len;
- }
- }
- return -1;
- }
- var redirectTo = {
- name: function name(fromArgs) {
- if (fromArgs.exists === 'back' && fromArgs.delta) {
- return 'navigateBack';
- }
- return 'redirectTo';
- },
- args: function args(fromArgs) {
- if (fromArgs.exists === 'back' && fromArgs.url) {
- var existsPageIndex = findExistsPageIndex(fromArgs.url);
- if (existsPageIndex !== -1) {
- var delta = getCurrentPages().length - 1 - existsPageIndex;
- if (delta > 0) {
- fromArgs.delta = delta;
- }
- }
- }
- } };
- var previewImage = {
- args: function args(fromArgs) {
- var currentIndex = parseInt(fromArgs.current);
- if (isNaN(currentIndex)) {
- return;
- }
- var urls = fromArgs.urls;
- if (!Array.isArray(urls)) {
- return;
- }
- var len = urls.length;
- if (!len) {
- return;
- }
- if (currentIndex < 0) {
- currentIndex = 0;
- } else if (currentIndex >= len) {
- currentIndex = len - 1;
- }
- if (currentIndex > 0) {
- fromArgs.current = urls[currentIndex];
- fromArgs.urls = urls.filter(
- function (item, index) {return index < currentIndex ? item !== urls[currentIndex] : true;});
- } else {
- fromArgs.current = urls[0];
- }
- return {
- indicator: false,
- loop: false };
- } };
- var UUID_KEY = '__DC_STAT_UUID';
- var deviceId;
- function addUuid(result) {
- deviceId = deviceId || tt.getStorageSync(UUID_KEY);
- if (!deviceId) {
- deviceId = Date.now() + '' + Math.floor(Math.random() * 1e7);
- tt.setStorage({
- key: UUID_KEY,
- data: deviceId });
- }
- result.deviceId = deviceId;
- }
- function addSafeAreaInsets(result) {
- if (result.safeArea) {
- var safeArea = result.safeArea;
- result.safeAreaInsets = {
- top: safeArea.top,
- left: safeArea.left,
- right: result.windowWidth - safeArea.right,
- bottom: result.windowHeight - safeArea.bottom };
- }
- }
- var getSystemInfo = {
- returnValue: function returnValue(result) {
- addUuid(result);
- addSafeAreaInsets(result);
- } };
- var oName = 'getUserInfo';
- var nName = 'getUserProfile';
- var getUserProfile = {
- name: tt.canIUse(nName) ? nName : oName };
- // 不支持的 API 列表
- var todos = [
- 'preloadPage',
- 'unPreloadPage',
- 'loadSubPackage'
- // 'createCameraContext',
- // 'createLivePlayerContext',
- // 'getSavedFileInfo',
- // 'createMapContext',
- // 'onMemoryWarning',
- // 'onGyroscopeChange',
- // 'startGyroscope',
- // 'stopGyroscope',
- // 'setScreenBrightness',
- // 'getScreenBrightness',
- // 'addPhoneContact',
- // 'openBluetoothAdapter',
- // 'startBluetoothDevicesDiscovery',
- // 'onBluetoothDeviceFound',
- // 'stopBluetoothDevicesDiscovery',
- // 'onBluetoothAdapterStateChange',
- // 'getConnectedBluetoothDevices',
- // 'getBluetoothDevices',
- // 'getBluetoothAdapterState',
- // 'closeBluetoothAdapter',
- // 'writeBLECharacteristicValue',
- // 'readBLECharacteristicValue',
- // 'onBLEConnectionStateChange',
- // 'onBLECharacteristicValueChange',
- // 'notifyBLECharacteristicValueChange',
- // 'getBLEDeviceServices',
- // 'getBLEDeviceCharacteristics',
- // 'createBLEConnection',
- // 'closeBLEConnection',
- // 'onBeaconServiceChange',
- // 'onBeaconUpdate',
- // 'getBeacons',
- // 'startBeaconDiscovery',
- // 'stopBeaconDiscovery',
- // 'showNavigationBarLoading',
- // 'hideNavigationBarLoading',
- // 'setTabBarItem',
- // 'setTabBarStyle',
- // 'hideTabBar',
- // 'showTabBar',
- // 'setTabBarBadge',
- // 'removeTabBarBadge',
- // 'showTabBarRedDot',
- // 'hideTabBarRedDot',
- // 'setBackgroundColor',
- // 'setBackgroundTextStyle',
- // 'chooseInvoiceTitle',
- // 'addTemplate',
- // 'deleteTemplate',
- // 'getTemplateLibraryById',
- // 'getTemplateLibraryList',
- // 'getTemplateList',
- // 'sendTemplateMessage',
- // 'setEnableDebug',
- // 'onWindowResize',
- // 'offWindowResize',
- // 'createOffscreenCanvas',
- // 'vibrate'
- ];
- // 存在兼容性的 API 列表
- // 头条小程序自1.35.0+支持canIUses
- var canIUses = [
- // 'createIntersectionObserver',
- // 'getSavedFileList',
- // 'removeSavedFile',
- // 'hideKeyboard',
- // 'getImageInfo',
- // 'createVideoContext',
- // 'onSocketOpen',
- // 'onSocketError',
- // 'sendSocketMessage',
- // 'onSocketMessage',
- // 'closeSocket',
- // 'onSocketClose',
- // 'getExtConfig',
- // 'getExtConfigSync',
- // 'navigateToMiniProgram',
- // 'navigateBackMiniProgram',
- // 'compressImage',
- // 'chooseLocation',
- // 'openDocument',
- // 'onUserCaptureScreen',
- // 'getBackgroundAudioManager',
- // 'setNavigationBarColor',
- ];
- // 需要做转换的 API 列表
- var protocols = {
- chooseImage: {
- args: {
- sizeType: false } },
- navigateTo: navigateTo,
- redirectTo: redirectTo,
- previewImage: previewImage,
- getSystemInfo: getSystemInfo,
- getSystemInfoSync: getSystemInfo,
- getUserProfile: getUserProfile,
- connectSocket: {
- args: {
- method: false } },
- chooseVideo: {
- args: {
- camera: false } },
- scanCode: {
- args: {
- onlyFromCamera: false,
- scanType: false } },
- startAccelerometer: {
- args: {
- interval: false } },
- showToast: {
- args: {
- image: false,
- mask: false } },
- showLoading: {
- args: {
- mask: false } },
- showModal: {
- args: {
- cancelColor: false,
- confirmColor: false } },
- showActionSheet: {
- args: {
- itemColor: false } },
- login: {
- args: {
- scopes: false,
- timeout: false } },
- getUserInfo: {
- args: {
- lang: false,
- timeout: false } },
- requestPayment: {
- name: tt.pay ? 'pay' : 'requestPayment',
- args: {
- orderInfo: tt.pay ? 'orderInfo' : 'data' } },
- getFileInfo: {
- args: {
- digestAlgorithm: false } } };
- var CALLBACKS = ['success', 'fail', 'cancel', 'complete'];
- function processCallback(methodName, method, returnValue) {
- return function (res) {
- return method(processReturnValue(methodName, res, returnValue));
- };
- }
- 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;
- if (isPlainObject(fromArgs)) {// 一般 api 的参数解析
- var toArgs = keepFromArgs === true ? fromArgs : {}; // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值
- if (isFn(argsOption)) {
- argsOption = argsOption(fromArgs, toArgs) || {};
- }
- for (var key in fromArgs) {
- if (hasOwn(argsOption, key)) {
- var keyOption = argsOption[key];
- if (isFn(keyOption)) {
- keyOption = keyOption(fromArgs[key], fromArgs, toArgs);
- }
- if (!keyOption) {// 不支持的参数
- console.warn("The '".concat(methodName, "' method of platform '\u5934\u6761\u5C0F\u7A0B\u5E8F' does not support option '").concat(key, "'"));
- } else if (isStr(keyOption)) {// 重写参数 key
- toArgs[keyOption] = fromArgs[key];
- } else if (isPlainObject(keyOption)) {// {name:newName,value:value}可重新指定参数 key:value
- toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;
- }
- } else if (CALLBACKS.indexOf(key) !== -1) {
- if (isFn(fromArgs[key])) {
- toArgs[key] = processCallback(methodName, fromArgs[key], returnValue);
- }
- } else {
- if (!keepFromArgs) {
- toArgs[key] = fromArgs[key];
- }
- }
- }
- return toArgs;
- } else if (isFn(fromArgs)) {
- fromArgs = processCallback(methodName, fromArgs, returnValue);
- }
- return fromArgs;
- }
- function processReturnValue(methodName, res, returnValue) {var keepReturnValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
- if (isFn(protocols.returnValue)) {// 处理通用 returnValue
- res = protocols.returnValue(methodName, res);
- }
- return processArgs(methodName, res, returnValue, {}, keepReturnValue);
- }
- function wrapper(methodName, method) {
- if (hasOwn(protocols, methodName)) {
- var protocol = protocols[methodName];
- if (!protocol) {// 暂不支持的 api
- return function () {
- console.error("Platform '\u5934\u6761\u5C0F\u7A0B\u5E8F' does not support '".concat(methodName, "'."));
- };
- }
- return function (arg1, arg2) {// 目前 api 最多两个参数
- var options = protocol;
- if (isFn(protocol)) {
- options = protocol(arg1);
- }
- arg1 = processArgs(methodName, arg1, options.args, options.returnValue);
- var args = [arg1];
- if (typeof arg2 !== 'undefined') {
- args.push(arg2);
- }
- if (isFn(options.name)) {
- methodName = options.name(arg1);
- } else if (isStr(options.name)) {
- methodName = options.name;
- }
- var returnValue = tt[methodName].apply(tt, args);
- if (isSyncApi(methodName)) {// 同步 api
- return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName));
- }
- return returnValue;
- };
- }
- return method;
- }
- var todoApis = Object.create(null);
- var TODOS = [
- 'onTabBarMidButtonTap',
- 'subscribePush',
- 'unsubscribePush',
- 'onPush',
- 'offPush',
- 'share'];
- function createTodoApi(name) {
- return function todoApi(_ref)
- {var fail = _ref.fail,complete = _ref.complete;
- var res = {
- errMsg: "".concat(name, ":fail method '").concat(name, "' not supported") };
- isFn(fail) && fail(res);
- isFn(complete) && complete(res);
- };
- }
- TODOS.forEach(function (name) {
- todoApis[name] = createTodoApi(name);
- });
- var providers = {
- oauth: ['toutiao'],
- share: ['toutiao'],
- payment: ['toutiao'],
- push: ['toutiao'] };
- function getProvider(_ref2)
- {var service = _ref2.service,success = _ref2.success,fail = _ref2.fail,complete = _ref2.complete;
- var res = false;
- if (providers[service]) {
- res = {
- errMsg: 'getProvider:ok',
- service: service,
- provider: providers[service] };
- isFn(success) && success(res);
- } else {
- res = {
- errMsg: 'getProvider:fail service not found' };
- isFn(fail) && fail(res);
- }
- isFn(complete) && complete(res);
- }
- var extraApi = /*#__PURE__*/Object.freeze({
- __proto__: null,
- getProvider: getProvider });
- var getEmitter = function () {
- var Emitter;
- return function getUniEmitter() {
- if (!Emitter) {
- Emitter = new _vue.default();
- }
- return Emitter;
- };
- }();
- function apply(ctx, method, args) {
- return ctx[method].apply(ctx, args);
- }
- function $on() {
- return apply(getEmitter(), '$on', Array.prototype.slice.call(arguments));
- }
- function $off() {
- return apply(getEmitter(), '$off', Array.prototype.slice.call(arguments));
- }
- function $once() {
- return apply(getEmitter(), '$once', Array.prototype.slice.call(arguments));
- }
- function $emit() {
- return apply(getEmitter(), '$emit', Array.prototype.slice.call(arguments));
- }
- var eventApi = /*#__PURE__*/Object.freeze({
- __proto__: null,
- $on: $on,
- $off: $off,
- $once: $once,
- $emit: $emit });
- function createMediaQueryObserver() {
- var mediaQueryObserver = {};var _tt$getSystemInfoSync2 =
- tt.getSystemInfoSync(),windowWidth = _tt$getSystemInfoSync2.windowWidth,windowHeight = _tt$getSystemInfoSync2.windowHeight;
- var orientation = windowWidth < windowHeight ? 'portrait' : 'landscape';
- mediaQueryObserver.observe = function (options, callback) {
- var matches = true;
- for (var item in options) {
- var itemValue = item === 'orientation' ? options[item] : Number(options[item]);
- if (options[item] !== '') {
- if (item === 'width') {
- if (itemValue === windowWidth) {
- matches = true;
- } else {
- matches = false;
- callback(matches);
- return matches;
- }
- }
- if (item === 'minWidth') {
- if (windowWidth >= itemValue) {
- matches = true;
- } else {
- matches = false;
- callback(matches);
- return matches;
- }
- }
- if (item === 'maxWidth') {
- if (windowWidth <= itemValue) {
- matches = true;
- } else {
- matches = false;
- callback(matches);
- return matches;
- }
- }
- if (item === 'height') {
- if (itemValue === windowHeight) {
- matches = true;
- } else {
- matches = false;
- callback(matches);
- return matches;
- }
- }
- if (item === 'minHeight') {
- if (windowHeight >= itemValue) {
- matches = true;
- } else {
- matches = false;
- callback(matches);
- return matches;
- }
- }
- if (item === 'maxHeight') {
- if (windowHeight <= itemValue) {
- matches = true;
- } else {
- matches = false;
- callback(matches);
- return matches;
- }
- }
- if (item === 'orientation') {
- if (options[item] === orientation) {
- matches = true;
- } else {
- matches = false;
- callback(matches);
- return matches;
- }
- }
- }
- }
- callback(matches);
- return matches;
- };
- mediaQueryObserver.disconnect = function () {
- };
- return mediaQueryObserver;
- }
- var api = /*#__PURE__*/Object.freeze({
- __proto__: null,
- createMediaQueryObserver: createMediaQueryObserver });
- var MPPage = Page;
- var MPComponent = Component;
- var customizeRE = /:/g;
- var customize = cached(function (str) {
- return camelize(str.replace(customizeRE, '-'));
- });
- function initTriggerEvent(mpInstance) {
- var oldTriggerEvent = mpInstance.triggerEvent;
- 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];}
- return oldTriggerEvent.apply(mpInstance, [customize(event)].concat(args));
- };
- }
- function initHook(name, options) {
- var oldHook = options[name];
- if (!oldHook) {
- options[name] = function () {
- initTriggerEvent(this);
- };
- } else {
- options[name] = function () {
- initTriggerEvent(this);for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {args[_key5] = arguments[_key5];}
- return oldHook.apply(this, args);
- };
- }
- }
- if (!MPPage.__$wrappered) {
- MPPage.__$wrappered = true;
- Page = function Page() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- initHook('onLoad', options);
- return MPPage(options);
- };
- Page.after = MPPage.after;
- Component = function Component() {var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
- initHook('created', options);
- return MPComponent(options);
- };
- }
- var PAGE_EVENT_HOOKS = [
- 'onPullDownRefresh',
- 'onReachBottom',
- 'onAddToFavorites',
- 'onShareTimeline',
- 'onShareAppMessage',
- 'onPageScroll',
- 'onResize',
- 'onTabItemTap'];
- function initMocks(vm, mocks) {
- var mpInstance = vm.$mp[vm.mpType];
- mocks.forEach(function (mock) {
- if (hasOwn(mpInstance, mock)) {
- vm[mock] = mpInstance[mock];
- }
- });
- }
- function hasHook(hook, vueOptions) {
- if (!vueOptions) {
- return true;
- }
- if (_vue.default.options && Array.isArray(_vue.default.options[hook])) {
- return true;
- }
- vueOptions = vueOptions.default || vueOptions;
- if (isFn(vueOptions)) {
- if (isFn(vueOptions.extendOptions[hook])) {
- return true;
- }
- if (vueOptions.super &&
- vueOptions.super.options &&
- Array.isArray(vueOptions.super.options[hook])) {
- return true;
- }
- return false;
- }
- if (isFn(vueOptions[hook])) {
- return true;
- }
- var mixins = vueOptions.mixins;
- if (Array.isArray(mixins)) {
- return !!mixins.find(function (mixin) {return hasHook(hook, mixin);});
- }
- }
- function initHooks(mpOptions, hooks, vueOptions) {
- hooks.forEach(function (hook) {
- if (hasHook(hook, vueOptions)) {
- mpOptions[hook] = function (args) {
- return this.$vm && this.$vm.__call_hook(hook, args);
- };
- }
- });
- }
- function initVueComponent(Vue, vueOptions) {
- vueOptions = vueOptions.default || vueOptions;
- var VueComponent;
- if (isFn(vueOptions)) {
- VueComponent = vueOptions;
- } else {
- VueComponent = Vue.extend(vueOptions);
- }
- vueOptions = VueComponent.options;
- return [VueComponent, vueOptions];
- }
- function initSlots(vm, vueSlots) {
- if (Array.isArray(vueSlots) && vueSlots.length) {
- var $slots = Object.create(null);
- vueSlots.forEach(function (slotName) {
- $slots[slotName] = true;
- });
- vm.$scopedSlots = vm.$slots = $slots;
- }
- }
- function initVueIds(vueIds, mpInstance) {
- vueIds = (vueIds || '').split(',');
- var len = vueIds.length;
- if (len === 1) {
- mpInstance._$vueId = vueIds[0];
- } else if (len === 2) {
- mpInstance._$vueId = vueIds[0];
- mpInstance._$vuePid = vueIds[1];
- }
- }
- function initData(vueOptions, context) {
- var data = vueOptions.data || {};
- var methods = vueOptions.methods || {};
- if (typeof data === 'function') {
- try {
- data = data.call(context); // 支持 Vue.prototype 上挂的数据
- } catch (e) {
- if (Object({"NODE_ENV":"development","VUE_APP_NAME":"鄂州市红十字会","VUE_APP_PLATFORM":"mp-toutiao","BASE_URL":"/"}).VUE_APP_DEBUG) {
- console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data);
- }
- }
- } else {
- try {
- // 对 data 格式化
- data = JSON.parse(JSON.stringify(data));
- } catch (e) {}
- }
- if (!isPlainObject(data)) {
- data = {};
- }
- Object.keys(methods).forEach(function (methodName) {
- if (context.__lifecycle_hooks__.indexOf(methodName) === -1 && !hasOwn(data, methodName)) {
- data[methodName] = methods[methodName];
- }
- });
- return data;
- }
- var PROP_TYPES = [String, Number, Boolean, Object, Array, null];
- function createObserver(name) {
- return function observer(newVal, oldVal) {
- if (this.$vm) {
- this.$vm[name] = newVal; // 为了触发其他非 render watcher
- }
- };
- }
- function initBehaviors(vueOptions, initBehavior) {
- var vueBehaviors = vueOptions.behaviors;
- var vueExtends = vueOptions.extends;
- var vueMixins = vueOptions.mixins;
- var vueProps = vueOptions.props;
- if (!vueProps) {
- vueOptions.props = vueProps = [];
- }
- var behaviors = [];
- if (Array.isArray(vueBehaviors)) {
- vueBehaviors.forEach(function (behavior) {
- behaviors.push(behavior.replace('uni://', "tt".concat("://")));
- if (behavior === 'uni://form-field') {
- if (Array.isArray(vueProps)) {
- vueProps.push('name');
- vueProps.push('value');
- } else {
- vueProps.name = {
- type: String,
- default: '' };
- vueProps.value = {
- type: [String, Number, Boolean, Array, Object, Date],
- default: '' };
- }
- }
- });
- }
- if (isPlainObject(vueExtends) && vueExtends.props) {
- behaviors.push(
- initBehavior({
- properties: initProperties(vueExtends.props, true) }));
- }
- if (Array.isArray(vueMixins)) {
- vueMixins.forEach(function (vueMixin) {
- if (isPlainObject(vueMixin) && vueMixin.props) {
- behaviors.push(
- initBehavior({
- properties: initProperties(vueMixin.props, true) }));
- }
- });
- }
- return behaviors;
- }
- function parsePropType(key, type, defaultValue, file) {
- // [String]=>String
- if (Array.isArray(type) && type.length === 1) {
- return type[0];
- }
- return type;
- }
- function initProperties(props) {var isBehavior = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;var file = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : '';
- var properties = {};
- if (!isBehavior) {
- properties.vueId = {
- type: String,
- value: '' };
- // 用于字节跳动小程序模拟抽象节点
- properties.generic = {
- type: Object,
- value: null };
- // scopedSlotsCompiler auto
- properties.scopedSlotsCompiler = {
- type: String,
- value: '' };
- properties.vueSlots = { // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots
- type: null,
- value: [],
- observer: function observer(newVal, oldVal) {
- var $slots = Object.create(null);
- newVal.forEach(function (slotName) {
- $slots[slotName] = true;
- });
- this.setData({
- $slots: $slots });
- } };
- }
- if (Array.isArray(props)) {// ['title']
- props.forEach(function (key) {
- properties[key] = {
- type: null,
- observer: createObserver(key) };
- });
- } else if (isPlainObject(props)) {// {title:{type:String,default:''},content:String}
- Object.keys(props).forEach(function (key) {
- var opts = props[key];
- if (isPlainObject(opts)) {// title:{type:String,default:''}
- var value = opts.default;
- if (isFn(value)) {
- value = value();
- }
- opts.type = parsePropType(key, opts.type);
- properties[key] = {
- type: PROP_TYPES.indexOf(opts.type) !== -1 ? opts.type : null,
- value: value,
- observer: createObserver(key) };
- } else {// content:String
- var type = parsePropType(key, opts);
- properties[key] = {
- type: PROP_TYPES.indexOf(type) !== -1 ? type : null,
- observer: createObserver(key) };
- }
- });
- }
- return properties;
- }
- function wrapper$1(event) {
- // TODO 又得兼容 mpvue 的 mp 对象
- try {
- event.mp = JSON.parse(JSON.stringify(event));
- } catch (e) {}
- event.stopPropagation = noop;
- event.preventDefault = noop;
- event.target = event.target || {};
- if (!hasOwn(event, 'detail')) {
- event.detail = {};
- }
- if (hasOwn(event, 'markerId')) {
- event.detail = typeof event.detail === 'object' ? event.detail : {};
- event.detail.markerId = event.markerId;
- }
- if (isPlainObject(event.detail)) {
- event.target = Object.assign({}, event.target, event.detail);
- }
- return event;
- }
- function getExtraValue(vm, dataPathsArray) {
- var context = vm;
- dataPathsArray.forEach(function (dataPathArray) {
- var dataPath = dataPathArray[0];
- var value = dataPathArray[2];
- if (dataPath || typeof value !== 'undefined') {// ['','',index,'disable']
- var propPath = dataPathArray[1];
- var valuePath = dataPathArray[3];
- var vFor;
- if (Number.isInteger(dataPath)) {
- vFor = dataPath;
- } else if (!dataPath) {
- vFor = context;
- } else if (typeof dataPath === 'string' && dataPath) {
- if (dataPath.indexOf('#s#') === 0) {
- vFor = dataPath.substr(3);
- } else {
- vFor = vm.__get_value(dataPath, context);
- }
- }
- if (Number.isInteger(vFor)) {
- context = value;
- } else if (!propPath) {
- context = vFor[value];
- } else {
- if (Array.isArray(vFor)) {
- context = vFor.find(function (vForItem) {
- return vm.__get_value(propPath, vForItem) === value;
- });
- } else if (isPlainObject(vFor)) {
- context = Object.keys(vFor).find(function (vForKey) {
- return vm.__get_value(propPath, vFor[vForKey]) === value;
- });
- } else {
- console.error('v-for 暂不支持循环数据:', vFor);
- }
- }
- if (valuePath) {
- context = vm.__get_value(valuePath, context);
- }
- }
- });
- return context;
- }
- function processEventExtra(vm, extra, event) {
- var extraObj = {};
- if (Array.isArray(extra) && extra.length) {
- /**
- *[
- * ['data.items', 'data.id', item.data.id],
- * ['metas', 'id', meta.id]
- *],
- *[
- * ['data.items', 'data.id', item.data.id],
- * ['metas', 'id', meta.id]
- *],
- *'test'
- */
- extra.forEach(function (dataPath, index) {
- if (typeof dataPath === 'string') {
- if (!dataPath) {// model,prop.sync
- extraObj['$' + index] = vm;
- } else {
- if (dataPath === '$event') {// $event
- extraObj['$' + index] = event;
- } else if (dataPath === 'arguments') {
- if (event.detail && event.detail.__args__) {
- extraObj['$' + index] = event.detail.__args__;
- } else {
- extraObj['$' + index] = [event];
- }
- } else if (dataPath.indexOf('$event.') === 0) {// $event.target.value
- extraObj['$' + index] = vm.__get_value(dataPath.replace('$event.', ''), event);
- } else {
- extraObj['$' + index] = vm.__get_value(dataPath);
- }
- }
- } else {
- extraObj['$' + index] = getExtraValue(vm, dataPath);
- }
- });
- }
- return extraObj;
- }
- function getObjByArray(arr) {
- var obj = {};
- for (var i = 1; i < arr.length; i++) {
- var element = arr[i];
- obj[element[0]] = element[1];
- }
- return obj;
- }
- 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;
- var isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象
- if (isCustom) {// 自定义事件
- isCustomMPEvent = event.currentTarget &&
- event.currentTarget.dataset &&
- event.currentTarget.dataset.comType === 'wx';
- if (!args.length) {// 无参数,直接传入 event 或 detail 数组
- if (isCustomMPEvent) {
- return [event];
- }
- return event.detail.__args__ || event.detail;
- }
- }
- var extraObj = processEventExtra(vm, extra, event);
- var ret = [];
- args.forEach(function (arg) {
- if (arg === '$event') {
- if (methodName === '__set_model' && !isCustom) {// input v-model value
- ret.push(event.target.value);
- } else {
- if (isCustom && !isCustomMPEvent) {
- ret.push(event.detail.__args__[0]);
- } else {// wxcomponent 组件或内置组件
- ret.push(event);
- }
- }
- } else {
- if (Array.isArray(arg) && arg[0] === 'o') {
- ret.push(getObjByArray(arg));
- } else if (typeof arg === 'string' && hasOwn(extraObj, arg)) {
- ret.push(extraObj[arg]);
- } else {
- ret.push(arg);
- }
- }
- });
- return ret;
- }
- var ONCE = '~';
- var CUSTOM = '^';
- function isMatchEventType(eventType, optType) {
- return eventType === optType ||
- optType === 'regionchange' && (
- eventType === 'begin' ||
- eventType === 'end');
- }
- function getContextVm(vm) {
- var $parent = vm.$parent;
- // 父组件是 scoped slots 或者其他自定义组件时继续查找
- while ($parent && $parent.$parent && ($parent.$options.generic || $parent.$parent.$options.generic || $parent.$scope._$vuePid)) {
- $parent = $parent.$parent;
- }
- return $parent && $parent.$parent;
- }
- function handleEvent(event) {var _this2 = this;
- event = wrapper$1(event);
- // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]]
- var dataset = (event.currentTarget || event.target).dataset;
- if (!dataset) {
- return console.warn('事件信息不存在');
- }
- var eventOpts = dataset.eventOpts || dataset['event-opts']; // 支付宝 web-view 组件 dataset 非驼峰
- if (!eventOpts) {
- return console.warn('事件信息不存在');
- }
- // [['handle',[1,2,a]],['handle1',[1,2,a]]]
- var eventType = event.type;
- var ret = [];
- eventOpts.forEach(function (eventOpt) {
- var type = eventOpt[0];
- var eventsArray = eventOpt[1];
- var isCustom = type.charAt(0) === CUSTOM;
- type = isCustom ? type.slice(1) : type;
- var isOnce = type.charAt(0) === ONCE;
- type = isOnce ? type.slice(1) : type;
- if (eventsArray && isMatchEventType(eventType, type)) {
- eventsArray.forEach(function (eventArray) {
- var methodName = eventArray[0];
- if (methodName) {
- var handlerCtx = _this2.$vm;
- if (handlerCtx.$options.generic) {// mp-weixin,mp-toutiao 抽象节点模拟 scoped slots
- handlerCtx = getContextVm(handlerCtx) || handlerCtx;
- }
- if (methodName === '$emit') {
- handlerCtx.$emit.apply(handlerCtx,
- processEventArgs(
- _this2.$vm,
- event,
- eventArray[1],
- eventArray[2],
- isCustom,
- methodName));
- return;
- }
- var handler = handlerCtx[methodName];
- if (!isFn(handler)) {
- throw new Error(" _vm.".concat(methodName, " is not a function"));
- }
- if (isOnce) {
- if (handler.once) {
- return;
- }
- handler.once = true;
- }
- var params = processEventArgs(
- _this2.$vm,
- event,
- eventArray[1],
- eventArray[2],
- isCustom,
- methodName);
- params = Array.isArray(params) ? params : [];
- // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据
- if (/=\s*\S+\.eventParams\s*\|\|\s*\S+\[['"]event-params['"]\]/.test(handler.toString())) {
- // eslint-disable-next-line no-sparse-arrays
- params = params.concat([,,,,,,,,,, event]);
- }
- ret.push(handler.apply(handlerCtx, params));
- }
- });
- }
- });
- if (
- eventType === 'input' &&
- ret.length === 1 &&
- typeof ret[0] !== 'undefined')
- {
- return ret[0];
- }
- }
- var hooks = [
- 'onShow',
- 'onHide',
- 'onError',
- 'onPageNotFound',
- 'onThemeChange',
- 'onUnhandledRejection'];
- function initEventChannel$1() {
- _vue.default.prototype.getOpenerEventChannel = function () {
- if (!this.__eventChannel__) {
- this.__eventChannel__ = new EventChannel();
- }
- return this.__eventChannel__;
- };
- var callHook = _vue.default.prototype.__call_hook;
- _vue.default.prototype.__call_hook = function (hook, args) {
- if (hook === 'onLoad' && args && args.__id__) {
- this.__eventChannel__ = getEventChannel(args.__id__);
- delete args.__id__;
- }
- return callHook.call(this, hook, args);
- };
- }
- function initScopedSlotsParams() {
- var center = {};
- var parents = {};
- _vue.default.prototype.$hasScopedSlotsParams = function (vueId) {
- var has = center[vueId];
- if (!has) {
- parents[vueId] = this;
- this.$on('hook:destory', function () {
- delete parents[vueId];
- });
- }
- return has;
- };
- _vue.default.prototype.$getScopedSlotsParams = function (vueId, name, key) {
- var data = center[vueId];
- if (data) {
- var object = data[name] || {};
- return key ? object[key] : object;
- } else {
- parents[vueId] = this;
- this.$on('hook:destory', function () {
- delete parents[vueId];
- });
- }
- };
- _vue.default.prototype.$setScopedSlotsParams = function (name, value) {
- var vueIds = this.$options.propsData.vueId;
- if (vueIds) {
- var vueId = vueIds.split(',')[0];
- var object = center[vueId] = center[vueId] || {};
- object[name] = value;
- if (parents[vueId]) {
- parents[vueId].$forceUpdate();
- }
- }
- };
- _vue.default.mixin({
- destroyed: function destroyed() {
- var propsData = this.$options.propsData;
- var vueId = propsData && propsData.vueId;
- if (vueId) {
- delete center[vueId];
- delete parents[vueId];
- }
- } });
- }
- function parseBaseApp(vm, _ref3)
- {var mocks = _ref3.mocks,initRefs = _ref3.initRefs;
- initEventChannel$1();
- {
- initScopedSlotsParams();
- }
- if (vm.$options.store) {
- _vue.default.prototype.$store = vm.$options.store;
- }
- uniIdMixin(_vue.default);
- _vue.default.prototype.mpHost = "mp-toutiao";
- _vue.default.mixin({
- beforeCreate: function beforeCreate() {
- if (!this.$options.mpType) {
- return;
- }
- this.mpType = this.$options.mpType;
- this.$mp = _defineProperty({
- data: {} },
- this.mpType, this.$options.mpInstance);
- this.$scope = this.$options.mpInstance;
- delete this.$options.mpType;
- delete this.$options.mpInstance;
- if (this.mpType === 'page' && typeof getApp === 'function') {// hack vue-i18n
- var app = getApp();
- if (app.$vm && app.$vm.$i18n) {
- this._i18n = app.$vm.$i18n;
- }
- }
- if (this.mpType !== 'app') {
- initRefs(this);
- initMocks(this, mocks);
- }
- } });
- var appOptions = {
- onLaunch: function onLaunch(args) {
- if (this.$vm) {// 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前
- return;
- }
- this.$vm = vm;
- this.$vm.$mp = {
- app: this };
- this.$vm.$scope = this;
- // vm 上也挂载 globalData
- this.$vm.globalData = this.globalData;
- this.$vm._isMounted = true;
- this.$vm.__call_hook('mounted', args);
- this.$vm.__call_hook('onLaunch', args);
- } };
- // 兼容旧版本 globalData
- appOptions.globalData = vm.$options.globalData || {};
- // 将 methods 中的方法挂在 getApp() 中
- var methods = vm.$options.methods;
- if (methods) {
- Object.keys(methods).forEach(function (name) {
- appOptions[name] = methods[name];
- });
- }
- initHooks(appOptions, hooks);
- return appOptions;
- }
- function findVmByVueId(vm, vuePid) {
- var $children = vm.$children;
- // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200)
- for (var i = $children.length - 1; i >= 0; i--) {
- var childVm = $children[i];
- if (childVm.$scope._$vueId === vuePid) {
- return childVm;
- }
- }
- // 反向递归查找
- var parentVm;
- for (var _i = $children.length - 1; _i >= 0; _i--) {
- parentVm = findVmByVueId($children[_i], vuePid);
- if (parentVm) {
- return parentVm;
- }
- }
- }
- function initBehavior(options) {
- return Behavior(options);
- }
- function handleLink(event) {var _ref4 =
- event.detail || event.value,vuePid = _ref4.vuePid,vueOptions = _ref4.vueOptions; // detail 是微信,value 是百度(dipatch)
- var parentVm;
- if (vuePid) {
- parentVm = findVmByVueId(this.$vm, vuePid);
- }
- if (!parentVm) {
- parentVm = this.$vm;
- }
- vueOptions.parent = parentVm;
- }
- var mocks = ['__route__', '__webviewId__', '__nodeid__', '__nodeId__'];
- function isPage() {
- return this.__nodeid__ === 0 || this.__nodeId__ === 0;
- }
- function initRefs(vm) {
- var mpInstance = vm.$scope;
- /* eslint-disable no-undef */
- var minorVersion = parseInt(tt.getSystemInfoSync().SDKVersion.split('.')[1]);
- if (minorVersion > 16) {
- Object.defineProperty(vm, '$refs', {
- get: function get() {
- var $refs = {};
- var components = mpInstance.selectAllComponents('.vue-ref');
- components.forEach(function (component) {
- var ref = component.dataset.ref;
- $refs[ref] = component.$vm || component;
- });
- var forComponents = mpInstance.selectAllComponents('.vue-ref-in-for');
- forComponents.forEach(function (component) {
- var ref = component.dataset.ref;
- if (!$refs[ref]) {
- $refs[ref] = [];
- }
- $refs[ref].push(component.$vm || component);
- });
- return $refs;
- } });
- } else {
- mpInstance.selectAllComponents('.vue-ref', function (components) {
- components.forEach(function (component) {
- var ref = component.dataset.ref;
- vm.$refs[ref] = component.$vm || component;
- });
- });
- mpInstance.selectAllComponents('.vue-ref-in-for', function (forComponents) {
- forComponents.forEach(function (component) {
- var ref = component.dataset.ref;
- if (!vm.$refs[ref]) {
- vm.$refs[ref] = [];
- }
- vm.$refs[ref].push(component.$vm || component);
- });
- });
- }
- }
- var instances = Object.create(null);
- function initRelation(_ref5)
- {var vuePid = _ref5.vuePid,mpInstance = _ref5.mpInstance;
- // 头条 triggerEvent 后,接收事件时机特别晚,已经到了 ready 之后
- var nodeId = (mpInstance.__nodeId__ || mpInstance.__nodeid__) + '';
- var webviewId = mpInstance.__webviewId__ + '';
- instances[webviewId + '_' + nodeId] = mpInstance.$vm;
- this.triggerEvent('__l', {
- vuePid: vuePid,
- nodeId: nodeId,
- webviewId: webviewId });
- }
- function handleLink$1(_ref6)
- {var _ref6$detail = _ref6.detail,vuePid = _ref6$detail.vuePid,nodeId = _ref6$detail.nodeId,webviewId = _ref6$detail.webviewId;
- var vm = instances[webviewId + '_' + nodeId];
- if (!vm) {
- return;
- }
- var parentVm;
- if (vuePid) {
- parentVm = findVmByVueId(this.$vm, vuePid);
- }
- if (!parentVm) {
- parentVm = this.$vm;
- }
- vm.$parent = parentVm;
- vm.$root = parentVm.$root;
- parentVm.$children.push(vm);
- vm.__call_hook('created');
- vm.__call_hook('beforeMount');
- vm._isMounted = true;
- vm.__call_hook('mounted');
- vm.__call_hook('onReady');
- }
- function parseApp(vm) {
- _vue.default.prototype._$fallback = true; // 降级(调整原 vue 的部分生命周期,如 created,beforeMount,inject,provide)
- _vue.default.mixin({
- created: function created() {// 处理 injections,头条 triggerEvent 是异步,且触发时机很慢,故延迟 relation 设置
- if (this.mpType !== 'app') {
- if (
- this.mpType === 'page' &&
- !this.$scope.route &&
- this.$scope.__route__)
- {
- this.$scope.route = this.$scope.__route__;
- }
- initRefs(this);
- this.__init_injections(this);
- this.__init_provide(this);
- }
- } });
- return parseBaseApp(vm, {
- mocks: mocks,
- initRefs: function initRefs() {} // attached 时,可能查询不到
- });
- }
- function createApp(vm) {
- App(parseApp(vm));
- return vm;
- }
- var encodeReserveRE = /[!'()*]/g;
- var encodeReserveReplacer = function encodeReserveReplacer(c) {return '%' + c.charCodeAt(0).toString(16);};
- var commaRE = /%2C/g;
- // fixed encodeURIComponent which is more conformant to RFC3986:
- // - escapes [!'()*]
- // - preserve commas
- var encode = function encode(str) {return encodeURIComponent(str).
- replace(encodeReserveRE, encodeReserveReplacer).
- replace(commaRE, ',');};
- function stringifyQuery(obj) {var encodeStr = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : encode;
- var res = obj ? Object.keys(obj).map(function (key) {
- var val = obj[key];
- if (val === undefined) {
- return '';
- }
- if (val === null) {
- return encodeStr(key);
- }
- if (Array.isArray(val)) {
- var result = [];
- val.forEach(function (val2) {
- if (val2 === undefined) {
- return;
- }
- if (val2 === null) {
- result.push(encodeStr(key));
- } else {
- result.push(encodeStr(key) + '=' + encodeStr(val2));
- }
- });
- return result.join('&');
- }
- return encodeStr(key) + '=' + encodeStr(val);
- }).filter(function (x) {return x.length > 0;}).join('&') : null;
- return res ? "?".concat(res) : '';
- }
- function parseBaseComponent(vueComponentOptions)
- {var _ref7 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},isPage = _ref7.isPage,initRelation = _ref7.initRelation;var _initVueComponent =
- initVueComponent(_vue.default, vueComponentOptions),_initVueComponent2 = _slicedToArray(_initVueComponent, 2),VueComponent = _initVueComponent2[0],vueOptions = _initVueComponent2[1];
- var options = _objectSpread({
- multipleSlots: true,
- addGlobalClass: true },
- vueOptions.options || {});
- var componentOptions = {
- options: options,
- data: initData(vueOptions, _vue.default.prototype),
- behaviors: initBehaviors(vueOptions, initBehavior),
- properties: initProperties(vueOptions.props, false, vueOptions.__file),
- lifetimes: {
- attached: function attached() {
- var properties = this.properties;
- var options = {
- mpType: isPage.call(this) ? 'page' : 'component',
- mpInstance: this,
- propsData: properties };
- initVueIds(properties.vueId, this);
- // 处理父子关系
- initRelation.call(this, {
- vuePid: this._$vuePid,
- vueOptions: options });
- // 初始化 vue 实例
- this.$vm = new VueComponent(options);
- // 处理$slots,$scopedSlots(暂不支持动态变化$slots)
- initSlots(this.$vm, properties.vueSlots);
- // 触发首次 setData
- this.$vm.$mount();
- },
- ready: function ready() {
- // 当组件 props 默认值为 true,初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发
- // https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800
- if (this.$vm) {
- this.$vm._isMounted = true;
- this.$vm.__call_hook('mounted');
- this.$vm.__call_hook('onReady');
- }
- },
- detached: function detached() {
- this.$vm && this.$vm.$destroy();
- } },
- pageLifetimes: {
- show: function show(args) {
- this.$vm && this.$vm.__call_hook('onPageShow', args);
- },
- hide: function hide() {
- this.$vm && this.$vm.__call_hook('onPageHide');
- },
- resize: function resize(size) {
- this.$vm && this.$vm.__call_hook('onPageResize', size);
- } },
- methods: {
- __l: handleLink,
- __e: handleEvent } };
- // externalClasses
- if (vueOptions.externalClasses) {
- componentOptions.externalClasses = vueOptions.externalClasses;
- }
- if (Array.isArray(vueOptions.wxsCallMethods)) {
- vueOptions.wxsCallMethods.forEach(function (callMethod) {
- componentOptions.methods[callMethod] = function (args) {
- return this.$vm[callMethod](args);
- };
- });
- }
- if (isPage) {
- return componentOptions;
- }
- return [componentOptions, VueComponent];
- }
- var components = [];
- function parseComponent(vueOptions) {var _parseBaseComponent =
- parseBaseComponent(vueOptions),_parseBaseComponent2 = _slicedToArray(_parseBaseComponent, 2),componentOptions = _parseBaseComponent2[0],VueComponent = _parseBaseComponent2[1];
- // 基础库 2.0 以上 attached 顺序错乱,按照 created 顺序强制纠正
- componentOptions.lifetimes.created = function created() {
- components.push(this);
- };
- componentOptions.lifetimes.attached = function attached() {
- this.__lifetimes_attached = function () {
- var properties = this.properties;
- var options = {
- mpType: isPage.call(this) ? 'page' : 'component',
- mpInstance: this,
- propsData: properties };
- initVueIds(properties.vueId, this);
- // 初始化 vue 实例
- this.$vm = new VueComponent(options);
- // 处理$slots,$scopedSlots(暂不支持动态变化$slots)
- initSlots(this.$vm, properties.vueSlots);
- // 处理父子关系
- initRelation.call(this, {
- vuePid: this._$vuePid,
- mpInstance: this });
- // 触发首次 setData
- this.$vm.$mount();
- };
- var component = this;
- while (component && component.__lifetimes_attached && components[0] && component === components[0]) {
- components.shift();
- component.__lifetimes_attached();
- delete component.__lifetimes_attached;
- component = components[0];
- }
- };
- // ready 比 handleLink 还早,初始化逻辑放到 handleLink 中
- delete componentOptions.lifetimes.ready;
- componentOptions.methods.__l = handleLink$1;
- return componentOptions;
- }
- var hooks$1 = [
- 'onShow',
- 'onHide',
- 'onUnload'];
- hooks$1.push.apply(hooks$1, PAGE_EVENT_HOOKS);
- function parseBasePage(vuePageOptions, _ref8)
- {var isPage = _ref8.isPage,initRelation = _ref8.initRelation;
- var pageOptions = parseComponent(vuePageOptions);
- initHooks(pageOptions.methods, hooks$1, vuePageOptions);
- pageOptions.methods.onLoad = function (query) {
- this.options = query;
- var copyQuery = Object.assign({}, query);
- delete copyQuery.__id__;
- this.$page = {
- fullPath: '/' + (this.route || this.is) + stringifyQuery(copyQuery) };
- this.$vm.$mp.query = query; // 兼容 mpvue
- this.$vm.__call_hook('onLoad', query);
- };
- return pageOptions;
- }
- function parsePage(vuePageOptions) {
- var pageOptions = parseBasePage(vuePageOptions, {
- isPage: isPage,
- initRelation: initRelation });
- // 页面需要在 ready 中触发,其他组件是在 handleLink 中触发
- pageOptions.lifetimes.ready = function ready() {
- if (this.$vm && this.$vm.mpType === 'page') {
- this.$vm.__call_hook('created');
- this.$vm.__call_hook('beforeMount');
- this.$vm._isMounted = true;
- this.$vm.__call_hook('mounted');
- this.$vm.__call_hook('onReady');
- } else {
- this.is && console.warn(this.is + ' is not ready');
- }
- };
- pageOptions.lifetimes.detached = function detached() {
- this.$vm && this.$vm.$destroy();
- // 清理
- var webviewId = this.__webviewId__;
- webviewId && Object.keys(instances).forEach(function (key) {
- if (key.indexOf(webviewId + '_') === 0) {
- delete instances[key];
- }
- });
- };
- return pageOptions;
- }
- function createPage(vuePageOptions) {
- {
- return Component(parsePage(vuePageOptions));
- }
- }
- function createComponent(vueOptions) {
- {
- return Component(parseComponent(vueOptions));
- }
- }
- function createSubpackageApp(vm) {
- var appOptions = parseApp(vm);
- var app = getApp({
- allowDefault: true });
- vm.$scope = app;
- var globalData = app.globalData;
- if (globalData) {
- Object.keys(appOptions.globalData).forEach(function (name) {
- if (!hasOwn(globalData, name)) {
- globalData[name] = appOptions.globalData[name];
- }
- });
- }
- Object.keys(appOptions).forEach(function (name) {
- if (!hasOwn(app, name)) {
- app[name] = appOptions[name];
- }
- });
- if (isFn(appOptions.onShow) && tt.onAppShow) {
- tt.onAppShow(function () {for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {args[_key6] = arguments[_key6];}
- vm.__call_hook('onShow', args);
- });
- }
- if (isFn(appOptions.onHide) && tt.onAppHide) {
- tt.onAppHide(function () {for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {args[_key7] = arguments[_key7];}
- vm.__call_hook('onHide', args);
- });
- }
- if (isFn(appOptions.onLaunch)) {
- var args = tt.getLaunchOptionsSync && tt.getLaunchOptionsSync();
- vm.__call_hook('onLaunch', args);
- }
- return vm;
- }
- function createPlugin(vm) {
- var appOptions = parseApp(vm);
- if (isFn(appOptions.onShow) && tt.onAppShow) {
- tt.onAppShow(function () {for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {args[_key8] = arguments[_key8];}
- appOptions.onShow.apply(vm, args);
- });
- }
- if (isFn(appOptions.onHide) && tt.onAppHide) {
- tt.onAppHide(function () {for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {args[_key9] = arguments[_key9];}
- appOptions.onHide.apply(vm, args);
- });
- }
- if (isFn(appOptions.onLaunch)) {
- var args = tt.getLaunchOptionsSync && tt.getLaunchOptionsSync();
- appOptions.onLaunch.call(vm, args);
- }
- return vm;
- }
- todos.forEach(function (todoApi) {
- protocols[todoApi] = false;
- });
- canIUses.forEach(function (canIUseApi) {
- var apiName = protocols[canIUseApi] && protocols[canIUseApi].name ? protocols[canIUseApi].name :
- canIUseApi;
- if (!tt.canIUse(apiName)) {
- protocols[canIUseApi] = false;
- }
- });
- var uni = {};
- if (typeof Proxy !== 'undefined' && "mp-toutiao" !== 'app-plus') {
- uni = new Proxy({}, {
- get: function get(target, name) {
- if (hasOwn(target, name)) {
- return target[name];
- }
- if (baseApi[name]) {
- return baseApi[name];
- }
- if (api[name]) {
- return promisify(name, api[name]);
- }
- {
- if (extraApi[name]) {
- return promisify(name, extraApi[name]);
- }
- if (todoApis[name]) {
- return promisify(name, todoApis[name]);
- }
- }
- if (eventApi[name]) {
- return eventApi[name];
- }
- if (!hasOwn(tt, name) && !hasOwn(protocols, name)) {
- return;
- }
- return promisify(name, wrapper(name, tt[name]));
- },
- set: function set(target, name, value) {
- target[name] = value;
- return true;
- } });
- } else {
- Object.keys(baseApi).forEach(function (name) {
- uni[name] = baseApi[name];
- });
- {
- Object.keys(todoApis).forEach(function (name) {
- uni[name] = promisify(name, todoApis[name]);
- });
- Object.keys(extraApi).forEach(function (name) {
- uni[name] = promisify(name, todoApis[name]);
- });
- }
- Object.keys(eventApi).forEach(function (name) {
- uni[name] = eventApi[name];
- });
- Object.keys(api).forEach(function (name) {
- uni[name] = promisify(name, api[name]);
- });
- Object.keys(tt).forEach(function (name) {
- if (hasOwn(tt, name) || hasOwn(protocols, name)) {
- uni[name] = promisify(name, wrapper(name, tt[name]));
- }
- });
- }
- tt.createApp = createApp;
- tt.createPage = createPage;
- tt.createComponent = createComponent;
- tt.createSubpackageApp = createSubpackageApp;
- tt.createPlugin = createPlugin;
- var uni$1 = uni;var _default =
- uni$1;exports.default = _default;
- /***/ }),
- /***/ 13:
- /*!**********************************************************************************************************!*\
- !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js ***!
- \**********************************************************************************************************/
- /*! exports provided: default */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return normalizeComponent; });
- /* globals __VUE_SSR_CONTEXT__ */
- // IMPORTANT: Do NOT use ES2015 features in this file (except for modules).
- // This module is a runtime utility for cleaner component module output and will
- // be included in the final webpack user bundle.
- function normalizeComponent (
- scriptExports,
- render,
- staticRenderFns,
- functionalTemplate,
- injectStyles,
- scopeId,
- moduleIdentifier, /* server only */
- shadowMode, /* vue-cli only */
- components, // fixed by xxxxxx auto components
- renderjs // fixed by xxxxxx renderjs
- ) {
- // Vue.extend constructor export interop
- var options = typeof scriptExports === 'function'
- ? scriptExports.options
- : scriptExports
- // fixed by xxxxxx auto components
- if (components) {
- if (!options.components) {
- options.components = {}
- }
- var hasOwn = Object.prototype.hasOwnProperty
- for (var name in components) {
- if (hasOwn.call(components, name) && !hasOwn.call(options.components, name)) {
- options.components[name] = components[name]
- }
- }
- }
- // fixed by xxxxxx renderjs
- if (renderjs) {
- (renderjs.beforeCreate || (renderjs.beforeCreate = [])).unshift(function() {
- this[renderjs.__module] = this
- });
- (options.mixins || (options.mixins = [])).push(renderjs)
- }
- // render functions
- if (render) {
- options.render = render
- options.staticRenderFns = staticRenderFns
- options._compiled = true
- }
- // functional template
- if (functionalTemplate) {
- options.functional = true
- }
- // scopedId
- if (scopeId) {
- options._scopeId = 'data-v-' + scopeId
- }
- var hook
- if (moduleIdentifier) { // server build
- hook = function (context) {
- // 2.3 injection
- context =
- context || // cached call
- (this.$vnode && this.$vnode.ssrContext) || // stateful
- (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional
- // 2.2 with runInNewContext: true
- if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
- context = __VUE_SSR_CONTEXT__
- }
- // inject component styles
- if (injectStyles) {
- injectStyles.call(this, context)
- }
- // register component module identifier for async chunk inferrence
- if (context && context._registeredComponents) {
- context._registeredComponents.add(moduleIdentifier)
- }
- }
- // used by ssr in case component is cached and beforeCreate
- // never gets called
- options._ssrRegister = hook
- } else if (injectStyles) {
- hook = shadowMode
- ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }
- : injectStyles
- }
- if (hook) {
- if (options.functional) {
- // for template-only hot-reload because in that case the render fn doesn't
- // go through the normalizer
- options._injectStyles = hook
- // register for functioal component in vue file
- var originalRender = options.render
- options.render = function renderWithStyleInjection (h, context) {
- hook.call(context)
- return originalRender(h, context)
- }
- } else {
- // inject component registration as beforeCreate hook
- var existing = options.beforeCreate
- options.beforeCreate = existing
- ? [].concat(existing, hook)
- : [hook]
- }
- }
- return {
- exports: scriptExports,
- options: options
- }
- }
- /***/ }),
- /***/ 2:
- /*!******************************************************************************************!*\
- !*** ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js ***!
- \******************************************************************************************/
- /*! exports provided: default */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* WEBPACK VAR INJECTION */(function(global) {/*!
- * Vue.js v2.6.11
- * (c) 2014-2021 Evan You
- * Released under the MIT License.
- */
- /* */
- var emptyObject = Object.freeze({});
- // These helpers produce better VM code in JS engines due to their
- // explicitness and function inlining.
- function isUndef (v) {
- return v === undefined || v === null
- }
- function isDef (v) {
- return v !== undefined && v !== null
- }
- function isTrue (v) {
- return v === true
- }
- function isFalse (v) {
- return v === false
- }
- /**
- * Check if value is primitive.
- */
- function isPrimitive (value) {
- return (
- typeof value === 'string' ||
- typeof value === 'number' ||
- // $flow-disable-line
- typeof value === 'symbol' ||
- typeof value === 'boolean'
- )
- }
- /**
- * Quick object check - this is primarily used to tell
- * Objects from primitive values when we know the value
- * is a JSON-compliant type.
- */
- function isObject (obj) {
- return obj !== null && typeof obj === 'object'
- }
- /**
- * Get the raw type string of a value, e.g., [object Object].
- */
- var _toString = Object.prototype.toString;
- function toRawType (value) {
- return _toString.call(value).slice(8, -1)
- }
- /**
- * Strict object type check. Only returns true
- * for plain JavaScript objects.
- */
- function isPlainObject (obj) {
- return _toString.call(obj) === '[object Object]'
- }
- function isRegExp (v) {
- return _toString.call(v) === '[object RegExp]'
- }
- /**
- * Check if val is a valid array index.
- */
- function isValidArrayIndex (val) {
- var n = parseFloat(String(val));
- return n >= 0 && Math.floor(n) === n && isFinite(val)
- }
- function isPromise (val) {
- return (
- isDef(val) &&
- typeof val.then === 'function' &&
- typeof val.catch === 'function'
- )
- }
- /**
- * Convert a value to a string that is actually rendered.
- */
- function toString (val) {
- return val == null
- ? ''
- : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
- ? JSON.stringify(val, null, 2)
- : String(val)
- }
- /**
- * Convert an input value to a number for persistence.
- * If the conversion fails, return original string.
- */
- function toNumber (val) {
- var n = parseFloat(val);
- return isNaN(n) ? val : n
- }
- /**
- * Make a map and return a function for checking if a key
- * is in that map.
- */
- function makeMap (
- str,
- expectsLowerCase
- ) {
- var map = Object.create(null);
- var list = str.split(',');
- for (var i = 0; i < list.length; i++) {
- map[list[i]] = true;
- }
- return expectsLowerCase
- ? function (val) { return map[val.toLowerCase()]; }
- : function (val) { return map[val]; }
- }
- /**
- * Check if a tag is a built-in tag.
- */
- var isBuiltInTag = makeMap('slot,component', true);
- /**
- * Check if an attribute is a reserved attribute.
- */
- var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
- /**
- * Remove an item from an array.
- */
- function remove (arr, item) {
- if (arr.length) {
- var index = arr.indexOf(item);
- if (index > -1) {
- return arr.splice(index, 1)
- }
- }
- }
- /**
- * Check whether an object has the property.
- */
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- function hasOwn (obj, key) {
- return hasOwnProperty.call(obj, key)
- }
- /**
- * Create a cached version of a pure function.
- */
- function cached (fn) {
- var cache = Object.create(null);
- return (function cachedFn (str) {
- var hit = cache[str];
- return hit || (cache[str] = fn(str))
- })
- }
- /**
- * Camelize a hyphen-delimited string.
- */
- var camelizeRE = /-(\w)/g;
- var camelize = cached(function (str) {
- return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })
- });
- /**
- * Capitalize a string.
- */
- var capitalize = cached(function (str) {
- return str.charAt(0).toUpperCase() + str.slice(1)
- });
- /**
- * Hyphenate a camelCase string.
- */
- var hyphenateRE = /\B([A-Z])/g;
- var hyphenate = cached(function (str) {
- return str.replace(hyphenateRE, '-$1').toLowerCase()
- });
- /**
- * Simple bind polyfill for environments that do not support it,
- * e.g., PhantomJS 1.x. Technically, we don't need this anymore
- * since native bind is now performant enough in most browsers.
- * But removing it would mean breaking code that was able to run in
- * PhantomJS 1.x, so this must be kept for backward compatibility.
- */
- /* istanbul ignore next */
- function polyfillBind (fn, ctx) {
- function boundFn (a) {
- var l = arguments.length;
- return l
- ? l > 1
- ? fn.apply(ctx, arguments)
- : fn.call(ctx, a)
- : fn.call(ctx)
- }
- boundFn._length = fn.length;
- return boundFn
- }
- function nativeBind (fn, ctx) {
- return fn.bind(ctx)
- }
- var bind = Function.prototype.bind
- ? nativeBind
- : polyfillBind;
- /**
- * Convert an Array-like object to a real Array.
- */
- function toArray (list, start) {
- start = start || 0;
- var i = list.length - start;
- var ret = new Array(i);
- while (i--) {
- ret[i] = list[i + start];
- }
- return ret
- }
- /**
- * Mix properties into target object.
- */
- function extend (to, _from) {
- for (var key in _from) {
- to[key] = _from[key];
- }
- return to
- }
- /**
- * Merge an Array of Objects into a single Object.
- */
- function toObject (arr) {
- var res = {};
- for (var i = 0; i < arr.length; i++) {
- if (arr[i]) {
- extend(res, arr[i]);
- }
- }
- return res
- }
- /* eslint-disable no-unused-vars */
- /**
- * Perform no operation.
- * Stubbing args to make Flow happy without leaving useless transpiled code
- * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
- */
- function noop (a, b, c) {}
- /**
- * Always return false.
- */
- var no = function (a, b, c) { return false; };
- /* eslint-enable no-unused-vars */
- /**
- * Return the same value.
- */
- var identity = function (_) { return _; };
- /**
- * Check if two values are loosely equal - that is,
- * if they are plain objects, do they have the same shape?
- */
- function looseEqual (a, b) {
- if (a === b) { return true }
- var isObjectA = isObject(a);
- var isObjectB = isObject(b);
- if (isObjectA && isObjectB) {
- try {
- var isArrayA = Array.isArray(a);
- var isArrayB = Array.isArray(b);
- if (isArrayA && isArrayB) {
- return a.length === b.length && a.every(function (e, i) {
- return looseEqual(e, b[i])
- })
- } else if (a instanceof Date && b instanceof Date) {
- return a.getTime() === b.getTime()
- } else if (!isArrayA && !isArrayB) {
- var keysA = Object.keys(a);
- var keysB = Object.keys(b);
- return keysA.length === keysB.length && keysA.every(function (key) {
- return looseEqual(a[key], b[key])
- })
- } else {
- /* istanbul ignore next */
- return false
- }
- } catch (e) {
- /* istanbul ignore next */
- return false
- }
- } else if (!isObjectA && !isObjectB) {
- return String(a) === String(b)
- } else {
- return false
- }
- }
- /**
- * Return the first index at which a loosely equal value can be
- * found in the array (if value is a plain object, the array must
- * contain an object of the same shape), or -1 if it is not present.
- */
- function looseIndexOf (arr, val) {
- for (var i = 0; i < arr.length; i++) {
- if (looseEqual(arr[i], val)) { return i }
- }
- return -1
- }
- /**
- * Ensure a function is called only once.
- */
- function once (fn) {
- var called = false;
- return function () {
- if (!called) {
- called = true;
- fn.apply(this, arguments);
- }
- }
- }
- var ASSET_TYPES = [
- 'component',
- 'directive',
- 'filter'
- ];
- var LIFECYCLE_HOOKS = [
- 'beforeCreate',
- 'created',
- 'beforeMount',
- 'mounted',
- 'beforeUpdate',
- 'updated',
- 'beforeDestroy',
- 'destroyed',
- 'activated',
- 'deactivated',
- 'errorCaptured',
- 'serverPrefetch'
- ];
- /* */
- var config = ({
- /**
- * Option merge strategies (used in core/util/options)
- */
- // $flow-disable-line
- optionMergeStrategies: Object.create(null),
- /**
- * Whether to suppress warnings.
- */
- silent: false,
- /**
- * Show production mode tip message on boot?
- */
- productionTip: "development" !== 'production',
- /**
- * Whether to enable devtools
- */
- devtools: "development" !== 'production',
- /**
- * Whether to record perf
- */
- performance: false,
- /**
- * Error handler for watcher errors
- */
- errorHandler: null,
- /**
- * Warn handler for watcher warns
- */
- warnHandler: null,
- /**
- * Ignore certain custom elements
- */
- ignoredElements: [],
- /**
- * Custom user key aliases for v-on
- */
- // $flow-disable-line
- keyCodes: Object.create(null),
- /**
- * Check if a tag is reserved so that it cannot be registered as a
- * component. This is platform-dependent and may be overwritten.
- */
- isReservedTag: no,
- /**
- * Check if an attribute is reserved so that it cannot be used as a component
- * prop. This is platform-dependent and may be overwritten.
- */
- isReservedAttr: no,
- /**
- * Check if a tag is an unknown element.
- * Platform-dependent.
- */
- isUnknownElement: no,
- /**
- * Get the namespace of an element
- */
- getTagNamespace: noop,
- /**
- * Parse the real tag name for the specific platform.
- */
- parsePlatformTagName: identity,
- /**
- * Check if an attribute must be bound using property, e.g. value
- * Platform-dependent.
- */
- mustUseProp: no,
- /**
- * Perform updates asynchronously. Intended to be used by Vue Test Utils
- * This will significantly reduce performance if set to false.
- */
- async: true,
- /**
- * Exposed for legacy reasons
- */
- _lifecycleHooks: LIFECYCLE_HOOKS
- });
- /* */
- /**
- * unicode letters used for parsing html tags, component names and property paths.
- * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
- * skipping \u10000-\uEFFFF due to it freezing up PhantomJS
- */
- 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/;
- /**
- * Check if a string starts with $ or _
- */
- function isReserved (str) {
- var c = (str + '').charCodeAt(0);
- return c === 0x24 || c === 0x5F
- }
- /**
- * Define a property.
- */
- function def (obj, key, val, enumerable) {
- Object.defineProperty(obj, key, {
- value: val,
- enumerable: !!enumerable,
- writable: true,
- configurable: true
- });
- }
- /**
- * Parse simple path.
- */
- var bailRE = new RegExp(("[^" + (unicodeRegExp.source) + ".$_\\d]"));
- function parsePath (path) {
- if (bailRE.test(path)) {
- return
- }
- var segments = path.split('.');
- return function (obj) {
- for (var i = 0; i < segments.length; i++) {
- if (!obj) { return }
- obj = obj[segments[i]];
- }
- return obj
- }
- }
- /* */
- // can we use __proto__?
- var hasProto = '__proto__' in {};
- // Browser environment sniffing
- var inBrowser = typeof window !== 'undefined';
- var inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;
- var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();
- var UA = inBrowser && window.navigator.userAgent.toLowerCase();
- var isIE = UA && /msie|trident/.test(UA);
- var isIE9 = UA && UA.indexOf('msie 9.0') > 0;
- var isEdge = UA && UA.indexOf('edge/') > 0;
- var isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');
- var isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');
- var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge;
- var isPhantomJS = UA && /phantomjs/.test(UA);
- var isFF = UA && UA.match(/firefox\/(\d+)/);
- // Firefox has a "watch" function on Object.prototype...
- var nativeWatch = ({}).watch;
- if (inBrowser) {
- try {
- var opts = {};
- Object.defineProperty(opts, 'passive', ({
- get: function get () {
- }
- })); // https://github.com/facebook/flow/issues/285
- window.addEventListener('test-passive', null, opts);
- } catch (e) {}
- }
- // this needs to be lazy-evaled because vue may be required before
- // vue-server-renderer can set VUE_ENV
- var _isServer;
- var isServerRendering = function () {
- if (_isServer === undefined) {
- /* istanbul ignore if */
- if (!inBrowser && !inWeex && typeof global !== 'undefined') {
- // detect presence of vue-server-renderer and avoid
- // Webpack shimming the process
- _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';
- } else {
- _isServer = false;
- }
- }
- return _isServer
- };
- // detect devtools
- var devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;
- /* istanbul ignore next */
- function isNative (Ctor) {
- return typeof Ctor === 'function' && /native code/.test(Ctor.toString())
- }
- var hasSymbol =
- typeof Symbol !== 'undefined' && isNative(Symbol) &&
- typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);
- var _Set;
- /* istanbul ignore if */ // $flow-disable-line
- if (typeof Set !== 'undefined' && isNative(Set)) {
- // use native Set when available.
- _Set = Set;
- } else {
- // a non-standard Set polyfill that only works with primitive keys.
- _Set = /*@__PURE__*/(function () {
- function Set () {
- this.set = Object.create(null);
- }
- Set.prototype.has = function has (key) {
- return this.set[key] === true
- };
- Set.prototype.add = function add (key) {
- this.set[key] = true;
- };
- Set.prototype.clear = function clear () {
- this.set = Object.create(null);
- };
- return Set;
- }());
- }
- /* */
- var warn = noop;
- var tip = noop;
- var generateComponentTrace = (noop); // work around flow check
- var formatComponentName = (noop);
- if (true) {
- var hasConsole = typeof console !== 'undefined';
- var classifyRE = /(?:^|[-_])(\w)/g;
- var classify = function (str) { return str
- .replace(classifyRE, function (c) { return c.toUpperCase(); })
- .replace(/[-_]/g, ''); };
- warn = function (msg, vm) {
- var trace = vm ? generateComponentTrace(vm) : '';
- if (config.warnHandler) {
- config.warnHandler.call(null, msg, vm, trace);
- } else if (hasConsole && (!config.silent)) {
- console.error(("[Vue warn]: " + msg + trace));
- }
- };
- tip = function (msg, vm) {
- if (hasConsole && (!config.silent)) {
- console.warn("[Vue tip]: " + msg + (
- vm ? generateComponentTrace(vm) : ''
- ));
- }
- };
- formatComponentName = function (vm, includeFile) {
- if (vm.$root === vm) {
- if (vm.$options && vm.$options.__file) { // fixed by xxxxxx
- return ('') + vm.$options.__file
- }
- return '<Root>'
- }
- var options = typeof vm === 'function' && vm.cid != null
- ? vm.options
- : vm._isVue
- ? vm.$options || vm.constructor.options
- : vm;
- var name = options.name || options._componentTag;
- var file = options.__file;
- if (!name && file) {
- var match = file.match(/([^/\\]+)\.vue$/);
- name = match && match[1];
- }
- return (
- (name ? ("<" + (classify(name)) + ">") : "<Anonymous>") +
- (file && includeFile !== false ? (" at " + file) : '')
- )
- };
- var repeat = function (str, n) {
- var res = '';
- while (n) {
- if (n % 2 === 1) { res += str; }
- if (n > 1) { str += str; }
- n >>= 1;
- }
- return res
- };
- generateComponentTrace = function (vm) {
- if (vm._isVue && vm.$parent) {
- var tree = [];
- var currentRecursiveSequence = 0;
- while (vm && vm.$options.name !== 'PageBody') {
- if (tree.length > 0) {
- var last = tree[tree.length - 1];
- if (last.constructor === vm.constructor) {
- currentRecursiveSequence++;
- vm = vm.$parent;
- continue
- } else if (currentRecursiveSequence > 0) {
- tree[tree.length - 1] = [last, currentRecursiveSequence];
- currentRecursiveSequence = 0;
- }
- }
- !vm.$options.isReserved && tree.push(vm);
- vm = vm.$parent;
- }
- return '\n\nfound in\n\n' + tree
- .map(function (vm, i) { return ("" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)
- ? ((formatComponentName(vm[0])) + "... (" + (vm[1]) + " recursive calls)")
- : formatComponentName(vm))); })
- .join('\n')
- } else {
- return ("\n\n(found in " + (formatComponentName(vm)) + ")")
- }
- };
- }
- /* */
- var uid = 0;
- /**
- * A dep is an observable that can have multiple
- * directives subscribing to it.
- */
- var Dep = function Dep () {
- this.id = uid++;
- this.subs = [];
- };
- Dep.prototype.addSub = function addSub (sub) {
- this.subs.push(sub);
- };
- Dep.prototype.removeSub = function removeSub (sub) {
- remove(this.subs, sub);
- };
- Dep.prototype.depend = function depend () {
- if (Dep.SharedObject.target) {
- Dep.SharedObject.target.addDep(this);
- }
- };
- Dep.prototype.notify = function notify () {
- // stabilize the subscriber list first
- var subs = this.subs.slice();
- if ( true && !config.async) {
- // subs aren't sorted in scheduler if not running async
- // we need to sort them now to make sure they fire in correct
- // order
- subs.sort(function (a, b) { return a.id - b.id; });
- }
- for (var i = 0, l = subs.length; i < l; i++) {
- subs[i].update();
- }
- };
- // The current target watcher being evaluated.
- // This is globally unique because only one watcher
- // can be evaluated at a time.
- // fixed by xxxxxx (nvue shared vuex)
- /* eslint-disable no-undef */
- Dep.SharedObject = {};
- Dep.SharedObject.target = null;
- Dep.SharedObject.targetStack = [];
- function pushTarget (target) {
- Dep.SharedObject.targetStack.push(target);
- Dep.SharedObject.target = target;
- Dep.target = target;
- }
- function popTarget () {
- Dep.SharedObject.targetStack.pop();
- Dep.SharedObject.target = Dep.SharedObject.targetStack[Dep.SharedObject.targetStack.length - 1];
- Dep.target = Dep.SharedObject.target;
- }
- /* */
- var VNode = function VNode (
- tag,
- data,
- children,
- text,
- elm,
- context,
- componentOptions,
- asyncFactory
- ) {
- this.tag = tag;
- this.data = data;
- this.children = children;
- this.text = text;
- this.elm = elm;
- this.ns = undefined;
- this.context = context;
- this.fnContext = undefined;
- this.fnOptions = undefined;
- this.fnScopeId = undefined;
- this.key = data && data.key;
- this.componentOptions = componentOptions;
- this.componentInstance = undefined;
- this.parent = undefined;
- this.raw = false;
- this.isStatic = false;
- this.isRootInsert = true;
- this.isComment = false;
- this.isCloned = false;
- this.isOnce = false;
- this.asyncFactory = asyncFactory;
- this.asyncMeta = undefined;
- this.isAsyncPlaceholder = false;
- };
- var prototypeAccessors = { child: { configurable: true } };
- // DEPRECATED: alias for componentInstance for backwards compat.
- /* istanbul ignore next */
- prototypeAccessors.child.get = function () {
- return this.componentInstance
- };
- Object.defineProperties( VNode.prototype, prototypeAccessors );
- var createEmptyVNode = function (text) {
- if ( text === void 0 ) text = '';
- var node = new VNode();
- node.text = text;
- node.isComment = true;
- return node
- };
- function createTextVNode (val) {
- return new VNode(undefined, undefined, undefined, String(val))
- }
- // optimized shallow clone
- // used for static nodes and slot nodes because they may be reused across
- // multiple renders, cloning them avoids errors when DOM manipulations rely
- // on their elm reference.
- function cloneVNode (vnode) {
- var cloned = new VNode(
- vnode.tag,
- vnode.data,
- // #7975
- // clone children array to avoid mutating original in case of cloning
- // a child.
- vnode.children && vnode.children.slice(),
- vnode.text,
- vnode.elm,
- vnode.context,
- vnode.componentOptions,
- vnode.asyncFactory
- );
- cloned.ns = vnode.ns;
- cloned.isStatic = vnode.isStatic;
- cloned.key = vnode.key;
- cloned.isComment = vnode.isComment;
- cloned.fnContext = vnode.fnContext;
- cloned.fnOptions = vnode.fnOptions;
- cloned.fnScopeId = vnode.fnScopeId;
- cloned.asyncMeta = vnode.asyncMeta;
- cloned.isCloned = true;
- return cloned
- }
- /*
- * not type checking this file because flow doesn't play well with
- * dynamically accessing methods on Array prototype
- */
- var arrayProto = Array.prototype;
- var arrayMethods = Object.create(arrayProto);
- var methodsToPatch = [
- 'push',
- 'pop',
- 'shift',
- 'unshift',
- 'splice',
- 'sort',
- 'reverse'
- ];
- /**
- * Intercept mutating methods and emit events
- */
- methodsToPatch.forEach(function (method) {
- // cache original method
- var original = arrayProto[method];
- def(arrayMethods, method, function mutator () {
- var args = [], len = arguments.length;
- while ( len-- ) args[ len ] = arguments[ len ];
- var result = original.apply(this, args);
- var ob = this.__ob__;
- var inserted;
- switch (method) {
- case 'push':
- case 'unshift':
- inserted = args;
- break
- case 'splice':
- inserted = args.slice(2);
- break
- }
- if (inserted) { ob.observeArray(inserted); }
- // notify change
- ob.dep.notify();
- return result
- });
- });
- /* */
- var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
- /**
- * In some cases we may want to disable observation inside a component's
- * update computation.
- */
- var shouldObserve = true;
- function toggleObserving (value) {
- shouldObserve = value;
- }
- /**
- * Observer class that is attached to each observed
- * object. Once attached, the observer converts the target
- * object's property keys into getter/setters that
- * collect dependencies and dispatch updates.
- */
- var Observer = function Observer (value) {
- this.value = value;
- this.dep = new Dep();
- this.vmCount = 0;
- def(value, '__ob__', this);
- if (Array.isArray(value)) {
- if (hasProto) {
- {// fixed by xxxxxx 微信小程序使用 plugins 之后,数组方法被直接挂载到了数组对象上,需要执行 copyAugment 逻辑
- if(value.push !== value.__proto__.push){
- copyAugment(value, arrayMethods, arrayKeys);
- } else {
- protoAugment(value, arrayMethods);
- }
- }
- } else {
- copyAugment(value, arrayMethods, arrayKeys);
- }
- this.observeArray(value);
- } else {
- this.walk(value);
- }
- };
- /**
- * Walk through all properties and convert them into
- * getter/setters. This method should only be called when
- * value type is Object.
- */
- Observer.prototype.walk = function walk (obj) {
- var keys = Object.keys(obj);
- for (var i = 0; i < keys.length; i++) {
- defineReactive$$1(obj, keys[i]);
- }
- };
- /**
- * Observe a list of Array items.
- */
- Observer.prototype.observeArray = function observeArray (items) {
- for (var i = 0, l = items.length; i < l; i++) {
- observe(items[i]);
- }
- };
- // helpers
- /**
- * Augment a target Object or Array by intercepting
- * the prototype chain using __proto__
- */
- function protoAugment (target, src) {
- /* eslint-disable no-proto */
- target.__proto__ = src;
- /* eslint-enable no-proto */
- }
- /**
- * Augment a target Object or Array by defining
- * hidden properties.
- */
- /* istanbul ignore next */
- function copyAugment (target, src, keys) {
- for (var i = 0, l = keys.length; i < l; i++) {
- var key = keys[i];
- def(target, key, src[key]);
- }
- }
- /**
- * Attempt to create an observer instance for a value,
- * returns the new observer if successfully observed,
- * or the existing observer if the value already has one.
- */
- function observe (value, asRootData) {
- if (!isObject(value) || value instanceof VNode) {
- return
- }
- var ob;
- if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
- ob = value.__ob__;
- } else if (
- shouldObserve &&
- !isServerRendering() &&
- (Array.isArray(value) || isPlainObject(value)) &&
- Object.isExtensible(value) &&
- !value._isVue
- ) {
- ob = new Observer(value);
- }
- if (asRootData && ob) {
- ob.vmCount++;
- }
- return ob
- }
- /**
- * Define a reactive property on an Object.
- */
- function defineReactive$$1 (
- obj,
- key,
- val,
- customSetter,
- shallow
- ) {
- var dep = new Dep();
- var property = Object.getOwnPropertyDescriptor(obj, key);
- if (property && property.configurable === false) {
- return
- }
- // cater for pre-defined getter/setters
- var getter = property && property.get;
- var setter = property && property.set;
- if ((!getter || setter) && arguments.length === 2) {
- val = obj[key];
- }
- var childOb = !shallow && observe(val);
- Object.defineProperty(obj, key, {
- enumerable: true,
- configurable: true,
- get: function reactiveGetter () {
- var value = getter ? getter.call(obj) : val;
- if (Dep.SharedObject.target) { // fixed by xxxxxx
- dep.depend();
- if (childOb) {
- childOb.dep.depend();
- if (Array.isArray(value)) {
- dependArray(value);
- }
- }
- }
- return value
- },
- set: function reactiveSetter (newVal) {
- var value = getter ? getter.call(obj) : val;
- /* eslint-disable no-self-compare */
- if (newVal === value || (newVal !== newVal && value !== value)) {
- return
- }
- /* eslint-enable no-self-compare */
- if ( true && customSetter) {
- customSetter();
- }
- // #7981: for accessor properties without setter
- if (getter && !setter) { return }
- if (setter) {
- setter.call(obj, newVal);
- } else {
- val = newVal;
- }
- childOb = !shallow && observe(newVal);
- dep.notify();
- }
- });
- }
- /**
- * Set a property on an object. Adds the new property and
- * triggers change notification if the property doesn't
- * already exist.
- */
- function set (target, key, val) {
- if ( true &&
- (isUndef(target) || isPrimitive(target))
- ) {
- warn(("Cannot set reactive property on undefined, null, or primitive value: " + ((target))));
- }
- if (Array.isArray(target) && isValidArrayIndex(key)) {
- target.length = Math.max(target.length, key);
- target.splice(key, 1, val);
- return val
- }
- if (key in target && !(key in Object.prototype)) {
- target[key] = val;
- return val
- }
- var ob = (target).__ob__;
- if (target._isVue || (ob && ob.vmCount)) {
- true && warn(
- 'Avoid adding reactive properties to a Vue instance or its root $data ' +
- 'at runtime - declare it upfront in the data option.'
- );
- return val
- }
- if (!ob) {
- target[key] = val;
- return val
- }
- defineReactive$$1(ob.value, key, val);
- ob.dep.notify();
- return val
- }
- /**
- * Delete a property and trigger change if necessary.
- */
- function del (target, key) {
- if ( true &&
- (isUndef(target) || isPrimitive(target))
- ) {
- warn(("Cannot delete reactive property on undefined, null, or primitive value: " + ((target))));
- }
- if (Array.isArray(target) && isValidArrayIndex(key)) {
- target.splice(key, 1);
- return
- }
- var ob = (target).__ob__;
- if (target._isVue || (ob && ob.vmCount)) {
- true && warn(
- 'Avoid deleting properties on a Vue instance or its root $data ' +
- '- just set it to null.'
- );
- return
- }
- if (!hasOwn(target, key)) {
- return
- }
- delete target[key];
- if (!ob) {
- return
- }
- ob.dep.notify();
- }
- /**
- * Collect dependencies on array elements when the array is touched, since
- * we cannot intercept array element access like property getters.
- */
- function dependArray (value) {
- for (var e = (void 0), i = 0, l = value.length; i < l; i++) {
- e = value[i];
- e && e.__ob__ && e.__ob__.dep.depend();
- if (Array.isArray(e)) {
- dependArray(e);
- }
- }
- }
- /* */
- /**
- * Option overwriting strategies are functions that handle
- * how to merge a parent option value and a child option
- * value into the final value.
- */
- var strats = config.optionMergeStrategies;
- /**
- * Options with restrictions
- */
- if (true) {
- strats.el = strats.propsData = function (parent, child, vm, key) {
- if (!vm) {
- warn(
- "option \"" + key + "\" can only be used during instance " +
- 'creation with the `new` keyword.'
- );
- }
- return defaultStrat(parent, child)
- };
- }
- /**
- * Helper that recursively merges two data objects together.
- */
- function mergeData (to, from) {
- if (!from) { return to }
- var key, toVal, fromVal;
- var keys = hasSymbol
- ? Reflect.ownKeys(from)
- : Object.keys(from);
- for (var i = 0; i < keys.length; i++) {
- key = keys[i];
- // in case the object is already observed...
- if (key === '__ob__') { continue }
- toVal = to[key];
- fromVal = from[key];
- if (!hasOwn(to, key)) {
- set(to, key, fromVal);
- } else if (
- toVal !== fromVal &&
- isPlainObject(toVal) &&
- isPlainObject(fromVal)
- ) {
- mergeData(toVal, fromVal);
- }
- }
- return to
- }
- /**
- * Data
- */
- function mergeDataOrFn (
- parentVal,
- childVal,
- vm
- ) {
- if (!vm) {
- // in a Vue.extend merge, both should be functions
- if (!childVal) {
- return parentVal
- }
- if (!parentVal) {
- return childVal
- }
- // when parentVal & childVal are both present,
- // we need to return a function that returns the
- // merged result of both functions... no need to
- // check if parentVal is a function here because
- // it has to be a function to pass previous merges.
- return function mergedDataFn () {
- return mergeData(
- typeof childVal === 'function' ? childVal.call(this, this) : childVal,
- typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal
- )
- }
- } else {
- return function mergedInstanceDataFn () {
- // instance merge
- var instanceData = typeof childVal === 'function'
- ? childVal.call(vm, vm)
- : childVal;
- var defaultData = typeof parentVal === 'function'
- ? parentVal.call(vm, vm)
- : parentVal;
- if (instanceData) {
- return mergeData(instanceData, defaultData)
- } else {
- return defaultData
- }
- }
- }
- }
- strats.data = function (
- parentVal,
- childVal,
- vm
- ) {
- if (!vm) {
- if (childVal && typeof childVal !== 'function') {
- true && warn(
- 'The "data" option should be a function ' +
- 'that returns a per-instance value in component ' +
- 'definitions.',
- vm
- );
- return parentVal
- }
- return mergeDataOrFn(parentVal, childVal)
- }
- return mergeDataOrFn(parentVal, childVal, vm)
- };
- /**
- * Hooks and props are merged as arrays.
- */
- function mergeHook (
- parentVal,
- childVal
- ) {
- var res = childVal
- ? parentVal
- ? parentVal.concat(childVal)
- : Array.isArray(childVal)
- ? childVal
- : [childVal]
- : parentVal;
- return res
- ? dedupeHooks(res)
- : res
- }
- function dedupeHooks (hooks) {
- var res = [];
- for (var i = 0; i < hooks.length; i++) {
- if (res.indexOf(hooks[i]) === -1) {
- res.push(hooks[i]);
- }
- }
- return res
- }
- LIFECYCLE_HOOKS.forEach(function (hook) {
- strats[hook] = mergeHook;
- });
- /**
- * Assets
- *
- * When a vm is present (instance creation), we need to do
- * a three-way merge between constructor options, instance
- * options and parent options.
- */
- function mergeAssets (
- parentVal,
- childVal,
- vm,
- key
- ) {
- var res = Object.create(parentVal || null);
- if (childVal) {
- true && assertObjectType(key, childVal, vm);
- return extend(res, childVal)
- } else {
- return res
- }
- }
- ASSET_TYPES.forEach(function (type) {
- strats[type + 's'] = mergeAssets;
- });
- /**
- * Watchers.
- *
- * Watchers hashes should not overwrite one
- * another, so we merge them as arrays.
- */
- strats.watch = function (
- parentVal,
- childVal,
- vm,
- key
- ) {
- // work around Firefox's Object.prototype.watch...
- if (parentVal === nativeWatch) { parentVal = undefined; }
- if (childVal === nativeWatch) { childVal = undefined; }
- /* istanbul ignore if */
- if (!childVal) { return Object.create(parentVal || null) }
- if (true) {
- assertObjectType(key, childVal, vm);
- }
- if (!parentVal) { return childVal }
- var ret = {};
- extend(ret, parentVal);
- for (var key$1 in childVal) {
- var parent = ret[key$1];
- var child = childVal[key$1];
- if (parent && !Array.isArray(parent)) {
- parent = [parent];
- }
- ret[key$1] = parent
- ? parent.concat(child)
- : Array.isArray(child) ? child : [child];
- }
- return ret
- };
- /**
- * Other object hashes.
- */
- strats.props =
- strats.methods =
- strats.inject =
- strats.computed = function (
- parentVal,
- childVal,
- vm,
- key
- ) {
- if (childVal && "development" !== 'production') {
- assertObjectType(key, childVal, vm);
- }
- if (!parentVal) { return childVal }
- var ret = Object.create(null);
- extend(ret, parentVal);
- if (childVal) { extend(ret, childVal); }
- return ret
- };
- strats.provide = mergeDataOrFn;
- /**
- * Default strategy.
- */
- var defaultStrat = function (parentVal, childVal) {
- return childVal === undefined
- ? parentVal
- : childVal
- };
- /**
- * Validate component names
- */
- function checkComponents (options) {
- for (var key in options.components) {
- validateComponentName(key);
- }
- }
- function validateComponentName (name) {
- if (!new RegExp(("^[a-zA-Z][\\-\\.0-9_" + (unicodeRegExp.source) + "]*$")).test(name)) {
- warn(
- 'Invalid component name: "' + name + '". Component names ' +
- 'should conform to valid custom element name in html5 specification.'
- );
- }
- if (isBuiltInTag(name) || config.isReservedTag(name)) {
- warn(
- 'Do not use built-in or reserved HTML elements as component ' +
- 'id: ' + name
- );
- }
- }
- /**
- * Ensure all props option syntax are normalized into the
- * Object-based format.
- */
- function normalizeProps (options, vm) {
- var props = options.props;
- if (!props) { return }
- var res = {};
- var i, val, name;
- if (Array.isArray(props)) {
- i = props.length;
- while (i--) {
- val = props[i];
- if (typeof val === 'string') {
- name = camelize(val);
- res[name] = { type: null };
- } else if (true) {
- warn('props must be strings when using array syntax.');
- }
- }
- } else if (isPlainObject(props)) {
- for (var key in props) {
- val = props[key];
- name = camelize(key);
- res[name] = isPlainObject(val)
- ? val
- : { type: val };
- }
- } else if (true) {
- warn(
- "Invalid value for option \"props\": expected an Array or an Object, " +
- "but got " + (toRawType(props)) + ".",
- vm
- );
- }
- options.props = res;
- }
- /**
- * Normalize all injections into Object-based format
- */
- function normalizeInject (options, vm) {
- var inject = options.inject;
- if (!inject) { return }
- var normalized = options.inject = {};
- if (Array.isArray(inject)) {
- for (var i = 0; i < inject.length; i++) {
- normalized[inject[i]] = { from: inject[i] };
- }
- } else if (isPlainObject(inject)) {
- for (var key in inject) {
- var val = inject[key];
- normalized[key] = isPlainObject(val)
- ? extend({ from: key }, val)
- : { from: val };
- }
- } else if (true) {
- warn(
- "Invalid value for option \"inject\": expected an Array or an Object, " +
- "but got " + (toRawType(inject)) + ".",
- vm
- );
- }
- }
- /**
- * Normalize raw function directives into object format.
- */
- function normalizeDirectives (options) {
- var dirs = options.directives;
- if (dirs) {
- for (var key in dirs) {
- var def$$1 = dirs[key];
- if (typeof def$$1 === 'function') {
- dirs[key] = { bind: def$$1, update: def$$1 };
- }
- }
- }
- }
- function assertObjectType (name, value, vm) {
- if (!isPlainObject(value)) {
- warn(
- "Invalid value for option \"" + name + "\": expected an Object, " +
- "but got " + (toRawType(value)) + ".",
- vm
- );
- }
- }
- /**
- * Merge two option objects into a new one.
- * Core utility used in both instantiation and inheritance.
- */
- function mergeOptions (
- parent,
- child,
- vm
- ) {
- if (true) {
- checkComponents(child);
- }
- if (typeof child === 'function') {
- child = child.options;
- }
- normalizeProps(child, vm);
- normalizeInject(child, vm);
- normalizeDirectives(child);
- // Apply extends and mixins on the child options,
- // but only if it is a raw options object that isn't
- // the result of another mergeOptions call.
- // Only merged options has the _base property.
- if (!child._base) {
- if (child.extends) {
- parent = mergeOptions(parent, child.extends, vm);
- }
- if (child.mixins) {
- for (var i = 0, l = child.mixins.length; i < l; i++) {
- parent = mergeOptions(parent, child.mixins[i], vm);
- }
- }
- }
- var options = {};
- var key;
- for (key in parent) {
- mergeField(key);
- }
- for (key in child) {
- if (!hasOwn(parent, key)) {
- mergeField(key);
- }
- }
- function mergeField (key) {
- var strat = strats[key] || defaultStrat;
- options[key] = strat(parent[key], child[key], vm, key);
- }
- return options
- }
- /**
- * Resolve an asset.
- * This function is used because child instances need access
- * to assets defined in its ancestor chain.
- */
- function resolveAsset (
- options,
- type,
- id,
- warnMissing
- ) {
- /* istanbul ignore if */
- if (typeof id !== 'string') {
- return
- }
- var assets = options[type];
- // check local registration variations first
- if (hasOwn(assets, id)) { return assets[id] }
- var camelizedId = camelize(id);
- if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }
- var PascalCaseId = capitalize(camelizedId);
- if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }
- // fallback to prototype chain
- var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
- if ( true && warnMissing && !res) {
- warn(
- 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,
- options
- );
- }
- return res
- }
- /* */
- function validateProp (
- key,
- propOptions,
- propsData,
- vm
- ) {
- var prop = propOptions[key];
- var absent = !hasOwn(propsData, key);
- var value = propsData[key];
- // boolean casting
- var booleanIndex = getTypeIndex(Boolean, prop.type);
- if (booleanIndex > -1) {
- if (absent && !hasOwn(prop, 'default')) {
- value = false;
- } else if (value === '' || value === hyphenate(key)) {
- // only cast empty string / same name to boolean if
- // boolean has higher priority
- var stringIndex = getTypeIndex(String, prop.type);
- if (stringIndex < 0 || booleanIndex < stringIndex) {
- value = true;
- }
- }
- }
- // check default value
- if (value === undefined) {
- value = getPropDefaultValue(vm, prop, key);
- // since the default value is a fresh copy,
- // make sure to observe it.
- var prevShouldObserve = shouldObserve;
- toggleObserving(true);
- observe(value);
- toggleObserving(prevShouldObserve);
- }
- if (
- true
- ) {
- assertProp(prop, key, value, vm, absent);
- }
- return value
- }
- /**
- * Get the default value of a prop.
- */
- function getPropDefaultValue (vm, prop, key) {
- // no default, return undefined
- if (!hasOwn(prop, 'default')) {
- return undefined
- }
- var def = prop.default;
- // warn against non-factory defaults for Object & Array
- if ( true && isObject(def)) {
- warn(
- 'Invalid default value for prop "' + key + '": ' +
- 'Props with type Object/Array must use a factory function ' +
- 'to return the default value.',
- vm
- );
- }
- // the raw prop value was also undefined from previous render,
- // return previous default value to avoid unnecessary watcher trigger
- if (vm && vm.$options.propsData &&
- vm.$options.propsData[key] === undefined &&
- vm._props[key] !== undefined
- ) {
- return vm._props[key]
- }
- // call factory function for non-Function types
- // a value is Function if its prototype is function even across different execution context
- return typeof def === 'function' && getType(prop.type) !== 'Function'
- ? def.call(vm)
- : def
- }
- /**
- * Assert whether a prop is valid.
- */
- function assertProp (
- prop,
- name,
- value,
- vm,
- absent
- ) {
- if (prop.required && absent) {
- warn(
- 'Missing required prop: "' + name + '"',
- vm
- );
- return
- }
- if (value == null && !prop.required) {
- return
- }
- var type = prop.type;
- var valid = !type || type === true;
- var expectedTypes = [];
- if (type) {
- if (!Array.isArray(type)) {
- type = [type];
- }
- for (var i = 0; i < type.length && !valid; i++) {
- var assertedType = assertType(value, type[i]);
- expectedTypes.push(assertedType.expectedType || '');
- valid = assertedType.valid;
- }
- }
- if (!valid) {
- warn(
- getInvalidTypeMessage(name, value, expectedTypes),
- vm
- );
- return
- }
- var validator = prop.validator;
- if (validator) {
- if (!validator(value)) {
- warn(
- 'Invalid prop: custom validator check failed for prop "' + name + '".',
- vm
- );
- }
- }
- }
- var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;
- function assertType (value, type) {
- var valid;
- var expectedType = getType(type);
- if (simpleCheckRE.test(expectedType)) {
- var t = typeof value;
- valid = t === expectedType.toLowerCase();
- // for primitive wrapper objects
- if (!valid && t === 'object') {
- valid = value instanceof type;
- }
- } else if (expectedType === 'Object') {
- valid = isPlainObject(value);
- } else if (expectedType === 'Array') {
- valid = Array.isArray(value);
- } else {
- valid = value instanceof type;
- }
- return {
- valid: valid,
- expectedType: expectedType
- }
- }
- /**
- * Use function string name to check built-in types,
- * because a simple equality check will fail when running
- * across different vms / iframes.
- */
- function getType (fn) {
- var match = fn && fn.toString().match(/^\s*function (\w+)/);
- return match ? match[1] : ''
- }
- function isSameType (a, b) {
- return getType(a) === getType(b)
- }
- function getTypeIndex (type, expectedTypes) {
- if (!Array.isArray(expectedTypes)) {
- return isSameType(expectedTypes, type) ? 0 : -1
- }
- for (var i = 0, len = expectedTypes.length; i < len; i++) {
- if (isSameType(expectedTypes[i], type)) {
- return i
- }
- }
- return -1
- }
- function getInvalidTypeMessage (name, value, expectedTypes) {
- var message = "Invalid prop: type check failed for prop \"" + name + "\"." +
- " Expected " + (expectedTypes.map(capitalize).join(', '));
- var expectedType = expectedTypes[0];
- var receivedType = toRawType(value);
- var expectedValue = styleValue(value, expectedType);
- var receivedValue = styleValue(value, receivedType);
- // check if we need to specify expected value
- if (expectedTypes.length === 1 &&
- isExplicable(expectedType) &&
- !isBoolean(expectedType, receivedType)) {
- message += " with value " + expectedValue;
- }
- message += ", got " + receivedType + " ";
- // check if we need to specify received value
- if (isExplicable(receivedType)) {
- message += "with value " + receivedValue + ".";
- }
- return message
- }
- function styleValue (value, type) {
- if (type === 'String') {
- return ("\"" + value + "\"")
- } else if (type === 'Number') {
- return ("" + (Number(value)))
- } else {
- return ("" + value)
- }
- }
- function isExplicable (value) {
- var explicitTypes = ['string', 'number', 'boolean'];
- return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })
- }
- function isBoolean () {
- var args = [], len = arguments.length;
- while ( len-- ) args[ len ] = arguments[ len ];
- return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })
- }
- /* */
- function handleError (err, vm, info) {
- // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
- // See: https://github.com/vuejs/vuex/issues/1505
- pushTarget();
- try {
- if (vm) {
- var cur = vm;
- while ((cur = cur.$parent)) {
- var hooks = cur.$options.errorCaptured;
- if (hooks) {
- for (var i = 0; i < hooks.length; i++) {
- try {
- var capture = hooks[i].call(cur, err, vm, info) === false;
- if (capture) { return }
- } catch (e) {
- globalHandleError(e, cur, 'errorCaptured hook');
- }
- }
- }
- }
- }
- globalHandleError(err, vm, info);
- } finally {
- popTarget();
- }
- }
- function invokeWithErrorHandling (
- handler,
- context,
- args,
- vm,
- info
- ) {
- var res;
- try {
- res = args ? handler.apply(context, args) : handler.call(context);
- if (res && !res._isVue && isPromise(res) && !res._handled) {
- res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
- // issue #9511
- // avoid catch triggering multiple times when nested calls
- res._handled = true;
- }
- } catch (e) {
- handleError(e, vm, info);
- }
- return res
- }
- function globalHandleError (err, vm, info) {
- if (config.errorHandler) {
- try {
- return config.errorHandler.call(null, err, vm, info)
- } catch (e) {
- // if the user intentionally throws the original error in the handler,
- // do not log it twice
- if (e !== err) {
- logError(e, null, 'config.errorHandler');
- }
- }
- }
- logError(err, vm, info);
- }
- function logError (err, vm, info) {
- if (true) {
- warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
- }
- /* istanbul ignore else */
- if ((inBrowser || inWeex) && typeof console !== 'undefined') {
- console.error(err);
- } else {
- throw err
- }
- }
- /* */
- var callbacks = [];
- var pending = false;
- function flushCallbacks () {
- pending = false;
- var copies = callbacks.slice(0);
- callbacks.length = 0;
- for (var i = 0; i < copies.length; i++) {
- copies[i]();
- }
- }
- // Here we have async deferring wrappers using microtasks.
- // In 2.5 we used (macro) tasks (in combination with microtasks).
- // However, it has subtle problems when state is changed right before repaint
- // (e.g. #6813, out-in transitions).
- // Also, using (macro) tasks in event handler would cause some weird behaviors
- // that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).
- // So we now use microtasks everywhere, again.
- // A major drawback of this tradeoff is that there are some scenarios
- // where microtasks have too high a priority and fire in between supposedly
- // sequential events (e.g. #4521, #6690, which have workarounds)
- // or even between bubbling of the same event (#6566).
- var timerFunc;
- // The nextTick behavior leverages the microtask queue, which can be accessed
- // via either native Promise.then or MutationObserver.
- // MutationObserver has wider support, however it is seriously bugged in
- // UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
- // completely stops working after triggering a few times... so, if native
- // Promise is available, we will use it:
- /* istanbul ignore next, $flow-disable-line */
- if (typeof Promise !== 'undefined' && isNative(Promise)) {
- var p = Promise.resolve();
- timerFunc = function () {
- p.then(flushCallbacks);
- // In problematic UIWebViews, Promise.then doesn't completely break, but
- // it can get stuck in a weird state where callbacks are pushed into the
- // microtask queue but the queue isn't being flushed, until the browser
- // needs to do some other work, e.g. handle a timer. Therefore we can
- // "force" the microtask queue to be flushed by adding an empty timer.
- if (isIOS) { setTimeout(noop); }
- };
- } else if (!isIE && typeof MutationObserver !== 'undefined' && (
- isNative(MutationObserver) ||
- // PhantomJS and iOS 7.x
- MutationObserver.toString() === '[object MutationObserverConstructor]'
- )) {
- // Use MutationObserver where native Promise is not available,
- // e.g. PhantomJS, iOS7, Android 4.4
- // (#6466 MutationObserver is unreliable in IE11)
- var counter = 1;
- var observer = new MutationObserver(flushCallbacks);
- var textNode = document.createTextNode(String(counter));
- observer.observe(textNode, {
- characterData: true
- });
- timerFunc = function () {
- counter = (counter + 1) % 2;
- textNode.data = String(counter);
- };
- } else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {
- // Fallback to setImmediate.
- // Technically it leverages the (macro) task queue,
- // but it is still a better choice than setTimeout.
- timerFunc = function () {
- setImmediate(flushCallbacks);
- };
- } else {
- // Fallback to setTimeout.
- timerFunc = function () {
- setTimeout(flushCallbacks, 0);
- };
- }
- function nextTick (cb, ctx) {
- var _resolve;
- callbacks.push(function () {
- if (cb) {
- try {
- cb.call(ctx);
- } catch (e) {
- handleError(e, ctx, 'nextTick');
- }
- } else if (_resolve) {
- _resolve(ctx);
- }
- });
- if (!pending) {
- pending = true;
- timerFunc();
- }
- // $flow-disable-line
- if (!cb && typeof Promise !== 'undefined') {
- return new Promise(function (resolve) {
- _resolve = resolve;
- })
- }
- }
- /* */
- /* not type checking this file because flow doesn't play well with Proxy */
- var initProxy;
- if (true) {
- var allowedGlobals = makeMap(
- 'Infinity,undefined,NaN,isFinite,isNaN,' +
- 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
- 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +
- 'require' // for Webpack/Browserify
- );
- var warnNonPresent = function (target, key) {
- warn(
- "Property or method \"" + key + "\" is not defined on the instance but " +
- 'referenced during render. Make sure that this property is reactive, ' +
- 'either in the data option, or for class-based components, by ' +
- 'initializing the property. ' +
- 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',
- target
- );
- };
- var warnReservedPrefix = function (target, key) {
- warn(
- "Property \"" + key + "\" must be accessed with \"$data." + key + "\" because " +
- 'properties starting with "$" or "_" are not proxied in the Vue instance to ' +
- 'prevent conflicts with Vue internals. ' +
- 'See: https://vuejs.org/v2/api/#data',
- target
- );
- };
- var hasProxy =
- typeof Proxy !== 'undefined' && isNative(Proxy);
- if (hasProxy) {
- var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
- config.keyCodes = new Proxy(config.keyCodes, {
- set: function set (target, key, value) {
- if (isBuiltInModifier(key)) {
- warn(("Avoid overwriting built-in modifier in config.keyCodes: ." + key));
- return false
- } else {
- target[key] = value;
- return true
- }
- }
- });
- }
- var hasHandler = {
- has: function has (target, key) {
- var has = key in target;
- var isAllowed = allowedGlobals(key) ||
- (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));
- if (!has && !isAllowed) {
- if (key in target.$data) { warnReservedPrefix(target, key); }
- else { warnNonPresent(target, key); }
- }
- return has || !isAllowed
- }
- };
- var getHandler = {
- get: function get (target, key) {
- if (typeof key === 'string' && !(key in target)) {
- if (key in target.$data) { warnReservedPrefix(target, key); }
- else { warnNonPresent(target, key); }
- }
- return target[key]
- }
- };
- initProxy = function initProxy (vm) {
- if (hasProxy) {
- // determine which proxy handler to use
- var options = vm.$options;
- var handlers = options.render && options.render._withStripped
- ? getHandler
- : hasHandler;
- vm._renderProxy = new Proxy(vm, handlers);
- } else {
- vm._renderProxy = vm;
- }
- };
- }
- /* */
- var seenObjects = new _Set();
- /**
- * Recursively traverse an object to evoke all converted
- * getters, so that every nested property inside the object
- * is collected as a "deep" dependency.
- */
- function traverse (val) {
- _traverse(val, seenObjects);
- seenObjects.clear();
- }
- function _traverse (val, seen) {
- var i, keys;
- var isA = Array.isArray(val);
- if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {
- return
- }
- if (val.__ob__) {
- var depId = val.__ob__.dep.id;
- if (seen.has(depId)) {
- return
- }
- seen.add(depId);
- }
- if (isA) {
- i = val.length;
- while (i--) { _traverse(val[i], seen); }
- } else {
- keys = Object.keys(val);
- i = keys.length;
- while (i--) { _traverse(val[keys[i]], seen); }
- }
- }
- var mark;
- var measure;
- if (true) {
- var perf = inBrowser && window.performance;
- /* istanbul ignore if */
- if (
- perf &&
- perf.mark &&
- perf.measure &&
- perf.clearMarks &&
- perf.clearMeasures
- ) {
- mark = function (tag) { return perf.mark(tag); };
- measure = function (name, startTag, endTag) {
- perf.measure(name, startTag, endTag);
- perf.clearMarks(startTag);
- perf.clearMarks(endTag);
- // perf.clearMeasures(name)
- };
- }
- }
- /* */
- var normalizeEvent = cached(function (name) {
- var passive = name.charAt(0) === '&';
- name = passive ? name.slice(1) : name;
- var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first
- name = once$$1 ? name.slice(1) : name;
- var capture = name.charAt(0) === '!';
- name = capture ? name.slice(1) : name;
- return {
- name: name,
- once: once$$1,
- capture: capture,
- passive: passive
- }
- });
- function createFnInvoker (fns, vm) {
- function invoker () {
- var arguments$1 = arguments;
- var fns = invoker.fns;
- if (Array.isArray(fns)) {
- var cloned = fns.slice();
- for (var i = 0; i < cloned.length; i++) {
- invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler");
- }
- } else {
- // return handler return value for single handlers
- return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler")
- }
- }
- invoker.fns = fns;
- return invoker
- }
- function updateListeners (
- on,
- oldOn,
- add,
- remove$$1,
- createOnceHandler,
- vm
- ) {
- var name, def$$1, cur, old, event;
- for (name in on) {
- def$$1 = cur = on[name];
- old = oldOn[name];
- event = normalizeEvent(name);
- if (isUndef(cur)) {
- true && warn(
- "Invalid handler for event \"" + (event.name) + "\": got " + String(cur),
- vm
- );
- } else if (isUndef(old)) {
- if (isUndef(cur.fns)) {
- cur = on[name] = createFnInvoker(cur, vm);
- }
- if (isTrue(event.once)) {
- cur = on[name] = createOnceHandler(event.name, cur, event.capture);
- }
- add(event.name, cur, event.capture, event.passive, event.params);
- } else if (cur !== old) {
- old.fns = cur;
- on[name] = old;
- }
- }
- for (name in oldOn) {
- if (isUndef(on[name])) {
- event = normalizeEvent(name);
- remove$$1(event.name, oldOn[name], event.capture);
- }
- }
- }
- /* */
- /* */
- // fixed by xxxxxx (mp properties)
- function extractPropertiesFromVNodeData(data, Ctor, res, context) {
- var propOptions = Ctor.options.mpOptions && Ctor.options.mpOptions.properties;
- if (isUndef(propOptions)) {
- return res
- }
- var externalClasses = Ctor.options.mpOptions.externalClasses || [];
- var attrs = data.attrs;
- var props = data.props;
- if (isDef(attrs) || isDef(props)) {
- for (var key in propOptions) {
- var altKey = hyphenate(key);
- var result = checkProp(res, props, key, altKey, true) ||
- checkProp(res, attrs, key, altKey, false);
- // externalClass
- if (
- result &&
- res[key] &&
- externalClasses.indexOf(altKey) !== -1 &&
- context[camelize(res[key])]
- ) {
- // 赋值 externalClass 真正的值(模板里 externalClass 的值可能是字符串)
- res[key] = context[camelize(res[key])];
- }
- }
- }
- return res
- }
- function extractPropsFromVNodeData (
- data,
- Ctor,
- tag,
- context// fixed by xxxxxx
- ) {
- // we are only extracting raw values here.
- // validation and default values are handled in the child
- // component itself.
- var propOptions = Ctor.options.props;
- if (isUndef(propOptions)) {
- // fixed by xxxxxx
- return extractPropertiesFromVNodeData(data, Ctor, {}, context)
- }
- var res = {};
- var attrs = data.attrs;
- var props = data.props;
- if (isDef(attrs) || isDef(props)) {
- for (var key in propOptions) {
- var altKey = hyphenate(key);
- if (true) {
- var keyInLowerCase = key.toLowerCase();
- if (
- key !== keyInLowerCase &&
- attrs && hasOwn(attrs, keyInLowerCase)
- ) {
- tip(
- "Prop \"" + keyInLowerCase + "\" is passed to component " +
- (formatComponentName(tag || Ctor)) + ", but the declared prop name is" +
- " \"" + key + "\". " +
- "Note that HTML attributes are case-insensitive and camelCased " +
- "props need to use their kebab-case equivalents when using in-DOM " +
- "templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."
- );
- }
- }
- checkProp(res, props, key, altKey, true) ||
- checkProp(res, attrs, key, altKey, false);
- }
- }
- // fixed by xxxxxx
- return extractPropertiesFromVNodeData(data, Ctor, res, context)
- }
- function checkProp (
- res,
- hash,
- key,
- altKey,
- preserve
- ) {
- if (isDef(hash)) {
- if (hasOwn(hash, key)) {
- res[key] = hash[key];
- if (!preserve) {
- delete hash[key];
- }
- return true
- } else if (hasOwn(hash, altKey)) {
- res[key] = hash[altKey];
- if (!preserve) {
- delete hash[altKey];
- }
- return true
- }
- }
- return false
- }
- /* */
- // The template compiler attempts to minimize the need for normalization by
- // statically analyzing the template at compile time.
- //
- // For plain HTML markup, normalization can be completely skipped because the
- // generated render function is guaranteed to return Array<VNode>. There are
- // two cases where extra normalization is needed:
- // 1. When the children contains components - because a functional component
- // may return an Array instead of a single root. In this case, just a simple
- // normalization is needed - if any child is an Array, we flatten the whole
- // thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
- // because functional components already normalize their own children.
- function simpleNormalizeChildren (children) {
- for (var i = 0; i < children.length; i++) {
- if (Array.isArray(children[i])) {
- return Array.prototype.concat.apply([], children)
- }
- }
- return children
- }
- // 2. When the children contains constructs that always generated nested Arrays,
- // e.g. <template>, <slot>, v-for, or when the children is provided by user
- // with hand-written render functions / JSX. In such cases a full normalization
- // is needed to cater to all possible types of children values.
- function normalizeChildren (children) {
- return isPrimitive(children)
- ? [createTextVNode(children)]
- : Array.isArray(children)
- ? normalizeArrayChildren(children)
- : undefined
- }
- function isTextNode (node) {
- return isDef(node) && isDef(node.text) && isFalse(node.isComment)
- }
- function normalizeArrayChildren (children, nestedIndex) {
- var res = [];
- var i, c, lastIndex, last;
- for (i = 0; i < children.length; i++) {
- c = children[i];
- if (isUndef(c) || typeof c === 'boolean') { continue }
- lastIndex = res.length - 1;
- last = res[lastIndex];
- // nested
- if (Array.isArray(c)) {
- if (c.length > 0) {
- c = normalizeArrayChildren(c, ((nestedIndex || '') + "_" + i));
- // merge adjacent text nodes
- if (isTextNode(c[0]) && isTextNode(last)) {
- res[lastIndex] = createTextVNode(last.text + (c[0]).text);
- c.shift();
- }
- res.push.apply(res, c);
- }
- } else if (isPrimitive(c)) {
- if (isTextNode(last)) {
- // merge adjacent text nodes
- // this is necessary for SSR hydration because text nodes are
- // essentially merged when rendered to HTML strings
- res[lastIndex] = createTextVNode(last.text + c);
- } else if (c !== '') {
- // convert primitive to vnode
- res.push(createTextVNode(c));
- }
- } else {
- if (isTextNode(c) && isTextNode(last)) {
- // merge adjacent text nodes
- res[lastIndex] = createTextVNode(last.text + c.text);
- } else {
- // default key for nested array children (likely generated by v-for)
- if (isTrue(children._isVList) &&
- isDef(c.tag) &&
- isUndef(c.key) &&
- isDef(nestedIndex)) {
- c.key = "__vlist" + nestedIndex + "_" + i + "__";
- }
- res.push(c);
- }
- }
- }
- return res
- }
- /* */
- function initProvide (vm) {
- var provide = vm.$options.provide;
- if (provide) {
- vm._provided = typeof provide === 'function'
- ? provide.call(vm)
- : provide;
- }
- }
- function initInjections (vm) {
- var result = resolveInject(vm.$options.inject, vm);
- if (result) {
- toggleObserving(false);
- Object.keys(result).forEach(function (key) {
- /* istanbul ignore else */
- if (true) {
- defineReactive$$1(vm, key, result[key], function () {
- warn(
- "Avoid mutating an injected value directly since the changes will be " +
- "overwritten whenever the provided component re-renders. " +
- "injection being mutated: \"" + key + "\"",
- vm
- );
- });
- } else {}
- });
- toggleObserving(true);
- }
- }
- function resolveInject (inject, vm) {
- if (inject) {
- // inject is :any because flow is not smart enough to figure out cached
- var result = Object.create(null);
- var keys = hasSymbol
- ? Reflect.ownKeys(inject)
- : Object.keys(inject);
- for (var i = 0; i < keys.length; i++) {
- var key = keys[i];
- // #6574 in case the inject object is observed...
- if (key === '__ob__') { continue }
- var provideKey = inject[key].from;
- var source = vm;
- while (source) {
- if (source._provided && hasOwn(source._provided, provideKey)) {
- result[key] = source._provided[provideKey];
- break
- }
- source = source.$parent;
- }
- if (!source) {
- if ('default' in inject[key]) {
- var provideDefault = inject[key].default;
- result[key] = typeof provideDefault === 'function'
- ? provideDefault.call(vm)
- : provideDefault;
- } else if (true) {
- warn(("Injection \"" + key + "\" not found"), vm);
- }
- }
- }
- return result
- }
- }
- /* */
- /**
- * Runtime helper for resolving raw children VNodes into a slot object.
- */
- function resolveSlots (
- children,
- context
- ) {
- if (!children || !children.length) {
- return {}
- }
- var slots = {};
- for (var i = 0, l = children.length; i < l; i++) {
- var child = children[i];
- var data = child.data;
- // remove slot attribute if the node is resolved as a Vue slot node
- if (data && data.attrs && data.attrs.slot) {
- delete data.attrs.slot;
- }
- // named slots should only be respected if the vnode was rendered in the
- // same context.
- if ((child.context === context || child.fnContext === context) &&
- data && data.slot != null
- ) {
- var name = data.slot;
- var slot = (slots[name] || (slots[name] = []));
- if (child.tag === 'template') {
- slot.push.apply(slot, child.children || []);
- } else {
- slot.push(child);
- }
- } else {
- // fixed by xxxxxx 临时 hack 掉 uni-app 中的异步 name slot page
- if(child.asyncMeta && child.asyncMeta.data && child.asyncMeta.data.slot === 'page'){
- (slots['page'] || (slots['page'] = [])).push(child);
- }else{
- (slots.default || (slots.default = [])).push(child);
- }
- }
- }
- // ignore slots that contains only whitespace
- for (var name$1 in slots) {
- if (slots[name$1].every(isWhitespace)) {
- delete slots[name$1];
- }
- }
- return slots
- }
- function isWhitespace (node) {
- return (node.isComment && !node.asyncFactory) || node.text === ' '
- }
- /* */
- function normalizeScopedSlots (
- slots,
- normalSlots,
- prevSlots
- ) {
- var res;
- var hasNormalSlots = Object.keys(normalSlots).length > 0;
- var isStable = slots ? !!slots.$stable : !hasNormalSlots;
- var key = slots && slots.$key;
- if (!slots) {
- res = {};
- } else if (slots._normalized) {
- // fast path 1: child component re-render only, parent did not change
- return slots._normalized
- } else if (
- isStable &&
- prevSlots &&
- prevSlots !== emptyObject &&
- key === prevSlots.$key &&
- !hasNormalSlots &&
- !prevSlots.$hasNormal
- ) {
- // fast path 2: stable scoped slots w/ no normal slots to proxy,
- // only need to normalize once
- return prevSlots
- } else {
- res = {};
- for (var key$1 in slots) {
- if (slots[key$1] && key$1[0] !== '$') {
- res[key$1] = normalizeScopedSlot(normalSlots, key$1, slots[key$1]);
- }
- }
- }
- // expose normal slots on scopedSlots
- for (var key$2 in normalSlots) {
- if (!(key$2 in res)) {
- res[key$2] = proxyNormalSlot(normalSlots, key$2);
- }
- }
- // avoriaz seems to mock a non-extensible $scopedSlots object
- // and when that is passed down this would cause an error
- if (slots && Object.isExtensible(slots)) {
- (slots)._normalized = res;
- }
- def(res, '$stable', isStable);
- def(res, '$key', key);
- def(res, '$hasNormal', hasNormalSlots);
- return res
- }
- function normalizeScopedSlot(normalSlots, key, fn) {
- var normalized = function () {
- var res = arguments.length ? fn.apply(null, arguments) : fn({});
- res = res && typeof res === 'object' && !Array.isArray(res)
- ? [res] // single vnode
- : normalizeChildren(res);
- return res && (
- res.length === 0 ||
- (res.length === 1 && res[0].isComment) // #9658
- ) ? undefined
- : res
- };
- // this is a slot using the new v-slot syntax without scope. although it is
- // compiled as a scoped slot, render fn users would expect it to be present
- // on this.$slots because the usage is semantically a normal slot.
- if (fn.proxy) {
- Object.defineProperty(normalSlots, key, {
- get: normalized,
- enumerable: true,
- configurable: true
- });
- }
- return normalized
- }
- function proxyNormalSlot(slots, key) {
- return function () { return slots[key]; }
- }
- /* */
- /**
- * Runtime helper for rendering v-for lists.
- */
- function renderList (
- val,
- render
- ) {
- var ret, i, l, keys, key;
- if (Array.isArray(val) || typeof val === 'string') {
- ret = new Array(val.length);
- for (i = 0, l = val.length; i < l; i++) {
- ret[i] = render(val[i], i, i, i); // fixed by xxxxxx
- }
- } else if (typeof val === 'number') {
- ret = new Array(val);
- for (i = 0; i < val; i++) {
- ret[i] = render(i + 1, i, i, i); // fixed by xxxxxx
- }
- } else if (isObject(val)) {
- if (hasSymbol && val[Symbol.iterator]) {
- ret = [];
- var iterator = val[Symbol.iterator]();
- var result = iterator.next();
- while (!result.done) {
- ret.push(render(result.value, ret.length, i, i++)); // fixed by xxxxxx
- result = iterator.next();
- }
- } else {
- keys = Object.keys(val);
- ret = new Array(keys.length);
- for (i = 0, l = keys.length; i < l; i++) {
- key = keys[i];
- ret[i] = render(val[key], key, i, i); // fixed by xxxxxx
- }
- }
- }
- if (!isDef(ret)) {
- ret = [];
- }
- (ret)._isVList = true;
- return ret
- }
- /* */
- /**
- * Runtime helper for rendering <slot>
- */
- function renderSlot (
- name,
- fallback,
- props,
- bindObject
- ) {
- var scopedSlotFn = this.$scopedSlots[name];
- var nodes;
- if (scopedSlotFn) { // scoped slot
- props = props || {};
- if (bindObject) {
- if ( true && !isObject(bindObject)) {
- warn(
- 'slot v-bind without argument expects an Object',
- this
- );
- }
- props = extend(extend({}, bindObject), props);
- }
- // fixed by xxxxxx app-plus scopedSlot
- nodes = scopedSlotFn(props, this, props._i) || fallback;
- } else {
- nodes = this.$slots[name] || fallback;
- }
- var target = props && props.slot;
- if (target) {
- return this.$createElement('template', { slot: target }, nodes)
- } else {
- return nodes
- }
- }
- /* */
- /**
- * Runtime helper for resolving filters
- */
- function resolveFilter (id) {
- return resolveAsset(this.$options, 'filters', id, true) || identity
- }
- /* */
- function isKeyNotMatch (expect, actual) {
- if (Array.isArray(expect)) {
- return expect.indexOf(actual) === -1
- } else {
- return expect !== actual
- }
- }
- /**
- * Runtime helper for checking keyCodes from config.
- * exposed as Vue.prototype._k
- * passing in eventKeyName as last argument separately for backwards compat
- */
- function checkKeyCodes (
- eventKeyCode,
- key,
- builtInKeyCode,
- eventKeyName,
- builtInKeyName
- ) {
- var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
- if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
- return isKeyNotMatch(builtInKeyName, eventKeyName)
- } else if (mappedKeyCode) {
- return isKeyNotMatch(mappedKeyCode, eventKeyCode)
- } else if (eventKeyName) {
- return hyphenate(eventKeyName) !== key
- }
- }
- /* */
- /**
- * Runtime helper for merging v-bind="object" into a VNode's data.
- */
- function bindObjectProps (
- data,
- tag,
- value,
- asProp,
- isSync
- ) {
- if (value) {
- if (!isObject(value)) {
- true && warn(
- 'v-bind without argument expects an Object or Array value',
- this
- );
- } else {
- if (Array.isArray(value)) {
- value = toObject(value);
- }
- var hash;
- var loop = function ( key ) {
- if (
- key === 'class' ||
- key === 'style' ||
- isReservedAttribute(key)
- ) {
- hash = data;
- } else {
- var type = data.attrs && data.attrs.type;
- hash = asProp || config.mustUseProp(tag, type, key)
- ? data.domProps || (data.domProps = {})
- : data.attrs || (data.attrs = {});
- }
- var camelizedKey = camelize(key);
- var hyphenatedKey = hyphenate(key);
- if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
- hash[key] = value[key];
- if (isSync) {
- var on = data.on || (data.on = {});
- on[("update:" + key)] = function ($event) {
- value[key] = $event;
- };
- }
- }
- };
- for (var key in value) loop( key );
- }
- }
- return data
- }
- /* */
- /**
- * Runtime helper for rendering static trees.
- */
- function renderStatic (
- index,
- isInFor
- ) {
- var cached = this._staticTrees || (this._staticTrees = []);
- var tree = cached[index];
- // if has already-rendered static tree and not inside v-for,
- // we can reuse the same tree.
- if (tree && !isInFor) {
- return tree
- }
- // otherwise, render a fresh tree.
- tree = cached[index] = this.$options.staticRenderFns[index].call(
- this._renderProxy,
- null,
- this // for render fns generated for functional component templates
- );
- markStatic(tree, ("__static__" + index), false);
- return tree
- }
- /**
- * Runtime helper for v-once.
- * Effectively it means marking the node as static with a unique key.
- */
- function markOnce (
- tree,
- index,
- key
- ) {
- markStatic(tree, ("__once__" + index + (key ? ("_" + key) : "")), true);
- return tree
- }
- function markStatic (
- tree,
- key,
- isOnce
- ) {
- if (Array.isArray(tree)) {
- for (var i = 0; i < tree.length; i++) {
- if (tree[i] && typeof tree[i] !== 'string') {
- markStaticNode(tree[i], (key + "_" + i), isOnce);
- }
- }
- } else {
- markStaticNode(tree, key, isOnce);
- }
- }
- function markStaticNode (node, key, isOnce) {
- node.isStatic = true;
- node.key = key;
- node.isOnce = isOnce;
- }
- /* */
- function bindObjectListeners (data, value) {
- if (value) {
- if (!isPlainObject(value)) {
- true && warn(
- 'v-on without argument expects an Object value',
- this
- );
- } else {
- var on = data.on = data.on ? extend({}, data.on) : {};
- for (var key in value) {
- var existing = on[key];
- var ours = value[key];
- on[key] = existing ? [].concat(existing, ours) : ours;
- }
- }
- }
- return data
- }
- /* */
- function resolveScopedSlots (
- fns, // see flow/vnode
- res,
- // the following are added in 2.6
- hasDynamicKeys,
- contentHashKey
- ) {
- res = res || { $stable: !hasDynamicKeys };
- for (var i = 0; i < fns.length; i++) {
- var slot = fns[i];
- if (Array.isArray(slot)) {
- resolveScopedSlots(slot, res, hasDynamicKeys);
- } else if (slot) {
- // marker for reverse proxying v-slot without scope on this.$slots
- if (slot.proxy) {
- slot.fn.proxy = true;
- }
- res[slot.key] = slot.fn;
- }
- }
- if (contentHashKey) {
- (res).$key = contentHashKey;
- }
- return res
- }
- /* */
- function bindDynamicKeys (baseObj, values) {
- for (var i = 0; i < values.length; i += 2) {
- var key = values[i];
- if (typeof key === 'string' && key) {
- baseObj[values[i]] = values[i + 1];
- } else if ( true && key !== '' && key !== null) {
- // null is a special value for explicitly removing a binding
- warn(
- ("Invalid value for dynamic directive argument (expected string or null): " + key),
- this
- );
- }
- }
- return baseObj
- }
- // helper to dynamically append modifier runtime markers to event names.
- // ensure only append when value is already string, otherwise it will be cast
- // to string and cause the type check to miss.
- function prependModifier (value, symbol) {
- return typeof value === 'string' ? symbol + value : value
- }
- /* */
- function installRenderHelpers (target) {
- target._o = markOnce;
- target._n = toNumber;
- target._s = toString;
- target._l = renderList;
- target._t = renderSlot;
- target._q = looseEqual;
- target._i = looseIndexOf;
- target._m = renderStatic;
- target._f = resolveFilter;
- target._k = checkKeyCodes;
- target._b = bindObjectProps;
- target._v = createTextVNode;
- target._e = createEmptyVNode;
- target._u = resolveScopedSlots;
- target._g = bindObjectListeners;
- target._d = bindDynamicKeys;
- target._p = prependModifier;
- }
- /* */
- function FunctionalRenderContext (
- data,
- props,
- children,
- parent,
- Ctor
- ) {
- var this$1 = this;
- var options = Ctor.options;
- // ensure the createElement function in functional components
- // gets a unique context - this is necessary for correct named slot check
- var contextVm;
- if (hasOwn(parent, '_uid')) {
- contextVm = Object.create(parent);
- // $flow-disable-line
- contextVm._original = parent;
- } else {
- // the context vm passed in is a functional context as well.
- // in this case we want to make sure we are able to get a hold to the
- // real context instance.
- contextVm = parent;
- // $flow-disable-line
- parent = parent._original;
- }
- var isCompiled = isTrue(options._compiled);
- var needNormalization = !isCompiled;
- this.data = data;
- this.props = props;
- this.children = children;
- this.parent = parent;
- this.listeners = data.on || emptyObject;
- this.injections = resolveInject(options.inject, parent);
- this.slots = function () {
- if (!this$1.$slots) {
- normalizeScopedSlots(
- data.scopedSlots,
- this$1.$slots = resolveSlots(children, parent)
- );
- }
- return this$1.$slots
- };
- Object.defineProperty(this, 'scopedSlots', ({
- enumerable: true,
- get: function get () {
- return normalizeScopedSlots(data.scopedSlots, this.slots())
- }
- }));
- // support for compiled functional template
- if (isCompiled) {
- // exposing $options for renderStatic()
- this.$options = options;
- // pre-resolve slots for renderSlot()
- this.$slots = this.slots();
- this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);
- }
- if (options._scopeId) {
- this._c = function (a, b, c, d) {
- var vnode = createElement(contextVm, a, b, c, d, needNormalization);
- if (vnode && !Array.isArray(vnode)) {
- vnode.fnScopeId = options._scopeId;
- vnode.fnContext = parent;
- }
- return vnode
- };
- } else {
- this._c = function (a, b, c, d) { return createElement(contextVm, a, b, c, d, needNormalization); };
- }
- }
- installRenderHelpers(FunctionalRenderContext.prototype);
- function createFunctionalComponent (
- Ctor,
- propsData,
- data,
- contextVm,
- children
- ) {
- var options = Ctor.options;
- var props = {};
- var propOptions = options.props;
- if (isDef(propOptions)) {
- for (var key in propOptions) {
- props[key] = validateProp(key, propOptions, propsData || emptyObject);
- }
- } else {
- if (isDef(data.attrs)) { mergeProps(props, data.attrs); }
- if (isDef(data.props)) { mergeProps(props, data.props); }
- }
- var renderContext = new FunctionalRenderContext(
- data,
- props,
- children,
- contextVm,
- Ctor
- );
- var vnode = options.render.call(null, renderContext._c, renderContext);
- if (vnode instanceof VNode) {
- return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext)
- } else if (Array.isArray(vnode)) {
- var vnodes = normalizeChildren(vnode) || [];
- var res = new Array(vnodes.length);
- for (var i = 0; i < vnodes.length; i++) {
- res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
- }
- return res
- }
- }
- function cloneAndMarkFunctionalResult (vnode, data, contextVm, options, renderContext) {
- // #7817 clone node before setting fnContext, otherwise if the node is reused
- // (e.g. it was from a cached normal slot) the fnContext causes named slots
- // that should not be matched to match.
- var clone = cloneVNode(vnode);
- clone.fnContext = contextVm;
- clone.fnOptions = options;
- if (true) {
- (clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;
- }
- if (data.slot) {
- (clone.data || (clone.data = {})).slot = data.slot;
- }
- return clone
- }
- function mergeProps (to, from) {
- for (var key in from) {
- to[camelize(key)] = from[key];
- }
- }
- /* */
- /* */
- /* */
- /* */
- // inline hooks to be invoked on component VNodes during patch
- var componentVNodeHooks = {
- init: function init (vnode, hydrating) {
- if (
- vnode.componentInstance &&
- !vnode.componentInstance._isDestroyed &&
- vnode.data.keepAlive
- ) {
- // kept-alive components, treat as a patch
- var mountedNode = vnode; // work around flow
- componentVNodeHooks.prepatch(mountedNode, mountedNode);
- } else {
- var child = vnode.componentInstance = createComponentInstanceForVnode(
- vnode,
- activeInstance
- );
- child.$mount(hydrating ? vnode.elm : undefined, hydrating);
- }
- },
- prepatch: function prepatch (oldVnode, vnode) {
- var options = vnode.componentOptions;
- var child = vnode.componentInstance = oldVnode.componentInstance;
- updateChildComponent(
- child,
- options.propsData, // updated props
- options.listeners, // updated listeners
- vnode, // new parent vnode
- options.children // new children
- );
- },
- insert: function insert (vnode) {
- var context = vnode.context;
- var componentInstance = vnode.componentInstance;
- if (!componentInstance._isMounted) {
- callHook(componentInstance, 'onServiceCreated');
- callHook(componentInstance, 'onServiceAttached');
- componentInstance._isMounted = true;
- callHook(componentInstance, 'mounted');
- }
- if (vnode.data.keepAlive) {
- if (context._isMounted) {
- // vue-router#1212
- // During updates, a kept-alive component's child components may
- // change, so directly walking the tree here may call activated hooks
- // on incorrect children. Instead we push them into a queue which will
- // be processed after the whole patch process ended.
- queueActivatedComponent(componentInstance);
- } else {
- activateChildComponent(componentInstance, true /* direct */);
- }
- }
- },
- destroy: function destroy (vnode) {
- var componentInstance = vnode.componentInstance;
- if (!componentInstance._isDestroyed) {
- if (!vnode.data.keepAlive) {
- componentInstance.$destroy();
- } else {
- deactivateChildComponent(componentInstance, true /* direct */);
- }
- }
- }
- };
- var hooksToMerge = Object.keys(componentVNodeHooks);
- function createComponent (
- Ctor,
- data,
- context,
- children,
- tag
- ) {
- if (isUndef(Ctor)) {
- return
- }
- var baseCtor = context.$options._base;
- // plain options object: turn it into a constructor
- if (isObject(Ctor)) {
- Ctor = baseCtor.extend(Ctor);
- }
- // if at this stage it's not a constructor or an async component factory,
- // reject.
- if (typeof Ctor !== 'function') {
- if (true) {
- warn(("Invalid Component definition: " + (String(Ctor))), context);
- }
- return
- }
- // async component
- var asyncFactory;
- if (isUndef(Ctor.cid)) {
- asyncFactory = Ctor;
- Ctor = resolveAsyncComponent(asyncFactory, baseCtor);
- if (Ctor === undefined) {
- // return a placeholder node for async component, which is rendered
- // as a comment node but preserves all the raw information for the node.
- // the information will be used for async server-rendering and hydration.
- return createAsyncPlaceholder(
- asyncFactory,
- data,
- context,
- children,
- tag
- )
- }
- }
- data = data || {};
- // resolve constructor options in case global mixins are applied after
- // component constructor creation
- resolveConstructorOptions(Ctor);
- // transform component v-model data into props & events
- if (isDef(data.model)) {
- transformModel(Ctor.options, data);
- }
- // extract props
- var propsData = extractPropsFromVNodeData(data, Ctor, tag, context); // fixed by xxxxxx
- // functional component
- if (isTrue(Ctor.options.functional)) {
- return createFunctionalComponent(Ctor, propsData, data, context, children)
- }
- // extract listeners, since these needs to be treated as
- // child component listeners instead of DOM listeners
- var listeners = data.on;
- // replace with listeners with .native modifier
- // so it gets processed during parent component patch.
- data.on = data.nativeOn;
- if (isTrue(Ctor.options.abstract)) {
- // abstract components do not keep anything
- // other than props & listeners & slot
- // work around flow
- var slot = data.slot;
- data = {};
- if (slot) {
- data.slot = slot;
- }
- }
- // install component management hooks onto the placeholder node
- installComponentHooks(data);
- // return a placeholder vnode
- var name = Ctor.options.name || tag;
- var vnode = new VNode(
- ("vue-component-" + (Ctor.cid) + (name ? ("-" + name) : '')),
- data, undefined, undefined, undefined, context,
- { Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children },
- asyncFactory
- );
- return vnode
- }
- function createComponentInstanceForVnode (
- vnode, // we know it's MountedComponentVNode but flow doesn't
- parent // activeInstance in lifecycle state
- ) {
- var options = {
- _isComponent: true,
- _parentVnode: vnode,
- parent: parent
- };
- // check inline-template render functions
- var inlineTemplate = vnode.data.inlineTemplate;
- if (isDef(inlineTemplate)) {
- options.render = inlineTemplate.render;
- options.staticRenderFns = inlineTemplate.staticRenderFns;
- }
- return new vnode.componentOptions.Ctor(options)
- }
- function installComponentHooks (data) {
- var hooks = data.hook || (data.hook = {});
- for (var i = 0; i < hooksToMerge.length; i++) {
- var key = hooksToMerge[i];
- var existing = hooks[key];
- var toMerge = componentVNodeHooks[key];
- if (existing !== toMerge && !(existing && existing._merged)) {
- hooks[key] = existing ? mergeHook$1(toMerge, existing) : toMerge;
- }
- }
- }
- function mergeHook$1 (f1, f2) {
- var merged = function (a, b) {
- // flow complains about extra args which is why we use any
- f1(a, b);
- f2(a, b);
- };
- merged._merged = true;
- return merged
- }
- // transform component v-model info (value and callback) into
- // prop and event handler respectively.
- function transformModel (options, data) {
- var prop = (options.model && options.model.prop) || 'value';
- var event = (options.model && options.model.event) || 'input'
- ;(data.attrs || (data.attrs = {}))[prop] = data.model.value;
- var on = data.on || (data.on = {});
- var existing = on[event];
- var callback = data.model.callback;
- if (isDef(existing)) {
- if (
- Array.isArray(existing)
- ? existing.indexOf(callback) === -1
- : existing !== callback
- ) {
- on[event] = [callback].concat(existing);
- }
- } else {
- on[event] = callback;
- }
- }
- /* */
- var SIMPLE_NORMALIZE = 1;
- var ALWAYS_NORMALIZE = 2;
- // wrapper function for providing a more flexible interface
- // without getting yelled at by flow
- function createElement (
- context,
- tag,
- data,
- children,
- normalizationType,
- alwaysNormalize
- ) {
- if (Array.isArray(data) || isPrimitive(data)) {
- normalizationType = children;
- children = data;
- data = undefined;
- }
- if (isTrue(alwaysNormalize)) {
- normalizationType = ALWAYS_NORMALIZE;
- }
- return _createElement(context, tag, data, children, normalizationType)
- }
- function _createElement (
- context,
- tag,
- data,
- children,
- normalizationType
- ) {
- if (isDef(data) && isDef((data).__ob__)) {
- true && warn(
- "Avoid using observed data object as vnode data: " + (JSON.stringify(data)) + "\n" +
- 'Always create fresh vnode data objects in each render!',
- context
- );
- return createEmptyVNode()
- }
- // object syntax in v-bind
- if (isDef(data) && isDef(data.is)) {
- tag = data.is;
- }
- if (!tag) {
- // in case of component :is set to falsy value
- return createEmptyVNode()
- }
- // warn against non-primitive key
- if ( true &&
- isDef(data) && isDef(data.key) && !isPrimitive(data.key)
- ) {
- {
- warn(
- 'Avoid using non-primitive value as key, ' +
- 'use string/number value instead.',
- context
- );
- }
- }
- // support single function children as default scoped slot
- if (Array.isArray(children) &&
- typeof children[0] === 'function'
- ) {
- data = data || {};
- data.scopedSlots = { default: children[0] };
- children.length = 0;
- }
- if (normalizationType === ALWAYS_NORMALIZE) {
- children = normalizeChildren(children);
- } else if (normalizationType === SIMPLE_NORMALIZE) {
- children = simpleNormalizeChildren(children);
- }
- var vnode, ns;
- if (typeof tag === 'string') {
- var Ctor;
- ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
- if (config.isReservedTag(tag)) {
- // platform built-in elements
- if ( true && isDef(data) && isDef(data.nativeOn)) {
- warn(
- ("The .native modifier for v-on is only valid on components but it was used on <" + tag + ">."),
- context
- );
- }
- vnode = new VNode(
- config.parsePlatformTagName(tag), data, children,
- undefined, undefined, context
- );
- } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) {
- // component
- vnode = createComponent(Ctor, data, context, children, tag);
- } else {
- // unknown or unlisted namespaced elements
- // check at runtime because it may get assigned a namespace when its
- // parent normalizes children
- vnode = new VNode(
- tag, data, children,
- undefined, undefined, context
- );
- }
- } else {
- // direct component options / constructor
- vnode = createComponent(tag, data, context, children);
- }
- if (Array.isArray(vnode)) {
- return vnode
- } else if (isDef(vnode)) {
- if (isDef(ns)) { applyNS(vnode, ns); }
- if (isDef(data)) { registerDeepBindings(data); }
- return vnode
- } else {
- return createEmptyVNode()
- }
- }
- function applyNS (vnode, ns, force) {
- vnode.ns = ns;
- if (vnode.tag === 'foreignObject') {
- // use default namespace inside foreignObject
- ns = undefined;
- force = true;
- }
- if (isDef(vnode.children)) {
- for (var i = 0, l = vnode.children.length; i < l; i++) {
- var child = vnode.children[i];
- if (isDef(child.tag) && (
- isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
- applyNS(child, ns, force);
- }
- }
- }
- }
- // ref #5318
- // necessary to ensure parent re-render when deep bindings like :style and
- // :class are used on slot nodes
- function registerDeepBindings (data) {
- if (isObject(data.style)) {
- traverse(data.style);
- }
- if (isObject(data.class)) {
- traverse(data.class);
- }
- }
- /* */
- function initRender (vm) {
- vm._vnode = null; // the root of the child tree
- vm._staticTrees = null; // v-once cached trees
- var options = vm.$options;
- var parentVnode = vm.$vnode = options._parentVnode; // the placeholder node in parent tree
- var renderContext = parentVnode && parentVnode.context;
- vm.$slots = resolveSlots(options._renderChildren, renderContext);
- vm.$scopedSlots = emptyObject;
- // bind the createElement fn to this instance
- // so that we get proper render context inside it.
- // args order: tag, data, children, normalizationType, alwaysNormalize
- // internal version is used by render functions compiled from templates
- vm._c = function (a, b, c, d) { return createElement(vm, a, b, c, d, false); };
- // normalization is always applied for the public version, used in
- // user-written render functions.
- vm.$createElement = function (a, b, c, d) { return createElement(vm, a, b, c, d, true); };
- // $attrs & $listeners are exposed for easier HOC creation.
- // they need to be reactive so that HOCs using them are always updated
- var parentData = parentVnode && parentVnode.data;
- /* istanbul ignore else */
- if (true) {
- defineReactive$$1(vm, '$attrs', parentData && parentData.attrs || emptyObject, function () {
- !isUpdatingChildComponent && warn("$attrs is readonly.", vm);
- }, true);
- defineReactive$$1(vm, '$listeners', options._parentListeners || emptyObject, function () {
- !isUpdatingChildComponent && warn("$listeners is readonly.", vm);
- }, true);
- } else {}
- }
- var currentRenderingInstance = null;
- function renderMixin (Vue) {
- // install runtime convenience helpers
- installRenderHelpers(Vue.prototype);
- Vue.prototype.$nextTick = function (fn) {
- return nextTick(fn, this)
- };
- Vue.prototype._render = function () {
- var vm = this;
- var ref = vm.$options;
- var render = ref.render;
- var _parentVnode = ref._parentVnode;
- if (_parentVnode) {
- vm.$scopedSlots = normalizeScopedSlots(
- _parentVnode.data.scopedSlots,
- vm.$slots,
- vm.$scopedSlots
- );
- }
- // set parent vnode. this allows render functions to have access
- // to the data on the placeholder node.
- vm.$vnode = _parentVnode;
- // render self
- var vnode;
- try {
- // There's no need to maintain a stack because all render fns are called
- // separately from one another. Nested component's render fns are called
- // when parent component is patched.
- currentRenderingInstance = vm;
- vnode = render.call(vm._renderProxy, vm.$createElement);
- } catch (e) {
- handleError(e, vm, "render");
- // return error render result,
- // or previous vnode to prevent render error causing blank component
- /* istanbul ignore else */
- if ( true && vm.$options.renderError) {
- try {
- vnode = vm.$options.renderError.call(vm._renderProxy, vm.$createElement, e);
- } catch (e) {
- handleError(e, vm, "renderError");
- vnode = vm._vnode;
- }
- } else {
- vnode = vm._vnode;
- }
- } finally {
- currentRenderingInstance = null;
- }
- // if the returned array contains only a single node, allow it
- if (Array.isArray(vnode) && vnode.length === 1) {
- vnode = vnode[0];
- }
- // return empty vnode in case the render function errored out
- if (!(vnode instanceof VNode)) {
- if ( true && Array.isArray(vnode)) {
- warn(
- 'Multiple root nodes returned from render function. Render function ' +
- 'should return a single root node.',
- vm
- );
- }
- vnode = createEmptyVNode();
- }
- // set parent
- vnode.parent = _parentVnode;
- return vnode
- };
- }
- /* */
- function ensureCtor (comp, base) {
- if (
- comp.__esModule ||
- (hasSymbol && comp[Symbol.toStringTag] === 'Module')
- ) {
- comp = comp.default;
- }
- return isObject(comp)
- ? base.extend(comp)
- : comp
- }
- function createAsyncPlaceholder (
- factory,
- data,
- context,
- children,
- tag
- ) {
- var node = createEmptyVNode();
- node.asyncFactory = factory;
- node.asyncMeta = { data: data, context: context, children: children, tag: tag };
- return node
- }
- function resolveAsyncComponent (
- factory,
- baseCtor
- ) {
- if (isTrue(factory.error) && isDef(factory.errorComp)) {
- return factory.errorComp
- }
- if (isDef(factory.resolved)) {
- return factory.resolved
- }
- var owner = currentRenderingInstance;
- if (owner && isDef(factory.owners) && factory.owners.indexOf(owner) === -1) {
- // already pending
- factory.owners.push(owner);
- }
- if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
- return factory.loadingComp
- }
- if (owner && !isDef(factory.owners)) {
- var owners = factory.owners = [owner];
- var sync = true;
- var timerLoading = null;
- var timerTimeout = null
- ;(owner).$on('hook:destroyed', function () { return remove(owners, owner); });
- var forceRender = function (renderCompleted) {
- for (var i = 0, l = owners.length; i < l; i++) {
- (owners[i]).$forceUpdate();
- }
- if (renderCompleted) {
- owners.length = 0;
- if (timerLoading !== null) {
- clearTimeout(timerLoading);
- timerLoading = null;
- }
- if (timerTimeout !== null) {
- clearTimeout(timerTimeout);
- timerTimeout = null;
- }
- }
- };
- var resolve = once(function (res) {
- // cache resolved
- factory.resolved = ensureCtor(res, baseCtor);
- // invoke callbacks only if this is not a synchronous resolve
- // (async resolves are shimmed as synchronous during SSR)
- if (!sync) {
- forceRender(true);
- } else {
- owners.length = 0;
- }
- });
- var reject = once(function (reason) {
- true && warn(
- "Failed to resolve async component: " + (String(factory)) +
- (reason ? ("\nReason: " + reason) : '')
- );
- if (isDef(factory.errorComp)) {
- factory.error = true;
- forceRender(true);
- }
- });
- var res = factory(resolve, reject);
- if (isObject(res)) {
- if (isPromise(res)) {
- // () => Promise
- if (isUndef(factory.resolved)) {
- res.then(resolve, reject);
- }
- } else if (isPromise(res.component)) {
- res.component.then(resolve, reject);
- if (isDef(res.error)) {
- factory.errorComp = ensureCtor(res.error, baseCtor);
- }
- if (isDef(res.loading)) {
- factory.loadingComp = ensureCtor(res.loading, baseCtor);
- if (res.delay === 0) {
- factory.loading = true;
- } else {
- timerLoading = setTimeout(function () {
- timerLoading = null;
- if (isUndef(factory.resolved) && isUndef(factory.error)) {
- factory.loading = true;
- forceRender(false);
- }
- }, res.delay || 200);
- }
- }
- if (isDef(res.timeout)) {
- timerTimeout = setTimeout(function () {
- timerTimeout = null;
- if (isUndef(factory.resolved)) {
- reject(
- true
- ? ("timeout (" + (res.timeout) + "ms)")
- : undefined
- );
- }
- }, res.timeout);
- }
- }
- }
- sync = false;
- // return in case resolved synchronously
- return factory.loading
- ? factory.loadingComp
- : factory.resolved
- }
- }
- /* */
- function isAsyncPlaceholder (node) {
- return node.isComment && node.asyncFactory
- }
- /* */
- function getFirstComponentChild (children) {
- if (Array.isArray(children)) {
- for (var i = 0; i < children.length; i++) {
- var c = children[i];
- if (isDef(c) && (isDef(c.componentOptions) || isAsyncPlaceholder(c))) {
- return c
- }
- }
- }
- }
- /* */
- /* */
- function initEvents (vm) {
- vm._events = Object.create(null);
- vm._hasHookEvent = false;
- // init parent attached events
- var listeners = vm.$options._parentListeners;
- if (listeners) {
- updateComponentListeners(vm, listeners);
- }
- }
- var target;
- function add (event, fn) {
- target.$on(event, fn);
- }
- function remove$1 (event, fn) {
- target.$off(event, fn);
- }
- function createOnceHandler (event, fn) {
- var _target = target;
- return function onceHandler () {
- var res = fn.apply(null, arguments);
- if (res !== null) {
- _target.$off(event, onceHandler);
- }
- }
- }
- function updateComponentListeners (
- vm,
- listeners,
- oldListeners
- ) {
- target = vm;
- updateListeners(listeners, oldListeners || {}, add, remove$1, createOnceHandler, vm);
- target = undefined;
- }
- function eventsMixin (Vue) {
- var hookRE = /^hook:/;
- Vue.prototype.$on = function (event, fn) {
- var vm = this;
- if (Array.isArray(event)) {
- for (var i = 0, l = event.length; i < l; i++) {
- vm.$on(event[i], fn);
- }
- } else {
- (vm._events[event] || (vm._events[event] = [])).push(fn);
- // optimize hook:event cost by using a boolean flag marked at registration
- // instead of a hash lookup
- if (hookRE.test(event)) {
- vm._hasHookEvent = true;
- }
- }
- return vm
- };
- Vue.prototype.$once = function (event, fn) {
- var vm = this;
- function on () {
- vm.$off(event, on);
- fn.apply(vm, arguments);
- }
- on.fn = fn;
- vm.$on(event, on);
- return vm
- };
- Vue.prototype.$off = function (event, fn) {
- var vm = this;
- // all
- if (!arguments.length) {
- vm._events = Object.create(null);
- return vm
- }
- // array of events
- if (Array.isArray(event)) {
- for (var i$1 = 0, l = event.length; i$1 < l; i$1++) {
- vm.$off(event[i$1], fn);
- }
- return vm
- }
- // specific event
- var cbs = vm._events[event];
- if (!cbs) {
- return vm
- }
- if (!fn) {
- vm._events[event] = null;
- return vm
- }
- // specific handler
- var cb;
- var i = cbs.length;
- while (i--) {
- cb = cbs[i];
- if (cb === fn || cb.fn === fn) {
- cbs.splice(i, 1);
- break
- }
- }
- return vm
- };
- Vue.prototype.$emit = function (event) {
- var vm = this;
- if (true) {
- var lowerCaseEvent = event.toLowerCase();
- if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
- tip(
- "Event \"" + lowerCaseEvent + "\" is emitted in component " +
- (formatComponentName(vm)) + " but the handler is registered for \"" + event + "\". " +
- "Note that HTML attributes are case-insensitive and you cannot use " +
- "v-on to listen to camelCase events when using in-DOM templates. " +
- "You should probably use \"" + (hyphenate(event)) + "\" instead of \"" + event + "\"."
- );
- }
- }
- var cbs = vm._events[event];
- if (cbs) {
- cbs = cbs.length > 1 ? toArray(cbs) : cbs;
- var args = toArray(arguments, 1);
- var info = "event handler for \"" + event + "\"";
- for (var i = 0, l = cbs.length; i < l; i++) {
- invokeWithErrorHandling(cbs[i], vm, args, vm, info);
- }
- }
- return vm
- };
- }
- /* */
- var activeInstance = null;
- var isUpdatingChildComponent = false;
- function setActiveInstance(vm) {
- var prevActiveInstance = activeInstance;
- activeInstance = vm;
- return function () {
- activeInstance = prevActiveInstance;
- }
- }
- function initLifecycle (vm) {
- var options = vm.$options;
- // locate first non-abstract parent
- var parent = options.parent;
- if (parent && !options.abstract) {
- while (parent.$options.abstract && parent.$parent) {
- parent = parent.$parent;
- }
- parent.$children.push(vm);
- }
- vm.$parent = parent;
- vm.$root = parent ? parent.$root : vm;
- vm.$children = [];
- vm.$refs = {};
- vm._watcher = null;
- vm._inactive = null;
- vm._directInactive = false;
- vm._isMounted = false;
- vm._isDestroyed = false;
- vm._isBeingDestroyed = false;
- }
- function lifecycleMixin (Vue) {
- Vue.prototype._update = function (vnode, hydrating) {
- var vm = this;
- var prevEl = vm.$el;
- var prevVnode = vm._vnode;
- var restoreActiveInstance = setActiveInstance(vm);
- vm._vnode = vnode;
- // Vue.prototype.__patch__ is injected in entry points
- // based on the rendering backend used.
- if (!prevVnode) {
- // initial render
- vm.$el = vm.__patch__(vm.$el, vnode, hydrating, false /* removeOnly */);
- } else {
- // updates
- vm.$el = vm.__patch__(prevVnode, vnode);
- }
- restoreActiveInstance();
- // update __vue__ reference
- if (prevEl) {
- prevEl.__vue__ = null;
- }
- if (vm.$el) {
- vm.$el.__vue__ = vm;
- }
- // if parent is an HOC, update its $el as well
- if (vm.$vnode && vm.$parent && vm.$vnode === vm.$parent._vnode) {
- vm.$parent.$el = vm.$el;
- }
- // updated hook is called by the scheduler to ensure that children are
- // updated in a parent's updated hook.
- };
- Vue.prototype.$forceUpdate = function () {
- var vm = this;
- if (vm._watcher) {
- vm._watcher.update();
- }
- };
- Vue.prototype.$destroy = function () {
- var vm = this;
- if (vm._isBeingDestroyed) {
- return
- }
- callHook(vm, 'beforeDestroy');
- vm._isBeingDestroyed = true;
- // remove self from parent
- var parent = vm.$parent;
- if (parent && !parent._isBeingDestroyed && !vm.$options.abstract) {
- remove(parent.$children, vm);
- }
- // teardown watchers
- if (vm._watcher) {
- vm._watcher.teardown();
- }
- var i = vm._watchers.length;
- while (i--) {
- vm._watchers[i].teardown();
- }
- // remove reference from data ob
- // frozen object may not have observer.
- if (vm._data.__ob__) {
- vm._data.__ob__.vmCount--;
- }
- // call the last hook...
- vm._isDestroyed = true;
- // invoke destroy hooks on current rendered tree
- vm.__patch__(vm._vnode, null);
- // fire destroyed hook
- callHook(vm, 'destroyed');
- // turn off all instance listeners.
- vm.$off();
- // remove __vue__ reference
- if (vm.$el) {
- vm.$el.__vue__ = null;
- }
- // release circular reference (#6759)
- if (vm.$vnode) {
- vm.$vnode.parent = null;
- }
- };
- }
- function updateChildComponent (
- vm,
- propsData,
- listeners,
- parentVnode,
- renderChildren
- ) {
- if (true) {
- isUpdatingChildComponent = true;
- }
- // determine whether component has slot children
- // we need to do this before overwriting $options._renderChildren.
- // check if there are dynamic scopedSlots (hand-written or compiled but with
- // dynamic slot names). Static scoped slots compiled from template has the
- // "$stable" marker.
- var newScopedSlots = parentVnode.data.scopedSlots;
- var oldScopedSlots = vm.$scopedSlots;
- var hasDynamicScopedSlot = !!(
- (newScopedSlots && !newScopedSlots.$stable) ||
- (oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
- (newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key)
- );
- // Any static slot children from the parent may have changed during parent's
- // update. Dynamic scoped slots may also have changed. In such cases, a forced
- // update is necessary to ensure correctness.
- var needsForceUpdate = !!(
- renderChildren || // has new static slots
- vm.$options._renderChildren || // has old static slots
- hasDynamicScopedSlot
- );
- vm.$options._parentVnode = parentVnode;
- vm.$vnode = parentVnode; // update vm's placeholder node without re-render
- if (vm._vnode) { // update child tree's parent
- vm._vnode.parent = parentVnode;
- }
- vm.$options._renderChildren = renderChildren;
- // update $attrs and $listeners hash
- // these are also reactive so they may trigger child update if the child
- // used them during render
- vm.$attrs = parentVnode.data.attrs || emptyObject;
- vm.$listeners = listeners || emptyObject;
- // update props
- if (propsData && vm.$options.props) {
- toggleObserving(false);
- var props = vm._props;
- var propKeys = vm.$options._propKeys || [];
- for (var i = 0; i < propKeys.length; i++) {
- var key = propKeys[i];
- var propOptions = vm.$options.props; // wtf flow?
- props[key] = validateProp(key, propOptions, propsData, vm);
- }
- toggleObserving(true);
- // keep a copy of raw propsData
- vm.$options.propsData = propsData;
- }
-
- // fixed by xxxxxx update properties(mp runtime)
- vm._$updateProperties && vm._$updateProperties(vm);
-
- // update listeners
- listeners = listeners || emptyObject;
- var oldListeners = vm.$options._parentListeners;
- vm.$options._parentListeners = listeners;
- updateComponentListeners(vm, listeners, oldListeners);
- // resolve slots + force update if has children
- if (needsForceUpdate) {
- vm.$slots = resolveSlots(renderChildren, parentVnode.context);
- vm.$forceUpdate();
- }
- if (true) {
- isUpdatingChildComponent = false;
- }
- }
- function isInInactiveTree (vm) {
- while (vm && (vm = vm.$parent)) {
- if (vm._inactive) { return true }
- }
- return false
- }
- function activateChildComponent (vm, direct) {
- if (direct) {
- vm._directInactive = false;
- if (isInInactiveTree(vm)) {
- return
- }
- } else if (vm._directInactive) {
- return
- }
- if (vm._inactive || vm._inactive === null) {
- vm._inactive = false;
- for (var i = 0; i < vm.$children.length; i++) {
- activateChildComponent(vm.$children[i]);
- }
- callHook(vm, 'activated');
- }
- }
- function deactivateChildComponent (vm, direct) {
- if (direct) {
- vm._directInactive = true;
- if (isInInactiveTree(vm)) {
- return
- }
- }
- if (!vm._inactive) {
- vm._inactive = true;
- for (var i = 0; i < vm.$children.length; i++) {
- deactivateChildComponent(vm.$children[i]);
- }
- callHook(vm, 'deactivated');
- }
- }
- function callHook (vm, hook) {
- // #7573 disable dep collection when invoking lifecycle hooks
- pushTarget();
- var handlers = vm.$options[hook];
- var info = hook + " hook";
- if (handlers) {
- for (var i = 0, j = handlers.length; i < j; i++) {
- invokeWithErrorHandling(handlers[i], vm, null, vm, info);
- }
- }
- if (vm._hasHookEvent) {
- vm.$emit('hook:' + hook);
- }
- popTarget();
- }
- /* */
- var MAX_UPDATE_COUNT = 100;
- var queue = [];
- var activatedChildren = [];
- var has = {};
- var circular = {};
- var waiting = false;
- var flushing = false;
- var index = 0;
- /**
- * Reset the scheduler's state.
- */
- function resetSchedulerState () {
- index = queue.length = activatedChildren.length = 0;
- has = {};
- if (true) {
- circular = {};
- }
- waiting = flushing = false;
- }
- // Async edge case #6566 requires saving the timestamp when event listeners are
- // attached. However, calling performance.now() has a perf overhead especially
- // if the page has thousands of event listeners. Instead, we take a timestamp
- // every time the scheduler flushes and use that for all event listeners
- // attached during that flush.
- var currentFlushTimestamp = 0;
- // Async edge case fix requires storing an event listener's attach timestamp.
- var getNow = Date.now;
- // Determine what event timestamp the browser is using. Annoyingly, the
- // timestamp can either be hi-res (relative to page load) or low-res
- // (relative to UNIX epoch), so in order to compare time we have to use the
- // same timestamp type when saving the flush timestamp.
- // All IE versions use low-res event timestamps, and have problematic clock
- // implementations (#9632)
- if (inBrowser && !isIE) {
- var performance = window.performance;
- if (
- performance &&
- typeof performance.now === 'function' &&
- getNow() > document.createEvent('Event').timeStamp
- ) {
- // if the event timestamp, although evaluated AFTER the Date.now(), is
- // smaller than it, it means the event is using a hi-res timestamp,
- // and we need to use the hi-res version for event listener timestamps as
- // well.
- getNow = function () { return performance.now(); };
- }
- }
- /**
- * Flush both queues and run the watchers.
- */
- function flushSchedulerQueue () {
- currentFlushTimestamp = getNow();
- flushing = true;
- var watcher, id;
- // Sort queue before flush.
- // This ensures that:
- // 1. Components are updated from parent to child. (because parent is always
- // created before the child)
- // 2. A component's user watchers are run before its render watcher (because
- // user watchers are created before the render watcher)
- // 3. If a component is destroyed during a parent component's watcher run,
- // its watchers can be skipped.
- queue.sort(function (a, b) { return a.id - b.id; });
- // do not cache length because more watchers might be pushed
- // as we run existing watchers
- for (index = 0; index < queue.length; index++) {
- watcher = queue[index];
- if (watcher.before) {
- watcher.before();
- }
- id = watcher.id;
- has[id] = null;
- watcher.run();
- // in dev build, check and stop circular updates.
- if ( true && has[id] != null) {
- circular[id] = (circular[id] || 0) + 1;
- if (circular[id] > MAX_UPDATE_COUNT) {
- warn(
- 'You may have an infinite update loop ' + (
- watcher.user
- ? ("in watcher with expression \"" + (watcher.expression) + "\"")
- : "in a component render function."
- ),
- watcher.vm
- );
- break
- }
- }
- }
- // keep copies of post queues before resetting state
- var activatedQueue = activatedChildren.slice();
- var updatedQueue = queue.slice();
- resetSchedulerState();
- // call component updated and activated hooks
- callActivatedHooks(activatedQueue);
- callUpdatedHooks(updatedQueue);
- // devtool hook
- /* istanbul ignore if */
- if (devtools && config.devtools) {
- devtools.emit('flush');
- }
- }
- function callUpdatedHooks (queue) {
- var i = queue.length;
- while (i--) {
- var watcher = queue[i];
- var vm = watcher.vm;
- if (vm._watcher === watcher && vm._isMounted && !vm._isDestroyed) {
- callHook(vm, 'updated');
- }
- }
- }
- /**
- * Queue a kept-alive component that was activated during patch.
- * The queue will be processed after the entire tree has been patched.
- */
- function queueActivatedComponent (vm) {
- // setting _inactive to false here so that a render function can
- // rely on checking whether it's in an inactive tree (e.g. router-view)
- vm._inactive = false;
- activatedChildren.push(vm);
- }
- function callActivatedHooks (queue) {
- for (var i = 0; i < queue.length; i++) {
- queue[i]._inactive = true;
- activateChildComponent(queue[i], true /* true */);
- }
- }
- /**
- * Push a watcher into the watcher queue.
- * Jobs with duplicate IDs will be skipped unless it's
- * pushed when the queue is being flushed.
- */
- function queueWatcher (watcher) {
- var id = watcher.id;
- if (has[id] == null) {
- has[id] = true;
- if (!flushing) {
- queue.push(watcher);
- } else {
- // if already flushing, splice the watcher based on its id
- // if already past its id, it will be run next immediately.
- var i = queue.length - 1;
- while (i > index && queue[i].id > watcher.id) {
- i--;
- }
- queue.splice(i + 1, 0, watcher);
- }
- // queue the flush
- if (!waiting) {
- waiting = true;
- if ( true && !config.async) {
- flushSchedulerQueue();
- return
- }
- nextTick(flushSchedulerQueue);
- }
- }
- }
- /* */
- var uid$2 = 0;
- /**
- * A watcher parses an expression, collects dependencies,
- * and fires callback when the expression value changes.
- * This is used for both the $watch() api and directives.
- */
- var Watcher = function Watcher (
- vm,
- expOrFn,
- cb,
- options,
- isRenderWatcher
- ) {
- this.vm = vm;
- if (isRenderWatcher) {
- vm._watcher = this;
- }
- vm._watchers.push(this);
- // options
- if (options) {
- this.deep = !!options.deep;
- this.user = !!options.user;
- this.lazy = !!options.lazy;
- this.sync = !!options.sync;
- this.before = options.before;
- } else {
- this.deep = this.user = this.lazy = this.sync = false;
- }
- this.cb = cb;
- this.id = ++uid$2; // uid for batching
- this.active = true;
- this.dirty = this.lazy; // for lazy watchers
- this.deps = [];
- this.newDeps = [];
- this.depIds = new _Set();
- this.newDepIds = new _Set();
- this.expression = true
- ? expOrFn.toString()
- : undefined;
- // parse expression for getter
- if (typeof expOrFn === 'function') {
- this.getter = expOrFn;
- } else {
- this.getter = parsePath(expOrFn);
- if (!this.getter) {
- this.getter = noop;
- true && warn(
- "Failed watching path: \"" + expOrFn + "\" " +
- 'Watcher only accepts simple dot-delimited paths. ' +
- 'For full control, use a function instead.',
- vm
- );
- }
- }
- this.value = this.lazy
- ? undefined
- : this.get();
- };
- /**
- * Evaluate the getter, and re-collect dependencies.
- */
- Watcher.prototype.get = function get () {
- pushTarget(this);
- var value;
- var vm = this.vm;
- try {
- value = this.getter.call(vm, vm);
- } catch (e) {
- if (this.user) {
- handleError(e, vm, ("getter for watcher \"" + (this.expression) + "\""));
- } else {
- throw e
- }
- } finally {
- // "touch" every property so they are all tracked as
- // dependencies for deep watching
- if (this.deep) {
- traverse(value);
- }
- popTarget();
- this.cleanupDeps();
- }
- return value
- };
- /**
- * Add a dependency to this directive.
- */
- Watcher.prototype.addDep = function addDep (dep) {
- var id = dep.id;
- if (!this.newDepIds.has(id)) {
- this.newDepIds.add(id);
- this.newDeps.push(dep);
- if (!this.depIds.has(id)) {
- dep.addSub(this);
- }
- }
- };
- /**
- * Clean up for dependency collection.
- */
- Watcher.prototype.cleanupDeps = function cleanupDeps () {
- var i = this.deps.length;
- while (i--) {
- var dep = this.deps[i];
- if (!this.newDepIds.has(dep.id)) {
- dep.removeSub(this);
- }
- }
- var tmp = this.depIds;
- this.depIds = this.newDepIds;
- this.newDepIds = tmp;
- this.newDepIds.clear();
- tmp = this.deps;
- this.deps = this.newDeps;
- this.newDeps = tmp;
- this.newDeps.length = 0;
- };
- /**
- * Subscriber interface.
- * Will be called when a dependency changes.
- */
- Watcher.prototype.update = function update () {
- /* istanbul ignore else */
- if (this.lazy) {
- this.dirty = true;
- } else if (this.sync) {
- this.run();
- } else {
- queueWatcher(this);
- }
- };
- /**
- * Scheduler job interface.
- * Will be called by the scheduler.
- */
- Watcher.prototype.run = function run () {
- if (this.active) {
- var value = this.get();
- if (
- value !== this.value ||
- // Deep watchers and watchers on Object/Arrays should fire even
- // when the value is the same, because the value may
- // have mutated.
- isObject(value) ||
- this.deep
- ) {
- // set new value
- var oldValue = this.value;
- this.value = value;
- if (this.user) {
- try {
- this.cb.call(this.vm, value, oldValue);
- } catch (e) {
- handleError(e, this.vm, ("callback for watcher \"" + (this.expression) + "\""));
- }
- } else {
- this.cb.call(this.vm, value, oldValue);
- }
- }
- }
- };
- /**
- * Evaluate the value of the watcher.
- * This only gets called for lazy watchers.
- */
- Watcher.prototype.evaluate = function evaluate () {
- this.value = this.get();
- this.dirty = false;
- };
- /**
- * Depend on all deps collected by this watcher.
- */
- Watcher.prototype.depend = function depend () {
- var i = this.deps.length;
- while (i--) {
- this.deps[i].depend();
- }
- };
- /**
- * Remove self from all dependencies' subscriber list.
- */
- Watcher.prototype.teardown = function teardown () {
- if (this.active) {
- // remove self from vm's watcher list
- // this is a somewhat expensive operation so we skip it
- // if the vm is being destroyed.
- if (!this.vm._isBeingDestroyed) {
- remove(this.vm._watchers, this);
- }
- var i = this.deps.length;
- while (i--) {
- this.deps[i].removeSub(this);
- }
- this.active = false;
- }
- };
- /* */
- var sharedPropertyDefinition = {
- enumerable: true,
- configurable: true,
- get: noop,
- set: noop
- };
- function proxy (target, sourceKey, key) {
- sharedPropertyDefinition.get = function proxyGetter () {
- return this[sourceKey][key]
- };
- sharedPropertyDefinition.set = function proxySetter (val) {
- this[sourceKey][key] = val;
- };
- Object.defineProperty(target, key, sharedPropertyDefinition);
- }
- function initState (vm) {
- vm._watchers = [];
- var opts = vm.$options;
- if (opts.props) { initProps(vm, opts.props); }
- if (opts.methods) { initMethods(vm, opts.methods); }
- if (opts.data) {
- initData(vm);
- } else {
- observe(vm._data = {}, true /* asRootData */);
- }
- if (opts.computed) { initComputed(vm, opts.computed); }
- if (opts.watch && opts.watch !== nativeWatch) {
- initWatch(vm, opts.watch);
- }
- }
- function initProps (vm, propsOptions) {
- var propsData = vm.$options.propsData || {};
- var props = vm._props = {};
- // cache prop keys so that future props updates can iterate using Array
- // instead of dynamic object key enumeration.
- var keys = vm.$options._propKeys = [];
- var isRoot = !vm.$parent;
- // root instance props should be converted
- if (!isRoot) {
- toggleObserving(false);
- }
- var loop = function ( key ) {
- keys.push(key);
- var value = validateProp(key, propsOptions, propsData, vm);
- /* istanbul ignore else */
- if (true) {
- var hyphenatedKey = hyphenate(key);
- if (isReservedAttribute(hyphenatedKey) ||
- config.isReservedAttr(hyphenatedKey)) {
- warn(
- ("\"" + hyphenatedKey + "\" is a reserved attribute and cannot be used as component prop."),
- vm
- );
- }
- defineReactive$$1(props, key, value, function () {
- if (!isRoot && !isUpdatingChildComponent) {
- {
- if(vm.mpHost === 'mp-baidu' || vm.mpHost === 'mp-kuaishou'){//百度、快手 observer 在 setData callback 之后触发,直接忽略该 warn
- return
- }
- //fixed by xxxxxx __next_tick_pending,uni://form-field 时不告警
- if(
- key === 'value' &&
- Array.isArray(vm.$options.behaviors) &&
- vm.$options.behaviors.indexOf('uni://form-field') !== -1
- ){
- return
- }
- if(vm._getFormData){
- return
- }
- var $parent = vm.$parent;
- while($parent){
- if($parent.__next_tick_pending){
- return
- }
- $parent = $parent.$parent;
- }
- }
- warn(
- "Avoid mutating a prop directly since the value will be " +
- "overwritten whenever the parent component re-renders. " +
- "Instead, use a data or computed property based on the prop's " +
- "value. Prop being mutated: \"" + key + "\"",
- vm
- );
- }
- });
- } else {}
- // static props are already proxied on the component's prototype
- // during Vue.extend(). We only need to proxy props defined at
- // instantiation here.
- if (!(key in vm)) {
- proxy(vm, "_props", key);
- }
- };
- for (var key in propsOptions) loop( key );
- toggleObserving(true);
- }
- function initData (vm) {
- var data = vm.$options.data;
- data = vm._data = typeof data === 'function'
- ? getData(data, vm)
- : data || {};
- if (!isPlainObject(data)) {
- data = {};
- true && warn(
- 'data functions should return an object:\n' +
- 'https://vuejs.org/v2/guide/components.html#data-Must-Be-a-Function',
- vm
- );
- }
- // proxy data on instance
- var keys = Object.keys(data);
- var props = vm.$options.props;
- var methods = vm.$options.methods;
- var i = keys.length;
- while (i--) {
- var key = keys[i];
- if (true) {
- if (methods && hasOwn(methods, key)) {
- warn(
- ("Method \"" + key + "\" has already been defined as a data property."),
- vm
- );
- }
- }
- if (props && hasOwn(props, key)) {
- true && warn(
- "The data property \"" + key + "\" is already declared as a prop. " +
- "Use prop default value instead.",
- vm
- );
- } else if (!isReserved(key)) {
- proxy(vm, "_data", key);
- }
- }
- // observe data
- observe(data, true /* asRootData */);
- }
- function getData (data, vm) {
- // #7573 disable dep collection when invoking data getters
- pushTarget();
- try {
- return data.call(vm, vm)
- } catch (e) {
- handleError(e, vm, "data()");
- return {}
- } finally {
- popTarget();
- }
- }
- var computedWatcherOptions = { lazy: true };
- function initComputed (vm, computed) {
- // $flow-disable-line
- var watchers = vm._computedWatchers = Object.create(null);
- // computed properties are just getters during SSR
- var isSSR = isServerRendering();
- for (var key in computed) {
- var userDef = computed[key];
- var getter = typeof userDef === 'function' ? userDef : userDef.get;
- if ( true && getter == null) {
- warn(
- ("Getter is missing for computed property \"" + key + "\"."),
- vm
- );
- }
- if (!isSSR) {
- // create internal watcher for the computed property.
- watchers[key] = new Watcher(
- vm,
- getter || noop,
- noop,
- computedWatcherOptions
- );
- }
- // component-defined computed properties are already defined on the
- // component prototype. We only need to define computed properties defined
- // at instantiation here.
- if (!(key in vm)) {
- defineComputed(vm, key, userDef);
- } else if (true) {
- if (key in vm.$data) {
- warn(("The computed property \"" + key + "\" is already defined in data."), vm);
- } else if (vm.$options.props && key in vm.$options.props) {
- warn(("The computed property \"" + key + "\" is already defined as a prop."), vm);
- }
- }
- }
- }
- function defineComputed (
- target,
- key,
- userDef
- ) {
- var shouldCache = !isServerRendering();
- if (typeof userDef === 'function') {
- sharedPropertyDefinition.get = shouldCache
- ? createComputedGetter(key)
- : createGetterInvoker(userDef);
- sharedPropertyDefinition.set = noop;
- } else {
- sharedPropertyDefinition.get = userDef.get
- ? shouldCache && userDef.cache !== false
- ? createComputedGetter(key)
- : createGetterInvoker(userDef.get)
- : noop;
- sharedPropertyDefinition.set = userDef.set || noop;
- }
- if ( true &&
- sharedPropertyDefinition.set === noop) {
- sharedPropertyDefinition.set = function () {
- warn(
- ("Computed property \"" + key + "\" was assigned to but it has no setter."),
- this
- );
- };
- }
- Object.defineProperty(target, key, sharedPropertyDefinition);
- }
- function createComputedGetter (key) {
- return function computedGetter () {
- var watcher = this._computedWatchers && this._computedWatchers[key];
- if (watcher) {
- if (watcher.dirty) {
- watcher.evaluate();
- }
- if (Dep.SharedObject.target) {// fixed by xxxxxx
- watcher.depend();
- }
- return watcher.value
- }
- }
- }
- function createGetterInvoker(fn) {
- return function computedGetter () {
- return fn.call(this, this)
- }
- }
- function initMethods (vm, methods) {
- var props = vm.$options.props;
- for (var key in methods) {
- if (true) {
- if (typeof methods[key] !== 'function') {
- warn(
- "Method \"" + key + "\" has type \"" + (typeof methods[key]) + "\" in the component definition. " +
- "Did you reference the function correctly?",
- vm
- );
- }
- if (props && hasOwn(props, key)) {
- warn(
- ("Method \"" + key + "\" has already been defined as a prop."),
- vm
- );
- }
- if ((key in vm) && isReserved(key)) {
- warn(
- "Method \"" + key + "\" conflicts with an existing Vue instance method. " +
- "Avoid defining component methods that start with _ or $."
- );
- }
- }
- vm[key] = typeof methods[key] !== 'function' ? noop : bind(methods[key], vm);
- }
- }
- function initWatch (vm, watch) {
- for (var key in watch) {
- var handler = watch[key];
- if (Array.isArray(handler)) {
- for (var i = 0; i < handler.length; i++) {
- createWatcher(vm, key, handler[i]);
- }
- } else {
- createWatcher(vm, key, handler);
- }
- }
- }
- function createWatcher (
- vm,
- expOrFn,
- handler,
- options
- ) {
- if (isPlainObject(handler)) {
- options = handler;
- handler = handler.handler;
- }
- if (typeof handler === 'string') {
- handler = vm[handler];
- }
- return vm.$watch(expOrFn, handler, options)
- }
- function stateMixin (Vue) {
- // flow somehow has problems with directly declared definition object
- // when using Object.defineProperty, so we have to procedurally build up
- // the object here.
- var dataDef = {};
- dataDef.get = function () { return this._data };
- var propsDef = {};
- propsDef.get = function () { return this._props };
- if (true) {
- dataDef.set = function () {
- warn(
- 'Avoid replacing instance root $data. ' +
- 'Use nested data properties instead.',
- this
- );
- };
- propsDef.set = function () {
- warn("$props is readonly.", this);
- };
- }
- Object.defineProperty(Vue.prototype, '$data', dataDef);
- Object.defineProperty(Vue.prototype, '$props', propsDef);
- Vue.prototype.$set = set;
- Vue.prototype.$delete = del;
- Vue.prototype.$watch = function (
- expOrFn,
- cb,
- options
- ) {
- var vm = this;
- if (isPlainObject(cb)) {
- return createWatcher(vm, expOrFn, cb, options)
- }
- options = options || {};
- options.user = true;
- var watcher = new Watcher(vm, expOrFn, cb, options);
- if (options.immediate) {
- try {
- cb.call(vm, watcher.value);
- } catch (error) {
- handleError(error, vm, ("callback for immediate watcher \"" + (watcher.expression) + "\""));
- }
- }
- return function unwatchFn () {
- watcher.teardown();
- }
- };
- }
- /* */
- var uid$3 = 0;
- function initMixin (Vue) {
- Vue.prototype._init = function (options) {
- var vm = this;
- // a uid
- vm._uid = uid$3++;
- var startTag, endTag;
- /* istanbul ignore if */
- if ( true && config.performance && mark) {
- startTag = "vue-perf-start:" + (vm._uid);
- endTag = "vue-perf-end:" + (vm._uid);
- mark(startTag);
- }
- // a flag to avoid this being observed
- vm._isVue = true;
- // merge options
- if (options && options._isComponent) {
- // optimize internal component instantiation
- // since dynamic options merging is pretty slow, and none of the
- // internal component options needs special treatment.
- initInternalComponent(vm, options);
- } else {
- vm.$options = mergeOptions(
- resolveConstructorOptions(vm.constructor),
- options || {},
- vm
- );
- }
- /* istanbul ignore else */
- if (true) {
- initProxy(vm);
- } else {}
- // expose real self
- vm._self = vm;
- initLifecycle(vm);
- initEvents(vm);
- initRender(vm);
- callHook(vm, 'beforeCreate');
- !vm._$fallback && initInjections(vm); // resolve injections before data/props
- initState(vm);
- !vm._$fallback && initProvide(vm); // resolve provide after data/props
- !vm._$fallback && callHook(vm, 'created');
- /* istanbul ignore if */
- if ( true && config.performance && mark) {
- vm._name = formatComponentName(vm, false);
- mark(endTag);
- measure(("vue " + (vm._name) + " init"), startTag, endTag);
- }
- if (vm.$options.el) {
- vm.$mount(vm.$options.el);
- }
- };
- }
- function initInternalComponent (vm, options) {
- var opts = vm.$options = Object.create(vm.constructor.options);
- // doing this because it's faster than dynamic enumeration.
- var parentVnode = options._parentVnode;
- opts.parent = options.parent;
- opts._parentVnode = parentVnode;
- var vnodeComponentOptions = parentVnode.componentOptions;
- opts.propsData = vnodeComponentOptions.propsData;
- opts._parentListeners = vnodeComponentOptions.listeners;
- opts._renderChildren = vnodeComponentOptions.children;
- opts._componentTag = vnodeComponentOptions.tag;
- if (options.render) {
- opts.render = options.render;
- opts.staticRenderFns = options.staticRenderFns;
- }
- }
- function resolveConstructorOptions (Ctor) {
- var options = Ctor.options;
- if (Ctor.super) {
- var superOptions = resolveConstructorOptions(Ctor.super);
- var cachedSuperOptions = Ctor.superOptions;
- if (superOptions !== cachedSuperOptions) {
- // super option changed,
- // need to resolve new options.
- Ctor.superOptions = superOptions;
- // check if there are any late-modified/attached options (#4976)
- var modifiedOptions = resolveModifiedOptions(Ctor);
- // update base extend options
- if (modifiedOptions) {
- extend(Ctor.extendOptions, modifiedOptions);
- }
- options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
- if (options.name) {
- options.components[options.name] = Ctor;
- }
- }
- }
- return options
- }
- function resolveModifiedOptions (Ctor) {
- var modified;
- var latest = Ctor.options;
- var sealed = Ctor.sealedOptions;
- for (var key in latest) {
- if (latest[key] !== sealed[key]) {
- if (!modified) { modified = {}; }
- modified[key] = latest[key];
- }
- }
- return modified
- }
- function Vue (options) {
- if ( true &&
- !(this instanceof Vue)
- ) {
- warn('Vue is a constructor and should be called with the `new` keyword');
- }
- this._init(options);
- }
- initMixin(Vue);
- stateMixin(Vue);
- eventsMixin(Vue);
- lifecycleMixin(Vue);
- renderMixin(Vue);
- /* */
- function initUse (Vue) {
- Vue.use = function (plugin) {
- var installedPlugins = (this._installedPlugins || (this._installedPlugins = []));
- if (installedPlugins.indexOf(plugin) > -1) {
- return this
- }
- // additional parameters
- var args = toArray(arguments, 1);
- args.unshift(this);
- if (typeof plugin.install === 'function') {
- plugin.install.apply(plugin, args);
- } else if (typeof plugin === 'function') {
- plugin.apply(null, args);
- }
- installedPlugins.push(plugin);
- return this
- };
- }
- /* */
- function initMixin$1 (Vue) {
- Vue.mixin = function (mixin) {
- this.options = mergeOptions(this.options, mixin);
- return this
- };
- }
- /* */
- function initExtend (Vue) {
- /**
- * Each instance constructor, including Vue, has a unique
- * cid. This enables us to create wrapped "child
- * constructors" for prototypal inheritance and cache them.
- */
- Vue.cid = 0;
- var cid = 1;
- /**
- * Class inheritance
- */
- Vue.extend = function (extendOptions) {
- extendOptions = extendOptions || {};
- var Super = this;
- var SuperId = Super.cid;
- var cachedCtors = extendOptions._Ctor || (extendOptions._Ctor = {});
- if (cachedCtors[SuperId]) {
- return cachedCtors[SuperId]
- }
- var name = extendOptions.name || Super.options.name;
- if ( true && name) {
- validateComponentName(name);
- }
- var Sub = function VueComponent (options) {
- this._init(options);
- };
- Sub.prototype = Object.create(Super.prototype);
- Sub.prototype.constructor = Sub;
- Sub.cid = cid++;
- Sub.options = mergeOptions(
- Super.options,
- extendOptions
- );
- Sub['super'] = Super;
- // For props and computed properties, we define the proxy getters on
- // the Vue instances at extension time, on the extended prototype. This
- // avoids Object.defineProperty calls for each instance created.
- if (Sub.options.props) {
- initProps$1(Sub);
- }
- if (Sub.options.computed) {
- initComputed$1(Sub);
- }
- // allow further extension/mixin/plugin usage
- Sub.extend = Super.extend;
- Sub.mixin = Super.mixin;
- Sub.use = Super.use;
- // create asset registers, so extended classes
- // can have their private assets too.
- ASSET_TYPES.forEach(function (type) {
- Sub[type] = Super[type];
- });
- // enable recursive self-lookup
- if (name) {
- Sub.options.components[name] = Sub;
- }
- // keep a reference to the super options at extension time.
- // later at instantiation we can check if Super's options have
- // been updated.
- Sub.superOptions = Super.options;
- Sub.extendOptions = extendOptions;
- Sub.sealedOptions = extend({}, Sub.options);
- // cache constructor
- cachedCtors[SuperId] = Sub;
- return Sub
- };
- }
- function initProps$1 (Comp) {
- var props = Comp.options.props;
- for (var key in props) {
- proxy(Comp.prototype, "_props", key);
- }
- }
- function initComputed$1 (Comp) {
- var computed = Comp.options.computed;
- for (var key in computed) {
- defineComputed(Comp.prototype, key, computed[key]);
- }
- }
- /* */
- function initAssetRegisters (Vue) {
- /**
- * Create asset registration methods.
- */
- ASSET_TYPES.forEach(function (type) {
- Vue[type] = function (
- id,
- definition
- ) {
- if (!definition) {
- return this.options[type + 's'][id]
- } else {
- /* istanbul ignore if */
- if ( true && type === 'component') {
- validateComponentName(id);
- }
- if (type === 'component' && isPlainObject(definition)) {
- definition.name = definition.name || id;
- definition = this.options._base.extend(definition);
- }
- if (type === 'directive' && typeof definition === 'function') {
- definition = { bind: definition, update: definition };
- }
- this.options[type + 's'][id] = definition;
- return definition
- }
- };
- });
- }
- /* */
- function getComponentName (opts) {
- return opts && (opts.Ctor.options.name || opts.tag)
- }
- function matches (pattern, name) {
- if (Array.isArray(pattern)) {
- return pattern.indexOf(name) > -1
- } else if (typeof pattern === 'string') {
- return pattern.split(',').indexOf(name) > -1
- } else if (isRegExp(pattern)) {
- return pattern.test(name)
- }
- /* istanbul ignore next */
- return false
- }
- function pruneCache (keepAliveInstance, filter) {
- var cache = keepAliveInstance.cache;
- var keys = keepAliveInstance.keys;
- var _vnode = keepAliveInstance._vnode;
- for (var key in cache) {
- var cachedNode = cache[key];
- if (cachedNode) {
- var name = getComponentName(cachedNode.componentOptions);
- if (name && !filter(name)) {
- pruneCacheEntry(cache, key, keys, _vnode);
- }
- }
- }
- }
- function pruneCacheEntry (
- cache,
- key,
- keys,
- current
- ) {
- var cached$$1 = cache[key];
- if (cached$$1 && (!current || cached$$1.tag !== current.tag)) {
- cached$$1.componentInstance.$destroy();
- }
- cache[key] = null;
- remove(keys, key);
- }
- var patternTypes = [String, RegExp, Array];
- var KeepAlive = {
- name: 'keep-alive',
- abstract: true,
- props: {
- include: patternTypes,
- exclude: patternTypes,
- max: [String, Number]
- },
- created: function created () {
- this.cache = Object.create(null);
- this.keys = [];
- },
- destroyed: function destroyed () {
- for (var key in this.cache) {
- pruneCacheEntry(this.cache, key, this.keys);
- }
- },
- mounted: function mounted () {
- var this$1 = this;
- this.$watch('include', function (val) {
- pruneCache(this$1, function (name) { return matches(val, name); });
- });
- this.$watch('exclude', function (val) {
- pruneCache(this$1, function (name) { return !matches(val, name); });
- });
- },
- render: function render () {
- var slot = this.$slots.default;
- var vnode = getFirstComponentChild(slot);
- var componentOptions = vnode && vnode.componentOptions;
- if (componentOptions) {
- // check pattern
- var name = getComponentName(componentOptions);
- var ref = this;
- var include = ref.include;
- var exclude = ref.exclude;
- if (
- // not included
- (include && (!name || !matches(include, name))) ||
- // excluded
- (exclude && name && matches(exclude, name))
- ) {
- return vnode
- }
- var ref$1 = this;
- var cache = ref$1.cache;
- var keys = ref$1.keys;
- var key = vnode.key == null
- // same constructor may get registered as different local components
- // so cid alone is not enough (#3269)
- ? componentOptions.Ctor.cid + (componentOptions.tag ? ("::" + (componentOptions.tag)) : '')
- : vnode.key;
- if (cache[key]) {
- vnode.componentInstance = cache[key].componentInstance;
- // make current key freshest
- remove(keys, key);
- keys.push(key);
- } else {
- cache[key] = vnode;
- keys.push(key);
- // prune oldest entry
- if (this.max && keys.length > parseInt(this.max)) {
- pruneCacheEntry(cache, keys[0], keys, this._vnode);
- }
- }
- vnode.data.keepAlive = true;
- }
- return vnode || (slot && slot[0])
- }
- };
- var builtInComponents = {
- KeepAlive: KeepAlive
- };
- /* */
- function initGlobalAPI (Vue) {
- // config
- var configDef = {};
- configDef.get = function () { return config; };
- if (true) {
- configDef.set = function () {
- warn(
- 'Do not replace the Vue.config object, set individual fields instead.'
- );
- };
- }
- Object.defineProperty(Vue, 'config', configDef);
- // exposed util methods.
- // NOTE: these are not considered part of the public API - avoid relying on
- // them unless you are aware of the risk.
- Vue.util = {
- warn: warn,
- extend: extend,
- mergeOptions: mergeOptions,
- defineReactive: defineReactive$$1
- };
- Vue.set = set;
- Vue.delete = del;
- Vue.nextTick = nextTick;
- // 2.6 explicit observable API
- Vue.observable = function (obj) {
- observe(obj);
- return obj
- };
- Vue.options = Object.create(null);
- ASSET_TYPES.forEach(function (type) {
- Vue.options[type + 's'] = Object.create(null);
- });
- // this is used to identify the "base" constructor to extend all plain-object
- // components with in Weex's multi-instance scenarios.
- Vue.options._base = Vue;
- extend(Vue.options.components, builtInComponents);
- initUse(Vue);
- initMixin$1(Vue);
- initExtend(Vue);
- initAssetRegisters(Vue);
- }
- initGlobalAPI(Vue);
- Object.defineProperty(Vue.prototype, '$isServer', {
- get: isServerRendering
- });
- Object.defineProperty(Vue.prototype, '$ssrContext', {
- get: function get () {
- /* istanbul ignore next */
- return this.$vnode && this.$vnode.ssrContext
- }
- });
- // expose FunctionalRenderContext for ssr runtime helper installation
- Object.defineProperty(Vue, 'FunctionalRenderContext', {
- value: FunctionalRenderContext
- });
- Vue.version = '2.6.11';
- /**
- * https://raw.githubusercontent.com/Tencent/westore/master/packages/westore/utils/diff.js
- */
- var ARRAYTYPE = '[object Array]';
- var OBJECTTYPE = '[object Object]';
- // const FUNCTIONTYPE = '[object Function]'
- function diff(current, pre) {
- var result = {};
- syncKeys(current, pre);
- _diff(current, pre, '', result);
- return result
- }
- function syncKeys(current, pre) {
- if (current === pre) { return }
- var rootCurrentType = type(current);
- var rootPreType = type(pre);
- if (rootCurrentType == OBJECTTYPE && rootPreType == OBJECTTYPE) {
- if(Object.keys(current).length >= Object.keys(pre).length){
- for (var key in pre) {
- var currentValue = current[key];
- if (currentValue === undefined) {
- current[key] = null;
- } else {
- syncKeys(currentValue, pre[key]);
- }
- }
- }
- } else if (rootCurrentType == ARRAYTYPE && rootPreType == ARRAYTYPE) {
- if (current.length >= pre.length) {
- pre.forEach(function (item, index) {
- syncKeys(current[index], item);
- });
- }
- }
- }
- function _diff(current, pre, path, result) {
- if (current === pre) { return }
- var rootCurrentType = type(current);
- var rootPreType = type(pre);
- if (rootCurrentType == OBJECTTYPE) {
- if (rootPreType != OBJECTTYPE || Object.keys(current).length < Object.keys(pre).length) {
- setResult(result, path, current);
- } else {
- var loop = function ( key ) {
- var currentValue = current[key];
- var preValue = pre[key];
- var currentType = type(currentValue);
- var preType = type(preValue);
- if (currentType != ARRAYTYPE && currentType != OBJECTTYPE) {
- // NOTE 此处将 != 修改为 !==。涉及地方太多恐怕测试不到,如果出现数据对比问题,将其修改回来。
- if (currentValue !== pre[key]) {
- setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
- }
- } else if (currentType == ARRAYTYPE) {
- if (preType != ARRAYTYPE) {
- setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
- } else {
- if (currentValue.length < preValue.length) {
- setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
- } else {
- currentValue.forEach(function (item, index) {
- _diff(item, preValue[index], (path == '' ? '' : path + ".") + key + '[' + index + ']', result);
- });
- }
- }
- } else if (currentType == OBJECTTYPE) {
- if (preType != OBJECTTYPE || Object.keys(currentValue).length < Object.keys(preValue).length) {
- setResult(result, (path == '' ? '' : path + ".") + key, currentValue);
- } else {
- for (var subKey in currentValue) {
- _diff(currentValue[subKey], preValue[subKey], (path == '' ? '' : path + ".") + key + '.' + subKey, result);
- }
- }
- }
- };
- for (var key in current) loop( key );
- }
- } else if (rootCurrentType == ARRAYTYPE) {
- if (rootPreType != ARRAYTYPE) {
- setResult(result, path, current);
- } else {
- if (current.length < pre.length) {
- setResult(result, path, current);
- } else {
- current.forEach(function (item, index) {
- _diff(item, pre[index], path + '[' + index + ']', result);
- });
- }
- }
- } else {
- setResult(result, path, current);
- }
- }
- function setResult(result, k, v) {
- // if (type(v) != FUNCTIONTYPE) {
- result[k] = v;
- // }
- }
- function type(obj) {
- return Object.prototype.toString.call(obj)
- }
- /* */
- function flushCallbacks$1(vm) {
- if (vm.__next_tick_callbacks && vm.__next_tick_callbacks.length) {
- if (Object({"NODE_ENV":"development","VUE_APP_NAME":"鄂州市红十字会","VUE_APP_PLATFORM":"mp-toutiao","BASE_URL":"/"}).VUE_APP_DEBUG) {
- var mpInstance = vm.$scope;
- console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +
- ']:flushCallbacks[' + vm.__next_tick_callbacks.length + ']');
- }
- var copies = vm.__next_tick_callbacks.slice(0);
- vm.__next_tick_callbacks.length = 0;
- for (var i = 0; i < copies.length; i++) {
- copies[i]();
- }
- }
- }
- function hasRenderWatcher(vm) {
- return queue.find(function (watcher) { return vm._watcher === watcher; })
- }
- function nextTick$1(vm, cb) {
- //1.nextTick 之前 已 setData 且 setData 还未回调完成
- //2.nextTick 之前存在 render watcher
- if (!vm.__next_tick_pending && !hasRenderWatcher(vm)) {
- if(Object({"NODE_ENV":"development","VUE_APP_NAME":"鄂州市红十字会","VUE_APP_PLATFORM":"mp-toutiao","BASE_URL":"/"}).VUE_APP_DEBUG){
- var mpInstance = vm.$scope;
- console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + vm._uid +
- ']:nextVueTick');
- }
- return nextTick(cb, vm)
- }else{
- if(Object({"NODE_ENV":"development","VUE_APP_NAME":"鄂州市红十字会","VUE_APP_PLATFORM":"mp-toutiao","BASE_URL":"/"}).VUE_APP_DEBUG){
- var mpInstance$1 = vm.$scope;
- console.log('[' + (+new Date) + '][' + (mpInstance$1.is || mpInstance$1.route) + '][' + vm._uid +
- ']:nextMPTick');
- }
- }
- var _resolve;
- if (!vm.__next_tick_callbacks) {
- vm.__next_tick_callbacks = [];
- }
- vm.__next_tick_callbacks.push(function () {
- if (cb) {
- try {
- cb.call(vm);
- } catch (e) {
- handleError(e, vm, 'nextTick');
- }
- } else if (_resolve) {
- _resolve(vm);
- }
- });
- // $flow-disable-line
- if (!cb && typeof Promise !== 'undefined') {
- return new Promise(function (resolve) {
- _resolve = resolve;
- })
- }
- }
- /* */
- function cloneWithData(vm) {
- // 确保当前 vm 所有数据被同步
- var ret = Object.create(null);
- var dataKeys = [].concat(
- Object.keys(vm._data || {}),
- Object.keys(vm._computedWatchers || {}));
- dataKeys.reduce(function(ret, key) {
- ret[key] = vm[key];
- return ret
- }, ret);
- // vue-composition-api
- var compositionApiState = vm.__composition_api_state__ || vm.__secret_vfa_state__;
- var rawBindings = compositionApiState && compositionApiState.rawBindings;
- if (rawBindings) {
- Object.keys(rawBindings).forEach(function (key) {
- ret[key] = vm[key];
- });
- }
- //TODO 需要把无用数据处理掉,比如 list=>l0 则 list 需要移除,否则多传输一份数据
- Object.assign(ret, vm.$mp.data || {});
- if (
- Array.isArray(vm.$options.behaviors) &&
- vm.$options.behaviors.indexOf('uni://form-field') !== -1
- ) { //form-field
- ret['name'] = vm.name;
- ret['value'] = vm.value;
- }
- return JSON.parse(JSON.stringify(ret))
- }
- var patch = function(oldVnode, vnode) {
- var this$1 = this;
- if (vnode === null) { //destroy
- return
- }
- if (this.mpType === 'page' || this.mpType === 'component') {
- var mpInstance = this.$scope;
- var data = Object.create(null);
- try {
- data = cloneWithData(this);
- } catch (err) {
- console.error(err);
- }
- data.__webviewId__ = mpInstance.data.__webviewId__;
- var mpData = Object.create(null);
- Object.keys(data).forEach(function (key) { //仅同步 data 中有的数据
- mpData[key] = mpInstance.data[key];
- });
- var diffData = this.$shouldDiffData === false ? data : diff(data, mpData);
- if (Object.keys(diffData).length) {
- if (Object({"NODE_ENV":"development","VUE_APP_NAME":"鄂州市红十字会","VUE_APP_PLATFORM":"mp-toutiao","BASE_URL":"/"}).VUE_APP_DEBUG) {
- console.log('[' + (+new Date) + '][' + (mpInstance.is || mpInstance.route) + '][' + this._uid +
- ']差量更新',
- JSON.stringify(diffData));
- }
- this.__next_tick_pending = true;
- mpInstance.setData(diffData, function () {
- this$1.__next_tick_pending = false;
- flushCallbacks$1(this$1);
- });
- } else {
- flushCallbacks$1(this);
- }
- }
- };
- /* */
- function createEmptyRender() {
- }
- function mountComponent$1(
- vm,
- el,
- hydrating
- ) {
- if (!vm.mpType) {//main.js 中的 new Vue
- return vm
- }
- if (vm.mpType === 'app') {
- vm.$options.render = createEmptyRender;
- }
- if (!vm.$options.render) {
- vm.$options.render = createEmptyRender;
- if (true) {
- /* istanbul ignore if */
- if ((vm.$options.template && vm.$options.template.charAt(0) !== '#') ||
- vm.$options.el || el) {
- warn(
- 'You are using the runtime-only build of Vue where the template ' +
- 'compiler is not available. Either pre-compile the templates into ' +
- 'render functions, or use the compiler-included build.',
- vm
- );
- } else {
- warn(
- 'Failed to mount component: template or render function not defined.',
- vm
- );
- }
- }
- }
-
- !vm._$fallback && callHook(vm, 'beforeMount');
- var updateComponent = function () {
- vm._update(vm._render(), hydrating);
- };
- // we set this to vm._watcher inside the watcher's constructor
- // since the watcher's initial patch may call $forceUpdate (e.g. inside child
- // component's mounted hook), which relies on vm._watcher being already defined
- new Watcher(vm, updateComponent, noop, {
- before: function before() {
- if (vm._isMounted && !vm._isDestroyed) {
- callHook(vm, 'beforeUpdate');
- }
- }
- }, true /* isRenderWatcher */);
- hydrating = false;
- return vm
- }
- /* */
- function renderClass (
- staticClass,
- dynamicClass
- ) {
- if (isDef(staticClass) || isDef(dynamicClass)) {
- return concat(staticClass, stringifyClass(dynamicClass))
- }
- /* istanbul ignore next */
- return ''
- }
- function concat (a, b) {
- return a ? b ? (a + ' ' + b) : a : (b || '')
- }
- function stringifyClass (value) {
- if (Array.isArray(value)) {
- return stringifyArray(value)
- }
- if (isObject(value)) {
- return stringifyObject(value)
- }
- if (typeof value === 'string') {
- return value
- }
- /* istanbul ignore next */
- return ''
- }
- function stringifyArray (value) {
- var res = '';
- var stringified;
- for (var i = 0, l = value.length; i < l; i++) {
- if (isDef(stringified = stringifyClass(value[i])) && stringified !== '') {
- if (res) { res += ' '; }
- res += stringified;
- }
- }
- return res
- }
- function stringifyObject (value) {
- var res = '';
- for (var key in value) {
- if (value[key]) {
- if (res) { res += ' '; }
- res += key;
- }
- }
- return res
- }
- /* */
- var parseStyleText = cached(function (cssText) {
- var res = {};
- var listDelimiter = /;(?![^(]*\))/g;
- var propertyDelimiter = /:(.+)/;
- cssText.split(listDelimiter).forEach(function (item) {
- if (item) {
- var tmp = item.split(propertyDelimiter);
- tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
- }
- });
- return res
- });
- // normalize possible array / string values into Object
- function normalizeStyleBinding (bindingStyle) {
- if (Array.isArray(bindingStyle)) {
- return toObject(bindingStyle)
- }
- if (typeof bindingStyle === 'string') {
- return parseStyleText(bindingStyle)
- }
- return bindingStyle
- }
- /* */
- var MP_METHODS = ['createSelectorQuery', 'createIntersectionObserver', 'selectAllComponents', 'selectComponent'];
- function getTarget(obj, path) {
- var parts = path.split('.');
- var key = parts[0];
- if (key.indexOf('__$n') === 0) { //number index
- key = parseInt(key.replace('__$n', ''));
- }
- if (parts.length === 1) {
- return obj[key]
- }
- return getTarget(obj[key], parts.slice(1).join('.'))
- }
- function internalMixin(Vue) {
- Vue.config.errorHandler = function(err, vm, info) {
- Vue.util.warn(("Error in " + info + ": \"" + (err.toString()) + "\""), vm);
- console.error(err);
- /* eslint-disable no-undef */
- var app = typeof getApp === 'function' && getApp();
- if (app && app.onError) {
- app.onError(err);
- }
- };
- var oldEmit = Vue.prototype.$emit;
- Vue.prototype.$emit = function(event) {
- if (this.$scope && event) {
- this.$scope['triggerEvent'](event, {
- __args__: toArray(arguments, 1)
- });
- }
- return oldEmit.apply(this, arguments)
- };
- Vue.prototype.$nextTick = function(fn) {
- return nextTick$1(this, fn)
- };
- MP_METHODS.forEach(function (method) {
- Vue.prototype[method] = function(args) {
- if (this.$scope && this.$scope[method]) {
- return this.$scope[method](args)
- }
- // mp-alipay
- if (typeof my === 'undefined') {
- return
- }
- if (method === 'createSelectorQuery') {
- /* eslint-disable no-undef */
- return my.createSelectorQuery(args)
- } else if (method === 'createIntersectionObserver') {
- /* eslint-disable no-undef */
- return my.createIntersectionObserver(args)
- }
- // TODO mp-alipay 暂不支持 selectAllComponents,selectComponent
- };
- });
- Vue.prototype.__init_provide = initProvide;
- Vue.prototype.__init_injections = initInjections;
- Vue.prototype.__call_hook = function(hook, args) {
- var vm = this;
- // #7573 disable dep collection when invoking lifecycle hooks
- pushTarget();
- var handlers = vm.$options[hook];
- var info = hook + " hook";
- var ret;
- if (handlers) {
- for (var i = 0, j = handlers.length; i < j; i++) {
- ret = invokeWithErrorHandling(handlers[i], vm, args ? [args] : null, vm, info);
- }
- }
- if (vm._hasHookEvent) {
- vm.$emit('hook:' + hook, args);
- }
- popTarget();
- return ret
- };
- Vue.prototype.__set_model = function(target, key, value, modifiers) {
- if (Array.isArray(modifiers)) {
- if (modifiers.indexOf('trim') !== -1) {
- value = value.trim();
- }
- if (modifiers.indexOf('number') !== -1) {
- value = this._n(value);
- }
- }
- if (!target) {
- target = this;
- }
- target[key] = value;
- };
- Vue.prototype.__set_sync = function(target, key, value) {
- if (!target) {
- target = this;
- }
- target[key] = value;
- };
- Vue.prototype.__get_orig = function(item) {
- if (isPlainObject(item)) {
- return item['$orig'] || item
- }
- return item
- };
- Vue.prototype.__get_value = function(dataPath, target) {
- return getTarget(target || this, dataPath)
- };
- Vue.prototype.__get_class = function(dynamicClass, staticClass) {
- return renderClass(staticClass, dynamicClass)
- };
- Vue.prototype.__get_style = function(dynamicStyle, staticStyle) {
- if (!dynamicStyle && !staticStyle) {
- return ''
- }
- var dynamicStyleObj = normalizeStyleBinding(dynamicStyle);
- var styleObj = staticStyle ? extend(staticStyle, dynamicStyleObj) : dynamicStyleObj;
- return Object.keys(styleObj).map(function (name) { return ((hyphenate(name)) + ":" + (styleObj[name])); }).join(';')
- };
- Vue.prototype.__map = function(val, iteratee) {
- //TODO 暂不考虑 string
- var ret, i, l, keys, key;
- if (Array.isArray(val)) {
- ret = new Array(val.length);
- for (i = 0, l = val.length; i < l; i++) {
- ret[i] = iteratee(val[i], i);
- }
- return ret
- } else if (isObject(val)) {
- keys = Object.keys(val);
- ret = Object.create(null);
- for (i = 0, l = keys.length; i < l; i++) {
- key = keys[i];
- ret[key] = iteratee(val[key], key, i);
- }
- return ret
- } else if (typeof val === 'number') {
- ret = new Array(val);
- for (i = 0, l = val; i < l; i++) {
- // 第一个参数暂时仍和小程序一致
- ret[i] = iteratee(i, i);
- }
- return ret
- }
- return []
- };
- }
- /* */
- var LIFECYCLE_HOOKS$1 = [
- //App
- 'onLaunch',
- 'onShow',
- 'onHide',
- 'onUniNViewMessage',
- 'onPageNotFound',
- 'onThemeChange',
- 'onError',
- 'onUnhandledRejection',
- //Page
- 'onInit',
- 'onLoad',
- // 'onShow',
- 'onReady',
- // 'onHide',
- 'onUnload',
- 'onPullDownRefresh',
- 'onReachBottom',
- 'onTabItemTap',
- 'onAddToFavorites',
- 'onShareTimeline',
- 'onShareAppMessage',
- 'onResize',
- 'onPageScroll',
- 'onNavigationBarButtonTap',
- 'onBackPress',
- 'onNavigationBarSearchInputChanged',
- 'onNavigationBarSearchInputConfirmed',
- 'onNavigationBarSearchInputClicked',
- //Component
- // 'onReady', // 兼容旧版本,应该移除该事件
- 'onPageShow',
- 'onPageHide',
- 'onPageResize'
- ];
- function lifecycleMixin$1(Vue) {
- //fixed vue-class-component
- var oldExtend = Vue.extend;
- Vue.extend = function(extendOptions) {
- extendOptions = extendOptions || {};
- var methods = extendOptions.methods;
- if (methods) {
- Object.keys(methods).forEach(function (methodName) {
- if (LIFECYCLE_HOOKS$1.indexOf(methodName)!==-1) {
- extendOptions[methodName] = methods[methodName];
- delete methods[methodName];
- }
- });
- }
- return oldExtend.call(this, extendOptions)
- };
- var strategies = Vue.config.optionMergeStrategies;
- var mergeHook = strategies.created;
- LIFECYCLE_HOOKS$1.forEach(function (hook) {
- strategies[hook] = mergeHook;
- });
- Vue.prototype.__lifecycle_hooks__ = LIFECYCLE_HOOKS$1;
- }
- /* */
- // install platform patch function
- Vue.prototype.__patch__ = patch;
- // public mount method
- Vue.prototype.$mount = function(
- el ,
- hydrating
- ) {
- return mountComponent$1(this, el, hydrating)
- };
- lifecycleMixin$1(Vue);
- internalMixin(Vue);
- /* */
- /* harmony default export */ __webpack_exports__["default"] = (Vue);
- /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../../../webpack/buildin/global.js */ 3)))
- /***/ }),
- /***/ 20:
- /*!**********************************!*\
- !*** D:/gsxm/ezred/api/index.js ***!
- \**********************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- 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;}
- // 获取轮播图
- function loadIndexs(data) {
- return (0, _request.default)({
- url: '/api/index',
- method: 'get',
- data: data });
- }
- // 获取科普文章列表
- function bannerlist(data) {
- return (0, _request.default)({
- url: '/api/article/list/1',
- method: 'get',
- data: data });
- }
- // 获取博爱项目文章列表
- function itemList(data) {
- return (0, _request.default)({
- url: '/api/article/list/4',
- method: 'get',
- data: data });
- }
- //上传图片
- function upload(data) {
- return (0, _request.upFilse)({
- url: '/api/upload/image',
- method: 'post',
- data: data });
- }
- // 促销商品
- function groom4(data) {
- return (0, _request.default)({
- url: '/api/groom/list/4',
- method: 'get',
- data: data });
- }
- // 精品推荐
- function groom1(data) {
- return (0, _request.default)({
- url: '/api/groom/list/1',
- method: 'get',
- data: data });
- }
- // 新品首发
- function groom3(data) {
- return (0, _request.default)({
- url: '/api/groom/list/3',
- method: 'get',
- data: data });
- }
- // 获取我创建的圈子
- function myCreateCircle(data) {
- return (0, _request.default)({
- url: '/api/circle/mycreate',
- method: 'post',
- data: data });
- }
- // 造血干细胞捐献
- function getList(data) {
- return (0, _request.default)({
- url: '/api/sign_cell',
- method: 'post',
- data: data });
- }
- // 救护者页面获取参与人数
- function getNumber(data) {
- return (0, _request.default)({
- url: '/api/get_rescuer',
- method: 'get',
- data: data });
- }
- // 志愿者报名
- function add_volunteers(data) {
- return (0, _request.default)({
- url: '/api/add_registration',
- method: 'post',
- data: data });
- }
- // joinSec
- function joinSec(data) {
- return (0, _request.default)({
- url: '/api/add_volunteers',
- method: 'post',
- data: data });
- }
- // joinSecc 器官捐赠
- function joinSecc(data) {
- return (0, _request.default)({
- url: '/api/add_donation',
- method: 'post',
- data: data });
- }
- // 获取定位
- function getdis(data) {
- return (0, _request.default)({
- url: '/api/getdis',
- method: 'get',
- data: data });
- }
- // 立即救援
- function tocall(data) {
- return (0, _request.default)({
- url: '/api/do_getdis',
- method: 'get',
- data: data });
- }
- // 救护培训报名
- function training(data) {
- return (0, _request.default)({
- url: '/api/training',
- method: 'get',
- data: data });
- }
- // 求助记录 getsee
- function getseek(data) {
- return (0, _request.default)({
- url: '/api/seek',
- method: 'get',
- data: data });
- }
- // getcomAddress 获取常用地址
- function getcomAddress(data) {
- return (0, _request.default)({
- url: '/api/get_commonly',
- method: 'get',
- data: data });
- }
- // 救援记录 rescue
- function getrescue(data) {
- return (0, _request.default)({
- url: '/api/rescueee',
- method: 'get',
- data: data });
- }
- function change_rescue(data) {
- return (0, _request.default)({
- url: '/api/change_rescue',
- method: 'get',
- data: data });
- }
- // 获取ADE经纬度 getListAED getDistance
- function getListAED(data) {
- return (0, _request.default)({
- url: '/api/getAed',
- method: 'get',
- data: data });
- }
- //获取机构
- function getListMechanism(data) {
- return (0, _request.default)({
- url: '/api/mechanism',
- method: 'get',
- data: data });
- }
- function getDistance(data) {
- return (0, _request.default)({
- url: '/api/aeddiss',
- method: 'get',
- data: data });
- }
- // deleteList 删除救援地址
- function deleteList(data) {
- return (0, _request.default)({
- url: '/api/del_resc',
- method: 'get',
- data: data });
- }
- /***/ }),
- /***/ 21:
- /*!**************************************!*\
- !*** D:/gsxm/ezred/utils/request.js ***!
- \**************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- /* 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));
- var _store = _interopRequireDefault(__webpack_require__(/*! ../store */ 5));
- var _loginUtils = __webpack_require__(/*! @/utils/loginUtils.js */ 26);function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
- // 请求完成后拦截
- _newRequest.default.interceptors.response(
- function (response) {
- try {
- var res = response.data;
- // 解析字符串为数字
- if (res.status !== 200) {
- if (res.status == 410000) {
- // 存储当前地址
- (0, _loginUtils.saveUrl)();
- // 调用退出登录方法清空用户信息
- _store.default.commit('user/logout');
- // 判断是否开启强制登录
- // 跳转页面
- (0, _loginUtils.interceptor)();
- uni.showModal({
- title: "您未登录!是否马上登录?",
- success: function success(e) {
- if (e.confirm) {
- // 保存当前页面地址
- }
- } });
- } else {
- if (res.msg != '系统出现异常') {
- uni.showToast({
- title: res.msg,
- duration: 1500,
- mask: false,
- icon: 'none' });
- }
- }
- console.log(res);
- //return Promise.reject(new Error(res.msg || 'Error'))
- } else {
- return res;
- }
- } catch (e) {
- console.log(e);
- }
- },
- function (error) {
- uni.showToast({
- title: "加载错误请重试",
- duration: 1500,
- mask: false,
- icon: 'none' });
- return Promise.reject(error);
- });
- // 请求前拦截器
- _newRequest.default.interceptors.request(
- function (config) {
- // config.data.token = getToken();
- // console.log(config);
- var token = uni.getStorageSync('token');
- // console.log(token);
- if (!config.header) {
- config.header = {
- "Authori-zation": 'Bearer ' + token };
- } else {
- // 添加key请求头
- config.header["Authori-zation"] = 'Bearer ' + token;
- }
- return config;
- },
- function (error) {
- // 错误处理
- console.log(error);
- return Promise.reject(error);
- });
- var upFilse = _newRequest.default.upFilse;exports.upFilse = upFilse;var _default =
- _newRequest.default.open;exports.default = _default;
- /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
- /***/ }),
- /***/ 22:
- /*!*****************************************!*\
- !*** D:/gsxm/ezred/utils/newRequest.js ***!
- \*****************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- /* 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);});};}
- var service = {
- // baseURL: store.state.baseURL, // 请求头
- baseURL: '', // 请求头
- header: {
- 'Content-Type': "application/x-www-form-urlencoded" },
- // 请求拦截器
- interceptors: {
- // 安装请求前拦截
- request: function request(success, iserror) {
- service.request.success = success;
- service.request.error = iserror;
- },
- // 安装请求完成后拦截
- response: function response(success, iserror) {
- service.response.success = success;
- service.response.error = iserror;
- } },
- // 请求前拦截
- request: {
- // 回调成功执行方法
- success: function success(e) {
- return e;
- },
- // 回调失败
- error: function error(e) {
- return e;
- } },
- // 请求完成后拦截
- response: {
- // 回调成功执行方法
- success: function success(e) {
- return e;
- },
- // 回调失败
- error: function error(e) {
- return e;
- } },
- // 开始请求
- 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 (
- new Promise(function (resolve, reject) {
- var requestData = ''; //保存处理完成后请求数据
- //console.log(data);
- // 请求前数据处理
- requestData = service.request.success(data);
- // 保存请求地址;
- var url;
- if (requestData.url.indexOf('http') > -1) {
- url = requestData.url;
- } else {
- url = service.baseURL + requestData.url;
- }
- // 数据复制用于请求
- uni.request({
- url: url,
- method: requestData.method || 'GET',
- data: requestData.data,
- header: data.header || service.header,
- success: function success(res) {
- if (res.statusCode == 200) {
- try {
- resolve(service.response.success(res));
- } catch (e) {
- service.response.error(e);
- }
- }
- },
- // 请求失败数据处理
- fail: function fail(err) {
- service.response.error(err);
- } });
- }));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;}(),
- // 上传文件
- 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 (
- new Promise(function (resolve, reject) {
- var requestData = ''; //保存处理完成后请求数据
- try {
- // 请求前数据处理
- requestData = service.request.success(data);
- } catch (e) {
- // 请求报错拦截
- service.request.error(e);
- }
- var config = {
- // 上传图片的API
- upload_img_url: service.baseURL + requestData.url };
- var Uploader = {
- // 选择图片
- choose: function choose(num) {
- return new Promise(function (resolve, reject) {
- uni.chooseImage({
- count: num,
- sourceType: ['album'],
- sizeType: ['compressed'],
- success: function success(res) {
- // console.log(res);
- // 缓存文件路径
- resolve(res.tempFilePaths);
- },
- fail: function fail(err) {
- console.log(err);
- reject(err);
- } });
- });
- },
- // 上传图片
- upload_one: function upload_one(path) {
- return new Promise(function (resolve, reject) {
- uni.showLoading({
- title: '上传中' });
- uni.uploadFile({
- url: config.upload_img_url, //仅为示例,非真实的接口地址
- filePath: path,
- name: 'file',
- header: {
- "Authori-zation": 'Bearer ' + uni.getStorageSync('token') },
- success: function success(uploadFileRes) {
- if ("string" === typeof uploadFileRes.data) {
- resolve(JSON.parse(uploadFileRes.data).data);
- } else {
- resolve(uploadFileRes.data.data);
- }
- },
- complete: function complete() {
- uni.hideLoading();
- } });
- });
- },
- // 上传多个图片
- upload: function upload(path_arr) {var _this = this;
- var num = path_arr.length;
- 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:
- img_urls = [];
- i = 0;case 2:if (!(i < num)) {_context2.next = 10;break;}_context2.next = 5;return (
- _this.upload_one(path_arr[i]));case 5:img_url = _context2.sent;
- img_urls.push(img_url);case 7:i++;_context2.next = 2;break;case 10:
- ;
- resolve(img_urls);case 12:case "end":return _context2.stop();}}}, _callee2);}));return function (_x3, _x4) {return _ref.apply(this, arguments);};}());
- },
- // 触发上传图片事件
- choose_and_upload: function choose_and_upload(num) {var _this2 = this;
- 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 (
- _this2.choose(num));case 2:path_arr = _context3.sent;_context3.next = 5;return (
- _this2.upload(path_arr).then(function (e) {
- resolve(e);
- }).catch(function (e) {
- reject(e);
- }));case 5:case "end":return _context3.stop();}}}, _callee3);}));return function (_x5, _x6) {return _ref2.apply(this, arguments);};}());
- } };
- Uploader.choose_and_upload(1).then(function (e) {
- resolve(e);
- }).catch(function (e) {
- console.log(e);
- });
- }));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 =
- service;exports.default = _default;
- /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
- /***/ }),
- /***/ 23:
- /*!**********************************************************!*\
- !*** ./node_modules/@babel/runtime/regenerator/index.js ***!
- \**********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- module.exports = __webpack_require__(/*! regenerator-runtime */ 24);
- /***/ }),
- /***/ 24:
- /*!************************************************************!*\
- !*** ./node_modules/regenerator-runtime/runtime-module.js ***!
- \************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- /**
- * Copyright (c) 2014-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- // This method of obtaining a reference to the global object needs to be
- // kept identical to the way it is obtained in runtime.js
- var g = (function() {
- return this || (typeof self === "object" && self);
- })() || Function("return this")();
- // Use `getOwnPropertyNames` because not all browsers support calling
- // `hasOwnProperty` on the global `self` object in a worker. See #183.
- var hadRuntime = g.regeneratorRuntime &&
- Object.getOwnPropertyNames(g).indexOf("regeneratorRuntime") >= 0;
- // Save the old regeneratorRuntime in case it needs to be restored later.
- var oldRuntime = hadRuntime && g.regeneratorRuntime;
- // Force reevalutation of runtime.js.
- g.regeneratorRuntime = undefined;
- module.exports = __webpack_require__(/*! ./runtime */ 25);
- if (hadRuntime) {
- // Restore the original runtime.
- g.regeneratorRuntime = oldRuntime;
- } else {
- // Remove the global property added by runtime.js.
- try {
- delete g.regeneratorRuntime;
- } catch(e) {
- g.regeneratorRuntime = undefined;
- }
- }
- /***/ }),
- /***/ 25:
- /*!*****************************************************!*\
- !*** ./node_modules/regenerator-runtime/runtime.js ***!
- \*****************************************************/
- /*! no static exports found */
- /***/ (function(module, exports) {
- /**
- * Copyright (c) 2014-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- !(function(global) {
- "use strict";
- var Op = Object.prototype;
- var hasOwn = Op.hasOwnProperty;
- var undefined; // More compressible than void 0.
- var $Symbol = typeof Symbol === "function" ? Symbol : {};
- var iteratorSymbol = $Symbol.iterator || "@@iterator";
- var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
- var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
- var inModule = typeof module === "object";
- var runtime = global.regeneratorRuntime;
- if (runtime) {
- if (inModule) {
- // If regeneratorRuntime is defined globally and we're in a module,
- // make the exports object identical to regeneratorRuntime.
- module.exports = runtime;
- }
- // Don't bother evaluating the rest of this file if the runtime was
- // already defined globally.
- return;
- }
- // Define the runtime globally (as expected by generated code) as either
- // module.exports (if we're in a module) or a new, empty object.
- runtime = global.regeneratorRuntime = inModule ? module.exports : {};
- function wrap(innerFn, outerFn, self, tryLocsList) {
- // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.
- var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
- var generator = Object.create(protoGenerator.prototype);
- var context = new Context(tryLocsList || []);
- // The ._invoke method unifies the implementations of the .next,
- // .throw, and .return methods.
- generator._invoke = makeInvokeMethod(innerFn, self, context);
- return generator;
- }
- runtime.wrap = wrap;
- // Try/catch helper to minimize deoptimizations. Returns a completion
- // record like context.tryEntries[i].completion. This interface could
- // have been (and was previously) designed to take a closure to be
- // invoked without arguments, but in all the cases we care about we
- // already have an existing method we want to call, so there's no need
- // to create a new function object. We can even get away with assuming
- // the method takes exactly one argument, since that happens to be true
- // in every case, so we don't have to touch the arguments object. The
- // only additional allocation required is the completion record, which
- // has a stable shape and so hopefully should be cheap to allocate.
- function tryCatch(fn, obj, arg) {
- try {
- return { type: "normal", arg: fn.call(obj, arg) };
- } catch (err) {
- return { type: "throw", arg: err };
- }
- }
- var GenStateSuspendedStart = "suspendedStart";
- var GenStateSuspendedYield = "suspendedYield";
- var GenStateExecuting = "executing";
- var GenStateCompleted = "completed";
- // Returning this object from the innerFn has the same effect as
- // breaking out of the dispatch switch statement.
- var ContinueSentinel = {};
- // Dummy constructor functions that we use as the .constructor and
- // .constructor.prototype properties for functions that return Generator
- // objects. For full spec compliance, you may wish to configure your
- // minifier not to mangle the names of these two functions.
- function Generator() {}
- function GeneratorFunction() {}
- function GeneratorFunctionPrototype() {}
- // This is a polyfill for %IteratorPrototype% for environments that
- // don't natively support it.
- var IteratorPrototype = {};
- IteratorPrototype[iteratorSymbol] = function () {
- return this;
- };
- var getProto = Object.getPrototypeOf;
- var NativeIteratorPrototype = getProto && getProto(getProto(values([])));
- if (NativeIteratorPrototype &&
- NativeIteratorPrototype !== Op &&
- hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {
- // This environment has a native %IteratorPrototype%; use it instead
- // of the polyfill.
- IteratorPrototype = NativeIteratorPrototype;
- }
- var Gp = GeneratorFunctionPrototype.prototype =
- Generator.prototype = Object.create(IteratorPrototype);
- GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;
- GeneratorFunctionPrototype.constructor = GeneratorFunction;
- GeneratorFunctionPrototype[toStringTagSymbol] =
- GeneratorFunction.displayName = "GeneratorFunction";
- // Helper for defining the .next, .throw, and .return methods of the
- // Iterator interface in terms of a single ._invoke method.
- function defineIteratorMethods(prototype) {
- ["next", "throw", "return"].forEach(function(method) {
- prototype[method] = function(arg) {
- return this._invoke(method, arg);
- };
- });
- }
- runtime.isGeneratorFunction = function(genFun) {
- var ctor = typeof genFun === "function" && genFun.constructor;
- return ctor
- ? ctor === GeneratorFunction ||
- // For the native GeneratorFunction constructor, the best we can
- // do is to check its .name property.
- (ctor.displayName || ctor.name) === "GeneratorFunction"
- : false;
- };
- runtime.mark = function(genFun) {
- if (Object.setPrototypeOf) {
- Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
- } else {
- genFun.__proto__ = GeneratorFunctionPrototype;
- if (!(toStringTagSymbol in genFun)) {
- genFun[toStringTagSymbol] = "GeneratorFunction";
- }
- }
- genFun.prototype = Object.create(Gp);
- return genFun;
- };
- // Within the body of any async function, `await x` is transformed to
- // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test
- // `hasOwn.call(value, "__await")` to determine if the yielded value is
- // meant to be awaited.
- runtime.awrap = function(arg) {
- return { __await: arg };
- };
- function AsyncIterator(generator) {
- function invoke(method, arg, resolve, reject) {
- var record = tryCatch(generator[method], generator, arg);
- if (record.type === "throw") {
- reject(record.arg);
- } else {
- var result = record.arg;
- var value = result.value;
- if (value &&
- typeof value === "object" &&
- hasOwn.call(value, "__await")) {
- return Promise.resolve(value.__await).then(function(value) {
- invoke("next", value, resolve, reject);
- }, function(err) {
- invoke("throw", err, resolve, reject);
- });
- }
- return Promise.resolve(value).then(function(unwrapped) {
- // When a yielded Promise is resolved, its final value becomes
- // the .value of the Promise<{value,done}> result for the
- // current iteration.
- result.value = unwrapped;
- resolve(result);
- }, function(error) {
- // If a rejected Promise was yielded, throw the rejection back
- // into the async generator function so it can be handled there.
- return invoke("throw", error, resolve, reject);
- });
- }
- }
- var previousPromise;
- function enqueue(method, arg) {
- function callInvokeWithMethodAndArg() {
- return new Promise(function(resolve, reject) {
- invoke(method, arg, resolve, reject);
- });
- }
- return previousPromise =
- // If enqueue has been called before, then we want to wait until
- // all previous Promises have been resolved before calling invoke,
- // so that results are always delivered in the correct order. If
- // enqueue has not been called before, then it is important to
- // call invoke immediately, without waiting on a callback to fire,
- // so that the async generator function has the opportunity to do
- // any necessary setup in a predictable way. This predictability
- // is why the Promise constructor synchronously invokes its
- // executor callback, and why async functions synchronously
- // execute code before the first await. Since we implement simple
- // async functions in terms of async generators, it is especially
- // important to get this right, even though it requires care.
- previousPromise ? previousPromise.then(
- callInvokeWithMethodAndArg,
- // Avoid propagating failures to Promises returned by later
- // invocations of the iterator.
- callInvokeWithMethodAndArg
- ) : callInvokeWithMethodAndArg();
- }
- // Define the unified helper method that is used to implement .next,
- // .throw, and .return (see defineIteratorMethods).
- this._invoke = enqueue;
- }
- defineIteratorMethods(AsyncIterator.prototype);
- AsyncIterator.prototype[asyncIteratorSymbol] = function () {
- return this;
- };
- runtime.AsyncIterator = AsyncIterator;
- // Note that simple async functions are implemented on top of
- // AsyncIterator objects; they just return a Promise for the value of
- // the final result produced by the iterator.
- runtime.async = function(innerFn, outerFn, self, tryLocsList) {
- var iter = new AsyncIterator(
- wrap(innerFn, outerFn, self, tryLocsList)
- );
- return runtime.isGeneratorFunction(outerFn)
- ? iter // If outerFn is a generator, return the full iterator.
- : iter.next().then(function(result) {
- return result.done ? result.value : iter.next();
- });
- };
- function makeInvokeMethod(innerFn, self, context) {
- var state = GenStateSuspendedStart;
- return function invoke(method, arg) {
- if (state === GenStateExecuting) {
- throw new Error("Generator is already running");
- }
- if (state === GenStateCompleted) {
- if (method === "throw") {
- throw arg;
- }
- // Be forgiving, per 25.3.3.3.3 of the spec:
- // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume
- return doneResult();
- }
- context.method = method;
- context.arg = arg;
- while (true) {
- var delegate = context.delegate;
- if (delegate) {
- var delegateResult = maybeInvokeDelegate(delegate, context);
- if (delegateResult) {
- if (delegateResult === ContinueSentinel) continue;
- return delegateResult;
- }
- }
- if (context.method === "next") {
- // Setting context._sent for legacy support of Babel's
- // function.sent implementation.
- context.sent = context._sent = context.arg;
- } else if (context.method === "throw") {
- if (state === GenStateSuspendedStart) {
- state = GenStateCompleted;
- throw context.arg;
- }
- context.dispatchException(context.arg);
- } else if (context.method === "return") {
- context.abrupt("return", context.arg);
- }
- state = GenStateExecuting;
- var record = tryCatch(innerFn, self, context);
- if (record.type === "normal") {
- // If an exception is thrown from innerFn, we leave state ===
- // GenStateExecuting and loop back for another invocation.
- state = context.done
- ? GenStateCompleted
- : GenStateSuspendedYield;
- if (record.arg === ContinueSentinel) {
- continue;
- }
- return {
- value: record.arg,
- done: context.done
- };
- } else if (record.type === "throw") {
- state = GenStateCompleted;
- // Dispatch the exception by looping back around to the
- // context.dispatchException(context.arg) call above.
- context.method = "throw";
- context.arg = record.arg;
- }
- }
- };
- }
- // Call delegate.iterator[context.method](context.arg) and handle the
- // result, either by returning a { value, done } result from the
- // delegate iterator, or by modifying context.method and context.arg,
- // setting context.delegate to null, and returning the ContinueSentinel.
- function maybeInvokeDelegate(delegate, context) {
- var method = delegate.iterator[context.method];
- if (method === undefined) {
- // A .throw or .return when the delegate iterator has no .throw
- // method always terminates the yield* loop.
- context.delegate = null;
- if (context.method === "throw") {
- if (delegate.iterator.return) {
- // If the delegate iterator has a return method, give it a
- // chance to clean up.
- context.method = "return";
- context.arg = undefined;
- maybeInvokeDelegate(delegate, context);
- if (context.method === "throw") {
- // If maybeInvokeDelegate(context) changed context.method from
- // "return" to "throw", let that override the TypeError below.
- return ContinueSentinel;
- }
- }
- context.method = "throw";
- context.arg = new TypeError(
- "The iterator does not provide a 'throw' method");
- }
- return ContinueSentinel;
- }
- var record = tryCatch(method, delegate.iterator, context.arg);
- if (record.type === "throw") {
- context.method = "throw";
- context.arg = record.arg;
- context.delegate = null;
- return ContinueSentinel;
- }
- var info = record.arg;
- if (! info) {
- context.method = "throw";
- context.arg = new TypeError("iterator result is not an object");
- context.delegate = null;
- return ContinueSentinel;
- }
- if (info.done) {
- // Assign the result of the finished delegate to the temporary
- // variable specified by delegate.resultName (see delegateYield).
- context[delegate.resultName] = info.value;
- // Resume execution at the desired location (see delegateYield).
- context.next = delegate.nextLoc;
- // If context.method was "throw" but the delegate handled the
- // exception, let the outer generator proceed normally. If
- // context.method was "next", forget context.arg since it has been
- // "consumed" by the delegate iterator. If context.method was
- // "return", allow the original .return call to continue in the
- // outer generator.
- if (context.method !== "return") {
- context.method = "next";
- context.arg = undefined;
- }
- } else {
- // Re-yield the result returned by the delegate method.
- return info;
- }
- // The delegate iterator is finished, so forget it and continue with
- // the outer generator.
- context.delegate = null;
- return ContinueSentinel;
- }
- // Define Generator.prototype.{next,throw,return} in terms of the
- // unified ._invoke helper method.
- defineIteratorMethods(Gp);
- Gp[toStringTagSymbol] = "Generator";
- // A Generator should always return itself as the iterator object when the
- // @@iterator function is called on it. Some browsers' implementations of the
- // iterator prototype chain incorrectly implement this, causing the Generator
- // object to not be returned from this call. This ensures that doesn't happen.
- // See https://github.com/facebook/regenerator/issues/274 for more details.
- Gp[iteratorSymbol] = function() {
- return this;
- };
- Gp.toString = function() {
- return "[object Generator]";
- };
- function pushTryEntry(locs) {
- var entry = { tryLoc: locs[0] };
- if (1 in locs) {
- entry.catchLoc = locs[1];
- }
- if (2 in locs) {
- entry.finallyLoc = locs[2];
- entry.afterLoc = locs[3];
- }
- this.tryEntries.push(entry);
- }
- function resetTryEntry(entry) {
- var record = entry.completion || {};
- record.type = "normal";
- delete record.arg;
- entry.completion = record;
- }
- function Context(tryLocsList) {
- // The root entry object (effectively a try statement without a catch
- // or a finally block) gives us a place to store values thrown from
- // locations where there is no enclosing try statement.
- this.tryEntries = [{ tryLoc: "root" }];
- tryLocsList.forEach(pushTryEntry, this);
- this.reset(true);
- }
- runtime.keys = function(object) {
- var keys = [];
- for (var key in object) {
- keys.push(key);
- }
- keys.reverse();
- // Rather than returning an object with a next method, we keep
- // things simple and return the next function itself.
- return function next() {
- while (keys.length) {
- var key = keys.pop();
- if (key in object) {
- next.value = key;
- next.done = false;
- return next;
- }
- }
- // To avoid creating an additional object, we just hang the .value
- // and .done properties off the next function object itself. This
- // also ensures that the minifier will not anonymize the function.
- next.done = true;
- return next;
- };
- };
- function values(iterable) {
- if (iterable) {
- var iteratorMethod = iterable[iteratorSymbol];
- if (iteratorMethod) {
- return iteratorMethod.call(iterable);
- }
- if (typeof iterable.next === "function") {
- return iterable;
- }
- if (!isNaN(iterable.length)) {
- var i = -1, next = function next() {
- while (++i < iterable.length) {
- if (hasOwn.call(iterable, i)) {
- next.value = iterable[i];
- next.done = false;
- return next;
- }
- }
- next.value = undefined;
- next.done = true;
- return next;
- };
- return next.next = next;
- }
- }
- // Return an iterator with no values.
- return { next: doneResult };
- }
- runtime.values = values;
- function doneResult() {
- return { value: undefined, done: true };
- }
- Context.prototype = {
- constructor: Context,
- reset: function(skipTempReset) {
- this.prev = 0;
- this.next = 0;
- // Resetting context._sent for legacy support of Babel's
- // function.sent implementation.
- this.sent = this._sent = undefined;
- this.done = false;
- this.delegate = null;
- this.method = "next";
- this.arg = undefined;
- this.tryEntries.forEach(resetTryEntry);
- if (!skipTempReset) {
- for (var name in this) {
- // Not sure about the optimal order of these conditions:
- if (name.charAt(0) === "t" &&
- hasOwn.call(this, name) &&
- !isNaN(+name.slice(1))) {
- this[name] = undefined;
- }
- }
- }
- },
- stop: function() {
- this.done = true;
- var rootEntry = this.tryEntries[0];
- var rootRecord = rootEntry.completion;
- if (rootRecord.type === "throw") {
- throw rootRecord.arg;
- }
- return this.rval;
- },
- dispatchException: function(exception) {
- if (this.done) {
- throw exception;
- }
- var context = this;
- function handle(loc, caught) {
- record.type = "throw";
- record.arg = exception;
- context.next = loc;
- if (caught) {
- // If the dispatched exception was caught by a catch block,
- // then let that catch block handle the exception normally.
- context.method = "next";
- context.arg = undefined;
- }
- return !! caught;
- }
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- var record = entry.completion;
- if (entry.tryLoc === "root") {
- // Exception thrown outside of any try block that could handle
- // it, so set the completion value of the entire function to
- // throw the exception.
- return handle("end");
- }
- if (entry.tryLoc <= this.prev) {
- var hasCatch = hasOwn.call(entry, "catchLoc");
- var hasFinally = hasOwn.call(entry, "finallyLoc");
- if (hasCatch && hasFinally) {
- if (this.prev < entry.catchLoc) {
- return handle(entry.catchLoc, true);
- } else if (this.prev < entry.finallyLoc) {
- return handle(entry.finallyLoc);
- }
- } else if (hasCatch) {
- if (this.prev < entry.catchLoc) {
- return handle(entry.catchLoc, true);
- }
- } else if (hasFinally) {
- if (this.prev < entry.finallyLoc) {
- return handle(entry.finallyLoc);
- }
- } else {
- throw new Error("try statement without catch or finally");
- }
- }
- }
- },
- abrupt: function(type, arg) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- if (entry.tryLoc <= this.prev &&
- hasOwn.call(entry, "finallyLoc") &&
- this.prev < entry.finallyLoc) {
- var finallyEntry = entry;
- break;
- }
- }
- if (finallyEntry &&
- (type === "break" ||
- type === "continue") &&
- finallyEntry.tryLoc <= arg &&
- arg <= finallyEntry.finallyLoc) {
- // Ignore the finally entry if control is not jumping to a
- // location outside the try/catch block.
- finallyEntry = null;
- }
- var record = finallyEntry ? finallyEntry.completion : {};
- record.type = type;
- record.arg = arg;
- if (finallyEntry) {
- this.method = "next";
- this.next = finallyEntry.finallyLoc;
- return ContinueSentinel;
- }
- return this.complete(record);
- },
- complete: function(record, afterLoc) {
- if (record.type === "throw") {
- throw record.arg;
- }
- if (record.type === "break" ||
- record.type === "continue") {
- this.next = record.arg;
- } else if (record.type === "return") {
- this.rval = this.arg = record.arg;
- this.method = "return";
- this.next = "end";
- } else if (record.type === "normal" && afterLoc) {
- this.next = afterLoc;
- }
- return ContinueSentinel;
- },
- finish: function(finallyLoc) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- if (entry.finallyLoc === finallyLoc) {
- this.complete(entry.completion, entry.afterLoc);
- resetTryEntry(entry);
- return ContinueSentinel;
- }
- }
- },
- "catch": function(tryLoc) {
- for (var i = this.tryEntries.length - 1; i >= 0; --i) {
- var entry = this.tryEntries[i];
- if (entry.tryLoc === tryLoc) {
- var record = entry.completion;
- if (record.type === "throw") {
- var thrown = record.arg;
- resetTryEntry(entry);
- }
- return thrown;
- }
- }
- // The context.catch method must only be called with a location
- // argument that corresponds to a known catch block.
- throw new Error("illegal catch attempt");
- },
- delegateYield: function(iterable, resultName, nextLoc) {
- this.delegate = {
- iterator: values(iterable),
- resultName: resultName,
- nextLoc: nextLoc
- };
- if (this.method === "next") {
- // Deliberately forget the last sent value so that we don't
- // accidentally pass it on to the delegate.
- this.arg = undefined;
- }
- return ContinueSentinel;
- }
- };
- })(
- // In sloppy mode, unbound `this` refers to the global object, fallback to
- // Function constructor if we're in global strict mode. That is sadly a form
- // of indirect eval which violates Content Security Policy.
- (function() {
- return this || (typeof self === "object" && self);
- })() || Function("return this")()
- );
- /***/ }),
- /***/ 26:
- /*!*****************************************!*\
- !*** D:/gsxm/ezred/utils/loginUtils.js ***!
- \*****************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.getActionPage = getActionPage;exports.getPageUrl = getPageUrl;exports.interceptor = interceptor;exports.saveUrl = saveUrl; // 获取当前页面
- function getActionPage() {
- var pages = getCurrentPages();
- return pages[pages.length - 1];
- }
- // 处理分享链接地址
- function getPageUrl(config) {
- var page = getActionPage();
- var path = '/' + page.route;
- var url = '';
- // 获取对象可枚举键值列表
- var objKeys = Object.keys(page.options);
- // 判断有无传值
- if (objKeys.length > 0) {
- // 循环赋值对象数据
- for (var a in page.options) {
- // 判断有无邀请人
- if (a != 'spread') {
- url += a + "=" + page.options[a] + "&";
- }
- }
- path += '?' + url.substr(0, url.length - 1);
- }
- // 返回处理邀请人后的邀请地址
- return path;
- }
- //登录拦截
- function interceptor() {
- var pages = getActionPage();
- // 获取当前页面
- var pageUrl = '/' + pages.route;
- var url = '/pages/login/login';
- if (pageUrl != url) {
- uni.navigateTo({
- url: url });
- }
- }
- // 保存页面
- function saveUrl() {
- // 获取当前页面
- var page = getActionPage();
- // 获取跳转前路由地址
- var path = '/' + page.route;
- var url = '';
- // 获取对象可枚举键值列表
- var objKeys = Object.keys(page.options);
- // 判断有无传值
- if (objKeys.length > 0) {
- // 循环赋值对象数据
- for (var a in page.options) {
- url += a + "=" + page.options[a] + "&";
- }
- path += '?' + url.substr(0, url.length - 1);
- }
- // uni.showModal({
- // title: '地址',
- // content: path,
- // fail: function (res) {
- // console.log(res.errMsg);
- // uni.showModal({
- // title: 'error',
- // content: res.errMsg
- // })
- // }
- // })
- uni.setStorageSync('present', path);
- // // 获取当前页面
- // let page = getActionPage();
- // // 获取跳转前路由地址
- // let path = '/' + page.route;
- // let url = '';
- // // 获取对象可枚举键值列表
- // let objKeys = Object.keys(page.options);
- // // 判断有无传值
- // if (objKeys.length > 0) {
- // // 循环赋值对象数据
- // for (let a in page.options) {
- // url += a + "=" + page.options[a] + "&"
- // }
- // path += '?' + url.substr(0, url.length - 1);
- // }
- // console.log(path,1)
- // uni.setStorageSync('present', path);
- }
- /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
- /***/ }),
- /***/ 27:
- /*!*********************************!*\
- !*** D:/gsxm/ezred/api/user.js ***!
- \*********************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- 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 };}
- // 订单统计信息
- function orderData(data) {
- return (0, _request.default)({
- url: '/api/order/data',
- method: 'get',
- data: data });
- }
- // 获取用户信息
- function userinfo(data) {
- return (0, _request.default)({
- url: '/api/userinfo',
- method: 'get',
- data: data });
- }
- //获取名片信息
- function userinfoid(data) {
- return (0, _request.default)({
- url: '/api/level/recharge',
- method: 'post',
- data: data });
- }
- /***/ }),
- /***/ 28:
- /*!*******************************************!*\
- !*** D:/gsxm/ezred/utils/wxAuthorized.js ***!
- \*******************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- 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);
- var _store = _interopRequireDefault(__webpack_require__(/*! ../store */ 5));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
- // 保存wx对象
- var weixinObj = __webpack_require__(/*! jweixin-module */ 30);
- // 保存分享数据
- var shareData = '';
- // 保存注册返回appId数据
- var appId = '';
- //微信登录
- /**
- * @param {string} 当前页面地址信息
- */
- function loginWinxin() {
- var pages, page, path;
- try {
- pages = getCurrentPages();
- // 获取跳转前页面
- page = pages[pages.length - 1];
- // 获取跳转前路由地址
- path = page.route;
- } catch (e) {
- console.log(e);
- }
- // 判断是否在登录页
- if (path != 'pages/redirect/redirect') {
- setTimeout(function (e) {
- weixinObj.ready(function () {
- console.log('weixinObj.ready');
- // 调用
- try {
- console.log(shareData);
- console.log(path);
- weixinSq(shareData, path);
- } catch (e) {
- console.log(e);
- //TODO handle the exception
- }
- });
- weixinObj.error(function (e) {
- console.log(e);
- });
- }, 10);
- }
- };
- // 微信授权登录
- function weixinSq(data, path) {
- // 微信授权后跳转页面
- try {
- var ul = encodeURIComponent(_store.default.state.baseURL + _store.default.state.urlFile + '/#/pages/redirect/redirect');
- console.log(ul, "ul");
- // 打开微信授权页面
- var url =
- 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
- appId +
- '&redirect_uri=' +
- ul +
- '&response_type=code&scope=snsapi_userinfo&state=' +
- new Date().getTime() +
- '#wechat_redirect';
- console.log(url, "url");
- window.location.href = url;
- } catch (e) {
- console.log(e);
- }
- };
- // 微信注册
- function weixindata(config) {
- // console.log(config);
- //注册微信信息
- var weixinObj = __webpack_require__(/*! jweixin-module */ 30);
- // 保存微信对象到全局仓库
- _store.default.commit('setWeiChatObj', weixinObj);
- console.log(window.location.href);
- console.log('当前注册url地址', window.location.href);
- (0, _wx.wechatConfig)({
- // url: 'pages/applic/location',
- url: _store.default.state.baseURL + _store.default.state.urlFile + '/' }).
- then(function (_ref)
- {var data = _ref.data;
- // uni.showModal({
- // // url: 'http://yyred.igxys.com/index/',
- // title:'地址',
- // content: window.location.href
- // })
- // 保存appId
- _store.default.commit('setWeiChatInfo', data);
- appId = data.appId;
- // 微信信息配置
- weixinObj.config({
- debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
- appId: data.appId, // 必填,企业号的唯一标识,此处填写企业号corpid
- timestamp: data.timestamp, // 必填,生成签名的时间戳
- nonceStr: data.nonceStr, // 必填,生成签名的随机串
- signature: data.signature, // 必填,签名,见附录1
- jsApiList: data.jsApiList // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
- });
- weixinObj.ready(function (e) {
- console.log('分享数据', shareData);
- if (shareData == '') {
- (0, _wx.share)({}).then(function (_ref2)
- {var data = _ref2.data;
- shareData = data.data;
- shareLoad(config);
- });
- } else {
- shareLoad(config);
- }
- });
- }).
- catch(function (e) {
- console.log(e);
- });
- }
- // 加载分享数据
- function shareLoad(config) {
- var mess;
- if (config) {
- mess = {
- link: config.link, // 分享链接
- imgUrl: config.imgUrl,
- desc: config.desc,
- title: config.title,
- success: config.success,
- fail: config.fail || function (e) {
- console.log(e);
- } };
- } else {
- // console.log(window.location.href, 55)
- // let url = window.location.href + '?spread=' + store.state.userInfo.uid;
- var url = window.location.href;
- url = url.replace(/[\?,&]{0,1}from=singlemessage/g, '');
- mess = {
- title: shareData.title,
- link: url, // 分享链接
- imgUrl: shareData.img, // 分享图标
- desc: shareData.synopsis,
- success: function success() {
- },
- fail: function fail(e) {
- console.log(e);
- } };
- }
- // 获取仓库数据
- // 分享好友
- // weixinObj.updateAppMessageShareData(mess);
- weixinObj.onMenuShareAppMessage(mess); // 即将废弃
- // 分享朋友圈
- // weixinObj.updateTimelineShareData(mess)
- weixinObj.onMenuShareTimeline(mess); // 即将废弃
- }
- // 隐藏功能按钮
- function weixinhideMenu(config) {
- console.log(config);
- weixinObj.ready(function (e) {
- weixinObj.hideMenuItems({
- menuList: config // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮,所有menu项见附录3
- });
- });
- }
- // export function getLoca(config) {
- // console.log(config)
- // weixinObj.ready((e) => {
- // weixinObj.getLocation({
- // type: 'wgs84',
- // success: function (res) {
- // config.longitude = res.longitude;
- // config.latitude = res.latitude;
- // uni.showModal({
- // title: '提示',
- // content: res.longitude
- // })
- // console.log('当前位置的经度:' + res.longitude);
- // console.log('当前位置的纬度:' + res.latitude);
- // }
- // });
- // })
- // }
- var _default =
- {
- weixinObj: weixinObj,
- shareData: shareData,
- appId: appId };exports.default = _default;
- /***/ }),
- /***/ 29:
- /*!*******************************!*\
- !*** D:/gsxm/ezred/api/wx.js ***!
- \*******************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- var _request = _interopRequireDefault(__webpack_require__(/*! @/utils/request */ 21));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
- /***/ }),
- /***/ 3:
- /*!***********************************!*\
- !*** (webpack)/buildin/global.js ***!
- \***********************************/
- /*! no static exports found */
- /***/ (function(module, exports) {
- var g;
- // This works in non-strict mode
- g = (function() {
- return this;
- })();
- try {
- // This works if eval is allowed (see CSP)
- g = g || new Function("return this")();
- } catch (e) {
- // This works if the window reference is available
- if (typeof window === "object") g = window;
- }
- // g can still be undefined, but nothing to do about it...
- // We return undefined, instead of nothing here, so it's
- // easier to handle this case. if(!global) { ...}
- module.exports = g;
- /***/ }),
- /***/ 30:
- /*!**************************************************************!*\
- !*** D:/gsxm/ezred/node_modules/jweixin-module/out/index.js ***!
- \**************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- /* 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;});
- /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
- /***/ }),
- /***/ 325:
- /*!*********************************!*\
- !*** D:/gsxm/ezred/api/info.js ***!
- \*********************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- 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 };}
- // 置顶 取消置顶
- function articletop(data) {
- return (0, _request.default)({
- url: '/api/circle/articletop',
- method: 'post',
- data: data });
- }
- // 删除贴子
- function articledel(data) {
- return (0, _request.default)({
- url: '/api/circle/articledel',
- method: 'post',
- data: data });
- }
- // 文章详情
- function details(data, id) {
- return (0, _request.default)({
- url: '/api/article/details/' + id,
- method: 'get',
- data: data });
- }
- //处理文章详情页
- function deconstructArticle(data) {
- if (data) {
- data = data.replace(/<img/g, '<img style="width: 100% !important;height:auto"').replace(
- /<p>\S*<img/g, '<p style="line-height: 0;"><img');
- }
- return data;
- }
- /***/ }),
- /***/ 334:
- /*!**********************************!*\
- !*** D:/gsxm/ezred/api/login.js ***!
- \**********************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- 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 };}
- // 登录
- function login(data) {
- return (0, _request.default)({
- url: '/api/login',
- method: 'post',
- data: data });
- }
- // 注册
- function register(data) {
- return (0, _request.default)({
- url: '/api/register',
- method: 'post',
- data: data });
- }
- // 验证码
- function verify(data) {
- // type=register为注册
- // type=login为登录
- return (0, _request.default)({
- url: '/api/register/verify',
- method: 'post',
- data: data });
- }
- // 获取用户信息
- function getUserInfo(data) {
- return (0, _request.default)({
- url: '/api/userinfo',
- method: 'get',
- data: data });
- }
- // 短信登录
- function loginMobile(data) {
- return (0, _request.default)({
- url: '/api/login/mobile',
- method: 'post',
- data: data });
- }
- /***/ }),
- /***/ 397:
- /*!***********************************************************!*\
- !*** D:/gsxm/ezred/components/js_sdk/xb-copy/uni-copy.js ***!
- \***********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = uniCopy;function uniCopy(content) {
- /**
- * 小程序端 和 app端的复制逻辑
- */
- uni.setClipboardData({
- data: content,
- success: function success() {
- console.log('success');
- return true;
- } });
- /**
- * H5端的复制逻辑
- */
- }
- /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
- /***/ }),
- /***/ 4:
- /*!********************************!*\
- !*** D:/gsxm/ezred/pages.json ***!
- \********************************/
- /*! no static exports found */
- /***/ (function(module, exports) {
- /***/ }),
- /***/ 412:
- /*!***************************************************!*\
- !*** D:/gsxm/ezred/components/uni-popup/popup.js ***!
- \***************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- 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 };}
- // 定义 type 类型:弹出类型:top/bottom/center
- var config = {
- // 顶部弹出
- top: 'top',
- // 底部弹出
- bottom: 'bottom',
- // 居中弹出
- center: 'center',
- // 消息提示
- message: 'top',
- // 对话框
- dialog: 'center',
- // 分享
- share: 'bottom' };var _default =
- {
- data: function data() {
- return {
- config: config };
- },
- mixins: [_message.default] };exports.default = _default;
- /***/ }),
- /***/ 413:
- /*!*****************************************************!*\
- !*** D:/gsxm/ezred/components/uni-popup/message.js ***!
- \*****************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _default = {
- created: function created() {
- if (this.type === 'message') {
- // 不显示遮罩
- this.maskShow = false;
- // 获取子组件对象
- this.childrenMsg = null;
- }
- },
- methods: {
- customOpen: function customOpen() {
- if (this.childrenMsg) {
- this.childrenMsg.open();
- }
- },
- customClose: function customClose() {
- if (this.childrenMsg) {
- this.childrenMsg.close();
- }
- } } };exports.default = _default;
- /***/ }),
- /***/ 435:
- /*!****************************************************************!*\
- !*** D:/gsxm/ezred/components/jyf-parser/libs/MpHtmlParser.js ***!
- \****************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- /* WEBPACK VAR INJECTION */(function(uni) {/**
- * html 解析器
- * @tutorial https://github.com/jin-yufeng/Parser
- * @version 20200728
- * @author JinYufeng
- * @listens MIT
- */
- var cfg = __webpack_require__(/*! ./config.js */ 436),
- blankChar = cfg.blankChar,
- CssHandler = __webpack_require__(/*! ./CssHandler.js */ 437),
- windowWidth = uni.getSystemInfoSync().windowWidth;
- var emoji;
- function MpHtmlParser(data) {var _this = this;var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- this.attrs = {};
- this.CssHandler = new CssHandler(options.tagStyle, windowWidth);
- this.data = data;
- this.domain = options.domain;
- this.DOM = [];
- this.i = this.start = this.audioNum = this.imgNum = this.videoNum = 0;
- options.prot = (this.domain || '').includes('://') ? this.domain.split('://')[0] : 'http';
- this.options = options;
- this.state = this.Text;
- this.STACK = [];
- // 工具函数
- this.bubble = function () {
- for (var i = _this.STACK.length, item; item = _this.STACK[--i];) {
- if (cfg.richOnlyTags[item.name]) {
- if (item.name == 'table' && !Object.hasOwnProperty.call(item, 'c')) item.c = 1;
- return false;
- }
- item.c = 1;
- }
- return true;
- };
- this.decode = function (val, amp) {
- var i = -1,
- j,en;
- while (1) {
- if ((i = val.indexOf('&', i + 1)) == -1) break;
- if ((j = val.indexOf(';', i + 2)) == -1) break;
- if (val[i + 1] == '#') {
- en = parseInt((val[i + 2] == 'x' ? '0' : '') + val.substring(i + 2, j));
- if (!isNaN(en)) val = val.substr(0, i) + String.fromCharCode(en) + val.substr(j + 1);
- } else {
- en = val.substring(i + 1, j);
- if (cfg.entities[en] || en == amp)
- val = val.substr(0, i) + (cfg.entities[en] || '&') + val.substr(j + 1);
- }
- }
- return val;
- };
- this.getUrl = function (url) {
- if (url[0] == '/') {
- if (url[1] == '/') url = _this.options.prot + ':' + url;else
- if (_this.domain) url = _this.domain + url;
- } else if (_this.domain && url.indexOf('data:') != 0 && !url.includes('://'))
- url = _this.domain + '/' + url;
- return url;
- };
- this.isClose = function () {return _this.data[_this.i] == '>' || _this.data[_this.i] == '/' && _this.data[_this.i + 1] == '>';};
- this.section = function () {return _this.data.substring(_this.start, _this.i);};
- this.parent = function () {return _this.STACK[_this.STACK.length - 1];};
- this.siblings = function () {return _this.STACK.length ? _this.parent().children : _this.DOM;};
- }
- MpHtmlParser.prototype.parse = function () {
- if (emoji) this.data = emoji.parseEmoji(this.data);
- for (var c; c = this.data[this.i]; this.i++) {
- this.state(c);}
- if (this.state == this.Text) this.setText();
- while (this.STACK.length) {this.popNode(this.STACK.pop());}
- return this.DOM;
- };
- // 设置属性
- MpHtmlParser.prototype.setAttr = function () {
- var name = this.attrName.toLowerCase(),
- val = this.attrVal;
- if (cfg.boolAttrs[name]) this.attrs[name] = 'T';else
- if (val) {
- if (name == 'src' || name == 'data-src' && !this.attrs.src) this.attrs.src = this.getUrl(this.decode(val, 'amp'));else
- if (name == 'href' || name == 'style') this.attrs[name] = this.decode(val, 'amp');else
- if (name.substr(0, 5) != 'data-') this.attrs[name] = val;
- }
- this.attrVal = '';
- while (blankChar[this.data[this.i]]) {this.i++;}
- if (this.isClose()) this.setNode();else
- {
- this.start = this.i;
- this.state = this.AttrName;
- }
- };
- // 设置文本节点
- MpHtmlParser.prototype.setText = function () {
- var back,text = this.section();
- if (!text) return;
- text = cfg.onText && cfg.onText(text, function () {return back = true;}) || text;
- if (back) {
- this.data = this.data.substr(0, this.start) + text + this.data.substr(this.i);
- var j = this.start + text.length;
- for (this.i = this.start; this.i < j; this.i++) {this.state(this.data[this.i]);}
- return;
- }
- if (!this.pre) {
- // 合并空白符
- var flag,tmp = [];
- for (var i = text.length, c; c = text[--i];) {
- if (!blankChar[c]) {
- tmp.unshift(c);
- if (!flag) flag = 1;
- } else {
- if (tmp[0] != ' ') tmp.unshift(' ');
- if (c == '\n' && flag == void 0) flag = 0;
- }}
- if (flag == 0) return;
- text = tmp.join('');
- }
- this.siblings().push({
- type: 'text',
- text: this.decode(text) });
- };
- // 设置元素节点
- MpHtmlParser.prototype.setNode = function () {
- var node = {
- name: this.tagName.toLowerCase(),
- attrs: this.attrs },
- close = cfg.selfClosingTags[node.name];
- if (this.options.nodes.length) node.type = 'node';
- this.attrs = {};
- if (!cfg.ignoreTags[node.name]) {
- // 处理属性
- var attrs = node.attrs,
- style = this.CssHandler.match(node.name, attrs, node) + (attrs.style || ''),
- styleObj = {};
- if (attrs.id) {
- if (this.options.compress & 1) attrs.id = void 0;else
- if (this.options.useAnchor) this.bubble();
- }
- if (this.options.compress & 2 && attrs.class) attrs.class = void 0;
- switch (node.name) {
- case 'a':
- case 'ad':
- this.bubble();
- break;
- case 'font':
- if (attrs.color) {
- styleObj['color'] = attrs.color;
- attrs.color = void 0;
- }
- if (attrs.face) {
- styleObj['font-family'] = attrs.face;
- attrs.face = void 0;
- }
- if (attrs.size) {
- var size = parseInt(attrs.size);
- if (size < 1) size = 1;else
- if (size > 7) size = 7;
- var map = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large'];
- styleObj['font-size'] = map[size - 1];
- attrs.size = void 0;
- }
- break;
- case 'embed':
- var src = node.attrs.src || '',
- type = node.attrs.type || '';
- if (type.includes('video') || src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8'))
- node.name = 'video';else
- if (type.includes('audio') || src.includes('.m4a') || src.includes('.wav') || src.includes('.mp3') || src.includes(
- '.aac'))
- node.name = 'audio';else
- break;
- if (node.attrs.autostart)
- node.attrs.autoplay = 'T';
- node.attrs.controls = 'T';
- case 'video':
- case 'audio':
- if (!attrs.id) attrs.id = node.name + ++this["".concat(node.name, "Num")];else
- this["".concat(node.name, "Num")]++;
- if (node.name == 'video') {
- if (this.videoNum > 3)
- node.lazyLoad = 1;
- if (attrs.width) {
- styleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px');
- attrs.width = void 0;
- }
- if (attrs.height) {
- styleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px');
- attrs.height = void 0;
- }
- }
- if (!attrs.controls && !attrs.autoplay) attrs.controls = 'T';
- attrs.source = [];
- if (attrs.src) {
- attrs.source.push(attrs.src);
- attrs.src = void 0;
- }
- this.bubble();
- break;
- case 'td':
- case 'th':
- if (attrs.colspan || attrs.rowspan)
- for (var k = this.STACK.length, item; item = this.STACK[--k];) {
- if (item.name == 'table') {
- item.c = void 0;
- break;
- }}}
- if (attrs.align) {
- styleObj['text-align'] = attrs.align;
- attrs.align = void 0;
- }
- // 压缩 style
- var styles = style.split(';');
- style = '';
- for (var i = 0, len = styles.length; i < len; i++) {
- var info = styles[i].split(':');
- if (info.length < 2) continue;
- var _key = info[0].trim().toLowerCase(),
- _value = info.slice(1).join(':').trim();
- if (_value[0] == '-' || _value.includes('safe'))
- style += ";".concat(_key, ":").concat(_value);else
- if (!styleObj[_key] || _value.includes('import') || !styleObj[_key].includes('import'))
- styleObj[_key] = _value;
- }
- if (node.name == 'img') {
- if (attrs.src && !attrs.ignore) {
- if (this.bubble())
- attrs.i = (this.imgNum++).toString();else
- attrs.ignore = 'T';
- }
- if (attrs.ignore) {
- style += ';-webkit-touch-callout:none';
- styleObj['max-width'] = '100%';
- }
- var width;
- if (styleObj.width) width = styleObj.width;else
- if (attrs.width) width = attrs.width.includes('%') ? attrs.width : attrs.width + 'px';
- if (width) {
- styleObj.width = width;
- attrs.width = '100%';
- if (parseInt(width) > windowWidth) {
- styleObj.height = '';
- if (attrs.height) attrs.height = void 0;
- }
- }
- if (styleObj.height) {
- attrs.height = styleObj.height;
- styleObj.height = '';
- } else if (attrs.height && !attrs.height.includes('%'))
- attrs.height += 'px';
- }
- for (var key in styleObj) {
- var value = styleObj[key];
- if (!value) continue;
- if (key.includes('flex') || key == 'order' || key == 'self-align') node.c = 1;
- // 填充链接
- if (value.includes('url')) {
- var j = value.indexOf('(');
- if (j++ != -1) {
- while (value[j] == '"' || value[j] == "'" || blankChar[value[j]]) {j++;}
- value = value.substr(0, j) + this.getUrl(value.substr(j));
- }
- }
- // 转换 rpx
- else if (value.includes('rpx'))
- value = value.replace(/[0-9.]+\s*rpx/g, function ($) {return parseFloat($) * windowWidth / 750 + 'px';});else
- if (key == 'white-space' && value.includes('pre') && !close)
- this.pre = node.pre = true;
- style += ";".concat(key, ":").concat(value);
- }
- style = style.substr(1);
- if (style) attrs.style = style;
- if (!close) {
- node.children = [];
- if (node.name == 'pre' && cfg.highlight) {
- this.remove(node);
- this.pre = node.pre = true;
- }
- this.siblings().push(node);
- this.STACK.push(node);
- } else if (!cfg.filter || cfg.filter(node, this) != false)
- this.siblings().push(node);
- } else {
- if (!close) this.remove(node);else
- if (node.name == 'source') {
- var parent = this.parent();
- if (parent && (parent.name == 'video' || parent.name == 'audio') && node.attrs.src)
- parent.attrs.source.push(node.attrs.src);
- } else if (node.name == 'base' && !this.domain) this.domain = node.attrs.href;
- }
- if (this.data[this.i] == '/') this.i++;
- this.start = this.i + 1;
- this.state = this.Text;
- };
- // 移除标签
- MpHtmlParser.prototype.remove = function (node) {var _this2 = this;
- var name = node.name,
- j = this.i;
- // 处理 svg
- var handleSvg = function handleSvg() {
- var src = _this2.data.substring(j, _this2.i + 1);
- if (!node.attrs.xmlns) src = ' xmlns="http://www.w3.org/2000/svg"' + src;
- var i = j;
- while (_this2.data[j] != '<') {j--;}
- src = _this2.data.substring(j, i).replace("viewbox", "viewBox") + src;
- var parent = _this2.parent();
- if (node.attrs.width == '100%' && parent && (parent.attrs.style || '').includes('inline'))
- parent.attrs.style = 'width:300px;max-width:100%;' + parent.attrs.style;
- _this2.siblings().push({
- name: 'img',
- attrs: {
- src: 'data:image/svg+xml;utf8,' + src.replace(/#/g, '%23'),
- style: (/vertical[^;]+/.exec(node.attrs.style) || []).shift(),
- ignore: 'T' } });
- };
- if (node.name == 'svg' && this.data[j] == '/') return handleSvg(this.i++);
- while (1) {
- if ((this.i = this.data.indexOf('</', this.i + 1)) == -1) {
- if (name == 'pre' || name == 'svg') this.i = j;else
- this.i = this.data.length;
- return;
- }
- this.start = this.i += 2;
- while (!blankChar[this.data[this.i]] && !this.isClose()) {this.i++;}
- if (this.section().toLowerCase() == name) {
- // 代码块高亮
- if (name == 'pre') {
- this.data = this.data.substr(0, j + 1) + cfg.highlight(this.data.substring(j + 1, this.i - 5), node.attrs) + this.data.
- substr(this.i - 5);
- return this.i = j;
- } else if (name == 'style')
- this.CssHandler.getStyle(this.data.substring(j + 1, this.i - 7));else
- if (name == 'title')
- this.DOM.title = this.data.substring(j + 1, this.i - 7);
- if ((this.i = this.data.indexOf('>', this.i)) == -1) this.i = this.data.length;
- if (name == 'svg') handleSvg();
- return;
- }
- }
- };
- // 节点出栈处理
- MpHtmlParser.prototype.popNode = function (node) {
- // 空白符处理
- if (node.pre) {
- node.pre = this.pre = void 0;
- for (var i = this.STACK.length; i--;) {
- if (this.STACK[i].pre)
- this.pre = true;}
- }
- var siblings = this.siblings(),
- len = siblings.length,
- childs = node.children;
- if (node.name == 'head' || cfg.filter && cfg.filter(node, this) == false)
- return siblings.pop();
- var attrs = node.attrs;
- // 替换一些标签名
- if (cfg.blockTags[node.name]) node.name = 'div';else
- if (!cfg.trustTags[node.name]) node.name = 'span';
- // 处理列表
- if (node.c && (node.name == 'ul' || node.name == 'ol')) {
- if ((node.attrs.style || '').includes('list-style:none')) {
- for (var _i = 0, child; child = childs[_i++];) {
- if (child.name == 'li')
- child.name = 'div';}
- } else if (node.name == 'ul') {
- var floor = 1;
- for (var _i2 = this.STACK.length; _i2--;) {
- if (this.STACK[_i2].name == 'ul') floor++;}
- if (floor != 1)
- for (var _i3 = childs.length; _i3--;) {
- childs[_i3].floor = floor;}
- } else {
- for (var _i4 = 0, num = 1, _child; _child = childs[_i4++];) {
- if (_child.name == 'li') {
- _child.type = 'ol';
- _child.num = function (num, type) {
- if (type == 'a') return String.fromCharCode(97 + (num - 1) % 26);
- if (type == 'A') return String.fromCharCode(65 + (num - 1) % 26);
- if (type == 'i' || type == 'I') {
- num = (num - 1) % 99 + 1;
- var one = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'],
- ten = ['X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'],
- res = (ten[Math.floor(num / 10) - 1] || '') + (one[num % 10 - 1] || '');
- if (type == 'i') return res.toLowerCase();
- return res;
- }
- return num;
- }(num++, attrs.type) + '.';
- }}
- }
- }
- // 处理表格的边框
- if (node.name == 'table') {
- var padding = attrs.cellpadding,
- spacing = attrs.cellspacing,
- border = attrs.border;
- if (node.c) {
- this.bubble();
- attrs.style = (attrs.style || '') + ';display:table';
- if (!padding) padding = 2;
- if (!spacing) spacing = 2;
- }
- if (border) attrs.style = "border:".concat(border, "px solid gray;").concat(attrs.style || '');
- if (spacing) attrs.style = "border-spacing:".concat(spacing, "px;").concat(attrs.style || '');
- if (border || padding || node.c)
- (function f(ns) {
- for (var i = 0, n; n = ns[i]; i++) {
- if (n.type == 'text') continue;
- var style = n.attrs.style || '';
- if (node.c && n.name[0] == 't') {
- n.c = 1;
- style += ';display:table-' + (n.name == 'th' || n.name == 'td' ? 'cell' : n.name == 'tr' ? 'row' : 'row-group');
- }
- if (n.name == 'th' || n.name == 'td') {
- if (border) style = "border:".concat(border, "px solid gray;").concat(style);
- if (padding) style = "padding:".concat(padding, "px;").concat(style);
- } else f(n.children || []);
- if (style) n.attrs.style = style;
- }
- })(childs);
- if (this.options.autoscroll) {
- var table = Object.assign({}, node);
- node.name = 'div';
- node.attrs = {
- style: 'overflow:scroll' };
- node.children = [table];
- }
- }
- this.CssHandler.pop && this.CssHandler.pop(node);
- // 自动压缩
- if (node.name == 'div' && !Object.keys(attrs).length && childs.length == 1 && childs[0].name == 'div')
- siblings[len - 1] = childs[0];
- };
- // 状态机
- MpHtmlParser.prototype.Text = function (c) {
- if (c == '<') {
- var next = this.data[this.i + 1],
- isLetter = function isLetter(c) {return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';};
- if (isLetter(next)) {
- this.setText();
- this.start = this.i + 1;
- this.state = this.TagName;
- } else if (next == '/') {
- this.setText();
- if (isLetter(this.data[++this.i + 1])) {
- this.start = this.i + 1;
- this.state = this.EndTag;
- } else this.Comment();
- } else if (next == '!' || next == '?') {
- this.setText();
- this.Comment();
- }
- }
- };
- MpHtmlParser.prototype.Comment = function () {
- var key;
- if (this.data.substring(this.i + 2, this.i + 4) == '--') key = '-->';else
- if (this.data.substring(this.i + 2, this.i + 9) == '[CDATA[') key = ']]>';else
- key = '>';
- if ((this.i = this.data.indexOf(key, this.i + 2)) == -1) this.i = this.data.length;else
- this.i += key.length - 1;
- this.start = this.i + 1;
- this.state = this.Text;
- };
- MpHtmlParser.prototype.TagName = function (c) {
- if (blankChar[c]) {
- this.tagName = this.section();
- while (blankChar[this.data[this.i]]) {this.i++;}
- if (this.isClose()) this.setNode();else
- {
- this.start = this.i;
- this.state = this.AttrName;
- }
- } else if (this.isClose()) {
- this.tagName = this.section();
- this.setNode();
- }
- };
- MpHtmlParser.prototype.AttrName = function (c) {
- if (c == '=' || blankChar[c] || this.isClose()) {
- this.attrName = this.section();
- if (blankChar[c])
- while (blankChar[this.data[++this.i]]) {;}
- if (this.data[this.i] == '=') {
- while (blankChar[this.data[++this.i]]) {;}
- this.start = this.i--;
- this.state = this.AttrValue;
- } else this.setAttr();
- }
- };
- MpHtmlParser.prototype.AttrValue = function (c) {
- if (c == '"' || c == "'") {
- this.start++;
- if ((this.i = this.data.indexOf(c, this.i + 1)) == -1) return this.i = this.data.length;
- this.attrVal = this.section();
- this.i++;
- } else {
- for (; !blankChar[this.data[this.i]] && !this.isClose(); this.i++) {;}
- this.attrVal = this.section();
- }
- this.setAttr();
- };
- MpHtmlParser.prototype.EndTag = function (c) {
- if (blankChar[c] || c == '>' || c == '/') {
- var name = this.section().toLowerCase();
- for (var i = this.STACK.length; i--;) {
- if (this.STACK[i].name == name) break;}
- if (i != -1) {
- var node;
- while ((node = this.STACK.pop()).name != name) {this.popNode(node);}
- this.popNode(node);
- } else if (name == 'p' || name == 'br')
- this.siblings().push({
- name: name,
- attrs: {} });
- this.i = this.data.indexOf('>', this.i);
- this.start = this.i + 1;
- if (this.i == -1) this.i = this.data.length;else
- this.state = this.Text;
- }
- };
- module.exports = MpHtmlParser;
- /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
- /***/ }),
- /***/ 436:
- /*!**********************************************************!*\
- !*** D:/gsxm/ezred/components/jyf-parser/libs/config.js ***!
- \**********************************************************/
- /*! no static exports found */
- /***/ (function(module, exports) {
- /* 配置文件 */
- var cfg = {
- // 出错占位图
- errorImg: null,
- // 过滤器函数
- filter: null,
- // 代码高亮函数
- highlight: null,
- // 文本处理函数
- onText: null,
- // 实体编码列表
- entities: {
- quot: '"',
- apos: "'",
- semi: ';',
- nbsp: '\xA0',
- ensp: "\u2002",
- emsp: "\u2003",
- ndash: '–',
- mdash: '—',
- middot: '·',
- lsquo: '‘',
- rsquo: '’',
- ldquo: '“',
- rdquo: '”',
- bull: '•',
- hellip: '…' },
- blankChar: makeMap(' ,\xA0,\t,\r,\n,\f'),
- boolAttrs: makeMap('allowfullscreen,autoplay,autostart,controls,ignore,loop,muted'),
- // 块级标签,将被转为 div
- blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,pre,section'),
- // 将被移除的标签
- ignoreTags: makeMap('area,base,canvas,frame,iframe,input,link,map,meta,param,script,source,style,svg,textarea,title,track,wbr'),
- // 只能被 rich-text 显示的标签
- richOnlyTags: makeMap('a,colgroup,fieldset,legend,table'),
- // 自闭合的标签
- selfClosingTags: makeMap('area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr'),
- // 信任的标签
- 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'),
- // 默认的标签样式
- userAgentStyles: {
- address: 'font-style:italic',
- big: 'display:inline;font-size:1.2em',
- blockquote: 'background-color:#f6f6f6;border-left:3px solid #dbdbdb;color:#6c6c6c;padding:5px 0 5px 10px',
- caption: 'display:table-caption;text-align:center',
- center: 'text-align:center',
- cite: 'font-style:italic',
- dd: 'margin-left:40px',
- mark: 'background-color:yellow',
- pre: 'font-family:monospace;white-space:pre;overflow:scroll',
- s: 'text-decoration:line-through',
- small: 'display:inline;font-size:0.8em',
- u: 'text-decoration:underline' } };
- function makeMap(str) {
- var map = Object.create(null),
- list = str.split(',');
- for (var i = list.length; i--;) {
- map[list[i]] = true;}
- return map;
- }
- module.exports = cfg;
- /***/ }),
- /***/ 437:
- /*!**************************************************************!*\
- !*** D:/gsxm/ezred/components/jyf-parser/libs/CssHandler.js ***!
- \**************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- var cfg = __webpack_require__(/*! ./config.js */ 436),
- isLetter = function isLetter(c) {return c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z';};
- function CssHandler(tagStyle) {
- var styles = Object.assign(Object.create(null), cfg.userAgentStyles);
- for (var item in tagStyle) {
- styles[item] = (styles[item] ? styles[item] + ';' : '') + tagStyle[item];}
- this.styles = styles;
- }
- CssHandler.prototype.getStyle = function (data) {
- this.styles = new parser(data, this.styles).parse();
- };
- CssHandler.prototype.match = function (name, attrs) {
- var tmp,matched = (tmp = this.styles[name]) ? tmp + ';' : '';
- if (attrs.class) {
- var items = attrs.class.split(' ');
- for (var i = 0, item; item = items[i]; i++) {
- if (tmp = this.styles['.' + item])
- matched += tmp + ';';}
- }
- if (tmp = this.styles['#' + attrs.id])
- matched += tmp + ';';
- return matched;
- };
- module.exports = CssHandler;
- function parser(data, init) {
- this.data = data;
- this.floor = 0;
- this.i = 0;
- this.list = [];
- this.res = init;
- this.state = this.Space;
- }
- parser.prototype.parse = function () {
- for (var c; c = this.data[this.i]; this.i++) {
- this.state(c);}
- return this.res;
- };
- parser.prototype.section = function () {
- return this.data.substring(this.start, this.i);
- };
- // 状态机
- parser.prototype.Space = function (c) {
- if (c == '.' || c == '#' || isLetter(c)) {
- this.start = this.i;
- this.state = this.Name;
- } else if (c == '/' && this.data[this.i + 1] == '*')
- this.Comment();else
- if (!cfg.blankChar[c] && c != ';')
- this.state = this.Ignore;
- };
- parser.prototype.Comment = function () {
- this.i = this.data.indexOf('*/', this.i) + 1;
- if (!this.i) this.i = this.data.length;
- this.state = this.Space;
- };
- parser.prototype.Ignore = function (c) {
- if (c == '{') this.floor++;else
- if (c == '}' && ! --this.floor) this.state = this.Space;
- };
- parser.prototype.Name = function (c) {
- if (cfg.blankChar[c]) {
- this.list.push(this.section());
- this.state = this.NameSpace;
- } else if (c == '{') {
- this.list.push(this.section());
- this.Content();
- } else if (c == ',') {
- this.list.push(this.section());
- this.Comma();
- } else if (!isLetter(c) && (c < '0' || c > '9') && c != '-' && c != '_')
- this.state = this.Ignore;
- };
- parser.prototype.NameSpace = function (c) {
- if (c == '{') this.Content();else
- if (c == ',') this.Comma();else
- if (!cfg.blankChar[c]) this.state = this.Ignore;
- };
- parser.prototype.Comma = function () {
- while (cfg.blankChar[this.data[++this.i]]) {;}
- if (this.data[this.i] == '{') this.Content();else
- {
- this.start = this.i--;
- this.state = this.Name;
- }
- };
- parser.prototype.Content = function () {
- this.start = ++this.i;
- if ((this.i = this.data.indexOf('}', this.i)) == -1) this.i = this.data.length;
- var content = this.section();
- for (var i = 0, item; item = this.list[i++];) {
- if (this.res[item]) this.res[item] += ';' + content;else
- this.res[item] = content;}
- this.list = [];
- this.state = this.Space;
- };
- /***/ }),
- /***/ 452:
- /*!***************************************************************!*\
- !*** D:/gsxm/ezred/components/wangding-pickerAddress/data.js ***!
- \***************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _default = [
- {
- "name": "北京市",
- "city": [
- {
- "name": "北京市",
- "area": [
- "东城区",
- "西城区",
- "崇文区",
- "宣武区",
- "朝阳区",
- "丰台区",
- "石景山区",
- "海淀区",
- "门头沟区",
- "房山区",
- "通州区",
- "顺义区",
- "昌平区",
- "大兴区",
- "平谷区",
- "怀柔区",
- "密云县",
- "延庆县"] }] },
- {
- "name": "天津市",
- "city": [
- {
- "name": "天津市",
- "area": [
- "和平区",
- "河东区",
- "河西区",
- "南开区",
- "河北区",
- "红桥区",
- "塘沽区",
- "汉沽区",
- "大港区",
- "东丽区",
- "西青区",
- "津南区",
- "北辰区",
- "武清区",
- "宝坻区",
- "宁河县",
- "静海县",
- "蓟 县"] }] },
- {
- "name": "河北省",
- "city": [
- {
- "name": "石家庄市",
- "area": [
- "长安区",
- "桥东区",
- "桥西区",
- "新华区",
- "郊 区",
- "井陉矿区",
- "井陉县",
- "正定县",
- "栾城县",
- "行唐县",
- "灵寿县",
- "高邑县",
- "深泽县",
- "赞皇县",
- "无极县",
- "平山县",
- "元氏县",
- "赵 县",
- "辛集市",
- "藁",
- "晋州市",
- "新乐市",
- "鹿泉市"] },
- {
- "name": "唐山市",
- "area": [
- "路南区",
- "路北区",
- "古冶区",
- "开平区",
- "新 区",
- "丰润县",
- "滦 县",
- "滦南县",
- "乐亭县",
- "迁西县",
- "玉田县",
- "唐海县",
- "遵化市",
- "丰南市",
- "迁安市"] },
- {
- "name": "秦皇岛市",
- "area": [
- "海港区",
- "山海关区",
- "北戴河区",
- "青龙满族自治县",
- "昌黎县",
- "抚宁县",
- "卢龙县"] },
- {
- "name": "邯郸市",
- "area": [
- "邯山区",
- "丛台区",
- "复兴区",
- "峰峰矿区",
- "邯郸县",
- "临漳县",
- "成安县",
- "大名县",
- "涉 县",
- "磁 县",
- "肥乡县",
- "永年县",
- "邱 县",
- "鸡泽县",
- "广平县",
- "馆陶县",
- "魏 县",
- "曲周县",
- "武安市"] },
- {
- "name": "邢台市",
- "area": [
- "桥东区",
- "桥西区",
- "邢台县",
- "临城县",
- "内丘县",
- "柏乡县",
- "隆尧县",
- "任 县",
- "南和县",
- "宁晋县",
- "巨鹿县",
- "新河县",
- "广宗县",
- "平乡县",
- "威 县",
- "清河县",
- "临西县",
- "南宫市",
- "沙河市"] },
- {
- "name": "保定市",
- "area": [
- "新市区",
- "北市区",
- "南市区",
- "满城县",
- "清苑县",
- "涞水县",
- "阜平县",
- "徐水县",
- "定兴县",
- "唐 县",
- "高阳县",
- "容城县",
- "涞源县",
- "望都县",
- "安新县",
- "易 县",
- "曲阳县",
- "蠡 县",
- "顺平县",
- "博野",
- "雄县",
- "涿州市",
- "定州市",
- "安国市",
- "高碑店市"] },
- {
- "name": "张家口",
- "area": [
- "桥东区",
- "桥西区",
- "宣化区",
- "下花园区",
- "宣化县",
- "张北县",
- "康保县",
- "沽源县",
- "尚义县",
- "蔚 县",
- "阳原县",
- "怀安县",
- "万全县",
- "怀来县",
- "涿鹿县",
- "赤城县",
- "崇礼县"] },
- {
- "name": "承德市",
- "area": [
- "双桥区",
- "双滦区",
- "鹰手营子矿区",
- "承德县",
- "兴隆县",
- "平泉县",
- "滦平县",
- "隆化县",
- "丰宁满族自治县",
- "宽城满族自治县",
- "围场满族蒙古族自治县"] },
- {
- "name": "沧州市",
- "area": [
- "新华区",
- "运河区",
- "沧 县",
- "青 县",
- "东光县",
- "海兴县",
- "盐山县",
- "肃宁县",
- "南皮县",
- "吴桥县",
- "献 县",
- "孟村回族自治县",
- "泊头市",
- "任丘市",
- "黄骅市",
- "河间市"] },
- {
- "name": "廊坊市",
- "area": [
- "安次区",
- "固安县",
- "永清县",
- "香河县",
- "大城县",
- "文安县",
- "大厂回族自治县",
- "霸州市",
- "三河市"] },
- {
- "name": "衡水市",
- "area": [
- "桃城区",
- "枣强县",
- "武邑县",
- "武强县",
- "饶阳县",
- "安平县",
- "故城县",
- "景 县",
- "阜城县",
- "冀州市",
- "深州市"] }] },
- {
- "name": "山西省",
- "city": [
- {
- "name": "太原市",
- "area": [
- "小店区",
- "迎泽区",
- "杏花岭区",
- "尖草坪区",
- "万柏林区",
- "晋源区",
- "清徐县",
- "阳曲县",
- "娄烦县",
- "古交市"] },
- {
- "name": "大同市",
- "area": [
- "城 区",
- "矿 区",
- "南郊区",
- "新荣区",
- "阳高县",
- "天镇县",
- "广灵县",
- "灵丘县",
- "浑源县",
- "左云县",
- "大同县"] },
- {
- "name": "阳泉市",
- "area": [
- "城 区",
- "矿 区",
- "郊 区",
- "平定县",
- "盂 县"] },
- {
- "name": "长治市",
- "area": [
- "城 区",
- "郊 区",
- "长治县",
- "襄垣县",
- "屯留县",
- "平顺县",
- "黎城县",
- "壶关县",
- "长子县",
- "武乡县",
- "沁 县",
- "沁源县",
- "潞城市"] },
- {
- "name": "晋城市",
- "area": [
- "城 区",
- "沁水县",
- "阳城县",
- "陵川县",
- "泽州县",
- "高平市"] },
- {
- "name": "朔州市",
- "area": [
- "朔城区",
- "平鲁区",
- "山阴县",
- "应 县",
- "右玉县",
- "怀仁县"] },
- {
- "name": "忻州市",
- "area": [
- "忻府区",
- "原平市",
- "定襄县",
- "五台县",
- "代 县",
- "繁峙县",
- "宁武县",
- "静乐县",
- "神池县",
- "五寨县",
- "岢岚县",
- "河曲县",
- "保德县",
- "偏关县"] },
- {
- "name": "吕梁市",
- "area": [
- "离石区",
- "孝义市",
- "汾阳市",
- "文水县",
- "交城县",
- "兴 县",
- "临 县",
- "柳林县",
- "石楼县",
- "岚 县",
- "方山县",
- "中阳县",
- "交口县"] },
- {
- "name": "晋中市",
- "area": [
- "榆次市",
- "介休市",
- "榆社县",
- "左权县",
- "和顺县",
- "昔阳县",
- "寿阳县",
- "太谷县",
- "祁 县",
- "平遥县",
- "灵石县"] },
- {
- "name": "临汾市",
- "area": [
- "临汾市",
- "侯马市",
- "霍州市",
- "曲沃县",
- "翼城县",
- "襄汾县",
- "洪洞县",
- "古 县",
- "安泽县",
- "浮山县",
- "吉 县",
- "乡宁县",
- "蒲 县",
- "大宁县",
- "永和县",
- "隰 县",
- "汾西县"] },
- {
- "name": "运城市",
- "area": [
- "运城市",
- "永济市",
- "河津市",
- "芮城县",
- "临猗县",
- "万荣县",
- "新绛县",
- "稷山县",
- "闻喜县",
- "夏 县",
- "绛 县",
- "平陆县",
- "垣曲县"] }] },
- {
- "name": "内蒙古",
- "city": [
- {
- "name": "呼和浩特市",
- "area": [
- "新城区",
- "回民区",
- "玉泉区",
- "郊 区",
- "土默特左旗",
- "托克托县",
- "和林格尔县",
- "清水河县",
- "武川县"] },
- {
- "name": "包头市",
- "area": [
- "东河区",
- "昆都伦区",
- "青山区",
- "石拐矿区",
- "白云矿区",
- "郊 区",
- "土默特右旗",
- "固阳县",
- "达尔罕茂明安联合旗"] },
- {
- "name": "乌海市",
- "area": [
- "海勃湾区",
- "海南区",
- "乌达区"] },
- {
- "name": "赤峰市",
- "area": [
- "红山区",
- "元宝山区",
- "松山区",
- "阿鲁科尔沁旗",
- "巴林左旗",
- "巴林右旗",
- "林西县",
- "克什克腾旗",
- "翁牛特旗",
- "喀喇沁旗",
- "宁城县",
- "敖汉旗"] },
- {
- "name": "呼伦贝尔市",
- "area": [
- "海拉尔市",
- "满洲里市",
- "扎兰屯市",
- "牙克石市",
- "根河市",
- "额尔古纳市",
- "阿荣旗",
- "莫力达瓦达斡尔族自治旗",
- "鄂伦春自治旗",
- "鄂温克族自治旗",
- "新巴尔虎右旗",
- "新巴尔虎左旗",
- "陈巴尔虎旗"] },
- {
- "name": "兴安盟",
- "area": [
- "乌兰浩特市",
- "阿尔山市",
- "科尔沁右翼前旗",
- "科尔沁右翼中旗",
- "扎赉特旗",
- "突泉县"] },
- {
- "name": "通辽市",
- "area": [
- "科尔沁区",
- "霍林郭勒市",
- "科尔沁左翼中旗",
- "科尔沁左翼后旗",
- "开鲁县",
- "库伦旗",
- "奈曼旗",
- "扎鲁特旗"] },
- {
- "name": "锡林郭勒盟",
- "area": [
- "二连浩特市",
- "锡林浩特市",
- "阿巴嘎旗",
- "苏尼特左旗",
- "苏尼特右旗",
- "东乌珠穆沁旗",
- "西乌珠穆沁旗",
- "太仆寺旗",
- "镶黄旗",
- "正镶白旗",
- "正蓝旗",
- "多伦县"] },
- {
- "name": "乌兰察布盟",
- "area": [
- "集宁市",
- "丰镇市",
- "卓资县",
- "化德县",
- "商都县",
- "兴和县",
- "凉城县",
- "察哈尔右翼前旗",
- "察哈尔右翼中旗",
- "察哈尔右翼后旗",
- "四子王旗"] },
- {
- "name": "伊克昭盟",
- "area": [
- "东胜市",
- "达拉特旗",
- "准格尔旗",
- "鄂托克前旗",
- "鄂托克旗",
- "杭锦旗",
- "乌审旗",
- "伊金霍洛旗"] },
- {
- "name": "巴彦淖尔盟",
- "area": [
- "临河市",
- "五原县",
- "磴口县",
- "乌拉特前旗",
- "乌拉特中旗",
- "乌拉特后旗",
- "杭锦后旗"] },
- {
- "name": "阿拉善盟",
- "area": [
- "阿拉善左旗",
- "阿拉善右旗",
- "额济纳旗"] }] },
- {
- "name": "辽宁省",
- "city": [
- {
- "name": "沈阳市",
- "area": [
- "沈河区",
- "皇姑区",
- "和平区",
- "大东区",
- "铁西区",
- "苏家屯区",
- "东陵区",
- "于洪区",
- "新民市",
- "法库县",
- "辽中县",
- "康平县",
- "新城子区"] },
- {
- "name": "大连市",
- "area": [
- "西岗区",
- "中山区",
- "沙河口区",
- "甘井子区",
- "旅顺口区",
- "金州区",
- "瓦房店市",
- "普兰店市",
- "庄河市",
- "长海县"] },
- {
- "name": "鞍山市",
- "area": [
- "铁东区",
- "铁西区",
- "立山区",
- "千山区",
- "海城市",
- "台安县",
- "岫岩满族自治县"] },
- {
- "name": "抚顺市",
- "area": [
- "顺城区",
- "新抚区",
- "东洲区",
- "望花区",
- "抚顺县",
- "清原满族自治县",
- "新宾满族自治县"] },
- {
- "name": "本溪市",
- "area": [
- "平山区",
- "明山区",
- "溪湖区",
- "南芬区",
- "本溪满族自治县",
- "桓仁满族自治县"] },
- {
- "name": "丹东市",
- "area": [
- "振兴区",
- "元宝区",
- "振安区",
- "东港市",
- "凤城市",
- "宽甸满族自治县"] },
- {
- "name": "锦州市",
- "area": [
- "太和区",
- "古塔区",
- "凌河区",
- "凌海市",
- "黑山县",
- "义县",
- "北宁市"] },
- {
- "name": "营口市",
- "area": [
- "站前区",
- "西市区",
- "鲅鱼圈区",
- "老边区",
- "大石桥市",
- "盖州市"] },
- {
- "name": "阜新市",
- "area": [
- "海州区",
- "新邱区",
- "太平区",
- "清河门区",
- "细河区",
- "彰武县",
- "阜新蒙古族自治县"] },
- {
- "name": "辽阳市",
- "area": [
- "白塔区",
- "文圣区",
- "宏伟区",
- "太子河区",
- "弓长岭区",
- "灯塔市",
- "辽阳县"] },
- {
- "name": "盘锦",
- "area": [
- "双台子区",
- "兴隆台区",
- "盘山县",
- "大洼县"] },
- {
- "name": "铁岭市",
- "area": [
- "银州区",
- "清河区",
- "调兵山市",
- "开原市",
- "铁岭县",
- "昌图县",
- "西丰县"] },
- {
- "name": "朝阳市",
- "area": [
- "双塔区",
- "龙城区",
- "凌源市",
- "北票市",
- "朝阳县",
- "建平县",
- "喀喇沁左翼蒙古族自治县"] },
- {
- "name": "葫芦岛市",
- "area": [
- "龙港区",
- "南票区",
- "连山区",
- "兴城市",
- "绥中县",
- "建昌县"] }] },
- {
- "name": "吉林省",
- "city": [
- {
- "name": "长春市",
- "area": [
- "朝阳区",
- "宽城区",
- "二道区",
- "南关区",
- "绿园区",
- "双阳区",
- "九台市",
- "榆树市",
- "德惠市",
- "农安县"] },
- {
- "name": "吉林市",
- "area": [
- "船营区",
- "昌邑区",
- "龙潭区",
- "丰满区",
- "舒兰市",
- "桦甸市",
- "蛟河市",
- "磐石市",
- "永吉县"] },
- {
- "name": "四平",
- "area": [
- "铁西区",
- "铁东区",
- "公主岭市",
- "双辽市",
- "梨树县",
- "伊通满族自治县"] },
- {
- "name": "辽源市",
- "area": [
- "龙山区",
- "西安区",
- "东辽县",
- "东丰县"] },
- {
- "name": "通化市",
- "area": [
- "东昌区",
- "二道江区",
- "梅河口市",
- "集安市",
- "通化县",
- "辉南县",
- "柳河县"] },
- {
- "name": "白山市",
- "area": [
- "八道江区",
- "江源区",
- "临江市",
- "靖宇县",
- "抚松县",
- "长白朝鲜族自治县"] },
- {
- "name": "松原市",
- "area": [
- "宁江区",
- "乾安县",
- "长岭县",
- "扶余县",
- "前郭尔罗斯蒙古族自治县"] },
- {
- "name": "白城市",
- "area": [
- "洮北区",
- "大安市",
- "洮南市",
- "镇赉县",
- "通榆县"] },
- {
- "name": "延边朝鲜族自治州",
- "area": [
- "延吉市",
- "图们市",
- "敦化市",
- "龙井市",
- "珲春市",
- "和龙市",
- "安图县",
- "汪清县"] }] },
- {
- "name": "黑龙江省",
- "city": [
- {
- "name": "哈尔滨市",
- "area": [
- "松北区",
- "道里区",
- "南岗区",
- "平房区",
- "香坊区",
- "道外区",
- "呼兰区",
- "阿城区",
- "双城市",
- "尚志市",
- "五常市",
- "宾县",
- "方正县",
- "通河县",
- "巴彦县",
- "延寿县",
- "木兰县",
- "依兰县"] },
- {
- "name": "齐齐哈尔市",
- "area": [
- "龙沙区",
- "昂昂溪区",
- "铁锋区",
- "建华区",
- "富拉尔基区",
- "碾子山区",
- "梅里斯达斡尔族区",
- "讷河市",
- "富裕县",
- "拜泉县",
- "甘南县",
- "依安县",
- "克山县",
- "泰来县",
- "克东县",
- "龙江县"] },
- {
- "name": "鹤岗市",
- "area": [
- "兴山区",
- "工农区",
- "南山区",
- "兴安区",
- "向阳区",
- "东山区",
- "萝北县",
- "绥滨县"] },
- {
- "name": "双鸭山",
- "area": [
- "尖山区",
- "岭东区",
- "四方台区",
- "宝山区",
- "集贤县",
- "宝清县",
- "友谊县",
- "饶河县"] },
- {
- "name": "鸡西市",
- "area": [
- "鸡冠区",
- "恒山区",
- "城子河区",
- "滴道区",
- "梨树区",
- "麻山区",
- "密山市",
- "虎林市",
- "鸡东县"] },
- {
- "name": "大庆市",
- "area": [
- "萨尔图区",
- "红岗区",
- "龙凤区",
- "让胡路区",
- "大同区",
- "林甸县",
- "肇州县",
- "肇源县",
- "杜尔伯特蒙古族自治县"] },
- {
- "name": "伊春市",
- "area": [
- "伊春区",
- "带岭区",
- "南岔区",
- "金山屯区",
- "西林区",
- "美溪区",
- "乌马河区",
- "翠峦区",
- "友好区",
- "上甘岭区",
- "五营区",
- "红星区",
- "新青区",
- "汤旺河区",
- "乌伊岭区",
- "铁力市",
- "嘉荫县"] },
- {
- "name": "牡丹江市",
- "area": [
- "爱民区",
- "东安区",
- "阳明区",
- "西安区",
- "绥芬河市",
- "宁安市",
- "海林市",
- "穆棱市",
- "林口县",
- "东宁县"] },
- {
- "name": "佳木斯市",
- "area": [
- "向阳区",
- "前进区",
- "东风区",
- "郊区",
- "同江市",
- "富锦市",
- "桦川县",
- "抚远县",
- "桦南县",
- "汤原县"] },
- {
- "name": "七台河市",
- "area": [
- "桃山区",
- "新兴区",
- "茄子河区",
- "勃利县"] },
- {
- "name": "黑河市",
- "area": [
- "爱辉区",
- "北安市",
- "五大连池市",
- "逊克县",
- "嫩江县",
- "孙吴县"] },
- {
- "name": "绥化市",
- "area": [
- "北林区",
- "安达市",
- "肇东市",
- "海伦市",
- "绥棱县",
- "兰西县",
- "明水县",
- "青冈县",
- "庆安县",
- "望奎县"] },
- {
- "name": "大兴安岭地区",
- "area": [
- "呼玛县",
- "塔河县",
- "漠河县",
- "大兴安岭辖区"] }] },
- {
- "name": "上海市",
- "city": [
- {
- "name": "上海市",
- "area": [
- "黄浦区",
- "卢湾区",
- "徐汇区",
- "长宁区",
- "静安区",
- "普陀区",
- "闸北区",
- "虹口区",
- "杨浦区",
- "宝山区",
- "闵行区",
- "嘉定区",
- "松江区",
- "金山区",
- "青浦区",
- "南汇区",
- "奉贤区",
- "浦东新区",
- "崇明县"] }] },
- {
- "name": "江苏省",
- "city": [
- {
- "name": "南京市",
- "area": [
- "玄武区",
- "白下区",
- "秦淮区",
- "建邺区",
- "鼓楼区",
- "下关区",
- "栖霞区",
- "雨花台区",
- "浦口区",
- "江宁区",
- "六合区",
- "溧水县",
- "高淳县"] },
- {
- "name": "苏州市",
- "area": [
- "金阊区",
- "平江区",
- "沧浪区",
- "虎丘区",
- "吴中区",
- "相城区",
- "常熟市",
- "张家港市",
- "昆山市",
- "吴江市",
- "太仓市"] },
- {
- "name": "无锡市",
- "area": [
- "崇安区",
- "南长区",
- "北塘区",
- "滨湖区",
- "锡山区",
- "惠山区",
- "江阴市",
- "宜兴市"] },
- {
- "name": "常州市",
- "area": [
- "钟楼区",
- "天宁区",
- "戚墅堰区",
- "新北区",
- "武进区",
- "金坛市",
- "溧阳市"] },
- {
- "name": "镇江市",
- "area": [
- "京口区",
- "润州区",
- "丹徒区",
- "丹阳市",
- "扬中市",
- "句容市"] },
- {
- "name": "南通市",
- "area": [
- "崇川区",
- "港闸区",
- "通州市",
- "如皋市",
- "海门市",
- "启东市",
- "海安县",
- "如东县"] },
- {
- "name": "泰州市",
- "area": [
- "海陵区",
- "高港区",
- "姜堰市",
- "泰兴市",
- "靖江市",
- "兴化市"] },
- {
- "name": "扬州市",
- "area": [
- "广陵区",
- "维扬区",
- "邗江区",
- "江都市",
- "仪征市",
- "高邮市",
- "宝应县"] },
- {
- "name": "盐城市",
- "area": [
- "亭湖区",
- "盐都区",
- "大丰市",
- "东台市",
- "建湖县",
- "射阳县",
- "阜宁县",
- "滨海县",
- "响水县"] },
- {
- "name": "连云港市",
- "area": [
- "新浦区",
- "海州区",
- "连云区",
- "东海县",
- "灌云县",
- "赣榆县",
- "灌南县"] },
- {
- "name": "徐州市",
- "area": [
- "云龙区",
- "鼓楼区",
- "九里区",
- "泉山区",
- "贾汪区",
- "邳州市",
- "新沂市",
- "铜山县",
- "睢宁县",
- "沛县",
- "丰县"] },
- {
- "name": "淮安市",
- "area": [
- "清河区",
- "清浦区",
- "楚州区",
- "淮阴区",
- "涟水县",
- "洪泽县",
- "金湖县",
- "盱眙县"] },
- {
- "name": "宿迁市",
- "area": [
- "宿城区",
- "宿豫区",
- "沭阳县",
- "泗阳县",
- "泗洪县"] }] },
- {
- "name": "浙江省",
- "city": [
- {
- "name": "杭州市",
- "area": [
- "拱墅区",
- "西湖区",
- "上城区",
- "下城区",
- "江干区",
- "滨江区",
- "余杭区",
- "萧山区",
- "建德市",
- "富阳市",
- "临安市",
- "桐庐县",
- "淳安县"] },
- {
- "name": "宁波市",
- "area": [
- "海曙区",
- "江东区",
- "江北区",
- "镇海区",
- "北仑区",
- "鄞州区",
- "余姚市",
- "慈溪市",
- "奉化市",
- "宁海县",
- "象山县"] },
- {
- "name": "温州市",
- "area": [
- "鹿城区",
- "龙湾区",
- "瓯海区",
- "瑞安市",
- "乐清市",
- "永嘉县",
- "洞头县",
- "平阳县",
- "苍南县",
- "文成县",
- "泰顺县"] },
- {
- "name": "嘉兴市",
- "area": [
- "秀城区",
- "秀洲区",
- "海宁市",
- "平湖市",
- "桐乡市",
- "嘉善县",
- "海盐县"] },
- {
- "name": "湖州市",
- "area": [
- "吴兴区",
- "南浔区",
- "长兴县",
- "德清县",
- "安吉县"] },
- {
- "name": "绍兴市",
- "area": [
- "越城区",
- "诸暨市",
- "上虞市",
- "嵊州市",
- "绍兴县",
- "新昌县"] },
- {
- "name": "金华市",
- "area": [
- "婺城区",
- "金东区",
- "兰溪市",
- "义乌市",
- "东阳市",
- "永康市",
- "武义县",
- "浦江县",
- "磐安县"] },
- {
- "name": "衢州市",
- "area": [
- "柯城区",
- "衢江区",
- "江山市",
- "龙游县",
- "常山县",
- "开化县"] },
- {
- "name": "舟山市",
- "area": [
- "定海区",
- "普陀区",
- "岱山县",
- "嵊泗县"] },
- {
- "name": "台州市",
- "area": [
- "椒江区",
- "黄岩区",
- "路桥区",
- "临海市",
- "温岭市",
- "玉环县",
- "天台县",
- "仙居县",
- "三门县"] },
- {
- "name": "丽水市",
- "area": [
- "莲都区",
- "龙泉市",
- "缙云县",
- "青田县",
- "云和县",
- "遂昌县",
- "松阳县",
- "庆元县",
- "景宁畲族自治县"] }] },
- {
- "name": "安徽省",
- "city": [
- {
- "name": "合肥市",
- "area": [
- "庐阳区",
- "瑶海区",
- "蜀山区",
- "包河区",
- "长丰县",
- "肥东县",
- "肥西县"] },
- {
- "name": "芜湖市",
- "area": [
- "镜湖区",
- "弋江区",
- "鸠江区",
- "三山区",
- "芜湖县",
- "南陵县",
- "繁昌县"] },
- {
- "name": "蚌埠市",
- "area": [
- "蚌山区",
- "龙子湖区",
- "禹会区",
- "淮上区",
- "怀远县",
- "固镇县",
- "五河县"] },
- {
- "name": "淮南市",
- "area": [
- "田家庵区",
- "大通区",
- "谢家集区",
- "八公山区",
- "潘集区",
- "凤台县"] },
- {
- "name": "马鞍山市",
- "area": [
- "雨山区",
- "花山区",
- "金家庄区",
- "当涂县"] },
- {
- "name": "淮北市",
- "area": [
- "相山区",
- "杜集区",
- "烈山区",
- "濉溪县"] },
- {
- "name": "铜陵市",
- "area": [
- "铜官山区",
- "狮子山区",
- "郊区",
- "铜陵县"] },
- {
- "name": "安庆市",
- "area": [
- "迎江区",
- "大观区",
- "宜秀区",
- "桐城市",
- "宿松县",
- "枞阳县",
- "太湖县",
- "怀宁县",
- "岳西县",
- "望江县",
- "潜山县"] },
- {
- "name": "黄山市",
- "area": [
- "屯溪区",
- "黄山区",
- "徽州区",
- "休宁县",
- "歙县",
- "祁门县",
- "黟县"] },
- {
- "name": "滁州市",
- "area": [
- "琅琊区",
- "南谯区",
- "天长市",
- "明光市",
- "全椒县",
- "来安县",
- "定远县",
- "凤阳县"] },
- {
- "name": "阜阳市",
- "area": [
- "颍州区",
- "颍东区",
- "颍泉区",
- "界首市",
- "临泉县",
- "颍上县",
- "阜南县",
- "太和县"] },
- {
- "name": "宿州市",
- "area": [
- "埇桥区",
- "萧县",
- "泗县",
- "砀山县",
- "灵璧县"] },
- {
- "name": "巢湖市",
- "area": [
- "居巢区",
- "含山县",
- "无为县",
- "庐江县",
- "和县"] },
- {
- "name": "六安市",
- "area": [
- "金安区",
- "裕安区",
- "寿县",
- "霍山县",
- "霍邱县",
- "舒城县",
- "金寨县"] },
- {
- "name": "亳州市",
- "area": [
- "谯城区",
- "利辛县",
- "涡阳县",
- "蒙城县"] },
- {
- "name": "池州市",
- "area": [
- "贵池区",
- "东至县",
- "石台县",
- "青阳县"] },
- {
- "name": "宣城市",
- "area": [
- "宣州区",
- "宁国市",
- "广德县",
- "郎溪县",
- "泾县",
- "旌德县",
- "绩溪县"] }] },
- {
- "name": "福建省",
- "city": [
- {
- "name": "福州市",
- "area": [
- "鼓楼区",
- "台江区",
- "仓山区",
- "马尾区",
- "晋安区",
- "福清市",
- "长乐市",
- "闽侯县",
- "闽清县",
- "永泰县",
- "连江县",
- "罗源县",
- "平潭县"] },
- {
- "name": "厦门市",
- "area": [
- "思明区",
- "海沧区",
- "湖里区",
- "集美区",
- "同安区",
- "翔安区"] },
- {
- "name": "莆田市",
- "area": [
- "城厢区",
- "涵江区",
- "荔城区",
- "秀屿区",
- "仙游县"] },
- {
- "name": "三明市",
- "area": [
- "梅列区",
- "三元区",
- "永安市",
- "明溪县",
- "将乐县",
- "大田县",
- "宁化县",
- "建宁县",
- "沙县",
- "尤溪县",
- "清流县",
- "泰宁县"] },
- {
- "name": "泉州市",
- "area": [
- "鲤城区",
- "丰泽区",
- "洛江区",
- "泉港区",
- "石狮市",
- "晋江市",
- "南安市",
- "惠安县",
- "永春县",
- "安溪县",
- "德化县",
- "金门县"] },
- {
- "name": "漳州市",
- "area": [
- "芗城区",
- "龙文区",
- "龙海市",
- "平和县",
- "南靖县",
- "诏安县",
- "漳浦县",
- "华安县",
- "东山县",
- "长泰县",
- "云霄县"] },
- {
- "name": "南平市",
- "area": [
- "延平区",
- "建瓯市",
- "邵武市",
- "武夷山市",
- "建阳市",
- "松溪县",
- "光泽县",
- "顺昌县",
- "浦城县",
- "政和县"] },
- {
- "name": "龙岩市",
- "area": [
- "新罗区",
- "漳平市",
- "长汀县",
- "武平县",
- "上杭县",
- "永定县",
- "连城县"] },
- {
- "name": "宁德市",
- "area": [
- "蕉城区",
- "福安市",
- "福鼎市",
- "寿宁县",
- "霞浦县",
- "柘荣县",
- "屏南县",
- "古田县",
- "周宁县"] }] },
- {
- "name": "江西省",
- "city": [
- {
- "name": "南昌市",
- "area": [
- "东湖区",
- "西湖区",
- "青云谱区",
- "湾里区",
- "青山湖区",
- "新建县",
- "南昌县",
- "进贤县",
- "安义县"] },
- {
- "name": "景德镇市",
- "area": [
- "珠山区",
- "昌江区",
- "乐平市",
- "浮梁县"] },
- {
- "name": "萍乡市",
- "area": [
- "安源区",
- "湘东区",
- "莲花县",
- "上栗县",
- "芦溪县"] },
- {
- "name": "九江市",
- "area": [
- "浔阳区",
- "庐山区",
- "瑞昌市",
- "九江县",
- "星子县",
- "武宁县",
- "彭泽县",
- "永修县",
- "修水县",
- "湖口县",
- "德安县",
- "都昌县"] },
- {
- "name": "新余市",
- "area": [
- "渝水区",
- "分宜县"] },
- {
- "name": "鹰潭市",
- "area": [
- "月湖区",
- "贵溪市",
- "余江县"] },
- {
- "name": "赣州市",
- "area": [
- "章贡区",
- "瑞金市",
- "南康市",
- "石城县",
- "安远县",
- "赣县",
- "宁都县",
- "寻乌县",
- "兴国县",
- "定南县",
- "上犹县",
- "于都县",
- "龙南县",
- "崇义县",
- "信丰县",
- "全南县",
- "大余县",
- "会昌县"] },
- {
- "name": "吉安市",
- "area": [
- "吉州区",
- "青原区",
- "井冈山市",
- "吉安县",
- "永丰县",
- "永新县",
- "新干县",
- "泰和县",
- "峡江县",
- "遂川县",
- "安福县",
- "吉水县",
- "万安县"] },
- {
- "name": "宜春市",
- "area": [
- "袁州区",
- "丰城市",
- "樟树市",
- "高安市",
- "铜鼓县",
- "靖安县",
- "宜丰县",
- "奉新县",
- "万载县",
- "上高县"] },
- {
- "name": "抚州市",
- "area": [
- "临川区",
- "南丰县",
- "乐安县",
- "金溪县",
- "南城县",
- "东乡县",
- "资溪县",
- "宜黄县",
- "广昌县",
- "黎川县",
- "崇仁县"] },
- {
- "name": "上饶市",
- "area": [
- "信州区",
- "德兴市",
- "上饶县",
- "广丰县",
- "鄱阳县",
- "婺源县",
- "铅山县",
- "余干县",
- "横峰县",
- "弋阳县",
- "玉山县",
- "万年县"] }] },
- {
- "name": "山东省",
- "city": [
- {
- "name": "济南市",
- "area": [
- "市中区",
- "历下区",
- "天桥区",
- "槐荫区",
- "历城区",
- "长清区",
- "章丘市",
- "平阴县",
- "济阳县",
- "商河县"] },
- {
- "name": "青岛市",
- "area": [
- "市南区",
- "市北区",
- "城阳区",
- "四方区",
- "李沧区",
- "黄岛区",
- "崂山区",
- "胶南市",
- "胶州市",
- "平度市",
- "莱西市",
- "即墨市"] },
- {
- "name": "淄博市",
- "area": [
- "张店区",
- "临淄区",
- "淄川区",
- "博山区",
- "周村区",
- "桓台县",
- "高青县",
- "沂源县"] },
- {
- "name": "枣庄市",
- "area": [
- "市中区",
- "山亭区",
- "峄城区",
- "台儿庄区",
- "薛城区",
- "滕州市"] },
- {
- "name": "东营市",
- "area": [
- "东营区",
- "河口区",
- "垦利县",
- "广饶县",
- "利津县"] },
- {
- "name": "烟台市",
- "area": [
- "芝罘区",
- "福山区",
- "牟平区",
- "莱山区",
- "龙口市",
- "莱阳市",
- "莱州市",
- "招远市",
- "蓬莱市",
- "栖霞市",
- "海阳市",
- "长岛县"] },
- {
- "name": "潍坊市",
- "area": [
- "潍城区",
- "寒亭区",
- "坊子区",
- "奎文区",
- "青州市",
- "诸城市",
- "寿光市",
- "安丘市",
- "高密市",
- "昌邑市",
- "昌乐县",
- "临朐县"] },
- {
- "name": "济宁市",
- "area": [
- "市中区",
- "任城区",
- "曲阜市",
- "兖州市",
- "邹城市",
- "鱼台县",
- "金乡县",
- "嘉祥县",
- "微山县",
- "汶上县",
- "泗水县",
- "梁山县"] },
- {
- "name": "泰安市",
- "area": [
- "泰山区",
- "岱岳区",
- "新泰市",
- "肥城市",
- "宁阳县",
- "东平县"] },
- {
- "name": "威海市",
- "area": [
- "环翠区",
- "乳山市",
- "文登市",
- "荣成市"] },
- {
- "name": "日照市",
- "area": [
- "东港区",
- "岚山区",
- "五莲县",
- "莒县"] },
- {
- "name": "莱芜市",
- "area": [
- "莱城区",
- "钢城区"] },
- {
- "name": "临沂市",
- "area": [
- "兰山区",
- "罗庄区",
- "河东区",
- "沂南县",
- "郯城县",
- "沂水县",
- "苍山县",
- "费县",
- "平邑县",
- "莒南县",
- "蒙阴县",
- "临沭县"] },
- {
- "name": "德州市",
- "area": [
- "德城区",
- "乐陵市",
- "禹城市",
- "陵县",
- "宁津县",
- "齐河县",
- "武城县",
- "庆云县",
- "平原县",
- "夏津县",
- "临邑县"] },
- {
- "name": "聊城市",
- "area": [
- "东昌府区",
- "临清市",
- "高唐县",
- "阳谷县",
- "茌平县",
- "莘县",
- "东阿县",
- "冠县"] },
- {
- "name": "滨州市",
- "area": [
- "滨城区",
- "邹平县",
- "沾化县",
- "惠民县",
- "博兴县",
- "阳信县",
- "无棣县"] },
- {
- "name": "菏泽市",
- "area": [
- "牡丹区",
- "鄄城县",
- "单县",
- "郓城县",
- "曹县",
- "定陶县",
- "巨野县",
- "东明县",
- "成武县"] }] },
- {
- "name": "河南省",
- "city": [
- {
- "name": "郑州市",
- "area": [
- "中原区",
- "金水区",
- "二七区",
- "管城回族区",
- "上街区",
- "惠济区",
- "巩义市",
- "新郑市",
- "新密市",
- "登封市",
- "荥阳市",
- "中牟县"] },
- {
- "name": "开封市",
- "area": [
- "鼓楼区",
- "龙亭区",
- "顺河回族区",
- "禹王台区",
- "金明区",
- "开封县",
- "尉氏县",
- "兰考县",
- "杞县",
- "通许县"] },
- {
- "name": "洛阳市",
- "area": [
- "西工区",
- "老城区",
- "涧西区",
- "瀍河回族区",
- "洛龙区",
- "吉利区",
- "偃师市",
- "孟津县",
- "汝阳县",
- "伊川县",
- "洛宁县",
- "嵩县",
- "宜阳县",
- "新安县",
- "栾川县"] },
- {
- "name": "平顶山市",
- "area": [
- "新华区",
- "卫东区",
- "湛河区",
- "石龙区",
- "汝州市",
- "舞钢市",
- "宝丰县",
- "叶县",
- "郏县",
- "鲁山县"] },
- {
- "name": "安阳市",
- "area": [
- "北关区",
- "文峰区",
- "殷都区",
- "龙安区",
- "林州市",
- "安阳县",
- "滑县",
- "内黄县",
- "汤阴县"] },
- {
- "name": "鹤壁市",
- "area": [
- "淇滨区",
- "山城区",
- "鹤山区",
- "浚县",
- "淇县"] },
- {
- "name": "新乡市",
- "area": [
- "卫滨区",
- "红旗区",
- "凤泉区",
- "牧野区",
- "卫辉市",
- "辉县市",
- "新乡县",
- "获嘉县",
- "原阳县",
- "长垣县",
- "封丘县",
- "延津县"] },
- {
- "name": "焦作市",
- "area": [
- "解放区",
- "中站区",
- "马村区",
- "山阳区",
- "沁阳市",
- "孟州市",
- "修武县",
- "温县",
- "武陟县",
- "博爱县"] },
- {
- "name": "濮阳市",
- "area": [
- "华龙区",
- "濮阳县",
- "南乐县",
- "台前县",
- "清丰县",
- "范县"] },
- {
- "name": "许昌市",
- "area": [
- "魏都区",
- "禹州市",
- "长葛市",
- "许昌县",
- "鄢陵县",
- "襄城县"] },
- {
- "name": "漯河市",
- "area": [
- "源汇区",
- "郾城区",
- "召陵区",
- "临颍县",
- "舞阳县"] },
- {
- "name": "三门峡市",
- "area": [
- "湖滨区",
- "义马市",
- "灵宝市",
- "渑池县",
- "卢氏县",
- "陕县"] },
- {
- "name": "南阳市",
- "area": [
- "卧龙区",
- "宛城区",
- "邓州市",
- "桐柏县",
- "方城县",
- "淅川县",
- "镇平县",
- "唐河县",
- "南召县",
- "内乡县",
- "新野县",
- "社旗县",
- "西峡县"] },
- {
- "name": "商丘市",
- "area": [
- "梁园区",
- "睢阳区",
- "永城市",
- "宁陵县",
- "虞城县",
- "民权县",
- "夏邑县",
- "柘城县",
- "睢县"] },
- {
- "name": "信阳市",
- "area": [
- "浉河区",
- "平桥区",
- "潢川县",
- "淮滨县",
- "息县",
- "新县",
- "商城县",
- "固始县",
- "罗山县",
- "光山县"] },
- {
- "name": "周口市",
- "area": [
- "川汇区",
- "项城市",
- "商水县",
- "淮阳县",
- "太康县",
- "鹿邑县",
- "西华县",
- "扶沟县",
- "沈丘县",
- "郸城县"] },
- {
- "name": "驻马店市",
- "area": [
- "驿城区",
- "确山县",
- "新蔡县",
- "上蔡县",
- "西平县",
- "泌阳县",
- "平舆县",
- "汝南县",
- "遂平县",
- "正阳县"] },
- {
- "name": "焦作市",
- "area": [
- "济源市"] }] },
- {
- "name": "湖北省",
- "city": [
- {
- "name": "武汉市",
- "area": [
- "江岸区",
- "武昌区",
- "江汉区",
- "硚口区",
- "汉阳区",
- "青山区",
- "洪山区",
- "东西湖区",
- "汉南区",
- "蔡甸区",
- "江夏区",
- "黄陂区",
- "新洲区"] },
- {
- "name": "黄石市",
- "area": [
- "黄石港区",
- "西塞山区",
- "下陆区",
- "铁山区",
- "大冶市",
- "阳新县"] },
- {
- "name": "十堰市",
- "area": [
- "张湾区",
- "茅箭区",
- "丹江口市",
- "郧县",
- "竹山县",
- "房县",
- "郧西县",
- "竹溪县"] },
- {
- "name": "荆州市",
- "area": [
- "沙市区",
- "荆州区",
- "洪湖市",
- "石首市",
- "松滋市",
- "监利县",
- "公安县",
- "江陵县"] },
- {
- "name": "宜昌市",
- "area": [
- "西陵区",
- "伍家岗区",
- "点军区",
- "猇亭区",
- "夷陵区",
- "宜都市",
- "当阳市",
- "枝江市",
- "秭归县",
- "远安县",
- "兴山县",
- "五峰土家族自治县",
- "长阳土家族自治县"] },
- {
- "name": "襄樊市",
- "area": [
- "襄城区",
- "樊城区",
- "襄阳区",
- "老河口市",
- "枣阳市",
- "宜城市",
- "南漳县",
- "谷城县",
- "保康县"] },
- {
- "name": "鄂州市",
- "area": [
- "鄂城区",
- "华容区",
- "梁子湖区"] },
- {
- "name": "荆门市",
- "area": [
- "东宝区",
- "掇刀区",
- "钟祥市",
- "京山县",
- "沙洋县"] },
- {
- "name": "孝感市",
- "area": [
- "孝南区",
- "应城市",
- "安陆市",
- "汉川市",
- "云梦县",
- "大悟县",
- "孝昌县"] },
- {
- "name": "黄冈市",
- "area": [
- "黄州区",
- "麻城市",
- "武穴市",
- "红安县",
- "罗田县",
- "浠水县",
- "蕲春县",
- "黄梅县",
- "英山县",
- "团风县"] },
- {
- "name": "咸宁市",
- "area": [
- "咸安区",
- "赤壁市",
- "嘉鱼县",
- "通山县",
- "崇阳县",
- "通城县"] },
- {
- "name": "随州市",
- "area": [
- "曾都区",
- "广水市"] },
- {
- "name": "恩施土家族苗族自治州",
- "area": [
- "恩施市",
- "利川市",
- "建始县",
- "来凤县",
- "巴东县",
- "鹤峰县",
- "宣恩县",
- "咸丰县"] },
- {
- "name": "仙桃市",
- "area": [
- "仙桃"] },
- {
- "name": "天门市",
- "area": [
- "天门"] },
- {
- "name": "潜江市",
- "area": [
- "潜江"] },
- {
- "name": "神农架林区",
- "area": [
- "神农架林区"] }] },
- {
- "name": "湖南省",
- "city": [
- {
- "name": "长沙市",
- "area": [
- "岳麓区",
- "芙蓉区",
- "天心区",
- "开福区",
- "雨花区",
- "浏阳市",
- "长沙县",
- "望城县",
- "宁乡县"] },
- {
- "name": "株洲市",
- "area": [
- "天元区",
- "荷塘区",
- "芦淞区",
- "石峰区",
- "醴陵市",
- "株洲县",
- "炎陵县",
- "茶陵县",
- "攸县"] },
- {
- "name": "湘潭市",
- "area": [
- "岳塘区",
- "雨湖区",
- "湘乡市",
- "韶山市",
- "湘潭县"] },
- {
- "name": "衡阳市",
- "area": [
- "雁峰区",
- "珠晖区",
- "石鼓区",
- "蒸湘区",
- "南岳区",
- "耒阳市",
- "常宁市",
- "衡阳县",
- "衡东县",
- "衡山县",
- "衡南县",
- "祁东县"] },
- {
- "name": "邵阳市",
- "area": [
- "双清区",
- "大祥区",
- "北塔区",
- "武冈市",
- "邵东县",
- "洞口县",
- "新邵县",
- "绥宁县",
- "新宁县",
- "邵阳县",
- "隆回县",
- "城步苗族自治县"] },
- {
- "name": "岳阳市",
- "area": [
- "岳阳楼区",
- "云溪区",
- "君山区",
- "临湘市",
- "汨罗市",
- "岳阳县",
- "湘阴县",
- "平江县",
- "华容县"] },
- {
- "name": "常德市",
- "area": [
- "武陵区",
- "鼎城区",
- "津市市",
- "澧县",
- "临澧县",
- "桃源县",
- "汉寿县",
- "安乡县",
- "石门县"] },
- {
- "name": "张家界市",
- "area": [
- "永定区",
- "武陵源区",
- "慈利县",
- "桑植县"] },
- {
- "name": "益阳市",
- "area": [
- "赫山区",
- "资阳区",
- "沅江市",
- "桃江县",
- "南县",
- "安化县"] },
- {
- "name": "郴州市",
- "area": [
- "北湖区",
- "苏仙区",
- "资兴市",
- "宜章县",
- "汝城县",
- "安仁县",
- "嘉禾县",
- "临武县",
- "桂东县",
- "永兴县",
- "桂阳县"] },
- {
- "name": "永州市",
- "area": [
- "冷水滩区",
- "零陵区",
- "祁阳县",
- "蓝山县",
- "宁远县",
- "新田县",
- "东安县",
- "江永县",
- "道县",
- "双牌县",
- "江华瑶族自治县"] },
- {
- "name": "怀化市",
- "area": [
- "鹤城区",
- "洪江市",
- "会同县",
- "沅陵县",
- "辰溪县",
- "溆浦县",
- "中方县",
- "新晃侗族自治县",
- "芷江侗族自治县",
- "通道侗族自治县",
- "靖州苗族侗族自治县",
- "麻阳苗族自治县"] },
- {
- "name": "娄底市",
- "area": [
- "娄星区",
- "冷水江市",
- "涟源市",
- "新化县",
- "双峰县"] },
- {
- "name": "湘西土家族苗族自治州",
- "area": [
- "吉首市",
- "古丈县",
- "龙山县",
- "永顺县",
- "凤凰县",
- "泸溪县",
- "保靖县",
- "花垣县"] }] },
- {
- "name": "广东省",
- "city": [
- {
- "name": "广州市",
- "area": [
- "越秀区",
- "荔湾区",
- "海珠区",
- "天河区",
- "白云区",
- "黄埔区",
- "番禺区",
- "花都区",
- "南沙区",
- "萝岗区",
- "增城市",
- "从化市"] },
- {
- "name": "深圳市",
- "area": [
- "福田区",
- "罗湖区",
- "南山区",
- "宝安区",
- "龙岗区",
- "盐田区"] },
- {
- "name": "东莞市",
- "area": [
- "莞城",
- "常平",
- "塘厦",
- "塘厦",
- "塘厦"] },
- {
- "name": "中山市",
- "area": [
- "中山"] },
- {
- "name": "潮州市",
- "area": [
- "湘桥区",
- "潮安县",
- "饶平县"] },
- {
- "name": "揭阳市",
- "area": [
- "榕城区",
- "揭东县",
- "揭西县",
- "惠来县",
- "普宁市"] },
- {
- "name": "云浮市",
- "area": [
- "云城区",
- "新兴县",
- "郁南县",
- "云安县",
- "罗定市"] },
- {
- "name": "珠海市",
- "area": [
- "香洲区",
- "斗门区",
- "金湾区"] },
- {
- "name": "汕头市",
- "area": [
- "金平区",
- "濠江区",
- "龙湖区",
- "潮阳区",
- "潮南区",
- "澄海区",
- "南澳县"] },
- {
- "name": "韶关市",
- "area": [
- "浈江区",
- "武江区",
- "曲江区",
- "乐昌市",
- "南雄市",
- "始兴县",
- "仁化县",
- "翁源县",
- "新丰县",
- "乳源瑶族自治县"] },
- {
- "name": "佛山市",
- "area": [
- "禅城区",
- "南海区",
- "顺德区",
- "三水区",
- "高明区"] },
- {
- "name": "江门市",
- "area": [
- "蓬江区",
- "江海区",
- "新会区",
- "恩平市",
- "台山市",
- "开平市",
- "鹤山市"] },
- {
- "name": "湛江市",
- "area": [
- "赤坎区",
- "霞山区",
- "坡头区",
- "麻章区",
- "吴川市",
- "廉江市",
- "雷州市",
- "遂溪县",
- "徐闻县"] },
- {
- "name": "茂名市",
- "area": [
- "茂南区",
- "茂港区",
- "化州市",
- "信宜市",
- "高州市",
- "电白县"] },
- {
- "name": "肇庆市",
- "area": [
- "端州区",
- "鼎湖区",
- "高要市",
- "四会市",
- "广宁县",
- "怀集县",
- "封开县",
- "德庆县"] },
- {
- "name": "惠州市",
- "area": [
- "惠城区",
- "惠阳区",
- "博罗县",
- "惠东县",
- "龙门县"] },
- {
- "name": "梅州市",
- "area": [
- "梅江区",
- "兴宁市",
- "梅县",
- "大埔县",
- "丰顺县",
- "五华县",
- "平远县",
- "蕉岭县"] },
- {
- "name": "汕尾市",
- "area": [
- "城区",
- "陆丰市",
- "海丰县",
- "陆河县"] },
- {
- "name": "河源市",
- "area": [
- "源城区",
- "紫金县",
- "龙川县",
- "连平县",
- "和平县",
- "东源县"] },
- {
- "name": "阳江市",
- "area": [
- "江城区",
- "阳春市",
- "阳西县",
- "阳东县"] },
- {
- "name": "清远市",
- "area": [
- "清城区",
- "英德市",
- "连州市",
- "佛冈县",
- "阳山县",
- "清新县",
- "连山壮族瑶族自治县",
- "连南瑶族自治县"] }] },
- {
- "name": "广西",
- "city": [
- {
- "name": "南宁市",
- "area": [
- "青秀区",
- "兴宁区",
- "西乡塘区",
- "良庆区",
- "江南区",
- "邕宁区",
- "武鸣县",
- "隆安县",
- "马山县",
- "上林县",
- "宾阳县",
- "横县"] },
- {
- "name": "柳州市",
- "area": [
- "城中区",
- "鱼峰区",
- "柳北区",
- "柳南区",
- "柳江县",
- "柳城县",
- "鹿寨县",
- "融安县",
- "融水苗族自治县",
- "三江侗族自治县"] },
- {
- "name": "桂林市",
- "area": [
- "象山区",
- "秀峰区",
- "叠彩区",
- "七星区",
- "雁山区",
- "阳朔县",
- "临桂县",
- "灵川县",
- "全州县",
- "平乐县",
- "兴安县",
- "灌阳县",
- "荔浦县",
- "资源县",
- "永福县",
- "龙胜各族自治县",
- "恭城瑶族自治县"] },
- {
- "name": "梧州市",
- "area": [
- "万秀区",
- "蝶山区",
- "长洲区",
- "岑溪市",
- "苍梧县",
- "藤县",
- "蒙山县"] },
- {
- "name": "北海市",
- "area": [
- "海城区",
- "银海区",
- "铁山港区",
- "合浦县"] },
- {
- "name": "防城港市",
- "area": [
- "港口区",
- "防城区",
- "东兴市",
- "上思县"] },
- {
- "name": "钦州市",
- "area": [
- "钦南区",
- "钦北区",
- "灵山县",
- "浦北县"] },
- {
- "name": "贵港市",
- "area": [
- "港北区",
- "港南区",
- "覃塘区",
- "桂平市",
- "平南县"] },
- {
- "name": "玉林市",
- "area": [
- "玉州区",
- "北流市",
- "容县",
- "陆川县",
- "博白县",
- "兴业县"] },
- {
- "name": "百色市",
- "area": [
- "右江区",
- "凌云县",
- "平果县",
- "西林县",
- "乐业县",
- "德保县",
- "田林县",
- "田阳县",
- "靖西县",
- "田东县",
- "那坡县",
- "隆林各族自治县"] },
- {
- "name": "贺州市",
- "area": [
- "八步区",
- "钟山县",
- "昭平县",
- "富川瑶族自治县"] },
- {
- "name": "河池市",
- "area": [
- "金城江区",
- "宜州市",
- "天峨县",
- "凤山县",
- "南丹县",
- "东兰县",
- "都安瑶族自治县",
- "罗城仫佬族自治县",
- "巴马瑶族自治县",
- "环江毛南族自治县",
- "大化瑶族自治县"] },
- {
- "name": "来宾市",
- "area": [
- "兴宾区",
- "合山市",
- "象州县",
- "武宣县",
- "忻城县",
- "金秀瑶族自治县"] },
- {
- "name": "崇左市",
- "area": [
- "江州区",
- "凭祥市",
- "宁明县",
- "扶绥县",
- "龙州县",
- "大新县",
- "天等县"] }] },
- {
- "name": "海南省",
- "city": [
- {
- "name": "海口市",
- "area": [
- "龙华区",
- "秀英区",
- "琼山区",
- "美兰区"] },
- {
- "name": "三亚市",
- "area": [
- "三亚市"] },
- {
- "name": "五指山市",
- "area": [
- "五指山"] },
- {
- "name": "琼海市",
- "area": [
- "琼海"] },
- {
- "name": "儋州市",
- "area": [
- "儋州"] },
- {
- "name": "文昌市",
- "area": [
- "文昌"] },
- {
- "name": "万宁市",
- "area": [
- "万宁"] },
- {
- "name": "东方市",
- "area": [
- "东方"] },
- {
- "name": "澄迈县",
- "area": [
- "澄迈县"] },
- {
- "name": "定安县",
- "area": [
- "定安县"] },
- {
- "name": "屯昌县",
- "area": [
- "屯昌县"] },
- {
- "name": "临高县",
- "area": [
- "临高县"] },
- {
- "name": "白沙黎族自治县",
- "area": [
- "白沙黎族自治县"] },
- {
- "name": "昌江黎族自治县",
- "area": [
- "昌江黎族自治县"] },
- {
- "name": "乐东黎族自治县",
- "area": [
- "乐东黎族自治县"] },
- {
- "name": "陵水黎族自治县",
- "area": [
- "陵水黎族自治县"] },
- {
- "name": "保亭黎族苗族自治县",
- "area": [
- "保亭黎族苗族自治县"] },
- {
- "name": "琼中黎族苗族自治县",
- "area": [
- "琼中黎族苗族自治县"] }] },
- {
- "name": "重庆市",
- "city": [
- {
- "name": "重庆市",
- "area": [
- "渝中区",
- "大渡口区",
- "江北区",
- "南岸区",
- "北碚区",
- "渝北区",
- "巴南区",
- "长寿区",
- "双桥区",
- "沙坪坝区",
- "万盛区",
- "万州区",
- "涪陵区",
- "黔江区",
- "永川区",
- "合川区",
- "江津区",
- "九龙坡区",
- "南川区",
- "綦江县",
- "潼南县",
- "荣昌县",
- "璧山县",
- "大足县",
- "铜梁县",
- "梁平县",
- "开县",
- "忠县",
- "城口县",
- "垫江县",
- "武隆县",
- "丰都县",
- "奉节县",
- "云阳县",
- "巫溪县",
- "巫山县",
- "石柱土家族自治县",
- "秀山土家族苗族自治县",
- "酉阳土家族苗族自治县",
- "彭水苗族土家族自治县"] }] },
- {
- "name": "四川省",
- "city": [
- {
- "name": "成都市",
- "area": [
- "青羊区",
- "锦江区",
- "金牛区",
- "武侯区",
- "成华区",
- "龙泉驿区",
- "青白江区",
- "新都区",
- "温江区",
- "都江堰市",
- "彭州市",
- "邛崃市",
- "崇州市",
- "金堂县",
- "郫县",
- "新津县",
- "双流县",
- "蒲江县",
- "大邑县"] },
- {
- "name": "自贡市",
- "area": [
- "大安区",
- "自流井区",
- "贡井区",
- "沿滩区",
- "荣县",
- "富顺县"] },
- {
- "name": "攀枝花市",
- "area": [
- "仁和区",
- "米易县",
- "盐边县",
- "东区",
- "西区"] },
- {
- "name": "泸州市",
- "area": [
- "江阳区",
- "纳溪区",
- "龙马潭区",
- "泸县",
- "合江县",
- "叙永县",
- "古蔺县"] },
- {
- "name": "德阳市",
- "area": [
- "旌阳区",
- "广汉市",
- "什邡市",
- "绵竹市",
- "罗江县",
- "中江县"] },
- {
- "name": "绵阳市",
- "area": [
- "涪城区",
- "游仙区",
- "江油市",
- "盐亭县",
- "三台县",
- "平武县",
- "安县",
- "梓潼县",
- "北川羌族自治县"] },
- {
- "name": "广元市",
- "area": [
- "元坝区",
- "朝天区",
- "青川县",
- "旺苍县",
- "剑阁县",
- "苍溪县",
- "市中区"] },
- {
- "name": "遂宁市",
- "area": [
- "船山区",
- "安居区",
- "射洪县",
- "蓬溪县",
- "大英县"] },
- {
- "name": "内江市",
- "area": [
- "市中区",
- "东兴区",
- "资中县",
- "隆昌县",
- "威远县"] },
- {
- "name": "乐山市",
- "area": [
- "市中区",
- "五通桥区",
- "沙湾区",
- "金口河区",
- "峨眉山市",
- "夹江县",
- "井研县",
- "犍为县",
- "沐川县",
- "马边彝族自治县",
- "峨边彝族自治县"] },
- {
- "name": "南充",
- "area": [
- "顺庆区",
- "高坪区",
- "嘉陵区",
- "阆中市",
- "营山县",
- "蓬安县",
- "仪陇县",
- "南部县",
- "西充县"] },
- {
- "name": "眉山市",
- "area": [
- "东坡区",
- "仁寿县",
- "彭山县",
- "洪雅县",
- "丹棱县",
- "青神县"] },
- {
- "name": "宜宾市",
- "area": [
- "翠屏区",
- "宜宾县",
- "兴文县",
- "南溪县",
- "珙县",
- "长宁县",
- "高县",
- "江安县",
- "筠连县",
- "屏山县"] },
- {
- "name": "广安市",
- "area": [
- "广安区",
- "华蓥市",
- "岳池县",
- "邻水县",
- "武胜县"] },
- {
- "name": "达州市",
- "area": [
- "通川区",
- "万源市",
- "达县",
- "渠县",
- "宣汉县",
- "开江县",
- "大竹县"] },
- {
- "name": "雅安市",
- "area": [
- "雨城区",
- "芦山县",
- "石棉县",
- "名山县",
- "天全县",
- "荥经县",
- "宝兴县",
- "汉源县"] },
- {
- "name": "巴中市",
- "area": [
- "巴州区",
- "南江县",
- "平昌县",
- "通江县"] },
- {
- "name": "资阳市",
- "area": [
- "雁江区",
- "简阳市",
- "安岳县",
- "乐至县"] },
- {
- "name": "阿坝藏族羌族自治州",
- "area": [
- "马尔康县",
- "九寨沟县",
- "红原县",
- "汶川县",
- "阿坝县",
- "理县",
- "若尔盖县",
- "小金县",
- "黑水县",
- "金川县",
- "松潘县",
- "壤塘县",
- "茂县"] },
- {
- "name": "甘孜藏族自治州",
- "area": [
- "康定县",
- "丹巴县",
- "炉霍县",
- "九龙县",
- "甘孜县",
- "雅江县",
- "新龙县",
- "道孚县",
- "白玉县",
- "理塘县",
- "德格县",
- "乡城县",
- "石渠县",
- "稻城县",
- "色达县",
- "巴塘县",
- "泸定县",
- "得荣县"] },
- {
- "name": "凉山彝族自治州",
- "area": [
- "西昌市",
- "美姑县",
- "昭觉县",
- "金阳县",
- "甘洛县",
- "布拖县",
- "雷波县",
- "普格县",
- "宁南县",
- "喜德县",
- "会东县",
- "越西县",
- "会理县",
- "盐源县",
- "德昌县",
- "冕宁县",
- "木里藏族自治县"] }] },
- {
- "name": "贵州省",
- "city": [
- {
- "name": "贵阳市",
- "area": [
- "南明区",
- "云岩区",
- "花溪区",
- "乌当区",
- "白云区",
- "小河区",
- "清镇市",
- "开阳县",
- "修文县",
- "息烽县"] },
- {
- "name": "六盘水市",
- "area": [
- "钟山区",
- "水城县",
- "盘县",
- "六枝特区"] },
- {
- "name": "遵义市",
- "area": [
- "红花岗区",
- "汇川区",
- "赤水市",
- "仁怀市",
- "遵义县",
- "绥阳县",
- "桐梓县",
- "习水县",
- "凤冈县",
- "正安县",
- "余庆县",
- "湄潭县",
- "道真仡佬族苗族自治县",
- "务川仡佬族苗族自治县"] },
- {
- "name": "安顺市",
- "area": [
- "西秀区",
- "普定县",
- "平坝县",
- "镇宁布依族苗族自治县",
- "紫云苗族布依族自治县",
- "关岭布依族苗族自治县"] },
- {
- "name": "铜仁地区",
- "area": [
- "铜仁市",
- "德江县",
- "江口县",
- "思南县",
- "石阡县",
- "玉屏侗族自治县",
- "松桃苗族自治县",
- "印江土家族苗族自治县",
- "沿河土家族自治县",
- "万山特区"] },
- {
- "name": "毕节地区",
- "area": [
- "毕节市",
- "黔西县",
- "大方县",
- "织金县",
- "金沙县",
- "赫章县",
- "纳雍县",
- "威宁彝族回族苗族自治县"] },
- {
- "name": "黔西南布依族苗族自治州",
- "area": [
- "兴义市",
- "望谟县",
- "兴仁县",
- "普安县",
- "册亨县",
- "晴隆县",
- "贞丰县",
- "安龙县"] },
- {
- "name": "黔东南苗族侗族自治州",
- "area": [
- "凯里市",
- "施秉县",
- "从江县",
- "锦屏县",
- "镇远县",
- "麻江县",
- "台江县",
- "天柱县",
- "黄平县",
- "榕江县",
- "剑河县",
- "三穗县",
- "雷山县",
- "黎平县",
- "岑巩县",
- "丹寨县"] },
- {
- "name": "黔南布依族苗族自治州",
- "area": [
- "都匀市",
- "福泉市",
- "贵定县",
- "惠水县",
- "罗甸县",
- "瓮安县",
- "荔波县",
- "龙里县",
- "平塘县",
- "长顺县",
- "独山县",
- "三都水族自治县"] }] },
- {
- "name": "云南省",
- "city": [
- {
- "name": "昆明市",
- "area": [
- "盘龙区",
- "五华区",
- "官渡区",
- "西山区",
- "东川区",
- "安宁市",
- "呈贡县",
- "晋宁县",
- "富民县",
- "宜良县",
- "嵩明县",
- "石林彝族自治县",
- "禄劝彝族苗族自治县",
- "寻甸回族彝族自治县"] },
- {
- "name": "曲靖市",
- "area": [
- "麒麟区",
- "宣威市",
- "马龙县",
- "沾益县",
- "富源县",
- "罗平县",
- "师宗县",
- "陆良县",
- "会泽县"] },
- {
- "name": "玉溪市",
- "area": [
- "红塔区",
- "江川县",
- "澄江县",
- "通海县",
- "华宁县",
- "易门县",
- "峨山彝族自治县",
- "新平彝族傣族自治县",
- "元江哈尼族彝族傣族自治县"] },
- {
- "name": "保山市",
- "area": [
- "隆阳区",
- "施甸县",
- "腾冲县",
- "龙陵县",
- "昌宁县"] },
- {
- "name": "昭通市",
- "area": [
- "昭阳区",
- "鲁甸县",
- "巧家县",
- "盐津县",
- "大关县",
- "永善县",
- "绥江县",
- "镇雄县",
- "彝良县",
- "威信县",
- "水富县"] },
- {
- "name": "丽江市",
- "area": [
- "古城区",
- "永胜县",
- "华坪县",
- "玉龙纳西族自治县",
- "宁蒗彝族自治县"] },
- {
- "name": "普洱市",
- "area": [
- "思茅区",
- "普洱哈尼族彝族自治县",
- "墨江哈尼族自治县",
- "景东彝族自治县",
- "景谷傣族彝族自治县",
- "镇沅彝族哈尼族拉祜族自治县",
- "江城哈尼族彝族自治县",
- "孟连傣族拉祜族佤族自治县",
- "澜沧拉祜族自治县",
- "西盟佤族自治县"] },
- {
- "name": "临沧市",
- "area": [
- "临翔区",
- "凤庆县",
- "云县",
- "永德县",
- "镇康县",
- "双江拉祜族佤族布朗族傣族自治县",
- "耿马傣族佤族自治县",
- "沧源佤族自治县"] },
- {
- "name": "德宏傣族景颇族自治州",
- "area": [
- "潞西市",
- "瑞丽市",
- "梁河县",
- "盈江县",
- "陇川县"] },
- {
- "name": "怒江傈僳族自治州",
- "area": [
- "泸水县",
- "福贡县",
- "贡山独龙族怒族自治县",
- "兰坪白族普米族自治县"] },
- {
- "name": "迪庆藏族自治州",
- "area": [
- "香格里拉县",
- "德钦县",
- "维西傈僳族自治县"] },
- {
- "name": "大理白族自治州",
- "area": [
- "大理市",
- "祥云县",
- "宾川县",
- "弥渡县",
- "永平县",
- "云龙县",
- "洱源县",
- "剑川县",
- "鹤庆县",
- "漾濞彝族自治县",
- "南涧彝族自治县",
- "巍山彝族回族自治县"] },
- {
- "name": "楚雄彝族自治州",
- "area": [
- "楚雄市",
- "双柏县",
- "牟定县",
- "南华县",
- "姚安县",
- "大姚县",
- "永仁县",
- "元谋县",
- "武定县",
- "禄丰县"] },
- {
- "name": "红河哈尼族彝族自治州",
- "area": [
- "蒙自县",
- "个旧市",
- "开远市",
- "绿春县",
- "建水县",
- "石屏县",
- "弥勒县",
- "泸西县",
- "元阳县",
- "红河县",
- "金平苗族瑶族傣族自治县",
- "河口瑶族自治县",
- "屏边苗族自治县"] },
- {
- "name": "文山壮族苗族自治州",
- "area": [
- "文山县",
- "砚山县",
- "西畴县",
- "麻栗坡县",
- "马关县",
- "丘北县",
- "广南县",
- "富宁县"] },
- {
- "name": "西双版纳傣族自治州",
- "area": [
- "景洪市",
- "勐海县",
- "勐腊县"] }] },
- {
- "name": "西藏",
- "city": [
- {
- "name": "拉萨市",
- "area": [
- "城关区",
- "林周县",
- "当雄县",
- "尼木县",
- "曲水县",
- "堆龙德庆县",
- "达孜县",
- "墨竹工卡县"] },
- {
- "name": "那曲地区",
- "area": [
- "那曲县",
- "嘉黎县",
- "比如县",
- "聂荣县",
- "安多县",
- "申扎县",
- "索县",
- "班戈县",
- "巴青县",
- "尼玛县"] },
- {
- "name": "昌都地区",
- "area": [
- "昌都县",
- "江达县",
- "贡觉县",
- "类乌齐县",
- "丁青县",
- "察雅县",
- "八宿县",
- "左贡县",
- "芒康县",
- "洛隆县",
- "边坝县"] },
- {
- "name": "林芝地区",
- "area": [
- "林芝县",
- "工布江达县",
- "米林县",
- "墨脱县",
- "波密县",
- "察隅县",
- "朗县"] },
- {
- "name": "山南地区",
- "area": [
- "乃东县",
- "扎囊县",
- "贡嘎县",
- "桑日县",
- "琼结县",
- "曲松县",
- "措美县",
- "洛扎县",
- "加查县",
- "隆子县",
- "错那县",
- "浪卡子县"] },
- {
- "name": "日喀则地区",
- "area": [
- "日喀则市",
- "南木林县",
- "江孜县",
- "定日县",
- "萨迦县",
- "拉孜县",
- "昂仁县",
- "谢通门县",
- "白朗县",
- "仁布县",
- "康马县",
- "定结县",
- "仲巴县",
- "亚东县",
- "吉隆县",
- "聂拉木县",
- "萨嘎县",
- "岗巴县"] },
- {
- "name": "阿里地区",
- "area": [
- "噶尔县",
- "普兰县",
- "札达县",
- "日土县",
- "革吉县",
- "改则县",
- "措勤县"] }] },
- {
- "name": "陕西省",
- "city": [
- {
- "name": "西安市",
- "area": [
- "莲湖区",
- "新城区",
- "碑林区",
- "雁塔区",
- "灞桥区",
- "未央区",
- "阎良区",
- "临潼区",
- "长安区",
- "高陵县",
- "蓝田县",
- "户县",
- "周至县"] },
- {
- "name": "铜川市",
- "area": [
- "耀州区",
- "王益区",
- "印台区",
- "宜君县"] },
- {
- "name": "宝鸡市",
- "area": [
- "渭滨区",
- "金台区",
- "陈仓区",
- "岐山县",
- "凤翔县",
- "陇县",
- "太白县",
- "麟游县",
- "扶风县",
- "千阳县",
- "眉县",
- "凤县"] },
- {
- "name": "咸阳市",
- "area": [
- "秦都区",
- "渭城区",
- "杨陵区",
- "兴平市",
- "礼泉县",
- "泾阳县",
- "永寿县",
- "三原县",
- "彬县",
- "旬邑县",
- "长武县",
- "乾县",
- "武功县",
- "淳化县"] },
- {
- "name": "渭南市",
- "area": [
- "临渭区",
- "韩城市",
- "华阴市",
- "蒲城县",
- "潼关县",
- "白水县",
- "澄城县",
- "华县",
- "合阳县",
- "富平县",
- "大荔县"] },
- {
- "name": "延安市",
- "area": [
- "宝塔区",
- "安塞县",
- "洛川县",
- "子长县",
- "黄陵县",
- "延川县",
- "富县",
- "延长县",
- "甘泉县",
- "宜川县",
- "志丹县",
- "黄龙县",
- "吴起县"] },
- {
- "name": "汉中市",
- "area": [
- "汉台区",
- "留坝县",
- "镇巴县",
- "城固县",
- "南郑县",
- "洋县",
- "宁强县",
- "佛坪县",
- "勉县",
- "西乡县",
- "略阳县"] },
- {
- "name": "榆林市",
- "area": [
- "榆阳区",
- "清涧县",
- "绥德县",
- "神木县",
- "佳县",
- "府谷县",
- "子洲县",
- "靖边县",
- "横山县",
- "米脂县",
- "吴堡县",
- "定边县"] },
- {
- "name": "安康市",
- "area": [
- "汉滨区",
- "紫阳县",
- "岚皋县",
- "旬阳县",
- "镇坪县",
- "平利县",
- "石泉县",
- "宁陕县",
- "白河县",
- "汉阴县"] },
- {
- "name": "商洛市",
- "area": [
- "商州区",
- "镇安县",
- "山阳县",
- "洛南县",
- "商南县",
- "丹凤县",
- "柞水县"] }] },
- {
- "name": "甘肃省",
- "city": [
- {
- "name": "兰州市",
- "area": [
- "城关区",
- "七里河区",
- "西固区",
- "安宁区",
- "红古区",
- "永登县",
- "皋兰县",
- "榆中县"] },
- {
- "name": "嘉峪关市",
- "area": [
- "嘉峪关市"] },
- {
- "name": "金昌市",
- "area": [
- "金川区",
- "永昌县"] },
- {
- "name": "白银市",
- "area": [
- "白银区",
- "平川区",
- "靖远县",
- "会宁县",
- "景泰县"] },
- {
- "name": "天水市",
- "area": [
- "清水县",
- "秦安县",
- "甘谷县",
- "武山县",
- "张家川回族自治县",
- "北道区",
- "秦城区"] },
- {
- "name": "武威市",
- "area": [
- "凉州区",
- "民勤县",
- "古浪县",
- "天祝藏族自治县"] },
- {
- "name": "酒泉市",
- "area": [
- "肃州区",
- "玉门市",
- "敦煌市",
- "金塔县",
- "肃北蒙古族自治县",
- "阿克塞哈萨克族自治县",
- "安西县"] },
- {
- "name": "张掖市",
- "area": [
- "甘州区",
- "民乐县",
- "临泽县",
- "高台县",
- "山丹县",
- "肃南裕固族自治县"] },
- {
- "name": "庆阳市",
- "area": [
- "西峰区",
- "庆城县",
- "环县",
- "华池县",
- "合水县",
- "正宁县",
- "宁县",
- "镇原县"] },
- {
- "name": "平凉市",
- "area": [
- "崆峒区",
- "泾川县",
- "灵台县",
- "崇信县",
- "华亭县",
- "庄浪县",
- "静宁县"] },
- {
- "name": "定西市",
- "area": [
- "安定区",
- "通渭县",
- "临洮县",
- "漳县",
- "岷县",
- "渭源县",
- "陇西县"] },
- {
- "name": "陇南市",
- "area": [
- "武都区",
- "成县",
- "宕昌县",
- "康县",
- "文县",
- "西和县",
- "礼县",
- "两当县",
- "徽县"] },
- {
- "name": "临夏回族自治州",
- "area": [
- "临夏市",
- "临夏县",
- "康乐县",
- "永靖县",
- "广河县",
- "和政县",
- "东乡族自治县",
- "积石山保安族东乡族撒拉族自治县"] },
- {
- "name": "甘南藏族自治州",
- "area": [
- "合作市",
- "临潭县",
- "卓尼县",
- "舟曲县",
- "迭部县",
- "玛曲县",
- "碌曲县",
- "夏河县"] }] },
- {
- "name": "青海省",
- "city": [
- {
- "name": "西宁市",
- "area": [
- "城中区",
- "城东区",
- "城西区",
- "城北区",
- "湟源县",
- "湟中县",
- "大通回族土族自治县"] },
- {
- "name": "海东地区",
- "area": [
- "平安县",
- "乐都县",
- "民和回族土族自治县",
- "互助土族自治县",
- "化隆回族自治县",
- "循化撒拉族自治县"] },
- {
- "name": "海北藏族自治州",
- "area": [
- "海晏县",
- "祁连县",
- "刚察县",
- "门源回族自治县"] },
- {
- "name": "海南藏族自治州",
- "area": [
- "共和县",
- "同德县",
- "贵德县",
- "兴海县",
- "贵南县"] },
- {
- "name": "黄南藏族自治州",
- "area": [
- "同仁县",
- "尖扎县",
- "泽库县",
- "河南蒙古族自治县"] },
- {
- "name": "果洛藏族自治州",
- "area": [
- "玛沁县",
- "班玛县",
- "甘德县",
- "达日县",
- "久治县",
- "玛多县"] },
- {
- "name": "玉树藏族自治州",
- "area": [
- "玉树县",
- "杂多县",
- "称多县",
- "治多县",
- "囊谦县",
- "曲麻莱县"] },
- {
- "name": "海西蒙古族藏族自治州",
- "area": [
- "德令哈市",
- "格尔木市",
- "乌兰县",
- "都兰县",
- "天峻县"] }] },
- {
- "name": "宁夏",
- "city": [
- {
- "name": "银川市",
- "area": [
- "兴庆区",
- "西夏区",
- "金凤区",
- "灵武市",
- "永宁县",
- "贺兰县"] },
- {
- "name": "石嘴山市",
- "area": [
- "大武口区",
- "惠农区",
- "平罗县"] },
- {
- "name": "吴忠市",
- "area": [
- "利通区",
- "青铜峡市",
- "盐池县",
- "同心县"] },
- {
- "name": "固原市",
- "area": [
- "原州区",
- "西吉县",
- "隆德县",
- "泾源县",
- "彭阳县"] },
- {
- "name": "中卫市",
- "area": [
- "沙坡头区",
- "中宁县",
- "海原县"] }] },
- {
- "name": "新疆",
- "city": [
- {
- "name": "乌鲁木齐市",
- "area": [
- "天山区",
- "沙依巴克区",
- "新市区",
- "水磨沟区",
- "头屯河区",
- "达坂城区",
- "东山区",
- "乌鲁木齐县"] },
- {
- "name": "克拉玛依市",
- "area": [
- "克拉玛依区",
- "独山子区",
- "白碱滩区",
- "乌尔禾区"] },
- {
- "name": "吐鲁番地区",
- "area": [
- "吐鲁番市",
- "托克逊县",
- "鄯善县"] },
- {
- "name": "哈密地区",
- "area": [
- "哈密市",
- "伊吾县",
- "巴里坤哈萨克自治县"] },
- {
- "name": "和田地区",
- "area": [
- "和田市",
- "和田县",
- "洛浦县",
- "民丰县",
- "皮山县",
- "策勒县",
- "于田县",
- "墨玉县"] },
- {
- "name": "阿克苏地区",
- "area": [
- "阿克苏市",
- "温宿县",
- "沙雅县",
- "拜城县",
- "阿瓦提县",
- "库车县",
- "柯坪县",
- "新和县",
- "乌什县"] },
- {
- "name": "喀什地区",
- "area": [
- "喀什市",
- "巴楚县",
- "泽普县",
- "伽师县",
- "叶城县",
- "岳普湖县",
- "疏勒县",
- "麦盖提县",
- "英吉沙县",
- "莎车县",
- "疏附县",
- "塔什库尔干塔吉克自治县"] },
- {
- "name": "克孜勒苏柯尔克孜自治州",
- "area": [
- "阿图什市",
- "阿合奇县",
- "乌恰县",
- "阿克陶县"] },
- {
- "name": "巴音郭楞蒙古自治州",
- "area": [
- "库尔勒市",
- "和静县",
- "尉犁县",
- "和硕县",
- "且末县",
- "博湖县",
- "轮台县",
- "若羌县",
- "焉耆回族自治县"] },
- {
- "name": "昌吉回族自治州",
- "area": [
- "昌吉市",
- "阜康市",
- "奇台县",
- "玛纳斯县",
- "吉木萨尔县",
- "呼图壁县",
- "木垒哈萨克自治县",
- "米泉市"] },
- {
- "name": "博尔塔拉蒙古自治州",
- "area": [
- "博乐市",
- "精河县",
- "温泉县"] },
- {
- "name": "石河子",
- "area": [
- "石河子"] },
- {
- "name": "阿拉尔",
- "area": [
- "阿拉尔"] },
- {
- "name": "图木舒克",
- "area": [
- "图木舒克"] },
- {
- "name": "五家渠",
- "area": [
- "五家渠"] },
- {
- "name": "伊犁哈萨克自治州",
- "area": [
- "伊宁市",
- "奎屯市",
- "伊宁县",
- "特克斯县",
- "尼勒克县",
- "昭苏县",
- "新源县",
- "霍城县",
- "巩留县",
- "察布查尔锡伯自治县",
- "塔城地区",
- "阿勒泰地区"] }] },
- {
- "name": "台湾省",
- "city": [
- {
- "name": "台北市",
- "area": [
- "内湖区",
- "南港区",
- "中正区",
- "万华区",
- "大同区",
- "中山区",
- "松山区",
- "大安区",
- "信义区",
- "文山区",
- "士林区",
- "北投区"] },
- {
- "name": "新北市",
- "area": [
- "板桥区",
- "汐止区",
- "新店区"] },
- {
- "name": "桃园市",
- "area": [
- "其他"] },
- {
- "name": "台中市",
- "area": [
- "其他"] },
- {
- "name": "台南市",
- "area": [
- "其他"] },
- {
- "name": "高雄市",
- "area": [
- "其他"] }] },
- {
- "name": "澳门",
- "city": [
- {
- "name": "澳门",
- "area": [
- "花地玛堂区",
- "圣安多尼堂区",
- "大堂区",
- "望德堂区",
- "风顺堂区",
- "嘉模堂区",
- "圣方济各堂区",
- "路凼"] }] },
- {
- "name": "香港",
- "city": [
- {
- "name": "香港",
- "area": [
- "深水埗区",
- "油尖旺区",
- "九龙城区",
- "黄大仙区",
- "观塘区",
- "北区",
- "大埔区",
- "沙田区",
- "西贡区",
- "元朗区",
- "屯门区",
- "荃湾区",
- "葵青区",
- "离岛区",
- "中西区",
- "湾仔区",
- "东区",
- "南区"] }] }];exports.default = _default;
- /***/ }),
- /***/ 47:
- /*!********************************!*\
- !*** D:/gsxm/ezred/api/ask.js ***!
- \********************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- 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;}
- //上传救护者信息
- function addrescuer(data) {
- return (0, _request.default)({
- url: '/api/add_rescuer',
- method: 'post',
- data: data });
- }
- //上传图片
- function upload(data) {
- return (0, _request.upFilse)({
- url: '/api/upload/image',
- method: 'post',
- data: data });
- }
- //发表文章
- function articlesave(data) {
- return (0, _request.default)({
- url: '/api/circle/articlesave',
- method: 'post',
- data: data });
- }
- //我发表的文章
- function myarticle(data) {
- return (0, _request.default)({
- url: '/api/circle/myarticle',
- method: 'post',
- data: data });
- }
- //发表评论
- function replyask(data) {
- return (0, _request.default)({
- url: '/api/add_a',
- method: 'post',
- data: data });
- }
- //问答详情
- function replylist(data) {
- return (0, _request.default)({
- url: '/api/q_list',
- method: 'get',
- data: data });
- }
- //评论列表
- function myreplylist(data) {
- return (0, _request.default)({
- url: '/api/a_list',
- method: 'get',
- data: data });
- }
- //机构搜索
- function mechanism(data) {
- return (0, _request.default)({
- url: '/api/mechanism',
- method: 'get',
- data: data });
- }
- // 捐款意向 chosintention
- function chosintention(data) {
- return (0, _request.default)({
- url: '/api/intention',
- method: 'get',
- data: data });
- }
- // 爱心捐赠 joinDona 提交
- function joinDona(data) {
- return (0, _request.default)({
- url: '/api/intention',
- method: 'get',
- data: data });
- }
- // 捐赠列表 getDonaList
- function getDonaList(data) {
- return (0, _request.default)({
- url: '/api/bulletin',
- method: 'get',
- data: data });
- }
- // 我的捐赠 MyDonaList
- function MyDonaList(data) {
- return (0, _request.default)({
- url: '/api/my_donate',
- method: 'get',
- data: data });
- }
- // 获得证书 getCertificate
- function getCertificate(data) {
- return (0, _request.default)({
- url: '/api/detail_training',
- method: 'get',
- data: data });
- }
- /***/ }),
- /***/ 48:
- /*!**********************************!*\
- !*** D:/gsxm/ezred/api/money.js ***!
- \**********************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- 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 };}
- // 统计金额
- function computedOrderkey(data) {
- return (0, _request.default)({
- url: '/api/order/computed/' + data.orderkey,
- method: 'post',
- data: data });
- }
- // 创建订单
- function createOrderkey(data, key) {
- return (0, _request.default)({
- url: '/api/donate/create',
- method: 'post',
- data: data });
- }
- // 账户余额
- function balance(data) {
- return (0, _request.default)({
- url: '/api/user/balance',
- method: 'get',
- data: data });
- }
- // 订单支付
- function orderPay(data) {
- return (0, _request.default)({
- url: '/api/order/pay',
- method: 'post',
- data: data });
- }
- /***/ }),
- /***/ 498:
- /*!*****************************************************************!*\
- !*** D:/gsxm/ezred/components/uni-swipe-action-item/mpother.js ***!
- \*****************************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var MIN_DISTANCE = 10;var _default =
- {
- data: function data() {
- return {
- uniShow: false,
- left: 0,
- buttonShow: 'none',
- ani: false,
- moveLeft: '' };
- },
- watch: {
- show: function show(newVal) {
- if (this.autoClose) return;
- this.openState(newVal);
- },
- left: function left() {
- this.moveLeft = "translateX(".concat(this.left, "px)");
- },
- buttonShow: function buttonShow(newVal) {
- if (this.autoClose) return;
- this.openState(newVal);
- },
- leftOptions: function leftOptions() {
- this.init();
- },
- rightOptions: function rightOptions() {
- this.init();
- } },
- mounted: function mounted() {
- // this.position = {}
- if (this.swipeaction.children !== undefined) {
- this.swipeaction.children.push(this);
- }
- this.init();
- },
- beforeDestoy: function beforeDestoy() {var _this = this;
- this.swipeaction.children.forEach(function (item, index) {
- if (item === _this) {
- _this.swipeaction.children.splice(index, 1);
- }
- });
- },
- methods: {
- init: function init() {var _this2 = this;
- clearTimeout(this.timer);
- this.timer = setTimeout(function () {
- _this2.getSelectorQuery();
- }, 100);
- // 移动距离
- this.left = 0;
- this.x = 0;
- },
- closeSwipe: function closeSwipe(e) {
- if (!this.autoClose) return;
- this.swipeaction.closeOther(this);
- },
- appTouchStart: function appTouchStart(e) {var
- clientX =
- e.changedTouches[0].clientX;
- this.clientX = clientX;
- this.timestamp = new Date().getTime();
- },
- appTouchEnd: function appTouchEnd(e, index, item, position) {var
- clientX =
- e.changedTouches[0].clientX;
- // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题
- var diff = Math.abs(this.clientX - clientX);
- var time = new Date().getTime() - this.timestamp;
- if (diff < 40 && time < 300) {
- this.$emit('click', {
- content: item,
- index: index,
- position: position });
- }
- },
- touchstart: function touchstart(e) {
- if (this.disabled) return;
- this.ani = false;
- this.x = this.left || 0;
- this.stopTouchStart(e);
- this.autoClose && this.closeSwipe();
- },
- touchmove: function touchmove(e) {
- if (this.disabled) return;
- // 是否可以滑动页面
- this.stopTouchMove(e);
- if (this.direction !== 'horizontal') {
- return;
- }
- this.move(this.x + this.deltaX);
- },
- touchend: function touchend() {
- if (this.disabled) return;
- this.moveDirection(this.left);
- },
- /**
- * 设置移动距离
- * @param {Object} value
- */
- move: function move(value) {
- value = value || 0;
- var leftWidth = this.leftWidth;
- var rightWidth = this.rightWidth;
- // 获取可滑动范围
- this.left = this.range(value, -rightWidth, leftWidth);
- },
- /**
- * 获取范围
- * @param {Object} num
- * @param {Object} min
- * @param {Object} max
- */
- range: function range(num, min, max) {
- return Math.min(Math.max(num, min), max);
- },
- /**
- * 移动方向判断
- * @param {Object} left
- * @param {Object} value
- */
- moveDirection: function moveDirection(left) {
- var threshold = this.threshold;
- var isopen = this.isopen || 'none';
- var leftWidth = this.leftWidth;
- var rightWidth = this.rightWidth;
- if (this.deltaX === 0) {
- this.openState('none');
- return;
- }
- if (isopen === 'none' && rightWidth > 0 && -left > threshold || isopen !== 'none' && rightWidth > 0 && rightWidth +
- left < threshold) {
- // right
- this.openState('right');
- } else if (isopen === 'none' && leftWidth > 0 && left > threshold || isopen !== 'none' && leftWidth > 0 &&
- leftWidth - left < threshold) {
- // left
- this.openState('left');
- } else {
- // default
- this.openState('none');
- }
- },
- /**
- * 开启状态
- * @param {Boolean} type
- */
- openState: function openState(type) {var _this3 = this;
- var leftWidth = this.leftWidth;
- var rightWidth = this.rightWidth;
- var left = '';
- this.isopen = this.isopen ? this.isopen : 'none';
- switch (type) {
- case "left":
- left = leftWidth;
- break;
- case "right":
- left = -rightWidth;
- break;
- default:
- left = 0;}
- if (this.isopen !== type) {
- this.throttle = true;
- this.$emit('change', type);
- }
- this.isopen = type;
- // 添加动画类
- this.ani = true;
- this.$nextTick(function () {
- _this3.move(left);
- });
- // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的
- },
- close: function close() {
- this.openState('none');
- },
- getDirection: function getDirection(x, y) {
- if (x > y && x > MIN_DISTANCE) {
- return 'horizontal';
- }
- if (y > x && y > MIN_DISTANCE) {
- return 'vertical';
- }
- return '';
- },
- /**
- * 重置滑动状态
- * @param {Object} event
- */
- resetTouchStatus: function resetTouchStatus() {
- this.direction = '';
- this.deltaX = 0;
- this.deltaY = 0;
- this.offsetX = 0;
- this.offsetY = 0;
- },
- /**
- * 设置滑动开始位置
- * @param {Object} event
- */
- stopTouchStart: function stopTouchStart(event) {
- this.resetTouchStatus();
- var touch = event.touches[0];
- this.startX = touch.clientX;
- this.startY = touch.clientY;
- },
- /**
- * 滑动中,是否禁止打开
- * @param {Object} event
- */
- stopTouchMove: function stopTouchMove(event) {
- var touch = event.touches[0];
- this.deltaX = touch.clientX - this.startX;
- this.deltaY = touch.clientY - this.startY;
- this.offsetX = Math.abs(this.deltaX);
- this.offsetY = Math.abs(this.deltaY);
- this.direction = this.direction || this.getDirection(this.offsetX, this.offsetY);
- },
- getSelectorQuery: function getSelectorQuery() {var _this4 = this;
- var views = uni.createSelectorQuery().in(this);
- views.
- selectAll('.uni-swipe_button-group').
- boundingClientRect(function (data) {
- var show = 'none';
- if (_this4.autoClose) {
- show = 'none';
- } else {
- show = _this4.show;
- }
- _this4.leftWidth = data[0].width || 0;
- _this4.rightWidth = data[1].width || 0;
- _this4.buttonShow = show;
- }).
- exec();
- } } };exports.default = _default;
- /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
- /***/ }),
- /***/ 5:
- /*!************************************!*\
- !*** D:/gsxm/ezred/store/index.js ***!
- \************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _vue = _interopRequireDefault(__webpack_require__(/*! vue */ 2));
- var _vuex = _interopRequireDefault(__webpack_require__(/*! vuex */ 6));
- var _user = _interopRequireDefault(__webpack_require__(/*! ./model/user */ 7));function _interopRequireDefault(obj) {return obj && obj.__esModule ? obj : { default: obj };}
- _vue.default.use(_vuex.default);
- var store = new _vuex.default.Store({
- state: {
- baseURL: 'http://ez.igxys.com', //请求地址配置
- // baseURL: 'http://yrh.liuniu946.com', //请求地址配置
- urlFile: '/index', //项目部署所在文件夹
- loginInterceptor: false, //是否打开强制登录
- token: ''
- // shareData:'',//分享信息
- },
- mutations: {},
- modules: {
- user: _user.default },
- actions: {} });var _default =
- store;exports.default = _default;
- /***/ }),
- /***/ 527:
- /*!***************************************************!*\
- !*** D:/gsxm/ezred/components/uni-icons/icons.js ***!
- \***************************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var _default = {
- 'contact': "\uE100",
- 'person': "\uE101",
- 'personadd': "\uE102",
- 'contact-filled': "\uE130",
- 'person-filled': "\uE131",
- 'personadd-filled': "\uE132",
- 'phone': "\uE200",
- 'email': "\uE201",
- 'chatbubble': "\uE202",
- 'chatboxes': "\uE203",
- 'phone-filled': "\uE230",
- 'email-filled': "\uE231",
- 'chatbubble-filled': "\uE232",
- 'chatboxes-filled': "\uE233",
- 'weibo': "\uE260",
- 'weixin': "\uE261",
- 'pengyouquan': "\uE262",
- 'chat': "\uE263",
- 'qq': "\uE264",
- 'videocam': "\uE300",
- 'camera': "\uE301",
- 'mic': "\uE302",
- 'location': "\uE303",
- 'mic-filled': "\uE332",
- 'speech': "\uE332",
- 'location-filled': "\uE333",
- 'micoff': "\uE360",
- 'image': "\uE363",
- 'map': "\uE364",
- 'compose': "\uE400",
- 'trash': "\uE401",
- 'upload': "\uE402",
- 'download': "\uE403",
- 'close': "\uE404",
- 'redo': "\uE405",
- 'undo': "\uE406",
- 'refresh': "\uE407",
- 'star': "\uE408",
- 'plus': "\uE409",
- 'minus': "\uE410",
- 'circle': "\uE411",
- 'checkbox': "\uE411",
- 'close-filled': "\uE434",
- 'clear': "\uE434",
- 'refresh-filled': "\uE437",
- 'star-filled': "\uE438",
- 'plus-filled': "\uE439",
- 'minus-filled': "\uE440",
- 'circle-filled': "\uE441",
- 'checkbox-filled': "\uE442",
- 'closeempty': "\uE460",
- 'refreshempty': "\uE461",
- 'reload': "\uE462",
- 'starhalf': "\uE463",
- 'spinner': "\uE464",
- 'spinner-cycle': "\uE465",
- 'search': "\uE466",
- 'plusempty': "\uE468",
- 'forward': "\uE470",
- 'back': "\uE471",
- 'left-nav': "\uE471",
- 'checkmarkempty': "\uE472",
- 'home': "\uE500",
- 'navigate': "\uE501",
- 'gear': "\uE502",
- 'paperplane': "\uE503",
- 'info': "\uE504",
- 'help': "\uE505",
- 'locked': "\uE506",
- 'more': "\uE507",
- 'flag': "\uE508",
- 'home-filled': "\uE530",
- 'gear-filled': "\uE532",
- 'info-filled': "\uE534",
- 'help-filled': "\uE535",
- 'more-filled': "\uE537",
- 'settings': "\uE560",
- 'list': "\uE562",
- 'bars': "\uE563",
- 'loop': "\uE565",
- 'paperclip': "\uE567",
- 'eye': "\uE568",
- 'arrowup': "\uE580",
- 'arrowdown': "\uE581",
- 'arrowleft': "\uE582",
- 'arrowright': "\uE583",
- 'arrowthinup': "\uE584",
- 'arrowthindown': "\uE585",
- 'arrowthinleft': "\uE586",
- 'arrowthinright': "\uE587",
- 'pulldown': "\uE588",
- 'closefill': "\uE589",
- 'sound': "\uE590",
- 'scan': "\uE612" };exports.default = _default;
- /***/ }),
- /***/ 6:
- /*!********************************************!*\
- !*** ./node_modules/vuex/dist/vuex.esm.js ***!
- \********************************************/
- /*! exports provided: default, Store, createNamespacedHelpers, install, mapActions, mapGetters, mapMutations, mapState */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Store", function() { return Store; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "createNamespacedHelpers", function() { return createNamespacedHelpers; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "install", function() { return install; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapActions", function() { return mapActions; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapGetters", function() { return mapGetters; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapMutations", function() { return mapMutations; });
- /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapState", function() { return mapState; });
- /*!
- * vuex v3.4.0
- * (c) 2020 Evan You
- * @license MIT
- */
- function applyMixin (Vue) {
- var version = Number(Vue.version.split('.')[0]);
- if (version >= 2) {
- Vue.mixin({ beforeCreate: vuexInit });
- } else {
- // override init and inject vuex init procedure
- // for 1.x backwards compatibility.
- var _init = Vue.prototype._init;
- Vue.prototype._init = function (options) {
- if ( options === void 0 ) options = {};
- options.init = options.init
- ? [vuexInit].concat(options.init)
- : vuexInit;
- _init.call(this, options);
- };
- }
- /**
- * Vuex init hook, injected into each instances init hooks list.
- */
- function vuexInit () {
- var options = this.$options;
- // store injection
- if (options.store) {
- this.$store = typeof options.store === 'function'
- ? options.store()
- : options.store;
- } else if (options.parent && options.parent.$store) {
- this.$store = options.parent.$store;
- }
- }
- }
- var target = typeof window !== 'undefined'
- ? window
- : typeof global !== 'undefined'
- ? global
- : {};
- var devtoolHook = target.__VUE_DEVTOOLS_GLOBAL_HOOK__;
- function devtoolPlugin (store) {
- if (!devtoolHook) { return }
- store._devtoolHook = devtoolHook;
- devtoolHook.emit('vuex:init', store);
- devtoolHook.on('vuex:travel-to-state', function (targetState) {
- store.replaceState(targetState);
- });
- store.subscribe(function (mutation, state) {
- devtoolHook.emit('vuex:mutation', mutation, state);
- }, { prepend: true });
- store.subscribeAction(function (action, state) {
- devtoolHook.emit('vuex:action', action, state);
- }, { prepend: true });
- }
- /**
- * Get the first item that pass the test
- * by second argument function
- *
- * @param {Array} list
- * @param {Function} f
- * @return {*}
- */
- /**
- * forEach for object
- */
- function forEachValue (obj, fn) {
- Object.keys(obj).forEach(function (key) { return fn(obj[key], key); });
- }
- function isObject (obj) {
- return obj !== null && typeof obj === 'object'
- }
- function isPromise (val) {
- return val && typeof val.then === 'function'
- }
- function assert (condition, msg) {
- if (!condition) { throw new Error(("[vuex] " + msg)) }
- }
- function partial (fn, arg) {
- return function () {
- return fn(arg)
- }
- }
- // Base data struct for store's module, package with some attribute and method
- var Module = function Module (rawModule, runtime) {
- this.runtime = runtime;
- // Store some children item
- this._children = Object.create(null);
- // Store the origin module object which passed by programmer
- this._rawModule = rawModule;
- var rawState = rawModule.state;
- // Store the origin module's state
- this.state = (typeof rawState === 'function' ? rawState() : rawState) || {};
- };
- var prototypeAccessors = { namespaced: { configurable: true } };
- prototypeAccessors.namespaced.get = function () {
- return !!this._rawModule.namespaced
- };
- Module.prototype.addChild = function addChild (key, module) {
- this._children[key] = module;
- };
- Module.prototype.removeChild = function removeChild (key) {
- delete this._children[key];
- };
- Module.prototype.getChild = function getChild (key) {
- return this._children[key]
- };
- Module.prototype.hasChild = function hasChild (key) {
- return key in this._children
- };
- Module.prototype.update = function update (rawModule) {
- this._rawModule.namespaced = rawModule.namespaced;
- if (rawModule.actions) {
- this._rawModule.actions = rawModule.actions;
- }
- if (rawModule.mutations) {
- this._rawModule.mutations = rawModule.mutations;
- }
- if (rawModule.getters) {
- this._rawModule.getters = rawModule.getters;
- }
- };
- Module.prototype.forEachChild = function forEachChild (fn) {
- forEachValue(this._children, fn);
- };
- Module.prototype.forEachGetter = function forEachGetter (fn) {
- if (this._rawModule.getters) {
- forEachValue(this._rawModule.getters, fn);
- }
- };
- Module.prototype.forEachAction = function forEachAction (fn) {
- if (this._rawModule.actions) {
- forEachValue(this._rawModule.actions, fn);
- }
- };
- Module.prototype.forEachMutation = function forEachMutation (fn) {
- if (this._rawModule.mutations) {
- forEachValue(this._rawModule.mutations, fn);
- }
- };
- Object.defineProperties( Module.prototype, prototypeAccessors );
- var ModuleCollection = function ModuleCollection (rawRootModule) {
- // register root module (Vuex.Store options)
- this.register([], rawRootModule, false);
- };
- ModuleCollection.prototype.get = function get (path) {
- return path.reduce(function (module, key) {
- return module.getChild(key)
- }, this.root)
- };
- ModuleCollection.prototype.getNamespace = function getNamespace (path) {
- var module = this.root;
- return path.reduce(function (namespace, key) {
- module = module.getChild(key);
- return namespace + (module.namespaced ? key + '/' : '')
- }, '')
- };
- ModuleCollection.prototype.update = function update$1 (rawRootModule) {
- update([], this.root, rawRootModule);
- };
- ModuleCollection.prototype.register = function register (path, rawModule, runtime) {
- var this$1 = this;
- if ( runtime === void 0 ) runtime = true;
- if ((true)) {
- assertRawModule(path, rawModule);
- }
- var newModule = new Module(rawModule, runtime);
- if (path.length === 0) {
- this.root = newModule;
- } else {
- var parent = this.get(path.slice(0, -1));
- parent.addChild(path[path.length - 1], newModule);
- }
- // register nested modules
- if (rawModule.modules) {
- forEachValue(rawModule.modules, function (rawChildModule, key) {
- this$1.register(path.concat(key), rawChildModule, runtime);
- });
- }
- };
- ModuleCollection.prototype.unregister = function unregister (path) {
- var parent = this.get(path.slice(0, -1));
- var key = path[path.length - 1];
- if (!parent.getChild(key).runtime) { return }
- parent.removeChild(key);
- };
- ModuleCollection.prototype.isRegistered = function isRegistered (path) {
- var parent = this.get(path.slice(0, -1));
- var key = path[path.length - 1];
- return parent.hasChild(key)
- };
- function update (path, targetModule, newModule) {
- if ((true)) {
- assertRawModule(path, newModule);
- }
- // update target module
- targetModule.update(newModule);
- // update nested modules
- if (newModule.modules) {
- for (var key in newModule.modules) {
- if (!targetModule.getChild(key)) {
- if ((true)) {
- console.warn(
- "[vuex] trying to add a new module '" + key + "' on hot reloading, " +
- 'manual reload is needed'
- );
- }
- return
- }
- update(
- path.concat(key),
- targetModule.getChild(key),
- newModule.modules[key]
- );
- }
- }
- }
- var functionAssert = {
- assert: function (value) { return typeof value === 'function'; },
- expected: 'function'
- };
- var objectAssert = {
- assert: function (value) { return typeof value === 'function' ||
- (typeof value === 'object' && typeof value.handler === 'function'); },
- expected: 'function or object with "handler" function'
- };
- var assertTypes = {
- getters: functionAssert,
- mutations: functionAssert,
- actions: objectAssert
- };
- function assertRawModule (path, rawModule) {
- Object.keys(assertTypes).forEach(function (key) {
- if (!rawModule[key]) { return }
- var assertOptions = assertTypes[key];
- forEachValue(rawModule[key], function (value, type) {
- assert(
- assertOptions.assert(value),
- makeAssertionMessage(path, key, type, value, assertOptions.expected)
- );
- });
- });
- }
- function makeAssertionMessage (path, key, type, value, expected) {
- var buf = key + " should be " + expected + " but \"" + key + "." + type + "\"";
- if (path.length > 0) {
- buf += " in module \"" + (path.join('.')) + "\"";
- }
- buf += " is " + (JSON.stringify(value)) + ".";
- return buf
- }
- var Vue; // bind on install
- var Store = function Store (options) {
- var this$1 = this;
- if ( options === void 0 ) options = {};
- // Auto install if it is not done yet and `window` has `Vue`.
- // To allow users to avoid auto-installation in some cases,
- // this code should be placed here. See #731
- if (!Vue && typeof window !== 'undefined' && window.Vue) {
- install(window.Vue);
- }
- if ((true)) {
- assert(Vue, "must call Vue.use(Vuex) before creating a store instance.");
- assert(typeof Promise !== 'undefined', "vuex requires a Promise polyfill in this browser.");
- assert(this instanceof Store, "store must be called with the new operator.");
- }
- var plugins = options.plugins; if ( plugins === void 0 ) plugins = [];
- var strict = options.strict; if ( strict === void 0 ) strict = false;
- // store internal state
- this._committing = false;
- this._actions = Object.create(null);
- this._actionSubscribers = [];
- this._mutations = Object.create(null);
- this._wrappedGetters = Object.create(null);
- this._modules = new ModuleCollection(options);
- this._modulesNamespaceMap = Object.create(null);
- this._subscribers = [];
- this._watcherVM = new Vue();
- this._makeLocalGettersCache = Object.create(null);
- // bind commit and dispatch to self
- var store = this;
- var ref = this;
- var dispatch = ref.dispatch;
- var commit = ref.commit;
- this.dispatch = function boundDispatch (type, payload) {
- return dispatch.call(store, type, payload)
- };
- this.commit = function boundCommit (type, payload, options) {
- return commit.call(store, type, payload, options)
- };
- // strict mode
- this.strict = strict;
- var state = this._modules.root.state;
- // init root module.
- // this also recursively registers all sub-modules
- // and collects all module getters inside this._wrappedGetters
- installModule(this, state, [], this._modules.root);
- // initialize the store vm, which is responsible for the reactivity
- // (also registers _wrappedGetters as computed properties)
- resetStoreVM(this, state);
- // apply plugins
- plugins.forEach(function (plugin) { return plugin(this$1); });
- var useDevtools = options.devtools !== undefined ? options.devtools : Vue.config.devtools;
- if (useDevtools) {
- devtoolPlugin(this);
- }
- };
- var prototypeAccessors$1 = { state: { configurable: true } };
- prototypeAccessors$1.state.get = function () {
- return this._vm._data.$$state
- };
- prototypeAccessors$1.state.set = function (v) {
- if ((true)) {
- assert(false, "use store.replaceState() to explicit replace store state.");
- }
- };
- Store.prototype.commit = function commit (_type, _payload, _options) {
- var this$1 = this;
- // check object-style commit
- var ref = unifyObjectStyle(_type, _payload, _options);
- var type = ref.type;
- var payload = ref.payload;
- var options = ref.options;
- var mutation = { type: type, payload: payload };
- var entry = this._mutations[type];
- if (!entry) {
- if ((true)) {
- console.error(("[vuex] unknown mutation type: " + type));
- }
- return
- }
- this._withCommit(function () {
- entry.forEach(function commitIterator (handler) {
- handler(payload);
- });
- });
- this._subscribers
- .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
- .forEach(function (sub) { return sub(mutation, this$1.state); });
- if (
- ( true) &&
- options && options.silent
- ) {
- console.warn(
- "[vuex] mutation type: " + type + ". Silent option has been removed. " +
- 'Use the filter functionality in the vue-devtools'
- );
- }
- };
- Store.prototype.dispatch = function dispatch (_type, _payload) {
- var this$1 = this;
- // check object-style dispatch
- var ref = unifyObjectStyle(_type, _payload);
- var type = ref.type;
- var payload = ref.payload;
- var action = { type: type, payload: payload };
- var entry = this._actions[type];
- if (!entry) {
- if ((true)) {
- console.error(("[vuex] unknown action type: " + type));
- }
- return
- }
- try {
- this._actionSubscribers
- .slice() // shallow copy to prevent iterator invalidation if subscriber synchronously calls unsubscribe
- .filter(function (sub) { return sub.before; })
- .forEach(function (sub) { return sub.before(action, this$1.state); });
- } catch (e) {
- if ((true)) {
- console.warn("[vuex] error in before action subscribers: ");
- console.error(e);
- }
- }
- var result = entry.length > 1
- ? Promise.all(entry.map(function (handler) { return handler(payload); }))
- : entry[0](payload);
- return new Promise(function (resolve, reject) {
- result.then(function (res) {
- try {
- this$1._actionSubscribers
- .filter(function (sub) { return sub.after; })
- .forEach(function (sub) { return sub.after(action, this$1.state); });
- } catch (e) {
- if ((true)) {
- console.warn("[vuex] error in after action subscribers: ");
- console.error(e);
- }
- }
- resolve(res);
- }, function (error) {
- try {
- this$1._actionSubscribers
- .filter(function (sub) { return sub.error; })
- .forEach(function (sub) { return sub.error(action, this$1.state, error); });
- } catch (e) {
- if ((true)) {
- console.warn("[vuex] error in error action subscribers: ");
- console.error(e);
- }
- }
- reject(error);
- });
- })
- };
- Store.prototype.subscribe = function subscribe (fn, options) {
- return genericSubscribe(fn, this._subscribers, options)
- };
- Store.prototype.subscribeAction = function subscribeAction (fn, options) {
- var subs = typeof fn === 'function' ? { before: fn } : fn;
- return genericSubscribe(subs, this._actionSubscribers, options)
- };
- Store.prototype.watch = function watch (getter, cb, options) {
- var this$1 = this;
- if ((true)) {
- assert(typeof getter === 'function', "store.watch only accepts a function.");
- }
- return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options)
- };
- Store.prototype.replaceState = function replaceState (state) {
- var this$1 = this;
- this._withCommit(function () {
- this$1._vm._data.$$state = state;
- });
- };
- Store.prototype.registerModule = function registerModule (path, rawModule, options) {
- if ( options === void 0 ) options = {};
- if (typeof path === 'string') { path = [path]; }
- if ((true)) {
- assert(Array.isArray(path), "module path must be a string or an Array.");
- assert(path.length > 0, 'cannot register the root module by using registerModule.');
- }
- this._modules.register(path, rawModule);
- installModule(this, this.state, path, this._modules.get(path), options.preserveState);
- // reset store to update getters...
- resetStoreVM(this, this.state);
- };
- Store.prototype.unregisterModule = function unregisterModule (path) {
- var this$1 = this;
- if (typeof path === 'string') { path = [path]; }
- if ((true)) {
- assert(Array.isArray(path), "module path must be a string or an Array.");
- }
- this._modules.unregister(path);
- this._withCommit(function () {
- var parentState = getNestedState(this$1.state, path.slice(0, -1));
- Vue.delete(parentState, path[path.length - 1]);
- });
- resetStore(this);
- };
- Store.prototype.hasModule = function hasModule (path) {
- if (typeof path === 'string') { path = [path]; }
- if ((true)) {
- assert(Array.isArray(path), "module path must be a string or an Array.");
- }
- return this._modules.isRegistered(path)
- };
- Store.prototype.hotUpdate = function hotUpdate (newOptions) {
- this._modules.update(newOptions);
- resetStore(this, true);
- };
- Store.prototype._withCommit = function _withCommit (fn) {
- var committing = this._committing;
- this._committing = true;
- fn();
- this._committing = committing;
- };
- Object.defineProperties( Store.prototype, prototypeAccessors$1 );
- function genericSubscribe (fn, subs, options) {
- if (subs.indexOf(fn) < 0) {
- options && options.prepend
- ? subs.unshift(fn)
- : subs.push(fn);
- }
- return function () {
- var i = subs.indexOf(fn);
- if (i > -1) {
- subs.splice(i, 1);
- }
- }
- }
- function resetStore (store, hot) {
- store._actions = Object.create(null);
- store._mutations = Object.create(null);
- store._wrappedGetters = Object.create(null);
- store._modulesNamespaceMap = Object.create(null);
- var state = store.state;
- // init all modules
- installModule(store, state, [], store._modules.root, true);
- // reset vm
- resetStoreVM(store, state, hot);
- }
- function resetStoreVM (store, state, hot) {
- var oldVm = store._vm;
- // bind store public getters
- store.getters = {};
- // reset local getters cache
- store._makeLocalGettersCache = Object.create(null);
- var wrappedGetters = store._wrappedGetters;
- var computed = {};
- forEachValue(wrappedGetters, function (fn, key) {
- // use computed to leverage its lazy-caching mechanism
- // direct inline function use will lead to closure preserving oldVm.
- // using partial to return function with only arguments preserved in closure environment.
- computed[key] = partial(fn, store);
- Object.defineProperty(store.getters, key, {
- get: function () { return store._vm[key]; },
- enumerable: true // for local getters
- });
- });
- // use a Vue instance to store the state tree
- // suppress warnings just in case the user has added
- // some funky global mixins
- var silent = Vue.config.silent;
- Vue.config.silent = true;
- store._vm = new Vue({
- data: {
- $$state: state
- },
- computed: computed
- });
- Vue.config.silent = silent;
- // enable strict mode for new vm
- if (store.strict) {
- enableStrictMode(store);
- }
- if (oldVm) {
- if (hot) {
- // dispatch changes in all subscribed watchers
- // to force getter re-evaluation for hot reloading.
- store._withCommit(function () {
- oldVm._data.$$state = null;
- });
- }
- Vue.nextTick(function () { return oldVm.$destroy(); });
- }
- }
- function installModule (store, rootState, path, module, hot) {
- var isRoot = !path.length;
- var namespace = store._modules.getNamespace(path);
- // register in namespace map
- if (module.namespaced) {
- if (store._modulesNamespaceMap[namespace] && ("development" !== 'production')) {
- console.error(("[vuex] duplicate namespace " + namespace + " for the namespaced module " + (path.join('/'))));
- }
- store._modulesNamespaceMap[namespace] = module;
- }
- // set state
- if (!isRoot && !hot) {
- var parentState = getNestedState(rootState, path.slice(0, -1));
- var moduleName = path[path.length - 1];
- store._withCommit(function () {
- if ((true)) {
- if (moduleName in parentState) {
- console.warn(
- ("[vuex] state field \"" + moduleName + "\" was overridden by a module with the same name at \"" + (path.join('.')) + "\"")
- );
- }
- }
- Vue.set(parentState, moduleName, module.state);
- });
- }
- var local = module.context = makeLocalContext(store, namespace, path);
- module.forEachMutation(function (mutation, key) {
- var namespacedType = namespace + key;
- registerMutation(store, namespacedType, mutation, local);
- });
- module.forEachAction(function (action, key) {
- var type = action.root ? key : namespace + key;
- var handler = action.handler || action;
- registerAction(store, type, handler, local);
- });
- module.forEachGetter(function (getter, key) {
- var namespacedType = namespace + key;
- registerGetter(store, namespacedType, getter, local);
- });
- module.forEachChild(function (child, key) {
- installModule(store, rootState, path.concat(key), child, hot);
- });
- }
- /**
- * make localized dispatch, commit, getters and state
- * if there is no namespace, just use root ones
- */
- function makeLocalContext (store, namespace, path) {
- var noNamespace = namespace === '';
- var local = {
- dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) {
- var args = unifyObjectStyle(_type, _payload, _options);
- var payload = args.payload;
- var options = args.options;
- var type = args.type;
- if (!options || !options.root) {
- type = namespace + type;
- if (( true) && !store._actions[type]) {
- console.error(("[vuex] unknown local action type: " + (args.type) + ", global type: " + type));
- return
- }
- }
- return store.dispatch(type, payload)
- },
- commit: noNamespace ? store.commit : function (_type, _payload, _options) {
- var args = unifyObjectStyle(_type, _payload, _options);
- var payload = args.payload;
- var options = args.options;
- var type = args.type;
- if (!options || !options.root) {
- type = namespace + type;
- if (( true) && !store._mutations[type]) {
- console.error(("[vuex] unknown local mutation type: " + (args.type) + ", global type: " + type));
- return
- }
- }
- store.commit(type, payload, options);
- }
- };
- // getters and state object must be gotten lazily
- // because they will be changed by vm update
- Object.defineProperties(local, {
- getters: {
- get: noNamespace
- ? function () { return store.getters; }
- : function () { return makeLocalGetters(store, namespace); }
- },
- state: {
- get: function () { return getNestedState(store.state, path); }
- }
- });
- return local
- }
- function makeLocalGetters (store, namespace) {
- if (!store._makeLocalGettersCache[namespace]) {
- var gettersProxy = {};
- var splitPos = namespace.length;
- Object.keys(store.getters).forEach(function (type) {
- // skip if the target getter is not match this namespace
- if (type.slice(0, splitPos) !== namespace) { return }
- // extract local getter type
- var localType = type.slice(splitPos);
- // Add a port to the getters proxy.
- // Define as getter property because
- // we do not want to evaluate the getters in this time.
- Object.defineProperty(gettersProxy, localType, {
- get: function () { return store.getters[type]; },
- enumerable: true
- });
- });
- store._makeLocalGettersCache[namespace] = gettersProxy;
- }
- return store._makeLocalGettersCache[namespace]
- }
- function registerMutation (store, type, handler, local) {
- var entry = store._mutations[type] || (store._mutations[type] = []);
- entry.push(function wrappedMutationHandler (payload) {
- handler.call(store, local.state, payload);
- });
- }
- function registerAction (store, type, handler, local) {
- var entry = store._actions[type] || (store._actions[type] = []);
- entry.push(function wrappedActionHandler (payload) {
- var res = handler.call(store, {
- dispatch: local.dispatch,
- commit: local.commit,
- getters: local.getters,
- state: local.state,
- rootGetters: store.getters,
- rootState: store.state
- }, payload);
- if (!isPromise(res)) {
- res = Promise.resolve(res);
- }
- if (store._devtoolHook) {
- return res.catch(function (err) {
- store._devtoolHook.emit('vuex:error', err);
- throw err
- })
- } else {
- return res
- }
- });
- }
- function registerGetter (store, type, rawGetter, local) {
- if (store._wrappedGetters[type]) {
- if ((true)) {
- console.error(("[vuex] duplicate getter key: " + type));
- }
- return
- }
- store._wrappedGetters[type] = function wrappedGetter (store) {
- return rawGetter(
- local.state, // local state
- local.getters, // local getters
- store.state, // root state
- store.getters // root getters
- )
- };
- }
- function enableStrictMode (store) {
- store._vm.$watch(function () { return this._data.$$state }, function () {
- if ((true)) {
- assert(store._committing, "do not mutate vuex store state outside mutation handlers.");
- }
- }, { deep: true, sync: true });
- }
- function getNestedState (state, path) {
- return path.reduce(function (state, key) { return state[key]; }, state)
- }
- function unifyObjectStyle (type, payload, options) {
- if (isObject(type) && type.type) {
- options = payload;
- payload = type;
- type = type.type;
- }
- if ((true)) {
- assert(typeof type === 'string', ("expects string as the type, but found " + (typeof type) + "."));
- }
- return { type: type, payload: payload, options: options }
- }
- function install (_Vue) {
- if (Vue && _Vue === Vue) {
- if ((true)) {
- console.error(
- '[vuex] already installed. Vue.use(Vuex) should be called only once.'
- );
- }
- return
- }
- Vue = _Vue;
- applyMixin(Vue);
- }
- /**
- * Reduce the code which written in Vue.js for getting the state.
- * @param {String} [namespace] - Module's namespace
- * @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.
- * @param {Object}
- */
- var mapState = normalizeNamespace(function (namespace, states) {
- var res = {};
- if (( true) && !isValidMap(states)) {
- console.error('[vuex] mapState: mapper parameter must be either an Array or an Object');
- }
- normalizeMap(states).forEach(function (ref) {
- var key = ref.key;
- var val = ref.val;
- res[key] = function mappedState () {
- var state = this.$store.state;
- var getters = this.$store.getters;
- if (namespace) {
- var module = getModuleByNamespace(this.$store, 'mapState', namespace);
- if (!module) {
- return
- }
- state = module.context.state;
- getters = module.context.getters;
- }
- return typeof val === 'function'
- ? val.call(this, state, getters)
- : state[val]
- };
- // mark vuex getter for devtools
- res[key].vuex = true;
- });
- return res
- });
- /**
- * Reduce the code which written in Vue.js for committing the mutation
- * @param {String} [namespace] - Module's namespace
- * @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.
- * @return {Object}
- */
- var mapMutations = normalizeNamespace(function (namespace, mutations) {
- var res = {};
- if (( true) && !isValidMap(mutations)) {
- console.error('[vuex] mapMutations: mapper parameter must be either an Array or an Object');
- }
- normalizeMap(mutations).forEach(function (ref) {
- var key = ref.key;
- var val = ref.val;
- res[key] = function mappedMutation () {
- var args = [], len = arguments.length;
- while ( len-- ) args[ len ] = arguments[ len ];
- // Get the commit method from store
- var commit = this.$store.commit;
- if (namespace) {
- var module = getModuleByNamespace(this.$store, 'mapMutations', namespace);
- if (!module) {
- return
- }
- commit = module.context.commit;
- }
- return typeof val === 'function'
- ? val.apply(this, [commit].concat(args))
- : commit.apply(this.$store, [val].concat(args))
- };
- });
- return res
- });
- /**
- * Reduce the code which written in Vue.js for getting the getters
- * @param {String} [namespace] - Module's namespace
- * @param {Object|Array} getters
- * @return {Object}
- */
- var mapGetters = normalizeNamespace(function (namespace, getters) {
- var res = {};
- if (( true) && !isValidMap(getters)) {
- console.error('[vuex] mapGetters: mapper parameter must be either an Array or an Object');
- }
- normalizeMap(getters).forEach(function (ref) {
- var key = ref.key;
- var val = ref.val;
- // The namespace has been mutated by normalizeNamespace
- val = namespace + val;
- res[key] = function mappedGetter () {
- if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) {
- return
- }
- if (( true) && !(val in this.$store.getters)) {
- console.error(("[vuex] unknown getter: " + val));
- return
- }
- return this.$store.getters[val]
- };
- // mark vuex getter for devtools
- res[key].vuex = true;
- });
- return res
- });
- /**
- * Reduce the code which written in Vue.js for dispatch the action
- * @param {String} [namespace] - Module's namespace
- * @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.
- * @return {Object}
- */
- var mapActions = normalizeNamespace(function (namespace, actions) {
- var res = {};
- if (( true) && !isValidMap(actions)) {
- console.error('[vuex] mapActions: mapper parameter must be either an Array or an Object');
- }
- normalizeMap(actions).forEach(function (ref) {
- var key = ref.key;
- var val = ref.val;
- res[key] = function mappedAction () {
- var args = [], len = arguments.length;
- while ( len-- ) args[ len ] = arguments[ len ];
- // get dispatch function from store
- var dispatch = this.$store.dispatch;
- if (namespace) {
- var module = getModuleByNamespace(this.$store, 'mapActions', namespace);
- if (!module) {
- return
- }
- dispatch = module.context.dispatch;
- }
- return typeof val === 'function'
- ? val.apply(this, [dispatch].concat(args))
- : dispatch.apply(this.$store, [val].concat(args))
- };
- });
- return res
- });
- /**
- * Rebinding namespace param for mapXXX function in special scoped, and return them by simple object
- * @param {String} namespace
- * @return {Object}
- */
- var createNamespacedHelpers = function (namespace) { return ({
- mapState: mapState.bind(null, namespace),
- mapGetters: mapGetters.bind(null, namespace),
- mapMutations: mapMutations.bind(null, namespace),
- mapActions: mapActions.bind(null, namespace)
- }); };
- /**
- * Normalize the map
- * normalizeMap([1, 2, 3]) => [ { key: 1, val: 1 }, { key: 2, val: 2 }, { key: 3, val: 3 } ]
- * normalizeMap({a: 1, b: 2, c: 3}) => [ { key: 'a', val: 1 }, { key: 'b', val: 2 }, { key: 'c', val: 3 } ]
- * @param {Array|Object} map
- * @return {Object}
- */
- function normalizeMap (map) {
- if (!isValidMap(map)) {
- return []
- }
- return Array.isArray(map)
- ? map.map(function (key) { return ({ key: key, val: key }); })
- : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); })
- }
- /**
- * Validate whether given map is valid or not
- * @param {*} map
- * @return {Boolean}
- */
- function isValidMap (map) {
- return Array.isArray(map) || isObject(map)
- }
- /**
- * 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.
- * @param {Function} fn
- * @return {Function}
- */
- function normalizeNamespace (fn) {
- return function (namespace, map) {
- if (typeof namespace !== 'string') {
- map = namespace;
- namespace = '';
- } else if (namespace.charAt(namespace.length - 1) !== '/') {
- namespace += '/';
- }
- return fn(namespace, map)
- }
- }
- /**
- * Search a special module from store by namespace. if module not exist, print error message.
- * @param {Object} store
- * @param {String} helper
- * @param {String} namespace
- * @return {Object}
- */
- function getModuleByNamespace (store, helper, namespace) {
- var module = store._modulesNamespaceMap[namespace];
- if (( true) && !module) {
- console.error(("[vuex] module namespace not found in " + helper + "(): " + namespace));
- }
- return module
- }
- var index = {
- Store: Store,
- install: install,
- version: '3.4.0',
- mapState: mapState,
- mapMutations: mapMutations,
- mapGetters: mapGetters,
- mapActions: mapActions,
- createNamespacedHelpers: createNamespacedHelpers
- };
- /* harmony default export */ __webpack_exports__["default"] = (index);
- /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ 3)))
- /***/ }),
- /***/ 7:
- /*!*****************************************!*\
- !*** D:/gsxm/ezred/store/model/user.js ***!
- \*****************************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- /* WEBPACK VAR INJECTION */(function(uni) {Object.defineProperty(exports, "__esModule", { value: true });exports.default = void 0;var state = {
- userInfo: {}, //用户信息
- orderInfo: {
- complete_count: 0, //完成
- received_count: 0, //待收货
- unshipped_count: 0, //待发货
- order_count: 0, //订单总数
- unpaid_count: 0 //待付款
- }, //订单信息
- hasLogin: false //是否登录
- };
- var mutations = {
- // 登录
- login: function login(state) {
- state.hasLogin = true;
- },
- // 退出登录
- logout: function logout(state, provider) {
- state.hasLogin = false;
- // 清空基础信息
- state.userInfo = {};
- state.orderInfo = {
- complete_count: 0, //完成
- received_count: 0, //待收货
- unshipped_count: 0, //待发货
- order_count: 0, //订单总数
- unpaid_count: 0 //待付款
- };
- // 清除缓存用户信息
- uni.removeStorage({
- key: 'userInfo' });
- // 清除缓存token
- uni.removeStorage({
- key: 'token' });
- },
- // 保存用户信息
- setUserInfo: function setUserInfo(state, provider) {
- state.userInfo = provider;
- uni.setStorage({ //缓存用户登陆状态
- key: 'userInfo',
- data: provider });
- },
- // 保存订单信息
- setOrderInfo: function setOrderInfo(state, provider) {
- state.orderInfo = provider;
- } };
- var getters = {};var _default =
- {
- namespaced: true,
- state: state,
- mutations: mutations,
- getters: getters };exports.default = _default;
- /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/uni-mp-toutiao/dist/index.js */ 1)["default"]))
- /***/ }),
- /***/ 81:
- /*!**********************************!*\
- !*** D:/gsxm/ezred/api/train.js ***!
- \**********************************/
- /*! no static exports found */
- /***/ (function(module, exports, __webpack_require__) {
- "use strict";
- 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 };}
- //救护培训系详情
- function get_training(data) {
- return (0, _request.default)({
- url: '/api/get_training',
- method: 'get',
- data: data });
- }
- function detail_training(data) {
- return (0, _request.default)({
- url: '/api/detail_training',
- method: 'get',
- data: data });
- }
- //救护培训报名
- function sign_training(data) {
- return (0, _request.default)({
- url: '/api/sign_training',
- method: 'post',
- data: data });
- }
- //志愿者报名
- function add_volunteers(data) {
- return (0, _request.default)({
- url: '/api/add_registration',
- method: 'post',
- data: data });
- }
- // 造血干细胞列表
- function cell(data) {
- return (0, _request.default)({
- url: '/api/cell',
- method: 'get',
- data: data });
- }
- // 造血干细胞详情
- function get_cell(data) {
- return (0, _request.default)({
- url: '/api/get_cell',
- method: 'get',
- data: data });
- }
- function sign_cell(data) {
- return (0, _request.default)({
- url: '/api/sign_cell',
- method: 'post',
- data: data });
- }
- /***/ })
- }]);
- //# 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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Q0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLEtBQXFDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7O0FBSUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixLQUFxQztBQUN6RDtBQUNBLE1BQU0sU0FBRTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxNQUFNLEtBQXFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLDJCQUEyQjtBQUM5QyxxQkFBcUIsK0JBQStCO0FBQ3BEO0FBQ0E7QUFDQSxHQUFHO0FBQ0gseUJBQXlCO0FBQ3pCO0FBQ0Esc0JBQXNCLGlDQUFpQztBQUN2RDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0U7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLLE1BQU0sRUFFTjtBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBcUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQSw4QkFBOEI7O0FBRTlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxVQUFVLElBQXFDO0FBQ3BEO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0JBQW9CO0FBQ3pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQSw4QkFBOEI7QUFDOUIsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsS0FBcUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBLEtBQUssTUFBTSxFQUVOO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0Esc0NBQXNDO0FBQ3RDLDhDOztBQUVBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsZUFBZTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsTUFBTSxLQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRUFBc0U7QUFDdEU7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxLQUFxQztBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsWUFBWSxLQUFxQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOzs7O0FBSUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBOztBQUVBO0FBQ0EsMENBQTBDLDJCQUEyQixFQUFFO0FBQ3ZFLEtBQUs7QUFDTDtBQUNBLDBDQUEwQyw0QkFBNEIsRUFBRTtBQUN4RSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGVBQWU7QUFDOUMsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxZQUFZLDBHQUFXO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixtQkFBbUI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQ0FBMEMsZ0NBQWdDLEVBQUU7QUFDNUU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLDBHQUFXO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsV0FBVywwR0FBVztBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QiwwQ0FBMEM7O0FBRTFDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHVCQUF1QjtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsVUFBVSwwR0FBVztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxPQUFPO0FBQzFDO0FBQ0EsZ0JBQWdCLFlBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixZQUFZO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxPQUFPO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELHFEQUFxRCxFQUFFLFNBQVM7QUFDdEg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxPQUFPO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esa0NBQWtDLE9BQU87QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSwwQkFBMEIsT0FBTztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFZSxrRUFBRyxFQUFDOzs7Ozs7Ozs7Ozs7OztzeEJDNzVMbkIsdUY7OztBQUdBO0FBQ08sU0FBU0MsVUFBVCxDQUFvQjNkLElBQXBCLEVBQTBCO0FBQ2hDLFNBQU8sc0JBQVE7QUFDZDhGLE9BQUcsRUFBRSxZQURTO0FBRWRqRyxVQUFNLEVBQUUsS0FGTTtBQUdkRyxRQUFJLEVBQUpBLElBSGMsRUFBUixDQUFQOztBQUtBO0FBQ0Q7QUFDTyxTQUFTNGQsVUFBVCxDQUFvQjVkLElBQXBCLEVBQTBCO0FBQ2hDLFNBQU8sc0JBQVE7QUFDZDhGLE9BQUcsRUFBRSxxQkFEUztBQUVkakcsVUFBTSxFQUFFLEtBRk07QUFHZEcsUUFBSSxFQUFKQSxJQUhjLEVBQVIsQ0FBUDs7QUFLQTtBQUNEO0FBQ08sU0FBUzZkLFFBQVQsQ0FBa0I3ZCxJQUFsQixFQUF3QjtBQUM5QixTQUFPLHNCQUFRO0FBQ2Q4RixPQUFHLEVBQUUscUJBRFM7QUFFZGpHLFVBQU0sRUFBRSxLQUZNO0FBR2RHLFFBQUksRUFBSkEsSUFIYyxFQUFSLENBQVA7O0FBS0E7QUFDRDtBQUNPLFNBQVM4ZCxNQUFULENBQWdCOWQsSUFBaEIsRUFBc0I7QUFDNUIsU0FBTyxzQkFBUTtBQUNkOEYsT0FBRyxFQUFFLG1CQURTO0FBRWRqRyxVQUFNLEVBQUUsTUFGTTtBQUdkRyxRQUFJLEVBQUpBLElBSGMsRUFBUixDQUFQOztBQUtBO0FBQ0Q7QUFDTyxTQUFTK2QsTUFBVCxDQUFnQi9kLElBQWhCLEVBQXNCO0FBQzVCLFNBQU8sc0JBQVE7QUFDZDhGLE9BQUcsRUFBRSxtQkFEUztBQUVkakcsVUFBTSxFQUFFLEtBRk07QUFHZEcsUUFBSSxFQUFKQSxJQUhjLEVBQVIsQ0FBUDs7QUFLQTtBQUNEO0FBQ08sU0FBU2dlLE1BQVQsQ0FBZ0JoZSxJQUFoQixFQUFzQjtBQUM1QixTQUFPLHNCQUFRO0FBQ2Q4RixPQUFHLEVBQUUsbUJBRFM7QUFFZGpHLFVBQU0sRUFBRSxLQUZNO0FBR2RHLFFBQUksRUFBSkEsSUFIYyxFQUFSLENBQVA7O0FBS0E7QUFDRDtBQUNPLFNBQVNpZSxNQUFULENBQWdCamUsSUFBaEIsRUFBc0I7QUFDNUIsU0FBTyxzQkFBUTtBQUNkOEYsT0FBRyxFQUFFLG1CQURTO0FBRWRqRyxVQUFNLEVBQUUsS0FGTTtBQUdkRyxRQUFJLEVBQUpBLElBSGMsRUFBUixDQUFQOztBQUtBOzs7QUFHRDtBQUNPLFNBQVNrZSxjQUFULENBQXdCbGUsSUFBeEIsRUFBOEI7QUFDcEMsU0FBTyxzQkFBUTtBQUNkOEYsT0FBRyxFQUFFLHNCQURTO0FBRWRqRyxVQUFNLEVBQUUsTUFGTTtBQUdkRyxRQUFJLEVBQUpBLElBSGMsRUFBUixDQUFQOztBQUtBOztBQUVEO0FBQ08sU0FBU21lLE9BQVQsQ0FBaUJuZSxJQUFqQixFQUF1QjtBQUM3QixTQUFPLHNCQUFRO0FBQ2Q4RixPQUFHLEVBQUUsZ0JBRFM7QUFFZGpHLFVBQU0sRUFBRSxNQUZNO0FBR2RHLFFBQUksRUFBSkEsSUFIYyxFQUFSLENBQVA7O0FBS0E7O0FBRUQ7QUFDTyxTQUFTb2UsU0FBVCxDQUFtQnBlLElBQW5CLEVBQXlCO0FBQy9CLFNBQU8sc0JBQVE7QUFDZDhGLE9BQUcsRUFBRSxrQkFEUztBQUVkakcsVUFBTSxFQUFFLEtBRk07QUFHZEcsUUFBSSxFQUFKQSxJQUhjLEVBQVIsQ0FBUDs7QUFLQTs7QUFFRDtBQUNPLFNBQVNxZSxjQUFULENBQXdCcmUsSUFBeEIsRUFBOEI7QUFDcEMsU0FBTyxzQkFBUTtBQUNkOEYsT0FBRyxFQUFFLHVCQURTO0FBRWRqRyxVQUFNLEVBQUUsTUFGTTtBQUdkRyxRQUFJLEVBQUpBLElBSGMsRUFBUixDQUFQOztBQUtBOztBQUVEO0FBQ08sU0FBU3NlLE9BQVQsQ0FBaUJ0ZSxJQUFqQixFQUF1QjtBQUM3QixTQUFPLHNCQUFRO0FBQ2Q4RixPQUFHLEVBQUUscUJBRFM7QUFFZGpHLFVBQU0sRUFBRSxNQUZNO0FBR2RHLFFBQUksRUFBSkEsSUFIYyxFQUFSLENBQVA7O0FBS0E7QUFDRDtBQUNPLFNBQVN1ZSxRQUFULENBQWtCdmUsSUFBbEIsRUFBd0I7QUFDOUIsU0FBTyxzQkFBUTtBQUNkOEYsT0FBRyxFQUFFLG1CQURTO0FBRWRqRyxVQUFNLEVBQUUsTUFGTTtBQUdkRyxRQUFJLEVBQUpBLElBSGMsRUFBUixDQUFQOztBQUtBOztBQUVEO0FBQ08sU0FBU3dlLE1BQVQsQ0FBaUJ4ZSxJQUFqQixFQUF1QjtBQUM3QixTQUFPLHNCQUFRO0FBQ2Q4RixPQUFHLEVBQUUsYUFEUztBQUVkakcsVUFBTSxFQUFFLEtBRk07QUFHZEcsUUFBSSxFQUFKQSxJQUhjLEVBQVIsQ0FBUDs7QUFLQTtBQUNEO0FBQ08sU0FBU3llLE1BQVQsQ0FBaUJ6ZSxJQUFqQixFQUF1QjtBQUM3QixTQUFPLHNCQUFRO0FBQ2Q4RixPQUFHLEVBQUUsZ0JBRFM7QUFFZGpHLFVBQU0sRUFBRSxLQUZNO0FBR2RHLFFBQUksRUFBSkEsSUFIYyxFQUFSLENBQVA7O0FBS0E7O0FBRUQ7QUFDTyxTQUFTMGUsUUFBVCxDQUFrQjFlLElBQWxCLEVBQXdCO0FBQzlCLFNBQU8sc0JBQVE7QUFDZDhGLE9BQUcsRUFBRSxlQURTO0FBRWRqRyxVQUFNLEVBQUUsS0FGTTtBQUdkRyxRQUFJLEVBQUpBLElBSGMsRUFBUixDQUFQOztBQUtBOztBQUVEO0FBQ08sU0FBUzJlLE9BQVQsQ0FBaUIzZSxJQUFqQixFQUF1QjtBQUM3QixTQUFPLHNCQUFRO0FBQ2Q4RixPQUFHLEVBQUUsV0FEUztBQUVkakcsVUFBTSxFQUFFLEtBRk07QUFHZEcsUUFBSSxFQUFKQSxJQUhjLEVBQVIsQ0FBUDs7QUFLQTs7QUFFRDtBQUNPLFNBQVM0ZSxhQUFULENBQXVCNWUsSUFBdkIsRUFBNkI7QUFDbkMsU0FBTyxzQkFBUTtBQUNkOEYsT0FBRyxFQUFFLG1CQURTO0FBRWRqRyxVQUFNLEVBQUUsS0FGTTtBQUdkRyxRQUFJLEVBQUpBLElBSGMsRUFBUixDQUFQOztBQUtBOztBQUVEO0FBQ08sU0FBUzZlLFNBQVQsQ0FBbUI3ZSxJQUFuQixFQUF5QjtBQUMvQixTQUFPLHNCQUFRO0FBQ2Q4RixPQUFHLEVBQUUsZUFEUztBQUVkakcsVUFBTSxFQUFFLEtBRk07QUFHZEcsUUFBSSxFQUFKQSxJQUhjLEVBQVIsQ0FBUDs7QUFLQTs7QUFFTSxTQUFTOGUsYUFBVCxDQUF1QjllLElBQXZCLEVBQTZCO0FBQ25DLFNBQU8sc0JBQVE7QUFDZDhGLE9BQUcsRUFBRSxvQkFEUztBQUVkakcsVUFBTSxFQUFFLEtBRk07QUFHZEcsUUFBSSxFQUFKQSxJQUhjLEVBQVIsQ0FBUDs7QUFLQTs7QUFFRDtBQUNPLFNBQVMrZSxVQUFULENBQW9CL2UsSUFBcEIsRUFBMEI7QUFDaEMsU0FBTyxzQkFBUTtBQUNkOEYsT0FBRyxFQUFFLGFBRFM7QUFFZGpHLFVBQU0sRUFBRSxLQUZNO0FBR2RHLFFBQUksRUFBSkEsSUFIYyxFQUFSLENBQVA7O0FBS0E7QUFDRDtBQUNPLFNBQVNnZixnQkFBVCxDQUEwQmhmLElBQTFCLEVBQWdDO0FBQ3RDLFNBQU8sc0JBQVE7QUFDZDhGLE9BQUcsRUFBRSxnQkFEUztBQUVkakcsVUFBTSxFQUFFLEtBRk07QUFHZEcsUUFBSSxFQUFKQSxJQUhjLEVBQVIsQ0FBUDs7QUFLQTs7QUFFTSxTQUFTaWYsV0FBVCxDQUFxQmpmLElBQXJCLEVBQTJCO0FBQ2pDLFNBQU8sc0JBQVE7QUFDZDhGLE9BQUcsRUFBRSxjQURTO0FBRWRqRyxVQUFNLEVBQUUsS0FGTTtBQUdkRyxRQUFJLEVBQUpBLElBSGMsRUFBUixDQUFQOztBQUtBOztBQUVEO0FBQ08sU0FBU2tmLFVBQVQsQ0FBb0JsZixJQUFwQixFQUEwQjtBQUNoQyxTQUFPLHNCQUFRO0FBQ2Q4RixPQUFHLEVBQUUsZUFEUztBQUVkakcsVUFBTSxFQUFFLEtBRk07QUFHZEcsUUFBSSxFQUFKQSxJQUhjLEVBQVIsQ0FBUDs7QUFLQSxDOzs7Ozs7Ozs7Ozs7b0pDL01EO0FBQ0E7QUFDQSx1RTs7OztBQUlBO0FBQ0FnTSxvQkFBUWhJLFlBQVIsQ0FBcUJtYixRQUFyQjtBQUNDLFVBQUFBLFFBQVEsRUFBSTtBQUNYLE1BQUk7QUFDSCxRQUFJemdCLEdBQUcsR0FBR3lnQixRQUFRLENBQUNuZixJQUFuQjtBQUNBO0FBQ0EsUUFBSXRCLEdBQUcsQ0FBQzBnQixNQUFKLEtBQWUsR0FBbkIsRUFBd0I7QUFDdkIsVUFBSTFnQixHQUFHLENBQUMwZ0IsTUFBSixJQUFjLE1BQWxCLEVBQTBCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBdEksdUJBQU11SSxNQUFOLENBQWEsYUFBYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOUIsV0FBRyxDQUFDL1QsU0FBSixDQUFjO0FBQ2I4VixlQUFLLEVBQUUsY0FETTtBQUViM2MsaUJBQU8sRUFBRSxpQkFBQzBOLENBQUQsRUFBTztBQUNmLGdCQUFJQSxDQUFDLENBQUNrUCxPQUFOLEVBQWU7QUFDZDs7QUFFQTtBQUNELFdBUFksRUFBZDs7QUFTQSxPQWpCRCxNQWlCTztBQUNOLFlBQUc3Z0IsR0FBRyxDQUFDOGdCLEdBQUosSUFBUyxRQUFaLEVBQXFCO0FBQ3BCakMsYUFBRyxDQUFDblUsU0FBSixDQUFjO0FBQ2JrVyxpQkFBSyxFQUFFNWdCLEdBQUcsQ0FBQzhnQixHQURFO0FBRWJDLG9CQUFRLEVBQUUsSUFGRztBQUdiblcsZ0JBQUksRUFBRSxLQUhPO0FBSWJvVyxnQkFBSSxFQUFFLE1BSk8sRUFBZDs7QUFNQTtBQUNEO0FBQ0QzVSxhQUFPLENBQUM0VSxHQUFSLENBQVlqaEIsR0FBWjtBQUNBO0FBQ0EsS0E5QkQsTUE4Qk87QUFDTixhQUFPQSxHQUFQO0FBQ0E7QUFDRCxHQXBDRCxDQW9DRSxPQUFPMlIsQ0FBUCxFQUFVO0FBQ1h0RixXQUFPLENBQUM0VSxHQUFSLENBQVl0UCxDQUFaO0FBQ0E7QUFDRCxDQXpDRjtBQTBDQyxVQUFBdlUsS0FBSyxFQUFJO0FBQ1J5aEIsS0FBRyxDQUFDblUsU0FBSixDQUFjO0FBQ2JrVyxTQUFLLEVBQUUsU0FETTtBQUViRyxZQUFRLEVBQUUsSUFGRztBQUdiblcsUUFBSSxFQUFFLEtBSE87QUFJYm9XLFFBQUksRUFBRSxNQUpPLEVBQWQ7O0FBTUEsU0FBT3JmLE9BQU8sQ0FBQ2tCLE1BQVIsQ0FBZXpGLEtBQWYsQ0FBUDtBQUNBLENBbERGOzs7QUFxREE7QUFDQWtRLG9CQUFRaEksWUFBUixDQUFxQjRiLE9BQXJCO0FBQ0MsVUFBQUMsTUFBTSxFQUFJO0FBQ1Q7QUFDQTtBQUNBLE1BQUkza0IsS0FBSyxHQUFHcWlCLEdBQUcsQ0FBQ25pQixjQUFKLENBQW1CLE9BQW5CLENBQVo7QUFDQTtBQUNBLE1BQUksQ0FBQ3lrQixNQUFNLENBQUNDLE1BQVosRUFBb0I7QUFDbkJELFVBQU0sQ0FBQ0MsTUFBUCxHQUFnQjtBQUNmLHdCQUFrQixZQUFZNWtCLEtBRGYsRUFBaEI7O0FBR0EsR0FKRCxNQUlPO0FBQ047QUFDQTJrQixVQUFNLENBQUNDLE1BQVAsQ0FBYyxnQkFBZCxJQUFrQyxZQUFZNWtCLEtBQTlDO0FBQ0E7QUFDRCxTQUFPMmtCLE1BQVA7QUFDQSxDQWZGO0FBZ0JDLFVBQUEvakIsS0FBSyxFQUFJO0FBQ1I7QUFDQWlQLFNBQU8sQ0FBQzRVLEdBQVIsQ0FBWTdqQixLQUFaO0FBQ0EsU0FBT3VFLE9BQU8sQ0FBQ2tCLE1BQVIsQ0FBZXpGLEtBQWYsQ0FBUDtBQUNBLENBcEJGOztBQXNCQSxJQUFJaWtCLE9BQU8sR0FBRy9ULG9CQUFRK1QsT0FBdEIsQzs7OztBQUllL1Qsb0JBQVFnVSxJOzs7Ozs7Ozs7Ozs7O3NQQ3ZGdkIsNEU7QUFDQSxJQUFJaFUsT0FBTyxHQUFHO0FBQ2I7QUFDQWlVLFNBQU8sRUFBRSxFQUZJLEVBRUE7QUFDYkgsUUFBTSxFQUFFO0FBQ1Asb0JBQWdCLG1DQURULEVBSEs7O0FBTWI7QUFDQTliLGNBQVksRUFBRTtBQUNiO0FBQ0E0YixXQUFPLEVBQUUsaUJBQVNqZCxPQUFULEVBQWtCdWQsT0FBbEIsRUFBMkI7QUFDbkNsVSxhQUFPLENBQUM0VCxPQUFSLENBQWdCamQsT0FBaEIsR0FBMEJBLE9BQTFCO0FBQ0FxSixhQUFPLENBQUM0VCxPQUFSLENBQWdCOWpCLEtBQWhCLEdBQXdCb2tCLE9BQXhCO0FBQ0EsS0FMWTtBQU1iO0FBQ0FmLFlBQVEsRUFBRSxrQkFBU3hjLE9BQVQsRUFBa0J1ZCxPQUFsQixFQUEyQjtBQUNwQ2xVLGFBQU8sQ0FBQ21ULFFBQVIsQ0FBaUJ4YyxPQUFqQixHQUEyQkEsT0FBM0I7QUFDQXFKLGFBQU8sQ0FBQ21ULFFBQVIsQ0FBaUJyakIsS0FBakIsR0FBeUJva0IsT0FBekI7QUFDQSxLQVZZLEVBUEQ7O0FBbUJiO0FBQ0FOLFNBQU8sRUFBRTtBQUNSO0FBQ0FqZCxXQUFPLEVBQUUsaUJBQVMwTixDQUFULEVBQVk7QUFDcEIsYUFBT0EsQ0FBUDtBQUNBLEtBSk87QUFLUjtBQUNBdlUsU0FBSyxFQUFFLGVBQVN1VSxDQUFULEVBQVk7QUFDbEIsYUFBT0EsQ0FBUDtBQUNBLEtBUk8sRUFwQkk7O0FBOEJiO0FBQ0E4TyxVQUFRLEVBQUU7QUFDVDtBQUNBeGMsV0FBTyxFQUFFLGlCQUFTME4sQ0FBVCxFQUFZO0FBQ3BCLGFBQU9BLENBQVA7QUFDQSxLQUpRO0FBS1Q7QUFDQXZVLFNBQUssRUFBRSxlQUFTdVUsQ0FBVCxFQUFZO0FBQ2xCLGFBQU9BLENBQVA7QUFDQSxLQVJRLEVBL0JHOztBQXlDYjtBQUNBMlAsTUFBSSxxRkFBRSxpQkFBZWhnQixJQUFmO0FBQ1Esb0JBQUlLLE9BQUosQ0FBWSxVQUFTQyxPQUFULEVBQWtCaUIsTUFBbEIsRUFBMEI7QUFDbEQsc0JBQUk0ZSxXQUFXLEdBQUcsRUFBbEIsQ0FEa0QsQ0FDNUI7QUFDdEI7QUFDQTtBQUNBQSw2QkFBVyxHQUFHblUsT0FBTyxDQUFDNFQsT0FBUixDQUFnQmpkLE9BQWhCLENBQXdCM0MsSUFBeEIsQ0FBZDtBQUNBO0FBQ0Esc0JBQUk4RixHQUFKO0FBQ0Esc0JBQUlxYSxXQUFXLENBQUNyYSxHQUFaLENBQWdCdEosT0FBaEIsQ0FBd0IsTUFBeEIsSUFBa0MsQ0FBQyxDQUF2QyxFQUEwQztBQUN6Q3NKLHVCQUFHLEdBQUdxYSxXQUFXLENBQUNyYSxHQUFsQjtBQUNBLG1CQUZELE1BRU87QUFDTkEsdUJBQUcsR0FBR2tHLE9BQU8sQ0FBQ2lVLE9BQVIsR0FBa0JFLFdBQVcsQ0FBQ3JhLEdBQXBDO0FBQ0E7QUFDRDtBQUNBeVgscUJBQUcsQ0FBQ3FDLE9BQUosQ0FBWTtBQUNYOVosdUJBQUcsRUFBRUEsR0FETTtBQUVYakcsMEJBQU0sRUFBRXNnQixXQUFXLENBQUN0Z0IsTUFBWixJQUFzQixLQUZuQjtBQUdYRyx3QkFBSSxFQUFFbWdCLFdBQVcsQ0FBQ25nQixJQUhQO0FBSVg4ZiwwQkFBTSxFQUFFOWYsSUFBSSxDQUFDOGYsTUFBTCxJQUFlOVQsT0FBTyxDQUFDOFQsTUFKcEI7QUFLWG5kLDJCQUFPLEVBQUUsaUJBQUFqRSxHQUFHLEVBQUk7QUFDZiwwQkFBSUEsR0FBRyxDQUFDMGhCLFVBQUosSUFBa0IsR0FBdEIsRUFBMkI7QUFDMUIsNEJBQUk7QUFDSDlmLGlDQUFPLENBQUMwTCxPQUFPLENBQUNtVCxRQUFSLENBQWlCeGMsT0FBakIsQ0FBeUJqRSxHQUF6QixDQUFELENBQVA7QUFDQSx5QkFGRCxDQUVFLE9BQU8yUixDQUFQLEVBQVU7QUFDWHJFLGlDQUFPLENBQUNtVCxRQUFSLENBQWlCcmpCLEtBQWpCLENBQXVCdVUsQ0FBdkI7QUFDQTtBQUNEOztBQUVELHFCQWRVO0FBZVg7QUFDQXpOLHdCQUFJLEVBQUUsY0FBQ1QsR0FBRCxFQUFTO0FBQ2Q2Siw2QkFBTyxDQUFDbVQsUUFBUixDQUFpQnJqQixLQUFqQixDQUF1QnFHLEdBQXZCO0FBQ0EscUJBbEJVLEVBQVo7O0FBb0JBLGlCQWpDWSxDQURSLGlIQUFGLDBFQTFDUzs7QUE4RWI7QUFDQTRkLFNBQU8sd0ZBQUUsa0JBQWUvZixJQUFmO0FBQ0ssb0JBQUlLLE9BQUosQ0FBWSxVQUFTQyxPQUFULEVBQWtCaUIsTUFBbEIsRUFBMEI7QUFDbEQsc0JBQUk0ZSxXQUFXLEdBQUcsRUFBbEIsQ0FEa0QsQ0FDNUI7QUFDdEIsc0JBQUk7QUFDSDtBQUNBQSwrQkFBVyxHQUFHblUsT0FBTyxDQUFDNFQsT0FBUixDQUFnQmpkLE9BQWhCLENBQXdCM0MsSUFBeEIsQ0FBZDtBQUNBLG1CQUhELENBR0UsT0FBT3FRLENBQVAsRUFBVTtBQUNYO0FBQ0FyRSwyQkFBTyxDQUFDNFQsT0FBUixDQUFnQjlqQixLQUFoQixDQUFzQnVVLENBQXRCO0FBQ0E7QUFDRCxzQkFBSXdQLE1BQU0sR0FBRztBQUNaO0FBQ0FRLGtDQUFjLEVBQUVyVSxPQUFPLENBQUNpVSxPQUFSLEdBQWtCRSxXQUFXLENBQUNyYSxHQUZsQyxFQUFiOzs7QUFLQSxzQkFBSXdhLFFBQVEsR0FBRztBQUNkO0FBQ0FDLDBCQUZjLGtCQUVQQyxHQUZPLEVBRUY7QUFDWCw2QkFBTyxJQUFJbmdCLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVVpQixNQUFWLEVBQXFCO0FBQ3ZDZ2MsMkJBQUcsQ0FBQzdVLFdBQUosQ0FBZ0I7QUFDZitYLCtCQUFLLEVBQUVELEdBRFE7QUFFZkUsb0NBQVUsRUFBRSxDQUFDLE9BQUQsQ0FGRztBQUdmL1gsa0NBQVEsRUFBRSxDQUFDLFlBQUQsQ0FISztBQUlmaEcsaUNBSmUsbUJBSVBqRSxHQUpPLEVBSUY7QUFDWjtBQUNBO0FBQ0E0QixtQ0FBTyxDQUFDNUIsR0FBRyxDQUFDaWlCLGFBQUwsQ0FBUDtBQUNBLDJCQVJjO0FBU2YvZCw4QkFUZSxnQkFTVlQsR0FUVSxFQVNMO0FBQ1Q0SSxtQ0FBTyxDQUFDNFUsR0FBUixDQUFZeGQsR0FBWjtBQUNBWixrQ0FBTSxDQUFDWSxHQUFELENBQU47QUFDQSwyQkFaYyxFQUFoQjs7QUFjQSx1QkFmTSxDQUFQO0FBZ0JBLHFCQW5CYTtBQW9CZDtBQUNBeWUsOEJBckJjLHNCQXFCSEMsSUFyQkcsRUFxQkc7QUFDaEIsNkJBQU8sSUFBSXhnQixPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVaUIsTUFBVixFQUFxQjtBQUN2Q2djLDJCQUFHLENBQUNoVSxXQUFKLENBQWdCO0FBQ2YrViwrQkFBSyxFQUFFLEtBRFEsRUFBaEI7O0FBR0EvQiwyQkFBRyxDQUFDdUQsVUFBSixDQUFlO0FBQ2RoYiw2QkFBRyxFQUFFK1osTUFBTSxDQUFDUSxjQURFLEVBQ2M7QUFDNUJVLGtDQUFRLEVBQUVGLElBRkk7QUFHZG5nQiw4QkFBSSxFQUFFLE1BSFE7QUFJZG9mLGdDQUFNLEVBQUU7QUFDUCw4Q0FBa0IsWUFBWXZDLEdBQUcsQ0FBQ25pQixjQUFKLENBQW1CLE9BQW5CLENBRHZCLEVBSk07O0FBT2R1SCxpQ0FBTyxFQUFFLGlCQUFDcWUsYUFBRCxFQUFtQjtBQUMzQixnQ0FBSSxhQUFhLE9BQU9BLGFBQWEsQ0FBQ2hoQixJQUF0QyxFQUE0QztBQUMzQ00scUNBQU8sQ0FBQzFFLElBQUksQ0FBQ0MsS0FBTCxDQUFXbWxCLGFBQWEsQ0FBQ2hoQixJQUF6QixFQUErQkEsSUFBaEMsQ0FBUDtBQUNBLDZCQUZELE1BRU87QUFDTk0scUNBQU8sQ0FBQzBnQixhQUFhLENBQUNoaEIsSUFBZCxDQUFtQkEsSUFBcEIsQ0FBUDtBQUNBO0FBQ0QsMkJBYmE7QUFjZDZDLGtDQWRjLHNCQWNIO0FBQ1YwYSwrQkFBRyxDQUFDMEQsV0FBSjtBQUNBLDJCQWhCYSxFQUFmOztBQWtCQSx1QkF0Qk0sQ0FBUDtBQXVCQSxxQkE3Q2E7QUE4Q2Q7QUFDQW5ELDBCQS9DYyxrQkErQ1BvRCxRQS9DTyxFQStDRztBQUNoQiwwQkFBSVYsR0FBRyxHQUFHVSxRQUFRLENBQUM1bEIsTUFBbkI7QUFDQSw2QkFBTyxJQUFJK0UsT0FBSixpR0FBWSxrQkFBT0MsT0FBUCxFQUFnQmlCLE1BQWhCO0FBQ2Q0ZiwwQ0FEYyxHQUNILEVBREc7QUFFVG5pQixtQ0FGUyxHQUVMLENBRkssY0FFRkEsQ0FBQyxHQUFHd2hCLEdBRkY7QUFHRyx5Q0FBSSxDQUFDSSxVQUFMLENBQWdCTSxRQUFRLENBQUNsaUIsQ0FBRCxDQUF4QixDQUhILFNBR2JvaUIsT0FIYTtBQUlqQkQsMENBQVEsQ0FBQ2xpQixJQUFULENBQWNtaUIsT0FBZCxFQUppQixPQUVPcGlCLENBQUMsRUFGUjtBQUtqQjtBQUNEc0IseUNBQU8sQ0FBQzZnQixRQUFELENBQVAsQ0FOa0IsMkRBQVosd0VBQVA7O0FBUUEscUJBekRhO0FBMERkO0FBQ0FFLHFDQTNEYyw2QkEyREliLEdBM0RKLEVBMkRTO0FBQ3RCLDZCQUFPLElBQUluZ0IsT0FBSixrR0FBWSxrQkFBT0MsT0FBUCxFQUFnQmlCLE1BQWhCOztBQUVHLDBDQUFJLENBQUNnZixNQUFMLENBQVlDLEdBQVosQ0FGSCxTQUVkVSxRQUZjOztBQUlaLDBDQUFJLENBQUNwRCxNQUFMLENBQVlvRCxRQUFaLEVBQXNCaGhCLElBQXRCLENBQTJCLFVBQUNtUSxDQUFELEVBQU87QUFDdkMvUCw2Q0FBTyxDQUFDK1AsQ0FBRCxDQUFQO0FBQ0EscUNBRkssRUFFSG5PLEtBRkcsQ0FFRyxVQUFDbU8sQ0FBRCxFQUFPO0FBQ2Y5Tyw0Q0FBTSxDQUFDOE8sQ0FBRCxDQUFOO0FBQ0EscUNBSkssQ0FKWSw0REFBWix5RUFBUDs7QUFVQSxxQkF0RWEsRUFBZjs7QUF3RUFpUSwwQkFBUSxDQUFDZSxpQkFBVCxDQUEyQixDQUEzQixFQUE4Qm5oQixJQUE5QixDQUFtQyxVQUFDbVEsQ0FBRCxFQUFPO0FBQ3pDL1AsMkJBQU8sQ0FBQytQLENBQUQsQ0FBUDtBQUNBLG1CQUZELEVBRUduTyxLQUZILENBRVMsVUFBQ21PLENBQUQsRUFBTztBQUNmdEYsMkJBQU8sQ0FBQzRVLEdBQVIsQ0FBWXRQLENBQVo7QUFDQSxtQkFKRDtBQUtBLGlCQTNGWSxDQURMLHFIQUFGLG9GQS9FTSxFQUFkLEM7Ozs7O0FBZ0xlckUsTzs7Ozs7Ozs7Ozs7O0FDakxmc1YsTUFBTSxDQUFDQyxPQUFQLEdBQWlCQyxtQkFBTyxDQUFDLDZCQUFELENBQXhCLEM7Ozs7Ozs7Ozs7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsbUJBQVc7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsS0FBSztBQUNMLGNBQWM7QUFDZDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBLHdDQUF3QyxXQUFXO0FBQ25EO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFF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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=
|