{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/application.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js","webpack:///./app/javascript/channels/index.js","webpack:///./app/javascript/channels sync _channel\\.js$","webpack:///./node_modules/@biovision/biovision/index.js","webpack:///./app/javascript/demoshop/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","start","_typeof","iterator","obj","constructor","this","Rails","linkClickSelector","buttonClickSelector","selector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","ref","document","querySelector","content","cspNonce","Element","matches","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","element","getData","setData","$","Array","slice","querySelectorAll","csrfParam","csrfToken","meta","CSRFProtection","xhr","token","setRequestHeader","refreshCSRFTokens","param","forEach","input","CustomEvent","fire","preventDefault","window","event","params","evt","createEvent","initCustomEvent","bubbles","cancelable","detail","Event","result","defaultPrevented","data","dispatchEvent","stopEverything","e","target","stopPropagation","stopImmediatePropagation","delegate","eventType","handler","addEventListener","parentNode","AcceptHeaders","createXHR","prepareOptions","processResponse","text","html","xml","json","script","ajax","options","response","responseText","getResponseHeader","Math","floor","status","success","statusText","error","complete","beforeSend","readyState","XMLHttpRequest","OPENED","send","url","location","href","type","toUpperCase","indexOf","dataType","accept","done","open","crossDomain","withCredentials","onreadystatechange","DONE","parser","match","JSON","parse","createElement","setAttribute","head","appendChild","removeChild","DOMParser","replace","parseFromString","isCrossDomain","originAnchor","urlAnchor","protocol","host","toArray","serializeElement","additionalParam","inputs","elements","disabled","option","selected","push","checked","map","encodeURIComponent","join","formElements","form","filter","el","allowAction","handleConfirm","confirm","message","answer","callback","getAttribute","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","innerHTML","originalText","removeEventListener","handleMethod","formContent","method","action","style","display","body","click","isRemote","handleRemote","button","enctype","FormData","append","args","arguments","length","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","metaKey","ctrlKey","jQuery","rails","Error","ajaxPrefilter","originalOptions","_rails_loaded","setTimeout","webpackPolyfill","deprecate","paths","children","factory","sparkMd5","fn","createCommonjsModule","undefined","hex_chr","md5cycle","x","k","a","b","md5blk","md5blks","charCodeAt","md5blk_array","md51","tail","tmp","lo","hi","state","substring","toString","parseInt","rhex","j","hex","toUtf8","str","test","unescape","hexToBinaryString","bytes","substr","String","fromCharCode","apply","SparkMD5","reset","ArrayBuffer","clamp","val","max","min","from","to","num","targetArray","sourceArray","byteLength","begin","end","Uint8Array","set","appendBinary","contents","_buff","_length","_hash","raw","ret","buff","_finish","getState","hash","setState","destroy","hashBinary","arr","first","second","returnUInt8Array","buffer","subarray","utf8Str2ArrayBuffer","md51_array","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","props","descriptor","configurable","writable","protoProps","staticProps","fileSlice","File","mozSlice","webkitSlice","FileChecksum","file","chunkSize","chunkCount","ceil","size","chunkIndex","_this","md5Buffer","fileReader","FileReader","fileReaderDidLoad","fileReaderDidError","readNextChunk","binaryDigest","base64digest","btoa","readAsArrayBuffer","findElement","root","eventInit","initEvent","toArray$1","isArray","BlobRecord","checksum","attributes","filename","content_type","byte_size","responseType","getMetaValue","requestDidLoad","requestDidError","stringify","blob","direct_upload","directUploadData","toJSON","_xhr","BlobUpload","_blob$directUploadDat","headers","id","DirectUpload","notify","upload","methodName","_len","messages","_key","DirectUploadController","directUpload","dispatch","hiddenInput","insertAdjacentElement","dispatchError","signed_id","progress","loaded","total","alert","_this2","uploadRequestDidProgress","DirectUploadsController","files","controllers","createDirectUploadControllers","startNextController","controller","shift","submitButtonsByForm","WeakMap","started","didClick","didSubmitForm","didSubmitRemoteElement","tagName","handleFormSubmissionEvent","hasAttribute","disable","removeAttribute","enable","focus","submitForm","ActiveStorage","channels","keys","webpackEmptyContext","req","code","resolve","Biovision","locale","components","init","componentName","component","autoInitComponents","initChildComponents","parent","child","initialized","newAjaxRequest","onSuccess","onFailure","request","handleAjaxFailure","jsonAjaxRequest","console","log","execute","context","namespaces","split","func","pop","forms","showErrors","modelName","list","getElementById","errors","classList","add","prepend","scrollIntoView","switchElements","formId","hideSelector","showSelector","remove","showError","container","topLinker","pageYOffset","filePreview","handle","targetImage","reader","onload","readAsDataURL","entityLinker","box","instantCheck","closest","valid","field","entries","entry","Blob","transliterator","transliterate","characterMap","string","toLowerCase","index","RegExp","formStatus","loadingMessage","stateContainer","progressPercent","progressBar","autoExpand","savedValue","baseScrollHeight","scrollHeight","ratio","getComputedStyle","getPropertyValue","minRows","maxRows","rows","entityImageRemover","term","imageRemover","buttons","image","src","link","ajaxDeleteButton","storage","session","local","available","setItem","removeItem","getItem","destroyButton","userSearch","results","li","adminUserSearch","resultsContainer","callbackName","changeInput","clickButton","changeSelect","showResults","select","selectedIndex","item","userPrivilege","addUser","processAddResponse","user","div","linkData","details","hidingPopups","addElement","checkbox","componentParameters","change","dt","label","elementId","dd","newComponentParameter","dataPresent","cookieNotifier","date","Date","setTime","getTime","cookie","toUTCString","animatedNumbers","containers","breakpoints","addContainer","watch","addItem","items","animated","getBoundingClientRect","y","innerHeight","animate","increment","stepCount","stepNumber","initialValue","carousel","sliders","slider","setInterval","autoSlide","clickedPrev","clickedNext","parseFloat","transitionDuration","touchStart","touchEnd","rearrange","newCurrentItem","setMaxItem","newOffset","processCycle","getSlider","prevItem","nextItem","now","current","currentSlide","firstSlide","rightMargin","marginRight","slideWidth","offsetWidth","newMargin","delta","marginLeft","offsetLeft","offsetRight","setProperty","styles","maxCount","changedTouches","pageX","pageY","abs","Notifications","markAsRead","deleteNotification","notifications","oembed","receive","parentElement","replaceChild","fallback","hostname","remoteUrl","nodeName","toLocaleLowerCase","scriptElement","Socialization","messageSender","loader","keyup","loadMessages","trim","processPost","addMessage","processGet","messageCounter","process","messageCount","socialization","videoStretcher","figure","lockable","contains","locked","classes","_url","parameter","_request","className","_url2","_request2","_data2","_container","priority","entity_id","sort","an","bn","_data","formData","newFormData","Demoshop","attachComponents","popupLoader","useContainer","inputMasks","rangeValues","popupForms","localForm","decrementTimeout","control","wrapper","load","closePopup","updateContent","updateFaq","faq","useComponent","max_width","removeProperty","newContent","IMask","mask","containerId","autoPopup","quantitySelector","fetch","then","cartButton","cart","quantity","counter","sidebarState","highlighter","mouseIn","mouseOut","toggle","checkScroll","hidePopup","specialBehavior","showPopup","top","scrollY","scrollTo","watcher","popupWatcher","hover","popup","calculator","payments","credit","monthly","card","monthRange","percentRange","paymentSum","pushElements","handleChange","months","percent","newCredit","toFixed","newCard","newMonthly","setValue","round","newValue","Map","minValue","timeout","interval","dataset","has","sidebarWatcher","sidebar","addDetails","addButton","innerWidth","demoshop"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,qBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,UAIjBlC,EAAoBA,EAAoBmC,EAAI,G,kBC7ErDC,EAAQ,GAAcC,QACtBD,EAAQ,GAAwBC,QAChCD,EAAQ,GACRA,EAAQ,GACRA,EAAQ,I,iBCTR,kCAAoW,OAAtOE,EAArD,oBAAXnB,QAAoD,kBAApBA,OAAOoB,SAAmC,SAAiBC,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXrB,QAAyBqB,EAAIC,cAAgBtB,QAAUqB,IAAQrB,OAAOa,UAAY,gBAAkBQ,IAAyBA,IAQnX,YAEE,YACE,WACEE,KAAKC,MAAQ,CACXC,kBAAmB,yGACnBC,oBAAqB,CACnBC,SAAU,oEACVC,QAAS,eAEXC,oBAAqB,iEACrBC,mBAAoB,OACpBC,uBAAwB,6MACxBC,oBAAqB,sMACrBC,mBAAoB,4MACpBC,kBAAmB,yCACnBC,oBAAqB,wCACrBC,sBAAuB,+EAExBhD,KAAKmC,QACPnC,KAnBWmC,MAoBd,IAAIC,EApBUD,KAoBMC,OACpB,YACE,WACE,IAAIa,EACJA,EAAQ,KAERb,EAAMc,aAAe,WACnB,IAAIC,EACJ,OAAOF,EAAkE,OAAzDE,EAAMC,SAASC,cAAc,yBAAmCF,EAAIG,aAAU,GAGhGlB,EAAMmB,SAAW,WACf,OAAgB,MAATN,EAAgBA,EAAQb,EAAMc,kBAEtClD,KAAKmC,MACR,WACE,IAAalC,EACbA,EAAIuD,QAAQ/B,UAAUgC,SAAWD,QAAQ/B,UAAUiC,iBAAmBF,QAAQ/B,UAAUkC,oBAAsBH,QAAQ/B,UAAUmC,mBAAqBJ,QAAQ/B,UAAUoC,kBAAoBL,QAAQ/B,UAAUqC,sBAE7M1B,EAAMqB,QAAU,SAAUM,EAASxB,GACjC,OAAwB,MAApBA,EAASC,QACJvC,EAAED,KAAK+D,EAASxB,EAASA,YAActC,EAAED,KAAK+D,EAASxB,EAASC,SAEhEvC,EAAED,KAAK+D,EAASxB,IAM3BH,EAAM4B,QAAU,SAAUD,EAAS3C,GACjC,IAAI+B,EACJ,OAAmC,OAA3BA,EAAMY,EAAe,UAAaZ,EAAI/B,QAAO,GAGvDgB,EAAM6B,QAAU,SAAUF,EAAS3C,EAAKN,GAKtC,OAJwB,MAApBiD,EAAe,WACjBA,EAAe,SAAI,IAGdA,EAAe,SAAE3C,GAAON,GAGjCsB,EAAM8B,EAAI,SAAU3B,GAClB,OAAO4B,MAAM1C,UAAU2C,MAAMpE,KAAKoD,SAASiB,iBAAiB9B,MAE7DvC,KAAKmC,MACR,WACE,IAAI+B,EAAGI,EAAWC,EAClBL,EAAI9B,EAAM8B,EAEVK,EAAYnC,EAAMmC,UAAY,WAC5B,IAAIC,EAEJ,OADAA,EAAOpB,SAASC,cAAc,2BACfmB,EAAKlB,SAGtBgB,EAAYlC,EAAMkC,UAAY,WAC5B,IAAIE,EAEJ,OADAA,EAAOpB,SAASC,cAAc,2BACfmB,EAAKlB,SAGtBlB,EAAMqC,eAAiB,SAAUC,GAC/B,IAAIC,EAGJ,GAAa,OAFbA,EAAQJ,KAGN,OAAOG,EAAIE,iBAAiB,eAAgBD,IAIhDvC,EAAMyC,kBAAoB,WACxB,IAAIC,EAAOH,EAIX,GAHAA,EAAQJ,IACRO,EAAQR,IAEK,MAATK,GAA0B,MAATG,EACnB,OAAOZ,EAAE,oBAAsBY,EAAQ,MAAMC,SAAQ,SAAUC,GAC7D,OAAOA,EAAMlE,MAAQ6D,OAI1B3E,KAAKmC,MACR,WACE,IAAI8C,EAAaC,EAAMzB,EAAS0B,EAChC1B,EAAUrB,EAAMqB,QAGW,oBAF3BwB,EAAcG,OAAOH,gBAGnBA,EAAc,SAAqBI,EAAOC,GACxC,IAAIC,EAGJ,OAFAA,EAAMnC,SAASoC,YAAY,gBACvBC,gBAAgBJ,EAAOC,EAAOI,QAASJ,EAAOK,WAAYL,EAAOM,QAC9DL,IAGG9D,UAAY2D,OAAOS,MAAMpE,UACrC0D,EAAiBF,EAAYxD,UAAU0D,eAEvCF,EAAYxD,UAAU0D,eAAiB,WACrC,IAAIW,EAWJ,OAVAA,EAASX,EAAenF,KAAKmC,MAEzBA,KAAKwD,aAAexD,KAAK4D,kBAC3BxF,OAAOC,eAAe2B,KAAM,mBAAoB,CAC9CzB,IAAK,WACH,OAAO,KAKNoF,IAIXZ,EAAO9C,EAAM8C,KAAO,SAAUjD,EAAK7B,EAAM4F,GACvC,IAAIX,EAOJ,OANAA,EAAQ,IAAIJ,EAAY7E,EAAM,CAC5BsF,SAAS,EACTC,YAAY,EACZC,OAAQI,IAEV/D,EAAIgE,cAAcZ,IACVA,EAAMU,kBAGhB3D,EAAM8D,eAAiB,SAAUC,GAI/B,OAHAjB,EAAKiB,EAAEC,OAAQ,yBACfD,EAAEhB,iBACFgB,EAAEE,kBACKF,EAAEG,4BAGXlE,EAAMmE,SAAW,SAAUxC,EAASxB,EAAUiE,EAAWC,GACvD,OAAO1C,EAAQ2C,iBAAiBF,GAAW,SAAUL,GACnD,IAAIC,EAGJ,IAFAA,EAASD,EAAEC,OAEAA,aAAkB5C,UAAYC,EAAQ2C,EAAQ7D,IACvD6D,EAASA,EAAOO,WAGlB,GAAIP,aAAkB5C,UAAuC,IAA5BiD,EAAQzG,KAAKoG,EAAQD,GAEpD,OADAA,EAAEhB,iBACKgB,EAAEE,uBAIdrG,KAAKmC,MACR,WACE,IAAIyE,EAAenC,EAAgBoC,EAAWtD,EAAgBuD,EAAgBC,EAC9ExD,EAAWnB,EAAMmB,SAAUkB,EAAiBrC,EAAMqC,eAAuBrC,EAAM8C,KAC/E0B,EAAgB,CACd,IAAK,MACLI,KAAM,aACNC,KAAM,YACNC,IAAK,4BACLC,KAAM,oCACNC,OAAQ,6FAGVhF,EAAMiF,KAAO,SAAUC,GACrB,IAAI5C,EAmBJ,OAlBA4C,EAAUR,EAAeQ,GACzB5C,EAAMmC,EAAUS,GAAS,WACvB,IAAInE,EAAKoE,EAaT,OAZAA,EAAWR,EAAwC,OAAvB5D,EAAMuB,EAAI6C,UAAoBpE,EAAMuB,EAAI8C,aAAc9C,EAAI+C,kBAAkB,iBAEnE,IAAjCC,KAAKC,MAAMjD,EAAIkD,OAAS,KACK,oBAApBN,EAAQO,SACjBP,EAAQO,QAAQN,EAAU7C,EAAIoD,WAAYpD,GAGf,oBAAlB4C,EAAQS,OACjBT,EAAQS,MAAMR,EAAU7C,EAAIoD,WAAYpD,GAIT,oBAArB4C,EAAQU,SAA0BV,EAAQU,SAAStD,EAAKA,EAAIoD,iBAAc,OAGhE,MAAtBR,EAAQW,aAAuBX,EAAQW,WAAWvD,EAAK4C,MAIvD5C,EAAIwD,aAAeC,eAAeC,OAC7B1D,EAAI2D,KAAKf,EAAQtB,WAD1B,IAKFc,EAAiB,SAAwBQ,GAsBvC,OArBAA,EAAQgB,IAAMhB,EAAQgB,KAAOC,SAASC,KACtClB,EAAQmB,KAAOnB,EAAQmB,KAAKC,cAEP,QAAjBpB,EAAQmB,MAAkBnB,EAAQtB,OAChCsB,EAAQgB,IAAIK,QAAQ,KAAO,EAC7BrB,EAAQgB,KAAO,IAAMhB,EAAQtB,KAE7BsB,EAAQgB,KAAO,IAAMhB,EAAQtB,MAIM,MAAnCY,EAAcU,EAAQsB,YACxBtB,EAAQsB,SAAW,KAGrBtB,EAAQuB,OAASjC,EAAcU,EAAQsB,UAEd,MAArBtB,EAAQsB,WACVtB,EAAQuB,QAAU,iBAGbvB,GAGTT,EAAY,SAAmBS,EAASwB,GACtC,IAAIpE,EAsBJ,OArBAA,EAAM,IAAIyD,gBACNY,KAAKzB,EAAQmB,KAAMnB,EAAQgB,KAAK,GACpC5D,EAAIE,iBAAiB,SAAU0C,EAAQuB,QAEX,kBAAjBvB,EAAQtB,MACjBtB,EAAIE,iBAAiB,eAAgB,oDAGlC0C,EAAQ0B,aACXtE,EAAIE,iBAAiB,mBAAoB,kBAG3CH,EAAeC,GACfA,EAAIuE,kBAAoB3B,EAAQ2B,gBAEhCvE,EAAIwE,mBAAqB,WACvB,GAAIxE,EAAIwD,aAAeC,eAAegB,KACpC,OAAOL,EAAKpE,IAITA,GAGTqC,EAAkB,SAAyBQ,EAAUkB,GACnD,IAAIW,EAAQhC,EAEZ,GAAwB,kBAAbG,GAAyC,kBAATkB,EACzC,GAAIA,EAAKY,MAAM,YACb,IACE9B,EAAW+B,KAAKC,MAAMhC,GACtB,MAAOQ,SACJ,GAAIU,EAAKY,MAAM,4BACpBjC,EAAShE,SAASoG,cAAc,WACzBC,aAAa,QAASlG,KAC7B6D,EAAOJ,KAAOO,EACdnE,SAASsG,KAAKC,YAAYvC,GAAQT,WAAWiD,YAAYxC,QACpD,GAAIqB,EAAKY,MAAM,sBAAuB,CAC3CD,EAAS,IAAIS,UACbpB,EAAOA,EAAKqB,QAAQ,MAAO,IAE3B,IACEvC,EAAW6B,EAAOW,gBAAgBxC,EAAUkB,GAC5C,MAAOV,KAIb,OAAOR,GAGTnF,EAAMoG,KAAO,SAAUzE,GACrB,OAAOA,EAAQyE,MAGjBpG,EAAM4H,cAAgB,SAAU1B,GAC9B,IAAO2B,EAAcC,GACrBD,EAAe7G,SAASoG,cAAc,MACzBhB,KAAOD,SAASC,KAC7B0B,EAAY9G,SAASoG,cAAc,KAEnC,IAEE,OADAU,EAAU1B,KAAOF,MACN4B,EAAUC,UAAmC,MAAvBD,EAAUC,YAAsBD,EAAUE,MAAQH,EAAaE,SAAW,KAAOF,EAAaG,OAASF,EAAUC,SAAW,KAAOD,EAAUE,MAC9K,MAAOrC,GAEP,OADIA,GACG,KAGV/H,KAAKmC,MACR,WACE,IAAIsB,EAAS4G,EACb5G,EAAUrB,EAAMqB,QAEhB4G,EAAU,SAAiBlE,GACzB,OAAOhC,MAAM1C,UAAU2C,MAAMpE,KAAKmG,IAGpC/D,EAAMkI,iBAAmB,SAAUvG,EAASwG,GAC1C,IAAIC,EAAQlF,EAsCZ,OArCAkF,EAAS,CAACzG,GAENN,EAAQM,EAAS,UACnByG,EAASH,EAAQtG,EAAQ0G,WAG3BnF,EAAS,GACTkF,EAAOzF,SAAQ,SAAUC,GACvB,GAAKA,EAAM5E,OAAQ4E,EAAM0F,WAIrBjH,EAAQuB,EAAO,wBAInB,OAAIvB,EAAQuB,EAAO,UACVqF,EAAQrF,EAAMsC,SAASvC,SAAQ,SAAU4F,GAC9C,GAAIA,EAAOC,SACT,OAAOtF,EAAOuF,KAAK,CACjBzK,KAAM4E,EAAM5E,KACZU,MAAO6J,EAAO7J,WAIXkE,EAAM8F,UAAoE,IAAzD,CAAC,QAAS,WAAY,UAAUnC,QAAQ3D,EAAMyD,MACjEnD,EAAOuF,KAAK,CACjBzK,KAAM4E,EAAM5E,KACZU,MAAOkE,EAAMlE,aAHV,KAQLyJ,GACFjF,EAAOuF,KAAKN,GAGPjF,EAAOyF,KAAI,SAAUjG,GAC1B,OAAkB,MAAdA,EAAM1E,KACD4K,mBAAmBlG,EAAM1E,MAAQ,IAAM4K,mBAAmBlG,EAAMhE,OAEhEgE,KAERmG,KAAK,MAGV7I,EAAM8I,aAAe,SAAUC,EAAM5I,GACnC,OAAIkB,EAAQ0H,EAAM,QACTd,EAAQc,EAAKV,UAAUW,QAAO,SAAUC,GAC7C,OAAO5H,EAAQ4H,EAAI9I,MAGd8H,EAAQc,EAAK9G,iBAAiB9B,MAGxCvC,KAAKmC,MACR,WACE,IAAImJ,EAAapG,EAAMgB,EACvBhB,EAAO9C,EAAM8C,KAAMgB,EAAiB9D,EAAM8D,eAE1C9D,EAAMmJ,cAAgB,SAAUpF,GAC9B,IAAKmF,EAAYnJ,MACf,OAAO+D,EAAeC,IAI1B/D,EAAMoJ,QAAU,SAAUC,EAAS1H,GACjC,OAAOyH,QAAQC,IAGjBH,EAAc,SAAqBvH,GACjC,IAAI2H,EAAQC,EAAUF,EAGtB,KAFAA,EAAU1H,EAAQ6H,aAAa,iBAG7B,OAAO,EAKT,GAFAF,GAAS,EAELxG,EAAKnB,EAAS,WAAY,CAC5B,IACE2H,EAAStJ,EAAMoJ,QAAQC,EAAS1H,GAChC,MAAOgE,IAET4D,EAAWzG,EAAKnB,EAAS,mBAAoB,CAAC2H,IAGhD,OAAOA,GAAUC,IAElB3L,KAAKmC,MACR,WACE,IAAI0J,EAAoBC,EAAqBC,EAAoBC,EAAmBC,EAAoBC,EAAmBhB,EAAclH,EAASmI,EAAe1I,EAASQ,EAASiC,EACnLzC,EAAUrB,EAAMqB,QAASO,EAAU5B,EAAM4B,QAASC,EAAU7B,EAAM6B,QAASiC,EAAiB9D,EAAM8D,eAAgBgF,EAAe9I,EAAM8I,aAEvI9I,EAAMgK,sBAAwB,SAAUjG,GAItC,GAFUhE,UAEEuI,SACV,OAAOxE,EAAeC,IAI1B/D,EAAMiK,cAAgB,SAAUlG,GAC9B,IAAIpC,EAEJ,GAAIoC,aAAaN,MAAO,CACtB,GAAIsG,EAAchG,GAChB,OAGFpC,EAAUoC,EAAEC,YAEZrC,EAAUoC,EAGZ,OAAI1C,EAAQM,EAAS3B,EAAMW,qBAClBmJ,EAAkBnI,GAChBN,EAAQM,EAAS3B,EAAMY,wBAA0BS,EAAQM,EAAS3B,EAAMS,oBAC1EmJ,EAAkBjI,GAChBN,EAAQM,EAAS3B,EAAMM,oBACzBuJ,EAAmBlI,QADrB,GAKT3B,EAAMkK,eAAiB,SAAUnG,GAC/B,IAAIpC,EAGJ,OAFAA,EAAUoC,aAAaN,MAAQM,EAAEC,OAASD,EAEtC1C,EAAQM,EAAS3B,EAAMW,qBAClBgJ,EAAmBhI,GACjBN,EAAQM,EAAS3B,EAAMY,wBAA0BS,EAAQM,EAAS3B,EAAMQ,qBAC1EiJ,EAAmB9H,GACjBN,EAAQM,EAAS3B,EAAMM,oBACzBoJ,EAAoB/H,QADtB,GAKTgI,EAAqB,SAA4BhI,GAC/C,IAAIwI,EAEJ,IAAIvI,EAAQD,EAAS,gBAYrB,OANmB,OAFnBwI,EAAcxI,EAAQ6H,aAAa,wBAGjC3H,EAAQF,EAAS,kBAAmBA,EAAQyI,WAC5CzI,EAAQyI,UAAYD,GAGtBxI,EAAQ2C,iBAAiB,QAASR,GAC3BjC,EAAQF,EAAS,gBAAgB,IAG1CmI,EAAoB,SAA2BnI,GAC7C,IAAI0I,EASJ,OANoB,OAFpBA,EAAezI,EAAQD,EAAS,sBAG9BA,EAAQyI,UAAYC,EACpBxI,EAAQF,EAAS,kBAAmB,OAGtCA,EAAQ2I,oBAAoB,QAASxG,GAC9BjC,EAAQF,EAAS,eAAgB,OAG1C+H,EAAsB,SAA6BX,GACjD,OAAOD,EAAaC,EAAM/I,EAAMQ,qBAAqBmC,QAAQ8G,IAG/DA,EAAqB,SAA4B9H,GAC/C,IAAIwI,EAEJ,IAAIvI,EAAQD,EAAS,gBAiBrB,OAXmB,OAFnBwI,EAAcxI,EAAQ6H,aAAa,wBAG7BnI,EAAQM,EAAS,WACnBE,EAAQF,EAAS,kBAAmBA,EAAQyI,WAC5CzI,EAAQyI,UAAYD,IAEpBtI,EAAQF,EAAS,kBAAmBA,EAAQjD,OAC5CiD,EAAQjD,MAAQyL,IAIpBxI,EAAQ2G,UAAW,EACZzG,EAAQF,EAAS,gBAAgB,IAG1CkI,EAAqB,SAA4Bd,GAC/C,OAAOD,EAAaC,EAAM/I,EAAMS,oBAAoBkC,QAAQiH,IAG9DA,EAAoB,SAA2BjI,GAC7C,IAAI0I,EAcJ,OAXoB,OAFpBA,EAAezI,EAAQD,EAAS,sBAG1BN,EAAQM,EAAS,UACnBA,EAAQyI,UAAYC,EAEpB1I,EAAQjD,MAAQ2L,EAGlBxI,EAAQF,EAAS,kBAAmB,OAGtCA,EAAQ2G,UAAW,EACZzG,EAAQF,EAAS,eAAgB,OAG1CoI,EAAgB,SAAuB9G,GACrC,IAAIlC,EAAKuB,EAET,OAA2E,OAA5D,OADfA,EAA8B,OAAvBvB,EAAMkC,EAAMO,QAAkBzC,EAAI,QAAK,GACxBuB,EAAI+C,kBAAkB,uBAAoB,KAEjEzH,KAAKmC,MACR,WACE,IAAI+D,EACJA,EAAiB9D,EAAM8D,eAEvB9D,EAAMuK,aAAe,SAAUxG,GAC7B,IAAI7B,EAAWC,EAAW4G,EAAMyB,EAAapE,EAAYqE,EAIzD,GAHO1K,KACP0K,EADO1K,KACOyJ,aAAa,eAwB3B,OAlBApD,EAAOpG,EAAMoG,KAPNrG,MAQPoC,EAAYnC,EAAMmC,YAClBD,EAAYlC,EAAMkC,YAClB6G,EAAO/H,SAASoG,cAAc,QAC9BoD,EAAc,gCAAkCC,EAAS,qBAExC,MAAbvI,GAAkC,MAAbC,GAAsBnC,EAAM4H,cAAcxB,KACjEoE,GAAe,gBAAkBtI,EAAY,YAAcC,EAAY,sBAGzEqI,GAAe,0BACfzB,EAAK0B,OAAS,OACd1B,EAAK2B,OAAStE,EACd2C,EAAK/E,OApBEjE,KAoBYiE,OACnB+E,EAAKqB,UAAYI,EACjBzB,EAAK4B,MAAMC,QAAU,OACrB5J,SAAS6J,KAAKtD,YAAYwB,GAC1BA,EAAK9H,cAAc,mBAAmB6J,QAC/BhH,EAAeC,KAEvBnG,KAAKmC,MACR,WACE,IAAIkF,EACAnC,EACAlB,EACAgG,EACAmD,EACA1J,EACA6G,EACArG,EACAiC,EACA9B,EAAQ,GAAGA,MACfX,EAAUrB,EAAMqB,QAASO,EAAU5B,EAAM4B,QAASC,EAAU7B,EAAM6B,QAASiB,EAAO9C,EAAM8C,KAAMgB,EAAiB9D,EAAM8D,eAAgBmB,EAAOjF,EAAMiF,KAAM2C,EAAgB5H,EAAM4H,cAAeM,EAAmBlI,EAAMkI,iBAEtN6C,EAAW,SAAkBpJ,GAC3B,IAAIjD,EAEJ,OAAgB,OADhBA,EAAQiD,EAAQ6H,aAAa,iBACK,UAAV9K,GAG1BsB,EAAMgL,aAAe,SAAUjH,GAC7B,IAAIkH,EAAQrH,EAAM4C,EAAU7E,EAAS8I,EAAQvE,EAAKW,EAGlD,OAAKkE,EAFLpJ,EAAU5B,QAML+C,EAAKnB,EAAS,gBAKnBkF,EAAkBlF,EAAQ6H,aAAa,yBACvChD,EAAW7E,EAAQ6H,aAAa,cAAgB,SAE5CnI,EAAQM,EAAS3B,EAAMM,qBACzB2K,EAASrJ,EAAQD,EAAS,qBAC1B8I,EAAS7I,EAAQD,EAAS,iCAAmCA,EAAQ8I,OACrEvE,EAAMtE,EAAQD,EAAS,iCAAmCA,EAAQ6H,aAAa,WAAarD,SAASC,KAExE,QAAzBqE,EAAOnE,gBACTJ,EAAMA,EAAIwB,QAAQ,QAAS,KAGL,wBAApB/F,EAAQuJ,SACVtH,EAAO,IAAIuH,SAASxJ,GAEN,MAAVsJ,GACFrH,EAAKwH,OAAOH,EAAOjN,KAAMiN,EAAOvM,QAGlCkF,EAAOsE,EAAiBvG,EAASsJ,GAGnCpJ,EAAQF,EAAS,oBAAqB,MACtCE,EAAQF,EAAS,+BAAgC,MACjDE,EAAQF,EAAS,+BAAgC,OACxCN,EAAQM,EAAS3B,EAAME,sBAAwBmB,EAAQM,EAAS3B,EAAMK,sBAC/EoK,EAAS9I,EAAQ6H,aAAa,eAC9BtD,EAAMvE,EAAQ6H,aAAa,YAC3B5F,EAAOsE,EAAiBvG,EAASA,EAAQ6H,aAAa,kBAEtDiB,EAAS9I,EAAQ6H,aAAa,eAC9BtD,EAAMlG,EAAMoG,KAAKzE,GACjBiC,EAAOjC,EAAQ6H,aAAa,gBAG9BvE,EAAK,CACHoB,KAAMoE,GAAU,MAChBvE,IAAKA,EACLtC,KAAMA,EACN4C,SAAUA,EACVX,WAAY,SAAoBvD,EAAK4C,GACnC,OAAIpC,EAAKnB,EAAS,kBAAmB,CAACW,EAAK4C,IAClCpC,EAAKnB,EAAS,YAAa,CAACW,KAEnCQ,EAAKnB,EAAS,iBACP,IAGX8D,QAAS,WACP,IAAI4F,EAEJ,OADAA,EAAO,GAAKC,UAAUC,OAASvJ,EAAMpE,KAAK0N,UAAW,GAAK,GACnDxI,EAAKnB,EAAS,eAAgB0J,IAEvC1F,MAAO,WACL,IAAI0F,EAEJ,OADAA,EAAO,GAAKC,UAAUC,OAASvJ,EAAMpE,KAAK0N,UAAW,GAAK,GACnDxI,EAAKnB,EAAS,aAAc0J,IAErCzF,SAAU,WACR,IAAIyF,EAEJ,OADAA,EAAO,GAAKC,UAAUC,OAASvJ,EAAMpE,KAAK0N,UAAW,GAAK,GACnDxI,EAAKnB,EAAS,gBAAiB0J,IAExCzE,YAAagB,EAAc1B,GAC3BW,gBAAoC,MAAnBA,GAA+C,UAApBA,IAEvC/C,EAAeC,KAtEpBjB,EAAKnB,EAAS,iBACP,KAwEX3B,EAAMwL,sBAAwB,SAAUzH,GACtC,IAAYgF,EAIZ,GAHShJ,KACTgJ,EADShJ,KACKgJ,KAed,OAhBShJ,KAOE/B,MACT6D,EAAQkH,EAAM,oBAAqB,CACjC/K,KATK+B,KASQ/B,KACbU,MAVKqB,KAUSrB,QAIlBmD,EAAQkH,EAAM,4BAdLhJ,KAcyC0L,gBAClD5J,EAAQkH,EAAM,+BAfLhJ,KAe4CyJ,aAAa,eAC3D3H,EAAQkH,EAAM,+BAhBZhJ,KAgBmDyJ,aAAa,gBAG3ExJ,EAAM0L,0BAA4B,SAAU3H,GAC1C,IAAIH,EAAM+H,EAAyClB,EAQnD,GAPO1K,KACP0K,GADO1K,KACQyJ,aAAa,gBAAkB,OAAOlD,cACrD1C,EAFO7D,KAEKyJ,aAAa,eAEzBmC,GADY5H,EAAE6H,SAAW7H,EAAE8H,UACsB,QAAXpB,IAAqB7G,EACxB,MAAZG,EAAEkH,QAA+B,IAAblH,EAAEkH,QAEjBU,EAC1B,OAAO5H,EAAEG,6BAGZtG,KAAKmC,MACR,WACE,IAAI+B,EAAGO,EAAgB8B,EAAU+F,EAAgBD,EAAenH,EAAM0I,EAAuB5J,EAASuH,EAAea,EAAuBO,EAAcS,EAAclK,EAAc4K,EAA2BjJ,EAGjN,GAFAK,EAAO9C,EAAM8C,KAAMqB,EAAWnE,EAAMmE,SAAUvC,EAAU5B,EAAM4B,QAASE,EAAI9B,EAAM8B,EAAGW,EAAoBzC,EAAMyC,kBAAmBJ,EAAiBrC,EAAMqC,eAAgBvB,EAAed,EAAMc,aAAcmJ,EAAgBjK,EAAMiK,cAAeC,EAAiBlK,EAAMkK,eAAgBF,EAAwBhK,EAAMgK,sBAAuBb,EAAgBnJ,EAAMmJ,cAAeuC,EAA4B1L,EAAM0L,0BAA2BV,EAAehL,EAAMgL,aAAcQ,EAAwBxL,EAAMwL,sBAAuBjB,EAAevK,EAAMuK,aAErgB,qBAAXuB,QAAqC,OAAXA,QAAkC,MAAfA,OAAO7G,KAAc,CAC3E,GAAI6G,OAAOC,MACT,MAAM,IAAIC,MAAM,kEAGlBF,OAAOC,MAAQ/L,EACf8L,OAAOG,eAAc,SAAU/G,EAASgH,EAAiB5J,GACvD,IAAK4C,EAAQ0B,YACX,OAAOvE,EAAeC,MAK5BtC,EAAMN,MAAQ,WACZ,GAAIsD,OAAOmJ,cACT,MAAM,IAAIH,MAAM,sCAiDlB,OA9CAhJ,OAAOsB,iBAAiB,YAAY,WAMlC,OALAxC,EAAE9B,EAAMS,oBAAoBkC,SAAQ,SAAUsG,GAC5C,GAAIrH,EAAQqH,EAAI,gBACd,OAAOgB,EAAchB,MAGlBnH,EAAE9B,EAAMW,qBAAqBgC,SAAQ,SAAUsG,GACpD,GAAIrH,EAAQqH,EAAI,gBACd,OAAOgB,EAAchB,SAI3B9E,EAASnD,SAAUhB,EAAMW,oBAAqB,gBAAiBsJ,GAC/D9F,EAASnD,SAAUhB,EAAMW,oBAAqB,eAAgBsJ,GAC9D9F,EAASnD,SAAUhB,EAAMY,sBAAuB,gBAAiBqJ,GACjE9F,EAASnD,SAAUhB,EAAMY,sBAAuB,eAAgBqJ,GAChE9F,EAASnD,SAAUhB,EAAMC,kBAAmB,QAASyL,GACrDvH,EAASnD,SAAUhB,EAAMC,kBAAmB,QAAS+J,GACrD7F,EAASnD,SAAUhB,EAAMC,kBAAmB,QAASkJ,GACrDhF,EAASnD,SAAUhB,EAAMC,kBAAmB,QAASiK,GACrD/F,EAASnD,SAAUhB,EAAMC,kBAAmB,QAAS+K,GACrD7G,EAASnD,SAAUhB,EAAMC,kBAAmB,QAASsK,GACrDpG,EAASnD,SAAUhB,EAAME,oBAAqB,QAASwL,GACvDvH,EAASnD,SAAUhB,EAAME,oBAAqB,QAAS8J,GACvD7F,EAASnD,SAAUhB,EAAME,oBAAqB,QAASiJ,GACvDhF,EAASnD,SAAUhB,EAAME,oBAAqB,QAASgK,GACvD/F,EAASnD,SAAUhB,EAAME,oBAAqB,QAAS8K,GACvD7G,EAASnD,SAAUhB,EAAMK,oBAAqB,SAAU2J,GACxD7F,EAASnD,SAAUhB,EAAMK,oBAAqB,SAAU8I,GACxDhF,EAASnD,SAAUhB,EAAMK,oBAAqB,SAAU2K,GACxD7G,EAASnD,SAAUhB,EAAMM,mBAAoB,SAAU0J,GACvD7F,EAASnD,SAAUhB,EAAMM,mBAAoB,SAAU6I,GACvDhF,EAASnD,SAAUhB,EAAMM,mBAAoB,SAAU0K,GACvD7G,EAASnD,SAAUhB,EAAMM,mBAAoB,UAAU,SAAUyD,GAC/D,OAAOqI,YAAW,WAChB,OAAOlC,EAAenG,KACrB,OAELI,EAASnD,SAAUhB,EAAMM,mBAAoB,YAAa4J,GAC1D/F,EAASnD,SAAUhB,EAAMM,mBAAoB,gBAAiB2J,GAC9D9F,EAASnD,SAAUhB,EAAMO,uBAAwB,QAASmL,GAC1DvH,EAASnD,SAAUhB,EAAMO,uBAAwB,QAASyJ,GAC1D7F,EAASnD,SAAUhB,EAAMO,uBAAwB,QAAS4I,GAC1DhF,EAASnD,SAAUhB,EAAMO,uBAAwB,QAASiL,GAC1DxK,SAASsD,iBAAiB,mBAAoB7B,GAC9CzB,SAASsD,iBAAiB,mBAAoBxD,GACvCkC,OAAOmJ,eAAgB,GAG5BnJ,OAAOhD,QAAUA,GAAS8C,EAAK9B,SAAU,yBAC3ChB,EAAMN,SAEP9B,KAAKmC,QACPnC,KAAKmC,MAEgE,WAArBJ,EAAQnC,IAAyBA,EAAOD,QACzFC,EAAOD,QAAUyC,OAEL,2BAAZ,KAAY,oCAEbpC,KAAKmC,Q,kCClyBRvC,EAAOD,QAAU,SAAUC,GAsBzB,OArBKA,EAAO6O,kBACV7O,EAAO8O,UAAY,aAEnB9O,EAAO+O,MAAQ,GAEV/O,EAAOgP,WAAUhP,EAAOgP,SAAW,IACxCrO,OAAOC,eAAeZ,EAAQ,SAAU,CACtCa,YAAY,EACZC,IAAK,WACH,OAAOd,EAAOE,KAGlBS,OAAOC,eAAeZ,EAAQ,KAAM,CAClCa,YAAY,EACZC,IAAK,WACH,OAAOd,EAAOC,KAGlBD,EAAO6O,gBAAkB,GAGpB7O,I,gBCtBT,UAEmBiP,EAFnB,cAAoW,OAAtO9M,EAArD,oBAAXnB,QAAoD,kBAApBA,OAAOoB,SAAmC,SAAiBC,GAAO,cAAcA,GAA2B,SAAiBA,GAAO,OAAOA,GAAyB,oBAAXrB,QAAyBqB,EAAIC,cAAgBtB,QAAUqB,IAAQrB,OAAOa,UAAY,gBAAkBQ,IAAyBA,GAEhW4M,EAEV,SAAUlP,GACjB,aAQA,IAAImP,EANJ,SAA8BC,EAAInP,GAChC,OAEGmP,EAFInP,EAAS,CACdD,QAAS,IACGC,EAAOD,SAAUC,EAAOD,QAGzBqP,EAAqB,SAAUpP,EAAQD,GAGhDC,EAAOD,QAER,SAAUsP,GACX,IAAIC,EAAU,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAE1F,SAASC,EAASC,EAAGC,GACnB,IAAIC,EAAIF,EAAE,GACNG,EAAIH,EAAE,GACNlP,EAAIkP,EAAE,GACNjP,EAAIiP,EAAE,GAQVG,IADAA,KADArP,IADAA,KADAC,IADAA,KADAmP,IADAA,IAAMC,EAAIrP,GAAKqP,EAAIpP,GAAKkP,EAAE,GAAK,UAAY,IACjC,EAAIC,IAAM,IAAMC,EAAI,GACpBA,GAAKD,EAAIpP,GAAKmP,EAAE,GAAK,UAAY,IACjC,GAAKlP,IAAM,IAAMmP,EAAI,GACrBA,GAAKnP,EAAIoP,GAAKF,EAAE,GAAK,UAAY,IACjC,GAAKnP,IAAM,IAAMC,EAAI,GACrBA,GAAKD,EAAIoP,GAAKD,EAAE,GAAK,WAAa,IAClC,GAAKE,IAAM,IAAMrP,EAAI,EAQ/BqP,IADAA,KADArP,IADAA,KADAC,IADAA,KADAmP,IADAA,IAAMC,EAAIrP,GAAKqP,EAAIpP,GAAKkP,EAAE,GAAK,UAAY,IACjC,EAAIC,IAAM,IAAMC,EAAI,GACpBA,GAAKD,EAAIpP,GAAKmP,EAAE,GAAK,WAAa,IAClC,GAAKlP,IAAM,IAAMmP,EAAI,GACrBA,GAAKnP,EAAIoP,GAAKF,EAAE,GAAK,WAAa,IAClC,GAAKnP,IAAM,IAAMC,EAAI,GACrBA,GAAKD,EAAIoP,GAAKD,EAAE,GAAK,SAAW,IAChC,GAAKE,IAAM,IAAMrP,EAAI,EAQ/BqP,IADAA,KADArP,IADAA,KADAC,IADAA,KADAmP,IADAA,IAAMC,EAAIrP,GAAKqP,EAAIpP,GAAKkP,EAAE,GAAK,WAAa,IAClC,EAAIC,IAAM,IAAMC,EAAI,GACpBA,GAAKD,EAAIpP,GAAKmP,EAAE,GAAK,WAAa,IAClC,GAAKlP,IAAM,IAAMmP,EAAI,GACrBA,GAAKnP,EAAIoP,GAAKF,EAAE,IAAM,MAAQ,IAC9B,GAAKnP,IAAM,IAAMC,EAAI,GACrBA,GAAKD,EAAIoP,GAAKD,EAAE,IAAM,WAAa,IACnC,GAAKE,IAAM,IAAMrP,EAAI,EAQ/BqP,IADAA,KADArP,IADAA,KADAC,IADAA,KADAmP,IADAA,IAAMC,EAAIrP,GAAKqP,EAAIpP,GAAKkP,EAAE,IAAM,WAAa,IACnC,EAAIC,IAAM,IAAMC,EAAI,GACpBA,GAAKD,EAAIpP,GAAKmP,EAAE,IAAM,SAAW,IACjC,GAAKlP,IAAM,IAAMmP,EAAI,GACrBA,GAAKnP,EAAIoP,GAAKF,EAAE,IAAM,WAAa,IACnC,GAAKnP,IAAM,IAAMC,EAAI,GACrBA,GAAKD,EAAIoP,GAAKD,EAAE,IAAM,WAAa,IACnC,GAAKE,IAAM,IAAMrP,EAAI,EAQ/BqP,IADAA,KADArP,IADAA,KADAC,IADAA,KADAmP,IADAA,IAAMC,EAAIpP,EAAID,GAAKC,GAAKkP,EAAE,GAAK,UAAY,IACjC,EAAIC,IAAM,IAAMC,EAAI,GACpBrP,EAAIqP,GAAKrP,GAAKmP,EAAE,GAAK,WAAa,IAClC,EAAIlP,IAAM,IAAMmP,EAAI,GACpBC,EAAID,GAAKC,GAAKF,EAAE,IAAM,UAAY,IAClC,GAAKnP,IAAM,IAAMC,EAAI,GACrBmP,EAAInP,GAAKmP,GAAKD,EAAE,GAAK,UAAY,IACjC,GAAKE,IAAM,IAAMrP,EAAI,EAQ/BqP,IADAA,KADArP,IADAA,KADAC,IADAA,KADAmP,IADAA,IAAMC,EAAIpP,EAAID,GAAKC,GAAKkP,EAAE,GAAK,UAAY,IACjC,EAAIC,IAAM,IAAMC,EAAI,GACpBrP,EAAIqP,GAAKrP,GAAKmP,EAAE,IAAM,SAAW,IACjC,EAAIlP,IAAM,IAAMmP,EAAI,GACpBC,EAAID,GAAKC,GAAKF,EAAE,IAAM,UAAY,IAClC,GAAKnP,IAAM,IAAMC,EAAI,GACrBmP,EAAInP,GAAKmP,GAAKD,EAAE,GAAK,UAAY,IACjC,GAAKE,IAAM,IAAMrP,EAAI,EAQ/BqP,IADAA,KADArP,IADAA,KADAC,IADAA,KADAmP,IADAA,IAAMC,EAAIpP,EAAID,GAAKC,GAAKkP,EAAE,GAAK,UAAY,IACjC,EAAIC,IAAM,IAAMC,EAAI,GACpBrP,EAAIqP,GAAKrP,GAAKmP,EAAE,IAAM,WAAa,IACnC,EAAIlP,IAAM,IAAMmP,EAAI,GACpBC,EAAID,GAAKC,GAAKF,EAAE,GAAK,UAAY,IACjC,GAAKnP,IAAM,IAAMC,EAAI,GACrBmP,EAAInP,GAAKmP,GAAKD,EAAE,GAAK,WAAa,IAClC,GAAKE,IAAM,IAAMrP,EAAI,EAQ/BqP,IADAA,KADArP,IADAA,KADAC,IADAA,KADAmP,IADAA,IAAMC,EAAIpP,EAAID,GAAKC,GAAKkP,EAAE,IAAM,WAAa,IACnC,EAAIC,IAAM,IAAMC,EAAI,GACpBrP,EAAIqP,GAAKrP,GAAKmP,EAAE,GAAK,SAAW,IAChC,EAAIlP,IAAM,IAAMmP,EAAI,GACpBC,EAAID,GAAKC,GAAKF,EAAE,GAAK,WAAa,IAClC,GAAKnP,IAAM,IAAMC,EAAI,GACrBmP,EAAInP,GAAKmP,GAAKD,EAAE,IAAM,WAAa,IACnC,GAAKE,IAAM,IAAMrP,EAAI,EAQ/BqP,IADAA,KADArP,IADAA,KADAC,IADAA,KADAmP,IADAA,IAAMC,EAAIrP,EAAIC,GAAKkP,EAAE,GAAK,OAAS,IACzB,EAAIC,IAAM,IAAMC,EAAI,GACpBA,EAAIrP,GAAKmP,EAAE,GAAK,WAAa,IAC7B,GAAKlP,IAAM,IAAMmP,EAAI,GACrBA,EAAIC,GAAKF,EAAE,IAAM,WAAa,IAC9B,GAAKnP,IAAM,IAAMC,EAAI,GACrBA,EAAImP,GAAKD,EAAE,IAAM,SAAW,IAC5B,GAAKE,IAAM,GAAKrP,EAAI,EAQ9BqP,IADAA,KADArP,IADAA,KADAC,IADAA,KADAmP,IADAA,IAAMC,EAAIrP,EAAIC,GAAKkP,EAAE,GAAK,WAAa,IAC7B,EAAIC,IAAM,IAAMC,EAAI,GACpBA,EAAIrP,GAAKmP,EAAE,GAAK,WAAa,IAC7B,GAAKlP,IAAM,IAAMmP,EAAI,GACrBA,EAAIC,GAAKF,EAAE,GAAK,UAAY,IAC5B,GAAKnP,IAAM,IAAMC,EAAI,GACrBA,EAAImP,GAAKD,EAAE,IAAM,WAAa,IAC9B,GAAKE,IAAM,GAAKrP,EAAI,EAQ9BqP,IADAA,KADArP,IADAA,KADAC,IADAA,KADAmP,IADAA,IAAMC,EAAIrP,EAAIC,GAAKkP,EAAE,IAAM,UAAY,IAC7B,EAAIC,IAAM,IAAMC,EAAI,GACpBA,EAAIrP,GAAKmP,EAAE,GAAK,UAAY,IAC5B,GAAKlP,IAAM,IAAMmP,EAAI,GACrBA,EAAIC,GAAKF,EAAE,GAAK,UAAY,IAC5B,GAAKnP,IAAM,IAAMC,EAAI,GACrBA,EAAImP,GAAKD,EAAE,GAAK,SAAW,IAC3B,GAAKE,IAAM,GAAKrP,EAAI,EAQ9BqP,IADAA,KADArP,IADAA,KADAC,IADAA,KADAmP,IADAA,IAAMC,EAAIrP,EAAIC,GAAKkP,EAAE,GAAK,UAAY,IAC5B,EAAIC,IAAM,IAAMC,EAAI,GACpBA,EAAIrP,GAAKmP,EAAE,IAAM,UAAY,IAC7B,GAAKlP,IAAM,IAAMmP,EAAI,GACrBA,EAAIC,GAAKF,EAAE,IAAM,UAAY,IAC7B,GAAKnP,IAAM,IAAMC,EAAI,GACrBA,EAAImP,GAAKD,EAAE,GAAK,UAAY,IAC5B,GAAKE,IAAM,GAAKrP,EAAI,EAQ9BqP,IADAA,KAHApP,IADAA,IAAMoP,IADND,IADAA,IAAMpP,GAAKqP,GAAKpP,IAAMkP,EAAE,GAAK,UAAY,IAC/B,EAAIC,IAAM,IAAMC,EAAI,IACdrP,IAAMmP,EAAE,GAAK,WAAa,IAChC,GAAKlP,IAAM,IAAMmP,EAAI,KAE/BpP,IADAA,IAAMoP,GAAKnP,GAAKoP,IAAMF,EAAE,IAAM,WAAa,IACjC,GAAKnP,IAAM,IAAMC,EAAI,IACfmP,IAAMD,EAAE,GAAK,SAAW,IAC9B,GAAKE,IAAM,IAAMrP,EAAI,EAQ/BqP,IADAA,KAHApP,IADAA,IAAMoP,IADND,IADAA,IAAMpP,GAAKqP,GAAKpP,IAAMkP,EAAE,IAAM,WAAa,IACjC,EAAIC,IAAM,IAAMC,EAAI,IACdrP,IAAMmP,EAAE,GAAK,WAAa,IAChC,GAAKlP,IAAM,IAAMmP,EAAI,KAE/BpP,IADAA,IAAMoP,GAAKnP,GAAKoP,IAAMF,EAAE,IAAM,QAAU,IAC9B,GAAKnP,IAAM,IAAMC,EAAI,IACfmP,IAAMD,EAAE,GAAK,WAAa,IAChC,GAAKE,IAAM,IAAMrP,EAAI,EAQ/BqP,IADAA,KAHApP,IADAA,IAAMoP,IADND,IADAA,IAAMpP,GAAKqP,GAAKpP,IAAMkP,EAAE,GAAK,WAAa,IAChC,EAAIC,IAAM,IAAMC,EAAI,IACdrP,IAAMmP,EAAE,IAAM,SAAW,IAC/B,GAAKlP,IAAM,IAAMmP,EAAI,KAE/BpP,IADAA,IAAMoP,GAAKnP,GAAKoP,IAAMF,EAAE,GAAK,WAAa,IAChC,GAAKnP,IAAM,IAAMC,EAAI,IACfmP,IAAMD,EAAE,IAAM,WAAa,IACjC,GAAKE,IAAM,IAAMrP,EAAI,EAQ/BqP,IADAA,KAHApP,IADAA,IAAMoP,IADND,IADAA,IAAMpP,GAAKqP,GAAKpP,IAAMkP,EAAE,GAAK,UAAY,IAC/B,EAAIC,IAAM,IAAMC,EAAI,IACdrP,IAAMmP,EAAE,IAAM,WAAa,IACjC,GAAKlP,IAAM,IAAMmP,EAAI,KAE/BpP,IADAA,IAAMoP,GAAKnP,GAAKoP,IAAMF,EAAE,GAAK,UAAY,IAC/B,GAAKnP,IAAM,IAAMC,EAAI,IACfmP,IAAMD,EAAE,GAAK,UAAY,IAC/B,GAAKE,IAAM,IAAMrP,EAAI,EAC/BkP,EAAE,GAAKE,EAAIF,EAAE,GAAK,EAClBA,EAAE,GAAKG,EAAIH,EAAE,GAAK,EAClBA,EAAE,GAAKlP,EAAIkP,EAAE,GAAK,EAClBA,EAAE,GAAKjP,EAAIiP,EAAE,GAAK,EAGpB,SAASI,EAAO5N,GACd,IACI/B,EADA4P,EAAU,GAGd,IAAK5P,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvB4P,EAAQ5P,GAAK,GAAK+B,EAAE8N,WAAW7P,IAAM+B,EAAE8N,WAAW7P,EAAI,IAAM,IAAM+B,EAAE8N,WAAW7P,EAAI,IAAM,KAAO+B,EAAE8N,WAAW7P,EAAI,IAAM,IAGzH,OAAO4P,EAGT,SAASE,EAAaL,GACpB,IACIzP,EADA4P,EAAU,GAGd,IAAK5P,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvB4P,EAAQ5P,GAAK,GAAKyP,EAAEzP,IAAMyP,EAAEzP,EAAI,IAAM,IAAMyP,EAAEzP,EAAI,IAAM,KAAOyP,EAAEzP,EAAI,IAAM,IAG7E,OAAO4P,EAGT,SAASG,EAAKhO,GACZ,IAEI/B,EACA8N,EACAkC,EACAC,EACAC,EACAC,EAPA1O,EAAIM,EAAE+L,OACNsC,EAAQ,CAAC,YAAa,WAAY,WAAY,WAQlD,IAAKpQ,EAAI,GAAIA,GAAKyB,EAAGzB,GAAK,GACxBsP,EAASc,EAAOT,EAAO5N,EAAEsO,UAAUrQ,EAAI,GAAIA,KAO7C,IAHA8N,GADA/L,EAAIA,EAAEsO,UAAUrQ,EAAI,KACT8N,OACXkC,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAEhDhQ,EAAI,EAAGA,EAAI8N,EAAQ9N,GAAK,EAC3BgQ,EAAKhQ,GAAK,IAAM+B,EAAE8N,WAAW7P,KAAOA,EAAI,GAAK,GAK/C,GAFAgQ,EAAKhQ,GAAK,IAAM,MAAQA,EAAI,GAAK,GAE7BA,EAAI,GAGN,IAFAsP,EAASc,EAAOJ,GAEXhQ,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBgQ,EAAKhQ,GAAK,EAWd,OANAiQ,GADAA,EAAU,EAAJxO,GACI6O,SAAS,IAAI9G,MAAM,kBAC7B0G,EAAKK,SAASN,EAAI,GAAI,IACtBE,EAAKI,SAASN,EAAI,GAAI,KAAO,EAC7BD,EAAK,IAAME,EACXF,EAAK,IAAMG,EACXb,EAASc,EAAOJ,GACTI,EA6CT,SAASI,EAAK/O,GACZ,IACIgP,EADA1O,EAAI,GAGR,IAAK0O,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACtB1O,GAAKsN,EAAQ5N,GAAS,EAAJgP,EAAQ,EAAI,IAAMpB,EAAQ5N,GAAS,EAAJgP,EAAQ,IAG3D,OAAO1O,EAGT,SAAS2O,EAAInB,GACX,IAAIvP,EAEJ,IAAKA,EAAI,EAAGA,EAAIuP,EAAEzB,OAAQ9N,GAAK,EAC7BuP,EAAEvP,GAAKwQ,EAAKjB,EAAEvP,IAGhB,OAAOuP,EAAEnE,KAAK,IA4ChB,SAASuF,EAAOC,GAKd,MAJI,kBAAkBC,KAAKD,KACzBA,EAAME,SAAS3F,mBAAmByF,KAG7BA,EA2BT,SAASG,EAAkBL,GACzB,IAEInB,EAFAyB,EAAQ,GACRlD,EAAS4C,EAAI5C,OAGjB,IAAKyB,EAAI,EAAGA,EAAIzB,EAAS,EAAGyB,GAAK,EAC/ByB,EAAMhG,KAAKuF,SAASG,EAAIO,OAAO1B,EAAG,GAAI,KAGxC,OAAO2B,OAAOC,aAAaC,MAAMF,OAAQF,GAG3C,SAASK,IACP/O,KAAKgP,QA+KP,OArQIZ,EAAIX,EAAK,UAEc,qBAAhBwB,aAAgCA,YAAY3P,UAAU2C,OAC/D,WACE,SAASiN,EAAMC,EAAK3D,GAGlB,OAFA2D,EAAY,EAANA,GAAW,GAEP,EACD5J,KAAK6J,IAAID,EAAM3D,EAAQ,GAGzBjG,KAAK8J,IAAIF,EAAK3D,GAGvByD,YAAY3P,UAAU2C,MAAQ,SAAUqN,EAAMC,GAC5C,IAGIC,EACAvL,EACAwL,EACAC,EANAlE,EAASxL,KAAK2P,WACdC,EAAQV,EAAMI,EAAM9D,GACpBqE,EAAMrE,EAUV,OAJI+D,IAAOzC,IACT+C,EAAMX,EAAMK,EAAI/D,IAGdoE,EAAQC,EACH,IAAIZ,YAAY,IAGzBO,EAAMK,EAAMD,EACZ3L,EAAS,IAAIgL,YAAYO,GACzBC,EAAc,IAAIK,WAAW7L,GAC7ByL,EAAc,IAAII,WAAW9P,KAAM4P,EAAOJ,GAC1CC,EAAYM,IAAIL,GACTzL,IAjCX,GAsFF8K,EAASzP,UAAU+L,OAAS,SAAUiD,GAEpC,OADAtO,KAAKgQ,aAAa3B,EAAOC,IAClBtO,MAGT+O,EAASzP,UAAU0Q,aAAe,SAAUC,GAC1CjQ,KAAKkQ,OAASD,EACdjQ,KAAKmQ,SAAWF,EAASzE,OACzB,IACI9N,EADA8N,EAASxL,KAAKkQ,MAAM1E,OAGxB,IAAK9N,EAAI,GAAIA,GAAK8N,EAAQ9N,GAAK,GAC7BsP,EAAShN,KAAKoQ,MAAO/C,EAAOrN,KAAKkQ,MAAMnC,UAAUrQ,EAAI,GAAIA,KAI3D,OADAsC,KAAKkQ,MAAQlQ,KAAKkQ,MAAMnC,UAAUrQ,EAAI,IAC/BsC,MAGT+O,EAASzP,UAAUuQ,IAAM,SAAUQ,GACjC,IAEI3S,EAEA4S,EAJAC,EAAOvQ,KAAKkQ,MACZ1E,EAAS+E,EAAK/E,OAEdkC,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAGzD,IAAKhQ,EAAI,EAAGA,EAAI8N,EAAQ9N,GAAK,EAC3BgQ,EAAKhQ,GAAK,IAAM6S,EAAKhD,WAAW7P,KAAOA,EAAI,GAAK,GAYlD,OATAsC,KAAKwQ,QAAQ9C,EAAMlC,GAEnB8E,EAAMlC,EAAIpO,KAAKoQ,OAEXC,IACFC,EAAM7B,EAAkB6B,IAG1BtQ,KAAKgP,QACEsB,GAGTvB,EAASzP,UAAU0P,MAAQ,WAIzB,OAHAhP,KAAKkQ,MAAQ,GACblQ,KAAKmQ,QAAU,EACfnQ,KAAKoQ,MAAQ,CAAC,YAAa,WAAY,WAAY,WAC5CpQ,MAGT+O,EAASzP,UAAUmR,SAAW,WAC5B,MAAO,CACLF,KAAMvQ,KAAKkQ,MACX1E,OAAQxL,KAAKmQ,QACbO,KAAM1Q,KAAKoQ,QAIfrB,EAASzP,UAAUqR,SAAW,SAAU7C,GAItC,OAHA9N,KAAKkQ,MAAQpC,EAAMyC,KACnBvQ,KAAKmQ,QAAUrC,EAAMtC,OACrBxL,KAAKoQ,MAAQtC,EAAM4C,KACZ1Q,MAGT+O,EAASzP,UAAUsR,QAAU,kBACpB5Q,KAAKoQ,aACLpQ,KAAKkQ,aACLlQ,KAAKmQ,SAGdpB,EAASzP,UAAUkR,QAAU,SAAU9C,EAAMlC,GAC3C,IACImC,EACAC,EACAC,EAHAnQ,EAAI8N,EAMR,GAFAkC,EAAKhQ,GAAK,IAAM,MAAQA,EAAI,GAAK,GAE7BA,EAAI,GAGN,IAFAsP,EAAShN,KAAKoQ,MAAO1C,GAEhBhQ,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBgQ,EAAKhQ,GAAK,EAKdiQ,GADAA,EAAqB,EAAf3N,KAAKmQ,SACDnC,SAAS,IAAI9G,MAAM,kBAC7B0G,EAAKK,SAASN,EAAI,GAAI,IACtBE,EAAKI,SAASN,EAAI,GAAI,KAAO,EAC7BD,EAAK,IAAME,EACXF,EAAK,IAAMG,EACXb,EAAShN,KAAKoQ,MAAO1C,IAGvBqB,EAAS2B,KAAO,SAAUpC,EAAK+B,GAC7B,OAAOtB,EAAS8B,WAAWxC,EAAOC,GAAM+B,IAG1CtB,EAAS8B,WAAa,SAAU1P,EAASkP,GACvC,IACIC,EAAMlC,EADCX,EAAKtM,IAEhB,OAAOkP,EAAM5B,EAAkB6B,GAAOA,GAGxCvB,EAASE,YAAc,WACrBjP,KAAKgP,SAGPD,EAASE,YAAY3P,UAAU+L,OAAS,SAAUyF,GAChD,IAEIpT,EAtI2BqT,EAAOC,EAAQC,EAC1CtN,EAmIA4M,GApI2BQ,EAoII/Q,KAAKkQ,MAAMgB,OApIRF,EAoIgBF,EApIRG,GAoIa,GAnIvDtN,EAAS,IAAImM,WAAWiB,EAAMpB,WAAaqB,EAAOrB,aAC/CI,IAAI,IAAID,WAAWiB,IAC1BpN,EAAOoM,IAAI,IAAID,WAAWkB,GAASD,EAAMpB,YAClCsB,EAAmBtN,EAASA,EAAOuN,QAiItC1F,EAAS+E,EAAK/E,OAIlB,IAFAxL,KAAKmQ,SAAWW,EAAInB,WAEfjS,EAAI,GAAIA,GAAK8N,EAAQ9N,GAAK,GAC7BsP,EAAShN,KAAKoQ,MAAO5C,EAAa+C,EAAKY,SAASzT,EAAI,GAAIA,KAI1D,OADAsC,KAAKkQ,MAAQxS,EAAI,GAAK8N,EAAS,IAAIsE,WAAWS,EAAKW,OAAOjP,MAAMvE,EAAI,KAAO,IAAIoS,WAAW,GACnF9P,MAGT+O,EAASE,YAAY3P,UAAUuQ,IAAM,SAAUQ,GAC7C,IAGI3S,EACA4S,EAJAC,EAAOvQ,KAAKkQ,MACZ1E,EAAS+E,EAAK/E,OACdkC,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAIzD,IAAKhQ,EAAI,EAAGA,EAAI8N,EAAQ9N,GAAK,EAC3BgQ,EAAKhQ,GAAK,IAAM6S,EAAK7S,KAAOA,EAAI,GAAK,GAYvC,OATAsC,KAAKwQ,QAAQ9C,EAAMlC,GAEnB8E,EAAMlC,EAAIpO,KAAKoQ,OAEXC,IACFC,EAAM7B,EAAkB6B,IAG1BtQ,KAAKgP,QACEsB,GAGTvB,EAASE,YAAY3P,UAAU0P,MAAQ,WAIrC,OAHAhP,KAAKkQ,MAAQ,IAAIJ,WAAW,GAC5B9P,KAAKmQ,QAAU,EACfnQ,KAAKoQ,MAAQ,CAAC,YAAa,WAAY,WAAY,WAC5CpQ,MAGT+O,EAASE,YAAY3P,UAAUmR,SAAW,WACxC,IApL2BF,EAoLvBzC,EAAQiB,EAASzP,UAAUmR,SAAS5S,KAAKmC,MAE7C,OADA8N,EAAMyC,MArLqBA,EAqLMzC,EAAMyC,KApLhC3B,OAAOC,aAAaC,MAAM,KAAM,IAAIgB,WAAWS,KAqL/CzC,GAGTiB,EAASE,YAAY3P,UAAUqR,SAAW,SAAU7C,GAElD,OADAA,EAAMyC,KAvMR,SAA6BjC,EAAK2C,GAChC,IAGIvT,EAHA8N,EAAS8C,EAAI9C,OACb+E,EAAO,IAAItB,YAAYzD,GACvBsF,EAAM,IAAIhB,WAAWS,GAGzB,IAAK7S,EAAI,EAAGA,EAAI8N,EAAQ9N,GAAK,EAC3BoT,EAAIpT,GAAK4Q,EAAIf,WAAW7P,GAG1B,OAAOuT,EAAmBH,EAAMP,EA6LnBa,CAAoBtD,EAAMyC,MAAM,GACtCxB,EAASzP,UAAUqR,SAAS9S,KAAKmC,KAAM8N,IAGhDiB,EAASE,YAAY3P,UAAUsR,QAAU7B,EAASzP,UAAUsR,QAC5D7B,EAASE,YAAY3P,UAAUkR,QAAUzB,EAASzP,UAAUkR,QAE5DzB,EAASE,YAAYyB,KAAO,SAAUI,EAAKT,GACzC,IACIC,EAAMlC,EAhUZ,SAAoBjB,GAClB,IAEIzP,EACA8N,EACAkC,EACAC,EACAC,EACAC,EAPA1O,EAAIgO,EAAE3B,OACNsC,EAAQ,CAAC,YAAa,WAAY,WAAY,WAQlD,IAAKpQ,EAAI,GAAIA,GAAKyB,EAAGzB,GAAK,GACxBsP,EAASc,EAAON,EAAaL,EAAEgE,SAASzT,EAAI,GAAIA,KAOlD,IAJAyP,EAAIzP,EAAI,GAAKyB,EAAIgO,EAAEgE,SAASzT,EAAI,IAAM,IAAIoS,WAAW,GACrDtE,EAAS2B,EAAE3B,OACXkC,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAEhDhQ,EAAI,EAAGA,EAAI8N,EAAQ9N,GAAK,EAC3BgQ,EAAKhQ,GAAK,IAAMyP,EAAEzP,KAAOA,EAAI,GAAK,GAKpC,GAFAgQ,EAAKhQ,GAAK,IAAM,MAAQA,EAAI,GAAK,GAE7BA,EAAI,GAGN,IAFAsP,EAASc,EAAOJ,GAEXhQ,EAAI,EAAGA,EAAI,GAAIA,GAAK,EACvBgQ,EAAKhQ,GAAK,EAWd,OANAiQ,GADAA,EAAU,EAAJxO,GACI6O,SAAS,IAAI9G,MAAM,kBAC7B0G,EAAKK,SAASN,EAAI,GAAI,IACtBE,EAAKI,SAASN,EAAI,GAAI,KAAO,EAC7BD,EAAK,IAAME,EACXF,EAAK,IAAMG,EACXb,EAASc,EAAOJ,GACTI,EAwRIuD,CAAW,IAAIvB,WAAWgB,KAErC,OAAOT,EAAM5B,EAAkB6B,GAAOA,GAGjCvB,EAphBYrC,MAwhBnB4E,EAAiB,SAAwBC,EAAUC,GACrD,KAAMD,aAAoBC,GACxB,MAAM,IAAIC,UAAU,sCAIpBC,EAAc,WAChB,SAASC,EAAiB1N,EAAQ2N,GAChC,IAAK,IAAIlU,EAAI,EAAGA,EAAIkU,EAAMpG,OAAQ9N,IAAK,CACrC,IAAImU,EAAaD,EAAMlU,GACvBmU,EAAWvT,WAAauT,EAAWvT,aAAc,EACjDuT,EAAWC,cAAe,EACtB,UAAWD,IAAYA,EAAWE,UAAW,GACjD3T,OAAOC,eAAe4F,EAAQ4N,EAAW5S,IAAK4S,IAIlD,OAAO,SAAUL,EAAaQ,EAAYC,GAGxC,OAFID,GAAYL,EAAiBH,EAAYlS,UAAW0S,GACpDC,GAAaN,EAAiBH,EAAaS,GACxCT,GAdO,GAkBdU,EAAYC,KAAK7S,UAAU2C,OAASkQ,KAAK7S,UAAU8S,UAAYD,KAAK7S,UAAU+S,YAE9EC,EAAe,WASjB,SAASA,EAAaC,GACpBjB,EAAetR,KAAMsS,GACrBtS,KAAKuS,KAAOA,EACZvS,KAAKwS,UAAY,QACjBxS,KAAKyS,WAAalN,KAAKmN,KAAK1S,KAAKuS,KAAKI,KAAO3S,KAAKwS,WAClDxS,KAAK4S,WAAa,EAkDpB,OA/DAlB,EAAYY,EAAc,KAAM,CAAC,CAC/BrT,IAAK,SACLN,MAAO,SAAgB4T,EAAM/I,GACZ,IAAI8I,EAAaC,GACvBvT,OAAOwK,OAYpBkI,EAAYY,EAAc,CAAC,CACzBrT,IAAK,SACLN,MAAO,SAAgB6K,GACrB,IAAIqJ,EAAQ7S,KAEZA,KAAKwJ,SAAWA,EAChBxJ,KAAK8S,UAAY,IAAInG,EAASsC,YAC9BjP,KAAK+S,WAAa,IAAIC,WACtBhT,KAAK+S,WAAWxO,iBAAiB,QAAQ,SAAUrB,GACjD,OAAO2P,EAAMI,kBAAkB/P,MAEjClD,KAAK+S,WAAWxO,iBAAiB,SAAS,SAAUrB,GAClD,OAAO2P,EAAMK,mBAAmBhQ,MAElClD,KAAKmT,kBAEN,CACDlU,IAAK,oBACLN,MAAO,SAA2BuE,GAGhC,GAFAlD,KAAK8S,UAAUzH,OAAOnI,EAAMe,OAAON,SAE9B3D,KAAKmT,gBAAiB,CACzB,IAAIC,EAAepT,KAAK8S,UAAUjD,KAAI,GAClCwD,EAAeC,KAAKF,GACxBpT,KAAKwJ,SAAS,KAAM6J,MAGvB,CACDpU,IAAK,qBACLN,MAAO,SAA4BuE,GACjClD,KAAKwJ,SAAS,iBAAmBxJ,KAAKuS,KAAKtU,QAE5C,CACDgB,IAAK,gBACLN,MAAO,WACL,GAAIqB,KAAK4S,WAAa5S,KAAKyS,YAAiC,GAAnBzS,KAAK4S,YAAsC,GAAnB5S,KAAKyS,WAAiB,CACrF,IAAI9S,EAAQK,KAAK4S,WAAa5S,KAAKwS,UAC/B3C,EAAMtK,KAAK8J,IAAI1P,EAAQK,KAAKwS,UAAWxS,KAAKuS,KAAKI,MACjDjE,EAAQwD,EAAUrU,KAAKmC,KAAKuS,KAAM5S,EAAOkQ,GAG7C,OAFA7P,KAAK+S,WAAWQ,kBAAkB7E,GAClC1O,KAAK4S,cACE,EAEP,OAAO,MAINN,EAhEU,GAqFnB,SAASkB,EAAYC,EAAMrT,GAMzB,MALmB,iBAARqT,IACTrT,EAAWqT,EACXA,EAAOxS,UAGFwS,EAAKvS,cAAcd,GAG5B,SAAS0D,EAAclC,EAAS0E,GAC9B,IAAIoN,EAAYnI,UAAUC,OAAS,QAAsBsB,IAAjBvB,UAAU,GAAmBA,UAAU,GAAK,GAChFhD,EAAW3G,EAAQ2G,SACnBhF,EAAUmQ,EAAUnQ,QACpBC,EAAakQ,EAAUlQ,WACvBC,EAASiQ,EAAUjQ,OACnBP,EAAQjC,SAASoC,YAAY,SACjCH,EAAMyQ,UAAUrN,EAAM/C,IAAW,EAAMC,IAAc,GACrDN,EAAMO,OAASA,GAAU,GAEzB,IACE7B,EAAQ2G,UAAW,EACnB3G,EAAQkC,cAAcZ,GACtB,QACAtB,EAAQ2G,SAAWA,EAGrB,OAAOrF,EAGT,SAAS0Q,EAAUjV,GACjB,OAAIqD,MAAM6R,QAAQlV,GACTA,EACEqD,MAAMsN,KACRtN,MAAMsN,KAAK3Q,GAEX,GAAGsD,MAAMpE,KAAKc,GAIzB,IAAImV,EAAa,WACf,SAASA,EAAWvB,EAAMwB,EAAU5N,GAClC,IAAI0M,EAAQ7S,KAEZsR,EAAetR,KAAM8T,GACrB9T,KAAKuS,KAAOA,EACZvS,KAAKgU,WAAa,CAChBC,SAAU1B,EAAKtU,KACfiW,aAAc3B,EAAKjM,KACnB6N,UAAW5B,EAAKI,KAChBoB,SAAUA,GAEZ/T,KAAKuC,IAAM,IAAIyD,eACfhG,KAAKuC,IAAIqE,KAAK,OAAQT,GAAK,GAC3BnG,KAAKuC,IAAI6R,aAAe,OACxBpU,KAAKuC,IAAIE,iBAAiB,eAAgB,oBAC1CzC,KAAKuC,IAAIE,iBAAiB,SAAU,oBACpCzC,KAAKuC,IAAIE,iBAAiB,mBAAoB,kBAC9C,IAAIL,EA3ER,SAAsBnE,GACpB,IAAI2D,EAAU4R,EAAYvS,SAASsG,KAAM,cAAgBtJ,EAAO,MAEhE,GAAI2D,EACF,OAAOA,EAAQ6H,aAAa,WAuEZ4K,CAAa,mBAEZvH,GAAb1K,GACFpC,KAAKuC,IAAIE,iBAAiB,eAAgBL,GAG5CpC,KAAKuC,IAAIgC,iBAAiB,QAAQ,SAAUrB,GAC1C,OAAO2P,EAAMyB,eAAepR,MAE9BlD,KAAKuC,IAAIgC,iBAAiB,SAAS,SAAUrB,GAC3C,OAAO2P,EAAM0B,gBAAgBrR,MA6DjC,OAzDAwO,EAAYoC,EAAY,CAAC,CACvB7U,IAAK,SACLN,MAAO,SAAgB6K,GACrBxJ,KAAKwJ,SAAWA,EAChBxJ,KAAKuC,IAAI2D,KAAKiB,KAAKqN,UAAU,CAC3BC,KAAMzU,KAAKgU,gBAGd,CACD/U,IAAK,iBACLN,MAAO,SAAwBuE,GAC7B,GAAIlD,KAAKyF,QAAU,KAAOzF,KAAKyF,OAAS,IAAK,CAC3C,IAAIL,EAAWpF,KAAKoF,SAChBsP,EAAgBtP,EAASsP,qBACtBtP,EAASsP,cAChB1U,KAAKgU,WAAa5O,EAClBpF,KAAK2U,iBAAmBD,EACxB1U,KAAKwJ,SAAS,KAAMxJ,KAAK4U,eAEzB5U,KAAKuU,gBAAgBrR,KAGxB,CACDjE,IAAK,kBACLN,MAAO,SAAyBuE,GAC9BlD,KAAKwJ,SAAS,4BAA8BxJ,KAAKuS,KAAKtU,KAAO,cAAgB+B,KAAKyF,UAEnF,CACDxG,IAAK,SACLN,MAAO,WACL,IAAIgF,EAAS,GAEb,IAAK,IAAI1E,KAAOe,KAAKgU,WACnBrQ,EAAO1E,GAAOe,KAAKgU,WAAW/U,GAGhC,OAAO0E,IAER,CACD1E,IAAK,SACLV,IAAK,WACH,OAAOyB,KAAKuC,IAAIkD,SAEjB,CACDxG,IAAK,WACLV,IAAK,WACH,IAAIsW,EAAO7U,KAAKuC,IACZ6R,EAAeS,EAAKT,aACpBhP,EAAWyP,EAAKzP,SAEpB,MAAoB,QAAhBgP,EACKhP,EAEA+B,KAAKC,MAAMhC,OAIjB0O,EAzFQ,GA4FbgB,EAAa,WACf,SAASA,EAAWL,GAClB,IAAI5B,EAAQ7S,KAEZsR,EAAetR,KAAM8U,GACrB9U,KAAKyU,KAAOA,EACZzU,KAAKuS,KAAOkC,EAAKlC,KACjB,IAAIwC,EAAwBN,EAAKE,iBAC7BxO,EAAM4O,EAAsB5O,IAC5B6O,EAAUD,EAAsBC,QAKpC,IAAK,IAAI/V,KAJTe,KAAKuC,IAAM,IAAIyD,eACfhG,KAAKuC,IAAIqE,KAAK,MAAOT,GAAK,GAC1BnG,KAAKuC,IAAI6R,aAAe,OAERY,EACdhV,KAAKuC,IAAIE,iBAAiBxD,EAAK+V,EAAQ/V,IAGzCe,KAAKuC,IAAIgC,iBAAiB,QAAQ,SAAUrB,GAC1C,OAAO2P,EAAMyB,eAAepR,MAE9BlD,KAAKuC,IAAIgC,iBAAiB,SAAS,SAAUrB,GAC3C,OAAO2P,EAAM0B,gBAAgBrR,MA6BjC,OAzBAwO,EAAYoD,EAAY,CAAC,CACvB7V,IAAK,SACLN,MAAO,SAAgB6K,GACrBxJ,KAAKwJ,SAAWA,EAChBxJ,KAAKuC,IAAI2D,KAAKlG,KAAKuS,KAAKtQ,WAEzB,CACDhD,IAAK,iBACLN,MAAO,SAAwBuE,GAC7B,IAAI2R,EAAO7U,KAAKuC,IACZkD,EAASoP,EAAKpP,OACdL,EAAWyP,EAAKzP,SAEhBK,GAAU,KAAOA,EAAS,IAC5BzF,KAAKwJ,SAAS,KAAMpE,GAEpBpF,KAAKuU,gBAAgBrR,KAGxB,CACDjE,IAAK,kBACLN,MAAO,SAAyBuE,GAC9BlD,KAAKwJ,SAAS,kBAAoBxJ,KAAKuS,KAAKtU,KAAO,cAAgB+B,KAAKuC,IAAIkD,YAGzEqP,EAnDQ,GAsDbG,EAAK,EAELC,EAAe,WACjB,SAASA,EAAa3C,EAAMpM,EAAK/B,GAC/BkN,EAAetR,KAAMkV,GACrBlV,KAAKiV,KAAOA,EACZjV,KAAKuS,KAAOA,EACZvS,KAAKmG,IAAMA,EACXnG,KAAKoE,SAAWA,EAkClB,OA/BAsN,EAAYwD,EAAc,CAAC,CACzBjW,IAAK,SACLN,MAAO,SAAgB6K,GACrB,IAAIqJ,EAAQ7S,KAEZsS,EAAatT,OAAOgB,KAAKuS,MAAM,SAAU3M,EAAOmO,GAC9C,GAAInO,EACF4D,EAAS5D,OADX,CAKA,IAAI6O,EAAO,IAAIX,EAAWjB,EAAMN,KAAMwB,EAAUlB,EAAM1M,KACtDgP,EAAOtC,EAAMzO,SAAU,oCAAqCqQ,EAAKlS,KACjEkS,EAAKzV,QAAO,SAAU4G,GACpB,GAAIA,EACF4D,EAAS5D,OACJ,CACL,IAAIwP,EAAS,IAAIN,EAAWL,GAC5BU,EAAOtC,EAAMzO,SAAU,mCAAoCgR,EAAO7S,KAClE6S,EAAOpW,QAAO,SAAU4G,GAClBA,EACF4D,EAAS5D,GAET4D,EAAS,KAAMiL,EAAKG,yBAQ3BM,EAxCU,GA2CnB,SAASC,EAAO/V,EAAQiW,GACtB,GAAIjW,GAAuC,mBAAtBA,EAAOiW,GAA2B,CACrD,IAAK,IAAIC,EAAO/J,UAAUC,OAAQ+J,EAAWvT,MAAMsT,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IAClGD,EAASC,EAAO,GAAKjK,UAAUiK,GAGjC,OAAOpW,EAAOiW,GAAYvG,MAAM1P,EAAQmW,IAI5C,IAAIE,EAAyB,WAC3B,SAASA,EAAuB5S,EAAO0P,GACrCjB,EAAetR,KAAMyV,GACrBzV,KAAK6C,MAAQA,EACb7C,KAAKuS,KAAOA,EACZvS,KAAK0V,aAAe,IAAIR,EAAalV,KAAKuS,KAAMvS,KAAKmG,IAAKnG,MAC1DA,KAAK2V,SAAS,cAoFhB,OAjFAjE,EAAY+D,EAAwB,CAAC,CACnCxW,IAAK,QACLN,MAAO,SAAe6K,GACpB,IAAIqJ,EAAQ7S,KAER4V,EAAc3U,SAASoG,cAAc,SACzCuO,EAAYtP,KAAO,SACnBsP,EAAY3X,KAAO+B,KAAK6C,MAAM5E,KAC9B+B,KAAK6C,MAAMgT,sBAAsB,cAAeD,GAChD5V,KAAK2V,SAAS,SACd3V,KAAK0V,aAAa1W,QAAO,SAAU4G,EAAOoO,GACpCpO,GACFgQ,EAAYpR,WAAWiD,YAAYmO,GAEnC/C,EAAMiD,cAAclQ,IAEpBgQ,EAAYjX,MAAQqV,EAAW+B,UAGjClD,EAAM8C,SAAS,OAEfnM,EAAS5D,QAGZ,CACD3G,IAAK,2BACLN,MAAO,SAAkCuE,GACvC,IAAI8S,EAAW9S,EAAM+S,OAAS/S,EAAMgT,MAAQ,IAExCF,GACFhW,KAAK2V,SAAS,WAAY,CACxBK,SAAUA,MAIf,CACD/W,IAAK,WACLN,MAAO,SAAkBV,GACvB,IAAIwF,EAAS8H,UAAUC,OAAS,QAAsBsB,IAAjBvB,UAAU,GAAmBA,UAAU,GAAK,GAGjF,OAFA9H,EAAO8O,KAAOvS,KAAKuS,KACnB9O,EAAOwR,GAAKjV,KAAK0V,aAAaT,GACvBnR,EAAc9D,KAAK6C,MAAO,iBAAmB5E,EAAM,CACxDwF,OAAQA,MAGX,CACDxE,IAAK,gBACLN,MAAO,SAAuBiH,GAChB5F,KAAK2V,SAAS,QAAS,CACjC/P,MAAOA,IAGEhC,kBACTuS,MAAMvQ,KAGT,CACD3G,IAAK,oCACLN,MAAO,SAA2C4D,GAChDvC,KAAK2V,SAAS,sBAAuB,CACnCpT,IAAKA,MAGR,CACDtD,IAAK,mCACLN,MAAO,SAA0C4D,GAC/C,IAAI6T,EAASpW,KAEbA,KAAK2V,SAAS,yBAA0B,CACtCpT,IAAKA,IAEPA,EAAI6S,OAAO7Q,iBAAiB,YAAY,SAAUrB,GAChD,OAAOkT,EAAOC,yBAAyBnT,QAG1C,CACDjE,IAAK,MACLV,IAAK,WACH,OAAOyB,KAAK6C,MAAM4G,aAAa,8BAG5BgM,EA1FoB,GA+FzBa,EAA0B,WAC5B,SAASA,EAAwBtN,GA1VnC,IAAsByK,EAAMrT,EA2VxBkR,EAAetR,KAAMsW,GACrBtW,KAAKgJ,KAAOA,EACZhJ,KAAKqI,QA7VaoL,EA6VSzK,EA7VH5I,EAuVR,2DAtVC,iBAARqT,IACTrT,EAAWqT,EACXA,EAAOxS,UAIF2S,EADQH,EAAKvR,iBAAiB9B,KAuVa6I,QAAO,SAAUpG,GAC/D,OAAOA,EAAM0T,MAAM/K,UAuDvB,OAnDAkG,EAAY4E,EAAyB,CAAC,CACpCrX,IAAK,QACLN,MAAO,SAAe6K,GACpB,IAAIqJ,EAAQ7S,KAERwW,EAAcxW,KAAKyW,gCAsBvBzW,KAAK2V,SAAS,SApBY,SAASe,IACjC,IAAIC,EAAaH,EAAYI,QAEzBD,EACFA,EAAWhX,OAAM,SAAUiG,GACrBA,GACF4D,EAAS5D,GAETiN,EAAM8C,SAAS,QAEfe,QAIJlN,IAEAqJ,EAAM8C,SAAS,QAKnBe,KAED,CACDzX,IAAK,gCACLN,MAAO,WACL,IAAI6X,EAAc,GAOlB,OANAxW,KAAKqI,OAAOzF,SAAQ,SAAUC,GAC5B+Q,EAAU/Q,EAAM0T,OAAO3T,SAAQ,SAAU2P,GACvC,IAAIoE,EAAa,IAAIlB,EAAuB5S,EAAO0P,GACnDiE,EAAY9N,KAAKiO,SAGdH,IAER,CACDvX,IAAK,WACLN,MAAO,SAAkBV,GACvB,IAAIwF,EAAS8H,UAAUC,OAAS,QAAsBsB,IAAjBvB,UAAU,GAAmBA,UAAU,GAAK,GACjF,OAAOzH,EAAc9D,KAAKgJ,KAAM,kBAAoB/K,EAAM,CACxDwF,OAAQA,QAIP6S,EA5DqB,GAgE1BO,EAAsB,IAAIC,QAC1BC,GAAU,EAEd,SAASpX,IACFoX,IACHA,GAAU,EACV9V,SAASsD,iBAAiB,QAASyS,GAAU,GAC7C/V,SAASsD,iBAAiB,SAAU0S,GACpChW,SAASsD,iBAAiB,cAAe2S,IAI7C,SAASF,EAAS9T,GAChB,IAAIe,EAASf,EAAMe,OAEI,SAAlBA,EAAOkT,SAAwC,UAAlBlT,EAAOkT,SAAuC,UAAflT,EAAOqC,OAAoBrC,EAAO+E,MACjG6N,EAAoB9G,IAAI9L,EAAO+E,KAAM/E,GAIzC,SAASgT,EAAc/T,GACrBkU,EAA0BlU,GAG5B,SAASgU,EAAuBhU,GACF,QAAxBA,EAAMe,OAAOkT,SACfC,EAA0BlU,GAI9B,SAASkU,EAA0BlU,GACjC,IAAI8F,EAAO9F,EAAMe,OAEjB,GAAI+E,EAAKqO,aAlCe,kCAmCtBnU,EAAMF,qBADR,CAKA,IAAI2T,EAAa,IAAIL,EAAwBtN,GACzCX,EAASsO,EAAWtO,OAEpBA,EAAOmD,SACTtI,EAAMF,iBACNgG,EAAK1B,aA5CiB,iCA4CiB,IACvCe,EAAOzF,QAAQ0U,GACfX,EAAWhX,OAAM,SAAUiG,GACzBoD,EAAKuO,gBA/Ce,kCAiDhB3R,EACFyC,EAAOzF,QAAQ4U,GAQvB,SAAoBxO,GAClB,IAAIkC,EAAS2L,EAAoBtY,IAAIyK,IAASwK,EAAYxK,EAAM,2CAEhE,GAAIkC,EAAQ,CACV,IACI3C,EADU2C,EACS3C,SACvB2C,EAAO3C,UAAW,EAClB2C,EAAOuM,QACPvM,EAAOH,QACPG,EAAO3C,SAAWA,OAElB2C,EAASjK,SAASoG,cAAc,UACzBf,KAAO,SACd4E,EAAON,MAAMC,QAAU,OACvB7B,EAAKxB,YAAY0D,GACjBA,EAAOH,QACP/B,EAAKvB,YAAYyD,GAGnB2L,EAA4B,OAAE7N,GAzBxB0O,CAAW1O,QA4BnB,SAASsO,EAAQzU,GACfA,EAAM0F,UAAW,EAGnB,SAASiP,EAAO3U,GACdA,EAAM0F,UAAW,EASnB8D,YANA,WACMpJ,OAAO0U,eACThY,MAIkB,GACtBnC,EAAQmC,MAAQA,EAChBnC,EAAQ0X,aAAeA,EACvB9W,OAAOC,eAAeb,EAAS,aAAc,CAC3CmB,OAAO,KApoC6D,WAAtBiB,EAAQpC,IAA4C,qBAAXC,EAAyBiP,EAAQlP,IAAwD,EAAO,CAAC,QAAmB,2BAAP,EAAF,GAAS,iC,gBCA/M,IAAMoa,EAAWlY,KACjBkY,EAASC,OAAOjV,QAAQgV,I,cCJxB,SAASE,EAAoBC,GAC5B,IAAI/T,EAAI,IAAIiI,MAAM,uBAAyB8L,EAAM,KAEjD,MADA/T,EAAEgU,KAAO,mBACHhU,EAEP8T,EAAoBD,KAAO,WAAa,MAAO,IAC/CC,EAAoBG,QAAUH,EAC9Bra,EAAOD,QAAUsa,EACjBA,EAAoB7C,GAAK,G,6BCNzB,IAAIiD,EAAY,CACdC,OAAQ,GACR/V,UAAW,GACXgW,WAAY,GACZC,KAAM,WAIJ,IAAK,IAAIC,KAHTtY,KAAKmY,OAASlX,SAASC,cAAc,QAAQuI,aAAa,QAC1DzJ,KAAKoC,UAAYnB,SAASC,cAAc,2BAA2BuI,aAAa,WAEtDzJ,KAAKoY,WAC7B,GAAIpY,KAAKoY,WAAW7Y,eAAe+Y,GAAgB,CACjD,IAAIC,EAAYvY,KAAKoY,WAAWE,GAE5BC,EAAUhZ,eAAe,SAC3BgZ,EAAUF,OAGRE,EAAUhZ,eAAe,uBACvBgZ,EAAUC,oBACZxY,KAAKyY,oBAAoBF,KAanCE,oBAAqB,SAA6BC,GAChD,GAAKA,EAAOnZ,eAAe,cAI3B,IAAK,IAAI+Y,KAAiBI,EAAON,WAC/B,GAAIM,EAAON,WAAW7Y,eAAe+Y,GAAgB,CACnD,IAAIK,EAAQD,EAAON,WAAWE,GAE9B,GAAIK,EAAMpZ,eAAe,QAAS,CAChC,IAAIqZ,GAAc,EAEdD,EAAMpZ,eAAe,iBACvBqZ,EAAcD,EAAMC,aAGjBA,GACHD,EAAMN,UAgBhBQ,eAAgB,SAAwBnO,EAAQvE,EAAK2S,EAAWC,GAC9D,IAAIC,EAAU,IAAIhT,eAclB,OAbAgT,EAAQzU,iBAAiB,QAAQ,WAC3BvE,KAAKyF,QAAU,KAAOzF,KAAKyF,OAAS,IAClCqT,GACFA,EAAUjb,KAAKmC,OAGhB+Y,GAAab,EAAUe,mBAAmBpb,KAAKmC,SAGpDgZ,EAAQzU,iBAAiB,QAAS2T,EAAUe,mBAC5CD,EAAQpS,KAAK8D,EAAOnE,cAAeJ,GACnC6S,EAAQvW,iBAAiB,mBAAoB,kBAC7CuW,EAAQvW,iBAAiB,eAAgByV,EAAU9V,WAC5C4W,GAYTE,gBAAiB,SAAyBxO,EAAQvE,EAAK2S,EAAWC,GAChE,IAAIC,EAAUd,EAAUW,eAAenO,EAAQvE,EAAK2S,EAAWC,GAG/D,OAFAC,EAAQvW,iBAAiB,eAAgB,oBACzCuW,EAAQvW,iBAAiB,SAAU,oBAC5BuW,GAQTC,kBAAmB,WACjBE,QAAQC,IAAI,cAAepZ,OAE7BqZ,QAAS,SAAiBpb,EAAMqb,GAK9B,IAJA,IAAIhO,EAAOtJ,MAAM1C,UAAU2C,MAAMpE,KAAK0N,UAAW,GAC7CgO,EAAatb,EAAKub,MAAM,KACxBC,EAAOF,EAAWG,MAEbhc,EAAI,EAAGA,EAAI6b,EAAW/N,OAAQ9N,IACrC4b,EAAUA,EAAQC,EAAW7b,IAG/B,OAAO4b,EAAQG,GAAM3K,MAAMwK,EAAShO,KAGxC4M,EAAUE,WAAWuB,MAAQ,CAS3BC,WAAY,SAAoBC,EAAWC,GACzC,IAAI9Q,EAAO/H,SAAS8Y,eAAeF,EAAY,SAE/C,GAAI7Q,EAAM,CACR,IAAIgR,EAAShR,EAAK9H,cAAc,aAC5B2C,EAAO,GAENmW,IACHA,EAAS/Y,SAASoG,cAAc,OACzB4S,UAAUC,IAAI,UAGvBJ,EAAKlX,SAAQ,SAAU0G,GACrBzF,GAAQ,OAASyF,EAAU,WAE7B0Q,EAAO3P,UAAYxG,EACnBmF,EAAKmR,QAAQH,GACbA,EAAOI,mBAcXC,eAAgB,SAAwBC,EAAQC,EAAcC,GAC5D,IAAIxR,EAAO/H,SAAS8Y,eAAeO,GAE/BtR,GACFA,EAAK9G,iBAAiBsY,GAAc5X,SAAQ,SAAUhB,GACpDA,EAAQqY,UAAUQ,OAAO,aAE3BzR,EAAK9G,iBAAiBqY,GAAc3X,SAAQ,SAAUhB,GACpDA,EAAQqY,UAAUC,IAAI,cAGxBf,QAAQC,IAAI,+BAAiCkB,IAGjDI,UAAW,SAAmBJ,EAAQhR,GACpC,GAAIgR,EAAO9O,OAAS,EAAG,CACrB,IAAIxC,EAAO/H,SAAS8Y,eAAeO,GAEnC,GAAItR,EAAM,CACR,IAAI2R,EAAY3R,EAAK9H,cAAc,sBAE9ByZ,KACHA,EAAY1Z,SAASoG,cAAc,QACzB4S,UAAUC,IAAI,eACxBS,EAAUV,UAAUC,IAAI,SACxBlR,EAAKmR,QAAQQ,IAGfA,EAAUtQ,UAAYf,OAEtB6P,QAAQC,IAAI,oBAAsBkB,MAW1CpC,EAAUE,WAAWwC,UAAY,CAI/BhC,aAAa,EAKbhX,aAASkL,EAKTuL,KAAM,WAGJ,GAFArY,KAAK4B,QAAUX,SAAS8Y,eAAe,aAEnC/Z,KAAK4B,QAAS,CAChB,IAAIgZ,EAAY5a,KAAK4B,QACrBqB,OAAOsB,iBAAiB,UAAU,WAC5BtB,OAAO4X,YAAc,IACvBD,EAAUX,UAAUQ,OAAO,YAE3BG,EAAUX,UAAUC,IAAI,eAG5Bla,KAAK4Y,aAAc,KAUzBV,EAAUE,WAAW0C,YAAc,CAIjClC,aAAa,EAKbP,KAAM,WACJpX,SAASsD,iBAAiB,UAAU,SAAUrB,GAC5C,IAAIL,EAAQK,EAAMe,OAEdpB,EAAMvB,QAAQ,qBAChB4W,EAAUE,WAAW0C,YAAYC,OAAOlY,MAG5C7C,KAAK4Y,aAAc,GAQrBmC,OAAQ,SAAgBlY,GACtB,IAAImY,EAAcnY,EAAM4G,aAAa,cAErC,GAAIuR,EAAa,CACf,IAAI/W,EAAShD,SAASC,cAAc,IAAM8Z,EAAc,QAExD,GAAI/W,GAAUpB,EAAM0T,OAAS1T,EAAM0T,MAAM,GAAI,CAC3C,IAAI0E,EAAS,IAAIjI,WAEjBiI,EAAOC,OAAS,SAAUhY,GACxBe,EAAOqD,aAAa,MAAOpE,EAAMe,OAAe,SAGlDgX,EAAOE,cAActY,EAAM0T,MAAM,QAWzC2B,EAAUE,WAAWgD,aAAe,CAIlCxC,aAAa,EACbxY,SAAU,qCAOVkI,SAAU,GAKV+P,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAQrB9J,MAAO,SAAelN,GACpB,IAAI2W,EAAYL,EAAUE,WAAWgD,aACrC7C,EAAUjQ,SAASI,KAAK9G,GACxBA,EAAQ2C,iBAAiB,QAASgU,EAAUjU,UAM9CA,QAAS,WACP,IAAI6B,EAAMnG,KAAKyJ,aAAa,YAE5B,GAAItD,IAAQnG,KAAKuI,SAAU,CACzB,IAAImC,EAAS1K,KAAK2I,QAAU,MAAQ,SAChC0S,EAAMrb,KACVA,KAAKuI,UAAW,EAChB2P,EAAUW,eAAenO,EAAQvE,GAAK,WACpCkV,EAAI9S,UAAW,KACdrC,UAUTgS,EAAUE,WAAWkD,aAAe,CAClC1C,aAAa,EACbxY,SAAU,uBACVkI,SAAU,GACV+P,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAOrB9J,MAAO,SAAe9F,GACpB,IAAIuP,EAAYL,EAAUE,WAAWkD,aACrCtS,EAAK9G,iBAAiB,gBAAgBU,SAAQ,SAAUhB,GACtD2W,EAAUjQ,SAASI,KAAK9G,GACxBA,EAAQ2C,iBAAiB,OAAQgU,EAAUjU,aAG/CA,QAAS,WACP,IAAI1C,EAAU5B,KACVgJ,EAAOpH,EAAQ2Z,QAAQ,QACvBpV,EAAM6C,EAAKS,aAAa,kBACxBuP,EAAUd,EAAUW,eAAe,OAAQ1S,GAAK,WAClD,GAAInG,KAAKqF,aAAc,CACrB,IAAID,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAE/B,GAAID,EAAS7F,eAAe,QAC1B,GAAI6F,EAAS/C,KAAKmZ,MAChBxS,EAAK9G,iBAAiB,gBAAgBU,SAAQ,SAAU6Y,GACtDA,EAAMpR,UAAY,UAEf,CACL,IAAIpL,EAAM2C,EAAQ6H,aAAa,cAC3BkR,EAAY3R,EAAK9H,cAAc,gBAAkBjC,EAAM,MAE3D,GAAI0b,EAAW,CACb,IAAIX,EAAS5U,EAAS/C,KAAa,OAE/B2X,EAAOza,eAAeN,IACxB0b,EAAUtQ,UAAY2P,EAAO/a,GAAK6J,KAAK,MACvC6R,EAAUV,UAAUQ,OAAO,WAE3BE,EAAUtQ,UAAY,SAO9BxG,EAAO,IAAIuH,SACfpJ,MAAMsN,KAAK,IAAIlE,SAASpC,GAAM0S,WAAW9Y,SAAQ,SAAU+Y,GACzD,IAAIhd,EAAQgd,EAAM,GAEdhd,aAAiBsE,OAAOkP,MAAuB,KAAfxT,EAAMV,MAA8B,IAAfU,EAAMgU,KAC7D9O,EAAKwH,OAAOsQ,EAAM,GAAI,IAAI1Y,OAAO2Y,KAAK,IAAK,IAE1B,YAAbD,EAAM,IACR9X,EAAKwH,OAAOsQ,EAAM,GAAIhd,MAI5Bqa,EAAQ9S,KAAKrC,KAGjBqU,EAAUE,WAAWyD,eAAiB,CACpCjD,aAAa,EACbxY,SAAU,uBACVkI,SAAU,GACV+P,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAOrB9J,MAAO,SAAelN,GACpB,IAAI2W,EAAYL,EAAUE,WAAWyD,eACrCtD,EAAUjQ,SAASI,KAAK9G,GACxBA,EAAQ2C,iBAAiB,OAAQgU,EAAUjU,UAO7CA,QAAS,SAAiBpB,GACxB,IAAIqV,EAAYL,EAAUE,WAAWyD,eACjCja,EAAUsB,EAAMe,OAChBA,EAAShD,SAAS8Y,eAAenY,EAAQ6H,aAAa,uBAEtDxF,GAA2B,KAAjBA,EAAOtF,QACnBsF,EAAOtF,MAAQ4Z,EAAUuD,cAAcla,EAAQjD,OAC/CsF,EAAOH,cAAc,IAAIJ,MAAM,aASnCoY,cAAe,SAAuBjZ,GACpC,IAAIkZ,EAAe,CACjB,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,KACL,SAAK,KACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,IACL,SAAK,KACL,SAAK,IACL,SAAK,KACL,SAAK,KACL,SAAK,MACL,SAAK,GACL,SAAK,IACL,SAAK,GACL,SAAK,IACL,SAAK,KACL,SAAK,KACL,OAAK,KACL,OAAK,KACL,OAAK,KACL,OAAK,KAEHC,EAASnZ,EAAMoZ,cAEnB,IAAK,IAAIC,KAASH,EACZA,EAAaxc,eAAe2c,KAC9BF,EAASA,EAAOrU,QAAQ,IAAIwU,OAAOD,EAAO,KAAMH,EAAaG,KAOjE,OADAF,GADAA,GADAA,EAASA,EAAOrU,QAAQ,gBAAiB,MACzBA,QAAQ,wCAAyC,OACjDA,QAAQ,OAAQ,OAIpCuQ,EAAUE,WAAWgE,WAAa,CAChCxD,aAAa,EACbxY,SAAU,oBACVkI,SAAU,GACV+P,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAOrB9J,MAAO,SAAelN,GACJsW,EAAUE,WAAWgE,WAC3B9T,SAASI,KAAK9G,GACxB,IAAIsJ,EAAStJ,EAAQV,cAAc,uBAC/Bmb,EAAiBza,EAAQV,cAAc,oBACvCob,EAAiB1a,EAAQV,cAAc,oBACvCqb,EAAkB3a,EAAQV,cAAc,gCACxCsb,EAAc5a,EAAQV,cAAc,6BACxCU,EAAQ2C,iBAAiB,eAAe,WACtC2G,EAAO3C,UAAW,EAEd8T,GACFA,EAAepC,UAAUQ,OAAO,aAGpC7Y,EAAQ2C,iBAAiB,iBAAiB,WACxC2G,EAAO3C,UAAW,EAEd8T,GACFA,EAAepC,UAAUC,IAAI,UAG3BsC,IACFA,EAAY7d,MAAQ,QAIpB2d,GACF1a,EAAQ2C,iBAAiB,mBAAmB,SAAUrB,GACtCA,EAAMO,OAAO,GACnB2R,OAAO7Q,iBAAiB,YAAY,SAAUP,GACpD,IAAIrF,EAAQqF,EAAEiS,OAASjS,EAAEkS,MAErBqG,IACFA,EAAgBlS,UAAoB,IAAR1L,EAAc,KAGxC6d,IACFA,EAAY7d,MAAQA,WAOhCuZ,EAAUE,WAAWqE,WAAa,CAChC7D,aAAa,EACbxY,SAAU,uBACVkI,SAAU,GACV+P,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAOrB9J,MAAO,SAAelN,GACpB,IAAI2W,EAAYL,EAAUE,WAAWqE,WACrClE,EAAUjQ,SAASI,KAAK9G,GACxBA,EAAQ2C,iBAAiB,QAASgU,EAAUjU,SAC5C1C,EAAQ2C,iBAAiB,QAASgU,EAAUjU,UAE9CA,QAAS,WACP,IAAKtE,KAAKT,eAAe,oBAAqB,CAC5C,IAAImd,EAAa1c,KAAKrB,MACtBqB,KAAKrB,MAAQ,GACbqB,KAAK2c,iBAAmB3c,KAAK4c,aAC7B5c,KAAKrB,MAAQ+d,EAGf,IACIG,EADSC,iBAAiB9c,MACX+c,iBAAiB,eAAepV,QAAQ,KAAM,IAC7DqV,EAAUhd,KAAKqX,aAAa,iBAAmBpJ,SAASjO,KAAKyJ,aAAa,kBAAoB,EAC9FwT,EAAUjd,KAAKqX,aAAa,iBAAmBpJ,SAASjO,KAAKyJ,aAAa,kBAAoB,GAC9FyT,EAAO3X,KAAKmN,MAAM1S,KAAK4c,aAAe5c,KAAK2c,kBAAoBE,GACnE7c,KAAKkd,KAAOF,EACZhd,KAAKkd,KAAOF,EAAUE,EAElBld,KAAKkd,KAAOD,IACdjd,KAAKkd,KAAOD,KAIlB/E,EAAUE,WAAW+E,mBAAqB,CACxCvE,aAAa,EACbxY,SAAU,uBACVkI,SAAU,GACV+P,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAErB9J,MAAO,SAAelN,GACpB,IAAI2W,EAAYL,EAAUE,WAAW+E,mBACrC5E,EAAUjQ,SAASI,KAAK9G,GACxBA,EAAQ2C,iBAAiB,QAASgU,EAAUjU,UAE9CA,QAAS,WACP,IAAI4G,EAASlL,KAEb,IAAKkL,EAAO3C,SAAU,CACpB,IAAIe,EAAU4B,EAAOzB,aAAa,aAElC,GAAIJ,QAAQC,GAAU,CACpB,IAAInD,EAAM+E,EAAOzB,aAAa,YAC1BuP,EAAUd,EAAUW,eAAe,SAAU1S,GAAK,WACpD,GAAInG,KAAKqF,aAAc,CACrB,IAAID,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAC3B+X,EAAOnc,SAAS8Y,eAAe,gBACnCZ,QAAQC,IAAIhU,GAERgY,GACFA,EAAK3C,SAGPvP,EAAO1G,WAAWA,WAAWiW,aAGjCvP,EAAO3C,UAAW,EAClByQ,EAAQ9S,WAKhBgS,EAAUE,WAAWiF,aAAe,CAClCzE,aAAa,EACbxY,SAAU,oBACVkd,QAAS,GACTjF,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAErB9J,MAAO,SAAe5D,GACpB,IAAIqN,EAAYL,EAAUE,WAAWiF,aACrC9E,EAAU+E,QAAQ5U,KAAKwC,GACvBA,EAAO3G,iBAAiB,QAASgU,EAAUjU,UAE7CA,QAAS,SAAiBpB,GACxB,IAAIgI,EAAShI,EAAMe,OACf0W,EAAY1Z,SAAS8Y,eAAe7O,EAAOzB,aAAa,mBAE5D,GAAIkR,GAAatR,QAAQ6B,EAAOzB,aAAa,cAAe,CAC1D,IAAI8T,EAAQ5C,EAAUzZ,cAAc,OAChCiF,EAAM+E,EAAOzB,aAAa,YAC1BuP,EAAUd,EAAUgB,gBAAgB,SAAU/S,GAAK,WACrD,IAAIf,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAE/B,GAAID,EAAS7F,eAAe,QAAS,CACnC,IAAI8C,EAAO+C,EAAS/C,KAEpB,GAAIA,EAAK9C,eAAe,WAAa8C,EAAKsB,OAAQ,CAChD4Z,EAAMC,IAAMtS,EAAOzB,aAAa,kBAChCyB,EAAOuP,SACP,IAAIgD,EAAOF,EAAMhC,QAAQ,KAErBkC,IACFA,EAAKpX,KAAO,UAKpB6E,EAAO3C,UAAW,EAClByQ,EAAQ9S,UAIdgS,EAAUE,WAAWsF,iBAAmB,CACtC9E,aAAa,EACbxY,SAAU,2BACVkI,SAAU,GACViN,SAAU,CACR,GAAM,2DACN,GAAM,iBAER8C,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAErB9J,MAAO,SAAelN,GACpB,IAAI2W,EAAYL,EAAUE,WAAWsF,iBACrCnF,EAAUjQ,SAASI,KAAK9G,GACxBA,EAAQ2C,iBAAiB,QAASgU,EAAUjU,UAE9CA,QAAS,SAAiBpB,GACxB,IAAIqS,EAAW2C,EAAUE,WAAWsF,iBAAiBnI,SACjD3T,EAAUsB,EAAMe,OAChBqF,EAAUiM,EAAShW,eAAe2Y,EAAUC,QAAU5C,EAAS2C,EAAUC,QAAU,gBAGvF,GAFAvW,EAAQ2G,UAAW,EAEfc,QAAQC,GAAU,CACpB,IAAInD,EAAMvE,EAAQ6H,aAAa,YACjByO,EAAUW,eAAe,SAAU1S,GAAK,WACpDvE,EAAQ2Z,QAAQ,eAAed,YAEzBvU,OAGVtE,EAAQ2G,UAAW,IAGvB2P,EAAUE,WAAWuF,QAAU,CAC7B/E,aAAa,EACbgF,QAAS,CACP7N,IAAK,SAAa9Q,EAAKN,GACrBuZ,EAAUE,WAAWuF,QAAQ5N,IAAI,iBAAkB9Q,EAAKN,IAE1DJ,IAAK,SAAaU,GAChB,OAAOiZ,EAAUE,WAAWuF,QAAQpf,IAAI,iBAAkBU,IAE5Dwb,OAAQ,SAAgBxb,GACtBiZ,EAAUE,WAAWuF,QAAQlD,OAAO,iBAAkBxb,KAG1D4e,MAAO,CACL9N,IAAK,SAAa9Q,EAAKN,GACrBuZ,EAAUE,WAAWuF,QAAQ5N,IAAI,eAAgB9Q,EAAKN,IAExDJ,IAAK,SAAaU,GAChB,OAAOiZ,EAAUE,WAAWuF,QAAQpf,IAAI,eAAgBU,IAE1Dwb,OAAQ,SAAgBxb,GACtBiZ,EAAUE,WAAWuF,QAAQlD,OAAO,eAAgBxb,KAGxDoZ,KAAM,WACJH,EAAUyF,QAAU3d,KACpBA,KAAK4Y,aAAc,GAErBkF,UAAW,SAAmBxX,GAC5B,IACE,IAAI2G,EAAI,mBAGR,OAFAhK,OAAOqD,GAAMyX,QAAQ9Q,EAAGA,GACxBhK,OAAOqD,GAAM0X,WAAW/Q,IACjB,EACP,MAAOjJ,GACP,OAAO,IAGX+L,IAAK,SAAazJ,EAAMrH,EAAKN,GACvBuZ,EAAUE,WAAWuF,QAAQG,UAAUxX,GACzCrD,OAAOqD,GAAMyX,QAAQ9e,EAAKN,GAE1Bwa,QAAQC,IAAI,gBAAkB9S,EAAO,sBAGzC/H,IAAK,SAAa+H,EAAMrH,GACtB,OAAIiZ,EAAUE,WAAWuF,QAAQG,UAAUxX,GAClCrD,OAAOqD,GAAM2X,QAAQhf,IAE5Bka,QAAQC,IAAI,gBAAkB9S,EAAO,qBAC9B,OAGXmU,OAAQ,SAAgBnU,EAAMrH,GACxBiZ,EAAUE,WAAWuF,QAAQG,UAAUxX,GACzCrD,OAAOqD,GAAM0X,WAAW/e,GAExBka,QAAQC,IAAI,mBAAqB9S,EAAO,uBAK9C4R,EAAUE,WAAW8F,cAAgB,CACnCtF,aAAa,EACbxY,SAAU,uCACVkI,SAAU,GACV+P,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAErB9J,MAAO,SAAelN,GACpB,IAAI2W,EAAYL,EAAUE,WAAW8F,cACrC3F,EAAUjQ,SAASI,KAAK9G,GACxBA,EAAQ2C,iBAAiB,QAASgU,EAAUjU,UAE9CA,QAAS,WACP,IAAIqW,EAAY3a,KAAKub,QAAQ,yBACzBpV,EAAMwU,EAAUlR,aAAa,oBAC7BuP,EAAUd,EAAUW,eAAe,SAAU1S,GAAK,WACpDwU,EAAUF,YAEZza,KAAKsH,aAAa,WAAY,QAC9B0R,EAAQ9S,SAIZgS,EAAUE,WAAW+F,WAAa,CAChCvF,aAAa,EACbxY,SAAU,sBACVkI,SAAU,GACV+P,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAErB9J,MAAO,SAAelN,GACpB,IAAI2W,EAAYL,EAAUE,WAAW+F,WACrC5F,EAAUjQ,SAASI,KAAK9G,GACxBA,EAAQ2C,iBAAiB,QAASgU,EAAUjU,UAE9CA,QAAS,WACP,IAAIqW,EAAY3a,KAAKub,QAAQ,gBACzB1Y,EAAQ8X,EAAUzZ,cAAc,sBAChCiF,EAAMwU,EAAUlR,aAAa,YAAc,MAAQZ,mBAAmBhG,EAAMlE,OAClEuZ,EAAUW,eAAe,MAAO1S,GAAK,WACjD,IAAIf,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAC3B+Y,EAAUzD,EAAUzZ,cAAc,YAElCkE,EAAS7F,eAAe,UAC1B6e,EAAQ/T,UAAYjF,EAAe,KAAQ,KAC3CgZ,EAAQlc,iBAAiB,MAAMU,SAAQ,SAAUyb,GAC/CA,EAAG9Z,iBAAiB,SAAS,SAAUrB,GACrC,IAAItB,EAAUsB,EAAMe,OACPhD,SAAS8Y,eAAeY,EAAUlR,aAAa,gBACrD9K,MAAQiD,EAAQ6H,aAAa,qBAKpCvD,SAGZgS,EAAUE,WAAWkG,gBAAkB,CACrC1F,aAAa,EACbxY,SAAU,wBACV+F,SAAK2G,EACL5B,YAAQ4B,EACRjK,WAAOiK,EACPyR,sBAAkBzR,EAClB0R,kBAAc1R,EACduL,KAAM,WACJ,IAAIsC,EAAY1Z,SAASC,cAAclB,KAAKI,UAE5C,GAAIua,EAAW,CAEb3a,KAAKmG,IAAMwU,EAAUlR,aAAa,YAClCzJ,KAAKkL,OAASyP,EAAUzZ,cAAc,UACtClB,KAAK6C,MAAQ8X,EAAUzZ,cAAc,SACrClB,KAAKue,iBAAmB5D,EAAUzZ,cAAc,UAChDlB,KAAKwe,aAAe7D,EAAUlR,aAAa,iBAC3CzJ,KAAK6C,MAAM0B,iBAAiB,QANZvE,KAM+Bye,aAC/Cze,KAAKkL,OAAO3G,iBAAiB,QAPbvE,KAOgC0e,aAChD1e,KAAKue,iBAAiBha,iBAAiB,SARvBvE,KAQ2C2e,cAC3D3e,KAAK4Y,aAAc,IAGvB6F,YAAa,SAAqBvb,GAChC,IAAIqV,EAAYL,EAAUE,WAAWkG,gBACjCzb,EAAQK,EAAMe,OAClBsU,EAAUrN,OAAO3C,SAAW1F,EAAMlE,MAAM6M,OAAS,GAEnDkT,YAAa,SAAqBxb,GAChC,IAAIqV,EAAYL,EAAUE,WAAWkG,gBACjCnY,EAAMoS,EAAUpS,IAAM,MAAQ0C,mBAAmB0P,EAAU1V,MAAMlE,OACrEuZ,EAAUgB,gBAAgB,MAAO/S,EAAKoS,EAAUqG,aAAa1Y,QAE/DyY,aAAc,SAAsBzb,GAClC,IAAIqV,EAAYL,EAAUE,WAAWkG,gBACjCO,EAAS3b,EAAMe,OACfuE,EAASqW,EAAO1Z,QAAQ0Z,EAAOC,eAC/B7J,EAAKhH,SAASzF,EAAO7J,OAErBsW,EAAK,GAAKsD,EAAUiG,eACtBtG,EAAUmB,QAAQd,EAAUiG,aAAcvb,OAAQgS,GAClDzM,EAAOD,UAAW,IAGtBqW,YAAa,WACX,IAAIrG,EAAYL,EAAUE,WAAWkG,gBACjClZ,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAC/BkT,EAAUgG,iBAAiBlU,UAAY,GACvC,IAAI7B,EAASvH,SAASoG,cAAc,UACpCmB,EAAO6B,UAAYjF,EAAe,KAAS,MAC3CoD,EAAO7J,MAAQ,GACf4Z,EAAUgG,iBAAiBlT,OAAO7C,GAE9BpD,EAAS7F,eAAe,SAC1B6F,EAASvB,KAAKjB,SAAQ,SAAUmc,GAC9B,IAAIvW,EAASvH,SAASoG,cAAc,UACpCmB,EAAOlB,aAAa,QAASyX,EAAK9J,IAClCzM,EAAO6B,UAAY0U,EAAiB,WAAQ,KAAI,KAAOA,EAAW,KAAQ,KAAI,IAC9ExG,EAAUgG,iBAAiBlT,OAAO7C,QAK1C0P,EAAUE,WAAW4G,cAAgB,CACnCpG,aAAa,EACbxY,SAAU,4BACV0Z,UAAMhN,EACN3G,SAAK2G,EACLuL,KAAM,WACJrY,KAAK8Z,KAAO7Y,SAASC,cAAclB,KAAKI,UAEpCJ,KAAK8Z,OACP9Z,KAAKmG,IAAMnG,KAAK8Z,KAAKrQ,aAAa,YAClCzJ,KAAK4Y,aAAc,IAGvBqG,QAAS,SAAiBhK,GACxB,IAAIsD,EAAYL,EAAUE,WAAW4G,cAErC,GAAIzG,EAAUpS,IAAK,CACjB,IAAItC,EAAO,CACT,QAAWoR,GAECiD,EAAUgB,gBAAgB,QAASX,EAAUpS,IAAKoS,EAAU2G,oBAClEhZ,KAAKiB,KAAKqN,UAAU3Q,SAE5BsV,QAAQC,IAAI,+CAGhB8F,mBAAoB,WAClB,IAAI3G,EAAYL,EAAUE,WAAW4G,cAErC,GAAIzG,EAAUuB,KAAM,CAClB,IAAI1U,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAE/B,GAAID,EAAS7F,eAAe,QAAS,CACnC,IAAIsE,EAAOuB,EAAe,KACtBiZ,EAAKpd,SAASoG,cAAc,MAC5B8X,EAAOtb,EAAoB,cAAQ,KAAQ,KAC3Cub,EAAMne,SAASoG,cAAc,OACjC+X,EAAI/U,UAAY8U,EAAiB,WAAe,YAAI,KAAOA,EAAW,KAAa,UAAI,IACvFd,EAAGhT,OAAO+T,GACV,IAAIC,EAAWxb,EAAiB,WAAQ,KAExC,GAAIzF,OAAOyZ,KAAKwH,GAAU7T,OAAS,EAAG,CACpC,IAAI8T,EAAUre,SAASoG,cAAc,OACrCiY,EAAQjV,UAAYlD,KAAKqN,UAAU6K,GACnChB,EAAGhT,OAAOiU,GAGZ/G,EAAUuB,KAAKzO,OAAOgT,SAGxBlF,QAAQC,IAAI,qDAUlBlB,EAAUE,WAAWmH,aAAe,CAIlC3G,aAAa,EAKbxY,SAAU,yCAOVkI,SAAU,GAKV+P,KAAM,WAEJrY,KAAKsI,SAAW,GAChBrH,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAFzB5C,KAE2Cwf,YAC3Dve,SAASsD,iBAAiB,QAHVvE,KAG6BsE,SAC7CtE,KAAK4Y,aAAc,GAQrB4G,WAAY,SAAoB5d,GAC9BsW,EAAUE,WAAWmH,aAAajX,SAASI,KAAK9G,IASlD0C,QAAS,SAAiBpB,GACxB,IAAIqV,EAAYL,EAAUE,WAAWmH,aAEjCtb,EAASf,EAAMe,OAEnB,GAAIA,EAAO3C,QAHI,6BAGe,CAC5B,IACIme,EADYxb,EAAOsX,QAAQ,2BACNra,cAAcqX,EAAUnY,UACjDmY,EAAUjQ,SAAS1F,SAAQ,SAAUhB,GAC/BA,IAAY6d,IACd7d,EAAQ+G,SAAU,WAItB4P,EAAUjQ,SAAS1F,SAAQ,SAAU6c,GACnCA,EAAS9W,SAAU,OAK3BuP,EAAUE,WAAWsH,oBAAsB,CACzC9G,aAAa,EACb+B,eAAW7N,EACX3G,SAAK2G,EACLgN,UAAMhN,EACNxE,SAAU,GACV+P,KAAM,WACJrY,KAAK2a,UAAY1Z,SAAS8Y,eAAe,kCAErC/Z,KAAK2a,YACP3a,KAAKmG,IAAMnG,KAAK2a,UAAUlR,aAAa,YACvCzJ,KAAK8Z,KAAO9Z,KAAK2a,UAAUzZ,cAAc,MACzClB,KAAK8Z,KAAK5X,iBAAiB,SAASU,QAAQ5C,KAAK8O,OACjD9O,KAAK4Y,aAAc,IASvB9J,MAAO,SAAelN,GACpB,IAAI2W,EAAYL,EAAUE,WAAWsH,oBACrCnH,EAAUjQ,SAASI,KAAK9G,GACxBA,EAAQ2C,iBAAiB,SAAUgU,EAAUoH,SAE/CA,OAAQ,SAAgBzc,GACtB,IAAIqV,EAAYL,EAAUE,WAAWsH,oBACjC9d,EAAUsB,EAAMe,OAChBJ,EAAO,CACT,IAAO,CACL,KAAQjC,EAAQ3D,KAChB,MAAS2D,EAAQjD,QAGjBqa,EAAUd,EAAUgB,gBAAgB,QAASX,EAAUpS,KAAK,WAC9DvE,EAAQ2G,UAAW,EACnB3G,EAAQqY,UAAUC,IAAI,cACrB,WACDtY,EAAQ2G,UAAW,EACnB3G,EAAQqY,UAAUC,IAAI,aAExBtY,EAAQqY,UAAUQ,OAAO,UAAW,UACpC7Y,EAAQ2G,UAAW,EACnByQ,EAAQ9S,KAAKiB,KAAKqN,UAAU3Q,KAE9BqW,IAAK,SAAarW,GAChB,IAAIub,EAAMne,SAASoG,cAAc,OAC7BuY,EAAK3e,SAASoG,cAAc,MAC5BwY,EAAQ5e,SAASoG,cAAc,SAC/ByY,EAAY,aAAejc,EAAW,KAC1Cgc,EAAMvY,aAAa,MAAOwY,GAC1BD,EAAMxV,UAAYxG,EAAW,KAC7B+b,EAAGvU,OAAOwU,GACV,IAAIE,EAAK9e,SAASoG,cAAc,MAC5BxE,EAAQ5B,SAASoG,cAAc,SACnCxE,EAAMyE,aAAa,KAAMwY,GACzBjd,EAAMyE,aAAa,OAAQzD,EAAW,MACtChB,EAAMlE,MAAQkF,EAAY,MAC1Bkc,EAAG1U,OAAOxI,GACV7C,KAAK8O,MAAMjM,GACXuc,EAAI/T,OAAOuU,GACXR,EAAI/T,OAAO0U,GACX/f,KAAK8Z,KAAKzO,OAAO+T,KAGrBlH,EAAUE,WAAW4H,sBAAwB,CAC3CpH,aAAa,EACb+B,eAAW7N,EACX3G,SAAK2G,EACL5B,YAAQ4B,EACRuL,KAAM,WAGJ,GAFArY,KAAK2a,UAAY1Z,SAAS8Y,eAAe,qCAErC/Z,KAAK2a,UAAW,CAElB3a,KAAKmG,IAAMnG,KAAK2a,UAAUlR,aAAa,YACvCzJ,KAAKkL,OAASlL,KAAK2a,UAAUzZ,cAAc,UAC3ClB,KAAKkL,OAAO3G,iBAAiB,QAHbvE,KAGgC+K,OAChD/K,KAAK4Y,aAAc,IAGvB7N,MAAO,WACL,IAAIwN,EAAYL,EAAUE,WAAW4H,sBACjCnc,EAAO,CACT,IAAO,IAELoc,GAAc,EAMlB,GALA1H,EAAUoC,UAAUzY,iBAAiB,SAASU,SAAQ,SAAUC,GAC9Dod,GAAepd,EAAMlE,MAAM6M,OAAS,EACpC3H,EAAK5E,IAAI4D,EAAM5E,MAAQ4E,EAAMlE,SAG3BshB,EAAa,CACf,IAAIjH,EAAUd,EAAUgB,gBAAgB,QAASX,EAAUpS,KAAK,WAC9DoS,EAAUoC,UAAUzY,iBAAiB,SAASU,SAAQ,SAAUC,GAC9DA,EAAMlE,MAAQ,MAEhBuZ,EAAUE,WAAWsH,oBAAoBxF,IAAIrW,EAAU,KACvD0U,EAAUrN,OAAO3C,UAAW,KAC3B,WACDgQ,EAAUrN,OAAO3C,UAAW,KAE9BgQ,EAAUrN,OAAO3C,UAAW,EAC5ByQ,EAAQ9S,KAAKiB,KAAKqN,UAAU3Q,OAIlCqU,EAAUE,WAAW8H,eAAiB,CACpCtH,aAAa,EACbxY,SAAU,cACVua,eAAW7N,EACX5B,YAAQ4B,EACRuL,KAAM,WAGJ,GAFArY,KAAK2a,UAAY1Z,SAAS8Y,eAAe/Z,KAAKI,UAE1CJ,KAAK2a,UAAW,CAClB,IAAIrW,EAAUtE,KAAKsE,QACnBtE,KAAKkL,OAASlL,KAAK2a,UAAUzZ,cAAc,UAEvClB,KAAKkL,QACPlL,KAAKkL,OAAO3G,iBAAiB,QAASD,GAGxCtE,KAAK4Y,aAAc,IAGvBtU,QAAS,WACP,IAAIiU,EAAYL,EAAUE,WAAW8H,eACjCC,EAAO,IAAIC,KACfD,EAAKE,QAAQF,EAAKG,UAAY,SAC9Brf,SAASsf,OAAS,sBAAwBJ,EAAKK,cAC/CjI,EAAUoC,UAAUF,WAGxBvC,EAAUE,WAAWqI,gBAAkB,CACrC7H,aAAa,EACbxY,SAAU,uBACVsgB,WAAY,GACZC,YAAa,GACbtI,KAAM,WAGJ,GAFApX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK4gB,cAElD5gB,KAAK0gB,WAAWlV,OAAS,EAAG,CAE9BvI,OAAOsB,iBAAiB,SADRvE,KAC4B6gB,OAG9C7gB,KAAK4Y,aAAc,GAErBgI,aAAc,SAAsBhf,GAClC,IAAI2W,EAAYL,EAAUE,WAAWqI,gBACjC9F,EAAY,CACd,QAAW/Y,EACX,UAAY,EACZ,MAAS,IAGPA,EAAQyV,aAAa,aACvBsD,EAAgB,KAAI1M,SAASrM,EAAQ6H,aAAa,cAElDkR,EAAgB,KAAI,IAGtBA,EAAqB,UAAIpV,KAAKmN,KAAKiI,EAAgB,KAAI,IACvD/Y,EAAQM,iBAAiB,UAAUU,SAAQ,SAAUjE,GACnD4Z,EAAUuI,QAAQnG,EAAWhc,MAE/B4Z,EAAUmI,WAAWhY,KAAKiS,IAE5BmG,QAAS,SAAiBnG,EAAW/Y,GACnC,IAAImd,EAAO,CACT,QAAWnd,EACX,aAAgBqM,SAASrM,EAAQyI,WACjC,WAAc,GAEhBzI,EAAQyI,UAAY,GACpBsQ,EAAUoG,MAAMrY,KAAKqW,IAEvB8B,MAAO,WACL,IAAItI,EAAYL,EAAUE,WAAWqI,gBACrClI,EAAUmI,WAAW9d,SAAQ,SAAU+X,GACjCA,EAAUqG,UAIJrG,EAAU/Y,QAAQqf,wBAEpBC,EAAIje,OAAOke,YAAc,MAC/B5I,EAAU6I,QAAQzG,OAIxByG,QAAS,SAAiBzG,GACxB,IAAIpC,EAAYL,EAAUE,WAAWqI,gBACrC9F,EAAUoG,MAAMne,SAAQ,SAAUmc,GAChCxG,EAAU8I,UAAUtC,EAAMpE,EAAU2G,cAEtC3G,EAAUqG,UAAW,GAEvBK,UAAW,SAAmBtC,EAAMuC,GAClC,IAAI/I,EAAYL,EAAUE,WAAWqI,gBAEjC1B,EAAKwC,WAAaD,IACpBvC,EAAKwC,aACLxC,EAAKnd,QAAQyI,UAAY9E,KAAK8J,IAAI9J,KAAKmN,KAAKqM,EAAKyC,aAAeF,EAAYvC,EAAKwC,YAAaxC,EAAKyC,cACnGve,OAAOoJ,WAAWkM,EAAU8I,UAAW,GAAItC,EAAMuC,MAIvDpJ,EAAUE,WAAWqJ,SAAW,CAM9B7I,aAAa,EAObxY,SAAU,yBAOVshB,QAAS,GAKTrJ,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAQrB9J,MAAO,SAAelN,GACpB,IAAI2W,EAAYL,EAAUE,WAAWqJ,SACjCE,EAAS,CACX,QAAW/f,EACX,UAAaA,EAAQV,cAAc,uBACnC,MAASU,EAAQM,iBAAiB,kBAClC,WAAcN,EAAQV,cAAc,eACpC,WAAcU,EAAQV,cAAc,eACpC,QAAW,EACX,UAAa,CACX,EAAK,KACL,EAAK,MAEP,UAAa,EACb,OAAS,GAGPU,EAAQyV,aAAa,aACvBsK,EAAa,KAAI/f,EAAQ6H,aAAa,aAEtCkY,EAAa,KAAI,SAGf/f,EAAQyV,aAAa,kBACvBsK,EAAgB,QAAI1T,SAASrM,EAAQ6H,aAAa,iBAE9CkY,EAAgB,QAAI,IACtBA,EAAwB,gBAAI1e,OAAO2e,YAAYrJ,EAAUsJ,UAAWF,EAAgB,QAAGA,KAIvFA,EAAmB,YACrBA,EAAmB,WAAEpd,iBAAiB,QAASgU,EAAUuJ,aAGvDH,EAAmB,YACrBA,EAAmB,WAAEpd,iBAAiB,QAASgU,EAAUwJ,aAG3DJ,EAAmB,WAA0E,IAAtEK,WAAWlF,iBAAiB6E,EAAc,MAAE,IAAIM,oBACvEN,EAAgB,QAAIA,EAAc,MAAEnW,OAAS,EAC7C5J,EAAQ2C,iBAAiB,aAAcgU,EAAU2J,YAAY,GAC7DtgB,EAAQ2C,iBAAiB,WAAYgU,EAAU4J,UAAU,GACzD5J,EAAUmJ,QAAQhZ,KAAKiZ,GACvBpJ,EAAU6J,UAAUT,IAQtBS,UAAW,SAAmBT,GAC5B,IAAIpJ,EAAYL,EAAUE,WAAWqJ,SAErC,OAAQE,EAAa,MACnB,IAAK,eACHpJ,EAAU8J,eAAeV,GACzB,MAEF,IAAK,SACHpJ,EAAU+J,WAAWX,GACrBpJ,EAAUgK,UAAUZ,GACpB,MAEF,IAAK,eACHpJ,EAAUiK,aAAab,GACvB,MAEF,QACExI,QAAQC,IAAI,0BAA4BuI,EAAa,MACrDpJ,EAAUgK,UAAUZ,GAGxBA,EAAc,OAAI,GAQpBG,YAAa,SAAqB5e,GAChC,IAAIqV,EAAYL,EAAUE,WAAWqJ,SACjCE,EAASpJ,EAAUkK,UAAUvf,EAAMe,QACvCsU,EAAUmK,SAASf,IAQrBI,YAAa,SAAqB7e,GAChC,IAAIqV,EAAYL,EAAUE,WAAWqJ,SACjCE,EAASpJ,EAAUkK,UAAUvf,EAAMe,QACvCsU,EAAUoK,SAAShB,IASrBc,UAAW,SAAmB7gB,GAG5B,IAFA,IAAI+f,EAAS/f,EAAQ2Z,QAAQvb,KAAKI,UAEzB1C,EAAI,EAAGA,EAAIsC,KAAK0hB,QAAQlW,OAAQ9N,IACvC,GAAIsC,KAAK0hB,QAAQhkB,GAAGkE,UAAY+f,EAC9B,OAAO3hB,KAAK0hB,QAAQhkB,IAU1BmkB,UAAW,SAAmBF,GAC5B,IAAIpJ,EAAYL,EAAUE,WAAWqJ,SACzBrB,KAAKwC,MAAQjB,EAAkB,WAEV,IAApBA,EAAgB,SAC3BpJ,EAAUoK,SAAShB,IASvBgB,SAAU,SAAkBhB,GAC1B,IAAIpJ,EAAYL,EAAUE,WAAWqJ,SACrCE,EAAgB,UAEZA,EAAgB,QAAIA,EAAgB,UACtCA,EAAgB,QAAI,GAGtBA,EAAkB,UAAIvB,KAAKwC,MAC3BrK,EAAU6J,UAAUT,IAQtBe,SAAU,SAAkBf,GAC1B,IAAIpJ,EAAYL,EAAUE,WAAWqJ,SACrCE,EAAgB,UAEZA,EAAgB,QAAI,IACtBA,EAAgB,QAAIA,EAAgB,SAGtCpJ,EAAU6J,UAAUT,IAQtBU,eAAgB,SAAwBV,GACtC,IAAIvhB,EAAW,+BAAiCuhB,EAAOkB,QAAU,GAAK,IAClEC,EAAenB,EAAOhH,UAAUzZ,cAAc,0BAE9C4hB,GACFA,EAAa7I,UAAUQ,OAAO,WAGhCkH,EAAOhH,UAAUzZ,cAAcd,GAAU6Z,UAAUC,IAAI,YAQzDqI,UAAW,SAAmBZ,GAC5B,IAAIoB,EAAapB,EAAOhH,UAAUzZ,cAAc,gCAEhD,GAAI6hB,EAAY,CACd,IAAIC,EAAc/f,OAAO6Z,iBAAiBiG,GAAYE,YAClDC,EAAaH,EAAWI,YAAclV,SAAS+U,GAC/CI,GAAcF,EAAavB,EAAOkB,QAGlCQ,EAAQD,GAFOF,EAAavB,EAAOZ,MAAMvV,OACdmW,EAAOhH,UAAUwI,aAG5CE,EAAQ,IACVD,GAAaC,EACb1B,EAAgB,QAAIA,EAAgB,SAGtCoB,EAAWnY,MAAM0Y,WAAa1U,OAAOwU,GAAa,OAGtDZ,aAAc,SAAsBb,GAC9BA,EAAc,QACU,IAAtBA,EAAgB,SAClB3hB,KAAKuiB,UAAUZ,GACf1e,OAAOoJ,WAAWrM,KAAKujB,WAAY5B,EAAmB,WAAGA,IAEzD3hB,KAAKwjB,YAAY7B,GAGnBA,EAAgB,QAAI,IAGxB4B,WAAY,SAAoB5B,GAC9B,IAAI7H,EAAO6H,EAAkB,UACzB/f,EAAUkY,EAAK5Y,cAAc,gCACjC4Y,EAAKzO,OAAOzJ,GACZA,EAAQgJ,MAAM6Y,YAAY,cAAe,IAE3CD,YAAa,SAAqB7B,GAChC,IAAI7H,EAAO6H,EAAkB,UACzB/f,EAAUkY,EAAK5Y,cAAc,+BAC7BwiB,EAAS5G,iBAAiBlb,GAM9BA,EAAQgJ,MAAMqX,mBAAqB,EACnC,IAAIe,EAAcU,EAAOT,YACrBC,EAAathB,EAAQuhB,YAAclV,SAAS+U,GAChDphB,EAAQgJ,MAAM0Y,WAAa1U,QAAQsU,GAAc,KACjDpJ,EAAKK,QAAQvY,GACbA,EAAQgJ,MAAMqX,mBAAqB,KACnChf,OAAOoJ,YAVK,WACVzK,EAAQgJ,MAAM0Y,WAAa,OASJ,KAQ3BhB,WAAY,SAAoBX,GAC9B,IAAIoB,EAAapB,EAAOhH,UAAUzZ,cAAc,gCAEhD,GAAI6hB,EAAY,CACd,IAAIC,EAAc/f,OAAO6Z,iBAAiBiG,GAAYE,YAClDC,EAAaH,EAAWI,YAAclV,SAAS+U,GAC/CW,EAAWhC,EAAOhH,UAAUwI,YAAcD,EAC9CvB,EAAgB,QAAIA,EAAOZ,MAAMvV,OAASjG,KAAKC,MAAMme,KAUzDzB,WAAY,SAAoBhf,GACdgV,EAAUE,WAAWqJ,SACdgB,UAAUvf,EAAMe,QACrB,UAAI,CACpB,EAAKf,EAAM0gB,eAAe,GAAGC,MAC7B,EAAK3gB,EAAM0gB,eAAe,GAAGE,QAUjC3B,SAAU,SAAkBjf,GAC1B,IAAIqV,EAAYL,EAAUE,WAAWqJ,SACjCE,EAASpJ,EAAUkK,UAAUvf,EAAMe,QACnCgJ,EAAI/J,EAAM0gB,eAAe,GAAGC,MAC5B3C,EAAIhe,EAAM0gB,eAAe,GAAGE,MACnBve,KAAKwe,IAAI9W,EAAI0U,EAAkB,UAAK,GACpCpc,KAAKwe,IAAI7C,EAAIS,EAAkB,UAAK,KAG3C1U,EAAI0U,EAAkB,UAAK,EAC7BpJ,EAAUoK,SAAShB,GACV1U,EAAI0U,EAAkB,UAAK,GACpCpJ,EAAUmK,SAASf,IAIvBA,EAAkB,UAAI,CACpB,EAAK,KACL,EAAK,QAIX,IAAIqC,EAAgB,CAClBpL,aAAa,EACbJ,oBAAoB,EACpBJ,WAAY,GACZC,KAAM,WACJrY,KAAK4Y,aAAc,IAGvBoL,EAAc5L,WAAW6L,WAAa,CACpCrL,aAAa,EACbxY,SAAU,8BACV2gB,MAAO,GACP1I,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAErB9J,MAAO,SAAelN,GACpB,IAAI2W,EAAYyL,EAAc5L,WAAW6L,WACrChP,EAAKrT,EAAQ6H,aAAa,WAC9B8O,EAAUwI,MAAM9L,GAAMrT,EACtBA,EAAQ2C,iBAAiB,YAAagU,EAAUjU,UAElDA,QAAS,SAAiBpB,GACxB,IAAIqV,EAAYyL,EAAc5L,WAAW6L,WACrCriB,EAAUsB,EAAMe,OAAOsX,QAAQ,WAEnC,GAAI3Z,EAAS,CACX,IAAIuE,EAAMvE,EAAQ6H,aAAa,YAC/ByO,EAAUgB,gBAAgB,MAAO/S,GAAK,WACpCvE,EAAQqY,UAAUQ,OAAO,aACxBvU,OACHtE,EAAQ2I,oBAAoB,YAAagO,EAAUjU,YAIzD0f,EAAc5L,WAAW8L,mBAAqB,CAC5CtL,aAAa,EACbxY,SAAU,6BACV2gB,MAAO,GACP1I,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAErB9J,MAAO,SAAelN,GACpB,IACIqT,EADKrT,EAAQ2Z,QAAQ,MACb9R,aAAa,WACrB8O,EAAYyL,EAAc5L,WAAW8L,mBACzC3L,EAAUwI,MAAM9L,GAAMrT,EACtBA,EAAQ2C,iBAAiB,QAASgU,EAAUjU,UAE9CA,QAAS,SAAiBpB,GACxB,IAAIgI,EAAShI,EAAMe,OACfkC,EAAM+E,EAAOzB,aAAa,YAC9ByB,EAAO3C,UAAW,EACJ2P,EAAUgB,gBAAgB,SAAU/S,GAAK,WACrD+E,EAAOqQ,QAAQ,MAAMd,YAEfvU,SAGZjD,OAAO+gB,cAAgBA,EACvB9L,EAAUE,WAAW+L,cAAgBH,EACrC9L,EAAUE,WAAWgM,OAAS,CAC5BxL,aAAa,EACbxY,SAAU,SACViY,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK2H,SACtD3H,KAAK4Y,aAAc,GAErBjR,QAAS,SAAiB/F,GACxB,IAAI2W,EAAYL,EAAUE,WAAWgM,OACjCje,EAAMvE,EAAQ6H,aAAa,OAE/B,GAAItD,EAAK,CACP,IAAIiE,EAAcmO,EAAU8L,QAAQle,GACpCvE,EAAQ0iB,cAAcC,aAAana,EAAaxI,KAGpD4iB,SAAU,SAAkBre,GAC1B,IAAIiZ,EAAMne,SAASoG,cAAc,OAC7BzF,EAAUX,SAASoG,cAAc,KAMrC,OALAzF,EAAQ0F,aAAa,MAAO,yCAC5B1F,EAAQ0F,aAAa,SAAU,UAC/B1F,EAAQyE,KAAOF,EACfvE,EAAQyI,UAAYzI,EAAQ6iB,SAC5BrF,EAAI/T,OAAOzJ,GACJwd,GAETqF,SAAU,SAAkBte,GAC1B,IAAIvE,EAAUX,SAASoG,cAAc,KAErC,OADAzF,EAAQyE,KAAOF,EACRvE,EAAQ6iB,UAEjBJ,QAAS,SAAiBK,GACxB,IAAItF,EAAMne,SAASoG,cAAc,OAC7BlB,EAAM,eAAiB0C,mBAAmB6b,GAuB9C,OAtBYxM,EAAUgB,gBAAgB,MAAO/S,GAAK,WAChD,IAAIf,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAE3BD,EAAS7F,eAAe,UAChB,IAAImI,WAAYE,gBAAgBxC,EAAe,KAAQ,KAAG,aAChElD,iBAAiB,YAAYU,SAAQ,SAAUhB,GACjD,GAA6C,WAAzCA,EAAQ+iB,SAASC,oBAAkC,CACrD,IAAIC,EAAgB5jB,SAASoG,cAAc,UAC3Cwd,EAAcrH,IAAM5b,EAAQ4b,IAExB5b,EAAQyV,aAAa,UACvBwN,EAAcvd,aAAa,QAAS,IAGtC8X,EAAI/T,OAAOwZ,QAEXzF,EAAI/T,OAAOzJ,SAKbsE,OACCkZ,IAGX,IAAI0F,EAAgB,CAClBlM,aAAa,EACbR,WAAY,GACZI,oBAAoB,EACpBH,KAAM,WACJrY,KAAK4Y,aAAc,IASvBkM,EAAc1M,WAAW2M,cAAgB,CAIvCnM,aAAa,EAObxY,SAAU,gBAOVua,eAAW7N,EAOXgN,UAAMhN,EAON5B,YAAQ4B,EAOR2O,WAAO3O,EAOPkY,YAAQlY,EAOR3G,SAAK2G,EACLuL,KAAM,WACJrY,KAAK2a,UAAY1Z,SAAS8Y,eAAe/Z,KAAKI,UAE1CJ,KAAK2a,YACP3a,KAAKmG,IAAMnG,KAAK2a,UAAUlR,aAAa,YACvCzJ,KAAK8Z,KAAO9Z,KAAK2a,UAAUzZ,cAAc,uBACzClB,KAAKyb,MAAQzb,KAAK2a,UAAUzZ,cAAc,YAC1ClB,KAAKkL,OAASlL,KAAK2a,UAAUzZ,cAAc,mBAC3ClB,KAAKglB,OAAShlB,KAAK2a,UAAUzZ,cAAc,yBAC3ClB,KAAKyb,MAAMlX,iBAAiB,QAASvE,KAAKilB,OAC1CjlB,KAAKkL,OAAO3G,iBAAiB,QAASvE,KAAKkG,MAC3ClG,KAAKglB,OAAOzgB,iBAAiB,QAASvE,KAAKklB,cAC3CllB,KAAK4Y,aAAc,EACnB5Y,KAAKklB,iBASTD,MAAO,WACL,IAAI1M,EAAYuM,EAAc1M,WAAW2M,cACrCzb,EAAUiP,EAAUkD,MAAM9c,MAAMwmB,OACpC5M,EAAUrN,OAAO3C,SAAWe,EAAQkC,OAAS,GAE/CtF,KAAM,WACJ,IAAIqS,EAAYuM,EAAc1M,WAAW2M,cACrC/L,EAAUd,EAAUgB,gBAAgB,OAAQX,EAAUpS,IAAKoS,EAAU6M,YAAa,MAClFvhB,EAAO,CACT,aAAgB,CACd,KAAQ0U,EAAUkD,MAAM9c,QAG5B4Z,EAAUrN,OAAO3C,UAAW,EAC5ByQ,EAAQ9S,KAAKiB,KAAKqN,UAAU3Q,KAE9BuhB,YAAa,WACX,IAAI7M,EAAYuM,EAAc1M,WAAW2M,cACrC3f,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAE3BD,EAAS7F,eAAe,UAC1BgZ,EAAU8M,WAAWjgB,EAASvB,MAAM,GACpC0U,EAAUkD,MAAM9c,MAAQ,KAW5B0mB,WAAY,SAAoBxhB,EAAMwH,GACpC,IAAIkN,EAAYuM,EAAc1M,WAAW2M,cAEzC,GAAIlhB,EAAKtE,eAAe,QAAS,CAC/B,IAAI8e,EAAKpd,SAASoG,cAAc,MAChCgX,EAAGpE,UAAUC,IAAIrW,EAAW,KAAa,WACzCwa,EAAGhU,UAAYxG,EAAW,KAAQ,KAE9BwH,EACFkN,EAAUuB,KAAKzO,OAAOgT,GAEtB9F,EAAUuB,KAAKK,QAAQkE,KAQ7B6G,aAAc,WACZ,IAAI3M,EAAYuM,EAAc1M,WAAW2M,cACrC5e,EAAMoS,EAAUyM,OAAOvb,aAAa,YACpCuP,EAAUd,EAAUgB,gBAAgB,MAAO/S,EAAKoS,EAAU+M,WAAY,MAC1E/M,EAAUyM,OAAOzc,UAAW,EAC5ByQ,EAAQ9S,QAEVof,WAAY,WACV,IAAI/M,EAAYuM,EAAc1M,WAAW2M,cACrC3f,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAE3BD,EAAS7F,eAAe,UAC1B6F,EAAe,KAAExC,SAAQ,SAAUiB,GACjC0U,EAAU8M,WAAWxhB,GAAM,MAE7B0U,EAAUyM,OAAOzc,UAAW,GAG1BnD,EAAS7F,eAAe,UACtB6F,EAAgB,MAAE7F,eAAe,QACnCgZ,EAAUyM,OAAO1d,aAAa,WAAYlC,EAAgB,MAAQ,MAKpEmT,EAAUyM,OAAOvK,WAIvBqK,EAAc1M,WAAWmN,eAAiB,CACxC3M,aAAa,EACbxY,SAAU,uBACVua,eAAW7N,EACXuL,KAAM,WACJrY,KAAK2a,UAAY1Z,SAAS8Y,eAAe/Z,KAAKI,UAE1CJ,KAAK2a,WAAa3a,KAAK2a,UAAUtD,aAAa,aAChDrX,KAAKwlB,UAGPxlB,KAAK4Y,aAAc,GAErB4M,QAAS,WACP,IAAIrf,EAAMnG,KAAK2a,UAAUlR,aAAa,YAClCkR,EAAY3a,KAAK2a,UACPzC,EAAUgB,gBAAgB,MAAO/S,GAAK,WAClD,IAAIf,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAE/B,GAAID,EAAS7F,eAAe,QAAS,CACnC,IAAIkmB,EAAexX,SAAS7I,EAAe,KAAS,OAEhDqgB,EAAe,IACjB9K,EAAUtQ,UAAYob,OAIpBvf,SAGZjD,OAAO6hB,cAAgBA,EACvB5M,EAAUE,WAAWsN,cAAgBZ,EAQrC5M,EAAUE,WAAWuN,eAAiB,CAMpC/M,aAAa,EAObxY,SAAU,8CAOV2gB,MAAO,GAOP1I,KAAM,WACJpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAQrB9J,MAAO,SAAelN,GACpB,IAAI2W,EAAYL,EAAUE,WAAWuN,eACjCC,EAAShkB,EAAQ2Z,QAAQ,gBAEzBqK,IACFrN,EAAUwI,MAAMrY,KAAKkd,GACrBA,EAAO3L,UAAUC,IAAI,0BACrB0L,EAAO3L,UAAUC,IAAI,aAI3BjX,OAAOiV,UAAYA,EACnBjX,SAASsD,iBAAiB,oBAAoB,WAC5C2T,EAAUG,OACVpX,SAASsD,iBAAiB,SAAS,SAAUrB,GAC3C,IAAItB,EAAUsB,EAAMe,OAEpB,GAAIrC,EAAQN,QAAQ,mBAAoB,CACtC4B,EAAMF,iBACN,IAAI2X,EAAY/Y,EAAQ2Z,QAAQ,MAC5BrQ,EAAStJ,EAAQ2Z,QAAQ,KACzBsK,EAAWlL,EAAU2J,cAAcpiB,iBAAiB,aACpDiE,EAAMwU,EAAUlR,aAAa,YAEjC,GAAItD,EAAIqF,OAAS,EAAG,CAClB,IAAId,EAASQ,EAAO+O,UAAU6L,SAAS,QAAU,MAAQ,SAC3C5N,EAAUW,eAAenO,EAAQvE,GAAK,WAClD,IAAIf,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAE/B,GAAID,EAAS7F,eAAe,SAAW6F,EAAe,KAAE7F,eAAe,UAAW,CAChF,IAAIwmB,EAAS3gB,EAAe,KAAU,OAElC2gB,EACFF,EAASjjB,SAAQ,SAAUsI,GACzBA,EAAO+O,UAAUC,IAAI,aAGvB2L,EAASjjB,SAAQ,SAAUsI,GACzBA,EAAO+O,UAAUQ,OAAO,aAI5BE,EAAUzY,iBAAiB,KAAKU,SAAQ,SAAUsI,GAChD,IAAI8a,EAAU9a,EAAO+O,UAEjB+L,EAAQF,SAAS,QACnBC,EAASC,EAAQ9L,IAAI,UAAY8L,EAAQvL,OAAO,UAEhDsL,EAASC,EAAQvL,OAAO,UAAYuL,EAAQ9L,IAAI,iBAKhDhU,QAKZ,GAAItE,EAAQN,QAAQ,2BACbM,EAAQqY,UAAU6L,SAAS,UAAW,CACzC,IAAIG,EAAOrkB,EAAQ4C,WAAWiF,aAAa,YAEvCyc,EAAYtkB,EAAQ6H,aAAa,aA4BjC0c,EAAWjO,EAAUW,eAAe,OAAQoN,GA1BhC,WACd,IAAI7gB,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAE/B,GAAID,EAAS7F,eAAe,QAC1B,OAAQ6F,EAAe,KAAE8gB,IACvB,KAAK,EACHtkB,EAAQwkB,UAAY,SACpB,MAEF,KAAK,EACHxkB,EAAQwkB,UAAY,WACpB,MAEF,QACExkB,EAAQwkB,UAAY,eAGxBxkB,EAAQwkB,UAAY,aAIR,WACdxkB,EAAQwkB,UAAY,UACpBlO,EAAUe,oBAAoBpb,KAAKmC,SAKjC6D,EAAO,IAAIuH,SACfvH,EAAKwH,OAAO,YAAa6a,GACzBtkB,EAAQwkB,UAAY,SAEpBD,EAASjgB,KAAKrC,GAKlB,GAAIjC,EAAQN,QAAQ,gCAAiC,CACnD,IAAI+hB,EAAQpV,SAASrM,EAAQ6H,aAAa,eAEtC4c,EAAQzkB,EAAQ4C,WAAWiF,aAAa,YAExCsV,EAAOnd,EAAQ2Z,QAAQ,mBAE3B,GAAItN,SAAS8Q,EAAKtV,aAAa,gBAAkB4Z,EAAQ,EAAG,CAC1D,IAoCIiD,EAAYpO,EAAUW,eAAe,OAAQwN,GApChC,WACf,IAAIjhB,EAAW+B,KAAKC,MAAMpH,KAAKqF,cAE/B,GAAID,EAAS7F,eAAe,QAAS,CACnC,IAAIgnB,EAASnhB,EAASvB,KAClB2iB,EAAazH,EAAKva,WAClBsV,EAAO9X,MAAM1C,UAAU2C,MAAMpE,KAAK2oB,EAAW/Z,UAEjD,GAAI8Z,EAAOhnB,eAAe,YACxBwf,EAAKzX,aAAa,cAAeif,EAAOE,eAExC,IAAK,IAAIC,KAAaH,EAChBA,EAAOhnB,eAAemnB,KACxB3H,EAAOyH,EAAWtlB,cAAc,eAAiBwlB,EAAY,OACxDpf,aAAa,cAAeif,EAAOG,IAK9C5M,EAAK6M,MAAK,SAAUxZ,EAAGC,GACrB,IAAIwZ,EAAK3Y,SAASd,EAAE1D,aAAa,gBAC7Bod,EAAK5Y,SAASb,EAAE3D,aAAa,gBAEjC,OAAImd,EAAKC,EACA,EACED,EAAKC,GACN,EAED,KAERjkB,SAAQ,SAAUmc,GACnByH,EAAWhf,YAAYuX,UAOzB+H,EAAQ,IAAI1b,SAEhB0b,EAAMzb,OAAO,QAASuD,OAAOyU,IAE7BiD,EAAUpgB,KAAK4gB,WAUvB7lB,SAASsD,iBAAiB,mBAAmB,SAAUP,GACrD,IAAI+iB,EAAW/iB,EAAEP,OAAO,GAAGI,KAE3B,GAAMkjB,aAAoB3b,UAAc2b,EAASlP,KAAjD,CAIA,IAAImP,EAAc,IAAI5b,SACtBpJ,MAAMsN,KAAKyX,EAASrL,WAAW9Y,SAAQ,SAAU+Y,GAC/C,IAAIhd,EAAQgd,EAAM,GAEdhd,aAAiBsE,OAAOkP,MAAuB,KAAfxT,EAAMV,MAA8B,IAAfU,EAAMgU,KAC7DqU,EAAY3b,OAAOsQ,EAAM,GAAI,IAAI1Y,OAAO2Y,KAAK,IAAK,IAElDoL,EAAY3b,OAAOsQ,EAAM,GAAIhd,MAGjCqF,EAAEP,OAAO,GAAGI,KAAOmjB,O,cChkErB,IAAMC,EAAW,CACbrO,aAAa,EACbR,WAAY,GACZI,oBAAoB,EACpB0O,iBAAkB,SAAUvM,GACxBsM,EAAS7O,WAAW+O,YAAYC,aAAazM,GAC7CsM,EAAS7O,WAAWiP,WAAWD,aAAazM,GAC5CsM,EAAS7O,WAAWkP,YAAYF,aAAazM,GAC7CsM,EAAS7O,WAAWmP,WAAWH,aAAazM,GAC5CsM,EAAS7O,WAAWoP,UAAUJ,aAAazM,GAC3CsM,EAAS7O,WAAWqP,iBAAiBL,aAAazM,KAI1DsM,EAAS7O,WAAW+O,YAAc,CAC9BvO,aAAa,EACbxY,SAAU,eACVua,eAAW7N,EACX4a,aAAS5a,EACT6a,aAAS7a,EACTxE,SAAU,GACV+P,KAAM,WACFrY,KAAK2a,UAAY1Z,SAAS8Y,eAAe,cACzC/Z,KAAK2nB,QAAU1mB,SAAS8Y,eAAe,sBACvC/Z,KAAK0nB,QAAUzmB,SAAS8Y,eAAe,sBACvC/Z,KAAKonB,aAAanmB,UAClBjB,KAAK4Y,aAAc,GAEvBwO,aAAc,SAAUzM,GACpBA,EAAUzY,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,QAE3DA,MAAO,SAAUlN,GACb,IAAM2W,EAAY0O,EAAS7O,WAAW+O,YACtC5O,EAAUjQ,SAASI,KAAK9G,GACxBA,EAAQ2C,iBAAiB,QAASgU,EAAUwC,SAEhDA,OAAQ,SAAU7X,GACdA,EAAMF,iBAEN,IAAMuV,EAAY0O,EAAS7O,WAAW+O,YAEhChhB,EADUjD,EAAMe,OAAOsX,QAAQhD,EAAUnY,UAC3BqJ,aAAa,cACjC8O,EAAUqP,KAAKzhB,IAEnByhB,KAAM,SAAUzhB,GACZnG,KAAK0nB,QAAQ/e,SAAU,EACPuP,UAAUgB,gBAAgB,MAAO/S,EAAKnG,KAAK4E,gBAAiB5E,KAAK6nB,YACzE3hB,QAEZtB,gBAAiB,WACb,IAAM2T,EAAY0O,EAAS7O,WAAW+O,YAChC/hB,EAAW+B,KAAKC,MAAMpH,KAAKqF,cACjC,GAAID,EAAS7F,eAAe,QAAS,CACjC,IAAM8C,EAAO+C,EAAS/C,KAWtB,GAVIA,EAAK9C,eAAe,WACpBgZ,EAAUuP,cAAczlB,EAAKlB,SAE7BoX,EAAUuP,cAAc,IAExBzlB,EAAK9C,eAAe,OACpBgZ,EAAUwP,UAAU1lB,EAAK2lB,KAEzBzP,EAAUwP,UAAU,IAEpB1lB,EAAK9C,eAAe,cAAe,CACnC,IAAMob,EAAYpC,EAAUoC,UAAUzZ,cAAc,YACpDmB,EAAK+V,WAAWxV,SAAQ,SAAA3D,GAAG,OAAIsZ,EAAU0P,aAAahpB,EAAK0b,MAE3DtY,EAAK9C,eAAe,aACpBgZ,EAAUoP,QAAQ/c,MAAM6Y,YAAY,cAAephB,EAAK6lB,WAExD3P,EAAUoP,QAAQ/c,MAAMud,eAAe,iBAInDN,WAAY,WACUZ,EAAS7O,WAAW+O,YAC5BO,QAAQ/e,SAAU,GAEhCmf,cAAe,SAAUM,GACrB,IACMzN,EADYsM,EAAS7O,WAAW+O,YACVxM,UAAUzZ,cAAc,YACpDyZ,EAAUtQ,UAAY+d,EACtBnB,EAASC,iBAAiBvM,IAE9BoN,UAAW,SAAUK,GACCnB,EAAS7O,WAAW+O,YACVxM,UAAUzZ,cAAc,kBAC1CmJ,UAAY+d,GAE1BH,aAAc,SAAUhpB,EAAK0b,GACrBsM,EAAS7O,WAAW7Y,eAAeN,IACnCgoB,EAAS7O,WAAWnZ,GAAKmoB,aAAazM,KAKlDsM,EAAS7O,WAAWmP,WAAa,CAC7B3O,aAAa,EACbxY,SAAU,iBACVuZ,MAAO,GACPtB,KAAM,WACFrY,KAAKonB,aAAanmB,UAClBjB,KAAK4Y,aAAc,GAEvBwO,aAAc,SAAUzM,GACpBA,EAAUzY,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,QAE3DA,MAAO,SAAU9F,GACb,IAAMuP,EAAY0O,EAAS7O,WAAWmP,WACtChP,EAAUoB,MAAMjR,KAAKM,GACrBA,EAAKzE,iBAAiB,SAAUgU,EAAUwC,SAE9CA,OAAQ,SAAU7X,GACdA,EAAMF,iBACN,IAAMgG,EAAO9F,EAAMe,OACnBgjB,EAAS7O,WAAW+O,YAAYS,KAAK5e,EAAK2B,UAIlDsc,EAAS7O,WAAWiP,WAAa,CAC7BzO,aAAa,EACbxY,SAAU,cACV2gB,MAAO,GACP1I,KAAM,WACFrY,KAAKonB,aAAanmB,UAClBjB,KAAK4Y,aAAc,GAEvBwO,aAAc,SAAUzM,GACpB,IAAMpC,EAAY0O,EAAS7O,WAAWiP,WACtC1M,EAAUzY,iBAAiBqW,EAAUnY,UAAUwC,QAAQ2V,EAAUzJ,QAErEA,MAAO,SAAUlN,GACKqlB,EAAS7O,WAAWiP,WAC5BtG,MAAMrY,KAAK,IAAI2f,MAAMzmB,EAAS,CAAC0mB,KAAM1mB,EAAQ6H,aAAa,kBAI5Ewd,EAAS7O,WAAWkP,YAAc,CAC9B1O,aAAa,EACbxY,SAAU,oBACV2gB,MAAO,GACP1I,KAAM,WACFrY,KAAKonB,aAAanmB,UAClBjB,KAAK4Y,aAAc,GAEvBwO,aAAc,SAAUzM,GACpBA,EAAUzY,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,QAE3DA,MAAO,SAAUlN,GACb,IAAM2W,EAAY0O,EAAS7O,WAAWkP,YACtC/O,EAAUwI,MAAMrY,KAAK9G,GACrBA,EAAQ2C,iBAAiB,QAASgU,EAAUwC,SAEhDA,OAAQ,SAAU7X,GACd,IAAMtB,EAAUsB,EAAMe,OAChBskB,EAAc3mB,EAAQ6H,aAAa,cACnCkR,EAAY1Z,SAAS8Y,eAAewO,GACtC5N,IACAA,EAAUtQ,UAAYzI,EAAQjD,SAK1CsoB,EAAS7O,WAAWoQ,UAAY,CAC5B5P,aAAa,EACbxY,SAAU,iBACViY,KAAM,WACFpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,OACtD9O,KAAK4Y,aAAc,GAEvB9J,MAAO,SAAUlN,GACb,IAAMuE,EAAMvE,EAAQ6H,aAAa,cACjCwd,EAAS7O,WAAW+O,YAAYS,KAAKzhB,KAI7C8gB,EAAS7O,WAAWqQ,iBAAmB,CACnCroB,SAAU,4BACVkd,QAAS,GACTjF,KAAM,WACFpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,QAE1DA,MAAO,SAAUlN,GACb,IAAM2W,EAAY0O,EAAS7O,WAAWqQ,iBACtClQ,EAAU+E,QAAQ5U,KAAK9G,GACvBA,EAAQ2C,iBAAiB,QAASgU,EAAUwC,SAEhDA,OAAQ,SAAU7X,GACd,IAAMgI,EAAShI,EAAMe,OACfwX,EAAQvQ,EAAO1G,WAAWtD,cAAc,SACxCmiB,EAAQnY,EAAO+O,UAAU6L,SAAS,aAAe,GAAK,EAC5DrK,EAAM9c,MAAQiQ,OAAOX,SAASwN,EAAM9c,OAAS0kB,GACzCpV,SAASwN,EAAM9c,OAAS,IACxB8c,EAAM9c,MAAQ,OAK1BsoB,EAAS7O,WAAWoP,UAAY,CAC5BpnB,SAAU,iBACVuZ,MAAO,GACPtB,KAAM,WACFrY,KAAKonB,aAAanmB,WAEtBmmB,aAAc,SAAUzM,GACpBA,EAAUzY,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,QAE3DA,MAAO,SAAU9F,GACb,IAAMuP,EAAY0O,EAAS7O,WAAWoP,UACtCjP,EAAUoB,MAAMjR,KAAKM,GACrBA,EAAKzE,iBAAiB,SAAUgU,EAAUwC,SAE9CA,OAAQ,SAAU7X,GACdA,EAAMF,iBACNmW,QAAQC,IAAI,OACZ,IAAMb,EAAY0O,EAAS7O,WAAWoP,UAChCxe,EAAO9F,EAAMe,OACnBsU,EAAUqP,KAAK5e,EAAK2B,OAAQ3B,EAAKuS,QAAQ,yBAE7CqM,KAAM,SAAUzhB,EAAKwU,GACjB+N,MAAMviB,GACDwiB,MAAK,SAACvjB,GAAD,OAAcA,EAASJ,UAC5B2jB,MAAK,SAACvjB,GACH,IAAMmT,EAAY0O,EAAS7O,WAAWoP,UACtC,GAAIpiB,EAAS7F,eAAe,QAAS,CACjC,IAAM8C,EAAO+C,EAAS/C,KAClBA,EAAK9C,eAAe,YACpBgZ,EAAUuP,cAAcnN,EAAWtY,EAAKlB,SACxCwZ,EAAUP,kBAEV7B,EAAUuP,cAAcnN,EAAW,SAMvDmN,cAAe,SAAUnN,EAAWyN,GAChCzN,EAAUtQ,UAAY+d,EACtBnB,EAASC,iBAAiBvM,KAIlCsM,EAAS7O,WAAWwQ,WAAa,CAC7BhQ,aAAa,EACbiQ,UAAM/b,EACN1M,SAAU,kBACVkd,QAAS,GACTjF,KAAM,WACFrY,KAAK6oB,KAAO5nB,SAAS8Y,eAAe,eAChC/Z,KAAK6oB,OACL7oB,KAAK4Y,aAAc,EACnB3X,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,SAG9DA,MAAO,SAAUlN,GACb,IAAM2W,EAAY0O,EAAS7O,WAAWwQ,WACtCrQ,EAAU+E,QAAQ5U,KAAK9G,GACvBA,EAAQ2C,iBAAiB,QAASgU,EAAUwC,SAEhDA,OAAQ,SAAU7X,GACd,IAAMqV,EAAY0O,EAAS7O,WAAWwQ,WAChC1d,EAAShI,EAAMe,OACjBof,EAAQ,EACRyF,EAAWvQ,EAAUsQ,KAAKpf,aAAa,cAK3C,GAJiB,KAAbqf,IACAA,EAAW,GAGX5d,EAAOmM,aAAa,cAAe,CACnC,IAAM0R,EAAU9nB,SAAS8Y,eAAe7O,EAAOzB,aAAa,eAExDsf,IACA1F,EAAQpV,SAAS8a,EAAQpqB,QAIjC4Z,EAAUsQ,KAAKvhB,aAAa,aAAcsH,OAAOyU,EAAQpV,SAAS6a,OAI1E7B,EAAS7O,WAAW4Q,aAAe,CAC/BtB,aAAS5a,EACTuL,KAAM,WACFrY,KAAK0nB,QAAUzmB,SAAS8Y,eAAe,mBACvC,IAAMzV,EAAUtE,KAAK+a,OACjB/a,KAAK0nB,SACL1nB,KAAK0nB,QAAQnjB,iBAAiB,SAAUD,IAGhDyW,OAAQ,SAAU7X,GACGA,EAAMe,OACV0E,QACT1H,SAASsf,OAAS,OAElBtf,SAASsf,OAAS,+CAK9B0G,EAAS7O,WAAW6Q,YAAc,CAC9BlI,MAAO,GACP3gB,SAAU,mBACVgmB,UAAW,iBACXvD,aAAS/V,EACTuL,KAAM,WACFpX,SAASiB,iBAAiBlC,KAAKI,UAAUwC,QAAQ5C,KAAK8O,QAE1DA,MAAO,SAAUlN,GACb,IAAM2W,EAAY0O,EAAS7O,WAAW6Q,YAClCrnB,EAAQ6H,aAAa,kBAAkB+B,OAAS,IAChD+M,EAAUwI,MAAMrY,KAAK9G,GACrBA,EAAQ2C,iBAAiB,aAAcgU,EAAU2Q,SACjDtnB,EAAQ2C,iBAAiB,aAAcgU,EAAU4Q,YAGzDD,QAAS,SAAUhmB,GACf,IAAMqV,EAAY0O,EAAS7O,WAAW6Q,YAChCrnB,EAAUsB,EAAMe,OAClBrC,EAAQN,QAAQiX,EAAUnY,YAC1BwB,EAAQ6H,aAAa8O,EAAU6N,WAAW5M,MAAM,KAAK5W,SAAQ,SAAAqS,GAAE,OAAIsD,EAAU6Q,OAAOxnB,EAASqT,GAAI,MACjGsD,EAAUsK,QAAUjhB,EACpBqB,OAAOoJ,WAAWkM,EAAU8Q,YAAa,IAAKznB,KAGtDunB,SAAU,SAAUjmB,GAChB,IAAMqV,EAAY0O,EAAS7O,WAAW6Q,YAChCrnB,EAAUsB,EAAMe,OAClBrC,EAAQN,QAAQiX,EAAUnY,WAC1BwB,EAAQ6H,aAAa8O,EAAU6N,WAAW5M,MAAM,KAAK5W,SAAQ,SAAAqS,GAAE,OAAIsD,EAAU6Q,OAAOxnB,EAASqT,GAAI,MAErGsD,EAAUsK,aAAU/V,EACpB7J,OAAOoJ,WAAWkM,EAAU+Q,UAAW,MAE3CF,OAAQ,SAAU9J,EAASQ,EAAWhR,GAClC,IAAMlN,EAAUX,SAAS8Y,eAAe+F,GACpCle,EACIkN,GACAlN,EAAQqY,UAAUC,IAAI,oBACtB+M,EAAS7O,WAAW6Q,YAAYM,gBAAgBjK,EAAS1d,EAASke,IAElEle,EAAQqY,UAAUQ,OAAO,oBAG7BtB,QAAQC,IAAI,kBAGpBmQ,gBAAiB,SAAUjK,EAAS1d,EAASke,GACzC,IAAMvH,EAAY0O,EAAS7O,WAAW6Q,YAStC,GAPkB,0BAAdnJ,IACAle,EAAQV,cAAc,eAAe+Y,UAAUQ,OAAO,UACtD7Y,EAAQV,cAAc,eAAe+Y,UAAUC,IAAI,WAErC,sBAAd4F,GACA7c,OAAOoJ,WAAWkM,EAAUiR,UAAW,IAAMlK,GAE/B,uBAAdQ,EAAoC,CACpC,IAAML,EAAWxe,SAAS8Y,eAAe,sBACrC0F,IACAA,EAAS9W,SAAU,GAEnB2W,EAAQjI,aAAa,aACrB4P,EAAS7O,WAAW+O,YAAYS,KAAKtI,EAAQ7V,aAAa,eAItE4f,YAAa,SAAU/Z,GACnB,IAAMiJ,EAAY0O,EAAS7O,WAAW6Q,YACtC,GAAI1Q,EAAUsK,SAAWvT,IAASiJ,EAAUsK,QAAS,CACjD,IAAM/C,EAAYvH,EAAUsK,QAAQpZ,aAAa8O,EAAU6N,WAAW5M,MAAM,KAAK,GAC3E5X,EAAUX,SAAS8Y,eAAe+F,GACxC,GAAIle,EAAS,CACT,IAAM6nB,EAAMxmB,OAAOymB,QAAU9nB,EAAQqf,wBAAwBwI,IAAM,GACnExmB,OAAO0mB,SAAS,EAAGpkB,KAAK6J,IAAI,EAAGqa,OAI3CD,UAAW,SAAU5nB,GACjB,IAAM2W,EAAY0O,EAAS7O,WAAW6Q,YAChCW,EAAU3C,EAAS7O,WAAWyR,aAChCtR,EAAUsK,UAAYjhB,IACtBgoB,EAAQlC,QAAQ/e,SAAU,IAGlC2gB,UAAW,WACP,IAAMM,EAAU3C,EAAS7O,WAAWyR,cAC/BD,EAAQE,OAASF,EAAQlC,UAC1BkC,EAAQlC,QAAQ/e,SAAU,KAKtCse,EAAS7O,WAAWyR,aAAe,CAC/BnC,aAAS5a,EACTid,WAAOjd,EACPgd,OAAO,EACPzR,KAAM,WACFrY,KAAK+pB,MAAQ9oB,SAAS8Y,eAAe,oBACjC/Z,KAAK+pB,QACL/pB,KAAK0nB,QAAUzmB,SAAS8Y,eAAe,sBACvC/Z,KAAK+pB,MAAMxlB,iBAAiB,aAAcvE,KAAKkpB,SAC/ClpB,KAAK+pB,MAAMxlB,iBAAiB,aAAcvE,KAAKmpB,YAGvDD,QAAS,WACLjC,EAAS7O,WAAWyR,aAAaC,OAAQ,GAE7CX,SAAU,WACNlC,EAAS7O,WAAWyR,aAAaC,OAAQ,IAIjD7C,EAAS7O,WAAW4R,WAAa,CAC7BC,SAAU,CACNC,OAAQ,GACRC,QAAS,GACTC,KAAM,IAEVC,gBAAYvd,EACZwd,kBAAcxd,EACdyd,WAAY,KACZnD,aAAc,SAAUzM,GACpB3a,KAAKqqB,WAAa1P,EAAUzZ,cAAc,UAC1ClB,KAAKsqB,aAAe3P,EAAUzZ,cAAc,sBAC5ClB,KAAKuqB,WAAatc,SAAS0M,EAAUzZ,cAAc,sBAAsBmJ,WACzErK,KAAKwqB,aAAa7P,EAAW,qBAAsB,UACnD3a,KAAKwqB,aAAa7P,EAAW,sBAAuB,QACpD3a,KAAKwqB,aAAa7P,EAAW,yBAA0B,WACvD3a,KAAKqqB,WAAW9lB,iBAAiB,QAASvE,KAAKyqB,cAC/CzqB,KAAKsqB,aAAa/lB,iBAAiB,QAASvE,KAAKyqB,eAErDD,aAAc,SAAU7P,EAAWva,EAAUkG,GACzC,IAAMiS,EAAY0O,EAAS7O,WAAW4R,WACtCrP,EAAUzY,iBAAiB9B,GAAUwC,SAAQ,SAAUhB,GAC/C2W,EAAU0R,SAAS1qB,eAAe+G,IAClCiS,EAAU0R,SAAS3jB,GAAMoC,KAAK9G,OAI1C6oB,aAAc,WACV,IAAMlS,EAAY0O,EAAS7O,WAAW4R,WAChCU,EAASzc,SAASsK,EAAU8R,WAAW1rB,OACvCgsB,EAAU,IAAM1c,SAASsK,EAAU+R,aAAa3rB,OAChDurB,EAAS3R,EAAUgS,WAAaI,EAAU,IAC1CC,EAAYV,EAAOW,QAAQ,GAC3BC,GAAWvS,EAAUgS,WAAaL,GAAQW,QAAQ,GAClDE,GAAcb,EAASQ,GAAQG,QAAQ,GAC7CtS,EAAUyS,SAAS,SAAsB,IAAZJ,EAAkB,MAAQ,EAAIrlB,KAAK0lB,MAAML,GAAaA,GACnFrS,EAAUyS,SAAS,OAAkB,IAAVF,EAAgB,MAAQ,EAAIvlB,KAAK0lB,MAAMH,GAAWA,GAC7EvS,EAAUyS,SAAS,UAAwB,IAAbD,EAAmB,MAAQ,EAAIxlB,KAAK0lB,MAAMF,GAAcA,IAE1FC,SAAU,SAAU/rB,EAAKisB,GACrB,IAAM3S,EAAY0O,EAAS7O,WAAW4R,WAClCzR,EAAU0R,SAAS1qB,eAAeN,IAClCsZ,EAAU0R,SAAShrB,GAAK2D,SAAQ,SAAUhB,GACtCA,EAAQyI,UAAY6gB,OAMpCjE,EAAS7O,WAAWqP,iBAAmB,CACnCrnB,SAAU,2BACVkI,SAAU,IAAI6iB,IACd9S,KAAM,WACFrY,KAAKonB,aAAanmB,WAEtBmmB,aAAc,SAAUzM,GACpB,IAAMpC,EAAY0O,EAAS7O,WAAWqP,iBACtC9M,EAAUzY,iBAAiBqW,EAAUnY,UAAUwC,QAAQ2V,EAAUzJ,QAErEA,MAAO,SAAUlN,GACb,IAAM2W,EAAY0O,EAAS7O,WAAWqP,iBAChC5jB,EAAO,CACTunB,SAAU,EACVC,QAAS,EACTC,SAAUrd,SAASrM,EAAQ2pB,QAAQ9D,kBACnC9oB,MAAOsP,SAASrM,EAAQyI,YAE5BkO,EAAUjQ,SAASyH,IAAInO,EAASiC,GAChCA,EAAKwnB,QAAUpoB,OAAOoJ,WAAWkM,EAAUoH,OAAQ9b,EAAKynB,SAAU1pB,IAEtE+d,OAAQ,SAAU/d,GACd,IAAM2W,EAAY0O,EAAS7O,WAAWqP,iBACtC,GAAIlP,EAAUjQ,SAASkjB,IAAI5pB,GAAU,CACjC,IAAMiC,EAAO0U,EAAUjQ,SAAS/J,IAAIqD,GAC9BjD,EAAQsP,SAASrM,EAAQyI,WAC3B1L,EAAQkF,EAAKunB,WACbxpB,EAAQyI,UAAY1L,EAAQ,EAC5BkF,EAAKwnB,QAAUpoB,OAAOoJ,WAAWkM,EAAUoH,OAAQ9b,EAAKynB,SAAU1pB,OAMlFqlB,EAAS7O,WAAWqT,eAAiB,CACjCnM,QAAS,GACToI,aAAS5a,EACTwQ,QAAS,GACTjF,KAAM,WACFrY,KAAK0nB,QAAUzmB,SAAS8Y,eAAe,mBACnC/Z,KAAK0nB,SACL1nB,KAAK0nB,QAAQnjB,iBAAiB,SAAUvE,KAAK6gB,OAEjD,IAAM6K,EAAUzqB,SAASC,cAAc,iBACnCwqB,IACAA,EAAQxpB,iBAAiB,WAAWU,QAAQ5C,KAAK2rB,YACjDD,EAAQxpB,iBAAiB,oBAAoBU,QAAQ5C,KAAK4rB,aAGlED,WAAY,SAAU/pB,GACAqlB,EAAS7O,WAAWqT,eAC5BnM,QAAQ5W,KAAK9G,IAE3BgqB,UAAW,SAAUhqB,GACjB,IAAM2W,EAAY0O,EAAS7O,WAAWqT,eACtClT,EAAU+E,QAAQ5U,KAAK9G,GACvBA,EAAQ2C,iBAAiB,QAASgU,EAAUsI,QAEhDA,MAAO,WACH,IAAMtI,EAAY0O,EAAS7O,WAAWqT,eAClCxoB,OAAO4oB,WAAa,KACpBtT,EAAU+G,QAAQ1W,KAAI,SAAA5E,GAAC,OAAIA,EAAE4C,MAAO,OAKhDsR,UAAUE,WAAW0T,SAAW7E","file":"js/application-bbef2820bc072b1ecfba.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\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 = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\nrequire(\"@rails/ujs\").start()\nrequire(\"@rails/activestorage\").start()\nrequire(\"channels\")\nrequire(\"@biovision/biovision\")\nrequire(\"demoshop\")\n\n\n// Uncomment to copy all static images under ../images to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `imagePath` JavaScript helper below.\n//\n// const images = require.context('../images', true)\n// const imagePath = (name) => images(name, true)\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n\n return element[expando][key] = value;\n };\n\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n\n return result;\n };\n }\n\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n\n options.accept = AcceptHeaders[options.dataType];\n\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n\n return options;\n };\n\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n CSRFProtection(xhr);\n xhr.withCredentials = !!options.withCredentials;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n\n return xhr;\n };\n\n processResponse = function processResponse(response, type) {\n var parser, script;\n\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n\n return response;\n };\n\n Rails.href = function (element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n\n if (matches(input, 'fieldset[disabled] *')) {\n return;\n }\n\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n\n if (additionalParam) {\n params.push(additionalParam);\n }\n\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n Rails.confirm = function (message, element) {\n return confirm(message);\n };\n\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n\n if (!message) {\n return true;\n }\n\n answer = false;\n\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n\n callback = fire(element, 'confirm:complete', [answer]);\n }\n\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function (e) {\n var element;\n\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n\n element = e.target;\n } else {\n element = e;\n }\n\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function disableFormElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n\n setData(element, 'ujs:enable-with', null);\n }\n\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n\n isXhrRedirect = function isXhrRedirect(event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n\n if (!method) {\n return;\n }\n\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n\n if (!isRemote(element)) {\n return true;\n }\n\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n\n if (!form) {\n return;\n }\n\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n\n module.paths = []; // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([\"exports\"], factory) : factory(global.ActiveStorage = {});\n})(this, function (exports) {\n \"use strict\";\n\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n\n var sparkMd5 = createCommonjsModule(function (module, exports) {\n (function (factory) {\n {\n module.exports = factory();\n }\n })(function (undefined) {\n var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i;\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i;\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(state, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(state, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n\n function rhex(n) {\n var s = \"\",\n j;\n\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n\n return s;\n }\n\n function hex(x) {\n var i;\n\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n\n return x.join(\"\");\n }\n\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = val | 0 || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n function SparkMD5() {\n this.reset();\n }\n\n SparkMD5.prototype.append = function (str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n\n this._finish(tail, length);\n\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n return ret;\n };\n\n SparkMD5.prototype.reset = function () {\n this._buff = \"\";\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(this._hash, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n SparkMD5.hash = function (str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n SparkMD5.ArrayBuffer = function () {\n this.reset();\n };\n\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n\n this._finish(tail, length);\n\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n return ret;\n };\n\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n });\n });\n\n var classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n\n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\n var FileChecksum = function () {\n createClass(FileChecksum, null, [{\n key: \"create\",\n value: function create(file, callback) {\n var instance = new FileChecksum(file);\n instance.create(callback);\n }\n }]);\n\n function FileChecksum(file) {\n classCallCheck(this, FileChecksum);\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n\n createClass(FileChecksum, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n\n this.callback = callback;\n this.md5Buffer = new sparkMd5.ArrayBuffer();\n this.fileReader = new FileReader();\n this.fileReader.addEventListener(\"load\", function (event) {\n return _this.fileReaderDidLoad(event);\n });\n this.fileReader.addEventListener(\"error\", function (event) {\n return _this.fileReaderDidError(event);\n });\n this.readNextChunk();\n }\n }, {\n key: \"fileReaderDidLoad\",\n value: function fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n\n if (!this.readNextChunk()) {\n var binaryDigest = this.md5Buffer.end(true);\n var base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n }, {\n key: \"fileReaderDidError\",\n value: function fileReaderDidError(event) {\n this.callback(\"Error reading \" + this.file.name);\n }\n }, {\n key: \"readNextChunk\",\n value: function readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n var start = this.chunkIndex * this.chunkSize;\n var end = Math.min(start + this.chunkSize, this.file.size);\n var bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n }]);\n return FileChecksum;\n }();\n\n function getMetaValue(name) {\n var element = findElement(document.head, 'meta[name=\"' + name + '\"]');\n\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n\n function findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n\n var elements = root.querySelectorAll(selector);\n return toArray$1(elements);\n }\n\n function findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n\n return root.querySelector(selector);\n }\n\n function dispatchEvent(element, type) {\n var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var disabled = element.disabled;\n var bubbles = eventInit.bubbles,\n cancelable = eventInit.cancelable,\n detail = eventInit.detail;\n var event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n\n return event;\n }\n\n function toArray$1(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n }\n\n var BlobRecord = function () {\n function BlobRecord(file, checksum, url) {\n var _this = this;\n\n classCallCheck(this, BlobRecord);\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type,\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n var csrfToken = getMetaValue(\"csrf-token\");\n\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n\n this.xhr.addEventListener(\"load\", function (event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this.requestDidError(event);\n });\n }\n\n createClass(BlobRecord, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n var response = this.response;\n var direct_upload = response.direct_upload;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error creating Blob for \"' + this.file.name + '\". Status: ' + this.status);\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n var result = {};\n\n for (var key in this.attributes) {\n result[key] = this.attributes[key];\n }\n\n return result;\n }\n }, {\n key: \"status\",\n get: function get$$1() {\n return this.xhr.status;\n }\n }, {\n key: \"response\",\n get: function get$$1() {\n var _xhr = this.xhr,\n responseType = _xhr.responseType,\n response = _xhr.response;\n\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n }]);\n return BlobRecord;\n }();\n\n var BlobUpload = function () {\n function BlobUpload(blob) {\n var _this = this;\n\n classCallCheck(this, BlobUpload);\n this.blob = blob;\n this.file = blob.file;\n var _blob$directUploadDat = blob.directUploadData,\n url = _blob$directUploadDat.url,\n headers = _blob$directUploadDat.headers;\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n\n for (var key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n\n this.xhr.addEventListener(\"load\", function (event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this.requestDidError(event);\n });\n }\n\n createClass(BlobUpload, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n var _xhr = this.xhr,\n status = _xhr.status,\n response = _xhr.response;\n\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error storing \"' + this.file.name + '\". Status: ' + this.xhr.status);\n }\n }]);\n return BlobUpload;\n }();\n\n var id = 0;\n\n var DirectUpload = function () {\n function DirectUpload(file, url, delegate) {\n classCallCheck(this, DirectUpload);\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n }\n\n createClass(DirectUpload, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n\n FileChecksum.create(this.file, function (error, checksum) {\n if (error) {\n callback(error);\n return;\n }\n\n var blob = new BlobRecord(_this.file, checksum, _this.url);\n notify(_this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create(function (error) {\n if (error) {\n callback(error);\n } else {\n var upload = new BlobUpload(blob);\n notify(_this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create(function (error) {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n });\n }\n });\n });\n }\n }]);\n return DirectUpload;\n }();\n\n function notify(object, methodName) {\n if (object && typeof object[methodName] == \"function\") {\n for (var _len = arguments.length, messages = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n messages[_key - 2] = arguments[_key];\n }\n\n return object[methodName].apply(object, messages);\n }\n }\n\n var DirectUploadController = function () {\n function DirectUploadController(input, file) {\n classCallCheck(this, DirectUploadController);\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n\n createClass(DirectUploadController, [{\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n\n var hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(function (error, attributes) {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n\n _this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n\n _this.dispatch(\"end\");\n\n callback(error);\n });\n }\n }, {\n key: \"uploadRequestDidProgress\",\n value: function uploadRequestDidProgress(event) {\n var progress = event.loaded / event.total * 100;\n\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, \"direct-upload:\" + name, {\n detail: detail\n });\n }\n }, {\n key: \"dispatchError\",\n value: function dispatchError(error) {\n var event = this.dispatch(\"error\", {\n error: error\n });\n\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n }, {\n key: \"directUploadWillCreateBlobWithXHR\",\n value: function directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n }, {\n key: \"directUploadWillStoreFileWithXHR\",\n value: function directUploadWillStoreFileWithXHR(xhr) {\n var _this2 = this;\n\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", function (event) {\n return _this2.uploadRequestDidProgress(event);\n });\n }\n }, {\n key: \"url\",\n get: function get$$1() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n }]);\n return DirectUploadController;\n }();\n\n var inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\n var DirectUploadsController = function () {\n function DirectUploadsController(form) {\n classCallCheck(this, DirectUploadsController);\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter(function (input) {\n return input.files.length;\n });\n }\n\n createClass(DirectUploadsController, [{\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n\n var controllers = this.createDirectUploadControllers();\n\n var startNextController = function startNextController() {\n var controller = controllers.shift();\n\n if (controller) {\n controller.start(function (error) {\n if (error) {\n callback(error);\n\n _this.dispatch(\"end\");\n } else {\n startNextController();\n }\n });\n } else {\n callback();\n\n _this.dispatch(\"end\");\n }\n };\n\n this.dispatch(\"start\");\n startNextController();\n }\n }, {\n key: \"createDirectUploadControllers\",\n value: function createDirectUploadControllers() {\n var controllers = [];\n this.inputs.forEach(function (input) {\n toArray$1(input.files).forEach(function (file) {\n var controller = new DirectUploadController(input, file);\n controllers.push(controller);\n });\n });\n return controllers;\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return dispatchEvent(this.form, \"direct-uploads:\" + name, {\n detail: detail\n });\n }\n }]);\n return DirectUploadsController;\n }();\n\n var processingAttribute = \"data-direct-uploads-processing\";\n var submitButtonsByForm = new WeakMap();\n var started = false;\n\n function start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n }\n\n function didClick(event) {\n var target = event.target;\n\n if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n submitButtonsByForm.set(target.form, target);\n }\n }\n\n function didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n }\n\n function didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n }\n\n function handleFormSubmissionEvent(event) {\n var form = event.target;\n\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n\n var controller = new DirectUploadsController(form);\n var inputs = controller.inputs;\n\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start(function (error) {\n form.removeAttribute(processingAttribute);\n\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n });\n }\n }\n\n function submitForm(form) {\n var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n\n if (button) {\n var _button = button,\n disabled = _button.disabled;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n\n submitButtonsByForm[\"delete\"](form);\n }\n\n function disable(input) {\n input.disabled = true;\n }\n\n function enable(input) {\n input.disabled = false;\n }\n\n function autostart() {\n if (window.ActiveStorage) {\n start();\n }\n }\n\n setTimeout(autostart, 1);\n exports.start = start;\n exports.DirectUpload = DirectUpload;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n});","// Load all the channels within this directory and all subdirectories.\n// Channel files must be named *_channel.js.\n\nconst channels = require.context('.', true, /_channel\\.js$/)\nchannels.keys().forEach(channels)\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 5;","\"use strict\";\n\nvar Biovision = {\n locale: \"\",\n csrfToken: \"\",\n components: {},\n init: function init() {\n this.locale = document.querySelector(\"html\").getAttribute(\"lang\");\n this.csrfToken = document.querySelector('meta[name=\"csrf-token\"]').getAttribute(\"content\");\n\n for (var componentName in this.components) {\n if (this.components.hasOwnProperty(componentName)) {\n var component = this.components[componentName];\n\n if (component.hasOwnProperty(\"init\")) {\n component.init();\n }\n\n if (component.hasOwnProperty(\"autoInitComponents\")) {\n if (component.autoInitComponents) {\n this.initChildComponents(component);\n }\n }\n }\n }\n },\n\n /**\n * Init child components of given component\n *\n * @type {Function}\n * @param {Object} parent\n */\n initChildComponents: function initChildComponents(parent) {\n if (!parent.hasOwnProperty(\"components\")) {\n return;\n }\n\n for (var componentName in parent.components) {\n if (parent.components.hasOwnProperty(componentName)) {\n var child = parent.components[componentName];\n\n if (child.hasOwnProperty(\"init\")) {\n var initialized = false;\n\n if (child.hasOwnProperty(\"initialized\")) {\n initialized = child.initialized;\n }\n\n if (!initialized) {\n child.init();\n }\n }\n }\n }\n },\n\n /**\n * Initialize new AJAX request\n *\n * @param {string} method\n * @param {string} url\n * @param {function} [onSuccess] callback for success\n * @param {function} [onFailure=Biovision.handleAjaxFailure] callback for failure\n * @returns {XMLHttpRequest}\n */\n newAjaxRequest: function newAjaxRequest(method, url, onSuccess, onFailure) {\n var request = new XMLHttpRequest();\n request.addEventListener(\"load\", function () {\n if (this.status >= 200 && this.status < 400) {\n if (onSuccess) {\n onSuccess.call(this);\n }\n } else {\n (onFailure || Biovision.handleAjaxFailure).call(this);\n }\n });\n request.addEventListener(\"error\", Biovision.handleAjaxFailure);\n request.open(method.toUpperCase(), url);\n request.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n request.setRequestHeader(\"X-CSRF-Token\", Biovision.csrfToken);\n return request;\n },\n\n /**\n * Initialize new AJAX request with JSON content-type and accept headers\n *\n * @param {string} method\n * @param {string} url\n * @param {function} onSuccess\n * @param {function} onFailure\n * @returns {XMLHttpRequest}\n */\n jsonAjaxRequest: function jsonAjaxRequest(method, url, onSuccess, onFailure) {\n var request = Biovision.newAjaxRequest(method, url, onSuccess, onFailure);\n request.setRequestHeader(\"Content-Type\", \"application/json\");\n request.setRequestHeader(\"Accept\", \"application/json\");\n return request;\n },\n\n /**\n * Handle failed AJAX request\n *\n * @type {Function}\n */\n handleAjaxFailure: function handleAjaxFailure() {\n console.log(\"AJAX failed\", this);\n },\n execute: function execute(name, context) {\n var args = Array.prototype.slice.call(arguments, 2);\n var namespaces = name.split(\".\");\n var func = namespaces.pop();\n\n for (var i = 0; i < namespaces.length; i++) {\n context = context[namespaces[i]];\n }\n\n return context[func].apply(context, args);\n }\n};\nBiovision.components.forms = {\n /**\n * Показать список ошибок после обработки формы\n *\n * Используется в контроллерах при отправке форм через remote: true\n *\n * @param {string} modelName название модели\n * @param {Array} list список ошибок\n */\n showErrors: function showErrors(modelName, list) {\n var form = document.getElementById(modelName + \"-form\");\n\n if (form) {\n var errors = form.querySelector(\"ol.errors\");\n var data = \"\";\n\n if (!errors) {\n errors = document.createElement(\"ol\");\n errors.classList.add(\"errors\");\n }\n\n list.forEach(function (message) {\n data += \"
  • \" + message + \"
  • \";\n });\n errors.innerHTML = data;\n form.prepend(errors);\n errors.scrollIntoView();\n }\n },\n\n /**\n * Hide and show elements in form with given id\n *\n * Toggles class \"hidden\" for elements with selectors\n * hideSelector and showSelector for form children\n *\n * @param {String} formId\n * @param {String} hideSelector elements to hide\n * @param {String} showSelector elements to show\n */\n switchElements: function switchElements(formId, hideSelector, showSelector) {\n var form = document.getElementById(formId);\n\n if (form) {\n form.querySelectorAll(showSelector).forEach(function (element) {\n element.classList.remove(\"hidden\");\n });\n form.querySelectorAll(hideSelector).forEach(function (element) {\n element.classList.add(\"hidden\");\n });\n } else {\n console.log(\"Cannot find element with id \" + formId);\n }\n },\n showError: function showError(formId, message) {\n if (formId.length > 0) {\n var form = document.getElementById(formId);\n\n if (form) {\n var container = form.querySelector(\".message-box.error\");\n\n if (!container) {\n container = document.createElement(\"div\");\n container.classList.add(\"message-box\");\n container.classList.add(\"error\");\n form.prepend(container);\n }\n\n container.innerHTML = message;\n } else {\n console.log(\"Cannot find form \" + formId);\n }\n }\n }\n};\n/**\n * Show/hide \"go to top\" link when it is present in layout\n *\n * @type {Object}\n */\n\nBiovision.components.topLinker = {\n /**\n * @type {Boolean}\n */\n initialized: false,\n\n /**\n * @type {HTMLElement}\n */\n element: undefined,\n\n /**\n * Initialize component\n */\n init: function init() {\n this.element = document.getElementById('go-to-top');\n\n if (this.element) {\n var topLinker = this.element;\n window.addEventListener('scroll', function () {\n if (window.pageYOffset > 500) {\n topLinker.classList.remove('inactive');\n } else {\n topLinker.classList.add('inactive');\n }\n });\n this.initialized = true;\n }\n }\n};\n/**\n * Preview images when selecting them in input type=\"file\" fields\n *\n * @type {Object}\n */\n\nBiovision.components.filePreview = {\n /**\n * @type {Boolean}\n */\n initialized: false,\n\n /**\n * Initialize component\n */\n init: function init() {\n document.addEventListener('change', function (event) {\n var input = event.target;\n\n if (input.matches('input[type=file]')) {\n Biovision.components.filePreview.handle(input);\n }\n });\n this.initialized = true;\n },\n\n /**\n * Handle change of file input field\n *\n * @param {EventTarget|HTMLInputElement} input\n */\n handle: function handle(input) {\n var targetImage = input.getAttribute('data-image');\n\n if (targetImage) {\n var target = document.querySelector('#' + targetImage + ' img');\n\n if (target && input.files && input.files[0]) {\n var reader = new FileReader();\n\n reader.onload = function (event) {\n target.setAttribute('src', event.target[\"result\"]);\n };\n\n reader.readAsDataURL(input.files[0]);\n }\n }\n }\n};\n/**\n * Linking entities with checkboxes\n *\n * @type {Object}\n */\n\nBiovision.components.entityLinker = {\n /**\n * @type {Boolean}\n */\n initialized: false,\n selector: '.entity-links input[type=checkbox]',\n\n /**\n * List of elements with attached event listener\n *\n * @type {Array}\n */\n elements: [],\n\n /**\n * Initialize component\n */\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n\n /**\n * Apply handler to element\n *\n * @param {HTMLInputElement} element\n */\n apply: function apply(element) {\n var component = Biovision.components.entityLinker;\n component.elements.push(element);\n element.addEventListener('click', component.handler);\n },\n\n /**\n * Event handler for clicking on element\n */\n handler: function handler() {\n var url = this.getAttribute('data-url');\n\n if (url && !this.disabled) {\n var method = this.checked ? 'put' : 'delete';\n var box = this;\n this.disabled = true;\n Biovision.newAjaxRequest(method, url, function () {\n box.disabled = false;\n }).send();\n }\n }\n};\n/**\n * Instantly check form validity\n *\n * @type {Object}\n */\n\nBiovision.components.instantCheck = {\n initialized: false,\n selector: 'form[data-check-url]',\n elements: [],\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n\n /**\n *\n * @param {HTMLFormElement} form\n */\n apply: function apply(form) {\n var component = Biovision.components.instantCheck;\n form.querySelectorAll('[data-check]').forEach(function (element) {\n component.elements.push(element);\n element.addEventListener('blur', component.handler);\n });\n },\n handler: function handler() {\n var element = this;\n var form = element.closest('form');\n var url = form.getAttribute('data-check-url');\n var request = Biovision.newAjaxRequest('POST', url, function () {\n if (this.responseText) {\n var response = JSON.parse(this.responseText);\n\n if (response.hasOwnProperty('meta')) {\n if (response.meta.valid) {\n form.querySelectorAll('[data-field]').forEach(function (field) {\n field.innerHTML = '';\n });\n } else {\n var key = element.getAttribute('data-check');\n var container = form.querySelector('[data-field=\"' + key + '\"]');\n\n if (container) {\n var errors = response.meta['errors'];\n\n if (errors.hasOwnProperty(key)) {\n container.innerHTML = errors[key].join('; ');\n container.classList.remove('hidden');\n } else {\n container.innerHTML = '';\n }\n }\n }\n }\n }\n });\n var data = new FormData();\n Array.from(new FormData(form).entries()).forEach(function (entry) {\n var value = entry[1];\n\n if (value instanceof window.File && value.name === '' && value.size === 0) {\n data.append(entry[0], new window.Blob([]), '');\n } else {\n if (entry[0] !== '_method') {\n data.append(entry[0], value);\n }\n }\n });\n request.send(data);\n }\n};\nBiovision.components.transliterator = {\n initialized: false,\n selector: '[data-transliterate]',\n elements: [],\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n\n /**\n *\n * @param {HTMLElement} element\n */\n apply: function apply(element) {\n var component = Biovision.components.transliterator;\n component.elements.push(element);\n element.addEventListener('blur', component.handler);\n },\n\n /**\n *\n * @param {Event} event\n */\n handler: function handler(event) {\n var component = Biovision.components.transliterator;\n var element = event.target;\n var target = document.getElementById(element.getAttribute('data-transliterate'));\n\n if (target && target.value === '') {\n target.value = component.transliterate(element.value);\n target.dispatchEvent(new Event('change'));\n }\n },\n\n /**\n *\n * @param {string} input\n * @returns {string}\n */\n transliterate: function transliterate(input) {\n var characterMap = {\n 'а': 'a',\n 'б': 'b',\n 'в': 'v',\n 'г': 'g',\n 'д': 'd',\n 'е': 'e',\n 'ё': 'yo',\n 'ж': 'zh',\n 'з': 'z',\n 'и': 'i',\n 'й': 'j',\n 'к': 'k',\n 'л': 'l',\n 'м': 'm',\n 'н': 'n',\n 'о': 'o',\n 'п': 'p',\n 'р': 'r',\n 'с': 's',\n 'т': 't',\n 'у': 'u',\n 'ф': 'f',\n 'х': 'kh',\n 'ц': 'c',\n 'ч': 'ch',\n 'ш': 'sh',\n 'щ': 'shh',\n 'ъ': '',\n 'ы': 'y',\n 'ь': '',\n 'э': 'e',\n 'ю': 'yu',\n 'я': 'ya',\n 'å': 'aa',\n 'ä': 'ae',\n 'ö': 'oe',\n 'é': 'e'\n };\n var string = input.toLowerCase();\n\n for (var index in characterMap) {\n if (characterMap.hasOwnProperty(index)) {\n string = string.replace(new RegExp(index, 'g'), characterMap[index]);\n }\n }\n\n string = string.replace(/[^-a-z0-9_.]/g, '-');\n string = string.replace(/^[-_.]*([-a-z0-9_.]*[a-z0-9]+)[-_.]*$/, '$1');\n string = string.replace(/--+/g, '-');\n return string;\n }\n};\nBiovision.components.formStatus = {\n initialized: false,\n selector: 'form[data-remote]',\n elements: [],\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n\n /**\n *\n * @param {HTMLFormElement} element\n */\n apply: function apply(element) {\n var component = Biovision.components.formStatus;\n component.elements.push(element);\n var button = element.querySelector('button[type=submit]');\n var loadingMessage = element.querySelector('.loading_message');\n var stateContainer = element.querySelector('.state_container');\n var progressPercent = element.querySelector('.state_container .percentage');\n var progressBar = element.querySelector('.state_container progress');\n element.addEventListener('ajax:before', function () {\n button.disabled = true;\n\n if (loadingMessage) {\n loadingMessage.classList.remove('hidden');\n }\n });\n element.addEventListener('ajax:complete', function () {\n button.disabled = false;\n\n if (loadingMessage) {\n loadingMessage.classList.add('hidden');\n }\n\n if (progressBar) {\n progressBar.value = '0';\n }\n });\n\n if (stateContainer) {\n element.addEventListener('ajax:beforeSend', function (event) {\n var request = event.detail[0];\n request.upload.addEventListener('progress', function (e) {\n var value = e.loaded / e.total;\n\n if (progressPercent) {\n progressPercent.innerHTML = value * 100 + '%';\n }\n\n if (progressBar) {\n progressBar.value = value;\n }\n });\n });\n }\n }\n};\nBiovision.components.autoExpand = {\n initialized: false,\n selector: 'textarea.auto-expand',\n elements: [],\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n\n /**\n *\n * @param {HTMLTextAreaElement} element\n */\n apply: function apply(element) {\n var component = Biovision.components.autoExpand;\n component.elements.push(element);\n element.addEventListener('focus', component.handler);\n element.addEventListener('input', component.handler);\n },\n handler: function handler() {\n if (!this.hasOwnProperty('baseScrollHeight')) {\n var savedValue = this.value;\n this.value = '';\n this.baseScrollHeight = this.scrollHeight;\n this.value = savedValue;\n }\n\n var styles = getComputedStyle(this);\n var ratio = styles.getPropertyValue('line-height').replace('px', '');\n var minRows = this.hasAttribute(\"data-min-rows\") ? parseInt(this.getAttribute(\"data-min-rows\")) : 5;\n var maxRows = this.hasAttribute('data-max-rows') ? parseInt(this.getAttribute('data-max-rows')) : 25;\n var rows = Math.ceil((this.scrollHeight - this.baseScrollHeight) / ratio);\n this.rows = minRows;\n this.rows = minRows + rows;\n\n if (this.rows > maxRows) {\n this.rows = maxRows;\n }\n }\n};\nBiovision.components.entityImageRemover = {\n initialized: false,\n selector: '.remove-image-button',\n elements: [],\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n apply: function apply(element) {\n var component = Biovision.components.entityImageRemover;\n component.elements.push(element);\n element.addEventListener('click', component.handler);\n },\n handler: function handler() {\n var button = this;\n\n if (!button.disabled) {\n var message = button.getAttribute('data-text');\n\n if (confirm(message)) {\n var url = button.getAttribute('data-url');\n var request = Biovision.newAjaxRequest('delete', url, function () {\n if (this.responseText) {\n var response = JSON.parse(this.responseText);\n var term = document.getElementById('entity-image');\n console.log(response);\n\n if (term) {\n term.remove();\n }\n\n button.parentNode.parentNode.remove();\n }\n });\n button.disabled = true;\n request.send();\n }\n }\n }\n};\nBiovision.components.imageRemover = {\n initialized: false,\n selector: \".js-image-remover\",\n buttons: [],\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n apply: function apply(button) {\n var component = Biovision.components.imageRemover;\n component.buttons.push(button);\n button.addEventListener(\"click\", component.handler);\n },\n handler: function handler(event) {\n var button = event.target;\n var container = document.getElementById(button.getAttribute(\"data-container\"));\n\n if (container && confirm(button.getAttribute(\"data-text\"))) {\n var image = container.querySelector(\"img\");\n var url = button.getAttribute(\"data-url\");\n var request = Biovision.jsonAjaxRequest(\"delete\", url, function () {\n var response = JSON.parse(this.responseText);\n\n if (response.hasOwnProperty(\"meta\")) {\n var meta = response.meta;\n\n if (meta.hasOwnProperty(\"result\") && meta.result) {\n image.src = button.getAttribute(\"data-blank-url\");\n button.remove();\n var link = image.closest(\"a\");\n\n if (link) {\n link.href = \"#\";\n }\n }\n }\n });\n button.disabled = true;\n request.send();\n }\n }\n};\nBiovision.components.ajaxDeleteButton = {\n initialized: false,\n selector: 'button.destroy[data-url]',\n elements: [],\n messages: {\n \"ru\": \"Вы уверены?\",\n \"en\": \"Are you sure?\"\n },\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n apply: function apply(element) {\n var component = Biovision.components.ajaxDeleteButton;\n component.elements.push(element);\n element.addEventListener('click', component.handler);\n },\n handler: function handler(event) {\n var messages = Biovision.components.ajaxDeleteButton.messages;\n var element = event.target;\n var message = messages.hasOwnProperty(Biovision.locale) ? messages[Biovision.locale] : 'Are you sure?';\n element.disabled = true;\n\n if (confirm(message)) {\n var url = element.getAttribute('data-url');\n var request = Biovision.newAjaxRequest('delete', url, function () {\n element.closest('li[data-id]').remove();\n });\n request.send();\n }\n\n element.disabled = false;\n }\n};\nBiovision.components.storage = {\n initialized: false,\n session: {\n set: function set(key, value) {\n Biovision.components.storage.set('sessionStorage', key, value);\n },\n get: function get(key) {\n return Biovision.components.storage.get('sessionStorage', key);\n },\n remove: function remove(key) {\n Biovision.components.storage.remove('sessionStorage', key);\n }\n },\n local: {\n set: function set(key, value) {\n Biovision.components.storage.set('localStorage', key, value);\n },\n get: function get(key) {\n return Biovision.components.storage.get('localStorage', key);\n },\n remove: function remove(key) {\n Biovision.components.storage.remove('localStorage', key);\n }\n },\n init: function init() {\n Biovision.storage = this;\n this.initialized = true;\n },\n available: function available(type) {\n try {\n var x = '__storage_test__';\n window[type].setItem(x, x);\n window[type].removeItem(x);\n return true;\n } catch (e) {\n return false;\n }\n },\n set: function set(type, key, value) {\n if (Biovision.components.storage.available(type)) {\n window[type].setItem(key, value);\n } else {\n console.log('set: Storage ' + type + ' is not available');\n }\n },\n get: function get(type, key) {\n if (Biovision.components.storage.available(type)) {\n return window[type].getItem(key);\n } else {\n console.log('get: Storage ' + type + ' is not available');\n return null;\n }\n },\n remove: function remove(type, key) {\n if (Biovision.components.storage.available(type)) {\n window[type].removeItem(key);\n } else {\n console.log('remove: Storage ' + type + ' is not available');\n }\n }\n}; // Кнопка удаления элемента через AJAX\n\nBiovision.components.destroyButton = {\n initialized: false,\n selector: 'div[data-destroy-url] button.destroy',\n elements: [],\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n apply: function apply(element) {\n var component = Biovision.components.destroyButton;\n component.elements.push(element);\n element.addEventListener('click', component.handler);\n },\n handler: function handler() {\n var container = this.closest('div[data-destroy-url]');\n var url = container.getAttribute('data-destroy-url');\n var request = Biovision.newAjaxRequest('DELETE', url, function () {\n container.remove();\n });\n this.setAttribute('disabled', 'true');\n request.send();\n }\n}; // Поиск пользователя в админке\n\nBiovision.components.userSearch = {\n initialized: false,\n selector: '.user-search button',\n elements: [],\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n apply: function apply(element) {\n var component = Biovision.components.userSearch;\n component.elements.push(element);\n element.addEventListener('click', component.handler);\n },\n handler: function handler() {\n var container = this.closest('.user-search');\n var input = container.querySelector('input[type=search]');\n var url = container.getAttribute('data-url') + '?q=' + encodeURIComponent(input.value);\n var request = Biovision.newAjaxRequest('GET', url, function () {\n var response = JSON.parse(this.responseText);\n var results = container.querySelector('.results');\n\n if (response.hasOwnProperty('meta')) {\n results.innerHTML = response['meta']['html'];\n results.querySelectorAll('li').forEach(function (li) {\n li.addEventListener('click', function (event) {\n var element = event.target;\n var target = document.getElementById(container.getAttribute('data-target'));\n target.value = element.getAttribute('data-id');\n });\n });\n }\n });\n request.send();\n }\n};\nBiovision.components.adminUserSearch = {\n initialized: false,\n selector: \".js-admin-user-search\",\n url: undefined,\n button: undefined,\n input: undefined,\n resultsContainer: undefined,\n callbackName: undefined,\n init: function init() {\n var container = document.querySelector(this.selector);\n\n if (container) {\n var component = this;\n this.url = container.getAttribute(\"data-url\");\n this.button = container.querySelector(\"button\");\n this.input = container.querySelector(\"input\");\n this.resultsContainer = container.querySelector(\"select\");\n this.callbackName = container.getAttribute(\"data-callback\");\n this.input.addEventListener(\"input\", component.changeInput);\n this.button.addEventListener(\"click\", component.clickButton);\n this.resultsContainer.addEventListener(\"change\", component.changeSelect);\n this.initialized = true;\n }\n },\n changeInput: function changeInput(event) {\n var component = Biovision.components.adminUserSearch;\n var input = event.target;\n component.button.disabled = input.value.length < 1;\n },\n clickButton: function clickButton(event) {\n var component = Biovision.components.adminUserSearch;\n var url = component.url + \"?q=\" + encodeURIComponent(component.input.value);\n Biovision.jsonAjaxRequest(\"get\", url, component.showResults).send();\n },\n changeSelect: function changeSelect(event) {\n var component = Biovision.components.adminUserSearch;\n var select = event.target;\n var option = select.options[select.selectedIndex];\n var id = parseInt(option.value);\n\n if (id > 0 && component.callbackName) {\n Biovision.execute(component.callbackName, window, id);\n option.disabled = true;\n }\n },\n showResults: function showResults() {\n var component = Biovision.components.adminUserSearch;\n var response = JSON.parse(this.responseText);\n component.resultsContainer.innerHTML = \"\";\n var option = document.createElement(\"option\");\n option.innerHTML = response[\"meta\"][\"count\"];\n option.value = \"\";\n component.resultsContainer.append(option);\n\n if (response.hasOwnProperty(\"data\")) {\n response.data.forEach(function (item) {\n var option = document.createElement(\"option\");\n option.setAttribute(\"value\", item.id);\n option.innerHTML = item[\"attributes\"][\"slug\"] + \" (\" + item[\"meta\"][\"name\"] + \")\";\n component.resultsContainer.append(option);\n });\n }\n }\n};\nBiovision.components.userPrivilege = {\n initialized: false,\n selector: \".js-component-added-users\",\n list: undefined,\n url: undefined,\n init: function init() {\n this.list = document.querySelector(this.selector);\n\n if (this.list) {\n this.url = this.list.getAttribute(\"data-url\");\n this.initialized = true;\n }\n },\n addUser: function addUser(id) {\n var component = Biovision.components.userPrivilege;\n\n if (component.url) {\n var data = {\n \"user_id\": id\n };\n var request = Biovision.jsonAjaxRequest(\"patch\", component.url, component.processAddResponse);\n request.send(JSON.stringify(data));\n } else {\n console.log(\"URL is not set for userPrivilege component\");\n }\n },\n processAddResponse: function processAddResponse() {\n var component = Biovision.components.userPrivilege;\n\n if (component.list) {\n var response = JSON.parse(this.responseText);\n\n if (response.hasOwnProperty(\"data\")) {\n var data = response[\"data\"];\n var li = document.createElement(\"li\");\n var user = data[\"relationships\"][\"user\"][\"data\"];\n var div = document.createElement(\"div\");\n div.innerHTML = user[\"attributes\"][\"screen_name\"] + \" (\" + user[\"meta\"][\"full_name\"] + \")\";\n li.append(div);\n var linkData = data[\"attributes\"][\"data\"];\n\n if (Object.keys(linkData).length > 0) {\n var details = document.createElement(\"div\");\n details.innerHTML = JSON.stringify(linkData);\n li.append(details);\n }\n\n component.list.append(li);\n }\n } else {\n console.log(\"List is not defined for userPrivilege component\");\n }\n }\n};\n/**\n * Hide popups when clicking outside\n *\n * @type {Object}\n */\n\nBiovision.components.hidingPopups = {\n /**\n * @type {Boolean}\n */\n initialized: false,\n\n /**\n * @type {String}\n */\n selector: '.hiding-popup-container .popup-control',\n\n /**\n * List of control checkboxes\n *\n * @type {Array}\n */\n elements: [],\n\n /**\n * Initialize component\n */\n init: function init() {\n var component = this;\n this.elements = [];\n document.querySelectorAll(this.selector).forEach(component.addElement);\n document.addEventListener('click', component.handler);\n this.initialized = true;\n },\n\n /**\n * Add container to list\n *\n * @param {HTMLInputElement} element\n */\n addElement: function addElement(element) {\n Biovision.components.hidingPopups.elements.push(element);\n },\n\n /**\n * Handle click\n *\n * @param {Event} event\n * @type {Function}\n */\n handler: function handler(event) {\n var component = Biovision.components.hidingPopups;\n var selector = '.hiding-popup-container *';\n var target = event.target;\n\n if (target.matches(selector)) {\n var container = target.closest('.hiding-popup-container');\n var checkbox = container.querySelector(component.selector);\n component.elements.forEach(function (element) {\n if (element !== checkbox) {\n element.checked = false;\n }\n });\n } else {\n component.elements.forEach(function (checkbox) {\n checkbox.checked = false;\n });\n }\n }\n};\nBiovision.components.componentParameters = {\n initialized: false,\n container: undefined,\n url: undefined,\n list: undefined,\n elements: [],\n init: function init() {\n this.container = document.getElementById(\"biovision-component-parameters\");\n\n if (this.container) {\n this.url = this.container.getAttribute(\"data-url\");\n this.list = this.container.querySelector(\"dl\");\n this.list.querySelectorAll(\"input\").forEach(this.apply);\n this.initialized = true;\n }\n },\n\n /**\n *\n * @param {HTMLElement} element\n * @type {Function}\n */\n apply: function apply(element) {\n var component = Biovision.components.componentParameters;\n component.elements.push(element);\n element.addEventListener(\"change\", component.change);\n },\n change: function change(event) {\n var component = Biovision.components.componentParameters;\n var element = event.target;\n var data = {\n \"key\": {\n \"slug\": element.name,\n \"value\": element.value\n }\n };\n var request = Biovision.jsonAjaxRequest(\"patch\", component.url, function () {\n element.disabled = false;\n element.classList.add(\"updated\");\n }, function () {\n element.disabled = false;\n element.classList.add(\"failed\");\n });\n element.classList.remove(\"updated\", \"failed\");\n element.disabled = true;\n request.send(JSON.stringify(data));\n },\n add: function add(data) {\n var div = document.createElement(\"div\");\n var dt = document.createElement(\"dt\");\n var label = document.createElement(\"label\");\n var elementId = \"parameter-\" + data[\"slug\"];\n label.setAttribute(\"for\", elementId);\n label.innerHTML = data[\"slug\"];\n dt.append(label);\n var dd = document.createElement(\"dd\");\n var input = document.createElement(\"input\");\n input.setAttribute(\"id\", elementId);\n input.setAttribute(\"name\", data[\"slug\"]);\n input.value = data[\"value\"];\n dd.append(input);\n this.apply(input);\n div.append(dt);\n div.append(dd);\n this.list.append(div);\n }\n};\nBiovision.components.newComponentParameter = {\n initialized: false,\n container: undefined,\n url: undefined,\n button: undefined,\n init: function init() {\n this.container = document.getElementById(\"biovision-component-new-parameter\");\n\n if (this.container) {\n var component = this;\n this.url = this.container.getAttribute(\"data-url\");\n this.button = this.container.querySelector(\"button\");\n this.button.addEventListener(\"click\", component.click);\n this.initialized = true;\n }\n },\n click: function click() {\n var component = Biovision.components.newComponentParameter;\n var data = {\n \"key\": {}\n };\n var dataPresent = true;\n component.container.querySelectorAll(\"input\").forEach(function (input) {\n dataPresent &= input.value.length > 0;\n data.key[input.name] = input.value;\n });\n\n if (dataPresent) {\n var request = Biovision.jsonAjaxRequest(\"patch\", component.url, function () {\n component.container.querySelectorAll(\"input\").forEach(function (input) {\n input.value = '';\n });\n Biovision.components.componentParameters.add(data[\"key\"]);\n component.button.disabled = false;\n }, function () {\n component.button.disabled = false;\n });\n component.button.disabled = true;\n request.send(JSON.stringify(data));\n }\n }\n};\nBiovision.components.cookieNotifier = {\n initialized: false,\n selector: \"cookie-info\",\n container: undefined,\n button: undefined,\n init: function init() {\n this.container = document.getElementById(this.selector);\n\n if (this.container) {\n var handler = this.handler;\n this.button = this.container.querySelector(\"button\");\n\n if (this.button) {\n this.button.addEventListener(\"click\", handler);\n }\n\n this.initialized = true;\n }\n },\n handler: function handler() {\n var component = Biovision.components.cookieNotifier;\n var date = new Date();\n date.setTime(date.getTime() + 31536000000);\n document.cookie = \"f=1;path=/;expires=\" + date.toUTCString();\n component.container.remove();\n }\n};\nBiovision.components.animatedNumbers = {\n initialized: false,\n selector: \".js-animated-numbers\",\n containers: [],\n breakpoints: {},\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.addContainer);\n\n if (this.containers.length > 0) {\n var component = this;\n window.addEventListener(\"scroll\", component.watch);\n }\n\n this.initialized = true;\n },\n addContainer: function addContainer(element) {\n var component = Biovision.components.animatedNumbers;\n var container = {\n \"element\": element,\n \"animated\": false,\n \"items\": []\n };\n\n if (element.hasAttribute(\"data-time\")) {\n container[\"time\"] = parseInt(element.getAttribute(\"data-time\"));\n } else {\n container[\"time\"] = 3000;\n }\n\n container[\"stepCount\"] = Math.ceil(container[\"time\"] / 50);\n element.querySelectorAll(\".value\").forEach(function (value) {\n component.addItem(container, value);\n });\n component.containers.push(container);\n },\n addItem: function addItem(container, element) {\n var item = {\n \"element\": element,\n \"initialValue\": parseInt(element.innerHTML),\n \"stepNumber\": 0\n };\n element.innerHTML = \"\";\n container.items.push(item);\n },\n watch: function watch() {\n var component = Biovision.components.animatedNumbers;\n component.containers.forEach(function (container) {\n if (container.animated) {\n return;\n }\n\n var box = container.element.getBoundingClientRect();\n\n if (box.y < window.innerHeight / 1.75) {\n component.animate(container);\n }\n });\n },\n animate: function animate(container) {\n var component = Biovision.components.animatedNumbers;\n container.items.forEach(function (item) {\n component.increment(item, container.stepCount);\n });\n container.animated = true;\n },\n increment: function increment(item, stepCount) {\n var component = Biovision.components.animatedNumbers;\n\n if (item.stepNumber < stepCount) {\n item.stepNumber++;\n item.element.innerHTML = Math.min(Math.ceil(item.initialValue / stepCount * item.stepNumber), item.initialValue);\n window.setTimeout(component.increment, 50, item, stepCount);\n }\n }\n};\nBiovision.components.carousel = {\n /**\n * Component is initialized\n *\n * @type {Boolean}\n */\n initialized: false,\n\n /**\n * Selector string for matching carousel containers\n *\n * @type {String}\n */\n selector: \".js-biovision-carousel\",\n\n /**\n * Wrappers for found carousel containers\n *\n * @type {Array}\n */\n sliders: [],\n\n /**\n * Initializer\n */\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n\n /**\n * Apply carousel behavior to container\n *\n * @param {HTMLElement} element\n */\n apply: function apply(element) {\n var component = Biovision.components.carousel;\n var slider = {\n \"element\": element,\n \"container\": element.querySelector(\".carousel-container\"),\n \"items\": element.querySelectorAll(\".carousel-item\"),\n \"prevButton\": element.querySelector(\"button.prev\"),\n \"nextButton\": element.querySelector(\"button.next\"),\n \"current\": 0,\n \"touchData\": {\n \"x\": null,\n \"y\": null\n },\n \"lastSlide\": 0,\n \"ready\": false\n };\n\n if (element.hasAttribute(\"data-type\")) {\n slider[\"type\"] = element.getAttribute(\"data-type\");\n } else {\n slider[\"type\"] = \"offset\";\n }\n\n if (element.hasAttribute(\"data-timeout\")) {\n slider[\"timeout\"] = parseInt(element.getAttribute(\"data-timeout\"));\n\n if (slider[\"timeout\"] > 0) {\n slider[\"timeout_handler\"] = window.setInterval(component.autoSlide, slider[\"timeout\"], slider);\n }\n }\n\n if (slider[\"prevButton\"]) {\n slider[\"prevButton\"].addEventListener(\"click\", component.clickedPrev);\n }\n\n if (slider[\"nextButton\"]) {\n slider[\"nextButton\"].addEventListener(\"click\", component.clickedNext);\n }\n\n slider[\"transition\"] = parseFloat(getComputedStyle(slider[\"items\"][0]).transitionDuration) * 1000;\n slider[\"maxItem\"] = slider[\"items\"].length - 1;\n element.addEventListener(\"touchstart\", component.touchStart, false);\n element.addEventListener(\"touchend\", component.touchEnd, false);\n component.sliders.push(slider);\n component.rearrange(slider);\n },\n\n /**\n * Rearrange items in carousel\n *\n * @param {Object} slider\n */\n rearrange: function rearrange(slider) {\n var component = Biovision.components.carousel;\n\n switch (slider[\"type\"]) {\n case \"current-item\":\n component.newCurrentItem(slider);\n break;\n\n case \"offset\":\n component.setMaxItem(slider);\n component.newOffset(slider);\n break;\n\n case \"offset-cycle\":\n component.processCycle(slider);\n break;\n\n default:\n console.log(\"Unknown carousel type: \" + slider[\"type\"]);\n component.newOffset(slider);\n }\n\n slider[\"ready\"] = true;\n },\n\n /**\n * Handler for clicking \"Previous\" button\n *\n * @param {Event} event\n */\n clickedPrev: function clickedPrev(event) {\n var component = Biovision.components.carousel;\n var slider = component.getSlider(event.target);\n component.prevItem(slider);\n },\n\n /**\n * Handler for clicking \"Next\" button\n *\n * @param {Event} event\n */\n clickedNext: function clickedNext(event) {\n var component = Biovision.components.carousel;\n var slider = component.getSlider(event.target);\n component.nextItem(slider);\n },\n\n /**\n * Get wrapper for slider\n *\n * @param {HTMLElement|EventTarget} element\n * @returns {Object}\n */\n getSlider: function getSlider(element) {\n var slider = element.closest(this.selector);\n\n for (var i = 0; i < this.sliders.length; i++) {\n if (this.sliders[i].element === slider) {\n return this.sliders[i];\n }\n }\n },\n\n /**\n * Check if it's time to move to next slide in auto-interval\n *\n * @param {Object} slider\n */\n autoSlide: function autoSlide(slider) {\n var component = Biovision.components.carousel;\n var delta = Date.now() - slider[\"lastSlide\"]; // Adding 5% uncertainty to timeout for delays between calls\n\n if (delta >= slider[\"timeout\"] * 0.95) {\n component.nextItem(slider);\n }\n },\n\n /**\n * Slide to next item\n *\n * @param {Object} slider\n */\n nextItem: function nextItem(slider) {\n var component = Biovision.components.carousel;\n slider[\"current\"]++;\n\n if (slider[\"current\"] > slider[\"maxItem\"]) {\n slider[\"current\"] = 0;\n }\n\n slider[\"lastSlide\"] = Date.now();\n component.rearrange(slider);\n },\n\n /**\n * Slide to previous item\n *\n * @param {Object} slider\n */\n prevItem: function prevItem(slider) {\n var component = Biovision.components.carousel;\n slider[\"current\"]--;\n\n if (slider[\"current\"] < 0) {\n slider[\"current\"] = slider[\"maxItem\"];\n }\n\n component.rearrange(slider);\n },\n\n /**\n * Mark new item as current\n *\n * @param {Object} slider\n */\n newCurrentItem: function newCurrentItem(slider) {\n var selector = \".carousel-item:nth-of-type(\" + (slider.current + 1) + \")\";\n var currentSlide = slider.container.querySelector(\".carousel-item.current\");\n\n if (currentSlide) {\n currentSlide.classList.remove(\"current\");\n }\n\n slider.container.querySelector(selector).classList.add(\"current\");\n },\n\n /**\n * Change margin of the leftmost slide\n *\n * @param {Object} slider\n */\n newOffset: function newOffset(slider) {\n var firstSlide = slider.container.querySelector(\".carousel-item:first-of-type\");\n\n if (firstSlide) {\n var rightMargin = window.getComputedStyle(firstSlide).marginRight;\n var slideWidth = firstSlide.offsetWidth + parseInt(rightMargin);\n var newMargin = -(slideWidth * slider.current);\n var slidesLength = slideWidth * slider.items.length;\n var maxOffset = slidesLength - slider.container.offsetWidth;\n var delta = newMargin + maxOffset;\n\n if (delta < 0) {\n newMargin -= delta;\n slider[\"current\"] = slider[\"maxItem\"];\n }\n\n firstSlide.style.marginLeft = String(newMargin) + \"px\";\n }\n },\n processCycle: function processCycle(slider) {\n if (slider[\"ready\"]) {\n if (slider[\"current\"] === 1) {\n this.newOffset(slider);\n window.setTimeout(this.offsetLeft, slider[\"transition\"], slider);\n } else {\n this.offsetRight(slider);\n }\n\n slider[\"current\"] = 0;\n }\n },\n offsetLeft: function offsetLeft(slider) {\n var list = slider[\"container\"];\n var element = list.querySelector(\".carousel-item:first-of-type\");\n list.append(element);\n element.style.setProperty(\"margin-left\", 0);\n },\n offsetRight: function offsetRight(slider) {\n var list = slider[\"container\"];\n var element = list.querySelector(\".carousel-item:last-of-type\");\n var styles = getComputedStyle(element);\n\n var clear = function clear() {\n element.style.marginLeft = null;\n };\n\n element.style.transitionDuration = 0;\n var rightMargin = styles.marginRight;\n var slideWidth = element.offsetWidth + parseInt(rightMargin);\n element.style.marginLeft = String(-slideWidth) + \"px\";\n list.prepend(element);\n element.style.transitionDuration = null;\n window.setTimeout(clear, 50);\n },\n\n /**\n * Determine maximum item number so that right margin remains minimal\n *\n * @param {Object} slider\n */\n setMaxItem: function setMaxItem(slider) {\n var firstSlide = slider.container.querySelector(\".carousel-item:first-of-type\");\n\n if (firstSlide) {\n var rightMargin = window.getComputedStyle(firstSlide).marginRight;\n var slideWidth = firstSlide.offsetWidth + parseInt(rightMargin);\n var maxCount = slider.container.offsetWidth / slideWidth;\n slider[\"maxItem\"] = slider.items.length - Math.floor(maxCount);\n }\n },\n\n /**\n * Handler for start of swipe\n *\n * @param {TouchEvent} event\n * @type {Function}\n */\n touchStart: function touchStart(event) {\n var component = Biovision.components.carousel;\n var slider = component.getSlider(event.target);\n slider[\"touchData\"] = {\n \"x\": event.changedTouches[0].pageX,\n \"y\": event.changedTouches[0].pageY\n };\n },\n\n /**\n * Handler for end of swipe\n *\n * @param {TouchEvent} event\n * @type {Function}\n */\n touchEnd: function touchEnd(event) {\n var component = Biovision.components.carousel;\n var slider = component.getSlider(event.target);\n var x = event.changedTouches[0].pageX;\n var y = event.changedTouches[0].pageY;\n var deltaX = Math.abs(x - slider[\"touchData\"][\"x\"]);\n var deltaY = Math.abs(y - slider[\"touchData\"][\"y\"]);\n\n if (deltaX > deltaY) {\n if (x < slider[\"touchData\"][\"x\"]) {\n component.nextItem(slider);\n } else if (x > slider[\"touchData\"][\"x\"]) {\n component.prevItem(slider);\n }\n }\n\n slider[\"touchData\"] = {\n \"x\": null,\n \"y\": null\n };\n }\n};\nvar Notifications = {\n initialized: false,\n autoInitComponents: true,\n components: {},\n init: function init() {\n this.initialized = true;\n }\n};\nNotifications.components.markAsRead = {\n initialized: false,\n selector: \".notifications-list .unread\",\n items: {},\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n apply: function apply(element) {\n var component = Notifications.components.markAsRead;\n var id = element.getAttribute(\"data-id\");\n component.items[id] = element;\n element.addEventListener(\"mouseover\", component.handler);\n },\n handler: function handler(event) {\n var component = Notifications.components.markAsRead;\n var element = event.target.closest(\".unread\");\n\n if (element) {\n var url = element.getAttribute(\"data-url\");\n Biovision.jsonAjaxRequest(\"put\", url, function () {\n element.classList.remove(\"unread\");\n }).send();\n element.removeEventListener(\"mouseover\", component.handler);\n }\n }\n};\nNotifications.components.deleteNotification = {\n initialized: false,\n selector: \".notifications-list button\",\n items: {},\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n apply: function apply(element) {\n var li = element.closest(\"li\");\n var id = li.getAttribute(\"data-id\");\n var component = Notifications.components.deleteNotification;\n component.items[id] = element;\n element.addEventListener(\"click\", component.handler);\n },\n handler: function handler(event) {\n var button = event.target;\n var url = button.getAttribute(\"data-url\");\n button.disabled = true;\n var request = Biovision.jsonAjaxRequest(\"delete\", url, function () {\n button.closest(\"li\").remove();\n });\n request.send();\n }\n};\nwindow.Notifications = Notifications;\nBiovision.components.notifications = Notifications;\nBiovision.components.oembed = {\n initialized: false,\n selector: \"oembed\",\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.replace);\n this.initialized = true;\n },\n replace: function replace(element) {\n var component = Biovision.components.oembed;\n var url = element.getAttribute(\"url\");\n\n if (url) {\n var replacement = component.receive(url);\n element.parentElement.replaceChild(replacement, element);\n }\n },\n fallback: function fallback(url) {\n var div = document.createElement(\"div\");\n var element = document.createElement(\"a\");\n element.setAttribute(\"rel\", \"external nofollow noopener noreferrer\");\n element.setAttribute(\"target\", \"_blank\");\n element.href = url;\n element.innerHTML = element.hostname;\n div.append(element);\n return div;\n },\n hostname: function hostname(url) {\n var element = document.createElement(\"a\");\n element.href = url;\n return element.hostname;\n },\n receive: function receive(remoteUrl) {\n var div = document.createElement(\"div\");\n var url = \"/oembed?url=\" + encodeURIComponent(remoteUrl);\n var query = Biovision.jsonAjaxRequest(\"get\", url, function () {\n var response = JSON.parse(this.responseText);\n\n if (response.hasOwnProperty(\"meta\")) {\n var doc = new DOMParser().parseFromString(response[\"meta\"][\"code\"], \"text/html\");\n doc.querySelectorAll(\"body > *\").forEach(function (element) {\n if (element.nodeName.toLocaleLowerCase() === \"script\") {\n var scriptElement = document.createElement(\"script\");\n scriptElement.src = element.src;\n\n if (element.hasAttribute(\"async\")) {\n scriptElement.setAttribute(\"async\", \"\");\n }\n\n div.append(scriptElement);\n } else {\n div.append(element);\n }\n });\n }\n });\n query.send();\n return div;\n }\n};\nvar Socialization = {\n initialized: false,\n components: {},\n autoInitComponents: true,\n init: function init() {\n this.initialized = true;\n }\n};\n/**\n * Sending messages to other users\n *\n * @type {Object}\n */\n\nSocialization.components.messageSender = {\n /**\n * @type {Boolean}\n */\n initialized: false,\n\n /**\n * HTML id for selecting container\n *\n * @type {String}\n */\n selector: \"user_messages\",\n\n /**\n * Container for widget\n *\n * @type {HTMLDivElement}\n */\n container: undefined,\n\n /**\n * UL element for displaying messages\n *\n * @type {HTMLUListElement}\n */\n list: undefined,\n\n /**\n * \"Send\" button\n *\n * @type {HTMLButtonElement}\n */\n button: undefined,\n\n /**\n * Textarea field for entering new message text\n *\n * @type {HTMLTextAreaElement}\n */\n field: undefined,\n\n /**\n * Loader button for receiving next page\n *\n * @type {HTMLButtonElement}\n */\n loader: undefined,\n\n /**\n * URL for new messages\n *\n * @type {String}\n */\n url: undefined,\n init: function init() {\n this.container = document.getElementById(this.selector);\n\n if (this.container) {\n this.url = this.container.getAttribute(\"data-url\");\n this.list = this.container.querySelector(\".user_messages-list\");\n this.field = this.container.querySelector(\"textarea\");\n this.button = this.container.querySelector(\".actions button\");\n this.loader = this.container.querySelector(\".user_messages-loader\");\n this.field.addEventListener(\"keyup\", this.keyup);\n this.button.addEventListener(\"click\", this.send);\n this.loader.addEventListener(\"click\", this.loadMessages);\n this.initialized = true;\n this.loadMessages();\n }\n },\n\n /**\n * Handler for checking new message length\n *\n * @type {Function}\n */\n keyup: function keyup() {\n var component = Socialization.components.messageSender;\n var message = component.field.value.trim();\n component.button.disabled = message.length < 1;\n },\n send: function send() {\n var component = Socialization.components.messageSender;\n var request = Biovision.jsonAjaxRequest(\"post\", component.url, component.processPost, null);\n var data = {\n \"user_message\": {\n \"body\": component.field.value\n }\n };\n component.button.disabled = true;\n request.send(JSON.stringify(data));\n },\n processPost: function processPost() {\n var component = Socialization.components.messageSender;\n var response = JSON.parse(this.responseText);\n\n if (response.hasOwnProperty(\"data\")) {\n component.addMessage(response.data, true);\n component.field.value = \"\";\n }\n },\n\n /**\n * Append or prepend message to list\n *\n * @param {Object} data\n * @param {boolean} append\n * @type {Function}\n */\n addMessage: function addMessage(data, append) {\n var component = Socialization.components.messageSender;\n\n if (data.hasOwnProperty(\"meta\")) {\n var li = document.createElement(\"li\");\n li.classList.add(data[\"meta\"][\"direction\"]);\n li.innerHTML = data[\"meta\"][\"html\"];\n\n if (append) {\n component.list.append(li);\n } else {\n component.list.prepend(li);\n }\n }\n },\n\n /**\n * @type {Function}\n */\n loadMessages: function loadMessages() {\n var component = Socialization.components.messageSender;\n var url = component.loader.getAttribute(\"data-url\");\n var request = Biovision.jsonAjaxRequest(\"get\", url, component.processGet, null);\n component.loader.disabled = true;\n request.send();\n },\n processGet: function processGet() {\n var component = Socialization.components.messageSender;\n var response = JSON.parse(this.responseText);\n\n if (response.hasOwnProperty(\"data\")) {\n response[\"data\"].forEach(function (data) {\n component.addMessage(data, false);\n });\n component.loader.disabled = false;\n }\n\n if (response.hasOwnProperty(\"links\")) {\n if (response[\"links\"].hasOwnProperty(\"next\")) {\n component.loader.setAttribute(\"data-url\", response[\"links\"][\"next\"]);\n } else {\n component.loader.remove();\n }\n } else {\n component.loader.remove();\n }\n }\n};\nSocialization.components.messageCounter = {\n initialized: false,\n selector: \"unread-message-count\",\n container: undefined,\n init: function init() {\n this.container = document.getElementById(this.selector);\n\n if (this.container && this.container.hasAttribute(\"data-url\")) {\n this.process();\n }\n\n this.initialized = true;\n },\n process: function process() {\n var url = this.container.getAttribute(\"data-url\");\n var container = this.container;\n var request = Biovision.jsonAjaxRequest(\"get\", url, function () {\n var response = JSON.parse(this.responseText);\n\n if (response.hasOwnProperty(\"meta\")) {\n var messageCount = parseInt(response[\"meta\"][\"count\"]);\n\n if (messageCount > 0) {\n container.innerHTML = messageCount;\n }\n }\n });\n request.send();\n }\n};\nwindow.Socialization = Socialization;\nBiovision.components.socialization = Socialization;\n/**\n * Stretch videos inserted by WYSIWYG applying proportional-container\n *\n * @author Maxim Khan-Magomedov \n * @type {Object}\n */\n\nBiovision.components.videoStretcher = {\n /**\n * Component is initialized\n *\n * @type {boolean}\n */\n initialized: false,\n\n /**\n * Selector for matching embedded videos\n *\n * @type {string}\n */\n selector: 'figure.media iframe[src^=\"https://www.you\"]',\n\n /**\n * List of matched items\n *\n * @type {array}\n */\n items: [],\n\n /**\n * Initializer\n *\n * @type {function}\n */\n init: function init() {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n\n /**\n * Callback for applying stretch\n *\n * @param {HTMLElement} element\n */\n apply: function apply(element) {\n var component = Biovision.components.videoStretcher;\n var figure = element.closest(\"figure.media\");\n\n if (figure) {\n component.items.push(figure);\n figure.classList.add(\"proportional-container\");\n figure.classList.add(\"r-16x9\");\n }\n }\n};\nwindow.Biovision = Biovision;\ndocument.addEventListener('DOMContentLoaded', function () {\n Biovision.init();\n document.addEventListener('click', function (event) {\n var element = event.target; // Запирание/отпирание сущности (иконка с замком)\n\n if (element.matches('li.lock > a img')) {\n event.preventDefault();\n var container = element.closest('li');\n var button = element.closest('a');\n var lockable = container.parentElement.querySelectorAll('.lockable');\n var url = container.getAttribute('data-url');\n\n if (url.length > 1) {\n var method = button.classList.contains('lock') ? 'PUT' : 'DELETE';\n var request = Biovision.newAjaxRequest(method, url, function () {\n var response = JSON.parse(this.responseText);\n\n if (response.hasOwnProperty('data') && response['data'].hasOwnProperty('locked')) {\n var locked = response['data']['locked'];\n\n if (locked) {\n lockable.forEach(function (button) {\n button.classList.add('hidden');\n });\n } else {\n lockable.forEach(function (button) {\n button.classList.remove('hidden');\n });\n }\n\n container.querySelectorAll('a').forEach(function (button) {\n var classes = button.classList;\n\n if (classes.contains('lock')) {\n locked ? classes.add('hidden') : classes.remove('hidden');\n } else {\n locked ? classes.remove('hidden') : classes.add('hidden');\n }\n });\n }\n });\n request.send();\n }\n } // Переключение флагов сущности\n\n\n if (element.matches('div.toggleable > span')) {\n if (!element.classList.contains('switch')) {\n var _url = element.parentNode.getAttribute('data-url');\n\n var parameter = element.getAttribute('data-flag');\n\n var onSuccess = function onSuccess() {\n var response = JSON.parse(this.responseText);\n\n if (response.hasOwnProperty('data')) {\n switch (response['data'][parameter]) {\n case true:\n element.className = 'active';\n break;\n\n case false:\n element.className = 'inactive';\n break;\n\n default:\n element.className = 'unknown';\n }\n } else {\n element.className = 'unknown';\n }\n };\n\n var onFailure = function onFailure() {\n element.className = 'unknown';\n Biovision.handleAjaxFailure().call(this);\n };\n\n var _request = Biovision.newAjaxRequest('POST', _url, onSuccess, onFailure);\n\n var data = new FormData();\n data.append('parameter', parameter);\n element.className = 'switch';\n\n _request.send(data);\n }\n } // Изменение порядка сортировки элементов\n\n\n if (element.matches('li.priority-changer > button')) {\n var delta = parseInt(element.getAttribute('data-delta'));\n\n var _url2 = element.parentNode.getAttribute('data-url');\n\n var item = element.closest('li[data-number]');\n\n if (parseInt(item.getAttribute('data-number')) + delta > 0) {\n var _onSuccess = function _onSuccess() {\n var response = JSON.parse(this.responseText);\n\n if (response.hasOwnProperty('data')) {\n var _data2 = response.data;\n var _container = item.parentNode;\n var list = Array.prototype.slice.call(_container.children);\n\n if (_data2.hasOwnProperty('priority')) {\n item.setAttribute('data-number', _data2.priority);\n } else {\n for (var entity_id in _data2) {\n if (_data2.hasOwnProperty(entity_id)) {\n item = _container.querySelector('li[data-id=\"' + entity_id + '\"]');\n item.setAttribute('data-number', _data2[entity_id]);\n }\n }\n }\n\n list.sort(function (a, b) {\n var an = parseInt(a.getAttribute('data-number'));\n var bn = parseInt(b.getAttribute('data-number'));\n\n if (an > bn) {\n return 1;\n } else if (an < bn) {\n return -1;\n } else {\n return 0;\n }\n }).forEach(function (item) {\n _container.appendChild(item);\n });\n }\n };\n\n var _request2 = Biovision.newAjaxRequest('POST', _url2, _onSuccess);\n\n var _data = new FormData();\n\n _data.append('delta', String(delta));\n\n _request2.send(_data);\n }\n }\n });\n});\n/**\n * Workaround for defective Safari behaviour with empty files\n * @see https://github.com/rails/rails/issues/32440\n */\n\ndocument.addEventListener('ajax:beforeSend', function (e) {\n var formData = e.detail[1].data;\n\n if (!(formData instanceof FormData) || !formData.keys) {\n return;\n }\n\n var newFormData = new FormData();\n Array.from(formData.entries()).forEach(function (entry) {\n var value = entry[1];\n\n if (value instanceof window.File && value.name === '' && value.size === 0) {\n newFormData.append(entry[0], new window.Blob([]), '');\n } else {\n newFormData.append(entry[0], value);\n }\n });\n e.detail[1].data = newFormData;\n});","const Demoshop = {\n initialized: false,\n components: {},\n autoInitComponents: true,\n attachComponents: function (container) {\n Demoshop.components.popupLoader.useContainer(container);\n Demoshop.components.inputMasks.useContainer(container);\n Demoshop.components.rangeValues.useContainer(container);\n Demoshop.components.popupForms.useContainer(container);\n Demoshop.components.localForm.useContainer(container);\n Demoshop.components.decrementTimeout.useContainer(container);\n }\n}\n\nDemoshop.components.popupLoader = {\n initialized: false,\n selector: \"[data-popup]\",\n container: undefined,\n control: undefined,\n wrapper: undefined,\n elements: [],\n init: function () {\n this.container = document.getElementById(\"main-popup\");\n this.wrapper = document.getElementById(\"main-popup-wrapper\");\n this.control = document.getElementById(\"main-popup-control\")\n this.useContainer(document);\n this.initialized = true;\n },\n useContainer: function (container) {\n container.querySelectorAll(this.selector).forEach(this.apply);\n },\n apply: function (element) {\n const component = Demoshop.components.popupLoader;\n component.elements.push(element);\n element.addEventListener(\"click\", component.handle);\n },\n handle: function (event) {\n event.preventDefault();\n\n const component = Demoshop.components.popupLoader;\n const element = event.target.closest(component.selector);\n const url = element.getAttribute(\"data-popup\");\n component.load(url);\n },\n load: function (url) {\n this.control.checked = true;\n const request = Biovision.jsonAjaxRequest(\"get\", url, this.processResponse, this.closePopup);\n request.send();\n },\n processResponse: function () {\n const component = Demoshop.components.popupLoader;\n const response = JSON.parse(this.responseText);\n if (response.hasOwnProperty(\"meta\")) {\n const meta = response.meta;\n if (meta.hasOwnProperty(\"content\")) {\n component.updateContent(meta.content);\n } else {\n component.updateContent(\"\");\n }\n if (meta.hasOwnProperty(\"faq\")) {\n component.updateFaq(meta.faq);\n } else {\n component.updateFaq(\"\");\n }\n if (meta.hasOwnProperty(\"components\")) {\n const container = component.container.querySelector(\".content\");\n meta.components.forEach(key => component.useComponent(key, container))\n }\n if (meta.hasOwnProperty(\"max_width\")) {\n component.wrapper.style.setProperty(\"--max-width\", meta.max_width);\n } else {\n component.wrapper.style.removeProperty(\"--max-width\");\n }\n }\n },\n closePopup: function () {\n const component = Demoshop.components.popupLoader;\n component.control.checked = false;\n },\n updateContent: function (newContent) {\n const component = Demoshop.components.popupLoader;\n const container = component.container.querySelector(\".content\");\n container.innerHTML = newContent;\n Demoshop.attachComponents(container);\n },\n updateFaq: function (newContent) {\n const component = Demoshop.components.popupLoader;\n const container = component.container.querySelector(\".faq-container\");\n container.innerHTML = newContent;\n },\n useComponent: function (key, container) {\n if (Demoshop.components.hasOwnProperty(key)) {\n Demoshop.components[key].useContainer(container);\n }\n }\n}\n\nDemoshop.components.popupForms = {\n initialized: false,\n selector: \".js-popup-form\",\n forms: [],\n init: function () {\n this.useContainer(document);\n this.initialized = true;\n },\n useContainer: function (container) {\n container.querySelectorAll(this.selector).forEach(this.apply);\n },\n apply: function (form) {\n const component = Demoshop.components.popupForms;\n component.forms.push(form);\n form.addEventListener(\"submit\", component.handle);\n },\n handle: function (event) {\n event.preventDefault();\n const form = event.target;\n Demoshop.components.popupLoader.load(form.action);\n }\n}\n\nDemoshop.components.inputMasks = {\n initialized: false,\n selector: '[data-mask]',\n items: [],\n init: function () {\n this.useContainer(document);\n this.initialized = true;\n },\n useContainer: function (container) {\n const component = Demoshop.components.inputMasks;\n container.querySelectorAll(component.selector).forEach(component.apply);\n },\n apply: function (element) {\n const component = Demoshop.components.inputMasks;\n component.items.push(new IMask(element, {mask: element.getAttribute(\"data-mask\")}))\n }\n}\n\nDemoshop.components.rangeValues = {\n initialized: false,\n selector: \"input[data-value]\",\n items: [],\n init: function () {\n this.useContainer(document);\n this.initialized = true;\n },\n useContainer: function (container) {\n container.querySelectorAll(this.selector).forEach(this.apply);\n },\n apply: function (element) {\n const component = Demoshop.components.rangeValues;\n component.items.push(element);\n element.addEventListener(\"input\", component.handle);\n },\n handle: function (event) {\n const element = event.target;\n const containerId = element.getAttribute(\"data-value\");\n const container = document.getElementById(containerId);\n if (container) {\n container.innerHTML = element.value;\n }\n }\n}\n\nDemoshop.components.autoPopup = {\n initialized: false,\n selector: \".js-auto-popup\",\n init: function () {\n document.querySelectorAll(this.selector).forEach(this.apply);\n this.initialized = true;\n },\n apply: function (element) {\n const url = element.getAttribute(\"data-popup\");\n Demoshop.components.popupLoader.load(url);\n }\n}\n\nDemoshop.components.quantitySelector = {\n selector: \".quantity-selector button\",\n buttons: [],\n init: function () {\n document.querySelectorAll(this.selector).forEach(this.apply);\n },\n apply: function (element) {\n const component = Demoshop.components.quantitySelector;\n component.buttons.push(element);\n element.addEventListener(\"click\", component.handle);\n },\n handle: function (event) {\n const button = event.target;\n const field = button.parentNode.querySelector(\"input\");\n const delta = button.classList.contains(\"increment\") ? 1 : -1;\n field.value = String(parseInt(field.value) + delta);\n if (parseInt(field.value) < 1) {\n field.value = \"1\";\n }\n }\n}\n\nDemoshop.components.localForm = {\n selector: \".js-local-form\",\n forms: [],\n init: function () {\n this.useContainer(document);\n },\n useContainer: function (container) {\n container.querySelectorAll(this.selector).forEach(this.apply);\n },\n apply: function (form) {\n const component = Demoshop.components.localForm;\n component.forms.push(form);\n form.addEventListener(\"submit\", component.handle);\n },\n handle: function (event) {\n event.preventDefault();\n console.log('Yep')\n const component = Demoshop.components.localForm;\n const form = event.target;\n component.load(form.action, form.closest(\".js-local-container\"));\n },\n load: function (url, container) {\n fetch(url)\n .then((response) => response.json())\n .then((response) => {\n const component = Demoshop.components.localForm;\n if (response.hasOwnProperty(\"meta\")) {\n const meta = response.meta;\n if (meta.hasOwnProperty(\"content\")) {\n component.updateContent(container, meta.content);\n container.scrollIntoView();\n } else {\n component.updateContent(container, \"\");\n }\n }\n\n })\n },\n updateContent: function (container, newContent) {\n container.innerHTML = newContent;\n Demoshop.attachComponents(container);\n }\n}\n\nDemoshop.components.cartButton = {\n initialized: false,\n cart: undefined,\n selector: \".js-cart-button\",\n buttons: [],\n init: function () {\n this.cart = document.getElementById(\"header-cart\");\n if (this.cart) {\n this.initialized = true;\n document.querySelectorAll(this.selector).forEach(this.apply);\n }\n },\n apply: function (element) {\n const component = Demoshop.components.cartButton;\n component.buttons.push(element);\n element.addEventListener(\"click\", component.handle);\n },\n handle: function (event) {\n const component = Demoshop.components.cartButton;\n const button = event.target;\n let delta = 1;\n let quantity = component.cart.getAttribute(\"data-count\");\n if (quantity === \"\") {\n quantity = 0;\n }\n\n if (button.hasAttribute(\"data-count\")) {\n const counter = document.getElementById(button.getAttribute(\"data-count\"));\n\n if (counter) {\n delta = parseInt(counter.value);\n }\n }\n\n component.cart.setAttribute(\"data-count\", String(delta + parseInt(quantity)));\n }\n}\n\nDemoshop.components.sidebarState = {\n control: undefined,\n init: function () {\n this.control = document.getElementById(\"sidebar-control\");\n const handler = this.handle;\n if (this.control) {\n this.control.addEventListener(\"change\", handler)\n }\n },\n handle: function (event) {\n const checkbox = event.target;\n if (checkbox.checked) {\n document.cookie = \"sb=1\"\n } else {\n document.cookie = \"sb=; expires=Thu, 01 Jan 1970 00:00:00 GMT\"\n }\n }\n}\n\nDemoshop.components.highlighter = {\n items: [],\n selector: \"[data-highlight]\",\n className: \"data-highlight\",\n current: undefined,\n init: function () {\n document.querySelectorAll(this.selector).forEach(this.apply);\n },\n apply: function (element) {\n const component = Demoshop.components.highlighter;\n if (element.getAttribute(\"data-highlight\").length > 0) {\n component.items.push(element);\n element.addEventListener(\"mouseenter\", component.mouseIn);\n element.addEventListener(\"mouseleave\", component.mouseOut);\n }\n },\n mouseIn: function (event) {\n const component = Demoshop.components.highlighter;\n const element = event.target;\n if (element.matches(component.selector)) {\n element.getAttribute(component.className).split(\",\").forEach(id => component.toggle(element, id, true));\n component.current = element;\n window.setTimeout(component.checkScroll, 500, element);\n }\n },\n mouseOut: function (event) {\n const component = Demoshop.components.highlighter;\n const element = event.target;\n if (element.matches(component.selector)) {\n element.getAttribute(component.className).split(\",\").forEach(id => component.toggle(element, id, false));\n }\n component.current = undefined;\n window.setTimeout(component.hidePopup, 1000);\n },\n toggle: function (details, elementId, apply) {\n const element = document.getElementById(elementId);\n if (element) {\n if (apply) {\n element.classList.add(\"highlighted-item\");\n Demoshop.components.highlighter.specialBehavior(details, element, elementId);\n } else {\n element.classList.remove(\"highlighted-item\");\n }\n } else {\n console.log(\"No element :(\")\n }\n },\n specialBehavior: function (details, element, elementId) {\n const component = Demoshop.components.highlighter;\n\n if (elementId === \"header-authentication\") {\n element.querySelector(\".auth-info1\").classList.remove(\"hidden\");\n element.querySelector(\".auth-info2\").classList.add(\"hidden\");\n }\n if (elementId === \"mokka-info-button\") {\n window.setTimeout(component.showPopup, 1000, details);\n }\n if (elementId === \"main-popup-wrapper\") {\n const checkbox = document.getElementById(\"main-popup-control\");\n if (checkbox) {\n checkbox.checked = true;\n }\n if (details.hasAttribute(\"data-url\")) {\n Demoshop.components.popupLoader.load(details.getAttribute(\"data-url\"));\n }\n }\n },\n checkScroll: function (from) {\n const component = Demoshop.components.highlighter;\n if (component.current && from === component.current) {\n const elementId = component.current.getAttribute(component.className).split(\",\")[0];\n const element = document.getElementById(elementId);\n if (element) {\n const top = window.scrollY + element.getBoundingClientRect().top - 16;\n window.scrollTo(0, Math.max(0, top));\n }\n }\n },\n showPopup: function (element) {\n const component = Demoshop.components.highlighter;\n const watcher = Demoshop.components.popupWatcher;\n if (component.current === element) {\n watcher.control.checked = true;\n }\n },\n hidePopup: function () {\n const watcher = Demoshop.components.popupWatcher;\n if (!watcher.hover && watcher.control) {\n watcher.control.checked = false;\n }\n }\n}\n\nDemoshop.components.popupWatcher = {\n control: undefined,\n popup: undefined,\n hover: false,\n init: function () {\n this.popup = document.getElementById(\"mokka-item-popup\");\n if (this.popup) {\n this.control = document.getElementById(\"mokka-info-control\");\n this.popup.addEventListener(\"mouseenter\", this.mouseIn);\n this.popup.addEventListener(\"mouseleave\", this.mouseOut);\n }\n },\n mouseIn: function () {\n Demoshop.components.popupWatcher.hover = true;\n },\n mouseOut: function () {\n Demoshop.components.popupWatcher.hover = false;\n }\n}\n\nDemoshop.components.calculator = {\n payments: {\n credit: [],\n monthly: [],\n card: []\n },\n monthRange: undefined,\n percentRange: undefined,\n paymentSum: 6600,\n useContainer: function (container) {\n this.monthRange = container.querySelector(\"#range\");\n this.percentRange = container.querySelector(\"#pay-percent-range\");\n this.paymentSum = parseInt(container.querySelector(\".mokka-payment-sum\").innerHTML);\n this.pushElements(container, \".mokka-payment-sum\", \"credit\");\n this.pushElements(container, \".mokka-payment-card\", \"card\");\n this.pushElements(container, \".mokka-payment-monthly\", \"monthly\");\n this.monthRange.addEventListener(\"input\", this.handleChange);\n this.percentRange.addEventListener(\"input\", this.handleChange);\n },\n pushElements: function (container, selector, type) {\n const component = Demoshop.components.calculator;\n container.querySelectorAll(selector).forEach(function (element) {\n if (component.payments.hasOwnProperty(type)) {\n component.payments[type].push(element);\n }\n });\n },\n handleChange: function () {\n const component = Demoshop.components.calculator;\n const months = parseInt(component.monthRange.value);\n const percent = 100 - parseInt(component.percentRange.value);\n const credit = component.paymentSum * percent / 100;\n const newCredit = credit.toFixed(2);\n const newCard = (component.paymentSum - credit).toFixed(2);\n const newMonthly = (credit / months).toFixed(2);\n component.setValue(\"credit\", newCredit * 100 % 100 === 0 ? Math.round(newCredit) : newCredit);\n component.setValue(\"card\", newCard * 100 % 100 === 0 ? Math.round(newCard) : newCard);\n component.setValue(\"monthly\", newMonthly * 100 % 100 === 0 ? Math.round(newMonthly) : newMonthly);\n },\n setValue: function (key, newValue) {\n const component = Demoshop.components.calculator;\n if (component.payments.hasOwnProperty(key)) {\n component.payments[key].forEach(function (element) {\n element.innerHTML = newValue;\n });\n }\n },\n}\n\nDemoshop.components.decrementTimeout = {\n selector: \"[data-decrement-timeout]\",\n elements: new Map(),\n init: function () {\n this.useContainer(document);\n },\n useContainer: function (container) {\n const component = Demoshop.components.decrementTimeout;\n container.querySelectorAll(component.selector).forEach(component.apply);\n },\n apply: function (element) {\n const component = Demoshop.components.decrementTimeout;\n const data = {\n minValue: 0,\n timeout: 0,\n interval: parseInt(element.dataset.decrementTimeout),\n value: parseInt(element.innerHTML)\n }\n component.elements.set(element, data);\n data.timeout = window.setTimeout(component.change, data.interval, element);\n },\n change: function (element) {\n const component = Demoshop.components.decrementTimeout;\n if (component.elements.has(element)) {\n const data = component.elements.get(element);\n const value = parseInt(element.innerHTML);\n if (value > data.minValue) {\n element.innerHTML = value - 1;\n data.timeout = window.setTimeout(component.change, data.interval, element);\n }\n }\n }\n}\n\nDemoshop.components.sidebarWatcher = {\n details: [],\n control: undefined,\n buttons: [],\n init: function () {\n this.control = document.getElementById(\"sidebar-control\");\n if (this.control) {\n this.control.addEventListener(\"change\", this.watch);\n }\n const sidebar = document.querySelector(\".sidebar-main\");\n if (sidebar) {\n sidebar.querySelectorAll(\"details\").forEach(this.addDetails);\n sidebar.querySelectorAll(\".carousel-button\").forEach(this.addButton);\n }\n },\n addDetails: function (element) {\n const component = Demoshop.components.sidebarWatcher;\n component.details.push(element);\n },\n addButton: function (element) {\n const component = Demoshop.components.sidebarWatcher;\n component.buttons.push(element);\n element.addEventListener(\"click\", component.watch);\n },\n watch: function () {\n const component = Demoshop.components.sidebarWatcher;\n if (window.innerWidth < 991) {\n component.details.map(e => e.open = true);\n }\n }\n}\n\nBiovision.components.demoshop = Demoshop;\n"],"sourceRoot":""}