{"version":3,"sources":["components/search-forms/searchFormComponent.js","nhs/components/Carousel.js","pwa/component/imageLazyLoadConfig.js","pwa/component/imageLazyLoad.js","libs/domHelper.js","libs/ajaxHelper.js","pwa/component/htmlSectionLazyLoadConfig.js","pwa/component/htmlSectionLazyLoad.js","modules/locationCountsGetter.js","common/initialLoadModalHandler.js","libs/fastdom.js","modules/popularMarketsPills.js","nhs/views/home/Show.js","../../../../../../../../../../module-insertRequire.js"],"names":["define","SearchAutocompleteComponent","initAll","SearchFormComponent","settings","form","HTMLFormElement","TypeError","this","autocomplete","querySelector","searchAutocompleteComponent","searchTextField","pageToHitFields","querySelectorAll","latitudeField","longitudeField","locationTypeField","itemIdField","marketIdField","submitButton","validationError","useAutocompleteForSubmit","hasAttribute","shouldAlwaysSubmitForm","useBaseUrl","undefined","disabled","addEventListener","_formSubmitHandler","bind","onSelect","_setDataUserText","parentElement","event","suggestionsContainer","document","relatedTarget","hideSuggestions","wrapper","closest","hasValue","value","classList","add","remove","prototype","_getPageToHit","length","i","checked","_setPageToHitState","state","_redirectToCurrentLocationSearch","deviceHeight","window","innerHeight","deviceWidth","innerWidth","tilesAcrossWidth","maxLongitude","minLongitude","aspectRatio","maxLatitude","minLatitude","setAttribute","location","href","_setUpForLocationNameSearch","action","indexOf","type","id","marketId","_getCurrentLocation","navigator","geolocation","getCurrentPosition","position","coords","latitude","longitude","err","_showSearchSubmitError","maximumAge","style","display","removeCurrentLocation","_clearSearchSubmitError","_getRecentSearchValues","update","index","clearSignsRegex","suggestions","name","replace","toLowerCase","trim","selectSuggestion","_getParamsEvent","params","elements","element","dataset","ga4Param","preventDefault","inputText","textValue","userText","eventSegment","input_text","search_location","eventType","info","eventPandora","pandoraInfoEvent","pandoraCategory","pandoraInfoCategory","pandoraAction","pandoraInfoAction","pandoraLabel","infoGa4","paramsFromElements","eventGa4","eventName","ga4InfoEventName","search_value","click_target","ga4InfoEventClick_target","Object","assign","body","dispatchEvent","CustomEvent","detail","data","isCurrentLocation","submit","dependeciesRequested","searchTextInputs","oninput","global","factory","amd","Carousel","exports","module","root","container","options","HTMLElement","carousel","elementsContainer","items","visibleItems","fullscreenVisibleItems","onChangeHandlers","Set","stepSize","fullScreenStepSize","controls","pagerContainer","_touchTaken","onEnterFullScreenHandlers","onExitFullScreenHandlers","_beforeFullScreenElementsHeight","_beforeFullScreenContainerParent","_fullScreenPolyfillContainer","_setUp","_setUpControls","leftArrow","rightArrow","pager","infinitePager","_setUpInfinitePager","_setUpPager","instance","clickForFullScreen","targetItem","target","contains","fullScreen","goTo","addOnChangeListener","updateContentAndLayout","_setUpTouchEvents","_setUpWindowEvents","_getSlidesWidth","sample","clientWidth","parseInt","getComputedStyle","marginLeft","marginRight","updateContent","carouselElements","Array","slice","call","createRange","createContextualFragment","width","height","forEach","item","appendChild","insertAdjacentElement","_getTransform","x","isFullScreen","updateContentLayout","_index","fullScreenHeight","space","includes","_beforeFullScreenContainerLiteralHeight","_beforeFullScreenElementsLiteralHeight","visibleAreaWidth","isNaN","Math","round","clientHeight","transform","registerTouch","touch","touches","changedTouches","identifier","screenX","initialX","getAttribute","passive","currentX","abs","steps","floor","previousBulletIndex","newX","removeAttribute","fn","restoreX","_updateInfinitePager","_updateControlsAndPager","MutationObserver","updatePagers","observe","childList","key","goNext","goBack","fullscreenElement","createInfinitePagerElements","pagerElement","infinitePagerDocumentFragment","createDocumentFragment","innerHTML","createElement","children","pagerItem","percentageToMoveOnXVector","_updateControlsVisibility","_updateActivePager","active","pagerElements","previousSelectedElement","transformXMoveValue","previousIndex","counter","go","spaces","push","removeOnChangeListener","delete","pop","exitFullScreenBtn","exitFullScreen","webkitRequestFullscreen","mozRequestFullscreen","setTimeout","handler","webkitExitFullscreen","mozExitFullscreen","removeChild","addOnEnterFullScreen","removeOnEnterFullScreen","addOnExitFullScreen","removeOnExitFullScreen","_configurationInstance","NoPhotoUrl","ImageNotLoadedSelector","LazyLoadedAttributeName","DefaultIntersectionRootMargin","DefaultIntersectionThreshold","LowQualityAttribute","LazyLoadCssClass","LoadSizeCssClass","getConfigurationInstance","getConfigValue","configKey","imageLazyLoadConfig","intersectionObserverInstance","onErrorImageEvent","src","srcset","onLoadImageEvent","loadDataSourceSetImage","lazyImage","srcsetImage","onload","onerror","srcsetValues","split","lazyImages","IntersectionObserver","lowQualityImg","config","rootMargin","threshold","entries","entry","entryCounter","intersectionRatio","isIntersecting","unobserve","lazyImageCounter","image","setupIntersectionObserver","getPassiveOptions","opts","attachEvent","callback","detachEvent","removeEventListener","Element","removeEventFromElement","addEventToElement","Document","hasParent","parentNode","hasClass","className","onClassListChange","Event","bubbles","addClass","removeClass","insertAfter","nodeToInsert","insertBefore","nextSibling","hide","show","isVisible","visibility","NodeList","DOMTokenList","defineProperty","enumerable","configurable","writable","Node","replaceWith","currentElement","parent","arguments","currentNode","createTextNode","replaceChild","AjaxHelper","requestsQueue","partnerElement","getElementsByClassName","siteRoot","getElementById","browserAcceptTypes","partnerUrl","protocol","executeCallbacks","req","succeded","always","success","failed","queueIndex","splice","HTMLFieldSetElement","serialize","field","l","notSerializableTypes","s","nodeName","len","j","selected","encodeURIComponent","join","objectToQueryString","objectToConvert","baseQueryString","keyValuePair","substring","getAcceptTypes","localStorage","getItem","getRequest","url","contentType","parametersToSend","optionalCallbacks","xhr","XMLHttpRequest","open","onreadystatechange","readyState","succededStatus","status","responseText","setRequestHeader","send","postRequest","abort","async","requestHeaders","noJsonStringify","JSON","stringify","request","Error","requestToAbort","find","r","requestForQueue","toUpperCase","response","parse","e","getAbsolutePathRequest","siteUrl","convertToQueryString","require","domHelper","PendingLoadSectionSelector","ajaxHelper","htmlSectionLazyLoadConfig","loadSection","lazySection","hostname","responseFragment","lazySections","sectionTitle","homesCount","qmiCount","commsCount","textContent","HomesCount","QmiCount","CommsCount","TitleText","IsNationWide","QmiUrl","HomesUrl","CommunitiesUrl","NewHomeSource","previousInitialLoadModalHandler","InitialLoadModalHandler","configHiddenInput","queryString","autoOpenModalQueryString","DisplayModal","querySelectorModal","targetElement","currentUrl","URL","URLSearchParams","search","toString","newUrl","history","pushState","removeQueryStringFromUrl","click","noConflict","win","raf","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","FastDom","reads","writes","scheduleFlush","fastdom","scheduled","flush","error","runTasks","catch","array","constructor","tasks","task","shift","measure","ctx","mutate","clear","extend","props","child","create","source","hasOwnProperty","mixin","initialize","pillsContainer","pillsList","scrollLeftButton","scrollRightButton","limitRight","setRightLimit","getBoundingClientRect","right","updateChildElementsVisibility","isListScrolledRight","scrollLeft","lastElementChild","scrollHorizontally","amount","targetScrollLeft"],"mappings":"AAAAA,OAAA,sBAAA,CAAA,gCAAA,SAAAC,6BACAA,4BAAAC,UAEA,IAAAC,oBAAA,SAAAC,UACA,KAAAA,UACA,iBAAAA,UACAA,SAAAC,gBAAAC,iBACA,MAAA,IAAAC,UAGAC,KAAAH,KAAAD,SAAAC,KACAG,KAAAC,aAAAL,SAAAK,cAAAD,KAAAH,KAAAK,cAAA,wCAAAC,4BACAH,KAAAI,gBAAAR,SAAAQ,iBAAAJ,KAAAH,KAAAK,cAAA,qBACAF,KAAAK,gBAAAT,SAAAS,iBAAAL,KAAAH,KAAAS,iBAAA,oBACAN,KAAAO,cAAAX,SAAAW,eAAAP,KAAAH,KAAAK,cAAA,oBAAA,GACAF,KAAAQ,eAAAZ,SAAAY,gBAAAR,KAAAH,KAAAK,cAAA,qBAAA,GACAF,KAAAS,kBAAAb,SAAAa,mBAAAT,KAAAH,KAAAK,cAAA,uBACAF,KAAAU,YAAAd,SAAAc,aAAAV,KAAAH,KAAAK,cAAA,iBACAF,KAAAW,cAAAf,SAAAe,eAAAX,KAAAH,KAAAK,cAAA,mBACAF,KAAAY,aAAAhB,SAAAgB,cAAAZ,KAAAH,KAAAK,cAAA,iBACAF,KAAAa,gBAAAjB,SAAAiB,iBAAAb,KAAAH,KAAAK,cAAA,kCAAAF,KAAAH,KAAAK,cAAA,+BACAF,KAAAc,2BAAAlB,SAAAkB,0BAAAd,KAAAH,KAAAkB,aAAA,2CACAf,KAAAgB,uBAAApB,SAAAoB,yBAAA,EACAhB,KAAAiB,WAAArB,SAAAqB,aAAA,EACAjB,KAAAiB,gBAAAC,IAAAtB,SAAAqB,YAAArB,SAAAqB,WAEAjB,KAAAY,eACAZ,KAAAY,aAAAO,UAAA,GAIAvB,SAAAgB,cACAhB,SAAAgB,aAAAQ,iBAAA,QAAApB,KAAAqB,mBAAAC,KAAAtB,OAGAA,KAAAc,2BACAd,KAAAC,aAAAsB,SAAAvB,KAAAqB,mBAAAC,KAAAtB,OAGAA,KAAAI,iBACAJ,KAAAwB,mBAGAxB,KAAAH,KAAAuB,iBAAA,SAAApB,KAAAqB,mBAAAC,KAAAtB,OAEAA,KAAAI,iBACAJ,KAAAI,gBAAAqB,cAAAL,iBAAA,YAAAM,QACA,MAAAC,qBAAAC,SAAA1B,cAAA,gCACA,GAAAwB,MAAAG,gBAAAF,qBACA,OAGAD,MAAAG,eACA7B,KAAAC,aAAA6B,kBAIA,MAAAC,QAAA/B,KAAAI,gBAAA4B,QAAA,kCACAC,WAAAjC,KAAAI,gBAAA8B,MACAH,UACAE,SACAF,QAAAI,UAAAC,IAAA,yCAEAL,QAAAI,UAAAE,OAAA,8CA8PA,OAvPA1C,oBAAA2C,UAAAC,cAAA,WACA,GAAA,IAAAvC,KAAAK,gBAAAmC,OACA,OAAAxC,KAAAK,gBAAA,GAAA6B,MAGA,IAAA,IAAAO,EAAA,EAAAA,EAAAzC,KAAAK,gBAAAmC,OAAAC,IACA,GAAAzC,KAAAK,gBAAAoC,GAAAC,QACA,OAAA1C,KAAAK,gBAAAoC,GAAAP,MAGA,MAAA,IAGAvC,oBAAA2C,UAAAK,mBAAA,SAAAC,OACA,IAAA,IAAAH,EAAA,EAAAA,EAAAzC,KAAAK,gBAAAmC,OAAAC,IACAzC,KAAAK,gBAAAoC,GAAAtB,SAAAyB,OAUAjD,oBAAA2C,UAAAO,iCAAA,WACA,MAAAC,aAAAC,OAAAC,YACAC,YAAAF,OAAAG,WAMAC,iBAAAF,YAAA,IAYAG,cAAApD,KAAAQ,eAAA0B,MAAAiB,iBAAA,EALA,QAMAE,cAAArD,KAAAQ,eAAA0B,MAAAiB,iBAAA,EANA,QAaAG,YAAAR,aAAAG,YACAM,aAAAvD,KAAAO,cAAA2B,MAAAiB,iBAAA,EAdA,QAcAG,YACAE,aAAAxD,KAAAO,cAAA2B,MAAAiB,iBAAA,EAfA,QAeAG,YACAtD,KAAAH,KAAAK,cAAA,MAAAuD,aAAA,SAAA,IACAV,OAAAW,SAAAC,KAAA,gCAAAH,eAAAH,gBAAAE,eAAAH,gBAGAzD,oBAAA2C,UAAAsB,4BAAA,WAEA,IAAA5D,KAAAH,KAAAgE,OAAAC,QAAA,YAAA,IAAA9D,KAAAH,KAAAgE,OAAAC,QAAA,cACA9D,KAAAH,KAAAgE,OAAA,0BAKA7D,KAAAQ,iBACAR,KAAAQ,eAAA0B,MAAA,GACAlC,KAAAQ,eAAAW,UAAA,GAGAnB,KAAAO,gBACAP,KAAAO,cAAA2B,MAAA,GACAlC,KAAAO,cAAAY,UAAA,GAIAnB,KAAAI,gBAAAe,UAAA,EACAnB,KAAA2C,oBAAA,GAEA3C,KAAAS,oBACAT,KAAAS,kBAAAyB,MAAAlC,KAAAC,aAAAiC,MAAA6B,KACA/D,KAAAS,kBAAAU,UAAA,GAGAnB,KAAAU,cACAV,KAAAU,YAAAwB,MAAAlC,KAAAC,aAAAiC,MAAA8B,GACAhE,KAAAU,YAAAS,UAAA,GAGAnB,KAAAW,gBACAX,KAAAW,cAAAuB,MAAAlC,KAAAC,aAAAiC,MAAA+B,SACAjE,KAAAW,cAAAQ,UAAA,IAIAxB,oBAAA2C,UAAA4B,oBAAA,WAEAC,UAAAC,YAAAC,mBAAA,SAAAC,UACAtE,KAAAO,cAAA2B,MAAAoC,SAAAC,OAAAC,SACAxE,KAAAQ,eAAA0B,MAAAoC,SAAAC,OAAAE,UACAzE,KAAAqB,sBACAC,KAAAtB,MAAA,SAAA0E,KACA1E,KAAA2E,0BACArD,KAAAtB,MAAA,CAAA4E,WAAA,KAGAjF,oBAAA2C,UAAAqC,uBAAA,WACA3E,KAAAa,kBACAb,KAAAa,gBAAAgE,MAAAC,QAAA,QACA9E,KAAAH,KAAAsC,UAAAC,IAAA,gCACApC,KAAAC,aAAA6B,kBACA9B,KAAAC,aAAA8E,0BAIApF,oBAAA2C,UAAA0C,wBAAA,WACAhF,KAAAa,kBACAb,KAAAa,gBAAAgE,MAAAC,QAAA,OACA9E,KAAAH,KAAAsC,UAAAE,OAAA,kCAIA1C,oBAAA2C,UAAA2C,uBAAA,WACAjF,KAAAC,aAAAiF,OAAA,WAGA,IAFA,IAAAC,OAAA,EACAC,gBAAA,SACA3C,EAAA,EAAAA,EAAAzC,KAAAC,aAAAoF,YAAA7C,OAAAC,IACA,GAAAzC,KAAAC,aAAAoF,YAAA5C,GAAA6C,KAAAC,QAAAH,gBAAA,IAAAI,gBAAAxF,KAAAI,gBAAA8B,MAAAqD,QAAAH,gBAAA,IAAAI,cAAAC,OAAA,CACAN,MAAA1C,EACA,MAIA0C,OAAA,GACAnF,KAAAC,aAAAyF,iBAAAP,OACAnF,KAAAqB,sBAEArB,KAAA2E,0BAGArD,KAAAtB,QAOAL,oBAAA2C,UAAAqD,gBAAA,WACA,MAAAC,OAAA,GACAC,SAAA7F,KAAAH,KAAAS,iBAAA,oBACA,IAAA,IAAA6E,MAAA,EAAAA,MAAAU,SAAArD,OAAA2C,QAAA,CACA,MAAAW,QAAAD,SAAAV,OACAS,OAAAE,QAAAC,QAAAC,UAAAF,QAAA5D,MAEA,OAAA0D,QAGAjG,oBAAA2C,UAAAjB,mBAAA,SAAAK,OACAA,OACAA,MAAAuE,iBAGA,MAAAC,UAAAlG,KAAAH,KAAAK,cAAA,gDACA,IAAAiG,UAAAD,UAAAhE,MACA,IAAAgE,UAAAH,QAAAK,WACAD,UAAAD,UAAAH,QAAAK,UAEA,MAAAC,aAAA,CACA3E,MAAA,qBAAAwE,UAAAlC,IAAA,eAAAkC,UAAAlC,GAAA,uBAAA,8BACAsC,WAAAH,UACAI,gBAAAL,UAAAhE,MACAsE,UAAA,gBAGAC,KAAAP,UAAAlE,QAAA,6BACA+D,QAAAU,MAAAA,KAAAV,QACAW,aAAAX,SAAA,CACArE,MAAAqE,QAAAY,iBACAC,gBAAAb,QAAAc,oBACAC,cAAAf,QAAAgB,kBACAC,aAAAd,UAAAhE,MACAsE,UAAA,gBAGAS,QAAAf,UAAAlE,QAAA,8BAEA,GAAAiF,SAAAjH,KAAAI,gBAAA8B,MAAA,CACA,MAAAgF,mBAAAlH,KAAA2F,kBACAwB,SAAA,CACAC,UAAAH,QAAAlB,QAAAsB,iBACAzB,OAAA,CACA0B,aAAApB,UAAAhE,MACAqF,aAAAN,QAAAlB,QAAAyB,0BAGAhB,UAAA,YAEAiB,OAAAC,OAAAP,SAAAvB,OAAAsB,oBAEAtF,SAAA+F,KAAAC,cAAA,IAAAC,YAAA,qBAAA,CACAC,OAAA,CAAAC,KAAAZ,aAaA,GATAvF,SAAA+F,KAAAC,cAAA,IAAAC,YAAA,qBAAA,CACAC,OAAA,CAAAC,KAAA1B,iBAGAK,cAAA9E,SAAA+F,KAAAC,cAAA,IAAAC,YAAA,qBAAA,CACAC,OAAA,CAAAC,KAAArB,kBAIA1G,KAAAC,aAAA+H,mBAAAhI,KAAAO,cAAA2B,OAAAlC,KAAAQ,eAAA0B,MAGA,GAAAlC,KAAAC,aAAA+H,mBAAAhI,KAAAO,cAAA2B,OAAAlC,KAAAQ,eAAA0B,MACAlC,KAAA6C,uCADA,CAGA,GAAA7C,KAAAgB,wBAAAhB,KAAAI,gBAAA8B,MACAlC,KAAAH,KAAAoI,aACA,CAAA,GAAAjI,KAAAI,gBAAA8B,OAAAlC,KAAAC,gBAAAD,KAAAC,aAAAiI,sBAAA,OAAAlI,KAAAC,aAAAiC,OAEA,YADAlC,KAAAiF,yBAEA,IAAAjF,KAAAC,cAAA,OAAAD,KAAAC,aAAAiC,MAIA,YADAlC,KAAA2E,yBAFA3E,KAAA4D,8BAMA5D,KAAAgF,0BACAhF,KAAAH,KAAAoI,cAlBAjI,KAAAkE,uBAqBAvE,oBAAA2C,UAAAd,iBAAA,SAAAE,OACA,MAAAyG,iBAAAvG,SAAAtB,iBAAA,qBACA,IAAA,IAAAmC,EAAA,EAAAA,EAAA0F,iBAAA3F,OAAAC,GAAA,EACA0F,iBAAA1F,GAAA2F,QAAA,WACApI,KAAA+F,QAAAK,SAAApG,KAAAkC,QAKAvC,uBC5TA,SAAA0I,OAAAC,SACA,aACA,mBAAA9I,QAAAA,OAAA+I,IAMA/I,OAAA,WAAA,IAAA,WACA,OAAA6I,OAAAG,SAAAF,QAAAD,WAEA,iBAAAI,QAIAC,OAAAD,QAAAJ,OAAAG,SAAAF,QAAAD,QAGAA,OAAAG,SAAAF,QAAAD,QAlBA,CAoBA,oBAAAtF,OAAAA,OAAA,IAAA,SAAA4F,MAQA,IAAAH,SAAA,SAAAI,UAAAC,SACA,GAAAD,qBAAAE,YAAA,CAGAD,SAAA,iBAAAA,UACAA,QAAA,IAOA7I,KAAAmF,MAAA,EAMAnF,KAAA4I,UAAAA,UACAA,UAAAG,SAAA/I,KAKAA,KAAAgJ,kBAAA,KAMAhJ,KAAAiJ,MAAA,GAMAjJ,KAAAkJ,aAAAL,QAAAK,aAMAlJ,KAAAmJ,uBAAAN,QAAAM,uBAOAnJ,KAAAoJ,iBAAArG,OAAAsG,IAAA,IAAAA,IAAA,GAMArJ,KAAAsJ,SAAAT,QAAAS,UAAA,EAMAtJ,KAAAuJ,mBAAAV,QAAAU,mBAMAvJ,KAAAwJ,SAAA,KAMAxJ,KAAAyJ,eAAA,KAOAzJ,KAAA0J,YAAA,KAEA1J,KAAA2J,0BAAA5G,OAAAsG,IAAA,IAAAA,IAAA,GAEArJ,KAAA4J,yBAAA7G,OAAAsG,IAAA,IAAAA,IAAA,GAOArJ,KAAA6J,gCAAA,KAOA7J,KAAA8J,iCAAA,KAOA9J,KAAA+J,6BAAA,KAEA/J,KAAAgK,SAEAnB,QAAAW,WACAxJ,KAAAwJ,SAAA,GACAxJ,KAAAiK,eAAApB,QAAAqB,UAAArB,QAAAsB,aAIAtB,QAAAuB,QACApK,KAAAoK,MAAAvB,QAAAuB,MACAvB,QAAAuB,MAAAC,cACArK,KAAAsK,sBAEAtK,KAAAuK,eAIA,IAAAC,SAAAxK,KACA6I,QAAA4B,oBAEAzK,KAAA4I,UAAAxH,iBAAA,SAAA,SAAAM,OACA,IAAAgJ,WAAAhJ,MAAAiJ,OAAAxI,UAAAyI,SAAA,wBAAAlJ,MAAAiJ,OAAAjJ,MAAAiJ,OAAA3I,QAAA,yBACA,GAAA0I,WAAA,CACA,IAAAvF,MAAAqF,SAAAvB,MAAAnF,QAAA4G,YACAF,SAAAK,aACA1F,QAAAqF,SAAArF,OACAqF,SAAAM,KAAA3F,WAKAnF,KAAA+K,qBAAA,WACA,IAAA,IAAAtI,EAAA+H,SAAArF,MAAA1C,GAAA+H,SAAArF,MAAAqF,SAAAtB,aAAA,EAAAzG,IACA+H,SAAAvB,MAAAxG,IACA+H,SAAAvB,MAAAxG,GAAAN,UAAAC,IAAA,qCAoqBA,OAzpBAoG,SAAAlG,UAAA0H,OAAA,WACAhK,KAAAgL,yBACAhL,KAAAiL,oBACAjL,KAAAkL,sBASA1C,SAAAlG,UAAA6I,gBAAA,WACA,IAAAC,OAAApL,KAAAiJ,MAAA,GAIA,OAHAmC,OAAAC,aAAArL,KAAAgJ,kBAAAqC,aAAArL,KAAA4I,UAAAyC,cACAC,SAAAvI,OAAAwI,iBAAAH,QAAAI,aAAA,IACAF,SAAAvI,OAAAwI,iBAAAH,QAAAK,cAAA,IAQAjD,SAAAlG,UAAAoJ,cAAA,WACA,IAAAlB,SAAAxK,KACA2L,iBAAA3L,KAAA4I,UAAAtI,iBAAA,yBACAN,KAAAiJ,MAAA2C,MAAAtJ,UAAAuJ,MAAAC,KAAAH,kBACA3L,KAAAgJ,oBACAhJ,KAAAgJ,kBAAApH,SAAAmK,cAAAC,yBAAA,uDAAA9L,cAAA,KACAF,KAAAgJ,kBAAAnE,MAAAoH,MAAAjM,KAAA4I,UAAA/D,MAAAoH,MAAAnI,QAAA,MAAA,EAAA,OAAA9D,KAAA4I,UAAA/D,MAAAoH,MACAjM,KAAAgJ,kBAAAnE,MAAAqH,OAAAlM,KAAA4I,UAAA/D,MAAAqH,OAAApI,QAAA,MAAA,EAAA,OAAA9D,KAAA4I,UAAA/D,MAAAqH,OACAlM,KAAA4I,UAAA/D,MAAAqH,OAAA,OACAlM,KAAAiJ,MAAAkD,SAAA,SAAAC,MACA5B,SAAAxB,kBAAAqD,YAAAD,SAEApM,KAAA4I,UAAA0D,sBAAA,aAAAtM,KAAAgJ,qBAKAR,SAAAlG,UAAAiK,cAAA,SAAAC,GACA,MAAA,eAAAA,EAAA,QAAAxM,KAAAyM,eAAA,OAAA,OAAA,QAOAjE,SAAAlG,UAAAoK,oBAAA,WACA,IAAAtB,OAAApL,KAAAiJ,MAAA,GACA0D,OAAA3M,KAAAmF,MACAnF,KAAAmF,MAAA,EACA,IACAyH,iBADAC,MAAA,EAEA,GAAAzB,OAAA,CACA,GAAApL,KAAAyM,eAYAzM,KAAA6J,kCACA+C,iBAAA5M,KAAA6J,gCAAAiD,SAAA,KAAA9M,KAAA6J,gCAAA7J,KAAA+M,wCAAA/M,KAAAgN,uCAAA,IAAA,SAbA,CACA,IAAAC,iBAAAjN,KAAAgJ,kBAAAqC,aAAArL,KAAA4I,UAAAyC,YACArL,KAAAkJ,aAAAgE,MAAAlN,KAAAkJ,cAAAiE,KAAAC,MAAAH,iBAAAjN,KAAAmL,oBAAA,EAAAnL,KAAAkJ,aAEA,OAAAlJ,KAAA6J,iCACA7J,KAAA6J,gCAAAuB,OAAAvG,MAAAqH,OACAlM,KAAAgN,uCAAA5B,OAAAiC,aACArN,KAAA+M,wCAAA/M,KAAAgJ,kBAAAqE,cAAArN,KAAA4I,UAAAyE,cAEArN,KAAA6J,gCAAA7J,KAAA6J,gCAAAiD,SAAA,KAAA1B,OAAAvG,MAAAqH,OAAAlM,KAAA6J,gCAOA,IAAA,IAAApH,EAAA,EAAAA,EAAAzC,KAAAiJ,MAAAzG,OAAAC,IAAA,CACA,IAAA2J,KAAApM,KAAAiJ,MAAAxG,GACA2J,KAAA3I,aAAA,SAAAoJ,OACAT,KAAAvH,MAAAyI,UAAAtN,KAAAuM,cAAAM,OACAT,KAAAvH,MAAAoH,MAAA,KAAAjM,KAAAyM,gBAAAzM,KAAAmJ,wBAAAnJ,KAAAkJ,cAAA,IACAkD,KAAAvH,MAAAqH,OAAAU,kBAAA5M,KAAA6J,gCACAgD,OAAA7M,KAAAmL,kBAGAnL,KAAAyM,iBACAzM,KAAAgN,uCAAA5B,OAAAiC,aACArN,KAAA+M,wCAAA/M,KAAAgJ,kBAAAqE,cAAArN,KAAA4I,UAAAyE,cAGArN,KAAA8K,KAAA6B,SAOAnE,SAAAlG,UAAA0I,uBAAA,WACAhL,KAAA0L,gBACA1L,KAAA0M,uBAQAlE,SAAAlG,UAAA2I,kBAAA,WACA,IAAAT,SAAAxK,KAEAuN,cAAA,SAAA7L,OACA,IAAA8I,SAAAd,YAAA,CAEA,IAAA8D,MAAA9L,MAAA+L,QAAA,IAAA/L,MAAAgM,eAAA,GACAlD,SAAAd,YAAA,CACA1F,GAAAwJ,MAAAG,WACAnB,EAAAgB,MAAAI,QACAC,SAAAL,MAAAI,SAGApD,SAAA5B,UAAAzG,UAAAC,IAAA,WACA,IAAA,IAAAK,EAAA,EAAAA,EAAA+H,SAAAvB,MAAAzG,OAAAC,IAAA,CACA,IAAA2J,KAAA5B,SAAAvB,MAAAxG,GACA2J,KAAA3I,aAAA,gBAAA2I,KAAA0B,aAAA,cAIA9N,KAAAgJ,kBAAA5H,iBAAA,aAAAmM,cAAA,CAAAQ,SAAA,IAEA/N,KAAAgJ,kBAAA5H,iBAAA,aAAA,SAAAM,OACA,IAAA8I,SAAAd,YACA,OAAA6D,cAAA7L,OAGA,IAAA8L,MAAA9L,MAAA+L,QAAA,IAAA/L,MAAAgM,eAAA,GAEA,GAAAF,MAAAG,aAAAnD,SAAAd,YAAA1F,GAAA,CAEA,IAAA6I,QAAArC,SAAAd,YAAA8C,EAAAgB,MAAAI,SACApD,SAAAd,YAAA8C,EAAAgB,MAAAI,QACA,IAAA,IAAAnL,EAAA,EAAAA,EAAA+H,SAAAvB,MAAAzG,OAAAC,IAAA,CACA,IAAA2J,KAAA5B,SAAAvB,MAAAxG,GACAuL,SAAA1C,SAAAc,KAAA0B,aAAA,WACA1B,KAAA3I,aAAA,SAAAoJ,MAAAmB,UACA5B,KAAAvH,MAAAyI,UAAA9C,SAAA+B,cAAAH,KAAA0B,aAAA,eAEA,CAAAC,SAAA,IAEA/N,KAAAgJ,kBAAA5H,iBAAA,YAAA,SAAAM,OACA,IAAA8L,MAAA9L,MAAA+L,QAAA,IAAA/L,MAAAgM,eAAA,GAEA,GAAAlD,SAAAd,aAAA8D,MAAAG,aAAAnD,SAAAd,YAAA1F,GAAA,CAGA,IAMAvB,EACA2J,KAPAS,QAAArC,SAAAd,YAAAmE,SAAArD,SAAAd,YAAA8C,GACAP,MAAAzB,SAAAW,kBAOA,GALAX,SAAA5B,UAAAzG,UAAAE,OAAA,WACAmI,SAAAd,YAAA,KAKAyD,KAAAc,IAAApB,OAAA,IAAAZ,OACA,IAAAY,SAEAA,MAAA,GAAArC,SAAArF,QAAAqF,SAAAvB,MAAAzG,OAAA,GACAqK,MAAA,IAAArC,SAAArF,OAEA,CACA,IAAA+I,MAAAf,KAAAgB,MAAAhB,KAAAc,IAAApB,OAAAZ,OACA3C,SAAAkB,SAAAiC,gBAAAjC,SAAAjB,oBAAAiB,SAAAlB,SAYA,IAVA4E,OADAA,MAAAA,OAAA,GACA5E,SAAAA,SAAA4E,MACArB,MAAA,GAAArC,SAAArF,MAAA+I,MAAA,EACAA,OAAA1D,SAAArF,MAAA+I,MACArB,MAAA,GAAArC,SAAArF,MAAA+I,MAAA1D,SAAAvB,MAAAzG,OAAA,IACA0L,OAAA1D,SAAArF,MAAA+I,OAAA1D,SAAAvB,MAAAzG,OAAA,IAEAgI,SAAArF,OAAA0H,MAAA,EAAAqB,OAAAA,MACA1D,SAAAJ,OAAAI,SAAAJ,MAAAC,gBACAG,SAAA4D,oBAAAvB,MAAA,EAAArC,SAAArF,MAAA,EAAAqF,SAAArF,MAAA,GAEA1C,EAAA,EAAAA,EAAA+H,SAAAvB,MAAAzG,OAAAC,IAAA,CACA2J,KAAA5B,SAAAvB,MAAAxG,GACA,IAAA4L,KAAA/C,SAAAc,KAAA0B,aAAA,mBAAAjB,MAAA,GAAAqB,MAAAA,OAAAjC,MACAG,KAAA3I,aAAA,SAAA4K,MACAjC,KAAAvH,MAAAyI,UAAA9C,SAAA+B,cAAA8B,MACAjC,KAAAkC,gBAAA,kBAEA9D,SAAApB,iBAAA+C,SAAA,SAAAoC,IACAA,aAGA,IAAA9L,EAAA,EAAAA,EAAA+H,SAAAvB,MAAAzG,OAAAC,IAAA,CACA2J,KAAA5B,SAAAvB,MAAAxG,GACA,IAAA+L,SAAAlD,SAAAc,KAAA0B,aAAA,kBACA1B,KAAA3I,aAAA,SAAA+K,UACApC,KAAAvH,MAAAyI,UAAA9C,SAAA+B,cAAAiC,UACApC,KAAAkC,gBAAA,kBAKA9D,SAAAJ,OAAAI,SAAAJ,MAAAC,cACAG,SAAAiE,uBAEAjE,SAAAkE,+BAWAlG,SAAAlG,UAAA4I,mBAAA,WACA,IAAAV,SAAAxK,KACA,oBAAA2O,kBACA,IAAAA,kBAAA,WACAnE,SAAAQ,yBACAR,SAAAoE,kBAEAC,QAAA7O,KAAAgJ,kBACA,CACA8F,WAAA,IAGA/L,OAAA3B,iBAAA,UAAA,WACAoJ,SAAAkC,yBAEA3J,OAAA3B,iBAAA,qBAAA,WACAoJ,SAAAkC,yBAEA3J,OAAA3B,iBAAA,WAAA,SAAAM,OACA,OAAAA,MAAAqN,KACA,IAAA,aACAvE,SAAAwE,SACA,MACA,IAAA,YACAxE,SAAAyE,aAGArN,SAAAR,iBAAA,oBAAA,WACAoJ,SAAAiC,iBACA7K,SAAAsN,oBAAA1E,SAAA5B,WACA4B,SAAA5B,UAAAzG,UAAAE,OAAA,cAEAmI,SAAAkC,2BAQAlE,SAAAlG,UAAA6M,4BAAA,WACA,GAAAnP,KAAAyJ,eAAA,CACA,IAAA2F,aACAC,8BAAAzN,SAAA0N,yBACAtP,KAAAyJ,eAAA8F,UAAA,GACA,IAAA,IAAA9M,EAAA,EAAAA,EAAAzC,KAAAiJ,MAAAzG,OAAAC,KACA2M,aAAAxN,SAAA4N,cAAA,OACA/L,aAAA,aAAAhB,GACA2M,aAAAjN,UAAAC,IAAA,2BACAgN,aAAAjN,UAAAC,IAAA,iBACAiN,8BAAAhD,YAAA+C,cAEAC,8BAAAI,UAAAJ,8BAAAI,SAAAjN,OAAA,GAAA6M,8BAAAI,SAAAjN,QAAAxC,KAAAmF,OACAkK,8BAAAI,SAAAzP,KAAAmF,OAAAhD,UAAAC,IAAA,UAEApC,KAAAyJ,eAAA4C,YAAAgD,iCAOA7G,SAAAlG,UAAAsM,aAAA,WACA,GAAA5O,KAAAyJ,eAAA,CACAzJ,KAAAyJ,eAAA8F,UAAA,GACA,IAAA,IAAA9M,EAAA,EAAAA,EAAAzC,KAAAiJ,MAAAzG,OAAAC,IACAzC,KAAAyJ,eAAA4C,YAAAzK,SAAAmK,cAAAC,yBAAA,uCAAAvJ,IAAAzC,KAAAmF,MAAA,SAAA,IAAA,iBAAA1C,EAAA,cAQA+F,SAAAlG,UAAAiI,YAAA,WACA,IAAAC,SAAAxK,KACAA,KAAAyJ,eAAA7H,SAAAmK,cAAAC,yBAAA,kDAAA9L,cAAA,KACAF,KAAA4O,eACA5O,KAAAyJ,eAAArI,iBAAA,SAAA,SAAAM,OACA,IAAAgO,UAAAhO,MAAAiJ,OACA+E,UAAA5B,aAAA,eACAtD,SAAAM,KAAAQ,SAAAoE,UAAA5B,aAAA,mBAGA9N,KAAA4I,UAAAyD,YAAArM,KAAAyJ,iBAQAjB,SAAAlG,UAAAgI,oBAAA,WACA,IAAAE,SAAAxK,KACAwK,SAAAf,eAAA7H,SAAA4N,cAAA,MACAhF,SAAAf,eAAAtH,UAAAC,IAAA,gCACAoI,SAAAf,eAAAtH,UAAAC,IAAA,YACAoI,SAAA2E,8BACA3E,SAAAf,eAAArI,iBAAA,SAAA,SAAAM,OACA,IAAAgO,UAAAhO,MAAAiJ,OACA+E,UAAA5B,aAAA,eACAtD,SAAAM,KAAAQ,SAAAoE,UAAA5B,aAAA,mBAEAtD,SAAA5B,UAAAyD,YAAA7B,SAAAf,gBACAe,SAAAJ,MAAAuF,0BAAAnF,SAAAJ,MAAAuF,0BAAAnF,SAAAJ,MAAAuF,0BAAA,KAQAnH,SAAAlG,UAAAsN,0BAAA,WACA5P,KACAwJ,WAGA,IAJAxJ,KAIAmF,MAJAnF,KAKAwJ,SAAAU,UAAArF,MAAAC,QAAA,OALA9E,KAOAwJ,SAAAU,UAAArF,MAAAC,QAAA,QAPA9E,KAUAmF,QAVAnF,KAUAiJ,MAAAzG,OAAA,EAVAxC,KAWAwJ,SAAAW,WAAAtF,MAAAC,QAAA,OAXA9E,KAaAwJ,SAAAW,WAAAtF,MAAAC,QAAA,UASA0D,SAAAlG,UAAAuN,mBAAA,WACA,GAAA7P,KAAAyJ,eAAA,CAEA,IAAAqG,OAAA9P,KAAAyJ,eAAAvJ,cAAA,mCACA4P,QACAA,OAAA3N,UAAAE,OAAA,WAGAyN,OAAA9P,KAAAyJ,eAAAvJ,cAAA,wCAAAF,KAAAmF,MAAA,QAEA2K,OAAA3N,UAAAC,IAAA,YAKAoG,SAAAlG,UAAAmM,qBAAA,WACA,GAAAzO,KAAAyJ,eAAA,CACA,IACAsG,cADA/P,KACAyJ,eAAAnJ,iBAAA,kBAGA0P,wBAJAhQ,KAIAyJ,eAAAvJ,cAAA,mCACA8P,yBACAA,wBAAA7N,UAAAE,OAAA,UAIA,IAAAyN,OAAA9P,KAAAyJ,eAAAvJ,cAAA,wCAAAF,KAAAmF,MAAA,MACA2K,QACAA,OAAA3N,UAAAC,IAAA,UAGA,IAAA6N,oBAfAjQ,KAeAoK,MAAAuF,2BAfA3P,KAeAmF,MAAA,GAEA,GADA8K,oBAhBAjQ,KAgBAkQ,cAhBAlQ,KAgBAmF,MAAA8K,qBAAA,EAAAA,oBACAjQ,KAAAmF,MAAA,GAAA,IAAAnF,KAAAoO,qBAjBApO,KAiBAiJ,MAAAzG,OAAA,IAAAxC,KAAAmF,OAAA4K,cAAAvN,OAAA,EACA,IAAA,IAAA2N,QAAA,EAAAA,QAAAJ,cAAAvN,OAAA2N,UACAJ,cAAAI,SAAAtL,MAAAyI,UAAA,eAAA2C,oBAAA,WAIAjQ,KAAA4P,8BAQApH,SAAAlG,UAAAoM,wBAAA,WACA1O,KAAA4P,4BACA5P,KAAAoK,OAAApK,KAAAoK,MAAAC,cACArK,KAAAyO,uBAEAzO,KAAA6P,sBAYArH,SAAAlG,UAAA2H,eAAA,SAAAC,UAAAC,YACA,IAAAK,SAAAxK,KACAkK,UACAlK,KAAAwJ,SAAAU,UAAAA,WAEAlK,KAAAwJ,SAAAU,UAAAtI,SAAAmK,cAAAC,yBAAA,6MAAA9L,cAAA,KACAF,KAAA4I,UAAAyD,YAAArM,KAAAwJ,SAAAU,YAGAC,WACAnK,KAAAwJ,SAAAW,WAAAA,YAEAnK,KAAAwJ,SAAAW,WAAAvI,SAAAmK,cAAAC,yBAAA,+MAAA9L,cAAA,KACAF,KAAA4I,UAAAyD,YAAArM,KAAAwJ,SAAAW,aAGAnK,KAAAwJ,SAAAU,UAAA9I,iBAAA,SAAA,WACAoJ,SAAAyE,YAGAjP,KAAAwJ,SAAAW,WAAA/I,iBAAA,SAAA,WACAoJ,SAAAwE,YAGAxE,SAAAoF,6BAQApH,SAAAlG,UAAA8N,GAAA,SAAAC,QAEA,IAAAnD,MAAAmD,QAAA,CAGA,IAAAnC,MAAAf,KAAAc,IAAAoC,QACAA,OAAA,GALArQ,KAKAmF,MAAA+I,MAAA,EACAA,OANAlO,KAMAmF,MAAA+I,MACAmC,OAAA,GAPArQ,KAOAmF,MAAA+I,MAPAlO,KAOAiJ,MAAAzG,OAAA,IACA0L,OARAlO,KAQAmF,MAAA+I,OARAlO,KAQAiJ,MAAAzG,OAAA,IARAxC,KAUAmF,OAAAkL,OAAA,EAAAnC,OAAAA,MAKA,IAHA,IACArB,OAAAwD,OAAA,GAAA,EAAA,GAAAnC,MADAlO,KAAAmL,kBAGA1I,EAAA,EAAAA,EAAAzC,KAAAiJ,MAAAzG,OAAAC,IAAA,CACA,IAAA2J,KAAApM,KAAAiJ,MAAAxG,GACAuL,SAAA1C,SAAAc,KAAA0B,aAAA,WACA1B,KAAA3I,aAAA,SAAAoJ,MAAAmB,UACA5B,KAAAvH,MAAAyI,UAnBAtN,KAmBAuM,cAAAH,KAAA0B,aAAA,WAnBA9N,KAsBA0O,0BAEA1O,KAAAoJ,iBAAA+C,SAAA,SAAAoC,IACAA,UASA/F,SAAAlG,UAAAwI,KAAA,SAAA3F,OACAA,MAAAnF,KAAAmF,OAAAA,OAAA,EACAnF,KAAAiP,OAAAjP,KAAAmF,MAAAA,OACAA,MAAAnF,KAAAmF,OAAAA,MAAAnF,KAAAiJ,MAAAzG,QACAxC,KAAAgP,OAAA7J,MAAAnF,KAAAmF,QASAqD,SAAAlG,UAAA0M,OAAA,SAAAqB,QACArQ,KAAAoQ,GAAAlD,MAAAmD,QAAArQ,KAAAyM,gBAAAzM,KAAAuJ,oBAAAvJ,KAAAsJ,SAAA+G,SAQA7H,SAAAlG,UAAA2M,OAAA,SAAAoB,QACArQ,KAAAoQ,KAAAlD,MAAAmD,QAAArQ,KAAAyM,gBAAAzM,KAAAuJ,oBAAAvJ,KAAAsJ,SAAA+G,UAQA7H,SAAAlG,UAAAyI,oBAAA,SAAAwD,IACA,mBAAAA,KACA,mBAAAvO,KAAAoJ,iBAAAhH,IACApC,KAAAoJ,iBAAAhH,IAAAmM,IAEAvO,KAAAoJ,iBAAAkH,KAAA/B,MASA/F,SAAAlG,UAAAiO,uBAAA,SAAAhC,IACA,mBAAAvO,KAAAoJ,iBAAAoH,OACAxQ,KAAAoJ,iBAAAoH,OAAAjC,IAEAvO,KAAAoJ,iBAAAqH,IAAAlC,KAQA/F,SAAAlG,UAAAuI,WAAA,WACA,IAAAL,SAAAxK,KACAwK,SAAAiC,iBAGAjC,SAAAkG,oBACAlG,SAAAkG,kBAAA9O,SAAAmK,cAAAC,yBAAA,sDAAA9L,cAAA,KACAsK,SAAAkG,kBAAAtP,iBAAA,SAAA,WACAoJ,SAAAmG,qBAGAnG,SAAA5B,UAAAyD,YAAA7B,SAAAkG,mBAEAlG,SAAA5B,UAAAzG,UAAAC,IAAA,cACAoI,SAAA5B,UAAAgI,wBACApG,SAAA5B,UAAAgI,0BACApG,SAAA5B,UAAAiI,qBACArG,SAAA5B,UAAAiI,wBAEArG,SAAAT,+BACAnI,SAAA+F,KAAAxF,UAAAC,IAAA,wBACAoI,SAAA5B,UAAA/D,MAAAqH,OAAA,OACA1B,SAAAT,6BAAAnI,SAAAmK,cAAAC,yBAAA,kEAAA9L,cAAA,KACA0B,SAAA+F,KAAA0E,YAAA7B,SAAAT,+BAEAS,SAAAT,6BAAAlF,MAAAC,QAAA,QACA0F,SAAAV,iCAAAU,SAAA5B,UAAAnH,cACA+I,SAAAT,6BAAAsC,YAAA7B,SAAA5B,YAGA4B,SAAAkC,sBACAoE,YAAA,WACAtG,SAAAkC,wBACA,KACAlC,SAAAb,0BAAAwC,SAAA,SAAA4E,SACAA,eAQAvI,SAAAlG,UAAAqO,eAAA,WACA,IAAAnG,SAAAxK,KACAwK,SAAA5B,UAAAzG,UAAAE,OAAA,cACAT,SAAAoP,qBACApP,SAAAoP,uBACApP,SAAAqP,kBACArP,SAAAqP,qBAEAzG,SAAAT,6BAAAlF,MAAAC,QAAA,OACAlD,SAAA+F,KAAAxF,UAAAE,OAAA,wBACAmI,SAAAV,iCAAAuC,YAAA7B,SAAA5B,YAEA4B,SAAAkG,mBAAAlG,SAAAkG,kBAAAjP,eACA+I,SAAAkG,kBAAAjP,cAAAyP,YAAA1G,SAAAkG,mBAGAI,YAAA,WACAtG,SAAAkC,wBACA,KACAlC,SAAAZ,yBAAAuC,SAAA,SAAA4E,SACAA,cAQAvI,SAAAlG,UAAAmK,aAAA,WACA,OAAA7K,SAAAsN,oBAAAlP,KAAA4I,WAAA5I,KAAA4I,UAAAzG,UAAAyI,SAAA,eAQApC,SAAAlG,UAAA6O,qBAAA,SAAA5C,IACA,mBAAAvO,KAAA2J,0BAAAvH,IACApC,KAAA2J,0BAAAvH,IAAAmM,IAEAvO,KAAA2J,0BAAA2G,KAAA/B,KASA/F,SAAAlG,UAAA8O,wBAAA,SAAA7C,IACA,mBAAAvO,KAAA2J,0BAAAtH,OACArC,KAAA2J,0BAAAtH,OAAAkM,IAEAvO,KAAA2J,0BAAA8G,IAAAlC,KASA/F,SAAAlG,UAAA+O,oBAAA,SAAA9C,IACA,mBAAAvO,KAAA4J,yBAAAxH,IACApC,KAAA4J,yBAAAxH,IAAAmM,IAEAvO,KAAA4J,yBAAA0G,KAAA/B,KASA/F,SAAAlG,UAAAgP,uBAAA,SAAA/C,IACA,mBAAAvO,KAAA4J,yBAAAvH,OACArC,KAAA4J,yBAAAvH,OAAAkM,IAEAvO,KAAA4J,yBAAA6G,IAAAlC,KAIA/F,YAGAhJ,OAAA,sBAAA,IAAA,WCh1BA,IAAA+R,uBAAA,CACAC,WAAA,+GACAC,uBAAA,+CACAC,wBAAA,mBACAC,8BAAA,YACAC,6BAAA,IACAC,oBAAA,kBACAC,iBAAA,oBACAC,iBAAA,oBAcA,MAAA,CACAC,yBAZA,WACA,OAAAvK,OAAAC,OACAD,OAAAC,OAAA,GAAA6J,wBAEA,IASAU,eANA,SAAAC,WACA,OAAAX,uBAAAW,gBCfA1S,OAAA,gBAAA,CAAA,wBAAA,SAAA2S,sBACA,WACA,aACA,IAAAC,6BAMAC,kBAAA,WACArS,KAAAyD,aAAA0O,oBAAAT,wBAAA,QACA1R,KAAAmC,UAAAE,OAAA8P,oBAAAH,2BAAAF,iBAAAK,oBAAAH,2BAAAD,kBACA/R,KAAAsS,IAAAH,oBAAAH,2BAAAR,WACAxR,KAAAuS,SACAvS,KAAAuS,OAAAJ,oBAAAH,2BAAAR,aAUAgB,iBAAA,WACAxS,KAAAyD,aAAA0O,oBAAAH,2BAAAN,wBAAA,QACA1R,KAAAmC,UAAAE,OAAA8P,oBAAAH,2BAAAF,iBAAAK,oBAAAH,2BAAAD,mBASA,SAAAU,uBAAAC,WACAA,UAAA/H,SACA+H,UAAAA,UAAA/H,QAGA+H,YACAA,UAAA1S,MAGA,IAAA2S,YAAAD,UAAA3M,QAAAwM,OAKA,GAHAG,UAAAE,OAAAJ,iBACAE,UAAAG,QAAAR,kBAEA,KAAAM,aAAAA,YAAA,CACA,IAAAG,aAAAH,YAAAI,MAAA,KACAD,aAAA,IAAAA,aAAA,GAAAhP,QAAA,SAAA,IACA4O,UAAAJ,IAAAQ,aAAA,GACAJ,UAAAH,OAAAI,kBAEAD,UAAA3M,QAAAuM,MACAI,UAAAJ,IAAAI,UAAA3M,QAAAuM,MAUA,WACA,IAAAU,WAAA,GAAAnH,MAAAC,KAAAlK,SAAAtB,iBAAA6R,oBAAAH,2BAAAP,yBACA,GAAAuB,WAAAxQ,OAAA,GAAAO,OAAAkQ,qBAAA,CACA,IAgBAC,cAhBAC,OAAA,CACAxK,KAAA,KACAyK,WAAAjB,oBAAAH,2BAAAL,8BACA0B,UAAAlB,oBAAAH,2BAAAJ,8BAEAQ,6BAAA,IAAAa,sBAAA,SAAAK,SAEA,IADA,IAAAC,MACAC,aAAA,EAAAA,aAAAF,QAAA9Q,OAAAgR,eAEA,IADAD,MAAAD,QAAAE,eACAC,kBAAA,GAAAF,MAAAG,eAAA,CACA,IAAAhB,UAAAa,MAAA5I,OACA8H,uBAAAC,WACAN,6BAAAuB,UAAAjB,cAGAS,QAEA,IAAA,IAAAS,iBAAA,EAAAA,iBAAAZ,WAAAxQ,OAAAoR,mBAEAxB,6BAAAvD,QAAAmE,WAAAY,oBAEAV,cAAAF,WAAAY,kBAAA9F,aAAAqE,oBAAAH,2BAAAH,wBAEAmB,WAAAY,kBAAAtF,gBAAA6D,oBAAAH,2BAAAH,qBACAmB,WAAAY,kBAAAtB,IAAAY,mBAIA,CACAF,WAAApR,SAAAtB,iBAAA,sBACA,IAAA,IAAAmC,EAAA,EAAAA,EAAAuQ,WAAAxQ,OAAAC,IAAA,CACA,IAAAoR,MAAAb,WAAAvQ,GACAoR,MAAAvB,IAAAuB,MAAA9N,QAAAuM,MAWAwB,GA/GA,MAqHAtU,OAAA,YAAA,IAAA,WC1HA,IAAAuU,kBAAA,SAAAhG,SACA,IAAAiG,KAAA,IAAAvM,OAEA,OADAuM,KAAAjG,UAAAA,QACAiG,MAWA,SAAAC,YAAA7M,UAAA8M,SAAAnG,SACA,IAAAiG,KAAAD,kBAAAhG,SAEAnM,SAAAR,iBACApB,KAAAoB,iBAAAgG,UAAA8M,SAAAF,MACApS,SAAAqS,aACAjU,KAAAiU,YAAA7M,UAAA8M,SAAAF,MAYA,SAAAG,YAAA/M,UAAA8M,SAAAnG,SACA,IAAAiG,KAAAD,kBAAAhG,SAEAnM,SAAAwS,oBACApU,KAAAoU,oBAAAhN,UAAA8M,SAAAF,MACApS,SAAAuS,aACAnU,KAAAmU,YAAA/M,UAAA8M,SAAAF,MAwCA,GApCAK,QAAA/R,UAAAgS,uBAAAH,YACAE,QAAA/R,UAAAiS,kBAAAN,YAEAO,SAAAlS,UAAAiS,kBAAAN,YACAO,SAAAlS,UAAAgS,uBAAAH,YASAE,QAAA/R,UAAAmS,UAAA,SAAAzQ,IACA,OAAAhE,KAAAgE,KAAAA,IAIAhE,KAAA0U,YAAA1U,KAAA0U,aAAA9S,SAAA+F,MAAA3H,KAAA0U,WAAAD,UAAAzQ,KAUAqQ,QAAA/R,UAAAqS,SAAA,SAAAC,WACA,QAAA5U,KAAAmC,WAIAnC,KAAAmC,UAAAyI,SAAAgK,YAGA,mBAAA7R,OAAA8E,YAAA,CACA,IAAAgN,kBAAA,IAAAC,MAAA,oBACA,CACAC,SAAA,IAIAV,QAAA/R,UAAA0S,SAAA,SAAAJ,WACA,QAAA5U,KAAA2U,SAAAC,aAGA5U,KAAAmC,UAAAC,IAAAwS,WACA5U,KAAA4H,cAAAiN,mBACA7U,OAqDA,GAjDAqU,QAAA/R,UAAA2S,YAAA,SAAAL,WACA,OAAA5U,KAAA2U,SAAAC,aAIA5U,KAAAmC,UAAAE,OAAAuS,WACA5U,KAAA4H,cAAAiN,mBACA7U,OAGAqU,QAAA/R,UAAA4S,YAAA,SAAAC,cACAnV,KAAA0U,WAAAU,aAAAD,aAAAnV,KAAAqV,cAQAhB,QAAA/R,UAAAgT,KAAA,WAEA,OADAtV,KAAA6E,MAAAC,QAAA,OACA9E,MASAqU,QAAA/R,UAAAiT,KAAA,WAEA,OADAvV,KAAA6E,MAAAC,QAAA,QACA9E,MASAqU,QAAA/R,UAAAkT,UAAA,WACA,IAAA3Q,MAAA9B,OAAAwI,iBAAAvL,MAEA,MAAA,SAAA6E,MAAAC,SAAA,WAAAD,MAAA4Q,aAKAC,SAAApT,UAAA6J,UAAAwJ,aAAArT,UAAA6J,QAAA,CACA,IACAA,QAAA,SAAA+H,UACA,GAAA,mBAAAA,SACA,MAAA,IAAAnU,iBAAAmU,SAAA,sBAIA,IAFA,IACA/O,MAAA,EACAA,MAFAnF,KAEAwC,SACA,IAAA0R,SAHAlU,KAGAmF,OAAAA,MAHAnF,MAEAmF,WAMAuQ,SAAApT,UAAA6J,SACA1E,OAAAmO,eAAAF,SAAApT,UAdA,UAcA,CACAuT,YAAA,EACAC,cAAA,EACAC,UAAA,EACA7T,MAAAiK,UAGAwJ,aAAArT,UAAA6J,SACA1E,OAAAmO,eAAAD,aAAArT,UAtBA,UAsBA,CACAuT,YAAA,EACAC,cAAA,EACAC,UAAA,EACA7T,MAAAiK,UAKA,IAAA6J,KAAA1T,UAAA2T,cAAA5B,QAAA/R,UAAA2T,YAAA,CACA,IAAAA,YAAA,WACA,IAAAC,eAAAlW,KACAmW,OAAAD,eAAAxB,WACA,IAAAyB,OACA,OAAA,EAGA,IAAA3T,OAAA4T,UAAA5T,OACA,IAAAA,OACA,OAAA2T,OAAAjF,YAAAgF,gBAIA,IAFA,IACAG,YADAlR,MAAA,EAEAA,MAAA3C,OAAA2C,QAEA,iBADAkR,YAAAD,UAAAjR,QAEAkR,YAAAzU,SAAA0U,eAAAD,aACAA,YAAA3B,YACA2B,YAAA3B,WAAAxD,YAAAmF,aAEAlR,QAAA3C,OAAA,EACA2T,OAAAI,aAAAF,YAAAH,gBAEAC,OAAAf,aAAAiB,YAAAH,iBAIA7B,QAAA/R,UAAA2T,aACAxO,OAAAmO,eAAAvB,QAAA/R,UAAA,cAAA,CACAuT,YAAA,EACAC,cAAA,EACAC,UAAA,EACA7T,MAAA+T,cAGAD,KAAA1T,UAAA2T,aACAxO,OAAAmO,eAAAI,KAAA1T,UAAA,cAAA,CACAuT,YAAA,EACAC,cAAA,EACAC,UAAA,EACA7T,MAAA+T,kBAMA,SAAA5N,OAAAC,SC/NA,aACA,mBAAA9I,QAAAA,OAAA+I,IAGA/I,OAAA,aAAA,IACA,WACA,OAAA6I,OAAAmO,WAAAlO,QAAAD,WAEA,iBAAAI,QAIAC,OAAAD,QAAAJ,OAAAmO,WAAAlO,QAAAD,QAGAA,OAAAmO,WAAAlO,QAAAD,QDgNA,CC9MA,oBAAAtF,OAAAA,OAAA,IAAA,SAAA4F,MAEA,IAAA8N,cAAA,GACAC,eAAA9U,SAAA+U,uBAAA,cACAC,SAAAhV,SAAAiV,eAAA,gBACA,IAAAC,mBAAA,KACA,IAAAC,WAGAA,WAFAL,gBAAAA,eAAAlU,OAAA,GACAuU,WAAAL,eAAA,GAAA/S,MACA4B,QAAA,QAAAxC,OAAAW,SAAAsT,UAEA,GAIAJ,SADAA,SACAA,SAAA1U,MAEA,GAGA,IAAA+U,iBAAA,SAAAC,IAAArO,QAAAsO,SAAApP,MACA,MAAAc,UACAA,QAAA,IAIA,mBAAAA,QAAAuO,QACAvO,QAAAuO,OAAArP,MAGAoP,UAAA,mBAAAtO,QAAAwO,QACAxO,QAAAwO,QAAAtP,MACA,mBAAAc,QAAAyO,QACAzO,QAAAyO,OAAAvP,MAGA,IAAAwP,WAAAd,cAAA3S,QAAAoT,KACAK,YAAA,GACAd,cAAAe,OAAAD,WAAA,IAqLAE,oBAAAnV,UAAAoV,UAAA,WACA,IACAC,MAAAC,EADAC,qBAAA,CAAA,OAAA,QAAA,SAAA,UACAC,EAAA,GAEA,GAAA,iBAAA9X,MAAA,aAAAA,KAAA+X,SAGA,IAFA,IAAAC,IAAAhY,KAAA6F,SAAArD,OAEAC,EAAA,EAAAA,EAAAuV,IAAAvV,GAAA,EAGA,IAFAkV,MAAA3X,KAAA6F,SAAApD,IAEA6C,OAAAqS,MAAAxW,WAAA0W,qBAAA/K,SAAA6K,MAAA5T,MAGA,GAAA,oBAAA4T,MAAA5T,KAAA,CACA6T,EAAA5X,KAAA6F,SAAApD,GAAAoG,QAAArG,OAEA,IAAA,IAAAyV,EAAA,EAAAA,EAAAL,EAAAK,GAAA,EACAN,MAAA9O,QAAAoP,GAAAC,WACAJ,EAAAA,EAAAtV,QACA2V,mBAAAR,MAAArS,MAAA,IAAA6S,mBAAAR,MAAA9O,QAAAoP,GAAA/V,aAGA,aAAAyV,MAAA5T,MAAA,UAAA4T,MAAA5T,MAAA4T,MAAAjV,WACAoV,EAAAA,EAAAtV,QAAA2V,mBAAAR,MAAArS,MACA,IACA6S,mBAAAR,MAAAzV,OAAAyV,MAAAjV,UAIA,OAAAoV,EAAAM,KAAA,KAAA7S,QAAA,OAAA,MAGA,IAcA8S,oBAAA,SAAAC,gBAAAC,iBACA,IAAAC,aAAA/Q,OAAA6L,QAAAgF,iBACA,GAAAE,cAAAA,aAAAhW,OAAA,EACA,IAAA,IAAAC,EAAA,EAAAA,EAAA+V,aAAAhW,OAAAC,SACA,IAAA+V,aAAA/V,GAAA,KACA8V,iBAAAJ,mBAAAK,aAAA/V,GAAA,IAAA,IAAA0V,mBAAAK,aAAA/V,GAAA,IAAA,KAKA,OADA8V,gBAAAA,gBAAAE,UAAA,EAAAF,gBAAA/V,OAAA,IA8BA,SAAAkW,iBACA,OAAA5B,qBAIAA,mBAAA6B,aAAAC,QAAA,sBAEA9B,oBAAA,OAGA,MAAA,CACA+B,WAjRA,SAAAC,IAAAC,YAAAC,iBAAAC,mBACA,IAAAC,IAAA,IAAAC,eACAjC,IAAA,CACA4B,IACA/U,KAAA,MACAmV,KAEAzC,cAAAnG,KAAA4G,KAEAgC,IAAAE,KAAA,MAAAN,KAAA,GACAI,IAAAG,mBAAA,WACA,GAAA,IAAAH,IAAAI,WAAA,CAIA,IAAAC,eAAA,MAAAL,IAAAM,OACAvC,iBAAAC,IAAA+B,kBAAAM,eAAAL,IAAAO,gBAEAP,IAAAQ,iBAAA,eAAAX,aACAG,IAAAQ,iBAAA,mBAAA,kBACAR,IAAAQ,iBAAA,SAAAhB,kBAGA,IACAQ,IAAAS,KAAAX,kBACA,MAAAtU,KACAuS,iBAAAC,IAAA+B,mBAAA,EAAAvU,OAwPAkV,YAlPA,SAAAd,IAAAjQ,SACA,IAAAqQ,IAAA,IAAAC,eACA,GAAAtQ,QAAAgR,MACA,IAAA,IAAApX,EAAA,EAAAA,EAAAgU,cAAAjU,OAAAC,GAAA,EACAgU,cAAAhU,GAAAqW,MAAAA,MACArC,cAAAhU,GAAAyW,IAAAW,QACApD,cAAAe,OAAA/U,EAAA,IAKA,IAAAyU,IAAA,CACA4B,IACA/U,KAAA,OACAmV,KAKA,GAFAzC,cAAAnG,KAAA4G,KAEA,iBAAArO,QAAA,CAEAqQ,IAAAE,KAAA,OAAAN,KAAAjQ,QAAAiR,OAAAjR,QAAAiR,OACAZ,IAAAQ,iBAAA,SAAAhB,mBAEA7P,QAAAwO,SAAAxO,QAAAuO,QAAAvO,QAAAyO,UACA4B,IAAAG,mBAAA,WACA,GAAA,IAAAH,IAAAI,WAAA,CAIA,IAAAC,eAAA,MAAAL,IAAAM,OACAvC,iBAAAC,IAAArO,QAAA0Q,eAAAL,IAAAO,iBAIA,GAAA5Q,QAAAkR,gBAAAlR,QAAAkR,eAAAvX,OAAA,EACA,IAAAC,EAAA,EAAAA,EAAAoG,QAAAkR,eAAAvX,OAAAC,GAAA,EACAyW,IAAAQ,iBAAA7Q,QAAAkR,eAAAtX,GAAA6C,KAAAuD,QAAAkR,eAAAtX,GAAAP,OAIA,GAAA2G,QAAAd,KAAA,CACA,IAAAA,KAAA,KAGAA,KADAc,QAAAmR,gBACAnR,QAAAd,KAEAkS,KAAAC,UAAArR,QAAAd,MAIA,IACAmR,IAAAS,KAAA5R,MACA,MAAArD,KACAuS,iBAAAC,IAAArO,SAAA,EAAAnE,WAIA,IACAwU,IAAAS,OACA,MAAAjV,KACAuS,iBAAAC,IAAArO,SAAA,EAAAnE,QAsLAyV,QA9KA,SAAAtR,SAEA,IAAAA,SACA,iBAAAA,UACAA,QAAAiQ,KACA,iBAAAjQ,QAAAiQ,MACAjQ,QAAA9E,MACA,iBAAA8E,QAAA9E,KACA,MAAA,IAAAqW,MAAA,2BAEA,IAAAlB,IAAA,IAAAC,eACA,GAAAtQ,QAAAgR,MAAA,CACA,IAAAQ,eAAA5D,cAAA6D,MAAA,SAAAC,GACA,OAAAA,EAAAzB,MAAAjQ,QAAAiQ,OAGAuB,iBACAA,eAAAnB,IAAAW,QACApD,cAAAe,OAAA6C,eAAAvW,QAAAuW,eAAA,KAIA,IAAAG,gBAAA,CACA1B,IAAAjQ,QAAAiQ,IACA/U,KAAA8E,QAAA9E,KACAmV,KAgDA,OA7CAzC,cAAAnG,KAAAkK,iBAEAtB,IAAAE,KAAAvQ,QAAA9E,KAAA0W,cAAA5R,QAAAiQ,KAAA,GAGA,mBAAAjQ,QAAAwO,SACA,mBAAAxO,QAAAyO,QACA,mBAAAzO,QAAAuO,SACA8B,IAAAG,mBAAA,WACA,GAAA,IAAAH,IAAAI,WAAA,CAIA,IAAAoB,SAFAjE,cAAAe,OAAAf,cAAA3S,QAAA0W,iBAAA,GAIA,IACAE,SAAAT,KAAAU,MAAAzB,IAAAO,cACA,MAAAmB,GACAF,SAAAxB,IAAAO,aAGA,MAAAP,IAAAM,QAAA,mBAAA3Q,QAAAwO,QACAxO,QAAAwO,QAAAqD,UACA,mBAAA7R,QAAAyO,QACAzO,QAAAyO,OAAAoD,UAEA,mBAAA7R,QAAAuO,QACAvO,QAAAuO,OAAAsD,aAKA,QAAA7R,QAAA9E,KAAA0W,eAAA5R,QAAAd,MAAA,iBAAAc,QAAAd,MACAmR,IAAAQ,iBAAA,eAAA,oBAGAR,IAAAQ,iBAAA,mBAAA,kBACAR,IAAAQ,iBAAA,SAAAhB,kBAEAQ,IAAAS,KAAA9Q,QAAAd,MAAA,iBAAAc,QAAAd,KACAkS,KAAAC,UAAArR,QAAAd,MACAc,QAAAd,KACAc,QAAAd,UACA,GAEAmR,KAsGA2B,uBAnEA,SAAA/B,KACA,IAAAgC,QAAAlE,SAAA/K,MAAA,GAAA,GAMA,OALAiP,SAAAhC,IAAAhV,QAAAgX,UAAA,GAAAhC,IAAAhV,QAAAiT,YAAA,EACA+B,IAAAA,IAAAvT,QAAAuV,QAAA/D,YACA+B,IAAAhV,QAAAiT,YAAA,IACA+B,IAAA/B,WAAA+B,KAEAA,KA6DAiC,qBArCA,SAAAzC,iBAGA,GAAAA,gBAAA,CACA,GAAA7Q,OAAA6L,QAMA,OAAA+E,oBAAAC,gBARA,KAIA0C,QAAA,CAAA,cAAA,SAAAC,WACA,OAAA5C,oBAAAC,gBALA,QAWA,OAAAA,qBA2BA9Y,OAAA,4BAAA,IAAA,WCnVA,IAAA+R,uBAAA,CACAC,WAAA,+GACA0J,2BAAA,sDACAxJ,wBAAA,2BACAC,8BAAA,YACAC,6BAAA,IAcA,MAAA,CACAI,yBAZA,WACA,OAAAvK,OAAAC,OACAD,OAAAC,OAAA,GAAA6J,wBAEA,IASAU,eANA,SAAAC,WACA,OAAAX,uBAAAW,gBCdA1S,OAAA,sBAAA,CAAA,aAAA,8BAAA,SAAA2b,WAAAC,4BACA,WACA,aACA,IAAAhJ,6BAQA,SAAAiJ,YAAAC,aACAA,YAAA3Q,SACA2Q,YAAAA,YAAA3Q,QAGA2Q,cACAA,YAAAtb,MAGA,IAAA8Y,IAAApV,SAAAsT,SAAA,KAAAtT,SAAA6X,SAAAD,YAAAxN,aAAA,YACAqN,WAAAtC,WAAAC,IAAA,KAAA,KACA,CACAgB,OAAA,EACAzC,QAAA,SAAAqD,UACA,IAAAc,iBAAA5Z,SAAAmK,cAAAC,yBAAA0O,UACAY,YAAAjP,YAAAmP,sBAWA,WACA,IAAAC,aAAA,GAAA5P,MAAAC,KAAAlK,SAAAtB,iBAAA8a,0BAAApJ,2BAAAkJ,6BACA,GAAAO,aAAAjZ,OAAA,GAAAO,OAAAkQ,qBAAA,CACA,IAAAE,OAAA,CACAC,WAAAgI,0BAAApJ,2BAAAL,8BACA0B,UAAA+H,0BAAApJ,2BAAAJ,8BAEAQ,6BAAA,IAAAa,sBAAA,SAAAK,SAEA,IADA,IAAAC,MACAC,aAAA,EAAAA,aAAAF,QAAA9Q,OAAAgR,eAEA,IADAD,MAAAD,QAAAE,eACAC,kBAAA,GAAAF,MAAAG,eAAA,CACA,IAAA4H,YAAA/H,MAAA5I,OACA0Q,YAAAC,aACAlJ,6BAAAuB,UAAA2H,gBAGAnI,QAEA,IAAA,IAAAS,iBAAA,EAAAA,iBAAA6H,aAAAjZ,OAAAoR,mBAEAxB,6BAAAvD,QAAA4M,aAAA7H,oBAWAE,GApEA,MA0EAkH,QAAA,CAAA,eAAA,SAAAG,YC7EAA,WAAAtC,WAAA,wCAAA,KAAA,KAAA,CACAiB,OAAA,EACAzC,QAAA,SAAAqD,UACAA,SAAAT,KAAAU,MAAAD,UAEA,IAAAgB,aAAA9Z,SAAA1B,cAAA,2BACAyb,WAAA/Z,SAAA1B,cAAA,+BACA0b,SAAAha,SAAA1B,cAAA,6BACA2b,WAAAja,SAAA1B,cAAA,+BAEAyb,WAAAlM,SAAA,GAAAqM,YAAApB,SAAAqB,WACAH,SAAAnM,SAAA,GAAAqM,YAAApB,SAAAsB,SACAH,WAAApM,SAAA,GAAAqM,YAAApB,SAAAuB,WACAP,aAAAI,YAAApB,SAAAwB,UACAR,aAAA7W,MAAAC,QAAA,QAEA4V,SAAAyB,eACAP,SAAAjY,KAAA+W,SAAA0B,OACAT,WAAAhY,KAAA+W,SAAA2B,SACAR,WAAAlY,KAAA+W,SAAA4B,sBAKA9c,OAAA,wBAAA,eClBA,SAAA6I,QACA,aAEAA,OAAAkU,cAAAlU,OAAAkU,eAAA,GACA,MAAAC,gCAAAnU,OAAAkU,cAAAE,wBAEAC,kBAAA9a,SAAA1B,cADA,uCAEAyc,YAAAD,kBAAA3W,QAAA6W,yBAEA,IAAAF,oBAAAC,YACA,OAAA,KAsBA,SAAAF,2BAQAA,wBAAAI,aAAA,WACA,MAAAC,mBAAA,yBAAAH,eACAI,cAAAnb,SAAA1B,cAAA4c,oBAEAC,iBA3BA,WACA,MAAAC,WAAA3U,OAAA3E,SAAAC,KAEAmV,IAAA,IAAAmE,IAAAD,YACApX,OAAA,IAAAsX,gBAAApE,IAAAqE,QACAvX,OAAA4K,OAAA,iBACAsI,IAAAqE,OAAAvX,OAAAwX,WACA,MAAAC,OAAAvE,IAAAsE,WAEA/U,OAAAiV,QAAAC,UAAA,GAAA,KAAAF,QAmBAG,GACAT,cAAAU,UASAhB,wBAAAiB,WAAA,WAEA,OADArV,OAAAkU,cAAAE,wBAAAD,gCACAC,yBAGApU,OAAAkU,cAAAE,wBAAAA,wBA5DA,CA+DA1Z,QAEAvD,OAAA,2BAAA,eAEA,SAAAme,KC7DA,aAOA,IAAAC,IAAAD,IAAAE,uBACAF,IAAAG,6BACAH,IAAAI,0BACAJ,IAAAK,yBACA,SAAAC,IAAA,OAAAnN,WAAAmN,GAAA,KAOA,SAAAC,UACAle,KACAme,MAAA,GADAne,KAEAoe,OAAA,GAFApe,KAGA4d,IAAAA,IAAAtc,KAAAqc,KAuHA,SAAAU,cAAAC,SACAA,QAAAC,YACAD,QAAAC,WAAA,EACAD,QAAAV,IAAAY,MAAAld,KAAA,KAAAgd,WAaA,SAAAE,MAAAF,SACA,IAEAG,MAFAL,OAAAE,QAAAF,OACAD,MAAAG,QAAAH,MAGA,IACAG,QAAAI,SAAAP,OACAG,QAAAI,SAAAN,QACA,MAAAxD,GAAA6D,MAAA7D,EASA,GAPA0D,QAAAC,WAAA,GAGAJ,MAAA3b,QAAA4b,OAAA5b,SACA6b,cAAAC,SAGAG,MAAA,CACA,IAAAH,QAAAK,MAGA,MAAAF,MAFAH,QAAAK,MAAAF,QAcA,SAAApc,OAAAuc,MAAAxS,MACA,IAAAjH,MAAAyZ,MAAA9a,QAAAsI,MACA,SAAAjH,SAAAyZ,MAAApH,OAAArS,MAAA,GAvKA+Y,QAAA5b,UAAA,CACAuc,YAAAX,QAUAQ,SAAA,SAAAI,OACA,IAAA,IAAAC,KAAAA,KAAAD,MAAAE,SAAAD,QAWAE,QAAA,SAAA1Q,GAAA2Q,KACA,IAAAH,KAAAG,IAAA3Q,GAAAjN,KAAA4d,KAAA3Q,GAGA,OAFAvO,KAAAme,MAAA7N,KAAAyO,MACAV,cAAAre,MACA+e,MAYAI,OAAA,SAAA5Q,GAAA2Q,KACA,IAAAH,KAAAG,IAAA3Q,GAAAjN,KAAA4d,KAAA3Q,GAGA,OAFAvO,KAAAoe,OAAA9N,KAAAyO,MACAV,cAAAre,MACA+e,MAUAK,MAAA,SAAAL,MACA,OAAA1c,OAAArC,KAAAme,MAAAY,OAAA1c,OAAArC,KAAAoe,OAAAW,OAqCAM,OAAA,SAAAC,OACA,GAAA,iBAAAA,MAAA,MAAA,IAAAlF,MAAA,mBAEA,IAAAmF,MAAA9X,OAAA+X,OAAAxf,MAOA,OA4EA,SAAA2K,OAAA8U,QACA,IAAA,IAAA1Q,OAAA0Q,OACAA,OAAAC,eAAA3Q,OAAApE,OAAAoE,KAAA0Q,OAAA1Q,MApFA4Q,CAAAJ,MAAAD,OACAC,MAAAjB,QAAAte,KAGAuf,MAAAK,YAAAL,MAAAK,aAEAL,OAMAZ,MAAA,MA8EA,IAAAlW,QAAAkV,IAAAW,QAAAX,IAAAW,SAAA,IAAAJ,QAGA,mBAAA1e,QAAAA,OAAA,UAAA,IAAA,WAAA,OAAAiJ,WDxJA,CCyJA,oBAAA1F,OAAAA,OAAA/C,MACAR,OAAA,sBAAA,CAAA,YAAA8e,UCnOA,aAGA,MAAAuB,eAAAje,SAAA1B,cAAA,0BACA,IAAA2f,eACA,OAGA,MAAAC,UAAAD,eAAA3f,cAAA,uBACA6f,iBAAAF,eAAA3f,cAAA,oCACA8f,kBAAAH,eAAA3f,cAAA,qCAKA,IAAA+f,WAAA,EAGA,MAAAC,cAAA,KACA5B,QAAAW,SAAA,KACAgB,WAAAH,UAAAK,wBAAAC,UAKAC,8BAAA,KACA/B,QAAAW,SAAA,KACA,MAAAqB,oBAAA,IAAAR,UAAAS,WACAjC,QAAAa,QAAA,KACAW,UAAAjb,MAAA2G,WAAA8U,oBAhBA,OACA,MAgBAP,iBAAAlb,MAAA4Q,WAAA6K,oBAAA,UAAA,SAGAR,UAAAU,iBAAAL,wBAAAC,MAAAH,WACAD,kBAAAnb,MAAA4Q,WAAA,UAEAuK,kBAAAnb,MAAA4Q,WAAA,gBAOAgL,mBAAAC,SACApC,QAAAW,SAAA,KACA,MACA0B,iBADAb,UAAAS,WACAG,OAEApC,QAAAa,QAAA,KACAW,UAAAS,WAAAI,iBACAN,uCAMAN,iBAAA3e,iBAAA,SAAA,KACAqf,oBAAA,QAGAT,kBAAA5e,iBAAA,SAAA,KACAqf,mBAAA,QAIAX,UAAA1e,iBAAA,SAAAif,+BAGAtd,OAAA3B,iBAAA,UAAA,KACA8e,gBACAG,mCAIAH,gBACAG,mCAGArF,QAAA,CAAA,sBAAA,WAAA,gBAAA,sBAAA,uBAAA,0BAAA,wBC9EA,SAAArb,oBAAA6I,UACA,IAAA3I,KAAA+B,SAAA1B,cAAA,wBAEA,IAAAP,oBAAA,CACAE,KAAA+B,SAAAiV,eAAA,uBACAhW,gBAAAe,SAAA1B,cAAA,8BACAU,aAAAgB,SAAA1B,cAAA,wBACAE,gBAAAP,KAAAK,cAAA,uCACAc,wBAAA,EACAF,0BAAA,IAGA,IAAA0H,SAAA5G,SAAAiV,eAAA,wBAAA,CACAvN,SAAA,EACAE,UAAA,EACAN,aAAA,EACAiB,WAAAvI,SAAA1B,cAAA,gBACAgK,UAAAtI,SAAA1B,cAAA,iBAGA6C,OAAAwZ,cAAAE,yBACA1Z,OAAAwZ,cAAAE,wBAAAI,kBAGArd,OAAA,uBAAA,eCxBAwb,QAAA,CAAA","file":"../show-f782208b34.js","sourceRoot":"..","sourcesContent":["define('SearchFormComponent',[\"SearchAutocompleteComponent\"], function (SearchAutocompleteComponent) {\r\n SearchAutocompleteComponent.initAll();\r\n\r\n var SearchFormComponent = function (settings) {\r\n if (!settings || // There're no settings\r\n (typeof settings !== \"object\") || // Settings are not an object\r\n !(settings.form instanceof HTMLFormElement)) { // Settings don't have a 'form' prop defined\r\n throw new TypeError();\r\n }\r\n\r\n this.form = settings.form;\r\n this.autocomplete = settings.autocomplete || this.form.querySelector(\"[data-component=search-autocomplete]\").searchAutocompleteComponent;\r\n this.searchTextField = settings.searchTextField || this.form.querySelector(\"[name=SearchText]\");\r\n this.pageToHitFields = settings.pageToHitFields || this.form.querySelectorAll(\"[name=pageToHit]\");\r\n this.latitudeField = settings.latitudeField || this.form.querySelector(\"[name=latitude]\") || {};\r\n this.longitudeField = settings.longitudeField || this.form.querySelector(\"[name=longitude]\") || {};\r\n this.locationTypeField = settings.locationTypeField || this.form.querySelector(\"[name=locationType]\");\r\n this.itemIdField = settings.itemIdField || this.form.querySelector(\"[name=itemId]\");\r\n this.marketIdField = settings.marketIdField || this.form.querySelector(\"[name=marketId]\");\r\n this.submitButton = settings.submitButton || this.form.querySelector(\"[type=submit]\");\r\n this.validationError = settings.validationError || this.form.querySelector(\"[data-field-validation-error]\") || this.form.querySelector(\"#nhs_field_validation_error\");\r\n this.useAutocompleteForSubmit = !!settings.useAutocompleteForSubmit || this.form.hasAttribute(\"data-component-useAutocompleteForSubmit\");\r\n this.shouldAlwaysSubmitForm = settings.shouldAlwaysSubmitForm || false;\r\n this.useBaseUrl = settings.useBaseUrl || true;\r\n this.useBaseUrl = settings.useBaseUrl === undefined ? true : settings.useBaseUrl;\r\n\r\n if (this.submitButton) {\r\n this.submitButton.disabled = false;\r\n }\r\n\r\n //If there was an external specified submit button\r\n if (settings.submitButton) {\r\n settings.submitButton.addEventListener(\"click\", this._formSubmitHandler.bind(this));\r\n }\r\n\r\n if (this.useAutocompleteForSubmit) {\r\n this.autocomplete.onSelect = this._formSubmitHandler.bind(this);\r\n }\r\n\r\n if (this.searchTextField) {\r\n this._setDataUserText();\r\n }\r\n\r\n this.form.addEventListener(\"submit\", this._formSubmitHandler.bind(this));\r\n\r\n if(this.searchTextField){\r\n this.searchTextField.parentElement.addEventListener('focusout', (event) => {\r\n const suggestionsContainer = document.querySelector('[data-typeahead-suggestions]');\r\n if (event.relatedTarget === suggestionsContainer) {\r\n return;\r\n }\r\n // close suggestions if the focus is moved to an outside element.\r\n if(event.relatedTarget){\r\n this.autocomplete.hideSuggestions();\r\n }\r\n\r\n // Include populated class\r\n const wrapper = this.searchTextField.closest('[data-typeahead-input-wrapper]');\r\n const hasValue = !!this.searchTextField.value;\r\n if (wrapper) {\r\n if (hasValue) {\r\n wrapper.classList.add('nhs-c-typeahead__container--populated');\r\n } else {\r\n wrapper.classList.remove('nhs-c-typeahead__container--populated');\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n SearchFormComponent.prototype._getPageToHit = function () {\r\n if (this.pageToHitFields.length === 1) {\r\n return this.pageToHitFields[0].value;\r\n }\r\n\r\n for (var i = 0; i < this.pageToHitFields.length; i++) {\r\n if (this.pageToHitFields[i].checked) {\r\n return this.pageToHitFields[i].value;\r\n }\r\n }\r\n return \"\";\r\n };\r\n\r\n SearchFormComponent.prototype._setPageToHitState = function (state) {\r\n for (var i = 0; i < this.pageToHitFields.length; i++) {\r\n this.pageToHitFields[i].disabled = state;\r\n }\r\n };\r\n\r\n /*\r\n * When current location option is selected, this function calculates the url for the search results page to visit,\r\n * and then: redirects the user to that calculated url.\r\n * This algorithm finds out the max latitude/longitude and min latitude/longitude to use in the search results url\r\n * based on the device capabilities like it's height, width and aspect ratio.\r\n */\r\n SearchFormComponent.prototype._redirectToCurrentLocationSearch = function () {\r\n const deviceHeight = window.innerHeight;\r\n const deviceWidth = window.innerWidth;\r\n /*\r\n * Convert the device width (in pixels) into the number of tiles.\r\n * Since there are 256 tiles horizontally at zoom level 9,\r\n * divide the device width by 256 to get the number of tiles across the width of the map.\r\n */\r\n const tilesAcrossWidth = deviceWidth / 256;\r\n /*\r\n * Calculate the horizontal span of the map in degrees. At zoom level 9,\r\n * each tile covers a specific range of longitudes.\r\n * You can calculate the width of a single tile in degrees by dividing\r\n * the total longitude range (360 degrees) by the number of tiles (256).\r\n */\r\n const degreesPerTile = 360 / 256;\r\n /*\r\n * Calculate the maximum and minimum longitude values based on the\r\n * center point and the number of tiles across the width of the map.\r\n */\r\n const maxLongitude = +this.longitudeField.value + (tilesAcrossWidth / 2) * degreesPerTile;\r\n const minLongitude = +this.longitudeField.value - (tilesAcrossWidth / 2) * degreesPerTile;\r\n /*\r\n * The latitude span depends on the aspect ratio of the map.\r\n * To calculate the maximum and minimum latitude values, you need to know the aspect\r\n * ratio of your map view (height divided by width). The latitude span is calculated\r\n * by multiplying the longitude span by the aspect ratio.\r\n */\r\n const aspectRatio = deviceHeight / deviceWidth;\r\n const maxLatitude = +this.latitudeField.value + (tilesAcrossWidth / 2) * degreesPerTile * aspectRatio;\r\n const minLatitude = +this.latitudeField.value - (tilesAcrossWidth / 2) * degreesPerTile * aspectRatio;\r\n this.form.querySelector('ul').setAttribute('hidden', '');\r\n window.location.href = `/communities/map?coordinates=${minLatitude},${minLongitude},${maxLatitude},${maxLongitude}`;\r\n };\r\n\r\n SearchFormComponent.prototype._setUpForLocationNameSearch = function () {\r\n // Change the form action\r\n if (this.form.action.indexOf(\"http://\") !== 0 && this.form.action.indexOf(\"https://\") !== 0) {\r\n this.form.action = \"/submittypeaheadsearch\";\r\n }\r\n\r\n // These fields should not be included in the request\r\n \r\n if(this.longitudeField){\r\n this.longitudeField.value = \"\";\r\n this.longitudeField.disabled = true;\r\n }\r\n\r\n if(this.latitudeField){\r\n this.latitudeField.value = \"\";\r\n this.latitudeField.disabled = true;\r\n }\r\n\r\n // These Fields must be included in the request \r\n this.searchTextField.disabled = false;\r\n this._setPageToHitState(false);\r\n\r\n if(this.locationTypeField){\r\n this.locationTypeField.value = this.autocomplete.value.type;\r\n this.locationTypeField.disabled = false;\r\n }\r\n \r\n if(this.itemIdField){\r\n this.itemIdField.value = this.autocomplete.value.id;\r\n this.itemIdField.disabled = false;\r\n }\r\n \r\n if(this.marketIdField){\r\n this.marketIdField.value = this.autocomplete.value.marketId;\r\n this.marketIdField.disabled = false;\r\n }\r\n };\r\n\r\n SearchFormComponent.prototype._getCurrentLocation = function () {\r\n // User wants to use current location but the Browser needs to ask for permission in order to access the user coords\r\n navigator.geolocation.getCurrentPosition((function (position) {\r\n this.latitudeField.value = position.coords.latitude;\r\n this.longitudeField.value = position.coords.longitude;\r\n this._formSubmitHandler(); // Once the user has accepted the pop up and we have filled the fields as needed, submit the form, to start over.\r\n }).bind(this), (function (err) {\r\n this._showSearchSubmitError(); // If the user did not accept the pop up so we are gonna show the error\r\n }).bind(this), { maximumAge: 0 });\r\n };\r\n\r\n SearchFormComponent.prototype._showSearchSubmitError = function () {\r\n if (this.validationError) {\r\n this.validationError.style.display = \"block\";\r\n this.form.classList.add('nhs-c-typeahead__form--error');\r\n this.autocomplete.hideSuggestions();\r\n this.autocomplete.removeCurrentLocation();\r\n }\r\n };\r\n\r\n SearchFormComponent.prototype._clearSearchSubmitError = function () {\r\n if (this.validationError) {\r\n this.validationError.style.display = \"none\";\r\n this.form.classList.remove('nhs-c-typeahead__form--error');\r\n }\r\n };\r\n\r\n SearchFormComponent.prototype._getRecentSearchValues = function () {\r\n this.autocomplete.update((function () {\r\n var index = -1;\r\n var clearSignsRegex = /,|\\./gi;\r\n for (var i = 0; i < this.autocomplete.suggestions.length; i++) {\r\n if (this.autocomplete.suggestions[i].name.replace(clearSignsRegex, \"\").toLowerCase() === this.searchTextField.value.replace(clearSignsRegex, \"\").toLowerCase().trim()) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (index > -1) {\r\n this.autocomplete.selectSuggestion(index);\r\n this._formSubmitHandler();\r\n } else {\r\n this._showSearchSubmitError();\r\n }\r\n\r\n }).bind(this));\r\n };\r\n\r\n /**\r\n * @private\r\n * _getParamsEvent: function to get the parameter for events to track in element\r\n */\r\n SearchFormComponent.prototype._getParamsEvent = function () {\r\n const params = {};\r\n const elements = this.form.querySelectorAll('[data-ga4-param]');\r\n for (let index = 0; index < elements.length; index++) {\r\n const element = elements[index];\r\n params[element.dataset.ga4Param] = element.value;\r\n }\r\n return params;\r\n };\r\n\r\n SearchFormComponent.prototype._formSubmitHandler = function (event) {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n const inputText = this.form.querySelector('input[type=\"search\"], [data-input-typeahead]');\r\n let textValue = inputText.value;\r\n if (inputText.dataset.userText != ''){\r\n textValue = inputText.dataset.userText;\r\n }\r\n const eventSegment = {\r\n event: inputText.id === \"HeaderSearchText\" || inputText.id === \"SearchText\" ? 'Search Term Selected' : \"Header Search Term Selected\",\r\n input_text: textValue,\r\n search_location: inputText.value,\r\n eventType: \"segmentEvent\"\r\n };\r\n\r\n const info = inputText.closest('[data-pandora-info-event]');\r\n const dataset = info && info.dataset;\r\n const eventPandora = dataset && {\r\n event: dataset.pandoraInfoEvent,\r\n pandoraCategory: dataset.pandoraInfoCategory,\r\n pandoraAction: dataset.pandoraInfoAction,\r\n pandoraLabel: inputText.value,\r\n eventType: \"PandoraEvent\"\r\n };\r\n\r\n const infoGa4 = inputText.closest('[data-ga4-info-event-name]');\r\n \r\n if(infoGa4 && this.searchTextField.value) {\r\n const paramsFromElements = this._getParamsEvent();\r\n const eventGa4 = {\r\n eventName: infoGa4.dataset.ga4InfoEventName,\r\n params: {\r\n search_value: inputText.value,\r\n click_target: infoGa4.dataset.ga4InfoEventClick_target\r\n \r\n },\r\n eventType: \"GA4Event\"\r\n };\r\n Object.assign(eventGa4.params, paramsFromElements);\r\n\r\n document.body.dispatchEvent(new CustomEvent(\"trackOnDemandEvent\", {\r\n detail: { data: eventGa4 }\r\n }));\r\n }\r\n\r\n document.body.dispatchEvent(new CustomEvent(\"trackOnDemandEvent\", {\r\n detail: { data: eventSegment }\r\n }));\r\n \r\n eventPandora && document.body.dispatchEvent(new CustomEvent(\"trackOnDemandEvent\", {\r\n detail: { data: eventPandora }\r\n }));\r\n \r\n\r\n if (this.autocomplete.isCurrentLocation && !this.latitudeField.value && !this.longitudeField.value) {\r\n this._getCurrentLocation();\r\n return;\r\n } else if (this.autocomplete.isCurrentLocation && this.latitudeField.value && this.longitudeField.value) {\r\n this._redirectToCurrentLocationSearch();\r\n return;\r\n } else if (this.shouldAlwaysSubmitForm && this.searchTextField.value) {\r\n this.form.submit();\r\n }else if (!!this.searchTextField.value && this.autocomplete && (!this.autocomplete.dependeciesRequested || this.autocomplete.value === null)) {\r\n this._getRecentSearchValues();\r\n return;\r\n } else if (this.autocomplete && this.autocomplete.value !== null) {\r\n this._setUpForLocationNameSearch();\r\n } else {\r\n this._showSearchSubmitError();\r\n return;\r\n }\r\n\r\n this._clearSearchSubmitError();\r\n this.form.submit();\r\n };\r\n\r\n SearchFormComponent.prototype._setDataUserText = function (event) {\r\n const searchTextInputs = document.querySelectorAll(\"[name=SearchText]\");\r\n for (var i = 0; i < searchTextInputs.length; i += 1){\r\n searchTextInputs[i].oninput = function () {\r\n this.dataset.userText = this.value;\r\n };\r\n }\r\n };\r\n\r\n return SearchFormComponent;\r\n});\n","//TODO: FIX ISSUE WHEN THERE ARE TOO MANY ITEMS\r\n(function (global, factory) {\r\n \"use strict\";\r\n if (\"function\" === typeof define && define.amd) {\r\n // If AMD is supported and the global object (window) in case any JS module is expecting\r\n // the Carousel to exists on the window object.\r\n /**\r\n * @module\r\n */\r\n define('Carousel',[], function () {\r\n return (global.Carousel = factory(global));\r\n });\r\n } else if (\"object\" === typeof exports) {\r\n // If supports for Common JS is available export the module\r\n // and pass is value to the global (window) object in case non Common JS code\r\n // is expected to work with this Carousel Module.\r\n module.exports = (global.Carousel = factory(global));\r\n } else {\r\n // If not support for AMD or Common JS is available register the module in the global scope.\r\n global.Carousel = factory(global);\r\n }\r\n})(\"undefined\" !== typeof window ? window : {}, function (root) {\r\n\r\n /**\r\n * Creates a Carousel instance\r\n * @constructor\r\n * @param {HTMLElement} container Carousel container\r\n * @param {*} options Carousel options\r\n */\r\n var Carousel = function (container, options) {\r\n if (!(container instanceof HTMLElement)) {\r\n return;\r\n }\r\n if (!options || typeof options !== \"object\") {\r\n options = {};\r\n }\r\n\r\n /**\r\n * Current element index\r\n * @property {Number} index\r\n */\r\n this.index = 0;\r\n\r\n /**\r\n * Carousel container element\r\n * @property {HTMLElement} container\r\n */\r\n this.container = container;\r\n container.carousel = this;\r\n\r\n /**\r\n * @property {HTMLElement} elementsContainer Elements container\r\n */\r\n this.elementsContainer = null;\r\n\r\n /**\r\n * Carousel items\r\n * @property {HTMLElement[]} items\r\n */\r\n this.items = [];\r\n\r\n /**\r\n * Amount of visible items\r\n * @property {Number} visibleItems\r\n */\r\n this.visibleItems = options.visibleItems;\r\n\r\n /**\r\n * Amount of visible items when the carousel is in fullscreen mode\r\n * @property {Number} fullscreenVisibleItems\r\n */\r\n this.fullscreenVisibleItems = options.fullscreenVisibleItems;\r\n\r\n /**\r\n * On change handlers\r\n * @property {Set.} onChangeHandlers\r\n * @private\r\n */\r\n this.onChangeHandlers = window.Set ? new Set() : [];\r\n\r\n /**\r\n * Carousel default step size\r\n * @property {Number} stepSize\r\n */\r\n this.stepSize = options.stepSize || 1;\r\n\r\n /**\r\n * Carousel full screen step size\r\n * @property {Number} fullScreenStepSize\r\n */\r\n this.fullScreenStepSize = options.fullScreenStepSize;\r\n\r\n /**\r\n * Carousel controls\r\n * @property {*} controls\r\n */\r\n this.controls = null;\r\n\r\n /**\r\n * Carousel pager container\r\n * @property {HTMLElement} pagerContainer\r\n */\r\n this.pagerContainer = null;\r\n\r\n /**\r\n * Touch taken from the user\r\n * @property {*} _touchTaken\r\n * @private \r\n */\r\n this._touchTaken = null;\r\n\r\n this.onEnterFullScreenHandlers = window.Set ? new Set() : [];\r\n\r\n this.onExitFullScreenHandlers = window.Set ? new Set() : [];\r\n\r\n /**\r\n * Before full screen elements height\r\n * @property {*} _beforeFullScreenElementsHeight\r\n * @private \r\n */\r\n this._beforeFullScreenElementsHeight = null;\r\n\r\n /**\r\n * Before full screen polyfill container parent\r\n * @property {HTMLElement} _beforeFullScreenContainerParent\r\n * @private\r\n */\r\n this._beforeFullScreenContainerParent = null;\r\n\r\n /**\r\n * Full screen polyfill container\r\n * @property {HTMLElement} _fullScreenPolyfillContainer\r\n * @private\r\n */\r\n this._fullScreenPolyfillContainer = null;\r\n\r\n this._setUp();\r\n\r\n if (options.controls) {\r\n this.controls = {};\r\n this._setUpControls(options.leftArrow, options.rightArrow);\r\n }\r\n\r\n\r\n if (options.pager) {\r\n this.pager = options.pager;\r\n if (options.pager.infinitePager) {\r\n this._setUpInfinitePager();\r\n } else {\r\n this._setUpPager();\r\n }\r\n }\r\n\r\n var instance = this;\r\n if (options.clickForFullScreen) {\r\n\r\n this.container.addEventListener(\"click\", function (event) {\r\n var targetItem = event.target.classList.contains(\"nhs_carousel_element\") ? event.target : event.target.closest(\".nhs_carousel_element\");\r\n if (!targetItem) return;\r\n var index = instance.items.indexOf(targetItem);\r\n instance.fullScreen();\r\n if (index !== instance.index) {\r\n instance.goTo(index);\r\n }\r\n });\r\n }\r\n\r\n this.addOnChangeListener(function () {\r\n for (var i = instance.index; i <= instance.index + instance.visibleItems + 1; i++) {\r\n if (instance.items[i]) {\r\n instance.items[i].classList.add(\"nhs_carousel_element_visible\");\r\n }\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * Sets Up the carousel\r\n * @private\r\n * @method\r\n */\r\n Carousel.prototype._setUp = function () {\r\n this.updateContentAndLayout();\r\n this._setUpTouchEvents();\r\n this._setUpWindowEvents();\r\n };\r\n\r\n /**\r\n * Gets the slides width\r\n * @private\r\n * @method\r\n * @returns {Number} Returns the slides width\r\n */\r\n Carousel.prototype._getSlidesWidth = function () {\r\n var sample = this.items[0];\r\n var width = sample.clientWidth || this.elementsContainer.clientWidth || this.container.clientWidth;\r\n var marginLeft = parseInt(window.getComputedStyle(sample).marginLeft) || 0;\r\n var marginRight = parseInt(window.getComputedStyle(sample).marginRight) || 0;\r\n return width + marginLeft + marginRight;\r\n };\r\n\r\n /**\r\n * Updates the carousel content\r\n * @method\r\n */\r\n Carousel.prototype.updateContent = function () {\r\n var instance = this;\r\n var carouselElements = this.container.querySelectorAll(\".nhs_carousel_element\");\r\n this.items = Array.prototype.slice.call(carouselElements);\r\n if (!this.elementsContainer) {\r\n this.elementsContainer = document.createRange().createContextualFragment(\"\").querySelector(\"*\");\r\n this.elementsContainer.style.width = this.container.style.width.indexOf(\"%\") >= 0 ? \"100%\" : this.container.style.width; //If the width of the container is on percentage, we need to make it a 100% so that the carousel fits the container.\r\n this.elementsContainer.style.height = this.container.style.height.indexOf(\"%\") >= 0 ? \"100%\" : this.container.style.height; //If the height of the container is on percentage, we need to make it a 100% so that the carousel fits the container.\r\n this.container.style.height = 'auto';\r\n this.items.forEach(function (item) {\r\n instance.elementsContainer.appendChild(item);\r\n });\r\n this.container.insertAdjacentElement(\"afterbegin\", this.elementsContainer);\r\n }\r\n };\r\n\r\n\r\n Carousel.prototype._getTransform = function (x) {\r\n return \"translate3d(\" + x + \"px, \" + (this.isFullScreen() ? \"-50%\" : \"0px\") + \", 0)\";\r\n };\r\n\r\n /**\r\n * Updates the content layout \r\n * @method\r\n */\r\n Carousel.prototype.updateContentLayout = function () {\r\n var sample = this.items[0];\r\n var _index = this.index;\r\n this.index = 0;\r\n var space = 0;\r\n var fullScreenHeight;\r\n if (sample) {\r\n if (!this.isFullScreen()) {\r\n var visibleAreaWidth = this.elementsContainer.clientWidth || this.container.clientWidth;\r\n this.visibleItems = !isNaN(this.visibleItems) ? this.visibleItems : Math.round(visibleAreaWidth / this._getSlidesWidth()) || 1;\r\n\r\n if (this._beforeFullScreenElementsHeight === null) {\r\n this._beforeFullScreenElementsHeight = sample.style.height;\r\n this._beforeFullScreenElementsLiteralHeight = sample.clientHeight;\r\n this._beforeFullScreenContainerLiteralHeight = (this.elementsContainer.clientHeight || this.container.clientHeight);\r\n } else {\r\n this._beforeFullScreenElementsHeight = this._beforeFullScreenElementsHeight.includes(\"%\") ? sample.style.height : this._beforeFullScreenElementsHeight;\r\n }\r\n\r\n } else if (this._beforeFullScreenElementsHeight) {\r\n fullScreenHeight = this._beforeFullScreenElementsHeight.includes(\"%\") ? this._beforeFullScreenElementsHeight : ((this._beforeFullScreenContainerLiteralHeight / this._beforeFullScreenElementsLiteralHeight) * 100) + \"%\";\r\n }\r\n\r\n for (var i = 0; i < this.items.length; i++) {\r\n var item = this.items[i];\r\n item.setAttribute(\"data-x\", space);\r\n item.style.transform = this._getTransform(space);\r\n item.style.width = (100 / (!this.isFullScreen() ? this.visibleItems : this.fullscreenVisibleItems || this.visibleItems)) + \"%\";\r\n item.style.height = fullScreenHeight ? fullScreenHeight : this._beforeFullScreenElementsHeight;\r\n space += this._getSlidesWidth();\r\n }\r\n\r\n if (!this.isFullScreen()) {\r\n this._beforeFullScreenElementsLiteralHeight = sample.clientHeight;\r\n this._beforeFullScreenContainerLiteralHeight = (this.elementsContainer.clientHeight || this.container.clientHeight);\r\n }\r\n }\r\n this.goTo(_index);\r\n };\r\n\r\n /**\r\n * Updates the content of the carousel and the layout\r\n * @method\r\n */\r\n Carousel.prototype.updateContentAndLayout = function () {\r\n this.updateContent();\r\n this.updateContentLayout();\r\n };\r\n\r\n /**\r\n * Sets up all the carousel touch events\r\n * @private\r\n * @method\r\n */\r\n Carousel.prototype._setUpTouchEvents = function () {\r\n var instance = this;\r\n\r\n var registerTouch = function (event) {\r\n if (instance._touchTaken) return;\r\n\r\n var touch = event.touches[0] || event.changedTouches[0];\r\n instance._touchTaken = {\r\n id: touch.identifier,\r\n x: touch.screenX,\r\n initialX: touch.screenX\r\n };\r\n\r\n instance.container.classList.add(\"touched\");\r\n for (var i = 0; i < instance.items.length; i++) {\r\n var item = instance.items[i];\r\n item.setAttribute(\"data-restoreX\", item.getAttribute(\"data-x\"));\r\n }\r\n };\r\n\r\n this.elementsContainer.addEventListener(\"touchstart\", registerTouch, { passive: true });\r\n\r\n this.elementsContainer.addEventListener(\"touchmove\", function (event) {\r\n if (!instance._touchTaken) {\r\n return registerTouch(event);\r\n }\r\n\r\n var touch = event.touches[0] || event.changedTouches[0];\r\n\r\n if (touch.identifier !== instance._touchTaken.id) return;\r\n\r\n var space = -(instance._touchTaken.x - touch.screenX);\r\n instance._touchTaken.x = touch.screenX;\r\n for (var i = 0; i < instance.items.length; i++) {\r\n var item = instance.items[i];\r\n var currentX = parseInt(item.getAttribute('data-x'));\r\n item.setAttribute('data-x', space + currentX);\r\n item.style.transform = instance._getTransform(item.getAttribute('data-x'));\r\n }\r\n }, { passive: true });\r\n\r\n this.elementsContainer.addEventListener(\"touchend\", function (event) {\r\n var touch = event.touches[0] || event.changedTouches[0];\r\n\r\n if (!instance._touchTaken || touch.identifier !== instance._touchTaken.id)\r\n return;\r\n\r\n var space = -(instance._touchTaken.initialX - instance._touchTaken.x);\r\n var width = instance._getSlidesWidth();\r\n\r\n instance.container.classList.remove(\"touched\");\r\n instance._touchTaken = null;\r\n\r\n var i;\r\n var item;\r\n if (\r\n Math.abs(space) > width * 0.25 &&\r\n space !== 0 &&\r\n !(\r\n (space < 0 && instance.index === instance.items.length - 1) ||\r\n (space > 0 && !instance.index)\r\n )\r\n ) {\r\n var steps = Math.floor(Math.abs(space) / width);\r\n var stepSize = (instance.isFullScreen() ? instance.fullScreenStepSize || instance.stepSize : instance.stepSize);\r\n steps = !steps ? 1 : steps;\r\n steps = steps < stepSize ? stepSize : steps;\r\n if (space > 0 && instance.index - steps < 0) {\r\n steps += instance.index - steps;\r\n } else if (space < 0 && instance.index + steps > instance.items.length - 1) {\r\n steps -= instance.index + steps - (instance.items.length - 1);\r\n }\r\n instance.index += space < 0 ? steps : -steps;\r\n if (instance.pager && instance.pager.infinitePager) {\r\n instance.previousBulletIndex = space < 0 ? instance.index - 1 : instance.index + 1;\r\n }\r\n for (i = 0; i < instance.items.length; i++) {\r\n item = instance.items[i];\r\n var newX = parseInt(item.getAttribute(\"data-restoreX\")) + (space < 0 ? -steps : steps) * width;\r\n item.setAttribute(\"data-x\", newX);\r\n item.style.transform = instance._getTransform(newX);\r\n item.removeAttribute(\"data-restore-x\");\r\n }\r\n instance.onChangeHandlers.forEach(function (fn) {\r\n fn();\r\n });\r\n } else {\r\n for (i = 0; i < instance.items.length; i++) {\r\n item = instance.items[i];\r\n var restoreX = parseInt(item.getAttribute('data-restoreX'));\r\n item.setAttribute('data-x', restoreX);\r\n item.style.transform = instance._getTransform(restoreX);\r\n item.removeAttribute(\"data-restore-x\");\r\n }\r\n }\r\n\r\n //check if infinite pagination\r\n if (instance.pager && instance.pager.infinitePager) {\r\n instance._updateInfinitePager();\r\n } else {\r\n instance._updateControlsAndPager();\r\n }\r\n\r\n });\r\n };\r\n\r\n /**\r\n * Sets up the carousel window events\r\n * @method\r\n * @private\r\n */\r\n Carousel.prototype._setUpWindowEvents = function () {\r\n var instance = this;\r\n if (typeof MutationObserver !== 'undefined') {\r\n var mutationObserver = new MutationObserver(function () {\r\n instance.updateContentAndLayout();\r\n instance.updatePagers();\r\n });\r\n mutationObserver.observe(this.elementsContainer,\r\n {\r\n childList: true\r\n });\r\n }\r\n window.addEventListener(\"resize\", function () {\r\n instance.updateContentLayout();\r\n });\r\n window.addEventListener(\"orientationchange\", function () {\r\n instance.updateContentLayout();\r\n });\r\n window.addEventListener(\"keydown\", function (event) {\r\n switch (event.key) {\r\n case \"ArrowRight\":\r\n instance.goNext();\r\n break;\r\n case \"ArrowLeft\":\r\n instance.goBack();\r\n }\r\n });\r\n document.addEventListener(\"fullscreenchange\", function () {\r\n if (!instance.isFullScreen()) return;\r\n if (document.fullscreenElement !== instance.container) {\r\n instance.container.classList.remove(\"fullscreen\");\r\n }\r\n instance.updateContentLayout();\r\n });\r\n };\r\n\r\n /**\r\n * Creates an li HTML to render the bullets on the pager.\r\n * @method\r\n */\r\n Carousel.prototype.createInfinitePagerElements = function () {\r\n if (!this.pagerContainer) return;\r\n var pagerElement; //Will contain every pager bullet created.\r\n var infinitePagerDocumentFragment = document.createDocumentFragment();\r\n this.pagerContainer.innerHTML = \"\";\r\n for (var i = 0; i < this.items.length; i++) {\r\n pagerElement = document.createElement(\"li\");\r\n pagerElement.setAttribute(\"data-index\", i);\r\n pagerElement.classList.add(\"nhs_carousel_pager_item\");\r\n pagerElement.classList.add(\"infinite_item\");\r\n infinitePagerDocumentFragment.appendChild(pagerElement);\r\n }\r\n if (infinitePagerDocumentFragment.children && infinitePagerDocumentFragment.children.length > 0 && infinitePagerDocumentFragment.children.length >= this.index) { //Only if there are bullets and if the index exists in those bullets.\r\n infinitePagerDocumentFragment.children[this.index].classList.add(\"active\"); //Adding the current index bullet to be highlighted.\r\n }\r\n this.pagerContainer.appendChild(infinitePagerDocumentFragment);\r\n };\r\n\r\n /**\r\n * Updates the pagers\r\n * @method\r\n */\r\n Carousel.prototype.updatePagers = function () {\r\n if (!this.pagerContainer) return;\r\n this.pagerContainer.innerHTML = \"\";\r\n for (var i = 0; i < this.items.length; i++) {\r\n this.pagerContainer.appendChild(document.createRange().createContextualFragment(\"\"));\r\n }\r\n };\r\n\r\n /**\r\n * Sets up the pager\r\n * @method\r\n */\r\n Carousel.prototype._setUpPager = function () {\r\n var instance = this;\r\n this.pagerContainer = document.createRange().createContextualFragment(\"\").querySelector(\"*\");\r\n this.updatePagers();\r\n this.pagerContainer.addEventListener(\"click\", function (event) {\r\n var pagerItem = event.target;\r\n if (!pagerItem.getAttribute('data-index')) return;\r\n instance.goTo(parseInt(pagerItem.getAttribute('data-index')));\r\n });\r\n\r\n this.container.appendChild(this.pagerContainer);\r\n };\r\n\r\n /**\r\n * The infinite pager will show always 3 bullets and as soon as the user moves around the carousel, we will keep the point on the center, showing 5 bullets and if they reach the end\r\n * or the beginning, then we move the bullet either to the right or to the left.\r\n * @method\r\n */\r\n Carousel.prototype._setUpInfinitePager = function () {\r\n var instance = this;\r\n instance.pagerContainer = document.createElement(\"ul\");\r\n instance.pagerContainer.classList.add(\"nhs_carousel_pager_container\");\r\n instance.pagerContainer.classList.add(\"infinite\");\r\n instance.createInfinitePagerElements();\r\n instance.pagerContainer.addEventListener(\"click\", function (event) {\r\n var pagerItem = event.target;\r\n if (!pagerItem.getAttribute('data-index')) return;\r\n instance.goTo(parseInt(pagerItem.getAttribute('data-index')));\r\n });\r\n instance.container.appendChild(instance.pagerContainer);\r\n instance.pager.percentageToMoveOnXVector = instance.pager.percentageToMoveOnXVector ? instance.pager.percentageToMoveOnXVector : 185;\r\n };\r\n\r\n /**\r\n * Updates the constrols visibility\r\n * @private\r\n * @method\r\n */\r\n Carousel.prototype._updateControlsVisibility = function () {\r\n var instance = this;\r\n if (!instance.controls) {\r\n return;\r\n }\r\n if (instance.index === 0) {\r\n instance.controls.leftArrow.style.display = \"none\";\r\n } else {\r\n instance.controls.leftArrow.style.display = \"block\";\r\n }\r\n\r\n if (instance.index === instance.items.length - 1) {\r\n instance.controls.rightArrow.style.display = \"none\";\r\n } else {\r\n instance.controls.rightArrow.style.display = \"block\";\r\n }\r\n };\r\n\r\n /**\r\n * Updates the active pager\r\n * @private\r\n * @method\r\n */\r\n Carousel.prototype._updateActivePager = function () {\r\n if (!this.pagerContainer) return;\r\n\r\n var active = this.pagerContainer.querySelector(\".nhs_carousel_pager_item.active\");\r\n if (active) {\r\n active.classList.remove(\"active\");\r\n }\r\n\r\n active = this.pagerContainer.querySelector(\".nhs_carousel_pager_item[data-index='\" + this.index + \"']\");\r\n if (active) {\r\n active.classList.add(\"active\");\r\n }\r\n };\r\n\r\n /**Whenever we swipe, we need to update and move the classes to the next elements in pager and the translate3d property of each.*/\r\n Carousel.prototype._updateInfinitePager = function () {\r\n if (!this.pagerContainer) return;\r\n var instance = this;\r\n var pagerElements = instance.pagerContainer.querySelectorAll(\".infinite_item\");\r\n\r\n //Remove current bullet class of active bullet.\r\n var previousSelectedElement = instance.pagerContainer.querySelector(\".nhs_carousel_pager_item.active\");\r\n if (previousSelectedElement) {\r\n previousSelectedElement.classList.remove(\"active\");\r\n }\r\n\r\n //Moving the bullet class of active bullet to the current selected index.\r\n var active = this.pagerContainer.querySelector(\".nhs_carousel_pager_item[data-index='\" + this.index + \"']\");\r\n if (active) {\r\n active.classList.add(\"active\");\r\n }\r\n\r\n var transformXMoveValue = instance.pager.percentageToMoveOnXVector * (instance.index - 1); //Set the value that we need to move the bullets. \r\n transformXMoveValue = instance.previousIndex > instance.index ? transformXMoveValue : transformXMoveValue * -1; //It must be either positive or negative value depending on we swiping left or right.\r\n if (this.index > 0 && (this.previousBulletIndex !== 0) && (instance.items.length - 1 !== this.index) && pagerElements.length > 0) {//Check if we are hitting the end or we are at the beggining, we don't need to move the bullets.\r\n for (var counter = 0; counter < pagerElements.length; counter++) {\r\n pagerElements[counter].style.transform = \"translate3d(\" + transformXMoveValue + \"%, 0, 0)\";\r\n }\r\n }\r\n\r\n this._updateControlsVisibility();\r\n }\r\n\r\n /**\r\n * Updates the controls visibility and the pagers\r\n * @private\r\n * @method\r\n */\r\n Carousel.prototype._updateControlsAndPager = function () {\r\n this._updateControlsVisibility();\r\n if (this.pager && this.pager.infinitePager) {\r\n this._updateInfinitePager();\r\n } else {\r\n this._updateActivePager();\r\n }\r\n\r\n };\r\n\r\n /**\r\n * Sets up carousel controls\r\n * @private\r\n * @method\r\n * @param {HTMLElement} leftArrow Left arrow element\r\n * @param {HTMLElement} rightArrow Right arrow element\r\n */\r\n Carousel.prototype._setUpControls = function (leftArrow, rightArrow) {\r\n var instance = this;\r\n if (leftArrow) {\r\n this.controls.leftArrow = leftArrow;\r\n } else {\r\n this.controls.leftArrow = document.createRange().createContextualFragment(\"\").querySelector(\"*\");\r\n this.container.appendChild(this.controls.leftArrow);\r\n }\r\n\r\n if (rightArrow) {\r\n this.controls.rightArrow = rightArrow;\r\n } else {\r\n this.controls.rightArrow = document.createRange().createContextualFragment(\"\").querySelector(\"*\");\r\n this.container.appendChild(this.controls.rightArrow);\r\n }\r\n\r\n this.controls.leftArrow.addEventListener(\"click\", function () {\r\n instance.goBack();\r\n });\r\n\r\n this.controls.rightArrow.addEventListener(\"click\", function () {\r\n instance.goNext();\r\n });\r\n\r\n instance._updateControlsVisibility();\r\n };\r\n\r\n /**\r\n * Lets change the carrouse from the current item\r\n * @method\r\n * @param {Number} spaces Spaces to move\r\n */\r\n Carousel.prototype.go = function (spaces) {\r\n var instance = this;\r\n if (isNaN(spaces)) {\r\n return;\r\n }\r\n var steps = Math.abs(spaces);\r\n if (spaces < 0 && instance.index - steps < 0) {\r\n steps += instance.index - steps;\r\n } else if (spaces > 0 && instance.index + steps > instance.items.length - 1) {\r\n steps -= (instance.index + steps) - (instance.items.length - 1);\r\n }\r\n instance.index += spaces > 0 ? steps : -steps;\r\n\r\n var width = this._getSlidesWidth();\r\n var space = ((spaces > 0 ? -1 : 1) * steps) * width;\r\n\r\n for (var i = 0; i < this.items.length; i++) {\r\n var item = this.items[i];\r\n var currentX = parseInt(item.getAttribute('data-x'));\r\n item.setAttribute('data-x', space + currentX);\r\n item.style.transform = instance._getTransform(item.getAttribute('data-x'));\r\n }\r\n\r\n instance._updateControlsAndPager();\r\n\r\n this.onChangeHandlers.forEach(function (fn) {\r\n fn();\r\n });\r\n };\r\n\r\n /**\r\n * Goes to an specific carousel item\r\n * @method\r\n * @param {Number} index Slide index\r\n */\r\n Carousel.prototype.goTo = function (index) {\r\n if (index < this.index && index > -1) {\r\n this.goBack(this.index - index);\r\n } else if (index > this.index && index < this.items.length) {\r\n this.goNext(index - this.index);\r\n }\r\n };\r\n\r\n /**\r\n * Changes the carousel to the next slide\r\n * @method\r\n * @param {Number} spaces Spaces to move\r\n */\r\n Carousel.prototype.goNext = function (spaces) {\r\n this.go(!isNaN(spaces) ? spaces : (this.isFullScreen() ? this.fullScreenStepSize || this.stepSize : this.stepSize));\r\n };\r\n\r\n /**\r\n * Changes the carousel to the previuos slide\r\n * @method\r\n * @param {Number} spaces Spaces to move\r\n */\r\n Carousel.prototype.goBack = function (spaces) {\r\n this.go(-(!isNaN(spaces) ? spaces : (this.isFullScreen() ? this.fullScreenStepSize || this.stepSize : this.stepSize)));\r\n };\r\n\r\n /**\r\n * Adds a function to run after the carousel changes\r\n * @method\r\n * @param {Function} fn Function\r\n */\r\n Carousel.prototype.addOnChangeListener = function (fn) {\r\n if (typeof fn !== \"function\") return;\r\n if (typeof this.onChangeHandlers.add === 'function') {\r\n this.onChangeHandlers.add(fn);\r\n } else {\r\n this.onChangeHandlers.push(fn);\r\n }\r\n };\r\n\r\n /**\r\n * Removes a function added to run after the carousel changes\r\n * @method\r\n * @param {Function} fn Function\r\n */\r\n Carousel.prototype.removeOnChangeListener = function (fn) {\r\n if (typeof this.onChangeHandlers.delete === 'function') {\r\n this.onChangeHandlers.delete(fn);\r\n } else {\r\n this.onChangeHandlers.pop(fn);\r\n }\r\n };\r\n\r\n /**\r\n * Sets the carousel in full screen mode\r\n * @method\r\n */\r\n Carousel.prototype.fullScreen = function () {\r\n var instance = this;\r\n if (instance.isFullScreen()) {\r\n return;\r\n }\r\n if (!instance.exitFullScreenBtn) {\r\n instance.exitFullScreenBtn = document.createRange().createContextualFragment(\"\").querySelector(\"*\");\r\n instance.exitFullScreenBtn.addEventListener(\"click\", function () {\r\n instance.exitFullScreen();\r\n });\r\n }\r\n instance.container.appendChild(instance.exitFullScreenBtn);\r\n\r\n instance.container.classList.add(\"fullscreen\");\r\n if (instance.container.webkitRequestFullscreen) {\r\n instance.container.webkitRequestFullscreen();\r\n } else if (instance.container.mozRequestFullscreen) {\r\n instance.container.mozRequestFullscreen();\r\n } else {\r\n if (!instance._fullScreenPolyfillContainer) {\r\n document.body.classList.add(\"nhs_NoScrollComplete\");\r\n instance.container.style.height = \"100%\";\r\n instance._fullScreenPolyfillContainer = document.createRange().createContextualFragment(\"\").querySelector(\"*\");\r\n document.body.appendChild(instance._fullScreenPolyfillContainer);\r\n }\r\n instance._fullScreenPolyfillContainer.style.display = \"block\";\r\n instance._beforeFullScreenContainerParent = instance.container.parentElement;\r\n instance._fullScreenPolyfillContainer.appendChild(instance.container);\r\n }\r\n\r\n instance.updateContentLayout();\r\n setTimeout(function () {\r\n instance.updateContentLayout();\r\n }, 100);\r\n instance.onEnterFullScreenHandlers.forEach(function (handler) {\r\n handler();\r\n });\r\n };\r\n\r\n /**\r\n * Exits full screen mode\r\n * @method\r\n */\r\n Carousel.prototype.exitFullScreen = function () {\r\n var instance = this;\r\n instance.container.classList.remove(\"fullscreen\");\r\n if (document.webkitExitFullscreen) {\r\n document.webkitExitFullscreen();\r\n } else if (document.mozExitFullscreen) {\r\n document.mozExitFullscreen();\r\n } else {\r\n instance._fullScreenPolyfillContainer.style.display = \"none\";\r\n document.body.classList.remove(\"nhs_NoScrollComplete\");\r\n instance._beforeFullScreenContainerParent.appendChild(instance.container);\r\n }\r\n if (instance.exitFullScreenBtn && instance.exitFullScreenBtn.parentElement) {\r\n instance.exitFullScreenBtn.parentElement.removeChild(instance.exitFullScreenBtn);\r\n }\r\n\r\n setTimeout(function () {\r\n instance.updateContentLayout();\r\n }, 100);\r\n instance.onExitFullScreenHandlers.forEach(function (handler) {\r\n handler();\r\n });\r\n };\r\n\r\n /**\r\n * Checks if the carousel is in full screen mode\r\n * @method\r\n */\r\n Carousel.prototype.isFullScreen = function () {\r\n return document.fullscreenElement === this.container || this.container.classList.contains(\"fullscreen\");\r\n };\r\n\r\n /**\r\n * Adds a function to run after the carousel enters full screen mode\r\n * @method\r\n * @param {Function} fn Function\r\n */\r\n Carousel.prototype.addOnEnterFullScreen = function (fn) {\r\n if (typeof this.onEnterFullScreenHandlers.add === 'function') {\r\n this.onEnterFullScreenHandlers.add(fn);\r\n } else {\r\n this.onEnterFullScreenHandlers.push(fn);\r\n }\r\n };\r\n\r\n /**\r\n * Removes a function added to run after the carousel enters full screen mode\r\n * @method\r\n * @param {Function} fn Function\r\n */\r\n Carousel.prototype.removeOnEnterFullScreen = function (fn) {\r\n if (typeof this.onEnterFullScreenHandlers.remove === 'function') {\r\n this.onEnterFullScreenHandlers.remove(fn);\r\n } else {\r\n this.onEnterFullScreenHandlers.pop(fn);\r\n }\r\n };\r\n\r\n /**\r\n * Adds a function to run after the carousel exits full screen mode\r\n * @method\r\n * @param {Function} fn Function\r\n */\r\n Carousel.prototype.addOnExitFullScreen = function (fn) {\r\n if (typeof this.onExitFullScreenHandlers.add === 'function') {\r\n this.onExitFullScreenHandlers.add(fn);\r\n } else {\r\n this.onExitFullScreenHandlers.push(fn);\r\n }\r\n };\r\n\r\n /**\r\n * Removes a function added to run after the carousel exits full screen mode\r\n * @method\r\n * @param {Function} fn Function\r\n */\r\n Carousel.prototype.removeOnExitFullScreen = function (fn) {\r\n if (typeof this.onExitFullScreenHandlers.remove === 'function') {\r\n this.onExitFullScreenHandlers.remove(fn);\r\n } else {\r\n this.onExitFullScreenHandlers.pop(fn);\r\n }\r\n };\r\n\r\n return Carousel;\r\n});\r\n/*** Made with ❤ by NewHomeSource team ***/;\n","define('imageLazyLoadConfig',[], function() {\r\n var _configurationInstance = {\r\n NoPhotoUrl: \"https://beta-nhs-static-secure.akamaized.net/GlobalResources14/Default/images/no_photo/no_photos_180x120.png\",\r\n ImageNotLoadedSelector: \"img[data-lazy-image]:not([data-lazy-loaded])\",\r\n LazyLoadedAttributeName: \"data-lazy-loaded\",\r\n DefaultIntersectionRootMargin: \"200px 0px\",\r\n DefaultIntersectionThreshold: 0.25,\r\n LowQualityAttribute: \"data-lowquality\",\r\n LazyLoadCssClass: \"nhs_lazyLoadImage\",\r\n LoadSizeCssClass: \"nhs_lazyLoadSize\"\r\n };\r\n\r\n var getConfigurationInstance = function() {\r\n if (Object.assign) { //Don't want to break in case somehow this gets called by unsupported browsers like IE. getConfigValue can be used for that.\r\n return Object.assign({}, _configurationInstance);\r\n }\r\n return {};\r\n }\r\n\r\n var getConfigValue = function(configKey) {\r\n return _configurationInstance[configKey];\r\n }\r\n\r\n return {\r\n getConfigurationInstance: getConfigurationInstance,\r\n getConfigValue: getConfigValue\r\n\r\n }\r\n \r\n});\n","/*\r\nModule that relies on the Intersection Observer to work. It will grab all the images that have the data-lazy-load attribute and\r\nonce the Intersection detects them, they will swap the data-src with the src (there are other scenarios as well). Please notice\r\nthat there's a related component from C#, which is ImageViewModel\r\n*/\r\ndefine('imageLazyLoad',[\"imageLazyLoadConfig\"], function (imageLazyLoadConfig) {\r\n (function () {\r\n \"use strict\";\r\n var intersectionObserverInstance;\r\n /**\r\n * Adds no photo since when trying to load the image, there was an error.\r\n * @private\r\n * @returns {undefined}\r\n */\r\n var onErrorImageEvent = function () {\r\n this.setAttribute(imageLazyLoadConfig.LazyLoadedAttributeName, \"true\");\r\n this.classList.remove(imageLazyLoadConfig.getConfigurationInstance().LazyLoadCssClass, imageLazyLoadConfig.getConfigurationInstance().LoadSizeCssClass);\r\n this.src = imageLazyLoadConfig.getConfigurationInstance().NoPhotoUrl;\r\n if (this.srcset) {\r\n this.srcset = imageLazyLoadConfig.getConfigurationInstance().NoPhotoUrl;\r\n }\r\n };\r\n\r\n\r\n /**\r\n * Add the attribute of lazyloaded to the image.\r\n * @private\r\n * @returns {undefined}\r\n */\r\n var onLoadImageEvent = function () {\r\n this.setAttribute(imageLazyLoadConfig.getConfigurationInstance().LazyLoadedAttributeName, \"true\");\r\n this.classList.remove(imageLazyLoadConfig.getConfigurationInstance().LazyLoadCssClass, imageLazyLoadConfig.getConfigurationInstance().LoadSizeCssClass);\r\n }\r\n\r\n /**\r\n * Logic where the src is defined based on the data source elements of the image,\r\n * where the full image is placed.\r\n * @private\r\n * @returns {undefined}\r\n */\r\n function loadDataSourceSetImage(lazyImage) {\r\n if (lazyImage.target) {\r\n lazyImage = lazyImage.target;\r\n }\r\n\r\n if (!lazyImage) {\r\n lazyImage = this;\r\n }\r\n\r\n var srcsetImage = lazyImage.dataset.srcset;\r\n\r\n lazyImage.onload = onLoadImageEvent;\r\n lazyImage.onerror = onErrorImageEvent;\r\n\r\n if (srcsetImage !== \"\" && srcsetImage) {\r\n var srcsetValues = srcsetImage.split(\" \");\r\n if (srcsetValues[0] && srcsetValues[0].indexOf(\"http\") >= 0) {\r\n lazyImage.src = srcsetValues[0];\r\n lazyImage.srcset = srcsetImage;\r\n }\r\n } else if (lazyImage.dataset.src) {\r\n lazyImage.src = lazyImage.dataset.src;\r\n }\r\n }\r\n\r\n\t\t/**\r\n\t\t* Creates the Intersection Observer and also defines the images it will look at. If there are\r\n\t\t* not any that has the data-lazy-load attribute, will not run nor if intersection is not defined\r\n\t\t* @private\r\n\t\t* @returns {undefined}\r\n\t\t*/\r\n var setupIntersectionObserver = function () {\r\n var lazyImages = [].slice.call(document.querySelectorAll(imageLazyLoadConfig.getConfigurationInstance().ImageNotLoadedSelector));\r\n if (lazyImages.length > 0 && window.IntersectionObserver) {\r\n var config = {\r\n root: null,\r\n rootMargin: imageLazyLoadConfig.getConfigurationInstance().DefaultIntersectionRootMargin,\r\n threshold: imageLazyLoadConfig.getConfigurationInstance().DefaultIntersectionThreshold\r\n };\r\n intersectionObserverInstance = new IntersectionObserver(function (entries) {\r\n var entry;\r\n for (var entryCounter = 0; entryCounter < entries.length; entryCounter++) {\r\n entry = entries[entryCounter];\r\n if (entry.intersectionRatio > 0 && entry.isIntersecting) {\r\n var lazyImage = entry.target;\r\n loadDataSourceSetImage(lazyImage);\r\n intersectionObserverInstance.unobserve(lazyImage);\r\n }\r\n }\r\n }, config);\r\n var lowQualityImg;\r\n for (var lazyImageCounter = 0; lazyImageCounter < lazyImages.length; lazyImageCounter++) {\r\n //Adding to observer\r\n intersectionObserverInstance.observe(lazyImages[lazyImageCounter]);\r\n //Eager Load based on the low quality image.\r\n lowQualityImg = lazyImages[lazyImageCounter].getAttribute(imageLazyLoadConfig.getConfigurationInstance().LowQualityAttribute);\r\n if (lowQualityImg) {\r\n lazyImages[lazyImageCounter].removeAttribute(imageLazyLoadConfig.getConfigurationInstance().LowQualityAttribute);\r\n lazyImages[lazyImageCounter].src = lowQualityImg;\r\n }\r\n }\r\n }\r\n else {\r\n lazyImages = document.querySelectorAll(\".nhs_lazyLoadImage\");\r\n for (var i = 0; i < lazyImages.length; i++) {\r\n var image = lazyImages[i];\r\n image.src = image.dataset.src;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Self registering method to run the script.\r\n * @public\r\n * @returns {undefined}\r\n */\r\n var startLoadImagesHandler = function () {\r\n setupIntersectionObserver();\r\n }\r\n\r\n startLoadImagesHandler();\r\n })();\r\n});\n","define('domHelper',[], function () {\r\n var getPassiveOptions = function (passive) {\r\n var opts = new Object();\r\n opts.passive = !!passive;\r\n return opts;\r\n };\r\n\r\n /**\r\n * \r\n * Attaches a event to the DOM Element.\r\n * \r\n * @private \r\n * @param {string} event name that will be attached to the Element.\r\n * @param {function} callback JavaScript function to execute when the event is triggered.\r\n */\r\n function attachEvent(eventName, callback, passive) {\r\n var opts = getPassiveOptions(passive);\r\n\r\n if (document.addEventListener) {\r\n this.addEventListener(eventName, callback, opts);\r\n } else if (document.attachEvent) {\r\n this.attachEvent(eventName, callback, opts);\r\n }\r\n };\r\n\r\n /**\r\n * \r\n * Attaches a event to the DOM Element.\r\n * \r\n * @private \r\n * @param {string} event name that will be attached to the Element.\r\n * @param {function} callback JavaScript function to execute when the event is triggered.\r\n */\r\n function detachEvent(eventName, callback, passive) {\r\n var opts = getPassiveOptions(passive);\r\n\r\n if (document.removeEventListener) {\r\n this.removeEventListener(eventName, callback, opts);\r\n } else if (document.detachEvent) {\r\n this.detachEvent(eventName, callback, opts);\r\n }\r\n };\r\n\r\n Element.prototype.removeEventFromElement = detachEvent;\r\n Element.prototype.addEventToElement = attachEvent;\r\n\r\n Document.prototype.addEventToElement = attachEvent;\r\n Document.prototype.removeEventFromElement = detachEvent;\r\n\r\n /**\r\n * \r\n * Checks if an Element has a Parent with the given ID.\r\n * \r\n * @private \r\n * @param {string} id that will be searched in the parent nodes.\r\n */\r\n Element.prototype.hasParent = function (id) {\r\n if (this.id === id) {\r\n return true;\r\n }\r\n\r\n return this.parentNode && this.parentNode !== document.body && this.parentNode.hasParent(id);\r\n }\r\n\r\n /**\r\n * \r\n * Checks if an Element has a class associated.\r\n * \r\n * @private \r\n * @param {string} className that will be searched in the element.\r\n */\r\n Element.prototype.hasClass = function (className) {\r\n if (!this.classList) {\r\n return false;\r\n }\r\n\r\n return this.classList.contains(className);\r\n }\r\n\r\n if ((typeof window.CustomEvent === \"function\")) {\r\n var onClassListChange = new Event(\"onClassListChange\",\r\n {\r\n bubbles: true\r\n });\r\n\r\n\r\n Element.prototype.addClass = function (className) {\r\n if (this.hasClass(className)) {\r\n return true;\r\n }\r\n this.classList.add(className);\r\n this.dispatchEvent(onClassListChange);\r\n return this;\r\n }\r\n }\r\n\r\n Element.prototype.removeClass = function (className) {\r\n if (!this.hasClass(className)) {\r\n return true;\r\n }\r\n\r\n this.classList.remove(className);\r\n this.dispatchEvent(onClassListChange);\r\n return this;\r\n }\r\n\r\n Element.prototype.insertAfter = function (nodeToInsert) {\r\n this.parentNode.insertBefore(nodeToInsert, this.nextSibling);\r\n }\r\n /**\r\n * \r\n * Hides and element from the DOM.\r\n * \r\n * @private \r\n */\r\n Element.prototype.hide = function () {\r\n this.style.display = \"none\";\r\n return this;\r\n }\r\n\r\n /**\r\n * \r\n * Displays and element from the DOM.\r\n * \r\n * @private \r\n */\r\n Element.prototype.show = function () {\r\n this.style.display = \"block\";\r\n return this;\r\n }\r\n\r\n /**\r\n * \r\n * Checks if an Element is visible.\r\n * \r\n * @private \r\n */\r\n Element.prototype.isVisible = function () {\r\n var style = window.getComputedStyle(this);\r\n\r\n return ((style.display !== \"none\") && (style.visibility !== \"hidden\")) ? true : false;\r\n };\r\n\r\n // Start of ticket BDR-17\r\n // NodeList.forEach Pollyfill\r\n if (!NodeList.prototype.forEach || !DOMTokenList.prototype.forEach) {\r\n var propertyName = \"forEach\";\r\n var forEach = function (callback) {\r\n if (typeof callback !== \"function\") {\r\n throw new TypeError(typeof callback + \" is not a function\");\r\n }\r\n var enumerable = this;\r\n var index = 0;\r\n for (index; index < enumerable.length; index++) {\r\n if (callback(enumerable[index], index, enumerable) === false) {\r\n break;\r\n }\r\n }\r\n };\r\n if (!NodeList.prototype.forEach) {\r\n Object.defineProperty(NodeList.prototype, propertyName, {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: forEach\r\n });\r\n }\r\n if (!DOMTokenList.prototype.forEach) {\r\n Object.defineProperty(DOMTokenList.prototype, propertyName, {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: forEach\r\n });\r\n }\r\n }\r\n\r\n if (!Node.prototype.replaceWith || !Element.prototype.replaceWith) {\r\n var replaceWith = function () {\r\n var currentElement = this;\r\n var parent = currentElement.parentNode;\r\n if (!parent) {\r\n return false;\r\n }\r\n //Remove myself if parameters are empty\r\n var length = arguments.length;\r\n if (!length) {\r\n return parent.removeChild(currentElement);\r\n }\r\n var index = 0;\r\n var currentNode;\r\n for (index; index < length; index++) {\r\n currentNode = arguments[index];\r\n if (typeof currentNode !== 'object') {\r\n currentNode = document.createTextNode(currentNode);\r\n } else if (currentNode.parentNode) {\r\n currentNode.parentNode.removeChild(currentNode);\r\n }\r\n if (index === length - 1) {\r\n parent.replaceChild(currentNode, currentElement);\r\n } else {\r\n parent.insertBefore(currentNode, currentElement);\r\n }\r\n }\r\n };\r\n if (!Element.prototype.replaceWith) {\r\n Object.defineProperty(Element.prototype, 'replaceWith', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: replaceWith\r\n });\r\n }\r\n if (!Node.prototype.replaceWith) {\r\n Object.defineProperty(Node.prototype, 'replaceWith', {\r\n enumerable: false,\r\n configurable: false,\r\n writable: false,\r\n value: replaceWith\r\n });\r\n }\r\n }\r\n //End of ticket BDR-17 \r\n});\n","(function(global, factory) {\r\n \"use strict\";\r\n if (\"function\" === typeof define && define.amd) {\r\n // If AMD is supported and the global object (window) in case any JS module is expecting\r\n // the AjaxHelper to exists on the window object.\r\n define('ajaxHelper',[],\r\n function() {\r\n return (global.AjaxHelper = factory(global));\r\n });\r\n } else if (\"object\" === typeof exports) {\r\n // If supports for Common JS is available export the module\r\n // and pass is value to the global (window) object in case non Common JS code \r\n // is expected to work with this AjaxHelper.\r\n module.exports = (global.AjaxHelper = factory(global));\r\n } else {\r\n // If not support for AMD or Common JS is available register the module in the global scope.\r\n global.AjaxHelper = factory(global);\r\n }\r\n})(\"undefined\" !== typeof window ? window : {}, function(root) {\r\n\r\n var requestsQueue = [];\r\n var partnerElement = document.getElementsByClassName(\"brand-logo\");\r\n var siteRoot = document.getElementById(\"nhs_siteRoot\");\r\n let browserAcceptTypes = null;\r\n var partnerUrl;\r\n if (partnerElement && partnerElement.length > 0) {\r\n partnerUrl = partnerElement[0].href;\r\n partnerUrl = partnerUrl.replace(\"http:\", window.location.protocol);\r\n } else {\r\n partnerUrl = \"\";\r\n }\r\n\r\n if (siteRoot) {\r\n siteRoot = siteRoot.value;\r\n } else {\r\n siteRoot = \"\";\r\n }\r\n\r\n var executeCallbacks = function(req, options, succeded, data) {\r\n if (typeof options === \"undefined\" || options === null) {\r\n options = {};\r\n }\r\n\r\n // Always\r\n if (typeof options.always === \"function\") {\r\n options.always(data);\r\n }\r\n // Success\r\n if (succeded && typeof options.success === \"function\") {\r\n options.success(data);\r\n } else if (typeof options.failed === \"function\") { // Failed\r\n options.failed(data);\r\n }\r\n\r\n var queueIndex = requestsQueue.indexOf(req);\r\n if (queueIndex > -1) {\r\n requestsQueue.splice(queueIndex, 1);\r\n }\r\n\r\n };\r\n var getRequest = function(url, contentType, parametersToSend, optionalCallbacks) {\r\n var xhr = new XMLHttpRequest();\r\n var req = {\r\n url: url,\r\n type: \"GET\",\r\n xhr: xhr\r\n };\r\n requestsQueue.push(req);\r\n\r\n xhr.open(\"GET\", url, true);\r\n xhr.onreadystatechange = function() {\r\n if (xhr.readyState !== 4) {\r\n return;\r\n }\r\n\r\n var succededStatus = xhr.status === 200;\r\n executeCallbacks(req, optionalCallbacks, succededStatus, xhr.responseText);\r\n };\r\n xhr.setRequestHeader(\"Content-type\", contentType);\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n xhr.setRequestHeader(\"Accept\", getAcceptTypes());\r\n\r\n\r\n try {\r\n xhr.send(parametersToSend);\r\n } catch (err) {\r\n executeCallbacks(req, optionalCallbacks, false, err);\r\n }\r\n\r\n\r\n };\r\n\r\n var postRequest = function(url, options) {\r\n var xhr = new XMLHttpRequest();\r\n if (options.abort) {\r\n for (var i = 0; i < requestsQueue.length; i += 1) {\r\n if (requestsQueue[i].url === url) {\r\n requestsQueue[i].xhr.abort();\r\n requestsQueue.splice(i, 1);\r\n }\r\n }\r\n }\r\n\r\n var req = {\r\n url: url,\r\n type: \"POST\",\r\n xhr: xhr\r\n };\r\n\r\n requestsQueue.push(req);\r\n\r\n if (typeof options === \"object\") {\r\n\r\n xhr.open(\"POST\", url, options.async ? options.async : true);\r\n xhr.setRequestHeader(\"Accept\", getAcceptTypes());\r\n\r\n if (options.success || options.always || options.failed) {\r\n xhr.onreadystatechange = function() {\r\n if (xhr.readyState !== 4) {\r\n return;\r\n }\r\n\r\n var succededStatus = xhr.status === 200;\r\n executeCallbacks(req, options, succededStatus, xhr.responseText);\r\n };\r\n }\r\n var formatJson = true;\r\n if (options.requestHeaders && options.requestHeaders.length > 0) {\r\n for (var i = 0; i < options.requestHeaders.length; i += 1) {\r\n xhr.setRequestHeader(options.requestHeaders[i].name, options.requestHeaders[i].value);\r\n }\r\n }\r\n\r\n if (options.data) {\r\n var data = null;\r\n \r\n if (options.noJsonStringify) {\r\n data = options.data;\r\n } else {\r\n data = JSON.stringify(options.data);\r\n }\r\n \r\n\r\n try {\r\n xhr.send(data);\r\n } catch (err) {\r\n executeCallbacks(req, options, false, err);\r\n }\r\n\r\n } else {\r\n try {\r\n xhr.send();\r\n } catch (err) {\r\n executeCallbacks(req, options, false, err);\r\n }\r\n }\r\n }\r\n\r\n };\r\n\r\n\r\n var request = function(options) {\r\n // Basic validation\r\n if (!options ||\r\n typeof options !== \"object\" ||\r\n !options.url ||\r\n typeof options.url !== \"string\" ||\r\n !options.type ||\r\n typeof options.type !== \"string\") {\r\n throw new Error(\"Invalid request options\");\r\n }\r\n var xhr = new XMLHttpRequest();\r\n if (options.abort) {\r\n var requestToAbort = requestsQueue.find(function(r) {\r\n return r.url === options.url;\r\n });\r\n\r\n if (requestToAbort) {\r\n requestToAbort.xhr.abort();\r\n requestsQueue.splice(requestToAbort.indexOf(requestToAbort, 1));\r\n }\r\n }\r\n\r\n var requestForQueue = {\r\n url: options.url,\r\n type: options.type,\r\n xhr: xhr\r\n };\r\n\r\n requestsQueue.push(requestForQueue);\r\n\r\n xhr.open(options.type.toUpperCase(), options.url, true);\r\n\r\n\r\n if (typeof options.success === \"function\" ||\r\n typeof options.failed === \"function\" ||\r\n typeof options.always === \"function\") {\r\n xhr.onreadystatechange = function() {\r\n if (xhr.readyState !== 4) return;\r\n\r\n requestsQueue.splice(requestsQueue.indexOf(requestForQueue), 1);\r\n\r\n var response;\r\n\r\n try {\r\n response = JSON.parse(xhr.responseText);\r\n } catch (e) {\r\n response = xhr.responseText;\r\n }\r\n\r\n if (xhr.status === 200 && typeof options.success === \"function\") {\r\n options.success(response);\r\n } else if (typeof options.failed === \"function\") {\r\n options.failed(response);\r\n }\r\n if (typeof options.always === \"function\") {\r\n options.always(response);\r\n }\r\n };\r\n }\r\n\r\n if (options.type.toUpperCase() !== \"GET\" && options.data && typeof options.data === \"object\") {\r\n xhr.setRequestHeader(\"Content-type\", \"application/json\");\r\n }\r\n\r\n xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\r\n xhr.setRequestHeader(\"Accept\", getAcceptTypes());\r\n\r\n xhr.send(options.data && typeof options.data === \"object\"\r\n ? JSON.stringify(options.data)\r\n : options.data\r\n ? options.data\r\n : void (0));\r\n\r\n return xhr;\r\n };\r\n\r\n HTMLFieldSetElement.prototype.serialize = function() {\r\n var notSerializableTypes = [\"file\", \"reset\", \"submit\", \"button\"];\r\n var field, l, s = [];\r\n\r\n if (typeof this === \"object\" && this.nodeName === \"FIELDSET\") {\r\n var len = this.elements.length;\r\n\r\n for (var i = 0; i < len; i += 1) {\r\n field = this.elements[i];\r\n\r\n if (!field.name || field.disabled || notSerializableTypes.includes(field.type)) {\r\n continue;\r\n }\r\n if (field.type === \"select-multiple\") {\r\n l = this.elements[i].options.length;\r\n\r\n for (var j = 0; j < l; j += 1) {\r\n if (field.options[j].selected) {\r\n s[s.length] =\r\n encodeURIComponent(field.name) + \"=\" + encodeURIComponent(field.options[j].value);\r\n }\r\n }\r\n } else if ((field.type !== \"checkbox\" && field.type !== \"radio\") || field.checked) {\r\n s[s.length] = encodeURIComponent(field.name) +\r\n \"=\" +\r\n encodeURIComponent(field.value || field.checked);\r\n }\r\n }\r\n }\r\n return s.join(\"&\").replace(/%20/g, \"+\");\r\n };\r\n\r\n var getAbsolutePathRequest = function(url) {\r\n var siteUrl = siteRoot.slice(0, -1);\r\n if (siteUrl && url.indexOf(siteUrl) >= 0 && url.indexOf(partnerUrl) < 0) {\r\n url = url.replace(siteUrl, partnerUrl);\r\n } else if (url.indexOf(partnerUrl) < 0) {\r\n url = partnerUrl + url;\r\n }\r\n return url;\r\n };\r\n\r\n /**\r\n * Will return the Javascript Object as query string (e.g ?property1=value1&property2=value2)\r\n * @param {any} objectToConvert a Javascript Object that will follow the format of query string for each property.\r\n */\r\n var objectToQueryString = function (objectToConvert, baseQueryString) {\r\n var keyValuePair = Object.entries(objectToConvert);\r\n if (keyValuePair && keyValuePair.length > 0) {\r\n for (var i = 0; i < keyValuePair.length; i++) {\r\n if (typeof keyValuePair[i][1] !== \"undefined\") {\r\n baseQueryString += encodeURIComponent(keyValuePair[i][0]) + \"=\" + encodeURIComponent(keyValuePair[i][1]) + \"&\";\r\n }\r\n }\r\n }\r\n baseQueryString = baseQueryString.substring(0, baseQueryString.length - 1);\r\n return baseQueryString;\r\n }\r\n\r\n /**\r\n * Will return a string based on the object passed. It begins with ? as query string.\r\n * @param {any} objectToConvert a Javascript Object that will follow the format of query string for each property.\r\n */\r\n var convertToQueryString = function(objectToConvert)\r\n {\r\n var queryString = \"?\";\r\n if (objectToConvert) {\r\n if (!Object.entries) {\r\n //Including the polyfills from NHS.\r\n require([\"domHelper\"], function(domHelper) {\r\n return objectToQueryString(objectToConvert, queryString);\r\n });\r\n } else {\r\n return objectToQueryString(objectToConvert, queryString);\r\n }\r\n }\r\n return objectToConvert;\r\n }\r\n\r\n /**\r\n * @private\r\n * getAcceptTypes: get the accept types header for Ajax request.\r\n * \r\n * @returns {@String} with the mime types supported.\r\n */\r\n function getAcceptTypes() {\r\n if(browserAcceptTypes) {\r\n return browserAcceptTypes;\r\n }\r\n\r\n browserAcceptTypes = localStorage.getItem('browserAcceptTypes');\r\n\r\n return browserAcceptTypes || '*/*';\r\n }\r\n\r\n return {\r\n getRequest: getRequest,\r\n postRequest: postRequest,\r\n request: request,\r\n getAbsolutePathRequest: getAbsolutePathRequest,\r\n convertToQueryString: convertToQueryString\r\n };\r\n });\n","define('htmlSectionLazyLoadConfig',[], function() {\r\n var _configurationInstance = {\r\n NoPhotoUrl: \"https://beta-nhs-static-secure.akamaized.net/GlobalResources14/Default/images/no_photo/no_photos_180x120.png\",\r\n PendingLoadSectionSelector: \"[data-lazy-section]:not([data-lazy-loaded-section])\",\r\n LazyLoadedAttributeName: \"data-lazy-loaded-section\",\r\n DefaultIntersectionRootMargin: \"300px 0px\",\r\n DefaultIntersectionThreshold: 0.3\r\n };\r\n\r\n var getConfigurationInstance = function() {\r\n if (Object.assign) { //Don't want to break in case somehow this gets called by unsupported browsers like IE. getConfigValue can be used for that.\r\n return Object.assign({}, _configurationInstance);\r\n }\r\n return {};\r\n }\r\n\r\n var getConfigValue = function(configKey) {\r\n return _configurationInstance[configKey];\r\n }\r\n\r\n return {\r\n getConfigurationInstance: getConfigurationInstance,\r\n getConfigValue: getConfigValue\r\n\r\n }\r\n \r\n});\n","/*\r\nModule\r\n*/\r\ndefine('htmlSectionLazyLoad',[\"ajaxHelper\", \"htmlSectionLazyLoadConfig\"], function(ajaxHelper, htmlSectionLazyLoadConfig) {\r\n (function() {\r\n \"use strict\";\r\n var intersectionObserverInstance;\r\n\r\n /**\r\n * Logic where the src is defined based on the data source elements of the image,\r\n * where the full image is placed.\r\n * @private\r\n * @returns {undefined}\r\n */\r\n function loadSection(lazySection) {\r\n if (lazySection.target) {\r\n lazySection = lazySection.target;\r\n }\r\n\r\n if (!lazySection) {\r\n lazySection = this;\r\n }\r\n\r\n var url = location.protocol + \"//\" + location.hostname + lazySection.getAttribute(\"data-url\");\r\n ajaxHelper.getRequest(url, null, null,\r\n {\r\n async: true,\r\n success: function (response) {\r\n var responseFragment = document.createRange().createContextualFragment(response);\r\n lazySection.appendChild(responseFragment);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Creates the Intersection Observer and also defines the images it will look at. If there are\r\n * not any that has the data-lazy-load attribute, will not run nor if intersection is not defined\r\n * @private\r\n * @returns {undefined}\r\n */\r\n var setupIntersectionObserver = function () {\r\n var lazySections = [].slice.call(document.querySelectorAll(htmlSectionLazyLoadConfig.getConfigurationInstance().PendingLoadSectionSelector));\r\n if (lazySections.length > 0 && window.IntersectionObserver) {\r\n var config = {\r\n rootMargin: htmlSectionLazyLoadConfig.getConfigurationInstance().DefaultIntersectionRootMargin,\r\n threshold: htmlSectionLazyLoadConfig.getConfigurationInstance().DefaultIntersectionThreshold\r\n };\r\n intersectionObserverInstance = new IntersectionObserver(function (entries) {\r\n var entry;\r\n for (var entryCounter = 0; entryCounter < entries.length; entryCounter++) {\r\n entry = entries[entryCounter];\r\n if (entry.intersectionRatio > 0 && entry.isIntersecting) {\r\n var lazySection = entry.target;\r\n loadSection(lazySection);\r\n intersectionObserverInstance.unobserve(lazySection);\r\n }\r\n }\r\n }, config);\r\n \r\n for (var lazyImageCounter = 0; lazyImageCounter < lazySections.length; lazyImageCounter++) {\r\n //Adding to observer\r\n intersectionObserverInstance.observe(lazySections[lazyImageCounter]);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Self registering method to run the script.\r\n * @public\r\n * @returns {undefined}\r\n */\r\n var startLoadSectionHandler = function() {\r\n setupIntersectionObserver();\r\n }\r\n\r\n startLoadSectionHandler();\r\n })();\r\n});\n","require([\"ajaxHelper\"], function(ajaxHelper) {\r\n ajaxHelper.getRequest(\"/homepage/getlocationbasedinformation\", null, null, {\r\n async: true,\r\n success: function (response) {\r\n response = JSON.parse(response);\r\n\r\n var sectionTitle = document.querySelector(\"[data-statistics-title]\");\r\n var homesCount = document.querySelector(\"[data-location-homes-count]\");\r\n var qmiCount = document.querySelector(\"[data-location-qmi-count]\");\r\n var commsCount = document.querySelector(\"[data-location-comms-count]\");\r\n\r\n homesCount.children[0].textContent = response.HomesCount;\r\n qmiCount.children[0].textContent = response.QmiCount;\r\n commsCount.children[0].textContent = response.CommsCount;\r\n sectionTitle.textContent = response.TitleText;\r\n sectionTitle.style.display = \"block\";\r\n\r\n if (!response.IsNationWide) {\r\n qmiCount.href = response.QmiUrl;\r\n homesCount.href = response.HomesUrl;\r\n commsCount.href = response.CommunitiesUrl;\r\n }\r\n }\r\n });\r\n});\ndefine(\"locationCountsGetter\", function(){});\n\n","/*\r\n * summary: this module is to load a modal on the initial load\r\n * hidden input data:\r\n * data-auto-open-modal-query-string=\"queryString from url\"\r\n * button with the modal functionality:\r\n * data-auto-open-modal-(name of the modal, example: request-appointment)\r\n */\r\n(function initialLoadModalHandler(global) {\r\n 'use strict';\r\n\r\n global.NewHomeSource = global.NewHomeSource || {};\r\n const previousInitialLoadModalHandler = global.NewHomeSource.InitialLoadModalHandler;\r\n const queySelectorHiddenInput = '[data-auto-open-modal-query-string]';\r\n const configHiddenInput = document.querySelector(queySelectorHiddenInput);\r\n const queryString = configHiddenInput.dataset.autoOpenModalQueryString;\r\n\r\n if (!configHiddenInput || !queryString) {\r\n return null;\r\n }\r\n\r\n /**\r\n * @private\r\n * removeQueryStringFromUrl: function to remove the queryString from the url\r\n */\r\n function removeQueryStringFromUrl() {\r\n const currentUrl = global.location.href;\r\n\r\n const url = new URL(currentUrl);\r\n const params = new URLSearchParams(url.search);\r\n params.delete('autoopenmodal');\r\n url.search = params.toString();\r\n const newUrl = url.toString();\r\n\r\n global.history.pushState({}, null, newUrl);\r\n }\r\n\r\n /**\r\n * @constructs NewHomeSource.InitialLoadModalHandler\r\n */\r\n function InitialLoadModalHandler() {\r\n }\r\n\r\n /**\r\n * @private\r\n * DisplayModal: function to display the modal from the url in the target element\r\n * @param {string} querySelectorForData query selector to get the needed data\r\n */\r\n InitialLoadModalHandler.DisplayModal = function DisplayModal() {\r\n const querySelectorModal = `[data-auto-open-modal-${queryString}]`;\r\n const targetElement = document.querySelector(querySelectorModal);\r\n\r\n if (targetElement) {\r\n removeQueryStringFromUrl();\r\n targetElement.click();\r\n }\r\n };\r\n\r\n /**\r\n * @public\r\n *\r\n * noConflict: Returns control of NewHomeSource.InitialLoadModalHandler to the previous script.\r\n */\r\n InitialLoadModalHandler.noConflict = function noConflict() {\r\n global.NewHomeSource.InitialLoadModalHandler = previousInitialLoadModalHandler;\r\n return InitialLoadModalHandler;\r\n };\r\n\r\n global.NewHomeSource.InitialLoadModalHandler = InitialLoadModalHandler;\r\n\r\n return InitialLoadModalHandler;\r\n}(window));\r\n\ndefine(\"initialLoadModalHandler\", function(){});\n\n","!(function (win) {\r\n\r\n /**\r\n * FastDom\r\n *\r\n * Eliminates layout thrashing\r\n * by batching DOM read/write\r\n * interactions.\r\n *\r\n * @author Wilson Page \r\n * @author Kornel Lesinski \r\n */\r\n\r\n \"use strict\";\r\n\r\n /**\r\n * Normalized rAF\r\n *\r\n * @type {Function}\r\n */\r\n var raf = win.requestAnimationFrame\r\n || win.webkitRequestAnimationFrame\r\n || win.mozRequestAnimationFrame\r\n || win.msRequestAnimationFrame\r\n || function (cb) { return setTimeout(cb, 16); };\r\n\r\n /**\r\n * Initialize a `FastDom`.\r\n *\r\n * @constructor\r\n */\r\n function FastDom() {\r\n var self = this;\r\n self.reads = [];\r\n self.writes = [];\r\n self.raf = raf.bind(win); // test hook\r\n }\r\n\r\n FastDom.prototype = {\r\n constructor: FastDom,\r\n\r\n /**\r\n * We run this inside a try catch\r\n * so that if any jobs error, we\r\n * are able to recover and continue\r\n * to flush the batch until it's empty.\r\n *\r\n * @param {Array} tasks\r\n */\r\n runTasks: function (tasks) {\r\n var task; while (task = tasks.shift()) task();\r\n },\r\n\r\n /**\r\n * Adds a job to the read batch and\r\n * schedules a new frame if need be.\r\n *\r\n * @param {Function} fn\r\n * @param {Object} ctx the context to be bound to `fn` (optional).\r\n * @public\r\n */\r\n measure: function (fn, ctx) {\r\n var task = !ctx ? fn : fn.bind(ctx);\r\n this.reads.push(task);\r\n scheduleFlush(this);\r\n return task;\r\n },\r\n\r\n /**\r\n * Adds a job to the\r\n * write batch and schedules\r\n * a new frame if need be.\r\n *\r\n * @param {Function} fn\r\n * @param {Object} ctx the context to be bound to `fn` (optional).\r\n * @public\r\n */\r\n mutate: function (fn, ctx) {\r\n var task = !ctx ? fn : fn.bind(ctx);\r\n this.writes.push(task);\r\n scheduleFlush(this);\r\n return task;\r\n },\r\n\r\n /**\r\n * Clears a scheduled 'read' or 'write' task.\r\n *\r\n * @param {Object} task\r\n * @return {Boolean} success\r\n * @public\r\n */\r\n clear: function (task) {\r\n return remove(this.reads, task) || remove(this.writes, task);\r\n },\r\n\r\n /**\r\n * Extend this FastDom with some\r\n * custom functionality.\r\n *\r\n * Because fastdom must *always* be a\r\n * singleton, we're actually extending\r\n * the fastdom instance. This means tasks\r\n * scheduled by an extension still enter\r\n * fastdom's global task queue.\r\n *\r\n * The 'super' instance can be accessed\r\n * from `this.fastdom`.\r\n *\r\n * @example\r\n *\r\n * var myFastdom = fastdom.extend({\r\n * initialize: function() {\r\n * // runs on creation\r\n * },\r\n *\r\n * // override a method\r\n * measure: function(fn) {\r\n * // do extra stuff ...\r\n *\r\n * // then call the original\r\n * return this.fastdom.measure(fn);\r\n * },\r\n *\r\n * ...\r\n * });\r\n *\r\n * @param {Object} props properties to mixin\r\n * @return {FastDom}\r\n */\r\n extend: function (props) {\r\n if (typeof props != 'object') throw new Error('expected object');\r\n\r\n var child = Object.create(this);\r\n mixin(child, props);\r\n child.fastdom = this;\r\n\r\n // run optional creation hook\r\n if (child.initialize) child.initialize();\r\n\r\n return child;\r\n },\r\n\r\n // override this with a function\r\n // to prevent Errors in console\r\n // when tasks throw\r\n catch: null\r\n };\r\n\r\n /**\r\n * Schedules a new read/write\r\n * batch if one isn't pending.\r\n *\r\n * @private\r\n */\r\n function scheduleFlush(fastdom) {\r\n if (!fastdom.scheduled) {\r\n fastdom.scheduled = true;\r\n fastdom.raf(flush.bind(null, fastdom));\r\n }\r\n }\r\n\r\n /**\r\n * Runs queued `read` and `write` tasks.\r\n *\r\n * Errors are caught and thrown by default.\r\n * If a `.catch` function has been defined\r\n * it is called instead.\r\n *\r\n * @private\r\n */\r\n function flush(fastdom) {\r\n var writes = fastdom.writes;\r\n var reads = fastdom.reads;\r\n var error;\r\n\r\n try {\r\n fastdom.runTasks(reads);\r\n fastdom.runTasks(writes);\r\n } catch (e) { error = e; }\r\n\r\n fastdom.scheduled = false;\r\n\r\n // If the batch errored we may still have tasks queued\r\n if (reads.length || writes.length) {\r\n scheduleFlush(fastdom);\r\n }\r\n\r\n if (error) {\r\n if (fastdom.catch) {\r\n fastdom.catch(error);\r\n } else {\r\n throw error;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove an item from an Array.\r\n *\r\n * @param {Array} array\r\n * @param {*} item\r\n * @return {Boolean}\r\n */\r\n function remove(array, item) {\r\n var index = array.indexOf(item);\r\n return !!~index && !!array.splice(index, 1);\r\n }\r\n\r\n /**\r\n * Mixin own properties of source\r\n * object into the target.\r\n *\r\n * @param {Object} target\r\n * @param {Object} source\r\n */\r\n function mixin(target, source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) target[key] = source[key];\r\n }\r\n }\r\n\r\n // There should never be more than\r\n // one instance of `FastDom` in an app\r\n var exports = win.fastdom = (win.fastdom || new FastDom()); // jshint ignore:line\r\n\r\n // Expose to CJS & AMD\r\n if ((typeof define) == 'function') define('fastdom',[],function () { return exports; });\r\n})(typeof window !== 'undefined' ? window : this);\n","define('popularMarketsPills',['fastdom'], (fastdom) => {\r\n 'use strict';\r\n\r\n // Get market pills elements\r\n const pillsContainer = document.querySelector('[data-pills-container]');\r\n if (!pillsContainer) {\r\n return;\r\n }\r\n\r\n const pillsList = pillsContainer.querySelector('[data-markets-list]');\r\n const scrollLeftButton = pillsContainer.querySelector('[data-markets-pills-button-left]');\r\n const scrollRightButton = pillsContainer.querySelector('[data-markets-pills-button-right]');\r\n\r\n // Define margins and scroll limits\r\n const marginLeftArrow = '16px';\r\n const hideMarginArrow = '0px';\r\n let limitRight = 0;\r\n\r\n // Function to set the right limit of the pills container\r\n const setRightLimit = () => {\r\n fastdom.measure(() => {\r\n limitRight = pillsList.getBoundingClientRect().right;\r\n });\r\n };\r\n\r\n // Function to update the visibility of the scroll buttons\r\n const updateChildElementsVisibility = () => {\r\n fastdom.measure(() => {\r\n const isListScrolledRight = pillsList.scrollLeft !== 0;\r\n fastdom.mutate(() => {\r\n pillsList.style.marginLeft = isListScrolledRight ? marginLeftArrow : hideMarginArrow;\r\n scrollLeftButton.style.visibility = isListScrolledRight ? 'visible' : 'hidden';\r\n\r\n // Check if the last element is within the right limit\r\n if (pillsList.lastElementChild.getBoundingClientRect().right > limitRight) {\r\n scrollRightButton.style.visibility = 'visible';\r\n } else {\r\n scrollRightButton.style.visibility = 'hidden';\r\n }\r\n });\r\n });\r\n };\r\n\r\n // Function to scroll the pills container horizontally\r\n const scrollHorizontally = (amount) => {\r\n fastdom.measure(() => {\r\n const initialScrollLeft = pillsList.scrollLeft;\r\n const targetScrollLeft = initialScrollLeft + amount;\r\n\r\n fastdom.mutate(() => {\r\n pillsList.scrollLeft = targetScrollLeft;\r\n updateChildElementsVisibility();\r\n });\r\n });\r\n };\r\n\r\n // Add event listeners for arrow buttons\r\n scrollLeftButton.addEventListener('click', () => {\r\n scrollHorizontally(-300);\r\n });\r\n\r\n scrollRightButton.addEventListener('click', () => {\r\n scrollHorizontally(300);\r\n });\r\n\r\n // Add scroll event to update button visibility\r\n pillsList.addEventListener('scroll', updateChildElementsVisibility);\r\n\r\n // Add resize event to recalculate limits and update visibility\r\n window.addEventListener('resize', () => {\r\n setRightLimit();\r\n updateChildElementsVisibility();\r\n });\r\n\r\n // Set the initial right limit and update button visibility on page load\r\n setRightLimit();\r\n updateChildElementsVisibility();\r\n});\r\n\n","require(['SearchFormComponent', 'Carousel', 'imageLazyLoad', 'htmlSectionLazyLoad', 'locationCountsGetter', 'initialLoadModalHandler', 'popularMarketsPills'],\r\n function (SearchFormComponent, Carousel) {\r\n let form = document.querySelector('#searchFormHeroImage');\r\n\r\n var search = new SearchFormComponent({\r\n form: document.getElementById(\"searchFormHeroImage\"),\r\n validationError: document.querySelector(\"#heroSearchboxErrorMessage\"),\r\n submitButton: document.querySelector(\"[data-search-submit]\"),\r\n searchTextField: form.querySelector(\"[data-component-rol='target-input']\"),\r\n shouldAlwaysSubmitForm: true,\r\n useAutocompleteForSubmit: true\r\n });\r\n\r\n var testimonialCarousel = new Carousel(document.getElementById(\"testimonialContainer\"), {\r\n stepSize: 1,\r\n controls: true,\r\n visibleItems: 1,\r\n rightArrow: document.querySelector('[data-rigth]'),\r\n leftArrow: document.querySelector('[data-left]')\r\n });\r\n\r\n if (window.NewHomeSource.InitialLoadModalHandler) {\r\n window.NewHomeSource.InitialLoadModalHandler.DisplayModal();\r\n }\r\n });\ndefine(\"nhs/views/home/Show\", function(){});\n\n","\nrequire([\"nhs/views/home/Show\"]);\n"]}