{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/components/RangeSelectorDialog.vue?05bc","webpack:///./src/components/Thumbnail.vue?d682","webpack:///./src/components/EditorGallery.vue?e0c1","webpack:///./src/App.vue?e16b","webpack:///./src/components/RangeSelectorDialog.vue?c929","webpack:///./src/utils.js","webpack:///src/components/RangeSelectorDialog.vue","webpack:///./src/components/RangeSelectorDialog.vue?0b74","webpack:///./src/components/RangeSelectorDialog.vue","webpack:///./src/components/FilmStrip.vue?709f","webpack:///src/components/FilmStrip.vue","webpack:///./src/components/FilmStrip.vue?99d4","webpack:///./src/components/FilmStrip.vue","webpack:///./src/components/Thumbnail.vue?af6f","webpack:///src/components/Thumbnail.vue","webpack:///./src/components/Thumbnail.vue?5195","webpack:///./src/components/Thumbnail.vue","webpack:///./src/components/EditorGallery.vue?2352","webpack:///src/components/EditorGallery.vue","webpack:///./src/components/EditorGallery.vue?beb0","webpack:///./src/components/EditorGallery.vue","webpack:///./src/components/HelpDialog.vue?fd1e","webpack:///src/components/HelpDialog.vue","webpack:///./src/components/HelpDialog.vue?bccf","webpack:///./src/components/HelpDialog.vue","webpack:///./src/PredictionMode.js","webpack:///src/App.vue","webpack:///./src/App.vue?1160","webpack:///./src/App.vue","webpack:///./src/main.js","webpack:///./src/App.vue?c650","webpack:///./src/App.vue?02cf","webpack:///./src/components/FilmStrip.vue?2276"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","slot","_v","on","loadRangeData","showPreview","saveSelection","exportSelection","importSelection","showHelp","photos","_s","info","trial","date","camera","range","selectedPhotos","count","staticStyle","canAutoSelect","automaticSelection","model","callback","$$v","predictionMode","expression","_l","scrollPrev","scrollNext","ref","photo","id","class","selected","isSelected","refInFor","url","$event","onImageLoad","onImageClick","$refs","thumbnails","directives","rawName","_e","onRangeSelected","selectedPhotosUrls","onJumpToImage","staticRenderFns","isVisible","$nextTick","reset","selection","rules","years","onYearSelect","$set","x","trials","onTrialSelect","dates","onDateSelect","cameras","onCameraSelect","ranges","onRangeSelect","files","hideDialog","onSubmit","getApiUrl","resource","process","VUE_APP_DATA_URL","cleanUrl","origin","uri","URL","pathname","fixPathSlash","search","hash","path","replace","endsWith","substring","grab","type","fetch","response","ok","Error","text","json","arrayBuffer","blob","isError","status","test","statusText","readFileContents","file","parse_json","JSON","parse","err","Promise","resolve","reject","reader","FileReader","onerror","onload","ev","target","SyntaxError","readAsText","readAsArrayBuffer","downloadText","filename","element","document","createElement","encodeURIComponent","setAttribute","style","display","body","appendChild","click","removeChild","loadClientFile","input","hasSelectedFile","addEventListener","once","setTimeout","isConnected","AnimateCallback","duration","rate","elapsed","interval","setInterval","_tick","Math","min","interrupt","clearInterval","interpolate","a","b","smoothstep","findMinimal","items","query","bestIndex","bestDistance","Number","POSITIVE_INFINITY","entries","item","distance","undefined","storage","def","localStorage","getItem","set","stringify","setItem","remove","removeItem","deepEquals","A","B","component","_t","onClick","onClickJumpTo","onExport","onSave","hide","DEVELOPMENT_MODE","PredictionMode","action","disabled","priorPosition","samples","initialPosition","reduce","app","thumbnail","position","filmstrip","getScrollPosition","$el","offset","shouldAcceptSample","expectedStride","getAverageStride","unshift","console","debug","averageStride","predicted","scrollTo","getInfoPath","Accept","identifier","forEach","discoveredCount","Vue","use","ElementUI","locale","render","h","App","$mount"],"mappings":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAG/Be,GAAqBA,EAAoBhB,GAE5C,MAAMO,EAASC,OACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrB,MAAS,GAGNK,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU6B,QAGnC,IAAIC,EAASF,EAAiB5B,GAAY,CACzCK,EAAGL,EACH+B,GAAG,EACHF,QAAS,IAUV,OANAf,EAAQd,GAAUW,KAAKmB,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG/DI,EAAOC,GAAI,EAGJD,EAAOD,QAKfH,EAAoBM,EAAIlB,EAGxBY,EAAoBO,EAAIL,EAGxBF,EAAoBQ,EAAI,SAASL,EAASM,EAAMC,GAC3CV,EAAoBW,EAAER,EAASM,IAClC3B,OAAO8B,eAAeT,EAASM,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,KAKhEV,EAAoBe,EAAI,SAASZ,GACX,qBAAXa,QAA0BA,OAAOC,aAC1CnC,OAAO8B,eAAeT,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DpC,OAAO8B,eAAeT,EAAS,aAAc,CAAEe,OAAO,KAQvDlB,EAAoBmB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQlB,EAAoBkB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKxC,OAAOyC,OAAO,MAGvB,GAFAvB,EAAoBe,EAAEO,GACtBxC,OAAO8B,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOlB,EAAoBQ,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRtB,EAAoB0B,EAAI,SAAStB,GAChC,IAAIM,EAASN,GAAUA,EAAOiB,WAC7B,WAAwB,OAAOjB,EAAO,YACtC,WAA8B,OAAOA,GAEtC,OADAJ,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASgB,EAAQC,GAAY,OAAO9C,OAAOC,UAAUC,eAAeC,KAAK0C,EAAQC,IAGzG5B,EAAoB6B,EAAI,IAExB,IAAIC,EAAaC,OAAO,gBAAkBA,OAAO,iBAAmB,GAChEC,EAAmBF,EAAW3C,KAAKsC,KAAKK,GAC5CA,EAAW3C,KAAOf,EAClB0D,EAAaA,EAAWG,QACxB,IAAI,IAAItD,EAAI,EAAGA,EAAImD,EAAWjD,OAAQF,IAAKP,EAAqB0D,EAAWnD,IAC3E,IAAIU,EAAsB2C,EAI1BzC,EAAgBJ,KAAK,CAAC,EAAE,kBAEjBM,K,6ECvJT,yBAAgjB,EAAG,G,oCCAnjB,yBAAsiB,EAAG,G,oCCAziB,yBAA0iB,EAAG,G,mGCAziB,EAAS,WAAa,IAAIyC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,SAAS,CAACE,YAAY,OAAO,CAACF,EAAG,UAAU,CAACG,MAAM,CAAC,KAAO,eAAe,CAACH,EAAG,aAAa,CAACG,MAAM,CAAC,MAAQ,cAAc,CAACH,EAAG,WAAW,CAACI,KAAK,SAAS,CAACR,EAAIS,GAAG,eAAeL,EAAG,eAAe,CAACM,GAAG,CAAC,MAAQV,EAAIW,gBAAgB,CAACX,EAAIS,GAAG,qBAAqBL,EAAG,eAAe,CAACM,GAAG,CAAC,MAAQV,EAAIY,cAAc,CAACZ,EAAIS,GAAG,uBAAuBL,EAAG,eAAe,CAACM,GAAG,CAAC,MAAQV,EAAIa,gBAAgB,CAACb,EAAIS,GAAG,oBAAoBL,EAAG,eAAe,CAACM,GAAG,CAAC,MAAQV,EAAIc,kBAAkB,CAACd,EAAIS,GAAG,wBAAwBL,EAAG,eAAe,CAACM,GAAG,CAAC,MAAQV,EAAIe,kBAAkB,CAACf,EAAIS,GAAG,sBAAsBL,EAAG,eAAe,CAACM,GAAG,CAAC,MAAQV,EAAIgB,WAAW,CAAChB,EAAIS,GAAG,WAAW,IAAI,GAAGL,EAAG,SAAS,CAACE,YAAY,OAAOC,MAAM,CAAC,KAAO,OAAO,QAAU,SAAS,MAAQ,WAAW,CAACH,EAAG,SAAS,CAAEJ,EAAIiB,OAAa,OAAEb,EAAG,UAAU,CAACA,EAAG,MAAM,CAACG,MAAM,CAAC,KAAO,UAAUC,KAAK,UAAU,CAACJ,EAAG,SAAS,CAACG,MAAM,CAAC,KAAO,OAAO,QAAU,iBAAiB,CAACH,EAAG,OAAO,CAACJ,EAAIS,GAAG,IAAIT,EAAIkB,GAAGlB,EAAImB,KAAKC,OAAO,MAAMpB,EAAIkB,GAAGlB,EAAImB,KAAKE,MAAM,MAAMrB,EAAIkB,GAAGlB,EAAImB,KAAKG,QAAQ,MAAMtB,EAAIkB,GAAGlB,EAAImB,KAAKI,OAAO,KAAKnB,EAAG,aAAa,CAACG,MAAM,CAAC,UAAY,cAAcP,EAAIS,GAAG,aAAaT,EAAIkB,GAAGlB,EAAIwB,eAAe7E,QAAQ,OAAOqD,EAAIkB,GAAGlB,EAAImB,KAAKM,OAAO,MAAM,GAAGrB,EAAG,OAAO,CAACsB,YAAY,CAAC,YAAY,OAAOtB,EAAG,OAAO,CAACA,EAAG,aAAa,CAACG,MAAM,CAAC,QAAU,QAAQ,QAAU,6FAA6F,CAACH,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,YAAY,KAAO,OAAO,UAAYP,EAAI2B,eAAejB,GAAG,CAAC,MAAQV,EAAI4B,oBAAoBpB,KAAK,aAAa,CAACR,EAAIS,GAAG,kCAAkC,GAAGL,EAAG,aAAa,CAACG,MAAM,CAAC,UAAY,cAAcP,EAAIS,GAAG,kBAAkBL,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,OAAO,YAAY,QAAQsB,MAAM,CAAC7C,MAAOgB,EAAkB,eAAE8B,SAAS,SAAUC,GAAM/B,EAAIgC,eAAeD,GAAKE,WAAW,mBAAmBjC,EAAIkC,GAAIlC,EAAmB,iBAAE,SAASd,GAAM,OAAOkB,EAAG,YAAY,CAACd,IAAIJ,EAAKX,KAAKgC,MAAM,CAAC,MAAQrB,EAAKX,KAAK,MAAQW,IAAO,CAACc,EAAIS,GAAGT,EAAIkB,GAAGhC,EAAKX,YAAW,GAAG6B,EAAG,aAAa,CAACG,MAAM,CAAC,UAAY,cAAcH,EAAG,aAAa,CAACG,MAAM,CAAC,QAAU,QAAQ,QAAU,yDAAyD,CAACH,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,YAAY,KAAO,OAAO,KAAO,sBAAsBG,GAAG,CAAC,MAAQV,EAAImC,YAAY3B,KAAK,eAAe,GAAGJ,EAAG,aAAa,CAACG,MAAM,CAAC,QAAU,QAAQ,QAAU,oDAAoD,CAACH,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,YAAY,KAAO,OAAO,KAAO,uBAAuBG,GAAG,CAAC,MAAQV,EAAIoC,YAAY5B,KAAK,eAAe,GAAGJ,EAAG,aAAa,CAACG,MAAM,CAAC,UAAY,cAAcH,EAAG,aAAa,CAACG,MAAM,CAAC,QAAU,QAAQ,QAAU,uCAAuC,CAACH,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,YAAY,KAAO,OAAO,KAAO,kBAAkBG,GAAG,CAAC,MAAQV,EAAIY,aAAaJ,KAAK,eAAe,IAAI,MAAM,GAAIR,EAAIiB,OAAa,OAAEb,EAAG,YAAY,CAACiC,IAAI,aAAarC,EAAIkC,GAAIlC,EAAU,QAAE,SAASsC,EAAM7F,GAAG,OAAO2D,EAAG,MAAM,CAACd,IAAIgD,EAAMC,GAAGjC,YAAY,QAAQkC,MAAM,CAAEC,SAAUH,EAAMI,aAAc,CAACtC,EAAG,YAAY,CAACiC,IAAI,aAAaM,UAAS,EAAKpC,MAAM,CAAC,IAAM+B,EAAMM,KAAKlC,GAAG,CAAC,KAAO,SAASmC,GAAQ,OAAO7C,EAAI8C,YAAYR,IAAQ,MAAQ,SAASO,GAAQ,OAAO7C,EAAI+C,aAAaT,EAAOtC,EAAIgD,MAAMC,WAAWxG,QAAQ2D,EAAG,IAAI,CAAC8C,WAAW,CAAC,CAAC3E,KAAK,OAAO4E,QAAQ,SAASnE,MAAOsD,EAAgB,WAAEL,WAAW,qBAAqB3B,YAAY,0BAA0B,MAAK,GAAGN,EAAIoD,MAAM,GAAGpD,EAAIoD,MAAM,IAAI,GAAG,CAAChD,EAAG,sBAAsB,CAACiC,IAAI,iBAAiB3B,GAAG,CAAC,OAASV,EAAIqD,mBAAmBjD,EAAG,gBAAgB,CAACiC,IAAI,UAAU9B,MAAM,CAAC,KAAOP,EAAIsD,oBAAoB5C,GAAG,CAAC,OAASV,EAAIuD,cAAc,cAAgBvD,EAAIa,cAAc,gBAAkBb,EAAIc,mBAAmBV,EAAG,aAAa,CAACiC,IAAI,WAAW,IAC/qHmB,EAAkB,G,2PCDlB,EAAS,WAAa,IAAIxD,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,YAAY,CAACG,MAAM,CAAC,MAAQ,kBAAkB,QAAUP,EAAIyD,WAAW/C,GAAG,CAAC,iBAAiB,SAASmC,GAAQ7C,EAAIyD,UAAUZ,GAAQ,KAAO,SAASA,GAAQ,OAAO7C,EAAI0D,UAAU1D,EAAI2D,UAAU,CAACvD,EAAG,WAAW,CAACE,YAAY,gBAAgBC,MAAM,CAAC,MAAQ,YAAY,KAAO,UAAU,UAAW,IAAQ,CAACP,EAAIS,GAAG,sBAAsBL,EAAG,SAAS,CAACJ,EAAIS,GAAG,gBAAgBT,EAAIS,GAAG,sEAAsEL,EAAG,UAAU,CAACiC,IAAI,OAAO9B,MAAM,CAAC,MAAQP,EAAI4D,UAAU,MAAQ5D,EAAI6D,MAAM,cAAc,OAAO,eAAe,MAAM,CAACzD,EAAG,eAAe,CAACiC,IAAI,OAAO9B,MAAM,CAAC,MAAQ,OAAO,KAAO,SAAS,CAACH,EAAG,YAAY,CAACG,MAAM,CAAC,UAAYP,EAAI8D,MAAMnH,OAAO,YAAc,eAAe+D,GAAG,CAAC,OAASV,EAAI+D,cAAclC,MAAM,CAAC7C,MAAOgB,EAAI4D,UAAc,KAAE9B,SAAS,SAAUC,GAAM/B,EAAIgE,KAAKhE,EAAI4D,UAAW,OAAQ7B,IAAME,WAAW,mBAAmBjC,EAAIkC,GAAIlC,EAAS,OAAE,SAASiE,GAAG,OAAO7D,EAAG,YAAY,CAACd,IAAI2E,EAAE1D,MAAM,CAAC,MAAQ0D,IAAI,CAACjE,EAAIS,GAAGT,EAAIkB,GAAG+C,SAAQ,IAAI,GAAG7D,EAAG,eAAe,CAACiC,IAAI,QAAQ9B,MAAM,CAAC,MAAQ,QAAQ,KAAO,UAAU,CAACH,EAAG,YAAY,CAACG,MAAM,CAAC,UAAYP,EAAIkE,OAAOvH,OAAO,YAAc,gBAAgB+D,GAAG,CAAC,OAASV,EAAImE,eAAetC,MAAM,CAAC7C,MAAOgB,EAAI4D,UAAe,MAAE9B,SAAS,SAAUC,GAAM/B,EAAIgE,KAAKhE,EAAI4D,UAAW,QAAS7B,IAAME,WAAW,oBAAoBjC,EAAIkC,GAAIlC,EAAU,QAAE,SAASiE,GAAG,OAAO7D,EAAG,YAAY,CAACd,IAAI2E,EAAE1D,MAAM,CAAC,MAAQ0D,IAAI,CAACjE,EAAIS,GAAGT,EAAIkB,GAAG+C,SAAQ,IAAI,GAAG7D,EAAG,eAAe,CAACiC,IAAI,OAAO9B,MAAM,CAAC,MAAQ,OAAO,KAAO,SAAS,CAACH,EAAG,YAAY,CAACG,MAAM,CAAC,UAAYP,EAAIoE,MAAMzH,OAAO,YAAc,eAAe+D,GAAG,CAAC,OAASV,EAAIqE,cAAcxC,MAAM,CAAC7C,MAAOgB,EAAI4D,UAAc,KAAE9B,SAAS,SAAUC,GAAM/B,EAAIgE,KAAKhE,EAAI4D,UAAW,OAAQ7B,IAAME,WAAW,mBAAmBjC,EAAIkC,GAAIlC,EAAS,OAAE,SAASiE,GAAG,OAAO7D,EAAG,YAAY,CAACd,IAAI2E,EAAE1D,MAAM,CAAC,MAAQ0D,IAAI,CAACjE,EAAIS,GAAGT,EAAIkB,GAAG+C,SAAQ,IAAI,GAAG7D,EAAG,eAAe,CAACiC,IAAI,SAAS9B,MAAM,CAAC,MAAQ,SAAS,KAAO,WAAW,CAACH,EAAG,YAAY,CAACG,MAAM,CAAC,UAAYP,EAAIsE,QAAQ3H,OAAO,YAAc,iBAAiB+D,GAAG,CAAC,OAASV,EAAIuE,gBAAgB1C,MAAM,CAAC7C,MAAOgB,EAAI4D,UAAgB,OAAE9B,SAAS,SAAUC,GAAM/B,EAAIgE,KAAKhE,EAAI4D,UAAW,SAAU7B,IAAME,WAAW,qBAAqBjC,EAAIkC,GAAIlC,EAAW,SAAE,SAASiE,GAAG,OAAO7D,EAAG,YAAY,CAACd,IAAI2E,EAAE1D,MAAM,CAAC,MAAQ0D,IAAI,CAACjE,EAAIS,GAAGT,EAAIkB,GAAG+C,SAAQ,IAAI,GAAG7D,EAAG,eAAe,CAACiC,IAAI,QAAQ9B,MAAM,CAAC,MAAQ,QAAQ,KAAO,UAAU,CAACH,EAAG,YAAY,CAACG,MAAM,CAAC,UAAYP,EAAIwE,OAAO7H,OAAO,YAAc,gBAAgB+D,GAAG,CAAC,OAASV,EAAIyE,eAAe5C,MAAM,CAAC7C,MAAOgB,EAAI4D,UAAe,MAAE9B,SAAS,SAAUC,GAAM/B,EAAIgE,KAAKhE,EAAI4D,UAAW,QAAS7B,IAAME,WAAW,oBAAoBjC,EAAIkC,GAAIlC,EAAU,QAAE,SAASiE,GAAG,OAAO7D,EAAG,YAAY,CAACd,IAAI2E,EAAE1D,MAAM,CAAC,MAAQ0D,IAAI,CAACjE,EAAIS,GAAGT,EAAIkB,GAAG+C,SAAQ,IAAI,GAAG7D,EAAG,eAAe,CAACiC,IAAI,QAAQ9B,MAAM,CAAC,MAAQ,aAAa,KAAO,UAAU,CAACH,EAAG,kBAAkB,CAACG,MAAM,CAAC,UAAYP,EAAI0E,MAAM/H,OAAO,YAAgBqD,EAAI0E,MAAY,OAAI,UAAW,IAAM,EAAE,IAAM1E,EAAI0E,MAAM/H,QAAQkF,MAAM,CAAC7C,MAAOgB,EAAI4D,UAAe,MAAE9B,SAAS,SAAUC,GAAM/B,EAAIgE,KAAKhE,EAAI4D,UAAW,QAAS7B,IAAME,WAAW,sBAAsB,IAAI,GAAG7B,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,UAAUC,KAAK,UAAU,CAACJ,EAAG,YAAY,CAACM,GAAG,CAAC,MAAQV,EAAI2E,aAAa,CAAC3E,EAAIS,GAAG,YAAYL,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,WAAWG,GAAG,CAAC,MAAQV,EAAI4E,WAAW,CAAC5E,EAAIS,GAAG,cAAc,IAAI,IAC1wG,EAAkB,G,sJCmBf,SAASoE,EAAUC,GACtB,IAAIlC,EAAMmC,6CAAYC,iBAEtB,OADApC,EAAMqC,GAAUrC,GAAY/C,OAAOqF,QAAUH,KAC7C,UAAUnC,EAAV,gBAAqBkC,GAOlB,SAASG,EAASrC,GAErB,IAAIuC,EAAM,IAAIC,IAAIxC,GAEZyC,EAAWC,EAAaH,EAAIE,UAClC,gBAAUF,EAAID,QAAd,OAAuBG,GAAvB,OAAkCF,EAAII,QAAtC,OAA+CJ,EAAIK,MAOhD,SAASF,EAAaG,GAEzB,OADAA,EAAOA,EAAKC,QAAQ,OAAQ,KACxBD,EAAKE,SAAS,KAAaF,EAAKG,UAAU,EAAGH,EAAK9I,OAAS,GACnD8I,EAST,SAAeI,EAAtB,kC,8DAAO,WAAoBf,GAApB,4GAA8BgB,EAA9B,+BAAqC,OAArC,SAGoBC,MAAMlB,EAAUC,IAHpC,UAGGkB,EAHH,QAKCA,EAASC,GALV,sBAQSH,EART,OAaU,SAbV,OAgBU,SAhBV,QAmBU,WAnBV,QAsBU,SAtBV,6BAWe,IAAII,MAAM,gBAXzB,wBAcsBF,EAASG,OAd/B,kEAiBsBH,EAASI,OAjB/B,kEAoBsBJ,EAASK,cApB/B,kEAuBsBL,EAASM,OAvB/B,kGA0BQ,CACHC,SAAS,EACTC,OAAQR,EAASQ,OACjBC,KAAMT,EAASU,aA7BpB,4C,wBAwCA,SAASC,EAAiBC,GAAqB,IAAfd,EAAe,uDAAR,OAE1C,SAASe,EAAWV,GAChB,IACI,OAAOW,KAAKC,MAAMZ,GACpB,MAAOa,GACL,OAAOA,GAIf,OAAO,IAAIC,SAAQ,SAACC,EAASC,GAEzB,IAAMC,EAAS,IAAIC,WAqBnB,OApBAD,EAAOE,QAAU,SAAAN,GAAG,OAAIG,EAAOH,IAC/BI,EAAOG,OAAS,SAAUC,GAGtB,IAAIhK,EAASgK,EAAGC,OAAOjK,OAGX,QAARsI,IAEAtI,EAASqJ,EAAWrJ,GAChBA,aAAkBkK,aAClBP,EAAO3J,GAMf0J,EAAQ1J,IAGJsI,GACJ,QACI,MAAM,IAAII,MAAM,gBAEpB,IAAK,OACL,IAAK,OACDkB,EAAOO,WAAWf,GAClB,MAEJ,IAAK,SACDQ,EAAOQ,kBAAkBhB,GACzB,UAUT,SAASiB,EAAaC,EAAU3B,GAEnC,IAAM4B,EAAUC,SAASC,cAAc,KACjC9C,EAAM,iCAAmC+C,mBAAmB/B,GAClE4B,EAAQI,aAAa,WAAYL,GACjCC,EAAQI,aAAa,OAAQhD,GAC7B4C,EAAQK,MAAMC,QAAU,OAExBL,SAASM,KAAKC,YAAYR,GAC1BA,EAAQS,QACRR,SAASM,KAAKG,YAAYV,GASvB,SAAeW,IAAtB,+B,8DAAO,yHAA8B5C,EAA9B,+BAAqC,OAGlC6C,EAAQX,SAASC,cAAc,SACrCU,EAAMR,aAAa,OAAQ,QAC3BQ,EAAMP,MAAMC,QAAU,OALnB,kBAOI,IAAIpB,SAAQ,SAACC,EAASC,GAGzB,IAAIyB,GAAkB,EACtBD,EAAME,iBAAiB,SAAvB,wCAAiC,2GAC7BD,GAAkB,EADW,kBAGNjC,EAAiBgC,EAAMjE,MAAM,GAAIoB,GAH3B,OAGnB3J,EAHmB,OAIzB+K,EAAQ,CAAE/K,OAAMoC,KAAMoK,EAAMjE,MAAM,GAAGnG,OAJZ,mDAMzB4I,EAAO,EAAD,IANmB,yDAQ9B,CAAE2B,MAAM,IAGXjJ,OAAOgJ,iBAAiB,SAAS,WAC7BE,YAAW,YAEFH,GAAmBD,EAAMK,cAC1BhB,SAASM,KAAKG,YAAYE,GAC1BxB,EAAO,IAAIjB,MAAM,cAEtB,OACJ,CAAE4C,MAAM,IAGXd,SAASM,KAAKC,YAAYI,GAC1BA,EAAMH,YAlCP,2C,wBAyCA,IAAMS,EAAb,WAII,WAAYC,EAAUpH,GAA4B,IAAlBqH,EAAkB,uDAAX,IAAO,GAAI,4BAFlDC,QAAU,EAGNnJ,KAAKoJ,SAAWC,YAAYrJ,KAAKsJ,MAAMhK,KAAKU,MAAOkJ,GACnDlJ,KAAK6B,SAAWA,EAChB7B,KAAKiJ,SAAWA,EAChBjJ,KAAKkJ,KAAOA,EARpB,uDAYQlJ,KAAKmJ,SAAWnJ,KAAKkJ,KACrB,IAAIlK,EAAIuK,KAAKC,IAAIxJ,KAAKmJ,QAAUnJ,KAAKiJ,SAAU,GAC/CjJ,KAAK6B,SAAS7C,GACVA,GAAK,GAAGgB,KAAKyJ,cAfzB,kCAmBQC,cAAc1J,KAAKoJ,cAnB3B,KAuBO,SAASO,EAAYC,EAAGC,EAAG7K,GAC9B,OAAO4K,GAAKC,EAAID,GAAK5K,EAGlB,SAAS8K,EAAW9F,GACvB,OAAOA,EAAIA,EAAIA,GAAKA,GAAS,EAAJA,EAAQ,IAAM,IAapC,SAAS+F,EAAYC,EAAOC,GAC/B,IADsC,EAClCC,GAAa,EACbC,EAAeC,OAAOC,kBAFY,iBAKdL,EAAMM,WALQ,IAKtC,2BAAyC,iCAA7B9N,EAA6B,KAA1B+N,EAA0B,KAC/BC,EAAWP,EAAMM,EAAM/N,GACzBgO,EAAWL,IACXA,EAAeK,EACfN,EAAY1N,IATkB,8BAatC,OAAO0N,GAAa,EAAIF,EAAME,QAAaO,EAMxC,I,IAAMC,EAAU,CASnB/L,IATmB,SASfU,GAAsB,IAAjBsL,EAAiB,4DAAXF,EACP1L,EAAQ6L,aAAaC,QAAQxL,GACjC,OAAc,OAAVN,GAKAA,EAAQ8H,KAAKC,MAAM/H,GACZA,EAAMA,OAIN4L,GAUfG,IA/BmB,SA+BfzL,EAAKN,GAELA,EAAQ,CAAE8G,KAAM,eAAO9G,GAAOA,SAC9BA,EAAQ8H,KAAKkE,UAAUhM,GAEvB6L,aAAaI,QAAQ3L,EAAKN,IAO9BkM,OA3CmB,SA2CZ5L,GACHuL,aAAaM,WAAW7L,KASzB,SAAS8L,EAAWvB,EAAGC,GAE1B,IAAMuB,EAAIvE,KAAKkE,UAAUnB,GACnByB,EAAIxE,KAAKkE,UAAUlB,GACzB,OAAOuB,IAAMC,E,0DClRjB,GADA,gB,wNAGA,a,EAGA,S,EACA,U,EACA,S,EACA,W,EACA,U,EACA,S,EAGA,WACM,KAAN,GACM,MAAN,GACM,KAAN,GACM,OAAN,GACM,MAAN,GACM,MAAN,I,EAIA,OACM,KAAN,EAAQ,UAAR,EAAQ,QAAR,0BACM,MAAN,EAAQ,UAAR,EAAQ,QAAR,0BACM,KAAN,EAAQ,UAAR,EAAQ,QAAR,0BACM,OAAN,EAAQ,UAAR,EAAQ,QAAR,0BACM,MAAN,EAAQ,UAAR,EAAQ,QAAR,0BACM,MAAN,EAAQ,UAAR,EAAQ,QAAR,2B,qNAKA,W,OAAA,W,OACA,eACA,cACA,gBACA,eACA,cAEA,kB,4IAIM,KAAN,e,mCAIM,KAAN,e,iCAGA,WACM,KAAN,iCACQ,QAAR,IAEU,EAAV,uDACU,EAAV,cACA,Q,iMAMA,wC,OAAA,Y,kTAIA,yE,OAAA,W,iTAIA,yG,OAAA,a,mTAIA,2I,OAAA,Y,kTAIA,4K,OAAA,W,qHAhFA,Q,SCnD6V,M,yBCQzVC,GAAY,gBACd,GACA,EACA,GACA,EACA,KACA,WACA,MAIa,GAAAA,G,QCnBX,GAAS,WAAa,IAAIvL,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACiC,IAAI,YAAY/B,YAAY,YAAY,CAACN,EAAIwL,GAAG,YAAY,IAClK,GAAkB,GCUtB,GADA,gB,wNAEA,kB,6DAGM,IAAN,EAAM,KAAN,gBACA,4BACM,OAAN,I,wCAMA,GACM,IAAN,EAAM,KAAN,gBACA,4BAEM,GAAN,EAIA,mBACU,IAAV,iCACA,SACU,OAAV,mBAEU,MAAV,8DARQ,OAAR,e,+BAiBA,mEACA,EAAM,KAAN,gBAIA,2BAEQ,EAAR,2BAWM,IAAN,eACA,kBAKA,6CACM,KAAN,kCACQ,EAAR,4B,gCAQA,GACM,IAAN,EAAM,KAAN,gBAEA,4BACA,4BAGM,OAAN,mC,GA3EA,Q,SCXmV,MCQ/U,I,UAAY,gBACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,M,QCnBX,GAAS,WAAa,IAAIxL,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACiC,IAAI,MAAM3B,GAAG,CAAC,MAAQV,EAAIyL,cACpK,GAAkB,G,0BCStB,I,YACA,iB,EACA,iB,EAqBA,sBAxBA,gB,6WAOM,KAAN,8BACM,KAAN,4BACM,KAAN,mB,oCAIM,KAAN,qB,qCAIM,KAAN,sB,gCAIM,KAAN,sB,gCAIA,GACM,KAAN,c,GAzBA,Q,yUCVmV,MCQ/U,I,UAAY,gBACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,M,QCnBX,GAAS,WAAa,IAAIzL,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,YAAY,CAACG,MAAM,CAAC,QAAUP,EAAIyD,UAAU,MAAQ,OAAO/C,GAAG,CAAC,iBAAiB,SAASmC,GAAQ7C,EAAIyD,UAAUZ,KAAU,CAACzC,EAAG,MAAM,CAACG,MAAM,CAAC,KAAO,SAASC,KAAK,SAAS,CAACJ,EAAG,OAAO,CAACJ,EAAIS,GAAG,uBAAuBT,EAAIkB,GAAGlB,EAAIiK,MAAMtN,QAAQ,wBAAyBqD,EAAIiK,MAAY,OAAE7J,EAAG,MAAM,CAACE,YAAY,QAAQN,EAAIkC,GAAIlC,EAAS,OAAE,SAASwK,GAAM,OAAOpK,EAAG,OAAO,CAACd,IAAIkL,EAAK5H,IAAItC,YAAY,YAAYC,MAAM,CAAC,UAAY,WAAW,CAACH,EAAG,WAAW,CAACG,MAAM,CAAC,KAAO,YAAY,IAAMiK,EAAK5H,IAAI,IAAM,WAAWlC,GAAG,CAAC,MAAQ,SAASmC,GAAQ,OAAO7C,EAAI0L,cAAclB,KAAQhK,KAAK,eAAe,MAAK,GAAGR,EAAIoD,KAAKhD,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,UAAUC,KAAK,UAAU,CAACJ,EAAG,YAAY,CAACM,GAAG,CAAC,MAAQV,EAAI2L,WAAW,CAAC3L,EAAIS,GAAG,cAAcL,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,WAAWG,GAAG,CAAC,MAAQV,EAAI4L,SAAS,CAAC5L,EAAIS,GAAG,WAAW,MACj4B,GAAkB,GC0BtB,GAEA,cAAE,uBACA,KAAF,YACE,KAAF,OAKA,I,EACA,gBAAE,QAAF,WAAI,MAAJ,M,EAYA,uBAdA,gB,wQAGA,a,EACA,S,wDAGM,KAAN,e,6BAIM,KAAN,e,sCAIA,GACM,KAAN,yBAAQ,OAAR,e,oCAIA,GAEM,KAAN,aACM,EAAN,YAEM,IAAN,oCAAQ,OAAR,iBACM,KAAN,oB,iCAcM,KAAN,aACM,KAAN,2B,+BAIM,KAAN,aACM,KAAN,2B,GA7CA,Q,kPCpCuV,MCQnV,I,UAAY,gBACd,GACA,GACA,IACA,EACA,KACA,WACA,OAIa,M,QCnBX,GAAS,WAAa,IAAIT,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,YAAY,CAACG,MAAM,CAAC,MAAQ,QAAQ,QAAUP,EAAIyD,WAAW/C,GAAG,CAAC,iBAAiB,SAASmC,GAAQ7C,EAAIyD,UAAUZ,KAAU,CAACzC,EAAG,KAAK,CAACJ,EAAIS,GAAG,oCAAoCL,EAAG,KAAK,CAACJ,EAAIS,GAAG,oBAAoBL,EAAG,IAAI,CAACA,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIS,GAAG,gEAAkEL,EAAG,KAAK,CAACJ,EAAIS,GAAG,gFAAkFL,EAAG,KAAK,CAACJ,EAAIS,GAAG,yFAA2FL,EAAG,KAAK,CAACJ,EAAIS,GAAG,iHAAmHL,EAAG,KAAK,CAACJ,EAAIS,GAAG,iBAAiBL,EAAG,IAAI,CAACA,EAAG,KAAK,CAACA,EAAG,KAAK,CAACJ,EAAIS,GAAG,gEAAgEL,EAAG,KAAK,CAACJ,EAAIS,GAAG,oBAAoBL,EAAG,IAAI,CAACA,EAAG,IAAI,CAACJ,EAAIS,GAAG,yBAAyBL,EAAG,OAAO,CAACG,MAAM,CAAC,KAAO,UAAUC,KAAK,UAAU,CAACJ,EAAG,YAAY,CAACG,MAAM,CAAC,KAAO,WAAWG,GAAG,CAAC,MAAQV,EAAI6L,OAAO,CAAC7L,EAAIS,GAAG,kBAAkB,MACzkC,GAAkB,GCiCtB,GADA,gB,yNAGA,a,wDAGM,KAAN,e,6BAIM,KAAN,iB,GATA,Q,YClCoV,MCOhV,GAAY,gBACd,GACA,GACA,IACA,EACA,KACA,KACA,MAIa,M,QClBTqL,I,WAAmB/G,GAEJgH,G,WAQjB,WAAYxN,EAAMyN,GAAQ,4BANJzN,UAMI,OALO0N,cAKP,OAJOD,YAIP,OAFKE,mBAEL,OADOC,aACP,EACtBlM,KAAK1B,KAAOA,EACZ0B,KAAK+L,OAASA,E,uDAGS,IAArBI,EAAqB,uDAAH,EACpBnM,KAAKiM,cAAgBE,EACrBnM,KAAKkM,QAAU,K,yCAKf,OAAIlM,KAAKkM,QAAQxP,OAAesD,KAAKkM,QAAQE,QAAO,SAACxC,EAAGC,GAAJ,OAAUD,EAAIC,KAAK7J,KAAKkM,QAAQxP,OACxE,I,8BAKR2P,EAAKC,GAET,GAAKtM,KAAK+L,OAAV,CAEA,IAAIQ,EAAWF,EAAIG,UAAUC,kBAAkBH,EAAUI,KAIzD,KAAIH,EAAWvM,KAAKiM,eAApB,CAEA,IAAIU,EAASJ,EAAWvM,KAAKiM,cAIzBW,GAAqB,EACzB,GAAI5M,KAAKkM,QAAQxP,OAAQ,CACrB,IAAMmQ,EAAiB7M,KAAK8M,mBAC5BF,EAAqBD,EAA0B,EAAjBE,EAG9BD,GACA5M,KAAKkM,QAAQa,QAAQJ,GACM,GAAvB3M,KAAKkM,QAAQxP,QACbsD,KAAKkM,QAAQ/O,SAIb0O,IAAkBmB,QAAQC,MAAM,8BAGxC,IAAMC,EAAgBlN,KAAK8M,mBACrBK,EAAYnN,KAAK+L,OAAOO,EAAWY,IACvB,IAAdC,GAAqBd,EAAIG,UAAUY,SAASD,GAEhDnN,KAAKiM,cAAgBM,Q,KCoB7B,MACA,MAkBA,KACA,GAWA,kBAAE,4BAVF,QAUE,KATF,cASE,KARF,YAQE,KAPF,WAOA,EACE,KAAF,SACE,KAAF,QACE,KAAF,QASA,SAASc,GAAYnM,GAArB,iEACA,2CACE,OAAF,U,IAIA,I,GADA,+G,GA8HA,iC,6NA5HA,kB,EACA,U,EACA,Q,EACA,oB,EACA,0H,kNA2CA,uDACA,gFACA,wDAEA,G,gCACA,gD,OAAA,E,OACA,qBACA,CACkB,KAAlB,OACkB,MAAlB,SACkB,KAAlB,YACkB,OAAlB,UACkB,MAAlB,SACkB,MAAlB,MAEA,G,+IASM,KAAN,8B,sCAOA,KAEM,KAAN,0BAAQ,MAAR,EAAQ,KAAR,mBAGM,IAAN,yBACM,KAAN,4BAAQ,OAAR,0CACM,KAAN,S,kCAMA,GAEM,EAAN,YAEM,IAAN,kCAAQ,OAAR,qBACA,sBACQ,KAAR,mBAEQ,KAAR,uE,mCAOA,KAIM,GAFA,EAAN,0BAEA,2CAEQ,GAAR,+BAGU,IAAV,0CACU,KAAV,6BAGU,KAAV,iC,4CAMA,KACM,EAAN,6BACM,EAAN,6B,sCAiBA,KAEM,IAAN,0EAAQ,OAAR,aACA,6BACM,GAAN,MAEQ,IAAR,sCACA,0CACQ,OAAR,QAGQ,OAAR,I,wCASA,KAEM,IAAN,0EAAQ,OAAR,aACA,6BACM,GAAN,MAEQ,IAAR,mDACA,sCACA,UAEA,0CACQ,OAAR,MAGQ,OAAR,I,mCAMM,IAAN,kCACM,GAAN,GACQ,IAAR,iCACQ,GAAR,gCACU,IAAV,kDACU,KAAV,8B,mCAOM,IAAN,kCACM,GAAN,GACQ,IAAR,iCACQ,GAAR,KACU,IAAV,kDACU,KAAV,8B,iDAKA,WACM,OAAN,mCACQ,IAAR,2DACQ,OAAR,iD,2CAKM,GAAN,8BAGQ,OADA,QAAR,8CACA,EASQ,IALA,IAAR,kCACA,+BACA,0CAAU,OAAV,+BAAU,OAAV,WAGA,+BACU,KAAV,wBAWQ,IAHA,IAAR,IACA,IACA,0BACA,oBAEU,IAAV,cAEU,GAAV,KACY,IAAZ,cAEY,GADA,QAAZ,iCACA,aAGU,GAAV,EACU,IAEF,GAAR,EAGQ,IAAR,yCACQ,QAAR,8EACQ,EAAR,CAEU,GAAV,EAEU,IAAV,mBACA,2BACA,sBAGQ,KAAR,gB,oCAQM,KAAN,iB,iCAOM,KAAN,c,oCAMA,GACM,IAAN,yBACA,2BACM,KAAN,4B,sCAIM,IAAN,uCAAQ,OAAR,UAEM,MAAN,CACQ,QAAR,EACQ,WAAR,wBACQ,WAAR,UACQ,KAAR,cACQ,UAAR,K,6GAwCA,E,wJAAA,6HAGA,2KACA,uBACA,0BACA,iBANA,cAGA,EAHA,yBAQA,cARA,6DAUA,GAVA,yD,yBAAA,E,2CAhCA,uBACA,YAGA,KACA,4B,SACA,kB,UAAA,E,SACA,e,kCACA,I,QAAA,E,mBAGA,E,wBAEA,uD,UAGA,SACA,cACA,uBACA,SACoBoM,OAAQ,mBACR,eAAgB,sB,QAKpC,qDAGA,wB,kJAsBM,IAAN,uBACA,oBACM,EAAN,oD,6HAwDA,EAiBA,EASA,EAOA,E,+FAAA,E,SAAA,GAEA,0BACA,EAEA,WAZA,E,SAAA,GACA,OACA,wBACA,wBAZA,E,SAAA,GAGA,OACA,aACA,cAtBA,E,SAAA,GAEA,aACA,OAEA,YAEA,OAEA,YAGA,QACA,wCA9DA,Y,kBAIA,U,mBAAA,E,EAAA,K,EAEA,O,EAAA,a,EAAA,UAEA,O,kCAEA,0B,QAAgB,E,OACAtN,KAAKoD,gBAAgBmK,EAAY9I,G,wBAGjCzE,KAAKgB,OAAOwM,SAAQ,SAApC,6B,QAIA,IADA,I,WACA,GACA,WACA,uDACA,SACoB,IAApB,cACoBnL,EAAMI,YAAa,EACnBgL,MANpB,wBAUA,aAEA,aACA,+HAGA,2E,qDAGA,uBAEA,uCACA,4BAEA,sDAGA,kE,oJArZM,OAAN,wB,gCAKM,OAAN,uB,8BAKM,OAAN,qB,2BAKM,OAAN,kB,qCAKM,OAAN,gCAAQ,OAAO,EAAf,gB,yCAKM,OAAN,qCAAQ,OAAO,EAAf,S,qCAKM,OAAN,4B,oCAIM,OAAN,mC,GA3CA,Q,gKCnI8T,MCS1T,I,oBAAY,gBACd,GACA,EACAlK,GACA,EACA,KACA,WACA,OAIa,M,0CCbfmK,aAAIC,IAAIC,IAAW,CAAEC,cAQrB,IAAMxB,GAAM,IAAIqB,aAAI,CAAEI,OAAQ,SAAAC,GAAC,OAAIA,EAAEC,OACrC3B,GAAI4B,OAAO,S,oCChBX,yBAAmf,EAAG,G,6GCAtf,yBAA2gB,EAAG,G,2GCA9gB,yBAAsiB,EAAG","file":"js/index.16883d26.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"index\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([0,\"chunk-vendors\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RangeSelectorDialog.vue?vue&type=style&index=0&id=80b30bce&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./RangeSelectorDialog.vue?vue&type=style&index=0&id=80b30bce&scoped=true&lang=scss&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Thumbnail.vue?vue&type=style&index=0&id=b5dc2838&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Thumbnail.vue?vue&type=style&index=0&id=b5dc2838&scoped=true&lang=scss&\"","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditorGallery.vue?vue&type=style&index=0&id=56b9a824&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./EditorGallery.vue?vue&type=style&index=0&id=56b9a824&scoped=true&lang=scss&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-col',{staticClass:\"app\"},[_c('el-menu',{attrs:{\"mode\":\"horizontal\"}},[_c('el-submenu',{attrs:{\"index\":\"workspace\"}},[_c('template',{slot:\"title\"},[_vm._v(\"Workspace\")]),_c('el-menu-item',{on:{\"click\":_vm.loadRangeData}},[_vm._v(\"Load Range Data\")]),_c('el-menu-item',{on:{\"click\":_vm.showPreview}},[_vm._v(\"Selection Preview\")]),_c('el-menu-item',{on:{\"click\":_vm.saveSelection}},[_vm._v(\"Save Selection\")]),_c('el-menu-item',{on:{\"click\":_vm.exportSelection}},[_vm._v(\"Download Selection\")]),_c('el-menu-item',{on:{\"click\":_vm.importSelection}},[_vm._v(\"Upload Selection\")]),_c('el-menu-item',{on:{\"click\":_vm.showHelp}},[_vm._v(\"Help\")])],2)],1),_c('el-row',{staticClass:\"main\",attrs:{\"type\":\"flex\",\"justify\":\"center\",\"align\":\"middle\"}},[_c('el-col',[(_vm.photos.length)?_c('el-card',[_c('div',{attrs:{\"slot\":\"header\"},slot:\"header\"},[_c('el-row',{attrs:{\"type\":\"flex\",\"justify\":\"space-around\"}},[_c('span',[_vm._v(\" \"+_vm._s(_vm.info.trial)+\" · \"+_vm._s(_vm.info.date)+\" · \"+_vm._s(_vm.info.camera)+\" · \"+_vm._s(_vm.info.range)+\" \"),_c('el-divider',{attrs:{\"direction\":\"vertical\"}}),_vm._v(\" Selected \"+_vm._s(_vm.selectedPhotos.length)+\" of \"+_vm._s(_vm.info.count)+\" \")],1),_c('span',{staticStyle:{\"flex-grow\":\"1\"}}),_c('span',[_c('el-popover',{attrs:{\"trigger\":\"hover\",\"content\":\"This action attempts the automatic (re)selection of images to the right of the viewport.\"}},[_c('el-button',{attrs:{\"slot\":\"reference\",\"size\":\"mini\",\"disabled\":!_vm.canAutoSelect},on:{\"click\":_vm.automaticSelection},slot:\"reference\"},[_vm._v(\"Predict Remaining Selection\")])],1),_c('el-divider',{attrs:{\"direction\":\"vertical\"}}),_vm._v(\" Scroll Mode: \"),_c('el-select',{attrs:{\"size\":\"mini\",\"value-key\":\"name\"},model:{value:(_vm.predictionMode),callback:function ($$v) {_vm.predictionMode=$$v},expression:\"predictionMode\"}},_vm._l((_vm.predictionModes),function(mode){return _c('el-option',{key:mode.name,attrs:{\"label\":mode.name,\"value\":mode}},[_vm._v(_vm._s(mode.name))])}),1),_c('el-divider',{attrs:{\"direction\":\"vertical\"}}),_c('el-popover',{attrs:{\"trigger\":\"hover\",\"content\":\"Scroll to the previously selected image on the left.\"}},[_c('el-button',{attrs:{\"slot\":\"reference\",\"size\":\"mini\",\"icon\":\"el-icon-arrow-left\"},on:{\"click\":_vm.scrollPrev},slot:\"reference\"})],1),_c('el-popover',{attrs:{\"trigger\":\"hover\",\"content\":\"Scroll to the next selected image on the right.\"}},[_c('el-button',{attrs:{\"slot\":\"reference\",\"size\":\"mini\",\"icon\":\"el-icon-arrow-right\"},on:{\"click\":_vm.scrollNext},slot:\"reference\"})],1),_c('el-divider',{attrs:{\"direction\":\"vertical\"}}),_c('el-popover',{attrs:{\"trigger\":\"hover\",\"content\":\"Show the selection preview window.\"}},[_c('el-button',{attrs:{\"slot\":\"reference\",\"size\":\"mini\",\"icon\":\"el-icon-s-grid\"},on:{\"click\":_vm.showPreview},slot:\"reference\"})],1)],1)])],1),(_vm.photos.length)?_c('FilmStrip',{ref:\"filmstrip\"},_vm._l((_vm.photos),function(photo,i){return _c('div',{key:photo.id,staticClass:\"photo\",class:{ selected: photo.isSelected }},[_c('Thumbnail',{ref:\"thumbnails\",refInFor:true,attrs:{\"src\":photo.url},on:{\"load\":function($event){return _vm.onImageLoad(photo)},\"click\":function($event){return _vm.onImageClick(photo, _vm.$refs.thumbnails[i])}}}),_c('i',{directives:[{name:\"show\",rawName:\"v-show\",value:(photo.isSelected),expression:\"photo.isSelected\"}],staticClass:\"el-icon-circle-check\"})],1)}),0):_vm._e()],1):_vm._e()],1)],1),[_c('RangeSelectorDialog',{ref:\"range_selector\",on:{\"submit\":_vm.onRangeSelected}}),_c('EditorGallery',{ref:\"gallery\",attrs:{\"srcs\":_vm.selectedPhotosUrls},on:{\"jumpTo\":_vm.onJumpToImage,\"saveSelection\":_vm.saveSelection,\"exportSelection\":_vm.exportSelection}}),_c('HelpDialog',{ref:\"help\"})]],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-dialog',{attrs:{\"title\":\"Load Range Data\",\"visible\":_vm.isVisible},on:{\"update:visible\":function($event){_vm.isVisible=$event},\"open\":function($event){return _vm.$nextTick(_vm.reset)}}},[_c('el-alert',{staticClass:\"bottom-margin\",attrs:{\"title\":\"Important\",\"type\":\"warning\",\"closable\":false}},[_vm._v(\" Please enter the \"),_c('strong',[_vm._v(\"plot count\")]),_vm._v(\" correctly as it can't be changed without reloading the images. \")]),_c('el-form',{ref:\"form\",attrs:{\"model\":_vm.selection,\"rules\":_vm.rules,\"label-width\":\"12ch\",\"label-suffix\":\":\"}},[_c('el-form-item',{ref:\"year\",attrs:{\"label\":\"Year\",\"prop\":\"year\"}},[_c('el-select',{attrs:{\"disabled\":!_vm.years.length,\"placeholder\":\"Choose Year\"},on:{\"change\":_vm.onYearSelect},model:{value:(_vm.selection.year),callback:function ($$v) {_vm.$set(_vm.selection, \"year\", $$v)},expression:\"selection.year\"}},_vm._l((_vm.years),function(x){return _c('el-option',{key:x,attrs:{\"value\":x}},[_vm._v(_vm._s(x))])}),1)],1),_c('el-form-item',{ref:\"trial\",attrs:{\"label\":\"Trial\",\"prop\":\"trial\"}},[_c('el-select',{attrs:{\"disabled\":!_vm.trials.length,\"placeholder\":\"Choose Trial\"},on:{\"change\":_vm.onTrialSelect},model:{value:(_vm.selection.trial),callback:function ($$v) {_vm.$set(_vm.selection, \"trial\", $$v)},expression:\"selection.trial\"}},_vm._l((_vm.trials),function(x){return _c('el-option',{key:x,attrs:{\"value\":x}},[_vm._v(_vm._s(x))])}),1)],1),_c('el-form-item',{ref:\"date\",attrs:{\"label\":\"Date\",\"prop\":\"date\"}},[_c('el-select',{attrs:{\"disabled\":!_vm.dates.length,\"placeholder\":\"Choose Date\"},on:{\"change\":_vm.onDateSelect},model:{value:(_vm.selection.date),callback:function ($$v) {_vm.$set(_vm.selection, \"date\", $$v)},expression:\"selection.date\"}},_vm._l((_vm.dates),function(x){return _c('el-option',{key:x,attrs:{\"value\":x}},[_vm._v(_vm._s(x))])}),1)],1),_c('el-form-item',{ref:\"camera\",attrs:{\"label\":\"Camera\",\"prop\":\"camera\"}},[_c('el-select',{attrs:{\"disabled\":!_vm.cameras.length,\"placeholder\":\"Choose Camera\"},on:{\"change\":_vm.onCameraSelect},model:{value:(_vm.selection.camera),callback:function ($$v) {_vm.$set(_vm.selection, \"camera\", $$v)},expression:\"selection.camera\"}},_vm._l((_vm.cameras),function(x){return _c('el-option',{key:x,attrs:{\"value\":x}},[_vm._v(_vm._s(x))])}),1)],1),_c('el-form-item',{ref:\"range\",attrs:{\"label\":\"Range\",\"prop\":\"range\"}},[_c('el-select',{attrs:{\"disabled\":!_vm.ranges.length,\"placeholder\":\"Choose Range\"},on:{\"change\":_vm.onRangeSelect},model:{value:(_vm.selection.range),callback:function ($$v) {_vm.$set(_vm.selection, \"range\", $$v)},expression:\"selection.range\"}},_vm._l((_vm.ranges),function(x){return _c('el-option',{key:x,attrs:{\"value\":x}},[_vm._v(_vm._s(x))])}),1)],1),_c('el-form-item',{ref:\"count\",attrs:{\"label\":\"Plot Count\",\"prop\":\"count\"}},[_c('el-input-number',{attrs:{\"disabled\":!_vm.files.length,\"placeholder\":((_vm.files.length) + \" images\"),\"min\":1,\"max\":_vm.files.length},model:{value:(_vm.selection.count),callback:function ($$v) {_vm.$set(_vm.selection, \"count\", $$v)},expression:\"selection.count\"}})],1)],1),_c('span',{attrs:{\"slot\":\"footer\"},slot:\"footer\"},[_c('el-button',{on:{\"click\":_vm.hideDialog}},[_vm._v(\"Cancel\")]),_c('el-button',{attrs:{\"type\":\"primary\"},on:{\"click\":_vm.onSubmit}},[_vm._v(\"Confirm\")])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * Generates a promise that resolves some time in the future.\n * @param {number} time Delay time in milliseconds\n */\nexport async function delay(time) {\n return new Promise(resolve => setTimeout(resolve, time))\n}\n\n/**\n * Removes the extension (ie, text after the last dot) of a string.\n * @param {string} path Some path\n */\nexport function stripExtension(path) {\n return path.split('.').slice(0, -1).join('.')\n}\n\n/**\n * Constructs a full URL to some data resource.\n * @param {string} resource Some application resource path\n */\nexport function getApiUrl(resource) {\n let url = process.env.VUE_APP_DATA_URL\n url = cleanUrl((url ? url : window.origin) + process.env.BASE_URL)\n return `${url}/api/${resource}`\n}\n\n/**\n * Removes repeating slashes and strips the trailing slash if present from the path and origin.\n * @param {string} url Some URL to clean\n */\nexport function cleanUrl(url) {\n // Parse URL\n let uri = new URL(url)\n // Reassemble URL, but with cleaning the slashes\n const pathname = fixPathSlash(uri.pathname)\n return `${uri.origin}${pathname}${uri.search}${uri.hash}`\n}\n\n/**\n * Removes repeating slashes and strips the trailing slash if present.\n * @param {string} path Some path to clean\n */\nexport function fixPathSlash(path) {\n path = path.replace(/\\/+/g, '/')\n if (path.endsWith('/')) return path.substring(0, path.length - 1)\n else return path\n}\n\n/**\n * Asynchronously fetches some resource and returns as JSON.\n * @param {string} resource Some URL to a resource to fetch\n * @param {('json'|'text'|'buffer'|'blob')} type The type to request\n * @returns {(*|string|ArrayBuffer|Blob)} The fetched value with respective type\n */\nexport async function grab(resource, type = 'json') {\n\n // Request resource\n const response = await fetch(getApiUrl(resource))\n\n if (response.ok) {\n\n // Then return as appropriate type\n switch (type) {\n\n default:\n throw new Error('Unknown type')\n\n case 'text':\n return await response.text()\n\n case 'json':\n return await response.json()\n\n case 'buffer':\n return await response.arrayBuffer()\n\n case 'blob':\n return await response.blob()\n }\n } else {\n return {\n isError: true,\n status: response.status,\n test: response.statusText\n }\n }\n}\n\n/**\n * Reads the contents of a blob (file) as \n * @param {Blob} file The blob to read from\n * @param {('json'|'text'|'buffer')} type The type to request\n * @returns {(*|string|ArrayBuffer)} The fetched value with respective type\n */\nexport function readFileContents(file, type = 'json') {\n\n function parse_json(text) {\n try {\n return JSON.parse(text)\n } catch (err) {\n return err\n }\n }\n\n return new Promise((resolve, reject) => {\n\n const reader = new FileReader()\n reader.onerror = err => reject(err)\n reader.onload = function (ev) {\n\n // Grab result\n let result = ev.target.result\n\n // If requesting a json type, parse the file\n if (type == 'json') {\n // Parse as json\n result = parse_json(result)\n if (result instanceof SyntaxError) {\n reject(result)\n return // exit load callback\n }\n }\n\n // Read file successfully\n resolve(result)\n }\n\n switch (type) {\n default:\n throw new Error('Unknown type')\n\n case 'text':\n case 'json':\n reader.readAsText(file)\n break\n\n case 'buffer':\n reader.readAsArrayBuffer(file)\n break\n }\n })\n}\n\n/**\n * Causes a download prompt of a text file with the specified name and content.\n * @param {string} filename The name of the text file\n * @param {string} text Contents of the text file\n */\nexport function downloadText(filename, text) {\n // Construct a download link\n const element = document.createElement('a')\n const uri = 'data:text/plain;charset=utf-8,' + encodeURIComponent(text)\n element.setAttribute('download', filename)\n element.setAttribute('href', uri)\n element.style.display = 'none'\n // Fake click the link and remove\n document.body.appendChild(element)\n element.click()\n document.body.removeChild(element)\n}\n\n\n/**\n * Causes a upload prompt of a file but then reads it into memory instead.\n * @param {('json'|'text'|'buffer')} type The type to request\n * @returns {Promise<(*|string|ArrayBuffer)>} A promise for the value with respective type\n */\nexport async function loadClientFile(type = 'text') {\n\n // Construct a download link\n const input = document.createElement('input')\n input.setAttribute('type', 'file')\n input.style.display = 'none'\n\n return new Promise((resolve, reject) => {\n\n // \n let hasSelectedFile = false\n input.addEventListener(\"change\", async () => {\n hasSelectedFile = true\n try {\n const data = await readFileContents(input.files[0], type)\n resolve({ data, name: input.files[0].name })\n } catch (err) {\n reject(err)\n }\n }, { once: true })\n\n // \n window.addEventListener(\"focus\", () => {\n setTimeout(() => {\n // If no file was selected and the input element still exists\n if (!hasSelectedFile && input.isConnected) {\n document.body.removeChild(input)\n reject(new Error('cancel'))\n }\n }, 200)\n }, { once: true })\n\n // Append and programatically click\n document.body.appendChild(input)\n input.click()\n })\n}\n\n/**\n * Utility class to assist with animation.\n */\nexport class AnimateCallback {\n\n elapsed = 0\n\n constructor(duration, callback, rate = 1000 / 60) {\n this.interval = setInterval(this._tick.bind(this), rate)\n this.callback = callback\n this.duration = duration\n this.rate = rate\n }\n\n _tick() {\n this.elapsed += this.rate\n let t = Math.min(this.elapsed / this.duration, 1.0)\n this.callback(t)\n if (t >= 1) this.interrupt()\n }\n\n interrupt() {\n clearInterval(this.interval)\n }\n}\n\nexport function interpolate(a, b, t) {\n return a + (b - a) * t\n}\n\nexport function smoothstep(x) {\n return x * x * x * (x * (x * 6 - 15) + 10)\n}\n\nexport function between(lo, hi, x) {\n return (x - lo) / (hi - lo)\n}\n\n/**\n * Finds the minimal element of a list of items.\n * @template X\n * @param {X[]} items Some list of items.\n * @param {(item: X, index: number) => number} query Returns a distance to minimize.\n */\nexport function findMinimal(items, query) {\n let bestIndex = -1\n let bestDistance = Number.POSITIVE_INFINITY\n\n // Keeps the index of the item with minimal distance\n for (const [i, item] of items.entries()) {\n const distance = query(item, i)\n if (distance < bestDistance) {\n bestDistance = distance\n bestIndex = i\n }\n }\n\n return bestIndex >= 0 ? items[bestIndex] : undefined\n}\n\n/**\n * A more pleasant wrapper around localStorage API.\n */\nexport const storage = {\n\n /**\n * Gets a value by the specified key or a default value if the key is not found.\n * @template X\n * @param {string} key Some identifier for the stored value\n * @param {X} def Some default value if key was not found\n * @returns {X}\n */\n get(key, def = undefined) {\n let value = localStorage.getItem(key)\n if (value !== null) {\n // Extract value\n // todo: Improve extraction by type field?\n // for JS primitives this is suitable, but to serialize\n // more complex types (ie, a class) more is likely needed.\n value = JSON.parse(value)\n return value.value\n }\n else {\n // Key not found, return default\n return def\n }\n },\n\n /**\n * Sets a key value pair into the storage.\n * @template X\n * @param {string} key Some identifier for the stored value\n * @param {X} value Some type of some type\n */\n set(key, value) {\n // JSONify value\n value = { type: typeof value, value }\n value = JSON.stringify(value)\n // Store\n localStorage.setItem(key, value)\n },\n\n /**\n * Removes a key-value pair from storage.\n * @param {string} key Some identifier for the stored value\n */\n remove(key) {\n localStorage.removeItem(key)\n },\n}\n\n/**\n * Compares two objects for per-property nested equality (ie, json form comparison).\n * @param {*} a Some object A\n * @param {*} b Some object B\n */\nexport function deepEquals(a, b) {\n // todo: a more appropriate deep equals?\n const A = JSON.stringify(a)\n const B = JSON.stringify(b)\n return A === B\n}","\n \n \n
Quick Explaination of Features
\n Selection Data
\n \n
\n
\n
\n Not Available Yet\n
\n \n