{"version":3,"sources":["webpack:///./Avensia.Common/Features/Shared/SharedComponents/molecules/ImageVideoBackground.tsx","webpack:///./Avensia.Common/Features/Shared/Page/PageContent.tsx","webpack:///./Avensia.Common/Features/Shared/Video/VideoSource.tsx","webpack:///./Avensia.Common/Features/Shared/Video/VideoPlayer.tsx","webpack:///./Avensia.Common/Features/Shared/SharedComponents/atoms/Breadcrumbs.tsx","webpack:///./Avensia.Common/Features/Shared/Icons/Play.tsx","webpack:///./Avensia.Common/Features/Shared/Icons/Sound.tsx","webpack:///./Avensia.Common/Features/Shared/SharedComponents/atoms/Slider.tsx","webpack:///./Avensia.Common/Features/Shared/Video/SoundControls.tsx","webpack:///./Avensia.Common/Features/Shared/Video/TimeControls.tsx","webpack:///./Avensia.Common/Features/Shared/Icons/Pause.tsx","webpack:///./Avensia.Common/Features/Shared/Video/PlayControls.tsx","webpack:///./Avensia.Common/Features/Shared/Icons/Maximize.tsx","webpack:///./Avensia.Common/Features/Shared/Icons/Minimize.tsx","webpack:///./Avensia.Common/Features/Shared/Video/MaximizeControls.tsx","webpack:///./Avensia.Common/Features/Shared/Video/Video.tsx","webpack:///./Avensia.Common/Features/Shared/Icons/glyphs/Play_12x12.svg","webpack:///./Avensia.Common/Features/Shared/Icons/glyphs/Play_24x24.svg","webpack:///./Avensia.Common/Features/Shared/Icons/glyphs/Sound_34x24.svg","webpack:///./Avensia.Common/Features/Shared/Icons/glyphs/SoundMuted_34x24.svg","webpack:///./Avensia.Common/Features/Shared/Icons/glyphs/Pause_24x24.svg","webpack:///./Avensia.Common/Features/Shared/Icons/glyphs/Maximize_24x24.svg","webpack:///./Avensia.Common/Features/Shared/Icons/glyphs/Minimize_24x24.svg","webpack:///./Avensia.Common/Features/Product/ProductTags/index.tsx","webpack:///./Avensia.Common/Features/Product/ProductFeature/index.tsx","webpack:///./Avensia.Common/Features/Product/ImageGallery/DesktopImageGallery.tsx","webpack:///./Avensia.Common/Features/Product/ImageGallery/MobileImageGallery.tsx","webpack:///./Avensia.Common/Features/Product/ProductFeatureList/index.tsx","webpack:///./Avensia.Common/Features/Shared/SharedComponents/atoms/InputField.tsx","webpack:///./Avensia.Common/Features/Shared/distance-calculations.ts","webpack:///./Avensia.Common/Features/Shared/Icons/glyphs/Store_12x12.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/Dripdry.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/Dryclpetr.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/Dryflat.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/Handwash.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/IronH.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/IronL.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/IronM.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/Linedry.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/Nobleach.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/Nodrycl.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/NoIron.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/Notumble.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/Nowash.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/TumbleH.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/TumbleL.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/TumbleM.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Glyphs/washcare/Temp-Wash.svg","webpack:///./Avensia.Common/Features/Shared/Icons/Store.tsx","webpack:///./Avensia.Common/Features/Shared/SharedComponents/molecules/FillableCircles.tsx","webpack:///./Avensia.Common/Features/Product/Reviews.tsx","webpack:///./Avensia.Common/Features/Product/ProductActivities/index.tsx","webpack:///./Avensia.Common/Features/Product/ExtendedData/index.tsx","webpack:///./Avensia.Common/Features/Product/PreviousPurchase/index.tsx","webpack:///./Avensia.Common/Features/Product/ProductAccordion/ReviewCard.tsx","webpack:///./Avensia.Common/Features/Product/ProductAccordion/ReviewsContent.tsx","webpack:///./Avensia.Common/Features/Shared/Icons/WashCareIcons.tsx","webpack:///./Avensia.Common/Features/Product/WashAndCare/index.tsx","webpack:///./Avensia.Common/Features/Product/ProductAccordion/MaterialsContent.tsx","webpack:///./Avensia.Common/Features/Product/ProductAccordion/SustainabilityContent.tsx","webpack:///./Avensia.Common/Features/Product/ProductAccordion/index.tsx","webpack:///./Avensia.Common/Features/Product/StoreAvailabilityModal/OpeningHours.tsx","webpack:///./Avensia.Common/Features/Product/StoreAvailabilityModal/StoreInformation.tsx","webpack:///./Avensia.Common/Features/Product/StoreAvailabilityModal/StoreAvailabilityCard.tsx","webpack:///./Avensia.Common/Features/Product/StoreAvailabilityModal/SearchStores.tsx","webpack:///./Avensia.Common/Features/Product/StoreAvailabilityModal/index.tsx","webpack:///./Avensia.Common/Features/Product/SizeGuideModal/index.tsx","webpack:///./Avensia.Common/Features/Product/Variation/index.tsx"],"names":["AspectImageVideoBackground","props","children","image","paddingTop","videoSources","borderRadius","breakPoint","className","preset","isMobile","gotVideo","length","css","background","url","size","position","autoPlay","loop","muted","playsInline","coverContent","sources","ViewportSizeVideoBackground","fixedVideo","height","compose","hasVideo","Div","width","clipPath","overflow","AutoSizeVideoBackground","TopLabel","margin","top","bottom","ReadMoreWrap","div","display","marginTop","ReadMore","span","color","monochrome","a11ygrey","cursor","textTransform","fontSize","fontWeight","TopContentHeading","wordBreak","BreadcrumbWrapper","isCompact","breadcrumbs","isProductPage","rowGap","marginLeft","marginRight","vertical","TopContentWideWrapper","padding","TopContentWide","TopContent","TopContentButton","TopContentIntro","p","xy","TopContentWrap","TopContentChildren","label","heading","headingSize","modalButtonText","modalButtonClick","modalButtonIconAfter","intro","handleReadMore","readMoreLabel","Small","x","text","onClick","iconAfter","theme","WhiteToBlack","render","this","type","videoType","src","Component","videoRef","playerRef","current","hlsSource","find","device","isSupported","hls","loadSource","attachMedia","on","Events","MANIFEST_PARSED","play","canPlayType","volume","ref","onEnded","style","zIndex","left","objectFit","objectPosition","filter","map","source","i","key","BaseWrap","textDecoration","flexDirection","VerticalWrap","transform","justifyContent","writingMode","alignItems","HorizontalWrap","flexWrap","overflowX","overflowY","scrollbarWidth","ListWrap","ListItem","gap","BreadCrumbLink","whiteSpace","white","opaqueColor","black","halfTransparentColor","rgbaFilters","white50","black50","containerRef","scrollLeft","offsetWidth","Wrapper","itemType","itemScope","crumb","index","array","itemProp","to","title","content","String","window","location","protocol","host","Play12x12","Play24x24","Sound34x24","SoundMuted34x24","SliderInput","input","appearance","backgroundColor","y","min","max","value","updateValue","onChange","e","parseFloat","target","Wrap","Sound","Muted","mediaRef","setMuted","setVolume","selectedValue","selectedVolume","newVolume","Math","adjustVolume","currentTime","setCurrentTime","duration","setDuration","interval","setInterval","readyState","clearInterval","selectedTime","newTime","skipToTime","Pause24x24","Play","Pause","isPlaying","pause","Maximize24x24","Minimize24x24","isMaximized","updateIsMaximized","document","onfullscreenchange","fullscreenElement","exitFullscreen","parentElement","requestFullscreen","alignSelf","VideoStopped","VideoStartedWrap","paddingBottom","VideoStartedWrapDesktop","TimeControlWrapMobile","ButtonsWrapDesktop","ButtonsWrapMobile","PlusIcon","Plus","OuterBase","OuterMobile","OuterDesktop","Inner","previewImage","previewImagePreset","previewVideoSources","videoStarted","stopVideo","buttonsInControls","setIsPlaying","setIsMaximized","VideoStartedWrapElement","Outer","VideoPlayer","id","event","currentTarget","buttonInControls","Video","TransparentWhite","React","createElement","defaultProps","module","exports","default","InlineWrap","extraLightGrey","flexBasis","flexGrow","ReadMoreLabel","BgTag","upperCase","tags","nrToDisplay","slice","marginBottom","tag","D14_M14","readMoreClick","Overlay","Image","img","ContentWrap","Heading","fontStyle","lineHeight","FeatureImage","ProductFeature","state","currentBreakpoint","feature","deviceImage","backgroundImage","backgroundImageSmallScreen","backgroundVideoSources","imageFilter","blue","icon","D16_M16","D130_M130","ZoomWrap","pointerEvents","overscrollBehaviorY","ZoomedImage","ZoomOverlay","ZoomImage","transition","timingFunction","property","WrapRation","ResourceWrap","VideoWrap","TagsAndImageOverlay","TagsWrap","FavoriteWrap","boxShadow","SlideItem","ThumbnailImage","FavoriteIcon","FavoriteFullIcon","CarouselWrapper","CarouselImagesWrap","CarouselImagesContainer","NavNextIcon","NavPrevIcon","DesktopImageGallery","swiperRef","resources","isFavorited","toggleFavorited","headerOffset","currentItem","setCurrentItem","showZoom","setShowZoom","hasBeenClicked","setHasBeenClicked","isHovering","setIsHovering","intervalId","setIntervalId","itemCount","isMounted","slideTo","imageUrl","ItemZoom","item","ItemThumb","opacity","onMouseEnter","onMouseLeave","videoUrl","Item","code","slidePrev","newCurrentItem","slidesPerView","spaceBetween","showNav","sliderRef","onIndexChange","activeIndex","pagination","freeMode","cssMode","videoThumbnail","slideNext","ShowZoomWrap","ShowZoomIcon","ZoomContainer","SwiperVideo","SwiperImage","TagsOverlay","ShowZoomedWrap","ShowZoomedIcon","MobileImageGallery","loadedImages","setLoadedImages","zoomContainerRef","zoomImageContainerRef","zoomImageRefs","scrollIntoView","behavior","block","inline","onLoad","imageRef","elm","pagingItemCount","overflowHidden","paginationContainerCss","videoUrlSmallScreen","BigContentWrap","justifyItems","alignContent","BigIconWrap","textAlign","BigParagraphWrap","BigParagraph","CenterContent","SwiperWrap","features","smallLayout","totalCount","skipGridOffSet","slidesPerGroup","parallax","alternativeNav","listHeading","showSwirl","pagingIconColor","TwelveToTwentyThree","SixteenToNine","FullWidth","SearchBorderStyle","SearchInputElement","border","fontFamily","SearchInput","placeholderText","onUpdate","iconBefore","paddingX","paddingY","borderStyle","Surrounding","Underline","undefined","placeholder","ToggleLabel","outlineStyle","ToggleInput","ToggleSwitch","right","Toggle","initialValue","setValue","stateInitialValue","transitionDuration","brandColors","green","checked","currentValue","crowFliesDistanceToStore","store","lat","latitude","coords","long","cos","PI","longitude","sqrt","sortByCrowFliesDistance","stores","sort","a","b","aDist","bDist","fetchDrivingDistances","service","google","maps","DistanceMatrixService","getDistanceMatrix","Promise","resolve","reject","origins","LatLng","destinations","travelMode","TravelMode","DRIVING","unitSystem","UnitSystem","METRIC","response","status","DistanceMatrixStatus","OK","rows","Error","elements","distance","storeCallback","distanceMatrixPromises","all","filterByDistance","then","storeDistances","catch","filterByCrowFliesDistance","Store12x12","Dripdry","Dryclpetr","Dryflat","Handwash","IronH","IronL","IronM","Linedry","Nobleach","Nodrycl","NoIron","Notumble","Nowash","TumbleH","TumbleL","TumbleM","TempWash","circleNumbers","CircleWrap","Filled","Circle","yellow","Unfilled","numberToFill","number","InnerFlexColumn","labels","rating","numberOfReviews","flexColumn","InnerElement","description","D12_M12","reviews","ButtonWrapper","Text","productActivities","selectedActivityIndex","setSelectedActivityIndex","activity","name","selected","productText","DescriptionWrap","DescriptionBodyWrap","Html","DescriptionBody","ManufacturingWrap","ManufacturingData","ItemNumberWrap","ItemNumberData","letterSpacing","FavStyled","FavFullStyled","ButtonWrap","ProductActivitiesWrap","ProductDescriptionIntro","FavoIcon","descriptionExpanded","setDescriptionExpanded","Viewport","scrollToRef","descriptionLabel","reviewsLabel","D64_M40","productTitle","productTags","ProductTags","productDescription","D32_M24","body","manufacturingInformation","maxHeight","component","html","itemNumber","manufacturingCountryLabel","country","manufacturingFactoryLabel","factory","infoUrl","A","useDefaultLinkColor","readLessLabel","saveToWishlistLabel","loggedIn","Feedback","onSaveToWishlist","successText","pendingText","Header","BaseLine","ProductsWrap","Product","ProductImageWrap","ProductName","ProductSize","PreviousPurchase","products","topMargin","product","displayName","alt","ratio","ThreeToFour","ItemThumbLarge","sizeLabel","Author","Answer","ReviewTime","Minus","review","reviewLabels","consumer","stars","inputDate","Date","utc1","UTC","getFullYear","getMonth","getDate","utc2","result","floor","year","years","ago","months","month","days","day","dateDiff","createdAt","attributeRatings","attribute","attributeName","SummaryWrap","Data","ReviewsWrap","ShowMore","connect","apiKey","appShellData","apiKeys","trustpilotApiKey","apiId","trustpilotUnitId","reviewsSummary","itemNumbers","recalculateHeight","customerReviews","setCustomerReviews","nextPage","setNextPage","showMore","setShowMore","baseUrl","toString","fetch","reviewsResponse","json","reviewsJson","productReviews","links","rel","D96_M48","score","count","concat","next","viewMore","IconDripdry","IconDryclpetr","IconDryflat","IconHandwash","IconIronH","IconIronL","IconIronM","IconLinedry","IconNobleach","IconNodrycl","IconNoIron","IconNotumble","IconNowash","IconTumbleH","IconTumbleL","IconTumbleM","IconTempWash","WashIcon","PartHeading","CompositionWrap","borderTop","CompositionHeadingWrap","CompositionItemWrap","CareInstructionsWrap","CareInstructionsHeadingWrap","CareInstructionsItemWrap","CareInstructionWashItemWrap","CareInstructionWashItemText","CareInstructionsItem","compositionLabel","compositions","careLabel","careInstructions","compositionBins","composition","materials","material","percentage","washItems","wash","careInstruction","textHeading","textIntro","linkText","linkUrl","Big","Intro","HtmlBody","MainTag","Tag","ItemImage","ItemLink","Link","sustainability","mainIntro","mainBody","SwiperList","contentItems","contentItem","CmsListItem","reduce","tagString","Divider","DividerLine","DeliveryHeadingWrap","paddingRight","Plus16","SectionInner","SectionContent","AccordionSection","expanded","wrapperRef","sectionId","resetExpandedSection","contentShown","setContentShown","currentHeight","setHeight","shouldTranslateHeight","isShown","willChange","requestAnimationFrame","offsetHeight","abs","updateOffsetHeight","materialsAndCareLabel","sustainabilityLabel","reviewCount","reviewScore","deliveryAndReturnsLabel","deliveryAndReturns","expandedSection","scrollToSectionRef","recalculateReviewsHeight","setRecalculateReviewsHeight","recalculateHeightState","Table","table","borderSpacing","borderCollapse","Tr","tr","Td","td","openingHours","Tbody","Object","entries","openingHour","hours","D14_M14_L130","OpeningHoursHeading","OpeningHoursExceptionsHeading","ContactWrap","OpeningHoursOuter","OpeningHoursWrap","flex","basis","ContactData","ContactDataText","ContactButton","openingHoursExceptions","phoneNumber","directionsLink","show","heightTest","isOpen","setIsOpen","contact","findStore","BlackToWhite","StoreDataWrap","StoreDataItem1","StoreDataItem1Row","StoreDataItem1Text","StoreDataItem2","StoreDataItem2Row","PlusRotaded","MoreInformationMobile","MoreInformationDesktop","SelectedStore","AvailableSizesMobile","storeAvailability","isSelected","moreInformationShown","setMoreInformationShown","availableSizesShown","setAvailableSizesShown","lightGrey","D20_M16","D120_M120","selectedStore","address","Br","zipCode","city","infoShown","moreInformation","availabilityStatus","availabilityLabel","availableSizes","availability","openHours","deviantOpenHours","directions","openingHoursDeviating","SearchInputWrap","ToggleWrap","Map","Location","updateResults","setOnlyShowIfInStock","showSpinner","searchPlaceholder","searchInStockToggle","Loader","visible","ModalScrollableContentContainer","Modal","ModalIntro","UI","googleMapsApiKey","dispatch","setSelectedStore","modalIsShown","hideModal","setStoreAvailability","onlyShowIfInStock","isPositionChecked","setIsPositionChecked","positionAllowedByClient","setPositionAllowedByClient","selectedStoreId","setSelectedStoreId","storeAvailabilityInStock","findIndex","storesLoaded","setStoresLoaded","setShowSpinner","collectStoreData","storeIds","ids","URL","search","r","storesWithIds","hasOwnProperty","push","getStores","navigator","geolocation","getCurrentPosition","filteredStores","storeAvailabilityJson","cookieStoreId","widthInColumns","textAboveHeading","closeModal","textAboveLine","resultsNear","results","searchPlaceHolder","searchString","noStoresInStock","Content","Tabs","sizeInformation","tabs","tab","SizeGuide","sizeGuide","tabText","Measurement","measurement","selectedTab","setSelectedTab","D20_M20","activeTab","switchToTab","FlexElement","MainInfo","SizeSelector","SizeSelectorText","SizeGuideText","AddToCart","BackInventoryWrap","BackInventoryText","AddToCartButton","AddToCartIcon","UspItem","UspItemCheck","Check","ProductMarkingsWrap","ProductMarkingSplitter","BreadcrumbWrap","ProductDataWrap","MarkingsAndReviews","MainHeading","VariationLink","VariationLinkImage","ExtendedDataGridWrap","FeatureBlocksGridWrap","AccordionGridWrap","RecommendationsGridWrap","ItemInventory","WebInventoryInfoWrap","SelectedStoreInfoWrap","SelectedStoreInfoCity","StoreInfoWrap","StoreInfoText","ChangeStore","ShopIcon","StoreIcon","Variation","wishlist","culture","currency","market","usps","wishlistPageLocation","pages","currentUser","isLoggedIn","toggleWishlistItem","colorProductCode","currentCategory","addToCart","quantity","ticket","openAccountBox","sizes","deliveryUsps","variations","preSelectedSizeCode","previousPurchases","selectedStoreStatus","sizeBackupStoreAvailabilities","barcodes","scrollToDetailsRef","scrollToReviewsRef","setFavourite","categoryName","statusCode","toggleWishlist","selectedSize","setSelectedSize","sizeGuideModalIsShown","setSizeGuideModalIsShown","storeAvailabilityModalIsShown","setStoreAvailabilityModalIsShown","expandedAccordion","setExpandedAccordion","price","centralStockAvailability","inStock","contextDisplayData","productContextDisplayData","compositeItem","head","schema","getElementById","appendChild","aggregateRating","ratingValue","numOfReviews","schemaContent","sku","gtin","barCode","mpn","brand","offers","priceCurrency","sellingPrice","itemCondition","innerHTML","JSON","stringify","sentFromBackupStore","availableOnline","gotSizeInformation","markings","productMarkings","marking","Page","offsetTop","D40_M32","Price","microData","listPrice","comparePrice","displayPriceLabels","fontSizePrevPrice","rowBreakMainPrice","featureHighlightTags","readDetails","variation","replaceState","toLowerCase","mainImage","selectSize","selectedSizeCode","comingSoon","disabled","addedToCart","failedText","addToCartFailed","Huge","red","inventoryOnline","showStoreInventoryStatus","changeStore","inventoryInStore","backupInventoryText","storeAvailabilityLabels","fitsWithPreviousPurchases","productDetails","removeFromWishList","saveToWishList","compareProductLabel","compareWithOtherGarment","readMore","readLess","manufacturingCountry","manufacturingFactory","onCompareProduct","featureBlocks","productFeatures","ProductFeatureList","featureListHeading","accordionMaterial","careAdvice","accordionSustainability","accordionReviews","accordionDeliveryAndReturns","recommendations","recommendationsTitle"],"mappings":"0QA6BaA,EAA6B,SAEtCC,G,UAEQC,EAAA,EAAAA,SACNC,EAAA,EAAAA,MACAC,EAAA,EAAAA,WACAC,EAAA,EAAAA,aACAC,EAAA,EAAAA,aACAC,EAAA,EAAAA,WACAC,EAAA,EAAAA,UACAC,EAAA,EAAAA,OAEIC,EAAW,YAAUH,GACrBI,GAAgC,OAApB,EAAY,QAAb,EAACN,SAAY,eAAEO,QAAM,EAAI,GAAK,EAC/C,OACE,kBAAC,IAAgB,CACfJ,UAAWA,EACXK,IAAK,CACHT,WAAYA,IAGd,kBAAC,IAAgB,CACfS,IAAK,CACHC,WAAY,gBACLH,GAAYR,GAAS,CACxBA,MAAO,YAAwB,QAAN,EAACA,SAAK,eAAEY,IAAKN,GACtCO,KAAM,QACNC,SAAU,kBAGdX,aAAcA,GAAgBA,EAAe,EAAOA,EAAY,KAAO,QAGxEK,GACC,kBAAC,IAAmB,KAClB,kBAAC,IAAW,CACVO,UAAQ,EACRC,MAAI,EACJC,OAAK,EACLC,aAAW,EACXC,cAAY,EACZZ,SAAUA,EACVa,QAASlB,KAIdH,KAOEsB,EAA8B,aACzC,SACEvB,G,UAEQC,EAAA,EAAAA,SACNC,EAAA,EAAAA,MACAE,EAAA,EAAAA,aACAE,EAAA,EAAAA,WACA,IAAAkB,kBAAA,IAAa,GAAb,EAEAnB,EAAA,EAAAA,aACAG,EAAA,EAAAA,OACA,IAAAiB,cAAA,IAAS,EAAT,SACAC,EAAA,EAAAA,QAEIC,GAAgC,OAApB,EAAY,QAAb,EAACvB,SAAY,eAAEO,QAAM,EAAI,GAAK,EACzCF,EAAW,YAAUH,GAC3B,OACE,kBAAC,IAAOsB,IAAG,CACThB,IAAKc,EAAQ,qCACXD,OAAQA,EACRI,MAAO,OACPb,SAAU,YACNd,IAAUyB,GAAY,CACxBd,WAAY,CACVX,MAAO,YAAwB,QAAN,EAACA,SAAK,eAAEY,IAAKN,GACtCO,KAAM,QACNC,SAAU,oBAGTW,GAAY,CACftB,aAAcA,GAAgBA,EAAe,EAAOA,EAAY,KAAO,QAErEmB,GAAc,CAChBM,SAAU,iBACVC,SAAU,aAIbJ,GACC,kBAAC,IAAmB,KAClB,kBAAC,IAAW,CACVV,UAAQ,EACRC,MAAI,EACJC,OAAK,EACLE,cAAY,EACZD,aAAW,EACXI,WAAYA,EACZf,SAAUA,EACVa,QAASlB,KAIdH,MAWI+B,EAA0B,aACrC,SACEhC,GAEQ,IAAAC,EAAA,EAAAA,SACNC,EAAA,EAAAA,MACAE,EAAA,EAAAA,aACAE,EAAA,EAAAA,WACAD,EAAA,EAAAA,aACAG,EAAA,EAAAA,OACAkB,EAAA,EAAAA,QAEF,OACE,kBAACH,EAA2B,CAACrB,MAAOA,EAAOG,aAAcA,EAAcD,aAAcA,EAAcI,OAAQA,EAAQF,WAAYA,EAAYM,IAAKc,EAAQ,CAAED,OAAQ,SAAWD,YAAU,GACpLvB,O,6LChIHgC,EAAW,YAAO,IAAc,CACpCC,OAAQ,CACNC,IAAK,EACLC,OAAQ,UAINC,EAAe,IAAOC,IAAI,CAC9BC,QAAS,OACTC,UAAW,QAGPC,EAAW,IAAOC,KAAK,CAC3BC,MAAO,IAAaC,WAAWC,SAC/BC,OAAQ,UACRC,cAAe,YACfC,SAAU,OACVC,WAAY,MAGRC,EAAoB,YAAO,IAAI,CACnCC,UAAW,eAGAC,EAAoB,aAAO,SAACpD,GAC/B,IAAAqD,EAAA,EAAAA,UAAWC,EAAA,EAAAA,YAAarD,EAAA,EAAAA,SAAU,IAAAsD,qBAAA,IAAgB,GAAhB,EAAuB7B,EAAA,EAAAA,QAEjE,OACE,kBAAC,IAAQ,CAACnB,UAAU,OAClBK,IAAKc,EAAQ,aACX8B,OAAQ,OACRrD,WAAY,SACPkD,GAAa,aAChBG,OAAQ,SACHD,GAAiB,CACpBpD,WAAY,YAKlB,kBAAC,IAAOyB,IAAG,CAACrB,UAAW,YAAkB,GAAI,GAC3CK,IAAG,2BACGyC,GAAa,CACfI,WAAY,QACZC,YAAa,WAEVL,GAAaE,GAAiB,CACjCpD,WAAY,UAIfmD,GAAe,kBAAC,IAAW,CAACK,UAAWN,EAAWC,YAAaA,EAAaD,UAAWA,EAAWE,cAAeA,KAEnHtD,MAKD2D,EAAwB,YAAOR,IAAiB,GACpDS,QAAS,CAAEzB,OAAQ,UAClB,UAAY,KAAsB,CACjCyB,QAAS,CAAEzB,OAAQ,S,IAIV0B,EAAiB,SAAC9D,GACrB,IAAAqD,EAAA,EAAAA,UAAWC,EAAA,EAAAA,YAAarD,EAAA,EAAAA,SAChC,OACE,kBAAC2D,EAAqB,CACpBP,UAAWA,EACXC,YAAaA,GAEb,kBAACS,EAAU,eAAK/D,EAAK,CAAEqD,UAAWA,IAC/BpD,KAMH+D,EAAmB,YAAO,MAAW,GACzCzB,QAAS,cACTC,UAAW,SACV,UAAY,KAAsB,CACjCA,UAAW,Q,IAITyB,EAAkB,IAAOC,EAAE,CAC/BhC,OAAQ,CAAEiC,GAAI,GACdN,QAAS,CAAEM,GAAI,KAGXC,EAAiB,IAAO9B,MAAG,MAC9B,UAAY,KAAuB,CAClCE,UAAW,Q,IAIT6B,EAAqB,IAAO/B,MAAG,GACnCE,UAAW,SACV,UAAY,KAAsB,CACjCA,UAAW,Q,IAIFuB,EAAa,SAAC/D,GAEvB,IAAAqD,EAAA,EAAAA,UACAiB,EAAA,EAAAA,MACAC,EAAA,EAAAA,QACAC,EAAA,EAAAA,YACAC,EAAA,EAAAA,gBACAC,EAAA,EAAAA,iBACAC,EAAA,EAAAA,qBACAC,EAAA,EAAAA,MACA3E,EAAA,EAAAA,SACA,IAAA4E,sBAAA,IAAiB,GAAjB,EACA,IAAAC,qBAAA,IAAgB,EAAhB,KAEF,OACE,yBAAKvE,UAAW,YAAkB,GAAI,GAAI,YAA2B,IAAM8C,EAAY,GAAK,wCACzFiB,GAAS,kBAACrC,EAAQ,CAAC1B,UAAW,YAAkB,GAAI,KAAM+D,GAC3D,yBAAK/D,UAAW,YAAkB,GAAI,IACpC,6BACE,kBAAC2C,EAAiB,CAACF,SAAUwB,GAAcD,GAC1CE,GACC,kBAACT,EAAgB,CACfvC,OAAQ,IAAasD,MACrBlB,QAAS,CAAEmB,EAAG,IACdC,KAAMR,EACNS,QAAS,WAAM,OAAAR,KACfS,UAAWR,GAAwBA,EACnCS,MAAO,IAAYC,iBAK3B,kBAACjB,EAAc,CAAC7D,UAAW,YAAkB,GAAI,EAAG,YAA2B,KAC7E,kBAAC0D,EAAe,KAAEW,GACjBC,GACC,kBAACxC,EAAY,KACX,kBAACI,EAAQ,CAACyC,QAAS,WACa,mBAAnBL,GAGXA,MAECC,KAKT,kBAACT,EAAkB,CAAC9D,UAAW,YAAkB,GAAI,KAClDN,M,8EC5JM,EArBf,yB,+CAmBA,OAnB0B,iBACxB,YAAAqF,OAAA,WACE,IAAMtF,EAAQuF,KAAKvF,MACXwF,EAAA,EAAAA,KAAM1E,EAAA,EAAAA,IACV2E,EAAY,YAChB,OAAOD,GAEL,IAAK,MACHC,EAAY,wBACZ,MACF,IAAK,MACHA,EAAY,YAIhB,OACE,4BAAQC,IAAK5E,EAAK0E,KAAMC,KAG9B,EAnBA,CAA0B,IAAME,WCoEjB,IA3DK,SAAC3F,G,MACXsB,EAAA,EAAAA,QAASsE,EAAA,EAAAA,SAAU3E,EAAA,EAAAA,SAAUC,EAAA,EAAAA,KAAMC,EAAA,EAAAA,MAAOV,EAAA,EAAAA,SAAU,IAAAe,kBAAA,IAAa,GAAb,EAAoBH,EAAA,EAAAA,aAAcD,EAAA,EAAAA,YACxFyE,EAAYD,GAAsB,iBAAyB,MA0BjE,OAxBA,qBAAU,W,MACR,GAAGC,GAAaA,EAAUC,QAAS,CAEjC,IAAM,EAAQD,EAAUC,QAClBC,EAAmB,QAAV,EAAGzE,SAAO,eAAE0E,MAAK,SAAAhB,GAAK,MAAW,QAAXA,EAAEQ,OAAgC,QAAbR,EAAEiB,QAAoBjB,EAAEiB,UAAYxF,EAAW,SAAW,eACpH,GAAIsF,GAAa,IAAIG,cAAe,CAClC,IAAIC,EAAM,IAAI,IACdA,EAAIC,WAAWL,EAAUjF,KACzBqF,EAAIE,YAAY,GAChBF,EAAIG,GAAG,IAAIC,OAAOC,iBAAiB,WAC9BvF,GACD,EAAMwF,eAGDV,GAAa,EAAMW,YAAY,mCACxC,EAAMhB,IAAMK,EAAUjF,KAGpBK,IACF,EAAMwF,OAAS,OAGlB,IAGD,2BACEpG,UAAU,cACVqG,IAAKf,EACL5E,SAAUA,EACVC,KAAMA,EACNC,MAAOA,EACPC,YAAaA,EACbyF,QAAS7G,EAAM6G,QACfC,MAAK,eACCzF,GAAgB,yBAClBQ,MAAO,QACHL,EAAa,CAAEuF,QAAS,EAAGtF,OAAQ,OAAQT,SAAU,QAASmB,IAAK,EAAG6E,KAAM,GAAM,CAAEvF,OAAQ,SAAS,CACzGwF,UAAW,QACXC,eAAgB,oBAIZ,QAHJ,EAGH5F,SAAO,eAAE6F,QAAO,SAAAnC,GAAK,MAAW,QAAXA,EAAEQ,QAAgB4B,KAAI,SAACC,EAAQC,GACjD,OACsB,QAAlBD,EAAOpB,QACY,YAAlBoB,EAAOpB,SAAyBxF,GACd,WAAlB4G,EAAOpB,QAAuBxF,IAA8B,QAAhB4G,EAAO7B,MAClD,kBAAC,EAAW,CAAC+B,IAAKD,EAAG9B,KAAM6B,EAAO7B,KAAM1E,IAAKuG,EAAOvG,Y,+FC7D9D0G,EAAW,IAAOlF,IAAI,CAC1BmF,eAAgB,OAChBlF,QAAS,OACTmF,cAAe,MACf7D,QAAS,CAAEM,GAAI,SAGXwD,EAAe,YAAOH,IAAQ,GAClCI,UAAW,iBACXC,eAAgB,SAChBC,YAAa,cACbC,WAAY,UACX,UAAY,KAAuB,CAClClE,QAAS,CACPmB,EAAG,S,IAKHgD,EAAiB,YAAOR,IAAQ,GACpCO,WAAY,SACZE,SAAU,SACVC,UAAW,OACXC,UAAW,SACXC,eAAgB,OAEhB,qBAAsB,OACtB,sBAAuB,CACrB7F,QAAS,UAEV,UAAY,KAAuB,CAClCsB,QAAS,CACPmB,EAAG,S,IAKHqD,EAAW,IAAO/F,IAAI,CAC1BC,QAAS,OACTwF,WAAY,WAGRO,EAAW,IAAOhG,IAAI,CAC1BC,QAAS,OACTgG,IAAK,MACLR,WAAY,WAGRS,EAAiB,YAAO,IAAM,CAClCC,WAAY,SACZhB,eAAgB,OAChB5D,QAAS,CAAEM,GAAI,SAiFF,IA9EY,SAACnE,G,QAClB2D,EAAA,EAAAA,SAAUL,EAAA,EAAAA,YAAaoF,EAAA,EAAAA,MACzBC,GADgC,EAAAtF,UAAW,EAAAE,cAC7BmF,EAAQ,IAAa9F,WAAW8F,MAAQ,IAAa9F,WAAWgG,OAC9EC,EAAuBH,EACzB,IAAaI,YAAYC,QACzB,IAAaD,YAAYE,QAE7B,IAAe,QAAX,EAAA1F,SAAW,eAAE3C,QAAS,EACxB,OAAO,qCAGT,IAAMsI,EAAe,iBAAuB,MAE5C,qBAAU,WACR,OAAItF,EACK,cAENsF,GAAyC,OAAzBA,EAAanD,UAC9BmD,EAAanD,QAAQoD,WAAaD,EAAanD,QAAQqD,aAGlD,gBACN,CAAC7F,IACJ,IAAM8F,EAAUzF,EAAWgE,EAAeK,EAC1C,OACE,kBAACoB,EAAO,CAACxC,IAAKqC,GACZ,kBAACZ,EAAQ,CACPgB,SAAS,mCACTC,WAAS,GAEC,QAFD,EAEVhG,SAAW,eAAE8D,KAAI,SAACmC,EAAOC,EAAOC,GAC/B,OACE,kBAACnB,EAAQ,CAACf,IAAKiC,GACF,IAAVA,IACE7F,EACC,kBAAC,IAAS,CACR/C,IAAK,CACH+B,MAAO6G,IAAUC,EAAM9I,OAAS,EAAIgI,EAAcE,KAItD,kBAAC,IAAU,CACXjI,IAAK,CACH+B,MAAO6G,IAAUC,EAAM9I,OAAS,EAAIgI,EAAcE,MAMxD,yBACEtB,IAAKiC,EACLE,SAAS,kBACPL,SAAS,6BACTC,WAAS,GAEX,kBAACd,EAAc,CACb5H,IAAK,CACH+B,MAAO6G,IAAUC,EAAM9I,OAAS,EAAIgI,EAAcE,GAEpDc,GAAIJ,EAAMzI,IACV8I,MAAOL,EAAMtE,KACbsC,IAAKiC,EACLE,SAAS,QAET,kBAAC,IAAS,KAAEH,EAAMtE,OAEpB,0BAAMyE,SAAS,WAAWG,QAASC,OAAON,EAAQ,KAClD,0BAAME,SAAS,OAAOG,QAASN,EAAMtE,OACrC,0BAAMyE,SAAS,MAAMG,QAAYE,OAAOC,SAASC,SAAQ,KAAKF,OAAOC,SAASE,KAAOX,EAAMzI,e,iCClIzG,mHAIaqJ,EAAY,YAAQ,IAAU,GAAI,IAClCC,EAAY,YAAQ,IAAU,GAAI,K,8ICDlCC,EAAa,YAAQ,IAAU,GAAI,IACnCC,EAAkB,YAAQ,IAAe,GAAI,ICOpDC,EAAc,IAAOC,MAAM,CAC/BC,WAAY,OACZhJ,OAAQ,MACRpB,aAAc,MACdqK,gBAAiB,IAAa9H,WAAW8F,MACzC,yBAA0B,CACxB+B,WAAY,OACZ5I,MAAO,MACPJ,OAAQ,MACRpB,aAAc,MACdqK,gBAAiB,IAAa9H,WAAW8F,MACzC5F,OAAQ,UACRe,QAAS,CACP8G,EAAG,MACH3F,EAAG,UAoBM,EAfA,SAAC,G,IAAE4F,EAAA,EAAAA,IAAKC,EAAA,EAAAA,IAAKC,EAAA,EAAAA,MAAOC,EAAA,EAAAA,YAAalJ,EAAA,EAAAA,MAC9C,OACE,kBAAC0I,EAAW,CACV/E,KAAK,QACLoF,IAAKA,EACLC,IAAKA,EACLC,MAAOA,EACPE,SAAU,SAACC,GAAM,OAAAF,EAAYG,WAAWD,EAAEE,OAAOL,SACjDlK,IAAK,CACHiB,MAAOA,EAAWA,EAAK,KAAO,WC/BhCuJ,EAAO,IAAO9I,IAAI,CACtBtB,SAAU,WAAYS,OAAQ,OAAQc,QAAS,OAAQwF,WAAY,SAAUQ,IAAK,QAG9E8C,EAAQ,YAAOhB,EAAY,CAC/BvH,OAAQ,YAGJwI,EAAQ,YAAOhB,EAAiB,CACpCxH,OAAQ,YAgEK,EA7DO,SAAC,G,IAAEyI,EAAA,EAAAA,SACjB,wCAACpK,EAAA,KAAOqK,EAAA,KACR,uCAAC7E,EAAA,KAAQ8E,EAAA,KAEf,qBAAU,W,OACI,QAAZ,EAAIF,SAAQ,eAAEzF,WACZ0F,EAASD,EAASzF,QAAQ3E,OAC1BsK,EAAUF,EAASzF,QAAQa,WAE5B,CAAC4E,IAgCJ,OACE,kBAACH,EAAI,KACFjK,EACC,kBAACmK,EAAK,CAACpG,QA1BE,W,OACD,QAAZ,EAAIqG,SAAQ,eAAEzF,WACZyF,EAASzF,QAAQ3E,OAAQ,EACzBqK,GAAS,GACM,IAAX7E,GACF8E,EAAU,QAuBV,kBAACJ,EAAK,CAACnG,QAnCA,W,OACC,QAAZ,EAAIqG,SAAQ,eAAEzF,WACZyF,EAASzF,QAAQ3E,OAAQ,EACzBqK,GAAS,OAkCT,kBAAC,EAAM,CACLZ,IAAK,EACLC,IAAK,GACLC,MAAO3J,EAAQ,EAAI,GAAKwF,EACxBoE,YAAa,SAACW,IAxBC,SAACC,G,MAChBC,EAAYC,KAAKjB,IAAIiB,KAAKhB,IAAIc,EAAgB,GAAI,IAC1C,QAAZ,EAAIJ,SAAQ,eAAEzF,WACZyF,EAASzF,QAAQa,OAASiF,EAC1BH,EAAUG,GACQ,IAAdA,EACFJ,GAAS,GACArK,GACTqK,GAAS,IAiBPM,CAAaJ,EAAgB,KAE/B7J,MAAO,OCpCA,EAjCM,SAAC,G,IAAE0J,EAAA,EAAAA,SAChB,uCAACQ,EAAA,KAAaC,EAAA,KACd,uCAACC,EAAA,KAAUC,EAAA,KAEXC,EAAWC,aAAY,WACvBb,EAASzF,SAAWyF,EAASzF,QAAQuG,WAAa,IACpDL,EAAeT,EAASzF,QAAQiG,aAChCG,EAAYX,EAASzF,QAAQmG,UAE7BK,cAAcH,MAEf,KAUH,OACE,kBAAC,EAAM,CACLvB,IAAK,EACLC,IAAK,IACLC,MAAsB,IAAdiB,EAAsBE,EAC9BlB,YAAa,SAACW,IAbC,SAACa,GAClB,GAAIhB,EAASzF,QAAS,CACpB,IAAM0G,EAAUX,KAAKjB,IAAIiB,KAAKhB,IAAI0B,EAAc,GAAIN,GACpDV,EAASzF,QAAQiG,YAAcS,EAC/BR,EAAeQ,IAUbC,CAAYf,EAAgBO,EAAY,S,kBC/BnCS,EAAa,YAAQ,IAAU,GAAI,I,SCE1C,EAAO,YAAOC,EAAA,EAAW,CAC7B7J,OAAQ,YAGJ8J,EAAQ,YAAOF,EAAY,CAC/B5J,OAAQ,YAiBK,EARM,SAAC,G,IAAE+J,EAAA,EAAAA,UAAWpG,EAAA,EAAAA,KAAMqG,EAAA,EAAAA,MACvC,OAAOD,EACL,kBAACD,EAAK,CAAC1H,QAAS4H,IAEhB,kBAAC,EAAI,CAAC5H,QAASuB,K,kBCpBNsG,EAAgB,YAAQ,IAAU,GAAI,I,kBCAtCC,EAAgB,YAAQ,IAAU,GAAI,ICqCpC,EA9BU,SAAC,G,IAAEzB,EAAA,EAAAA,SAAU0B,EAAA,EAAAA,YAAaC,EAAA,EAAAA,kBACjD,2BAAgB,WAOd,OANAC,SAASC,mBAAqB,WACO,OAA/BD,SAASE,mBACXH,GAAkB,IAIf,WACLC,SAASC,mBAAqB,SAclC,OAAOH,EACL,kBAACD,EAAa,CAAC9H,QANA,WACfiI,SAASG,iBACTJ,GAAkB,IAIgBtM,IAAG,IAErC,kBAACmM,EAAa,CAAC7H,QAbA,W,UAC+B,QAA9C,EAA+B,QAA/B,EAAgB,QAAhB,EAAAqG,EAASzF,eAAO,eAAEyH,qBAAa,eAAEA,qBAAa,SAAEC,oBAChDN,GAAkB,IAWgBtM,IAAG,K,EAFE,CAAEkC,OAAQ,W,EAEV,CAAEA,OAAQ,W,iBCP/C,EAAO,IAAOR,IAAI,CACtBtB,SAAU,WAAYS,OAAQ,OAAQM,SAAU,SAAU0L,UAAW,WAGjEC,EAAe,IAAOpL,IAAI,CAC9BC,QAAS,OACTd,OAAQ,OACRI,MAAO,OACPb,SAAU,WACVmB,IAAK,EACLuF,cAAe,SACf/E,MAAO,IAAaC,WAAW8F,QAG3BiF,EAAmB,IAAOrL,IAAI,CAClCb,OAAQ,OACRI,MAAO,OACPb,SAAU,WACVmB,IAAK,EACLyL,cAAe,OACfrL,QAAS,OACTmF,cAAe,SACfG,eAAgB,MAChBlF,MAAO,IAAaC,WAAW8F,MAC/BH,IAAK,SAGDsF,EAA0B,YAAOF,EAAkB,CACvDpF,IAAK,SAGDuF,EAAwB,IAAOxL,IAAI,CACvCT,MAAO,OACPgC,QAAS,CAAEmB,EAAG,QACdzC,QAAS,OACTmF,cAAe,MACfK,WAAY,WAGRgG,EAAqB,IAAOzL,IAAI,CACpCT,MAAO,OACPgC,QAAS,CAAEmB,EAAG,QACdzC,QAAS,OACTmF,cAAe,MACfa,IAAK,MACLR,WAAY,SACZF,eAAgB,QAGZmG,EAAoB,IAAO1L,IAAI,CACnCC,QAAS,OACTmF,cAAe,MACfa,IAAK,QAGD0F,EAAW,YAAOC,EAAA,EAAW,CACjCzK,WAAY,QAGR0K,EAAY,IAAO7L,IAAI,CAC3BT,MAAO,OACPU,QAAS,OACTmF,cAAe,MACfa,IAAK,OACLR,WAAY,WAGRqG,EAAc,YAAOD,EAAW,CACpCtK,QAAS,CAAEmB,EAAG,QACd6C,eAAgB,kBAGZwG,EAAe,YAAOF,EAAW,CACrCtK,QAAS,CAAEmB,EAAG,UAGVsJ,GAAQ,IAAOhM,IAAI,CACvBC,QAAS,OACTmF,cAAe,MACfa,IAAK,OACLR,WAAY,WAuIC,IApID,SAAC,G,IACb3H,EAAA,EAAAA,aACAmO,EAAA,EAAAA,aACAC,EAAA,EAAAA,mBACAC,EAAA,EAAAA,oBACApL,EAAA,EAAAA,UACAqL,EAAA,EAAAA,aACA,IAAAC,iBAAA,IAAY,EAAZ,eACA1O,EAAA,EAAAA,SACA,IAAAiB,YAAA,IAAO,GAAP,EACA,IAAAC,aAAA,IAAQ,GAAR,EACAyN,EAAA,EAAAA,kBAEMhJ,EAAW,iBAAyB,MACpC,wCAACiH,EAAA,KAAWgC,EAAA,KACZ,wCAAC5B,EAAA,KAAa6B,EAAA,KAEdrI,EAAO,W,MACK,QAAhB,EAAAb,EAASE,eAAO,SAAEW,OAClBoI,GAAa,IAGT/B,EAAQ,W,MACI,QAAhB,EAAAlH,EAASE,eAAO,SAAEgH,QAClB+B,GAAa,IAGf,qBAAU,WACJH,GACFjI,MAED,CAACiI,IAEJ,IAAMK,EAA0B1L,EAAYsK,EAAmBE,EACzDmB,EAAQ3L,EAAY+K,EAAcC,EACxC,OACE,kBAAC,EAAI,KACH,kBAAC,IAA2B,CAC1BnO,MAAOqO,EACP/N,OAAQgO,EACRpO,aAAcsO,EAAe,KAAOD,EACpCnO,WAAY+C,EAAY,EAAI,EAC5B5B,OAAQ,QAEPiN,GACC,kBAAC,IAAmB,KAClB,kBAACO,EAAA,EAAW,CACVhO,UAAQ,EACR2E,SAAUA,EACV1E,KAAMA,EACNC,MAAOA,EACPE,cAAY,EACZD,YAAaiC,EACb5C,SAAU4C,EACV/B,QAASlB,EACTyG,QAAS,WAAM,OAAA8H,SAInBD,GACA,kBAAChB,EAAY,KACVzN,GAGJyO,IAAiBxN,GAChB,kBAAC6N,EAAuB,CACtBG,GAAG,iBACH3O,UAAU,WACV2E,QAAS,SAACiK,GACJA,EAAMhE,SAAWgE,EAAMC,gBACrBvC,EACFC,IAEArG,QAKJpD,GAAauL,GAAqBA,EAAkBjO,OAAS,GAC7D,kBAACoN,EAAkB,KAChBa,EAAkBxH,KAAI,SAACiI,EAAkB7F,GACxC,OACE,kBAAC,IAAW,CACVjC,IAAKiC,EACLvE,KAAMoK,EAAiBpK,KACvBC,QAAS,WAAM,OAAAmK,EAAiBnK,WAChCC,UAAW,kBAAC8I,EAAQ,MACpBpK,QAAS,CAAEmB,EAAG,IACdvD,OAAQ,IAAa6N,MACrBlK,MAAO,IAAYmK,uBAM7B,kBAACP,EAAK,KACJ,kBAACV,GAAK,KACJ,kBAAC,EAAY,CAACzB,UAAWA,EAAWpG,KAAMA,EAAMqG,MAAOA,IACvD,kBAAC,EAAa,CAACvB,SAAU3F,IACxBvC,GAAauL,GAAqBA,EAAkBjO,OAAS,GAC5D,kBAACqN,EAAiB,KACfY,EAAkBxH,KAAI,SAACiI,EAAkB7F,GACxC,OACE,kBAAC,IAAW,CACVjC,IAAKiC,EACLvE,KAAMoK,EAAiBpK,KACvBC,QAAS,WAAM,OAAAmK,EAAiBnK,WAChCC,UAAW,kBAAC8I,EAAQ,MACpBpK,QAAS,CAAEmB,EAAG,IACdvD,OAAQ,IAAa6N,MACrBlK,MAAO,IAAYmK,yBAO7BlM,GAAa,kBAAC,EAAY,CAACkI,SAAU3F,IACvC,kBAAC,EAAgB,CAAC2F,SAAU3F,EAAUqH,YAAaA,EAAaC,kBAAmB4B,KAEpFzL,GACC,kBAACyK,EAAqB,KACpB,kBAAC,EAAY,CAACvC,SAAU3F,U,oBC1OxC,IAAI4J,EAAQ,EAAQ,GAEpB,SAASrF,EAAWnK,GAChB,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,4BAA4BD,EAAMC,cAAc,OAAO,CAAC,GAAK,YAAY,EAAI,sEAAsE,OAAS,eAAe,YAAc,IAAI,eAAiB,YAGvRtF,EAAUuF,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,YAAY,KAAO,QAElFC,EAAOC,QAAUzF,EAEjBA,EAAU0F,QAAU1F,G,oBCVpB,IAAIqF,EAAQ,EAAQ,GAEpB,SAASpF,EAAWpK,GAChB,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,4BAA4BD,EAAMC,cAAc,OAAO,CAAC,GAAK,YAAY,EAAI,kIAAkI,OAAS,eAAe,YAAc,QAG9TrF,EAAUsF,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,YAAY,KAAO,QAElFC,EAAOC,QAAUxF,EAEjBA,EAAUyF,QAAUzF,G,oBCVpB,IAAIoF,EAAQ,EAAQ,GAEpB,SAASnF,EAAYrK,GACjB,OAAOwP,EAAMC,cAAc,MAAMzP,EAAM,CAACwP,EAAMC,cAAc,OAAO,CAAC,EAAI,uCAAuC,OAAS,eAAe,YAAc,IAAI,cAAgB,QAAQ,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,GAAK,gCAAgC,UAAY,iBAAiB,EAAI,IAAI,EAAI,OAAO,MAAQ,KAAK,OAAS,KAAK,KAAO,OAAO,IAAM,GAAG,CAACD,EAAMC,cAAc,OAAO,CAAC,KAAO,OAAO,EAAI,mBAAmB,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,SAAW,UAAU,SAAW,UAAU,EAAI,uGAAuG,IAAM,MAAMD,EAAMC,cAAc,OAAO,CAAC,EAAI,2iBAA2iB,KAAO,eAAe,KAAO,sCAAsC,IAAM,MAG/vCpF,EAAWqF,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,YAAY,KAAO,QAEnFC,EAAOC,QAAUvF,EAEjBA,EAAWwF,QAAUxF,G,oBCVrB,IAAImF,EAAQ,EAAQ,GAEpB,SAASlF,EAAiBtK,GACtB,OAAOwP,EAAMC,cAAc,MAAMzP,EAAM,CAACwP,EAAMC,cAAc,OAAO,CAAC,GAAK,gCAAgC,UAAY,iBAAiB,EAAI,IAAI,EAAI,OAAO,MAAQ,KAAK,OAAS,KAAK,KAAO,OAAO,IAAM,GAAG,CAACD,EAAMC,cAAc,OAAO,CAAC,KAAO,OAAO,EAAI,mBAAmB,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,SAAW,UAAU,SAAW,UAAU,EAAI,uGAAuG,IAAM,MAAMD,EAAMC,cAAc,OAAO,CAAC,EAAI,2iBAA2iB,KAAO,OAAO,KAAO,sCAAsC,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,uCAAuC,OAAS,OAAO,YAAc,IAAI,cAAgB,QAAQ,IAAM,MAG/uCnF,EAAgBoF,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,YAAY,KAAO,QAExFC,EAAOC,QAAUtF,EAEjBA,EAAgBuF,QAAUvF,G,oBCV1B,IAAIkF,EAAQ,EAAQ,GAEpB,SAAS9C,EAAY1M,GACjB,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,OAAO,CAAC,EAAI,kBAAkB,OAAS,eAAe,YAAc,IAAI,cAAgB,WAGvJ/C,EAAWgD,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,YAAY,KAAO,QAEnFC,EAAOC,QAAUlD,EAEjBA,EAAWmD,QAAUnD,G,oBCVrB,IAAI8C,EAAQ,EAAQ,GAEpB,SAASzC,EAAe/M,GACpB,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,OAAO,CAAC,EAAI,2FAA2F,OAAS,eAAe,YAAc,IAAI,cAAgB,WAGhO1C,EAAc2C,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,YAAY,KAAO,QAEtFC,EAAOC,QAAU7C,EAEjBA,EAAc8C,QAAU9C,G,oBCVxB,IAAIyC,EAAQ,EAAQ,GAEpB,SAASxC,EAAehN,GACpB,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,OAAO,CAAC,EAAI,0FAA0F,OAAS,eAAe,YAAc,IAAI,cAAgB,WAG/NzC,EAAc0C,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,YAAY,KAAO,QAEtFC,EAAOC,QAAU5C,EAEjBA,EAAc6C,QAAU7C,G,mHCKlB5B,EAAO,IAAO9I,IAAI,CACtBC,QAAS,OACT0F,SAAU,OACVP,cAAe,MACfK,WAAY,SACZQ,IAAK,QAGDuH,EAAa,IAAOpN,KAAK,CAC7BH,QAAS,OACT0F,SAAU,OACVP,cAAe,MACfG,eAAgB,SAChBE,WAAY,SACZlE,QAAS,CAAEmB,EAAG,OAAQ2F,EAAG,OACzBpC,IAAK,OACL9G,OAAQ,OACRiJ,gBAAiB,IAAa9H,WAAWmN,eACzC1P,aAAc,QACd2P,UAAW,OACXC,SAAU,IAGNC,EAAgB,YAAO,IAAM,CACjCpN,OAAQ,UACRH,MAAO,IAAaC,WAAWC,SAC/B,SAAU,CACRF,MAAO,IAAaC,WAAWgG,SAkC5B,IAAMuH,EAAQ,SAAC,G,IAAElQ,EAAA,EAAAA,SAAUW,EAAA,EAAAA,IAAkE,OAClG,kBAACkP,EAAU,CACTlP,IAAG,eACEA,IAGL,kBAAC,IAAc,CAACwP,WAAS,GAAEnQ,KAIhB,IAxCf,SAAqBD,GACnB,IAAMqQ,EAAOrQ,EAAMsQ,YAActQ,EAAMqQ,MAAQrQ,EAAMqQ,KAAKE,MAAM,EAAGvQ,EAAMsQ,aAAetQ,EAAMqQ,MAAQrQ,EAAMqQ,KAE5G,OACE,kBAACjF,EAAI,CACHxK,IAAG,2BACGZ,EAAMwC,WAAa,CACrBA,UAAWxC,EAAMwC,YAEfxC,EAAMwQ,cAAgB,CACxBA,aAAcxQ,EAAMwQ,gBAIvBH,GAAQA,EAAKjJ,KAAI,SAACqJ,EAAKnJ,GAAM,OAC5B,kBAAC6I,EAAK,CAAC5I,IAAKD,GAAImJ,MAEjBzQ,EAAM8E,eACL,kBAACoL,EAAa,CACZE,WAAS,EACTpN,SAAU,IAAe0N,QACzBxL,QAASlF,EAAM2Q,eAEd3Q,EAAM8E,kB,kICnDXsG,EAAO,IAAO9I,IAAI,CACtBK,MAAO,IAAaC,WAAWgG,QAG3BgI,EAAU,YAAO,IAAqB,CAC1CrO,QAAS,OACTmF,cAAe,SACfG,eAAgB,SAChBE,WAAY,WAGR8I,EAAQ,IAAOC,IAAI,CACvBjP,MAAO,OAAQJ,OAAQ,SAGnBsP,EAAc,IAAOzO,IAAI,CAC7BC,QAAS,OACTmF,cAAe,SACfK,WAAY,aACZQ,IAAK,MACL/F,UAAW,SAGPwO,EAAU,IAAOtO,KAAK,CAC1BuO,UAAW,SACXhO,WAAY,IACZD,SAAU,OACVkO,WAAY,OACZnO,cAAe,YACfR,QAAS,UAGL4O,EAAe,YAAO,IAAc,CACxCnQ,SAAU,WACVa,MAAO,OACPJ,OAAQ,OACRwF,UAAW,QACXC,eAAgB,gBAChB7G,aAAc,QAGH+Q,EAAiB,aAAQ,SAACC,GACrC,MAAO,CACLC,kBAAmBD,EAAMC,qBAFC,EAI3B,SAACtR,G,UACMuR,EAAA,EAAAA,QACF9Q,EAAW,YAAUT,EAAMsR,mBAC3BE,EAAc,YAAkBD,EAAQE,gBAAiBF,EAAQG,2BAA4BjR,GAEnG,OACE,kBAAC2K,EAAI,CAAC7K,UAAWP,EAAMO,WACrB,6BACE,kBAAC,IAA0B,CACzBJ,WAAY,OACZC,aAAcmR,EAAQI,uBACtBtR,aAAc,EACdC,WAAYN,EAAMsR,mBAEjBE,GACC,kBAACL,EAAY,CAACzL,IAAgB,QAAb,EAAE8L,SAAW,eAAE1Q,MAElC,kBAAC8P,EAAO,CACNhQ,IAAG,eACG2Q,EAAQK,aAAe,CACzBlH,gBAAiB,IAAa5B,YAAY+I,KAC1CxR,aAAc,UAIL,QAAZ,EAAAkR,EAAQO,YAAI,eAAEhR,MACb,kBAAC+P,EAAK,CAACnL,IAAiB,QAAd,EAAE6L,EAAQO,YAAI,eAAEhR,SAKlC,kBAACiQ,EAAW,KACV,kBAACC,EAAO,KACLO,EAAQhN,SAEX,kBAAC,IAAS,CAACvB,SAAU,IAAe+O,QAASb,WAAY,IAAqBc,WAC3ET,EAAQtM,WAOJ,O,gMCzFTgN,EAAW,IAAO3P,IAAI,CAC1BtB,SAAU,QACV+F,OAAQ,IACR2D,gBAAiB,IAAa9H,WAAW8F,MACzCvG,IAAK,EACL6E,KAAM,IACNkL,cAAe,MACf/J,UAAW,SACXgK,oBAAqB,UACrB1Q,OAAQ,QACRI,MAAO,UAGHuQ,EAAc,IAAOtB,IAAI,CAC7BjP,MAAO,OACPoF,UAAW,QACXnE,OAAQ,QAAQ,IAAU,sBAGtBuP,EAAc,YAAO,IAAqB,CAC9C5Q,OAAQ,OACRI,MAAO,OACPU,QAAS,OACTmF,cAAe,SACf7D,QAAS,CAAEmB,EAAG,OAAQ2F,EAAG,OACzB5C,WAAY,WACZF,eAAgB,WAChBU,IAAK,MACLvH,SAAU,QACVkR,cAAe,SAGXI,EAAY,YAAO,IAAc,CACrCJ,cAAe,MACfrQ,MAAO,OACPJ,OAAQ,OACR0F,OAAQ,gDACR9G,aAAc,MACd4G,UAAW,QACXC,eAAgB,SAChBpE,OAAQ,UACRyP,WAAY,CACVC,eAAgB,cAChBvG,SAAU,OACVwG,SAAU,aAIRrH,EAAO,IAAO9I,IAAI,CACtBtB,SAAU,SACVmB,IAAK,IAIDuQ,EAAa,YAAO,IAAkB,CAC1C7Q,MAAO,oBACP1B,WAAY,MACZsB,OAAQ,UAIJkR,EAAe,IAAOrQ,IAAI,CAC9Bb,OAAQ,OACRI,MAAO,SAGH+Q,EAAY,IAAOtQ,IAAI,CAC3Bb,OAAQ,OACRI,MAAO,OACPoF,UAAW,QACXsL,WAAY,CACVC,eAAgB,cAChBvG,SAAU,OACVwG,SAAU,eAIR5B,EAAQ,YAAO,IAAc,CACjCpP,OAAQ,OACRI,MAAO,OACPU,QAAS,QACT0E,UAAW,QACXC,eAAgB,SAChBqL,WAAY,CACVC,eAAgB,cAChBvG,SAAU,OACVwG,SAAU,eAIRI,EAAsB,YAAO,IAAqB,CACtDpR,OAAQ,OACRI,MAAO,OACPU,QAAS,OACTsB,QAAS,CAAEM,GAAI,QACf4D,WAAY,WACZQ,IAAK,MACLV,eAAgB,gBAChBqK,cAAe,SAGXY,EAAW,IAAOxQ,IAAI,CAC1BC,QAAS,OACTgG,IAAK,QAGDwK,EAAe,IAAOzQ,IAAI,CAC9BT,MAAO,OACPJ,OAAQ,OACRiJ,gBAAiB,IAAa5B,YAAYC,QAC1CiK,UAAW,mCACX3S,aAAc,QACdkC,QAAS,OACTwF,WAAY,SACZF,eAAgB,SAChBqK,cAAe,MACfpP,OAAQ,YAGJmQ,EAAY,IAAO3Q,IAAI,CAC3BT,MAAO,OACPJ,OAAQ,SAGJyR,EAAiB,YAAO,IAAc,CAC1ChB,cAAe,MACfrQ,MAAO,OACPJ,OAAQ,OACR0F,OAAQ,8CACR9G,aAAc,MACd4G,UAAW,QACXC,eAAgB,SAChBpE,OAAQ,UACRyP,WAAY,CACVC,eAAgB,cAChBvG,SAAU,OACVwG,SAAU,aAkBRU,EAAe,YAAO,IAAgB,CAC1CjB,cAAe,MACfpP,OAAQ,YAGJsQ,EAAmB,YAAO,IAAoB,CAClDzQ,MAAO,IAAaC,WAAWgG,MAC/BsJ,cAAe,MACfpP,OAAQ,YAGJuQ,EAAkB,IAAO/Q,IAAI,CACjCQ,OAAQ,UACRiE,OAAQ,EACRxE,QAAS,OACTmF,cAAe,SACfG,eAAgB,kBAIZyL,EAAqB,IAAOhR,IAAI,CACpCC,QAAS,OACTmF,cAAe,SACfa,IAAK,MACL9G,OAAQ,2BACRsG,WAAY,SACZF,eAAgB,MAChB+F,cAAe,SAGX2F,EAA0B,IAAOjR,IAAI,CACzCP,SAAU,WAGNyR,EAAc,YAAO,IAAW,CACpCtB,cAAe,MACfpP,OAAQ,YAGJ2Q,EAAc,YAAO,IAAS,CAClCvB,cAAe,MACfpP,OAAQ,YAGG4Q,EAAsB,SAAC1T,G,QAO5B2T,EAAY,iBAAY,MAEtBC,EAAA,EAAAA,UAAWvD,EAAA,EAAAA,KAAMwD,EAAA,EAAAA,YAAaC,EAAA,EAAAA,gBAAiBC,EAAA,EAAAA,aACjD,uCAACC,EAAA,KAAaC,EAAA,KACd,wCAACC,EAAA,KAAUC,EAAA,KAEX,wCAACC,EAAA,KAAgBC,EAAA,KACjB,wCAACC,EAAA,KAAYC,EAAA,KAEb,wCAACC,GAAA,MAAYC,GAAA,MACbC,GAA6B,OAApB,EAAY,QAAZ,EAAGd,SAAS,eAAEjT,QAAM,EAAI,EAEvC,qBAAU,WACR,IAAIgU,GAAY,EAkBhB,OAjBIP,GAAkBE,GAAcJ,GAClC5H,cAAckI,IACdC,GAAc,IAEK,IAAfD,IACFC,GACErI,aAAY,WACNuI,IACFV,GACE,SAAAD,GAAe,OAACA,EAAc,GAAKU,MAErCf,EAAU7N,QAAQ8O,QAAQZ,MAxBrB,MA8BR,WACLW,GAAY,EACZrI,cAAckI,OAEf,CAACJ,EAAgBE,EAAYJ,IAEhC,qBAAU,WAERD,EAAe,GACfI,GAAkB,KACjB,CAACT,IAcJ,OACE,oCACGM,GACC,oCACE,kBAACjC,EAAQ,KACP,kBAACG,EAAW,CACV1M,IAAK,YAAkBkO,EAAUI,GAAaa,SAAU,IAAOC,UAC/D5P,QAAS,WACPiP,GAAY,MAGhB,kBAAC9B,EAAW,KACTuB,EAAUxM,KAAI,SAAC2N,EAAMvL,GAAU,OAC9B,kBAAC8I,EAAS,CACR/K,IAAKiC,EACL9D,IAAKqP,EAAKF,SACVrU,OAAQ,IAAOwU,UACf9P,QAAS,WACP+O,EAAezK,IAEjB5I,IAAK,CACHqU,QAASjB,IAAgBxK,EAAQ,EAAI,YAQnD,kBAAC4B,EAAI,CACHxK,IAAK,CACHuB,IAAQ4R,EAAY,OAGtB,kBAACrB,EAAU,CACTwC,aAAc,WACZX,GAAc,IAEhBY,aAAc,WACZZ,GAAc,IAEhB3T,IAAK,CACHuB,IAAK,KAAK4R,EAAe,GAAE,OAG7B,kBAAC,IAAgB,KACf,kBAACpB,EAAY,KACViB,EAAUxM,KAAI,SAAC2N,EAAMvL,GACpB,MAAkB,UAAduL,EAAKvP,KAEL,kBAACoN,EAAS,CACRrL,IAAKiC,EACL5I,IAAK,CACHgH,UAAW,eAA6B,IAAdoM,EAAiB,OAG7C,kBAAC,IAAK,CACJ5T,aAAc,CACZ,CACEU,IAAKiU,EAAKK,SACV5P,KAAM,MACNS,OAAQ,QAGZsI,aAAc,CAAEzN,IAAKiU,EAAKF,UAC1BxR,WAAW,EACXqL,cAAc,EACdvN,OAAO,EACPD,MAAI,KAMV,kBAAC2P,EAAK,CACJtJ,IAAKiC,EACL9D,IAAKqP,EAAKF,SACVrU,OAAQ,IAAO6U,KACfzU,IAAK,CACHgH,UAAW,eAA6B,IAAdoM,EAAiB,KAC3ClR,OAAQ,QAAQ,IAAS,qBAE3BoC,QAAS,WACPiP,GAAY,UAMtB,kBAACtB,EAAmB,KAClB,kBAACC,EAAQ,KACNzC,GAAQA,EAAKE,MAAM,EAAG,GAAGnJ,KAAI,SAACqJ,EAAKjH,GAAU,OAC5C,kBAAC,IAAK,CAACjC,IAAKiC,EAAO5I,IAAK,CAAE8J,gBAAiB,IAAa9H,WAAW8F,MAAO/F,MAAO,YAAa8N,EAAI6E,KAAM7E,EAAI9N,SACzG8N,EAAIA,SAIX,kBAAC4C,EAAe,CACdzS,IAAK,CACHa,OAAQ,sBAAsBsS,EAAY,UAGzCD,GACD,kBAACf,EAAY,CACX7N,QAAS4O,GAERD,EACC,kBAACT,EAAgB,MAEjB,kBAACD,EAAY,OAInB,kBAACG,EAAkB,KACjB,kBAACG,EAAW,CAACvO,QA9HD,WAC1ByO,EAAU7N,QAAQyP,YAClB,IAAMC,GAAkBxB,EAAc,EAAIJ,EAAUjT,QAAUiT,EAAUjT,OACxEsT,EAAeuB,MA4HD,kBAACjC,EAAuB,KACtB,kBAAC,IAAU,CACTkC,cAAe,OACfC,aAAc,EACdrS,WAAW,EACXsS,SAAS,EACThS,UAAU,EACViS,UAAWjC,EACXkC,cAAe,WAAM,OAAA5B,EAAeN,EAAU7N,QAAQgQ,cACtDC,YAAY,EACZC,UAAU,EACVC,SAAS,EACTxU,OAAQ,QAEPmS,EAAUxM,KAAI,SAAC2N,EAAMvL,GAAU,OAC9B,kBAACyJ,EAAS,CAAC1L,IAAKiC,EAAOjJ,UAAU,gBAC/B,kBAAC2S,EAAc,CACbxN,IAAmB,UAAdqP,EAAKvP,KAAmBuP,EAAKmB,eAAiBnB,EAAKF,SACxDrU,OAAQ,IAAOwU,UACf9P,QAAS,WACPmP,GAAkB,GAClBJ,EAAezK,IAEjB5I,IAAK,CACHqU,QAASjB,IAAgBxK,EAAQ,EAAI,YAOjD,kBAACgK,EAAW,CAACtO,QAxJL,WACtByO,EAAU7N,QAAQqQ,YAClB,IAAMX,GAAkBxB,EAAc,GAAKJ,EAAUjT,OACrDsT,EAAeuB,e,+KCnQbrC,EAAe,YAAO,IAAgB,IAGtCC,EAAmB,YAAO,IAAoB,CAClDzQ,MAAO,IAAaC,WAAWgG,QAG3BwC,EAAO,IAAO9I,IAAI,CACtBtB,SAAU,WAAYa,MAAO,SAGzBuU,EAAe,IAAO9T,IAAI,CAC9BC,QAAS,OACTvB,SAAU,QACV+F,OAAQ,IACR5E,IAAK,IACL6E,KAAM,EACNkL,cAAe,OACfzQ,OAAQ,QACRI,MAAO,QACPgC,QAAS,CAAEM,GAAI,QACf0D,eAAgB,aAGZwO,EAAe,YAAO,IAAW,CACrCnE,cAAe,MACftK,UAAW,gBACXjF,MAAO,IAAaC,WAAWgG,MAC/BlF,YAAa,OACbZ,OAAQ,YAGJwT,EAAgB,IAAOhU,IAAI,CAC/BtB,SAAU,QACV+F,OAAQ,IACR2D,gBAAiB,IAAa9H,WAAW8F,MACzCvG,IAAK,IACL+P,cAAe,MACfnQ,SAAU,SACVN,OAAQ,QACRI,MAAO,QACPsQ,oBAAqB,YAGjBG,EAAY,YAAO,IAAc,CACrC7Q,OAAQ,OACRI,MAAO,OACPoF,UAAW,QACX1E,QAAS,UAGLgU,EAAc,IAAOjU,IAAI,CAC7Bb,OAAQ,oBACRI,MAAO,QACPoF,UAAW,UASPuP,EAAc,YAAO,IAAc,CACvC/U,OAAQ,OACRI,MAAO,OACPoF,UAAW,UAIPwP,EAAc,YAAO,IAAqB,CAC9C1P,OAAQ,EACRmL,cAAe,OACfzQ,OAAQ,OACRI,MAAO,OACPU,QAAS,OACTsB,QAAS,CAAEM,GAAI,QACf4D,WAAY,WACZQ,IAAK,MACLb,cAAe,SACfG,eAAgB,aAGZ6O,EAAiB,YAAO,IAAqB,CACjD3P,OAAQ,EACRmL,cAAe,OACfzQ,OAAQ,OACRI,MAAO,OACPU,QAAS,OACTsB,QAAS,CAAEM,GAAI,QACf4D,WAAY,WACZQ,IAAK,MACLb,cAAe,SACfG,eAAgB,eAGZ8O,EAAiB,YAAO,IAAW,CACvCzE,cAAe,MACfpP,OAAQ,YAGJiQ,EAAe,YAAO,IAAqB,CAC/ChM,OAAQ,EACRmL,cAAe,OACfzQ,OAAQ,OACRI,MAAO,OACPU,QAAS,OACTsB,QAAS,CAAEM,GAAI,QACf4D,WAAY,aACZQ,IAAK,MACLb,cAAe,SACfG,eAAgB,kBAGL+O,EAAqB,SAAC5W,G,QAMzB4T,EAAA,EAAAA,UAAWvD,EAAA,EAAAA,KAAMwD,EAAA,EAAAA,YAAaC,EAAA,EAAAA,gBAChC,uCAACE,EAAA,KAAaC,EAAA,KACd,uCAAC4C,EAAA,KAAcC,EAAA,KACf,wCAAC5C,EAAA,KAAUC,EAAA,KACXR,EAAY,iBAAY,MAC1BoD,EAAmB,iBAAuB,MAC1CC,EAAwB,iBAAuB,MAC7CC,EAAgB,iBAAO,IACvBvC,EAA6B,OAApB,EAAY,QAAZ,EAAGd,SAAS,eAAEjT,QAAM,EAAI,EAmBvC,OAjBA,qBAAU,WACR,IAAIgU,GAAY,EAChB,OAAkB,IAAdD,GAAoBR,EAIpB2C,IAAiBnC,GAAaC,GAChCsC,EAAcnR,QAAQkO,GAAakD,eAAe,CAChDC,SAAU,SACVC,MAAO,QACPC,OAAQ,YAEH,WAAM,OAAAP,GAAgB,WAAM,cAE9B,WAAQnC,GAAY,GAXlB,eAYR,CAACkC,EAAc3C,IAGhB,kBAAC9I,EAAI,KACF8I,GACC,oCACE,kBAACkC,EAAY,KACX,kBAACC,EAAY,CACXnR,QAAS,WACPiP,GAAY,OAIlB,kBAACmC,EAAa,CACZ1P,IAAKmQ,GAEL,kBAAC,IAAOnV,IAAG,CAACgF,IAAKoQ,GACdpD,EAAUxM,KAAI,SAAC2N,EAAMvL,GACpB,OACE,kBAAC8I,EAAS,CACR/K,IAAKiC,EACL9D,IAAKqP,EAAKF,SACVrU,OAAQ,IAAOsU,SACfwC,OAAQ,WACNR,GAAgB,WAAM,OAAAD,EAAe,MAEvCU,SAAU,SAACC,GAAQ,OAAAP,EAAcnR,QAAQ0D,GAASgO,WAQhE,kBAAC,IAAU,CACT/B,cAAe,EACfC,aAAc,EACdrS,WAAW,EACXsS,SAAS,EACTC,UAAWjC,EACXkC,cAAe,WAAM,OAAA5B,EAAeN,EAAU7N,QAAQgQ,cACtDC,WAAYrB,EAAY,EACxB+C,gBAAiB/C,EACjBsB,UAAU,EACV0B,gBAAgB,EAChBC,uBAAwB,CACtB3W,SAAU,WACVoB,OAAQ,OACR4E,KAAM,OACND,OAAQ,GAEVkP,SAAS,GAERrC,EAAUxM,KAAI,SAAC2N,EAAMvL,GAAU,OAC9B,yBAAKjC,IAAKiC,EAAOjJ,UAAU,gBACV,UAAdwU,EAAKvP,KACJ,kBAAC+Q,EAAW,KACV,kBAAC,IAAK,CACJnW,aAAc,CACZ,CACEU,IAAkC,OAA7BiU,EAAK6C,oBAA+B7C,EAAK6C,oBAAsB7C,EAAKK,SACzE5P,KAAM,MACNS,OAAQ,QAGZsI,aAAc,CAAEzN,IAAKiU,EAAKF,UAC1BxR,WAAW,EACXqL,cAAc,EACdxN,MAAI,KAIR,kBAACsV,EAAW,CAAC9Q,IAAKqP,EAAKF,SAAUrU,OAAQ,IAAO6U,YAKxD,kBAACoB,EAAW,KACTpG,GACCA,EAAKE,MAAM,EAAG,GAAGnJ,KAAI,SAACqJ,EAAKjH,GAAU,OACnC,kBAAC,IAAK,CACJjC,IAAKiC,EACL5I,IAAK,CAAE8J,gBAAiB,IAAa9H,WAAW8F,MAAO/F,MAAO,YAAa8N,EAAI6E,KAAM7E,EAAI9N,SAExF8N,EAAIA,SAIb,kBAACiG,EAAc,KACb,kBAACC,EAAc,CACbzR,QAAS,WACPiP,GAAY,OAIlB,kBAACpB,EAAY,OACRe,GACD,kBAAC,IAAOlS,IAAG,CAAChB,IAAG,EAA+CsE,QAAS4O,GACpED,EACC,kBAACT,EAAgB,MAEjB,kBAACD,EAAY,U,EAJA,CAAEjB,cAAe,MAAOpP,OAAQ,Y,8HCxOrD+U,EAAiB,IAAOvV,IAAI,CAChCtB,SAAU,WACVS,OAAQ,OACRqW,aAAc,SACdC,aAAc,WAGVC,EAAc,IAAO1V,IAAI,CAC7BtB,SAAU,WACViX,UAAW,SACXpW,MAAO,OACPW,UAAW,UAGP0V,EAAmB,IAAO5V,IAAI,CAClCtB,SAAU,WACVoB,OAAQ,OACRP,MAAO,SAGHsW,EAAe,YAAO,IAAW,CACrCF,UAAW,WAGPG,EAAgB,IAAO9V,IAAI,CAC/B2V,UAAW,WAGPI,EAAa,IAAO/V,IAAI,CAC5BtB,SAAU,WACV2B,MAAO,IAAaC,WAAW8F,QAG3BmI,EAAQ,IAAOC,MAAG,GACtBjP,MAAO,QACPJ,OAAQ,UACP,UAAY,KAAsB,CACjCI,MAAO,OACPJ,OAAQ,Q,IAgGG,IA5FmB,SAACzB,G,cACzBsY,EAAA,EAAAA,SAAUC,EAAA,EAAAA,YAAalV,EAAA,EAAAA,UAAWiB,EAAA,EAAAA,MACpCkU,EAA6B,OAAnB,EAAW,QAAX,EAAGF,SAAQ,eAAE3X,QAAM,EAAI,EACvC,OAAI4X,EAEA,yBAAKhY,UAAU,QACb,yBAAKA,UAAW,YAAkB,GAAKP,EAAMyY,eAAsB,GAAL,GAAUzY,EAAMyY,eAAiD,GAAhC,YAA2B,KACxH,6BACE,kBAAC,IAAU,CACThD,cAAepS,EAAY,IAAM,OACjCqV,eAAgBrV,EAAY,EAAI,EAChCqS,aAAcrS,EAAY,EAAI,GAC9BA,UAAWA,EACXsS,SAAUtS,GAAamV,EAAa,EACpCxC,UAAU,EACVC,SAAS,EACT0C,UAAU,EACVC,gBAAgB,EAChBC,YAAavU,EACbwU,UAAWzV,GAAamV,EAAa,GAE5B,QAF6B,EAErCF,SAAQ,eAAElR,KAAI,SAACmK,EAAS/H,GAAU,OACjC,kBAAC,IAAc,CAACjJ,UAAU,eAAegH,IAAKiC,EAAO+H,QAASA,WAS1E,kBAAC8G,EAAU,KACT,kBAAC,IAAU,CACT5C,cAAe,EACfC,aAAc,EACdrS,UAAWA,EACXsS,SAAS,EACTI,YAAU,EACVC,UAAU,EACV2B,uBAAwB,CACtB3W,SAAU,WACVoB,OAAQ,QACR4E,KAAM,eAAkC,GAAlBwR,EAAa,GAA8B,GAAlBA,EAAa,IAAU,aACtEzR,OAAQ,GAEV0Q,gBAAyB,QAAV,EAAEa,SAAQ,eAAE3X,OAC3BoY,gBAAiB,IAAanW,WAAW8F,MACzCuN,SAAS,GAEA,QAFI,EAEZqC,SAAQ,eAAElR,KAAI,SAACmK,EAAS/H,G,MAAU,OACjC,yBAAKjC,IAAKiC,EAAOjJ,UAAU,gBACzB,kBAAC,IAA0B,CACzBJ,WACEkD,EACI,GAAG,YAAoB,IAAM2V,qBAC7B,GAAG,YAAoB,IAAMC,eAEnCzY,OAAQ,IAAO0Y,UACfhZ,MAAOqR,EAAQE,gBACfrR,aAAcmR,EAAQI,uBACtBrR,WAAY+C,EAAY,EAAI,GAE5B,kBAACwU,EAAc,CAACtX,UAAU,OAAOgH,IAAKiC,GACpC,kBAACwO,EAAW,CAACzX,UAAW,YAAkB,GAAI,IAC5C,kBAAC6X,EAAa,KACZ,kBAACvH,EAAK,CAACnL,IAAiB,QAAd,EAAE6L,EAAQO,YAAI,eAAEhR,QAG9B,kBAACsX,EAAa,CAAC7X,UAAW,YAAkB,GAAI,EAAG,YAA2B,KAC5E,kBAAC,IAAE,KAAEgR,EAAQhN,UAEf,kBAAC2T,EAAgB,KACf,yBAAK3X,UAAU,QACb,yBAAKA,UAAW,YAAkB,GAAI,EAAG,YAA2B,KAClE,kBAAC4X,EAAY,CACXnV,SAAU,IAAe+O,QACzBb,WAAY,IAAqBc,WAEhCT,EAAQtM,mB,2IC7IrBkU,E,sCAAZ,SAAYA,GACV,iCACA,6BAFF,CAAYA,MAAiB,KAK7B,IAAMC,EAAqB,IAAO5O,MAAM,CACtC6O,OAAQ,CAAElV,GAAI,CAAEtC,MAAO,IACvBgC,QAAS,CAAEM,GAAI,GACf8L,SAAU,EACVqJ,WAAY,YACZrI,UAAW,SACXhO,WAAY,IACZD,SAAU,OACVkO,WAAY,SAGDqI,EAAc,aACzB,SACEvZ,GAYE,IAAA8K,EAAA,EAAAA,MACA0O,EAAA,EAAAA,gBACAC,EAAA,EAAAA,SACAC,EAAA,EAAAA,WACAvU,EAAA,EAAAA,UACA,IAAAwU,gBAAA,IAAW,EAAX,KACA,IAAAC,gBAAA,IAAW,EAAX,KACA,IAAAC,mBAAA,IAAc,EAAd,gBAEF,OACE,kBAAC,IAAOjY,IAAG,CACThB,IAAK,CACHiB,MAAO,OACPwX,OACEQ,IAAgBV,EAAkBW,YAC9B,CAAE3V,GAAI,CAAEtC,MAAO,MAAOiF,MAAO,QAASnE,MAAO,IAAaC,WAAWgG,QACrEiR,IAAgBV,EAAkBY,UAClC,CAAE3X,OAAQ,CAAEP,MAAO,MAAOiF,MAAO,QAASnE,MAAO,IAAaC,WAAWgG,QACzE,GACNvI,aAAcwZ,IAAgBV,EAAkBW,YAAc,YAASE,EACvEhZ,SAAU,WACV6C,QAAS,CACPmB,EAAM2U,EAAQ,KACdhP,EAAMiP,EAAQ,MAEhBrX,QAAS,OACTgG,IAAK,SAGNmR,EACD,kBAACN,EAAkB,CACjBtO,MAAOA,EACPmP,YAAaT,EACbxO,SAAUyO,IAEXtU,MAMH+U,EAAc,IAAO5V,MAAM,CAC/BtD,SAAU,WACVuB,QAAS,eACTV,MAAO,OACPJ,OAAQ,OACR0Y,aAAc,OACd9Z,aAAc,OACdyC,OAAQ,UACRuW,OAAQ,CACNlV,GAAI,CACFtC,MAAO,MACPiF,MAAO,QACPnE,MAAO,IAAaC,WAAWgG,UAK/BwR,EAAc,IAAO5P,MAAM,CAC/BxJ,SAAU,WACVmB,IAAK,WACL6E,KAAM,aAGFqT,EAAe,IAAO/X,IAAI,CAC9BtB,SAAU,WACV8B,OAAQ,UACRX,IAAK,EACL6E,KAAM,EACNsT,MAAO,EACPlY,OAAQ,EACR/B,aAAc,OACd,UAAW,CACTW,SAAU,WACV6I,QAAS,KACTpI,OAAQ,OACRI,MAAO,OACPmF,KAAM,MACN5E,OAAQ,MACR/B,aAAc,SAILka,EAAS,aACpB,SAAC,G,IACC,IAAAC,oBAAA,IAAe,GAAf,EACAxP,EAAA,EAAAA,SAKM,uCAACF,EAAA,KAAO2P,EAAA,KACR,uCAACC,EAAA,KAAmB,KAE1B,qBAAU,WACRD,EAASC,KACR,CAACA,IAGJ,OACE,kBAACR,EAAW,CACVtZ,IAAK,CACH+Z,mBAJsB,MAKtBtB,OAAQ,CACNlV,GAAI,CACFxB,MAAOmI,EAAQ,IAAa8P,YAAYC,MAAQ,IAAajY,WAAWgG,UAK9E,kBAACwR,EAAW,CACV5U,KAAK,WACLsV,QAAShQ,EACTE,SAAU,SAACmE,GACTsL,GAAS,SAACM,GAAiB,OAACA,KAC5B/P,EAASmE,EAAMC,cAAc0L,YAGjC,kBAACT,EAAY,CACXzZ,IAAK,CACH+Z,mBAtBoB,MAuBpBjQ,gBAAiBI,EAAQ,IAAa8P,YAAYC,MAAQ,IAAajY,WAAW8F,MAClF,UAAW,CACTgC,gBAAiBI,EAAQ,IAAalI,WAAW8F,MAAQ,IAAa9F,WAAWgG,MACjF+R,mBA1BkB,MA2BlB/S,UAAWkD,EAAQ,wBAAqBkP,W,gHC1ItD,SAASgB,EAAyBC,EAAyCja,GACzE,IAAMka,EAAM,SAAWD,EAAME,SAAWna,EAASoa,OAAOD,UAClDE,EACJ,OAASxP,KAAKyP,IAAKta,EAASoa,OAAOD,SAAWtP,KAAK0P,GAAM,MAAUN,EAAMO,UAAYxa,EAASoa,OAAOI,WACvG,OAAO3P,KAAK4P,KAAKJ,EAAOA,EAAOH,EAAMA,GAGhC,SAASQ,EAAwBC,EAA8C3a,G,MACpF,OAAU,QAAN,EAAA2a,SAAM,eAAEhb,QAAS,EACZgb,EAGFA,EAAOC,MAAK,SAACC,EAAwBC,GAC1C,IAAMC,EAAQf,EAAyBa,EAAG7a,GACpCgb,EAAQhB,EAAyBc,EAAG9a,GAC1C,OAAI+a,IAAUC,EACL,EAEFD,EAAQC,EAAQ,GAAK,KAIhC,SAAeC,EAAsBN,EAAsB3a,G,iGAyCzD,OAxCIkb,EAAU,IAAIC,OAAOC,KAAKC,sBACxBC,EAAoB,SAACrB,GACzB,WAAIsB,SAAQ,SAACC,EAASC,GACpBP,EAAQI,kBACN,CACEI,QAAS,CAAC,IAAIP,OAAOC,KAAKO,OAAO3b,EAASoa,OAAOD,SAAUna,EAASoa,OAAOI,YAC3EoB,aAAc,CAAC,IAAIT,OAAOC,KAAKO,OAAO1B,EAAME,SAAUF,EAAMO,YAC5DqB,WAAYV,OAAOC,KAAKU,WAAWC,QACnCC,WAAYb,OAAOC,KAAKa,WAAWC,QAY3C,SAAuBV,EAAmCC,GACxD,OAAO,SAACU,EAA8CC,GAChDA,IAAWjB,OAAOC,KAAKiB,qBAAqBC,GAI5CH,EAASI,KAAK5c,QAAU,EAC1B8b,EAAO,IAAIe,MAAM,sDAIfL,EAASI,KAAK,GAAGE,SAAS9c,QAAU,EACtC8b,EAAO,IAAIe,MAAM,0DAInBhB,EAAQW,EAASI,KAAK,GAAGE,SAAS,GAAGC,SAAS5S,OAb5C2R,EAAO,IAAIe,MAAM,0CAA0CJ,KAb3DO,CAAcnB,EAASC,QAIvBmB,EAAyBjC,EAAOvU,KAAI,SAAC6T,GACzC,OAAOqB,EAAkBrB,MAG3BU,EAAS,GAsBF,CAAP,EAAOY,QAAQsB,IAAID,UASd,SAAeE,EAAiBnC,EAAsB3a,EAA+B0c,G,uFAC1F,MAAO,CAAP,EAAOzB,EAAsBN,EAAQ3a,GAClC+c,MAAK,SAACC,GACL,OAAOrC,EAAOxU,QAAO,SAAC8T,EAAO3T,GAC3B,OAAO0W,EAAe1W,IAA2B,IAAXoW,QAGzCO,OAAM,WACL,OAdN,SAAmCtC,EAAsB3a,EAA+B0c,GACtF,OAAO/B,EAAOxU,QAAO,SAAC8T,GACpB,OAAOD,EAAyBC,EAAOja,IAAa0c,KAY3CQ,CAA0BvC,EAAQ3a,EAAU0c,e,oBCrGzD,IAAIlO,EAAQ,EAAQ,GAEpB,SAAS2O,EAAYne,GACjB,OAAOwP,EAAMC,cAAc,MAAMzP,EAAM,CAACwP,EAAMC,cAAc,IAAI,CAAC,GAAK,mBAAmB,SAAW,2BAA2B,IAAM,GAAGD,EAAMC,cAAc,OAAO,CAAC,GAAK,aAAa,EAAI,ofAAof,OAAS,kBAAkBD,EAAMC,cAAc,OAAO,CAAC,IAAM,GAAGD,EAAMC,cAAc,WAAW,CAAC,GAAK,sBAAsBD,EAAMC,cAAc,OAAO,CAAC,KAAO,OAAO,EAAI,sBAG31B0O,EAAWzO,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,YAAY,KAAO,QAEnFC,EAAOC,QAAUuO,EAEjBA,EAAWtO,QAAUsO,G,oBCVrB,IAAI3O,EAAQ,EAAQ,GAEpB,SAAS4O,EAASpe,GACd,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,kBAAkB,UAAY,2BAA2B,OAAS,OAAO,YAAc,KAAK,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,0CAA0C,GAAK,eAAe,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,aAAa,GAAK,SAAS,cAAgB,SAAS,UAAY,qBAAqB,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,cAAc,GAAK,cAAc,cAAgB,SAAS,UAAY,qBAAqB,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,cAAc,GAAK,gBAAgB,cAAgB,SAAS,UAAY,qBAAqB,IAAM,QAG7wB2O,EAAQ1O,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE7DC,EAAOC,QAAUwO,EAEjBA,EAAQvO,QAAUuO,G,oBCVlB,IAAI5O,EAAQ,EAAQ,GAEpB,SAAS6O,EAAWre,GAChB,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,SAAS,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,gBAAgB,UAAY,gCAAgCD,EAAMC,cAAc,IAAI,CAAC,GAAK,kBAAkB,UAAY,6BAA6B,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,qpDAAqpD,GAAK,eAAe,KAAO,UAAU,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,eAAe,OAAS,OAAO,YAAc,IAAI,GAAK,SAAS,GAAK,QAAQ,EAAI,SAAS,IAAM,SAGlrE4O,EAAU3O,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE/DC,EAAOC,QAAUyO,EAEjBA,EAAUxO,QAAUwO,G,oBCVpB,IAAI7O,EAAQ,EAAQ,GAEpB,SAAS8O,EAASte,GACd,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,kBAAkB,UAAY,2BAA2B,OAAS,OAAO,YAAc,KAAK,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,0CAA0C,GAAK,eAAe,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,YAAY,GAAK,SAAS,cAAgB,SAAS,IAAM,QAG/d6O,EAAQ5O,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE7DC,EAAOC,QAAU0O,EAEjBA,EAAQzO,QAAUyO,G,oBCVlB,IAAI9O,EAAQ,EAAQ,GAEpB,SAAS+O,EAAUve,GACf,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,mBAAmB,UAAY,uBAAuB,OAAS,OAAO,YAAc,KAAK,CAACD,EAAMC,cAAc,OAAO,CAAC,GAAK,eAAe,EAAI,qCAAqC,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,kHAAkH,GAAK,SAAS,cAAgB,SAAS,IAAM,IAAID,EAAMC,cAAc,IAAI,CAAC,GAAK,OAAO,SAAW,UAAU,UAAY,6BAA6B,IAAM,GAAG,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,oiBAAoiB,GAAK,eAAe,cAAgB,QAAQ,UAAY,0BAA0B,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,4EAA4E,GAAK,UAAU,cAAgB,QAAQ,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,GAAK,UAAU,cAAgB,SAAS,EAAI,kCAAkC,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,sBAAsB,GAAK,eAAe,cAAgB,SAAS,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,sBAAsB,GAAK,iBAAiB,cAAgB,SAAS,IAAM,UAGvzD8O,EAAS7O,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE9DC,EAAOC,QAAU2O,EAEjBA,EAAS1O,QAAU0O,G,oBCVnB,IAAI/O,EAAQ,EAAQ,GAEpB,SAASgP,EAAOxe,GACZ,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,wBAAwB,UAAY,uBAAuBD,EAAMC,cAAc,IAAI,CAAC,GAAK,YAAY,UAAY,oBAAoB,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,iFAAiF,GAAK,eAAe,OAAS,OAAO,YAAc,IAAI,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,KAAO,OAAO,GAAK,SAAS,GAAK,SAAS,EAAI,IAAI,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,KAAO,OAAO,GAAK,SAAS,GAAK,SAAS,EAAI,IAAI,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,KAAO,OAAO,GAAK,SAAS,GAAK,SAAS,EAAI,IAAI,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,GAAK,SAAS,OAAS,OAAO,YAAc,IAAI,cAAgB,SAAS,EAAI,gCAAgC,IAAM,SAGl8B+O,EAAM9O,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE3DC,EAAOC,QAAU4O,EAEjBA,EAAM3O,QAAU2O,G,oBCVhB,IAAIhP,EAAQ,EAAQ,GAEpB,SAASiP,EAAOze,GACZ,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,uBAAuB,UAAY,0BAA0BD,EAAMC,cAAc,IAAI,CAAC,GAAK,YAAY,UAAY,oBAAoB,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,iFAAiF,GAAK,eAAe,OAAS,OAAO,YAAc,IAAI,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,KAAO,OAAO,GAAK,SAAS,GAAK,SAAS,EAAI,IAAI,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,GAAK,SAAS,OAAS,OAAO,YAAc,IAAI,cAAgB,SAAS,EAAI,gCAAgC,IAAM,SAGlvBgP,EAAM/O,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE3DC,EAAOC,QAAU6O,EAEjBA,EAAM5O,QAAU4O,G,oBCVhB,IAAIjP,EAAQ,EAAQ,GAEpB,SAASkP,EAAO1e,GACZ,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,0BAA0B,UAAY,0BAA0BD,EAAMC,cAAc,IAAI,CAAC,GAAK,YAAY,UAAY,oBAAoB,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,iFAAiF,GAAK,eAAe,OAAS,OAAO,YAAc,IAAI,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,KAAO,OAAO,GAAK,SAAS,GAAK,SAAS,EAAI,IAAI,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,KAAO,OAAO,GAAK,SAAS,GAAK,SAAS,EAAI,IAAI,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,GAAK,SAAS,OAAS,OAAO,YAAc,IAAI,cAAgB,SAAS,EAAI,gCAAgC,IAAM,SAG91BiP,EAAMhP,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE3DC,EAAOC,QAAU8O,EAEjBA,EAAM7O,QAAU6O,G,oBCVhB,IAAIlP,EAAQ,EAAQ,GAEpB,SAASmP,EAAS3e,GACd,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,kBAAkB,UAAY,2BAA2B,OAAS,OAAO,YAAc,KAAK,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,0CAA0C,GAAK,eAAe,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,4FAA4F,GAAK,SAAS,IAAM,QAGthBkP,EAAQjP,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE7DC,EAAOC,QAAU+O,EAEjBA,EAAQ9O,QAAU8O,G,oBCVlB,IAAInP,EAAQ,EAAQ,GAEpB,SAASoP,EAAU5e,GACf,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,uBAAuB,UAAY,sBAAsB,OAAS,QAAQ,CAACD,EAAMC,cAAc,IAAI,CAAC,GAAK,cAAc,UAAY,yBAAyB,IAAM,GAAGD,EAAMC,cAAc,OAAO,CAAC,EAAI,iDAAiD,GAAK,eAAe,YAAc,OAAOD,EAAMC,cAAc,IAAI,CAAC,GAAK,IAAI,UAAY,oBAAoB,cAAgB,SAAS,YAAc,IAAI,IAAM,GAAG,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,2BAA2B,GAAK,UAAU,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,2BAA2B,GAAK,eAAe,IAAM,UAGhwBmP,EAASlP,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE9DC,EAAOC,QAAUgP,EAEjBA,EAAS/O,QAAU+O,G,oBCVnB,IAAIpP,EAAQ,EAAQ,GAEpB,SAASqP,EAAS7e,GACd,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,0BAA0B,UAAY,uBAAuB,OAAS,OAAO,YAAc,KAAK,CAACD,EAAMC,cAAc,IAAI,CAAC,GAAK,IAAI,SAAW,UAAU,UAAY,oBAAoB,cAAgB,SAAS,IAAM,GAAG,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,2BAA2B,GAAK,UAAU,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,2BAA2B,GAAK,eAAe,IAAM,MAAMD,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,GAAK,KAAK,GAAK,KAAK,EAAI,KAAK,IAAM,QAG3pBoP,EAAQnP,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE7DC,EAAOC,QAAUiP,EAEjBA,EAAQhP,QAAUgP,G,oBCVlB,IAAIrP,EAAQ,EAAQ,GAEpB,SAASsP,EAAQ9e,GACb,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,qBAAqB,UAAY,oBAAoB,OAAS,OAAO,YAAc,KAAK,CAACD,EAAMC,cAAc,IAAI,CAAC,GAAK,YAAY,UAAY,mBAAmB,IAAM,GAAG,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,iFAAiF,GAAK,eAAe,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,GAAK,SAAS,cAAgB,SAAS,EAAI,gCAAgC,IAAM,MAAMD,EAAMC,cAAc,IAAI,CAAC,GAAK,IAAI,UAAY,iBAAiB,cAAgB,SAAS,IAAM,GAAG,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,2BAA2B,GAAK,UAAU,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,2BAA2B,GAAK,eAAe,IAAM,UAG13BqP,EAAOpP,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE5DC,EAAOC,QAAUkP,EAEjBA,EAAOjP,QAAUiP,G,oBCVjB,IAAItP,EAAQ,EAAQ,GAEpB,SAASuP,EAAU/e,GACf,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,2BAA2B,UAAY,wBAAwB,OAAS,OAAO,YAAc,KAAK,CAACD,EAAMC,cAAc,IAAI,CAAC,GAAK,IAAI,SAAW,UAAU,UAAY,oBAAoB,cAAgB,SAAS,IAAM,GAAG,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,2BAA2B,GAAK,UAAU,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,2BAA2B,GAAK,eAAe,IAAM,MAAMD,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,GAAK,KAAK,GAAK,KAAK,EAAI,OAAO,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,GAAK,eAAe,EAAI,oCAAoC,IAAM,QAGjwBsP,EAASrP,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE9DC,EAAOC,QAAUmP,EAEjBA,EAASlP,QAAUkP,G,oBCVnB,IAAIvP,EAAQ,EAAQ,GAEpB,SAASwP,EAAQhf,GACb,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,qBAAqB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAW,CAACD,EAAMC,cAAc,OAAO,CAAC,GAAK,eAAe,EAAI,uCAAuC,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,0MAA0M,GAAK,SAAS,cAAgB,SAAS,IAAM,IAAID,EAAMC,cAAc,IAAI,CAAC,GAAK,IAAI,UAAY,oBAAoB,cAAgB,SAAS,IAAM,GAAG,CAACD,EAAMC,cAAc,OAAO,CAAC,EAAI,2BAA2B,GAAK,UAAU,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,2BAA2B,GAAK,eAAe,IAAM,SAGnzBuP,EAAOtP,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE5DC,EAAOC,QAAUoP,EAEjBA,EAAOnP,QAAUmP,G,oBCVjB,IAAIxP,EAAQ,EAAQ,GAEpB,SAASyP,EAASjf,GACd,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,8BAA8B,UAAY,4BAA4B,CAACD,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,OAAS,OAAO,YAAc,IAAI,GAAK,KAAK,GAAK,KAAK,EAAI,OAAO,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,GAAK,eAAe,OAAS,OAAO,YAAc,IAAI,EAAI,oCAAoC,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,KAAO,OAAO,SAAW,UAAU,GAAK,KAAK,GAAK,KAAK,EAAI,IAAI,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,eAAe,KAAO,OAAO,SAAW,UAAU,GAAK,KAAK,GAAK,KAAK,EAAI,IAAI,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,iBAAiB,KAAO,OAAO,SAAW,UAAU,GAAK,KAAK,GAAK,KAAK,EAAI,IAAI,IAAM,QAG92BwP,EAAQvP,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE7DC,EAAOC,QAAUqP,EAEjBA,EAAQpP,QAAUoP,G,oBCVlB,IAAIzP,EAAQ,EAAQ,GAEpB,SAAS0P,EAASlf,GACd,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,6BAA6B,UAAY,0BAA0B,CAACD,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,OAAS,OAAO,YAAc,IAAI,GAAK,KAAK,GAAK,KAAK,EAAI,OAAO,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,KAAO,OAAO,SAAW,UAAU,GAAK,KAAK,GAAK,KAAK,EAAI,IAAI,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,GAAK,eAAe,OAAS,OAAO,YAAc,IAAI,EAAI,oCAAoC,IAAM,QAGnnByP,EAAQxP,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE7DC,EAAOC,QAAUsP,EAEjBA,EAAQrP,QAAUqP,G,oBCVlB,IAAI1P,EAAQ,EAAQ,GAEpB,SAAS2P,EAASnf,GACd,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,gCAAgC,UAAY,4BAA4B,CAACD,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,OAAS,OAAO,YAAc,IAAI,GAAK,KAAK,GAAK,KAAK,EAAI,OAAO,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,KAAO,OAAO,SAAW,UAAU,GAAK,OAAO,GAAK,KAAK,EAAI,IAAI,IAAM,IAAID,EAAMC,cAAc,SAAS,CAAC,GAAK,UAAU,KAAO,OAAO,SAAW,UAAU,GAAK,OAAO,GAAK,KAAK,EAAI,IAAI,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,GAAK,eAAe,OAAS,OAAO,YAAc,IAAI,EAAI,oCAAoC,IAAM,QAGlvB0P,EAAQzP,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE7DC,EAAOC,QAAUuP,EAEjBA,EAAQtP,QAAUsP,G,oBCVlB,IAAI3P,EAAQ,EAAQ,GAEpB,SAAS4P,EAAUpf,GACf,OAAOwP,EAAMC,cAAc,MAAMzP,EAAMwP,EAAMC,cAAc,IAAI,CAAC,GAAK,oBAAoB,OAAS,OAAO,YAAc,IAAI,KAAO,OAAO,SAAW,WAAWD,EAAMC,cAAc,IAAI,CAAC,GAAK,cAAc,UAAY,yBAAyB,OAAS,OAAO,YAAc,KAAK,CAACD,EAAMC,cAAc,OAAO,CAAC,GAAK,eAAe,EAAI,uCAAuC,IAAM,IAAID,EAAMC,cAAc,OAAO,CAAC,EAAI,wLAAwL,GAAK,SAAS,cAAgB,SAAS,IAAM,QAGloB2P,EAAS1P,aAAe,CAAC,MAAQ,KAAK,OAAS,KAAK,QAAU,aAE9DC,EAAOC,QAAUwP,EAEjBA,EAASvP,QAAUuP,G,iMCPNjB,EAAa,YAAQ,IAAU,GAAI,I,OCE1CkB,EAAgB,CAAC,EAAG,EAAG,EAAG,EAAG,GAK7BjU,EAAO,IAAO9I,IAAI,CACtBC,QAAS,OAAQwF,WAAY,SAAUQ,IAAK,QAGxC+W,EAAa,IAAO5c,KAAK,CAC7BH,QAAS,OAAQwF,WAAY,SAAUtG,OAAQ,SAG3C8d,EAAS,YAAOC,EAAA,EAAmB,CACvC7c,MAAO,IAAaiY,YAAY6E,SAG5BC,EAAW,YAAOF,EAAA,EAAqB,CAC3C7c,MAAO,IAAaiY,YAAY6E,SAuBnB,EApBS,SAACzf,GACvB,IAAM2f,EAAe3f,EAAM2f,cAAgB,EAE3C,OACE,kBAACvU,EAAI,KACFiU,EAAcjY,KAAI,SAAAwY,GACjB,OACE,kBAACN,EAAU,CAAC/X,IAAKqY,GACdD,GAAgBC,EACf,kBAACL,EAAM,MAEP,kBAACG,EAAQ,YClBjB,EAAO,IAAOpd,IAAI,CACtBC,QAAS,OACTmF,cAAe,MACfK,WAAY,SACZQ,IAAK,SAGD+F,EAAQ,IAAOhM,IAAI,CACvBtB,SAAU,WACVuB,QAAS,OACTgG,IAAK,MACLR,WAAY,WAGR8X,EAAkB,YAAOvR,EAAO,CACpC5G,cAAe,SACfK,gBAAYiS,IAqBC,MAlBf,SAAiB,G,QAAE8F,EAAA,EAAAA,OAAQC,EAAA,EAAAA,OAAQC,EAAA,EAAAA,gBAAiB,IAAAC,kBAAA,IAAa,GAAb,EAAoB,IAAA/a,eAAA,IAAU,EAAV,OAChEgb,EAAeD,EAAaJ,EAAkBvR,EAEpD,OACE,kBAAC,EAAI,CAAC1N,IAAG,eAAQsE,GAAW,CAAEpC,OAAQ,gBAC3B,QAAP,EAACgd,SAAM,eAAEK,cAAe,kBAAC,IAAc,CAAC/P,WAAS,GAAE0P,EAAOK,aAC5D,kBAACD,EAAY,CAAChb,QAASA,GACrB,kBAAC,EAAe,CAACya,aAAcI,IAC/B,kBAAC,IAAc,CACb/c,SAAU,IAAeod,QACzBhQ,WAAS,EACTxP,IAAK,CAAE+B,MAAO,IAAaC,WAAWC,WACnCmd,EAAe,KAAU,QAAV,EAAIF,SAAM,eAAEO,a,iBCxClCC,EAAgB,IAAOhe,IAAI,CAC/BC,QAAS,OACT0F,SAAU,OACVM,IAAK,QAGDgY,EAAO,YAAO,IAAW,CAC7B/d,UAAW,SAiCE,I,IAAA,EA9Bf,SAA2B,G,MAAEge,EAAA,EAAAA,kBACrB,uCAACC,EAAA,KAAuBC,EAAA,KAE9B,OACE,oCACE,kBAACJ,EAAa,KACXE,EAAkBpZ,KAAI,SAACuZ,EAAUnX,GAAU,OAC1C,kBAAC,IAAW,CACVjC,IAAKiC,EACLvE,KAAM0b,EAASC,KACf1b,QAAS,WACPwb,EAAyBlX,IAE3B/H,OAAQ,IAAasD,MACrB8b,SAAUrX,IAAUiX,EACpBrb,MAAO,IAAYC,aACnBxB,QAAS,CAAEmB,EAAG,UAIpB,kBAACub,EAAI,CACHvd,SAAU,IAAe+O,QACzBb,WAAY,IAAqBc,WAEQ,QAFC,EAEzCwO,EAAkBC,UAAsB,eAAEK,e,wBCG7CC,EAAkB,IAAOze,IAAI,CACjCP,SAAU,SACVQ,QAAS,OACTmF,cAAe,SACf6K,WAAY,CACVE,SAAU,aACVxG,SAAU,OAIR+U,EAAsB,YAAOC,EAAA,QAAM,CACvC9gB,WAAY,OACZoS,WAAY,CACVE,SAAU,aACVxG,SAAU,OAIRiV,EAAkB,IAAOhd,EAAE,CAC/BlB,SAAU,OACVC,WAAY,IACZiO,WAAY,SAGRiQ,EAAoB,IAAO7e,IAAI,CACnCnC,WAAY,OACZoC,QAAS,OACTmF,cAAe,WAEX0Z,EAAoB,IAAO9e,IAAI,CACnCC,QAAS,OACTgG,IAAK,QAGD8Y,EAAiB,IAAO/e,IAAI,CAChCnC,WAAY,OACZoC,QAAS,OACTmF,cAAe,WAEX4Z,EAAiB,IAAOhf,IAAI,CAChCC,QAAS,OACTgG,IAAK,QAGDyI,EAAU,YAAO,IAAI,CACzB9O,OAAQ,CAAEC,IAAK,OAAQC,OAAQ,UAG3BK,EAAW,IAAOC,KAAK,CAC3BH,QAAS,QACT0O,UAAW,SACXhO,WAAY,IACZD,SAAU,OACVue,cAAe,SACfrf,OAAQ,CAAEiC,GAAI,OACdxB,MAAO,IAAaC,WAAWC,SAC/BC,OAAQ,UACRoO,WAAY,OACZnO,cAAe,YACfP,UAAW,SAGPgf,EAAY,YAAO,IAAgB,CACvC/d,WAAY,QAGRge,GAAgB,YAAO,IAAoB,CAC/Che,WAAY,QAGRie,GAAa,IAAOpf,MAAG,GAC3BC,QAAS,OACTgG,IAAK,MACLrG,OAAQ,CAAEC,IAAK,QACfuF,cAAe,WACd,UAAY,KAAsB,CACjCA,cAAe,O,IAIbia,GAAwB,IAAOrf,MAAG,MACrC,UAAY,KAAuB,CAClCE,UAAW,Q,IAITof,GAA0B,YAAO,IAAW,CAChDpf,UAAW,SAwFE,I,GAAA,GArFf,SAAsBxC,GACpB,IAAM6hB,EAAW7hB,EAAM6T,YAAc4N,GAAgBD,EAC/C,wCAACM,EAAA,KAAqBC,EAAA,KAC5B,OACE,kBAACC,EAAA,EAAQ,MACN,SAAC3e,GAAuB,OACvB,yBAAK9C,UAAW,YAAkB,GAAI,GAAI8C,EAAY,GAAK,gCACzD,yBAAKuD,IAAK5G,EAAMiiB,YAAa1hB,UAAW,YAAkB,GAAI,MAC1D8C,GAAa,kBAAC,EAAO,CAACyc,OAAQ,CAAEK,YAAangB,EAAM8f,OAAOoC,iBAAkB7B,QAASrgB,EAAM8f,OAAOqC,cAAgBpC,OAAQ/f,EAAM+f,OAAQC,gBAAiBhgB,EAAMggB,kBAChK3c,GAAa,kBAAC,IAAc,CAAC+M,WAAS,GAAEpQ,EAAM8f,OAAOoC,kBACtD,kBAAClR,EAAO,CAAChO,SAAU,IAAeof,SAAUpiB,EAAMqiB,eAEpD,yBAAK9hB,UAAW,YAAkB,GAAI,IACnCP,EAAMsiB,aAAe,kBAACC,EAAA,EAAW,CAAClS,KAAMrQ,EAAMsiB,cAC9CtiB,EAAMwiB,oBACL,oCACGxiB,EAAMwiB,mBAAmB5d,OAAS,kBAACgd,GAAuB,CAAC5e,SAAU,IAAeyf,SAAUziB,EAAMwiB,mBAAmB5d,QACtH5E,EAAMwiB,mBAAmBE,MAAQ1iB,EAAM2iB,2BAA6B,oCACpE,kBAAC5B,EAAe,CAACngB,IAAK,CAAEgiB,UAAWd,EAAsB,QAAU,QAChE9hB,EAAMwiB,mBAAmBE,MAAQ,kBAAC1B,EAAmB,CACpD6B,UAAW3B,EACX4B,KAAM9iB,EAAMwiB,mBAAmBE,KAAKI,OAErC9iB,EAAM+iB,YAAc,kBAAC1B,EAAc,KAClC,kBAACC,EAAc,KAAC,8BAAOthB,EAAM8f,OAAOiD,W,KAAmB,8BAAO/iB,EAAM+iB,cAGrE/iB,EAAM2iB,0BAA4B,kBAACxB,EAAiB,KACnD,kBAACC,EAAiB,KAAC,8BAAOphB,EAAM8f,OAAOkD,0B,KAAkC,8BAAOhjB,EAAM2iB,yBAAyBM,UAC/G,kBAAC7B,EAAiB,KAAC,8BAAOphB,EAAM8f,OAAOoD,0B,KAAkC,8BAAOljB,EAAM2iB,yBAAyBQ,UAC9GnjB,EAAM2iB,yBAAyBS,SAAW,kBAAChC,EAAiB,KAAC,kBAACiC,EAAA,EAAC,CAAC1Z,GAAI3J,EAAM2iB,yBAAyBS,QAASE,qBAAqB,GAAOtjB,EAAM8f,OAAOhb,kBAI1J,kBAACrC,EAAQ,CAACyC,QAAS,WAAQ6c,GAAwBD,KAChDA,EAAsB9hB,EAAM8f,OAAOyD,cAAgBvjB,EAAM8f,OAAOhb,kBAM1E9E,EAAMwgB,mBAAqBxgB,EAAMwgB,kBAAkB7f,OAAS,GAC3D,kBAACghB,GAAqB,CAACphB,UAAW,YAAkB,GAAI,EAAG,YAA2B,KACpF,kBAAC,EAAiB,CAACigB,kBAAmBxgB,EAAMwgB,qBAGhD,kBAACkB,GAAU,CAACnhB,UAAW,YAAkB,GAAI,IAC1CP,EAAM8f,OAAO0D,qBAAuBxjB,EAAMyjB,UACzC,kBAACC,EAAA,EAAc,CACbxe,QAASlF,EAAM2jB,iBACfxe,UAAW,kBAAC0c,EAAQ,MACpBzc,MAAO,IAAYC,aACnBue,YAAa5jB,EAAM8f,OAAO0D,oBAC1BK,YAAa7jB,EAAM8f,OAAO0D,qBAEzBxjB,EAAM8f,OAAO0D,qBAGjBxjB,EAAM8f,OAAO0D,sBAAwBxjB,EAAMyjB,UAC1C,kBAAC,IAAW,CACVve,QAASlF,EAAM2jB,iBACfxe,UAAW,kBAAC0c,EAAQ,MACpBzc,MAAO,IAAYC,cAElBrF,EAAM8f,OAAO0D,2B,6BC5LxBM,GAAS,IAAOphB,KAAK,CACvBH,QAAS,QACTS,SAAU,GACVC,WAAY,IACZiO,WAAY,OACZV,aAAc,GACdzN,cAAe,cAGbghB,GAAW,IAAOrhB,KAAK,CACzBH,QAAS,QACTS,SAAU,GACVC,WAAY,IACZgV,UAAW,WAGT+L,GAAe,IAAO1hB,IAAI,CAC9BC,QAAS,OACTmF,cAAe,MACfa,IAAK,QAGD0b,GAAU,IAAO3hB,IAAI,CACzBC,QAAS,eACTlC,aAAc,EACdwD,QAAS,CAACM,GAAI,OACdtC,MAAO,QACP6I,gBAAiB,IAAa9H,WAAWmN,iBAGrCmU,GAAmB,IAAO5hB,IAAI,CAClC2V,UAAW,SACX5X,aAAc,IAGV8jB,GAAc,YAAOJ,GAAU,CACnCvhB,UAAW,EACXgO,aAAc,EACdzN,cAAe,YACfmO,WAAY,SAGRkT,GAAc,YAAOL,GAAU,CACnC7S,WAAY,SA0CCmT,GAvCqB,SAACrkB,G,MACzBskB,EAAA,EAAAA,SAAUjhB,EAAA,EAAAA,UAAWiB,EAAA,EAAAA,MAAOigB,EAAA,EAAAA,UAEpC,OAAID,EAKA,kBAAC,IAAO1iB,IAAG,CACPhB,IAAM2jB,EAAY,CACd/hB,UAAW+hB,GACX,IAEN,kBAACT,GAAM,KAAExf,GACT,kBAAC0f,GAAY,KACF,QADE,EACVM,SAAQ,eAAEld,KAAI,SAACod,EAAShb,GAAU,OACjC,kBAACya,GAAO,CAAC1c,IAAKiC,GACZ,kBAAC0a,GAAgB,KACf,kBAAC,KAAK,CACJxe,IAAK,CAAE5E,IAAK0jB,EAAQ3P,UACpBjL,MAAO4a,EAAQC,YACfC,IAAKF,EAAQC,YACbE,MAAO,KAAWC,YAClBpkB,OAAQ,KAAYqkB,eACpBvkB,WAAY+C,EAAY,EAAI,KAGhC,6BACI,kBAAC8gB,GAAW,KAAEK,EAAQC,aAEtB,kBAACL,GAAW,KAAEI,EAAQM,kBA1B3B,sC,GAOC,G,kECtCV,GAAO,IAAOxiB,MAAG,IACrBC,QAAS,OACTmF,cAAe,SACfK,WAAY,UACZQ,IAAK,OACLlI,aAAc,MACdqK,gBAAiB,IAAa9H,WAAWmN,eACzClM,QAAS,CAAEmB,EAAG,OAAQ7C,IAAK,OAAQC,OAAQ,UAC1C,UAAY,KAAsB,CACjCyB,QAAS,CAAEmB,EAAG,OAAQ7C,IAAK,OAAQC,OAAQ,S,KAKzC2iB,GAAS,IAAOziB,IAAI,CACxBC,QAAS,OACTmF,cAAe,MACfG,eAAgB,kBAGZmd,GAAS,IAAO1iB,IAAI,CACxBC,QAAS,OACTmF,cAAe,MACfK,WAAY,SACZQ,IAAK,QAsBD0c,IAnBI,YAAO,IAAW,CAC1B1iB,QAAS,OAAQmF,cAAe,MAAOK,WAAY,SAAUQ,IAAK,QAGtD,YAAO2c,GAAA,EAAY,CAC/BzjB,OAAQ,OACRc,QAAS,OACTwF,WAAY,SACZF,eAAgB,SAChBlF,MAAO,YAGI,YAAOuL,EAAA,EAAW,CAC7B3L,QAAS,OACTwF,WAAY,SACZF,eAAgB,SAChBlF,MAAO,YAGU,YAAO,IAAgB,CACxCA,MAAO,IAAaC,WAAWC,SAC/BE,cAAe,eAGXgB,GAAa,IAAOzB,IAAI,CAC5BC,QAAS,OACTmF,cAAe,SACfa,IAAK,QAwEQ,I,MAAA,GArEf,SAAoB,G,IAAE4c,EAAA,EAAAA,OAAQC,EAAA,EAAAA,aA6C5B,OA7C0C,EAAA/hB,UA8CxC,kBAAC,GAAI,KACH,kBAACU,GAAU,KACT,kBAACghB,GAAM,CAACxkB,UAAU,8BAChB,kBAAC,IAAE,KAAE4kB,EAAOE,SAASZ,aACrB,kBAAC,EAAe,CAAC9E,aAAcwF,EAAOG,SAExC,kBAACL,GAAU,CAACjiB,SAAU,IAAeod,QAAShQ,WAAS,GArC7D,SAAkBmV,GAChB,GAAIA,QACF,MAAO,GAGT,IAEIzJ,EAAI,IAAI0J,KACR3J,EAAI,IAAI2J,KAAKD,GACXE,EAAOD,KAAKE,IAAI7J,EAAE8J,cAAe9J,EAAE+J,WAAY/J,EAAEgK,WACjDC,EAAON,KAAKE,IAAI5J,EAAE6J,cAAe7J,EAAE8J,WAAY9J,EAAE+J,WACnDE,EAASla,KAAKma,OAAOF,EAAOL,GANZ,OAQpB,GAAIM,EAAS,GAAI,CAGf,IAFAA,EAASla,KAAKma,MAAMD,EAAS,KAEhB,GAAI,CACf,IAAME,EAAOpa,KAAKma,MAAMD,EAAS,IACjC,OAAUE,EAAI,KAAIA,EAAO,EAAIb,EAAac,MAAQd,EAAaa,MAAI,IAAIb,EAAae,IAMtF,OAJe,IAAXJ,IACFA,EAAS,GAGDA,EAAM,KAAIA,EAAS,EAAIX,EAAagB,OAAShB,EAAaiB,OAAK,IAAIjB,EAAae,IAG5F,OAAUJ,EAAM,KAAIA,EAAS,EAAIX,EAAakB,KAAOlB,EAAamB,KAAG,IAAInB,EAAae,IAUzBK,CAASrB,EAAOsB,aAE3E,yBAAKlmB,UAAU,iCACZ4kB,EAAOuB,iBAAiBtf,KAAI,SAACuf,EAAWnd,GACvC,OACE,kBAACwb,GAAM,CAACzd,IAAK,WAAWiC,GACtB,kBAAC,IAAc,CAAC4G,WAAS,GAAEuW,EAAUC,c,KACrC,kBAAC,IAAc,CAAC5jB,SAAU,IAAe+O,SAAU4U,EAAU5G,aAKrE,kBAAC,IAAS,CAAC/c,SAAU,IAAe+O,SAAUoT,EAAOtb,WCzHrDgd,GAAc,IAAOvkB,IAAI,CAC7ByF,WAAY,UAGR+e,GAAO,IAAOxkB,MAAG,IACrBC,QAAS,OACTmF,cAAe,SACfa,IAAK,SAEJ,UAAY,KAAuB,CAClCiI,aAAc,Q,KAIZuW,GAAc,IAAOzkB,IAAI,CAC7BC,QAAS,OACTmF,cAAe,SACfa,IAAK,SAGDye,GAAW,IAAOtkB,OAAI,IAC1BF,UAAW,OACXM,OAAQ,UACRH,MAAO,IAAaC,WAAWC,WAC9B,UAAY,KAAsB,CACjC,SAAU,CACRF,MAAO,IAAaC,WAAWgG,Q,KAK/B,GAAa,IAAOtG,IAAI,CAC5BC,QAAS,OACTgG,IAAK,OACLR,WAAY,WAgHC,I,MAAA,UAAAkf,EAAA,IAAQ,SAAC5V,GAAU,OAChC6V,OAAQ7V,EAAM8V,aAAaC,QAAQC,iBACnCC,MAAOjW,EAAM8V,aAAaC,QAAQG,oBAFrB,EA5Gf,SAAwB,G,MAAEC,EAAA,EAAAA,eAAgBC,EAAA,EAAAA,YAAarC,EAAA,EAAAA,aAAc8B,EAAA,EAAAA,OAAQI,EAAA,EAAAA,MAAOjkB,EAAA,EAAAA,UAAWqkB,EAAA,EAAAA,kBACvF,wCAACC,EAAA,KAAiBC,EAAA,KAElB,uCAACC,EAAA,KAAUC,EAAA,KACX,wCAACC,EAAA,KAAUC,EAAA,KAEXC,EAAU,gEAAgEX,EAAK,mBAAmBJ,EAAM,SAAmB,QAAnB,EAAQO,SAAW,eAAES,YAAQ,mBAoD3I,OAVA,qBAAU,WACJT,GApBAP,GACFiB,MACEF,EAAU,GAETlK,MAAK,SAACqK,GAAoB,OAAAA,EAAgBC,UAC1CtK,MAAK,SAACuK,GACLV,EAAmBU,EAAYC,gBAC/B,IAAMC,EAAQF,EAAYE,MACtBA,GAASA,EAAM7nB,OAAS,GACb6nB,EAAMxiB,MAAK,SAAAhB,GAAK,MAAU,cAAVA,EAAEyjB,SAE7BT,GAAY,GACZF,EAAY,SAWrB,CAACL,IAEJ,qBAAU,WACRC,MACC,CAACC,IAGFH,GACE,kBAACX,GAAW,CAACtmB,UAAU,mBACrB,kBAACumB,GAAI,CAACvmB,UAAW,YAAkB,GAAI,IACrC,kBAAC,GAAU,KACT,kBAAC,IAAI,CAACyC,SAAU,IAAe0lB,SAAUlB,EAAemB,OACxD,6BACE,kBAAC,EAAO,CACN7I,OAAQ,CAAEO,QAAS+E,EAAa/E,SAChCN,OAAQyH,EAAemB,MACvB3I,gBAAiBwH,EAAeoB,MAChC3I,YAAU,OAKlB,kBAAC8G,GAAW,CAACxmB,UAAW,YAAkB,GAAI,EAAG,YAA2B,KACzEonB,EAEEvgB,KAAI,SAAC+d,EAAQ3b,GACZ,OACE,kBAAC,GAAU,CACTjC,IAAK,eAAeiC,EACpB2b,OAAQA,EACRC,aAAcA,EACd/hB,UAAWA,OAIlB0kB,GACC,kBAACf,GAAQ,CACP9hB,QAAS,WAhFnBijB,MAAMF,EAAUJ,GACb9J,MAAK,SAACqK,GAAoB,OAAAA,EAAgBC,UAC1CtK,MAAK,SAACuK,GACLV,GAAmB,SAACvH,GAAY,OAAAA,EAAQwI,OAAOP,EAAYC,mBAE3DP,GAAY,GACZ,IAAMQ,EAAQF,EAAYE,MACtBA,GAASA,EAAM7nB,OAAS,GACb6nB,EAAMxiB,MAAK,SAAAhB,GAAK,MAAU,cAAVA,EAAEyjB,SAE7BT,GAAY,GACZF,GAAY,SAACgB,GACX,OAAOA,EAAO,WA8Ed,kBAAC,IAAS,KAAE1D,EAAa2D,gB,qWCtJ1BC,GAAc,YAAQ,KAAY,GAAI,IACtCC,GAAgB,YAAQ,KAAc,GAAI,IAC1CC,GAAc,YAAQ,KAAY,GAAI,IACtCC,GAAe,YAAQ,KAAa,GAAI,IACxCC,GAAY,YAAQ,KAAU,GAAI,IAClCC,GAAY,YAAQ,KAAU,GAAI,IAClCC,GAAY,YAAQ,KAAU,GAAI,IAClCC,GAAc,YAAQ,KAAY,GAAI,IACtCC,GAAe,YAAQ,KAAa,GAAI,IACxCC,GAAc,YAAQ,KAAY,GAAI,IACtCC,GAAa,YAAQ,KAAW,GAAI,IACpCC,GAAe,YAAQ,KAAa,GAAI,IACxCC,GAAa,YAAQ,KAAW,GAAI,IACpCC,GAAc,YAAQ,KAAY,GAAI,IACtCC,GAAc,YAAQ,KAAY,GAAI,IACtCC,GAAc,YAAQ,KAAY,GAAI,IACtCC,GAAe,YAAQ,KAAa,GAAI,IChC9C,SAASC,GAAS,GACvB,OADyB,EAAArJ,MAEvB,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,WACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACL,IAAK,UACH,OAAO,kBAAC,GAA0B,MACpC,IAAK,UACH,OAAO,kBAAC,GAAyB,MACnC,IAAK,YACH,OAAO,kBAAC,GAA2B,MACrC,IAAK,UACH,OAAO,kBAAC,GAAyB,MACnC,IAAK,WACH,OAAO,kBAAC,GAA0B,MACpC,IAAK,QACH,OAAO,kBAAC,GAAuB,MACjC,IAAK,QACH,OAAO,kBAAC,GAAuB,MACjC,IAAK,QACH,OAAO,kBAAC,GAAuB,MACjC,IAAK,UACH,OAAO,kBAAC,GAAyB,MACnC,IAAK,WACH,OAAO,kBAAC,GAA0B,MACpC,IAAK,UAEL,IAAK,aACH,OAAO,kBAAC,GAAyB,MACnC,IAAK,SACH,OAAO,kBAAC,GAAwB,MAClC,IAAK,WACH,OAAO,kBAAC,GAA0B,MACpC,IAAK,SACH,OAAO,kBAAC,GAAwB,MAClC,IAAK,UACH,OAAO,kBAAC,GAAyB,MACnC,IAAK,UACH,OAAO,kBAAC,GAAyB,MACnC,IAAK,UACH,OAAO,kBAAC,GAAyB,MACnC,QACE,OAAO,MC9Bb,IAAMsJ,GAAc,YAAO,IAAW,CACpC1Z,aAAc,SAGV2Z,GAAkB,IAAO7nB,MAAG,OAC/B,UAAY,KAAsB,CACjC8nB,UAAW,CACTznB,MAAO,IAAaC,WAAWgG,MAC/B9B,MAAO,QACPjF,MAAO,OAET1B,WAAY,Q,KAIVkqB,GAAyB,IAAO/nB,IAAI,CACxCkO,aAAc,SAGV8Z,GAAsB,IAAOhoB,IAAI,CACrCkO,aAAc,SAGV+Z,GAAuB,IAAOjoB,MAAG,OACpC,UAAY,KAAsB,CACjC8nB,UAAW,CACTznB,MAAO,IAAaC,WAAWgG,MAC/B9B,MAAO,QACPjF,MAAO,OAET1B,WAAY,Q,KAIVqqB,GAA8B,IAAOloB,IAAI,CAC7CkO,aAAc,SAGVia,GAA2B,IAAOnoB,IAAI,CAC1CkO,aAAc,SAGVka,GAA8B,IAAOpoB,IAAI,CAC7CC,QAAS,OACTmF,cAAe,MACfK,WAAY,SACZQ,IAAK,MACLiI,aAAc,QAGVma,GAA8B,YAAO,IAAW,CACpDliB,WAAY,WAGRmiB,GAAuB,YAAO,IAAW,CAC7Cpa,aAAc,SA2ED,I,GAAA,GAxEf,SAA0B,G,QAAEqa,EAAA,EAAAA,iBAAkBC,EAAA,EAAAA,aAAcC,EAAA,EAAAA,UAAWC,EAAA,EAAAA,iBAC/DC,GADiF,EAAA5nB,UAC/DynB,EAAanqB,OAAS,EAAI,EAAI,GACtD,OACE,6BACGmqB,GAAgBA,EAAanqB,OAAS,GACrC,kBAACwpB,GAAe,CAAC5pB,UAAU,mBACzB,kBAAC8pB,GAAsB,CAAC9pB,UAAW,YAAkB,GAAI,IACvD,kBAAC,IAAE,CAACyC,SAAU,IAAeyf,SAAUoI,IAE5B,QADY,EACxBC,SAAY,a,EAAE1jB,KAAI,SAAC8jB,EAAa1hB,G,MAC/B,OACE,kBAAC8gB,GAAmB,CAClB/iB,IAAKiC,EACLjJ,UAAW,YAAa,EAAG0qB,EAAiBzhB,EAAO,IAEnD,kBAAC0gB,GAAW,KAAEgB,EAAYtK,MACJ,QADuB,EAC5CsK,EAAYC,iBAAS,a,EAAE/jB,KAAI,SAACgkB,EAAU5hB,GACrC,OACE,kBAAC,IAAS,CACRjC,IAAKiC,EACLxG,SAAU,IAAe+O,QACzBb,WAAY,IAAqBc,WAC9BoZ,EAASC,WAAU,KAAKD,EAASxK,cAQpD,kBAAC2J,GAAoB,CAAChqB,UAAU,mBAC9B,kBAACiqB,GAA2B,CAACjqB,UAAW,YAAkB,GAAI,IAC5D,kBAAC,IAAE,KAAEwqB,IAENC,EAAiBM,WAChB,kBAACb,GAAwB,CAAClqB,UAAW,YAAkB,GAAI,EAAG,YAA2B,KACvF,kBAAC2pB,GAAW,KAAEc,EAAiBlL,OAAOyL,MACX,QAD8B,EACxDP,EAAiBM,iBAAS,a,EAAElkB,KAAI,SAACokB,EAAiBhiB,GACjD,OACE,kBAACkhB,GAA2B,CAACnjB,IAAKiC,GAChC,kBAACygB,GAAQ,CAACrJ,KAAM4K,EAAgBtrB,QAChC,kBAACyqB,GAA2B,CAC1B3nB,SAAU,IAAe+O,QACzBb,WAAY,IAAqBc,WAEhCwZ,EAAgBvmB,WAO7B,kBAACwlB,GAAwB,CAAClqB,UAAW,YAAkB,GAAI,EAAG,YAA2B,KACvF,kBAAC2pB,GAAW,KAAEc,EAAiBS,aAC/B,kBAACb,GAAoB,CACnB5nB,SAAU,IAAe+O,QACzBb,WAAY,IAAqBc,WAEhCgZ,EAAiBU,WAEpB,kBAAC,IAAU,CACTzmB,KAAM+lB,EAAiBW,SACvBhiB,GAAIqhB,EAAiBY,QACrBxmB,MAAO,IAAYC,aACnB5D,OAAQ,IAAaoqB,U,4BCjI3BC,GAAQ,YAAO,IAAW,CAC9Btb,aAAc,SAGVub,GAAW,IAAOzpB,IAAI,IAGtB+V,GAAa,IAAO/V,MAAG,IAC3BE,UAAW,SACV,UAAY,KAAsB,CACjCA,UAAW,Q,KAIT,GAAU,YAAO,IAAI,CACzBA,UAAW,SAGPwpB,GAAU,YAAO,IAAY,CACjCxpB,UAAW,SAGPypB,GAAM,YAAO,IAAY,CAC7BzpB,UAAW,SAGP0pB,GAAY,YAAO,KAAc,CACrClrB,SAAU,WACVa,MAAO,OACPJ,OAAQ,OACRwF,UAAW,QACXC,eAAgB,gBAChB7G,aAAc,QAGH8rB,GAAW,YAAOC,GAAA,EAAM,CACnCzpB,MAAO,UACP8E,eAAgB,SA0DH,I,MAAA,GAtDf,SAA+B,G,cAAE4kB,EAAA,EAAAA,eAAgBhpB,EAAA,EAAAA,UAC/C,OACE,6BACE,yBAAK9C,UAAU,mBACb,yBAAKA,UAAW,YAAkB,GAAI,IACpC,kBAACurB,GAAK,CAAC9oB,SAAU,IAAeyf,SACf,QADsB,EACpC4J,SAAc,eAAEC,YAEJ,QAAd,EAAAD,SAAc,eAAEE,WAAY,kBAACtL,EAAA,QAAI,CAChC1gB,UAAU,2BACVsiB,UAAWkJ,GACXjJ,KAAoB,QAAhB,EAAEuJ,SAAc,eAAEE,SAASzJ,SAIrC,kBAACzK,GAAU,KACT,kBAACmU,GAAA,EAAU,CACT/W,cAAepS,EAAY,KAAO,KAClCqS,aAAcrS,EAAY,EAAI,GAC9BA,UAAWA,EACXsS,SAAS,EACTM,SAAS,GAEoB,QAFhB,EAEE,QAFF,EAEZoW,SAAc,eAAEI,oBAAY,eAAErlB,KAAI,SAACslB,EAAaljB,G,YAAU,OACzD,yBAAKjJ,UAAU,eAAegH,IAAK,YAAYiC,GAC7C,kBAAC2iB,GAAQ,CAACxiB,GAAI+iB,EAAY5rB,KACxB,kBAAC,KAA0B,CACzBX,WAAY,OACZE,aAAc,EACdC,WAAY+C,EAAY,EAAI,IAEV,QAAjB,EAAAqpB,EAAYxsB,aAAK,eAAEY,MAClB,kBAACorB,GAAS,CAACxmB,IAAsB,QAAnB,EAAEgnB,EAAYxsB,aAAK,eAAEY,IAAKN,OAAQ,KAAOmsB,eAG1DD,EAAYjc,KAAO,kBAACub,GAAO,KAAEU,EAAYjc,KAC1C,kBAAC,GAAO,KAAEic,EAAYnoB,UAEL,QAAhB,EAAAmoB,EAAYrc,YAAI,eAAE1P,QAAS,GAC1B,kBAACsrB,GAAG,KACe,QADf,EACDS,EAAYrc,YAAI,eAAEuc,QAAO,SAACC,EAAWpc,GACpC,OAAUoc,EAAS,KAAKpc,eC7DxCqc,GAAU,IAAOxqB,IAAI,CACzBb,OAAQ,EACRI,MAAO,OACP2O,aAAc,OACd6I,OAAQ,CAAE1O,EAAG,CAAE9I,MAAO,MAAOiF,MAAO,QAASnE,MAAO,IAAaC,WAAWgG,UAGxEmkB,GAAc,WAAM,OACxB,kBAACD,GAAO,OAGJ,GAAO,IAAOxqB,IAAI,CACtBC,QAAS,OACTmF,cAAe,WAGXslB,GAAsB,IAAO1qB,MAAG,IACpCkO,aAAc,SACb,UAAY,KAAsB,CACjCyc,aAAc,Q,KAIZC,GAAS,YAAOhf,EAAA,EAAW,CAC/B3L,QAAS,OACTwF,WAAY,SACZF,eAAgB,SAChBlF,MAAO,UACPgY,mBAAoB,SAGhBwS,GAAe,IAAO7qB,IAAI,CAC9BQ,OAAQ,UACRe,QAAS,CAAEzB,OAAQ,QACnBG,QAAS,OACTmF,cAAe,MACfG,eAAgB,gBAChBE,WAAY,WAGRqlB,GAAiB,IAAO9qB,MAAG,IAC/BuB,QAAS,CACP8G,EAAG,UAGJ,UAAY,KAAsB,CACjC9G,QAAS,CACP8G,EAAG,S,KAqFT,SAAS0iB,GAAiB,G,IAAE/oB,EAAA,EAAAA,MAAOrE,EAAA,EAAAA,SAAqB,GAAX,EAAAoD,UAAW,EAAAiqB,iBAAA,IAAW,GAAX,EAAkBC,EAAA,EAAAA,WAAYC,EAAA,EAAAA,UAAWC,EAAA,EAAAA,qBACzF,uCAACC,EAAA,KAAcC,EAAA,KACf,uCAACC,EAAA,KAAeC,EAAA,KACfC,EAAD,sCAAC,GAsBP,OATA,qBAAU,WACU,YAAdN,GACEF,IACFK,GAAgB,GAChBF,OAGH,CAACH,IAGF,yBAAK/sB,UAAU,OAAOqG,IAAK2mB,GACzB,kBAACJ,GAAY,CACX5sB,UAAW,YAAkB,GAAI,IACjC2E,QAAS,WAAQyoB,GAAgB,SAACI,GAAY,OAACA,OAE/C,kBAAC,IAAE,CAAC/qB,SAAU,IAAeyf,SAAUne,GACvC,kBAAC4oB,GAAM,CACLtsB,IAAK,CACHgH,UAAW8lB,EAAe,qBAAkB1T,MAIlD,kBAAC,IAAOpY,IAAG,CACTrB,UAAW,YAAkB,GAAI,GAAI,YAA2B,IAChEK,IAAG,aACDmB,SAAU,SACVN,OAAQisB,EAAkBE,EAAa,KAAO,OAC1CE,GAAyB,eACxB,IAAiB,CAClBrb,SAAU,SACVxG,SAAa,QACb+hB,YAAY,OAKlB,kBAACZ,GAAc,CAACxmB,IAAK,SAAAA,GAAO,OA/CP,SAACA,GACtBA,GACFqnB,uBAAsB,WACpB,IAAMxsB,EAASmF,EAAIsnB,aACfR,GAAgB7hB,KAAKsiB,IAAIP,EAAgBnsB,GAAU,GACrDosB,EAAUpsB,MA0CgB2sB,CAAmBxnB,KAC5C3G,KAOI,OA5If,SAA0B,G,IACxBwnB,EAAA,EAAAA,YACA4G,EAAA,EAAAA,sBACAxD,EAAA,EAAAA,iBACAC,EAAA,EAAAA,aACAC,EAAA,EAAAA,UACAC,EAAA,EAAAA,iBACAsD,EAAA,EAAAA,oBACAjC,EAAA,EAAAA,eACAlK,EAAA,EAAAA,aACAiD,EAAA,EAAAA,aACAmJ,EAAA,EAAAA,YACAC,EAAA,EAAAA,YACAC,EAAA,EAAAA,wBACAC,EAAA,EAAAA,mBACAC,EAAA,EAAAA,gBACAC,EAAA,EAAAA,mBACAnB,EAAA,EAAAA,qBACApqB,EAAA,EAAAA,UAGM,uCAACwrB,EAAA,KAA0BC,EAAA,KAEjC,OACE,kBAAC,GAAI,KACH,kBAAC/B,GAAW,MACZ,kBAACM,GAAgB,CAAC9lB,IAAI,WAAWjD,MAAO+pB,EAAuBhrB,UAAWA,GACxE,kBAAC,GAAgB,CACfwnB,iBAAkBA,EAClBC,aAAcA,EACdC,UAAWA,EACXC,iBAAkBA,EAClB3nB,UAAWA,KAGf,kBAAC0pB,GAAW,MACXV,GACC,oCACE,kBAACgB,GAAgB,CAAC9lB,IAAI,iBAAiBjD,MAAOgqB,EAAqBjrB,UAAWA,GAC5E,kBAAC,GAAqB,CAACgpB,eAAgBA,EAAgBhpB,UAAWA,KAEpE,kBAAC0pB,GAAW,OAGfwB,EAAc,GACb,oCACE,kBAAClB,GAAgB,CAACG,UAAW,UAAWC,qBAAsB,WAAM,OAAAA,EAAqB,KAAKlmB,IAAI,UAAUwnB,uBAAwBF,EAA0BtB,WAAYqB,EAAoBtB,SAAUqB,GAAuC,YAApBA,EAA+BrqB,MAAO6d,EAAc9e,UAAWA,GACxR,kBAAC,GAAc,CAACmkB,eAAgB,CAAEoB,MAAO2F,EAAa5F,MAAO6F,GAAe9G,kBAAmB,WAAM,OAAAoH,EAA4BD,EAA2B,IAAIpH,YAAaA,EAAarC,aAAcA,EAAc/hB,UAAWA,KAEnO,kBAAC0pB,GAAW,OAIhB,kBAACM,GAAgB,CAAC9lB,IAAI,uBAAuBjD,MAAOmqB,EAAyBprB,UAAWA,GACtF,yBAAK9C,UAAU,mBACb,kBAACysB,GAAmB,CAACzsB,UAAW,YAAkB,GAAI,IACpD,kBAAC,IAAE,KAAEmuB,EAAmBnqB,UAE1B,yBAAKhE,UAAW,YAAkB,GAAI,EAAG,YAA2B,KACjEmuB,EAAmBhM,MAAQ,kBAACzB,EAAA,QAAI,CAAC6B,KAAM4L,EAAmBhM,KAAKI,UAItE,kBAACiK,GAAW,Q,SC/IZiC,GAAQ,IAAOC,MAAM,CACzBptB,MAAO,OAAQgC,QAAS,CAAEM,GAAI,GAAK+qB,cAAe,EAAGC,eAAgB,aAGjEC,GAAK,IAAOC,GAAG,CACnBxrB,QAAS,CAAE8G,EAAG,SAGV2kB,GAAK,IAAOC,GAAG,CACnB1tB,MAAO,SA2BM,I,YAAA,GAxBf,SAAsB,G,IAAE2tB,EAAA,EAAAA,aACtB,OACE,kBAACR,GAAK,KACJ,kBAAC,IAAOS,MAAK,KACVC,OAAOC,QAAQH,GAAcpoB,KAAI,SAACwoB,EAAapmB,GACxC,uBAAC8c,EAAA,KAAMuJ,EAAA,KACb,OACE,kBAACT,GAAE,CAAC7nB,IAAKiC,GACP,kBAAC8lB,GAAE,KACD,kBAAC,IAAS,CAACtsB,SAAU,IAAe8sB,cAAexJ,IAErD,kBAACgJ,GAAE,KACD,kBAAC,IAAS,CAACtsB,SAAU,IAAe8sB,aAAclvB,IAAG,IAClDivB,W,GADoD,CAAEpnB,WAAY,UCX/EsnB,GAAsB,YAAO,IAAI,CACrClsB,QAAS,CAAEzB,OAAQ,SAGf4tB,GAAgC,YAAO,IAAI,CAC/CnsB,QAAS,CAAEzB,OAAQ,SAGf6tB,GAAc,IAAO3tB,MAAG,IAC5BC,QAAS,OACTL,OAAQ,CAAEC,IAAK,QACfuF,cAAe,WACd,UAAY,KAAsB,CACjCA,cAAe,O,KAIbwoB,GAAoB,IAAO5tB,IAAI,CACnCC,QAAS,SAGL4tB,GAAmB,IAAO7tB,MAAG,OAChC,UAAY,KAAsB,CACjC8tB,KAAM,CAAEC,MAAO,OACfpD,aAAc,Q,KAIZqD,GAAc,IAAOhuB,MAAG,OAC3B,UAAY,KAAsB,CACjC8tB,KAAM,CAAEC,MAAO,OACfpD,aAAc,Q,KAIZsD,GAAkB,YAAO,IAAW,CACxC1sB,QAAS,CAAE1B,IAAK,SAGZquB,GAAgB,IAAOluB,MAAG,OAC7B,UAAY,KAAuB,CAClCE,UAAW,QAEb,GAAC,UAAY,KAAsB,CACjC4tB,KAAM,CAAEC,MAAO,Q,KAkGJ,I,kBAAA,GA9Ff,SAA0B,G,IACxBvQ,EAAA,EAAAA,OACA0P,EAAA,EAAAA,aACAiB,EAAA,EAAAA,uBACAC,EAAA,EAAAA,YACAC,EAAA,EAAAA,eACAC,EAAA,EAAAA,KAGM,gFAACC,EAAA,KAAYhD,EAAA,KACb,uCAACiD,EAAA,KAAQC,EAAA,KA0Bf,OAxBA,qBAAU,WAENlD,EADEiD,IAAWF,EACH,CAAC9C,uBAAuB,EAAMF,cAAe,GAE7C,CAACE,uBAAuB,EAAOF,cAAe,IAG1DmD,EAAUH,KACT,IAiBD,kBAAC,IAAOhvB,IAAG,CACThB,IAAG,aACDmB,SAAU,SACVN,OAAQmvB,EAAUC,EAAWjD,cAAa,KAAO,OAC7CiD,EAAW/C,uBAAyB,eACnC,IAAiB,CAClBrb,SAAU,SACVxG,SAAa,QACb+hB,YAAY,OAMlB,kBAAC,IAAOpsB,IAAG,CAACgF,IAAK,SAAAA,GAAO,OA7BD,SAACA,GACvBgqB,GACGhqB,GAEFqnB,uBAAsB,WACpB,IAAMxsB,EAASmF,EAAIsnB,aACfriB,KAAKsiB,IAAI0C,EAAWjD,cAAgBnsB,GAAU,GAChDosB,EAAU,CAACC,uBAAuB,EAAMF,cAAensB,OAsBrC2sB,CAAmBxnB,KACzC,kBAACspB,GAAiB,CAAC3vB,UAAU,2CAC1BivB,GACC,kBAACW,GAAgB,KACf,kBAACJ,GAAmB,CAAC3f,WAAS,EAACpN,SAAU,IAAe0N,SACrDoP,EAAO0P,cAEV,kBAAC,GAAY,CAACA,aAAcA,KAG/BiB,GACC,kBAACN,GAAgB,KACf,kBAACH,GAA6B,CAAC5f,WAAS,EAACpN,SAAU,IAAe0N,SAC/DoP,EAAO2Q,wBAEV,kBAAC,GAAY,CAACjB,aAAciB,MAIlC,kBAACR,GAAW,CAAC1vB,UAAU,iDACrB,kBAAC+vB,GAAW,KACV,kBAAC,IAAE,CAAClgB,WAAS,EAACpN,SAAU,IAAe0N,SACpCoP,EAAOkR,SAEV,kBAACT,GAAe,CAACvtB,SAAU,IAAe8sB,cACvCY,IAGL,kBAACF,GAAa,CAACjwB,UAAU,wCACvB,kBAAC,IAAU,CACT0E,KAAM6a,EAAOmR,UACbtnB,GAAIgnB,EACJvrB,MAAO,IAAY8rB,aACnBzvB,OAAQ,IAAasD,MACrBlB,QAAS,CAAEmB,EAAG,WCjItB,GAAO,IAAO1C,IAAI,CACtBC,QAAS,OACTmF,cAAe,SACfK,WAAY,UACZQ,IAAK,OACL1E,QAAS,CAAEmB,EAAG,OAAQ7C,IAAK,OAAQC,OAAQ,QAC3CiX,OAAQ,CACNlV,GAAI,CACFtC,MAAO,MACPiF,MAAO,UAGXzG,aAAc,QAGV8wB,GAAgB,IAAO7uB,MAAG,IAC9BC,QAAS,OACTmF,cAAe,SACfK,WAAY,YACX,UAAY,KAAsB,CACjCL,cAAe,O,KAIb0pB,GAAiB,IAAO9uB,MAAG,IAC/BC,QAAS,OACTmF,cAAe,SACfa,IAAK,QACJ,UAAY,KAAsB,CACjC6nB,KAAM,CAAEC,MAAO,OACfxsB,QAAS,CAAEyW,MAAO,S,KAIhB+W,GAAoB,IAAO/uB,MAAG,IAClCC,QAAS,OACTmF,cAAe,MACfa,IAAK,OACL0H,SAAU,IACT,UAAY,KAAsB,CACjC1H,IAAK,O,KAIH+oB,GAAqB,YAAO,IAAW,CAC3C3uB,MAAO,IAAaC,WAAWC,SAC/BoN,SAAU,IAGNshB,GAAiB,IAAOjvB,MAAG,IAC/BC,QAAS,OACTmF,cAAe,WACd,UAAY,KAAsB,CACjC0oB,KAAM,CAAEC,MAAO,Q,KAIbmB,GAAoB,IAAOlvB,MAAG,IAClCC,QAAS,OACTmF,cAAe,MACfK,WAAY,WACZQ,IAAK,MACLE,WAAY,SACZ5E,QAAS,CAAE1B,IAAK,OAAQC,OAAQ,SAC/B,UAAY,KAAsB,CACjCyB,QAAS,CAAE1B,IAAK,MAAOC,OAAQ,Q,KAI7B,GAAO,YAAO8L,EAAA,EAAW,CAC7BzK,WAAY,MACZlB,QAAS,OACTwF,WAAY,SACZF,eAAgB,SAChBlF,MAAO,UACPgY,mBAAoB,SAGhB8W,GAAc,YAAO,GAAM,CAC/B7pB,UAAW,kBAGP8pB,GAAwB,IAAOpvB,IAAI,CACvCQ,OAAQ,UAAWZ,OAAQ,CAAEE,OAAQ,QAAUG,QAAS,SAGpDovB,GAAyB,IAAOrvB,IAAI,CACxCQ,OAAQ,UAAWP,QAAS,SAGxBqvB,GAAgB,YAAO,MAAI,IAC/BjvB,MAAO,IAAaC,WAAWC,SAC/B4F,WAAY,SACZ5E,QAAS,CAAE1B,IAAK,SACf,UAAY,KAAsB,CACjC0B,QAAS,CAAE1B,IAAK,Q,KAId0vB,GAAuB,IAAOvvB,IAAI,CACtCQ,OAAQ,UACRP,QAAS,SAgGI,I,SAAA,GA3Ff,SAA+B,G,IAAEuvB,EAAA,EAAAA,kBAAmBC,EAAA,EAAAA,WAAYjS,EAAA,EAAAA,OAAQzc,EAAA,EAAAA,UAAW6B,EAAA,EAAAA,QAC3E,wCAAC8sB,EAAA,KAAsBC,EAAA,KACvB,wCAACC,EAAA,KAAqBC,EAAA,KAE5B,OACE,kBAAC,GAAI,CACHjtB,QAASA,EACTtE,IAAK,CACHyY,OAAQ,CACNlV,GAAI,CACFxB,MAAOovB,EAAa,IAAanvB,WAAWgG,MAAQ,IAAahG,WAAWwvB,cAKlF,kBAACjB,GAAa,KACZ,kBAACC,GAAc,KACb,kBAACC,GAAiB,KAChB,kBAAC,IAAE,CAACjhB,WAAS,EAACpN,SAAU,IAAeqvB,SAAUP,EAAkBlR,MAClEmR,GACC,kBAACH,GAAa,CACZ5uB,SAAU,IAAeod,QACzBlP,WAAY,IAAqBohB,WAEhCxS,EAAOyS,gBAId,kBAACjB,GAAkB,CAACtuB,SAAU,IAAe8sB,cAC1CgC,EAAkBU,QACnB,kBAAC,IAAOC,GAAE,MACTX,EAAkBY,Q,IAAUZ,EAAkBa,OAE/CtvB,GACA,kBAACsuB,GAAsB,CACrBpxB,UAAU,kDACV2E,QAAS,WAAM,OAAA+sB,GAAwB,SAACW,GAAc,OAACA,OAEvD,kBAAC,IAAS,CAAChyB,IAAG,IAAoBkf,EAAO+S,iBACxCb,EAAuB,kBAACP,GAAW,MAAM,kBAAC,GAAI,QAIrD,kBAACF,GAAc,KACb,kBAACC,GAAiB,KAChB,kBAAChS,EAAA,EAAe,CAAC5e,IAAK,CAAC+B,MAAO,aAAgBmvB,EAAkBgB,uBAChE,kBAAC,IAAS,CAAC9vB,SAAU,IAAeod,QAASlP,WAAY,IAAqBohB,WAC3ER,EAAkBiB,qBAGrB1vB,GAAa,kBAAC,KAAc,CAAC2vB,eAAgBlB,EAAkBmB,iBAGpE5vB,GACC,kBAACwuB,GAAoB,CACnBtxB,UAAU,iDACV2E,QAAS,WAAM,OAAAitB,GAAuB,SAACD,GAAwB,OAACA,OAEhE,kBAAC,IAAS,KAAEpS,EAAOkT,gBAClBd,EAAsB,kBAACT,GAAW,MAAM,kBAAC,GAAI,OAGjDpuB,GAAa6uB,GAAuB,kBAAC,KAAc,CAACc,eAAgBlB,EAAkBmB,eACvF,kBAAC,IAAOrxB,IAAG,KACRyB,GACC,kBAACquB,GAAqB,CACpBnxB,UAAU,kDACV2E,QAAS,WAAM,OAAA+sB,GAAwB,SAACW,GAAc,OAACA,OAEvD,kBAAC,IAAS,KAAE9S,EAAO+S,iBAClBb,EAAuB,kBAACP,GAAW,MAAM,kBAAC,GAAI,OAGnD,kBAAC,GAAgB,CACfb,KAAMoB,EACNlS,OAAQ,CACN0P,aAAc1P,EAAOoT,UACrBzC,uBAAwB3Q,EAAOqT,iBAC/BnC,QAASlR,EAAOkR,QAChBC,UAAWnR,EAAOsT,YAEpB5D,aAAcsC,EAAkBtC,aAChCiB,uBAAwBqB,EAAkBuB,sBAC1C3C,YAAaoB,EAAkBpB,YAC/BC,eAAgBmB,EAAkBnB,oB,GA9Cd,CAAE1gB,SAAU,G,uCCtJpC,GAAO,IAAO3N,MAAG,IACrBC,QAAS,OACTmF,cAAe,SACfxF,OAAQ,CAAEC,IAAK,QACfN,MAAO,SACN,UAAY,KAAsB,CACjC6F,cAAe,O,KAIb4rB,GAAkB,IAAOhxB,MAAG,OAC/B,UAAY,KAAsB,CACjC8tB,KAAM,CAAEC,MAAO,OACfxsB,QAAS,CAAEyW,MAAO,S,KAIhBiZ,GAAa,IAAOjxB,MAAG,IAC3BC,QAAS,OACTgG,IAAK,MACLR,WAAY,WACX,UAAY,KAAuB,CAClC7F,OAAQ,CAAEC,IAAK,SAEjB,GAAC,UAAY,KAAsB,CACjCiuB,KAAM,CAAEC,MAAO,Q,KAIbmD,GAAM,YAAOC,GAAA,EAAgB,CACjChmB,UAAW,SACX5L,MAAO,OACPJ,OAAQ,SAsBK,I,iCAAA,GAnBf,SAAsB,G,IAAEqe,EAAA,EAAAA,OAAQ4T,EAAA,EAAAA,cAAeC,EAAA,EAAAA,qBAAiCC,GAAX,EAAAvwB,UAAW,EAAAuwB,aAC9E,OACE,kBAAC,GAAI,CAACrzB,UAAU,8CACd,kBAAC+yB,GAAe,KACd,kBAAC,KAAW,CACV9Z,gBAAiBsG,EAAO+T,kBACxBpa,SAAU,SAACtK,GAAU,OAAAukB,EAAcvkB,EAAMC,cAActE,QACvD3F,UAAW,kBAACquB,GAAG,SAGnB,kBAACD,GAAU,CAAChzB,UAAU,wCACpB,kBAAC,KAAM,CAACyK,SAAU2oB,IAClB,kBAAC,IAAS,CAAC3wB,SAAU,IAAe8sB,cAAehQ,EAAOgU,sBAE5D,kBAACC,GAAA,EAAM,CAACC,QAASJ,M,6BChDjBK,GAAkC,YAAOC,GAAA,EAAwB,CACrE3xB,QAAS,OACTmF,cAAe,SACfK,WAAY,UACZQ,IAAK,OACLpI,WAAY,SAGRg0B,GAAa,YAAO,IAAW,CACnC3xB,UAAW,QAwLE,UAAAykB,EAAA,IACb,SAAC5V,G,MAAU,OACTsK,OAAQtK,EAAM8V,aAAalM,MAAMU,OACjC4W,cAAuB,QAAV,EAAElhB,EAAM+iB,UAAE,eAAE7B,cACzB8B,iBAAkBhjB,EAAM8V,aAAaC,QAAQiN,iBAC7C/iB,kBAAmBD,EAAMC,sBAE3B,SAACgjB,GAAa,OACZC,iBAAkB,SAAChC,GAA8B,OAAA+B,EAAS,aAAiB/B,QARhE,EA/JgB,SAAC,G,oBAC9BiC,EAAA,EAAAA,aACAC,EAAA,EAAAA,UACA3U,EAAA,EAAAA,OACAnE,EAAA,EAAAA,OACA4Y,EAAA,EAAAA,iBACAF,EAAA,EAAAA,iBACA/iB,EAAA,EAAAA,kBAGM,4CAACwgB,EAAA,KAAmB4C,EAAA,KACpB,wCAACC,EAAA,KAAmBhB,EAAA,KACpB,wCAACiB,EAAA,KAAmBC,EAAA,KACpB,wCAACC,EAAA,KAAyBC,EAAA,KAC1B,wCAACC,EAAA,KAAiBC,EAAA,KAClBC,GAA+H,OAAnG,EAAyB,QAA1B,EAAkB,QAAlB,EAACpD,SAAiB,eAAEnW,cAAM,eAAEwZ,WAAU,SAAAnwB,GAAK,MArDrC,QAqDqCA,EAAE8tB,uBAAuD,GAAM,IAAM,EAC3I,wCAACsC,EAAA,KAAcC,EAAA,KACf,wCAACzB,EAAA,KAAa0B,EAAA,KAEd70B,EAAW,YAAU6Q,GAE3B,SAAeikB,EAAiB5Z,G,+FAM9B,OALM6Z,EAAW7Z,EAAOiR,QAAO,SAAC6I,EAAaxa,GAC3C,OAAUwa,EAAG,IAAIxa,EAAM/L,KACtB,KACGpO,EAAM,IAAI,IAAKqM,SAASuoB,MAC1BC,OAAS,WAAWH,EACjB,CAAP,EAAO,YAAI10B,GAAKid,MAAK,SAAC6X,GAAM,OAAAA,EAAEvN,iBAsBhC,IAAMwN,EAA+B,GACrC,IAAK,IAAMtuB,KAAOoU,EACZA,EAAOma,eAAevuB,IACxBsuB,EAAcE,KAAK,2BAAKpa,EAAOpU,IAAI,CAAE2H,GAAI3H,KAI7C,SAASyuB,I,MACc,QAArB,EAAAC,UAAUC,mBAAW,SAAEC,oBACrB,SAACn1B,GACC,YACE,2CAA6CqzB,EAAmB,QAAUA,EAAmB,KAC7FtW,MAAK,WAEL,aAAiB8X,EAAe70B,EApGrB,KAoG6C+c,MAAK,SAACqY,GAC5Db,EAAiBa,GAAgBrY,MAAK,SAACsY,G,OACZ,QAAzB,EAAIA,SAAqB,eAAE1a,UACzB0a,EAAsB1a,OAAS,aAAwB0a,EAAsB1a,OAAQ3a,IAEvF0zB,EAAqB2B,GACrBhB,GAAgB,GAChBC,GAAe,MAEjBT,GAAqB,GACrBE,GAA2B,YAIjC,WAEEQ,EAAiBM,GAAe9X,MAAK,SAACsY,GACpC3B,EAAqB2B,GACrBhB,GAAgB,GAChBC,GAAe,MAEjBT,GAAqB,GACrBE,GAA2B,MAuBjC,OAlBKH,GAAqBJ,GACxBwB,IAGF,qBAAU,WACR,GAAwB,KAApBhB,EAAwB,CAC1B,IAAMsB,EAAgB,aApIM,sBAqIxBA,GACFrB,EAAmBqB,QAGrB/B,EAAiB5Y,EAAOqZ,IACpBA,IAAoB,aA1II,uBA2I1B,aA3I0B,qBA2IWA,KAGxC,CAACA,IAGF,kBAACd,GAAA,EAAK,CAACM,aAAcA,EAAcC,UAAWA,EAAW8B,eAAgB,GACvE,kBAACrC,GAAA,EAAe,CACdsC,iBAAkB1W,EAAOxb,MACzBC,QAASub,EAAOvb,QAChBkyB,WAAYhC,EACZiC,cAAe5B,GACI,QAAjB,EAAAhD,SAAiB,eAAEnW,QACf,aAAmBmE,EAAO6W,YAAa,CACvC/N,MAAOkJ,EAAkBnW,OAAOhb,OAAOunB,WACvCxK,SA3JO,IA2JgBwK,aAEvB,KAAwB,QAAjB,EAAA4J,SAAiB,eAAEnW,QAAYmW,EAAkBnW,OAAOhb,OAAOunB,WAAU,IAAIpI,EAAO8W,QAAY,MAGhG,QAAZ,EAAA9W,EAAOlb,aAAK,eAAEjE,QAAS,GACtB,kBAACwzB,GAAU,CAACnxB,SAAU,IAAe8sB,cAAehQ,EAAOlb,OAE7D,kBAAC,GAAY,CACXkb,OAAQ,CAAE+T,kBAAmB/T,EAAO+W,kBAAmB/C,oBAAqBhU,EAAOgU,qBACnFJ,cAlGR,SAAyBoD,GACvB,IAAMh2B,EAAM,IAAI,IAAKqM,SAASuoB,KAC9B50B,EAAI60B,OAAS,gBAAgBmB,EAC7BpC,EAAqB,MACrBW,GAAgB,GAEK,KAAjByB,EAKJ,YAAIh2B,GACDid,MAAK,SAAC6X,GAAM,OAAAA,EAAEvN,UACdtK,MAAK,SAACsK,GACLqM,EAAqBrM,GACrBgN,GAAgB,MARlBW,KA4FIrC,qBAAsBA,EACtBtwB,UAAW5C,EACXmzB,YAAaA,KAGjB,kBAACK,GAA+B,KAC7BnC,IAC0B,QADT,EACC,QADD,EAChBA,SAAiB,eAAEnW,cAAM,eAAEvU,KAAI,SAAC6T,EAAOzR,GACrC,IAAKmrB,GA/KwB,QA+KH1Z,EAAM6X,mBAC9B,OACE,kBAAC,GAAqB,CACpBvrB,IAAKiC,EACLuoB,WAAY9W,EAAM/L,KAAO8lB,EACzBlD,kBAAmB7W,EACnB6E,OAAQA,EACRzc,UAAW5C,EACXyE,QAAS,WAAM,OAAA+vB,EAAmBha,EAAM/L,YAIhDgmB,GAA4BP,GAAqBS,GACjD,6BACGtV,EAAOiX,sBChMdC,GAAU,IAAO10B,IAAI,CACzBnC,WAAY,SAGR,GAAO,YAAO,IAAW,CAC7B+B,OAAQ,CAAEC,IAAK,UAwCF,GArCe,SAAC,G,YACxB80B,EAD0BzC,EAAA,EAAAA,aAAcC,EAAA,EAAAA,UAAWyC,EAAA,EAAAA,iBACxD,SAAKD,GACH,6BACA,iCAFF,CAAKA,MAAI,KAKT,IAAME,EAAO,CACX,CAAEC,IAAKH,EAAKI,UAAW/yB,MAAgC,QAA3B,EAAE4yB,EAAgBI,iBAAS,eAAEC,SACzD,CAAEH,IAAKH,EAAKO,YAAalzB,MAAkC,QAA7B,EAAE4yB,EAAgBO,mBAAW,eAAEF,UAGzD,iDAACG,EAAA,KAAaC,EAAA,KAEpB,OACE,kBAACzD,GAAA,EAAK,CAACM,aAAcA,EAAcC,UAAWA,GAC5C,kBAACP,GAAA,EAAe,CAACsC,iBAAkBU,EAAgB5yB,MAAOC,QAAS2yB,EAAgB3yB,QAASkyB,WAAYhC,GACtG,kBAAC,GAAI,CAACzxB,SAAU,IAAe40B,QAAS1mB,WAAY,IAAqBohB,WACtE4E,EAAgBtyB,OAEnB,kBAACsvB,GAAA,EAAS,CAACiD,KAAMA,EAAMU,UAAWH,EAAaI,YAAaH,KAE9D,kBAACzD,GAAA,EAAsB,KACpBwD,IAAgBT,EAAKI,YAAsC,QAA7B,EAAIH,EAAgBI,iBAAS,eAAE/K,WAC5D,kBAACyK,GAAO,KACN,kBAAC/V,EAAA,QAAI,CAAC6B,KAAMoU,EAAgBI,UAAU/K,SAASzJ,QAGlD4U,IAAgBT,EAAKO,cAA0C,QAA/B,EAAIN,EAAgBO,mBAAW,eAAElL,WAChE,kBAACyK,GAAO,KACN,kBAAC/V,EAAA,QAAI,CAAC6B,KAAMoU,EAAgBO,YAAYlL,SAASzJ,W,8BCAvDiV,GAAc,IAAOz1B,IAAI,CAC7BC,QAAS,SAGLy1B,GAAW,IAAO11B,MAAG,IACzBT,MAAO,SACN,UAAY,KAAuB,CAClCgC,QAAS,CACP1B,IAAK,OACL6C,EAAG,OACH5C,OAAQ,SAGZ,GAAC,UAAY,KAAsB,CACjCyB,QAAS,CACP1B,IAAK,M,KAKL81B,GAAe,IAAO31B,MAAG,IAC7BE,UAAW,SACV,UAAY,KAAsB,CACjCA,UAAW,Q,KAIT01B,GAAmB,YAAO,IAAM,CACpCx0B,YAAa,MACb8M,aAAc,SAGV2nB,GAAgB,YAAO,IAAM,CACjCr1B,OAAQ,UACRH,MAAO,IAAaC,WAAWC,SAC/B,SAAU,CACRF,MAAO,IAAaC,WAAWgG,OAEjC4H,aAAc,SAGV4nB,GAAY,IAAO91B,MAAG,IAC1BE,UAAW,SACV,UAAY,KAAsB,CACjCA,UAAW,Q,KAIT61B,GAAoB,IAAO/1B,IAAI,CACnCE,UAAW,OACXkI,gBAAiB,IAAakQ,YAAY6E,SAGtC6Y,GAAoB,YAAO,IAAW,CAC1C31B,MAAO,IAAaC,WAAWgG,MAC/B/E,QAAS,CAAEM,GAAI,UAGXo0B,GAAkB,YAAO7U,EAAA,EAAgB,CAC7C7hB,MAAO,OACPW,UAAW,OACXgO,aAAc,SAGVgoB,GAAgB,YAAOtqB,EAAA,EAAW,CACtCzK,WAAY,QAGRg1B,GAAU,IAAO/1B,KAAK,CAC1BH,QAAS,cACTmB,YAAa,SAGTg1B,GAAe,YAAOC,EAAA,EAAY,CACtCj1B,YAAa,QAGTk1B,GAAsB,IAAOt2B,IAAI,CACrCC,QAAS,OACT0F,SAAU,OACVF,WAAY,WAGR8wB,GAAyB,IAAOn2B,KAAK,CACzCe,WAAY,MACZC,YAAa,QAGTo1B,GAAiB,YAAO,OAAiB,OAC5C,UAAY,KAAuB,CAClCj1B,QAAS,CAAEzB,OAAQ,S,KAIjB,GAAa,IAAOE,MAAG,OAC1B,UAAY,KAAuB,CAClCmB,WAAY,QACZC,YAAa,QACb0mB,UAAW,CACTtjB,MAAO,QACPjF,MAAO,MACPc,MAAO,IAAaC,WAAWgG,Q,KAK/BmwB,GAAkB,IAAOz2B,MAAG,OAC/B,UAAY,KAAsB,CACjC6F,UAAW,OACXya,UAAW,UACX,sBAAuB,CACrB/gB,MAAO,OAETW,UAAW,Q,KAITw2B,GAAqB,IAAO12B,MAAG,IACnCkO,aAAc,OACdjO,QAAS,OACTmF,cAAe,SACfa,IAAK,SACJ,UAAY,KAAsB,CACjCiI,aAAc,OACdjI,IAAK,O,KAIH0wB,GAAc,YAAO,IAAI,CAC7BzoB,aAAc,SAGV0oB,GAAgB,YAAO9M,GAAA,IAAI,IAC/B1oB,YAAa,MACbnB,QAAS,eACTV,MAAO,OACPJ,OAAQ,SACP,UAAY,KAAsB,CACjCI,MAAO,OACPJ,OAAQ,Q,KAIN03B,GAAqB,IAAOroB,IAAI,CACpCzQ,aAAc,MACd6G,eAAgB,SAChBD,UAAW,UAGPmyB,GAAuB,YAAO,OAAQ,IAC1CxrB,cAAe,SACd,UAAY,KAAsB,CACjC/J,QAAS,CAAE8G,EAAG,U,KAIZ0uB,GAAwB,YAAO,OAAQ,IAC3C53B,OAAQ,OACRmM,cAAe,SACd,UAAY,KAAuB,CAClC7L,SAAU,UAEZ,GAAC,UAAY,KAAsB,CACjC6L,cAAe,S,KAIb0rB,GAAoB,YAAO,KAAU,CACzC73B,OAAQ,SAGJ83B,GAA0B,YAAO,OAAQ,IAC7C93B,OAAQ,OACRoC,QAAS,CAAE8G,EAAG,UACb,UAAY,KAAuB,CAClC5I,SAAU,UAEZ,GAAC,UAAY,KAAsB,CACjC8B,QAAS,CAAE8G,EAAG,U,KAIZ6uB,GAAgB,YAAOzB,GAAa,CACxCxvB,IAAK,SAGDkxB,GAAuB,IAAO/2B,KAAK,CACvCH,QAAS,cACTwF,WAAY,SACZQ,IAAK,QAGDmxB,GAAwB,IAAOh3B,KAAK,CACxCH,QAAS,cACTgG,IAAK,MACLR,WAAY,WAGR4xB,GAAwB,YAAO,IAAM,CACzCh3B,MAAO,IAAaC,WAAWC,WAG3B+2B,GAAgB,IAAOl3B,KAAK,CAChCH,QAAS,cACTwF,WAAY,SACZjF,OAAQ,YAGJ+2B,GAAgB,YAAO,IAAM,CACjCpyB,eAAgB,cAGZqyB,GAAc,IAAOp3B,KAAK,CAC9BqF,WAAY,SACZjF,OAAQ,UACR2E,eAAgB,cAGZsyB,GAAW,YAAO5b,EAAY,CAClCtc,MAAO,OACP6B,YAAa,QAGTs2B,GAAY,YAAOD,GAAU,CACjCp3B,MAAO,IAAaC,WAAWgG,QAG3BqxB,GAAY,OAAAhT,EAAA,IAChB,SAAC5V,G,cAAU,OACT6oB,SAAU7oB,EAAM6oB,SAChB5oB,kBAAmBD,EAAMC,kBACzB6oB,QAAS9oB,EAAM8V,aAAagT,QAC5BC,SAAU/oB,EAAM8V,aAAakT,OAAOD,SACpCE,KAAMjpB,EAAM8V,aAAamT,KACzB/H,cAAuB,QAAV,EAAElhB,EAAM+iB,UAAE,eAAE7B,cACzBgI,qBAAwD,QAApC,EAA0B,QAA1B,EAAElpB,EAAM8V,aAAaqT,aAAK,eAAEN,gBAAQ,eAAEp5B,IAC1D2iB,UAAQ,EAAmB,QAAnB,EAAEpS,EAAMopB,mBAAW,eAAEC,WAAU,gBAEzC,SAACpG,GAAa,OACZqG,mBAAA,SAAmB9mB,EAAsByB,EAAcslB,EAA0BC,GAC/E,OAAOvG,EAAS,aAAmBzgB,EAAayB,EAAMslB,EAAkBC,KAE1EC,UAAA,SAAUxlB,EAAcylB,EAAkBC,EAAgBH,EAAyBD,GACjF,OAAOtG,EACL,YAAUhf,EAAMylB,EAAUC,EAAQ,eAAgBH,EAAiBD,GAAkB,GAAO,KAGhGK,eAAc,WACZ3G,EAAS,oBArBG,EAyBhB,SACEt0B,G,oBA2BEk6B,EAAA,EAAAA,SACA5oB,EAAA,EAAAA,kBACAwpB,EAAA,EAAAA,UACAG,EAAA,EAAAA,eACAN,EAAA,EAAAA,mBACAL,EAAA,EAAAA,KACAxa,EAAA,EAAAA,OACAc,EAAA,EAAAA,KACAsa,EAAA,EAAAA,MACAC,EAAA,EAAAA,aACAC,EAAA,EAAAA,WACA/Y,EAAA,EAAAA,aACA7B,EAAA,EAAAA,kBACA6a,EAAA,EAAAA,oBACAC,EAAA,EAAAA,kBACAC,EAAA,EAAAA,oBACAhJ,EAAA,EAAAA,cACA9O,EAAA,EAAAA,SACA+X,EAAA,EAAAA,8BACAC,EAAA,EAAAA,SAGF,qBAAU,W,OACF,QAAN,EAAA1xB,cAAM,eAAEoD,WAAY,aAAe,KAClC,IAEH,IAAMuuB,EAAqB,mBACrBC,EAAqB,mBACrBr4B,EAActD,EAAMsD,YACpB,oFAACuQ,EAAA,KAAa+nB,EAAA,KASd9nB,EAAkB,SAAC7I,GACvB,IAAIwY,EAGF,OAAOwX,KAXY,SAAOpnB,GAAoB,6C,oEACtC,SAAM8mB,EAAmB9mB,EAAa7T,EAAMq7B,oBAAqBr7B,EAAMsV,KAAMtV,EAAM67B,e,cAAvF/f,EAAI,SACY,OAAjB,QAAD,EAAAA,SAAC,eAAEggB,aACLF,GAAc/nB,G,WAMdkoB,CAAeloB,IAqBbpT,EAAW,YAAkB6Q,GAC7B,kIAAC0qB,EAAA,KAAcC,GAAA,KAIf,yCAACC,GAAA,MAAuBC,GAAA,MACxB,yCAACC,GAAA,MAA+BC,GAAA,MAChC,uCAACC,GAAA,MAAmBC,GAAA,MAElBjnB,GAAA,EAAAA,KAAM0lB,GAAA,EAAAA,OAAQwB,GAAA,EAAAA,MAAOC,GAAA,EAAAA,yBAA0BC,GAAA,EAAAA,QAAS/5B,GAAA,EAAAA,MAC1Dg6B,GAAqB38B,EAAM48B,0BAA0B52B,MACzD,SAAChB,GAAM,OAAAA,EAAEsQ,QAAUtV,EAAM68B,cAAgBb,EAAapB,iBAAmB56B,EAAMsV,SAGjF,qBAAU,W,YACR,GAAInI,SAAS2vB,KAAM,CACjB,IAAIC,EAAS5vB,SAAS6vB,eAAe,cAChCD,KACHA,EAAS5vB,SAASsC,cAAc,WACzBjK,KAAO,sBACdu3B,EAAO7tB,GAAK,aACZ/B,SAAS2vB,KAAKG,YAAYF,IAG5B,IAAMG,EACJP,GAAmB5c,OAAS,EACxB,CACA,QAAS,kBACTod,YAAaR,GAAmB5c,OAChCwO,YAAaoO,GAAmBS,mBAEhCpjB,EAEAqjB,EAAgB,CACpB,WAAY,sBACZ,QAAS,UACTzc,KAAMA,EACNT,YAA2C,QAAhC,EAAEwc,GAAmBxc,mBAAW,eAAEvb,MAC7CjC,MAAOq5B,EAAar5B,MACpB26B,IAAKtB,EAAa1mB,KAClBioB,KAAMvB,EAAawB,QACnBC,IAAKzB,EAAajZ,WAClB7iB,MACE6J,OAAOC,SAASC,SAChB,KACAF,OAAOC,SAASE,MAC4C,QADxC,EACQ,QADR,EACpByyB,GAAmB/oB,iBAAS,eAAE5N,MAAK,SAAChB,GAAM,MAAW,UAAXA,EAAEQ,eAAgB,eAAGqP,UACjE6oB,MAAO,CACL,QAAS,QACT9c,KAAM,mBAER+c,OAAQ,CACN,QAAS,QACTC,cAAe59B,EAAMo6B,SACrBoC,MAAsC,QAAjC,EAAER,EAAaQ,MAAMqB,oBAAY,eAAE3V,WACxC4V,cAAe,kCACf7K,aAAc+I,EAAaU,QAAU,6BAA+B,gCACpE57B,IAAKd,EAAMc,KAEbo8B,gBAAe,GAGjBH,EAAOgB,UAAYC,KAAKC,UAAUZ,MAEnC,CAACrB,IAEJ,IAAMkC,KAAsB1C,GACxBA,EAA8BQ,EAAa1mB,MAGzC6oB,GAAkB1B,GAA2B,EAE7C1oB,IADuB,OAAZ,EAAI,QAAL,EAACumB,SAAI,eAAE35B,QAAM,EAAI,GAAK,EACP,IAAM,IAC/By9B,KAAuBp+B,EAAMk3B,gBAC7BxiB,GAA+C,OAAtC,EAA8B,QAA9B,EAAGioB,GAAmB0B,gBAAQ,eAAE19B,QAAM,EAAI,EACnD29B,GAAkB5pB,GAAY,GAClC,kBAACkkB,GAAmB,KACjB+D,GAAmB0B,SAASj3B,KAAI,SAACm3B,EAAS/0B,GAAU,OACnD,oCACE,kBAAC,IAAI,CAACjC,IAAKiC,EAAO4G,WAAS,GACxBmuB,GAEF7pB,GAAY,GAAKlL,EAAQ,EAAIkL,GAAY,kBAACmkB,GAAsB,UAA8B,QAMvG,OACE,kBAAC2F,EAAA,EAAI,KACH,kBAAC1F,GAAc,CAACz1B,UAAW5C,EAAU8C,eAAe,EAAMD,YAAaA,GACrE,kBAAC,GAAU,CACT/C,UAAW,YAAkB,GAAI,GAAI,YAA2B,GAAK,MAAKE,GAAY,qBAErFA,GACC,kBAACmW,GAAA,EAAkB,CACjBhD,UAAW+oB,GAAmB/oB,UAC9BvD,KAAMssB,GAAmBtsB,KACzBwD,YAAaA,EACbC,gBAAiBA,IAGrB,kBAACilB,GAAe,CAACx4B,UAAW,YAAkB,GAAI,EAAIE,EAA8B,GAAnB,mBAC/D,kBAACu3B,GAAQ,CAACz3B,UAAW,YAAkB,GAAI,IACzC,kBAACy4B,GAAkB,KAChB2D,GAAmB0B,UAAYC,GAChC,kBAAC,EAAO,CACNp5B,QAASy3B,GAAmBS,aAAe,EApHnC,WAClBT,GAAmBS,aAAe,IACpCb,GAAqB,WACjBZ,GACF,aAASA,EAAmB71B,QAAQ24B,UAAY,IAAK,OAgHsB,KACjE1e,OAAQ4c,GAAmB5c,OAC3BC,gBAAiB2c,GAAmBS,aACpCtd,OAAQ,CAAEO,QAASP,EAAOO,YAG9B,kBAAC4Y,GAAW,CAACj2B,SAAU,IAAe07B,SAAU9d,GAChD,kBAAC+d,GAAA,EAAK,CACJC,WAAS,EACTC,UAAWrC,GAAMqC,UACjBhB,aAAcrB,GAAMqB,aACpBiB,aAActC,GAAMsC,aACpBC,oBAAoB,EACpB/7B,SAAUvC,EAAW,GAAK,GAC1Bu+B,kBAAmBv+B,EAAW,GAAK,GACnCw+B,mBAAmB,IAG+B,IAAnDtC,GAAmBuC,qBAAqBv+B,QACvC,kBAAC4hB,EAAA,EAAW,CACV/R,aAAc/P,EAAW,OAAS,OAClC+B,UAAW/B,EAAW,OAAS,OAC/B4P,KAAMssB,GAAmBuC,qBACzB5uB,YAAa,EACbxL,cAAegb,EAAOqf,YACtBxuB,cAnJQ,WAClB+qB,GACF,aAASA,EAAmB51B,QAAQ24B,UAAY,GAAI,QAqJ5C,kBAAC,IAAc,CAACruB,WAAS,EAACxP,IAAG,IAC1Bkf,EAAOnd,M,KAASA,IAGI,IAAtBy4B,EAAWz6B,QACV,6BACGy6B,EAAWh0B,KAAI,SAACg4B,EAAW51B,GAAU,OACpC,kBAAC0vB,GAAa,CACZ3xB,IAAKiC,EACLG,GAAIy1B,EAAUt+B,IACdu+B,cAAc,EACdz1B,MAAOw1B,EAAUxe,KAAO,IAAMwe,EAAUz8B,MAAM28B,eAE9C,kBAACnG,GAAkB,CACjBv4B,IAAG,eACGZ,EAAMsV,OAAS8pB,EAAU9pB,MAAQ,CACnC+D,OAAQ,CACNlV,GAAI,CAAExB,MAAO,IAAaC,WAAWgG,MAAO/G,MAAO,EAAGiF,MAAO,YAInEpB,IAAK,YAAkB05B,EAAUG,UAAW,IAAOvqB,kBAM7D,kBAACijB,GAAY,KACX,kBAACC,GAAgB,CAAC9nB,WAAS,EAACpN,SAAU,IAAe8sB,cAClDhQ,EAAO0f,YAETpB,IACC,kBAACjG,GAAa,CACZ/nB,WAAS,EACTpN,SAAU,IAAe8sB,aACzB5qB,QAAS,WAAM,OAAAi3B,IAAyB,KAEvCrc,EAAOwX,WAGZ,kBAAC,KAAe,CACd4D,MAAOA,EACPuE,iBAAkBzD,EAAa1mB,KAC/B2mB,gBAAiB,SAACl7B,GACZ,YAAaA,GAAMk7B,GAAgBl7B,IAEzCkZ,YAAa6F,EAAO0f,cAIvBpB,IACC,kBAAC,GAAc,CACb5J,aAAc0H,GACdzH,UAAW,WAAM,OAAA0H,IAAyB,IAC1CjF,gBAAiBl3B,EAAMk3B,kBAI3B,kBAACkB,GAAS,KACK,QADL,EACP+C,SAAY,a,EAAE/zB,KAAI,SAAC6D,EAAG3D,GAAM,OAC3B,kBAACmxB,GAAO,CAAClxB,IAAKD,GACZ,kBAACoxB,GAAY,MACb,kBAAC,IAAI,CAACtoB,WAAS,EAACpN,SAAU,IAAeod,SACtCnV,OAIP,kBAACstB,GAAe,CACdrzB,QAAS,WACP,OAACw3B,IAAW18B,EAAM0/B,WAAa,KAAO5E,EAAUxlB,GAAM,EAAG0lB,GAAQh7B,EAAM67B,aAAc77B,EAAMsV,OAE7FlQ,MAAO,IAAY8rB,aACnByO,UAAWjD,IAAW18B,EAAM0/B,WAC5Bv6B,UAAW,kBAACqzB,GAAa,MACzB5U,YAAa5jB,EAAM8f,OAAO8f,YAC1BC,WAAY7/B,EAAM8f,OAAOggB,gBACzBr+B,OAAQ,IAAas+B,MAEpB//B,EAAM0/B,WAAa,aAAU,4BAA8B5f,EAAOgb,WAErE,kBAACtB,GAAa,KACZ,kBAACC,GAAoB,KACnB,kBAACja,EAAA,EAAe,CACd5e,IAAK,CACH+B,MAAOw7B,GAAkB,IAAavjB,YAAYC,MAAQ,IAAaD,YAAYolB,OAGvF,kBAAC,IAAI,KAAElgB,EAAOmgB,kBAEfjgC,EAAMkgC,2BACJ3N,EACC,kBAACmH,GAAqB,KACnB6B,GACC,kBAAC/b,EAAA,EAAe,CAAC5e,IAAK,CAAE+B,MAAO,aAAgB44B,EAAoBzI,uBAErE,kBAAC,IAAI,KAAEP,EAAc3R,MACrB,kBAAC+Y,GAAqB,KAAEpH,EAAcI,MACtC,kBAACmH,GAAW,CAAC50B,QAAS,WAAM,OAAAm3B,IAAiC,KAC3D,kBAAC,IAAS,CAACr5B,SAAU,IAAe+O,QAASb,WAAY,IAAqBc,WAC3E8N,EAAOqgB,eAKd,kBAACvG,GAAa,CAAC10B,QAAS,WAAM,OAAAm3B,IAAiC,KAC7D,kBAACrC,GAAS,MACV,kBAACH,GAAa,KAAE/Z,EAAOsgB,sBAKhClC,IAAuBl+B,EAAMqgC,qBAC5B,kBAAChI,GAAiB,KAChB,kBAACC,GAAiB,KAAEt4B,EAAMqgC,sBAI9B,kBAAC,GAAsB,CACrB7L,aAAc4H,GACd3H,UAAW,WAAM,OAAA4H,IAAiC,IAClDvc,OAAQ9f,EAAMsgC,2BAGE,QAAjB,EAAAhF,SAAiB,eAAE36B,QAAS,GAC3B,kBAAC0jB,GAAoB,CACnBC,SAAUgX,EACVj4B,UAAW5C,EACX6D,MAAOwb,EAAOygB,0BACdhc,UAAW,QAKjB9jB,GACA,kBAAC,IAAOmB,IAAG,CACTrB,UAAW,YAAkB,GAAI,EAAG,YAA2B,IAC/DK,IAAK,CAAE4P,aAAc,IAAIuD,GAAY,OAErC,kBAACL,GAAA,EAAmB,CAClBE,UAAW+oB,GAAmB/oB,UAC9BvD,KAAMssB,GAAmBtsB,KACzBwD,YAAaA,EACbC,gBAAiBA,EACjBC,aAAcA,QAMxB,kBAACqlB,GAAoB,CAAC74B,UAAU,QAC9B,kBAAC,GAAY,CACXuf,OAAQ,CACNoC,iBAAkBpC,EAAO0gB,eACzBre,aAAcrC,EAAOO,QACrBmD,oBAAqB3P,EAAciM,EAAO2gB,mBAAqB3gB,EAAO4gB,eACtEC,oBAAqB7gB,EAAO8gB,wBAC5B97B,cAAegb,EAAO+gB,SACtBtd,cAAezD,EAAOghB,SACtB9d,0BAA2BlD,EAAOihB,qBAClC7d,0BAA2BpD,EAAOkhB,qBAClCje,WAAYjD,EAAOiD,YAErBhD,OAAQ4c,GAAmB5c,OAC3BC,gBAAiB2c,GAAmBS,aACpC/a,aAAcA,EACdC,YAAaqa,GAAmBuC,qBAChC1c,mBAAoBma,GAAmBxc,YACvCwC,yBAA0Bga,GAAmBha,yBAC7CI,WAAYiZ,EAAajZ,WACzBY,iBAAkB7P,EAClBD,YAAaA,EACb4P,SAAUA,EACVwd,iBAAkB,KAClBzgB,kBAAmBA,EACnByB,YAAayZ,KAIhBiB,GAAmBuE,gBAAiE,QAAhD,EAAAvE,GAAmBuE,cAAcC,uBAAe,eAAExgC,QAAS,GAC9F,kBAAC04B,GAAqB,KACpB,kBAAC+H,GAAA,EAAkB,CACjB9oB,SAAUqkB,GAAmBuE,cAAcC,gBAC3C99B,UAAW5C,EACX6D,MAAOtE,EAAM8f,OAAOuhB,mBACpB9oB,aAAa,KAInB,kBAAC+gB,GAAiB,KAChB,kBAAC,GAAgB,CACf7R,YAAagU,EACbpN,sBAAuBruB,EAAM8f,OAAOwhB,kBACpCzW,iBAAkB7qB,EAAM8f,OAAOoL,YAC/BJ,aAAc6R,GAAmB7R,aACjCC,UAAW/qB,EAAM8f,OAAOyhB,WACxBvW,iBAAkB2R,GAAmB3R,iBACrCsD,oBAAqBtuB,EAAM8f,OAAO0hB,wBAClCnV,eAAgBrsB,EAAMqsB,eACtBlK,aAAcniB,EAAM8f,OAAO2hB,iBAC3Brc,aAAY,2BAAOplB,EAAMolB,cAAY,CAAE/E,QAASrgB,EAAM8f,OAAOO,UAC7DkO,YAAaoO,GAAmBS,aAChC5O,YAAamO,GAAmB5c,OAChC0O,wBAAyBzuB,EAAM8f,OAAO4hB,4BACtChT,mBAAoB1uB,EAAM0uB,mBAC1BrrB,UAAW5C,EACXkuB,gBAAiB2N,GACjB1N,mBAAoB+M,EACpBlO,qBAAsB,WAAM,OAAA8O,GAAqB,QAGpDv8B,EAAM2hC,iBAAmB3hC,EAAM2hC,gBAAgBhhC,OAAS,GACvD,kBAAC44B,GAAuB,CAACh5B,UAAU,QACjC,yBAAKA,UAAW,YAAkB,GAAI,GAAI,YAA2B,KACnE,kBAAC,KAAmB,CAClB+jB,SAAUtkB,EAAM2hC,gBAChBt+B,UAAW5C,EACXkV,SAAUlV,EACVmY,gBAAgB,EAChBC,YAAa7Y,EAAM8f,OAAO8hB,6B,IAU3B,aApOgC,CAAEpxB,aAAc","file":"assets/14.chunk.4c8a9caef9a590e49560.js","sourcesContent":["import React from 'react';\r\nimport { AspectRatioInner, AspectRatioOuter, OverlayNotABackdrop } from 'Shared/SharedComponents/atoms/AspectRatio';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport { setImageBackground, Preset } from 'Shared/image-background';\r\nimport VideoSourceType from 'Shared/ViewModels/VideoSourceViewModel.type';\r\nimport VideoPlayer from 'Shared/Video/VideoPlayer'\r\nimport { isCompact } from 'Shared/Viewport';\r\n\r\ntype BasePropTypes = {\r\n children?: React.ReactNode;\r\n image?: { url?: string };\r\n videoSources?: VideoSourceType[];\r\n breakPoint: number;\r\n preset?: Preset;\r\n};\r\n\r\ntype ImageVideoBackgroundPropTypes = BasePropTypes & {\r\n borderRadius?: number;\r\n paddingTop: string;\r\n className?: string;\r\n};\r\n\r\ntype ViewportSizeVideoBackgroundPropTypes = BasePropTypes & {\r\n fixedVideo?: boolean;\r\n borderRadius?: number;\r\n height?: string;\r\n gradientBg?: boolean;\r\n};\r\n\r\nexport const AspectImageVideoBackground = (\r\n (\r\n props: ImageVideoBackgroundPropTypes & {},\r\n ) => {\r\n const { children,\r\n image,\r\n paddingTop,\r\n videoSources,\r\n borderRadius,\r\n breakPoint,\r\n className,\r\n preset } = props;\r\n\r\n const isMobile = isCompact(breakPoint);\r\n const gotVideo = (videoSources?.length ?? 0) > 0;\r\n return (\r\n \r\n 0 ? `${borderRadius}px` : '0px'\r\n }}\r\n >\r\n {gotVideo && (\r\n \r\n \r\n \r\n )}\r\n {children}\r\n \r\n \r\n );\r\n }\r\n);\r\n\r\nexport const ViewportSizeVideoBackground = styled(\r\n (\r\n props: ViewportSizeVideoBackgroundPropTypes & StyledProps,\r\n ) => {\r\n const { children,\r\n image,\r\n videoSources,\r\n breakPoint,\r\n fixedVideo = false,\r\n //css,\r\n borderRadius,\r\n preset,\r\n height = '100%',\r\n compose,\r\n } = props;\r\n const hasVideo = (videoSources?.length ?? 0) > 0;\r\n const isMobile = isCompact(breakPoint);\r\n return (\r\n 0 ? `${borderRadius}px` : '0px'\r\n }),\r\n ...(fixedVideo && {\r\n clipPath: 'inset(0 0 0 0)',\r\n overflow: 'hidden',\r\n }),\r\n })}\r\n >\r\n {hasVideo && (\r\n \r\n \r\n \r\n )}\r\n {children}\r\n \r\n );\r\n }\r\n);\r\n\r\ntype AutoSizeVideoBackgroundPropTypes = BasePropTypes & {\r\n borderRadius: number;\r\n gradientBg?: boolean;\r\n};\r\n\r\nexport const AutoSizeVideoBackground = styled(\r\n (\r\n props: AutoSizeVideoBackgroundPropTypes & StyledProps,\r\n ) => {\r\n const { children,\r\n image,\r\n videoSources,\r\n breakPoint,\r\n borderRadius,\r\n preset,\r\n compose,\r\n } = props;\r\n return (\r\n \r\n {children}\r\n \r\n );\r\n });\r\n","import React from 'react';\r\nimport { styled, StyledProps } from '@glitz/react';\r\nimport { H1, ResponsiveSize, HeadingLabel } from 'Shared/SharedComponents/atoms/Typography';\r\nimport { ButtonHeight, ButtonTheme, SolidButton } from 'Shared/TextButtons';\r\nimport Breadcrumbs from 'Shared/SharedComponents/atoms/Breadcrumbs';\r\nimport BreadcrumbsViewModel from 'Shared/Breadcrumbs/BreadcrumbsViewModel.type';\r\nimport { createGridClasses, createOffsetGridClassLarge } from 'Shared/grid';\r\nimport { GridWrap } from 'Shared/PageLayout';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype TopContentPropType = React.HTMLAttributes & {\r\n label?: string;\r\n heading: string;\r\n headingSize?: ResponsiveSize;\r\n intro: string;\r\n isCompact: boolean;\r\n modalButtonText?: string;\r\n modalButtonIconAfter?: React.ReactNode;\r\n modalButtonClick?: () => void;\r\n handleReadMore?: Function | boolean;\r\n readMoreLabel?: String\r\n};\r\n\r\ntype TopContentWidePropType = TopContentPropType & {\r\n breadcrumbs?: BreadcrumbsViewModel[];\r\n};\r\n\r\ntype BreadcrumbWrapperPropType = React.HTMLAttributes & {\r\n isCompact: boolean;\r\n breadcrumbs?: BreadcrumbsViewModel[];\r\n isProductPage?: boolean;\r\n};\r\n\r\nconst TopLabel = styled(HeadingLabel, {\r\n margin: {\r\n top: 0,\r\n bottom: '16px',\r\n },\r\n});\r\n\r\nconst ReadMoreWrap = styled.div({\r\n display: 'flex',\r\n marginTop: '8px',\r\n});\r\n\r\nconst ReadMore = styled.span({\r\n color: style.colors.monochrome.a11ygrey,\r\n cursor: 'pointer',\r\n textTransform: 'uppercase',\r\n fontSize: '14px',\r\n fontWeight: 500,\r\n});\r\n\r\nconst TopContentHeading = styled(H1, {\r\n wordBreak: 'break-word'\r\n});\r\n\r\nexport const BreadcrumbWrapper = styled((props: BreadcrumbWrapperPropType & StyledProps) => {\r\n const { isCompact, breadcrumbs, children, isProductPage = false, compose } = props;\r\n\r\n return (\r\n \r\n \r\n {breadcrumbs && }\r\n \r\n {children}\r\n \r\n );\r\n});\r\n\r\nconst TopContentWideWrapper = styled(BreadcrumbWrapper, {\r\n padding: { bottom: '24px' },\r\n ['@media ' + style.mediaMinLarge]: {\r\n padding: { bottom: '48px' }\r\n },\r\n})\r\n\r\nexport const TopContentWide = (props: TopContentWidePropType) => {\r\n const { isCompact, breadcrumbs, children } = props;\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n );\r\n};\r\n\r\nconst TopContentButton = styled(SolidButton, {\r\n display: 'inline-flex',\r\n marginTop: '12px',\r\n ['@media ' + style.mediaMinLarge]: {\r\n marginTop: '24px',\r\n },\r\n})\r\n\r\nconst TopContentIntro = styled.p({\r\n margin: { xy: 0 },\r\n padding: { xy: 0 }\r\n})\r\n\r\nconst TopContentWrap = styled.div({\r\n ['@media ' + style.mediaUpToLarge]: {\r\n marginTop: '16px',\r\n },\r\n})\r\n\r\nconst TopContentChildren = styled.div({\r\n marginTop: '24px',\r\n ['@media ' + style.mediaMinLarge]: {\r\n marginTop: '48px',\r\n },\r\n})\r\n\r\nexport const TopContent = (props: TopContentPropType) => {\r\n const {\r\n isCompact,\r\n label,\r\n heading,\r\n headingSize,\r\n modalButtonText,\r\n modalButtonClick,\r\n modalButtonIconAfter,\r\n intro,\r\n children,\r\n handleReadMore = false,\r\n readMoreLabel = ''\r\n } = props;\r\n return (\r\n
\r\n {label && {label}}\r\n
\r\n
\r\n {heading}\r\n {modalButtonText && (\r\n modalButtonClick()}\r\n iconAfter={modalButtonIconAfter && modalButtonIconAfter}\r\n theme={ButtonTheme.WhiteToBlack}\r\n />\r\n )}\r\n
\r\n
\r\n \r\n {intro}\r\n {handleReadMore &&\r\n \r\n {\r\n if (typeof handleReadMore !== 'function') {\r\n return\r\n }\r\n handleReadMore()\r\n }}>\r\n {readMoreLabel}\r\n \r\n \r\n }\r\n \r\n \r\n {children}\r\n \r\n
\r\n );\r\n};\r\n","import React from 'react';\r\n\r\ntype ConnectedPropType = {\r\n type: string;\r\n url: string;\r\n};\r\n\r\ntype PropType = ConnectedPropType;\r\n\r\nclass VideoSource extends React.Component {\r\n render() {\r\n const props = this.props;\r\n const { type, url } = props;\r\n let videoType = 'video/mp4';\r\n switch(type)\r\n {\r\n case 'HLS':\r\n videoType = 'application/x-mpegURL';\r\n break;\r\n case 'MP4':\r\n videoType = 'video/mp4';\r\n break;\r\n }\r\n\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default VideoSource;\r\n","import React, { useEffect, useRef } from 'react';\r\nimport VideoSourceType from 'Shared/ViewModels/VideoSourceViewModel.type';\r\nimport Hls from \"hls.js\";\r\nimport VideoSource from './VideoSource';\r\n\r\ntype VideoType = {\r\n videoRef?: React.MutableRefObject;\r\n autoPlay: boolean;\r\n loop: boolean;\r\n muted: boolean;\r\n isMobile: boolean;\r\n coverContent: boolean;\r\n playsInline: boolean;\r\n fixedVideo?: boolean;\r\n sources?: VideoSourceType[];\r\n onEnded?: () => void,\r\n};\r\n\r\nconst VideoPlayer = (props: VideoType) => {\r\n const { sources, videoRef, autoPlay, loop, muted, isMobile, fixedVideo = false, coverContent, playsInline } = props;\r\n const playerRef = videoRef ? videoRef : useRef(null);\r\n\r\n useEffect(() => {\r\n if(playerRef && playerRef.current) {\r\n\r\n const video = playerRef.current;\r\n const hlsSource = sources?.find(x => x.type === 'HLS' && (x.device === 'ALL' || x.device === (isMobile ? 'MOBILE' : 'DESKTOP')));\r\n if (hlsSource && Hls.isSupported()) {\r\n var hls = new Hls();\r\n hls.loadSource(hlsSource.url);\r\n hls.attachMedia(video);\r\n hls.on(Hls.Events.MANIFEST_PARSED, function() { \r\n if(autoPlay) {\r\n video.play();\r\n }\r\n });\r\n } else if (hlsSource && video.canPlayType('application/vnd.apple.mpegurl')) {\r\n video.src = hlsSource.url;\r\n }\r\n\r\n if(!muted) {\r\n video.volume = 0.5;\r\n }\r\n }\r\n }, []);\r\n \r\n return (\r\n \r\n {sources?.filter(x => x.type !== \"HLS\").map((source, i) => {\r\n return (\r\n ((source.device === 'ALL' ||\r\n (source.device === 'DESKTOP' && !isMobile) ||\r\n (source.device === 'MOBILE' && isMobile)) && source.type !== 'HLS') && (\r\n \r\n )\r\n );\r\n })} \r\n \r\n );\r\n};\r\n\r\nexport default VideoPlayer;\r\n\r\n","import { styled } from '@glitz/react';\r\nimport React, { useRef, useEffect } from 'react';\r\nimport Link from 'Shared/Link';\r\nimport { TextLabel } from './Typography';\r\nimport { Down12x12, Right12x12 } from 'Shared/Icons/Chevron';\r\nimport BreadcrumbsViewModel from 'Shared/Breadcrumbs/BreadcrumbsViewModel.type';\r\nimport * as style from 'Shared/Style';\r\n\r\nconst BaseWrap = styled.div({\r\n textDecoration: 'none',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n padding: { xy: '0px' },\r\n})\r\n\r\nconst VerticalWrap = styled(BaseWrap, {\r\n transform: 'rotate(180deg)',\r\n justifyContent: 'center',\r\n writingMode: 'vertical-rl',\r\n alignItems: 'start',\r\n ['@media ' + style.mediaUpToLarge]: {\r\n padding: {\r\n x: '12px'\r\n }\r\n },\r\n})\r\n\r\nconst HorizontalWrap = styled(BaseWrap, {\r\n alignItems: 'center',\r\n flexWrap: 'nowrap',\r\n overflowX: 'auto',\r\n overflowY: 'hidden',\r\n scrollbarWidth: 'none',\r\n //@ts-ignore\r\n '-ms-overflow-style': 'none',\r\n '::-webkit-scrollbar': {\r\n display: 'none'\r\n },\r\n ['@media ' + style.mediaUpToLarge]: {\r\n padding: {\r\n x: '12px'\r\n }\r\n },\r\n})\r\n\r\nconst ListWrap = styled.div({\r\n display: 'flex',\r\n alignItems: 'center',\r\n})\r\n\r\nconst ListItem = styled.div({\r\n display: 'flex',\r\n gap: '2px',\r\n alignItems: 'center',\r\n})\r\n\r\nconst BreadCrumbLink = styled(Link, {\r\n whiteSpace: 'nowrap',\r\n textDecoration: 'none',\r\n padding: { xy: '0px' },\r\n})\r\n\r\nexport const Breadcrumbs = (props: { breadcrumbs: BreadcrumbsViewModel[]; vertical?: boolean; white?: boolean, isProductPage?: boolean, isCompact?: boolean }) => {\r\n const { vertical, breadcrumbs, white, isCompact, isProductPage } = props;\r\n const opaqueColor = white ? style.colors.monochrome.white : style.colors.monochrome.black;\r\n const halfTransparentColor = white\r\n ? style.colors.rgbaFilters.white50\r\n : style.colors.rgbaFilters.black50;\r\n\r\n if (breadcrumbs?.length < 1) {\r\n return <>;\r\n }\r\n\r\n const containerRef = useRef(null)\r\n\r\n useEffect(() => {\r\n if (vertical) {\r\n return () => {}\r\n }\r\n if(containerRef && containerRef.current !== null) {\r\n containerRef.current.scrollLeft = containerRef.current.offsetWidth; \r\n }\r\n\r\n return () => {} \r\n }, [breadcrumbs])\r\n const Wrapper = vertical ? VerticalWrap : HorizontalWrap;\r\n return (\r\n \r\n \r\n {breadcrumbs?.map((crumb, index, array) => {\r\n return (\r\n \r\n {index !== 0 &&\r\n (vertical ? (\r\n \r\n ) : (\r\n \r\n )\r\n )\r\n }\r\n \r\n \r\n {crumb.text} \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\nexport default Breadcrumbs;\r\n","import factory from './icon';\r\nimport Svg12x12 from './glyphs/Play_12x12.svg';\r\nimport Svg24x24 from './glyphs/Play_24x24.svg';\r\n\r\nexport const Play12x12 = factory(Svg12x12, 12, 12);\r\nexport const Play24x24 = factory(Svg24x24, 24, 24);\r\n","import factory from './icon';\r\nimport Svg34x24 from './glyphs/Sound_34x24.svg';\r\nimport SvgMuted34x24 from './glyphs/SoundMuted_34x24.svg';\r\n\r\nexport const Sound34x24 = factory(Svg34x24, 34, 24);\r\nexport const SoundMuted34x24 = factory(SvgMuted34x24, 34, 24);\r\n","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype PropType = {\r\n min: number;\r\n max: number;\r\n value: number;\r\n updateValue: (selectedValue: number) => void;\r\n width?: number;\r\n};\r\n\r\nconst SliderInput = styled.input({\r\n appearance: 'none',\r\n height: '2px',\r\n borderRadius: '1px',\r\n backgroundColor: style.colors.monochrome.white,\r\n '::-webkit-slider-thumb': {\r\n appearance: 'none',\r\n width: '4px',\r\n height: '4px',\r\n borderRadius: '8px',\r\n backgroundColor: style.colors.monochrome.white,\r\n cursor: 'pointer',\r\n padding: {\r\n y: '4px',\r\n x: '4px',\r\n },\r\n },\r\n})\r\n\r\nconst Slider = ({ min, max, value, updateValue, width }: PropType) => {\r\n return (\r\n updateValue(parseFloat(e.target.value))}\r\n css={{\r\n width: width ? `${width}px` : '100%',\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default Slider;\r\n","import React, { RefObject, useEffect, useState } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { Sound34x24, SoundMuted34x24 } from 'Shared/Icons/Sound';\r\nimport Slider from 'Shared/SharedComponents/atoms/Slider';\r\n\r\ntype PropType = {\r\n mediaRef: RefObject;\r\n};\r\n\r\nconst Wrap = styled.div({\r\n position: 'relative', height: '100%', display: 'flex', alignItems: 'center', gap: '8px'\r\n})\r\n\r\nconst Sound = styled(Sound34x24, {\r\n cursor: 'pointer'\r\n})\r\n\r\nconst Muted = styled(SoundMuted34x24, {\r\n cursor: 'pointer'\r\n})\r\n\r\nconst SoundControls = ({ mediaRef }: PropType) => {\r\n const [muted, setMuted] = useState(false);\r\n const [volume, setVolume] = useState(0);\r\n\r\n useEffect(() => {\r\n if (mediaRef?.current) {\r\n setMuted(mediaRef.current.muted);\r\n setVolume(mediaRef.current.volume);\r\n }\r\n }, [mediaRef]);\r\n\r\n const mute = () => {\r\n if (mediaRef?.current) {\r\n mediaRef.current.muted = true;\r\n setMuted(true);\r\n }\r\n };\r\n\r\n const unmute = () => {\r\n if (mediaRef?.current) {\r\n mediaRef.current.muted = false;\r\n setMuted(false);\r\n if (volume === 0) {\r\n setVolume(0.5);\r\n }\r\n }\r\n };\r\n\r\n const adjustVolume = (selectedVolume: number) => {\r\n let newVolume = Math.min(Math.max(selectedVolume, 0), 1);\r\n if (mediaRef?.current) {\r\n mediaRef.current.volume = newVolume;\r\n setVolume(newVolume);\r\n if (newVolume === 0) {\r\n setMuted(true);\r\n } else if (muted) {\r\n setMuted(false);\r\n }\r\n }\r\n };\r\n\r\n return (\r\n \r\n {muted ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {\r\n adjustVolume(selectedValue / 48);\r\n }}\r\n width={48}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default SoundControls;\r\n","import React, { RefObject, useState } from 'react';\r\nimport Slider from 'Shared/SharedComponents/atoms/Slider';\r\n\r\ntype PropType = {\r\n mediaRef: RefObject;\r\n};\r\n\r\nconst TimeControls = ({ mediaRef }: PropType) => {\r\n const [currentTime, setCurrentTime] = useState(0);\r\n const [duration, setDuration] = useState(1);\r\n\r\n const interval = setInterval(() => {\r\n if (mediaRef.current && mediaRef.current.readyState > 0) {\r\n setCurrentTime(mediaRef.current.currentTime);\r\n setDuration(mediaRef.current.duration);\r\n\r\n clearInterval(interval);\r\n }\r\n }, 200);\r\n\r\n const skipToTime = (selectedTime: number) => {\r\n if (mediaRef.current) {\r\n const newTime = Math.min(Math.max(selectedTime, 0), duration);\r\n mediaRef.current.currentTime = newTime;\r\n setCurrentTime(newTime);\r\n }\r\n };\r\n\r\n return (\r\n {\r\n skipToTime((selectedValue * duration) / 1000);\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default TimeControls;\r\n","import factory from './icon';\r\nimport Svg24x24 from './glyphs/Pause_24x24.svg';\r\n\r\nexport const Pause24x24 = factory(Svg24x24, 24, 24);\r\n","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { Pause24x24 } from 'Shared/Icons/Pause';\r\nimport { Play24x24 } from 'Shared/Icons/Play';\r\n\r\nconst Play = styled(Play24x24, {\r\n cursor: 'pointer'\r\n})\r\n\r\nconst Pause = styled(Pause24x24, {\r\n cursor: 'pointer'\r\n})\r\n\r\ntype PropType = {\r\n isPlaying: boolean;\r\n play: () => void;\r\n pause: () => void;\r\n};\r\n\r\nconst PlayControls = ({ isPlaying, play, pause }: PropType) => {\r\n return isPlaying ? (\r\n \r\n ) : (\r\n \r\n );\r\n};\r\n\r\nexport default PlayControls;\r\n","import factory from './icon';\r\nimport Svg24x24 from './glyphs/Maximize_24x24.svg';\r\n\r\nexport const Maximize24x24 = factory(Svg24x24, 24, 24);\r\n","import factory from './icon';\r\nimport Svg24x24 from './glyphs/Minimize_24x24.svg';\r\n\r\nexport const Minimize24x24 = factory(Svg24x24, 24, 24);\r\n","import React, { RefObject, useLayoutEffect } from 'react';\r\nimport { Maximize24x24 } from 'Shared/Icons/Maximize';\r\nimport { Minimize24x24 } from 'Shared/Icons/Minimize';\r\n\r\ntype PropType = {\r\n mediaRef: RefObject;\r\n isMaximized: boolean;\r\n updateIsMaximized: (selectedValue: boolean) => void;\r\n};\r\n\r\nconst MaximizeControls = ({ mediaRef, isMaximized, updateIsMaximized }: PropType) => {\r\n useLayoutEffect(() => {\r\n document.onfullscreenchange = () => {\r\n if (document.fullscreenElement === null) {\r\n updateIsMaximized(false);\r\n }\r\n };\r\n\r\n return () => {\r\n document.onfullscreenchange = null;\r\n };\r\n });\r\n\r\n const maximize = () => {\r\n mediaRef.current?.parentElement?.parentElement?.requestFullscreen();\r\n updateIsMaximized(true);\r\n };\r\n\r\n const minimize = () => {\r\n document.exitFullscreen();\r\n updateIsMaximized(false);\r\n };\r\n\r\n return isMaximized ? (\r\n \r\n ) : (\r\n \r\n );\r\n};\r\n\r\nexport default MaximizeControls;\r\n","import React, { ReactNode, useEffect, useRef, useState } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { ButtonHeight, ButtonTheme, SolidButton } from 'Shared/TextButtons';\r\nimport VideoSourceType from 'Shared/ViewModels/VideoSourceViewModel.type';\r\nimport * as style from 'Shared/Style';\r\nimport { ViewportSizeVideoBackground } from 'Shared/SharedComponents/molecules/ImageVideoBackground';\r\nimport { OverlayNotABackdrop } from 'Shared/SharedComponents/atoms/AspectRatio';\r\nimport SoundControls from './SoundControls';\r\nimport TimeControls from './TimeControls';\r\nimport PlayControls from './PlayControls';\r\nimport MaximizeControls from './MaximizeControls';\r\nimport { Plus12x12 } from 'Shared/Icons/Plus';\r\nimport VideoPlayer from 'Shared/Video/VideoPlayer'\r\nimport { Preset } from 'Shared/image-sizes';\r\n\r\ntype PropType = {\r\n videoSources: VideoSourceType[];\r\n previewImage: { url?: string };\r\n previewImagePreset?: Preset;\r\n previewVideoSources?: VideoSourceType[];\r\n isCompact: boolean;\r\n children?: ReactNode;\r\n videoStarted: boolean;\r\n stopVideo?: () => void;\r\n loop?: boolean;\r\n muted?: boolean;\r\n buttonsInControls?: { text: string; onClick: () => void }[];\r\n};\r\n\r\nconst Wrap = styled.div({\r\n position: 'relative', height: '100%', overflow: 'hidden', alignSelf: 'normal'\r\n})\r\n\r\nconst VideoStopped = styled.div({\r\n display: 'flex',\r\n height: '100%',\r\n width: '100%',\r\n position: 'absolute',\r\n top: 0,\r\n flexDirection: 'column',\r\n color: style.colors.monochrome.white,\r\n})\r\n\r\nconst VideoStartedWrap = styled.div({\r\n height: '100%',\r\n width: '100%',\r\n position: 'absolute',\r\n top: 0,\r\n paddingBottom: '40px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'end',\r\n color: style.colors.monochrome.white,\r\n gap: '32px',\r\n})\r\n\r\nconst VideoStartedWrapDesktop = styled(VideoStartedWrap, {\r\n gap: '16px',\r\n})\r\n\r\nconst TimeControlWrapMobile = styled.div({\r\n width: '100%',\r\n padding: { x: '24px' },\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n})\r\n\r\nconst ButtonsWrapDesktop = styled.div({\r\n width: '100%',\r\n padding: { x: '40px' },\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '8px',\r\n alignItems: 'center',\r\n justifyContent: 'end',\r\n})\r\n\r\nconst ButtonsWrapMobile = styled.div({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '8px',\r\n})\r\n\r\nconst PlusIcon = styled(Plus12x12, {\r\n marginLeft: '8px'\r\n})\r\n\r\nconst OuterBase = styled.div({\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '24px',\r\n alignItems: 'center',\r\n})\r\n\r\nconst OuterMobile = styled(OuterBase, {\r\n padding: { x: '32px' },\r\n justifyContent: 'space-between',\r\n})\r\n\r\nconst OuterDesktop = styled(OuterBase, {\r\n padding: { x: '40px' },\r\n})\r\n\r\nconst Inner = styled.div({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '24px',\r\n alignItems: 'center',\r\n})\r\n\r\nconst Video = ({\r\n videoSources,\r\n previewImage,\r\n previewImagePreset,\r\n previewVideoSources,\r\n isCompact,\r\n videoStarted,\r\n stopVideo = () => { },\r\n children,\r\n loop = false,\r\n muted = false,\r\n buttonsInControls,\r\n}: PropType) => {\r\n const videoRef = useRef(null);\r\n const [isPlaying, setIsPlaying] = useState(false);\r\n const [isMaximized, setIsMaximized] = useState(false);\r\n\r\n const play = () => {\r\n videoRef.current?.play();\r\n setIsPlaying(true);\r\n };\r\n\r\n const pause = () => {\r\n videoRef.current?.pause();\r\n setIsPlaying(false);\r\n };\r\n\r\n useEffect(() => {\r\n if (videoStarted) {\r\n play();\r\n }\r\n }, [videoStarted]);\r\n\r\n const VideoStartedWrapElement = isCompact ? VideoStartedWrap : VideoStartedWrapDesktop;\r\n const Outer = isCompact ? OuterMobile : OuterDesktop;\r\n return (\r\n \r\n \r\n {videoStarted && (\r\n \r\n stopVideo()}\r\n />\r\n \r\n )}\r\n {!videoStarted && (\r\n \r\n {children}\r\n \r\n )}\r\n {videoStarted && !loop && (\r\n {\r\n if (event.target === event.currentTarget) {\r\n if (isPlaying) {\r\n pause();\r\n } else {\r\n play();\r\n }\r\n }\r\n }}\r\n >\r\n {!isCompact && buttonsInControls && buttonsInControls.length > 0 && (\r\n \r\n {buttonsInControls.map((buttonInControls, index) => {\r\n return (\r\n buttonInControls.onClick()}\r\n iconAfter={}\r\n padding={{ x: 16 }}\r\n height={ButtonHeight.Video}\r\n theme={ButtonTheme.TransparentWhite}\r\n />\r\n );\r\n })}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {isCompact && buttonsInControls && buttonsInControls.length > 0 && (\r\n \r\n {buttonsInControls.map((buttonInControls, index) => {\r\n return (\r\n buttonInControls.onClick()}\r\n iconAfter={}\r\n padding={{ x: 16 }}\r\n height={ButtonHeight.Video}\r\n theme={ButtonTheme.TransparentWhite}\r\n />\r\n );\r\n })}\r\n \r\n )}\r\n \r\n {!isCompact && }\r\n \r\n \r\n {isCompact && (\r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default Video;","var React = require('react');\n\nfunction Play12x12 (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Inverted=off, Size=12x12\"},React.createElement(\"path\",{\"id\":\"Polygon 2\",\"d\":\"M10.496 6.868L12.016 6l-1.52-.868-7-4L2 .277v11.446l1.496-.855 7-4z\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinejoin\":\"round\"})));\n}\n\nPlay12x12.defaultProps = {\"width\":\"12\",\"height\":\"12\",\"viewBox\":\"0 0 12 12\",\"fill\":\"none\"};\n\nmodule.exports = Play12x12;\n\nPlay12x12.default = Play12x12;\n","var React = require('react');\n\nfunction Play24x24 (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Inverted=off, Size=24x24\"},React.createElement(\"path\",{\"id\":\"Polygon 2\",\"d\":\"M21.784 13.77c1.425-.75 1.425-2.79 0-3.54L5.932 1.887C4.6 1.186 3 2.15 3 3.657v16.687c0 1.505 1.6 2.47 2.931 1.77l15.853-8.344z\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\"})));\n}\n\nPlay24x24.defaultProps = {\"width\":\"24\",\"height\":\"24\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\"};\n\nmodule.exports = Play24x24;\n\nPlay24x24.default = Play24x24;\n","var React = require('react');\n\nfunction Sound34x24 (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"path\",{\"d\":\"M21 21a9 9 0 100-18m0 13a4 4 0 000-8\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"key\":0}),React.createElement(\"mask\",{\"id\":\"path-3-outside-1_19324_440601\",\"maskUnits\":\"userSpaceOnUse\",\"x\":\"0\",\"y\":\".133\",\"width\":\"17\",\"height\":\"23\",\"fill\":\"#000\",\"key\":1},[React.createElement(\"path\",{\"fill\":\"#fff\",\"d\":\"M0 .133h17v23H0z\",\"key\":0}),React.createElement(\"path\",{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"M6.6 9H3a1 1 0 00-1 1v4a1 1 0 001 1h3.6l6.76 5.633a1 1 0 001.64-.768V4.135a1 1 0 00-1.64-.768L6.6 9z\",\"key\":1})]),React.createElement(\"path\",{\"d\":\"M6.6 9v2h.724l.557-.464L6.6 9zm0 6l1.28-1.537L7.324 13H6.6v2zm6.76 5.633l-1.28 1.536 1.28-1.536zM15 4.135h2-2zm-1.64-.768l1.28 1.536-1.28-1.536zM3 10.998h3.6V7H3v4zm1-1a1 1 0 01-1 1V7a3 3 0 00-3 3h4zm0 4v-4H0v4h4zm-1-1a1 1 0 011 1H0a3 3 0 003 3v-4zm3.6 0H3v4h3.6v-4zm-1.28 3.537l6.76 5.633 2.56-3.073-6.76-5.633-2.56 3.073zm6.76 5.633c1.953 1.629 4.92.24 4.92-2.304h-4a1 1 0 011.64-.769l-2.56 3.073zM17 19.865V4.135h-4v15.73h4zm0-15.73C17 1.59 14.033.202 12.08 1.83l2.56 3.073A1 1 0 0113 4.135h4zM12.08 1.83L5.32 7.463l2.56 3.073 6.76-5.633-2.56-3.073z\",\"fill\":\"currentColor\",\"mask\":\"url(#path-3-outside-1_19324_440601)\",\"key\":2})]);\n}\n\nSound34x24.defaultProps = {\"width\":\"34\",\"height\":\"24\",\"viewBox\":\"0 0 34 24\",\"fill\":\"none\"};\n\nmodule.exports = Sound34x24;\n\nSound34x24.default = Sound34x24;\n","var React = require('react');\n\nfunction SoundMuted34x24 (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"mask\",{\"id\":\"path-1-outside-1_19324_440678\",\"maskUnits\":\"userSpaceOnUse\",\"x\":\"0\",\"y\":\".133\",\"width\":\"17\",\"height\":\"23\",\"fill\":\"#000\",\"key\":0},[React.createElement(\"path\",{\"fill\":\"#fff\",\"d\":\"M0 .133h17v23H0z\",\"key\":0}),React.createElement(\"path\",{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"M6.6 9H3a1 1 0 00-1 1v4a1 1 0 001 1h3.6l6.76 5.633a1 1 0 001.64-.768V4.135a1 1 0 00-1.64-.768L6.6 9z\",\"key\":1})]),React.createElement(\"path\",{\"d\":\"M6.6 9v2h.724l.557-.464L6.6 9zm0 6l1.28-1.537L7.324 13H6.6v2zm6.76 5.633l-1.28 1.536 1.28-1.536zM15 4.135h2-2zm-1.64-.768l1.28 1.536-1.28-1.536zM3 10.998h3.6V7H3v4zm1-1a1 1 0 01-1 1V7a3 3 0 00-3 3h4zm0 4v-4H0v4h4zm-1-1a1 1 0 011 1H0a3 3 0 003 3v-4zm3.6 0H3v4h3.6v-4zm-1.28 3.537l6.76 5.633 2.56-3.073-6.76-5.633-2.56 3.073zm6.76 5.633c1.953 1.629 4.92.24 4.92-2.304h-4a1 1 0 011.64-.769l-2.56 3.073zM17 19.865V4.135h-4v15.73h4zm0-15.73C17 1.59 14.033.202 12.08 1.83l2.56 3.073A1 1 0 0113 4.135h4zM12.08 1.83L5.32 7.463l2.56 3.073 6.76-5.633-2.56-3.073z\",\"fill\":\"#fff\",\"mask\":\"url(#path-1-outside-1_19324_440678)\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M21 18l6-6m0 0l6-6m-6 6l-6-6m6 6l6 6\",\"stroke\":\"#fff\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\",\"key\":2})]);\n}\n\nSoundMuted34x24.defaultProps = {\"width\":\"34\",\"height\":\"24\",\"viewBox\":\"0 0 34 24\",\"fill\":\"none\"};\n\nmodule.exports = SoundMuted34x24;\n\nSoundMuted34x24.default = SoundMuted34x24;\n","var React = require('react');\n\nfunction Pause24x24 (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M8 1v22m8-22v22\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\"}));\n}\n\nPause24x24.defaultProps = {\"width\":\"24\",\"height\":\"24\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\"};\n\nmodule.exports = Pause24x24;\n\nPause24x24.default = Pause24x24;\n","var React = require('react');\n\nfunction Maximize24x24 (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M8 2H4a2 2 0 00-2 2v4m6 14H4a2 2 0 01-2-2v-4M16 2h4a2 2 0 012 2v4m-6 14h4a2 2 0 002-2v-4\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\"}));\n}\n\nMaximize24x24.defaultProps = {\"width\":\"24\",\"height\":\"24\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\"};\n\nmodule.exports = Maximize24x24;\n\nMaximize24x24.default = Maximize24x24;\n","var React = require('react');\n\nfunction Minimize24x24 (props) {\n return React.createElement(\"svg\",props,React.createElement(\"path\",{\"d\":\"M2 8h4a2 2 0 002-2V2M2 16h4a2 2 0 012 2v4M22 8h-4a2 2 0 01-2-2V2m6 14h-4a2 2 0 00-2 2v4\",\"stroke\":\"currentColor\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"round\"}));\n}\n\nMinimize24x24.defaultProps = {\"width\":\"24\",\"height\":\"24\",\"viewBox\":\"0 0 24 24\",\"fill\":\"none\"};\n\nmodule.exports = Minimize24x24;\n\nMinimize24x24.default = Minimize24x24;\n","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { TextBlockSmall, Text, ResponsiveSize } from 'Shared/SharedComponents/atoms/Typography';\r\nimport { StyleOrStyleArray } from '@glitz/type';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype TagsType = {\r\n tags: string[];\r\n marginTop?: string;\r\n marginBottom?: string;\r\n nrToDisplay?: number;\r\n readMoreLabel?: string;\r\n readMoreClick?: () => void;\r\n};\r\n\r\nconst Wrap = styled.div({\r\n display: 'flex', \r\n flexWrap: 'wrap',\r\n flexDirection: 'row',\r\n alignItems: 'center', \r\n gap: '8px',\r\n})\r\n\r\nconst InlineWrap = styled.span({\r\n display: 'flex', \r\n flexWrap: 'wrap',\r\n flexDirection: 'row',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n padding: { x: '12px', y: '8px' },\r\n gap: '16px',\r\n height: '32px',\r\n backgroundColor: style.colors.monochrome.extraLightGrey,\r\n borderRadius: '100px',\r\n flexBasis: 'none',\r\n flexGrow: 0,\r\n})\r\n\r\nconst ReadMoreLabel = styled(Text, {\r\n cursor: 'pointer',\r\n color: style.colors.monochrome.a11ygrey,\r\n ':hover': {\r\n color: style.colors.monochrome.black,\r\n }\r\n})\r\n\r\nfunction ProductTags(props: TagsType) {\r\n const tags = props.nrToDisplay ? props.tags && props.tags.slice(0, props.nrToDisplay) : props.tags && props.tags;\r\n\r\n return (\r\n \r\n {tags && tags.map((tag, i) => (\r\n {tag}\r\n ))}\r\n {props.readMoreLabel && (\r\n \r\n {props.readMoreLabel}\r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nexport const BgTag = ({ children, css }: { children: React.ReactNode; css?: StyleOrStyleArray }) => (\r\n \r\n {children}\r\n \r\n);\r\n\r\nexport default ProductTags;\r\n","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport ProductFeatureViewModel from 'Product/ProductFeature/ProductFeatureViewModel.type';\r\nimport { OverlayNotABackdrop } from 'Shared/SharedComponents/atoms/AspectRatio';\r\nimport { AspectImageVideoBackground } from 'Shared/SharedComponents/molecules/ImageVideoBackground';\r\nimport { Paragraph, ResponsiveSize, ResponsiveLineHeight } from 'Shared/SharedComponents/atoms/Typography';\r\nimport connect from 'Shared/connect';\r\nimport { selectDeviceImage } from 'Shared/utils';\r\nimport { isCompact } from 'Shared/Viewport';\r\nimport { PictureImage, Preset } from 'Shared/Image';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype PropType = {\r\n className?: string;\r\n feature: ProductFeatureViewModel;\r\n currentBreakpoint: number;\r\n};\r\n\r\nconst Wrap = styled.div({\r\n color: style.colors.monochrome.black,\r\n})\r\n\r\nconst Overlay = styled(OverlayNotABackdrop, {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n})\r\n\r\nconst Image = styled.img({\r\n width: '88px', height: '88px'\r\n})\r\n\r\nconst ContentWrap = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'flex-start',\r\n gap: '8px',\r\n marginTop: '16px',\r\n})\r\n\r\nconst Heading = styled.span({\r\n fontStyle: 'normal',\r\n fontWeight: 500,\r\n fontSize: '24px',\r\n lineHeight: '100%',\r\n textTransform: 'uppercase',\r\n display: 'block',\r\n})\r\n\r\nconst FeatureImage = styled(PictureImage, {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n objectPosition: 'center center',\r\n borderRadius: '8px'\r\n});\r\n\r\nexport const ProductFeature = connect((state) => {\r\n return {\r\n currentBreakpoint: state.currentBreakpoint,\r\n };\r\n})((props: PropType) => {\r\n const { feature } = props;\r\n const isMobile = isCompact(props.currentBreakpoint);\r\n const deviceImage = selectDeviceImage(feature.backgroundImage, feature.backgroundImageSmallScreen, isMobile);\r\n\r\n return (\r\n \r\n
\r\n \r\n {deviceImage && (\r\n \r\n )}\r\n \r\n {feature.icon?.url && (\r\n \r\n )}\r\n \r\n \r\n
\r\n \r\n \r\n {feature.heading}\r\n \r\n \r\n {feature.text}\r\n \r\n \r\n
\r\n );\r\n});\r\n\r\nexport default ProductFeature;\r\n","import React, { useEffect, useState, useRef } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport SwiperList from 'Shared/SwiperList';\r\nimport { Favourite24x24, FavouriteFull24x24 } from 'Shared/Icons/Favorite';\r\nimport { Cross48Uri, Plus48Uri } from 'Shared/Icons/Plus';\r\nimport TagViewModel from 'Shared/ViewModels/TagViewModel.type';\r\nimport * as style from 'Shared/Style';\r\nimport { appendImagePreset } from 'Shared/image-sizes';\r\nimport { PictureImage, Preset } from 'Shared/Image';\r\nimport { AspectRatioInner, AspectRatioOuter, OverlayNotABackdrop } from 'Shared/SharedComponents/atoms/AspectRatio';\r\nimport { BgTag } from 'Product/ProductTags';\r\nimport { colorFromTag } from 'Shared/utils';\r\nimport Resource from '../../../VoyadoElevate/Models/Resource.type';\r\nimport Video from 'Shared/Video/Video';\r\nimport VideoSource from 'Shared/ViewModels/VideoSourceViewModel.type';\r\nimport { Up32x32, Down32x32 } from 'Shared/Icons/ArrowCircle';\r\n\r\nconst ZoomWrap = styled.div({\r\n position: 'fixed',\r\n zIndex: 999,\r\n backgroundColor: style.colors.monochrome.white,\r\n top: 0,\r\n left: '0',\r\n pointerEvents: 'all',\r\n overflowY: 'scroll',\r\n overscrollBehaviorY: 'contain',\r\n height: '100vh',\r\n width: '100vw',\r\n})\r\n\r\nconst ZoomedImage = styled.img({\r\n width: '100%',\r\n objectFit: 'cover',\r\n cursor: `url(\"${Cross48Uri}\") 24 24, pointer`,\r\n})\r\n\r\nconst ZoomOverlay = styled(OverlayNotABackdrop, {\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n padding: { x: '16px', y: '8px' },\r\n alignItems: 'flex-end',\r\n justifyContent: 'flex-end',\r\n gap: '8px',\r\n position: 'fixed',\r\n pointerEvents: 'none',\r\n})\r\n\r\nconst ZoomImage = styled(PictureImage, {\r\n pointerEvents: 'all',\r\n width: '48px',\r\n height: '65px',\r\n filter: 'drop-shadow(0px 0px 16px rgba(0, 0, 0, 0.16))',\r\n borderRadius: '8px',\r\n objectFit: 'cover',\r\n objectPosition: 'center',\r\n cursor: 'pointer',\r\n transition: {\r\n timingFunction: 'ease-in-out',\r\n duration: '0.5s',\r\n property: 'opacity',\r\n },\r\n})\r\n\r\nconst Wrap = styled.div({\r\n position: 'sticky',\r\n top: 0,\r\n\r\n})\r\n\r\nconst WrapRation = styled(AspectRatioOuter, {\r\n width: 'calc(100% + 16px)',\r\n paddingTop: '0px',\r\n height: '100vh',\r\n //paddingTop: `${(768 / 675) * 100}%`,\r\n})\r\n\r\nconst ResourceWrap = styled.div({\r\n height: '100%',\r\n width: '100%'\r\n})\r\n\r\nconst VideoWrap = styled.div({\r\n height: '100%',\r\n width: '100%',\r\n objectFit: 'cover',\r\n transition: {\r\n timingFunction: 'ease-in-out',\r\n duration: '0.5s',\r\n property: 'transform',\r\n },\r\n})\r\n\r\nconst Image = styled(PictureImage, {\r\n height: '100%',\r\n width: '100%',\r\n display: 'block',\r\n objectFit: 'cover',\r\n objectPosition: 'center',\r\n transition: {\r\n timingFunction: 'ease-in-out',\r\n duration: '0.5s',\r\n property: 'transform',\r\n },\r\n})\r\n\r\nconst TagsAndImageOverlay = styled(OverlayNotABackdrop, {\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n padding: { xy: '16px' },\r\n alignItems: 'flex-end',\r\n gap: '8px',\r\n justifyContent: 'space-between',\r\n pointerEvents: 'none',\r\n})\r\n\r\nconst TagsWrap = styled.div({\r\n display: 'flex',\r\n gap: '8px',\r\n})\r\n\r\nconst FavoriteWrap = styled.div({\r\n width: '48px',\r\n height: '48px',\r\n backgroundColor: style.colors.rgbaFilters.white50,\r\n boxShadow: '0px 0px 16px rgba(0, 0, 0, 0.16)',\r\n borderRadius: '100px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n pointerEvents: 'all',\r\n cursor: 'pointer',\r\n})\r\n\r\nconst SlideItem = styled.div({\r\n width: '48px',\r\n height: '65px',\r\n})\r\n\r\nconst ThumbnailImage = styled(PictureImage, {\r\n pointerEvents: 'all',\r\n width: '100%',\r\n height: '100%',\r\n filter: 'drop-shadow(0px 1px 1px rgba(0, 0, 0, 0.2))',\r\n borderRadius: '8px',\r\n objectFit: 'cover',\r\n objectPosition: 'center',\r\n cursor: 'pointer',\r\n transition: {\r\n timingFunction: 'ease-in-out',\r\n duration: '0.5s',\r\n property: 'opacity',\r\n },\r\n})\r\n\r\n// const FadeOutOverlay = styled.div({\r\n// marginBottom: '30%',\r\n// position: 'absolute',\r\n// overflow: 'hidden', /* To ensure the pseudo-element doesn't extend beyond the parent */\r\n// borderRadius: '8px',\r\n// width: '48px',\r\n// height: '65px',\r\n// left: 0,\r\n// right: 0,\r\n// bottom: 0,\r\n// backgroundImage: 'linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 255, 1) 98%)',\r\n// zIndex: 1,\r\n// });\r\n\r\nconst FavoriteIcon = styled(Favourite24x24, {\r\n pointerEvents: 'all',\r\n cursor: 'pointer',\r\n})\r\n\r\nconst FavoriteFullIcon = styled(FavouriteFull24x24, {\r\n color: style.colors.monochrome.black,\r\n pointerEvents: 'all',\r\n cursor: 'pointer',\r\n})\r\n\r\nconst CarouselWrapper = styled.div({\r\n cursor: 'pointer',\r\n zIndex: 1,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n\r\n});\r\n\r\nconst CarouselImagesWrap = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px',\r\n height: 'calc(100% - 48px - 24px)', // height and margin of favorite icon\r\n alignItems: 'center',\r\n justifyContent: 'end',\r\n paddingBottom: '72px',\r\n})\r\n\r\nconst CarouselImagesContainer = styled.div({\r\n overflow: 'hidden',\r\n})\r\n\r\nconst NavNextIcon = styled(Down32x32, {\r\n pointerEvents: 'all',\r\n cursor: 'pointer',\r\n})\r\n\r\nconst NavPrevIcon = styled(Up32x32, {\r\n pointerEvents: 'all',\r\n cursor: 'pointer',\r\n})\r\n\r\nexport const DesktopImageGallery = (props: {\r\n resources: Resource[];\r\n tags?: TagViewModel[];\r\n isFavorited?: boolean;\r\n toggleFavorited?: (e: any) => Promise;\r\n headerOffset: number;\r\n}) => {\r\n const swiperRef = useRef(null);\r\n const INTERVAL = 4000;\r\n const { resources, tags, isFavorited, toggleFavorited, headerOffset } = props;\r\n const [currentItem, setCurrentItem] = useState(0);\r\n const [showZoom, setShowZoom] = useState(false);\r\n\r\n const [hasBeenClicked, setHasBeenClicked] = useState(false);\r\n const [isHovering, setIsHovering] = useState(false);\r\n\r\n const [intervalId, setIntervalId] = useState(0);\r\n const itemCount = resources?.length ?? 0;\r\n\r\n useEffect(() => {\r\n let isMounted = true;\r\n if (hasBeenClicked || isHovering || showZoom) {\r\n clearInterval(intervalId);\r\n setIntervalId(0);\r\n } else {\r\n if (intervalId === 0) {\r\n setIntervalId(\r\n setInterval(() => {\r\n if (isMounted) {\r\n setCurrentItem(\r\n currentItem => (currentItem + 1) % itemCount\r\n );\r\n swiperRef.current.slideTo(currentItem);\r\n }\r\n }, INTERVAL),\r\n );\r\n }\r\n }\r\n return () => {\r\n isMounted = false;\r\n clearInterval(intervalId);\r\n };\r\n }, [hasBeenClicked, isHovering, showZoom]);\r\n\r\n useEffect(() => {\r\n //Reset if the number of images changes without the component being unmounted\r\n setCurrentItem(0);\r\n setHasBeenClicked(false);\r\n }, [resources]);\r\n\r\n const handlePreviousClick = () => {\r\n swiperRef.current.slidePrev();\r\n const newCurrentItem = (currentItem - 1 + resources.length) % resources.length;\r\n setCurrentItem(newCurrentItem);\r\n };\r\n\r\n const handleNextClick = () => {\r\n swiperRef.current.slideNext();\r\n const newCurrentItem = (currentItem + 1) % resources.length;\r\n setCurrentItem(newCurrentItem);\r\n };\r\n\r\n return (\r\n <>\r\n {showZoom && (\r\n <>\r\n \r\n {\r\n setShowZoom(false);\r\n }}\r\n />\r\n \r\n {resources.map((item, index) => (\r\n {\r\n setCurrentItem(index);\r\n }}\r\n css={{\r\n opacity: currentItem === index ? 1 : 0.5,\r\n }}\r\n />\r\n ))}\r\n \r\n \r\n \r\n )}\r\n \r\n {\r\n setIsHovering(true);\r\n }}\r\n onMouseLeave={() => {\r\n setIsHovering(false);\r\n }}\r\n css={{\r\n top: `-${(headerOffset - 4)}px`,\r\n }}\r\n >\r\n \r\n \r\n {resources.map((item, index) => {\r\n if (item.type === 'VIDEO') {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n return (\r\n {\r\n setShowZoom(true);\r\n }}\r\n />\r\n );\r\n })}\r\n \r\n \r\n \r\n {tags && tags.slice(0, 2).map((tag, index) => (\r\n \r\n {tag.tag}\r\n \r\n ))}\r\n \r\n \r\n {!!toggleFavorited && (\r\n \r\n {isFavorited ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n \r\n setCurrentItem(swiperRef.current.activeIndex)}\r\n pagination={false}\r\n freeMode={false}\r\n cssMode={true}\r\n height={'100%'}\r\n >\r\n {resources.map((item, index) => (\r\n \r\n {\r\n setHasBeenClicked(true);\r\n setCurrentItem(index);\r\n }}\r\n css={{\r\n opacity: currentItem === index ? 1 : 0.5,\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 );\r\n};","import React, { useEffect, useState, useRef } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport SwiperList from 'Shared/SwiperList';\r\nimport { Favourite24x24, FavouriteFull24x24 } from 'Shared/Icons/Favorite';\r\nimport { Plus24x24 } from 'Shared/Icons/Plus';\r\nimport TagViewModel from 'Shared/ViewModels/TagViewModel.type';\r\nimport * as style from 'Shared/Style';\r\nimport { OverlayNotABackdrop } from 'Shared/SharedComponents/atoms/AspectRatio';\r\nimport { BgTag } from 'Product/ProductTags';\r\nimport { colorFromTag } from 'Shared/utils';\r\nimport Resource from '../../../VoyadoElevate/Models/Resource.type';\r\nimport Video from 'Shared/Video/Video';\r\nimport VideoSource from 'Shared/ViewModels/VideoSourceViewModel.type';\r\nimport { PictureImage, Preset } from 'Shared/Image';\r\n\r\nconst FavoriteIcon = styled(Favourite24x24, {\r\n})\r\n\r\nconst FavoriteFullIcon = styled(FavouriteFull24x24, {\r\n color: style.colors.monochrome.black\r\n})\r\n\r\nconst Wrap = styled.div({\r\n position: 'relative', width: '100%'\r\n})\r\n\r\nconst ShowZoomWrap = styled.div({\r\n display: 'flex',\r\n position: 'fixed',\r\n zIndex: 1000,\r\n top: '0',\r\n left: 0,\r\n pointerEvents: 'none',\r\n height: '100vh',\r\n width: '100vw',\r\n padding: { xy: '16px' },\r\n justifyContent: 'flex-end',\r\n})\r\n\r\nconst ShowZoomIcon = styled(Plus24x24, {\r\n pointerEvents: 'all',\r\n transform: 'rotate(45deg)',\r\n color: style.colors.monochrome.black,\r\n marginRight: '12px',\r\n cursor: 'pointer',\r\n})\r\n\r\nconst ZoomContainer = styled.div({\r\n position: 'fixed',\r\n zIndex: 999,\r\n backgroundColor: style.colors.monochrome.white,\r\n top: '0',\r\n pointerEvents: 'all',\r\n overflow: 'scroll',\r\n height: '100vh',\r\n width: '100vw',\r\n overscrollBehaviorY: 'contain',\r\n})\r\n\r\nconst ZoomImage = styled(PictureImage, {\r\n height: '100%',\r\n width: '100%',\r\n objectFit: 'cover',\r\n display: 'block',\r\n})\r\n\r\nconst SwiperVideo = styled.div({\r\n height: 'calc(4/3 * 100vw)',\r\n width: '100vw',\r\n objectFit: 'cover',\r\n})\r\n\r\n// const SwiperImage = styled.img({\r\n// height: '100%',\r\n// width: '100%',\r\n// objectFit: 'cover',\r\n// })\r\n\r\nconst SwiperImage = styled(PictureImage, {\r\n height: '100%',\r\n width: '100%',\r\n objectFit: 'cover',\r\n})\r\n\r\n\r\nconst TagsOverlay = styled(OverlayNotABackdrop, {\r\n zIndex: 1,\r\n pointerEvents: 'none',\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n padding: { xy: '12px' },\r\n alignItems: 'flex-end',\r\n gap: '8px',\r\n flexDirection: 'column',\r\n justifyContent: 'flex-end',\r\n})\r\n\r\nconst ShowZoomedWrap = styled(OverlayNotABackdrop, {\r\n zIndex: 1,\r\n pointerEvents: 'none',\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n padding: { xy: '12px' },\r\n alignItems: 'flex-end',\r\n gap: '8px',\r\n flexDirection: 'column',\r\n justifyContent: 'flex-start',\r\n})\r\n\r\nconst ShowZoomedIcon = styled(Plus24x24, {\r\n pointerEvents: 'all',\r\n cursor: 'pointer',\r\n})\r\n\r\nconst FavoriteWrap = styled(OverlayNotABackdrop, {\r\n zIndex: 1,\r\n pointerEvents: 'none',\r\n height: '100%',\r\n width: '100%',\r\n display: 'flex',\r\n padding: { xy: '16px' },\r\n alignItems: 'flex-start',\r\n gap: '8px',\r\n flexDirection: 'column',\r\n justifyContent: 'space-between',\r\n})\r\n\r\nexport const MobileImageGallery = (props: {\r\n resources: Resource[];\r\n tags?: TagViewModel[];\r\n isFavorited?: boolean;\r\n toggleFavorited?: (e: any) => Promise;\r\n}) => {\r\n const { resources, tags, isFavorited, toggleFavorited } = props;\r\n const [currentItem, setCurrentItem] = useState(0);\r\n const [loadedImages, setLoadedImages] = useState(0);\r\n const [showZoom, setShowZoom] = useState(false);\r\n const swiperRef = useRef(null);\r\n let zoomContainerRef = useRef(null);\r\n let zoomImageContainerRef = useRef(null);\r\n const zoomImageRefs = useRef([])\r\n const itemCount = resources?.length ?? 0;\r\n\r\n useEffect(() => {\r\n let isMounted = true;\r\n if (itemCount === 0 || !showZoom) {\r\n return () => { }\r\n }\r\n\r\n if (loadedImages === itemCount && isMounted) {\r\n zoomImageRefs.current[currentItem].scrollIntoView({\r\n behavior: \"smooth\",\r\n block: \"start\",\r\n inline: \"nearest\"\r\n })\r\n return () => setLoadedImages(() => 0)\r\n }\r\n return () => { isMounted = false; }\r\n }, [loadedImages, showZoom]);\r\n\r\n return (\r\n \r\n {showZoom && (\r\n <>\r\n \r\n {\r\n setShowZoom(false);\r\n }}\r\n />\r\n \r\n \r\n \r\n {resources.map((item, index) => {\r\n return (\r\n {\r\n setLoadedImages(() => loadedImages + 1)\r\n }}\r\n imageRef={(elm) => zoomImageRefs.current[index] = elm}\r\n />\r\n )\r\n })}\r\n \r\n \r\n \r\n )}\r\n setCurrentItem(swiperRef.current.activeIndex)}\r\n pagination={itemCount > 0}\r\n pagingItemCount={itemCount}\r\n freeMode={false}\r\n overflowHidden={true}\r\n paginationContainerCss={{\r\n position: 'absolute',\r\n bottom: '16px',\r\n left: '16px',\r\n zIndex: 1,\r\n }}\r\n cssMode={true}\r\n >\r\n {resources.map((item, index) => (\r\n
\r\n {item.type === 'VIDEO' ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n ))}\r\n \r\n \r\n {tags &&\r\n tags.slice(0, 2).map((tag, index) => (\r\n \r\n {tag.tag}\r\n \r\n ))}\r\n \r\n \r\n {\r\n setShowZoom(true);\r\n }}\r\n />\r\n \r\n \r\n {!!toggleFavorited && (\r\n \r\n {isFavorited ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n \r\n
\r\n );\r\n};\r\n","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport ProductFeatureViewModel from 'Product/ProductFeature/ProductFeatureViewModel.type';\r\nimport ProductFeature from 'Product/ProductFeature';\r\nimport { AspectImageVideoBackground } from 'Shared/SharedComponents/molecules/ImageVideoBackground';\r\nimport {\r\n H2,\r\n Paragraph,\r\n ResponsiveSize,\r\n ResponsiveLineHeight,\r\n} from 'Shared/SharedComponents/atoms/Typography';\r\nimport { Preset } from 'Shared/Image';\r\nimport { calculateTopPadding, Ratio } from 'Shared/AspectRatio';\r\nimport SwiperList from 'Shared/SwiperList';\r\nimport { createGridClasses, createOffsetGridClassLarge } from 'Shared/grid';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype PropType = {\r\n features: ProductFeatureViewModel[];\r\n smallLayout: boolean;\r\n isCompact: boolean;\r\n skipGridOffSet?: boolean;\r\n label: string;\r\n};\r\n\r\nconst BigContentWrap = styled.div({\r\n position: 'relative',\r\n height: '100%',\r\n justifyItems: 'center',\r\n alignContent: 'center',\r\n})\r\n\r\nconst BigIconWrap = styled.div({\r\n position: 'absolute',\r\n textAlign: 'center',\r\n width: '100%',\r\n marginTop: '104px',\r\n})\r\n\r\nconst BigParagraphWrap = styled.div({\r\n position: 'absolute',\r\n bottom: '40px',\r\n width: '100%'\r\n})\r\n\r\nconst BigParagraph = styled(Paragraph, {\r\n textAlign: 'center',\r\n})\r\n\r\nconst CenterContent = styled.div({\r\n textAlign: 'center',\r\n})\r\n\r\nconst SwiperWrap = styled.div({\r\n position: 'relative',\r\n color: style.colors.monochrome.white,\r\n})\r\n\r\nconst Image = styled.img({\r\n width: '106px',\r\n height: '106px',\r\n ['@media ' + style.mediaMinLarge]: {\r\n width: '95px',\r\n height: '95px',\r\n },\r\n})\r\n\r\nexport const ProductFeatureList = (props: PropType) => {\r\n const { features, smallLayout, isCompact, label } = props;\r\n const totalCount = features?.length ?? 0;\r\n if (smallLayout)\r\n return (\r\n
\r\n
\r\n
\r\n 3}\r\n freeMode={false}\r\n cssMode={true}\r\n parallax={false}\r\n alternativeNav={true}\r\n listHeading={label}\r\n showSwirl={isCompact && totalCount > 1}\r\n >\r\n {features?.map((feature, index) => (\r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n );\r\n\r\n return (\r\n \r\n \r\n {features?.map((feature, index) => (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

{feature.heading}

\r\n
\r\n \r\n
\r\n
\r\n \r\n {feature.text}\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\nexport default ProductFeatureList;\r\n","import { styled, StyledProps } from '@glitz/react';\r\nimport React, { ChangeEventHandler, useState, useEffect } from 'react';\r\nimport * as style from 'Shared/Style';\r\n\r\nexport enum SearchBorderStyle {\r\n Surrounding,\r\n Underline,\r\n}\r\n\r\nconst SearchInputElement = styled.input({\r\n border: { xy: { width: 0 } },\r\n padding: { xy: 0 },\r\n flexGrow: 1,\r\n fontFamily: 'Futura PT',\r\n fontStyle: 'normal',\r\n fontWeight: 500,\r\n fontSize: '16px',\r\n lineHeight: '130%',\r\n})\r\n\r\nexport const SearchInput = styled(\r\n (\r\n props: {\r\n value?: string;\r\n placeholderText?: string;\r\n onUpdate: ChangeEventHandler;\r\n iconBefore?: React.ReactNode;\r\n iconAfter?: React.ReactNode;\r\n paddingX?: number;\r\n paddingY?: number;\r\n borderStyle?: SearchBorderStyle;\r\n } & StyledProps,\r\n ) => {\r\n const {\r\n value,\r\n placeholderText,\r\n onUpdate,\r\n iconBefore,\r\n iconAfter,\r\n paddingX = 16,\r\n paddingY = 12,\r\n borderStyle = SearchBorderStyle.Surrounding,\r\n } = props;\r\n return (\r\n \r\n {iconBefore}\r\n \r\n {iconAfter}\r\n \r\n );\r\n },\r\n);\r\n\r\nconst ToggleLabel = styled.label({\r\n position: 'relative',\r\n display: 'inline-block',\r\n width: '28px',\r\n height: '16px',\r\n outlineStyle: 'none',\r\n borderRadius: '38px',\r\n cursor: 'pointer',\r\n border: {\r\n xy: {\r\n width: '1px',\r\n style: 'solid',\r\n color: style.colors.monochrome.black,\r\n },\r\n },\r\n})\r\n\r\nconst ToggleInput = styled.input({\r\n position: 'absolute',\r\n top: '-99999px',\r\n left: '-99999px',\r\n})\r\n\r\nconst ToggleSwitch = styled.div({\r\n position: 'absolute',\r\n cursor: 'pointer',\r\n top: 0,\r\n left: 0,\r\n right: 0,\r\n bottom: 0,\r\n borderRadius: '38px',\r\n ':before': {\r\n position: 'absolute',\r\n content: \"''\",\r\n height: '12px',\r\n width: '12px',\r\n left: '1px',\r\n bottom: '1px',\r\n borderRadius: '50%',\r\n },\r\n})\r\n\r\nexport const Toggle = styled(\r\n ({\r\n initialValue = true,\r\n onChange,\r\n }: {\r\n initialValue?: boolean;\r\n onChange: (value: boolean) => void;\r\n } & StyledProps) => {\r\n const [value, setValue] = useState(initialValue);\r\n const [stateInitialValue, setInitialValue] = useState(initialValue);\r\n\r\n useEffect(() => {\r\n setValue(stateInitialValue);\r\n }, [stateInitialValue]);\r\n\r\n const TRANSITION_DURATION = '.4s';\r\n return (\r\n \r\n {\r\n setValue((currentValue) => !currentValue);\r\n onChange(event.currentTarget.checked);\r\n }}\r\n />\r\n \r\n \r\n );\r\n },\r\n);\r\n","import StoreStockViewModel from 'Product/StoreStockViewModel.type';\r\nimport StoreModel from 'Stores/StoreModel.type';\r\n\r\ninterface GeolocationCoordinates {\r\n readonly accuracy: number;\r\n readonly altitude: number | null;\r\n readonly altitudeAccuracy: number | null;\r\n readonly heading: number | null;\r\n readonly latitude: number;\r\n readonly longitude: number;\r\n readonly speed: number | null;\r\n}\r\n\r\ntype EpochTimeStamp = number;\r\n\r\n// This is a standard type from TS version 4.1.x, but we use an old version of TS for our builds\r\ninterface GeolocationPosition {\r\n readonly coords: GeolocationCoordinates;\r\n readonly timestamp: EpochTimeStamp;\r\n}\r\n\r\nfunction crowFliesDistanceToStore(store: StoreModel | StoreStockViewModel, position: GeolocationPosition): number {\r\n const lat = 110.574 * (store.latitude - position.coords.latitude);\r\n const long =\r\n 111.32 * Math.cos((position.coords.latitude * Math.PI) / 180.0) * (store.longitude - position.coords.longitude);\r\n return Math.sqrt(long * long + lat * lat);\r\n}\r\n\r\nexport function sortByCrowFliesDistance(stores: StoreModel[] | StoreStockViewModel[], position: GeolocationPosition) {\r\n if (stores?.length < 1) {\r\n return stores;\r\n }\r\n\r\n return stores.sort((a: StoreStockViewModel, b: StoreStockViewModel) => {\r\n const aDist = crowFliesDistanceToStore(a, position);\r\n const bDist = crowFliesDistanceToStore(b, position);\r\n if (aDist === bDist) {\r\n return 0;\r\n }\r\n return aDist > bDist ? 1 : -1;\r\n });\r\n}\r\n\r\nasync function fetchDrivingDistances(stores: StoreModel[], position: GeolocationPosition) {\r\n var service = new google.maps.DistanceMatrixService();\r\n const getDistanceMatrix = (store: StoreModel) =>\r\n new Promise((resolve, reject) => {\r\n service.getDistanceMatrix(\r\n {\r\n origins: [new google.maps.LatLng(position.coords.latitude, position.coords.longitude)],\r\n destinations: [new google.maps.LatLng(store.latitude, store.longitude)],\r\n travelMode: google.maps.TravelMode.DRIVING,\r\n unitSystem: google.maps.UnitSystem.METRIC,\r\n },\r\n storeCallback(resolve, reject),\r\n );\r\n });\r\n\r\n const distanceMatrixPromises = stores.map((store) => {\r\n return getDistanceMatrix(store);\r\n });\r\n\r\n stores = [];\r\n\r\n function storeCallback(resolve: (value: unknown) => void, reject: (value: unknown) => void) {\r\n return (response: google.maps.DistanceMatrixResponse, status: google.maps.DistanceMatrixStatus) => {\r\n if (status !== google.maps.DistanceMatrixStatus.OK) {\r\n reject(new Error(`Request to Distance Matrix API failed: ${status}`));\r\n return;\r\n }\r\n if (response.rows.length <= 0) {\r\n reject(new Error(`Request to Distance Matrix API failed: Empty rows`));\r\n return;\r\n }\r\n\r\n if (response.rows[0].elements.length <= 0) {\r\n reject(new Error(`Request to Distance Matrix API failed: Empty elements`));\r\n return;\r\n }\r\n\r\n resolve(response.rows[0].elements[0].distance.value);\r\n };\r\n }\r\n\r\n return Promise.all(distanceMatrixPromises);\r\n}\r\n\r\nfunction filterByCrowFliesDistance(stores: StoreModel[], position: GeolocationPosition, distance: number) {\r\n return stores.filter((store: StoreModel) => {\r\n return crowFliesDistanceToStore(store, position) <= distance;\r\n });\r\n}\r\n\r\nexport async function filterByDistance(stores: StoreModel[], position: GeolocationPosition, distance: number) {\r\n return fetchDrivingDistances(stores, position)\r\n .then((storeDistances) => {\r\n return stores.filter((store, i) => {\r\n return storeDistances[i] as number <= distance * 1000;\r\n });\r\n })\r\n .catch(() => {\r\n return filterByCrowFliesDistance(stores, position, distance);\r\n });\r\n}\r\n","var React = require('react');\n\nfunction Store12x12 (props) {\n return React.createElement(\"svg\",props,[React.createElement(\"g\",{\"id\":\"Property 1=store\",\"clipPath\":\"url(#clip0_10547_396842)\",\"key\":0},React.createElement(\"path\",{\"id\":\"Vector 232\",\"d\":\"M.375 3L1.951.794a1 1 0 01.814-.419h6.47a1 1 0 01.814.419L11.625 3M.375 3v2.625M.375 3h3m8.25 0v2.625m0-2.625H9M.375 5.625v5a1 1 0 001 1h2m-3-6l.158.08a3 3 0 002.684 0l.158-.08m8.25 0v5a1 1 0 01-1 1h-2m3-6v0a2.33 2.33 0 01-2.334.145L9 5.625M3.375 3v2.625m0-2.625h2.813M3.374 5.625l.148.074a2.825 2.825 0 002.664-.074v0M9 3v2.625M9 3H6.187M9 5.625l-.148.074a2.825 2.825 0 01-2.665-.074v0m0-2.625v2.625m-2.812 6v-2.75a1 1 0 011-1H6m-2.625 3.75H6m2.625 0v-2.75a1 1 0 00-1-1H6m2.625 3.75H6m0-3.75v3.75\",\"stroke\":\"currentColor\"})),React.createElement(\"defs\",{\"key\":1},React.createElement(\"clipPath\",{\"id\":\"clip0_10547_396842\"},React.createElement(\"path\",{\"fill\":\"#fff\",\"d\":\"M0 0h12v12H0z\"})))]);\n}\n\nStore12x12.defaultProps = {\"width\":\"12\",\"height\":\"12\",\"viewBox\":\"0 0 12 12\",\"fill\":\"none\"};\n\nmodule.exports = Store12x12;\n\nStore12x12.default = Store12x12;\n","var React = require('react');\n\nfunction Dripdry (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Dry-drip\",\"transform\":\"translate(-2.326 -1.842)\",\"stroke\":\"#000\",\"strokeWidth\":\"2\"},[React.createElement(\"path\",{\"d\":\"M3.557 3.557v32.886h32.886V3.557H3.557z\",\"id\":\"Rectangle-21\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M2 20.5h20\",\"id\":\"Line-5\",\"strokeLinecap\":\"square\",\"transform\":\"rotate(90 12 20.5)\",\"key\":1}),React.createElement(\"path\",{\"d\":\"M10 20.5h20\",\"id\":\"Line-5-Copy\",\"strokeLinecap\":\"square\",\"transform\":\"rotate(90 20 20.5)\",\"key\":2}),React.createElement(\"path\",{\"d\":\"M18 20.5h20\",\"id\":\"Line-5-Copy-2\",\"strokeLinecap\":\"square\",\"transform\":\"rotate(90 28 20.5)\",\"key\":3})])));\n}\n\nDripdry.defaultProps = {\"width\":\"36\",\"height\":\"36\",\"viewBox\":\"0 0 36 36\"};\n\nmodule.exports = Dripdry;\n\nDripdry.default = Dripdry;\n","var React = require('react');\n\nfunction Dryclpetr (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Mobile\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Group-28-Copy\",\"transform\":\"translate(-123.125 -152.821)\"},React.createElement(\"g\",{\"id\":\"Group-24-Copy-2\",\"transform\":\"translate(123.822 152.72)\"},[React.createElement(\"path\",{\"d\":\"M12.424 13.186c0 1.206-.927 1.782-2.043 1.782h-.414v2.439h-.909v-6.003h1.161c.558 0 1.09.036 1.548.387.423.333.657.864.657 1.395zm-.873-.018c0-.765-.648-.927-1.287-.927h-.297v1.89h.333c.648 0 1.251-.207 1.251-.963zm3.973 4.239h-2.673v-6.003h.91v5.148h1.763v.855zm5.827 0h-.99l-.63-1.458h-2.565l-.666 1.458h-.98l2.97-6.381 2.861 6.38zm-1.989-2.313l-.89-2.034-.928 2.034h1.818zm6.421 1.98a3.182 3.182 0 01-1.638.45 3.084 3.084 0 01-3.096-3.096c0-1.755 1.422-3.132 3.168-3.132.594 0 1.053.135 1.566.432v1.08c-.504-.414-.963-.666-1.629-.666-1.26 0-2.196 1.053-2.196 2.286 0 1.242.954 2.24 2.205 2.24.657 0 1.134-.27 1.62-.683v1.089zm3.946.333h-3.312v-6.003h3.312v.855h-2.403v1.44h2.331v.855h-2.33v1.998h2.402v.855zm-19.494 9h-.91v-2.8H6.744v2.8h-.91v-6.003h.91v2.349h2.583v-2.35h.909v6.004zm6.907-2.997c0 1.728-1.413 3.114-3.132 3.114-1.728 0-3.132-1.35-3.132-3.087a3.134 3.134 0 013.15-3.141 3.127 3.127 0 013.114 3.114zm-.91 0c0-1.251-.944-2.268-2.213-2.268-1.314 0-2.232 1.026-2.232 2.313a2.226 2.226 0 002.223 2.214c1.25 0 2.223-1.017 2.223-2.26zm4.226 2.997h-2.673v-6.003h.909v5.148h1.764v.855zm4.99-2.997c0 .999-.387 1.827-1.197 2.42-.72.523-1.341.577-2.196.577h-1.242v-6.003h1.26c.828 0 1.53.08 2.214.585.792.585 1.16 1.458 1.16 2.42zm-.91 0c0-.657-.27-1.332-.81-1.728-.476-.351-1.025-.423-1.601-.423h-.405v4.293h.405c.594 0 1.107-.063 1.593-.432.54-.405.819-1.044.819-1.71zm4.865 2.997H26.09v-6.003h3.312v.855H27v1.44h2.33v.855H27v1.998h2.403v.855zm4.576 0h-1.107l-1.71-2.457H31v2.457h-.91v-6.003h1.063c.549 0 1.107.036 1.584.35.459.307.71.874.71 1.414 0 .819-.512 1.512-1.322 1.683l1.854 2.556zm-1.413-4.23c0-.738-.63-.918-1.251-.918H31v1.899h.288c.648 0 1.278-.225 1.278-.981z\",\"id\":\"PLACE-HOLDER\",\"fill\":\"#F6333F\",\"key\":0}),React.createElement(\"circle\",{\"id\":\"Oval-11-Copy\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"cx\":\"19.401\",\"cy\":\"19.53\",\"r\":\"18.349\",\"key\":1})]))));\n}\n\nDryclpetr.defaultProps = {\"width\":\"40\",\"height\":\"39\",\"viewBox\":\"0 0 40 39\"};\n\nmodule.exports = Dryclpetr;\n\nDryclpetr.default = Dryclpetr;\n","var React = require('react');\n\nfunction Dryflat (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Flat-dry\",\"transform\":\"translate(-2.355 -1.842)\",\"stroke\":\"#000\",\"strokeWidth\":\"2\"},[React.createElement(\"path\",{\"d\":\"M3.557 3.557v32.886h32.886V3.557H3.557z\",\"id\":\"Rectangle-21\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M10 20h20\",\"id\":\"Line-5\",\"strokeLinecap\":\"square\",\"key\":1})])));\n}\n\nDryflat.defaultProps = {\"width\":\"36\",\"height\":\"36\",\"viewBox\":\"0 0 36 36\"};\n\nmodule.exports = Dryflat;\n\nDryflat.default = Dryflat;\n","var React = require('react');\n\nfunction Handwash (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Hand-wash\",\"transform\":\"translate(-.5 -.175)\",\"stroke\":\"#000\",\"strokeWidth\":\"2\"},[React.createElement(\"path\",{\"id\":\"Rectangle-17\",\"d\":\"M2 8.587l4.105 33h30.79l4.105-33h0\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M36.01 15.161c1.089 1.063 2.02 2.48 3.58 2.48m-36.1-.001c2.158 0 3.382-3.628 5.84-3.628.535 0 1.001.172 1.43.44\",\"id\":\"Line-6\",\"strokeLinecap\":\"square\",\"key\":1}),React.createElement(\"g\",{\"id\":\"Hand\",\"fillRule\":\"evenodd\",\"transform\":\"rotate(-146 16.087 15.598)\",\"key\":2},[React.createElement(\"path\",{\"d\":\"M16.895 19.868v10.557c0 1.176-1.027 1.84-2.038 1.84-1.58 0-2.065-1.895-2.065-1.84 0 3.552-.906 4.145-2.44 4.145-1.732 0-2.25-1.47-2.25-2.669v-1.476c0 .979-.87 1.84-2.051 1.84-1.18 0-1.984-1.087-1.984-1.84 0-1.9.023-4.09 0-4.062-.42.513-.916 1.102-2.054 1.102-1.188 0-1.973-.88-1.937-2.189.036-1.308.025-15.703.05-15.99C.77 2.017 6.734.23 10.122.23c3.526 0 10.28 1.954 10.5 9.839l.081 9.125c.081 1.782-.062 2.716-.428 2.803-1.247.296-3.683-.975-3.683-3.799 0-2.823.045-3.928 0-3.928-1.53 0-2.723-.474-3.901-.873-2.326-.787-3.725-3.652-3.746-3.695\",\"id\":\"Line-30-Copy\",\"strokeLinecap\":\"round\",\"transform\":\"matrix(1 0 0 -1 0 34.8)\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M3.031 17.85c.88-.512 3.602-2.133 5.616-2.489 2.014-.355 4.604.21 5.502.6\",\"id\":\"Line-30\",\"strokeLinecap\":\"round\",\"key\":1}),React.createElement(\"path\",{\"id\":\"Line-31\",\"strokeLinecap\":\"square\",\"d\":\"M4.087 8.418l-.04 7.613-.004.74\",\"key\":2}),React.createElement(\"path\",{\"d\":\"M8.098 3.703v11.458\",\"id\":\"Line-31-Copy\",\"strokeLinecap\":\"square\",\"key\":3}),React.createElement(\"path\",{\"d\":\"M12.806 4.489V15.16\",\"id\":\"Line-31-Copy-2\",\"strokeLinecap\":\"square\",\"key\":4})])])));\n}\n\nHandwash.defaultProps = {\"width\":\"42\",\"height\":\"43\",\"viewBox\":\"0 0 42 43\"};\n\nmodule.exports = Handwash;\n\nHandwash.default = Handwash;\n","var React = require('react');\n\nfunction IronH (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Iron-High-temp\",\"transform\":\"translate(0 -3.027)\"},React.createElement(\"g\",{\"id\":\"Strykning\",\"transform\":\"translate(0 3.5)\"},[React.createElement(\"path\",{\"d\":\"M1.415 26.402h31.778l-1.764-15.396h-9.723c-10.497 0-19.132 6.705-20.29 15.396z\",\"id\":\"Rectangle-19\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"key\":0}),React.createElement(\"circle\",{\"id\":\"Oval-11\",\"fill\":\"#000\",\"cx\":\"12.214\",\"cy\":\"18.704\",\"r\":\"2\",\"key\":1}),React.createElement(\"circle\",{\"id\":\"Oval-11\",\"fill\":\"#000\",\"cx\":\"19.214\",\"cy\":\"18.704\",\"r\":\"2\",\"key\":2}),React.createElement(\"circle\",{\"id\":\"Oval-11\",\"fill\":\"#000\",\"cx\":\"26.214\",\"cy\":\"18.704\",\"r\":\"2\",\"key\":3}),React.createElement(\"path\",{\"id\":\"Line-7\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"square\",\"d\":\"M10.314.997h20.003l2.76 24.27\",\"key\":4})]))));\n}\n\nIronH.defaultProps = {\"width\":\"35\",\"height\":\"28\",\"viewBox\":\"0 0 35 28\"};\n\nmodule.exports = IronH;\n\nIronH.default = IronH;\n","var React = require('react');\n\nfunction IronL (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Iron-Low-temp\",\"transform\":\"translate(-.031 -2.54)\"},React.createElement(\"g\",{\"id\":\"Strykning\",\"transform\":\"translate(0 3.5)\"},[React.createElement(\"path\",{\"d\":\"M1.415 26.402h31.778l-1.764-15.396h-9.723c-10.497 0-19.132 6.705-20.29 15.396z\",\"id\":\"Rectangle-19\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"key\":0}),React.createElement(\"circle\",{\"id\":\"Oval-11\",\"fill\":\"#000\",\"cx\":\"19.314\",\"cy\":\"18.704\",\"r\":\"2\",\"key\":1}),React.createElement(\"path\",{\"id\":\"Line-7\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"square\",\"d\":\"M10.314.997h20.003l2.76 24.27\",\"key\":2})]))));\n}\n\nIronL.defaultProps = {\"width\":\"35\",\"height\":\"29\",\"viewBox\":\"0 0 35 29\"};\n\nmodule.exports = IronL;\n\nIronL.default = IronL;\n","var React = require('react');\n\nfunction IronM (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Iron-Medium-temp\",\"transform\":\"translate(.333 -3.246)\"},React.createElement(\"g\",{\"id\":\"Strykning\",\"transform\":\"translate(0 3.5)\"},[React.createElement(\"path\",{\"d\":\"M1.415 26.402h31.778l-1.764-15.396h-9.723c-10.497 0-19.132 6.705-20.29 15.396z\",\"id\":\"Rectangle-19\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"key\":0}),React.createElement(\"circle\",{\"id\":\"Oval-11\",\"fill\":\"#000\",\"cx\":\"15.543\",\"cy\":\"18.704\",\"r\":\"2\",\"key\":1}),React.createElement(\"circle\",{\"id\":\"Oval-11\",\"fill\":\"#000\",\"cx\":\"22.543\",\"cy\":\"18.704\",\"r\":\"2\",\"key\":2}),React.createElement(\"path\",{\"id\":\"Line-7\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"strokeLinecap\":\"square\",\"d\":\"M10.314.997h20.003l2.76 24.27\",\"key\":3})]))));\n}\n\nIronM.defaultProps = {\"width\":\"35\",\"height\":\"28\",\"viewBox\":\"0 0 35 28\"};\n\nmodule.exports = IronM;\n\nIronM.default = IronM;\n","var React = require('react');\n\nfunction Linedry (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Line-dry\",\"transform\":\"translate(-2.384 -1.842)\",\"stroke\":\"#000\",\"strokeWidth\":\"2\"},[React.createElement(\"path\",{\"d\":\"M3.557 3.557v32.886h32.886V3.557H3.557z\",\"id\":\"Rectangle-21\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M3.686 3.557c1.012 3.918 7.866 7.184 16.308 7.184 8.44 0 15.295-3.266 16.307-7.184H3.686z\",\"id\":\"Oval-6\",\"key\":1})])));\n}\n\nLinedry.defaultProps = {\"width\":\"36\",\"height\":\"36\",\"viewBox\":\"0 0 36 36\"};\n\nmodule.exports = Linedry;\n\nLinedry.default = Linedry;\n","var React = require('react');\n\nfunction Nobleach (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Do-not-bleach\",\"transform\":\"translate(.333 .23)\",\"stroke\":\"#000\"},[React.createElement(\"g\",{\"id\":\"Ej_blekning\",\"transform\":\"translate(-.121 3.075)\",\"key\":0},React.createElement(\"path\",{\"d\":\"M20.121 1.927L1.926 31.04h36.391L20.121 1.927z\",\"id\":\"Rectangle-24\",\"strokeWidth\":\"2\"})),React.createElement(\"g\",{\"id\":\"x\",\"transform\":\"translate(1 .575)\",\"strokeLinecap\":\"square\",\"strokeWidth\":\"2\",\"key\":1},[React.createElement(\"path\",{\"d\":\"M36.924 1.005L.96 37.624\",\"id\":\"Line-29\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M.96 1.005l35.964 36.619\",\"id\":\"Line-29-Copy\",\"key\":1})])])));\n}\n\nNobleach.defaultProps = {\"width\":\"41\",\"height\":\"40\",\"viewBox\":\"0 0 41 40\"};\n\nmodule.exports = Nobleach;\n\nNobleach.default = Nobleach;\n","var React = require('react');\n\nfunction Nodrycl (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Do-not-dry-clean\",\"transform\":\"translate(.333 .078)\",\"stroke\":\"#000\",\"strokeWidth\":\"2\"},[React.createElement(\"g\",{\"id\":\"x\",\"fillRule\":\"evenodd\",\"transform\":\"translate(1 .575)\",\"strokeLinecap\":\"square\",\"key\":0},[React.createElement(\"path\",{\"d\":\"M36.924 1.005L.96 37.624\",\"id\":\"Line-29\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M.96 1.005l35.964 36.619\",\"id\":\"Line-29-Copy\",\"key\":1})]),React.createElement(\"circle\",{\"id\":\"Oval-11\",\"cx\":\"20\",\"cy\":\"20\",\"r\":\"17\",\"key\":1})])));\n}\n\nNodrycl.defaultProps = {\"width\":\"40\",\"height\":\"40\",\"viewBox\":\"0 0 40 40\"};\n\nmodule.exports = Nodrycl;\n\nNodrycl.default = Nodrycl;\n","var React = require('react');\n\nfunction NoIron (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Do-not-Iron\",\"transform\":\"translate(0 .184)\",\"stroke\":\"#000\",\"strokeWidth\":\"2\"},[React.createElement(\"g\",{\"id\":\"Strykning\",\"transform\":\"translate(2.5 6)\",\"key\":0},[React.createElement(\"path\",{\"d\":\"M1.415 26.402h31.778l-1.764-15.396h-9.723c-10.497 0-19.132 6.705-20.29 15.396z\",\"id\":\"Rectangle-19\",\"key\":0}),React.createElement(\"path\",{\"id\":\"Line-7\",\"strokeLinecap\":\"square\",\"d\":\"M10.314.997h20.003l2.76 24.27\",\"key\":1})]),React.createElement(\"g\",{\"id\":\"x\",\"transform\":\"translate(1 1)\",\"strokeLinecap\":\"square\",\"key\":1},[React.createElement(\"path\",{\"d\":\"M36.924 1.005L.96 37.624\",\"id\":\"Line-29\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M.96 1.005l35.964 36.619\",\"id\":\"Line-29-Copy\",\"key\":1})])])));\n}\n\nNoIron.defaultProps = {\"width\":\"40\",\"height\":\"41\",\"viewBox\":\"0 0 40 41\"};\n\nmodule.exports = NoIron;\n\nNoIron.default = NoIron;\n","var React = require('react');\n\nfunction Notumble (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Do-not-tumble-dry\",\"transform\":\"translate(-.413 .158)\",\"stroke\":\"#000\",\"strokeWidth\":\"2\"},[React.createElement(\"g\",{\"id\":\"x\",\"fillRule\":\"evenodd\",\"transform\":\"translate(1 .575)\",\"strokeLinecap\":\"square\",\"key\":0},[React.createElement(\"path\",{\"d\":\"M36.924 1.005L.96 37.624\",\"id\":\"Line-29\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M.96 1.005l35.964 36.619\",\"id\":\"Line-29-Copy\",\"key\":1})]),React.createElement(\"circle\",{\"id\":\"Oval-11\",\"cx\":\"20\",\"cy\":\"20\",\"r\":\"14.5\",\"key\":1}),React.createElement(\"path\",{\"id\":\"Rectangle-21\",\"d\":\"M3.557 3.557h32.886v32.886H3.557z\",\"key\":2})])));\n}\n\nNotumble.defaultProps = {\"width\":\"39\",\"height\":\"40\",\"viewBox\":\"0 0 39 40\"};\n\nmodule.exports = Notumble;\n\nNotumble.default = Notumble;\n","var React = require('react');\n\nfunction Nowash (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Ikoner/Do-not-wash\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},[React.createElement(\"path\",{\"id\":\"Rectangle-17\",\"d\":\"M2.31 5.06l4.104 33h30.79l4.105-33h0\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M3.8 14.113c2.157 0 3.381-3.629 5.84-3.629 2.458 0 3.477 3.629 6.067 3.629 2.59 0 3.562-3.629 6.049-3.629 2.487 0 3.499 3.629 6.289 3.629 2.79 0 3.468-3.629 5.97-3.629 2.501 0 3.388 3.629 5.885 3.629\",\"id\":\"Line-6\",\"strokeLinecap\":\"square\",\"key\":1}),React.createElement(\"g\",{\"id\":\"x\",\"transform\":\"translate(.857 1)\",\"strokeLinecap\":\"square\",\"key\":2},[React.createElement(\"path\",{\"d\":\"M40.81 1.111L1.06 41.584\",\"id\":\"Line-29\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M1.06 1.111l39.75 40.473\",\"id\":\"Line-29-Copy\",\"key\":1})])]));\n}\n\nNowash.defaultProps = {\"width\":\"44\",\"height\":\"44\",\"viewBox\":\"0 0 44 44\"};\n\nmodule.exports = Nowash;\n\nNowash.default = Nowash;\n","var React = require('react');\n\nfunction TumbleH (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Tumble-dry-High-temp\",\"transform\":\"translate(-2.442 -1.842)\"},[React.createElement(\"circle\",{\"id\":\"Oval-11\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"cx\":\"20\",\"cy\":\"20\",\"r\":\"14.5\",\"key\":0}),React.createElement(\"path\",{\"id\":\"Rectangle-21\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"d\":\"M3.557 3.557h32.886v32.886H3.557z\",\"key\":1}),React.createElement(\"circle\",{\"id\":\"Oval-11\",\"fill\":\"#000\",\"fillRule\":\"evenodd\",\"cx\":\"20\",\"cy\":\"20\",\"r\":\"2\",\"key\":2}),React.createElement(\"circle\",{\"id\":\"Oval-11-Copy\",\"fill\":\"#000\",\"fillRule\":\"evenodd\",\"cx\":\"13\",\"cy\":\"20\",\"r\":\"2\",\"key\":3}),React.createElement(\"circle\",{\"id\":\"Oval-11-Copy-2\",\"fill\":\"#000\",\"fillRule\":\"evenodd\",\"cx\":\"27\",\"cy\":\"20\",\"r\":\"2\",\"key\":4})])));\n}\n\nTumbleH.defaultProps = {\"width\":\"35\",\"height\":\"36\",\"viewBox\":\"0 0 35 36\"};\n\nmodule.exports = TumbleH;\n\nTumbleH.default = TumbleH;\n","var React = require('react');\n\nfunction TumbleL (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Tumble-dry-Low-temp\",\"transform\":\"translate(-2.5 -1.842)\"},[React.createElement(\"circle\",{\"id\":\"Oval-11\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"cx\":\"20\",\"cy\":\"20\",\"r\":\"14.5\",\"key\":0}),React.createElement(\"circle\",{\"id\":\"Oval-11\",\"fill\":\"#000\",\"fillRule\":\"evenodd\",\"cx\":\"20\",\"cy\":\"20\",\"r\":\"2\",\"key\":1}),React.createElement(\"path\",{\"id\":\"Rectangle-21\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"d\":\"M3.557 3.557h32.886v32.886H3.557z\",\"key\":2})])));\n}\n\nTumbleL.defaultProps = {\"width\":\"35\",\"height\":\"36\",\"viewBox\":\"0 0 35 36\"};\n\nmodule.exports = TumbleL;\n\nTumbleL.default = TumbleL;\n","var React = require('react');\n\nfunction TumbleM (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Tumble-dry-Medium-temp\",\"transform\":\"translate(-2.471 -1.842)\"},[React.createElement(\"circle\",{\"id\":\"Oval-11\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"cx\":\"20\",\"cy\":\"20\",\"r\":\"14.5\",\"key\":0}),React.createElement(\"circle\",{\"id\":\"Oval-11\",\"fill\":\"#000\",\"fillRule\":\"evenodd\",\"cx\":\"16.5\",\"cy\":\"20\",\"r\":\"2\",\"key\":1}),React.createElement(\"circle\",{\"id\":\"Oval-11\",\"fill\":\"#000\",\"fillRule\":\"evenodd\",\"cx\":\"23.5\",\"cy\":\"20\",\"r\":\"2\",\"key\":2}),React.createElement(\"path\",{\"id\":\"Rectangle-21\",\"stroke\":\"#000\",\"strokeWidth\":\"2\",\"d\":\"M3.557 3.557h32.886v32.886H3.557z\",\"key\":3})])));\n}\n\nTumbleM.defaultProps = {\"width\":\"35\",\"height\":\"36\",\"viewBox\":\"0 0 35 36\"};\n\nmodule.exports = TumbleM;\n\nTumbleM.default = TumbleM;\n","var React = require('react');\n\nfunction TempWash (props) {\n return React.createElement(\"svg\",props,React.createElement(\"g\",{\"id\":\"Desktop---Phase-1\",\"stroke\":\"none\",\"strokeWidth\":\"1\",\"fill\":\"none\",\"fillRule\":\"evenodd\"},React.createElement(\"g\",{\"id\":\"Ikoner/Wash\",\"transform\":\"translate(.333 -3.175)\",\"stroke\":\"#000\",\"strokeWidth\":\"2\"},[React.createElement(\"path\",{\"id\":\"Rectangle-17\",\"d\":\"M1.006 3.56l4.105 33H35.9l4.105-33h0\",\"key\":0}),React.createElement(\"path\",{\"d\":\"M2.496 12.613c2.157 0 3.381-3.629 5.84-3.629s3.478 3.629 6.068 3.629c2.59 0 3.561-3.629 6.048-3.629s3.5 3.629 6.29 3.629c2.789 0 3.468-3.629 5.97-3.629 2.5 0 3.388 3.629 5.884 3.629\",\"id\":\"Line-6\",\"strokeLinecap\":\"square\",\"key\":1})])));\n}\n\nTempWash.defaultProps = {\"width\":\"42\",\"height\":\"35\",\"viewBox\":\"0 0 42 35\"};\n\nmodule.exports = TempWash;\n\nTempWash.default = TempWash;\n","import factory from './icon';\r\nimport Svg12x12 from './glyphs/Store_12x12.svg';\r\n\r\nexport const Store12x12 = factory(Svg12x12, 13, 12);","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { CircleFilled12x12, CircleUnfilled12x12 } from 'Shared/Icons/Circle';\r\nimport * as style from 'Shared/Style';\r\n\r\nconst circleNumbers = [1, 2, 3, 4, 5];\r\ntype PropType = {\r\n numberToFill: number;\r\n};\r\n\r\nconst Wrap = styled.div({\r\n display: 'flex', alignItems: 'center', gap: '8px'\r\n})\r\n\r\nconst CircleWrap = styled.span({\r\n display: 'flex', alignItems: 'center', height: '100%'\r\n})\r\n\r\nconst Filled = styled(CircleFilled12x12, {\r\n color: style.colors.brandColors.yellow\r\n})\r\n\r\nconst Unfilled = styled(CircleUnfilled12x12, {\r\n color: style.colors.brandColors.yellow\r\n})\r\n\r\nconst FillableCircles = (props: PropType) => {\r\n const numberToFill = props.numberToFill || 0;\r\n\r\n return (\r\n \r\n {circleNumbers.map(number => {\r\n return (\r\n \r\n {numberToFill >= number ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default FillableCircles;\r\n","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { TextBlockSmall, ResponsiveSize } from 'Shared/SharedComponents/atoms/Typography';\r\nimport * as style from 'Shared/Style';\r\nimport FillableCircles from 'Shared/SharedComponents/molecules/FillableCircles';\r\n\r\ntype ReviewsLabels = {\r\n reviews: string;\r\n description?: string;\r\n}\r\n\r\ntype ReviewsType = {\r\n rating: number;\r\n numberOfReviews: number;\r\n flexColumn?: boolean;\r\n onClick?: () => void;\r\n labels: ReviewsLabels;\r\n};\r\n\r\nconst Wrap = styled.div({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: '24px'\r\n})\r\n\r\nconst Inner = styled.div({\r\n position: 'relative',\r\n display: 'flex',\r\n gap: '8px',\r\n alignItems: 'center',\r\n})\r\n\r\nconst InnerFlexColumn = styled(Inner, {\r\n flexDirection: 'column',\r\n alignItems: undefined,\r\n})\r\n\r\nfunction Reviews({ labels, rating, numberOfReviews, flexColumn = false, onClick = null }: ReviewsType) {\r\n const InnerElement = flexColumn ? InnerFlexColumn : Inner;\r\n\r\n return (\r\n \r\n {!!labels?.description && {labels.description}}\r\n \r\n \r\n {`${numberOfReviews} ${labels?.reviews}`}\r\n \r\n \r\n );\r\n}\r\n\r\nexport default Reviews;\r\n","import React, { useState } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { Paragraph, ResponsiveLineHeight, ResponsiveSize } from 'Shared/SharedComponents/atoms/Typography';\r\nimport { ButtonHeight, ButtonTheme, SolidButton } from 'Shared/TextButtons';\r\nimport ProductActivity from '../Models/ProductActivity.type';\r\n\r\ntype ProductActivitiesType = {\r\n productActivities: ProductActivity[];\r\n};\r\n\r\nconst ButtonWrapper = styled.div({\r\n display: 'flex', \r\n flexWrap: 'wrap', \r\n gap: '8px',\r\n})\r\n\r\nconst Text = styled(Paragraph, {\r\n marginTop: '24px',\r\n})\r\n\r\nfunction ProductActivities({ productActivities }: ProductActivitiesType) {\r\n const [selectedActivityIndex, setSelectedActivityIndex] = useState(0);\r\n\r\n return (\r\n <>\r\n \r\n {productActivities.map((activity, index) => (\r\n {\r\n setSelectedActivityIndex(index);\r\n }}\r\n height={ButtonHeight.Small}\r\n selected={index === selectedActivityIndex}\r\n theme={ButtonTheme.WhiteToBlack}\r\n padding={{ x: 12 }}\r\n />\r\n ))}\r\n \r\n \r\n {productActivities[selectedActivityIndex]?.productText}\r\n \r\n \r\n );\r\n}\r\n\r\nexport default ProductActivities;\r\n","import React, { useState } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { H2, Paragraph, TextBlockSmall, ResponsiveSize } from 'Shared/SharedComponents/atoms/Typography';\r\nimport Reviews from '../Reviews';\r\nimport { Favourite16x16, FavouriteFull16x16 } from 'Shared/Icons/Favorite';\r\nimport ProductTags from '../ProductTags';\r\nimport Viewport from 'Shared/Viewport';\r\nimport ProductActivity from '../Models/ProductActivity.type';\r\nimport ProductActivities from '../ProductActivities';\r\nimport Description from '../Models/Description.type';\r\nimport ManufacturingInformation from '../Models/ManufacturingInformation.type';\r\nimport Html from 'Shared/Partials/PropertyTypes/Html';\r\nimport FeedbackButton, { ButtonTheme } from 'Shared/Button/Feedback';\r\nimport { SolidButton } from 'Shared/TextButtons';\r\nimport { createGridClasses, createOffsetGridClassLarge } from 'Shared/grid';\r\nimport * as style from 'Shared/Style';\r\nimport A from 'Shared/Generic/A';\r\n\r\ntype ExtendedDataLabelsType = {\r\n descriptionLabel: string;\r\n reviewsLabel: string;\r\n saveToWishlistLabel: string;\r\n compareProductLabel: string;\r\n readMoreLabel: string;\r\n readLessLabel: string;\r\n manufacturingCountryLabel: string;\r\n manufacturingFactoryLabel: string;\r\n itemNumber: string;\r\n};\r\n\r\ntype ExtendedDataType = {\r\n labels: ExtendedDataLabelsType;\r\n rating: number;\r\n numberOfReviews: number;\r\n productTitle: string;\r\n productTags: string[];\r\n productDescription: Description;\r\n manufacturingInformation: ManufacturingInformation;\r\n itemNumber: string;\r\n onSaveToWishlist: (e: any) => Promise;\r\n onCompareProduct: () => Promise;\r\n productActivities: ProductActivity[];\r\n isFavorited?: boolean;\r\n loggedIn?: boolean;\r\n scrollToRef?: React.MutableRefObject;\r\n};\r\n\r\nconst DescriptionWrap = styled.div({\r\n overflow: 'hidden',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n transition: {\r\n property: 'max-height',\r\n duration: 300,\r\n },\r\n})\r\n\r\nconst DescriptionBodyWrap = styled(Html, {\r\n paddingTop: '16px',\r\n transition: {\r\n property: 'max-height',\r\n duration: 300,\r\n },\r\n})\r\n\r\nconst DescriptionBody = styled.p({\r\n fontSize: '16px',\r\n fontWeight: 450,\r\n lineHeight: '110%',\r\n});\r\n\r\nconst ManufacturingWrap = styled.div({\r\n paddingTop: '16px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n});\r\nconst ManufacturingData = styled.div({\r\n display: 'flex',\r\n gap: '8px'\r\n});\r\n\r\nconst ItemNumberWrap = styled.div({\r\n paddingTop: '16px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n});\r\nconst ItemNumberData = styled.div({\r\n display: 'flex',\r\n gap: '8px'\r\n});\r\n\r\nconst Heading = styled(H2, {\r\n margin: { top: '16px', bottom: '24px' },\r\n});\r\n\r\nconst ReadMore = styled.span({\r\n display: 'block',\r\n fontStyle: 'normal',\r\n fontWeight: 500,\r\n fontSize: '14px',\r\n letterSpacing: '0.01em',\r\n margin: { xy: '0px' },\r\n color: style.colors.monochrome.a11ygrey,\r\n cursor: 'pointer',\r\n lineHeight: '100%',\r\n textTransform: 'uppercase',\r\n marginTop: '16px',\r\n});\r\n\r\nconst FavStyled = styled(Favourite16x16, {\r\n marginLeft: '8px'\r\n})\r\n\r\nconst FavFullStyled = styled(FavouriteFull16x16, {\r\n marginLeft: '8px'\r\n})\r\n\r\nconst ButtonWrap = styled.div({\r\n display: 'flex',\r\n gap: '8px',\r\n margin: { top: '40px' },\r\n flexDirection: 'column',\r\n ['@media ' + style.mediaMinLarge]: {\r\n flexDirection: 'row',\r\n },\r\n})\r\n\r\nconst ProductActivitiesWrap = styled.div({\r\n ['@media ' + style.mediaUpToLarge]: {\r\n marginTop: '40px',\r\n },\r\n})\r\n\r\nconst ProductDescriptionIntro = styled(Paragraph, {\r\n marginTop: '24px'\r\n})\r\n\r\nfunction ExtendedData(props: ExtendedDataType) {\r\n const FavoIcon = props.isFavorited ? FavFullStyled : FavStyled;\r\n const [descriptionExpanded, setDescriptionExpanded] = useState(false);\r\n return (\r\n \r\n {(isCompact: boolean) => (\r\n
\r\n
\r\n {!isCompact && }\r\n {isCompact && {props.labels.descriptionLabel}}\r\n {props.productTitle}\r\n
\r\n
\r\n {props.productTags && }\r\n {props.productDescription && (\r\n <>\r\n {props.productDescription.intro && {props.productDescription.intro}}\r\n {(props.productDescription.body || props.manufacturingInformation) && <>\r\n \r\n {props.productDescription.body && }\r\n {props.itemNumber && \r\n {props.labels.itemNumber}:{props.itemNumber}\r\n \r\n }\r\n {props.manufacturingInformation && \r\n {props.labels.manufacturingCountryLabel}:{props.manufacturingInformation.country}\r\n {props.labels.manufacturingFactoryLabel}:{props.manufacturingInformation.factory}\r\n {props.manufacturingInformation.infoUrl && {props.labels.readMoreLabel}}\r\n \r\n }\r\n \r\n { setDescriptionExpanded(!descriptionExpanded); }}>\r\n {descriptionExpanded ? props.labels.readLessLabel : props.labels.readMoreLabel}\r\n \r\n }\r\n \r\n )}\r\n
\r\n {props.productActivities && props.productActivities.length > 0 &&\r\n \r\n \r\n \r\n }\r\n \r\n {props.labels.saveToWishlistLabel && props.loggedIn && (\r\n }\r\n theme={ButtonTheme.WhiteToBlack}\r\n successText={props.labels.saveToWishlistLabel}\r\n pendingText={props.labels.saveToWishlistLabel}\r\n >\r\n {props.labels.saveToWishlistLabel}\r\n \r\n )}\r\n {props.labels.saveToWishlistLabel && !props.loggedIn && (\r\n }\r\n theme={ButtonTheme.WhiteToBlack}\r\n >\r\n {props.labels.saveToWishlistLabel}\r\n \r\n )}\r\n\r\n {/* Disabled for now. {props.labels.compareProductLabel && (\r\n }\r\n theme={ButtonTheme.WhiteToBlack}\r\n />\r\n )} */}\r\n \r\n
\r\n )}\r\n
\r\n );\r\n}\r\n\r\nexport default ExtendedData;\r\n","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport PreviousPurchaseViewModel from './PreviousPurchaseViewModel.type';\r\nimport Image, { Preset as ImagePreset, Ratio as ImageRatio } from 'Shared/Image/Ratio';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype PropType = {\r\n products: PreviousPurchaseViewModel[];\r\n isCompact: boolean;\r\n label: string;\r\n topMargin?: number;\r\n};\r\n\r\nconst Header = styled.span({\r\n display: 'block',\r\n fontSize: 14,\r\n fontWeight: 500,\r\n lineHeight: '100%',\r\n marginBottom: 16,\r\n textTransform: 'uppercase',\r\n});\r\n\r\nconst BaseLine = styled.span({\r\n display: 'block',\r\n fontSize: 12,\r\n fontWeight: 500,\r\n textAlign: 'center'\r\n});\r\n\r\nconst ProductsWrap = styled.div({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '8px'\r\n})\r\n\r\nconst Product = styled.div({\r\n display: 'inline-block',\r\n borderRadius: 8,\r\n padding: {xy: '8px' },\r\n width: '112px',\r\n backgroundColor: style.colors.monochrome.extraLightGrey,\r\n})\r\n\r\nconst ProductImageWrap = styled.div({\r\n textAlign: 'center',\r\n borderRadius: 8,\r\n})\r\n\r\nconst ProductName = styled(BaseLine, {\r\n marginTop: 8,\r\n marginBottom: 4,\r\n textTransform: 'uppercase',\r\n lineHeight: '100%',\r\n})\r\n\r\nconst ProductSize = styled(BaseLine, {\r\n lineHeight: '120%',\r\n})\r\n\r\nexport const PreviousPurchaseList = (props: PropType) => {\r\n const { products, isCompact, label, topMargin } = props;\r\n\r\n if(!products) {\r\n return <>;\r\n }\r\n\r\n return (\r\n \r\n
{label}
\r\n \r\n {products?.map((product, index) => (\r\n \r\n \r\n \r\n \r\n
\r\n {product.displayName}\r\n \r\n {product.sizeLabel}\r\n
\r\n
\r\n ))}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default PreviousPurchaseList;","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { H3, Paragraph, ResponsiveSize, TextBlockSmall } from 'Shared/SharedComponents/atoms/Typography';\r\nimport FillableCircles from 'Shared/SharedComponents/molecules/FillableCircles';\r\nimport ReviewViewModelLabels from 'Product/VariationViewModel+ReviewViewModelLabels.type';\r\nimport { Plus12x12 } from 'Shared/Icons/Plus';\r\nimport { Minus12x12 } from 'Shared/Icons/Minus';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype AttributeRating = {\r\n attributeName: string;\r\n rating: number;\r\n};\r\n\r\ntype ReviewConsumer = {\r\n displayName: string;\r\n};\r\n\r\nexport type Review = {\r\n createdAt: string;\r\n stars: number;\r\n content: string;\r\n consumer: ReviewConsumer;\r\n attributeRatings: AttributeRating[];\r\n}\r\n\r\ntype PropType = {\r\n review: Review;\r\n reviewLabels: ReviewViewModelLabels;\r\n isCompact: boolean;\r\n};\r\n\r\nconst Wrap = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'stretch',\r\n gap: '16px',\r\n borderRadius: '8px',\r\n backgroundColor: style.colors.monochrome.extraLightGrey,\r\n padding: { x: '12px', top: '12px', bottom: '24px' },\r\n ['@media ' + style.mediaMinLarge]: {\r\n padding: { x: '16px', top: '16px', bottom: '24px' },\r\n },\r\n})\r\n\r\n\r\nconst Author = styled.div({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n})\r\n\r\nconst Answer = styled.div({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: '6px'\r\n})\r\n\r\nconst P = styled(Paragraph, {\r\n display: 'flex', flexDirection: 'row', alignItems: 'center', gap: '8px'\r\n})\r\n\r\nconst Minus = styled(Minus12x12, {\r\n height: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: 'inherit',\r\n})\r\n\r\nconst Plus = styled(Plus12x12, {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: 'inherit',\r\n})\r\n\r\nconst ReviewTime = styled(TextBlockSmall, {\r\n color: style.colors.monochrome.a11ygrey,\r\n textTransform: 'uppercase',\r\n});\r\n\r\nconst TopContent = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '4px'\r\n})\r\n\r\nfunction ReviewCard({ review, reviewLabels, isCompact }: PropType) {\r\n\r\n // function sizeFitLabel(fitOption: string) {\r\n // switch (fitOption) {\r\n // case 'small':\r\n // return reviewLabels.fitSmall;\r\n // case 'normal':\r\n // return reviewLabels.fitNormal;\r\n // case 'large':\r\n // return reviewLabels.fitBig;\r\n // default:\r\n // return reviewLabels.fitNormal;\r\n // }\r\n // }\r\n\r\n function dateDiff(inputDate: string) {\r\n if (inputDate === null || inputDate === undefined) {\r\n return '';\r\n }\r\n\r\n const _MS_PER_DAY = 1000 * 60 * 60 * 24;\r\n // Discard the time and time-zone information.\r\n let b = new Date();\r\n let a = new Date(inputDate);\r\n const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());\r\n const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());\r\n let result = Math.floor((utc2 - utc1) / _MS_PER_DAY);\r\n\r\n if (result > 31) {\r\n result = Math.floor(result / 31);\r\n\r\n if (result > 12) {\r\n const year = Math.floor(result / 12);\r\n return `${year} ${year > 1 ? reviewLabels.years : reviewLabels.year} ${reviewLabels.ago}`;\r\n }\r\n if (result === 0) {\r\n result = 1;\r\n }\r\n\r\n return `${result} ${result > 1 ? reviewLabels.months : reviewLabels.month} ${reviewLabels.ago}`;\r\n }\r\n\r\n return `${result} ${result > 1 ? reviewLabels.days : reviewLabels.day} ${reviewLabels.ago}`;\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n

{review.consumer.displayName}

\r\n \r\n
\r\n {dateDiff(review.createdAt)}\r\n
\r\n
\r\n {review.attributeRatings.map((attribute, index) => {\r\n return (\r\n \r\n {attribute.attributeName}:\r\n {attribute.rating}\r\n \r\n );\r\n })}\r\n
\r\n {review.content}\r\n
\r\n );\r\n}\r\n\r\nexport default ReviewCard;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport ReviewViewModelLabels from 'Product/VariationViewModel+ReviewViewModelLabels.type';\r\nimport ReviewCard, { Review } from './ReviewCard';\r\nimport { ResponsiveSize, TextLabel, Text } from 'Shared/SharedComponents/atoms/Typography';\r\nimport Reviews from 'Product/Reviews';\r\nimport connect from 'Shared/connect';\r\nimport { createGridClasses, createOffsetGridClassLarge } from 'Shared/grid';\r\nimport * as style from 'Shared/Style';\r\n\r\nexport type ReviewLabelsPropType = ReviewViewModelLabels & { reviews: string };\r\n\r\ntype PropType = {\r\n itemNumbers: string[];\r\n reviewLabels: ReviewLabelsPropType;\r\n reviewsSummary: ReviewsSummary;\r\n apiKey: string;\r\n apiId: string;\r\n isCompact: boolean;\r\n recalculateHeight: () => void;\r\n};\r\n\r\ntype ReviewsSummary = {\r\n score: number;\r\n count: number;\r\n};\r\n\r\ntype ReviewLink = {\r\n href: string;\r\n rel: string;\r\n}\r\n\r\nconst SummaryWrap = styled.div({\r\n alignItems: 'start'\r\n})\r\n\r\nconst Data = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '16px',\r\n\r\n ['@media ' + style.mediaUpToLarge]: {\r\n marginBottom: '40px',\r\n },\r\n})\r\n\r\nconst ReviewsWrap = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px;',\r\n})\r\n\r\nconst ShowMore = styled.span({\r\n marginTop: '16px',\r\n cursor: 'pointer',\r\n color: style.colors.monochrome.a11ygrey,\r\n ['@media ' + style.mediaMinLarge]: {\r\n ':hover': {\r\n color: style.colors.monochrome.black,\r\n },\r\n },\r\n})\r\n\r\nconst TopContent = styled.div({\r\n display: 'flex',\r\n gap: '16px',\r\n alignItems: 'center',\r\n})\r\n\r\n\r\nfunction ReviewsContent({ reviewsSummary, itemNumbers, reviewLabels, apiKey, apiId, isCompact, recalculateHeight }: PropType) {\r\n const [customerReviews, setCustomerReviews] = useState([]);\r\n //const [numberOfReviewsShown, setNumberOfReviewsShown] = useState(2);\r\n const [nextPage, setNextPage] = useState(1);\r\n const [showMore, setShowMore] = useState(false);\r\n\r\n const baseUrl = `https://api.trustpilot.com/v1/product-reviews/business-units/${apiId}/reviews?apikey=${apiKey}&sku=${itemNumbers?.toString()}&perPage=2&page=`;\r\n\r\n function fetchNextPage() {\r\n fetch(baseUrl + nextPage)\r\n .then((reviewsResponse) => reviewsResponse.json())\r\n .then((reviewsJson) => {\r\n setCustomerReviews((reviews) => reviews.concat(reviewsJson.productReviews));\r\n\r\n setShowMore(false);\r\n const links = reviewsJson.links as ReviewLink[];\r\n if (links && links.length > 0) {\r\n const next = links.find(x => x.rel === 'next-page');\r\n if (next) {\r\n setShowMore(true);\r\n setNextPage((next) => {\r\n return next + 1;\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n function fetchReviewData() {\r\n if (apiKey) {\r\n fetch(\r\n baseUrl + 1,\r\n )\r\n .then((reviewsResponse) => reviewsResponse.json())\r\n .then((reviewsJson) => {\r\n setCustomerReviews(reviewsJson.productReviews);\r\n const links = reviewsJson.links as ReviewLink[];\r\n if (links && links.length > 0) {\r\n const next = links.find(x => x.rel === 'next-page');\r\n if (next) {\r\n setShowMore(true);\r\n setNextPage(2);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (itemNumbers) {\r\n fetchReviewData();\r\n }\r\n }, [itemNumbers]);\r\n\r\n useEffect(() => {\r\n recalculateHeight();\r\n }, [customerReviews]);\r\n\r\n return (\r\n reviewsSummary && (\r\n \r\n \r\n \r\n {reviewsSummary.score}\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n {customerReviews\r\n //.filter((_review, index) => index < numberOfReviewsShown)\r\n .map((review, index) => {\r\n return (\r\n \r\n );\r\n })}\r\n {showMore && (\r\n {\r\n fetchNextPage();\r\n // if (customerReviews.length <= numberOfReviewsShown) {\r\n\r\n // } else {\r\n // recalculateHeight();\r\n // }\r\n // setNumberOfReviewsShown((currentNumber) => currentNumber + 2);\r\n }}\r\n >\r\n {reviewLabels.viewMore}\r\n \r\n )}\r\n \r\n
\r\n )\r\n );\r\n}\r\n\r\nexport default connect((state) => ({\r\n apiKey: state.appShellData.apiKeys.trustpilotApiKey,\r\n apiId: state.appShellData.apiKeys.trustpilotUnitId,\r\n}))(ReviewsContent);\r\n","import factory from './icon';\r\nimport svgDripdry from './Glyphs/washcare/Dripdry.svg';\r\nimport svgDryclpetr from './Glyphs/washcare/Dryclpetr.svg';\r\nimport svgDryflat from './Glyphs/washcare/Dryflat.svg';\r\nimport svgHandwash from './Glyphs/washcare/Handwash.svg';\r\nimport svgIronH from './Glyphs/washcare/IronH.svg';\r\nimport svgIronL from './Glyphs/washcare/IronL.svg';\r\nimport svgIronM from './Glyphs/washcare/IronM.svg';\r\nimport svgLinedry from './Glyphs/washcare/Linedry.svg';\r\nimport svgNobleach from './Glyphs/washcare/Nobleach.svg';\r\nimport svgNodrycl from './Glyphs/washcare/Nodrycl.svg';\r\nimport svgNoIron from './Glyphs/washcare/NoIron.svg';\r\nimport svgNotumble from './Glyphs/washcare/Notumble.svg';\r\nimport svgNowash from './Glyphs/washcare/Nowash.svg';\r\nimport svgTumbleH from './Glyphs/washcare/TumbleH.svg';\r\nimport svgTumbleL from './Glyphs/washcare/TumbleL.svg';\r\nimport svgTumbleM from './Glyphs/washcare/TumbleM.svg';\r\nimport svgTempWash from './Glyphs/washcare/Temp-Wash.svg';\r\n\r\nexport const IconDripdry = factory(svgDripdry, 24, 24);\r\nexport const IconDryclpetr = factory(svgDryclpetr, 24, 24);\r\nexport const IconDryflat = factory(svgDryflat, 24, 24);\r\nexport const IconHandwash = factory(svgHandwash, 24, 24);\r\nexport const IconIronH = factory(svgIronH, 24, 24);\r\nexport const IconIronL = factory(svgIronL, 24, 24);\r\nexport const IconIronM = factory(svgIronM, 24, 24);\r\nexport const IconLinedry = factory(svgLinedry, 24, 24);\r\nexport const IconNobleach = factory(svgNobleach, 24, 24);\r\nexport const IconNodrycl = factory(svgNodrycl, 24, 24);\r\nexport const IconNoIron = factory(svgNoIron, 24, 24);\r\nexport const IconNotumble = factory(svgNotumble, 24, 24);\r\nexport const IconNowash = factory(svgNowash, 24, 24);\r\nexport const IconTumbleH = factory(svgTumbleH, 24, 24);\r\nexport const IconTumbleL = factory(svgTumbleL, 24, 24);\r\nexport const IconTumbleM = factory(svgTumbleM, 24, 24);\r\nexport const IconTempWash = factory(svgTempWash, 24, 24);\r\n","import React from 'react';\r\nimport * as WashCareIcons from 'Shared/Icons/WashCareIcons';\r\n\r\nexport function WashIcon({ name }: { name: string }) {\r\n switch (name) {\r\n case '30Cdelic':\r\n case '30Chand':\r\n case '30Cnorm':\r\n case '30Cperm':\r\n case '30Cwool':\r\n case '40Cdelic':\r\n case '40Chand':\r\n case '40Cnorm':\r\n case '40Cperm':\r\n case '60Cnorm':\r\n case '60Cperm':\r\n case '95Cnorm':\r\n case '95Cperm':\r\n return ;\r\n case 'Dripdry':\r\n return ;\r\n case 'Dryclpetr':\r\n return ;\r\n case 'Dryflat':\r\n return ;\r\n case 'Handwash':\r\n return ;\r\n case 'IronH':\r\n return ;\r\n case 'IronL':\r\n return ;\r\n case 'IronM':\r\n return ;\r\n case 'Linedry':\r\n return ;\r\n case 'Nobleach':\r\n return ;\r\n case 'Nodrycl':\r\n return ;\r\n case 'NoDryclean':\r\n return ;\r\n case 'NoIron':\r\n return ;\r\n case 'Notumble':\r\n return ;\r\n case 'Nowash':\r\n return ;\r\n case 'TumbleH':\r\n return ;\r\n case 'TumbleL':\r\n return ;\r\n case 'TumbleM':\r\n return ;\r\n default:\r\n return null;\r\n }\r\n}","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport {\r\n H3,\r\n Paragraph,\r\n ResponsiveSize,\r\n ResponsiveLineHeight,\r\n TextLabel,\r\n} from 'Shared/SharedComponents/atoms/Typography';\r\nimport Composition from 'Product/Models/Composition.type';\r\nimport CareInstructions from 'Product/Models/CareInstructions.type';\r\nimport { WashIcon } from 'Product/WashAndCare';\r\nimport { ButtonHeight, ButtonTheme, LinkButton } from 'Shared/TextButtons';\r\nimport { createGridClasses, createOffsetGridClassLarge, fillGridBins } from 'Shared/grid';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype PropType = {\r\n compositionLabel: string;\r\n compositions: Composition[];\r\n careLabel: string;\r\n careInstructions: CareInstructions;\r\n isCompact: boolean;\r\n};\r\n\r\nconst PartHeading = styled(TextLabel, {\r\n marginBottom: '16px',\r\n});\r\n\r\nconst CompositionWrap = styled.div({\r\n ['@media ' + style.mediaMinLarge]: {\r\n borderTop: {\r\n color: style.colors.monochrome.black,\r\n style: 'solid',\r\n width: '2px',\r\n },\r\n paddingTop: '16px',\r\n },\r\n})\r\n\r\nconst CompositionHeadingWrap = styled.div({\r\n marginBottom: '24px'\r\n})\r\n\r\nconst CompositionItemWrap = styled.div({\r\n marginBottom: '24px'\r\n})\r\n\r\nconst CareInstructionsWrap = styled.div({\r\n ['@media ' + style.mediaMinLarge]: {\r\n borderTop: {\r\n color: style.colors.monochrome.black,\r\n style: 'solid',\r\n width: '2px',\r\n },\r\n paddingTop: '16px',\r\n },\r\n})\r\n\r\nconst CareInstructionsHeadingWrap = styled.div({\r\n marginBottom: '24px'\r\n})\r\n\r\nconst CareInstructionsItemWrap = styled.div({\r\n marginBottom: '24px'\r\n})\r\n\r\nconst CareInstructionWashItemWrap = styled.div({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'center',\r\n gap: '8px',\r\n marginBottom: '8px',\r\n})\r\n\r\nconst CareInstructionWashItemText = styled(Paragraph, {\r\n whiteSpace: 'nowrap'\r\n})\r\n\r\nconst CareInstructionsItem = styled(Paragraph, {\r\n marginBottom: '16px'\r\n})\r\n\r\nfunction MaterialsContent({ compositionLabel, compositions, careLabel, careInstructions, isCompact }: PropType) {\r\n const compositionBins = compositions.length > 2 ? 3 : 2;\r\n return (\r\n
\r\n {compositions && compositions.length > 0 && (\r\n \r\n \r\n

{compositionLabel}

\r\n
\r\n {compositions?.map((composition, index) => {\r\n return (\r\n \r\n {composition.name}\r\n {composition.materials?.map((material, index) => {\r\n return (\r\n {`${material.percentage}% ${material.name}`}\r\n );\r\n })}\r\n \r\n );\r\n })}\r\n
\r\n )}\r\n \r\n \r\n

{careLabel}

\r\n
\r\n {careInstructions.washItems && (\r\n \r\n {careInstructions.labels.wash}\r\n {careInstructions.washItems?.map((careInstruction, index) => {\r\n return (\r\n \r\n \r\n \r\n {careInstruction.text}\r\n \r\n \r\n );\r\n })}\r\n \r\n )}\r\n \r\n {careInstructions.textHeading}\r\n \r\n {careInstructions.textIntro}\r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default MaterialsContent;\r\n","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { H3, Paragraph, ResponsiveSize, ArticleTag, TextLabel } from 'Shared/SharedComponents/atoms/Typography';\r\nimport SustainabilityViewModel from 'Product/SustainabilityViewModel.type';\r\nimport Html from 'Shared/Partials/PropertyTypes/Html';\r\nimport { AspectImageVideoBackground } from 'Shared/SharedComponents/molecules/ImageVideoBackground';\r\nimport { createGridClasses } from 'Shared/grid';\r\nimport * as style from 'Shared/Style';\r\nimport SwiperList from 'Shared/SwiperList';\r\nimport Link from 'Shared/Link';\r\nimport { PictureImage, Preset } from 'Shared/Image';\r\n\r\ntype PropType = {\r\n sustainability: SustainabilityViewModel;\r\n isCompact: boolean;\r\n};\r\n\r\nconst Intro = styled(Paragraph, {\r\n marginBottom: '16px'\r\n})\r\n\r\nconst HtmlBody = styled.div({\r\n});\r\n\r\nconst SwiperWrap = styled.div({\r\n marginTop: '40px',\r\n ['@media ' + style.mediaMinLarge]: {\r\n marginTop: '80px',\r\n },\r\n})\r\n\r\nconst Heading = styled(H3, {\r\n marginTop: '12px'\r\n})\r\n\r\nconst MainTag = styled(ArticleTag, {\r\n marginTop: '16px'\r\n})\r\n\r\nconst Tag = styled(ArticleTag, {\r\n marginTop: '12px'\r\n})\r\n\r\nconst ItemImage = styled(PictureImage, {\r\n position: 'absolute',\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n objectPosition: 'center center',\r\n borderRadius: '8px'\r\n})\r\n\r\nexport const ItemLink = styled(Link, {\r\n color: 'inherit',\r\n textDecoration: 'none',\r\n});\r\n\r\n\r\nfunction SustainabilityContent({ sustainability, isCompact }: PropType) {\r\n return (\r\n
\r\n
\r\n
\r\n \r\n {sustainability?.mainIntro}\r\n \r\n {sustainability?.mainBody && }\r\n
\r\n
\r\n \r\n \r\n {sustainability?.contentItems?.map((contentItem, index) => (\r\n
\r\n \r\n \r\n {contentItem.image?.url && (\r\n \r\n )}\r\n \r\n {contentItem.tag && {contentItem.tag}}\r\n {contentItem.heading}\r\n\r\n {contentItem.tags?.length > 0 && (\r\n \r\n {contentItem.tags?.reduce((tagString, tag) => {\r\n return `${tagString}, ${tag}`;\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\nexport default SustainabilityContent;\r\n","import React, { useState, useEffect } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { H2, H3, ResponsiveSize } from 'Shared/SharedComponents/atoms/Typography';\r\nimport { Plus16x16 } from 'Shared/Icons/Plus';\r\nimport SustainabilityViewModel from 'Product/SustainabilityViewModel.type';\r\nimport Composition from 'Product/Models/Composition.type';\r\nimport DeliveryAndReturnsViewModel from 'Product/DeliveryAndReturnsViewModel.type';\r\nimport Html from 'Shared/Partials/PropertyTypes/Html';\r\nimport ReviewsContent, { ReviewLabelsPropType } from './ReviewsContent';\r\nimport MaterialsContent from './MaterialsContent';\r\nimport SustainabilityContent from './SustainabilityContent';\r\nimport CareInstructions from 'Product/Models/CareInstructions.type';\r\nimport { createGridClasses, createOffsetGridClassLarge } from 'Shared/grid';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype ConnectedPropType = {\r\n itemNumbers: string[];\r\n materialsAndCareLabel: string;\r\n compositionLabel: string;\r\n compositions: Composition[];\r\n careLabel: string;\r\n careInstructions: CareInstructions;\r\n sustainabilityLabel: string;\r\n sustainability: SustainabilityViewModel;\r\n reviewsLabel: string;\r\n reviewLabels: ReviewLabelsPropType;\r\n deliveryAndReturnsLabel: string;\r\n deliveryAndReturns: DeliveryAndReturnsViewModel;\r\n isCompact: boolean;\r\n reviewCount: number;\r\n reviewScore: number;\r\n expandedSection?: string;\r\n scrollToSectionRef?: React.Ref;\r\n resetExpandedSection?: (newValue: string) => void;\r\n};\r\n\r\ntype PropType = ConnectedPropType;\r\n\r\nconst Divider = styled.div({\r\n height: 0,\r\n width: '100%',\r\n marginBottom: '16px',\r\n border: { y: { width: '1px', style: 'solid', color: style.colors.monochrome.black } },\r\n})\r\n\r\nconst DividerLine = () => (\r\n \r\n);\r\n\r\nconst Wrap = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n})\r\n\r\nconst DeliveryHeadingWrap = styled.div({\r\n marginBottom: '24px',\r\n ['@media ' + style.mediaMinLarge]: {\r\n paddingRight: '14px',\r\n },\r\n})\r\n\r\nconst Plus16 = styled(Plus16x16, {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: 'inherit',\r\n transitionDuration: '0.2s',\r\n})\r\n\r\nconst SectionInner = styled.div({\r\n cursor: 'pointer',\r\n padding: { bottom: '16px' },\r\n display: 'flex',\r\n flexDirection: 'row',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n})\r\n\r\nconst SectionContent = styled.div({\r\n padding: {\r\n y: '24px',\r\n },\r\n\r\n ['@media ' + style.mediaMinLarge]: {\r\n padding: {\r\n y: '64px',\r\n },\r\n },\r\n})\r\n\r\nfunction ProductAccordion({\r\n itemNumbers,\r\n materialsAndCareLabel,\r\n compositionLabel,\r\n compositions,\r\n careLabel,\r\n careInstructions,\r\n sustainabilityLabel,\r\n sustainability,\r\n reviewsLabel,\r\n reviewLabels,\r\n reviewCount,\r\n reviewScore,\r\n deliveryAndReturnsLabel,\r\n deliveryAndReturns,\r\n expandedSection,\r\n scrollToSectionRef,\r\n resetExpandedSection,\r\n isCompact,\r\n}: PropType) {\r\n\r\n const [recalculateReviewsHeight, setRecalculateReviewsHeight] = useState(0);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n {sustainability && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {reviewCount > 0 && (\r\n <>\r\n resetExpandedSection('')} key=\"reviews\" recalculateHeightState={recalculateReviewsHeight} wrapperRef={scrollToSectionRef} expanded={expandedSection && expandedSection === 'reviews'} label={reviewsLabel} isCompact={isCompact}>\r\n setRecalculateReviewsHeight(recalculateReviewsHeight + 1)} itemNumbers={itemNumbers} reviewLabels={reviewLabels} isCompact={isCompact} />\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n
\r\n \r\n

{deliveryAndReturns.heading}

\r\n
\r\n
\r\n {deliveryAndReturns.body && }\r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\ntype SectionPropType = {\r\n label: string;\r\n children: React.ReactNode;\r\n isCompact: boolean;\r\n expanded?: boolean;\r\n wrapperRef?: React.Ref;\r\n autoHeight?: boolean;\r\n sectionId?: string;\r\n recalculateHeightState?: number;\r\n resetExpandedSection?: () => void;\r\n};\r\n\r\nfunction AccordionSection({ label, children, isCompact, expanded = false, wrapperRef, sectionId, resetExpandedSection }: SectionPropType) {\r\n const [contentShown, setContentShown] = useState(expanded);\r\n const [currentHeight, setHeight] = useState(0);\r\n const [shouldTranslateHeight] = useState(true);\r\n\r\n const updateOffsetHeight = (ref: HTMLElement) => {\r\n if (ref) {\r\n requestAnimationFrame(() => {\r\n const height = ref.offsetHeight;\r\n if (contentShown && Math.abs(currentHeight - height) > 2) {\r\n setHeight(height);\r\n }\r\n });\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (sectionId === 'reviews') {\r\n if (expanded) {\r\n setContentShown(true);\r\n resetExpandedSection();\r\n }\r\n }\r\n }, [expanded]);\r\n\r\n return (\r\n
\r\n { setContentShown((isShown) => !isShown) }}\r\n >\r\n

{label}

\r\n \r\n \r\n \r\n updateOffsetHeight(ref)}>\r\n {children}\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default ProductAccordion;\r\n","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { Paragraph, ResponsiveSize } from 'Shared/SharedComponents/atoms/Typography';\r\n\r\ntype PropType = {\r\n openingHours: {\r\n [item: string]: string;\r\n };\r\n};\r\n\r\nconst Table = styled.table({\r\n width: '100%', padding: { xy: 0 }, borderSpacing: 0, borderCollapse: 'collapse'\r\n})\r\n\r\nconst Tr = styled.tr({\r\n padding: { y: '2px' }\r\n})\r\n\r\nconst Td = styled.td({\r\n width: '100%'\r\n})\r\n\r\nfunction OpeningHours({ openingHours }: PropType) {\r\n return (\r\n \r\n \r\n {Object.entries(openingHours).map((openingHour, index) => {\r\n const [days, hours] = openingHour;\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n
\r\n {days}\r\n \r\n \r\n {hours}\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default OpeningHours;\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { H3, Paragraph, ResponsiveSize } from 'Shared/SharedComponents/atoms/Typography';\r\nimport { ButtonHeight, ButtonTheme, LinkButton } from 'Shared/TextButtons';\r\nimport OpeningHours from './OpeningHours';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype StoreInformationLabelsType = {\r\n openingHours: string;\r\n openingHoursExceptions: string;\r\n contact: string;\r\n findStore: string;\r\n};\r\n\r\ntype StoreInformationPropType = {\r\n labels: StoreInformationLabelsType;\r\n openingHours: { [item: string]: string };\r\n openingHoursExceptions: { [item: string]: string };\r\n phoneNumber: string;\r\n directionsLink: string;\r\n show: boolean;\r\n};\r\n\r\nconst OpeningHoursHeading = styled(H3, {\r\n padding: { bottom: '6px' }\r\n})\r\n\r\nconst OpeningHoursExceptionsHeading = styled(H3, {\r\n padding: { bottom: '6px' }\r\n})\r\n\r\nconst ContactWrap = styled.div({\r\n display: 'flex', \r\n margin: { top: '30px' },\r\n flexDirection: 'column', \r\n ['@media ' + style.mediaMinLarge]: {\r\n flexDirection: 'row', \r\n },\r\n})\r\n\r\nconst OpeningHoursOuter = styled.div({\r\n display: 'flex'\r\n})\r\n\r\nconst OpeningHoursWrap = styled.div({\r\n ['@media ' + style.mediaMinLarge]: {\r\n flex: { basis: '50%' },\r\n paddingRight: '60px',\r\n },\r\n})\r\n\r\nconst ContactData = styled.div({\r\n ['@media ' + style.mediaMinLarge]: {\r\n flex: { basis: '50%' },\r\n paddingRight: '60px',\r\n },\r\n})\r\n\r\nconst ContactDataText = styled(Paragraph, {\r\n padding: { top: '8px' } \r\n})\r\n\r\nconst ContactButton = styled.div({\r\n ['@media ' + style.mediaUpToLarge]: {\r\n marginTop: '24px',\r\n },\r\n ['@media ' + style.mediaMinLarge]: {\r\n flex: { basis: '50%' },\r\n },\r\n})\r\n\r\nfunction StoreInformation({\r\n labels,\r\n openingHours,\r\n openingHoursExceptions,\r\n phoneNumber,\r\n directionsLink,\r\n show,\r\n}: StoreInformationPropType) {\r\n\r\n const [heightTest, setHeight] = useState({shouldTranslateHeight: false, currentHeight: 0});\r\n const [isOpen, setIsOpen] = useState(show);\r\n\r\n useEffect(() => {\r\n if (isOpen !== show) {\r\n setHeight({shouldTranslateHeight: true, currentHeight: 0});\r\n } else {\r\n setHeight({shouldTranslateHeight: false, currentHeight: 0});\r\n }\r\n\r\n setIsOpen(show);\r\n }, []);\r\n\r\n const updateOffsetHeight = (ref: HTMLElement) => {\r\n if(show) {\r\n if (ref) {\r\n // ref to prevent browser freeze\r\n requestAnimationFrame(() => {\r\n const height = ref.offsetHeight;\r\n if (Math.abs(heightTest.currentHeight - height) > 2) {\r\n setHeight({shouldTranslateHeight: true, currentHeight: height});\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n return (\r\n \r\n updateOffsetHeight(ref)} >\r\n \r\n {openingHours && (\r\n \r\n \r\n {labels.openingHours}\r\n \r\n \r\n \r\n )}\r\n {openingHoursExceptions && (\r\n \r\n \r\n {labels.openingHoursExceptions}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n

\r\n {labels.contact}\r\n

\r\n \r\n {phoneNumber}\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default StoreInformation;\r\n","import React, { useState } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport StoreStockViewModel from 'Product/StoreStockViewModel.type';\r\nimport { CircleFilled8x8 } from 'Shared/Icons/Circle';\r\nimport {\r\n H3,\r\n Paragraph,\r\n ResponsiveSize,\r\n ResponsiveLineHeight,\r\n Text,\r\n TextLabel,\r\n} from 'Shared/SharedComponents/atoms/Typography';\r\nimport { AvailableSizes } from 'Product/Sizes';\r\nimport StoreInformation from './StoreInformation';\r\nimport StoreAvailabilityViewModelLabels from 'Product/VariationViewModel+StoreAvailabilityViewModelLabels.type';\r\nimport { Plus12x12 } from 'Shared/Icons/Plus';\r\nimport { colorFromStatus } from 'Shared/utils';\r\nimport * as style from 'Shared/Style';\r\n\r\ntype ConnectedPropType = {\r\n storeAvailability: StoreStockViewModel;\r\n isSelected: boolean;\r\n labels: StoreAvailabilityViewModelLabels;\r\n isCompact: boolean;\r\n onClick: () => void;\r\n};\r\n\r\nconst Wrap = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'stretch',\r\n gap: '16px',\r\n padding: { x: '12px', top: '12px', bottom: '16px' },\r\n border: {\r\n xy: {\r\n width: '2px',\r\n style: 'solid',\r\n },\r\n },\r\n borderRadius: '8px',\r\n})\r\n\r\nconst StoreDataWrap = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'stretch',\r\n ['@media ' + style.mediaMinLarge]: {\r\n flexDirection: 'row'\r\n },\r\n})\r\n\r\nconst StoreDataItem1 = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '9px',\r\n ['@media ' + style.mediaMinLarge]: {\r\n flex: { basis: '50%' },\r\n padding: { right: '60px' },\r\n },\r\n})\r\n\r\nconst StoreDataItem1Row = styled.div({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n gap: '42px', \r\n flexGrow: 0,\r\n ['@media ' + style.mediaMinLarge]: {\r\n gap: '8px', \r\n },\r\n})\r\n\r\nconst StoreDataItem1Text = styled(Paragraph, {\r\n color: style.colors.monochrome.a11ygrey, \r\n flexGrow: 1\r\n})\r\n\r\nconst StoreDataItem2 = styled.div({\r\n display: 'flex',\r\n flexDirection: 'column',\r\n ['@media ' + style.mediaMinLarge]: {\r\n flex: { basis: '50%' },\r\n },\r\n})\r\n\r\nconst StoreDataItem2Row = styled.div({\r\n display: 'flex',\r\n flexDirection: 'row',\r\n alignItems: 'baseline',\r\n gap: '8px',\r\n whiteSpace: 'nowrap',\r\n padding: { top: '24px', bottom: '8px' },\r\n ['@media ' + style.mediaMinLarge]: {\r\n padding: { top: '5px', bottom: '11x' },\r\n },\r\n})\r\n\r\nconst Plus = styled(Plus12x12, {\r\n marginLeft: '8px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n color: 'inherit',\r\n transitionDuration: '0.2s',\r\n})\r\n\r\nconst PlusRotaded = styled(Plus, {\r\n transform: 'rotate(45deg)',\r\n})\r\n\r\nconst MoreInformationMobile = styled.div({\r\n cursor: 'pointer', margin: { bottom: '16px' }, display: 'flex'\r\n})\r\n\r\nconst MoreInformationDesktop = styled.div({\r\n cursor: 'pointer', display: 'flex'\r\n})\r\n\r\nconst SelectedStore = styled(Text, {\r\n color: style.colors.monochrome.a11ygrey,\r\n whiteSpace: 'nowrap',\r\n padding: { top: '3px' },\r\n ['@media ' + style.mediaMinLarge]: {\r\n padding: { top: '5px' },\r\n },\r\n})\r\n\r\nconst AvailableSizesMobile = styled.div({\r\n cursor: 'pointer', \r\n display: 'flex'\r\n})\r\n\r\ntype PropType = ConnectedPropType;\r\n\r\nfunction StoreAvailabilityCard({ storeAvailability, isSelected, labels, isCompact, onClick }: PropType) {\r\n const [moreInformationShown, setMoreInformationShown] = useState(false);\r\n const [availableSizesShown, setAvailableSizesShown] = useState(false);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n

{storeAvailability.name}

\r\n {isSelected && (\r\n \r\n {labels.selectedStore}\r\n \r\n )}\r\n
\r\n \r\n {storeAvailability.address}\r\n \r\n {storeAvailability.zipCode} {storeAvailability.city}\r\n \r\n {!isCompact && (\r\n setMoreInformationShown((infoShown) => !infoShown)}\r\n >\r\n {labels.moreInformation}\r\n {moreInformationShown ? : }\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n {storeAvailability.availabilityLabel}\r\n \r\n \r\n {!isCompact && }\r\n \r\n
\r\n {isCompact && (\r\n setAvailableSizesShown((availableSizesShown) => !availableSizesShown)}\r\n >\r\n {labels.availableSizes}\r\n {availableSizesShown ? : }\r\n \r\n )}\r\n {isCompact && availableSizesShown && }\r\n \r\n {isCompact && (\r\n setMoreInformationShown((infoShown) => !infoShown)}\r\n >\r\n {labels.moreInformation}\r\n {moreInformationShown ? : }\r\n \r\n )}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default StoreAvailabilityCard;\r\n","import React from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport { Paragraph, ResponsiveSize } from 'Shared/SharedComponents/atoms/Typography';\r\nimport { LocationScaled } from 'Shared/Icons/Location';\r\nimport { SearchInput, Toggle } from 'Shared/SharedComponents/atoms/InputField';\r\nimport * as style from 'Shared/Style';\r\nimport Loader from 'SiteLayout/Loader';\r\n\r\ntype SearchStoresLabels = {\r\n searchPlaceholder: string;\r\n searchInStockToggle: string;\r\n};\r\n\r\ntype PropType = {\r\n labels: SearchStoresLabels;\r\n updateResults: (searchString: string) => void;\r\n setOnlyShowIfInStock: (onlyShowIfInStock: boolean) => void;\r\n showSpinner: boolean;\r\n isCompact: boolean;\r\n};\r\n\r\nconst Wrap = styled.div({\r\n display: 'flex', \r\n flexDirection: 'column', \r\n margin: { top: '24px' }, \r\n width: '100%',\r\n ['@media ' + style.mediaMinLarge]: {\r\n flexDirection: 'row'\r\n },\r\n})\r\n\r\nconst SearchInputWrap = styled.div({\r\n ['@media ' + style.mediaMinLarge]: {\r\n flex: { basis: '50%' },\r\n padding: { right: '16px' },\r\n },\r\n})\r\n\r\nconst ToggleWrap = styled.div({\r\n display: 'flex',\r\n gap: '8px',\r\n alignItems: 'center',\r\n ['@media ' + style.mediaUpToLarge]: {\r\n margin: { top: '13px' },\r\n },\r\n ['@media ' + style.mediaMinLarge]: {\r\n flex: { basis: '50%' },\r\n },\r\n})\r\n\r\nconst Map = styled(LocationScaled, {\r\n alignSelf: 'center', \r\n width: '24px',\r\n height: '24px'\r\n})\r\n\r\nfunction SearchStores({ labels, updateResults, setOnlyShowIfInStock, isCompact, showSpinner }: PropType) {\r\n return (\r\n \r\n \r\n updateResults(event.currentTarget.value)}\r\n iconAfter={}\r\n />\r\n \r\n \r\n \r\n {labels.searchInStockToggle}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SearchStores;\r\n","import React, { useEffect, useState } from 'react';\r\nimport connect from 'Shared/connect';\r\nimport { styled } from '@glitz/react';\r\nimport { get, URLX } from '@polarnopyret/scope';\r\nimport VariationStoreStockViewModel from 'Product/VariationStoreStockViewModel.type';\r\nimport StoreAvailabilityCard from './StoreAvailabilityCard';\r\nimport StoreModel from 'Stores/StoreModel.type';\r\nimport { SetSelectedStore } from 'Shared/uiReducer';\r\nimport StoreAvailabilityViewModelLabels from 'Product/VariationViewModel+StoreAvailabilityViewModelLabels.type';\r\nimport SearchStores from './SearchStores';\r\nimport { loadScript } from '@polarnopyret/scope';\r\nimport { filterByDistance, sortByCrowFliesDistance } from 'Shared/distance-calculations';\r\nimport { formatStringByKeys } from 'Shared/utils';\r\nimport { getCookie, setCookie } from 'Shared/Helper/cookieHelper';\r\nimport Modal, { ModalScrollableContent, ModalTopContent } from 'Shared/SharedComponents/atoms/Modal';\r\nimport { Paragraph, ResponsiveSize } from 'Shared/SharedComponents/atoms/Typography';\r\nimport { isCompact } from 'Shared/Viewport';\r\n\r\nconst AVAILABILITY_STATUS_OUT_OF_STOCK = 'RED';\r\nconst MAX_DISTANCE = 5000;\r\nconst COOKIE_POP_SELECTED_STORE = 'pop.selected-store';\r\n\r\nconst ModalScrollableContentContainer = styled(ModalScrollableContent, {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'stretch',\r\n gap: '12px',\r\n paddingTop: '12px'\r\n})\r\n\r\nconst ModalIntro = styled(Paragraph, {\r\n marginTop: '8px'\r\n})\r\n\r\ntype RequiredPropType = {\r\n modalIsShown: boolean;\r\n hideModal: () => void;\r\n labels: StoreAvailabilityViewModelLabels;\r\n};\r\n\r\ntype ConnectedPropType = {\r\n currentBreakpoint: number;\r\n stores: { [item: string]: StoreModel };\r\n setSelectedStore: (selectedStore: StoreModel) => void;\r\n};\r\n\r\ntype PropType = RequiredPropType &\r\n ConnectedPropType & {\r\n storeAvailability?: VariationStoreStockViewModel;\r\n googleMapsApiKey: string;\r\n };\r\n\r\ninterface StoreWithId extends StoreModel {\r\n id: string;\r\n}\r\n\r\nconst StoreAvailabilityModal = ({\r\n modalIsShown,\r\n hideModal,\r\n labels,\r\n stores,\r\n setSelectedStore,\r\n googleMapsApiKey,\r\n currentBreakpoint,\r\n}: PropType) => {\r\n\r\n const [storeAvailability, setStoreAvailability] = useState(undefined);\r\n const [onlyShowIfInStock, setOnlyShowIfInStock] = useState(true);\r\n const [isPositionChecked, setIsPositionChecked] = useState(false);\r\n const [positionAllowedByClient, setPositionAllowedByClient] = useState(false);\r\n const [selectedStoreId, setSelectedStoreId] = useState('');\r\n const storeAvailabilityInStock = (storeAvailability?.stores?.findIndex(x => x.availabilityStatus !== AVAILABILITY_STATUS_OUT_OF_STOCK) ?? -1) > -1;\r\n const [storesLoaded, setStoresLoaded] = useState(false);\r\n const [showSpinner, setShowSpinner] = useState(true);\r\n\r\n const isMobile = isCompact(currentBreakpoint);\r\n\r\n async function collectStoreData(stores: StoreWithId[]) {\r\n const storeIds = stores.reduce((ids: string, store: StoreWithId) => {\r\n return `${ids},${store.id}`;\r\n }, '');\r\n const url = new URLX(document.URL);\r\n url.search = `?stores=${storeIds}`;\r\n return get(url).then((r) => r.json());\r\n }\r\n\r\n function searchForStores(searchString: string) {\r\n const url = new URLX(document.URL);\r\n url.search = `?storeSearch=${searchString}`;\r\n setStoreAvailability(null);\r\n setStoresLoaded(false);\r\n\r\n if (searchString === '') {\r\n getStores();\r\n return;\r\n }\r\n\r\n get(url)\r\n .then((r) => r.json())\r\n .then((json: VariationStoreStockViewModel) => {\r\n setStoreAvailability(json);\r\n setStoresLoaded(true);\r\n });\r\n }\r\n\r\n const storesWithIds: StoreWithId[] = [];\r\n for (const key in stores) {\r\n if (stores.hasOwnProperty(key)) {\r\n storesWithIds.push({ ...stores[key], id: key });\r\n }\r\n }\r\n\r\n function getStores() {\r\n navigator.geolocation?.getCurrentPosition(\r\n (position) => {\r\n loadScript(\r\n 'https://maps.googleapis.com/maps/api/js' + (googleMapsApiKey ? '?key=' + googleMapsApiKey : ''),\r\n ).then(() => {\r\n\r\n filterByDistance(storesWithIds, position, MAX_DISTANCE).then((filteredStores: StoreWithId[]) => {\r\n collectStoreData(filteredStores).then((storeAvailabilityJson) => {\r\n if (storeAvailabilityJson?.stores) {\r\n storeAvailabilityJson.stores = sortByCrowFliesDistance(storeAvailabilityJson.stores, position);\r\n }\r\n setStoreAvailability(storeAvailabilityJson);\r\n setStoresLoaded(true);\r\n setShowSpinner(false);\r\n });\r\n setIsPositionChecked(true);\r\n setPositionAllowedByClient(true);\r\n });\r\n });\r\n },\r\n () => {\r\n // Could not get the client location; must collect all store data and cannot sort based on position\r\n collectStoreData(storesWithIds).then((storeAvailabilityJson) => {\r\n setStoreAvailability(storeAvailabilityJson);\r\n setStoresLoaded(true);\r\n setShowSpinner(false);\r\n });\r\n setIsPositionChecked(true);\r\n setPositionAllowedByClient(false);\r\n },\r\n );\r\n }\r\n\r\n if (!isPositionChecked && modalIsShown) {\r\n getStores();\r\n }\r\n\r\n useEffect(() => {\r\n if (selectedStoreId === '') {\r\n const cookieStoreId = getCookie(COOKIE_POP_SELECTED_STORE);\r\n if (cookieStoreId) {\r\n setSelectedStoreId(cookieStoreId);\r\n }\r\n } else {\r\n setSelectedStore(stores[selectedStoreId]);\r\n if (selectedStoreId !== getCookie(COOKIE_POP_SELECTED_STORE)) {\r\n setCookie(COOKIE_POP_SELECTED_STORE, selectedStoreId);\r\n }\r\n }\r\n }, [selectedStoreId]);\r\n\r\n return (\r\n \r\n \r\n {labels.intro?.length > 0 && (\r\n {labels.intro}\r\n )}\r\n \r\n \r\n \r\n {storeAvailability &&\r\n storeAvailability?.stores?.map((store, index) => {\r\n if (!onlyShowIfInStock || store.availabilityStatus !== AVAILABILITY_STATUS_OUT_OF_STOCK)\r\n return (\r\n setSelectedStoreId(store.id)}\r\n />\r\n );\r\n })}\r\n {!storeAvailabilityInStock && onlyShowIfInStock && storesLoaded && (\r\n
\r\n {labels.noStoresInStock}\r\n
)\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default connect(\r\n (state) => ({\r\n stores: state.appShellData.store.stores,\r\n selectedStore: state.UI?.selectedStore,\r\n googleMapsApiKey: state.appShellData.apiKeys.googleMapsApiKey,\r\n currentBreakpoint: state.currentBreakpoint,\r\n }),\r\n (dispatch) => ({\r\n setSelectedStore: (selectedStore: StoreModel) => dispatch(SetSelectedStore(selectedStore)),\r\n }),\r\n)(StoreAvailabilityModal);\r\n","import React, { useState } from 'react';\r\nimport { styled } from '@glitz/react';\r\nimport Html from 'Shared/Partials/PropertyTypes/Html';\r\nimport { Paragraph, ResponsiveLineHeight, ResponsiveSize } from 'Shared/SharedComponents/atoms/Typography';\r\nimport SizeInformationBlockViewModel from 'SizeInformation/SizeInformationBlockViewModel.type';\r\nimport Modal, { ModalScrollableContent, ModalTabs, ModalTopContent } from 'Shared/SharedComponents/atoms/Modal';\r\n\r\ntype RequiredPropType = {\r\n modalIsShown: boolean;\r\n hideModal: () => void;\r\n sizeInformation: SizeInformationBlockViewModel;\r\n};\r\n\r\ntype PropType = RequiredPropType;\r\n\r\nconst Content = styled.div({\r\n paddingTop: '16px'\r\n})\r\n\r\nconst Text = styled(Paragraph, {\r\n margin: { top: '24px' }\r\n})\r\n\r\nexport const SizeGuideModal = ({ modalIsShown, hideModal, sizeInformation }: PropType) => {\r\n enum Tabs {\r\n SizeGuide,\r\n Measurement,\r\n }\r\n\r\n const tabs = [\r\n { tab: Tabs.SizeGuide, label: sizeInformation.sizeGuide?.tabText },\r\n { tab: Tabs.Measurement, label: sizeInformation.measurement?.tabText },\r\n ];\r\n\r\n const [selectedTab, setSelectedTab] = useState(Tabs.SizeGuide);\r\n\r\n return (\r\n \r\n \r\n \r\n {sizeInformation.intro}\r\n \r\n \r\n \r\n \r\n {selectedTab === Tabs.SizeGuide && sizeInformation.sizeGuide?.mainBody && (\r\n \r\n \r\n \r\n )}\r\n {selectedTab === Tabs.Measurement && sizeInformation.measurement?.mainBody && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default SizeGuideModal;\r\n","/**\r\n * @ComponentFor Avensia.Common.Features.Product.VariationViewModel\r\n */\r\nimport React, { useState, useEffect, useRef } from 'react';\r\nimport { scrollPosition, scrollTo, translate } from '@polarnopyret/scope';\r\nimport connect from 'Shared/connect';\r\nimport { isCompact as functionIsCompact } from 'Shared/Viewport';\r\nimport { styled } from '@glitz/react';\r\nimport VariationViewModel from '../VariationViewModel.type';\r\nimport { ButtonHeight, ButtonTheme } from 'Shared/TextButtons';\r\nimport FeedbackButton from 'Shared/Button/Feedback';\r\nimport { Plus12x12 } from 'Shared/Icons/Plus';\r\nimport { addToCart } from 'Cart/action-creators';\r\nimport {\r\n H1,\r\n TextBlockSmall,\r\n Text,\r\n Paragraph,\r\n ResponsiveSize,\r\n ResponsiveLineHeight,\r\n} from 'Shared/SharedComponents/atoms/Typography';\r\nimport { appendImagePreset, Preset } from 'Shared/image-sizes';\r\nimport { Check12x12 } from 'Shared/Icons/Check';\r\nimport Page from 'Shared/Page';\r\nimport { CircleFilled8x8 } from 'Shared/Icons/Circle';\r\nimport { Store12x12 } from 'Shared/Icons/Store';\r\nimport ExtendedData from 'Product/ExtendedData';\r\nimport Usp from 'AppShell/Models/Usp.type';\r\nimport RecommendationsList from 'Product/SwipeableList';\r\nimport ProductFeatureList from 'Product/ProductFeatureList';\r\nimport PreviousPurchaseList from 'Product/PreviousPurchase';\r\nimport { SelectableSizes } from 'Product/Sizes';\r\nimport { colorFromStatus } from 'Shared/utils';\r\nimport StoreModel from 'Stores/StoreModel.type';\r\nimport Reviews from 'Product/Reviews';\r\nimport ProductTags from 'Product/ProductTags';\r\nimport Price from 'Pricing/Price';\r\nimport Link from 'Shared/Link';\r\nimport { toggleWishlistItem as toggleWishlistData } from 'WishList/action-creators';\r\nimport MiniWishListViewModel from 'WishList/MiniWishListViewModel.type';\r\nimport WishListUpdateResultType from 'WishList/WishListUpdateResult.type';\r\nimport { openAccountBox } from 'SiteLayout/AccountBox/action-creators';\r\nimport ProductAccordion from 'Product/ProductAccordion';\r\nimport { GridWrap } from 'Shared/PageLayout';\r\nimport StoreAvailabilityModal from 'Product/StoreAvailabilityModal';\r\nimport SizeGuideModal from 'Product/SizeGuideModal';\r\nimport { BreadcrumbWrapper } from 'Shared/Page/PageContent';\r\nimport { createGridClasses, createOffsetGridClassLarge } from 'Shared/grid';\r\nimport { DesktopImageGallery } from 'Product/ImageGallery/DesktopImageGallery';\r\nimport { MobileImageGallery } from 'Product/ImageGallery/MobileImageGallery';\r\nimport * as style from 'Shared/Style';\r\n\r\nconst FlexElement = styled.div({\r\n display: 'flex',\r\n});\r\n\r\nconst MainInfo = styled.div({\r\n width: '100%',\r\n ['@media ' + style.mediaUpToLarge]: {\r\n padding: {\r\n top: '24px',\r\n x: '12px',\r\n bottom: '12px',\r\n },\r\n },\r\n ['@media ' + style.mediaMinLarge]: {\r\n padding: {\r\n top: '0',\r\n },\r\n },\r\n});\r\n\r\nconst SizeSelector = styled.div({\r\n marginTop: '48px',\r\n ['@media ' + style.mediaMinLarge]: {\r\n marginTop: '32px',\r\n },\r\n});\r\n\r\nconst SizeSelectorText = styled(Text, {\r\n marginRight: '8px',\r\n marginBottom: '16px',\r\n});\r\n\r\nconst SizeGuideText = styled(Text, {\r\n cursor: 'pointer',\r\n color: style.colors.monochrome.a11ygrey,\r\n ':hover': {\r\n color: style.colors.monochrome.black,\r\n },\r\n marginBottom: '16px',\r\n});\r\n\r\nconst AddToCart = styled.div({\r\n marginTop: '48px',\r\n ['@media ' + style.mediaMinLarge]: {\r\n marginTop: '32px',\r\n },\r\n});\r\n\r\nconst BackInventoryWrap = styled.div({\r\n marginTop: '16px',\r\n backgroundColor: style.colors.brandColors.yellow,\r\n});\r\n\r\nconst BackInventoryText = styled(Paragraph, {\r\n color: style.colors.monochrome.black,\r\n padding: { xy: '16px' },\r\n});\r\n\r\nconst AddToCartButton = styled(FeedbackButton, {\r\n width: '100%',\r\n marginTop: '12px',\r\n marginBottom: '12px',\r\n});\r\n\r\nconst AddToCartIcon = styled(Plus12x12, {\r\n marginLeft: '8px',\r\n});\r\n\r\nconst UspItem = styled.span({\r\n display: 'inline-flex',\r\n marginRight: '18px',\r\n});\r\n\r\nconst UspItemCheck = styled(Check12x12, {\r\n marginRight: '6px',\r\n});\r\n\r\nconst ProductMarkingsWrap = styled.div({\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n});\r\n\r\nconst ProductMarkingSplitter = styled.span({\r\n marginLeft: '3px',\r\n marginRight: '3px',\r\n});\r\n\r\nconst BreadcrumbWrap = styled(BreadcrumbWrapper, {\r\n ['@media ' + style.mediaUpToLarge]: {\r\n padding: { bottom: '40px' },\r\n },\r\n});\r\n\r\nconst TopContent = styled.div({\r\n ['@media ' + style.mediaUpToLarge]: {\r\n marginLeft: '-12px',\r\n marginRight: '-12px',\r\n borderTop: {\r\n style: 'solid',\r\n width: '2px',\r\n color: style.colors.monochrome.black,\r\n },\r\n },\r\n});\r\n\r\nconst ProductDataWrap = styled.div({\r\n ['@media ' + style.mediaMinLarge]: {\r\n overflowY: 'auto',\r\n maxHeight: 'initial',\r\n '::-webkit-scrollbar': {\r\n width: '0px',\r\n },\r\n marginTop: '48px',\r\n },\r\n});\r\n\r\nconst MarkingsAndReviews = styled.div({\r\n marginBottom: '16px',\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '16px',\r\n ['@media ' + style.mediaMinLarge]: {\r\n marginBottom: '12px',\r\n gap: '6px',\r\n },\r\n});\r\n\r\nconst MainHeading = styled(H1, {\r\n marginBottom: '16px',\r\n});\r\n\r\nconst VariationLink = styled(Link, {\r\n marginRight: '8px',\r\n display: 'inline-block',\r\n width: '48px',\r\n height: '64px',\r\n ['@media ' + style.mediaMinLarge]: {\r\n width: '42px',\r\n height: '56px',\r\n },\r\n});\r\n\r\nconst VariationLinkImage = styled.img({\r\n borderRadius: '8px',\r\n objectPosition: 'center',\r\n objectFit: 'cover',\r\n});\r\n\r\nconst ExtendedDataGridWrap = styled(GridWrap, {\r\n paddingBottom: '80px',\r\n ['@media ' + style.mediaMinLarge]: {\r\n padding: { y: '120px' },\r\n },\r\n});\r\n\r\nconst FeatureBlocksGridWrap = styled(GridWrap, {\r\n height: 'auto',\r\n paddingBottom: '80px',\r\n ['@media ' + style.mediaUpToLarge]: {\r\n overflow: 'hidden',\r\n },\r\n ['@media ' + style.mediaMinLarge]: {\r\n paddingBottom: '120px',\r\n },\r\n});\r\n\r\nconst AccordionGridWrap = styled(GridWrap, {\r\n height: 'auto',\r\n});\r\n\r\nconst RecommendationsGridWrap = styled(GridWrap, {\r\n height: 'auto',\r\n padding: { y: '80px' },\r\n ['@media ' + style.mediaUpToLarge]: {\r\n overflow: 'hidden',\r\n },\r\n ['@media ' + style.mediaMinLarge]: {\r\n padding: { y: '120px' },\r\n },\r\n});\r\n\r\nconst ItemInventory = styled(FlexElement, {\r\n gap: '18px',\r\n});\r\n\r\nconst WebInventoryInfoWrap = styled.span({\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n});\r\n\r\nconst SelectedStoreInfoWrap = styled.span({\r\n display: 'inline-flex',\r\n gap: '4px',\r\n alignItems: 'center',\r\n});\r\n\r\nconst SelectedStoreInfoCity = styled(Text, {\r\n color: style.colors.monochrome.a11ygrey,\r\n});\r\n\r\nconst StoreInfoWrap = styled.span({\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n cursor: 'pointer',\r\n});\r\n\r\nconst StoreInfoText = styled(Text, {\r\n textDecoration: 'underline',\r\n});\r\n\r\nconst ChangeStore = styled.span({\r\n alignItems: 'center',\r\n cursor: 'pointer',\r\n textDecoration: 'underline',\r\n});\r\n\r\nconst ShopIcon = styled(Store12x12, {\r\n width: '12px',\r\n marginRight: '4px',\r\n});\r\n\r\nconst StoreIcon = styled(ShopIcon, {\r\n color: style.colors.monochrome.black,\r\n});\r\n\r\nconst Variation = connect(\r\n (state) => ({\r\n wishlist: state.wishlist,\r\n currentBreakpoint: state.currentBreakpoint,\r\n culture: state.appShellData.culture,\r\n currency: state.appShellData.market.currency,\r\n usps: state.appShellData.usps,\r\n selectedStore: state.UI?.selectedStore,\r\n wishlistPageLocation: state.appShellData.pages?.wishlist?.url,\r\n loggedIn: state.currentUser?.isLoggedIn ?? false,\r\n }),\r\n (dispatch) => ({\r\n toggleWishlistItem(isFavorited: boolean, code: string, colorProductCode: string, currentCategory: string) {\r\n return dispatch(toggleWishlistData(isFavorited, code, colorProductCode, currentCategory));\r\n },\r\n addToCart(code: string, quantity: number, ticket: string, currentCategory: string, colorProductCode: string) {\r\n return dispatch(\r\n addToCart(code, quantity, ticket, 'Produktlista', currentCategory, colorProductCode, false, true),\r\n );\r\n },\r\n openAccountBox() {\r\n dispatch(openAccountBox());\r\n },\r\n }),\r\n)(\r\n (\r\n props: VariationViewModel & {\r\n addToCart: (\r\n code: string,\r\n quantity: number,\r\n ticket: string,\r\n currentCategory: string,\r\n colorProductCode: string,\r\n ) => Promise;\r\n toggleWishlistItem: (\r\n isFavorited: boolean,\r\n code: string,\r\n colorProductCode: string,\r\n currentCategory: string,\r\n ) => Promise;\r\n openAccountBox: () => void;\r\n currentBreakpoint: number;\r\n currency: string;\r\n culture: string;\r\n usps: Usp[];\r\n selectedStore: StoreModel;\r\n wishlist: MiniWishListViewModel;\r\n\r\n wishlistPageLocation: string;\r\n loggedIn: boolean;\r\n },\r\n ) => {\r\n const {\r\n wishlist,\r\n currentBreakpoint,\r\n addToCart,\r\n openAccountBox,\r\n toggleWishlistItem,\r\n usps,\r\n labels,\r\n name,\r\n sizes,\r\n deliveryUsps,\r\n variations,\r\n productTitle,\r\n productActivities,\r\n preSelectedSizeCode,\r\n previousPurchases,\r\n selectedStoreStatus,\r\n selectedStore,\r\n loggedIn,\r\n sizeBackupStoreAvailabilities,\r\n barcodes\r\n } = props;\r\n\r\n useEffect(() => {\r\n window?.document && scrollPosition(0);\r\n }, []);\r\n\r\n const scrollToDetailsRef = useRef();\r\n const scrollToReviewsRef = useRef();\r\n const breadcrumbs = props.breadcrumbs;\r\n const [isFavorited, setFavourite] = useState(wishlist.items.some((item) => item === props.code));\r\n\r\n const toggleWishlist = async (isFavorited: boolean) => {\r\n const b = await toggleWishlistItem(isFavorited, props.preSelectedSizeCode, props.code, props.categoryName);\r\n if (b?.statusCode === 200) {\r\n setFavourite(!isFavorited);\r\n }\r\n };\r\n\r\n const toggleFavorited = (e: any): any => {\r\n if (loggedIn) {\r\n toggleWishlist(isFavorited);\r\n } else {\r\n return openAccountBox();\r\n }\r\n };\r\n\r\n const scrollToDetails = () => {\r\n if (scrollToDetailsRef) {\r\n scrollTo(scrollToDetailsRef.current.offsetTop - 50, 500);\r\n }\r\n };\r\n\r\n const scrollToReviews = () => {\r\n if (contextDisplayData.numOfReviews > 0) {\r\n setExpandedAccordion('reviews');\r\n if (scrollToReviewsRef) {\r\n scrollTo(scrollToReviewsRef.current.offsetTop - 100, 500);\r\n }\r\n }\r\n };\r\n\r\n const isMobile = functionIsCompact(currentBreakpoint);\r\n const [selectedSize, setSelectedSize] = useState(\r\n sizes.find((s) => s.code === preSelectedSizeCode) ?? sizes.find((s) => s.inStock),\r\n );\r\n\r\n const [sizeGuideModalIsShown, setSizeGuideModalIsShown] = useState(false);\r\n const [storeAvailabilityModalIsShown, setStoreAvailabilityModalIsShown] = useState(false);\r\n const [expandedAccordion, setExpandedAccordion] = useState();\r\n\r\n const { code, ticket, price, centralStockAvailability, inStock, color } = selectedSize;\r\n const contextDisplayData = props.productContextDisplayData.find(\r\n (x) => x.code === (props.compositeItem ? selectedSize.colorProductCode : props.code),\r\n );\r\n\r\n useEffect(() => {\r\n if (document.head) {\r\n let schema = document.getElementById('pdp-schema') as HTMLScriptElement;\r\n if (!schema) {\r\n schema = document.createElement('script');\r\n schema.type = 'application/ld+json';\r\n schema.id = 'pdp-schema';\r\n document.head.appendChild(schema);\r\n }\r\n\r\n const aggregateRating =\r\n contextDisplayData.rating > 0\r\n ? {\r\n '@type': 'AggregateRating',\r\n ratingValue: contextDisplayData.rating,\r\n reviewCount: contextDisplayData.numOfReviews,\r\n }\r\n : undefined;\r\n\r\n const schemaContent = {\r\n '@context': 'https://schema.org/',\r\n '@type': 'product',\r\n name: name,\r\n description: contextDisplayData.description?.intro,\r\n color: selectedSize.color,\r\n sku: selectedSize.code,\r\n gtin: selectedSize.barCode,\r\n mpn: selectedSize.itemNumber,\r\n image:\r\n window.location.protocol +\r\n '//' +\r\n window.location.host +\r\n contextDisplayData.resources?.find((x) => x.type === 'IMAGE')?.imageUrl,\r\n brand: {\r\n '@type': 'Brand',\r\n name: 'Polarn O. Pyret',\r\n },\r\n offers: {\r\n '@type': 'Offer',\r\n priceCurrency: props.currency,\r\n price: selectedSize.price.sellingPrice?.toString(),\r\n itemCondition: 'https://schema.org/NewCondition',\r\n availability: selectedSize.inStock ? 'https://schema.org/InStock' : 'https://schema.org/OutOfStock',\r\n url: props.url,\r\n },\r\n aggregateRating,\r\n };\r\n\r\n schema.innerHTML = JSON.stringify(schemaContent);\r\n }\r\n }, [selectedSize]);\r\n\r\n const sentFromBackupStore = sizeBackupStoreAvailabilities\r\n ? sizeBackupStoreAvailabilities[selectedSize.code]\r\n : false;\r\n\r\n const availableOnline = centralStockAvailability > 0;\r\n const hasUsps = (usps?.length ?? 0) > 0;\r\n const headerOffset = hasUsps ? 140 : 108;\r\n const gotSizeInformation = !!props.sizeInformation;\r\n const itemCount = contextDisplayData.markings?.length ?? 0;\r\n const productMarkings = itemCount > 0 && (\r\n \r\n {contextDisplayData.markings.map((marking, index) => (\r\n <>\r\n \r\n {marking}\r\n \r\n {itemCount > 1 && index + 1 < itemCount ? / : ''}\r\n \r\n ))}\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n {isMobile && (\r\n \r\n )}\r\n \r\n \r\n \r\n {contextDisplayData.markings && productMarkings}\r\n 0 ? scrollToReviews : null}\r\n rating={contextDisplayData.rating}\r\n numberOfReviews={contextDisplayData.numOfReviews}\r\n labels={{ reviews: labels.reviews }}\r\n />\r\n \r\n {name}\r\n \r\n\r\n {contextDisplayData.featureHighlightTags.length !== 0 && (\r\n \r\n )}\r\n\r\n \r\n {labels.color}: {color}\r\n \r\n\r\n {variations.length !== 0 && (\r\n
\r\n {variations.map((variation, index) => (\r\n \r\n \r\n \r\n ))}\r\n
\r\n )}\r\n \r\n \r\n {labels.selectSize}\r\n \r\n {gotSizeInformation && (\r\n setSizeGuideModalIsShown(true)}\r\n >\r\n {labels.sizeGuide}\r\n \r\n )}\r\n {\r\n if ('inStock' in size) setSelectedSize(size);\r\n }}\r\n placeholder={labels.selectSize}\r\n />\r\n \r\n\r\n {gotSizeInformation && (\r\n setSizeGuideModalIsShown(false)}\r\n sizeInformation={props.sizeInformation}\r\n />\r\n )}\r\n\r\n \r\n {deliveryUsps?.map((e, i) => (\r\n \r\n \r\n \r\n {e}\r\n \r\n \r\n ))}\r\n \r\n !inStock || props.comingSoon ? null : addToCart(code, 1, ticket, props.categoryName, props.code)\r\n }\r\n theme={ButtonTheme.BlackToWhite}\r\n disabled={!inStock || props.comingSoon}\r\n iconAfter={}\r\n successText={props.labels.addedToCart}\r\n failedText={props.labels.addToCartFailed}\r\n height={ButtonHeight.Huge}\r\n >\r\n {props.comingSoon ? translate('/site/product/comingsoon') : labels.addToCart}\r\n \r\n \r\n \r\n \r\n {labels.inventoryOnline}\r\n \r\n {props.showStoreInventoryStatus &&\r\n (selectedStore ? (\r\n \r\n {selectedStoreStatus && (\r\n \r\n )}\r\n {selectedStore.name}\r\n {selectedStore.city}\r\n setStoreAvailabilityModalIsShown(true)}>\r\n \r\n {labels.changeStore}\r\n \r\n \r\n \r\n ) : (\r\n setStoreAvailabilityModalIsShown(true)}>\r\n \r\n {labels.inventoryInStore}\r\n \r\n ))}\r\n \r\n \r\n {sentFromBackupStore && props.backupInventoryText && (\r\n \r\n {props.backupInventoryText}\r\n \r\n )}\r\n\r\n setStoreAvailabilityModalIsShown(false)}\r\n labels={props.storeAvailabilityLabels}\r\n />\r\n\r\n {previousPurchases?.length > 0 && (\r\n \r\n )}\r\n
\r\n
\r\n {!isMobile && (\r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n \r\n \r\n \r\n\r\n {contextDisplayData.featureBlocks && contextDisplayData.featureBlocks.productFeatures?.length > 0 && (\r\n \r\n \r\n \r\n )}\r\n \r\n setExpandedAccordion('')}\r\n />\r\n \r\n {props.recommendations && props.recommendations.length > 0 && (\r\n \r\n
\r\n \r\n
\r\n
\r\n )}\r\n
\r\n );\r\n },\r\n);\r\n\r\nexport default Variation;\r\n"],"sourceRoot":""}