{"version":3,"sources":["Theme/typography.ts","Theme/spacing.ts","Theme/zindex.ts","Theme/animation.ts","Theme/shadow.ts","Theme/index.ts","Shared/Common/EventDispatcher.ts","Theme/mediaQueries.ts","Shared/Configs/EnvConfig.js","Shared/AppSettingsProvider/AppSettingsProvider.tsx","Shared/Hooks/useCurrentPage.ts","Shared/Common/Helpers.tsx","Shared/Common/Fetcher.ts","Shared/Loading/KexLoadingCircle/KexLoadingCircle.tsx","Shared/KexRouter/ScrollHandling.ts","Shared/KexRouter/FetchPage.ts","Shared/Hooks/usePrevious.js","Shared/KexRouter/useQueryPage.tsx","Shared/KexRouter/KexRouter.tsx","Shared/KexLink/KexLink.tsx","Theme/colors.ts","App.tsx","Shared/KexPage/KexPage.tsx","Shared/Hooks/useMedia.js","Shared/UserContextProvider/UserContextProvider.tsx","Shared/Icons/CloseIcon.tsx","Shared/Divider/Divider.tsx","Shared/Models/Headers/Header.tsx","Shared/UserContextProvider/FetchUserState.ts","Shared/UserContextProvider/useQueryUserState.tsx","Shared/Models/Headers/FetchHeader.ts","Shared/Models/Headers/useQueryHeader.tsx","Shared/Loading/LoadingPageType/LoadingPageType.tsx","Shared/Notifications/BasicNotification.tsx","Shared/ErrorBoundary/ErrorBoundary.tsx","Shared/Models/Footers/Footer/FooterList/FooterList.tsx","Shared/Models/Footers/Footer/FetchFooter.ts","Shared/Models/Footers/Footer/useQueryFooter.tsx","Shared/Models/Footers/Footer/Footer.tsx","Shared/Icons/CookieIcon.tsx","Cookies/Cookies.js","Shared/KexReporterOverlay/KexReporterModal.tsx","Shared/KexReporterOverlay/KexReporterOverlay.tsx","IndexProd.tsx","imports.js"],"names":["tau","alpha","beta","gamma","delta","epsilon","zeta","psi","eta","theta","omikron","iota","kappa","lambda","headerMainLink","productHeading","headingDesktop","subTitle","lineHeight","none","tight","snug","moreSnug","normal","relaxed","moreRelaxed","loose","letterSpacing","normalWide","nearWide","wide","moreWide","nearMedium","medium","wider","heading","header","largeHeader","fontFamily","main","fallback","fontWeight","lighter","bold","boldest","tiny","smaller","small","large","moreLarge","larger","huge","nearGreat","great","nearVast","vast","gigantic","greater","massive","enormous","spacing","multiplier","screenMaxWidth","contentMaxWidth","videoMaxWidth","maxWidthSmall","contentResultWidth","maxWidthMobile","maxWidthContentPage","desktopQuickSearchWidth","blockMaxWidthMobile","mobileMenuMaxWidth","menuButtonWidth","heroMaxHeight","videoMaxHeight","standardBlockLargerImageHeight","standardBlockLargeImageHeight","standardBlockMediumImageHeight","thirdWidthBlockImageHeight","standardBlockSmallImageHeight","verySmallBlockImageHeight","mobileHeaderTopSectionHeight","mobileHeaderBottomSectionHeight","mobileHeaderHeight","desktopHeaderHeight","expandedDesktopHeaderHeight","menuButtonHeight","desktopSearchModalMaxWidth","desktopSearchModalMaxHeight","teaserImageDesktopHeight","bannerBlockMobileImageHeight","bannerBlockDesktopImageHeight","bannerBlockHeadingMargin","heroImageYMargin","thumbnailImageHeight","productImageMaxHeight","productImageMaxHeightMedium","productImageMaxHeightLarge","zIndex","Notification","Header","HeaderMobile","Flyout","DropDown","FlyoutLower","Cart","CartMobile","Modal","Overlay","pageLoader","errorModal","animation","timingFn","timings","oneTenth","oneFifth","threeTenths","oneThird","twoFifths","oneHalf","threeFifths","one","sevenFifths","oneAndAHalf","five","shadows","imageShadow","productImageShadow","theme","typography","color","mediaQueries","styled","GlitzStyled","ON_KEX_ERROR","NOTIFY_ACTION","STOP_NOTIFY_ACTION","ON_MINICART_OPEN_CHANGE","ON_SEARCH","ON_MOBILE_SEARCH_OPEN_CHANGE","ON_SEARCH_MODAL_OPEN_CHANGE","ON_MODAL_SEARCH","ON_MOBILE_MENU_OPEN_CHANGE","EventDispatcher","events","dispatch","event","data","i","length","subscribe","callback","unsubscribe","filter","fn","mediaQuery","mediaMaxVerySmall","query","maxWidth","mediaMinVerySmall","minWidth","mediaMaxSmall","mediaMinSmall","mediaMaxMedium","mediaMinMedium","mediaMaxLarge","mediaMinLarge","mediaMaxHuge","mediaMinHuge","mediaMinGreat","mediaMinScreen","mediaMaxScreen","mediaQuerySorter","a","b","typedMediaQueries","mediaQueryArray","Object","keys","map","key","indexA","indexOf","indexB","IS_PRODUCTION_ENV","IS_SERVER_CONTEXT","process","console","log","AppSettingsContext","React","createContext","AppSettingsProvider","children","Provider","value","useAppSettingsData","useContext","useCurrentPage","useKexRouterCurrentPage","hasFileExtension","url","isInternalLink","charAt","urlPartsQuery","split","window","location","host","urlPartsHash","isEmailLink","parseUrl","matches","match","m","r","hash","hostname","href","origin","pathname","port","protocol","search","username","password","toUpperCase","getUrlParameter","name","queryString","replace","results","RegExp","exec","canUseDOM","decodeURIComponent","document","createElement","applyEditModeAttr","webStorageHelper","type","storageKey","defaultValue","set","val","setItem","JSON","stringify","getItem","get","item","parse","signal","onComplete","litiumRequest","requestToken","Promise","resolve","reject","response","fetch","headers","credentials","RequestVerificationToken","then","res","ok","status","json","Error","statusText","catch","err","undefined","KexLoadingDispatchContext","reducer","state","action","count","animateSvgOnLoading","animationName","transform","animationDuration","animationTimingFunction","animationIterationCount","animateCircleOnLoading","strokeDasharray","strokeDashoffset","stroke","lighterDarkGray","primaryBlue","primaryBackground","divStyleOnLoading","opacity","KexLoadingCircle","useReducer","isLoading","OuterDiv","css","InnerDiv","Svg","viewBox","Circle","cx","cy","fill","strokeWidth","useKexLoadingCircle","div","position","width","height","overflow","top","right","transition","duration","property","timingFunction","pointerEvents","backgroundColor","borderRadius","boxShadow","delay","svg","circle","primary","strokeLinecap","addScrollHistory","history","replaceState","id","Date","valueOf","title","scrolls","scrollHistory","pageYOffset","documentElement","scrollTop","updateScrollPosition","eventState","responseUrl","pageTitle","pageType","clicked","pushState","scrollTo","setTimeout","focus","FetchPage","abortControllerRef","current","abortController","abort","AbortController","Fetcher","requestResult","parsedUrl","parsedResUrl","currentPage","usePrevious","ref","useRef","useEffect","hasMounted","KexRouterDispatchContext","KexRouterCurrentPage","KexRouter","appInitData","initUrl","routerState","dispatchState","kexNavigateCallbackRef","initialData","useState","setCurrentPage","dispatchLoading","fetchedPage","useSWR","revalidateOnFocus","dedupingInterval","appSettings","pageCacheTime","prevFetchedPage","pageId","useQueryPage","currentPageData","kexNavigate","useCallback","timeOutFn","touchMoved","body","addEventListener","passive","clearTimeout","scrollRestoration","forEach","e","useSaveScrollPosition","useMemo","useKexNavigate","redirect","target","onNavigated","open","onClick","callbackOnClick","compose","isMedia","rest","substr","A","persist","preventDefault","currentTarget","secondary","secondaryText","white","breadText","modal","hover","placeholder","sale","black","red","darkGray","gray","lightGray","primaryDarkBlue","headerIconGray","veryLightGray","linkColor","iconLightBlue","grayLine","lightBlue","lightBlueHover","middleGray","inStockGreen","notInStockRed","purple","errorPrimary","errorText","buttonPrimary","transparent","NotFoundPage","loadable","Content","initData","footer","App","userState","FallbackComponent","loadablePages","StartPage","StandardPage","RecruitingPage","SegmentPage","ProductPage","BlockPreviewPage","CategoryPage","CheckoutPage","CartPage","OrderConfirmationPage","SearchPage","LoginPage","NewsArchivePage","NewsPage","PlanogramPage","MyPagesPage","MyPlanogramsPage","MyPlanogramsSeasonalPage","KexPage","LoadablePage","useMedia","initialServerValue","matchMedia","setState","mql","onChange","addListener","removeListener","UserContext","UserContextProvider","useQueryUserState","userStateData","useUserStateData","xmlns","d","fillRule","Base","margin","y","media","bottom","MobileHeader","DesktopHeader","MobileMenu","HeaderContext","useQueryHeader","headerData","inEditMode","isDesktop","useHeaderData","FetchUserState","success","setData","languageRoute","queryData","updateUserState","mutate","FetchHeader","litiumContext","kexLoadingCircleDispatch","channelId","currentPageSystemId","productCategorySystemId","channelSystemId","updateHeader","LoadingPageType","KexNotification","KexNotificationOverlay","notify","setNotify","onNotify","notification","Decontruct","stopNotify","GetNotification","loadableNotifications","BaseNotification","CartNotification","LoadableNotification","ErrorBoundary","props","error","info","componentStack","onError","this","call","ignoredError","appInsights","trackException","Component","Wrapper","flexBasis","wordBreak","paddingRight","marginBottom","pseudo","marginTop","padding","x","marginRight","Title","h4","fontSize","List","ul","listStyle","xy","ListItem","li","Link","KexLink","font","size","textDecoration","BodyText","FooterList","footerColumn","isFirst","isLast","data-isfirst","data-isLast","links","index","text","dangerouslySetInnerHTML","__html","bodyText","FetchFooter","FooterElm","FooterContentContainer","FooterListWrapper","display","flexWrap","Footer","useQueryFooter","footerFarLeftColumn","footerLeftColumn","footerRightColumn","footerFarRightColumn","footerBottomColumn","clipRule","SectionCookiesNoticeOuter","inset","SectionCookiesNotice1","left","SectionCookiesNotice2","CookiesNoticeContainer","flexDirection","justifyContent","alignContent","marginLeft","overflowY","CookiesNoticeContent","alignItems","StyledCookieIcon","paddingTop","paddingLeft","CookieHeading","h2","textAlign","CookiesNoticeBtnContainer","gap","CookieBtn","button","cursor","CookieBtnSecondary","border","style","SectionCookiesNoticeSettings","overflowX","CookiesNoticeSettingsContainer","background","CookieSettingsHeading","CookieSettingsHeadingH3","h3","StyledDivider","Divider","CookieSettingsContainer","CookieSettingsContent","CookieSettingToggle","SwitchLocked","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","SliderRoundLocked","span","CookieSettingText","CookieSettingTextP","p","CookiesNoticeSettingsBtnContainer","SettingsBtns","ToggleWrapper","CheckBox","input","CheckboxLabel","label","CheckboxSlider","content","Cookies","acceptButtonText","customSettingsButtonText","customSettingsHeading","customSettingsNecessaryHeading","customSettingsNecessaryInfo","customSettingsStatisticsHeading","customSettingsStatisticsInfo","customSettingsFunctionalHeading","customSettingsFunctionalInfo","customSettingsCloseButtonText","customSettingsSaveButtonText","translations","setTranslations","displayCookies","setDisplayCookies","showCustomSettings","setShowCustomSettings","allowAllCookies","settings","Statistics","Functional","submitCookiesModel","setSubmitCookiesModel","setStateAllowAllCookies","prevState","setStateSettings","setting","InputRef2","postConsent","cookieUrlPost","method","reload","warn","cookieUrl","systemId","displayCookiesPrompt","setInfoText","SectionCookiesNotice","InputRef1","data-value","data-functions-value","checked","htmlFor","KexReporterModal","errorHeader","errorRequestText","Root","CloseButton","StyledCloseIcon","Text","CloseIcon","KexReporterOverlay","errorCount","setErrorCount","__APP_INIT_DATA__","rootEle","getElementById","glitz","GlitzClient","transformer","GlitzTransformers","mediaOrder","loadableReady","hydrate","render","splash","firstElementChild","setAttribute","getAttribute","classList","add","removeChild","updateTimer","epi","setContext","publish","propertyDetails","successful","ready","isEmpty","o","Array","prototype","find","defineProperty","predicate","TypeError","len","thisArg","arguments","k","kValue","configurable","writable","Number","isFinite","isNaN"],"mappings":"43HAGaA,EAAM,OACNC,EAAQ,OACRC,EAAO,OACPC,EAAQ,OACRC,EAAQ,OACRC,EAAU,OACVC,EAAO,OACPC,EAAM,OACNC,EAAM,OACNC,EAAQ,OACRC,EAAU,OACVC,EAAO,OACPC,EAAQ,OACRC,EAAS,QAKTC,EAAiB,OACjBC,EAAiB,OACjBC,EAAiB,OACjBC,EAAW,OAKXC,EAAa,CACxBC,KAAM,EACNC,MAAO,KACPC,KAAM,MACNC,SAAU,KACVC,OAAQ,IACRC,QAAS,MACTC,YAAa,KACbC,MAAO,GAMIC,EAAgB,CAC3BJ,OAAQ,IACRK,WAAY,GACZC,SAAU,GACVC,KAAM,GACNC,SAAU,IACVC,WAAY,KACZC,OAAQ,KACRC,MAAO,KACPC,QAAS,EACTC,OAAQ,EACRC,YAAa,GAOFC,EAAa,CACxBC,KAAM,OACNC,SAAU,gCAGCC,EAAa,CACxBC,QAAS,IACTnB,OAAQ,IACRoB,KAAM,IACNC,QAAS,K,QCnEEzB,EAAO,MACP0B,EAAO,MACPC,EAAU,MACVC,EAAQ,MACRd,EAAS,MACTe,EAAQ,OACRC,EAAY,OACZC,EAAS,OACTC,EAAO,OACPC,EAAY,OACZC,EAAQ,OACRC,EAAW,OACXC,EAAO,OACPC,EAAW,OACXC,EAAU,OACVC,EAAU,OACVC,EAAW,OAMXC,EAAU,SAACC,GAAD,OADF,EACyCA,GAMjDC,EAAiB,KACjBC,EAAkB,KAClBC,EAAgB,KAChBC,EAAgB,IAChBC,GAAqB,IACrBC,GAAiB,IACjBC,GAAsB,IACtBC,GAA0B,IAC1BC,GAAsB,IACtBC,GAAqB,IACrBC,GAAkB,GAMlBC,GAAgB,IAChBC,GAAiB,IACjBC,GAAiC,IACjCC,GAAgC,IAChCC,GAAiC,IACjCC,GAA6B,IAC7BC,GAAgC,IAChCC,GAA4B,IAC5BC,GAA+B,GAC/BC,GAAkC,GAClCC,GAAqB,IACrBC,GAAsB,IACtBC,GAA8B,IAC9BC,GAAmB,GAGnBC,GAA6B,KAC7BC,GAA8B,IAC9BC,GAA2B,IAC3BC,GAA+B,IAC/BC,GAAgC,IAChCC,GAA2B,GAC3BC,GAAmB,GAMnBC,GAAuB,IACvBC,GAAwB,IACxBC,GAA8B,IAC9BC,GAA6B,IC9E7BC,GAAS,CACpBC,aAAc,EACdC,OAAQ,IACRC,aAAc,GACdC,OAAQ,GACRC,SAAU,GACVC,YAAa,EACbC,KAAM,GACNC,WAAY,EACZC,MAAO,GACPC,QAAS,IACTC,WAAY,IACZC,WAAY,KCZDC,GAAY,CACvBC,SAAU,wCAGCC,GAAU,CACrBC,SAAU,QACVC,SAAU,QACVC,YAAa,QACbC,SAAU,QACVC,UAAW,QACXC,QAAS,QACTC,YAAa,QACbC,IAAK,SACLC,YAAa,SACbC,YAAa,SACbC,KAAM,UCdKC,GAAU,CACrBC,YAAa,iDACbC,mBAAoB,iD,uFCMf,IAAMC,GAAK,eACbC,EADa,GAEbC,EAFa,GAGbhC,EAHa,GAIba,EAJa,GAKboB,GALa,GAMbvE,EANa,GAObiE,GAGQO,GAASC,M,kYCfTC,EAAe,IAKfC,EAAgB,IAChBC,EAAqB,IAIrBC,EAA0B,IAE1BC,EAAY,KACZC,EAA+B,KAC/BC,EAA8B,KAC9BC,EAAkB,KAElBC,EAA6B,KAM7BC,EAAmB,WAC9B,IAAMC,EAAqB,GAsC3B,MAAO,CACLC,SAhCe,SAACC,GAChB,GAAKF,EAAOE,GAAZ,CAD6C,2BAAdC,EAAc,iCAAdA,EAAc,kBAE7C,IAAK,IAAIC,EAAI,EAAGA,EAAIJ,EAAOE,GAAOG,OAAQD,GAAK,EAAG,CAAC,IAAD,GAChD,EAAAJ,EAAOE,IAAOE,GAAd,QAAoBD,MA8BtBG,UApBgB,SAACJ,EAAYK,GACxBP,EAAOE,KAAQF,EAAOE,GAAS,IACpCF,EAAOE,GAAP,sBAAoBF,EAAOE,IAA3B,CAAmCK,KAmBnCC,YAXkB,SAACN,EAAYK,GAC3BP,EAAOE,IAAmC,IAAzBF,EAAOE,GAAOG,cAC1BL,EAAOE,GAEdF,EAAOE,GAASF,EAAOE,GAAOO,QAAO,SAACC,GAAD,OAAaA,IAAOH,OAnC/B,I,gCC3BhC,8GAMaI,EAAa,CACxBC,kBAAmBC,YAAM,CAAEC,SAAU,UACrCC,kBAAmBF,YAAM,CAAEG,SAAU,UACrCC,cAAeJ,YAAM,CAAEC,SAAU,UACjCI,cAAeL,YAAM,CAAEG,SAAU,UACjCG,eAAgBN,YAAM,CAAEC,SAAU,UAClCM,eAAgBP,YAAM,CAAEG,SAAU,UAClCK,cAAeR,YAAM,CAAEC,SAAU,UACjCQ,cAAeT,YAAM,CAAEG,SAAU,UACjCO,aAAcV,YAAM,CAAEC,SAAU,WAChCU,aAAcX,YAAM,CAAEG,SAAU,WAChCS,cAAeZ,YAAM,CAAEG,SAAU,WACjCU,eAAgBb,YAAM,CAAEG,SAAU,WAClCW,eAAgBd,YAAM,CAAEC,SAAU,YAG7B,SAASc,EAAiBC,EAAWC,GAC1C,IAAIC,EAAoBpB,EAClBqB,EAAkBC,OAAOC,KAAKH,GAAmBI,KACrD,SAAAC,GAAG,OAAIL,EAAkBK,MAErBC,EAASL,EAAgBM,QAAQT,GACjCU,EAASP,EAAgBM,QAAQR,GAEvC,OAAIO,IAAWE,EAAe,EACvBF,EAASE,EAAS,GAAK,I,6BC/BhC,wEAKaC,GAAqD,EAIrDC,GAAoBC,EAEjCC,QAAQC,IAAI,gBAAiB,oBAC7BD,QAAQC,IAAI,mBAAoB,mB,6BCZhC,wFAQMC,EAAqBC,IAAMC,cAAc,IAElCC,EAAsB,SAAC,GAAkC,IAAhCC,EAA+B,EAA/BA,SAAU9C,EAAqB,EAArBA,KAC9C,OACE,kBAAC0C,EAAmBK,SAApB,CAA6BC,MAAOhD,GACjC8C,IAKMG,EAAqB,WAChC,OAAON,IAAMO,WAAWR,K,6BCnB1B,YAQeS,IALf,WAEE,OADoBC,gB,+BCJtB,4RAwDO,IAAMC,EAAmB,SAAC,GAAD,SAAGC,IAC7BnB,QAAQ,MAAQ,GA8BToB,EAAiB,SAAC,GAAiC,IAA/BD,EAA8B,EAA9BA,IAC/B,GACqB,MAAlBA,EAAIE,OAAO,IAAgC,MAAlBF,EAAIE,OAAO,IACnB,MAAlBF,EAAIE,OAAO,IACO,MAAlBF,EAAIE,OAAO,GAEX,OAAO,EAET,IAAMC,EAAgBH,EAAII,MAAM,KAChC,GAAID,EAAcvD,OAAS,EACzB,OAAwD,IAApDuD,EAAc,GAAGtB,QAAQwB,OAAOC,SAASC,MAM/C,IAAMC,EAAeL,EAAc,GAAGC,MAAM,KAC5C,OAAII,EAAa5D,OAAS,GAC+B,IAAnD4D,EAAa,GAAG3B,QAAQwB,OAAOC,SAASC,OAMH,IAAvCP,EAAInB,QAAQwB,OAAOC,SAASC,OAYrBE,EAAc,SAAC,GAC1B,OAAkC,IADqB,EAA3BT,IACjBnB,QAAQ,YAOR6B,EAAW,SAACV,GACvB,IAAMW,EAAUX,EAAIY,MAClB,4GAEIC,EAAgB,OAAZF,EAAmB,GAAKA,EAE5BG,EAAI,CACRC,KAAMF,EAAE,KAAO,GACfN,KAAMM,EAAE,IAAM,GACdG,SAAUH,EAAE,IAAM,GAClBI,KAAMJ,EAAE,IAAM,GACdK,OAAQL,EAAE,IAAM,GAChBM,SAAUN,EAAE,KAAOA,EAAE,GAAK,IAAM,IAChCO,KAAMP,EAAE,IAAM,GACdQ,SAAUR,EAAE,IAAM,GAClBS,OAAQT,EAAE,IAAM,GAChBU,SAAUV,EAAE,IAAM,GAClBW,SAAUX,EAAE,IAAM,IAOpB,OAL0B,IAAtBC,EAAEO,SAASzE,SACbkE,EAAEO,SAAW,WAAaP,EAAEO,SAASI,cACrCX,EAAEI,OAASJ,EAAEO,SAAW,KAAOP,EAAEP,MAEnCO,EAAEG,KAAOH,EAAEI,OAASJ,EAAEK,SAAWL,EAAEQ,OAASR,EAAEC,KACvCF,GAAKC,GAMDY,EAAkB,SAACC,EAAcC,GAC5CD,EAAOA,EAAKE,QAAQ,MAAO,OAAOA,QAAQ,OAAQ,OAClD,IACIC,EADQ,IAAIC,OAAO,SAAWJ,EAAO,aACrBK,KAClBJ,IAA4BK,IAAc5B,OAAOC,SAASgB,OAAS,KAErE,OAAmB,OAAZQ,EACH,GACAI,mBAAmBJ,EAAQ,GAAGD,QAAQ,MAAO,OAuC5C,IASMI,EAAY,WACvB,QACoB,qBAAX5B,SACPA,OAAO8B,WACP9B,OAAO8B,SAASC,gBAYPC,EAAoB,SAACV,GAChC,OAAOA,EACH,CACE,yBAA0BA,GAE5B,IA+HOW,EAAmB,SAAC,GAIJ,IAH3BC,EAG0B,EAH1BA,KACAC,EAE0B,EAF1BA,WACAC,EAC0B,EAD1BA,aAQMC,EAAM,SAACC,GAAD,OACVtC,OAAOkC,GAAMK,QAAQJ,EAAYK,KAAKC,UAAUH,KAKlD,OAHKtC,OAAOkC,GAAMQ,QAAQP,IACxBE,EAAID,GAEC,CACLO,IAbU,SAACrE,GACX,IAAMsE,EAAO5C,OAAOkC,GAAMQ,QAAQP,GAC9B9F,EAAOuG,EAAOJ,KAAKK,MAAMD,GAAQ,KAErC,OADAvG,EAAgB,OAATA,EAAgB+F,EAAe/F,EAC/BiC,EAAMjC,EAAKiC,GAAOjC,GAUzBgG,U,+CChYJ,WAEe,aACb1C,EACAmD,EACAC,GAQC,IAFDC,EAEA,uDAFwB,GACxBC,EACA,uDADuB,GAEvB,OAAO,IAAIC,SAAW,SAACC,EAASC,GAC9B,IAAIC,EACJC,MAAM3D,EAAK,CACT4D,QAAS,CACP,eAAgB,mBAChBC,YAAa,cACb,yBAA0BR,EAC1BS,yBAA0BR,GAE5BH,WAECY,MAAK,SAAAC,GAEJ,GADAN,EAAWM,EACPA,EAAIC,IAAqB,MAAfD,EAAIE,OAChB,OAAOF,EAAIG,OAEX,MAAM,IAAIC,MAAJ,eAAkBJ,EAAIK,gBAG/BN,MAAK,SAAArH,GAAI,OAAI0G,EAAW1G,EAAM8G,EAASC,EAAQC,MAC/CY,OAAM,SAAAC,GAEU,eAAbA,EAAI5C,MACI,8CAAR4C,EAEAf,OAAQgB,GAERlI,IAAgBE,SAASX,IAAc0I,W,mIClC3CE,EAA4BpF,IAAMC,cAAc,IAIhDoF,EAAU,SAACC,EAA0BC,GACzC,OAAQA,GACN,IAAK,MACH,MAAO,CAAEC,MAAOF,EAAME,MAAQ,GAEhC,IAAK,SACH,IAAMA,EAAQF,EAAME,MAAQ,EAC5B,MAAO,CAAEA,MAAOA,EAAQ,EAAI,EAAIA,GAElC,QACE,OAAOF,IAKPG,EAAsB,CAC1BC,cAAe,CACb,OAAQ,CACNC,UAAW,mBAGfC,kBAAmB1J,IAAMf,QAAQQ,IACjCkK,wBAAyB,SACzBC,wBAAyB,YAGrBC,EAAyB,CAC7BL,cAAe,CACb,KAAM,CACJM,gBAAiB,SACjBC,iBAAkB,IAClBC,OAAQhK,IAAMiK,iBAEhB,MAAO,CACLH,gBAAiB,UACjBC,iBAAkB,MAClBC,OAAQhK,IAAMkK,aAEhB,OAAQ,CACNJ,gBAAiB,UACjBC,iBAAkB,OAClBC,OAAQhK,IAAMmK,oBAGlBT,kBAAmB1J,IAAMf,QAAQU,YACjCgK,wBAAyB,cACzBC,wBAAyB,YAErBQ,EAAoB,CACxBC,QAAS,KAGX,SAASC,EAAT,GAAmD,IAAvBrG,EAAsB,EAAtBA,SAAsB,EAClBsG,qBAAWpB,EAAS,CAAEG,MAAO,IADX,mBACvCA,EADuC,KACvCA,MAASrI,EAD8B,KAE1CuJ,EAAsB,IAAVlB,EAElB,OACE,kBAACJ,EAA0BhF,SAA3B,CAAoCC,MAAOlD,GACzC,kBAACwJ,EAAD,CAAUC,IAAKF,EAAYJ,EAAoB,IAC7C,kBAACO,EAAD,CAAUD,IAAKF,EAAYJ,EAAoB,IAC7C,kBAACQ,EAAD,CAAKF,IAAKF,EAAYjB,EAAsB,GAAIsB,QAAQ,aACtD,kBAACC,EAAD,CACEJ,IAAKF,EAAYX,EAAyB,GAC1CkB,GAAG,KACHC,GAAG,KACHzF,EAAE,KACF0F,KAAK,OACLC,YAAY,SAKnBjH,GAKP,IAAMkH,EAAwD,WAC5D,OAAOrH,IAAMO,WAAW6E,IAOpBuB,EAAWrK,IAAOgL,IAAI,CAC1BC,SAAU,QACVC,MAAO,QACPC,OAAQ,QACRrN,OAAQ8B,IAAM9B,OAAOW,WACrB2M,SAAU,SACVC,IAAK,EACLC,MAAO,EACPrB,QAAS,IACTsB,WAAY,CACVC,SAAU5L,IAAMf,QAAQG,YACxByM,SAAU,UACVC,eAAgB9L,IAAMjB,UAAUC,UAElC+M,cAAe,SAGXpB,EAAWvK,IAAOgL,IAAI,CAC1BC,SAAU,WACVI,IAAK,YACLC,MAAO,MACPjC,UAAW,uBACXuC,gBAAiB,OACjBC,aAAc,MACdX,MAAO,OACPC,OAAQ,OACRW,UAAW,4BACXP,WAAY,CACVC,SAAU5L,IAAMf,QAAQG,YACxB+M,MAAOnM,IAAMf,QAAQM,QACrBsM,SAAU,UACVC,eAAgB9L,IAAMjB,UAAUC,UAElCqL,QAAS,MAGLO,EAAMxK,IAAOgM,IAAI,CACrBf,SAAU,WACVI,IAAK,mBACLC,MAAO,mBACPJ,MAAO,OACPC,OAAQ,SAGJT,EAAS1K,IAAOiM,OAAO,CAC3BrC,OAAQhK,IAAMsM,QACdC,cAAe,W,gFCzIJC,EAAmB,WAID,OAAzB1H,OAAO2H,QAAQrD,OACjBtE,OAAO2H,QAAQC,aACb,CAAEC,IAAI,IAAIC,MAAOC,WACjBjG,SAASkG,MACThI,OAAOC,SAASW,MAIpB,IAAMqH,EAAUC,EAAcvF,MAC9BsF,EAAQjI,OAAO2H,QAAQrD,MAAMuD,IAC3B7H,OAAOmI,aAAerG,SAASsG,gBAAgBC,UACjDH,EAAc7F,IAAI4F,IAGdC,EAAqBvJ,IACvB,GACAsD,YAAiB,CACfC,KAAM,iBACNC,WAAY,gBACZC,aAAc,KAgBPkG,EAAuB,SAClCC,EACAC,EACAC,EACAC,GASA,GANIH,EAAWI,QApBC,SAACH,EAAqBC,GACtCf,IACA,IAAMpD,EAAQ,CAAEuD,IAAI,IAAIC,MAAOC,WAE/B/H,OAAO2H,QAAQiB,UAAUtE,EAAOmE,EAAWD,GAiBzCI,CAAUJ,EAAaC,GAdN,SAACD,EAAqBC,GACrCzI,OAAOC,SAASW,OAAS4H,GAC3BxI,OAAO2H,QAAQC,aAAa5H,OAAO2H,QAAQrD,MAAOmE,EAAWD,GAc7DZ,CAAaY,EAAaC,GAGxBF,EAAWI,QAEb3I,OAAO6I,SAAS,EAAG,QAQnB,GAAIN,QAAgCpE,IAAlBoE,EAAWV,GAAkB,CAC7C,IAAMI,EAAUC,EAAcvF,MAC9B,QAA+BwB,IAA3B8D,EAAQM,EAAWV,IAAmB,CACxC,IAAMA,EAAKI,EAAQM,EAAWV,IAC9BiB,YAAW,kBAAM9I,OAAO6I,SAAS,EAAGhB,KAAK,GACzCiB,YAAW,YAEP9I,OAAOmI,aAAerG,SAASsG,gBAAgBC,aACnCR,GAAM7H,OAAO6I,SAAS,EAAGhB,KACtC,WAGL7H,OAAO6I,SAAS,EAAG,GAGvB7I,OAAO+I,S,gBClCMC,MAvCf,SACErJ,EACAsJ,GACC,IAAD,IACA,UAAAA,EAAmBC,eAAnB,mBAA4BC,uBAA5B,SAA6CC,QAC7CH,EAAmBC,QAAU,CAC3BvJ,MACAwJ,gBAAiB,IAAIE,iBAEvB,IAAMvG,EAASmG,EAAmBC,QAAQC,gBAAgBrG,OAS1D,MAPY,YAARnD,IACFA,EAAMK,OAAOC,SAASa,SAAWd,OAAOC,SAASgB,QAM5CqI,YACL3J,EACAmD,GACA,SAACzG,EAAM8G,EAASC,EAAQmG,GAGtB,IAAMf,EAAce,EAAc5J,IAC5B6J,EAAYnJ,YAASV,GACrB8J,EAAepJ,YAASmI,GAC9BnM,EAAKqN,YAAYlB,YACfgB,EAAU1I,SAAW0I,EAAUvI,SAC/BwI,EAAa3I,SAAW2I,EAAaxI,QACjCuI,EAAU9I,KAAV,UACK8H,GADL,OACmBgB,EAAU9I,MAE7B8H,EACNrF,EAAQ9G,EAAKqN,iB,QC3BJC,MAdf,SAAqBtK,GAGnB,IAAMuK,EAAMC,mBAQZ,OALAC,qBAAU,WACRF,EAAIV,QAAU7J,IACb,CAACA,IAGGuK,EAAIV,SCJTa,GAAa,E,sGC0BjB,IAAMC,EAA2BhL,IAAMC,cAAc,IAC/CgL,EAAuBjL,IAAMC,cAAc,IAE3CoF,EAAU,SAACC,EAAYC,GAC3B,OAAQA,EAAOrC,MACb,IAAK,YACH,OAAO,eAAKoC,EAAZ,CAAmB3E,IAAK4E,EAAO5E,MAEjC,QACE,OAAO2E,IAITyF,GAAa,EAEjB,SAASG,EAAT,GAAkE,IAA7CC,EAA4C,EAA5CA,YAAaC,EAA+B,EAA/BA,QAASjL,EAAsB,EAAtBA,SAAsB,EAC1BsG,qBAAWpB,EAAS,CACvD1E,IAAKyK,IAFwD,mBACxDC,EADwD,KAC3CC,EAD2C,KAIzDC,EAAyBV,mBAJgC,EDvClD,SACblK,EACA6K,GACoC,IAAD,EACGC,mBACpCD,EAAYd,aAFqB,mBAC5BA,EAD4B,KACfgB,EADe,KAK7BC,EAAkBtE,cAClB4C,EAAqBY,mBAEvBZ,EAAmBC,SAAWD,EAAmBC,QAAQvJ,MAAQA,GACnEsJ,EAAmBC,QAAQC,gBAAgBC,QATV,IAWrBwB,EAAgBC,YAC5BlL,EAAM,CAACA,EAAKsJ,GAAsB,KAClCD,EACA,CACEwB,YAAaT,OAAa5F,EAAYqG,EAAYd,YAClDoB,kBAAmBpM,IACnBqM,iBAAkBP,EAAYQ,YAAYC,gBANtC5O,KASF6O,EAAkBvB,EAAyCiB,GAmBjE,OAjBAd,qBAAU,WACHC,KAICmB,GAAmBN,GACpBM,IAAoBN,IAErBD,EAAiBC,EAAsB,SAAR,OAG7BA,GACFF,EAAeE,IAVjBb,GAAa,IAad,CAACY,EAAiBC,EAAaM,IAE3B,CAACxB,EAAaA,EAAYyB,OAAQzB,EAAYjB,WCER2C,CAC3Cf,EAAY1K,IACZwK,GAP6D,mBAKxDkB,EALwD,KAKvCF,EALuC,KAK/B1C,EAL+B,KAUzD6C,EAAcC,uBAAY,SAAC5L,EAAavD,GAExC,IACIkI,GAAUlI,GAAgB,CAAEkI,MAAO,CAAEqE,SAAS,KAA9CrE,MACR,OAAO,IAAIpB,SAAQ,SAACC,EAASC,GAC3BmH,EAAuBrB,QAAU,CAC/B/F,UACAC,SACAmF,WAAYjE,GAEdgG,EAAc,CACZpI,KAAM,YACNvC,IAAKA,SAGR,IAkCH,OJxBmC,SAAC2L,GACpCxB,qBAAU,WACR,IAAI0B,EACAC,GAAa,IACK,iBAAkBzL,SAKjB,sBAAuBA,OAAO2H,UACnD7F,SAAS4J,KAAKC,iBACZ,cACA,WACEF,GAAa,IAEf,CAAEG,SAAS,IAGb5L,OAAO2L,iBACL,UACA,WACMF,IACF/D,IACAmE,aAAaL,GACbA,EAAYxL,OAAO8I,YAAW,WAC5B2C,GAAa,IACZ,OAGP,CAAEG,SAAS,KAIX,sBAAuB5L,OAAO2H,SAChC3H,OAAO2H,QAAQmE,kBAAoB,SACnC9L,OAAO2L,iBAAiB,SAAUjE,EAAkB,CAAEkE,SAAS,KAK/D,CAAC,OAAQ,WAAY,gBAAgBG,SAAQ,SAAAC,GAAC,OAC5ChM,OAAO2L,iBAAiBK,EAAGtE,MAI/B1H,OAAO2L,iBAAiB,YAAY,SAAAK,GAClCV,EAAYtL,OAAOC,SAASW,KAAMoL,QAEnC,CAACV,IIxDJW,CAAsBX,GAEtBxB,qBAAU,WACRhI,SAASkG,MAAT,UAAoBS,KACnB,CAACA,IAMJyD,mBAAQ,WACFnC,EACEQ,EAAuBrB,SACrBmC,EAAgB7C,cAClBF,EACEiC,EAAuBrB,QAAQX,WAC/B8C,EAAgB7C,YAChBC,EACA4C,EAAgB3C,UAElB6B,EAAuBrB,aAAU/E,GAIrC4F,GAAa,IAMd,CAACoB,EAAQE,EAAgB7C,cAG1B,kBAACyB,EAAqB7K,SAAtB,CAA+BC,MAAOgM,GACpC,kBAACrB,EAAyB5K,SAA1B,CAAmCC,MAAOiM,GACvCnM,IAMT,IAAMgN,EAAiB,WACrB,OAAOnN,IAAMO,WAAWyK,IAG1B,SAASvK,IACP,OAAOT,IAAMO,WAAW0K,K,gFChGpBmC,EAAW,SAAC,GAKG,IAJnBd,EAIkB,EAJlBA,YACAe,EAGkB,EAHlBA,OAGkB,IAFlB1M,WAEkB,MAFZ,GAEY,EADlB2M,EACkB,EADlBA,YAEY,KAAR3M,QAAsBwE,IAARxE,IAEL,WAAX0M,GACAzM,YAAe,CAAED,UAChBD,YAAiB,CAAEC,QAEpB2M,EAAchB,EAAY3L,GAAK+D,KAAK4I,KAAiBhB,EAAY3L,GACxDS,YAAY,CAAET,QACvBK,OAAOC,SAASW,KAAOjB,EAEvBK,OAAOuM,KAAK5M,EAAK,YA4CNrE,iBAxCC,SAAC,GASA,IARfkR,EAQc,EARdA,QACAC,EAOc,EAPdA,gBACAH,EAMc,EANdA,YACAnN,EAKc,EALdA,SACAyB,EAIc,EAJdA,KAEA8L,GAEc,EAHdC,QAGc,EAFdD,SACGE,EACW,iGACRtB,EAAca,cACpB,MAAuB,kBAATvL,GAA2C,SAAtBA,EAAKiM,OAAO,EAAG,GAChD,kBAAC,IAAOC,EAAR,eAAUlH,IAAK8G,KAAeE,EAA9B,CAAoCP,OAAO,QAAQzL,KAAMA,IACtDzB,GAGH,kBAAC,IAAO2N,EAAR,eACElH,IAAK8G,KACDE,EAFN,CAGEJ,QAAS,SAAAR,GACPA,EAAEe,UACFf,EAAEgB,iBACF,IAAMX,EAASL,EAAEiB,cAAcZ,OAC3BI,EACFD,GACEA,GAAQ,kBACNJ,EAAS,CAAEd,cAAae,SAAQ1M,IAAG,OAAEiB,QAAF,IAAEA,IAAQ,GAAI0L,oBAGrDE,GAAWA,IACXJ,EAAS,CAAEd,cAAae,SAAQ1M,IAAG,OAAEiB,QAAF,IAAEA,IAAQ,GAAI0L,kBAGrD1L,KAAMA,IAELzB,O,6BClFP,i7CAGO,IAAMqI,EAAU,UACV0F,EAAY,UACZC,EAAgB,UAChBC,EAAQ,UACRC,EAAY,UACZhY,EAAU,UACViY,EAAQ,UACRC,EAAQ,UACRlI,EAAoB,UAEpBmI,EAAc,UACdC,EAAO,UACPC,EAAQ,UACRC,EAAM,UACNC,EAAW,UACXzI,EAAkB,UAClB0I,EAAO,UACPC,EAAY,UACZ1I,EAAc,UACd2I,EAAkB,UAClBC,EAAiB,UACjBC,EAAgB,UAChBC,EAAY,UACZC,EAAgB,UAChBC,EAAW,UACXC,EAAY,UACZC,EAAiB,UACjBC,EAAa,UACbC,EAAe,UACfC,EAAgB,UAChBC,EAAS,UAITC,EAAe,UACfC,EAAY,UAEZC,EAAgB,UAEhBC,EAAc,e,iCC1C3B,2HAyBMC,EAAeC,YAAS,CAAD,iKAAC,kBAC5B,+BAD2B,oPAIvBC,EAAU,SAAC,GAA+B,IAA7B9E,EAA4B,EAA5BA,YAGjB,MAAoB,qBAFC3K,cAAbkJ,SAGN,kBAAC,IAAD,MAEA,oCACE,kBAAC,IAAD,CAAQwG,SAAU/E,EAAY7U,SAC9B,kBAAC,IAAD,MAEA,kBAAC,IAAD,CAAS4Z,SAAU/E,IAEnB,kBAAC,IAAD,CAAQ+E,SAAU/E,EAAYgF,SAC9B,kBAAC,IAAD,QAKN,SAASC,EAAT,GAAyC,IAA1BjF,EAAyB,EAAzBA,YAMb,OACE,kBAAC,IAAD,CAAqB9N,KAAM8N,EAAYa,aACrC,kBAAC,IAAD,CAAqB3O,KAAM8N,EAAYkF,WACrC,kBAAC,IAAD,MACA,kBAAC,IAAD,CAAeC,kBAAmB,kBAAM,kBAACP,EAAD,QACtC,kBAAC,IAAD,KACE,kBAAC,IAAD,CAAW5E,YAAaA,EAAaC,QAASD,EAAYC,SACxD,kBAAC6E,EAAD,CAAS9E,YAAaA,SASrBiF,O,6BCrEf,2CAOMG,EAAgB,CACpBC,UAAWR,YAAS,CAAD,2JAAC,kBAClB,+BADiB,oPAGnBS,aAAcT,YAAS,CAAD,iKAAC,kBACrB,+BADoB,oPAGtBU,eAAgBV,YAAS,CAAD,qKAAC,kBACvB,sDADsB,oPAGxBW,YAAaX,YAAS,CAAD,+JAAC,kBACpB,+BADmB,oPAGrBY,YAAaZ,YAAS,CAAD,+JAAC,kBACpB,qDADmB,oPAGrBa,iBAAkBb,YAAS,CAAD,qKAAC,kBACzB,8BADwB,oPAG1Bc,aAAcd,YAAS,CAAD,iKAAC,kBACrB,qDADoB,oPAGtBe,aAAcf,YAAS,CAAD,iKAAC,kBACrB,oEADoB,oPAGtBgB,SAAUhB,YAAS,CAAD,qJAAC,kBACjB,8BADgB,oPAGlBiB,sBAAuBjB,YAAS,CAAD,+KAAC,kBAC9B,+BAD6B,oPAK/BkB,WAAYlB,YAAS,CAAD,6JAAC,kBACnB,qDADkB,oPAGpBmB,UAAWnB,YAAS,CAAD,2JAAC,kBAClB,+BADiB,oPAGnBD,aAAcC,YAAS,CAAD,iKAAC,kBAAM,+BAAP,oPACtBoB,gBAAiBpB,YAAS,CAAD,uKAAC,kBACxB,+BADuB,oPAGzBqB,SAAUrB,YAAS,CAAD,yJAAC,kBACjB,+BADgB,oPAGlBsB,cAAetB,YAAS,CAAD,mKAAC,kBACtB,4DADqB,oPAGvBuB,YAAavB,YAAS,CAAD,+JAAC,kBACpB,+BADmB,oPAGrBwB,iBAAkBxB,YAAS,CAAD,yKAAC,kBACzB,+BADwB,oPAK1ByB,yBAA0BzB,YAAS,CAAD,yLAAC,kBACjC,+BADgC,qPAO9B0B,EAAU,WAAO,IACbhI,EAAalJ,cAAbkJ,SAEFiI,EAAgBpB,EAAsB7G,GAC5C,YAAwBvE,IAAjBwM,EACL,qCAEA,kBAACA,EAAD,CAAcjb,SAAU,kBAAC,IAAD,SAIbgb,O,uDCzDAE,IArBf,SAAkB7T,GAAoC,IAA7B8T,EAA4B,0DACzBpG,oBAAS,kBACjC9L,IAAoBkS,EAAqB7Q,OAAO8Q,WAAW/T,GAAOuD,WAFjB,mBAC5CgE,EAD4C,KACrCyM,EADqC,KAkBnD,OAbAjH,qBAAU,WACR,IAAMkH,EAAMhR,OAAO8Q,WAAW/T,GACxBkU,EAAW,WACfF,IAAWC,EAAI1Q,UAKjB,OAFA0Q,EAAIE,YAAYD,GAChBF,EAASC,EAAI1Q,SACN,WACL0Q,EAAIG,eAAeF,MAEpB,CAAClU,IAEGuH,I,oICbH8M,EAAcpS,IAAMC,cAAc,IAE3BoS,EAAsB,SAAC,GAAkC,IAAhClS,EAA+B,EAA/BA,SAAU9C,EAAqB,EAArBA,KAAqB,EAC3CiV,YAAkBjV,GAAnCkV,EAD4D,oBAEnE,OACE,kBAACH,EAAYhS,SAAb,CAAsBC,MAAK,OAAEkS,QAAF,IAAEA,MAC1BpS,IAKMqS,EAAmB,WAC9B,OAAOxS,IAAMO,WAAW6R,K,8BCrB1B,2BAkBe9V,iBAff,YAA8C,IAAzBoR,EAAwB,EAAxBA,QACnB,OACE,kBAAC,IAAO5G,IAAR,CACEF,IAAK8G,IACL+E,MAAM,6BACN1L,QAAQ,aAER,0BACE2L,EAAE,+fACFC,SAAS,iB,sECDXC,EAAOtW,IAAOgL,IAAP,aACXG,OAAQvL,IAAMnF,KACdyQ,MAAOtL,IAAMtE,QACbib,OAAQ,CAAEC,EAAG5W,IAAM7E,MACnB6Q,gBAAiBhM,IAAMsM,SACpBuK,YAAM7W,IAAM2B,WAAWM,cAAe,CACvC0U,OAAQ,CAAElL,IAAKzL,IAAM7E,KAAM2b,OAAQ9W,IAAMhF,WAI9BoF,iBAdQ,SAAC,GAA0B,IAAxBoR,EAAuB,EAAvBA,QACxB,OAAO,kBAACkF,EAAD,CAAMhM,IAAK8G,U,mKCCduF,EAAejD,YAAS,CAAD,iKAAC,kBAAM,qDAAP,oPACvBkD,EAAgBlD,YAAS,CAAD,mKAAC,kBAAM,qDAAP,oPACxBmD,EAAanD,YAAS,CAAD,6JAAC,kBAAM,+BAAP,oPAMrBoD,EAAgBpT,IAAMC,cAAc,IAE1C,SAAS3F,EAAT,GAAyC,IAAvB4V,EAAsB,EAAtBA,SAAsB,EACjBmD,YAAenD,GAA7BoD,EAD+B,oBAE9BC,EAAe/S,cAAf+S,WACFC,EAAY5B,YAAS1V,IAAM2B,WAAWW,eAE5C,OACE,kBAAC4U,EAAchT,SAAf,CAAwBC,MAAOiT,GAE5BE,GAAaD,EAAa,kBAACL,EAAD,MAAoB,kBAACD,EAAD,OAC7CO,GAAa,kBAACL,EAAD,OAKrB,IAAMM,EAAgB,WACpB,OAAOzT,IAAMO,WAAW6S,K,8FC9BtBjJ,EAAmC,IAAIE,gBAoB5BqJ,MAlBf,SAAwB/S,GACtBwJ,EAAgBC,QAEhB,IAAMtG,GADNqG,EAAkB,IAAIE,iBACSvG,OAE/B,OAAOwG,YACL3J,EACAmD,GACA,SAACa,EAAKR,EAASC,GACTO,EAAIgP,SACNxP,EAAO,OAACQ,QAAD,IAACA,OAAD,EAACA,EAAK0L,WAGflM,EAAQ,Q,0CCZd,IAAI4G,GAAa,EACbpK,EAAM,GAEK,aAAS6K,GAAsC,IAAD,EACnCC,mBAAoBD,GADe,mBACpDnO,EADoD,KAC9CuW,EAD8C,KAGnDC,EAAkBvT,cAAlBuT,cAERlT,EAAG,eAAWkT,EAAX,qBAEH,IAAMC,EAAYjI,YAChB,qBACA,kBAAM6H,EAAe/S,KACrB,CACE6K,YAAaT,OAAa5F,EAAYqG,EACtCM,kBAAmBpM,MAcvB,OAVAoL,qBAAU,WACHC,EAGC+I,EAAUzW,MACZuW,EAAQE,EAAUzW,MAHpB0N,GAAa,IAMd,CAAC+I,EAAUzW,OAEP,CAACA,IAGH,SAAe0W,IAAtB,+B,4CAAO,4BAAAhV,EAAA,sEACa2U,EAAe/S,GAD5B,QACCgE,EADD,SAGHqP,YAAO,oBAAqBrP,GAAK,GAH9B,4C,8HCnCHwF,EAAmC,IAAIE,gBAmB5B4J,MAjBf,SAAqBtT,EAAauT,GAChC/J,EAAgBC,QAEhB,IAAMtG,GADNqG,EAAkB,IAAIE,iBACSvG,OAE/B,OAAOwG,YACL3J,EACAmD,GACA,SAACa,EAAKR,EAASC,GACTO,EAAIgP,SACNxP,EAAQQ,EAAItH,QAGhB6W,I,kDCVJ,IAAInJ,GAAa,EACbpK,EAAM,GACNuT,EAAgB,GAEL,aAAS1I,GAAkC,IAAD,EAC/BC,mBAAkBD,GADa,mBAChDnO,EADgD,KAC1CuW,EAD0C,KAEjDO,EAA2B9M,cACzBwM,EAAkBvT,cAAlBuT,cAH+C,EAIzBrT,cAAtB2L,EAJ+C,EAI/CA,OAAQiI,EAJuC,EAIvCA,UAEhBF,EAAgB1Q,KAAKC,UAAU,CAC7B4Q,oBAAqBlI,EACrBmI,wBAAyBnI,EACzBoI,gBAAiBH,IAGnBzT,EAAG,eAAWkT,EAAX,0BAEH,IAAMC,EAAYjI,YAChB,0BACA,kBAAMoI,EAAYtT,EAAKuT,KACvB,CACE1I,YAAaT,OAAa5F,EAAYqG,EACtCM,kBAAmBpM,MAkBvB,OAdAoL,qBAAU,WACRqJ,EAA0BL,EAAUzW,KAAe,SAAR,SAC1C,CAAC8W,EAA0BL,EAAUzW,OAExCyN,qBAAU,WACHC,EAGC+I,EAAUzW,MACZuW,EAAQE,EAAUzW,MAHpB0N,GAAa,IAMd,CAAC+I,EAAUzW,OAEP,CAACA,IAOH,SAAemX,IAAtB,+B,4CAAO,4BAAAzV,EAAA,sEACakV,EAAYtT,EAAKuT,GAD9B,QACCvP,EADD,SAIHqP,YAAO,yBAA0BrP,GAAK,GAJnC,4C,uDCzDP,oBAMe8P,IAJf,WACE,OAAO,iC,uECMHC,EAAkB1E,YAAS,CAAD,oKAAC,kBAC/B,+BAD8B,oPAIhC,SAAS2E,IACP,IADgC,EAEJlJ,mBADa,IADT,mBAEzBmJ,EAFyB,KAEjBC,EAFiB,KAI1BC,EAAW,SAACC,GAChBF,EAAUE,GACVC,KAGIC,EAAa,SAACF,GAClBF,EAAUE,IAYZ,OATAjK,qBAAU,WAIR,OAHA7N,IAAgBO,UAAUf,IAAeqY,GACzC7X,IAAgBO,UAAUd,IAAoBuY,GAEvC,WACLhY,IAAgBS,YAAYjB,IAAeqY,GAC3C7X,IAAgBS,YAAYhB,IAAoBuY,OAG7CC,EAAgBN,GAGzB,SAASI,IACPlL,YAAW,WACT7M,IAAgBE,SAAST,IAAoB,MAC5C,KAGL,SAASwY,EAAgBH,GACvB,IAAMI,EAAwB,CAC5BC,iBAAkBpF,YAAS,CAAD,oKAAC,kBAAM,+BAAP,oPAC1BqF,iBAAkBrF,YAAS,CAAD,wKAAC,kBACzB,+BADwB,qPAKtBsF,EAAwBH,EAC5BJ,EAAa7R,MAEf,YAA6BiC,IAAzBmQ,EACK,kBAACZ,EAAD,CAAiBK,aAAcA,IACjC,kBAACO,EAAD,CAAsBP,aAAcA,IAG9BJ,O,yFC9CTY,E,YACJ,WAAYC,GAAkB,IAAD,8BAC3B,4CAAMA,KACDlQ,MAAQ,CACXmQ,WAAOtQ,EACPuQ,KAAM,CACJC,eAAgB,KALO,E,+EAeXF,EAAcC,GAAkB,IACxCE,EAAYC,KAAKL,MAAjBI,QAER,GAAuB,oBAAZA,EACT,IAEEA,EAAQE,KAAKD,KAAMJ,EAAOC,EAAOA,EAAKC,eAAiB,IACvD,MAAOI,IAGN/U,OAAegV,aACjBhV,OAAegV,YAAYC,eAAeR,GAG7CI,KAAK9D,SAAS,CAAE0D,QAAOC,W,+BAGf,IAAD,EACiCG,KAAKL,MAArCrV,EADD,EACCA,SAAUmQ,EADX,EACWA,kBADX,EAEiBuF,KAAKvQ,MAArBmQ,EAFD,EAECA,MAAOC,EAFR,EAEQA,KAEf,YAAcvQ,IAAVsQ,EAEA,kBAACnF,EAAD,CACEqF,eAEED,EAAOA,EAAKC,eAAiB,GAE/BF,MAAOA,IAKNtV,GAAY,Q,gDAtCWsV,GAE9B,MAAO,CAAEA,MAAOA,O,GAbQzV,IAAMkW,WAqDnBX,O,iGC7Bf,IAAMY,EAAU7Z,IAAOgL,IAAP,aACd8O,UAAW,OACXpY,SAAU,OACVqY,UAAW,aACXC,aAAc,OACdC,aAAcra,IAAMpE,QAAQ,KACzB0e,YAAO,CAAC,sCAAuC,CAChDC,UAAW,IAPC,GASXD,YAAO,CAAC,qCAAsC,CAC/CC,UAAWva,IAAMpE,QAAQ,KAVb,GAYXib,YAAMlV,aAAWO,cAAe,CACjCgY,UAAW,MACXpY,SAAU,QAdE,GAgBX+U,YAAMlV,aAAWW,cAAZ,aACN4X,UAAW,MACXpY,SAAU,MACVuY,aAAc,GACXC,YAAO,CAAC,sCAAuC,CAChDJ,UAAW,MACXpY,SAAU,MACV0Y,QAAS,CAAEC,EAAG,GACdC,YAAa,SART,GAUHJ,YAAO,CAAC,qCAAsC,CAC/C3D,OAAQ,CAAE8D,EAAG,cAKbE,EAAQva,IAAOwa,GAAP,aACZC,SAAU,OACVlhB,cAAeqG,IAAMnF,KACrB3B,WAAY8G,IAAM7E,KAClB+E,MAAOF,IAAMkS,MACbmI,aAAcra,IAAMpE,QAAQ,IACzBib,YAAMlV,aAAWW,cAAe,CAAEuY,SAAU7a,IAAM1H,SAGjDwiB,EAAO1a,IAAO2a,GAAG,CACrBC,UAAW,OACXR,QAAS,CACPS,GAAI,KAIFC,EAAW9a,IAAO+a,GAAG,CACzBxE,OAAQ,CAAElL,IAAKzL,IAAM/F,QACrBN,cAAeqG,IAAMrG,cAAcG,OAG/BshB,EAAOhb,YAAOib,IAAS,CAC3BC,KAAM,CAAEC,KAAMvb,IAAM/E,WACpBugB,eAAgB,YAChBtb,MAAOF,IAAMkS,MACb,SAAU,CACRsJ,eAAgB,UAIdC,EAAWrb,IAAOgL,IAAI,CAC1ByP,SAAU7a,IAAM7H,MAChB+H,MAAOF,IAAMkS,MACbhZ,WAAY,WAGCwiB,EA3Ff,YAAmE,IAA7CC,EAA4C,EAA5CA,aAAcC,EAA8B,EAA9BA,QAASC,EAAqB,EAArBA,OAC3C,OAAOF,EACL,kBAAC1B,EAAD,CAAS6B,eAAcF,EAASG,cAAaF,GAC1CF,EAAavhB,QAAU,kBAACugB,EAAD,KAAQgB,EAAavhB,QAC7C,kBAAC0gB,EAAD,KACGa,EAAaK,OACZL,EAAaK,MAAM7Y,KAAI,SAACuE,EAAauU,GAAd,OACrB,kBAACf,EAAD,CAAU9X,IAAKsE,EAAKhC,MAAQgC,EAAKhC,KAAOuW,GACtC,kBAACb,EAAD,CAAM1V,KAAMgC,EAAKhC,MAAOgC,EAAKwU,WAIrC,kBAACT,EAAD,CACEU,wBAAyB,CACvBC,OAAQT,EAAaU,aAK3B,kBAACpC,EAAD,CAAS6B,eAAcF,EAASG,cAAaF,K,gCC9B7C5N,EAAmC,IAAIE,gBAmB5BmO,MAjBf,SAAqB7X,EAAauT,GAChC/J,EAAgBC,QAEhB,IAAMtG,GADNqG,EAAkB,IAAIE,iBACSvG,OAE/B,OAAOwG,YACL3J,EACAmD,GACA,SAACa,EAAKR,EAASC,GACTO,EAAIgP,SACNxP,EAAQQ,EAAItH,QAGhB6W,I,gBCTAnJ,GAAa,EC6BjB,IAAM0N,EAAYnc,IAAO6T,OAAO,CAAEjI,gBAAiBhM,IAAMiK,kBAEnDuS,EAAyBpc,IAAOgL,IAAI,CACxCtJ,SAAU9B,IAAMjE,gBAChBye,QAAS,CAAEC,EAAG,SACd9D,OAAQ,CAAE8D,EAAG,UAGTgC,EAAoBrc,IAAOgL,IAAP,aACxBsR,QAAS,OACTC,SAAU,OACVnC,QAAS,CACP5D,EAAG5W,IAAMpE,QAAQ,KAEhBib,YAAMlV,aAAWW,cAAe,CACjCkY,QAAS,CAAE/O,IAAKzL,IAAMpE,QAAQ,IAAKkb,OAAQ9W,IAAMpE,QAAQ,SAI9CghB,IA7Cf,YAA0C,IAAD,EDD1B,SAAStN,GAAkC,IAAD,EAC/BC,mBAAkBD,GADa,mBAChDnO,EADgD,KAC1CuW,EAD0C,KAEjDO,EAA2B9M,cAEzBwM,EAAkBvT,cAAlBuT,cAJ+C,EAKzBrT,cAAtB2L,EAL+C,EAK/CA,OAAQiI,EALuC,EAKvCA,UAEVF,EAAgB1Q,KAAKC,UAAU,CACnC4Q,oBAAqBlI,EACrBmI,wBAAyBnI,EACzBoI,gBAAiBH,IAGbzT,EAAG,eAAWkT,EAAX,0BAEHC,EAAYjI,YAChB,0BACA,kBAAM2M,EAAY7X,EAAKuT,KACvB,CACE1I,YAAaT,OAAa5F,EAAYqG,EACtCM,kBAAmBpM,MAkBvB,OAdAoL,qBAAU,WACRqJ,EAA0BL,EAAUzW,KAAe,SAAR,SAC1C,CAAC8W,EAA0BL,EAAUzW,OAExCyN,qBAAU,WACHC,EAGC+I,EAAUzW,MACZuW,EAAQE,EAAUzW,MAHpB0N,GAAa,IAMd,CAAC+I,EAAUzW,OAEP,CAACA,GC5BJ0b,CATmC,EAAvB7I,UAAuB,sBAGnC8I,EAHmC,EAGnCA,oBACAC,EAJmC,EAInCA,iBACAC,EALmC,EAKnCA,kBACAC,EANmC,EAMnCA,qBACAC,EAPmC,EAOnCA,mBAIJ,OACE,kBAACX,EAAD,KACE,kBAACC,EAAD,KACE,kBAACC,EAAD,KACE,kBAAC,EAAD,CAAYd,aAAcmB,EAAqBlB,SAAS,IACxD,kBAAC,EAAD,CAAYD,aAAcoB,IAC1B,kBAAC,EAAD,CAAYpB,aAAcqB,IAC1B,kBAAC,EAAD,CAAYrB,aAAcsB,IAC1B,kBAAC,EAAD,CAAYtB,aAAcuB,EAAoBrB,QAAQ,S,8GC2BjDzb,mBAxDf,YACE,OAD4C,EAAxBoR,QAElB,kBAAC,IAAO5G,IAAR,CACEW,OAAO,OACPD,MAAM,OACNT,QAAQ,YACRI,KAAK,OACLsL,MAAM,8BAEN,0BACEE,SAAS,UACT0G,SAAS,UACT3G,EAAE,s7CACFvL,KAAK,YAEP,0BACEuL,EAAE,gMACFvL,KAAK,YAEP,0BACEuL,EAAE,gNACFvL,KAAK,YAEP,0BACEuL,EAAE,6MACFvL,KAAK,YAEP,0BACEuL,EAAE,8MACFvL,KAAK,YAEP,0BACEuL,EAAE,kNACFvL,KAAK,YAEP,0BACEuL,EAAE,oNACFvL,KAAK,YAEP,0BACEuL,EAAE,gNACFvL,KAAK,YAEP,0BACEuL,EAAE,oNACFvL,KAAK,YAEP,0BACEuL,EAAE,kNACFvL,KAAK,gB,6BCkNPmS,EAA4Bhd,IAAOgL,IAAI,CAC3CE,MAAO,OACPU,gBAAiB,mBACjBX,SAAU,QACVgS,MAAO,EACP1G,OAAQ,OACRzY,OAAQ,UAGJof,EAAwBld,IAAOgL,IAAI,CACvCY,gBAAiBhM,IAAMkS,MACvB7G,SAAU,WACVkS,KAAM,MACN9R,IAAK,MACLhC,UAAW,wBACX6B,MAAO,QACPxJ,SAAU,OACV6U,OAAQ,SAGJ6G,EAAwBpd,IAAOgL,IAAI,CACvCY,gBAAiBhM,IAAMkS,MACvB7G,SAAU,WACVkS,KAAM,MACN9R,IAAK,MACLhC,UAAW,wBACX6B,MAAO,QACPxJ,SAAU,OACV6U,OAAQ,SAGJ8G,EAAyBrd,IAAOgL,IAAP,aAC7BoP,QAAS,CAAEC,EAAG,OAAQ7D,EAAG,SACzB8F,QAAS,OACTgB,cAAe,SACfC,eAAgB,SAChBC,aAAc,UACX/G,YAAM7W,IAAM2B,WAAWQ,eAAgB,CACxCmJ,MAAO,OACPuS,WAAY,EACZxD,aAAc,EACdyD,UAAW,SACXvS,OAAQ,OACRiP,QAAS,CAAEC,EAAG,OAAQ7D,EAAG,aAIvBmH,EAAuB3d,IAAOgL,IAAI,CACtCsR,QAAS,OACTgB,cAAe,SACfE,aAAc,SACdI,WAAY,SACZL,eAAgB,WAGZM,EAAmB7d,IAAOgL,IAAI,CAClCuS,eAAgB,SAChBK,WAAY,SACZ3D,aAAc,OACdrO,gBAAiBhM,IAAMkK,YACvB+B,aAAc,MACdiS,WAAY,OACZC,YAAa,SAGTC,EAAgBhe,IAAOie,GAAG,CAC9B5jB,WAAY,MACZogB,SAAU,SACV3hB,WAAY,SACZmhB,aAAc,SAGVoB,EAAWrb,IAAOgL,IAAP,aACfiP,aAAc,OACdnhB,WAAY,SACZolB,UAAW,SACXzD,SAAU,OACVpgB,WAAY,KACToc,YAAM7W,IAAM2B,WAAWO,cAAe,CACvChJ,WAAY,aAIVqlB,EAA4Bne,IAAOgL,IAAI,CAC3CsR,QAAS,OACTgB,cAAe,SACfC,eAAgB,SAChBK,WAAY,SACZzD,UAAW,OACXiE,IAAK,SAGDC,EAAYre,IAAOse,OAAP,aAChBpT,MAAO,OACPU,gBAAiBhM,IAAMkK,YACvBhK,MAAOF,IAAMkS,MACbsI,QAAS,CAAEC,EAAG,OAAQ7D,EAAG,QACzB+H,OAAQ,UACRlkB,WAAY,MACZogB,SAAU,QACPhE,YAAM7W,IAAM2B,WAAWQ,eAAgB,CACxCoY,UAAW,SACXC,QAAS,CAAEC,EAAG,OAAQ7D,EAAG,YAIvBgI,EAAqBxe,IAAOse,OAAP,aACzBpT,MAAO,OACPU,gBAAiBhM,IAAMkS,MACvB2M,OAAQ,CAAE5D,GAAI,CAAE3P,MAAO,MAAOwT,MAAO,QAAS5e,MAAOF,IAAMkK,cAC3DhK,MAAOF,IAAMkK,YACbsQ,QAAS,CAAEC,EAAG,OAAQ7D,EAAG,QACzB+H,OAAQ,UACRlkB,WAAY,MACZogB,SAAU,QACPhE,YAAM7W,IAAM2B,WAAWQ,eAAgB,CACxCoY,UAAW,SACXC,QAAS,CAAEC,EAAG,OAAQ7D,EAAG,YAIvBmI,EAA+B3e,IAAOgL,IAAP,aACnCY,gBAAiBhM,IAAMkS,MACvBmL,MAAO,EACP/R,MAAO,QACPxJ,SAAU,OACVgc,UAAW,OACXkB,UAAW,SACXrI,OAAQ,QACLE,YAAM7W,IAAM2B,WAAWQ,eAAgB,CACxCoJ,OAAQ,UAIN0T,EAAiC7e,IAAOgL,IAAP,aACrC8T,WAAY,UACZ1E,QAAS,OACTqD,WAAY,QACZvS,MAAO,oBACP+O,aAAc,QACXxD,YAAM7W,IAAM2B,WAAWQ,eAAgB,CACxCqJ,SAAU,aAIR2T,EAAwB/e,IAAOgL,IAAI,CACvCkT,UAAW,SACXjE,aAAc,SAGV+E,EAA0Bhf,IAAOif,GAAG,CACxCxE,SAAU,OACV3hB,WAAY,OACZuB,WAAY,MACZkc,OAAQ,IACRzW,MAAO,YAGHof,EAAgBlf,YAAOmf,IAAD,aAC1BjU,MAAO,OACPU,gBAAiBhM,IAAMkT,SACvByD,OAAQ,CAAEC,EAAG5W,IAAM5H,QAChBye,YAAMlV,aAAWM,cAAe,CACjC0U,OAAQ,CAAEC,EAAG5W,IAAM5H,WAIjBonB,EAA0Bpf,IAAOgL,IAAI,CACzCsR,QAAS,OACT/F,OAAQ,CAAEC,EAAG,SAAU6D,EAAG,SAGtBgF,EAAwBrf,IAAOgL,IAAI,CACvCsR,QAAS,OACTgB,cAAe,QAGXgC,EAAsBtf,IAAOgL,IAAI,CACrCsP,YAAa,OACbH,UAAW,SAGPoF,EAAevf,IAAOgL,IAAI,CAC9BC,SAAU,WACVqR,QAAS,eACTpR,MAAO,OACPC,OAAQ,OACRS,gBAAiBhM,IAAMkK,YACvBG,QAAS,MACTuV,oBAAqB,OACrBC,qBAAsB,OACtBC,uBAAwB,OACxBC,wBAAyB,SAGrBC,EAAoB5f,IAAO6f,KAAK,CACpC5U,SAAU,WACVE,OAAQ,OACRD,MAAO,OACPiS,KAAM,OACNzG,OAAQ,MACR9K,gBAAiBhM,IAAMkS,MACvBjG,aAAc,QAGViU,EAAoB9f,IAAOwa,GAAG,CAClCtP,MAAO,QACPqL,OAAQ,CAAEC,EAAG,MAAO6D,EAAG,QACvBI,SAAU,OACVpgB,WAAY,IACZvB,WAAY,SAGRinB,EAAqB/f,IAAOggB,EAAE,CAClClgB,MAAO,UACP2a,SAAU,OACVpgB,WAAY,MAGR4lB,EAAoCjgB,IAAOgL,IAAI,IAE/CkV,EAAelgB,IAAOgL,IAAP,aACnBsR,QAAS,OACTiB,eAAgB,SAChBa,IAAK,QACF3H,YAAM7W,IAAM2B,WAAWQ,eAAgB,CACxCoY,UAAW,aAITgG,EAAgBngB,IAAOgL,IAAI,CAC/BC,SAAU,aAGNmV,EAAWpgB,IAAOqgB,MAAM,CAC5BpW,QAAS,EACTnM,OAAQ,EACR+N,aAAc,OACdX,MAAO,OACPC,OAAQ,SAGJmV,EAAgBtgB,IAAOugB,MAAM,CACjCtV,SAAU,WACVI,IAAK,EACL8R,KAAM,EACNjS,MAAO,OACPC,OAAQ,OACRU,aAAc,OACdiT,WAAY,UACZP,OAAQ,YAGJiC,EAAiBxgB,IAAO6f,KAAK,CACjClU,cAAe,OACfV,SAAU,WACVI,IAAK,EACLiR,QAAS,QACTmE,QAAS,KACT5U,aAAc,MACdX,MAAO,OACPC,OAAQ,OACRoL,OAAQ,MACRuI,WAAY,UACZvT,WAAY,SAECmV,IAvgBC,SAAC,GAAkB,IAAD,QAAf9M,EAAe,EAAfA,SAETlE,EAA6BkE,EAA7BlE,YAAatB,EAAgBwF,EAAhBxF,YAFW,EAKQe,mBAAS,CAC/CmN,SAAS,EACTviB,QAAS,GACTqf,KAAM,GACNuH,iBAAkB,GAClBC,yBAA0B,GAC1BC,sBAAuB,GACvBC,+BAAgC,GAChCC,4BAA6B,GAC7BC,gCAAiC,GACjCC,6BAA8B,GAC9BC,gCAAiC,GACjCC,6BAA8B,GAC9BC,8BAA+B,GAC/BC,6BAA8B,KAnBA,mBAKzBC,EALyB,KAKXC,EALW,OAsBYpS,oBAAS,GAtBrB,mBAsBzBqS,EAtByB,KAsBTC,EAtBS,OAuBoBtS,oBAAS,GAvB7B,oBAuBzBuS,GAvByB,MAuBLC,GAvBK,SAwBoBxS,mBAAS,CAC3DyS,iBAAiB,EACjBC,SAAU,CACRC,YAAY,EACZC,YAAY,KA5BgB,qBAwBzBC,GAxByB,MAwBLC,GAxBK,eA2CjBC,GA3CiB,iFA2ChC,WAAuCne,GAAvC,SAAAtB,EAAA,sDACEwf,IAAsB,SAAAE,GAAS,sBAC1BA,EAD0B,CAE7BP,gBAAiB7d,OAHrB,4CA3CgC,+BAkDjBqe,GAlDiB,iFAkDhC,WAAgCC,GAAhC,eAAA5f,EAAA,uDACQof,EADR,eACwBG,GAAmBH,WAChCQ,IAAYR,EAASQ,GAC9B9e,QAAQC,IAAI8e,IACZL,IAAsB,SAAAE,GAAS,sBAC1BA,EAD0B,CAE7BN,gBANJ,4CAlDgC,+BA4DjBU,GA5DiB,iFA4DhC,WAA2BX,GAA3B,eAAAnf,EAAA,6DACEwf,IAAsB,SAAAE,GAAS,sBAC1BA,EAD0B,CAE7BP,gBAAiBA,OAGbY,EANR,eAMgC9S,EAAY6H,cAN5C,sBAOQvP,MAAMwa,EAAe,CACzBC,OAAQ,OACRxa,QAAS,CACP,eAAgB,oBAElBmI,KAAMlJ,KAAKC,UAAU6a,MAEpB5Z,MAAK,SAAAC,GAEJ3D,OAAOC,SAAS+d,YAEjB/Z,OAAM,SAAA+H,GAELnN,QAAQof,KAAKjS,MApBnB,OAuBE+Q,GAAkB,GAvBpB,4CA5DgC,sBAgChCjT,qBAAU,WACR,IAAMoU,EAAS,eAAWlT,EAAY6H,cAAvB,aACfvP,MAAM,GAAD,OAAI4a,EAAJ,qCAA0CxU,EAAYyU,WACxDza,MAAK,SAAAC,GAAG,OAAIA,EAAIG,UAChBJ,MAAK,SAAAC,GAC4B,GAA5BA,EAAIya,uBACRvB,EAAgBlZ,GAChBoZ,GAAkB,SAErB,IAzC6B,OAsFItS,oBAAS,GAtFb,qBAsFX4T,IAtFW,aAuF1BC,GAAuBtB,GACzBtE,EACAF,EAEE+F,GAAY1U,iBAAO,MACnB+T,GAAY/T,iBAAO,MAEzB,OAAOiT,EACL,kBAACxE,EAAD,KACE,kBAACgG,GAAD,KACE,kBAAC3F,EAAD,KACE,kBAACM,EAAD,KACE,kBAACE,EAAD,KACE,kBAAC,EAAD,OAEF,kBAACG,EAAD,YAAgBsD,QAAhB,IAAgBA,OAAhB,EAAgBA,EAAcvnB,SAC9B,6BACE,kBAACshB,EAAD,CACEU,wBAAyB,CAAEC,OAAM,OAAEsF,QAAF,IAAEA,OAAF,EAAEA,EAAclI,UAIhC,GAAtBsI,IACC,kBAACvD,EAAD,KACE,kBAACE,EAAD,CAAW6E,aAAW,OAAOhS,QAAS,kBAAMqR,IAAY,KAAxD,OACGjB,QADH,IACGA,OADH,EACGA,EAAcX,kBAEjB,kBAACnC,EAAD,CACEtN,QAAS,WACPgR,IAAwB,GACxBP,IAAsB,GACtBoB,IAAY,KAJhB,OAOGzB,QAPH,IAOGA,OAPH,EAOGA,EAAcV,2BAIE,GAAtBc,IACC,oCACE,kBAAC/C,EAAD,KACE,kBAACE,EAAD,KACE,kBAACE,EAAD,KACE,kBAACC,EAAD,YACGsC,QADH,IACGA,OADH,EACGA,EAAcT,uBAEjB,kBAAC3B,EAAD,OAEF,kBAACE,EAAD,KACE,kBAACC,EAAD,KACE,kBAACC,EAAD,KACE,kBAACC,EAAD,KACE,kBAACK,EAAD,QAGJ,kBAACE,EAAD,YACGwB,QADH,IACGA,OADH,EACGA,EAAcR,+BACf,kBAACf,EAAD,YACGuB,QADH,IACGA,OADH,EACGA,EAAcP,gCAKvB,kBAAC3B,EAAD,CAAyB7S,GAAG,cAC1B,kBAAC8S,EAAD,KACE,kBAACC,EAAD,KACE,kBAACa,EAAD,KACE,kBAACC,EAAD,CACE9R,IAAK2U,GACLrc,KAAK,WACLuc,uBAAqB,QACrBxN,SAAU,kBAAMyM,GAAiB,eACjC7V,GAAI,WAEN,kBAAC+T,EAAD,CACE5B,MAAO,CACL9S,iBAA0B,OAATqX,SAAS,IAATA,IAAA,UAAAA,GAAWrV,eAAX,eAAoBwV,SACjCxjB,IAAM6S,gBACN,WAEN4Q,QAAQ,WAEV,kBAAC7C,EAAD,CACE9B,MAAO,CACLrV,WAAoB,OAAT4Z,SAAS,IAATA,IAAA,UAAAA,GAAWrV,eAAX,eAAoBwV,SAC3B,mBACA,uBAKZ,kBAACtD,EAAD,YACGwB,QADH,IACGA,OADH,EACGA,EAAcN,gCACf,kBAACjB,EAAD,YACGuB,QADH,IACGA,OADH,EACGA,EAAcL,iCAKvB,kBAAC7B,EAAD,CAAyB7S,GAAG,aAC1B,kBAAC8S,EAAD,KACE,kBAACC,EAAD,KACE,kBAACa,EAAD,KACE,kBAACC,EAAD,CACE9R,IAAKgU,GACL1b,KAAK,WACLuc,uBAAqB,QACrBxN,SAAU,kBAAMyM,GAAiB,eACjC7V,GAAI,WAEN,kBAAC+T,EAAD,CACE5B,MAAO,CACL9S,iBAA0B,OAAT0W,SAAS,IAATA,IAAA,UAAAA,GAAW1U,eAAX,eAAoBwV,SACjCxjB,IAAM6S,gBACN,WAEN4Q,QAAQ,WAEV,kBAAC7C,EAAD,CACE9B,MAAO,CACLrV,WAAoB,OAATiZ,SAAS,IAATA,IAAA,UAAAA,GAAW1U,eAAX,eAAoBwV,SAC3B,mBACA,uBAKZ,kBAACtD,EAAD,YACGwB,QADH,IACGA,OADH,EACGA,EAAcJ,gCACf,kBAACnB,EAAD,YACGuB,QADH,IACGA,OADH,EACGA,EAAcH,mCAO3B,kBAAClB,EAAD,KACE,kBAACC,EAAD,KACE,kBAAC1B,EAAD,CACEtN,QAAS,WACPgR,IAAwB,GACxBP,IAAsB,GACtBoB,IAAY,KAJhB,OAOGzB,QAPH,IAOGA,OAPH,EAOGA,EAAcF,+BAEjB,kBAAC/C,EAAD,CACE6E,aAAW,QACXhS,QAAS,kBAAMqR,IAAY,KAF7B,OAIGjB,QAJH,IAIGA,OAJH,EAIGA,EAAcD,oCAU/B,gC,sFC1OWiC,MAnBf,WAA6B,IAAD,EAMtBtf,cAJFsd,aACuBiC,EAHC,EAGtB,qBAC0BC,EAJJ,EAItB,0BAIJ,OACE,kBAACC,EAAD,KACE,kBAACzlB,EAAD,KAASulB,GACT,kBAACG,EAAD,CAAaxS,QAAS,kBAAMxM,OAAOC,SAAS+d,QAAO,KACjD,kBAACiB,EAAD,OAEF,kBAACC,EAAD,KAAOJ,KAOPC,EAAOzjB,IAAOgL,IAAI,CACtBE,MAAO,OACPU,gBAAiB,UACjBwO,QAAS,CAAEC,EAAG,OAAQ7D,EAAG,QACzBrL,OAAQ,OACRF,SAAU,QACVnN,OAAQ8B,IAAM9B,OAAOY,aAGjBilB,EAAkB3jB,YAAO6jB,IAAW,CACxC1Y,OAAQ,OACRD,MAAO,OACPoP,YAAa,QAGToJ,EAAc1jB,IAAOse,OAAO,CAChCrT,SAAU,WACVK,MAAO,OACPD,IAAK,SAGDrN,EAASgC,IAAOie,GAAG,CACvBxD,SAAU7a,IAAM3E,MAChBZ,WAAYuF,IAAMvF,WAAWE,KAC7B0f,aAAc,SAGV2J,EAAO5jB,IAAOggB,EAAE,CACpBvF,SAAU7a,IAAM7H,QChCH+rB,IAlBf,WAA+B,IAAD,EACQ3U,mBAAS,GADjB,mBACrB4U,EADqB,KACTC,EADS,KAGtB1K,EAAU,WACd0K,EAAc,IAWhB,OARAxV,qBAAU,WAGR,OAFA7N,IAAgBO,UAAUhB,IAAcoZ,GAEjC,WACL3Y,IAAgBS,YAAYlB,IAAcoZ,OAIvC,oCAAkB,IAAfyK,GAAoB,kBAAC,EAAD,S,qFCnBhC,8FAiBM/a,EAAStE,OAAeuf,kBAExBC,EAAe1d,SAAS2d,eAAe,QACvCC,EAAQ,IAAIC,IAAY,CAC5BC,YAAaC,cACbC,WAAYhiB,qBAGe,OAAzBkC,OAAO2H,QAAQrD,OACjBtE,OAAO2H,QAAQC,aACb,CAAEC,IAAI,IAAIC,MAAOC,WACjBjG,SAASkG,MACThI,OAAOC,SAASW,MAIhB4e,EAAQrgB,SAAS,GACnB4gB,aAAc,WACZC,kBAGE,kBAAC,IAAD,CAAeN,MAAOA,GACpB,kBAAC,IAAD,CAAKvV,YAAa7F,KAGpBkb,MAIJS,iBAGE,kBAAC,IAAD,CAAeP,MAAOA,GACpB,kBAAC,IAAD,CAAKvV,YAAa7F,KAGpBkb,GACA,WACE,IAAMU,EAAcpe,SAAS2d,eAAe,UAClC,MAAVS,GACEA,EAAOC,mBACPD,EAAOC,kBAAkBC,aACvB,QACAF,EAAOC,kBACJE,aAAa,SACb7e,QAAQ,eAAgB,KAErB,MAAV0e,GAAkBA,EAAOI,UAAUC,IAAI,iBACvCzX,YAAW,WACToX,GAAUpe,SAAS4J,KAAK8U,YAAYN,KACnC,QAMTlgB,OAAO2L,iBAAiB,QAAQ,WAG9B,IAAI8U,EACEC,EAAO1gB,OAAe0gB,IAK5B,SAASC,IACPD,EAAIE,QAAQ,mBAEZF,EAAIlkB,UAAU,qBAAqB,SAASqkB,GAErCA,EAAgBC,aAIrBjV,aAAa4U,GACbA,EAAczgB,OAAO8I,YAAW,WAC9BkK,YAAO,aACN,SAhBF0N,IAqBDA,EAAIttB,OAA2B,IAAnBstB,EAAIttB,KAAK2tB,MAEvBJ,IAGSD,EAAIlkB,WACbkkB,EAAIlkB,UAAU,iBAAiB,WAC7BmkB,Y,cC1GNxiB,OAAO6iB,QAAU,SAASC,GACxB,IAAK,IAAI3kB,KAAK2kB,EACZ,OAAO,EAET,OAAO,GAIJC,MAAMC,UAAUC,MAEnBjjB,OAAOkjB,eAAeH,MAAMC,UAAW,OAAQ,CAC7C9hB,MAAO,SAASiiB,GAEd,GAAY,MAARzM,KACF,MAAM,IAAI0M,UAAU,iCAGtB,IAAIN,EAAI9iB,OAAO0W,MAGX2M,EAAMP,EAAE1kB,SAAW,EAGvB,GAAyB,oBAAd+kB,EACT,MAAM,IAAIC,UAAU,gCAUtB,IANA,IAAIE,EAAUC,UAAU,GAGpBC,EAAI,EAGDA,EAAIH,GAAK,CAKd,IAAII,EAASX,EAAEU,GACf,GAAIL,EAAUxM,KAAK2M,EAASG,EAAQD,EAAGV,GACrC,OAAOW,EAGTD,MAMJE,cAAc,EACdC,UAAU,SAKU3d,IAApB4d,OAAOC,WACTD,OAAOC,SAAW,SAAS3iB,GACzB,MAAwB,kBAAVA,GAAsB2iB,SAAS3iB,KAGjD0iB,OAAOE,MACLF,OAAOE,OACP,SAAetG,GACb,MAAwB,kBAAVA,GAAsBA,IAAUA,K","file":"Dist/build-client/static/js/main.df7c0133.chunk.js","sourcesContent":["/**\r\n Font sizes\r\n **/\r\nexport const tau = '10px';\r\nexport const alpha = '12px';\r\nexport const beta = '14px';\r\nexport const gamma = '16px';\r\nexport const delta = '18px';\r\nexport const epsilon = '20px';\r\nexport const zeta = '24px';\r\nexport const psi = '26px';\r\nexport const eta = '28px';\r\nexport const theta = '36px';\r\nexport const omikron = '44px';\r\nexport const iota = '48px';\r\nexport const kappa = '64px';\r\nexport const lambda = '128px';\r\n\r\n/**\r\n * Picutra\r\n */\r\nexport const headerMainLink = '13px';\r\nexport const productHeading = '32px';\r\nexport const headingDesktop = '40px';\r\nexport const subTitle = '15px';\r\n\r\n/** \r\n Line height\r\n **/\r\nexport const lineHeight = {\r\n none: 1,\r\n tight: 1.25,\r\n snug: 1.375,\r\n moreSnug: 1.43,\r\n normal: 1.5,\r\n relaxed: 1.625,\r\n moreRelaxed: 1.75,\r\n loose: 2,\r\n};\r\n\r\n/** \r\n Letter spacing\r\n **/\r\nexport const letterSpacing = {\r\n normal: 0.32,\r\n normalWide: 0.6,\r\n nearWide: 0.7,\r\n wide: 0.8,\r\n moreWide: 0.96,\r\n nearMedium: 1.13,\r\n medium: 1.25,\r\n wider: 1.63,\r\n heading: 2,\r\n header: 3,\r\n largeHeader: 8,\r\n};\r\n\r\n/** \r\n Font family\r\n **/\r\n\r\nexport const fontFamily = {\r\n main: 'Lato',\r\n fallback: 'Arial, Helvetica, sans-serif',\r\n};\r\n\r\nexport const fontWeight = {\r\n lighter: 300,\r\n normal: 400,\r\n bold: 700,\r\n boldest: 900,\r\n};\r\n","/** \r\n Spacings\r\n**/\r\nexport const none = '0px';\r\nexport const tiny = '1px';\r\nexport const smaller = '2px';\r\nexport const small = '4px';\r\nexport const medium = '8px';\r\nexport const large = '12px';\r\nexport const moreLarge = '16px';\r\nexport const larger = '22px';\r\nexport const huge = '24px';\r\nexport const nearGreat = '30px';\r\nexport const great = '32px';\r\nexport const nearVast = '42px';\r\nexport const vast = '44px';\r\nexport const gigantic = '48px';\r\nexport const greater = '52px';\r\nexport const massive = '64px';\r\nexport const enormous = '92px';\r\n\r\n// More words we can use to define size - immense, wide, high, king-size\r\n\r\n// helper to create spacings with base as 4. Kex-default = 4px. example: 40px padding = theme.spacing(10),\r\nconst BASE_SPACING = 4;\r\nexport const spacing = (multiplier: number) => BASE_SPACING * multiplier;\r\n\r\n/** \r\n Widths\r\n**/\r\n\r\nexport const screenMaxWidth = 1440;\r\nexport const contentMaxWidth = 1130;\r\nexport const videoMaxWidth = 1024;\r\nexport const maxWidthSmall = 960;\r\nexport const contentResultWidth = 864;\r\nexport const maxWidthMobile = 768;\r\nexport const maxWidthContentPage = 670;\r\nexport const desktopQuickSearchWidth = 550;\r\nexport const blockMaxWidthMobile = 600;\r\nexport const mobileMenuMaxWidth = 310;\r\nexport const menuButtonWidth = 35;\r\n\r\n/** \r\n Heights\r\n**/\r\n\r\nexport const heroMaxHeight = 420;\r\nexport const videoMaxHeight = 574;\r\nexport const standardBlockLargerImageHeight = 490;\r\nexport const standardBlockLargeImageHeight = 480;\r\nexport const standardBlockMediumImageHeight = 345;\r\nexport const thirdWidthBlockImageHeight = 312;\r\nexport const standardBlockSmallImageHeight = 250;\r\nexport const verySmallBlockImageHeight = 180;\r\nexport const mobileHeaderTopSectionHeight = 55;\r\nexport const mobileHeaderBottomSectionHeight = 70;\r\nexport const mobileHeaderHeight = 125;\r\nexport const desktopHeaderHeight = 140;\r\nexport const expandedDesktopHeaderHeight = 112;\r\nexport const menuButtonHeight = 28;\r\n\r\n/*Pictura*/\r\nexport const desktopSearchModalMaxWidth = 1172;\r\nexport const desktopSearchModalMaxHeight = 634;\r\nexport const teaserImageDesktopHeight = 505;\r\nexport const bannerBlockMobileImageHeight = 295;\r\nexport const bannerBlockDesktopImageHeight = 465;\r\nexport const bannerBlockHeadingMargin = 35;\r\nexport const heroImageYMargin = 60;\r\n\r\n/**\r\n * Image heights\r\n **/\r\n\r\nexport const thumbnailImageHeight = 128;\r\nexport const productImageMaxHeight = 575;\r\nexport const productImageMaxHeightMedium = 720;\r\nexport const productImageMaxHeightLarge = 736;\r\n","export const zIndex = {\r\n Notification: 9,\r\n Header: 100,\r\n HeaderMobile: 10,\r\n Flyout: 10,\r\n DropDown: 10,\r\n FlyoutLower: 5,\r\n Cart: 10,\r\n CartMobile: 4,\r\n Modal: 20,\r\n Overlay: 980,\r\n pageLoader: 990,\r\n errorModal: 1000,\r\n};\r\n","export const animation = {\r\n timingFn: 'cubic-bezier(0.25, 0.46, 0.45, 0.94)',\r\n};\r\n\r\nexport const timings = {\r\n oneTenth: '100ms',\r\n oneFifth: '200ms',\r\n threeTenths: '300ms',\r\n oneThird: '333ms',\r\n twoFifths: '400ms',\r\n oneHalf: '500ms',\r\n threeFifths: '600ms',\r\n one: '1000ms',\r\n sevenFifths: '1400ms',\r\n oneAndAHalf: '1500ms',\r\n five: '5000ms',\r\n};\r\n","/*Shadow*/\r\nexport const shadows = {\r\n imageShadow: 'drop-shadow(5px 15px 50px rgba(0, 0, 0, 0.08))',\r\n productImageShadow: 'drop-shadow(2px 5px 40px rgba(0, 0, 0, 0.07))',\r\n};\r\n","import * as typography from './typography';\r\nimport * as color from './colors';\r\nimport * as spacing from './spacing';\r\nimport * as zIndex from './zindex';\r\nimport * as animation from './animation';\r\nimport * as shadows from './shadow';\r\nimport * as mediaQueries from './mediaQueries';\r\nimport { styled as GlitzStyled } from '@glitz/react';\r\n\r\nexport const theme = {\r\n ...typography,\r\n ...color,\r\n ...zIndex,\r\n ...animation,\r\n ...mediaQueries,\r\n ...spacing,\r\n ...shadows,\r\n};\r\n\r\nexport const styled = GlitzStyled;\r\n","/*\r\n * export event types\r\n */\r\nexport const ON_NAVIGATE = '1';\r\nexport const ON_KEX_ERROR = '2';\r\nexport const ON_FIXED_CIRCLE_LOADING = '3';\r\nexport const ON_PAGE_CHANGED = '4';\r\nexport const ON_SCROLL_TO_ELEMENT_FIRED = '5';\r\n//Notifications\r\nexport const NOTIFY_ACTION = '6';\r\nexport const STOP_NOTIFY_ACTION = '7';\r\n//Mobile quick search\r\nexport const ON_MOBILE_QUICKSEARCH_TOGGLE = '8';\r\n//Minicart events\r\nexport const ON_MINICART_OPEN_CHANGE = '9';\r\n//Search events\r\nexport const ON_SEARCH = '10';\r\nexport const ON_MOBILE_SEARCH_OPEN_CHANGE = '11';\r\nexport const ON_SEARCH_MODAL_OPEN_CHANGE = '12';\r\nexport const ON_MODAL_SEARCH = '13';\r\n//Mobile menu events\r\nexport const ON_MOBILE_MENU_OPEN_CHANGE = '14';\r\n\r\ntype EventsType = {\r\n [key: string]: any;\r\n};\r\n\r\nexport const EventDispatcher = (function() {\r\n const events: EventsType = {};\r\n /**\r\n * Dispatches an event if it exists\r\n * Example usage: EventDispatcher.dispatch('namechanged', { name: 'John' });\r\n * @param {*} event to dispatch\r\n * @param {*} data to send with the event\r\n */\r\n const dispatch = (event: any, ...data: any) => {\r\n if (!events[event]) return; // no one is listening to this event\r\n for (let i = 0; i < events[event].length; i += 1) {\r\n events[event][i](...data);\r\n }\r\n };\r\n\r\n /**\r\n * Subscribes to an event\r\n * Example usage: EventDispatcher.subscribe('namechanged', function(data) { alert(data.name); });\r\n * @param {*} event to subscribe to\r\n * @param {*} callback to call on dispatch\r\n */\r\n const subscribe = (event: any, callback: any) => {\r\n if (!events[event]) events[event] = []; // new event\r\n events[event] = [...events[event], callback];\r\n };\r\n\r\n /**\r\n * Unsubscribes a function to an event.\r\n * @param {*} event to unsubscribe to\r\n * @param {*} callback to remove from event\r\n */\r\n const unsubscribe = (event: any, callback: any) => {\r\n if (events[event] && events[event].length === 1) {\r\n delete events[event];\r\n } else {\r\n events[event] = events[event].filter((fn: any) => fn !== callback);\r\n }\r\n };\r\n\r\n return {\r\n dispatch,\r\n subscribe,\r\n unsubscribe,\r\n };\r\n})();\r\n","import { query } from '@glitz/core';\r\n\r\ntype keyValueType = {\r\n [key: string]: any;\r\n};\r\n\r\nexport const mediaQuery = {\r\n mediaMaxVerySmall: query({ maxWidth: '500px' }),\r\n mediaMinVerySmall: query({ minWidth: '500px' }),\r\n mediaMaxSmall: query({ maxWidth: '600px' }),\r\n mediaMinSmall: query({ minWidth: '600px' }),\r\n mediaMaxMedium: query({ maxWidth: '768px' }),\r\n mediaMinMedium: query({ minWidth: '768px' }),\r\n mediaMaxLarge: query({ maxWidth: '992px' }),\r\n mediaMinLarge: query({ minWidth: '992px' }),\r\n mediaMaxHuge: query({ maxWidth: '1130px' }),\r\n mediaMinHuge: query({ minWidth: '1130px' }),\r\n mediaMinGreat: query({ minWidth: '1300px' }),\r\n mediaMinScreen: query({ minWidth: '1440px' }),\r\n mediaMaxScreen: query({ maxWidth: '1440px' }),\r\n};\r\n\r\nexport function mediaQuerySorter(a: string, b: string) {\r\n var typedMediaQueries = mediaQuery as keyValueType;\r\n const mediaQueryArray = Object.keys(typedMediaQueries).map(\r\n key => typedMediaQueries[key]\r\n );\r\n const indexA = mediaQueryArray.indexOf(a);\r\n const indexB = mediaQueryArray.indexOf(b);\r\n\r\n if (indexA === indexB) return 0;\r\n return indexA > indexB ? 1 : -1;\r\n}\r\n","const PRODUCTION_ENV = 'PRODUCTION_ENV';\r\nconst DEVELOPMENT_ENV = 'DEVELOPMENT_ENV';\r\n\r\nexport const ENVIRONMENT =\r\n process.env.NODE_ENV === 'production' ? PRODUCTION_ENV : DEVELOPMENT_ENV;\r\nexport const IS_PRODUCTION_ENV = ENVIRONMENT === PRODUCTION_ENV ? true : false;\r\nexport const IS_DEVELOPMENT_ENV =\r\n ENVIRONMENT === DEVELOPMENT_ENV ? true : false;\r\n\r\nexport const IS_SERVER_CONTEXT = process.env.REACT_APP_CONTEXT === 'server';\r\nexport const IS_CLIENT_CONTEXT = process.env.REACT_APP_CONTEXT === 'client';\r\nconsole.log('%cEnvironment', 'font-weight:bold');\r\nconsole.log('%c' + ENVIRONMENT, 'color: #D93964');\r\n","import React from 'react';\r\nimport AppSettingsModel from '../Models/AppSettings.interface';\r\n\r\ntype PropType = {\r\n children: React.ReactNode;\r\n data: AppSettingsModel;\r\n};\r\n\r\nconst AppSettingsContext = React.createContext({});\r\n\r\nexport const AppSettingsProvider = ({ children, data }: PropType) => {\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport const useAppSettingsData = () => {\r\n return React.useContext(AppSettingsContext) as AppSettingsModel;\r\n};\r\n","import { useKexRouterCurrentPage } from '../KexRouter/KexRouter';\r\nimport PageModelBase from '../Models/PageModelBase.interface';\r\n\r\nfunction useCurrentPage() {\r\n const currentPage = useKexRouterCurrentPage();\r\n return currentPage as PageType;\r\n}\r\n\r\nexport default useCurrentPage;\r\n","// /*\r\n// * Updates item in array.\r\n// */\r\n// export const updateItemInArray = (\r\n// array,\r\n// itemIdProp,\r\n// itemId,\r\n// updateItemCallback\r\n// ) => {\r\n// const updatedItems = array.map(item => {\r\n// if (item[itemIdProp] !== itemId) {\r\n// // Since we only want to update one item, preserve all others as they are now\r\n// return item;\r\n// }\r\n\r\n// // Use the provided callback to create an updated item\r\n// const updatedItem = updateItemCallback(item);\r\n// return updatedItem;\r\n// });\r\n\r\n// return updatedItems;\r\n// };\r\n\r\n// /*\r\n// * Helper for generating class names.\r\n// * e.g classnames('foo', { bar: true, duck: false }, 'baz', { quux: true }, true && classname); => 'foo bar baz quux'\r\n// */\r\n// export const classnames = (...args) =>\r\n// args\r\n// .reduce(\r\n// (classString, arg) =>\r\n// typeof arg === 'string'\r\n// ? (classString += ` ${arg}`)\r\n// : arg\r\n// ? Object.keys(arg)\r\n// .reduce(\r\n// (acc, key) => (acc += !!arg[key] ? ` ${key}` : ''),\r\n// classString\r\n// )\r\n// .trim()\r\n// : classString,\r\n// ''\r\n// )\r\n// .trim();\r\n\r\n// /*\r\n// * Generates an element id for use with block sub navigation\r\n// */\r\n// export const generateId = (type, heading, index) =>\r\n// type && heading && index !== undefined\r\n// ? `${type}-${heading.replace(/\\s|\"/g, '-')}-${index}`\r\n// : '';\r\n\r\ntype HasFileExtension = {\r\n url: string;\r\n};\r\nexport const hasFileExtension = ({ url }: HasFileExtension) =>\r\n url.indexOf('.') > -1;\r\n\r\n// // Maybe this should be handled in EPI instead on the settings page - simple string list providing the allowed file extension types.\r\n// const allowedFileTypes = [\r\n// 'pdf',\r\n// 'xls',\r\n// 'xlsx',\r\n// 'csv',\r\n// 'doc',\r\n// 'docx',\r\n// 'jpeg',\r\n// 'png',\r\n// 'gif',\r\n// 'mp4',\r\n// 'ppt',\r\n// 'pptx',\r\n// ];\r\n\r\n// let path = url.split(/#|\\?/)[0];\r\n// let splitPath = path.split('.');\r\n// let extension = splitPath[splitPath.length - 1];\r\n// return allowedFileTypes.includes(extension); // Do we have an extensions?\r\n// };\r\n\r\ntype IsInternalLinkType = {\r\n url: string;\r\n};\r\n/*\r\n * Checks if url is within the domain\r\n */\r\nexport const isInternalLink = ({ url }: IsInternalLinkType) => {\r\n if (\r\n (url.charAt(0) === '/' && url.charAt(1) !== '/') ||\r\n url.charAt(0) === '?' ||\r\n url.charAt(0) === '#'\r\n )\r\n return true;\r\n\r\n const urlPartsQuery = url.split('?');\r\n if (urlPartsQuery.length > 1) {\r\n if (urlPartsQuery[0].indexOf(window.location.host) === -1) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n const urlPartsHash = urlPartsQuery[0].split('#');\r\n if (urlPartsHash.length > 1) {\r\n if (urlPartsHash[0].indexOf(window.location.host) === -1) {\r\n return false;\r\n }\r\n return true;\r\n }\r\n\r\n if (url.indexOf(window.location.host) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\ntype IsEmailLinkType = {\r\n url: string;\r\n};\r\n/*\r\n * Checks if an URL is a mailto link\r\n */\r\nexport const isEmailLink = ({ url }: IsEmailLinkType) => {\r\n return url.indexOf('mailto:') === 0;\r\n};\r\n\r\ntype ParseUrlType = {};\r\n/*\r\n * Parses url sting into parts\r\n */\r\nexport const parseUrl = (url: string) => {\r\n const matches = url.match(\r\n /^(([^:/?#]+:)?(?:\\/\\/((?:([^/?#:]*):([^/?#:]*)@)?([^/?#:]*)(?::([^/?#:]*))?)))?([^?#]*)(\\?[^#]*)?(#.*)?$/\r\n );\r\n const m = matches === null ? [] : matches;\r\n //http://username:password@localhost:257/deploy/?asd=asd#asd\r\n const r = {\r\n hash: m[10] || '', // #asd\r\n host: m[3] || '', // localhost:257\r\n hostname: m[6] || '', // localhost\r\n href: m[0] || '', // http://username:password@localhost:257/deploy/?asd=asd#asd\r\n origin: m[1] || '', // http://username:password@localhost:257\r\n pathname: m[8] || (m[1] ? '/' : ''), // /deploy/\r\n port: m[7] || '', // 257\r\n protocol: m[2] || '', // http:\r\n search: m[9] || '', // ?asd=asd\r\n username: m[4] || '', // username\r\n password: m[5] || '', // password\r\n };\r\n if (r.protocol.length === 2) {\r\n r.protocol = 'file:///' + r.protocol.toUpperCase();\r\n r.origin = r.protocol + '//' + r.host;\r\n }\r\n r.href = r.origin + r.pathname + r.search + r.hash;\r\n return m && r;\r\n};\r\n\r\n/*\r\n * get value for url parameter\r\n */\r\nexport const getUrlParameter = (name: string, queryString?: string) => {\r\n name = name.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\r\n var regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)');\r\n var results = regex.exec(\r\n queryString ? queryString : canUseDOM() ? window.location.search : ''\r\n );\r\n return results === null\r\n ? ''\r\n : decodeURIComponent(results[1].replace(/\\+/g, ' '));\r\n};\r\n\r\nexport const getUrlParameters = (name: string, queryString?: string) => {\r\n name = name.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\r\n var regex = new RegExp('[\\\\?&]' + name + '=([^&#]*)', 'g');\r\n let m;\r\n let results: string[] = [];\r\n\r\n while (\r\n (m = regex.exec(queryString ? queryString : window.location.search)) !==\r\n null\r\n ) {\r\n // This is necessary to avoid infinite loops with zero-width matches\r\n if (m.index === regex.lastIndex) {\r\n regex.lastIndex++;\r\n }\r\n\r\n // The result can be accessed through the `match`-variable.\r\n m.forEach((match, groupIndex) => {\r\n if (groupIndex % 2)\r\n results.push(decodeURIComponent(match.replace(/\\+/g, ' ')));\r\n });\r\n }\r\n return results;\r\n};\r\n\r\n/* Used on CategoryPage.tsx to memorize scroll position */\r\n\r\nfunction replaceQueryParam(param: string, newval: string, search: string) {\r\n var regex = new RegExp('([?;&])' + param + '[^&;]*[;&]?');\r\n var query = search.replace(regex, '$1').replace(/&$/, '');\r\n\r\n return (\r\n (query.length > 2 ? query + '&' : '?') +\r\n (newval ? param + '=' + newval : '')\r\n );\r\n}\r\n\r\nexport const setUrlParameter = (name: string, value: string) => {\r\n var str = window.location.search;\r\n str = replaceQueryParam(name, value, str);\r\n // window.history.pushState('', '', str);\r\n};\r\n\r\n/*\r\n * Used to check if we are in server context or not.\r\n */\r\nexport const canUseDOM = () => {\r\n return !!(\r\n typeof window !== 'undefined' &&\r\n window.document &&\r\n window.document.createElement\r\n );\r\n};\r\n\r\nexport const updateUrl = (pageTitle: string, url: string) => {\r\n const state = { id: new Date().valueOf() };\r\n window.history.pushState(state, pageTitle, url);\r\n};\r\n\r\n/*\r\n * used for epi edit mode.\r\n */\r\nexport const applyEditModeAttr = (name: string | false) => {\r\n return name\r\n ? {\r\n 'data-epi-property-name': name,\r\n }\r\n : {};\r\n};\r\n\r\n// /*\r\n// * Trigger a browser resize event\r\n// */\r\n// export const triggerResizeEvent = () => {\r\n// setTimeout(() => {\r\n// if (canUseDOM()) {\r\n// if (\r\n// navigator.userAgent.indexOf('MSIE') !== -1 ||\r\n// navigator.appVersion.indexOf('Trident/') > 0\r\n// ) {\r\n// var evt = document.createEvent('UIEvents');\r\n// evt.initUIEvent('resize', true, false, window, 0);\r\n// window.dispatchEvent(evt);\r\n// } else {\r\n// window.dispatchEvent(new Event('resize'));\r\n// }\r\n// }\r\n// }, 0);\r\n// };\r\n\r\n// /**\r\n// * native scroll in to view function\r\n// * @param {*} elm\r\n// */\r\n// export const ScrollIntoView = elm => {\r\n// !Object.isEmpty(elm) &&\r\n// elm.scrollIntoView({\r\n// behavior: 'smooth',\r\n// });\r\n// };\r\n\r\n/**\r\n * Scroll to function\r\n * @param {*} elm - element to scroll to - Could be a saved ref.current\r\n */\r\nlet scrollTimeouts: NodeJS.Timeout[] = [];\r\nexport const ScrollToEle = (ele: HTMLElement) => {\r\n if (scrollTimeouts.length) {\r\n scrollTimeouts.forEach((timeOut: NodeJS.Timeout) => {\r\n clearTimeout(timeOut);\r\n });\r\n scrollTimeouts = [];\r\n }\r\n\r\n function currentYPosition() {\r\n // Firefox, Chrome, Opera, Safari\r\n if (window.pageYOffset) return window.pageYOffset;\r\n // Internet Explorer 6 - standards mode\r\n if (document.documentElement && document.documentElement.scrollTop)\r\n return document.documentElement.scrollTop;\r\n // Internet Explorer 6, 7 and 8\r\n if (document.body.scrollTop) return document.body.scrollTop;\r\n return 0;\r\n }\r\n\r\n function elmYPosition(elm: HTMLElement) {\r\n let y = elm.offsetTop;\r\n return y - 30;\r\n }\r\n\r\n const doScroll = (leapY: number, timer: number, speed: number) =>\r\n new Promise(resolve => {\r\n scrollTimeouts.push(\r\n global.setTimeout(() => {\r\n window.scrollTo(0, leapY);\r\n resolve();\r\n }, timer * speed)\r\n );\r\n });\r\n\r\n return new Promise(resolve => {\r\n let startY = currentYPosition();\r\n let stopY = elmYPosition(ele);\r\n let distance = stopY > startY ? stopY - startY : startY - stopY;\r\n if (distance < 100) {\r\n window.scrollTo(0, stopY);\r\n resolve();\r\n }\r\n let speed = Math.round(distance / 100);\r\n if (speed >= 20) speed = 20;\r\n let step = Math.round(distance / 25);\r\n let leapY = stopY > startY ? startY + step : startY - step;\r\n let timer = 0;\r\n const promises = [];\r\n if (stopY > startY) {\r\n for (let i = startY; i < stopY; i += step) {\r\n promises.push(doScroll(leapY, timer, speed));\r\n leapY += step;\r\n if (leapY > stopY) leapY = stopY;\r\n timer++;\r\n }\r\n Promise.all(promises).then(() => {\r\n scrollTimeouts = [];\r\n resolve();\r\n });\r\n return;\r\n }\r\n for (let i = startY; i > stopY; i -= step) {\r\n promises.push(doScroll(leapY, timer, speed));\r\n leapY -= step;\r\n if (leapY < stopY) leapY = stopY;\r\n timer++;\r\n }\r\n Promise.all(promises).then(() => {\r\n scrollTimeouts = [];\r\n resolve();\r\n });\r\n });\r\n};\r\n\r\n// /*\r\n// * Inorder to not get a hacky scroll when we already have loaded the compononents.\r\n// * especially for contentarea\r\n// */\r\n// export const loadedComponents = [];\r\n\r\n/*\r\n * A web storage helper, for both sessionStorage and localStorage\r\n */\r\ntype WebStorageHelperType = {\r\n type: 'sessionStorage' | 'localStorage';\r\n storageKey: string;\r\n defaultValue: string | object | boolean;\r\n};\r\nexport const webStorageHelper = ({\r\n type,\r\n storageKey,\r\n defaultValue,\r\n}: WebStorageHelperType) => {\r\n const get = (key?: string) => {\r\n const item = window[type].getItem(storageKey);\r\n let data = item ? JSON.parse(item) : null;\r\n data = data === null ? defaultValue : data;\r\n return key ? data[key] : data;\r\n };\r\n const set = (val: string | object | boolean): void =>\r\n window[type].setItem(storageKey, JSON.stringify(val));\r\n\r\n if (!window[type].getItem(storageKey)) {\r\n set(defaultValue);\r\n }\r\n return {\r\n get,\r\n set,\r\n };\r\n};\r\n\r\n// /*\r\n// * Coverts object to url params\r\n// */\r\n// export const objectToUrlParams = object => {\r\n// return (\r\n// '?' +\r\n// Object.keys(object)\r\n// .filter(key => !!object[key])\r\n// .map(key => `${key}=${encodeURIComponent(object[key])}`)\r\n// .join('&')\r\n// );\r\n// };\r\n\r\n// /*\r\n// * Gets absolute height of element (margin and borders)\r\n// */\r\n// export const getAbsoluteHeight = el => {\r\n// // Get the DOM Node if you pass in a string\r\n// el = typeof el === 'string' ? document.querySelector(el) : el;\r\n\r\n// var styles = window.getComputedStyle(el);\r\n// var margin =\r\n// parseFloat(styles['marginTop']) + parseFloat(styles['marginBottom']);\r\n\r\n// return Math.ceil(el.offsetHeight + margin);\r\n// };\r\n\r\n// /*\r\n// * Checks if element fits in viewport.\r\n// * Possible to pass in margins in the calculation, e.g include the header's height\r\n// */\r\n// export const isElementInViewport = (\r\n// el,\r\n// { topMargin = 0, rightMargin = 0, bottomMargin = 0, leftMargin = 0 } = {}\r\n// ) => {\r\n// var rect = el.getBoundingClientRect();\r\n// return (\r\n// rect.top >= topMargin &&\r\n// rect.left >= leftMargin &&\r\n// rect.bottom <=\r\n// (window.innerHeight || document.documentElement.clientHeight) -\r\n// bottomMargin &&\r\n// rect.right <=\r\n// (window.innerWidth || document.documentElement.clientWidth) - rightMargin\r\n// );\r\n// };\r\n\r\n// /**\r\n// * Trigger animation on element\r\n// *\r\n// * @param {*} elm\r\n// * @param {*} className\r\n// */\r\n// export const triggerAnimation = (elm, className) => {\r\n// elm.classList.remove(className);\r\n// void elm.offsetWidth;\r\n// elm.classList.add(className);\r\n// };\r\n\r\n// /**\r\n// * Take form element and returns it's form elements\r\n// * values serialized in string format\r\n// *\r\n// * @param {*} form\r\n// */\r\n// export const getFormSerializedString = form => {\r\n// return Array.from(new FormData(form), e =>\r\n// e.map(value => value).join('=')\r\n// ).join('&');\r\n// };\r\n\r\n// /**\r\n// * takes a query string and transforms it to an object\r\n// * if no query string is provided it's using window location search\r\n// * @param {*} query\r\n// */\r\n// export const getQueryStringParams = queryString => {\r\n// let query = queryString || window.location.search;\r\n// return query\r\n// ? (/^[?#]/.test(query) ? query.slice(1) : query)\r\n// .split('&')\r\n// .reduce((params, param) => {\r\n// let [key, value] = param.split('=');\r\n// if (!params[key]) params[key] = [];\r\n// value &&\r\n// params[key].push(decodeURIComponent(value.replace(/\\+/g, ' ')));\r\n// return params;\r\n// }, {})\r\n// : {};\r\n// };\r\n\r\n// /**\r\n// * function for mimic optional chaining,\r\n// *\r\n// * @param {*} obj - object to check prop for\r\n// * @param {*} properties - string which represent the propeties, 'a.b.c'\r\n// * @param {*} defaultValue\r\n// */\r\n// export const getObjectProperty = (obj, properties, defaultValue) => {\r\n// if (!obj) return defaultValue;\r\n// const props = properties.split('.');\r\n// let objProp = obj;\r\n// for (let index = 0; index < props.length; index++) {\r\n// if (objProp[props[index]] !== undefined) {\r\n// objProp = objProp[props[index]];\r\n// } else {\r\n// objProp = defaultValue;\r\n// break;\r\n// }\r\n// }\r\n// return objProp;\r\n// };\r\n\r\n// /**\r\n// * Does what the function names says\r\n// */\r\n// export const getScrollbarWidth = () => {\r\n// var inner = document.createElement('p');\r\n// inner.style.width = '100%';\r\n// inner.style.height = '200px';\r\n\r\n// var outer = document.createElement('div');\r\n// outer.style.position = 'absolute';\r\n// outer.style.top = '-200px';\r\n// outer.style.left = '-300px';\r\n// outer.style.visibility = 'hidden';\r\n// outer.style.width = '200px';\r\n// outer.style.height = '150px';\r\n// outer.style.overflow = 'hidden';\r\n// outer.appendChild(inner);\r\n\r\n// document.body.appendChild(outer);\r\n// var w1 = inner.offsetWidth;\r\n// outer.style.overflow = 'scroll';\r\n// var w2 = inner.offsetWidth;\r\n// if (w1 === w2) w2 = outer.clientWidth;\r\n\r\n// document.body.removeChild(outer);\r\n\r\n// return w1 - w2;\r\n// };\r\n\r\n// /**\r\n// * Usefull when you need to wrapp content based on a condition\r\n// * @param {*} condition - condition if wrap or not\r\n// * @param {*} wrapper - wrapper function/Component\r\n// * @param {*} children - as in children\r\n// */\r\n// export const ConditionalWrapper = ({ condition, wrapper, children }) =>\r\n// condition ? wrapper(children) : children;\r\n","import { EventDispatcher, ON_KEX_ERROR } from './EventDispatcher';\r\n\r\nexport default function(\r\n url: string,\r\n signal: AbortSignal,\r\n onComplete: (\r\n data: T,\r\n resolve: (value?: P | PromiseLike

) => void,\r\n reject: (reason?: any) => void,\r\n response: Response\r\n ) => void,\r\n litiumRequest: string = '',\r\n requestToken: string = ''\r\n) {\r\n return new Promise

((resolve, reject) => {\r\n let response: Response;\r\n fetch(url, {\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n credentials: 'same-origin',\r\n 'litium-request-context': litiumRequest,\r\n RequestVerificationToken: requestToken,\r\n },\r\n signal,\r\n })\r\n .then(res => {\r\n response = res;\r\n if (res.ok || res.status === 404) {\r\n return res.json();\r\n } else {\r\n throw new Error(`API: ${res.statusText}`);\r\n }\r\n })\r\n .then(data => onComplete(data, resolve, reject, response))\r\n .catch(err => {\r\n if (\r\n err.name === 'AbortError' ||\r\n err === 'DOMException: The user aborted a request.'\r\n ) {\r\n resolve(undefined);\r\n } else {\r\n EventDispatcher.dispatch(ON_KEX_ERROR, err);\r\n }\r\n });\r\n });\r\n}\r\n","import React, { useReducer } from 'react';\r\nimport { styled, theme } from '../../../Theme/';\r\n\r\ntype PropType = {\r\n children: React.ReactNode;\r\n};\r\n\r\nconst KexLoadingDispatchContext = React.createContext({});\r\n\r\ntype ActionType = 'add' | 'remove';\r\n\r\nconst reducer = (state: { count: number }, action: ActionType) => {\r\n switch (action) {\r\n case 'add': {\r\n return { count: state.count + 1 };\r\n }\r\n case 'remove': {\r\n const count = state.count - 1;\r\n return { count: count < 0 ? 0 : count };\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\n\r\nconst animateSvgOnLoading = {\r\n animationName: {\r\n '100%': {\r\n transform: 'rotate(360deg)',\r\n },\r\n },\r\n animationDuration: theme.timings.one,\r\n animationTimingFunction: 'linear',\r\n animationIterationCount: 'infinite',\r\n};\r\n\r\nconst animateCircleOnLoading = {\r\n animationName: {\r\n '0%': {\r\n strokeDasharray: '1, 150',\r\n strokeDashoffset: '0',\r\n stroke: theme.lighterDarkGray,\r\n },\r\n '50%': {\r\n strokeDasharray: '90, 150',\r\n strokeDashoffset: '-35',\r\n stroke: theme.primaryBlue,\r\n },\r\n '100%': {\r\n strokeDasharray: '90, 150',\r\n strokeDashoffset: '-124',\r\n stroke: theme.primaryBackground,\r\n },\r\n },\r\n animationDuration: theme.timings.oneAndAHalf,\r\n animationTimingFunction: 'ease-in-out',\r\n animationIterationCount: 'infinite',\r\n};\r\nconst divStyleOnLoading = {\r\n opacity: '1',\r\n};\r\n\r\nfunction KexLoadingCircle({ children }: PropType) {\r\n const [{ count }, dispatch] = useReducer(reducer, { count: 0 });\r\n const isLoading = count !== 0;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {children}\r\n \r\n );\r\n}\r\n\r\nconst useKexLoadingCircle: () => React.Dispatch = () => {\r\n return React.useContext(KexLoadingDispatchContext) as React.Dispatch<\r\n ActionType\r\n >;\r\n};\r\n\r\nexport { KexLoadingCircle, useKexLoadingCircle };\r\n\r\nconst OuterDiv = styled.div({\r\n position: 'fixed',\r\n width: '100vw',\r\n height: '100vh',\r\n zIndex: theme.zIndex.pageLoader,\r\n overflow: 'hidden',\r\n top: 0,\r\n right: 0,\r\n opacity: '0',\r\n transition: {\r\n duration: theme.timings.threeTenths,\r\n property: 'opacity',\r\n timingFunction: theme.animation.timingFn,\r\n },\r\n pointerEvents: 'none',\r\n});\r\n\r\nconst InnerDiv = styled.div({\r\n position: 'absolute',\r\n top: 'calc(40%)',\r\n right: '50%',\r\n transform: 'translate(50%, -50%)',\r\n backgroundColor: '#fff',\r\n borderRadius: '50%',\r\n width: '80px',\r\n height: '80px',\r\n boxShadow: '0px 10px 10px -10px black',\r\n transition: {\r\n duration: theme.timings.threeTenths,\r\n delay: theme.timings.oneHalf,\r\n property: 'opacity',\r\n timingFunction: theme.animation.timingFn,\r\n },\r\n opacity: '0',\r\n});\r\n\r\nconst Svg = styled.svg({\r\n position: 'absolute',\r\n top: 'calc(50% - 25px)',\r\n right: 'calc(50% - 25px)',\r\n width: '50px',\r\n height: '50px',\r\n});\r\n\r\nconst Circle = styled.circle({\r\n stroke: theme.primary,\r\n strokeLinecap: 'round',\r\n});\r\n","import { useEffect } from 'react';\r\nimport { IS_SERVER_CONTEXT } from '../Configs/EnvConfig';\r\nimport { webStorageHelper } from '../Common/Helpers';\r\nimport { KexNavigateType, KexNavigateEventStateType } from './KexRouter';\r\n\r\nexport const addScrollHistory = () => {\r\n /*\r\n * if current history does not contain any id, add it.\r\n */\r\n if (window.history.state === null) {\r\n window.history.replaceState(\r\n { id: new Date().valueOf() },\r\n document.title,\r\n window.location.href\r\n );\r\n }\r\n\r\n const scrolls = scrollHistory.get();\r\n scrolls[window.history.state.id] =\r\n window.pageYOffset || document.documentElement.scrollTop;\r\n scrollHistory.set(scrolls);\r\n};\r\n\r\nconst scrollHistory: any = IS_SERVER_CONTEXT\r\n ? {}\r\n : webStorageHelper({\r\n type: 'sessionStorage',\r\n storageKey: 'scrollHistory',\r\n defaultValue: {},\r\n });\r\n\r\nconst pushState = (responseUrl: string, pageTitle: string) => {\r\n addScrollHistory();\r\n const state = { id: new Date().valueOf() };\r\n\r\n window.history.pushState(state, pageTitle, responseUrl);\r\n};\r\n\r\nconst replaceState = (responseUrl: string, pageTitle: string) => {\r\n if (window.location.href !== responseUrl) {\r\n window.history.replaceState(window.history.state, pageTitle, responseUrl);\r\n }\r\n};\r\n\r\nexport const updateScrollPosition = (\r\n eventState: KexNavigateEventStateType,\r\n responseUrl: string,\r\n pageTitle: string,\r\n pageType: string\r\n) => {\r\n //if user navigated through links in page, push link to browser history\r\n if (eventState.clicked) {\r\n pushState(responseUrl, pageTitle);\r\n } else {\r\n replaceState(responseUrl, pageTitle);\r\n }\r\n\r\n if (eventState.clicked) {\r\n //if user navigated through links in page, scroll to top\r\n window.scrollTo(0, 0);\r\n } else {\r\n /*\r\n * User has used browser's back or forward function\r\n *\r\n * if - use saved scroll pos in session storage\r\n * else - fallback to top\r\n */\r\n if (eventState && eventState.id !== undefined) {\r\n const scrolls = scrollHistory.get();\r\n if (scrolls[eventState.id] !== undefined) {\r\n const id = scrolls[eventState.id];\r\n setTimeout(() => window.scrollTo(0, id), 0);\r\n setTimeout(() => {\r\n const scrollPos =\r\n window.pageYOffset || document.documentElement.scrollTop;\r\n scrollPos !== id && window.scrollTo(0, id);\r\n }, 500);\r\n }\r\n } else {\r\n window.scrollTo(0, 0);\r\n }\r\n }\r\n window.focus();\r\n};\r\n\r\nexport const useSaveScrollPosition = (kexNavigate: KexNavigateType) => {\r\n useEffect(() => {\r\n let timeOutFn: number;\r\n let touchMoved = false;\r\n const isTouchDevice = 'ontouchstart' in window;\r\n\r\n /*\r\n * workaround for touchdevices (mainly phones) that do not have 'scrollRestoration' in window.history\r\n */\r\n if (isTouchDevice && !('scrollRestoration' in window.history)) {\r\n document.body.addEventListener(\r\n 'touchstart',\r\n () => {\r\n touchMoved = true;\r\n },\r\n { passive: true }\r\n );\r\n\r\n window.addEventListener(\r\n 'scroll',\r\n () => {\r\n if (touchMoved) {\r\n addScrollHistory();\r\n clearTimeout(timeOutFn);\r\n timeOutFn = window.setTimeout(() => {\r\n touchMoved = false;\r\n }, 50);\r\n }\r\n },\r\n { passive: true }\r\n );\r\n }\r\n\r\n if ('scrollRestoration' in window.history) {\r\n window.history.scrollRestoration = 'manual';\r\n window.addEventListener('scroll', addScrollHistory, { passive: true });\r\n } else {\r\n /*\r\n * workaround for browsers that do not have 'scrollRestoration' in window.history\r\n */\r\n ['blur', 'mouseout', 'beforeunload'].forEach(e =>\r\n window.addEventListener(e, addScrollHistory)\r\n );\r\n }\r\n\r\n window.addEventListener('popstate', e => {\r\n kexNavigate(window.location.href, e);\r\n });\r\n }, [kexNavigate]);\r\n};\r\n","import { parseUrl } from '../Common/Helpers';\r\nimport PageModelBase from '../Models/PageModelBase.interface';\r\nimport Fetcher from '../Common/Fetcher';\r\nimport AbortControllerRefType from '../Common/AbortControllerRefType';\r\n\r\nexport interface ReturnPageModel extends PageModelBase {\r\n responseUrl?: string;\r\n}\r\n\r\nfunction FetchPage(\r\n url: string,\r\n abortControllerRef: React.MutableRefObject\r\n) {\r\n abortControllerRef.current?.abortController?.abort();\r\n abortControllerRef.current = {\r\n url,\r\n abortController: new AbortController(),\r\n };\r\n const signal = abortControllerRef.current.abortController.signal;\r\n\r\n if (url === 'epiedit') {\r\n url = window.location.pathname + window.location.search;\r\n }\r\n\r\n /*\r\n * fix so we are only fetching the current page and not the whole appinitdata\r\n */\r\n return Fetcher(\r\n url,\r\n signal,\r\n (data, resolve, reject, requestResult) => {\r\n // if requested url is the same as response page, add, if present, hash to response url if\r\n // requested url had hash.\r\n const responseUrl = requestResult.url;\r\n const parsedUrl = parseUrl(url);\r\n const parsedResUrl = parseUrl(responseUrl);\r\n data.currentPage.responseUrl =\r\n parsedUrl.pathname + parsedUrl.search ===\r\n parsedResUrl.pathname + parsedResUrl.search\r\n ? parsedUrl.hash\r\n ? `${responseUrl}${parsedUrl.hash}`\r\n : responseUrl\r\n : responseUrl;\r\n resolve(data.currentPage);\r\n }\r\n );\r\n}\r\n\r\nexport default FetchPage;\r\n","import { useRef, useEffect } from 'react';\r\n\r\nfunction usePrevious(value) {\r\n // The ref object is a generic container whose current property is mutable ...\r\n // ... and can hold any value, similar to an instance property on a class\r\n const ref = useRef();\r\n\r\n // Store current value in ref\r\n useEffect(() => {\r\n ref.current = value;\r\n }, [value]); // Only re-run if value changes\r\n\r\n // Return previous value (happens before update in useEffect above)\r\n return ref.current;\r\n}\r\n\r\nexport default usePrevious;\r\n","import { useState, useEffect, useRef } from 'react';\r\nimport useSWR from 'swr';\r\nimport FetchPage, { ReturnPageModel } from './FetchPage';\r\nimport { useKexLoadingCircle } from '../Loading/KexLoadingCircle/KexLoadingCircle';\r\nimport { IS_PRODUCTION_ENV } from '../Configs/EnvConfig';\r\nimport AppInitModel from '../Models/AppInitModel.interface';\r\nimport usePrevious from '../Hooks/usePrevious';\r\nimport AbortControllerRefType from '../Common/AbortControllerRefType';\r\n\r\nlet hasMounted = false;\r\n\r\nexport default function(\r\n url: string,\r\n initialData: AppInitModel\r\n): [ReturnPageModel, string, string] {\r\n const [currentPage, setCurrentPage] = useState(\r\n initialData.currentPage\r\n );\r\n\r\n const dispatchLoading = useKexLoadingCircle();\r\n const abortControllerRef = useRef();\r\n\r\n if (abortControllerRef.current && abortControllerRef.current.url !== url) {\r\n abortControllerRef.current.abortController.abort();\r\n }\r\n const { data: fetchedPage } = useSWR(\r\n url ? [url, abortControllerRef] : null,\r\n FetchPage,\r\n {\r\n initialData: hasMounted ? undefined : initialData.currentPage,\r\n revalidateOnFocus: IS_PRODUCTION_ENV,\r\n dedupingInterval: initialData.appSettings.pageCacheTime,\r\n }\r\n );\r\n const prevFetchedPage = usePrevious(fetchedPage);\r\n\r\n useEffect(() => {\r\n if (!hasMounted) {\r\n hasMounted = true;\r\n } else {\r\n if (\r\n (!prevFetchedPage && fetchedPage) ||\r\n (prevFetchedPage && !fetchedPage)\r\n ) {\r\n dispatchLoading(!fetchedPage ? 'add' : 'remove');\r\n }\r\n\r\n if (fetchedPage) {\r\n setCurrentPage(fetchedPage);\r\n }\r\n }\r\n }, [dispatchLoading, fetchedPage, prevFetchedPage]);\r\n\r\n return [currentPage, currentPage.pageId, currentPage.pageTitle];\r\n}\r\n","import React, {\r\n useEffect,\r\n useCallback,\r\n useReducer,\r\n useRef,\r\n useMemo,\r\n} from 'react';\r\n\r\nimport { useSaveScrollPosition, updateScrollPosition } from './ScrollHandling';\r\nimport useQueryPage from './useQueryPage';\r\nimport AppInitModel from '../Models/AppInitModel.interface';\r\nimport PageModelBase from '../Models/PageModelBase.interface';\r\n\r\ntype PropType = {\r\n appInitData: AppInitModel;\r\n initUrl: string;\r\n children: React.ReactNode;\r\n};\r\n\r\nexport type KexNavigateEventStateType = PopStateEvent & {\r\n clicked?: true;\r\n id?: number;\r\n};\r\n\r\nexport type KexNavigateType = (\r\n url: string,\r\n event?: PopStateEvent | undefined\r\n) => Promise;\r\n\r\ntype kexNavigateCallbackRefType = {\r\n resolve: (data: any) => any;\r\n reject: (data: any) => any;\r\n eventState: KexNavigateEventStateType;\r\n};\r\n\r\nconst KexRouterDispatchContext = React.createContext({});\r\nconst KexRouterCurrentPage = React.createContext({});\r\n\r\nconst reducer = (state: any, action: any) => {\r\n switch (action.type) {\r\n case 'updateUrl': {\r\n return { ...state, url: action.url };\r\n }\r\n default: {\r\n return state;\r\n }\r\n }\r\n};\r\nlet hasMounted = false;\r\n\r\nfunction KexRouter({ appInitData, initUrl, children }: PropType) {\r\n const [routerState, dispatchState] = useReducer(reducer, {\r\n url: initUrl,\r\n });\r\n const kexNavigateCallbackRef = useRef();\r\n const [currentPageData, pageId, pageTitle] = useQueryPage(\r\n routerState.url,\r\n appInitData\r\n );\r\n\r\n const kexNavigate = useCallback((url: string, event?: PopStateEvent): Promise<\r\n PageModelBase\r\n > => {\r\n const { state } = event ? event : { state: { clicked: true } };\r\n return new Promise((resolve, reject) => {\r\n kexNavigateCallbackRef.current = {\r\n resolve,\r\n reject,\r\n eventState: state,\r\n };\r\n dispatchState({\r\n type: 'updateUrl',\r\n url: url,\r\n });\r\n });\r\n }, []);\r\n\r\n useSaveScrollPosition(kexNavigate);\r\n\r\n useEffect(() => {\r\n document.title = `${pageTitle}`;\r\n }, [pageTitle]);\r\n\r\n /**\r\n * using useMemo instead of useEffect because we need to updateScrollPosition (change url)\r\n * before we render the new current page.\r\n */\r\n useMemo(() => {\r\n if (hasMounted) {\r\n if (kexNavigateCallbackRef.current) {\r\n if (currentPageData.responseUrl) {\r\n updateScrollPosition(\r\n kexNavigateCallbackRef.current.eventState,\r\n currentPageData.responseUrl,\r\n pageTitle,\r\n currentPageData.pageType\r\n );\r\n kexNavigateCallbackRef.current = undefined;\r\n }\r\n }\r\n } else {\r\n hasMounted = true;\r\n }\r\n /* we only want to trigger updateScrollPosition the first time we get data from\r\n * useQueryPage and it's safe to only use pageId as dependency.\r\n */\r\n // eslint-disable-next-line\r\n }, [pageId, currentPageData.responseUrl]);\r\n\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n}\r\n\r\nconst useKexNavigate = () => {\r\n return React.useContext(KexRouterDispatchContext) as KexNavigateType;\r\n};\r\n\r\nfunction useKexRouterCurrentPage() {\r\n return React.useContext(KexRouterCurrentPage) as unknown;\r\n}\r\n\r\nexport { KexRouter, useKexNavigate, useKexRouterCurrentPage };\r\n","import React from 'react';\r\nimport { useKexNavigate } from '../KexRouter/KexRouter';\r\nimport {\r\n isInternalLink,\r\n isEmailLink,\r\n hasFileExtension,\r\n} from '../Common/Helpers';\r\nimport { styled, StyledProps } from '@glitz/react';\r\n\r\ntype RedirectType = {\r\n kexNavigate: any;\r\n target: string;\r\n url: string;\r\n onNavigated?: () => void;\r\n};\r\n\r\ntype PropType = StyledProps & {\r\n onClick?: (x?: () => void) => void;\r\n callbackOnClick?: boolean;\r\n onNavigated?: () => void;\r\n children?: React.ReactNode;\r\n pageType?: any;\r\n href?: string;\r\n isMedia?: boolean;\r\n title?: string;\r\n};\r\n\r\nconst redirect = ({\r\n kexNavigate,\r\n target,\r\n url = '',\r\n onNavigated,\r\n}: RedirectType) => {\r\n if (url === '' || url === undefined) return;\r\n if (\r\n target !== '_blank' &&\r\n isInternalLink({ url }) &&\r\n !hasFileExtension({ url })\r\n ) {\r\n onNavigated ? kexNavigate(url).then(onNavigated()) : kexNavigate(url);\r\n } else if (isEmailLink({ url })) {\r\n window.location.href = url;\r\n } else {\r\n window.open(url, '_blank');\r\n }\r\n};\r\n\r\nconst KexLink = ({\r\n onClick,\r\n callbackOnClick,\r\n onNavigated,\r\n children,\r\n href,\r\n isMedia,\r\n compose,\r\n ...rest\r\n}: PropType) => {\r\n const kexNavigate = useKexNavigate();\r\n return typeof href === 'string' && href.substr(0, 4) === 'http' ? (\r\n \r\n {children}\r\n \r\n ) : (\r\n {\r\n e.persist();\r\n e.preventDefault();\r\n const target = e.currentTarget.target;\r\n if (callbackOnClick) {\r\n onClick &&\r\n onClick(() =>\r\n redirect({ kexNavigate, target, url: href ?? '', onNavigated })\r\n );\r\n } else {\r\n onClick && onClick();\r\n redirect({ kexNavigate, target, url: href ?? '', onNavigated });\r\n }\r\n }}\r\n href={href}\r\n >\r\n {children}\r\n \r\n );\r\n};\r\n\r\nexport default styled(KexLink);\r\n","/** \r\n Colors\r\n*/\r\nexport const primary = '#484848';\r\nexport const secondary = '#F7EDDA';\r\nexport const secondaryText = '#F5F5F5';\r\nexport const white = '#FFFFFF';\r\nexport const breadText = '#404040';\r\nexport const heading = '#5C5C5C';\r\nexport const modal = '#A3A3A3';\r\nexport const hover = '#EDEDED';\r\nexport const primaryBackground = '#F8F8F8';\r\n\r\nexport const placeholder = '#AEAEAE';\r\nexport const sale = '#9C2929';\r\nexport const black = '#000000';\r\nexport const red = '#FF0000';\r\nexport const darkGray = '#292929';\r\nexport const lighterDarkGray = '#2E3035';\r\nexport const gray = '#3E3E3E';\r\nexport const lightGray = '#FAFAFA';\r\nexport const primaryBlue = '#0F4C81';\r\nexport const primaryDarkBlue = '#043662';\r\nexport const headerIconGray = '#C9CAC8';\r\nexport const veryLightGray = '#ECECEC';\r\nexport const linkColor = '#0664AA';\r\nexport const iconLightBlue = '#94B2CC';\r\nexport const grayLine = '#DCDCDC';\r\nexport const lightBlue = '#D9E4ED';\r\nexport const lightBlueHover = '#B7CBDC';\r\nexport const middleGray = '#767676';\r\nexport const inStockGreen = '#489C70';\r\nexport const notInStockRed = '#F44545';\r\nexport const purple = '#852A81';\r\n\r\n/** Validation */\r\n\r\nexport const errorPrimary = '#feb2b2';\r\nexport const errorText = '#9a2626';\r\n\r\nexport const buttonPrimary = '#2E2E2E';\r\n\r\nexport const transparent = 'transparent';\r\n","import React from 'react';\r\nimport loadable from '@loadable/component';\r\n\r\nimport KexPage from './Shared/KexPage/KexPage';\r\nimport { KexRouter } from './Shared/KexRouter/KexRouter';\r\nimport { Header } from './Shared/Models/Headers/Header';\r\nimport Footer from './Shared/Models/Footers/Footer/Footer';\r\nimport USPArea from './Shared/Models/USPArea/USPArea';\r\nimport { KexLoadingCircle } from './Shared/Loading/KexLoadingCircle/KexLoadingCircle';\r\nimport KexReporterOverlay from './Shared/KexReporterOverlay/KexReporterOverlay';\r\nimport KexNotificationOverlay from './Shared/Notifications/BasicNotification';\r\nimport ErrorBoundary from './Shared/ErrorBoundary/ErrorBoundary';\r\nimport useCurrentPage from '../Features/Shared/Hooks/useCurrentPage';\r\nimport AppInitModel from './Shared/Models/AppInitModel.interface';\r\nimport PageModelBase from './Shared/Models/PageModelBase.interface';\r\nimport { AppSettingsProvider } from './Shared/AppSettingsProvider/AppSettingsProvider';\r\nimport { UserContextProvider } from './Shared/UserContextProvider/UserContextProvider';\r\nimport Cookies from './Cookies/Cookies.js';\r\nimport { SignOut } from './LoginPage/Account';\r\nimport LoginPage from './LoginPage/LoginPage';\r\n\r\ntype PropType = {\r\n appInitData: AppInitModel;\r\n};\r\n\r\nconst NotFoundPage = loadable(() =>\r\n import(/* webpackPrefetch: true */ './NotFoundPage/NotFoundPage')\r\n);\r\n\r\nconst Content = ({ appInitData }: PropType) => {\r\n const { pageType } = useCurrentPage();\r\n\r\n return pageType === 'BlockPreviewPage' ? (\r\n \r\n ) : (\r\n <>\r\n

\r\n \r\n {/* {appInitData.uspArea && } */}\r\n \r\n\r\n