{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/components/focus.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/csrf.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/utils/slick.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/utils/viewport.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/search.js","webpack:///../node_modules/js-cookie/src/js.cookie.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/search/search.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/search/search.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/product/wishlist.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/components/plpAddToCart.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/product/detail.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/util.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/detail.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/product/pdpProductDetails.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/product/quickView.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/quickView.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/customUtil.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/product/base.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/search/categoryMarketingSlotTile.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/components/focus.js","webpack:///../storefront-reference-architecture/cartridges/app_storefront_base/cartridge/client/default/js/product/base.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/domUtil.js","webpack:///./cartridges/app_custom_aando/cartridge/client/default/js/components/formValidation.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","setTabNextFocus","focusParams","event","keyCode","firstFocusableEl","$","containerSelector","firstElementSelector","lastFocusableEl","lastElementSelector","is","length","nextToLastElementSelector","linkElements","shiftKey","focus","preventDefault","updateTokens","data","csrf","$elem","tokenName","each","this","val","token","customUtil","require","setCarousel","$el","slickConfigs","isEmpty","keys","not","slick","destroyCarousel","hasClass","unslick","reinitCarousel","isInViewport","$element","elementTop","offset","top","elementBottom","outerHeight","viewportTop","window","scrollTop","viewportBottom","height","processInclude","baseHelper","slickHelper","sitePrefs","SitePreferences","resource","Resources","Cookies","initializeImageCarousels","isMobile","configs","lazyLoad","arrows","dots","mobileFirst","$plpSearchResultsElement","$targetEl","find","addClass","document","ready","on","elem","prodDetailBottom","trigger","hide","removeClass","backToTop","fadeIn","fadeOut","$this","container","closest","attr","listprice","salesprice","imgfront","imgfrontalt","imgback","imgbackalt","percentageoff","isNew","isBestSeller","exclusiveBadge","exclusiveBadgeID","salesBadge","id","defaultVariantId","hasSalePricebook","promotions","url","quickviewUrl","text","src","alt","href","css","content","formatted","listPriceText","salesPriceText","html","show","badge","append","newToSale","NEW_TO_SALE","split","join","IS_INTERNATIONAL","toLowerCase","updateProductPromotions","empty","spinner","start","myfit","$category","categoryID","slice","sizes","$size","push","ajax","type","dataType","fitselection","JSON","stringify","success","redirectUrl","location","stop","$refinement","parent","isActive","filter","toggleClass","scrollPosition","session","sessionStorage","history","scrollRestoration","setItem","factory","registeredInModuleLoader","define","OldCookies","api","noConflict","extend","result","arguments","attributes","decode","replace","decodeURIComponent","init","converter","set","path","defaults","expires","Date","toUTCString","test","e","write","encodeURIComponent","String","escape","stringifiedAttributes","attributeName","cookie","json","jar","cookies","parts","charAt","read","parse","getJSON","remove","withConverter","basesearchSearch","plpAddToCart","myFitSelected","appendParamToURL","indexOf","separator","stringToHash","string","hash","charCodeAt","initCategoryRefinements","children","allSlidesWidths","index","tag","outerWidth","width","infinite","slidesToShow","variableWidth","slidesToScroll","draggable","touchMove","swipeToSlide","swipe","responsive","breakpoint","settings","handleCategoryRefinements","$results","setTimeout","updateDom","selector","$updates","$searchResultBannerEl","handleRefinements","activeDiv","className","handleSEOCopy","parseResults","response","specialHandlers","forEach","refinementUrl","singleRefinement","categoryURL","categoryTitle","getCookie","title","refinements","match","newUrl","refinementCount","getUrlQueryParameterValue","prefvMatched","refinementValue","includes","toUpperCase","pushState","removeQueryParam","_index","categoryMarketingSlot","pushLinkTohistory","generateUrl","catId","myFitCookie","catSizes","prefMatched","re","RegExp","rePrefn","rePrefv","prefName","prefValue","siblings","closeRefinements","resize","fresize","sort","options","selectedIndex","selectedUrl","method","complete","error","showMore","stopPropagation","showMoreUrl","replaceWith","option","updateSortOptions","affirm","ui","refresh","applyFilter","unbind","which","urlStr","typeEvent","selCat","cgids","cgid","target","pop","hashValue","err","console","message","page","redirect","resetMyFit","stopImmediatePropagation","selected","myFitToggle","sizesUrl","nonMyFitSizes","size","idStr","emailSignUpCookieName","undefined","loadMyFit","$myFitToggle","showContentTab","pdpToPlpNavigation","goToPreviouslySelectedProduct","getItem","removeItem","initHistory","previousHistoryState","doNotPushHistory","ajaxSuccess","xhr","responseText","reapplyFilters","decodeURI","addEventListener","state","$resetButton","categoryRefinements","initPLPAddToBag","initAddToBag","getContent","$target","displayMessage","button","status","msg","removeAttr","toggleHeartIcon","wishlistItems","pid","toggleHeartIconForLoggedIn","toggleHeartIconForGuest","localStorage","addToWishlist","$addToWishlistBtn","optionId","optionVal","$sizeSelectionsEl","isPDP","PLEASE_SELECT_SIZE","updateHeartIcon","isLoggedIn","saveToBrowserStorage","moveToWishlist","$targetElement","itemToMove","actionUrl","productID","productName","uuid","displayMessageAndRemoveFromCart","initWishlistItems","oldPid","product","loggedIn","Urls","getWishlistItems","items","unshift","chooseBonusProducts","bonusUrl","bonusChoiceRuleBased","showProductsUrlRuleBased","showProductsUrlListBased","htmlString","maxBonusItems","pliUUID","addToCartUrl","pageSize","labels","selectprods","$html","parsedHtml","renderedTemplate","body","parseHTML","footer","enterDialogMessage","closeButtonText","modal","form","pidsObj","childProducts","quantity","newBonusDiscountLineItem","addedPid","miniCartReportingUrl","reportingURL","vgroupid","currentTarget","$colorAlert","prepend","prev","off","variationGroup","changeColorSwatch","salesBeforePromo","salesBeforePromoContainer","insertAfter","onSizeClick","base","baseDetails","availability","addToCart","updateAttributesAndDetails","showSpinner","updateAttribute","pdpVideoID","eq","productId","productType","updateAvailability","selectAttribute","$productContainer","attributeSelect","readyToOrder","sizeChart","$prodSizeChart","$productDescContainer","modalOptions","keyboard","backdrop","$sizeChart","has","copyProductLink","focusChooseBonusProductModal","pdpApplePay","isPdpSet","selectedVal","applePayButton","timeInt","$eddText","$eddPidDiv","limit","unHideEdd","trim","clearTimeout","videoId","thumbnailUrl","thumbnail_large","$videoButton","videoElement","paused","play","pause","include","attributesHtml","shortDescription","longDescription","updateAddToCart","available","enable","toArray","every","item","allAvailable","allReady","resources","info_selectforstock","$temp","select","execCommand","domUtil","viewportUtil","formValidation","handleSetUnavailabilityMessage","unavailableItems","setUnavailableMessageOne","setUnavailableMessageMany","attributeType","recommendationsHtml","einsteinProductRecommendationsHtml","price","percentOffMark","standardPrice","list","sales","percentageOff","salesPriceBeforePromo","productContainer","priceTemplate","cloneNode","priceSection","queryFirst","priceContainer","strikeThroughContainer","priceElement","salesContainer","salesPriceElement","salesBeforPromoElement","percentOffContainer","percentOffElement","textContent","innerHTML","updateProductPrice","PdpVideoID","carousel","selectedProductID","carouselId","imageLength","appendTo","toFixed","selectedEddProductID","eddPreOrderDate","inStockDate","eddObj","zipcode","carrierCode","serviceCode","eddObject","narvar","earliestEDD","getPdpEDD","hasPromotions","setProductDetailsDescTop","parentEl","$btnContainer","woh","topOffset","position","classType","errMessage","messages","ele","isSetItem","prop","variationAttributes","output","variationAttribute","values","key1","$colorSelector","variationGroupID","selectable","enableBackInStockNotification","showBackInStockModule","displayValue","displayvalue","el","colorName","preOrderLabel","addToCartLabel","descriptionAndDetailsHtml","saleBadgingHtml","exclusiveBadgingHtml","noSelectionCount","$setProducts","$setProduct","errorMessage","$productDetail","$container","animate","innerHeight","expandSizeGuide","collapseSizeGuide","historyPushCount","groudId","isPdp","pageTitle","color","$jsProductTile","currentLocale","newPageUrl","newPageTitle","map","word","badgeClass","badgeValue","$newEl","class","go","imgThumbnailIndex","scroll","scrollIntoView","node","parentElement","parentCHeight","clientHeight","scrollHeight","nodeHeight","scrollOffset","offsetTop","scrollToBISModule","querySelector","$form","appendToUrl","attentiveURL","serialize","scrollTo","behavior","focusHelper","baseQuickView","fillModalElement","selectedValueUrl","uniqueSellingPropsCopy","clone","quickViewFullDetailMsg","productUrl","showQuickview","focusQuickview","trapQuickviewFocus","hideDialog","beforeUpdateAttribute","swatchVal","tElement","ellipsisText","substring","EllipsisChar","innerText","selectedProductUrl","dialog","mobileAgentHash","idx","userAgent","navigator","isSafari","iosVersion","platform","v","appVersion","parseInt","cookiename","startC","endC","setCookie","cookieName","cookieValue","nDays","today","expire","setTime","getTime","toGMTString","urlparts","queryParamName","currentParameter","urlQueryVariables","decodedString","handleVariantResponse","isVaraint","isChoiceOfBonusProducts","parents","videoObj","pdpVideoLink","attrs","msgs","attrsWithSwatches","attrValue","$attrValue","$swatchButton","assistiveSelectedText","processSwatchValues","sizesHtml","updateSizeUrl","$attr","processNonSwatchValues","updateAttrs","productImages","images","primaryImageUrls","large","imgs","hiResImags","indexAdjustment","first","detach","createCarousel","thumbnailCarousel","template","j","$thumbnailCarouselItems","querySelectorAll","imagesLoaded","observer","IntersectionObserver","entries","delayInMS","entry","isIntersecting","Promise","resolve","then","observe","createThumbnailCarousel","promotionsHtml","availabilityValue","availabilityMessages","availabiityContainer","attributeGroup","ID","attribute","label","getAttributesHtml","updateQuantities","quantities","optionsHtml","updateOptions","getOptions","$elOption","urlValue","selectedValueId","methods","editBonusProducts","onClosingChooseBonusProductModal","trapChooseBonusProductModalFocus","colorAttribute","promotion","calloutMsg","setPids","$thisBtnAdd","$messageQtyError","$messageNoStock","qty","getPidValue","getQuantitySelected","$addToCartBtn","handlePostCartAdd","sfmcCartInfo","_etmc","selectBonusProduct","removeBonusProduct","enableBonusProductSelection","showMoreBonusProducts","addBonusProductsToCart","$categoryMarketingSlot","atcPid","getQuantitySelector","resetUrl","parseHtml","messageType","$checkIcon","$choiceOfBonusProduct","maxPids","submittedQty","totalQty","optionID","valueId","selectedBonusProductHtml","$selected","count","$readyToOrderBonusProducts","queryString","pidsObject","bonusProducts","qtyOption","msgSuccess","reload","queryAll","getStyles","element","styles","getComputedStyle","rules","rule","Array","isArray","NodeList","removeChild","setAttribute","removeAttribute","classList","add","toggle","contains","throttle","callback","isThrottling","args","apply","debounce","timer","minimumDelay","makeArray","newTarget","array","reduce","results","arg","concat","offsetHeight","marginTop","marginBottom","scrollY","pageYOffset","boundsTop","getBoundingClientRect","numberOfViewportToCheck","dataset","nextViewportLazyLoad","viewport","bounds","emptyCart","cartElement","y","duration","getLastElementInRow","nextElementSibling","sibling","bottom","previousElementSibling","updateUrlQueryParam","$queryParamsElement","getCharacterCount","waitForElement","scope","timeout","reject","elements","MutationObserver","mutations","self","disconnect","childList","subtree","params","formElement","payload","clearFormErrors","fields","feedbackElement","before"],"mappings":"aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,K,kCChFrDhC,EAAOD,QAAU,CACbkC,gBAAiB,SAAUC,GAIvB,GAF6C,QAA1BA,EAAYC,MAAMX,KADnB,IACoCU,EAAYC,MAAMC,QAExE,CAIA,IAAIC,EAAmBC,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYM,sBACvEC,EAAkBH,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYQ,qBAE1E,IACIJ,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYQ,qBAAqBC,GAAG,cACQ,IAApFL,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYQ,qBAAqBE,UAEzEH,EAAkBH,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYW,2BAClEP,EAAE,kCAAkCM,OAAS,GAAG,CAChD,IAAIE,EAAeR,EAAEJ,EAAYK,kBAAoB,0BACrDE,EAAkBK,EAAaA,EAAaF,OAAS,GAIzDV,EAAYC,MAAMY,SACIT,EAAE,UAAUK,GAAGN,KACjCI,EAAgBO,QAChBd,EAAYC,MAAMc,kBAELX,EAAE,UAAUK,GAAGF,KAEhCJ,EAAiBW,QACjBd,EAAYC,MAAMc,sB,gCChC9BjD,EAAOD,QAAU,CACbmD,aAAc,SAAUC,GACpB,GAAIA,GAAQ,SAAUA,EAAM,CACxB,IAAIC,EAAOD,EAAKC,KAChB,GAAI,cAAeA,GAAQ,UAAWA,EAAM,CACxC,IAAIC,EAAQf,EAAE,eAAiBc,EAAKE,UAAY,MAC5CD,EAAMT,OAAS,GACfS,EAAME,MAAK,WACPjB,EAAEkB,MAAMC,IAAIL,EAAKM,e,gCCRzC,IAAIC,EAAaC,EAAQ,GAEzB5D,EAAOD,QAAU,CACb8D,YAAa,SAASC,EAAKC,GACnBJ,EAAWK,QAAQF,IAA6C,IAArCnD,OAAOsD,KAAKF,GAAcnB,QACzDkB,EAAII,IAAI,sBAAsBC,MAAMJ,IAExCK,gBAAiB,SAASN,GACnBA,EAAIO,SAAS,sBACZP,EAAI,GAAGK,MAAMG,WAGrBC,eAAgB,SAAST,EAAKC,GAC1BP,KAAKY,gBAAgBN,GACrBN,KAAKK,YAAYC,EAAKC,M,gCCE9B/D,EAAOD,QAAU,CACbyE,aAXJ,SAAsBC,GAClB,IAAIC,EAAaD,EAASE,SAASC,IAC/BC,EAAgBH,EAAaD,EAASK,cAEtCC,EAAczC,EAAE0C,QAAQC,YACxBC,EAAiBH,EAAczC,EAAE0C,QAAQG,SAE7C,OAAON,EAAgBE,GAAeL,EAAaQ,K,iCCZvD,IAAIE,EAAiBxB,EAAQ,GACzByB,EAAazB,EAAQ,GACrB0B,EAAc1B,EAAQ,IACtBD,EAAaC,EAAQ,GACrB2B,EAAYC,iBAAmBR,OAAOQ,gBACtCC,EAAWC,WAAaV,OAAOU,UAC/BC,EAAU/B,EAAQ,KA6QtB,SAASgC,IACL,IAAIC,EAAWlC,EAAWkC,WAGtBC,EAAU,CACVC,SAAU,WACVC,QAASH,EACTI,MAAM,EACNC,YAAaL,GAGjBM,EAA2B7D,EAAE,0BAE7B,IAAKqB,EAAWK,QAAQmC,GAA2B,CAC/C,IAAIC,EAAYD,EAAyBE,KAAK,8CAC9Cf,EAAYzB,YAAYuC,EAAWN,GACnCK,EAAyBE,KAAK,kCAAkCC,SAAS,eA3RjFhE,EAAEiE,UAAUC,OAAM,WAEdpB,EAAexB,EAAQ,KACvBwB,EAAexB,EAAQ,MACvBwB,EAAexB,EAAQ,KACvBwB,EAAexB,EAAQ,KA4BvBtB,EAAE0C,QAAQyB,GAAG,UAAU,WAtBvB,IACQC,EAYAC,EAE4B,KAF5BA,EAAmBrE,EAAE,8DAEJM,QAIdN,EAAE0C,QAAQC,YAAc3C,EAAE0C,QAAQG,UAAYwB,EAAiBhC,SAASC,MAIlDe,EAAQ7E,IAAI,yBAtBrC4F,EAAOpE,EAAE,8DACH+B,SAAS,aACfqC,EAAKE,QAAQ,SACbF,EAAKG,eAwBjBvE,EAAE,mBAAmBmE,GAAG,SAAS,WAC7BnE,EAAE,mBAAmBgE,SAAS,oBAGlChE,EAAEiE,UAAUE,GAAG,kBAAmB,kBAAkB,WAChDnE,EAAE,mBAAmBwE,YAAY,oBAGrCxE,EAAEiE,UAAUC,OAAM,WACd,IAAIO,EAAYzE,EAAE,oBAElByE,EAAUF,OACVvE,EAAE0C,QAAQyB,GAAG,UAAU,WACfnE,EAAEkB,MAAMyB,YAAc,IACtB8B,EAAUC,SAEVD,EAAUE,gBAKtB3E,EAAE,mBAAmBmE,GAAG,SAAS,WAC7BnE,EAAE,mBAAmBgE,SAAS,oBAGlChE,EAAEiE,UAAUE,GAAG,kBAAmB,kBAAkB,WAChDnE,EAAE,mBAAmBwE,YAAY,oBAGrCxE,EAAEiE,UAAUE,GAAG,QAAS,0BAA0B,WAC9C,IAAIS,EAAQ5E,EAAEkB,MACV2D,EAAYD,EAAME,QAAQ,iBAE9BD,EAAUd,KAAK,UAAUS,YAAY,UACrCK,EAAUd,KAAK,0BAA0B9C,MAAK,WAC1CjB,EAAEkB,MAAM6D,KAAK,gBAAgB,MAEjCH,EAAMZ,SAAS,UAAUe,KAAK,gBAAgB,GAC9C,IAAIC,EAAYJ,EAAM/D,KAAK,aACvBoE,EAAaL,EAAM/D,KAAK,cACxBqE,EAAWN,EAAM/D,KAAK,YACtBsE,EAAcP,EAAM/D,KAAK,eACzBuE,EAAUR,EAAM/D,KAAK,WACrBwE,EAAaT,EAAM/D,KAAK,cACxByE,EAAgBV,EAAM/D,KAAK,iBAC3B0E,EAAQX,EAAM/D,KAAK,SACnB2E,EAAeZ,EAAM/D,KAAK,gBAC1B4E,EAAiBb,EAAM/D,KAAK,kBAC5B6E,EAAmBd,EAAM/D,KAAK,oBAC9B8E,EAAaf,EAAM/D,KAAK,cACxB+E,EAAKhB,EAAM/D,KAAK,MAChBgF,EAAmBjB,EAAM/D,KAAK,oBAC9BiF,EAAmBlB,EAAM/D,KAAK,oBAC9BkF,EAAanB,EAAM/D,KAAK,cACxBmF,EAAMpB,EAAM/D,KAAK,OACjBoF,EAAe,2EAA6EL,EAC5F1H,EAAO0G,EAAM/D,KAAK,WAQtB,GAPAgE,EAAUd,KAAK,SAASmC,KAAKhI,GAC7B2G,EAAUd,KAAK,eAAegB,KAAK,CAAEoB,IAAKjB,EAAUkB,IAAKjB,IACzDN,EAAUd,KAAK,cAAcgB,KAAK,CAAEoB,IAAKf,EAASgB,IAAKf,IACvDR,EAAUd,KAAK,KAAKgB,KAAK,CAAEsB,KAAML,IACjCnB,EAAUd,KAAK,eAAegB,KAAK,CAAEsB,KAAMJ,IAE3CpB,EAAUd,KAAK,YAAYmC,KAAKL,GAC3Bb,EAOE,CAMH,GAJiB,SADFH,EAAUd,KAAK,mBAAmBuC,IAAI,YAEjDzB,EAAUd,KAAK,mBAAmBuC,IAAI,UAAW,IAGjDzB,EAAUd,KAAK,mBAAmBzD,OAClCuE,EACKd,KAAK,mBACLgB,KAAK,CAAEwB,QAASvB,EAAUpG,QAC1BsH,KAAKlB,EAAUwB,WACpB3B,EAAUd,KAAK,kBAAkBmC,KAAKZ,OACnC,CACH,IAAImB,EAAgB,oKAAH,OAEsEzB,EAAUpG,MAFhF,aAE0FoG,EAAUwB,UAFpG,iEAKbE,EAAiB,6EAAH,OAAgFzB,EAAWrG,MAA3F,aAAqGqG,EAAWuB,UAAhH,WAEbV,EAGDjB,EAAUd,KAAK,kBAAkB4C,KAAKF,EAAgBC,GAFtD7B,EAAUd,KAAK,kBAAkB4C,KAAKD,GAK9C7B,EACKd,KAAK,mBACLgB,KAAK,CAAEwB,QAAStB,EAAWrG,QAC3BsH,KAAKjB,EAAWuB,gBAnCrB3B,EAAUd,KAAK,mBAAmBQ,OAClCM,EACKd,KAAK,mBACLgB,KAAK,CAAEwB,QAAStB,EAAWrG,QAC3BsH,KAAKjB,EAAWuB,WACrB3B,EAAUd,KAAK,kBAAkBmC,KAAK,IAmE1C,GAlCKJ,IACDjB,EAAUd,KAAK,mBAAmBQ,OAClCM,EAAUd,KAAK,kBAAkBmC,KAAK,KAG1CjB,GACIJ,EACKd,KAAK,mBACLgB,KAAK,CAAEwB,QAAStB,EAAWrG,QAC3BsH,KAAKjB,EAAWuB,WAEzBjB,GACIV,EACKd,KAAK,kBACL6C,OACAD,KAAK,6BAEdnB,GACIX,EACKd,KAAK,kBACL6C,OACAD,KAAK,4BAETpB,GAAUC,IACXX,EAAUd,KAAK,kBAAkBQ,OAE7BoB,GACAd,EAAUd,KAAK,kBAAkB6C,QAKzC/B,EAAUd,KAAK,kBAAkBS,YAAY,mBAEzCiB,IAAmBE,EAAY,CAI/B,GAHAd,EAAUd,KAAK,kBAAkB6C,OACjC/B,EAAUd,KAAK,kBAAkBC,SAAS,mBAErCa,EAAUd,KAAK,kBAAkBzD,OAG/B,CACCuG,EAAQ,SAAWpB,EAAiB,UACxCZ,EAAUd,KAAK,kBAAkB4C,KAAKE,OALI,CAC1C,IAAIA,EAAQ,oCAAsCpB,EAAiB,gBACnEZ,EAAUd,KAAK,mBAAmB+C,OAAOD,GAO7C,IAAIE,EAAY5D,EAAS6D,YAAYC,MAAM,KAAKC,KAAK,IACjDjE,EAAUkE,kBAAoBzB,IAAqBqB,EAAUK,eAC7DvC,EAAUd,KAAK,kBAAkBQ,OAKzC,IAAMT,EAAYe,EAAUd,KAAK,0BAC7BgC,GAAcA,EAAWzF,OAAS,EAClCyC,EAAWsE,wBAAwBvD,EAAWiC,GAE9CjC,EAAUwD,WAKlBtH,EAAE,QAAQmE,GAAG,QAAS,eAAe,YACI,IAAjCnE,EAAEkB,MAAMa,SAAS,YACjB/B,EAAEkB,MAAMsD,YAAY,YAEpBxE,EAAEkB,MAAM8C,SAAS,eAIzBhE,EAAE,QAAQmE,GAAG,QAAS,mBAAmB,SAAUtE,GAC/CA,EAAMc,iBACNX,EAAEuH,UAAUC,QACZ,IAAIxB,EAAMhG,EAAEkB,MAAM6D,KAAK,QACnB0C,EAAQ,GACZzH,EAAE,mBAAmBiB,MAAK,WACtB,IAAIyG,EAAY1H,EAAEkB,MACdyG,EAAaD,EAAU3C,KAAK,MAAM6C,MAAM,GAAI,GAC5CC,EAAQ,GACRH,EAAU3D,KAAK,wBAAwBzD,OAAS,IAChDoH,EAAU3D,KAAK,wBAAwB9C,MAAK,WACxC,IAAI6G,EAAQ9H,EAAEkB,MACd2G,EAAME,KAAKD,EAAMjH,KAAK,oBAE1B4G,EAAME,GAAcE,MAG5B7H,EAAEgI,KAAK,CACHhC,IAAKA,EACLiC,KAAM,OACNC,SAAU,OACVrH,KAAM,CAAEsH,aAAcC,KAAKC,UAAUZ,IACrCa,QAAS,SAAUzH,GACXA,GAAQA,EAAK0H,cACb7F,OAAO8F,SAASnC,KAAOxF,EAAK0H,gBAIxCvI,EAAEuH,UAAUkB,UAGhBzI,EAAE,QAAQmE,GAAG,QAAS,qCAAqC,WACvD,IAAIuE,EAAc1I,EAAEkB,MAAMyH,SACtBC,EAAWF,EAAY3G,SAAS,UAChC6C,EAAQ5E,EAAEkB,MAEdlB,EAAE,gCACG6I,QAAO,WACJ,OAAQjE,EAAME,QAAQ5D,KAAM,0BAA0BZ,UAEzDkE,YAAY,UACjBkE,EAAYI,YAAY,UAAWF,MAGvC5I,EAAE,QAAQmE,GAAG,QAAS,2CAA2C,WAC7D,IAAM4E,EAAiB/I,EAAE,QAAQa,KAAK,mBAElCmI,EAAUC,gBAAkBvG,OAAOuG,eAEvCvG,OAAOwG,QAAQC,kBAAoB,SACpCH,EAAQI,QAAQ,mBAAoBL,MAwBvC/I,EAAEiE,UAAUC,OAAM,WACdZ,OAMJtD,EAAE,QAAQmE,GAAG,gCAAgC,WACzCb,Q;;;;;;;IC1SF,SAAU+F,GACX,IAAIC,EASJ,QAPO,0BAANC,KAAM,kCACND,GAA2B,EAEL,WAAnB,EAAO7L,KACVC,EAAOD,QAAU4L,IACjBC,GAA2B,IAEvBA,EAA0B,CAC9B,IAAIE,EAAa9G,OAAOW,QACpBoG,EAAM/G,OAAOW,QAAUgG,IAC3BI,EAAIC,WAAa,WAEhB,OADAhH,OAAOW,QAAUmG,EACVC,IAfR,EAkBA,WACD,SAASE,IAGR,IAFA,IAAIhM,EAAI,EACJiM,EAAS,GACNjM,EAAIkM,UAAUvJ,OAAQ3C,IAAK,CACjC,IAAImM,EAAaD,UAAWlM,GAC5B,IAAK,IAAIuB,KAAO4K,EACfF,EAAO1K,GAAO4K,EAAW5K,GAG3B,OAAO0K,EAGR,SAASG,EAAQrK,GAChB,OAAOA,EAAEsK,QAAQ,mBAAoBC,oBA0HtC,OAvHA,SAASC,EAAMC,GACd,SAASV,KAET,SAASW,EAAKlL,EAAKN,EAAOkL,GACzB,GAAwB,oBAAb7F,SAAX,CAQkC,iBAJlC6F,EAAaH,EAAO,CACnBU,KAAM,KACJZ,EAAIa,SAAUR,IAEKS,UACrBT,EAAWS,QAAU,IAAIC,KAAkB,EAAb,IAAIA,KAAkC,MAArBV,EAAWS,UAI3DT,EAAWS,QAAUT,EAAWS,QAAUT,EAAWS,QAAQE,cAAgB,GAE7E,IACC,IAAIb,EAASxB,KAAKC,UAAUzJ,GACxB,UAAU8L,KAAKd,KAClBhL,EAAQgL,GAER,MAAOe,IAET/L,EAAQuL,EAAUS,MACjBT,EAAUS,MAAMhM,EAAOM,GACvB2L,mBAAmBC,OAAOlM,IACxBoL,QAAQ,4DAA6DC,oBAExE/K,EAAM2L,mBAAmBC,OAAO5L,IAC9B8K,QAAQ,2BAA4BC,oBACpCD,QAAQ,UAAWe,QAErB,IAAIC,EAAwB,GAC5B,IAAK,IAAIC,KAAiBnB,EACpBA,EAAWmB,KAGhBD,GAAyB,KAAOC,GACE,IAA9BnB,EAAWmB,KAWfD,GAAyB,IAAMlB,EAAWmB,GAAehE,MAAM,KAAK,KAGrE,OAAQhD,SAASiH,OAAShM,EAAM,IAAMN,EAAQoM,GAG/C,SAASxM,EAAKU,EAAKiM,GAClB,GAAwB,oBAAblH,SAAX,CAUA,IANA,IAAImH,EAAM,GAGNC,EAAUpH,SAASiH,OAASjH,SAASiH,OAAOjE,MAAM,MAAQ,GAC1DtJ,EAAI,EAEDA,EAAI0N,EAAQ/K,OAAQ3C,IAAK,CAC/B,IAAI2N,EAAQD,EAAQ1N,GAAGsJ,MAAM,KACzBiE,EAASI,EAAM1D,MAAM,GAAGV,KAAK,KAE5BiE,GAA6B,MAArBD,EAAOK,OAAO,KAC1BL,EAASA,EAAOtD,MAAM,GAAI,IAG3B,IACC,IAAI1J,EAAO6L,EAAOuB,EAAM,IAIxB,GAHAJ,GAAUf,EAAUqB,MAAQrB,GAAWe,EAAQhN,IAC9C6L,EAAOmB,GAEJC,EACH,IACCD,EAAS9C,KAAKqD,MAAMP,GACnB,MAAOP,IAKV,GAFAS,EAAIlN,GAAQgN,EAERhM,IAAQhB,EACX,MAEA,MAAOyM,KAGV,OAAOzL,EAAMkM,EAAIlM,GAAOkM,GAoBzB,OAjBA3B,EAAIW,IAAMA,EACVX,EAAIjL,IAAM,SAAUU,GACnB,OAAOV,EAAIU,GAAK,IAEjBuK,EAAIiC,QAAU,SAAUxM,GACvB,OAAOV,EAAIU,GAAK,IAEjBuK,EAAIkC,OAAS,SAAUzM,EAAK4K,GAC3BM,EAAIlL,EAAK,GAAIyK,EAAOG,EAAY,CAC/BS,SAAU,MAIZd,EAAIa,SAAW,GAEfb,EAAImC,cAAgB1B,EAEbT,EAGDS,EAAK,mB,iCChKb,IAAI2B,EAAmBvK,EAAQ,KAC3B0B,EAAc1B,EAAQ,IACtBD,EAAaC,EAAQ,GACrBwK,EAAexK,EAAQ,IACvByK,EAAgB,GAEhBC,EAAmB,SAAUhG,EAAK9H,EAAMU,GAExC,IAAiC,IAA7BoH,EAAIiG,QAAQ/N,EAAO,KACnB,OAAO8H,EAEX,IAAIkG,GAAkC,IAAtBlG,EAAIiG,QAAQ,KAAc,IAAM,IAChD,OAAOjG,EAAMkG,EAAYhO,EAAO,IAAM2M,mBAAmBjM,IAGzDuN,EAAe,SAAUC,GAEzB,IAAIC,EAAO,EAEX,GAAsB,IAAlBD,EAAO9L,OAAc,OAAO+L,EAEhC,IAAK,IAAI1O,EAAI,EAAGA,EAAIyO,EAAO9L,OAAQ3C,IAAK,CAEpC0O,GAAQA,GAAQ,GAAKA,EADVD,EAAOE,WAAW3O,GAE7B0O,GAAQA,EAEZ,OAAOA,GAoBX,SAASE,IAEL,GAAIvM,EAD8B,kBACCM,OAAS,GAAKN,EADf,kBAC8CwM,SAAS,MAAMlM,OAAS,EAAG,CACvG,IAAImM,EAAkB,EACtBzM,EAH8B,kBAGC+D,KAAK,mBAAmB9C,MAAK,SAAUyL,EAAOC,GACzEF,GAAmBzM,EAAE2M,GAAKC,gBAE1B5M,EAAE0C,QAAQmK,SAAW,KAAOJ,EAAkBzM,EANpB,kBAMmD4M,cACzE5M,EAPsB,kBAOS+B,SAAS,sBACxC/B,EARsB,kBAQS6B,MAAM,WAEzC7B,EAV0B,kBAUK6B,MAAM,CACjCiL,UAAU,EACVlJ,aAAa,EACbmJ,aAAc,EACdC,eAAe,EACfC,eAAgB,EAChBvJ,QAAQ,EACRwJ,WAAW,EACXC,WAAW,EACXC,cAAc,EACdC,OAAO,EACPC,WAAY,CACR,CACIC,WAAY,IACZC,SAAU,eAIfxN,EA5BmB,kBA4BY+B,SAAS,sBAC/C/B,EA7B0B,kBA6BK6B,MAAM,YASjD,SAAS4L,EAA0BC,GAC/B1N,EAAE,mCAAmCsH,QAAQX,KAAK+G,EAAS3J,KAAK,mCAAmC4C,QACnGgH,YAAW,WACPpB,MACD,KAUP,SAASqB,EAAUF,EAAUG,GACzB,IAAIC,EAAWJ,EAAS3J,KAAK8J,GAC7B7N,EAAE6N,GACGvG,QACAX,KAAKmH,EAASnH,QACnB3G,EAAE,wBAAwB2G,KAAK3G,EAAE,iBAAiB2G,QAC9C3G,EAAE,8BAA8BM,OAAS,GACzCN,EAAE,8BAA8B2G,KAAK+G,EAAS3J,KAAK,8BAA8B4C,QAIjF3G,EAAE,wBAAwBM,OAAS,GACnCN,EAAE,wBAAwB2G,KAAK+G,EAAS3J,KAAK,6BAA6B4C,QAI9E,IAAIoH,EAAwB/N,EAAE,yBAC1B+N,EAAsBzN,OAAS,GAC/ByN,EAAsBpH,KAAK+G,EAAS3J,KAAK,8BAA8B4C,QAU/E,SAASqH,EAAkBN,GACvB1N,EAAE,sBAAsBiB,MAAK,WACzBjB,EAAEkB,MAAMsD,YAAY,UACpB,IAAIyJ,EAAYP,EAAS3J,KAAK,IAAM/D,EAAEkB,MAAM,GAAGgN,UAAUlE,QAAQ,KAAM,MACvEiE,EAAUjK,SAAS,UACnBiK,EAAUlK,KAAK,gBAAgBgB,KAAK,gBAAiB,WAGzD6I,EAAUF,EAAU,gBAQxB,SAASS,EAAcT,GAEnBE,EADiB5N,EAAE,UAAU2G,KAAK+G,GACZ,mBAS1B,SAASU,EAAaC,GAClB,IAAIX,EAAW1N,EAAEqO,GACbC,EAAkB,CAClB,eAAgBN,EAChB,kBAAmBG,EACnB,kCAAmCV,GAIvC,CAAC,eAAgB,cAAe,qBAAsB,gBAAiB,aAAc,eAAec,SAAQ,SAAUV,GAClHD,EAAUF,EAAUG,MAGxBxP,OAAOsD,KAAK2M,GAAiBC,SAAQ,SAAUV,GAC3CS,EAAgBT,GAAUH,MAIlC1N,EAAE,QAAQmE,GAAG,yBAAyB,SAAUwG,EAAG6D,GAC/C,IAAIC,EACAC,EAAc1O,EAAE,2BAA2Ba,KAAK,QACpD,GAAI6N,EACA,GAAIF,EAAe,CACf,IAAIG,EAEAA,EADAtN,EAAWuN,UAAU,oBACLvN,EAAWuN,UAAU,oBAAoB5E,QAAQ,OAAQ,IAEzD/F,SAAS4K,MAE7B,IAAIC,EAAcN,EAAcO,MAAM,gBACtC,GAAID,EAAa,CAIb,IAHA,IAAI9I,EAAM0I,EAAYzH,MAAM,MACxB+H,EAAShJ,EAAI,GACbiJ,EAAkB,EACbtR,EAAI,EAAGA,EAAImR,EAAYxO,OAAQ3C,IACpC,GAA4E,SAAxE0D,EAAW6N,0BAA0BJ,EAAYnR,GAAI6Q,GAA2B,CAChF,IAAIW,EAAeL,EAAYnR,GAAGqM,QAAQ,QAAS,OAC/CoF,EAAkB/N,EAAW6N,0BAA0BC,EAAcX,GACxDY,EAAgBC,SAAS,OAEtCZ,EAAmBW,EAAgB7D,OAAO,GAAG+D,cAAgBF,EAAgBxH,MAAM,GAAGR,eAEtFgI,IAEwB,KADxBH,GAAmB,GAEU,MAArBD,EAAOpH,OAAO,GACdoH,GAAkBI,EAElBJ,EAASA,EAAS,IAAMI,EAG5BJ,EAASA,EAAS,IAAMI,GAKpCpJ,EAAI,KACJgJ,EAASA,EAAS,KAAOhJ,EAAI,IAEjCkD,QAAQqG,UAAU,GAAI,GAAIP,GACC,IAAvBF,EAAYxO,QAAgBmO,GAC5BxK,SAAS4K,MAAQJ,EAAmB,IAAME,EAC1C3O,EAAE,qBAAqB+E,KAAK,OAAQ1D,EAAWmO,iBAAiBR,IAChEhP,EAAE,mBAAmB+E,KAAK,UAAW,kBAErCd,SAAS4K,MAAQF,EACjB3O,EAAE,mBAAmB+E,KAAK,UAAW,oBACrC/E,EAAE,qBAAqB+E,KAAK,OAAQ1D,EAAWmO,iBAAiBd,UAGpEzK,SAAS4K,MAAQF,EACjBzF,QAAQqG,UAAU,GAAI,GAAIb,GAC1B1O,EAAE,mBAAmB+E,KAAK,UAAW,gBACrC/E,EAAE,qBAAqB+E,KAAK,OAAQ1D,EAAWmO,iBAAiBd,SAGpExF,QAAQqG,UAAU,GAAItL,SAAS4K,MAAOH,GAI9C1O,EAAE,4BAA4BiB,MAAK,SAAUwO,EAAQC,GAC7CA,GAAmE,IAA1CA,EAAsBlD,SAASlM,QACxDoP,EAAsB/D,eAKlCjJ,OAAOiN,mBAAoB,EAqC3B,IAAIC,EAAc,SAAUC,EAAOC,EAAa9J,GAC5C+F,EAAchE,KAAK8H,GACnB,IAAIE,EAAWD,EAAYD,GACvBG,EAAchK,EAAI+I,MAAM,oBAC5B,GAAIiB,GAAeA,EAAY1P,OAAQ,CACnC,IAAI6O,EAAea,EAAY,GAAGhG,QAAQ,QAAS,OAC/CiG,EAAK,IAAIC,OAAOf,EAAe,YAGnC,GAAIY,EAEA,OADA/J,EAAMA,EAAIgE,QAAQiG,EAAId,EAAe,IAAMY,EAAS7I,KAAK,MAI7D,IAAIiJ,EAAU,IAAID,OAAO,qBACrBE,EAAU,IAAIF,OAAOf,EAAe,cACxC,OAAOnJ,EAAIgE,QAAQmG,EAAS,IAAInG,QAAQoG,EAAS,IAIrD,IAAIC,EAAW,SACXC,EAAY,SAMhB,OARAN,EAAchK,EAAI+I,MAAM,gBAGLiB,EAAY1P,SAC3B+P,EAAW,SAAWL,EAAY1P,OAAS,GAC3CgQ,EAAY,SAAWN,EAAY1P,OAAS,IAEhD0F,EAAMgG,EAAiBhG,EAAKqK,EAAU,QAC/BrE,EAAiBhG,EAAKsK,EAAWP,EAAS7I,KAAK,OAG1DxJ,EAAOD,QAAU,CACboL,OAAQ,WAEJ7I,EAAE,gCAAgCmE,GAAG,QAAS,yBAAyB,WACnEnE,EAAE,sCAAsC4G,OACxC5G,EAAE,mBAAmBuQ,WAAWxL,KAAK,eAAe,GACpD/E,EAAE,mBAAmB8E,QAAQ,QAAQyL,WAAWxL,KAAK,eAAe,GACpE/E,EAAE,mBAAmB8E,QAAQ,oBAAoByL,WAAWxL,KAAK,eAAe,GAChF/E,EAAE,mBAAmB8E,QAAQ,8DAA8DyL,WAAWxL,KAAK,eAAe,GAC1H/E,EAAE,0BAA0BU,YAIpC8P,iBAAkB,WAEdxQ,EAAE,gCAAgCmE,GAAG,QAAS,mDAAmD,WAC7FnE,EAAE,sCAAsCuE,OACxCvE,EAAE,mBAAmBuQ,WAAWxL,KAAK,eAAe,GACpD/E,EAAE,mBAAmB8E,QAAQ,QAAQyL,WAAWxL,KAAK,eAAe,GACpE/E,EAAE,mBAAmB8E,QAAQ,oBAAoByL,WAAWxL,KAAK,eAAe,GAChF/E,EAAE,mBAAmB8E,QAAQ,8DAA8DyL,WAAWxL,KAAK,eAAe,GAC1H/E,EAAE,uBAAuBU,YAIjC+P,OAAQ5E,EAAiB6E,QAEzBC,KAAM,WACF3Q,EAAE,gCAAgCmE,GAAG,SAAU,qBAAqB,SAAUwG,GAC1EA,EAAEhK,iBAEFX,EAAEkB,MAAMoD,QAAQ,cAAe,CAACpD,KAAKtC,MAAOsC,KAAK0P,QAAQ1P,KAAK0P,QAAQC,eAAe3K,OACrFlG,EAAEuH,UAAUC,QACZxH,EAAEgI,KAAK,CACHhC,IAAK9E,KAAKtC,MACViC,KAAM,CAAEiQ,YAAa5P,KAAKtC,OAC1BmS,OAAQ,MACRzI,QAAS,SAAU+F,GACfrO,EAAE,iBACGsH,QACAX,KAAK0H,GACVrO,EAAE,QAAQsE,QAAQ,yBAClBtE,EAAEuH,UAAUkB,OACZ/F,OAAOiN,mBAAoB,GAE/BqB,SAAU,WACNhR,EAAE,QAAQsE,QAAQ,gCAClBtE,EAAEuH,UAAUkB,QAEhBwI,MAAO,WACHjR,EAAEuH,UAAUkB,cAM5ByI,SAAU,WAENlR,EAAE,gCAAgCmE,GAAG,QAAS,qBAAqB,SAAUwG,GACzEA,EAAEwG,kBACF,IAAIC,EAAcpR,EAAEkB,MAAML,KAAK,OAC3B2C,EAAU,CACVC,SAAU,WACVC,QAAQ,EACRC,MAAM,GAENE,EAA2B7D,EAAE,0BAEjC2K,EAAEhK,iBAEFX,EAAEkB,MAAM8C,SAAS,WAEjBhE,EAAEuH,UAAUC,QACZxH,EAAEkB,MAAMoD,QAAQ,kBAAmBqG,GACnC3K,EAAEgI,KAAK,CACHhC,IAAKoL,EACLvQ,KAAM,CAAEiQ,YAAaM,GACrBL,OAAQ,MACRzI,QAAS,SAAU+F,GAIf,GAHArO,EAAE,gBAAgBqR,YAAYhD,GAhWlD,SAA2BA,GACRrO,EAAE,SAAS8G,OAAO9G,EAAEqO,IACRtK,KAAK,gBAAgBlD,KAAK,gBAAgB+P,QACzDrC,SAAQ,SAAU+C,GAC1BtR,EAAE,UAAYsR,EAAO1L,IAAIzE,IAAImQ,EAAOtL,QA6VxBuL,CAAkBlD,GAClBrO,EAAE,QAAQsE,QAAQ,0BACbjD,EAAWK,QAAQmC,IAA6BxC,EAAWkC,WAAY,CACxE,IAAIO,EAAYD,EAAyBE,KAAK,8CAC9CP,EAAQI,aAAc,EAxHdpC,EAyHesC,EAzHVrC,EAyHqB+B,EAxHlDnC,EAAWK,QAAQF,IAA6C,IAArCnD,OAAOsD,KAAKF,GAAcnB,QAEzD0C,EAAYf,eAAeT,EAAKC,GAuHZoC,EAAyBE,KAAK,kCAAkCC,SAAS,cA1HjG,IAAgCxC,EAAKC,EA4HjBzB,EAAEuH,UAAUkB,OACZzI,EAAE,6DAA6D4G,OAC/D5G,EAAEkB,MAAMsD,YAAY,WACpB9B,OAAOiN,mBAAoB,EAEL,oBAAX6B,QACPA,OAAOC,GAAGC,WAGlBV,SAAU,WACNhR,EAAE,QAAQsE,QAAQ,iCAEtB2M,MAAO,WACHjR,EAAEuH,UAAUkB,OACZzI,EAAEkB,MAAMsD,YAAY,kBAMpCmN,YAAa,WAET3R,EAAE,gCACG4R,OAAO,WACPzN,GACG,gBACA,6PACA,SAAUwG,GACN,GAAe,UAAXA,EAAE1C,MAAgC,KAAZ0C,EAAEkH,OAA4B,KAAZlH,EAAEkH,MAAc,CACxDlH,EAAEhK,iBACFgK,EAAEwG,kBAEFnR,EAAEkB,MAAMoD,QAAQ,gBAAiBqG,GAEjC,IAAImH,EAAS9R,EAAEkB,MAAML,KAAK,QAEtBkR,EAAYpH,EAAE1C,KAGd+J,EAAShS,EAAEkB,MAAMa,SAAS,YAE1BkQ,EAAQH,EAAO/C,MAAM,gBACzB,GAAIkD,EAAO,CACP,IAAIC,EAAOD,EAAM,GACjBjS,EAAE,2BACG+E,KAAK,YAAamN,GAClBrR,KAAK,QAGd,IAAImF,EAAMhG,EAAEkB,MAAML,KAAK,QAEvB,GAAIb,EAAE2K,EAAEwH,QAAQpQ,SAAS,SACrBgK,EAAcqG,MACdpM,EAAMhG,EAAE2K,EAAEwH,QAAQtR,KAAK,QACvBmF,EAAMgG,EAAiBhG,EAAK,YAAa,cACtC,GAAIgM,IAAWjG,EAAczL,OAAQ,CAGxC,GAFmBN,EAAE,iBACYK,GAAG,YAEhC,IACI,IAAIwP,EAAQ7J,EAAI+I,MAAM,gBAAgB,GAClCtH,EAAQpG,EAAWuN,UAAU,SAC7BkB,EAAc1H,KAAKqD,MAAMrD,KAAKqD,MAAMhE,IACxC,GAAIqI,EAAa,CACb/D,EAAchE,KAAK8H,GACnB,IAAIE,EAAWD,EAAYD,GACvBG,EAAchK,EAAI+I,MAAM,oBAC5B,GAAIiB,GAAeA,EAAY1P,OAAQ,CACnC,IAAI6O,EAAea,EAAY,GAAGhG,QAAQ,QAAS,OAC/CiG,EAAK,IAAIC,OAAOf,EAAe,YAG/BY,IACA/J,EAAMA,EAAIgE,QAAQiG,EAAId,EAAe,IAAMY,EAAS7I,KAAK,WAE1D,CACH8I,EAAchK,EAAI+I,MAAM,cACxB,IAAIsB,EAAW,SACXC,EAAY,SACZN,GAAeA,EAAY1P,SAC3B+P,EAAW,SAAWL,EAAY1P,OAAS,GAC3CgQ,EAAY,SAAWN,EAAY1P,OAAS,IAEhD0F,EAAMgG,EAAiBhG,EAAKqK,EAAU,QACtCrK,EAAMgG,EAAiBhG,EAAKsK,EAAWP,EAAS7I,KAAK,MAGzD,IAAImL,EAAYlG,EAAa1E,GAC7BzB,EAAMgG,EAAiBhG,EAAK,UAAWqM,IAE7C,MAAOC,GACL5P,OAAO6P,QAAQtB,MAAMtG,EAAE6H,UAKnCxS,EAAEuH,UAAUC,QAEZxH,EAAEgI,KAAK,CACHhC,IAAKA,EACLnF,KAAM,CACF4R,KAAMzS,EAAE,gBAAgBa,KAAK,eAC7BiQ,YAAa9K,GAEjB+K,OAAQ,MACRzI,QAAS,SAAU+F,GACXA,EAASqE,SACThQ,OAAO8F,SAASnC,KAAOgI,EAASqE,UAGpCtE,EAAaC,GAEbrO,EAAE,QAAQsE,QAAQ,wBAAyB0B,GACzB,UAAd+L,IAAoC,IAAXC,GACzBrE,YAAW,WACP3N,EAAE,sBAAsBU,UACzB,GAEPgC,OAAOiN,mBAAoB,IAE/BqB,SAAU,WACNhR,EAAE,QAAQsE,QAAQ,gCAClBtE,EAAEuH,UAAUkB,eAOxCkK,WAAY,WAER3S,EAAE,iCAAiCmE,GAAG,SAAU,iBAAiB,SAAUwG,GAEvE,IAAImF,EADJnF,EAAEiI,2BAEF,IAAIC,EAAW7S,EAAEkB,MAAMb,GAAG,YACtB2F,EAAMhG,EAAEkB,MAAML,KAAK,OAGnBgP,GADJ7J,EAAMA,EAAIgE,QAAQ,sBAAuB,KACzB+E,MAAM,gBAAgB,GAEtC,GAAI8D,EAAU,CAEV,IACI,IAAIpL,EAAQpG,EAAWuN,UAAU,SAEjC,GADAkB,EAAc1H,KAAKqD,MAAMrD,KAAKqD,MAAMhE,IACnB,CACbzB,EAAM4J,EAAYC,EAAOC,EAAa9J,GAEtC,IAAIqM,EAAYlG,EAAa1E,GAC7BzB,EAAMgG,EAAiBhG,EAAK,UAAWqM,IAE7C,MAAOC,GACL5P,OAAO6P,QAAQtB,MAAMqB,EAAIE,SAE7BxM,EAAMgG,EAAiBhG,EAAK,YAAa,QACzCiD,eAAe6J,YAAc,SAC1B,CAEH,IAGI,GAFA/G,EAAcqG,MACdtC,EAAc1H,KAAKqD,MAAMrD,KAAKqD,MAAMpK,EAAWuN,UAAU,WACxC,CACb,IAAImB,EAAWD,EAAYD,GACvBG,EAAchK,EAAI+I,MAAM,oBAC5B,GAAIiB,GAAeA,EAAY1P,OAAQ,CACnC,IAAI6O,EAAea,EAAY,GAAGhG,QAAQ,QAAS,OAC/CiG,EAAK,IAAIC,OAAOf,EAAe,YAC/B4D,EAAW/M,EAAI+I,MAAMkB,GACzB,GAAI8C,EAAS,GAAI,CAEb,IACIC,EADW/I,mBAAmB8I,EAAS,IAAI9L,MAAM,KACxB4B,QAAO,SAAUoK,GAC1C,OAAOlD,EAAS9D,QAAQgH,GAAQ,KAEpCjN,EAAMA,EAAIgE,QAAQiG,EAAId,EAAe,IAAM6D,EAAc9L,KAAK,SAI5E,MAAOoL,GACL5P,OAAO6P,QAAQtB,MAAMqB,EAAIE,SAE7BxM,EAAMgG,EAAiBhG,EAAK,YAAa,SACzCiD,eAAe6J,YAAc,MAGjC,IAAIf,EAAYpH,EAAE1C,KAEdiL,EAAQlT,EAAEkB,MAAML,KAAK,MAGrBmR,EAAShS,EAAEkB,MAAMa,SAAS,YAE9B/B,EAAEuH,UAAUC,QAEZxH,EAAEgI,KAAK,CACHhC,IAAKA,EACLnF,KAAM,CACF4R,KAAMzS,EAAE,gBAAgBa,KAAK,eAC7BiQ,YAAa9K,GAEjB+K,OAAQ,MACRzI,QAAS,SAAU+F,GAEf,IADArO,EAAEuH,UAAUkB,OACR4F,EAAS8E,wBACmB9R,EAAWuN,UAAUP,EAAS8E,uBAEtD,OAGR/E,EAAaC,GACbrO,EAAE,QAAQsE,QAAQ,yBACA,UAAdyN,QAAmCqB,IAAVF,GACzBvF,YAAW,WACP3N,EAAE,IAAMkT,GAAOxS,UAChB,GAEW,UAAdqR,IAAoC,IAAXC,GACzBrE,YAAW,WACP3N,EAAE,sBAAsBU,UACzB,GAEPgC,OAAOiN,mBAAoB,GAE/BqB,SAAU,WACNhR,EAAE,QAAQsE,QAAQ,gCAClBtE,EAAEuH,UAAUkB,QAEhBwI,MAAO,WACHjR,EAAEuH,UAAUkB,cAK5B4K,UAAW,WACP,IAAIpK,eAAe6J,aAA8C,QAA/B7J,eAAe6J,YAAjD,CAGA,IAAIrL,EAAQpG,EAAWuN,UAAU,SACjC,GAAKnH,EAIL,IAA+C,IAA3C/E,OAAO8F,SAASnC,KAAK4F,QAAQ,SAKjC,IADiBjM,EAAE,eACJM,OAAf,CAIA,IAAIgT,EAAetT,EAAE,iBACjBgG,EAAMtD,OAAO8F,SAASnC,KAC1B,GAAIiN,EAAahT,OAAS,EAA1B,CAKA,IAAIuP,GAJA7J,EAAMsN,EAAazS,KAAK,QAIZkO,MAAM,gBAAgB,GACtC,GAAKc,GAGA7J,EAAL,CAGA,IACIyB,EAAQpG,EAAWuN,UAAU,SAC7B,IAAIkB,EAAc1H,KAAKqD,MAAMrD,KAAKqD,MAAMhE,IACpCqI,IACA9J,EAAM4J,EAAYC,EAAOC,EAAa9J,IAE5C,MAAOsM,GACL5P,OAAO6P,QAAQtB,MAAMqB,EAAIE,SAE7BxM,EAAMgG,EAAiBhG,EAAK,YAAa,QACzCA,EAAMgG,EAAiBhG,EAAK,QAAS,QAErChG,EAAEuH,UAAUC,QACZxH,EAAE,QAAQsG,IAAI,aAAc,UAC5BtG,EAAEgI,KAAK,CACHhC,IAAKA,EACLnF,KAAM,CACF4R,KAAMzS,EAAE,gBAAgBa,KAAK,eAC7BiQ,YAAa9K,GAEjB+K,OAAQ,MACRzI,QAAS,SAAU+F,GACfrO,EAAE,QAAQsG,IAAI,aAAc,QACxB+H,EAASqE,WAGbtE,EAAaC,GACbrO,EAAE,QAAQsE,QAAQ,yBAClB5B,OAAOiN,mBAAoB,IAE/BsB,MAAO,WACHjR,EAAE,QAAQsG,IAAI,WAAY,SAE9B0K,SAAU,WACNhR,EAAEuH,UAAUkB,eAIxB8K,eAAgB1H,EAAiB0H,eACjCC,mBAtcJ,WACIxT,EAAE,QAAQmE,GAAG,QAAS,wDAAwD,WAC1E,GAAInE,EAAE,cAAcM,OAAS,EAAG,CAC5B,IAAI0F,EAAMhG,EAAE,cAAc+E,KAAK,UACE,IAA7BrC,OAAOiN,mBACPjN,OAAOwG,QAAQqG,UAAU,GAAI,GAAIvJ,QAkc7CyN,8BA3bgC,WAC5BxK,eAAeyK,QAAQ,sBAEvBzK,eAAe0K,WAAW,oBAC1BjR,OAAOwG,QAAQC,kBAAoB,SAwbvCyK,YAAa,WACT,IAAIC,EACAC,GAAmB,EAKvB9T,EAAEiE,UAAU8P,aAAY,SAAUlU,EAAOmU,GAEjCA,EAAIC,aAAahI,QAAQ,+BAAiC,IACrD6H,GACDnG,YAAW,WACPzE,QAAQqG,UAAU,CAAE2E,gBAAgB,GAAQjQ,SAAS4K,MAAOsF,UAAUnU,EAAE,cAAcmB,WAI9F2S,GAAmB,MAO3BpR,OAAO0R,iBAAiB,YAAY,WAChC,GAAKlL,QAAQmL,OAASnL,QAAQmL,MAAMH,gBAAoBL,GAAwBA,EAAqBK,eAAiB,CAClH,IAAII,EAAetU,EAAE,gCAErB6T,EAAuB3K,QAAQmL,MAG/BP,GAAmB,EAGnBQ,EAAazT,KAAK,OAAQsT,UAAUzR,OAAO8F,SAASnC,OACpDiO,EAAahQ,QAAQ,cAIjCiQ,oBAAqB,WACjBvU,EAAE0C,QAAQyB,GAAG,QAAQ,WACjBoI,OAGJvM,EAAE0C,QAAQyB,GAAG,UAAU,WACnBoI,QAGRiI,gBAAiB1I,EAAa2I,iB,iCCruBlC,SAAS7G,EAAUF,EAAUG,GACzB,IAAIC,EAAWJ,EAAS3J,KAAK8J,GAC7B7N,EAAE6N,GAAUvG,QAAQX,KAAKmH,EAASnH,QAStC,SAASqH,EAAkBN,GACvB1N,EAAE,sBAAsBiB,MAAK,WACzBjB,EAAEkB,MAAMsD,YAAY,UACpB,IAAIyJ,EAAYP,EAAS3J,KAAK,IAAM/D,EAAEkB,MAAM,GAAGgN,UAAUlE,QAAQ,KAAM,MACvEiE,EAAUjK,SAAS,UACnBiK,EAAUlK,KAAK,gBAAgBgB,KAAK,gBAAiB,WAGzD6I,EAAUF,EAAU,gBAsCxB,SAASgH,EAAWvS,EAAUwS,GAC1B,IAAIvD,EAAcjP,EAAStB,KAAK,OAChCb,EAAEuH,UAAUC,QACZxH,EAAEgI,KAAK,CACHhC,IAAKoL,EACLL,OAAQ,MACRzI,QAAS,SAAU+F,GACfsG,EAAQ7N,OAAOuH,GACfrO,EAAEuH,UAAUkB,QAEhBwI,MAAO,WACHjR,EAAEuH,UAAUkB,UAmBxB/K,EAAOD,QAAU,CACboL,OAAQ,WAEJ7I,EAAE,cAAcmE,GAAG,QAAS,yBAAyB,WACjDnE,EAAE,sCAAsC4G,OACxC5G,EAAE,mBAAmBuQ,WAAWxL,KAAK,eAAe,GACpD/E,EAAE,mBAAmB8E,QAAQ,QAAQyL,WAAWxL,KAAK,eAAe,GACpE/E,EAAE,mBAAmB8E,QAAQ,oBAAoByL,WAAWxL,KAAK,eAAe,GAChF/E,EAAE,mBAAmB8E,QAAQ,6BAA6ByL,WAAWxL,KAAK,eAAe,GACzF/E,EAAE,0BAA0BU,YAIpC8P,iBAAkB,WAEdxQ,EAAE,cAAcmE,GAAG,QAAS,mDAAmD,WAC3EnE,EAAE,sCAAsCuE,OACxCvE,EAAE,mBAAmBuQ,WAAWxL,KAAK,eAAe,GACpD/E,EAAE,mBAAmB8E,QAAQ,QAAQyL,WAAWxL,KAAK,eAAe,GACpE/E,EAAE,mBAAmB8E,QAAQ,oBAAoByL,WAAWxL,KAAK,eAAe,GAChF/E,EAAE,mBAAmB8E,QAAQ,6BAA6ByL,WAAWxL,KAAK,eAAe,GACzF/E,EAAE,uBAAuBU,YAIjC+P,OAAQ,WAEJzQ,EAAE0C,QAAQ+N,QAAO,WACbzQ,EAAE,sCAAsCuE,OACxCvE,EAAE,mBAAmBuQ,WAAWxL,KAAK,eAAe,GACpD/E,EAAE,mBAAmB8E,QAAQ,QAAQyL,WAAWxL,KAAK,eAAe,GACpE/E,EAAE,mBAAmB8E,QAAQ,oBAAoByL,WAAWxL,KAAK,eAAe,GAChF/E,EAAE,mBAAmB8E,QAAQ,6BAA6ByL,WAAWxL,KAAK,eAAe,OAIjG4L,KAAM,WAEF3Q,EAAE,cAAcmE,GAAG,SAAU,qBAAqB,SAAUwG,GACxDA,EAAEhK,iBAEFX,EAAEuH,UAAUC,QACZxH,EAAEkB,MAAMoD,QAAQ,cAAepD,KAAKtC,OACpCoB,EAAEgI,KAAK,CACHhC,IAAK9E,KAAKtC,MACViC,KAAM,CAAEiQ,YAAa5P,KAAKtC,OAC1BmS,OAAQ,MACRzI,QAAS,SAAU+F,GACfrO,EAAE,iBAAiBsH,QAAQX,KAAK0H,GAChCrO,EAAEuH,UAAUkB,QAEhBwI,MAAO,WACHjR,EAAEuH,UAAUkB,cAM5ByI,SAAU,WAENlR,EAAE,cAAcmE,GAAG,QAAS,qBAAqB,SAAUwG,GACvDA,EAAEwG,kBACF,IAAIC,EAAcpR,EAAEkB,MAAML,KAAK,OAC/B8J,EAAEhK,iBAEFX,EAAEuH,UAAUC,QACZxH,EAAEkB,MAAMoD,QAAQ,kBAAmBqG,GACnC3K,EAAEgI,KAAK,CACHhC,IAAKoL,EACLvQ,KAAM,CAAEiQ,YAAaM,GACrBL,OAAQ,MACRzI,QAAS,SAAU+F,GACfrO,EAAE,gBAAgBqR,YAAYhD,GAhFlD,SAA2BA,GACRrO,EAAE,SAAS8G,OAAO9G,EAAEqO,IACRtK,KAAK,gBAAgBlD,KAAK,gBAAgB+P,QACzDrC,SAAQ,SAAU+C,GAC1BtR,EAAE,UAAYsR,EAAO1L,IAAIzE,IAAImQ,EAAOtL,QA6ExBuL,CAAkBlD,GAClBrO,EAAEuH,UAAUkB,QAEhBwI,MAAO,WACHjR,EAAEuH,UAAUkB,cAM5BkJ,YAAa,WAET3R,EAAE,cAAcmE,GACZ,QACA,qGACA,SAAUwG,GACNA,EAAEhK,iBACFgK,EAAEwG,kBAEFnR,EAAEuH,UAAUC,QACZxH,EAAEkB,MAAMoD,QAAQ,gBAAiBqG,GACjC3K,EAAEgI,KAAK,CACHhC,IAAKhG,EAAEkB,MAAML,KAAK,QAClBA,KAAM,CACF4R,KAAMzS,EAAE,gBAAgBa,KAAK,eAC7BiQ,YAAa9Q,EAAEkB,MAAML,KAAK,SAE9BkQ,OAAQ,MACRzI,QAAS,SAAU+F,IAhKvC,SAAsBA,GAClB,IAAIX,EAAW1N,EAAEqO,GACbC,EAAkB,CAClB,eAAgBN,GAIpB,CACI,eACA,cACA,qBACA,gBACA,aACA,eACFO,SAAQ,SAAUV,GAChBD,EAAUF,EAAUG,MAGxBxP,OAAOsD,KAAK2M,GAAiBC,SAAQ,SAAUV,GAC3CS,EAAgBT,GAAUH,MA8IVU,CAAaC,GACbrO,EAAEuH,UAAUkB,QAEhBwI,MAAO,WACHjR,EAAEuH,UAAUkB,cAMhC8K,eAAgB,WAEZvT,EAAE,cAAcmE,GAAG,QAAS,mBAAmB,WACC,KAAxCnE,EAAE,2BAA2B2G,QAC7B+N,EAAW1U,EAAEkB,MAAOlB,EAAE,+BAK9BA,EAAE,cAAcmE,GAAG,QAAS,6BAA6B,WACrDuQ,EAAW1U,EAAEkB,MAAOlB,EAAE,4BACtBA,EAAE,sBAAsB2L,e,gCCpNpC,SAASiJ,EAAe/T,EAAMgU,GAG1B,IAAIC,EADJ9U,EAAEuH,UAAUkB,OAER5H,EAAKyH,SACLuM,EAAO7Q,SAAS,UAChB8Q,EAAS,gBACTD,EAAO9P,KAAK,eAAgB,SAG5B+P,EAAS,gBAGiC,IAA1C9U,EAAE,6BAA6BM,QAC/BN,EAAE,UAAU8G,OAAO,8HAEvB9G,EAAE,6BAA6B8G,OAAO,iEAAmEgO,EAAS,MAAQjU,EAAKkU,IAAM,UAErIpH,YAAW,WACP3N,EAAE,6BAA6BsH,QAC/BuN,EAAOG,WAAW,cACnB,KAkCP,SAASC,EAAgBC,GACrBlV,EAAE,kCAAkCiB,MAAK,WACrC,IAAIkU,EAAMnV,EAAEkB,MAAM6D,KAAK,SAASgK,MAAM,eAClCoG,GAAOA,EAAI7U,QAAU4U,EAAcjJ,QAAQkJ,EAAI,GAAGnL,QAAQ,OAAQ,MAAQ,GAC1EhK,EAAEkB,MAAM8C,SAAS,aAS7B,SAASoR,EAA2BF,GAChCD,EAAgBC,GAMpB,SAASG,IACL,GAAIrV,EAAE,qBAAqB+D,KAAK,sBAAsBhC,SAAS,UAC3DuT,aAAa3B,WAAW,qBACrB,CACH,IAAIuB,EAAgBI,aAAa5B,QAAQ,iBACrCwB,IACAA,EAAgB9M,KAAKqD,MAAMyJ,IACT5U,QACd2U,EAAgBC,IAMhCxX,EAAOD,QAAU,CACb8X,cAAe,WACXvV,EAAEiE,UAAUE,GAAG,QAAS,qBAAqB,SAASwG,GAClDA,EAAEhK,iBACF,IAAI6U,EAAoBxV,EAAEkB,MACtB8E,EAAMhG,EAAEkB,MAAML,KAAK,QACnBgU,EAAS7U,EAAEkB,MACXiU,EAAMnV,EAAEkB,MACP4D,QAAQ,mBACRf,KAAK,eACL4C,OACD8O,EAAWzV,EAAEkB,MACZ4D,QAAQ,mBACRf,KAAK,mBACLgB,KAAK,kBACN2Q,EAAY1V,EAAEkB,MACb4D,QAAQ,mBACRf,KAAK,mCACLgB,KAAK,iBACV0Q,EAAWA,GAAY,KACvBC,EAAYA,GAAa,KACzB,IAAIC,EAAoB3V,EAAE,oBACtB4V,EAAQ5V,EAAE,+BAA+BM,OAAS,EAEjD0F,GAAQmP,IAIbnV,EAAEuH,UAAUC,QACZxH,EAAEkB,MAAM6D,KAAK,YAAY,GAIrB6Q,GAASD,EAAkBrV,QAAoF,IAA1EqV,EAAkB5R,KAAK,wCAAwCzD,OAMpGsU,EALe,CACXtM,SAAS,EACTyM,IAAKrS,OAAOU,UAAUyS,oBAGHhB,GAI3B7U,EAAEgI,KAAK,CACHhC,IAAKA,EACLiC,KAAM,OACNC,SAAU,OACVrH,KAAM,CACFsU,IAAKA,EACLM,SAAUA,EACVC,UAAWA,GAEfpN,QAAS,SAASzH,GACVA,EAAKyH,SACLtI,EAAEuH,UAAUkB,OACZzI,EAAE,QAAQsE,QAAQ,iCAAkCzD,GACpDK,KAAK4U,mBACAjV,EAAKkV,YAAclV,EAAK0H,YACzB7F,OAAO8F,SAAW3H,EAAK0H,YAEvBqM,EAAe/T,EAAMgU,KAGzB3T,KAAK4U,kBACLlB,EAAe/T,EAAMgU,KAG7B5D,MAAO,SAASqB,GACZsC,EAAetC,EAAKuC,IAExBiB,gBAAiB,WACbN,EAAkB1Q,QAAQ,mBAAmBf,KAAK,qBAAqBC,SAAS,UAChFhE,EAAE,qBAAqB+D,KAAK,sBAAsBS,YAAY,UAC9DxE,EAAE,qBAAqB+D,KAAK,wBAAwBC,SAAS,UAC7D9C,KAAK8U,wBAETA,qBAAsB,WAClB,IAAId,EAAgBI,aAAa5B,QAAQ,kBAML,KAJhCwB,EADAA,GAAiBA,EAAc5U,OACf8H,KAAKqD,MAAMyJ,GAEX,IAEFjJ,QAAQkJ,KACtBD,EAAcnN,KAAKoN,GACnBG,aAAalM,QAAQ,gBAAiBhB,KAAKC,UAAU6M,aAMzEe,eAAgB,WACZjW,EAAE,QAAQmE,GAAG,QAAS,iBAAiB,SAASwG,GAC5CA,EAAEhK,iBACF,IAAIqF,EAAMhG,EAAEkB,MAAM6D,KAAK,QACnBoQ,EAAMnV,EAAEkB,MAAML,KAAK,OACnB4U,EAAWzV,EAAEkB,MACZ4D,QAAQ,iBACRf,KAAK,4BACLlD,KAAK,aACN6U,EAAY1V,EAAEkB,MACb4D,QAAQ,iBACRf,KAAK,4BACLlD,KAAK,YACV4U,EAAWA,GAAY,KACvBC,EAAYA,GAAa,KACpB1P,GAAQmP,IAIbnV,EAAEuH,UAAUC,QACZxH,EAAEgI,KAAK,CACHhC,IAAKA,EACLiC,KAAM,OACNC,SAAU,OACVrH,KAAM,CACFsU,IAAKA,EACLM,SAAUA,EACVC,UAAWA,GAEfpN,QAAS,SAASzH,GACdb,EAAE,QAAQsE,QAAQ,iCAAkCzD,GAtLxE,SAAyCA,GACrC,IAAIiU,EAASjU,EAAKyH,QAAU,gBAAkB,eAEA,IAA1CtI,EAAE,6BAA6BM,QAC/BN,EAAE,UAAU8G,OAAO,kFAEvB9G,EAAE,6BAA6B8G,OAAO,iDAAmDgO,EAAS,KAAOjU,EAAKkU,IAAM,UAEpHpH,YAAW,WACP3N,EAAE,6BAA6BsH,UAChC,MACH,IAAI4O,EAAiBlW,EAAE,eAAiBa,EAAKsU,IAAM,MAC9CrQ,QAAQ,iBACRf,KAAK,mBACNoS,EAAa,CACbC,UAAWF,EAAerV,KAAK,UAC/BwV,UAAWH,EAAerV,KAAK,OAC/ByV,YAAaJ,EAAerV,KAAK,QACjC0V,KAAML,EAAerV,KAAK,SAE9Bb,EAAE,QAAQsE,QAAQ,uBAAwB6R,GAmK1BK,CAAgC3V,IAEpCmQ,SAAU,WACNhR,EAAEuH,UAAUkB,eAK5BgO,kBAAmB,WAyBf,GAxBApB,IAEArV,EAAE,QAAQmE,GAAG,yBAAyB,WAClCkR,OAGJrV,EAAE,QAAQmE,GAAG,gCAAgC,SAAUwG,EAAG0D,GACtD,IACI,IAAImH,EAAoBnH,EAASxJ,UAAUd,KAAK,qBAC5C2S,EAASlB,EAAkBzQ,KAAK,SAASgK,MAAM,eAC/C2H,GAAUA,EAAOpW,SACjBkV,EACKhR,YAAY,UACZA,YAAYkS,GACZ1S,SAAS,OAASqK,EAASxN,KAAK8V,QAAQ/Q,IAC7CyP,KAGN,MAAO1K,QAMTjI,OAAOU,UAAUwT,SAAU,CAC3B,IAAI1B,EAAgBI,aAAa5B,QAAQ,iBACrCwB,IACAA,EAAgB9M,KAAKqD,MAAMyJ,IACT5U,SACW,aAArB4U,EAAc,GACdlV,EAAEgI,KAAK,CACHhC,IAAKtD,OAAOmU,KAAKC,iBACjB5O,SAAU,OACVI,QAAS,SAAUzH,GACfqU,EAAgBrU,EAAKkW,MACjBlW,EAAKkW,OAASlW,EAAKkW,MAAMzW,QACzB8U,EAA2BF,GAE/BA,EAAc8B,QAAQ,YACtB1B,aAAalM,QAAQ,gBAAiBhB,KAAKC,UAAU6M,OAI7DE,EAA2BF,Q,mBC9QnD,IAAInS,EAAazB,EAAQ,GAiCzB,SAAS2V,EAAoBpW,GAQzB,IAAIqW,EAPJlX,EAAE,eACGuH,UACAC,QAEwC,IAAzCxH,EAAE,4BAA4BM,QAC9BN,EAAE,4BAA4B2L,SAI9BuL,EADArW,EAAKsW,qBACMtW,EAAKuW,yBAELvW,EAAKwW,yBAGpB,IAAIC,EACA,0NAKAzW,EAAK0W,cACL,gBAEA1W,EAAK0V,KACL,mBAEA1V,EAAK2W,QACL,wBAEA3W,EAAK4W,aACL,uCAGA5W,EAAK6W,SACL,mBAEA7W,EAAKuW,yBACL,gCAEAvW,EAAKsW,qBACL,wGAKAtW,EAAK8W,OAAOC,YACZ,0QAWJ5X,EAAE,QAAQ8G,OAAOwQ,GACjBtX,EAAE,eACGuH,UACAC,QAELxH,EAAEgI,KAAK,CACHhC,IAAKkR,EACLnG,OAAQ,MACR7I,SAAU,OACVI,QAAS,SAAU+F,GACf,IAlFO1H,EACXkR,EAiFQC,GAlFGnR,EAkFoB0H,EAAS0J,iBA5ErC,CAAEC,MALLH,EAAQ7X,EAAE,SAAS8G,OAAO9G,EAAEiY,UAAUtR,KAEzB5C,KAAK,sBAGDmU,OAFRL,EAAM9T,KAAK,iBAAiByI,aA+EjCxM,EAAE,wCAAwCsH,QAC1CtH,EAAE,2CAA2CkG,KAAKmI,EAAS8J,oBAC3DnY,EAAE,0DAA0DkG,KAAKmI,EAAS+J,iBAC1EpY,EAAE,wCAAwC2G,KAAKmR,EAAWE,MAC1DhY,EAAE,0CAA0C2G,KAAKmR,EAAWI,QAC5DlY,EAAE,4BAA4BqY,MAAM,SAExCrH,SAAU,WACNhR,EAAEuH,UAAUkB,UAiBxB/K,EAAOD,QAAU,CACbgX,aAAc,WAgFVzU,EAAE,QACGmE,GAAG,QAAS,6CAhFF,SAAUwG,GAKrB,IAAI8M,EACAtC,EALAnV,EAAEkB,MAAM4D,QAAQ,YAAYxE,QAC5BqK,EAAEiI,2BAMN,IAlISpR,EAkILoD,EAAQ5E,EAAEkB,MAEd0D,EAAMZ,SAAS,aAEuC,IAAlDhE,EAAEkB,MAAM4D,QAAQ,uBAAuBxE,QACvCsE,EAAME,QAAQ,iBAAiBN,YAAY,gBAE/CI,EACKE,QAAQ,iBACRf,KAAK,sCACLnC,IAAI,WACJ4C,YAAY,gBA7IRhD,EA+ISxB,EAAEkB,MAApBiU,EA7IF3T,EAAIX,KAAK,OA+IP4W,EAAezX,EAAEkB,MACZ4D,QAAQ,gBACRjE,KAAK,gBAEV,IAAIyX,EAAO,CACPnD,IAAKA,EACLoD,aAtBAA,EAuBAC,cAAe,GACfC,SAAU,EAGdH,QAAe,IAEXb,GACAzX,EAAEgI,KAAK,CACHhC,IAAKyR,EACL1G,OAAQ,OACRlQ,KAAMyX,EACNhQ,QAAS,SAAUzH,GAnDvC,IAA2BwN,EAqDCrO,EAAE,mBAAmBM,OAAS,EAC9BoC,OAAO8F,SAASnC,KAAOxF,EAAK0H,aAtD7B8F,EAwDmBxN,EAvD1Cb,EAAE,aAAasE,QAAQ,eAAgB+J,GAEnCA,EAASqK,0BAAsF,IAA1Dra,OAAOsD,KAAK0M,EAASqK,0BAA0BpY,QACpF2W,EAAoB5I,EAASqK,0BAqDT7X,EAAK8X,SAAWxD,EAChBnV,EAAE,QAAQsE,QAAQ,yBAA0BzD,GAC5C+D,EACKE,QAAQ,iBACRf,KAAK,8BACLC,SAAS,UACdY,EAAME,QAAQ,kCAAkCd,SAAS,UACzDY,EACKE,QAAQ,iBACRf,KAAK,uDACLS,YAAY,UACjBI,EACKE,QAAQ,iBACRf,KAAK,sCACLC,SAAS,gBACdjB,EAAW6V,qBAAqB/X,EAAKgY,gBAG7C5H,MAAO,WACHrM,EACKE,QAAQ,iBACRf,KAAK,sCACLC,SAAS,iBAElBgN,SAAU,WACNpM,EAAMJ,YAAY,aAClBxE,EAAE,wBAAwBwE,YAAY,gBAQjDL,GAAG,aAAc,gCAAgC,WAKjB,aAHzBnE,EAAEkB,MACG4D,QAAQ,iBACRf,KAAK,sBACLuC,IAAI,aACyC,IAAlDtG,EAAEkB,MAAM4D,QAAQ,uBAAuBxE,SAEvCN,EAAEkB,MACG6C,KAAK,kCACLC,SAAS,UACdhE,EAAEkB,MACG4D,QAAQ,iBACRf,KAAK,oBACLS,YAAY,eAGxBL,GAAG,aAAc,oHAAoH,WAClInE,EAAEkB,MAAM8C,SAAS,gBACjBhE,EAAEkB,MACG6C,KAAK,sBACLS,YAAY,aAEpBL,GAAG,aAAc,qDAAqD,SAASwG,GACxE3K,EAAEkB,MACG6C,KAAK,kCACLC,SAAS,UACdhE,EAAEkB,MACG6C,KAAK,oBACLS,YAAY,cAExBL,GACG,aACA,4MACA,SAAUwG,GACN,GAAgC,aAA5B3K,EAAEkB,MAAMoF,IAAI,YAA4B,CACxC,IAAIwS,EAAW9Y,EAAE2K,EAAEwH,QACdrN,QAAQ,iBACRf,KAAK,iDACLlD,KAAK,MACVb,EAAE2K,EAAEwH,QACCrN,QAAQ,YACRf,KAAK,2CAA6C+U,EAAW,MAC7DtU,YAAY,UACjBxE,EAAE2K,EAAEwH,QACCrN,QAAQ,YACRf,KAAK,oBACLC,SAAS,eAIzBG,GACG,aACA,qDACA,SAASwG,GACL,IAAImO,EAAW9Y,EAAE2K,EAAEoO,eACdhV,KAAK,iDACLlD,KAAK,MACVb,EAAE2K,EAAEoO,eACCjU,QAAQ,YACRf,KAAK,2CAA6C+U,EAAW,MAC7DtU,YAAY,aAGxBL,GACG,QACA,oLACA,SAAUwG,GAEN,IAAImO,EA2BJ,GA5BAnO,EAAEhK,iBAM2B,aAHzBX,EAAEkB,MACG4D,QAAQ,iBACRf,KAAK,sBACLuC,IAAI,cAETwS,EAAW9Y,EAAE2K,EAAEwH,QACVrN,QAAQ,iBACRf,KAAK,iDACLlD,KAAK,SAENb,EAAE2K,EAAEwH,QACCrN,QAAQ,YACRf,KAAK,sCACLnC,IAAI,oBAAsBkX,EAAW,MACrC9U,SAAS,UACdhE,EAAE2K,EAAEwH,QACCrN,QAAQ,YACRf,KAAK,sDAAwD+U,EAAW,MACxEhQ,YAAY,UACjB9I,EAAE2K,EAAEwH,QACCrN,QAAQ,YACRf,KAAK,oBACLS,YAAY,aAGpBsU,EAAU,CACX,IAAIE,EAAchZ,EAAE2K,EAAEwH,QACjBrN,QAAQ,gCACRf,KAAK,gBACNiV,EAAY1Y,QACZ0Y,EAAYrN,SAEhBqN,EAAchZ,EAAE,sEAChBA,EAAE2K,EAAEwH,QACCrN,QAAQ,gCACRmU,QAAQD,GACbrL,YAAW,WACPqL,EAAYrN,WACb,KACH3L,EAAE2K,EAAEwH,QACCrN,QAAQ,gCACRN,YAAY,cAI5BL,GACG,QACA,iLACA,SAAUwG,GACNA,EAAEhK,iBAK2B,aAHzBX,EAAEkB,MACG4D,QAAQ,iBACRf,KAAK,sBACLuC,IAAI,cAETtG,EAAE2K,EAAEwH,QACCrN,QAAQ,YACRf,KAAK,sCACLC,SAAS,UACdhE,EAAE2K,EAAEwH,QACCrN,QAAQ,YACRf,KAAK,oBACLS,YAAY,YAErBxE,EAAEkB,MACG4D,QAAQ,cACRoU,KAAK,gCACL1U,YAAY,aAGxB2U,IAAI,QAAS,kDACbhV,GAAG,QAAS,wBAAwB,WACjCnE,EAAE,wBAAwBwE,YAAY,UACtCxE,EAAEkB,MAAM8C,SAAS,UACjBhE,EAAEkB,MAAM4D,QAAQ,8BAA8Bf,KAAK,gBAAgBS,YAAY,aAElFL,GAAG,QAAS,yBAAyB,WAClCnE,EAAEkB,MAAM4D,QAAQ,8BAA8Bf,KAAK,wBAAwBS,YAAY,UACvFxE,EAAEkB,MAAM4D,QAAQ,8BAA8Bf,KAAK,gBAAgBC,SAAS,aAE/EG,GAAG,SAAS,SAAUwG,GACnB,IAAK3K,EAAE2K,EAAEwH,QAAQpQ,SAAS,qBAAwB/B,EAAE2K,EAAEwH,QAAQpQ,SAAS,wBACnE/B,EAAE2K,EAAEwH,QAAQxJ,SAAS5G,SAAS,wBAC9B/B,EAAE2K,EAAEwH,QAAQpQ,SAAS,sBACvB,CACE,IAAIqX,EAAiBpZ,EAAE,gCACnBoZ,GAAkBA,EAAerX,SAAS,YAC1CqX,EAAe5U,YAAY,UAC3B4U,EAAerV,KAAK,sBAAsBgB,KAAK,gBAAiB,SAChEqU,EAAerV,KAAK,gBAAgBC,SAAS,WAGjDhE,EAAE,wBAAwBwE,YAAY,UACtCxE,EAAE,gBAAgBgE,SAAS,eAI3CqV,kBAAmBrZ,EAAEiE,UAAUE,GAAG,QAAS,wCAAwC,WAC/E,IAAIS,EAAQ5E,EAAEkB,MACV2D,EAAYD,EAAME,QAAQ,iBAE9BD,EAAUd,KAAK,UAAUS,YAAY,UACrCK,EAAUd,KAAK,0BAA0B9C,MAAK,WAC1CjB,EAAEkB,MAAM6D,KAAK,gBAAgB,MAEjCH,EAAMZ,SAAS,UAAUe,KAAK,gBAAgB,GAC9C,IAAIC,EAAYJ,EAAM/D,KAAK,aACvBoE,EAAaL,EAAM/D,KAAK,cACxByY,EAAmB1U,EAAM/D,KAAK,yBAC9BqE,EAAWN,EAAM/D,KAAK,YACtBsE,EAAcP,EAAM/D,KAAK,eACzBuE,EAAUR,EAAM/D,KAAK,WACrBwE,EAAaT,EAAM/D,KAAK,cACxByE,EAAgBV,EAAM/D,KAAK,iBAC3B0E,EAAQX,EAAM/D,KAAK,SACnB2E,EAAeZ,EAAM/D,KAAK,gBAC1B4E,EAAiBb,EAAM/D,KAAK,kBAC5B6E,EAAmBd,EAAM/D,KAAK,oBAC9B8E,EAAaf,EAAM/D,KAAK,cACxB+E,EAAKhB,EAAM/D,KAAK,MAChBgF,EAAmBjB,EAAM/D,KAAK,oBAC9BiF,EAAmBlB,EAAM/D,KAAK,oBAC9BkF,EAAanB,EAAM/D,KAAK,cACxBmF,EAAMpB,EAAM/D,KAAK,OACjBoF,EAAe,2EAA6EL,EAC5F1H,EAAO0G,EAAM/D,KAAK,WAQtB,GAPAgE,EAAUd,KAAK,SAASmC,KAAKhI,GAC7B2G,EAAUd,KAAK,eAAegB,KAAK,CAAEoB,IAAKjB,EAAUkB,IAAKjB,IACzDN,EAAUd,KAAK,cAAcgB,KAAK,CAAEoB,IAAKf,EAASgB,IAAKf,IACvDR,EAAUd,KAAK,KAAKgB,KAAK,CAAEsB,KAAML,IACjCnB,EAAUd,KAAK,eAAegB,KAAK,CAAEsB,KAAMJ,IAE3CpB,EAAUd,KAAK,YAAYmC,KAAKL,GAC3Bb,EAOE,CAMH,GAJiB,SADFH,EAAUd,KAAK,mBAAmBuC,IAAI,YAEjDzB,EAAUd,KAAK,mBAAmBuC,IAAI,UAAW,IAGjDzB,EAAUd,KAAK,mBAAmBzD,OAClCuE,EACKd,KAAK,mBACLgB,KAAK,CAAEwB,QAASvB,EAAUpG,QAC1BsH,KAAKlB,EAAUwB,WACpB3B,EAAUd,KAAK,kBAAkBmC,KAAKZ,OACnC,CACH,IAAImB,EACA,mHAGAzB,EAAUpG,MACV,KACAoG,EAAUwB,UACV,uBAGAE,EACA,6EAA+EzB,EAAWrG,MAAQ,KAAOqG,EAAWuB,UAAY,UAG/HV,EAGDjB,EAAUd,KAAK,kBAAkB4C,KAAKF,EAAgBC,GAFtD7B,EAAUd,KAAK,kBAAkB4C,KAAKD,GAK9C7B,EACKd,KAAK,mBACLgB,KAAK,CAAEwB,QAAStB,EAAWrG,QAC3BsH,KAAKjB,EAAWuB,gBA1CrB3B,EAAUd,KAAK,mBAAmBQ,OAClCM,EACKd,KAAK,mBACLgB,KAAK,CAAEwB,QAAStB,EAAWrG,QAC3BsH,KAAKjB,EAAWuB,WACrB3B,EAAUd,KAAK,kBAAkBmC,KAAK,IAwCrCJ,IACDjB,EAAUd,KAAK,mBAAmBQ,OAClCM,EAAUd,KAAK,kBAAkBmC,KAAK,KAG1CjB,GACIJ,EACKd,KAAK,mBACLgB,KAAK,CAAEwB,QAAStB,EAAWrG,QAC3BsH,KAAKjB,EAAWuB,WAEzBjB,GACIV,EACKd,KAAK,kBACL6C,OACAD,KAAK,6BAEdnB,GACIX,EACKd,KAAK,kBACL6C,OACAD,KAAK,4BAETpB,GAAUC,IACXX,EAAUd,KAAK,kBAAkBQ,OAE7BoB,GACAd,EAAUd,KAAK,kBAAkB6C,QAIzC,IAAI2S,EAA4B1U,EAAUd,KAAK,uBAc/C,GAbIuV,EACIC,EAA0BjZ,OAC1BiZ,EAA0B3S,OAAOV,KAAKoT,EAAiB9S,WAEvDxG,EAAE,mDAAD,OAAoDsZ,EAAiB9S,UAArE,YAAyFgT,YAAY3U,EAAUd,KAAK,UAElHwV,EAA0BjZ,QACjCiZ,EAA0BhV,OAI9BM,EAAUd,KAAK,kBAAkBS,YAAY,mBAEzCiB,IAAmBE,EAAY,CAG/B,IAAIkB,EAFJhC,EAAUd,KAAK,kBAAkB6C,OACjC/B,EAAUd,KAAK,kBAAkBC,SAAS,mBAGrCa,EAAUd,KAAK,kBAAkBzD,QAIlCuG,EAAQ,SAAWpB,EAAiB,UACpCZ,EAAUd,KAAK,kBAAkB4C,KAAKE,KAJtCA,EAAQ,oCAAsCpB,EAAiB,gBAC/DZ,EAAUd,KAAK,mBAAmB+C,OAAOD,IAO7C,IAAIE,EAAYrE,OAAOU,UAAU4D,YAAYC,MAAM,KAAKC,KAAK,IACzDxE,OAAOQ,gBAAgBiE,kBAAoBzB,IAAqBqB,EAAUK,eAC1EvC,EAAUd,KAAK,kBAAkBQ,OAKzC,IAAIT,EAAYe,EAAUd,KAAK,0BAC3BgC,GAAcA,EAAWzF,OAAS,EAClCyC,EAAWsE,wBAAwBvD,EAAWiC,GAE9CjC,EAAUwD,WAGlBmS,YAAazZ,EAAE,QAAQmE,GAAG,QAAS,6EAA6E,YACvE,IAAjCnE,EAAEkB,MAAMa,SAAS,YACjB/B,EAAEkB,MAAMsD,YAAY,YAEpBxE,EAAEkB,MAAM8C,SAAS,iB,8JCzhB7B,IAAI0V,EAAOpY,EAAQ,GACfqY,EAAcrY,EAAQ,IACtBD,EAAaC,EAAQ,GAEzB5D,EAAOD,SAAP,KACImc,aAAcF,EAAKE,aACnBC,UAAWH,EAAKG,UAEhBC,2BAA4BH,EAAYG,2BACxCC,YAAaJ,EAAYI,YACzBC,gBAAiB,WACbha,EAAE,QAAQmE,GAAG,gCAAgC,SAAUwG,EAAG0D,GAEtD,GADAA,EAASxJ,UAAUhE,KAAK,QAASwN,EAASxN,KAAK8V,QAAQsD,YACnDja,EAAE,iCAAiCM,OACnC+N,EAASxJ,UAAUhE,KAAK,MAAOwN,EAASxN,KAAK8V,QAAQ/Q,IACrDyI,EAASxJ,UAAUd,KAAK,eAAemC,KAAKmI,EAASxN,KAAK8V,QAAQ/Q,SAC/D,GAAI5F,EAAE,uBAAuBka,GAAG,GAAG5Z,OACtC+N,EAASxJ,UAAUhE,KAAK,MAAOwN,EAASxN,KAAK8V,QAAQ/Q,IACrDyI,EAASxJ,UAAUd,KAAK,eAAemC,KAAKmI,EAASxN,KAAK8V,QAAQ/Q,QAC/D,CACH,IAAIuU,EAAY9L,EAASxN,KAAK8V,QAAQ/Q,GAElC5F,EAAE,iDAAiD+B,SAAS,sBAC5D/B,EAAE,uCAAuCa,KAAK,gBAAiBsZ,GACrB,mBAAtC9L,EAASxN,KAAK8V,QAAQyD,cACtBD,EAAY9L,EAASxN,KAAK8V,QAAQ9Q,kBAEtC7F,EAAE,eAAekG,KAAKiU,GACtBna,EAAE,uCAAuCa,KAAK,MAAOsZ,KAErDna,EAAE,eAAekG,KAAKiU,GACtBna,EAAE,uCAAuCa,KAAK,MAAOsZ,SAKrEE,mBAAoBV,EAAYU,mBAChCC,gBAAiB,WACbta,EAAE,QAAQmE,GAAG,QAAS,4DAA4D,SAASwG,GACvFA,EAAEhK,iBAOF,IAAI4Z,EAAoBva,EAAEkB,MAAM4D,QAAQ,aAUxC,GATKyV,EAAkBja,SACnBia,EAAoBva,EAAEkB,MAAM4D,QAAQ,oBAIxC9E,EAAE,mBAAmBgE,SAAS,QAC9BhE,EAAE,iBAAiBwE,YAAY,cAC/BxE,EAAEkB,MAAM4D,QAAQ,mBAAmBf,KAAK,kBAAkBS,YAAY,QAElExE,EAAEkB,MAAMa,SAAS,2BAA4B,CAElB/B,EAAEkB,MAAMqP,SAAS,yBAC5CvQ,EAAEkB,MAAMqP,SAAS,mBAAmBxL,KAAK,eAAgB,SACzD2U,EAAKc,gBAAgBxa,EAAEkB,MAAM6D,KAAK,YAAawV,EAAmB,QAElEva,EAAEkB,MAAM4D,QAAQ,mBAAmBf,KAAK,gBAAgBC,SAAS,QACjEhE,EAAEkB,MAAM4D,QAAQ,mBAAmBf,KAAK,kBAAkBC,SAAS,QACnEhE,EAAEkB,MAAM4D,QAAQ,mBAAmBf,KAAK,uBAAuBS,YAAY,aAE3EkV,EAAKc,gBAAgBxa,EAAEkB,MAAM6D,KAAK,YAAawV,EAAmB,QAElEva,EAAEkB,MAAM4D,QAAQ,mBAAmBf,KAAK,kBAAkBS,YAAY,QACtExE,EAAEkB,MAAM4D,QAAQ,mBAAmBf,KAAK,gBAAgBS,YAAY,QACpExE,EAAEkB,MAAM4D,QAAQ,mBAAmBf,KAAK,kBAAkBS,YAAY,QACtExE,EAAEkB,MAAM4D,QAAQ,mBAAmBf,KAAK,uBAAuBC,SAAS,WAIhFhE,EAAE,6BAA6BmE,GAAG,2BAA2B,SAAUwG,EAAG0D,GAClEA,EAASsI,QAAQ8D,cACjBza,EAAEkB,MAAM6D,KAAK,YAAY,OAIrC2V,UAAW,WACP1a,EAAEiE,UAAUE,GAAG,QAAS,+BAA+B,SAASwG,GAC5DA,EAAEhK,iBACF,IAAIqF,EAAMhG,EAAEkB,MAAM6D,KAAK,QACnB4V,EAAiB3a,EAAEkB,MAClB4D,QAAQ,eACRf,KAAK,2BACN6W,EAAwB5a,EAAEkB,MACzB4D,QAAQ,kCACRzD,EAAWkC,YACZqX,EAAsBtU,IAAI,CAAEhE,IAAK,SAEjCqY,EAAeta,GAAG,WAClBL,EAAEgI,KAAK,CACHhC,IAAKA,EACLiC,KAAM,MACNC,SAAU,OACVI,QAAS,SAASzH,GACd8Z,EAAe7T,OAAOjG,EAAK0F,SAE3B,IAAIsU,EAAe,CACfC,UAAU,EACVC,UAAU,GAGsB,IAAhC/a,EAAE,mBAAmBM,SACrBua,EAAaE,SAAW,UAG5B/a,EAAE,kBAAkBqY,MAAMwC,MAKtCF,EAAe7R,YAAY,aAG/B,IAAIkS,EAAahb,EAAE,2BACnBA,EAAE,QAAQmE,GAAG,oBAAoB,SAASwG,GAClC3K,EAAE,eAAeib,IAAItQ,EAAEwH,QAAQ7R,QAAU,GACzC0a,EAAWxW,YAAY,cAInC0W,gBAAiBvB,EAAYuB,gBAC7BC,6BAA8BzB,EAAKyB,+BACnCC,YAAa,WACTpb,EAAE,QAAQmE,GAAG,QAAS,wBAAwB,SAASwG,GAEnD,IAAI0Q,EAAWrb,EAAEkB,MAAM4D,QAAQ,uBAAuBxE,OAClDgb,EAActb,EAAEkB,MACf4D,QAAQ,mBACRf,KAAK,gCACLlD,KAAK,cACV,IAAKya,GAA+B,IAAhBA,IAAsBD,EAItC,OAHA1Q,EAAEhK,iBACFX,EAAE,QAAQsE,QAAQ,0BAA2BpD,MAC7ClB,EAAEuH,UAAUkB,QACL,KAIfzI,EAAE,QAAQmE,GAAG,2BAA2B,SAASwG,EAAG0D,GAChD,GAAIA,EAASsI,QAAQ8D,aAAc,CAC/B,IAAIc,EAAiBvb,EAAE,iBAAkBqO,EAASkM,mBACpB,IAA1BgB,EAAejb,QACfib,EAAexW,KAAK,MAAOsJ,EAASsI,QAAQ/Q,UA/IhE,eAoJiB,WACT5F,EAAE,QAAQmE,GAAG,yDAAyD,WAC7DnE,EAAE,6BAA6BM,QAChCN,EAAEuH,UAAUC,cAvJ5B,kBA2JgB,WACR,IAGIgU,EAHAC,EAAWzb,EAAE,2BACb0b,EAAaD,EAAS1X,KAAK,WAC3B4X,EAAQ,GAEI,SAAZC,IACIF,EAAWxV,OAAO2V,OAAOvb,OAAS,GAAKqb,EAAQ,KAC3CF,EAAS1Z,SAAS,SAAW2Z,EAAWxV,OAAO2V,OAAOvb,OAAS,GAC/Dmb,EAASjX,YAAY,QAEzBsX,aAAaN,KAEbG,IACAH,EAAU7N,WAAWiO,EAAW,MAGxCA,MA3KR,sBA6KoB,WACZ,IAAIG,EAAU/b,EAAE,mBAAmBa,KAAK,SACpCkb,GACA/b,EAAEgI,KAAK,CACHC,KAAM,MACNjC,IAAK,kCAAoC+V,EAAU,QACnD7T,SAAU,OACVI,QAAS,SAAUzH,GACf,IAAImb,EAAenb,EAAK,GAAGob,gBAC3Bjc,EAAE,oBAAoB+E,KAAK,MAAOiX,GAClChc,EAAE,mBAAmB+E,KAAK,SAAUiX,SAvLxD,mBA4LiB,WACLhc,EAAE,mBAAmBM,QACrBN,EAAEiE,UAAUE,GAAG,QAAS,qBAAqB,WACzC,IAAI+X,EAAelc,EAAE,qBACjBmc,EAAenc,EAAE,mBAAmB,GACpCmc,EAAaC,QACbD,EAAaE,OACbH,EAAalY,SAAS,gBACtBkY,EAAa1X,YAAY,iBAEzB0X,EAAa1X,YAAY,gBACzB0X,EAAalY,SAAS,eACtBmY,EAAaG,eAxMjC,I,oQCHA5e,EAAOD,QAAU,SAAU8e,GACA,mBAAZA,EACPA,IAC0B,WAAnB,EAAOA,IACdle,OAAOsD,KAAK4a,GAAShO,SAAQ,SAAUrP,GACP,mBAAjBqd,EAAQrd,IACfqd,EAAQrd,U,gCCPxB,IAAIwa,EAAOpY,EAAQ,GAEnB5D,EAAOD,QAAU,CACbmc,aAAcF,EAAKE,aAEnBC,UAAWH,EAAKG,UAEhBC,2BAA4B,WACxB9Z,EAAE,QAAQmE,GAAG,wBAAwB,SAAUwG,EAAG9J,GAC9C,IAAI0Z,EAAoBva,EAAE,6BAA+Ba,EAAK+E,GAAK,MAEnE2U,EAAkBxW,KAAK,+CAClBuD,QACAX,KAAK9F,EAAK2b,gBAEX3b,EAAK4b,kBACLlC,EAAkBxW,KAAK,wCAClBS,YAAY,kBACjB+V,EAAkBxW,KAAK,iDAClBuD,QACAX,KAAK9F,EAAK4b,mBAEflC,EAAkBxW,KAAK,wCAClBC,SAAS,kBAGdnD,EAAK6b,iBACLnC,EAAkBxW,KAAK,oCAClBS,YAAY,kBACjB+V,EAAkBxW,KAAK,6CAClBuD,QACAX,KAAK9F,EAAK6b,kBAEfnC,EAAkBxW,KAAK,oCAClBC,SAAS,sBAK1B+V,YAAa,WACT/Z,EAAE,QAAQmE,GAAG,yDAAyD,WAClEnE,EAAEuH,UAAUC,YAGpBwS,gBAAiB,WACbha,EAAE,QAAQmE,GAAG,gCAAgC,SAAUwG,EAAG0D,GACtD,GAAIrO,EAAE,iCAAiCM,OACnC+N,EAASxJ,UAAUhE,KAAK,MAAOwN,EAASxN,KAAK8V,QAAQ/Q,IACrDyI,EAASxJ,UAAUd,KAAK,eAAemC,KAAKmI,EAASxN,KAAK8V,QAAQ/Q,SAC/D,GAAI5F,EAAE,uBAAuBka,GAAG,GAAG5Z,OACtC+N,EAASxJ,UAAUhE,KAAK,MAAOwN,EAASxN,KAAK8V,QAAQ/Q,IACrDyI,EAASxJ,UAAUd,KAAK,eAAemC,KAAKmI,EAASxN,KAAK8V,QAAQ/Q,QAC/D,CACH,IAAIuU,EAAY9L,EAASxN,KAAK8V,QAAQ/Q,GACI,mBAAtCyI,EAASxN,KAAK8V,QAAQyD,cACtBD,EAAY9L,EAASxN,KAAK8V,QAAQ9Q,kBAEtC7F,EAAE,eAAekG,KAAKiU,GACtBna,EAAE,uCAAuCa,KAAK,MAAOsZ,QAIjEwC,gBAAiB,WACb3c,EAAE,QAAQmE,GAAG,2BAA2B,SAAUwG,EAAG0D,GAEjDrO,EAAE,qBAAsBqO,EAASkM,mBAAmBxV,KAAK,YACnDsJ,EAASsI,QAAQ8D,eAAiBpM,EAASsI,QAAQiG,WAEzD,IAAIC,EAAS7c,EAAE,yBAAyB8c,UAAUC,OAAM,SAAUC,GAC9D,OAAOhd,EAAEgd,GAAMnc,KAAK,cAAgBb,EAAEgd,GAAMnc,KAAK,qBAErDb,EAAE,6BAA6B+E,KAAK,YAAa8X,OAGzDxC,mBAAoB,WAChBra,EAAE,QAAQmE,GAAG,8BAA8B,SAAUwG,EAAG0D,GAQpD,GAPArO,EAAE,mBAAoBqO,EAASkM,mBAC1B1Z,KAAK,iBAAkBwN,EAASsI,QAAQ8D,cACxC5Z,KAAK,YAAawN,EAASsI,QAAQiG,WAExC5c,EAAE,oBAAqBqO,EAASkM,mBAC3BjT,QAAQX,KAAK0H,EAASmE,SAEvBxS,EAAE,wBAAwBM,OAAQ,CAClC,IAAI2c,EAAejd,EAAE,yBAAyB8c,UACzCC,OAAM,SAAUC,GAAQ,OAAOhd,EAAEgd,GAAMnc,KAAK,gBAE7Cqc,EAAWld,EAAE,yBAAyB8c,UACrCC,OAAM,SAAUC,GAAQ,OAAOhd,EAAEgd,GAAMnc,KAAK,qBAEjDb,EAAE,wBACGa,KAAK,iBAAkBqc,GACvBrc,KAAK,YAAaoc,GAEvBjd,EAAE,0CAA0CsH,QACvCX,KAAKuW,EAAW7O,EAASmE,QAAUnE,EAAS8O,UAAUC,0BAIvE1C,UAAW,WACP1a,EAAE,iBAAiBmE,GAAG,SAAS,SAAUwG,GACrCA,EAAEhK,iBACF,IAAIqF,EAAMhG,EAAEkB,MAAM6D,KAAK,QACnB4V,EAAiB3a,EAAEkB,MAAM4D,QAAQ,eAAef,KAAK,2BACrD4W,EAAeta,GAAG,WAClBL,EAAEgI,KAAK,CACHhC,IAAKA,EACLiC,KAAM,MACNC,SAAU,OACVI,QAAS,SAAUzH,GACf8Z,EAAe7T,OAAOjG,EAAK0F,YAIvCoU,EAAe7R,YAAY,aAG/B,IAAIkS,EAAahb,EAAE,2BACnBA,EAAE,QAAQmE,GAAG,oBAAoB,SAAUwG,GACnC3K,EAAE,eAAeib,IAAItQ,EAAEwH,QAAQ7R,QAAU,GACzC0a,EAAWxW,YAAY,cAInC0W,gBAAiB,WACblb,EAAE,QAAQmE,GAAG,QAAS,YAAY,WAC9BtE,MAAMc,iBACN,IAAI0c,EAAQrd,EAAE,WACdA,EAAE,QAAQ8G,OAAOuW,GACjBA,EAAMlc,IAAInB,EAAE,aAAamB,OAAOmc,SAChCrZ,SAASsZ,YAAY,QACrBF,EAAM1R,SACN3L,EAAE,sBAAsB+E,KAAK,OAAQ,SACrC/E,EAAE,sBAAsBwE,YAAY,UACpCmJ,YAAW,WACP3N,EAAE,sBAAsBgE,SAAS,YAClC,SAIXmX,6BAA8BzB,EAAKyB,iC,gCC3IvC,IAAIqC,EAAUlc,EAAQ,GAClBD,EAAaC,EAAQ,GAErBmc,GADcnc,EAAQ,IACPA,EAAQ,KACvByB,EAAazB,EAAQ,GACrBoc,EAAiBpc,EAAQ,GACzBR,EAAOQ,EAAQ,IAqHnB,SAASqc,IACL,IAAIC,EAAmB5d,EAAE,qCAAqCM,OAC1Dud,EAA2B7d,EAAE,gCAC7B8d,EAA4B9d,EAAE,iCAC9B4d,EAAmB,GACnBC,EAAyB7Z,SAAS,UAClC8Z,EAA0B/Z,KAAK,gBAAgBmC,KAAK0X,GACpDE,EAA0BtZ,YAAY,WACV,IAArBoZ,GACPE,EAA0B9Z,SAAS,UACnC6Z,EAAyBrZ,YAAY,YAErCqZ,EAAyB7Z,SAAS,UAClC8Z,EAA0B9Z,SAAS,WAI3ChE,EAAE,QAAQmE,GAAG,gCAAgC,SAASwG,EAAG9J,GAqBrD,GApBIA,EAAKkd,eAAwC,UAAvBld,EAAKkd,gBACvBld,EAAKA,KAAK8V,QAAQqH,sBAClBhe,EAAE,6BAA6BsH,QAC/BtH,EAAE,mCACGsH,QACAX,KAAK9F,EAAKA,KAAK8V,QAAQqH,qBAC5Bhe,EAAE,QAAQsE,QAAQ,0BAElBzD,EAAKA,KAAK8V,QAAQsH,oCAClBje,EAAE,uBACGsH,QACAX,KAAK9F,EAAKA,KAAK8V,QAAQsH,oCAC5Bje,EAAE,QAAQsE,QAAQ,0BAElBtE,EAAE,uBAAuBsH,SAG7BtH,EAAE,2EAA2EM,QAC7EN,EAAE,YAAY2L,UAEb9K,EAAKA,KAAK8V,QAAQuH,MAAMjW,KAAM,CAC/B,IAEIkW,EAFAC,EAAgBvd,EAAKA,KAAK8V,QAAQuH,MAAMG,KAAOxd,EAAKA,KAAK8V,QAAQuH,MAAMG,KAAK7X,UAAY3F,EAAKA,KAAK8V,QAAQuH,MAAMI,MAAM9X,UACtH0X,EAAQE,EAERvd,EAAKA,KAAK8V,QAAQuH,MAAMI,QACxBJ,EAAQrd,EAAKA,KAAK8V,QAAQuH,MAAMI,MAAM9X,WAEtC3F,EAAKA,KAAK8V,QAAQuH,MAAMG,OACxBF,EAAiBtd,EAAKA,KAAK8V,QAAQuH,MAAMK,eAG7C,IAAIzY,EAAmBjF,EAAKA,KAAKiF,iBAC7B0Y,EACA,qBAAsB3d,EAAKA,KAAK8V,QAAQuH,OAASrd,EAAKA,KAAK8V,QAAQuH,MAAM5E,iBAAmBzY,EAAKA,KAAK8V,QAAQuH,MAAM5E,iBAAiB9S,UAAY,IA5J7J,SAA4B0X,EAAOE,EAAeD,EAAgBM,EAAkB3Y,EAAkB0Y,GAClG,IAAIE,EAAgB1e,EAAE,mBAAmB,GAAG2e,WAAU,GAClDC,EAAepB,EAAQqB,WAAW,iBAAkBJ,GACpDK,EAAiBtB,EAAQqB,WAAW,iBAAkBH,GACtDK,EAAyBvB,EAAQqB,WAAW,0BAA2BC,GACvEE,EAAexB,EAAQqB,WAAW,wBAAyBE,GAC3DE,EAAiBzB,EAAQqB,WAAW,SAAUC,GAC9CI,EAAoB1B,EAAQqB,WAAW,eAAgBI,GACvDE,EAAyB3B,EAAQqB,WAAW,sBAAuBC,GACnEM,EAAsB5B,EAAQqB,WAAW,oBAAqBC,GAC9DO,EAAoB7B,EAAQqB,WAAW,iBAAkBC,GAC7DtB,EAAQhZ,YAAYua,EAtBN,UAwBTjZ,IACD0X,EAAQxZ,SAAS+a,EAzBP,UA0BVvB,EAAQxZ,SAASob,EA1BP,WA6BVD,GAA0BX,IAC1BW,EAAuBG,YAAcd,GAGrCQ,IACAA,EAAaM,YAAclB,GAE3Bc,IACAA,EAAkBI,YAAcpB,GAEhCA,IAAUE,GACVZ,EAAQxZ,SAAS+a,EAxCP,UA0CVb,EAAQE,GAAiBiB,GAAqBlB,IAC9CkB,EAAkBC,YAAcnB,GAEpCS,EAAaW,UAAYb,EAAca,UA2HnCC,CAAmBtB,EAAOE,EAAeD,EAAgBtd,EAAKgE,UAAU,GAAIiB,EAAkB0Y,GAElG,IAAInD,EAAWrb,EAAE,uBAAuBM,OACpC+a,GACAsC,IAGJ,IAAI8B,EAAa5e,EAAKA,KAAK8V,QAAQsD,WACnC,GAAIwF,QAAiD,CACjD,IAAIC,EAAW1f,EAAE,6CACjB,GAAIqb,EAAU,CACV,IAAIsE,EAAoB9e,EAAKA,KAAK8V,QAAQ/Q,GACtC+Z,SACA3f,EAAE,mBAAmBiB,MAAK,WACNjB,EAAEkB,MACb6C,KAAK,uBACLmC,SACayZ,IACdD,EAAW1f,EAAEkB,MAAM6C,KAAK,iBAMxC,GAAI/D,EAAE0f,GAAUpf,OAAS,EAAG,CACxB,IAAIsf,EAAa5f,EAAE0f,GAAU3a,KAAK,MAC9B8a,EAAc7f,EAAE0f,GAAU3b,KAAK,mCAAmCzD,OACtEN,EACI,8FACIyf,EACA,2LACNK,SAAS9f,EAAE0f,GAAU3b,KAAK,oBAC5B/D,EAAE,qBAAuB4f,EAAa,oBAAsBC,EAAYE,UAAY,oBAAoBD,SACpG9f,EAAE0f,GAAU3b,KAAK,0BAK7B,IAAI2X,EAAa1b,EAAE,WACnB,GAAIqb,EAAU,CACV,IAAI2E,EAAuBnf,EAAKA,KAAK8V,QAAQ/Q,GACzCoa,SACAhgB,EAAE,mBAAmBiB,MAAK,WACNjB,EAAEkB,MACb6C,KAAK,uBACLmC,SACa8Z,IACdtE,EAAa1b,EAAEkB,MAAM6C,KAAK,eAKtC2X,EAAWpb,OAAS,IAChBO,EAAKA,KAAK8V,QAAQiD,aAAaqG,iBAC/BvE,EAAW3W,KAAK,2BAA4BlE,EAAKA,KAAK8V,QAAQiD,aAAaqG,iBAC3EvE,EAAW1X,SAAS,iBAChBhE,EAAE,iBAAiBM,OAAS,GAC5BN,EAAE,iBAAiBwE,YAAY,UAG/BkX,EAAW3Z,SAAS,kBACpB2Z,EAAWlX,YAAY,iBAEvBxE,EAAE,iBAAiBM,OAAS,GAC5BN,EAAE,iBAAiBwE,YAAY,SApL/C,SAAmB0b,GACf,IAAIzE,EAAWzb,EAAE,2BACb0b,EAAaD,EAAS1X,KAAK,WAE/B,GAAI2X,EAAWpb,OAAQ,CACnB,IAAI0F,EAAM0V,EAAW7a,KAAK,OAE1B,GAAImF,EAAK,CACL,IAAIma,EAAS,CACTC,QAAS1E,EAAW7a,KAAK,mBACzBwf,YAAa3E,EAAW7a,KAAK,uBAC7Byf,YAAa5E,EAAW7a,KAAK,uBAC7Bqf,YAAaA,GAGjBzE,EAASzX,SAAS,UAElBhE,EAAEgI,KAAK,CACHhC,IAAKA,EACLiC,KAAM,MACNC,SAAU,OACVrH,KAAM,CAAEsf,OAAQ/X,KAAKC,UAAU8X,IAC/B7X,QAAS,SAASzH,GACVA,EAAKyH,SACLoT,EAAW5W,QAAQ,YAAYC,KAAK,cAAeqD,KAAKC,UAAUxH,EAAK0f,YACnEJ,EAAOG,aAAeH,EAAOG,YAAYhgB,OAAS,GAAK6f,EAAOE,aAAeF,EAAOE,YAAY/f,OAAS,GACzGob,EAAWxV,KAAK,IACZxD,OAAO8d,QACP9d,OAAO8d,OAAO,SAAU,KAErB3f,EAAK4f,aACZ/E,EAAWxV,KAAKrF,EAAK4f,aACjB/d,OAAO8d,QACP9d,OAAO8d,OAAO,SAAU,KAErB9d,OAAO8d,QACd9d,OAAO8d,OAAO,SAAU,KAErB9d,OAAO8d,QACd9d,OAAO8d,OAAO,SAAU,IAE5B,IACIhF,EADAG,EAAQ,GAEI,SAAZC,IACIF,EAAWxV,OAAO2V,OAAOvb,OAAS,GAAKqb,EAAQ,KAC3CD,EAAWxV,OAAO2V,OAAOvb,OAAS,GAClCmb,EAASjX,YAAY,UAEzBsX,aAAaN,KAEbG,IACAH,EAAU7N,WAAWiO,EAAW,MAGxCA,QAkIZ8E,CAAU7f,EAAKA,KAAK8V,QAAQiD,aAAaqG,kBAI7C,IAAInc,EAAY9D,EAAE,0BAClB,GAAIa,EAAKA,KAAK8V,QAAQgK,cAAe,CACjC,IAAI5a,EAAalF,EAAKA,KAAK8V,QAAQ5Q,WACnChD,EAAWsE,wBAAwBvD,EAAWiC,QAE9CjC,EAAUwD,WAKlB,IAAIsZ,EAA2B,SAASC,GACpC,GAAKA,EAAL,CAIA,IAAIjG,EAAwBiG,EAAS9c,KAAK,kCACtC+c,EAAgBD,EAAS9c,KAAK,+BAC9Bgd,EAAM/gB,EAAE0C,QAAQF,aAAY,GAE5Bwe,EAAY,IAEZF,EAAcxgB,OAAS,IAAMmd,EAAavb,aAAa4e,KACvDE,EAAYD,GAAOD,EAAcG,WAAW3e,IAAMwe,EAActe,aAAY,GAJjE,KAOfoY,EAAsBtU,IAAI,CAAEhE,IAAK0e,EAAY,GAAK,UAGtDhhB,EAAE,QAAQmE,GAAG,8BAA8B,SAASwG,EAAG9J,GACnD,IAAIqN,EAAYrN,EAAK8V,QAAQiD,aAAasH,UACtCC,EAAatgB,EAAK8V,QAAQiD,aAAawH,SAAS,GAChDC,EAAMrhB,EAAE2K,EAAEwH,QAAQpO,KAAK,wBACvBud,EAAYzgB,EAAK0Z,kBAAkBxY,SAAS,2BAMhD,GALkB,YAAdmM,EACAmT,EAAItd,KAAK,gBAAgBwd,KAAK,YAAY,GAE1CF,EAAItd,KAAK,gBAAgBwd,KAAK,YAAY,GAE1C1gB,EAAK8V,QAAQ6K,oBAAqB,CAClC,IAAIC,EAAS,GACbzhB,EAAEiB,KAAKJ,EAAK8V,QAAQ6K,qBAAqB,SAAStiB,EAAKwiB,GACrB,UAA1BA,EAAmB9b,IACnB5F,EAAEiB,KAAKygB,EAAmBC,QAAQ,SAASC,EAAMhjB,GAC7C,IAAIijB,EAAiB7hB,EACjB,+BACI0hB,EAAmB9b,GACnB,aACA8b,EAAmB9b,GACnB,qCACAhH,EAAMkjB,iBACN,MAEHljB,EAAMmjB,YAAgBnjB,EAAMojB,gCAAiCV,EAG9DO,EAAe7M,WAAW,YAF1B6M,EAAe9c,KAAK,WAAY,aAI/BnG,EAAMojB,+BAAiCV,EACxCO,EAAerd,YAAY,8BAE3Bqd,EAAe7d,SAAS,iCAIN,SAA1B0d,EAAmB9b,KACnB5F,EAAEiB,KAAKygB,EAAmBC,QAAQ,SAASC,EAAMhjB,GAC7C,IAAIqjB,EAAwBrjB,EAAMojB,8BAClCP,EAAO1Z,KACH,kBACI2Z,EAAmB9b,GACnB,eACEhH,EAAMmjB,aAAcE,GAA0BX,EAAwC,GAA5B,2BAC5D,8BAGA1iB,EAAMsjB,aACN,oBAECtjB,EAAMiU,SAAW,OAAS,SAC3B,eAEAjU,EAAMoH,IACN,sBAEApH,EAAMA,MACN,oBAEAA,EAAMA,MACN,MACEA,EAAMmjB,YAAgBnjB,EAAMojB,gCAAiCV,EAA0B,GAAb,YAC5E,2BAEA1iB,EAAMA,MACN,6BAEAA,EAAMujB,aACN,YAEAT,EAAmB9b,GACnB,WACChH,EAAMiU,SAAW,YAAc,KAC/BjU,EAAMmjB,WAAa,aAAe,gBACnC,KACAnjB,EAAMsjB,aACN,oBAIJtjB,EAAMiU,WAAajU,EAAMmjB,YACzBV,EAAItd,KAAK,sBAAsBwd,KAAK,YAAY,MAGxDF,EAAItd,KAAK,eAAiB2d,EAAmB9b,GAAK,uBAAuBe,KAAK8a,EAAOva,KAAK,SAMtGlH,EAAE,mBAAmBgE,SAAS,QAC9BhE,EAAE,iBAAiBwE,YAAY,cAC/BxE,EAAEkB,MACG4D,QAAQ,mBACRf,KAAK,kBACLS,YAAY,QAGb6c,EACKvc,QAAQ,mBACRf,KAAK,2DACLhC,SAAS,4BAEdsf,EAAIvc,QAAQ,mBACPf,KAAK,gBACLC,SAAS,QACdqd,EAAIvc,QAAQ,mBACPf,KAAK,uBACLS,YAAY,UAEjB6c,EAAIvc,QAAQ,mBACPf,KAAK,kBACLS,YAAY,QACjB6c,EAAIvc,QAAQ,mBACPf,KAAK,gBACLS,YAAY,QACjB6c,EAAIvc,QAAQ,mBACPf,KAAK,uBACLC,SAAS,SAGlBhE,EAAEqhB,GACGtd,KAAK,gBACL9C,MAAK,SAAShD,EAAGmkB,GACVpiB,EAAEoiB,GAAIrgB,SAAS,gBAEV/B,EAAEoiB,GACEzZ,SACA5G,SAAS,8BAMd/B,EAAEoiB,GACGzZ,SACA5D,KAAK,YAAY,GANtB/E,EAAEoiB,GACGzZ,SACA5D,KAAK,YAAY,GAO1B/E,EAAEoiB,GACGzZ,SACA5D,KAAK,YAAY,MAGlC/E,EAAEqhB,GACGtd,KAAK,gBACL4E,OAAO,oBACP5D,KAAK,eAAgB,SAC1B/E,EAAEqhB,GACGtd,KAAK,yBACL4E,OAAO,oBACP5D,KAAK,eAAgB,QAC1B,IAAIsd,EAAYriB,EAAEqhB,GACbtd,KAAK,yBACLlD,KAAK,0BACe,IAAdwhB,GACPriB,EAAEqhB,GACGtd,KAAK,mBACLmC,KAAKmc,EAAUjb,eAGN,aAAd8G,GACAlO,EAAEqhB,GACGtd,KAAK,yBACL4C,KAAK,8BAAgCuH,EAAY,KAAOiT,EAAa,UAC1EnhB,EAAEqhB,GACGtd,KAAK,kBACLS,YAAY,UAEjBxE,EAAEqhB,GACGtd,KAAK,yBACLuD,QACLtH,EAAEqhB,GACGtd,KAAK,sGACLS,YAAY,QACjBxE,EAAEqhB,GACGtd,KAAK,oDACLC,SAAS,SAGA,WAAdkK,EACAlO,EAAE,kBAAkBgE,SAAS,WAE7BhE,EAAE,kBAAkBwE,YAAY,WAGpC,IAAI8d,EAAgBtiB,EAAE,2BAA2B+E,KAAK,4BAClDwd,EAAiBviB,EAAE,2BAA2B+E,KAAK,wBACrClE,EAAK8V,QAAQiD,aAAawH,SAAS,GAAGnV,QAAQ,uBAAyB,GAGrFjM,EAAEqhB,GACGtd,KAAK,qBACLmC,KAAKoc,GACVtiB,EAAEqhB,GACGtd,KAAK,iBACLQ,OACLvE,EAAEqhB,GACGtd,KAAK,6CACL6C,SAEL5G,EAAEqhB,GACGtd,KAAK,qBACLmC,KAAKqc,GACVviB,EAAEqhB,GACGtd,KAAK,iBACL6C,OACL5G,EAAEqhB,GACGtd,KAAK,6CACLQ,QAETvE,EAAEqhB,GACGtd,KAAK,0BACL4C,KAAK9F,EAAK8V,QAAQ8F,kBACvBzc,EAAEqhB,GACGtd,KAAK,2BACLuD,QACAX,KAAK9F,EAAK8V,QAAQ6L,2BACvBxiB,EAAEqhB,GACGtd,KAAK,cACLuD,QACAX,KAAK9F,EAAK8V,QAAQ8L,iBACvBziB,EAAEqhB,GACGtd,KAAK,iBACLuD,QACAX,KAAK9F,EAAK8V,QAAQ+L,sBACvB1iB,EAAEqhB,GACGtd,KAAK,iBACLuD,QACAX,KAAK9F,EAAK8V,QAAQL,aAGKtW,EAAE,kDACRgV,WAAW,UAE5B3T,EAAWkC,YAAcvD,EAAE,mBAAmBM,OAAS,GACxDsgB,EAAyB5gB,EAAE,uBAMnCA,EAAE,QAAQmE,GAAG,2BAA2B,SAAStD,EAAMwgB,GACnD,IAAIhG,EAAWrb,EAAEqhB,GAAKvc,QAAQ,uBAAuBxE,OACrD,GAAI+a,EAAU,CACV,IAAIsH,EAAmB,EACnBC,EAAe5iB,EAAEqhB,GAChBvc,QAAQ,mBACRf,KAAK,aAqBV,GApBK6e,EAAatiB,SACdsiB,EAAe5iB,EAAEqhB,GAAKvc,QAAQ,6BAElC8d,EAAa3hB,MAAK,WACd,IAAI4hB,EAAc7iB,EAAEkB,MAEhB4hB,EAAe,yCADHD,EAAY9e,KAAK,oBAAoBgB,KAAK,gCACgB,aAE7C,IADT8d,EAAY9e,KAAK,gEACnBzD,SACdqiB,IACAE,EACK9e,KAAK,wBACLA,KAAK,iBACLuD,QACAX,KAAKmc,GAEVD,EAAY9e,KAAK,gBAAgBrD,QACjCmiB,EAAY9e,KAAK,gBAAgBwd,KAAK,YAAY,OAGtDoB,EAAmB,EAKnB,OAJA3iB,EAAEqhB,GACGvc,QAAQ,uBACRf,KAAK,uBACLwd,KAAK,YAAY,IACf,MAER,CACH,IAAIwB,EAAiB/iB,EAAEqhB,GAAKvc,QAAQ,mBACpC,IAAKie,EAAeziB,OAChB,OAAO,EAEX,IAAIgb,EAAcyH,EAAehf,KAAK,+CAA+ClD,KAAK,cACtFmiB,EAAahjB,EAAEqhB,GAAKvc,QAAQ,mBAE5Bge,EAAe,yCADH9iB,EAAE,oBAAoB+E,KAAK,gCAC+B,aAC1E,SAAqBqO,IAAhBkI,GAA6C,cAAhBA,KAAiCD,EAsB/D,OArBAxa,EAAKF,kBACDU,EAAWkC,YAAoD,SAAtCvD,EAAE,iBAAiBsG,IAAI,cAChD0c,EAAWjf,KAAK,iBAAiB6C,OACjC5G,EAAE,kBAAkBgE,SAAS,YAEjCgf,EACKjf,KAAK,iBACLuD,QACAX,KAAKmc,GAEN9iB,EAAE,iBAAiB+B,SAAS,WAC5B/B,EAAE,cAAcijB,QAAQ,CACpBtgB,UACI3C,EAAE,mBAAmBqC,SAASC,KAC7BtC,EAAE0C,QAAQwgB,cAAgBljB,EAAE,+BAA+BkjB,eAAiB,EAC7EljB,EAAE,mBAAmBkjB,gBAIjCF,EAAWjf,KAAK,gBAAgBrD,QAChCsiB,EAAWjf,KAAK,gBAAgBwd,KAAK,YAAY,IAC1C,EAIf,OADA5D,KACO,KAGX,IAAIwF,EAAkB,WAElBnjB,EADyB,yBACH8I,YAAY,UAC9B9I,EAFqB,yBAEC+B,SAAS,UAC/B/B,EAAE,mCAAmCgE,SAAS,UAE9ChE,EAAE,mCAAmCwE,YAAY,UAErDxE,EAPyB,yBAOHkG,KAAsC,iBAAjClG,EAPF,yBAOwBkG,OAA4B,aAAe,iBAGhGlG,EAAEiE,UAAUE,GAAG,QAAS,yBAAyB,SAASwG,GACtDA,EAAEhK,iBACFwiB,OAGJ,IAAIC,EAAoB,WACpBpjB,EAAE,mCAAmCwE,YAAY,UACjDxE,EAAE,yBACGwE,YAAY,UACZ0B,KAAK,gBAGdlG,EAAEiE,UAAUE,GAAG,QAAS,mBAAmB,WACvCnE,EAAE,mBAAmBgE,SAAS,oBAGlChE,EAAEiE,UAAUE,GAAG,kBAAmB,kBAAkB,WAChDnE,EAAE,mBAAmBwE,YAAY,iBACjCoc,IACAwC,OAGJ,IAAIC,EAAmB,EAWvBrjB,EAAEiE,UAAUE,GAAG,QAAS,oBAAoB,WACxC,IAAIS,EAAQ5E,EAAEkB,MACVoiB,EAAUtjB,EAAEkB,MAAML,KAAK,oBACvB0iB,EAAQvjB,EAAEkB,MACT4D,QAAQ,mBACR/C,SAAS,mBACVyhB,EAAYvf,SAAS4K,MACrB4U,EAAQzjB,EAAEkB,MACT6C,KAAK,gBACLlD,KAAK,cACNyV,EAActW,EAAEkB,MACf4D,QAAQ,mBACRf,KAAK,iBACLmC,OACDT,EAAiBb,EAAM/D,KAAK,kBAC5B8E,EAAaf,EAAM/D,KAAK,cACxB6iB,EAAiB9e,EAAME,QAAQ,oBAC/B6e,EAAgB3jB,EAAEkB,MAAML,KAAK,iBAEjC,GAAI0iB,EAAO,CACP,IAAIK,EAAaN,EAAU,QAQ3B,GAPIK,GAAmC,YAAlBA,IACjBC,EAAaA,EAAa,SAAWD,GAEzCjhB,OAAOwG,QAAQqG,UAAU,OAAQ,QAASqU,GAE1C5jB,EAAE,qBAAqB+E,KAAK,OAAQrC,OAAO8F,SAASnC,MAEhDmd,EAAUvc,MAAM,KAAK3G,OAAS,EAAG,CAEjC,IAAIujB,EAAeL,EACd3H,OACA5U,MAAM,KACN6c,KAAI,SAAS9G,EAAMtQ,GAMhB,OAJc,IAAVA,IAEAsQ,GAAmB1G,EAAc,OAASmN,GA7CzDrc,cACAH,MAAM,KACN6c,KAAI,SAASC,GACV,OAAOA,EAAKxY,OAAO,GAAG+D,cAAgByU,EAAKnc,MAAM,MAEpDV,KAAK,MA0Ca8V,KAEV9V,KAAK,OAEVjD,SAAS4K,MAAQgV,EAErBR,IAIJ,GAAI5d,GAAkBE,EAAY,CAC9B,IAAIqe,EAAa,gBACbC,EAAate,EACb7B,EAAY4f,EAAe3f,KAAK,mBAQpC,IANK4B,GAAcF,IACfue,EAAa,gCACbC,EAAaxe,GAIoC,IAAjDie,EAAe3f,KAAK,kBAAkBzD,OAAc,CAEpD,IAAI4jB,EAASlkB,EAAE,SAAU,CACrBmkB,MAAOH,IACRrd,KAAK,SAAWsd,EAAa,WAChCngB,EAAUgD,OAAOod,QAGjBpgB,EAAUC,KAAK,uBAAuBmC,KAAK+d,OAKnDjkB,EAAE,gBAAgBM,OAAS,GAC3BN,EAAE0C,QAAQyB,GAAG,YAAY,WACjBkf,EAAmB,GACnB3gB,OAAOwG,QAAQkb,IAAIf,MAa/BrjB,EAAEiE,UAAUE,GAAG,QAAS,yCARK,WACrBnE,EAAE,oDAAoDM,SAAWN,EAAE,6CAA6CM,OAChH6iB,IACwE,IAAjEnjB,EAAE,oDAAoDM,QAC7D8iB,OAMJpjB,EAAE,uBAAuBM,OAAS,GAClCN,EAAE,QAAQmE,GAAG,QAAS,6BAA6B,WAC/C,IAAIS,EAAQ5E,EAAEkB,MAEVmjB,EAAoBzf,EAAMb,KAAK,OAAOlD,KAAK,SAE/Cb,EAAE,6BAA6BwE,YADb,oCAElBxE,EAAE,yBAAyBwE,YAAY,UAGvCxE,EAAE,2CAA2C0f,SAAS2E,GACtDrkB,EAAE,kBAAoBqkB,GACjBrgB,SAAS,UACTsgB,SACL1f,EAAMZ,SATY,uCAa1BhE,EAAE,QAAQmE,GAAG,QAAS,uBAAuB,YACjB,SAASogB,EAAeC,GAC5C,IAAI7b,EAAS6b,EAAKC,cACdC,EAAgB/b,EAAOgc,aAG3B,GAFoBhc,EAAOic,aAEPF,GAAiB/b,EAAO8b,cAAe,CACvD,IAAII,EAAaL,EAAKG,aAElBG,EADaN,EAAKO,UACUF,EAAa,EAAIH,EAAgB,EACjE/b,EAAOhG,UAAYmiB,EAEnBnc,EAAO8b,eACPF,EAAe5b,GAIvBqc,CAAkB/gB,SAASghB,cAAc,+CACzCjlB,EAAE,mBAAmBwE,YAAY,QACjCxE,EAAEkB,MACG4D,QAAQ,kBACRd,SAAS,WAGlBhE,EAAE,6BAA6BmE,GAAG,8BAA8B,SAASwG,EAAG9J,GACxEC,EAAKF,aAAaC,MAGtBb,EAAE,kCAAkCmE,GAAG,UAAU,SAAStE,GACtDA,EAAMc,iBAEN,IAAIukB,EAAQllB,EAAEkB,MACV8E,EAAMkf,EAAMngB,KAAK,UACjBoQ,EAAMnV,EAAE,eACPkG,OACA2V,OAEL,GAAK1G,EAAL,CAIA,IAAInG,EAASwO,EAAQ2H,YAAYnf,EAAK,CAAEmP,IAAKA,IACzCiQ,EAAe5H,EAAQ2H,YAAYD,EAAMrkB,KAAK,oBAAqB,CAAEsU,IAAKA,EAAKS,OAAO,IAE1FsP,EAAM3d,UAAUC,QAChBxH,EAAEgI,KAAK,CACHhC,IAAKgJ,EACL/G,KAAM,OACNC,SAAU,OACVrH,KAAMqkB,EAAMG,YACZ/c,QAAS,SAASzH,GACTA,EAAKyH,QAUE4c,EAAMnhB,KAAK,kBAAkB1D,GAAG,cACxC6kB,EAAM3d,UAAUkB,OAChBzI,EAAE,sGAAsGgE,SAAS,QACjHhE,EAAE,oDAAoDwE,YAAY,UAZlE0gB,EAAM3d,UAAUkB,OAChBiV,EAAewH,EAAOrkB,GACtBb,EAAE,cAAc2L,SACZ,YAAa9K,IACbqkB,EAAMnhB,KAAK,iBAAiBC,SAAS,cACrChE,EAAE,yCAAyCsH,QAC3CtH,EAAE,yCAAyCiZ,QAAQ,qCAAuCpY,EAAK2R,QAAU,SAE7GxS,EAAE,6BAA6BsE,QAAQ,6BAA8BzD,KAO7EoQ,MAAO,WACHiU,EAAM3d,UAAUkB,UAIpByc,EAAMnhB,KAAK,kBAAkB1D,GAAG,aAChCL,EAAEgI,KAAK,CACHhC,IAAKof,EACLnd,KAAM,MACNC,SAAU,OACVrH,KAAMqkB,EAAMG,YACZ/c,QAAS,SAAUzH,GACfqkB,EAAM3d,UAAUkB,OACX5H,EAAKyH,SAUNtI,EAAE,sGAAsGgE,SAAS,QACjHhE,EAAE,oDAAoDwE,YAAY,UAVlEkZ,EAAewH,EAAOrkB,GACtBb,EAAE,cAAc2L,SACZ,YAAa9K,IACbqkB,EAAMnhB,KAAK,YAAYC,SAAS,cAChChE,EAAE,0BAA0BsH,QAC5BtH,EAAE,0BAA0BiZ,QAAQ,qCAAuCpY,EAAK2R,QAAU,SAE9FxS,EAAE,6BAA6BsE,QAAQ,6BAA8BzD,KAM7EoQ,MAAO,WACHiU,EAAM3d,UAAUkB,cAO5B,oBAAqB/F,SAAW,GAChC1C,EAAE,cAAc2L,SAIftK,EAAWkC,aACZqd,EAAyB5gB,EAAE,oBAE3BA,EAAE,QAAQmE,GAAG,QAAS,+DAA+D,WACjFzB,OAAO4iB,SAAS,CAAEhjB,IAAK,EAAGijB,SAAU,gB,gCCt1B5C,IAAIziB,EAAiBxB,EAAQ,GACzBoY,EAAOpY,EAAQ,GACfkkB,EAAclkB,EAAQ,GACtBmkB,EAAgBnkB,EAAQ,IAuD5B,SAASokB,EAAiBC,EAAkBvD,GACxCpiB,EAAE,eACGuH,UACAC,QACLxH,EAAEgI,KAAK,CACHhC,IAAK2f,EACL5U,OAAQ,MACR7I,SAAU,OACVI,QAAS,SAASzH,GACd,IAtBO8F,EACXkR,EAqBQC,GAtBGnR,EAsBoB9F,EAAKkX,iBAhBjC,CAAEC,MALLH,EAAQ7X,EAAE,SAAS8G,OAAO9G,EAAEiY,UAAUtR,KAEzB5C,KAAK,sBAGDmU,OAFRL,EAAM9T,KAAK,iBAAiByI,aAmB7BoZ,EAAyBxD,EAAGzZ,OAAO,mBAAmB5E,KAAK,8BAA8B8hB,QAE7F7lB,EAAE,kCAAkCsH,QACpCtH,EAAE,kCAAkC2G,KAAKmR,EAAWE,MACpDhY,EAAE,oCAAoC2G,KAAKmR,EAAWI,QACtDlY,EAAE,kBAAkBkG,KAAKrF,EAAKilB,wBAC9B9lB,EAAE,kCAAkC+E,KAAK,OAAQlE,EAAKklB,YACtD/lB,EAAE,+BAA+B+E,KAAK,OAAQlE,EAAKklB,YACnD/lB,EAAE,iDAAiDkG,KAAKrF,EAAKuX,iBAC7DpY,EAAE,kCAAkCkG,KAAKrF,EAAKsX,oBAC9CnY,EAAE,mDAAmD8G,OAAO8e,GAC5D5lB,EAAE,mBAAmBqY,MAAM,QAE3BrY,EAAEuH,UAAUkB,QAEhBwI,MAAO,WACHjR,EAAEuH,UAAUkB,UA/ExBzI,EAAEiE,UAAUC,OAAM,WACdpB,EAAexB,EAAQ,KACvBwB,EAAexB,EAAQ,QAkF3B5D,EAAOD,QAAU,CACbuoB,cAAe,WACXhmB,EAAE,QAAQmE,GAAG,QAAS,cAAc,SAASwG,GACzCA,EAAEhK,iBACF,IAAIiE,EAAQ5E,EAAEkB,MACVykB,EAAmB/gB,EAClBE,QAAQ,eACRC,KAAK,QACV/E,EAAE2K,EAAEwH,QAAQ7N,QAAQ,kBAlFQ,IAAhCtE,EAAE,mBAAmBM,QACrBN,EAAE,mBAAmB2L,SAczB3L,EAAE,QAAQ8G,OAXN,uVAgFI4e,EAAiBC,EAAkB/gB,OAG3CqhB,eAAgB,WACZjmB,EAAE,QAAQmE,GAAG,iBAAkB,mBAAmB,WAC9CnE,EAAE,0BAA0BU,YAGpCwlB,mBAAoB,WAChBlmB,EAAE,QAAQmE,GAAG,UAAW,mBAAmB,SAASwG,GAChD,IAAI/K,EAAc,CACdC,MAAO8K,EACP1K,kBAAmB,kBACnBC,qBAAsB,iBACtBE,oBAAqB,sBACrBG,0BAA2B,kCAE/BilB,EAAY7lB,gBAAgBC,OAIpCga,aAAcF,EAAKE,aACnBG,YAAa0L,EAAc1L,YAC3BoM,WAAYV,EAAcU,WAC1BC,sBAAuBX,EAAcW,sBACrCpM,gBAAiByL,EAAczL,gBAC/B2C,gBAAiB8I,EAAc9I,gBAC/BtC,mBAAoBoL,EAAcpL,oBAGtCra,EAAEiE,UAAUE,GAAG,QAAS,+BAA+B,WACnDnE,EAAE,kBAAkB2L,YAGxB3L,EAAEiE,UAAUE,GAAG,gBAAiB,mBAAmB,WAC/CnE,EAAE,+BAA+BgV,WAAW,gBAC5ChV,EAAE,8BAA8BiB,MAAK,SAAStD,EAAGM,GAC7C,GAAI+B,EAAE/B,GAAG8D,SAAS,YAAa,CAC3B,IAAIskB,EAAYrmB,EAAE/B,GAAG4C,KAAK,cAC1Bb,EAAE,mBAAmBkG,KAAKmgB,EAAUjf,mBAI5C,IAAIkf,EAAWriB,SAASghB,cAAc,wBACtC,GAAgB,MAAZqB,EAAkB,CAClB,IACIC,EAKZ,SAAsBrgB,EAAM+M,GACd/M,EAAK5F,QAEJ2S,IACP/M,EAAOA,EAAKsgB,UAAU,EAAG,KAAO,OAGpC,OAAOtgB,EAZgBugB,CADAH,EAASI,UACkB,KAC9CJ,EAASI,UAAYH,MAa7BvmB,EAAEiE,UAAUE,GAAG,kBAAmB,mBAAmB,WACjDnE,EAAE,mBAAmB2L,a,gCChKzB,IAAI+N,EAAOpY,EAAQ,GACfkkB,EAAclkB,EAAQ,GAwD1B,SAASokB,EAAiBC,GACtB3lB,EAAE,eAAeuH,UAAUC,QAC3BxH,EAAEgI,KAAK,CACHhC,IAAK2f,EACL5U,OAAQ,MACR7I,SAAU,OACVI,QAAS,SAAUzH,GACf,IApBO8F,EACXkR,EAmBQC,GApBGnR,EAoBoB9F,EAAKkX,iBAdjC,CAAEC,MALLH,EAAQ7X,EAAE,SAAS8G,OAAO9G,EAAEiY,UAAUtR,KAEzB5C,KAAK,sBAGDmU,OAFRL,EAAM9T,KAAK,iBAAiByI,aAkBjCxM,EAAE,eAAesH,QACjBtH,EAAE,eAAe2G,KAAKmR,EAAWE,MACjChY,EAAE,iBAAiB2G,KAAKmR,EAAWI,QACnClY,EAAE,kBAAkBkG,KAAKrF,EAAKilB,wBAC9B9lB,EAAE,kCAAkC+E,KAAK,OAAQlE,EAAKklB,YACtD/lB,EAAE,+BAA+B+E,KAAK,OAAQlE,EAAKklB,YACnD/lB,EAAE,iDAAiDkG,KAAKrF,EAAKuX,iBAC7DpY,EAAE,kCAAkCkG,KAAKrF,EAAKsX,oBAC9CnY,EAAE,mBAAmBqY,MAAM,QAC3BrY,EAAE,QAAQsE,QAAQ,mBAElBtE,EAAEuH,UAAUkB,QAEhBwI,MAAO,WACHjR,EAAEuH,UAAUkB,UAKxB/K,EAAOD,QAAU,CACbuoB,cAAe,WACXhmB,EAAE,QAAQmE,GAAG,QAAS,cAAc,SAAUwG,GAC1CA,EAAEhK,iBACF,IAAIglB,EAAmB3lB,EAAEkB,MAAM4D,QAAQ,eAAeC,KAAK,QAC3D/E,EAAE2K,EAAEwH,QAAQ7N,QAAQ,kBAlFQ,IAAhCtE,EAAE,mBAAmBM,QACrBN,EAAE,mBAAmB2L,SAoBzB3L,EAAE,QAAQ8G,OAlBO,miBAiFT4e,EAAiBC,OAGzBM,eAAgB,WACZjmB,EAAE,QAAQmE,GAAG,iBAAkB,mBAAmB,WAC9CnE,EAAE,0BAA0BU,YAGpCwlB,mBAAoB,WAChBlmB,EAAE,QAAQmE,GAAG,UAAW,mBAAmB,SAAUwG,GACjD,IAAI/K,EAAc,CACdC,MAAO8K,EACP1K,kBAAmB,kBACnBC,qBAAsB,iBACtBE,oBAAqB,sBACrBG,0BAA2B,kCAE/BilB,EAAY7lB,gBAAgBC,OAGpCga,aAAcF,EAAKE,aACnBC,UAAWH,EAAKG,UAChBE,YAAa,WACT/Z,EAAE,QAAQmE,GAAG,2BAA2B,SAAUwG,EAAG9J,GACjDb,EAAEa,GAAMiE,QAAQ,kBAAkByC,UAAUC,YAGpD2e,WAAY,WACRnmB,EAAE,QAAQmE,GAAG,0BAA0B,WACnCnE,EAAE,mBAAmBqY,MAAM,YAGnC+N,sBAAuB,WACnBpmB,EAAE,QAAQmE,GAAG,iCAAiC,WAC1CnE,EAAE,8BAA8BuH,UAAUC,YAGlDwS,gBAAiB,WACbha,EAAE,QAAQmE,GAAG,gCAAgC,SAAUwG,EAAG0D,GAClDrO,EAAE,gDAAgDM,QAClDN,EAAE,eAAe+D,KAAKsK,EAASxJ,WAAWhE,KAAK,MAAOwN,EAASxN,KAAK8V,QAAQ/Q,IAC5E5F,EAAE,eAAe+D,KAAKsK,EAASxJ,WAC1Bd,KAAK,eAAemC,KAAKmI,EAASxN,KAAK8V,QAAQ/Q,KAC7C5F,EAAE,cAAcM,OACvB+N,EAASxJ,UAAUd,KAAK,eAAemC,KAAKmI,EAASxN,KAAK8V,QAAQ/Q,KAElE5F,EAAE,kCAAkCa,KAAK,MAAOwN,EAASxN,KAAK8V,QAAQ/Q,IACtE5F,EAAE,8BACG+E,KAAK,OAAQsJ,EAASxN,KAAK8V,QAAQgQ,yBAIpDhK,gBAAiB,WACb3c,EAAE,QAAQmE,GAAG,2BAA2B,SAAUwG,EAAG0D,GAEjDrO,EAAE,qBAAsBqO,EAASkM,mBAAmBxV,KAAK,YACnDsJ,EAASsI,QAAQ8D,eAAiBpM,EAASsI,QAAQiG,WAGzD,IAAIgK,EAAS5mB,EAAEqO,EAASkM,mBACnBzV,QAAQ,sBAEb9E,EAAE,sBAAuB4mB,GAAQ7hB,KAAK,YACjC/E,EAAE,uBAAwB4mB,GAAQ/lB,KAAK,oBACpCb,EAAE,uBAAwB4mB,GAAQ/lB,KAAK,kBAIvDwZ,mBAAoB,WAChBra,EAAE,QAAQmE,GAAG,8BAA8B,SAAUwG,EAAG0D,GAEpDrO,EAAE,wBAAyBqO,EAASkM,mBAC/B1Z,KAAK,iBAAkBwN,EAASsI,QAAQ8D,cACxC5Z,KAAK,YAAawN,EAASsI,QAAQiG,WACnC7Y,KAAK,qBACLuD,QACAX,KAAK0H,EAASmE,SAGnB,IAAIoU,EAAS5mB,EAAEqO,EAASkM,mBACnBzV,QAAQ,sBAEb,GAAI9E,EAAE,wBAAyB4mB,GAAQtmB,OAAQ,CAE3C,IAAI2c,EAAejd,EAAE,wBAAyB4mB,GAAQ9J,UACjDC,OAAM,SAAUC,GAAQ,OAAOhd,EAAEgd,GAAMnc,KAAK,gBAE7Cqc,EAAWld,EAAE,wBAAyB4mB,GAAQ9J,UAC7CC,OAAM,SAAUC,GAAQ,OAAOhd,EAAEgd,GAAMnc,KAAK,qBAEjDb,EAAE,uBAAwB4mB,GACrB/lB,KAAK,iBAAkBqc,GACvBrc,KAAK,YAAaoc,GAEvBjd,EAAE,yCAA0C4mB,GAAQtf,QAC/CX,KAAKuW,EAAW7O,EAASmE,QAAUnE,EAAS8O,UAAUC,0BAG3Dpd,EAAE,uBAAwB4mB,GACrB/lB,KAAK,iBAAkBwN,EAASsI,QAAQ8D,cACxC5Z,KAAK,YAAawN,EAASsI,QAAQiG,WACnC7Y,KAAK,qBACLuD,QACAX,KAAK0H,EAASmE,e,gBCpMnC/U,EAAQ8F,SAAW,WAMf,IALA,IAAIsjB,EAAkB,CAAC,SAAU,SAAU,QAAS,OAAQ,OAAQ,UAAW,aAAc,aAAc,aAAc,QACrHC,EAAM,EACNvjB,GAAW,EACXwjB,EAAYC,UAAUD,UAAU3f,cAE7Byf,EAAgBC,KAASvjB,GAC5BA,EAAWwjB,EAAU9a,QAAQ4a,EAAgBC,KAAS,EACtDA,IAEJ,OAAOvjB,GAGX9F,EAAQwpB,SAAW,WACf,OAAOD,UAAUD,UAAUhY,MAAM,6BAGrCtR,EAAQypB,WAAa,WACjB,GAAI,iBAAiBxc,KAAKsc,UAAUG,UAAW,CAC3C,IAAIC,EAAKJ,UAAUK,WAAYtY,MAAM,0BACrC,MAAO,CAACuY,SAASF,EAAE,GAAI,IAAKE,SAASF,EAAE,GAAI,IAAKE,SAASF,EAAE,IAAM,EAAG,KAExE,OAAO,MAGX3pB,EAAQmR,UAAY,SAAU2Y,GAC1B,OAAItjB,SAASiH,OAAO5K,OAAS,IACzBknB,OAASvjB,SAASiH,OAAOe,QAAQsb,EAAa,MAC/B,GAAXC,SACAA,QAAUD,EAAWjnB,OAAS,EAC9BmnB,KAAOxjB,SAASiH,OAAOe,QAAQ,IAAKub,SACvB,GAATC,OAAYA,KAAOxjB,SAASiH,OAAO5K,QAChC6T,UAAUlQ,SAASiH,OAAOsb,UAAUgB,OAAQC,QAGpD,MAGXhqB,EAAQiqB,UAAY,SAAUC,EAAYC,EAAaC,GACnD,IAAIC,EAAQ,IAAItd,KACZud,EAAS,IAAIvd,KACJ,MAATqd,GAA0B,GAATA,IAAYA,EAAQ,GACzCE,EAAOC,QAAQF,EAAMG,UAAY,MAAeJ,GAChD5jB,SAASiH,OAASyc,EAAa,IAAM5c,OAAO6c,GAAe,aAAeG,EAAOG,cAAgB,YAGrGzqB,EAAQiE,QAAU,SAAUP,GAMxB,MAJmB,iBAARA,IACPA,EAAMnB,EAAE6b,KAAK1a,KAGTA,GAAsB,IAAfA,EAAIb,QAGvB7C,EAAQ+R,iBAAmB,SAAUxJ,GACjC,IAAImiB,EAAWrd,OAAO9E,GAAKiB,MAAM,KACjC,OAAIkhB,EAAS7nB,QAAU,EACZ6nB,EAAS,GAEbniB,GAGXvI,EAAQyR,0BAA4B,SAAUkZ,EAAgBpiB,GAI1D,IAHA,IACIqiB,EADAC,EAAoBtiB,EAAIiB,MAAM,KAGzBtJ,EAAI,EAAGA,EAAI2qB,EAAkBhoB,OAAQ3C,IAG1C,IAFA0qB,EAAmBC,EAAkB3qB,GAAGsJ,MAAM,MAEzB,KAAOmhB,EAAgB,CACxC,QAA4BhV,IAAxBiV,EAAiB,GACjB,OAAO,EAEX,IAAIE,EAAgBte,mBAAmBoe,EAAiB,IACxD,OAAIE,EAActhB,MAAM,KAAK3G,OAAS,EAC3BioB,EAActhB,MAAM,KAAKC,KAAK,KAAK8C,QAAQ,MAAO,KAAK5C,cAE3DmhB,EAAcve,QAAQ,MAAO,KAAK5C,cAGjD,OAAO,I,+BC7EX,IAAIsS,EAAOpY,EAAQ,GACfkkB,EAAclkB,EAAQ,IAe1B,SAASknB,EAAsBna,EAAUkM,EAAmBwD,GACxD,IACI0K,EADAC,EAA0BnO,EAAkBoO,QAAQ,gCAAgCroB,OAAS,EAE7FsoB,EAAW,KAkBf,GAhBIva,EAASsI,QAAQsD,aACjB2O,EAAW,CACP3O,WAAY5L,EAASsI,QAAQsD,WAC7B4O,aAAcxa,EAASsI,QAAQkS,eAGnCxa,EAASsI,QAAQ6K,uBAwTzB,SAAqBsH,EAAOvO,EAAmBwO,GAE3C,IAAIC,EAAoB,CAAC,SAEzBF,EAAMva,SAAQ,SAASxJ,GACfikB,EAAkB/c,QAAQlH,EAAKa,KAAO,GA/NlD,SAA6Bb,EAAMwV,EAAmBwO,GAClDhkB,EAAK4c,OAAOpT,SAAQ,SAAS0a,GACzB,IAAIC,EAAa3O,EAAkBxW,KAAK,eAAiBgB,EAAKa,GAAK,wBAA0BqjB,EAAUrqB,MAAQ,MAC3GuqB,EAAgBD,EAAWvgB,SAE3BsgB,EAAUpW,UACVqW,EAAWllB,SAAS,YACpBklB,EAAW3Y,SAAS,4BAA4BrK,KAAK6iB,EAAKK,yBAE1DF,EAAW1kB,YAAY,YACvB0kB,EAAW3Y,SAAS,4BAA4BjJ,SAGhD2hB,EAAUjjB,IACVmjB,EAAcpkB,KAAK,WAAYkkB,EAAUjjB,KAEzCmjB,EAAcnU,WAAW,YAI7BkU,EAAW1kB,YAAY,2BAEvB0kB,EAAWllB,SAASilB,EAAUlH,WAAa,aAAe,mBA0MtDsH,CAAoBtkB,EAAMwV,EAAmBwO,GAiBzD,SAAuBhkB,EAAMwV,GACzB,IAAI+O,EAAYvkB,EAAK4c,OAChBmC,KAAI,SAAS7Q,GACV,IAAI8O,EAAa9O,EAAK8O,WAAa,aAAe,eAC9ClP,EAAWI,EAAKJ,SAAW,WAAa,GAE5C,MACI,2DACAI,EAAKrN,GACL,oBACAqN,EAAKJ,SACL,eACAI,EAAKjN,IACL,sBACAiN,EAAKrU,MACL,oBACAqU,EAAKrN,GACL,6BAEAmc,EACA,IACAlP,EACA,sBACAI,EAAKrU,MACL,KACAqU,EAAKrU,MACL,sBAIPsI,KAAK,KAnSY1F,EAoSL+Y,EAnSVva,EAAEwB,GACJsD,QAAQ,mBACRf,KAAK,qBAkSLuD,QACAX,KAAK2iB,GAtSd,IAA0B9nB,EAqPd+nB,CAAcT,EAAM,GAAIvO,IA1LpC,SAAgCxV,EAAMwV,GAClC,IAAIiP,EAAQ,eAAiBzkB,EAAKa,GAAK,KAEvCb,EAAK4c,OAAOpT,SAAQ,SAAS0a,GACzB,IAAIC,EAAa3O,EAAkBxW,KAAKylB,EAAQ,sBAAwBP,EAAUrqB,MAAQ,MAC1FsqB,EAAWroB,KAAK,MAAOooB,EAAUjjB,KAAKgP,WAAW,YAE5CiU,EAAUlH,YAAekH,EAAUjH,+BACpCkH,EAAWnkB,KAAK,YAAY,IAE3BkkB,EAAUlH,YAAckH,EAAUjH,+BAC/BkH,EAAWnnB,SAAS,mBACpBmnB,EAAWllB,SAAS,8BAgLxBylB,CAAuB1kB,EAAMwV,MAhUjCmP,CAAYrb,EAASsI,QAAQ6K,oBAAqBjH,EAAmBlM,EAAS8O,WAC9EsL,EAA6C,YAAjCpa,EAASsI,QAAQyD,YACzBsO,GAA2BD,IAC3BlO,EAAkB5R,OAAO,uBAAuB9H,KAAK,MAAOwN,EAASsI,QAAQ/Q,IAE7E2U,EAAkB5R,OAAO,uBAAuB9H,KAAK,iBAAkBwN,EAASsI,QAAQ8D,gBAI1E,UAAlBsD,EAA2B,CAE3B,IAAI4L,EAAgBtb,EAASsI,QAAQiT,OACjCC,EAAmBF,EAAcG,OAiJ7C,SAAwBC,EAAMxP,EAAmByP,EAAYpB,GACzD,IAAIqB,EAAoBrB,EAAW,EAAI,EACnClJ,EAAWnF,EAAkBxW,KAAK,aACtC/D,EAAE0f,GAAUA,SAAS,WACrB,IAAIE,EAAa5f,EAAE0f,GAAU3a,KAAK,MAClC/E,EAAE0f,GACGpY,QACAR,OACG,iIACI8Y,EACA,gHACA5f,EAAE0f,GAAU7e,KAAK,QACjB,sDACA+e,EACA,gHACA5f,EAAE0f,GAAU7e,KAAK,QACjB,eAEZ,IAAK,IAAIlD,EAAI,EAAGA,EAAIosB,EAAKzpB,OAAQ3C,IAAK,CAClC,IAAI+O,EAAQ/O,EAAIA,EAAIssB,EAAkBtsB,EACtCqC,EACI,0BACI0M,EACA,uCACAA,EACA,eACAqd,EAAKpsB,GAAGqI,IACR,2CACA0G,EACA,gBACAsd,EAAWrsB,GAAGqI,IACd,UACA+jB,EAAKpsB,GAAGyI,IACR,iBACAkhB,SAASyC,EAAKpsB,GAAG+O,MAAO,IACxB,YACAqd,EAAKpsB,GAAGkR,MACR,+BACNiR,SAAS9f,EAAE0f,GAAU3b,KAAK,oBAC5B/D,EAAE,qBAAuB4f,EAAa,oBAAsBlT,EAAQ,oBAAoBoT,SAAS9f,EAAE0f,GAAU3b,KAAK,0BAC7GpG,GAAKirB,IACN5oB,EAAE,mKAAD,OACgE4oB,EAASC,aADzE,+KAIgB/I,SAAS9f,EAAE0f,GAAU3b,KAAK,oBAC3C/D,EAAE,qBAAuB4f,EAAa,sCAAsCE,SAAS9f,EAAE0f,GAAU3b,KAAK,0BAG9G/D,EAAEA,EAAE0f,GAAU3b,KAAK,mBACdmmB,QACAlmB,SAAS,UACdhE,EAAEA,EAAE0f,GAAU3b,KAAK,8BACdmmB,QACAlmB,SAAS,UACM,IAAhB+lB,EAAKzpB,QACLN,EAAEA,EAAE0f,GAAU3b,KAAK,wDAAwDomB,SAE/EnqB,EAAE0f,GAAUA,WACZ1f,EAAEA,EAAE0f,GAAU3b,KAAK,yBAAyBgB,KAAK,eAAe,GA1M5DqlB,CAAeP,EAAkBtP,EADuB,cAA5BoP,EAAc,UAA4BA,EAAc,UAAYE,EACrBjB,GAmNnF,SAAiCmB,EAAMxP,EAAmBqO,GACtD,IAAIqB,EAAoBrB,EAAW,EAAI,EACnCyB,EAAoB9P,EAAkBxW,KAAK,uBAG/CsmB,EAAkBtmB,KAAK,6BAA6BS,YAAY,oCAIhE,IAFA,IAAI8lB,EAAW,yCAENC,EAAI,EAAGA,EAAIR,EAAKzpB,OAAQiqB,IAAK,CAClC,IAAI7d,EAAQ6d,EAAIA,EAAIN,EAAkBM,EACtCD,GAAY,+FAAJ,OAAmG5d,EAAnG,uBAAuHqd,EAAKQ,GAAGvkB,IAA/H,yBAAmJ0G,EAAnJ,4CAA4Lqd,EAAKQ,GAAGnkB,IAApM,oBAAmN2jB,EAAKQ,GAAG1b,MAA3N,gDACH0b,GAAK3B,IACN0B,GAAY,ubASpBA,GAAY,QAEZtqB,EAAEqqB,GACG/iB,QACAR,OAAOwjB,GAEZ,IAMIE,EAA0BvmB,SAASwmB,iBAAiB,6BAEpDC,EAAe,EACfC,EAAW,IAAIC,sBAAqB,SAASC,GATxB,IAASC,EAU9BD,EAAQtc,SAAQ,SAASwc,GACjBA,EAAMC,gBACNN,OAKJA,EAAe,GACf1qB,EAAE6qB,EAAQ,GAAG1Y,QACRpO,KAAK,OACL1D,GAAG,cApBkByqB,EAsBP,IArBhB,IAAIG,SAAQ,SAASC,GACxBvd,WAAWud,EAASJ,OAoBKK,MAAK,WACrBnrB,EAAE6qB,EAAQ,GAAG1Y,QAAQpQ,SAAS,qCAC/B/B,EAAE6qB,EAAQ,GAAG1Y,QAAQnO,SAAS,yCAI3C,IAEHwmB,EAAwBjc,SAAQ,SAASmR,GACrCiL,EAASS,QAAQ1L,OAGfkJ,GACF5oB,EAAEgI,KAAK,CACHC,KAAM,MACNjC,IAAK,kCAAoC4iB,EAAS3O,WAAa,QAC/D/R,SAAU,OACVI,QAAS,SAAUzH,GACf,IAAImb,EAAenb,EAAK,GAAGob,gBAC3Bjc,EAAE,oBAAoB+E,KAAK,MAAOiX,GAClChc,EAAE,mBAAmB+E,KAAK,SAAUiX,MAxR5CqP,CAAwBxB,EAAkBtP,EAAmBqO,GAI5DF,IACoB1oB,EAAE,iBAAkBua,GAAmBja,OAASN,EAAE,iBAAkBua,GAAqBva,EAAE,mBACjGqR,YAAYhD,EAASsI,QAAQuH,MAAMvX,OAItD4T,EACKxW,KAAK,eACLuD,QACAX,KAAK0H,EAASsI,QAAQ2U,gBA6V/B,SAA4Bjd,EAAUkM,GAClC,IAAIgR,EAAoB,GACpBC,EAAuBnd,EAASsI,QAAQiD,aAAawH,SACrDqK,EAAuBlR,EAAkBxW,KAAK,sCAC7CsK,EAASsI,QAAQiG,UAIV6O,EAAqB1pB,SAAS,gBACtC0pB,EAAqBznB,SAAS,eAJ1BynB,EAAqB1pB,SAAS,gBAC9B0pB,EAAqBjnB,YAAY,eAKzCinB,EAAqB5qB,KAAK,YAAawN,EAASsI,QAAQiG,WACnDvO,EAASsI,QAAQ8D,aAEiC,YAA5CpM,EAASsI,QAAQiD,aAAasH,UACrCqK,EAAoB,gEAEpBC,EAAqBjd,SAAQ,SAASiE,GAClC+Y,GAAqB,YAAc/Y,EAAU,iBALjD+Y,EAAoB,YAAcld,EAAS8O,UAAUC,oBAAsB,cAS/Epd,EAAEua,GAAmBjW,QAAQ,6BAA8B,CACvDqS,QAAStI,EAASsI,QAClB4D,kBAAmBA,EACnB/H,QAAS+Y,EACTpO,UAAW9O,EAAS8O,YArXxB9C,CAAmBhM,EAAUkM,GAEzBmO,GACoBnO,EAAkBxW,KAAK,yBAC7BO,QAAQ,kCAAmC,CACrDqS,QAAStI,EAASsI,QAClB4D,kBAAmBA,IAIvBva,EAAE,oFACGsE,QAAQ,0BAA2B,CAChCqS,QAAStI,EAASsI,QAClB4D,kBAAmBA,IAEtBjW,QAAQ,uBAAwB+J,EAASsI,SAIlD4D,EACKxW,KAAK,oBACLuD,QACAX,KAyWT,SAA2BmD,GACvB,IAAKA,EACD,MAAO,GAGX,IAAInD,EAAO,GAUX,OARAmD,EAAWyE,SAAQ,SAASmd,GACE,mBAAtBA,EAAeC,IACfD,EAAe5hB,WAAWyE,SAAQ,SAASqd,GACvCjlB,GAAQ,iCAAmCilB,EAAUC,MAAQ,KAAOD,EAAUhtB,MAAQ,eAK3F+H,EAxXGmlB,CAAkBzd,EAASsI,QAAQ7M,aAuajD,SAASiiB,EAAiBC,EAAYzR,GAClC,KAAMA,EAAkB5R,OAAO,uBAAuBrI,OAAS,GAAI,CAC/D,IAAI2rB,EAAcD,EACblI,KAAI,SAASrL,GACV,IAAI5F,EAAW4F,EAAS5F,SAAW,aAAe,GAClD,MAAO,kBAAoB4F,EAAS7Z,MAAQ,gBAAkB6Z,EAASzS,IAAM,IAAM6M,EAAW,IAAM4F,EAAS7Z,MAAQ,eAExHsI,KAAK,KAtaW1F,EAuaD+Y,EAtajB/Y,GAAOxB,EAAE,cAAcM,OACxBN,EAAEwB,GACGsD,QAAQ,mBACRf,KAAK,oBACV/D,EAAE,qBAmaCsH,QACAX,KAAKslB,GAzalB,IAA6BzqB,EAob7B,SAASgZ,EAAgBmL,EAAkBpL,EAAmBwD,GACtD4H,IACA3lB,EAAE,QAAQsE,QAAQ,gCAAiC,CAAE0B,IAAK2f,EAAkB9gB,UAAW0V,IAEvFva,EAAEgI,KAAK,CACHhC,IAAK,GAAF,OAAK2f,EAAL,0BAAuC5H,GAC1ChN,OAAQ,MACRzI,QAAS,SAASzH,GACVA,EAAK6R,SACLhQ,OAAO8F,SAASnC,KAAOxF,EAAK6R,UAGhC8V,EAAsB3nB,EAAM0Z,EAAmBwD,GAvD/D,SAAuBkO,EAAa1R,GAEhCA,EACKxW,KAAK,oBACLuD,QACAX,KAAKslB,GAmDEC,CAAcrrB,EAAK8V,QAAQsV,YAAa1R,GACxCwR,EAAiBlrB,EAAK8V,QAAQqV,WAAYzR,GAC1Cva,EAAE,QAAQsE,QAAQ,+BAAgC,CAAEzD,KAAMA,EAAMgE,UAAW0V,EAAmBwD,oBAElG/M,SAAU,WACNhR,EAAEuH,UAAUkB,WAmC5B,SAASwO,EAAoBpW,GAQzB,IAAIqW,EAPJlX,EAAE,eACGuH,UACAC,QAEwC,IAAzCxH,EAAE,4BAA4BM,QAC9BN,EAAE,4BAA4B2L,SAI9BuL,EADArW,EAAKsW,qBACMtW,EAAKuW,yBAELvW,EAAKwW,yBAGpB,IAAIC,EACA,0NAKAzW,EAAK0W,cACL,eAEA1W,EAAK0V,KACL,kBAEA1V,EAAK2W,QACL,uBAEA3W,EAAK4W,aACL,qCAGA5W,EAAK6W,SACL,kBAEA7W,EAAKuW,yBACL,+BAEAvW,EAAKsW,qBACL,wGAKAtW,EAAK8W,OAAOC,YACZ,0QAWJ5X,EAAE,QAAQ8G,OAAOwQ,GACjBtX,EAAE,eACGuH,UACAC,QAELxH,EAAEgI,KAAK,CACHhC,IAAKkR,EACLnG,OAAQ,MACR7I,SAAU,OACVI,QAAS,SAAS+F,GACd,IAlFO1H,EACXkR,EAiFQC,GAlFGnR,EAkFoB0H,EAAS0J,iBA5ErC,CAAEC,MALLH,EAAQ7X,EAAE,SAAS8G,OAAO9G,EAAEiY,UAAUtR,KAEzB5C,KAAK,4BAGDmU,OAFRL,EAAM9T,KAAK,iBAAiByI,aA+EjCxM,EAAE,wCAAwCsH,QAC1CtH,EAAE,2CAA2CkG,KAAKmI,EAAS8J,oBAC3DnY,EAAE,0DAA0DkG,KAAKmI,EAAS+J,iBAC1EpY,EAAE,wCAAwC2G,KAAKmR,EAAWE,MAC1DhY,EAAE,0CAA0C2G,KAAKmR,EAAWI,QAC5DlY,EAAE,4BAA4BqY,MAAM,SAExCrH,SAAU,WACNhR,EAAEuH,UAAUkB,UAwDxB,SAAS0jB,EAAW5R,GAChB,IAAI3J,EAAU2J,EACTxW,KAAK,mBACL+f,KAAI,WACD,IAAIsI,EAAYpsB,EAAEkB,MAAM6C,KAAK,mBACzBsoB,EAAWD,EAAUjrB,MACrBmrB,EAAkBF,EAAUroB,KAAK,iBAAmBsoB,EAAW,MAAMxrB,KAAK,YAC9E,MAAO,CACH4U,SAAUzV,EAAEkB,MAAML,KAAK,aACvByrB,gBAAiBA,MAGxBxP,UAEL,OAAO1U,KAAKC,UAAUuI,GAG1BlT,EAAOD,QAAU,CACb+c,gBAAiBA,EACjB+R,QAAS,CACLC,kBAAmB,SAAS3rB,GACxBoW,EAAoBpW,KAI5Bsa,6BAA8B,WAC1Bnb,EAAE,QAAQmE,GAAG,iBAAkB,4BAA4B,WACvDnE,EAAE,4BACGuQ,WACAxL,KAAK,cAAe,QACzB/E,EAAE,mCAAmCU,YAI7C+rB,iCAAkC,WAC9BzsB,EAAE,QAAQmE,GAAG,kBAAmB,4BAA4B,WACxDnE,EAAE,4BACGuQ,WACAxL,KAAK,cAAe,aAIjC2nB,iCAAkC,WAC9B1sB,EAAE,QAAQmE,GAAG,UAAW,4BAA4B,SAASwG,GACzD,IAAI/K,EAAc,CACdC,MAAO8K,EACP1K,kBAAmB,2BACnBC,qBAAsB,SACtBE,oBAAqB,uBAEzBolB,EAAY7lB,gBAAgBC,OAIpC+sB,eAAgB,WACZ3sB,EAAEiE,UAAUE,GAAG,QAAS,8BAA8B,SAASwG,GAG3D,GAFAA,EAAEhK,kBAGEX,EAAEkB,MAAM6D,KAAK,cACb/E,EAAEkB,MACG6C,KAAK,iBACLhC,SAAS,YAJlB,CAQA,IAAIwY,EAAoBva,EAAEkB,MAAM4D,QAAQ,aACnCyV,EAAkBja,SACnBia,EAAoBva,EAAEkB,MAAM4D,QAAQ,oBAGxC0V,EAAgBxa,EAAEkB,MAAM6D,KAAK,YAAawV,EAAmB,cAIrED,gBAAiB,WACbta,EAAEiE,UAAUE,GAAG,SAAU,6CAA6C,SAASwG,GAC3EA,EAAEhK,iBAEF,IAAI4Z,EAAoBva,EAAEkB,MAAM4D,QAAQ,aACnCyV,EAAkBja,SACnBia,EAAoBva,EAAEkB,MAAM4D,QAAQ,oBAExC0V,EAAgB7P,EAAEoO,cAAcna,MAAO2b,EAAmB,gBAIlEX,aAAc,WACV5Z,EAAEiE,UAAUE,GAAG,SAAU,oBAAoB,SAASwG,GAClDA,EAAEhK,iBAEF,IAAI4Z,EAAoBva,EAAEkB,MAAM4D,QAAQ,mBACnCyV,EAAkBja,SACnBia,EAAoBva,EAAEkB,MACjB4D,QAAQ,kBACRf,KAAK,uBAGuC,IAAjD/D,EAAE,gBAAiBua,GAAmBja,QACtCka,EACIxa,EAAE2K,EAAEoO,eACChV,KAAK,mBACLlD,KAAK,OACV0Z,EACA,gBAKhBlT,wBAAyB,SAAS7F,EAAKuE,GACnC,GAAIvE,EAAIlB,QAAUyF,EAAWzF,OAAQ,CACjCkB,EAAI8F,QAEJ,IAAIgjB,EAAW,GAEfvkB,EAAWwI,SAAQ,SAAAqe,GACftC,GAAY,qDAAJ,OAAyDsC,EAAUC,WAAnE,aAEZrrB,EAAImF,KAAK2jB,KAGjBzQ,UAAW,WACP7Z,EAAEiE,UAAUE,GAAG,QAAS,iDAAiD,WACrE,IAAIsT,EACAtC,EACAoD,EACAuU,EACAC,EAAc/sB,EAAEkB,MAIpB,GAFAlB,EAAE,QAAQsE,QAAQ,0BAA2BpD,MAEzClB,EAAE,cAAcM,QAAUN,EAAEkB,MAAMa,SAAS,sBAAuB,CAClE,IAAIirB,EAAmBhtB,EAAEkB,MACpB4D,QAAQ,mBACRf,KAAK,oBACNkpB,EAAkBjtB,EAAEkB,MACnB4D,QAAQ,mBACRf,KAAK,qBACV,GAAIipB,EAAiB1sB,QAAU2sB,EAAgB3sB,OAG3C,OAFAN,EAAEuH,UAAUkB,YACZzI,EAAEkB,MAAMqgB,KAAK,YAAY,GAI7BuL,EAAU,GAEV9sB,EAAE,mBAAmBiB,MAAK,YAEjBjB,EAAEkB,MAAMa,SAAS,uBAClB/B,EAAEkB,MAAM6C,KAAK,0DACb/D,EAAEkB,MAAM6C,KAAK,oBAAoBzD,QAEjCwsB,EAAQ/kB,KAAK,CACToN,IAAKnV,EAAEkB,MACF6C,KAAK,eACLmC,OACLgnB,IAAKltB,EAAEkB,MACF6C,KAAK,oBACL5C,MACLyP,QAASub,EAAWnsB,EAAEkB,YAIlCqX,EAAUnQ,KAAKC,UAAUykB,GAG7B3X,EAAMuE,EAAKyT,YAAYntB,EAAEkB,OAEzB,IAAIqZ,EAAoBva,EAAEkB,MAAM4D,QAAQ,mBACnCyV,EAAkBja,SACnBia,EAAoBva,EAAEkB,MACjB4D,QAAQ,sBACRf,KAAK,oBAGd0T,EA3UDzX,EAAE,oBAAoBmB,MA6UrB,IAzMJqX,EAyMQF,EAAO,CACPnD,IAAKA,EACLoD,QAASA,EACTC,eA5MRA,EAAgB,GACpBxY,EAAE,gBAAgBiB,MAAK,WACnBuX,EAAczQ,KAAK,CACfoN,IAAKnV,EAAEkB,MACF6C,KAAK,eACLmC,OACLuS,SAAU6O,SACNtnB,EAAEkB,MACG6C,KAAK,kBACLlD,KAAK,YACV,SAKL2X,EAAclY,OAAS8H,KAAKC,UAAUmQ,GAAiB,IA8LlDC,SAAUiB,EAAK0T,oBAAoBptB,EAAEkB,QAGpClB,EAAE,gBAAgBM,SACnBgY,EAAK1H,QAAUub,EAAW5R,IAG9Bva,EAAEkB,MAAMoD,QAAQ,0BAA2BgU,GACvCb,GACAzX,EAAEgI,KAAK,CACHhC,IAAKyR,EACL1G,OAAQ,OACRlQ,KAAMyX,EACNhQ,QAAS,SAASzH,IAhPtC,SAA2BwN,EAAUgf,GACjCrtB,EAAE,aAAasE,QAAQ,eAAgB+J,GAEvC,IAAI2e,EAAmBK,EAAcvoB,QAAQ,mBAAmBf,KAAK,oBACjEkpB,EAAkBI,EAAcvoB,QAAQ,mBAAmBf,KAAK,qBAChEipB,EAAiB1sB,QAAU2sB,EAAgB3sB,OAC3C+sB,EAAc9L,KAAK,YAAY,GAI/BlT,EAASqK,0BAAsF,IAA1Dra,OAAOsD,KAAK0M,EAASqK,0BAA0BpY,QACpF2W,EAAoB5I,EAASqK,0BAsOb4U,CAAkBzsB,EAAMksB,GACxBlsB,EAAK8X,SAAWxD,EACXtU,EAAKoQ,OACNjR,EAAE,QAAQsE,QAAQ,yBAA0BzD,GAEhD6Y,EAAKd,qBAAqB/X,EAAKgY,cAC3BhY,EAAK0sB,cAAiC,oBAAVC,OAC5BA,MAAMzlB,KAAKlH,EAAK0sB,eAGxBvc,SAAU,WACNhR,EAAEuH,UAAUkB,cAMhCglB,mBAAoB/T,EAAK+T,mBACzBC,mBAAoBhU,EAAKgU,mBACzBC,4BAA6BjU,EAAKiU,4BAClCC,sBAAuBlU,EAAKkU,sBAC5BC,uBAAwBnU,EAAKmU,uBAC7BV,YAAazT,EAAKyT,YAClBC,oBAAqB1T,EAAK0T,oBAC1BxU,qBAAsBc,EAAKd,qBAC3BnU,UAAW,WACP,IAAMjD,EAAMxB,EAAE,gBAEVwB,EAAIlB,OAAS,GACbkB,EAAI2C,GAAG,SAAS,WACZnE,EAAE,cAAcijB,QAAQ,CAAEtgB,UAAW,GAAK,W,iBC36B1DjF,EAAOD,QAAU,WACbuC,EAAE,4BAA4BiB,MAAK,WAC/B,IAAI6sB,EAAyB9tB,EAAEkB,MACkB,IAA7C4sB,EAAuBthB,WAAWlM,QAClCwtB,EAAuB9pB,SAAS,a,+BCF5CtG,EAAOD,QAAU,CACbkC,gBAAiB,SAAUC,GAIvB,GAF8C,QAA1BA,EAAYC,MAAMX,KADpB,IACqCU,EAAYC,MAAMC,QAEzE,CAIA,IAAIC,EAAmBC,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYM,sBACvEC,EAAkBH,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYQ,qBAE1E,GAAIJ,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYQ,qBAAqBC,GAAG,eAC5EF,EAAkBH,EAAEJ,EAAYK,kBAAoB,IAAML,EAAYW,2BAClEP,EAAE,kCAAkCM,OAAS,GAAG,CAChD,IAAIE,EAAeR,EAAEJ,EAAYK,kBAAoB,0BACrDE,EAAkBK,EAAaA,EAAaF,OAAS,GAIzDV,EAAYC,MAAMY,SACdT,EAAE,UAAUK,GAAGN,KACfI,EAAgBO,QAChBd,EAAYC,MAAMc,kBAGlBX,EAAE,UAAUK,GAAGF,KACfJ,EAAiBW,QACjBd,EAAYC,MAAMc,sB,+BC7BlC,IAAI6kB,EAAclkB,EAAQ,GAO1B,SAAS6rB,EAAY3rB,GACjB,IAAI2T,EAEJ,GAAInV,EAAE,mBAAmB+B,SAAS,UAAY/B,EAAE,gBAAgBM,OAC5D6U,EAAMnV,EAAEwB,GAAKsD,QAAQ,kBAAkBf,KAAK,sBAAsBlD,KAAK,YACpE,GAAIb,EAAE,uBAAuBM,QAAUN,EAAE,gBAAgBM,OAC5D6U,EAAMnV,EAAEwB,GAAKsD,QAAQ,mBAAmBf,KAAK,eAAemC,WACzD,CAEH,IAAI6c,EAAiB/iB,EAAE,uCAEvB,GADAmV,EAAMnV,EAAE,uCAAuCa,KAAK,OAChDkiB,EAAehhB,SAAS,qBAAsB,CAC9C,IAAIgsB,EAAS/tB,EAAE,uCAAuCa,KAAK,gBACvDktB,IACA5Y,EAAM4Y,IAKlB,OAAO5Y,EAQX,SAAS6Y,EAAoBxsB,GACzB,OAAOA,GAAOxB,EAAE,cAAcM,OACxBN,EAAEwB,GAAKsD,QAAQ,mBAAmBf,KAAK,oBACvC/D,EAAE,oBAQZ,SAASotB,EAAoB5rB,GACzB,OAAOwsB,EAAoBxsB,GAAKL,MAiNpC,SAASqnB,EAAsBna,EAAUkM,GACrC,IAEIkO,EAFAC,EACAnO,EAAkBoO,QAAQ,gCAAgCroB,OAAS,GAEnE+N,EAASsI,QAAQ6K,uBAlIzB,SAAqBsH,EAAOvO,EAAmBwO,GAE3C,IAAIC,EAAoB,CAAC,SAEzBF,EAAMva,SAAQ,SAAUxJ,GAChBikB,EAAkB/c,QAAQlH,EAAKa,KAAO,EAvElD,SAA6Bb,EAAMwV,EAAmBwO,GAClDhkB,EAAK4c,OAAOpT,SAAQ,SAAU0a,GAC1B,IAAIC,EAAa3O,EAAkBxW,KAAK,eAAiBgB,EAAKa,GAAK,wBAC/DqjB,EAAUrqB,MAAQ,MAClBuqB,EAAgBD,EAAWvgB,SAE3BsgB,EAAUpW,UACVqW,EAAWllB,SAAS,YACpBklB,EAAW3Y,SAAS,4BAA4BrK,KAAK6iB,EAAKK,yBAE1DF,EAAW1kB,YAAY,YACvB0kB,EAAW3Y,SAAS,4BAA4BjJ,SAGhD2hB,EAAUjjB,IACVmjB,EAAcpkB,KAAK,WAAYkkB,EAAUjjB,KAEzCmjB,EAAcnU,WAAW,YAI7BkU,EAAW1kB,YAAY,2BAEvB0kB,EAAWllB,SAASilB,EAAUlH,WAAa,aAAe,mBAiDtDsH,CAAoBtkB,EAAMwV,EAAmBwO,GAhCzD,SAAgChkB,EAAMwV,GAClC,IAAIiP,EAAQ,eAAiBzkB,EAAKa,GAAK,KAClB2U,EAAkBxW,KAAKylB,EAAQ,YAAczkB,EAAKa,GAAK,iBAC7Db,KAAK,QAASA,EAAKkpB,UAElClpB,EAAK4c,OAAOpT,SAAQ,SAAU0a,GAC1B,IAAIC,EAAa3O,EACZxW,KAAKylB,EAAQ,sBAAwBP,EAAUrqB,MAAQ,MAC5DsqB,EAAWnkB,KAAK,QAASkkB,EAAUjjB,KAC9BgP,WAAW,YAEXiU,EAAUlH,YACXmH,EAAWnkB,KAAK,YAAY,MAsB5B0kB,CAAuB1kB,EAAMwV,MA2HjCmP,CAAYrb,EAASsI,QAAQ6K,oBAAqBjH,EAAmBlM,EAAS8O,WAC9EsL,EAA6C,YAAjCpa,EAASsI,QAAQyD,YACzBsO,GAA2BD,IAC3BlO,EAAkB5R,OAAO,uBACpB9H,KAAK,MAAOwN,EAASsI,QAAQ/Q,IAElC2U,EAAkB5R,OAAO,uBACpB9H,KAAK,iBAAkBwN,EAASsI,QAAQ8D,gBA1CzD,SAAwBsP,EAAMxP,GAC1B,IAAImF,EAAWnF,EAAkBxW,KAAK,aACtC/D,EAAE0f,GAAUA,SAAS,WACrB,IAAIE,EAAa5f,EAAE0f,GAAU3a,KAAK,MAClC/E,EAAE0f,GAAUpY,QAAQR,OAAO,iIAAmI8Y,EAAa,gHAAkH5f,EAAE0f,GAAU7e,KAAK,QAAU,sDAAwD+e,EAAa,gHAAkH5f,EAAE0f,GAAU7e,KAAK,QAAU,eAC1gB,IAAK,IAAIlD,EAAI,EAAGA,EAAIosB,EAAKzpB,OAAQ3C,IAC7BqC,EAAE,wCAA0C+pB,EAAKpsB,GAAGqI,IAAM,oCAAsC+jB,EAAKpsB,GAAGyI,IAAM,iBAAmBkhB,SAASyC,EAAKpsB,GAAG+O,MAAO,IAAM,YAAcqd,EAAKpsB,GAAGkR,MAAQ,+BAA+BiR,SAAS9f,EAAE0f,GAAU3b,KAAK,oBACtP/D,EAAE,qBAAuB4f,EAAa,oBAAsBjiB,EAAI,oBAAoBmiB,SAAS9f,EAAE0f,GAAU3b,KAAK,yBAElH/D,EAAEA,EAAE0f,GAAU3b,KAAK,mBAAmBmmB,QAAQlmB,SAAS,UACvDhE,EAAEA,EAAE0f,GAAU3b,KAAK,8BAA8BmmB,QAAQlmB,SAAS,UAC9C,IAAhB+lB,EAAKzpB,QACLN,EAAEA,EAAE0f,GAAU3b,KAAK,wDAAwDomB,SAE/EnqB,EAAE0f,GAAUA,WACZ1f,EAAEA,EAAE0f,GAAU3b,KAAK,yBAAyBgB,KAAK,eAAe,GAiChEqlB,CADuB/b,EAASsI,QAAQiT,OAAOE,MACdvP,GAG5BmO,KACoB1oB,EAAE,iBAAkBua,GAAmBja,OACtDN,EAAE,iBAAkBua,GACpBva,EAAE,mBACOqR,YAAYhD,EAASsI,QAAQuH,MAAMvX,OAItD4T,EAAkBxW,KAAK,eAAeuD,QAAQX,KAAK0H,EAASsI,QAAQ2U,gBAvIxE,SAA4Bjd,EAAUkM,GAClC,IAAIgR,EAAoB,GACpBC,EAAuBnd,EAASsI,QAAQiD,aAAawH,SACpD/S,EAASsI,QAAQ8D,aAGlB+Q,EAAqBjd,SAAQ,SAAUiE,GACnC+Y,GAAqB,YAAc/Y,EAAU,iBAHjD+Y,EAAoB,YAAcld,EAAS8O,UAAUC,oBAAsB,cAO/Epd,EAAEua,GAAmBjW,QAAQ,6BAA8B,CACvDqS,QAAStI,EAASsI,QAClB4D,kBAAmBA,EACnB/H,QAAS+Y,EACTpO,UAAW9O,EAAS8O,YA0HxB9C,CAAmBhM,EAAUkM,GAEzBmO,GACoBnO,EAAkBxW,KAAK,yBAC7BO,QAAQ,kCAAmC,CACrDqS,QAAStI,EAASsI,QAAS4D,kBAAmBA,IAIlDva,EAAE,oFAAoFsE,QAAQ,0BAA2B,CACrHqS,QAAStI,EAASsI,QAAS4D,kBAAmBA,IAC/CjW,QAAQ,uBAAwB+J,EAASsI,SAIhD4D,EAAkBxW,KAAK,oBAAoBuD,QACtCX,KAhIT,SAA2BmD,GACvB,IAAKA,EACD,MAAO,GAGX,IAAInD,EAAO,GAWX,OATAmD,EAAWyE,SAAQ,SAAUmd,GACC,mBAAtBA,EAAeC,IACfD,EAAe5hB,WAAWyE,SAAQ,SAAUqd,GACxCjlB,GAAQ,iCAAmCilB,EAAUC,MAAQ,KACvDD,EAAUhtB,MAAQ,eAK7B+H,EAgHGmlB,CAAkBzd,EAASsI,QAAQ7M,aAkCjD,SAAS0Q,EAAgBmL,EAAkBpL,GACnCoL,IACA3lB,EAAE,QAAQsE,QAAQ,gCACd,CAAE0B,IAAK2f,EAAkB9gB,UAAW0V,IAExCva,EAAEgI,KAAK,CACHhC,IAAK2f,EACL5U,OAAQ,MACRzI,QAAS,SAAUzH,GACf2nB,EAAsB3nB,EAAM0Z,GAlI5C,SAAuB0R,EAAa1R,GAEhCA,EAAkBxW,KAAK,oBAAoBuD,QAAQX,KAAKslB,GAiI5CC,CAAcrrB,EAAK8V,QAAQsV,YAAa1R,GA3BxD,SAA0ByR,EAAYzR,GAClC,KAAMA,EAAkB5R,OAAO,uBAAuBrI,OAAS,GAAI,CAC/D,IAAI2rB,EAAcD,EAAWlI,KAAI,SAAUrL,GACvC,IAAI5F,EAAW4F,EAAS5F,SAAW,aAAe,GAClD,MAAO,kBAAoB4F,EAAS7Z,MAAQ,gBAAkB6Z,EAASzS,IAAM,IACzE6M,EAAW,IAAM4F,EAAS7Z,MAAQ,eACvCsI,KAAK,IACR8mB,EAAoBzT,GAAmBjT,QAAQX,KAAKslB,IAqB5CF,CAAiBlrB,EAAK8V,QAAQqV,WAAYzR,GAC1Cva,EAAE,QAAQsE,QAAQ,+BACd,CAAEzD,KAAMA,EAAMgE,UAAW0V,IAC7Bva,EAAEuH,UAAUkB,QAEhBwI,MAAO,WACHjR,EAAEuH,UAAUkB,WAqB5B,SAASylB,EAAUvnB,GACf,IAAIkR,EAAQ7X,EAAE,SAAS8G,OAAO9G,EAAEiY,UAAUtR,IAK1C,MAAO,CAAEqR,KAHEH,EAAM9T,KAAK,4BAGDmU,OAFRL,EAAM9T,KAAK,iBAAiByI,YAU7C,SAASyK,EAAoBpW,GAMzB,IAAIqW,EALJlX,EAAE,eAAeuH,UAAUC,QAEkB,IAAzCxH,EAAE,4BAA4BM,QAC9BN,EAAE,4BAA4B2L,SAI9BuL,EADArW,EAAKsW,qBACMtW,EAAKuW,yBAELvW,EAAKwW,yBAGpB,IAAIC,EAAa,0NAIUzW,EAAK0W,cAAgB,eAC1B1W,EAAK0V,KAAO,kBACT1V,EAAK2W,QAAU,uBACV3W,EAAK4W,aAAe,qCAExB5W,EAAK6W,SAAW,kBACjB7W,EAAKuW,yBAA2B,+BACnBvW,EAAKsW,qBAAuB,wGAIpCtW,EAAK8W,OAAOC,YAAc,0QAWxD5X,EAAE,QAAQ8G,OAAOwQ,GACjBtX,EAAE,eAAeuH,UAAUC,QAE3BxH,EAAEgI,KAAK,CACHhC,IAAKkR,EACLnG,OAAQ,MACR7I,SAAU,OACVI,QAAS,SAAU+F,GACf,IAAIyJ,EAAaoW,EAAU7f,EAAS0J,kBACpC/X,EAAE,wCAAwCsH,QAC1CtH,EAAE,2CAA2CkG,KAAKmI,EAAS8J,oBAC3DnY,EAAE,0DAA0DkG,KAAKmI,EAAS+J,iBAC1EpY,EAAE,wCAAwC2G,KAAKmR,EAAWE,MAC1DhY,EAAE,0CAA0C2G,KAAKmR,EAAWI,QAC5DlY,EAAE,4BAA4BqY,MAAM,QACpCrY,EAAEuH,UAAUkB,QAEhBwI,MAAO,WACHjR,EAAEuH,UAAUkB,UA+DxB,SAAS0jB,EAAW5R,GAChB,IAAI3J,EAAU2J,EACTxW,KAAK,mBACL+f,KAAI,WACD,IAAIsI,EAAYpsB,EAAEkB,MAAM6C,KAAK,mBACzBsoB,EAAWD,EAAUjrB,MACrBmrB,EAAkBF,EAAUroB,KAAK,iBAAmBsoB,EAAW,MAC9DxrB,KAAK,YACV,MAAO,CACH4U,SAAUzV,EAAEkB,MAAML,KAAK,aACvByrB,gBAAiBA,MAEtBxP,UAEP,OAAO1U,KAAKC,UAAUuI,GAQ1B,SAASgI,EAAqB5S,GACtBA,GACAhG,EAAEgI,KAAK,CACHhC,IAAKA,EACL+K,OAAQ,MACRzI,QAAS,aAGT2I,MAAO,eAOnBvT,EAAOD,QAAU,CACb+c,gBAAiBA,EACjB+R,QAAS,CACLC,kBAAmB,SAAU3rB,GACzBoW,EAAoBpW,KAI5Bsa,6BAA8B,WAC1Bnb,EAAE,QAAQmE,GAAG,iBAAkB,4BAA4B,WACvDnE,EAAE,4BAA4BuQ,WAAWxL,KAAK,cAAe,QAC7D/E,EAAE,mCAAmCU,YAI7C+rB,iCAAkC,WAC9BzsB,EAAE,QAAQmE,GAAG,kBAAmB,4BAA4B,WACxDnE,EAAE,4BAA4BuQ,WAAWxL,KAAK,cAAe,aAIrE2nB,iCAAkC,WAC9B1sB,EAAE,QAAQmE,GAAG,UAAW,4BAA4B,SAAUwG,GAC1D,IAAI/K,EAAc,CACdC,MAAO8K,EACP1K,kBAAmB,2BACnBC,qBAAsB,SACtBE,oBAAqB,uBAEzBolB,EAAY7lB,gBAAgBC,OAIpC+sB,eAAgB,WACZ3sB,EAAEiE,UAAUE,GAAG,QAAS,8BAA8B,SAAUwG,GAG5D,GAFAA,EAAEhK,kBAEEX,EAAEkB,MAAM6D,KAAK,YAAjB,CAGA,IAAIwV,EAAoBva,EAAEkB,MAAM4D,QAAQ,aACnCyV,EAAkBja,SACnBia,EAAoBva,EAAEkB,MAAM4D,QAAQ,oBAGxC0V,EAAgBxa,EAAEkB,MAAM6D,KAAK,YAAawV,QAIlDD,gBAAiB,WACbta,EAAEiE,UAAUE,GAAG,SAAU,6CAA6C,SAAUwG,GAC5EA,EAAEhK,iBAEF,IAAI4Z,EAAoBva,EAAEkB,MAAM4D,QAAQ,aACnCyV,EAAkBja,SACnBia,EAAoBva,EAAEkB,MAAM4D,QAAQ,oBAExC0V,EAAgB7P,EAAEoO,cAAcna,MAAO2b,OAI/CX,aAAc,WACV5Z,EAAEiE,UAAUE,GAAG,SAAU,oBAAoB,SAAUwG,GACnDA,EAAEhK,iBAEF,IAAI4Z,EAAoBva,EAAEkB,MAAM4D,QAAQ,mBACnCyV,EAAkBja,SACnBia,EAAoBva,EAAEkB,MAAM4D,QAAQ,kBAAkBf,KAAK,uBAGV,IAAjD/D,EAAE,gBAAiBua,GAAmBja,QACtCka,EAAgBxa,EAAE2K,EAAEoO,eAAehV,KAAK,mBAAmBlD,KAAK,OAC5D0Z,OAKhBV,UAAW,WACP7Z,EAAEiE,UAAUE,GAAG,QAAS,iDAAiD,WACrE,IAAIsT,EACAtC,EACAoD,EACAuU,EAEJ9sB,EAAE,QAAQsE,QAAQ,0BAA2BpD,MAEzClB,EAAE,cAAcM,QAAUN,EAAEkB,MAAMa,SAAS,wBAC3C+qB,EAAU,GAEV9sB,EAAE,mBAAmBiB,MAAK,YACjBjB,EAAEkB,MAAMa,SAAS,uBAAyB/B,EAAEkB,MAAM6C,KAAK,yDAA4D/D,EAAEkB,MAAM6C,KAAK,oBAAoBzD,QACrJwsB,EAAQ/kB,KAAK,CACToN,IAAKnV,EAAEkB,MAAM6C,KAAK,eAAemC,OACjCgnB,IAAKltB,EAAEkB,MAAM6C,KAAK,oBAAoB5C,MACtCyP,QAASub,EAAWnsB,EAAEkB,YAIlCqX,EAAUnQ,KAAKC,UAAUykB,IAG7B3X,EAAMgY,EAAYntB,EAAEkB,OAEpB,IAAIqZ,EAAoBva,EAAEkB,MAAM4D,QAAQ,mBACnCyV,EAAkBja,SACnBia,EAAoBva,EAAEkB,MAAM4D,QAAQ,sBAAsBf,KAAK,oBAGnE0T,EAhSDzX,EAAE,oBAAoBmB,MAkSrB,IApKJqX,EAoKQF,EAAO,CACPnD,IAAKA,EACLoD,QAASA,EACTC,eAvKRA,EAAgB,GACpBxY,EAAE,gBAAgBiB,MAAK,WACnBuX,EAAczQ,KAAK,CACfoN,IAAKnV,EAAEkB,MAAM6C,KAAK,eAAemC,OACjCuS,SAAU6O,SAAStnB,EAAEkB,MAAM6C,KAAK,kBAAkBlD,KAAK,YAAa,SAIrE2X,EAAclY,OAAS8H,KAAKC,UAAUmQ,GAAiB,IAgKlDC,SAAU2U,EAAoBptB,EAAEkB,QAG/BlB,EAAE,gBAAgBM,SACnBgY,EAAK1H,QAAUub,EAAW5R,IAG9Bva,EAAEkB,MAAMoD,QAAQ,0BAA2BgU,GACvCb,GACAzX,EAAEgI,KAAK,CACHhC,IAAKyR,EACL1G,OAAQ,OACRlQ,KAAMyX,EACNhQ,QAAS,SAAUzH,IA1NvC,SAA2BwN,GACvBrO,EAAE,aAAasE,QAAQ,eAAgB+J,GACvC,IAAI8f,EAAc9f,EAAS4C,MAAQ,eAAiB,gBAEpD,GAAI5C,EAASqK,0BACoD,IAA1Dra,OAAOsD,KAAK0M,EAASqK,0BAA0BpY,OAClD2W,EAAoB5I,EAASqK,8BAC1B,CACuC,IAAtC1Y,EAAE,yBAAyBM,QAC3BN,EAAE,QAAQ8G,OACN,4CAIR9G,EAAE,yBAAyB8G,OACvB,qBAAuBqnB,EAAc,kFAEnC9f,EAASmE,QACT,UAGN,IAAI4b,EAAapuB,EAAE,yBAAyB6lB,QAC5C7lB,EAAE,qCAAqC8G,OAAOsnB,GAE9CzgB,YAAW,WACP3N,EAAE,wBAAwB2L,WAC3B,MAiMa2hB,CAAkBzsB,GAClBb,EAAE,QAAQsE,QAAQ,yBAA0BzD,GAC5Cb,EAAEuH,UAAUkB,OACZmQ,EAAqB/X,EAAKgY,eAE9B5H,MAAO,WACHjR,EAAEuH,UAAUkB,cAMhCglB,mBAAoB,WAChBztB,EAAEiE,UAAUE,GAAG,QAAS,yBAAyB,WAC7C,IAAIkqB,EAAwBruB,EAAEkB,MAAMynB,QAAQ,4BACxCxT,EAAMnV,EAAEkB,MAAML,KAAK,OACnBytB,EAAUtuB,EAAE,gCAAgCa,KAAK,aACjD0tB,EAAejH,SAAS+G,EAAsBtqB,KAAK,0BAA0B5C,MAAO,IACpFqtB,EAAW,EACfxuB,EAAEiB,KAAKjB,EAAE,oEAAoE,WACzEwuB,GAAYxuB,EAAEkB,MAAML,KAAK,UAE7B2tB,GAAYD,EACZ,IAAIE,EAAWJ,EAAsBtqB,KAAK,mBAAmBlD,KAAK,aAC9D6tB,EAAUL,EAAsBtqB,KAAK,mCAAmClD,KAAK,WACjF,GAAI2tB,GAAYF,EAAS,CACrB,IAAIK,EAA2B,2CAEdxZ,EAAM,cACNoZ,EAAe,oBACTE,GAAY,IAAM,iCACLC,GAAW,IAAM,sDAGnDL,EAAsBtqB,KAAK,iBAAiB4C,OAC5C,sFAIF3G,EAAE,qDAAqD8G,OAAO6nB,GAC9D3uB,EAAE,sBAAsB2G,KAAK6nB,GAC7BxuB,EAAE,2CAA2CwE,YAAY,qBAEzDxE,EAAE,2CAA2CgE,SAAS,oBAIlE0pB,mBAAoB,WAChB1tB,EAAEiE,UAAUE,GAAG,QAAS,iBAAiB,WACrCnE,EAAEkB,MAAMyK,SACR,IAAIijB,EAAY5uB,EAAE,mEACd6uB,EAAQ,EACRD,EAAUtuB,QACVsuB,EAAU3tB,MAAK,WACX4tB,GAASvH,SAAStnB,EAAEkB,MAAML,KAAK,OAAQ,OAI/Cb,EAAE,sBAAsB2G,KAAKkoB,GAC7B7uB,EAAE,2CAA2CwE,YAAY,oBAGjEmpB,4BAA6B,WACzB3tB,EAAE,QAAQmE,GAAG,mCAAmC,SAAUwG,EAAG0D,GACzDrO,EAAE,8BAA+BqO,EAASkM,mBAAmBxV,KAAK,YAC5DsJ,EAASsI,QAAQ8D,eAAiBpM,EAASsI,QAAQiG,WACzD,IAAIzH,EAAM9G,EAASsI,QAAQ/Q,GAC3B5F,EAAE,8BAA+BqO,EAASkM,mBAAmB1Z,KAAK,MAAOsU,OAGjFyY,sBAAuB,WACnB5tB,EAAEiE,UAAUE,GAAG,QAAS,6BAA6B,WACjD,IAAI6B,EAAMhG,EAAEkB,MAAML,KAAK,OACvBb,EAAE,kBAAkBuH,UAAUC,QAC9BxH,EAAEgI,KAAK,CACHhC,IAAKA,EACL+K,OAAQ,MACRzI,QAAS,SAAU3B,GACf,IAAImR,EAAaoW,EAAUvnB,GAC3B3G,EAAE,eAAe8G,OAAOgR,EAAWE,MACnChY,EAAE,mCAAmC2L,SACrC3L,EAAE,kBAAkBuH,UAAUkB,QAElCwI,MAAO,WACHjR,EAAE,kBAAkBuH,UAAUkB,cAK9ColB,uBAAwB,WACpB7tB,EAAEiE,UAAUE,GAAG,QAAS,uBAAuB,WAC3C,IAAI2qB,EAA6B9uB,EAAE,8CAC/B+uB,EAAc,SACd/oB,EAAMhG,EAAE,gCAAgCa,KAAK,gBAC7CmuB,EAAa,CACbC,cAAe,IAGnBjvB,EAAEiB,KAAK6tB,GAA4B,WAC/B,IAAII,EACA5H,SAAStnB,EAAEkB,MACNL,KAAK,OAAQ,IAElByQ,EAAS,KACT4d,EAAY,IACRlvB,EAAEkB,MAAML,KAAK,aAAeb,EAAEkB,MAAML,KAAK,4BACzCyQ,EAAS,IACFmE,SAAWzV,EAAEkB,MAAML,KAAK,YAC/ByQ,EAAO6I,UAAYna,EAAEkB,MAAML,KAAK,OAChCyQ,EAAOgb,gBAAkBtsB,EAAEkB,MAAML,KAAK,0BAE1CmuB,EAAWC,cAAclnB,KAAK,CAC1BoN,IAAKnV,EAAEkB,MAAML,KAAK,OAClBqsB,IAAKgC,EACLte,QAAS,CAACU,KAEd0d,EAAWR,SAAWlH,SAAStnB,EAAE,sBAAsB2G,OAAQ,QAKvEooB,GADAA,GADAA,GAAe3mB,KAAKC,UAAU2mB,IACF,SAAWhvB,EAAE,gCAAgCa,KAAK,SAClD,YAAcb,EAAE,gCAAgCa,KAAK,WACjFb,EAAEuH,UAAUC,QACZxH,EAAEgI,KAAK,CACHhC,IAAKA,EAAM+oB,EACXhe,OAAQ,OACRzI,QAAS,SAAUzH,GAEf,GADAb,EAAEuH,UAAUkB,OACR5H,EAAKoQ,MACLjR,EAAE,4BAA4BqY,MAAM,QACM,IAAtCrY,EAAE,yBAAyBM,QAC3BN,EAAE,QAAQ8G,OAAO,4CAErB9G,EAAE,yBAAyB8G,OACvB,gFAEEjG,EAAKiiB,aAAe,UAE1BnV,YAAW,WACP3N,EAAE,wBAAwB2L,WAC3B,SACA,CACH3L,EAAE,uCAAuC2G,KAAK9F,GAC9Cb,EAAE,yBAAyBwE,YAAY,kBACvCxE,EAAE,4BAA4BqY,MAAM,QAEM,IAAtCrY,EAAE,yBAAyBM,QAC3BN,EAAE,QAAQ8G,OAAO,4CAErB9G,EAAE,sBAAsB2G,KAAK9F,EAAK2tB,UAClCxuB,EAAE,yBAAyB8G,OACvB,iHAEEjG,EAAKsuB,WAAa,UAGxB,IAAIf,EAAapuB,EAAE,yBAAyB6lB,QAC5C7lB,EAAE,qCAAqC8G,OAAOsnB,GAE9CzgB,YAAW,WACP3N,EAAE,wBAAwB2L,SACtB3L,EAAE,cAAcM,QAChBkI,SAAS4mB,WAEd,QAGXne,MAAO,WACHjR,EAAEuH,UAAUkB,cAM5B0kB,YAAaA,EACbC,oBAAqBA,EACrBxU,qBAAsBA,I,0CCnzBpByW,GAbc5xB,EAAQohB,WAAa,SAAChR,GAAgC,IAAtBlF,EAAsB,uDAAb1E,SACzD,OAAK0E,EACEA,EAAOsc,cAAcpX,GADR,MAYNpQ,EAAQ4xB,SAAW,SAACxhB,GAAgC,IAAtBlF,EAAsB,uDAAb1E,SACrD,OAAK0E,EACE,GAAGf,MAAM9J,KAAK6K,EAAO8hB,iBAAiB5c,GAAW,GADpC,OAWlByhB,EAAa7xB,EAAQ6xB,UAAY,SAACC,GAAsB,IAC1D,IAAMC,EAASC,iBAAiBF,GAD0B,mBAAVG,EAAU,iCAAVA,EAAU,kBAG1D,OAAKA,EAAMpvB,OAEiB,IAAjBovB,EAAMpvB,OACNkvB,EAAOE,EAAM,IAEjBA,EAAM5L,KAAI,SAAA6L,GAAI,OAAIH,EAAOG,MAJrBH,GAYf/xB,EAAQkO,OAAS,SAAAyW,GACb,GAAKA,EACL,GAAIwN,MAAMC,QAAQzN,IAAOA,aAAc0N,SACnC,IAAK,IAAInyB,EAAI,EAAGyB,EAAIgjB,EAAG9hB,OAAQ3C,EAAIyB,EAAGzB,IAAK,CACvC,IAAM6mB,EAAOpC,EAAGzkB,GAChB6mB,EAAKC,cAAcsL,YAAYvL,QAGnCpC,EAAGqC,cAAcsL,YAAY3N,IAWrC3kB,EAAQuyB,aAAe,SAAC5N,EAAIrd,EAAM5D,GAC9B,GAAKihB,EACL,GAAIwN,MAAMC,QAAQzN,IAAOA,aAAc0N,SACnC,IAAK,IAAInyB,EAAI,EAAGyB,EAAIgjB,EAAG9hB,OAAQ3C,EAAIyB,EAAGzB,IAAK,CAC1BykB,EAAGzkB,GACXqyB,aAAajrB,EAAM5D,QAG5BihB,EAAG4N,aAAajrB,EAAM5D,IAU9B1D,EAAQwyB,gBAAkB,SAAC7N,EAAIrd,GAC3B,GAAKqd,EACL,GAAIwN,MAAMC,QAAQzN,IAAOA,aAAc0N,SACnC,IAAK,IAAInyB,EAAI,EAAGyB,EAAIgjB,EAAG9hB,OAAQ3C,EAAIyB,EAAGzB,IAAK,CAC1BykB,EAAGzkB,GACXsyB,gBAAgBlrB,QAGzBqd,EAAG6N,gBAAgBlrB,IAU3BtH,EAAQuG,SAAW,SAACoe,GAChB,GAAKA,EAAL,CAD+B,2BAARjhB,EAAQ,iCAARA,EAAQ,kBAOxB,MALP,GAAIyuB,MAAMC,QAAQzN,IAAOA,aAAc0N,SACnC,IAAK,IAAInyB,EAAI,EAAGyB,EAAIgjB,EAAG9hB,OAAQ3C,EAAIyB,EAAGzB,IAAK,OACjC6mB,EAAOpC,EAAGzkB,IAChB,EAAA6mB,EAAK0L,WAAUC,IAAf,QAAsBhvB,QAG1B,EAAAihB,EAAG8N,WAAUC,IAAb,QAAoBhvB,KAU5B1D,EAAQ+G,YAAc,SAAC4d,GACnB,GAAKA,EAAL,CADkC,2BAARjhB,EAAQ,iCAARA,EAAQ,kBAO3B,MALP,GAAIyuB,MAAMC,QAAQzN,IAAOA,aAAc0N,SACnC,IAAK,IAAInyB,EAAI,EAAGyB,EAAIgjB,EAAG9hB,OAAQ3C,EAAIyB,EAAGzB,IAAK,OACjC6mB,EAAOpC,EAAGzkB,IAChB,EAAA6mB,EAAK0L,WAAUvkB,OAAf,QAAyBxK,QAG7B,EAAAihB,EAAG8N,WAAUvkB,OAAb,QAAuBxK,KAU/B1D,EAAQqL,YAAc,SAACsZ,GACnB,GAAKA,EAAL,CADkC,2BAARjhB,EAAQ,iCAARA,EAAQ,kBAO3B,MALP,GAAIyuB,MAAMC,QAAQzN,IAAOA,aAAc0N,SACnC,IAAK,IAAInyB,EAAI,EAAGyB,EAAIgjB,EAAG9hB,OAAQ3C,EAAIyB,EAAGzB,IAAK,OACjC6mB,EAAOpC,EAAGzkB,IAChB,EAAA6mB,EAAK0L,WAAUE,OAAf,QAAyBjvB,QAG7B,EAAAihB,EAAG8N,WAAUE,OAAb,QAAuBjvB,KAW/B1D,EAAQsE,SAAW,SAACqgB,GAEhB,IAFmC,IAC3B8N,EAAc9N,EAAd8N,UACClyB,EAAI,EAAGoB,EAAI,UAAH,+BAAmBpB,EAAIoB,EAAGpB,IACvC,IAAKkyB,EAAUG,SAAiBryB,EAA3B,uBAA2BA,EAA3B,mBAA2BA,EAA3B,IAAgC,OAAO,EAEhD,OAAO,GAWXP,EAAQ6yB,SAAW,SAACC,GAA0B,IAAhB5U,EAAgB,uDAAR,IAC9B6U,GAAe,EAEnB,OAAO,WACH,IAAIA,EAAJ,CADgB,2BAATC,EAAS,yBAATA,EAAS,gBAGhBF,EAASG,MAAM,EAAMD,GACrBD,GAAe,EAEf7iB,YAAW,WACP6iB,GAAe,IAChB7U,MAYXle,EAAQkzB,SAAW,SAACJ,GAAiC,IAC7CK,EADsBC,EAAuB,uDAAR,IAGzC,OAAO,WAAa,2BAATJ,EAAS,yBAATA,EAAS,gBAChB3U,aAAa8U,GAEbA,EAAQjjB,YAAW,WACf4iB,EAAQ,WAAR,EAAYE,KACbI,KAIXpzB,EAAQqf,QAAU,WAAa,IAC3B,IAAMgU,EAAY,SAAA3e,GACd,IAAI4e,EACJ,IAAKnB,MAAMC,QAAQ1d,GAAS,CACxB,IAAM6e,EAAQ,GAAGppB,MAAM9J,KAAKqU,GAC5B4e,EAAYC,EAAM1wB,OAAS0wB,EAAQ,CAAC7e,GAExC,OAAO4e,GAPgB,mBAATN,EAAS,yBAATA,EAAS,gBAS3B,OAAOA,EAAKQ,QAAO,SAACC,EAASC,GACzB,OAAOD,EAAQE,OAAON,EAAUK,MACjC,KASP1zB,EAAQ+E,YAAc,SAAA4f,GAClB,IAAMoN,EAASF,EAAUlN,GAEzB,OAAOA,EAAGiP,aAAe/J,SAASkI,EAAO8B,UAAW,GAAKhK,SAASkI,EAAO+B,aAAc,IAS3F9zB,EAAQyE,aAAe,SAAAkgB,GACnB,IAAMkC,EAAS5hB,OAAO8uB,SAAW9uB,OAAO+uB,YAClCC,EAAYtP,EAAGuP,wBAAwBrvB,IAAMgiB,EAE7CsN,EAA0BxP,EAAGyP,QAAQC,qBAAuB,EAAI,EAEhEC,EACGzN,EADHyN,EAEMzN,EAAS5hB,OAAOwgB,YAAc0O,EAGpCI,EACGN,EADHM,EAEMN,EAAYtP,EAAGuC,aAG3B,OAAQqN,GAAiBD,GAAgBC,GAAiBD,GAAqBC,GAAcD,GAAmBC,GAAcD,GAOlIt0B,EAAQw0B,UAAY,SAAAzf,GACK6c,EAAS,SACjB9gB,SAAQ,SAAA2jB,GACjBA,EAAY3S,UAAZ,yEAA0F/M,EAA1F,wBAWR/U,EAAQ6nB,SAAW,SAAC6M,GAAD,IAAIC,EAAJ,uDAAe,IAAK7B,EAApB,uDAA+B,aAA/B,OAAiDvwB,EAAE,cAAcslB,SAAS6M,EAAGC,EAAU7B,IAO1G9yB,EAAQ40B,oBAAsB,SAAA9C,GAC1B,IAAKA,EAAQ+C,mBAAoB,OAAO/C,EAKxC,IAHA,IACIgD,EADEC,EAASjD,EAAQxK,UAAYwK,EAAQ3K,aAGnC2N,EAAUhD,EAAQ+C,oBAAqB,CAC3C,GAAIC,EAAQxN,WAAayN,EAAQ,OAAOD,EAAQE,uBAChDlD,EAAUgD,EAGd,OAAOhD,GASX9xB,EAAQi1B,oBAAsB,SAAArkB,GAC1B,IAAMskB,EAAsB3yB,EAAE,SACzB8G,OAAO9G,EAAEqO,IACTtK,KAAK,kBACV,GAAI4uB,EAAoBryB,OAAQ,CAC5B,IAAM0O,EAAStM,OAAO8F,SAASnC,KAAKY,MAAM,KAAK,GAAK,IAAM0rB,EAAoBxxB,MAC9EuB,OAAOwG,QAAQqG,UACX,CACIlF,KAAM2E,GAEV,GACAA,KAUZvR,EAAQm1B,kBAAoB,SAASrD,GACjC,OAAKA,EAGEA,EAAQ3wB,MAAM0B,OAFV,GAYf7C,EAAQo1B,eAAiB,SAAChlB,GAAD,IAAWilB,EAAX,uDAAmB7uB,SAAU8uB,EAA7B,uDAAuC,EAAvC,OACrB,IAAI9H,SAAQ,SAACC,EAAS8H,GAClB,IAAMC,EAAW5D,EAASxhB,GAE1B,GAAIolB,EAAS3yB,OAAQ,OAAO4qB,EAAQ+H,GAEpC,IAAMtI,EAAW,IAAIuI,kBAAiB,SAACC,EAAWC,GAC9C,IAAMH,EAAW5D,EAASxhB,GAEtBolB,EAAS3yB,SACT8yB,EAAKC,aACLnI,EAAQ+H,OAIhBtI,EAASS,QAAQ0H,EAAO,CAAEQ,WAAW,EAAMC,SAAS,IAEhDR,GACAplB,YAAW,WACPgd,EAAS0I,aACTL,EAAO,eACRD,OAIft1B,EAAQ6xB,UAAYA,EACpB7xB,EAAQ4xB,SAAWA,EAQnB5xB,EAAQ0nB,YAAc,SAACnf,EAAKwtB,GACxB,IAAIxkB,EAAShJ,EASb,OARAgJ,KAC8B,IAAzBA,EAAO/C,QAAQ,KAAc,IAAM,KACpC5N,OAAOsD,KAAK6xB,GACP1P,KAAI,SAAS5kB,GACV,OAAOA,EAAM,IAAM2L,mBAAmB2oB,EAAOt0B,OAEhDgI,KAAK,O,oQCzXlBxJ,EAAOD,QAAU,SAASg2B,EAAaC,IATvC,SAAyBpb,GACrBtY,EAAEsY,GACGvU,KAAK,4BACLS,YAAY,cACjBxE,EAAEsY,GACGvU,KAAK,4BACLiR,WAAW,gBAKhB2e,CAAgBF,GAChBzzB,EAAE,SAAUyzB,GAAa9nB,SACF,WAAnB,EAAO+nB,IAAwBA,EAAQE,QACvCv1B,OAAOsD,KAAK+xB,EAAQE,QAAQrlB,SAAQ,SAASrP,GACzC,GAAIw0B,EAAQE,OAAO10B,GAAM,CACrB,IAAI20B,EAAkB7zB,EAAEyzB,GACnB1vB,KAAK,UAAY7E,EAAM,MACvByJ,SACA6D,SAAS,qBAEVqnB,EAAgBvzB,OAAS,IACrBsvB,MAAMC,QAAQ6D,EAAQx0B,IACtB20B,EAAgBltB,KAAK+sB,EAAQE,OAAO10B,GAAKgI,KAAK,UAE9C2sB,EAAgBltB,KAAK+sB,EAAQE,OAAO10B,IAExC20B,EAAgBtjB,SAAS,iBAAiBvM,SAAS,cACnD6vB,EAAgBtjB,SAAS,iBAAiBxL,KAAK,eAAgB,QAC/D0uB,EAAY1vB,KAAK,eAAe,GAAGrD,aAK/CgzB,GAAWA,EAAQziB,SAC2B,SAAnCjR,EAAEyzB,GAAalS,KAAK,WAAwBvhB,EAAEyzB,GAAezzB,EAAEyzB,GAAa9K,QAAQ,SAE1F5kB,KAAK,UAAU+vB,OAAO,gDAAkDJ,EAAQziB,MAAM/J,KAAK,SAAW","file":"default/js/search.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 156);\n","'use strict';\r\n\r\nmodule.exports = {\r\n setTabNextFocus: function (focusParams) {\r\n var KEYCODE_TAB = 9;\r\n var isTabPressed = focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB;\r\n\r\n if (!isTabPressed) {\r\n return;\r\n }\r\n\r\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\r\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\r\n\r\n if (\r\n $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled') ||\r\n $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).length === 0\r\n ) {\r\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\r\n if ($('.product-quickview.product-set').length > 0) {\r\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\r\n lastFocusableEl = linkElements[linkElements.length - 1];\r\n }\r\n }\r\n\r\n if (focusParams.event.shiftKey) {\r\n /* shift + tab */ if ($(':focus').is(firstFocusableEl)) {\r\n lastFocusableEl.focus();\r\n focusParams.event.preventDefault();\r\n }\r\n } /* tab */ else if ($(':focus').is(lastFocusableEl)) {\r\n // eslint-disable-line\r\n firstFocusableEl.focus();\r\n focusParams.event.preventDefault();\r\n }\r\n }\r\n};\r\n","'use strict';\r\nmodule.exports = {\r\n updateTokens: function (data) {\r\n if (data && 'csrf' in data) {\r\n var csrf = data.csrf;\r\n if ('tokenName' in csrf && 'token' in csrf) {\r\n var $elem = $('input[name=\"' + csrf.tokenName + '\"]');\r\n if ($elem.length > 0) {\r\n $elem.each(function () {\r\n $(this).val(csrf.token);\r\n });\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","'use strict';\r\nlet customUtil = require('../customUtil');\r\n\r\nmodule.exports = {\r\n setCarousel: function($el, slickConfigs) {\r\n if (customUtil.isEmpty($el) && Object.keys(slickConfigs).length === 0) return;\r\n $el.not('.slick-initialized').slick(slickConfigs);\r\n },\r\n destroyCarousel: function($el) {\r\n if($el.hasClass('slick-initialized')) {\r\n $el[0].slick.unslick();\r\n }\r\n },\r\n reinitCarousel: function($el, slickConfigs) {\r\n this.destroyCarousel($el);\r\n this.setCarousel($el, slickConfigs);\r\n }\r\n}\r\n\r\n\r\n","'use strict';\r\n\r\n/**\r\n * Function to update image attributes\r\n * @param {JQuery} $element - Jquery element to check\r\n * @returns {boolean} - Returns true if element is in viewport, else returns false\r\n */\r\nfunction isInViewport($element) {\r\n let elementTop = $element.offset().top;\r\n let elementBottom = elementTop + $element.outerHeight();\r\n\r\n let viewportTop = $(window).scrollTop();\r\n let viewportBottom = viewportTop + $(window).height();\r\n\r\n return elementBottom > viewportTop && elementTop < viewportBottom;\r\n}\r\n\r\nmodule.exports = {\r\n isInViewport: isInViewport\r\n};","'use strict';\r\n\r\nvar processInclude = require('base/util');\r\nvar baseHelper = require('./product/base');\r\nvar slickHelper = require('./utils/slick');\r\nvar customUtil = require('./customUtil');\r\nvar sitePrefs = SitePreferences || window.SitePreferences;\r\nvar resource = Resources || window.Resources;\r\nvar Cookies = require('js-cookie');\r\n\r\n$(document).ready(function () {\r\n\r\n processInclude(require('./search/categoryMarketingSlotTile'));\r\n processInclude(require('./search/search'));\r\n processInclude(require('./product/quickView'));\r\n processInclude(require('./product/wishlist'));\r\n\r\n /**\r\n * triggerLoadMore\r\n * @return boolean\r\n */\r\n function triggerLoadMore() {\r\n var elem = $('.btn.btn-outline-primary.col-12.col-sm-4.button-secondary');\r\n if (!elem.hasClass('loading')) {\r\n elem.trigger('click');\r\n elem.hide();\r\n }\r\n }\r\n\r\n /**\r\n * Check the window position\r\n * @return Boolean\r\n */\r\n function isScrolledIntoView() {\r\n var prodDetailBottom = $('.btn.btn-outline-primary.col-12.col-sm-4.button-secondary');\r\n\r\n if (prodDetailBottom.length === 0) {\r\n return false;\r\n }\r\n\r\n return $(window).scrollTop() + $(window).height() >= prodDetailBottom.offset().top;\r\n }\r\n\r\n $(window).on('scroll', function () {\r\n if (isScrolledIntoView() && !Cookies.get('UsableNetAssistive')) {\r\n triggerLoadMore();\r\n }\r\n });\r\n});\r\n$('.sizeGuide-link').on('click', function () {\r\n $('.product-detail').addClass('sizeGuideShow');\r\n});\r\n\r\n$(document).on('hidden.bs.modal', '#pdp-sizeGuide', function () {\r\n $('.product-detail').removeClass('sizeGuideShow');\r\n});\r\n\r\n$(document).ready(function () {\r\n var backToTop = $('.back-to-top-btn');\r\n\r\n backToTop.hide();\r\n $(window).on('scroll', function () {\r\n if ($(this).scrollTop() > 500) {\r\n backToTop.fadeIn();\r\n } else {\r\n backToTop.fadeOut();\r\n }\r\n });\r\n});\r\n\r\n$('.sizeGuide-link').on('click', function () {\r\n $('.product-detail').addClass('sizeGuideShow');\r\n});\r\n\r\n$(document).on('hidden.bs.modal', '#pdp-sizeGuide', function () {\r\n $('.product-detail').removeClass('sizeGuideShow');\r\n});\r\n\r\n$(document).on('click', '.color-swatches button', function () {\r\n var $this = $(this);\r\n var container = $this.closest('.product-tile');\r\n\r\n container.find('button').removeClass('active');\r\n container.find('button.color-attribute').each(function () {\r\n $(this).attr('aria-checked', false);\r\n });\r\n $this.addClass('active').attr('aria-checked', true);\r\n var listprice = $this.data('listprice');\r\n var salesprice = $this.data('salesprice');\r\n var imgfront = $this.data('imgfront');\r\n var imgfrontalt = $this.data('imgfrontalt');\r\n var imgback = $this.data('imgback');\r\n var imgbackalt = $this.data('imgbackalt');\r\n var percentageoff = $this.data('percentageoff');\r\n var isNew = $this.data('isnew');\r\n var isBestSeller = $this.data('isbestseller');\r\n var exclusiveBadge = $this.data('exclusivebadge');\r\n var exclusiveBadgeID = $this.data('exclusivebadgeid');\r\n var salesBadge = $this.data('salesbadge');\r\n var id = $this.data('id');\r\n var defaultVariantId = $this.data('defaultvariantid');\r\n var hasSalePricebook = $this.data('hassalepricebook');\r\n var promotions = $this.data('promotions');\r\n var url = $this.data('url');\r\n var quickviewUrl = '/on/demandware.store/Sites-aando-Site/default/Product-ShowQuickView?pid=' + id;\r\n var name = $this.data('varname');\r\n container.find('.link').text(name);\r\n container.find('.front-card').attr({ src: imgfront, alt: imgfrontalt });\r\n container.find('.back-card').attr({ src: imgback, alt: imgbackalt });\r\n container.find('a').attr({ href: url });\r\n container.find('a.quickview').attr({ href: quickviewUrl });\r\n\r\n container.find('.bfx-sku').text(defaultVariantId);\r\n if (!listprice) {\r\n container.find('.strike-through').hide();\r\n container\r\n .find('.bfx-list-price')\r\n .attr({ content: salesprice.value })\r\n .text(salesprice.formatted);\r\n container.find('.percent-value').text('');\r\n } else {\r\n var isHidden = container.find('.strike-through').css('display');\r\n if (isHidden === 'none') {\r\n container.find('.strike-through').css('display', '');\r\n }\r\n\r\n if (container.find('.bfx-sale-price').length ) {\r\n container\r\n .find('.bfx-list-price')\r\n .attr({ content: listprice.value })\r\n .text(listprice.formatted);\r\n container.find('.percent-value').text(percentageoff);\r\n } else {\r\n var listPriceText = `\r\n \r\n ${listprice.formatted}\r\n \r\n `;\r\n var salesPriceText = `${salesprice.formatted}`;\r\n\r\n if (!hasSalePricebook) {\r\n container.find('.price-section').html(salesPriceText);\r\n } else {\r\n container.find('.price-section').html(listPriceText + salesPriceText);\r\n }\r\n }\r\n container\r\n .find('.bfx-sale-price')\r\n .attr({ content: salesprice.value })\r\n .text(salesprice.formatted);\r\n }\r\n\r\n if (!hasSalePricebook) {\r\n container.find('.strike-through').hide();\r\n container.find('.percent-value').text('');\r\n }\r\n // eslint-disable-next-line no-unused-expressions\r\n salesprice &&\r\n container\r\n .find('.bfx-sale-price')\r\n .attr({ content: salesprice.value })\r\n .text(salesprice.formatted);\r\n // eslint-disable-next-line no-unused-expressions\r\n isNew &&\r\n container\r\n .find('.badge-product')\r\n .show()\r\n .html('New Arrivals');\r\n // eslint-disable-next-line no-unused-expressions\r\n isBestSeller &&\r\n container\r\n .find('.badge-product')\r\n .show()\r\n .html('Best Seller');\r\n\r\n if (!isNew && !isBestSeller) {\r\n container.find('.badge-product').hide();\r\n\r\n if (salesBadge) {\r\n container.find('.badge-product').show();\r\n }\r\n }\r\n\r\n //display exclusive badge when not empty and if sales badge is empty\r\n container.find('.badge-product').removeClass('badge-exclusive');\r\n\r\n if (exclusiveBadge && !salesBadge) {\r\n container.find('.badge-product').show();\r\n container.find('.badge-product').addClass('badge-exclusive');\r\n\r\n if (!container.find('.badge-product').length) {\r\n var badge = '
' + exclusiveBadge + '
';\r\n container.find('.product-detail').append(badge);\r\n } else {\r\n var badge = '' + exclusiveBadge + '';\r\n container.find('.badge-product').html(badge);\r\n }\r\n\r\n //hide the 'New to Sale' badge for international users\r\n var newToSale = resource.NEW_TO_SALE.split(' ').join('');\r\n if (sitePrefs.IS_INTERNATIONAL && exclusiveBadgeID === newToSale.toLowerCase()) {\r\n container.find('.badge-product').hide();\r\n }\r\n }\r\n\r\n /* re-renders the applicable promotions if the product has active product-level promotions */\r\n const $targetEl = container.find('.applicable-promotions');\r\n if (promotions && promotions.length > 0) {\r\n baseHelper.updateProductPromotions($targetEl, promotions);\r\n } else {\r\n $targetEl.empty();\r\n }\r\n\r\n});\r\n\r\n$('body').on('click', '.size-value', function () {\r\n if ($(this).hasClass('selected') === true) {\r\n $(this).removeClass('selected');\r\n } else {\r\n $(this).addClass('selected');\r\n }\r\n});\r\n\r\n$('body').on('click', '.btn-shop-myfit', function (event) {\r\n event.preventDefault();\r\n $.spinner().start();\r\n var url = $(this).attr('href');\r\n var myfit = {};\r\n $('.myfit-category').each(function () {\r\n var $category = $(this);\r\n var categoryID = $category.attr('id').slice(0, -4);\r\n var sizes = [];\r\n if ($category.find('.size-value.selected').length > 0) {\r\n $category.find('.size-value.selected').each(function () {\r\n var $size = $(this);\r\n sizes.push($size.data('displayValue'));\r\n });\r\n myfit[categoryID] = sizes;\r\n }\r\n });\r\n $.ajax({\r\n url: url,\r\n type: 'post',\r\n dataType: 'json',\r\n data: { fitselection: JSON.stringify(myfit) },\r\n success: function (data) {\r\n if (data && data.redirectUrl) {\r\n window.location.href = data.redirectUrl;\r\n }\r\n }\r\n });\r\n $.spinner().stop();\r\n});\r\n\r\n$('body').on('click', '.refinement-list .refinement-name', function () {\r\n var $refinement = $(this).parent();\r\n var isActive = $refinement.hasClass('active');\r\n var $this = $(this);\r\n\r\n $('.refinement-list .refinement')\r\n .filter(function () {\r\n return !$this.closest(this, '.refinements-more-list').length;\r\n })\r\n .removeClass('active');\r\n $refinement.toggleClass('active', !isActive);\r\n});\r\n\r\n$('body').on('click', '.product-tile-container .product-tile a', function() {\r\n const scrollPosition = $('body').data('scroll-position');\r\n\r\n let session = sessionStorage || window.sessionStorage;\r\n\r\n window.history.scrollRestoration = 'manual';\r\n session.setItem('prevPlpScrollPos', scrollPosition);\r\n});\r\n\r\n// initialize the plp image carousel when images are loaded on mobile\r\nfunction initializeImageCarousels() {\r\n var isMobile = customUtil.isMobile();\r\n\r\n // plp image carousel configs\r\n let configs = {\r\n lazyLoad: 'ondemand',\r\n arrows: !isMobile,\r\n dots: true,\r\n mobileFirst: isMobile\r\n },\r\n\r\n $plpSearchResultsElement = $('.js-plp-search-results');\r\n\r\n if (!customUtil.isEmpty($plpSearchResultsElement)) {\r\n let $targetEl = $plpSearchResultsElement.find('.product-tile .image-container .plp-slider');\r\n slickHelper.setCarousel($targetEl, configs);\r\n $plpSearchResultsElement.find('.product-tile .image-container').addClass('plp-mobile');\r\n }\r\n}\r\n// initialize the plp image carousel when images are loaded on mobile\r\n$(document).ready(function () {\r\n initializeImageCarousels();\r\n});\r\n\r\n/** Function that will trigger a initialization of carousels on a page\r\n * needed when new product tiles are loaded \r\n * */\r\n$('body').on('refresh:productTile:carousel', function () {\r\n initializeImageCarousels();\r\n});\r\n","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction decode (s) {\n\t\treturn s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api() {}\n\n\t\tfunction set (key, value, attributes) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tattributes = extend({\n\t\t\t\tpath: '/'\n\t\t\t}, api.defaults, attributes);\n\n\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\tattributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n\t\t\t}\n\n\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\ttry {\n\t\t\t\tvar result = JSON.stringify(value);\n\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\tvalue = result;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\n\t\t\tvalue = converter.write ?\n\t\t\t\tconverter.write(value, key) :\n\t\t\t\tencodeURIComponent(String(value))\n\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\n\t\t\tkey = encodeURIComponent(String(key))\n\t\t\t\t.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)\n\t\t\t\t.replace(/[\\(\\)]/g, escape);\n\n\t\t\tvar stringifiedAttributes = '';\n\t\t\tfor (var attributeName in attributes) {\n\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Considers RFC 6265 section 5.2:\n\t\t\t\t// ...\n\t\t\t\t// 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n\t\t\t\t// character:\n\t\t\t\t// Consume the characters of the unparsed-attributes up to,\n\t\t\t\t// not including, the first %x3B (\";\") character.\n\t\t\t\t// ...\n\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n\t\t\t}\n\n\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t}\n\n\t\tfunction get (key, json) {\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar jar = {};\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all.\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = decode(parts[0]);\n\t\t\t\t\tcookie = (converter.read || converter)(cookie, name) ||\n\t\t\t\t\t\tdecode(cookie);\n\n\t\t\t\t\tif (json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tjar[name] = cookie;\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn key ? jar[key] : jar;\n\t\t}\n\n\t\tapi.set = set;\n\t\tapi.get = function (key) {\n\t\t\treturn get(key, false /* read as raw */);\n\t\t};\n\t\tapi.getJSON = function (key) {\n\t\t\treturn get(key, true /* read as json */);\n\t\t};\n\t\tapi.remove = function (key, attributes) {\n\t\t\tset(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.defaults = {};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n","'use strict';\r\nvar basesearchSearch = require('base/search/search');\r\nvar slickHelper = require('../utils/slick');\r\nvar customUtil = require('../customUtil');\r\nvar plpAddToCart = require('../components/plpAddToCart');\r\nvar myFitSelected = [];\r\n\r\nvar appendParamToURL = function (url, name, value) {\r\n // quit if the param already exists\r\n if (url.indexOf(name + '=') !== -1) {\r\n return url;\r\n }\r\n var separator = url.indexOf('?') !== -1 ? '&' : '?';\r\n return url + separator + name + '=' + encodeURIComponent(value);\r\n};\r\n\r\nvar stringToHash = function (string) {\r\n // Converts to 32bit integer\r\n var hash = 0;\r\n\r\n if (string.length === 0) return hash;\r\n\r\n for (var i = 0; i < string.length; i++) {\r\n var char = string.charCodeAt(i);\r\n hash = (hash << 5) - hash + char;\r\n hash &= hash;\r\n }\r\n return hash;\r\n};\r\n\r\n/**\r\n * Update sort option URLs from Ajax response\r\n *\r\n * @param {string} response - Ajax response HTML code\r\n * @return {undefined}\r\n */\r\nfunction updateSortOptions(response) {\r\n var $tempDom = $('
').append($(response));\r\n var sortOptions = $tempDom.find('.grid-footer').data('sort-options').options;\r\n sortOptions.forEach(function (option) {\r\n $('option.' + option.id).val(option.url);\r\n });\r\n}\r\n\r\n/**\r\n * Initializes category refinement slick slider on mobile\r\n */\r\nfunction initCategoryRefinements() {\r\n var categoryRefinementsSelector = '.categories-ul';\r\n if ($(categoryRefinementsSelector).length > 0 && $(categoryRefinementsSelector).children('li').length > 1) {\r\n var allSlidesWidths = 0;\r\n $(categoryRefinementsSelector).find('.child-selected').each(function (index, tag) {\r\n allSlidesWidths += $(tag).outerWidth();\r\n });\r\n if ($(window).width() <= 992 && allSlidesWidths > $(categoryRefinementsSelector).outerWidth()) {\r\n if ($(categoryRefinementsSelector).hasClass('slick-initialized')) {\r\n $(categoryRefinementsSelector).slick('unslick');\r\n }\r\n $(categoryRefinementsSelector).slick({\r\n infinite: false,\r\n mobileFirst: true,\r\n slidesToShow: 1,\r\n variableWidth: true,\r\n slidesToScroll: 1,\r\n arrows: true,\r\n draggable: true,\r\n touchMove: true,\r\n swipeToSlide: true,\r\n swipe: true,\r\n responsive: [\r\n {\r\n breakpoint: 992,\r\n settings: 'unslick'\r\n }\r\n ]\r\n });\r\n } else if ($(categoryRefinementsSelector).hasClass('slick-initialized')) {\r\n $(categoryRefinementsSelector).slick('unslick');\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Replaces and reinitializes category refinements on mobile\r\n * @param {Object} $results - jQuery object/element\r\n */\r\nfunction handleCategoryRefinements($results) {\r\n $('.category-refinements-container').empty().html($results.find('.category-refinements-container').html());\r\n setTimeout(function () {\r\n initCategoryRefinements();\r\n }, 100);\r\n}\r\n\r\n/**\r\n * Update DOM elements with Ajax results\r\n *\r\n * @param {Object} $results - jQuery DOM element\r\n * @param {string} selector - DOM element to look up in the $results\r\n * @return {undefined}\r\n */\r\nfunction updateDom($results, selector) {\r\n var $updates = $results.find(selector);\r\n $(selector)\r\n .empty()\r\n .html($updates.html());\r\n $('.update-count-header').html($('.update-count').html());\r\n if ($('.search-page-product-count').length > 0) {\r\n $('.search-page-product-count').html($results.find('.search-page-product-count').html());\r\n }\r\n\r\n /* update the category breadcrumb based on the selected category in the refinement */\r\n if ($('.category-breadcrumb').length > 0) {\r\n $('.category-breadcrumb').html($results.find('.ajax-category-breadcrumb').html());\r\n }\r\n\r\n /* update the search result banner based on the selected category in the refinement */\r\n var $searchResultBannerEl = $('.search-result-banner');\r\n if ($searchResultBannerEl.length > 0) {\r\n $searchResultBannerEl.html($results.find('.ajax-search-result-banner').html());\r\n }\r\n}\r\n\r\n/**\r\n * Keep refinement panes expanded/collapsed after Ajax refresh\r\n *\r\n * @param {Object} $results - jQuery DOM element\r\n * @return {undefined}\r\n */\r\nfunction handleRefinements($results) {\r\n $('.refinement.active').each(function () {\r\n $(this).removeClass('active');\r\n var activeDiv = $results.find('.' + $(this)[0].className.replace(/ /g, '.'));\r\n activeDiv.addClass('active');\r\n activeDiv.find('button.title').attr('aria-expanded', 'true');\r\n });\r\n\r\n updateDom($results, '.refinements');\r\n}\r\n\r\n/**\r\n *\r\n * Updates SEO copy block\r\n * @param {Object} $results - jQuery DOM element\r\n */\r\nfunction handleSEOCopy($results) {\r\n var $parentDiv = $('
').html($results);\r\n updateDom($parentDiv, '.seo-copy-block');\r\n}\r\n\r\n/**\r\n * Parse Ajax results and updated select DOM elements\r\n *\r\n * @param {string} response - Ajax response HTML code\r\n * @return {undefined}\r\n */\r\nfunction parseResults(response) {\r\n var $results = $(response);\r\n var specialHandlers = {\r\n '.refinements': handleRefinements,\r\n '.seo-copy-block': handleSEOCopy,\r\n '.category-refinements-container': handleCategoryRefinements\r\n };\r\n\r\n // Update DOM elements that do not require special handling\r\n ['.grid-header', '.header-bar', '.header.page-title', '.product-grid', '.show-more', '.filter-bar'].forEach(function (selector) {\r\n updateDom($results, selector);\r\n });\r\n\r\n Object.keys(specialHandlers).forEach(function (selector) {\r\n specialHandlers[selector]($results);\r\n });\r\n}\r\n\r\n$('body').on('search:updateProducts', function (e, refinementUrl) {\r\n var singleRefinement;\r\n var categoryURL = $('.category-search-header').data('href');\r\n if (categoryURL) {\r\n if (refinementUrl) {\r\n var categoryTitle;\r\n if (customUtil.getCookie('plpCategoryTitle')) {\r\n categoryTitle = customUtil.getCookie('plpCategoryTitle').replace(/[\"]/g, '');\r\n } else {\r\n categoryTitle = document.title;\r\n }\r\n var refinements = refinementUrl.match(/(prefn[\\d])/g);\r\n if (refinements) {\r\n var url = categoryURL.split('/?');\r\n var newUrl = url[0];\r\n var refinementCount = 0;\r\n for (var i = 0; i < refinements.length; i++) {\r\n if (customUtil.getUrlQueryParameterValue(refinements[i], refinementUrl) !== 'size') {\r\n var prefvMatched = refinements[i].replace(/n(\\d)/, 'v$1');\r\n var refinementValue = customUtil.getUrlQueryParameterValue(prefvMatched, refinementUrl);\r\n var isMultiple = refinementValue.includes('+');\r\n if (!isMultiple) {\r\n singleRefinement = refinementValue.charAt(0).toUpperCase() + refinementValue.slice(1).toLowerCase();\r\n }\r\n if (refinementValue) {\r\n refinementCount += 1;\r\n if (refinementCount === 1) {\r\n if (newUrl.slice(-1) === '/') {\r\n newUrl = newUrl + refinementValue;\r\n } else {\r\n newUrl = newUrl + '/' + refinementValue;\r\n }\r\n } else {\r\n newUrl = newUrl + '.' + refinementValue;\r\n }\r\n }\r\n }\r\n }\r\n if (url[1]) {\r\n newUrl = newUrl + '/?' + url[1];\r\n }\r\n history.pushState('', '', newUrl);\r\n if (refinements.length === 1 && singleRefinement) {\r\n document.title = singleRefinement + ' ' + categoryTitle;\r\n $('[rel=\"canonical\"]').attr('href', customUtil.removeQueryParam(newUrl));\r\n $('[name=\"robots\"]').attr('content', 'index,follow');\r\n } else {\r\n document.title = categoryTitle;\r\n $('[name=\"robots\"]').attr('content', 'noindex,nofollow');\r\n $('[rel=\"canonical\"]').attr('href', customUtil.removeQueryParam(categoryURL));\r\n }\r\n } else {\r\n document.title = categoryTitle;\r\n history.pushState('', '', categoryURL);\r\n $('[name=\"robots\"]').attr('content', 'index,follow');\r\n $('[rel=\"canonical\"]').attr('href', customUtil.removeQueryParam(categoryURL));\r\n }\r\n } else {\r\n history.pushState('', document.title, categoryURL);\r\n }\r\n }\r\n\r\n $('.category-marketing-slot').each(function (_index, categoryMarketingSlot) {\r\n if (categoryMarketingSlot && categoryMarketingSlot.children.length === 0) {\r\n categoryMarketingSlot.remove();\r\n }\r\n });\r\n});\r\n\r\nwindow.pushLinkTohistory = false;\r\n\r\n/**\r\n * Set category url in the window history for back to PLP navigation\r\n */\r\nfunction pdpToPlpNavigation() {\r\n $('body').on('click', '.plp-search-results .product-tile .image-container a', function () {\r\n if ($('.permalink').length > 0) {\r\n var url = $('.permalink').attr('value');\r\n if (window.pushLinkTohistory === true) {\r\n window.history.pushState({}, '', url);\r\n }\r\n }\r\n });\r\n}\r\n\r\n/* navigate to the previously selected product from PDP to PLP */\r\nvar goToPreviouslySelectedProduct = function () {\r\n if (sessionStorage.getItem('prevPlpScrollPos')) {\r\n // window.scrollTo({ top: sessionStorage.getItem('prevPlpScrollPos') });\r\n sessionStorage.removeItem('prevPlpScrollPos');\r\n window.history.scrollRestoration = 'auto';\r\n }\r\n};\r\n\r\n/**\r\n * reinitialize the plp image carousel on load more\r\n *\r\n * @param {HTMLElement} $el - HTML target element\r\n * @param {Object} slickConfigs - slick carousel options\r\n */\r\nfunction reinitPLPImageCarousel($el, slickConfigs) {\r\n if (customUtil.isEmpty($el) && Object.keys(slickConfigs).length === 0) return;\r\n\r\n slickHelper.reinitCarousel($el, slickConfigs);\r\n}\r\n\r\nvar generateUrl = function (catId, myFitCookie, url) {\r\n myFitSelected.push(catId);\r\n var catSizes = myFitCookie[catId];\r\n var prefMatched = url.match(/(prefn[\\d])=size/); // find size preferences\r\n if (prefMatched && prefMatched.length) {\r\n var prefvMatched = prefMatched[1].replace(/n(\\d)/, 'v$1'); // find equivalent size preference values\r\n var re = new RegExp(prefvMatched + '=([^&]*)');\r\n // If size values exist in cookie, replace them in url with these values\r\n // else remove size pref and values in url\r\n if (catSizes) {\r\n url = url.replace(re, prefvMatched + '=' + catSizes.join('|'));\r\n return url;\r\n }\r\n\r\n var rePrefn = new RegExp('prefn[\\\\d]=size&?');\r\n var rePrefv = new RegExp(prefvMatched + '=([^&]*)&?');\r\n return url.replace(rePrefn, '').replace(rePrefv, '');\r\n }\r\n\r\n prefMatched = url.match(/prefn[\\d]/g);\r\n var prefName = 'prefn1';\r\n var prefValue = 'prefv1';\r\n if (prefMatched && prefMatched.length) {\r\n prefName = 'prefn' + (prefMatched.length + 1);\r\n prefValue = 'prefv' + (prefMatched.length + 1);\r\n }\r\n url = appendParamToURL(url, prefName, 'size');\r\n return appendParamToURL(url, prefValue, catSizes.join('|'));\r\n};\r\n\r\nmodule.exports = {\r\n filter: function () {\r\n // Display refinements bar when Menu icon clicked\r\n $('.container, .container-fluid').on('click', 'button.filter-results', function () {\r\n $('.refinement-bar, .modal-background').show();\r\n $('.refinement-bar').siblings().attr('aria-hidden', true);\r\n $('.refinement-bar').closest('.row').siblings().attr('aria-hidden', true);\r\n $('.refinement-bar').closest('.tab-pane.active').siblings().attr('aria-hidden', true);\r\n $('.refinement-bar').closest('.container.search-results, .container-fluid.search-results').siblings().attr('aria-hidden', true);\r\n $('.refinement-bar .close').focus();\r\n });\r\n },\r\n\r\n closeRefinements: function () {\r\n // Refinements close button\r\n $('.container, .container-fluid').on('click', '.refinement-bar button.close, .modal-background', function () {\r\n $('.refinement-bar, .modal-background').hide();\r\n $('.refinement-bar').siblings().attr('aria-hidden', false);\r\n $('.refinement-bar').closest('.row').siblings().attr('aria-hidden', false);\r\n $('.refinement-bar').closest('.tab-pane.active').siblings().attr('aria-hidden', false);\r\n $('.refinement-bar').closest('.container.search-results, .container-fluid.search-results').siblings().attr('aria-hidden', false);\r\n $('.btn.filter-results').focus();\r\n });\r\n },\r\n\r\n resize: basesearchSearch.fresize,\r\n\r\n sort: function () {\r\n $('.container, .container-fluid').on('change', '[name=sort-order]', function (e) {\r\n e.preventDefault();\r\n\r\n $(this).trigger('search:sort', [this.value, this.options[this.options.selectedIndex].text]);\r\n $.spinner().start();\r\n $.ajax({\r\n url: this.value,\r\n data: { selectedUrl: this.value },\r\n method: 'GET',\r\n success: function (response) {\r\n $('.product-grid')\r\n .empty()\r\n .html(response);\r\n $('body').trigger('search:updateProducts');\r\n $.spinner().stop();\r\n window.pushLinkTohistory = true;\r\n },\r\n complete: function () {\r\n $(\"body\").trigger('refresh:productTile:carousel');\r\n $.spinner().stop();\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n\r\n showMore: function () {\r\n // Show more products\r\n $('.container, .container-fluid').on('click', '.show-more button', function (e) {\r\n e.stopPropagation();\r\n var showMoreUrl = $(this).data('url');\r\n var configs = {\r\n lazyLoad: 'ondemand',\r\n arrows: false,\r\n dots: true\r\n };\r\n var $plpSearchResultsElement = $('.js-plp-search-results');\r\n\r\n e.preventDefault();\r\n\r\n $(this).addClass('loading');\r\n\r\n $.spinner().start();\r\n $(this).trigger('search:showMore', e);\r\n $.ajax({\r\n url: showMoreUrl,\r\n data: { selectedUrl: showMoreUrl },\r\n method: 'GET',\r\n success: function (response) {\r\n $('.grid-footer').replaceWith(response);\r\n updateSortOptions(response);\r\n $('body').trigger('search:updateProducts');\r\n if (!customUtil.isEmpty($plpSearchResultsElement) && customUtil.isMobile()) {\r\n var $targetEl = $plpSearchResultsElement.find('.product-tile .image-container .plp-slider');\r\n configs.mobileFirst = true;\r\n reinitPLPImageCarousel($targetEl, configs);\r\n $plpSearchResultsElement.find('.product-tile .image-container').addClass('plp-mobile');\r\n }\r\n $.spinner().stop();\r\n $('.btn.btn-outline-primary.col-12.col-sm-4.button-secondary').show();\r\n $(this).removeClass('loading');\r\n window.pushLinkTohistory = true;\r\n // Affirm SI-1635\r\n if (typeof affirm !== 'undefined') {\r\n affirm.ui.refresh(); // eslint-disable-line no-undef\r\n }\r\n },\r\n complete: function () {\r\n $(\"body\").trigger('refresh:productTile:carousel');\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n $(this).removeClass('loading');\r\n }\r\n });\r\n });\r\n },\r\n\r\n applyFilter: function () {\r\n // Handle refinement value selection and reset click\r\n $('.container, .container-fluid')\r\n .unbind('keydown')\r\n .on(\r\n 'click keydown',\r\n '.refinement-details li button, .clear-refinements button, .refinements li button, .secondary-bar button, .refinement-bar button.reset, .filter-value button, .swatch-filter button, .category-refinements-container button.category, .refinement-category',\r\n function (e) {\r\n if (e.type === 'click' || e.which === 13 || e.which === 32) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n $(this).trigger('search:filter', e);\r\n\r\n var urlStr = $(this).data('href');\r\n\r\n var typeEvent = e.type;\r\n\r\n // var for selected category\r\n var selCat = $(this).hasClass('category');\r\n\r\n var cgids = urlStr.match('cgid=([^&]*)');\r\n if (cgids) {\r\n var cgid = cgids[1];\r\n $('#product-search-results')\r\n .attr('data-cgid', cgid)\r\n .data('cgid');\r\n }\r\n\r\n var url = $(this).data('href');\r\n\r\n if ($(e.target).hasClass('reset')) {\r\n myFitSelected.pop();\r\n url = $(e.target).data('href');\r\n url = appendParamToURL(url, 'fitToggle', 'false');\r\n } else if (selCat && !myFitSelected.length) {\r\n var $myFitToggle = $('.myfit-toggle');\r\n var myFitToggleOn = $myFitToggle.is(':checked');\r\n if (myFitToggleOn) {\r\n try {\r\n var catId = url.match('cgid=([^&]*)')[1];\r\n var myfit = customUtil.getCookie('myFit');\r\n var myFitCookie = JSON.parse(JSON.parse(myfit));\r\n if (myFitCookie) {\r\n myFitSelected.push(catId);\r\n var catSizes = myFitCookie[catId];\r\n var prefMatched = url.match(/(prefn[\\d])=size/); // find size preferences\r\n if (prefMatched && prefMatched.length) {\r\n var prefvMatched = prefMatched[1].replace(/n(\\d)/, 'v$1'); // find equivalent size preference values\r\n var re = new RegExp(prefvMatched + '=([^&]*)');\r\n // If size values exist in cookie, replace them in url with these values\r\n // else remove size pref and values in url\r\n if (catSizes) {\r\n url = url.replace(re, prefvMatched + '=' + catSizes.join('|'));\r\n }\r\n } else {\r\n prefMatched = url.match(/prefn[\\d]/g);\r\n var prefName = 'prefn1';\r\n var prefValue = 'prefv1';\r\n if (prefMatched && prefMatched.length) {\r\n prefName = 'prefn' + (prefMatched.length + 1);\r\n prefValue = 'prefv' + (prefMatched.length + 1);\r\n }\r\n url = appendParamToURL(url, prefName, 'size');\r\n url = appendParamToURL(url, prefValue, catSizes.join('|'));\r\n }\r\n // Create hash for url caching\r\n var hashValue = stringToHash(myfit);\r\n url = appendParamToURL(url, 'fitHash', hashValue);\r\n }\r\n } catch (err) {\r\n window.console.error(e.message);\r\n }\r\n }\r\n }\r\n\r\n $.spinner().start();\r\n\r\n $.ajax({\r\n url: url,\r\n data: {\r\n page: $('.grid-footer').data('page-number'),\r\n selectedUrl: url\r\n },\r\n method: 'GET',\r\n success: function (response) {\r\n if (response.redirect) {\r\n window.location.href = response.redirect;\r\n return;\r\n }\r\n parseResults(response);\r\n\r\n $('body').trigger('search:updateProducts', url);\r\n if (typeEvent !== 'click' && selCat !== false) {\r\n setTimeout(function () {\r\n $('.selected.category').focus();\r\n }, 0);\r\n }\r\n window.pushLinkTohistory = true;\r\n },\r\n complete: function () {\r\n $(\"body\").trigger('refresh:productTile:carousel');\r\n $.spinner().stop();\r\n }\r\n });\r\n }\r\n }\r\n );\r\n },\r\n resetMyFit: function () {\r\n // Handle refinement value selection and reset click\r\n $('.container, .container-fluid').on('change', '.myfit-toggle', function (e) {\r\n e.stopImmediatePropagation();\r\n var myFitCookie;\r\n var selected = $(this).is(':checked');\r\n var url = $(this).data('url');\r\n\r\n url = url.replace(/&?fitToggle=([^&]*)/, '');\r\n var catId = url.match('cgid=([^&]*)')[1];\r\n\r\n if (selected) {\r\n // Initialize myFit sizes from cookie\r\n try {\r\n var myfit = customUtil.getCookie('myFit');\r\n myFitCookie = JSON.parse(JSON.parse(myfit));\r\n if (myFitCookie) {\r\n url = generateUrl(catId, myFitCookie, url);\r\n // Create hash for url caching\r\n var hashValue = stringToHash(myfit);\r\n url = appendParamToURL(url, 'fitHash', hashValue);\r\n }\r\n } catch (err) {\r\n window.console.error(err.message);\r\n }\r\n url = appendParamToURL(url, 'fitToggle', 'true');\r\n sessionStorage.myFitToggle = 'on';\r\n } else {\r\n // Remove myFit sizes. Leave non-myFit sizes.\r\n try {\r\n myFitSelected.pop();\r\n myFitCookie = JSON.parse(JSON.parse(customUtil.getCookie('myFit')));\r\n if (myFitCookie) {\r\n var catSizes = myFitCookie[catId];\r\n var prefMatched = url.match(/(prefn[\\d])=size/); // find size preferences\r\n if (prefMatched && prefMatched.length) {\r\n var prefvMatched = prefMatched[1].replace(/n(\\d)/, 'v$1'); // find equivalent size preference values\r\n var re = new RegExp(prefvMatched + '=([^&]*)');\r\n var sizesUrl = url.match(re);\r\n if (sizesUrl[1]) {\r\n // Replace size preference values\r\n var sizesArr = decodeURIComponent(sizesUrl[1]).split('|');\r\n var nonMyFitSizes = sizesArr.filter(function (size) {\r\n return catSizes.indexOf(size) < 0;\r\n });\r\n url = url.replace(re, prefvMatched + '=' + nonMyFitSizes.join('|'));\r\n }\r\n }\r\n }\r\n } catch (err) {\r\n window.console.error(err.message);\r\n }\r\n url = appendParamToURL(url, 'fitToggle', 'false');\r\n sessionStorage.myFitToggle = 'off';\r\n }\r\n\r\n var typeEvent = e.type;\r\n // var for selected filter options\r\n var idStr = $(this).data('id');\r\n\r\n // var for selected category\r\n var selCat = $(this).hasClass('category');\r\n\r\n $.spinner().start();\r\n\r\n $.ajax({\r\n url: url,\r\n data: {\r\n page: $('.grid-footer').data('page-number'),\r\n selectedUrl: url\r\n },\r\n method: 'GET',\r\n success: function (response) {\r\n $.spinner().stop();\r\n if (response.emailSignUpCookieName) {\r\n var emailSignUpCookieName = customUtil.getCookie(response.emailSignUpCookieName);\r\n if (emailSignUpCookieName) {\r\n return;\r\n }\r\n }\r\n parseResults(response);\r\n $('body').trigger('search:updateProducts');\r\n if (typeEvent !== 'click' && idStr !== undefined) {\r\n setTimeout(function () {\r\n $('.' + idStr).focus();\r\n }, 0);\r\n }\r\n if (typeEvent !== 'click' && selCat !== false) {\r\n setTimeout(function () {\r\n $('.selected.category').focus();\r\n }, 0);\r\n }\r\n window.pushLinkTohistory = true;\r\n },\r\n complete: function () {\r\n $(\"body\").trigger('refresh:productTile:carousel');\r\n $.spinner().stop();\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n loadMyFit: function () {\r\n if (sessionStorage.myFitToggle && sessionStorage.myFitToggle === 'off') {\r\n return;\r\n }\r\n var myfit = customUtil.getCookie('myFit');\r\n if (!myfit) {\r\n return;\r\n }\r\n\r\n if (window.location.href.indexOf('myfit') !== -1) {\r\n return;\r\n }\r\n\r\n var $loginLink = $('.login-link');\r\n if ($loginLink.length) {\r\n return;\r\n }\r\n\r\n var $myFitToggle = $('.myfit-toggle');\r\n var url = window.location.href;\r\n if ($myFitToggle.length > 0) {\r\n url = $myFitToggle.data('url');\r\n } else {\r\n return;\r\n }\r\n var catId = url.match('cgid=([^&]*)')[1];\r\n if (!catId) {\r\n return;\r\n }\r\n if (!url) {\r\n return;\r\n }\r\n try {\r\n myfit = customUtil.getCookie('myFit');\r\n var myFitCookie = JSON.parse(JSON.parse(myfit));\r\n if (myFitCookie) {\r\n url = generateUrl(catId, myFitCookie, url);\r\n }\r\n } catch (err) {\r\n window.console.error(err.message);\r\n }\r\n url = appendParamToURL(url, 'fitToggle', 'true');\r\n url = appendParamToURL(url, 'myfit', 'true');\r\n\r\n $.spinner().start();\r\n $('body').css('overflow-y', 'hidden');\r\n $.ajax({\r\n url: url,\r\n data: {\r\n page: $('.grid-footer').data('page-number'),\r\n selectedUrl: url\r\n },\r\n method: 'GET',\r\n success: function (response) {\r\n $('body').css('overflow-y', 'auto');\r\n if (response.redirect) {\r\n return;\r\n }\r\n parseResults(response);\r\n $('body').trigger('search:updateProducts');\r\n window.pushLinkTohistory = true;\r\n },\r\n error: function () {\r\n $('body').css('overflow', 'auto');\r\n },\r\n complete: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n },\r\n showContentTab: basesearchSearch.showContentTab,\r\n pdpToPlpNavigation: pdpToPlpNavigation,\r\n goToPreviouslySelectedProduct: goToPreviouslySelectedProduct,\r\n initHistory: function () {\r\n var previousHistoryState;\r\n var doNotPushHistory = false;\r\n\r\n /**\r\n * Listen to all possible AJAX calls on a search page (Filters, sorting, show more, ...).\r\n */\r\n $(document).ajaxSuccess(function (event, xhr) {\r\n // Make the assumption that a product-tile being present in the response means a grid-refresh\r\n if (xhr.responseText.indexOf('
') >= 0) {\r\n if (!doNotPushHistory) {\r\n setTimeout(function () {\r\n history.pushState({ reapplyFilters: true }, document.title, decodeURI($('.permalink').val()));\r\n });\r\n }\r\n\r\n doNotPushHistory = false;\r\n }\r\n });\r\n\r\n /**\r\n * Listen to the back and forward button of the browser to detect URL changes.\r\n */\r\n window.addEventListener('popstate', function () {\r\n if ((history.state && history.state.reapplyFilters) || (previousHistoryState && previousHistoryState.reapplyFilters)) {\r\n var $resetButton = $('.refinement-bar button.reset');\r\n\r\n previousHistoryState = history.state;\r\n\r\n // This async call should not cause a new history state to be pushed.\r\n doNotPushHistory = true;\r\n\r\n // Use the reset button listeners to do a refresh\r\n $resetButton.data('href', decodeURI(window.location.href));\r\n $resetButton.trigger('click');\r\n }\r\n });\r\n },\r\n categoryRefinements: function () {\r\n $(window).on('load', function () {\r\n initCategoryRefinements();\r\n });\r\n\r\n $(window).on('resize', function () {\r\n initCategoryRefinements();\r\n });\r\n },\r\n initPLPAddToBag: plpAddToCart.initAddToBag()\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * Update DOM elements with Ajax results\r\n *\r\n * @param {Object} $results - jQuery DOM element\r\n * @param {string} selector - DOM element to look up in the $results\r\n * @return {undefined}\r\n */\r\nfunction updateDom($results, selector) {\r\n var $updates = $results.find(selector);\r\n $(selector).empty().html($updates.html());\r\n}\r\n\r\n/**\r\n * Keep refinement panes expanded/collapsed after Ajax refresh\r\n *\r\n * @param {Object} $results - jQuery DOM element\r\n * @return {undefined}\r\n */\r\nfunction handleRefinements($results) {\r\n $('.refinement.active').each(function () {\r\n $(this).removeClass('active');\r\n var activeDiv = $results.find('.' + $(this)[0].className.replace(/ /g, '.'));\r\n activeDiv.addClass('active');\r\n activeDiv.find('button.title').attr('aria-expanded', 'true');\r\n });\r\n\r\n updateDom($results, '.refinements');\r\n}\r\n\r\n/**\r\n * Parse Ajax results and updated select DOM elements\r\n *\r\n * @param {string} response - Ajax response HTML code\r\n * @return {undefined}\r\n */\r\nfunction parseResults(response) {\r\n var $results = $(response);\r\n var specialHandlers = {\r\n '.refinements': handleRefinements\r\n };\r\n\r\n // Update DOM elements that do not require special handling\r\n [\r\n '.grid-header',\r\n '.header-bar',\r\n '.header.page-title',\r\n '.product-grid',\r\n '.show-more',\r\n '.filter-bar'\r\n ].forEach(function (selector) {\r\n updateDom($results, selector);\r\n });\r\n\r\n Object.keys(specialHandlers).forEach(function (selector) {\r\n specialHandlers[selector]($results);\r\n });\r\n}\r\n\r\n/**\r\n * This function retrieves another page of content to display in the content search grid\r\n * @param {JQuery} $element - the jquery element that has the click event attached\r\n * @param {JQuery} $target - the jquery element that will receive the response\r\n * @return {undefined}\r\n */\r\nfunction getContent($element, $target) {\r\n var showMoreUrl = $element.data('url');\r\n $.spinner().start();\r\n $.ajax({\r\n url: showMoreUrl,\r\n method: 'GET',\r\n success: function (response) {\r\n $target.append(response);\r\n $.spinner().stop();\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Update sort option URLs from Ajax response\r\n *\r\n * @param {string} response - Ajax response HTML code\r\n * @return {undefined}\r\n */\r\nfunction updateSortOptions(response) {\r\n var $tempDom = $('
').append($(response));\r\n var sortOptions = $tempDom.find('.grid-footer').data('sort-options').options;\r\n sortOptions.forEach(function (option) {\r\n $('option.' + option.id).val(option.url);\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n filter: function () {\r\n // Display refinements bar when Menu icon clicked\r\n $('.container').on('click', 'button.filter-results', function () {\r\n $('.refinement-bar, .modal-background').show();\r\n $('.refinement-bar').siblings().attr('aria-hidden', true);\r\n $('.refinement-bar').closest('.row').siblings().attr('aria-hidden', true);\r\n $('.refinement-bar').closest('.tab-pane.active').siblings().attr('aria-hidden', true);\r\n $('.refinement-bar').closest('.container.search-results').siblings().attr('aria-hidden', true);\r\n $('.refinement-bar .close').focus();\r\n });\r\n },\r\n\r\n closeRefinements: function () {\r\n // Refinements close button\r\n $('.container').on('click', '.refinement-bar button.close, .modal-background', function () {\r\n $('.refinement-bar, .modal-background').hide();\r\n $('.refinement-bar').siblings().attr('aria-hidden', false);\r\n $('.refinement-bar').closest('.row').siblings().attr('aria-hidden', false);\r\n $('.refinement-bar').closest('.tab-pane.active').siblings().attr('aria-hidden', false);\r\n $('.refinement-bar').closest('.container.search-results').siblings().attr('aria-hidden', false);\r\n $('.btn.filter-results').focus();\r\n });\r\n },\r\n\r\n resize: function () {\r\n // Close refinement bar and hide modal background if user resizes browser\r\n $(window).resize(function () {\r\n $('.refinement-bar, .modal-background').hide();\r\n $('.refinement-bar').siblings().attr('aria-hidden', false);\r\n $('.refinement-bar').closest('.row').siblings().attr('aria-hidden', false);\r\n $('.refinement-bar').closest('.tab-pane.active').siblings().attr('aria-hidden', false);\r\n $('.refinement-bar').closest('.container.search-results').siblings().attr('aria-hidden', false);\r\n });\r\n },\r\n\r\n sort: function () {\r\n // Handle sort order menu selection\r\n $('.container').on('change', '[name=sort-order]', function (e) {\r\n e.preventDefault();\r\n\r\n $.spinner().start();\r\n $(this).trigger('search:sort', this.value);\r\n $.ajax({\r\n url: this.value,\r\n data: { selectedUrl: this.value },\r\n method: 'GET',\r\n success: function (response) {\r\n $('.product-grid').empty().html(response);\r\n $.spinner().stop();\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n\r\n showMore: function () {\r\n // Show more products\r\n $('.container').on('click', '.show-more button', function (e) {\r\n e.stopPropagation();\r\n var showMoreUrl = $(this).data('url');\r\n e.preventDefault();\r\n\r\n $.spinner().start();\r\n $(this).trigger('search:showMore', e);\r\n $.ajax({\r\n url: showMoreUrl,\r\n data: { selectedUrl: showMoreUrl },\r\n method: 'GET',\r\n success: function (response) {\r\n $('.grid-footer').replaceWith(response);\r\n updateSortOptions(response);\r\n $.spinner().stop();\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n\r\n applyFilter: function () {\r\n // Handle refinement value selection and reset click\r\n $('.container').on(\r\n 'click',\r\n '.refinements li button, .refinement-bar button.reset, .filter-value button, .swatch-filter button',\r\n function (e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n $.spinner().start();\r\n $(this).trigger('search:filter', e);\r\n $.ajax({\r\n url: $(this).data('href'),\r\n data: {\r\n page: $('.grid-footer').data('page-number'),\r\n selectedUrl: $(this).data('href')\r\n },\r\n method: 'GET',\r\n success: function (response) {\r\n parseResults(response);\r\n $.spinner().stop();\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n\r\n showContentTab: function () {\r\n // Display content results from the search\r\n $('.container').on('click', '.content-search', function () {\r\n if ($('#content-search-results').html() === '') {\r\n getContent($(this), $('#content-search-results'));\r\n }\r\n });\r\n\r\n // Display the next page of content results from the search\r\n $('.container').on('click', '.show-more-content button', function () {\r\n getContent($(this), $('#content-search-results'));\r\n $('.show-more-content').remove();\r\n });\r\n }\r\n};\r\n","'use strict';\r\n\r\n/**\r\n * appends params to a url\r\n * @param {string} data - data returned from the server's ajax call\r\n * @param {Object} button - button that was clicked to add a product to the wishlist\r\n */\r\nfunction displayMessage(data, button) {\r\n /* OTB Code modification start */\r\n $.spinner().stop();\r\n var status;\r\n if (data.success) {\r\n button.addClass('active');\r\n status = 'alert-success';\r\n button.attr('aria-pressed', 'true');\r\n } else {\r\n // button.removeClass('active');\r\n status = 'error-message';\r\n }\r\n /* OTB Code modification ends */\r\n if ($('.add-to-wishlist-messages').length === 0) {\r\n $('header').append('
');\r\n }\r\n $('.add-to-wishlist-messages').append('
' + data.msg + '
');\r\n\r\n setTimeout(function() {\r\n $('.add-to-wishlist-messages').empty();\r\n button.removeAttr('disabled');\r\n }, 5000);\r\n}\r\n\r\n/**\r\n * appends params to a url\r\n * @param {string} data - data returned from the server's ajax call\r\n */\r\nfunction displayMessageAndRemoveFromCart(data) {\r\n var status = data.success ? 'alert-success' : 'alert-danger';\r\n\r\n if ($('.add-to-wishlist-messages').length === 0) {\r\n $('header').append('
');\r\n }\r\n $('.add-to-wishlist-messages').append('
' + data.msg + '
');\r\n\r\n setTimeout(function() {\r\n $('.add-to-wishlist-messages').empty();\r\n }, 1500);\r\n var $targetElement = $('a[data-pid=\"' + data.pid + '\"]')\r\n .closest('.product-info')\r\n .find('.remove-product');\r\n var itemToMove = {\r\n actionUrl: $targetElement.data('action'),\r\n productID: $targetElement.data('pid'),\r\n productName: $targetElement.data('name'),\r\n uuid: $targetElement.data('uuid')\r\n };\r\n $('body').trigger('afterMovedtoWishlist', itemToMove);\r\n}\r\n\r\n/**\r\n * Toggle heart icons\r\n * @param {Object} wishlistItems - wish list items\r\n */\r\nfunction toggleHeartIcon(wishlistItems) {\r\n $('.add-to-wish-list:not(.active)').each(function() {\r\n var pid = $(this).attr('class').match(/\\bpid-\\S*\\b/);\r\n if (pid && pid.length && wishlistItems.indexOf(pid[0].replace('pid-', '')) >= 0) {\r\n $(this).addClass('active');\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Toggle heart icons for logged-in user\r\n * @param {Object} wishlistItems - wish list items\r\n */\r\nfunction toggleHeartIconForLoggedIn(wishlistItems) {\r\n toggleHeartIcon(wishlistItems);\r\n}\r\n\r\n/**\r\n * Toggle heart icons for guest user\r\n */\r\nfunction toggleHeartIconForGuest () {\r\n if ($('.header-container').find('.heart-active-icon').hasClass('d-none')) {\r\n localStorage.removeItem('wishlistItems');\r\n } else {\r\n var wishlistItems = localStorage.getItem('wishlistItems');\r\n if (wishlistItems) {\r\n wishlistItems = JSON.parse(wishlistItems);\r\n if (wishlistItems.length) {\r\n toggleHeartIcon(wishlistItems);\r\n }\r\n }\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n addToWishlist: function() {\r\n $(document).on('click', '.add-to-wish-list', function(e) {\r\n e.preventDefault();\r\n var $addToWishlistBtn = $(this);\r\n var url = $(this).data('href');\r\n var button = $(this);\r\n var pid = $(this)\r\n .closest('.product-detail')\r\n .find('.product-id')\r\n .html();\r\n var optionId = $(this)\r\n .closest('.product-detail')\r\n .find('.product-option')\r\n .attr('data-option-id');\r\n var optionVal = $(this)\r\n .closest('.product-detail')\r\n .find('.options-select option:selected')\r\n .attr('data-value-id');\r\n optionId = optionId || null;\r\n optionVal = optionVal || null;\r\n var $sizeSelectionsEl = $('.size-selections'),\r\n isPDP = $('.product-detail.product-pdp').length > 0;\r\n\r\n if (!url || !pid) {\r\n return;\r\n }\r\n\r\n $.spinner().start();\r\n $(this).attr('disabled', true);\r\n\r\n //stop the script execution and display an error message if there's no size selected\r\n //only trigger the size validation on PDP\r\n if (isPDP && $sizeSelectionsEl.length && $sizeSelectionsEl.find('.size-attribute[aria-checked=\"true\"]').length === 0) {\r\n const errMsg = {\r\n success: false,\r\n msg: window.Resources.PLEASE_SELECT_SIZE\r\n }\r\n\r\n displayMessage(errMsg, button);\r\n return;\r\n }\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'post',\r\n dataType: 'json',\r\n data: {\r\n pid: pid,\r\n optionId: optionId,\r\n optionVal: optionVal\r\n },\r\n success: function(data) {\r\n if (data.success) {\r\n $.spinner().stop();\r\n $('body').trigger('gtm:product:afterAddToWishlist', data);\r\n this.updateHeartIcon();\r\n if (!data.isLoggedIn && data.redirectUrl) {\r\n window.location = data.redirectUrl;\r\n } else {\r\n displayMessage(data, button);\r\n }\r\n } else {\r\n this.updateHeartIcon();\r\n displayMessage(data, button);\r\n }\r\n },\r\n error: function(err) {\r\n displayMessage(err, button);\r\n },\r\n updateHeartIcon: function () {\r\n $addToWishlistBtn.closest('.product-detail').find('.add-to-wish-list').addClass('active');\r\n $('.header-container').find('.heart-active-icon').removeClass('d-none');\r\n $('.header-container').find('.heart-inactive-icon').addClass('d-none');\r\n this.saveToBrowserStorage();\r\n },\r\n saveToBrowserStorage: function () {\r\n var wishlistItems = localStorage.getItem('wishlistItems');\r\n if (wishlistItems && wishlistItems.length) {\r\n wishlistItems = JSON.parse(wishlistItems);\r\n } else {\r\n wishlistItems = [];\r\n }\r\n if (wishlistItems.indexOf(pid) === -1) {\r\n wishlistItems.push(pid);\r\n localStorage.setItem('wishlistItems', JSON.stringify(wishlistItems));\r\n }\r\n }\r\n });\r\n });\r\n },\r\n moveToWishlist: function() {\r\n $('body').on('click', '.product-move', function(e) {\r\n e.preventDefault();\r\n var url = $(this).attr('href');\r\n var pid = $(this).data('pid');\r\n var optionId = $(this)\r\n .closest('.product-info')\r\n .find('.lineItem-options-values')\r\n .data('option-id');\r\n var optionVal = $(this)\r\n .closest('.product-info')\r\n .find('.lineItem-options-values')\r\n .data('value-id');\r\n optionId = optionId || null;\r\n optionVal = optionVal || null;\r\n if (!url || !pid) {\r\n return;\r\n }\r\n\r\n $.spinner().start();\r\n $.ajax({\r\n url: url,\r\n type: 'post',\r\n dataType: 'json',\r\n data: {\r\n pid: pid,\r\n optionId: optionId,\r\n optionVal: optionVal\r\n },\r\n success: function(data) {\r\n $('body').trigger('gtm:product:afterAddToWishlist', data);\r\n displayMessageAndRemoveFromCart(data);\r\n },\r\n complete: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n initWishlistItems: function() {\r\n toggleHeartIconForGuest();\r\n\r\n $('body').on('search:updateProducts', function () {\r\n toggleHeartIconForGuest();\r\n });\r\n\r\n $('body').on('product:afterAttributeSelect', function (e, response) {\r\n try {\r\n var $addToWishlistBtn = response.container.find('.add-to-wish-list');\r\n var oldPid = $addToWishlistBtn.attr('class').match(/\\bpid-\\S*\\b/);\r\n if (oldPid && oldPid.length) {\r\n $addToWishlistBtn\r\n .removeClass('active')\r\n .removeClass(oldPid)\r\n .addClass('pid-' + response.data.product.id);\r\n toggleHeartIconForGuest();\r\n }\r\n // eslint-disable-next-line no-shadow\r\n } catch (e) {\r\n // Error encountered while updating wishlist heart icon\r\n }\r\n });\r\n\r\n // For Logged in user\r\n if (window.Resources.loggedIn) {\r\n var wishlistItems = localStorage.getItem('wishlistItems');\r\n if (wishlistItems) {\r\n wishlistItems = JSON.parse(wishlistItems);\r\n if (wishlistItems.length) {\r\n if (wishlistItems[0] !== 'loggedIn') {\r\n $.ajax({\r\n url: window.Urls.getWishlistItems,\r\n dataType: 'json',\r\n success: function (data) {\r\n wishlistItems = data.items;\r\n if (data.items && data.items.length) {\r\n toggleHeartIconForLoggedIn(wishlistItems);\r\n }\r\n wishlistItems.unshift('loggedIn');\r\n localStorage.setItem('wishlistItems', JSON.stringify(wishlistItems));\r\n }\r\n });\r\n } else {\r\n toggleHeartIconForLoggedIn(wishlistItems);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n};\r\n","var baseHelper = require('../product/base');\r\n\r\n/**\r\n * Retrieves the relevant pid value\r\n * @param {jquery} $el - DOM container for a given add to cart button\r\n * @return {string} - value to be used when adding product to cart\r\n */\r\nfunction getPidValue($el) {\r\n var pid;\r\n pid = $el.data('pid');\r\n return pid;\r\n}\r\n\r\n/**\r\n * Parses the html for a modal window\r\n * @param {string} html - representing the body and footer of the modal window\r\n *\r\n * @return {Object} - Object with properties body and footer.\r\n */\r\nfunction parseHtml(html) {\r\n var $html = $('
').append($.parseHTML(html));\r\n\r\n var body = $html.find('.product-quickview');\r\n var footer = $html.find('.modal-footer').children();\r\n\r\n return { body: body, footer: footer };\r\n}\r\n\r\n/**\r\n * Retrieves url to use when adding a product to the cart\r\n *\r\n * @param {Object} data - data object used to fill in dynamic portions of the html\r\n */\r\nfunction chooseBonusProducts(data) {\r\n $('.modal-body')\r\n .spinner()\r\n .start();\r\n\r\n if ($('#chooseBonusProductModal').length !== 0) {\r\n $('#chooseBonusProductModal').remove();\r\n }\r\n var bonusUrl;\r\n if (data.bonusChoiceRuleBased) {\r\n bonusUrl = data.showProductsUrlRuleBased;\r\n } else {\r\n bonusUrl = data.showProductsUrlListBased;\r\n }\r\n\r\n var htmlString =\r\n '' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '' +\r\n '
' +\r\n '
' +\r\n ' ' +\r\n data.labels.selectprods +\r\n '' +\r\n ' ' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
' +\r\n '
';\r\n $('body').append(htmlString);\r\n $('.modal-body')\r\n .spinner()\r\n .start();\r\n\r\n $.ajax({\r\n url: bonusUrl,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function (response) {\r\n var parsedHtml = parseHtml(response.renderedTemplate);\r\n $('#chooseBonusProductModal .modal-body').empty();\r\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\r\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\r\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\r\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\r\n $('#chooseBonusProductModal').modal('show');\r\n },\r\n complete: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\r\n * @param {string} response - ajax response from clicking the add to cart button\r\n */\r\nfunction handlePostCartAdd(response) {\r\n $('.minicart').trigger('count:update', response);\r\n // show add to cart toast\r\n if (response.newBonusDiscountLineItem && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\r\n chooseBonusProducts(response.newBonusDiscountLineItem);\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n initAddToBag: function () {\r\n var addtoBag = function (e) {\r\n if ($(this).closest('.plp-atc').length) {\r\n e.stopImmediatePropagation();\r\n }\r\n\r\n var addToCartUrl;\r\n var pid;\r\n var pidsObj;\r\n var $this = $(this);\r\n\r\n $this.addClass('focusable'); // Make this element the only item to accept :focus styling while this size is being added to cart to avoid confusion\r\n\r\n if ($(this).closest('.js-product-tile-pd').length === 0) {\r\n $this.closest('.product-tile').removeClass('active-hover');\r\n }\r\n $this\r\n .closest('.product-tile')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .not('.hidden')\r\n .removeClass('hover-active');\r\n\r\n pid = getPidValue($(this));\r\n\r\n addToCartUrl = $(this)\r\n .closest('.add-to-cart')\r\n .data('addtocartUrl');\r\n\r\n var form = {\r\n pid: pid,\r\n pidsObj: pidsObj,\r\n childProducts: [],\r\n quantity: 1\r\n };\r\n\r\n form.options = [];\r\n\r\n if (addToCartUrl) {\r\n $.ajax({\r\n url: addToCartUrl,\r\n method: 'POST',\r\n data: form,\r\n success: function (data) {\r\n // reload cart page if plp is on cart page\r\n if ($('.cart.cart-page').length > 0) {\r\n window.location.href = data.redirectUrl;\r\n } else {\r\n handlePostCartAdd(data);\r\n data.addedPid = pid;\r\n $('body').trigger('product:afterAddToCart', data);\r\n $this\r\n .closest('.product-tile')\r\n .find('.js-plp-add-to-bag.desktop')\r\n .addClass('hidden');\r\n $this.closest('.add-to-cart[data-attr=\"size\"]').addClass('hidden');\r\n $this\r\n .closest('.product-tile')\r\n .find('.add-to-cart-variation-group.plp-atc.collapsible-xs')\r\n .removeClass('active');\r\n $this\r\n .closest('.product-tile')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hover-active');\r\n baseHelper.miniCartReportingUrl(data.reportingURL);\r\n }\r\n },\r\n error: function () {\r\n $this\r\n .closest('.product-tile')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hover-active');\r\n },\r\n complete: function () {\r\n $this.removeClass('focusable'); // Make other elements focusable after size has been added to cart\r\n $('.js-size-select-show').removeClass('hidden');\r\n }\r\n });\r\n }\r\n };\r\n\r\n $('body')\r\n .on('click', '.plp-atc .size-selections .size-attribute', addtoBag)\r\n .on('mouseleave', '.add-to-cart-variation-group', function () {\r\n if (\r\n $(this)\r\n .closest('.product-tile')\r\n .find('.js-plp-add-to-bag')\r\n .css('position') === 'absolute' &&\r\n $(this).closest('.js-product-tile-pd').length === 0\r\n ) {\r\n $(this)\r\n .find('.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hidden');\r\n $(this)\r\n .closest('.product-tile')\r\n .find('.image-container')\r\n .removeClass('hovered');\r\n }\r\n })\r\n .on('mouseleave', '.plp-search-results .product-tile, .products-container .product-tile, .product-page-bottom-section .product-tile', function () {\r\n $(this).addClass('active-hover');\r\n $(this)\r\n .find('.js-plp-add-to-bag')\r\n .removeClass('hidden');\r\n })\r\n .on('mouseleave', '.js-product-tile-pd .js-product-tile.active-hover', function(e) {\r\n $(this)\r\n .find('.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hidden');\r\n $(this)\r\n .find('.image-container')\r\n .removeClass('hovered');\r\n })\r\n .on(\r\n 'mouseenter',\r\n '.container-fluid.search-results.plp-search-results .active-hover .js-plp-add-to-bag, .products-container .active-hover .js-plp-add-to-bag, .product-page-bottom-section .active-hover .js-plp-add-to-bag',\r\n function (e) {\r\n if ($(this).css('position') === 'absolute') {\r\n var vgroupid = $(e.target)\r\n .closest('.product-tile')\r\n .find('.color-swatches button.color-attribute.active')\r\n .data('id');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.row.add-to-cart.hidden[data-group-pid=\"' + vgroupid + '\"]')\r\n .removeClass('hidden');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.image-container')\r\n .addClass('hovered');\r\n }\r\n }\r\n )\r\n .on(\r\n 'mouseenter',\r\n '.js-product-tile-pd .js-product-tile.active-hover',\r\n function(e) {\r\n var vgroupid = $(e.currentTarget)\r\n .find('.color-swatches button.color-attribute.active')\r\n .data('id');\r\n $(e.currentTarget)\r\n .closest('.product')\r\n .find('.row.add-to-cart.hidden[data-group-pid=\"' + vgroupid + '\"]')\r\n .removeClass('hidden');\r\n }\r\n )\r\n .on(\r\n 'click',\r\n '.container-fluid.search-results.plp-search-results .js-plp-add-to-bag, .products-container .plp-atc .js-plp-add-to-bag, .product-page-bottom-section .plp-atc .js-plp-add-to-bag',\r\n function (e) {\r\n e.preventDefault();\r\n var vgroupid;\r\n if (\r\n $(this)\r\n .closest('.product-tile')\r\n .find('.js-plp-add-to-bag')\r\n .css('position') === 'relative'\r\n ) {\r\n vgroupid = $(e.target)\r\n .closest('.product-tile')\r\n .find('.color-swatches button.color-attribute.active')\r\n .data('id');\r\n if (vgroupid) {\r\n $(e.target)\r\n .closest('.product')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .not('[data-group-pid=\"' + vgroupid + '\"]')\r\n .addClass('hidden');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.row.add-to-cart[data-attr=\"size\"][data-group-pid=\"' + vgroupid + '\"]')\r\n .toggleClass('hidden');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.image-container')\r\n .removeClass('hovered');\r\n }\r\n }\r\n if (!vgroupid) {\r\n var $colorAlert = $(e.target)\r\n .closest('.add-to-cart-variation-group')\r\n .find('.color.alert');\r\n if ($colorAlert.length) {\r\n $colorAlert.remove();\r\n }\r\n $colorAlert = $('Please select color.');\r\n $(e.target)\r\n .closest('.add-to-cart-variation-group')\r\n .prepend($colorAlert);\r\n setTimeout(function () {\r\n $colorAlert.remove();\r\n }, 5000);\r\n $(e.target)\r\n .closest('.add-to-cart-variation-group')\r\n .removeClass('active');\r\n }\r\n }\r\n )\r\n .on(\r\n 'click',\r\n '.container-fluid.search-results.plp-search-results button.color-attribute, .products-container button.color-attribute, .product-recommendation-details button.color-attribute',\r\n function (e) {\r\n e.preventDefault();\r\n if (\r\n $(this)\r\n .closest('.product-tile')\r\n .find('.js-plp-add-to-bag')\r\n .css('position') === 'relative'\r\n ) {\r\n $(e.target)\r\n .closest('.product')\r\n .find('.row.add-to-cart[data-attr=\"size\"]')\r\n .addClass('hidden');\r\n $(e.target)\r\n .closest('.product')\r\n .find('.image-container')\r\n .removeClass('hovered');\r\n }\r\n $(this)\r\n .closest('.tile-body')\r\n .prev('.add-to-cart-variation-group')\r\n .removeClass('active');\r\n }\r\n )\r\n .off('click', '.js-product-tile-pd, js-product-tile-container')\r\n .on('click', '.js-size-select-show', function() {\r\n $('.js-size-select-show').removeClass('hidden');\r\n $(this).addClass('hidden');\r\n $(this).closest('.js-product-tile-container').find('.add-to-cart').removeClass('hidden');\r\n })\r\n .on('click', '.js-size-select-close', function() {\r\n $(this).closest('.js-product-tile-container').find('.js-size-select-show').removeClass('hidden');\r\n $(this).closest('.js-product-tile-container').find('.add-to-cart').addClass('hidden');\r\n })\r\n .on('click', function (e) {\r\n if (!$(e.target).hasClass('accordion-icon') && (!($(e.target).hasClass('js-size-select-show') ||\r\n $(e.target).parent().hasClass('js-size-select-show') ||\r\n $(e.target).hasClass('js-plp-add-to-bag')))\r\n ) {\r\n var variationGroup = $('.add-to-cart-variation-group');\r\n if (variationGroup && variationGroup.hasClass('active')) {\r\n variationGroup.removeClass('active');\r\n variationGroup.find('.js-plp-add-to-bag').attr('aria-expanded', 'false');\r\n variationGroup.find('.add-to-cart').addClass('hidden');\r\n }\r\n\r\n $('.js-size-select-show').removeClass('hidden');\r\n $('.add-to-cart').addClass('hidden');\r\n }\r\n });\r\n },\r\n changeColorSwatch: $(document).on('click', '.product-tile .color-swatches button', function () {\r\n var $this = $(this);\r\n var container = $this.closest('.product-tile');\r\n\r\n container.find('button').removeClass('active');\r\n container.find('button.color-attribute').each(function () {\r\n $(this).attr('aria-checked', false);\r\n });\r\n $this.addClass('active').attr('aria-checked', true);\r\n var listprice = $this.data('listprice');\r\n var salesprice = $this.data('salesprice');\r\n var salesBeforePromo = $this.data('salespricebeforepromo');\r\n var imgfront = $this.data('imgfront');\r\n var imgfrontalt = $this.data('imgfrontalt');\r\n var imgback = $this.data('imgback');\r\n var imgbackalt = $this.data('imgbackalt');\r\n var percentageoff = $this.data('percentageoff');\r\n var isNew = $this.data('isnew');\r\n var isBestSeller = $this.data('isbestseller');\r\n var exclusiveBadge = $this.data('exclusivebadge');\r\n var exclusiveBadgeID = $this.data('exclusivebadgeid');\r\n var salesBadge = $this.data('salesbadge');\r\n var id = $this.data('id');\r\n var defaultVariantId = $this.data('defaultvariantid');\r\n var hasSalePricebook = $this.data('hassalepricebook');\r\n var promotions = $this.data('promotions');\r\n var url = $this.data('url');\r\n var quickviewUrl = '/on/demandware.store/Sites-aando-Site/default/Product-ShowQuickView?pid=' + id;\r\n var name = $this.data('varname');\r\n container.find('.link').text(name);\r\n container.find('.front-card').attr({ src: imgfront, alt: imgfrontalt });\r\n container.find('.back-card').attr({ src: imgback, alt: imgbackalt });\r\n container.find('a').attr({ href: url });\r\n container.find('a.quickview').attr({ href: quickviewUrl });\r\n\r\n container.find('.bfx-sku').text(defaultVariantId);\r\n if (!listprice) {\r\n container.find('.strike-through').hide();\r\n container\r\n .find('.bfx-list-price')\r\n .attr({ content: salesprice.value })\r\n .text(salesprice.formatted);\r\n container.find('.percent-value').text('');\r\n } else {\r\n var isHidden = container.find('.strike-through').css('display');\r\n if (isHidden === 'none') {\r\n container.find('.strike-through').css('display', '');\r\n }\r\n\r\n if (container.find('.bfx-sale-price').length) {\r\n container\r\n .find('.bfx-list-price')\r\n .attr({ content: listprice.value })\r\n .text(listprice.formatted);\r\n container.find('.percent-value').text(percentageoff);\r\n } else {\r\n var listPriceText =\r\n '' +\r\n '' +\r\n '' +\r\n listprice.formatted +\r\n '' +\r\n '' +\r\n '';\r\n var salesPriceText =\r\n '' + salesprice.formatted + '';\r\n var percentText = '' + percentageoff + '';\r\n\r\n if (!hasSalePricebook) {\r\n container.find('.price-section').html(salesPriceText);\r\n } else {\r\n container.find('.price-section').html(listPriceText + salesPriceText);\r\n }\r\n }\r\n container\r\n .find('.bfx-sale-price')\r\n .attr({ content: salesprice.value })\r\n .text(salesprice.formatted);\r\n }\r\n\r\n if (!hasSalePricebook) {\r\n container.find('.strike-through').hide();\r\n container.find('.percent-value').text('');\r\n }\r\n // eslint-disable-next-line no-unused-expressions\r\n salesprice &&\r\n container\r\n .find('.bfx-sale-price')\r\n .attr({ content: salesprice.value })\r\n .text(salesprice.formatted);\r\n // eslint-disable-next-line no-unused-expressions\r\n isNew &&\r\n container\r\n .find('.badge-product')\r\n .show()\r\n .html('New Arrivals');\r\n // eslint-disable-next-line no-unused-expressions\r\n isBestSeller &&\r\n container\r\n .find('.badge-product')\r\n .show()\r\n .html('Best Seller');\r\n\r\n if (!isNew && !isBestSeller) {\r\n container.find('.badge-product').hide();\r\n\r\n if (salesBadge) {\r\n container.find('.badge-product').show();\r\n }\r\n }\r\n\r\n var salesBeforePromoContainer = container.find('.sales-before-promo');\r\n if (salesBeforePromo) {\r\n if (salesBeforePromoContainer.length) {\r\n salesBeforePromoContainer.show().text(salesBeforePromo.formatted);\r\n } else {\r\n $(`${salesBeforePromo.formatted}`).insertAfter(container.find('.list'));\r\n }\r\n } else if (salesBeforePromoContainer.length) {\r\n salesBeforePromoContainer.hide();\r\n }\r\n\r\n // display exclusive badge when not empty and if sales badge is empty\r\n container.find('.badge-product').removeClass('badge-exclusive');\r\n\r\n if (exclusiveBadge && !salesBadge) {\r\n container.find('.badge-product').show();\r\n container.find('.badge-product').addClass('badge-exclusive');\r\n var badge;\r\n\r\n if (!container.find('.badge-product').length) {\r\n badge = '
' + exclusiveBadge + '
';\r\n container.find('.product-detail').append(badge);\r\n } else {\r\n badge = '' + exclusiveBadge + '';\r\n container.find('.badge-product').html(badge);\r\n }\r\n\r\n // hide the 'New to Sale' badge for international users\r\n var newToSale = window.Resources.NEW_TO_SALE.split(' ').join('');\r\n if (window.SitePreferences.IS_INTERNATIONAL && exclusiveBadgeID === newToSale.toLowerCase()) {\r\n container.find('.badge-product').hide();\r\n }\r\n }\r\n\r\n /* re-renders the applicable promotions if the product has active product-level promotions */\r\n var $targetEl = container.find('.applicable-promotions');\r\n if (promotions && promotions.length > 0) {\r\n baseHelper.updateProductPromotions($targetEl, promotions);\r\n } else {\r\n $targetEl.empty();\r\n }\r\n }),\r\n onSizeClick: $('body').on('click', '.product-page-bottom-section .size-value, .products-container .size-value', function () {\r\n if ($(this).hasClass('selected') === true) {\r\n $(this).removeClass('selected');\r\n } else {\r\n $(this).addClass('selected');\r\n }\r\n })\r\n};\r\n","'use strict';\r\nvar base = require('../product/base');\r\nvar baseDetails = require('base/product/detail');\r\nvar customUtil = require('../customUtil');\r\n\r\nmodule.exports = {\r\n availability: base.availability,\r\n addToCart: base.addToCart,\r\n // removed updateAddToCart for SI-38 requirment\r\n updateAttributesAndDetails: baseDetails.updateAttributesAndDetails,\r\n showSpinner: baseDetails.showSpinner,\r\n updateAttribute: function () {\r\n $('body').on('product:afterAttributeSelect', function (e, response) {\r\n response.container.data('video', response.data.product.pdpVideoID);\r\n if ($('.product-detail>.bundle-items').length) {\r\n response.container.data('pid', response.data.product.id);\r\n response.container.find('.product-id').text(response.data.product.id);\r\n } else if ($('.product-set-detail').eq(0).length) {\r\n response.container.data('pid', response.data.product.id);\r\n response.container.find('.product-id').text(response.data.product.id);\r\n } else {\r\n var productId = response.data.product.id;\r\n // BF might be using element text or data attribute which is also used by add to cart in PDP. Use different attribute for ATC.\r\n if ($('.product-detail.container:not(\".bundle-item\")').hasClass('bfx-price-product')) {\r\n $('.product-detail:not(\".bundle-item\")').data('addtocart-pid', productId);\r\n if (response.data.product.productType === 'variationGroup') {\r\n productId = response.data.product.defaultVariantId;\r\n }\r\n $('.product-id').text(productId);\r\n $('.product-detail:not(\".bundle-item\")').data('pid', productId);\r\n } else {\r\n $('.product-id').text(productId);\r\n $('.product-detail:not(\".bundle-item\")').data('pid', productId);\r\n }\r\n }\r\n });\r\n },\r\n updateAvailability: baseDetails.updateAvailability,\r\n selectAttribute: function() {\r\n $('body').on('click', '.product-description-container [data-attr=\"size\"] button', function(e) {\r\n e.preventDefault();\r\n\r\n\r\n // if ($('.plp-atc').length && $('[data-page=\"Search-ShowResult\"]').length == 0) {\r\n // return;\r\n // }\r\n\r\n var $productContainer = $(this).closest('.set-item');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.product-detail');\r\n }\r\n\r\n // Back in Stock Notification\r\n $('.notify-sign-up').addClass('hide');\r\n $('#waitListJoin').removeClass('is-invalid');\r\n $(this).closest('.product-detail').find('.btn-container').removeClass('hide');\r\n\r\n if ($(this).hasClass('show-backinstock-module')) {\r\n // Show Back In Stock Module\r\n var $currentSelectedSize = $(this).siblings('[aria-checked=\"true\"]');\r\n $(this).siblings('.size-attribute').attr('aria-checked', 'false');\r\n base.attributeSelect($(this).attr('data-url'), $productContainer, 'size');\r\n\r\n $(this).closest('.product-detail').find('.add-to-cart').addClass('hide');\r\n $(this).closest('.product-detail').find('.apple-pay-pdp').addClass('hide');\r\n $(this).closest('.product-detail').find('.backinstock-notify').removeClass('hide');\r\n } else {\r\n base.attributeSelect($(this).attr('data-url'), $productContainer, 'size');\r\n\r\n $(this).closest('.product-detail').find('.btn-container').removeClass('hide');\r\n $(this).closest('.product-detail').find('.add-to-cart').removeClass('hide');\r\n $(this).closest('.product-detail').find('.apple-pay-pdp').removeClass('hide');\r\n $(this).closest('.product-detail').find('.backinstock-notify').addClass('hide');\r\n }\r\n });\r\n\r\n $('button.add-to-cart-global').on('product:updateAddToCart', function (e, response) {\r\n if (response.product.readyToOrder) {\r\n $(this).attr('disabled', false);\r\n }\r\n });\r\n },\r\n sizeChart: function() {\r\n $(document).on('click', '.size-chart .sizeGuide-link', function(e) {\r\n e.preventDefault();\r\n var url = $(this).attr('href');\r\n var $prodSizeChart = $(this)\r\n .closest('.size-chart')\r\n .find('.size-chart-collapsible');\r\n var $productDescContainer = $(this)\r\n .closest('.product-description-container');\r\n if (!customUtil.isMobile()) {\r\n $productDescContainer.css({ top: '0rem' });\r\n }\r\n if ($prodSizeChart.is(':empty')) {\r\n $.ajax({\r\n url: url,\r\n type: 'get',\r\n dataType: 'json',\r\n success: function(data) {\r\n $prodSizeChart.append(data.content);\r\n\r\n var modalOptions = {\r\n keyboard: false,\r\n backdrop: false\r\n };\r\n\r\n if ($('.modal-backdrop').length === 0) {\r\n modalOptions.backdrop = 'static';\r\n }\r\n\r\n $('#pdp-sizeGuide').modal(modalOptions);\r\n\r\n }\r\n });\r\n }\r\n $prodSizeChart.toggleClass('active');\r\n });\r\n\r\n var $sizeChart = $('.size-chart-collapsible');\r\n $('body').on('click touchstart', function(e) {\r\n if ($('.size-chart').has(e.target).length <= 0) {\r\n $sizeChart.removeClass('active');\r\n }\r\n });\r\n },\r\n copyProductLink: baseDetails.copyProductLink,\r\n focusChooseBonusProductModal: base.focusChooseBonusProductModal(),\r\n pdpApplePay: function() {\r\n $('body').on('click', '.dw-apple-pay-button', function(e) {\r\n // Based on the product:beforeAddToCart event in pdpProductDetails.js\r\n var isPdpSet = $(this).closest('.product-set-detail').length;\r\n var selectedVal = $(this)\r\n .closest('.product-detail')\r\n .find('.select-size option:selected')\r\n .data('attr-value');\r\n if (!selectedVal && selectedVal !== 0 && !isPdpSet) {\r\n e.preventDefault();\r\n $('body').trigger('product:beforeAddToCart', this);\r\n $.spinner().stop();\r\n return false;\r\n }\r\n });\r\n\r\n $('body').on('product:updateAddToCart', function(e, response) {\r\n if (response.product.readyToOrder) {\r\n var applePayButton = $('.apple-pay-pdp', response.$productContainer);\r\n if (applePayButton.length !== 0) {\r\n applePayButton.attr('sku', response.product.id);\r\n }\r\n }\r\n });\r\n },\r\n showSpinner: function () {\r\n $('body').on('product:beforeAddToCart product:beforeAttributeSelect', function () {\r\n if (!$('.container.search-results').length) {\r\n $.spinner().start();\r\n }\r\n });\r\n },\r\n showPDPEDD: function () {\r\n var $eddText = $('.eddtext.productDetails');\r\n var $eddPidDiv = $eddText.find('.eddpid');\r\n var limit = 0;\r\n var timeInt;\r\n var unHideEdd = function () {\r\n if ($eddPidDiv.text().trim().length > 0 || limit > 100) {\r\n if ($eddText.hasClass('hide') && $eddPidDiv.text().trim().length > 0) {\r\n $eddText.removeClass('hide');\r\n }\r\n clearTimeout(timeInt);\r\n } else {\r\n limit++;\r\n timeInt = setTimeout(unHideEdd, 100);\r\n }\r\n };\r\n unHideEdd();\r\n },\r\n videoThumbnail: function () {\r\n var videoId = $('.product-detail').data('video');\r\n if (videoId) {\r\n $.ajax({\r\n type: 'GET',\r\n url: 'https://vimeo.com/api/v2/video/' + videoId + '.json',\r\n dataType: 'json',\r\n success: function (data) {\r\n var thumbnailUrl = data[0].thumbnail_large;\r\n $('.video-thumbnail').attr('src', thumbnailUrl);\r\n $('.pdp-main-video').attr('poster', thumbnailUrl);\r\n }\r\n });\r\n }\r\n },\r\n videoButton: function () {\r\n if ($('.pdp-main-video').length) {\r\n $(document).on('click', '.pdp-video-button', function () {\r\n var $videoButton = $('.pdp-video-button');\r\n var videoElement = $('.pdp-main-video')[0];\r\n if (videoElement.paused) {\r\n videoElement.play();\r\n $videoButton.addClass('pause-button');\r\n $videoButton.removeClass('play-button');\r\n } else {\r\n $videoButton.removeClass('pause-button');\r\n $videoButton.addClass('play-button');\r\n videoElement.pause();\r\n }\r\n });\r\n }\r\n }\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = function (include) {\r\n if (typeof include === 'function') {\r\n include();\r\n } else if (typeof include === 'object') {\r\n Object.keys(include).forEach(function (key) {\r\n if (typeof include[key] === 'function') {\r\n include[key]();\r\n }\r\n });\r\n }\r\n};\r\n","'use strict';\r\nvar base = require('./base');\r\n\r\nmodule.exports = {\r\n availability: base.availability,\r\n\r\n addToCart: base.addToCart,\r\n\r\n updateAttributesAndDetails: function () {\r\n $('body').on('product:statusUpdate', function (e, data) {\r\n var $productContainer = $('.product-detail[data-pid=\"' + data.id + '\"]');\r\n\r\n $productContainer.find('.description-and-detail .product-attributes')\r\n .empty()\r\n .html(data.attributesHtml);\r\n\r\n if (data.shortDescription) {\r\n $productContainer.find('.description-and-detail .description')\r\n .removeClass('hidden-xl-down');\r\n $productContainer.find('.description-and-detail .description .content')\r\n .empty()\r\n .html(data.shortDescription);\r\n } else {\r\n $productContainer.find('.description-and-detail .description')\r\n .addClass('hidden-xl-down');\r\n }\r\n\r\n if (data.longDescription) {\r\n $productContainer.find('.description-and-detail .details')\r\n .removeClass('hidden-xl-down');\r\n $productContainer.find('.description-and-detail .details .content')\r\n .empty()\r\n .html(data.longDescription);\r\n } else {\r\n $productContainer.find('.description-and-detail .details')\r\n .addClass('hidden-xl-down');\r\n }\r\n });\r\n },\r\n\r\n showSpinner: function () {\r\n $('body').on('product:beforeAddToCart product:beforeAttributeSelect', function () {\r\n $.spinner().start();\r\n });\r\n },\r\n updateAttribute: function () {\r\n $('body').on('product:afterAttributeSelect', function (e, response) {\r\n if ($('.product-detail>.bundle-items').length) {\r\n response.container.data('pid', response.data.product.id);\r\n response.container.find('.product-id').text(response.data.product.id);\r\n } else if ($('.product-set-detail').eq(0).length) {\r\n response.container.data('pid', response.data.product.id);\r\n response.container.find('.product-id').text(response.data.product.id);\r\n } else {\r\n var productId = response.data.product.id;\r\n if (response.data.product.productType === 'variationGroup') {\r\n productId = response.data.product.defaultVariantId;\r\n }\r\n $('.product-id').text(productId);\r\n $('.product-detail:not(\".bundle-item\")').data('pid', productId);\r\n }\r\n });\r\n },\r\n updateAddToCart: function () {\r\n $('body').on('product:updateAddToCart', function (e, response) {\r\n // update local add to cart (for sets)\r\n $('button.add-to-cart', response.$productContainer).attr('disabled',\r\n (!response.product.readyToOrder || !response.product.available));\r\n\r\n var enable = $('.product-availability').toArray().every(function (item) {\r\n return $(item).data('available') && $(item).data('ready-to-order');\r\n });\r\n $('button.add-to-cart-global').attr('disabled', !enable);\r\n });\r\n },\r\n updateAvailability: function () {\r\n $('body').on('product:updateAvailability', function (e, response) {\r\n $('div.availability', response.$productContainer)\r\n .data('ready-to-order', response.product.readyToOrder)\r\n .data('available', response.product.available);\r\n\r\n $('.availability-msg', response.$productContainer)\r\n .empty().html(response.message);\r\n\r\n if ($('.global-availability').length) {\r\n var allAvailable = $('.product-availability').toArray()\r\n .every(function (item) { return $(item).data('available'); });\r\n\r\n var allReady = $('.product-availability').toArray()\r\n .every(function (item) { return $(item).data('ready-to-order'); });\r\n\r\n $('.global-availability')\r\n .data('ready-to-order', allReady)\r\n .data('available', allAvailable);\r\n\r\n $('.global-availability .availability-msg').empty()\r\n .html(allReady ? response.message : response.resources.info_selectforstock);\r\n }\r\n });\r\n },\r\n sizeChart: function () {\r\n $('.size-chart a').on('click', function (e) {\r\n e.preventDefault();\r\n var url = $(this).attr('href');\r\n var $prodSizeChart = $(this).closest('.size-chart').find('.size-chart-collapsible');\r\n if ($prodSizeChart.is(':empty')) {\r\n $.ajax({\r\n url: url,\r\n type: 'get',\r\n dataType: 'json',\r\n success: function (data) {\r\n $prodSizeChart.append(data.content);\r\n }\r\n });\r\n }\r\n $prodSizeChart.toggleClass('active');\r\n });\r\n\r\n var $sizeChart = $('.size-chart-collapsible');\r\n $('body').on('click touchstart', function (e) {\r\n if ($('.size-chart').has(e.target).length <= 0) {\r\n $sizeChart.removeClass('active');\r\n }\r\n });\r\n },\r\n copyProductLink: function () {\r\n $('body').on('click', '#fa-link', function () {\r\n event.preventDefault();\r\n var $temp = $('');\r\n $('body').append($temp);\r\n $temp.val($('#shareUrl').val()).select();\r\n document.execCommand('copy');\r\n $temp.remove();\r\n $('.copy-link-message').attr('role', 'alert');\r\n $('.copy-link-message').removeClass('d-none');\r\n setTimeout(function () {\r\n $('.copy-link-message').addClass('d-none');\r\n }, 3000);\r\n });\r\n },\r\n\r\n focusChooseBonusProductModal: base.focusChooseBonusProductModal()\r\n};\r\n","'use strict';\r\n\r\nvar domUtil = require('../domUtil');\r\nvar customUtil = require('../customUtil');\r\nvar slickHelper = require('../utils/slick');\r\nvar viewportUtil = require('../utils/viewport');\r\nvar baseHelper = require('./base');\r\nvar formValidation = require('../components/formValidation');\r\nvar csrf = require('../csrf');\r\nvar hiddenClass = 'd-none';\r\n\r\n/**\r\n * Process attribute values associated with an attribute that does not have image swatches\r\n *\r\n * @param {int} price - product sale price\r\n * @param {int} standardPrice - product standard price\r\n * @param {string} percentOffMark - string value\r\n * @param {Object} productContainer - DOM container for a given product\r\n * @param {boolean} hasSalePricebook - has sale pricebook\r\n */\r\nfunction updateProductPrice(price, standardPrice, percentOffMark, productContainer, hasSalePricebook, salesPriceBeforePromo) {\r\n var priceTemplate = $('.price-template')[0].cloneNode(true);\r\n var priceSection = domUtil.queryFirst('.prices .price', productContainer);\r\n var priceContainer = domUtil.queryFirst('.price-section', priceTemplate);\r\n var strikeThroughContainer = domUtil.queryFirst('.strike-through-section', priceContainer);\r\n var priceElement = domUtil.queryFirst('.strike-through-price', strikeThroughContainer);\r\n var salesContainer = domUtil.queryFirst('.sales', priceContainer);\r\n var salesPriceElement = domUtil.queryFirst('.price-value', salesContainer);\r\n var salesBeforPromoElement = domUtil.queryFirst('.sales-before-promo', priceContainer);\r\n var percentOffContainer = domUtil.queryFirst('.sales-percentage', priceContainer);\r\n var percentOffElement = domUtil.queryFirst('.percent-value', priceContainer);\r\n domUtil.removeClass(strikeThroughContainer, hiddenClass);\r\n\r\n if (!hasSalePricebook) {\r\n domUtil.addClass(strikeThroughContainer, hiddenClass);\r\n domUtil.addClass(percentOffContainer, hiddenClass);\r\n }\r\n\r\n if (salesBeforPromoElement && salesPriceBeforePromo) {\r\n salesBeforPromoElement.textContent = salesPriceBeforePromo;\r\n }\r\n\r\n if (priceElement) {\r\n priceElement.textContent = standardPrice;\r\n }\r\n if (salesPriceElement) {\r\n salesPriceElement.textContent = price;\r\n }\r\n if (price === standardPrice) {\r\n domUtil.addClass(strikeThroughContainer, hiddenClass);\r\n }\r\n if (price < standardPrice && percentOffElement && percentOffMark) {\r\n percentOffElement.textContent = percentOffMark;\r\n }\r\n priceSection.innerHTML = priceTemplate.innerHTML;\r\n}\r\n\r\n/**\r\n * This method used to get the pdp estimated delivery date via ajax call\r\n * @param {string} inStockDate - In Stoke date\r\n */\r\nfunction getPdpEDD(inStockDate) {\r\n var $eddText = $('.eddtext.productDetails');\r\n var $eddPidDiv = $eddText.find('.eddpid');\r\n\r\n if ($eddPidDiv.length) {\r\n var url = $eddPidDiv.data('url');\r\n\r\n if (url) {\r\n var eddObj = {\r\n zipcode: $eddPidDiv.data('narvar-dest-zip'),\r\n carrierCode: $eddPidDiv.data('narvar-carrier-code'),\r\n serviceCode: $eddPidDiv.data('narvar-service-code'),\r\n inStockDate: inStockDate\r\n };\r\n\r\n $eddText.addClass('d-none');\r\n\r\n $.ajax({\r\n url: url,\r\n type: 'get',\r\n dataType: 'json',\r\n data: { eddObj: JSON.stringify(eddObj) },\r\n success: function(data) {\r\n if (data.success) {\r\n $eddPidDiv.closest('.eddtext').attr('data-object', JSON.stringify(data.eddObject));\r\n if (eddObj.serviceCode && eddObj.serviceCode.length > 0 && eddObj.carrierCode && eddObj.carrierCode.length > 0) {\r\n $eddPidDiv.text('');\r\n if (window.narvar) {\r\n window.narvar('getEdd', {});\r\n }\r\n } else if (data.earliestEDD) {\r\n $eddPidDiv.text(data.earliestEDD);\r\n if (window.narvar) {\r\n window.narvar('getEdd', {});\r\n }\r\n } else if (window.narvar) {\r\n window.narvar('getEdd', {});\r\n }\r\n } else if (window.narvar) {\r\n window.narvar('getEdd', {});\r\n }\r\n var limit = 0;\r\n var timeInt;\r\n var unHideEdd = function() {\r\n if ($eddPidDiv.text().trim().length > 0 || limit > 100) {\r\n if ($eddPidDiv.text().trim().length > 0) {\r\n $eddText.removeClass('d-none');\r\n }\r\n clearTimeout(timeInt);\r\n } else {\r\n limit++;\r\n timeInt = setTimeout(unHideEdd, 100);\r\n }\r\n };\r\n unHideEdd();\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * This method handles the unavailability message in product set\r\n */\r\nfunction handleSetUnavailabilityMessage() {\r\n var unavailableItems = $('.availability-container .no-stock').length;\r\n var setUnavailableMessageOne = $('.set-unavailable-message-one');\r\n var setUnavailableMessageMany = $('.set-unavailable-message-many');\r\n if (unavailableItems > 1) {\r\n setUnavailableMessageOne.addClass('d-none');\r\n setUnavailableMessageMany.find('.no-of-items').text(unavailableItems);\r\n setUnavailableMessageMany.removeClass('d-none');\r\n } else if (unavailableItems === 1) {\r\n setUnavailableMessageMany.addClass('d-none');\r\n setUnavailableMessageOne.removeClass('d-none');\r\n } else {\r\n setUnavailableMessageOne.addClass('d-none');\r\n setUnavailableMessageMany.addClass('d-none');\r\n }\r\n}\r\n\r\n$('body').on('product:afterAttributeSelect', function(e, data) {\r\n if (data.attributeType && data.attributeType === 'color') {\r\n if (data.data.product.recommendationsHtml) {\r\n $('.recommendations-products').empty();\r\n $('.product-recommendation-details')\r\n .empty()\r\n .html(data.data.product.recommendationsHtml);\r\n $('body').trigger('search:updateProducts');\r\n }\r\n if (data.data.product.einsteinProductRecommendationsHtml) {\r\n $('.custom-recommender')\r\n .empty()\r\n .html(data.data.product.einsteinProductRecommendationsHtml);\r\n $('body').trigger('search:updateProducts');\r\n } else {\r\n $('.custom-recommender').empty();\r\n }\r\n }\r\n if ($('.product-detail.product-pdp .custom-select-wrapper .size-value.selected').length) {\r\n $('.qty-err').remove();\r\n }\r\n if (!data.data.product.price.type) {\r\n var standardPrice = data.data.product.price.list ? data.data.product.price.list.formatted : data.data.product.price.sales.formatted;\r\n var price = standardPrice;\r\n var percentOffMark;\r\n if (data.data.product.price.sales) {\r\n price = data.data.product.price.sales.formatted;\r\n }\r\n if (data.data.product.price.list) {\r\n percentOffMark = data.data.product.price.percentageOff;\r\n }\r\n\r\n var hasSalePricebook = data.data.hasSalePricebook;\r\n var salesPriceBeforePromo =\r\n 'salesBeforePromo' in data.data.product.price && data.data.product.price.salesBeforePromo ? data.data.product.price.salesBeforePromo.formatted : '';\r\n updateProductPrice(price, standardPrice, percentOffMark, data.container[0], hasSalePricebook, salesPriceBeforePromo);\r\n }\r\n var isPdpSet = $('.product-set-detail').length;\r\n if (isPdpSet) {\r\n handleSetUnavailabilityMessage();\r\n }\r\n\r\n var PdpVideoID = data.data.product.pdpVideoID;\r\n if (PdpVideoID !== null && PdpVideoID !== undefined) {\r\n var carousel = $('.product-detail .primary-images .carousel');\r\n if (isPdpSet) {\r\n var selectedProductID = data.data.product.id;\r\n if (selectedProductID !== null && selectedProductID !== undefined) {\r\n $('.product-detail').each(function() {\r\n var setItemID = $(this)\r\n .find('.product-id.bfx-sku')\r\n .text();\r\n if (setItemID === selectedProductID) {\r\n carousel = $(this).find('.carousel');\r\n }\r\n });\r\n }\r\n }\r\n\r\n if ($(carousel).length > 0) {\r\n var carouselId = $(carousel).attr('id');\r\n var imageLength = $(carousel).find('.carousel-inner .carousel-item ').length;\r\n $(\r\n '
'\r\n ).appendTo($(carousel).find('.carousel-inner'));\r\n $('
  • ').appendTo(\r\n $(carousel).find('.carousel-indicators')\r\n );\r\n }\r\n }\r\n // update Narvar estimated date on PDP\r\n var $eddPidDiv = $('.eddpid');\r\n if (isPdpSet) {\r\n var selectedEddProductID = data.data.product.id;\r\n if (selectedEddProductID !== null && selectedEddProductID !== undefined) {\r\n $('.product-detail').each(function() {\r\n var setItemID = $(this)\r\n .find('.product-id.bfx-sku')\r\n .text();\r\n if (setItemID === selectedEddProductID) {\r\n $eddPidDiv = $(this).find('.eddpid');\r\n }\r\n });\r\n }\r\n }\r\n if ($eddPidDiv.length > 0) {\r\n if (data.data.product.availability.eddPreOrderDate) {\r\n $eddPidDiv.attr('data-narvar-instock-date', data.data.product.availability.eddPreOrderDate);\r\n $eddPidDiv.addClass('preorder-date');\r\n if ($('.pdp-edd.hide').length > 0) {\r\n $('.pdp-edd.hide').removeClass('hide');\r\n }\r\n } else {\r\n if ($eddPidDiv.hasClass('preorder-date')) {\r\n $eddPidDiv.removeClass('preorder-date');\r\n }\r\n if ($('.pdp-edd.hide').length > 0) {\r\n $('.pdp-edd.hide').removeClass('hide');\r\n }\r\n }\r\n\r\n getPdpEDD(data.data.product.availability.eddPreOrderDate);\r\n }\r\n\r\n /* re-renders the applicable promotions if the product has active product-level promotions */\r\n var $targetEl = $('.applicable-promotions');\r\n if (data.data.product.hasPromotions) {\r\n var promotions = data.data.product.promotions;\r\n baseHelper.updateProductPromotions($targetEl, promotions);\r\n } else {\r\n $targetEl.empty();\r\n }\r\n});\r\n\r\n// calculate the top offset of product details description container and lock it at the top once the 'Add to bag' button is in the viewport\r\nvar setProductDetailsDescTop = function(parentEl) {\r\n if (!parentEl) {\r\n return;\r\n }\r\n\r\n var $productDescContainer = parentEl.find('.product-description-container');\r\n var $btnContainer = parentEl.find('.prices-add-to-cart-actions');\r\n var woh = $(window).outerHeight(true);\r\n var bPadding = 50;\r\n var topOffset = 150;\r\n\r\n if ($btnContainer.length > 0 && !viewportUtil.isInViewport($btnContainer)) {\r\n topOffset = woh - ($btnContainer.position().top + $btnContainer.outerHeight(true) + bPadding);\r\n }\r\n\r\n $productDescContainer.css({ top: topOffset / 16 + 'rem' });\r\n};\r\n\r\n$('body').on('product:updateAvailability', function(e, data) {\r\n var className = data.product.availability.classType;\r\n var errMessage = data.product.availability.messages[0];\r\n var ele = $(e.target).find('.product-description');\r\n var isSetItem = data.$productContainer.hasClass('product-detail set-item');\r\n if (className === 'qty-err') {\r\n ele.find('.add-to-cart').prop('disabled', true);\r\n } else {\r\n ele.find('.add-to-cart').prop('disabled', false);\r\n }\r\n if (data.product.variationAttributes) {\r\n var output = [];\r\n $.each(data.product.variationAttributes, function(key, variationAttribute) {\r\n if (variationAttribute.id === 'color') {\r\n $.each(variationAttribute.values, function(key1, value) {\r\n var $colorSelector = $(\r\n '.product-detail [data-attr=\"' +\r\n variationAttribute.id +\r\n '\"] button.' +\r\n variationAttribute.id +\r\n '-attribute[data-variationgroupid=\"' +\r\n value.variationGroupID +\r\n '\"]'\r\n );\r\n if (!value.selectable && (!value.enableBackInStockNotification || isSetItem)) {\r\n $colorSelector.attr('disabled', 'disabled');\r\n } else {\r\n $colorSelector.removeAttr('disabled');\r\n }\r\n if (!value.enableBackInStockNotification || isSetItem) {\r\n $colorSelector.removeClass('back-in-stock-notification');\r\n } else {\r\n $colorSelector.addClass('back-in-stock-notification');\r\n }\r\n });\r\n }\r\n if (variationAttribute.id === 'size') {\r\n $.each(variationAttribute.values, function(key1, value) {\r\n var showBackInStockModule = value.enableBackInStockNotification;\r\n output.push(\r\n ''\r\n );\r\n\r\n if (value.selected && !value.selectable) {\r\n ele.find('button.add-to-cart').prop('disabled', true);\r\n }\r\n });\r\n ele.find('[data-attr=\"' + variationAttribute.id + '\"] .size-selections').html(output.join(''));\r\n }\r\n });\r\n }\r\n\r\n // Back in Stock Notification\r\n $('.notify-sign-up').addClass('hide');\r\n $('#waitListJoin').removeClass('is-invalid');\r\n $(this)\r\n .closest('.product-detail')\r\n .find('.btn-container')\r\n .removeClass('hide');\r\n\r\n if (\r\n ele\r\n .closest('.product-detail')\r\n .find('[data-attr=\"size\"] .size-attribute[aria-checked=\"true\"]')\r\n .hasClass('show-backinstock-module')\r\n ) {\r\n ele.closest('.product-detail')\r\n .find('.add-to-cart')\r\n .addClass('hide');\r\n ele.closest('.product-detail')\r\n .find('.backinstock-notify')\r\n .removeClass('hide');\r\n } else {\r\n ele.closest('.product-detail')\r\n .find('.btn-container')\r\n .removeClass('hide');\r\n ele.closest('.product-detail')\r\n .find('.add-to-cart')\r\n .removeClass('hide');\r\n ele.closest('.product-detail')\r\n .find('.backinstock-notify')\r\n .addClass('hide');\r\n }\r\n\r\n $(ele)\r\n .find('.color-value')\r\n .each(function(d, el) {\r\n if ($(el).hasClass('unselectable')) {\r\n if (\r\n !$(el)\r\n .parent()\r\n .hasClass('back-in-stock-notification')\r\n ) {\r\n $(el)\r\n .parent()\r\n .attr('disabled', true);\r\n } else {\r\n $(el)\r\n .parent()\r\n .attr('disabled', false);\r\n }\r\n } else {\r\n $(el)\r\n .parent()\r\n .attr('disabled', false);\r\n }\r\n });\r\n $(ele)\r\n .find('.color-value')\r\n .parent('.color-attribute')\r\n .attr('aria-checked', 'false');\r\n $(ele)\r\n .find('.color-value.selected')\r\n .parent('.color-attribute')\r\n .attr('aria-checked', 'true');\r\n var colorName = $(ele)\r\n .find('.color-value.selected')\r\n .data('attr-displayvalue');\r\n if (typeof colorName !== 'undefined') {\r\n $(ele)\r\n .find('.selected-color')\r\n .text(colorName.toLowerCase());\r\n }\r\n\r\n if (className !== 'no-stock') {\r\n $(ele)\r\n .find('.product-availability')\r\n .html('
    ' + errMessage + '
    ');\r\n $(ele)\r\n .find('.cart-and-ipay')\r\n .removeClass('hide');\r\n } else {\r\n $(ele)\r\n .find('.product-availability')\r\n .empty();\r\n $(ele)\r\n .find('.notify-sign-up .form-group, .notify-sign-up .btn.stock-notify-signup-email, .notify-sign-up.title')\r\n .removeClass('hide');\r\n $(ele)\r\n .find('.notify-sign-up .btn.stock-notify-signup-success')\r\n .addClass('hide');\r\n }\r\n\r\n if (className !== 'no-err') {\r\n $('#footercontent').addClass('message');\r\n } else {\r\n $('#footercontent').removeClass('message');\r\n }\r\n\r\n var preOrderLabel = $('.add-to-cart-btn-labels').attr('data-value-preorder-text');\r\n var addToCartLabel = $('.add-to-cart-btn-labels').attr('data-value-cart-text');\r\n var hasPreorder = data.product.availability.messages[0].indexOf('pre-order-ship-msg') >= 0;\r\n\r\n if (hasPreorder) {\r\n $(ele)\r\n .find('.add-to-cart span')\r\n .text(preOrderLabel);\r\n $(ele)\r\n .find('.availability')\r\n .hide();\r\n $(ele)\r\n .find('.availability-container .availability-msg')\r\n .show();\r\n } else {\r\n $(ele)\r\n .find('.add-to-cart span')\r\n .text(addToCartLabel);\r\n $(ele)\r\n .find('.availability')\r\n .show();\r\n $(ele)\r\n .find('.availability-container .availability-msg')\r\n .hide();\r\n }\r\n $(ele)\r\n .find('.product-desc .content')\r\n .html(data.product.shortDescription);\r\n $(ele)\r\n .find('.description-and-detail')\r\n .empty()\r\n .html(data.product.descriptionAndDetailsHtml);\r\n $(ele)\r\n .find('.sales-bdg')\r\n .empty()\r\n .html(data.product.saleBadgingHtml);\r\n $(ele)\r\n .find('.ex-promotion')\r\n .empty()\r\n .html(data.product.exclusiveBadgingHtml);\r\n $(ele)\r\n .find('.product-name')\r\n .empty()\r\n .html(data.product.productName);\r\n\r\n // reset and re-calculate the top offset when color/size is changed\r\n var $productDescContainer = $('.product-detail .product-description-container');\r\n $productDescContainer.removeAttr('style');\r\n\r\n if (!customUtil.isMobile() && $('.product-detail').length > 0) {\r\n setProductDetailsDescTop($('.product-detail'));\r\n }\r\n});\r\n\r\n// adding error message when size not selected\r\n// eslint-disable-next-line consistent-return\r\n$('body').on('product:beforeAddToCart', function(data, ele) {\r\n var isPdpSet = $(ele).closest('.product-set-detail').length;\r\n if (isPdpSet) {\r\n var noSelectionCount = 0;\r\n var $setProducts = $(ele)\r\n .closest('.product-detail')\r\n .find('.set-item');\r\n if (!$setProducts.length) {\r\n $setProducts = $(ele).closest('.product-detail.set-item');\r\n }\r\n $setProducts.each(function() {\r\n var $setProduct = $(this);\r\n var labelText = $setProduct.find('.size-selections').attr('data-value-select-size-label');\r\n var errorMessage = '

    ' + labelText + '

    ';\r\n var $sizeSelected = $setProduct.find('.custom-select-wrapper .size-selections .size-value.selected');\r\n if ($sizeSelected.length === 0) {\r\n noSelectionCount++;\r\n $setProduct\r\n .find('.product-description')\r\n .find('.availability')\r\n .empty()\r\n .html(errorMessage);\r\n\r\n $setProduct.find('.select-size').focus();\r\n $setProduct.find('.add-to-cart').prop('disabled', true);\r\n }\r\n });\r\n if (noSelectionCount > 0) {\r\n $(ele)\r\n .closest('.product-set-detail')\r\n .find('.add-to-cart-global')\r\n .prop('disabled', true);\r\n return false;\r\n }\r\n } else {\r\n var $productDetail = $(ele).closest('.product-detail');\r\n if (!$productDetail.length) {\r\n return false;\r\n }\r\n var selectedVal = $productDetail.find('.custom-select-wrapper .size-value.selected').data('attr-value');\r\n var $container = $(ele).closest('.product-detail');\r\n var labelText = $('.size-selections').attr('data-value-select-size-label');\r\n var errorMessage = '

    ' + labelText + '

    ';\r\n if ((selectedVal === undefined || selectedVal === 'undefined') && !isPdpSet) {\r\n data.preventDefault();\r\n if (customUtil.isMobile() || $('.availability').css('display') === 'none') {\r\n $container.find('.availability').show();\r\n $('#footercontent').addClass('message');\r\n }\r\n $container\r\n .find('.availability')\r\n .empty()\r\n .html(errorMessage);\r\n\r\n if ($('.desktop-menu').hasClass('d-none')) {\r\n $('body, html').animate({\r\n scrollTop:\r\n $('.size-container').offset().top -\r\n ($(window).innerHeight() + $('.prices-add-to-cart-actions').innerHeight()) / 2 +\r\n $('.size-container').innerHeight()\r\n });\r\n }\r\n\r\n $container.find('.select-size').focus();\r\n $container.find('.add-to-cart').prop('disabled', true);\r\n return false;\r\n }\r\n }\r\n handleSetUnavailabilityMessage();\r\n return false;\r\n});\r\n\r\nvar expandSizeGuide = function() {\r\n var sizeGuideAccordion = '.sizeGuide-expand-all';\r\n $(sizeGuideAccordion).toggleClass('expand');\r\n if ($(sizeGuideAccordion).hasClass('expand')) {\r\n $('.pdp-sizeGuide-modal-body > div').addClass('active');\r\n } else {\r\n $('.pdp-sizeGuide-modal-body > div').removeClass('active');\r\n }\r\n $(sizeGuideAccordion).text($(sizeGuideAccordion).text() === 'Collapse all' ? 'Expand all' : 'Collapse all');\r\n};\r\n\r\n$(document).on('click', '.sizeGuide-expand-all', function(e) {\r\n e.preventDefault();\r\n expandSizeGuide();\r\n});\r\n\r\nvar collapseSizeGuide = function() {\r\n $('.pdp-sizeGuide-modal-body > div').removeClass('active');\r\n $('.sizeGuide-expand-all')\r\n .removeClass('expand')\r\n .text(' Expand all');\r\n};\r\n\r\n$(document).on('click', '.sizeGuide-link', function() {\r\n $('.product-detail').addClass('sizeGuideShow');\r\n});\r\n\r\n$(document).on('hidden.bs.modal', '#pdp-sizeGuide', function() {\r\n $('.product-detail').removeClass('sizeGuideShow');\r\n setProductDetailsDescTop();\r\n collapseSizeGuide();\r\n});\r\n\r\nvar historyPushCount = 0;\r\nvar toTitleCase = function(phrase) {\r\n return phrase\r\n .toLowerCase()\r\n .split(' ')\r\n .map(function(word) {\r\n return word.charAt(0).toUpperCase() + word.slice(1);\r\n })\r\n .join(' ');\r\n};\r\n\r\n$(document).on('click', '.color-attribute', function() {\r\n var $this = $(this);\r\n var groudId = $(this).data('variationgroupid');\r\n var isPdp = $(this)\r\n .closest('.product-detail')\r\n .hasClass('product-wrapper');\r\n var pageTitle = document.title;\r\n var color = $(this)\r\n .find('.color-value')\r\n .data('attr-value');\r\n var productName = $(this)\r\n .closest('.product-detail')\r\n .find('.product-name')\r\n .text();\r\n var exclusiveBadge = $this.data('exclusivebadge');\r\n var salesBadge = $this.data('salesbadge');\r\n var $jsProductTile = $this.closest('.js-product-tile');\r\n var currentLocale = $(this).data('currentlocale');\r\n\r\n if (isPdp) {\r\n var newPageUrl = groudId + '.html';\r\n if (currentLocale && currentLocale !== 'default') {\r\n newPageUrl = newPageUrl + '?lang=' + currentLocale;\r\n }\r\n window.history.pushState('data', 'Title', newPageUrl);\r\n // update the canonical tag\r\n $('[rel=\"canonical\"]').attr('href', window.location.href);\r\n\r\n if (pageTitle.split('|').length > 0) {\r\n // update the page title\r\n var newPageTitle = pageTitle\r\n .trim()\r\n .split('|')\r\n .map(function(item, index) {\r\n // only update the product name in the title\r\n if (index === 0) {\r\n // concatinate the product color\r\n item = toTitleCase(productName + ' In ' + color);\r\n }\r\n return item;\r\n })\r\n .join(' | ');\r\n\r\n document.title = newPageTitle;\r\n }\r\n historyPushCount++;\r\n }\r\n\r\n // check if exclusive/sales badge has data value\r\n if (exclusiveBadge || salesBadge) {\r\n var badgeClass = 'badge-product';\r\n var badgeValue = salesBadge;\r\n var $targetEl = $jsProductTile.find('.product-detail');\r\n\r\n if (!salesBadge && exclusiveBadge) {\r\n badgeClass = 'badge-product badge-exclusive';\r\n badgeValue = exclusiveBadge;\r\n }\r\n\r\n // check if badge element not exist\r\n if ($jsProductTile.find('.badge-product').length === 0) {\r\n // create badge element and append to the target element\r\n var $newEl = $('
    ', {\r\n class: badgeClass\r\n }).html('' + badgeValue + '');\r\n $targetEl.append($newEl);\r\n } else {\r\n // update the badge element value\r\n $targetEl.find('.badge-product span').text(badgeValue);\r\n }\r\n }\r\n});\r\n\r\nif ($('.product-pdp').length > 0) {\r\n $(window).on('popstate', function() {\r\n if (historyPushCount > 0) {\r\n window.history.go(-historyPushCount);\r\n }\r\n });\r\n}\r\n\r\nvar pdpSizeGuideTitleClick = function() {\r\n if ($('.pdp-sizeGuide-modal-body .collapsible-xs.active').length === $('.pdp-sizeGuide-modal-body .collapsible-xs').length) {\r\n expandSizeGuide();\r\n } else if ($('.pdp-sizeGuide-modal-body .collapsible-xs.active').length === 0) {\r\n collapseSizeGuide();\r\n }\r\n};\r\n\r\n$(document).on('click', '#pdp-sizeGuide .collapsible-xs .title', pdpSizeGuideTitleClick);\r\n\r\nif ($('.thumbnail-carousel').length > 0) {\r\n $('body').on('click', '.thumbnail-carousel__item', function() {\r\n var $this = $(this);\r\n // todo remove a as wrapper here in base.js and in thumnailCarousel\r\n var imgThumbnailIndex = $this.find('img').data('index');\r\n var activeClass = 'thumbnail-carousel__item--active';\r\n $('.thumbnail-carousel__item').removeClass(activeClass);\r\n $('.carousel-item.active').removeClass('active');\r\n\r\n /* display the selected thumbnail image into the large image */\r\n $('.pdp-carousel .primary-images .carousel').carousel(imgThumbnailIndex);\r\n $('#carousel-item-' + imgThumbnailIndex)\r\n .addClass('active')\r\n .scroll();\r\n $this.addClass(activeClass);\r\n });\r\n}\r\n\r\n$('body').on('click', '.backinstock-notify', function() {\r\n var scrollToBISModule = function scrollIntoView(node) {\r\n var parent = node.parentElement;\r\n var parentCHeight = parent.clientHeight;\r\n var parentSHeight = parent.scrollHeight;\r\n // Doesn't scroll if parent element is body\r\n if (parentSHeight > parentCHeight && parent.parentElement) {\r\n var nodeHeight = node.clientHeight;\r\n var nodeOffset = node.offsetTop;\r\n var scrollOffset = nodeOffset + nodeHeight / 2 - parentCHeight / 2;\r\n parent.scrollTop = scrollOffset;\r\n }\r\n if (parent.parentElement) {\r\n scrollIntoView(parent);\r\n }\r\n };\r\n\r\n scrollToBISModule(document.querySelector('.product-description-container .attributes'));\r\n $('.notify-sign-up').removeClass('hide');\r\n $(this)\r\n .closest('.cart-and-ipay')\r\n .addClass('hide');\r\n});\r\n\r\n$('form.stock-notify-sign-up').on('stock-notify-sign-up:error', function(e, data) {\r\n csrf.updateTokens(data);\r\n});\r\n\r\n$('form[name=\"dwfrm_stockNotify\"]').on('submit', function(event) {\r\n event.preventDefault();\r\n\r\n var $form = $(this);\r\n var url = $form.attr('action');\r\n var pid = $('.product-id')\r\n .text()\r\n .trim();\r\n\r\n if (!pid) {\r\n return;\r\n }\r\n\r\n var newUrl = domUtil.appendToUrl(url, { pid: pid });\r\n var attentiveURL = domUtil.appendToUrl($form.data('attentive-action'), { pid: pid, isPDP: true });\r\n\r\n $form.spinner().start();\r\n $.ajax({\r\n url: newUrl,\r\n type: 'post',\r\n dataType: 'json',\r\n data: $form.serialize(),\r\n success: function(data) {\r\n if (!data.success) {\r\n $form.spinner().stop();\r\n formValidation($form, data);\r\n $('.error-msg').remove();\r\n if ('message' in data) {\r\n $form.find('#waitListJoin').addClass('is-invalid');\r\n $('#stock-notify-signup-form-email-error').empty();\r\n $('#stock-notify-signup-form-email-error').prepend(\"');\r\n }\r\n $('form.stock-notify-sign-up').trigger('stock-notify-sign-up:error', data);\r\n } else if (!$form.find('#attentive-pdp').is(':checked')) {\r\n $form.spinner().stop();\r\n $('.notify-sign-up .form-group, .notify-sign-up .btn.stock-notify-signup-email, .notify-sign-up.title').addClass('hide');\r\n $('.notify-sign-up .btn.stock-notify-signup-success').removeClass('hide');\r\n }\r\n },\r\n error: function() {\r\n $form.spinner().stop();\r\n }\r\n });\r\n\r\n if ($form.find('#attentive-pdp').is(':checked')) {\r\n $.ajax({\r\n url: attentiveURL,\r\n type: 'get',\r\n dataType: 'json',\r\n data: $form.serialize(),\r\n success: function (data) {\r\n $form.spinner().stop();\r\n if (!data.success) {\r\n formValidation($form, data);\r\n $('.error-msg').remove();\r\n if ('message' in data) {\r\n $form.find('#smsJoin').addClass('is-invalid');\r\n $('#sms-signup-form-error').empty();\r\n $('#sms-signup-form-error').prepend(\"');\r\n }\r\n $('form.stock-notify-sign-up').trigger('stock-notify-sign-up:error', data);\r\n } else {\r\n $('.notify-sign-up .form-group, .notify-sign-up .btn.stock-notify-signup-email, .notify-sign-up.title').addClass('hide');\r\n $('.notify-sign-up .btn.stock-notify-signup-success').removeClass('hide');\r\n }\r\n },\r\n error: function () {\r\n $form.spinner().stop();\r\n }\r\n });\r\n }\r\n});\r\n\r\n// remove isapplepay element on pdp for browsers that do not support it\r\nif ('ApplePaySession' in window === false) {\r\n $('isapplepay').remove();\r\n}\r\n\r\n// page load initialization on desktop only\r\nif (!customUtil.isMobile()) {\r\n setProductDetailsDescTop($('.product-detail'));\r\n\r\n $('body').on('click', '.product-pdp .size-attribute, .product-pdp .color-attribute', function() {\r\n window.scrollTo({ top: 0, behavior: 'smooth' });\r\n });\r\n}\r\n\r\n","'use strict';\r\nvar processInclude = require('base/util');\r\nvar base = require('./base');\r\nvar focusHelper = require('base/components/focus');\r\nvar baseQuickView = require('base/product/quickView');\r\n\r\n$(document).ready(function() {\r\n processInclude(require('./detail'));\r\n processInclude(require('./pdpProductDetails'));\r\n});\r\n\r\n/**\r\n * Generates the modal window on the first call.\r\n *\r\n */\r\nfunction getModalHtmlElement() {\r\n if ($('#quickViewModal').length !== 0) {\r\n $('#quickViewModal').remove();\r\n }\r\n var htmlString =\r\n '' +\r\n '
    ' +\r\n '' +\r\n '
    ' +\r\n '' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ' +\r\n '
    ';\r\n $('body').append(htmlString);\r\n}\r\n\r\n/**\r\n * @typedef {Object} QuickViewHtml\r\n * @property {string} body - Main Quick View body\r\n * @property {string} footer - Quick View footer content\r\n */\r\n\r\n/**\r\n * Parse HTML code in Ajax response\r\n *\r\n * @param {string} html - Rendered HTML from quickview template\r\n * @return {QuickViewHtml} - QuickView content components\r\n */\r\nfunction parseHtml(html) {\r\n var $html = $('
    ').append($.parseHTML(html));\r\n\r\n var body = $html.find('.product-quickview');\r\n var footer = $html.find('.modal-footer').children();\r\n\r\n return { body: body, footer: footer };\r\n}\r\n\r\n/**\r\n * replaces the content in the modal window on for the selected product variation.\r\n * @param {string} selectedValueUrl - url to be used to retrieve a new product model\r\n */\r\nfunction fillModalElement(selectedValueUrl, el) {\r\n $('.modal-body')\r\n .spinner()\r\n .start();\r\n $.ajax({\r\n url: selectedValueUrl,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function(data) {\r\n var parsedHtml = parseHtml(data.renderedTemplate),\r\n uniqueSellingPropsCopy = el.parent('.product-detail').find('.unique-selling-props-copy').clone();\r\n\r\n $('.quick-view-dialog .modal-body').empty();\r\n $('.quick-view-dialog .modal-body').html(parsedHtml.body);\r\n $('.quick-view-dialog .modal-footer').html(parsedHtml.footer);\r\n $('.full-pdp-link').text(data.quickViewFullDetailMsg);\r\n $('#quickViewModal .full-pdp-link').attr('href', data.productUrl);\r\n $('#quickViewModal .size-chart').attr('href', data.productUrl);\r\n $('#quickViewModal .modal-header .close .sr-only').text(data.closeButtonText);\r\n $('#quickViewModal .enter-message').text(data.enterDialogMessage);\r\n $('#quickViewModal .unique-selling-props-container').append(uniqueSellingPropsCopy);\r\n $('#quickViewModal').modal('show');\r\n\r\n $.spinner().stop();\r\n },\r\n error: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n showQuickview: function() {\r\n $('body').on('click', '.quickview', function(e) {\r\n e.preventDefault();\r\n var $this = $(this),\r\n selectedValueUrl = $this\r\n .closest('a.quickview')\r\n .attr('href');\r\n $(e.target).trigger('quickview:show');\r\n getModalHtmlElement();\r\n fillModalElement(selectedValueUrl, $this);\r\n });\r\n },\r\n focusQuickview: function() {\r\n $('body').on('shown.bs.modal', '#quickViewModal', function() {\r\n $('#quickViewModal .close').focus();\r\n });\r\n },\r\n trapQuickviewFocus: function() {\r\n $('body').on('keydown', '#quickViewModal', function(e) {\r\n var focusParams = {\r\n event: e,\r\n containerSelector: '#quickViewModal',\r\n firstElementSelector: '.full-pdp-link',\r\n lastElementSelector: '.add-to-cart-global',\r\n nextToLastElementSelector: '.modal-footer .quantity-select'\r\n };\r\n focusHelper.setTabNextFocus(focusParams);\r\n });\r\n },\r\n\r\n availability: base.availability,\r\n showSpinner: baseQuickView.showSpinner,\r\n hideDialog: baseQuickView.hideDialog,\r\n beforeUpdateAttribute: baseQuickView.beforeUpdateAttribute,\r\n updateAttribute: baseQuickView.updateAttribute,\r\n updateAddToCart: baseQuickView.updateAddToCart,\r\n updateAvailability: baseQuickView.updateAvailability\r\n};\r\n\r\n$(document).on('click', '.pdp-sizeGuide-modal .close', function() {\r\n $('#pdp-sizeGuide').remove();\r\n});\r\n\r\n$(document).on('show.bs.modal', '#quickViewModal', function() {\r\n $('.pdp-sizeGuide-modal .close').removeAttr('data-dismiss');\r\n $('.modal-body .swatch-circle').each(function(i, d) {\r\n if ($(d).hasClass('selected')) {\r\n var swatchVal = $(d).data('attr-value');\r\n $('.selected-color').text(swatchVal.toLowerCase());\r\n }\r\n });\r\n\r\n var tElement = document.querySelector('.product-desc .value');\r\n if (tElement != null) {\r\n var tElementText = tElement.innerText;\r\n var ellipsisText = EllipsisChar(tElementText, 168);\r\n tElement.innerText = ellipsisText;\r\n }\r\n});\r\n\r\nfunction EllipsisChar(text, size) {\r\n var len = text.length;\r\n\r\n if (len >= size) {\r\n text = text.substring(0, 168) + '...';\r\n }\r\n\r\n return text;\r\n}\r\n$(document).on('hidden.bs.modal', '#quickViewModal', function() {\r\n $('.modal-backdrop').remove();\r\n});\r\n","'use strict';\r\nvar base = require('./base');\r\nvar focusHelper = require('../components/focus');\r\n\r\n/**\r\n * Generates the modal window on the first call.\r\n *\r\n */\r\nfunction getModalHtmlElement() {\r\n if ($('#quickViewModal').length !== 0) {\r\n $('#quickViewModal').remove();\r\n }\r\n var htmlString = ''\r\n + '
    '\r\n + ''\r\n + '
    '\r\n + ''\r\n + '
    '\r\n + '
    '\r\n + ' '\r\n + ' '\r\n + '
    '\r\n + '
    '\r\n + '
    '\r\n + '
    '\r\n + '
    '\r\n + '
    ';\r\n $('body').append(htmlString);\r\n}\r\n\r\n/**\r\n * @typedef {Object} QuickViewHtml\r\n * @property {string} body - Main Quick View body\r\n * @property {string} footer - Quick View footer content\r\n */\r\n\r\n/**\r\n * Parse HTML code in Ajax response\r\n *\r\n * @param {string} html - Rendered HTML from quickview template\r\n * @return {QuickViewHtml} - QuickView content components\r\n */\r\nfunction parseHtml(html) {\r\n var $html = $('
    ').append($.parseHTML(html));\r\n\r\n var body = $html.find('.product-quickview');\r\n var footer = $html.find('.modal-footer').children();\r\n\r\n return { body: body, footer: footer };\r\n}\r\n\r\n/**\r\n * replaces the content in the modal window on for the selected product variation.\r\n * @param {string} selectedValueUrl - url to be used to retrieve a new product model\r\n */\r\nfunction fillModalElement(selectedValueUrl) {\r\n $('.modal-body').spinner().start();\r\n $.ajax({\r\n url: selectedValueUrl,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function (data) {\r\n var parsedHtml = parseHtml(data.renderedTemplate);\r\n\r\n $('.modal-body').empty();\r\n $('.modal-body').html(parsedHtml.body);\r\n $('.modal-footer').html(parsedHtml.footer);\r\n $('.full-pdp-link').text(data.quickViewFullDetailMsg);\r\n $('#quickViewModal .full-pdp-link').attr('href', data.productUrl);\r\n $('#quickViewModal .size-chart').attr('href', data.productUrl);\r\n $('#quickViewModal .modal-header .close .sr-only').text(data.closeButtonText);\r\n $('#quickViewModal .enter-message').text(data.enterDialogMessage);\r\n $('#quickViewModal').modal('show');\r\n $('body').trigger('quickview:ready');\r\n\r\n $.spinner().stop();\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n}\r\n\r\nmodule.exports = {\r\n showQuickview: function () {\r\n $('body').on('click', '.quickview', function (e) {\r\n e.preventDefault();\r\n var selectedValueUrl = $(this).closest('a.quickview').attr('href');\r\n $(e.target).trigger('quickview:show');\r\n getModalHtmlElement();\r\n fillModalElement(selectedValueUrl);\r\n });\r\n },\r\n focusQuickview: function () {\r\n $('body').on('shown.bs.modal', '#quickViewModal', function () {\r\n $('#quickViewModal .close').focus();\r\n });\r\n },\r\n trapQuickviewFocus: function () {\r\n $('body').on('keydown', '#quickViewModal', function (e) {\r\n var focusParams = {\r\n event: e,\r\n containerSelector: '#quickViewModal',\r\n firstElementSelector: '.full-pdp-link',\r\n lastElementSelector: '.add-to-cart-global',\r\n nextToLastElementSelector: '.modal-footer .quantity-select'\r\n };\r\n focusHelper.setTabNextFocus(focusParams);\r\n });\r\n },\r\n availability: base.availability,\r\n addToCart: base.addToCart,\r\n showSpinner: function () {\r\n $('body').on('product:beforeAddToCart', function (e, data) {\r\n $(data).closest('.modal-content').spinner().start();\r\n });\r\n },\r\n hideDialog: function () {\r\n $('body').on('product:afterAddToCart', function () {\r\n $('#quickViewModal').modal('hide');\r\n });\r\n },\r\n beforeUpdateAttribute: function () {\r\n $('body').on('product:beforeAttributeSelect', function () {\r\n $('.modal.show .modal-content').spinner().start();\r\n });\r\n },\r\n updateAttribute: function () {\r\n $('body').on('product:afterAttributeSelect', function (e, response) {\r\n if ($('.modal.show .product-quickview>.bundle-items').length) {\r\n $('.modal.show').find(response.container).data('pid', response.data.product.id);\r\n $('.modal.show').find(response.container)\r\n .find('.product-id').text(response.data.product.id);\r\n } else if ($('.set-items').length) {\r\n response.container.find('.product-id').text(response.data.product.id);\r\n } else {\r\n $('.modal.show .product-quickview').data('pid', response.data.product.id);\r\n $('.modal.show .full-pdp-link')\r\n .attr('href', response.data.product.selectedProductUrl);\r\n }\r\n });\r\n },\r\n updateAddToCart: function () {\r\n $('body').on('product:updateAddToCart', function (e, response) {\r\n // update local add to cart (for sets)\r\n $('button.add-to-cart', response.$productContainer).attr('disabled',\r\n (!response.product.readyToOrder || !response.product.available));\r\n\r\n // update global add to cart (single products, bundles)\r\n var dialog = $(response.$productContainer)\r\n .closest('.quick-view-dialog');\r\n\r\n $('.add-to-cart-global', dialog).attr('disabled',\r\n !$('.global-availability', dialog).data('ready-to-order')\r\n || !$('.global-availability', dialog).data('available')\r\n );\r\n });\r\n },\r\n updateAvailability: function () {\r\n $('body').on('product:updateAvailability', function (e, response) {\r\n // bundle individual products\r\n $('.product-availability', response.$productContainer)\r\n .data('ready-to-order', response.product.readyToOrder)\r\n .data('available', response.product.available)\r\n .find('.availability-msg')\r\n .empty()\r\n .html(response.message);\r\n\r\n\r\n var dialog = $(response.$productContainer)\r\n .closest('.quick-view-dialog');\r\n\r\n if ($('.product-availability', dialog).length) {\r\n // bundle all products\r\n var allAvailable = $('.product-availability', dialog).toArray()\r\n .every(function (item) { return $(item).data('available'); });\r\n\r\n var allReady = $('.product-availability', dialog).toArray()\r\n .every(function (item) { return $(item).data('ready-to-order'); });\r\n\r\n $('.global-availability', dialog)\r\n .data('ready-to-order', allReady)\r\n .data('available', allAvailable);\r\n\r\n $('.global-availability .availability-msg', dialog).empty()\r\n .html(allReady ? response.message : response.resources.info_selectforstock);\r\n } else {\r\n // single product\r\n $('.global-availability', dialog)\r\n .data('ready-to-order', response.product.readyToOrder)\r\n .data('available', response.product.available)\r\n .find('.availability-msg')\r\n .empty()\r\n .html(response.message);\r\n }\r\n });\r\n }\r\n};\r\n","exports.isMobile = function () {\r\n var mobileAgentHash = ['mobile', 'tablet', 'phone', 'ipad', 'ipod', 'android', 'blackberry', 'windows ce', 'opera mini', 'palm'];\r\n var idx = 0;\r\n var isMobile = false;\r\n var userAgent = navigator.userAgent.toLowerCase();\r\n\r\n while (mobileAgentHash[idx] && !isMobile) {\r\n isMobile = userAgent.indexOf(mobileAgentHash[idx]) >= 0;\r\n idx++;\r\n }\r\n return isMobile;\r\n};\r\n\r\nexports.isSafari = function () {\r\n return navigator.userAgent.match(/Version\\/[\\d\\.]+.*Safari/);\r\n};\r\n\r\nexports.iosVersion = function () {\r\n if (/iP(hone|od|ad)/.test(navigator.platform)) {\r\n var v = (navigator.appVersion).match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\r\n return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];\r\n }\r\n return null;\r\n};\r\n\r\nexports.getCookie = function (cookiename) {\r\n if (document.cookie.length > 0) {\r\n startC = document.cookie.indexOf(cookiename + '=');\r\n if (startC != -1) {\r\n startC += cookiename.length + 1;\r\n endC = document.cookie.indexOf(';', startC);\r\n if (endC == -1) endC = document.cookie.length;\r\n return decodeURI(document.cookie.substring(startC, endC));\r\n }\r\n }\r\n return null;\r\n};\r\n\r\nexports.setCookie = function (cookieName, cookieValue, nDays) {\r\n var today = new Date();\r\n var expire = new Date();\r\n if (nDays == null || nDays == 0) nDays = 1;\r\n expire.setTime(today.getTime() + 3600000 * 24 * nDays);\r\n document.cookie = cookieName + '=' + escape(cookieValue) + '; expires=' + expire.toGMTString() + '; path=/';\r\n};\r\n\r\nexports.isEmpty = function (val) {\r\n // remove whitespaces\r\n if (typeof val === 'string') {\r\n val = $.trim(val);\r\n }\r\n\r\n return !val || val.length === 0;\r\n};\r\n\r\nexports.removeQueryParam = function (url) {\r\n var urlparts = String(url).split('?');\r\n if (urlparts.length >= 2) {\r\n return urlparts[0];\r\n }\r\n return url;\r\n};\r\n\r\nexports.getUrlQueryParameterValue = function (queryParamName, url) {\r\n var urlQueryVariables = url.split('&');\r\n var currentParameter;\r\n\r\n for (var i = 0; i < urlQueryVariables.length; i++) {\r\n currentParameter = urlQueryVariables[i].split('=');\r\n\r\n if (currentParameter[0] === queryParamName) {\r\n if (currentParameter[1] === undefined) {\r\n return true;\r\n }\r\n var decodedString = decodeURIComponent(currentParameter[1]);\r\n if (decodedString.split('|').length > 0) {\r\n return decodedString.split('|').join('+').replace(/\\s/g, '-').toLowerCase();\r\n }\r\n return decodedString.replace(/\\s/g, '-').toLowerCase();\r\n }\r\n }\r\n return false;\r\n};\r\n","/* eslint-env es6*/\r\n/* eslint-disable no-use-before-define */\r\n/* global _etmc */\r\n'use strict';\r\nvar base = require('base/product/base');\r\nvar focusHelper = require('../components/focus');\r\n\r\n/**\r\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\r\n * @param {Object} response - response from Ajax call\r\n * @param {Object} response.product - Product object\r\n * @param {string} response.product.id - Product ID\r\n * @param {jQuery} $productContainer - DOM element for a given product.\r\n * @param {string} attributeType - the attribute clicked (e.g size, color, quantity)\r\n * @param {Object[]} response.product.variationAttributes - Product attributes\r\n * @param {Object[]} response.product.images - Product images\r\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\r\n * attributes have been selected. Used partially to\r\n * determine whether the Add to Cart button can be enabled\r\n */\r\nfunction handleVariantResponse(response, $productContainer, attributeType) {\r\n var isChoiceOfBonusProducts = $productContainer.parents('.choose-bonus-product-dialog').length > 0;\r\n var isVaraint;\r\n var videoObj = null;\r\n\r\n if (response.product.pdpVideoID) {\r\n videoObj = {\r\n pdpVideoID: response.product.pdpVideoID,\r\n pdpVideoLink: response.product.pdpVideoLink\r\n };\r\n }\r\n if (response.product.variationAttributes) {\r\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\r\n isVaraint = response.product.productType === 'variant';\r\n if (isChoiceOfBonusProducts && isVaraint) {\r\n $productContainer.parent('.bonus-product-item').data('pid', response.product.id);\r\n\r\n $productContainer.parent('.bonus-product-item').data('ready-to-order', response.product.readyToOrder);\r\n }\r\n }\r\n\r\n if (attributeType === 'color') {\r\n // Update primary images\r\n var productImages = response.product.images;\r\n var primaryImageUrls = productImages.large;\r\n var hiResPrimaryImageUrls = productImages['hi-res'] !== 'undefined' ? productImages['hi-res'] : primaryImageUrls;\r\n createCarousel(primaryImageUrls, $productContainer, hiResPrimaryImageUrls, videoObj);\r\n createThumbnailCarousel(primaryImageUrls, $productContainer, videoObj);\r\n }\r\n\r\n // Update pricing\r\n if (!isChoiceOfBonusProducts) {\r\n var $priceSelector = $('.prices .price', $productContainer).length ? $('.prices .price', $productContainer) : $('.prices .price');\r\n $priceSelector.replaceWith(response.product.price.html);\r\n }\r\n\r\n // Update promotions\r\n $productContainer\r\n .find('.promotions')\r\n .empty()\r\n .html(response.product.promotionsHtml);\r\n\r\n updateAvailability(response, $productContainer);\r\n\r\n if (isChoiceOfBonusProducts) {\r\n var $selectButton = $productContainer.find('.select-bonus-product');\r\n $selectButton.trigger('bonusproduct:updateSelectButton', {\r\n product: response.product,\r\n $productContainer: $productContainer\r\n });\r\n } else {\r\n // Enable \"Add to Cart\" button if all required attributes have been selected\r\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global')\r\n .trigger('product:updateAddToCart', {\r\n product: response.product,\r\n $productContainer: $productContainer\r\n })\r\n .trigger('product:statusUpdate', response.product);\r\n }\r\n\r\n // Update attributes\r\n $productContainer\r\n .find('.main-attributes')\r\n .empty()\r\n .html(getAttributesHtml(response.product.attributes));\r\n}\r\n\r\n/**\r\n * Retrieve contextual quantity selector\r\n * @param {jquery} $el - DOM container for the relevant quantity\r\n * @return {jquery} - quantity selector DOM container\r\n */\r\nfunction getQuantitySelector($el) {\r\n return $el && $('.set-items').length\r\n ? $($el)\r\n .closest('.product-detail')\r\n .find('.quantity-select')\r\n : $('.quantity-select');\r\n}\r\n\r\n/**\r\n * Retrieve contextual size selector\r\n * @param {jquery} $el - DOM container for the relevant sizes\r\n * @return {jquery} - sizes selector DOM container\r\n */\r\nfunction getSizesSelector($el) {\r\n return $($el)\r\n .closest('.product-detail')\r\n .find('.size-selections');\r\n}\r\n\r\n/**\r\n * Process the attribute values for an attribute that has image swatches\r\n *\r\n * @param {Object} attr - Attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {Object[]} attr.values - Array of attribute value objects\r\n * @param {string} attr.values.value - Attribute coded value\r\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\r\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\r\n * selected. If there is no variant that corresponds to a specific combination of attribute\r\n * values, an attribute may be disabled in the Product Detail Page\r\n * @param {jQuery} $productContainer - DOM container for a given product\r\n * @param {Object} msgs - object containing resource messages\r\n */\r\nfunction processSwatchValues(attr, $productContainer, msgs) {\r\n attr.values.forEach(function(attrValue) {\r\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' + attrValue.value + '\"]');\r\n var $swatchButton = $attrValue.parent();\r\n\r\n if (attrValue.selected) {\r\n $attrValue.addClass('selected');\r\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\r\n } else {\r\n $attrValue.removeClass('selected');\r\n $attrValue.siblings('.selected-assistive-text').empty();\r\n }\r\n\r\n if (attrValue.url) {\r\n $swatchButton.attr('data-url', attrValue.url);\r\n } else {\r\n $swatchButton.removeAttr('data-url');\r\n }\r\n\r\n // Disable if not selectable\r\n $attrValue.removeClass('selectable unselectable');\r\n\r\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\r\n });\r\n}\r\n\r\n/**\r\n * Process attribute values associated with an attribute that does not have image swatches\r\n *\r\n * @param {Object} attr - Attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {Object[]} attr.values - Array of attribute value objects\r\n * @param {string} attr.values.value - Attribute coded value\r\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\r\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\r\n * selected. If there is no variant that corresponds to a specific combination of attribute\r\n * values, an attribute may be disabled in the Product Detail Page\r\n * @param {jQuery} $productContainer - DOM container for a given product\r\n */\r\nfunction processNonSwatchValues(attr, $productContainer) {\r\n var $attr = '[data-attr=\"' + attr.id + '\"]';\r\n\r\n attr.values.forEach(function(attrValue) {\r\n var $attrValue = $productContainer.find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\r\n $attrValue.data('url', attrValue.url).removeAttr('disabled');\r\n\r\n if (!attrValue.selectable && !attrValue.enableBackInStockNotification) {\r\n $attrValue.attr('disabled', true);\r\n }\r\n if (!attrValue.selectable && attrValue.enableBackInStockNotification) {\r\n if ($attrValue.hasClass('size-attribute')) {\r\n $attrValue.addClass('show-backinstock-module');\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Dynamically creates Bootstrap carousel from response containing images\r\n * @param {Object[]} imgs - Array of large product images,along with related information\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n * @param {Array} hiResImags - array of images\r\n * @param {Object} videoObj - object containing product video\r\n */\r\nfunction createCarousel(imgs, $productContainer, hiResImags, videoObj) {\r\n var indexAdjustment = !!videoObj ? 0 : 1;\r\n var carousel = $productContainer.find('.carousel');\r\n $(carousel).carousel('dispose');\r\n var carouselId = $(carousel).attr('id');\r\n $(carousel)\r\n .empty()\r\n .append(\r\n '
      ' +\r\n $(carousel).data('prev') +\r\n '' +\r\n $(carousel).data('next') +\r\n ''\r\n );\r\n for (var i = 0; i < imgs.length; i++) {\r\n var index = i ? i + indexAdjustment : i;\r\n $(\r\n '
      \"'
      '\r\n ).appendTo($(carousel).find('.carousel-inner'));\r\n $('
    1. ').appendTo($(carousel).find('.carousel-indicators'));\r\n if (!i && videoObj) {\r\n $(`
      \r\n \r\n
      \r\n
      \r\n
      `).appendTo($(carousel).find('.carousel-inner'));\r\n $('
    2. ').appendTo($(carousel).find('.carousel-indicators'));\r\n }\r\n }\r\n $($(carousel).find('.carousel-item'))\r\n .first()\r\n .addClass('active');\r\n $($(carousel).find('.carousel-indicators > li'))\r\n .first()\r\n .addClass('active');\r\n if (imgs.length === 1) {\r\n $($(carousel).find('.carousel-indicators, a[class^=\"carousel-control-\"]')).detach();\r\n }\r\n $(carousel).carousel();\r\n $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\r\n}\r\n\r\n/**\r\n * Dynamically creates thumbnail carousel from response containing images\r\n * @param {Object[]} imgs - Array of large product images,along with related information\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n * @param {Object} videoObj - object containing product video\r\n */\r\nfunction createThumbnailCarousel(imgs, $productContainer, videoObj) {\r\n var indexAdjustment = !!videoObj ? 0 : 1;\r\n var thumbnailCarousel = $productContainer.find('.thumbnail-carousel');\r\n\r\n // clear the active styling for the current selected thumbnail\r\n thumbnailCarousel.find('.thumbnail-carousel__item').removeClass('thumbnail-carousel__item--active');\r\n\r\n var template = '';\r\n\r\n $(thumbnailCarousel)\r\n .empty()\r\n .append(template);\r\n\r\n var setActiveThumbnail = function(delayInMS) {\r\n return new Promise(function(resolve) {\r\n setTimeout(resolve, delayInMS);\r\n });\r\n };\r\n\r\n var $thumbnailCarouselItems = document.querySelectorAll('.thumbnail-carousel__item');\r\n\r\n var imagesLoaded = 0;\r\n var observer = new IntersectionObserver(function(entries) {\r\n entries.forEach(function(entry) {\r\n if (entry.isIntersecting) {\r\n imagesLoaded++;\r\n }\r\n });\r\n\r\n if (\r\n imagesLoaded > 2 &&\r\n $(entries[0].target)\r\n .find('img')\r\n .is(':visible')\r\n ) {\r\n setActiveThumbnail(2000).then(function() {\r\n if (!$(entries[0].target).hasClass('thumbnail-carousel__item--active')) {\r\n $(entries[0].target).addClass('thumbnail-carousel__item--active');\r\n }\r\n });\r\n }\r\n }, {});\r\n\r\n $thumbnailCarouselItems.forEach(function(carousel) {\r\n observer.observe(carousel);\r\n });\r\n\r\n if (!!videoObj) {\r\n $.ajax({\r\n type: 'GET',\r\n url: 'https://vimeo.com/api/v2/video/' + videoObj.pdpVideoID + '.json',\r\n dataType: 'json',\r\n success: function (data) {\r\n var thumbnailUrl = data[0].thumbnail_large;\r\n $('.video-thumbnail').attr('src', thumbnailUrl);\r\n $('.pdp-main-video').attr('poster', thumbnailUrl);\r\n }\r\n });\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Routes the handling of attribute processing depending on whether the attribute has image\r\n * swatches or not\r\n *\r\n * @param {Object} attrs - Attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n * @param {Object} msgs - object containing resource messages\r\n */\r\nfunction updateAttrs(attrs, $productContainer, msgs) {\r\n // Currently, the only attribute type that has image swatches is Color.\r\n var attrsWithSwatches = ['color'];\r\n\r\n attrs.forEach(function(attr) {\r\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\r\n processSwatchValues(attr, $productContainer, msgs);\r\n updateSizeUrl(attrs[1], $productContainer);\r\n } else {\r\n processNonSwatchValues(attr, $productContainer);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Routes the handling of size attribute processing depending on whether the attribute has image\r\n * swatches or not\r\n *\r\n * @param {Object} attr - Size attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n * @param {Object} msgs - object containing resource messages\r\n */\r\nfunction updateSizeUrl(attr, $productContainer) {\r\n var sizesHtml = attr.values\r\n .map(function(size) {\r\n var selectable = size.selectable ? 'selectable' : 'unselectable';\r\n var selected = size.selected ? 'selected' : '';\r\n\r\n return (\r\n ''\r\n );\r\n })\r\n .join('');\r\n getSizesSelector($productContainer)\r\n .empty()\r\n .html(sizesHtml);\r\n}\r\n\r\n/**\r\n * Updates the availability status in the Product Detail Page\r\n *\r\n * @param {Object} response - Ajax response object after an\r\n * attribute value has been [de]selected\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n */\r\nfunction updateAvailability(response, $productContainer) {\r\n var availabilityValue = '';\r\n var availabilityMessages = response.product.availability.messages;\r\n var availabiityContainer = $productContainer.find('.product-description .availability');\r\n if (!response.product.available) {\r\n if (availabiityContainer.hasClass('hide-incart')) {\r\n availabiityContainer.removeClass('hide-incart');\r\n }\r\n } else if (!availabiityContainer.hasClass('hide-incart')) {\r\n availabiityContainer.addClass('hide-incart');\r\n }\r\n availabiityContainer.data('available', response.product.available);\r\n if (!response.product.readyToOrder) {\r\n availabilityValue = '
    3. ' + response.resources.info_selectforstock + '
    4. ';\r\n } else if (response.product.availability.classType === 'qty-err') {\r\n availabilityValue = '
    5. Please select a lesser quantity to update
    6. ';\r\n } else {\r\n availabilityMessages.forEach(function(message) {\r\n availabilityValue += '
    7. ' + message + '
    8. ';\r\n });\r\n }\r\n\r\n $($productContainer).trigger('product:updateAvailability', {\r\n product: response.product,\r\n $productContainer: $productContainer,\r\n message: availabilityValue,\r\n resources: response.resources\r\n });\r\n}\r\n\r\n/**\r\n * Generates html for product attributes section\r\n *\r\n * @param {array} attributes - list of attributes\r\n * @return {string} - Compiled HTML\r\n */\r\nfunction getAttributesHtml(attributes) {\r\n if (!attributes) {\r\n return '';\r\n }\r\n\r\n var html = '';\r\n\r\n attributes.forEach(function(attributeGroup) {\r\n if (attributeGroup.ID === 'mainAttributes') {\r\n attributeGroup.attributes.forEach(function(attribute) {\r\n html += '
      ' + attribute.label + ': ' + attribute.value + '
      ';\r\n });\r\n }\r\n });\r\n\r\n return html;\r\n}\r\n\r\n/**\r\n * @typedef UpdatedOptionValue\r\n * @type Object\r\n * @property {string} id - Option value ID for look up\r\n * @property {string} url - Updated option value selection URL\r\n */\r\n\r\n/**\r\n * @typedef OptionSelectionResponse\r\n * @type Object\r\n * @property {string} priceHtml - Updated price HTML code\r\n * @property {Object} options - Updated Options\r\n * @property {string} options.id - Option ID\r\n * @property {UpdatedOptionValue[]} options.values - Option values\r\n */\r\n\r\n/**\r\n * Updates DOM using post-option selection Ajax response\r\n *\r\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\r\n * @param {jQuery} $productContainer - DOM element for current product\r\n */\r\nfunction updateOptions(optionsHtml, $productContainer) {\r\n // Update options\r\n $productContainer\r\n .find('.product-options')\r\n .empty()\r\n .html(optionsHtml);\r\n}\r\n\r\n/**\r\n * @typespec UpdatedQuantity\r\n * @type Object\r\n * @property {boolean} selected - Whether the quantity has been selected\r\n * @property {string} value - The number of products to purchase\r\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\r\n * etc.\r\n */\r\n\r\n/**\r\n * Updates the quantity DOM elements post Ajax call\r\n * @param {UpdatedQuantity[]} quantities -\r\n * @param {jQuery} $productContainer - DOM container for a given product\r\n */\r\nfunction updateQuantities(quantities, $productContainer) {\r\n if (!($productContainer.parent('.bonus-product-item').length > 0)) {\r\n var optionsHtml = quantities\r\n .map(function(quantity) {\r\n var selected = quantity.selected ? ' selected ' : '';\r\n return '';\r\n })\r\n .join('');\r\n getQuantitySelector($productContainer)\r\n .empty()\r\n .html(optionsHtml);\r\n }\r\n}\r\n\r\n/**\r\n * updates the product view when a product attribute is selected or deselected or when\r\n * changing quantity\r\n * @param {string} selectedValueUrl - the Url for the selected variation value\r\n * @param {jQuery} $productContainer - DOM element for current product\r\n * @param {string} attributeType - the attribute clicked (e.g size, color, quantity)\r\n */\r\nfunction attributeSelect(selectedValueUrl, $productContainer, attributeType) {\r\n if (selectedValueUrl) {\r\n $('body').trigger('product:beforeAttributeSelect', { url: selectedValueUrl, container: $productContainer });\r\n\r\n $.ajax({\r\n url: `${selectedValueUrl}&variationType=${attributeType}`,\r\n method: 'GET',\r\n success: function(data) {\r\n if (data.redirect) {\r\n window.location.href = data.redirect;\r\n return;\r\n }\r\n handleVariantResponse(data, $productContainer, attributeType);\r\n updateOptions(data.product.optionsHtml, $productContainer);\r\n updateQuantities(data.product.quantities, $productContainer);\r\n $('body').trigger('product:afterAttributeSelect', { data: data, container: $productContainer, attributeType });\r\n },\r\n complete: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves url to use when adding a product to the cart\r\n *\r\n * @return {string} - The provided URL to use when adding a product to the cart\r\n */\r\nfunction getAddToCartUrl() {\r\n return $('.add-to-cart-url').val();\r\n}\r\n\r\n/**\r\n * Parses the html for a modal window\r\n * @param {string} html - representing the body and footer of the modal window\r\n *\r\n * @return {Object} - Object with properties body and footer.\r\n */\r\nfunction parseHtml(html) {\r\n var $html = $('
      ').append($.parseHTML(html));\r\n\r\n var body = $html.find('.choice-of-bonus-product');\r\n var footer = $html.find('.modal-footer').children();\r\n\r\n return { body: body, footer: footer };\r\n}\r\n\r\n/**\r\n * Retrieves url to use when adding a product to the cart\r\n *\r\n * @param {Object} data - data object used to fill in dynamic portions of the html\r\n */\r\nfunction chooseBonusProducts(data) {\r\n $('.modal-body')\r\n .spinner()\r\n .start();\r\n\r\n if ($('#chooseBonusProductModal').length !== 0) {\r\n $('#chooseBonusProductModal').remove();\r\n }\r\n var bonusUrl;\r\n if (data.bonusChoiceRuleBased) {\r\n bonusUrl = data.showProductsUrlRuleBased;\r\n } else {\r\n bonusUrl = data.showProductsUrlListBased;\r\n }\r\n\r\n var htmlString =\r\n '' +\r\n '
      ' +\r\n '' +\r\n '
      ' +\r\n '' +\r\n '
      ' +\r\n '
      ' +\r\n ' ' +\r\n data.labels.selectprods +\r\n '' +\r\n ' ' +\r\n '
      ' +\r\n '
      ' +\r\n '
      ' +\r\n '
      ' +\r\n '
      ' +\r\n '
      ';\r\n $('body').append(htmlString);\r\n $('.modal-body')\r\n .spinner()\r\n .start();\r\n\r\n $.ajax({\r\n url: bonusUrl,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function(response) {\r\n var parsedHtml = parseHtml(response.renderedTemplate);\r\n $('#chooseBonusProductModal .modal-body').empty();\r\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\r\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\r\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\r\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\r\n $('#chooseBonusProductModal').modal('show');\r\n },\r\n complete: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\r\n * @param {string} response - ajax response from clicking the add to cart button\r\n * @param {jQuery} $addToCartBtn = add to cart button clicked\r\n */\r\nfunction handlePostCartAdd(response, $addToCartBtn) {\r\n $('.minicart').trigger('count:update', response);\r\n\r\n var $messageQtyError = $addToCartBtn.closest('.product-detail').find('.message.qty-err');\r\n var $messageNoStock = $addToCartBtn.closest('.product-detail').find('.message.no-stock');\r\n if ($messageQtyError.length || $messageNoStock.length) {\r\n $addToCartBtn.prop('disabled', true);\r\n return;\r\n }\r\n // show add to cart toast\r\n if (response.newBonusDiscountLineItem && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\r\n chooseBonusProducts(response.newBonusDiscountLineItem);\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\r\n * items with their selected variants\r\n *\r\n * @return {string[]} - List of selected bundle product item ID's\r\n */\r\nfunction getChildProducts() {\r\n var childProducts = [];\r\n $('.bundle-item').each(function() {\r\n childProducts.push({\r\n pid: $(this)\r\n .find('.product-id')\r\n .text(),\r\n quantity: parseInt(\r\n $(this)\r\n .find('label.quantity')\r\n .data('quantity'),\r\n 10\r\n )\r\n });\r\n });\r\n\r\n return childProducts.length ? JSON.stringify(childProducts) : [];\r\n}\r\n\r\n/**\r\n * Retrieve product options\r\n *\r\n * @param {jQuery} $productContainer - DOM element for current product\r\n * @return {string} - Product options and their selected values\r\n */\r\nfunction getOptions($productContainer) {\r\n var options = $productContainer\r\n .find('.product-option')\r\n .map(function() {\r\n var $elOption = $(this).find('.options-select');\r\n var urlValue = $elOption.val();\r\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]').data('value-id');\r\n return {\r\n optionId: $(this).data('option-id'),\r\n selectedValueId: selectedValueId\r\n };\r\n })\r\n .toArray();\r\n\r\n return JSON.stringify(options);\r\n}\r\n\r\nmodule.exports = {\r\n attributeSelect: attributeSelect,\r\n methods: {\r\n editBonusProducts: function(data) {\r\n chooseBonusProducts(data);\r\n }\r\n },\r\n\r\n focusChooseBonusProductModal: function() {\r\n $('body').on('shown.bs.modal', '#chooseBonusProductModal', function() {\r\n $('#chooseBonusProductModal')\r\n .siblings()\r\n .attr('aria-hidden', 'true');\r\n $('#chooseBonusProductModal .close').focus();\r\n });\r\n },\r\n\r\n onClosingChooseBonusProductModal: function() {\r\n $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function() {\r\n $('#chooseBonusProductModal')\r\n .siblings()\r\n .attr('aria-hidden', 'false');\r\n });\r\n },\r\n\r\n trapChooseBonusProductModalFocus: function() {\r\n $('body').on('keydown', '#chooseBonusProductModal', function(e) {\r\n var focusParams = {\r\n event: e,\r\n containerSelector: '#chooseBonusProductModal',\r\n firstElementSelector: '.close',\r\n lastElementSelector: '.add-bonus-products'\r\n };\r\n focusHelper.setTabNextFocus(focusParams);\r\n });\r\n },\r\n\r\n colorAttribute: function() {\r\n $(document).on('click', '[data-attr=\"color\"] button', function(e) {\r\n e.preventDefault();\r\n\r\n if (\r\n $(this).attr('disabled') ||\r\n $(this)\r\n .find('.swatch-value')\r\n .hasClass('selected')\r\n ) {\r\n return;\r\n }\r\n var $productContainer = $(this).closest('.set-item');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.product-detail');\r\n }\r\n\r\n attributeSelect($(this).attr('data-url'), $productContainer, 'color');\r\n });\r\n },\r\n\r\n selectAttribute: function() {\r\n $(document).on('change', 'select[class*=\"select-\"], .options-select', function(e) {\r\n e.preventDefault();\r\n\r\n var $productContainer = $(this).closest('.set-item');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.product-detail');\r\n }\r\n attributeSelect(e.currentTarget.value, $productContainer, 'quantity');\r\n });\r\n },\r\n\r\n availability: function() {\r\n $(document).on('change', '.quantity-select', function(e) {\r\n e.preventDefault();\r\n\r\n var $productContainer = $(this).closest('.product-detail');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this)\r\n .closest('.modal-content')\r\n .find('.product-quickview');\r\n }\r\n\r\n if ($('.bundle-items', $productContainer).length === 0) {\r\n attributeSelect(\r\n $(e.currentTarget)\r\n .find('option:selected')\r\n .data('url'),\r\n $productContainer,\r\n 'quantity'\r\n );\r\n }\r\n });\r\n },\r\n updateProductPromotions: function($el, promotions) {\r\n if ($el.length && promotions.length) {\r\n $el.empty();\r\n\r\n var template = '';\r\n\r\n promotions.forEach(promotion => {\r\n template += `
      ${promotion.calloutMsg}
      `;\r\n });\r\n $el.html(template);\r\n }\r\n },\r\n addToCart: function() {\r\n $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function() {\r\n var addToCartUrl;\r\n var pid;\r\n var pidsObj;\r\n var setPids;\r\n var $thisBtnAdd = $(this);\r\n\r\n $('body').trigger('product:beforeAddToCart', this);\r\n\r\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\r\n var $messageQtyError = $(this)\r\n .closest('.product-detail')\r\n .find('.message.qty-err');\r\n var $messageNoStock = $(this)\r\n .closest('.product-detail')\r\n .find('.message.no-stock');\r\n if ($messageQtyError.length || $messageNoStock.length) {\r\n $.spinner().stop();\r\n $(this).prop('disabled', true);\r\n return;\r\n }\r\n\r\n setPids = [];\r\n\r\n $('.product-detail').each(function() {\r\n if (\r\n !$(this).hasClass('product-set-detail') &&\r\n $(this).find('.size-selections .size-attribute .size-value.selected') &&\r\n $(this).find('.quantity-select').length\r\n ) {\r\n setPids.push({\r\n pid: $(this)\r\n .find('.product-id')\r\n .text(),\r\n qty: $(this)\r\n .find('.quantity-select')\r\n .val(),\r\n options: getOptions($(this))\r\n });\r\n }\r\n });\r\n pidsObj = JSON.stringify(setPids);\r\n }\r\n\r\n pid = base.getPidValue($(this));\r\n\r\n var $productContainer = $(this).closest('.product-detail');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this)\r\n .closest('.quick-view-dialog')\r\n .find('.product-detail');\r\n }\r\n\r\n addToCartUrl = getAddToCartUrl();\r\n\r\n var form = {\r\n pid: pid,\r\n pidsObj: pidsObj,\r\n childProducts: getChildProducts(),\r\n quantity: base.getQuantitySelected($(this))\r\n };\r\n\r\n if (!$('.bundle-item').length) {\r\n form.options = getOptions($productContainer);\r\n }\r\n\r\n $(this).trigger('updateAddToCartFormData', form);\r\n if (addToCartUrl) {\r\n $.ajax({\r\n url: addToCartUrl,\r\n method: 'POST',\r\n data: form,\r\n success: function(data) {\r\n handlePostCartAdd(data, $thisBtnAdd);\r\n data.addedPid = pid;\r\n if (!data.error) {\r\n $('body').trigger('product:afterAddToCart', data);\r\n }\r\n base.miniCartReportingUrl(data.reportingURL);\r\n if (data.sfmcCartInfo && typeof _etmc !== 'undefined') {\r\n _etmc.push(data.sfmcCartInfo);\r\n }\r\n },\r\n complete: function() {\r\n $.spinner().stop();\r\n }\r\n });\r\n }\r\n });\r\n },\r\n selectBonusProduct: base.selectBonusProduct,\r\n removeBonusProduct: base.removeBonusProduct,\r\n enableBonusProductSelection: base.enableBonusProductSelection,\r\n showMoreBonusProducts: base.showMoreBonusProducts,\r\n addBonusProductsToCart: base.addBonusProductsToCart,\r\n getPidValue: base.getPidValue,\r\n getQuantitySelected: base.getQuantitySelected,\r\n miniCartReportingUrl: base.miniCartReportingUrl,\r\n backToTop: function() {\r\n const $el = $('.back-to-top');\r\n\r\n if ($el.length > 0) {\r\n $el.on('click', () => {\r\n $('html, body').animate({ scrollTop: 0 }, 500);\r\n });\r\n }\r\n }\r\n};\r\n","module.exports = function() {\r\n $('.category-marketing-slot').each(function() {\r\n var $categoryMarketingSlot = $(this);\r\n if ($categoryMarketingSlot.children().length === 0) {\r\n $categoryMarketingSlot.addClass('hide');\r\n }\r\n });\r\n};\r\n","'use strict';\r\n\r\nmodule.exports = {\r\n setTabNextFocus: function (focusParams) {\r\n var KEYCODE_TAB = 9;\r\n var isTabPressed = (focusParams.event.key === 'Tab' || focusParams.event.keyCode === KEYCODE_TAB);\r\n\r\n if (!isTabPressed) {\r\n return;\r\n }\r\n\r\n var firstFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.firstElementSelector);\r\n var lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.lastElementSelector);\r\n\r\n if ($(focusParams.containerSelector + ' ' + focusParams.lastElementSelector).is(':disabled')) {\r\n lastFocusableEl = $(focusParams.containerSelector + ' ' + focusParams.nextToLastElementSelector);\r\n if ($('.product-quickview.product-set').length > 0) {\r\n var linkElements = $(focusParams.containerSelector + ' a#fa-link.share-icons');\r\n lastFocusableEl = linkElements[linkElements.length - 1];\r\n }\r\n }\r\n\r\n if (focusParams.event.shiftKey) /* shift + tab */ {\r\n if ($(':focus').is(firstFocusableEl)) {\r\n lastFocusableEl.focus();\r\n focusParams.event.preventDefault();\r\n }\r\n } else /* tab */ {\r\n if ($(':focus').is(lastFocusableEl)) { // eslint-disable-line\r\n firstFocusableEl.focus();\r\n focusParams.event.preventDefault();\r\n }\r\n }\r\n }\r\n};\r\n","'use strict';\r\nvar focusHelper = require('../components/focus');\r\n\r\n/**\r\n * Retrieves the relevant pid value\r\n * @param {jquery} $el - DOM container for a given add to cart button\r\n * @return {string} - value to be used when adding product to cart\r\n */\r\nfunction getPidValue($el) {\r\n var pid;\r\n\r\n if ($('#quickViewModal').hasClass('show') && !$('.product-set').length) {\r\n pid = $($el).closest('.modal-content').find('.product-quickview').data('pid');\r\n } else if ($('.product-set-detail').length || $('.product-set').length) {\r\n pid = $($el).closest('.product-detail').find('.product-id').text();\r\n } else {\r\n // BF might be using element text or data attribute which is also used by add to cart in PDP. Use different attribute for ATC.\r\n var $productDetail = $('.product-detail:not(\".bundle-item\")');\r\n pid = $('.product-detail:not(\".bundle-item\")').data('pid');\r\n if ($productDetail.hasClass('bfx-price-product')) {\r\n var atcPid = $('.product-detail:not(\".bundle-item\")').data('addtocartPid');\r\n if (atcPid) {\r\n pid = atcPid;\r\n }\r\n }\r\n }\r\n\r\n return pid;\r\n}\r\n\r\n/**\r\n * Retrieve contextual quantity selector\r\n * @param {jquery} $el - DOM container for the relevant quantity\r\n * @return {jquery} - quantity selector DOM container\r\n */\r\nfunction getQuantitySelector($el) {\r\n return $el && $('.set-items').length\r\n ? $($el).closest('.product-detail').find('.quantity-select')\r\n : $('.quantity-select');\r\n}\r\n\r\n/**\r\n * Retrieves the value associated with the Quantity pull-down menu\r\n * @param {jquery} $el - DOM container for the relevant quantity\r\n * @return {string} - value found in the quantity input\r\n */\r\nfunction getQuantitySelected($el) {\r\n return getQuantitySelector($el).val();\r\n}\r\n\r\n/**\r\n * Process the attribute values for an attribute that has image swatches\r\n *\r\n * @param {Object} attr - Attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {Object[]} attr.values - Array of attribute value objects\r\n * @param {string} attr.values.value - Attribute coded value\r\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\r\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\r\n * selected. If there is no variant that corresponds to a specific combination of attribute\r\n * values, an attribute may be disabled in the Product Detail Page\r\n * @param {jQuery} $productContainer - DOM container for a given product\r\n * @param {Object} msgs - object containing resource messages\r\n */\r\nfunction processSwatchValues(attr, $productContainer, msgs) {\r\n attr.values.forEach(function (attrValue) {\r\n var $attrValue = $productContainer.find('[data-attr=\"' + attr.id + '\"] [data-attr-value=\"' +\r\n attrValue.value + '\"]');\r\n var $swatchButton = $attrValue.parent();\r\n\r\n if (attrValue.selected) {\r\n $attrValue.addClass('selected');\r\n $attrValue.siblings('.selected-assistive-text').text(msgs.assistiveSelectedText);\r\n } else {\r\n $attrValue.removeClass('selected');\r\n $attrValue.siblings('.selected-assistive-text').empty();\r\n }\r\n\r\n if (attrValue.url) {\r\n $swatchButton.attr('data-url', attrValue.url);\r\n } else {\r\n $swatchButton.removeAttr('data-url');\r\n }\r\n\r\n // Disable if not selectable\r\n $attrValue.removeClass('selectable unselectable');\r\n\r\n $attrValue.addClass(attrValue.selectable ? 'selectable' : 'unselectable');\r\n });\r\n}\r\n\r\n/**\r\n * Process attribute values associated with an attribute that does not have image swatches\r\n *\r\n * @param {Object} attr - Attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {Object[]} attr.values - Array of attribute value objects\r\n * @param {string} attr.values.value - Attribute coded value\r\n * @param {string} attr.values.url - URL to de/select an attribute value of the product\r\n * @param {boolean} attr.values.isSelectable - Flag as to whether an attribute value can be\r\n * selected. If there is no variant that corresponds to a specific combination of attribute\r\n * values, an attribute may be disabled in the Product Detail Page\r\n * @param {jQuery} $productContainer - DOM container for a given product\r\n */\r\nfunction processNonSwatchValues(attr, $productContainer) {\r\n var $attr = '[data-attr=\"' + attr.id + '\"]';\r\n var $defaultOption = $productContainer.find($attr + ' .select-' + attr.id + ' option:first');\r\n $defaultOption.attr('value', attr.resetUrl);\r\n\r\n attr.values.forEach(function (attrValue) {\r\n var $attrValue = $productContainer\r\n .find($attr + ' [data-attr-value=\"' + attrValue.value + '\"]');\r\n $attrValue.attr('value', attrValue.url)\r\n .removeAttr('disabled');\r\n\r\n if (!attrValue.selectable) {\r\n $attrValue.attr('disabled', true);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Routes the handling of attribute processing depending on whether the attribute has image\r\n * swatches or not\r\n *\r\n * @param {Object} attrs - Attribute\r\n * @param {string} attr.id - Attribute ID\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n * @param {Object} msgs - object containing resource messages\r\n */\r\nfunction updateAttrs(attrs, $productContainer, msgs) {\r\n // Currently, the only attribute type that has image swatches is Color.\r\n var attrsWithSwatches = ['color'];\r\n\r\n attrs.forEach(function (attr) {\r\n if (attrsWithSwatches.indexOf(attr.id) > -1) {\r\n processSwatchValues(attr, $productContainer, msgs);\r\n } else {\r\n processNonSwatchValues(attr, $productContainer);\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the availability status in the Product Detail Page\r\n *\r\n * @param {Object} response - Ajax response object after an\r\n * attribute value has been [de]selected\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n */\r\nfunction updateAvailability(response, $productContainer) {\r\n var availabilityValue = '';\r\n var availabilityMessages = response.product.availability.messages;\r\n if (!response.product.readyToOrder) {\r\n availabilityValue = '
    9. ' + response.resources.info_selectforstock + '
    10. ';\r\n } else {\r\n availabilityMessages.forEach(function (message) {\r\n availabilityValue += '
    11. ' + message + '
    12. ';\r\n });\r\n }\r\n\r\n $($productContainer).trigger('product:updateAvailability', {\r\n product: response.product,\r\n $productContainer: $productContainer,\r\n message: availabilityValue,\r\n resources: response.resources\r\n });\r\n}\r\n\r\n/**\r\n * Generates html for product attributes section\r\n *\r\n * @param {array} attributes - list of attributes\r\n * @return {string} - Compiled HTML\r\n */\r\nfunction getAttributesHtml(attributes) {\r\n if (!attributes) {\r\n return '';\r\n }\r\n\r\n var html = '';\r\n\r\n attributes.forEach(function (attributeGroup) {\r\n if (attributeGroup.ID === 'mainAttributes') {\r\n attributeGroup.attributes.forEach(function (attribute) {\r\n html += '
      ' + attribute.label + ': '\r\n + attribute.value + '
      ';\r\n });\r\n }\r\n });\r\n\r\n return html;\r\n}\r\n\r\n/**\r\n * @typedef UpdatedOptionValue\r\n * @type Object\r\n * @property {string} id - Option value ID for look up\r\n * @property {string} url - Updated option value selection URL\r\n */\r\n\r\n/**\r\n * @typedef OptionSelectionResponse\r\n * @type Object\r\n * @property {string} priceHtml - Updated price HTML code\r\n * @property {Object} options - Updated Options\r\n * @property {string} options.id - Option ID\r\n * @property {UpdatedOptionValue[]} options.values - Option values\r\n */\r\n\r\n/**\r\n * Updates DOM using post-option selection Ajax response\r\n *\r\n * @param {OptionSelectionResponse} optionsHtml - Ajax response optionsHtml from selecting a product option\r\n * @param {jQuery} $productContainer - DOM element for current product\r\n */\r\nfunction updateOptions(optionsHtml, $productContainer) {\r\n\t// Update options\r\n $productContainer.find('.product-options').empty().html(optionsHtml);\r\n}\r\n\r\n/**\r\n * Dynamically creates Bootstrap carousel from response containing images\r\n * @param {Object[]} imgs - Array of large product images,along with related information\r\n * @param {jQuery} $productContainer - DOM element for a given product\r\n */\r\nfunction createCarousel(imgs, $productContainer) {\r\n var carousel = $productContainer.find('.carousel');\r\n $(carousel).carousel('dispose');\r\n var carouselId = $(carousel).attr('id');\r\n $(carousel).empty().append('
        ' + $(carousel).data('prev') + '' + $(carousel).data('next') + '');\r\n for (var i = 0; i < imgs.length; i++) {\r\n $('
        \"'
        ').appendTo($(carousel).find('.carousel-inner'));\r\n $('
      1. ').appendTo($(carousel).find('.carousel-indicators'));\r\n }\r\n $($(carousel).find('.carousel-item')).first().addClass('active');\r\n $($(carousel).find('.carousel-indicators > li')).first().addClass('active');\r\n if (imgs.length === 1) {\r\n $($(carousel).find('.carousel-indicators, a[class^=\"carousel-control-\"]')).detach();\r\n }\r\n $(carousel).carousel();\r\n $($(carousel).find('.carousel-indicators')).attr('aria-hidden', true);\r\n}\r\n\r\n/**\r\n * Parses JSON from Ajax call made whenever an attribute value is [de]selected\r\n * @param {Object} response - response from Ajax call\r\n * @param {Object} response.product - Product object\r\n * @param {string} response.product.id - Product ID\r\n * @param {Object[]} response.product.variationAttributes - Product attributes\r\n * @param {Object[]} response.product.images - Product images\r\n * @param {boolean} response.product.hasRequiredAttrsSelected - Flag as to whether all required\r\n * attributes have been selected. Used partially to\r\n * determine whether the Add to Cart button can be enabled\r\n * @param {jQuery} $productContainer - DOM element for a given product.\r\n */\r\nfunction handleVariantResponse(response, $productContainer) {\r\n var isChoiceOfBonusProducts =\r\n $productContainer.parents('.choose-bonus-product-dialog').length > 0;\r\n var isVaraint;\r\n if (response.product.variationAttributes) {\r\n updateAttrs(response.product.variationAttributes, $productContainer, response.resources);\r\n isVaraint = response.product.productType === 'variant';\r\n if (isChoiceOfBonusProducts && isVaraint) {\r\n $productContainer.parent('.bonus-product-item')\r\n .data('pid', response.product.id);\r\n\r\n $productContainer.parent('.bonus-product-item')\r\n .data('ready-to-order', response.product.readyToOrder);\r\n }\r\n }\r\n\r\n // Update primary images\r\n var primaryImageUrls = response.product.images.large;\r\n createCarousel(primaryImageUrls, $productContainer);\r\n\r\n // Update pricing\r\n if (!isChoiceOfBonusProducts) {\r\n var $priceSelector = $('.prices .price', $productContainer).length\r\n ? $('.prices .price', $productContainer)\r\n : $('.prices .price');\r\n $priceSelector.replaceWith(response.product.price.html);\r\n }\r\n\r\n // Update promotions\r\n $productContainer.find('.promotions').empty().html(response.product.promotionsHtml);\r\n\r\n updateAvailability(response, $productContainer);\r\n\r\n if (isChoiceOfBonusProducts) {\r\n var $selectButton = $productContainer.find('.select-bonus-product');\r\n $selectButton.trigger('bonusproduct:updateSelectButton', {\r\n product: response.product, $productContainer: $productContainer\r\n });\r\n } else {\r\n // Enable \"Add to Cart\" button if all required attributes have been selected\r\n $('button.add-to-cart, button.add-to-cart-global, button.update-cart-product-global').trigger('product:updateAddToCart', {\r\n product: response.product, $productContainer: $productContainer\r\n }).trigger('product:statusUpdate', response.product);\r\n }\r\n\r\n // Update attributes\r\n $productContainer.find('.main-attributes').empty()\r\n .html(getAttributesHtml(response.product.attributes));\r\n}\r\n\r\n/**\r\n * @typespec UpdatedQuantity\r\n * @type Object\r\n * @property {boolean} selected - Whether the quantity has been selected\r\n * @property {string} value - The number of products to purchase\r\n * @property {string} url - Compiled URL that specifies variation attributes, product ID, options,\r\n * etc.\r\n */\r\n\r\n/**\r\n * Updates the quantity DOM elements post Ajax call\r\n * @param {UpdatedQuantity[]} quantities -\r\n * @param {jQuery} $productContainer - DOM container for a given product\r\n */\r\nfunction updateQuantities(quantities, $productContainer) {\r\n if (!($productContainer.parent('.bonus-product-item').length > 0)) {\r\n var optionsHtml = quantities.map(function (quantity) {\r\n var selected = quantity.selected ? ' selected ' : '';\r\n return '';\r\n }).join('');\r\n getQuantitySelector($productContainer).empty().html(optionsHtml);\r\n }\r\n}\r\n\r\n/**\r\n * updates the product view when a product attribute is selected or deselected or when\r\n * changing quantity\r\n * @param {string} selectedValueUrl - the Url for the selected variation value\r\n * @param {jQuery} $productContainer - DOM element for current product\r\n */\r\nfunction attributeSelect(selectedValueUrl, $productContainer) {\r\n if (selectedValueUrl) {\r\n $('body').trigger('product:beforeAttributeSelect',\r\n { url: selectedValueUrl, container: $productContainer });\r\n\r\n $.ajax({\r\n url: selectedValueUrl,\r\n method: 'GET',\r\n success: function (data) {\r\n handleVariantResponse(data, $productContainer);\r\n updateOptions(data.product.optionsHtml, $productContainer);\r\n updateQuantities(data.product.quantities, $productContainer);\r\n $('body').trigger('product:afterAttributeSelect',\r\n { data: data, container: $productContainer });\r\n $.spinner().stop();\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves url to use when adding a product to the cart\r\n *\r\n * @return {string} - The provided URL to use when adding a product to the cart\r\n */\r\nfunction getAddToCartUrl() {\r\n return $('.add-to-cart-url').val();\r\n}\r\n\r\n/**\r\n * Parses the html for a modal window\r\n * @param {string} html - representing the body and footer of the modal window\r\n *\r\n * @return {Object} - Object with properties body and footer.\r\n */\r\nfunction parseHtml(html) {\r\n var $html = $('
        ').append($.parseHTML(html));\r\n\r\n var body = $html.find('.choice-of-bonus-product');\r\n var footer = $html.find('.modal-footer').children();\r\n\r\n return { body: body, footer: footer };\r\n}\r\n\r\n/**\r\n * Retrieves url to use when adding a product to the cart\r\n *\r\n * @param {Object} data - data object used to fill in dynamic portions of the html\r\n */\r\nfunction chooseBonusProducts(data) {\r\n $('.modal-body').spinner().start();\r\n\r\n if ($('#chooseBonusProductModal').length !== 0) {\r\n $('#chooseBonusProductModal').remove();\r\n }\r\n var bonusUrl;\r\n if (data.bonusChoiceRuleBased) {\r\n bonusUrl = data.showProductsUrlRuleBased;\r\n } else {\r\n bonusUrl = data.showProductsUrlListBased;\r\n }\r\n\r\n var htmlString = ''\r\n + '
        '\r\n + ''\r\n + '
        '\r\n + ''\r\n + '
        '\r\n + '
        '\r\n + ' ' + data.labels.selectprods + ''\r\n + ' '\r\n + '
        '\r\n + '
        '\r\n + '
        '\r\n + '
        '\r\n + '
        '\r\n + '
        ';\r\n $('body').append(htmlString);\r\n $('.modal-body').spinner().start();\r\n\r\n $.ajax({\r\n url: bonusUrl,\r\n method: 'GET',\r\n dataType: 'json',\r\n success: function (response) {\r\n var parsedHtml = parseHtml(response.renderedTemplate);\r\n $('#chooseBonusProductModal .modal-body').empty();\r\n $('#chooseBonusProductModal .enter-message').text(response.enterDialogMessage);\r\n $('#chooseBonusProductModal .modal-header .close .sr-only').text(response.closeButtonText);\r\n $('#chooseBonusProductModal .modal-body').html(parsedHtml.body);\r\n $('#chooseBonusProductModal .modal-footer').html(parsedHtml.footer);\r\n $('#chooseBonusProductModal').modal('show');\r\n $.spinner().stop();\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Updates the Mini-Cart quantity value after the customer has pressed the \"Add to Cart\" button\r\n * @param {string} response - ajax response from clicking the add to cart button\r\n */\r\nfunction handlePostCartAdd(response) {\r\n $('.minicart').trigger('count:update', response);\r\n var messageType = response.error ? 'alert-danger' : 'alert-success';\r\n // show add to cart toast\r\n if (response.newBonusDiscountLineItem\r\n && Object.keys(response.newBonusDiscountLineItem).length !== 0) {\r\n chooseBonusProducts(response.newBonusDiscountLineItem);\r\n } else {\r\n if ($('.add-to-cart-messages').length === 0) {\r\n $('body').append(\r\n '
        '\r\n );\r\n }\r\n\r\n $('.add-to-cart-messages').append(\r\n '
        '\r\n + ''\r\n + response.message\r\n + '
        '\r\n )\r\n\r\n var $checkIcon = $('.check-icon-reference').clone();\r\n $('.add-to-cart-messages .icon-check').append($checkIcon);\r\n\r\n setTimeout(function () {\r\n $('.add-to-basket-alert').remove();\r\n }, 5000);\r\n }\r\n}\r\n\r\n/**\r\n * Retrieves the bundle product item ID's for the Controller to replace bundle master product\r\n * items with their selected variants\r\n *\r\n * @return {string[]} - List of selected bundle product item ID's\r\n */\r\nfunction getChildProducts() {\r\n var childProducts = [];\r\n $('.bundle-item').each(function () {\r\n childProducts.push({\r\n pid: $(this).find('.product-id').text(),\r\n quantity: parseInt($(this).find('label.quantity').data('quantity'), 10)\r\n });\r\n });\r\n\r\n return childProducts.length ? JSON.stringify(childProducts) : [];\r\n}\r\n\r\n/**\r\n * Retrieve product options\r\n *\r\n * @param {jQuery} $productContainer - DOM element for current product\r\n * @return {string} - Product options and their selected values\r\n */\r\nfunction getOptions($productContainer) {\r\n var options = $productContainer\r\n .find('.product-option')\r\n .map(function () {\r\n var $elOption = $(this).find('.options-select');\r\n var urlValue = $elOption.val();\r\n var selectedValueId = $elOption.find('option[value=\"' + urlValue + '\"]')\r\n .data('value-id');\r\n return {\r\n optionId: $(this).data('option-id'),\r\n selectedValueId: selectedValueId\r\n };\r\n }).toArray();\r\n\r\n return JSON.stringify(options);\r\n}\r\n\r\n/**\r\n * Makes a call to the server to report the event of adding an item to the cart\r\n *\r\n * @param {string | boolean} url - a string representing the end point to hit so that the event can be recorded, or false\r\n */\r\nfunction miniCartReportingUrl(url) {\r\n if (url) {\r\n $.ajax({\r\n url: url,\r\n method: 'GET',\r\n success: function () {\r\n // reporting urls hit on the server\r\n },\r\n error: function () {\r\n // no reporting urls hit on the server\r\n }\r\n });\r\n }\r\n}\r\n\r\nmodule.exports = {\r\n attributeSelect: attributeSelect,\r\n methods: {\r\n editBonusProducts: function (data) {\r\n chooseBonusProducts(data);\r\n }\r\n },\r\n\r\n focusChooseBonusProductModal: function () {\r\n $('body').on('shown.bs.modal', '#chooseBonusProductModal', function () {\r\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'true');\r\n $('#chooseBonusProductModal .close').focus();\r\n });\r\n },\r\n\r\n onClosingChooseBonusProductModal: function () {\r\n $('body').on('hidden.bs.modal', '#chooseBonusProductModal', function () {\r\n $('#chooseBonusProductModal').siblings().attr('aria-hidden', 'false');\r\n });\r\n },\r\n\r\n trapChooseBonusProductModalFocus: function () {\r\n $('body').on('keydown', '#chooseBonusProductModal', function (e) {\r\n var focusParams = {\r\n event: e,\r\n containerSelector: '#chooseBonusProductModal',\r\n firstElementSelector: '.close',\r\n lastElementSelector: '.add-bonus-products'\r\n };\r\n focusHelper.setTabNextFocus(focusParams);\r\n });\r\n },\r\n\r\n colorAttribute: function () {\r\n $(document).on('click', '[data-attr=\"color\"] button', function (e) {\r\n e.preventDefault();\r\n\r\n if ($(this).attr('disabled')) {\r\n return;\r\n }\r\n var $productContainer = $(this).closest('.set-item');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.product-detail');\r\n }\r\n\r\n attributeSelect($(this).attr('data-url'), $productContainer);\r\n });\r\n },\r\n\r\n selectAttribute: function () {\r\n $(document).on('change', 'select[class*=\"select-\"], .options-select', function (e) {\r\n e.preventDefault();\r\n\r\n var $productContainer = $(this).closest('.set-item');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.product-detail');\r\n }\r\n attributeSelect(e.currentTarget.value, $productContainer);\r\n });\r\n },\r\n\r\n availability: function () {\r\n $(document).on('change', '.quantity-select', function (e) {\r\n e.preventDefault();\r\n\r\n var $productContainer = $(this).closest('.product-detail');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.modal-content').find('.product-quickview');\r\n }\r\n\r\n if ($('.bundle-items', $productContainer).length === 0) {\r\n attributeSelect($(e.currentTarget).find('option:selected').data('url'),\r\n $productContainer);\r\n }\r\n });\r\n },\r\n\r\n addToCart: function () {\r\n $(document).on('click', 'button.add-to-cart, button.add-to-cart-global', function () {\r\n var addToCartUrl;\r\n var pid;\r\n var pidsObj;\r\n var setPids;\r\n\r\n $('body').trigger('product:beforeAddToCart', this);\r\n\r\n if ($('.set-items').length && $(this).hasClass('add-to-cart-global')) {\r\n setPids = [];\r\n\r\n $('.product-detail').each(function () {\r\n if (!$(this).hasClass('product-set-detail') && $(this).find('size-selections .size-attribute .size-value.selected') && $(this).find('.quantity-select').length) {\r\n setPids.push({\r\n pid: $(this).find('.product-id').text(),\r\n qty: $(this).find('.quantity-select').val(),\r\n options: getOptions($(this))\r\n });\r\n }\r\n });\r\n pidsObj = JSON.stringify(setPids);\r\n }\r\n\r\n pid = getPidValue($(this));\r\n\r\n var $productContainer = $(this).closest('.product-detail');\r\n if (!$productContainer.length) {\r\n $productContainer = $(this).closest('.quick-view-dialog').find('.product-detail');\r\n }\r\n\r\n addToCartUrl = getAddToCartUrl();\r\n\r\n var form = {\r\n pid: pid,\r\n pidsObj: pidsObj,\r\n childProducts: getChildProducts(),\r\n quantity: getQuantitySelected($(this))\r\n };\r\n\r\n if (!$('.bundle-item').length) {\r\n form.options = getOptions($productContainer);\r\n }\r\n\r\n $(this).trigger('updateAddToCartFormData', form);\r\n if (addToCartUrl) {\r\n $.ajax({\r\n url: addToCartUrl,\r\n method: 'POST',\r\n data: form,\r\n success: function (data) {\r\n handlePostCartAdd(data);\r\n $('body').trigger('product:afterAddToCart', data);\r\n $.spinner().stop();\r\n miniCartReportingUrl(data.reportingURL);\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n }\r\n });\r\n },\r\n selectBonusProduct: function () {\r\n $(document).on('click', '.select-bonus-product', function () {\r\n var $choiceOfBonusProduct = $(this).parents('.choice-of-bonus-product');\r\n var pid = $(this).data('pid');\r\n var maxPids = $('.choose-bonus-product-dialog').data('total-qty');\r\n var submittedQty = parseInt($choiceOfBonusProduct.find('.bonus-quantity-select').val(), 10);\r\n var totalQty = 0;\r\n $.each($('#chooseBonusProductModal .selected-bonus-products .selected-pid'), function () {\r\n totalQty += $(this).data('qty');\r\n });\r\n totalQty += submittedQty;\r\n var optionID = $choiceOfBonusProduct.find('.product-option').data('option-id');\r\n var valueId = $choiceOfBonusProduct.find('.options-select option:selected').data('valueId');\r\n if (totalQty <= maxPids) {\r\n var selectedBonusProductHtml = ''\r\n + '
        '\r\n + '
        '\r\n + $choiceOfBonusProduct.find('.product-name').html()\r\n + '
        '\r\n + '
        '\r\n + '
        '\r\n ;\r\n $('#chooseBonusProductModal .selected-bonus-products').append(selectedBonusProductHtml);\r\n $('.pre-cart-products').html(totalQty);\r\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\r\n } else {\r\n $('.selected-bonus-products .bonus-summary').addClass('alert-danger');\r\n }\r\n });\r\n },\r\n removeBonusProduct: function () {\r\n $(document).on('click', '.selected-pid', function () {\r\n $(this).remove();\r\n var $selected = $('#chooseBonusProductModal .selected-bonus-products .selected-pid');\r\n var count = 0;\r\n if ($selected.length) {\r\n $selected.each(function () {\r\n count += parseInt($(this).data('qty'), 10);\r\n });\r\n }\r\n\r\n $('.pre-cart-products').html(count);\r\n $('.selected-bonus-products .bonus-summary').removeClass('alert-danger');\r\n });\r\n },\r\n enableBonusProductSelection: function () {\r\n $('body').on('bonusproduct:updateSelectButton', function (e, response) {\r\n $('button.select-bonus-product', response.$productContainer).attr('disabled',\r\n (!response.product.readyToOrder || !response.product.available));\r\n var pid = response.product.id;\r\n $('button.select-bonus-product', response.$productContainer).data('pid', pid);\r\n });\r\n },\r\n showMoreBonusProducts: function () {\r\n $(document).on('click', '.show-more-bonus-products', function () {\r\n var url = $(this).data('url');\r\n $('.modal-content').spinner().start();\r\n $.ajax({\r\n url: url,\r\n method: 'GET',\r\n success: function (html) {\r\n var parsedHtml = parseHtml(html);\r\n $('.modal-body').append(parsedHtml.body);\r\n $('.show-more-bonus-products:first').remove();\r\n $('.modal-content').spinner().stop();\r\n },\r\n error: function () {\r\n $('.modal-content').spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n addBonusProductsToCart: function () {\r\n $(document).on('click', '.add-bonus-products', function () {\r\n var $readyToOrderBonusProducts = $('.choose-bonus-product-dialog .selected-pid');\r\n var queryString = '?pids=';\r\n var url = $('.choose-bonus-product-dialog').data('addtocarturl');\r\n var pidsObject = {\r\n bonusProducts: []\r\n };\r\n\r\n $.each($readyToOrderBonusProducts, function () {\r\n var qtyOption =\r\n parseInt($(this)\r\n .data('qty'), 10);\r\n\r\n var option = null;\r\n if (qtyOption > 0) {\r\n if ($(this).data('optionid') && $(this).data('option-selected-value')) {\r\n option = {};\r\n option.optionId = $(this).data('optionid');\r\n option.productId = $(this).data('pid');\r\n option.selectedValueId = $(this).data('option-selected-value');\r\n }\r\n pidsObject.bonusProducts.push({\r\n pid: $(this).data('pid'),\r\n qty: qtyOption,\r\n options: [option]\r\n });\r\n pidsObject.totalQty = parseInt($('.pre-cart-products').html(), 10);\r\n }\r\n });\r\n queryString += JSON.stringify(pidsObject);\r\n queryString = queryString + '&uuid=' + $('.choose-bonus-product-dialog').data('uuid');\r\n queryString = queryString + '&pliuuid=' + $('.choose-bonus-product-dialog').data('pliuuid');\r\n $.spinner().start();\r\n $.ajax({\r\n url: url + queryString,\r\n method: 'POST',\r\n success: function (data) {\r\n $.spinner().stop();\r\n if (data.error) {\r\n $('#chooseBonusProductModal').modal('hide');\r\n if ($('.add-to-cart-messages').length === 0) {\r\n $('body').append('
        ');\r\n }\r\n $('.add-to-cart-messages').append(\r\n '
        '\r\n + data.errorMessage + '
        '\r\n );\r\n setTimeout(function () {\r\n $('.add-to-basket-alert').remove();\r\n }, 3000);\r\n } else {\r\n $('.configure-bonus-product-attributes').html(data);\r\n $('.bonus-products-step2').removeClass('hidden-xl-down');\r\n $('#chooseBonusProductModal').modal('hide');\r\n\r\n if ($('.add-to-cart-messages').length === 0) {\r\n $('body').append('
        ');\r\n }\r\n $('.minicart-quantity').html(data.totalQty);\r\n $('.add-to-cart-messages').append(\r\n '
        '\r\n + data.msgSuccess + '
        '\r\n );\r\n\r\n var $checkIcon = $('.check-icon-reference').clone();\r\n $('.add-to-cart-messages .icon-check').append($checkIcon);\r\n\r\n setTimeout(function () {\r\n $('.add-to-basket-alert').remove();\r\n if ($('.cart-page').length) {\r\n location.reload();\r\n }\r\n }, 1500);\r\n }\r\n },\r\n error: function () {\r\n $.spinner().stop();\r\n }\r\n });\r\n });\r\n },\r\n\r\n getPidValue: getPidValue,\r\n getQuantitySelected: getQuantitySelected,\r\n miniCartReportingUrl: miniCartReportingUrl\r\n};\r\n","/**\r\n * DOM utilities to use native browser capabilities and avoid dependencies.\r\n *\r\n * @module dom.dom-util\r\n * @version 1.0.0\r\n * @since Sept 26 2019\r\n */\r\n\r\n'use strict';\r\n\r\n/**\r\n * Native querySelector to find first element in the dom with given selector\r\n *\r\n * @param {string | Object} selector Target selector element.\r\n * @param {string | Object} parent Parent element, if it not provided\r\n * fallback to document.\r\n * @return {Object} returns the target as a DOM node\r\n */\r\nconst queryFirst = (exports.queryFirst = (selector, parent = document) => {\r\n if (!parent) return null;\r\n return parent.querySelector(selector);\r\n});\r\n\r\n/**\r\n * Native querySelectorAll to find all the dom element with given selector.\r\n *\r\n * @param {string | Object} selector Target selector element.\r\n * @param {string | Object} parent Parent element, if it not provided\r\n * fallback to document.\r\n * @return {nodeList | Array} Returns the target as a DOM node.\r\n */\r\nconst queryAll = (exports.queryAll = (selector, parent = document) => {\r\n if (!parent) return null;\r\n return [].slice.call(parent.querySelectorAll(selector), 0);\r\n});\r\n\r\n/**\r\n * Returns the value(s) for the specified CSS rule(s), or all computed styles if no rule is specified\r\n *\r\n * @param {Element} element Target element\r\n * @param {string} rule CSS rule name (E.g. padding-top)\r\n * @return {string | Array | Object} Returns a string value, array of values, or styles object\r\n */\r\nconst getStyles = (exports.getStyles = (element, ...rules) => {\r\n const styles = getComputedStyle(element);\r\n\r\n if (!rules.length) {\r\n return styles;\r\n } else if (rules.length === 1) {\r\n return styles[rules[0]];\r\n }\r\n return rules.map(rule => styles[rule]);\r\n});\r\n\r\n/**\r\n * Remove DOM element\r\n *\r\n * @param {string | Object} el Target element.\r\n */\r\nexports.remove = el => {\r\n if (!el) return;\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n for (let i = 0, n = el.length; i < n; i++) {\r\n const node = el[i];\r\n node.parentElement.removeChild(node);\r\n }\r\n } else {\r\n el.parentElement.removeChild(el);\r\n }\r\n};\r\n\r\n/**\r\n * Set attribute to single or multiple elements\r\n *\r\n * @param {string | Object} el Target element.\r\n * @param {string} attr attribute that need to be added.\r\n * @param {string | boolean} val value that need to be set for an attribute.\r\n */\r\nexports.setAttribute = (el, attr, val) => {\r\n if (!el) return;\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n for (let i = 0, n = el.length; i < n; i++) {\r\n const node = el[i];\r\n node.setAttribute(attr, val);\r\n }\r\n } else {\r\n el.setAttribute(attr, val);\r\n }\r\n};\r\n\r\n/**\r\n * Remove attribute to single or multiple elements\r\n *\r\n * @param {string | Object} el Target element.\r\n * @param {string} attr attribute that need to be removed.\r\n */\r\nexports.removeAttribute = (el, attr) => {\r\n if (!el) return;\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n for (let i = 0, n = el.length; i < n; i++) {\r\n const node = el[i];\r\n node.removeAttribute(attr);\r\n }\r\n } else {\r\n el.removeAttribute(attr);\r\n }\r\n};\r\n\r\n/**\r\n * Adds class or classes to the classList of particular element.\r\n *\r\n * @param {string | Object} el Target element.\r\n * @param {string | Array} val class name or class names as list of arguments.\r\n */\r\nexports.addClass = (el, ...val) => {\r\n if (!el) return;\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n for (let i = 0, n = el.length; i < n; i++) {\r\n const node = el[i];\r\n node.classList.add(...val);\r\n }\r\n } else {\r\n el.classList.add(...val);\r\n }\r\n};\r\n\r\n/**\r\n * Removes class or classes from the classList of particular element.\r\n *\r\n * @param {string | Object} el Target element.\r\n * @param {string | Array} val class name or class names as list of arguments.\r\n */\r\nexports.removeClass = (el, ...val) => {\r\n if (!el) return;\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n for (let i = 0, n = el.length; i < n; i++) {\r\n const node = el[i];\r\n node.classList.remove(...val);\r\n }\r\n } else {\r\n el.classList.remove(...val);\r\n }\r\n};\r\n\r\n/**\r\n * Toggles class or classes to the classList of particular element.\r\n *\r\n * @param {string | Object} el Target element.\r\n * @param {string | Array} val class name or class names as list of arguments.\r\n */\r\nexports.toggleClass = (el, ...val) => {\r\n if (!el) return;\r\n if (Array.isArray(el) || el instanceof NodeList) {\r\n for (let i = 0, n = el.length; i < n; i++) {\r\n const node = el[i];\r\n node.classList.toggle(...val);\r\n }\r\n } else {\r\n el.classList.toggle(...val);\r\n }\r\n};\r\n\r\n/**\r\n * Looks for availability of class or classes in the classList of particular element.\r\n *\r\n * @param {string | Object} el Target element.\r\n * @param {string | Array} val class name or class names as list of arguments.\r\n * @return {boolean} Returns availability of class in the target element.\r\n */\r\nexports.hasClass = (el, ...classes) => {\r\n const { classList } = el;\r\n for (let c = 0, n = classes.length; c < n; c++) {\r\n if (!classList.contains(classes[c])) return false;\r\n }\r\n return true;\r\n};\r\n\r\n/**\r\n * Throttle util to prevent repeatative callbacks\r\n *\r\n * @param {function} callback Callback function.\r\n * @param {number} limit Timeout upon which throttle callback need to be called.\r\n * fallback to document.\r\n * @return {function} Throttle closure function.\r\n */\r\nexports.throttle = (callback, limit = 250) => {\r\n let isThrottling = false;\r\n\r\n return (...args) => {\r\n if (isThrottling) return;\r\n\r\n callback.apply(this, args);\r\n isThrottling = true;\r\n\r\n setTimeout(() => {\r\n isThrottling = false;\r\n }, limit);\r\n };\r\n};\r\n\r\n/**\r\n * Throttle util to prevent repeatative callbacks\r\n *\r\n * @param {function} callback Callback function.\r\n * @param {number} minimumDelay Delay upon which debounce callback need to be called.\r\n * fallback to document.\r\n * @return {function} Debounce closure function.\r\n */\r\nexports.debounce = (callback, minimumDelay = 250) => {\r\n let timer;\r\n\r\n return (...args) => {\r\n clearTimeout(timer);\r\n\r\n timer = setTimeout(() => {\r\n callback(...args);\r\n }, minimumDelay);\r\n };\r\n};\r\n\r\nexports.toArray = (...args) => {\r\n const makeArray = target => {\r\n let newTarget;\r\n if (!Array.isArray(target)) {\r\n const array = [].slice.call(target);\r\n newTarget = array.length ? array : [target];\r\n }\r\n return newTarget;\r\n };\r\n return args.reduce((results, arg) => {\r\n return results.concat(makeArray(arg));\r\n }, []);\r\n};\r\n\r\n/**\r\n * Height util to get outer height of element including margins\r\n *\r\n * @param {string | Object} el target element\r\n * @return {string} height of element\r\n */\r\nexports.outerHeight = el => {\r\n const styles = getStyles(el);\r\n\r\n return el.offsetHeight + parseInt(styles.marginTop, 0) + parseInt(styles.marginBottom, 0);\r\n};\r\n\r\n/**\r\n * Determine if an element is in the viewport\r\n * (c) 2017 Chris Ferdinandi, MIT License, https://gomakethings.com\r\n * @param {Node} el The element\r\n * @return {boolean} Returns true if element is in the viewport\r\n */\r\nexports.isInViewport = el => {\r\n const scroll = window.scrollY || window.pageYOffset;\r\n const boundsTop = el.getBoundingClientRect().top + scroll;\r\n\r\n const numberOfViewportToCheck = el.dataset.nextViewportLazyLoad ? 2 : 1;\r\n\r\n const viewport = {\r\n top: scroll,\r\n bottom: scroll + window.innerHeight * numberOfViewportToCheck\r\n };\r\n\r\n const bounds = {\r\n top: boundsTop,\r\n bottom: boundsTop + el.clientHeight\r\n };\r\n\r\n return (bounds.bottom >= viewport.top && bounds.bottom <= viewport.bottom) || (bounds.top <= viewport.bottom && bounds.top >= viewport.top);\r\n};\r\n\r\n/**\r\n * Displays empty cart message\r\n * @param {string} message - Error message to display\r\n */\r\nexports.emptyCart = message => {\r\n const cartElements = queryAll('.cart');\r\n cartElements.forEach(cartElement => {\r\n cartElement.innerHTML = `

        ${message}

        `;\r\n });\r\n};\r\n\r\n/**\r\n * Animates scrolling the page to the specified Y coordinate\r\n * @param {number} y - The Y coordinate to scroll to\r\n * @param {number} duration - The duration of the animation in milliseconds\r\n * @param {function} callback - The callback to run when the animation is complete\r\n * @returns {JQuery}\r\n */\r\nexports.scrollTo = (y, duration = 600, callback = function() {}) => $('html, body').scrollTo(y, duration, callback);\r\n\r\n/**\r\n * Finds the last element sibling on the same line as the specified element\r\n * @param {Element} element - The element to reference when looking for siblings\r\n * @returns {Element} - returns last element in the row\r\n */\r\nexports.getLastElementInRow = element => {\r\n if (!element.nextElementSibling) return element;\r\n\r\n const bottom = element.offsetTop + element.scrollHeight;\r\n let sibling;\r\n\r\n while ((sibling = element.nextElementSibling)) {\r\n if (sibling.offsetTop >= bottom) return sibling.previousElementSibling;\r\n element = sibling;\r\n }\r\n\r\n return element;\r\n};\r\n\r\n/**\r\n * Update url with query parameter to handle remember placement\r\n *\r\n * @param {string} response - Ajax response HTML code\r\n * @return {undefined}\r\n */\r\nexports.updateUrlQueryParam = response => {\r\n const $queryParamsElement = $('
        ')\r\n .append($(response))\r\n .find('.append-params');\r\n if ($queryParamsElement.length) {\r\n const newUrl = window.location.href.split('?')[0] + '?' + $queryParamsElement.val();\r\n window.history.pushState(\r\n {\r\n path: newUrl\r\n },\r\n '',\r\n newUrl\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * This method returns character count\r\n * @param {HTMLElement} element - current element for which count has to be calculated\r\n * @return {number} character count\r\n */\r\nexports.getCharacterCount = function(element) {\r\n if (!element) {\r\n return 0;\r\n }\r\n return element.value.length;\r\n};\r\n\r\n/**\r\n * Waits for a specified element to exist.\r\n * @param {string} selector - The selector to match\r\n * @param {element} scope - The containing element to search within (default: document)\r\n * @param {number} timeout - How long (in milliseconds) to wait before rejecting the promise\r\n * @returns a Promise containing all matched elements\r\n */\r\nexports.waitForElement = (selector, scope = document, timeout = 0) =>\r\n new Promise((resolve, reject) => {\r\n const elements = queryAll(selector);\r\n\r\n if (elements.length) return resolve(elements);\r\n\r\n const observer = new MutationObserver((mutations, self) => {\r\n const elements = queryAll(selector);\r\n\r\n if (elements.length) {\r\n self.disconnect();\r\n resolve(elements);\r\n }\r\n });\r\n\r\n observer.observe(scope, { childList: true, subtree: true });\r\n\r\n if (timeout) {\r\n setTimeout(() => {\r\n observer.disconnect();\r\n reject('Timed out');\r\n }, timeout);\r\n }\r\n });\r\n\r\nexports.getStyles = getStyles;\r\nexports.queryAll = queryAll;\r\n\r\n/**\r\n * appends params to a url\r\n * @param {string} url - Original url\r\n * @param {Object} params - Parameters to append\r\n * @returns {string} result url with appended parameters\r\n */\r\nexports.appendToUrl = (url, params) => {\r\n var newUrl = url;\r\n newUrl +=\r\n (newUrl.indexOf('?') !== -1 ? '&' : '?') +\r\n Object.keys(params)\r\n .map(function(key) {\r\n return key + '=' + encodeURIComponent(params[key]);\r\n })\r\n .join('&');\r\n\r\n return newUrl;\r\n}\r\n","'use strict';\r\n\r\n/**\r\n * Remove all validation. Should be called every time before revalidating form\r\n * @param {element} form - Form to be cleared\r\n * @returns {void}\r\n */\r\nfunction clearFormErrors(form) {\r\n $(form)\r\n .find('.form-control.is-invalid')\r\n .removeClass('is-invalid');\r\n $(form)\r\n .find('.form-control.is-invalid')\r\n .removeAttr('aria-invalid');\r\n}\r\n\r\nmodule.exports = function(formElement, payload) {\r\n // clear form validation first\r\n clearFormErrors(formElement);\r\n $('.alert', formElement).remove();\r\n if (typeof payload === 'object' && payload.fields) {\r\n Object.keys(payload.fields).forEach(function(key) {\r\n if (payload.fields[key]) {\r\n var feedbackElement = $(formElement)\r\n .find('[name=\"' + key + '\"]')\r\n .parent()\r\n .children('.invalid-feedback');\r\n\r\n if (feedbackElement.length > 0) {\r\n if (Array.isArray(payload[key])) {\r\n feedbackElement.html(payload.fields[key].join('
        '));\r\n } else {\r\n feedbackElement.html(payload.fields[key]);\r\n }\r\n feedbackElement.siblings('.form-control').addClass('is-invalid');\r\n feedbackElement.siblings('.form-control').attr('aria-invalid', 'true');\r\n formElement.find('.is-invalid')[0].focus();\r\n }\r\n }\r\n });\r\n }\r\n if (payload && payload.error) {\r\n var form = $(formElement).prop('tagName') === 'FORM' ? $(formElement) : $(formElement).parents('form');\r\n\r\n form.find('button').before('
        ' + payload.error.join('
        ') + '
        ');\r\n }\r\n};\r\n"],"sourceRoot":""}