{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/axios/lib/utils.js","webpack:///./node_modules/selector-set/selector-set.next.js","webpack:///./node_modules/delegated-events/dist/index.js","webpack:///./node_modules/jump.js/dist/jump.module.js","webpack:///./themes/app/src/scripts/common/scrollTo.js","webpack:///./themes/app/src/scripts/common/selectors.js","webpack:///./node_modules/@glidejs/glide/dist/glide.modular.esm.js","webpack:///./themes/app/src/scripts/common/slider.js","webpack:///./node_modules/@glidejs/glide/dist/glide.esm.js","webpack:///./node_modules/aos/dist/aos.js","webpack:///./themes/app/src/scripts/common/throttle.js","webpack:///./node_modules/axios/lib/helpers/bind.js","webpack:///./node_modules/axios/lib/helpers/buildURL.js","webpack:///./node_modules/axios/lib/cancel/isCancel.js","webpack:///./node_modules/axios/lib/defaults.js","webpack:///./node_modules/axios/lib/adapters/xhr.js","webpack:///./node_modules/axios/lib/core/createError.js","webpack:///./node_modules/axios/lib/core/mergeConfig.js","webpack:///./node_modules/axios/lib/cancel/Cancel.js","webpack:///./node_modules/verge/verge.js","webpack:///./node_modules/countup.js/dist/countUp.min.js","webpack:///./node_modules/pristinejs/dist/pristine.js","webpack:///./node_modules/axios/index.js","webpack:///./themes/app/src/index.js","webpack:///.*(common)).*\\.js$","webpack:///./themes/app/src/scripts/animation.js","webpack:///./themes/app/src/scripts/benefit-slider.js","webpack:///./themes/app/src/scripts/blog-slider.js","webpack:///./themes/app/src/scripts/blog.js","webpack:///./themes/app/src/scripts/count-up.js","webpack:///./themes/app/src/scripts/forms.js","webpack:///./node_modules/axios/lib/axios.js","webpack:///./node_modules/axios/lib/core/Axios.js","webpack:///./node_modules/axios/lib/core/InterceptorManager.js","webpack:///./node_modules/axios/lib/core/dispatchRequest.js","webpack:///./node_modules/axios/lib/core/transformData.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/axios/lib/helpers/normalizeHeaderName.js","webpack:///./node_modules/axios/lib/core/settle.js","webpack:///./node_modules/axios/lib/core/enhanceError.js","webpack:///./node_modules/axios/lib/core/buildFullPath.js","webpack:///./node_modules/axios/lib/helpers/isAbsoluteURL.js","webpack:///./node_modules/axios/lib/helpers/combineURLs.js","webpack:///./node_modules/axios/lib/helpers/parseHeaders.js","webpack:///./node_modules/axios/lib/helpers/isURLSameOrigin.js","webpack:///./node_modules/axios/lib/helpers/cookies.js","webpack:///./node_modules/axios/lib/cancel/CancelToken.js","webpack:///./node_modules/axios/lib/helpers/spread.js","webpack:///./themes/app/src/scripts/navigation.js","webpack:///./themes/app/src/scripts/scroll.js","webpack:///./themes/app/src/scripts/testimonial-slider.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","toString","isArray","val","isUndefined","isObject","isFunction","forEach","obj","fn","length","isArrayBuffer","isBuffer","constructor","isFormData","FormData","isArrayBufferView","ArrayBuffer","isView","buffer","isString","isNumber","isDate","isFile","isBlob","isStream","pipe","isURLSearchParams","URLSearchParams","isStandardBrowserEnv","navigator","product","window","document","merge","result","assignValue","arguments","deepMerge","extend","a","b","thisArg","trim","str","replace","SelectorSet","this","size","uid","selectors","selectorObjects","indexes","activeIndexes","docElem","documentElement","matches","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","matchesSelector","el","selector","querySelectorAll","context","idRe","push","sel","match","slice","element","id","classRe","className","split","baseVal","Map","tagRe","toUpperCase","nodeName","map","set","chunker","parseSelectorIndexes","allIndexes","j","dup","index","allIndexesLen","concat","rest","exec","findByPrototype","ary","proto","len","item","isPrototypeOf","sortById","logDefaultIndexUsed","add","data","indexProto","objs","selectorIndexes","selectorIndex","remove","k","selIndex","removedIds","removeAll","splice","queryAll","len2","results","els","join","elements","sort","len3","keys","matchedIds","bubbleEvents","captureEvents","propagationStopped","WeakMap","immediatePropagationStopped","currentTargets","currentTargetDesc","getOwnPropertyDescriptor","Event","before","subject","verb","source","apply","trackPropagation","trackImmediate","getCurrentTarget","defineCurrentTarget","event","configurable","dispatch","eventPhase","_","canDispatch","type","queue","target","reverse","node","nodeType","_matches","matched","observers","unshift","parentElement","len1","on","options","undefined","capture","events","addEventListener","easeInOutQuad","_typeof","iterator","start","stop","offset","easing","a11y","distance","duration","timeStart","timeElapsed","next","callback","location","scrollY","pageYOffset","top","getBoundingClientRect","loop","timeCurrent","scrollTo","requestAnimationFrame","setAttribute","focus","done","querySelector","jumper","getStuckHeaderHeight","header","offsetHeight","additionalOffset","headerOffset","jump","Selectors","assign","asId","selectorKey","asClass","asString","defaults","startAt","perView","focusAt","gap","autoplay","hoverpause","keyboard","bound","swipeThreshold","dragThreshold","perTouch","touchRatio","touchAngle","animationDuration","rewind","rewindDuration","animationTimingFunc","throttle","direction","peek","breakpoints","classes","ltr","rtl","slider","carousel","swipeable","dragging","cloneSlide","activeNav","activeSlide","disabledArrow","warn","msg","console","error","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","props","descriptor","writable","protoProps","staticProps","_extends","receiver","Function","desc","parent","getPrototypeOf","possibleConstructorReturn","self","ReferenceError","toInt","parseInt","Array","mount","glide","extensions","components","_name","define","prop","definition","mergeOptions","settings","EventsBus","hop","handler","emit","Glide","_c","_t","_e","disabled","transformers","pattern","Run","make","Transition","disable","Move","interval","_o","_i","_d","status","now","Date","getTime","func","wait","timeout","args","previous","later","leading","throttled","at","remaining","clearTimeout","trailing","setTimeout","cancel","MARGIN_TYPE","siblings","parentNode","firstChild","nextSibling","exist","HTMLElement","EventsBinder","listeners","closure","removeEventListener","VALID_DIRECTIONS","FLIPED_MOVEMENTS","Rtl","Components","modify","translate","Direction","is","Gap","Gaps","Grow","Clones","grow","Peeking","Peek","Focusing","width","Sizes","slideWidth","supportsPassive","opts","e","supportsPassive$1","START_EVENTS","MOVE_EVENTS","END_EVENTS","MOUSE_EVENTS","swipe","Events","Binder","swipeSin","swipeStartX","swipeStartY","passive","Swipe","bindSwipeStart","touches","pageX","pageY","bindSwipeMove","bindSwipeEnd","move","_Glide$settings","subExSx","subEySy","powEX","Math","abs","powEY","swipeHypotenuse","sqrt","swipeCathetus","asin","PI","stopPropagation","parseFloat","Html","root","classList","end","threshold","swipeDistance","swipeDeg","steps","round","enable","min","resolve","max","unbindSwipeMove","unbindSwipeEnd","_this","wrapper","unbindSwipeStart","off","_this2","_this3","indexOf","changedTouches","destroy","anchors","detached","prevented","Anchors","_a","click","unbind","preventDefault","detach","items","draggable","getAttribute","removeAttribute","attach","after","COMPONENTS","track","slides","children","filter","slide","contains","_r","Translate","transform","TRANSFORMERS","mutate","transformer","mutator","style","isType","isOffset","movement","compose","transition","token","addClass","removeClass","_v","setupSlides","setupWrapper","dimention","wrapperSize","offsetWidth","reductor","marginLeft","marginRight","collect","peekIncrementer","part","floor","clone","cloneNode","_clone","append","_Components$Html","half","prepend","appendChild","_i2","insertBefore","_i3","removeChild","Resize","Build","typeClass","activeClass","sibling","removeClasses","calculate","isStart","isEnd","countableSteps","_m","step","substr","_Core","Glide$$1","__proto__","subClass","superClass","setPrototypeOf","inherits","setupSlider","targetElement","sortBreakpoints","points","reduce","Images","dragstart","Controls","_n","addBindings","setActive","removeActive","controls","removeBindings","currentTarget","Keyboard","press","keyCode","Autoplay","setInterval","time","clearInterval","Breakpoints","matchMedia","point","Glide$1","loaded","default","u","y","h","w","x","delay","once","startEvent","throttleDelay","debounceDelay","disableMutationObserver","O","init","all","atob","mobile","phone","tablet","S","isSupported","info","readyState","ready","refresh","refreshHard","v","g","f","M","maxWait","flush","valueOf","test","NaN","MutationObserver","WebKitMutationObserver","MozMutationObserver","addedNodes","removedNodes","dataset","aos","observe","childList","subtree","userAgent","vendor","opera","innerHeight","position","anchor","anchorPlacement","isNaN","offsetLeft","offsetTop","tagName","scrollLeft","scrollTop","offsetParent","left","limit","lastFunc","lastRan","utils","encode","encodeURIComponent","url","params","paramsSerializer","serializedParams","parts","toISOString","JSON","stringify","hashmarkIndex","__CANCEL__","normalizeHeaderName","DEFAULT_CONTENT_TYPE","setContentTypeIfUnset","headers","adapter","XMLHttpRequest","process","transformRequest","transformResponse","parse","xsrfCookieName","xsrfHeaderName","maxContentLength","validateStatus","common","method","settle","buildURL","buildFullPath","parseHeaders","isURLSameOrigin","createError","config","Promise","reject","requestData","requestHeaders","request","auth","username","password","Authorization","btoa","fullPath","baseURL","open","onreadystatechange","responseURL","responseHeaders","getAllResponseHeaders","response","responseType","responseText","statusText","onabort","onerror","ontimeout","timeoutErrorMessage","cookies","xsrfValue","withCredentials","read","toLowerCase","setRequestHeader","onDownloadProgress","onUploadProgress","upload","cancelToken","promise","then","abort","send","enhanceError","message","code","Error","config1","config2","valueFromConfig2Keys","mergeDeepPropertiesKeys","defaultToConfig2Keys","axiosKeys","otherKeys","Cancel","xports","win","doc","mq","q","viewportW","viewportH","viewport","rectangle","cushion","coords","calibrate","pageXOffset","right","bottom","__assign","CountUp","endVal","version","startVal","decimalPlaces","useEasing","useGrouping","smartEasingThreshold","smartEasingAmount","separator","decimal","prefix","suffix","finalEndVal","countDown","paused","count","startTime","frameVal","easingFn","decimalMult","printValue","rAF","update","formatNumber","toFixed","numerals","easeOutExpo","pow","formattingFn","validateValue","resetDuration","String","getElementById","determineDirectionAndSmartEasing","pauseResume","cancelAnimationFrame","reset","textContent","innerHTML","ensureNumber","Number","lang","required","email","number","tel","maxlength","minlength","tmpl","_arguments","groupedElemCount","input","pristine","form","defaultConfig","classTo","errorClass","successClass","errorTextParent","errorTextTag","errorTextClass","ALLOWED_ATTRIBUTES","validators","validator","priority","Pristine","live","_addValidatorToField","fns","valueParams","_validateField","field","errors","valid","messages","halt","_getErrorElements","errorElements","errorClassElement","cls","findAncestor","errorTextElement","createElement","PRISTINE_ERROR","pristineDisplay","display","_showError","_showSuccess","_removeError","obj1","obj2","attr","mergeConfig","fields","from","attributes","endsWith","validate","silent","NodeList","$","getErrors","erroneousFields","addValidator","elem","addError","setGlobalConfig","RegExp","factory","typekit","rel","href","head","require","script","can","run","body","webpackContext","req","webpackContextResolve","AOS","SELECTORS","setupBenefitsSlide","1919","1600","1200","768","480","setupBlogSlider","list","pagination","more","less","currentPage","blogList","blogPagination","blogPaginationMore","blogPaginationLess","handleBlogPagination","bindEvents","blogListItems","total","hiddenIndex","currentCount","counter","counters","state","_el","verge","inY","styledForm","ajaxForm","formAnchor","formScroll","formErrorMessage","focused","loading","pristineConfig","setupForm","setupFlyFields","setupValidation","closest","skipValidation","firstError","errorMessage","submitButton","formData","axios","action","Accept","responseEncoding","resp","success","field_errors","errorField","catch","err","log","handleFocus","handleBlur","label","Axios","createInstance","instanceConfig","CancelToken","isCancel","promises","spread","InterceptorManager","dispatchRequest","interceptors","chain","interceptor","fulfilled","rejected","shift","getUri","handlers","use","eject","transformData","throwIfCancellationRequested","throwIfRequested","reason","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","array","noop","nextTick","title","browser","env","argv","versions","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","binding","cwd","chdir","dir","umask","normalizedName","isAxiosError","toJSON","description","fileName","lineNumber","columnNumber","stack","isAbsoluteURL","combineURLs","requestedURL","relativeURL","ignoreDuplicateOf","parsed","line","originURL","msie","urlParsingNode","resolveURL","protocol","host","search","hash","hostname","port","pathname","charAt","requestURL","write","expires","path","domain","secure","cookie","toGMTString","decodeURIComponent","executor","resolvePromise","arr","menu","buttons","navButton","handleClick","handleScroll","toggle","elm","scroll","scrollToMe","handleUrl","handleScrollToMe","targetSelector","contentSlide","contentSlider","bullets","testimonialSlider","setupTestimonialSlider"],"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,oBAAXiB,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,iBAAVF,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,4EAIjBlC,EAAoBA,EAAoBmC,EAAI,I,+BChFrD,IAAIP,EAAO,EAAQ,IAMfQ,EAAWtB,OAAOkB,UAAUI,SAQhC,SAASC,EAAQC,GACf,MAA8B,mBAAvBF,EAAS7B,KAAK+B,GASvB,SAASC,EAAYD,GACnB,YAAsB,IAARA,EA4EhB,SAASE,EAASF,GAChB,OAAe,OAARA,GAA+B,iBAARA,EAuChC,SAASG,EAAWH,GAClB,MAA8B,sBAAvBF,EAAS7B,KAAK+B,GAwEvB,SAASI,EAAQC,EAAKC,GAEpB,GAAID,QAUJ,GALmB,iBAARA,IAETA,EAAM,CAACA,IAGLN,EAAQM,GAEV,IAAK,IAAIvC,EAAI,EAAGC,EAAIsC,EAAIE,OAAQzC,EAAIC,EAAGD,IACrCwC,EAAGrC,KAAK,KAAMoC,EAAIvC,GAAIA,EAAGuC,QAI3B,IAAK,IAAIhB,KAAOgB,EACV7B,OAAOkB,UAAUC,eAAe1B,KAAKoC,EAAKhB,IAC5CiB,EAAGrC,KAAK,KAAMoC,EAAIhB,GAAMA,EAAKgB,GAoFrCxC,EAAOD,QAAU,CACfmC,QAASA,EACTS,cApRF,SAAuBR,GACrB,MAA8B,yBAAvBF,EAAS7B,KAAK+B,IAoRrBS,SAhSF,SAAkBT,GAChB,OAAe,OAARA,IAAiBC,EAAYD,IAA4B,OAApBA,EAAIU,cAAyBT,EAAYD,EAAIU,cAChD,mBAA7BV,EAAIU,YAAYD,UAA2BT,EAAIU,YAAYD,SAAST,IA+RhFW,WA5QF,SAAoBX,GAClB,MAA4B,oBAAbY,UAA8BZ,aAAeY,UA4Q5DC,kBAnQF,SAA2Bb,GAOzB,MAL4B,oBAAhBc,aAAiCA,YAAkB,OACpDA,YAAYC,OAAOf,GAEnB,GAAUA,EAAU,QAAMA,EAAIgB,kBAAkBF,aA+P3DG,SApPF,SAAkBjB,GAChB,MAAsB,iBAARA,GAoPdkB,SA3OF,SAAkBlB,GAChB,MAAsB,iBAARA,GA2OdE,SAAUA,EACVD,YAAaA,EACbkB,OA1NF,SAAgBnB,GACd,MAA8B,kBAAvBF,EAAS7B,KAAK+B,IA0NrBoB,OAjNF,SAAgBpB,GACd,MAA8B,kBAAvBF,EAAS7B,KAAK+B,IAiNrBqB,OAxMF,SAAgBrB,GACd,MAA8B,kBAAvBF,EAAS7B,KAAK+B,IAwMrBG,WAAYA,EACZmB,SAtLF,SAAkBtB,GAChB,OAAOE,EAASF,IAAQG,EAAWH,EAAIuB,OAsLvCC,kBA7KF,SAA2BxB,GACzB,MAAkC,oBAApByB,iBAAmCzB,aAAeyB,iBA6KhEC,qBAjJF,WACE,OAAyB,oBAAdC,WAAoD,gBAAtBA,UAAUC,SACY,iBAAtBD,UAAUC,SACY,OAAtBD,UAAUC,WAI/B,oBAAXC,QACa,oBAAbC,WA0IT1B,QAASA,EACT2B,MA/EF,SAASA,IACP,IAAIC,EAAS,GACb,SAASC,EAAYjC,EAAKX,GACG,iBAAhB2C,EAAO3C,IAAoC,iBAARW,EAC5CgC,EAAO3C,GAAO0C,EAAMC,EAAO3C,GAAMW,GAEjCgC,EAAO3C,GAAOW,EAIlB,IAAK,IAAIlC,EAAI,EAAGC,EAAImE,UAAU3B,OAAQzC,EAAIC,EAAGD,IAC3CsC,EAAQ8B,UAAUpE,GAAImE,GAExB,OAAOD,GAmEPG,UAxDF,SAASA,IACP,IAAIH,EAAS,GACb,SAASC,EAAYjC,EAAKX,GACG,iBAAhB2C,EAAO3C,IAAoC,iBAARW,EAC5CgC,EAAO3C,GAAO8C,EAAUH,EAAO3C,GAAMW,GAErCgC,EAAO3C,GADiB,iBAARW,EACFmC,EAAU,GAAInC,GAEdA,EAIlB,IAAK,IAAIlC,EAAI,EAAGC,EAAImE,UAAU3B,OAAQzC,EAAIC,EAAGD,IAC3CsC,EAAQ8B,UAAUpE,GAAImE,GAExB,OAAOD,GA0CPI,OA/BF,SAAgBC,EAAGC,EAAGC,GAQpB,OAPAnC,EAAQkC,GAAG,SAAqBtC,EAAKX,GAEjCgD,EAAEhD,GADAkD,GAA0B,mBAARvC,EACXV,EAAKU,EAAKuC,GAEVvC,KAGNqC,GAwBPG,KAzKF,SAAcC,GACZ,OAAOA,EAAIC,QAAQ,OAAQ,IAAIA,QAAQ,OAAQ,O,6BC7KlC,SAASC,IAEtB,KAAMC,gBAAgBD,GACpB,OAAO,IAAIA,EAIbC,KAAKC,KAAO,EAGZD,KAAKE,IAAM,EAGXF,KAAKG,UAAY,GAGjBH,KAAKI,gBAAkB,GAGvBJ,KAAKK,QAAUzE,OAAOY,OAAOwD,KAAKK,SAGlCL,KAAKM,cAAgB,G,kCAIvB,IAAIC,EAAUtB,OAAOC,SAASsB,gBAC1BC,EACFF,EAAQE,SACRF,EAAQG,uBACRH,EAAQI,oBACRJ,EAAQK,kBACRL,EAAQM,kBAUVd,EAAYjD,UAAUgE,gBAAkB,SAASC,EAAIC,GACnD,OAAOP,EAAQpF,KAAK0F,EAAIC,IAW1BjB,EAAYjD,UAAUmE,iBAAmB,SAASd,EAAWe,GAC3D,OAAOA,EAAQD,iBAAiBd,IAWlCJ,EAAYjD,UAAUuD,QAAU,GAGhC,IAAIc,EAAO,oCACXpB,EAAYjD,UAAUuD,QAAQe,KAAK,CACjC3F,KAAM,KACNuF,SAAU,SAAyBK,GACjC,IAAI/F,EACJ,GAAKA,EAAI+F,EAAIC,MAAMH,GACjB,OAAO7F,EAAE,GAAGiG,MAAM,IAGtBC,QAAS,SAAsBT,GAC7B,GAAIA,EAAGU,GACL,MAAO,CAACV,EAAGU,OAMjB,IAAIC,EAAU,qCACd3B,EAAYjD,UAAUuD,QAAQe,KAAK,CACjC3F,KAAM,QACNuF,SAAU,SAA4BK,GACpC,IAAI/F,EACJ,GAAKA,EAAI+F,EAAIC,MAAMI,GACjB,OAAOpG,EAAE,GAAGiG,MAAM,IAGtBC,QAAS,SAA8BT,GACrC,IAAIY,EAAYZ,EAAGY,UACnB,GAAIA,EAAW,CACb,GAAyB,iBAAdA,EACT,OAAOA,EAAUC,MAAM,MAClB,GAAyB,iBAAdD,GAA0B,YAAaA,EAGvD,OAAOA,EAAUE,QAAQD,MAAM,UAOvC,IA0BIE,EA1BAC,EAAQ,mCACZhC,EAAYjD,UAAUuD,QAAQe,KAAK,CACjC3F,KAAM,MACNuF,SAAU,SAA0BK,GAClC,IAAI/F,EACJ,GAAKA,EAAI+F,EAAIC,MAAMS,GACjB,OAAOzG,EAAE,GAAG0G,eAGhBR,QAAS,SAA2BT,GAClC,MAAO,CAACA,EAAGkB,SAASD,kBAKxBjC,EAAYjD,UAAUuD,QAAiB,QAAI,CACzC5E,KAAM,YACNuF,SAAU,WACR,OAAO,GAETQ,QAAS,WACP,MAAO,EAAC,KAOVM,EADwB,mBAAf7C,OAAO6C,IACV7C,OAAO6C,IAEP,WACJ,SAASA,IACP9B,KAAKkC,IAAM,GAQb,OANAJ,EAAIhF,UAAUf,IAAM,SAASU,GAC3B,OAAOuD,KAAKkC,IAAIzF,EAAM,MAExBqF,EAAIhF,UAAUqF,IAAM,SAAS1F,EAAKN,GAChC6D,KAAKkC,IAAIzF,EAAM,KAAON,GAEjB2F,EAVH,GAiBR,IAAIM,EAAU,sIAOd,SAASC,EAAqBC,EAAYtB,GAGxC,IACE9F,EACAqH,EACAjH,EACAkH,EAEA/F,EACAgG,EAPEC,GAFJJ,EAAaA,EAAWf,MAAM,GAAGoB,OAAOL,EAAoB,UAE7B3E,OAK7BiF,EAAO5B,EAGPX,EAAU,GAEZ,GAEE,GADA+B,EAAQS,KAAK,KACRvH,EAAI8G,EAAQS,KAAKD,MACpBA,EAAOtH,EAAE,GACLA,EAAE,KAAOsH,GACX,IAAK1H,EAAI,EAAGA,EAAIwH,EAAexH,IAE7B,GAAKuB,GADLgG,EAAQH,EAAWpH,IACF8F,SAAS1F,EAAE,IAAM,CAGhC,IAFAiH,EAAIlC,EAAQ1C,OACZ6E,GAAM,EACCD,KACL,GAAIlC,EAAQkC,GAAGE,QAAUA,GAASpC,EAAQkC,GAAG9F,MAAQA,EAAK,CACxD+F,GAAM,EACN,MAGCA,GACHnC,EAAQe,KAAK,CAAEqB,MAAOA,EAAOhG,IAAKA,IAEpC,aAKDnB,GAET,OAAO+E,EAST,SAASyC,EAAgBC,EAAKC,GAC5B,IAAI9H,EAAG+H,EAAKC,EACZ,IAAKhI,EAAI,EAAG+H,EAAMF,EAAIpF,OAAQzC,EAAI+H,EAAK/H,IAErC,GADAgI,EAAOH,EAAI7H,GACP8H,EAAMG,cAAcD,GACtB,OAAOA,EA8Ib,SAASE,EAAS3D,EAAGC,GACnB,OAAOD,EAAEgC,GAAK/B,EAAE+B,GA9HlB1B,EAAYjD,UAAUuG,oBAAsB,aAQ5CtD,EAAYjD,UAAUwG,IAAM,SAAStC,EAAUuC,GAC7C,IAAI9F,EACFvC,EACAsI,EACA/G,EACAgG,EACAgB,EACAC,EACAC,EACAtD,EAAUL,KAAKM,cACfH,EAAYH,KAAKG,UACjBC,EAAkBJ,KAAKI,gBAEzB,GAAwB,iBAAbY,EAAX,CAYA,IAHAZ,GALA3C,EAAM,CACJgE,GAAIzB,KAAKE,MACTc,SAAUA,EACVuC,KAAMA,IAEY9B,IAAMhE,EAE1BiG,EAAkBrB,EAAqBrC,KAAKK,QAASW,GAChD9F,EAAI,EAAGA,EAAIwI,EAAgB/F,OAAQzC,IAEtCuB,GADAkH,EAAgBD,EAAgBxI,IACZuB,KAGpBgG,EAAQK,EAAgBzC,EAFxBmD,EAAaG,EAAclB,WAIzBA,EAAQ7G,OAAOY,OAAOgH,IAChBtB,IAAM,IAAIJ,EAChBzB,EAAQe,KAAKqB,IAGXe,IAAexD,KAAKK,QAAiB,SACvCL,KAAKqD,oBAAoB5F,IAE3BgG,EAAOhB,EAAMP,IAAInG,IAAIU,MAEnBgH,EAAO,GACPhB,EAAMP,IAAIC,IAAI1F,EAAKgH,IAErBA,EAAKrC,KAAK3D,GAGZuC,KAAKC,OACLE,EAAUiB,KAAKJ,KASjBjB,EAAYjD,UAAU8G,OAAS,SAAS5C,EAAUuC,GAChD,GAAwB,iBAAbvC,EAAX,CAIA,IAAI0C,EACFC,EACAzI,EACAqH,EACAsB,EACAC,EACAL,EACAhG,EACA4C,EAAUL,KAAKM,cACfH,EAAaH,KAAKG,UAAY,GAC9BC,EAAkBJ,KAAKI,gBACvB2D,EAAa,GACbC,EAAiC,IAArB1E,UAAU3B,OAGxB,IADA+F,EAAkBrB,EAAqBrC,KAAKK,QAASW,GAChD9F,EAAI,EAAGA,EAAIwI,EAAgB/F,OAAQzC,IAItC,IAHAyI,EAAgBD,EAAgBxI,GAEhCqH,EAAIlC,EAAQ1C,OACL4E,KAEL,GADAuB,EAAWzD,EAAQkC,GACfoB,EAAclB,MAAMU,cAAcW,GAAW,CAE/C,GADAL,EAAOK,EAAS5B,IAAInG,IAAI4H,EAAclH,KAGpC,IADAoH,EAAIJ,EAAK9F,OACFkG,MACLpG,EAAMgG,EAAKI,IACH7C,WAAaA,IAAagD,GAAavG,EAAI8F,OAASA,IAC1DE,EAAKQ,OAAOJ,EAAG,GACfE,EAAWtG,EAAIgE,KAAM,GAI3B,MAKN,IAAKvG,KAAK6I,SACD3D,EAAgBlF,GACvB8E,KAAKC,OAGP,IAAK/E,KAAKkF,EACRD,EAAUiB,KAAKhB,EAAgBlF,GAAG8F,YAmBtCjB,EAAYjD,UAAUoH,SAAW,SAAShD,GACxC,IAAKlB,KAAKG,UAAUxC,OAClB,MAAO,GAGT,IAIIzC,EAAGqH,EAAGU,EAAKkB,EAAMpD,EAAIzF,EAAGgG,EAAO7D,EAJ/BgD,EAAU,GACZ2D,EAAU,GACRC,EAAMrE,KAAKiB,iBAAiBjB,KAAKG,UAAUmE,KAAK,MAAOpD,GAG3D,IAAKhG,EAAI,EAAG+H,EAAMoB,EAAI1G,OAAQzC,EAAI+H,EAAK/H,IAGrC,IAFA6F,EAAKsD,EAAInJ,GAEJqH,EAAI,EAAG4B,GADZ7I,EAAI0E,KAAKS,QAAQM,IACIpD,OAAQ4E,EAAI4B,EAAM5B,IAEhC9B,GADLhD,EAAMnC,EAAEiH,IACSd,IAUfH,EAAQb,EAAQhD,EAAIgE,KATpBH,EAAQ,CACNG,GAAIhE,EAAIgE,GACRT,SAAUvD,EAAIuD,SACduC,KAAM9F,EAAI8F,KACVgB,SAAU,IAEZ9D,EAAQhD,EAAIgE,IAAMH,EAClB8C,EAAQhD,KAAKE,IAIfA,EAAMiD,SAASnD,KAAKL,GAIxB,OAAOqD,EAAQI,KAAKpB,IAQtBrD,EAAYjD,UAAU2D,QAAU,SAASM,GACvC,IAAKA,EACH,MAAO,GAGT,IAAI7F,EAAGqH,EAAGsB,EAAGZ,EAAKkB,EAAMM,EAAMhC,EAAOiC,EAAMjB,EAAMhG,EAAKgE,EAClDpB,EAAUL,KAAKM,cACjBqE,EAAa,GACblE,EAAU,GAEZ,IAAKvF,EAAI,EAAG+H,EAAM5C,EAAQ1C,OAAQzC,EAAI+H,EAAK/H,IAGzC,GADAwJ,GADAjC,EAAQpC,EAAQnF,IACHsG,QAAQT,GAEnB,IAAKwB,EAAI,EAAG4B,EAAOO,EAAK/G,OAAQ4E,EAAI4B,EAAM5B,IACxC,GAAKkB,EAAOhB,EAAMP,IAAInG,IAAI2I,EAAKnC,IAC7B,IAAKsB,EAAI,EAAGY,EAAOhB,EAAK9F,OAAQkG,EAAIY,EAAMZ,KAGnCc,EADLlD,GADAhE,EAAMgG,EAAKI,IACFpC,KACczB,KAAKc,gBAAgBC,EAAItD,EAAIuD,YAClD2D,EAAWlD,IAAM,EACjBhB,EAAQW,KAAK3D,IAQzB,OAAOgD,EAAQ+D,KAAKpB,ICnbtB,IAAIwB,EAAe,GACfC,EAAgB,GAChBC,EAAqB,IAAIC,QACzBC,EAA8B,IAAID,QAClCE,EAAiB,IAAIF,QACrBG,EAAoBtJ,OAAOuJ,yBAAyBC,MAAMtI,UAAW,iBAEzE,SAASuI,EAAOC,EAASC,EAAM7H,GAC7B,IAAI8H,EAASF,EAAQC,GAOrB,OALAD,EAAQC,GAAQ,WAEd,OADA7H,EAAG+H,MAAMH,EAAShG,WACXkG,EAAOC,MAAMH,EAAShG,YAGxBgG,EA6BT,SAASI,IACPZ,EAAmB3C,IAAInC,MAAM,GAG/B,SAAS2F,IACPb,EAAmB3C,IAAInC,MAAM,GAC7BgF,EAA4B7C,IAAInC,MAAM,GAGxC,SAAS4F,IACP,OAAOX,EAAelJ,IAAIiE,OAAS,KAGrC,SAAS6F,EAAoBC,EAAOpK,GAC7BwJ,GACLtJ,OAAOC,eAAeiK,EAAO,gBAAiB,CAC5CC,cAAc,EACdjK,YAAY,EACZC,IAAKL,GAAUwJ,EAAkBnJ,MAarC,SAASiK,EAASF,GAChB,GAVF,SAAqBA,GACnB,IAEE,OADAA,EAAMG,YACC,EACP,MAAOC,GACP,OAAO,GAKJC,CAAYL,GAAjB,CACA,IACI3F,GAD8B,IAArB2F,EAAMG,WAAmBpB,EAAgBD,GAC/BkB,EAAMM,MAC7B,GAAKjG,EAAL,CACA,IAAIkG,EA9DN,SAAiBlG,EAAWmG,EAAQC,GAClC,IAAIF,EAAQ,GACRG,EAAOF,EAEX,EAAG,CACD,GAAsB,IAAlBE,EAAKC,SAAgB,MAEzB,IAAIC,EAAWvG,EAAUM,QAAQ+F,GAEjC,GAAIE,EAAS/I,OAAQ,CACnB,IAAIgJ,EAAU,CACZH,KAAMA,EACNI,UAAWF,GAGTH,EACFF,EAAMQ,QAAQF,GAEdN,EAAMjF,KAAKuF,UAGRH,EAAOA,EAAKM,eAErB,OAAOT,EAuCK,CAAQlG,EAAW2F,EAAMQ,OAA6B,IAArBR,EAAMG,YACnD,GAAKI,EAAM1I,OAAX,CACA0H,EAAOS,EAAO,kBAAmBJ,GACjCL,EAAOS,EAAO,2BAA4BH,GAC1CE,EAAoBC,EAAOF,GAE3B,IAAK,IAAI1K,EAAI,EAAG6L,EAAOV,EAAM1I,OAAQzC,EAAI6L,IACnCjC,EAAmB/I,IAAI+J,GADkB5K,IAAK,CAElD,IAAIyL,EAAUN,EAAMnL,GACpB+J,EAAe9C,IAAI2D,EAAOa,EAAQH,MAElC,IAAK,IAAIjE,EAAI,EAAG4B,EAAOwC,EAAQC,UAAUjJ,OAAQ4E,EAAI4B,IAC/Ca,EAA4BjJ,IAAI+J,GADqBvD,IAEzDoE,EAAQC,UAAUrE,GAAGgB,KAAKlI,KAAKsL,EAAQH,KAAMV,GAIjDb,EAAuB,OAAEa,GACzBD,EAAoBC,MAGtB,SAASkB,EAAGvL,EAAMuF,EAAUtD,GAC1B,IAAIuJ,EAAU3H,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAC9E6H,IAAUF,EAAQE,QAClBC,EAASD,EAAUtC,EAAgBD,EACnCzE,EAAYiH,EAAO3L,GAElB0E,IACHA,EAAY,IAAIJ,EAChBqH,EAAO3L,GAAQ0E,EACfjB,SAASmI,iBAAiB5L,EAAMuK,EAAUmB,IAG5ChH,EAAUmD,IAAItC,EAAUtD,K,6BC9G1B,IAAI4J,EAAgB,SAAuBlL,EAAGsD,EAAGnE,EAAGC,GAElD,OADAY,GAAKZ,EAAI,GACD,EAAUD,EAAI,EAAIa,EAAIA,EAAIsD,GAE1BnE,EAAI,KADZa,GACsBA,EAAI,GAAK,GAAKsD,GAGlC6H,EAA4B,mBAAXtL,QAAoD,iBAApBA,OAAOuL,SAAwB,SAAU/J,GAC5F,cAAcA,GACZ,SAAUA,GACZ,OAAOA,GAAyB,mBAAXxB,QAAyBwB,EAAIK,cAAgB7B,QAAUwB,IAAQxB,OAAOa,UAAY,gBAAkBW,GAuJ5G,EApJF,WAIX,IAAI+D,OAAU,EAEViG,OAAQ,EACRC,OAAO,EAEPC,OAAS,EACTC,OAAS,EACTC,OAAO,EAEPC,OAAW,EACXC,OAAW,EAEXC,OAAY,EACZC,OAAc,EAEdC,OAAO,EAEPC,OAAW,EAIf,SAASC,IACP,OAAOnJ,OAAOoJ,SAAWpJ,OAAOqJ,YAKlC,SAASC,EAAI/G,GACX,OAAOA,EAAQgH,wBAAwBD,IAAMd,EAK/C,SAASgB,EAAKC,GAEPV,IACHA,EAAYU,GAOdR,EAAON,EAHPK,EAAcS,EAAcV,EAGDP,EAAOK,EAAUC,GAG5C9I,OAAO0J,SAAS,EAAGT,GAGnBD,EAAcF,EAAW9I,OAAO2J,sBAAsBH,GAMxD,WAEExJ,OAAO0J,SAAS,EAAGlB,EAAQK,GAGvBtG,GAAWqG,IAEbrG,EAAQqH,aAAa,WAAY,MAGjCrH,EAAQsH,SAIc,mBAAbX,GACTA,IAIFH,GAAY,EAxBVe,GAuFJ,OA1DA,SAAczC,GACZ,IAAIW,EAAU3H,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAalF,OAVAyI,EAAWd,EAAQc,UAAY,IAC/BJ,EAASV,EAAQU,QAAU,EAC3BQ,EAAWlB,EAAQkB,SACnBP,EAASX,EAAQW,QAAUN,EAC3BO,EAAOZ,EAAQY,OAAQ,EAGvBJ,EAAQW,SAGkB,IAAX9B,EAAyB,YAAciB,EAAQjB,IAE5D,IAAK,SACH9E,OAAU0F,EACVW,GAAO,EACPH,EAAOD,EAAQnB,EACf,MAIF,IAAK,SAEHoB,EAAOa,EADP/G,EAAU8E,GAEV,MAIF,IAAK,SACH9E,EAAUtC,SAAS8J,cAAc1C,GACjCoB,EAAOa,EAAI/G,GAQf,OAHAsG,EAAWJ,EAAOD,EAAQE,EAGlBJ,EAAQN,EAAQc,WAEtB,IAAK,SACHA,EAAWd,EAAQc,SACnB,MAGF,IAAK,WACHA,EAAWd,EAAQc,SAASD,GAKhC7I,OAAO2J,sBAAsBH,IASjBQ,GClKhB,MAAMC,EAAuB,KACzB,MAAMC,EAASjK,SAAS8J,cAAc,WACtC,GAAIG,EACA,OAAOA,EAAOC,aAAe,GAoBtBT,IAVE,CAACrC,EAAQ+C,EAAmB,EAAGlB,KACvBe,IAArB,MAEMI,GAAyC,EAA1BJ,IAIrBK,EAAKjD,EAAQ,CAAEyB,SAAU,IAAKJ,OAFf2B,EARR,EAQuCD,EAERlB,e,6BCtB1C,OAiBeqB,UAjBG,SAASrJ,EAAY,IACrC,OAAOvE,OAAO6N,OACZ,CACEC,KAAKC,GACH,iBAAW3J,KAAK2J,KAElBC,QAAQD,GACN,iBAAW3J,KAAK2J,KAElBE,SAASF,GACAA,EAAY7J,QAAQ,UAAW,KAG1CK,K,6BCbJ,oEAMA,IAAI2J,EAAW,CAUb1D,KAAM,SAON2D,QAAS,EAOTC,QAAS,EAWTC,QAAS,EAOTC,IAAK,GAOLC,UAAU,EAOVC,YAAY,EAOZC,UAAU,EAUVC,OAAO,EAOPC,eAAgB,GAOhBC,cAAe,IAOfC,UAAU,EAOVC,WAAY,GAOZC,WAAY,GAOZC,kBAAmB,IAOnBC,QAAQ,EAORC,eAAgB,IAOhBC,oBAAqB,oCAOrBC,SAAU,GAWVC,UAAW,MAcXC,KAAM,EAWNC,YAAa,GAQbC,QAAS,CACPH,UAAW,CACTI,IAAK,aACLC,IAAK,cAEPC,OAAQ,gBACRC,SAAU,kBACVC,UAAW,mBACXC,SAAU,kBACVC,WAAY,sBACZC,UAAW,wBACXC,YAAa,uBACbC,cAAe,2BAUnB,SAASC,EAAKC,GACZC,QAAQC,MAAM,iBAAmBF,GAGnC,IAAIzE,EAA4B,mBAAXtL,QAAoD,iBAApBA,OAAOuL,SAAwB,SAAU/J,GAC5F,cAAcA,GACZ,SAAUA,GACZ,OAAOA,GAAyB,mBAAXxB,QAAyBwB,EAAIK,cAAgB7B,QAAUwB,IAAQxB,OAAOa,UAAY,gBAAkBW,GAGvH0O,EAAiB,SAAUC,EAAUC,GACvC,KAAMD,aAAoBC,GACxB,MAAM,IAAIC,UAAU,sCAIpBC,EAAc,WAChB,SAASC,EAAiBlG,EAAQmG,GAChC,IAAK,IAAIvR,EAAI,EAAGA,EAAIuR,EAAM9O,OAAQzC,IAAK,CACrC,IAAIwR,EAAaD,EAAMvR,GACvBwR,EAAW5Q,WAAa4Q,EAAW5Q,aAAc,EACjD4Q,EAAW3G,cAAe,EACtB,UAAW2G,IAAYA,EAAWC,UAAW,GACjD/Q,OAAOC,eAAeyK,EAAQoG,EAAWjQ,IAAKiQ,IAIlD,OAAO,SAAUL,EAAaO,EAAYC,GAGxC,OAFID,GAAYJ,EAAiBH,EAAYvP,UAAW8P,GACpDC,GAAaL,EAAiBH,EAAaQ,GACxCR,GAdO,GAkBdS,EAAWlR,OAAO6N,QAAU,SAAUnD,GACxC,IAAK,IAAIpL,EAAI,EAAGA,EAAIoE,UAAU3B,OAAQzC,IAAK,CACzC,IAAIsK,EAASlG,UAAUpE,GAEvB,IAAK,IAAIuB,KAAO+I,EACV5J,OAAOkB,UAAUC,eAAe1B,KAAKmK,EAAQ/I,KAC/C6J,EAAO7J,GAAO+I,EAAO/I,IAK3B,OAAO6J,GAGLvK,EAAM,SAASA,EAAIa,EAAQC,EAAUkQ,GACxB,OAAXnQ,IAAiBA,EAASoQ,SAASlQ,WACvC,IAAImQ,EAAOrR,OAAOuJ,yBAAyBvI,EAAQC,GAEnD,QAAaqK,IAAT+F,EAAoB,CACtB,IAAIC,EAAStR,OAAOuR,eAAevQ,GAEnC,OAAe,OAAXsQ,OACF,EAEOnR,EAAImR,EAAQrQ,EAAUkQ,GAE1B,GAAI,UAAWE,EACpB,OAAOA,EAAK9Q,MAEZ,IAAIT,EAASuR,EAAKlR,IAElB,YAAemL,IAAXxL,EAIGA,EAAOL,KAAK0R,QAJnB,GAwBAK,EAA4B,SAAUC,EAAMhS,GAC9C,IAAKgS,EACH,MAAM,IAAIC,eAAe,6DAG3B,OAAOjS,GAAyB,iBAATA,GAAqC,mBAATA,EAA8BgS,EAAPhS,GAU5E,SAASkS,EAAMpR,GACb,OAAOqR,SAASrR,GAoBlB,SAASkC,EAASlC,GAChB,MAAwB,iBAAVA,EAWhB,SAASmB,EAASnB,GAChB,IAAIiK,OAAwB,IAAVjK,EAAwB,YAAcoL,EAAQpL,GAEhE,MAAgB,aAATiK,GAAgC,WAATA,KAAuBjK,EAmBvD,SAASoB,EAAWpB,GAClB,MAAwB,mBAAVA,EAShB,SAASkB,EAAYlB,GACnB,YAAwB,IAAVA,EAShB,SAASgB,EAAQhB,GACf,OAAOA,EAAM2B,cAAgB2P,MAY/B,SAASC,EAAMC,EAAOC,EAAYxG,GAChC,IAAIyG,EAAa,GAEjB,IAAK,IAAIpS,KAAQmS,EACXrQ,EAAWqQ,EAAWnS,IACxBoS,EAAWpS,GAAQmS,EAAWnS,GAAMkS,EAAOE,EAAYzG,GAEvD2E,EAAK,gCAIT,IAAK,IAAI+B,KAASD,EACZtQ,EAAWsQ,EAAWC,GAAOJ,QAC/BG,EAAWC,GAAOJ,QAItB,OAAOG,EAWT,SAASE,EAAOtQ,EAAKuQ,EAAMC,GACzBrS,OAAOC,eAAe4B,EAAKuQ,EAAMC,GAwBnC,SAASC,EAAapE,EAAUqE,GAC9B,IAAIlH,EAAU6F,EAAS,GAAIhD,EAAUqE,GAmBrC,OAZIA,EAASpR,eAAe,aAC1BkK,EAAQmE,QAAU0B,EAAS,GAAIhD,EAASsB,QAAS+C,EAAS/C,SAEtD+C,EAAS/C,QAAQrO,eAAe,eAClCkK,EAAQmE,QAAQH,UAAY6B,EAAS,GAAIhD,EAASsB,QAAQH,UAAWkD,EAAS/C,QAAQH,aAItFkD,EAASpR,eAAe,iBAC1BkK,EAAQkE,YAAc2B,EAAS,GAAIhD,EAASqB,YAAagD,EAAShD,cAG7DlE,EAGT,IAAImH,EAAY,WAMd,SAASA,IACP,IAAIhH,EAAS9H,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GACjF6M,EAAenM,KAAMoO,GAErBpO,KAAKoH,OAASA,EACdpH,KAAKqO,IAAMjH,EAAOrK,eA+DpB,OApDAwP,EAAY6B,EAAW,CAAC,CACtB3R,IAAK,KACLN,MAAO,SAAY2J,EAAOwI,GACxB,GAAInR,EAAQ2I,GACV,IAAK,IAAI5K,EAAI,EAAGA,EAAI4K,EAAMnI,OAAQzC,IAChC8E,KAAKgH,GAAGlB,EAAM5K,GAAIoT,GAKjBtO,KAAKqO,IAAIhT,KAAK2E,KAAKoH,OAAQtB,KAC9B9F,KAAKoH,OAAOtB,GAAS,IAIvB,IAAIrD,EAAQzC,KAAKoH,OAAOtB,GAAO1E,KAAKkN,GAAW,EAG/C,MAAO,CACL1K,OAAQ,kBACC5D,KAAKoH,OAAOtB,GAAOrD,OAY/B,CACDhG,IAAK,OACLN,MAAO,SAAc2J,EAAO5E,GAC1B,GAAI/D,EAAQ2I,GACV,IAAK,IAAI5K,EAAI,EAAGA,EAAI4K,EAAMnI,OAAQzC,IAChC8E,KAAKuO,KAAKzI,EAAM5K,GAAIgG,GAKnBlB,KAAKqO,IAAIhT,KAAK2E,KAAKoH,OAAQtB,IAKhC9F,KAAKoH,OAAOtB,GAAOtI,SAAQ,SAAU0F,GACnCA,EAAKhC,GAAW,WAIfkN,EA1EO,GA6EZI,EAAQ,WAOV,SAASA,EAAMxN,GACb,IAAIiG,EAAU3H,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAClF6M,EAAenM,KAAMwO,GAErBxO,KAAKyO,GAAK,GACVzO,KAAK0O,GAAK,GACV1O,KAAK2O,GAAK,IAAIP,EAEdpO,KAAK4O,UAAW,EAChB5O,KAAKgB,SAAWA,EAChBhB,KAAKmO,SAAWD,EAAapE,EAAU7C,GACvCjH,KAAKyC,MAAQzC,KAAKmO,SAASpE,QA0S7B,OA/RAwC,EAAYiC,EAAO,CAAC,CAClB/R,IAAK,QACLN,MAAO,WACL,IAAIyR,EAAatO,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAYrF,OAVAU,KAAK2O,GAAGJ,KAAK,gBAETjR,EAASsQ,GACX5N,KAAKyO,GAAKf,EAAM1N,KAAM4N,EAAY5N,KAAK2O,IAEvC5C,EAAK,6CAGP/L,KAAK2O,GAAGJ,KAAK,eAENvO,OAUR,CACDvD,IAAK,SACLN,MAAO,WACL,IAAI0S,EAAevP,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAQvF,OANInC,EAAQ0R,GACV7O,KAAK0O,GAAKG,EAEV9C,EAAK,6CAGA/L,OAUR,CACDvD,IAAK,SACLN,MAAO,WACL,IAAIgS,EAAW7O,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAUnF,OARAU,KAAKmO,SAAWD,EAAalO,KAAKmO,SAAUA,GAExCA,EAASpR,eAAe,aAC1BiD,KAAKyC,MAAQ0L,EAASpE,SAGxB/J,KAAK2O,GAAGJ,KAAK,UAENvO,OAeR,CACDvD,IAAK,KACLN,MAAO,SAAY2S,GAGjB,OAFA9O,KAAKyO,GAAGM,IAAIC,KAAKF,GAEV9O,OAUR,CACDvD,IAAK,OACLN,MAAO,SAAc2L,GAInB,OAHA9H,KAAKyO,GAAGQ,WAAWC,UACnBlP,KAAKyO,GAAGU,KAAKH,KAAKlH,GAEX9H,OASR,CACDvD,IAAK,UACLN,MAAO,WAGL,OAFA6D,KAAK2O,GAAGJ,KAAK,WAENvO,OAUR,CACDvD,IAAK,OACLN,MAAO,WACL,IAAIiT,EAAW9P,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,IAAmBA,UAAU,GAQ9E,OANI8P,IACFpP,KAAKmO,SAAShE,SAAWiF,GAG3BpP,KAAK2O,GAAGJ,KAAK,QAENvO,OASR,CACDvD,IAAK,QACLN,MAAO,WAGL,OAFA6D,KAAK2O,GAAGJ,KAAK,SAENvO,OASR,CACDvD,IAAK,UACLN,MAAO,WAGL,OAFA6D,KAAK4O,UAAW,EAET5O,OASR,CACDvD,IAAK,SACLN,MAAO,WAGL,OAFA6D,KAAK4O,UAAW,EAET5O,OAWR,CACDvD,IAAK,KACLN,MAAO,SAAY2J,EAAOwI,GAGxB,OAFAtO,KAAK2O,GAAG3H,GAAGlB,EAAOwI,GAEXtO,OAUR,CACDvD,IAAK,SACLN,MAAO,SAAgBV,GACrB,OAAOuE,KAAKmO,SAAS/H,OAAS3K,IAS/B,CACDgB,IAAK,WACLV,IAAK,WACH,OAAOiE,KAAKqP,IAUdlN,IAAK,SAAgBxG,GACf2B,EAAS3B,GACXqE,KAAKqP,GAAK1T,EAEVoQ,EAAK,2CAUR,CACDtP,IAAK,QACLV,IAAK,WACH,OAAOiE,KAAKsP,IASdnN,IAAK,SAAgBjH,GACnB8E,KAAKsP,GAAK/B,EAAMrS,KASjB,CACDuB,IAAK,OACLV,IAAK,WACH,OAAOiE,KAAKmO,SAAS/H,OAStB,CACD3J,IAAK,WACLV,IAAK,WACH,OAAOiE,KAAKuP,IASdpN,IAAK,SAAgBqN,GACnBxP,KAAKuP,KAAOC,MAGThB,EA5TG,GAkhBZ,SAASiB,IACP,OAAO,IAAIC,MAAOC,UAcpB,SAAS3E,EAAS4E,EAAMC,EAAM5I,GAC5B,IAAI6I,OAAU,EACV5O,OAAU,EACV6O,OAAO,EACP3Q,OAAS,EACT4Q,EAAW,EACV/I,IAASA,EAAU,IAExB,IAAIgJ,EAAQ,WACVD,GAA+B,IAApB/I,EAAQiJ,QAAoB,EAAIT,IAC3CK,EAAU,KACV1Q,EAASwQ,EAAKnK,MAAMvE,EAAS6O,GACxBD,IAAS5O,EAAU6O,EAAO,OAG7BI,EAAY,WACd,IAAIC,EAAKX,IACJO,IAAgC,IAApB/I,EAAQiJ,UAAmBF,EAAWI,GACvD,IAAIC,EAAYR,GAAQO,EAAKJ,GAc7B,OAbA9O,EAAUlB,KACV+P,EAAOzQ,UACH+Q,GAAa,GAAKA,EAAYR,GAC5BC,IACFQ,aAAaR,GACbA,EAAU,MAEZE,EAAWI,EACXhR,EAASwQ,EAAKnK,MAAMvE,EAAS6O,GACxBD,IAAS5O,EAAU6O,EAAO,OACrBD,IAAgC,IAArB7I,EAAQsJ,WAC7BT,EAAUU,WAAWP,EAAOI,IAEvBjR,GAST,OANA+Q,EAAUM,OAAS,WACjBH,aAAaR,GACbE,EAAW,EACXF,EAAU5O,EAAU6O,EAAO,MAGtBI,EAGT,IAAIO,EAAc,CAChBrF,IAAK,CAAC,aAAc,eACpBC,IAAK,CAAC,cAAe,eA+GvB,SAASqF,EAASnK,GAChB,GAAIA,GAAQA,EAAKoK,WAAY,CAI3B,IAHA,IAAIjU,EAAI6J,EAAKoK,WAAWC,WACpBlK,EAAU,GAEPhK,EAAGA,EAAIA,EAAEmU,YACK,IAAfnU,EAAE8J,UAAkB9J,IAAM6J,GAC5BG,EAAQvF,KAAKzE,GAIjB,OAAOgK,EAGT,MAAO,GAST,SAASoK,EAAMvK,GACb,SAAIA,GAAQA,aAAgBvH,OAAO+R,aA6lBrC,IAAIC,EAAe,WAIjB,SAASA,IACP,IAAIC,EAAY5R,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GACpF6M,EAAenM,KAAMiR,GAErBjR,KAAKkR,UAAYA,EAiEnB,OAnDA3E,EAAY0E,EAAc,CAAC,CACzBxU,IAAK,KACLN,MAAO,SAAYiL,EAAQrG,EAAIoQ,GAC7B,IAAIhK,EAAU7H,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,IAAmBA,UAAU,GAEzEjB,EAAS+I,KACXA,EAAS,CAACA,IAGZ,IAAK,IAAIlM,EAAI,EAAGA,EAAIkM,EAAOzJ,OAAQzC,IACjC8E,KAAKkR,UAAU9J,EAAOlM,IAAMiW,EAE5BpQ,EAAGsG,iBAAiBD,EAAOlM,GAAI8E,KAAKkR,UAAU9J,EAAOlM,IAAKiM,KAa7D,CACD1K,IAAK,MACLN,MAAO,SAAaiL,EAAQrG,GAC1B,IAAIoG,EAAU7H,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,IAAmBA,UAAU,GAEzEjB,EAAS+I,KACXA,EAAS,CAACA,IAGZ,IAAK,IAAIlM,EAAI,EAAGA,EAAIkM,EAAOzJ,OAAQzC,IACjC6F,EAAGqQ,oBAAoBhK,EAAOlM,GAAI8E,KAAKkR,UAAU9J,EAAOlM,IAAKiM,KAUhE,CACD1K,IAAK,UACLN,MAAO,kBACE6D,KAAKkR,cAGTD,EAzEU,GAgInB,IAAII,EAAmB,CAAC,MAAO,OAC3BC,EAAmB,CACrB,IAAK,IACL,IAAK,IACL,IAAK,KA6HP,SAASC,EAAK/C,EAAOgD,GACnB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,OAAIF,EAAWG,UAAUC,GAAG,QAClBF,EAGHA,IAYb,SAASG,EAAKrD,EAAOgD,GACnB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,OAAOA,EAAYF,EAAWM,KAAK3V,MAAQqS,EAAM/L,QAYvD,SAASsP,EAAMvD,EAAOgD,GACpB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,OAAOA,EAAYF,EAAWQ,OAAOC,KAAO,IAYlD,SAASC,EAAS1D,EAAOgD,GACvB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,GAAIlD,EAAML,SAASlE,SAAW,EAAG,CAC/B,IAAIiB,EAAOsG,EAAWW,KAAKhW,MAE3B,OAAImB,EAAS4N,GACJwG,EAAYxG,EAAK7F,OAGnBqM,EAAYxG,EAGrB,OAAOwG,IAYb,SAASU,EAAU5D,EAAOgD,GACxB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,IAAIxH,EAAMsH,EAAWM,KAAK3V,MACtBkW,EAAQb,EAAWc,MAAMD,MACzBpI,EAAUuE,EAAML,SAASlE,QACzBsI,EAAaf,EAAWc,MAAMC,WAElC,MAAgB,WAAZtI,EACKyH,GAAaW,EAAQ,EAAIE,EAAa,GAGxCb,EAAYa,EAAatI,EAAUC,EAAMD,IAuQtD,IAAIuI,GAAkB,EAEtB,IACE,IAAIC,EAAO7W,OAAOC,eAAe,GAAI,UAAW,CAC9CE,IAAK,WACHyW,GAAkB,KAItBvT,OAAOoI,iBAAiB,cAAe,KAAMoL,GAC7CxT,OAAOmS,oBAAoB,cAAe,KAAMqB,GAChD,MAAOC,IAET,IAAIC,EAAoBH,EAEpBI,EAAe,CAAC,aAAc,aAC9BC,EAAc,CAAC,YAAa,aAC5BC,EAAa,CAAC,WAAY,cAAe,UAAW,cACpDC,EAAe,CAAC,YAAa,YAAa,UAAW,cAEzD,SAASC,EAAOxE,EAAOgD,EAAYyB,GAMjC,IAAIC,EAAS,IAAIjC,EAEbkC,EAAW,EACXC,EAAc,EACdC,EAAc,EACdzE,GAAW,EACXzH,IAAUwL,GAAoB,CAAEW,SAAS,GAEzCC,EAAQ,CAMV7F,MAAO,WACL1N,KAAKwT,kBAUP/L,MAAO,SAAe3B,GACpB,IAAK8I,IAAaJ,EAAMI,SAAU,CAChC5O,KAAKkP,UAEL,IAAI8D,EAAQhT,KAAKyT,QAAQ3N,GAEzBqN,EAAW,KACXC,EAAc7F,EAAMyF,EAAMU,OAC1BL,EAAc9F,EAAMyF,EAAMW,OAE1B3T,KAAK4T,gBACL5T,KAAK6T,eAELZ,EAAO1E,KAAK,iBAUhBuF,KAAM,SAAchO,GAClB,IAAK0I,EAAMI,SAAU,CACnB,IAAImF,EAAkBvF,EAAML,SACxBxD,EAAaoJ,EAAgBpJ,WAC7BD,EAAaqJ,EAAgBrJ,WAC7BU,EAAU2I,EAAgB3I,QAG1B4H,EAAQhT,KAAKyT,QAAQ3N,GAErBkO,EAAUzG,EAAMyF,EAAMU,OAASN,EAC/Ba,EAAU1G,EAAMyF,EAAMW,OAASN,EAC/Ba,EAAQC,KAAKC,IAAIJ,GAAW,GAC5BK,EAAQF,KAAKC,IAAIH,GAAW,GAC5BK,EAAkBH,KAAKI,KAAKL,EAAQG,GACpCG,EAAgBL,KAAKI,KAAKF,GAI9B,KAAe,KAFflB,EAAWgB,KAAKM,KAAKD,EAAgBF,IAEhBH,KAAKO,GAAK/J,GAS7B,OAAO,EARP7E,EAAM6O,kBAENnD,EAAWrC,KAAKH,KAAKgF,EApvEtBY,WAovEwClK,IAEvC8G,EAAWqD,KAAKC,KAAKC,UAAUzR,IAAI8H,EAAQM,UAE3CuH,EAAO1E,KAAK,gBAclByG,IAAK,SAAalP,GAChB,IAAK0I,EAAMI,SAAU,CACnB,IAAIT,EAAWK,EAAML,SAEjB6E,EAAQhT,KAAKyT,QAAQ3N,GACrBmP,EAAYjV,KAAKiV,UAAUnP,GAE3BoP,EAAgBlC,EAAMU,MAAQN,EAC9B+B,EAAsB,IAAXhC,EAAiBgB,KAAKO,GACjCU,EAAQjB,KAAKkB,MAAMH,EAAgB1D,EAAWc,MAAMC,YAExDvS,KAAKsV,SAEDJ,EAAgBD,GAAaE,EAAWhH,EAASxD,YAE/CwD,EAAS1D,WACX2K,EAAQjB,KAAKoB,IAAIH,EAAO7H,EAAMY,EAAS1D,YAGrC+G,EAAWG,UAAUC,GAAG,SAC1BwD,GAASA,GAGX5D,EAAWzC,IAAIC,KAAKwC,EAAWG,UAAU6D,QAAQ,IAAMJ,KAC9CF,GAAiBD,GAAaE,EAAWhH,EAASxD,YAEvDwD,EAAS1D,WACX2K,EAAQjB,KAAKsB,IAAIL,GAAQ7H,EAAMY,EAAS1D,YAGtC+G,EAAWG,UAAUC,GAAG,SAC1BwD,GAASA,GAGX5D,EAAWzC,IAAIC,KAAKwC,EAAWG,UAAU6D,QAAQ,IAAMJ,KAGvD5D,EAAWrC,KAAKH,OAGlBwC,EAAWqD,KAAKC,KAAKC,UAAUnR,OAAOuK,EAAS/C,QAAQM,UAEvD1L,KAAK0V,kBACL1V,KAAK2V,iBAEL1C,EAAO1E,KAAK,eAUhBiF,eAAgB,WACd,IAAIoC,EAAQ5V,KAERmO,EAAWK,EAAML,SAEjBA,EAAS5D,gBACX2I,EAAOlM,GAAG4L,EAAa,GAAIpB,EAAWqD,KAAKgB,SAAS,SAAU/P,GAC5D8P,EAAMnO,MAAM3B,KACXqB,GAGDgH,EAAS3D,eACX0I,EAAOlM,GAAG4L,EAAa,GAAIpB,EAAWqD,KAAKgB,SAAS,SAAU/P,GAC5D8P,EAAMnO,MAAM3B,KACXqB,IAUP2O,iBAAkB,WAChB5C,EAAO6C,IAAInD,EAAa,GAAIpB,EAAWqD,KAAKgB,QAAS1O,GACrD+L,EAAO6C,IAAInD,EAAa,GAAIpB,EAAWqD,KAAKgB,QAAS1O,IASvDyM,cAAe,WACb,IAAIoC,EAAShW,KAEbkT,EAAOlM,GAAG6L,EAAarB,EAAWqD,KAAKgB,QAAS7K,GAAS,SAAUlF,GACjEkQ,EAAOlC,KAAKhO,KACX0I,EAAML,SAASnD,UAAW7D,IAS/BuO,gBAAiB,WACfxC,EAAO6C,IAAIlD,EAAarB,EAAWqD,KAAKgB,QAAS1O,IASnD0M,aAAc,WACZ,IAAIoC,EAASjW,KAEbkT,EAAOlM,GAAG8L,EAAYtB,EAAWqD,KAAKgB,SAAS,SAAU/P,GACvDmQ,EAAOjB,IAAIlP,OAUf6P,eAAgB,WACdzC,EAAO6C,IAAIjD,EAAYtB,EAAWqD,KAAKgB,UASzCpC,QAAS,SAAiB3N,GACxB,OAAIiN,EAAamD,QAAQpQ,EAAMM,OAAS,EAC/BN,EAGFA,EAAM2N,QAAQ,IAAM3N,EAAMqQ,eAAe,IASlDlB,UAAW,SAAmBnP,GAC5B,IAAIqI,EAAWK,EAAML,SAErB,OAAI4E,EAAamD,QAAQpQ,EAAMM,OAAS,EAC/B+H,EAAS3D,cAGX2D,EAAS5D,gBASlB+K,OAAQ,WAKN,OAJA1G,GAAW,EAEX4C,EAAWvC,WAAWqG,SAEftV,MASTkP,QAAS,WAKP,OAJAN,GAAW,EAEX4C,EAAWvC,WAAWC,UAEflP,OAuBX,OAfAiT,EAAOjM,GAAG,eAAe,WACvBwK,EAAWqD,KAAKC,KAAKC,UAAUzR,IAAIkL,EAAML,SAAS/C,QAAQK,cAO5DwH,EAAOjM,GAAG,WAAW,WACnBuM,EAAMuC,mBACNvC,EAAMmC,kBACNnC,EAAMoC,iBACNzC,EAAOkD,aAGF7C,EAgET,SAAS8C,EAAS7H,EAAOgD,EAAYyB,GAMnC,IAAIC,EAAS,IAAIjC,EASbqF,GAAW,EASXC,GAAY,EAEZC,EAAU,CAMZ9I,MAAO,WAOL1N,KAAKyW,GAAKjF,EAAWqD,KAAKgB,QAAQ5U,iBAAiB,KAEnDjB,KAAKtD,QASPA,KAAM,WACJwW,EAAOlM,GAAG,QAASwK,EAAWqD,KAAKgB,QAAS7V,KAAK0W,QASnDC,OAAQ,WACNzD,EAAO6C,IAAI,QAASvE,EAAWqD,KAAKgB,UAUtCa,MAAO,SAAe5Q,GAChByQ,IACFzQ,EAAM6O,kBACN7O,EAAM8Q,mBAUVC,OAAQ,WAGN,GAFAN,GAAY,GAEPD,EAAU,CACb,IAAK,IAAIpb,EAAI,EAAGA,EAAI8E,KAAK8W,MAAMnZ,OAAQzC,IACrC8E,KAAK8W,MAAM5b,GAAG6b,WAAY,EAE1B/W,KAAK8W,MAAM5b,GAAG2N,aAAa,YAAa7I,KAAK8W,MAAM5b,GAAG8b,aAAa,SAEnEhX,KAAK8W,MAAM5b,GAAG+b,gBAAgB,QAGhCX,GAAW,EAGb,OAAOtW,MASTkX,OAAQ,WAGN,GAFAX,GAAY,EAERD,EAAU,CACZ,IAAK,IAAIpb,EAAI,EAAGA,EAAI8E,KAAK8W,MAAMnZ,OAAQzC,IACrC8E,KAAK8W,MAAM5b,GAAG6b,WAAY,EAE1B/W,KAAK8W,MAAM5b,GAAG2N,aAAa,OAAQ7I,KAAK8W,MAAM5b,GAAG8b,aAAa,cAGhEV,GAAW,EAGb,OAAOtW,OA2CX,OAvCA+N,EAAOyI,EAAS,QAAS,CAMvBza,IAAK,WACH,OAAOya,EAAQC,MAQnBxD,EAAOjM,GAAG,cAAc,WACtBwP,EAAQK,YAOV5D,EAAOjM,GAAG,aAAa,WACrBwK,EAAWvC,WAAWkI,OAAM,WAC1BX,EAAQU,eAQZjE,EAAOjM,GAAG,WAAW,WACnBwP,EAAQU,SACRV,EAAQG,SACRzD,EAAOkD,aAGFI,EAgiBT,IAAIY,EAAa,CACfvC,KAzxEF,SAAerG,EAAOgD,GACpB,IAAIqD,EAAO,CAMTnH,MAAO,WACL1N,KAAK8U,KAAOtG,EAAMxN,SAClBhB,KAAKqX,MAAQrX,KAAK8U,KAAK9L,cAXR,2BAYfhJ,KAAKsX,OAAS7J,MAAM3Q,UAAUyE,MAAMlG,KAAK2E,KAAK6V,QAAQ0B,UAAUC,QAAO,SAAUC,GAC/E,OAAQA,EAAM1C,UAAU2C,SAASlJ,EAAML,SAAS/C,QAAQO,iBAsE9D,OAjEAoC,EAAO8G,EAAM,OAAQ,CAMnB9Y,IAAK,WACH,OAAO8Y,EAAK8C,IASdxV,IAAK,SAAanG,GACZqC,EAASrC,KACXA,EAAIkD,SAAS8J,cAAchN,IAGzB+U,EAAM/U,GACR6Y,EAAK8C,GAAK3b,EAEV+P,EAAK,gDAKXgC,EAAO8G,EAAM,QAAS,CAMpB9Y,IAAK,WACH,OAAO8Y,EAAKnG,IASdvM,IAAK,SAAa/F,GACZ2U,EAAM3U,GACRyY,EAAKnG,GAAKtS,EAEV2P,EAAK,kFAKXgC,EAAO8G,EAAM,UAAW,CAMtB9Y,IAAK,WACH,OAAO8Y,EAAKwC,MAAME,SAAS,MAIxB1C,GAysEP+C,UApyCF,SAAoBpJ,EAAOgD,EAAYyB,GACrC,IAAI2E,EAAY,CAOdzV,IAAK,SAAahG,GAChB,IAAI0b,EA1CV,SAAkBrJ,EAAOgD,EAAYyB,GAQnC,IAAI6E,EAAe,CAACjG,EAAKE,EAAMG,EAASE,GAAUzP,OAAO6L,EAAME,GAAI,CAAC6C,IAEpE,MAAO,CAOLwG,OAAQ,SAAgBrG,GACtB,IAAK,IAAIxW,EAAI,EAAGA,EAAI4c,EAAana,OAAQzC,IAAK,CAC5C,IAAI8c,EAAcF,EAAa5c,GAE3BqC,EAAWya,IAAgBza,EAAWya,IAAcvG,QACtDC,EAAYsG,EAAYxJ,EAAOgD,EAAYyB,GAAQxB,OAAOC,GAE1D3F,EAAK,kFAIT,OAAO2F,IAcSuG,CAAQzJ,EAAOgD,GAAYuG,OAAO5b,GAElDqV,EAAWqD,KAAKgB,QAAQqC,MAAML,UAAY,gBAAkB,EAAIA,EAAY,iBAS9EjU,OAAQ,WACN4N,EAAWqD,KAAKgB,QAAQqC,MAAML,UAAY,KA6C9C,OApCA5E,EAAOjM,GAAG,QAAQ,SAAU9F,GAC1B,IAAIgJ,EAAMsH,EAAWM,KAAK3V,MACtBwB,EAAS6T,EAAWc,MAAM3U,OAC1B0U,EAAQb,EAAWc,MAAMC,WAE7B,OAAI/D,EAAM2J,OAAO,aAAe3G,EAAWzC,IAAIqJ,SAAS,MACtD5G,EAAWvC,WAAWkI,OAAM,WAC1BlE,EAAO1E,KAAK,kBAEZqJ,EAAUzV,IAAIkQ,GAAS1U,EAAS,OAG3Bia,EAAUzV,KAAKkQ,EAAQnI,EAAMvM,IAGlC6Q,EAAM2J,OAAO,aAAe3G,EAAWzC,IAAIqJ,SAAS,MACtD5G,EAAWvC,WAAWkI,OAAM,WAC1BlE,EAAO1E,KAAK,kBAEZqJ,EAAUzV,IAAI,MAGTyV,EAAUzV,IAAIkQ,EAAQ1U,EAASuM,EAAMvM,IAGvCia,EAAUzV,IAAIjB,EAAQmX,aAO/BpF,EAAOjM,GAAG,WAAW,WACnB4Q,EAAUhU,YAGLgU,GAmuCP3I,WAhuCF,SAAqBT,EAAOgD,EAAYyB,GAOtC,IAAIrE,GAAW,EAEXK,EAAa,CAOfqJ,QAAS,SAAiBzb,GACxB,IAAIsR,EAAWK,EAAML,SAErB,OAAKS,EAIE/R,EAAW,QAAUsR,EAASpD,oBAH5BlO,EAAW,IAAMmD,KAAK+H,SAAW,MAAQoG,EAASpD,qBAa7D5I,IAAK,WACH,IAAItF,EAAWyC,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,YAEnFkS,EAAWqD,KAAKgB,QAAQqC,MAAMK,WAAavY,KAAKsY,QAAQzb,IAS1D+G,OAAQ,WACN4N,EAAWqD,KAAKgB,QAAQqC,MAAMK,WAAa,IAU7CpB,MAAO,SAAehP,GACpBqI,YAAW,WACTrI,MACCnI,KAAK+H,WASVuN,OAAQ,WACN1G,GAAW,EAEX5O,KAAKmC,OASP+M,QAAS,WACPN,GAAW,EAEX5O,KAAKmC,QAwDT,OApDA4L,EAAOkB,EAAY,WAAY,CAO7BlT,IAAK,WACH,IAAIoS,EAAWK,EAAML,SAErB,OAAIK,EAAM2J,OAAO,WAAa3G,EAAWzC,IAAIpH,OACpCwG,EAASrD,eAGXqD,EAASvD,qBAQpBqI,EAAOjM,GAAG,QAAQ,WAChBiI,EAAW9M,SASb8Q,EAAOjM,GAAG,CAAC,eAAgB,SAAU,mBAAmB,WACtDiI,EAAWC,aAOb+D,EAAOjM,GAAG,OAAO,WACfiI,EAAWqG,YAObrC,EAAOjM,GAAG,WAAW,WACnBiI,EAAWrL,YAGNqL,GAslCP0C,UAjkDF,SAAoBnD,EAAOgD,EAAYyB,GACrC,IAAItB,EAAY,CAMdjE,MAAO,WACL1N,KAAK7D,MAAQqS,EAAML,SAASlD,WAU9BuK,QAAS,SAAiB1G,GACxB,IAAI0J,EAAQ1J,EAAQvN,MAAM,EAAG,GAE7B,OAAIvB,KAAK4R,GAAG,OACH9C,EAAQlN,MAAM4W,GAAOlU,KAAKgN,EAAiBkH,IAG7C1J,GAUT8C,GAAI,SAAY3G,GACd,OAAOjL,KAAK7D,QAAU8O,GASxBwN,SAAU,WACRjH,EAAWqD,KAAKC,KAAKC,UAAUzR,IAAIkL,EAAML,SAAS/C,QAAQH,UAAUjL,KAAK7D,SAS3Euc,YAAa,WACXlH,EAAWqD,KAAKC,KAAKC,UAAUnR,OAAO4K,EAAML,SAAS/C,QAAQH,UAAUjL,KAAK7D,UAwDhF,OApDA4R,EAAO4D,EAAW,QAAS,CAMzB5V,IAAK,WACH,OAAO4V,EAAUgH,IAUnBxW,IAAK,SAAahG,GACZkV,EAAiB6E,QAAQ/Z,IAAU,EACrCwV,EAAUgH,GAAKxc,EAEf4P,EAAK,6CAUXkH,EAAOjM,GAAG,CAAC,UAAW,WAAW,WAC/B2K,EAAU+G,iBAOZzF,EAAOjM,GAAG,UAAU,WAClB2K,EAAUjE,WAQZuF,EAAOjM,GAAG,CAAC,eAAgB,WAAW,WACpC2K,EAAU8G,cAGL9G,GAk9CPQ,KAzsEF,SAAe3D,EAAOgD,EAAYyB,GAChC,IAAId,EAAO,CAMTzE,MAAO,WACL1N,KAAK7D,MAAQqS,EAAML,SAASjD,OA2DhC,OAvDA6C,EAAOoE,EAAM,QAAS,CAMpBpW,IAAK,WACH,OAAOoW,EAAKwG,IAUdxW,IAAK,SAAahG,GACZmB,EAASnB,IACXA,EAAMkJ,OAASkI,EAAMpR,EAAMkJ,QAC3BlJ,EAAMgb,MAAQ5J,EAAMpR,EAAMgb,QAE1Bhb,EAAQoR,EAAMpR,GAGhBgW,EAAKwG,GAAKxc,KAId4R,EAAOoE,EAAM,WAAY,CAMvBpW,IAAK,WACH,IAAII,EAAQgW,EAAKhW,MACb6N,EAAUwE,EAAML,SAASnE,QAE7B,OAAI1M,EAASnB,GACJA,EAAMkJ,OAAS2E,EAAU7N,EAAMgb,MAAQnN,EAGjC,EAAR7N,EAAY6N,KAQvBiJ,EAAOjM,GAAG,CAAC,SAAU,WAAW,WAC9BmL,EAAKzE,WAGAyE,GAuoEPG,MAjiEF,SAAgB9D,EAAOgD,EAAYyB,GACjC,IAAIX,EAAQ,CAMVsG,YAAa,WAIX,IAHA,IAAIvG,EAAQrS,KAAKuS,WAAa,KAC1B+E,EAAS9F,EAAWqD,KAAKyC,OAEpBpc,EAAI,EAAGA,EAAIoc,EAAO3Z,OAAQzC,IACjCoc,EAAOpc,GAAGgd,MAAM7F,MAAQA,GAU5BwG,aAAc,SAAsBC,GAClCtH,EAAWqD,KAAKgB,QAAQqC,MAAM7F,MAAQrS,KAAK+Y,YAAc,MAS3DnV,OAAQ,WAGN,IAFA,IAAI0T,EAAS9F,EAAWqD,KAAKyC,OAEpBpc,EAAI,EAAGA,EAAIoc,EAAO3Z,OAAQzC,IACjCoc,EAAOpc,GAAGgd,MAAM7F,MAAQ,GAG1Bb,EAAWqD,KAAKgB,QAAQqC,MAAM7F,MAAQ,KAmE1C,OA/DAtE,EAAOuE,EAAO,SAAU,CAMtBvW,IAAK,WACH,OAAOyV,EAAWqD,KAAKyC,OAAO3Z,UAIlCoQ,EAAOuE,EAAO,QAAS,CAMrBvW,IAAK,WACH,OAAOyV,EAAWqD,KAAKC,KAAKkE,eAIhCjL,EAAOuE,EAAO,cAAe,CAM3BvW,IAAK,WACH,OAAOuW,EAAMC,WAAaD,EAAM3U,OAAS6T,EAAWM,KAAKG,KAAOT,EAAWQ,OAAOC,QAItFlE,EAAOuE,EAAO,aAAc,CAM1BvW,IAAK,WACH,OAAOuW,EAAMD,MAAQ7D,EAAML,SAASnE,QAAUwH,EAAWW,KAAK8G,SAAWzH,EAAWM,KAAKmH,YAU7FhG,EAAOjM,GAAG,CAAC,eAAgB,SAAU,WAAW,WAC9CsL,EAAMsG,cACNtG,EAAMuG,kBAOR5F,EAAOjM,GAAG,WAAW,WACnBsL,EAAM1O,YAGD0O,GAw7DPR,KA56EF,SAAetD,EAAOgD,EAAYyB,GAChC,IAAInB,EAAO,CAQTrM,MAAO,SAAe6R,GACpB,IAAK,IAAIpc,EAAI,EAAG+H,EAAMqU,EAAO3Z,OAAQzC,EAAI+H,EAAK/H,IAAK,CACjD,IAAIgd,EAAQZ,EAAOpc,GAAGgd,MAClBjN,EAAYuG,EAAWG,UAAUxV,MAGnC+b,EAAMxH,EAAYzF,GAAW,IADrB,IAAN/P,EACiC8E,KAAK7D,MAAQ,EAAI,KAEjB,GAGjCjB,IAAMoc,EAAO3Z,OAAS,EACxBua,EAAMxH,EAAYzF,GAAW,IAAMjL,KAAK7D,MAAQ,EAAI,KAEpD+b,EAAMxH,EAAYzF,GAAW,IAAM,KAYzCrH,OAAQ,SAAgB0T,GACtB,IAAK,IAAIpc,EAAI,EAAG+H,EAAMqU,EAAO3Z,OAAQzC,EAAI+H,EAAK/H,IAAK,CACjD,IAAIgd,EAAQZ,EAAOpc,GAAGgd,MAEtBA,EAAMgB,WAAa,GACnBhB,EAAMiB,YAAc,MA2D1B,OAtDApL,EAAO+D,EAAM,QAAS,CAMpB/V,IAAK,WACH,OAAOwR,EAAMiB,EAAML,SAASjE,QAIhC6D,EAAO+D,EAAM,OAAQ,CAOnB/V,IAAK,WACH,OAAO+V,EAAK3V,OAASqV,EAAWc,MAAM3U,OAAS,MAInDoQ,EAAO+D,EAAM,WAAY,CAOvB/V,IAAK,WACH,IAAIiO,EAAUwE,EAAML,SAASnE,QAE7B,OAAO8H,EAAK3V,OAAS6N,EAAU,GAAKA,KASxCiJ,EAAOjM,GAAG,CAAC,cAAe,UAAWgE,GAAS,WAC5C8G,EAAKrM,MAAM+L,EAAWqD,KAAKgB,QAAQ0B,YAClC,KAMHtE,EAAOjM,GAAG,WAAW,WACnB8K,EAAKlO,OAAO4N,EAAWqD,KAAKgB,QAAQ0B,aAG/BzF,GA00EP3C,KAtoEF,SAAeX,EAAOgD,EAAYyB,GAChC,IAAI9D,EAAO,CAMTzB,MAAO,WACL1N,KAAKqP,GAAK,GAUZL,KAAM,WACJ,IAAI4G,EAAQ5V,KAER2H,EAASrI,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,EAEjFU,KAAK2H,OAASA,EAEdsL,EAAO1E,KAAK,OAAQ,CAClB8J,SAAUrY,KAAK7D,QAGjBqV,EAAWvC,WAAWkI,OAAM,WAC1BlE,EAAO1E,KAAK,aAAc,CACxB8J,SAAUzC,EAAMzZ,aAiExB,OA3DA4R,EAAOoB,EAAM,SAAU,CAMrBpT,IAAK,WACH,OAAOoT,EAAKE,IASdlN,IAAK,SAAahG,GAChBgT,EAAKE,GAAMhS,EAAYlB,GAAwB,EAAfoR,EAAMpR,MAI1C4R,EAAOoB,EAAM,YAAa,CAMxBpT,IAAK,WACH,OAAOyV,EAAWc,MAAMC,WAAa/D,EAAM/L,SAI/CsL,EAAOoB,EAAM,QAAS,CAMpBpT,IAAK,WACH,IAAI4L,EAAS3H,KAAK2H,OACd+J,EAAY1R,KAAK0R,UAErB,OAAIF,EAAWG,UAAUC,GAAG,OACnBF,EAAY/J,EAGd+J,EAAY/J,KASvBsL,EAAOjM,GAAG,CAAC,eAAgB,QAAQ,WACjCmI,EAAKH,UAGAG,GAuiEP6C,OA31DF,SAAiBxD,EAAOgD,EAAYyB,GAClC,IAAIjB,EAAS,CAIXtE,MAAO,WACL1N,KAAK8W,MAAQ,GAETtI,EAAM2J,OAAO,cACfnY,KAAK8W,MAAQ9W,KAAKoZ,YAUtBA,QAAS,WAaP,IAZA,IAAItC,EAAQxX,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAC5EgY,EAAS9F,EAAWqD,KAAKyC,OACzBvD,EAAkBvF,EAAML,SACxBnE,EAAU+J,EAAgB/J,QAC1BoB,EAAU2I,EAAgB3I,QAG1BiO,KAAqB7K,EAAML,SAASjD,KACpCoO,EAAOtP,EAAUqP,EACjB5R,EAAQ6P,EAAO/V,MAAM,EAAG+X,GACxBtE,EAAMsC,EAAO/V,OAAO+X,GAEftd,EAAI,EAAGA,EAAImY,KAAKsB,IAAI,EAAGtB,KAAKoF,MAAMvP,EAAUsN,EAAO3Z,SAAU3B,IAAK,CACzE,IAAK,IAAId,EAAI,EAAGA,EAAIuM,EAAM9J,OAAQzC,IAAK,CACrC,IAAIse,EAAQ/R,EAAMvM,GAAGue,WAAU,GAE/BD,EAAMzE,UAAUzR,IAAI8H,EAAQO,YAE5BmL,EAAM1V,KAAKoY,GAGb,IAAK,IAAIlK,EAAK,EAAGA,EAAK0F,EAAIrX,OAAQ2R,IAAM,CACtC,IAAIoK,EAAS1E,EAAI1F,GAAImK,WAAU,GAE/BC,EAAO3E,UAAUzR,IAAI8H,EAAQO,YAE7BmL,EAAMjQ,QAAQ6S,IAIlB,OAAO5C,GAST6C,OAAQ,WAYN,IAXA,IAAI7C,EAAQ9W,KAAK8W,MACb8C,EAAmBpI,EAAWqD,KAC9BgB,EAAU+D,EAAiB/D,QAC3ByB,EAASsC,EAAiBtC,OAG1BuC,EAAO1F,KAAKoF,MAAMzC,EAAMnZ,OAAS,GACjCmc,EAAUhD,EAAMvV,MAAM,EAAGsY,GAAMtT,UAC/BoT,EAAS7C,EAAMvV,MAAMsY,EAAM/C,EAAMnZ,QACjC0U,EAAQb,EAAWc,MAAMC,WAAa,KAEjCrX,EAAI,EAAGA,EAAIye,EAAOhc,OAAQzC,IACjC2a,EAAQkE,YAAYJ,EAAOze,IAG7B,IAAK,IAAI8e,EAAM,EAAGA,EAAMF,EAAQnc,OAAQqc,IACtCnE,EAAQoE,aAAaH,EAAQE,GAAM1C,EAAO,IAG5C,IAAK,IAAI4C,EAAM,EAAGA,EAAMpD,EAAMnZ,OAAQuc,IACpCpD,EAAMoD,GAAKhC,MAAM7F,MAAQA,GAU7BzO,OAAQ,WAIN,IAHA,IAAIkT,EAAQ9W,KAAK8W,MAGR5b,EAAI,EAAGA,EAAI4b,EAAMnZ,OAAQzC,IAChCsW,EAAWqD,KAAKgB,QAAQsE,YAAYrD,EAAM5b,MA4ChD,OAvCA6S,EAAOiE,EAAQ,OAAQ,CAMrBjW,IAAK,WACH,OAAQyV,EAAWc,MAAMC,WAAaf,EAAWM,KAAK3V,OAAS6V,EAAO8E,MAAMnZ,UAQhFsV,EAAOjM,GAAG,UAAU,WAClBgL,EAAOpO,SACPoO,EAAOtE,QACPsE,EAAO2H,YAOT1G,EAAOjM,GAAG,gBAAgB,WACpBwH,EAAM2J,OAAO,aACfnG,EAAO2H,YAQX1G,EAAOjM,GAAG,WAAW,WACnBgL,EAAOpO,YAGFoO,GAitDPoI,OAloDF,SAAiB5L,EAAOgD,EAAYyB,GAMlC,IAAIC,EAAS,IAAIjC,EAEbmJ,EAAS,CAIX1M,MAAO,WACL1N,KAAKtD,QAUPA,KAAM,WACJwW,EAAOlM,GAAG,SAAU/H,OAAQ+L,GAAS,WACnCiI,EAAO1E,KAAK,YACXC,EAAML,SAASnD,YASpB2L,OAAQ,WACNzD,EAAO6C,IAAI,SAAU9W,UAazB,OALAgU,EAAOjM,GAAG,WAAW,WACnBoT,EAAOzD,SACPzD,EAAOkD,aAGFgE,GAklDPC,MAz7DF,SAAgB7L,EAAOgD,EAAYyB,GACjC,IAAIoH,EAAQ,CAOV3M,MAAO,WACLuF,EAAO1E,KAAK,gBAEZvO,KAAKsa,YACLta,KAAKua,cAELtH,EAAO1E,KAAK,gBASd+L,UAAW,WACT9I,EAAWqD,KAAKC,KAAKC,UAAUzR,IAAIkL,EAAML,SAAS/C,QAAQoD,EAAML,SAAS/H,QAS3EmU,YAAa,WACX,IAAInP,EAAUoD,EAAML,SAAS/C,QACzBqM,EAAQjG,EAAWqD,KAAKyC,OAAO9I,EAAM/L,OAErCgV,IACFA,EAAM1C,UAAUzR,IAAI8H,EAAQS,aAE5B8E,EAAS8G,GAAOja,SAAQ,SAAUgd,GAChCA,EAAQzF,UAAUnR,OAAOwH,EAAQS,kBAWvC4O,cAAe,WACb,IAAIrP,EAAUoD,EAAML,SAAS/C,QAE7BoG,EAAWqD,KAAKC,KAAKC,UAAUnR,OAAOwH,EAAQoD,EAAML,SAAS/H,OAE7DoL,EAAWqD,KAAKyC,OAAO9Z,SAAQ,SAAUgd,GACvCA,EAAQzF,UAAUnR,OAAOwH,EAAQS,kBA+BvC,OArBAoH,EAAOjM,GAAG,CAAC,UAAW,WAAW,WAC/BqT,EAAMI,mBAQRxH,EAAOjM,GAAG,CAAC,SAAU,WAAW,WAC9BqT,EAAM3M,WAORuF,EAAOjM,GAAG,cAAc,WACtBqT,EAAME,iBAGDF,GAi2DPtL,IApsFF,SAAcP,EAAOgD,EAAYyB,GAC/B,IAAIlE,EAAM,CAMRrB,MAAO,WACL1N,KAAKqP,IAAK,GASZL,KAAM,SAAc8E,GAClB,IAAI8B,EAAQ5V,KAEPwO,EAAMI,WACTJ,EAAMU,UAENlP,KAAK8T,KAAOA,EAEZb,EAAO1E,KAAK,aAAcvO,KAAK8T,MAE/B9T,KAAK0a,YAELzH,EAAO1E,KAAK,MAAOvO,KAAK8T,MAExBtC,EAAWvC,WAAWkI,OAAM,WACtBvB,EAAM+E,WACR1H,EAAO1E,KAAK,YAAaqH,EAAM9B,MAG7B8B,EAAMgF,SACR3H,EAAO1E,KAAK,UAAWqH,EAAM9B,OAG3B8B,EAAMwC,SAAS,MAAQxC,EAAMwC,SAAS,QACxCxC,EAAMvG,IAAK,EAEX4D,EAAO1E,KAAK,aAAcqH,EAAM9B,OAGlCb,EAAO1E,KAAK,YAAaqH,EAAM9B,MAE/BtF,EAAM8G,cAWZoF,UAAW,WACT,IAAI5G,EAAO9T,KAAK8T,KACZnW,EAASqC,KAAKrC,OACdyX,EAAQtB,EAAKsB,MACbnK,EAAY6I,EAAK7I,UAGjB4P,EApkBgB,iBAokBUtN,EAAM6H,IAA4B,IAAjB7H,EAAM6H,GAErD,OAAQnK,GACN,IAAK,IACW,MAAVmK,EACF5G,EAAM/L,MAAQ9E,EACLqC,KAAK4a,QACRpM,EAAM2J,OAAO,YAAc3J,EAAML,SAAStD,SAC9C7K,KAAKqP,IAAK,EAEVb,EAAM/L,MAAQ,GAEPoY,EACTrM,EAAM/L,OAAS0R,KAAKoB,IAAI5X,EAAS6Q,EAAM/L,OAAQ8K,EAAM6H,IAErD5G,EAAM/L,QAER,MAEF,IAAK,IACW,MAAV2S,EACF5G,EAAM/L,MAAQ,EACLzC,KAAK2a,UACRnM,EAAM2J,OAAO,YAAc3J,EAAML,SAAStD,SAC9C7K,KAAKqP,IAAK,EAEVb,EAAM/L,MAAQ9E,GAEPkd,EACTrM,EAAM/L,OAAS0R,KAAKoB,IAAI/G,EAAM/L,MAAO8K,EAAM6H,IAE3C5G,EAAM/L,QAER,MAEF,IAAK,IACH+L,EAAM/L,MAAQ2S,EACd,MAEF,QACErJ,EAAK,8BAAgCd,EAAYmK,EAAQ,qBAW/DuF,QAAS,WACP,OAAuB,IAAhBnM,EAAM/L,OASfmY,MAAO,WACL,OAAOpM,EAAM/L,QAAUzC,KAAKrC,QAU9Bya,SAAU,SAAkBnN,GAC1B,OAAOjL,KAAKqP,IAAMrP,KAAK8T,KAAK7I,YAAcA,IAgE9C,OA5DA8C,EAAOgB,EAAK,OAAQ,CAMlBhT,IAAK,WACH,OAAOiE,KAAK8a,IASd3Y,IAAK,SAAahG,GAChB,IAAI4e,EAAO5e,EAAM6e,OAAO,GAExBhb,KAAK8a,GAAK,CACR7P,UAAW9O,EAAM6e,OAAO,EAAG,GAC3B5F,MAAO2F,EAAOxN,EAAMwN,GAAQxN,EAAMwN,GAAQA,EAAO,MAKvDhN,EAAOgB,EAAK,SAAU,CAOpBhT,IAAK,WACH,IAAIoS,EAAWK,EAAML,SACjBxQ,EAAS6T,EAAWqD,KAAKyC,OAAO3Z,OAMpC,OAAI6Q,EAAM2J,OAAO,WAAkC,WAArBhK,EAASlE,SAAwBkE,EAAS7D,MAC/D3M,EAAS,GAAK4P,EAAMY,EAASnE,SAAW,GAAKuD,EAAMY,EAASlE,SAG9DtM,EAAS,KAIpBoQ,EAAOgB,EAAK,SAAU,CAMpBhT,IAAK,WACH,OAAOiE,KAAKqP,MAITN,KA4/EK,SAAUkM,GAGtB,SAASC,IAEP,OADA/O,EAAenM,KAAMkb,GACd9N,EAA0BpN,MAAOkb,EAASC,WAAavf,OAAOuR,eAAe+N,IAAWzV,MAAMzF,KAAMV,aA3xGhG,SAAU8b,EAAUC,GACjC,GAA0B,mBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAI/O,UAAU,kEAAoE+O,GAG1FD,EAASte,UAAYlB,OAAOY,OAAO6e,GAAcA,EAAWve,UAAW,CACrEgB,YAAa,CACX3B,MAAOif,EACPtf,YAAY,EACZ6Q,UAAU,EACV5G,cAAc,KAGdsV,IAAYzf,OAAO0f,eAAiB1f,OAAO0f,eAAeF,EAAUC,GAAcD,EAASD,UAAYE,IA0wG3GE,CAASL,EAAUD,GAOnB1O,EAAY2O,EAAU,CAAC,CACrBze,IAAK,QACLN,MAAO,WACL,IAAIyR,EAAatO,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAErF,OAAOvD,EAAImf,EAASpe,UAAUqe,WAAavf,OAAOuR,eAAe+N,EAASpe,WAAY,QAASkD,MAAM3E,KAAK2E,KAAM8M,EAAS,GAAIsK,EAAYxJ,QAbjI,CAiBZY,I,6BCvkHF,kBAOegN,IAJK,CAACC,EAAexU,EAAU,MAC5C,IAAIuH,IAAMiN,EAAexU,GAASyG,MAAM,CAAE6F,UAAOiD,gB,6BCEnD,IAAI1M,EAAW,CAUb1D,KAAM,SAON2D,QAAS,EAOTC,QAAS,EAWTC,QAAS,EAOTC,IAAK,GAOLC,UAAU,EAOVC,YAAY,EAOZC,UAAU,EAUVC,OAAO,EAOPC,eAAgB,GAOhBC,cAAe,IAOfC,UAAU,EAOVC,WAAY,GAOZC,WAAY,GAOZC,kBAAmB,IAOnBC,QAAQ,EAORC,eAAgB,IAOhBC,oBAAqB,oCAOrBC,SAAU,GAWVC,UAAW,MAcXC,KAAM,EAWNC,YAAa,GAQbC,QAAS,CACPH,UAAW,CACTI,IAAK,aACLC,IAAK,cAEPC,OAAQ,gBACRC,SAAU,kBACVC,UAAW,mBACXC,SAAU,kBACVC,WAAY,sBACZC,UAAW,wBACXC,YAAa,uBACbC,cAAe,2BAUnB,SAASC,EAAKC,GACZC,QAAQC,MAAM,iBAAmBF,GAGnC,IAAIzE,EAA4B,mBAAXtL,QAAoD,iBAApBA,OAAOuL,SAAwB,SAAU/J,GAC5F,cAAcA,GACZ,SAAUA,GACZ,OAAOA,GAAyB,mBAAXxB,QAAyBwB,EAAIK,cAAgB7B,QAAUwB,IAAQxB,OAAOa,UAAY,gBAAkBW,GAGvH0O,EAAiB,SAAUC,EAAUC,GACvC,KAAMD,aAAoBC,GACxB,MAAM,IAAIC,UAAU,sCAIpBC,EAAc,WAChB,SAASC,EAAiBlG,EAAQmG,GAChC,IAAK,IAAIvR,EAAI,EAAGA,EAAIuR,EAAM9O,OAAQzC,IAAK,CACrC,IAAIwR,EAAaD,EAAMvR,GACvBwR,EAAW5Q,WAAa4Q,EAAW5Q,aAAc,EACjD4Q,EAAW3G,cAAe,EACtB,UAAW2G,IAAYA,EAAWC,UAAW,GACjD/Q,OAAOC,eAAeyK,EAAQoG,EAAWjQ,IAAKiQ,IAIlD,OAAO,SAAUL,EAAaO,EAAYC,GAGxC,OAFID,GAAYJ,EAAiBH,EAAYvP,UAAW8P,GACpDC,GAAaL,EAAiBH,EAAaQ,GACxCR,GAdO,GAkBdS,EAAWlR,OAAO6N,QAAU,SAAUnD,GACxC,IAAK,IAAIpL,EAAI,EAAGA,EAAIoE,UAAU3B,OAAQzC,IAAK,CACzC,IAAIsK,EAASlG,UAAUpE,GAEvB,IAAK,IAAIuB,KAAO+I,EACV5J,OAAOkB,UAAUC,eAAe1B,KAAKmK,EAAQ/I,KAC/C6J,EAAO7J,GAAO+I,EAAO/I,IAK3B,OAAO6J,GAGLvK,EAAM,SAASA,EAAIa,EAAQC,EAAUkQ,GACxB,OAAXnQ,IAAiBA,EAASoQ,SAASlQ,WACvC,IAAImQ,EAAOrR,OAAOuJ,yBAAyBvI,EAAQC,GAEnD,QAAaqK,IAAT+F,EAAoB,CACtB,IAAIC,EAAStR,OAAOuR,eAAevQ,GAEnC,OAAe,OAAXsQ,OACF,EAEOnR,EAAImR,EAAQrQ,EAAUkQ,GAE1B,GAAI,UAAWE,EACpB,OAAOA,EAAK9Q,MAEZ,IAAIT,EAASuR,EAAKlR,IAElB,YAAemL,IAAXxL,EAIGA,EAAOL,KAAK0R,QAJnB,GAwBAK,EAA4B,SAAUC,EAAMhS,GAC9C,IAAKgS,EACH,MAAM,IAAIC,eAAe,6DAG3B,OAAOjS,GAAyB,iBAATA,GAAqC,mBAATA,EAA8BgS,EAAPhS,GAU5E,SAASkS,EAAMpR,GACb,OAAOqR,SAASrR,GAoBlB,SAASkC,EAASlC,GAChB,MAAwB,iBAAVA,EAWhB,SAASmB,EAASnB,GAChB,IAAIiK,OAAwB,IAAVjK,EAAwB,YAAcoL,EAAQpL,GAEhE,MAAgB,aAATiK,GAAgC,WAATA,KAAuBjK,EAmBvD,SAASoB,EAAWpB,GAClB,MAAwB,mBAAVA,EAShB,SAASkB,EAAYlB,GACnB,YAAwB,IAAVA,EAShB,SAASgB,EAAQhB,GACf,OAAOA,EAAM2B,cAAgB2P,MAY/B,SAASC,EAAMC,EAAOC,EAAYxG,GAChC,IAAIyG,EAAa,GAEjB,IAAK,IAAIpS,KAAQmS,EACXrQ,EAAWqQ,EAAWnS,IACxBoS,EAAWpS,GAAQmS,EAAWnS,GAAMkS,EAAOE,EAAYzG,GAEvD2E,EAAK,gCAIT,IAAK,IAAI+B,KAASD,EACZtQ,EAAWsQ,EAAWC,GAAOJ,QAC/BG,EAAWC,GAAOJ,QAItB,OAAOG,EAWT,SAASE,EAAOtQ,EAAKuQ,EAAMC,GACzBrS,OAAOC,eAAe4B,EAAKuQ,EAAMC,GAwBnC,SAASC,EAAapE,EAAUqE,GAC9B,IAAIlH,EAAU6F,EAAS,GAAIhD,EAAUqE,GAmBrC,OAZIA,EAASpR,eAAe,aAC1BkK,EAAQmE,QAAU0B,EAAS,GAAIhD,EAASsB,QAAS+C,EAAS/C,SAEtD+C,EAAS/C,QAAQrO,eAAe,eAClCkK,EAAQmE,QAAQH,UAAY6B,EAAS,GAAIhD,EAASsB,QAAQH,UAAWkD,EAAS/C,QAAQH,aAItFkD,EAASpR,eAAe,iBAC1BkK,EAAQkE,YAAc2B,EAAS,GAAIhD,EAASqB,YAAagD,EAAShD,cAG7DlE,EAGT,IAAImH,EAAY,WAMd,SAASA,IACP,IAAIhH,EAAS9H,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GACjF6M,EAAenM,KAAMoO,GAErBpO,KAAKoH,OAASA,EACdpH,KAAKqO,IAAMjH,EAAOrK,eA+DpB,OApDAwP,EAAY6B,EAAW,CAAC,CACtB3R,IAAK,KACLN,MAAO,SAAY2J,EAAOwI,GACxB,GAAInR,EAAQ2I,GACV,IAAK,IAAI5K,EAAI,EAAGA,EAAI4K,EAAMnI,OAAQzC,IAChC8E,KAAKgH,GAAGlB,EAAM5K,GAAIoT,GAKjBtO,KAAKqO,IAAIhT,KAAK2E,KAAKoH,OAAQtB,KAC9B9F,KAAKoH,OAAOtB,GAAS,IAIvB,IAAIrD,EAAQzC,KAAKoH,OAAOtB,GAAO1E,KAAKkN,GAAW,EAG/C,MAAO,CACL1K,OAAQ,kBACC5D,KAAKoH,OAAOtB,GAAOrD,OAY/B,CACDhG,IAAK,OACLN,MAAO,SAAc2J,EAAO5E,GAC1B,GAAI/D,EAAQ2I,GACV,IAAK,IAAI5K,EAAI,EAAGA,EAAI4K,EAAMnI,OAAQzC,IAChC8E,KAAKuO,KAAKzI,EAAM5K,GAAIgG,GAKnBlB,KAAKqO,IAAIhT,KAAK2E,KAAKoH,OAAQtB,IAKhC9F,KAAKoH,OAAOtB,GAAOtI,SAAQ,SAAU0F,GACnCA,EAAKhC,GAAW,WAIfkN,EA1EO,GA6EZI,EAAQ,WAOV,SAASA,EAAMxN,GACb,IAAIiG,EAAU3H,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAClF6M,EAAenM,KAAMwO,GAErBxO,KAAKyO,GAAK,GACVzO,KAAK0O,GAAK,GACV1O,KAAK2O,GAAK,IAAIP,EAEdpO,KAAK4O,UAAW,EAChB5O,KAAKgB,SAAWA,EAChBhB,KAAKmO,SAAWD,EAAapE,EAAU7C,GACvCjH,KAAKyC,MAAQzC,KAAKmO,SAASpE,QA0S7B,OA/RAwC,EAAYiC,EAAO,CAAC,CAClB/R,IAAK,QACLN,MAAO,WACL,IAAIyR,EAAatO,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAYrF,OAVAU,KAAK2O,GAAGJ,KAAK,gBAETjR,EAASsQ,GACX5N,KAAKyO,GAAKf,EAAM1N,KAAM4N,EAAY5N,KAAK2O,IAEvC5C,EAAK,6CAGP/L,KAAK2O,GAAGJ,KAAK,eAENvO,OAUR,CACDvD,IAAK,SACLN,MAAO,WACL,IAAI0S,EAAevP,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAQvF,OANInC,EAAQ0R,GACV7O,KAAK0O,GAAKG,EAEV9C,EAAK,6CAGA/L,OAUR,CACDvD,IAAK,SACLN,MAAO,WACL,IAAIgS,EAAW7O,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAUnF,OARAU,KAAKmO,SAAWD,EAAalO,KAAKmO,SAAUA,GAExCA,EAASpR,eAAe,aAC1BiD,KAAKyC,MAAQ0L,EAASpE,SAGxB/J,KAAK2O,GAAGJ,KAAK,UAENvO,OAeR,CACDvD,IAAK,KACLN,MAAO,SAAY2S,GAGjB,OAFA9O,KAAKyO,GAAGM,IAAIC,KAAKF,GAEV9O,OAUR,CACDvD,IAAK,OACLN,MAAO,SAAc2L,GAInB,OAHA9H,KAAKyO,GAAGQ,WAAWC,UACnBlP,KAAKyO,GAAGU,KAAKH,KAAKlH,GAEX9H,OASR,CACDvD,IAAK,UACLN,MAAO,WAGL,OAFA6D,KAAK2O,GAAGJ,KAAK,WAENvO,OAUR,CACDvD,IAAK,OACLN,MAAO,WACL,IAAIiT,EAAW9P,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,IAAmBA,UAAU,GAQ9E,OANI8P,IACFpP,KAAKmO,SAAShE,SAAWiF,GAG3BpP,KAAK2O,GAAGJ,KAAK,QAENvO,OASR,CACDvD,IAAK,QACLN,MAAO,WAGL,OAFA6D,KAAK2O,GAAGJ,KAAK,SAENvO,OASR,CACDvD,IAAK,UACLN,MAAO,WAGL,OAFA6D,KAAK4O,UAAW,EAET5O,OASR,CACDvD,IAAK,SACLN,MAAO,WAGL,OAFA6D,KAAK4O,UAAW,EAET5O,OAWR,CACDvD,IAAK,KACLN,MAAO,SAAY2J,EAAOwI,GAGxB,OAFAtO,KAAK2O,GAAG3H,GAAGlB,EAAOwI,GAEXtO,OAUR,CACDvD,IAAK,SACLN,MAAO,SAAgBV,GACrB,OAAOuE,KAAKmO,SAAS/H,OAAS3K,IAS/B,CACDgB,IAAK,WACLV,IAAK,WACH,OAAOiE,KAAKqP,IAUdlN,IAAK,SAAgBxG,GACf2B,EAAS3B,GACXqE,KAAKqP,GAAK1T,EAEVoQ,EAAK,2CAUR,CACDtP,IAAK,QACLV,IAAK,WACH,OAAOiE,KAAKsP,IASdnN,IAAK,SAAgBjH,GACnB8E,KAAKsP,GAAK/B,EAAMrS,KASjB,CACDuB,IAAK,OACLV,IAAK,WACH,OAAOiE,KAAKmO,SAAS/H,OAStB,CACD3J,IAAK,WACLV,IAAK,WACH,OAAOiE,KAAKuP,IASdpN,IAAK,SAAgBqN,GACnBxP,KAAKuP,KAAOC,MAGThB,EA5TG,GAkhBZ,SAASiB,IACP,OAAO,IAAIC,MAAOC,UAcpB,SAAS3E,EAAS4E,EAAMC,EAAM5I,GAC5B,IAAI6I,OAAU,EACV5O,OAAU,EACV6O,OAAO,EACP3Q,OAAS,EACT4Q,EAAW,EACV/I,IAASA,EAAU,IAExB,IAAIgJ,EAAQ,WACVD,GAA+B,IAApB/I,EAAQiJ,QAAoB,EAAIT,IAC3CK,EAAU,KACV1Q,EAASwQ,EAAKnK,MAAMvE,EAAS6O,GACxBD,IAAS5O,EAAU6O,EAAO,OAG7BI,EAAY,WACd,IAAIC,EAAKX,IACJO,IAAgC,IAApB/I,EAAQiJ,UAAmBF,EAAWI,GACvD,IAAIC,EAAYR,GAAQO,EAAKJ,GAc7B,OAbA9O,EAAUlB,KACV+P,EAAOzQ,UACH+Q,GAAa,GAAKA,EAAYR,GAC5BC,IACFQ,aAAaR,GACbA,EAAU,MAEZE,EAAWI,EACXhR,EAASwQ,EAAKnK,MAAMvE,EAAS6O,GACxBD,IAAS5O,EAAU6O,EAAO,OACrBD,IAAgC,IAArB7I,EAAQsJ,WAC7BT,EAAUU,WAAWP,EAAOI,IAEvBjR,GAST,OANA+Q,EAAUM,OAAS,WACjBH,aAAaR,GACbE,EAAW,EACXF,EAAU5O,EAAU6O,EAAO,MAGtBI,EAGT,IAAIO,EAAc,CAChBrF,IAAK,CAAC,aAAc,eACpBC,IAAK,CAAC,cAAe,eA+GvB,SAASqF,EAASnK,GAChB,GAAIA,GAAQA,EAAKoK,WAAY,CAI3B,IAHA,IAAIjU,EAAI6J,EAAKoK,WAAWC,WACpBlK,EAAU,GAEPhK,EAAGA,EAAIA,EAAEmU,YACK,IAAfnU,EAAE8J,UAAkB9J,IAAM6J,GAC5BG,EAAQvF,KAAKzE,GAIjB,OAAOgK,EAGT,MAAO,GAST,SAASoK,EAAMvK,GACb,SAAIA,GAAQA,aAAgBvH,OAAO+R,aA6lBrC,IAAIC,EAAe,WAIjB,SAASA,IACP,IAAIC,EAAY5R,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GACpF6M,EAAenM,KAAMiR,GAErBjR,KAAKkR,UAAYA,EAiEnB,OAnDA3E,EAAY0E,EAAc,CAAC,CACzBxU,IAAK,KACLN,MAAO,SAAYiL,EAAQrG,EAAIoQ,GAC7B,IAAIhK,EAAU7H,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,IAAmBA,UAAU,GAEzEjB,EAAS+I,KACXA,EAAS,CAACA,IAGZ,IAAK,IAAIlM,EAAI,EAAGA,EAAIkM,EAAOzJ,OAAQzC,IACjC8E,KAAKkR,UAAU9J,EAAOlM,IAAMiW,EAE5BpQ,EAAGsG,iBAAiBD,EAAOlM,GAAI8E,KAAKkR,UAAU9J,EAAOlM,IAAKiM,KAa7D,CACD1K,IAAK,MACLN,MAAO,SAAaiL,EAAQrG,GAC1B,IAAIoG,EAAU7H,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,IAAmBA,UAAU,GAEzEjB,EAAS+I,KACXA,EAAS,CAACA,IAGZ,IAAK,IAAIlM,EAAI,EAAGA,EAAIkM,EAAOzJ,OAAQzC,IACjC6F,EAAGqQ,oBAAoBhK,EAAOlM,GAAI8E,KAAKkR,UAAU9J,EAAOlM,IAAKiM,KAUhE,CACD1K,IAAK,UACLN,MAAO,kBACE6D,KAAKkR,cAGTD,EAzEU,GAgInB,IAAII,EAAmB,CAAC,MAAO,OAC3BC,EAAmB,CACrB,IAAK,IACL,IAAK,IACL,IAAK,KA6HP,SAASC,EAAK/C,EAAOgD,GACnB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,OAAIF,EAAWG,UAAUC,GAAG,QAClBF,EAGHA,IAYb,SAASG,EAAKrD,EAAOgD,GACnB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,OAAOA,EAAYF,EAAWM,KAAK3V,MAAQqS,EAAM/L,QAYvD,SAASsP,EAAMvD,EAAOgD,GACpB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,OAAOA,EAAYF,EAAWQ,OAAOC,KAAO,IAYlD,SAASC,EAAS1D,EAAOgD,GACvB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,GAAIlD,EAAML,SAASlE,SAAW,EAAG,CAC/B,IAAIiB,EAAOsG,EAAWW,KAAKhW,MAE3B,OAAImB,EAAS4N,GACJwG,EAAYxG,EAAK7F,OAGnBqM,EAAYxG,EAGrB,OAAOwG,IAYb,SAASU,EAAU5D,EAAOgD,GACxB,MAAO,CAOLC,OAAQ,SAAgBC,GACtB,IAAIxH,EAAMsH,EAAWM,KAAK3V,MACtBkW,EAAQb,EAAWc,MAAMD,MACzBpI,EAAUuE,EAAML,SAASlE,QACzBsI,EAAaf,EAAWc,MAAMC,WAElC,MAAgB,WAAZtI,EACKyH,GAAaW,EAAQ,EAAIE,EAAa,GAGxCb,EAAYa,EAAatI,EAAUC,EAAMD,IAuQtD,IAAIuI,GAAkB,EAEtB,IACE,IAAIC,EAAO7W,OAAOC,eAAe,GAAI,UAAW,CAC9CE,IAAK,WACHyW,GAAkB,KAItBvT,OAAOoI,iBAAiB,cAAe,KAAMoL,GAC7CxT,OAAOmS,oBAAoB,cAAe,KAAMqB,GAChD,MAAOC,IAET,IAAIC,EAAoBH,EAEpBI,EAAe,CAAC,aAAc,aAC9BC,EAAc,CAAC,YAAa,aAC5BC,EAAa,CAAC,WAAY,cAAe,UAAW,cACpDC,EAAe,CAAC,YAAa,YAAa,UAAW,cAo9BzD,SAAS2I,EAAgBC,GACvB,OAAIre,EAASqe,IAzgGGle,EA0gGEke,EAzgGX/f,OAAO8I,KAAKjH,GAAK+G,OAAOoX,QAAO,SAAU5f,EAAG6H,GAGjD,OAFA7H,EAAE6H,GAAKpG,EAAIoG,GAEJ7H,EAAE6H,GAAI7H,IACZ,MAugGD+P,EAAK,wCAGA,IA/gGT,IAAkBtO,EA0mGlB,IAAI2Z,EAAa,CAEfvC,KA1xEF,SAAerG,EAAOgD,GACpB,IAAIqD,EAAO,CAMTnH,MAAO,WACL1N,KAAK8U,KAAOtG,EAAMxN,SAClBhB,KAAKqX,MAAQrX,KAAK8U,KAAK9L,cAXR,2BAYfhJ,KAAKsX,OAAS7J,MAAM3Q,UAAUyE,MAAMlG,KAAK2E,KAAK6V,QAAQ0B,UAAUC,QAAO,SAAUC,GAC/E,OAAQA,EAAM1C,UAAU2C,SAASlJ,EAAML,SAAS/C,QAAQO,iBAsE9D,OAjEAoC,EAAO8G,EAAM,OAAQ,CAMnB9Y,IAAK,WACH,OAAO8Y,EAAK8C,IASdxV,IAAK,SAAanG,GACZqC,EAASrC,KACXA,EAAIkD,SAAS8J,cAAchN,IAGzB+U,EAAM/U,GACR6Y,EAAK8C,GAAK3b,EAEV+P,EAAK,gDAKXgC,EAAO8G,EAAM,QAAS,CAMpB9Y,IAAK,WACH,OAAO8Y,EAAKnG,IASdvM,IAAK,SAAa/F,GACZ2U,EAAM3U,GACRyY,EAAKnG,GAAKtS,EAEV2P,EAAK,kFAKXgC,EAAO8G,EAAM,UAAW,CAMtB9Y,IAAK,WACH,OAAO8Y,EAAKwC,MAAME,SAAS,MAIxB1C,GA0sEP+C,UAryCF,SAAoBpJ,EAAOgD,EAAYyB,GACrC,IAAI2E,EAAY,CAOdzV,IAAK,SAAahG,GAChB,IAAI0b,EA1CV,SAAkBrJ,EAAOgD,EAAYyB,GAQnC,IAAI6E,EAAe,CAACjG,EAAKE,EAAMG,EAASE,GAAUzP,OAAO6L,EAAME,GAAI,CAAC6C,IAEpE,MAAO,CAOLwG,OAAQ,SAAgBrG,GACtB,IAAK,IAAIxW,EAAI,EAAGA,EAAI4c,EAAana,OAAQzC,IAAK,CAC5C,IAAI8c,EAAcF,EAAa5c,GAE3BqC,EAAWya,IAAgBza,EAAWya,IAAcvG,QACtDC,EAAYsG,EAAYxJ,EAAOgD,EAAYyB,GAAQxB,OAAOC,GAE1D3F,EAAK,kFAIT,OAAO2F,IAcSuG,CAAQzJ,EAAOgD,GAAYuG,OAAO5b,GAElDqV,EAAWqD,KAAKgB,QAAQqC,MAAML,UAAY,gBAAkB,EAAIA,EAAY,iBAS9EjU,OAAQ,WACN4N,EAAWqD,KAAKgB,QAAQqC,MAAML,UAAY,KA6C9C,OApCA5E,EAAOjM,GAAG,QAAQ,SAAU9F,GAC1B,IAAIgJ,EAAMsH,EAAWM,KAAK3V,MACtBwB,EAAS6T,EAAWc,MAAM3U,OAC1B0U,EAAQb,EAAWc,MAAMC,WAE7B,OAAI/D,EAAM2J,OAAO,aAAe3G,EAAWzC,IAAIqJ,SAAS,MACtD5G,EAAWvC,WAAWkI,OAAM,WAC1BlE,EAAO1E,KAAK,kBAEZqJ,EAAUzV,IAAIkQ,GAAS1U,EAAS,OAG3Bia,EAAUzV,KAAKkQ,EAAQnI,EAAMvM,IAGlC6Q,EAAM2J,OAAO,aAAe3G,EAAWzC,IAAIqJ,SAAS,MACtD5G,EAAWvC,WAAWkI,OAAM,WAC1BlE,EAAO1E,KAAK,kBAEZqJ,EAAUzV,IAAI,MAGTyV,EAAUzV,IAAIkQ,EAAQ1U,EAASuM,EAAMvM,IAGvCia,EAAUzV,IAAIjB,EAAQmX,aAO/BpF,EAAOjM,GAAG,WAAW,WACnB4Q,EAAUhU,YAGLgU,GAouCP3I,WAjuCF,SAAqBT,EAAOgD,EAAYyB,GAOtC,IAAIrE,GAAW,EAEXK,EAAa,CAOfqJ,QAAS,SAAiBzb,GACxB,IAAIsR,EAAWK,EAAML,SAErB,OAAKS,EAIE/R,EAAW,QAAUsR,EAASpD,oBAH5BlO,EAAW,IAAMmD,KAAK+H,SAAW,MAAQoG,EAASpD,qBAa7D5I,IAAK,WACH,IAAItF,EAAWyC,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,YAEnFkS,EAAWqD,KAAKgB,QAAQqC,MAAMK,WAAavY,KAAKsY,QAAQzb,IAS1D+G,OAAQ,WACN4N,EAAWqD,KAAKgB,QAAQqC,MAAMK,WAAa,IAU7CpB,MAAO,SAAehP,GACpBqI,YAAW,WACTrI,MACCnI,KAAK+H,WASVuN,OAAQ,WACN1G,GAAW,EAEX5O,KAAKmC,OASP+M,QAAS,WACPN,GAAW,EAEX5O,KAAKmC,QAwDT,OApDA4L,EAAOkB,EAAY,WAAY,CAO7BlT,IAAK,WACH,IAAIoS,EAAWK,EAAML,SAErB,OAAIK,EAAM2J,OAAO,WAAa3G,EAAWzC,IAAIpH,OACpCwG,EAASrD,eAGXqD,EAASvD,qBAQpBqI,EAAOjM,GAAG,QAAQ,WAChBiI,EAAW9M,SASb8Q,EAAOjM,GAAG,CAAC,eAAgB,SAAU,mBAAmB,WACtDiI,EAAWC,aAOb+D,EAAOjM,GAAG,OAAO,WACfiI,EAAWqG,YAObrC,EAAOjM,GAAG,WAAW,WACnBiI,EAAWrL,YAGNqL,GAulCP0C,UAlkDF,SAAoBnD,EAAOgD,EAAYyB,GACrC,IAAItB,EAAY,CAMdjE,MAAO,WACL1N,KAAK7D,MAAQqS,EAAML,SAASlD,WAU9BuK,QAAS,SAAiB1G,GACxB,IAAI0J,EAAQ1J,EAAQvN,MAAM,EAAG,GAE7B,OAAIvB,KAAK4R,GAAG,OACH9C,EAAQlN,MAAM4W,GAAOlU,KAAKgN,EAAiBkH,IAG7C1J,GAUT8C,GAAI,SAAY3G,GACd,OAAOjL,KAAK7D,QAAU8O,GASxBwN,SAAU,WACRjH,EAAWqD,KAAKC,KAAKC,UAAUzR,IAAIkL,EAAML,SAAS/C,QAAQH,UAAUjL,KAAK7D,SAS3Euc,YAAa,WACXlH,EAAWqD,KAAKC,KAAKC,UAAUnR,OAAO4K,EAAML,SAAS/C,QAAQH,UAAUjL,KAAK7D,UAwDhF,OApDA4R,EAAO4D,EAAW,QAAS,CAMzB5V,IAAK,WACH,OAAO4V,EAAUgH,IAUnBxW,IAAK,SAAahG,GACZkV,EAAiB6E,QAAQ/Z,IAAU,EACrCwV,EAAUgH,GAAKxc,EAEf4P,EAAK,6CAUXkH,EAAOjM,GAAG,CAAC,UAAW,WAAW,WAC/B2K,EAAU+G,iBAOZzF,EAAOjM,GAAG,UAAU,WAClB2K,EAAUjE,WAQZuF,EAAOjM,GAAG,CAAC,eAAgB,WAAW,WACpC2K,EAAU8G,cAGL9G,GAm9CPQ,KA1sEF,SAAe3D,EAAOgD,EAAYyB,GAChC,IAAId,EAAO,CAMTzE,MAAO,WACL1N,KAAK7D,MAAQqS,EAAML,SAASjD,OA2DhC,OAvDA6C,EAAOoE,EAAM,QAAS,CAMpBpW,IAAK,WACH,OAAOoW,EAAKwG,IAUdxW,IAAK,SAAahG,GACZmB,EAASnB,IACXA,EAAMkJ,OAASkI,EAAMpR,EAAMkJ,QAC3BlJ,EAAMgb,MAAQ5J,EAAMpR,EAAMgb,QAE1Bhb,EAAQoR,EAAMpR,GAGhBgW,EAAKwG,GAAKxc,KAId4R,EAAOoE,EAAM,WAAY,CAMvBpW,IAAK,WACH,IAAII,EAAQgW,EAAKhW,MACb6N,EAAUwE,EAAML,SAASnE,QAE7B,OAAI1M,EAASnB,GACJA,EAAMkJ,OAAS2E,EAAU7N,EAAMgb,MAAQnN,EAGjC,EAAR7N,EAAY6N,KAQvBiJ,EAAOjM,GAAG,CAAC,SAAU,WAAW,WAC9BmL,EAAKzE,WAGAyE,GAwoEPG,MAliEF,SAAgB9D,EAAOgD,EAAYyB,GACjC,IAAIX,EAAQ,CAMVsG,YAAa,WAIX,IAHA,IAAIvG,EAAQrS,KAAKuS,WAAa,KAC1B+E,EAAS9F,EAAWqD,KAAKyC,OAEpBpc,EAAI,EAAGA,EAAIoc,EAAO3Z,OAAQzC,IACjCoc,EAAOpc,GAAGgd,MAAM7F,MAAQA,GAU5BwG,aAAc,SAAsBC,GAClCtH,EAAWqD,KAAKgB,QAAQqC,MAAM7F,MAAQrS,KAAK+Y,YAAc,MAS3DnV,OAAQ,WAGN,IAFA,IAAI0T,EAAS9F,EAAWqD,KAAKyC,OAEpBpc,EAAI,EAAGA,EAAIoc,EAAO3Z,OAAQzC,IACjCoc,EAAOpc,GAAGgd,MAAM7F,MAAQ,GAG1Bb,EAAWqD,KAAKgB,QAAQqC,MAAM7F,MAAQ,KAmE1C,OA/DAtE,EAAOuE,EAAO,SAAU,CAMtBvW,IAAK,WACH,OAAOyV,EAAWqD,KAAKyC,OAAO3Z,UAIlCoQ,EAAOuE,EAAO,QAAS,CAMrBvW,IAAK,WACH,OAAOyV,EAAWqD,KAAKC,KAAKkE,eAIhCjL,EAAOuE,EAAO,cAAe,CAM3BvW,IAAK,WACH,OAAOuW,EAAMC,WAAaD,EAAM3U,OAAS6T,EAAWM,KAAKG,KAAOT,EAAWQ,OAAOC,QAItFlE,EAAOuE,EAAO,aAAc,CAM1BvW,IAAK,WACH,OAAOuW,EAAMD,MAAQ7D,EAAML,SAASnE,QAAUwH,EAAWW,KAAK8G,SAAWzH,EAAWM,KAAKmH,YAU7FhG,EAAOjM,GAAG,CAAC,eAAgB,SAAU,WAAW,WAC9CsL,EAAMsG,cACNtG,EAAMuG,kBAOR5F,EAAOjM,GAAG,WAAW,WACnBsL,EAAM1O,YAGD0O,GAy7DPR,KA76EF,SAAetD,EAAOgD,EAAYyB,GAChC,IAAInB,EAAO,CAQTrM,MAAO,SAAe6R,GACpB,IAAK,IAAIpc,EAAI,EAAG+H,EAAMqU,EAAO3Z,OAAQzC,EAAI+H,EAAK/H,IAAK,CACjD,IAAIgd,EAAQZ,EAAOpc,GAAGgd,MAClBjN,EAAYuG,EAAWG,UAAUxV,MAGnC+b,EAAMxH,EAAYzF,GAAW,IADrB,IAAN/P,EACiC8E,KAAK7D,MAAQ,EAAI,KAEjB,GAGjCjB,IAAMoc,EAAO3Z,OAAS,EACxBua,EAAMxH,EAAYzF,GAAW,IAAMjL,KAAK7D,MAAQ,EAAI,KAEpD+b,EAAMxH,EAAYzF,GAAW,IAAM,KAYzCrH,OAAQ,SAAgB0T,GACtB,IAAK,IAAIpc,EAAI,EAAG+H,EAAMqU,EAAO3Z,OAAQzC,EAAI+H,EAAK/H,IAAK,CACjD,IAAIgd,EAAQZ,EAAOpc,GAAGgd,MAEtBA,EAAMgB,WAAa,GACnBhB,EAAMiB,YAAc,MA2D1B,OAtDApL,EAAO+D,EAAM,QAAS,CAMpB/V,IAAK,WACH,OAAOwR,EAAMiB,EAAML,SAASjE,QAIhC6D,EAAO+D,EAAM,OAAQ,CAOnB/V,IAAK,WACH,OAAO+V,EAAK3V,OAASqV,EAAWc,MAAM3U,OAAS,MAInDoQ,EAAO+D,EAAM,WAAY,CAOvB/V,IAAK,WACH,IAAIiO,EAAUwE,EAAML,SAASnE,QAE7B,OAAO8H,EAAK3V,OAAS6N,EAAU,GAAKA,KASxCiJ,EAAOjM,GAAG,CAAC,cAAe,UAAWgE,GAAS,WAC5C8G,EAAKrM,MAAM+L,EAAWqD,KAAKgB,QAAQ0B,YAClC,KAMHtE,EAAOjM,GAAG,WAAW,WACnB8K,EAAKlO,OAAO4N,EAAWqD,KAAKgB,QAAQ0B,aAG/BzF,GA20EP3C,KAvoEF,SAAeX,EAAOgD,EAAYyB,GAChC,IAAI9D,EAAO,CAMTzB,MAAO,WACL1N,KAAKqP,GAAK,GAUZL,KAAM,WACJ,IAAI4G,EAAQ5V,KAER2H,EAASrI,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,EAEjFU,KAAK2H,OAASA,EAEdsL,EAAO1E,KAAK,OAAQ,CAClB8J,SAAUrY,KAAK7D,QAGjBqV,EAAWvC,WAAWkI,OAAM,WAC1BlE,EAAO1E,KAAK,aAAc,CACxB8J,SAAUzC,EAAMzZ,aAiExB,OA3DA4R,EAAOoB,EAAM,SAAU,CAMrBpT,IAAK,WACH,OAAOoT,EAAKE,IASdlN,IAAK,SAAahG,GAChBgT,EAAKE,GAAMhS,EAAYlB,GAAwB,EAAfoR,EAAMpR,MAI1C4R,EAAOoB,EAAM,YAAa,CAMxBpT,IAAK,WACH,OAAOyV,EAAWc,MAAMC,WAAa/D,EAAM/L,SAI/CsL,EAAOoB,EAAM,QAAS,CAMpBpT,IAAK,WACH,IAAI4L,EAAS3H,KAAK2H,OACd+J,EAAY1R,KAAK0R,UAErB,OAAIF,EAAWG,UAAUC,GAAG,OACnBF,EAAY/J,EAGd+J,EAAY/J,KASvBsL,EAAOjM,GAAG,CAAC,eAAgB,QAAQ,WACjCmI,EAAKH,UAGAG,GAwiEP6C,OA51DF,SAAiBxD,EAAOgD,EAAYyB,GAClC,IAAIjB,EAAS,CAIXtE,MAAO,WACL1N,KAAK8W,MAAQ,GAETtI,EAAM2J,OAAO,cACfnY,KAAK8W,MAAQ9W,KAAKoZ,YAUtBA,QAAS,WAaP,IAZA,IAAItC,EAAQxX,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAC5EgY,EAAS9F,EAAWqD,KAAKyC,OACzBvD,EAAkBvF,EAAML,SACxBnE,EAAU+J,EAAgB/J,QAC1BoB,EAAU2I,EAAgB3I,QAG1BiO,KAAqB7K,EAAML,SAASjD,KACpCoO,EAAOtP,EAAUqP,EACjB5R,EAAQ6P,EAAO/V,MAAM,EAAG+X,GACxBtE,EAAMsC,EAAO/V,OAAO+X,GAEftd,EAAI,EAAGA,EAAImY,KAAKsB,IAAI,EAAGtB,KAAKoF,MAAMvP,EAAUsN,EAAO3Z,SAAU3B,IAAK,CACzE,IAAK,IAAId,EAAI,EAAGA,EAAIuM,EAAM9J,OAAQzC,IAAK,CACrC,IAAIse,EAAQ/R,EAAMvM,GAAGue,WAAU,GAE/BD,EAAMzE,UAAUzR,IAAI8H,EAAQO,YAE5BmL,EAAM1V,KAAKoY,GAGb,IAAK,IAAIlK,EAAK,EAAGA,EAAK0F,EAAIrX,OAAQ2R,IAAM,CACtC,IAAIoK,EAAS1E,EAAI1F,GAAImK,WAAU,GAE/BC,EAAO3E,UAAUzR,IAAI8H,EAAQO,YAE7BmL,EAAMjQ,QAAQ6S,IAIlB,OAAO5C,GAST6C,OAAQ,WAYN,IAXA,IAAI7C,EAAQ9W,KAAK8W,MACb8C,EAAmBpI,EAAWqD,KAC9BgB,EAAU+D,EAAiB/D,QAC3ByB,EAASsC,EAAiBtC,OAG1BuC,EAAO1F,KAAKoF,MAAMzC,EAAMnZ,OAAS,GACjCmc,EAAUhD,EAAMvV,MAAM,EAAGsY,GAAMtT,UAC/BoT,EAAS7C,EAAMvV,MAAMsY,EAAM/C,EAAMnZ,QACjC0U,EAAQb,EAAWc,MAAMC,WAAa,KAEjCrX,EAAI,EAAGA,EAAIye,EAAOhc,OAAQzC,IACjC2a,EAAQkE,YAAYJ,EAAOze,IAG7B,IAAK,IAAI8e,EAAM,EAAGA,EAAMF,EAAQnc,OAAQqc,IACtCnE,EAAQoE,aAAaH,EAAQE,GAAM1C,EAAO,IAG5C,IAAK,IAAI4C,EAAM,EAAGA,EAAMpD,EAAMnZ,OAAQuc,IACpCpD,EAAMoD,GAAKhC,MAAM7F,MAAQA,GAU7BzO,OAAQ,WAIN,IAHA,IAAIkT,EAAQ9W,KAAK8W,MAGR5b,EAAI,EAAGA,EAAI4b,EAAMnZ,OAAQzC,IAChCsW,EAAWqD,KAAKgB,QAAQsE,YAAYrD,EAAM5b,MA4ChD,OAvCA6S,EAAOiE,EAAQ,OAAQ,CAMrBjW,IAAK,WACH,OAAQyV,EAAWc,MAAMC,WAAaf,EAAWM,KAAK3V,OAAS6V,EAAO8E,MAAMnZ,UAQhFsV,EAAOjM,GAAG,UAAU,WAClBgL,EAAOpO,SACPoO,EAAOtE,QACPsE,EAAO2H,YAOT1G,EAAOjM,GAAG,gBAAgB,WACpBwH,EAAM2J,OAAO,aACfnG,EAAO2H,YAQX1G,EAAOjM,GAAG,WAAW,WACnBgL,EAAOpO,YAGFoO,GAktDPoI,OAnoDF,SAAiB5L,EAAOgD,EAAYyB,GAMlC,IAAIC,EAAS,IAAIjC,EAEbmJ,EAAS,CAIX1M,MAAO,WACL1N,KAAKtD,QAUPA,KAAM,WACJwW,EAAOlM,GAAG,SAAU/H,OAAQ+L,GAAS,WACnCiI,EAAO1E,KAAK,YACXC,EAAML,SAASnD,YASpB2L,OAAQ,WACNzD,EAAO6C,IAAI,SAAU9W,UAazB,OALAgU,EAAOjM,GAAG,WAAW,WACnBoT,EAAOzD,SACPzD,EAAOkD,aAGFgE,GAmlDPC,MA17DF,SAAgB7L,EAAOgD,EAAYyB,GACjC,IAAIoH,EAAQ,CAOV3M,MAAO,WACLuF,EAAO1E,KAAK,gBAEZvO,KAAKsa,YACLta,KAAKua,cAELtH,EAAO1E,KAAK,gBASd+L,UAAW,WACT9I,EAAWqD,KAAKC,KAAKC,UAAUzR,IAAIkL,EAAML,SAAS/C,QAAQoD,EAAML,SAAS/H,QAS3EmU,YAAa,WACX,IAAInP,EAAUoD,EAAML,SAAS/C,QACzBqM,EAAQjG,EAAWqD,KAAKyC,OAAO9I,EAAM/L,OAErCgV,IACFA,EAAM1C,UAAUzR,IAAI8H,EAAQS,aAE5B8E,EAAS8G,GAAOja,SAAQ,SAAUgd,GAChCA,EAAQzF,UAAUnR,OAAOwH,EAAQS,kBAWvC4O,cAAe,WACb,IAAIrP,EAAUoD,EAAML,SAAS/C,QAE7BoG,EAAWqD,KAAKC,KAAKC,UAAUnR,OAAOwH,EAAQoD,EAAML,SAAS/H,OAE7DoL,EAAWqD,KAAKyC,OAAO9Z,SAAQ,SAAUgd,GACvCA,EAAQzF,UAAUnR,OAAOwH,EAAQS,kBA+BvC,OArBAoH,EAAOjM,GAAG,CAAC,UAAW,WAAW,WAC/BqT,EAAMI,mBAQRxH,EAAOjM,GAAG,CAAC,SAAU,WAAW,WAC9BqT,EAAM3M,WAORuF,EAAOjM,GAAG,cAAc,WACtBqT,EAAME,iBAGDF,GAk2DPtL,IArsFF,SAAcP,EAAOgD,EAAYyB,GAC/B,IAAIlE,EAAM,CAMRrB,MAAO,WACL1N,KAAKqP,IAAK,GASZL,KAAM,SAAc8E,GAClB,IAAI8B,EAAQ5V,KAEPwO,EAAMI,WACTJ,EAAMU,UAENlP,KAAK8T,KAAOA,EAEZb,EAAO1E,KAAK,aAAcvO,KAAK8T,MAE/B9T,KAAK0a,YAELzH,EAAO1E,KAAK,MAAOvO,KAAK8T,MAExBtC,EAAWvC,WAAWkI,OAAM,WACtBvB,EAAM+E,WACR1H,EAAO1E,KAAK,YAAaqH,EAAM9B,MAG7B8B,EAAMgF,SACR3H,EAAO1E,KAAK,UAAWqH,EAAM9B,OAG3B8B,EAAMwC,SAAS,MAAQxC,EAAMwC,SAAS,QACxCxC,EAAMvG,IAAK,EAEX4D,EAAO1E,KAAK,aAAcqH,EAAM9B,OAGlCb,EAAO1E,KAAK,YAAaqH,EAAM9B,MAE/BtF,EAAM8G,cAWZoF,UAAW,WACT,IAAI5G,EAAO9T,KAAK8T,KACZnW,EAASqC,KAAKrC,OACdyX,EAAQtB,EAAKsB,MACbnK,EAAY6I,EAAK7I,UAGjB4P,EApkBgB,iBAokBUtN,EAAM6H,IAA4B,IAAjB7H,EAAM6H,GAErD,OAAQnK,GACN,IAAK,IACW,MAAVmK,EACF5G,EAAM/L,MAAQ9E,EACLqC,KAAK4a,QACRpM,EAAM2J,OAAO,YAAc3J,EAAML,SAAStD,SAC9C7K,KAAKqP,IAAK,EAEVb,EAAM/L,MAAQ,GAEPoY,EACTrM,EAAM/L,OAAS0R,KAAKoB,IAAI5X,EAAS6Q,EAAM/L,OAAQ8K,EAAM6H,IAErD5G,EAAM/L,QAER,MAEF,IAAK,IACW,MAAV2S,EACF5G,EAAM/L,MAAQ,EACLzC,KAAK2a,UACRnM,EAAM2J,OAAO,YAAc3J,EAAML,SAAStD,SAC9C7K,KAAKqP,IAAK,EAEVb,EAAM/L,MAAQ9E,GAEPkd,EACTrM,EAAM/L,OAAS0R,KAAKoB,IAAI/G,EAAM/L,MAAO8K,EAAM6H,IAE3C5G,EAAM/L,QAER,MAEF,IAAK,IACH+L,EAAM/L,MAAQ2S,EACd,MAEF,QACErJ,EAAK,8BAAgCd,EAAYmK,EAAQ,qBAW/DuF,QAAS,WACP,OAAuB,IAAhBnM,EAAM/L,OASfmY,MAAO,WACL,OAAOpM,EAAM/L,QAAUzC,KAAKrC,QAU9Bya,SAAU,SAAkBnN,GAC1B,OAAOjL,KAAKqP,IAAMrP,KAAK8T,KAAK7I,YAAcA,IAgE9C,OA5DA8C,EAAOgB,EAAK,OAAQ,CAMlBhT,IAAK,WACH,OAAOiE,KAAK8a,IASd3Y,IAAK,SAAahG,GAChB,IAAI4e,EAAO5e,EAAM6e,OAAO,GAExBhb,KAAK8a,GAAK,CACR7P,UAAW9O,EAAM6e,OAAO,EAAG,GAC3B5F,MAAO2F,EAAOxN,EAAMwN,GAAQxN,EAAMwN,GAAQA,EAAO,MAKvDhN,EAAOgB,EAAK,SAAU,CAOpBhT,IAAK,WACH,IAAIoS,EAAWK,EAAML,SACjBxQ,EAAS6T,EAAWqD,KAAKyC,OAAO3Z,OAMpC,OAAI6Q,EAAM2J,OAAO,WAAkC,WAArBhK,EAASlE,SAAwBkE,EAAS7D,MAC/D3M,EAAS,GAAK4P,EAAMY,EAASnE,SAAW,GAAKuD,EAAMY,EAASlE,SAG9DtM,EAAS,KAIpBoQ,EAAOgB,EAAK,SAAU,CAMpBhT,IAAK,WACH,OAAOiE,KAAKqP,MAITN,GA6/EPwE,MApkCF,SAAgB/E,EAAOgD,EAAYyB,GAMjC,IAAIC,EAAS,IAAIjC,EAEbkC,EAAW,EACXC,EAAc,EACdC,EAAc,EACdzE,GAAW,EACXzH,IAAUwL,GAAoB,CAAEW,SAAS,GAEzCC,EAAQ,CAMV7F,MAAO,WACL1N,KAAKwT,kBAUP/L,MAAO,SAAe3B,GACpB,IAAK8I,IAAaJ,EAAMI,SAAU,CAChC5O,KAAKkP,UAEL,IAAI8D,EAAQhT,KAAKyT,QAAQ3N,GAEzBqN,EAAW,KACXC,EAAc7F,EAAMyF,EAAMU,OAC1BL,EAAc9F,EAAMyF,EAAMW,OAE1B3T,KAAK4T,gBACL5T,KAAK6T,eAELZ,EAAO1E,KAAK,iBAUhBuF,KAAM,SAAchO,GAClB,IAAK0I,EAAMI,SAAU,CACnB,IAAImF,EAAkBvF,EAAML,SACxBxD,EAAaoJ,EAAgBpJ,WAC7BD,EAAaqJ,EAAgBrJ,WAC7BU,EAAU2I,EAAgB3I,QAG1B4H,EAAQhT,KAAKyT,QAAQ3N,GAErBkO,EAAUzG,EAAMyF,EAAMU,OAASN,EAC/Ba,EAAU1G,EAAMyF,EAAMW,OAASN,EAC/Ba,EAAQC,KAAKC,IAAIJ,GAAW,GAC5BK,EAAQF,KAAKC,IAAIH,GAAW,GAC5BK,EAAkBH,KAAKI,KAAKL,EAAQG,GACpCG,EAAgBL,KAAKI,KAAKF,GAI9B,KAAe,KAFflB,EAAWgB,KAAKM,KAAKD,EAAgBF,IAEhBH,KAAKO,GAAK/J,GAS7B,OAAO,EARP7E,EAAM6O,kBAENnD,EAAWrC,KAAKH,KAAKgF,EApvEtBY,WAovEwClK,IAEvC8G,EAAWqD,KAAKC,KAAKC,UAAUzR,IAAI8H,EAAQM,UAE3CuH,EAAO1E,KAAK,gBAclByG,IAAK,SAAalP,GAChB,IAAK0I,EAAMI,SAAU,CACnB,IAAIT,EAAWK,EAAML,SAEjB6E,EAAQhT,KAAKyT,QAAQ3N,GACrBmP,EAAYjV,KAAKiV,UAAUnP,GAE3BoP,EAAgBlC,EAAMU,MAAQN,EAC9B+B,EAAsB,IAAXhC,EAAiBgB,KAAKO,GACjCU,EAAQjB,KAAKkB,MAAMH,EAAgB1D,EAAWc,MAAMC,YAExDvS,KAAKsV,SAEDJ,EAAgBD,GAAaE,EAAWhH,EAASxD,YAE/CwD,EAAS1D,WACX2K,EAAQjB,KAAKoB,IAAIH,EAAO7H,EAAMY,EAAS1D,YAGrC+G,EAAWG,UAAUC,GAAG,SAC1BwD,GAASA,GAGX5D,EAAWzC,IAAIC,KAAKwC,EAAWG,UAAU6D,QAAQ,IAAMJ,KAC9CF,GAAiBD,GAAaE,EAAWhH,EAASxD,YAEvDwD,EAAS1D,WACX2K,EAAQjB,KAAKsB,IAAIL,GAAQ7H,EAAMY,EAAS1D,YAGtC+G,EAAWG,UAAUC,GAAG,SAC1BwD,GAASA,GAGX5D,EAAWzC,IAAIC,KAAKwC,EAAWG,UAAU6D,QAAQ,IAAMJ,KAGvD5D,EAAWrC,KAAKH,OAGlBwC,EAAWqD,KAAKC,KAAKC,UAAUnR,OAAOuK,EAAS/C,QAAQM,UAEvD1L,KAAK0V,kBACL1V,KAAK2V,iBAEL1C,EAAO1E,KAAK,eAUhBiF,eAAgB,WACd,IAAIoC,EAAQ5V,KAERmO,EAAWK,EAAML,SAEjBA,EAAS5D,gBACX2I,EAAOlM,GAAG4L,EAAa,GAAIpB,EAAWqD,KAAKgB,SAAS,SAAU/P,GAC5D8P,EAAMnO,MAAM3B,KACXqB,GAGDgH,EAAS3D,eACX0I,EAAOlM,GAAG4L,EAAa,GAAIpB,EAAWqD,KAAKgB,SAAS,SAAU/P,GAC5D8P,EAAMnO,MAAM3B,KACXqB,IAUP2O,iBAAkB,WAChB5C,EAAO6C,IAAInD,EAAa,GAAIpB,EAAWqD,KAAKgB,QAAS1O,GACrD+L,EAAO6C,IAAInD,EAAa,GAAIpB,EAAWqD,KAAKgB,QAAS1O,IASvDyM,cAAe,WACb,IAAIoC,EAAShW,KAEbkT,EAAOlM,GAAG6L,EAAarB,EAAWqD,KAAKgB,QAAS7K,GAAS,SAAUlF,GACjEkQ,EAAOlC,KAAKhO,KACX0I,EAAML,SAASnD,UAAW7D,IAS/BuO,gBAAiB,WACfxC,EAAO6C,IAAIlD,EAAarB,EAAWqD,KAAKgB,QAAS1O,IASnD0M,aAAc,WACZ,IAAIoC,EAASjW,KAEbkT,EAAOlM,GAAG8L,EAAYtB,EAAWqD,KAAKgB,SAAS,SAAU/P,GACvDmQ,EAAOjB,IAAIlP,OAUf6P,eAAgB,WACdzC,EAAO6C,IAAIjD,EAAYtB,EAAWqD,KAAKgB,UASzCpC,QAAS,SAAiB3N,GACxB,OAAIiN,EAAamD,QAAQpQ,EAAMM,OAAS,EAC/BN,EAGFA,EAAM2N,QAAQ,IAAM3N,EAAMqQ,eAAe,IASlDlB,UAAW,SAAmBnP,GAC5B,IAAIqI,EAAWK,EAAML,SAErB,OAAI4E,EAAamD,QAAQpQ,EAAMM,OAAS,EAC/B+H,EAAS3D,cAGX2D,EAAS5D,gBASlB+K,OAAQ,WAKN,OAJA1G,GAAW,EAEX4C,EAAWvC,WAAWqG,SAEftV,MASTkP,QAAS,WAKP,OAJAN,GAAW,EAEX4C,EAAWvC,WAAWC,UAEflP,OAuBX,OAfAiT,EAAOjM,GAAG,eAAe,WACvBwK,EAAWqD,KAAKC,KAAKC,UAAUzR,IAAIkL,EAAML,SAAS/C,QAAQK,cAO5DwH,EAAOjM,GAAG,WAAW,WACnBuM,EAAMuC,mBACNvC,EAAMmC,kBACNnC,EAAMoC,iBACNzC,EAAOkD,aAGF7C,GAqxBPsI,OAlxBF,SAAiBrN,EAAOgD,EAAYyB,GAMlC,IAAIC,EAAS,IAAIjC,EAEb4K,EAAS,CAMXnO,MAAO,WACL1N,KAAKtD,QASPA,KAAM,WACJwW,EAAOlM,GAAG,YAAawK,EAAWqD,KAAKgB,QAAS7V,KAAK8b,YASvDnF,OAAQ,WACNzD,EAAO6C,IAAI,YAAavE,EAAWqD,KAAKgB,UAS1CiG,UAAW,SAAmBhW,GAC5BA,EAAM8Q,mBAaV,OALA3D,EAAOjM,GAAG,WAAW,WACnB6U,EAAOlF,SACPzD,EAAOkD,aAGFyF,GAytBPrF,QAttBF,SAAkBhI,EAAOgD,EAAYyB,GAMnC,IAAIC,EAAS,IAAIjC,EASbqF,GAAW,EASXC,GAAY,EAEZC,EAAU,CAMZ9I,MAAO,WAOL1N,KAAKyW,GAAKjF,EAAWqD,KAAKgB,QAAQ5U,iBAAiB,KAEnDjB,KAAKtD,QASPA,KAAM,WACJwW,EAAOlM,GAAG,QAASwK,EAAWqD,KAAKgB,QAAS7V,KAAK0W,QASnDC,OAAQ,WACNzD,EAAO6C,IAAI,QAASvE,EAAWqD,KAAKgB,UAUtCa,MAAO,SAAe5Q,GAChByQ,IACFzQ,EAAM6O,kBACN7O,EAAM8Q,mBAUVC,OAAQ,WAGN,GAFAN,GAAY,GAEPD,EAAU,CACb,IAAK,IAAIpb,EAAI,EAAGA,EAAI8E,KAAK8W,MAAMnZ,OAAQzC,IACrC8E,KAAK8W,MAAM5b,GAAG6b,WAAY,EAE1B/W,KAAK8W,MAAM5b,GAAG2N,aAAa,YAAa7I,KAAK8W,MAAM5b,GAAG8b,aAAa,SAEnEhX,KAAK8W,MAAM5b,GAAG+b,gBAAgB,QAGhCX,GAAW,EAGb,OAAOtW,MASTkX,OAAQ,WAGN,GAFAX,GAAY,EAERD,EAAU,CACZ,IAAK,IAAIpb,EAAI,EAAGA,EAAI8E,KAAK8W,MAAMnZ,OAAQzC,IACrC8E,KAAK8W,MAAM5b,GAAG6b,WAAY,EAE1B/W,KAAK8W,MAAM5b,GAAG2N,aAAa,OAAQ7I,KAAK8W,MAAM5b,GAAG8b,aAAa,cAGhEV,GAAW,EAGb,OAAOtW,OA2CX,OAvCA+N,EAAOyI,EAAS,QAAS,CAMvBza,IAAK,WACH,OAAOya,EAAQC,MAQnBxD,EAAOjM,GAAG,cAAc,WACtBwP,EAAQK,YAOV5D,EAAOjM,GAAG,aAAa,WACrBwK,EAAWvC,WAAWkI,OAAM,WAC1BX,EAAQU,eAQZjE,EAAOjM,GAAG,WAAW,WACnBwP,EAAQU,SACRV,EAAQG,SACRzD,EAAOkD,aAGFI,GAmjBPuF,SA7iBF,SAAmBvN,EAAOgD,EAAYyB,GAMpC,IAAIC,EAAS,IAAIjC,EAEb9J,IAAUwL,GAAoB,CAAEW,SAAS,GAEzCyI,EAAW,CAObrO,MAAO,WAOL1N,KAAKgc,GAAKxK,EAAWqD,KAAKC,KAAK7T,iBA3BlB,mCAmCbjB,KAAKyO,GAAK+C,EAAWqD,KAAKC,KAAK7T,iBAlCb,+BAoClBjB,KAAKic,eASPC,UAAW,WACT,IAAK,IAAIhhB,EAAI,EAAGA,EAAI8E,KAAKgc,GAAGre,OAAQzC,IAClC8E,KAAKyY,SAASzY,KAAKgc,GAAG9gB,GAAGqc,WAU7B4E,aAAc,WACZ,IAAK,IAAIjhB,EAAI,EAAGA,EAAI8E,KAAKgc,GAAGre,OAAQzC,IAClC8E,KAAK0Y,YAAY1Y,KAAKgc,GAAG9gB,GAAGqc,WAWhCkB,SAAU,SAAkB2D,GAC1B,IAAIjO,EAAWK,EAAML,SACjBjL,EAAOkZ,EAAS5N,EAAM/L,OAEtBS,IACFA,EAAK6R,UAAUzR,IAAI6K,EAAS/C,QAAQQ,WAEpC+E,EAASzN,GAAM1F,SAAQ,SAAUgd,GAC/BA,EAAQzF,UAAUnR,OAAOuK,EAAS/C,QAAQQ,gBAYhD8M,YAAa,SAAqB0D,GAChC,IAAIlZ,EAAOkZ,EAAS5N,EAAM/L,OAEtBS,GACFA,EAAK6R,UAAUnR,OAAO4K,EAAML,SAAS/C,QAAQQ,YAUjDqQ,YAAa,WACX,IAAK,IAAI/gB,EAAI,EAAGA,EAAI8E,KAAKyO,GAAG9Q,OAAQzC,IAClC8E,KAAKtD,KAAKsD,KAAKyO,GAAGvT,GAAGqc,WAUzB8E,eAAgB,WACd,IAAK,IAAInhB,EAAI,EAAGA,EAAI8E,KAAKyO,GAAG9Q,OAAQzC,IAClC8E,KAAK2W,OAAO3W,KAAKyO,GAAGvT,GAAGqc,WAW3B7a,KAAM,SAAc6H,GAClB,IAAK,IAAIrJ,EAAI,EAAGA,EAAIqJ,EAAS5G,OAAQzC,IACnCgY,EAAOlM,GAAG,QAASzC,EAASrJ,GAAI8E,KAAK0W,OACrCxD,EAAOlM,GAAG,aAAczC,EAASrJ,GAAI8E,KAAK0W,MAAOvP,IAWrDwP,OAAQ,SAAgBpS,GACtB,IAAK,IAAIrJ,EAAI,EAAGA,EAAIqJ,EAAS5G,OAAQzC,IACnCgY,EAAO6C,IAAI,CAAC,QAAS,cAAexR,EAASrJ,KAajDwb,MAAO,SAAe5Q,GACpBA,EAAM8Q,iBAENpF,EAAWzC,IAAIC,KAAKwC,EAAWG,UAAU6D,QAAQ1P,EAAMwW,cAActF,aAAa,sBAkCtF,OA9BAjJ,EAAOgO,EAAU,QAAS,CAMxBhgB,IAAK,WACH,OAAOggB,EAAStN,MASpBwE,EAAOjM,GAAG,CAAC,cAAe,eAAe,WACvC+U,EAASG,eAOXjJ,EAAOjM,GAAG,WAAW,WACnB+U,EAASM,iBACTN,EAASI,eACTjJ,EAAOkD,aAGF2F,GA6WPQ,SA1WF,SAAmB/N,EAAOgD,EAAYyB,GAMpC,IAAIC,EAAS,IAAIjC,EAEbsL,EAAW,CAMb7O,MAAO,WACDc,EAAML,SAAS9D,UACjBrK,KAAKtD,QAUTA,KAAM,WACJwW,EAAOlM,GAAG,QAAS9H,SAAUc,KAAKwc,QASpC7F,OAAQ,WACNzD,EAAO6C,IAAI,QAAS7W,WAUtBsd,MAAO,SAAe1W,GACE,KAAlBA,EAAM2W,SACRjL,EAAWzC,IAAIC,KAAKwC,EAAWG,UAAU6D,QAAQ,MAG7B,KAAlB1P,EAAM2W,SACRjL,EAAWzC,IAAIC,KAAKwC,EAAWG,UAAU6D,QAAQ,QA8BvD,OApBAvC,EAAOjM,GAAG,CAAC,UAAW,WAAW,WAC/BuV,EAAS5F,YAOX1D,EAAOjM,GAAG,UAAU,WAClBuV,EAAS7O,WAOXuF,EAAOjM,GAAG,WAAW,WACnBkM,EAAOkD,aAGFmG,GAwRPG,SArRF,SAAmBlO,EAAOgD,EAAYyB,GAMpC,IAAIC,EAAS,IAAIjC,EAEbyL,EAAW,CAMbhP,MAAO,WACL1N,KAAKyH,QAED+G,EAAML,SAAS/D,YACjBpK,KAAKtD,QAWT+K,MAAO,WACL,IAAImO,EAAQ5V,KAERwO,EAAML,SAAShE,UACb9M,EAAY2C,KAAKsP,MACnBtP,KAAKsP,GAAKqN,aAAY,WACpB/G,EAAMlO,OAEN8J,EAAWzC,IAAIC,KAAK,KAEpB4G,EAAMnO,UACLzH,KAAK4c,QAWdlV,KAAM,WACJ1H,KAAKsP,GAAKuN,cAAc7c,KAAKsP,KAS/B5S,KAAM,WACJ,IAAIsZ,EAAShW,KAEbkT,EAAOlM,GAAG,YAAawK,EAAWqD,KAAKC,MAAM,WAC3CkB,EAAOtO,UAGTwL,EAAOlM,GAAG,WAAYwK,EAAWqD,KAAKC,MAAM,WAC1CkB,EAAOvO,YAUXkP,OAAQ,WACNzD,EAAO6C,IAAI,CAAC,YAAa,YAAavE,EAAWqD,KAAKC,QAqE1D,OAjEA/G,EAAO2O,EAAU,OAAQ,CAOvB3gB,IAAK,WACH,IAAIoO,EAAWqH,EAAWqD,KAAKyC,OAAO9I,EAAM/L,OAAOuU,aAAa,uBAEhE,OACSzJ,EADLpD,GAISqE,EAAML,SAAShE,aAShC8I,EAAOjM,GAAG,CAAC,UAAW,WAAW,WAC/B0V,EAAS/F,YAWX1D,EAAOjM,GAAG,CAAC,aAAc,QAAS,UAAW,cAAe,WAAW,WACrE0V,EAAShV,UASXuL,EAAOjM,GAAG,CAAC,YAAa,OAAQ,cAAc,WAC5C0V,EAASjV,WAOXwL,EAAOjM,GAAG,UAAU,WAClB0V,EAAShP,WAOXuF,EAAOjM,GAAG,WAAW,WACnBkM,EAAOkD,aAGFsG,GAiIPI,YA9GF,SAAsBtO,EAAOgD,EAAYyB,GAMvC,IAAIC,EAAS,IAAIjC,EAOb9C,EAAWK,EAAML,SASjBwN,EAASD,EAAgBvN,EAAShD,aAOlCrB,EAAWgD,EAAS,GAAIqB,GAExB2O,EAAc,CAOhBxb,MAAO,SAAeqa,GACpB,QAAiC,IAAtB1c,OAAO8d,WAChB,IAAK,IAAIC,KAASrB,EAChB,GAAIA,EAAO5e,eAAeigB,IACpB/d,OAAO8d,WAAW,eAAiBC,EAAQ,OAAOvc,QACpD,OAAOkb,EAAOqB,GAMtB,OAAOlT,IAoCX,OA5BAgD,EAASqB,EAAU2O,EAAYxb,MAAMqa,IAMrCzI,EAAOlM,GAAG,SAAU/H,OAAQ+L,GAAS,WACnCwD,EAAML,SAAWD,EAAaC,EAAU2O,EAAYxb,MAAMqa,MACzDnN,EAAML,SAASnD,WAMlBiI,EAAOjM,GAAG,UAAU,WAClB2U,EAASD,EAAgBC,GAEzB7R,EAAWgD,EAAS,GAAIqB,MAO1B8E,EAAOjM,GAAG,WAAW,WACnBkM,EAAO6C,IAAI,SAAU9W,WAGhB6d,IA4BLG,EAAU,SAAUhC,GAGtB,SAASC,IAEP,OADA/O,EAAenM,KAAMkb,GACd9N,EAA0BpN,MAAOkb,EAASC,WAAavf,OAAOuR,eAAe+N,IAAWzV,MAAMzF,KAAMV,YAW7G,OAhzGa,SAAU8b,EAAUC,GACjC,GAA0B,mBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAI/O,UAAU,kEAAoE+O,GAG1FD,EAASte,UAAYlB,OAAOY,OAAO6e,GAAcA,EAAWve,UAAW,CACrEgB,YAAa,CACX3B,MAAOif,EACPtf,YAAY,EACZ6Q,UAAU,EACV5G,cAAc,KAGdsV,IAAYzf,OAAO0f,eAAiB1f,OAAO0f,eAAeF,EAAUC,GAAcD,EAASD,UAAYE,GAoxG3GE,CAASL,EAAUD,GAOnB1O,EAAY2O,EAAU,CAAC,CACrBze,IAAK,QACLN,MAAO,WACL,IAAIyR,EAAatO,UAAU3B,OAAS,QAAsBuJ,IAAjB5H,UAAU,GAAmBA,UAAU,GAAK,GAErF,OAAOvD,EAAImf,EAASpe,UAAUqe,WAAavf,OAAOuR,eAAe+N,EAASpe,WAAY,QAASkD,MAAM3E,KAAK2E,KAAM8M,EAAS,GAAIsK,EAAYxJ,QAGtIsN,EAhBK,CAiBZ1M,GAEa,O,gBCnlHkDvT,EAAOD,QAA0I,SAAS0X,GAAG,SAAStW,EAAET,GAAG,GAAGgB,EAAEhB,GAAG,OAAOgB,EAAEhB,GAAGX,QAAQ,IAAIE,EAAEyB,EAAEhB,GAAG,CAACX,QAAQ,GAAGyG,GAAG9F,EAAEuhB,QAAO,GAAI,OAAOxK,EAAE/W,GAAGN,KAAKH,EAAEF,QAAQE,EAAEA,EAAEF,QAAQoB,GAAGlB,EAAEgiB,QAAO,EAAGhiB,EAAEF,QAAQ,IAAI2B,EAAE,GAAG,OAAOP,EAAEd,EAAEoX,EAAEtW,EAAEb,EAAEoB,EAAEP,EAAEY,EAAE,QAAQZ,EAAE,GAAvM,CAA2M,CAAC,SAASsW,EAAEtW,EAAEO,GAAG,aAAa,SAAShB,EAAE+W,GAAG,OAAOA,GAAGA,EAAEpW,WAAWoW,EAAE,CAACyK,QAAQzK,GAAG,IAAIxX,EAAEU,OAAO6N,QAAQ,SAASiJ,GAAG,IAAI,IAAItW,EAAE,EAAEA,EAAEkD,UAAU3B,OAAOvB,IAAI,CAAC,IAAIO,EAAE2C,UAAUlD,GAAG,IAAI,IAAIT,KAAKgB,EAAEf,OAAOkB,UAAUC,eAAe1B,KAAKsB,EAAEhB,KAAK+W,EAAE/W,GAAGgB,EAAEhB,IAAI,OAAO+W,GAAUjT,GAAG9D,EAARgB,EAAE,IAAWA,EAAE,IAAIygB,EAAEzhB,EAAE8D,GAAUxC,EAAEtB,EAAPgB,EAAE,IAAiBnB,EAAEG,EAAPgB,EAAE,IAAiBK,EAAErB,EAAPgB,EAAE,IAAkB+C,EAAE/D,EAARgB,EAAE,KAAmB0gB,EAAE1hB,EAARgB,EAAE,KAAmB2gB,EAAE3hB,EAARgB,EAAE,KAAW4gB,EAAE,GAAG1Z,GAAE,EAAG2Z,EAAE,CAAC7V,OAAO,IAAI8V,MAAM,EAAE7V,OAAO,OAAOG,SAAS,IAAImH,SAAQ,EAAGwO,MAAK,EAAGC,WAAW,mBAAmBC,cAAc,GAAGC,cAAc,GAAGC,yBAAwB,GAAIvb,EAAE,WAAW,IAAImQ,EAAEpT,UAAU3B,OAAO,QAAG,IAAS2B,UAAU,IAAIA,UAAU,GAAG,GAAGoT,IAAI7O,GAAE,GAAIA,EAAE,OAAO0Z,GAAE,EAAGF,EAAEF,SAASI,EAAEC,IAAG,EAAG9d,EAAEyd,SAASI,EAAEC,EAAEE,MAAMH,GAAGQ,EAAE,WAAWR,GAAE,EAAGD,EAAEH,WAAW5a,KAA4+CmQ,EAAE1X,QAAQ,CAACgjB,KAAroC,SAAStL,GAAG8K,EAAEtiB,EAAEsiB,EAAE9K,GAAG6K,GAAE,EAAGD,EAAEH,WAAW,IAAI/gB,EAAE8C,SAAS+e,MAAMhf,OAAOif,KAAK,OAAzO,SAASxL,GAAG,OAAW,IAAJA,GAAQ,WAAWA,GAAG1V,EAAEmgB,QAAQgB,UAAU,UAAUzL,GAAG1V,EAAEmgB,QAAQiB,SAAS,WAAW1L,GAAG1V,EAAEmgB,QAAQkB,UAAU,mBAAmB3L,IAAS,IAANA,IAA2F4L,CAAEd,EAAEtO,UAAU9S,OAA7bmhB,EAAE/f,SAAQ,SAASkV,EAAEtW,GAAGsW,EAAElM,KAAKyQ,gBAAgB,YAAYvE,EAAElM,KAAKyQ,gBAAgB,mBAAmBvE,EAAElM,KAAKyQ,gBAAgB,qBAAqBvE,EAAElM,KAAKyQ,gBAAgB,sBAA4RuG,EAAEM,yBAAyBtiB,EAAE2hB,QAAQoB,gBAAgBtS,QAAQuS,KAAK,qLAAqLhB,EAAEM,yBAAwB,GAAI5e,SAAS8J,cAAc,QAAQH,aAAa,kBAAkB2U,EAAE5V,QAAQ1I,SAAS8J,cAAc,QAAQH,aAAa,oBAAoB2U,EAAEzV,UAAU7I,SAAS8J,cAAc,QAAQH,aAAa,iBAAiB2U,EAAEC,OAAO,qBAAqBD,EAAEG,YAAY,CAAC,WAAW,eAAezH,QAAQhX,SAASuf,aAAa,EAAElc,GAAE,GAAI,SAASib,EAAEG,WAAW1e,OAAOoI,iBAAiBmW,EAAEG,YAAW,WAAWpb,GAAE,MAAMrD,SAASmI,iBAAiBmW,EAAEG,YAAW,WAAWpb,GAAE,MAAMtD,OAAOoI,iBAAiB,UAAS,EAAGpK,EAAEkgB,SAAS5a,EAAEib,EAAEK,eAAc,IAAK5e,OAAOoI,iBAAiB,qBAAoB,EAAGpK,EAAEkgB,SAAS5a,EAAEib,EAAEK,eAAc,IAAK5e,OAAOoI,iBAAiB,UAAS,EAAG+V,EAAED,UAAS,YAAW,EAAGzd,EAAEyd,SAASI,EAAEC,EAAEE,QAAOF,EAAEI,gBAAgBJ,EAAEM,yBAAyBtiB,EAAE2hB,QAAQuB,MAAM,aAAaX,GAAGR,IAAsBoB,QAAQpc,EAAEqc,YAAYb,IAAI,SAASrL,EAAEtW,KAAK,CAAC,CAAC,CAAC,CAAC,SAASsW,EAAEtW,IAAG,SAAUA,GAAG,aAAa,SAASO,EAAE+V,EAAEtW,EAAEO,GAAG,SAAShB,EAAES,GAAG,IAAIO,EAAE+C,EAAE/D,EAAEkjB,EAAE,OAAOnf,EAAEmf,OAAE,EAAOhb,EAAEzH,EAAE0iB,EAAEpM,EAAEjN,MAAM9J,EAAEgB,GAAG,SAASX,EAAE0W,GAAG,OAAO7O,EAAE6O,EAAE4K,EAAE9M,WAAWuO,EAAE3iB,GAAG4iB,EAAErjB,EAAE+W,GAAGoM,EAA0D,SAASvjB,EAAEmX,GAAG,IAAI/V,EAAE+V,EAAE6K,EAAQ,YAAO,IAASA,GAAG5gB,GAAGP,GAAGO,EAAE,GAAG2hB,GAAlC5L,EAAE7O,GAAsCwZ,EAAE,SAAS0B,IAAI,IAAIrM,EAAEqL,IAAI,OAAOxiB,EAAEmX,GAAGlX,EAAEkX,QAAQ4K,EAAE9M,WAAWuO,EAAtL,SAAWrM,GAAG,IAAgBxX,EAAEkB,GAAZsW,EAAE6K,GAAc,OAAOe,EAAE/b,EAAErH,EAAEmiB,GAAvB3K,EAAE7O,IAA0B3I,EAAkIuE,CAAEiT,KAAK,SAASlX,EAAEkX,GAAG,OAAO4K,OAAE,EAAOpX,GAAGxG,EAAE/D,EAAE+W,IAAIhT,EAAEmf,OAAE,EAAOC,GAAuG,SAASxjB,IAAI,IAAIoX,EAAEqL,IAAIphB,EAAEpB,EAAEmX,GAAG,GAAGhT,EAAEJ,UAAUuf,EAAE7e,KAAKud,EAAE7K,EAAE/V,EAAE,CAAC,QAAG,IAAS2gB,EAAE,OAAOthB,EAAEuhB,GAAG,GAAGe,EAAE,OAAOhB,EAAE9M,WAAWuO,EAAE3iB,GAAGT,EAAE4hB,GAAG,YAAO,IAASD,IAAIA,EAAE9M,WAAWuO,EAAE3iB,IAAI0iB,EAAE,IAAIpf,EAAEmf,EAAExB,EAAEyB,EAAExB,EAAEC,EAAE1Z,EAAE,EAAEmb,GAAE,EAAGV,GAAE,EAAGpY,GAAE,EAAG,GAAG,mBAAmBwM,EAAE,MAAM,IAAIpG,UAAUrP,GAAG,OAAOb,EAAEghB,EAAEhhB,IAAI,EAAElB,EAAEyB,KAAKqiB,IAAIriB,EAAEuT,QAAwBmN,GAAhBiB,EAAE,YAAY3hB,GAAM6gB,EAAEJ,EAAEzgB,EAAEsiB,UAAU,EAAE7iB,GAAGihB,EAAEnX,EAAE,aAAavJ,IAAIA,EAAE4T,SAASrK,GAAG5K,EAAEmV,OAA3c,gBAAa,IAAS6M,GAAGhN,aAAagN,GAAGzZ,EAAE,EAAEnE,EAAE6d,EAAEsB,EAAEvB,OAAE,GAA+ZhiB,EAAE4jB,MAA1Z,WAAa,YAAO,IAAS5B,EAAEwB,EAAEtjB,EAAEuiB,MAA+XziB,EAAsM,SAASJ,EAAEwX,GAAG,IAAItW,OAAE,IAAoBsW,EAAE,YAAYnX,EAAEmX,GAAG,QAAQA,IAAI,UAAUtW,GAAG,YAAYA,GAA+E,SAASqD,EAAEiT,GAAG,MAAM,gBAAW,IAAoBA,EAAE,YAAYnX,EAAEmX,KAA/I,SAAWA,GAAG,QAAQA,GAAG,gBAAW,IAAoBA,EAAE,YAAYnX,EAAEmX,IAA4E1W,CAAE0W,IAAI7O,EAAExI,KAAKqX,IAAIlX,EAAE,SAAS4hB,EAAE1K,GAAG,GAAG,iBAAiBA,EAAE,OAAOA,EAAE,GAAGjT,EAAEiT,GAAG,OAAOqM,EAAE,GAAG7jB,EAAEwX,GAAG,CAAC,IAAItW,EAAE,mBAAmBsW,EAAEyM,QAAQzM,EAAEyM,UAAUzM,EAAEA,EAAExX,EAAEkB,GAAGA,EAAE,GAAGA,EAAE,GAAG,iBAAiBsW,EAAE,OAAO,IAAIA,EAAEA,GAAGA,EAAEA,EAAEA,EAAE5S,QAAQ3E,EAAE,IAAI,IAAIwB,EAAErB,EAAE8jB,KAAK1M,GAAG,OAAO/V,GAAG+C,EAAE0f,KAAK1M,GAAGmM,EAAEnM,EAAEnR,MAAM,GAAG5E,EAAE,EAAE,GAAGK,EAAEoiB,KAAK1M,GAAGqM,GAAGrM,EAAE,IAAInX,EAAE,mBAAmBU,QAAQ,iBAAiBA,OAAOuL,SAAS,SAASkL,GAAG,cAAcA,GAAG,SAASA,GAAG,OAAOA,GAAG,mBAAmBzW,QAAQyW,EAAE5U,cAAc7B,QAAQyW,IAAIzW,OAAOa,UAAU,gBAAgB4V,GAAGzV,EAAE,sBAAsB8hB,EAAEM,IAAI7jB,EAAE,kBAAkBL,EAAE,aAAa6B,EAAE,qBAAqB1B,EAAE,aAAaoE,EAAE,cAAcmf,EAAErR,SAAS6P,EAAE,gBAAW,IAAoBjhB,EAAE,YAAYb,EAAEa,KAAKA,GAAGA,EAAER,SAASA,QAAQQ,EAAE0iB,EAAE,WAAW,oBAAoBzR,KAAK,YAAY9R,EAAE8R,QAAQA,MAAMA,KAAKzR,SAASA,QAAQyR,KAAKiQ,EAAED,GAAGyB,GAAG9R,SAAS,cAATA,GAA6CnJ,EAAjBjI,OAAOkB,UAAcI,SAASsgB,EAAErJ,KAAKsB,IAAIlT,EAAE4R,KAAKoB,IAAIwI,EAAE,WAAW,OAAOT,EAAE5N,KAAKD,OAAOiD,EAAE1X,QAA90C,SAAW0X,EAAEtW,EAAET,GAAG,IAAIK,GAAE,EAAGyD,GAAE,EAAG,GAAG,mBAAmBiT,EAAE,MAAM,IAAIpG,UAAUrP,GAAG,OAAO/B,EAAES,KAAKK,EAAE,YAAYL,IAAIA,EAAEuU,QAAQlU,EAAEyD,EAAE,aAAa9D,IAAIA,EAAE4U,SAAS9Q,GAAG9C,EAAE+V,EAAEtW,EAAE,CAAC8T,QAAQlU,EAAEijB,QAAQ7iB,EAAEmU,SAAS9Q,OAA0pCpE,KAAKe,EAAE,WAAW,OAAO4D,KAAlB,KAA4B,SAAS0S,EAAEtW,IAAG,SAAUA,GAAG,aAAw2B,SAAST,EAAE+W,GAAG,IAAItW,OAAE,IAAoBsW,EAAE,YAAY0K,EAAE1K,GAAG,QAAQA,IAAI,UAAUtW,GAAG,YAAYA,GAA+E,SAASJ,EAAE0W,GAAG,MAAM,gBAAW,IAAoBA,EAAE,YAAY0K,EAAE1K,KAA/I,SAAWA,GAAG,QAAQA,GAAG,gBAAW,IAAoBA,EAAE,YAAY0K,EAAE1K,IAA4ExX,CAAEwX,IAAI6K,EAAEliB,KAAKqX,IAAIqM,EAAE,SAAStf,EAAEiT,GAAG,GAAG,iBAAiBA,EAAE,OAAOA,EAAE,GAAG1W,EAAE0W,GAAG,OAAOzV,EAAE,GAAGtB,EAAE+W,GAAG,CAAC,IAAItW,EAAE,mBAAmBsW,EAAEyM,QAAQzM,EAAEyM,UAAUzM,EAAEA,EAAE/W,EAAES,GAAGA,EAAE,GAAGA,EAAE,GAAG,iBAAiBsW,EAAE,OAAO,IAAIA,EAAEA,GAAGA,EAAEA,EAAEA,EAAE5S,QAAQtE,EAAE,IAAI,IAAImB,EAAEK,EAAEoiB,KAAK1M,GAAG,OAAO/V,GAAGrB,EAAE8jB,KAAK1M,GAAGhT,EAAEgT,EAAEnR,MAAM,GAAG5E,EAAE,EAAE,GAAGxB,EAAEikB,KAAK1M,GAAGzV,GAAGyV,EAAE,IAAI0K,EAAE,mBAAmBnhB,QAAQ,iBAAiBA,OAAOuL,SAAS,SAASkL,GAAG,cAAcA,GAAG,SAASA,GAAG,OAAOA,GAAG,mBAAmBzW,QAAQyW,EAAE5U,cAAc7B,QAAQyW,IAAIzW,OAAOa,UAAU,gBAAgB4V,GAAGnX,EAAE,sBAAsB0B,EAAEoiB,IAAIN,EAAE,kBAAkBvjB,EAAE,aAAaL,EAAE,qBAAqB6B,EAAE,aAAa1B,EAAE,cAAcoE,EAAE8N,SAASqR,EAAE,gBAAW,IAAoBziB,EAAE,YAAYghB,EAAEhhB,KAAKA,GAAGA,EAAER,SAASA,QAAQQ,EAAEihB,EAAE,WAAW,oBAAoBhQ,KAAK,YAAY+P,EAAE/P,QAAQA,MAAMA,KAAKzR,SAASA,QAAQyR,KAAKyR,EAAED,GAAGxB,GAAGrQ,SAAS,cAATA,GAA6CuQ,EAAjB3hB,OAAOkB,UAAcI,SAAS2G,EAAEsQ,KAAKsB,IAAI+H,EAAErJ,KAAKoB,IAAIhT,EAAE,WAAW,OAAOuc,EAAEpP,KAAKD,OAAOiD,EAAE1X,QAAr+D,SAAW0X,EAAEtW,EAAEO,GAAG,SAASzB,EAAEkB,GAAG,IAAIO,EAAE+C,EAAE/D,EAAEkjB,EAAE,OAAOnf,EAAEmf,OAAE,EAAOd,EAAE3hB,EAAE0iB,EAAEpM,EAAEjN,MAAM9J,EAAEgB,GAAG,SAASX,EAAE0W,GAAG,OAAOqL,EAAErL,EAAE4K,EAAE9M,WAAWuO,EAAE3iB,GAAG4iB,EAAE9jB,EAAEwX,GAAGoM,EAA0D,SAAS7hB,EAAEyV,GAAG,IAAI/V,EAAE+V,EAAE6K,EAAQ,YAAO,IAASA,GAAG5gB,GAAGP,GAAGO,EAAE,GAAG2hB,GAAlC5L,EAAEqL,GAAsCV,EAAE,SAAS0B,IAAI,IAAIrM,EAAEnQ,IAAI,OAAOtF,EAAEyV,GAAGlX,EAAEkX,QAAQ4K,EAAE9M,WAAWuO,EAAtL,SAAWrM,GAAG,IAAgBxX,EAAEkB,GAAZsW,EAAE6K,GAAc,OAAOe,EAAEd,EAAEtiB,EAAEmiB,GAAvB3K,EAAEqL,IAA0B7iB,EAAkIkiB,CAAE1K,KAAK,SAASlX,EAAEkX,GAAG,OAAO4K,OAAE,EAAOpX,GAAGxG,EAAExE,EAAEwX,IAAIhT,EAAEmf,OAAE,EAAOC,GAAuG,SAASxjB,IAAI,IAAIoX,EAAEnQ,IAAI5F,EAAEM,EAAEyV,GAAG,GAAGhT,EAAEJ,UAAUuf,EAAE7e,KAAKud,EAAE7K,EAAE/V,EAAE,CAAC,QAAG,IAAS2gB,EAAE,OAAOthB,EAAEuhB,GAAG,GAAGe,EAAE,OAAOhB,EAAE9M,WAAWuO,EAAE3iB,GAAGlB,EAAEqiB,GAAG,YAAO,IAASD,IAAIA,EAAE9M,WAAWuO,EAAE3iB,IAAI0iB,EAAE,IAAIpf,EAAEmf,EAAExB,EAAEyB,EAAExB,EAAEC,EAAEQ,EAAE,EAAEiB,GAAE,EAAGV,GAAE,EAAGpY,GAAE,EAAG,GAAG,mBAAmBwM,EAAE,MAAM,IAAIpG,UAAU/Q,GAAG,OAAOa,EAAEqD,EAAErD,IAAI,EAAET,EAAEgB,KAAKqiB,IAAIriB,EAAEuT,QAAwBmN,GAAhBiB,EAAE,YAAY3hB,GAAMkH,EAAEpE,EAAE9C,EAAEsiB,UAAU,EAAE7iB,GAAGihB,EAAEnX,EAAE,aAAavJ,IAAIA,EAAE4T,SAASrK,GAAG5K,EAAEmV,OAA3c,gBAAa,IAAS6M,GAAGhN,aAAagN,GAAGS,EAAE,EAAEre,EAAE6d,EAAEsB,EAAEvB,OAAE,GAA+ZhiB,EAAE4jB,MAA1Z,WAAa,YAAO,IAAS5B,EAAEwB,EAAEtjB,EAAE+G,MAA+XjH,KAAwpCD,KAAKe,EAAE,WAAW,OAAO4D,KAAlB,KAA4B,SAAS0S,EAAEtW,GAAG,aAAgL,SAAST,IAAI,OAAOsD,OAAOqgB,kBAAkBrgB,OAAOsgB,wBAAwBtgB,OAAOugB,oBAA+K,SAAS/f,EAAEiT,GAAGA,GAAGA,EAAElV,SAAQ,SAASkV,GAAG,IAAItW,EAAEqR,MAAM3Q,UAAUyE,MAAMlG,KAAKqX,EAAE+M,YAAY9jB,EAAE8R,MAAM3Q,UAAUyE,MAAMlG,KAAKqX,EAAEgN,cAA4B,GAAtjB,SAAS/iB,EAAE+V,GAAG,IAAItW,OAAE,EAAOT,OAAE,EAAgB,IAAIS,EAAE,EAAEA,EAAEsW,EAAE/U,OAAOvB,GAAG,EAAE,CAAC,IAAGT,EAAE+W,EAAEtW,IAAKujB,SAAShkB,EAAEgkB,QAAQC,IAAI,OAAM,EAAG,GAAKjkB,EAAE4b,UAAU5a,EAAEhB,EAAE4b,UAAU,OAAM,EAAG,OAAM,EAAyZ5a,CAAfP,EAAEuG,OAAOhH,IAAW,OAAOyhB,OAAMxhB,OAAOC,eAAeO,EAAE,aAAa,CAACD,OAAM,IAAK,IAAIihB,EAAE,aAAahhB,EAAE+gB,QAAQ,CAACoB,YAAhZ,WAAa,QAAQ5iB,KAAyY+iB,MAArY,SAAWhM,EAAEtW,GAAG,IAAIO,EAAEsC,OAAOC,SAAelD,EAAE,IAANL,IAAM,CAAM8D,GAAG2d,EAAEhhB,EAAEJ,EAAE6jB,QAAQljB,EAAE6D,gBAAgB,CAACsf,WAAU,EAAGC,SAAQ,EAAGL,cAAa,OAAkR,SAAShN,EAAEtW,GAAG,aAA2G,SAAST,IAAI,OAAOoD,UAAUihB,WAAWjhB,UAAUkhB,QAAQhhB,OAAOihB,OAAO,GAAGtkB,OAAOC,eAAeO,EAAE,aAAa,CAACD,OAAM,IAAK,IAAIjB,EAAE,WAAW,SAASwX,EAAEA,EAAEtW,GAAG,IAAI,IAAIO,EAAE,EAAEA,EAAEP,EAAEuB,OAAOhB,IAAI,CAAC,IAAIhB,EAAES,EAAEO,GAAGhB,EAAEG,WAAWH,EAAEG,aAAY,EAAGH,EAAEoK,cAAa,EAAG,UAAUpK,IAAIA,EAAEgR,UAAS,GAAI/Q,OAAOC,eAAe6W,EAAE/W,EAAEc,IAAId,IAAI,OAAO,SAASS,EAAEO,EAAEhB,GAAG,OAAOgB,GAAG+V,EAAEtW,EAAEU,UAAUH,GAAGhB,GAAG+W,EAAEtW,EAAET,GAAGS,GAA7O,GAAmPJ,EAAE,2TAA2TyD,EAAE,0kDAA0kD2d,EAAE,sVAAsV7hB,EAAE,0kDAA0kD0B,EAAE,WAAW,SAASyV,KAAvxI,SAAWA,EAAEtW,GAAG,KAAKsW,aAAatW,GAAG,MAAM,IAAIkQ,UAAU,qCAAkuI3P,CAAEqD,KAAK0S,GAAG,OAAOxX,EAAEwX,EAAE,CAAC,CAACjW,IAAI,QAAQN,MAAM,WAAW,IAAIuW,EAAE/W,IAAI,SAASK,EAAEojB,KAAK1M,KAAKjT,EAAE2f,KAAK1M,EAAEsI,OAAO,EAAE,OAAO,CAACve,IAAI,SAASN,MAAM,WAAW,IAAIuW,EAAE/W,IAAI,SAASyhB,EAAEgC,KAAK1M,KAAKnX,EAAE6jB,KAAK1M,EAAEsI,OAAO,EAAE,OAAO,CAACve,IAAI,SAASN,MAAM,WAAW,OAAO6D,KAAKme,WAAWne,KAAKoe,YAAY1L,EAAlS,GAAuStW,EAAE+gB,QAAQ,IAAIlgB,GAAG,SAASyV,EAAEtW,GAAG,aAAaR,OAAOC,eAAeO,EAAE,aAAa,CAACD,OAAM,IAAyTC,EAAE+gB,QAApG,SAASzK,EAAEtW,GAAG,IAAIT,EAAEsD,OAAOqJ,YAAYpN,EAAE+D,OAAOkhB,YAAYzN,EAAElV,SAAQ,SAASkV,EAAE1W,IAA7R,SAAS0W,EAAEtW,EAAEO,GAAG,IAAIhB,EAAE+W,EAAElM,KAAKwQ,aAAa,iBAAiB5a,EAAEsW,EAAE0N,SAAS1N,EAAElM,KAAKuO,UAAUzR,IAAI,oBAAe,IAAoB3H,IAAI,UAAUA,IAAIgB,GAAG,SAAShB,IAAI+W,EAAElM,KAAKuO,UAAUnR,OAAO,eAAsGjH,CAAE+V,EAAExX,EAAES,EAAES,QAAmB,SAASsW,EAAEtW,EAAEO,GAAG,aAAgEf,OAAOC,eAAeO,EAAE,aAAa,CAACD,OAAM,IAAK,IAAYH,EAAhH,SAAW0W,GAAG,OAAOA,GAAGA,EAAEpW,WAAWoW,EAAE,CAACyK,QAAQzK,GAAkE/W,CAARgB,EAAE,KAA0IP,EAAE+gB,QAA/H,SAASzK,EAAEtW,GAAG,OAAOsW,EAAElV,SAAQ,SAASkV,EAAE/V,GAAG+V,EAAElM,KAAKuO,UAAUzR,IAAI,YAAYoP,EAAE0N,UAAS,EAAGpkB,EAAEmhB,SAASzK,EAAElM,KAAKpK,EAAEuL,WAAU+K,IAAgB,SAASA,EAAEtW,EAAEO,GAAG,aAAgEf,OAAOC,eAAeO,EAAE,aAAa,CAACD,OAAM,IAAK,IAAYH,EAAhH,SAAW0W,GAAG,OAAOA,GAAGA,EAAEpW,WAAWoW,EAAE,CAACyK,QAAQzK,GAAkE/W,CAARgB,EAAE,KAAiyBP,EAAE+gB,QAAtxB,SAASzK,EAAEtW,GAAG,IAAIO,EAAE,EAAEhB,EAAE,EAAET,EAAE+D,OAAOkhB,YAAY1gB,EAAE,CAACkI,OAAO+K,EAAEsE,aAAa,mBAAmBqJ,OAAO3N,EAAEsE,aAAa,mBAAmBsJ,gBAAgB5N,EAAEsE,aAAa,8BAA8B,OAAOvX,EAAEkI,SAAS4Y,MAAM9gB,EAAEkI,UAAUhM,EAAE6R,SAAS/N,EAAEkI,SAASlI,EAAE4gB,QAAQnhB,SAAS+B,iBAAiBxB,EAAE4gB,UAAU3N,EAAExT,SAAS+B,iBAAiBxB,EAAE4gB,QAAQ,IAAI1jB,GAAE,EAAGX,EAAEmhB,SAASzK,GAAGnK,IAAI9I,EAAE6gB,iBAAiB,IAAI,aAAa,MAAM,IAAI,gBAAgB3jB,GAAG+V,EAAEtJ,aAAa,EAAE,MAAM,IAAI,gBAAgBzM,GAAG+V,EAAEtJ,aAAa,MAAM,IAAI,aAAazM,GAAGzB,EAAE,EAAE,MAAM,IAAI,gBAAgByB,GAAGzB,EAAE,EAAEwX,EAAEtJ,aAAa,MAAM,IAAI,gBAAgBzM,GAAGzB,EAAE,EAAEwX,EAAEtJ,aAAa,EAAE,MAAM,IAAI,UAAUzM,GAAGzB,EAAE,MAAM,IAAI,aAAayB,GAAG+V,EAAEtJ,aAAalO,EAAE,MAAM,IAAI,aAAayB,GAAG+V,EAAEtJ,aAAa,EAAElO,EAAE,OAAOuE,EAAE6gB,iBAAiB7gB,EAAEkI,QAAQ4Y,MAAMnkB,KAAKT,EAAES,GAAGO,EAAEhB,IAAgB,SAAS+W,EAAEtW,GAAG,aAAaR,OAAOC,eAAeO,EAAE,aAAa,CAACD,OAAM,IAAgOC,EAAE+gB,QAAvN,SAASzK,GAAG,IAAI,IAAItW,EAAE,EAAEO,EAAE,EAAE+V,IAAI6N,MAAM7N,EAAE8N,cAAcD,MAAM7N,EAAE+N,YAAYrkB,GAAGsW,EAAE8N,YAAY,QAAQ9N,EAAEgO,QAAQhO,EAAEiO,WAAW,GAAGhkB,GAAG+V,EAAE+N,WAAW,QAAQ/N,EAAEgO,QAAQhO,EAAEkO,UAAU,GAAGlO,EAAEA,EAAEmO,aAAa,MAAM,CAACtY,IAAI5L,EAAEmkB,KAAK1kB,KAAiB,SAASsW,EAAEtW,GAAG,aAAaR,OAAOC,eAAeO,EAAE,aAAa,CAACD,OAAM,IAAoIC,EAAE+gB,QAA3H,SAASzK,GAAG,OAAOA,EAAEA,GAAGxT,SAAS+B,iBAAiB,cAAcwM,MAAM3Q,UAAUoF,IAAI7G,KAAKqX,GAAE,SAASA,GAAG,MAAM,CAAClM,KAAKkM,W,6BCqB5zc1H,IArBE,CAAC4E,EAAMmR,KACtB,IAAIC,EACAC,EACJ,OAAO,WACL,MAAM/f,EAAUlB,KACV+P,EAAOzQ,UACR2hB,GAIH3Q,aAAa0Q,GACbA,EAAWxQ,YAAW,WAChBd,KAAKD,MAAQwR,GAAWF,IAC1BnR,EAAKnK,MAAMvE,EAAS6O,GACpBkR,EAAUvR,KAAKD,SAEhBsR,GAASrR,KAAKD,MAAQwR,MATzBrR,EAAKnK,MAAMvE,EAAS6O,GACpBkR,EAAUvR,KAAKD,U,2DCNrBxU,EAAOD,QAAU,SAAc0C,EAAIiC,GACjC,OAAO,WAEL,IADA,IAAIoQ,EAAO,IAAItC,MAAMnO,UAAU3B,QACtBzC,EAAI,EAAGA,EAAI6U,EAAKpS,OAAQzC,IAC/B6U,EAAK7U,GAAKoE,UAAUpE,GAEtB,OAAOwC,EAAG+H,MAAM9F,EAASoQ,M,6BCN7B,IAAImR,EAAQ,EAAQ,GAEpB,SAASC,EAAO/jB,GACd,OAAOgkB,mBAAmBhkB,GACxB0C,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,OAAQ,KAChBA,QAAQ,QAAS,KACjBA,QAAQ,QAAS,KAUrB7E,EAAOD,QAAU,SAAkBqmB,EAAKC,EAAQC,GAE9C,IAAKD,EACH,OAAOD,EAGT,IAAIG,EACJ,GAAID,EACFC,EAAmBD,EAAiBD,QAC/B,GAAIJ,EAAMtiB,kBAAkB0iB,GACjCE,EAAmBF,EAAOpkB,eACrB,CACL,IAAIukB,EAAQ,GAEZP,EAAM1jB,QAAQ8jB,GAAQ,SAAmBlkB,EAAKX,GACxCW,UAIA8jB,EAAM/jB,QAAQC,GAChBX,GAAY,KAEZW,EAAM,CAACA,GAGT8jB,EAAM1jB,QAAQJ,GAAK,SAAoByhB,GACjCqC,EAAM3iB,OAAOsgB,GACfA,EAAIA,EAAE6C,cACGR,EAAM5jB,SAASuhB,KACxBA,EAAI8C,KAAKC,UAAU/C,IAErB4C,EAAMrgB,KAAK+f,EAAO1kB,GAAO,IAAM0kB,EAAOtC,WAI1C2C,EAAmBC,EAAMnd,KAAK,KAGhC,GAAIkd,EAAkB,CACpB,IAAIK,EAAgBR,EAAInL,QAAQ,MACT,IAAnB2L,IACFR,EAAMA,EAAI9f,MAAM,EAAGsgB,IAGrBR,KAA8B,IAAtBA,EAAInL,QAAQ,KAAc,IAAM,KAAOsL,EAGjD,OAAOH,I,6BCnETpmB,EAAOD,QAAU,SAAkBmB,GACjC,SAAUA,IAASA,EAAM2lB,c,8BCH3B,YAEA,IAAIZ,EAAQ,EAAQ,GAChBa,EAAsB,EAAQ,IAE9BC,EAAuB,CACzB,eAAgB,qCAGlB,SAASC,EAAsBC,EAAS/lB,IACjC+kB,EAAM7jB,YAAY6kB,IAAYhB,EAAM7jB,YAAY6kB,EAAQ,mBAC3DA,EAAQ,gBAAkB/lB,GAgB9B,IAXMgmB,EAWFrY,EAAW,CACbqY,UAX8B,oBAAnBC,qBAGmB,IAAZC,GAAuE,qBAA5CzmB,OAAOkB,UAAUI,SAAS7B,KAAKgnB,MAD1EF,EAAU,EAAQ,KAKbA,GAMPG,iBAAkB,CAAC,SAA0B/e,EAAM2e,GAGjD,OAFAH,EAAoBG,EAAS,UAC7BH,EAAoBG,EAAS,gBACzBhB,EAAMnjB,WAAWwF,IACnB2d,EAAMtjB,cAAc2F,IACpB2d,EAAMrjB,SAAS0F,IACf2d,EAAMxiB,SAAS6E,IACf2d,EAAM1iB,OAAO+E,IACb2d,EAAMziB,OAAO8E,GAENA,EAEL2d,EAAMjjB,kBAAkBsF,GACnBA,EAAKnF,OAEV8iB,EAAMtiB,kBAAkB2E,IAC1B0e,EAAsBC,EAAS,mDACxB3e,EAAKrG,YAEVgkB,EAAM5jB,SAASiG,IACjB0e,EAAsBC,EAAS,kCACxBP,KAAKC,UAAUre,IAEjBA,IAGTgf,kBAAmB,CAAC,SAA2Bhf,GAE7C,GAAoB,iBAATA,EACT,IACEA,EAAOoe,KAAKa,MAAMjf,GAClB,MAAOmP,IAEX,OAAOnP,IAOTuM,QAAS,EAET2S,eAAgB,aAChBC,eAAgB,eAEhBC,kBAAmB,EAEnBC,eAAgB,SAAwBpT,GACtC,OAAOA,GAAU,KAAOA,EAAS,MAIrC1F,EAASoY,QAAU,CACjBW,OAAQ,CACN,OAAU,sCAId3B,EAAM1jB,QAAQ,CAAC,SAAU,MAAO,SAAS,SAA6BslB,GACpEhZ,EAASoY,QAAQY,GAAU,MAG7B5B,EAAM1jB,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BslB,GACrEhZ,EAASoY,QAAQY,GAAU5B,EAAM/hB,MAAM6iB,MAGzC/mB,EAAOD,QAAU8O,I,+CC9FjB,IAAIoX,EAAQ,EAAQ,GAChB6B,EAAS,EAAQ,IACjBC,EAAW,EAAQ,IACnBC,EAAgB,EAAQ,IACxBC,EAAe,EAAQ,IACvBC,EAAkB,EAAQ,IAC1BC,EAAc,EAAQ,IAE1BnoB,EAAOD,QAAU,SAAoBqoB,GACnC,OAAO,IAAIC,SAAQ,SAA4B9N,EAAS+N,GACtD,IAAIC,EAAcH,EAAO9f,KACrBkgB,EAAiBJ,EAAOnB,QAExBhB,EAAMnjB,WAAWylB,WACZC,EAAe,gBAGxB,IAAIC,EAAU,IAAItB,eAGlB,GAAIiB,EAAOM,KAAM,CACf,IAAIC,EAAWP,EAAOM,KAAKC,UAAY,GACnCC,EAAWR,EAAOM,KAAKE,UAAY,GACvCJ,EAAeK,cAAgB,SAAWC,KAAKH,EAAW,IAAMC,GAGlE,IAAIG,EAAWf,EAAcI,EAAOY,QAASZ,EAAOhC,KA4EpD,GA3EAqC,EAAQQ,KAAKb,EAAOP,OAAO9gB,cAAeghB,EAASgB,EAAUX,EAAO/B,OAAQ+B,EAAO9B,mBAAmB,GAGtGmC,EAAQ5T,QAAUuT,EAAOvT,QAGzB4T,EAAQS,mBAAqB,WAC3B,GAAKT,GAAkC,IAAvBA,EAAQjF,aAQD,IAAnBiF,EAAQlU,QAAkBkU,EAAQU,aAAwD,IAAzCV,EAAQU,YAAYlO,QAAQ,UAAjF,CAKA,IAAImO,EAAkB,0BAA2BX,EAAUR,EAAaQ,EAAQY,yBAA2B,KAEvGC,EAAW,CACbhhB,KAFkB8f,EAAOmB,cAAwC,SAAxBnB,EAAOmB,aAAiDd,EAAQa,SAA/Bb,EAAQe,aAGlFjV,OAAQkU,EAAQlU,OAChBkV,WAAYhB,EAAQgB,WACpBxC,QAASmC,EACThB,OAAQA,EACRK,QAASA,GAGXX,EAAOvN,EAAS+N,EAAQgB,GAGxBb,EAAU,OAIZA,EAAQiB,QAAU,WACXjB,IAILH,EAAOH,EAAY,kBAAmBC,EAAQ,eAAgBK,IAG9DA,EAAU,OAIZA,EAAQkB,QAAU,WAGhBrB,EAAOH,EAAY,gBAAiBC,EAAQ,KAAMK,IAGlDA,EAAU,MAIZA,EAAQmB,UAAY,WAClB,IAAIC,EAAsB,cAAgBzB,EAAOvT,QAAU,cACvDuT,EAAOyB,sBACTA,EAAsBzB,EAAOyB,qBAE/BvB,EAAOH,EAAY0B,EAAqBzB,EAAQ,eAC9CK,IAGFA,EAAU,MAMRxC,EAAMpiB,uBAAwB,CAChC,IAAIimB,EAAU,EAAQ,IAGlBC,GAAa3B,EAAO4B,iBAAmB9B,EAAgBa,KAAcX,EAAOZ,eAC9EsC,EAAQG,KAAK7B,EAAOZ,qBACpBvb,EAEE8d,IACFvB,EAAeJ,EAAOX,gBAAkBsC,GAuB5C,GAlBI,qBAAsBtB,GACxBxC,EAAM1jB,QAAQimB,GAAgB,SAA0BrmB,EAAKX,QAChC,IAAhB+mB,GAAqD,iBAAtB/mB,EAAI0oB,qBAErC1B,EAAehnB,GAGtBinB,EAAQ0B,iBAAiB3oB,EAAKW,MAM/B8jB,EAAM7jB,YAAYgmB,EAAO4B,mBAC5BvB,EAAQuB,kBAAoB5B,EAAO4B,iBAIjC5B,EAAOmB,aACT,IACEd,EAAQc,aAAenB,EAAOmB,aAC9B,MAAO9R,GAGP,GAA4B,SAAxB2Q,EAAOmB,aACT,MAAM9R,EAM6B,mBAA9B2Q,EAAOgC,oBAChB3B,EAAQrc,iBAAiB,WAAYgc,EAAOgC,oBAIP,mBAA5BhC,EAAOiC,kBAAmC5B,EAAQ6B,QAC3D7B,EAAQ6B,OAAOle,iBAAiB,WAAYgc,EAAOiC,kBAGjDjC,EAAOmC,aAETnC,EAAOmC,YAAYC,QAAQC,MAAK,SAAoBjV,GAC7CiT,IAILA,EAAQiC,QACRpC,EAAO9S,GAEPiT,EAAU,cAIMxc,IAAhBsc,IACFA,EAAc,MAIhBE,EAAQkC,KAAKpC,Q,6BC/KjB,IAAIqC,EAAe,EAAQ,IAY3B5qB,EAAOD,QAAU,SAAqB8qB,EAASzC,EAAQ0C,EAAMrC,EAASa,GACpE,IAAIrY,EAAQ,IAAI8Z,MAAMF,GACtB,OAAOD,EAAa3Z,EAAOmX,EAAQ0C,EAAMrC,EAASa,K,6BCdpD,IAAIrD,EAAQ,EAAQ,GAUpBjmB,EAAOD,QAAU,SAAqBirB,EAASC,GAE7CA,EAAUA,GAAW,GACrB,IAAI7C,EAAS,GAET8C,EAAuB,CAAC,MAAO,SAAU,SAAU,QACnDC,EAA0B,CAAC,UAAW,OAAQ,SAC9CC,EAAuB,CACzB,UAAW,MAAO,mBAAoB,oBAAqB,mBAC3D,UAAW,kBAAmB,UAAW,eAAgB,iBACzD,iBAAkB,mBAAoB,qBACtC,mBAAoB,iBAAkB,eAAgB,YACtD,aAAc,cAAe,cAG/BnF,EAAM1jB,QAAQ2oB,GAAsB,SAA0BnY,QAC/B,IAAlBkY,EAAQlY,KACjBqV,EAAOrV,GAAQkY,EAAQlY,OAI3BkT,EAAM1jB,QAAQ4oB,GAAyB,SAA6BpY,GAC9DkT,EAAM5jB,SAAS4oB,EAAQlY,IACzBqV,EAAOrV,GAAQkT,EAAM3hB,UAAU0mB,EAAQjY,GAAOkY,EAAQlY,SACpB,IAAlBkY,EAAQlY,GACxBqV,EAAOrV,GAAQkY,EAAQlY,GACdkT,EAAM5jB,SAAS2oB,EAAQjY,IAChCqV,EAAOrV,GAAQkT,EAAM3hB,UAAU0mB,EAAQjY,SACL,IAAlBiY,EAAQjY,KACxBqV,EAAOrV,GAAQiY,EAAQjY,OAI3BkT,EAAM1jB,QAAQ6oB,GAAsB,SAA0BrY,QAC/B,IAAlBkY,EAAQlY,GACjBqV,EAAOrV,GAAQkY,EAAQlY,QACW,IAAlBiY,EAAQjY,KACxBqV,EAAOrV,GAAQiY,EAAQjY,OAI3B,IAAIsY,EAAYH,EACbxjB,OAAOyjB,GACPzjB,OAAO0jB,GAENE,EAAY3qB,OACb8I,KAAKwhB,GACL1O,QAAO,SAAyB/a,GAC/B,OAAmC,IAA5B6pB,EAAUpQ,QAAQzZ,MAW7B,OARAykB,EAAM1jB,QAAQ+oB,GAAW,SAAmCvY,QAC7B,IAAlBkY,EAAQlY,GACjBqV,EAAOrV,GAAQkY,EAAQlY,QACW,IAAlBiY,EAAQjY,KACxBqV,EAAOrV,GAAQiY,EAAQjY,OAIpBqV,I,6BC/DT,SAASmD,EAAOV,GACd9lB,KAAK8lB,QAAUA,EAGjBU,EAAO1pB,UAAUI,SAAW,WAC1B,MAAO,UAAY8C,KAAK8lB,QAAU,KAAO9lB,KAAK8lB,QAAU,KAG1DU,EAAO1pB,UAAUglB,YAAa,EAE9B7mB,EAAOD,QAAUwrB,G,gBCZhB,IAAS1R,EAAY9F,EAAZ8F,EAGR9U,KAHoBgP,EAGL,WAEf,IAAIyX,EAAS,GACTC,EAAuB,oBAAVznB,QAAyBA,OACtC0nB,EAAyB,oBAAZznB,UAA2BA,SACxCqB,EAAUomB,GAAOA,EAAInmB,gBACrBuc,EAAa2J,EAAgB,YAAKA,EAAkB,aACpDE,EAAK7J,EAAa,SAAS8J,GACzB,QAAS9J,EAAW1hB,KAAKqrB,EAAKG,GAAGpmB,SAC/B,WACF,OAAO,GAETqmB,EAAYL,EAAkB,UAAI,WAChC,IAAIhnB,EAAIc,EAAqB,YAAGb,EAAIgnB,EAAgB,WACpD,OAAOjnB,EAAIC,EAAIA,EAAID,GAErBsnB,EAAYN,EAAkB,UAAI,WAChC,IAAIhnB,EAAIc,EAAsB,aAAGb,EAAIgnB,EAAiB,YACtD,OAAOjnB,EAAIC,EAAIA,EAAID,GA2BzB,SAASunB,IACP,MAAO,CAAC,MAAQF,IAAa,OAASC,KA2CxC,SAASE,EAAUlmB,EAAImmB,GAErB,UADAnmB,EAAKA,IAAOA,EAAG0F,SAAW1F,EAAG,GAAKA,IACvB,IAAMA,EAAG0F,WAlBtB,SAAmB0gB,EAAQD,GACzB,IAAIvrB,EAAI,GAIR,OAHAurB,GAAWA,GAAW,EACtBvrB,EAAS,OAAKA,EAAS,MAAIwrB,EAAc,MAAID,IAAYvrB,EAAQ,KAAIwrB,EAAa,KAAID,GACtFvrB,EAAU,QAAKA,EAAU,OAAIwrB,EAAe,OAAID,IAAYvrB,EAAO,IAAIwrB,EAAY,IAAID,GAChFvrB,EAcAyrB,CAAUrmB,EAAGyH,wBAAyB0e,GA0D/C,OA5HAT,EAAW,GAAIG,EAOfH,EAAmB,WAAI1J,EAAa,WAElC,OAAOA,EAAWtX,MAAMihB,EAAKpnB,YAC3B,WAEF,MAAO,IAUTmnB,EAAiB,SAAIO,EAOrBP,EAAgB,QAAI,WAClB,OAAOC,EAAIW,aAAe9mB,EAAQogB,YAQpC8F,EAAgB,QAAI,WAClB,OAAOC,EAAIpe,aAAe/H,EAAQqgB,WA6BpC6F,EAAkB,UAAIQ,EAgBtBR,EAAe,OAPf,SAAgB9qB,GAEd,IAAI2hB,GADJ3hB,EAAI,MAAQA,EAAIqrB,IAAa,IAAMrrB,EAAE8K,SAAWwgB,EAAUtrB,GAAKA,GAC7C,OAAG4hB,EAAI5hB,EAAS,MAGlC,OAFA2hB,EAAgB,mBAALA,EAAkBA,EAAEjiB,KAAKM,GAAK2hB,GACzCC,EAAgB,mBAALA,EAAkBA,EAAEliB,KAAKM,GAAK4hB,GAChCD,GAWXmJ,EAAY,IAAI,SAAS1lB,EAAImmB,GAC3B,IAAIlrB,EAAIirB,EAAUlmB,EAAImmB,GACtB,QAASlrB,GAAKA,EAAEsrB,OAAS,GAAKtrB,EAAE8kB,MAAQgG,KAU1CL,EAAY,IAAI,SAAS1lB,EAAImmB,GAC3B,IAAIlrB,EAAIirB,EAAUlmB,EAAImmB,GACtB,QAASlrB,GAAKA,EAAEurB,QAAU,GAAKvrB,EAAEuM,KAAOwe,KAU1CN,EAAmB,WAAI,SAAS1lB,EAAImmB,GAGlC,IAAIlrB,EAAIirB,EAAUlmB,EAAImmB,GACtB,QAASlrB,GAAKA,EAAEurB,QAAU,GAAKvrB,EAAEsrB,OAAS,GAAKtrB,EAAEuM,KAAOwe,KAAe/qB,EAAE8kB,MAAQgG,KAG5EL,GAxJ6BxrB,EAAgB,QAAGA,EAAgB,QAAI+T,IACtE8F,EAAS,MAAI9F,K,6BCRpB,sCAAIwY,EAA8B,WAAW,OAAOA,EAAS5rB,OAAO6N,QAAQ,SAASrN,GAAG,IAAI,IAAIlB,EAAEuE,EAAE,EAAExC,EAAEqC,UAAU3B,OAAO8B,EAAExC,EAAEwC,IAAI,IAAI,IAAI9C,KAAKzB,EAAEoE,UAAUG,GAAG7D,OAAOkB,UAAUC,eAAe1B,KAAKH,EAAEyB,KAAKP,EAAEO,GAAGzB,EAAEyB,IAAI,OAAOP,IAAIqJ,MAAMzF,KAAKV,YAAYmoB,EAAQ,WAAW,SAASrrB,EAAEA,EAAElB,EAAEuE,GAAG,IAAIxC,EAAE+C,KAAKA,KAAKsG,OAAOlK,EAAE4D,KAAK0nB,OAAOxsB,EAAE8E,KAAKiH,QAAQxH,EAAEO,KAAK2nB,QAAQ,QAAQ3nB,KAAK8J,SAAS,CAAC8d,SAAS,EAAEC,cAAc,EAAE9f,SAAS,EAAE+f,WAAU,EAAGC,aAAY,EAAGC,qBAAqB,IAAIC,kBAAkB,IAAIC,UAAU,IAAIC,QAAQ,IAAIC,OAAO,GAAGC,OAAO,IAAIroB,KAAKsoB,YAAY,KAAKtoB,KAAK8nB,WAAU,EAAG9nB,KAAKuoB,WAAU,EAAGvoB,KAAKkM,MAAM,GAAGlM,KAAK4nB,SAAS,EAAE5nB,KAAKwoB,QAAO,EAAGxoB,KAAKyoB,MAAM,SAASrsB,GAAGa,EAAEyrB,YAAYzrB,EAAEyrB,UAAUtsB,GAAG,IAAIlB,EAAEkB,EAAEa,EAAEyrB,UAAUzrB,EAAEoT,UAAUpT,EAAE8K,SAAS7M,EAAE+B,EAAE6qB,UAAU7qB,EAAEsrB,UAAUtrB,EAAE0rB,SAAS1rB,EAAE2qB,SAAS3qB,EAAE2rB,SAAS1tB,EAAE,EAAE+B,EAAE2qB,SAAS3qB,EAAEyqB,OAAOzqB,EAAE8K,UAAU9K,EAAE0rB,SAAS1rB,EAAE2rB,SAAS1tB,EAAE+B,EAAE2qB,SAAS3qB,EAAEyqB,OAAOzqB,EAAE2qB,SAAS3qB,EAAE8K,UAAU9K,EAAEsrB,UAAUtrB,EAAE0rB,SAAS1rB,EAAE2qB,UAAU3qB,EAAE2qB,SAAS3qB,EAAEyqB,SAASxsB,EAAE+B,EAAE8K,UAAU9K,EAAE0rB,SAAS1rB,EAAE2qB,UAAU3qB,EAAEyqB,OAAOzqB,EAAE2qB,WAAW1sB,EAAE+B,EAAE8K,UAAU9K,EAAEsrB,UAAUtrB,EAAE0rB,SAAS1rB,EAAE0rB,SAAS1rB,EAAEyqB,OAAOzqB,EAAEyqB,OAAOzqB,EAAE0rB,SAAS1rB,EAAE0rB,SAAS1rB,EAAE0rB,SAAS1rB,EAAEyqB,OAAOzqB,EAAEyqB,OAAOzqB,EAAE0rB,SAAS1rB,EAAE0rB,SAASxU,KAAKkB,MAAMpY,EAAE0rB,SAAS1rB,EAAE4rB,aAAa5rB,EAAE4rB,YAAY5rB,EAAE6rB,WAAW7rB,EAAE0rB,UAAUztB,EAAE+B,EAAE8K,SAAS9K,EAAE8rB,IAAIngB,sBAAsB3L,EAAEwrB,OAAO,OAAOxrB,EAAEqrB,YAAYrrB,EAAE+rB,OAAO/rB,EAAEqrB,aAAarrB,EAAEkL,UAAUlL,EAAEkL,YAAYnI,KAAKipB,aAAa,SAAS7sB,GAAG,IAAIlB,EAAEuE,EAAE9C,EAAE+V,EAAE1W,EAAEL,EAAES,EAAE,EAAE,IAAI,GAAG,GAAGlB,EAAEiZ,KAAKC,IAAIhY,GAAG8sB,QAAQjsB,EAAEgK,QAAQ4gB,eAAelrB,GAAG8C,GAAGvE,GAAG,IAAI0G,MAAM,MAAM,GAAG8Q,EAAEjT,EAAE9B,OAAO,EAAEV,EAAEgK,QAAQkhB,QAAQ1oB,EAAE,GAAG,GAAGxC,EAAEgK,QAAQ8gB,YAAY,CAAC/rB,EAAE,GAAG,IAAI,IAAIb,EAAE,EAAEmiB,EAAE3gB,EAAEgB,OAAOxC,EAAEmiB,IAAIniB,EAAE,IAAIA,GAAGA,EAAE,GAAG,IAAIa,EAAEiB,EAAEgK,QAAQihB,UAAUlsB,GAAGA,EAAEW,EAAE2gB,EAAEniB,EAAE,GAAGa,EAAEW,EAAEX,EAAE,OAAOiB,EAAEgK,QAAQkiB,UAAUlsB,EAAEgK,QAAQkiB,SAASxrB,SAAShB,EAAEA,EAAEmD,QAAQ,UAAS,SAAS1D,GAAG,OAAOa,EAAEgK,QAAQkiB,UAAU/sB,MAAKsW,EAAEA,EAAE5S,QAAQ,UAAS,SAAS1D,GAAG,OAAOa,EAAEgK,QAAQkiB,UAAU/sB,OAAMT,EAAEsB,EAAEgK,QAAQmhB,OAAOzrB,EAAE+V,EAAEzV,EAAEgK,QAAQohB,QAAQroB,KAAKopB,YAAY,SAAShtB,EAAElB,EAAEuE,EAAExC,GAAG,OAAOwC,GAAG,EAAE0U,KAAKkV,IAAI,GAAG,GAAGjtB,EAAEa,IAAI,KAAK,KAAK/B,GAAG8E,KAAKiH,QAAQugB,EAASA,EAAS,GAAGxnB,KAAK8J,UAAUrK,GAAGO,KAAKspB,aAAatpB,KAAKiH,QAAQqiB,aAAatpB,KAAKiH,QAAQqiB,aAAatpB,KAAKipB,aAAajpB,KAAK4oB,SAAS5oB,KAAKiH,QAAQ2hB,SAAS5oB,KAAKiH,QAAQ2hB,SAAS5oB,KAAKopB,YAAYppB,KAAK4nB,SAAS5nB,KAAKupB,cAAcvpB,KAAKiH,QAAQ2gB,UAAU5nB,KAAK2oB,SAAS3oB,KAAK4nB,SAAS5nB,KAAK0nB,OAAO1nB,KAAKupB,cAAcruB,GAAG8E,KAAKiH,QAAQ4gB,cAAc1T,KAAKsB,IAAIzV,KAAKiH,QAAQ4gB,eAAe7nB,KAAK6oB,YAAY1U,KAAKkV,IAAI,GAAGrpB,KAAKiH,QAAQ4gB,eAAe7nB,KAAKwpB,gBAAgBxpB,KAAKiH,QAAQihB,UAAUuB,OAAOzpB,KAAKiH,QAAQihB,WAAWloB,KAAK8nB,UAAU9nB,KAAKiH,QAAQ6gB,UAAU,KAAK9nB,KAAKiH,QAAQihB,YAAYloB,KAAKiH,QAAQ8gB,aAAY,GAAI/nB,KAAKe,GAAG,iBAAiB3E,EAAE8C,SAASwqB,eAAettB,GAAGA,EAAE4D,KAAKe,GAAGf,KAAK8oB,WAAW9oB,KAAK4nB,UAAU5nB,KAAKkM,MAAM,wCAAwC,OAAO9P,EAAEU,UAAU6sB,iCAAiC,WAAW,IAAIvtB,EAAE4D,KAAKsoB,YAAYtoB,KAAKsoB,YAAYtoB,KAAK0nB,OAAO1nB,KAAKuoB,UAAUvoB,KAAK4nB,SAASxrB,EAAE,IAAIlB,EAAEkB,EAAE4D,KAAK4nB,SAAS,GAAGzT,KAAKC,IAAIlZ,GAAG8E,KAAKiH,QAAQ+gB,qBAAqB,CAAChoB,KAAKsoB,YAAYlsB,EAAE,IAAIqD,EAAEO,KAAKuoB,UAAU,GAAG,EAAEvoB,KAAK0nB,OAAOtrB,EAAEqD,EAAEO,KAAKiH,QAAQghB,kBAAkBjoB,KAAK+H,SAAS/H,KAAK+H,SAAS,OAAO/H,KAAK0nB,OAAOtrB,EAAE4D,KAAKsoB,YAAY,KAAKtoB,KAAKsoB,YAAYtoB,KAAK8nB,WAAU,EAAG9nB,KAAK8nB,UAAU9nB,KAAKiH,QAAQ6gB,WAAW1rB,EAAEU,UAAU2K,MAAM,SAASrL,GAAG4D,KAAKkM,QAAQlM,KAAKmI,SAAS/L,EAAE4D,KAAK+H,SAAS,GAAG/H,KAAK2pB,mCAAmC3pB,KAAKwoB,QAAO,EAAGxoB,KAAK+oB,IAAIngB,sBAAsB5I,KAAKyoB,QAAQzoB,KAAK8oB,WAAW9oB,KAAK0nB,UAAUtrB,EAAEU,UAAU8sB,YAAY,WAAW5pB,KAAKwoB,QAAQxoB,KAAK0oB,UAAU,KAAK1oB,KAAK+H,SAAS/H,KAAKqQ,UAAUrQ,KAAK4nB,SAAS5nB,KAAK2oB,SAAS3oB,KAAK2pB,mCAAmC3pB,KAAK+oB,IAAIngB,sBAAsB5I,KAAKyoB,QAAQoB,qBAAqB7pB,KAAK+oB,KAAK/oB,KAAKwoB,QAAQxoB,KAAKwoB,QAAQpsB,EAAEU,UAAUgtB,MAAM,WAAWD,qBAAqB7pB,KAAK+oB,KAAK/oB,KAAKwoB,QAAO,EAAGxoB,KAAKwpB,gBAAgBxpB,KAAK4nB,SAAS5nB,KAAKupB,cAAcvpB,KAAKiH,QAAQ2gB,UAAU5nB,KAAK2oB,SAAS3oB,KAAK4nB,SAAS5nB,KAAK8oB,WAAW9oB,KAAK4nB,WAAWxrB,EAAEU,UAAUksB,OAAO,SAAS5sB,GAAGytB,qBAAqB7pB,KAAK+oB,KAAK/oB,KAAK0oB,UAAU,KAAK1oB,KAAK0nB,OAAO1nB,KAAKupB,cAAcntB,GAAG4D,KAAK0nB,SAAS1nB,KAAK2oB,WAAW3oB,KAAK4nB,SAAS5nB,KAAK2oB,SAAS3oB,KAAKsoB,aAAatoB,KAAKwpB,gBAAgBxpB,KAAK2pB,mCAAmC3pB,KAAK+oB,IAAIngB,sBAAsB5I,KAAKyoB,SAASrsB,EAAEU,UAAUgsB,WAAW,SAAS1sB,GAAG,IAAIlB,EAAE8E,KAAKspB,aAAaltB,GAAG,UAAU4D,KAAKe,GAAG2f,QAAQ1gB,KAAKe,GAAG5E,MAAMjB,EAAE,SAAS8E,KAAKe,GAAG2f,SAAS,UAAU1gB,KAAKe,GAAG2f,QAAQ1gB,KAAKe,GAAGgpB,YAAY7uB,EAAE8E,KAAKe,GAAGipB,UAAU9uB,GAAGkB,EAAEU,UAAUmtB,aAAa,SAAS7tB,GAAG,MAAM,iBAAiBA,IAAImkB,MAAMnkB,IAAIA,EAAEU,UAAUysB,cAAc,SAASntB,GAAG,IAAIlB,EAAEgvB,OAAO9tB,GAAG,OAAO4D,KAAKiqB,aAAa/uB,GAAGA,GAAG8E,KAAKkM,MAAM,yCAAyC9P,EAAE,OAAOA,EAAEU,UAAU0sB,cAAc,WAAWxpB,KAAK0oB,UAAU,KAAK1oB,KAAK+H,SAAS,IAAImiB,OAAOlqB,KAAKiH,QAAQc,UAAU/H,KAAKqQ,UAAUrQ,KAAK+H,UAAU3L,EAAr2I,I,gBCC9LnB,EAAOD,QAG/D,WAAe,aAEvB,IAAImvB,EAAO,CACPC,SAAU,yBACVC,MAAO,6CACPC,OAAQ,+BACRjJ,IAAK,0CACLkJ,IAAK,+CACLC,UAAW,oCACXC,UAAW,oCACXlV,IAAK,uCACLE,IAAK,uCACL3G,QAAS,qCAQb,SAAS4b,EAAK/uB,GACV,IAAIgvB,EAAarrB,UAEjB,OAAOU,KAAKF,QAAQ,iBAAiB,SAAUL,EAAGC,GAC9C,OAAOirB,EAAWjrB,MAI1B,SAASkrB,EAAiBC,GACtB,OAAOA,EAAMC,SAASzd,KAAK0d,KAAK9pB,iBAAiB,eAAiB4pB,EAAM7T,aAAa,QAAU,cAAcrZ,OAYjH,IAAIqtB,EAAgB,CAChBC,QAAS,aACTC,WAAY,aACZC,aAAc,cACdC,gBAAiB,aACjBC,aAAc,MACdC,eAAgB,aAKhBC,EAAqB,CAAC,WAAY,MAAO,MAAO,YAAa,YAAa,WAE1EC,EAAa,GAEbtlB,EAAI,SAAWzK,EAAMgwB,GACrBA,EAAUhwB,KAAOA,EACZgwB,EAAUzf,MAAKyf,EAAUzf,IAAMme,EAAK1uB,SACdyL,IAAvBukB,EAAUC,WAAwBD,EAAUC,SAAW,GAC3DF,EAAW/vB,GAAQgwB,GAkCvB,SAASE,EAASZ,EAAM1H,EAAQuI,GAE5B,IAAIve,EAAOrN,KA6CX,SAAS6rB,EAAqBC,EAAKxK,EAAQ7lB,EAAMU,GAC7C,IAAIsvB,EAAYD,EAAW/vB,GAC3B,GAAIgwB,IACAK,EAAI1qB,KAAKqqB,GACLtvB,GAAO,CACP,IAAI4vB,EAAc5vB,EAAMyF,MAAM,KAC9BmqB,EAAYllB,QAAQ,MACpBya,EAAO7lB,GAAQswB,GAgE3B,SAASC,EAAeC,GACpB,IAAIC,EAAS,GACTC,GAAQ,EACZ,IAAK,IAAIjxB,KAAK+wB,EAAMT,WAAY,CAC5B,IAAIC,EAAYQ,EAAMT,WAAWtwB,GAC7BomB,EAAS2K,EAAM3K,OAAOmK,EAAUhwB,MAAQwwB,EAAM3K,OAAOmK,EAAUhwB,MAAQ,GAE3E,GADA6lB,EAAO,GAAK2K,EAAMpB,MAAM1uB,OACnBsvB,EAAU/tB,GAAG+H,MAAMwmB,EAAMpB,MAAOvJ,GAAS,CAC1C6K,GAAQ,EACR,IAAIjgB,EAAQ+f,EAAMG,SAASX,EAAUhwB,OAASgwB,EAAUzf,IAExD,GADAkgB,EAAO9qB,KAAKspB,EAAKjlB,MAAMyG,EAAOoV,KACP,IAAnBmK,EAAUY,KACV,OAKZ,OADAJ,EAAMC,OAASA,EACRC,EA8BX,SAASG,EAAkBL,GACvB,GAAIA,EAAMM,cACN,OAAON,EAAMM,cAEjB,IAAIC,EAxPZ,SAAsBzrB,EAAI0rB,GACtB,MAAQ1rB,EAAKA,EAAG+F,iBAAmB/F,EAAGgU,UAAU2C,SAAS+U,KACzD,OAAO1rB,EAsPqB2rB,CAAaT,EAAMpB,MAAOxd,EAAKgW,OAAO4H,SAC1DG,EAAkB,KAClBuB,EAAmB,KAevB,OAbIvB,EADA/d,EAAKgW,OAAO4H,UAAY5d,EAAKgW,OAAO+H,gBAClBoB,EAEAA,EAAkBxjB,cAAcqE,EAAK+d,qBAGvDuB,EAAmBvB,EAAgBpiB,cAAc,uBAE7C2jB,EAAmBztB,SAAS0tB,cAAcvf,EAAKgW,OAAOgI,eACrC1pB,UAAYkrB,kBAAuBxf,EAAKgW,OAAOiI,eAChEF,EAAgBrR,YAAY4S,GAC5BA,EAAiBG,gBAAkBH,EAAiBzU,MAAM6U,UAG3Dd,EAAMM,cAAgB,CAACC,EAAmBG,GAGrD,SAASK,EAAWf,GAChB,IAAIM,EAAgBD,EAAkBL,GAClCO,EAAoBD,EAAc,GAClCI,EAAmBJ,EAAc,GAEjCC,IACAA,EAAkBzX,UAAUnR,OAAOyJ,EAAKgW,OAAO8H,cAC/CqB,EAAkBzX,UAAUzR,IAAI+J,EAAKgW,OAAO6H,aAE5CyB,IACAA,EAAiB3C,UAAYiC,EAAMC,OAAO5nB,KAAK,SAC/CqoB,EAAiBzU,MAAM6U,QAAUJ,EAAiBG,iBAAmB,IA+B7E,SAASG,EAAahB,GAClB,IAAIO,EAjBR,SAAsBP,GAClB,IAAIM,EAAgBD,EAAkBL,GAClCO,EAAoBD,EAAc,GAClCI,EAAmBJ,EAAc,GAUrC,OATIC,IAEAA,EAAkBzX,UAAUnR,OAAOyJ,EAAKgW,OAAO6H,YAC/CsB,EAAkBzX,UAAUnR,OAAOyJ,EAAKgW,OAAO8H,eAE/CwB,IACAA,EAAiB3C,UAAY,GAC7B2C,EAAiBzU,MAAM6U,QAAU,QAE9BR,EAIiBW,CAAajB,GAAO,GAC5CO,GAAqBA,EAAkBzX,UAAUzR,IAAI+J,EAAKgW,OAAO8H,cAkCrE,OArQA,SAAcJ,EAAM1H,EAAQuI,GAExBb,EAAKliB,aAAa,aAAc,QAEhCwE,EAAK0d,KAAOA,EACZ1d,EAAKgW,OAzEb,SAAqB8J,EAAMC,GACvB,IAAK,IAAIC,KAAQD,EACPC,KAAQF,IACVA,EAAKE,GAAQD,EAAKC,IAG1B,OAAOF,EAmEWG,CAAYjK,GAAU,GAAI2H,GACxC3d,EAAKue,QAAkB,IAATA,GACdve,EAAKkgB,OAAS9f,MAAM+f,KAAKzC,EAAK9pB,iBAxDvB,oEAwDmDiB,IAAI,SAAU2oB,GAEpE,IAAIiB,EAAM,GACNxK,EAAS,GACT8K,EAAW,GA0Bf,MAxBA,GAAG5uB,QAAQnC,KAAKwvB,EAAM4C,YAAY,SAAUJ,GACxC,GAAI,kBAAkBjO,KAAKiO,EAAK5xB,MAAO,CACnC,IAAIA,EAAO4xB,EAAK5xB,KAAKuf,OAAO,IAC5B,GAAIvf,EAAKiyB,SAAS,YAEd,YADAtB,EAAS3wB,EAAK8F,MAAM,EAAG9F,EAAKkC,OAAS,IAAM0vB,EAAKlxB,OAGvC,SAATV,IAAiBA,EAAO4xB,EAAKlxB,OACjC0vB,EAAqBC,EAAKxK,EAAQ7lB,EAAM4xB,EAAKlxB,YACrCovB,EAAmBrV,QAAQmX,EAAK5xB,MACxCowB,EAAqBC,EAAKxK,EAAQ+L,EAAK5xB,KAAM4xB,EAAKlxB,OAC7B,SAAdkxB,EAAK5xB,MACZowB,EAAqBC,EAAKxK,EAAQ+L,EAAKlxB,UAI/C2vB,EAAItnB,MAAK,SAAU/E,EAAGC,GAClB,OAAOA,EAAEgsB,SAAWjsB,EAAEisB,YAG1Bre,EAAKue,MAAQf,EAAMxjB,kBAAmB,CAAC,QAAS,YAAY6O,QAAQ2U,EAAM7T,aAAa,SAAqB,SAAV,QAAoB,SAAUtE,GAC5HrF,EAAKsgB,SAASjb,EAAEpM,SAClB5J,KAAK2Q,IAEAwd,EAAMC,SAAW,CAAED,MAAOA,EAAOW,WAAYM,EAAKxK,OAAQA,EAAQ8K,SAAUA,EAAU/e,KAAMA,IACrG3Q,KAAK2Q,IAxCX2Q,CAAK+M,EAAM1H,EAAQuI,GA6DnBve,EAAKsgB,SAAW,SAAU9C,EAAO+C,GAC7BA,EAAS/C,IAAoB,IAAX+C,IAA6B,IAAV/C,EACrC,IAAI0C,EAASlgB,EAAKkgB,QACJ,IAAV1C,IAA4B,IAAVA,IACdA,aAAiB7Z,YACjBuc,EAAS,CAAC1C,EAAMC,WACTD,aAAiBgD,UAAYhD,aAAkB5rB,OAAO6uB,GAAKrgB,QAAUod,aAAiBpd,SAC7F8f,EAAS9f,MAAM+f,KAAK3C,GAAO3oB,KAAI,SAAUnB,GACrC,OAAOA,EAAG+pB,cAKtB,IAAIqB,GAAQ,EAEZ,IAAK,IAAIjxB,KAAKqyB,EAAQ,CAClB,IAAItB,EAAQsB,EAAOryB,GACf8wB,EAAeC,IACd2B,GAAUX,EAAahB,IAExBE,GAAQ,GACPyB,GAAUZ,EAAWf,IAG9B,OAAOE,GAQX9e,EAAK0gB,UAAY,SAAUlD,GACvB,IAAKA,EAAO,CAER,IADA,IAAImD,EAAkB,GACb9yB,EAAI,EAAGA,EAAImS,EAAKkgB,OAAO5vB,OAAQzC,IAAK,CACzC,IAAI+wB,EAAQ5e,EAAKkgB,OAAOryB,GACpB+wB,EAAMC,OAAOvuB,QACbqwB,EAAgB5sB,KAAK,CAAEypB,MAAOoB,EAAMpB,MAAOqB,OAAQD,EAAMC,SAGjE,OAAO8B,EAEX,OAAOnD,EAAMltB,OAASktB,EAAM,GAAGC,SAASoB,OAASrB,EAAMC,SAASoB,QAuCpE7e,EAAK4gB,aAAe,SAAUC,EAAMxwB,EAAIsO,EAAK0f,EAAUW,GAC/C6B,aAAgBld,aAChBkd,EAAKpD,SAASU,WAAWpqB,KAAK,CAAE1D,GAAIA,EAAIsO,IAAKA,EAAK0f,SAAUA,EAAUW,KAAMA,IAC5E6B,EAAKpD,SAASU,WAAWhnB,MAAK,SAAU/E,EAAGC,GACvC,OAAOA,EAAEgsB,SAAWjsB,EAAEisB,aAG1Bzf,QAAQF,KAAK,6CAuDrBsB,EAAK8gB,SAAW,SAAUtD,EAAO3e,IAC7B2e,EAAQA,EAAMltB,OAASktB,EAAM,GAAKA,GAC5BC,SAASoB,OAAO9qB,KAAK8K,GAC3B8gB,EAAWnC,EAAMC,WA2BrBzd,EAAKyc,MAAQ,WACT,IAAK,IAAI5uB,KAAKmS,EAAKkgB,OACflgB,EAAKkgB,OAAOryB,GAAGqxB,cAAgB,KAEnC9e,MAAM+f,KAAKngB,EAAK0d,KAAK9pB,iBAAiB,oBAAuBiB,KAAI,SAAUgsB,GACvEA,EAAKtd,WAAWuJ,YAAY+T,MAEhCzgB,MAAM+f,KAAKngB,EAAK0d,KAAK9pB,iBAAiB,IAAMoM,EAAKgW,OAAO4H,UAAU/oB,KAAI,SAAUgsB,GAC5EA,EAAKnZ,UAAUnR,OAAOyJ,EAAKgW,OAAO8H,cAClC+C,EAAKnZ,UAAUnR,OAAOyJ,EAAKgW,OAAO6H,gBAO1C7d,EAAK+I,QAAU,WACX/I,EAAKyc,QACLzc,EAAKkgB,OAAO/vB,SAAQ,SAAUyuB,UACnBA,EAAMpB,MAAMC,YAEvBzd,EAAKkgB,OAAS,IAGlBlgB,EAAK+gB,gBAAkB,SAAU/K,GAC7B2H,EAAgB3H,GAGbhW,EAgBX,OA1TAnH,EAAE,OAAQ,CAAExI,GAAI,SAAYN,GACpB,OAAO,GACRsuB,SAAU,IACjBxlB,EAAE,WAAY,CAAExI,GAAI,SAAYN,GACxB,MAAqB,UAAd4C,KAAKoG,MAAkC,aAAdpG,KAAKoG,KAAsBwkB,EAAiB5qB,WAAgBkH,IAAR9J,GAA6B,KAARA,GAC1GsuB,SAAU,GAAIW,MAAM,IAC3BnmB,EAAE,QAAS,CAAExI,GAAI,SAAYN,GACrB,OAAQA,GAAO,6BAA6BgiB,KAAKhiB,MAEzD8I,EAAE,SAAU,CAAExI,GAAI,SAAYN,GACtB,OAAQA,IAAQmjB,MAAM3L,WAAWxX,KAClCsuB,SAAU,IACjBxlB,EAAE,UAAW,CAAExI,GAAI,SAAYN,GACvB,OAAOA,GAAO,QAAQgiB,KAAKhiB,MAEnC8I,EAAE,YAAa,CAAExI,GAAI,SAAYN,EAAKO,GAC9B,OAAQP,GAAOA,EAAIO,QAAU6P,SAAS7P,MAE9CuI,EAAE,YAAa,CAAExI,GAAI,SAAYN,EAAKO,GAC9B,OAAQP,GAAOA,EAAIO,QAAU6P,SAAS7P,MAE9CuI,EAAE,MAAO,CAAExI,GAAI,SAAYN,EAAK2jB,GACxB,OAAQ3jB,IAAsB,aAAd4C,KAAKoG,KAAsBwkB,EAAiB5qB,OAASwN,SAASuT,GAASnM,WAAWxX,IAAQwX,WAAWmM,OAE7H7a,EAAE,MAAO,CAAExI,GAAI,SAAYN,EAAK2jB,GACxB,OAAQ3jB,IAAsB,aAAd4C,KAAKoG,KAAsBwkB,EAAiB5qB,OAASwN,SAASuT,GAASnM,WAAWxX,IAAQwX,WAAWmM,OAE7H7a,EAAE,UAAW,CAAExI,GAAI,SAAYN,EAAK0R,GAC5B,IAAIxT,EAAIwT,EAAQxN,MAAM,IAAI+sB,OAAO,uBAAuB,OAAQjxB,GAAO,IAAIixB,OAAO/yB,EAAE,GAAIA,EAAE,IAAI8jB,KAAKhiB,MA0R3GuuB,EAASsC,aAAe,SAAUxyB,EAAMiC,EAAIsO,EAAK0f,EAAUW,GACvDnmB,EAAEzK,EAAM,CAAEiC,GAAIA,EAAIsO,IAAKA,EAAK0f,SAAUA,EAAUW,KAAMA,KAGnDV,EA5X0E2C,I,gBCDjFrzB,EAAOD,QAAU,EAAQ,K,6BCAzB,aASAkE,SAASmI,iBAAiB,mBAAoB,KAC5C,MAAM2Y,EAAYjhB,UAAUihB,UAE5B,GADW,SACJZ,KAAKY,GAAY,CACtB,MAAMuO,EAAUrvB,SAAS0tB,cAAc,QACvC2B,EAAQC,IAAM,aACdD,EAAQE,KAAO,gCACfvvB,SAASwvB,KAAK3U,YAAYwU,MAe9BrvB,SAASmI,iBAAiB,mBAAoB,KAC5C,IAACrL,KASE2yB,OAPEjqB,OACAkX,OAAO,CAACxgB,EAASwzB,KAChB,MAAM3zB,EAASe,EAAE4yB,GAAQzR,QAEzB,OADAliB,GAAUG,EAAQgG,KAAKnG,GAChBG,GACN,IACF8G,IAAIjH,KAA0B,IAAfA,EAAO4zB,KAAgB5zB,EAAO4zB,QAAU5zB,EAAO6zB,SAIrE5vB,SAAS6vB,KAAKha,UAAUnR,OAAO,Y,kCC5C/B,IAAI1B,EAAM,CACT,iBAAkB,GAClB,sBAAuB,GACvB,mBAAoB,GACpB,YAAa,GACb,gBAAiB,GACjB,aAAc,GACd,kBAAmB,GACnB,cAAe,GACf,qBAAsB,GACtB,0BAA2B,IAI5B,SAAS8sB,EAAeC,GACvB,IAAIxtB,EAAKytB,EAAsBD,GAC/B,OAAOn0B,EAAoB2G,GAE5B,SAASytB,EAAsBD,GAC9B,IAAIn0B,EAAoBa,EAAEuG,EAAK+sB,GAAM,CACpC,IAAIvc,EAAI,IAAIsT,MAAM,uBAAyBiJ,EAAM,KAEjD,MADAvc,EAAEqT,KAAO,mBACHrT,EAEP,OAAOxQ,EAAI+sB,GAEZD,EAAetqB,KAAO,WACrB,OAAO9I,OAAO8I,KAAKxC,IAEpB8sB,EAAexZ,QAAU0Z,EACzBj0B,EAAOD,QAAUg0B,EACjBA,EAAevtB,GAAK,I,6BC/BpB,iCAGA,MAAM/D,EAAK,CACTsgB,KAAM,KACJmR,IAAInR,KAAK,CACPN,MAAM,IAGRlN,WAAW2e,IAAIxQ,QAAS,OAIb,WACbkQ,IAAK,KAAM,EACXC,IAAKpxB,EAAGsgB,O,+CCfV,8BAEA,MAAMoR,EAAY5lB,EAAU,CACxBiO,MAAO,uBACPlM,OAAQ,oBACR8L,MAAO,oBAGLC,EAASpY,SAAS+B,iBAAiBmuB,EAAU3X,OAG7C/Z,GAFQwB,SAAS8J,cAAcomB,EAAU/X,OAEpC,CACP2G,KAAM,KACFtgB,EAAG2xB,sBAGPA,mBAAoB,KAChB,MAAM9jB,EAASrM,SAAS8J,cAAcomB,EAAU7jB,QA+BhDiQ,YAAYjQ,EA9BI,CACZnF,KAAM,WACN4D,QAAS,EACTC,QAAS,SACTF,QAAS,EACTG,IAAK,GACLgB,KAAM,CACF7F,OAAQ,EACR8R,MAAO,GAEXhN,SAAU,IAEVgB,YAAa,CACTmkB,KAAM,CACFtlB,QAAS,GAEbulB,KAAM,CACFvlB,QAAS,GAEbwlB,KAAM,CACFxlB,QAAS,GAEbylB,IAAK,CACDzlB,QAAS,GAEb0lB,IAAK,CACD1lB,QAAS,SAQd,WACX6kB,IAAK,IAAMvX,EAAO3Z,OAClBmxB,IAAKpxB,EAAGsgB,O,sDCtDZ,8BAEA,MAAMoR,EAAY5lB,EAAU,CAC1BiO,MAAO,oBACPlM,OAAQ,0BAGJ+L,EAASpY,SAAS+B,iBAAiBmuB,EAAU3X,OAE7C/Z,EAAK,CACTsgB,KAAM,KACJtgB,EAAGiyB,mBAGLA,gBAAiB,KACf,MAAMpkB,EAASrM,SAAS8J,cAAcomB,EAAU7jB,QAkBhDiQ,YAAYjQ,EAjBI,CACdnF,KAAM,WACN4D,QAAS,EACTC,QAAS,EACTkB,YAAa,CACXqkB,KAAM,CACJppB,KAAM,WACN4D,QAAS,EACTC,QAAS,EACTF,QAAS,GAEX0lB,IAAK,CACHrpB,KAAM,WACN4D,QAAS,QAQJ,WACb6kB,IAAK,IAAMvX,EAAO3Z,OAClBmxB,IAAKpxB,EAAGsgB,O,sDCvCV,qCAGA,MAAMoR,EAAY5lB,EAAU,CAC1BomB,KAAM,aACNC,WAAY,mBACZC,KAAM,yBACNC,KAAM,2BAGR,IAAIC,EAAc,EAClB,MACMC,EAAW/wB,SAAS8J,cAAcomB,EAAUQ,MAC5CM,EAAiBhxB,SAAS8J,cAAcomB,EAAUS,YAClDM,EAAqBjxB,SAAS8J,cAAcomB,EAAUU,MACtDM,EAAqBlxB,SAAS8J,cAAcomB,EAAUW,MAEtDryB,EAAK,CACTsgB,KAAM,KACJtgB,EAAG2yB,uBACH3yB,EAAG4yB,cAGLA,WAAY,KAGVtpB,YAAG,QAASooB,EAAUU,KAAM,KAC1BE,GAA4B,EAC5BtyB,EAAG2yB,yBAKLrpB,YAAG,QAASooB,EAAUW,KAAM,KAC1BC,EAAc,EACdtyB,EAAG2yB,uBACH1nB,YAASymB,EAAUQ,KAAM,QAI7BS,qBAAsB,KACpB,MAAME,EAAgBN,EAAShvB,iBAAiB,MAC1CuvB,EAAQD,EAAc5yB,OACtB8yB,EAhCU,EAgCIT,EAEhBQ,EAlCY,GAmCdD,EAAc/yB,QAAQ,CAACuD,EAAI0B,KACrBA,GAASguB,EACX1vB,EAAGgU,UAAUzR,IAAI,aAEjBvC,EAAGgU,UAAUnR,OAAO,eAK1B,MAAM8sB,EAAeT,EAAShvB,iBAAiB,sBAAsBtD,OACrEuyB,EAAelnB,cAAc,6BAA6BghB,UAAY0G,EAElEF,EA/CY,EAgDdN,EAAelnB,cAAc,6BAA6B+L,UAAUzR,IAAI,aAExE4sB,EAAelnB,cAAc,6BAA6B+L,UAAUnR,OAAO,aAGzEqsB,EAAShvB,iBAAiB,gBAAgBtD,QAAU,EACtDwyB,EAAmBpb,UAAUzR,IAAI,aAEjC6sB,EAAmBpb,UAAUnR,OAAO,aAGlCosB,GAAe,EACjBI,EAAmBrb,UAAUzR,IAAI,aAEjC8sB,EAAmBrb,UAAUnR,OAAO,eAK3B,WACbirB,IAAK,IAAM3vB,SAAS6vB,KAAKha,UAAU2C,SAAS,aAE5CoX,IAAKpxB,EAAGsgB,O,sDCjFV,4DAKA,MAAMoR,EAAY5lB,EAAU,CAC1BmnB,QAAS,iBACT9a,QAAS,iBAGL+a,EAAW1xB,SAAS+B,iBAAiBmuB,EAAUuB,SAE/CE,EAAQ,CACZD,SAAU,IAGNlzB,EAAK,CACTsgB,KAAM,KACJ4S,EAASpzB,QAAQuD,IACf,MAAMgnB,EAAchnB,EAAG4e,QAAQoI,YACzBF,EAAgB9mB,EAAG4e,QAAQkI,cAC3B7S,EAAMjU,EAAG4e,QAAQ3K,IAEjBvC,EAAO,CACXsV,eAAgBA,GAGdF,IACApV,EAAKoV,cAAgBA,GAGzB,MAAM8I,EAAU,IAAIlJ,IAAQ1mB,EAAIiU,EAAKvC,GACrCke,EAAQG,IAAM/vB,EAEd8vB,EAAMD,SAASxvB,KAAKuvB,KAKtBhU,YAAY3R,YAAStN,EAAGsrB,OAAQ,KAAO,MAGzCsH,WAAY,KACVrxB,OAAOoI,iBAAiB,SAAU2D,YAAStN,EAAGsrB,OAAQ,OAGxDA,OAAQ,KACN6H,EAAMD,SAASpzB,QAAQ,CAACmzB,EAASluB,KAC3BsuB,IAAMC,IAAIL,EAAQG,OACpBH,EAAQ7G,QACRtZ,WAAWmgB,EAAQlpB,QAAS,KAC5B+I,WAAW,KAAM,UAOV,WACbqe,IAAK,IAAM+B,EAASjzB,OACpBmxB,IAAKpxB,EAAGsgB,O,sDC5DV,sHAKA,MAAMoR,EAAY5lB,EAAU,CAC1BuhB,KAAM,OACNkG,WAAY,eACZC,SAAU,aACVC,WAAY,qBACZC,WAAY,qBACZC,iBAAkB,qBAClBpF,MAAO,QACPqF,QAAS,aACTC,QAAS,eAGEC,EAAiB,CAC5BvG,QAAS,QACTC,WAAY,YACZC,aAAc,cACdC,gBAAiB,QACjBC,aAAc,MACdC,eAAgB,aAGZ5tB,EAAK,CACTsgB,KAAM,KAEJ,MAAM+M,EAAO7rB,SAAS8J,cAAcomB,EAAUrE,MAC9CrtB,EAAG+zB,UAAU1G,GAEb/jB,YAAG,SAAU,mBAAoB0L,IAC/BA,EAAEpM,OAAOyO,UAAUnR,OAAO,sBAI9B6tB,UAAW1G,IACTrtB,EAAGg0B,iBACHh0B,EAAGi0B,gBAAgB5G,IAGrB4G,gBAAiB5G,IACf,MAAMD,EAAW,IAAIa,IAASZ,EAAMyG,GAGpCxqB,YAAG,QAAD,UAAaooB,EAAUxlB,QAAQ,cAA/B,UAAsD8I,IACtD,MACMxG,EADQwG,EAAEpM,OAAOsrB,QAAQ,UACX5oB,cAAc,qBAE9BkD,GACFA,EAAMtI,WAIVmnB,EAAK1jB,iBAAiB,SAAUqL,IAC9B,GAAIA,EAAEpM,OAAOurB,eACX,OAAO,EAGT,MAAM1F,EAAQrB,EAAS6C,WAEvB,IAAKxB,EAAO,CACVzZ,EAAEkE,iBACF,MAAMkb,EAAa/G,EAAK/hB,cAAc,oBAMtC,OAJI8oB,GACFnpB,YAASmpB,EAAY,GAAI,IAAMA,EAAW9oB,cAAc,SAASF,UAG5D,EAIT,GAAIiiB,EAAKhW,UAAU2C,SAAS0X,EAAU8B,UAAW,CAC/Cxe,EAAEkE,iBAEF,MAAMmb,EAAehH,EAAK/hB,cAAcomB,EAAUxlB,QAAQ,qBAC1DmoB,EAAa7Z,MAAM6U,QAAU,OAE7B,MAAMiF,EAAejH,EAAK/hB,cAAc,iBACxCgpB,EAAapjB,UAAW,EACxBojB,EAAajd,UAAUzR,IAAI8rB,EAAUmC,SACrC,MAAMU,EAAW,IAAIj0B,SAAS+sB,GAE9BmH,IAAM,CACJpP,OAAQ,OACRzB,IAAK0J,EAAKoH,OACV5uB,KAAM0uB,EACNzN,aAAc,OACdtC,QAAS,CACP,eAAgB,uBAChB,mBAAoB,iBACpBkQ,OAAQ,0CAEVtiB,QAAS,IACTuiB,iBAAkB,SAEjB3M,KAAK4M,IACJ,GAAIA,EAAK/uB,KAAKgvB,QAAS,CACrBxH,EAAKf,UAAL,4CAAsDsI,EAAK/uB,KAAKuiB,QAAhE,UAEA,IAAIzF,EAAS0K,EAAK6G,QAAQxC,EAAU+B,YACpC9Q,EACEA,GACA0K,EACFpiB,YAAS0X,EAAQ,KACjB2R,EAAapjB,UAAW,EACxBojB,EAAajd,UAAUnR,OAAOwrB,EAAUmC,cAKxC,GAHAQ,EAAa/H,UAAYsI,EAAK/uB,KAAKuiB,QACnCiM,EAAa7Z,MAAM6U,QAAU,QAEzBuF,EAAKE,aACP,IAAK,MAAMvG,KAASqG,EAAKE,aAAc,CACrC,MAAMC,EAAa1H,EAAK/hB,cAAL,iBAA6BijB,EAA7B,OACfwG,GACFA,EAAW1d,UAAUzR,IAAI,sBAMlCovB,MAAMC,IACLZ,EAAa/H,UAAY2I,EACzBZ,EAAa7Z,MAAM6U,QAAU,QACzB4F,EAAIpO,UAGNtY,QAAQ2mB,IAAID,EAAIpO,SAAShhB,MACzB0I,QAAQ2mB,IAAID,EAAIpO,SAAS/U,QACzBvD,QAAQ2mB,IAAID,EAAIpO,SAASrC,UAChByQ,EAAIjP,QAIbzX,QAAQ2mB,IAAID,EAAIjP,SAGhBzX,QAAQ2mB,IAAI,QAASD,EAAI7M,SAE3B7Z,QAAQ2mB,IAAID,EAAItP,UAItB,OAAO8I,KAIXuF,eAAgB,KACd1qB,YAAG,QAAD,UAAaooB,EAAUxlB,QAAQ,cAA/B,UAAsD8I,GAAKhV,EAAGm1B,YAAYngB,EAAEpM,QAAS,CACrFa,SAAS,EACTmM,SAAS,IAEXtM,YAAG,OAAD,UAAYooB,EAAUxlB,QAAQ,cAA9B,UAAqD8I,GAAKhV,EAAGo1B,WAAWpgB,EAAEpM,QAAS,CACnFa,SAAS,EACTmM,SAAS,KAIbuf,YAAa5G,IACX,MAAM8G,EAAQ9G,EAAMrb,WAAWA,WAAW5H,cAAc,SACpD+pB,GACFA,EAAMhe,UAAUzR,IAAI8rB,EAAUkC,UAIlCwB,WAAY7G,IACV,MAAM8G,EAAQ9G,EAAMrb,WAAWA,WAAW5H,cAAc,SACpD+pB,GAAyB,KAAhB9G,EAAM9vB,OACjB42B,EAAMhe,UAAUnR,OAAOwrB,EAAUkC,WAKxB,WACbzC,IAAK,IAAM3vB,SAAS6vB,KAAKha,UAAU2C,SAAS,cAAgBxY,SAAS6vB,KAAKha,UAAU2C,SAAS,aAC7FoX,IAAKpxB,EAAGsgB,O,sDC/KV,IAAIkD,EAAQ,EAAQ,GAChBxkB,EAAO,EAAQ,IACfs2B,EAAQ,EAAQ,IAChB1F,EAAc,EAAQ,IAS1B,SAAS2F,EAAejI,GACtB,IAAI9pB,EAAU,IAAI8xB,EAAMhI,GACpB5e,EAAW1P,EAAKs2B,EAAMl2B,UAAU4mB,QAASxiB,GAQ7C,OALAggB,EAAM1hB,OAAO4M,EAAU4mB,EAAMl2B,UAAWoE,GAGxCggB,EAAM1hB,OAAO4M,EAAUlL,GAEhBkL,EAIT,IAAI8lB,EAAQe,EAtBG,EAAQ,KAyBvBf,EAAMc,MAAQA,EAGdd,EAAM11B,OAAS,SAAgB02B,GAC7B,OAAOD,EAAe3F,EAAY4E,EAAMpoB,SAAUopB,KAIpDhB,EAAM1L,OAAS,EAAQ,IACvB0L,EAAMiB,YAAc,EAAQ,IAC5BjB,EAAMkB,SAAW,EAAQ,IAGzBlB,EAAMjU,IAAM,SAAaoV,GACvB,OAAO/P,QAAQrF,IAAIoV,IAErBnB,EAAMoB,OAAS,EAAQ,IAEvBr4B,EAAOD,QAAUk3B,EAGjBj3B,EAAOD,QAAQmiB,QAAU+U,G,6BClDzB,IAAIhR,EAAQ,EAAQ,GAChB8B,EAAW,EAAQ,IACnBuQ,EAAqB,EAAQ,IAC7BC,EAAkB,EAAQ,IAC1BlG,EAAc,EAAQ,IAO1B,SAAS0F,EAAME,GACblzB,KAAK8J,SAAWopB,EAChBlzB,KAAKyzB,aAAe,CAClB/P,QAAS,IAAI6P,EACbhP,SAAU,IAAIgP,GASlBP,EAAMl2B,UAAU4mB,QAAU,SAAiBL,GAGnB,iBAAXA,GACTA,EAAS/jB,UAAU,IAAM,IAClB+hB,IAAM/hB,UAAU,GAEvB+jB,EAASA,GAAU,IAGrBA,EAASiK,EAAYttB,KAAK8J,SAAUuZ,IAGzBP,OACTO,EAAOP,OAASO,EAAOP,OAAOqC,cACrBnlB,KAAK8J,SAASgZ,OACvBO,EAAOP,OAAS9iB,KAAK8J,SAASgZ,OAAOqC,cAErC9B,EAAOP,OAAS,MAIlB,IAAI4Q,EAAQ,CAACF,OAAiBtsB,GAC1Bue,EAAUnC,QAAQ9N,QAAQ6N,GAU9B,IARArjB,KAAKyzB,aAAa/P,QAAQlmB,SAAQ,SAAoCm2B,GACpED,EAAM7sB,QAAQ8sB,EAAYC,UAAWD,EAAYE,aAGnD7zB,KAAKyzB,aAAalP,SAAS/mB,SAAQ,SAAkCm2B,GACnED,EAAMtyB,KAAKuyB,EAAYC,UAAWD,EAAYE,aAGzCH,EAAM/1B,QACX8nB,EAAUA,EAAQC,KAAKgO,EAAMI,QAASJ,EAAMI,SAG9C,OAAOrO,GAGTuN,EAAMl2B,UAAUi3B,OAAS,SAAgB1Q,GAEvC,OADAA,EAASiK,EAAYttB,KAAK8J,SAAUuZ,GAC7BL,EAASK,EAAOhC,IAAKgC,EAAO/B,OAAQ+B,EAAO9B,kBAAkBzhB,QAAQ,MAAO,KAIrFohB,EAAM1jB,QAAQ,CAAC,SAAU,MAAO,OAAQ,YAAY,SAA6BslB,GAE/EkQ,EAAMl2B,UAAUgmB,GAAU,SAASzB,EAAKgC,GACtC,OAAOrjB,KAAK0jB,QAAQxC,EAAM/hB,MAAMkkB,GAAU,GAAI,CAC5CP,OAAQA,EACRzB,IAAKA,SAKXH,EAAM1jB,QAAQ,CAAC,OAAQ,MAAO,UAAU,SAA+BslB,GAErEkQ,EAAMl2B,UAAUgmB,GAAU,SAASzB,EAAK9d,EAAM8f,GAC5C,OAAOrjB,KAAK0jB,QAAQxC,EAAM/hB,MAAMkkB,GAAU,GAAI,CAC5CP,OAAQA,EACRzB,IAAKA,EACL9d,KAAMA,SAKZtI,EAAOD,QAAUg4B,G,6BC3FjB,IAAI9R,EAAQ,EAAQ,GAEpB,SAASqS,IACPvzB,KAAKg0B,SAAW,GAWlBT,EAAmBz2B,UAAUm3B,IAAM,SAAaL,EAAWC,GAKzD,OAJA7zB,KAAKg0B,SAAS5yB,KAAK,CACjBwyB,UAAWA,EACXC,SAAUA,IAEL7zB,KAAKg0B,SAASr2B,OAAS,GAQhC41B,EAAmBz2B,UAAUo3B,MAAQ,SAAezyB,GAC9CzB,KAAKg0B,SAASvyB,KAChBzB,KAAKg0B,SAASvyB,GAAM,OAYxB8xB,EAAmBz2B,UAAUU,QAAU,SAAiBE,GACtDwjB,EAAM1jB,QAAQwC,KAAKg0B,UAAU,SAAwB1W,GACzC,OAANA,GACF5f,EAAG4f,OAKTriB,EAAOD,QAAUu4B,G,6BCjDjB,IAAIrS,EAAQ,EAAQ,GAChBiT,EAAgB,EAAQ,IACxBf,EAAW,EAAQ,IACnBtpB,EAAW,EAAQ,IAKvB,SAASsqB,EAA6B/Q,GAChCA,EAAOmC,aACTnC,EAAOmC,YAAY6O,mBAUvBp5B,EAAOD,QAAU,SAAyBqoB,GA6BxC,OA5BA+Q,EAA6B/Q,GAG7BA,EAAOnB,QAAUmB,EAAOnB,SAAW,GAGnCmB,EAAO9f,KAAO4wB,EACZ9Q,EAAO9f,KACP8f,EAAOnB,QACPmB,EAAOf,kBAITe,EAAOnB,QAAUhB,EAAM/hB,MACrBkkB,EAAOnB,QAAQW,QAAU,GACzBQ,EAAOnB,QAAQmB,EAAOP,SAAW,GACjCO,EAAOnB,SAGThB,EAAM1jB,QACJ,CAAC,SAAU,MAAO,OAAQ,OAAQ,MAAO,QAAS,WAClD,SAA2BslB,UAClBO,EAAOnB,QAAQY,OAIZO,EAAOlB,SAAWrY,EAASqY,SAE1BkB,GAAQqC,MAAK,SAA6BnB,GAUvD,OATA6P,EAA6B/Q,GAG7BkB,EAAShhB,KAAO4wB,EACd5P,EAAShhB,KACTghB,EAASrC,QACTmB,EAAOd,mBAGFgC,KACN,SAA4B+P,GAc7B,OAbKlB,EAASkB,KACZF,EAA6B/Q,GAGzBiR,GAAUA,EAAO/P,WACnB+P,EAAO/P,SAAShhB,KAAO4wB,EACrBG,EAAO/P,SAAShhB,KAChB+wB,EAAO/P,SAASrC,QAChBmB,EAAOd,qBAKNe,QAAQC,OAAO+Q,Q,6BC1E1B,IAAIpT,EAAQ,EAAQ,GAUpBjmB,EAAOD,QAAU,SAAuBuI,EAAM2e,EAAS4J,GAMrD,OAJA5K,EAAM1jB,QAAQsuB,GAAK,SAAmBpuB,GACpC6F,EAAO7F,EAAG6F,EAAM2e,MAGX3e,I,cCjBT,IAOIgxB,EACAC,EARAnS,EAAUpnB,EAAOD,QAAU,GAU/B,SAASy5B,IACL,MAAM,IAAIzO,MAAM,mCAEpB,SAAS0O,IACL,MAAM,IAAI1O,MAAM,qCAsBpB,SAAS2O,EAAWC,GAChB,GAAIL,IAAqB/jB,WAErB,OAAOA,WAAWokB,EAAK,GAG3B,IAAKL,IAAqBE,IAAqBF,IAAqB/jB,WAEhE,OADA+jB,EAAmB/jB,WACZA,WAAWokB,EAAK,GAE3B,IAEI,OAAOL,EAAiBK,EAAK,GAC/B,MAAMliB,GACJ,IAEI,OAAO6hB,EAAiBl5B,KAAK,KAAMu5B,EAAK,GAC1C,MAAMliB,GAEJ,OAAO6hB,EAAiBl5B,KAAK2E,KAAM40B,EAAK,MAvCnD,WACG,IAEQL,EADsB,mBAAf/jB,WACYA,WAEAikB,EAEzB,MAAO/hB,GACL6hB,EAAmBE,EAEvB,IAEQD,EADwB,mBAAjBlkB,aACcA,aAEAokB,EAE3B,MAAOhiB,GACL8hB,EAAqBE,GAjB7B,GAwEA,IAEIG,EAFAxuB,EAAQ,GACRyuB,GAAW,EAEXC,GAAc,EAElB,SAASC,IACAF,GAAaD,IAGlBC,GAAW,EACPD,EAAal3B,OACb0I,EAAQwuB,EAAalyB,OAAO0D,GAE5B0uB,GAAc,EAEd1uB,EAAM1I,QACNs3B,KAIR,SAASA,IACL,IAAIH,EAAJ,CAGA,IAAIhlB,EAAU6kB,EAAWK,GACzBF,GAAW,EAGX,IADA,IAAI7xB,EAAMoD,EAAM1I,OACVsF,GAAK,CAGP,IAFA4xB,EAAexuB,EACfA,EAAQ,KACC0uB,EAAa9xB,GACd4xB,GACAA,EAAaE,GAAYjG,MAGjCiG,GAAc,EACd9xB,EAAMoD,EAAM1I,OAEhBk3B,EAAe,KACfC,GAAW,EAnEf,SAAyBI,GACrB,GAAIV,IAAuBlkB,aAEvB,OAAOA,aAAa4kB,GAGxB,IAAKV,IAAuBE,IAAwBF,IAAuBlkB,aAEvE,OADAkkB,EAAqBlkB,aACdA,aAAa4kB,GAExB,IAEWV,EAAmBU,GAC5B,MAAOxiB,GACL,IAEI,OAAO8hB,EAAmBn5B,KAAK,KAAM65B,GACvC,MAAOxiB,GAGL,OAAO8hB,EAAmBn5B,KAAK2E,KAAMk1B,KAgD7CC,CAAgBrlB,IAiBpB,SAASslB,EAAKR,EAAKS,GACfr1B,KAAK40B,IAAMA,EACX50B,KAAKq1B,MAAQA,EAYjB,SAASC,KA5BTjT,EAAQkT,SAAW,SAAUX,GACzB,IAAI7kB,EAAO,IAAItC,MAAMnO,UAAU3B,OAAS,GACxC,GAAI2B,UAAU3B,OAAS,EACnB,IAAK,IAAIzC,EAAI,EAAGA,EAAIoE,UAAU3B,OAAQzC,IAClC6U,EAAK7U,EAAI,GAAKoE,UAAUpE,GAGhCmL,EAAMjF,KAAK,IAAIg0B,EAAKR,EAAK7kB,IACJ,IAAjB1J,EAAM1I,QAAiBm3B,GACvBH,EAAWM,IASnBG,EAAKt4B,UAAUgyB,IAAM,WACjB9uB,KAAK40B,IAAInvB,MAAM,KAAMzF,KAAKq1B,QAE9BhT,EAAQmT,MAAQ,UAChBnT,EAAQoT,SAAU,EAClBpT,EAAQqT,IAAM,GACdrT,EAAQsT,KAAO,GACftT,EAAQsF,QAAU,GAClBtF,EAAQuT,SAAW,GAInBvT,EAAQrb,GAAKsuB,EACbjT,EAAQwT,YAAcP,EACtBjT,EAAQ3E,KAAO4X,EACfjT,EAAQtM,IAAMuf,EACdjT,EAAQyT,eAAiBR,EACzBjT,EAAQ0T,mBAAqBT,EAC7BjT,EAAQ9T,KAAO+mB,EACfjT,EAAQ2T,gBAAkBV,EAC1BjT,EAAQ4T,oBAAsBX,EAE9BjT,EAAQnR,UAAY,SAAUzV,GAAQ,MAAO,IAE7C4mB,EAAQ6T,QAAU,SAAUz6B,GACxB,MAAM,IAAIuqB,MAAM,qCAGpB3D,EAAQ8T,IAAM,WAAc,MAAO,KACnC9T,EAAQ+T,MAAQ,SAAUC,GACtB,MAAM,IAAIrQ,MAAM,mCAEpB3D,EAAQiU,MAAQ,WAAa,OAAO,I,6BCrLpC,IAAIpV,EAAQ,EAAQ,GAEpBjmB,EAAOD,QAAU,SAA6BknB,EAASqU,GACrDrV,EAAM1jB,QAAQ0kB,GAAS,SAAuB/lB,EAAOV,GAC/CA,IAAS86B,GAAkB96B,EAAKuG,gBAAkBu0B,EAAev0B,gBACnEkgB,EAAQqU,GAAkBp6B,SACnB+lB,EAAQzmB,S,6BCNrB,IAAI2nB,EAAc,EAAQ,IAS1BnoB,EAAOD,QAAU,SAAgBwa,EAAS+N,EAAQgB,GAChD,IAAI3B,EAAiB2B,EAASlB,OAAOT,gBAChCA,GAAkBA,EAAe2B,EAAS/U,QAC7CgG,EAAQ+O,GAERhB,EAAOH,EACL,mCAAqCmB,EAAS/U,OAC9C+U,EAASlB,OACT,KACAkB,EAASb,QACTa,M,6BCTNtpB,EAAOD,QAAU,SAAsBkR,EAAOmX,EAAQ0C,EAAMrC,EAASa,GA4BnE,OA3BArY,EAAMmX,OAASA,EACX0C,IACF7Z,EAAM6Z,KAAOA,GAGf7Z,EAAMwX,QAAUA,EAChBxX,EAAMqY,SAAWA,EACjBrY,EAAMsqB,cAAe,EAErBtqB,EAAMuqB,OAAS,WACb,MAAO,CAEL3Q,QAAS9lB,KAAK8lB,QACdrqB,KAAMuE,KAAKvE,KAEXi7B,YAAa12B,KAAK02B,YAClBpM,OAAQtqB,KAAKsqB,OAEbqM,SAAU32B,KAAK22B,SACfC,WAAY52B,KAAK42B,WACjBC,aAAc72B,KAAK62B,aACnBC,MAAO92B,KAAK82B,MAEZzT,OAAQrjB,KAAKqjB,OACb0C,KAAM/lB,KAAK+lB,OAGR7Z,I,6BCtCT,IAAI6qB,EAAgB,EAAQ,IACxBC,EAAc,EAAQ,IAW1B/7B,EAAOD,QAAU,SAAuBipB,EAASgT,GAC/C,OAAIhT,IAAY8S,EAAcE,GACrBD,EAAY/S,EAASgT,GAEvBA,I,6BCVTh8B,EAAOD,QAAU,SAAuBqmB,GAItC,MAAO,gCAAgCjC,KAAKiC,K,6BCH9CpmB,EAAOD,QAAU,SAAqBipB,EAASiT,GAC7C,OAAOA,EACHjT,EAAQnkB,QAAQ,OAAQ,IAAM,IAAMo3B,EAAYp3B,QAAQ,OAAQ,IAChEmkB,I,6BCVN,IAAI/C,EAAQ,EAAQ,GAIhBiW,EAAoB,CACtB,MAAO,gBAAiB,iBAAkB,eAAgB,OAC1D,UAAW,OAAQ,OAAQ,oBAAqB,sBAChD,gBAAiB,WAAY,eAAgB,sBAC7C,UAAW,cAAe,cAgB5Bl8B,EAAOD,QAAU,SAAsBknB,GACrC,IACIzlB,EACAW,EACAlC,EAHAk8B,EAAS,GAKb,OAAKlV,GAELhB,EAAM1jB,QAAQ0kB,EAAQtgB,MAAM,OAAO,SAAgBy1B,GAKjD,GAJAn8B,EAAIm8B,EAAKnhB,QAAQ,KACjBzZ,EAAMykB,EAAMthB,KAAKy3B,EAAKrc,OAAO,EAAG9f,IAAIiqB,cACpC/nB,EAAM8jB,EAAMthB,KAAKy3B,EAAKrc,OAAO9f,EAAI,IAE7BuB,EAAK,CACP,GAAI26B,EAAO36B,IAAQ06B,EAAkBjhB,QAAQzZ,IAAQ,EACnD,OAGA26B,EAAO36B,GADG,eAARA,GACa26B,EAAO36B,GAAO26B,EAAO36B,GAAO,IAAIkG,OAAO,CAACvF,IAEzCg6B,EAAO36B,GAAO26B,EAAO36B,GAAO,KAAOW,EAAMA,MAKtDg6B,GAnBgBA,I,6BC9BzB,IAAIlW,EAAQ,EAAQ,GAEpBjmB,EAAOD,QACLkmB,EAAMpiB,uBAIJ,WACE,IAEIw4B,EAFAC,EAAO,kBAAkBnY,KAAKrgB,UAAUihB,WACxCwX,EAAiBt4B,SAAS0tB,cAAc,KAS5C,SAAS6K,EAAWpW,GAClB,IAAIoN,EAAOpN,EAWX,OATIkW,IAEFC,EAAe3uB,aAAa,OAAQ4lB,GACpCA,EAAO+I,EAAe/I,MAGxB+I,EAAe3uB,aAAa,OAAQ4lB,GAG7B,CACLA,KAAM+I,EAAe/I,KACrBiJ,SAAUF,EAAeE,SAAWF,EAAeE,SAAS53B,QAAQ,KAAM,IAAM,GAChF63B,KAAMH,EAAeG,KACrBC,OAAQJ,EAAeI,OAASJ,EAAeI,OAAO93B,QAAQ,MAAO,IAAM,GAC3E+3B,KAAML,EAAeK,KAAOL,EAAeK,KAAK/3B,QAAQ,KAAM,IAAM,GACpEg4B,SAAUN,EAAeM,SACzBC,KAAMP,EAAeO,KACrBC,SAAiD,MAAtCR,EAAeQ,SAASC,OAAO,GACxCT,EAAeQ,SACf,IAAMR,EAAeQ,UAY3B,OARAV,EAAYG,EAAWx4B,OAAOmJ,SAASqmB,MAQhC,SAAyByJ,GAC9B,IAAId,EAAUlW,EAAM7iB,SAAS65B,GAAeT,EAAWS,GAAcA,EACrE,OAAQd,EAAOM,WAAaJ,EAAUI,UAClCN,EAAOO,OAASL,EAAUK,MAhDlC,GAsDS,WACL,OAAO,I,6BC9Df,IAAIzW,EAAQ,EAAQ,GAEpBjmB,EAAOD,QACLkmB,EAAMpiB,uBAIK,CACLq5B,MAAO,SAAe18B,EAAMU,EAAOi8B,EAASC,EAAMC,EAAQC,GACxD,IAAIC,EAAS,GACbA,EAAOp3B,KAAK3F,EAAO,IAAM2lB,mBAAmBjlB,IAExC+kB,EAAM5iB,SAAS85B,IACjBI,EAAOp3B,KAAK,WAAa,IAAIsO,KAAK0oB,GAASK,eAGzCvX,EAAM7iB,SAASg6B,IACjBG,EAAOp3B,KAAK,QAAUi3B,GAGpBnX,EAAM7iB,SAASi6B,IACjBE,EAAOp3B,KAAK,UAAYk3B,IAGX,IAAXC,GACFC,EAAOp3B,KAAK,UAGdlC,SAASs5B,OAASA,EAAOl0B,KAAK,OAGhC4gB,KAAM,SAAczpB,GAClB,IAAI6F,EAAQpC,SAASs5B,OAAOl3B,MAAM,IAAI+sB,OAAO,aAAe5yB,EAAO,cACnE,OAAQ6F,EAAQo3B,mBAAmBp3B,EAAM,IAAM,MAGjDsC,OAAQ,SAAgBnI,GACtBuE,KAAKm4B,MAAM18B,EAAM,GAAIiU,KAAKD,MAAQ,SAO/B,CACL0oB,MAAO,aACPjT,KAAM,WAAkB,OAAO,MAC/BthB,OAAQ,e,6BC/ChB,IAAI4iB,EAAS,EAAQ,IAQrB,SAAS2M,EAAYwF,GACnB,GAAwB,mBAAbA,EACT,MAAM,IAAIrsB,UAAU,gCAGtB,IAAIssB,EACJ54B,KAAKylB,QAAU,IAAInC,SAAQ,SAAyB9N,GAClDojB,EAAiBpjB,KAGnB,IAAIgD,EAAQxY,KACZ24B,GAAS,SAAgB7S,GACnBtN,EAAM8b,SAKV9b,EAAM8b,OAAS,IAAI9N,EAAOV,GAC1B8S,EAAepgB,EAAM8b,YAOzBnB,EAAYr2B,UAAUu3B,iBAAmB,WACvC,GAAIr0B,KAAKs0B,OACP,MAAMt0B,KAAKs0B,QAQfnB,EAAY3tB,OAAS,WACnB,IAAIiL,EAIJ,MAAO,CACL+H,MAJU,IAAI2a,GAAY,SAAkB53B,GAC5CkV,EAASlV,KAITkV,OAAQA,IAIZxV,EAAOD,QAAUm4B,G,6BClCjBl4B,EAAOD,QAAU,SAAgBmN,GAC/B,OAAO,SAAc0wB,GACnB,OAAO1wB,EAAS1C,MAAM,KAAMozB,M,6BCxBhC,8BAEA,MAAMzJ,EAAY5lB,EAAU,CAC1BsvB,KAAM,cACNC,QAAS,kBACTC,UAAW,eACX7vB,OAAQ,YAGJzL,EAAK,CACTsgB,KAAM,KACJtgB,EAAG4yB,cAGLA,WAAY,KACVtpB,YAAG,QAASooB,EAAU2J,QAASr7B,EAAGu7B,aAClCjyB,YAAG,QAASooB,EAAU4J,UAAWt7B,EAAGu7B,aACpC/5B,SAASmI,iBACP,QACAqL,IACEhV,EAAGw7B,aAAaxmB,IAElB,CACEvL,SAAS,EACTmM,SAAS,KAKf2lB,YAAavmB,IACXA,EAAEkE,iBAEQ1X,SAAS8J,cAAcomB,EAAU0J,MAEvC/jB,UAAUokB,OAAO,WAGvBD,aAAcxmB,IACZ,IAAI0mB,EAAMl6B,SAAS8J,cAAcomB,EAAUjmB,QACvClK,OAAOoJ,QAAU,GACnB+wB,EAAIrkB,UAAUzR,IAAI,SAElB81B,EAAIrkB,UAAUnR,OAAO,WAKZ,WACbirB,IAAK,KAAM,EACXC,IAAKpxB,EAAGsgB,O,sDCjDV,qCAGA,MAAMoR,EAAY5lB,EAAU,CAC1B6vB,OAAQ,gBACRC,WAAY,sBAGR57B,EAAK,CACTsgB,KAAM,KACJtgB,EAAG4yB,aACH5yB,EAAG67B,YACH77B,EAAG87B,oBAGLlJ,WAAY,KACVtpB,YAAG,QAASooB,EAAUiK,OAAQ37B,EAAGu7B,cAGnCA,YAAavmB,IACXA,EAAEkE,iBAEF,MAAMwiB,EAAM1mB,EAAEpM,OAAOsrB,QAAQxC,EAAUiK,QAEvC,IAAII,EAAiB,KAErB,GAAIL,EAAIzZ,QAAQ0Z,OACdI,EAAiBL,EAAIzZ,QAAQ0Z,WACxB,IAAoB,MAAhBD,EAAI1Y,QAGb,OAFA+Y,EAAiBL,EAAIvB,KAKvB,MAAMvxB,EAASpH,SAAS8J,cAAcywB,GAElCnzB,GACFqC,YAASrC,IAIbizB,UAAW,KACT,GAAIt6B,OAAOmJ,SAASyvB,KAAM,CACxB,MAAMvxB,EAASpH,SAAS8J,cAAc/J,OAAOmJ,SAASyvB,MAElDvxB,GACFqC,YAASrC,KAMfkzB,iBAAkB,KAChB,MAAMlzB,EAASpH,SAAS8J,cAAcomB,EAAUkK,YAE5ChzB,GACFkK,WAAW,KACT7H,YAASrC,IACR,OAKM,WACbuoB,IAAK,KAAM,EACXC,IAAKpxB,EAAGsgB,O,sECjEV,0CAIA,MAAMoR,EAAY5lB,EAAU,CAIxBkwB,aAAc,2BACdC,cAAe,wBACfC,QAAS,qBAGPtiB,EAASpY,SAAS+B,iBAAiBmuB,EAAUsK,cAE7CG,EAAoB36B,SAAS8J,cAAcomB,EAAUuK,eAErDj8B,EAAK,CACPsgB,KAAM,KACFtgB,EAAGo8B,0BAGPA,uBAAwB,KA2BJ,IAAItrB,IAAMqrB,EA1BV,CACZzzB,KAAM,WACN4D,QAAS,EACTC,QAAS,EACTF,QAAS,EACTI,SAAU,MAiCNuD,MAAM,CAAE6F,UAAOiD,gBAIhB,WACXqY,IAAK,IAAMvX,EAAO3Z,OAClBmxB,IAAKpxB,EAAGsgB,O","file":"app.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 = \"/mnt/caddy3-volume/istream/deploy-cache/public/_resources/themes/app/dist\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 22);\n","'use strict';\n\nvar bind = require('./helpers/bind');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||\n navigator.product === 'NativeScript' ||\n navigator.product === 'NS')) {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Function equal to merge with the difference being that no reference\n * to original objects is kept.\n *\n * @see merge\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction deepMerge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = deepMerge(result[key], val);\n } else if (typeof val === 'object') {\n result[key] = deepMerge({}, val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n deepMerge: deepMerge,\n extend: extend,\n trim: trim\n};\n","// Public: Create a new SelectorSet.\nexport default function SelectorSet() {\n // Construct new SelectorSet if called as a function.\n if (!(this instanceof SelectorSet)) {\n return new SelectorSet();\n }\n\n // Public: Number of selectors added to the set\n this.size = 0;\n\n // Internal: Incrementing ID counter\n this.uid = 0;\n\n // Internal: Array of String selectors in the set\n this.selectors = [];\n\n // Internal: Map of selector ids to objects\n this.selectorObjects = {};\n\n // Internal: All Object index String names mapping to Index objects.\n this.indexes = Object.create(this.indexes);\n\n // Internal: Used Object index String names mapping to Index objects.\n this.activeIndexes = [];\n}\n\n// Detect prefixed Element#matches function.\nvar docElem = window.document.documentElement;\nvar matches =\n docElem.matches ||\n docElem.webkitMatchesSelector ||\n docElem.mozMatchesSelector ||\n docElem.oMatchesSelector ||\n docElem.msMatchesSelector;\n\n// Public: Check if element matches selector.\n//\n// Maybe overridden with custom Element.matches function.\n//\n// el - An Element\n// selector - String CSS selector\n//\n// Returns true or false.\nSelectorSet.prototype.matchesSelector = function(el, selector) {\n return matches.call(el, selector);\n};\n\n// Public: Find all elements in the context that match the selector.\n//\n// Maybe overridden with custom querySelectorAll function.\n//\n// selectors - String CSS selectors.\n// context - Element context\n//\n// Returns non-live list of Elements.\nSelectorSet.prototype.querySelectorAll = function(selectors, context) {\n return context.querySelectorAll(selectors);\n};\n\n// Public: Array of indexes.\n//\n// name - Unique String name\n// selector - Function that takes a String selector and returns a String key\n// or undefined if it can't be used by the index.\n// element - Function that takes an Element and returns an Array of String\n// keys that point to indexed values.\n//\nSelectorSet.prototype.indexes = [];\n\n// Index by element id\nvar idRe = /^#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/g;\nSelectorSet.prototype.indexes.push({\n name: 'ID',\n selector: function matchIdSelector(sel) {\n var m;\n if ((m = sel.match(idRe))) {\n return m[0].slice(1);\n }\n },\n element: function getElementId(el) {\n if (el.id) {\n return [el.id];\n }\n }\n});\n\n// Index by all of its class names\nvar classRe = /^\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/g;\nSelectorSet.prototype.indexes.push({\n name: 'CLASS',\n selector: function matchClassSelector(sel) {\n var m;\n if ((m = sel.match(classRe))) {\n return m[0].slice(1);\n }\n },\n element: function getElementClassNames(el) {\n var className = el.className;\n if (className) {\n if (typeof className === 'string') {\n return className.split(/\\s/);\n } else if (typeof className === 'object' && 'baseVal' in className) {\n // className is a SVGAnimatedString\n // global SVGAnimatedString is not an exposed global in Opera 12\n return className.baseVal.split(/\\s/);\n }\n }\n }\n});\n\n// Index by tag/node name: `DIV`, `FORM`, `A`\nvar tagRe = /^((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/g;\nSelectorSet.prototype.indexes.push({\n name: 'TAG',\n selector: function matchTagSelector(sel) {\n var m;\n if ((m = sel.match(tagRe))) {\n return m[0].toUpperCase();\n }\n },\n element: function getElementTagName(el) {\n return [el.nodeName.toUpperCase()];\n }\n});\n\n// Default index just contains a single array of elements.\nSelectorSet.prototype.indexes['default'] = {\n name: 'UNIVERSAL',\n selector: function() {\n return true;\n },\n element: function() {\n return [true];\n }\n};\n\n// Use ES Maps when supported\nvar Map;\nif (typeof window.Map === 'function') {\n Map = window.Map;\n} else {\n Map = (function() {\n function Map() {\n this.map = {};\n }\n Map.prototype.get = function(key) {\n return this.map[key + ' '];\n };\n Map.prototype.set = function(key, value) {\n this.map[key + ' '] = value;\n };\n return Map;\n })();\n}\n\n// Regexps adopted from Sizzle\n// https://github.com/jquery/sizzle/blob/1.7/sizzle.js\n//\nvar chunker = /((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g;\n\n// Internal: Get indexes for selector.\n//\n// selector - String CSS selector\n//\n// Returns Array of {index, key}.\nfunction parseSelectorIndexes(allIndexes, selector) {\n allIndexes = allIndexes.slice(0).concat(allIndexes['default']);\n\n var allIndexesLen = allIndexes.length,\n i,\n j,\n m,\n dup,\n rest = selector,\n key,\n index,\n indexes = [];\n\n do {\n chunker.exec('');\n if ((m = chunker.exec(rest))) {\n rest = m[3];\n if (m[2] || !rest) {\n for (i = 0; i < allIndexesLen; i++) {\n index = allIndexes[i];\n if ((key = index.selector(m[1]))) {\n j = indexes.length;\n dup = false;\n while (j--) {\n if (indexes[j].index === index && indexes[j].key === key) {\n dup = true;\n break;\n }\n }\n if (!dup) {\n indexes.push({ index: index, key: key });\n }\n break;\n }\n }\n }\n }\n } while (m);\n\n return indexes;\n}\n\n// Internal: Find first item in Array that is a prototype of `proto`.\n//\n// ary - Array of objects\n// proto - Prototype of expected item in `ary`\n//\n// Returns object from `ary` if found. Otherwise returns undefined.\nfunction findByPrototype(ary, proto) {\n var i, len, item;\n for (i = 0, len = ary.length; i < len; i++) {\n item = ary[i];\n if (proto.isPrototypeOf(item)) {\n return item;\n }\n }\n}\n\n// Public: Log when added selector falls under the default index.\n//\n// This API should not be considered stable. May change between\n// minor versions.\n//\n// obj - {selector, data} Object\n//\n// SelectorSet.prototype.logDefaultIndexUsed = function(obj) {\n// console.warn(obj.selector, \"could not be indexed\");\n// };\n//\n// Returns nothing.\nSelectorSet.prototype.logDefaultIndexUsed = function() {};\n\n// Public: Add selector to set.\n//\n// selector - String CSS selector\n// data - Optional data Object (default: undefined)\n//\n// Returns nothing.\nSelectorSet.prototype.add = function(selector, data) {\n var obj,\n i,\n indexProto,\n key,\n index,\n objs,\n selectorIndexes,\n selectorIndex,\n indexes = this.activeIndexes,\n selectors = this.selectors,\n selectorObjects = this.selectorObjects;\n\n if (typeof selector !== 'string') {\n return;\n }\n\n obj = {\n id: this.uid++,\n selector: selector,\n data: data\n };\n selectorObjects[obj.id] = obj;\n\n selectorIndexes = parseSelectorIndexes(this.indexes, selector);\n for (i = 0; i < selectorIndexes.length; i++) {\n selectorIndex = selectorIndexes[i];\n key = selectorIndex.key;\n indexProto = selectorIndex.index;\n\n index = findByPrototype(indexes, indexProto);\n if (!index) {\n index = Object.create(indexProto);\n index.map = new Map();\n indexes.push(index);\n }\n\n if (indexProto === this.indexes['default']) {\n this.logDefaultIndexUsed(obj);\n }\n objs = index.map.get(key);\n if (!objs) {\n objs = [];\n index.map.set(key, objs);\n }\n objs.push(obj);\n }\n\n this.size++;\n selectors.push(selector);\n};\n\n// Public: Remove selector from set.\n//\n// selector - String CSS selector\n// data - Optional data Object (default: undefined)\n//\n// Returns nothing.\nSelectorSet.prototype.remove = function(selector, data) {\n if (typeof selector !== 'string') {\n return;\n }\n\n var selectorIndexes,\n selectorIndex,\n i,\n j,\n k,\n selIndex,\n objs,\n obj,\n indexes = this.activeIndexes,\n selectors = (this.selectors = []),\n selectorObjects = this.selectorObjects,\n removedIds = {},\n removeAll = arguments.length === 1;\n\n selectorIndexes = parseSelectorIndexes(this.indexes, selector);\n for (i = 0; i < selectorIndexes.length; i++) {\n selectorIndex = selectorIndexes[i];\n\n j = indexes.length;\n while (j--) {\n selIndex = indexes[j];\n if (selectorIndex.index.isPrototypeOf(selIndex)) {\n objs = selIndex.map.get(selectorIndex.key);\n if (objs) {\n k = objs.length;\n while (k--) {\n obj = objs[k];\n if (obj.selector === selector && (removeAll || obj.data === data)) {\n objs.splice(k, 1);\n removedIds[obj.id] = true;\n }\n }\n }\n break;\n }\n }\n }\n\n for (i in removedIds) {\n delete selectorObjects[i];\n this.size--;\n }\n\n for (i in selectorObjects) {\n selectors.push(selectorObjects[i].selector);\n }\n};\n\n// Sort by id property handler.\n//\n// a - Selector obj.\n// b - Selector obj.\n//\n// Returns Number.\nfunction sortById(a, b) {\n return a.id - b.id;\n}\n\n// Public: Find all matching decendants of the context element.\n//\n// context - An Element\n//\n// Returns Array of {selector, data, elements} matches.\nSelectorSet.prototype.queryAll = function(context) {\n if (!this.selectors.length) {\n return [];\n }\n\n var matches = {},\n results = [];\n var els = this.querySelectorAll(this.selectors.join(', '), context);\n\n var i, j, len, len2, el, m, match, obj;\n for (i = 0, len = els.length; i < len; i++) {\n el = els[i];\n m = this.matches(el);\n for (j = 0, len2 = m.length; j < len2; j++) {\n obj = m[j];\n if (!matches[obj.id]) {\n match = {\n id: obj.id,\n selector: obj.selector,\n data: obj.data,\n elements: []\n };\n matches[obj.id] = match;\n results.push(match);\n } else {\n match = matches[obj.id];\n }\n match.elements.push(el);\n }\n }\n\n return results.sort(sortById);\n};\n\n// Public: Match element against all selectors in set.\n//\n// el - An Element\n//\n// Returns Array of {selector, data} matches.\nSelectorSet.prototype.matches = function(el) {\n if (!el) {\n return [];\n }\n\n var i, j, k, len, len2, len3, index, keys, objs, obj, id;\n var indexes = this.activeIndexes,\n matchedIds = {},\n matches = [];\n\n for (i = 0, len = indexes.length; i < len; i++) {\n index = indexes[i];\n keys = index.element(el);\n if (keys) {\n for (j = 0, len2 = keys.length; j < len2; j++) {\n if ((objs = index.map.get(keys[j]))) {\n for (k = 0, len3 = objs.length; k < len3; k++) {\n obj = objs[k];\n id = obj.id;\n if (!matchedIds[id] && this.matchesSelector(el, obj.selector)) {\n matchedIds[id] = true;\n matches.push(obj);\n }\n }\n }\n }\n }\n }\n\n return matches.sort(sortById);\n};\n","import SelectorSet from 'selector-set';\n\nvar bubbleEvents = {};\nvar captureEvents = {};\nvar propagationStopped = new WeakMap();\nvar immediatePropagationStopped = new WeakMap();\nvar currentTargets = new WeakMap();\nvar currentTargetDesc = Object.getOwnPropertyDescriptor(Event.prototype, 'currentTarget');\n\nfunction before(subject, verb, fn) {\n var source = subject[verb];\n\n subject[verb] = function () {\n fn.apply(subject, arguments);\n return source.apply(subject, arguments);\n };\n\n return subject;\n}\n\nfunction matches(selectors, target, reverse) {\n var queue = [];\n var node = target;\n\n do {\n if (node.nodeType !== 1) break;\n\n var _matches = selectors.matches(node);\n\n if (_matches.length) {\n var matched = {\n node: node,\n observers: _matches\n };\n\n if (reverse) {\n queue.unshift(matched);\n } else {\n queue.push(matched);\n }\n }\n } while (node = node.parentElement);\n\n return queue;\n}\n\nfunction trackPropagation() {\n propagationStopped.set(this, true);\n}\n\nfunction trackImmediate() {\n propagationStopped.set(this, true);\n immediatePropagationStopped.set(this, true);\n}\n\nfunction getCurrentTarget() {\n return currentTargets.get(this) || null;\n}\n\nfunction defineCurrentTarget(event, getter) {\n if (!currentTargetDesc) return;\n Object.defineProperty(event, 'currentTarget', {\n configurable: true,\n enumerable: true,\n get: getter || currentTargetDesc.get\n });\n}\n\nfunction canDispatch(event) {\n try {\n event.eventPhase;\n return true;\n } catch (_) {\n return false;\n }\n}\n\nfunction dispatch(event) {\n if (!canDispatch(event)) return;\n var events = event.eventPhase === 1 ? captureEvents : bubbleEvents;\n var selectors = events[event.type];\n if (!selectors) return;\n var queue = matches(selectors, event.target, event.eventPhase === 1);\n if (!queue.length) return;\n before(event, 'stopPropagation', trackPropagation);\n before(event, 'stopImmediatePropagation', trackImmediate);\n defineCurrentTarget(event, getCurrentTarget);\n\n for (var i = 0, len1 = queue.length; i < len1; i++) {\n if (propagationStopped.get(event)) break;\n var matched = queue[i];\n currentTargets.set(event, matched.node);\n\n for (var j = 0, len2 = matched.observers.length; j < len2; j++) {\n if (immediatePropagationStopped.get(event)) break;\n matched.observers[j].data.call(matched.node, event);\n }\n }\n\n currentTargets[\"delete\"](event);\n defineCurrentTarget(event);\n}\n\nfunction on(name, selector, fn) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var capture = options.capture ? true : false;\n var events = capture ? captureEvents : bubbleEvents;\n var selectors = events[name];\n\n if (!selectors) {\n selectors = new SelectorSet();\n events[name] = selectors;\n document.addEventListener(name, dispatch, capture);\n }\n\n selectors.add(selector, fn);\n}\nfunction off(name, selector, fn) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var capture = options.capture ? true : false;\n var events = capture ? captureEvents : bubbleEvents;\n var selectors = events[name];\n if (!selectors) return;\n selectors.remove(selector, fn);\n if (selectors.size) return;\n delete events[name];\n document.removeEventListener(name, dispatch, capture);\n}\nfunction fire(target, name, detail) {\n return target.dispatchEvent(new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: detail\n }));\n}\n\nexport { fire, off, on };\n","// Robert Penner's easeInOutQuad\n\n// find the rest of his easing functions here: http://robertpenner.com/easing/\n// find them exported for ES6 consumption here: https://github.com/jaxgeller/ez.js\n\nvar easeInOutQuad = function easeInOutQuad(t, b, c, d) {\n t /= d / 2;\n if (t < 1) return c / 2 * t * t + b;\n t--;\n return -c / 2 * (t * (t - 2) - 1) + b;\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar jumper = function jumper() {\n // private variable cache\n // no variables are created during a jump, preventing memory leaks\n\n var element = void 0; // element to scroll to (node)\n\n var start = void 0; // where scroll starts (px)\n var stop = void 0; // where scroll stops (px)\n\n var offset = void 0; // adjustment from the stop position (px)\n var easing = void 0; // easing function (function)\n var a11y = void 0; // accessibility support flag (boolean)\n\n var distance = void 0; // distance of scroll (px)\n var duration = void 0; // scroll duration (ms)\n\n var timeStart = void 0; // time scroll started (ms)\n var timeElapsed = void 0; // time spent scrolling thus far (ms)\n\n var next = void 0; // next scroll position (px)\n\n var callback = void 0; // to call when done scrolling (function)\n\n // scroll position helper\n\n function location() {\n return window.scrollY || window.pageYOffset;\n }\n\n // element offset helper\n\n function top(element) {\n return element.getBoundingClientRect().top + start;\n }\n\n // rAF loop helper\n\n function loop(timeCurrent) {\n // store time scroll started, if not started already\n if (!timeStart) {\n timeStart = timeCurrent;\n }\n\n // determine time spent scrolling so far\n timeElapsed = timeCurrent - timeStart;\n\n // calculate next scroll position\n next = easing(timeElapsed, start, distance, duration);\n\n // scroll to it\n window.scrollTo(0, next);\n\n // check progress\n timeElapsed < duration ? window.requestAnimationFrame(loop) // continue scroll loop\n : done(); // scrolling is done\n }\n\n // scroll finished helper\n\n function done() {\n // account for rAF time rounding inaccuracies\n window.scrollTo(0, start + distance);\n\n // if scrolling to an element, and accessibility is enabled\n if (element && a11y) {\n // add tabindex indicating programmatic focus\n element.setAttribute('tabindex', '-1');\n\n // focus the element\n element.focus();\n }\n\n // if it exists, fire the callback\n if (typeof callback === 'function') {\n callback();\n }\n\n // reset time for next jump\n timeStart = false;\n }\n\n // API\n\n function jump(target) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n // resolve options, or use defaults\n duration = options.duration || 1000;\n offset = options.offset || 0;\n callback = options.callback; // \"undefined\" is a suitable default, and won't be called\n easing = options.easing || easeInOutQuad;\n a11y = options.a11y || false;\n\n // cache starting position\n start = location();\n\n // resolve target\n switch (typeof target === 'undefined' ? 'undefined' : _typeof(target)) {\n // scroll from current position\n case 'number':\n element = undefined; // no element to scroll to\n a11y = false; // make sure accessibility is off\n stop = start + target;\n break;\n\n // scroll to element (node)\n // bounding rect is relative to the viewport\n case 'object':\n element = target;\n stop = top(element);\n break;\n\n // scroll to element (selector)\n // bounding rect is relative to the viewport\n case 'string':\n element = document.querySelector(target);\n stop = top(element);\n break;\n }\n\n // resolve scroll distance, accounting for offset\n distance = stop - start + offset;\n\n // resolve duration\n switch (_typeof(options.duration)) {\n // number in ms\n case 'number':\n duration = options.duration;\n break;\n\n // function passed the distance of the scroll\n case 'function':\n duration = options.duration(distance);\n break;\n }\n\n // start the loop\n window.requestAnimationFrame(loop);\n }\n\n // expose only the jump method\n return jump;\n};\n\n// export singleton\n\nvar singleton = jumper();\n\nexport default singleton;\n","import jump from 'jump.js';\n\nconst getStuckHeaderHeight = () => {\n const header = document.querySelector('.header');\n if (header) {\n return header.offsetHeight + 2;\n }\n};\n\n// Special cases for certain elements\nconst getElementOffset = target => {\n // eslint-disable-line no-unused-vars\n return 0;\n};\n\nconst scrollTo = (target, additionalOffset = 0, callback) => {\n const headerHeight = getStuckHeaderHeight();\n // const headerOffset = Math.floor(headerHeight + headerHeight / 3) * -1;\n const headerOffset = getStuckHeaderHeight() * -1;\n const elementOffset = getElementOffset(target);\n const offset = headerOffset - elementOffset - additionalOffset;\n\n jump(target, { duration: 500, offset, callback });\n};\n\nexport default scrollTo;\n","const Selectors = function(selectors = {}) {\n return Object.assign(\n {\n asId(selectorKey) {\n return `#${this[selectorKey]}`;\n },\n asClass(selectorKey) {\n return `.${this[selectorKey]}`;\n },\n asString(selectorKey) {\n return selectorKey.replace(/^(#|\\.)/, '');\n },\n },\n selectors\n );\n};\n\nexport default Selectors;\n","/*!\n * Glide.js v3.4.1\n * (c) 2013-2019 Jędrzej Chałubek (http://jedrzejchalubek.com/)\n * Released under the MIT License.\n */\n\nvar defaults = {\n /**\n * Type of the movement.\n *\n * Available types:\n * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n *\n * @type {String}\n */\n type: 'slider',\n\n /**\n * Start at specific slide number defined with zero-based index.\n *\n * @type {Number}\n */\n startAt: 0,\n\n /**\n * A number of slides visible on the single viewport.\n *\n * @type {Number}\n */\n perView: 1,\n\n /**\n * Focus currently active slide at a specified position in the track.\n *\n * Available inputs:\n * `center` - Current slide will be always focused at the center of a track.\n * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n *\n * @type {String|Number}\n */\n focusAt: 0,\n\n /**\n * A size of the gap added between slides.\n *\n * @type {Number}\n */\n gap: 10,\n\n /**\n * Change slides after a specified interval. Use `false` for turning off autoplay.\n *\n * @type {Number|Boolean}\n */\n autoplay: false,\n\n /**\n * Stop autoplay on mouseover event.\n *\n * @type {Boolean}\n */\n hoverpause: true,\n\n /**\n * Allow for changing slides with left and right keyboard arrows.\n *\n * @type {Boolean}\n */\n keyboard: true,\n\n /**\n * Stop running `perView` number of slides from the end. Use this\n * option if you don't want to have an empty space after\n * a slider. Works only with `slider` type and a\n * non-centered `focusAt` setting.\n *\n * @type {Boolean}\n */\n bound: false,\n\n /**\n * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n *\n * @type {Number|Boolean}\n */\n swipeThreshold: 80,\n\n /**\n * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n *\n * @type {Number|Boolean}\n */\n dragThreshold: 120,\n\n /**\n * A maximum number of slides to which movement will be made on swiping or dragging. Use `false` for unlimited.\n *\n * @type {Number|Boolean}\n */\n perTouch: false,\n\n /**\n * Moving distance ratio of the slides on a swiping and dragging.\n *\n * @type {Number}\n */\n touchRatio: 0.5,\n\n /**\n * Angle required to activate slides moving on swiping or dragging.\n *\n * @type {Number}\n */\n touchAngle: 45,\n\n /**\n * Duration of the animation in milliseconds.\n *\n * @type {Number}\n */\n animationDuration: 400,\n\n /**\n * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n *\n * @type {Boolean}\n */\n rewind: true,\n\n /**\n * Duration of the rewinding animation of the `slider` type in milliseconds.\n *\n * @type {Number}\n */\n rewindDuration: 800,\n\n /**\n * Easing function for the animation.\n *\n * @type {String}\n */\n animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n /**\n * Throttle costly events at most once per every wait milliseconds.\n *\n * @type {Number}\n */\n throttle: 10,\n\n /**\n * Moving direction mode.\n *\n * Available inputs:\n * - 'ltr' - left to right movement,\n * - 'rtl' - right to left movement.\n *\n * @type {String}\n */\n direction: 'ltr',\n\n /**\n * The distance value of the next and previous viewports which\n * have to peek in the current view. Accepts number and\n * pixels as a string. Left and right peeking can be\n * set up separately with a directions object.\n *\n * For example:\n * `100` - Peek 100px on the both sides.\n * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n *\n * @type {Number|String|Object}\n */\n peek: 0,\n\n /**\n * Collection of options applied at specified media breakpoints.\n * For example: display two slides per view under 800px.\n * `{\n * '800px': {\n * perView: 2\n * }\n * }`\n */\n breakpoints: {},\n\n /**\n * Collection of internally used HTML classes.\n *\n * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n * @type {Object}\n */\n classes: {\n direction: {\n ltr: 'glide--ltr',\n rtl: 'glide--rtl'\n },\n slider: 'glide--slider',\n carousel: 'glide--carousel',\n swipeable: 'glide--swipeable',\n dragging: 'glide--dragging',\n cloneSlide: 'glide__slide--clone',\n activeNav: 'glide__bullet--active',\n activeSlide: 'glide__slide--active',\n disabledArrow: 'glide__arrow--disabled'\n }\n};\n\n/**\n * Outputs warning message to the bowser console.\n *\n * @param {String} msg\n * @return {Void}\n */\nfunction warn(msg) {\n console.error(\"[Glide warn]: \" + msg);\n}\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar 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\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toInt(value) {\n return parseInt(value);\n}\n\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toFloat(value) {\n return parseFloat(value);\n}\n\n/**\n * Indicates whether the specified value is a string.\n *\n * @param {*} value\n * @return {Boolean}\n */\nfunction isString(value) {\n return typeof value === 'string';\n}\n\n/**\n * Indicates whether the specified value is an object.\n *\n * @param {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\nfunction isObject(value) {\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\n return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n\n/**\n * Indicates whether the specified value is a number.\n *\n * @param {*} value\n * @return {Boolean}\n */\nfunction isNumber(value) {\n return typeof value === 'number';\n}\n\n/**\n * Indicates whether the specified value is a function.\n *\n * @param {*} value\n * @return {Boolean}\n */\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param {*} value\n * @return {Boolean}\n */\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n\n/**\n * Indicates whether the specified value is an array.\n *\n * @param {*} value\n * @return {Boolean}\n */\nfunction isArray(value) {\n return value.constructor === Array;\n}\n\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\nfunction mount(glide, extensions, events) {\n var components = {};\n\n for (var name in extensions) {\n if (isFunction(extensions[name])) {\n components[name] = extensions[name](glide, components, events);\n } else {\n warn('Extension must be a function');\n }\n }\n\n for (var _name in components) {\n if (isFunction(components[_name].mount)) {\n components[_name].mount();\n }\n }\n\n return components;\n}\n\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param {Object} obj Object where property has to be defined.\n * @param {String} prop Name of the defined property.\n * @param {Object} definition Get and set definitions for the property.\n * @return {Void}\n */\nfunction define(obj, prop, definition) {\n Object.defineProperty(obj, prop, definition);\n}\n\n/**\n * Sorts aphabetically object keys.\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction sortKeys(obj) {\n return Object.keys(obj).sort().reduce(function (r, k) {\n r[k] = obj[k];\n\n return r[k], r;\n }, {});\n}\n\n/**\n * Merges passed settings object with default options.\n *\n * @param {Object} defaults\n * @param {Object} settings\n * @return {Object}\n */\nfunction mergeOptions(defaults, settings) {\n var options = _extends({}, defaults, settings);\n\n // `Object.assign` do not deeply merge objects, so we\n // have to do it manually for every nested object\n // in options. Although it does not look smart,\n // it's smaller and faster than some fancy\n // merging deep-merge algorithm script.\n if (settings.hasOwnProperty('classes')) {\n options.classes = _extends({}, defaults.classes, settings.classes);\n\n if (settings.classes.hasOwnProperty('direction')) {\n options.classes.direction = _extends({}, defaults.classes.direction, settings.classes.direction);\n }\n }\n\n if (settings.hasOwnProperty('breakpoints')) {\n options.breakpoints = _extends({}, defaults.breakpoints, settings.breakpoints);\n }\n\n return options;\n}\n\nvar EventsBus = function () {\n /**\n * Construct a EventBus instance.\n *\n * @param {Object} events\n */\n function EventsBus() {\n var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, EventsBus);\n\n this.events = events;\n this.hop = events.hasOwnProperty;\n }\n\n /**\n * Adds listener to the specifed event.\n *\n * @param {String|Array} event\n * @param {Function} handler\n */\n\n\n createClass(EventsBus, [{\n key: 'on',\n value: function on(event, handler) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.on(event[i], handler);\n }\n }\n\n // Create the event's object if not yet created\n if (!this.hop.call(this.events, event)) {\n this.events[event] = [];\n }\n\n // Add the handler to queue\n var index = this.events[event].push(handler) - 1;\n\n // Provide handle back for removal of event\n return {\n remove: function remove() {\n delete this.events[event][index];\n }\n };\n }\n\n /**\n * Runs registered handlers for specified event.\n *\n * @param {String|Array} event\n * @param {Object=} context\n */\n\n }, {\n key: 'emit',\n value: function emit(event, context) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.emit(event[i], context);\n }\n }\n\n // If the event doesn't exist, or there's no handlers in queue, just leave\n if (!this.hop.call(this.events, event)) {\n return;\n }\n\n // Cycle through events queue, fire!\n this.events[event].forEach(function (item) {\n item(context || {});\n });\n }\n }]);\n return EventsBus;\n}();\n\nvar Glide = function () {\n /**\r\n * Construct glide.\r\n *\r\n * @param {String} selector\r\n * @param {Object} options\r\n */\n function Glide(selector) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n classCallCheck(this, Glide);\n\n this._c = {};\n this._t = [];\n this._e = new EventsBus();\n\n this.disabled = false;\n this.selector = selector;\n this.settings = mergeOptions(defaults, options);\n this.index = this.settings.startAt;\n }\n\n /**\r\n * Initializes glide.\r\n *\r\n * @param {Object} extensions Collection of extensions to initialize.\r\n * @return {Glide}\r\n */\n\n\n createClass(Glide, [{\n key: 'mount',\n value: function mount$$1() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._e.emit('mount.before');\n\n if (isObject(extensions)) {\n this._c = mount(this, extensions, this._e);\n } else {\n warn('You need to provide a object on `mount()`');\n }\n\n this._e.emit('mount.after');\n\n return this;\n }\n\n /**\r\n * Collects an instance `translate` transformers.\r\n *\r\n * @param {Array} transformers Collection of transformers.\r\n * @return {Void}\r\n */\n\n }, {\n key: 'mutate',\n value: function mutate() {\n var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (isArray(transformers)) {\n this._t = transformers;\n } else {\n warn('You need to provide a array on `mutate()`');\n }\n\n return this;\n }\n\n /**\r\n * Updates glide with specified settings.\r\n *\r\n * @param {Object} settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'update',\n value: function update() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.settings = mergeOptions(this.settings, settings);\n\n if (settings.hasOwnProperty('startAt')) {\n this.index = settings.startAt;\n }\n\n this._e.emit('update');\n\n return this;\n }\n\n /**\r\n * Change slide with specified pattern. A pattern must be in the special format:\r\n * `>` - Move one forward\r\n * `<` - Move one backward\r\n * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\r\n * `>>` - Rewinds to end (last slide)\r\n * `<<` - Rewinds to start (first slide)\r\n *\r\n * @param {String} pattern\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'go',\n value: function go(pattern) {\n this._c.Run.make(pattern);\n\n return this;\n }\n\n /**\r\n * Move track by specified distance.\r\n *\r\n * @param {String} distance\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'move',\n value: function move(distance) {\n this._c.Transition.disable();\n this._c.Move.make(distance);\n\n return this;\n }\n\n /**\r\n * Destroy instance and revert all changes done by this._c.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this._e.emit('destroy');\n\n return this;\n }\n\n /**\r\n * Start instance autoplaying.\r\n *\r\n * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'play',\n value: function play() {\n var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (interval) {\n this.settings.autoplay = interval;\n }\n\n this._e.emit('play');\n\n return this;\n }\n\n /**\r\n * Stop instance autoplaying.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'pause',\n value: function pause() {\n this._e.emit('pause');\n\n return this;\n }\n\n /**\r\n * Sets glide into a idle status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'disable',\n value: function disable() {\n this.disabled = true;\n\n return this;\n }\n\n /**\r\n * Sets glide into a active status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'enable',\n value: function enable() {\n this.disabled = false;\n\n return this;\n }\n\n /**\r\n * Adds cuutom event listener with handler.\r\n *\r\n * @param {String|Array} event\r\n * @param {Function} handler\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'on',\n value: function on(event, handler) {\n this._e.on(event, handler);\n\n return this;\n }\n\n /**\r\n * Checks if glide is a precised type.\r\n *\r\n * @param {String} name\r\n * @return {Boolean}\r\n */\n\n }, {\n key: 'isType',\n value: function isType(name) {\n return this.settings.type === name;\n }\n\n /**\r\n * Gets value of the core options.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: 'settings',\n get: function get$$1() {\n return this._o;\n }\n\n /**\r\n * Sets value of the core options.\r\n *\r\n * @param {Object} o\r\n * @return {Void}\r\n */\n ,\n set: function set$$1(o) {\n if (isObject(o)) {\n this._o = o;\n } else {\n warn('Options must be an `object` instance.');\n }\n }\n\n /**\r\n * Gets current index of the slider.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: 'index',\n get: function get$$1() {\n return this._i;\n }\n\n /**\r\n * Sets current index a slider.\r\n *\r\n * @return {Object}\r\n */\n ,\n set: function set$$1(i) {\n this._i = toInt(i);\n }\n\n /**\r\n * Gets type name of the slider.\r\n *\r\n * @return {String}\r\n */\n\n }, {\n key: 'type',\n get: function get$$1() {\n return this.settings.type;\n }\n\n /**\r\n * Gets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n\n }, {\n key: 'disabled',\n get: function get$$1() {\n return this._d;\n }\n\n /**\r\n * Sets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n ,\n set: function set$$1(status) {\n this._d = !!status;\n }\n }]);\n return Glide;\n}();\n\nfunction Run (Glide, Components, Events) {\n var Run = {\n /**\n * Initializes autorunning of the glide.\n *\n * @return {Void}\n */\n mount: function mount() {\n this._o = false;\n },\n\n\n /**\n * Makes glides running based on the passed moving schema.\n *\n * @param {String} move\n */\n make: function make(move) {\n var _this = this;\n\n if (!Glide.disabled) {\n Glide.disable();\n\n this.move = move;\n\n Events.emit('run.before', this.move);\n\n this.calculate();\n\n Events.emit('run', this.move);\n\n Components.Transition.after(function () {\n if (_this.isStart()) {\n Events.emit('run.start', _this.move);\n }\n\n if (_this.isEnd()) {\n Events.emit('run.end', _this.move);\n }\n\n if (_this.isOffset('<') || _this.isOffset('>')) {\n _this._o = false;\n\n Events.emit('run.offset', _this.move);\n }\n\n Events.emit('run.after', _this.move);\n\n Glide.enable();\n });\n }\n },\n\n\n /**\n * Calculates current index based on defined move.\n *\n * @return {Void}\n */\n calculate: function calculate() {\n var move = this.move,\n length = this.length;\n var steps = move.steps,\n direction = move.direction;\n\n\n var countableSteps = isNumber(toInt(steps)) && toInt(steps) !== 0;\n\n switch (direction) {\n case '>':\n if (steps === '>') {\n Glide.index = length;\n } else if (this.isEnd()) {\n if (!(Glide.isType('slider') && !Glide.settings.rewind)) {\n this._o = true;\n\n Glide.index = 0;\n }\n } else if (countableSteps) {\n Glide.index += Math.min(length - Glide.index, -toInt(steps));\n } else {\n Glide.index++;\n }\n break;\n\n case '<':\n if (steps === '<') {\n Glide.index = 0;\n } else if (this.isStart()) {\n if (!(Glide.isType('slider') && !Glide.settings.rewind)) {\n this._o = true;\n\n Glide.index = length;\n }\n } else if (countableSteps) {\n Glide.index -= Math.min(Glide.index, toInt(steps));\n } else {\n Glide.index--;\n }\n break;\n\n case '=':\n Glide.index = steps;\n break;\n\n default:\n warn('Invalid direction pattern [' + direction + steps + '] has been used');\n break;\n }\n },\n\n\n /**\n * Checks if we are on the first slide.\n *\n * @return {Boolean}\n */\n isStart: function isStart() {\n return Glide.index === 0;\n },\n\n\n /**\n * Checks if we are on the last slide.\n *\n * @return {Boolean}\n */\n isEnd: function isEnd() {\n return Glide.index === this.length;\n },\n\n\n /**\n * Checks if we are making a offset run.\n *\n * @param {String} direction\n * @return {Boolean}\n */\n isOffset: function isOffset(direction) {\n return this._o && this.move.direction === direction;\n }\n };\n\n define(Run, 'move', {\n /**\n * Gets value of the move schema.\n *\n * @returns {Object}\n */\n get: function get() {\n return this._m;\n },\n\n\n /**\n * Sets value of the move schema.\n *\n * @returns {Object}\n */\n set: function set(value) {\n var step = value.substr(1);\n\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 0\n };\n }\n });\n\n define(Run, 'length', {\n /**\n * Gets value of the running distance based\n * on zero-indexing number of slides.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n var length = Components.Html.slides.length;\n\n // If the `bound` option is acitve, a maximum running distance should be\n // reduced by `perView` and `focusAt` settings. Running distance\n // should end before creating an empty space after instance.\n\n if (Glide.isType('slider') && settings.focusAt !== 'center' && settings.bound) {\n return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n }\n\n return length - 1;\n }\n });\n\n define(Run, 'offset', {\n /**\n * Gets status of the offsetting flag.\n *\n * @return {Boolean}\n */\n get: function get() {\n return this._o;\n }\n });\n\n return Run;\n}\n\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\nfunction now() {\n return new Date().getTime();\n}\n\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\nfunction throttle(func, wait, options) {\n var timeout = void 0,\n context = void 0,\n args = void 0,\n result = void 0;\n var previous = 0;\n if (!options) options = {};\n\n var later = function later() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function throttled() {\n var at = now();\n if (!previous && options.leading === false) previous = at;\n var remaining = wait - (at - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = at;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n\nvar MARGIN_TYPE = {\n ltr: ['marginLeft', 'marginRight'],\n rtl: ['marginRight', 'marginLeft']\n};\n\nfunction Gaps (Glide, Components, Events) {\n var Gaps = {\n /**\n * Applies gaps between slides. First and last\n * slides do not receive it's edge margins.\n *\n * @param {HTMLCollection} slides\n * @return {Void}\n */\n apply: function apply(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n var direction = Components.Direction.value;\n\n if (i !== 0) {\n style[MARGIN_TYPE[direction][0]] = this.value / 2 + 'px';\n } else {\n style[MARGIN_TYPE[direction][0]] = '';\n }\n\n if (i !== slides.length - 1) {\n style[MARGIN_TYPE[direction][1]] = this.value / 2 + 'px';\n } else {\n style[MARGIN_TYPE[direction][1]] = '';\n }\n }\n },\n\n\n /**\n * Removes gaps from the slides.\n *\n * @param {HTMLCollection} slides\n * @returns {Void}\n */\n remove: function remove(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n\n style.marginLeft = '';\n style.marginRight = '';\n }\n }\n };\n\n define(Gaps, 'value', {\n /**\n * Gets value of the gap.\n *\n * @returns {Number}\n */\n get: function get() {\n return toInt(Glide.settings.gap);\n }\n });\n\n define(Gaps, 'grow', {\n /**\n * Gets additional dimentions value caused by gaps.\n * Used to increase width of the slides wrapper.\n *\n * @returns {Number}\n */\n get: function get() {\n return Gaps.value * (Components.Sizes.length - 1);\n }\n });\n\n define(Gaps, 'reductor', {\n /**\n * Gets reduction value caused by gaps.\n * Used to subtract width of the slides.\n *\n * @returns {Number}\n */\n get: function get() {\n var perView = Glide.settings.perView;\n\n return Gaps.value * (perView - 1) / perView;\n }\n });\n\n /**\n * Apply calculated gaps:\n * - after building, so slides (including clones) will receive proper margins\n * - on updating via API, to recalculate gaps with new options\n */\n Events.on(['build.after', 'update'], throttle(function () {\n Gaps.apply(Components.Html.wrapper.children);\n }, 30));\n\n /**\n * Remove gaps:\n * - on destroying to bring markup to its inital state\n */\n Events.on('destroy', function () {\n Gaps.remove(Components.Html.wrapper.children);\n });\n\n return Gaps;\n}\n\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param {Element} node\n * @return {Array}\n */\nfunction siblings(node) {\n if (node && node.parentNode) {\n var n = node.parentNode.firstChild;\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== node) {\n matched.push(n);\n }\n }\n\n return matched;\n }\n\n return [];\n}\n\n/**\n * Checks if passed node exist and is a valid element.\n *\n * @param {Element} node\n * @return {Boolean}\n */\nfunction exist(node) {\n if (node && node instanceof window.HTMLElement) {\n return true;\n }\n\n return false;\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\n\nfunction Html (Glide, Components) {\n var Html = {\n /**\n * Setup slider HTML nodes.\n *\n * @param {Glide} glide\n */\n mount: function mount() {\n this.root = Glide.selector;\n this.track = this.root.querySelector(TRACK_SELECTOR);\n this.slides = Array.prototype.slice.call(this.wrapper.children).filter(function (slide) {\n return !slide.classList.contains(Glide.settings.classes.cloneSlide);\n });\n }\n };\n\n define(Html, 'root', {\n /**\n * Gets node of the glide main element.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._r;\n },\n\n\n /**\n * Sets node of the glide main element.\n *\n * @return {Object}\n */\n set: function set(r) {\n if (isString(r)) {\n r = document.querySelector(r);\n }\n\n if (exist(r)) {\n Html._r = r;\n } else {\n warn('Root element must be a existing Html node');\n }\n }\n });\n\n define(Html, 'track', {\n /**\n * Gets node of the glide track with slides.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._t;\n },\n\n\n /**\n * Sets node of the glide track with slides.\n *\n * @return {Object}\n */\n set: function set(t) {\n if (exist(t)) {\n Html._t = t;\n } else {\n warn('Could not find track element. Please use ' + TRACK_SELECTOR + ' attribute.');\n }\n }\n });\n\n define(Html, 'wrapper', {\n /**\n * Gets node of the slides wrapper.\n *\n * @return {Object}\n */\n get: function get() {\n return Html.track.children[0];\n }\n });\n\n return Html;\n}\n\nfunction Peek (Glide, Components, Events) {\n var Peek = {\n /**\n * Setups how much to peek based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.peek;\n }\n };\n\n define(Peek, 'value', {\n /**\n * Gets value of the peek.\n *\n * @returns {Number|Object}\n */\n get: function get() {\n return Peek._v;\n },\n\n\n /**\n * Sets value of the peek.\n *\n * @param {Number|Object} value\n * @return {Void}\n */\n set: function set(value) {\n if (isObject(value)) {\n value.before = toInt(value.before);\n value.after = toInt(value.after);\n } else {\n value = toInt(value);\n }\n\n Peek._v = value;\n }\n });\n\n define(Peek, 'reductor', {\n /**\n * Gets reduction value caused by peek.\n *\n * @returns {Number}\n */\n get: function get() {\n var value = Peek.value;\n var perView = Glide.settings.perView;\n\n if (isObject(value)) {\n return value.before / perView + value.after / perView;\n }\n\n return value * 2 / perView;\n }\n });\n\n /**\n * Recalculate peeking sizes on:\n * - when resizing window to update to proper percents\n */\n Events.on(['resize', 'update'], function () {\n Peek.mount();\n });\n\n return Peek;\n}\n\nfunction Move (Glide, Components, Events) {\n var Move = {\n /**\n * Constructs move component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n this._o = 0;\n },\n\n\n /**\n * Calculates a movement value based on passed offset and currently active index.\n *\n * @param {Number} offset\n * @return {Void}\n */\n make: function make() {\n var _this = this;\n\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n this.offset = offset;\n\n Events.emit('move', {\n movement: this.value\n });\n\n Components.Transition.after(function () {\n Events.emit('move.after', {\n movement: _this.value\n });\n });\n }\n };\n\n define(Move, 'offset', {\n /**\n * Gets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n get: function get() {\n return Move._o;\n },\n\n\n /**\n * Sets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n set: function set(value) {\n Move._o = !isUndefined(value) ? toInt(value) : 0;\n }\n });\n\n define(Move, 'translate', {\n /**\n * Gets a raw movement value.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Sizes.slideWidth * Glide.index;\n }\n });\n\n define(Move, 'value', {\n /**\n * Gets an actual movement value corrected by offset.\n *\n * @return {Number}\n */\n get: function get() {\n var offset = this.offset;\n var translate = this.translate;\n\n if (Components.Direction.is('rtl')) {\n return translate + offset;\n }\n\n return translate - offset;\n }\n });\n\n /**\n * Make movement to proper slide on:\n * - before build, so glide will start at `startAt` index\n * - on each standard run to move to newly calculated index\n */\n Events.on(['build.before', 'run'], function () {\n Move.make();\n });\n\n return Move;\n}\n\nfunction Sizes (Glide, Components, Events) {\n var Sizes = {\n /**\n * Setups dimentions of slides.\n *\n * @return {Void}\n */\n setupSlides: function setupSlides() {\n var width = this.slideWidth + 'px';\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = width;\n }\n },\n\n\n /**\n * Setups dimentions of slides wrapper.\n *\n * @return {Void}\n */\n setupWrapper: function setupWrapper(dimention) {\n Components.Html.wrapper.style.width = this.wrapperSize + 'px';\n },\n\n\n /**\n * Removes applied styles from HTML elements.\n *\n * @returns {Void}\n */\n remove: function remove() {\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = '';\n }\n\n Components.Html.wrapper.style.width = '';\n }\n };\n\n define(Sizes, 'length', {\n /**\n * Gets count number of the slides.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.slides.length;\n }\n });\n\n define(Sizes, 'width', {\n /**\n * Gets width value of the glide.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.root.offsetWidth;\n }\n });\n\n define(Sizes, 'wrapperSize', {\n /**\n * Gets size of the slides wrapper.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n }\n });\n\n define(Sizes, 'slideWidth', {\n /**\n * Gets width value of the single slide.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n }\n });\n\n /**\n * Apply calculated glide's dimensions:\n * - before building, so other dimentions (e.g. translate) will be calculated propertly\n * - when resizing window to recalculate sildes dimensions\n * - on updating via API, to calculate dimensions based on new options\n */\n Events.on(['build.before', 'resize', 'update'], function () {\n Sizes.setupSlides();\n Sizes.setupWrapper();\n });\n\n /**\n * Remove calculated glide's dimensions:\n * - on destoting to bring markup to its inital state\n */\n Events.on('destroy', function () {\n Sizes.remove();\n });\n\n return Sizes;\n}\n\nfunction Build (Glide, Components, Events) {\n var Build = {\n /**\n * Init glide building. Adds classes, sets\n * dimensions and setups initial state.\n *\n * @return {Void}\n */\n mount: function mount() {\n Events.emit('build.before');\n\n this.typeClass();\n this.activeClass();\n\n Events.emit('build.after');\n },\n\n\n /**\n * Adds `type` class to the glide element.\n *\n * @return {Void}\n */\n typeClass: function typeClass() {\n Components.Html.root.classList.add(Glide.settings.classes[Glide.settings.type]);\n },\n\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n activeClass: function activeClass() {\n var classes = Glide.settings.classes;\n var slide = Components.Html.slides[Glide.index];\n\n if (slide) {\n slide.classList.add(classes.activeSlide);\n\n siblings(slide).forEach(function (sibling) {\n sibling.classList.remove(classes.activeSlide);\n });\n }\n },\n\n\n /**\n * Removes HTML classes applied at building.\n *\n * @return {Void}\n */\n removeClasses: function removeClasses() {\n var classes = Glide.settings.classes;\n\n Components.Html.root.classList.remove(classes[Glide.settings.type]);\n\n Components.Html.slides.forEach(function (sibling) {\n sibling.classList.remove(classes.activeSlide);\n });\n }\n };\n\n /**\n * Clear building classes:\n * - on destroying to bring HTML to its initial state\n * - on updating to remove classes before remounting component\n */\n Events.on(['destroy', 'update'], function () {\n Build.removeClasses();\n });\n\n /**\n * Remount component:\n * - on resizing of the window to calculate new dimentions\n * - on updating settings via API\n */\n Events.on(['resize', 'update'], function () {\n Build.mount();\n });\n\n /**\n * Swap active class of current slide:\n * - after each move to the new index\n */\n Events.on('move.after', function () {\n Build.activeClass();\n });\n\n return Build;\n}\n\nfunction Clones (Glide, Components, Events) {\n var Clones = {\n /**\n * Create pattern map and collect slides to be cloned.\n */\n mount: function mount() {\n this.items = [];\n\n if (Glide.isType('carousel')) {\n this.items = this.collect();\n }\n },\n\n\n /**\n * Collect clones with pattern.\n *\n * @return {Void}\n */\n collect: function collect() {\n var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var slides = Components.Html.slides;\n var _Glide$settings = Glide.settings,\n perView = _Glide$settings.perView,\n classes = _Glide$settings.classes;\n\n\n var peekIncrementer = +!!Glide.settings.peek;\n var part = perView + peekIncrementer;\n var start = slides.slice(0, part);\n var end = slides.slice(-part);\n\n for (var r = 0; r < Math.max(1, Math.floor(perView / slides.length)); r++) {\n for (var i = 0; i < start.length; i++) {\n var clone = start[i].cloneNode(true);\n\n clone.classList.add(classes.cloneSlide);\n\n items.push(clone);\n }\n\n for (var _i = 0; _i < end.length; _i++) {\n var _clone = end[_i].cloneNode(true);\n\n _clone.classList.add(classes.cloneSlide);\n\n items.unshift(_clone);\n }\n }\n\n return items;\n },\n\n\n /**\n * Append cloned slides with generated pattern.\n *\n * @return {Void}\n */\n append: function append() {\n var items = this.items;\n var _Components$Html = Components.Html,\n wrapper = _Components$Html.wrapper,\n slides = _Components$Html.slides;\n\n\n var half = Math.floor(items.length / 2);\n var prepend = items.slice(0, half).reverse();\n var append = items.slice(half, items.length);\n var width = Components.Sizes.slideWidth + 'px';\n\n for (var i = 0; i < append.length; i++) {\n wrapper.appendChild(append[i]);\n }\n\n for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n wrapper.insertBefore(prepend[_i2], slides[0]);\n }\n\n for (var _i3 = 0; _i3 < items.length; _i3++) {\n items[_i3].style.width = width;\n }\n },\n\n\n /**\n * Remove all cloned slides.\n *\n * @return {Void}\n */\n remove: function remove() {\n var items = this.items;\n\n\n for (var i = 0; i < items.length; i++) {\n Components.Html.wrapper.removeChild(items[i]);\n }\n }\n };\n\n define(Clones, 'grow', {\n /**\n * Gets additional dimentions value caused by clones.\n *\n * @return {Number}\n */\n get: function get() {\n return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n }\n });\n\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n Events.on('update', function () {\n Clones.remove();\n Clones.mount();\n Clones.append();\n });\n\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n Events.on('build.before', function () {\n if (Glide.isType('carousel')) {\n Clones.append();\n }\n });\n\n /**\n * Remove clones HTMLElements:\n * - on destroying, to bring HTML to its initial state\n */\n Events.on('destroy', function () {\n Clones.remove();\n });\n\n return Clones;\n}\n\nvar EventsBinder = function () {\n /**\n * Construct a EventsBinder instance.\n */\n function EventsBinder() {\n var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, EventsBinder);\n\n this.listeners = listeners;\n }\n\n /**\n * Adds events listeners to arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Function} closure\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n\n createClass(EventsBinder, [{\n key: 'on',\n value: function on(events, el, closure) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n this.listeners[events[i]] = closure;\n\n el.addEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n\n /**\n * Removes event listeners from arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n }, {\n key: 'off',\n value: function off(events, el) {\n var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n el.removeEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n\n /**\n * Destroy collected listeners.\n *\n * @returns {Void}\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n delete this.listeners;\n }\n }]);\n return EventsBinder;\n}();\n\nfunction Resize (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n var Resize = {\n /**\n * Initializes window bindings.\n */\n mount: function mount() {\n this.bind();\n },\n\n\n /**\n * Binds `rezsize` listener to the window.\n * It's a costly event, so we are debouncing it.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('resize', window, throttle(function () {\n Events.emit('resize');\n }, Glide.settings.throttle));\n },\n\n\n /**\n * Unbinds listeners from the window.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('resize', window);\n }\n };\n\n /**\n * Remove bindings from window:\n * - on destroying, to remove added EventListener\n */\n Events.on('destroy', function () {\n Resize.unbind();\n Binder.destroy();\n });\n\n return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n '>': '<',\n '<': '>',\n '=': '='\n};\n\nfunction Direction (Glide, Components, Events) {\n var Direction = {\n /**\n * Setups gap value based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.direction;\n },\n\n\n /**\n * Resolves pattern based on direction value\n *\n * @param {String} pattern\n * @returns {String}\n */\n resolve: function resolve(pattern) {\n var token = pattern.slice(0, 1);\n\n if (this.is('rtl')) {\n return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n }\n\n return pattern;\n },\n\n\n /**\n * Checks value of direction mode.\n *\n * @param {String} direction\n * @returns {Boolean}\n */\n is: function is(direction) {\n return this.value === direction;\n },\n\n\n /**\n * Applies direction class to the root HTML element.\n *\n * @return {Void}\n */\n addClass: function addClass() {\n Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n },\n\n\n /**\n * Removes direction class from the root HTML element.\n *\n * @return {Void}\n */\n removeClass: function removeClass() {\n Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n }\n };\n\n define(Direction, 'value', {\n /**\n * Gets value of the direction.\n *\n * @returns {Number}\n */\n get: function get() {\n return Direction._v;\n },\n\n\n /**\n * Sets value of the direction.\n *\n * @param {String} value\n * @return {Void}\n */\n set: function set(value) {\n if (VALID_DIRECTIONS.indexOf(value) > -1) {\n Direction._v = value;\n } else {\n warn('Direction value must be `ltr` or `rtl`');\n }\n }\n });\n\n /**\n * Clear direction class:\n * - on destroy to bring HTML to its initial state\n * - on update to remove class before reappling bellow\n */\n Events.on(['destroy', 'update'], function () {\n Direction.removeClass();\n });\n\n /**\n * Remount component:\n * - on update to reflect changes in direction value\n */\n Events.on('update', function () {\n Direction.mount();\n });\n\n /**\n * Apply direction class:\n * - before building to apply class for the first time\n * - on updating to reapply direction class that may changed\n */\n Events.on(['build.before', 'update'], function () {\n Direction.addClass();\n });\n\n return Direction;\n}\n\n/**\n * Reflects value of glide movement.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Rtl (Glide, Components) {\n return {\n /**\n * Negates the passed translate if glide is in RTL option.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Components.Direction.is('rtl')) {\n return -translate;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Gap (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with number in the `gap` settings.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Gaps.value * Glide.index;\n }\n };\n}\n\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Grow (Glide, Components) {\n return {\n /**\n * Adds to the passed translate width of the half of clones.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Clones.grow / 2;\n }\n };\n}\n\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Peeking (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with a `peek` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Glide.settings.focusAt >= 0) {\n var peek = Components.Peek.value;\n\n if (isObject(peek)) {\n return translate - peek.before;\n }\n\n return translate - peek;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Focusing (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with index in the `focusAt` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var gap = Components.Gaps.value;\n var width = Components.Sizes.width;\n var focusAt = Glide.settings.focusAt;\n var slideWidth = Components.Sizes.slideWidth;\n\n if (focusAt === 'center') {\n return translate - (width / 2 - slideWidth / 2);\n }\n\n return translate - slideWidth * focusAt - gap * focusAt;\n }\n };\n}\n\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction mutator (Glide, Components, Events) {\n /**\n * Merge instance transformers with collection of default transformers.\n * It's important that the Rtl component be last on the list,\n * so it reflects all previous transformations.\n *\n * @type {Array}\n */\n var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n\n return {\n /**\n * Piplines translate value with registered transformers.\n *\n * @param {Number} translate\n * @return {Number}\n */\n mutate: function mutate(translate) {\n for (var i = 0; i < TRANSFORMERS.length; i++) {\n var transformer = TRANSFORMERS[i];\n\n if (isFunction(transformer) && isFunction(transformer().modify)) {\n translate = transformer(Glide, Components, Events).modify(translate);\n } else {\n warn('Transformer should be a function that returns an object with `modify()` method');\n }\n }\n\n return translate;\n }\n };\n}\n\nfunction Translate (Glide, Components, Events) {\n var Translate = {\n /**\n * Sets value of translate on HTML element.\n *\n * @param {Number} value\n * @return {Void}\n */\n set: function set(value) {\n var transform = mutator(Glide, Components).mutate(value);\n\n Components.Html.wrapper.style.transform = 'translate3d(' + -1 * transform + 'px, 0px, 0px)';\n },\n\n\n /**\n * Removes value of translate from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transform = '';\n }\n };\n\n /**\n * Set new translate value:\n * - on move to reflect index change\n * - on updating via API to reflect possible changes in options\n */\n Events.on('move', function (context) {\n var gap = Components.Gaps.value;\n var length = Components.Sizes.length;\n var width = Components.Sizes.slideWidth;\n\n if (Glide.isType('carousel') && Components.Run.isOffset('<')) {\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n\n Translate.set(width * (length - 1));\n });\n\n return Translate.set(-width - gap * length);\n }\n\n if (Glide.isType('carousel') && Components.Run.isOffset('>')) {\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n\n Translate.set(0);\n });\n\n return Translate.set(width * length + gap * length);\n }\n\n return Translate.set(context.movement);\n });\n\n /**\n * Remove translate:\n * - on destroying to bring markup to its inital state\n */\n Events.on('destroy', function () {\n Translate.remove();\n });\n\n return Translate;\n}\n\nfunction Transition (Glide, Components, Events) {\n /**\n * Holds inactivity status of transition.\n * When true transition is not applied.\n *\n * @type {Boolean}\n */\n var disabled = false;\n\n var Transition = {\n /**\n * Composes string of the CSS transition.\n *\n * @param {String} property\n * @return {String}\n */\n compose: function compose(property) {\n var settings = Glide.settings;\n\n if (!disabled) {\n return property + ' ' + this.duration + 'ms ' + settings.animationTimingFunc;\n }\n\n return property + ' 0ms ' + settings.animationTimingFunc;\n },\n\n\n /**\n * Sets value of transition on HTML element.\n *\n * @param {String=} property\n * @return {Void}\n */\n set: function set() {\n var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n\n Components.Html.wrapper.style.transition = this.compose(property);\n },\n\n\n /**\n * Removes value of transition from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transition = '';\n },\n\n\n /**\n * Runs callback after animation.\n *\n * @param {Function} callback\n * @return {Void}\n */\n after: function after(callback) {\n setTimeout(function () {\n callback();\n }, this.duration);\n },\n\n\n /**\n * Enable transition.\n *\n * @return {Void}\n */\n enable: function enable() {\n disabled = false;\n\n this.set();\n },\n\n\n /**\n * Disable transition.\n *\n * @return {Void}\n */\n disable: function disable() {\n disabled = true;\n\n this.set();\n }\n };\n\n define(Transition, 'duration', {\n /**\n * Gets duration of the transition based\n * on currently running animation type.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n\n if (Glide.isType('slider') && Components.Run.offset) {\n return settings.rewindDuration;\n }\n\n return settings.animationDuration;\n }\n });\n\n /**\n * Set transition `style` value:\n * - on each moving, because it may be cleared by offset move\n */\n Events.on('move', function () {\n Transition.set();\n });\n\n /**\n * Disable transition:\n * - before initial build to avoid transitioning from `0` to `startAt` index\n * - while resizing window and recalculating dimentions\n * - on jumping from offset transition at start and end edges in `carousel` type\n */\n Events.on(['build.before', 'resize', 'translate.jump'], function () {\n Transition.disable();\n });\n\n /**\n * Enable transition:\n * - on each running, because it may be disabled by offset move\n */\n Events.on('run', function () {\n Transition.enable();\n });\n\n /**\n * Remove transition:\n * - on destroying to bring markup to its inital state\n */\n Events.on('destroy', function () {\n Transition.remove();\n });\n\n return Transition;\n}\n\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\n\nvar supportsPassive = false;\n\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\n\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\n\nfunction swipe (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n var swipeSin = 0;\n var swipeStartX = 0;\n var swipeStartY = 0;\n var disabled = false;\n var capture = supportsPassive$1 ? { passive: true } : false;\n\n var Swipe = {\n /**\n * Initializes swipe bindings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bindSwipeStart();\n },\n\n\n /**\n * Handler for `swipestart` event. Calculates entry points of the user's tap.\n *\n * @param {Object} event\n * @return {Void}\n */\n start: function start(event) {\n if (!disabled && !Glide.disabled) {\n this.disable();\n\n var swipe = this.touches(event);\n\n swipeSin = null;\n swipeStartX = toInt(swipe.pageX);\n swipeStartY = toInt(swipe.pageY);\n\n this.bindSwipeMove();\n this.bindSwipeEnd();\n\n Events.emit('swipe.start');\n }\n },\n\n\n /**\n * Handler for `swipemove` event. Calculates user's tap angle and distance.\n *\n * @param {Object} event\n */\n move: function move(event) {\n if (!Glide.disabled) {\n var _Glide$settings = Glide.settings,\n touchAngle = _Glide$settings.touchAngle,\n touchRatio = _Glide$settings.touchRatio,\n classes = _Glide$settings.classes;\n\n\n var swipe = this.touches(event);\n\n var subExSx = toInt(swipe.pageX) - swipeStartX;\n var subEySy = toInt(swipe.pageY) - swipeStartY;\n var powEX = Math.abs(subExSx << 2);\n var powEY = Math.abs(subEySy << 2);\n var swipeHypotenuse = Math.sqrt(powEX + powEY);\n var swipeCathetus = Math.sqrt(powEY);\n\n swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n if (swipeSin * 180 / Math.PI < touchAngle) {\n event.stopPropagation();\n\n Components.Move.make(subExSx * toFloat(touchRatio));\n\n Components.Html.root.classList.add(classes.dragging);\n\n Events.emit('swipe.move');\n } else {\n return false;\n }\n }\n },\n\n\n /**\n * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n *\n * @param {Object} event\n * @return {Void}\n */\n end: function end(event) {\n if (!Glide.disabled) {\n var settings = Glide.settings;\n\n var swipe = this.touches(event);\n var threshold = this.threshold(event);\n\n var swipeDistance = swipe.pageX - swipeStartX;\n var swipeDeg = swipeSin * 180 / Math.PI;\n var steps = Math.round(swipeDistance / Components.Sizes.slideWidth);\n\n this.enable();\n\n if (swipeDistance > threshold && swipeDeg < settings.touchAngle) {\n // While swipe is positive and greater than threshold move backward.\n if (settings.perTouch) {\n steps = Math.min(steps, toInt(settings.perTouch));\n }\n\n if (Components.Direction.is('rtl')) {\n steps = -steps;\n }\n\n Components.Run.make(Components.Direction.resolve('<' + steps));\n } else if (swipeDistance < -threshold && swipeDeg < settings.touchAngle) {\n // While swipe is negative and lower than negative threshold move forward.\n if (settings.perTouch) {\n steps = Math.max(steps, -toInt(settings.perTouch));\n }\n\n if (Components.Direction.is('rtl')) {\n steps = -steps;\n }\n\n Components.Run.make(Components.Direction.resolve('>' + steps));\n } else {\n // While swipe don't reach distance apply previous transform.\n Components.Move.make();\n }\n\n Components.Html.root.classList.remove(settings.classes.dragging);\n\n this.unbindSwipeMove();\n this.unbindSwipeEnd();\n\n Events.emit('swipe.end');\n }\n },\n\n\n /**\n * Binds swipe's starting event.\n *\n * @return {Void}\n */\n bindSwipeStart: function bindSwipeStart() {\n var _this = this;\n\n var settings = Glide.settings;\n\n if (settings.swipeThreshold) {\n Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n\n if (settings.dragThreshold) {\n Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n },\n\n\n /**\n * Unbinds swipe's starting event.\n *\n * @return {Void}\n */\n unbindSwipeStart: function unbindSwipeStart() {\n Binder.off(START_EVENTS[0], Components.Html.wrapper, capture);\n Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\n },\n\n\n /**\n * Binds swipe's moving event.\n *\n * @return {Void}\n */\n bindSwipeMove: function bindSwipeMove() {\n var _this2 = this;\n\n Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n _this2.move(event);\n }, Glide.settings.throttle), capture);\n },\n\n\n /**\n * Unbinds swipe's moving event.\n *\n * @return {Void}\n */\n unbindSwipeMove: function unbindSwipeMove() {\n Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture);\n },\n\n\n /**\n * Binds swipe's ending event.\n *\n * @return {Void}\n */\n bindSwipeEnd: function bindSwipeEnd() {\n var _this3 = this;\n\n Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n _this3.end(event);\n });\n },\n\n\n /**\n * Unbinds swipe's ending event.\n *\n * @return {Void}\n */\n unbindSwipeEnd: function unbindSwipeEnd() {\n Binder.off(END_EVENTS, Components.Html.wrapper);\n },\n\n\n /**\n * Normalizes event touches points accorting to different types.\n *\n * @param {Object} event\n */\n touches: function touches(event) {\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return event;\n }\n\n return event.touches[0] || event.changedTouches[0];\n },\n\n\n /**\n * Gets value of minimum swipe distance settings based on event type.\n *\n * @return {Number}\n */\n threshold: function threshold(event) {\n var settings = Glide.settings;\n\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return settings.dragThreshold;\n }\n\n return settings.swipeThreshold;\n },\n\n\n /**\n * Enables swipe event.\n *\n * @return {self}\n */\n enable: function enable() {\n disabled = false;\n\n Components.Transition.enable();\n\n return this;\n },\n\n\n /**\n * Disables swipe event.\n *\n * @return {self}\n */\n disable: function disable() {\n disabled = true;\n\n Components.Transition.disable();\n\n return this;\n }\n };\n\n /**\n * Add component class:\n * - after initial building\n */\n Events.on('build.after', function () {\n Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n });\n\n /**\n * Remove swiping bindings:\n * - on destroying, to remove added EventListeners\n */\n Events.on('destroy', function () {\n Swipe.unbindSwipeStart();\n Swipe.unbindSwipeMove();\n Swipe.unbindSwipeEnd();\n Binder.destroy();\n });\n\n return Swipe;\n}\n\nfunction images (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n var Images = {\n /**\n * Binds listener to glide wrapper.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bind();\n },\n\n\n /**\n * Binds `dragstart` event on wrapper to prevent dragging images.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n },\n\n\n /**\n * Unbinds `dragstart` event on wrapper.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('dragstart', Components.Html.wrapper);\n },\n\n\n /**\n * Event handler. Prevents dragging.\n *\n * @return {Void}\n */\n dragstart: function dragstart(event) {\n event.preventDefault();\n }\n };\n\n /**\n * Remove bindings from images:\n * - on destroying, to remove added EventListeners\n */\n Events.on('destroy', function () {\n Images.unbind();\n Binder.destroy();\n });\n\n return Images;\n}\n\nfunction anchors (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n /**\n * Holds detaching status of anchors.\n * Prevents detaching of already detached anchors.\n *\n * @private\n * @type {Boolean}\n */\n var detached = false;\n\n /**\n * Holds preventing status of anchors.\n * If `true` redirection after click will be disabled.\n *\n * @private\n * @type {Boolean}\n */\n var prevented = false;\n\n var Anchors = {\n /**\n * Setups a initial state of anchors component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n /**\n * Holds collection of anchors elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._a = Components.Html.wrapper.querySelectorAll('a');\n\n this.bind();\n },\n\n\n /**\n * Binds events to anchors inside a track.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('click', Components.Html.wrapper, this.click);\n },\n\n\n /**\n * Unbinds events attached to anchors inside a track.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('click', Components.Html.wrapper);\n },\n\n\n /**\n * Handler for click event. Prevents clicks when glide is in `prevent` status.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n if (prevented) {\n event.stopPropagation();\n event.preventDefault();\n }\n },\n\n\n /**\n * Detaches anchors click event inside glide.\n *\n * @return {self}\n */\n detach: function detach() {\n prevented = true;\n\n if (!detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = false;\n\n this.items[i].setAttribute('data-href', this.items[i].getAttribute('href'));\n\n this.items[i].removeAttribute('href');\n }\n\n detached = true;\n }\n\n return this;\n },\n\n\n /**\n * Attaches anchors click events inside glide.\n *\n * @return {self}\n */\n attach: function attach() {\n prevented = false;\n\n if (detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = true;\n\n this.items[i].setAttribute('href', this.items[i].getAttribute('data-href'));\n }\n\n detached = false;\n }\n\n return this;\n }\n };\n\n define(Anchors, 'items', {\n /**\n * Gets collection of the arrows HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Anchors._a;\n }\n });\n\n /**\n * Detach anchors inside slides:\n * - on swiping, so they won't redirect to its `href` attributes\n */\n Events.on('swipe.move', function () {\n Anchors.detach();\n });\n\n /**\n * Attach anchors inside slides:\n * - after swiping and transitions ends, so they can redirect after click again\n */\n Events.on('swipe.end', function () {\n Components.Transition.after(function () {\n Anchors.attach();\n });\n });\n\n /**\n * Unbind anchors inside slides:\n * - on destroying, to bring anchors to its initial state\n */\n Events.on('destroy', function () {\n Anchors.attach();\n Anchors.unbind();\n Binder.destroy();\n });\n\n return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\n\nfunction controls (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n var capture = supportsPassive$1 ? { passive: true } : false;\n\n var Controls = {\n /**\n * Inits arrows. Binds events listeners\n * to the arrows HTML elements.\n *\n * @return {Void}\n */\n mount: function mount() {\n /**\n * Collection of navigation HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n\n /**\n * Collection of controls HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n\n this.addBindings();\n },\n\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n setActive: function setActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.addClass(this._n[i].children);\n }\n },\n\n\n /**\n * Removes active class to current slide.\n *\n * @return {Void}\n */\n removeActive: function removeActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.removeClass(this._n[i].children);\n }\n },\n\n\n /**\n * Toggles active class on items inside navigation.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n addClass: function addClass(controls) {\n var settings = Glide.settings;\n var item = controls[Glide.index];\n\n if (item) {\n item.classList.add(settings.classes.activeNav);\n\n siblings(item).forEach(function (sibling) {\n sibling.classList.remove(settings.classes.activeNav);\n });\n }\n },\n\n\n /**\n * Removes active class from active control.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n removeClass: function removeClass(controls) {\n var item = controls[Glide.index];\n\n if (item) {\n item.classList.remove(Glide.settings.classes.activeNav);\n }\n },\n\n\n /**\n * Adds handles to the each group of controls.\n *\n * @return {Void}\n */\n addBindings: function addBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.bind(this._c[i].children);\n }\n },\n\n\n /**\n * Removes handles from the each group of controls.\n *\n * @return {Void}\n */\n removeBindings: function removeBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.unbind(this._c[i].children);\n }\n },\n\n\n /**\n * Binds events to arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n bind: function bind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.on('click', elements[i], this.click);\n Binder.on('touchstart', elements[i], this.click, capture);\n }\n },\n\n\n /**\n * Unbinds events binded to the arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n unbind: function unbind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.off(['click', 'touchstart'], elements[i]);\n }\n },\n\n\n /**\n * Handles `click` event on the arrows HTML elements.\n * Moves slider in driection precised in\n * `data-glide-dir` attribute.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n event.preventDefault();\n\n Components.Run.make(Components.Direction.resolve(event.currentTarget.getAttribute('data-glide-dir')));\n }\n };\n\n define(Controls, 'items', {\n /**\n * Gets collection of the controls HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Controls._c;\n }\n });\n\n /**\n * Swap active class of current navigation item:\n * - after mounting to set it to initial index\n * - after each move to the new index\n */\n Events.on(['mount.after', 'move.after'], function () {\n Controls.setActive();\n });\n\n /**\n * Remove bindings and HTML Classes:\n * - on destroying, to bring markup to its initial state\n */\n Events.on('destroy', function () {\n Controls.removeBindings();\n Controls.removeActive();\n Binder.destroy();\n });\n\n return Controls;\n}\n\nfunction keyboard (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n var Keyboard = {\n /**\n * Binds keyboard events on component mount.\n *\n * @return {Void}\n */\n mount: function mount() {\n if (Glide.settings.keyboard) {\n this.bind();\n }\n },\n\n\n /**\n * Adds keyboard press events.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('keyup', document, this.press);\n },\n\n\n /**\n * Removes keyboard press events.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('keyup', document);\n },\n\n\n /**\n * Handles keyboard's arrows press and moving glide foward and backward.\n *\n * @param {Object} event\n * @return {Void}\n */\n press: function press(event) {\n if (event.keyCode === 39) {\n Components.Run.make(Components.Direction.resolve('>'));\n }\n\n if (event.keyCode === 37) {\n Components.Run.make(Components.Direction.resolve('<'));\n }\n }\n };\n\n /**\n * Remove bindings from keyboard:\n * - on destroying to remove added events\n * - on updating to remove events before remounting\n */\n Events.on(['destroy', 'update'], function () {\n Keyboard.unbind();\n });\n\n /**\n * Remount component\n * - on updating to reflect potential changes in settings\n */\n Events.on('update', function () {\n Keyboard.mount();\n });\n\n /**\n * Destroy binder:\n * - on destroying to remove listeners\n */\n Events.on('destroy', function () {\n Binder.destroy();\n });\n\n return Keyboard;\n}\n\nfunction autoplay (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n var Autoplay = {\n /**\n * Initializes autoplaying and events.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.start();\n\n if (Glide.settings.hoverpause) {\n this.bind();\n }\n },\n\n\n /**\n * Starts autoplaying in configured interval.\n *\n * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n * @return {Void}\n */\n start: function start() {\n var _this = this;\n\n if (Glide.settings.autoplay) {\n if (isUndefined(this._i)) {\n this._i = setInterval(function () {\n _this.stop();\n\n Components.Run.make('>');\n\n _this.start();\n }, this.time);\n }\n }\n },\n\n\n /**\n * Stops autorunning of the glide.\n *\n * @return {Void}\n */\n stop: function stop() {\n this._i = clearInterval(this._i);\n },\n\n\n /**\n * Stops autoplaying while mouse is over glide's area.\n *\n * @return {Void}\n */\n bind: function bind() {\n var _this2 = this;\n\n Binder.on('mouseover', Components.Html.root, function () {\n _this2.stop();\n });\n\n Binder.on('mouseout', Components.Html.root, function () {\n _this2.start();\n });\n },\n\n\n /**\n * Unbind mouseover events.\n *\n * @returns {Void}\n */\n unbind: function unbind() {\n Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n }\n };\n\n define(Autoplay, 'time', {\n /**\n * Gets time period value for the autoplay interval. Prioritizes\n * times in `data-glide-autoplay` attrubutes over options.\n *\n * @return {Number}\n */\n get: function get() {\n var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n if (autoplay) {\n return toInt(autoplay);\n }\n\n return toInt(Glide.settings.autoplay);\n }\n });\n\n /**\n * Stop autoplaying and unbind events:\n * - on destroying, to clear defined interval\n * - on updating via API to reset interval that may changed\n */\n Events.on(['destroy', 'update'], function () {\n Autoplay.unbind();\n });\n\n /**\n * Stop autoplaying:\n * - before each run, to restart autoplaying\n * - on pausing via API\n * - on destroying, to clear defined interval\n * - while starting a swipe\n * - on updating via API to reset interval that may changed\n */\n Events.on(['run.before', 'pause', 'destroy', 'swipe.start', 'update'], function () {\n Autoplay.stop();\n });\n\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n Events.on(['run.after', 'play', 'swipe.end'], function () {\n Autoplay.start();\n });\n\n /**\n * Remount autoplaying:\n * - on updating via API to reset interval that may changed\n */\n Events.on('update', function () {\n Autoplay.mount();\n });\n\n /**\n * Destroy a binder:\n * - on destroying glide instance to clearup listeners\n */\n Events.on('destroy', function () {\n Binder.destroy();\n });\n\n return Autoplay;\n}\n\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\nfunction sortBreakpoints(points) {\n if (isObject(points)) {\n return sortKeys(points);\n } else {\n warn('Breakpoints option must be an object');\n }\n\n return {};\n}\n\nfunction breakpoints (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n /**\n * Holds reference to settings.\n *\n * @type {Object}\n */\n var settings = Glide.settings;\n\n /**\n * Holds reference to breakpoints object in settings. Sorts breakpoints\n * from smaller to larger. It is required in order to proper\n * matching currently active breakpoint settings.\n *\n * @type {Object}\n */\n var points = sortBreakpoints(settings.breakpoints);\n\n /**\n * Cache initial settings before overwritting.\n *\n * @type {Object}\n */\n var defaults = _extends({}, settings);\n\n var Breakpoints = {\n /**\n * Matches settings for currectly matching media breakpoint.\n *\n * @param {Object} points\n * @returns {Object}\n */\n match: function match(points) {\n if (typeof window.matchMedia !== 'undefined') {\n for (var point in points) {\n if (points.hasOwnProperty(point)) {\n if (window.matchMedia('(max-width: ' + point + 'px)').matches) {\n return points[point];\n }\n }\n }\n }\n\n return defaults;\n }\n };\n\n /**\n * Overwrite instance settings with currently matching breakpoint settings.\n * This happens right after component initialization.\n */\n _extends(settings, Breakpoints.match(points));\n\n /**\n * Update glide with settings of matched brekpoint:\n * - window resize to update slider\n */\n Binder.on('resize', window, throttle(function () {\n Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n }, Glide.settings.throttle));\n\n /**\n * Resort and update default settings:\n * - on reinit via API, so breakpoint matching will be performed with options\n */\n Events.on('update', function () {\n points = sortBreakpoints(points);\n\n defaults = _extends({}, settings);\n });\n\n /**\n * Unbind resize listener:\n * - on destroying, to bring markup to its initial state\n */\n Events.on('destroy', function () {\n Binder.off('resize', window);\n });\n\n return Breakpoints;\n}\n\nvar COMPONENTS = {\n Html: Html,\n Translate: Translate,\n Transition: Transition,\n Direction: Direction,\n Peek: Peek,\n Sizes: Sizes,\n Gaps: Gaps,\n Move: Move,\n Clones: Clones,\n Resize: Resize,\n Build: Build,\n Run: Run\n};\n\nvar Glide$1 = function (_Core) {\n inherits(Glide$$1, _Core);\n\n function Glide$$1() {\n classCallCheck(this, Glide$$1);\n return possibleConstructorReturn(this, (Glide$$1.__proto__ || Object.getPrototypeOf(Glide$$1)).apply(this, arguments));\n }\n\n createClass(Glide$$1, [{\n key: 'mount',\n value: function mount() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return get(Glide$$1.prototype.__proto__ || Object.getPrototypeOf(Glide$$1.prototype), 'mount', this).call(this, _extends({}, COMPONENTS, extensions));\n }\n }]);\n return Glide$$1;\n}(Glide);\n\nexport default Glide$1;\nexport { swipe as Swipe, images as Images, anchors as Anchors, controls as Controls, keyboard as Keyboard, autoplay as Autoplay, breakpoints as Breakpoints };\n","import Glide from '@glidejs/glide';\nimport { Swipe, Anchors } from '@glidejs/glide/dist/glide.modular.esm';\n\nconst setupSlider = (targetElement, options = {}) => {\n new Glide(targetElement, options).mount({ Swipe, Anchors });\n};\n\nexport default setupSlider;\n","/*!\n * Glide.js v3.4.1\n * (c) 2013-2019 Jędrzej Chałubek (http://jedrzejchalubek.com/)\n * Released under the MIT License.\n */\n\nvar defaults = {\n /**\n * Type of the movement.\n *\n * Available types:\n * `slider` - Rewinds slider to the start/end when it reaches the first or last slide.\n * `carousel` - Changes slides without starting over when it reaches the first or last slide.\n *\n * @type {String}\n */\n type: 'slider',\n\n /**\n * Start at specific slide number defined with zero-based index.\n *\n * @type {Number}\n */\n startAt: 0,\n\n /**\n * A number of slides visible on the single viewport.\n *\n * @type {Number}\n */\n perView: 1,\n\n /**\n * Focus currently active slide at a specified position in the track.\n *\n * Available inputs:\n * `center` - Current slide will be always focused at the center of a track.\n * `0,1,2,3...` - Current slide will be focused on the specified zero-based index.\n *\n * @type {String|Number}\n */\n focusAt: 0,\n\n /**\n * A size of the gap added between slides.\n *\n * @type {Number}\n */\n gap: 10,\n\n /**\n * Change slides after a specified interval. Use `false` for turning off autoplay.\n *\n * @type {Number|Boolean}\n */\n autoplay: false,\n\n /**\n * Stop autoplay on mouseover event.\n *\n * @type {Boolean}\n */\n hoverpause: true,\n\n /**\n * Allow for changing slides with left and right keyboard arrows.\n *\n * @type {Boolean}\n */\n keyboard: true,\n\n /**\n * Stop running `perView` number of slides from the end. Use this\n * option if you don't want to have an empty space after\n * a slider. Works only with `slider` type and a\n * non-centered `focusAt` setting.\n *\n * @type {Boolean}\n */\n bound: false,\n\n /**\n * Minimal swipe distance needed to change the slide. Use `false` for turning off a swiping.\n *\n * @type {Number|Boolean}\n */\n swipeThreshold: 80,\n\n /**\n * Minimal mouse drag distance needed to change the slide. Use `false` for turning off a dragging.\n *\n * @type {Number|Boolean}\n */\n dragThreshold: 120,\n\n /**\n * A maximum number of slides to which movement will be made on swiping or dragging. Use `false` for unlimited.\n *\n * @type {Number|Boolean}\n */\n perTouch: false,\n\n /**\n * Moving distance ratio of the slides on a swiping and dragging.\n *\n * @type {Number}\n */\n touchRatio: 0.5,\n\n /**\n * Angle required to activate slides moving on swiping or dragging.\n *\n * @type {Number}\n */\n touchAngle: 45,\n\n /**\n * Duration of the animation in milliseconds.\n *\n * @type {Number}\n */\n animationDuration: 400,\n\n /**\n * Allows looping the `slider` type. Slider will rewind to the first/last slide when it's at the start/end.\n *\n * @type {Boolean}\n */\n rewind: true,\n\n /**\n * Duration of the rewinding animation of the `slider` type in milliseconds.\n *\n * @type {Number}\n */\n rewindDuration: 800,\n\n /**\n * Easing function for the animation.\n *\n * @type {String}\n */\n animationTimingFunc: 'cubic-bezier(.165, .840, .440, 1)',\n\n /**\n * Throttle costly events at most once per every wait milliseconds.\n *\n * @type {Number}\n */\n throttle: 10,\n\n /**\n * Moving direction mode.\n *\n * Available inputs:\n * - 'ltr' - left to right movement,\n * - 'rtl' - right to left movement.\n *\n * @type {String}\n */\n direction: 'ltr',\n\n /**\n * The distance value of the next and previous viewports which\n * have to peek in the current view. Accepts number and\n * pixels as a string. Left and right peeking can be\n * set up separately with a directions object.\n *\n * For example:\n * `100` - Peek 100px on the both sides.\n * { before: 100, after: 50 }` - Peek 100px on the left side and 50px on the right side.\n *\n * @type {Number|String|Object}\n */\n peek: 0,\n\n /**\n * Collection of options applied at specified media breakpoints.\n * For example: display two slides per view under 800px.\n * `{\n * '800px': {\n * perView: 2\n * }\n * }`\n */\n breakpoints: {},\n\n /**\n * Collection of internally used HTML classes.\n *\n * @todo Refactor `slider` and `carousel` properties to single `type: { slider: '', carousel: '' }` object\n * @type {Object}\n */\n classes: {\n direction: {\n ltr: 'glide--ltr',\n rtl: 'glide--rtl'\n },\n slider: 'glide--slider',\n carousel: 'glide--carousel',\n swipeable: 'glide--swipeable',\n dragging: 'glide--dragging',\n cloneSlide: 'glide__slide--clone',\n activeNav: 'glide__bullet--active',\n activeSlide: 'glide__slide--active',\n disabledArrow: 'glide__arrow--disabled'\n }\n};\n\n/**\n * Outputs warning message to the bowser console.\n *\n * @param {String} msg\n * @return {Void}\n */\nfunction warn(msg) {\n console.error(\"[Glide warn]: \" + msg);\n}\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n return typeof obj;\n} : function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar 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\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar get = function get(object, property, receiver) {\n if (object === null) object = Function.prototype;\n var desc = Object.getOwnPropertyDescriptor(object, property);\n\n if (desc === undefined) {\n var parent = Object.getPrototypeOf(object);\n\n if (parent === null) {\n return undefined;\n } else {\n return get(parent, property, receiver);\n }\n } else if (\"value\" in desc) {\n return desc.value;\n } else {\n var getter = desc.get;\n\n if (getter === undefined) {\n return undefined;\n }\n\n return getter.call(receiver);\n }\n};\n\nvar inherits = function (subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\nvar possibleConstructorReturn = function (self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n/**\n * Converts value entered as number\n * or string to integer value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toInt(value) {\n return parseInt(value);\n}\n\n/**\n * Converts value entered as number\n * or string to flat value.\n *\n * @param {String} value\n * @returns {Number}\n */\nfunction toFloat(value) {\n return parseFloat(value);\n}\n\n/**\n * Indicates whether the specified value is a string.\n *\n * @param {*} value\n * @return {Boolean}\n */\nfunction isString(value) {\n return typeof value === 'string';\n}\n\n/**\n * Indicates whether the specified value is an object.\n *\n * @param {*} value\n * @return {Boolean}\n *\n * @see https://github.com/jashkenas/underscore\n */\nfunction isObject(value) {\n var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);\n\n return type === 'function' || type === 'object' && !!value; // eslint-disable-line no-mixed-operators\n}\n\n/**\n * Indicates whether the specified value is a number.\n *\n * @param {*} value\n * @return {Boolean}\n */\nfunction isNumber(value) {\n return typeof value === 'number';\n}\n\n/**\n * Indicates whether the specified value is a function.\n *\n * @param {*} value\n * @return {Boolean}\n */\nfunction isFunction(value) {\n return typeof value === 'function';\n}\n\n/**\n * Indicates whether the specified value is undefined.\n *\n * @param {*} value\n * @return {Boolean}\n */\nfunction isUndefined(value) {\n return typeof value === 'undefined';\n}\n\n/**\n * Indicates whether the specified value is an array.\n *\n * @param {*} value\n * @return {Boolean}\n */\nfunction isArray(value) {\n return value.constructor === Array;\n}\n\n/**\n * Creates and initializes specified collection of extensions.\n * Each extension receives access to instance of glide and rest of components.\n *\n * @param {Object} glide\n * @param {Object} extensions\n *\n * @returns {Object}\n */\nfunction mount(glide, extensions, events) {\n var components = {};\n\n for (var name in extensions) {\n if (isFunction(extensions[name])) {\n components[name] = extensions[name](glide, components, events);\n } else {\n warn('Extension must be a function');\n }\n }\n\n for (var _name in components) {\n if (isFunction(components[_name].mount)) {\n components[_name].mount();\n }\n }\n\n return components;\n}\n\n/**\n * Defines getter and setter property on the specified object.\n *\n * @param {Object} obj Object where property has to be defined.\n * @param {String} prop Name of the defined property.\n * @param {Object} definition Get and set definitions for the property.\n * @return {Void}\n */\nfunction define(obj, prop, definition) {\n Object.defineProperty(obj, prop, definition);\n}\n\n/**\n * Sorts aphabetically object keys.\n *\n * @param {Object} obj\n * @return {Object}\n */\nfunction sortKeys(obj) {\n return Object.keys(obj).sort().reduce(function (r, k) {\n r[k] = obj[k];\n\n return r[k], r;\n }, {});\n}\n\n/**\n * Merges passed settings object with default options.\n *\n * @param {Object} defaults\n * @param {Object} settings\n * @return {Object}\n */\nfunction mergeOptions(defaults, settings) {\n var options = _extends({}, defaults, settings);\n\n // `Object.assign` do not deeply merge objects, so we\n // have to do it manually for every nested object\n // in options. Although it does not look smart,\n // it's smaller and faster than some fancy\n // merging deep-merge algorithm script.\n if (settings.hasOwnProperty('classes')) {\n options.classes = _extends({}, defaults.classes, settings.classes);\n\n if (settings.classes.hasOwnProperty('direction')) {\n options.classes.direction = _extends({}, defaults.classes.direction, settings.classes.direction);\n }\n }\n\n if (settings.hasOwnProperty('breakpoints')) {\n options.breakpoints = _extends({}, defaults.breakpoints, settings.breakpoints);\n }\n\n return options;\n}\n\nvar EventsBus = function () {\n /**\n * Construct a EventBus instance.\n *\n * @param {Object} events\n */\n function EventsBus() {\n var events = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, EventsBus);\n\n this.events = events;\n this.hop = events.hasOwnProperty;\n }\n\n /**\n * Adds listener to the specifed event.\n *\n * @param {String|Array} event\n * @param {Function} handler\n */\n\n\n createClass(EventsBus, [{\n key: 'on',\n value: function on(event, handler) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.on(event[i], handler);\n }\n }\n\n // Create the event's object if not yet created\n if (!this.hop.call(this.events, event)) {\n this.events[event] = [];\n }\n\n // Add the handler to queue\n var index = this.events[event].push(handler) - 1;\n\n // Provide handle back for removal of event\n return {\n remove: function remove() {\n delete this.events[event][index];\n }\n };\n }\n\n /**\n * Runs registered handlers for specified event.\n *\n * @param {String|Array} event\n * @param {Object=} context\n */\n\n }, {\n key: 'emit',\n value: function emit(event, context) {\n if (isArray(event)) {\n for (var i = 0; i < event.length; i++) {\n this.emit(event[i], context);\n }\n }\n\n // If the event doesn't exist, or there's no handlers in queue, just leave\n if (!this.hop.call(this.events, event)) {\n return;\n }\n\n // Cycle through events queue, fire!\n this.events[event].forEach(function (item) {\n item(context || {});\n });\n }\n }]);\n return EventsBus;\n}();\n\nvar Glide = function () {\n /**\r\n * Construct glide.\r\n *\r\n * @param {String} selector\r\n * @param {Object} options\r\n */\n function Glide(selector) {\n var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n classCallCheck(this, Glide);\n\n this._c = {};\n this._t = [];\n this._e = new EventsBus();\n\n this.disabled = false;\n this.selector = selector;\n this.settings = mergeOptions(defaults, options);\n this.index = this.settings.startAt;\n }\n\n /**\r\n * Initializes glide.\r\n *\r\n * @param {Object} extensions Collection of extensions to initialize.\r\n * @return {Glide}\r\n */\n\n\n createClass(Glide, [{\n key: 'mount',\n value: function mount$$1() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this._e.emit('mount.before');\n\n if (isObject(extensions)) {\n this._c = mount(this, extensions, this._e);\n } else {\n warn('You need to provide a object on `mount()`');\n }\n\n this._e.emit('mount.after');\n\n return this;\n }\n\n /**\r\n * Collects an instance `translate` transformers.\r\n *\r\n * @param {Array} transformers Collection of transformers.\r\n * @return {Void}\r\n */\n\n }, {\n key: 'mutate',\n value: function mutate() {\n var transformers = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n\n if (isArray(transformers)) {\n this._t = transformers;\n } else {\n warn('You need to provide a array on `mutate()`');\n }\n\n return this;\n }\n\n /**\r\n * Updates glide with specified settings.\r\n *\r\n * @param {Object} settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'update',\n value: function update() {\n var settings = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.settings = mergeOptions(this.settings, settings);\n\n if (settings.hasOwnProperty('startAt')) {\n this.index = settings.startAt;\n }\n\n this._e.emit('update');\n\n return this;\n }\n\n /**\r\n * Change slide with specified pattern. A pattern must be in the special format:\r\n * `>` - Move one forward\r\n * `<` - Move one backward\r\n * `={i}` - Go to {i} zero-based slide (eq. '=1', will go to second slide)\r\n * `>>` - Rewinds to end (last slide)\r\n * `<<` - Rewinds to start (first slide)\r\n *\r\n * @param {String} pattern\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'go',\n value: function go(pattern) {\n this._c.Run.make(pattern);\n\n return this;\n }\n\n /**\r\n * Move track by specified distance.\r\n *\r\n * @param {String} distance\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'move',\n value: function move(distance) {\n this._c.Transition.disable();\n this._c.Move.make(distance);\n\n return this;\n }\n\n /**\r\n * Destroy instance and revert all changes done by this._c.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this._e.emit('destroy');\n\n return this;\n }\n\n /**\r\n * Start instance autoplaying.\r\n *\r\n * @param {Boolean|Number} interval Run autoplaying with passed interval regardless of `autoplay` settings\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'play',\n value: function play() {\n var interval = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n if (interval) {\n this.settings.autoplay = interval;\n }\n\n this._e.emit('play');\n\n return this;\n }\n\n /**\r\n * Stop instance autoplaying.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'pause',\n value: function pause() {\n this._e.emit('pause');\n\n return this;\n }\n\n /**\r\n * Sets glide into a idle status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'disable',\n value: function disable() {\n this.disabled = true;\n\n return this;\n }\n\n /**\r\n * Sets glide into a active status.\r\n *\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'enable',\n value: function enable() {\n this.disabled = false;\n\n return this;\n }\n\n /**\r\n * Adds cuutom event listener with handler.\r\n *\r\n * @param {String|Array} event\r\n * @param {Function} handler\r\n * @return {Glide}\r\n */\n\n }, {\n key: 'on',\n value: function on(event, handler) {\n this._e.on(event, handler);\n\n return this;\n }\n\n /**\r\n * Checks if glide is a precised type.\r\n *\r\n * @param {String} name\r\n * @return {Boolean}\r\n */\n\n }, {\n key: 'isType',\n value: function isType(name) {\n return this.settings.type === name;\n }\n\n /**\r\n * Gets value of the core options.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: 'settings',\n get: function get$$1() {\n return this._o;\n }\n\n /**\r\n * Sets value of the core options.\r\n *\r\n * @param {Object} o\r\n * @return {Void}\r\n */\n ,\n set: function set$$1(o) {\n if (isObject(o)) {\n this._o = o;\n } else {\n warn('Options must be an `object` instance.');\n }\n }\n\n /**\r\n * Gets current index of the slider.\r\n *\r\n * @return {Object}\r\n */\n\n }, {\n key: 'index',\n get: function get$$1() {\n return this._i;\n }\n\n /**\r\n * Sets current index a slider.\r\n *\r\n * @return {Object}\r\n */\n ,\n set: function set$$1(i) {\n this._i = toInt(i);\n }\n\n /**\r\n * Gets type name of the slider.\r\n *\r\n * @return {String}\r\n */\n\n }, {\n key: 'type',\n get: function get$$1() {\n return this.settings.type;\n }\n\n /**\r\n * Gets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n\n }, {\n key: 'disabled',\n get: function get$$1() {\n return this._d;\n }\n\n /**\r\n * Sets value of the idle status.\r\n *\r\n * @return {Boolean}\r\n */\n ,\n set: function set$$1(status) {\n this._d = !!status;\n }\n }]);\n return Glide;\n}();\n\nfunction Run (Glide, Components, Events) {\n var Run = {\n /**\n * Initializes autorunning of the glide.\n *\n * @return {Void}\n */\n mount: function mount() {\n this._o = false;\n },\n\n\n /**\n * Makes glides running based on the passed moving schema.\n *\n * @param {String} move\n */\n make: function make(move) {\n var _this = this;\n\n if (!Glide.disabled) {\n Glide.disable();\n\n this.move = move;\n\n Events.emit('run.before', this.move);\n\n this.calculate();\n\n Events.emit('run', this.move);\n\n Components.Transition.after(function () {\n if (_this.isStart()) {\n Events.emit('run.start', _this.move);\n }\n\n if (_this.isEnd()) {\n Events.emit('run.end', _this.move);\n }\n\n if (_this.isOffset('<') || _this.isOffset('>')) {\n _this._o = false;\n\n Events.emit('run.offset', _this.move);\n }\n\n Events.emit('run.after', _this.move);\n\n Glide.enable();\n });\n }\n },\n\n\n /**\n * Calculates current index based on defined move.\n *\n * @return {Void}\n */\n calculate: function calculate() {\n var move = this.move,\n length = this.length;\n var steps = move.steps,\n direction = move.direction;\n\n\n var countableSteps = isNumber(toInt(steps)) && toInt(steps) !== 0;\n\n switch (direction) {\n case '>':\n if (steps === '>') {\n Glide.index = length;\n } else if (this.isEnd()) {\n if (!(Glide.isType('slider') && !Glide.settings.rewind)) {\n this._o = true;\n\n Glide.index = 0;\n }\n } else if (countableSteps) {\n Glide.index += Math.min(length - Glide.index, -toInt(steps));\n } else {\n Glide.index++;\n }\n break;\n\n case '<':\n if (steps === '<') {\n Glide.index = 0;\n } else if (this.isStart()) {\n if (!(Glide.isType('slider') && !Glide.settings.rewind)) {\n this._o = true;\n\n Glide.index = length;\n }\n } else if (countableSteps) {\n Glide.index -= Math.min(Glide.index, toInt(steps));\n } else {\n Glide.index--;\n }\n break;\n\n case '=':\n Glide.index = steps;\n break;\n\n default:\n warn('Invalid direction pattern [' + direction + steps + '] has been used');\n break;\n }\n },\n\n\n /**\n * Checks if we are on the first slide.\n *\n * @return {Boolean}\n */\n isStart: function isStart() {\n return Glide.index === 0;\n },\n\n\n /**\n * Checks if we are on the last slide.\n *\n * @return {Boolean}\n */\n isEnd: function isEnd() {\n return Glide.index === this.length;\n },\n\n\n /**\n * Checks if we are making a offset run.\n *\n * @param {String} direction\n * @return {Boolean}\n */\n isOffset: function isOffset(direction) {\n return this._o && this.move.direction === direction;\n }\n };\n\n define(Run, 'move', {\n /**\n * Gets value of the move schema.\n *\n * @returns {Object}\n */\n get: function get() {\n return this._m;\n },\n\n\n /**\n * Sets value of the move schema.\n *\n * @returns {Object}\n */\n set: function set(value) {\n var step = value.substr(1);\n\n this._m = {\n direction: value.substr(0, 1),\n steps: step ? toInt(step) ? toInt(step) : step : 0\n };\n }\n });\n\n define(Run, 'length', {\n /**\n * Gets value of the running distance based\n * on zero-indexing number of slides.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n var length = Components.Html.slides.length;\n\n // If the `bound` option is acitve, a maximum running distance should be\n // reduced by `perView` and `focusAt` settings. Running distance\n // should end before creating an empty space after instance.\n\n if (Glide.isType('slider') && settings.focusAt !== 'center' && settings.bound) {\n return length - 1 - (toInt(settings.perView) - 1) + toInt(settings.focusAt);\n }\n\n return length - 1;\n }\n });\n\n define(Run, 'offset', {\n /**\n * Gets status of the offsetting flag.\n *\n * @return {Boolean}\n */\n get: function get() {\n return this._o;\n }\n });\n\n return Run;\n}\n\n/**\n * Returns a current time.\n *\n * @return {Number}\n */\nfunction now() {\n return new Date().getTime();\n}\n\n/**\n * Returns a function, that, when invoked, will only be triggered\n * at most once during a given window of time.\n *\n * @param {Function} func\n * @param {Number} wait\n * @param {Object=} options\n * @return {Function}\n *\n * @see https://github.com/jashkenas/underscore\n */\nfunction throttle(func, wait, options) {\n var timeout = void 0,\n context = void 0,\n args = void 0,\n result = void 0;\n var previous = 0;\n if (!options) options = {};\n\n var later = function later() {\n previous = options.leading === false ? 0 : now();\n timeout = null;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n };\n\n var throttled = function throttled() {\n var at = now();\n if (!previous && options.leading === false) previous = at;\n var remaining = wait - (at - previous);\n context = this;\n args = arguments;\n if (remaining <= 0 || remaining > wait) {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n previous = at;\n result = func.apply(context, args);\n if (!timeout) context = args = null;\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n return result;\n };\n\n throttled.cancel = function () {\n clearTimeout(timeout);\n previous = 0;\n timeout = context = args = null;\n };\n\n return throttled;\n}\n\nvar MARGIN_TYPE = {\n ltr: ['marginLeft', 'marginRight'],\n rtl: ['marginRight', 'marginLeft']\n};\n\nfunction Gaps (Glide, Components, Events) {\n var Gaps = {\n /**\n * Applies gaps between slides. First and last\n * slides do not receive it's edge margins.\n *\n * @param {HTMLCollection} slides\n * @return {Void}\n */\n apply: function apply(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n var direction = Components.Direction.value;\n\n if (i !== 0) {\n style[MARGIN_TYPE[direction][0]] = this.value / 2 + 'px';\n } else {\n style[MARGIN_TYPE[direction][0]] = '';\n }\n\n if (i !== slides.length - 1) {\n style[MARGIN_TYPE[direction][1]] = this.value / 2 + 'px';\n } else {\n style[MARGIN_TYPE[direction][1]] = '';\n }\n }\n },\n\n\n /**\n * Removes gaps from the slides.\n *\n * @param {HTMLCollection} slides\n * @returns {Void}\n */\n remove: function remove(slides) {\n for (var i = 0, len = slides.length; i < len; i++) {\n var style = slides[i].style;\n\n style.marginLeft = '';\n style.marginRight = '';\n }\n }\n };\n\n define(Gaps, 'value', {\n /**\n * Gets value of the gap.\n *\n * @returns {Number}\n */\n get: function get() {\n return toInt(Glide.settings.gap);\n }\n });\n\n define(Gaps, 'grow', {\n /**\n * Gets additional dimentions value caused by gaps.\n * Used to increase width of the slides wrapper.\n *\n * @returns {Number}\n */\n get: function get() {\n return Gaps.value * (Components.Sizes.length - 1);\n }\n });\n\n define(Gaps, 'reductor', {\n /**\n * Gets reduction value caused by gaps.\n * Used to subtract width of the slides.\n *\n * @returns {Number}\n */\n get: function get() {\n var perView = Glide.settings.perView;\n\n return Gaps.value * (perView - 1) / perView;\n }\n });\n\n /**\n * Apply calculated gaps:\n * - after building, so slides (including clones) will receive proper margins\n * - on updating via API, to recalculate gaps with new options\n */\n Events.on(['build.after', 'update'], throttle(function () {\n Gaps.apply(Components.Html.wrapper.children);\n }, 30));\n\n /**\n * Remove gaps:\n * - on destroying to bring markup to its inital state\n */\n Events.on('destroy', function () {\n Gaps.remove(Components.Html.wrapper.children);\n });\n\n return Gaps;\n}\n\n/**\n * Finds siblings nodes of the passed node.\n *\n * @param {Element} node\n * @return {Array}\n */\nfunction siblings(node) {\n if (node && node.parentNode) {\n var n = node.parentNode.firstChild;\n var matched = [];\n\n for (; n; n = n.nextSibling) {\n if (n.nodeType === 1 && n !== node) {\n matched.push(n);\n }\n }\n\n return matched;\n }\n\n return [];\n}\n\n/**\n * Checks if passed node exist and is a valid element.\n *\n * @param {Element} node\n * @return {Boolean}\n */\nfunction exist(node) {\n if (node && node instanceof window.HTMLElement) {\n return true;\n }\n\n return false;\n}\n\nvar TRACK_SELECTOR = '[data-glide-el=\"track\"]';\n\nfunction Html (Glide, Components) {\n var Html = {\n /**\n * Setup slider HTML nodes.\n *\n * @param {Glide} glide\n */\n mount: function mount() {\n this.root = Glide.selector;\n this.track = this.root.querySelector(TRACK_SELECTOR);\n this.slides = Array.prototype.slice.call(this.wrapper.children).filter(function (slide) {\n return !slide.classList.contains(Glide.settings.classes.cloneSlide);\n });\n }\n };\n\n define(Html, 'root', {\n /**\n * Gets node of the glide main element.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._r;\n },\n\n\n /**\n * Sets node of the glide main element.\n *\n * @return {Object}\n */\n set: function set(r) {\n if (isString(r)) {\n r = document.querySelector(r);\n }\n\n if (exist(r)) {\n Html._r = r;\n } else {\n warn('Root element must be a existing Html node');\n }\n }\n });\n\n define(Html, 'track', {\n /**\n * Gets node of the glide track with slides.\n *\n * @return {Object}\n */\n get: function get() {\n return Html._t;\n },\n\n\n /**\n * Sets node of the glide track with slides.\n *\n * @return {Object}\n */\n set: function set(t) {\n if (exist(t)) {\n Html._t = t;\n } else {\n warn('Could not find track element. Please use ' + TRACK_SELECTOR + ' attribute.');\n }\n }\n });\n\n define(Html, 'wrapper', {\n /**\n * Gets node of the slides wrapper.\n *\n * @return {Object}\n */\n get: function get() {\n return Html.track.children[0];\n }\n });\n\n return Html;\n}\n\nfunction Peek (Glide, Components, Events) {\n var Peek = {\n /**\n * Setups how much to peek based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.peek;\n }\n };\n\n define(Peek, 'value', {\n /**\n * Gets value of the peek.\n *\n * @returns {Number|Object}\n */\n get: function get() {\n return Peek._v;\n },\n\n\n /**\n * Sets value of the peek.\n *\n * @param {Number|Object} value\n * @return {Void}\n */\n set: function set(value) {\n if (isObject(value)) {\n value.before = toInt(value.before);\n value.after = toInt(value.after);\n } else {\n value = toInt(value);\n }\n\n Peek._v = value;\n }\n });\n\n define(Peek, 'reductor', {\n /**\n * Gets reduction value caused by peek.\n *\n * @returns {Number}\n */\n get: function get() {\n var value = Peek.value;\n var perView = Glide.settings.perView;\n\n if (isObject(value)) {\n return value.before / perView + value.after / perView;\n }\n\n return value * 2 / perView;\n }\n });\n\n /**\n * Recalculate peeking sizes on:\n * - when resizing window to update to proper percents\n */\n Events.on(['resize', 'update'], function () {\n Peek.mount();\n });\n\n return Peek;\n}\n\nfunction Move (Glide, Components, Events) {\n var Move = {\n /**\n * Constructs move component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n this._o = 0;\n },\n\n\n /**\n * Calculates a movement value based on passed offset and currently active index.\n *\n * @param {Number} offset\n * @return {Void}\n */\n make: function make() {\n var _this = this;\n\n var offset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n this.offset = offset;\n\n Events.emit('move', {\n movement: this.value\n });\n\n Components.Transition.after(function () {\n Events.emit('move.after', {\n movement: _this.value\n });\n });\n }\n };\n\n define(Move, 'offset', {\n /**\n * Gets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n get: function get() {\n return Move._o;\n },\n\n\n /**\n * Sets an offset value used to modify current translate.\n *\n * @return {Object}\n */\n set: function set(value) {\n Move._o = !isUndefined(value) ? toInt(value) : 0;\n }\n });\n\n define(Move, 'translate', {\n /**\n * Gets a raw movement value.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Sizes.slideWidth * Glide.index;\n }\n });\n\n define(Move, 'value', {\n /**\n * Gets an actual movement value corrected by offset.\n *\n * @return {Number}\n */\n get: function get() {\n var offset = this.offset;\n var translate = this.translate;\n\n if (Components.Direction.is('rtl')) {\n return translate + offset;\n }\n\n return translate - offset;\n }\n });\n\n /**\n * Make movement to proper slide on:\n * - before build, so glide will start at `startAt` index\n * - on each standard run to move to newly calculated index\n */\n Events.on(['build.before', 'run'], function () {\n Move.make();\n });\n\n return Move;\n}\n\nfunction Sizes (Glide, Components, Events) {\n var Sizes = {\n /**\n * Setups dimentions of slides.\n *\n * @return {Void}\n */\n setupSlides: function setupSlides() {\n var width = this.slideWidth + 'px';\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = width;\n }\n },\n\n\n /**\n * Setups dimentions of slides wrapper.\n *\n * @return {Void}\n */\n setupWrapper: function setupWrapper(dimention) {\n Components.Html.wrapper.style.width = this.wrapperSize + 'px';\n },\n\n\n /**\n * Removes applied styles from HTML elements.\n *\n * @returns {Void}\n */\n remove: function remove() {\n var slides = Components.Html.slides;\n\n for (var i = 0; i < slides.length; i++) {\n slides[i].style.width = '';\n }\n\n Components.Html.wrapper.style.width = '';\n }\n };\n\n define(Sizes, 'length', {\n /**\n * Gets count number of the slides.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.slides.length;\n }\n });\n\n define(Sizes, 'width', {\n /**\n * Gets width value of the glide.\n *\n * @return {Number}\n */\n get: function get() {\n return Components.Html.root.offsetWidth;\n }\n });\n\n define(Sizes, 'wrapperSize', {\n /**\n * Gets size of the slides wrapper.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.slideWidth * Sizes.length + Components.Gaps.grow + Components.Clones.grow;\n }\n });\n\n define(Sizes, 'slideWidth', {\n /**\n * Gets width value of the single slide.\n *\n * @return {Number}\n */\n get: function get() {\n return Sizes.width / Glide.settings.perView - Components.Peek.reductor - Components.Gaps.reductor;\n }\n });\n\n /**\n * Apply calculated glide's dimensions:\n * - before building, so other dimentions (e.g. translate) will be calculated propertly\n * - when resizing window to recalculate sildes dimensions\n * - on updating via API, to calculate dimensions based on new options\n */\n Events.on(['build.before', 'resize', 'update'], function () {\n Sizes.setupSlides();\n Sizes.setupWrapper();\n });\n\n /**\n * Remove calculated glide's dimensions:\n * - on destoting to bring markup to its inital state\n */\n Events.on('destroy', function () {\n Sizes.remove();\n });\n\n return Sizes;\n}\n\nfunction Build (Glide, Components, Events) {\n var Build = {\n /**\n * Init glide building. Adds classes, sets\n * dimensions and setups initial state.\n *\n * @return {Void}\n */\n mount: function mount() {\n Events.emit('build.before');\n\n this.typeClass();\n this.activeClass();\n\n Events.emit('build.after');\n },\n\n\n /**\n * Adds `type` class to the glide element.\n *\n * @return {Void}\n */\n typeClass: function typeClass() {\n Components.Html.root.classList.add(Glide.settings.classes[Glide.settings.type]);\n },\n\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n activeClass: function activeClass() {\n var classes = Glide.settings.classes;\n var slide = Components.Html.slides[Glide.index];\n\n if (slide) {\n slide.classList.add(classes.activeSlide);\n\n siblings(slide).forEach(function (sibling) {\n sibling.classList.remove(classes.activeSlide);\n });\n }\n },\n\n\n /**\n * Removes HTML classes applied at building.\n *\n * @return {Void}\n */\n removeClasses: function removeClasses() {\n var classes = Glide.settings.classes;\n\n Components.Html.root.classList.remove(classes[Glide.settings.type]);\n\n Components.Html.slides.forEach(function (sibling) {\n sibling.classList.remove(classes.activeSlide);\n });\n }\n };\n\n /**\n * Clear building classes:\n * - on destroying to bring HTML to its initial state\n * - on updating to remove classes before remounting component\n */\n Events.on(['destroy', 'update'], function () {\n Build.removeClasses();\n });\n\n /**\n * Remount component:\n * - on resizing of the window to calculate new dimentions\n * - on updating settings via API\n */\n Events.on(['resize', 'update'], function () {\n Build.mount();\n });\n\n /**\n * Swap active class of current slide:\n * - after each move to the new index\n */\n Events.on('move.after', function () {\n Build.activeClass();\n });\n\n return Build;\n}\n\nfunction Clones (Glide, Components, Events) {\n var Clones = {\n /**\n * Create pattern map and collect slides to be cloned.\n */\n mount: function mount() {\n this.items = [];\n\n if (Glide.isType('carousel')) {\n this.items = this.collect();\n }\n },\n\n\n /**\n * Collect clones with pattern.\n *\n * @return {Void}\n */\n collect: function collect() {\n var items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n var slides = Components.Html.slides;\n var _Glide$settings = Glide.settings,\n perView = _Glide$settings.perView,\n classes = _Glide$settings.classes;\n\n\n var peekIncrementer = +!!Glide.settings.peek;\n var part = perView + peekIncrementer;\n var start = slides.slice(0, part);\n var end = slides.slice(-part);\n\n for (var r = 0; r < Math.max(1, Math.floor(perView / slides.length)); r++) {\n for (var i = 0; i < start.length; i++) {\n var clone = start[i].cloneNode(true);\n\n clone.classList.add(classes.cloneSlide);\n\n items.push(clone);\n }\n\n for (var _i = 0; _i < end.length; _i++) {\n var _clone = end[_i].cloneNode(true);\n\n _clone.classList.add(classes.cloneSlide);\n\n items.unshift(_clone);\n }\n }\n\n return items;\n },\n\n\n /**\n * Append cloned slides with generated pattern.\n *\n * @return {Void}\n */\n append: function append() {\n var items = this.items;\n var _Components$Html = Components.Html,\n wrapper = _Components$Html.wrapper,\n slides = _Components$Html.slides;\n\n\n var half = Math.floor(items.length / 2);\n var prepend = items.slice(0, half).reverse();\n var append = items.slice(half, items.length);\n var width = Components.Sizes.slideWidth + 'px';\n\n for (var i = 0; i < append.length; i++) {\n wrapper.appendChild(append[i]);\n }\n\n for (var _i2 = 0; _i2 < prepend.length; _i2++) {\n wrapper.insertBefore(prepend[_i2], slides[0]);\n }\n\n for (var _i3 = 0; _i3 < items.length; _i3++) {\n items[_i3].style.width = width;\n }\n },\n\n\n /**\n * Remove all cloned slides.\n *\n * @return {Void}\n */\n remove: function remove() {\n var items = this.items;\n\n\n for (var i = 0; i < items.length; i++) {\n Components.Html.wrapper.removeChild(items[i]);\n }\n }\n };\n\n define(Clones, 'grow', {\n /**\n * Gets additional dimentions value caused by clones.\n *\n * @return {Number}\n */\n get: function get() {\n return (Components.Sizes.slideWidth + Components.Gaps.value) * Clones.items.length;\n }\n });\n\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n Events.on('update', function () {\n Clones.remove();\n Clones.mount();\n Clones.append();\n });\n\n /**\n * Append additional slide's clones:\n * - while glide's type is `carousel`\n */\n Events.on('build.before', function () {\n if (Glide.isType('carousel')) {\n Clones.append();\n }\n });\n\n /**\n * Remove clones HTMLElements:\n * - on destroying, to bring HTML to its initial state\n */\n Events.on('destroy', function () {\n Clones.remove();\n });\n\n return Clones;\n}\n\nvar EventsBinder = function () {\n /**\n * Construct a EventsBinder instance.\n */\n function EventsBinder() {\n var listeners = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n classCallCheck(this, EventsBinder);\n\n this.listeners = listeners;\n }\n\n /**\n * Adds events listeners to arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Function} closure\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n\n createClass(EventsBinder, [{\n key: 'on',\n value: function on(events, el, closure) {\n var capture = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n this.listeners[events[i]] = closure;\n\n el.addEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n\n /**\n * Removes event listeners from arrows HTML elements.\n *\n * @param {String|Array} events\n * @param {Element|Window|Document} el\n * @param {Boolean|Object} capture\n * @return {Void}\n */\n\n }, {\n key: 'off',\n value: function off(events, el) {\n var capture = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n if (isString(events)) {\n events = [events];\n }\n\n for (var i = 0; i < events.length; i++) {\n el.removeEventListener(events[i], this.listeners[events[i]], capture);\n }\n }\n\n /**\n * Destroy collected listeners.\n *\n * @returns {Void}\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n delete this.listeners;\n }\n }]);\n return EventsBinder;\n}();\n\nfunction Resize (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n var Resize = {\n /**\n * Initializes window bindings.\n */\n mount: function mount() {\n this.bind();\n },\n\n\n /**\n * Binds `rezsize` listener to the window.\n * It's a costly event, so we are debouncing it.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('resize', window, throttle(function () {\n Events.emit('resize');\n }, Glide.settings.throttle));\n },\n\n\n /**\n * Unbinds listeners from the window.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('resize', window);\n }\n };\n\n /**\n * Remove bindings from window:\n * - on destroying, to remove added EventListener\n */\n Events.on('destroy', function () {\n Resize.unbind();\n Binder.destroy();\n });\n\n return Resize;\n}\n\nvar VALID_DIRECTIONS = ['ltr', 'rtl'];\nvar FLIPED_MOVEMENTS = {\n '>': '<',\n '<': '>',\n '=': '='\n};\n\nfunction Direction (Glide, Components, Events) {\n var Direction = {\n /**\n * Setups gap value based on settings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.value = Glide.settings.direction;\n },\n\n\n /**\n * Resolves pattern based on direction value\n *\n * @param {String} pattern\n * @returns {String}\n */\n resolve: function resolve(pattern) {\n var token = pattern.slice(0, 1);\n\n if (this.is('rtl')) {\n return pattern.split(token).join(FLIPED_MOVEMENTS[token]);\n }\n\n return pattern;\n },\n\n\n /**\n * Checks value of direction mode.\n *\n * @param {String} direction\n * @returns {Boolean}\n */\n is: function is(direction) {\n return this.value === direction;\n },\n\n\n /**\n * Applies direction class to the root HTML element.\n *\n * @return {Void}\n */\n addClass: function addClass() {\n Components.Html.root.classList.add(Glide.settings.classes.direction[this.value]);\n },\n\n\n /**\n * Removes direction class from the root HTML element.\n *\n * @return {Void}\n */\n removeClass: function removeClass() {\n Components.Html.root.classList.remove(Glide.settings.classes.direction[this.value]);\n }\n };\n\n define(Direction, 'value', {\n /**\n * Gets value of the direction.\n *\n * @returns {Number}\n */\n get: function get() {\n return Direction._v;\n },\n\n\n /**\n * Sets value of the direction.\n *\n * @param {String} value\n * @return {Void}\n */\n set: function set(value) {\n if (VALID_DIRECTIONS.indexOf(value) > -1) {\n Direction._v = value;\n } else {\n warn('Direction value must be `ltr` or `rtl`');\n }\n }\n });\n\n /**\n * Clear direction class:\n * - on destroy to bring HTML to its initial state\n * - on update to remove class before reappling bellow\n */\n Events.on(['destroy', 'update'], function () {\n Direction.removeClass();\n });\n\n /**\n * Remount component:\n * - on update to reflect changes in direction value\n */\n Events.on('update', function () {\n Direction.mount();\n });\n\n /**\n * Apply direction class:\n * - before building to apply class for the first time\n * - on updating to reapply direction class that may changed\n */\n Events.on(['build.before', 'update'], function () {\n Direction.addClass();\n });\n\n return Direction;\n}\n\n/**\n * Reflects value of glide movement.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Rtl (Glide, Components) {\n return {\n /**\n * Negates the passed translate if glide is in RTL option.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Components.Direction.is('rtl')) {\n return -translate;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `gap` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Gap (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with number in the `gap` settings.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Gaps.value * Glide.index;\n }\n };\n}\n\n/**\n * Updates glide movement with width of additional clones width.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Grow (Glide, Components) {\n return {\n /**\n * Adds to the passed translate width of the half of clones.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n return translate + Components.Clones.grow / 2;\n }\n };\n}\n\n/**\n * Updates glide movement with a `peek` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Peeking (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with a `peek` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n if (Glide.settings.focusAt >= 0) {\n var peek = Components.Peek.value;\n\n if (isObject(peek)) {\n return translate - peek.before;\n }\n\n return translate - peek;\n }\n\n return translate;\n }\n };\n}\n\n/**\n * Updates glide movement with a `focusAt` settings.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction Focusing (Glide, Components) {\n return {\n /**\n * Modifies passed translate value with index in the `focusAt` setting.\n *\n * @param {Number} translate\n * @return {Number}\n */\n modify: function modify(translate) {\n var gap = Components.Gaps.value;\n var width = Components.Sizes.width;\n var focusAt = Glide.settings.focusAt;\n var slideWidth = Components.Sizes.slideWidth;\n\n if (focusAt === 'center') {\n return translate - (width / 2 - slideWidth / 2);\n }\n\n return translate - slideWidth * focusAt - gap * focusAt;\n }\n };\n}\n\n/**\n * Applies diffrent transformers on translate value.\n *\n * @param {Object} Glide\n * @param {Object} Components\n * @return {Object}\n */\nfunction mutator (Glide, Components, Events) {\n /**\n * Merge instance transformers with collection of default transformers.\n * It's important that the Rtl component be last on the list,\n * so it reflects all previous transformations.\n *\n * @type {Array}\n */\n var TRANSFORMERS = [Gap, Grow, Peeking, Focusing].concat(Glide._t, [Rtl]);\n\n return {\n /**\n * Piplines translate value with registered transformers.\n *\n * @param {Number} translate\n * @return {Number}\n */\n mutate: function mutate(translate) {\n for (var i = 0; i < TRANSFORMERS.length; i++) {\n var transformer = TRANSFORMERS[i];\n\n if (isFunction(transformer) && isFunction(transformer().modify)) {\n translate = transformer(Glide, Components, Events).modify(translate);\n } else {\n warn('Transformer should be a function that returns an object with `modify()` method');\n }\n }\n\n return translate;\n }\n };\n}\n\nfunction Translate (Glide, Components, Events) {\n var Translate = {\n /**\n * Sets value of translate on HTML element.\n *\n * @param {Number} value\n * @return {Void}\n */\n set: function set(value) {\n var transform = mutator(Glide, Components).mutate(value);\n\n Components.Html.wrapper.style.transform = 'translate3d(' + -1 * transform + 'px, 0px, 0px)';\n },\n\n\n /**\n * Removes value of translate from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transform = '';\n }\n };\n\n /**\n * Set new translate value:\n * - on move to reflect index change\n * - on updating via API to reflect possible changes in options\n */\n Events.on('move', function (context) {\n var gap = Components.Gaps.value;\n var length = Components.Sizes.length;\n var width = Components.Sizes.slideWidth;\n\n if (Glide.isType('carousel') && Components.Run.isOffset('<')) {\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n\n Translate.set(width * (length - 1));\n });\n\n return Translate.set(-width - gap * length);\n }\n\n if (Glide.isType('carousel') && Components.Run.isOffset('>')) {\n Components.Transition.after(function () {\n Events.emit('translate.jump');\n\n Translate.set(0);\n });\n\n return Translate.set(width * length + gap * length);\n }\n\n return Translate.set(context.movement);\n });\n\n /**\n * Remove translate:\n * - on destroying to bring markup to its inital state\n */\n Events.on('destroy', function () {\n Translate.remove();\n });\n\n return Translate;\n}\n\nfunction Transition (Glide, Components, Events) {\n /**\n * Holds inactivity status of transition.\n * When true transition is not applied.\n *\n * @type {Boolean}\n */\n var disabled = false;\n\n var Transition = {\n /**\n * Composes string of the CSS transition.\n *\n * @param {String} property\n * @return {String}\n */\n compose: function compose(property) {\n var settings = Glide.settings;\n\n if (!disabled) {\n return property + ' ' + this.duration + 'ms ' + settings.animationTimingFunc;\n }\n\n return property + ' 0ms ' + settings.animationTimingFunc;\n },\n\n\n /**\n * Sets value of transition on HTML element.\n *\n * @param {String=} property\n * @return {Void}\n */\n set: function set() {\n var property = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'transform';\n\n Components.Html.wrapper.style.transition = this.compose(property);\n },\n\n\n /**\n * Removes value of transition from HTML element.\n *\n * @return {Void}\n */\n remove: function remove() {\n Components.Html.wrapper.style.transition = '';\n },\n\n\n /**\n * Runs callback after animation.\n *\n * @param {Function} callback\n * @return {Void}\n */\n after: function after(callback) {\n setTimeout(function () {\n callback();\n }, this.duration);\n },\n\n\n /**\n * Enable transition.\n *\n * @return {Void}\n */\n enable: function enable() {\n disabled = false;\n\n this.set();\n },\n\n\n /**\n * Disable transition.\n *\n * @return {Void}\n */\n disable: function disable() {\n disabled = true;\n\n this.set();\n }\n };\n\n define(Transition, 'duration', {\n /**\n * Gets duration of the transition based\n * on currently running animation type.\n *\n * @return {Number}\n */\n get: function get() {\n var settings = Glide.settings;\n\n if (Glide.isType('slider') && Components.Run.offset) {\n return settings.rewindDuration;\n }\n\n return settings.animationDuration;\n }\n });\n\n /**\n * Set transition `style` value:\n * - on each moving, because it may be cleared by offset move\n */\n Events.on('move', function () {\n Transition.set();\n });\n\n /**\n * Disable transition:\n * - before initial build to avoid transitioning from `0` to `startAt` index\n * - while resizing window and recalculating dimentions\n * - on jumping from offset transition at start and end edges in `carousel` type\n */\n Events.on(['build.before', 'resize', 'translate.jump'], function () {\n Transition.disable();\n });\n\n /**\n * Enable transition:\n * - on each running, because it may be disabled by offset move\n */\n Events.on('run', function () {\n Transition.enable();\n });\n\n /**\n * Remove transition:\n * - on destroying to bring markup to its inital state\n */\n Events.on('destroy', function () {\n Transition.remove();\n });\n\n return Transition;\n}\n\n/**\n * Test via a getter in the options object to see\n * if the passive property is accessed.\n *\n * @see https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\n */\n\nvar supportsPassive = false;\n\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function get() {\n supportsPassive = true;\n }\n });\n\n window.addEventListener('testPassive', null, opts);\n window.removeEventListener('testPassive', null, opts);\n} catch (e) {}\n\nvar supportsPassive$1 = supportsPassive;\n\nvar START_EVENTS = ['touchstart', 'mousedown'];\nvar MOVE_EVENTS = ['touchmove', 'mousemove'];\nvar END_EVENTS = ['touchend', 'touchcancel', 'mouseup', 'mouseleave'];\nvar MOUSE_EVENTS = ['mousedown', 'mousemove', 'mouseup', 'mouseleave'];\n\nfunction Swipe (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n var swipeSin = 0;\n var swipeStartX = 0;\n var swipeStartY = 0;\n var disabled = false;\n var capture = supportsPassive$1 ? { passive: true } : false;\n\n var Swipe = {\n /**\n * Initializes swipe bindings.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bindSwipeStart();\n },\n\n\n /**\n * Handler for `swipestart` event. Calculates entry points of the user's tap.\n *\n * @param {Object} event\n * @return {Void}\n */\n start: function start(event) {\n if (!disabled && !Glide.disabled) {\n this.disable();\n\n var swipe = this.touches(event);\n\n swipeSin = null;\n swipeStartX = toInt(swipe.pageX);\n swipeStartY = toInt(swipe.pageY);\n\n this.bindSwipeMove();\n this.bindSwipeEnd();\n\n Events.emit('swipe.start');\n }\n },\n\n\n /**\n * Handler for `swipemove` event. Calculates user's tap angle and distance.\n *\n * @param {Object} event\n */\n move: function move(event) {\n if (!Glide.disabled) {\n var _Glide$settings = Glide.settings,\n touchAngle = _Glide$settings.touchAngle,\n touchRatio = _Glide$settings.touchRatio,\n classes = _Glide$settings.classes;\n\n\n var swipe = this.touches(event);\n\n var subExSx = toInt(swipe.pageX) - swipeStartX;\n var subEySy = toInt(swipe.pageY) - swipeStartY;\n var powEX = Math.abs(subExSx << 2);\n var powEY = Math.abs(subEySy << 2);\n var swipeHypotenuse = Math.sqrt(powEX + powEY);\n var swipeCathetus = Math.sqrt(powEY);\n\n swipeSin = Math.asin(swipeCathetus / swipeHypotenuse);\n\n if (swipeSin * 180 / Math.PI < touchAngle) {\n event.stopPropagation();\n\n Components.Move.make(subExSx * toFloat(touchRatio));\n\n Components.Html.root.classList.add(classes.dragging);\n\n Events.emit('swipe.move');\n } else {\n return false;\n }\n }\n },\n\n\n /**\n * Handler for `swipeend` event. Finitializes user's tap and decides about glide move.\n *\n * @param {Object} event\n * @return {Void}\n */\n end: function end(event) {\n if (!Glide.disabled) {\n var settings = Glide.settings;\n\n var swipe = this.touches(event);\n var threshold = this.threshold(event);\n\n var swipeDistance = swipe.pageX - swipeStartX;\n var swipeDeg = swipeSin * 180 / Math.PI;\n var steps = Math.round(swipeDistance / Components.Sizes.slideWidth);\n\n this.enable();\n\n if (swipeDistance > threshold && swipeDeg < settings.touchAngle) {\n // While swipe is positive and greater than threshold move backward.\n if (settings.perTouch) {\n steps = Math.min(steps, toInt(settings.perTouch));\n }\n\n if (Components.Direction.is('rtl')) {\n steps = -steps;\n }\n\n Components.Run.make(Components.Direction.resolve('<' + steps));\n } else if (swipeDistance < -threshold && swipeDeg < settings.touchAngle) {\n // While swipe is negative and lower than negative threshold move forward.\n if (settings.perTouch) {\n steps = Math.max(steps, -toInt(settings.perTouch));\n }\n\n if (Components.Direction.is('rtl')) {\n steps = -steps;\n }\n\n Components.Run.make(Components.Direction.resolve('>' + steps));\n } else {\n // While swipe don't reach distance apply previous transform.\n Components.Move.make();\n }\n\n Components.Html.root.classList.remove(settings.classes.dragging);\n\n this.unbindSwipeMove();\n this.unbindSwipeEnd();\n\n Events.emit('swipe.end');\n }\n },\n\n\n /**\n * Binds swipe's starting event.\n *\n * @return {Void}\n */\n bindSwipeStart: function bindSwipeStart() {\n var _this = this;\n\n var settings = Glide.settings;\n\n if (settings.swipeThreshold) {\n Binder.on(START_EVENTS[0], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n\n if (settings.dragThreshold) {\n Binder.on(START_EVENTS[1], Components.Html.wrapper, function (event) {\n _this.start(event);\n }, capture);\n }\n },\n\n\n /**\n * Unbinds swipe's starting event.\n *\n * @return {Void}\n */\n unbindSwipeStart: function unbindSwipeStart() {\n Binder.off(START_EVENTS[0], Components.Html.wrapper, capture);\n Binder.off(START_EVENTS[1], Components.Html.wrapper, capture);\n },\n\n\n /**\n * Binds swipe's moving event.\n *\n * @return {Void}\n */\n bindSwipeMove: function bindSwipeMove() {\n var _this2 = this;\n\n Binder.on(MOVE_EVENTS, Components.Html.wrapper, throttle(function (event) {\n _this2.move(event);\n }, Glide.settings.throttle), capture);\n },\n\n\n /**\n * Unbinds swipe's moving event.\n *\n * @return {Void}\n */\n unbindSwipeMove: function unbindSwipeMove() {\n Binder.off(MOVE_EVENTS, Components.Html.wrapper, capture);\n },\n\n\n /**\n * Binds swipe's ending event.\n *\n * @return {Void}\n */\n bindSwipeEnd: function bindSwipeEnd() {\n var _this3 = this;\n\n Binder.on(END_EVENTS, Components.Html.wrapper, function (event) {\n _this3.end(event);\n });\n },\n\n\n /**\n * Unbinds swipe's ending event.\n *\n * @return {Void}\n */\n unbindSwipeEnd: function unbindSwipeEnd() {\n Binder.off(END_EVENTS, Components.Html.wrapper);\n },\n\n\n /**\n * Normalizes event touches points accorting to different types.\n *\n * @param {Object} event\n */\n touches: function touches(event) {\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return event;\n }\n\n return event.touches[0] || event.changedTouches[0];\n },\n\n\n /**\n * Gets value of minimum swipe distance settings based on event type.\n *\n * @return {Number}\n */\n threshold: function threshold(event) {\n var settings = Glide.settings;\n\n if (MOUSE_EVENTS.indexOf(event.type) > -1) {\n return settings.dragThreshold;\n }\n\n return settings.swipeThreshold;\n },\n\n\n /**\n * Enables swipe event.\n *\n * @return {self}\n */\n enable: function enable() {\n disabled = false;\n\n Components.Transition.enable();\n\n return this;\n },\n\n\n /**\n * Disables swipe event.\n *\n * @return {self}\n */\n disable: function disable() {\n disabled = true;\n\n Components.Transition.disable();\n\n return this;\n }\n };\n\n /**\n * Add component class:\n * - after initial building\n */\n Events.on('build.after', function () {\n Components.Html.root.classList.add(Glide.settings.classes.swipeable);\n });\n\n /**\n * Remove swiping bindings:\n * - on destroying, to remove added EventListeners\n */\n Events.on('destroy', function () {\n Swipe.unbindSwipeStart();\n Swipe.unbindSwipeMove();\n Swipe.unbindSwipeEnd();\n Binder.destroy();\n });\n\n return Swipe;\n}\n\nfunction Images (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n var Images = {\n /**\n * Binds listener to glide wrapper.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.bind();\n },\n\n\n /**\n * Binds `dragstart` event on wrapper to prevent dragging images.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('dragstart', Components.Html.wrapper, this.dragstart);\n },\n\n\n /**\n * Unbinds `dragstart` event on wrapper.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('dragstart', Components.Html.wrapper);\n },\n\n\n /**\n * Event handler. Prevents dragging.\n *\n * @return {Void}\n */\n dragstart: function dragstart(event) {\n event.preventDefault();\n }\n };\n\n /**\n * Remove bindings from images:\n * - on destroying, to remove added EventListeners\n */\n Events.on('destroy', function () {\n Images.unbind();\n Binder.destroy();\n });\n\n return Images;\n}\n\nfunction Anchors (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n /**\n * Holds detaching status of anchors.\n * Prevents detaching of already detached anchors.\n *\n * @private\n * @type {Boolean}\n */\n var detached = false;\n\n /**\n * Holds preventing status of anchors.\n * If `true` redirection after click will be disabled.\n *\n * @private\n * @type {Boolean}\n */\n var prevented = false;\n\n var Anchors = {\n /**\n * Setups a initial state of anchors component.\n *\n * @returns {Void}\n */\n mount: function mount() {\n /**\n * Holds collection of anchors elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._a = Components.Html.wrapper.querySelectorAll('a');\n\n this.bind();\n },\n\n\n /**\n * Binds events to anchors inside a track.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('click', Components.Html.wrapper, this.click);\n },\n\n\n /**\n * Unbinds events attached to anchors inside a track.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('click', Components.Html.wrapper);\n },\n\n\n /**\n * Handler for click event. Prevents clicks when glide is in `prevent` status.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n if (prevented) {\n event.stopPropagation();\n event.preventDefault();\n }\n },\n\n\n /**\n * Detaches anchors click event inside glide.\n *\n * @return {self}\n */\n detach: function detach() {\n prevented = true;\n\n if (!detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = false;\n\n this.items[i].setAttribute('data-href', this.items[i].getAttribute('href'));\n\n this.items[i].removeAttribute('href');\n }\n\n detached = true;\n }\n\n return this;\n },\n\n\n /**\n * Attaches anchors click events inside glide.\n *\n * @return {self}\n */\n attach: function attach() {\n prevented = false;\n\n if (detached) {\n for (var i = 0; i < this.items.length; i++) {\n this.items[i].draggable = true;\n\n this.items[i].setAttribute('href', this.items[i].getAttribute('data-href'));\n }\n\n detached = false;\n }\n\n return this;\n }\n };\n\n define(Anchors, 'items', {\n /**\n * Gets collection of the arrows HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Anchors._a;\n }\n });\n\n /**\n * Detach anchors inside slides:\n * - on swiping, so they won't redirect to its `href` attributes\n */\n Events.on('swipe.move', function () {\n Anchors.detach();\n });\n\n /**\n * Attach anchors inside slides:\n * - after swiping and transitions ends, so they can redirect after click again\n */\n Events.on('swipe.end', function () {\n Components.Transition.after(function () {\n Anchors.attach();\n });\n });\n\n /**\n * Unbind anchors inside slides:\n * - on destroying, to bring anchors to its initial state\n */\n Events.on('destroy', function () {\n Anchors.attach();\n Anchors.unbind();\n Binder.destroy();\n });\n\n return Anchors;\n}\n\nvar NAV_SELECTOR = '[data-glide-el=\"controls[nav]\"]';\nvar CONTROLS_SELECTOR = '[data-glide-el^=\"controls\"]';\n\nfunction Controls (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n var capture = supportsPassive$1 ? { passive: true } : false;\n\n var Controls = {\n /**\n * Inits arrows. Binds events listeners\n * to the arrows HTML elements.\n *\n * @return {Void}\n */\n mount: function mount() {\n /**\n * Collection of navigation HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._n = Components.Html.root.querySelectorAll(NAV_SELECTOR);\n\n /**\n * Collection of controls HTML elements.\n *\n * @private\n * @type {HTMLCollection}\n */\n this._c = Components.Html.root.querySelectorAll(CONTROLS_SELECTOR);\n\n this.addBindings();\n },\n\n\n /**\n * Sets active class to current slide.\n *\n * @return {Void}\n */\n setActive: function setActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.addClass(this._n[i].children);\n }\n },\n\n\n /**\n * Removes active class to current slide.\n *\n * @return {Void}\n */\n removeActive: function removeActive() {\n for (var i = 0; i < this._n.length; i++) {\n this.removeClass(this._n[i].children);\n }\n },\n\n\n /**\n * Toggles active class on items inside navigation.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n addClass: function addClass(controls) {\n var settings = Glide.settings;\n var item = controls[Glide.index];\n\n if (item) {\n item.classList.add(settings.classes.activeNav);\n\n siblings(item).forEach(function (sibling) {\n sibling.classList.remove(settings.classes.activeNav);\n });\n }\n },\n\n\n /**\n * Removes active class from active control.\n *\n * @param {HTMLElement} controls\n * @return {Void}\n */\n removeClass: function removeClass(controls) {\n var item = controls[Glide.index];\n\n if (item) {\n item.classList.remove(Glide.settings.classes.activeNav);\n }\n },\n\n\n /**\n * Adds handles to the each group of controls.\n *\n * @return {Void}\n */\n addBindings: function addBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.bind(this._c[i].children);\n }\n },\n\n\n /**\n * Removes handles from the each group of controls.\n *\n * @return {Void}\n */\n removeBindings: function removeBindings() {\n for (var i = 0; i < this._c.length; i++) {\n this.unbind(this._c[i].children);\n }\n },\n\n\n /**\n * Binds events to arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n bind: function bind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.on('click', elements[i], this.click);\n Binder.on('touchstart', elements[i], this.click, capture);\n }\n },\n\n\n /**\n * Unbinds events binded to the arrows HTML elements.\n *\n * @param {HTMLCollection} elements\n * @return {Void}\n */\n unbind: function unbind(elements) {\n for (var i = 0; i < elements.length; i++) {\n Binder.off(['click', 'touchstart'], elements[i]);\n }\n },\n\n\n /**\n * Handles `click` event on the arrows HTML elements.\n * Moves slider in driection precised in\n * `data-glide-dir` attribute.\n *\n * @param {Object} event\n * @return {Void}\n */\n click: function click(event) {\n event.preventDefault();\n\n Components.Run.make(Components.Direction.resolve(event.currentTarget.getAttribute('data-glide-dir')));\n }\n };\n\n define(Controls, 'items', {\n /**\n * Gets collection of the controls HTML elements.\n *\n * @return {HTMLElement[]}\n */\n get: function get() {\n return Controls._c;\n }\n });\n\n /**\n * Swap active class of current navigation item:\n * - after mounting to set it to initial index\n * - after each move to the new index\n */\n Events.on(['mount.after', 'move.after'], function () {\n Controls.setActive();\n });\n\n /**\n * Remove bindings and HTML Classes:\n * - on destroying, to bring markup to its initial state\n */\n Events.on('destroy', function () {\n Controls.removeBindings();\n Controls.removeActive();\n Binder.destroy();\n });\n\n return Controls;\n}\n\nfunction Keyboard (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n var Keyboard = {\n /**\n * Binds keyboard events on component mount.\n *\n * @return {Void}\n */\n mount: function mount() {\n if (Glide.settings.keyboard) {\n this.bind();\n }\n },\n\n\n /**\n * Adds keyboard press events.\n *\n * @return {Void}\n */\n bind: function bind() {\n Binder.on('keyup', document, this.press);\n },\n\n\n /**\n * Removes keyboard press events.\n *\n * @return {Void}\n */\n unbind: function unbind() {\n Binder.off('keyup', document);\n },\n\n\n /**\n * Handles keyboard's arrows press and moving glide foward and backward.\n *\n * @param {Object} event\n * @return {Void}\n */\n press: function press(event) {\n if (event.keyCode === 39) {\n Components.Run.make(Components.Direction.resolve('>'));\n }\n\n if (event.keyCode === 37) {\n Components.Run.make(Components.Direction.resolve('<'));\n }\n }\n };\n\n /**\n * Remove bindings from keyboard:\n * - on destroying to remove added events\n * - on updating to remove events before remounting\n */\n Events.on(['destroy', 'update'], function () {\n Keyboard.unbind();\n });\n\n /**\n * Remount component\n * - on updating to reflect potential changes in settings\n */\n Events.on('update', function () {\n Keyboard.mount();\n });\n\n /**\n * Destroy binder:\n * - on destroying to remove listeners\n */\n Events.on('destroy', function () {\n Binder.destroy();\n });\n\n return Keyboard;\n}\n\nfunction Autoplay (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n var Autoplay = {\n /**\n * Initializes autoplaying and events.\n *\n * @return {Void}\n */\n mount: function mount() {\n this.start();\n\n if (Glide.settings.hoverpause) {\n this.bind();\n }\n },\n\n\n /**\n * Starts autoplaying in configured interval.\n *\n * @param {Boolean|Number} force Run autoplaying with passed interval regardless of `autoplay` settings\n * @return {Void}\n */\n start: function start() {\n var _this = this;\n\n if (Glide.settings.autoplay) {\n if (isUndefined(this._i)) {\n this._i = setInterval(function () {\n _this.stop();\n\n Components.Run.make('>');\n\n _this.start();\n }, this.time);\n }\n }\n },\n\n\n /**\n * Stops autorunning of the glide.\n *\n * @return {Void}\n */\n stop: function stop() {\n this._i = clearInterval(this._i);\n },\n\n\n /**\n * Stops autoplaying while mouse is over glide's area.\n *\n * @return {Void}\n */\n bind: function bind() {\n var _this2 = this;\n\n Binder.on('mouseover', Components.Html.root, function () {\n _this2.stop();\n });\n\n Binder.on('mouseout', Components.Html.root, function () {\n _this2.start();\n });\n },\n\n\n /**\n * Unbind mouseover events.\n *\n * @returns {Void}\n */\n unbind: function unbind() {\n Binder.off(['mouseover', 'mouseout'], Components.Html.root);\n }\n };\n\n define(Autoplay, 'time', {\n /**\n * Gets time period value for the autoplay interval. Prioritizes\n * times in `data-glide-autoplay` attrubutes over options.\n *\n * @return {Number}\n */\n get: function get() {\n var autoplay = Components.Html.slides[Glide.index].getAttribute('data-glide-autoplay');\n\n if (autoplay) {\n return toInt(autoplay);\n }\n\n return toInt(Glide.settings.autoplay);\n }\n });\n\n /**\n * Stop autoplaying and unbind events:\n * - on destroying, to clear defined interval\n * - on updating via API to reset interval that may changed\n */\n Events.on(['destroy', 'update'], function () {\n Autoplay.unbind();\n });\n\n /**\n * Stop autoplaying:\n * - before each run, to restart autoplaying\n * - on pausing via API\n * - on destroying, to clear defined interval\n * - while starting a swipe\n * - on updating via API to reset interval that may changed\n */\n Events.on(['run.before', 'pause', 'destroy', 'swipe.start', 'update'], function () {\n Autoplay.stop();\n });\n\n /**\n * Start autoplaying:\n * - after each run, to restart autoplaying\n * - on playing via API\n * - while ending a swipe\n */\n Events.on(['run.after', 'play', 'swipe.end'], function () {\n Autoplay.start();\n });\n\n /**\n * Remount autoplaying:\n * - on updating via API to reset interval that may changed\n */\n Events.on('update', function () {\n Autoplay.mount();\n });\n\n /**\n * Destroy a binder:\n * - on destroying glide instance to clearup listeners\n */\n Events.on('destroy', function () {\n Binder.destroy();\n });\n\n return Autoplay;\n}\n\n/**\n * Sorts keys of breakpoint object so they will be ordered from lower to bigger.\n *\n * @param {Object} points\n * @returns {Object}\n */\nfunction sortBreakpoints(points) {\n if (isObject(points)) {\n return sortKeys(points);\n } else {\n warn('Breakpoints option must be an object');\n }\n\n return {};\n}\n\nfunction Breakpoints (Glide, Components, Events) {\n /**\n * Instance of the binder for DOM Events.\n *\n * @type {EventsBinder}\n */\n var Binder = new EventsBinder();\n\n /**\n * Holds reference to settings.\n *\n * @type {Object}\n */\n var settings = Glide.settings;\n\n /**\n * Holds reference to breakpoints object in settings. Sorts breakpoints\n * from smaller to larger. It is required in order to proper\n * matching currently active breakpoint settings.\n *\n * @type {Object}\n */\n var points = sortBreakpoints(settings.breakpoints);\n\n /**\n * Cache initial settings before overwritting.\n *\n * @type {Object}\n */\n var defaults = _extends({}, settings);\n\n var Breakpoints = {\n /**\n * Matches settings for currectly matching media breakpoint.\n *\n * @param {Object} points\n * @returns {Object}\n */\n match: function match(points) {\n if (typeof window.matchMedia !== 'undefined') {\n for (var point in points) {\n if (points.hasOwnProperty(point)) {\n if (window.matchMedia('(max-width: ' + point + 'px)').matches) {\n return points[point];\n }\n }\n }\n }\n\n return defaults;\n }\n };\n\n /**\n * Overwrite instance settings with currently matching breakpoint settings.\n * This happens right after component initialization.\n */\n _extends(settings, Breakpoints.match(points));\n\n /**\n * Update glide with settings of matched brekpoint:\n * - window resize to update slider\n */\n Binder.on('resize', window, throttle(function () {\n Glide.settings = mergeOptions(settings, Breakpoints.match(points));\n }, Glide.settings.throttle));\n\n /**\n * Resort and update default settings:\n * - on reinit via API, so breakpoint matching will be performed with options\n */\n Events.on('update', function () {\n points = sortBreakpoints(points);\n\n defaults = _extends({}, settings);\n });\n\n /**\n * Unbind resize listener:\n * - on destroying, to bring markup to its initial state\n */\n Events.on('destroy', function () {\n Binder.off('resize', window);\n });\n\n return Breakpoints;\n}\n\nvar COMPONENTS = {\n // Required\n Html: Html,\n Translate: Translate,\n Transition: Transition,\n Direction: Direction,\n Peek: Peek,\n Sizes: Sizes,\n Gaps: Gaps,\n Move: Move,\n Clones: Clones,\n Resize: Resize,\n Build: Build,\n Run: Run,\n\n // Optional\n Swipe: Swipe,\n Images: Images,\n Anchors: Anchors,\n Controls: Controls,\n Keyboard: Keyboard,\n Autoplay: Autoplay,\n Breakpoints: Breakpoints\n};\n\nvar Glide$1 = function (_Core) {\n inherits(Glide$$1, _Core);\n\n function Glide$$1() {\n classCallCheck(this, Glide$$1);\n return possibleConstructorReturn(this, (Glide$$1.__proto__ || Object.getPrototypeOf(Glide$$1)).apply(this, arguments));\n }\n\n createClass(Glide$$1, [{\n key: 'mount',\n value: function mount() {\n var extensions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n return get(Glide$$1.prototype.__proto__ || Object.getPrototypeOf(Glide$$1.prototype), 'mount', this).call(this, _extends({}, COMPONENTS, extensions));\n }\n }]);\n return Glide$$1;\n}(Glide);\n\nexport default Glide$1;\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.AOS=t():e.AOS=t()}(this,function(){return function(e){function t(o){if(n[o])return n[o].exports;var i=n[o]={exports:{},id:o,loaded:!1};return e[o].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var n={};return t.m=e,t.c=n,t.p=\"dist/\",t(0)}([function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}var i=Object.assign||function(e){for(var t=1;t0&&void 0!==arguments[0]&&arguments[0];if(e&&(k=!0),k)return w=(0,y.default)(w,x),(0,b.default)(w,x.once),w},O=function(){w=(0,h.default)(),j()},M=function(){w.forEach(function(e,t){e.node.removeAttribute(\"data-aos\"),e.node.removeAttribute(\"data-aos-easing\"),e.node.removeAttribute(\"data-aos-duration\"),e.node.removeAttribute(\"data-aos-delay\")})},S=function(e){return e===!0||\"mobile\"===e&&p.default.mobile()||\"phone\"===e&&p.default.phone()||\"tablet\"===e&&p.default.tablet()||\"function\"==typeof e&&e()===!0},_=function(e){x=i(x,e),w=(0,h.default)();var t=document.all&&!window.atob;return S(x.disable)||t?M():(x.disableMutationObserver||d.default.isSupported()||(console.info('\\n aos: MutationObserver is not supported on this browser,\\n code mutations observing has been disabled.\\n You may have to call \"refreshHard()\" by yourself.\\n '),x.disableMutationObserver=!0),document.querySelector(\"body\").setAttribute(\"data-aos-easing\",x.easing),document.querySelector(\"body\").setAttribute(\"data-aos-duration\",x.duration),document.querySelector(\"body\").setAttribute(\"data-aos-delay\",x.delay),\"DOMContentLoaded\"===x.startEvent&&[\"complete\",\"interactive\"].indexOf(document.readyState)>-1?j(!0):\"load\"===x.startEvent?window.addEventListener(x.startEvent,function(){j(!0)}):document.addEventListener(x.startEvent,function(){j(!0)}),window.addEventListener(\"resize\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"orientationchange\",(0,s.default)(j,x.debounceDelay,!0)),window.addEventListener(\"scroll\",(0,u.default)(function(){(0,b.default)(w,x.once)},x.throttleDelay)),x.disableMutationObserver||d.default.ready(\"[data-aos]\",O),w)};e.exports={init:_,refresh:j,refreshHard:O}},function(e,t){},,,,,function(e,t){(function(t){\"use strict\";function n(e,t,n){function o(t){var n=b,o=v;return b=v=void 0,k=t,g=e.apply(o,n)}function r(e){return k=e,h=setTimeout(f,t),M?o(e):g}function a(e){var n=e-w,o=e-k,i=t-n;return S?j(i,y-o):i}function c(e){var n=e-w,o=e-k;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=O();return c(e)?d(e):void(h=setTimeout(f,a(e)))}function d(e){return h=void 0,_&&b?o(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),k=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(O())}function m(){var e=O(),n=c(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),o(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,k=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(s);return t=u(t)||0,i(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?x(u(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e,t,o){var r=!0,a=!0;if(\"function\"!=typeof e)throw new TypeError(s);return i(o)&&(r=\"leading\"in o?!!o.leading:r,a=\"trailing\"in o?!!o.trailing:a),n(e,t,{leading:r,maxWait:t,trailing:a})}function i(e){var t=\"undefined\"==typeof e?\"undefined\":c(e);return!!e&&(\"object\"==t||\"function\"==t)}function r(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":c(e))}function a(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":c(e))||r(e)&&k.call(e)==d}function u(e){if(\"number\"==typeof e)return e;if(a(e))return f;if(i(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=i(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(l,\"\");var n=m.test(e);return n||b.test(e)?v(e.slice(2),n?2:8):p.test(e)?f:+e}var c=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},s=\"Expected a function\",f=NaN,d=\"[object Symbol]\",l=/^\\s+|\\s+$/g,p=/^[-+]0x[0-9a-f]+$/i,m=/^0b[01]+$/i,b=/^0o[0-7]+$/i,v=parseInt,y=\"object\"==(\"undefined\"==typeof t?\"undefined\":c(t))&&t&&t.Object===Object&&t,g=\"object\"==(\"undefined\"==typeof self?\"undefined\":c(self))&&self&&self.Object===Object&&self,h=y||g||Function(\"return this\")(),w=Object.prototype,k=w.toString,x=Math.max,j=Math.min,O=function(){return h.Date.now()};e.exports=o}).call(t,function(){return this}())},function(e,t){(function(t){\"use strict\";function n(e,t,n){function i(t){var n=b,o=v;return b=v=void 0,O=t,g=e.apply(o,n)}function r(e){return O=e,h=setTimeout(f,t),M?i(e):g}function u(e){var n=e-w,o=e-O,i=t-n;return S?x(i,y-o):i}function s(e){var n=e-w,o=e-O;return void 0===w||n>=t||n<0||S&&o>=y}function f(){var e=j();return s(e)?d(e):void(h=setTimeout(f,u(e)))}function d(e){return h=void 0,_&&b?i(e):(b=v=void 0,g)}function l(){void 0!==h&&clearTimeout(h),O=0,b=w=v=h=void 0}function p(){return void 0===h?g:d(j())}function m(){var e=j(),n=s(e);if(b=arguments,v=this,w=e,n){if(void 0===h)return r(w);if(S)return h=setTimeout(f,t),i(w)}return void 0===h&&(h=setTimeout(f,t)),g}var b,v,y,g,h,w,O=0,M=!1,S=!1,_=!0;if(\"function\"!=typeof e)throw new TypeError(c);return t=a(t)||0,o(n)&&(M=!!n.leading,S=\"maxWait\"in n,y=S?k(a(n.maxWait)||0,t):y,_=\"trailing\"in n?!!n.trailing:_),m.cancel=l,m.flush=p,m}function o(e){var t=\"undefined\"==typeof e?\"undefined\":u(e);return!!e&&(\"object\"==t||\"function\"==t)}function i(e){return!!e&&\"object\"==(\"undefined\"==typeof e?\"undefined\":u(e))}function r(e){return\"symbol\"==(\"undefined\"==typeof e?\"undefined\":u(e))||i(e)&&w.call(e)==f}function a(e){if(\"number\"==typeof e)return e;if(r(e))return s;if(o(e)){var t=\"function\"==typeof e.valueOf?e.valueOf():e;e=o(t)?t+\"\":t}if(\"string\"!=typeof e)return 0===e?e:+e;e=e.replace(d,\"\");var n=p.test(e);return n||m.test(e)?b(e.slice(2),n?2:8):l.test(e)?s:+e}var u=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},c=\"Expected a function\",s=NaN,f=\"[object Symbol]\",d=/^\\s+|\\s+$/g,l=/^[-+]0x[0-9a-f]+$/i,p=/^0b[01]+$/i,m=/^0o[0-7]+$/i,b=parseInt,v=\"object\"==(\"undefined\"==typeof t?\"undefined\":u(t))&&t&&t.Object===Object&&t,y=\"object\"==(\"undefined\"==typeof self?\"undefined\":u(self))&&self&&self.Object===Object&&self,g=v||y||Function(\"return this\")(),h=Object.prototype,w=h.toString,k=Math.max,x=Math.min,j=function(){return g.Date.now()};e.exports=n}).call(t,function(){return this}())},function(e,t){\"use strict\";function n(e){var t=void 0,o=void 0,i=void 0;for(t=0;te.position?e.node.classList.add(\"aos-animate\"):\"undefined\"!=typeof o&&(\"false\"===o||!n&&\"true\"!==o)&&e.node.classList.remove(\"aos-animate\")},o=function(e,t){var o=window.pageYOffset,i=window.innerHeight;e.forEach(function(e,r){n(e,i+o,t)})};t.default=o},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(12),r=o(i),a=function(e,t){return e.forEach(function(e,n){e.node.classList.add(\"aos-init\"),e.position=(0,r.default)(e.node,t.offset)}),e};t.default=a},function(e,t,n){\"use strict\";function o(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(t,\"__esModule\",{value:!0});var i=n(13),r=o(i),a=function(e,t){var n=0,o=0,i=window.innerHeight,a={offset:e.getAttribute(\"data-aos-offset\"),anchor:e.getAttribute(\"data-aos-anchor\"),anchorPlacement:e.getAttribute(\"data-aos-anchor-placement\")};switch(a.offset&&!isNaN(a.offset)&&(o=parseInt(a.offset)),a.anchor&&document.querySelectorAll(a.anchor)&&(e=document.querySelectorAll(a.anchor)[0]),n=(0,r.default)(e).top,a.anchorPlacement){case\"top-bottom\":break;case\"center-bottom\":n+=e.offsetHeight/2;break;case\"bottom-bottom\":n+=e.offsetHeight;break;case\"top-center\":n+=i/2;break;case\"bottom-center\":n+=i/2+e.offsetHeight;break;case\"center-center\":n+=i/2+e.offsetHeight/2;break;case\"top-top\":n+=i;break;case\"bottom-top\":n+=e.offsetHeight+i;break;case\"center-top\":n+=e.offsetHeight/2+i}return a.anchorPlacement||a.offset||isNaN(t)||(o=t),n+o};t.default=a},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){for(var t=0,n=0;e&&!isNaN(e.offsetLeft)&&!isNaN(e.offsetTop);)t+=e.offsetLeft-(\"BODY\"!=e.tagName?e.scrollLeft:0),n+=e.offsetTop-(\"BODY\"!=e.tagName?e.scrollTop:0),e=e.offsetParent;return{top:n,left:t}};t.default=n},function(e,t){\"use strict\";Object.defineProperty(t,\"__esModule\",{value:!0});var n=function(e){return e=e||document.querySelectorAll(\"[data-aos]\"),Array.prototype.map.call(e,function(e){return{node:e}})};t.default=n}])});","const throttle = (func, limit) => {\n let lastFunc;\n let lastRan;\n return function() {\n const context = this;\n const args = arguments;\n if (!lastRan) {\n func.apply(context, args);\n lastRan = Date.now();\n } else {\n clearTimeout(lastFunc);\n lastFunc = setTimeout(function() {\n if (Date.now() - lastRan >= limit) {\n func.apply(context, args);\n lastRan = Date.now();\n }\n }, limit - (Date.now() - lastRan));\n }\n };\n};\n\nexport default throttle;\n","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%40/gi, '@').\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+').\n replace(/%5B/gi, '[').\n replace(/%5D/gi, ']');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @returns {string} The formatted url\n */\nmodule.exports = function buildURL(url, params, paramsSerializer) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n\n var serializedParams;\n if (paramsSerializer) {\n serializedParams = paramsSerializer(params);\n } else if (utils.isURLSearchParams(params)) {\n serializedParams = params.toString();\n } else {\n var parts = [];\n\n utils.forEach(params, function serialize(val, key) {\n if (val === null || typeof val === 'undefined') {\n return;\n }\n\n if (utils.isArray(val)) {\n key = key + '[]';\n } else {\n val = [val];\n }\n\n utils.forEach(val, function parseValue(v) {\n if (utils.isDate(v)) {\n v = v.toISOString();\n } else if (utils.isObject(v)) {\n v = JSON.stringify(v);\n }\n parts.push(encode(key) + '=' + encode(v));\n });\n });\n\n serializedParams = parts.join('&');\n }\n\n if (serializedParams) {\n var hashmarkIndex = url.indexOf('#');\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n};\n","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Accept');\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar buildFullPath = require('../core/buildFullPath');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n var fullPath = buildFullPath(config.baseURL, config.url);\n request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(createError('Request aborted', config, 'ECONNABORTED', request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(createError(timeoutErrorMessage, config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(config.withCredentials)) {\n request.withCredentials = !!config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n","'use strict';\n\nvar utils = require('../utils');\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n * @returns {Object} New object resulting from merging config2 to config1\n */\nmodule.exports = function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n var config = {};\n\n var valueFromConfig2Keys = ['url', 'method', 'params', 'data'];\n var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy'];\n var defaultToConfig2Keys = [\n 'baseURL', 'url', 'transformRequest', 'transformResponse', 'paramsSerializer',\n 'timeout', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',\n 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress',\n 'maxContentLength', 'validateStatus', 'maxRedirects', 'httpAgent',\n 'httpsAgent', 'cancelToken', 'socketPath'\n ];\n\n utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n }\n });\n\n utils.forEach(mergeDeepPropertiesKeys, function mergeDeepProperties(prop) {\n if (utils.isObject(config2[prop])) {\n config[prop] = utils.deepMerge(config1[prop], config2[prop]);\n } else if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (utils.isObject(config1[prop])) {\n config[prop] = utils.deepMerge(config1[prop]);\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n var axiosKeys = valueFromConfig2Keys\n .concat(mergeDeepPropertiesKeys)\n .concat(defaultToConfig2Keys);\n\n var otherKeys = Object\n .keys(config2)\n .filter(function filterAxiosKeys(key) {\n return axiosKeys.indexOf(key) === -1;\n });\n\n utils.forEach(otherKeys, function otherKeysDefaultToConfig2(prop) {\n if (typeof config2[prop] !== 'undefined') {\n config[prop] = config2[prop];\n } else if (typeof config1[prop] !== 'undefined') {\n config[prop] = config1[prop];\n }\n });\n\n return config;\n};\n","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n","/*!\r\n * verge 1.10.2+201705300050\r\n * http://npm.im/verge\r\n * MIT Ryan Van Etten\r\n */\r\n\r\n!function(root, name, make) {\n if (typeof module != 'undefined' && module['exports']) module['exports'] = make();\r\n else root[name] = make();\r\n}(this, 'verge', function() {\r\n\r\n var xports = {}\r\n , win = typeof window != 'undefined' && window\r\n , doc = typeof document != 'undefined' && document\r\n , docElem = doc && doc.documentElement\r\n , matchMedia = win['matchMedia'] || win['msMatchMedia']\r\n , mq = matchMedia ? function(q) {\r\n return !!matchMedia.call(win, q).matches;\r\n } : function() {\r\n return false;\r\n }\r\n , viewportW = xports['viewportW'] = function() {\r\n var a = docElem['clientWidth'], b = win['innerWidth'];\r\n return a < b ? b : a;\r\n }\r\n , viewportH = xports['viewportH'] = function() {\r\n var a = docElem['clientHeight'], b = win['innerHeight'];\r\n return a < b ? b : a;\r\n };\r\n\n /**\n * Test if a media query is active. Like Modernizr.mq\r\n * @since 1.6.0\r\n * @return {boolean}\r\n */\n xports['mq'] = mq;\r\n\r\n /**\n * Normalized matchMedia\r\n * @since 1.6.0\r\n * @return {MediaQueryList|Object}\r\n */\n xports['matchMedia'] = matchMedia ? function() {\r\n // matchMedia must be binded to window\r\n return matchMedia.apply(win, arguments);\r\n } : function() {\r\n // Gracefully degrade to plain object\r\n return {};\r\n };\r\n\r\n /**\r\n * @since 1.8.0\r\n * @return {{width:number, height:number}}\r\n */\r\n function viewport() {\r\n return {'width':viewportW(), 'height':viewportH()};\r\n }\r\n xports['viewport'] = viewport;\r\n\n /**\n * Cross-browser window.scrollX\r\n * @since 1.0.0\r\n * @return {number}\r\n */\r\n xports['scrollX'] = function() {\r\n return win.pageXOffset || docElem.scrollLeft;\n };\r\n\r\n /**\n * Cross-browser window.scrollY\r\n * @since 1.0.0\r\n * @return {number}\r\n */\r\n xports['scrollY'] = function() {\r\n return win.pageYOffset || docElem.scrollTop;\n };\r\n\r\n /**\r\n * @param {{top:number, right:number, bottom:number, left:number}} coords\r\n * @param {number=} cushion adjustment\r\n * @return {Object}\r\n */\r\n function calibrate(coords, cushion) {\r\n var o = {};\r\n cushion = +cushion || 0;\r\n o['width'] = (o['right'] = coords['right'] + cushion) - (o['left'] = coords['left'] - cushion);\r\n o['height'] = (o['bottom'] = coords['bottom'] + cushion) - (o['top'] = coords['top'] - cushion);\r\n return o;\r\n }\r\n\r\n /**\r\n * Cross-browser element.getBoundingClientRect plus optional cushion.\r\n * Coords are relative to the top-left corner of the viewport.\r\n * @since 1.0.0\r\n * @param {Element|Object} el element or stack (uses first item)\r\n * @param {number=} cushion +/- pixel adjustment amount\r\n * @return {Object|boolean}\r\n */\r\n function rectangle(el, cushion) {\r\n el = el && !el.nodeType ? el[0] : el;\r\n if (!el || 1 !== el.nodeType) return false;\r\n return calibrate(el.getBoundingClientRect(), cushion);\r\n }\r\n xports['rectangle'] = rectangle;\r\n\r\n /**\r\n * Get the viewport aspect ratio (or the aspect ratio of an object or element)\r\n * @since 1.7.0\r\n * @param {(Element|Object)=} o optional object with width/height props or methods\r\n * @return {number}\r\n * @link http://w3.org/TR/css3-mediaqueries/#orientation\r\n */\r\n function aspect(o) {\r\n o = null == o ? viewport() : 1 === o.nodeType ? rectangle(o) : o;\r\n var h = o['height'], w = o['width'];\r\n h = typeof h == 'function' ? h.call(o) : h;\r\n w = typeof w == 'function' ? w.call(o) : w;\r\n return w/h;\r\n }\r\n xports['aspect'] = aspect;\r\n\r\n /**\r\n * Test if an element is in the same x-axis section as the viewport.\r\n * @since 1.0.0\r\n * @param {Element|Object} el\r\n * @param {number=} cushion\r\n * @return {boolean}\r\n */\r\n xports['inX'] = function(el, cushion) {\r\n var r = rectangle(el, cushion);\r\n return !!r && r.right >= 0 && r.left <= viewportW();\r\n };\r\n\r\n /**\r\n * Test if an element is in the same y-axis section as the viewport.\r\n * @since 1.0.0\r\n * @param {Element|Object} el\r\n * @param {number=} cushion\r\n * @return {boolean}\r\n */\r\n xports['inY'] = function(el, cushion) {\r\n var r = rectangle(el, cushion);\r\n return !!r && r.bottom >= 0 && r.top <= viewportH();\r\n };\r\n\r\n /**\r\n * Test if an element is in the viewport.\r\n * @since 1.0.0\r\n * @param {Element|Object} el\r\n * @param {number=} cushion\r\n * @return {boolean}\r\n */\r\n xports['inViewport'] = function(el, cushion) {\r\n // Equiv to `inX(el, cushion) && inY(el, cushion)` but just manually do both\n // to avoid calling rectangle() twice. It gzips just as small like this.\r\n var r = rectangle(el, cushion);\r\n return !!r && r.bottom >= 0 && r.right >= 0 && r.top <= viewportH() && r.left <= viewportW();\r\n };\r\n\r\n return xports;\r\n});\n","var __assign=this&&this.__assign||function(){return(__assign=Object.assign||function(t){for(var i,a=1,s=arguments.length;as.endVal?s.endVal:s.frameVal,s.frameVal=Math.round(s.frameVal*s.decimalMult)/s.decimalMult,s.printValue(s.frameVal),i1?s.options.decimal+a[1]:\"\",s.options.useGrouping){r=\"\";for(var l=0,h=n.length;lt;var i=t-this.startVal;if(Math.abs(i)>this.options.smartEasingThreshold){this.finalEndVal=t;var a=this.countDown?1:-1;this.endVal=t+a*this.options.smartEasingAmount,this.duration=this.duration/2}else this.endVal=t,this.finalEndVal=null;this.finalEndVal?this.useEasing=!1:this.useEasing=this.options.useEasing},t.prototype.start=function(t){this.error||(this.callback=t,this.duration>0?(this.determineDirectionAndSmartEasing(),this.paused=!1,this.rAF=requestAnimationFrame(this.count)):this.printValue(this.endVal))},t.prototype.pauseResume=function(){this.paused?(this.startTime=null,this.duration=this.remaining,this.startVal=this.frameVal,this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count)):cancelAnimationFrame(this.rAF),this.paused=!this.paused},t.prototype.reset=function(){cancelAnimationFrame(this.rAF),this.paused=!0,this.resetDuration(),this.startVal=this.validateValue(this.options.startVal),this.frameVal=this.startVal,this.printValue(this.startVal)},t.prototype.update=function(t){cancelAnimationFrame(this.rAF),this.startTime=null,this.endVal=this.validateValue(t),this.endVal!==this.frameVal&&(this.startVal=this.frameVal,this.finalEndVal||this.resetDuration(),this.determineDirectionAndSmartEasing(),this.rAF=requestAnimationFrame(this.count))},t.prototype.printValue=function(t){var i=this.formattingFn(t);\"INPUT\"===this.el.tagName?this.el.value=i:\"text\"===this.el.tagName||\"tspan\"===this.el.tagName?this.el.textContent=i:this.el.innerHTML=i},t.prototype.ensureNumber=function(t){return\"number\"==typeof t&&!isNaN(t)},t.prototype.validateValue=function(t){var i=Number(t);return this.ensureNumber(i)?i:(this.error=\"[CountUp] invalid start or end value: \"+t,null)},t.prototype.resetDuration=function(){this.startTime=null,this.duration=1e3*Number(this.options.duration),this.remaining=this.duration},t}();export{CountUp};","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.Pristine = factory());\n}(this, (function () { 'use strict';\n\nvar lang = {\n required: \"This field is required\",\n email: \"This field requires a valid e-mail address\",\n number: \"This field requires a number\",\n url: \"This field requires a valid website URL\",\n tel: \"This field requires a valid telephone number\",\n maxlength: \"This fields length must be < ${1}\",\n minlength: \"This fields length must be > ${1}\",\n min: \"Minimum value for this field is ${1}\",\n max: \"Maximum value for this field is ${1}\",\n pattern: \"Input must match the pattern ${1}\"\n};\n\nfunction findAncestor(el, cls) {\n while ((el = el.parentElement) && !el.classList.contains(cls)) {}\n return el;\n}\n\nfunction tmpl(o) {\n var _arguments = arguments;\n\n return this.replace(/\\${([^{}]*)}/g, function (a, b) {\n return _arguments[b];\n });\n}\n\nfunction groupedElemCount(input) {\n return input.pristine.self.form.querySelectorAll('input[name=\"' + input.getAttribute('name') + '\"]:checked').length;\n}\n\nfunction mergeConfig(obj1, obj2) {\n for (var attr in obj2) {\n if (!(attr in obj1)) {\n obj1[attr] = obj2[attr];\n }\n }\n return obj1;\n}\n\nvar defaultConfig = {\n classTo: 'form-group',\n errorClass: 'has-danger',\n successClass: 'has-success',\n errorTextParent: 'form-group',\n errorTextTag: 'div',\n errorTextClass: 'text-help'\n};\n\nvar PRISTINE_ERROR = 'pristine-error';\nvar SELECTOR = \"input:not([type^=hidden]):not([type^=submit]), select, textarea\";\nvar ALLOWED_ATTRIBUTES = [\"required\", \"min\", \"max\", 'minlength', 'maxlength', 'pattern'];\n\nvar validators = {};\n\nvar _ = function _(name, validator) {\n validator.name = name;\n if (!validator.msg) validator.msg = lang[name];\n if (validator.priority === undefined) validator.priority = 1;\n validators[name] = validator;\n};\n\n_('text', { fn: function fn(val) {\n return true;\n }, priority: 0 });\n_('required', { fn: function fn(val) {\n return this.type === 'radio' || this.type === 'checkbox' ? groupedElemCount(this) : val !== undefined && val !== '';\n }, priority: 99, halt: true });\n_('email', { fn: function fn(val) {\n return !val || /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(val);\n } });\n_('number', { fn: function fn(val) {\n return !val || !isNaN(parseFloat(val));\n }, priority: 2 });\n_('integer', { fn: function fn(val) {\n return val && /^\\d+$/.test(val);\n } });\n_('minlength', { fn: function fn(val, length) {\n return !val || val.length >= parseInt(length);\n } });\n_('maxlength', { fn: function fn(val, length) {\n return !val || val.length <= parseInt(length);\n } });\n_('min', { fn: function fn(val, limit) {\n return !val || (this.type === 'checkbox' ? groupedElemCount(this) >= parseInt(limit) : parseFloat(val) >= parseFloat(limit));\n } });\n_('max', { fn: function fn(val, limit) {\n return !val || (this.type === 'checkbox' ? groupedElemCount(this) <= parseInt(limit) : parseFloat(val) <= parseFloat(limit));\n } });\n_('pattern', { fn: function fn(val, pattern) {\n var m = pattern.match(new RegExp('^/(.*?)/([gimy]*)$'));return !val || new RegExp(m[1], m[2]).test(val);\n } });\n\nfunction Pristine(form, config, live) {\n\n var self = this;\n\n init(form, config, live);\n\n function init(form, config, live) {\n\n form.setAttribute(\"novalidate\", \"true\");\n\n self.form = form;\n self.config = mergeConfig(config || {}, defaultConfig);\n self.live = !(live === false);\n self.fields = Array.from(form.querySelectorAll(SELECTOR)).map(function (input) {\n\n var fns = [];\n var params = {};\n var messages = {};\n\n [].forEach.call(input.attributes, function (attr) {\n if (/^data-pristine-/.test(attr.name)) {\n var name = attr.name.substr(14);\n if (name.endsWith('-message')) {\n messages[name.slice(0, name.length - 8)] = attr.value;\n return;\n }\n if (name === 'type') name = attr.value;\n _addValidatorToField(fns, params, name, attr.value);\n } else if (~ALLOWED_ATTRIBUTES.indexOf(attr.name)) {\n _addValidatorToField(fns, params, attr.name, attr.value);\n } else if (attr.name === 'type') {\n _addValidatorToField(fns, params, attr.value);\n }\n });\n\n fns.sort(function (a, b) {\n return b.priority - a.priority;\n });\n\n self.live && input.addEventListener(!~['radio', 'checkbox'].indexOf(input.getAttribute('type')) ? 'input' : 'change', function (e) {\n self.validate(e.target);\n }.bind(self));\n\n return input.pristine = { input: input, validators: fns, params: params, messages: messages, self: self };\n }.bind(self));\n }\n\n function _addValidatorToField(fns, params, name, value) {\n var validator = validators[name];\n if (validator) {\n fns.push(validator);\n if (value) {\n var valueParams = value.split(',');\n valueParams.unshift(null); // placeholder for input's value\n params[name] = valueParams;\n }\n }\n }\n\n /***\n * Checks whether the form/input elements are valid\n * @param input => input element(s) or a jquery selector, null for full form validation\n * @param silent => do not show error messages, just return true/false\n * @returns {boolean} return true when valid false otherwise\n */\n self.validate = function (input, silent) {\n silent = input && silent === true || input === true;\n var fields = self.fields;\n if (input !== true && input !== false) {\n if (input instanceof HTMLElement) {\n fields = [input.pristine];\n } else if (input instanceof NodeList || input instanceof (window.$ || Array) || input instanceof Array) {\n fields = Array.from(input).map(function (el) {\n return el.pristine;\n });\n }\n }\n\n var valid = true;\n\n for (var i in fields) {\n var field = fields[i];\n if (_validateField(field)) {\n !silent && _showSuccess(field);\n } else {\n valid = false;\n !silent && _showError(field);\n }\n }\n return valid;\n };\n\n /***\n * Get errors of a specific field or the whole form\n * @param input\n * @returns {Array|*}\n */\n self.getErrors = function (input) {\n if (!input) {\n var erroneousFields = [];\n for (var i = 0; i < self.fields.length; i++) {\n var field = self.fields[i];\n if (field.errors.length) {\n erroneousFields.push({ input: field.input, errors: field.errors });\n }\n }\n return erroneousFields;\n }\n return input.length ? input[0].pristine.errors : input.pristine.errors;\n };\n\n /***\n * Validates a single field, all validator functions are called and error messages are generated\n * when a validator fails\n * @param field\n * @returns {boolean}\n * @private\n */\n function _validateField(field) {\n var errors = [];\n var valid = true;\n for (var i in field.validators) {\n var validator = field.validators[i];\n var params = field.params[validator.name] ? field.params[validator.name] : [];\n params[0] = field.input.value;\n if (!validator.fn.apply(field.input, params)) {\n valid = false;\n var error = field.messages[validator.name] || validator.msg;\n errors.push(tmpl.apply(error, params));\n if (validator.halt === true) {\n break;\n }\n }\n }\n field.errors = errors;\n return valid;\n }\n\n /***\n *\n * @param elem => The dom element where the validator is applied to\n * @param fn => validator function\n * @param msg => message to show when validation fails. Supports templating. ${0} for the input's value, ${1} and\n * so on are for the attribute values\n * @param priority => priority of the validator function, higher valued function gets called first.\n * @param halt => whether validation should stop for this field after current validation function\n */\n self.addValidator = function (elem, fn, msg, priority, halt) {\n if (elem instanceof HTMLElement) {\n elem.pristine.validators.push({ fn: fn, msg: msg, priority: priority, halt: halt });\n elem.pristine.validators.sort(function (a, b) {\n return b.priority - a.priority;\n });\n } else {\n console.warn(\"The parameter elem must be a dom element\");\n }\n };\n\n /***\n * An utility function that returns a 2-element array, first one is the element where error/success class is\n * applied. 2nd one is the element where error message is displayed. 2nd element is created if doesn't exist and cached.\n * @param field\n * @returns {*}\n * @private\n */\n function _getErrorElements(field) {\n if (field.errorElements) {\n return field.errorElements;\n }\n var errorClassElement = findAncestor(field.input, self.config.classTo);\n var errorTextParent = null,\n errorTextElement = null;\n if (self.config.classTo === self.config.errorTextParent) {\n errorTextParent = errorClassElement;\n } else {\n errorTextParent = errorClassElement.querySelector(self.errorTextParent);\n }\n if (errorTextParent) {\n errorTextElement = errorTextParent.querySelector('.' + PRISTINE_ERROR);\n if (!errorTextElement) {\n errorTextElement = document.createElement(self.config.errorTextTag);\n errorTextElement.className = PRISTINE_ERROR + ' ' + self.config.errorTextClass;\n errorTextParent.appendChild(errorTextElement);\n errorTextElement.pristineDisplay = errorTextElement.style.display;\n }\n }\n return field.errorElements = [errorClassElement, errorTextElement];\n }\n\n function _showError(field) {\n var errorElements = _getErrorElements(field);\n var errorClassElement = errorElements[0],\n errorTextElement = errorElements[1];\n\n if (errorClassElement) {\n errorClassElement.classList.remove(self.config.successClass);\n errorClassElement.classList.add(self.config.errorClass);\n }\n if (errorTextElement) {\n errorTextElement.innerHTML = field.errors.join('
');\n errorTextElement.style.display = errorTextElement.pristineDisplay || '';\n }\n }\n\n /***\n * Adds error to a specific field\n * @param input\n * @param error\n */\n self.addError = function (input, error) {\n input = input.length ? input[0] : input;\n input.pristine.errors.push(error);\n _showError(input.pristine);\n };\n\n function _removeError(field) {\n var errorElements = _getErrorElements(field);\n var errorClassElement = errorElements[0],\n errorTextElement = errorElements[1];\n if (errorClassElement) {\n // IE > 9 doesn't support multiple class removal\n errorClassElement.classList.remove(self.config.errorClass);\n errorClassElement.classList.remove(self.config.successClass);\n }\n if (errorTextElement) {\n errorTextElement.innerHTML = '';\n errorTextElement.style.display = 'none';\n }\n return errorElements;\n }\n\n function _showSuccess(field) {\n var errorClassElement = _removeError(field)[0];\n errorClassElement && errorClassElement.classList.add(self.config.successClass);\n }\n\n /***\n * Resets the errors\n */\n self.reset = function () {\n for (var i in self.fields) {\n self.fields[i].errorElements = null;\n }\n Array.from(self.form.querySelectorAll('.' + PRISTINE_ERROR)).map(function (elem) {\n elem.parentNode.removeChild(elem);\n });\n Array.from(self.form.querySelectorAll('.' + self.config.classTo)).map(function (elem) {\n elem.classList.remove(self.config.successClass);\n elem.classList.remove(self.config.errorClass);\n });\n };\n\n /***\n * Resets the errors and deletes all pristine fields\n */\n self.destroy = function () {\n self.reset();\n self.fields.forEach(function (field) {\n delete field.input.pristine;\n });\n self.fields = [];\n };\n\n self.setGlobalConfig = function (config) {\n defaultConfig = config;\n };\n\n return self;\n}\n\n/***\n *\n * @param name => Name of the global validator\n * @param fn => validator function\n * @param msg => message to show when validation fails. Supports templating. ${0} for the input's value, ${1} and\n * so on are for the attribute values\n * @param priority => priority of the validator function, higher valued function gets called first.\n * @param halt => whether validation should stop for this field after current validation function\n */\nPristine.addValidator = function (name, fn, msg, priority, halt) {\n _(name, { fn: fn, msg: msg, priority: priority, halt: halt });\n};\n\nreturn Pristine;\n\n})));\n","module.exports = require('./lib/axios');","import './styles/index.scss';\n// import AOS from 'aos';\n\n// // Thirdparty\n// import 'what-input';\n// import $ from 'jquery';\n// window.jQuery = $;\n// window.$ = $;\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const userAgent = navigator.userAgent;\n const re = /Safari/;\n if (re.test(userAgent)) {\n const typekit = document.createElement('link');\n typekit.rel = 'stylesheet';\n typekit.href = '//use.typekit.net/gqb2xef.css';\n document.head.appendChild(typekit);\n }\n});\n\n/*\n* Script loader\n*\n* Imports and runs all scripts in the `./scripts` directory\n* Scripts must have a default export with `can` and `run` functions\n*\n* export default {\n* can: () => boolean,\n* run: function to run if `can` is true\n* }\n*/\ndocument.addEventListener('DOMContentLoaded', () => {\n (r => {\n r\n .keys()\n .reduce((modules, script) => {\n const module = r(script).default;\n module && modules.push(module);\n return modules;\n }, [])\n .map(module => (module.can === true || module.can()) && module.run());\n })(require.context('scripts', true, /^(?!.*(common)).*\\.js$/));\n});\n\ndocument.body.classList.remove('preload');\n","var map = {\n\t\"./animation.js\": 25,\n\t\"./benefit-slider.js\": 27,\n\t\"./blog-slider.js\": 28,\n\t\"./blog.js\": 29,\n\t\"./count-up.js\": 30,\n\t\"./forms.js\": 31,\n\t\"./navigation.js\": 49,\n\t\"./scroll.js\": 50,\n\t\"./social-bubble.js\": 51,\n\t\"./testimonial-slider.js\": 52\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 24;","import AOS from 'aos';\nimport 'aos/src/sass/aos';\n\nconst fn = {\n init: () => {\n AOS.init({\n once: true,\n });\n\n setTimeout(AOS.refresh, 500);\n },\n};\n\nexport default {\n can: () => true,\n run: fn.init,\n};\n","import setupSlider from './common/slider';\n\nconst SELECTORS = Selectors({\n slide: '[data-benefit-slide]',\n slider: '.benefits__slider',\n track: '[data-glide-el]',\n});\n\nconst slides = document.querySelectorAll(SELECTORS.slide);\nconst track = document.querySelector(SELECTORS.track);\n\nconst fn = {\n init: () => {\n fn.setupBenefitsSlide();\n },\n\n setupBenefitsSlide: () => {\n const slider = document.querySelector(SELECTORS.slider);\n const options = {\n type: 'carousel',\n perView: 7,\n focusAt: 'center',\n startAt: 2,\n gap: 10,\n peek: {\n before: 5,\n after: 5,\n },\n autoplay: 5000,\n // autoplay: false,\n breakpoints: {\n 1919: {\n perView: 5,\n },\n 1600: {\n perView: 4,\n },\n 1200: {\n perView: 3,\n },\n 768: {\n perView: 2,\n },\n 480: {\n perView: 1,\n },\n },\n };\n setupSlider(slider, options);\n },\n};\n\nexport default {\n can: () => slides.length,\n run: fn.init,\n};\n","import setupSlider from './common/slider';\n\nconst SELECTORS = Selectors({\n slide: '[data-blog-slide]',\n slider: '.latest-blogs__slider',\n});\n\nconst slides = document.querySelectorAll(SELECTORS.slide);\n\nconst fn = {\n init: () => {\n fn.setupBlogSlider();\n },\n\n setupBlogSlider: () => {\n const slider = document.querySelector(SELECTORS.slider);\n const options = {\n type: 'carousel',\n perView: 3,\n focusAt: 0,\n breakpoints: {\n 1200: {\n type: 'carousel',\n perView: 2,\n focusAt: 0,\n startAt: 0,\n },\n 768: {\n type: 'carousel',\n perView: 1,\n },\n },\n };\n setupSlider(slider, options);\n },\n};\n\nexport default {\n can: () => slides.length,\n run: fn.init,\n};\n","import scrollTo from './common/scrollTo';\nimport { on } from 'delegated-events';\n\nconst SELECTORS = Selectors({\n list: '.blog-list',\n pagination: '.blog-pagination',\n more: '.blog-pagination__more',\n less: '.blog-pagination__less',\n});\n\nlet currentPage = 1;\nconst PAGE_LENGTH = 6;\nconst blogList = document.querySelector(SELECTORS.list);\nconst blogPagination = document.querySelector(SELECTORS.pagination);\nconst blogPaginationMore = document.querySelector(SELECTORS.more);\nconst blogPaginationLess = document.querySelector(SELECTORS.less);\n\nconst fn = {\n init: () => {\n fn.handleBlogPagination();\n fn.bindEvents();\n },\n\n bindEvents: () => {\n // blogPaginationMore.on('click', () => {});\n\n on('click', SELECTORS.more, () => {\n currentPage = currentPage + 1;\n fn.handleBlogPagination();\n });\n\n // blogPaginationLess.on('click', () => {});\n\n on('click', SELECTORS.less, () => {\n currentPage = 1;\n fn.handleBlogPagination();\n scrollTo(SELECTORS.list, 150);\n });\n },\n\n handleBlogPagination: () => {\n const blogListItems = blogList.querySelectorAll('li');\n const total = blogListItems.length;\n const hiddenIndex = currentPage * PAGE_LENGTH;\n\n if (total > PAGE_LENGTH) {\n blogListItems.forEach((el, index) => {\n if (index >= hiddenIndex) {\n el.classList.add('is-hidden');\n } else {\n el.classList.remove('is-hidden');\n }\n });\n }\n\n const currentCount = blogList.querySelectorAll('li:not(.is-hidden)').length;\n blogPagination.querySelector('.blog-pagination__current').innerHTML = currentCount;\n\n if (total < PAGE_LENGTH) {\n blogPagination.querySelector('.blog-pagination__actions').classList.add('is-hidden');\n } else {\n blogPagination.querySelector('.blog-pagination__actions').classList.remove('is-hidden');\n }\n // blogPaginationMore.classList.toggle('is-hidden', blogList.querySelectorAll('li.is-hidden').length <= 0);\n if (blogList.querySelectorAll('li.is-hidden').length <= 0) {\n blogPaginationMore.classList.add('is-hidden');\n } else {\n blogPaginationMore.classList.remove('is-hidden');\n }\n // blogPaginationLess.classList.toggle('is-hidden', currentPage <= 1);\n if (currentPage <= 1) {\n blogPaginationLess.classList.add('is-hidden');\n } else {\n blogPaginationLess.classList.remove('is-hidden');\n }\n },\n};\n\nexport default {\n can: () => document.body.classList.contains('page-blog'),\n // can: () => false,\n run: fn.init,\n};\n","import requestTimeout from './common/requestTimeout';\nimport verge from 'verge';\nimport throttle from './common/throttle';\nimport { CountUp } from 'countup.js';\n\nconst SELECTORS = Selectors({\n counter: '[data-counter]',\n wrapper: '.stats-items',\n});\n\nconst counters = document.querySelectorAll(SELECTORS.counter);\n\nconst state = {\n counters: [],\n};\n\nconst fn = {\n init: () => {\n counters.forEach(el => {\n const useGrouping = el.dataset.useGrouping;\n const decimalPlaces = el.dataset.decimalPlaces;\n const end = el.dataset.end;\n\n const opts = {\n useGrouping: !!+useGrouping,\n };\n\n if (decimalPlaces) {\n opts.decimalPlaces = decimalPlaces;\n }\n\n const counter = new CountUp(el, end, opts);\n counter._el = el;\n\n state.counters.push(counter);\n });\n\n // fn.bindEvents();\n // fn.update();\n setInterval(throttle(fn.update, 5000), 3000);\n },\n\n bindEvents: () => {\n window.addEventListener('scroll', throttle(fn.update, 250));\n },\n\n update: () => {\n state.counters.forEach((counter, index) => {\n if (verge.inY(counter._el)) {\n counter.reset();\n setTimeout(counter.start(), 500)\n setTimeout(null, 5000);\n // delete state.counters[index];\n }\n });\n },\n};\n\nexport default {\n can: () => counters.length,\n run: fn.init,\n};\n","import { on } from 'delegated-events';\nimport Pristine from 'pristinejs';\nimport scrollTo from './common/scrollTo';\nimport axios from 'axios';\n\nconst SELECTORS = Selectors({\n form: 'form',\n styledForm: 'form--styled',\n ajaxForm: 'form--ajax',\n formAnchor: '[data-form-anchor]',\n formScroll: '[data-form-scroll]',\n formErrorMessage: 'form-error-message',\n field: 'field',\n focused: 'is-focused',\n loading: 'is-loading',\n});\n\nexport const pristineConfig = {\n classTo: 'field',\n errorClass: 'has-error',\n successClass: 'has-success',\n errorTextParent: 'field',\n errorTextTag: 'div',\n errorTextClass: 'text-help',\n};\n\nconst fn = {\n init: () => {\n // Only setup any custom forms defined by our classes\n const form = document.querySelector(SELECTORS.form);\n fn.setupForm(form);\n\n on('change', '.has-field-error', e => {\n e.target.classList.remove('has-field-error');\n });\n },\n\n setupForm: form => {\n fn.setupFlyFields();\n fn.setupValidation(form);\n },\n\n setupValidation: form => {\n const pristine = new Pristine(form, pristineConfig);\n\n // Hide any native SilverStripe errors\n on('keyup', `${SELECTORS.asClass('styledForm')} input`, e => {\n const field = e.target.closest('.field');\n const error = field.querySelector('.message.required');\n\n if (error) {\n error.remove();\n }\n });\n\n form.addEventListener('submit', e => {\n if (e.target.skipValidation) {\n return true;\n }\n\n const valid = pristine.validate();\n\n if (!valid) {\n e.preventDefault();\n const firstError = form.querySelector('.field.has-error');\n\n if (firstError) {\n scrollTo(firstError, 50, () => firstError.querySelector('input').focus());\n }\n\n return false;\n }\n\n // Handle ajax submit if appropriate\n if (form.classList.contains(SELECTORS.ajaxForm)) {\n e.preventDefault();\n\n const errorMessage = form.querySelector(SELECTORS.asClass('formErrorMessage'));\n errorMessage.style.display = 'none';\n\n const submitButton = form.querySelector('[type=submit]');\n submitButton.disabled = true;\n submitButton.classList.add(SELECTORS.loading);\n const formData = new FormData(form);\n\n axios({\n method: 'post',\n url: form.action,\n data: formData,\n responseType: 'json',\n headers: {\n 'content-type': 'multipart/form-data;',\n 'X-Requested-With': 'XMLHttpRequest',\n Accept: 'application/json, text/javascript, */*',\n },\n timeout: 5000,\n responseEncoding: 'utf8',\n })\n .then(resp => {\n if (resp.data.success) {\n form.innerHTML = `
${resp.data.message}
`;\n // Figure out where to scroll to\n let anchor = form.closest(SELECTORS.formAnchor);\n anchor =\n anchor ? anchor :\n form;\n scrollTo(anchor, 150);\n submitButton.disabled = false;\n submitButton.classList.remove(SELECTORS.loading);\n } else {\n errorMessage.innerHTML = resp.data.message;\n errorMessage.style.display = 'block';\n\n if (resp.field_errors) {\n for (const field of resp.field_errors) {\n const errorField = form.querySelector(`[name=\"${field}\"]`);\n if (errorField) {\n errorField.classList.add('has-field-error');\n }\n }\n }\n }\n })\n .catch(err => {\n errorMessage.innerHTML = err;\n errorMessage.style.display = 'block';\n if (err.response) {\n // The request was made and the server responded with a status code\n // that falls out of the range of 2xx\n console.log(err.response.data);\n console.log(err.response.status);\n console.log(err.response.headers);\n } else if (err.request) {\n // The request was made but no response was received\n // `err.request` is an instance of XMLHttpRequest in the browser and an instance of\n // http.ClientRequest in node.js\n console.log(err.request);\n } else {\n // Something happened in setting up the request that triggered an err\n console.log('Error', err.message);\n }\n console.log(err.config);\n });\n }\n\n return valid;\n });\n },\n\n setupFlyFields: () => {\n on('focus', `${SELECTORS.asClass('styledForm')} input`, e => fn.handleFocus(e.target), {\n capture: true,\n passive: true,\n });\n on('blur', `${SELECTORS.asClass('styledForm')} input`, e => fn.handleBlur(e.target), {\n capture: true,\n passive: true,\n });\n },\n\n handleFocus: field => {\n const label = field.parentNode.parentNode.querySelector('label');\n if (label) {\n label.classList.add(SELECTORS.focused);\n }\n },\n\n handleBlur: field => {\n const label = field.parentNode.parentNode.querySelector('label');\n if (label && field.value === '') {\n label.classList.remove(SELECTORS.focused);\n }\n },\n};\n\nexport default {\n can: () => document.body.classList.contains('page-home') || document.body.classList.contains('page-blog'),\n run: fn.init,\n};\n","'use strict';\n\nvar utils = require('./utils');\nvar bind = require('./helpers/bind');\nvar Axios = require('./core/Axios');\nvar mergeConfig = require('./core/mergeConfig');\nvar defaults = require('./defaults');\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n * @return {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n var context = new Axios(defaultConfig);\n var instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context);\n\n // Copy context to instance\n utils.extend(instance, context);\n\n return instance;\n}\n\n// Create the default instance to be exported\nvar axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Factory for creating new instances\naxios.create = function create(instanceConfig) {\n return createInstance(mergeConfig(axios.defaults, instanceConfig));\n};\n\n// Expose Cancel & CancelToken\naxios.Cancel = require('./cancel/Cancel');\naxios.CancelToken = require('./cancel/CancelToken');\naxios.isCancel = require('./cancel/isCancel');\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\naxios.spread = require('./helpers/spread');\n\nmodule.exports = axios;\n\n// Allow use of default import syntax in TypeScript\nmodule.exports.default = axios;\n","'use strict';\n\nvar utils = require('./../utils');\nvar buildURL = require('../helpers/buildURL');\nvar InterceptorManager = require('./InterceptorManager');\nvar dispatchRequest = require('./dispatchRequest');\nvar mergeConfig = require('./mergeConfig');\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n */\nfunction Axios(instanceConfig) {\n this.defaults = instanceConfig;\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n}\n\n/**\n * Dispatch a request\n *\n * @param {Object} config The config specific for this request (merged with this.defaults)\n */\nAxios.prototype.request = function request(config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof config === 'string') {\n config = arguments[1] || {};\n config.url = arguments[0];\n } else {\n config = config || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n // Set config.method\n if (config.method) {\n config.method = config.method.toLowerCase();\n } else if (this.defaults.method) {\n config.method = this.defaults.method.toLowerCase();\n } else {\n config.method = 'get';\n }\n\n // Hook up interceptors middleware\n var chain = [dispatchRequest, undefined];\n var promise = Promise.resolve(config);\n\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n chain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n chain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n while (chain.length) {\n promise = promise.then(chain.shift(), chain.shift());\n }\n\n return promise;\n};\n\nAxios.prototype.getUri = function getUri(config) {\n config = mergeConfig(this.defaults, config);\n return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\\?/, '');\n};\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, data, config) {\n return this.request(utils.merge(config || {}, {\n method: method,\n url: url,\n data: data\n }));\n };\n});\n\nmodule.exports = Axios;\n","'use strict';\n\nvar utils = require('./../utils');\n\nfunction InterceptorManager() {\n this.handlers = [];\n}\n\n/**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\nInterceptorManager.prototype.use = function use(fulfilled, rejected) {\n this.handlers.push({\n fulfilled: fulfilled,\n rejected: rejected\n });\n return this.handlers.length - 1;\n};\n\n/**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n */\nInterceptorManager.prototype.eject = function eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n};\n\n/**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n */\nInterceptorManager.prototype.forEach = function forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n};\n\nmodule.exports = InterceptorManager;\n","'use strict';\n\nvar utils = require('./../utils');\nvar transformData = require('./transformData');\nvar isCancel = require('../cancel/isCancel');\nvar defaults = require('../defaults');\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n * @returns {Promise} The Promise to be fulfilled\n */\nmodule.exports = function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n // Ensure headers exist\n config.headers = config.headers || {};\n\n // Transform request data\n config.data = transformData(\n config.data,\n config.headers,\n config.transformRequest\n );\n\n // Flatten headers\n config.headers = utils.merge(\n config.headers.common || {},\n config.headers[config.method] || {},\n config.headers\n );\n\n utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n function cleanHeaderConfig(method) {\n delete config.headers[method];\n }\n );\n\n var adapter = config.adapter || defaults.adapter;\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData(\n response.data,\n response.headers,\n config.transformResponse\n );\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData(\n reason.response.data,\n reason.response.headers,\n config.transformResponse\n );\n }\n }\n\n return Promise.reject(reason);\n });\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Object|String} data The data to be transformed\n * @param {Array} headers The headers for the request or response\n * @param {Array|Function} fns A single function or Array of functions\n * @returns {*} The resulting transformed data\n */\nmodule.exports = function transformData(data, headers, fns) {\n /*eslint no-param-reassign:0*/\n utils.forEach(fns, function transform(fn) {\n data = fn(data, headers);\n });\n\n return data;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","'use strict';\n\nvar utils = require('../utils');\n\nmodule.exports = function normalizeHeaderName(headers, normalizedName) {\n utils.forEach(headers, function processHeader(value, name) {\n if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = value;\n delete headers[name];\n }\n });\n};\n","'use strict';\n\nvar createError = require('./createError');\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n */\nmodule.exports = function settle(resolve, reject, response) {\n var validateStatus = response.config.validateStatus;\n if (!validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(createError(\n 'Request failed with status code ' + response.status,\n response.config,\n null,\n response.request,\n response\n ));\n }\n};\n","'use strict';\n\n/**\n * Update an Error with the specified config, error code, and response.\n *\n * @param {Error} error The error to update.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The error.\n */\nmodule.exports = function enhanceError(error, config, code, request, response) {\n error.config = config;\n if (code) {\n error.code = code;\n }\n\n error.request = request;\n error.response = response;\n error.isAxiosError = true;\n\n error.toJSON = function() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: this.config,\n code: this.code\n };\n };\n return error;\n};\n","'use strict';\n\nvar isAbsoluteURL = require('../helpers/isAbsoluteURL');\nvar combineURLs = require('../helpers/combineURLs');\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n * @returns {string} The combined full path\n */\nmodule.exports = function buildFullPath(baseURL, requestedURL) {\n if (baseURL && !isAbsoluteURL(requestedURL)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n};\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nmodule.exports = function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(url);\n};\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n * @returns {string} The combined URL\n */\nmodule.exports = function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/+$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\n// Headers whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nvar ignoreDuplicateOf = [\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n];\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} headers Headers needing to be parsed\n * @returns {Object} Headers parsed into an object\n */\nmodule.exports = function parseHeaders(headers) {\n var parsed = {};\n var key;\n var val;\n var i;\n\n if (!headers) { return parsed; }\n\n utils.forEach(headers.split('\\n'), function parser(line) {\n i = line.indexOf(':');\n key = utils.trim(line.substr(0, i)).toLowerCase();\n val = utils.trim(line.substr(i + 1));\n\n if (key) {\n if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {\n return;\n }\n if (key === 'set-cookie') {\n parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs have full support of the APIs needed to test\n // whether the request URL is of the same origin as current location.\n (function standardBrowserEnv() {\n var msie = /(msie|trident)/i.test(navigator.userAgent);\n var urlParsingNode = document.createElement('a');\n var originURL;\n\n /**\n * Parse a URL to discover it's components\n *\n * @param {String} url The URL to be parsed\n * @returns {Object}\n */\n function resolveURL(url) {\n var href = url;\n\n if (msie) {\n // IE needs attribute set twice to normalize properties\n urlParsingNode.setAttribute('href', href);\n href = urlParsingNode.href;\n }\n\n urlParsingNode.setAttribute('href', href);\n\n // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils\n return {\n href: urlParsingNode.href,\n protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',\n host: urlParsingNode.host,\n search: urlParsingNode.search ? urlParsingNode.search.replace(/^\\?/, '') : '',\n hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',\n hostname: urlParsingNode.hostname,\n port: urlParsingNode.port,\n pathname: (urlParsingNode.pathname.charAt(0) === '/') ?\n urlParsingNode.pathname :\n '/' + urlParsingNode.pathname\n };\n }\n\n originURL = resolveURL(window.location.href);\n\n /**\n * Determine if a URL shares the same origin as the current location\n *\n * @param {String} requestURL The URL to test\n * @returns {boolean} True if URL shares the same origin, otherwise false\n */\n return function isURLSameOrigin(requestURL) {\n var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;\n return (parsed.protocol === originURL.protocol &&\n parsed.host === originURL.host);\n };\n })() :\n\n // Non standard browser envs (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return function isURLSameOrigin() {\n return true;\n };\n })()\n);\n","'use strict';\n\nvar utils = require('./../utils');\n\nmodule.exports = (\n utils.isStandardBrowserEnv() ?\n\n // Standard browser envs support document.cookie\n (function standardBrowserEnv() {\n return {\n write: function write(name, value, expires, path, domain, secure) {\n var cookie = [];\n cookie.push(name + '=' + encodeURIComponent(value));\n\n if (utils.isNumber(expires)) {\n cookie.push('expires=' + new Date(expires).toGMTString());\n }\n\n if (utils.isString(path)) {\n cookie.push('path=' + path);\n }\n\n if (utils.isString(domain)) {\n cookie.push('domain=' + domain);\n }\n\n if (secure === true) {\n cookie.push('secure');\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read: function read(name) {\n var match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove: function remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n };\n })() :\n\n // Non standard browser env (web workers, react-native) lack needed support.\n (function nonStandardBrowserEnv() {\n return {\n write: function write() {},\n read: function read() { return null; },\n remove: function remove() {}\n };\n })()\n);\n","'use strict';\n\nvar Cancel = require('./Cancel');\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @class\n * @param {Function} executor The executor function.\n */\nfunction CancelToken(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n var resolvePromise;\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n var token = this;\n executor(function cancel(message) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new Cancel(message);\n resolvePromise(token.reason);\n });\n}\n\n/**\n * Throws a `Cancel` if cancellation has been requested.\n */\nCancelToken.prototype.throwIfRequested = function throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n};\n\n/**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\nCancelToken.source = function source() {\n var cancel;\n var token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token: token,\n cancel: cancel\n };\n};\n\nmodule.exports = CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n * @returns {Function}\n */\nmodule.exports = function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n};\n","import { on } from 'delegated-events';\n\nconst SELECTORS = Selectors({\n menu: '[data-menu]',\n buttons: '.hamburger-menu',\n navButton: '.mobile-link',\n header: '.header',\n});\n\nconst fn = {\n init: () => {\n fn.bindEvents();\n },\n\n bindEvents: () => {\n on('click', SELECTORS.buttons, fn.handleClick);\n on('click', SELECTORS.navButton, fn.handleClick);\n document.addEventListener(\n 'wheel',\n e => {\n fn.handleScroll(e);\n },\n {\n capture: true,\n passive: true,\n }\n );\n },\n\n handleClick: e => {\n e.preventDefault();\n\n let elm = document.querySelector(SELECTORS.menu);\n\n elm.classList.toggle('active');\n },\n\n handleScroll: e => {\n let elm = document.querySelector(SELECTORS.header);\n if (window.scrollY > 10) {\n elm.classList.add('fixed');\n } else {\n elm.classList.remove('fixed');\n }\n },\n};\n\nexport default {\n can: () => true,\n run: fn.init,\n};\n","import { on } from 'delegated-events';\nimport scrollTo from './common/scrollTo';\n\nconst SELECTORS = Selectors({\n scroll: '[data-scroll]',\n scrollToMe: '[data-scrolltome]',\n});\n\nconst fn = {\n init: () => {\n fn.bindEvents();\n fn.handleUrl();\n fn.handleScrollToMe();\n },\n\n bindEvents: () => {\n on('click', SELECTORS.scroll, fn.handleClick);\n },\n\n handleClick: e => {\n e.preventDefault();\n\n const elm = e.target.closest(SELECTORS.scroll);\n\n let targetSelector = null;\n\n if (elm.dataset.scroll) {\n targetSelector = elm.dataset.scroll;\n } else if (elm.tagName === 'A') {\n targetSelector = elm.hash;\n } else {\n return;\n }\n\n const target = document.querySelector(targetSelector);\n\n if (target) {\n scrollTo(target);\n }\n },\n\n handleUrl: () => {\n if (window.location.hash) {\n const target = document.querySelector(window.location.hash);\n\n if (target) {\n scrollTo(target);\n }\n }\n },\n\n // Automatically scrolls to the first element with the [data-scrolltome] attribute\n handleScrollToMe: () => {\n const target = document.querySelector(SELECTORS.scrollToMe);\n\n if (target) {\n setTimeout(() => {\n scrollTo(target);\n }, 250);\n }\n },\n};\n\nexport default {\n can: () => true,\n run: fn.init,\n};\n","import Glide from '@glidejs/glide';\nimport { Swipe, Anchors } from '@glidejs/glide/dist/glide.modular.esm';\nimport requestTimeout from './common/requestTimeout';\n\nconst SELECTORS = Selectors({\n // imageSlide: '[data-image-slide]',\n // imageSlider: '.image__slider',\n\n contentSlide: '[data-testimonial-slide]',\n contentSlider: '.testimonials__slider',\n bullets: '[data-glide-dir]',\n});\n\nconst slides = document.querySelectorAll(SELECTORS.contentSlide);\n// const imageSlider = document.querySelector(SELECTORS.imageSlider);\nconst testimonialSlider = document.querySelector(SELECTORS.contentSlider);\n\nconst fn = {\n init: () => {\n fn.setupTestimonialSlider();\n },\n\n setupTestimonialSlider: () => {\n const options = {\n type: 'carousel',\n perView: 1,\n focusAt: 0,\n startAt: 2,\n autoplay: 5000,\n // autoplay: false\n };\n // const imageOptions = {\n // type: 'carousel',\n // perView: 6,\n // focusAt: 'center',\n // startAt: 2,\n // gap: 2,\n // breakpoints: {\n // 768: {\n // perView: 5,\n // gap: 0,\n // },\n // 480: {\n // perView: 1,\n // gap: 0,\n // },\n // },\n // };\n\n const slider1 = new Glide(testimonialSlider, options);\n // const slider2 = new Glide(imageSlider, imageOptions);\n\n // slider1.on('run', e => {\n // slider2.go(e.direction);\n // });\n\n // slider2.on('run', e => {\n // slider1.go(e.direction);\n // });\n\n // slider2.mount({ Swipe, Anchors });\n slider1.mount({ Swipe, Anchors });\n },\n};\n\nexport default {\n can: () => slides.length,\n run: fn.init,\n};\n"],"sourceRoot":""}