{"version":3,"sources":["logo.svg","components/NavMenu.js","errors/ExtendableError.js","errors/ParameterError.js","errors/ParameterErrors.js","errors/ParseError.js","core/RemoteFileHelper.js","core/UrlHelper.js","core/GroupedCallbacks.js","enums/NFilteredSitePlansToShow.js","configuration/PlotStatusConfiguration.js","errors/NotImplementedError.js","errors/ValueError.js","site/PlotStatus.js","configuration/PlotStatusConfigurations.js","configuration/CurrencyConfiguration.js","configuration/Configuration.js","configuration/Configurations.js","validation/Validation.js","geometry/Vector2.js","geometry/Vector3.js","modelling/Location.js","RunningMode.js","urls/Urls.js","core/eventEnable.js","mvvm/Binding.js","mvvm/Bindings.js","mvvm/ModelBindingsForName.js","mvvm/BindingsHandler.js","mvvm/enableAcceptBindings.js","core/capitalizeFirstLetter.js","mvvm/PropertyHelper.js","mvvm/exposeBinding.js","site/HouseType.js","site/HouseTypes.js","site/RoomType.js","core/Handle.js","core/Handles.js","site/SiteJsonUnitBirdsEyeView.js","site/SiteJsonUnitBirdsEyeViews.js","images/FitType.js","images/DynamicImageFitCriteria.js","images/DynamicImageEntry.js","images/DynamicImage.js","site/SiteJsonUnitPlotRoom.js","site/SiteJsonUnitPlotRooms.js","core/numberWithCommas.js","core/HashSource.js","mvvm/MyBindings.js","mvvm/enableBindingToOthers.js","mvvm/PropertyBinding.js","mvvm/PropertyBindingCarriedOver.js","mvvm/PropertyBindingShell.js","mvvm/PropertyBindingFactory.js","core/enableHash.js","site/SiteJsonUnitPlot.js","geometry/EulerAngles.js","site/SiteJsonFileUnitNearestOutside360Move.js","site/SiteJsonUnit.js","site/SiteJsonUnits.js","enums/CubeFace.js","360_react/ExportedCubeJsonFace.js","360_react/ExportedCubeJson.js","core/Iterator.js","core/getParentClass.js","validation/ParameterValidation.js","360_react/Scene360Hotspot.js","360_react/Scene360LayerChoice.js","360_react/Scene360Layer.js","360_react/Scene360.js","enums/HotspotType.js","site/HotspotOutside360Move.js","site/HotspotOutside360Configurator.js","site/HotspotOutside360Info.js","site/SiteJsonOutside360Scene.js","site/SiteJsonOutside360.js","filters/AvailablePricesSettings.js","filters/FiltersSettings.js","pixel_mapping/PixelMappings.js","site/SiteJsonUnitBirdsEyeViewOutside360MarkerPosition.js","site/SiteJsonBirdsEyeViewsBirdsEyeView.js","site/SiteJsonBirdsEyeViews.js","modelling/ObjectIdNodeIdsMappings.js","modelling/Model.js","modelling/Models.js","core/WhenFinishedModifying.js","site/SiteJson.js","site/Configurator.js","features/FeatureForPlot.js","features/FeatureForHouseType.js","features/Feature.js","site/LatestSiteInfo.js","modelling/quadrants/v2/Quadrant.js","modelling/quadrants/v2/QuadrantLevel.js","modelling/quadrants/v2/QuadrantsForCameraAngle.js","modelling/quadrants/v2/QuadrantsV2.js","modelling/quadrants/v1/QuadrantsV1.js","assets_management/AssetsManager.js","core/isMobile.js","enums/PlotMoreInformationType.js","ui_core/getAbsolute.js","geometry/Rect.js","components/UnitMarker.js","ui_core/Alignment.js","components/Tooltip.js","components/IconButton.js","components/DialogButton.js","components/Dialog.js","core/EventNormalizer.js","core/Once.js","ui_core/EfficientMoveCycle.js","ui_core/TwoFingerTouch.js","core/FrequencyLimitedCallback.js","ui_core/FullScreen.js","components/Spinner.js","ui_core/getStyle.js","ui_core/isDisplaying.js","components/ZoomableDragable.js","components/DirectionalButtons.js","core/Timer.js","core/TemporalCallback.js","ui_core/ResizeWatcher.js","components/BirdsEyeView.js","enums/MenuType.js","components/UnitMarkerKey.js","ui_core/ClickedOffHandle.js","ui_core/ClickedOff.js","ui_core/ClickedOffManager.js","components/SubMenuHeader.js","components/FiltersButtons.js","components/Filters.js","ui_core/ReactTypeChecking.js","ui_core/stopEventPropagation.js","components/Checkbox.js","components/CheckboxFilterOption.js","components/CheckboxFilter.js","choices/Option.js","components/AvailablePricesFilter.js","favourites/Favourite.js","components/StatusFilter.js","components/BedroomsFilter.js","components/FeaturesFilter.js","components/slider_components/SliderHandle.js","components/Slider.js","components/Star.js","ui_core/InsertedMenuItemsRegistrationHandle.js","ui_core/InsertedMenuItemsHandler.js","components/ZoomButtons.js","enums/DragDropType.js","interfaces/IDragDropRecipient.js","components/DragDropStreetViewButton.js","enums/WindowType.js","window/WindowEventNames.js","ui_core/styleFromObject.js","window/Windows.js","components/IconButtonNonReact.js","components/MenuBarWindowEntries.js","components/MenuBar.js","components/MainMenu.js","views/ProgressBar.js","components/VideoPlayer.js","components/MenuManager.js","components/HouseTypeFilter.js","errors/TypeError.js","filters/PlotFilterer.js","components/KeyboardButton.js","components/NumericalKeyboard.js","components/PlotSearch.js","components/MouseBlocker.js","components/SitePicker.js","ui_core/getViewportDimensions.js","ui_core/EdgeLocation.js","components/PopupMenu.js","components/tabs/TabPanel_Panel.js","components/tabs/TabPanel_Tab.js","components/TabPanel.js","ui_core/TabInfo.js","components/ImageCarousel.js","components/JumpableZoomableDragable.js","components/PlotMoreInformationFloorPlans.js","components/PlotMoreInformationGallery.js","components/PlotMoreInformationOverview.js","components/PlotMoreInformation.js","validation/PhoneNumberValidation.js","validation/EmailValidation.js","enums/BrochureProgressStatus.js","brochures/BrochureBeingGenerated.js","google/GoogleAnalytics.js","storage/LocalStorageHelper.js","sessions/SessionManager.js","brochures/BrochuresManager.js","components/BrochureGeneration.js","components/ImageViewer.js","components/FavouriteEntry.js","ui_core/Drag.js","ui_core/setText.js","ui_core/Resizer.js","ui_core/SelectHelper.js","core/Settings.js","window/GenericWindow.js","components/SubMenuHeaderNonReact.js","plot_detailed_information/PlotDetailedInformationSectionType.js","plot_detailed_information/PlotDetailedInformationSummary.js","ui_core/ResizeWatchers.js","images/DynamicImageDisplayer.js","plot_detailed_information/PlotDetailedInformationGallery.js","plot_detailed_information/PlotDetailedInformationDescription.js","plot_detailed_information/PlotDetailedInformationFloorPlans.js","plot_detailed_information/PlotDetailedInformationVideo.js","plot_detailed_information/PlotDetailedInformationTour.js","plot_detailed_information/PlotDetailedInformation.js","plot_detailed_information/PlotDetailedInformationsManager.js","plot_detailed_information/PlotComparisonScrollManager.js","plot_detailed_information/PlotComparisonManager.js","components/Favourites.js","html/StylesHelper.js","components/PrivacyPolicy.js","view_models/ViewModelBase.js","modelling/ModelRefs.js","view_models/UnitViewModel.js","progress/CompositeProgressSource.js","view_models/SitePlan3DViewModel.js","views/3d/BabylonViewBase.js","modelling/BabylonCameraPan.js","modelling/BabylonCameraZoom.js","progress/StandardProgressSource.js","views/3d/SiteView.js","views/3d/SitePlan3DView.js","modelling/ModelFile.js","modelling/Mesh.js","modelling/BabylonModel.js","modelling/BabylonModelsManagerCache.js","modelling/BabylonMeshesCombiner.js","modelling/BabylonModelsManager.js","modelling/BabylonScene.js","components/SitePlan3D.js","360_react/Hotspot.js","360_react/View360.js","components/MiniMap.js","hotspots/InfoHotspot.js","components/Hider.js","components/SitePlan360.js","components/Configurator.js","enums/SitePlanVisibleType.js","components/PlotMenu.js","enums/BrochureType.js","brochures/BrochuresMenuEntry.js","brochures/BrochuresMenu.js","components/PlotsSelectionMenuEntry.js","components/PlotsSelectionMenu.js","house_types_viewer/HouseTypesViewerEntryStatusesEntry.js","house_types_viewer/HouseTypesViewerEntryStatuses.js","house_types_viewer/HouseTypesViewerEntryPriceRange.js","house_types_viewer/HouseTypesViewerEntry.js","house_types_viewer/HouseTypesViewer.js","view_models/HouseTypeViewModel.js","view_models/HouseTypesViewModel.js","components/FullScreenImagesViewer.js","geometry/DistanceHelper.js","components/NearbySite.js","components/NearbySites.js","components/SitePlan.js","components/SitePlanWrapper.js","site/SiteJsons.js","components/DropdownSelectorMenu.js","what_are_you_looking_for/WhatAreYouLookingForFirstOptions.js","what_are_you_looking_for/WhatAreYouLookingForToggleButton.js","what_are_you_looking_for/WhatAreYouLookingForNBeds.js","what_are_you_looking_for/WhatAreYouLookingForFeatures.js","what_are_you_looking_for/WhatAreYouLookingForPrice.js","what_are_you_looking_for/WhatAreYouLookingForHouseType.js","view_models/WhatAreYouLookingForViewModel.js","what_are_you_looking_for/WhatAreYouLookingForContentType.js","what_are_you_looking_for/WhatAreYouLookingFor.js","components/SitePlans.js","components/Footer.js","App.js","serviceWorker.js","index.js"],"names":["Component","ExtendableError","message","innerError","console","error","name","constructor","Error","captureStackTrace","stack","ParameterError","ParameterErrors","type","ParseError","Promise","longStackTraces","config","warnings","RemoteFileHelper","url","undefined","resolve","reject","fetch","method","credentials","headers","then","response","text","content","JSON","parse","catch","err","data","BSON","deserialize","log","UrlHelper","relativeUrl","window","location","origin","lastIndexForwardSlash","lastIndexOf","substring","length","hasStartSlash","hasEndSlash","firstCharacterIsSlash","lastCharacterIsSlash","throwNotProvided","throwNotOfType","GroupedCallbacks","this","_callbacksThen","_callbacksCatch","bind","doThen","doCatch","callbackThen","push","callbackCatch","callbacksThen","splice","apply","arguments","callbacksCatch","NFilteredSitePlansToShow","All","One","Two","PlotStatusConfiguration","props","unitMarkerColor","configuratorIconFileName","plotStatus","_plotStatus","_unitMarkerColor","_configuratorIconFileName","jObject","NotImplementedError","ValueError","PlotStatus","AVAILABLE","COMING_SOON","FUTURE_RELEASE","SOLD_OR_UNAVAILABLE","RESERVED","Object","values","filter","value","configuration","plotStatusConfiguration","plotStatusConfigurations","getFromPlotStatus","parseFromString","parseFromInt","toLowerCase","indexOf","PlotStatusConfigurations","list","_list","toCssHtmlString","i","strs","cssNamePrefix","getCssName","UNIT_MARKER_COLOR_SUFFIX","join","key","fromEnumAndJObject","CurrencyConfiguration","currencyPrefix","currencySuffix","_currencyPrefix","_currencySuffix","Configuration","goStraightToFiltersMenu","showShowForSaleButton","hidePlotMoreInformationTabs","plotMoreInformationHasOverview","fullScreenGalleryAndFloorPlans","useCurrentPositionIcon","sentryDSN","brochureGeneratorUrl","delayShowPlotMarkersSeconds","plotMarkerKeyAtTop","googleAnalyticsTrackingCode","siteName","siteSlug","siteSlugForLatestSiteInfo","configuratorRootUrl","assetsFolderName","siteInfoUrl","defaultOutside360PlotNumber","defaultAerialIndex","threeDEnabled","windowStyleMenus","showNBathrooms","showPlotDetailedInformationOnDesktopClickInsteadOfHover","brochuresMenuEnabled","plotComparisonEnabled","onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo","showHouseTypesViewerOnOpen","siteVideoEnabled","showFadedFilteredOutPlots","twoDSitePlanEnabled","miniMapConeMarkerEnabled","showPanelOnClickOutside360ConfiguratorIcon","whatAreYouLookingForEnabled","featuresEnabled","nFilteredSitePlansToShow","suggestedSitesEnabled","houseTypesViewerEnabled","hideNBedrooms","rotateOutside360Cameras180Degrees","showPlotDetailedInformationOnClickPlotMenu","plotSelectionMenuEnabled","_hideNBedrooms","_plotStatusConfigurations","_goStraightToFiltersMenu","_showShowForSaleButton","_hidePlotMoreInformationTabs","_plotMoreInformationHasOverview","_fullScreenGalleryAndFloorPlans","_useCurrentPositionIcon","_sentryDSN","_brochureGeneratorUrl","_delayShowPlotMarkersSeconds","_plotMarkerKeyAtTop","_googleAnalyticsTrackingCode","_siteSlug","_siteSlugForLatestSiteInfo","_configuratorRootUrl","_siteInfoUrl","_defaultOutside360PlotNumber","_defaultAerialIndex","_threeDEnabled","_windowStyleMenus","_siteName","_showNBathrooms","_showPlotDetailedInformationOnDesktopClickInsteadOfHover","_brochuresMenuEnabled","_plotComparisonEnabled","_onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo","_showHouseTypesViewerOnOpen","_siteVideoEnabled","_showFadedFilteredOutPlots","_twoDSitePlanEnabled","_miniMapConeMarkerEnabled","_showPanelOnClickOutside360ConfiguratorIcon","_whatAreYouLookingForEnabled","_featuresEnabled","_houseTypesViewerEnabled","_nFilteredSitePlansToShow","_suggestedSitesEnabled","_rotateOutside360Cameras180Degrees","_showPlotDetailedInformationOnClickPlotMenu","_plotSelectionMenuEnabled","href","split","_currencyConfiguration","_scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages","fromJSON","plotStatuses","scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages","Configurations","entries","_entries","jArray","defaultConfiguration","concat","map","jObjectConfiguration","Validation","isNumber","str","match","regExpStringIsValidInt","regExpStringIsValidFloat","number","parseFloat","isNaN","throwIsNotNumber","Vector2","x","y","_x","_y","toArray","arr","obj","Vector3","z","_z","Location","position","rotation","scaling","_position","_rotation","_scaling","toJSON","fromArray","RunningMode","process","Urls","isDevelopment","root","AssetsManager","makeSureSlashOnEnd","getSiteInfo","relativePath","getBrochureGenerator","assets","iconRelativePath","getIcons","plot","houseType","configuratorUrl","tourUrl","getAssetsForSite","thisPagePort","port","backendPortString","backendPort","protocol","hostname","eventEnable","addEventListener","listener","_listeners","listeners","hasEventListener","removeEventListener","listenerArray","index","dispatchEvent","event","target","array","call","Binding","callbackSet","dispose","_callbackSet","_dispose","_disposed","getCallbackSet","callCallbackSet","_dispatchDispose","binding","Bindings","self","disposed","slice","forEach","bindings","callbackDispose","e","removeBinding","add","listenForDispose","getList","remove","ModelBindingsForName","getByCallbackSet","listBindings","containsCallbackSet","changed","BindingsHandler","model","mapNameToModelBindings","callbackDisposeModelBindings","getName","viewBindings","view","getViewBindings","modelBindings","unbind","enableAcceptBindings","bindingsHandler","capitalizeFirstLetter","substr","toUpperCase","PropertyHelper","propertyName","_getGetterName","_getSetterName","propertyNames","getterName","setterName","capitalizedName","exposeBinding","getLambda","setLambda","getGetterName","getSetterName","HouseType","slug","imageRelativePath","getSiteJson","nBedrooms","nBathrooms","about","_nBedrooms","_nBathrooms","_about","_getSiteJson","_configuration","_slug","_name","_imageRelativePath","_allPossibleLowerCaseStrings","_getAllPossibleLowerCaseStrings","_configuratorUrl","_tourUrl","_videoUrl","_features","_statuses","statuses","videoUrl","features","removeStartSlash","getPlotsForHouseType","allowedNameSeperators","_ALLOWED_NAME_SEPERATORS","nameComponents","RegExp","seperator","nameComponent","HouseTypes","getBySlug","Array","isArray","valueNormalised","allPossibleLowerCaseStrings","jArrayHouseTypes","houseTypes","jObjectHouseType","RoomType","KITCHEN","BEDROOM","BATHROOM","EN_SUITE","roomType","Handle","_callbackDispose","Handles","_handles","_currentlyHasHandles","take","_dispatchChangedIfChanged","_dispatchChanged","handle","setTimeout","handles","hasHandles","SiteJsonUnitBirdsEyeView","markerPosition","_index","_markerPosition","fromObj","SiteJsonUnitBirdsEyeViews","getMarkerPositionForBirdsEyeViewWithIndex","birdsEyeViewsWithIndex","birdsEyeView","FitType","WIDTH","HEIGHT","DynamicImageFitCriteria","fitType","_fitType","DynamicImageEntry","width","height","_width","_height","_relativePath","DynamicImage","_entriesIncreasing","sort","a","b","getBestEntryToFit","getBestEntryToFitWidth","getBestEntryToFitHeight","params","fitCriteria","fitWidth","entry","SiteJsonUnitPlotRoom","images","getParentPlot","_roomType","_getParentPlot","_images","image","SiteJsonUnitPlotRooms","room","jArraySites","rooms","jObjectSite","numberWithCommas","toString","replace","HashSource","next","String","_count","MyBindings","me","_propertyBindings","Set","reset","propertyBinding","has","delete","enableBindingToOthers","myBindings","PropertyBinding","valueChanged","_me","_model","_valueChanged","set","get","_setterName","_getterName","setter","getter","PropertyBindingCarriedOver","propertyBindingSource","propertyBindingCarriedOver","getSource","getCarriedOver","PropertyBindingShell","getterMethod","setterMethod","_getMethod","_setMethod","PropertyBindingFactory","meOrParams","nameParam","viewModelName","converter","onChange","onSetByView","names","_carryOver","propertyBindings","c","createViewModel","onViewModelSet","viewModel","currentModel","_change","oldValue","change","oldViewModel","createView","onViewSet","currentViewModel","oldView","disposeCurrentView","createConvertedItem","removedItem","changedCallback","postpone","_arrayConversion","item","hash","enableHash","getHashFromItem","mapHashToConvertedItem","currentConvertedItems","standard","items","hashesSeen","convertedItem","viewModelsName","callbackChanged","arrayConversion","capitalizedNameViewModel","setterNameViewModel","getterNameViewModel","s","main","convertedValue","from","to","SiteJsonUnitPlot","getUnit","affordable","frontViewImage","price","status","selected","floorPlanImages","currencyConfiguration","_getUnit","_hash","_number","_rooms","_affordable","_frontViewImage","_price","_status","_houseType","_floorPlanImages","_selected","_houseTypeFeaturesChanged","plotFeatures","_propertyBindingHouseTypeFeatures","frontViewImageRelativePath","_frontViewImageRelativePath","getArray","_plotFeatures","floorPlanImage","EulerAngles","yawRadians","pitchRadians","rollRadians","_yawRadians","_pitchRadians","_rollRadians","SiteJsonFileUnitNearestOutside360Move","outside360UniqueId","cameraAngleToFaceFrontDoor","_outside360UniqueId","_cameraAngleToFaceFrontDoor","SiteJsonUnit","id","birdsEyeViews","useFrontViewInsteadOfStreetView","threeDNodes","nearestOutside360Move","plots","streetViewImage","_id","_birdsEyeViews","_nearestOutside360Move","_threeDNodes","_plots","plotA","plotB","_plotSelectedChanged","_streetViewImage","_useFrontViewInsteadOfStreetView","_dispatchActiveChanged","_handleActiveHandlesChange","_activeHandles","getBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex","active","taken","unit","SiteJsonUnits","getPlotsArray","getByUnitId","getPlotByNumber","getSelectedPlotsAsArray","units","CubeFace","BACK","FRONT","RIGHT","LEFT","UP","DOWN","throwCouldNotParse","fromString","fromNumber","ExportedCubeJsonFace","cubeFace","cubeFaceChar","tiledImageFolderRelativePath","_cubeFace","_cubeFaceChar","_tiledImageFolderRelativePath","ExportedCubeJson","directoryRelativePath","faces","levels","size","_directoryRelativePath","_face","_levels","_faces","exportedCubeFaces","face","Iterator","_array","_length","getParentClass","targetClass","Function","parentClass","getPrototypeOf","ParameterValidation","parameterName","expectedType","allowInheritance","_checkBaseTypes","currentParentClass","Scene360Hotspot","eulerAngles","pointingAtEulerAngles","_type","_iconRelativePath","_eulerAngles","_pointingAtEulerAngles","_rotateToCompensate","Scene360LayerChoice","Scene360Layer","choices","validateArray","_choices","Scene360","layers","hotspots","urlPrefix","uniqueId","cameraEulerAngles","getLevels","_urlPrefix","_layers","_hotspots","_uniqueId","_cameraEulerAngles","HotspotType","OUTSIDE_360_MOVE","OUTSIDE_360_CONFIGURATOR","INFO","HotspotOutside360Move","outside360ToMoveToUniqueId","_outside360ToMoveToUniqueId","HotspotOutside360Configurator","plotNumber","_plotNumber","_getPlotByNumber","getConfiguratorIconRelativePath","getConfiguratorUrlForPlot","HotspotOutside360Info","className","_text","_className","SiteJsonOutside360Scene","exportedCubeJson","configuratorHotspots","_exportedCubeJson","_configuratorHotspots","jObjectOutside360Scene","exportedCube","_hotspotsFromJSON","jArrayHotspots","jObjectHotspot","hotspot","SiteJsonOutside360","scenes","_scenes","_scene360s","getScene360s","_getScene360s","siteRelativePath","scene360s","scene","getOutside360","jObjectOutside360","AvailablePricesSettings","desiredIntervalsPrice","_desiredIntervalsPrice","Filters","availablePricesSettings","_availablePricesSettings","availablePrices","PixelMappings","mapAToBToGToRToValue","imageFileRelativePath","_mapAToBToGToRToValue","_imageFileRelativePath","_canvas","document","createElement","initialize","getValueFromPercentages","getValueFromProportions","getValueFromPixel","_getPixelARGB","_checkInitialized","_initialized","img","crossOrigin","src","getContext","drawImage","xPercent","yPercent","xProportion","yProportion","parseInt","rgba","mapBToGToRToValue","mapGToRToValue","mapRToValue","getImageData","rgbaValuePairs","rgbaValuePair","g","r","_parseRgbaValuePairsToMap","SiteJsonUnitBirdsEyeViewOutside360MarkerPosition","SiteJsonBirdsEyeViewsBirdsEyeView","imageAspectRatio","nearestOutside360PixelMappings","outside360MarkerPositions","_imageAspectRatio","_nearestOutside360PixelMappings","_outside360MarkerPositions","_mapOutside360UniqueIdToMarkerPosition","outside360MakerPosition","getMarkerPositionForOutside360","outside360MarkerPosition","SiteJsonBirdsEyeViews","jObjectBirdsEyeView","ObjectIdNodeIdsMappings","mapObjectIdToNodeIds","getNodeIdsForObjectId","getNodeIdsForObjectIds","_mapObjectIdToNodeIds","objectId","objectIds","nodeIds","nodeIdsForObjectId","keys","Map","Model","groupCode","code","objectIdNodeIdsMappings","quadrantsRelativePath","_code","_groupCode","_objectIdNodeIdsMappings","_quadrantsRelativePath","Models","mapGroupCodeToModels","_map","_mapGroupCodeToModels","getModelByCode","getModelsByGroupCode","objArray","modelsMap","WhenFinishedModifying","delay","callback","_delay","_callback","_currentTimeout","trigger","clearTimeout","SiteJson","filtersSettings","outside360","models","latLng","_latLng","_units","_houseTypes","_filtersSettings","_outside360","_models","_houseTypesOrPlotFeaturesChanged","_updateAllFeatures","_whenFinishedModifyingHouseTypesOrPlotFeatures","siteJsonUnitPlot","allFeatures","mapFeatureIdToFeature","feature","_allFeatures","min","max","siteJson","currency","FiltersSettings","Configurator","houseTypeSlug","_houseTypeSlug","FeatureForPlot","getFeatureById","featureId","_getFeatureById","_featureId","FeatureForHouseType","Feature","description","_description","LatestSiteInfo","configurators","latestPlotInfos","latestHouseTypeInfos","_configurators","_latestPlotInfos","_latestHouseTypeInfos","jObjectFeature","latestPlotInfo","featuresForPlot","featureForPlot","latestHouseTypeInfo","featuresForHouseType","featureForHouseType","jObjectConfigurator","Quadrant","_objectIds","QuadrantLevel","x_Y_Z_Quadrant","_X_Y_Z_Quadrant","proportionX","proportionY","proportionZ","xIndex","y_Z_Quadrant","z_Quadrant","quadrant","QuadrantsForCameraAngle","quadrantLevels","_quadrantLevels","allObjectIds","quadrantLevelIndex","getObjectIds","quadrantLevelJObject","TWO_PI","Math","PI","QuadrantsV2","xYZFrom","sceneSize","yaw_Pitch_Quadrants","_xYZFrom","_sceneSize","_yaw_Pitch_Quadrants","_yawLength","_pitchLength","yawIndex","pitchIndex","quadrantsForCameraAngle","pitch_Quadrants","jObjectQuadrants","Quadrants","siteAssets","_mapSiteSlugToSiteAssets","groupedCallbackGetSiteAssets","_mapSiteSlugToGroupedCallbackGetSiteAssets","deleteGroupedCallbackFromMap","_getSiteAssets","nJsonFilesGot","latestSiteInfo","done","gotAJsonFileOrError","_updateSiteJsonFromLatestSiteInfo","_getSiteJsonForSite","siteJsonIn","getLatestSiteInfo","latestSiteInfoIn","loadJSON","quadrants","indexOfg","QuadrantsV1","configurator","mapPlotNumberToPlot","plotStatusId","newFeatures","errorMessage","jArrayPlots","configurationJson","_configurations","configurationsJson","isMobile","test","navigator","userAgent","PlotMoreInformationType","OVERVIEW","GALLERY","FLOOR_PLANS","getAbsolute","element","rect","getBoundingClientRect","docEl","documentElement","top","pageYOffset","clientTop","left","pageXOffset","clientLeft","right","bottom","Rect","containsPoint","point","UnitMarker","onHover","onClick","_siteJson","_unit","_callbackOnHover","_callbackOnClick","_handleMouseEnter","_handleMouseLeave","_handleClick","_handleActiveChanged","_handleSelectedChanged","_dispatchCallbackOnHover","_getMarkerPosition","getMouseInBounds","_releaseUnitActiveHandle","_element","React","createRef","deactivate","propertyBindingSelected","state","filteredOut","hovering","favourite","current","absolutePosition","offsetWidth","offsetHeight","setState","_currentUnitActiveHandle","takeActiveHandle","marker","availablePlots","comingSoonPlots","hasMoreThanOneUnit","ref","style","onMouseEnter","onMouseLeave","Alignment","Tooltip","atomicCallbackShow","noEnterLeaveEvents","tooltip","_getOrCreateTooltip","mouseDown","cancelShow","show","hide","onMouseDown","mouseUp","disposeMouseDown","_tooltip","classList","tooltipTextElement","appendChild","body","setVisible","_getSetVisible","setPosition","_getSetPosition","triangleElement","elementShowingFor","getMouseDown","showing","innerHTML","visible","setAlignment","_getSetAlignment","absolutePositionElementShowingFor","leftWhichWouldBeRequiredForLeftAlign","alignment","currentAlignmentClass","alignmentClass","IconButton","faIcon","imgUrl","disabled","_callbackClick","_elementRef","innerIcon","icon","register","previousProps","DialogButton","_onClick","Dialog","preventInterraction","options","title","onClickClose","_preventInterraction","_options","_message","_callbackClickClose","buttons","option","_createOnClickForOption","_mapOptionHashToButton","_buttons","_setVisible","_handleClickButtonClose","ReactDom","unmountComponentAtNode","findDOMNode","parentNode","render","EventNormalizer","callback2","args","addFriendlyXYToTouch","addFriendlyXYToMouse","touch","changedTouches","clientX","clientY","Once","_set","_unsetIt","_setIt","EfficientMoveCycle","stopPropagation","preventDefault","onStart","onMove","onEnd","friendlyXY","_stopPropagation","_preventDefault","_onStartMouse","addFriendlyXYToMouse_LexicalClosure","_onStartTouch","addFriendlyXYToTouch_LexicalClosure","_onMoveMouse","_onMoveTouch","_onEndOnce","_onEndMouse","_onEndTouch","_mouseDown","_mouseMove","_mouseUp","_stopPropagationIfRequired","_preventDefaultIfRequired","_addMouseMoveEvent","_addMouseUpEvent","_touchStart","_touchMove","_touchEnd","_addTouchEnd","_addTouchMove","passive","_friendlyXY","_addFriendlyMouseXY","_clearCurrentMouseMove","_clearCurrentMouseUp","_clearCurrentTouchMove","_clearCurrentTouchEnd","_currentTouchMove","_currentTouchEnd","_currentMouseMove","_currentMouseUp","TwoFingerTouch","onStartFinger1","onStartFinger2","onMoveFinger1","onMoveFinger2","onEndFinger1","onEndFinger2","_finger1Active","_finger2Active","_touch1","_touch2","_onStart","_onMoveFinger2","_onMoveFinger1","_onStartFinger1","_onStartFinger2","_onEndFinger1","_onEndFinger2","_onEnd","_finger1Id","_finger2Id","_start","_startAnywhere","_startFinger2","_move","_end","changedTouch","identifier","touch1","touch2","FrequencyLimitedCallback","frequencyHz","cancel","_triggered","_pausing","FullScreen","fullscreenElement","exit","enable","isEnabled","requestFullscreen","webkitRequestFullscreen","msRequestFullscreen","_dispatchChange","exitFullscreen","fullscreenEnabled","Spinner","spinnerHandles","invertHandles","_invertHandles","_spinnerHandles","_spinnerHandlesChanged","getStyle","currentStyle","getComputedStyle","getPropertyValue","isDisplaying","currentElement","parentElement","ParentElement","getContainerAspectRatio","updateExternalZoomSource","zoomMax","zoomMin","parentElementRef","_zoomMin","_zoomMax","_updateExternalZoomSource","_getContainerAspectRatio","site","_parentElementRef","_imageWrapper","_inner","_img","_handleDragStart","_handleDragMove","_handleDragEnd","_handleImageLoaded","_handleImageError","_handleWindowResize","_constrainAndSetPositionOfImageWrapper","_calculateMaxMinPosition","_calculateZoomMultiplier","setZoom","_setZoomOnce","_onTwoFingerStart","_clearImage","resizeIfNecessary","_resize","_updateZoomFromTwoFingerTouch","_onTwoFingerEnd","_handleMouseWheelZoom","_constrainAndSetZoom","_getImgAspectRatio","_load","load","_groupedCallbacksSetZoom","imageWrapperPosition","zoom","showImage","_zoom","_unmultipliedZoom","_onceSetZoom","_initialUnmultipliedZoomOnStartOfTwoFingerTouch","_zoomMultiplier","_doingTwoFingerTouch","_groupedCallbacksImageLoaded","_startDistanceTwoFingerTouch","_frequencyLimitedCallbackZoom","_imgUrl","_doneCalculateZoomMultiplier","imgAspectRatio","containerAspectRatio","naturalWidth","naturalHeight","currentZoom","imageWrapper","multiplier","proportionImageToLeft","offsetLeft","newImageWrapperWidth","newLeft","proportionImageToTop","offsetTop","newImageWrapperHeight","newTop","fitToHeight","spinnerHandle","doReject","res","imgAlreadyHasUrl","afterImgLoadIfNecessary","_fitToHeight","isTouchElseMouse","startPosition","screenZParent","touches","_startOffset","screenX","screenY","widthImageWrapper","heightImageWrapper","minY","maxY","minX","maxX","_maxPosition","_minPosition","_resizeDue","_efficientMoveCycle","_twoFingerTouch","deltaY","newZoom","_finger1Point","_finger2Point","_calculateDistanceBetweenPoints","newDistance","newUnmultipliedZoom","sqrt","pow","innerClassName","marginLeft","marginTop","onLoad","onError","children","_spinnerRef","DirectionalButtons","onClickLeft","onClickUp","onClickRight","onClickDown","_onClickLeft","_onClickRight","_onClickUp","_onClickDown","faCaretUp","faCaretDown","Timer","nTicks","_nTicksCount","_nTicks","_interval","_isRunning","_tick","stop","start","setDelay","isRunning","_setInterval","_cancelInterval","keepRunning","clearInterval","setInterval","TemporalCallback","maxNTriggers","maxTotalDelay","_maxNTriggers","_maxTotalDelay","_timerDelay","_timerMaxDelay","_nTriggers","ResizeWatcher","onResized","onFirstResize","staggered","_onResized","_onFirstResize","manual","_resizedCallbackNotInitial","_logSize","_scheduleResize","_finishedResizing","_resized","_doStartIfRequired","__resized","_dispatchResized","_temporalCallback","_timerFinishedResizing","_startedResizing","_loggedSize","_resizeObserver","_hasResizeObserver","_resizedCallback","_resizedCallbackForNotInitial","previousLoggedSize","BirdsEyeView","showPlotMoreInformation","favouritesRef","addFavourite","removeFavourite","showOutside360","enterHouse","showBrochureGenerationDialog","plotMenuRef","showPlotDetailedInformation","getConfiguration","_getConfiguration","_favouritesRef","_showPlotDetailedInformation","_callbackShowPlotMoreInformation","_callbackAddFavourite","_callbackRemoveFavourite","_callbackShowOutside360","_callbackEnterHouse","_callbackShowBrochureGenerationDialog","_plotMenuRef","_zoomableDragableRef","_markersRef","_dragDropMarkerRef","_createMarkers","_clear","_clearPlotMarkers","_handleClickPlotMarker","_setMarkersVisible","_handleHoverPlotMarker","_handleShowPlotMoreInformation","resize","_handleClickLeft","_handleClickRight","_handleEnterHouse","_showPlotMenu","_handleShowBrochureGenerationDialog","_getShouldFitToHeight","_getAspectRatio","_getNearestSiteJsonOutside360","_setDragDropMarkerPosition","getMarkerPositionForPlotNumber","_initializeNearestOutside360PixelMappingsIfNecessary","_isDesktopAndShouldShowPlotDetailedInformationInstead","_frequencyLimitedCallbackGetNearestSiteJsonOutside360","_fittedToHeight","_zoomedOutOnFirstFilterAfterFittingToHeight","_currentIndex","_birdsEyeViewIndex","_currentSiteJsonBirdsEyeViewsBirdsEyeView","_nearestOutside360UniqueId","_showPlotMenuOnce","unitMarkers","showPlotMarkers","_resizeWatcherParentElement","unitsArray","filtered","_unitsArray","zoomOut","positionAsPercentages","elementAbsolutePosition","_cancelCurrentLoadOperation","cancelled","siteJsonBirdsEyeViewsBirdsEyeView","afterLoadImg","_createdMarkers","zoomableDragable","initialized","plotMoreInformationType","unitMarker","getMouseInSourceBounds","allPlotsAffordable","dragDropMarkerElement","display","unitMarkersAbsolutePosition","birdsEyeViewMarkers","hasMoreThanOneBirdsEyeView","MenuType","MENU_BAR","MAIN_MENU","FILTERS","AVAILABLE_PRICES_FILTER","STATUS_FILTER","BEDROOMS_FILTER","HOUSE_TYPE_FILTER","PLOT_SEARCH","SITE_PICKER","PLOT_MORE_INFORMATION","BROCHURE_GENERATION","FAVOURITES","IMAGE_VIEWER","PRIVACY_POLICY","BROCHURES","PLOT_DETAILED_INFORMATION","FEATURES_FILTER","UnitMarkerKey","hasKeyHeading","_hasKeyHeading","plotsArray","plotStatusesForPlots","firstPlotStatus","secondPlotStatus","firstPlotStatusDescription","getDescription","secondPlotStatusDescription","heading","ClickedOffHandle","callbackHide","_additionalElements","_callbackHide","addAdditionalElement","removeAdditionalElement","getElements","getElement","additionalElement","ClickedOff","_clicked","_onceClicked","_containsElement","getDisposed","handlesSnashot","elements","withinOne","j","xLeft","xRight","yTop","yBottom","_clickedDocument","_touchedDocument","ClickedOffManager","elementRef","_hide","_clickedOffHandle","SubMenuHeader","_children","_hasChildren","_handleClickButtonBack","_iMenuManager","back","close","FiltersButtons","clickClear","clickShowForSale","nextKey","singleRow","iMenuManager","_clickClear","_clickShowForSale","_singleRow","_uniqueKey","_nextKey","_handleClickFeatures","_handleClickPlot","_handleClickShowForSale","_handleClickStatus","_handleClickAvailablePrices","_handleClickBedrooms","_handleClickHouseType","_handleClickClear","showMenuByType","rows","faPoundSign","clearButton","allUnitsHaveMultiplePlots","iconButtonStatus","iconButtonPrice","iconButtonBedrooms","iconButtonHouseType","iconButtonPlot","_subMenuHeader","_unitMarkerKeyRef","_clickedOffManager","_filtersButtonsRef","showMe","setIMenuManager","unitMarkerKeyAtTop","bottomUnitMarkerKey","ReactTypeChecking","component","prototype","isReactComponent","includes","isClassComponent","isFunctionComponent","isValidElement","isElement","stopEventPropagation","eventList","Checkbox","paths","toggleOnClick","stopEventsPropagating","_toggleOnClick","_stopEventsPropagating","_paths","_get_dispatchChange_lexicalClosure","_onCallbackChange","toggle","_stopEventPropagation","checked","_checkboxRef","_checked","onceToggle","p","fill","d","xmlns","viewBox","aria-hidden","focusable","CheckboxFilterOption","_inputCheckbox","_callbackChange","clear","_option","_toggleChecked","_handleClickOnce","_onceHandleClick","isChecked","classNameOption","valueString","CheckboxFilter","onSelectionChange","_onSelectionChange","getCheckedValues","setOptions","newOptions","mapValueStringToOption","newOption","checkboxFilterOptionsToRemove","existingCheckboxFilterOption","existingCheckboxFilterOptionValueString","checkboxFilterOptionToRemove","checkboxFilterOption","checkedValues","Option","_value","_valueString","stringify","AvailablePricesFilter","onSelectedOptionsChange","_callbackSelectedOptionsChange","_checkboxFilter","_dynamicallyGetFromPriceWithLowerRange","_roundDownToNearest100","_roundUpToNearest100","_getAndUpdateOptions","_updateOptions","filterPlots","whatAreYouLookingForViewModel","priceRange","hasFrom","hasTo","getCheckboxOptions","checkboxOption","hasFromAndFromIsInsideRangeForCheckbox","hasToAndToIsInsideRangeForCheckbox","hasFromAndToAndConsumesEntireCheckboxRange","priceRangesToShow","plotsToShow","priceRangeToShow","plotsInPriceOrder","desiredPriceIntervalsPlusDynamicallyAddedPriceIntervalsPrice","requiredRanges","previousPriceIntervalWithToLessThan","dynamicRangesSeen","foundRange","priceInterval","nextPriceInterval","range","dynamicRangeString","previousPriceInterval","priceRoundedDownToNearest100","requiredRange","isApplied","Favourite","payload","sortValue","imageUrl","onRemove","_onRemove","_payload","_imageUrl","_sortValue","StatusFilter","plotStatusesToShow","newChecked","BedroomsFilter","bedroomsFilterSettings","callbackClose","nBedroomssToShow","nBedroomssForPlots","FeaturesFilter","setFromWhatAreYouLookingForViewModel","_handleSelectedOptionsChanged","_setSelectedFeatures","_selectedFeatures","_mapFeatureIdToOption","_selectedOptionsChangedOnce","selectedFeatures","selectedFeature","_propertyBindingAllFeatures","o","SliderHandle","callbackMoved","_callbackMoved","_startPosition","_mouseStartPosition","capturing","isTouch","dX","dY","_handleMouseDown","onMouseUp","_handleMouseUp","_handlemouseLeave","Slider","initial","onValueChanged","isHorizontal","_onValueChanged","_min","_max","_initial","_isHorizontal","_sliderHandle","setValue","_constrainValue","_sliderHandleMoved","setMin","setMax","_updateSliderHandlePosition","_calculateAndDispatchNewValue","_setSliderPositionFromValue","setFromInitialValue","sliderHandle","inner","newX","innerWidth","newY","innerHeight","newDesired","innerLength","Star","onSelectedChange","_onSelectedChange","_clicking","faStar","InsertedMnuItemsRegistrationHandle","callbackRemove","_callbackRemove","InsertedMenuItemsHandler","getInsertedMenuItems","setInservedMenuItems","_setInservedMenuItems","_getInsertedMenuItems","_getCallbackRemoveLexicalClosure","registerMenuItems","menuItems","insertedMenuItems","menuItem","InsertedMenuItemsRegistrationHandle","ZoomButtons","interval","_handleClickDown","_handleClickUp","DragDropType","STREET_VIEW_BUTTON","IDragDropRecipient","objTypeName","onDrop","onDragging","DragDropStreetViewButton","showDefaultOutside360","getDragDropRecipient","_callbackShowDefaultOutside360","_getDragDropRecipient","_setElementPosition","_onDragStart","_onDragMove","_onDragEnd","_setImage","_getImageUrl","_imgRef","_offsets","_moving","_iDragDropRecipient","validate","dragging","WindowType","PLOTS_SELECTION_MENU","HOUSE_TYPE_VIEWER","SITE_PLAN","WindowEventNames","MAXIMIZED","MINIMIZED","FOCUSSED","UNMINIMIZED","UNMAXIMIZED","MOVED","CLOSED","WINDOW_CREATED","WINDOW_DESTROYED","DRAGGED","DRAG_STARTED","RESIZE_STARTED","styleFromObject","Windows","_instances","currentBounds","minYPx","maxYPx","minXPerc","maxXPerc","getActive","getStartPosition","mostActiveWindowNotThisWindow","getParentElement","otherWindowPosition","getPosition","_screenResized","divDragHeightTaskBarPx","clientHeight","_updateZIndices","zIndex","_setZIndex","sendToBack","instances","_dispatchWindowCreatedEvent","EventNames","_dispatchWindowDestroyedEvent","_innerElement","_iconElement","_textElement","fontAwesomeIconFactory","createFactory","FontAwesomeIcon","ReactDOM","_imgElement","MenuBarWindowEntries","_windowCreated","_windowDestroyed","_mapWindowHashToEntry","getHash","getType","iconButton","IconButtonNonReact","toggleMinimize","removeChild","MenuBar","showMainMenu","onZoomChange","setFavouritesActive","getDragDropRecipientForStreetViewButton","showDefault3d","showBrochures","showPlots","showHouseTypes","playSiteVideo","showTwoDSitePlan","showSuggestedSites","_mapMenuTypeToHandles","_showMainMenu","_callbackShowPlots","_callbackShowDefault3d","_callbackShowBrochures","_callbackShowHouseTypes","_callbackPlaySiteVideo","_callbackShowTwoDSitePlan","_callbackShowSuggestedSites","_zoomButtonsRef","_starRef","_callbackZoomChange","_setFavouritesActive","_getDragDropRecipientForStreetViewButton","_handleClickButtonSite","_handleClickButton3d","_handleClickButtonBrochures","_handleSliderZoomValueChanged","getHandlesActivateButton","_handleClickButtonTwoDSitePlan","_onStarSelectedChange","_handleWindowResized","_handleClickButtonPlots","_dispatchIsHorizontalChanged","_menuTypeActiveChanged","_getIsPortrait","_handleClickButtonHouseTypes","_handleClickButtonPlaySiteVideo","_handleClickButtonSuggestedSites","_windowEntriesRef","horizontal","insertedMenuItemsAtEnd","_insertedMenuItemsHandler","_insertedMenuItemsAtEndHandler","_menuBarWindowEntries","menuType","isActive","clientWidth","_setHorizontal","iconButtonFullScreen","isSupported","_handleClickButtonFullscreen","buttonPlots","playSiteVideoButton","brochureMenu","twoDSitePlanButton","suggestedSitesButton","buttonHouseTypes","MainMenu","_handleClickFilter","_handleClickSite","_handleClickBrochure","faFilter","faCity","faBook","ProgressBar","propertyNameProgressProportion","propertyNameVisible","delayHide","clickEvent","_handleProgressProportionChanged","_handleVisibleChanged","_touchedProgressBar","_startedTouchForwardReverse","_moveTouchForwardReverse","_endTouchForwardReverse","_updateProgressBarProportionFromTouch","_delayHide","_bar","_timeoutHide","_reachedHundredPercentAt","_propertyBindingProgressProportion","_propertyBindingVisible","_efficientMoveCycleTouchForwardReverse","_frequencyLimitedCallbackTouchForwardReverse","Date","getTime","proportion","VideoPlayer","maximized","closeable","toggleMaximizeButton","forceFillWidth","_forceFillWidth","_maximized","play","_setPlayButtonImage","_clickedPlayStopButton","_updateFillWidthHeight","_onVolumeSliderValueChanged","_setVolumeVisible","_hideVolume","_mouseActive","_showUI","_hideUI","_onVideoTimeUpdate","_videoEnded","_setVideoTimeFromTouchForwardReverseDistance","_clickedProgressBar","_updateMaximized","_setHasVideo","_showVolume","_toggleVolume","_videoElement","_volumeWrapperElement","_volumeWrapperInnerElement","_videoWrapperElement","_buttonPlayPause","_imgPlayPause","_playing","_iconButtonNonReactClose","__uiVisible","_uiVisible","_proportion","_progressBar","_temporalCallbackHideUI","_resizeWatcher","_iconButtonVolume","_iconButtonFullScreen","_volumeSliderRef","sliderFactory","_volumeShowing","_clickedOffVolumeHandle","proportionVolume","volume","currentTime","duration","_touchDownNotCancelledYet","_hideUISuspended","_startTouchPosition","_videoProportionAtStartOfTouch","distanceX","dProportion","newProportion","triggerClicked","videoAspectRatio","videoWidth","videoHeight","elementAspectRatio","_play","pause","playing","video","__proportion","MenuManager","outerElementRef","_outerElementRef","_currentMenusShowing","_mapMenuTypeToMenu","_menuHistory","_showMenuByType","_showMenuWithLoopBreak","_showMenu","_close","_closeOnce","_showMenuOnce","hasBacks","keepHistory","currentMenuShowing","_setHasBacks","menu","sameAsLast","childMenu","childMenuInstance","HouseTypeFilter","_setHouseTypeViewModelsToShow","houseTypeViewModelsToShow","houseTypesToShow","houseTypeViewModelToShow","houseTypesWithSameName","_houseTypesViewModel","houseTypeViewModel","houseTypeViewModels","houseTypesViewModel","imageAbsolutePath","TypeError","PlotFilterer","_filters","plotFilter","filters","KeyboardButton","textNotProvided","_icon","NumericalKeyboard","onKey","_onKey","_handleClickKeyboardButton","_createButton","additionalClasses","keyboardButtons","PlotSearch","selectedPlot","_callbackSelectedPlot","_input","_handleInput","_handleKey","_allowedKeyCodes","plotNumberStr","numberValid","_selectedPlot","_callbackClose","triggered","nativeEvent","inputType","charCodeAt","keyCode","_MAX_LENGTH","fromCharCode","plotValidAndNotAffordable","previousSelectedPlot","classNamePlotNumber","onInput","MouseBlocker","getViewportDimensions","getElementsByTagName","EdgeLocation","TOP_LEFT","TOP_CENTER","TOP_RIGHT","MIDDLE_RIGHT","BOTTOM_RIGHT","BOTTOM_CENTER","BOTTOM_LEFT","MIDDLE_LEFT","PopupMenu","edgeLocation","onHide","_callbackOnHide","_edgeLocation","_repositionVerticallySoOnPage","_repositionHorizontallySoOnPage","_startWatchingForClickOff","_startWatchingMouseForLeave","_checkMouseWithinBoundsAndAct","_doResposition","_getCurrentRect","_setLeft","_setTop","_setRelocated","_showing","_checkMouseWithinBoundsAndActOnce","relocated","untilClickOff","_getMouseInSourceBounds","_dueReposition","_currentRect","viewportDimensions","currentRect","relocatedVertically","relocatedHorizontally","fromTopOfViewPort","fromBottomOfViewPort","correctionForEdgeLocation","fromLeftOfViewPort","fromRightOfViewPort","TabPanel_Panel","_child","tabInfo","_tabInfo","TabPanel_Tab","panel","setActive","_setActive","_panel","_handleSetActive","tabInfoClassName","TabPanel","defaultActiveTabIndex","onSetActive","_callbackSetActive","panels","_defaultActiveTabIndex","child","panelRef","childTabKey","tabKey","tabs","tab","tabElement","panelElement","tabRef","TabInfo","_title","ImageCarousel","getContainerViewPort","aspectRatioThreshold","onExpandImage","rootUrl","_rootUrl","_callbackExpandImage","_getContainerViewPort","_getVerticalElseHorizontal","calculateAndUpdateVerticalOrHorizontal","_handleClickExpand","_createImageElements","_dynamicImageFitCriteriaVertical","_dynamicImageFitCriteriaHorizontal","imageElements","verticalElseHorizontal","imagesChanged","rootUrlChanged","viewPort","dynamicImageEntry","faExpand","containerViewPortDimensions","aspectRatio","_aspectRatioThreshold","largestImageUrl","getLargestEntry","JumpableZoomableDragable","_loadImage","noMoreLeft","noMoreRight","dynamicImageOrImagePathString","PlotMoreInformationFloorPlans","getViewPort","_loadFloorPlanImages","_IMAGE_CAROUSEL_ASPECT_RATIO_THRESHOLD","PlotMoreInformationGallery","_loadRoomImages","roomImages","PlotMoreInformationOverview","showStreetView","_star","_callbackShowStreetView","_handleStarSelectedChanged","_handlePlotSelectedChanged","_ellipsisAbout","_handleClickShowStreetView","_workBackwardsThroughStringToFindLastCharacterBeforeSpaceIndex","showAll","aboutTruncated","_firstAboutTruncation","aboutTruncatedWithEllipsisWithEllipsisIfRequired","previousState","oldPlot","newPlot","scrollHeight","indexToChopRemainingWrodOffFrom","proportionToKeep","floor","lastCharacterBeforeSpaceIndex","nearPlot","hasPrice","isSold","getPlotImageAbsolutePath","faStreetView","priceString","faBed","PlotMoreInformation","_tabPanelRef","_overview","_gallery","_floorPlans","_getTitle","_getPanelsViewPort","_disposeClickedOffHandle","_releasePlotActiveHandle","_handleShowStreetView","_handleTabSetActive","_currentPlotActiveHandle","_currentPlotMoreInformationType","_plot","_site","PhoneNumberValidation","REG_EXP_INTERNATIONAL_NUMBER","EmailValidation","REG_EXP_EMAIL_RFC_5322","BrochureProgressStatus","Queued","Generating","Generated","brochureProgressStatus","BrochureBeingGenerated","brochureGenerationIdentifier","plotNumbers","brochureUrl","brochureType","_brochureGenerationIdentifier","_brochureProgressStatus","_proportionProgress","_brochureUrl","_brochureType","_plotNumbers","updateProgress","progress","proportionProgress","GoogleAnalytics","trackingCode","script","_trackingCode","dataLayer","_gtag","_instance","LocalStorageHelper","localStorage","getItem","ex","setItem","SESSION_TOKEN","SessionManager","_sessionToken","getObj","sessionToken","setObj","BrochuresManager","_brochuresBeingGenerated","_mapBrochureGenerationIdentifierToBrochureBeingGenerated","setSessionTokenAndAddBrochureGenerationIdentifier_fromResponse_IfValid","_addBrochureBeingGenerated","_getUpdatesToBrochureBeingGenerateds","_processUpdatesResponse","_processBrochuresResponse","_dispatchBrochuresBeingGeneratedChanged","_clearBrochuresBeingGeneratedWhichAreNotComplete","_getBrochuresForSession","_timerGetUpdatesToBrochureBeingGenerateds","firstName","surname","email","phoneNumber","optInOptions","agreedToPrivacyNotice","singlePlotBrochure","waitForUrl","debug","userInfo","instance","logPlotBrochureRequest","logFavouritesBrochureRequest","getGeneratePDFBrochureSimple","jObjectResponse","startedAt","brochureBeingGenerated","sessionTokenIsValid","clearSessionToken","getBrochureGenerationGetBrochuresForSession","brochureGenerationIdentifiersToGetUpdateFor","brochureGenerationIdentifiers","getBrochureGenerationCheckProgress","progresses","sessionTimedOut","newBrochuresBeingGenerated","toRemove","brochuresBeingGenerated","BrochureGeneration","getSiteAndUnits","showBrochuresMenu","getSelectedFavourites","_getSiteAndUnits","_getSelectedFavourites","_showBrochuresMenu","_titleRef","_firstNameRef","_surnameRef","_phoneNumberRef","_checkboxOptInPhoneRef","_checkboxOptInEmailRef","_checkboxOptInTextRef","_emailRef","_privacyNoticeCheckboxRef","_currentDialog","_agreedToPrivacyNotice","_handleClickGenerate","_startPdfDownload","_handleTitleChange","_handleFirstNameChange","_handleSurnameChange","_handleEmailChange","_handlePhoneNumberChange","_handleClickShowPrivacyPolicy","_validateText","_validatePhoneNumber","_validateEmail","_getClassNameField","_disposeCurrentDialog","_showHasNoPlotsFavouritedDialog","_showYouMustAgreeToPrivacyNoticeDialog","_getOptInOptions","_onClickBrochureGenerationResultDialog","_handleCheckboxAgreedToPrivacyNoticeChanged","_showResponseDialog","_setGenerating","generating","titleValid","emailValid","phoneNumberValid","firstNameValid","surnameValid","_plotsShownFor","create","_validateOnSubmission","selectedPlotsArray","generate","_firstName","_surname","_email","_phoneNumber","link","download","click","allowEmpty","validateInternational","emailRFC5322","valid","classNameIconButtonGenerate","placeholder","ImageViewer","_sliderRef","_pictureWrapperRef","_subMenuHeaderRef","_updateZoomSlider","slider","FavouriteEntry","onClickRemove","_callbackClickRemove","_handleCheckboxChanged","_handleClickClose","_favourite","dangerouslySetInnerHTML","__html","Drag","callbackStarted","minXPercent","maxXPercent","timer","drag","startedButNotMovedYet","updateMinMax","setText","Resizer","div","minWidth","divInner","minHeight","maxWidth","maxHeight","bounds","callbackResized","callbackInstantaneous","toInclude","fixedAspectRatio","divLeft","divTop","divRight","divBottom","divLeftTop","divLeftBottom","divRightTop","divRightBottom","maxXPercentage","minXPercentage","setCornerGeneric","leftTop","leftBottom","rightTop","rightBottom","setFixedAspectRatio","cursor","rigtTop","rightButton","moveEvent","upEvent","startOffset","doResize","resizeLeft","resizeRight","resizeTop","resizeBottom","pageX","pageY","setDimensions","getDimensions","touchstart","padding","onmousedown","setBounds","boundsIn","previousBounds","minYpx","SelectHelper","selectStrings","setSelectable","selectableString","nodeType","setAttribute","onselectstart","selectString","firstChild","nextSibling","makeSelectable","makeUnselectable","Settings","settingsName","callbackReset","getAll","addRange","resetAll","defaults","dragable","minimizable","maximizable","minimizeOnClose","GenericWindow","previousSizes","maximizedSizes","cancelBringToFront","timerFlash","flashCount","tooltipMessage","iconPath","defaultWidth","defaultHeight","minimized","defaultX","defaultY","resizable","zIndexOffset","toggleMaximizeOnDoubleClick","divTab","divMain","divName","saveName","settings","flash","flashing","setName","setTooltipMessage","getIcon","getTooltip","Z_INDEX_CHANGED","getState","maximize","unmaximize","minimize","unminimize","focus","bringToFront","dispatchFocussedEvent","toggleMaximize","setWindowSizePositionMaximized","getMinimizable","getTabElement","fillLeftHalf","setWindowSizePosition","fillRightHalf","halfWidth","clickedOnMe","getMainElement","paddingString","initializePadding","_resizer","equals","getSizes","RESIZED","_drag","fillerElement","iconButonMinimize","iconButonMaximize","iconButonClose","startSize","startZIndex","_unminimize","mouseDragPosition","leftOffset","l","SubMenuHeaderNonReact","menuManager","childrenElement","titleElement","backButtonWrapperElement","closeButtonWrapperElement","_iconButtonNonReactBack","PlotDetailedInformationSectionType","FloorPlans","StreetViewImage","FrontViewImage","Gallery","Description","Tour","Video","PlotDetailedInformationSummary","scrollToFloorPlans","scrollToGallery","_selectedChanged","_handleClickSendBrochure","_handleClickEnterHouse","_setValuesFromSiteJsonUnitPlot","_siteJsonUnitPlot","_plotNameElement","_plotNumberElement","_plotStatusDescriptionElement","_plotPriceElement","_nBedroomsElement","_smallButtonsElement","childElement","starFactory","hasOneOrMoreRoomImages","_iconButtonWalkmode","_iconButtonShowGallery","_buttonEnterHouse","buttonSendBrochure","_propertyBindingSelected","showPrice","isReserved","nBathroomString","ResizeWatchers","DynamicImageDisplayer","dynamicImage","resizeWatcherParentElement","fitWidthElseHeight","allowDowngradeResolution","resolutionMultiplier","onLoaded","_allowDowngradeResolution","_resolutionMultiplier","_dynamicImage","_parentElement","_onParentElementResize","_fitImageToWidth","_fitImageToHeight","_shouldSkipUpdateCosIsDowngrade","_setSrc","_fitImage","newDynamicImageEntry","_currentDynamicImageEntry","PlotDetailedInformationGallery","showImagesFullScreen","_showImagesFullScreen","_setupFromSiteJsonUnitPlot","_loadImages","_setRoomImageClass","_dispatchLoaded","_loadedOnce","_imgWrapperElement","_dynamicRoomImages","newClassName","_currentRoomImageClassName","PlotDetailedInformationDescription","PlotDetailedInformationFloorPlans","_setFloorPlanImageClass","_dynamnicImageDisplayers","dynamicImageDisplayer","PlotDetailedInformationVideo","_videoUrlChanged","_videoPlayer","_propertyBindingTourUrl","PlotDetailedInformationTour","_iframeElement","_tourUrlChanged","PlotDetailedInformation","showPlot","callbackPlotNumberChanged","_enterHouse","_showPlot","_callbackShowImagesFullScreen","_callbackPlotNumberChanged","_scrollToFloorPlans","_scrollToGallery","_scrollToElement","scrollToTop","_onClose","scrollToSectionWithProportion","setSectionProportionRanges","_dispatchScrolled","moreThanOnePlotInUnit","_window","_createNextPreviousPlotButtons","_mainElement","_summary","_video","_tour","_scrollableElement","_sections","section","scrollTop","nextPreviousElement","setNewPlotFromIndex","_setupSiteJsonUnitPlot","previousButton","faAngleLeft","indexOfThisPlot","newIndex","nextButton","faAngleRight","textElement","insertBefore","childNodes","scrollableElementHeight","_sectionProportionRanges","proportionFrom","proportionTo","plotDetailedInformationSectionType","sectionProportionRange","sectionType","totalProportionToScrollTo","pxToScrollTo","plotDetailedInformation","currentProportion","currentSection","PlotDetailedInformationsManager","_callbackDisposePlotDetailedInformation","_plotNumberChanged","_plotDetailedInformations","bringIntoFocus","PlotComparisonScrollManager","plotDetailedInformations","_onPlotDetailedInformationWindowFocused","_releasePreviouslyFocusedPlotDetailedInformation","_setFocusedPlotDetailedInformation","_currentlyFocusedPlotDetailedInformationScrolled","_currentlyFocusedPlotDetailedInformation","_focussed","windowHash","sectionTypeAndProportion","sectionTypeAndProportionScrolled","plotDetailedInformationToScroll","eventNamesToDetectWhenToExitComparison","PlotComparisonManager","plotDetailedInformationsManager","sitePlanElement","_plotDetailedInformationsManager","compare","_sitePlanElement","_plotComparisonElement","_plotComparisonTextElement","_showTooManyPlotsSelectedToDoComparison","_showAtLeastTwoPlotsMustBeSelectedDialog","_setComparingClassOnSitePlan","_getNPlotDetailedInformationWindowsInEachDirection","_getPositionNextWindow","_registerEventsToDetermineWhenToExit","_exitComparisonMode","siteJsonUnitPlots","positionNextWindow","_PlotComparisonScrollManager","_unregisterEventsToDetermineWhenToExit","eventName","_plotComparisonScrollManager","nPlotDetailedInformations","nPlotDetailedInformationWindowsInEachDirection","windowDimensionsPx","nX","nY","Favourites","onShowSendFavouritesBrochure","_callbackShowSendFavouritesBrochure","_onClickFavouriteEntryRemove","_handleClickSendMyFavouritesBrochure","_handleClickCompare","_getEntryByHash","favouriteEntry","selectedFavourites","comparisonButton","selectedEntries","StylesHelper","cssString","head","styleSheet","cssText","createTextNode","PrivacyPolicy","ViewModelBase","UnitViewModel","siteJsonUnit","_siteJsonUnit","CompositeProgressSource","weightingFactor","progressSources","_add","_onProgressSourceProgressChanged","_update","_dispatchProgressChanged","_sum","_isDone","_weightingFactor","_progressSources","progressSource_s","added","progressSource","oldProportion","progressProportion","sumProgressTimesWeight","sumWeights","weightingFactorSum","SitePlan3DViewModel","_loadingProgressProportionChanged","_unitViewModels","_progressSourceLoading","loadProgressProportion","progressBarVisible","BabylonViewBase","BabylonCameraPan","babylonScene","inertiaDecayFactor","inertiaNegligibleThreshold","_inertiaDecayFactor","_inertiaNegligibleThreshold","_babylonScene","_isNewForwardVectorTooCloseToSingularity","_pan","_sphericalPan","_inertialPan","_getPointerViewSpaceDirectionToRef","_mouseLeft","_onPointerUp","_onPointerDown","_setMouseButtonStates","_stopPanningIfPanning","defaultCursor","camera","rotationQuaternion","BABYLON","Identity","_leftButtonDown","_rightButtonDown","_ptrX","_ptrY","_inertiaX","_inertiaY","_priorDir","_currentDir","_rotationAxis","_rotationAngle","_newForward","_newRight","_newUp","_matrix","_inertialPanObserver","_sphericalPanObserver","onPointerDown","onPointerUp","isLeftButton","button","which","isRightButton","v","abs","Dot","Up","_currentlyPanning","onBeforeRenderObservable","currX","currY","computeNewForward","CrossToRef","lengthSquared","GetAngleBetweenVectors","RotationAxisToRef","rotateByQuaternionToRef","setRowFromFloats","fromRotationMatrixToRef","getRotationMatrix","pointerX","pointerY","UnprojectToRef","canvas","getProjectionMatrix","normalize","BabylonCameraZoom","zoomSpeedFactor","closestCanGetToSurface","_zoomSpeedFactor","_closestCanGetToSurface","_getMaximumDistanceCanMoveForward","_onPointerWheel","onPrePointerObservable","POINTERWHEEL","pointerInfo","eventState","delta","wheelDelta","detail","direction","getDirection","actualDistanceToMove","scaledDirection","scale","addInPlace","distanceWouldLikeToMove","ray","hit","pickWithRay","distanceLeftToMoveForward","distance","StandardProgressSource","SiteView","babylonModelsManager","_babylonModelsManager","_loadSiteModels","_setupControls","siteModels","progressSourceLoading","iteratorModels","nModel","iteratorProgressSources","babylonModels","loadNextModel","hasNext","getNewMesh","quadrantsPath","getQuadrantsAbsolutePath","standardProgressSource","babylonModel","defaultCamerasAndLight","attachCameraControls","startRendering","setCameraPosition","SitePlan3DView","_unitViews","_progressBarVisibleChanged","_zoomChanged","_logoLarge","_bindingProgressBarVisible","babylonMaterialsManager","_babylonMaterialsManager","ModelFile","fileName","_throwMustProvideUrlOrRootUrlAndFileName","_fileName","seperatedUrlComponents","seperateUrlIntoRootUrlAndFileName","BabylonModel","babylonMeshes","particleSystems","skeletons","_root","_quadrants","_babylonMeshes","_particleSystems","_skeletons","_location","setLocation","setVisibleObjects","_setNodeEnabled","_setPositionRotationAndScaling","setAllObjectsVisible","clone","_mapNodeIdToBabylonMesh","_currentNodeIdsVisible","babylonMesh","allNodeIds","nodeId","nodeIdsVisible","nodeIdVisible","indexInCurrentNodeIdsVisible","nodeIdToDisable","enabled","mesh","setEnabled","loggingLevel","DETAILED_LOGGING","BabylonModelsManagerCache","_mapFileNameToBabylonModel","filePath","BabylonMeshesCombiner","_scene","_mapMaterialNameToCombinedMesh","combineMeshesByMaterial","_get_MaterialName_MeshesToCombine_Pairs","_validateAllVerticesHaveBufferBound","_get_getName","_mergeMeshes","materialName_MeshesToCombine_Pairs","pair","materialName","meshesToCombine","combinedMesh","nMerge","mapMeshNameToMeshesToCombine","material","meshName","meshes","firstMesh","newUv2s","newColors","newMatricesIndices","newMatricesWeights","newIndices","newPositions","newNormals","newUvs","meshesToDispose","hasUv2s","hasColors","hasMatricesIndices","hasMatricesWeights","hasNormals","normalsForEachMesh","normals","getVerticesData","NormalKind","isVerticesDataPresent","UV2Kind","ColorKind","MatricesIndicesKind","MatricesWeightsKind","indices","getIndices","positions","PositionKind","computeWorldMatrix","UVKind","UV3Kind","positionsOffset","worldMatrix","getWorldMatrix","vertexIndex","vertex","TransformCoordinates","normalsIndex","normal","TransformNormal","indicesIndex","newMesh","setVerticesData","setIndices","BabylonModelsManager","modelsRootUrl","_modelsRootUrl","_babylonModelsManagerCache","_babylonMeshesCombiner","_getModelFileFromModelAndOrCode","_scheduleApplyTexturesToModel","_scheduleApplyTextureToMesh","_makeBabylonMeshInvisible","_isCollider","loadBabylonModel","getDefault","modelFile","promiseGetQuadrants","getQuadrants","ImportMesh","babylonModelAdded","loaded","total","materialsManager","getByName","getInvisibleMaterial","getBabylonMaterialByName","babylonMaterial","modelRelativePath","suffix","BabylonScene","_onWindowResize","_engine","onReadyToAddSceneComponents","_rendering","_onReadyToAddSceneComponents","stopRendering","setRendering","_rendeLoop","_babylonModelDisposed","_updateVisibleObjects","_cameraPositionOrRotationChanged","_setScalingRotationAndPosition","setNTimesInitialCameraRadius","_babylonModels","_updateVisibleObjectsFrequencyLimitedCallback","sceneInstrumentation","SceneInstrumentation","drawCallsCounter","createDefaultEnvironment","createDefaultLight","lights","intensity","_camera","Zero","_initialCameraRadius","radius","n","rotationMatrix","FromRotationMatrixToRef","runRenderLoop","stopRenderLoop","objectIdsToShow","toEulerAngles","SitePlan3D","getInsertedMenuItemsHandler","getInsertedMenuItemsAtEndHandler","_getInsertedMenuItemsHandler","_displayErrorDialog","_retryLoad","_retryLoadWithLowerResolution","_groupedCallbacksLoad","_insertedMenuItemsRemoveHandle","rootView","sitePlan3DViewModel","modelRefs","_modelRefs","retry","retryWithLowerResolution","Hotspot","scene360Hotspot","scene360","marzipanoScene","getIconUrlFromRelativePath","_scene360Hotspot","_scene360","_iconUrl","rotateToCompensate","_setTransform","_calculateCompensatedRotation","_setToRotate","iconElement","tooltipElement","_cosPitchRadians","cos","_hotspot","hotspotContainer","createHotspot","yaw","pitch","roll","originalUpdate","xYMarker","xYPointingAt","_view","coordinatesToScreen","angleRadians","atan2","_yaw","rotationRadians","transformProperties","property","View360","onClickHotspot","mapHotspotTypeToFactory","_mapHotspotTypeToFactory","_getIconUrlFromRelativePath","_callbackClickHotspot","_viewer360Ref","_createImageUrlSources","_createLayers","_handleSceneTransitionUpdate","_createMarzipanoScene","_createTileUrl","_sourceFromTile","_createHotspots","_createHotspotFromFactory","loadScene","_handleSceneTransitionDone","_handleHotspotClick","_hookUpdateEvent","_setCameraDirectionEulerAngles","_cancelCurrentLoadScene","viewerElement","_marzipanoViewer","Marzipano","Viewer","stageType","controls","mouseViewMode","stage","antialias","preserveDrawingBuffer","generateMipmaps","_limiter","RectilinearView","limit","traditional","cameraDirectionEulerAngles","imageUrlSources","rectilinearView","createEmptyScene","_unhookCurrentUpdateEvent","marzipanoViewer","oldUpdate","_renderLoop","_boundLoop","scene360Layers","scene360LayerChoice","imageUrlSource","ImageUrlSource","tile","scene360Layer","marzipanoCubeGeometry","CubeGeometry","createLayer","source","geometry","pinFirstLevel","fromFactory","factoryMethod","listScenes","destroyScene","shift","doRejectBecauseCancelled","updateSize","listLayers","iteratorLayers","layer","_loadLayer","_switchToScene","setYaw","switchTo","transitionDuration","transitionUpdate","val","newScene","oldScene","newVal","opacity","util","clamp","mergeEffects","_hotspotContainer","domElement","textureStore","MiniMap","_mapImageRef","_currentPositionMarkerRef","toggleShowing","setAtOutside360","_setCurrentPositionMarkerLeftPercent","_setCurrentPositionMarkerTopPercent","_setCurrentPositionMarkerVisibile","setAngleRadians","_setupResize","_mapImageError","_mapImageLoaded","_groupedCallbacksMapImageLoad","_visible","_fixedAspectRatio","mapImageElement","offsets","widthFromHeight","heightFromWidth","aspectRatioSquared","markerPositionProportion","radians","transform","leftPercent","_currentPositionMarkerElement","topPercent","currentPosition","InfoHotspot","_expand","expandedTextElement","textContent","Hider","_handlesChanged","SitePlan360","onBack","goToConfigurator","showPlotMenu","_view360Ref","_miniMapRef","_handleClickBack","_normalizeRadians","_callbackBack","_callbackGoToConfigurator","_handleClickHotspot","_handleToggleMinimap","_getCameraDirectionEulerAngles","whenLoaded","_sceneMoved","_create_SwitchToOutside360_LexicalClosure","_getInsertedMenuItemsAtEndHandler","_groupedCallbacksLoaded","_insertedMenuItemsAtEndRemoveHandle","_loaded","getDefaultScene","_switchToOutside360","_previousScene","previousScene360","hotspotsForScene","yawRadianss","hadNoOutside360MoveHotspots","previousHotspot","normalized","directionOfTravel","differenceInDirectionOfTravelAndYawRadians","sign","atEnd","centerPosition","hideBehindSpinner","showConfiguratorForPlot","closeCurrentConfigurator","_iframeLoaded","_nextIframeKey","iframes","_iframeCount","roomName","roomStr","iframe","SitePlanVisibleType","BIRDS_EYE_VIEW","OUTSIDE_360","CONFIGURATOR","THREE_D","PlotMenu","_lhsRef","_popupMenu","setFilteredPlots","_getFirstPlotMatchingFilteredPlots","_handleClickMoreInfo","_handleClickPreviousPlot","_handleClickNextPlot","_handlePopupMenuHide","_handleClickShowGallery","_handleClickShowFloorPlan","_handleClickMeaningShowPlotDetailedInformation","_handleClickLHS","_getImgUrl","_groupedCallbackImageLoaded","_startedShowAt","_loadingImageHandles","_currentLoadingImageHandle","imgLoaded","whenImgLoaded","_filteredPlots","plotsMatchingFilteredPlots","_imgLoading","currentPlot","nextIndex","dynamicImages","showMoreInformation","classNameStatus","BrochureType","FavouritesAllPlots","FavouritesAllHouseTypes","BrochuresMenuEntry","_brochureBeingGenerated","_whenFinishedModifying","_brochureProgressStatusChanged","_brochureUrlChanged","_proportionProgressChanged","_updateProgressBarProportion","_currentBrochureProgressStatusClass","_progressElement","_timerUpdateProgressProportion","_propertyBindingBrochureProgressStatus","_propertyBindingBrochureUrl","_propertyBindingProportionProgress","_changedStatusAtMilliseconds","_updateBrochureProgressStatusClassOnElement","_getText","getClassName","progressPercent","millisecondsSinceChangedStatus","neverGetThereProportion","getString","open","_showDownloadedBrochuresWillAppearHere","BrochuresMenu","_getHandlesActivateButton","_updateNoBrochuresVisibility","_setNoBrochuresVisible","_brochuresBeingGeneratedChanged","_releaseHandleActivateIcon","_removeEntry","_addEntryForNewBrochureBeingGenerated","_entriesWrapperElement","_entriesElement","_mapBrochureGenerationIdentifierToEntry","_noBrochuresElement","scrollToBottom","_handlActivateButton","currentBrochureGenerationIdentifiersNotSeen","brochureGenerationIdentifierNotSeen","brochuresMenuEntry","PlotsMenuEntry","callbackClicked","_callbackClicked","_handleClicked","_imageWrapperElement","_descriptionWrapperElement","_descriptionElement","blockString","_plotStatusElement","PlotsSelectionMenu","showPlotMenuForPlot","showMenu","clearFilters","getSitePlanVisibleType","_showPlotMenuForPlot","_showStreetView","_getSitePlanVisibleType","_buttonDoneElement","_createEntries","_callbackClickedEntry","_done","_addEntry","_onResize","_setColumnsClass","_menuElement","_iconButtonMenu","_filtersButtonsWrapperElement","filtersButtonsFactory","filteredSiteJsonUnitPlots","mapPlotNumberToEntry","filteredSiteJsonUnitPlot","_currentColumnClassName","selectedSiteJsonUnitPlots","_callbackPicked","PlotsSelectionMenuEntry","HouseTypesViewerEntryStatusesEntry","plotsToConsider","_plotsToConsider","update","_dotElement","_nameElement","_nElement","_updateOnce","HouseTypesViewerEntryStatuses","getValues","HouseTypesViewerEntryPriceRange","minPriceString","maxPriceString","minPrice","maxPrice","plotToConsider","HouseTypesViewerEntry","callbackAddFavourite","callbackRemoveFavourite","_houseTypeViewModel","_priceRange","_houseTypeViewModelSelectedChanged","_handleClickButtonWalkmode","_showFloorPlans","_handleClickImage","_showRoomImages","_handleShowConfigurator","_expandAbout","firstHouseTypeWithName","firstPlot","_firstPlot","firstUnit","_infoWrapperElement","_descriptionTextElement","_topElement","_plotPriceRangeElement","_iconButtonShowFloorplan","_iconButtonEnterHouse","checkboxFactory","_checkboxElement","_checkbox","_aboutElement","_aboutExpanded","allImages","HouseTypesViewer","_updateSelected","_mapHouseTypeToEntry","_clickedEntry","_iconButtonClearFilters","houseTypeListsSelected","_getHouseTypeListsSelected","seenEntries","houseTypeListSelected","houseTypeSelected","entryNotSeen","allHouseTypePlots","houseTypesViewerEntry","HouseTypeViewModel","_houseTypesWithSameName","_firstHouseType","_dispatchSelectedChanged","getImageAbsolutePath","HouseTypesViewModel","houseTypesForPlots","mapHouseTypeNameToHouseTypes","listOfHouseTypesForName","houseTypeLists","houseTypeList","FullScreenImagesViewer","_jumpableZoomableDragableWrapperElement","_jumpableZoomableDragableFactory","_renderJumpableZoomableDragable","DistanceHelper","latLng1","latLng2","_validateLatLng","lat1","lon1","lat2","lon2","φ1","φ2","Δφ","Δλ","sin","NearbySite","thisSiteJson","_distanceElement","round","calculateKmFromLatLng","NearbySites","siteJsons","nearbySite","SitePlan","URLSearchParams","search","callbackDidMount","_callbackDidMount","_menuBarRef","_mainMenuRef","_filtersRef","_availablePricesFilterRef","_statusFilterRef","_bedroomsFilterRef","_plotSearchRef","_houseTypeFilterRef","_featuresFilterRef","_mouseBlockerRef","_plotMoreInformationRef","_brochureGenerationRef","_imageViewerRef","_showForSale","_birdsEyeViewRef","_privacyPolicyRef","_sitePlan3DRef","_sitePlan360Ref","_configuratorRef","_menuManagerRef","_brochuresMenuRef","_loadSite","_load3dSite","_getFilteredPlots","_handleShowMainMenu","_filtersChanged","_filterAndLoadPlots","_loadIndividualPlot","_clearFilters","_plotSearchSelectedPlot","_getDimensions","_handlePlaySiteVideo","_handleShowTwoDSitePlan","_handleClickedFavourite","_handleZoomChange","_setMenuBarZoom","_handleSetFavouritesActive","_handleFavouritesHide","_handleExpandImage","_handleAddFavourite","_handleRemoveFavourite","_handleShowOutside360","_handleShowDefaultOutside360","_handleShow3d","_handleShowBrochures","_handleBackFromSitePlan360","_handleShowSuggestedSites","_initializeConfiguredCssClasses","_showTooManyFavouritesDialog","_handlePreviousSitePlanVisibleTypeElseDefault","_handleShowSendFavouritesBrochure","_hasSpaceToShowMenuOnOpen","_menuBarIsHorizontalChanged","_handleEnterHouseByPlotNumber","_setupFirstShowPlotMarkers","_handleShowPlots","_handleShowHouseTypes","setFilterInSiteFromWhatAreYouLookingFor","_previousSitePlanVisibleType","_currentSitePlanVisibleType","_plotFilterer","_initializedConfiguredCssClasses","_showPlotMarkers","_doneFirstShowPlotMarkers","menuBarHorizontal","fadeInPlotMarkers","getSiteAssets","_plotsSelectionMenu","_houseTypesViewer","_nearbySites","_setVisibleType","plotsStillAvailableWithAnd","getPlotsStillAvailableForSite","setAvailableOnly","filteredPlots","loadPlotsDirectory","siteJsonUnits","plotsStillAvailableWithOr","getPlotsStillAvailableWithOr","allPlots","allAvailablePlotsForSite","allPlotsThatCouldBecomeAvailable","handleFirstMouseDown","sitePlanVisibleType","dimensions","filteredUnits","unitPlotsArray","unitPlot","filtersApplied","addPlotFilter","_brochuresMenu","_videoPlayerFullScreen","iHouseTypesFilter","showPlotsMenu","_fullScreenImageViewer","setForSale","count","_MAX_FAVOURITES","switchToOutside360","getFirstPlot","cssHtmlString","appendCssToPage","videos","classNameSitePlan","getCssClassName","BIRDS_EYE_VIEW_ZOOM_MIN","BIRDS_EYE_VIEW_ZOOM_MAX","insertedMenuItemsHandler","insertedMenuItemsAtEndHandler","_handlePlotMenuHide","SitePlanWrapper","hasFilteredOptions","_hasFilteredOptions","_siteJsons","maximised","sitePlanFactory","sitePlan","_sitePlan","SiteJsons","_whenFinishedModifyingSiteJsonAllFeatures","seenIds","configurations","configurationsIterator","doNext","DropdownSelectorMenu","classNames","defaultTitle","showEntries","setEntries","hideEntries","_setExpandedClassName","entryElement","WhatAreYouLookingForFirstOptions","nBeds","_whatAreYouLookingForViewModel","_clickedNext","_getPriceRangeText","_setNextEnabled","_plotsStillAvailableChanged","collapseExpandedOptions","_formatNumberToString","_handleBack","_get_show","_buttonBedsElement","_buttonPriceElement","becomingVisible","_buttonFeaturesElement","_buttonHousetypeElement","_nBeds","_Price","buttonNextTitleElement","_buttonNext","_propertyBindingPlotsStillAvailable","_plotsStillAvailable","_nextEnabled","hasFilterApplied","setFilterInSite","priceFrom","priceTo","_currentCssClassNameShow","cssClassNameShow","buttonText","cssClassName","getTextFromValue","buttonElement","_iconButtonBack","titleTextElement","WhatAreYouLookingForToggleButton","select","unselect","WhatAreYouLookingForNBeds","_createSetNBedsButton","_get_setNBeds","_nBedroomsSelectedValueChanged","_nBedroomAvailableWithOtherOptionsChanged","_mapValueToToggleButton","_toggleButtons","nBedroomsValues","nBedsValue","_propertyBindingNBedrooms","_propertyBindingNBedroomAvailableWithOtherOptions","_currentlySelectedButton","toggleButton","setAvailableOption","WhatAreYouLookingForFeatures","_createSetFeaturesButton","_removeFeaturesButton","_featuresChanged","_selectedFeaturesChanged","_get_setFeature","_featuresAvailableWithOtherOptionsChanged","_mapFeatureIdToButton","_propertyBindingFeatures","_propertyBindingSelectedFeatures","_propertyBindingFeaturesAvailableWithOtherOptions","availableFeatureIds","isAvailableOption","WhatAreYouLookingForPrice","_minSliderRef","_maxSliderRef","_priceRangeChanged","_onSliderMinValueChanged","_onSliderMaxValueChanged","_handleClickButtonDone","_valueElement","_sliderMinWrapperElement","_sliderMaxWrapperElement","minPlotPrice","maxPlotPrice","_propertyBindingPriceRange","_firstBecomingVisible","currentPriceRange","WhatAreYouLookingForHouseType","_createSetHouseTypesButton","_houseTypesAvailableWithOtherOptionsChanged","_get_setHouseTypes","_houseTypesChanged","_mapHouseTypeViewModelToButton","_propertyBindingHouseTypes","_propertyBindingHouseTypesAvailableWithOtherOptions","SelectedOptionType","NBedrooms","PriceRange","Features","WhatAreYouLookingForViewModel","_availablePlots","siteJsonsUnitPlot","isAvailable","_setFilterInSiteCallback","_getPlotsAvailableWithOtherSelectedOptions","_createIsInPriceRangeLexicalClosure","_createNBedroomsAvailableWithOtherOptions","_createHouseTypesAvailableWithOtherOptions","_createPriceRangeAvailableWithOtherOptions","nBedroomsAvailableWithOtherOptions","houseTypesAvailableWithOtherOptions","featuresAvailableWithOtherOptions","priceRangeAvailableWithOtherOptions","selectedOptionTypeFor","plotsStillAvailable","siteJsonUnitPlotsForSite","Bedrooms","_isInPriceRange","selectedFeatureIds","oneOfEachPlotsStillAvailable","plotStillAvailable","_nBedroomsAvailableWithOtherOptions","mapHouseTypeToHouseTypeViewModel","_houseTypeViewModelsStillAvailable","_featuresAvailableWithOtherOptions","siteJsonsUnitPlots","_minPrice","_maxPrice","_priceRangeAvailableWithOtherOptions","nBedroomsFilterApplied","houseTypesFilterApplied","featuresFilterApplied","priceRangeFilterApplied","_nBedroomsValues","_createFeaturesAvailableWithOtherOptions","WhatAreYouLookingForContentType","FirstOptions","WhatAreYouLookingFor","_setContent","_visibleChanged","_titleElement","_contentElement","_whatAreYouLookingForNBeds","_whatAreYouLookingForFeatures","_whatAreYouLookingForPrice","_whatAreYouLookingForHouseType","_whatAreYouLookingForFirstOptions","ContentType","contentType","newContentElement","_currentContentElement","SitePlans","_sitePlansWrapperElement","_sitePlanSelectorMenu","_mapSiteSlugToSitePlanWrapper","_createSitePlan","_showPlotsExplanationDialog","_setupSiteSelectorMenu","_getSiteJsonsWithPlots","_loadSitesForSiteJsons","_getSetWindowVisibilityForSitePlan","_setFilterInSitesFromWhatAreYouLookingFor","_whatAreYouLookingFor","_spinnerWrapperElement","spinnerFactory","_spinnerHandleLoading","andElseOr","siteJsonsWithPlots","siteJsonsIterator","sitePlanWrappers","setWindowVisibilityForSitePlan","sitePlanWrapper","iteratorSiteJsons","doNextSiteJson","firstSitePlanWrapper","nExistingSitePlans","isFirst","Sentry","dsn","integrations","Integrations","BrowserTracing","tracesSampleRate","App","_appRef","_googleAnalytics","sitePlans","Boolean","StrictMode","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"wuMAAe,I,qBCEsBA,Y,gCCFhBC,E,kDACjB,WAAYC,EAASC,GAAa,IAAD,6BAChCA,GACFC,QAAQC,MAAMF,IACT,cAAMD,IACDI,KAAO,EAAKC,YAAYD,KAC7B,EAAKH,WAAaA,EACqB,oBAA5BK,MAAMC,kBACbD,MAAMC,kBAAN,eAA8B,EAAKF,aAEnC,EAAKG,MAAS,IAAIF,MAAMN,GAAUQ,MATT,E,sBADQF,QCCxBG,E,4HAAuBV,GCAvBW,E,8GACON,GACpB,MAAM,IAAIK,EAAJ,wBAAoCL,EAApC,qB,oCAEWA,GACjB,MAAM,IAAIK,EAAJ,yBAAqCL,EAArC,yB,qCAEYA,EAAMO,GACxB,MAAM,IAAIF,EAAJ,yBAAqCL,EAArC,8BAA+DO,EAA/D,U,cCROC,E,4HAAmBb,G,SCGxCc,UAAQC,kBACRD,UAAQE,OAAO,CACXC,UAAU,EACVF,iBAAiB,I,IAEAG,E,sGACDC,GAClB,QAASC,IAAND,GAAuB,OAANA,EAEnB,MAAM,IAAIT,EAAJ,kBAA8BS,IAE/B,OAAO,IAAIL,WAAQ,SAACO,EAASC,GAEzBC,MAAMJ,EAAK,CACnBK,OAAQ,MACRC,YAAa,cACbC,QAJa,CAAC,eAAgB,sBAK5BC,MAAK,SAACC,GACIA,EAASC,OAAOF,MAAK,SAACG,GAClBT,EAAQU,KAAKC,MAAMF,OACpBG,OAAM,SAACC,GACrBZ,EAAO,IAAIT,EAAJ,uCAAgDM,EAAhD,KAAyDe,e,+BAKjDf,GAClB,QAASC,IAAND,GAAuB,OAANA,EAEnB,MAAM,IAAIT,EAAJ,kBAA8BS,IAE/B,OAAO,IAAIL,WAAQ,SAACO,EAASC,GAEzBC,MAAMJ,EAAK,CACnBK,OAAQ,MACRC,YAAa,cACbC,QAJa,CAAC,eAAgB,sBAK5BC,MAAK,SAACC,GACIA,EAASC,OAAOF,MAAK,SAACG,GACjC,IAAMK,EAAOC,IAAKC,YAAYP,GAC9B3B,QAAQmC,IAAIH,GACGd,EAAQc,MACTF,OAAM,SAACC,GACrBZ,EAAO,IAAIT,EAAJ,sCAA+CM,EAA/C,KAAwDe,iB,KC/C/CK,E,qHAEcC,GAG3B,MAFuB,MAAnBA,EAAY,KACZA,EAAc,IAAMA,GAClB,GAAN,OAAWC,OAAOC,SAASC,QAA3B,OAAoCH,K,wDAECrB,GACrC,IAAMyB,EAAwBzB,EAAI0B,YAAY,KAC9C,OAAID,EAAwB,EACjB,CAAC,GAAIzB,GAET,CACHA,EAAI2B,UAAU,EAAGF,EAAwB,GACzCzB,EAAI2B,UAAUF,EAAwB,EAAGzB,EAAI4B,W,yCAE3B5B,GACtB,OAAY,OAARA,QAAwBC,IAARD,GAAmBA,EAAI4B,OAAO,GACtB,MAAxB5B,EAAIA,EAAI4B,OAAS,GADuC5B,EAErDA,EAAM,M,iCAEFA,EAAK6B,EAAeC,GAC/B,GAAY,OAAR9B,QAAwBC,IAARD,GAAmBA,EAAI4B,OAAO,EAAG,OAAO5B,EAC5D,GAA4B,MAAxBA,EAAIA,EAAI4B,OAAS,GAAY,OAAO5B,EAC9C,IACM+B,EAAuC,MADtB/B,EAAI,GAExB6B,EACEE,IACH/B,EAAM,IAAIA,GAGP+B,IACH/B,EAAMA,EAAI2B,UAAU,EAAG3B,EAAI4B,OAAO,IAEpC,IACMI,EAAqC,MADrBhC,EAAIA,EAAI4B,OAAO,GAUrC,OARGE,EACEE,IACHhC,GAAU,KAGRgC,IACFhC,EAAMA,EAAI2B,UAAU,EAAG3B,EAAI4B,OAAO,IAE7B5B,I,uCAEmBA,GACpB,OAAY,OAARA,QAAwBC,IAARD,GAAmBA,EAAI4B,OAAO,EAAU5B,EAC7C,MAAXA,EAAI,GAAmBA,EAAI2B,UAAU,EAAG3B,EAAI4B,QACzC5B,M,KChDRiC,EAAkCzC,EAAlCyC,iBAAkBC,EAAgB1C,EAAhB0C,eACJC,E,WACpB,aAAc,oBACbC,KAAKC,eAAe,GACpBD,KAAKE,gBAAgB,GACrBF,KAAK5B,KAAO4B,KAAK5B,KAAK+B,KAAKH,MAC3BA,KAAKtB,MAAQsB,KAAKtB,MAAMyB,KAAKH,MAC7BA,KAAKI,OAASJ,KAAKI,OAAOD,KAAKH,MAC/BA,KAAKK,QAAUL,KAAKK,QAAQF,KAAKH,M,iDAE7BM,GAEJ,OADAN,KAAKC,eAAeM,KAAKD,GAClBN,O,4BAEFQ,GAIL,YAHmB3C,IAAhB2C,GAA2C,OAAhBA,GAAqBX,EAAiB,iBACzC,oBAAjBW,GAA4BV,EAAe,gBAAiB,YACtEE,KAAKE,gBAAgBK,KAAKC,GACnBR,O,+BAIP,IADA,IAAMS,EAAgBT,KAAKC,eACrBQ,EAAcjB,OAAO,GAC3B,CACC,IAAMc,EAAeG,EAAcC,OAAO,EAAG,GAAG,GAChD,IACCJ,EAAaK,MAAM,KAAMC,WAE1B,MAAMjC,GACL/B,QAAQC,MAAM8B,O,8BAITA,GAEP,IADA,IAAMkC,EAAiBb,KAAKE,gBACtBW,EAAerB,OAAO,GAC5B,CACC,IAAMgB,EAAgBK,EAAeH,OAAO,EAAG,GAAG,GAClD,IACCF,EAAc7B,GAEf,MAAMA,GACL/B,QAAQC,MAAM8B,S,aC1CHmC,EADgB,CAACC,IAAI,EAAGC,IAAI,EAAGC,IAAI,GCC3CpB,EAAkBzC,EAAlByC,iBACcqB,E,WAIpB,WAAYC,GAAO,wBACXC,EAAyDD,EAAzDC,gBAAiBC,EAAwCF,EAAxCE,yBAA0BC,EAAcH,EAAdG,gBAClCzD,IAAbyD,GAAqC,OAAbA,GAC1BzB,EAAiB,mBACGhC,IAAlBuD,GAA+C,OAAlBA,GAC/BvB,EAAiB,mBAClBG,KAAKuB,YAAcD,EACnBtB,KAAKwB,iBAAiBJ,EACtBpB,KAAKyB,0BAA0BJ,E,0EAV/B,MAAO,yB,qDAaP,OAAOrB,KAAKwB,mB,+CAGZ,OAAOxB,KAAKyB,4B,iCAGZ,OAAOzB,KAAKuB,e,0CAEcD,EAAYI,GAEtC,OAAO,IAAIR,EAAwB,CAACI,WAAWA,EAC9CF,gBAFuBM,EAAQN,gBAEEC,yBAAyBK,EAAQL,+B,KC3BhDM,E,4HAA4BlF,GCA5BmF,E,4HAAmBnF,GCGlCoF,EAAa,CACfC,UAAU,EACVC,YAAY,EACZC,eAAe,EACfC,oBAAoB,EACvBC,SAAS,EAEVL,UAAuB,WACtB,OAAOM,OAAOC,OAAOP,GAAYQ,QAAO,SAAAC,GAAK,MAAkB,kBAATA,MAEvDT,eAA4B,SAASP,GACpC,GAAGA,IAAaO,EAAWC,UAC1B,MAAO,YACR,GAAIR,IAAaO,EAAWE,YAC3B,MAAO,cACR,GAAIT,IAAaO,EAAWG,eAC3B,MAAO,iBACR,GAAIV,IAAaO,EAAWI,oBAC3B,MAAO,OACR,GAAIX,IAAaO,EAAWK,SAC3B,MAAO,WACR,MAAM,IAAIP,EAAJ,+BAAgDL,EAAhD,OAEPO,WAAwB,SAASP,GAChC,GAAGA,IAAaO,EAAWC,UAC1B,MAAO,YACR,GAAIR,IAAaO,EAAWE,YAC3B,MAAO,cACR,GAAIT,IAAaO,EAAWG,eAC3B,MAAO,iBACR,GAAIV,IAAaO,EAAWI,oBAC3B,MAAO,sBACR,GAAIX,IAAaO,EAAWK,SAC3B,MAAO,WACR,MAAM,IAAIP,EAAJ,+BAAgDL,EAAhD,OAEPO,MAAmB,SAASP,GAC3B,GAAIA,IAAaO,EAAWC,UAC3B,MAAO,YACR,GAAIR,IAAaO,EAAWE,YAC3B,MAAO,aACR,GAAIT,IAAaO,EAAWG,eAC3B,MAAO,gBACR,GAAIV,IAAaO,EAAWI,oBAC3B,MAAO,oBACR,GAAIX,IAAaO,EAAWK,SAC3B,MAAO,WACR,MAAM,IAAIP,EAAJ,+BAAgDL,EAAhD,OAEPO,gCAA6C,SAASP,EAAYiB,GAChE,IAAMC,EAA0BD,EAAcE,yBAAyBC,kBAAkBpB,GACzF,MAAM,SAAN,cAAgBkB,QAAhB,IAAgBA,OAAhB,EAAgBA,EAAyBnB,2BAE3CQ,MAAmB,SAASS,GAC3B,QAAWzE,IAARyE,GAA2B,OAARA,EACrB,MAAMV,EAAW,kBAClB,GAAmB,kBAATU,EACT,OAAOT,EAAWc,gBAAgBL,GACnC,GAAmB,kBAATA,EACT,OAAOT,EAAWe,aAAaN,GAChC,MAAM,IAAIhF,EAAJ,iCAAyCgF,EAAzC,sBAEPT,gBAA6B,SAASS,GAErC,GAAY,eADZA,EAAQA,EAAMO,eAEb,OAAOhB,EAAWC,UACnB,GAAI,CAAC,cAAe,aAAc,cAAe,SAAU,QAAQgB,QAAQR,IAAQ,EAClF,OAAOT,EAAWE,YAEnB,GAAI,CAAC,iBAAkB,gBAAiB,iBAAkB,UAAUe,QAAQR,IAAQ,EACnF,OAAOT,EAAWG,eAEnB,GAAI,CAAC,sBAAuB,oBAAoB,sBAAuB,OAAQ,eAAec,QAAQR,IAAQ,EAC7G,OAAOT,EAAWI,oBAEnB,GAAI,CAAC,YAAYa,QAAQR,IAAQ,EAChC,OAAOT,EAAWK,SAEnB,MAAM,IAAIP,EAAJ,+BAAgDW,EAAhD,OAEPT,aAA0B,SAASS,GAClC,OAAOA,IAEOT,ICnFMkB,GADI3F,EAAlByC,iB,WAEN,WAAYsB,GAAO,wBACX6B,EAAM7B,EAAN6B,KACPhD,KAAKiD,MAAQD,EACbhD,KAAK0C,kBAAoB1C,KAAK0C,kBAAkBvC,KAAKH,MACrDA,KAAKkD,gBAAkBlD,KAAKkD,gBAAgB/C,KAAKH,M,8DAEhCsB,GACjB,IAAI,IAAI6B,EAAE,EAAGA,EAAEnD,KAAKiD,MAAMzD,OAAQ2D,IAAI,CACrC,IAAMX,EAA0BxC,KAAKiD,MAAME,GAC3C,GAAGX,EAAwBlB,aAAaA,EACvC,OAAOkB,EAET,OAAO,O,wCAIP,IADA,IAAIY,EAAK,CAAC,WACFD,EAAE,EAAGA,EAAEnD,KAAKiD,MAAMzD,OAAQ2D,IAAI,CACrC,IAAMX,EAA0BxC,KAAKiD,MAAME,GACrCE,EAAgBxB,EAAWyB,WAAWd,EAAwBlB,YACpE8B,EAAK7C,KAAL,YAAe8C,GAAf,OAA+BnC,EAAwBqC,yBAAvD,YAAmFf,EAAwBpB,gBAA3G,MAID,OAFAgC,EAAK7C,KAAK,KAEH6C,EAAKI,KAAK,S,gCAEF9B,GACf,IAAMe,EAA2B,GACjC,IAAI,IAAIgB,KAAO/B,EAAQ,CACtB,IAAMJ,EAAaO,EAAWpD,MAAMgF,GACpChB,EAAyBlC,KAAKW,EAAwBwC,mBAAmBpC,EAAYI,EAAQ+B,KAE9F,OAAO,IAAIV,EAAyB,CAACC,KAAKP,Q,MCnCrC5C,EAAkBzC,EAAlByC,iBACc8D,E,WACpB,WAAYxC,GAAO,wBACZyC,EAAkCzC,EAAlCyC,eAAgBC,EAAkB1C,EAAlB0C,oBACFhG,IAAjB+F,GAA6C,OAAjBA,GAC9B/D,EAAiB,uBACEhC,IAAjBgG,GAA6C,OAAjBA,GAC9BhE,EAAiB,kBAClBG,KAAK8D,gBAAkBF,EACvB5D,KAAK+D,gBAAgBF,E,2DAGrB,OAAO7D,KAAK8D,kB,qCAGZ,OAAO9D,KAAK+D,mB,gCAEIrC,GAChB,OAAO,IAAIiC,EAAsB,CAACC,eAAelC,EAAQkC,eAAgBC,eAAenC,EAAQmC,qB,KCf3FhE,EAAkBzC,EAAlByC,iBACcmE,E,WACpB,WAAY7C,GAAO,wBACXsB,EAYkEtB,EAZlEsB,yBAA0BwB,EAYwC9C,EAZxC8C,wBAAyBC,EAYe/C,EAZf+C,sBACzDC,EAWwEhD,EAXxEgD,4BAA6BC,EAW2CjD,EAX3CiD,+BAC7BC,EAUwElD,EAVxEkD,+BAAgCC,EAUwCnD,EAVxCmD,uBAAyBC,EAUepD,EAVfoD,UAAWC,EAUIrD,EAVJqD,qBACpEC,EASwEtD,EATxEsD,4BAA6BC,EAS2CvD,EAT3CuD,mBAAoBC,EASuBxD,EATvBwD,4BACjDC,EAQwEzD,EARxEyD,SAAUC,EAQ8D1D,EAR9D0D,SAAUC,EAQoD3D,EARpD2D,0BAA6CC,GAQO5D,EARzB6D,iBAQyB7D,EARP4D,qBAAqBE,EAQd9D,EARc8D,YAAaC,EAQ3B/D,EAR2B+D,4BACnGC,EAOwEhE,EAPxEgE,mBAAoBC,EAOoDjE,EAPpDiE,cAAeC,EAOqClE,EAPrCkE,iBAAkBC,EAOmBnE,EAPnBmE,eACrDC,EAMwEpE,EANxEoE,wDAAyDC,EAMerE,EANfqE,qBACzDC,EAKwEtE,EALxEsE,sBAAuBC,EAKiDvE,EALjDuE,2DACvBC,EAIwExE,EAJxEwE,2BAA4BC,EAI4CzE,EAJ5CyE,iBAAkBC,EAI0B1E,EAJ1B0E,0BAC9CC,EAGwE3E,EAHxE2E,oBAAqBC,EAGmD5E,EAHnD4E,yBAA0BC,EAGyB7E,EAHzB6E,2CAC/CC,EAEwE9E,EAFxE8E,4BAA6BC,EAE2C/E,EAF3C+E,gBAAiBC,EAE0BhF,EAF1BgF,yBAA0BC,EAEAjF,EAFAiF,sBACxEC,EACwElF,EADxEkF,wBAAyBC,EAC+CnF,EAD/CmF,cAAeC,EACgCpF,EADhCoF,kCACxCC,EAAwErF,EAAxEqF,2CAA4CC,EAA4BtF,EAA5BsF,8BACf5I,IAA3B4E,GAAiE,OAA3BA,GACxC5C,EAAiB,4BAClBG,KAAK0G,eAAiBJ,EACtBtG,KAAK2G,0BAA4BlE,EACjCzC,KAAK4G,yBAA0B3C,EAC/BjE,KAAK6G,uBAAwB3C,EAC7BlE,KAAK8G,6BAA+B3C,EACpCnE,KAAK+G,gCAAkC3C,EACvCpE,KAAKgH,gCAAkC3C,EACvCrE,KAAKiH,wBAA0B3C,EAC/BtE,KAAKkH,WAAa3C,EAClBvE,KAAKmH,sBAAwB3C,EAC7BxE,KAAKoH,6BAA8B3C,EACnCzE,KAAKqH,oBAAsB3C,EAC3B1E,KAAKsH,6BAA6B3C,EAClC3E,KAAKuH,UAAY1C,EACjB7E,KAAKwH,2BAA6B1C,EAClC9E,KAAKyH,qBAAuB1C,EAC5B/E,KAAK0H,aAAezC,EACpBjF,KAAK2H,6BAA+BzC,EACpClF,KAAK4H,oBAAsBzC,EAC3BnF,KAAK6H,eAAiBzC,EACtBpF,KAAK8H,kBAAoBzC,EACzBrF,KAAK+H,UAAWnD,EAChB5E,KAAKgI,gBAAiB1C,EACtBtF,KAAKiI,yDAA2D1C,EAChEvF,KAAKkI,sBAAwB1C,EAC7BxF,KAAKmI,uBAAyB1C,EAC9BzF,KAAKoI,4DAA8D1C,EACnE1F,KAAKqI,4BAA8B1C,EACnC3F,KAAKsI,kBAAoB1C,EACzB5F,KAAKuI,2BAA6B1C,EAClC7F,KAAKwI,qBAAqB1C,EAC1B9F,KAAKyI,0BAA4B1C,EACjC/F,KAAK0I,4CAA8C1C,EACnDhG,KAAK2I,6BAA8B1C,EACnCjG,KAAK4I,iBAAmB1C,EACxBlG,KAAK6I,yBAA2BxC,EAChCrG,KAAK8I,0BACsB,IAA3B3C,EACCrF,EAAyBE,IAEE,IAA3BmF,EAA6BrF,EAAyBG,IAAIH,EAAyBC,IAEpFf,KAAK+I,uBAAyB3C,EAC9BpG,KAAKgJ,mCAAqCzC,EAC1CvG,KAAKiJ,iDAAyFpL,IAA7C2I,GAAwDA,EACzGxG,KAAKkJ,+BAAqDrL,IAA3B4I,GAAsCA,E,qEAIrE,OAAOzG,KAAKkJ,4B,iEAGZ,OAAOlJ,KAAKiJ,8C,8CAGZ,OAAOjJ,KAAK6I,2B,4CAGZ,OAAO7I,KAAK+I,yB,+CAGZ,OAAO/I,KAAK8I,4B,sCAGZ,OAAO9I,KAAK4I,mB,kDAGZ,OAAO5I,KAAK2I,8BAAmE,YAArCzJ,OAAOC,SAASgK,KAAKC,MAAM,KAAK,K,iEAG1E,OAAOpJ,KAAK0I,8C,+CAGZ,OAAO1I,KAAKyI,4B,gDAGZ,OAAOzI,KAAKuI,6B,iDAGZ,OAAOvI,KAAKqI,8B,4CAGZ,OAAOrI,KAAKmI,yB,2CAGZ,OAAOnI,KAAKkI,wB,8EAGZ,OAAOlI,KAAKiI,2D,uCAGZ,OAAOjI,KAAK8H,oB,qCAGZ,OAAO9H,KAAKgI,kB,oCAGZ,OAAOhI,KAAK6H,iB,+BAGZ,OAAO7H,KAAK+H,Y,+BAGZ,OAAO/H,KAAKuH,Y,gDAGX,OAAOvH,KAAKwH,6B,kDAIb,OAAOxH,KAAK2H,+B,yCAGZ,OAAO3H,KAAK4H,sB,+CAGZ,OAAO5H,KAAK2G,4B,4CAGZ,OAAO3G,KAAKqJ,yB,8CAGZ,OAAOrJ,KAAK4G,2B,4CAGZ,OAAO5G,KAAK6G,yB,kDAGZ,OAAO7G,KAAK8G,+B,qDAGZ,OAAO9G,KAAK+G,kC,gHAGZ,OAAO/G,KAAKsJ,6F,qDAGZ,OAAOtJ,KAAKgH,kC,6CAGZ,OAAOhH,KAAKiH,0B,gCAGZ,OAAOjH,KAAKkH,a,2CAGZ,OAAOlH,KAAKmH,wB,kDAGZ,OAAOnH,KAAKoH,+B,yCAGZ,OAAOpH,KAAKqH,sB,kDAGZ,OAAOrH,KAAKsH,+B,0CAGZ,OAAOtH,KAAKyH,uB,kCAGZ,OAAOzH,KAAK0H,e,iFAGZ,OAAO1H,KAAKoI,8D,uCAGZ,OAAOpI,KAAKsI,oB,0CAGZ,OAAOtI,KAAKwI,uB,oCAGZ,OAAOxI,KAAK0G,iB,wDAGZ,OAAO1G,KAAKgJ,sC,gCAEGtH,GAAS,IAAD,EAEvB,OAAO,IAAIsC,GAAJ,GAAmBvB,yBADOM,EAAyBwG,SAAS7H,EAAQ8H,cAE1EvF,wBAAwBvC,EAAQuC,wBAAyBC,sBAAsBxC,EAAQwC,sBACvFC,4BAA4BzC,EAAQyC,4BACpCC,+BAA+B1C,EAAQ0C,+BACvCqF,0FACC/H,EAAQ+H,0FACTpF,+BAA+B3C,EAAQ2C,+BACvCC,uBAAuB5C,EAAQ4C,uBAC/BC,UAAU7C,EAAQ6C,UAClBC,qBAAqB9C,EAAQ8C,qBAC7BC,4BAA4B/C,EAAQ+C,4BACpCC,mBAAmBhD,EAAQgD,mBAC3BC,4BAA4BjD,EAAQiD,4BACpCC,SAASlD,EAAQkD,SACjBC,SAASnD,EAAQmD,SACjBC,0BAA0BpD,EAAQoD,0BAClCC,oBAAoBrD,EAAQqD,oBAC5BE,YAAYvD,EAAQuD,YACpBC,4BAA4BxD,EAAQwD,4BACpCC,mBAAmBzD,EAAQyD,mBAC3BC,cAAc1D,EAAQ0D,cACtBC,iBAAiB3D,EAAQ2D,iBACzBG,qBAAqB9D,EAAQ8D,qBAC7BF,eAAe5D,EAAQ4D,eACvBC,wDAAwD7D,EAAQ6D,wDAChEE,sBAAsB/D,EAAQ+D,sBAC9BC,2DAA2DhE,EAAQgE,2DACnEC,2BAA2BjE,EAAQiE,2BACnCC,iBAAiBlE,EAAQkE,iBACzBC,0BAA0BnE,EAAQmE,0BAClCC,oBAAoBpE,EAAQoE,qBA9BtB,oCA+BcpE,EAAQoE,qBA/BtB,yCAgCmBpE,EAAQqE,0BAhC3B,2DAiCqCrE,EAAQsE,4CAjC7C,4CAkCsBtE,EAAQuE,6BAlC9B,gCAmCUvE,EAAQwE,iBAnClB,yCAoCmBxE,EAAQyE,0BApC3B,sCAqCgBzE,EAAQ0E,uBArCxB,wCAsCkB1E,EAAQ2E,yBAtC1B,8BAuCQ3E,EAAQ4E,eAvChB,kDAwC4B5E,EAAQ6E,mCAxCpC,2DAyCqC7E,EAAQ8E,4CAzC7C,yCA0CmB9E,EAAQ+E,0BA1C3B,Q,KCzMYiD,E,WACpB,WAAYC,GAAS,oBACpB3J,KAAK4J,SAAWD,E,oDAGhB,OAAO3J,KAAK4J,Y,gCAEGC,EAAQC,GAEvB,OAAO,IAAIJ,EADK,CAACI,GAAsBC,OAAOF,EAAOG,KAAI,SAAAC,GAAoB,OAAEjG,EAAcuF,SAASU,Y,KCRzFC,EADI,CAAEC,SAIrB,SAAkB7H,GACd,QAAczE,IAAVyE,GAAiC,OAAVA,EAAgB,OAAO,EAClD,GAAuB,kBAAXA,KAOa8H,EANI9H,GAOrB+H,MAAMC,KACVF,EAAIC,MAAME,GARuB,OAAO,EAMhD,IAA6BH,EAJzB,IAAMI,EAASC,WAAWnI,GAC1B,OAAIoI,MAAMF,KARRF,EAAyB,UACzBC,EAA2B,e,ICDzBI,EAAqBvN,EAArBuN,iBACaC,E,WACjB,WAAYzJ,GAAQ,wBACR0J,EAAS1J,EAAT0J,EAAGC,EAAM3J,EAAN2J,EACNZ,EAAWC,SAASU,IAAIF,EAAiB,KACzCT,EAAWC,SAASW,IAAIH,EAAiB,KAC9C3K,KAAK+K,GAAKF,EACV7K,KAAKgL,GAAKF,EAChB9K,KAAKiL,QAAUjL,KAAKiL,QAAQ9K,KAAKH,M,sDASjC,MAAO,CAACA,KAAK+K,GAAI/K,KAAKgL,M,wBANhB,OAAOhL,KAAK+K,K,wBAGZ,OAAO/K,KAAKgL,M,iCAKCE,GACb,OAAO,IAAIN,EAAQ,CACfC,EAAGK,EAAI,GACPJ,EAAGI,EAAI,O,8BAGAC,GACX,OAAO,IAAIP,EAAQO,O,KC1BnBrL,EAAmB1C,EAAnB0C,eACasL,E,WACjB,WAAYjK,GAAQ,wBACR0J,EAAY1J,EAAZ0J,EAAGC,EAAS3J,EAAT2J,EAAGO,EAAMlK,EAANkK,EACTnB,EAAWC,SAASU,IAAI/K,EAAe,IAAK,UAC5CoK,EAAWC,SAASW,IAAIhL,EAAe,IAAK,UAC5CoK,EAAWC,SAASkB,IAAIvL,EAAe,IAAK,UACjDE,KAAK+K,GAAKF,EACV7K,KAAKgL,GAAKF,EACV9K,KAAKsL,GAAKD,EAChBrL,KAAKiL,QAAUjL,KAAKiL,QAAQ9K,KAAKH,M,sDAYjC,MAAO,CAACA,KAAK+K,GAAI/K,KAAKgL,GAAIhL,KAAKsL,M,wBATzB,OAAOtL,KAAK+K,K,wBAGZ,OAAO/K,KAAKgL,K,wBAGZ,OAAOhL,KAAKsL,M,iCAKCJ,GACb,OAAO,IAAIE,EAAQ,CACfP,EAAGK,EAAI,GACPJ,EAAGI,EAAI,GACPG,EAAGH,EAAI,O,8BAGAC,GACX,OAAO,IAAIC,EAAQD,O,KC/BnBtL,EAAqCzC,EAArCyC,iBAAkBC,EAAmB1C,EAAnB0C,eACLyL,E,WACjB,WAAYpK,GAAQ,wBACRqK,EAAgCrK,EAAhCqK,SAAUC,EAAsBtK,EAAtBsK,SAAUC,EAAYvK,EAAZuK,QAEvBF,GACD3L,EAAiB,aAChB2L,aAAoBJ,GACrBtL,EAAe,WAAYsL,EAAQrO,YAAYD,MACnDkD,KAAK2L,UAAYH,EAGZC,GACD5L,EAAiB,aAChB4L,aAAoBL,GACrBtL,EAAe,WAAYsL,EAAQrO,YAAYD,MACnDkD,KAAK4L,UAAYH,EAGZC,GACD7L,EAAiB,YAChB6L,aAAmBN,GACpBtL,EAAe,UAAWsL,EAAQrO,YAAYD,MAClDkD,KAAK6L,SAAWH,EACtB1L,KAAK8L,OAAS9L,KAAK8L,OAAO3L,KAAKH,M,qDAY/B,MAAO,CACNwL,SAASxL,KAAK2L,UAAUV,UACxBQ,SAASzL,KAAK4L,UAAUX,UACxBS,QAAQ1L,KAAK6L,SAASZ,a,+BAZjB,OAAOjL,KAAK2L,Y,+BAGZ,OAAO3L,KAAK4L,Y,8BAGZ,OAAO5L,KAAK6L,Y,gCASAV,GACZ,OAAO,IAAII,EAAS,CAChBC,SAAUJ,EAAQW,UAAUZ,EAAIK,UAChCC,SAAUL,EAAQW,UAAUZ,EAAIM,UAChCC,QAASN,EAAQW,UAAUZ,EAAIO,a,mCAInC,OAAO,IAAIH,EAAS,CAChBC,SAAUJ,EAAQW,UAAU,CAAC,EAAE,EAAE,IACjCN,SAAUL,EAAQW,UAAU,CAAC,EAAE,EAAE,IACjCL,QAASN,EAAQW,UAAU,CAAC,EAAE,EAAE,U,KCxDvBC,E,2GAEnB,OAAOC,M,KCCYC,E,oHAUnB,OAAOF,EAAYG,cAAZ,UAA6BD,EAAKE,KAAlC,uBAA4DC,GAAc9J,cAAciC,uB,kCAE7EjC,GAClB,OAAOyJ,EAAYG,cAAZ,UAA6BD,EAAKE,KAAlC,aAAkDpN,EAAUsN,mBAAmB/J,EAAc0C,e,wCAE5E1C,GACxB,MAAM,GAAN,OAAU2J,EAAKK,YAAYhK,GAA3B,mCAAoEA,EAAcuC,0BAA0BvC,EAAcuC,0BAA0BvC,EAAcsC,Y,kDAEpG,IAA9BtC,EAA6B,EAA7BA,cAAeiK,EAAc,EAAdA,aAC/C,MAAM,GAAN,OAAUN,EAAKE,KAAf,kBAA6B7J,EAAcsC,SAA3C,YAAuD2H,K,qDAGvD,MAAM,GAAN,OAAUN,EAAKO,uBAAf,+B,uCAKuB5H,GACvB,MAAM,GAAN,OAAUqH,EAAKE,KAAf,kBAA6BvH,EAA7B,O,6CAMA,MAAM,GAAN,OAAUqH,EAAKQ,OAAf,wB,8BAEcC,GACd,OAAOT,EAAKU,WAAWD,I,2DAGvB,MAAM,GAAN,OAAUT,EAAKO,uBAAf,mB,oEAGA,MAAM,GAAN,OAAUP,EAAKO,uBAAf,4B,gDAEgCI,EAAMtK,GAAe,IAAD,IAC9CwC,EAAsBxC,EAAcwC,oBAC1C,GAAGA,EAEF,MAAM,GAAN,OAASA,GAAT,OAA+B8H,EAAKrC,QAErC,IAAI5M,EAAG,UAAGiP,EAAKC,iBAAR,aAAG,EAAgBC,gBAG1B,OAFGnP,EAAKA,GAAG,gBAAYiP,EAAKrC,QACvB5M,EAAG,UAAGiP,EAAKC,iBAAR,aAAG,EAAgBE,QACpBpP,I,uCAEgB2E,GACvB,OAAO2J,EAAKe,iBAAiB1K,EAAcsC,UAAU,Q,oCAEjCtC,GACpB,OAAO2J,EAAKe,iBAAiB1K,EAAcsC,UAAU,iB,iCAGrD,OAAOqH,EAAKQ,S,kCAEMnK,GAClB,OAAO2J,EAAKe,iBAAiB1K,EAAcsC,UAAU,c,kCAhErD,IAAMqI,EAAehO,OAAOC,SAASgO,KACrC,OAAOnB,EAAYG,cAAc,MAAsB,KAAfe,EAAkB,KAAKA,I,2BAG/D,IAAME,EAAuC,OAAnBlB,EAAKmB,YAAL,WAA4BnB,EAAKmB,aAAc,GACzE,MAAM,GAAN,OAAUnO,OAAOC,SAASmO,SAA1B,aAAuCpO,OAAOC,SAASoO,UAAvD,OAAkEH,EAAlE,O,6BAkBA,MAAM,GAAN,OAAUlB,EAAKE,KAAf,kBAA6BC,GAAc9J,cAAcsC,SAAzD,O,6BAMA,OAAOqH,EAAKQ,OAAO,c,cC8CNc,EAhFK,SAAUrC,GAE7BA,EAAIsC,iBAAmB,SAAUpQ,EAAMqQ,QAEf7P,GAAnBmC,KAAK2N,aACR3N,KAAK2N,WAAa,IACnB,IAAIC,EAAY5N,KAAK2N,gBAEE9P,GAAnB+P,EAAUvQ,KACbuQ,EAAUvQ,GAAQ,KAGwB,GAAvCuQ,EAAUvQ,GAAMyF,QAAQ4K,IAE3BE,EAAUvQ,GAAMkD,KAAKmN,IAKvBvC,EAAI0C,iBAAmB,SAAUxQ,EAAMqQ,GAEtC,QAAuB7P,GAAnBmC,KAAK2N,WAAyB,OAAO,EAEzC,IAAIC,EAAY5N,KAAK2N,WAErB,YAAwB9P,IAApB+P,EAAUvQ,KAA+D,IAAxCuQ,EAAUvQ,GAAMyF,QAAQ4K,IAU9DvC,EAAI2C,oBAAsB,SAAUzQ,EAAMqQ,GAEzC,QAAuB7P,GAAnBmC,KAAK2N,WAAT,CAEA,IACII,EADY/N,KAAK2N,WACStQ,GAE9B,QAAsBQ,IAAlBkQ,EAA6B,CAEhC,IAAIC,EAAQD,EAAcjL,QAAQ4K,IAElB,IAAZM,GAEHD,EAAcrN,OAAOsN,EAAO,MAQ/B7C,EAAI8C,cAAgB,SAAUC,GAC7B,QAAuBrQ,GAAnBmC,KAAK2N,WAAT,CAEA,IACII,EADY/N,KAAK2N,WACSO,EAAM7Q,MAEpC,QAAsBQ,IAAlBkQ,EAA6B,CAEhCG,EAAMC,OAASnO,KACf,IAAIoO,EAAQ,GAAIjL,EAAI,EAChB3D,EAASuO,EAAcvO,OAE3B,IAAK2D,EAAI,EAAGA,EAAI3D,EAAQ2D,IACvBiL,EAAMjL,GAAK4K,EAAc5K,GAE1B,IAAKA,EAAI,EAAGA,EAAI3D,EAAQ2D,IACvBiL,EAAMjL,GAAGkL,KAAKrO,KAAMkO,OCvEHI,G,WACpB,WAAYxR,EAAMyR,EAAaC,GAAS,oBACvCxO,KAAKyO,aAAeF,EACpBvO,KAAK0O,SAAWF,EAChBxO,KAAK2O,WAAY,EACjB3O,KAAK4O,eAAe5O,KAAK4O,eAAezO,KAAKH,MAC7CA,KAAK6O,gBAAkB7O,KAAK6O,gBAAgB1O,KAAKH,MACjDA,KAAKwO,QAASxO,KAAKwO,QAAQrO,KAAKH,MAChCA,KAAK8O,iBAAkB9O,KAAK8O,iBAAiB3O,KAAKH,MAClDwN,EAAYxN,M,6DAGZ,OAAOA,KAAKyO,e,sCAEGnM,GACftC,KAAKyO,aAAanM,K,gCAGftC,KAAK2O,YACR3O,KAAK2O,WAAY,EACjB3O,KAAK8O,sB,yCAGL9O,KAAKiO,cAAc,CAAC5Q,KAAK,UAAW0R,QAAQ/O,W,KCvB/B,SAASgP,GAASlS,EAAMiS,GACtCvB,EAAYxN,MACZ,IAAIiP,EAAOjP,KACPkP,GAAW,EACXlM,EAAO,GASX,SAASwL,IACLU,IACHA,GAAW,EACXlM,EAAKmM,QAAQC,SAAQ,SAACL,GACrBA,EAAQP,aAsBTS,EAAKhB,cAAc,CAAC5Q,KAAK,UAAWgS,SAASJ,KAX9C,SAASK,EAAgBC,GACxBC,EAAcD,EAAER,SAEjB,SAASS,EAAcT,GACtB,IAAIf,EAAQhL,EAAKF,QAAQiM,GACtBf,EAAM,IACThL,EAAKtC,OAAOsN,EAAO,GAChBhL,EAAKxD,OAAO,GACfgP,KA/BDxO,KAAKyP,IAgBL,SAAaV,IAIb,SAA0BA,GACzBA,EAAQtB,iBAAiB,UAAW6B,IAJpCI,CAAiBX,GACjB/L,EAAKzC,KAAKwO,IAjBX/O,KAAK2P,QAAU,WACd,OAAO3M,GAERhD,KAAKwO,QAAUA,EACfxO,KAAK4P,OAASJ,EACXT,GACFE,EAAKQ,IAAIV,GCZI,SAASc,GAAqB/S,EAAMiS,GACjD,IACIM,EAAW,IAAIL,GAASlS,EAAMiS,GAelC,SAASe,EAAiBvB,GAEzB,IADA,IACaQ,EADPgB,EAAeV,EAASM,UACtBxM,EAAE,EAAY4L,EAAQgB,EAAa5M,GAAIA,IAC9C,GAAG4L,EAAQH,kBAAkBL,EAC5B,OAAOQ,EAlBV/O,KAAKgQ,oBAAoB,SAASzB,GACjC,QAAOuB,EAAiBvB,IAEzBvO,KAAK8P,iBAAmBA,EACxB9P,KAAKiQ,QAAS,SAAS3N,GACtB+M,EAASM,UAAUP,SAAQ,SAACL,GAC3BA,EAAQF,gBAAgBvM,OAG1BtC,KAAKyP,IAAMJ,EAASI,IACpBzP,KAAK2P,QAAUN,EAASM,QACxB3P,KAAKwO,QAAUa,EAASb,QACxBxO,KAAKyN,iBAAmB4B,EAAS5B,iBACjCzN,KAAK8N,oBAAsBuB,EAASvB,oBCZvB,SAASoC,GAAgBC,GAAO,IAAD,OAEvCC,EAAyB,GA4C/B,SAASC,EAA6Bd,GACrC,IAAIzS,EAAOyS,EAAEF,SAASiB,UACnBF,EAAuBtT,WAClBsT,EAAuBtT,GA9ChCqT,EAAMhQ,KAAO,SAACrD,EAAMyR,GACnB,IACIgC,EAmCL,SAAyBC,GACpBA,EAAKnB,WACRmB,EAAKnB,SAAW,IAAIL,IAErB,OAAOwB,EAAKnB,SAvCOoB,CADR,GAEPpB,EAAWe,EAAuBtT,GACtC,IAAIuS,EAAS,CACZ,IAAMN,EAAU,IAAIT,GAAQxR,EAAMyR,GAClCgC,EAAad,IAAIV,GACjB,IAAM2B,EAAgB,IAAIb,GAAqB/S,EAAMiS,GAGrD,OAFA2B,EAAcjD,iBAAiB,UAAW4C,GAC1CD,EAAuBtT,GAAM4T,EACtBH,EAER,GAAGlB,EAASW,oBAAoBzB,GAAa,OAAO,EACpD,IAAMQ,EAAU,IAAIT,GAAQxR,EAAMyR,GAGlC,OAFAgC,EAAad,IAAIV,GACjBM,EAASI,IAAIV,GACNwB,GAERJ,EAAMQ,OAAS,SAAC7T,EAAMyR,GACrB,IAAIc,EAAWe,EAAuBtT,GACtC,GAAIuS,EAAJ,CACA,IAAIN,EAAUM,EAASS,iBAAiBvB,GACpCQ,GACJA,EAAQP,YAETxO,KAAKiQ,QAAU,SAASnT,EAAMwF,GAC7B,IAAI+M,EAAYe,EAAuBtT,GACnCuS,GACJA,EAASY,QAAQ3N,IAElBtC,KAAKwO,QAAS,WACb,IAAI,IAAIrL,KAAKiN,EAAuB,CACfA,EAAuBjN,GAC7BqL,UAEO,sCAAtB4B,EAAuB,ICxCV,SAASQ,GAAqBT,GAC5C,OAAGA,EAAMU,kBACTV,EAAMU,gBAAkB,IAAIX,GAAgBC,IADZA,EAAMU,gBCJxB,SAASC,GAAsB1G,GAC7C,OAAOA,EAAI2G,OAAO,EAAG,GAAGC,cAAc5G,EAAI2G,OAAO,EAAG3G,EAAI5K,OAAO,G,ICA3CyR,G,2GAECC,GACpB,OAAOD,EAAeE,eAAeL,GAAsBI,M,oCAEvCA,GACpB,OAAOD,EAAeG,eAAeN,GAAsBI,M,gCAE3Cf,EAAOe,GACvB,QAAOf,EAAMc,EAAeE,eAAeL,GAAsBI,O,0CAEvC/F,EAAKgF,EAAOkB,GAQtC,OAPIlG,IAAIA,EAAI,IACZkG,EAAcjC,SAAQ,SAAC8B,GACtB,IAAII,EAAaL,EAAeE,eAAeL,GAAsBI,IACjEjT,EAASkS,EAAMmB,GACnB,QAAYzT,IAATI,EAAmB,MAAM,IAAIjB,MAAM,iBAAiBmT,EAAMpT,YAAYD,KAAK,kBAAkBwU,GAChGnG,EAAI+F,GAAcjT,OAEZkN,I,4CAEqBA,EAAKgF,EAAOkB,GAOxC,OANAA,EAAcjC,SAAQ,SAAC8B,GACtB,IAAIK,EAAaN,EAAeG,eAAeN,GAAsBI,IACjEjT,EAASkS,EAAMoB,GACnB,QAAY1T,IAATI,EAAmB,MAAM,IAAIjB,MAAM,iBAAiBmT,EAAMpT,YAAYD,KAAK,kBAAkByU,GAChGtT,EAAOkN,EAAI+F,OAEL/F,I,qCAEcqG,GACrB,MAAO,MAAMA,I,qCAEQA,GACrB,MAAO,MAAMA,M,KC/BA,SAASC,GAActB,EAAOrT,EAAM4U,EAAWC,GAC7D,IAAML,EAAaL,GAAeW,cAAc9U,GAChD,QAAuBe,IAApBsS,EAAMmB,GAAwB,MAAM,IAAItU,MAAJ,+BAAmCF,EAAnC,yBACvC,IAAMyU,EAAaN,GAAeY,cAAc/U,GAChD,QAAuBe,IAApBsS,EAAMoB,GAAwB,MAAM,IAAIvU,MAAJ,+BAAmCF,EAAnC,yBACvCqT,EAAMmB,GAAYI,EAClBvB,EAAMoB,GAAYI,EAClBf,GAAqBT,G,ICLftQ,GAAkCzC,EAAlCyC,iBAAkBC,GAAgB1C,EAAhB0C,eACJgS,G,WAIpB,WAAY3Q,GAAO,IAAD,+BACX4Q,EAAyF5Q,EAAzF4Q,KAAMjV,EAAmFqE,EAAnFrE,KAAMkV,EAA6E7Q,EAA7E6Q,kBAAmBC,EAA0D9Q,EAA1D8Q,YAAa1P,EAA6CpB,EAA7CoB,cAAe2P,EAA8B/Q,EAA9B+Q,UAAWC,EAAmBhR,EAAnBgR,WAAYC,EAAOjR,EAAPiR,MACxF5E,EAAYxN,MACZ4Q,GAAqB5Q,WAGNnC,IAAZqU,GAAmC,OAAZA,GACzBrS,GAAiB,aAEK,kBAAbqS,GACTpS,GAAe,YAAa,UAC7BE,KAAKqS,WAAaH,EAClBlS,KAAKsS,YAAcH,EACnBnS,KAAKuS,OAASH,EACdxV,QAAQmC,IAAI,aAAaiB,KAAKuS,QAC9BvS,KAAKwS,aAAcP,EACnBjS,KAAKyS,eAAiBlQ,EACtBvC,KAAK0S,MAAQX,EACb/R,KAAK2S,MAAQ7V,EACbkD,KAAK4S,mBAAqBZ,EAC1BhS,KAAK6S,6BAA+Bf,EAAUgB,gCAAgChW,GAC9EkD,KAAK+S,iBAAmB,KACxB/S,KAAKgT,SAAW,KAChBhT,KAAKiT,UAAY,KACjBjT,KAAKkT,UAAY,GACjBzB,GAAczR,KAAM,WAAW,kBAAI,EAAKgN,WAAS,SAAC1K,GAAD,OAAS,EAAK0K,QAAU1K,KACzEtC,KAAKmT,UAAY,KACjB1B,GAAczR,KAAM,YAAY,kBAAI,EAAKoT,YAAU,SAAC9Q,GAAD,OAAS,EAAK8Q,SAAW9Q,KAC5EmP,GAAczR,KAAM,YAAY,kBAAI,EAAKqT,YAAU,SAAC/Q,GAAD,OAAS,EAAK+Q,SAAW/Q,KAC5EmP,GAAczR,KAAM,YAAY,kBAAI,EAAKsT,YAAU,SAAChR,GAAD,OAAS,EAAKgR,SAAWhR,K,0EA/B5E,MAAO,CAAC,IAAK,IAAK,IAAK,Q,sDAqCvB,OAAOtC,KAAK2S,Q,6CAuCZ,MAAM,GAAN,OAAUzG,EAAKe,iBAAiBjN,KAAKyS,eAAe5N,WAApD,OAAgE7F,EAAUuU,iBAAiBvT,KAAK4S,uB,kDA1ChG,OAAO5S,KAAK6S,+B,2BAMZ,OAAO7S,KAAK2S,Q,2BAGZ,OAAO3S,KAAK0S,Q,sCAGZ,OAAO1S,KAAK+S,kB,aAEOzQ,GACnBtC,KAAK+S,iBAAmBzQ,I,8BAGxB,OAAOtC,KAAKgT,U,aAKD1Q,GACKtC,KAAKgT,WAAW1Q,IAEhCtC,KAAKgT,SAAW1Q,EAChBtC,KAAK6Q,gBAAgBZ,QAAQ,UAAW3N,M,+BANxC,OAAOtC,KAAKmT,Y,+BASZ,OAAOnT,KAAKiT,W,aAEA3Q,GACItC,KAAKiT,YAAY3Q,IAEjCtC,KAAKiT,UAAY3Q,EACjBtC,KAAK6Q,gBAAgBZ,QAAQ,WAAY3N,M,4BAGzC,OAAOtC,KAAKwS,eAAegB,qBAAqBxT,Q,+BAMhD,OAAOA,KAAKkT,W,aAEA5Q,GACZ1F,QAAQmC,IAAI,0BACZnC,QAAQmC,IAAIuD,GACZtC,KAAKkT,UAAW5Q,EAChBtC,KAAK6Q,gBAAgBZ,QAAQ,YAC7BjQ,KAAKiO,cAAc,CAAC5Q,KAAK,kBAAmBiW,SAAStT,KAAKkT,c,gCAG1D,OAAOlT,KAAKqS,a,iCAGZ,OAAOrS,KAAKsS,c,4BAGZ,OAAOtS,KAAKuS,U,uDAE0BzV,GACtCA,EAAOA,EAAK+F,cACZ,IAAM4Q,EAAwB3B,EAAU4B,yBAClCC,EAAiB7W,EAAKsM,MAAM,IAAIwK,OAAO,IAAIH,EAAsBjQ,KAAK,IAAI,MAChF,GAAGmQ,EAAenU,OAAO,EAAE,OAAO1C,EAClC,IAAMsG,EAAK,GAMX,OALAqQ,EAAsBrE,SAAQ,SAACyE,GAC9B,IAAIzJ,EAAI,GACRuJ,EAAevE,SAAQ,SAAA0E,GAAa,OAAE1J,GAAK0J,KAC3C1Q,EAAK7C,KAAK6J,MAEJhH,I,+BAEQ1B,EAASuQ,EAAa1P,GACrC,OAAO,IAAIuP,EAAU,CACpBC,KAAKrQ,EAAQqQ,KACbjV,KAAK4E,EAAQ5E,KACbkV,kBAAkBtQ,EAAQsQ,kBAC1BC,cACA1P,gBACA2P,UAAUxQ,EAAQwQ,UAClBC,WAAWzQ,EAAQyQ,WACnBC,MAAM1Q,EAAQ0Q,Y,KC7HVvS,GAAkCzC,EAAlCyC,iBAAkBC,GAAgB1C,EAAhB0C,eACJiU,G,WACpB,WAAY5S,GAAO,wBACZ6B,EAAS7B,EAAT6B,KACNhD,KAAKgU,UAAYhU,KAAKgU,UAAU7T,KAAKH,WAC3BnC,IAAPmF,GAAyB,OAAPA,GAAYnD,GAAiB,QAC9CoU,MAAMC,QAAQlR,IAAMlD,GAAe,OAAQ,SAC/CE,KAAKiD,MAAQD,E,uDAGb,OAAOhD,KAAKiD,Q,gCAEH8O,GACT,IAAI,IAAI5O,EAAE,EAAGA,EAAEnD,KAAKiD,MAAMzD,OAAQ2D,IAAI,CACrC,IAAM2J,EAAY9M,KAAKiD,MAAME,GAC7B,GAAG2J,EAAUiF,OAAOA,EAAK,OAAOjF,EAEjC,OAAO,O,4BAYFxK,GACL,QAAWzE,IAARyE,GAA2B,OAARA,EAAa,MAAM,IAAIhF,EAAW,qCAExD,IADA,IAAM6W,EAAkB7R,EAAMO,cACtBM,EAAE,EAAGA,EAAEnD,KAAKiD,MAAMzD,OAAQ2D,IAAI,CACrC,IAAM2J,EAAY9M,KAAKiD,MAAME,GAC7B,GAAG2J,EAAUiF,OAAOzP,EACnB,OAAOwK,EACR,GAAGA,EAAUsH,4BAA4BtR,QAAQqR,IAAmB,EACnE,OAAOrH,EAET,MAAM,IAAIxP,EAAJ,2BAAmCgF,EAAnC,sB,gCApBS+R,EAAkBpC,EAAa1P,GAE9C,IADA,IAAM+R,EAAW,GACTnR,EAAE,EAAGA,EAAEkR,EAAiB7U,OAAQ2D,IAAI,CAC3C,IAAMoR,EAAmBF,EAAiBlR,GAC1CmR,EAAW/T,KAAKuR,GAAUvI,SAASgL,EAAkBtC,EAAa1P,IAEnE,OAAO,IAAIwR,EAAW,CACrB/Q,KAAKsR,Q,KC1BFE,GAAW,CAChBC,QAAQ,EACLC,QAAQ,EACRC,SAAS,EACTC,SAAS,EAEbJ,eAA0B,SAASK,GAClC,GAAGA,IAAWL,GAASC,QACtB,MAAO,UACR,GAAII,IAAWL,GAASE,QACvB,MAAO,UACR,GAAIG,IAAWL,GAASG,SACvB,MAAO,WACR,GAAIE,IAAWL,GAASI,SACvB,MAAO,WACR,MAAM,IAAIjT,EAAJ,+BAAgDkT,EAAhD,OAEPL,MAAiB,SAASK,GACzB,GAAIA,IAAWL,GAASC,QACvB,MAAO,UACR,GAAII,IAAWL,GAASE,QACvB,MAAO,UACR,GAAIG,IAAWL,GAASG,SACvB,MAAO,WACR,GAAIE,IAAWL,GAASI,SACvB,MAAO,UACR,MAAM,IAAIjT,EAAJ,+BAAgDkT,EAAhD,OAEPL,MAAiB,SAASlS,GACzB,QAAWzE,IAARyE,GAA2B,OAARA,EACrB,MAAMV,EAAW,kBAClB,GAAmB,kBAATU,EACT,OAAOkS,GAAS7R,gBAAgBL,GACjC,GAAmB,kBAATA,EACT,OAAOkS,GAAS5R,aAAaN,GAC9B,MAAM,IAAIhF,EAAJ,iCAAyCgF,EAAzC,oBAEPkS,gBAA2B,SAASlS,GAEnC,GAAY,aADZA,EAAQA,EAAMO,eAEb,OAAO2R,GAASC,QACjB,GAAY,YAARnS,EACH,OAAOkS,GAASE,QAEjB,GAAY,aAARpS,EACH,OAAOkS,GAASG,SAEjB,GAAK,CAAC,UAAW,WAAY,YAAY7R,QAAQR,IAAQ,EACxD,OAAOkS,GAASI,SAEjB,MAAM,IAAIjT,EAAJ,+BAAgDW,EAAhD,OAEPkS,aAAwB,SAASlS,GAChC,OAAOA,IAEOkS,MC1DMM,G,WACpB,WAAY3T,GAAO,oBAClBnB,KAAK+U,iBAAmB5T,EAAMqN,QAC9BxO,KAAKwO,QAAUxO,KAAKwO,QAAQrO,KAAKH,M,sDAGjCA,KAAK+U,iBAAiB/U,U,KCJHgV,G,WACpB,WAAY7T,GAAO,oBAClBqM,EAAYxN,MACZA,KAAKiV,SAAW,GAChBjV,KAAKkV,sBAAuB,EAC5BlV,KAAKmV,KAAOnV,KAAKmV,KAAKhV,KAAKH,MAC3BA,KAAK0O,SAAW1O,KAAK0O,SAASvO,KAAKH,MACnCA,KAAKoV,0BAA4BpV,KAAKoV,0BAA0BjV,KAAKH,MACrEA,KAAKqV,iBAAmBrV,KAAKqV,iBAAiBlV,KAAKH,M,mDAGnD,IAAMsV,EAAS,IAAIR,GAAO,CAACtG,QAAQxO,KAAK0O,WAGxC,OAFA1O,KAAKiV,SAAS1U,KAAK+U,GACnBC,WAAWvV,KAAKoV,0BAA2B,GACpCE,I,+BAKCA,GACR,IAAME,EAAUxV,KAAKiV,SACfjH,EAAQwH,EAAQ1S,QAAQwS,GAC3BtH,EAAM,IACTwH,EAAQ9U,OAAOsN,EAAO,GACtBhO,KAAKoV,+B,kDAGDpV,KAAKiV,SAASzV,OAAO,EAAIQ,KAAKkV,uBAEjClV,KAAKkV,sBAAsBlV,KAAKkV,qBAChCK,WAAWvV,KAAKqV,iBAAkB,M,yCAInCrV,KAAKiO,cAAc,CAAC5Q,KAAK,SAAUoY,WAAWzV,KAAKkV,yB,4BAjBnD,OAAOlV,KAAKiV,SAASzV,OAAO,M,KCRtBK,GAAoCzC,EAApCyC,iBAAkBC,GAAkB1C,EAAlB0C,eACL4V,G,WACpB,WAAYvU,GAAO,wBACX6M,EAAuB7M,EAAvB6M,MAAO2H,EAAgBxU,EAAhBwU,oBACH9X,IAARmQ,GAA2B,OAARA,GACrBnO,GAAiB,SAEC,kBAATmO,GACTlO,GAAe,QAAS,UACzBE,KAAK4V,OAAS5H,OAEMnQ,IAAjB8X,GAA+C,OAAjBA,GAChC9V,GAAiB,kBAClBG,KAAK6V,gBAAkBF,E,qDASvB,MAAM,IAAI3Y,MAAM,qB,4BANb,OAAOgD,KAAK4V,S,qCAGf,OAAO5V,KAAK6V,mB,gCAKGnU,GACf,OAAO,IAAIgU,EAAyB,CACnC1H,MAAMtM,EAAQsM,MACd2H,eAAejU,EAAQiU,eAAe/K,EAAQkL,QAAQpU,EAAQiU,gBAAgB,W,KCjC5DI,IADuB3Y,EAApCyC,iBAAoCzC,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACX6B,EAAM7B,EAAN6B,KACPhD,KAAKiD,MAAQD,EACbhD,KAAKgW,0CAA2ChW,KAAKgW,0CAA0C7V,KAAKH,MACpGA,KAAK8L,OAAO9L,KAAK8L,OAAO3L,KAAKH,M,sFAEYgO,GACzC,IAAMiI,EAAyBjW,KAAKiD,MAAMZ,QAAO,SAAA6T,GAAY,OAAEA,EAAalI,QAAQA,KACpF,OAAOiI,EAAuBzW,OAAO,EAAEyW,EAAuB,GAAGN,eAAe,O,+BAGhF,MAAM,IAAI3Y,MAAM,sB,gCAED6M,GAEf,OAAO,IAAIkM,EAA0B,CACpC/S,KAFY6G,EAAOG,KAAI,SAAAtI,GAAO,OAAEgU,GAAyBnM,SAAS7H,Y,MCnBtDyU,GADA,CAACC,MAAM,QAASC,OAAO,UCIjBC,IADmBlZ,EAAlCyC,iBAAkCzC,EAAhB0C,e,WAEvB,WAAYqB,GAAO,wBACXoV,EAAWpV,EAAXoV,QACPvW,KAAKwW,SAAWD,E,oDAGhB,OAAOvW,KAAKwW,W,+BAGZ,OAAOxW,KAAKwW,WAAWL,GAAQC,Q,gCAG/B,OAAOpW,KAAKwW,WAAWL,GAAQE,W,MCbZI,IADmBrZ,EAAlCyC,iBAAkCzC,EAAhB0C,e,WAEvB,WAAYqB,GAAO,wBACXqL,EAA+BrL,EAA/BqL,aAAckK,EAAiBvV,EAAjBuV,MAAOC,EAAUxV,EAAVwV,OAC5B3W,KAAK4W,OAASF,EACd1W,KAAK6W,QAAUF,EACf3W,KAAK8W,cAAgBtK,E,kDAGrB,OAAOxM,KAAK4W,S,6BAGZ,OAAO5W,KAAK6W,U,mCAGZ,OAAO7W,KAAK8W,iB,gCAEGpV,GACf,OAAO,IAAI+U,EAAkB,CAC5BC,MAAMhV,EAAQgV,MACdC,OAAOjV,EAAQiV,OACfnK,aAAa9K,EAAQ8K,mB,MCnBlB3M,GAAkCzC,EAAlCyC,iBACekX,IADmB3Z,EAAhB0C,e,WAEvB,WAAYqB,GAAO,wBACXwI,EAASxI,EAATwI,QACP3J,KAAKgX,mBAAqBrN,EAC1B3J,KAAKgX,mBAAmBC,MAAK,SAASC,EAAGC,GACxC,OAAOD,EAAER,MAAQS,EAAET,SAEpB1W,KAAKoX,kBAAmBpX,KAAKoX,kBAAkBjX,KAAKH,MACpDA,KAAKqX,uBAAwBrX,KAAKqX,uBAAuBlX,KAAKH,MAC9DA,KAAKsX,wBAAyBtX,KAAKsX,wBAAwBnX,KAAKH,M,8DAMhE,OAAOA,KAAKgX,mBAAmBhX,KAAKgX,mBAAmBxX,OAAO,K,wCAE7C+X,GAAQ,IAClBC,EAAaD,EAAbC,YAEP,OADIA,GAAY3X,GAAiB,eAC9B2X,EAAYC,SACPzX,KAAKqX,uBAAuBE,EAAOb,OAEpC1W,KAAKsX,wBAAwBC,EAAOZ,U,6CAErBD,GAEtB,IADA,IAAIvT,EAAE,EACAA,EAAEnD,KAAKgX,mBAAmBxX,QAAO,CACtC,IAAMkY,EAAQ1X,KAAKgX,mBAAmB7T,KACtC,GAAGuU,EAAMhB,OAAOA,EACf,OAAOgB,EAGT,OAAO1X,KAAKgX,mBAAmB7T,EAAE,K,8CAEVwT,GAEvB,IADA,IAAIxT,EAAE,EACAA,EAAEnD,KAAKgX,mBAAmBxX,QAAO,CACtC,IAAMkY,EAAQ1X,KAAKgX,mBAAmB7T,KACtC,GAAGuU,EAAMf,QAAQA,EAChB,OAAOe,EAGT,OAAO1X,KAAKgX,mBAAmB7T,EAAE,K,8BA/BjC,OAAOnD,KAAKgX,sB,gCAiCGtV,GACf,OAAO,IAAIqV,EAAa,CACvBpN,QAAQjI,EAAQiI,QAAQK,KAAI,SAAA0N,GAAK,OAAE,IAAIjB,GAAkBiB,Y,MChDpD7X,GAAqCzC,EAArCyC,iBAAkBC,GAAmB1C,EAAnB0C,eACL6X,G,WACpB,WAAYxW,GAAO,wBACX0T,EAA2C1T,EAA3C0T,SAAUvB,EAAiCnS,EAAjCmS,SAAUsE,EAAuBzW,EAAvByW,OAAQC,EAAe1W,EAAf0W,mBACnBha,IAAbgX,GAAuC,OAAbA,GAAkBhV,GAAiB,YAChEG,KAAK8X,UAAYjD,OAEFhX,IAAZyV,GAAsC,OAAbA,GAC3BzT,GAAiB,iBAEEhC,IAAjBga,GAAgD,OAAlBA,GAChChY,GAAiB,iBAClBG,KAAK+X,eAAiBF,OAEPha,IAAZyV,GAAsC,OAAbA,GAC3BzT,GAAiB,YAEdoU,MAAMC,QAAQZ,IACjBxT,GAAe,WAAY,SAC5BE,KAAKkT,UAAYI,OAENzV,GAAR+Z,GAA4B,OAATA,GAAc/X,GAAiB,UACrDG,KAAKgY,QAAQJ,E,qDAIb,OAAO5X,KAAK8X,Y,+BAGZ,OAAO9X,KAAKkT,Y,6BAGZ,OAAOlT,KAAKgY,W,gCAEGtW,EAASmW,GACxB,OAAO,IAAIF,EAAqB,CAC/B9C,SAASL,GAAS/V,MAAMiD,EAAQmT,UAChCvB,SAAS5R,EAAQ4R,SACjBsE,OAAOlW,EAAQkW,OAAO5N,KAAI,SAAAiO,GAAK,OAAElB,GAAaxN,SAAS0O,MACvDJ,cAAcA,Q,KCzCThY,GAAoCzC,EAApCyC,iBAAkBC,GAAkB1C,EAAlB0C,eACLoY,G,WACpB,WAAY/W,GAAO,wBACX6B,EAAM7B,EAAN6B,UACKnF,IAATmF,GAA+B,OAATA,GACxBnD,GAAiB,QACdoU,MAAMC,QAAQlR,IACjBlD,GAAe,OAAQ,SACxBE,KAAKiD,MAAQD,EACbhD,KAAK8L,OAAQ9L,KAAK8L,OAAO3L,KAAKH,M,uDAG9B,OAAOA,KAAKiD,Q,+BAGZ,OAAOjD,KAAKiD,MAAM+G,KAAI,SAAAmO,GAAI,OAAEA,EAAKrM,c,gCAGjC,IAAI8L,EAAQ,GAEZ,OADA5X,KAAKiD,MAAMmM,SAAQ,SAAA+I,GAAI,OAAEP,EAASA,EAAO7N,OAAOoO,EAAKP,WAC9CA,K,gCAEQQ,EAAaP,QACPha,IAAlBga,GAAiD,OAAlBA,GACjChY,GAAiB,iBAElB,IADA,IAAMwY,EAAM,GACJlV,EAAE,EAAGA,EAAEiV,EAAY5Y,OAAQ2D,IAAI,CACtC,IAAMmV,EAAcF,EAAYjV,GAChCkV,EAAM9X,KAAKoX,GAAqBpO,SAAS+O,EAAaT,IAEvD,OAAO,IAAIK,EAAsB,CAAClV,KAAKqV,Q,KChC1B,SAASE,GAAiB1N,GACrC,OAAOA,EAAE2N,WAAWC,QAAQ,wBAAyB,K,ICApCC,G,oGAEnB,IAAMC,EAAMC,OAAOF,EAAWG,UAC9B,OAAOF,M,KAGTD,GAAWG,OAAO,E,ICPGC,G,WACpB,WAAYC,GAAI,oBACf/Y,KAAKgZ,kBAAoB,IAAIC,IAC7BjZ,KAAK2O,WAAU,EACf3O,KAAKyP,IAAMzP,KAAKyP,IAAItP,KAAKH,MACzBA,KAAK4P,OAAS5P,KAAK4P,OAAOzP,KAAKH,MAC/BA,KAAKwO,QAAUxO,KAAKwO,QAAQrO,KAAKH,MACjCA,KAAKkZ,MAAQlZ,KAAKkZ,MAAM/Y,KAAKH,M,gDAE1BmZ,GACAnZ,KAAKgZ,kBAAkBI,IAAID,IAC9BnZ,KAAKgZ,kBAAkBvJ,IAAI0J,K,6BAErBA,GACHnZ,KAAKgZ,kBAAkBI,IAAID,IAE9BnZ,KAAKgZ,kBAAkBK,OAAOF,K,8BAG9BnZ,KAAKgZ,kBAAkB5J,SAAQ,SAAC+J,GAC/BA,EAAgBxI,YAEjB3Q,KAAKgZ,kBAAkB,IAAIC,M,gCAGxBjZ,KAAK2O,YAER3O,KAAK2O,WAAU,EACf3O,KAAKkZ,a,KC3BQ,SAASI,GAAuBP,GAC9C,OAAGA,EAAGQ,aACNR,EAAGQ,WAAY,IAAIT,GAAWC,IADNA,EAAGQ,W,ICQrB1Z,GAAoBzC,EAApByC,iBACe2Z,G,WACpB,WAAaT,EAAI5I,EAAOrT,EAAM2c,GAAc,oBAC3CzZ,KAAK0Z,IAAMX,EACX/Y,KAAK2Z,OAASxJ,EACdnQ,KAAK2S,MAAQ7V,EACbkD,KAAK4Z,cAAgBH,EACrBzZ,KAAK2O,WAAU,EAEf3O,KAAK6Z,IAAM7Z,KAAK6Z,IAAI1Z,KAAKH,MACzBA,KAAK8Z,IAAM9Z,KAAK8Z,IAAI3Z,KAAKH,MACzBA,KAAKsQ,QAAUtQ,KAAKsQ,QAAQnQ,KAAKH,MACjCA,KAAKwO,QAASxO,KAAKwO,QAAQrO,KAAKH,MAChCA,KAAK2Q,OAAS3Q,KAAK2Q,OAAOxQ,KAAKH,MAE/B,IAAMwR,EAAkBV,GAAsBhU,GAC9CkD,KAAK+Z,YAAc9I,GAAeY,cAAcL,GAChDxR,KAAKga,YAAc/I,GAAeW,cAAcJ,GAC5CrB,GAAMtQ,GAAiB,SAC3BsQ,EAAMhQ,KAAKrD,EAAM2c,GACSH,GAAsBP,GAC7BtJ,IAAIzP,M,gDAEpBsC,GACH,IAAI2X,EAASja,KAAK2Z,OAAO3Z,KAAK+Z,aAC9B,IAAIE,EACH,MAAM,IAAIjd,MAAM,iBAAiBgD,KAAK2Z,OAAO5c,YAAYD,KAAK,+CAA+CkD,KAAK+Z,aACnH,GAAoB,oBAAVE,EACT,MAAM,IAAIjd,MAAMgD,KAAK2Z,OAAO5c,YAAYD,KAAK,IAAIkD,KAAK+Z,YAAY,sBACnEE,EAAO3X,K,4BAGP,IAAI4X,EAASla,KAAK2Z,OAAO3Z,KAAKga,aAC9B,IAAIE,EAAO,MAAM,IAAIld,MAAM,iBAAiBgD,KAAK2Z,OAAO5c,YAAYD,KAAK,+CAA+CkD,KAAKga,aAC7H,GAAoB,oBAAVE,EACT,MAAM,IAAIld,MAAMgD,KAAK2Z,OAAO5c,YAAYD,KAAK,IAAIkD,KAAKga,YAAY,sBACnE,OAAOE,M,gCAGP,OAAOla,KAAK2S,Q,gCAGT3S,KAAK2O,YACR3O,KAAK2O,WAAU,EACf3O,KAAK0Z,IAAIH,WAAW3J,OAAO5P,MAC3BA,KAAK2Q,Y,+BAGL3Q,KAAK2Z,OAAOhJ,OAAO3Q,KAAK2S,MAAO3S,KAAK4Z,mB,KC1DxB,SAASO,GAA2BC,EAAuBC,GACxEra,KAAKsa,UAAU,WAAW,OAAOF,GACjCpa,KAAKua,eAAe,WAAW,OAAOF,G,ICFnBG,G,WACpB,WAAYC,EAAcC,GAAc,oBACvC1a,KAAK2a,WAAaF,EAClBza,KAAK4a,WAAYF,EACjB1a,KAAK8Z,IAAM9Z,KAAK8Z,IAAI3Z,KAAKH,MACzBA,KAAK6Z,IAAM7Z,KAAK6Z,IAAI1Z,KAAKH,M,kDAGzB,OAAOA,KAAK2a,e,0BAETrY,GACHtC,KAAK4a,WAAWtY,O,KCFGuY,G,uGAYHC,EAAY3K,EAAO4K,EAAWC,EAAeC,EAAWC,EAAUC,GAClF,IAAIpC,EAoBJ,QAnBWlb,IAARsS,QAA+BtS,IAAZkd,GACrBhC,EAAG+B,EAAW/B,GACd5I,EAAQ2K,EAAW3K,OACnB4K,EAAUD,EAAWhe,OAKpBke,EAAgBF,EAAWE,iBAE1BA,EAAgBD,GALjBA,EAAUD,EAAWM,MAQtBF,EAASJ,EAAWI,SACpBD,EAAUH,EAAWG,UACrBE,EAAYL,EAAWK,aAGvBpC,EAAG+B,EACmB,kBAAbC,EACT,OAAevB,GAAgB6B,WAAWtC,EAAI5I,EAAO4K,EAAWG,EAAUD,EAAWE,EAAaH,GAEnG,IAAMM,EAAiB,GAIvB,OAHAP,EAAU3L,SAAQ,SAACtS,GAClBwe,EAAiB/a,KAAaiZ,GAAgB6B,WAAWtC,EAAI5I,EAAOrT,OAAMe,EAAWod,OAE/EK,I,0DAMmCvC,EAAI5I,EAAmErT,EAAMoa,EAAEC,EAAEoE,GAC3H,IAAIC,EAAiBC,EAAeT,EACrB,kBAAL9D,GAET8D,EAAc9D,EACdsE,EAAkBrE,EAClBsE,EAAiBF,IAEjBP,EAAcle,EACd0e,EAAgBtE,EAChBuE,EAAetE,GAEhB,IACIuE,EACAC,EAFA9K,EAAkBD,GAAqBmI,GAGrC6C,EAAQ,SAACtZ,EAAOuZ,GACrBhL,EAAgBZ,QAAQ+K,EAAe1Y,GACvCmZ,GAAgBA,EAAenZ,EAAOuZ,IAEjCC,EAAO,SAACxZ,GACb,IAAIyZ,EAAeL,EACnB,IAAIpZ,EACJ,CACC,IAAIqZ,EAAa,OAIjB,OAFAC,EADAF,EAAY,KACOK,QACnBJ,EAAc,MAGZrZ,GAAOqZ,IAIVA,EAAerZ,EACfoZ,EAAYF,EAAgBlZ,GAC5BsZ,EAAQF,EAAWK,KAEhBvK,EAAkBV,GAAsBkK,GAG5CjC,EAFiB9H,GAAeW,cAAcJ,IAE/B,WAAW,OAAOkK,GACjC,IAAIvC,EAAkB,IAAIK,GAAgBT,EAAI5I,EAAOrT,EAAMgf,GAE3D,OADAA,EAAO3C,EAAgBW,OAChBX,I,yDAEkCJ,EAAI2C,EAC7C5e,EAAMkf,EAAYC,GAClB,IACIzL,EACA0L,EAFArL,EAAkBD,GAAqBmI,GAG3C,SAAS+C,EAAOxZ,GACf,IAAIA,EACJ,CACC,IAAI4Z,EAAiB,OACrB,IAAIC,EAAU3L,EAId,OAHA4L,IACAR,EAAQ,KAAMO,QACdD,EAAkB,MAGnB,GAAG5Z,GAAO4Z,EAAV,CAIIC,EAAU3L,EACd4L,IACAF,EAAmB5Z,EAEnBsZ,EADApL,EAAOwL,EAAW1Z,GACJ6Z,IAEf,SAASC,IACJ5L,IACJA,EAAKhC,UACLgC,EAAO,MAER,SAASoL,EAAQpL,EAAM2L,GACtBtL,EAAgBZ,QAAQnT,EAAM0T,GAC9ByL,GAAWA,EAAUzL,EAAM2L,GAE5B,IAAI3K,EAAkBV,GAAsBhU,GACxCwU,EAAaL,GAAeW,cAAcJ,GAC1C0I,EAASwB,EAAUpK,GACvB,IAAI4I,EAAO,MAAM,IAAIld,MAAM,iBAAiB0e,EAAU3e,YAAYD,KAAK,qDAAqDA,GAI5H,OAHAgf,EAAO5B,KACPnB,EAAGzH,GAAY,WAAW,OAAOd,GACX,IAAIgJ,GAAgBT,EAAI2C,EAAW5e,EAAMgf,K,sCAGzC/C,EAAI5I,EAAOrT,EAAMuf,EAAqBC,EAAaC,EAAiBC,GAC1F,OAAO3B,EAAuB4B,iBAAiB1D,EAAI5I,EAAOrT,EAAMuf,EAAqBC,EAAaC,EAAiBC,GAAU,SAASE,GACrI,OChJY,SAAoBvR,GAClC,QAActN,IAAXsN,EAAIwR,MAA6B,OAAXxR,EAAIwR,KAAY,OAAOxR,EAAIwR,KACpDxR,EAAIwR,KAAOjE,GAAWC,OD8IbiE,CAAWF,Q,oDAGiB3D,EAAI5I,EAAOrT,EAAMuf,EAAqBC,EAAaC,EAAuDC,GAC9I,OAAO3B,EAAuB4B,iBAAiB1D,EAAI5I,EAAOrT,EAAMuf,EAAqBC,EAAaC,EAAiBC,GAAU,SAASE,GACrI,OAAO9D,OAAO8D,Q,uCAGQ3D,EAAI5I,EAAOrT,EAAMuf,EAAqBC,EAAaC,EAAuDC,EAAUK,GAC3I,IAAIC,EAAuB,GACvBC,EAAsB,GACtB5D,EAAkB0B,EAAuBmC,SAASjE,EAAI5I,EAAOrT,EAAMmT,GAAS,GAChF,SAASA,EAAQgN,GAEhB,IADA,IAAIC,EAAa,GACT/Z,EAAE,EAAGA,EAAE8Z,EAAMzd,OAAQ2D,IAAI,CAChC,IAAIuZ,EAAOO,EAAM9Z,GACbwZ,EAAOE,EAAgBH,GAC3BQ,EAAW3c,KAAKoc,IACZQ,EAAgBL,EAAuBH,IAQ3CI,EAAsBrc,OAAOyC,EAAG,EAAG4Z,EAAsBrc,OAAOqc,EAAsBja,QAAQqa,GAAgB,GAAG,KALhHA,EAAgBd,EAAoBK,GACpCI,EAAuBH,GAAMQ,EAC7BJ,EAAsBrc,OAAOyC,EAAG,EAAGga,IAKrC,IAAI,IAAIR,KAAQG,EACf,GAAGI,EAAWpa,QAAQ6Z,GAAM,EAC5B,CACC,IAAIQ,EAAgBL,EAAuBH,UACpCG,EAAuBH,GAC9BI,EAAsBrc,OAAOqc,EAAsBja,QAAQqa,GAAgB,GAC3Eb,GAAaA,EAAYa,GAG3BZ,GAAiBA,EAAgBQ,GAIlC,IAAIE,EAAQ9D,EAAgBW,MAC5B,IAAImD,EAAM,MAAM,IAAIjgB,MAAOF,EAAM,wCAAwCqT,EAAMpT,YAAYD,MAG3F,OAFI0f,GACHvM,EAAQgN,GACF,IAAI9C,GAA2BhB,EAAiB,IAAIqB,IAN3D,WAAsB,OAAOuC,KAC7B,WAAsB,MAAM,IAAI/f,MAAM,uG,0DASI+b,EAAI5I,EAAOrT,EAAMoa,EAAGC,EAAGoE,GAC3D,IAAIC,EAAiB4B,EAAgBC,EAClB,kBAAPnG,GACRkG,EAAiBlG,EACjBsE,EAAkBrE,EAC3BkG,EAAgB9B,IAEP6B,EAAiBtgB,EACjB0e,EAAkBtE,EAC3BmG,EAAgBlG,GAEjB,IAGIgC,EAHAtI,EAAkBD,GAAqBmI,GACjCvH,EAAkBV,GAAsBsM,GAYlD,OATMrE,EAFiB9H,GAAeW,cAAcJ,IAE7B,WAAc,OAAO2H,EAAgBoB,iBAAiBT,OAQ7EX,EAAkB0B,EAAuByC,gBAAgBvE,EAAI5I,EAAOrT,EAAM0e,GAH1E,SAAiBE,GAChBA,EAAUxM,cALL,SAAiB5M,GACbuO,EAAgBZ,QAAQmN,EAAgB9a,GACjD+a,GAAiBA,EAAgB/a,Q,+BASnByW,EAAI5I,EAAOrT,EAAM2c,EAAc+C,GAC9C,IAAIrD,EAAkB,IAAIK,GAAgBT,EAAI5I,EAAOrT,EAAM2c,GAG3D,OAFI+C,GACH/C,EAAaN,EAAgBW,OACvBX,I,iCAEUJ,EAAI5I,EAAOrT,EAAMoe,EAAUD,EAAWE,EAAaH,GACpE,IACIc,EAIAyB,EACAC,EACAC,EAeAC,EAtBA7M,EAAkBD,GAAqBmI,GAEvCvH,EAAkBV,GAAsBhU,GACxCyU,EAAaN,GAAeY,cAAcL,GAC1CF,EAAaL,GAAeW,cAAcJ,GAc9C,GAVGwJ,GACFuC,EAA2BzM,GAAsBkK,GACjDwC,EAAsBvM,GAAeY,cAAc0L,GACnDE,EAAsBxM,GAAeW,cAAc2L,KAGnDC,EAAsBjM,EACtBkM,EAAsBnM,EACtB0J,EAAcle,QAEQe,IAApBsS,EAAMmB,GACR,MAAM,IAAItU,MAAMsU,EAAW,iCAAiCnB,EAAMpT,YAAYD,MAI/E,IAkCe6gB,EAlCX1N,EAAUY,EAAgBZ,QAqC9B,OApCGgL,GACFa,EACCZ,EACC,SAAS5Y,GACT,IAAIsb,EAAe3C,EAAU4C,KAAKvb,GAClC2N,EAAQ+K,EAAe4C,GACvB1C,EAAS0C,IAET,SAAStb,GACT2N,EAAQ+K,EAAeC,EAAU4C,KAAKvb,KAExCyW,EAAG0E,GAAqB,WACtB,OAAOxC,EAAU4C,KAAK1N,EAAMmB,OAG9BoM,EAAI,SAASpb,GAAQ6N,EAAMoB,GAAY0J,EAAU6C,GAAGxb,OAGpDwZ,EACAZ,EACC,SAAS5Y,GACT2N,EAAQ+K,EAAe1Y,GACvB4Y,EAAS5Y,IAET,SAASA,GACT2N,EAAQ+K,EAAe1Y,IAExByW,EAAG0E,GAAqB,WACvB,OAAOtN,EAAMmB,MAEdoM,EAAI,SAASpb,GAAQ6N,EAAMoB,GAAYjP,KAErC6Y,IACYwC,EAAkED,EAAhFA,EAA4B,SAASpb,GAAOqb,EAAKrb,GAAO6Y,EAAY7Y,KACrEyW,EAAGyE,GAAqBE,EAEjB,IAAIlE,GAAgBT,EAAI5I,EAAOrT,EAAMgf,O,KEhRtCjc,GAAoCzC,EAApCyC,iBAAkBC,GAAkB1C,EAAlB0C,eACLie,G,WACpB,WAAY5c,GAAO,IAAD,2BACjBqM,EAAYxN,MACZ4Q,GAAqB5Q,MAFJ,IAGVge,EACsD7c,EADtD6c,QAASlhB,EAC6CqE,EAD7CrE,KAAM0N,EACuCrJ,EADvCqJ,OAAQ6N,EAC+BlX,EAD/BkX,MAAO4F,EACwB9c,EADxB8c,WAAYC,EACY/c,EADZ+c,eAAgBC,EACJhd,EADIgd,MAAOC,EACXjd,EADWid,OACxEtR,EAA6D3L,EAA7D2L,UAAWuR,EAAkDld,EAAlDkd,SAAUC,EAAwCnd,EAAxCmd,gBAAiBC,EAAuBpd,EAAvBod,2BAE5B1gB,IAAPf,GAAyB,OAAPA,GACpB+C,GAAiB,aAENhC,IAAT2M,GAA6B,OAATA,GACtB3K,GAAiB,UAEE,kBAAV2K,GACT1K,GAAe,SAAU,eAMdjC,IAATugB,GAA+B,OAATA,GACxBve,GAAiB,eAEHhC,IAAZiP,GAAqC,OAAZA,GAC3BjN,GAAiB,aAClBG,KAAKwe,SAAWR,EAChBhe,KAAKye,MAAL,eAAqBjU,EAArB,YAA+B1N,GAC/BkD,KAAK2S,MAAQ7V,EACbkD,KAAK0e,QAAUlU,EACfxK,KAAK2e,OAAStG,EACdrY,KAAK4e,YAAcX,EACnBje,KAAK6e,gBAAgBX,EACrBle,KAAK8e,OAAOX,EACZne,KAAK+e,QAAUX,EACfpe,KAAKgf,WAAalS,EAClB9M,KAAKif,iBAAmBX,EACxBte,KAAKkf,YAAYb,EACjBre,KAAKqJ,uBAAwBkV,EAC7Bve,KAAKmf,0BAA4Bnf,KAAKmf,0BAA0Bhf,KAAKH,MACrEA,KAAK8L,OAAS9L,KAAK8L,OAAO3L,KAAKH,MAC/ByR,GAAczR,KAAM,YAAY,kBAAI,EAAKqe,YAAU,SAAC/b,GAAD,OAAS,EAAK+b,SAAW/b,KAC5EmP,GAAczR,KAAM,UAAU,kBAAI,EAAKoe,UAAQ,SAAC9b,GAAD,OAAS,EAAK8b,OAAS9b,KACtEmP,GAAczR,KAAM,YAAY,kBAAI,EAAKsT,YAAU,SAAChR,GAAD,OAAS,EAAKgR,SAAWhR,KAC5EmP,GAAczR,KAAM,gBAAgB,kBAAI,EAAKof,gBAAc,SAAC9c,GAAD,OAAS,EAAK8c,aAAe9c,KACxFtC,KAAKqf,kCAAoCxE,GAAuBmC,SAAShd,KAAMA,KAAKgf,WAAY,WAAYhf,KAAKmf,2B,wEAuGjHnf,KAAK6Q,gBAAgBZ,QAAQ,c,+BAG7B,MAAO,CACNnT,KAAKkD,KAAK2S,MACVnI,OAAOxK,KAAK0e,QACZY,2BAA2Btf,KAAKuf,4BAChCpB,MAAMne,KAAK8e,OACXV,OAAOvc,EAAW2W,SAASxY,KAAKoe,QAChCtR,UAAU9M,KAAKgf,WAAWliB,KAC1BuhB,SAASre,KAAKkf,a,2BA9Gf,OAAOlf,KAAKwe,a,2BAGT,OAAOxe,KAAKye,Q,2BAGf,OAAOze,KAAK2S,Q,4BAGZ,OAAO3S,KAAKgf,WAAW5M,Q,6BAGvB,OAAOpS,KAAK0e,U,4BAGZ,OAAO1e,KAAK2e,S,iCAGZ,OAAO3e,KAAK4e,c,qCAGZ,OAAO5e,KAAK6e,kB,4BAGZ,OAAO7e,KAAK8e,Q,aAEHxc,GACTtC,KAAK8e,OAASxc,I,6BAGd,OAAOtC,KAAK+e,S,aAEFzc,GACVtC,KAAK+e,QAAQzc,I,6BAGb,OAAOtC,KAAK+e,UAAUld,EAAWI,sB,iCAGjC,OAAOjC,KAAK+e,UAAUld,EAAWK,W,kCAGjC,OAAOlC,KAAK+e,UAAUld,EAAWC,Y,gCAGjC,OAAO9B,KAAKgf,WAAW9M,Y,iCAIvB,OAAOlS,KAAKgf,WAAW7M,a,gCAGvB,OAAOnS,KAAKgf,a,kCAGZ,MAAM,GAAN,OAAUhf,KAAKqJ,uBAAuBzF,gBAAtC,OAAuD2U,GAAiBvY,KAAKme,QAA7E,OAAsFne,KAAKqJ,uBAAuBxF,kB,+BAGlH,OAAO7D,KAAKkf,W,aAEA5c,GACZ,IAAMuZ,EAAW7b,KAAKkf,UACtBlf,KAAKkf,UAAY5c,EACduZ,IAAWvZ,IACbtC,KAAK6Q,gBAAgBZ,QAAQ,WAAY3N,GACzCtC,KAAKiO,cAAc,CAAC5Q,KAAK,uB,sCAI1B,OAAO2C,KAAKif,mB,6CAGZ,IAAIjf,KAAKqY,MAAM,OAAO,EAEtB,IADA,IAAMA,EAAQrY,KAAKqY,MAAMmH,WACjBrc,EAAE,EAAGA,EAAEkV,EAAM7Y,OAAQ2D,IAAI,CAChC,IAAMgV,EAAOE,EAAMlV,GACnB,GAAGgV,EAAKP,QAAQO,EAAKP,OAAOpY,OAAO,EAClC,OAAO,EAGT,OAAO,I,+BAGP,IAAI8C,EAAQ,GAKZ,OAJGtC,KAAKgf,WAAW1L,WAClBhR,EAAOA,EAAMyH,OAAO/J,KAAKgf,WAAW1L,WAClCtT,KAAKof,eACP9c,EAAQA,EAAMyH,OAAO/J,KAAKof,eACpB9c,I,mCAGP,OAAOtC,KAAKyf,e,aAEInd,GAChBtC,KAAKyf,cAAend,EACpBtC,KAAK6Q,gBAAgBZ,QAAQ,gBAC7BjQ,KAAK6Q,gBAAgBZ,QAAQ,YAC7BjQ,KAAKiO,cAAc,CAAC5Q,KAAK,sBAAuB+hB,aAAapf,KAAKyf,mB,gCAgBnD/d,EAAS4S,EAAYiK,EAAuBP,GAAS,IAAD,OAC/CngB,IAAjB6D,EAAQ8I,QAAqC,OAAjB9I,EAAQ8I,QACtC3K,GAAiB,yCAClB,IAAIgN,EAAK,KAgBT,OAdAA,EAAQ,IAAIkR,EAAiB,CAC5BjhB,KAAK4E,EAAQ5E,KACb0N,OAAO9I,EAAQ8I,OACf6N,MAAM3W,EAAQ2W,MAAMH,GAAsB3O,SAAS7H,EAAQ2W,OAJxC,WAAK,OAAOxL,KAIkD,GACjFoR,WAAWvc,EAAQuc,iBAAiCpgB,IAApB6D,EAAQoL,WAA2C,OAApBpL,EAAQoL,WAAsC,KAApBpL,EAAQoL,UACjGoR,eAAexc,EAAQwc,eAAenH,GAAaxN,SAAS7H,EAAQwc,gBAAgB,KACpFC,MAAMzc,EAAQyc,MACdC,OAAOvc,EAAWpD,MAAMiD,EAAQ0c,QAChCtR,UAAUwH,EAAW7V,MAAMiD,EAAQoL,WACnCuR,SAAS3c,EAAQ2c,SACjBE,sBAAsBA,EACtBD,gBAAe,UAAC5c,EAAQ4c,uBAAT,aAAC,EAAyBtU,KAAI,SAAA0V,GAAc,OAAE3I,GAAaxN,SAASmW,MACnF1B,QAAQA,Q,KChMLne,GAAkCzC,EAAlCyC,iBACe8f,IADmBviB,EAAhB0C,e,WAEpB,WAAYqB,GAAQ,wBACfye,EAAuCze,EAAvCye,WAAYC,EAA2B1e,EAA3B0e,aAAcC,EAAa3e,EAAb2e,iBACjBjiB,IAAb+hB,GAAqC,OAAbA,GAC1B/f,GAAiB,mBACAhC,IAAfgiB,GAAyC,OAAfA,GAC5BhgB,GAAiB,qBACDhC,IAAdiiB,GAAuC,OAAdA,GAC3BjgB,GAAiB,eAClBG,KAAK+f,YAAcH,EACnB5f,KAAKggB,cAAgBH,EACrB7f,KAAKigB,aAAeH,E,uDAGd,OAAO9f,KAAK+f,c,mCAGZ,OAAO/f,KAAKggB,gB,kCAGZ,OAAOhgB,KAAKigB,gB,gCAEA9U,GACZ,OAAO,IAAIwU,EAAYxU,O,MCxBvBtL,GAAoCzC,EAApCyC,iBACaqgB,IADuB9iB,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACXgf,EAAgDhf,EAAhDgf,mBAAoBC,EAA4Bjf,EAA5Bif,gCACHviB,IAArBsiB,GAAqD,OAArBA,GAClCtgB,GAAiB,sBAClBG,KAAKqgB,oBAAsBF,OACKtiB,IAA7BuiB,GAAqE,OAA7BA,GAC1CvgB,GAAiB,8BAClBG,KAAKsgB,4BAA8BF,E,uEAGnC,OAAOpgB,KAAKsgB,8B,yCAGZ,OAAOtgB,KAAKqgB,uB,gCAEG3e,GACf,OAAO,IAAIwe,EAAsC,CAChDC,mBAAmBze,EAAQye,mBAC3BC,2BAA2B1e,EAAQ0e,2BAA2BT,GAAYpW,SAAS7H,EAAQ0e,4BAA4B,W,MCLlHvgB,GAAoCzC,EAApCyC,iBACa0gB,IADuBnjB,EAAlB0C,e,WAEzB,WAAYqB,GAAO,IAAD,2BACjBqM,EAAYxN,MACZ4Q,GAAqB5Q,MAFJ,IAGVwgB,EACgFrf,EADhFqf,GAAI1jB,EAC4EqE,EAD5ErE,KAAM2jB,EACsEtf,EADtEsf,cAAeC,EACuDvf,EADvDuf,gCAC/BrC,EAAsFld,EAAtFkd,SAAUsC,EAA4Exf,EAA5Ewf,YAAaC,EAA+Dzf,EAA/Dyf,sBAAuBC,EAAwC1f,EAAxC0f,MAAO3C,EAAiC/c,EAAjC+c,eAAgB4C,EAAiB3f,EAAjB2f,qBAE9DjjB,IAAL2iB,GAAqB,OAALA,GAClB3gB,GAAiB,WAKChC,IAAhB4iB,GAA2C,OAAhBA,GAC7B5gB,GAAiB,sBAKPhC,IAARgjB,GAA2B,OAARA,GACrBhhB,GAAiB,SAGlBG,KAAKye,MAAL,eAAqB+B,GACrBxgB,KAAK+gB,IAAMP,EACXxgB,KAAK2S,MAAQ7V,EACbkD,KAAKghB,eAAiBP,EACtBzgB,KAAKihB,uBAAyBL,EAC9B5gB,KAAKkhB,aAAeP,EACpB3gB,KAAKkf,YAAYb,EACjBre,KAAKmhB,OAASN,EAAM5J,MAAK,SAASmK,EAAOC,GAAO,OAAOD,EAAM5W,OAAS6W,EAAM7W,UAC5ExK,KAAKshB,qBAAqBthB,KAAKshB,qBAAqBnhB,KAAKH,MACzDA,KAAKmhB,OAAO/R,SAAQ,SAAAvC,GAAI,OAAEA,EAAKY,iBAAiB,kBAAmB,EAAK6T,yBACxEthB,KAAK6e,gBAAgBX,EACrBle,KAAKuhB,iBAAkBT,EACvB9gB,KAAKwhB,iCAAkCd,EACvC1gB,KAAKyhB,uBAAuBzhB,KAAKyhB,uBAAuBthB,KAAKH,MAC7DA,KAAK0hB,2BAA2B1hB,KAAK0hB,2BAA2BvhB,KAAKH,MACrEA,KAAK2hB,eAAiB,IAAI3M,GAC1BhV,KAAK2hB,eAAelU,iBAAiB,SAAUzN,KAAK0hB,4BACpD1hB,KAAK4hB,sDAAwD5hB,KAAK4hB,sDAAsDzhB,KAAKH,MAC7HyR,GAAczR,KAAM,YAAY,kBAAI,EAAKkf,aAAW,SAAC5c,GAAD,OAAS,EAAK4c,UAAY5c,K,mEAG9EtC,KAAK6Q,gBAAgBZ,QAAQ,WAAYjQ,KAAKqe,Y,yCAkD9C,OAAOre,KAAK2hB,eAAexM,S,4EAE0BnH,GACrD,OAAOhO,KAAKghB,eAAehL,0CAA0ChI,K,+CAGrEhO,KAAKiO,cAAc,CAAC5Q,KAAK,SAAUwkB,OAAO7hB,KAAK6hB,W,iDAErBtS,GAC1BvP,KAAKyhB,2B,qCAxDL,OAAOzhB,KAAK6e,kB,sCAGZ,OAAO7e,KAAKuhB,mB,sDAGZ,OAAOvhB,KAAKwhB,mC,4CAGZ,OAAOxhB,KAAKihB,yB,kCAGZ,OAAOjhB,KAAKkhB,e,2BAGT,OAAOlhB,KAAKye,Q,yBAGf,OAAOze,KAAK+gB,M,+BAGZ,OAAO/gB,KAAKmhB,OAAO9e,QAAO,SAAAwK,GAAI,OAAEA,EAAKwR,YAAU7e,OAAO,I,4BAGtD,OAAOQ,KAAKmhB,S,yCAGZ,IAAI,IAAIhe,EAAE,EAAGA,EAAEnD,KAAKmhB,OAAO3hB,OAAQ2D,IAClC,IAAInD,KAAKmhB,OAAOhe,GAAG8a,WAAW,OAAO,EAEtC,OAAO,I,yCAGP,OAAOje,KAAKmhB,OAAO3hB,OAAO,I,6BAW1B,OAAOQ,KAAK2hB,eAAeG,S,gCAcZpgB,EAAS4S,EAAYiK,GACpC,IAAIwD,EAAO,KACL/D,EAAQ,kBAAI+D,GACZlB,EAAQnf,EAAQmf,MAAM7W,KAAI,SAAA6C,GAAI,OAAEkR,GAAiBxU,SAASsD,EAAMyH,EAAYiK,EAAuBP,MAYzG,OAXA+D,EAAK,IAAIxB,EAAa,CACrBC,GAAG9e,EAAQ8e,GACX1jB,KAAK4E,EAAQ5E,KACb2jB,cAAc1K,GAA0BxM,SAAS7H,EAAQ+e,eACzDvC,eAAexc,EAAQwc,eAAenH,GAAaxN,SAAS7H,EAAQwc,gBAAgB,KACpF4C,gBAAgBpf,EAAQof,gBAAgB/J,GAAaxN,SAAS7H,EAAQof,iBAAiB,KACvFJ,gCAAgChf,EAAQgf,gCACxCE,sBAAsBV,GAAsC3W,SAAS7H,EAAQkf,uBAC7EC,MAAMA,EACNF,YAAYjf,EAAQif,kB,MCrIf9gB,GAAoCzC,EAApCyC,iBAAkBC,GAAkB1C,EAAlB0C,eACLkiB,G,WACpB,WAAY7gB,GAAO,wBACX6B,EAAM7B,EAAN6B,UACKnF,IAATmF,GAA+B,OAATA,GACxBnD,GAAiB,QACdoU,MAAMC,QAAQlR,IACjBlD,GAAe,OAAQ,SACxBE,KAAKiD,MAAQD,EACbhD,KAAKwf,SAAWxf,KAAKwf,SAASrf,KAAKH,MACnCA,KAAKiiB,cAAgBjiB,KAAKiiB,cAAc9hB,KAAKH,MAC7CA,KAAKkiB,YAAcliB,KAAKkiB,YAAY/hB,KAAKH,MACzCA,KAAKmiB,gBAAkBniB,KAAKmiB,gBAAgBhiB,KAAKH,MACjDA,KAAKoiB,wBAA0BpiB,KAAKoiB,wBAAwBjiB,KAAKH,M,uDAGjE,OAAOA,KAAKiD,Q,sCAGZ,IAAID,EAAO,GAEX,OADAhD,KAAKiD,MAAMmM,SAAQ,SAAA2S,GAAI,OAAE/e,EAAKA,EAAK+G,OAAOgY,EAAKlB,UACxC7d,I,kCAEIwd,GACX,IAAI,IAAIrd,EAAE,EAAGA,EAAEnD,KAAKiD,MAAMzD,OAAQ2D,IAAI,CACrC,IAAM4e,EAAO/hB,KAAKiD,MAAME,GACxB,GAAG4e,EAAKvB,KAAKA,EAAG,OAAOuB,EAExB,OAAO,O,qCAGP,OAAO/hB,KAAKiD,MAAM,GAAG4d,MAAM,K,sCAEZrW,GACf,OAAOxK,KAAKiiB,gBAAgB5f,QAAO,SAAAwK,GAAI,OAAEA,EAAKrC,SAASA,KAAQ,K,gDAG/D,OAAOxK,KAAKiiB,gBAAgB5f,QAAO,SAAAwK,GAAI,OAAEA,EAAKwR,e,gCAE/BxU,EAAQyK,EAAYiK,GAEnC,IADA,IAAM8D,EAAM,GACJlf,EAAE,EAAGA,EAAE0G,EAAOrK,OAAQ2D,IAC7B,IACC,IAAMzB,EAAUmI,EAAO1G,GACvBkf,EAAM9hB,KAAKggB,GAAahX,SAAS7H,EAAS4S,EAAYiK,IAEvD,MAAM5f,GACL,MAAM,IAAIrB,EAAJ,wCAAgD6F,GAAKxE,GAG7D,OAAO,IAAIqjB,EAAc,CAAChf,KAAKqf,Q,KCrD3BC,GAAS,CACbC,KAAK,OACLC,MAAM,QACNC,MAAM,QACNC,KAAK,OACLC,GAAG,KACHC,KAAK,QAmDP,SAASC,GAAmBvgB,GAC3B,MAAM,IAAItF,MAAJ,2BAA8BsF,EAA9B,qBAlDPggB,GAAS7jB,MAAQ,SAAS6D,GAGzB,YAFWzE,IAARyE,GAA2B,OAARA,GACrBugB,GAAmBvgB,GACD,kBAATA,EAsBX,SAAoBA,GAEnB,OADAA,EAAQA,EAAMO,eAEb,IAAK,IACL,IAAK,OACJ,OAAOyf,GAASC,KACjB,IAAK,IACL,IAAK,QACJ,OAAOD,GAASE,MACjB,IAAK,IACL,IAAK,OACJ,OAAOF,GAASI,KACjB,IAAK,IACL,IAAK,QACJ,OAAOJ,GAASG,MACjB,IAAK,IACL,IAAK,KACJ,OAAOH,GAASK,GACjB,IAAK,IACL,IAAK,OACJ,OAAOL,GAASM,KAElBC,GAAmBvgB,GA3CXwgB,CAAWxgB,GACA,kBAATA,EAGX,SAAoBA,GACnB,OAAQA,GACP,KAAK,EACJ,OAAOggB,GAASC,KACjB,KAAK,EACJ,OAAOD,GAASE,MACjB,KAAK,EACJ,OAAOF,GAASG,MACjB,KAAK,EACJ,OAAOH,GAASI,KACjB,KAAK,EACJ,OAAOJ,GAASK,GACjB,KAAK,EACJ,OAAOL,GAASM,KAElBC,GAAmBvgB,GAjBXygB,CAAWzgB,QADnB,GA+CcggB,UCzDPziB,GAAoCzC,EAApCyC,iBACamjB,IADuB5lB,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACX8hB,EAAyE9hB,EAAzE8hB,SAAUC,EAA+D/hB,EAA/D+hB,aAAclR,EAAiD7Q,EAAjD6Q,kBAAmBmR,EAA8BhiB,EAA9BgiB,kCAEpCtlB,IAAXolB,GAAiC,OAAXA,GACxBpjB,GAAiB,YAClBG,KAAKojB,UAAYH,OAECplB,IAAfqlB,GAAyC,OAAfA,GAC5BrjB,GAAiB,gBAClBG,KAAKqjB,cAAgBH,OAEErlB,IAApBmU,GAAmD,OAApBA,GACjCnS,GAAiB,qBAClBG,KAAK4S,mBAAqBZ,OAEQnU,IAA/BslB,GAAyE,OAA/BA,GAC5CtjB,GAAiB,gCAClBG,KAAKsjB,8BAAgCH,E,qDAGrC,OAAOnjB,KAAKojB,Y,mCAGZ,OAAOpjB,KAAKqjB,gB,wCAGZ,OAAOrjB,KAAK4S,qB,mDAGZ,OAAO5S,KAAKsjB,iC,gCAEG5hB,GACf,OAAO,IAAIshB,EAAqB,CAC/BC,SAAUX,GAAS7jB,MAAMiD,EAAQuhB,UACjCC,aAAaxhB,EAAQwhB,aACrBlR,kBAAkBtQ,EAAQsQ,kBAC1BmR,6BAA6BzhB,EAAQyhB,mC,MCtChCtjB,GAAoCzC,EAApCyC,iBACa0jB,IADuBnmB,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACXqiB,EAA4CriB,EAA5CqiB,sBAAuBC,EAAqBtiB,EAArBsiB,MAAaC,GAAQviB,EAAdwiB,KAAcxiB,EAARuiB,aAEhB7lB,IAAxB2lB,GAA2D,OAAxBA,GACrC3jB,GAAiB,yBAClBG,KAAK4jB,uBAAyBJ,OAEnB3lB,IAAR4lB,GAA2B,OAARA,GACrB5jB,GAAiB,SAClBG,KAAK6jB,MAAQJ,EACbzjB,KAAK8jB,QAAUJ,E,kEAGf,OAAO1jB,KAAK4jB,yB,4BAGZ,OAAO5jB,KAAK+jB,S,6BAGZ,OAAO/jB,KAAK8jB,W,gCAEGpiB,GAGf,OAAO,IAAI6hB,EAAiB,CAACE,MAFf/hB,EAAQsiB,kBAAkBha,KAAI,SAAAia,GAAI,OAAEjB,GAAqBzZ,SAAS0a,MAEtCT,sBADF9hB,EAAjC8hB,sBACgFE,OAD/ChiB,EAAVgiB,a,MC5BXQ,G,WACpB,WAAY9V,GACX,oBACApO,KAAK4V,OAAO,EACZ5V,KAAKmkB,OAAO/V,EACZpO,KAAKokB,QAAQhW,EAAM5O,O,mDAIb,OAAOQ,KAAKmkB,OAAOnkB,KAAK4V,Y,gCAI1B,OAAO5V,KAAK4V,OAAO5V,KAAKokB,U,+BAItBpkB,KAAKmkB,OAAOzjB,SAASV,KAAK4V,OAAQ,GAClC5V,KAAKokB,c,KClBE,SAASC,GAAeC,GACtC,GAAGA,aAAuBC,SAAS,CAClC,IAAMC,EAAcriB,OAAOsiB,eAAeH,GAC1C,GAAGE,GAAeA,IAAgBriB,QAAUqiB,EAAY1nB,KACvD,OAAO0nB,EAGT,OAAO,K,ICLA3kB,GAAoCzC,EAApCyC,iBAAkBC,GAAkB1C,EAAlB0C,eACL4kB,G,2GACCxZ,EAAKyZ,EAAeC,GAAsC,IAAxBC,EAAuB,6DACnEhnB,IAAPqN,GAAwB,OAANA,GACpBrL,GAAiB8kB,GACd1Q,MAAMC,QAAQhJ,IAAKpL,GAAe,SAAU,SAChD,IAAI,IAAIqD,EAAE,EAAGA,EAAE+H,EAAI1L,OAAQ2D,IAAI,CAC9B,IAAMuU,EAAQxM,EAAI/H,GAClB,QAAWtF,IAAR6Z,GAA2B,OAARA,EACrB,MAAM,IAAI1a,MAAJ,0BAA6B2nB,EAA7B,4BAA8DxhB,EAA9D,gBAAuEyV,OAAOlB,KAErF,IAAMra,EAAOqa,EAAM3a,YAAYD,KAC/B,IAAK4a,aAAiBkN,KAAkBC,GAAoBH,EAAoBI,gBAAgBpN,EAAOkN,IACtG,MAAM,IAAI5nB,MAAJ,0BAA6B2nB,EAA7B,4BAA8DxhB,EAA9D,wBAA+E9F,EAA/E,yCAAoHunB,EAAa7nB,YAAYD,U,sCAG/H4a,EAAOkN,GAE7B,IADA,IAAIG,EAAqBV,GAAe3M,EAAM3a,aACpB,MAApBgoB,GAAyB,CAC9B,GAAGA,aAA8BH,EAChC,OAAO,EACRG,EAAqBV,GAAeU,GAErC,OAAO,M,KCtBHllB,GAAkCzC,EAAlCyC,iBAAkBC,GAAgB1C,EAAhB0C,eACHklB,G,WACpB,WAAY7jB,GAAO,wBACX9D,EAA8D8D,EAA9D9D,KAAMsP,EAAwDxL,EAAxDwL,iBAAkBsY,EAAsC9jB,EAAtC8jB,YAAaC,EAAyB/jB,EAAzB+jB,2BACjCrnB,IAARR,GAA0B,OAAPA,GACrBwC,GAAiB,QAClBG,KAAKmlB,MAAQ9nB,OACUQ,IAApB8O,GAAkD,OAAnBA,GACjC9M,GAAiB,oBAClBG,KAAKolB,kBAAoBzY,OACP9O,IAAfonB,GAAwC,OAAdA,GAC5BplB,GAAiB,gBACdolB,aAAuBtF,IAC1B7f,GAAe,cAAe,eAC5BolB,IAAyBA,aAAiCvF,IAC5D7f,GAAe,wBAAyB,eACzCE,KAAKqlB,aAAeJ,EACpBjlB,KAAKslB,uBAAyBJ,EAC9BllB,KAAKulB,qBAAsB,E,6DAG3B,OAAOvlB,KAAKolB,oB,2BAGZ,OAAOplB,KAAKmlB,Q,kCAGZ,OAAOnlB,KAAKqlB,e,4CAGZ,OAAOrlB,KAAKslB,yB,yCAGZ,OAAOtlB,KAAKulB,wB,KCjCR1lB,GAAkBzC,EAAlByC,iBACe2lB,G,WACpB,WAAYrkB,GAAO,wBACX4Q,EAAM5Q,EAAN4Q,UACIlU,IAARkU,GACFlS,GAAiB,QAClBG,KAAK0S,MAAQX,E,iDAGb,OAAO/R,KAAK0S,U,KCPR7S,GAAkBzC,EAAlByC,iBACe4lB,G,WACpB,WAAYtkB,GAAO,wBACXukB,EAAiBvkB,EAAjBukB,QAAS3T,EAAQ5Q,EAAR4Q,KAChB2S,GAAoBiB,cAAcD,EAAS,UAAWF,IACtDxlB,KAAK4lB,SAAWF,OAEL7nB,IAARkU,GAA0B,OAAPA,GACrBlS,GAAiB,QAClBG,KAAK0S,MAAQX,E,oDAGb,OAAO/R,KAAK4lB,W,2BAGZ,OAAO5lB,KAAK0S,U,KCbR7S,GAAkBzC,EAAlByC,iBACegmB,G,WACpB,WAAY1kB,GAAO,wBACX2kB,EAAoE3kB,EAApE2kB,OAAQC,EAA4D5kB,EAA5D4kB,SAAUC,EAAkD7kB,EAAlD6kB,UAAWC,EAAuC9kB,EAAvC8kB,SAAUvC,EAA6BviB,EAA7BuiB,OAAQwC,EAAqB/kB,EAArB+kB,uBACvCroB,IAAZmoB,GAAmC,OAAZA,GACzBnmB,GAAiB,aAClBG,KAAKmmB,UAAYnmB,KAAKmmB,UAAUhmB,KAAKH,MACrCA,KAAKomB,WAAYpnB,EAAUsN,mBAAmB0Z,GAC9CtB,GAAoBiB,cAAcG,EAAQ,SAAUL,IACpDzlB,KAAKqmB,QAAUP,EACfpB,GAAoBiB,cAAcI,EAAU,WAAYf,IAAiB,GACzEhlB,KAAKsmB,UAAYP,OACHloB,IAAXooB,GAAiC,OAAXA,GACxBpmB,GAAiB,YAClBG,KAAKumB,UAAWN,EAChBjmB,KAAK8jB,QAASJ,EACd1jB,KAAKwmB,mBAAoBN,E,wDAGnB,OAAOlmB,KAAK8jB,U,gCAGlB,OAAO9jB,KAAKomB,a,+BAGZ,OAAOpmB,KAAKsmB,Y,6BAGZ,OAAOtmB,KAAKqmB,U,+BAGZ,OAAOrmB,KAAKumB,Y,wCAGZ,OAAOvmB,KAAKwmB,uB,KCpCCC,GALK,CACnBC,iBAAiB,iBACjBC,yBAAyB,yBACzBC,KAAK,QCEE/mB,GAAoCzC,EAApCyC,iBACagnB,IADuBzpB,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,uBACjB,cAAMA,IACDokB,qBAAsB,EAFV,IAGVuB,EAA4B3lB,EAA5B2lB,2BAHU,YAIejpB,IAA7BipB,GAAqE,OAA7BA,GAC1CjnB,GAAiB,8BAClB,EAAKknB,4BAA8BD,EANlB,E,wDASjB,OAAO,I,iDAGP,OAAO9mB,KAAK+mB,8B,gCAGZ,MAAO,mB,gCAEQrlB,GACf,OAAO,IAAImlB,EAAsB,CAChCla,iBAAiBjL,EAAQiL,iBACzBtP,KAAKqE,EAAQrE,KACb4nB,YAAYtF,GAAYpW,SAAS7H,EAAQujB,aACzCC,sBAAsBxjB,EAAQwjB,sBAAsBvF,GAAYpW,SAAS7H,EAAQwjB,uBAAuB,KACxG4B,2BAA2BplB,EAAQolB,iC,GAxBa9B,KCC3CnlB,GAAoCzC,EAApCyC,iBACamnB,IADuB5pB,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,uBACjB,cAAMA,IACDokB,qBAAsB,EAFV,IAGV0B,EACS9lB,EADT8lB,WAAY9E,EACHhhB,EADGghB,gBAClB5f,EAAepB,EAAfoB,cAJgB,OAKjB,EAAKkQ,eAAiBlQ,OACN1E,IAAbopB,GAAqC,OAAbA,GAC1BpnB,GAAiB,cAClB,EAAKqnB,YAAcD,OACEppB,IAAlBskB,GAA+C,OAAlBA,GAC/BtiB,GAAiB,mBAClB,EAAKsnB,iBAAmBhF,EAXP,E,6DAcjB,IAAMtV,EAAO7M,KAAKmnB,iBAAiBnnB,KAAKknB,aACxC,OAAOrlB,EAAWulB,gCAAX,OAA2Cva,QAA3C,IAA2CA,OAA3C,EAA2CA,EAAMuR,OAAQpe,KAAKyS,kB,kCAGrE,OAAO,I,iCAGP,OAAOzS,KAAKknB,c,gCAGZ,MAAO,yB,8BAGPtqB,QAAQmC,IAAIiB,KAAKknB,aACjB,IAAMra,EAAO7M,KAAKmnB,iBAAiBnnB,KAAKknB,aACxC,IAAqB,IAAlBra,EAAKoR,WAAkB,OAAO,EACjC,IAAMrgB,EAAMsO,EAAKmb,0BAA0Bxa,EAAM7M,KAAKyS,gBACtD,OAAOzS,KAAKyS,eAAezM,8CAA6CpI,K,gCAEzD8D,EAASygB,EAAiB5f,GACzC,OAAO,IAAIykB,EAA8B,CACxCra,iBAAiB,WACjBtP,KAAKqE,EAAQrE,KACb4nB,YAAYtF,GAAYpW,SAAS7H,EAAQujB,aACzCC,sBAAsBxjB,EAAQwjB,sBAAsBvF,GAAYpW,SAAS7H,EAAQwjB,uBAAuB,KACxG+B,WAAWvlB,EAAQulB,WACnB9E,gBAAgBA,EAChB5f,sB,GA1CwDyiB,KCHnDnlB,GAAoCzC,EAApCyC,iBACaynB,IADuBlqB,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,uBACjB,cAAMA,IACDokB,qBAAsB,EAFV,IAGVjnB,EAAmC6C,EAAnC7C,KAAMipB,EAA6BpmB,EAA7BomB,UAA6BpmB,EAAlBwL,iBAHP,YAIP9O,IAAPS,GAAyB,OAAPA,GACpBuB,GAAiB,QAClB,EAAK2nB,MAAMlpB,OACIT,IAAZ0pB,GAAmC,OAAZA,GACzB1nB,GAAiB,aAClB,EAAK4nB,WAAWF,EATC,E,wDAYjB,OAAO,I,gCAGP,OAAOvnB,KAAKynB,a,2BAGZ,OAAOznB,KAAKwnB,S,gCAEG9lB,GACf,OAAO,IAAI4lB,EAAsB,CAChC3a,iBAAiBjL,EAAQiL,iBACzBtP,KAAKqE,EAAQrE,KACb4nB,YAAYtF,GAAYpW,SAAS7H,EAAQujB,mB,GAzBOD,KCM3CnlB,GAAoCzC,EAApCyC,iBACa6nB,IADuBtqB,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACZwmB,EAA+ExmB,EAA/EwmB,iBAAkB5B,EAA6D5kB,EAA7D4kB,SAAUE,EAAmD9kB,EAAnD8kB,SAAU2B,EAAyCzmB,EAAzCymB,qBAAsB1B,EAAmB/kB,EAAnB+kB,uBAC5CroB,IAAnB8pB,GAAiD,OAAnBA,GAChC9nB,GAAiB,oBAClBG,KAAK6nB,kBAAoBF,OACX9pB,IAAXkoB,GAAiC,OAAXA,GACxBlmB,GAAiB,YAClBG,KAAKsmB,UAAYP,OACSloB,IAAvB+pB,GAAyD,OAAvBA,GACpC/nB,GAAiB,wBAClBG,KAAK8nB,sBAAwBF,OACf/pB,IAAXooB,GAAiC,OAAXA,GACxBpmB,GAAiB,YAClBG,KAAKumB,UAAWN,EAChBjmB,KAAKwmB,mBAAqBN,E,6DAG1B,OAAOlmB,KAAK6nB,oB,+BAGZ,OAAO7nB,KAAKsmB,Y,2CAGZ,OAAOtmB,KAAK8nB,wB,+BAGZ,OAAO9nB,KAAKumB,Y,wCAGZ,OAAOvmB,KAAKwmB,sB,gCAEGuB,EAAwB5F,EAAiB5f,GACxD,IAAMqlB,EAAsB,GAC5B,OAAO,IAAIF,EAAwB,CAACC,iBAAiBpE,GAAiBha,SAASwe,EAAuBC,cACtGjC,SAAS2B,EAAwBO,kBAAkBF,EAAuBhC,SAAU6B,EACpFzF,EAAiB5f,GACjB0jB,SAAS8B,EAAuB9B,SAChC2B,qBAAqBA,EACrB1B,kBAAkB6B,EAAuB7B,sB,wCAEjBgC,EAAgBN,EAAsBzF,EAAiB5f,GAE/E,IADA,IAAMwjB,EAAW,GACT5iB,EAAE,EAAGA,EAAE+kB,EAAe1oB,OAAQ2D,IACrC,IACC,IAAMglB,EAAiBD,EAAe/kB,GAClCilB,OAAO,EACX,OAAOD,EAAe9qB,MACrB,KAAKopB,GAAYC,iBAChB0B,EAAUvB,GAAsBtd,SAAS4e,GACzC,MACD,KAAK1B,GAAYG,KAChBwB,EAAUd,GAAsB/d,SAAS4e,GACzC,MACD,KAAK1B,GAAYE,yBAChByB,EAAUpB,GAA8Bzd,SAAS4e,EAAgBhG,EAAiB5f,GAClFqlB,EAAqBrnB,KAAK6nB,GAC1B,MACD,QACC,MAAM,IAAIprB,MAAJ,0CAA6CmrB,EAAe9qB,OAEpE0oB,EAASxlB,KAAK6nB,GAEf,MAAM7Y,GACL,MAAM,IAAIvS,MAAM,iCAA0BmG,EAA1B,aAA+BoM,QAA/B,IAA+BA,OAA/B,EAA+BA,EAAGrS,QAGpD,OAAO6oB,M,MCxEDlmB,GAAoCzC,EAApCyC,iBACawoB,IADuBjrB,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACZmnB,EAAwCnnB,EAAxCmnB,OAAQnG,EAAgChhB,EAAhCghB,gBAAiB5f,EAAepB,EAAfoB,mBACnB1E,IAATyqB,GAA6B,OAATA,GACtBzoB,GAAiB,UAClBG,KAAKuoB,QAAUD,EACftoB,KAAKyS,eAAiBlQ,EACtBvC,KAAKwoB,WAAa,KAClBxoB,KAAKyoB,aAAezoB,KAAKyoB,aAAatoB,KAAKH,MAC3CA,KAAK0oB,cAAgB1oB,KAAK0oB,cAAcvoB,KAAKH,MAC5CA,KAAKmnB,iBAAkBhF,E,4DAKTwG,GACf,OAAO3oB,KAAKyoB,aAAaE,GAAkB,K,mCAE/BA,GAIZ,YAHqB9qB,IAAlBmC,KAAKwoB,YAA0C,OAAlBxoB,KAAKwoB,aACpCxoB,KAAKwoB,WAAaxoB,KAAK0oB,cAAcC,IAE/B3oB,KAAKwoB,a,oCAECG,GAEb,IADA,IAAMC,EAAY,GACVzlB,EAAE,EAAGA,EAAEnD,KAAKuoB,QAAQ/oB,OAAQ2D,IACnC,IACC,IAAM0lB,EAAQ7oB,KAAKuoB,QAAQplB,GAC3BylB,EAAUroB,KACT,IAAIslB,GAAS,CACZnC,OAAOmF,EAAMlB,iBAAiBjE,OAC9BuC,SAAS4C,EAAM5C,SACfD,UAAU9Z,EAAK4c,cAAc9oB,KAAKyS,gBAClCsT,SAAS8C,EAAM9C,SACfG,kBAAkB2C,EAAM3C,kBACxBJ,OAAO,CACN,IAAIL,GAAc,CACjB1T,KAAK8W,EAAMlB,iBAAiBnE,sBAC5BkC,QAAQ,CAAC,IAAIF,GAAoB,CAACzT,KAAK,QACvCoQ,gBAAiBniB,KAAKmnB,uBAM3B,MAAM5X,GACL,MAAM,IAAIvS,MAAJ,iCAAoCmG,EAApC,oBAA0CoM,QAA1C,IAA0CA,OAA1C,EAA0CA,EAAGrS,QAGrD,OAAO0rB,I,6BArCP,OAAO5oB,KAAKuoB,W,gCAuCGQ,EAAmB5G,EAAiB5f,GAEnD,OAAO,IAAI8lB,EAAmB,CAACC,OADhBS,EAAkBT,OAAOte,KAAI,SAAA6e,GAAK,OAAEnB,GAAwBne,SAASsf,EAAO1G,EAAiB5f,MAC9DA,sB,MC9DzCzC,GAAoC1C,EAApC0C,eACckpB,IADsB5rB,EAApByC,iB,WAEtB,WAAYsB,GAAO,wBACX8nB,EAAuB9nB,EAAvB8nB,2BACsBprB,IAA1BorB,GAAgE,OAAzBA,IACtChV,MAAMC,QAAQ+U,IACjBnpB,GAAe,wBAAyB,UACzC,IAAI,IAAIqD,EAAE,EAAGA,EAAE8lB,EAAsBzpB,OAAQ2D,IACD,kBAAjC8lB,EAAsB9lB,GAAG0a,MAClC/d,GAAe,yBAAD,OAA0BqD,EAA1B,UAAqC,UACX,kBAA/B8lB,EAAsB9lB,GAAG2a,IAClChe,GAAe,yBAAD,OAA0BqD,EAA1B,QAAmC,UAEnDnD,KAAKkpB,uBAAyBD,E,kEAG9B,OAAOjpB,KAAKkpB,0B,gCAEGxnB,GACf,OAAO,IAAIsnB,EAAwB,CACjCC,sBAAsBvnB,EAAQunB,4B,MCpBbE,G,WACpB,WAAYhoB,GAAO,wBACXioB,EAAyBjoB,EAAzBioB,wBACPppB,KAAKqpB,yBAA2BD,E,oEAGhC,OAAOppB,KAAKqpB,4B,gCAEG3nB,GACf,OAAO,IAAIynB,EAAQ,CAACC,wBAAyBJ,GAAwBzf,SAAS7H,EAAQ4nB,uB,KCRjFzpB,GAAkBzC,EAAlByC,iBACc0pB,G,WACjB,WAAYpoB,GAAQ,wBACRqoB,EAA8DroB,EAA9DqoB,qBAAsBC,EAAwCtoB,EAAxCsoB,sBAAuBlnB,EAAiBpB,EAAjBoB,cAC3DvC,KAAKyS,eAAiBlQ,EAChBvC,KAAK0pB,sBAAwBF,EAC7BxpB,KAAK2pB,uBAAyBF,EACpCzpB,KAAK4pB,QAAUC,SAASC,cAAc,UACtC9pB,KAAK+pB,WAAa/pB,KAAK+pB,WAAW5pB,KAAKH,MAEvCA,KAAKgqB,wBAA0BhqB,KAAKgqB,wBAAwB7pB,KAAKH,MACjEA,KAAKiqB,wBAA0BjqB,KAAKiqB,wBAAwB9pB,KAAKH,MACjEA,KAAKkqB,kBAAoBlqB,KAAKkqB,kBAAkB/pB,KAAKH,MACrDA,KAAKmqB,cAAcnqB,KAAKmqB,cAAchqB,KAAKH,MAC3CA,KAAKoqB,kBAAoBpqB,KAAKoqB,kBAAkBjqB,KAAKH,MACrDA,KAAKqqB,cAAe,E,yDAKR,IAAD,OACX,OAAO,IAAI9sB,SAAQ,SAACO,EAASC,GAC5B,GAAG,EAAKssB,aAAa,MAAM,IAAIrtB,MAAM,uBAErC,IAAMstB,EAAMT,SAASC,cAAc,OACnCQ,EAAIC,YAAc,YAClBD,EAAIE,IAAMte,EAAKe,iBAAiB,EAAKwF,eAAe5N,UAAU,EAAK8kB,uBACnEW,EAAI7c,iBAAiB,QAAQ,WAC5B,EAAK4c,cAAa,EAClB,EAAKT,QAAQlT,MAAQ4T,EAAI5T,MACzB,EAAKkT,QAAQjT,OAAS2T,EAAI3T,OAC1B,EAAKiT,QAAQa,WAAW,MAAMC,UAAUJ,EAAK,EAAG,EAAGA,EAAI5T,MAAO4T,EAAI3T,QAClE7Y,OAEDwsB,EAAI7c,iBAAiB,SAAS,SAAC9O,GAC9BZ,EAAOY,W,0CAKT,IAAIqB,KAAKqqB,aAAa,MAAM,IAAIrtB,MAAM,oB,8CAEf2tB,EAAUC,GACjC,OAAO5qB,KAAKiqB,wBAAwBU,EAAS,IAAKC,EAAS,O,8CAEpCC,EAAaC,GACpC,IAAMjgB,EAAIkgB,SAASF,EAAY7qB,KAAK4pB,QAAQlT,OACtC5L,EAAIigB,SAASD,EAAY9qB,KAAK4pB,QAAQjT,QAC5C,OAAO3W,KAAKkqB,kBAAkBrf,EAAGC,K,wCAEhBD,EAAGC,GACpB,GAAGJ,MAAMG,IAAIH,MAAMI,GAAG,OAAO,KAC7B,IAAMkgB,EAAOhrB,KAAKmqB,cAActf,EAAGC,GAC7BmgB,EAAoBjrB,KAAK0pB,sBAAsBsB,EAAK,IAC1D,IAAIC,EAAkB,OAAO,KAC7B,IAAMC,EAAiBD,EAAkBD,EAAK,IAC9C,IAAIE,EAAe,OAAO,KAC1B,IAAMC,EAAcD,EAAeF,EAAK,IACxC,OAAIG,EACUA,EAAYH,EAAK,IADR,O,oCAIVngB,EAAGC,GAOhB,OANA9K,KAAKoqB,oBACFvf,EAAE,EAAEA,EAAE,EACDA,GAAG7K,KAAK4pB,QAAQlT,QAAM7L,EAAE7K,KAAK4pB,QAAQlT,MAAM,GAChD5L,EAAE,EAAEA,EAAE,EACDA,GAAG9K,KAAK4pB,QAAQjT,SAAO7L,EAAE9K,KAAK4pB,QAAQjT,OAAO,GACnC3W,KAAK4pB,QAAQa,WAAW,MAAMW,aAAavgB,EAAGC,EAAG,EAAG,GAAGlM,O,kCAlDzE,OAAOoB,KAAKqqB,gB,iDAqDoBgB,GAChC,IAAM7B,EAAuB,GAgC7B,OA/BA6B,EAAejc,SAAQ,SAACkc,GACvB,IAAMN,EAAOM,EAAcN,KACrBC,EAAkBzB,EAAqBwB,EAAK9T,GAClD,GAAI+T,EAAJ,CAUA,IAAMC,EAAeD,EAAkBD,EAAK7T,GAC5C,GAAI+T,EAAJ,CAQA,IAAMC,EAAYD,EAAeF,EAAKO,GAClCJ,EAMJA,EAAYH,EAAKQ,GAAKF,EAAchpB,MALnC4oB,EAAeF,EAAKO,GAApB,eACEP,EAAKQ,EAAGF,EAAchpB,YAVxB2oB,EAAkBD,EAAK7T,GAAvB,eACE6T,EAAKO,EADP,eAEGP,EAAKQ,EAAGF,EAAchpB,aAbzBknB,EAAqBwB,EAAK9T,GAA1B,eACE8T,EAAK7T,EADP,eAEG6T,EAAKO,EAFR,eAGIP,EAAKQ,EAAGF,EAAchpB,YAwBrBknB,I,+BAEW9nB,EAASa,GAC3B,IAAM8oB,EAAe3pB,EAAQ2pB,oBACTxtB,IAAjBwtB,GAA6C,OAAjBA,GAC9BxrB,GAAiB,kBAClB,IAAM4pB,EAAuB/nB,EAAQ+nB,2BACV5rB,IAAxB4rB,GAA2D,OAAxBA,GACrC5pB,GAAiB,yBAClB,IAAM2pB,EAAuBD,EAAckC,0BAA0BJ,GACrE,OAAO,IAAI9B,EAAc,CAACC,qBAAqBA,EAAsBC,sBAAsBA,EAAuBlnB,sB,KClH5G1C,GAAoCzC,EAApCyC,iBACa6rB,IADuBtuB,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACXgf,EAAoChf,EAApCgf,mBAAoBxK,EAAgBxU,EAAhBwU,oBACH9X,IAArBsiB,GAAqD,OAArBA,GAClCtgB,GAAiB,sBAClBG,KAAKqgB,oBAAsBF,OACPtiB,IAAjB8X,GAA6C,OAAjBA,GAC9B9V,GAAiB,kBAClBG,KAAK6V,gBAAkBF,E,2DAGvB,OAAO3V,KAAK6V,kB,yCAGZ,OAAO7V,KAAKqgB,uB,gCAEG3e,GACf,OAAO,IAAIgqB,EAAiD,CAC3DvL,mBAAmBze,EAAQye,mBAC3BxK,eAAejU,EAAQiU,eAAe/K,EAAQkL,QAAQpU,EAAQiU,gBAAgB,W,MClBzE9V,GAAoCzC,EAApCyC,iBAAkBC,GAAkB1C,EAAlB0C,eACL6rB,G,WACpB,WAAYxqB,GAAO,IAAD,+BACV6Q,EAAuG7Q,EAAvG6Q,kBAAmB4Z,EAAoFzqB,EAApFyqB,iBAAkB5d,EAAkE7M,EAAlE6M,MAAO6d,EAA2D1qB,EAA3D0qB,+BAAgCC,EAA2B3qB,EAA3B2qB,0BAC/E9Z,GAAkBnS,GAAiB,qBACvCG,KAAK4S,mBAAqBZ,EACtB4Z,GAAiB/rB,GAAiB,oBACtCG,KAAK+rB,kBAAoBH,EACd,OAAR5d,QAAsBnQ,IAARmQ,GAChBnO,GAAiB,SACC,kBAATmO,GACTlO,GAAe,QAAS,UACzBE,KAAK4V,OAAS5H,OAEsBnQ,IAAjCguB,GAA6E,OAAjCA,GAC9ChsB,GAAiB,kCAClBG,KAAKgsB,gCAAiCH,OAEPhuB,IAA5BiuB,GAAmE,OAA5BA,GACzCjsB,GAAiB,6BAClBG,KAAKisB,2BAA4BH,EACjC9rB,KAAKksB,uCAAuC,GAC5ClsB,KAAKisB,2BAA2B7c,SAAQ,SAAA+c,GAAuB,OAC9D,EAAKD,uCAAuCC,EAAwBhM,oBAAqBgM,EAAwBxW,kBAElH3V,KAAKosB,+BAAgCpsB,KAAKosB,+BAA+BjsB,KAAKH,M,2EAchDmgB,GAC9B,OAAOngB,KAAKksB,uCAAuC/L,K,4BAZnD,OAAOngB,KAAK4V,S,wCAGZ,OAAO5V,KAAK4S,qB,uCAGZ,OAAO5S,KAAK+rB,oB,qDAGZ,OAAO/rB,KAAKgsB,mC,gCAKGtqB,EAASa,GACxB,OAAO,IAAIopB,EAAkC,CAC5C3d,MAAMtM,EAAQsM,MACdgE,kBAAkBtQ,EAAQsQ,kBAC1B4Z,iBAAiBlqB,EAAQkqB,iBACzBC,+BAA+BtC,GAAchgB,SAAS7H,EAAQmqB,+BAAgCtpB,GAC9FupB,0BAA0BpqB,EAAQoqB,0BAA0B9hB,KAAI,SAAAqiB,GAAwB,OAAEX,GAAiDniB,SAAS8iB,Y,KChDlIC,IADuBlvB,EAApCyC,iBAAoCzC,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACX6B,EAAM7B,EAAN6B,KACPhD,KAAKiD,MAAQD,E,uDAGb,OAAOhD,KAAKiD,Q,mCAGZ,OAAOjD,KAAKiD,MAAM,M,gCAEH4G,EAAQtH,GAEvB,OAAO,IAAI+pB,EAAsB,CAChCtpB,KAFY6G,EAAOG,KAAI,SAAAuiB,GAAmB,OAAEZ,GAAkCpiB,SAASgjB,EAAqBhqB,Y,MCX1FiqB,IAHuBpvB,EAApCyC,iBAAoCzC,EAAlB0C,e,WAIzB,WAAY2sB,GAAsB,oBACjCzsB,KAAK0sB,sBAAuB1sB,KAAK0sB,sBAAsBvsB,KAAKH,MAC5DA,KAAK2sB,uBAAwB3sB,KAAK2sB,uBAAuBxsB,KAAKH,MAC9DA,KAAK4sB,sBAAuBH,E,kEAKPI,GACrB,OAAO7sB,KAAK4sB,sBAAsB9S,IAAI+S,K,6CAEhBC,GACtB,IADgC,EAC5BC,EAAS,GADmB,cAEZD,GAFY,IAEhC,IAAI,EAAJ,qBAA8B,CAAC,IAAvBD,EAAsB,QACvBG,EAAqBhtB,KAAK0sB,sBAAsBG,GAClDG,IACJD,EAAQA,EAAQhjB,OAAOijB,KALQ,8BAOhC,OAAOD,I,iCAZP,OAAO9Y,MAAM4J,KAAK7d,KAAK4sB,sBAAsBK,W,gCAc9BpjB,GACf,IAAM4iB,EAAuB,IAAIS,IAIjC,OAHArjB,EAAOuF,SAAQ,SAAAsI,GACd+U,EAAqB5S,IAAInC,EAAK,EAAsBA,EAAK,MAEnD,IAAI8U,EAAwBC,O,MC7B7B5sB,GAAqCzC,EAArCyC,iBACastB,IADwB/vB,EAAnB0C,e,WAEtB,WAAYqB,GAAQ,wBACRisB,EAAiFjsB,EAAjFisB,UAAWC,EAAsElsB,EAAtEksB,KAAM7gB,EAAgErL,EAAhEqL,aAAc8gB,EAAkDnsB,EAAlDmsB,wBAAyBC,EAAyBpsB,EAAzBosB,sBAC3DF,GAAMxtB,GAAiB,QACvButB,GAAWvtB,GAAiB,aAC5BytB,GAAyBztB,GAAiB,2BAC/CG,KAAKwtB,MAAQH,EACnBrtB,KAAKytB,WAAaL,EAClBptB,KAAK8W,cAAgBtK,EACrBxM,KAAK0tB,yBAA2BJ,EAChCttB,KAAK2tB,uBAAyBJ,E,iDAIxB,OAAOvtB,KAAKwtB,Q,gCAGZ,OAAOxtB,KAAKytB,a,mCAGlB,OAAOztB,KAAK8W,gB,8CAGZ,OAAO9W,KAAK0tB,2B,4CAGZ,OAAO1tB,KAAK2tB,0B,+BAEKxiB,GACX,OAAO,IAAIgiB,EAAM,CACtBC,UAAUjiB,EAAIiiB,UACLC,KAAMliB,EAAIkiB,KACnB7gB,aAAarB,EAAIqB,aACjB+gB,sBAAsBpiB,EAAIoiB,sBAC1BD,wBAAwBniB,EAAImiB,wBAAwBd,GAAwBjjB,SAAS4B,EAAImiB,yBAAyB,W,MCnC7GztB,GAAqBzC,EAArByC,iBACa+tB,G,WACjB,WAAYzsB,GAAQ,wBACR6I,EAA6B7I,EAA7B6I,IAAK6jB,EAAwB1sB,EAAxB0sB,qBACR7jB,GAAKnK,GAAiB,OACtBguB,GAAsBhuB,GAAiB,wBAC5CG,KAAK8tB,KAAO9jB,EAClBhK,KAAK+tB,sBAAwBF,EAC7B7tB,KAAKguB,eAAgBhuB,KAAKguB,eAAe7tB,KAAKH,MAC9CA,KAAKiuB,qBAAsBjuB,KAAKiuB,qBAAqB9tB,KAAKH,M,2DAEzCqtB,GACjB,OAAIrtB,KAAK8tB,KAAK1U,IAAIiU,GACLrtB,KAAK8tB,KAAKhU,IAAIuT,GADI,O,2CAGXD,GACpB,OAAOptB,KAAK+tB,sBAAsBjU,IAAIsT,M,gCAEpBc,GAGZ,IAFA,IAAMC,EAAY,IAAIjB,IACtBW,EAAuB,IAAIX,IAClB/pB,EAAI,EAAGA,EAAI+qB,EAAS1uB,OAAQ2D,IAAK,CAC/C,IAAMgN,EAAQgd,GAAMrX,QAAQoY,EAAS/qB,IAC5BgrB,EAAUtU,IAAI1J,EAAMkd,KAAMld,GAC/B0d,EAAqBzU,IAAIjJ,EAAMid,WAIlCS,EAAqB/T,IAAI3J,EAAMid,WAAW7sB,KAAK4P,GAH/C0d,EAAqBhU,IAAI1J,EAAMid,UAAW,CAACjd,IAKvC,OAAO,IAAIyd,EAAO,CAAE5jB,IAAKmkB,EAAYN,qBAAqBA,Q,KC/B3DhuB,GAAmBzC,EAAnByC,iBACcuuB,G,WACjB,WAAYjtB,GAAO,wBACdktB,EAAiBltB,EAAjBktB,MAAOC,EAAUntB,EAAVmtB,SACdtuB,KAAKuuB,OAASF,EACVA,GACHxuB,GAAiB,SACdyuB,GACHzuB,GAAiB,YAClBG,KAAKwuB,UAAYF,EACjBtuB,KAAKyuB,gBAAiB,KACtBzuB,KAAK0uB,QAAS1uB,KAAK0uB,QAAQvuB,KAAKH,M,sDAEvB,IAAD,OACLA,KAAKyuB,iBACPE,aAAa3uB,KAAKyuB,iBACnBzuB,KAAKyuB,gBAAkBlZ,YAAW,WACjC,EAAKiZ,cACHxuB,KAAKuuB,Y,KCPF1uB,GAAoCzC,EAApCyC,iBACa+uB,IADuBxxB,EAAlB0C,e,WAEzB,WAAYqB,GAAO,IAAD,2BACjByP,GAAqB5Q,MADJ,IAEVygB,EAECtf,EAFDsf,cAAe4B,EAEdlhB,EAFckhB,MAAO/N,EAErBnT,EAFqBmT,WAAYua,EAEjC1tB,EAFiC0tB,gBACzCC,EACQ3tB,EADR2tB,WAAYvQ,EACJpd,EADIod,sBAAuBwQ,EAC3B5tB,EAD2B4tB,OAAQxsB,EACnCpB,EADmCoB,cAC3CysB,EAAQ7tB,EAAR6tB,OACAhvB,KAAKivB,QAAUD,EACfhvB,KAAKyS,eAAiBlQ,EAClB8f,GAAMxiB,GAAiB,SAC3BG,KAAKkvB,OAAS7M,EACV/N,GAAWzU,GAAiB,cAChCG,KAAKmvB,YAAc7a,EACfua,GAAgBhvB,GAAiB,mBACrCG,KAAKovB,iBAAmBP,EACpBpO,GAAc5gB,GAAiB,iBACnCG,KAAKghB,eAAiBP,EAClBqO,GAAWjvB,GAAiB,cAChCG,KAAKqvB,YAAcP,EACfvQ,GAAsB1e,GAAiB,yBAC3CG,KAAKqJ,uBAAyBkV,EAC9Bve,KAAKsvB,QAAUP,EACf/uB,KAAKwT,qBAAuBxT,KAAKwT,qBAAqBrT,KAAKH,MAC3DA,KAAKmiB,gBAAiBniB,KAAKmiB,gBAAgBhiB,KAAKH,MAChDA,KAAKiiB,cAAejiB,KAAKiiB,cAAc9hB,KAAKH,MAC5CA,KAAKuvB,iCAAmCvvB,KAAKuvB,iCAAiCpvB,KAAKH,MACnFA,KAAKwvB,mBAAqBxvB,KAAKwvB,mBAAmBrvB,KAAKH,MACvDA,KAAKyvB,+CAAiD,IAAIrB,GAAsB,CAC/EC,MAAM,GAAKC,SAAStuB,KAAKwvB,qBAE1Blb,EAAWkL,WAAWpQ,SAAQ,SAAAtC,GAAS,OAAEA,EAAUW,iBAAiB,kBAAmB,EAAK8hB,qCAC5FvvB,KAAKiiB,gBAAgB7S,SAAQ,SAAAsgB,GAAgB,OAAEA,EAAiBjiB,iBAAiB,sBAAuB,EAAK8hB,qCAC7G9d,GAAczR,KAAM,eAAe,kBAAI,EAAK2vB,eAAa,SAACrtB,GAAD,OAAS,EAAKqtB,YAAcrtB,K,4DAwCtE2kB,GACf,OAAOjnB,KAAKqiB,MAAMF,gBAAgB8E,K,oCAErBA,GACb,OAAOjnB,KAAKqiB,MAAMJ,kB,2CAEEnV,GACpB,OAAO9M,KAAKiiB,gBAAgB5f,QAAO,SAAAwK,GAAI,OAAEA,EAAKC,YAAYA,O,yDA0B1D9M,KAAKyvB,+CAA+Cf,Y,2CAGpD,IAAMkB,EAAwB,IAAI1C,IAClCltB,KAAKiiB,gBAAgB7S,SAAQ,SAAAsgB,GAAmB,IAAD,EAC9C,UAAAA,EAAiBpc,gBAAjB,SAA2BlE,SAAQ,SAAAygB,GAClCD,EAAsB/V,IAAIgW,EAAQrP,GAAIqP,SAGxC7vB,KAAKsU,WAAWkL,WAAWpQ,SAAQ,SAAAtC,GAAY,IAAD,EAC7ClQ,QAAQmC,IAAI,sBACZnC,QAAQmC,IAAI+N,EAAUwG,UACtB,UAAAxG,EAAUwG,gBAAV,SAAoBlE,SAAQ,SAAAygB,GAC3BD,EAAsB/V,IAAIgW,EAAQrP,GAAIqP,SAGxC7vB,KAAK8vB,aAAe7b,MAAM4J,KAAK+R,EAAsBxtB,UACrDpC,KAAK6Q,gBAAgBZ,QAAQ,cAAejQ,KAAK8vB,gB,gDAxFlB,IAAD,gBACd9vB,KAAKkvB,OAAO1P,YADE,IAC9B,IAAI,EAAJ,sBACC,GADD,QACSqB,MAAMrhB,OAAO,EAAE,OAAO,GAFD,8BAG9B,OAAO,I,6BAGP,OAAOQ,KAAKivB,U,oCAGZ,OAAOjvB,KAAKyS,iB,2BAGZ5S,GAAiB,U,4CAGjB,OAAOG,KAAKqJ,yB,iCAGZ,OAAOrJ,KAAKqvB,c,4BAGZ,OAAOrvB,KAAKkvB,S,sCAGZ,OAAOlvB,KAAKovB,mB,oCAGZ,OAAOpvB,KAAKghB,iB,iCAGZ,OAAOhhB,KAAKmvB,c,kCAGZ,OAAOnvB,KAAK8vB,e,6BAGZ,OAAO9vB,KAAKsvB,U,mCAYZ,IAAIS,EAAM,KASV,OARA/vB,KAAKiiB,gBAAgB7S,SAAQ,SAAAsgB,GACA,IAAzBA,EAAiBvR,OAAoC,OAAzBuR,EAAiBvR,YAAuCtgB,IAAzB6xB,EAAiBvR,QACtE,OAAN4R,GAGCA,EAAIL,EAAiBvR,SAFxB4R,EAAML,EAAiBvR,UAKlB4R,I,mCAGP,IAAIC,EAAM,KAQV,OAPAhwB,KAAKiiB,gBAAgB7S,SAAQ,SAAAsgB,IACnB,OAANM,GAGCA,EAAIN,EAAiBvR,SAFxB6R,EAAMN,EAAiBvR,UAKlB6R,K,gCAsBQ1X,EAAa/V,GAC5B,IAAMzF,EAAOwb,EAAYxb,KACrBmzB,EAAW,KACT3b,EAAaP,GAAWxK,SAAS+O,EAAYhE,YAClD,kBAAI2b,IAAU1tB,GACTgc,EAAwB5a,EAAsB4F,SAAS+O,EAAY/V,cAAc2tB,UACjF7N,EAAQL,GAAczY,SAAS+O,EAAY+J,MAAO/N,EAAYiK,GAC9DsQ,EAAkBsB,GAAgB5mB,SAAS+O,EAAYuW,iBACvDC,EAAazG,GAAmB9e,SAAS+O,EAAYwW,YAC3D,SAAC7H,GAAD,OAAc5E,EAAMF,gBAAgB8E,KAAa1kB,GAC3Cke,EAAgB6L,GAAsB/iB,SAAS+O,EAAYmI,cAAele,GAC1EwsB,EAASzW,EAAYyW,OAAOnB,GAAOrkB,SAAS+O,EAAYyW,QAAQ,KAOtE,OANAkB,EAAY,IAAIrB,EAAS,CACxB9xB,KAAKA,EAAM2jB,cAAcA,EAAc4B,MAAMA,EAAO/N,WAAWA,EAAYua,gBAAgBA,EAAiBC,WAAWA,EACvHvQ,sBAAsBA,EAAuBwQ,OAAOA,EACpDxsB,gBACAysB,OAAO1W,EAAY0W,a,MCrJDoB,IADuBhzB,EAApCyC,iBAAoCzC,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACXkvB,EAAmDlvB,EAAnDkvB,cAAerjB,EAAoC7L,EAApC6L,QAASD,EAA2B5L,EAA3B4L,gBAAiBsG,EAAUlS,EAAVkS,SAChDrT,KAAKswB,eAAiBD,EACtBrwB,KAAKgT,SAAWhG,EAChBhN,KAAKiT,UAAYI,EACjBrT,KAAK+S,iBAAmBhG,E,0DAGxB,OAAO/M,KAAKswB,iB,8BAGZ,OAAOtwB,KAAKgT,W,+BAGZ,OAAOhT,KAAKiT,Y,sCAGZ,OAAOjT,KAAK+S,oB,gCAEGrR,GACf,OAAO,IAAI0uB,EAAa1uB,O,MCtBL6uB,IADuBnzB,EAApCyC,iBAAoCzC,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACXqvB,EAA2BrvB,EAA3BqvB,eAAgBC,EAAWtvB,EAAXsvB,UACvBzwB,KAAK0wB,gBAAiBF,EACtBxwB,KAAK2wB,WAAaF,E,oDAIlB,OAAOzwB,KAAK0wB,gBAAgB1wB,KAAK2wB,c,gCAGjC,OAAO3wB,KAAK2wB,e,MCXOC,IADuBxzB,EAApCyC,iBAAoCzC,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACXqvB,EAA2BrvB,EAA3BqvB,eAAgBC,EAAWtvB,EAAXsvB,UACvBzwB,KAAK0wB,gBAAiBF,EACtBxwB,KAAK2wB,WAAaF,E,oDAIlB,OAAOzwB,KAAK0wB,gBAAgB1wB,KAAK2wB,c,gCAGjC,OAAO3wB,KAAK2wB,e,MCXOE,IADuBzzB,EAApCyC,iBAAoCzC,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACXqf,EAAuBrf,EAAvBqf,GAAI1jB,EAAmBqE,EAAnBrE,KAAMg0B,EAAa3vB,EAAb2vB,YACjB9wB,KAAK+gB,IAAMP,EACXxgB,KAAK2S,MAAQ7V,EACbkD,KAAK+wB,aAAeD,E,+CAGpB,OAAO9wB,KAAK+gB,M,2BAGZ,OAAO/gB,KAAK2S,Q,kCAGZ,OAAO3S,KAAK+wB,iB,MCVNlxB,GAAoCzC,EAApCyC,iBACamxB,IADuB5zB,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACX8vB,EAAsD9vB,EAAtD8vB,cAAeC,EAAuC/vB,EAAvC+vB,gBAAiBC,EAAsBhwB,EAAtBgwB,qBACnCF,GAAcpxB,GAAiB,iBACnCG,KAAKoxB,eAAiBH,EAClBC,GAAgBrxB,GAAiB,mBACrCG,KAAKqxB,iBAAmBH,EACpBC,GAAqBtxB,GAAiB,wBAC1CG,KAAKsxB,sBAAwBH,E,0DAG7B,OAAOnxB,KAAKoxB,iB,sCAGZ,OAAOpxB,KAAKqxB,mB,2CAGZ,OAAOrxB,KAAKsxB,yB,gCAEG5vB,GAAS,IAAD,IACjB4R,EAAQ,UAAG5R,EAAQ4R,gBAAX,aAAG,EAAkBtJ,KAAI,SAAAunB,GAAc,OAAG,IAAIV,GAAQU,MAC9Df,EAAiB,SAAChQ,GAAD,cAAMlN,QAAN,IAAMA,OAAN,EAAMA,EAAUjR,QAAO,SAAAwtB,GAAO,OAAEA,EAAQrP,KAAKA,KAAI,IAClE0Q,EAAkBxvB,EAAQwvB,gBACjB,OAAfA,QAAe,IAAfA,KAAiB9hB,SAAQ,SAAAoiB,GACpBA,EAAeC,kBACnBD,EAAeC,gBAAkBD,EAAeC,gBAAgBznB,KAAI,SAAA0nB,GAEnE,OADAA,EAAelB,eAAiBA,EACzB,IAAID,GAAemB,UAG5B,IAAMP,EAAuBzvB,EAAQyvB,qBASrC,OAPoB,OAApBA,QAAoB,IAApBA,KAAsB/hB,SAAQ,SAAAuiB,GACzBA,EAAoBC,uBACxBD,EAAoBC,qBAAuBD,EAAoBC,qBAAqB5nB,KAAI,SAAA6nB,GAEvF,OADAA,EAAoBrB,eAAiBA,EAC9B,IAAII,GAAoBiB,UAG1B,IAAIb,EAAe,CACzB1d,WACA2d,cAAa,UAACvvB,EAAQuvB,qBAAT,aAAC,EAAuBjnB,KAAI,SAAA8nB,GAAmB,OAAE1B,GAAa7mB,SAASuoB,MACpFZ,kBACAC,6B,0BC/CkBY,IAFQ30B,EAArByC,iB,WAGP,cAA0B,IAAbitB,EAAY,EAAZA,UAAY,oBACxB9sB,KAAKgyB,WAAalF,E,sDAGlB,OAAO9sB,KAAKgyB,c,gCAEGtwB,GAEf,OAAO,IAAIqwB,EAAS,CAACjF,UADHprB,EAAO,Q,MCPNuwB,IAFQ70B,EAArByC,iB,WAGP,cAA8B,IAAjBqyB,EAAgB,EAAhBA,eAAgB,oBAC5BlyB,KAAKmyB,gBAAkBD,E,4DAE8B,IAAxCE,EAAuC,EAAvCA,YAAaC,EAA0B,EAA1BA,YAAaC,EAAa,EAAbA,YACjCC,EAASxH,SAASqH,EAAYpyB,KAAKmyB,gBAAgB3yB,QACnDgzB,EAAexyB,KAAKmyB,gBAAgBI,GAC1C,GAAkB,OAAfC,QAAoC30B,IAAf20B,GAA0BA,EAAahzB,OAAO,EAAE,OAAO,KAC/E,IACMizB,EAAaD,EADJzH,SAASsH,EAAYG,EAAahzB,SAEjD,OAAgB,OAAbizB,QAAgC50B,IAAb40B,GAAwBA,EAAWjzB,OAAO,EAAU,KAEzDizB,EADF1H,SAASuH,EAAYG,EAAWjzB,SAE/BstB,a,gCAEDprB,GAWf,OAAO,IAAIuwB,EAAc,CAACC,eAVHxwB,EAAO,GAC5BsI,KAAI,SAAAwoB,GAAY,OAChBA,EACCxoB,KAAI,SAAAyoB,GAAU,OACdA,EACCzoB,KAAI,SAAA0oB,GAAQ,OACZX,GAASxoB,SAASmpB,kB,MCtBHC,IAFQv1B,EAArByC,iB,WAGP,cAA+B,IAAlB+yB,EAAiB,EAAjBA,eAAiB,oBAC7B5yB,KAAK6yB,gBAAkBD,E,4DAOvB,IAFqD,IAAxCR,EAAuC,EAAvCA,YAAaC,EAA0B,EAA1BA,YAAaC,EAAa,EAAbA,YACnCQ,EAAe,GACXC,EAAmB,EAAGA,EAAmB/yB,KAAK6yB,gBAAgBrzB,OAAQuzB,IAAqB,CAClG,IACMjG,EADgB9sB,KAAK6yB,gBAAgBE,GACXC,aAAa,CAACZ,cAAaC,cAAaC,gBACzD,OAAZxF,GAAkBA,EAAUttB,OAAO,IACtCszB,EAAaA,EAAa/oB,OAAO+iB,IAElC,OAAOgG,I,qCAVP,OAAO9yB,KAAK6yB,mB,gCAYGnxB,GAKf,OAAO,IAAIixB,EAAwB,CAACC,eAHnClxB,EAAO,EACNsI,KAAI,SAAAipB,GAAoB,OACxBhB,GAAc1oB,SAAS0pB,Y,MCnBrBC,IAJuB91B,EAArByC,iBAIa,EAARszB,KAAKC,IACGC,G,WACpB,cAAwD,IAA3CC,EAA0C,EAA1CA,QAASC,EAAiC,EAAjCA,UAAYC,EAAqB,EAArBA,oBAAqB,oBACtDxzB,KAAKyzB,SAAWH,EAChBtzB,KAAK0zB,WAAaH,EAClBvzB,KAAK2zB,qBAAuBH,EAC5BxzB,KAAK4zB,WAAa5zB,KAAK2zB,qBAAqBn0B,OAC5CQ,KAAK6zB,aAAe7zB,KAAK2zB,qBAAqB,GAAGn0B,O,4DASjD,IADiD,IAApCogB,EAAmC,EAAnCA,WAAYC,EAAuB,EAAvBA,aAAchV,EAAS,EAATA,EAAGC,EAAM,EAANA,EAAGO,EAAG,EAAHA,EACvCuU,EAAW,GAAEA,GAAYsT,GAC/B,KAAMrT,EAAa,GAAEA,GAAcqT,GACnC,IAAMY,EAAW/I,SAASnL,EAAW5f,KAAK4zB,WAAWV,IACrDt2B,QAAQmC,IAAI,gBAAgB+0B,EAAS,WAAW9zB,KAAK4zB,YACrD,IAAMG,EAAahJ,SAASlL,EAAa7f,KAAK6zB,aAAaX,IAC3Dt2B,QAAQmC,IAAI,uBAAuBg1B,EAAW,WAAW/zB,KAAK6zB,cAC9D,IAAMG,EAA0Bh0B,KAAK2zB,qBAAqBG,GAAUC,GACpE,GAA8B,OAA3BC,QAA2Dn2B,IAA1Bm2B,EAAoC,OAAO,KAC/E,IAAM5B,EAAcvnB,EAAE7K,KAAK0zB,WAAW,GAAIrB,EAAcvnB,EAAE9K,KAAK0zB,WAAW,GAAIpB,EAAcjnB,EAAErL,KAAK0zB,WAAW,GAE9G,OADA92B,QAAQmC,IAAI,kBAAkBqzB,EAAY,gBAAgBC,EAAY,gBAAgBC,GAC/E0B,EAAwBhB,aAAa,CAACZ,cAAaC,cAAaC,kB,8BAhBvE,OAAOtyB,KAAKyzB,W,gCAGZ,OAAOzzB,KAAK0zB,c,gCAeGhyB,GAWf,OAAO,IAAI2xB,EAAY,CAACC,QAVR5xB,EAAO,EAUU6xB,UATf7xB,EAAO,EAUxB8xB,oBARA9xB,EAAO,EACNsI,KAAI,SAAAiqB,GAAe,OACnBA,EACCjqB,KAAI,SAAAkqB,GAAgB,OACnBvB,GAAwBppB,SAAS2qB,e,KCpCjChB,IAJuB91B,EAArByC,iBAIa,EAARszB,KAAKC,IACGe,G,WACpB,cAAwD,IAA3Cb,EAA0C,EAA1CA,QAASC,EAAiC,EAAjCA,UAAYC,EAAqB,EAArBA,oBAAqB,oBACtDxzB,KAAKyzB,SAAWH,EAChBtzB,KAAK0zB,WAAaH,EAClBvzB,KAAK2zB,qBAAuBH,EAC5BxzB,KAAK4zB,WAAa5zB,KAAK2zB,qBAAqBn0B,OAC5CQ,KAAK6zB,aAAe7zB,KAAK2zB,qBAAqB,GAAGn0B,O,4DAQA,IAApCogB,EAAmC,EAAnCA,WAAYC,EAAuB,EAAvBA,aAAchV,EAAS,EAATA,EAAGC,EAAM,EAANA,EAAGO,EAAG,EAAHA,EACvCyoB,EAAW/I,SAASnL,EAAW5f,KAAK4zB,WAAWV,IAC/Ca,EAAahJ,SAASlL,EAAa7f,KAAK6zB,aAAaX,IACrDc,EAA0Bh0B,KAAK2zB,qBAAqBG,GAAUC,GACpE,GAA8B,OAA3BC,QAA2Dn2B,IAA1Bm2B,EAAoC,OAAO,KAC/E,IAAM5B,EAAcvnB,EAAE7K,KAAK0zB,WAAW,GAAIrB,EAAcvnB,EAAE9K,KAAK0zB,WAAW,GAAIpB,EAAcjnB,EAAErL,KAAK0zB,WAAW,GAC9G,OAAOM,EAAwBhB,aAAa,CAACZ,cAAaC,cAAaC,kB,8BAXvE,OAAOtyB,KAAKyzB,W,gCAGZ,OAAOzzB,KAAK0zB,c,gCAUGhyB,GACCA,EAAO,EACLA,EAAO,EAWxB,MAAM,IAAI1E,MAAM,uB,KC3BEqP,IADIjP,EAAlByC,iB,2GAce0C,GACpB,OAAO,IAAIhF,SAAQ,SAACO,EAASC,GAC5B,IAAM8G,EAAWtC,EAAcsC,SACzBuvB,EAAa/nB,EAAcgoB,yBAAyBva,IAAIjV,GAC9D,GAAGuvB,EAEFt2B,EAAQs2B,OAFT,CAMA,IAAIE,EAA+BjoB,EAAckoB,2CAA2Cza,IAAIjV,GAChG,GAAGyvB,EACFA,EAA6Bl2B,KAAKN,GAASY,MAAMX,OADlD,CAIAu2B,EAA+B,IAAIv0B,EACnCsM,EAAckoB,2CAA2C1a,IAAIhV,EAAUyvB,GACvE,IAAME,EAA+B,kBAAKnoB,EAAckoB,2CAA2Clb,OAAOxU,IAC1GyvB,EAA6Bl2B,MAAK,SAACg2B,GAClCI,IACAnoB,EAAcgoB,yBAAyBxa,IAAIhV,EAAUuvB,GACrDt2B,EAAQs2B,MACN11B,OAAM,SAACC,GACT61B,IACAz2B,EAAOY,MAER0N,EAAcooB,eAAelyB,GAC3BnE,MAAK,SAACg2B,GACNx3B,QAAQmC,IAAI,cACZnC,QAAQmC,IAAIq1B,GACZE,EAA6Bl0B,OAAOg0B,MAEpC11B,MAAM41B,EAA6Bj0B,gB,qCAIjBkC,GACrB,OAAO,IAAIhF,SAAQ,SAACO,EAASC,GAC5B,IAAI22B,EAAgB,EAChBzE,EAAW,KAAM0E,EAAiB,KAClCC,GAAO,EACLC,EAAoB,SAACl2B,GAC1B,GAAGA,EAGF,OAFAi2B,GAAO,OACP72B,EAAOY,GAGLi2B,KACHF,EACiB,IACjBE,GAAO,EACa,OAAjBD,GACFtoB,EAAcyoB,kCAAkC7E,EAAU0E,GAC3D72B,EAAQ,CAACmyB,SAASA,EAAU1tB,cAAcA,MAE3C8J,EAAc0oB,oBAAoBxyB,GACjCnE,MAAK,SAAC42B,GACN/E,EAAW+E,EACXH,OACEn2B,MAAMm2B,GACTxoB,EAAc4oB,kBAAkB1yB,GAAenE,MAAK,SAAC82B,GACpDP,EAAeO,EACfL,OACEn2B,MAAMm2B,Q,mCAGSj3B,GAEnB,OADAhB,QAAQmC,IAAI,gBACL,IAAIxB,SAAQ,SAACO,EAASC,GAC5BJ,EAAiBw3B,SAASv3B,GAAKQ,MAAK,SAACsD,GACpC,IAAM0zB,EAAYx3B,EAAIkF,QAAQ,MAAM,GAAGlF,EAAIy3B,SAAS,OAAO,EAE1DhC,GAAY9pB,SAAS7H,GAErB4zB,GAAY/rB,SAAS7H,GACtB5D,EAAQs3B,MACN12B,MAAMX,Q,wDAG8BkyB,EAAU0E,GAC5BA,EAAe1D,cACvB7hB,SAAQ,SAAAmmB,GACrB,IAAMzoB,EAAYmjB,EAAS3b,WAAWN,UAAUuhB,EAAalF,eACzDvjB,IACJA,EAAUC,gBAAkBwoB,EAAaxoB,gBACzCD,EAAUE,QAAUuoB,EAAavoB,QACjCF,EAAUuG,SAAWkiB,EAAaliB,aAEnC,IAAM6d,EAAkByD,EAAezD,gBACjCsE,EAAsB,GAC5BvF,EAAShO,gBAAgB7S,SAAQ,SAAAvC,GAAI,OAAE2oB,EAAoB3oB,EAAKrC,QAAQqC,KACxEqkB,EAAgB9hB,SAAQ,SAAAoiB,GACvB,IAAM3kB,EAAO2oB,EAAoBhE,EAAehnB,QAChD,GAAIqC,EAAJ,CACAA,EAAKsR,MAAQqT,EAAerT,MAC5BtR,EAAKuR,OAASoT,EAAeiE,aAC7B,IAAMC,EAAclE,EAAeC,gBAC/BiE,IACJ7oB,EAAKuS,aAAesW,EAAY1rB,KAAI,SAAA0nB,GAAc,OAAEA,EAAe7B,gBAEpE,IAAMvb,EAAa2b,EAAS3b,WACCqgB,EAAexD,qBACvB/hB,SAAQ,SAAAuiB,GAC5B,IAAM7kB,EAAYwH,EAAWN,UAAU2d,EAAoB5f,MAC3D,GAAIjF,EAAJ,CACAlQ,QAAQmC,IAAI,4CACZnC,QAAQmC,IAAI4yB,EAAoBC,sBAChC,IAAM8D,EAAc/D,EAAoBC,qBACpC8D,IACJ5oB,EAAUwG,SAAWoiB,EAAYrzB,QAAO,SAAAwvB,GAAmB,QAAEA,EAAoBhC,WAAoB7lB,KAAI,SAAA6nB,GAAmB,OAAEA,EAAoBhC,kB,wCAG3HhrB,GACxB,OAAO,IAAItH,SAAQ,SAACO,EAASC,GAC5B,IAAOH,EAAMsO,EAAK+oB,kBAAkBpwB,GACpClH,EAAiBw3B,SAASv3B,GAAKQ,MAAK,SAACsD,IACjCA,EAAQi0B,cAAej0B,EAAQizB,gBAKlC/3B,QAAQmC,IAAI,oBACZnC,QAAQmC,IAAI2C,GACZ5D,EAAQkzB,GAAeznB,SAAS7H,EAAQizB,kBALvC52B,EAAO,IAAIf,MAAM,oCAMhB0B,MAAMX,Q,0CAGgBwE,GAC1B,OAAO,IAAIhF,SAAQ,SAACO,EAASC,GAC5B,IAAOH,EAAMsO,EAAK+F,YAAY1P,GAC9B5E,EAAiBw3B,SAASv3B,GAAKQ,MAAK,SAACw3B,GACpC,IAAM3F,EAAWrB,GAASrlB,SAASqsB,EAAarzB,GAChDzE,EAAQmyB,MACNvxB,MAAMX,Q,oCA7IV,YAHkCF,IAA/BwO,EAAcoG,iBAChBpG,EAAcoG,eAAiBzO,EAAcuF,SAASssB,KAEhDxpB,EAAcoG,iB,qCAMrB,YAHmC5U,IAAhCwO,EAAcypB,kBAChBzpB,EAAcypB,gBAAkBpsB,EAAeH,SAASwsB,GAAoB/1B,KAAKuC,gBAE3E8J,EAAcypB,oB,MA2IvBzpB,GAAcgoB,yBAA2B,IAAInH,IAC7C7gB,GAAckoB,2CAA6C,IAAIrH,ICtK/DhuB,OAAO82B,UAAW,GAEd,qUAAqUC,KAAKC,UAAUC,YAC7U,0kDAA0kDF,KAAKC,UAAUC,UAAUplB,OAAO,EAAG,OACvnD7R,OAAO82B,UAAW,GACJ92B,cAAf,SCJek3B,I,OADe,CAACC,SAAS,WAAYC,QAAQ,UAAWC,YAAY,e,cCUpEC,OAVf,SAAqBC,GAEjB,IAAIC,EAAOD,EAAQE,wBACfC,EAAQ/M,SAASgN,gBAKrB,MAAO,CAAEC,IAJKJ,EAAKI,IAAM53B,OAAO63B,YAAcH,EAAMI,UAI7BC,KAHRP,EAAKO,KAAO/3B,OAAOg4B,YAAcN,EAAMO,WAGfC,MAFvBV,EAAKU,MAAQl4B,OAAO63B,YAAcH,EAAMI,UAEAK,OADvCX,EAAKW,OAASn4B,OAAOg4B,YAAcN,EAAMO,aCLtDxsB,GAAqBvN,EAArBuN,iBACa2sB,G,WACjB,WAAYn2B,GAAQ,wBACR0J,EAAwB1J,EAAxB0J,EAAGC,EAAqB3J,EAArB2J,EAAG4L,EAAkBvV,EAAlBuV,MAAOC,EAAWxV,EAAXwV,OAChBzM,EAAWC,SAASU,IAAIF,GAAiB,KACzCT,EAAWC,SAASW,IAAIH,GAAiB,KACzCT,EAAWC,SAASuM,IAAQ/L,GAAiB,SAC7CT,EAAWC,SAASwM,IAAShM,GAAiB,UACnD3K,KAAK+K,GAAKF,EACV7K,KAAKgL,GAAKF,EAChB9K,KAAK4W,OAASF,EACd1W,KAAK6W,QAAUF,EACf3W,KAAKu3B,cAAgBv3B,KAAKu3B,cAAcp3B,KAAKH,M,0DAchCw3B,GACb,IAAM3sB,EAAI2sB,EAAM,GACV1sB,EAAI0sB,EAAM,GAChB,OAAQ3sB,GAAG7K,KAAK+K,IAAMF,GAAG7K,KAAK+K,GAAG/K,KAAK4W,QAAY9L,GAAG9K,KAAKgL,IAAMF,GAAG9K,KAAKgL,GAAGhL,KAAK6W,U,wBAd1E,OAAO7W,KAAK+K,K,wBAGZ,OAAO/K,KAAKgL,K,4BAGZ,OAAOhL,KAAK4W,S,6BAGZ,OAAO5W,KAAK6W,Y,KClBdhX,GAAoBzC,EAApByC,iBACe43B,G,kDACpB,WAAYt2B,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV8uB,EAA4C9uB,EAA5C8uB,SAAUlO,EAAkC5gB,EAAlC4gB,KAAMvW,EAA4BrK,EAA5BqK,SAAUksB,EAAkBv2B,EAAlBu2B,QAASC,EAASx2B,EAATw2B,QACtC1H,GAASpwB,GAAiB,YAC1BkiB,GAAKliB,GAAiB,QAC1B,EAAK+3B,UAAY3H,EACjB,EAAK4H,MAAQ9V,EACb,EAAKpW,UAAYH,EACbksB,GAAQ73B,GAAiB,WACzB83B,GAAQ93B,GAAiB,WAC7B,EAAKi4B,iBAAmBJ,EACxB,EAAKK,iBAAmBJ,EACxB,EAAKK,kBAAoB,EAAKA,kBAAkB73B,KAAvB,gBACzB,EAAK83B,kBAAoB,EAAKA,kBAAkB93B,KAAvB,gBACzB,EAAK+3B,aAAe,EAAKA,aAAa/3B,KAAlB,gBACpB,EAAKg4B,qBAAqB,EAAKA,qBAAqBh4B,KAA1B,gBAC1B,EAAKi4B,uBAAuB,EAAKA,uBAAuBj4B,KAA5B,gBAC5B,EAAKk4B,yBAAyB,EAAKA,yBAAyBl4B,KAA9B,gBAC9B,EAAKm4B,mBAAmB,EAAKA,mBAAmBn4B,KAAxB,gBACxB,EAAKo4B,iBAAmB,EAAKA,iBAAiBp4B,KAAtB,gBACxB,EAAKq4B,yBAA0B,EAAKA,yBAAyBr4B,KAA9B,gBAC/B,EAAKs4B,SAAWC,IAAMC,YACtB,EAAKC,WAAa,EAAKA,WAAWz4B,KAAhB,gBAClB4hB,EAAKtU,iBAAiB,SAAU,EAAK0qB,sBACrC,IAAMU,EAA0Bhe,GAAuBmC,SAAvB,eAAsC+E,EAAM,WAAY,EAAKqW,wBAxB5E,OAyBjB,EAAKU,MAAO,CAACC,aAAY,EAAOvtB,SAASA,EAAUwtB,UAAS,EAAOnX,QAAO,EAAOoX,UAAUJ,EAAwB/e,OAzBlG,E,6DAqCD0d,GAChB,IAAMf,EAAUz2B,KAAKy4B,SAASS,QAC9B,GAAa,OAAVzC,EAAH,CACA,IAAM0C,EAAmB3C,GAAYC,GAGrC,OAFuB,IAAIa,GAAK,CAACzsB,EAAEsuB,EAAiBlC,KAAMnsB,EAAEquB,EAAiBrC,IAAKpgB,MAAM+f,EAAQ2C,YAAaziB,OAAO8f,EAAQ4C,eAC3H9B,cAAcC,M,2CAGKjoB,GACpB,IAAMsS,EAAStS,EAAEsS,OACdA,IAAS7hB,KAAK84B,MAAMjX,QACtB7hB,KAAKs5B,SAAS,CAACzX,OAAOA,M,wCAGNtS,GACjBvP,KAAKs5B,SAAS,CAACN,UAAS,IACxBh5B,KAAKw4B,2BACLx4B,KAAKu5B,yBAAyBv5B,KAAK63B,MAAM2B,mBACzCx5B,KAAKq4B,0BAAyB,K,wCAEb9oB,GACjBvP,KAAKs5B,SAAS,CAACN,UAAS,IACxBh5B,KAAKw4B,2BACLx4B,KAAKq4B,0BAAyB,K,2CAGxB,IAAM5B,EAAUz2B,KAAKy4B,SAASS,QAC9BC,EAAmB3C,GAAYC,GACrC,MAAO,CAAC0C,EAAiBlC,KAAMR,EAAQ2C,YAAY,EAAID,EAAiBrC,IAAKL,EAAQ4C,aAAa,K,+CAE1EL,GACxBh5B,KAAK83B,iBAAiB,CAACkB,SAASA,EAAUrjB,eAAe3V,KAAKs4B,qBAAsBmB,OAAOz5B,S,qCAG3FA,KAAK+3B,iBAAiB,CAACpiB,eAAe3V,KAAKs4B,qBAAsBmB,OAAOz5B,S,iDAGpEA,KAAKu5B,2BACTv5B,KAAKu5B,yBAAyB/qB,UAC9BxO,KAAKu5B,yBAAyB,Q,6CAERj3B,GACtBtC,KAAKs5B,SAAS,CAACL,UAAU32B,M,mCAGzBtC,KAAKw4B,6B,+BAGL,IAAIjR,EAAU,cACXvnB,KAAK84B,MAAMjX,SACb0F,GAAW,WACTvnB,KAAK84B,MAAMG,YACb1R,GAAW,cACTvnB,KAAK84B,MAAMC,cACbxR,GAAW,iBACZ,IAAMxF,EAAO/hB,KAAK63B,MACZ6B,EAAiB3X,EAAKlB,MAAMxe,QAAO,SAAAwK,GAAI,OAAEA,EAAKuR,SAASvc,EAAWC,aAClE63B,EAAkB5X,EAAKlB,MAAMxe,QAAO,SAAAwK,GAAI,OAAEA,EAAKuR,SAASvc,EAAWE,eACnET,EAAao4B,EAAel6B,OAAO,EAAEqC,EAAWC,UAAW63B,EAAgBn6B,OAAO,EAAGqC,EAAWE,YAAYF,EAAWI,oBAI7H,OAFI8f,EAAK6X,qBACRrS,GAAW,IAAF,OAAM1lB,EAAWyB,WAAWhC,KAC9B,qBAAKimB,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAAUqB,MAAO,CAAC7C,KAAK,GAAD,OAAIj3B,KAAK84B,MAAMttB,SAASX,EAAxB,KAA8BisB,IAAI,GAAD,OAAI92B,KAAK84B,MAAMttB,SAASV,EAAxB,MACnGivB,aAAc/5B,KAAKg4B,kBAAmBgC,aAAch6B,KAAKi4B,kBAAmBN,QAAS33B,KAAKk4B,aADnF,SAEP,qBAAK3Q,UAAU,c,gCAzEDjlB,GACftC,KAAKs5B,SAAS,CAACP,YAAaz2B,M,+BAG5B,OAAOtC,KAAK2L,Y,2BAGZ,OAAO3L,KAAK63B,U,GApC0Br7B,a,yBCRzBy9B,GADE,CAAChD,KAAK,OAAQG,MAAM,QAASN,IAAI,MAAOO,OAAO,UCM3C6C,I,OADG98B,EAAlByC,iB,yGAE2E,IAA/D42B,EAA8D,EAA9DA,QAASn4B,EAAqD,EAArDA,KAAM+vB,EAA+C,EAA/CA,MAAO8L,EAAwC,EAAxCA,mBAAoBC,EAAoB,EAApBA,wBAC/Cv8B,IAARwwB,IACFA,EAAQ,KACT,IAAMgM,EAAUH,EAAQI,sBACpBC,GAAY,EACZC,EAAa,KACXC,EAAO,WACZD,GAAYA,IACZA,EAAaH,EAAQI,KAAKhE,EAASn4B,EAAM+vB,GAAO,kBAAIkM,MAE/CG,EAAO,WACZF,GAAYA,IACZH,EAAQK,QAELN,IACH3D,EAAQhpB,iBAAiB,aAAcgtB,GACvChE,EAAQhpB,iBAAiB,aAAcitB,IAExC,IAAMC,EAAc,WACnBH,GAAYA,IACZD,GAAY,EACZF,EAAQK,QAEHE,EAAU,kBAAIL,GAAY,GAChC9D,EAAQhpB,iBAAiB,YAAaktB,GACtClE,EAAQhpB,iBAAiB,UAAWmtB,GACrC,IAAMC,EAAkB,WACtBpE,EAAQ3oB,oBAAoB,YAAa6sB,GACzClE,EAAQhpB,iBAAiB,UAAWmtB,IAUrC,OAHGT,IACFA,EAAmBM,KAAOA,GANX,WACfhE,EAAQ3oB,oBAAoB,aAAc2sB,GAC1ChE,EAAQ3oB,oBAAoB,aAAc4sB,GAC1CG,GAAkBA,O,4CAQnB,GAAGX,EAAQY,SAAS,OAAOZ,EAAQY,SACnC,IAAMrE,EAAU5M,SAASC,cAAc,OACvC2M,EAAQsE,UAAUtrB,IAAI,WACtB,IAAMurB,EAAqBnR,SAASC,cAAc,OAClDkR,EAAmBD,UAAUtrB,IAAI,eACjCgnB,EAAQwE,YAAYD,GACpBnR,SAASqR,KAAKD,YAAYxE,GAC1B,IAAM0E,EAAajB,EAAQkB,eAAe3E,GACpC4E,EAAcnB,EAAQoB,gBAAgB7E,GACtC8E,EAAkB1R,SAASC,cAAc,OAsB/C,OArBAyR,EAAgBR,UAAUtrB,IAAI,YAC9BgnB,EAAQwE,YAAYM,GACpBrB,EAAQY,SAAY,CACnBrE,UACAgE,KAAK,SAACe,EAAmBl9B,EAAM+vB,EAAOoN,GACrC7+B,QAAQmC,IAAI,WACZ,IAAI28B,GAAU,EACdnmB,YAAW,WACNmmB,IAASD,MACbT,EAAmBW,UAAYr9B,EAC/B68B,GAAW,GACXE,EAAYG,MACVnN,GAEH,OADmB,kBAAIqN,GAAU,IAGlChB,KAAK,WACJS,GAAW,KAINjB,EAAQY,W,qCAEMrE,GACrB,OAAO,SAACmF,GACJA,GACFnF,EAAQsE,UAAUtrB,IAAI,WACtB8F,YAAW,kBAAIkhB,EAAQsE,UAAUtrB,IAAI,cAAY,KAGjDgnB,EAAQsE,UAAUnrB,OAAO,WACzB6mB,EAAQsE,UAAUnrB,OAAO,gB,sCAIL6mB,GACtB,IAAMoF,EAAe3B,EAAQ4B,iBAAiBrF,GAC9C,OAAO,SAAC+E,GACP/E,EAAQqD,MAAM7C,KAAK,MACnBR,EAAQqD,MAAMhD,IAAI,MACJL,EAAQ2C,YAAtB,IAGInC,EAFE8E,EAAoCvF,GAAYgF,GAChDQ,EAAuCD,EAAkC9E,KAAMR,EAAQ2C,YAEzF6C,EAAYhC,GAAUhD,KACvB+E,EAAqC,GACvCC,EAAYhC,GAAU7C,MAEtBH,EAD8C8E,EAAkC9E,KAAMuE,EAAkBpC,YAAY3C,EAAQ2C,aAI5HnC,EAAO+E,EAERH,EAAaI,GACbxF,EAAQqD,MAAM7C,KAAKre,OAAOqe,GAAM,KAChCR,EAAQqD,MAAMhD,IAAIle,OAAOmjB,EAAkCjF,IAAM0E,EAAkBnC,aAAa,EAAM5C,EAAQ4C,aAAa,GAAI,Q,uCAGzG5C,GACvB,IAAIyF,EAAwB,KAC5B,OAAO,SAACD,GACP,IAAME,EAAiBF,IAAYhC,GAAUhD,KAAK,aAAa,cAC5DiF,IAAwBC,IAC3B1F,EAAQsE,UAAUnrB,OAAOssB,GACzBzF,EAAQsE,UAAUtrB,IAAI0sB,GACtBD,EAAsBC,Q,MCtHJC,G,kDACpB,WAAYj7B,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVk7B,EAA+Dl7B,EAA/Dk7B,OAAQC,EAAuDn7B,EAAvDm7B,OAAQh+B,EAA+C6C,EAA/C7C,KAAMq5B,EAAyCx2B,EAAzCw2B,QAASpQ,EAAgCpmB,EAAhComB,UAAWgV,EAAqBp7B,EAArBo7B,SAAUlC,EAAWl5B,EAAXk5B,QAG3D,GAFA,EAAKmC,eAAiB7E,EACtB,EAAK8E,YAAc/D,IAAMC,YACtB0D,GAAQC,EAAO,MAAM,IAAIt/B,MAAM,wCALjB,OAMjB,EAAKwqB,MAAQlpB,EACb,EAAK45B,aAAa,EAAKA,aAAa/3B,KAAlB,gBAClB,EAAK24B,MAAQ,CAAEvR,UAAUA,EAAWgV,UAAoB,IAAXA,EAA4BG,UAAWL,EAAQ,cAAC,KAAD,CAAiB9U,UAAU,OAAOoV,KAAMN,IAAa,qBAAK7R,IAAK8R,KAC3J,EAAKxB,SAAWT,EATC,E,gEAYdr6B,KAAK86B,UACPZ,GAAQ0C,SAAS,CAACnG,QAAQz2B,KAAKy8B,YAAYvD,QAAS56B,KAAK0B,KAAK86B,a,yCAE7C+B,GACfA,EAActV,YAAYvnB,KAAKmB,MAAMomB,WAAWsV,EAAcN,WAAWv8B,KAAKmB,MAAMo7B,UACtFv8B,KAAKs5B,SAAS,CAAC/R,UAAUvnB,KAAKmB,MAAMomB,UAAWgV,SAASv8B,KAAKmB,MAAMo7B,WACjEM,EAAcR,SAASr8B,KAAKmB,MAAMk7B,QAAQQ,EAAcP,SAASt8B,KAAKmB,MAAMm7B,QAC9Et8B,KAAKs5B,SAAS,CAACoD,UAAW18B,KAAKmB,MAAMk7B,OAAQ,cAAC,KAAD,CAAiB9U,UAAU,OAAOoV,KAAM38B,KAAKmB,MAAMk7B,SAAa,qBAAK7R,IAAKxqB,KAAKmB,MAAMm7B,WAChIO,EAAclF,UAAU33B,KAAKmB,MAAMw2B,UAErC33B,KAAKw8B,eAAex8B,KAAKmB,MAAMw2B,W,mCAGpBpoB,GACZvP,KAAKw8B,eAAejtB,K,+BAGpB,IAAIgY,EAAY,cAGjB,OAFIvnB,KAAK84B,MAAMvR,YACbA,GAAW,IAAF,OAAMvnB,KAAK84B,MAAMvR,YACpB,wBAAQA,UAAWA,EAAWgV,SAAUv8B,KAAK84B,MAAMyD,SAAU1C,IAAK75B,KAAKy8B,YAAvE,SACL,sBAAKlV,UAAU,QAAQoQ,QAAS33B,KAAKk4B,aAArC,UACC,qBAAK3Q,UAAU,OAAf,SACCvnB,KAAK84B,MAAM4D,YAEZ,qBAAKnV,UAAU,OAAf,SAAuBvnB,KAAKwnB,iB,GAtCOhrB,aCHnBsgC,I,yDACpB,WAAY37B,GAAO,IAAD,sBACjB,cAAMA,GADW,IAETw2B,EAA0Bx2B,EAA1Bw2B,QAASr5B,EAAiB6C,EAAjB7C,KAAMipB,EAAWpmB,EAAXomB,UAFN,OAGhB,EAAKE,WAAaF,EAClB,EAAKC,MAAQlpB,EACb,EAAKy+B,SAAWpF,EALA,E,qDAQjB,IAAIpQ,EAAY,gBAEhB,OADGvnB,KAAKynB,aAAWF,GAAW,IAAF,OAAMvnB,KAAKynB,aAEtC,wBAAQF,UAAWA,EAAWoQ,QAAS33B,KAAK+8B,SAA5C,SAAuD/8B,KAAKwnB,Y,GAZrBhrB,cCMlCqD,GAAoCzC,EAApCyC,iBACam9B,IADuB5/B,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV87B,EAEkC97B,EAFlC87B,oBAAqBC,EAEa/7B,EAFb+7B,QAE5BxgC,EAAyCyE,EAAzCzE,QAASygC,EAAgCh8B,EAAhCg8B,MAAO5V,EAAyBpmB,EAAzBomB,UAAW6V,EAAcj8B,EAAdi8B,aAC3B,EAAKC,0BAA4Cx/B,IAAtBo/B,GAAuD,OAAtBA,GAAiCA,EACzFC,GAAQr9B,GAAiB,WAC7B,EAAKy9B,SAAWJ,EAEhB,EAAKK,SAAW7gC,EAChB,EAAK8gC,oBAAsBJ,EAC3B,EAAKzuB,WAAU,EACf,IAAM8uB,EAAUP,EAAQlzB,KAAI,SAAC0zB,GAC5B,OAAQ,cAAC,GAAD,CAAcp/B,KAAMo/B,EAAOp/B,KAAMq5B,QAAS,EAAKgG,wBAAwBD,EAAOpP,eAbtE,OAejB,EAAKwK,MAAO,CAACvR,UAAUA,EAAW7qB,QAAQA,EAASygC,MAAMA,EAAOM,QAAQA,GACxE,EAAKG,uBAAuB,GAC5B,EAAKC,SAAS,GACd,EAAKpD,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKqO,QAAU,EAAKA,QAAQrO,KAAb,gBAEf,EAAK29B,YAAc,EAAKA,YAAY39B,KAAjB,gBACnB,EAAK49B,wBAA0B,EAAKA,wBAAwB59B,KAA7B,gBAtBd,E,mDAmChB,OADAH,KAAK89B,aAAY,GACV99B,O,gDAURA,KAAKw9B,qBAAqBx9B,KAAKw9B,sBAC/Bx9B,KAAKwO,Y,8CAEkB8f,GAAU,IAAD,OAChC,OAAO,WACNA,GAAUA,IACV,EAAK9f,a,gCAIHxO,KAAK2O,YACR3O,KAAK2O,WAAU,EACfqvB,IAASC,uBAAuBD,IAASE,YAAYl+B,MAAMm+B,e,kCAEhD77B,GACXtC,KAAKs5B,SAAS,CAACsC,QAAQt5B,M,+BASvB,IAAIilB,EAAY,SAEhB,OADGvnB,KAAK84B,MAAMvR,YAAUA,GAAW,IAAF,OAAMvnB,KAAK84B,MAAMvR,YAEjD,qBAAKA,UAAWA,EAAhB,SACC,sBAAKA,UAAU,QAAf,UACC,sBAAKA,UAAU,MAAf,UACC,cAAC,GAAD,CAAYA,UAAU,QAAQ+U,OAAQpwB,EAAKQ,OAAO,2BAA4BirB,QAAS33B,KAAK+9B,0BAC5F,qBAAKxW,UAAU,QAAf,SAAwBvnB,KAAK84B,MAAMqE,WAEpC,qBAAK5V,UAAU,UAAf,SACEvnB,KAAK84B,MAAMp8B,UAEb,qBAAK6qB,UAAU,UAAf,SAA0BvnB,KAAK84B,MAAM2E,kB,8BAnB3Bt8B,GACbA,EAAM04B,IAAMnB,IAAMC,YAClB,IAAMlC,EAAUiC,IAAM5O,cAAckT,EAAQ77B,GAE5C,OADA68B,IAASI,OAAO3H,EAAU5M,SAASqR,KAAKD,YAAYpR,SAASC,cAAc,SACpE2M,EAAQoD,Q,GAnEmBr9B,cCTf6hC,I,wIACuBC,GAC1C,OAAO,WAAY,IAAD,uBAAPC,EAAO,yBAAPA,EAAO,gBACjB,IAAMhvB,EAAIgvB,EAAK,GACfF,EAAgBG,qBAAqBjvB,GACrC+uB,EAAU39B,MAAM,KAAM49B,M,0DAGmBjQ,GAC1C,OAAO,WAAY,IAAD,uBAAPiQ,EAAO,yBAAPA,EAAO,gBACjB,IAAMhvB,EAAIgvB,EAAK,GACfF,EAAgBI,qBAAqBlvB,GACrC+e,EAAS3tB,MAAM,KAAM49B,M,2CAGKhvB,GAC3B,IAAMmvB,EAAQnvB,EAAEovB,eAAe,GAC5BD,IACFnvB,EAAE1E,EAAI6zB,EAAME,QACZrvB,EAAEzE,EAAI4zB,EAAMG,W,2CAGctvB,GAC3B,SACS1R,IAAN0R,EAAE1E,IACJ0E,EAAE1E,EAAI0E,EAAEqvB,cACA/gC,IAAN0R,EAAEzE,IACJyE,EAAEzE,EAAIyE,EAAEsvB,SACR,e,MC3BIh/B,GAAkBzC,EAAlByC,iBACci/B,G,WACpB,WAAYxQ,GAAU,oBACrBtuB,KAAKwuB,UAAYF,OACHzwB,IAAXywB,GAAiC,OAAXA,GACxBzuB,GAAiB,YAClBG,KAAK++B,MAAK,EACV/+B,KAAK0uB,QAAU1uB,KAAK0uB,QAAQvuB,KAAKH,MACjCA,KAAKg/B,SAASh/B,KAAKg/B,SAAS7+B,KAAKH,MACjCA,KAAKi/B,OAASj/B,KAAKi/B,OAAO9+B,KAAKH,M,oDAKxBkX,GACHlX,KAAK++B,MACR/+B,KAAKi/B,OAAOr+B,a,iCAIbZ,KAAK++B,MAAK,I,6BAEJR,GACNhpB,WAAWvV,KAAKg/B,SAAU,GAC1Bh/B,KAAK++B,MAAK,EACV/+B,KAAKwuB,UAAU7tB,MAAM,KAAM49B,K,gCAb3B,OAAOv+B,KAAK++B,S,KCVNl/B,GAAoCzC,EAApCyC,iBAAkBC,GAAkB1C,EAAlB0C,eACLo/B,G,WACpB,WAAY/9B,GAAO,wBACVs1B,EAAiFt1B,EAAjFs1B,QAAS0I,EAAwEh+B,EAAxEg+B,gBAAiBC,EAAuDj+B,EAAvDi+B,eAAgBC,EAAuCl+B,EAAvCk+B,QAASC,EAA8Bn+B,EAA9Bm+B,OAAQC,EAAsBp+B,EAAtBo+B,MAAQC,EAAcr+B,EAAdq+B,WACtE/I,GAAS52B,GAAiB,WAC/BG,KAAKy/B,sBAAwC5hC,IAApBshC,GAAqD,OAApBA,GAC/CA,EACXn/B,KAAK0/B,qBAAsC7hC,IAAnBuhC,GAAmD,OAAnBA,GAC7CA,EAENC,GAASx/B,GAAiB,WACN,oBAAbw/B,GAAyBv/B,GAAe,UAAW,YAC/DE,KAAK2/B,cAAgBH,EAAWnB,GAAgBuB,oCAAoCP,GAASA,EAC7Fr/B,KAAK6/B,cAAgBL,EAAWnB,GAAgByB,oCAAoCT,GAASA,EAExFC,GAAQz/B,GAAiB,UACN,oBAAZy/B,GAAwBx/B,GAAe,SAAU,YAC7DE,KAAK+/B,aAAeP,EAAWnB,GAAgBuB,oCAAoCN,GAAQA,EAC3Ft/B,KAAKggC,aAAeR,EAAWnB,GAAgByB,oCAAoCR,GAAQA,EAEtFC,GAAO1/B,GAAiB,SACN,oBAAX0/B,GAAuBz/B,GAAe,QAAS,YAC3DE,KAAKigC,WAAa,IAAInB,GAAKS,GAC3Bv/B,KAAKkgC,YAAcV,EAAWnB,GAAgBuB,oCAAoC5/B,KAAKigC,WAAWvR,SAAS1uB,KAAKigC,WAAWvR,QAC3H1uB,KAAKmgC,YAAcX,EAAWnB,GAAgByB,oCAAoC9/B,KAAKigC,WAAWvR,SAAS1uB,KAAKigC,WAAWvR,QAE3H1uB,KAAKogC,WAAapgC,KAAKogC,WAAWjgC,KAAKH,MACvCA,KAAKqgC,WAAargC,KAAKqgC,WAAWlgC,KAAKH,MACvCA,KAAKsgC,SAAWtgC,KAAKsgC,SAASngC,KAAKH,MACnCA,KAAKugC,2BAA6BvgC,KAAKugC,2BAA2BpgC,KAAKH,MACvEA,KAAKwgC,0BAA4BxgC,KAAKwgC,0BAA0BrgC,KAAKH,MACrEA,KAAKygC,mBAAqBzgC,KAAKygC,mBAAmBtgC,KAAKH,MACvDA,KAAK0gC,iBAAmB1gC,KAAK0gC,iBAAiBvgC,KAAKH,MAEnDA,KAAK2gC,YAAc3gC,KAAK2gC,YAAYxgC,KAAKH,MAEzCA,KAAK4gC,WAAa5gC,KAAK4gC,WAAWzgC,KAAKH,MACvCA,KAAK6gC,UAAY7gC,KAAK6gC,UAAU1gC,KAAKH,MACrCA,KAAK8gC,aAAe9gC,KAAK8gC,aAAa3gC,KAAKH,MAC3CA,KAAK+gC,cAAgB/gC,KAAK+gC,cAAc5gC,KAAKH,MAC7Cy2B,EAAQhpB,iBAAiB,YAAazN,KAAKogC,WAAY,CAACY,SAAS,IACjEvK,EAAQhpB,iBAAiB,aAAczN,KAAK2gC,YAAa,CAACK,SAAS,I,uDAEzDzxB,GACLA,IAAGA,EAAIrQ,OAAOgP,OAChBlO,KAAKihC,aAAYjhC,KAAKkhC,oBAAoB3xB,GACT,GAAhCvP,KAAK2/B,cAAcpwB,GAAG,KAC1B2vB,EAAmBiC,yBACnBjC,EAAmBkC,uBACnBphC,KAAKygC,qBACLzgC,KAAK0gC,mBACL1gC,KAAKugC,2BAA2BhxB,GAChCvP,KAAKwgC,0BAA0BjxB,M,iCAErBA,GACLA,IAAGA,EAAIrQ,OAAOgP,OACnBlO,KAAK+/B,aAAaxwB,GAAG,GACrBvP,KAAKugC,2BAA2BhxB,GAChCvP,KAAKwgC,0BAA0BjxB,K,+BAEvBA,GACHA,IAAGA,EAAIrQ,OAAOgP,OACnBlO,KAAKkgC,YAAY3wB,GAAG,GACpB2vB,EAAmBkC,uBACnBlC,EAAmBiC,yBACnBnhC,KAAKugC,2BAA2BhxB,GAChCvP,KAAKwgC,0BAA0BjxB,K,kCAKpBA,GACNA,IAAEA,EAAIrQ,OAAOgP,OACiB,GAA/BlO,KAAK6/B,cAActwB,GAAG,KAC1B2vB,EAAmBmC,yBACnBnC,EAAmBoC,wBACnBthC,KAAK+gC,gBACL/gC,KAAK8gC,kB,iCAMKvxB,GACLA,IAAGA,EAAIrQ,OAAOgP,OACnBlO,KAAKggC,aAAazwB,GAAG,GACrBvP,KAAKugC,2BAA2BhxB,GAChCvP,KAAKwgC,0BAA0BjxB,K,gCAEtBA,GACJA,IAAEA,EAAIrQ,OAAOgP,OACLlO,KAAKmgC,YAAY5wB,GAAG,KAEjC2vB,EAAmBoC,wBACnBpC,EAAmBmC,4B,sCAGnBxX,SAASgN,gBAAgBppB,iBAAiB,YAAazN,KAAK4gC,WAAY,CAACI,SAAS,IAClF9B,EAAmBqC,kBAAoBvhC,KAAK4gC,a,qCAG5C/W,SAASgN,gBAAgBppB,iBAAiB,WAAYzN,KAAK6gC,UAAW,CAACG,SAAS,IAChF9B,EAAmBsC,iBAAmBxhC,KAAK6gC,Y,iDAGjBtxB,GACtBvP,KAAKy/B,kBACRlwB,EAAE4vB,iBAAmB5vB,EAAE4vB,oB,gDAGC5vB,GACrBvP,KAAK0/B,iBACRnwB,EAAE6vB,gBAAkB7vB,EAAE6vB,mB,2CAIvBvV,SAASgN,gBAAgBppB,iBAAiB,YAAazN,KAAKqgC,WAAY,CAACW,SAAS,IAClF9B,EAAmBuC,kBAAoBzhC,KAAKqgC,a,yCAG5CxW,SAASgN,gBAAgBppB,iBAAiB,UAAWzN,KAAKsgC,SAAU,CAACU,SAAS,IAC9E9B,EAAmBwC,gBAAkB1hC,KAAKsgC,Y,8CAGrCpB,EAAmBwC,kBACxB7X,SAASgN,gBAAgB/oB,oBAAoB,UAAWoxB,EAAmBwC,iBAC3ExC,EAAmBwC,qBAAkB7jC,K,+CAGhCqhC,EAAmBuC,oBACxB5X,SAASgN,gBAAgB/oB,oBAAoB,YAAaoxB,EAAmBuC,mBAC7EvC,EAAmBuC,uBAAoB5jC,K,8CAKnCqhC,EAAmBsC,mBACvB3X,SAASgN,gBAAgB/oB,oBAAoB,WAAYoxB,EAAmBsC,kBAC5EtC,EAAmBsC,sBAAiB3jC,K,+CAGhCqhC,EAAmBqC,oBACvB1X,SAASgN,gBAAgB/oB,oBAAoB,YAAaoxB,EAAmBqC,mBAC7ErC,EAAmBqC,uBAAkB1jC,O,KChJlB8jC,IADuBvkC,EAApCyC,iBAAoCzC,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACXs1B,EAAmHt1B,EAAnHs1B,QAAS4I,EAA0Gl+B,EAA1Gk+B,QAASuC,EAAiGzgC,EAAjGygC,eAAgBC,EAAiF1gC,EAAjF0gC,eAAgBC,EAAiE3gC,EAAjE2gC,cAAeC,EAAkD5gC,EAAlD4gC,cAAeC,EAAmC7gC,EAAnC6gC,aAAcC,EAAqB9gC,EAArB8gC,aAAc1C,EAAOp+B,EAAPo+B,MACnHv/B,KAAKkiC,gBAAiB,EACtBliC,KAAKmiC,gBAAe,EACpBniC,KAAKoiC,QAAU,KACfpiC,KAAKqiC,QAAU,KACfriC,KAAKsiC,SAASjD,EACdr/B,KAAKuiC,eAAiBR,EACtB/hC,KAAKwiC,eAAiBV,EACtB9hC,KAAKyiC,gBAAkBb,EACvB5hC,KAAK0iC,gBAAkBb,EACvB7hC,KAAK2iC,cAAgBX,EACrBhiC,KAAK4iC,cAAgBX,EACrBjiC,KAAK6iC,OAAStD,EACdv/B,KAAK8iC,WAAa,KAClB9iC,KAAK+iC,WAAa,KAElB/iC,KAAKgjC,OAAQhjC,KAAKgjC,OAAO7iC,KAAKH,MAC9BA,KAAKijC,eAAgBjjC,KAAKijC,eAAe9iC,KAAKH,MAC9CA,KAAKkjC,cAAeljC,KAAKkjC,cAAc/iC,KAAKH,MAC5CA,KAAKmjC,MAAOnjC,KAAKmjC,MAAMhjC,KAAKH,MAC5BA,KAAKojC,KAAMpjC,KAAKojC,KAAKjjC,KAAKH,MAM1By2B,EAAQhpB,iBAAiB,aAAczN,KAAKgjC,Q,mDAEtCzzB,GAEL,IADA,IAAIovB,EAAiBpvB,EAAEovB,eACfx7B,EAAE,EAAGA,EAAEw7B,EAAen/B,OAAQ2D,IAAI,CACzC,IAAIkgC,EAAe1E,EAAex7B,GAC5BmgC,EAAaD,EAAY,WAC3BrjC,KAAKkiC,eAYRliC,KAAKkjC,cAAcG,EAAc9zB,IAXjCvP,KAAKkiC,gBAAe,EACpBliC,KAAK8iC,WAAWQ,EAChB/tB,YAAW,WACVsU,SAASgN,gBAAgBppB,iBAAiB,aAAczN,KAAKijC,kBAC3D,GACHpZ,SAASgN,gBAAgBppB,iBAAiB,YAAazN,KAAKmjC,OAC5DtZ,SAASgN,gBAAgBppB,iBAAiB,WAAYzN,KAAKojC,MAC3DpjC,KAAKoiC,QAAUiB,EACfrjC,KAAKyiC,iBAAiBziC,KAAKyiC,gBAAgBY,EAAe9zB,O,qCAO/CA,GACd,IAAI8zB,EAAe9zB,EAAEovB,eAAe,GACpC3+B,KAAKkjC,cAAcG,EAAc9zB,K,oCAEpB8zB,EAAc9zB,GACxBvP,KAAKkiC,iBAAiBliC,KAAKmiC,iBAC7BniC,KAAKmiC,gBAAe,EACpBniC,KAAK+iC,WAAaM,EAAY,WAC9BrjC,KAAKqiC,QAAUgB,EACfrjC,KAAK0iC,iBAAiB1iC,KAAK0iC,gBAAgBW,EAAc9zB,GACtDvP,KAAKkiC,gBAAgBliC,KAAKmiC,gBAE5BniC,KAAKsiC,UAAUtiC,KAAKsiC,SAAS,CAC5BiB,OAAOvjC,KAAKoiC,QACZoB,OAAOxjC,KAAKqiC,QACZ9yB,EAAEA,O,4BAMAA,GAEL,IADA,IAAIovB,EAAiBpvB,EAAEovB,eACfx7B,EAAE,EAAGA,EAAEw7B,EAAen/B,OAAQ2D,IAAI,CACzC,IAAIkgC,EAAe1E,EAAex7B,GAC/BkgC,EAAaC,aAActjC,KAAK8iC,YAClC9iC,KAAKwiC,gBAAgBxiC,KAAKwiC,eAAea,EAAe9zB,GAEtD8zB,EAAaC,YAAYtjC,KAAK+iC,YAChC/iC,KAAKuiC,gBAAgBviC,KAAKuiC,eAAec,EAAc9zB,GAGzD,IACAA,EAAE6vB,gBAAgB7vB,EAAE6vB,iBAEpB,MAAMzgC,O,2BAEF4Q,GAEH,IADA,IAAIovB,EAAiBpvB,EAAEovB,eACfx7B,EAAE,EAAGA,EAAEw7B,EAAen/B,OAAQ2D,IAAI,CACzC,IAAIkgC,EAAe1E,EAAex7B,GAC5BmgC,EAAaD,EAAY,WAC5BC,IAAatjC,KAAK8iC,WAMlBQ,IAAatjC,KAAK+iC,YAKrB/iC,KAAKmiC,gBAAe,EACpBniC,KAAKkiC,gBAAe,IALnBliC,KAAKmiC,gBAAe,EACpBniC,KAAK4iC,eAAe5iC,KAAK4iC,cAAcS,EAAc9zB,KAPrDvP,KAAKkiC,gBAAe,EACpBrY,SAASgN,gBAAgB/oB,oBAAoB,aAAc9N,KAAKijC,gBAChEjjC,KAAK2iC,eAAe3iC,KAAK2iC,cAAcU,EAAe9zB,IAYxD,GADavP,KAAKkiC,gBAAgBliC,KAAKmiC,eAC7B,OAAO,EACjBtY,SAASgN,gBAAgB/oB,oBAAoB,YAAa9N,KAAKmjC,OAC/DtZ,SAASgN,gBAAgB/oB,oBAAoB,WAAY9N,KAAKojC,MAC9DpjC,KAAK6iC,QAAQ7iC,KAAK6iC,OAAOtzB,O,MChHrB1P,GAAmBzC,EAAnByC,iBACc4jC,G,WACjB,WAAYtiC,GAAO,wBACduiC,EAAaviC,EAAbuiC,iBACU7lC,IAAd6lC,GAAuC,OAAdA,GAC3B7jC,GAAiB,eAClBG,KAAKuuB,OAAS,IAAKmV,EACnB1jC,KAAK0uB,QAAS1uB,KAAK0uB,QAAQvuB,KAAKH,MAChCA,KAAK2jC,OAAQ3jC,KAAK2jC,OAAOxjC,KAAKH,M,qDAG9BA,KAAK4jC,YAAa,I,8BAEXtV,GAAU,IAAD,OAChBtuB,KAAKwuB,UAAYF,EACdtuB,KAAK6jC,SACP7jC,KAAK4jC,YAAa,GAGnB5jC,KAAK6jC,UAAS,EACd7jC,KAAKwuB,YACLjZ,YAAW,WACV,EAAKsuB,UAAS,EACX,EAAKD,aACP,EAAKA,YAAW,EAChB,EAAKpV,eAEJxuB,KAAKuuB,a,KC3BJuV,G,oGACSrN,GACV5M,SAASka,kBACXD,EAAWE,OAEXF,EAAWG,OAAOxN,K,6BAQNA,GACb,GAAGqN,EAAWI,UAAU,CACvB,GAAGJ,EAAWrL,WAAWhC,EAAQ,OACjCqN,EAAWE,OAERvN,EAAQ0N,kBACX1N,EAAQ0N,oBACE1N,EAAQ2N,wBAClB3N,EAAQ2N,0BACE3N,EAAQ4N,qBAClB5N,EAAQ4N,sBAETP,EAAWQ,oB,6BAGPR,EAAWI,YACfra,SAAS0a,iBACTT,EAAWQ,qB,6EAtBX,OAAOza,SAAS2a,oB,gCAGhB,QAAO3a,SAASka,sB,KAyBlBv2B,EAAYs2B,IACGA,UClCMW,I,OADuBrnC,EAApCyC,iBAAoCzC,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEXujC,EAA+BvjC,EAA/BujC,eAAgBC,EAAexjC,EAAfwjC,cAFL,OAIhB,EAAKC,oBADa/mC,IAAhB8mC,GAA2C,OAAhBA,GAGPA,EAEvB,EAAKE,gBAAkBH,EACvB,EAAKI,uBAAyB,EAAKA,uBAAuB3kC,KAA5B,gBAC9BukC,EAAej3B,iBAAiB,SAAU,EAAKq3B,wBAC/C,EAAKhM,MAAM,CAAC8C,SAAQ,GAXH,E,mEAaKrsB,GACtB,IAAMqsB,EAAU57B,KAAK4kC,gBAAiBr1B,EAAEkG,WAAYlG,EAAEkG,WACtDzV,KAAKs5B,SAAS,CAACsC,QAAQA,M,+BAGvB,IAAIrU,EAAW,UAGf,OAFGvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YACJ,sBAAKA,UAAWA,EAAWoQ,QAAS33B,KAAKk4B,aAAzC,UACN,wBACA,wBACA,+B,GAzBiC17B,cCHtB,SAASuoC,GAAStO,EAAS35B,GAEzC,OAAO25B,EAAQuO,aAAevO,EAAQuO,aAAaloC,GAAQoC,OAAO+lC,iBAAmB/lC,OAAO+lC,iBAAiBxO,EAAS,MAAMyO,iBAAiBpoC,GAAQ,KCFvI,SAASqoC,GAAa1O,GAEpC,IADA,IAAI2O,EAAiB3O,EACf2O,GAAe,CACpB,GAAyC,SAAtCL,GAASK,EAAgB,WAAoB,OAAO,EACvDA,EAAiBA,EAAeC,cAEjC,OAAO,E,ICKFxlC,GAAkBzC,EAAlByC,iBACeylC,G,kDACpB,WAAYnkC,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVokC,EAAwFpkC,EAAxFokC,wBAAyBC,EAA+DrkC,EAA/DqkC,yBAA0BC,EAAqCtkC,EAArCskC,QAASC,EAA4BvkC,EAA5BukC,QAASC,EAAmBxkC,EAAnBwkC,iBAF3D,YAGa9nC,IAA3B2nC,GAAqC3lC,GAAiB,iCAC5ChC,IAAV4nC,GAA+B,OAAVA,GAAe5lC,GAAiB,gBAC3ChC,IAAV6nC,GAA+B,OAAVA,GAAe7lC,GAAiB,gBAClChC,IAAnB8nC,GAAiD,OAAnBA,GAAwB9lC,GAAiB,oBAC1E,EAAK+lC,SAAWF,EAChB,EAAKG,SAAWJ,EAChB,EAAKK,0BAA0BN,EAC/B,EAAKO,yBAA2BR,EAChC,EAAKzM,MAAO,CAACkN,KAAK,MAClB,EAAKC,kBAAoBN,EACzB,EAAKO,cAAgBxN,IAAMC,YAC3B,EAAKwN,OAASzN,IAAMC,YACpB,EAAKyN,KAAO1N,IAAMC,YAClB,EAAK0N,iBAAkB,EAAKA,iBAAiBlmC,KAAtB,gBACvB,EAAKmmC,gBAAkB,EAAKA,gBAAgBnmC,KAArB,gBACvB,EAAKomC,eAAiB,EAAKA,eAAepmC,KAApB,gBACtB,EAAKqmC,mBAAqB,EAAKA,mBAAmBrmC,KAAxB,gBAC1B,EAAKsmC,kBAAoB,EAAKA,kBAAkBtmC,KAAvB,gBACzB,EAAKumC,oBAAsB,EAAKA,oBAAoBvmC,KAAzB,gBAC3B,EAAKwmC,uCAAyC,EAAKA,uCAAuCxmC,KAA5C,gBAC9C,EAAKymC,yBAA0B,EAAKA,yBAAyBzmC,KAA9B,gBAC/B,EAAK0mC,yBAA0B,EAAKA,yBAAyB1mC,KAA9B,gBAC/B,EAAK2mC,QAAU,EAAKA,QAAQ3mC,KAAb,gBACf,EAAK4mC,aAAe,EAAKA,aAAa5mC,KAAlB,gBACpB,EAAK6mC,kBAAmB,EAAKA,kBAAkB7mC,KAAvB,gBACxB,EAAKqiC,eAAgB,EAAKA,eAAeriC,KAApB,gBACrB,EAAKoiC,eAAgB,EAAKA,eAAepiC,KAApB,gBACrB,EAAK8mC,YAAa,EAAKA,YAAY9mC,KAAjB,gBAClB,EAAK+mC,kBAAoB,EAAKA,kBAAkB/mC,KAAvB,gBACzB,EAAKgnC,QAAU,EAAKA,QAAQhnC,KAAb,gBACf,EAAKinC,8BAAgC,EAAKA,8BAA8BjnC,KAAnC,gBACrC,EAAKknC,gBAAkB,EAAKA,gBAAgBlnC,KAArB,gBACvB,EAAKmnC,sBAAwB,EAAKA,sBAAsBnnC,KAA3B,gBAC7B,EAAKonC,qBAAsB,EAAKA,qBAAqBpnC,KAA1B,gBAC3B,EAAKqnC,mBAAqB,EAAKA,mBAAmBrnC,KAAxB,gBAC1B,EAAKsnC,MAAQ,EAAKA,MAAMtnC,KAAX,gBACb,EAAKunC,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAKwnC,yBAA0B,IAAI5nC,EACnC,EAAK+4B,MAAM,CAAC8O,qBAAqB,CAAC,EAAG,GAAIC,KAAK,EAAGC,WAAU,GAC3D,EAAKC,MAAQ,EACb,EAAKC,kBAAoB,EACzB,EAAKC,aAAe,IAAInJ,GAAK,EAAKiI,cAClC,EAAKmB,gDAAgD,KACrD,EAAKC,gBAAkB,EACvB,EAAKC,qBAAqB,KAC1B,EAAKC,6BAA+B,IAAItoC,EACxC,EAAKuoC,6BAA6B,KAClC,EAAKC,8BAAgC,IAAI9E,GAAyB,CAACC,YAAY,KAC/E,EAAKmB,gBAAkB,IAAI7vB,GAC3B,EAAKwzB,QAAU,KACf,EAAKH,6BAA6BjqC,MAAK,WACtC,EAAKyoC,8BAtDW,E,oDA2DVvkC,GAAO,IAAD,OACb,OAAO,IAAI/E,SAAQ,SAACO,EAASC,GAC5B,EAAK4pC,yBAAyBvpC,KAAKN,GAASY,MAAMX,GAClD,EAAKkqC,aAAavZ,QAAQpsB,Q,iDAI3B,IAAItC,KAAKyoC,6BAA6B,CACrCzoC,KAAKyoC,8BAA8B,EACnC,IAAMC,EAAiB1oC,KAAKwnC,qBACtBmB,EAAuB3oC,KAAK+lC,2BAEjC/lC,KAAKmoC,gBADHO,EAAeC,EACI,EAEAD,EAAgBC,K,2CAIvC,IAAMre,EAAMtqB,KAAKomC,KAAKlN,QAEtB,OADuB5O,EAAIse,aAAate,EAAIue,gB,mCAGhCvmC,GACZ,IACAtC,KAAK8lC,2BAA2B9lC,KAAK8lC,0BAA2BxjC,GAChEtC,KAAKgoC,kBAAkB1lC,EACvB,IAAMwmC,EAAc9oC,KAAK+nC,MACzB/nC,KAAK+nC,MAAQ/nC,KAAKmoC,gBAAgB7lC,EAClC,IAAM+iC,EAAgBrlC,KAAKimC,kBAAkB/M,QACvC6P,EAAe/oC,KAAKkmC,cAAchN,QAClC8P,EAAahpC,KAAK+nC,MAAMe,EAC9B9oC,KAAK4mC,yBAAyBmC,EAAa3P,YAAY4P,EAAYD,EAAa1P,aAAa2P,GAC7F,IAAMC,IAA0BF,EAAaG,WAAY7D,EAAcjM,YAAY,GAAI2P,EAAa3P,YAC9F+P,EAAuBJ,EAAa3P,YAAY4P,EAChDI,EAAW/D,EAAcjM,YAAY,EAAI6P,EAAsBE,EAG/DE,IAAyBN,EAAaO,UAAWjE,EAAchM,aAAa,GAAI0P,EAAa1P,aAC7FkQ,EAAwBR,EAAa1P,aAAa2P,EAClDQ,EAAUnE,EAAchM,aAAa,EAAIgQ,EAAqBE,EACpEvpC,KAAK2mC,uCAAuCyC,EAASI,EAAQxpC,KAAK+nC,OACjE/nC,KAAK2nC,yBAAyBvnC,SAE/B,MAAMzB,GACL/B,QAAQC,MAAM8B,GACdqB,KAAK2nC,yBAAyBjpC,MAAMC,M,qCAOrC,IAAM+pC,EAAkB1oC,KAAKwnC,qBACvBmB,EAAuB3oC,KAAK+lC,2BAClC/lC,KAAK8mC,QAAQ4B,EAAeC,K,2BAExBrM,EAAQmN,GAAa,IAAD,OAExB,OADAzpC,KAAKwoC,QAAUlM,EACR,IAAI/+B,SAAQ,SAACO,EAASC,GAC5B,IAAM2rC,EAAgB,EAAK7E,gBAAgB1vB,OACrCw0B,EAAW,SAAChrC,GACjB+qC,EAAcl7B,UACdzQ,EAAOY,IAER,EAAKsoC,cAAc7oC,MAAK,WACvB,EAAKk7B,SAAS,CAACsO,qBAAqB,CAAC,EAAG,KACxC,EAAKH,MAAMnL,EAAQmN,GAAarrC,MAAK,SAACwrC,GACrCF,EAAcl7B,UACd1Q,EAAQ8rC,MACNlrC,MAAMirC,MACPjrC,MAAMirC,Q,4BAGLrN,EAAQmN,GAAa,IAAD,OACzB,OAAO,IAAIlsC,SAAQ,SAACO,EAASC,GAC5B,IAAM8rC,EAAiB,EAAK/Q,MAAMwD,SAASA,EAC3C,EAAKyL,MAAQ,EACb,EAAKC,kBAAoB,EACzB,EAAKG,gBAAkB,EACvB,EAAKM,8BAA6B,EAClC,EAAKnP,SAAS,CAACgD,OAAOA,EAAQuL,KAAK,IACnC,IAAMiC,EAAyB,WAC9B,EAAKjD,2BACL,EAAKvN,SAAS,CAACwO,WAAU,IACtB2B,EACF,EAAKM,eAIL,EAAKjD,QAAQ,GAEdhpC,KAEE+rC,EACFC,IAGD,EAAKzB,6BAA6BjqC,MAAK,WACtC0rC,OACEprC,MAAMX,Q,oCAGG,IAAD,OACZ,OAAO,IAAIR,SAAQ,SAACO,EAASC,GAC5B,EAAKu7B,SAAS,CAACgD,OAAO,GAAIwL,WAAU,IACpCvyB,WAAWzX,EAAS,Q,uCAGLyR,EAAGy6B,GACGhqC,KAAKimC,kBAAkB/M,QAA7C,IACM6P,EAAe/oC,KAAKkmC,cAAchN,QAClC+Q,EAAgB,CAAClB,EAAaG,WAAYH,EAAaO,WAC7DtpC,KAAK4mC,yBAAyBmC,EAAa3P,YAAa2P,EAAa1P,cACrE,IAAM6Q,EAAgBF,EAAiBz6B,EAAE46B,QAAQ,GAAG56B,EACpDvP,KAAKoqC,aAAe,CAACH,EAAc,GAAGC,EAAcG,QAASJ,EAAc,GAAGC,EAAcI,W,+CAEpEC,EAAmBC,GAC3C,IAAMnF,EAAgBrlC,KAAKimC,kBAAkB/M,QAGzCuR,EAFwBpF,EAAchM,aAEXmR,EAC5BC,EAAK,IACPA,GAAU,GACX,IAAMC,EAAOD,EAAK,EAAEA,EAAK,EACrBE,EALuBtF,EAAcjM,YAKXmR,EAC3BI,EAAK,IACPA,GAAU,GACX,IAAMC,EAAKD,EAAK,EAAEA,EAAK,EACvB3qC,KAAK6qC,aAAa,CAACD,EAAMF,GACzB1qC,KAAK8qC,aAAc,CAACH,EAAMF,K,sCAEXl7B,EAAGy6B,GAClB,IAAGhqC,KAAKooC,qBAAR,CACA,IAAM8B,EAAgBF,EAAiBz6B,EAAE46B,QAAQ,GAAG56B,EAChD65B,EAAUc,EAAcG,QAASrqC,KAAKoqC,aAAa,GACnDZ,EAASU,EAAcI,QAAUtqC,KAAKoqC,aAAa,GACvDpqC,KAAK2mC,uCAAuCyC,EAASI,EAAQxpC,KAAK+nC,U,qCAEpDx4B,M,0CAGKA,GACdvP,KAAKmmC,OAAOjN,SAAYiM,GAAanlC,KAAKmmC,OAAOjN,SAItDl5B,KAAKmnC,UAHJnnC,KAAK+qC,YAAa,I,0CAMd/qC,KAAKmmC,OAAOjN,SAAYiM,GAAanlC,KAAKmmC,OAAOjN,UACnDl5B,KAAK+qC,aAEP/qC,KAAK+qC,YAAW,EAChB/qC,KAAKmnC,a,gCAINnnC,KAAKynC,MAAMznC,KAAK84B,MAAMwD,QAAQ59B,MAAM9B,QAAQC,S,0CAG5CmD,KAAKgrC,oBAAsB,IAAI9L,GAAmB,CACjDzI,QAASz2B,KAAKkmC,cAAchN,QAC5BkG,gBAAe,EACNC,QAASr/B,KAAKqmC,iBACd/G,OAAQt/B,KAAKsmC,gBACb/G,MAAMv/B,KAAKumC,iBAErBvmC,KAAKirC,gBAAkB,IAAItJ,GAAe,CACzClL,QAASz2B,KAAKkmC,cAAchN,QACnB4I,cAAe9hC,KAAKwiC,eACpBT,cAAe/hC,KAAKuiC,eAC7BlD,QAAQr/B,KAAKgnC,kBACbzH,MAAMv/B,KAAKqnC,kBAEZrnC,KAAKkmC,cAAchN,QAAQzrB,iBAAiB,QAASzN,KAAKsnC,uBAC1DpoC,OAAOuO,iBAAiB,SAAUzN,KAAK0mC,qBACvC5C,GAAWr2B,iBAAiB,SAAUzN,KAAK0mC,uB,4CAEtBn3B,GACrBA,EAAE6vB,iBACF,IAAM8L,EAAS37B,EAAE27B,OACXC,EAAUnrC,KAAKgoC,kBAA0B,MAAPkD,EAExC,OADAlrC,KAAKunC,qBAAqB4D,IACnB,I,wCAEU57B,GACjBvP,KAAKorC,cAAgB,CAAC77B,EAAEg0B,OAAO3E,QAASrvB,EAAEg0B,OAAO1E,SACjD7+B,KAAKqrC,cAAgB,CAAC97B,EAAEi0B,OAAO5E,QAASrvB,EAAEi0B,OAAO3E,SACjD7+B,KAAKsoC,6BAA+BtoC,KAAKsrC,gCAAgCtrC,KAAKorC,cAAeprC,KAAKqrC,eAClGrrC,KAAKkoC,gDAAkDloC,KAAKgoC,kBAC5DhoC,KAAKooC,sBAAqB,I,qCAEZ1J,EAAOnvB,GACjBvP,KAAKooC,uBACTpoC,KAAKorC,cAAgB,CAAC1M,EAAME,QAASF,EAAMG,SAC3C7+B,KAAKonC,mC,qCAES1I,EAAOnvB,GACjBvP,KAAKooC,uBACTpoC,KAAKqrC,cAAgB,CAAC3M,EAAME,QAASF,EAAMG,SAC3C7+B,KAAKonC,mC,wCAGFpnC,KAAKooC,sBACPpoC,KAAKonC,gCACNpnC,KAAKooC,sBAAqB,I,sDAEK,IAAD,OAC9BpoC,KAAKuoC,8BAA8B7Z,SAAQ,WAC1C,IAAM6c,EAAc,EAAKD,gCAAgC,EAAKF,cAAe,EAAKC,eAC9EG,EAAsB,EAAKtD,gDAAgDqD,EAAY,EAAKjD,6BAChG,EAAKf,qBAAqBiE,Q,2CAGP3D,GACjBA,EAAK7nC,KAAK6lC,WAASgC,EAAK7nC,KAAK6lC,UAC7BgC,EAAK7nC,KAAK4lC,WAASiC,EAAK7nC,KAAK4lC,UAChC5lC,KAAK8mC,QAAQe,K,sDAEkB3wB,EAAGC,GAClC,OAAOgc,KAAKsY,KAAKtY,KAAKuY,IAAIv0B,EAAE,GAAGD,EAAE,GAAI,GAAGic,KAAKuY,IAAIv0B,EAAE,GAAGD,EAAE,GAAI,M,2CAG5DlX,KAAKqoC,6BAA6BjoC,W,wCAEjBmP,GACjBvP,KAAKqoC,6BAA6BhoC,QAAQ,IAAIrD,MAAJ,wBAA2BuS,EAAEpB,OAAOqc,IAApC,wB,6DAEJ4e,EAASI,EAAQ3B,GACvD,IAAM+C,EAAO5qC,KAAK6qC,aAAa,GACzBH,EAAO1qC,KAAK6qC,aAAa,GACzBF,EAAO3qC,KAAK8qC,aAAa,GACzBL,EAAOzqC,KAAK8qC,aAAa,GAC5B1B,EAAQwB,EACVxB,EAASwB,EAENxB,EAAQuB,IACVvB,EAAUuB,GACTnB,EAAOkB,EACTlB,EAASkB,EAENlB,EAAOiB,IACTjB,EAASiB,GACXzqC,KAAKs5B,SAAS,CAACsO,qBAAqB,CAACwB,EAASI,GAAS3B,KAAKA,M,+BAG5D,IAAMD,EAAsB5nC,KAAK84B,MAAM8O,qBACnC+D,EAAiB,oBAGrB,OAFG3rC,KAAK84B,MAAMgP,YACb6D,GAAgB,eAEhB,sBAAKpkB,UAAWokB,EAAgB9R,IAAM75B,KAAKmmC,OAA3C,UACC,sBAAK5e,UAAU,gBAAgBsS,IAAK75B,KAAKkmC,cAAgBpM,MAAO,CAAC8R,WAAW,GAAD,OAAIhE,EAAqB,GAAzB,MAC1EiE,UAAU,GAAD,OAAIjE,EAAqB,GAAzB,MAAiClxB,MAAM,GAAD,OAAoB,IAAhB1W,KAAK84B,MAAM+O,KAAf,MADhD,UAEC,qBAAKtgB,UAAU,QAAQsS,IAAK75B,KAAKomC,KAAM5b,IAAKxqB,KAAK84B,MAAMwD,OAASwP,OAAQ9rC,KAAKwmC,mBAAoBuF,QAAS/rC,KAAKymC,oBAC/G,qBAAKlf,UAAU,WAAf,SACCvnB,KAAKmB,MAAM6qC,cAGb,qBAAKzkB,UAAU,gBACf,cAAC,GAAD,CAASsS,IAAK75B,KAAKisC,YAAavH,eAAgB1kC,KAAK6kC,uB,6BAnNvD,OAAO7kC,KAAKwoC,Y,GA7G6BhsC,a,kBCJtB0vC,IADuB9uC,EAApCyC,iBAAoCzC,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVgrC,EAAqDhrC,EAArDgrC,YAAaC,EAAwCjrC,EAAxCirC,UAAWC,EAA6BlrC,EAA7BkrC,aAAcC,EAAenrC,EAAfmrC,YAF5B,OAGjB,EAAKC,aAAeJ,EACpB,EAAKK,cAAgBH,EACrB,EAAKI,WAAaL,EAClB,EAAKM,aAAeJ,EACpB,EAAKxT,MAAQ,CAAC8C,SAAQ,EAAMW,UAAS,GAPpB,E,qDAUjB,IAAIhV,EAAY,sBACbvnB,KAAK84B,MAAM8C,UACbrU,GAAY,YACb,IAAMrc,EAAM,GASZ,OARGlL,KAAKusC,cACPrhC,EAAI3K,KAAM,cAAC,GAAD,CAAYgnB,UAAU,OAAO+U,OAAQpwB,EAAKQ,OAAO,2BAA4BpO,KAAK,GAAGi+B,SAAUv8B,KAAK84B,MAAMyD,SAAU5E,QAAS33B,KAAKusC,cAAmB7zB,GAAWC,SACxK3Y,KAAKysC,YACPvhC,EAAI3K,KAAM,cAAC,GAAD,CAAYgnB,UAAU,KAAK8U,OAAQsQ,KAAWruC,KAAK,GAAGi+B,SAAUv8B,KAAK84B,MAAMyD,SAAU5E,QAAS33B,KAAKysC,YAAiB/zB,GAAWC,SACvI3Y,KAAKwsC,eACPthC,EAAI3K,KAAM,cAAC,GAAD,CAAYgnB,UAAU,QAAQ+U,OAAQpwB,EAAKQ,OAAO,4BAA6BpO,KAAK,GAAGi+B,SAAUv8B,KAAK84B,MAAMyD,SAAU5E,QAAS33B,KAAKwsC,eAAoB9zB,GAAWC,SAC3K3Y,KAAK0sC,cACPxhC,EAAI3K,KAAM,cAAC,GAAD,CAAYgnB,UAAU,OAAO8U,OAAQuQ,KAAatuC,KAAK,GAAGi+B,SAAUv8B,KAAK84B,MAAMyD,SAAU5E,QAAS33B,KAAK0sC,cAAmBh0B,GAAWC,SAE/I,qBAAK4O,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAArC,SACEvtB,Q,GAzB2C1O,cCT3BqwC,G,WACpB,WAAY1rC,GAAO,wBACbktB,EAAyBltB,EAAzBktB,MAAOC,EAAkBntB,EAAlBmtB,SAAUwe,EAAQ3rC,EAAR2rC,YACRjvC,GAAVivC,IAEHA,GAAU,QAEEjvC,GAATwwB,IAEHA,EAAQ,KAETruB,KAAK+sC,aAAe,EACpB/sC,KAAKuuB,OAASF,EACdruB,KAAKwuB,UAAYF,EACjBtuB,KAAKgtC,QAAUF,EACf9sC,KAAKitC,UAAY,KACjBjtC,KAAKktC,YAAW,EAChBltC,KAAKmtC,MAAOntC,KAAKmtC,MAAMhtC,KAAKH,MAC5BA,KAAKotC,KAAMptC,KAAKotC,KAAKjtC,KAAKH,MAC1BA,KAAKkZ,MAAOlZ,KAAKkZ,MAAM/Y,KAAKH,MAC5BA,KAAKqtC,MAAOrtC,KAAKqtC,MAAMltC,KAAKH,MAC5BA,KAAKstC,SAAUttC,KAAKstC,SAASntC,KAAKH,MAClCA,KAAKutC,UAAWvtC,KAAKutC,UAAUptC,KAAKH,MACpCA,KAAKwtC,aAAcxtC,KAAKwtC,aAAartC,KAAKH,MAC1CA,KAAKytC,gBAAiBztC,KAAKytC,gBAAgBttC,KAAKH,M,oDAG5CA,KAAKgtC,SAAW,IAEnBhtC,KAAK+sC,eACD/sC,KAAK+sC,cAAgB/sC,KAAKgtC,SAC7BhtC,KAAKotC,QAEPptC,KAAKwuB,c,6BAGLxuB,KAAKytC,oB,4BAEAC,GAGL,GADA1tC,KAAK+sC,aAAe,EACjBW,EACH,CACC,IAAI1tC,KAAKktC,WAAW,OACpBS,cAAc3tC,KAAKitC,WACnBjtC,KAAKitC,UAAYW,YAAY5tC,KAAKmtC,MAAOntC,KAAKuuB,aAE9CvuB,KAAKytC,oB,8BAKHztC,KAAKktC,YACRltC,KAAKwtC,iB,+BAEGlrC,GACRtC,KAAKkZ,QACLlZ,KAAKuuB,OAASjsB,EACdtC,KAAKwtC,iB,kCAGL,OAAOxtC,KAAKktC,a,qCAIZltC,KAAKktC,YAAW,EAChBltC,KAAKitC,UAAYW,YAAY5tC,KAAKmtC,MAAOntC,KAAKuuB,U,wCAI9CvuB,KAAKktC,YAAW,EACXltC,KAAKitC,YACVU,cAAc3tC,KAAKitC,WACnBjtC,KAAKitC,UAAU,U,KCxEIY,G,WACpB,cAA4D,IAA/Cvf,EAA8C,EAA9CA,SAAUwf,EAAoC,EAApCA,aAAcC,EAAsB,EAAtBA,cAAe1f,EAAO,EAAPA,MAAO,oBAC1DruB,KAAKwuB,UAAYF,EACjBtuB,KAAKguC,cAAgBF,EACrB9tC,KAAKiuC,eAAiBF,EACtB/tC,KAAKuuB,OAASF,EAEdruB,KAAK0uB,QAAU1uB,KAAK0uB,QAAQvuB,KAAKH,MACjCA,KAAKmtC,MAAQntC,KAAKmtC,MAAMhtC,KAAKH,MAE7BA,KAAKkuC,YAAc,IAAIrB,GAAM,CAACve,SAAStuB,KAAKmtC,MAAO9e,MAAMA,EAAOye,OAAO,SACpDjvC,IAAhBkwC,GAA2C,OAAhBA,IAC7B/tC,KAAKmuC,eAAiB,IAAItB,GAAM,CAACve,SAAStuB,KAAKmtC,MAAO9e,MAAM0f,EAAejB,OAAO,KACnF9sC,KAAKouC,WAAW,E,sDAIhB,GADApuC,KAAKouC,cACDpuC,KAAKkuC,YAAYX,YAGpB,OAFAvtC,KAAKkuC,YAAYb,aACjBrtC,KAAKmuC,gBAAgBnuC,KAAKmuC,eAAed,SAGvCrtC,KAAKguC,eAAehuC,KAAKouC,WAAWpuC,KAAKguC,cAC3ChuC,KAAKmtC,QAGNntC,KAAKkuC,YAAYh1B,OAAM,K,8BAGvBlZ,KAAKouC,aACLpuC,KAAKkuC,YAAYh1B,QACjBlZ,KAAKmuC,gBAAgBnuC,KAAKmuC,eAAej1B,QACzClZ,KAAKouC,WAAW,EAChBpuC,KAAKwuB,gB,KC9Bc6f,G,WACpB,cAA4D,IAAD,OAA9C5X,EAA8C,EAA9CA,QAAS6X,EAAqC,EAArCA,UAAWC,EAA0B,EAA1BA,cAA0B,EAAXC,UAAW,oBAC1DhhC,EAAYxN,MAEZA,KAAKy4B,SAAWhC,EAChBz2B,KAAKyuC,WAAYH,EACjBtuC,KAAK0uC,eAAgBH,EAErBvuC,KAAK2uC,OAAQ3uC,KAAK2uC,OAAOxuC,KAAKH,MAC9BA,KAAKkP,SAAUlP,KAAKkP,SAAS/O,KAAKH,MAClCA,KAAK4uC,2BAA4B5uC,KAAK4uC,2BAA2BzuC,KAAKH,MACtEA,KAAK6uC,SAAU7uC,KAAK6uC,SAAS1uC,KAAKH,MAClCA,KAAK8uC,gBAAiB9uC,KAAK8uC,gBAAgB3uC,KAAKH,MAChDA,KAAK+uC,kBAAmB/uC,KAAK+uC,kBAAkB5uC,KAAKH,MACpDA,KAAKgvC,SAAUhvC,KAAKgvC,SAAS7uC,KAAKH,MAClCA,KAAKivC,mBAAoBjvC,KAAKivC,mBAAmB9uC,KAAKH,MACtDA,KAAKkvC,UAAWlvC,KAAKkvC,UAAU/uC,KAAKH,MACpCA,KAAKmvC,iBAAkBnvC,KAAKmvC,iBAAiBhvC,KAAKH,MAElDA,KAAKovC,uBAA4GvxC,EACjHmC,KAAKqvC,uBAAyB,IAAIxC,GAAM,CAACC,OAAO,EAAGze,MAAM,IAAKC,SAAStuB,KAAK+uC,oBAC5E/uC,KAAKsvC,kBAAmB,EACxBtvC,KAAKuvC,YAAY,KACjBvvC,KAAKwvC,gBAAiB,KACtBxvC,KAAKyvC,qBAAmBvwC,OAAM,eAC9Bc,KAAK0vC,iBAAiD1vC,KAAKgvC,SACxDhvC,KAAKyvC,oBAEPzvC,KAAKwvC,gBAAkB,IAAKtwC,OAAM,eAAoBc,KAAK4uC,4BAC3D5uC,KAAKwvC,gBAAL,QAAgCxvC,KAAKy4B,WAGrCv5B,OAAOuO,iBAAiB,SAAUzN,KAAK0vC,kBAExCn6B,YAAW,WACV,EAAKo6B,8BAA8B,EAAKD,mBAExC,G,qDAID1vC,KAAKgvC,a,iCAGDhvC,KAAKyvC,mBAGRzvC,KAAKwvC,gBAAL,aAFAtwC,OAAO4O,oBAAoB,SAAU9N,KAAK0vC,oB,mDAK3C1vC,KAAK2vC,+BAA+B3vC,KAAK2vC,kC,iCAE/B3vC,KAAKuvC,YAAavvC,KAAKy4B,SAAL,0B,wCAE5Bz4B,KAAKovC,kBAAkB1gB,UACvB1uB,KAAKivC,uB,0CAGLjvC,KAAKsvC,kBAAiB,I,+BAEd/3B,GACRvX,KAAKivC,qBACLjvC,KAAKkvC,c,2CAGDlvC,KAAKsvC,iBAKRtvC,KAAKqvC,uBAAuBn2B,OAAM,IAJlClZ,KAAK0uC,gBAAgB1uC,KAAK0uC,iBAC1B1uC,KAAKqvC,uBAAuBhC,QAC5BrtC,KAAKsvC,kBAAmB,K,gCAKhB/3B,GACT,GAAIvX,KAAKuvC,YAAT,CACA,IAAIK,EAAoB5vC,KAAKuvC,YAC7BvvC,KAAK6uC,WACFe,EAAkB,QAAY5vC,KAAKuvC,YAAL,QAA4BK,EAAkB,OAAW5vC,KAAKuvC,YAAL,OAC1FvvC,KAAKmvC,wBAJiBnvC,KAAK6uC,a,yCAO3B7uC,KAAKiO,cAAc,CAAC5Q,KAAK,YACzB2C,KAAKyuC,YAAYzuC,KAAKyuC,iB,KCxElB5uC,GAAkBzC,EAAlByC,iBACegwC,G,kDACpB,WAAY1uC,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV2uC,EAEuD3uC,EAFvD2uC,wBAAyBtK,EAE8BrkC,EAF9BqkC,yBAA0BuK,EAEI5uC,EAFJ4uC,cAAetK,EAEXtkC,EAFWskC,QAASC,EAEpBvkC,EAFoBukC,QACjFsK,EAC6D7uC,EAD7D6uC,aAAcC,EAC+C9uC,EAD/C8uC,gBAAiBC,EAC8B/uC,EAD9B+uC,eAAgBC,EACchvC,EADdgvC,WAAYC,EACEjvC,EADFivC,6BAC3DC,EAA6DlvC,EAA7DkvC,YAAaC,EAAgDnvC,EAAhDmvC,4BAA6BC,EAAmBpvC,EAAnBovC,iBAC1C,EAAKC,kBAAoBD,EACtBT,GAAwBjwC,GAAiB,2BACzC2lC,GAAyB3lC,GAAiB,4BAC1C2lC,GAAyB3lC,GAAiB,4BAC1CkwC,GAAclwC,GAAiB,sBACtBhC,IAAV4nC,GAA+B,OAAVA,GAAe5lC,GAAiB,gBAC3ChC,IAAV6nC,GAA+B,OAAVA,GAAe7lC,GAAiB,WACxD,EAAK+lC,SAAWF,EAChB,EAAKG,SAAWJ,EAChB,EAAKgL,eAAeV,EACpB,EAAKW,6BAA8BJ,EACnC,EAAKxK,0BAA0BN,EAC/B,EAAKmL,iCAAmCb,EACxC,EAAKc,sBAAwBZ,EAC7B,EAAKa,yBAA2BZ,EAChC,EAAKa,wBAAwBZ,EAC7B,EAAKa,oBAAsBZ,EAC3B,EAAKa,sCAAwCZ,EAC7C,EAAKtX,MAAO,CAAC7I,SAAS,MACtB,EAAKkL,WAAY,EAAKA,WAAWh7B,KAAhB,gBACjB,EAAKs4B,SAAWC,IAAMC,YACtB,EAAKsY,aAAeZ,EACpB,EAAKa,qBAAqBxY,IAAMC,YAChC,EAAKwY,YAAYzY,IAAMC,YACvB,EAAKyY,mBAAmB1Y,IAAMC,YAC9B,EAAK0Y,eAAiB,EAAKA,eAAelxC,KAApB,gBACtB,EAAKmxC,OAAQ,EAAKA,OAAOnxC,KAAZ,gBACb,EAAKoxC,kBAAoB,EAAKA,kBAAkBpxC,KAAvB,gBACzB,EAAKqxC,uBAAyB,EAAKA,uBAAuBrxC,KAA5B,gBAC9B,EAAKsxC,mBAAqB,EAAKA,mBAAmBtxC,KAAxB,gBAC1B,EAAKuxC,uBAAyB,EAAKA,uBAAuBvxC,KAA5B,gBAC9B,EAAKwxC,+BAAiC,EAAKA,+BAA+BxxC,KAApC,gBACtC,EAAKyxC,OAAS,EAAKA,OAAOzxC,KAAZ,gBACd,EAAK0xC,iBAAmB,EAAKA,iBAAiB1xC,KAAtB,gBACxB,EAAK2xC,kBAAoB,EAAKA,kBAAkB3xC,KAAvB,gBACzB,EAAK4xC,kBAAoB,EAAKA,kBAAkB5xC,KAAvB,gBACzB,EAAK6xC,cAAgB,EAAKA,cAAc7xC,KAAnB,gBACrB,EAAK8xC,oCAAqC,EAAKA,oCAAoC9xC,KAAzC,gBAC1C,EAAK+xC,sBAAuB,EAAKA,sBAAsB/xC,KAA3B,gBAC5B,EAAKgyC,gBAAiB,EAAKA,gBAAgBhyC,KAArB,gBACtB,EAAKiyC,8BAAgC,EAAKA,8BAA8BjyC,KAAnC,gBACrC,EAAKkyC,2BAA4B,EAAKA,2BAA2BlyC,KAAhC,gBACjC,EAAKmyC,+BAAgC,EAAKA,+BAA+BnyC,KAApC,gBACrC,EAAKoyC,qDAAsD,EAAKA,qDAAqDpyC,KAA1D,gBAC3D,EAAKqyC,sDAAuD,EAAKA,sDAAsDryC,KAA3D,gBAC5D,EAAKsyC,sDAAuD,IAAIhP,GAAyB,CAACC,YAAY,IACtG,EAAKgP,iBAAkB,EACvB,EAAKC,6CAA8C,EACnD,EAAKC,cAAc,KACnB,EAAKlL,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAKsnC,MAAQ,EAAKA,MAAMtnC,KAAX,gBACb,EAAK2mC,QAAS,EAAKA,QAAQ3mC,KAAb,gBACd,IAAMoC,EAAgB,EAAKiuC,oBAzDV,OA0DjB,EAAKqC,wBAAwDh1C,IAAnC0E,EAAc4C,mBACvC5C,EAAc4C,mBAAmB,EAClC,EAAK2tC,0CAA4C,KACjD,EAAKC,2BAA6B,KAClC,EAAKC,kBAAoB,IAAIlU,GAAK,EAAKkT,eACvC,EAAKlZ,MAAM,CAACma,YAAY,GAAIrX,SAAQ,EAAMsX,iBAAgB,GA/DzC,E,gEAkEjBlzC,KAAKmzC,4BAA8B,IAAI9E,GAAc,CAAC5X,QAAQz2B,KAAKy4B,SAASS,UAC5El5B,KAAKmzC,4BAA4B1lC,iBAAiB,UAAWzN,KAAK4xC,U,iCAGxDtvC,GACVtC,KAAKs5B,SAAS,CAACsC,QAAQt5B,IACpBA,GACFtC,KAAK4xC,W,+BAGE,IAAD,OACNr8B,YAAW,WAAK,IAAD,EACf,YAAK27B,qBAAqBhY,eAA1B,SAAmCiO,YAChC,K,8BAEG7kC,GAAO,IAAD,OACb,OAAO,IAAI/E,SAAQ,SAACO,EAASC,GAC5B,EAAKmzC,qBAAqBhY,QAAQ4N,QAAQxkC,GAAOlE,KAAKN,GAASY,MAAMX,Q,2BAGlEwZ,GAAQ,IAAD,OAEX,OAAO,IAAIha,SAAQ,SAACO,EAASC,GAAU,IAC/BkyB,EAAiD1Y,EAAjD0Y,SAAUmjB,EAAuC77B,EAAvC67B,WAAYF,EAA2B37B,EAA3B27B,gBAAiBG,EAAU97B,EAAV87B,SAC9Cz2C,QAAQmC,IAAI,gCACZnC,QAAQmC,IAAIq0C,QACEv1C,IAAXoyB,GAAiC,OAAXA,GAAgBpwB,GAAiB,YAC1D,EAAKy5B,SAAS,CAAC4Z,gBAAgBA,QAAmCr1C,IAAlBq1C,GAA+C,OAAlBA,IAC7E,EAAKtb,UAAY3H,EACjB,EAAKqjB,YAAcF,EACnB,IAAIG,GAAU,EACXF,IACE,EAAKV,6CAA8C,EAAKD,kBAC3D,EAAKC,6CAA6C,EAClDY,GAAU,GAGZ,EAAK9L,MAAM8L,GAASn1C,KAAKN,GAASY,MAAMX,Q,qDAGXkpB,GAAY,IAAD,EACrCtR,EAAc,UAAG3V,KAAK43B,UAAUvV,MAAMF,gBAAgB8E,UAAxC,aAAG,EAAkDlF,KAAKH,sDAAsD5hB,KAAK4yC,eACjIY,EAAwB79B,EAAe,CAACA,EAAe9K,EAAG8K,EAAe7K,GAAG,CAAC,GAAG,IAChF2rB,EAAUz2B,KAAKmxC,YAAYjY,QAC3Bua,EAA0Bjd,GAAYC,GAE5C,MAD8B,CAAE+c,EAAsB,GAAG/c,EAAQ2C,YAAY,IAAKqa,EAAwBxc,KAAOuc,EAAsB,GAAG/c,EAAQ4C,aAAa,IAAKoa,EAAwB3c,O,4BAGvLyc,GAAS,IAAD,OACb,OAAO,IAAIh2C,SAAQ,SAACO,EAASC,GAC5B,EAAK21C,6BAA6B,EAAKA,8BACvC,IAAIC,GAAY,EAChB,EAAKD,4BAA6B,WAAKC,GAAY,GACnD,IAAMlzB,EAAgB,EAAKmX,UAAUnX,cAAcjB,WAChD,EAAKqzB,mBAAmB,IAAE,EAAKA,oBAAoBpyB,EAAcjhB,QACpE,EAAKqzC,mBAAqB,EAAKA,mBAAmBpyB,EAAcjhB,OAChE,IAAMo0C,EAAoCnzB,EAAc,EAAKoyB,yBACtBh1C,IAApC+1C,GAAmF,OAApCA,GAAyC/zC,GAAiB,qCAC5G,EAAKizC,0CAA4Cc,EACjD,IAAMpnC,EAAeonC,EAAkC5hC,kBACvD,EAAK4gC,cAAgBgB,EAAkC5lC,MACvD,IAAMsuB,EAAQt9B,EAAUsN,mBAAmBJ,EAAKe,iBAAiB,EAAKujC,oBAAoB3rC,WACzF7F,EAAUuU,iBAAiB/G,GAC5B,EAAK8kC,SACL,IAAMuC,EAAe,WACjBF,EACF71C,KAGG,EAAKg2C,iBACR,EAAKzC,eAAe,EAAKzZ,UAAW,EAAK0b,YAAaM,EAAkC5lC,OACzF,EAAKyjC,mBAAmB,EAAK6B,aAC7B,EAAKI,4BAA4B,KAC9BH,GACF,EAAKzM,QAAQ,GAEd,EAAKyL,uDAAuDn0C,KAAKN,GAASY,MAAMX,KAE3Eg2C,EAAmB,EAAK7C,qBAAqBhY,QACnD,GAAG6a,EAAiBzX,SAAUA,EAA9B,CAIA,IAAMmN,EAAc,EAAKyI,wBACzB,EAAKQ,gBAAkBjJ,EACvBsK,EAAiBrM,KAAKpL,EAAQmN,GAAarrC,KAAKy1C,GAAcn1C,MAAMX,QALnE81C,S,6EAQoD,IAAD,OACrD,OAAO,IAAIt2C,SAAQ,SAACO,EAASC,GAAU,IAAD,EAC/B8tB,EAA8B,UAAI,EAAKinB,iDAAT,aAAI,EAAgDjnB,+BACnFA,IAAiCA,EAA+BmoB,YAIrEnoB,EAA+B9B,aAAa3rB,KAAKN,GAASY,MAAMX,GAH/DD,S,8CAOF,OAAQkC,KAAKmyC,kBAAkB,IAAOnyC,KAAKy4B,SAASS,QAAQG,aAAa,M,wCAEvDxsB,GAClB7M,KAAK+wC,oBAAoBlkC,K,qDAEKA,EAAMonC,GACpCj0C,KAAK2wC,iCAAiC9jC,EAAMonC,GAC5Cj0C,KAAKixC,aAAa/X,QAAQwB,S,2CAEN,IAAD,OACC16B,KAAK84B,MAAMma,YACnB7jC,SAAQ,SAAA8kC,GAAU,OAAEA,EAAWra,IAAIX,QAAQH,YACtD,EAAKua,YAAYxwC,QAAQoxC,EAAWra,IAAIX,QAAQnX,MAAM,O,+BAGvD/hB,KAAKuxC,sB,0CAGLvxC,KAAKs5B,SAAS,CAAC2Z,YAAY,KAC3BjzC,KAAK8zC,iBAAkB,I,wCAGvB,IAAMrd,EAAUz2B,KAAKy4B,SAASS,QAC9B,YAAar7B,IAAV44B,GAAgC,OAAXA,EAAuB,KACxCA,EAAQ2C,YAAY3C,EAAQ4C,e,6CAEb9pB,GACtBvP,KAAKgzC,kBAAkBtkB,QAAQnf,K,6CAETA,GAClBA,EAAEypB,WACHh5B,KAAKwyC,yDAGRxyC,KAAKgzC,kBAAkBtkB,QAAQnf,M,8EAG/B,OAAQrQ,OAAO82B,UAAWh2B,KAAKwwC,oBAAoBjrC,0D,oCAEtCgK,GACb,IAAMkqB,EAASlqB,EAAEkqB,OACjB,GAAGz5B,KAAKwyC,wDAAR,CACC,IAAM3lC,EAAO4sB,EAAO1X,KAAKlB,MAAM,GAC/B7gB,KAAK0wC,6BAA6B7jC,QAGnC7M,KAAKixC,aAAa/X,QAAQuB,KAAK,CAACjvB,SAAS+D,EAAEoG,eAAgBw+B,uBAAuB1a,EAAOlB,iBACxFtI,SAASjwB,KAAK43B,UAAW7V,KAAK0X,EAAO1X,KAAMlV,KAAK4sB,EAAO1X,KAAKlB,MAAM,KAAMniB,MAAM9B,QAAQC,S,qCAEzEozB,EAAUmjB,EAAYplC,GAEpC,IADA,IAAMilC,EAAcjzC,KAAK84B,MAAMma,YACvB9vC,EAAE,EAAGA,EAAEiwC,EAAW5zC,OAAQ2D,IAAI,CACrC,IAAM4e,EAAOqxB,EAAWjwC,GACxB,IAAG4e,EAAKqyB,mBAAR,CACA,IAAMz+B,EAAiBoM,EAAKH,sDAAsD5T,GAClF,GAAI2H,EAAJ,CACA,IAAMu+B,EAAY,cAAC,GAAD,CAAoCra,IAAKnB,IAAMC,YAAahB,QAAS33B,KAAKwxC,uBAAwB9Z,QAAS13B,KAAK0xC,uBACjIzhB,SAAUA,EAAUlO,KAAMA,EAAMvW,SAAUmK,GADR+C,GAAWC,QAE9Cs6B,EAAY1yC,KAAK2zC,KAElBl0C,KAAK8zC,iBAAgB,EACrB9zC,KAAKs5B,SAAS,CAAC2Z,YAAYA,M,yCAG3BjzC,KAAK6yC,qBACL7yC,KAAKynC,QAAQ/oC,MAAM9B,QAAQC,S,0CAG3BmD,KAAK6yC,qBACL7yC,KAAKynC,QAAQ/oC,MAAM9B,QAAQC,S,0DAEQ0a,GACnCvX,KAAKgxC,sCAAsCz5B,K,6BAErCA,GACNvX,KAAKqyC,2BAA2B,MAChCryC,KAAK8wC,wBAAwB,CAAC3wB,mBAAmBngB,KAAK+yC,+B,iCAE5Cx7B,GAAQ,IAAD,OACjBvX,KAAKyyC,sDAAsD/jB,SAAQ,WACvC,EAAK0jB,8BAA8B76B,EAAO1M,EAAG0M,EAAOzM,Q,iDAGtD6K,GAC1B,IAAM0+B,EAAwBr0C,KAAKoxC,mBAAmBlY,QAClDvjB,GAIJ0+B,EAAsBva,MAAM7C,KAA5B,UAAqD,IAAjBthB,EAAe9K,EAAnD,KACAwpC,EAAsBva,MAAMhD,IAA5B,UAAoD,IAAjBnhB,EAAe7K,EAAlD,KACAupC,EAAsBva,MAAMwa,QAA5B,SALCD,EAAsBva,MAAMwa,QAA5B,S,oDAO4BzpC,EAAGC,GAAG,IAAD,EAC5B+gB,EAA8B,UAAG7rB,KAAK8yC,iDAAR,aAAG,EAAgDjnB,+BACvF,IAAKA,IAAmCA,EAA+BmoB,YAEtE,OADAh0C,KAAK+yC,2BAA2B,KACzB,KAER,IAAME,EAAcjzC,KAAKmxC,YAAYjY,QACrC,GAAI+Z,EAAJ,CAIA,IAAMsB,EAA8B/d,GAAYx2B,KAAKmxC,YAAYjY,SACjEruB,GAAQ0pC,EAA4Btd,KACpCnsB,GAAMypC,EAA4Bzd,IAClC,IAAMjM,EAAchgB,EAAEooC,EAAY7Z,YAC5BtO,EAAchgB,EAAEmoC,EAAY5Z,aAClCr5B,KAAK+yC,2BAA6BlnB,EAA+B5B,wBAAwBY,EAAaC,GACtG,IAAMnV,EAAiB3V,KAAK8yC,0CAA0C1mB,+BAA+BpsB,KAAK+yC,4BAC1G/yC,KAAKqyC,2BAA2B18B,QAV/B3V,KAAK+yC,2BAA2B,O,+BAYxB,IAAD,EAEFxwC,EAAgBvC,KAAKwwC,oBACrBgE,EAAmB,UAAGx0C,KAAK43B,iBAAR,aAAG,EAAgBnX,cAAcjB,WACpDi1B,OAAmD52C,IAAtB22C,GAAuD,OAAtBA,GAA6BA,EAAoBh1C,OAAO,EAC5H5C,QAAQmC,IAAI,8BAA8B01C,GAC1C,IAAMltB,EAAY,mBAAmBvnB,KAAK84B,MAAM8C,QAAQ,WAAW,KACjE57B,KAAK84B,MAAMoa,gBAAgB,qBAAqB,KAC/C3wC,EAAcsD,0BAA0B,0BAA0B,2BACrE,OAAQ,sBAAK0hB,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAArC,UACLgc,EAA4B,cAAC,GAAD,CAAoBtI,YAAansC,KAAK6xC,iBAAkBxF,aAAcrsC,KAAK8xC,oBAAsB,KAAK,cAAC,GAAD,CAAkBjY,IAAK75B,KAAKkxC,qBAAsBvL,iBAAkB3lC,KAAKy4B,SAAU8M,wBAAyBvlC,KAAKmyC,gBAAiB3M,yBAA0BxlC,KAAK8lC,0BAA2BL,QAASzlC,KAAK6lC,SAAUH,QAAS1lC,KAAK4lC,SAAlO,SACnI,sBAAKre,UAAU,UAAUsS,IAAK75B,KAAKmxC,YAAnC,UACC,qBAAK5pB,UAAU,eAAf,SACEvnB,KAAK84B,MAAMma,cAEb,qBAAK1rB,UAAU,mBAAmBiD,IAAKte,EAAKe,iBAAiB1K,EAAcsC,UAAU,yCAA0Cg1B,IAAK75B,KAAKoxC,iC,GAtSpG50C,aCL3Bk4C,I,cAVA,CACdC,SAAS,UAAWC,UAAU,WAAYC,QAAQ,UAClDC,wBAAwB,wBAAyBC,cAAc,eAC/DC,gBAAgB,iBAAkBC,kBAAkB,kBAAmBC,YAAY,aACnFC,YAAY,aAAcC,sBAAsB,sBAChDC,oBAAoB,qBAAsBC,WAAW,aAAcC,aAAa,cAChFC,eAAe,gBAAiBC,UAAU,YAC1CC,0BAA0B,0BAC1BC,gBAAgB,mBCFIC,I,OADKx4C,EAApByC,iB,kDAEL,WAAYsB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV00C,EAAe10C,EAAf00C,cAFU,OAGjB,EAAKC,eAAiBD,EACtB,EAAKnO,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAK24B,MAAO,CAACid,WAAW,MALP,E,oDAOD,IAAX9lB,EAAU,EAAVA,SACLjwB,KAAKs5B,SAAS,CAACyc,WAAW9lB,EAAS5N,MAAMJ,oB,+BAGzC,IAAM+zB,EAAuB,GACvBD,EAAa/1C,KAAK84B,MAAMid,WAC3BA,GACFA,EAAW3mC,SAAQ,SAAAvC,GACfmpC,EAAqBlzC,QAAQ+J,EAAKuR,QAAQ,GAC5C43B,EAAqBz1C,KAAKsM,EAAKuR,WAGlC43B,EAAqB/+B,MAAK,SAACg/B,EAAiBC,GAC3C,IAAMC,EAA6Bt0C,EAAWu0C,eAAeH,GACvDI,EAA4Bx0C,EAAWu0C,eAAeF,GAC5D,OAAGC,IAA6BE,EAAmC,EAC5DF,EAA2BE,EAA4B,GAAG,KAElE,IAAM1sC,EAAUqsC,EAAqBhsC,KAAI,SAAC1I,GAAD,OAAc,qBAA4BimB,UAAU,QAAtC,cAA+C,qBAAKA,UAAW,UAAU1lB,EAAWyB,WAAWhC,KACpJO,EAAWu0C,eAAe90C,KADoCoX,GAAWC,WAErE29B,EAAUt2C,KAAK81C,eAAe,MAAM,KACpCvuB,EAAY,mBAAmBvnB,KAAK81C,eAAe,mBAAmB,IAC5E,OAAQ,sBAAKvuB,UAAWA,EAAhB,UAA4B+uB,EAAQ,oBAAI/uB,UAAU,UAAd,SAC3C5d,W,GA/BwCnN,cCNtB+5C,G,WACpB,WAAY9f,EAAS+f,EAAclnC,GAAiB,oBACnDtP,KAAKy2C,oBAAqB,GAC1Bz2C,KAAK2O,WAAY,EACjB3O,KAAK02C,cAAgBF,EACrBx2C,KAAKy4B,SAAShC,EACdz2B,KAAK+U,iBAAmBzF,EACxBtP,KAAK22C,qBAAuB32C,KAAK22C,qBAAqBx2C,KAAKH,MAC3DA,KAAK42C,wBAA0B52C,KAAK42C,wBAAwBz2C,KAAKH,MACjEA,KAAK62C,YAAc72C,KAAK62C,YAAY12C,KAAKH,MACzCA,KAAK82C,WAAa92C,KAAK82C,WAAW32C,KAAKH,MACvCA,KAAK06B,KAAO16B,KAAK06B,KAAKv6B,KAAKH,MAC3BA,KAAKwO,QAAUxO,KAAKwO,QAAQrO,KAAKH,M,iEAEb+2C,GACjB/2C,KAAKy2C,oBAAoB3zC,QAAQi0C,GAAmB,GACtD/2C,KAAKy2C,oBAAoBl2C,KAAKw2C,K,8CAERtgB,GACvB,IAAIzoB,EAAQhO,KAAKy2C,oBAAoB3zC,QAAQ2zB,GAC1CzoB,EAAM,GACThO,KAAKy2C,oBAAoB/1C,OAAOsN,EAAO,K,oCAIvC,MADe,CAAChO,KAAKy4B,UACL1uB,OAAO/J,KAAKy2C,uB,mCAG5B,OAAOz2C,KAAKy4B,W,oCAGZ,OAAOz4B,KAAK2O,Y,6BAGT3O,KAAK2O,YACR3O,KAAK2O,WAAY,EACjB3O,KAAK+U,iBAAiB/U,MACtBA,KAAK02C,mB,gCAGF12C,KAAK2O,YACR3O,KAAK2O,WAAY,EACjB3O,KAAK+U,iBAAiB/U,W,KCtCHg3C,G,WACpB,WAAY71C,GAAO,oBAClBnB,KAAKi3C,SAAWj3C,KAAKi3C,SAAS92C,KAAKH,MACnCA,KAAKk3C,aAAe,IAAIpY,GAAK9+B,KAAKi3C,U,0DAEfxgB,EAAS+f,GAC5B,IAAIlhC,EAAU,IAAIihC,GAAiB9f,EAAS+f,EAAcQ,EAAWtoC,UAO/D,OANN6G,YAAW,WACV,IAAKyhC,EAAWG,iBAAiB1gB,GAAU,CAC1C,GAAGnhB,EAAO8hC,cAAc,OACxBJ,EAAW/hC,SAAS1U,KAAK+U,MAEzB,GACWA,I,6BAEAmhB,GAGb,IAFA,IAAMjhB,EAAWwhC,EAAW/hC,SACxB9R,EAAE,EACAA,EAAEqS,EAAQhW,QAAO,CACtB,IAAM8V,EAASE,EAAQrS,GACvB,GAAGmS,EAAOwhC,eAAergB,EACzB,CACCnhB,EAAO9G,UACP,MAEDrL,O,+BAGcmS,GACf,IAAItH,EAAQgpC,EAAW/hC,SAASnS,QAAQwS,GACrCtH,EAAM,GACTgpC,EAAW/hC,SAASvU,OAAOsN,EAAO,K,uCAEXuB,GACvBynC,EAAWE,aAAaxoB,QAAQnf,K,uCAENA,GAC1BynC,EAAWE,aAAaxoB,QAAQnf,K,qCAEXA,GACrBynC,EAAWC,SAAS1nC,K,+BAELA,GAIT,IAHA,IAGgB+F,EAHZzK,EAAI0E,EAAE1E,EACNC,EAAIyE,EAAEzE,EACZusC,EAAiBL,EAAW/hC,SAAS9F,QAC1BhM,EAAI,EAAWmS,EAAS+hC,EAAel0C,GAAIA,IAAK,CAG9D,IAFA,IAEYszB,EAFR6gB,EAAWhiC,EAAOuhC,cAClBU,GAAU,EACNC,EAAE,EAAW/gB,EAAQ6gB,EAASE,GAAGA,IAAI,CAC5C,IAAIre,EAAmB3C,GAAYC,GAC/BghB,EAAQte,EAAiBlC,KACzBygB,EAASD,EAAQhhB,EAAQ2C,YACzBue,EAAOxe,EAAiBrC,IACxB8gB,EAAUD,EAAOlhB,EAAQ4C,aAC7B,KAAMxuB,EAAI4sC,GAAS5sC,EAAI6sC,GAAU5sC,EAAI6sC,GAAQ7sC,EAAI8sC,GAAU,CAC1DL,GAAU,EACV,OAGEA,GACHjiC,EAAOolB,U,uCAGiBjE,GACpB,IAAK,IAAWnhB,EAAPnS,EAAI,EAAWmS,EAAS0hC,EAAW/hC,SAAS9R,GAAIA,IACrD,GAAImS,EAAOwhC,cAAgBrgB,EACvB,OAAO,EAGf,OAAO,M,KAIfugB,GAAWE,aAAe,IAAIpY,GAAKkY,GAAWC,UAC9CD,GAAW/hC,SAAS,GACpB4U,SAASpc,iBAAiB,YAAa4wB,GAAgBuB,oCAAoCoX,GAAWa,mBACtGhuB,SAASpc,iBAAiB,aAAc4wB,GAAgByB,oCAAoCkX,GAAWc,mB,IC/EhGj4C,GAAkBzC,EAAlByC,iBACck4C,G,WACpB,WAAY52C,GAAO,wBACX62C,EAA2B72C,EAA3B62C,WAAYvhB,EAAet1B,EAAfs1B,QAASiE,EAAMv5B,EAANu5B,KACvBsd,GAAevhB,GAAS52B,GAAiB,0BAC1C66B,GAAK76B,GAAiB,QAC1BG,KAAKy8B,YAAcub,EACnBh4C,KAAKy4B,SAAWhC,EAChBz2B,KAAKi4C,MAAQvd,EACb16B,KAAKwO,QAAUxO,KAAKwO,QAAQrO,KAAKH,MACjCA,KAAK48B,SAAW58B,KAAK48B,SAASz8B,KAAKH,MACnCA,KAAKk4C,kBAAkB,K,uDAGvBl4C,KAAKwO,UACLxO,KAAKk4C,kBAAqBlB,GAAWpa,SAAS58B,KAAKy8B,YAClDz8B,KAAKy8B,YAAYvD,QAAQl5B,KAAKy4B,SAASz4B,KAAKi4C,S,gCAG7Cj4C,KAAKk4C,mBAAmBl4C,KAAKk4C,kBAAkB1pC,UAC/CxO,KAAKk4C,kBAAkB,S,KCfJC,I,OADG/6C,EAAlByC,iB,kDAEL,WAAYsB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVg8B,EAAiBh8B,EAAjBg8B,MAAO6O,EAAU7qC,EAAV6qC,SAFG,OAGjB,EAAKoM,UAAYpM,EACjB,EAAKqM,eAAarM,EAClB,EAAKsM,uBAAwB,EAAKA,uBAAuBn4C,KAA5B,gBAC7B,EAAK49B,wBAAyB,EAAKA,wBAAwB59B,KAA7B,gBAC9B,EAAKo4C,cAAgB,KACrB,EAAKzf,MAAO,CAACqE,MAAMA,GARF,E,+DAUCN,GACf78B,KAAKmB,MAAMg8B,OAAOn9B,KAAK84B,MAAMqE,OAC/Bn9B,KAAKs5B,SAAS,CAAC6D,MAAMn9B,KAAKmB,MAAMg8B,U,+CAG9Bn9B,KAAKu4C,eACPv4C,KAAKu4C,cAAcC,S,gDAGjBx4C,KAAKu4C,eACPv4C,KAAKu4C,cAAcE,U,sCAELn2C,GACftC,KAAKu4C,cAAgBj2C,I,+BAGrB,IAAMilB,EAAY,mBAAmBvnB,KAAKq4C,aAAa,gBAAgB,IACvE,OAAQ,sBAAK9wB,UAAWA,EAAhB,UACP,qBAAKA,UAAU,WAAf,SAA2BvnB,KAAKo4C,YAChC,qBAAK7wB,UAAU,QAAf,SAAwBvnB,KAAK84B,MAAMqE,QACnC,qBAAK5V,UAAU,sBAAf,SACC,cAAC,GAAD,CAAY+U,OAASpwB,EAAKQ,OAAO,2BAA4BirB,QAAS33B,KAAKs4C,2BAE5E,qBAAK/wB,UAAU,uBAAf,SACC,cAAC,GAAD,CAAY+U,OAASpwB,EAAKQ,OAAO,2BAA6BirB,QAAS33B,KAAK+9B,mC,GAnCrCvhC,cCMtBk8C,G,kDACpB,WAAYv3C,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVw3C,EAAoFx3C,EAApFw3C,WAAYC,EAAwEz3C,EAAxEy3C,iBAAkBrI,EAAsDpvC,EAAtDovC,iBAAkBsI,EAAoC13C,EAApC03C,QAASC,EAA2B33C,EAA3B23C,UAAWC,EAAgB53C,EAAhB43C,aAF1D,OAGjB,EAAKvI,kBAAoBD,EACzB,EAAKyI,YAAcL,EACnB,EAAKM,kBAAoBL,EACzB,EAAKM,WAAaJ,EAClB,EAAKK,WAAa,EAClB,EAAKC,SAAWP,GAAgB,kBAAIjgC,OAAO,EAAKugC,eAChD,EAAKE,qBAAqB,EAAKA,qBAAqBl5C,KAA1B,gBAC1B,EAAKm5C,iBAAiB,EAAKA,iBAAiBn5C,KAAtB,gBACtB,EAAKo5C,wBAAwB,EAAKA,wBAAwBp5C,KAA7B,gBAC7B,EAAKq5C,mBAAmB,EAAKA,mBAAmBr5C,KAAxB,gBACxB,EAAKs5C,4BAA4B,EAAKA,4BAA4Bt5C,KAAjC,gBACjC,EAAKu5C,qBAAqB,EAAKA,qBAAqBv5C,KAA1B,gBAC1B,EAAKw5C,sBAAsB,EAAKA,sBAAsBx5C,KAA3B,gBAC3B,EAAKy5C,kBAAkB,EAAKA,kBAAkBz5C,KAAvB,gBACvB,EAAKo4C,cAAiBQ,EACtB,EAAKrR,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAK24B,MAAQ,CAAC7I,SAAS,MAnBN,E,oDAqBD,IAAXA,EAAU,EAAVA,SACLjwB,KAAKs5B,SAAS,CAACrJ,e,sCAEA3tB,GACftC,KAAKu4C,cAAgBj2C,I,yCAGrBtC,KAAKu4C,cAAcsB,eAAenF,GAASQ,e,gDAG3Cl1C,KAAKi5C,sB,2CAGLj5C,KAAKu4C,cAAcsB,eAAenF,GAASK,iB,oDAG3C/0C,KAAKu4C,cAAcsB,eAAenF,GAASI,2B,6CAG3C90C,KAAKu4C,cAAcsB,eAAenF,GAASM,mB,8CAG3Ch1C,KAAKu4C,cAAcsB,eAAenF,GAASO,qB,0CAG3Cj1C,KAAKg5C,gB,6CAGLh5C,KAAKu4C,cAAcsB,eAAenF,GAASiB,mB,+BAElC,IAAD,IACFpzC,EAAgBvC,KAAKwwC,oBACrBsJ,EAAM,GAETv3C,EAAc2B,uBAChB41C,EAAKv5C,KACJ,qBAAKgnB,UAAU,MAAf,SAA2C,cAAC,GAAD,CAAY8U,OAAQ0d,KAAaz7C,KAAK,gBAAgBq5B,QAAS33B,KAAKu5C,2BAArFv5C,KAAKo5C,aAGjC,IAAMlzC,EAAkB3D,EAAc2D,gBAChCoN,EAAYpN,EAEf,cAAC,GAAD,CAAYqhB,UAAU,gBAAgB+U,OAAQpwB,EAAKQ,OAAO,+BAC3DpO,KAAK,WAAWq5B,QAAS33B,KAAKq5C,uBAF9B,KAIIW,EAAe,cAAC,GAAD,CAAYzyB,UAAU,gBAAgB+U,OAAQpwB,EAAKQ,OAAO,mCAC9EpO,KAAK,QAAQq5B,QAAS33B,KAAK45C,oBAC3Bh9C,QAAQmC,KAAI,UAAAiB,KAAK84B,MAAM7I,gBAAX,eAAqBgqB,2BAA0B,iBAAiB,cAC7E,IAAMC,EACH,cAAC,GAAD,CAAY3yB,UAAU,gBAAgB+U,OAAQpwB,EAAKQ,OAAO,oCAAqCpO,KAAK,eAAeq5B,QAAS33B,KAAKw5C,qBAC9HW,EACN,cAAC,GAAD,CAAY5yB,UAAU,gBAAgB+U,OAAQpwB,EAAKQ,OAAO,mCAAoCpO,KAAK,mBAAmBq5B,QAAS33B,KAAKy5C,8BAC9HW,EACH,cAAC,GAAD,CAAY7yB,UAAU,gBAAgB+U,OAAQpwB,EAAKQ,OAAO,sCAAuCpO,KAAK,WAAWq5B,QAAS33B,KAAK05C,uBACzHW,EAAuB,cAAC,GAAD,CAAY9yB,UAAU,gBAAgB+U,OAAQpwB,EAAKQ,OAAO,uCAAgEpO,MAAM,UAAA0B,KAAK84B,MAAM7I,gBAAX,eAAqBgqB,2BAA0B,iBAAiB,aAActiB,QAAS33B,KAAK25C,uBAArHjhC,GAAWC,QAE5I2hC,EACH,cAAC,GAAD,CAAY/yB,UAAU,gBAAgB+U,OAAQpwB,EAAKQ,OAAO,kCAAmCpO,KAAK,OAAOq5B,QAAS33B,KAAKs5C,mBAC1H,OAAGt5C,KAAKk5C,WAEC,CAACgB,EACPC,EACAC,EACAC,EACAC,EACAp0C,EAAgBoN,EAAS0mC,IAGvBF,EAAKv5C,KACR,sBAAKgnB,UAAU,MAAf,UACE2yB,EACAC,EACAC,IAHwBp6C,KAAKo5C,aAKjCU,EAAKv5C,KAAM,sBAAKgnB,UAAU,MAAf,UACP8yB,EACAC,EACAp0C,EAAgBoN,EAAS0mC,IAHQh6C,KAAKo5C,aAKvClzC,GACF4zC,EAAKv5C,KAAM,qBAAKgnB,UAAU,MAAf,SACTyyB,GADmCh6C,KAAKo5C,aAKpCU,O,GA3GmCt9C,aCAvB2sB,G,kDACpB,WAAYhoB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVw3C,EAAkDx3C,EAAlDw3C,WAAYC,EAAsCz3C,EAAtCy3C,iBAAkBrI,EAAoBpvC,EAApBovC,iBAFpB,OAGjB,EAAK4I,WAAW,EAChB,EAAKC,SAAW,kBAAIxgC,OAAO,EAAKugC,eAChC,EAAK3I,kBAAoBD,EACzB,EAAKyI,YAAcL,EACnB,EAAKM,kBAAoBL,EACzB,EAAK2B,eAAiB7hB,IAAMC,YAC5B,EAAKF,SAAWC,IAAMC,YACtB,EAAK6hB,kBAAoB9hB,IAAMC,YAC/B,EAAK4f,cAAiB,KACtB,EAAK7Q,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAKs6B,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKs6C,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvf,SAAUiC,KAAK,EAAKA,OACrF,EAAKggB,mBAAqBhiB,IAAMC,YAChC,EAAKG,MAAQ,CAAC8C,SAAQ,EAAO3L,SAAS,MAjBrB,E,oDAmBD,IAAD,EAAVA,EAAU,EAAVA,SAAWrzB,QAAQmC,IAAI,KAC5BiB,KAAKs5B,SAAS,CAACrJ,aACfrzB,QAAQmC,IAAIiB,KAAK06C,mBAAmBxhB,SACpCl5B,KAAK06C,mBAAmBxhB,QAAQwO,KAAK,CAACzX,aACtC,UAAAjwB,KAAKw6C,kBAAkBthB,eAAvB,SAAgCwO,KAAK,CAACzX,e,6BAGtCjwB,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKy6C,mBAAmB7d,WACxB58B,KAAKu4C,cAAcoC,OAAO36C,Q,6BAG1BA,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKu4C,cAAcE,U,sCAEJn2C,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAK06C,mBAAmBxhB,QAAQ0hB,gBAAgBt4C,GAChDtC,KAAKu6C,eAAerhB,QAAQ0hB,gBAAgBt4C,K,+BAM5C,IAAMC,EAAgBvC,KAAKwwC,oBAC3BxwC,KAAKm5C,WAAW,EAChB,IAAI5xB,EAAY,eACbvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YACZ,IAAI4V,EAAQ,KACT56B,EAAcs4C,qBAGhB1d,EAFuB,cAAC,GAAD,CAAetD,IAAK75B,KAAKw6C,kBAAmB3E,eACjEtzC,EAAcs4C,oBAAyB76C,KAAKo5C,aAG/C,IAAI0B,EAAsB,KAK1B,OAJIv4C,EAAcs4C,qBACjBC,EAAuB,cAAC,GAAD,CAAejhB,IAAK75B,KAAKw6C,kBAAmB3E,eACjEtzC,EAAcs4C,oBAAyB76C,KAAKo5C,aAEvC,sBAAK7xB,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAArC,UACN,cAAC,GAAD,CAAeoB,IAAK75B,KAAKu6C,eAAzB,SAA0Cpd,IAC1C,cAAC,GAAD,CAAgBtD,IAAK75B,KAAK06C,mBAAoBnK,iBAAkBvwC,KAAKwwC,kBACpEmI,WAAY34C,KAAKg5C,YAAaJ,iBAAkB54C,KAAKi5C,kBAAmBJ,QAAS74C,KAAKo5C,WAEtF0B,O,+BAxBH,OAAOpG,GAASG,Y,GA1CmBr4C,aCVhBu+C,I,4BADuB39C,EAApCyC,iBAAoCzC,EAAlB0C,e,8GAEDk7C,GACvB,MACsB,oBAAdA,KACLA,EAAUC,UAAUC,mB,0CAIGF,GAC1B,MACsB,oBAAdA,GACPpiC,OAAOoiC,GAAWG,SAAS,gC,uCAILH,GACvB,OACCD,EAAkBK,iBAAiBJ,IACnCD,EAAkBM,oBAAoBL,K,gCAIvBvkB,GAChB,OAAOiC,IAAM4iB,eAAe7kB,K,uCAGLA,GACvB,OAAOskB,EAAkBQ,UAAU9kB,IAAoC,kBAAjBA,EAAQp5B,O,6CAGjCo5B,GAC7B,OAAOskB,EAAkBQ,UAAU9kB,IAAoC,oBAAjBA,EAAQp5B,S,MClCjD,SAASm+C,GAAqB/kB,EAASglB,GACjDA,IACHA,EAAW,CAAE,aAAc,YAAa,WAAY,cAAc,QAAS,eAC5E,IAAK,IAAIt4C,EAAI,EAAGA,EAAIs4C,EAAUj8C,OAAQ2D,IACrCszB,EAAQhpB,iBAAiBguC,EAAUt4C,IAAI,SAAS+K,GAC/CA,EAAMixB,qBCIe/hC,EAAlByC,iB,IACe67C,G,kDACpB,WAAYv6C,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV7C,EAA6D6C,EAA7D7C,KAAMq9C,EAAuDx6C,EAAvDw6C,MAAOC,EAAgDz6C,EAAhDy6C,cAAe1gC,EAAiC/Z,EAAjC+Z,SAAU2gC,EAAuB16C,EAAvB06C,sBAF5B,OAIhB,EAAKC,oBADaj+C,IAAhB+9C,GAEwBA,EAC3B,EAAKG,uBAAyBF,EAC9B,EAAKr0B,MAAQlpB,EACb,EAAK09C,OAASL,EACd,EAAKM,mCAAoC,EAAKA,mCAAmC97C,KAAxC,gBACzC,EAAK+7C,kBAAoBhhC,EAAS,IAAI4jB,GAAK,EAAKmd,mCAAmC/gC,IAAW,KAC9F,EAAKihC,OAAS,EAAKA,OAAOh8C,KAAZ,gBACd,EAAKi8C,sBAAwB,EAAKA,sBAAsBj8C,KAA3B,gBAC7B,EAAK24B,MAAO,CAACujB,SAAQ,GACrB,EAAKjE,UAAYj3C,EAAM6qC,SACvB,EAAKsQ,aAAe5jB,IAAMC,YAC1B,EAAK8D,YAAc/D,IAAMC,YACzB,EAAK4jB,UAAW,EAjBC,E,+EAmBiBrhC,GAAU,IAAD,OAC3C,OAAO,WACNA,EAAS,CAACmhC,QAAQ,EAAKE,c,4CAGHhtC,GACjBA,IAAEA,EAAErQ,OAAOgP,OACfqB,EAAE4vB,iBAAiB5vB,EAAE4vB,kBACrB5vB,EAAE6vB,gBAAgB7vB,EAAE6vB,mB,0CAED,IAAD,OAClB,GAAIp/B,KAAK87C,eAAT,CACA,IAAMU,EAAa,IAAI1d,GAAK9+B,KAAKm8C,QACjBn8C,KAAKy8B,YAAYvD,QACzBzrB,iBAAiB,SAAS,SAAC8B,GAC/B,EAAKwsC,wBACP,EAAKK,sBAAsB7sC,GAC5BitC,EAAW9tB,gB,+BAWJ,IAAD,SACP1uB,KAAKq8C,SAAWr8C,KAAKu8C,SACrBv8C,KAAKs5B,SAAS,CAAC+iB,QAAQr8C,KAAKq8C,UAC5B,UAAAr8C,KAAKk8C,yBAAL,SAAwBxtB,UACxBnZ,YAAW,WACV,EAAK+mC,aAAapjB,QAAQmjB,QAAU,EAAKE,WACvC,K,+BAGH,IAAMZ,EAAQ,GACRp0B,EAAY,YAAYvnB,KAAK84B,MAAMujB,QAAQ,WAAW,IAK5D,OAJIr8C,KAAKg8C,OAGRh8C,KAAKg8C,OAAO5sC,SAAQ,SAAAqtC,GAAC,OAAEd,EAAMp7C,KAAKw6C,GAAkBQ,UAAUkB,GAAGA,EAAG,sBAA+BC,KAAK,OAAOC,EAAGF,GAAnC/jC,GAAWC,YAF1FgjC,EAAMp7C,KAAM,sBAA8Bm8C,KAAK,OAAOC,EAAE,oCAAjCjkC,GAAWC,SAG3B,wBAAO4O,UAAWA,EAAWsS,IAAK75B,KAAKy8B,YAAvC,UACN,uBAAMlV,UAAU,kBAAhB,UACD,uBAAOlqB,KAAK,WAAW6d,SAAU,aAAOmhC,QAASr8C,KAAK84B,MAAMujB,QAASv/C,KAAK,WAAW+8B,IAAK75B,KAAKs8C,eAC/F,sBAAM/0B,UAAU,iBAAhB,SACE,qBAAKq1B,MAAM,6BAA6Br1B,UAAU,OAAOs1B,QAAQ,YAAYC,cAAY,OAAOC,UAAU,QAA1G,SACCpB,SAIF,uBAAMp0B,UAAU,kBAAhB,UAAmCvnB,KAAKwnB,MAAOxnB,KAAKo4C,kB,8BA/BtD,OAAOp4C,KAAKu8C,U,aAEDj6C,GAAO,IAAD,EACjBtC,KAAKu8C,SAAWj6C,EAChBtC,KAAKs5B,SAAS,CAAC+iB,QAAQ/5C,IACvB,UAAAtC,KAAKk8C,yBAAL,SAAwBxtB,c,GA9CYlyB,aCL9BqD,GAAoCzC,EAApCyC,iBAAkBC,GAAkB1C,EAAlB0C,eACLk9C,G,kDACpB,WAAY77C,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVu8B,EAAkBv8B,EAAlBu8B,OAAQxiB,EAAU/Z,EAAV+Z,SAFE,OAGjB,EAAK+hC,eAAevkB,IAAMC,YACtBzd,GAASrb,GAAiB,YAC9B,EAAKq9C,gBAAkBhiC,EACnBwiB,GAAO79B,GAAiB,UAC5B,EAAKs9C,MAAQ,EAAKA,MAAMh9C,KAAX,gBACb,EAAKi9C,QAAU1f,EACf,EAAK2f,eAAiB,EAAKA,eAAel9C,KAApB,gBAEtB,EAAK+3B,aAAe,EAAKA,aAAa/3B,KAAlB,gBACpB,EAAKm9C,iBAAmB,EAAKA,iBAAiBn9C,KAAtB,gBACxB,EAAKo9C,iBAAmB,IAAIze,GAAK,EAAKwe,kBACtC,EAAKxkB,MAAM,CAAC0kB,WAAU,GAdL,E,oDA0BjBx9C,KAAKi9C,eAAe/jB,QAAQmjB,SAAQ,EACpCr8C,KAAKs5B,SAAS,CAACkkB,WAAU,M,uCAYzB5gD,QAAQmC,IAAI,kBACZ,IAAMy+C,GAAYx9C,KAAK84B,MAAM0kB,UAC7Bx9C,KAAKs5B,SAAS,CAACkkB,UAAUA,IACzBx9C,KAAKi9C,eAAe/jB,QAAQmjB,QAAQmB,EACpC5gD,QAAQmC,IAAI,kBAAkBy+C,GAC9Bx9C,KAAKk9C,oB,qCAOLl9C,KAAKu9C,iBAAiB7uB,Y,yCAGtB1uB,KAAKq9C,mB,+BAGL,IAAI91B,EAAW,yBACZvnB,KAAK84B,MAAM0kB,YACbj2B,GAAW,YACZ,IAAMk2B,EAAkBz9C,KAAKo9C,QAAQ71B,UAGrC,OAFGk2B,IACFl2B,GAAW,IAAF,OAAMk2B,IACR,qBAAKl2B,UAAWA,EAAWoQ,QAAS33B,KAAKk4B,aAAzC,SACP,cAAC,GAAD,CAAU2B,IAAK75B,KAAKi9C,eAAgB3+C,KAAM0B,KAAKo9C,QAAQ9+C,KAAMs9C,eAAe,Q,kCA/C7E,OAAO57C,KAAKo9C,QAAQM,c,6BAGpB,OAAO19C,KAAKo9C,U,4BAGZ,OAAOp9C,KAAKo9C,QAAQ96C,Q,gCAOpB,OAAOtC,KAAKi9C,eAAe/jB,QAAQmjB,S,aAEtB/5C,GACQ,mBAAXA,GACTxC,GAAe,QAAS,WACzBE,KAAKs5B,SAAS,CAACkkB,UAAUl7C,IACzBtC,KAAKi9C,eAAe/jB,QAAQmjB,QAAQ/5C,M,GArCY9F,aCD5CqD,GAAkBzC,EAAlByC,iBACe89C,G,kDACpB,WAAYx8C,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVy8C,EAAmBz8C,EAAnBy8C,kBAFU,OAGbA,GAAkB/9C,GAAiB,qBACvC,EAAKg+C,mBAAmBD,EACxB,EAAKE,iBAAmB,EAAKA,iBAAiB39C,KAAtB,gBACxB,EAAK49C,WAAa,EAAKA,WAAW59C,KAAhB,gBAClB,EAAKg9C,MAAQ,EAAKA,MAAMh9C,KAAX,gBACb,EAAK24B,MAAQ,CAACnvB,QAAQ,IARL,E,iEAsBjB,OAAO3J,KAAK84B,MAAMnvB,U,iCAERq0C,GAAY,IAAD,OACfr0C,EAAU3J,KAAK84B,MAAMnvB,QACrBs0C,EAAyB,IAAI/wB,IACnC8wB,EAAW5uC,SAAQ,SAAC8uC,GACnBD,EAAuBC,EAAUR,aAAaQ,KAE/C,IAAMC,EAA+B,GACrCx0C,EAAQyF,SAAQ,SAACgvC,GAChB,IAAMC,EAA0CD,EAA6BV,YAC7E,GAAGO,EAAuB7kC,IAAIilC,GAA9B,CACC,IAAM3gB,EAASugB,EAAuBnkC,IAAIukC,GAC1CL,EAAWt9C,OAAOs9C,EAAWl7C,QAAQ46B,GAAS,QAG/CygB,EAA8B59C,KAAK69C,MAEpC,IAAI,IAAIj7C,EAAE,EAAGA,EAAEg7C,EAA8B3+C,OAAQ2D,IAAI,CACxD,IAAMm7C,EAA+BH,EAA8Bh7C,GACnEwG,EAAQjJ,OAAOiJ,EAAQ7G,QAAQw7C,GAA+B,GAE/DN,EAAW5uC,SAAQ,SAAC8uC,GACnB,IAAMK,EAAwB,cAAC,GAAD,CAAkD1kB,IAAKnB,IAAMC,YAAa+E,OAAQwgB,EAAWhjC,SAAU,EAAK2iC,oBAAjFK,EAAUR,aACnE/zC,EAAQpJ,KAAKg+C,MAEdv+C,KAAKs5B,SAAS,CAAC3vB,QAAQA,M,8BAGvB3J,KAAK84B,MAAMnvB,QAAQyF,SAAQ,SAACsI,GAC3BA,EAAMmiB,IAAIX,QAAQikB,a,yCAInB,IAAMqB,EAAc,GAOpB,OANAx+C,KAAK84B,MAAMnvB,QAAQyF,SAAQ,SAACsI,GACvBA,EAAMmiB,IAAIX,UACdxhB,EAAQA,EAAMmiB,IAAIX,SACTskB,WACRgB,EAAcj+C,KAAKmX,EAAMpV,UAEpBk8C,I,+BAGP,OAAQ,qBAAKj3B,UAAU,kBAAf,SACN,qBAAKA,UAAU,UAAf,SACCvnB,KAAK84B,MAAMnvB,c,gCAxDd,IADA,IAAMA,EAAU3J,KAAK84B,MAAMnvB,QACnBxG,EAAE,EAAGA,EAAEwG,EAAQnK,OAAQ2D,IAAI,CAClC,IAAIuU,EAAQ/N,EAAQxG,GACpB,GAAIuU,EAAMmiB,IAAIX,UACdxhB,EAAQA,EAAMmiB,IAAIX,SACTskB,UACR,OAAO,EAET,OAAO,M,GApBmChhD,aCLrCqD,GAAkBzC,EAAlByC,iBACc4+C,G,WACpB,WAAYt9C,GAAO,wBACZ7C,EAAwB6C,EAAxB7C,KAAMgE,EAAkBnB,EAAlBmB,MAAOilB,EAAWpmB,EAAXomB,UACfjpB,GAAKuB,GAAiB,aACfhC,IAARyE,GAAkBzC,GAAiB,SACtCG,KAAKynB,WAAaF,EAClBvnB,KAAKwnB,MAAQlpB,EACb0B,KAAK0+C,OAASp8C,EACdtC,KAAK2+C,aAA+B,kBAATr8C,EAAkBA,EAAM9D,KAAKogD,UAAUt8C,G,kDAGlE,OAAOtC,KAAK0+C,S,kCAGZ,OAAO1+C,KAAK2+C,e,gCAGZ,OAAO3+C,KAAKynB,a,2BAGZ,OAAOznB,KAAKwnB,U,KCbP3nB,GAAkBzC,EAAlByC,iBACcg/C,G,kDACpB,WAAY19C,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV29C,EAA2B39C,EAA3B29C,wBAFU,OAGjB,EAAKC,+BAA+BD,EACpC,EAAKE,gBAAkBtmB,IAAMC,YAC7B,EAAK4hB,eAAiB7hB,IAAMC,YAC5B,EAAKF,SAAWC,IAAMC,YACtB,EAAKsmB,uCAAyC,EAAKA,uCAAuC9+C,KAA5C,gBAC9C,EAAK++C,uBAAyB,EAAKA,uBAAuB/+C,KAA5B,gBAC9B,EAAKg/C,qBAAqB,EAAKA,qBAAqBh/C,KAA1B,gBAC1B,EAAKi/C,qBAAuB,EAAKA,qBAAqBj/C,KAA1B,gBAC5B,EAAKk/C,eAAiB,EAAKA,eAAel/C,KAApB,gBACtB,EAAKo4C,cAAiB,KACtB,EAAKL,kBAAoB,KACzB,EAAKzd,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKm/C,YAAc,EAAKA,YAAYn/C,KAAjB,gBACnB,EAAKg9C,MAAQ,EAAKA,MAAMh9C,KAAX,gBACb,EAAKo4C,cAAiB,KACtB,EAAKzf,MAAQ,CAACoE,QAAQ,GAAItB,SAAQ,GAClC,EAAK6e,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvf,SAAUiC,KAAK,EAAKA,OApBpE,E,iFAsBmB6kB,GACpC,IAAMC,EAAaD,EAA8BC,WACjD,QAAgB3hD,IAAb2hD,GAAqC,OAAbA,EAA3B,CACA,IAAM3hC,EAAO2hC,EAAW,GAAI1hC,EAAI0hC,EAAW,GACrCC,OAAiB5hD,IAAPggB,GAAyB,OAAPA,EAC5B6hC,OAAa7hD,IAALigB,GAAqB,OAALA,EACP9d,KAAKg/C,gBAAgB9lB,QAAQymB,qBAClD31C,KAAI,SAAA41C,GAAc,OAAEA,EAAe/lB,IAAIX,WACvC9pB,SAAQ,SAAAwwC,GACR,IAAMt9C,EAAOs9C,EAAet9C,MACtBu9C,EAAyCJ,GAAU5hC,GAAMvb,EAAMub,MAAMA,GAAMvb,EAAMwb,GACjFgiC,EAAqCJ,GAAQ5hC,GAAIxb,EAAMub,MAAMC,GAAIxb,EAAMwb,GACvEiiC,EAA6CN,GAASC,GAAQ5hC,GAAIxb,EAAMwb,IAAID,GAAMvb,EAAMub,KAC9F+hC,EAAepC,UAAWqC,GACxBC,GACAC,KAEJ//C,KAAK++C,oC,6BAGL/+C,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKy6C,mBAAmB7d,WACxB58B,KAAKu4C,cAAcoC,OAAO36C,Q,6BAG1BA,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKu4C,cAAcE,U,kCAER1C,GACX,IAAMiK,EAAoBhgD,KAAKg/C,gBAAgB9lB,QAAQ4kB,mBACvD,GAAGkC,EAAkBxgD,OAAO,EAAE,OAAOu2C,EAErC,IADA,IAAMkK,EAAc,GACZ98C,EAAE,EAAGA,EAAE4yC,EAAWv2C,OAAQ2D,IAGjC,IAFA,IAAM0J,EAAOkpC,EAAW5yC,GAClBgb,EAAQtR,EAAKsR,MACXq5B,EAAE,EAAGA,EAAEwI,EAAkBxgD,OAAQg4C,IAAI,CAC5C,IAAM0I,EAAmBF,EAAkBxI,GAC3C,GAAGr5B,GAAO+hC,EAAiBriC,MAAMM,GAAO+hC,EAAiBpiC,GACzD,CACCmiC,EAAY1/C,KAAKsM,GACjB,OAIH,OAAOozC,I,8BAMPjgD,KAAKg/C,gBAAgB9lB,QAAQikB,U,sCAEd76C,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAKu6C,eAAerhB,QAAQ0hB,gBAAgBt4C,K,8BAKsB,IAA7DyzC,EAA4D,EAA5DA,WAAY3sB,EAAgD,EAAhDA,wBAAyB7K,EAAuB,EAAvBA,sBACtC6K,GAAwBvpB,GAAiB,2BACzC0e,GAAsB1e,GAAiB,yBAC3CG,KAAKo/C,qBAAqBrJ,EAAY3sB,EAAyB7K,K,2CAE3Cw3B,EAAY3sB,EAAyB7K,GAAuB,IAAD,OACzE4hC,EAAoBpK,EAAW9+B,MAAK,SAASmK,EAAOC,GAAO,OAAOD,EAAMjD,MAAQkD,EAAMlD,SACtFiiC,EAA+Dh3B,EAAwBH,sBAEvFo3B,EAAgB,GAClBC,EAAsC,KACpCC,EAAkB,GACxBJ,EAAkB/wC,SAAQ,SAACvC,GAC1B,KAAGA,EAAKsR,OAAO,GAAf,CACA,IAAIqiC,GAAY,EACZr9C,EAAE,EACN,IAAIA,EAAE,EAAGA,EAAEi9C,EAA6D5gD,OAAQ2D,IAAI,CACnF,IAAMs9C,EAAgBL,EAA6Dj9C,GACnF,KAAGs9C,EAAc5iC,MAAMhR,EAAKsR,OAUvB,MATJ,GAAGsiC,EAAc3iC,IAAIjR,EAAKsR,MAAM,CAC5BkiC,EAAev9C,QAAQ29C,GAAe,GACxCJ,EAAe9/C,KAAKkgD,GAErBD,GAAW,EACX,MAEDF,EAAsCG,EAKxC,IAAID,EAAW,CACd,IAAME,EAAkBv9C,EAAEi9C,EAA6D5gD,OACtF4gD,EAA6Dj9C,GAC7D,KACKw9C,EAAQ,EAAK1B,uCAAuCqB,EAAqCzzC,EAAKsR,MAAOuiC,GACrGE,EAAkB,0BACxB,GAAGL,EAAkBz9C,QAAQ89C,IAAqB,EAAE,OACpDL,EAAkBhgD,KAAKqgD,GACvBP,EAAe9/C,KAAKogD,QAGtB3gD,KAAKq/C,eAAegB,EAAgB9hC,EAAsB3a,eAAgB2a,EAAsB1a,kB,6DAE1Dg9C,EAAuB1iC,EAAOuiC,GACpE,IAAMI,EAA6B9gD,KAAKk/C,uBAAuB/gC,GAC3DN,EAAOijC,EACRjjC,EAAK,IACPA,EAAO,GACkB,MAAvBgjC,GACCA,EAAsB/iC,GAAGgjC,IAC3BjjC,EAAOgjC,EAAsB/iC,IAE/B,IAAIA,EAAK9d,KAAKm/C,qBAAqBhhC,GAKnC,OAJuB,OAApBuiC,GACCA,EAAkB7iC,KAAKC,IACzBA,EAAK4iC,EAAkB7iC,MAElB,CAACA,KAAKA,EAAMC,GAAGA,K,6CAEAK,GACtB,OAAOA,EAAOA,EAAM,M,2CAEAA,GAEpB,OAAiBA,EAAM,IADVA,EAAM,M,8FAMLkiC,EAAgBz8C,EAAgBC,GAC9C,IAAMq5B,EAAUmjB,EAAer2C,KAAI,SAAC+2C,GAAD,OAAiB,IAAItC,GAAO,CAACngD,KAAK,GAAD,OAAIsF,GAAJ,OAAqB2U,GAAiBwoC,EAAcljC,OAApD,OAA4Dha,EAA5D,eAAiFD,GAAjF,OAAkG2U,GAAiBwoC,EAAcjjC,KAAjI,OAAuIja,GAC1MvB,MAAMy+C,OACP/gD,KAAKg/C,gBAAgB9lB,QAAQ6kB,WAAW7gB,K,+BAGxC,IAAI3V,EAAY,+BAGhB,OAFGvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YACJ,sBAAKA,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAArC,UACN,cAAC,GAAD,CAAeoB,IAAK75B,KAAKu6C,eAAgBpd,MAAM,qBAC/C,cAAC,GAAD,CAAgBtD,IAAK75B,KAAKg/C,gBAAiBpB,kBAAmB59C,KAAK++C,sC,gCA7FrE,OAAO/+C,KAAKg/C,gBAAgB9lB,QAAQ8nB,Y,+BAUpC,OAAOtM,GAASI,4B,GAjFiCt4C,aCT3CqD,GAAoCzC,EAApCyC,iBACaohD,IADuB7jD,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACX+/C,EAAoE//C,EAApE+/C,QAASpwB,EAA2D3vB,EAA3D2vB,YAAanU,EAA8Cxb,EAA9Cwb,KAAMwkC,EAAwChgD,EAAxCggD,UAAWC,EAA6BjgD,EAA7BigD,SAAUzpB,EAAmBx2B,EAAnBw2B,QAAS0pB,EAAUlgD,EAAVkgD,SAC7DvwB,GAAYjxB,GAAiB,oBACvBhC,IAAP8e,GAAyB,OAAPA,GAAY9c,GAAiB,aACnChC,IAAZsjD,GAAmC,OAAZA,GAAiBthD,GAAiB,aAC5DG,KAAK+wB,aAAeD,EACpB9wB,KAAK+8B,SAAWpF,EAChB33B,KAAKshD,UAAYD,EACjBrhD,KAAKuhD,SAAWL,EAChBlhD,KAAKye,MAAQ9B,EACb3c,KAAKwhD,UAAYJ,EACjBphD,KAAKyhD,WAAaN,E,sDAkBlBnhD,KAAK+8B,UAAU/8B,KAAK+8B,a,8BAfpB,OAAO/8B,KAAKuhD,W,2BAGZ,OAAOvhD,KAAKye,Q,gCAGZ,OAAOze,KAAKyhD,a,kCAGZ,OAAOzhD,KAAK+wB,e,+BAGZ,OAAO/wB,KAAKwhD,Y,+BAMZ,OAAOxhD,KAAKshD,c,MC3BOI,I,yDACpB,WAAYvgD,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV29C,EAA2B39C,EAA3B29C,wBAFU,OAGjB,EAAKrmB,SAAWC,IAAMC,YACtB,EAAKomB,+BAA+BD,EACpC,EAAKE,gBAAgBtmB,IAAMC,YAC3B,EAAK4hB,eAAiB7hB,IAAMC,YAC5B,EAAK+O,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAKs6B,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKm/C,YAAc,EAAKA,YAAYn/C,KAAjB,gBACnB,EAAKg9C,MAAQ,EAAKA,MAAMh9C,KAAX,gBACb,EAAKk/C,eAAgB,EAAKA,eAAel/C,KAApB,gBACrB,EAAKo4C,cAAiB,KACtB,EAAKzf,MAAQ,CAACoE,QAAQ,GAAItB,SAAQ,GAClC,EAAK6e,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvf,SAAUiC,KAAK,EAAKA,OAfpE,E,mDAkBjB16B,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKy6C,mBAAmB7d,a,6BAGxB58B,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKu4C,cAAcE,U,kCAER1C,GACX,IAAM4L,EAAqB3hD,KAAKg/C,gBAAgB9lB,QAAQ4kB,mBACxD,OAAG6D,EAAmBniD,OAAO,EAASu2C,EAC/BA,EAAW1zC,QAAO,SAAAwK,GAAI,OAAE80C,EAAmB7+C,QAAQ+J,EAAKuR,SAAS,O,mCAGxEpe,KAAKg/C,gBAAgB9lB,QAAQymB,qBAAqBvwC,SAAQ,SAAAwwC,GAEzD,IACMgC,GAFNhC,EAAiBA,EAAe/lB,IAAIX,SACQwE,OACJp7B,QAAQT,EAAWC,UAC3D89C,EAAepC,UAAUoE,KAE1B5hD,KAAK++C,mC,8BAGL/+C,KAAKg/C,gBAAgB9lB,QAAQikB,U,sCAEd76C,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAKu6C,eAAerhB,QAAQ0hB,gBAAgBt4C,K,yCASrBtC,KAAKg/C,gBAAgB9lB,QAAQymB,qBAClD31C,KAAI,SAAA41C,GAAc,OAAEA,EAAe/lB,IAAIX,WACvC9pB,SAAQ,SAAAwwC,GACR,IAAMt+C,EAAYs+C,EAAet9C,MACjCs9C,EAAepC,UAAWl8C,IAAaO,EAAWC,e,2BAGhDi0C,GAEJ,IADA,IAAMC,EAAuB,GACrB7yC,EAAE,EAAGA,EAAE4yC,EAAWv2C,OAAQ2D,IAAI,CACrC,IAAM0J,EAAOkpC,EAAW5yC,GACrB6yC,EAAqBlzC,QAAQ+J,EAAKuR,QAAQ,GAC5C43B,EAAqBz1C,KAAKsM,EAAKuR,QAEjCpe,KAAKq/C,eAAerJ,K,qCAENA,GACd,IAAM9Y,EAAU8Y,EAAqBhsC,KAAI,SAAC1I,GAIzC,OAHe,IAAIm9C,GAAO,CAACngD,KAAK,GAAD,OAAIuD,EAAWu0C,eAAe90C,IAC7DgB,MAAMhB,EACNimB,UAAU1lB,EAAWyB,WAAWhC,QAGjCtB,KAAKg/C,gBAAgB9lB,QAAQ6kB,WAAW7gB,K,+BAGxC,IAAI3V,EAAW,qBAGf,OAFGvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YACJ,sBAAKA,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAArC,UACN,cAAC,GAAD,CAAeoB,IAAK75B,KAAKu6C,eAAgBpd,MAAM,iBAC/C,cAAC,GAAD,CAAgBtD,IAAK75B,KAAKg/C,gBAAiBpB,kBAAmB59C,KAAK++C,sC,+BArCrE,OAAOrK,GAASK,gB,gCAGhB,OAAO/0C,KAAKg/C,gBAAgB9lB,QAAQ8nB,c,GApDIxkD,cCDrBqlD,I,yDACpB,WAAY1gD,GAAO,IAAD,sBACjB,cAAMA,GACkDA,EAAjD2gD,uBAFU,IAEchD,EAAyB39C,EAAzB29C,wBAFd,OAGjB,EAAKC,+BAA+BD,EACpC,EAAKE,gBAAgBtmB,IAAMC,YAC3B,EAAK4hB,eAAiB7hB,IAAMC,YAC5B,EAAKF,SAAWC,IAAMC,YACtB,EAAK2E,SAAW,GAChB,EAAKoK,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAKk/C,eAAiB,EAAKA,eAAel/C,KAApB,gBACtB,EAAKo4C,cAAiB,KACtB,EAAK9d,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKm/C,YAAc,EAAKA,YAAYn/C,KAAjB,gBACnB,EAAKg9C,MAAQ,EAAKA,MAAMh9C,KAAX,gBACb,EAAKs6C,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvf,SAAUiC,KAAK,EAAKA,OACrF,EAAK5B,MAAQ,CAACoE,QAAQ,GAAItB,SAAQ,GAhBjB,E,iFAkBmB2jB,GACpC,IAAMrtC,EAAYqtC,EAA8BrtC,UAChD,QAAerU,IAAZqU,GAAmC,OAAZA,EAA1B,CACuBlS,KAAKg/C,gBAAgB9lB,QAAQymB,qBAClD31C,KAAI,SAAA41C,GAAc,OAAEA,EAAe/lB,IAAIX,WACvC9pB,SAAQ,SAAAwwC,GACR,IAAMt9C,EAAOs9C,EAAet9C,MAC5Bs9C,EAAepC,UAAYl7C,IAAQ4P,KAErClS,KAAK++C,oC,2BAEDgD,GACJ/hD,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKy6C,mBAAmB7d,WACxB58B,KAAKu4C,cAAcoC,OAAO36C,Q,6BAG1BA,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKu4C,cAAcE,U,kCAER1C,GACX,IAAMiM,EAAmBhiD,KAAKg/C,gBAAgB9lB,QAAQ4kB,mBACtD,OAAGkE,EAAiBxiD,OAAO,EAASu2C,EAC7BA,EAAW1zC,QAAO,SAAAwK,GAAI,OAAEm1C,EAAiBl/C,QAAQ+J,EAAKqF,YAAY,O,8BAGzElS,KAAKg/C,gBAAgB9lB,QAAQikB,U,sCAEd76C,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAKu6C,eAAerhB,QAAQ0hB,gBAAgBt4C,K,2BAQxCyzC,GAEJ,IADA,IAAMkM,EAAqB,GACnB9+C,EAAE,EAAGA,EAAE4yC,EAAWv2C,OAAQ2D,IAAI,CACrC,IAAM0J,EAAOkpC,EAAW5yC,GACrB8+C,EAAmBn/C,QAAQ+J,EAAKqF,WAAW,GAC7C+vC,EAAmB1hD,KAAKsM,EAAKqF,WAE/B+vC,EAAmBhrC,OACnBjX,KAAKq/C,eAAe4C,K,qCAENA,GACd,IAAM/kB,EAAU+kB,EAAmBj4C,KAAI,SAACkI,GAAD,OAAa,IAAIusC,GAAO,CAACngD,KAAK,GAAD,OAAI4T,EAAJ,YAAkBA,EAAU,EAAE,WAAW,WAC5G5P,MAAM4P,OACPlS,KAAKg/C,gBAAgB9lB,QAAQ6kB,WAAW7gB,K,+BAGxC,IAAI3V,EAAY,uBAGhB,OAFGvnB,KAAK84B,MAAM8C,UACbrU,GAAY,YACL,sBAAKA,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAArC,UACN,cAAC,GAAD,CAAeoB,IAAK75B,KAAKu6C,eAAgBpd,MAAM,aAC/C,cAAC,GAAD,CAAgBtD,IAAO75B,KAAKg/C,gBAAiB9hB,QAASl9B,KAAKs9B,SAAUsgB,kBAAmB59C,KAAK++C,sC,+BA1B/F,OAAOrK,GAASM,kB,gCAGhB,OAAOh1C,KAAKg/C,gBAAgB9lB,QAAQ8nB,c,GAxDMxkD,cCEvB0lD,I,yDACpB,WAAY/gD,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV29C,EAA2B39C,EAA3B29C,wBAFU,OAGjB,EAAKC,+BAA+BD,EACpC,EAAKE,gBAAgBtmB,IAAMC,YAC3B,EAAK4hB,eAAiB7hB,IAAMC,YAC5B,EAAKF,SAAWC,IAAMC,YACtB,EAAK+O,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAKs6B,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKgiD,qCAAsC,EAAKA,qCAAqChiD,KAA1C,gBAC3C,EAAKiiD,8BAA+B,EAAKA,8BAA8BjiD,KAAnC,gBACpC,EAAKkiD,qBAAsB,EAAKA,qBAAqBliD,KAA1B,gBAC3B,EAAKm/C,YAAc,EAAKA,YAAYn/C,KAAjB,gBACnB,EAAKg9C,MAAQ,EAAKA,MAAMh9C,KAAX,gBACb,EAAKk/C,eAAgB,EAAKA,eAAel/C,KAApB,gBACrB,EAAKmiD,kBAAkB,GACvB,EAAKC,sBAAwB,IAAIr1B,IACjC,EAAKqrB,cAAiB,KACtB,EAAKzf,MAAQ,CAACoE,QAAQ,GAAItB,SAAQ,GAClC,EAAK6e,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvf,SAAUiC,KAAK,EAAKA,OACrF,EAAK8nB,4BAA8B,IAAI1jB,GAAKggB,GArB3B,E,mDAwBjB9+C,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKy6C,mBAAmB7d,WACxB58B,KAAKu4C,cAAcoC,OAAO36C,Q,6BAG1BA,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKu4C,cAAcE,U,kCAER1C,GACXn5C,QAAQmC,IAAI,mBACZ,IAAM0jD,EAAmBziD,KAAKg/C,gBAAgB9lB,QAAQ4kB,mBACtD,OAAG2E,EAAiBjjD,OAAO,EACnBu2C,EACDA,EAAW1zC,QAAO,SAAAqtB,GAAmB,IAAD,gBACf+yB,GADe,IAC1C,IAAI,EAAJ,qBAA4C,CAAC,IAArCC,EAAoC,QAE3C,GADA9lD,QAAQmC,IAAI,qBACmBlB,IAA5B6xB,EAAiBpc,UACU,OAA5Boc,EAAiBpc,SAClB,OAAO,EAER,GADA1W,QAAQmC,IAAI2wB,EAAiBpc,UAC1Boc,EAAiBpc,SAASxQ,QAAQ4/C,GAAiB,EACrD,OAAO,GARiC,8BAU1C,OAAO,O,8BAIR1iD,KAAKg/C,gBAAgB9lB,QAAQikB,U,2DAEOoC,M,sCAKrBj9C,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAKu6C,eAAerhB,QAAQ0hB,gBAAgBt4C,K,8BAQ5B,IAAX2tB,EAAU,EAAVA,SACLjwB,KAAK43B,UAAY3H,EACjBjwB,KAAK2iD,4BAA8B9nC,GAAuBmC,SAAShd,KAClEiwB,EAAU,cAAejwB,KAAKq/C,kB,oDAEFuD,GAC7B,IAAMH,EAAmBziD,KAAKg/C,gBAAgB9lB,QAAQ4kB,mBACtD99C,KAAKqiD,qBAAqBI,GAC1BziD,KAAK++C,iCACLniD,QAAQmC,IAAI,oC,2CAEQ0jD,GAAkB,IAAD,SACrCziD,KAAKsiD,kBAAoBG,EACzB,UAAAziD,KAAK43B,UAAUjI,mBAAf,SAA4BvgB,SAAQ,SAACygB,GACrB,EAAK0yB,sBAAsBzoC,IAAI+V,EAAQrP,IAC/Cg9B,UAAY,EAAK8E,kBAAkBx/C,QAAQ+sB,IAAU,O,uCAG7C,IAAD,OAEf,GADA7vB,KAAKuiD,sBAAsBpF,QACvBn9C,KAAK43B,UAAUjI,YAAnB,CACA,IAAMuN,EAAUl9B,KAAK43B,UAAUjI,YAAY3lB,KAAI,SAAC6lB,GAC/C,IAAM6N,EAAS,IAAI+gB,GAAO,CACzBngD,KAAKuxB,EAAQ/yB,KACbwF,MAAMutB,IAGP,OADA,EAAK0yB,sBAAsB1oC,IAAIgW,EAAQrP,GAAIkd,GACpCA,KAER19B,KAAKg/C,gBAAgB9lB,QAAQ6kB,WAAW7gB,M,+BAGxC,IAAI3V,EAAW,wBAGf,OAFGvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YACJ,sBAAKA,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAArC,UACN,cAAC,GAAD,CAAeoB,IAAK75B,KAAKu6C,eAAgBpd,MAAM,aAC/C,cAAC,GAAD,CAAgBtD,IAAK75B,KAAKg/C,gBAAiBpB,kBAAmB59C,KAAKoiD,qC,+BA1CrE,OAAO1N,GAASiB,kB,gCAGhB,OAAO31C,KAAKg/C,gBAAgB9lB,QAAQ8nB,c,GApEMxkD,cCNpCqD,I,OAAqBzC,EAArByC,kBACagjD,G,kDACjB,WAAY1hD,GAAQ,IAAD,sBACf,cAAMA,GADS,IAEP2hD,EAAkB3hD,EAAlB2hD,cAFO,OAGVA,GAAejjD,GAAiB,iBACrC,EAAKkjD,eAAiBD,EACtB,EAAKznB,YAAc,EAAKA,YAAYl7B,KAAjB,gBACnB,EAAKkmC,iBAAmB,EAAKA,iBAAiBlmC,KAAtB,gBACxB,EAAKmmC,gBAAkB,EAAKA,gBAAgBnmC,KAArB,gBACvB,EAAKomC,eAAiB,EAAKA,eAAepmC,KAApB,gBACtB,EAAKs4B,SAAWC,IAAMC,YACtB,EAAKqqB,eAAiB,KACtB,EAAKC,oBAAsB,KAC3B,EAAKnqB,MAAQ,CACTttB,SAAU,CAAEX,EAAG,EAAGC,EAAG,GACrBo4C,WAAW,GAdA,E,wDAoBP13C,GACRxL,KAAKs5B,SAAS,CAAE9tB,SAAUA,M,uCAKb+D,EAAG4zC,GACnBA,IACF5zC,EAAEA,EAAE46B,QAAQ,IACP,IAAM1T,EAAUz2B,KAAKy4B,SAASS,QAC9Bl5B,KAAKgjD,eAAiB,CAAEn4C,EAAG4rB,EAAQyS,WAAYzS,EAAQ2C,YAAY,EAAItuB,EAAG2rB,EAAQ6S,UAAW7S,EAAQ4C,aAAa,GAClHr5B,KAAKijD,oBAAsB,CAAEp4C,EAAG0E,EAAEqvB,QAAS9zB,EAAGyE,EAAEsvB,SAChD7+B,KAAKs5B,SAAS,CAAE4pB,WAAW,M,sCAEf3zC,EAAG4zC,GAClBA,IACF5zC,EAAEA,EAAE46B,QAAQ,IACP,IAAMiZ,EAAK7zC,EAAEqvB,QAAU5+B,KAAKijD,oBAAoBp4C,EAC1Cw4C,EAAK9zC,EAAEsvB,QAAU7+B,KAAKijD,oBAAoBn4C,EAChD9K,KAAK+iD,eAAeK,EAAIC,K,qCAEb9zC,GACXvP,KAAKs5B,SAAS,CAAE4pB,WAAW,M,+BAG3B,IAAM13C,EAAWxL,KAAK84B,MAAMttB,SACtB+b,EAAY,UAAYvnB,KAAK84B,MAAMoqB,UAAY,UAAY,IACjE,OAAQ,qBAAK37B,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAAUkC,YAAa36B,KAAKsjD,iBACrEC,UAAWvjD,KAAKwjD,eAAgBxpB,aAAch6B,KAAKyjD,kBACnD3pB,MAAO,CAAEhD,IAAKtrB,EAASV,EAAGmsB,KAAKzrB,EAASX,O,0CAG5C7K,KAAKgrC,oBAAsB,IAAI9L,GAAmB,CAC9CzI,QAASz2B,KAAKy4B,SAASS,QACvBmG,QAASr/B,KAAKqmC,iBACd/G,OAAQt/B,KAAKsmC,gBACb/G,MAAMv/B,KAAKumC,eACpBpH,iBAAgB,EAChBC,gBAAe,M,8BAxChB,OAAOp/B,KAAKy4B,SAASS,U,oCAMf,OAAOl5B,KAAKgjD,mB,GAzBsBxmD,aCAlCqD,I,OAAqBzC,EAArByC,kBACa6jD,G,kDACjB,WAAYviD,GAAQ,IAAD,sBACf,cAAMA,GADS,IAEP4uB,EAAoD5uB,EAApD4uB,IAAKC,EAA+C7uB,EAA/C6uB,IAAK2zB,EAA0CxiD,EAA1CwiD,QAASC,EAAiCziD,EAAjCyiD,eAAgBC,EAAiB1iD,EAAjB0iD,aAF5B,OAGf,EAAKC,gBAAkBF,OACX/lD,IAARkyB,GAAmBlwB,GAAiB,YAC5BhC,IAARmyB,GAAmBnwB,GAAiB,YACxBhC,IAAZ8lD,GAAuB9jD,GAAiB,WAC5C,EAAKkkD,KAAOh0B,EACZ,EAAKi0B,KAAOh0B,EACZ,EAAKi0B,SAAWN,EAChB,EAAKO,gBAAgBL,EAC3B,EAAKM,cAAgBzrB,IAAMC,YACrB,EAAKwN,OAASzN,IAAMC,YAC1B,EAAKyrB,SAAW,EAAKA,SAASjkD,KAAd,gBACV,EAAKkkD,gBAAkB,EAAKA,gBAAgBlkD,KAArB,gBACvB,EAAKmkD,mBAAqB,EAAKA,mBAAmBnkD,KAAxB,gBAC1B,EAAKokD,OAAS,EAAKA,OAAOpkD,KAAZ,gBACd,EAAKqkD,OAAS,EAAKA,OAAOrkD,KAAZ,gBACd,EAAKskD,4BAA8B,EAAKA,4BAA4BtkD,KAAjC,gBACnC,EAAKukD,8BAAgC,EAAKA,8BAA8BvkD,KAAnC,gBACrC,EAAKwkD,4BAA8B,EAAKA,4BAA4BxkD,KAAjC,gBACnC,EAAKykD,oBAAsB,EAAKA,oBAAoBzkD,KAAzB,gBArBZ,E,+DA0BAijD,EAAIC,GACnBrjD,KAAKykD,4BAA4BrB,EAAIC,K,kDAEbD,EAAIC,GAC5B,IAAMwB,EAAe7kD,KAAKmkD,cAAcjrB,QAClC4rB,EAAQ9kD,KAAKmmC,OAAOjN,QACpB+Q,EAAgB4a,EAAa5a,cACzC,GAAGjqC,KAAKkkD,cAAc,CACrB,IAAIa,EAAO9a,EAAcp/B,EAAIu4C,EACvB4B,EAAaF,EAAM1rB,YAKzB,OAJI2rB,EAAO,EAAGA,EAAO,EACZA,EAAOD,EAAM1rB,cAAa2rB,EAAOC,GAC1CH,EAAaxpB,YAAY,CAAExwB,EAAGk6C,EAAMj6C,EAAG,SACvC9K,KAAK0kD,8BAA8BK,EAAMC,GAGpC,IAAIC,EAAOhb,EAAcn/B,EAAIu4C,EACvB6B,EAAcJ,EAAMzrB,aACtB4rB,EAAO,EAAGA,EAAO,EACZA,EAAOH,EAAMzrB,eAAc4rB,EAAOC,GAC3CL,EAAaxpB,YAAY,CAAExwB,EAAG,EAAGC,EAAGm6C,IACpCjlD,KAAK0kD,8BAA8BO,EAAMC,K,6BAEzC5iD,GACNtC,KAAK+jD,KAAOzhD,EACZtC,KAAKqkD,gBAAgBrkD,KAAK0+C,QAC1B1+C,KAAK2kD,4BAA4B3kD,KAAK0+C,U,6BAEhCp8C,GACNtC,KAAKgkD,KAAO1hD,EACZtC,KAAKqkD,gBAAgBrkD,KAAK0+C,QAC1B1+C,KAAK2kD,4BAA4B3kD,KAAK0+C,U,4CAGhC1+C,KAAK2kD,4BAA4B3kD,KAAKikD,Y,+BAEpC3hD,GACRtC,KAAK2kD,4BAA4BriD,K,oDAED6iD,EAAYC,GAC5CplD,KAAKqkD,gBAAgBc,GACfnlD,KAAK8jD,gBAAgB9jD,KAAK0+C,U,sCAEjByG,GACf,IAAML,EAAQ9kD,KAAKmmC,OAAOjN,QACpBksB,EAAcplD,KAAKkkD,cAAcY,EAAM1rB,YAAY0rB,EAAMzrB,aACzDr5B,KAAK0+C,OAAS1+C,KAAKgkD,MAAShkD,KAAKgkD,KAAOhkD,KAAK+jD,OAASqB,EAAcD,GAAcC,I,kDAE1D9iD,GAC9B,GAAGtC,KAAKkkD,cAAR,CACC,IAAMc,EAAahlD,KAAKmmC,OAAOjN,QAAQE,YACjC2rB,EAAOC,GAAchlD,KAAKgkD,KAAO1hD,GAAS0iD,GAAchlD,KAAKgkD,KAAOhkD,KAAK+jD,MAC1D/jD,KAAKmkD,cAAcjrB,QAC3BmC,YAAY,CAAExwB,EAAGk6C,EAAMj6C,EAAG,QAJxC,CAOM,IAAMo6C,EAAcllD,KAAKmmC,OAAOjN,QAAQG,aAClC4rB,EAAOC,GAAellD,KAAKgkD,KAAO1hD,GAAS4iD,GAAellD,KAAKgkD,KAAOhkD,KAAK+jD,MAC5D/jD,KAAKmkD,cAAcjrB,QAC3BmC,YAAY,CAAExwB,EAAG,EAAGC,EAAGm6C,O,0CAGpCjlD,KAAK2kD,4BAA4B3kD,KAAKikD,Y,+BAG5C,IAAI18B,EAAY,WAAWvnB,KAAKkkD,cAAc,cAAc,aACtD,OACI,qBAAK38B,UAAWA,EAAhB,SACI,qBAAKA,UAAU,QAAQsS,IAAK75B,KAAKmmC,OAAjC,SACI,cAAC,GAAD,CAActM,IAAK75B,KAAKmkD,cAAerB,cAAe9iD,KAAKskD,2B,6BAvE7E,OAAOtkD,KAAKmkD,cAAcjrB,Y,GAzBQ18B,aCE9BqD,I,OAAkBzC,EAAlByC,kBACewlD,G,kDACpB,WAAYlkD,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVk5B,EAASl5B,EAATk5B,QACP,EAAKS,SAAWT,EAChB,EAAKoC,YAAc/D,IAAMC,YAJR,IAKV2sB,EAAyCnkD,EAAzCmkD,iBAAkBzJ,EAAuB16C,EAAvB06C,sBALR,OAMjB,EAAKE,yBAAyBF,EAC1ByJ,GAAiBzlD,GAAiB,oBACtC,EAAK0lD,kBAAkBD,EACvB,EAAKptB,aAAc,EAAKA,aAAa/3B,KAAlB,gBACnB,EAAKqlD,WAAY,EACjB,EAAKhC,eAAiB,EAAKA,eAAerjD,KAApB,gBACtB,EAAK24B,MAAQ,CAACza,UAAS,GAZN,E,gEAejB6b,GAAQ0C,SAAS,CAACnG,QAAQz2B,KAAKy8B,YAAYvD,QAAS56B,KAAK0B,KAAK86B,a,4CAEzCvrB,GACjBA,IAAEA,EAAErQ,OAAOgP,OACfqB,EAAE4vB,iBAAiB5vB,EAAE4vB,kBACrB5vB,EAAE6vB,gBAAgB7vB,EAAE6vB,mB,mCAER7vB,GACTvP,KAAK+7C,wBACP/7C,KAAKo8C,sBAAsB7sC,GAE5BvP,KAAKwlD,WAAY,EACjB,IAAMnnC,GAAYre,KAAK84B,MAAMza,UAElB,IADGre,KAAKulD,kBAAkBlnC,IAErCre,KAAKs5B,SAAS,CAACjb,SAASA,M,qCAEV9O,GACXvP,KAAK+7C,wBACP/7C,KAAKo8C,sBAAsB7sC,GAE5BvP,KAAKwlD,WAAY,I,+BAgBjB,IAAIj+B,EAAY,OAGhB,OAFGvnB,KAAK84B,MAAMza,WACbkJ,GAAW,aACJ,qBAAKsS,IAAK75B,KAAKy8B,YAAalV,UAAWA,EAAWoQ,QAAS33B,KAAKo8C,sBAAuBzhB,YAAa36B,KAAKk4B,aAAcqrB,UAAWvjD,KAAKwjD,eAAgBxpB,aAAch6B,KAAKwjD,eAA1K,SACL,cAAC,KAAD,CAAiB7mB,KAAM8oB,W,+BAjB1B,OAAOzlD,KAAK84B,MAAMza,U,aAEN/b,GACTtC,KAAKwlD,WAGRxlD,KAAKs5B,SAAS,CAACjb,SAAS/b,Q,GA9CQ9F,aCP1BqD,GAAoCzC,EAApCyC,iBACa6lD,IADuBtoD,EAAlB0C,e,WAEzB,WAAYqB,GAAO,wBACXwkD,EAAgBxkD,EAAhBwkD,eACHA,GAAe9lD,GAAiB,kBACpCG,KAAK4lD,gBAAkBD,EACvB3lD,KAAK2O,WAAY,EACjB3O,KAAKwO,QAASxO,KAAKwO,QAAQrO,KAAKH,M,sDAG7BA,KAAK2O,YACR3O,KAAK2O,WAAY,EACjB3O,KAAK4lD,uB,MCXC/lD,GAAoCzC,EAApCyC,iBACagmD,IADuBzoD,EAAlB0C,e,WAEzB,WAAYgmD,EAAsBC,GAAsB,oBACnDA,GACHlmD,GAAiB,wBACdimD,GACHjmD,GAAiB,wBAClBG,KAAKgmD,sBAAwBD,EAC7B/lD,KAAKimD,sBAAwBH,EAC7B9lD,KAAKkmD,iCAAmClmD,KAAKkmD,iCAAiC/lD,KAAKH,MACnFA,KAAKmmD,kBAAoBnmD,KAAKmmD,kBAAkBhmD,KAAKH,M,8DAEpComD,GACjB,IAAMC,EAAoBrmD,KAAKimD,wBAC/BG,EAAUh3C,SAAQ,SAAAk3C,GAAQ,OAAED,EAAkB9lD,KAAK+lD,MACnDtmD,KAAKgmD,sBAAsBK,GAC3B,IAAMV,EAAiB3lD,KAAKkmD,iCAAiCE,GAC7D,OAAO,IAAIG,GAAoC,CAACZ,eAAeA,M,uDAE/BS,GAAW,IAAD,OAC1C,OAAO,WACN,IAAMC,EAAqB,EAAKJ,wBAChCG,EAAUh3C,SAAQ,SAAAk3C,GACjB,IAAMt4C,EAAQq4C,EAAkBvjD,QAAQwjD,GACrCt4C,EAAM,GACTq4C,EAAkB3lD,OAAOsN,EAAO,MAEjC,EAAKg4C,sBAAsBK,Q,MCnBTG,I,OADuBppD,EAApCyC,iBAAoCzC,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAET4uB,EAA+C5uB,EAA/C4uB,IAAKC,EAA0C7uB,EAA1C6uB,IAAK2zB,EAAqCxiD,EAArCwiD,QAAS8C,EAA4BtlD,EAA5BslD,SAAU7C,EAAkBziD,EAAlByiD,eAFpB,OAGjB,EAAKlF,OAASiF,EACd,EAAKI,KAAOh0B,EACZ,EAAKi0B,KAAOh0B,EACZ,EAAKid,UAAYwZ,EACjB,EAAK3C,gBAAkBF,EACvB,EAAK8C,iBAAkB,EAAKA,iBAAiBvmD,KAAtB,gBACvB,EAAKwmD,eAAgB,EAAKA,eAAexmD,KAApB,gBACrB,EAAK24B,MAAQ,CAAC8C,SAAQ,EAAMW,UAAS,GAVpB,E,qDAYTj6B,GACRtC,KAAK0+C,OAASp8C,I,uCAGdtC,KAAK0+C,QAAQ1+C,KAAKitC,UACfjtC,KAAK0+C,OAAO1+C,KAAKgkD,OACnBhkD,KAAK0+C,OAAS1+C,KAAKgkD,MACpBhkD,KAAK8jD,gBAAgB9jD,KAAK0+C,U,yCAG1B1+C,KAAK0+C,QAAQ1+C,KAAKitC,UACfjtC,KAAK0+C,OAAO1+C,KAAK+jD,OACnB/jD,KAAK0+C,OAAS1+C,KAAK+jD,MACpB/jD,KAAK8jD,gBAAgB9jD,KAAK0+C,U,+BAG1B,IAAIn3B,EAAY,eAGhB,OAFGvnB,KAAK84B,MAAM8C,UACbrU,GAAY,YAEZ,sBAAKA,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAArC,UACC,cAAC,GAAD,CAAY4B,QAAQ,UAAU9S,UAAU,KAAK+U,OAAQpwB,EAAKQ,OAAO,6BAA8BpO,KAAK,GAAGi+B,SAAUv8B,KAAK84B,MAAMyD,SAAU5E,QAAS33B,KAAK2mD,gBAAqBjuC,GAAWC,QACpL,cAAC,GAAD,CAAY0hB,QAAQ,WAAW9S,UAAU,OAAO+U,OAAQpwB,EAAKQ,OAAO,8BAA+BpO,KAAK,GAAGi+B,SAAUv8B,KAAK84B,MAAMyD,SAAU5E,QAAS33B,KAAK0mD,kBAAuBhuC,GAAWC,e,GAnCrJnc,cCT1BoqD,I,OADI,CAACC,mBAAmB,qBCEjChnD,GAAkCzC,EAAlCyC,iBACeinD,IADmB1pD,EAAhB0C,e,sGAEPqL,GACXA,GAAItL,GAAiB,OACzB,IAAMknD,EAAc57C,EAAIpO,YAAYD,KACpC,IAAIqO,EAAI67C,OAAO,MAAM,IAAIhqD,MAAJ,sBAAyB+pD,EAAzB,0CACrB,GAAwB,oBAAd57C,EAAI67C,OAAqB,MAAM,IAAIhqD,MAAJ,UAAa+pD,EAAb,+BACzC,IAAI57C,EAAI87C,WAAW,MAAM,IAAIjqD,MAAJ,sBAAyB+pD,EAAzB,8CACzB,GAA4B,oBAAlB57C,EAAI87C,WAAyB,MAAM,IAAIjqD,MAAJ,UAAa+pD,EAAb,uC,MCD1BG,G,kDACpB,WAAY/lD,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVgmD,EAA+ChmD,EAA/CgmD,sBAAuBC,EAAwBjmD,EAAxBimD,qBAFb,OAGjB,EAAKC,+BAAgCF,EACrC,EAAKG,sBAAwBF,EAC7B,EAAKlvB,aAAa,EAAKA,aAAa/3B,KAAlB,gBAClB,EAAKonD,oBAAqB,EAAKA,oBAAoBpnD,KAAzB,gBAC1B,EAAKqnD,aAAe,EAAKA,aAAarnD,KAAlB,gBACpB,EAAKsnD,YAAc,EAAKA,YAAYtnD,KAAjB,gBACnB,EAAKunD,WAAa,EAAKA,WAAWvnD,KAAhB,gBAClB,EAAKwnD,UAAY,EAAKA,UAAUxnD,KAAf,gBACjB,EAAKynD,aAAe,EAAKA,aAAaznD,KAAlB,gBACpB,EAAKs8B,YAAc/D,IAAMC,YACzB,EAAKkvB,QAAUnvB,IAAMC,YACrB,EAAKmvB,SAAW,KAChB,EAAKC,SAAU,EAfE,E,gEAkBjB/nD,KAAKgoD,oBAAsBhoD,KAAKsnD,wBAChCR,GAAmBmB,SAASjoD,KAAKgoD,qBACjChoD,KAAKgrC,oBAAsB,IAAI9L,GAAmB,CAACzI,QAAQz2B,KAAKy8B,YAAYvD,QAASiG,iBAAgB,EAAOC,gBAAe,EAC3HC,QAAQr/B,KAAKwnD,aAAcloB,OAAOt/B,KAAKynD,YAAaloB,MAAMv/B,KAAK0nD,WAAYloB,YAAW,IACtFtF,GAAQ0C,SAAS,CAChBnG,QAAQz2B,KAAKy8B,YAAYvD,QACzB56B,KAAK,uC,mCAGMiR,GACZ,IAAMknB,EAAUz2B,KAAKy8B,YAAYvD,QACjC,GAAIzC,EAAJ,CACAz2B,KAAK+nD,SAAU,EACf,IAAM5uB,EAAmB3C,GAAYC,GACrCA,EAAQsE,UAAUtrB,IAAI,YACtBzP,KAAK2nD,UAAU3nD,KAAK6nD,QAAQ3uB,SAAS,GACrCl5B,KAAK8nD,SAAW,EAAErxB,EAAQ2C,YAAY,GAAI3C,EAAQ4C,aAAa,GAC/Dr5B,KAAKunD,oBAAoB9wB,EAAS0C,EAAiBlC,KAAMkC,EAAiBrC,Q,gCAEjExM,EAAK49B,GACd59B,EAAIE,IAAMxqB,KAAK4nD,aAAaM,K,mCAEhBA,GACZ,OAAOh8C,EAAKQ,QAAQw7C,EAAS,wCAAwC,kC,0CAElDzxB,EAAS5rB,EAAGC,GAC/B2rB,EAAQqD,MAAM7C,KAAd,UAAsBpsB,EAAtB,MACA4rB,EAAQqD,MAAMhD,IAAd,UAAqBhsB,EAArB,Q,kCAEWyE,GACXvP,KAAK+nD,SAAU,EACf/nD,KAAKunD,oBAAoBvnD,KAAKy8B,YAAYvD,QAAS3pB,EAAE1E,EAAE7K,KAAK8nD,SAAS,GAAIv4C,EAAEzE,EAAE9K,KAAK8nD,SAAS,IAC3F9nD,KAAKgoD,oBAAoBf,WAAW,CAAC5pD,KAAKupD,GAAaC,mBAAoBh8C,EAAE0E,EAAE1E,EAAGC,EAAEyE,EAAEzE,M,iCAE5EyE,GACV,IAAMknB,EAAUz2B,KAAKy8B,YAAYvD,QACjCzC,EAAQsE,UAAUnrB,OAAO,YACzB5P,KAAK2nD,UAAU3nD,KAAK6nD,QAAQ3uB,SAAS,GACrCzC,EAAQqD,MAAM7C,KAAd,MACAR,EAAQqD,MAAMhD,IAAd,MACA92B,KAAKgoD,oBAAoBhB,OAAO,CAAC3pD,KAAKupD,GAAaC,mBAAoBh8C,EAAE0E,EAAE1E,EAAGC,EAAEyE,EAAEzE,M,yCAEhE+xB,M,mCAGNttB,GACTvP,KAAK+nD,SACR/nD,KAAKqnD,mC,+BAIN,OAAQ,wBAAQ9/B,UADC,+BACqBoQ,QAAS33B,KAAKk4B,aAAc2B,IAAK75B,KAAKy8B,YAApE,SACJ,qBAAK5C,IAAK75B,KAAK6nD,QAASr9B,IAAKxqB,KAAK4nD,cAAa,W,GAvEEprD,aCLvC2rD,GAJE,CAACzS,0BAA0B,0BAC3C0S,qBAAqB,qBACrBC,kBAAkB,kBAClBC,UAAU,YCCIC,GAJU,CAACC,UAAU,YAAaC,UAAU,YAAaC,SAAS,WAChFC,YAAY,cAAeC,YAAY,cAAeC,MAAM,QAASC,OAAO,SAC5EC,eAAe,gBAAiBC,iBAAiB,kBAAmBC,QAAQ,UAC5EC,aAAa,cAAeC,eAAe,kB,OCgB7BC,ICfXC,GAAU,IAAK,WACf,IAAMp6C,EAAOjP,KAEbA,KAAKspD,WAAa,GAElBtpD,KAAKupD,cAAgB,CAACC,OAAQ,EAAGC,OAAQ,KAAMC,SAAU,EAAGC,SAAU,KACzEn8C,EAAYxN,MACTA,KAAK4pD,UAAY,WAEnB,OAAO36C,EAAKq6C,WAAW9pD,OAAO,EAAE,KAAKyP,EAAKq6C,WAAWr6C,EAAKq6C,WAAW9pD,OAAO,IAE1EQ,KAAK6pD,iBAAmB,SAAU3qD,GAIpC,IAFA,IAAI4qD,EAAgC,KAC9BzkB,EAAgBnmC,EAAO6qD,mBACrB5mD,EAAI8L,EAAKq6C,WAAW9pD,OAAS,EAAG2D,GAAG,IAC1C2mD,EAAgC76C,EAAKq6C,WAAWnmD,QAC7BtF,IAAhBwnC,GAA2C,OAAhBA,GAC1BykB,EAA8BC,qBAAqB1kB,GAGpDykB,IAAgC5qD,GANUiE,KAQ9C,IAAI2mD,EAA8B,MAAO,CAAC,EAAE,GAC5C,IAAME,EAAsBF,EAA8BG,cAC1D,MAAO,CAACD,EAAoB,GAvBI,GAuB2BA,EAAoB,GAvB/C,KAyB9B9qD,OAAOuO,iBAAiB,UAAU,WAC9B,IAAK,IAAItK,EAAI,EAAGA,EAAI8L,EAAKq6C,WAAW9pD,OAAQ2D,IAExC8L,EAAKq6C,WAAWnmD,GAAG+mD,oBAExB,GAEHlqD,KAAKmqD,uBAAyBtgC,SAASgN,gBAAgBuzB,aAAe,GACzEpqD,KAAKqqD,gBAAkB,WAEtB,IADA,IAAIC,EAhCY,IAiCPnnD,EAAI,EAAGA,EAAI8L,EAAKq6C,WAAW9pD,OAAQ2D,IAE3C8L,EAAKq6C,WAAWnmD,GAAGonD,WAAWD,GAC9BA,KAYFtqD,KAAKwqD,WAAa,SAAStrD,GAC1B,IAAMurD,EAAYpB,GAAQC,WAC1BmB,EAAU/pD,OAAO,EAAG,EAAG+pD,EAAU/pD,OAAO+pD,EAAU3nD,QAAQ5D,GAAS,GAAG,IACtEmqD,GAAQgB,mBAETrqD,KAAK0qD,4BAA8B,SAASxrD,GAC3C+P,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAW5B,eAAgB7pD,OAAOA,KAE5Dc,KAAK4qD,8BAAgC,SAAS1rD,GAC7C+P,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAW3B,iBAAkB9pD,OAAOA,MAMhDmqD,MCpEMjtB,G,WACpB,WAAYj7B,GAAO,IAAD,+BACZk7B,EAAsDl7B,EAAtDk7B,OAAQC,EAA8Cn7B,EAA9Cm7B,OAAQh+B,EAAsC6C,EAAtC7C,KAAMq5B,EAAgCx2B,EAAhCw2B,QAASpQ,EAAuBpmB,EAAvBomB,UAAWgV,EAAYp7B,EAAZo7B,SAE/C,GADAv8B,KAAKw8B,eAAiB7E,EACnB0E,GAAQC,EAAO,MAAM,IAAIt/B,MAAM,wCAyBlC,GAxBAgD,KAAKwnB,MAAQlpB,EACb0B,KAAKk4B,aAAal4B,KAAKk4B,aAAa/3B,KAAKH,MACzCA,KAAKy4B,SAAW5O,SAASC,cAAc,UACpCvC,IACCtT,MAAMC,QAAQqT,GAChBA,EAAUnY,SAAQ,SAAAmM,GAAC,OACnB,EAAKkd,SAASsC,UAAUtrB,IAAI8L,MAE5Bvb,KAAKy4B,SAASsC,UAAUtrB,IAAI8X,IAE9BvnB,KAAKy4B,SAASsC,UAAUtrB,IAAI,eAC5BzP,KAAKy4B,SAAS8D,WAAWA,EACzBv8B,KAAK6qD,cAAgBhhC,SAASC,cAAc,OAC5C9pB,KAAK6qD,cAAc9vB,UAAUtrB,IAAI,SACjCzP,KAAK6qD,cAAcp9C,iBAAiB,QAASzN,KAAKk4B,cAClDl4B,KAAK8qD,aAAejhC,SAASC,cAAc,OAC3C9pB,KAAK8qD,aAAa/vB,UAAUtrB,IAAI,QAChCzP,KAAK+qD,aAAclhC,SAASC,cAAc,OAC1C9pB,KAAK+qD,aAAahwB,UAAUtrB,IAAI,QAEhCzP,KAAKy4B,SAASwC,YAAYj7B,KAAK6qD,eAC/B7qD,KAAK6qD,cAAc5vB,YAAYj7B,KAAK8qD,cACpC9qD,KAAK6qD,cAAc5vB,YAAYj7B,KAAK+qD,cAEhC1uB,EAKA,CACH,IAAM2uB,EAAyBtyB,IAAMuyB,cAAcC,MACnDC,IAAS/sB,OAAO4sB,EACf,CAAIzjC,UAAU,OACboV,KAAKN,IAENr8B,KAAK8qD,mBAVN9qD,KAAKorD,YAAcvhC,SAASC,cAAc,OAC1C9pB,KAAKorD,YAAY5gC,IAAM8R,EACvBt8B,KAAK8qD,aAAa7vB,YAAYj7B,KAAKorD,a,yDAcxB77C,GACZvP,KAAKw8B,eAAejtB,K,8BAHpB,OAAOvP,KAAKy4B,a,KCrCO4yB,G,WACpB,cAAuB,IAAV50B,EAAS,EAATA,QAAS,oBACrBz2B,KAAKy4B,SAAUhC,EACfz2B,KAAKy4B,SAASsC,UAAUtrB,IAAI,kBAC5BzP,KAAKsrD,eAAiBtrD,KAAKsrD,eAAenrD,KAAKH,MAC/CA,KAAKurD,iBAAmBvrD,KAAKurD,iBAAiBprD,KAAKH,MACnDqpD,GAAQ57C,iBAAiB86C,GAAiBQ,eAAe/oD,KAAKsrD,gBAC9DjC,GAAQ57C,iBAAiB86C,GAAiBS,iBAAiBhpD,KAAKurD,kBAChEvrD,KAAKwrD,sBAAwB,IAAIt+B,I,8DAET,IAAThuB,EAAQ,EAARA,OACf,IAAGc,KAAKwrD,sBAAsBpyC,IAAIla,EAAOusD,WAAzC,CAEA,IAAInvB,EACJ,OAAOp9B,EAAOwsD,WACb,KAAKvD,GAAWzS,0BACfpZ,EAASpwB,EAAKQ,OAAO,iCACrB,MACD,QACC,OAEF,IAAMi/C,EAAa,IAAIC,GAAmB,CAACtvB,OAAOA,EAChD3E,QAAQz4B,EAAO2sD,eAAgBtkC,eAAU1pB,EAAW0+B,UAAS,IAC/Dv8B,KAAKy4B,SAASwC,YAAY0wB,EAAWl1B,SACrCz2B,KAAKwrD,sBAAsB3xC,IAAI3a,EAAOusD,UAAW,CAChDE,kB,0CAGyB,IAATzsD,EAAQ,EAARA,OACXwY,EAAQ1X,KAAKwrD,sBAAsB1xC,IAAI5a,EAAOusD,WACpD,GAAI/zC,EAAJ,CAFyB,IAGlBi0C,EAAYj0C,EAAZi0C,WACP3rD,KAAKy4B,SAASqzB,YAAYH,EAAWl1B,SACrCz2B,KAAKwrD,sBAAsBnyC,OAAOna,EAAOusD,c,8BAGzC,OAAOzrD,KAAKy4B,a,KC7BOszB,G,kDACpB,WAAY5qD,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV6qD,EAEmE7qD,EAFnE6qD,aAAcC,EAEqD9qD,EAFrD8qD,aAAcC,EAEuC/qD,EAFvC+qD,oBAAqBxmB,EAEkBvkC,EAFlBukC,QAASD,EAEStkC,EAFTskC,QAAS0hB,EAEAhmD,EAFAgmD,sBACzEgF,EACyEhrD,EADzEgrD,wCAAyCC,EACgCjrD,EADhCirD,cAAeC,EACiBlrD,EADjBkrD,cAAeC,EACEnrD,EADFmrD,UAAWC,EACTprD,EADSorD,eAClFC,EAAyErrD,EAAzEqrD,cAAeC,EAA0DtrD,EAA1DsrD,iBAAkBlc,EAAwCpvC,EAAxCovC,iBAAkBmc,EAAsBvrD,EAAtBurD,mBACpDl/C,EAAY,gBACZ,EAAKgjC,kBAAoBD,EACzB,EAAK3K,SAASF,EACd,EAAKG,SAAWJ,EAChB,EAAKknB,sBAAwB,IAAIz/B,IACjC,EAAK0/B,cAAgBZ,EACrB,EAAKa,mBAAqBP,EAC1B,EAAKjF,+BAAiCF,EACtC,EAAK2F,uBAAyBV,EAC9B,EAAKW,uBAAyBV,EAC9B,EAAKW,wBAAyBT,EAC9B,EAAKU,uBAAwBT,EAC7B,EAAKU,0BAA2BT,EAChC,EAAKU,4BAA8BT,EACnC,EAAKU,gBAAgB10B,IAAMC,YAC3B,EAAK00B,SAAS30B,IAAMC,YACpB,EAAK20B,oBAAsBrB,EAC3B,EAAKsB,qBAAqBrB,EAC1B,EAAKsB,yCAA2CrB,EAChD,EAAK1xB,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKstD,uBAAyB,EAAKA,uBAAuBttD,KAA5B,gBAC9B,EAAKutD,qBAAuB,EAAKA,qBAAqBvtD,KAA1B,gBAC5B,EAAKwtD,4BAA+B,EAAKA,4BAA6BxtD,KAAlC,gBACpC,EAAKytD,8BAAgC,EAAKA,8BAA8BztD,KAAnC,gBACrC,EAAK0tD,yBAA2B,EAAKA,yBAAyB1tD,KAA9B,gBAChC,EAAK2tD,+BAAiC,EAAKA,+BAA+B3tD,KAApC,gBACtC,EAAK4tD,sBAAwB,EAAKA,sBAAsB5tD,KAA3B,gBAC7B,EAAK+rD,oBAAsB,EAAKA,oBAAoB/rD,KAAzB,gBAC3B,EAAK6tD,qBAAsB,EAAKA,qBAAqB7tD,KAA1B,gBAC3B,EAAK8tD,wBAAyB,EAAKA,wBAAwB9tD,KAA7B,gBAC9B,EAAK+tD,6BAA+B,EAAKA,6BAA6B/tD,KAAlC,gBACpC,EAAKguD,uBAAyB,EAAKA,uBAAuBhuD,KAA5B,gBAC9B,EAAKiuD,eAAiB,EAAKA,eAAejuD,KAApB,gBACtB,EAAKkuD,6BAA+B,EAAKA,6BAA6BluD,KAAlC,gBACpC,EAAKmuD,gCAAkC,EAAKA,gCAAgCnuD,KAArC,gBACvC,EAAKouD,iCAAmC,EAAKA,iCAAiCpuD,KAAtC,gBACxC,EAAKo4C,cAAiB,KACtB,EAAK9b,YAAc/D,IAAMC,YACzB,EAAK61B,kBAAoB91B,IAAMC,YAC/B,IAAMkrB,EAAe,EAAKuK,iBA7CT,OA8CjB,EAAKt1B,MAAQ,CAAC8C,SAAQ,EAAO6yB,WAAW5K,EAAcwC,kBAAkB,GAAIqI,uBAAuB,IACnG,EAAKC,0BAA4B,IAAI9I,IAAyB,kBAAI,EAAK/sB,MAAMutB,qBAAmB,SAACA,GAAD,OAAqB,EAAK/sB,SAAS,CAAC+sB,kBAAkBA,OACtJ,EAAKuI,+BAAiC,IAAI/I,IAAyB,kBAAI,EAAK/sB,MAAM41B,0BAAwB,SAACA,GAAD,OAA0B,EAAKp1B,SAAS,CAACo1B,uBAAuBA,OAC1KxvD,OAAOuO,iBAAiB,SAAU,EAAKugD,sBACvCz4C,YAAW,kBAAI,EAAK24C,6BAA6BrK,KAAe,GAlD/C,E,gEAqDjB7jD,KAAK6uD,sBAAwB,IAAIxD,GAAqB,CAAC50B,QAAQz2B,KAAKwuD,kBAAkBt1B,Y,+CAE9D41B,GAAU,IAAD,OAC7Bt5C,EAAWxV,KAAK2sD,sBAAsB7yC,IAAIg1C,GAQ9C,OAPIt5C,IACHA,EAAU,IAAIR,GACdhV,KAAK2sD,sBAAsB9yC,IAAIi1C,EAAUt5C,GACzCA,EAAQ/H,iBAAiB,UAAU,SAAC8B,GACnC,EAAK4+C,uBAAuBW,EAAUv/C,EAAEkG,gBAGnCD,I,6CAEes5C,EAAUC,GAChC,IAAMxnC,EAAYunC,EAASjsD,cAAc,UACnC4zB,EAAUz2B,KAAKy8B,YAAYvD,QAC9B61B,EAASt4B,EAAQsE,UAAUtrB,IAAI8X,GAC7BkP,EAAQsE,UAAUnrB,OAAO2X,K,uCAG9B,OAAQsC,SAASgN,gBAAgBuzB,aAAavgC,SAASgN,gBAAgBm4B,YAAa,I,0CAQjEntC,GACnB7hB,KAAKqtD,SAASn0B,QAAQ7a,SAASwD,I,6BAG/B7hB,KAAKs5B,SAAS,CAACsC,SAAQ,M,6BAGvB57B,KAAKs5B,SAAS,CAACsC,SAAQ,M,6CAGvB,IAAMioB,EAAe7jD,KAAKouD,iBACVpuD,KAAK84B,MAAM21B,WAC3BzuD,KAAKivD,eAAepL,GAEnB7jD,KAAKkuD,6BAA6BrK,K,mDAEPA,GAC5B7jD,KAAKiO,cAAc,CAAC5Q,KAAK,sBAAuBwmD,aAAaA,M,qCAE/C4K,GACdzuD,KAAKs5B,SAAS,CAACm1B,WAAWA,M,8BAEnBnsD,GACPtC,KAAKotD,gBAAgBl0B,QAAQkrB,SAAS9hD,K,sCAEvBA,GACftC,KAAKu4C,cAAgBj2C,I,+CAMrBtC,KAAK4sD,kB,oDAEwBtqD,GAC7BtC,KAAKstD,oBAAoBhrD,K,qDAGzBwhC,GAAWqY,OAAOtyB,SAASgN,mB,6CAG3B72B,KAAK8sD,2B,oDAGL9sD,KAAK+sD,2B,gDAGL/sD,KAAK6sD,uB,qDAGL7sD,KAAKgtD,4B,wDAGLhtD,KAAKitD,2B,uDAGLjtD,KAAKktD,8B,yDAGLltD,KAAKmtD,gC,4CAEgB9uC,GACrBre,KAAKutD,qBAAqBlvC,K,+BAU1B,IAAM9b,EAAgBvC,KAAKwwC,oBACvBjpB,EAAY,YAAYvnB,KAAK84B,MAAM21B,WAAW,cAAc,IAC7DzuD,KAAK84B,MAAM8C,UACbrU,GAAW,YACZ,IAAM2nC,EAAuBprB,GAAWqrB,YAAa,cAAC,GAAD,CAAY5nC,UAAU,oBAAoB8S,QAAQ,cAAciC,OAAQpwB,EAAKQ,OAAO,0BAA2BpO,KAAK,GAAGq5B,QAAS33B,KAAKovD,+BACtL,KACIC,EAAc9sD,EAAckE,yBAA0B,cAAC,GAAD,CAAY8gB,UAAU,eAAe8S,QAAQ,2BAA2BiC,OAAQpwB,EAAKQ,OAAO,4BAA8BirB,QAAS33B,KAAKiuD,0BAAwC,KACxOqB,EAAsB/sD,EAAcqD,iBAAkB,cAAC,GAAD,CAAY2hB,UAAU,mBAAmB8S,QAAQ,kBAAkBiC,OAAQpwB,EAAKQ,OAAO,2BAA6BirB,QAAS33B,KAAKsuD,kCAAgD,KACxOiB,EAAehtD,EAAciD,qBAAsB,cAAC,GAAD,CAAY+hB,UAAU,mBAAmB8S,QAAQ,uBAAuBiC,OAAQpwB,EAAKQ,OAAO,sBAAwBirB,QAAS33B,KAAK2tD,8BAA4C,KACjO6B,EAAqBjtD,EAAcuD,oBAAqB,cAAC,GAAD,CAAYyhB,UAAU,mBAAmB8S,QAAQ,eAAeiC,OAAQpwB,EAAKQ,OAAO,2BAA6BirB,QAAS33B,KAAK8tD,iCAA+C,KACtO2B,EAAuBpjD,GAAc9J,cAAc6D,sBAAuB,cAAC,GAAD,CAAYmhB,UAAU,mBAAmB8S,QAAQ,QAAQiC,OAAQpwB,EAAKQ,OAAO,2BAA6BirB,QAAS33B,KAAKuuD,mCAAiD,KACnPmB,EAAmBntD,EAAc8D,wBACrC,cAAC,GAAD,CAAYkhB,UAAU,qBAAqB8S,QAAQ,cAAciC,OAAQpwB,EAAKQ,OAAO,kCAAoCirB,QAAS33B,KAAKquD,+BAA6C,KACtL,OACC,sBAAK9mC,UAAWA,EAAWsS,IAAK75B,KAAKy8B,YAArC,UACEyyB,EACD,cAAC,GAAD,CAAY3nC,UAAU,cAAc8S,QAAQ,OAAOiC,OAAQpwB,EAAKQ,OAAO,6BAA8BpO,KAAK,GAAGq5B,QAAS33B,KAAKytD,yBACzHgC,EACCC,EACCL,EACFC,EACAE,EACF,cAAC,GAAD,CAAYjoC,UAAU,YAAY8S,QAAQ,eAAeiC,OAAQpwB,EAAKQ,OAAO,eAAiBirB,QAAS33B,KAAK0tD,uBAC1G6B,EAEF,qBAAKhoC,UAAU,WAAf,SAA2BvnB,KAAK84B,MAAMutB,oBACtC,cAAC,GAAD,CAAMxsB,IAAK75B,KAAKqtD,SAAUhzB,QAAQ,kBAAkBirB,iBAAkBtlD,KAAK+tD,wBAC3E,qBAAKxmC,UAAU,iBAAiBsS,IAAK75B,KAAKwuD,oBAC1C,qBAAKjnC,UAAU,WACf,cAAC,GAAD,CAA0B4/B,sBAAuBnnD,KAAKqnD,+BAAgCD,qBAAsBpnD,KAAKwtD,2CACjH,cAAC,GAAD,CAAa3zB,IAAK75B,KAAKotD,gBAAkBr9B,IAAK/vB,KAAK4lC,SAAU5V,IAAKhwB,KAAK6lC,SAAU4gB,SAAU,EAAG9C,QAAS3jD,KAAK4lC,SAC3Gge,eAAgB5jD,KAAK4tD,gCACtB,qBAAKrmC,UAAU,kBAAf,SAAkCvnB,KAAK84B,MAAM41B,8B,+CA7G/C,OAAO1uD,KAAK2uD,4B,oDAGZ,OAAO3uD,KAAK4uD,iC,+BA+BZ,OAAOla,GAASC,a,GA/GmBn4C,aCThBmzD,I,yDACpB,WAAYxuD,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV6qD,EAAgB7qD,EAAhB6qD,aAFU,OAGjB,EAAKzR,eAAiB7hB,IAAMC,YAC5B,EAAKF,SAAWC,IAAMC,YACtB,EAAKi0B,cAAgBZ,EACrB,EAAKvxB,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKyvD,mBAAmB,EAAKA,mBAAmBzvD,KAAxB,gBACxB,EAAK0vD,iBAAmB,EAAKA,iBAAiB1vD,KAAtB,gBACxB,EAAK2vD,qBAAuB,EAAKA,qBAAqB3vD,KAA1B,gBAC5B,EAAKo4C,cAAiB,KACtB,EAAKkC,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvf,SAAUiC,KAAK,EAAKA,OACrF,EAAK5B,MAAQ,CAAC8C,SAAQ,GAbL,E,mDAgBjB57B,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKu4C,cAAcoC,OAAO36C,MAC1BA,KAAKy6C,mBAAmB7d,a,6BAGxB58B,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKu4C,cAAcE,U,sCAEJn2C,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAKu6C,eAAerhB,QAAQ0hB,gBAAgBt4C,K,2CAM5CtC,KAAKu4C,cAAcsB,eAAenF,GAASG,W,yCAG3C70C,KAAKu4C,cAAcsB,eAAenF,GAASS,e,6CAG3Cn1C,KAAKu4C,cAAcsB,eAAenF,GAASW,uB,+BAG3C,IAAI9tB,EAAY,iBAGhB,OAFGvnB,KAAK84B,MAAM8C,UACbrU,GAAY,YAEZ,sBAAKA,UAAWA,EAAhB,UACC,cAAC,GAAD,CAAesS,IAAK75B,KAAKu6C,iBACzB,sBAAKhzB,UAAU,MAAMsS,IAAK75B,KAAKy4B,SAA/B,UACC,cAAC,GAAD,CAAY4D,OAAQ0zB,KAAUzxD,KAAK,UAAUq5B,QAAS33B,KAAK4vD,qBAC3D,cAAC,GAAD,CAAYvzB,OAAQ2zB,KAAQ1xD,KAAK,OAAOq5B,QAAS33B,KAAK6vD,mBACtD,cAAC,GAAD,CAAYxzB,OAAQ4zB,KAAQ3xD,KAAK,WAAWq5B,QAAS33B,KAAK8vD,+B,+BArB7D,OAAOpb,GAASE,c,GA/BoBp4C,cCF/BqD,I,OAAkBzC,EAAlByC,kBACcqwD,G,WACpB,WAAY/uD,GAAO,oBAClBqM,EAAYxN,MADK,IAEVmwD,EAAqFhvD,EAArFgvD,+BAAgCC,EAAqDjvD,EAArDivD,oBAAqBC,EAAgClvD,EAAhCkvD,UAAWlgD,EAAqBhP,EAArBgP,MAAOmgD,EAAcnvD,EAAdmvD,gBAC1CzyD,IAAjCsyD,GAA6E,OAAjCA,GAAsCtwD,GAAiB,kCACtGyZ,GAAsBtZ,MACtBA,KAAKuwD,iCAAiCvwD,KAAKuwD,iCAAiCpwD,KAAKH,MACjFA,KAAKwwD,sBAAsBxwD,KAAKwwD,sBAAsBrwD,KAAKH,MAC3DA,KAAKywD,oBAAoBzwD,KAAKywD,oBAAoBtwD,KAAKH,MAEvDA,KAAK0wD,4BAA4B1wD,KAAK0wD,4BAA4BvwD,KAAKH,MACvEA,KAAK2wD,yBAAyB3wD,KAAK2wD,yBAAyBxwD,KAAKH,MACjEA,KAAK4wD,wBAAwB5wD,KAAK4wD,wBAAwBzwD,KAAKH,MAC/DA,KAAK6wD,sCAAsC7wD,KAAK6wD,sCAAsC1wD,KAAKH,MAElEA,KAAK8wD,gBAAfjzD,IAAZwyD,EAAwC,IACxB,MAAXA,EAAoC,EACtBA,EAEtBrwD,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,gBAC5BzP,KAAK+wD,KAAOlnC,SAASC,cAAc,OACnC9pB,KAAK+wD,KAAKh2B,UAAUtrB,IAAI,OACxBzP,KAAK+wD,KAAKj3B,MAAMpjB,MAAQ,MACxB1W,KAAKy4B,SAASwC,YAAYj7B,KAAK+wD,MAC/B/wD,KAAKgxD,aAAe,KACpBhxD,KAAKixD,yBAA2B,KAChCjxD,KAAKkxD,mCAAqCr2C,GAAuBmC,SAAShd,KAAMmQ,EAAOggD,EAAgCnwD,KAAKuwD,kCAC5HvwD,KAAKmxD,wBAA0Bt2C,GAAuBmC,SAAShd,KAAMmQ,EAAOigD,EAAqBpwD,KAAKwwD,uBACnGF,IACFtwD,KAAKy4B,SAAShrB,iBAAiB,YAAazN,KAAKywD,qBACjDzwD,KAAKoxD,uCAAyC,IAAIlyB,GAAmB,CAACzI,QAAQz2B,KAAKy4B,SAAU0G,iBAAgB,EAAMC,gBAAe,EACjIC,QAAQr/B,KAAK0wD,4BAA6BpxB,OAAOt/B,KAAK2wD,yBAA0BpxB,MAAMv/B,KAAK4wD,wBAAyBpxB,YAAW,IAChIx/B,KAAKqxD,6CAA+C,IAAI5tB,GAAyB,CAACC,YAAY,K,wEAGpEn0B,GAC3BvP,KAAKqxD,6CAA6C1tB,SAClD3jC,KAAK6wD,sCAAsCthD,K,+CAEnBA,GACxBvP,KAAKywD,oBAAoBlhD,K,0GAWOjN,GAC7BA,GAAO,IACTtC,KAAKixD,0BAA0B,IAAIK,MAAOC,WAC3CvxD,KAAK+wD,KAAKj3B,MAAMpjB,MAAS,IAAIpU,EAAO,M,4CAEfA,GAAO,IAAD,OAG3B,GAFGtC,KAAKgxD,cACPriC,aAAa3uB,KAAKgxD,cAChB1uD,EACFtC,KAAKy4B,SAASsC,UAAUtrB,IAAI,eACxB,CACJ,IAAI4gD,EAA4C,OAAhCrwD,KAAKixD,yBAAiCjxD,KAAK8wD,aAAa,IAAIQ,MAAOC,UAAYvxD,KAAKixD,0BAA0B,EAC3HZ,EAAU,IAAEA,EAAU,GACzBrwD,KAAKgxD,aAAez7C,YAAW,WAC9B,EAAKkjB,SAASsC,UAAUnrB,OAAO,aAC7BygD,M,0CAGe9gD,GAAG,IAAD,OACrBvP,KAAKqxD,6CAA6C3iC,SAAQ,kBAAI,EAAKmiC,sCAAsCthD,Q,4DAEpEA,GAAG,IACjC1E,EAAQ0E,EAAR1E,EAGH2mD,GAHWjiD,EAALzE,GAEDD,EADI7K,KAAK+wD,KAAKp6B,wBAAwBM,MAEzBj3B,KAAKy4B,SAASu2B,aACjCwC,EAAW,EAAEA,EAAW,EAAWA,EAAW,IAAEA,EAAW,GAC9DxxD,KAAKiO,cAAc,CAAC5Q,KAAK,UAAWm0D,iB,8BAhCpC,OAAOxxD,KAAKy4B,W,iCAGZ,OAAOz4B,KAAK+wD,S,KC1COU,G,WACpB,WAAYtwD,GAAO,IAAD,+BACVuwD,EAA6DvwD,EAA7DuwD,UAAWC,EAAkDxwD,EAAlDwwD,UAAYC,EAAsCzwD,EAAtCywD,qBAAsBC,EAAgB1wD,EAAhB0wD,eACpD7xD,KAAK8xD,gBAAkBD,EACvB7xD,KAAK+xD,WAAaL,EAClB1xD,KAAK0nC,KAAO1nC,KAAK0nC,KAAKvnC,KAAKH,MAC3BA,KAAKgyD,KAAOhyD,KAAKgyD,KAAK7xD,KAAKH,MAC3BA,KAAKotC,KAAOptC,KAAKotC,KAAKjtC,KAAKH,MAC3BA,KAAK06B,KAAO16B,KAAK06B,KAAKv6B,KAAKH,MAC3BA,KAAK89B,YAAc99B,KAAK89B,YAAY39B,KAAKH,MACzCA,KAAKiyD,oBAAsBjyD,KAAKiyD,oBAAoB9xD,KAAKH,MACzDA,KAAKkyD,uBAAyBlyD,KAAKkyD,uBAAuB/xD,KAAKH,MAC/DA,KAAKmyD,uBAAyBnyD,KAAKmyD,uBAAuBhyD,KAAKH,MAC/DA,KAAK0wD,4BAA8B1wD,KAAK0wD,4BAA4BvwD,KAAKH,MACzEA,KAAK2wD,yBAA2B3wD,KAAK2wD,yBAAyBxwD,KAAKH,MACnEA,KAAKoyD,4BAA8BpyD,KAAKoyD,4BAA4BjyD,KAAKH,MACzEA,KAAKqyD,kBAAoBryD,KAAKqyD,kBAAkBlyD,KAAKH,MACrDA,KAAKsyD,YAActyD,KAAKsyD,YAAYnyD,KAAKH,MACzCA,KAAKuyD,aAAevyD,KAAKuyD,aAAapyD,KAAKH,MAC3CA,KAAKwyD,QAAUxyD,KAAKwyD,QAAQryD,KAAKH,MACjCA,KAAKyyD,QAAUzyD,KAAKyyD,QAAQtyD,KAAKH,MACjCA,KAAK0yD,mBAAqB1yD,KAAK0yD,mBAAmBvyD,KAAKH,MACvDA,KAAKovD,6BAA+BpvD,KAAKovD,6BAA6BjvD,KAAKH,MAC3EA,KAAK2yD,YAAc3yD,KAAK2yD,YAAYxyD,KAAKH,MACzCA,KAAK4yD,6CAA+C5yD,KAAK4yD,6CAA6CzyD,KAAKH,MAC3GA,KAAK4wD,wBAA0B5wD,KAAK4wD,wBAAwBzwD,KAAKH,MACjEA,KAAK6yD,oBAAsB7yD,KAAK6yD,oBAAoB1yD,KAAKH,MACzDA,KAAK8yD,iBAAmB9yD,KAAK8yD,iBAAiB3yD,KAAKH,MACnDA,KAAK+yD,aAAe/yD,KAAK+yD,aAAa5yD,KAAKH,MAC3CA,KAAKgzD,YAAchzD,KAAKgzD,YAAY7yD,KAAKH,MACzCA,KAAKizD,cAAgBjzD,KAAKizD,cAAc9yD,KAAKH,MAE7CA,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,gBAC5BzP,KAAKkzD,cAAgBrpC,SAASC,cAAc,SAC5C9pB,KAAKmzD,sBAAwBtpC,SAASC,cAAc,OACpD9pB,KAAKmzD,sBAAsBp4B,UAAUtrB,IAAI,kBACzCzP,KAAKozD,2BAA6BvpC,SAASC,cAAc,OACzD9pB,KAAKozD,2BAA2Br4B,UAAUtrB,IAAI,wBAC9CzP,KAAKqzD,qBAAuBxpC,SAASC,cAAc,OACnD9pB,KAAKqzD,qBAAqBp4B,YAAYj7B,KAAKmzD,uBAC3CnzD,KAAKqzD,qBAAqBt4B,UAAUtrB,IAAI,iBACxCzP,KAAKy4B,SAASwC,YAAYj7B,KAAKqzD,sBAC/BrzD,KAAKqzD,qBAAqBp4B,YAAYj7B,KAAKkzD,eAC3ClzD,KAAKszD,iBAAmBzpC,SAASC,cAAc,UAC/C9pB,KAAKszD,iBAAiBv4B,UAAUtrB,IAAI,qBACpCzP,KAAKuzD,cAAgB1pC,SAASC,cAAc,OAC5C9pB,KAAKszD,iBAAiBr4B,YAAYj7B,KAAKuzD,eACvCvzD,KAAKy4B,SAASwC,YAAYj7B,KAAKszD,kBAC/BtzD,KAAKwzD,UAAY,EACjBxzD,KAAKszD,iBAAiB7lD,iBAAiB,QAASzN,KAAKkyD,wBACrDlyD,KAAKy4B,SAAShrB,iBAAiB,YAAazN,KAAKuyD,cAE9CZ,IACF3xD,KAAKyzD,yBAA2B,IAAI7H,GAAmB,CAACtvB,OAAOpwB,EAAKQ,OAAO,2BAA4B6a,UAAU,eAAgBoQ,QAAQ33B,KAAK06B,OAC9I16B,KAAKy4B,SAASwC,YAAYj7B,KAAKyzD,yBAAyBh9B,UAGzDz2B,KAAK0zD,aAAc,EACnBjiD,GAAczR,KAAM,cAAc,kBAAI,EAAK2zD,cAAY,SAACrxD,GAAD,OAAS,EAAKqxD,WAAarxD,KAClFmP,GAAczR,KAAM,eAAe,kBAAI,EAAK4zD,eAAa,SAACtxD,GAAD,OAAS,EAAKsxD,YAActxD,KACrFtC,KAAK6zD,aAAgB,IAAI3D,GAAY,CAACC,+BAA+B,cAAeC,oBAAoB,aAAcC,WAAU,EAAOlgD,MAAMnQ,KAC5IswD,YAAW,IACXtwD,KAAK6zD,aAAapmD,iBAAiB,UAAWzN,KAAK6yD,qBACpD7yD,KAAK8zD,wBAA0B,IAAIjmB,GAAiB,CAACvf,SAAStuB,KAAKyyD,QAASpkC,MAAM,MAClFruB,KAAKqzD,qBAAqBp4B,YAAYj7B,KAAK6zD,aAAap9B,SACxDz2B,KAAK+zD,eAAiB,IAAI1lB,GAAc,CAAC5X,QAAQz2B,KAAKy4B,SAAU6V,UAAUtuC,KAAKmyD,yBAC/EnyD,KAAKkzD,cAAczlD,iBAAiB,aAAczN,KAAK0yD,oBAAoB,GAC3E1yD,KAAKkzD,cAAczlD,iBAAiB,QAASzN,KAAK2yD,aAAa,GAC/D3yD,KAAKoxD,uCAAyC,IAAIlyB,GAAmB,CACpEzI,QAAQz2B,KAAKkzD,cAAe/zB,iBAAgB,EAAOC,gBAAe,EAClEC,QAAQr/B,KAAK0wD,4BAA6BpxB,OAAOt/B,KAAK2wD,yBACtDpxB,MAAMv/B,KAAK4wD,wBAAyBpxB,YAAW,IAChDx/B,KAAKqxD,6CAA+C,IAAI5tB,GAAyB,CAACC,YAAY,IAC9F1jC,KAAK8yD,mBACL9yD,KAAK+yD,cAAa,GAClB/yD,KAAKg0D,kBAAoB,IAAIpI,GAAmB,CAC/CrkC,UAAU,gBACV+U,OAAOpwB,EAAKQ,OAAO,mBACnBirB,QAAQ33B,KAAKizD,gBACdjzD,KAAKqzD,qBAAqBp4B,YAAYj7B,KAAKg0D,kBAAkBv9B,SAC1Dm7B,IAEF5xD,KAAKi0D,sBAAwB,IAAIrI,GAAmB,CACnDrkC,UAAU,oBACV+U,OAAOpwB,EAAKQ,OAAO,0BACnBirB,QAAQ33B,KAAKovD,+BACdpvD,KAAKqzD,qBAAqBp4B,YAAYj7B,KAAKi0D,sBAAsBx9B,UAElEz2B,KAAKk0D,iBAAmBx7B,IAAMC,YAC9B,IAAMw7B,EAAgBz7B,IAAMuyB,cAAcvH,IAC1C1jD,KAAKmzD,sBAAsBl4B,YAAYj7B,KAAKozD,4BAC5CjI,IAAS/sB,OAAO+1B,EACf,CACCt6B,IAAI75B,KAAKk0D,iBACTnkC,IAAI,EAAGC,IAAI,EAAG2zB,QAAQ,EACtBC,eAAe5jD,KAAKoyD,4BACpBvO,cAAa,IAEd7jD,KAAKozD,4BACNpzD,KAAKy6C,mBAAqB,IAAI1C,GAAkB,CAC/CthB,QAAQz2B,KAAKmzD,sBACbz4B,KAAK16B,KAAKsyD,c,4DAIRtyD,KAAKo0D,eACPp0D,KAAKsyD,cAELtyD,KAAKgzD,gB,oCAGNhzD,KAAKq0D,yBAAyBr0D,KAAKq0D,wBAAwB7lD,UAC3DxO,KAAKq0D,wBAA0Br0D,KAAKy6C,mBAAmB7d,WACvD58B,KAAKqyD,mBAAkB,K,oCAGvBryD,KAAKq0D,yBAAyBr0D,KAAKq0D,wBAAwB7lD,UAC3DxO,KAAKqyD,mBAAkB,K,wCAEN/vD,GACdA,EACFtC,KAAKmzD,sBAAsBp4B,UAAUtrB,IAAI,WAEzCzP,KAAKmzD,sBAAsBp4B,UAAUnrB,OAAO,WAC7C5P,KAAKo0D,eAAgB9xD,I,kDAEMiN,GAC3B,IAAM+kD,EAAmB,EAAE/kD,EAC3BvP,KAAKkzD,cAAcqB,OAAOD,I,mCAEdhyD,GACTA,EACFtC,KAAKy4B,SAASsC,UAAUtrB,IAAI,aAE5BzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,e,qDAGhC5P,KAAK+xD,YAAc/xD,KAAK+xD,WACxB/xD,KAAK8yD,qB,yCAIF9yD,KAAK+xD,WACP/xD,KAAKy4B,SAASsC,UAAUtrB,IAAI,aAE5BzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,e,0CAKbL,GACnBvP,KAAKkzD,cAAcsB,YAAcjlD,EAAEiiD,WAAWxxD,KAAKkzD,cAAcuB,W,kDAEtCllD,GAC3BvP,KAAK00D,2BAA4B,EACjC10D,KAAK20D,kBAAmB,EACxB30D,KAAK40D,oBAAsB,CAACrlD,EAAE1E,EAAG0E,EAAEzE,GACnC9K,KAAK60D,+BAAiC70D,KAAKkzD,cAAcsB,YAAax0D,KAAKkzD,cAAcuB,W,+CAEjEllD,GAAG,IAAD,OAC1BvP,KAAK00D,2BAA4B,EACjC,IAAMI,EAAYvlD,EAAE1E,EAAI7K,KAAK40D,oBAAoB,GACjD50D,KAAKqxD,6CAA6C3iC,SAAQ,kBAAI,EAAKkkC,6CAA6CkC,Q,mEAEpEA,GAC5C,IAAMC,EAAcD,EAAY90D,KAAKkzD,cAAc95B,YAC/C47B,EAAiBh1D,KAAK60D,+BAA+BE,EACtDC,EAAc,EAAEA,EAAgB,EAC3BA,EAAc,IAAEA,EAAgB,GACxCh1D,KAAKkzD,cAAcsB,YAAcQ,EAAch1D,KAAKkzD,cAAcuB,W,8CAE3CllD,GACvBvP,KAAK20D,kBAAmB,EACrB30D,KAAK00D,4BACH10D,KAAKo0D,gBACRp0D,KAAKkyD,yBACNlb,GAAWie,eAAe1lD,IAE3BvP,KAAK8zD,wBAAwBplC,Y,+CAI7B,IAAMwmC,EAAmBl1D,KAAKkzD,cAAciC,WAAWn1D,KAAKkzD,cAAckC,YACpEC,EAAqBr1D,KAAKy4B,SAASW,YAAYp5B,KAAKy4B,SAASY,cAC9Cr5B,KAAK8xD,gBAAgB9xD,KAAK+xD,YAAamD,GAAkBG,EAChEr1D,KAAKy4B,SAASsC,UAAUtrB,IAAI,eACrCzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,iB,qCAqBpC5P,KAAKwyD,Y,gCAGLxyD,KAAK2zD,YAAa,EAClBp+C,WAAWvV,KAAKmyD,uBAAwB,GACxCnyD,KAAK8zD,wBAAwBplC,Y,gCAG1B1uB,KAAK20D,mBACR30D,KAAK2zD,YAAa,K,+CAGd3zD,KAAK2zD,aACN3zD,KAAKwzD,SACPxzD,KAAKotC,OACDptC,KAAKs1D,W,8BAEC,IAAN13D,EAAK,EAALA,IACLoC,KAAK89B,aAAY,GACjB99B,KAAK+yD,eAAan1D,GAClBoC,KAAKkzD,cAAc1oC,IAAM5sB,EACzBoC,KAAKs1D,U,8BAEM,IAAN13D,EAAK,EAALA,IACLoC,KAAK89B,aAAY,GACjB99B,KAAK+yD,eAAan1D,GAClBoC,KAAKkzD,cAAc1oC,IAAM5sB,EACzBoC,KAAKiyD,wB,8BAGLjyD,KAAKkzD,cAAclB,OACnBhyD,KAAKwzD,UAAW,EAChBxzD,KAAKiyD,wB,6BAGLjyD,KAAKkzD,cAAcqC,QACnBv1D,KAAKwzD,UAAW,EAChBxzD,KAAKiyD,wB,6BAGLjyD,KAAKotC,OACLptC,KAAK89B,aAAY,K,0CAEE03B,GACnBx1D,KAAKuzD,cAAc/oC,IAAKxqB,KAAKwzD,SAAUtnD,EAAKQ,OAAO,4BAClDR,EAAKQ,OAAO,6B,kCAGFpK,GACRA,EACFtC,KAAKy4B,SAASsC,UAAUtrB,IAAI,WAE5BzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,a,yCAEdL,GAClB,IAAMkmD,EAAQz1D,KAAKkzD,cACb1B,EAAciE,EAAMjB,YAAaiB,EAAMhB,SAC7Cz0D,KAAK4zD,YAAapC,I,kCAEJjiD,GACdvP,KAAKotC,OACLptC,KAAKkzD,cAAcsB,YAAY,I,8BAxH/B,OAAOx0D,KAAKy4B,W,iCAyCZ,OAAOz4B,KAAK0zD,a,aAEEpxD,GACXtC,KAAK0zD,cAAcpxD,IACtBtC,KAAK0zD,YAAcpxD,EACnBtC,KAAK6Q,gBAAgBZ,QAAQ,aAAcjQ,KAAK0zD,aAC7CpxD,EAAMtC,KAAKy4B,SAASsC,UAAUtrB,IAAI,cAChCzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,iB,kCAGpC,OAAO5P,KAAK01D,c,aAEGpzD,GACZtC,KAAK01D,eAAepzD,IACvBtC,KAAK01D,aAAepzD,EACpBtC,KAAK6Q,gBAAgBZ,QAAQ,cAAejQ,KAAK01D,mB,KCtN9BC,G,kDACpB,WAAYx0D,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVy0D,EAAiBz0D,EAAjBy0D,gBACP,EAAKC,iBAAmBD,EAHP,OAKjB,EAAKE,qBAAsB,GAC3B,EAAKC,mBAAqB,IAAI7oC,IAC9B,EAAK8oC,aAAe,GACpB,EAAKnc,eAAiB,EAAKA,eAAe15C,KAApB,gBACtB,EAAK81D,gBAAkB,EAAKA,gBAAgB91D,KAArB,gBACvB,EAAK+1D,uBAAyB,EAAKA,uBAAuB/1D,KAA5B,gBAC9B,EAAKg2D,UAAU,EAAKA,UAAUh2D,KAAf,gBACf,EAAKs4C,MAAQ,EAAKA,MAAMt4C,KAAX,gBACb,EAAKi2D,OAAS,EAAKA,OAAOj2D,KAAZ,gBACd,EAAKw6C,OAAQ,EAAKA,OAAOx6C,KAAZ,gBACb,EAAKq4C,KAAO,EAAKA,KAAKr4C,KAAV,gBACZ,EAAKk2D,WAAa,IAAIv3B,GAAK,EAAKs3B,QAChC,EAAKE,cAAgB,IAAIx3B,GAAK,EAAKq3B,WACnC,EAAKr9B,MAAO,CAACy9B,UAAS,GAlBL,E,mDAqBdv2D,KAAKg2D,aAAax2D,OAAO,EAC3BQ,KAAKy4C,OAAM,GAGZz4C,KAAK26C,OAAO36C,KAAKg2D,aAAat1D,OAAOV,KAAKg2D,aAAax2D,OAAO,EAAG,GAAG,M,4BAE/Dg3D,GACLx2D,KAAKq2D,WAAW3nC,QAAQ8nC,K,6BAElBA,GACNx2D,KAAK81D,qBAAqB1mD,SAAQ,SAACqnD,GAAD,OAAsBA,EAAmB/7B,UAC3E16B,KAAK81D,qBAAqB,GACtBU,IACHx2D,KAAKg2D,aAAa,GAClBh2D,KAAK02D,cAAa,M,mCAGPp0D,GAAO,IAAD,IACZy4B,EAAS,UAAG/6B,KAAK61D,wBAAR,iBAAG,EAAuB38B,eAA1B,aAAG,EAAgC6B,UAC9CA,IACDz4B,EAAMy4B,EAAUtrB,IAAI,gBAClBsrB,EAAUnrB,OAAO,mB,qCAERk/C,GACd9uD,KAAKi2D,gBAAgBnH,K,6BAEf6H,GACN32D,KAAKk2D,uBAAuBS,K,sCAEb7H,GACf,IAAI9uD,KAAK+1D,mBAAmB38C,IAAI01C,GAC/B,MAAM,IAAI9xD,MAAJ,oCAAuC8xD,EAAvC,MACP,IAAM6H,EAAO32D,KAAK+1D,mBAAmBj8C,IAAIg1C,GAAUj1B,IAAIX,QACvDl5B,KAAKk2D,uBAAuBS,K,6CAENA,GACtB32D,KAAKs2D,cAAc5nC,QAAQioC,K,gCAElBA,GAKT,GAJG32D,KAAK81D,qBAAqBt2D,OAAO,GACnCQ,KAAKy4C,OAAM,GACZke,EAAKl8B,OACLz6B,KAAK81D,qBAAqBv1D,KAAKo2D,GAC5B32D,KAAKg2D,aAAax2D,OAAO,EAG3B,OAFAQ,KAAK02D,cAAa,QAClB12D,KAAKg2D,aAAaz1D,KAAKo2D,GAGxB,IAAMC,EAAa52D,KAAKg2D,aAAah2D,KAAKg2D,aAAax2D,OAAO,KAAKm3D,EAC/DC,GACH52D,KAAKg2D,aAAaz1D,KAAKo2D,GAExB32D,KAAK02D,cAAcE,K,0CAEC,IAAD,OACf5oD,EAAM,EACVhO,KAAKmB,MAAM6qC,SAAS58B,SAAQ,SAACynD,GAC5B,IAAM/H,EAAW+H,EAAUh9B,IAAIX,QAAQ41B,SACvC,GAAmB,OAAhB+H,EAAUh9B,IACZ,MAAM,IAAI78B,MAAJ,8BAAiCgR,EAAjC,sBAAoD6oD,EAAUx5D,KAAKP,KAAnE,gBACP,QAAce,IAAXixD,GAAiC,OAAXA,EACxB,MAAM,IAAI9xD,MAAJ,+BAAkC65D,EAAUx5D,KAAKP,KAAjD,8BACP,EAAKi5D,mBAAmBl8C,IAAIi1C,EAAU+H,GACtC7oD,IACA,IAAM8oD,EAAoBD,EAAUh9B,IAAIX,QAClC0hB,EAAgBkc,EAAkBlc,gBACxC,QAAqB/8C,IAAlB+8C,GAA+C,OAAlBA,EAC/B,MAAM,IAAI59C,MAAJ,+BAAkC65D,EAAUx5D,KAAKP,KAAjD,mCACPg6D,EAAkBlc,gBAAgB,Q,+BAIA56C,KAAK84B,MAAMy9B,SAC9C,OAAOv2D,KAAKmB,MAAM6qC,a,GA/FqBxvC,aCEpBu6D,G,kDACpB,WAAY51D,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV29C,EAA2B39C,EAA3B29C,wBAFU,OAGjB,EAAKE,gBAAgBtmB,IAAMC,YAC3B,EAAK4hB,eAAiB7hB,IAAMC,YAC5B,EAAKF,SAAWC,IAAMC,YACtB,EAAK+O,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAKs6B,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKgiD,qCAAsC,EAAKA,qCAAqChiD,KAA1C,gBAC3C,EAAK62D,8BAA+B,EAAKA,8BAA8B72D,KAAnC,gBACpC,EAAKm/C,YAAc,EAAKA,YAAYn/C,KAAjB,gBACnB,EAAKg9C,MAAQ,EAAKA,MAAMh9C,KAAX,gBACb,EAAKk/C,eAAgB,EAAKA,eAAel/C,KAApB,gBAErB,EAAKiiD,8BAA8B,EAAKA,8BAA8BjiD,KAAnC,gBAEnC,EAAKo4C,cAAiB,KACtB,EAAKzf,MAAQ,CAACoE,QAAQ,GAAItB,SAAQ,EAAO3L,SAAS,MAClD,EAAKwqB,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvf,SAAUiC,KAAK,EAAKA,OACrF,EAAK8nB,4BAA8B,IAAI1jB,GAAKggB,GApB3B,E,mDAuBjB9+C,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKy6C,mBAAmB7d,WACxB58B,KAAKu4C,cAAcoC,OAAO36C,Q,6BAG1BA,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKu4C,cAAcE,U,kCAER1C,GACX,IAAMkhB,EAA4Bj3D,KAAKg/C,gBAAgB9lB,QAAQ4kB,mBACzDoZ,EAAkB,GAIxB,OAHAD,EAA0B7nD,SAAQ,SAAA+nD,GACjCA,EAAyBC,uBAAuBhoD,SAAQ,SAAAtC,GAAS,OAAEoqD,EAAiB32D,KAAKuM,SAEvFoqD,EAAiB13D,OAAO,EAASu2C,EAC7BA,EAAW1zC,QAAO,SAAAwK,GAAI,OAAEqqD,EAAiBp0D,QAAQ+J,EAAKC,YAAY,O,8BAElE,IAAD,EACN,UAAA9M,KAAKq3D,4BAAL,SAA2B1tD,QAAQyF,SAAQ,SAAAkoD,GAAkB,OAAEA,EAAmBj5C,UAAW,KAC7Fre,KAAKg/C,gBAAgB9lB,QAAQikB,U,2DAEOoC,GACpC,IAAMgY,EAAsBhY,EAA8BjrC,WACtDijD,GACJv3D,KAAKg3D,8BAA8BO,K,sCAEpBj1D,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAKu6C,eAAerhB,QAAQ0hB,gBAAgBt4C,K,2BAQxCk1D,EAAqBvnC,GACzBjwB,KAAKs5B,SAAS,CAACrJ,aACfjwB,KAAKq3D,qBAAuBG,EAC5Bx3D,KAAKq/C,mB,oDAEwBuD,GAC7BhmD,QAAQmC,IAAI6jD,GACZhmD,QAAQmC,IAAI,iCACZ,IACMk4D,EAA4Bj3D,KAAKg/C,gBAAgB9lB,QAAQ4kB,mBAC/DlhD,QAAQmC,IAAIk4D,GACZj3D,KAAKg3D,8BAA8BC,K,oDAENA,GAC7BA,EAA0B7nD,SAAQ,SAAA+nD,GACjCA,EAAyB94C,UAAW,KAErCre,KAAKq3D,qBAAqB1tD,QACxBtH,QAAO,SAAAi1D,GAAkB,OAAEL,EAA0Bn0D,QAAQw0D,GAAoB,KACjFloD,SAAQ,SAAAkoD,GAAkB,OAAEA,EAAmBj5C,UAAW,O,uCAE5C,IAAD,OACT6e,EAAUl9B,KAAKq3D,qBAAqB1tD,QAAQK,KAAI,SAACstD,GACtD,IAAM55B,EAAS,IAAI+gB,GAAO,CAACngD,KAAM,gCAAMg5D,EAAmBx6D,KAAzB,OAAoC,qBAAK0tB,IAAK8sC,EAAmBG,uBACjGn1D,MAAMg1D,IAWP,OAVAA,EAAmB7pD,iBAAiB,mBAAmB,WAC/B,EAAKuxC,gBAAgB9lB,QAAQymB,qBACnD31C,KAAI,SAAA41C,GAAc,OAAEA,EAAe/lB,IAAIX,WACvC72B,QAAO,SAAAu9C,GAEP,OADaA,EAAet9C,QACbg1D,KACb,GACY9Z,UAAY8Z,EAAmBj5C,SAC9C,EAAKmkC,4BAA4B9zB,aAE3BgP,KAER19B,KAAKg/C,gBAAgB9lB,QAAQ6kB,WAAW7gB,K,+BAE/B,IAAD,EACJ3V,EAAW,0BAGf,OAFGvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YACJ,sBAAKA,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAArC,UACN,cAAC,GAAD,CAAeoB,IAAK75B,KAAKu6C,eAAgBpd,OAAO,UAAAn9B,KAAK84B,MAAM7I,gBAAX,eAAqBgqB,2BAA0B,iBAAiB,eAChH,cAAC,GAAD,CAAgBpgB,IAAK75B,KAAKg/C,gBAAiBpB,kBAAmB59C,KAAKoiD,qC,+BAlDrE,OAAO1N,GAASO,oB,gCAGhB,OAAOj1C,KAAKg/C,gBAAgB9lB,QAAQ8nB,c,GA3DOxkD,aCPxBk7D,G,4HAAkBj7D,GCClBk7D,G,WACpB,WAAYx2D,GAAO,oBAClBnB,KAAK43D,SAAW,G,0DAEHC,GACb,IAAMvY,EAAcuY,EAAWvY,YAC/B,QAAiBzhD,IAAdyhD,GAAuC,OAAdA,EAC3B,MAAM,IAAI39C,EAAJ,6BAA8Ck2D,EAAW96D,YAAYD,KAArE,wCACP,GAAyB,oBAAfwiD,EACT,MAAM,IAAIoY,GAAU,iEACrB13D,KAAK43D,SAASr3D,KAAKs3D,K,qCAWnB73D,KAAK43D,SAASxoD,SAAQ,SAAC/M,GAAD,OAAUA,EAAO86C,a,kCAE5Bt8B,GAIX,OAHA7gB,KAAK43D,SAASxoD,SAAQ,SAAC/M,GACtBwe,EAAQxe,EAAOi9C,YAAYz+B,MAErBA,I,qCAbP,IADA,IAAMi3C,EAAU93D,KAAK43D,SACbz0D,EAAE,EAAGA,EAAE20D,EAAQt4D,OAAQ2D,IAAI,CAElC,GADe20D,EAAQ30D,GACb69C,UAAU,OAAO,EAE5B,OAAO,M,KChBDnhD,I,cAAoCzC,EAApCyC,kBAAkBC,GAAkB1C,EAAlB0C,eACLi4D,G,kDACpB,WAAY52D,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVmB,EAAoCnB,EAApCmB,MAAOq6B,EAA6Bx7B,EAA7Bw7B,KAAML,EAAuBn7B,EAAvBm7B,OAAQh+B,EAAe6C,EAAf7C,KAAMq5B,EAASx2B,EAATw2B,aACvB95B,IAARyE,GAAkBzC,GAAiB,SACtC,EAAK6+C,OAASp8C,EAEd,IAAM01D,OAAwBn6D,IAAPS,GAAyB,OAAPA,EANxB,OASd05D,SAF6Bn6D,IAAP8+B,GAAyB,OAAPA,UACV9+B,IAATy+B,GAA8B,OAAVA,IACQz8B,GAAiB,0BACjEm4D,GACe,kBAAR15D,GAAiBwB,GAAe,OAAQ,UAEnD,EAAK0nB,MAAQlpB,EACb,EAAK25D,MAAQt7B,EACb,EAAK6L,QAAUlM,OAEFz+B,IAAV85B,GAA+B,OAAVA,GACvB93B,GAAiB,WAEG,oBAAX83B,GACT73B,GAAe,UAAW,YAC3B,EAAK08B,eAAiB7E,EAEtB,EAAKO,aAAe,EAAKA,aAAa/3B,KAAlB,gBAxBH,E,2DA2BjBH,KAAKw8B,eAAex8B,KAAK0+C,U,+BAGzB,IAAMngD,EAAUyB,KAAKwnB,MAAMxnB,KAAKwnB,MAChCxnB,KAAKwoC,QAAU,qBAAKhe,IAAKxqB,KAAKwoC,UAAkB,cAAC,KAAD,CAAiB7L,KAAM38B,KAAKi4D,QAC5E,OAAQ,wBAAQ1wC,UAAU,kBAAkBoQ,QAAS33B,KAAKk4B,aAAlD,SAAiE35B,Q,GAjC/B/B,aCGpCqD,GAAoBzC,EAApByC,iBACaq4D,G,kDACpB,WAAY/2D,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVg3D,EAAOh3D,EAAPg3D,MAFU,YAGNt6D,IAARs6D,GAA2B,OAARA,GAAat4D,GAAiB,SACpD,EAAKu4D,OAAOD,EACZ,EAAKE,2BAA6B,EAAKA,2BAA2Bl4D,KAAhC,gBAClC,EAAKm4D,cAAgB,EAAKA,cAAcn4D,KAAnB,gBANJ,E,uEAQSsD,GAC1BzD,KAAKo4D,OAAO30D,K,oCAECnF,EAAMg+B,EAAQh6B,EAAOi2D,GAClC,IAAMhxC,EAAY,2BAA2BgxC,EAAmB,IAAIA,EAAmB,IACvF,OAAQ,qBAAKhxC,UAAWA,EAAhB,SACL,cAAC,GAAD,CAAgBjpB,KAAMA,GAAU,KAAMg+B,OAAQA,GAAc,KAAMh6B,MAAOA,EACzEq1B,QAAS33B,KAAKq4D,8BAFuB3/C,GAAWC,U,+BAcnD,IATA,IAAM6/C,EAAkB,GAShBr1D,EAAE,EAAGA,EAAE,GAAIA,IAClBq1D,EAAgBj4D,KAAKP,KAAKs4D,cAAc1/C,OAAOzV,GAAI,KAAM,GAAGA,IAM7D,OAJAq1D,EAAgBj4D,KAAM,qBAAKgnB,UAAU,2BAA+B7O,GAAWC,SAC/E6/C,EAAgBj4D,KAAKP,KAAKs4D,cAAc1/C,OAAO,GAAI,KAAM,KAEzD4/C,EAAgBj4D,KAAKP,KAAKs4D,cAAc,KAAMpsD,EAAKQ,OAAO,mCAAoC,EAAG,cACzF,qBAAK6a,UAAU,qBAAf,SACNixC,Q,GApC2Ch8D,aCA1Bi8D,G,kDAIpB,WAAYt3D,GAAO,IAAD,sBACjB,cAAMA,GACgEA,EAA/D2gD,uBAFU,IAEc4W,EAAuCv3D,EAAvCu3D,aAAc5Z,EAAyB39C,EAAzB29C,wBAF5B,OAGjB,EAAK6Z,sBAAsBD,EAC3B,EAAKlW,4BAA8B,IAAI1jB,GAAKggB,GAC5C,EAAKE,gBAAgBtmB,IAAMC,YAC3B,EAAK4hB,eAAiB7hB,IAAMC,YAC5B,EAAKF,SAAWC,IAAMC,YACtB,EAAKigC,OAASlgC,IAAMC,YACpB,EAAK2E,SAAW,GAChB,EAAKoK,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAKo4C,cAAiB,KACtB,EAAK9d,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKg9C,MAAQ,EAAKA,MAAMh9C,KAAX,gBACb,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKs6C,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvf,SAAUiC,KAAK,EAAKA,OACrF,EAAK6d,cAAiB,KACtB,EAAKsgB,aAAe,EAAKA,aAAa14D,KAAlB,gBACpB,EAAK24D,WAAY,EAAKA,WAAW34D,KAAhB,gBACjB,EAAK44D,iBAAiB,CAAC,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAC9D,EAAK7pC,OAAS,KACd,EAAK4J,MAAQ,CAACoE,QAAQ,GAAItB,SAAQ,EAAOo9B,cAAc,GAAIC,aAAY,GACvE,EAAK/gB,kBAAkB,KAtBN,E,6DAFjB,OAAO,M,iDA0BInC,GAAY,IAAD,OAGtB,OAFAn5C,QAAQmC,IAAI,8BACZnC,QAAQmC,IAAIiB,KAAKk5D,eACdl5D,KAAKk5D,cACAnjB,EAAW1zC,QAAO,SAAAwK,GAAI,OAAE,EAAKqsD,gBAAiBrsD,KAC/CkpC,I,6BAGP/1C,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKy6C,mBAAmB7d,WACxB58B,KAAKu4C,cAAcoC,OAAO36C,Q,6BAG1BA,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKs5B,SAAS,CAACsC,SAAQ,IACpB57B,KAAKm5D,iBACPn5D,KAAKm5D,iBACLn5D,KAAKm5D,eAAe,Q,sCAGN72D,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAKu6C,eAAerhB,QAAQ0hB,gBAAgBt4C,K,2BAKxC+f,GACJriB,KAAKkvB,OAAS7M,EACdriB,KAAKm9C,U,8BAGFn9C,KAAKwiD,4BAA4B4W,YACpCp5D,KAAKs5B,SAAS,CAAC0/B,cAAc,KAC7Bh5D,KAAKk5D,cAAgB,Q,mCAET3pD,GAEZ,QADAA,EAAEA,EAAE8pD,aACKC,WACR,IAAK,wBACJt5D,KAAK84D,WAAW,GAChB,MACD,IAAK,aACJ94D,KAAK84D,WAAWvpD,EAAE3Q,KAAK26D,WAAW,O,iCAI1BC,GAEV,GADoBx5D,KAAK+4D,iBAAiBj2D,QAAQ02D,IAAU,EAC5D,CAEA,IAAIR,EAAch5D,KAAK84B,MAAMkgC,cAE7B,GADmB,OAAhBA,IAAqBA,EAAc,IACzB,IAAVQ,EAAY,CACd,GAAGR,EAAcx5D,OAAO,EAAE,OAC1Bw5D,EAAgBA,EAAcz5D,UAAU,EAAGy5D,EAAcx5D,OAAO,OAGjE,CAEC,KADiBQ,KAAK84B,MAAMkgC,cAAcx5D,OAAOi5D,EAAWgB,aAC/C,OACbT,GAAepgD,OAAO8gD,aAAaF,GAEpC,IAAMvyC,EAAa+xC,EAAcx5D,OAAO,EAAEurB,SAASiuC,GAAe,KAC5DnsD,EAAoB,OAAboa,EAAkB,KAAKjnB,KAAKkvB,OAAO/M,gBAAgB8E,GAC1D0yC,OAAkC97D,IAAPgP,GAAyB,OAAPA,IAAgBA,EAAKoR,WAClEg7C,EAA+B,KAAhBD,GAAqBW,EAC1C35D,KAAKs5B,SAAS,CAAC0/B,cAAcA,EAAeC,YAAYA,IACxDj5D,KAAK24D,sBAAsBgB,EAA0B9sD,EAAK,MAC1D,IAAM+sD,EAAuB55D,KAAKk5D,cAEjCl5D,KAAKk5D,cADHS,EACmB9sD,EAGA,KAEnB+sD,IAAuB55D,KAAKk5D,eAC9Bl5D,KAAKwiD,4BAA4B9zB,a,+BAGlC,IAAInH,EAAY,mBACbvnB,KAAK84B,MAAM8C,UACbrU,GAAY,YACb,IAAIsyC,EAAqB,cAEzB,OADAA,GAAqB75D,KAAK84B,MAAMmgC,YAAY,SAAS,WAC7C,sBAAK1xC,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAArC,UACL,cAAC,GAAD,CAAeoB,IAAK75B,KAAKu6C,iBACzB,sBAAKhzB,UAAWsyC,EAAhB,UACC,qBAAKtyC,UAAU,OAAf,kBACA,uBAAOsS,IAAK75B,KAAK44D,OAAQv7D,KAAK,OAAOkqB,UAAU,QAAQuyC,QAAS95D,KAAK64D,aAAev2D,MAAOtC,KAAK84B,MAAMkgC,mBAEvG,cAAC,GAAD,CAAmBb,MAAOn4D,KAAK84D,kB,+BAlElC,OAAOpkB,GAASQ,gB,GArDsB14C,a,mBCLnBu9D,ICKmBv9D,Y,ODNIY,EAApCyC,iBAAoCzC,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEXujC,EAAgBvjC,EAAhBujC,eAFW,OAGjB,EAAKG,gBAAkBH,EACvB,EAAKI,uBAAyB,EAAKA,uBAAuB3kC,KAA5B,gBAC9BukC,EAAej3B,iBAAiB,SAAU,EAAKq3B,wBAC/C,EAAK5M,aAAc,EAAKA,aAAa/3B,KAAlB,gBACnB,EAAK24B,MAAM,CAAC8C,SAAQ,GAPH,E,mEASKrsB,GACtBvP,KAAKs5B,SAAS,CAACsC,QAAQrsB,EAAEkG,e,mCAEblG,GACRA,IAAEA,EAAErQ,OAAOgP,OACfqB,EAAE4vB,iBAAiB5vB,EAAE4vB,kBACrB5vB,EAAE6vB,gBAAgB7vB,EAAE6vB,mB,+BAGpB,IAAI7X,EAAW,gBAGf,OAFGvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YACJ,qBAAKA,UAAWA,EAAWoQ,QAAS33B,KAAKk4B,mB,GAtBT17B,c,OEM3Bw9D,OAVf,WACC,GAAqC,oBAA3BnwC,SAASgN,iBAC2B,oBAAvChN,SAASgN,gBAAgBm4B,aACM,GAAtCnlC,SAASgN,gBAAgBm4B,YACxB,MAAO,CAACnlC,SAASgN,gBAAgBm4B,YAAYnlC,SAASgN,gBAAgBuzB,cACvE,GAA+B,oBAArBlrD,OAAO8lD,WAChB,MAAO,CAAC9lD,OAAO8lD,WAAW9lD,OAAOgmD,aAClC,IAAIhqB,EAAOrR,SAASowC,qBAAqB,QAAQ,GACjD,MAAO,CAAC/+B,EAAK8zB,YAAa9zB,EAAKkvB,eCNjB8P,GAFI,CAAEC,SAAS,WAAWC,WAAW,aAAcC,UAAU,YAAaC,aAAa,eACtGC,aAAa,eAAgBC,cAAc,gBAAiBC,YAAY,eAAgBC,YAAY,eCS/EC,IADIv9D,EAAlByC,iB,kDAEN,WAAYsB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVomB,EAAiCpmB,EAAjComB,UAAWqzC,EAAsBz5D,EAAtBy5D,aAAcC,EAAQ15D,EAAR05D,OAFf,OAGjB,EAAKC,gBAAkBD,EACvB,EAAKE,cAAcH,EACnB,EAAKnzC,WAAWF,EAChB,EAAK4e,OAASzN,IAAMC,YACpB,EAAK8D,YAAc/D,IAAMC,YACzB,EAAK8B,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAO,EAAKA,KAAKv6B,KAAV,gBACZ,EAAK66D,8BAAgC,EAAKA,8BAA8B76D,KAAnC,gBACrC,EAAK86D,gCAAkC,EAAKA,gCAAgC96D,KAArC,gBACvC,EAAK+6D,0BAA4B,EAAKA,0BAA0B/6D,KAA/B,gBACjC,EAAKg7D,4BAA8B,EAAKA,4BAA4Bh7D,KAAjC,gBACnC,EAAKi7D,8BAAgC,EAAKA,8BAA8Bj7D,KAAnC,gBACrC,EAAKk7D,eAAgB,EAAKA,eAAel7D,KAApB,gBACrB,EAAKm7D,gBAAiB,EAAKA,gBAAgBn7D,KAArB,gBACtB,EAAKkgC,WAAa,EAAKA,WAAWlgC,KAAhB,gBAClB,EAAKigC,WAAa,EAAKA,WAAWjgC,KAAhB,gBAClB,EAAKwgC,YAAc,EAAKA,YAAYxgC,KAAjB,gBACnB,EAAK29B,YAAc,EAAKA,YAAY39B,KAAjB,gBACnB,EAAKo7D,SAAU,EAAKA,SAASp7D,KAAd,gBACf,EAAKq7D,QAAS,EAAKA,QAAQr7D,KAAb,gBACd,EAAKs7D,cAAe,EAAKA,cAAct7D,KAAnB,gBACpB,EAAKu7D,UAAW,EAChB,EAAKC,kCAAoC,IAAI78B,GAAK,EAAKs8B,+BACvD,EAAKtiC,MAAQ,CAAC8iC,WAAU,GA1BP,E,oDA4BsC,IAAD,OAAjDpwD,EAAiD,EAAjDA,SAAU2oC,EAAuC,EAAvCA,uBAAwB0nB,EAAe,EAAfA,cACvCtmD,YAAW,WACV,EAAKmmD,UAAW,EAChB,EAAKI,wBAAwB3nB,EAC7B,EAAK4nB,gBAAe,EACpB,EAAKR,SAAS/vD,EAASA,EAAS,GAAG,GACnC,EAAKgwD,QAAQhwD,EAASA,EAAS,GAAG,GAClC+J,WAAW,EAAK8lD,eAAgB,GAChC,EAAKv9B,aAAY,GACjB,EAAK29B,eAAc,GACnBlmD,WAAWsmD,EAAc,EAAKX,0BAA0B,EAAKC,4BAA4B,KACvF,K,+BAEKlkC,GACQj3B,KAAKy8B,YAAYvD,QACzBY,MAAM7C,KAAd,UAAwBA,EAAxB,Q,8BAEOH,GACS92B,KAAKy8B,YAAYvD,QACzBY,MAAMhD,IAAd,UAAuBA,EAAvB,Q,kCAEW8E,GACX,IAAMnF,EAAUz2B,KAAKy8B,YAAYvD,QAC9B0C,EACFnF,EAAQsE,UAAUtrB,IAAI,WAEtBgnB,EAAQsE,UAAUnrB,OAAO,a,oCAEbgsD,GACb,IAAMnlC,EAAUz2B,KAAKy8B,YAAYvD,QACjC,GAAG0iC,EAGF,OAFAnlC,EAAQsE,UAAUtrB,IAAI,kBACtBgnB,EAAQsE,UAAUnrB,OAAO,oBAG1B6mB,EAAQsE,UAAUtrB,IAAI,oBACtBgnB,EAAQsE,UAAUnrB,OAAO,e,oDAGzBia,SAASgN,gBAAgBppB,iBAAiB,YAAazN,KAAKqgC,YAC5DxW,SAASgN,gBAAgBppB,iBAAiB,aAAczN,KAAK2gC,aAC7D3gC,KAAKg8D,aAAeh8D,KAAKs7D,oB,kDAGzBzxC,SAASgN,gBAAgBppB,iBAAiB,YAAazN,KAAKogC,YAC5DvW,SAASgN,gBAAgBppB,iBAAiB,aAAczN,KAAK2gC,aAC7D3gC,KAAKg8D,aAAeh8D,KAAKs7D,oB,wCAGzB,IAAMxW,EAAQ9kD,KAAKmmC,OAAOjN,QACpBC,EAAmB3C,GAAYsuB,GACrC,OAAO,IAAIxtB,GAAK,CAACzsB,EAAEsuB,EAAiBlC,KAAMnsB,EAAEquB,EAAiBrC,IAAKpgB,MAAMouC,EAAM1rB,YAAaziB,OAAOmuC,EAAMzrB,iB,iCAE9F9pB,GACVvP,KAAKo7D,8BAA8B7rD,K,iCAEzBA,GACV8uB,GAAgBI,qBAAqBlvB,GACrCvP,KAAK27D,kCAAkCjtC,QAAQnf,K,kCAEpCA,GACX8uB,GAAgBG,qBAAqBjvB,GACrCvP,KAAK27D,kCAAkCjtC,QAAQnf,K,oDAElBA,GAC7B,IAEMioB,EAAQ,CAFJjoB,EAAE1E,EACF0E,EAAEzE,GAET9K,KAAK87D,yBAAyB97D,KAAK87D,wBAAwBtkC,IAC1Dx3B,KAAKg8D,aAAazkC,cAAcC,IACnCx3B,KAAK06B,S,6BAGF16B,KAAK07D,WACT17D,KAAK07D,UAAW,EAChB17D,KAAK89B,aAAY,GACjBjU,SAASgN,gBAAgB/oB,oBAAoB,YAAa9N,KAAKqgC,YAC/DxW,SAASgN,gBAAgB/oB,oBAAoB,YAAa9N,KAAKogC,YAC/DvW,SAASgN,gBAAgB/oB,oBAAoB,aAAc9N,KAAK2gC,aAChE3gC,KAAK86D,iBAAiB96D,KAAK86D,qB,uCAGN96D,KAAKmmC,OAAOjN,QAAjC,IACM+iC,EAAqBjC,KACrBkC,EAAcl8D,KAAKs7D,kBACnBa,EAAsBn8D,KAAKg7D,8BAA8BkB,EAAaD,GACtEG,EAAwBp8D,KAAKi7D,gCAAgCiB,EAAaD,GAC1EL,EAAYO,GAAqBC,EACvCp8D,KAAKy7D,cAAcG,K,oDAEUM,EAAaD,GAC1C,IAGIzyB,EAHE7yB,EAASulD,EAAYvlD,OACrB0lD,EAAoBH,EAAYpxD,EAChCwxD,EAAuBL,EAAmB,IAAII,EAAkB1lD,GAEtE,GAAG0lD,EAAkB,EACpB7yB,EAAO,EACJ6yB,EAAkBC,EAAqB,IACzC9yB,IAAW7yB,EAAOslD,EAAmB,IAAI,OAGtC,MAAIK,EAAqB,GAMzB,OAAO,EALV9yB,EAASyyB,EAAmB,GAAGtlD,EAC7B0lD,EAAkBC,EAAqB,IACzC9yB,IAAW7yB,EAAOslD,EAAmB,IAAI,GAI3C,IAAIM,EAA0B,EAC9B,OAAOv8D,KAAK+6D,eACX,KAAKb,GAAaC,SAClB,KAAKD,GAAaG,UAClB,KAAKH,GAAaE,WACjB,MACD,KAAKF,GAAaI,aAClB,KAAKJ,GAAaQ,YACjB6B,EAA0B5lD,EAAO,EACjC,MACD,KAAKujD,GAAaK,aAClB,KAAKL,GAAaO,YAClB,KAAKP,GAAaM,cACjB+B,EAA0B5lD,EAK5B,OAFA6yB,GAAS+yB,EACTv8D,KAAKw7D,QAAQhyB,IACN,I,sDAEwB0yB,EAAaD,GAC5C,IAGI7yB,EAHE1yB,EAAQwlD,EAAYxlD,MACpB8lD,EAAqBN,EAAYrxD,EACjC4xD,EAAsBR,EAAmB,IAAIO,EAAmB9lD,GAEtE,GAAG8lD,EAAmB,EACrBpzB,EAAQ,EACLozB,EAAmBC,EAAoB,IACzCrzB,IAAY1yB,EAAMulD,EAAmB,IAAI,OAGtC,MAAIQ,EAAoB,GAMxB,OAAO,EALXrzB,EAAU6yB,EAAmB,GAAGvlD,EAC7B8lD,EAAmBC,EAAoB,IACzCrzB,IAAY1yB,EAAMulD,EAAmB,IAAI,GAI3C,IAAIM,EAA0B,EAC9B,OAAOv8D,KAAK+6D,eACX,KAAKb,GAAaC,SAClB,KAAMD,GAAaO,YACnB,KAAKP,GAAaQ,YACjB,MACD,KAAKR,GAAaE,WAClB,KAAKF,GAAaM,cACjB+B,EAA0B7lD,EAAM,EAChC,MACD,KAAKwjD,GAAaG,UAClB,KAAKH,GAAaI,aAClB,KAAKJ,GAAaK,aACjBgC,EAA0B7lD,EAK5B,OAFA0yB,GAASmzB,EACTv8D,KAAKu7D,SAASnyB,IACP,I,+BAGP,IACMuC,EAAe,SAAD,OAAU3rC,KAAK+6D,cAAf,YAAgC/6D,KAAKynB,YACzD,OAAQ,qBAAKF,UAFA,aAEsBsS,IAAK75B,KAAKy8B,YAArC,SACL,qBAAKlV,UAAWokB,EAAgB9R,IAAK75B,KAAKmmC,OAA1C,SACEnmC,KAAKmB,MAAM6qC,iB,GAxMqBxvC,cCPjCqD,I,OAAkBzC,EAAlByC,kBACe68D,G,kDACpB,WAAYv7D,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV0gB,EAAQ1gB,EAAR0gB,OAKP,GAJA,EAAKiX,MAAQ,CAACjX,SAAOA,GACrB,EAAK86C,OAASx7D,EAAM6qC,cACHnuC,IAAd,EAAK8+D,QAAkC,OAAd,EAAKA,QAChC98D,GAAiB,yBACfoU,MAAMC,QAAQ,EAAKyoD,QACrB,MAAMx/D,EAAe,8BARL,S,gEAiBjB,IAAMy/D,EAAU58D,KAAKmB,MAAM6qC,SAASnS,IAAIX,QAAQ0jC,QAChD58D,KAAKs5B,SAAS,CAACsjC,QAAQA,IACvB58D,KAAK68D,SAAWD,I,+BAGhB,IAAIr1C,EAAY,kBAGhB,OAFGvnB,KAAK84B,MAAMjX,SACb0F,GAAW,WACJ,qBAAKA,UAAWA,EAAhB,SACNvnB,KAAKmB,MAAM6qC,a,8BAfb,OAAOhsC,KAAK68D,W,2BAEFv6D,GACVtC,KAAKs5B,SAAS,CAACzX,OAAOvf,Q,GAfoB9F,aCHvBsgE,G,kDACpB,WAAY37D,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV47D,EAAmC57D,EAAnC47D,MAAOH,EAA4Bz7D,EAA5By7D,QAASI,EAAmB77D,EAAnB67D,UAAWn7C,EAAQ1gB,EAAR0gB,OAFjB,OAGjB,EAAKo7C,WAAaD,EAClB,EAAKE,OAASH,EACd,EAAKF,SAAWD,EAChB,EAAKO,iBAAmB,EAAKA,iBAAiBh9D,KAAtB,gBACxB,EAAK24B,MAAQ,CAACjX,SAAOA,GAPJ,E,+DAUjB7hB,KAAKi9D,WAAWj9D,KAAMA,KAAKk9D,OAAOrjC,IAAIX,W,+BAK7B,IAAD,EACJ3R,EAAY,gBACbvnB,KAAK84B,MAAMjX,SACb0F,GAAW,WACZ,IAAM61C,EAAgB,UAAGp9D,KAAK68D,gBAAR,aAAG,EAAet1C,UAGxC,OAFG61C,IACF71C,GAAW,IAAI61C,GACR,qBAAK71C,UAAWA,EAAWoQ,QAAS33B,KAAKm9D,iBAAzC,SACR,qBAAK51C,UAAU,QAAf,SACEvnB,KAAK68D,SAAS1/B,Y,2BAZN76B,GACVtC,KAAKs5B,SAAS,CAACzX,OAAOvf,Q,GAdkB9F,aCOrB6gE,I,OADGjgE,EAAlByC,iB,kDAEL,WAAYsB,GAAO,IAAD,uBACjB,cAAMA,IACDs3B,SAAWC,IAAMC,YAFL,IAGV2kC,EAAqCn8D,EAArCm8D,sBAAuBC,EAAcp8D,EAAdo8D,YAC9B,EAAKP,UAAW,EAAKA,UAAU78D,KAAf,gBAChB,EAAKq9D,mBAAoBD,EACzB,IAAME,EAAS,GACXzvD,EAAM,EAPO,OAQjB,EAAK0vD,uBAAyBJ,EAC9B,EAAKn8D,MAAM6qC,SAAS58B,SAAQ,SAAAuuD,GAAQ,IAAD,EAC5BC,EAASllC,IAAMC,YACf9W,EAAS7T,IAAQsvD,EACjBO,EAAW,OAAGF,QAAH,IAAGA,GAAH,UAAGA,EAAOx8D,aAAV,aAAG,EAAc28D,OAC5BA,OAAuBjgE,IAAdggE,GAAuC,OAAdA,EAAmBA,EAAYnlD,GAAWC,OAC5EokD,EAAS,cAAC,GAAD,CAAgBljC,IAAK+jC,EAAU/7C,OAAQA,EAAvC,SAA6D87C,GAATG,GACnEL,EAAOl9D,KAAKw8D,GACZ/uD,OAED,EAAK8qB,MAAM,CAACilC,KAAK,GAAIN,OAAOA,GAlBX,E,sDAoBRK,GACT99D,KAAK84B,MAAMilC,KAAK3uD,SAAQ,SAAA4uD,GACvB,IAAMC,EAAaD,EAAInkC,IAAIX,QACrBrX,EAASm8C,EAAIv6D,MAAMq6D,EACzBG,EAAWp8C,OAAQA,KAEpB7hB,KAAK84B,MAAM2kC,OAAOruD,SAAQ,SAAA2tD,GACzB,IAAMmB,EAAenB,EAAMljC,IAAIX,QACzBrX,EAASk7C,EAAMt5D,MAAMq6D,EAC3BI,EAAar8C,OAAQA,KAEtB7hB,KAAKw9D,oBAAoBx9D,KAAKw9D,mBAAmBM,K,0CAE9B,IAAD,OACd9vD,EAAM,EACJ+vD,EAAM,GACZ/9D,KAAK84B,MAAM2kC,OAAOruD,SAAQ,SAAA2tD,GACzB,IAAMoB,EAASzlC,IAAMC,YACf9W,EAAS7T,IAAQ,EAAK0vD,uBACtBM,EAAO,cAAC,GAAD,CAAcjB,MAAOA,EAAOljC,IAAKskC,EAAQvB,QAASG,EAAMljC,IAAIX,QAAQ0jC,QACjF/6C,OAAQA,EAAQm7C,UAAW,kBAAI,EAAKA,UAAUD,EAAMt5D,OAAWs5D,EAAMt5D,KACrEs6D,EAAKx9D,KAAKy9D,GACVhwD,OAEDhO,KAAKs5B,SAAS,CAACykC,KAAKA,M,+BAIpB,OAAQ,sBAAKx2C,UAAU,YAAYsS,IAAK75B,KAAKy4B,SAArC,UACP,qBAAKlR,UAAU,OAAf,SAAuBvnB,KAAK84B,MAAMilC,OAClC,qBAAKx2C,UAAU,SAAf,SAAyBvnB,KAAK84B,MAAM2kC,gB,GAnDDjhE,cCNhCqD,GAAkBzC,EAAlByC,iBACeu+D,G,WACpB,WAAYj9D,GAAO,wBACXg8B,EAAkBh8B,EAAlBg8B,MAAO5V,EAAWpmB,EAAXomB,eACH1pB,IAARs/B,GAA2B,OAARA,GAAat9B,GAAiB,SACpDG,KAAKq+D,OAASlhC,EACdn9B,KAAKynB,WAAaF,E,kDAGlB,OAAOvnB,KAAKq+D,S,gCAGZ,OAAOr+D,KAAKynB,e,KCLP5nB,I,OAAkBzC,EAAlByC,kBACcy+D,G,kDACpB,WAAYn9D,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVomB,EAAuFpmB,EAAvFomB,UAAyCg3C,GAA8Cp9D,EAA5EyW,OAA4EzW,EAApEq9D,qBAAoEr9D,EAA9Co9D,sBAAsBE,EAAwBt9D,EAAxBs9D,cAAeC,EAASv9D,EAATu9D,QAFpE,OAGjB,EAAKC,SAAWD,EAAQ1/D,EAAUsN,mBAAmBoyD,GAAS,KAC9D,EAAKj3C,WAAaF,EAClB,EAAKq3C,qBAAuBH,OACF5gE,IAAvB0gE,GAAyD,OAAvBA,GAA4B1+D,GAAiB,wBAClF,EAAKg/D,sBAAwBN,EAC7B,EAAKx4B,yBAA2B,EAAKA,yBAAyB5lC,KAA9B,gBAChC,EAAK2+D,2BAA6B,EAAKA,2BAA2B3+D,KAAhC,gBAClC,EAAK4+D,uCAAyC,EAAKA,uCAAuC5+D,KAA5C,gBAC9C,EAAK6+D,mBAAoB,EAAKA,mBAAmB7+D,KAAxB,gBACzB,EAAK8+D,qBAAsB,EAAKA,qBAAqB9+D,KAA1B,gBAC3B,EAAKs4B,SAAWC,IAAMC,YACtB,EAAKumC,iCAAmC,IAAI5oD,GAAwB,CAACC,QAAQJ,GAAQC,QACrF,EAAK+oD,mCAAqC,IAAI7oD,GAAwB,CAACC,QAAQJ,GAAQE,SACvF,EAAKyiB,MAAO,CAACsmC,cAAc,GAAIC,wBAAuB,GAhBrC,E,+DAkBCxiC,GAClB,IAAMyiC,EAAgBziC,EAAcjlB,SAAS5X,KAAKmB,MAAMyW,OAClD2nD,EAAiB1iC,EAAc6hC,UAAU1+D,KAAKmB,MAAMu9D,QAI1D,GAHGY,IACFt/D,KAAKgY,QAAUhY,KAAKmB,MAAMyW,QAExB2nD,EAAe,CACjB,IAAMb,EAAU1+D,KAAKmB,MAAMu9D,QAC3B1+D,KAAK2+D,SAAWD,EAAQ1/D,EAAUsN,mBAAmBoyD,GAAS,MAE5DY,GAAeC,KACjBv/D,KAAK++D,yCACL/+D,KAAKi/D,0B,0CAINj/D,KAAK++D,2C,+DAGL,IAAMM,EAAyBr/D,KAAK8+D,6BACjC9+D,KAAK84B,MAAMumC,yBAAyBA,GACvCr/D,KAAKs5B,SAAS,CAAC+lC,uBAAuBA,M,6CAEhB,IAAD,OACrB,GAAIr/D,KAAKgY,QAAT,CAIA,IAAMqnD,EAAyBr/D,KAAK8+D,6BAC9BM,EAAgB,GACtBp/D,KAAKgY,QAAQ5I,SAAQ,SAAC6I,GACrB,IAAIhZ,EACJ,GAAGgZ,aAAiBlB,GAAa,CAChC,IAAMyoD,EAAW,EAAKX,wBAChBY,EAAoBxnD,EAAMb,kBAAkBioD,EACjD,CAAC7nD,YAAY,EAAK0nD,iCAAkCxoD,MAAM8oD,EAAS,IACnE,CAAChoD,YAAY,EAAK2nD,mCAAoCxoD,OAAO6oD,EAAS,KACvE,QAAuB3hE,IAApB4hE,GAAmD,OAApBA,EACjC,MAAM,IAAIziE,MAAM,qCACjBiC,EAAcwgE,EAAkBjzD,iBAE5B,CACJ,GAAoB,kBAAVyL,EACT,MAAM,IAAIjb,MAAM,mBACjBiC,EAAcgZ,EAEf,IAAMra,GAAuB,OAAhB,EAAK+gE,SAAgB,GAAG,EAAKA,UAAU3/D,EAAUuU,iBAAiBtU,GAC/EmgE,EAAc7+D,KAAM,sBAAKgnB,UAAU,gBAAf,UAAgC,qBAAKiD,IAAK5sB,IAAW,cAAC,KAAD,CAAiB2pB,UAAU,SAASoV,KAAM+iC,KAAU/nC,QAAS,WACrI,EAAKqnC,mBAAmB/mD,aAG1BjY,KAAKs5B,SAAS,CAAC8lC,cAAcA,SA1B5Bp/D,KAAKs5B,SAAS,CAAC8lC,cAAc,O,iDA6B9B,IAAMO,EAA8B3/D,KAAK6+D,wBACpCe,EAAeD,EAA4B,GAAGA,EAA4B,GAC9E,OAAGj1D,MAAMk1D,GAAoB,EACtBA,I,mDAGR,IAAMj3B,EAAuB3oC,KAAK+lC,2BAElC,OAD+B/lC,KAAK6/D,sBAAsBl3B,I,yCAGxC1wB,GAClB,IAAI6nD,EACJ,GAAG7nD,aAAiBlB,GACnB+oD,EAAkB7nD,EAAM8nD,kBAAkBvzD,iBAEvC,CACH,GAAmB,kBAATyL,EACT,MAAM,IAAIjb,MAAJ,0CAA6Cib,IAEpD6nD,EAAkB7nD,EAEnBjY,KAAK4+D,qBAAqB,CAAC3mD,MAAM6nD,EAAiBpB,QAAQ1+D,KAAK2+D,a,+BAG/D,IAAIp3C,EAAY,iBAIhB,OAHGvnB,KAAKynB,aACPF,GAAW,IAAF,OAAMvnB,KAAKynB,aACrBF,GAAWvnB,KAAK84B,MAAMumC,uBAAuB,YAAY,cACjD,qBAAK93C,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAArC,SACF,qBAAKlR,UAAU,QAAf,SACHvnB,KAAK84B,MAAMsmC,sB,GAvG2B5iE,aCCtBwjE,I,OADG5iE,EAAlByC,iB,kDAEL,WAAYsB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVomB,EAAwEpmB,EAAxEomB,UAAmBie,GAAqDrkC,EAA7DyW,OAA6DzW,EAArDqkC,0BAA0BC,EAA2BtkC,EAA3BskC,QAASC,EAAkBvkC,EAAlBukC,QAASg5B,EAASv9D,EAATu9D,QAFrD,OAGjB,EAAKj3C,WAAWF,EAChB,EAAKse,SAAWJ,EAChB,EAAKG,SAAWF,EAChB,EAAKI,0BAA0BN,GAAkD,KACjF,EAAKy6B,WAAY,EAAKA,WAAW9/D,KAAhB,gBACjB,EAAKw+D,SAAWD,EAAQ1/D,EAAUsN,mBAAmBoyD,GAAS,KAC9D,EAAKjiC,YAAc/D,IAAMC,YACzB,EAAKuY,qBAAuBxY,IAAMC,YAClC,EAAKwZ,gBAAiB,EAAKA,gBAAgBhyC,KAArB,gBACtB,EAAK0xC,iBAAkB,EAAKA,iBAAiB1xC,KAAtB,gBACvB,EAAK2xC,kBAAmB,EAAKA,kBAAkB3xC,KAAvB,gBACxB,EAAK24B,MAAM,CAAConC,YAAW,EAAMC,aAAY,GACzC,EAAKvqD,OAAS,EAfG,E,8DAkBjB,IAAM6gB,EAAUz2B,KAAKy8B,YAAYvD,QACjC,OAAa,OAAVzC,EAAsB,EAClBA,EAAQ2C,YAAY3C,EAAQ4C,e,yCAEjBwD,GAClB,IAAMyiC,EAAgBziC,EAAcjlB,SAAS5X,KAAKmB,MAAMyW,OAClD2nD,EAAiB1iC,EAAc6hC,UAAU1+D,KAAKmB,MAAMu9D,QAK1D,GAJGY,IACFt/D,KAAKgY,QAAUhY,KAAKmB,MAAMyW,OAC1B5X,KAAKs5B,SAAS,CAAC4mC,YAAW,EAAMC,YAAYngE,KAAKgY,QAAQxY,QAAQ,KAE/D+/D,EAAe,CACjB,IAAMb,EAAU1+D,KAAKmB,MAAMu9D,QAC3B1+D,KAAK2+D,SAAWD,EAAQ1/D,EAAUsN,mBAAmBoyD,GAAS,MAE5DY,GAAeC,KAChBv/D,KAAK4V,OAAO,EACZ5V,KAAKigE,gB,mCAKP,GAD2BjgE,KAAKgY,SAAUhY,KAAKgY,QAAQxY,OAAO,EAC9D,CACA,IAAM4gE,EAAgCpgE,KAAKgY,QAAQhY,KAAK4V,QAElD3W,EAD4D,kBAAjCmhE,EAE/BA,EACAA,EAA8BL,kBAAkBvzD,aAC5C5O,GAAuB,OAAhBoC,KAAK2+D,SAAgB,GAAG3+D,KAAK2+D,UAAU3/D,EAAUuU,iBAAiBtU,GAE/Ee,KAAKkxC,qBAAqBhY,QAAQwO,KAAK9pC,GADnB,M,yCAIpBoC,KAAK4V,QAAQ,EACb,IAAMsqD,EAAalgE,KAAK4V,QAAQ,EAC7BsqD,IACFlgE,KAAK4V,OAAO,GAEb5V,KAAKs5B,SAAS,CAAC4mC,WAAWA,EAAYC,aAAY,IAClDngE,KAAKigE,e,0CAGL,GAAIjgE,KAAKgY,QAAT,CACAhY,KAAK4V,QAAQ,EACb,IAAMuqD,EAAcngE,KAAK4V,QAAQ5V,KAAKgY,QAAQxY,OAAO,EAClD2gE,IACFngE,KAAK4V,OAAO5V,KAAKgY,QAAQxY,OAAO,GAEjCQ,KAAKs5B,SAAS,CAAC6mC,YAAYA,EAAaD,YAAW,IACnDlgE,KAAKigE,gB,+BAGL,IAAI14C,EAAY,6BAOhB,OANGvnB,KAAKynB,aACPF,GAAW,IAAIvnB,KAAKynB,YAClBznB,KAAK84B,MAAMonC,aACb34C,GAAW,iBACTvnB,KAAK84B,MAAMqnC,cACb54C,GAAW,kBAEX,sBAAKA,UAAWA,EAAWsS,IAAM75B,KAAKy8B,YAAtC,UACC,cAAC,GAAD,CACC8I,wBAAyBvlC,KAAKmyC,gBAC9B3M,yBAA0BxlC,KAAK8lC,0BAC/BL,QAASzlC,KAAK6lC,SAAUH,QAAS1lC,KAAK4lC,SACtCD,iBAAkB3lC,KAAKy8B,YACvB5C,IAAK75B,KAAKkxC,uBAEX,cAAC,GAAD,CAAY5U,OAAQpwB,EAAKQ,OAAO,2BAChCirB,QAAS33B,KAAK6xC,iBAAkBtqB,UAAU,gBAC1C,cAAC,GAAD,CAAY+U,OAAQpwB,EAAKQ,OAAO,4BAChCirB,QAAS33B,KAAK8xC,kBAAmBvqB,UAAU,wB,GA1FO/qB,cCHjC6jE,IADIjjE,EAAlByC,iB,kDAKN,WAAYsB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVm/D,EAA2Cn/D,EAA3Cm/D,YAAa7B,EAA8Bt9D,EAA9Bs9D,cAAel8D,EAAepB,EAAfoB,cAFlB,OAGjB,EAAKkQ,eAAiBlQ,EACtB,EAAKq8D,qBAAuBH,EAC5B,EAAKI,sBAAwByB,EAC7B,EAAK7nC,SAAWC,IAAMC,YACtB,EAAKkkC,SAAW,IAAIuB,GAAQ,CAACjhC,MAAM,cAAe5V,UAAU,oBAC5D,EAAKuR,MAAM,CAACkN,KAAK,KAAMn5B,KAAK,KAAM+K,OAAO,MARxB,E,wFAFjB,OAAO,Q,0CAeHouB,EAAMn5B,GACV7M,KAAKs5B,SAAS,CAAC0M,KAAKA,EAAMn5B,KAAKA,IAC/B7M,KAAKugE,qBAAqBv6B,EAAMn5B,K,2CAEZm5B,EAAMn5B,GAC1B7M,KAAKs5B,SAAS,CAAC1hB,OAAO/K,EAAKyR,oB,+BAG3B,IAAMogD,EAAUxyD,EAAKe,iBAAiBjN,KAAKyS,eAAe5N,UACzD,OAAO7E,KAAKyS,eAAehJ,0FAC1B,cAAC,GAAD,CAAe8d,UAAU,oCAAoCk3C,cAAez+D,KAAK4+D,qBAAsBhnD,OAAQ5X,KAAK84B,MAAMlhB,OAC3H8mD,QAASA,EACTF,qBAAuB6B,EAA8BG,uCACrDjC,qBAAsBv+D,KAAK6+D,sBAAuBhlC,IAAK75B,KAAKy4B,WAE3D,cAAC,GAAD,CAA0BlR,UAAU,oCACrC3P,OAAQ5X,KAAK84B,MAAMlhB,OAAQ8mD,QAASA,EACpCh5B,QAAS,EAAGD,QAAS,EAAG5L,IAAK75B,KAAKy4B,a,8BAnBnC,OAAOz4B,KAAK68D,a,GAf6CrgE,cCDtCikE,IADIrjE,EAAlByC,iB,kDAKN,WAAYsB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVm/D,EAA2Cn/D,EAA3Cm/D,YAAa7B,EAA8Bt9D,EAA9Bs9D,cAAel8D,EAAepB,EAAfoB,cAFlB,OAGjB,EAAKkQ,eAAgBlQ,EACrB,EAAKq8D,qBAAuBH,EAC5B,EAAKI,sBAAwByB,EAC7B,EAAK7nC,SAAWC,IAAMC,YACtB,EAAKkkC,SAAW,IAAIuB,GAAQ,CAACjhC,MAAM,UAAW5V,UAAU,gBACxD,EAAKm5C,gBAAkB,EAAKA,gBAAgBvgE,KAArB,gBACvB,EAAK24B,MAAM,CAACkN,KAAK,KAAMn5B,KAAK,KAAM+K,OAAO,MATxB,E,wFAFjB,OAAO,Q,0CAgBHouB,EAAMn5B,GACV7M,KAAKs5B,SAAS,CAAC0M,KAAKA,EAAMn5B,KAAKA,IAC/B7M,KAAK0gE,gBAAgB16B,EAAMn5B,K,sCAEZm5B,EAAMn5B,GACrB,IAAI+K,EAAS,GACb/K,EAAKwL,MAAMmH,WAAWpQ,SAAQ,SAAC+I,GAC9B,IAAMwoD,EAAWxoD,EAAKP,OACtBA,EAASA,EAAO7N,OAAO42D,MAExB3gE,KAAKs5B,SAAS,CAAC1hB,OAAOA,M,+BAGtB,IAAM8mD,EAAUxyD,EAAKe,iBAAiBjN,KAAKyS,eAAe5N,UAC1D,OAAO7E,KAAKyS,eAAehJ,0FAC1B,cAAC,GAAD,CAAe8d,UAAU,gCAAgCk3C,cAAez+D,KAAK4+D,qBAC7EhnD,OAAQ5X,KAAK84B,MAAMlhB,OAAQ8mD,QAASA,EACpCF,qBAAuBiC,EAA2BD,uCAClDjC,qBAAsBv+D,KAAK6+D,sBAAwBhlC,IAAK75B,KAAKy4B,WAG7D,cAAC,GAAD,CAA0BlR,UAAU,gCACpC3P,OAAQ5X,KAAK84B,MAAMlhB,OAAQ8mD,QAASA,EACpCh5B,QAAS,EAAGD,QAAS,EAAG5L,IAAK75B,KAAKy4B,a,8BAzBnC,OAAOz4B,KAAK68D,a,GAhB0CrgE,cCKnCokE,IADIxjE,EAAlByC,iB,kDAEN,WAAYsB,GAAO,IAAD,sBACjB,cAAMA,GACNmY,GAAsB,gBAFL,IAGV22B,EAA+C9uC,EAA/C8uC,gBAAiBD,EAA8B7uC,EAA9B6uC,aAAc6wB,EAAgB1/D,EAAhB0/D,eAHrB,OAIjB,EAAKC,MAAQpoC,IAAMC,YACnB,EAAK8D,YAAc/D,IAAMC,YACzB,EAAKiY,sBAAwBZ,EAC7B,EAAKa,yBAA2BZ,EAChC,EAAK8wB,wBAA0BF,EAC/B,EAAKhE,SAAW,IAAIuB,GAAQ,CAACjhC,MAAM,WAAY5V,UAAU,iBACzD,EAAKy5C,2BAA4B,EAAKA,2BAA2B7gE,KAAhC,gBACjC,EAAK8gE,2BAA4B,EAAKA,2BAA2B9gE,KAAhC,gBACjC,EAAK+gE,eAAgB,EAAKA,eAAe/gE,KAApB,gBACrB,EAAK+3B,aAAc,EAAKA,aAAa/3B,KAAlB,gBACnB,EAAKghE,2BAA6B,EAAKA,2BAA2BhhE,KAAhC,gBAClC,EAAKihE,+DAAgE,EAAKA,+DAA+DjhE,KAApE,gBACrE,EAAK24B,MAAO,CAACjsB,KAAK,KAAMw0D,SAAQ,EAAOC,eAAe,MAhBrC,E,iDAkBbt7B,EAAMn5B,GACT7M,KAAKuhE,uBAAsB,EAC5BvhE,KAAKs5B,SAAS,CAACzsB,KAAKA,EAAMm5B,KAAKA,EAAMs7B,eAAez0D,EAAKuF,MAAOivD,SAAQ,EAAOG,iDAAiD30D,EAAKuF,U,iDAK3GiM,GACvBA,EAASre,KAAK4wC,sBAAsB5wC,KAAK84B,MAAMjsB,MAC7C7M,KAAK6wC,yBAAyB7wC,KAAK84B,MAAMjsB,Q,iDAEpBvK,GAC1BtC,KAAK8gE,MAAM5nC,QAAQ7a,SAAS/b,I,yCAGVu6B,EAAe4kC,GACjC,IAAMC,EAAUD,EAAc50D,KACxB80D,EAAU3hE,KAAK84B,MAAMjsB,KACvB7M,KAAK84B,MAAMuoC,SACdrhE,KAAKkhE,iBACHQ,IAAUC,IAEb3hE,KAAKuZ,WAAWL,QAChB2B,GAAuBmC,SAAShd,KAAM2hE,EAAS,WAAY3hE,KAAKihE,+B,qCAGzCjhE,KAAK84B,MAAMuoC,SAElCrhE,KAAKs5B,SAAS,CAAC+nC,SAAQ,EAAMG,iDAAiDxhE,KAAK84B,MAAMjsB,KAAKuF,U,uCAG9F,IAAMqkB,EAAUz2B,KAAKy8B,YAAYvD,QAGjC,GAF2BzC,EAAQmrC,aAAenrC,EAAQ2zB,aAClB,EACxC,CACA,IAAIkX,EAAiBthE,KAAK84B,MAAMwoC,eAC5BO,EAAgCP,EAAe9hE,OAAO,EAC1D,GAAGQ,KAAKuhE,sBAAsB,CAC7B,IAAMO,EAAmBrrC,EAAQ2zB,aAAe3zB,EAAQmrC,aACxDC,EAAkC1uC,KAAK4uC,OAAOT,EAAe9hE,OAAO,GAAGsiE,GACvE9hE,KAAKuhE,uBAAsB,EAE5B,IAAMS,EAAgChiE,KAAKohE,+DAA+DS,EAAiCP,GAErIE,GADNF,EAAeA,EAAevwD,OAAO,EAAGixD,EAA8B,IACA,MACtEhiE,KAAKs5B,SAAS,CAACgoC,eAAeA,EAAgBE,iDAAiDA,O,qFAEjCxzD,EAAO5D,GACpE,KAAmB,MAAbA,EAAI4D,IAAcA,EAAM,GAC7BA,IAED,OAAOA,EAAM,I,mDAGdhO,KAAK+gE,wBAAwB,CAACkB,SAASjiE,KAAK84B,MAAMjsB,S,+BAQ1C,IAAD,QACH0a,EAAY,iCAChBA,GAAWvnB,KAAK84B,MAAMuoC,QAAQ,YAAY,gBAC1C,IAAMa,EAAYliE,KAAK84B,MAAMjsB,OAAQ7M,KAAK84B,MAAMjsB,KAAKs1D,OACrD,OAAQ,sBACR56C,UAAWA,EACXoQ,QAAS33B,KAAKk4B,aAAc2B,IAAK75B,KAAKy8B,YAF9B,UAGL,qBAAKlV,UAAU,iBAAiBiD,IAAG,UAAExqB,KAAK84B,MAAMjsB,YAAb,aAAE,EAAiBu1D,yBAAyBpiE,KAAK84B,MAAMkN,QAC1F,sBAAKze,UAAU,kBAAf,UACC,sBAAKA,UAAU,OAAf,oBAAuBvnB,KAAK84B,MAAMjsB,YAAlC,aAAuB,EAAiB/P,KACvC,cAAC,GAAD,CAAMwoD,iBAAkBtlD,KAAKghE,2BAA4BnnC,IAAK75B,KAAK8gE,QACnE,cAAC,GAAD,CAAYv5C,UAAU,0BAA0B8U,OAAQgmC,KAAc/jE,KAAK,GAAGq5B,QAAS33B,KAAKmhE,gCAE7F,sBAAK55C,UAAU,aAAf,UACC,sBAAKA,UAAU,SAAf,4BAA8BvnB,KAAK84B,MAAMjsB,YAAzC,aAA8B,EAAiBrC,UAC/C,sBAAK+c,UAAU,SAAf,cAA0BvnB,KAAK84B,MAAMjsB,KAAM,MAAMhL,EAAWu0C,eAAep2C,KAAK84B,MAAMjsB,KAAKuR,SAAS8jD,EAAS,MAAM,IAAI,SACvH,sBAAK36C,UAAU,QAAf,cAA0B26C,EAAYliE,KAAK84B,MAAMjsB,KAAKy1D,YAAnB,SAEpC,qBAAK/6C,UAAU,oBAAf,SACC,sBAAKA,UAAU,mBAAf,UACC,cAAC,KAAD,CAAiBoV,KAAM4lC,OADxB,UAEGviE,KAAK84B,MAAMjsB,YAFd,aAEG,EAAiBqF,eAGrB,0BAEAlS,KAAK84B,MAAM0oC,sD,8BAnFf,OAAOxhE,KAAK68D,a,GAxB2CrgE,cCKpCgmE,IADIplE,EAAlByC,iB,kDAEN,WAAYsB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVs9D,EAA6Et9D,EAA7Es9D,cAAezuB,EAA8D7uC,EAA9D6uC,aAAcC,EAAgD9uC,EAAhD8uC,gBAAiB4wB,EAA+B1/D,EAA/B0/D,eAAgBt+D,EAAepB,EAAfoB,cAFpD,OAGjB,EAAKkQ,eAAiBlQ,EACtB,EAAKq8D,qBAAqBH,EAC1B,EAAK7tB,sBAAwBZ,EAC7B,EAAKa,yBAA2BZ,EAChC,EAAK8wB,wBAA0BF,EAC/B,EAAKtmB,eAAiB7hB,IAAMC,YAC5B,EAAK8D,YAAc/D,IAAMC,YACzB,EAAK8pC,aAAc/pC,IAAMC,YACzB,EAAK+pC,UAAYhqC,IAAMC,YACvB,EAAKgqC,SAAWjqC,IAAMC,YACtB,EAAKiqC,YAAclqC,IAAMC,YACzB,EAAKwgC,eAAiB,KACtB,EAAK1+B,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAO,EAAKA,KAAKv6B,KAAV,gBACZ,EAAK0iE,UAAY,EAAKA,UAAU1iE,KAAf,gBACjB,EAAK2iE,mBAAqB,EAAKA,mBAAmB3iE,KAAxB,gBAC1B,EAAK4iE,yBAAyB,EAAKA,yBAAyB5iE,KAA9B,gBAC9B,EAAKo4C,cAAgB,KACrB,EAAKkC,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvb,YAAa/B,KAAK,EAAKA,OACxF,EAAKsoC,yBAA0B,EAAKA,yBAAyB7iE,KAA9B,gBAC/B,EAAK8iE,sBAAwB,EAAKA,sBAAsB9iE,KAA3B,gBAC7B,EAAK+iE,oBAAsB,EAAKA,oBAAoB/iE,KAAzB,gBAC3B,EAAKgjE,yBAA2B,KAChC,EAAKC,gCAAkChtC,GAAwBC,SAC/D,EAAKyC,MAAM,CAACjsB,KAAK,KAAM+uB,SAAQ,GA3Bd,E,iDA6BboK,EAAMn5B,EAAMtK,EAAe0xC,GAC/Bj0C,KAAKs5B,SAAS,CAACzsB,KAAK7M,KAAKqjE,MAAOznC,SAAQ,IACxC57B,KAAKy6C,mBAAmB7d,WACrB/vB,IAAK7M,KAAKqjE,MAAQx2D,GAClBm5B,IAAKhmC,KAAKsjE,MAAQt9B,GAClBhmC,KAAKqjE,QACPrjE,KAAKgjE,2BACLhjE,KAAKmjE,yBAA4BnjE,KAAKqjE,MAAMthD,KAAKyX,oBAE/Cya,EACFj0C,KAAKyiE,aAAavpC,QAAQ8jC,UAAU/oB,GAIjCj0C,KAAKojE,iCACPpjE,KAAKkjE,oBAAoBljE,KAAKojE,iCAGhCpjE,KAAKu4C,cAAcoC,OAAO36C,Q,6BAG1BA,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKgjE,2BACLhjE,KAAKu4C,cAAcE,U,sCAKJn2C,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAKu6C,eAAerhB,QAAQ0hB,gBAAgBt4C,K,iDAGxCtC,KAAKmjE,2BACTnjE,KAAKmjE,yBAAyB30D,UAC9BxO,KAAKmjE,yBAAyB,Q,gCAErBt2D,GACT,OAAG7M,KAAKyS,eAAepO,+BAAsC,GACvD,mBAAN,cAA0BwI,QAA1B,IAA0BA,OAA1B,EAA0BA,EAAMrC,U,2CAG/B,IAAMisB,EAAUz2B,KAAKy8B,YAAYvD,QACjC,YAAar7B,IAAV44B,GAA+B,OAAVA,EAAsB,EACvC,CAACA,EAAQ2C,YAAa3C,EAAQ4C,gB,iDAGtCr5B,KAAKk4C,mBAAmBl4C,KAAKk4C,kBAAkB1pC,Y,4CAE1Be,GACrBvP,KAAK+gE,0BACL/gE,KAAK06B,S,0CAEcojC,GAEnB,OADA99D,KAAKojE,gCAAiCtF,EAC/BA,GACN,KAAK1nC,GAAwBE,QAC5Bt2B,KAAK2iE,SAASzpC,QAAQwO,KAAK1nC,KAAKsjE,MAAOtjE,KAAKqjE,OAC7C,MACA,KAAKjtC,GAAwBG,YAC5Bv2B,KAAK4iE,YAAY1pC,QAAQwO,KAAK1nC,KAAKsjE,MAAOtjE,KAAKqjE,OAChD,MACA,KAAKjtC,GAAwBC,SAC5Br2B,KAAK0iE,UAAUxpC,QAAQwO,KAAK1nC,KAAKsjE,MAAOtjE,KAAKqjE,U,+BAK/C,IAAI97C,EAAU,6BAKd,OAJGvnB,KAAKyS,eAAepO,iCACtBkjB,GAAW,wCACTvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YAEb,sBAAKA,UAAWA,EAAWsS,IAAK75B,KAAKy8B,YAArC,UACC,cAAC,GAAD,CAAe5C,IAAK75B,KAAKu6C,eAAgBpd,MAAOn9B,KAAK6iE,UAAU7iE,KAAK84B,MAAMjsB,QAC1E,eAAC,GAAD,CAAUywD,sBAAuB,EAAGzjC,IAAK75B,KAAKyiE,aAAclF,YAAav9D,KAAKkjE,oBAA9E,UACC,cAAC,GAAD,CAA6BrpC,IAAK75B,KAAK0iE,UAAW71D,KAAM7M,KAAK84B,MAAMjsB,KAAMixD,OAAQ1nC,GAAwBC,SACxG2Z,aAAgBhwC,KAAK4wC,sBAAuBX,gBAAkBjwC,KAAK6wC,yBACnEgwB,eAAgB7gE,KAAKijE,sBAAuB1gE,cAAevC,KAAKyS,iBACjE,cAAC,GAAD,CAA4BonB,IAAK75B,KAAK2iE,SAAU7E,OAAQ1nC,GAAwBE,QAChFgqC,YAAetgE,KAAK8iE,mBAAoBrE,cAAgBz+D,KAAK4+D,qBAC7Dr8D,cAAevC,KAAKyS,iBACpB,cAAC,GAAD,CAA+BonB,IAAK75B,KAAK4iE,YAAa9E,OAAQ1nC,GAAwBG,YACtF+pC,YAAetgE,KAAK8iE,mBAAoBrE,cAAgBz+D,KAAK4+D,qBAC7Dr8D,cAAevC,KAAKyS,yB,+BA3DrB,OAAOiiC,GAASU,0B,GAzD+B54C,c,UCjB5B+mE,I,0HAISjhE,GAC5B,OAAOihE,EAAsBC,6BAA6BvtC,KAAK3zB,K,mDAH/D,OAAO,IAAIsR,OAAO,wD,MCFC6vD,G,0GAIAnhE,GACnB,OAAOmhE,EAAgBC,uBAAuBztC,KAAK3zB,K,6CAHnD,MAAO,6J,KCFHqhE,GAAuB,CAC5BC,OAAO,EACPC,WAAW,EACXC,UAAU,EAEXH,aAAsC,SAASI,GAC9C,OAAOA,GACN,KAAKJ,GAAuBC,OAC3B,MAAO,SACR,KAAKD,GAAuBE,WAC3B,MAAO,aACR,KAAKF,GAAuBG,UAC3B,MAAO,YACR,QACC,MAAM,IAAI9mE,MAAM,sBAGJ2mE,MCbR9jE,GAAkBzC,EAAlByC,iBACcmkE,G,WACpB,WAAYzsD,GAAQ,IAAD,2BAClB3G,GAAqB5Q,MADH,IAEbikE,EAAgG1sD,EAAhG0sD,6BAA8BF,EAAkExsD,EAAlEwsD,uBAAwBG,EAA0C3sD,EAA1C2sD,YAAaC,EAA6B5sD,EAA7B4sD,YAAaC,EAAgB7sD,EAAhB6sD,kBACnDvmE,IAA/BomE,GAAyE,OAA/BA,GAC5CpkE,GAAiB,gCAClBG,KAAKqkE,8BAAgCJ,OACTpmE,IAAzBkmE,GAA6D,OAAzBA,IACtCA,EAAuBJ,GAAuBC,QAC/C5jE,KAAKskE,wBAA0BP,EAC/B/jE,KAAKukE,oBAAsB,EAC3BvkE,KAAKwkE,aAAaL,EAClBnkE,KAAKykE,cAAgBL,EACrBpkE,KAAK0kE,aAAeR,EACpBlkE,KAAK2kE,eAAgB3kE,KAAK2kE,eAAexkE,KAAKH,MAC9CyR,GAAczR,KAAM,0BAA0B,kBAAI,EAAKskE,2BAAyB,SAAChiE,GAAD,OAAS,EAAKgiE,wBAA0BhiE,KACxHmP,GAAczR,KAAM,sBAAsB,kBAAI,EAAKukE,uBAAqB,SAACjiE,GAAD,OAAS,EAAKiiE,oBAAsBjiE,KAC5GmP,GAAczR,KAAM,eAAe,kBAAI,EAAKwkE,gBAAc,SAACliE,GAAD,OAAS,EAAKkiE,aAAeliE,K,2DAqBzEsiE,GACX5kE,KAAKskE,0BAA4BM,EAASb,yBAC5C/jE,KAAKskE,wBAA0BM,EAASb,uBACxC/jE,KAAK6Q,gBAAgBZ,QAAQ,yBAA0BjQ,KAAK+jE,8BAG5BlmE,IAA9B+mE,EAASC,oBAA8D,OAA9BD,EAASC,oBAC/C7kE,KAAKukE,sBAAwBK,EAASC,qBAC3C7kE,KAAKukE,oBAAsBK,EAASC,mBACpC7kE,KAAK6Q,gBAAgBZ,QAAQ,qBAAsBjQ,KAAK6kE,0BAG/BhnE,IAAvB+mE,EAAST,aAAgD,OAAvBS,EAAST,aAC3CnkE,KAAKwkE,eAAiBI,EAAST,cACjCnkE,KAAKwkE,aAAeI,EAAST,YAC1BnkE,KAAKwkE,cACPxkE,KAAK6Q,gBAAgBZ,QAAQ,cAAejQ,KAAKmkE,gB,6CAjCnD,OAAOnkE,KAAKskE,0B,mDAGZ,OAAOtkE,KAAKqkE,gC,yCAGZ,OAAOrkE,KAAKukE,sB,mCAGZ,OAAOvkE,KAAKykE,gB,kCAGZ,OAAOzkE,KAAKwkE,e,kCAGZ,OAAOxkE,KAAK0kE,iB,KCvCOI,G,WACpB,WAAY3jE,GAAO,oBACaA,EAAxB4jE,aAAwB5jE,EAAVyD,SADH,IAEZogE,EAASn7C,SAASC,cAAc,UACtCk7C,EAAOx6C,IAAP,sDAA4DxqB,KAAKilE,eACjEp7C,SAASqR,KAAKD,YAAY+pC,GAC1BA,EAAOv3D,iBAAiB,QAAQ,WAC/BvO,OAAOgmE,UAAYhmE,OAAOgmE,WAAa,GACvCJ,EAAgBK,MAAM,KAAM,IAAI7T,MAChCwT,EAAgBK,MAAM,SAAU,qBAEjCH,EAAOv3D,iBAAiB,QAAS7Q,QAAQC,O,yDAK3B,IAAD,EAAC,UAAAqC,OAAOgmE,iBAAP,SAAkB3kE,KAAKK,a,mDACFgE,GACnC,IACCkgE,EAAgBK,MAAM,QAAS,mBAAoB,CACjD,eAAkB,sBAClB,YAAevgE,IAGlB,MAAMjG,GACL/B,QAAQC,MAAM8B,M,6CAGciG,EAAUqiB,GACvC,IACC69C,EAAgBK,MAAM,QAAS,mBAAoB,CACjD,eAAkB,gBAClB,YAAc,GAAd,OAAkBvgE,EAAlB,mBAAqCqiB,KAGxC,MAAMtoB,GACL/B,QAAQC,MAAM8B,M,+BAtBf,OAAOmmE,EAAgBM,c,KChBJC,G,oGACNvoE,GAEb,IAEC,IAAI4f,EAAOxd,OAAOomE,aAAaC,QAAQzoE,GACvC,QAAUe,IAAP6e,GAAyB,OAAPA,EAAY,OACjC,OAAOle,KAAKC,MAAMie,GAEnB,MAAM8oD,GAEL,U,6BAGY1oE,EAAMqO,GAEnB,IAECjM,OAAOomE,aAAaG,QAAQ3oE,EAAM0B,KAAKogD,UAAUzzC,IAElD,MAAMq6D,GAEL5oE,QAAQC,MAAM2oE,Q,KClBXE,IADsCtoE,EAApCyC,iBAAoCzC,EAAlB0C,eACN,gBACC6lE,G,WAMpB,aAAc,oBACb3lE,KAAK4lE,cAAgBP,GAAmBQ,OAAOH,I,0DAH/C,OAFIC,EAAeP,YAClBO,EAAeP,UAAY,IAAIO,GACzBA,EAAeP,c,yDAgBtBplE,KAAK8lE,aAAe,O,iCAXJxjE,GAChBtC,KAAK4lE,cAAgBtjE,EACrB+iE,GAAmBU,OAAOL,GAAepjE,I,eAGzC,OAAOtC,KAAK4lE,gB,0CAGZ,YAA4B/nE,IAArBmC,KAAK4lE,eAAgD,OAArB5lE,KAAK4lE,eAA2C,KAArB5lE,KAAK4lE,kB,KCbpDI,IADI5oE,EAAlByC,iB,WAEN,WAAY0X,GAAQ,oBACnB/J,EAAYxN,MACZA,KAAKimE,yBAA2B,GAChCjmE,KAAKkmE,yDAA2D,IAAIh5C,IACpEltB,KAAKmmE,uEACJnmE,KAAKmmE,uEAAuEhmE,KAAKH,MAClFA,KAAKomE,2BAA4BpmE,KAAKomE,2BAA2BjmE,KAAKH,MACtEA,KAAKqmE,qCAAsCrmE,KAAKqmE,qCAAqClmE,KAAKH,MAC1FA,KAAKsmE,wBAAyBtmE,KAAKsmE,wBAAwBnmE,KAAKH,MAChEA,KAAKumE,0BAA2BvmE,KAAKumE,0BAA0BpmE,KAAKH,MACpEA,KAAKwmE,wCAAyCxmE,KAAKwmE,wCAAwCrmE,KAAKH,MAChGA,KAAKymE,iDAAmDzmE,KAAKymE,iDAAiDtmE,KAAKH,MACnHA,KAAK0mE,wBAAyB1mE,KAAK0mE,wBAAwBvmE,KAAKH,MAChEA,KAAK2mE,0CAA4C,IAAI95B,GAAM,CAC1Dxe,MAAM,IACNC,SAAStuB,KAAKqmE,qCACdv5B,QAAQ,IAET9sC,KAAK0mE,0B,wDASH,IAAD,OADD9hE,EACC,EADDA,SAAUC,EACT,EADSA,SAAUq/D,EACnB,EADmBA,YAAa/mC,EAChC,EADgCA,MAAOypC,EACvC,EADuCA,UAAWC,EAClD,EADkDA,QAASC,EAC3D,EAD2DA,MAAOC,EAClE,EADkEA,YAAaC,EAC/E,EAD+EA,aAAcC,EAC7F,EAD6FA,sBAAuBC,EACpH,EADoHA,mBAErH,OAAO,IAAI3pE,SAAQ,SAACO,EAASC,GAC5B,IAAMm9B,EAAO,CACZisC,YAAW,EACXviE,SAASC,EACTq/D,YAAYA,EACZkD,OAAM,EACNC,SAAS,CACRlqC,QACAypC,YACAC,UACAC,QACAC,cACAC,eACAC,yBAEDnB,aAAaH,GAAe2B,SAASxB,cAEnCgB,GAAOA,EAAMjkE,cAAcC,QAAQ,mBAAmB,IACrDokE,EACFpC,GAAgByC,uBAAuB3iE,EAAUs/D,EAAY,GAAG15D,QAEhEs6D,GAAgB0C,6BAA6B5iE,IAE/C5G,MAAMkO,EAAKu7D,6BAA6B,EAAKh1D,gBAAiB,CAC5DxU,OAAQ,OACRC,YAAa,cACbg9B,KAAK18B,KAAKogD,UAAU1jB,KACnB98B,MAAK,SAACC,GACRA,EAASC,OAAOF,MAAK,SAAAwrC,GACpB,IAAM89B,EAAkBlpE,KAAKC,MAAMmrC,GACnC,EAAKu8B,uEAAuEuB,GAC5E5pE,EAAQ4pE,MACNhpE,MAAMX,MACPW,MAAMX,Q,6FAG4D2pE,QACpC7pE,IAA/B6pE,EAAgB5B,cAAyD,OAA/B4B,EAAgB5B,eAC5DH,GAAe2B,SAASxB,aAAe4B,EAAgB5B,cAEpD4B,EAAgBzD,+BACpBjkE,KAAKomE,2BAA2B,IAAIpC,GAAuB,CAC1DC,6BAA6ByD,EAAgBzD,6BAC7CG,aAAasD,EAAgBtD,aAC7BuD,UAAUD,EAAgBC,UAC1BzD,YAAYwD,EAAgBxD,YAC5BC,YAAYuD,EAAgBvD,eAE7BnkE,KAAK2mE,0CAA0Ct5B,W,iDAErBu6B,GAC1B5nE,KAAKimE,yBAAyB1lE,KAAKqnE,GACnC5nE,KAAKkmE,yDACHrsD,IAAI+tD,EAAuB3D,6BAA8B2D,GAC3D5nE,KAAKwmE,4C,gDAEoB,IAAD,OACvB,IAAIb,GAAe2B,SAASO,oBAG3B,OAFAlC,GAAe2B,SAASQ,yBACxB9nE,KAAKymE,mDAGN,IAAMvrC,EAAO,CACZ4qC,aAAaH,GAAe2B,SAASxB,cAEhCloE,EAAMsO,EAAK67D,8CACjB/pE,MAAMJ,EAAK,CACVK,OAAQ,OACRC,YAAa,cACbg9B,KAAK18B,KAAKogD,UAAU1jB,KAClB98B,MAAK,SAACC,GACRA,EAASC,OAAOF,MAAK,SAAAwrC,GACpB,IAAM89B,EAAkBlpE,KAAKC,MAAMmrC,GACnC,EAAK28B,0BAA0BmB,MAC7BhpE,MAAM9B,QAAQC,UACf6B,MAAM9B,QAAQC,S,6DAEoB,IAAD,OACrC,IACC,IAAMmrE,EAA8ChoE,KAAKimE,yBACvD5jE,QAAO,SAAAulE,GAAsB,OAAEA,EAAuB7D,yBAAyBJ,GAAuBG,aACtG95D,KAAI,SAAA49D,GAAsB,OAAEA,EAAuB3D,gCACrD,GAAG+D,EAA4CxoE,OAAO,EAErD,YADAQ,KAAK2mE,0CAA0CztD,QAGhD,IAAIysD,GAAe2B,SAASO,oBAG3B,OAFAlC,GAAe2B,SAASQ,yBACxB9nE,KAAKymE,mDAGN,IAAMvrC,EAAO,CACZ+sC,8BAA8BD,EAC9BlC,aAAaH,GAAe2B,SAASxB,cAEhCloE,EAAMsO,EAAKg8D,qCACjBlqE,MAAMJ,EAAK,CACVK,OAAQ,OACRC,YAAa,cACbg9B,KAAK18B,KAAKogD,UAAU1jB,KAClB98B,MAAK,SAACC,GACRA,EAASC,OAAOF,MAAK,SAAAwrC,GACpB,IAAM89B,EAAkBlpE,KAAKC,MAAMmrC,GACnC,EAAK08B,wBAAwBoB,MAC3BhpE,MAAM9B,QAAQC,UACf6B,MAAM9B,QAAQC,OAElB,MAAM8B,GACL/B,QAAQC,MAAM8B,M,gDAGU+oE,GAAiB,IAAD,SACzC,UAAAA,EAAgBS,kBAAhB,SAA4B/4D,SAAQ,SAAAw1D,GACnC,IAAIgD,EAAyB,EAAK1B,yDAAyDpsD,IAC1F8qD,EAASX,8BACN2D,EAKHA,EAAuBjD,eAAeC,IAJtCgD,EAAyB,IAAI5D,GAAuBY,GACpD,EAAKwB,2BAA2BwB,S,8CAMXF,GAAiB,IAAD,OACpCA,EAAgBU,gBAClBpoE,KAAKymE,mDAGNiB,EAAgBS,WAAW/4D,SAAQ,SAAAw1D,GAClC,IAAMgD,EAAyB,EAAK1B,yDAAyDpsD,IAAI8qD,EAASX,8BACtG2D,GACJA,EAAuBjD,eAAeC,Q,yEAGW,IAAD,OAC3CyD,EAA4B,GAC5BC,EAAW,GACjBtoE,KAAKimE,yBAAyB72D,SAAQ,SAAAw4D,GAClCA,EAAuB7D,yBAAyBJ,GAAuBG,UACzEuE,EAA2B9nE,KAAKqnE,GAEhCU,EAAS/nE,KAAKqnE,MAEhBU,EAASl5D,SAAQ,SAAAw4D,GAAsB,OACtC,EAAK1B,yDAAyD7sD,OAAOuuD,EAAuB3D,iCAE7FjkE,KAAKimE,yBAA2BoC,EAChCroE,KAAKwmE,4C,gEAGLxmE,KAAKiO,cAAc,CAAC5Q,KAAK,iCAAkCkrE,wBAAwBvoE,KAAKimE,8B,gCA3JxF,OAFID,EAAiBZ,YACpBY,EAAiBZ,UAAY,IAAIY,GAC3BA,EAAiBZ,c,MCZlBvlE,GAAoCzC,EAApCyC,iBACa2oE,IADuBprE,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVsnE,EAA+EtnE,EAA/EsnE,gBAAiBC,EAA8DvnE,EAA9DunE,kBAAmBC,EAA2CxnE,EAA3CwnE,sBAAuBp4B,EAAoBpvC,EAApBovC,iBAFjD,OAGjB,EAAKC,kBAAoBD,EACrBk4B,GAAgB5oE,GAAiB,mBACrC,EAAK+oE,iBAAmBH,EACxB,EAAKI,uBAAyBF,EAC9B,EAAKG,mBAAqBJ,EAC1B,EAAKnuB,eAAiB7hB,IAAMC,YAC5B,EAAKF,SAAWC,IAAMC,YACtB,EAAKowC,UAAYrwC,IAAMC,YACvB,EAAKqwC,cAAgBtwC,IAAMC,YAC3B,EAAKswC,YAAcvwC,IAAMC,YACzB,EAAKuwC,gBAAkBxwC,IAAMC,YAC7B,EAAKwwC,uBAAyBzwC,IAAMC,YACpC,EAAKywC,uBAAyB1wC,IAAMC,YACpC,EAAK0wC,sBAAwB3wC,IAAMC,YACnC,EAAK2wC,UAAY5wC,IAAMC,YACvB,EAAK4wC,0BAA4B7wC,IAAMC,YACvC,EAAK8B,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKunC,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAKo4C,cAAiB,KACtB,EAAKkC,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvf,SAAUiC,KAAK,EAAKA,OACrF,EAAK8uC,eAAiB,KACtB,EAAKC,wBAAwB,EAC7B,EAAKC,qBAAuB,EAAKA,qBAAqBvpE,KAA1B,gBAC5B,EAAKwpE,kBAAmB,EAAKA,kBAAkBxpE,KAAvB,gBACxB,EAAKypE,mBAAqB,EAAKA,mBAAmBzpE,KAAxB,gBAC1B,EAAK0pE,uBAAyB,EAAKA,uBAAuB1pE,KAA5B,gBAC9B,EAAK2pE,qBAAuB,EAAKA,qBAAqB3pE,KAA1B,gBAC5B,EAAK4pE,mBAAqB,EAAKA,mBAAmB5pE,KAAxB,gBAC1B,EAAK6pE,yBAA2B,EAAKA,yBAAyB7pE,KAA9B,gBAChC,EAAK8pE,8BAAgC,EAAKA,8BAA8B9pE,KAAnC,gBACrC,EAAK+pE,cAAgB,EAAKA,cAAc/pE,KAAnB,gBACrB,EAAKgqE,qBAAuB,EAAKA,qBAAqBhqE,KAA1B,gBAC5B,EAAKiqE,eAAe,EAAKA,eAAejqE,KAApB,gBACpB,EAAKkqE,mBAAqB,EAAKA,mBAAmBlqE,KAAxB,gBAC1B,EAAKmqE,sBAAwB,EAAKA,sBAAsBnqE,KAA3B,gBAC7B,EAAKoqE,gCAAkC,EAAKA,gCAAgCpqE,KAArC,gBACvC,EAAKqqE,uCAAyC,EAAKA,uCAAuCrqE,KAA5C,gBAC9C,EAAKsqE,iBAAkB,EAAKA,iBAAiBtqE,KAAtB,gBACvB,EAAKuqE,uCAAwC,EAAKA,uCAAuCvqE,KAA5C,gBAC7C,EAAKwqE,4CAA6C,EAAKA,4CAA4CxqE,KAAjD,gBAClD,EAAKyqE,oBAAsB,EAAKA,oBAAoBzqE,KAAzB,gBAC3B,EAAK0qE,eAAiB,EAAKA,eAAe1qE,KAApB,gBACtB,EAAK24B,MAAQ,CAACgyC,YAAW,EAAOlvC,SAAQ,EAAOmvC,YAAW,EACzDC,YAAW,EAAMC,kBAAiB,EAAMC,gBAAe,EACvDC,cAAa,EAAMlE,uBAAsB,GAC1C,EAAKpiC,gBAAkB,IAAI7vB,GAjDV,E,iDAmDb7T,GAAO,IACJ0f,GAAQ1f,GAAO,IAAf0f,MACP7gB,KAAKorE,eAAiBvqD,EACtB7gB,KAAKy6B,S,6BAGLz6B,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKu4C,cAAcoC,OAAO36C,MAC1BA,KAAKy6C,mBAAmB7d,a,6BAGxB58B,KAAKorE,eAAiB,KACtBprE,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKu4C,cAAcE,QACnBz4C,KAAKsqE,0B,sCAEUhoE,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAKu6C,eAAerhB,QAAQ0hB,gBAAgBt4C,K,8CAMzCtC,KAAKwpE,gBAAgBxpE,KAAKwpE,eAAetwC,SAC3Cl5B,KAAKwpE,eAAetwC,QAAQ1qB,UAC7BxO,KAAKwpE,eAAgB,O,wDAGrBxpE,KAAKwpE,eAAiBxsC,GAAOquC,OAAO,CACnCluC,MAAM,QACN5V,UAAU,0CACV7qB,QAAQ,0FACRwgC,QAAQ,CAAC,CAAC5+B,KAAK,KAAMgwB,SAAStuB,KAAK06B,W,+DAIpC16B,KAAKwpE,eAAiBxsC,GAAOquC,OAAO,CACnCluC,MAAM,QACN5V,UAAU,0CACV7qB,QAAQ,wCACRwgC,QAAQ,CAAC,CAAC5+B,KAAK,W,6CAGM,IAAD,OACrB,IAAG0B,KAAK84B,MAAMgyC,YACV9qE,KAAKsrE,wBAAT,CAFqB,MAICtrE,KAAK4oE,mBAJN,oBAKf2C,GALe,UAKMvrE,KAAK6oE,0BAEhC,KADqB7oE,KAAKorE,gBAAgBprE,KAAKorE,eAAe5rE,OAAO,IAAK+rE,EAAmB/rE,OAAO,EAGnGQ,KAAKuqE,uCAGN,GAAIvqE,KAAKypE,uBAAT,CAKA,IAAM//B,EAAgB1pC,KAAK6kC,gBAAgB1vB,OAC3C,IACC,IAAM+uD,GAAelkE,KAAKorE,eAAeprE,KAAKorE,eAAeG,GAAoBvhE,KAAI,SAAA0uD,GAAY,OAAEA,EAAaluD,UAC1G08D,IAAqBlnE,KAAKorE,eAC1B7oE,EAAgBvC,KAAKwwC,oBACnB5rC,EAAqBrC,EAArBqC,SAAUC,EAAWtC,EAAXsC,SAClB7E,KAAK6qE,gBAAe,GACpB7E,GAAiBsB,SAASkE,SAAS,CAClC5mE,WACAC,WACAqiE,qBACAhD,cACA/mC,MAAMn9B,KAAKq+D,OACXuI,UAAU5mE,KAAKyrE,WACf5E,QAAQ7mE,KAAK0rE,SACb5E,MAAM9mE,KAAK2rE,OACX5E,YAAY/mE,KAAK4rE,aACjB5E,aAAahnE,KAAKyqE,mBAClBxD,sBAAsBjnE,KAAKypE,yBACzBrrE,MAAK,SAACspE,GACR,EAAKmD,gBAAe,GACpBnhC,EAAcl7B,UACd,EAAKo8D,oBAAoBlD,MACvBhpE,OAAM,SAACC,GACT,EAAKksE,gBAAe,GACpBjuE,QAAQC,MAAM8B,GACd+qC,EAAcl7B,aAGhB,SACCxO,KAAK6qE,gBAAe,GACpBnhC,EAAcl7B,gBAlCdxO,KAAKwqE,4C,qCAqCQloE,GACdtC,KAAKs5B,SAAS,CAACwxC,WAAWxoE,M,0CAEPolE,GAEnB,GADA1nE,KAAKsqE,yBACD5C,EAAgB7qE,MASnB,OARAmD,KAAK06B,YACL16B,KAAKwpE,eAAiBxsC,GAAOquC,OAAO,CACnCluC,MAAM,UACN5V,UAAU,oCACV7qB,QAAQ,8DACR0gC,aAAap9B,KAAK06B,KAClBwC,QAAQ,CAAC,CAAC5+B,KAAK,KAAMgwB,SAAStuB,KAAK8oE,wBAIrClsE,QAAQC,MAAM6qE,EAAgB7qE,OAC9BmD,KAAKwpE,eAAiBxsC,GAAOquC,OAAO,CACnCluC,MAAM,QACN5V,UAAU,0CACV7qB,QAAQ,oDACRwgC,QAAQ,CAAC,CAAC5+B,KAAK,QAASgwB,SAAStuB,KAAK0pE,sBAAuB,CAACprE,KAAK,KAAMgwB,SAAStuB,KAAK06B,W,yCAIxF,IAAIt3B,EAAO,GAOX,OANGpD,KAAKopE,uBAAuBlwC,QAAQmjB,SACtCj5C,EAAK7C,KAAK,SACRP,KAAKmpE,uBAAuBjwC,QAAQmjB,SACtCj5C,EAAK7C,KAAK,SACRP,KAAKqpE,sBAAsBnwC,QAAQmjB,SACrCj5C,EAAK7C,KAAK,QACJ6C,EAAKI,KAAK,O,0GAKA5F,GACjB,IAAMiuE,EAAOhiD,SAASC,cAAc,KACpC+hD,EAAK1iE,KAAOvL,EACZiuE,EAAK19D,OAAO,SACZ09D,EAAKC,SAAW,eAChBD,EAAKE,U,yCAEax8D,GAClBvP,KAAKq+D,OAAS9uD,EAAEpB,OAAO7L,MACvBtC,KAAKs5B,SAAS,CAACyxC,WAAW/qE,KAAKkqE,cAAclqE,KAAKq+D,Y,6CAE5B9uD,GACtBvP,KAAKyrE,WAAal8D,EAAEpB,OAAO7L,MAC3BtC,KAAKs5B,SAAS,CAAC4xC,eAAelrE,KAAKkqE,cAAclqE,KAAKyrE,gB,2CAElCl8D,GACpBvP,KAAK0rE,SAAWn8D,EAAEpB,OAAO7L,MACzBtC,KAAKs5B,SAAS,CAAC6xC,aAAanrE,KAAKkqE,cAAclqE,KAAK0rE,c,+CAE5Bn8D,GACxBvP,KAAK4rE,aAAer8D,EAAEpB,OAAO7L,MAC7BtC,KAAKs5B,SAAS,CAAC2xC,iBAAiBjrE,KAAKkqE,cAAclqE,KAAK4rE,kB,yCAEtCr8D,GAClBvP,KAAK2rE,OAASp8D,EAAEpB,OAAO7L,MACvBtC,KAAKs5B,SAAS,CAAC0xC,WAAWhrE,KAAKkqE,cAAclqE,KAAK2rE,Y,oCAErCrtE,EAAM0tE,GAEnB,YADgBnuE,IAAbmuE,IAAuBA,GAAW,QACvBnuE,IAAPS,GAAyB,OAAPA,IAAc0tE,GAAY1tE,EAAKkB,OAAO,K,2CAE3ClB,EAAM0tE,GAE1B,QADYhsE,KAAKkqE,cAAc5rE,EAAM0tE,QAElC1tE,EAAKkB,OAAO,GAAGwsE,IACXzI,GAAsB0I,sBAAsB3tE,M,qCAErCA,EAAM0tE,GAEpB,QADYhsE,KAAKkqE,cAAc5rE,EAAM0tE,QAElC1tE,EAAKkB,OAAO,GAAGwsE,IACXvI,GAAgByI,aAAa5tE,M,8CAGpC,IAAMysE,EAAa/qE,KAAKkqE,cAAclqE,KAAKq+D,QAAQ,GAC7C6M,EAAgBlrE,KAAKkqE,cAAclqE,KAAKyrE,YAAY,GACpDN,EAAcnrE,KAAKkqE,cAAclqE,KAAK0rE,UAAU,GAChDV,EAAYhrE,KAAKoqE,eAAepqE,KAAK2rE,QAAQ,GAC7CV,EAAkBjrE,KAAKmqE,qBAAqBnqE,KAAK4rE,cAAc,GAQrE,OAPA5rE,KAAKs5B,SAAS,CACbyxC,WAAWA,EACXG,eAAeA,EACfC,aAAaA,EACbH,WAAWA,EACXC,iBAAiBA,IAEXF,GAAYG,GAAgBC,GAAcH,GAAYC,I,yCAE3CnuE,EAAMqvE,GACxB,MAAM,GAAN,OAAUrvE,EAAV,6BAAmCqvE,EAAM,QAAQ,a,sDAGjDnsE,KAAKu4C,cAAcsB,eAAenF,GAASc,kB,kEAEAjmC,GAC3CvP,KAAKypE,uBAAyBl6D,EAAE8sC,QAChCr8C,KAAKs5B,SAAS,CAAC2tC,sBAAsBjnE,KAAKypE,2B,+BAG1C,IAAIliD,EAAY,2BACbvnB,KAAK84B,MAAM8C,UACbrU,GAAY,YACb,IAAM6kD,EAA6B,WAAWpsE,KAAK84B,MAAMgyC,WAAW,SAAS,MAC7E,OACC,sBAAKvjD,UAAWA,EAAWsS,IAAK75B,KAAKy4B,SAArC,UACC,cAAC,GAAD,CAAeoB,IAAK75B,KAAKu6C,eAAgBpd,MAAM,uBAC/C,sBAAK5V,UAAU,UAAf,UACC,sBAAKA,UAAU,SAAf,UACC,uBAAOlqB,KAAK,OAAOk/B,SAAUv8B,KAAK84B,MAAMgyC,WAAYvjD,UAAWvnB,KAAKqqE,mBAAmB,QAAUrqE,KAAK84B,MAAMiyC,YAAasB,YAAY,QAAQnxD,SAAUlb,KAAK4pE,mBAAoB/vC,IAAK75B,KAAK+oE,YAC1L,uBAAO1rE,KAAK,OAAOk/B,SAAUv8B,KAAK84B,MAAMgyC,WAAYvjD,UAAWvnB,KAAKqqE,mBAAmB,aAAerqE,KAAK84B,MAAMoyC,gBAAiBmB,YAAY,WAAWnxD,SAAUlb,KAAK6pE,uBAAyBhwC,IAAK75B,KAAKgpE,gBAC3M,uBAAO3rE,KAAK,OAAOk/B,SAAUv8B,KAAK84B,MAAMgyC,WAAYvjD,UAAWvnB,KAAKqqE,mBAAmB,UAAYrqE,KAAK84B,MAAMqyC,cAAekB,YAAY,UAAUnxD,SAAUlb,KAAK8pE,qBAAqBjwC,IAAK75B,KAAKipE,cACjM,uBAAO5rE,KAAK,OAAOk/B,SAAUv8B,KAAK84B,MAAMgyC,WAAYvjD,UAAWvnB,KAAKqqE,mBAAmB,eAAiBrqE,KAAK84B,MAAMmyC,kBAAmBoB,YAAY,eAAenxD,SAAUlb,KAAKgqE,yBAAyBnwC,IAAK75B,KAAKkpE,kBACnN,uBAAO7rE,KAAK,OAAOk/B,SAAUv8B,KAAK84B,MAAMgyC,WAAYvjD,UAAWvnB,KAAKqqE,mBAAmB,QAAUrqE,KAAK84B,MAAMkyC,YAAaqB,YAAY,2BAA2BnxD,SAAUlb,KAAK+pE,mBAAoBlwC,IAAK75B,KAAKspE,eAI9M,sBAAK/hD,UAAU,iBAAf,UACA,qKAEA,2FACD,qBAAIA,UAAU,GAAd,UACC,oBAAIA,UAAU,gBAAd,SACC,cAAC,GAAD,CAAUsS,IAAK75B,KAAKopE,uBAAwBztB,MAC1C,CAAE,sBAA8Bp0B,UAAU,YAAYo1B,EAAE,iHAA3CjkC,GAAWC,aAI3B,oBAAI4O,UAAU,gBAAd,SACC,cAAC,GAAD,CAAUsS,IAAK75B,KAAKmpE,uBAAwBxtB,MAC1C,CAAE,sBAA8Bp0B,UAAU,YAAYo1B,EAAE,oPAA3CjkC,GAAWC,aAI3B,oBAAI4O,UAAU,gBAAd,SACC,cAAC,GAAD,CAAUsS,IAAK75B,KAAKqpE,sBAAsB1tB,MACxC,CAAE,sBAA8Bp0B,UAAU,YAAYo1B,EAAE,uHAA3CjkC,GAAWC,gBAK5B,mBAAG4O,UAAU,aAAb,gFAEA,sBAAKA,UAAU,iBAAf,UACC,qBAAKA,UAAU,OAAf,SACA,sBAAKq1B,MAAM,6BAA6BC,QAAQ,YAAhD,UACC,sBAAMF,EAAE,kBAAkBD,KAAK,SAE/B,sBAAMC,EAAE,iLAIT,qBAAKp1B,UAAU,OAAf,sGAED,qBAAKA,UAAU,gBAAf,SACC,qBAAKA,UAAU,QAAf,SACC,eAAC,GAAD,CAAUjpB,KAAK,GAAG4c,SAAUlb,KAAK2qE,4CAAjC,0CAC6B,mBAAGx8D,OAAO,SAASwpB,QAAS33B,KAAKiqE,8BAAjC,mCAG/B,cAAC,GAAD,CAAY1iD,UAAW6kD,EAA6B9tE,KAAK,mBAAmBi+B,SAAUv8B,KAAK84B,MAAMgyC,WAAYnzC,QAAS33B,KAAK0pE,uBAC3H,cAAC,GAAD,CAAShlC,eAAgB1kC,KAAK6kC,0B,+BAjPhC,OAAO6P,GAASW,wB,GA1E8B74C,cCX3B8vE,I,OADuBlvE,EAApCyC,iBAAoCzC,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,8BACjB,cAAMA,IACDo3C,cAAiB,KACtB,EAAKL,kBAAoB,KACzB,EAAKzb,YAAc/D,IAAMC,YACzB,EAAK4zC,WAAa7zC,IAAMC,YACxB,EAAK6zC,mBAAmB9zC,IAAMC,YAC9B,EAAKuY,qBAAuBxY,IAAMC,YAClC,EAAK8zC,kBAAoB/zC,IAAMC,YAC/B,EAAK8B,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKunC,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAKytD,8BAAgC,EAAKA,8BAA8BztD,KAAnC,gBACrC,EAAK4lC,yBAA0B,EAAKA,yBAAyB5lC,KAA9B,gBAC/B,EAAKusE,kBAAmB,EAAKA,kBAAkBvsE,KAAvB,gBACxB,EAAKs6C,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvb,YAAa/B,KAAK,EAAKA,OACxF,EAAK5B,MAAM,CAAC8C,SAAQ,EAAOh+B,IAAI,KAAMiqC,KAAK,GAC1C,EAAKjC,SAAW,EAChB,EAAKC,SAAW,EAlBC,E,iDAoBbtuB,GAAQ,IAER3Z,EAFO,OACLqa,EAAkBV,EAAlBU,MAAOymD,EAAWnnD,EAAXmnD,QAEb,GAAGzmD,aAAiBlB,GACnB,MAAM,IAAI/Z,MAAM,mBAGhB,GAAmB,kBAATib,EACT,MAAM,IAAIjb,MAAM,mBACjBY,EAAMqa,EAEPra,GAAO8gE,GAAgB,IAAI1/D,EAAUuU,iBAAiB3V,GACtDoC,KAAKkxC,qBAAqBhY,QAAQwO,KAAK9pC,GACvCoC,KAAKy6B,OACLllB,YAAW,WACV,EAAK27B,qBAAqBhY,QAAQ4N,QAAQ,EAAKlB,YAC9C,K,6BAOF5lC,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKy6C,mBAAmB7d,WACxB58B,KAAKu4C,cAAcoC,OAAO36C,Q,6BAG1BA,KAAKkxC,qBAAqBhY,QAAQ4N,QAAQ9mC,KAAK4lC,UAC/C5lC,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKu4C,cAAcE,U,sCAEJn2C,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAKysE,kBAAkBvzC,QAAQ0hB,gBAAgBt4C,K,oDAElBA,GAC7BtC,KAAKkxC,qBAAqBhY,QAAQ4N,QAAQxkC,K,iDAG1C,IAAMymC,EAAe/oC,KAAKwsE,mBAAmBtzC,QAC7C,OAAkB,OAAf6P,EAA2B,EACvBA,EAAa3P,YAAY2P,EAAa1P,e,wCAE5B/2B,GACjBtC,KAAKusE,WAAWrzC,QAAQkrB,SAAS9hD,K,+BAGjC,IAAIilB,EAAW,oBACZvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YACZ,IAAMolD,EAAU,qBAAKplD,UAAU,iBAAf,SACb,cAAC,GAAD,CAAQsS,IAAK75B,KAAKusE,WAAY1oB,cAAc,EAAM9zB,IAAK/vB,KAAK4lC,SAAU5V,IAAKhwB,KAAK6lC,SAAU8d,QAAS3jD,KAAK4lC,SAAUge,eAAgB5jD,KAAK4tD,kCAE1I,OAAQ,sBAAKrmC,UAAWA,EAAWoQ,QAAS33B,KAAKk4B,aAAc2B,IAAK75B,KAAKy8B,YAAjE,UACN,cAAC,GAAD,CAAe5C,IAAK75B,KAAKysE,kBAAmBtvC,MAAOwvC,IACnD,qBAAKplD,UAAU,6BAA6BsS,IAAK75B,KAAKwsE,mBAAtD,SACC,cAAC,GAAD,CAAkB3yC,IAAK75B,KAAKkxC,qBAAsBvL,iBAAkB3lC,KAAKwsE,mBAAoBjnC,wBAAyBvlC,KAAK+lC,yBAA0BP,yBAA0BxlC,KAAK0sE,kBAAmBjnC,QAASzlC,KAAK6lC,SAAUH,QAAS1lC,KAAK4lC,kB,+BAtChP,OAAO8O,GAASa,iB,GAzCuB/4C,cCJjCqD,I,cAAoCzC,EAApCyC,kBACa+sE,IADuBxvE,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV83B,EAAyC93B,EAAzC83B,UAAW4zC,EAA8B1rE,EAA9B0rE,cAAetqE,EAAepB,EAAfoB,cAFhB,OAGjB,EAAKkQ,eAAiBlQ,EAClB02B,GAAUp5B,GAAiB,aAC/B,EAAKo9C,eAAiBvkB,IAAMC,YAC5B,EAAKm0C,qBAAuBD,EAC5B,EAAKE,uBAAyB,EAAKA,uBAAuB5sE,KAA5B,gBAC9B,EAAK6sE,kBAAoB,EAAKA,kBAAkB7sE,KAAvB,gBACzB,EAAK+3B,aAAe,EAAKA,aAAa/3B,KAAlB,gBACpB,EAAK8sE,WAAah0C,EAClB,EAAK/Z,WAAY,EACjB,EAAK4Z,MAAO,GAZK,E,gEAejB94B,KAAKi9C,eAAe/jB,QAAQmjB,QAAQr8C,KAAKkf,Y,6CAcnB3P,GACtBvP,KAAKkf,UAAY3P,EAAE8sC,U,wCAEF9sC,GACjBvP,KAAK8sE,qBAAqB9sE,KAAKitE,YAC/B19D,EAAE4vB,iBAAiB5vB,EAAE4vB,oB,mCAET5vB,GACZvP,KAAKitE,WAAWt1C,Y,+BAGhB,IAAIpQ,EAAW,kBAGf,OAFGvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YACJ,sBAAKA,UAAWA,EAAWoQ,QAAS33B,KAAKk4B,aAAzC,UACL,qBAAK3Q,UAAU,gBAAf,SACC,qBAAKA,UAAU,QAAQiD,IAAOxqB,KAAKitE,WAAW7rB,aAE/C,qBAAK75B,UAAU,sBAAf,SACC,qBAAKA,UAAU,cAAc2lD,wBAAyB,CAAEC,OAAQntE,KAAKitE,WAAWn8C,iBAEjF,cAAC,GAAD,CAAU+I,IAAK75B,KAAKi9C,eAAgBrB,eAAe,EAAM1gC,SAAUlb,KAAK+sE,uBACvElxB,uBAAuB,IACxB,qBAAKt0B,UAAU,wBAAf,SACC,cAAC,GAAD,CAAY+U,OAASpwB,EAAKe,iBAAiBjN,KAAKyS,eAAe5N,UAAU,2BAA4B0iB,UAAU,QAAQoQ,QAAS33B,KAAKgtE,2B,gCAnCzI,OAAOhtE,KAAKitE,WAAW9rB,Y,2BAGvB,OAAOnhD,KAAKitE,WAAWtwD,O,gCAGvB,OAAO3c,KAAKitE,a,+BAGZ,OAAOjtE,KAAKkf,c,GA5B8B1iB,cC4F7B4wE,OAlGf,SAASA,EAAK32C,EAASnhB,EAAQq1B,EAAMC,EAAMH,EAAMC,EAAMpc,EAAU++C,GAC7D,IAAIC,EACAC,EACAt+D,EAAOjP,UACCnC,GAAR4sC,IACAA,EAAO,QAEA5sC,GAAP8sC,IACAA,EAAO,QAEA9sC,GAAP6sC,IACAA,EAAO,UAEA7sC,GAAP+sC,IACAA,EAAO,KAEX,IACIyC,EACAmgC,EAFA10C,EAAQ,EAGZ94B,KAAKq7B,YAAc,SAAUjtB,GACzBa,EAAKw+D,KAAKr/D,EAAM,GAAIA,EAAM,KAE9BpO,KAAKiqD,YAAc,WACf,IAAI77C,EAAQ,GAGZ,OAFAA,EAAM,GAAKqoB,EAAQyS,WACnB96B,EAAM,GAAKqoB,EAAQ6S,UACZl7B,GAEkB,IAAI8wB,GAAmB,CACtDzI,UAAS0I,iBAAgB,EAAOC,gBAAe,EAAMC,QAenD,SAAiB9vB,GAEnBm+D,GAAwB,EADtB,IAEK7iE,EAAO0E,EAAP1E,EAAGC,EAAIyE,EAAJzE,EACJ,GAA8B,SAA1B2rB,EAAQqD,MAAMwa,QAEd,OAEJjH,EAAQ,CAAC5W,EAAQyS,WAAar+B,EAAG4rB,EAAQ6S,UAAYx+B,GACrDmE,EAAK0+D,eACLH,EAAQ,IAAI3gC,GAAM,CAACve,SAAS,gBAA8BzwB,GAAZywB,GAAyBA,KAAiBD,MAAM,IAAMye,OAAO,IAC3GhU,EAAQ,GA1BwDwG,OA4BpE,SAAgB/vB,GAEfm+D,IACFA,GAAwB,EACpBN,EAAKzpC,QACL0pC,GAAgBA,EAAgB99D,IAJnC,IAMK1E,EAAO0E,EAAP1E,EAAGC,EAAIyE,EAAJzE,EACAsiE,EAAKzpC,QACI,GAAT7K,IACA7pB,EAAKw+D,KAAMpgC,EAAM,GAAKxiC,EAAKwiC,EAAM,GAAKviC,GACtC0iE,EAAMt0D,OAAM,KAvC+DqmB,MAgEnF,SAAehwB,GACX69D,EAAKzpC,QAAO,EACZ7K,EAAM,GAlEuF0G,YAAW,IAD5G,IAGCkuC,GAAuB,EAC3B1tE,KAAK2tE,aAAe,WACnBJ,EAAc3iC,EAAS,IAAMnU,EAAQ2C,YAAevP,SAASgN,gBAAgBm4B,YACvEse,EAAc3iC,EACV4iC,EAAc,EACdA,EAAc,EAGVA,EAAc,MACdA,EAAc,MA+B1BvtE,KAAKytE,KAAK,SAAS5iE,EAAGC,GAExB,IAAImsB,EAAO,IAAMpsB,EAAIgf,SAASgN,gBAAgBm4B,YAC1C/3B,EAAOq2C,EACVr2C,EAAOq2C,EAGHr2C,EAAOs2C,IACVt2C,EAAOs2C,GAGT92C,EAAQqD,MAAM7C,KAAOre,OAAOqe,GAAQ,IAChCnsB,EAAI2/B,EACP3/B,EAAI2/B,EAGA3/B,EAAE2rB,EAAQ4C,aAAeqR,IAC5B5/B,EAAI4/B,EAAOjU,EAAQ4C,cAGrB5C,EAAQqD,MAAMhD,IAAMle,OAAO9N,GAAK,OC1FnB8iE,OAHf,SAAiBn3C,EAASn4B,GACzBm4B,EAAQkF,UAAUr9B,GCCnB,SAASuvE,GAAT,cAAkBC,EAAlB,EAAkBA,IAAeC,GAAjC,EAAuBC,SAAvB,EAAiCD,UAAUE,EAA3C,EAA2CA,UAAWC,EAAtD,EAAsDA,SAAUC,EAAhE,EAAgEA,UAC9DC,EADF,EACEA,OAAQC,EADV,EACUA,gBAAiBC,EAD3B,EAC2BA,sBAAuBjB,EADlD,EACkDA,gBAChDkB,EAFF,EAEEA,UAFF,EAEaC,iBAFb,mBAGI,IAOCC,EAASC,EAASC,EAAUC,EAAWC,EAAYC,EAAeC,EAAaC,EAP5EZ,EAAS,CAAC3kB,OAAO,IACxBD,OAAO,EACPylB,eAAe,IACfC,eAAe,GAuDf,SAASC,EAAiBrB,GAEnBA,EAAIh0C,MAAMtuB,SAAW,WACrBsiE,EAAIh0C,MAAMpjB,MAAQ,OAClBo3D,EAAIh0C,MAAMnjB,OAAS,OACnBm3D,EAAIh0C,MAAMwwB,OAAS,WA3DXzsD,IAAZ0wE,GAAmC,OAAZA,IAAiBA,EAAY,CAACz3C,KAAI,EAAMG,MAAK,EAAMI,QAAO,EAAMD,OAAM,EAC/Fg4C,SAAQ,EAAMC,YAAW,EAAMC,UAAS,EAAMC,aAAY,IAI3D,EAAKC,oBAAsB,SAASltE,GACjBA,GAEhBisE,EAAUa,UAEZD,EADAN,EAAahlD,SAASC,cAAc,QAEpC+kD,EAAW/0C,MAAMhD,IAAM,MACvB+3C,EAAW/0C,MAAM7C,KAAO,MACxB43C,EAAW/0C,MAAM21C,OAAS,aAExBlB,EAAUc,aAEZF,EADAL,EAAgBjlD,SAASC,cAAc,QAEvCglD,EAAch1C,MAAMzC,OAAS,MAC7By3C,EAAch1C,MAAM7C,KAAO,MAC3B63C,EAAch1C,MAAM21C,OAAS,aAG3BlB,EAAUe,WAEZH,EADAJ,EAAcllD,SAASC,cAAc,QAErCilD,EAAYj1C,MAAMhD,IAAM,MACxBi4C,EAAYj1C,MAAM1C,MAAQ,MAC1B23C,EAAYj1C,MAAM21C,OAAS,aAGzBlB,EAAUgB,cAEZJ,EADAH,EAAiBnlD,SAASC,cAAc,QAExCklD,EAAel1C,MAAMzC,OAAS,MAC9B23C,EAAel1C,MAAM1C,MAAQ,MAC7B43C,EAAel1C,MAAM21C,OAAS,aAE5BlB,EAAUt3C,QACZw3C,EAAU5kD,SAASC,cAAc,QACzBgQ,MAAR,8CAAuD+zC,GAAQz3D,MAA/D,qDAEEm4D,EAAUn3C,SACZu3C,EAAW9kD,SAASC,cAAc,QACzBgQ,MAAT,8CAAwD+zC,GAAQz3D,MAAhE,sDAEEm4D,EAAUz3C,OACZ43C,EAAS7kD,SAASC,cAAc,QACzBgQ,MAAP,0DAAkE+zC,GAAQz3D,MAA1E,yCAEEm4D,EAAUl3C,UACZu3C,EAAY/kD,SAASC,cAAc,QACzBgQ,MAAV,0DAAqE+zC,GAAQz3D,MAA7E,4CASK23D,EAASG,IAEXO,GACFX,EAAI7yC,YAAYwzC,GACdE,GACFb,EAAI7yC,YAAY0zC,GACZV,EAAUE,IAEZI,EAAUa,SACZtB,EAAI7yC,YAAY4zC,GACdN,EAAUc,YACZvB,EAAI7yC,YAAY6zC,GACdP,EAAUe,UACZxB,EAAI7yC,YAAY8zC,GACdR,EAAUgB,aACZzB,EAAI7yC,YAAY+zC,KAGZf,EAAUE,IAEZI,EAAUz3C,KACZg3C,EAAI7yC,YAAYyzC,GACdH,EAAUl3C,QACZy2C,EAAI7yC,YAAY2zC,IAEZb,EAASG,GAAUD,EAAUE,IAE/BI,EAAUa,SACZtB,EAAI7yC,YAAY4zC,GACdN,EAAUc,YACZvB,EAAI7yC,YAAY6zC,GACdP,EAAUmB,SACZ5B,EAAI7yC,YAAY8zC,GACdR,EAAUoB,aACZ7B,EAAI7yC,YAAY+zC,IAEf,IAEIxB,EACAoC,EACAC,EAJA/2C,EAAQ,KACRg3C,EAAc,GAclB,SAASn1C,EAAYprB,GAEvBA,EAAE4vB,iBAAiB5vB,EAAE4vB,kBACrB5vB,EAAE6vB,gBAAgB7vB,EAAE6vB,iBACTpJ,IAwBD45C,EAAY,SAAUrgE,GAClB,IAAKA,EACGA,EAAIrQ,OAAOgP,MACnB6hE,EAASxgE,IAEbsa,SAASgN,gBAAgBppB,iBAAiB,YAAamiE,GACvDC,EAAU,SAAUtgE,GAEhB,IAAKA,EACGA,EAAIrQ,OAAOgP,MAEnB4qB,EAAQ,KACRjP,SAASgN,gBAAgB/oB,oBAAoB,YAAa8hE,GAC1D/lD,SAASgN,gBAAgB/oB,oBAAoB,WAAY+hE,IAE7DhmD,SAASgN,gBAAgBppB,iBAAiB,WAAYoiE,KArCtDD,EAAY,SAAUrgE,GACbA,IACDA,EAAIrQ,OAAOgP,OAC3BqB,EAAE4vB,iBAAiB5vB,EAAE4vB,kBACrB5vB,EAAE6vB,gBAAgB7vB,EAAE6vB,iBACR2wC,EAASxgE,IAGbsa,SAASgN,gBAAgBppB,iBAAiB,YAAamiE,GACvDC,EAAU,SAAUtgE,GAEhB,IAAKA,EACGA,EAAIrQ,OAAOgP,MAEnB4qB,EAAQ,KACRjP,SAASgN,gBAAgB/oB,oBAAoB,YAAa8hE,GAC1D/lD,SAASgN,gBAAgB/oB,oBAAoB,UAAW+hE,IAE5DhmD,SAASgN,gBAAgBppB,iBAAiB,UAAWoiE,IAqBzDrC,EAAQ,IAAI3gC,GAAM,CAACve,SAAS,WACxB,QAAuBzwB,GAAnBwwE,EACJ,IAEIA,IAEJ,MAAM7I,GAEF5oE,QAAQmC,IAAIymE,KAGjBn3C,MAAM,IAAMye,OAAO,IAC5BugC,GAAiBA,EAAgB99D,GA4H/B,SAASygE,EAAWnlE,EAAGC,EAAGoM,EAAGC,GACzB,IAAIT,EAAQQ,EAAIrM,EACZosB,EAAO9f,EAAItM,EACUosB,EAAOpN,SAASgN,gBAAgBuC,YAAvC,IACAg1C,EAAOc,gBAAkBx4D,EAAQq3D,GAAYr3D,EAAQw3D,IAIvEJ,EAAIh0C,MAAMpjB,MAAQkC,OAAOlC,GAAS,KAClCo3D,EAAIh0C,MAAM7C,KAAOre,OAAOqe,GAAQ,MAEpC,SAASg5C,EAAYplE,EAAGC,EAAGoM,GACvB,IAAIR,EAAQQ,EAAIrM,EACZ6L,EAAQq3D,GAAYr3D,EAAQw3D,IAAoBx3D,EAAQo3D,EAAI5kC,YAAcrf,SAASgN,gBAAgBuC,YAA3D,IAA0Eg1C,EAAOa,iBAG7HnB,EAAIh0C,MAAMpjB,MAAQkC,OAAOlC,GAAS,MAEtC,SAASw5D,EAAUrlE,EAAGC,EAAGoM,EAAGC,GACxB,IAAIR,EAASO,EAAIpM,EACbgsB,EAAM3f,EAAIrM,EACVgsB,EAAMs3C,EAAO5kB,QAAU7yC,EAASs3D,GAAat3D,EAASw3D,IAG1DL,EAAIh0C,MAAMnjB,OAASiC,OAAOjC,GAAU,KACpCm3D,EAAIh0C,MAAMhD,IAAMle,OAAOke,GAAO,MAElC,SAASq5C,EAAatlE,EAAGC,EAAGoM,GACxB,IAAIP,EAASO,EAAIpM,EACb6L,EAASs3D,GAAat3D,EAASw3D,GAAaL,EAAIxkC,UAAY3yB,EAASy3D,EAAO3kB,SAGhFqkB,EAAIh0C,MAAMnjB,OAASiC,OAAOjC,GAAU,MAExC,SAASo5D,EAASxgE,GACd,IAAI1E,EAAI0E,EAAE6gE,MACNtlE,EAAIyE,EAAE8gE,MAEV,OAAQv3C,GACJ,IAAK,KACD,OACJ,IAAK,YACDk3C,EAAWnlE,EAAGC,EAAGglE,EAAY,GAAIA,EAAY,IAC7C,MACJ,IAAK,aACDG,EAAYplE,EAAGC,EAAGglE,EAAY,IAC9B,MACJ,IAAK,WACDI,EAAUrlE,EAAGC,EAAGglE,EAAY,GAAIA,EAAY,IAC5C,MACJ,IAAK,cACDK,EAAatlE,EAAGC,EAAGglE,EAAY,IAC/B,MACJ,IAAK,gBACDE,EAAWnlE,EAAGC,EAAGglE,EAAY,GAAIA,EAAY,IAC7CI,EAAUrlE,EAAGC,EAAGglE,EAAY,GAAIA,EAAY,IAC5C,MACJ,IAAK,mBACDE,EAAWnlE,EAAGC,EAAGglE,EAAY,GAAIA,EAAY,IAC7CK,EAAatlE,EAAGC,EAAGglE,EAAY,IAC/B,MACJ,IAAK,iBACDG,EAAYplE,EAAGC,EAAGglE,EAAY,IAC9BI,EAAUrlE,EAAGC,EAAGglE,EAAY,GAAIA,EAAY,IAC5C,MACJ,IAAK,oBACDG,EAAYplE,EAAGC,EAAGglE,EAAY,IAC9BK,EAAatlE,EAAGC,EAAGglE,EAAY,IAIvC,GADAtC,EAAMt0D,QACFo1D,EAEA,IAEIA,IAEJ,MAAM9I,GAEF5oE,QAAQmC,IAAIymE,IA9QxB,EAAK8K,cAAgB,SAAUliE,GAC3B0/D,EAAIh0C,MAAMpjB,MAAQkC,OAAOxK,EAAM,IAAM,KACrC0/D,EAAIh0C,MAAMnjB,OAASiC,OAAOxK,EAAM,IAAM,MAE1C,EAAKmiE,cAAgB,WACjB,IAAIniE,EAAQ,GAGZ,OAFAA,EAAM,GAAK0/D,EAAI10C,YACfhrB,EAAM,GAAK0/D,EAAIz0C,aACRjrB,GA6DN4nB,IA+DJy4C,IACFA,EAAQ+B,WAAa,SAAUjhE,GAC9BupB,EAAQ,YACRg3C,EAAY,GAAKhC,EAAI10C,YAAc7pB,EAAE46B,QAAQ,GAAGimC,MAAS,EAAIvC,GAAQ4C,QACrEX,EAAY,GAAKhC,EAAI5kC,WAAa35B,EAAE46B,QAAQ,GAAGimC,MAC/Cz1C,EAAYprB,KAEXo/D,IACFA,EAAS6B,WAAa,SAAUjhE,GAC/BupB,EAAQ,aACRg3C,EAAY,GAAKhC,EAAI10C,aAAe7pB,EAAE46B,QAAQ,GAAGimC,MAAS,EAAIvC,GAAQ4C,SACtE91C,EAAYprB,KAEXm/D,IACFA,EAAO8B,WAAa,SAAUjhE,GAC7BupB,EAAQ,WACRg3C,EAAY,GAAKhC,EAAIz0C,aAAe9pB,EAAE46B,QAAQ,GAAGkmC,MAAS,EAAIxC,GAAQ4C,QACtEX,EAAY,GAAKhC,EAAIxkC,UAAY/5B,EAAE46B,QAAQ,GAAGkmC,MAC9C11C,EAAYprB,KAEXq/D,IACFA,EAAU4B,WAAa,SAAUjhE,GAChCupB,EAAQ,cACRg3C,EAAY,GAAKhC,EAAIz0C,cAAgB9pB,EAAE46B,QAAQ,GAAGkmC,MAAS,EAAIxC,GAAQ4C,SACvE91C,EAAYprB,KAEXs/D,IACFA,EAAW2B,WAAa,SAAUjhE,GACjCupB,EAAQ,gBACRg3C,EAAY,GAAKhC,EAAI10C,YAAc7pB,EAAE46B,QAAQ,GAAGimC,MAAS,EAAIvC,GAAQ4C,QACrEX,EAAY,GAAKhC,EAAI5kC,WAAc35B,EAAE46B,QAAQ,GAAGimC,MAChDN,EAAY,GAAKhC,EAAIz0C,aAAe9pB,EAAE46B,QAAQ,GAAGkmC,MAAS,EAAIxC,GAAQ4C,QACtEX,EAAY,GAAKhC,EAAIxkC,UAAY/5B,EAAE46B,QAAQ,GAAGkmC,MAC9C11C,EAAYprB,KAEXu/D,IACFA,EAAc0B,WAAa,SAAUjhE,GACpCupB,EAAQ,mBACRg3C,EAAY,GAAKhC,EAAI10C,YAAc7pB,EAAE46B,QAAQ,GAAGimC,MAAS,EAAIvC,GAAQ4C,QACrEX,EAAY,GAAKhC,EAAI5kC,WAAc35B,EAAE46B,QAAQ,GAAGimC,MAChDN,EAAY,GAAKhC,EAAIz0C,cAAgB9pB,EAAE46B,QAAQ,GAAGkmC,MAAS,EAAIxC,GAAQ4C,SACvE91C,EAAYprB,KAEXw/D,IACFA,EAAYyB,WAAa,SAAUjhE,GAClCupB,EAAQ,iBACRg3C,EAAY,GAAKhC,EAAI10C,aAAe7pB,EAAE46B,QAAQ,GAAGimC,MAAS,EAAIvC,GAAQ4C,SACtEX,EAAY,GAAKhC,EAAIz0C,cAAgB9pB,EAAE46B,QAAQ,GAAGkmC,MAAS,EAAIxC,GAAQ4C,SACvEX,EAAY,GAAKhC,EAAIxkC,UAAY/5B,EAAE46B,QAAQ,GAAGkmC,MAC9C11C,EAAYprB,KAEXy/D,IACFA,EAAewB,WAAa,SAAUjhE,GACrCupB,EAAQ,oBACRg3C,EAAY,GAAKhC,EAAI10C,aAAe7pB,EAAE46B,QAAQ,GAAGimC,MAAS,EAAIvC,GAAQ4C,SACtEX,EAAY,GAAKhC,EAAIz0C,cAAgB9pB,EAAE46B,QAAQ,GAAGkmC,MAAS,EAAIxC,GAAQ4C,SACvE91C,EAAYprB,OArHXk/D,IACFA,EAAQiC,YAAc,SAAUnhE,GAC/BupB,EAAQ,YACRg3C,EAAY,GAAKhC,EAAI10C,YAAc7pB,EAAE6gE,MAAS,EAAIvC,GAAQ4C,QAC1DX,EAAY,GAAKhC,EAAI5kC,WAAa35B,EAAE6gE,MACpCz1C,EAAYprB,KAEXo/D,IACFA,EAAS+B,YAAc,SAAUnhE,GAChCupB,EAAQ,aACRg3C,EAAY,GAAKhC,EAAI10C,aAAe7pB,EAAE6gE,MAAS,EAAIvC,GAAQ4C,SAC3D91C,EAAYprB,KAEXm/D,IACFA,EAAOgC,YAAc,SAAUnhE,GAC9BupB,EAAQ,WACRg3C,EAAY,GAAKhC,EAAIz0C,aAAe9pB,EAAE8gE,MAAS,EAAIxC,GAAQ4C,QAC3DX,EAAY,GAAKhC,EAAIxkC,UAAY/5B,EAAE8gE,MACnC11C,EAAYprB,KAEXq/D,IACFA,EAAU8B,YAAc,SAAUnhE,GACjCupB,EAAQ,cACRg3C,EAAY,GAAKhC,EAAIz0C,cAAgB9pB,EAAE8gE,MAAS,EAAIxC,GAAQ4C,SAC5D91C,EAAYprB,KAEXs/D,IACFA,EAAW6B,YAAc,SAAUnhE,GAClCupB,EAAQ,gBACRg3C,EAAY,GAAKhC,EAAI10C,YAAc7pB,EAAE6gE,MAAS,EAAIvC,GAAQ4C,QAC1DX,EAAY,GAAKhC,EAAI5kC,WAAc35B,EAAE6gE,MACrCN,EAAY,GAAKhC,EAAIz0C,aAAe9pB,EAAE8gE,MAAS,EAAIxC,GAAQ4C,QAC3DX,EAAY,GAAKhC,EAAIxkC,UAAY/5B,EAAE8gE,MACnC11C,EAAYprB,KAEXu/D,IACFA,EAAc4B,YAAc,SAAUnhE,GACrCupB,EAAQ,mBACRg3C,EAAY,GAAKhC,EAAI10C,YAAc7pB,EAAE6gE,MAAS,EAAIvC,GAAQ4C,QAC1DX,EAAY,GAAKhC,EAAI5kC,WAAc35B,EAAE6gE,MACrCN,EAAY,GAAKhC,EAAIz0C,cAAgB9pB,EAAE8gE,MAAS,EAAIxC,GAAQ4C,SAC5D91C,EAAYprB,KAEXw/D,IACFA,EAAY2B,YAAc,SAAUnhE,GACnCupB,EAAQ,iBACRg3C,EAAY,GAAKhC,EAAI10C,aAAe7pB,EAAE6gE,MAAS,EAAIvC,GAAQ4C,SAC3DX,EAAY,GAAKhC,EAAIz0C,cAAgB9pB,EAAE8gE,MAAS,EAAIxC,GAAQ4C,SAC5DX,EAAY,GAAKhC,EAAIxkC,UAAY/5B,EAAE8gE,MACnC11C,EAAYprB,KAEXy/D,IACFA,EAAe0B,YAAc,SAAUnhE,GACtCupB,EAAQ,oBACRg3C,EAAY,GAAKhC,EAAI10C,aAAe7pB,EAAE6gE,MAAS,EAAIvC,GAAQ4C,SAC3DX,EAAY,GAAKhC,EAAIz0C,cAAgB9pB,EAAE8gE,MAAS,EAAIxC,GAAQ4C,SAC5D91C,EAAYprB,MAmJZ,EAAKohE,UAAY,SAAUC,GAEvB,IAAIC,EAAiBzC,EACrBA,EAASwC,EACLC,EAAeC,OAAS1C,EAAO5kB,OAI/BqnB,EAAepnB,OAAS2kB,EAAO3kB,OAI/BonB,EAAevD,YAAcc,EAAOc,eAIpC2B,EAAetD,YAAca,EAAOb,aA/YhD,IAqZAM,GAAQ4C,QAAU,EAClB5C,GAAQz3D,MAAM,EACCy3D,UC7WAkD,GA5CE,IAAI,WACrB,IAAIC,EAAe,CAAC,qBAAsB,mBAAoB,kBAAmB,gBAAiB,eAAgB,aAAc,cAOhI,SAASC,EAAcx6C,EAASy6C,GAE5B,GAAIz6C,GAA2B,QAAhBA,EAAQp5B,KACvB,CAcI,GAbwB,QAApB6zE,IAEwB,GAApBz6C,EAAQ06C,UACR16C,EAAQ26C,aAAa,eAAgB,WAGZvzE,GAAzB44B,EAAQ46C,gBAER56C,EAAQ46C,cAAgB,WACpB,OAAO,KAIf56C,EAAQqD,MACZ,CAEIk3C,EAAc5hE,SAAQ,SAACkiE,QACgBzzE,GAA/B44B,EAAQqD,MAAMw3C,KAEd76C,EAAQqD,MAAMw3C,GAAgBJ,MAM1C,IADA,IAAIvT,EAAQlnC,EAAQ86C,WACb5T,GACHsT,EAActT,EAAOuT,GACrBvT,EAAQA,EAAM6T,aArC1BxxE,KAAKyxE,eAAe,SAASh7C,GACzBw6C,EAAcx6C,EAAS,YAE3Bz2B,KAAK0xE,iBAAiB,SAASj7C,GAC3Bw6C,EAAcx6C,EAAS,UCN3B,SAASk7C,GAASC,EAAcC,GAE5B7xE,KAAK8Z,IAAM,SAAUhd,GAEjB,IAGA,OAAO0B,KAAKC,MAAM6mE,aAAaC,QAAQqM,EAAe,IAAM90E,IAElE,MAAM0oE,GAEL,SAGCxlE,KAAK6Z,IAAM,SAAU/c,EAAMqO,GAEvB,IAGAm6D,aAAaG,QAAQmM,EAAe,IAAM90E,EAAM0B,KAAKogD,UAAUzzC,IAEpE,MAAMq6D,GAEF5oE,QAAQmC,IAAIymE,KAGfxlE,KAAKkZ,MAAM24D,EACXF,GAASlnB,UAAUlqD,KAAKP,MAE5B2xE,GAASG,OAAO,WACZ,OAAOxM,cAEXqM,GAASI,SAAS,SAAS5mE,GAEvB,IAAI,IAAI1H,KAAO0H,EAEXm6D,aAAaG,QAAQhiE,EAAKjF,KAAKogD,UAAUzzC,EAAI1H,MAGrDkuE,GAASlnB,UAAU,GACnBknB,GAASK,SAAW,aAILL,UC3BTM,GAAW,CAChBlE,SAAS,IACTE,UAAU,IACVC,SAAS,IACTC,UAAU,IACVzkB,SAAS,EACTF,OAAO,EACPG,SAAS,IACTF,OAAO,IACPokB,SAAQ,EACRqE,UAAS,EACTvgB,WAAU,EACVwgB,aAAY,EACZC,aAAY,EACZC,iBAAgB,GAIXC,GAAe,SAAS/6D,GAC7B,IASIg7D,EAAeC,EAAgBC,EAT/BxjE,EAAOjP,KAGX,IAAI,IAAImD,KAFRqK,EAAYxN,MACZA,KAAKye,MAAQ/F,GAAWC,OACXxW,OAAO8qB,KAAKglD,SAETp0E,IAAZ0Z,EAAOpU,KACToU,EAAOpU,GAAG8uE,GAAS9uE,IAKrB,IAAIuvE,EAA8BC,EAAW,EAEzC71E,EAAOya,EAAOza,KAAKya,EAAOza,KAAK,UAC/B81E,EAAer7D,EAAOq7D,eACrBC,EAGwDt7D,EAHxDs7D,SAAU9E,EAG8Cx2D,EAH9Cw2D,SAAUG,EAGoC32D,EAHpC22D,SAAUD,EAG0B12D,EAH1B02D,UAAWE,EAGe52D,EAHf42D,UAAW2E,EAGIv7D,EAHJu7D,aAAcC,EAGVx7D,EAHUw7D,cAClDC,GAEwCz7D,EAF5D07D,SAE4D17D,EAFlD27D,SAEkD37D,EAFxCy7D,WAAWthB,EAE6Bn6C,EAF7Bm6C,UAAYygB,EAEiB56D,EAFjB46D,YAAaC,EAEI76D,EAFJ66D,YAAazgB,EAETp6C,EAFSo6C,UACrE0gB,EAC4D96D,EAD5D86D,gBAAiBc,EAC2C57D,EAD3C47D,UAAWjB,EACgC36D,EADhC26D,SAAUxoB,EACsBnyC,EADtBmyC,SAAUC,EACYpyC,EADZoyC,SAAUF,EACElyC,EADFkyC,OAAQD,EACNjyC,EADMiyC,OAClEnsD,GAA4Dka,EADc67D,aACd77D,EAA5Dla,MAAMgoC,EAAsD9tB,EAAtD8tB,cAAe5O,EAAuClf,EAAvCkf,QAAS48C,EAA8B97D,EAA9B87D,4BAC3B58C,IAASA,EAAU5M,SAASC,cAAc,QAC9C2M,EAAQsE,UAAUtrB,IAAI,kBAEtB,IAAMu+D,EAAWnkD,SAASC,cAAc,OACxCkkD,EAASjzC,UAAUtrB,IAAI,SAEvB,IAAM6jE,EAASzpD,SAASC,cAAc,OACtCwpD,EAAOv4C,UAAUtrB,IAAI,OAErB,IAAM8jE,EAAU1pD,SAASC,cAAc,OACvCypD,EAAQx4C,UAAUtrB,IAAI,QAEtB,IAAI+jE,EAAU3pD,SAASC,cAAc,OACrC0pD,EAAQz4C,UAAUtrB,IAAI,QAEtBm+D,GAAQ4F,EAAS12E,GACjB25B,EAAQwE,YAAY+yC,GACpBA,EAAS/yC,YAAYq4C,GACrBA,EAAOr4C,YAAYu4C,GACnBxF,EAAS/yC,YAAYs4C,IACpBluC,GAA4Bxb,SAASgN,iBAAiBoE,YAAYxE,GAGnEz2B,KAAK0rD,QAAS,WACb,OAAOruD,GAER,IAAIo2E,EAAWl8D,EAAOk8D,SAAUl8D,EAAOk8D,SAAS32E,EAE5C42E,EAAW,IAAI/B,GAAS8B,GAAU,WACrCzzE,KAAK6Z,IAAI,YACT7Z,KAAK6Z,IAAI,QACT7Z,KAAK6Z,IAAI,aAsGV,GApGAwvC,GAAQC,WAAW/oD,KAAKP,MAExBA,KAAK2zE,MA6LL,WACC,IAAIC,GAAW,EACfjB,EAAW,EACPD,GAeHA,EAAWx5D,QACXy5D,EAAW,GAfXD,EAAa,IAAI7lC,GAAM,CACtBve,SAAS,WACLslD,GACH5F,EAASjzC,UAAUnrB,OAAO,YACvB+iE,GAAY,GACdD,EAAWtlC,OACZwmC,GAAW,IAEX5F,EAASjzC,UAAUtrB,IAAI,YACvBmkE,GAAW,GAEZjB,KACCtkD,MAAM,GAAIye,QAAQ,KA3MtB9sC,KAAKyrD,QAAQ,WACZ,OAAOzrD,KAAKye,OAEbze,KAAK6zE,QAAU,SAAS/2E,GACvB8wE,GAAQ4F,EAAS12E,IAElBkD,KAAK8zE,kBAAoB,SAASxxE,GACjCswE,EAAiBtwE,GAElBtC,KAAK+zE,QAAQ,WACZ,OAAOlB,GAER7yE,KAAKg0E,WAAa,WACjB,OAAOpB,GAER5yE,KAAKuqD,WAAW,SAASD,GACxB7zB,EAAQqD,MAAMwwB,OAAO1xC,OAAO0xC,GAC5BopB,EAAS75D,IAAI,SAAUywC,GAkZvBr7C,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAWspB,mBA/YrCj0E,KAAKk0E,SAAS,WACb,MAAO,CAACxiB,UAAUA,EAAWshB,UAAUA,IAExChzE,KAAKm0E,SAAWA,GAChBn0E,KAAKo0E,WAAaA,GAClBp0E,KAAKq0E,SAAWA,EAChBr0E,KAAK6rD,eA4PL,WAEImnB,EAAWsB,IACTD,KA9PNr0E,KAAKs0E,WAAWA,EAChBt0E,KAAKy4C,MAAQA,EACbz4C,KAAKu0E,MAuTL,WACCC,KACAC,MAxTDz0E,KAAKw0E,aAAeA,GACpBx0E,KAAK00E,eAAiBA,GAEtB10E,KAAKkqD,eAAe,SAAS/+C,GACxBumD,GAAWyhB,IAAYj0E,OAAO82B,WAAU2+C,KAG7C30E,KAAK40E,eAAe,WACnB,OAAOzC,GAERnyE,KAAK82C,WAAa,WACjB,OAAOrgB,GAERz2B,KAAK+pD,iBAAmB,WACvB,OAAO1kB,GAERrlC,KAAK60E,cAAgB,WACpB,OAAOvB,GAERtzE,KAAK80E,aAAe,WAInB,GAHApjB,GAAY,EACZ4iB,IAEGnB,IAAYj0E,OAAO82B,SAAS,CAC9B,IAAMymB,EAAI02B,EAAUtF,GAAQ4C,QAAQ,EACpCsE,GAAsB,CACrBr+D,OAAO2uB,GAA4Bxb,SAASgN,iBAAiBm4B,YAAY,EACzEr4C,QAAS0uB,GAA4Bxb,SAASgN,iBAAiBuzB,aAAe3N,EAC9E3lB,KAAK2lB,EACLxlB,MAAMwlB,IAGR+3B,MAEDx0E,KAAKg1E,cAAgB,WAIpB,GAHAtjB,GAAY,EACZ4iB,IAEGnB,IAAYj0E,OAAO82B,SAAS,CAC9B,IAAMymB,EAAI02B,EAAUtF,GAAQ4C,QAAQ,EAC9BwE,GAAa5vC,GAA4Bxb,SAASgN,iBAAiBm4B,YAAY,EACrF+lB,GAAsB,CACrBr+D,MAAMu+D,EACNt+D,QAAS0uB,GAA4Bxb,SAASgN,iBAAiBuzB,aAAe3N,EAC9E3lB,KAAK2lB,EACLxlB,KAAKg+C,EAAUx4B,IAGjB+3B,MAEDh5B,GAAqB+3B,EAAS,CAAC,cAC/BA,EAAQ9lE,iBAAiB,YAAYynE,GACrCl1E,KAAKm1E,eAAiB,WACrB,OAAO5B,GAERvzE,KAAKiqD,YAAc,WAClB,MAAO,CAACxzB,EAAQyS,WAAYzS,EAAQ6S,aAEpCjE,GAA4Bxb,SAASgN,iBAAiBkE,UAAUtrB,IAAI,eACrEshE,GAAaW,iBAAiBj7C,GAE9B5M,SAASqR,KAAKD,YAAYxE,GAC1BA,EAAQhpB,iBAAiB,YAAaynE,SACLr3E,IAA9Bw1E,GAAyCA,IAC3CC,EAAO7lE,iBAAiB,WAAYinE,IA0IrC,WACC,IAAIjE,EAASvxE,OAAO82B,SAAW,EAAF,EACzBo/C,EAAgBx8D,OAAO63D,GAAW,KACtCh6C,EAAQqD,MAAM22C,QAAU2E,EACxBpH,EAASl0C,MAAMtuB,SAAW,WAC1BwiE,EAASl0C,MAAM7C,KAAOm+C,EACtBpH,EAASl0C,MAAMhD,IAAMs+C,EACrBpH,EAASl0C,MAAM1C,MAAQg+C,EACvBpH,EAASl0C,MAAMzC,OAAS+9C,EAjJzBC,IACKn2E,OAAO82B,SACZ,CACKm9C,IAEHlkE,EAAKqmE,SAAW,IAAIzH,GAAQ,CAACC,IAAIr3C,EAASu3C,WAAUD,WAAUE,YAAWC,WAAUC,YAClFC,OAAOn/D,EAAKs6C,cAAe8kB,gBAoJ9B,WACI3c,IACE8gB,EAAe+C,OAAOC,QACzB9jB,GAAU,IAGZgiB,EAAS75D,IAAI,WAAY,CAAC4c,EAAQyS,WAAYzS,EAAQ6S,YACtDoqC,EAAS75D,IAAI,OAAQ,CAAC4c,EAAQ2C,YAAa3C,EAAQ4C,eAiInDpqB,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAW8qB,WA5RkBnH,sBAAsB,KAC3EjB,gBAqRF,WACCzwE,QAAQmC,IAAI,kBACZ2yD,GAAY,EAOZziD,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAWxB,qBA5RhC+oB,IAEHjjE,EAAKymE,MAAQ,IAAItI,GAAK32C,EAAS68C,EAAQ5pB,EAAUC,EAAUH,EAC1DC,GA6OH,WACCiqB,EAAS75D,IAAI,WAAY,CAAC4c,EAAQyS,WAAYzS,EAAQ6S,YA6DtDr6B,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAW9B,QASpCjsD,QAAQmC,IAAI,wBACZkQ,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAW1B,aAnErC,SAAqB15C,GACpB3S,QAAQmC,IAAI,eACT2yD,GACF0iB,GAAW,CAACn9C,KAAM1nB,EAAE86B,UAmDrBp7B,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAWzB,mBArSpC,IAAMysB,EAAgB9rD,SAASC,cAAc,OAG7C,GAFA6rD,EAAc56C,UAAUtrB,IAAI,UAC5B6jE,EAAOr4C,YAAY06C,GACfxD,EACJ,CACC,IAAMyD,EAAoB,IAAIhqB,GAAmB,CAACtvB,OAAOpwB,EAAKQ,OAAO,+BACrEirB,QAAQ08C,IACRf,EAAOr4C,YAAY26C,EAAkBn/C,SACrC+kB,GAAqBo6B,EAAkBn/C,QAAS,CAAC,aAAc,cAEhE,GAAI27C,EACJ,CACC,IAAMyD,EAAoB,IAAIjqB,GAAmB,CAACtvB,OAAOpwB,EAAKQ,OAAO,+BACrEirB,QAAQ+8C,KACRpB,EAAOr4C,YAAY46C,EAAkBp/C,SACrC+kB,GAAqBq6B,EAAkBp/C,QAAS,CAAC,aAAc,eAGjE,GAAIk7B,GAAW0gB,EACf,CACC,IAAMyD,EAAiB,IAAIlqB,GAAmB,CAACtvB,OAAOpwB,EAAKQ,OAAO,2BACjEirB,QAAQ,WACH06C,EACHgC,IAEA57B,OAGH66B,EAAOr4C,YAAY66C,EAAer/C,SAClC+kB,GAAqBs6B,EAAer/C,QAAS,CAAC,aAAc,cAE7D,IAAIv3B,OAAO82B,SAAS,CACnB,IAAIiU,EAAgBypC,EAAS55D,IAAI,YAC5BmwB,IAEJA,EAAgBof,GAAQQ,iBAAiB7pD,OAE1CpD,QAAQmC,IAAI,uBACZnC,QAAQmC,IAAIkrC,GACZxT,EAAQqD,MAAM7C,KAAOre,OAAOqxB,EAAc,IAAM,KAChDxT,EAAQqD,MAAMhD,IAAMle,OAAOqxB,EAAc,IAAM,KAE/C,IAAI8rC,EAAYrC,EAAS55D,IAAI,QACzBi8D,GAECA,EAAU,GAAKhI,IAClBgI,EAAU,GAAKhI,GACZgI,EAAU,GAAK9H,IAClB8H,EAAU,GAAK9H,GAChBx3C,EAAQqD,MAAMpjB,MAAQkC,OAAOm9D,EAAU,IAAM,KAC7Ct/C,EAAQqD,MAAMnjB,OAASiC,OAAOm9D,EAAU,IAAM,OAG9Ct/C,EAAQqD,MAAMpjB,MAAQkC,OAAOk6D,GAAgB,KAC7Cr8C,EAAQqD,MAAMnjB,OAASiC,OAAOm6D,GAAiB,MAIjD,IAAIiD,EAActC,EAAS55D,IAAI,UAyC/B,SAAS66D,IACR,IAAMl4B,EAAI02B,EAA6B,EAAlBtF,GAAQ4C,QAAa,EAC1CsE,GAAsB,CACrBr+D,OAAO2uB,GAA4Bxb,SAASgN,iBAAiBm4B,YAC7Dr4C,QAAQ0uB,GAA4Bxb,SAASgN,iBAAiBuzB,aAAe3N,EAC7E3lB,IAAIq8C,GAAWtF,GAAQ4C,QAAQ,EAC/Bx5C,KAAKk8C,GAAWtF,GAAQ4C,QAAQ,IAWlC,SAASyE,IACJzC,GACH+B,KACD/B,GAAqB,EACrBgC,KAYD,SAASh8B,IAER4Q,GAAQC,WAAW5oD,OAAO2oD,GAAQC,WAAWxmD,QAAQ9C,MAAO,GAC5Dy2B,EAAQ0H,WAAW2tB,YAAYr1B,GAoK/BxnB,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAW7B,SAlKpCO,GAAQuB,8BAA8B37C,GAYvC,SAASolE,IACR3iB,GAAY,EACTshB,IA5EHv8C,EAAQsE,UAAUnrB,OAAO,WA8EzBy5C,GAAQmB,WAAWv7C,GACnB+jE,GAAU,EAkIV/jE,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAWlC,aA/HrC,SAAS6rB,IACJtB,GAEJiD,IAED,SAASA,IA3FRx/C,EAAQsE,UAAUtrB,IAAI,WA6FtBujE,GAAU,EA2HV/jE,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAWhC,cAzHpC6rB,KAOD,SAASL,KAELziB,IACH4iB,IACA/B,EAAgBiD,MACbrC,GAAYj0E,OAAO82B,UACrB2+C,IACDnC,EAAiBgD,KACjB9jB,GAAY,EAoGZziD,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAWnC,YAlGpCgsB,MAED,SAASJ,GAAW8B,GACnB,IAAD,EACC,GAAIxkB,EAAJ,CACA,GAAI6gB,EAEH,GAAK2D,EAOA,CACJ,IACIC,EADID,EAAkBj/C,MAAQoO,GAA4Bxb,SAASgN,iBAAiBm4B,YAClEujB,EAAc77D,MAChC0/D,EAAIF,EAAkBj/C,KAAOk/C,EACjCpB,GAAsB,CACrBr+D,MAAM67D,EAAc77D,MACpBC,OAAO47D,EAAc57D,OACtBsgB,KAAKm/C,SAbLrB,GAAsB,CACrBr+D,MAAM67D,EAAc77D,MACpBC,OAAO47D,EAAc57D,OACrBmgB,IAAIy7C,EAAcz7C,IAClBG,KAAKs7C,EAAct7C,OAatBy6B,GAAY,EACZ,UAAAziD,EAAKymE,aAAL,SAAY/H,eAiFZ1+D,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAW/B,eA9ErC,SAAS8rB,KAEHhjB,EAMJ0iB,KAJAD,KAOF,SAASK,KAER,IAAM/pB,EAAYpB,GAAQC,WACpBge,EAAW7c,EAAU/pD,OAAO+pD,EAAU3nD,QAAQmM,GAAO,GAAG,GAC9Dw7C,EAAUlqD,KAAK+mE,GACfje,GAAQgB,kBAiBT,SAASmrB,KAER,IAAI/4B,EAAsB,EAAlBoxB,GAAQ4C,QAChB,OAAO,IAAK,WACV,IAAIxhE,EAAOjP,KACXA,KAAK0W,MAAM+f,EAAQ2C,YAAcqjB,EACjCz8C,KAAK2W,OAAQ8f,EAAQ4C,aAAeojB,EACpCz8C,KAAK82B,IAAKL,EAAQ6S,UAClBtpC,KAAKi3B,KAAMR,EAAQyS,WACnBlpC,KAAKu1E,OAAO,SAAS73D,GACpB,OAAOzO,EAAKyH,OAAOgH,EAAEhH,OAAOzH,EAAK0H,QAAQ+G,EAAE/G,QAAQ1H,EAAK6nB,KAAKpZ,EAAEoZ,KAAK7nB,EAAKgoB,MAAMvZ,EAAEuZ,OAKrF,SAAS89C,GAAsBx9D,GAE9Bkf,EAAQqD,MAAMnjB,OAASiC,OAAOrB,EAAOZ,QAAU,KAC/C8f,EAAQqD,MAAMpjB,MAAQkC,OAAOrB,EAAOb,OAAS,UAC5B7Y,IAAb0Z,EAAOuf,MACVL,EAAQqD,MAAMhD,IAAMle,OAAOrB,EAAOuf,KAAO,WACxBj5B,IAAd0Z,EAAO0f,OACVR,EAAQqD,MAAM7C,KAAOre,OAAOrB,EAAO0f,MAAQ,MAkC7C,SAASw9C,KACRxlE,EAAKhB,cAAc,CAAC5Q,KAAKstD,GAAWjC,SAAUxpD,OAAO+P,IAnPlD+mE,IAEHv/C,EAAQqD,MAAMwwB,OAAS1xC,OAAOo9D,IAE/Bv/C,EAAQwE,YAAY+yC,GAEpBhuE,KAAK+0E,sBA2CL,YAA8E,IAA3Br+D,EAA0B,EAA1BA,MAAOC,EAAmB,EAAnBA,OAAQmgB,EAAW,EAAXA,IAAKG,EAAM,EAANA,KACtE89C,GAAsB,CACrBr+D,MAAMA,EACNC,OAAOA,EACPmgB,IAAIA,EAAI+2C,GAAQz3D,MAChB6gB,KAAKA,EAAK42C,GAAQz3D,SA/ChB48D,GAAUiD,IACd5sB,GAAQqB,4BAA4Bz7C,GAChB,GAAhBulE,IAAsBvlE,EAAKulE,gBAoPhClC,GAAc3nB,WAAaA,GACZ2nB,UC3fM+D,IADGj5E,EAAlByC,iB,WAEL,WAAYsB,GAAO,wBACXg8B,EAA8Bh8B,EAA9Bg8B,MAAO6O,EAAuB7qC,EAAvB6qC,SAAUsqC,EAAan1E,EAAbm1E,YACxBt2E,KAAKu4C,cAAgB+9B,EACrBt2E,KAAKo4C,UAAYpM,EACjBhsC,KAAKq4C,eAAarM,EAClBhsC,KAAKs4C,uBAAwBt4C,KAAKs4C,uBAAuBn4C,KAAKH,MAC9DA,KAAK+9B,wBAAyB/9B,KAAK+9B,wBAAwB59B,KAAKH,MAChEA,KAAKu4C,cAAgB+9B,EACrBt2E,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,mBACzBzP,KAAKq4C,cACPr4C,KAAKy4B,SAASsC,UAAUtrB,IAAI,gBAE7B,IAAM8mE,EAAkB1sD,SAASC,cAAc,OAC/CysD,EAAgBx7C,UAAUtrB,IAAI,YAC3BzP,KAAKo4C,WACPp4C,KAAKo4C,UAAUhpC,SAAQ,SAAAuuD,GAAK,OAAE4Y,EAAgBt7C,YAAY0iC,MAC3D39D,KAAKy4B,SAASwC,YAAYs7C,GAC1B,IAAMC,EAAe3sD,SAASC,cAAc,OAC5C0sD,EAAaz7C,UAAUtrB,IAAI,SAC3B+mE,EAAa76C,UAAYwB,EACzBn9B,KAAKy4B,SAASwC,YAAYu7C,GAE1B,IAAMC,EAA2B5sD,SAASC,cAAc,OACxD2sD,EAAyB17C,UAAUtrB,IAAI,uBACvCzP,KAAKy4B,SAASwC,YAAYw7C,GAE1B,IAAMC,EAA4B7sD,SAASC,cAAc,OACzD4sD,EAA0B37C,UAAUtrB,IAAI,wBACxCzP,KAAKy4B,SAASwC,YAAYy7C,GAE1B12E,KAAK22E,wBAA0B,IAAI/qB,GAAmB,CAACtvB,OAAOpwB,EAAKQ,OAAO,2BAA4BirB,QAAQ33B,KAAKs4C,yBACnHm+B,EAAyBx7C,YAAYj7B,KAAK22E,wBAAwBlgD,SAElEz2B,KAAKyzD,yBAA2B,IAAI7H,GAAmB,CAACtvB,OAAOpwB,EAAKQ,OAAO,2BAA4BirB,QAAQ33B,KAAK+9B,0BACpH24C,EAA0Bz7C,YAAYj7B,KAAKyzD,yBAAyBh9B,S,qEAOjEz2B,KAAKu4C,eACPv4C,KAAKu4C,cAAcC,S,gDAGjBx4C,KAAKu4C,eACPv4C,KAAKu4C,cAAcE,U,8BARpB,OAAOz4C,KAAKy4B,a,MCvCCm+C,GAT0B,CACxCC,WAAW,aACXC,gBAAgB,kBAChBC,eAAe,iBACfC,QAAQ,UACRC,YAAY,cACZC,KAAK,OACLC,MAAM,SCIcC,IADIh6E,EAAlByC,iB,WAEN,WAAYsB,GAAO,IAAD,+BACTuuB,EACmEvuB,EADnEuuB,iBAAkBsgB,EACiD7uC,EADjD6uC,aAAcC,EACmC9uC,EADnC8uC,gBAAiB4wB,EACkB1/D,EADlB0/D,eAAgBwW,EACEl2E,EADFk2E,mBACxEC,EAA0En2E,EAA1Em2E,gBAAiB/0E,EAAyDpB,EAAzDoB,cAAe6tC,EAA0CjvC,EAA1CivC,6BAA8BD,EAAYhvC,EAAZgvC,WAC/DnwC,KAAKgxC,sCAAwCZ,EAC7CpwC,KAAK+wC,oBAAsBZ,EAC3BnwC,KAAKyS,eAAelQ,EACpBvC,KAAKu3E,iBAAmBv3E,KAAKu3E,iBAAiBp3E,KAAKH,MACnDA,KAAKw3E,yBAA2Bx3E,KAAKw3E,yBAAyBr3E,KAAKH,MACnEA,KAAKy3E,uBAAyBz3E,KAAKy3E,uBAAuBt3E,KAAKH,MAC/DA,KAAK03E,+BAAiC13E,KAAK03E,+BAA+Bv3E,KAAKH,MAC/EA,KAAK23E,kBAAoBjoD,EACzB1vB,KAAK4wC,sBAAwBZ,EAC7BhwC,KAAK6wC,yBAA2BZ,EAChCjwC,KAAK+gE,wBAA0BF,EAC/B7gE,KAAKghE,2BAA6BhhE,KAAKghE,2BAA2B7gE,KAAKH,MACvEA,KAAKmhE,2BAA6BnhE,KAAKmhE,2BAA2BhhE,KAAKH,MACvEA,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,WAC5BzP,KAAK43E,iBAAmB/tD,SAASC,cAAc,OAC/C9pB,KAAK43E,iBAAiB78C,UAAUtrB,IAAI,aACpCzP,KAAK63E,mBAAqBhuD,SAASC,cAAc,OACjD9pB,KAAK63E,mBAAmB98C,UAAUtrB,IAAI,eACtCzP,KAAK83E,8BAAgCjuD,SAASC,cAAc,OAC5D9pB,KAAK83E,8BAA8B/8C,UAAUtrB,IAAI,eACjDzP,KAAK+3E,kBAAoBluD,SAASC,cAAc,OAChD9pB,KAAK+3E,kBAAkBh9C,UAAUtrB,IAAI,cACrCzP,KAAKg4E,kBAAoBnuD,SAASC,cAAc,OAChD9pB,KAAKg4E,kBAAkBj9C,UAAUtrB,IAAI,cACrCzP,KAAKi4E,qBAAuBpuD,SAASC,cAAc,OACnD9pB,KAAKi4E,qBAAqBl9C,UAAUtrB,IAAI,iBACxC,CAACzP,KAAK43E,iBAAkB53E,KAAK63E,mBAAoB73E,KAAK83E,8BAA+B93E,KAAK+3E,kBACzF/3E,KAAKg4E,kBAAmBh4E,KAAKi4E,sBAC7B7oE,SAAQ,SAAA8oE,GAAY,OAAE,EAAKz/C,SAASwC,YAAYi9C,MACjDl4E,KAAK8gE,MAAQpoC,IAAMC,YACnB,IAAMw/C,EAAcz/C,IAAMuyB,cAAc5F,IACxC8F,IAAS/sB,OAAO+5C,EACf,CACC7yB,iBAAiBtlD,KAAKghE,2BACtBnnC,IAAI75B,KAAK8gE,MACTtlB,sBAAqB,IAEtBx7C,KAAKi4E,sBACN,IAAMG,EAAuB1oD,EAAiB0oD,uBAE9Cp4E,KAAKq4E,oBAAsB,IAAIzsB,GAAmB,CAChDrkC,UAAU,CAAC,0BAA2B,eACtC+U,OAAOpwB,EAAKQ,OAAO,+BACnBirB,QAAQ33B,KAAKmhE,6BAEfnhE,KAAKi4E,qBAAqBh9C,YAAYj7B,KAAKq4E,oBAAoB5hD,SAG/Dz2B,KAAKs4E,uBAAyB,IAAI1sB,GAAmB,CACnDrkC,UAAU,CAAC,sBAAuB,eAClC+U,OAAO87C,EAAwBlsE,EAAKQ,OAAO,8BAAgCR,EAAKQ,OAAO,uCACvFirB,QAAQ2/C,IAEVt3E,KAAKi4E,qBAAqBh9C,YAAYj7B,KAAKs4E,uBAAuB7hD,SAGlEz2B,KAAKs4E,uBAAyB,IAAI1sB,GAAmB,CACnDrkC,UAAU,CAAC,yBAA0B,eACrC+U,OAAOpwB,EAAKQ,OAAO,gCACnBirB,QAAQ0/C,IAEVr3E,KAAKi4E,qBAAqBh9C,YAAYj7B,KAAKs4E,uBAAuB7hD,SAElEz2B,KAAKu4E,kBAAoB1uD,SAASC,cAAc,UAChD9pB,KAAKu4E,kBAAkBx9C,UAAUtrB,IAAI,sBACrCzP,KAAKu4E,kBAAkB9qE,iBAAiB,QAASzN,KAAKy3E,wBACtDz3E,KAAKu4E,kBAAkB58C,UAAY,aACnC37B,KAAKi4E,qBAAqBh9C,YAAYj7B,KAAKu4E,mBAE3C,IAAMC,EAAqB3uD,SAASC,cAAc,UAClD0uD,EAAmBz9C,UAAUtrB,IAAI,wBACjC+oE,EAAmB/qE,iBAAiB,QAASzN,KAAKw3E,0BAClDgB,EAAmB78C,UAAY,gBAC/B37B,KAAKi4E,qBAAqBh9C,YAAYu9C,GAEtCx4E,KAAK03E,+BAA+BhoD,G,2EAMNA,GAAkB,IAAD,EAC/C,UAAA1vB,KAAKy4E,gCAAL,SAA+BjqE,UAC/BxO,KAAKy4E,yBAA2B59D,GAAuBmC,SAAShd,KAAM0vB,EAAkB,WAAY1vB,KAAKu3E,kBACzGv3E,KAAK43E,iBAAiBj8C,UAAYjM,EAAiB5yB,KACnDkD,KAAK63E,mBAAmBl8C,UAAY,QAAQ/iB,OAAO8W,EAAiBllB,QACpExK,KAAK83E,8BAA8Bn8C,UAAYjM,EAAiB7tB,EAAWu0C,eAAe1mB,EAAiBtR,QAAQ,SACnH,IAAMs6D,EAAahpD,IAAqBA,EAAiByyC,SAAWzyC,EAAiBipD,WACrF34E,KAAK+3E,kBAAkBp8C,WAAc+8C,GAAahpD,EAAiBvR,OAAO,EAAG,IAAIuR,EAAiB4yC,YAClG,IAAMsW,EAAkB54E,KAAKyS,eAAenN,eAApB,eAA2CoqB,EAAiBvd,WAA5D,cAAmF,GAC3GnS,KAAKg4E,kBAAkBr8C,UAAY,MAAM/iB,OAAO8W,EAAiBxd,WAAW,YAAY0mE,EAC5DlpD,GAAkBxjB,EAAKmb,0BAA0BqI,EAAkB1vB,KAAKyS,gBAEnGzS,KAAKu4E,kBAAkBx9C,UAAUtrB,IAAI,WAErCzP,KAAKu4E,kBAAkBx9C,UAAUnrB,OAAO,a,uCAEzBtN,GAChBtC,KAAK8gE,MAAM5nC,QAAQ7a,SAAS/b,I,iDAG5BtC,KAAKgxC,sCAAsC,CAACnkC,KAAK7M,KAAK23E,sB,+CAGtD33E,KAAK+wC,oBAAoB/wC,KAAK23E,qB,iDAQJt5D,GACvBA,EAASre,KAAK4wC,sBAAsB5wC,KAAK23E,mBACvC33E,KAAK6wC,yBAAyB7wC,KAAK23E,qB,iDAEdpoE,GAC1BvP,KAAK+gE,wBAAwB,CAACkB,SAASjiE,KAAK23E,sB,yBAxCpCjoD,GACR1vB,KAAK23E,kBAAoBjoD,EACzB1vB,KAAK03E,+BAA+BhoD,K,8BA4BpC,OAAO1vB,KAAKy4B,W,kCAGZ,OAAOm+C,GAAmCI,Y,MC5HvB6B,G,oGACuC,IAA/CpiD,EAA8C,EAA9CA,QAAS6X,EAAqC,EAArCA,UAAWC,EAA0B,EAA1BA,cAAeC,EAAW,EAAXA,UAC9C,OAAO,IAAIH,GAAc,CAAC5X,UAAS6X,YAAWC,gBAAeC,kB,KAG/DhhC,EAAY6gC,ICA4BjxC,EAAlCyC,iBAAkCzC,EAAhB0C,e,IACHg5E,G,WACpB,cAEgB,IAFHC,EAEE,EAFFA,aAAc1zC,EAEZ,EAFYA,cAAe2zC,EAE3B,EAF2BA,2BAA4BzxD,EAEvD,EAFuDA,UACtE0xD,EACe,EADfA,mBAAoBC,EACL,EADKA,yBAA0BvhD,EAC/B,EAD+BA,QAASwhD,EACxC,EADwCA,qBAAsBC,EAC9D,EAD8DA,SAC7E72E,EAAe,EAAfA,cAAe,oBACdvC,KAAKyS,eAAiBlQ,EACtBvC,KAAKq5E,2BAAuD,IAA3BH,EACjCl5E,KAAKs5E,2BAA+Cz7E,IAAvBs7E,EAAiC,EAAEA,EAChEn5E,KAAKu5E,cAAgBR,EACrB/4E,KAAKw5E,eAAiBn0C,EACtBrlC,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,iBACzB2pE,GACFp5E,KAAKy4B,SAAShrB,iBAAiB,OAAQ2rE,GACxC/zC,EAAcpK,YAAYj7B,KAAKy4B,UAC5BlR,GACFvnB,KAAKy4B,SAASsC,UAAUtrB,IAAI8X,GAC7BvnB,KAAKy5E,uBAAwBz5E,KAAKy5E,uBAAuBt5E,KAAKH,MAC9DA,KAAK05E,iBAAmB15E,KAAK05E,iBAAiBv5E,KAAKH,MACnDA,KAAK25E,kBAAoB35E,KAAK25E,kBAAkBx5E,KAAKH,MACrDA,KAAK45E,gCAAiC55E,KAAK45E,gCAAgCz5E,KAAKH,MAChFA,KAAK65E,QAAU75E,KAAK65E,QAAQ15E,KAAKH,MACjCA,KAAK85E,UAAYb,EAAmBj5E,KAAK05E,iBAAiB15E,KAAK25E,kBAE9D35E,KAAKmzC,4BADH6lC,GAGiCH,GAAeppE,IAAI,CAACgnB,QAAQ4O,EAAemJ,WAAU,IACzFxuC,KAAKmzC,4BAA6B1lC,iBAAiB,UAAWzN,KAAKy5E,wBACnElkE,WAAWvV,KAAK85E,UAAW,GACxBniD,GACF33B,KAAKy4B,SAAShrB,iBAAiB,SAAS,kBAAIkqB,EAAQohD,M,mEAE/BxpE,GACtBvP,KAAK85E,c,yCAGL,IAAMC,EAAuB/5E,KAAKu5E,cAAcliE,uBAAuBrX,KAAKs5E,sBAAsBt5E,KAAKy4B,SAASu2B,aAC7FhvD,KAAK45E,gCAAgCG,KAGxD/5E,KAAKg6E,0BAA4BD,EACjC/5E,KAAK65E,QAAQE,M,0CAGb,IAAMA,EAAuB/5E,KAAKu5E,cAAcliE,uBAAuBrX,KAAKs5E,sBAAsBt5E,KAAKy4B,SAAS2xB,cAC7FpqD,KAAK45E,gCAAgCG,KAGxD/5E,KAAKg6E,0BAA4BD,EACjC/5E,KAAK65E,QAAQE,M,sDAEkBA,GAC/B,QAAG/5E,KAAKq5E,4BAA4Br5E,KAAKg6E,8BAGtCD,EAAqBrjE,MAAM1W,KAAKg6E,0BAA0BtjE,OAE1DqjE,EAAqBpjE,OAAO3W,KAAKg6E,0BAA0BrjE,U,8BAIvD8oD,GACPz/D,KAAKy4B,SAASjO,IAAd,UAAuBte,EAAKe,iBAAiBjN,KAAKyS,eAAe5N,WAAjE,OAA6E7F,EAAUuU,iBAAiBksD,EAAkBjzD,iB,8BAG1H,OAAOxM,KAAKy4B,a,KCzDOwhD,IADI78E,EAAlByC,iB,WAEN,WAAYsB,GAAO,wBACVuuB,EAAuDvuB,EAAvDuuB,iBAAkBwqD,EAAqC/4E,EAArC+4E,qBAAsB33E,EAAepB,EAAfoB,cAChDvC,KAAKyS,eAAiBlQ,EACtBiL,EAAYxN,MACZA,KAAK23E,kBAAoBjoD,EACzB1vB,KAAKm6E,sBAAwBD,EAC7Bl6E,KAAKo6E,2BAA6Bp6E,KAAKo6E,2BAA2Bj6E,KAAKH,MACvEA,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,WAC5BzP,KAAKq6E,YAAar6E,KAAKq6E,YAAYl6E,KAAKH,MACxCA,KAAKgvC,SAAWhvC,KAAKgvC,SAAS7uC,KAAKH,MACnCA,KAAKs6E,mBAAqBt6E,KAAKs6E,mBAAmBn6E,KAAKH,MACvDA,KAAKu6E,gBAAkBv6E,KAAKu6E,gBAAgBp6E,KAAKH,MACjDA,KAAKmzC,4BAA8B,IAAI9E,GAAc,CAAC5X,QAAQz2B,KAAKy4B,WACnEz4B,KAAKmzC,4BAA4B1lC,iBAAiB,UAAWzN,KAAKgvC,UAClEhvC,KAAKw6E,YAAc,IAAI17C,GAAK9+B,KAAKu6E,iBACjCv6E,KAAKy6E,mBAAqB5wD,SAASC,cAAc,OACjD9pB,KAAKy6E,mBAAmB1/C,UAAUtrB,IAAI,sBACtCzP,KAAKy4B,SAASwC,YAAYj7B,KAAKy6E,oBAC/Bz6E,KAAKo6E,6B,yEAMuB,IAAD,OAC3Bp6E,KAAK06E,mBAAqB,GAC1B16E,KAAK23E,kBAAkBt/D,MAAMmH,WAAWpQ,SAAQ,SAAC+I,GAChD,EAAKuiE,mBAAqB,EAAKA,mBAAmB3wE,OAAOoO,EAAKP,WAE/DrC,WAAWvV,KAAKq6E,YAAa,K,iCAG7B,IAAM3jE,EAAQ1W,KAAKy4B,SAASu2B,YACzBt4C,EAAM,IACR1W,KAAKs6E,mBAAmB,2BAGtB5jE,EAAM,IACR1W,KAAKs6E,mBAAmB,2BAGtB5jE,EAAM,IACR1W,KAAKs6E,mBAAmB,6BAGtB5jE,EAAM,IACR1W,KAAKs6E,mBAAmB,4BAGzBt6E,KAAKs6E,mBAAmB,8B,yCAGNK,GACf36E,KAAK46E,4BACP56E,KAAKy4B,SAASsC,UAAUnrB,OAAO5P,KAAK46E,4BAErC56E,KAAK46E,2BAA6BD,EACjC36E,KAAKy4B,SAASsC,UAAUtrB,IAAIkrE,K,oCAEhB,IAAD,OACZ36E,KAAKy4B,SAASkD,UAAU,GACI,IAAIm9C,GAAsB,CACrDC,aAAa/4E,KAAK23E,kBAAkB51D,KAAK7D,eACzCmnB,cAAcrlC,KAAKy4B,SACnBugD,2BAA2Bh5E,KAAKmzC,4BAChC5rB,UAAU,aACV0xD,oBAAmB,EACnBthD,QAAQ,kBAAI,EAAKwiD,sBAAsB,CAAC,EAAKxC,kBAAkB51D,KAAK7D,kBACpEk7D,SAASp5E,KAAKw6E,YAAY9rD,QAC1BnsB,cAAcvC,KAAKyS,iBARpB,IAUMqO,EAAkB9gB,KAAK23E,kBAAkB51D,KAAKjB,gBACjDA,GACF,IAAIg4D,GAAsB,CACxBC,aAAaj4D,EACbukB,cAAcrlC,KAAKy4B,SACnBugD,2BAA2Bh5E,KAAKmzC,4BAChC5rB,UAAU,aACV0xD,oBAAmB,EACnBthD,QAAQ,kBAAI,EAAKwiD,sBAAsB,CAACr5D,KACxCve,cAAcvC,KAAKyS,iBAGtBzS,KAAKy6E,mBAAmB9+C,UAAU,GAClC37B,KAAK06E,mBAAmBtrE,SAAQ,SAAA2pE,GAC/B,IAAID,GAAsB,CACzBC,eACA1zC,cAAe,EAAKo1C,mBACpBzB,2BAA2B,EAAK7lC,4BAChC5rB,UAAU,aACV0xD,oBAAmB,EACnBthD,QAAQ,kBAAI,EAAKwiD,sBAAsB,CAACpB,KACxCx2E,cAAc,EAAKkQ,sB,wCAWrBzS,KAAKiO,cAAc,CAAC5Q,KAAK,a,yBAnFjBqyB,GACR1vB,KAAK23E,kBAAoBjoD,EACzB1vB,KAAKo6E,+B,8BA2EL,OAAOp6E,KAAKy4B,W,kCAGZ,OAAOm+C,GAAmCI,Y,MCzGvB6D,IADIz9E,EAAlByC,iB,WAEN,WAAYsB,GAAO,wBACVuuB,EAAkBvuB,EAAlBuuB,iBACR1vB,KAAK23E,kBAAoBjoD,EACzB1vB,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,eAC5BzP,KAAK6qD,cAAgBhhC,SAASC,cAAc,OAC5C9pB,KAAK6qD,cAAc9vB,UAAUtrB,IAAI,SACjCzP,KAAKy4B,SAASwC,YAAYj7B,KAAK6qD,eAC/B7qD,KAAK6qD,cAAclvB,UAAYjM,EAAiBtd,M,+CAExCsd,GACR1vB,KAAK23E,kBAAoBjoD,EACzB1vB,KAAK6qD,cAAclvB,UAAYjM,EAAiBtd,Q,8BAGhD,OAAOpS,KAAKy4B,W,kCAGZ,OAAOm+C,GAAmCK,gB,MChBvB6D,IADI19E,EAAlByC,iB,WAEN,WAAYsB,GAAO,wBACVuuB,EAAuDvuB,EAAvDuuB,iBAAkBwqD,EAAqC/4E,EAArC+4E,qBAAsB33E,EAAepB,EAAfoB,cAChDvC,KAAKyS,eAAiBlQ,EACtBvC,KAAK23E,kBAAoBjoD,EACzB1vB,KAAKm6E,sBAAsBD,EAC3B1sE,EAAYxN,MACZA,KAAKy4B,SAAW5O,SAASC,cAAc,OACnC9pB,KAAK23E,kBAAkBr5D,kBAC3Bte,KAAKy4B,SAASsC,UAAUtrB,IAAI,eAC5BzP,KAAKgvC,SAAWhvC,KAAKgvC,SAAS7uC,KAAKH,MACnCA,KAAK+6E,wBAA0B/6E,KAAK+6E,wBAAwB56E,KAAKH,MACjEA,KAAKo6E,2BAA6Bp6E,KAAKo6E,2BAA2Bj6E,KAAKH,MACvEA,KAAKu6E,gBAAkBv6E,KAAKu6E,gBAAgBp6E,KAAKH,MACjDA,KAAKmzC,4BAA8B,IAAI9E,GAAc,CAAC5X,QAAQz2B,KAAKy4B,WACnEz4B,KAAKmzC,4BAA4B1lC,iBAAiB,UAAWzN,KAAKgvC,UAClEhvC,KAAKw6E,YAAc,IAAI17C,GAAK9+B,KAAKu6E,iBACjCv6E,KAAKy6E,mBAAqB5wD,SAASC,cAAc,OACjD9pB,KAAKy6E,mBAAmB1/C,UAAUtrB,IAAI,4BACtCzP,KAAKy4B,SAASwC,YAAYj7B,KAAKy6E,oBAC/Bz6E,KAAKo6E,8B,yEAEuB,IAAD,OAC3Bp6E,KAAKg7E,yBAA2B,GAChCzlE,YAAW,WACV,EAAKklE,mBAAmB9+C,UAAU,GAClC,EAAKg8C,kBAAkBr5D,gBAAgBlP,SAAQ,SAAA2pE,GAC9C,IAAMkC,EAAwB,IAAInC,GAAsB,CACvDC,eACA1zC,cAAe,EAAKo1C,mBACpBzB,2BAA2B,EAAK7lC,4BAChC5rB,UAAU,mBACV0xD,oBAAmB,EACnBthD,QAAQ,kBAAI,EAAKwiD,sBAAsB,CAACpB,KACxCK,SAAS,EAAKoB,YAAY9rD,QAC1BnsB,cAAc,EAAKkQ,iBAEpB,EAAKuoE,yBAAyBz6E,KAAK06E,QAElC,K,iCAGH,IAAMvkE,EAAQ1W,KAAKy4B,SAASu2B,YACzBhvD,KAAK23E,kBAAkBr5D,iBAAiBte,KAAK23E,kBAAkBr5D,gBAAgB9e,OAAO,GACrFkX,EAAM,IACR1W,KAAK+6E,wBAAwB,iCAI/B/6E,KAAK+6E,wBAAwB,mC,8CAENJ,GACpB36E,KAAK46E,4BACP56E,KAAKy4B,SAASsC,UAAUnrB,OAAO5P,KAAK46E,4BAErC56E,KAAK46E,2BAA6BD,EACjC36E,KAAKy4B,SAASsC,UAAUtrB,IAAIkrE,K,wCAa7B36E,KAAKiO,cAAc,CAAC5Q,KAAK,a,yBAXjBqyB,GACR1vB,KAAK23E,kBAAoBjoD,EACzB1vB,KAAKo6E,2BAA2B1qD,K,8BAGhC,OAAO1vB,KAAKy4B,W,kCAGZ,OAAOm+C,GAAmCC,e,MChEvBqE,IADI99E,EAAlByC,iB,WAEN,WAAYsB,GAAO,wBACVuuB,EAAuDvuB,EAAvDuuB,iBAAwCntB,GAAepB,EAArC+4E,qBAAqC/4E,EAAfoB,eAChDiL,EAAYxN,MACZA,KAAKyS,eAAiBlQ,EACtBvC,KAAK23E,kBAAoBjoD,EACzB1vB,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,SAC5BzP,KAAKu6E,gBAAkBv6E,KAAKu6E,gBAAgBp6E,KAAKH,MACjDA,KAAKm7E,iBAAmBn7E,KAAKm7E,iBAAiBh7E,KAAKH,MACnDA,KAAKo7E,aAAe,IAAI3pB,GAAY,CACnCC,WAAU,EACVG,gBAAe,EACfD,sBAAqB,IAEtB5xD,KAAKy4B,SAASwC,YAAYj7B,KAAKo7E,aAAa3kD,SAC5Cz2B,KAAKo6E,6B,yEAMuB,IAAD,EAC3B,UAAAp6E,KAAKq7E,+BAAL,SAA8B7sE,UAC9BxO,KAAKq7E,wBAA0BxgE,GAAuBmC,SAAShd,KAAMA,KAAK23E,kBAAkB7qE,UAAW,WAAY9M,KAAKm7E,oB,uCAExG74E,GAChB,IACM1E,OADiBC,IAARyE,GAA2B,OAARA,EACjB,KAChBA,EAAMQ,QAAQ,SAAS,EAAER,EAAO4J,EAAKe,iBAAiBjN,KAAKyS,eAAe5N,UAAUvC,EACrFtC,KAAKo7E,aAAa1zC,KAAK,CAAC9pC,IAAIA,M,wCAS5BoC,KAAKiO,cAAc,CAAC5Q,KAAK,a,yBArBjBqyB,GACR1vB,KAAK23E,kBAAoBjoD,EACzB1vB,KAAKo6E,+B,8BAaL,OAAOp6E,KAAKy4B,W,kCAGZ,OAAOm+C,GAAmCO,U,MCtCvBmE,IADIl+E,EAAlByC,iB,WAEN,WAAYsB,GAAO,wBACVuuB,EAAkBvuB,EAAlBuuB,iBACRliB,EAAYxN,MACZA,KAAK89B,YAAc99B,KAAK89B,YAAY39B,KAAKH,MACzCA,KAAK23E,kBAAoBjoD,EACzB1vB,KAAKgf,WAAa0Q,EAAiB5iB,UAC/B9M,KAAKgf,aACThf,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,QAC5BzP,KAAKu7E,eAAiB1xD,SAASC,cAAc,UAC7C9pB,KAAKu6E,gBAAkBv6E,KAAKu6E,gBAAgBp6E,KAAKH,MACjDA,KAAKu7E,eAAe9tE,iBAAiB,OAAQzN,KAAKu6E,iBAClDv6E,KAAKw7E,gBAAkBx7E,KAAKw7E,gBAAgBr7E,KAAKH,MACjDA,KAAKovD,6BAA+BpvD,KAAKovD,6BAA6BjvD,KAAKH,MAC3EA,KAAKy4B,SAASwC,YAAYj7B,KAAKu7E,gBAC/Bv7E,KAAKq7E,wBAA0BxgE,GAAuBmC,SAAShd,KAAMA,KAAKgf,WAAY,UAAWhf,KAAKw7E,iBACtGx7E,KAAKi0D,sBAAwB,IAAIrI,GAAmB,CACnDrkC,UAAU,oBACV+U,OAAOpwB,EAAKQ,OAAO,0BACnBirB,QAAQ33B,KAAKovD,+BACdpvD,KAAKy4B,SAASwC,YAAYj7B,KAAKi0D,sBAAsBx9B,U,2EAIrDqN,GAAWqY,OAAOn8C,KAAKy4B,Y,sCAERn2B,GACJ,OAARA,QAAsBzE,IAARyE,GAIjBtC,KAAK89B,aAAY,GACjB99B,KAAKu7E,eAAe/wD,IAAMloB,GAJzBtC,KAAK89B,aAAY,K,kCAMPx7B,GACRA,EAAMtC,KAAKy4B,SAASsC,UAAUtrB,IAAI,WAChCzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,a,wCASpC5P,KAAKiO,cAAc,CAAC5Q,KAAK,a,8BANzB,OAAO2C,KAAKy4B,W,kCAGZ,OAAOm+C,GAAmCM,S,MCzCrCr3E,I,OAAkBzC,EAAlByC,kBACc47E,G,WACpB,WAAYt6E,GAAO,IAAD,+BA+Bbg8B,EA9BGkI,EAGiClkC,EAHjCkkC,cAAe3V,EAGkBvuB,EAHlBuuB,iBAAkBpgB,EAGAnO,EAHAmO,gBACvC0gC,EAEuC7uC,EAFvC6uC,aAAcC,EAEyB9uC,EAFzB8uC,gBAAiB4wB,EAEQ1/D,EAFR0/D,eAC/BqZ,EACuC/4E,EADvC+4E,qBAAsB33E,EACiBpB,EADjBoB,cAAem5E,EACEv6E,EADFu6E,SAAUtrC,EACRjvC,EADQivC,6BAC/CD,EAAuChvC,EAAvCgvC,WAAYwrC,EAA2Bx6E,EAA3Bw6E,0BACb37E,KAAK47E,YAAczrC,EACnB3iC,EAAYxN,MACZA,KAAK67E,UAAWH,EAChB17E,KAAK23E,kBAAoBjoD,EACzB1vB,KAAK+U,iBAAmBzF,EACxBtP,KAAK+gE,wBAAyBF,EAC9B7gE,KAAK87E,8BAAgC5B,EACrCl6E,KAAK+7E,2BAA6BJ,EAC9Bt2C,GAAcxlC,GAAiB,iBACnCG,KAAKw5E,eAAiBn0C,EACtBrlC,KAAKmjE,yBAA2B,KAChCnjE,KAAKy6B,KAAOz6B,KAAKy6B,KAAKt6B,KAAKH,MAC3BA,KAAK06B,KAAO16B,KAAK06B,KAAKv6B,KAAKH,MAC3BA,KAAK89B,YAAc99B,KAAK89B,YAAY39B,KAAKH,MACzCA,KAAKy4C,MAAQz4C,KAAKy4C,MAAMt4C,KAAKH,MAC7BA,KAAKwO,QAAUxO,KAAKwO,QAAQrO,KAAKH,MACjCA,KAAKg8E,oBAAsBh8E,KAAKg8E,oBAAoB77E,KAAKH,MACzDA,KAAKi8E,iBAAmBj8E,KAAKi8E,iBAAiB97E,KAAKH,MACnDA,KAAK+xC,kBAAoB/xC,KAAK+xC,kBAAkB5xC,KAAKH,MACrDA,KAAKk8E,iBAAmBl8E,KAAKk8E,iBAAiB/7E,KAAKH,MACnDA,KAAKm8E,YAAcn8E,KAAKm8E,YAAYh8E,KAAKH,MACzCA,KAAKo8E,SAAWp8E,KAAKo8E,SAASj8E,KAAKH,MACnCA,KAAKijE,sBAAwBjjE,KAAKijE,sBAAsB9iE,KAAKH,MAC7DA,KAAKq8E,8BAAgCr8E,KAAKq8E,8BAA8Bl8E,KAAKH,MAC7EA,KAAKs8E,2BAA6Bt8E,KAAKs8E,2BAA2Bn8E,KAAKH,MACvEA,KAAKu8E,kBAAoBv8E,KAAKu8E,kBAAkBp8E,KAAKH,MAErD,IAAMw8E,EAAwBx8E,KAAK23E,kBAAkB51D,KAAKlB,MAAMrhB,OAAO,EAEtE29B,EADEq/C,EACM,eAGA,yBAAyB9sD,EAAiBllB,OACnDxK,KAAKy8E,QAAU,IAAInK,GAAc,CAACM,eAAez1C,EAAOrgC,KAAKqgC,EAAO4wC,SAAS,IAAKG,SAAS,KAAMD,UAAU,IAAKE,UAAU,IACzH2E,aAAa,IAAKC,cAAc,IAAKE,SAAS,GAAIC,SAAS,GAAIF,WAAU,EAAOthB,WAAU,EAAOygB,aAAY,EAC7GC,aAAY,EAAMzgB,WAAU,EAAM0gB,iBAAgB,EAAOc,WAAU,EAAMjB,UAAS,EAAMmB,6BAA4B,EACpHh2E,KAAK8qD,GAAWzS,4BAEd8mC,GACFx8E,KAAK08E,iCAEN18E,KAAKy8E,QAAQhvE,iBAAiB6kE,GAAc3nB,WAAW7B,OAAQ9oD,KAAKo8E,UACpEp8E,KAAKy4B,SAAWz4B,KAAKy8E,QAAQ3lC,aAC7B92C,KAAKy4B,SAASsC,UAAUtrB,IAAI,6BAC5BzP,KAAK28E,aAAe38E,KAAKy8E,QAAQtH,iBAIjCn1E,KAAK48E,SAAW,IAAIxF,GAA+B,CAAC1nD,mBAAkBsgB,eACrEC,kBAAiB4wB,eAAe7gE,KAAKijE,sBACrCoU,mBAAmBr3E,KAAKg8E,oBACxB1E,gBAAgBt3E,KAAKi8E,iBACrB15E,gBAAe6tC,+BAA8BD,WAAWnwC,KAAK+xC,oBAC9D/xC,KAAK2iE,SAAW,IAAIsX,GAA+B,CAClDvqD,iBAAiBA,EACjBwqD,uBACA33E,kBAEDvC,KAAK4iE,YAAc,IAAIkY,GAAkC,CACxDprD,iBAAiBA,EACjBwqD,uBACA33E,kBAEDvC,KAAK+wB,aAAe,IAAI8pD,GAAmC,CAC1DnrD,iBAAiBA,IAElB1vB,KAAK68E,OAAS,IAAI3B,GAA6B,CAC9CxrD,iBAAiBA,EACjBntB,kBAEDvC,KAAK88E,MAAQ,IAAIxB,GAA4B,CAC5C5rD,iBAAiBA,EACjBntB,kBAEDvC,KAAK28E,aAAa1hD,YAAYj7B,KAAK48E,SAASnmD,SAC5Cz2B,KAAK+8E,mBAAqBlzD,SAASC,cAAc,OACjD9pB,KAAK28E,aAAa1hD,YAAYj7B,KAAK+8E,oBACnC/8E,KAAK+8E,mBAAmBhiD,UAAUtrB,IAAI,cACtCzP,KAAKg9E,UAAY,CAACh9E,KAAK2iE,SAAU3iE,KAAK4iE,YAAa5iE,KAAK+wB,aAAc/wB,KAAK68E,OAAQ78E,KAAK88E,OACxF98E,KAAKg9E,UAAU5tE,SAAQ,SAAA6tE,GAAO,OAC7B,EAAKF,mBAAmB9hD,YAAYgiD,EAAQxmD,YAC7Cz2B,KAAK+8E,mBAAmBtvE,iBAAiB,SAAUzN,KAAKu8E,mBAExDv8E,KAAKw5E,eAAev+C,YAAYj7B,KAAKy4B,UACrCz4B,KAAK88E,MAAMrvE,iBAAiB,SAAUzN,KAAKs8E,4BAC3Ct8E,KAAK2iE,SAASl1D,iBAAiB,SAAUzN,KAAKs8E,4BAC9Ct8E,KAAK4iE,YAAYn1D,iBAAiB,SAAUzN,KAAKs8E,4BACjDt8E,KAAKy6B,OACLz6B,KAAKd,OAAOuO,iBAAiB6kE,GAAc3nB,WAAWhC,YAAa3oD,KAAKs8E,4BACxEt8E,KAAKd,OAAOuO,iBAAiB6kE,GAAc3nB,WAAWjC,SAAU1oD,KAAKs8E,4BACrEt8E,KAAKd,OAAO43C,aAAarpC,iBAAiB,aAAczN,KAAKs8E,4B,0DAG7Dt8E,KAAK+8E,mBAAmBG,UAAU,I,wCAEjBrwE,GACjB7M,KAAK47E,YAAY/uE,GACjB7M,KAAKd,OAAOm1E,a,uDAEoB,IAAD,OACzBpW,EAAaj+D,KAAKd,OAAO21E,gBACzBsI,EAAsBtzD,SAASC,cAAc,OACnDqzD,EAAoBpiD,UAAUtrB,IAAI,iBAClC,IAAM2tE,EAAoB,SAACvwE,GAC1B,EAAK8qE,kBAAqB9qE,EAC1B,EAAKkvE,2BAA2B,EAAM,EAAKpE,mBAC3C,EAAK0F,0BAcAC,EAAiB,IAAIlhD,GAAW,CAACC,OAAOkhD,KAAa5lD,QAZ1C,SAACpoB,GACjB,IAAMsR,EAAQ,EAAK82D,kBAAkB51D,KAAKlB,MACpC28D,EAAkB38D,EAAM/d,QAAQ,EAAK60E,mBACrC8F,EAAWD,EAAgB,EAAE38D,EAAMrhB,OAAO,EAAEg+E,EAAgB,EAClEJ,EAAoBv8D,EAAM48D,KAQkDl2D,UAAU,SACjFm2D,EAAa,IAAIthD,GAAW,CAACC,OAAOshD,KAAchmD,QAP3C,SAACpoB,GACb,IAAMsR,EAAQ,EAAK82D,kBAAkB51D,KAAKlB,MACpC28D,EAAkB38D,EAAM/d,QAAQ,EAAK60E,mBACrC8F,EAAWD,GAAiB38D,EAAMrhB,OAAO,EAAE,EAAEg+E,EAAgB,EACnEJ,EAAoBv8D,EAAM48D,KAG2Cl2D,UAAU,aAChF41D,EAAoBliD,YAAYqiD,EAAe7mD,SAC/C,IAAMmnD,EAAc/zD,SAASC,cAAc,OAC3C8zD,EAAY7iD,UAAUtrB,IAAI,QAC1BmuE,EAAYjiD,UAAY,iBACxBwhD,EAAoBliD,YAAY2iD,GAChCT,EAAoBliD,YAAYyiD,EAAWjnD,SAC3CwnC,EAAW4f,aAAaV,EAAqBlf,EAAW6f,WAAW,M,+CAGnE99E,KAAK48E,SAAS/vE,KAAO7M,KAAK23E,kBAC1B33E,KAAK2iE,SAAS91D,KAAO7M,KAAK23E,kBAC1B33E,KAAK4iE,YAAY/1D,KAAO7M,KAAK23E,kBAC7B33E,KAAK+wB,aAAalkB,KAAO7M,KAAK23E,kBAC9B33E,KAAK68E,OAAOhwE,KAAO7M,KAAK23E,kBACxB33E,KAAK88E,MAAMjwE,KAAO7M,KAAK23E,oB,4CAEFpoE,GACrBvP,KAAK06B,OACL16B,KAAK+gE,wBAAwBxxD,K,4CAG7BvP,KAAKk8E,iBAAiBl8E,KAAK4iE,YAAYnsC,W,yCAGvCz2B,KAAKk8E,iBAAiBl8E,KAAK2iE,SAASlsC,W,uCAEpBA,GAChBz2B,KAAK+8E,mBAAmBG,UAAazmD,EAAQE,wBAAwBG,IAAM92B,KAAK+8E,mBAAmBG,UAAal9E,KAAK+8E,mBAAmB3yB,aAAa,I,mDAsBrHpqD,KAAK+8E,mBAAmBpmD,wBAAxD,IACMonD,EAA0B/9E,KAAK+8E,mBAAmBnb,aACxD5hE,KAAKg+E,yBAA2Bh+E,KAAKg9E,UAAUhzE,KAAI,SAAAizE,GACrBA,EAAQxmD,QAAQE,wBAG7C,MAAO,CAACsnD,eAFgBhB,EAAQxmD,QAAQ6S,UAAWy0C,EAE3BG,cADFjB,EAAQxmD,QAAQ6S,UAAU2zC,EAAQxmD,QAAQ4C,cAAe0kD,EACzCd,gB,oDAGVkB,EAAoC3sB,GAC7DxxD,KAAKg+E,0BAAyBh+E,KAAKs8E,6BACvC,IAAM8B,EAAyBp+E,KAAKg+E,yBAAyB37E,QAAO,SAAA+7E,GAAsB,OAAEA,EAAuBnB,QAAQoB,cAAcF,KAAoC,GAC7K,GAAIC,EAAJ,CACA,IAEME,EAF4BF,EAAuBH,gBACVG,EAAuBF,aAAeE,EAAuBH,gBAAgBzsB,EAEtH+sB,EAAev+E,KAAK+8E,mBAAmBnb,aAAa0c,EAC1Dt+E,KAAK+8E,mBAAmBG,UAAYqB,K,6BASpCv+E,KAAKy8E,QAAQnI,e,6BAGbt0E,KAAKy8E,QAAQpI,a,kCAEF/xE,GACRA,EACFtC,KAAKy4B,SAASsC,UAAUtrB,IAAI,WAE5BzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,a,8BAGhC5P,KAAKy8E,QAAQhkC,QACbz4C,KAAKwO,Y,iCAGLxO,KAAKwO,Y,gCAGL5R,QAAQmC,IAAI,kBACZiB,KAAK+U,iBAAiB/U,Q,uCAGtBA,KAAKy6B,S,0CAGLz6B,KAAKiO,cAAc,CAAC5Q,KAAK,WAAYmhF,wBAAwBx+E,S,uDAvE7BA,KAAK+8E,mBAAmBpmD,wBAAxD,IADqC,EAE/BonD,EAA0B/9E,KAAK+8E,mBAAmBnb,aAClD6c,EAAqBz+E,KAAK+8E,mBAAmBG,UAAUa,EACzDW,EAAiB,KACjBltB,EAAa,EALoB,cAMDxxD,KAAKg+E,0BANJ,IAMrC,IAAI,EAAJ,qBAAkE,CAAC,IAAzDI,EAAwD,QACjE,GAAIA,EAAuBH,gBAAgBQ,GAAqBL,EAAuBF,cAAcO,EAAmB,CACvHC,EAAiBN,EAAuBnB,QACxCzrB,GAAcitB,EAAoBL,EAAuBH,iBACtDG,EAAuBF,aAAeE,EAAuBH,gBAChE,QAXmC,8BAcrC,OAAOS,EAAe,CACrBL,YAAYK,EAAeL,YAC3B7sB,WAAWA,GACV,O,6BAuBF,OAAOxxD,KAAKy8E,U,6BAGZ,OAAOz8E,KAAK23E,kBAAkBntE,W,KCvNXm0E,IADIvhF,EAAlByC,iB,WAcN,cAA2J,IAA9IwlC,EAA6I,EAA7IA,cAAe2K,EAA8H,EAA9HA,aAAcC,EAAgH,EAAhHA,gBAAiB4wB,EAA+F,EAA/FA,eAAgBqZ,EAA+E,EAA/EA,qBAAsB33E,EAAyD,EAAzDA,cAAe6tC,EAA0C,EAA1CA,6BAA8BD,EAAY,EAAZA,WAAY,oBACzJnwC,KAAKw5E,eAAiBn0C,EACtBrlC,KAAK4wC,sBAAwBZ,EAC7BhwC,KAAK6wC,yBAA2BZ,EAChCjwC,KAAK+gE,wBAA0BF,EAC/B7gE,KAAK87E,8BAAgC5B,EACrCl6E,KAAKgxC,sCAAwCZ,EAC7CpwC,KAAK+wC,oBAAsBZ,EAC3BnwC,KAAK4+E,wCAA0C5+E,KAAK4+E,wCAAwCz+E,KAAKH,MACjGA,KAAK6+E,mBAAqB7+E,KAAK6+E,mBAAmB1+E,KAAKH,MACvDA,KAAKy6B,KAAOz6B,KAAKy6B,KAAKt6B,KAAKH,MAC3BA,KAAK8+E,0BAA4B,GACjC9+E,KAAKyS,eAAiBlQ,EACtB3F,QAAQmC,IAAIwD,G,0DAxBZ,IAAIo8E,EAAgCvZ,UACnC,MAAM,IAAIpoE,MAAM,mBACjB,OAAO2hF,EAAgCvZ,c,0CAwBnC11C,GACJ,IAAI8uD,EAA0Bx+E,KAAK8+E,0BAA0Bz8E,QAAO,SAAAm8E,GAAuB,OAAEA,EAAwBh0E,SAASklB,EAAiBllB,UAAQ,GACvJ,OAAGg0E,GACF5hF,QAAQmC,IAAI,oBACZy/E,EAAwBO,iBACjBP,IAERA,EAA0B,IAAI/C,GAAwB,CACrD/rD,iBAAiBA,EACjB2V,cAAcrlC,KAAKw5E,eACnBlqE,gBAAgBtP,KAAK4+E,wCACrB5uC,aAAahwC,KAAK4wC,sBAClBX,gBAAgBjwC,KAAK6wC,yBACrBgwB,eAAe7gE,KAAK+gE,wBACpBmZ,qBAAqBl6E,KAAK87E,8BAC1Bv5E,cAAcvC,KAAKyS,eACnBipE,SAAS17E,KAAKy6B,KACd2V,6BAA6BpwC,KAAKgxC,sCAClC2qC,0BAA0B37E,KAAK6+E,mBAC/B1uC,WAAWnwC,KAAK+wC,sBAEjB/wC,KAAK8+E,0BAA0Bv+E,KAAKi+E,GAC7BA,K,yCAEWA,EAAyB9uD,M,8DAGJ8uD,GACvC,IAAMxwE,EAAQhO,KAAK8+E,0BAA0Bh8E,QAAQ07E,GAClDxwE,EAAM,GACThO,KAAK8+E,0BAA0Bp+E,OAAOsN,EAAO,O,MCpD1BgxE,I,OADI5hF,EAAlByC,iB,WAEN,cAAwC,IAAD,OAA1Bo/E,EAA0B,EAA1BA,yBAA0B,oBACtCj/E,KAAKwO,QAASxO,KAAKwO,QAAQrO,KAAKH,MAChCA,KAAK8+E,0BAA4BG,EACjCj/E,KAAKk/E,wCAA0Cl/E,KAAKk/E,wCAAwC/+E,KAAKH,MACjGA,KAAKm/E,iDAAmDn/E,KAAKm/E,iDAAiDh/E,KAAKH,MACnHA,KAAKo/E,mCAAqCp/E,KAAKo/E,mCAAmCj/E,KAAKH,MACvFA,KAAKq/E,iDAAmDr/E,KAAKq/E,iDAAiDl/E,KAAKH,MACnHA,KAAKwO,QAAUxO,KAAKwO,QAAQrO,KAAKH,MACjCA,KAAKs/E,yCAA2C,KAChDL,EAAyB7vE,SAAQ,SAAAovE,GAChCA,EAAwBt/E,OAAOuO,iBAAiB6kE,GAAc3nB,WAAWjC,SACxE,EAAKw2B,yCACNV,EAAwBt/E,OAAO43C,aAAarpC,iBAAiB,cAAc,kBAC1E,EAAKyxE,wCAAwC,CAAChgF,OAAOs/E,EAAwBt/E,YAC9Es/E,EAAwBt/E,OAAO43C,aAAarpC,iBAAiB,cAAc,kBAC1E,EAAKyxE,wCAAwC,CAAChgF,OAAOs/E,EAAwBt/E,e,oFAGxCqQ,GACvCvP,KAAKu/E,WAAY,EACjB,IAAMC,EAAajwE,EAAErQ,OAAOusD,UACtB+yB,EAA0Bx+E,KAAK8+E,0BAA0Bz8E,QAAO,SAAAm8E,GAAuB,OAAEA,EAAwBt/E,OAAOusD,YAAY+zB,KAAY,QACzH3hF,IAA1B2gF,GACHx+E,KAAKo/E,mCAAmCZ,K,yDAENA,GAC/Bx+E,KAAKs/E,2CAA2Cd,IACnDx+E,KAAKm/E,mDACLn/E,KAAKs/E,yCAA2Cd,EAChDx+E,KAAKs/E,yCAAyC7xE,iBAAiB,WAAYzN,KAAKq/E,qD,yEAG7B,OAAhDr/E,KAAKs/E,2CACRt/E,KAAKs/E,yCAAyCxxE,oBAAoB,WAAY9N,KAAKq/E,kDACnFr/E,KAAKs/E,yCAA2C,Q,uEAEA/vE,GAChD,IAAMivE,EAA0BjvE,EAAEivE,wBAC5BiB,EAA0BjB,EAAwBkB,iCACxD,GAAID,EAAJ,CAHkD,IAI3CpB,EAA2BoB,EAA3BpB,YAAa7sB,EAAciuB,EAAdjuB,WACpBxxD,KAAK8+E,0BAA0B1vE,SAAQ,SAAAuwE,GACnCA,IAAkCnB,GACrCmB,EAAgCtD,8BAA8BgC,EAAa7sB,S,gCAGnE,IAAD,OACRxxD,KAAK8+E,0BAA0B1vE,SAAQ,SAAAovE,GACtCA,EAAwBt/E,OAAO4O,oBAAoBwkE,GAAc3nB,WAAWjC,SAC3E,EAAKw2B,4CAEPl/E,KAAKm/E,uD,MCpDDS,IADmBxiF,EAAlByC,iBACwC,CAACyyE,GAAc3nB,WAAWzB,aACzEopB,GAAc3nB,WAAWnC,UAAW8pB,GAAc3nB,WAAW/B,YAAa0pB,GAAc3nB,WAAWlC,UAClG6pB,GAAc3nB,WAAW7B,OAAQwpB,GAAc3nB,WAAW3B,iBAAkBspB,GAAc3nB,WAAWxB,iBACjF02B,G,WAUpB,cAAgE,IAAnDC,EAAkD,EAAlDA,gCAAiCC,EAAiB,EAAjBA,gBAAiB,oBAC9D//E,KAAKggF,iCAAiCF,EACtC9/E,KAAKigF,QAAUjgF,KAAKigF,QAAQ9/E,KAAKH,MACjCA,KAAKkgF,iBAAmBH,EACxB//E,KAAKmgF,uBAAyBt2D,SAASC,cAAc,OACrD9pB,KAAKmgF,uBAAuBplD,UAAUtrB,IAAI,mBAC1CzP,KAAKogF,2BAA6Bv2D,SAASC,cAAc,OACzD9pB,KAAKogF,2BAA2BrlD,UAAUtrB,IAAI,QAC9CzP,KAAKmgF,uBAAuBllD,YAAYj7B,KAAKogF,4BAC7CpgF,KAAKogF,2BAA2BzkD,UAAU,GAC1C37B,KAAKkgF,iBAAiBjlD,YAAYj7B,KAAKmgF,wBACvCngF,KAAKqgF,wCAA0CrgF,KAAKqgF,wCAAwClgF,KAAKH,MACjGA,KAAKsgF,yCAA2CtgF,KAAKsgF,yCAAyCngF,KAAKH,MACnGA,KAAKugF,6BAA8BvgF,KAAKugF,6BAA6BpgF,KAAKH,MAC1EA,KAAKwgF,mDAAqDxgF,KAAKwgF,mDAAmDrgF,KAAKH,MACvHA,KAAKygF,uBAAyBzgF,KAAKygF,uBAAuBtgF,KAAKH,MAC/DA,KAAK0gF,qCAAuC1gF,KAAK0gF,qCAAqCvgF,KAAKH,MAC3FA,KAAK2gF,oBAAsB3gF,KAAK2gF,oBAAoBxgF,KAAKH,M,+DApBY,IAAnD8/E,EAAkD,EAAlDA,gCAAiCC,EAAiB,EAAjBA,gBACnDF,EAAsBza,UAAY,IAAIya,EAAsB,CAACC,kCAAiCC,sB,+BAN9F,IAAIF,EAAsBza,UACzB,MAAM,IAAIpoE,MAAM,mBAEjB,OAAO6iF,EAAsBza,c,6CAwBtBwb,GAAmB,IAAD,OACzB,GAAGA,EAAkBphF,OAAO,EAC3BQ,KAAKsgF,gDAGN,GAAGM,EAAkBphF,OAAO,EAC3BQ,KAAKqgF,8CADN,CAIA,IAAMpB,EAA2B2B,EAAkB52E,KAAI,SAAA0lB,GAAgB,OACtE,EAAKswD,iCAAiCvlD,KAAK/K,MAEtCmxD,EAAqB7gF,KAAKygF,uBAAuBxB,EAAyBz/E,QAChFy/E,EAAyB7vE,SAAQ,SAAAovE,GAChCqC,EAAmBrC,GACnBA,EAAwBrC,cACxBqC,EAAwBt/E,OAAOs1E,kBAEhCx0E,KAAK0gF,qCAAqCzB,GAC1Cj/E,KAAKugF,8BAA6B,GAClCvgF,KAAK8gF,8BAA8B9gF,KAAK8gF,6BAA6BtyE,UACrExO,KAAK8gF,6BAA+B,IAAI9B,GAA4B,CAACC,gC,2DAEjCA,GAA0B,IAAD,OAC7Dj/E,KAAK+gF,wCAAwC/gF,KAAK+gF,yCAClD/gF,KAAK+gF,uCAAuC,WAC3C9B,EAAyB7vE,SAAQ,SAAAovE,GAChCoB,GAAuCxwE,SAAQ,SAAA4xE,GAAS,OACvDxC,EAAwBt/E,OAAO4O,oBAAoBkzE,EAAW,EAAKL,2BAGrEzhF,OAAO4O,oBAAoB,SAAU,EAAK6yE,sBAE3C1B,EAAyB7vE,SAAQ,SAAAovE,GAChCoB,GAAuCxwE,SAAQ,SAAA4xE,GAAS,OACvDxC,EAAwBt/E,OAAOuO,iBAAiBuzE,EAAW,EAAKL,2BAGlEzhF,OAAOuO,iBAAiB,SAAUzN,KAAK2gF,uB,0CAEpBpxE,GACnBvP,KAAK+gF,wCAAwC/gF,KAAK+gF,yCAClD/gF,KAAK+gF,uCAAwC,KAC7C/gF,KAAKugF,8BAA6B,GAClCvgF,KAAK8gF,8BAA8B9gF,KAAK8gF,6BAA6BtyE,UACrExO,KAAKihF,6BAA+B,O,6CAEdC,GACtB,IAAMC,EAAiDnhF,KAAKwgF,mDAAmDU,GACzGjlB,EAAqBjC,KACrBonB,EAAqB,CAC1BnlB,EAAmB,GAAGklB,EAA+C,GACrEllB,EAAmB,GAAGklB,EAA+C,IAElEE,EAAK,EACLC,EAAK,EACH5qE,EAAQ0qE,EAAmB,GAC3BzqE,EAASyqE,EAAmB,GAClC,OAAO,SAAC5C,GACL6C,GAAIF,EAA+C,KACpDE,EAAG,EACHC,KAED,IAAMrqD,EAAOvgB,EAAM2qE,EACbvqD,EAAMngB,EAAO2qE,EACnB9C,EAAwBt/E,OAAO61E,sBAAsB,CACpDr+D,MAAMA,EACNC,OAAOA,EACPmgB,IAAIA,EACJG,KAAKA,IAENoqD,O,mDAG2B/+E,GACzBA,EACFtC,KAAKkgF,iBAAiBnlD,UAAUtrB,IAAI,mBAEpCzP,KAAKkgF,iBAAiBnlD,UAAUnrB,OAAO,qB,iEAGxC5P,KAAKwpE,eAAiBxsC,GAAOquC,OAAO,CACnCluC,MAAM,QACN5V,UAAU,0CACV7qB,QAAQ,uDACRwgC,QAAQ,CAAC,CAAC5+B,KAAK,W,gEAIhB0B,KAAKwpE,eAAiBxsC,GAAOquC,OAAO,CACnCluC,MAAM,QACN5V,UAAU,0CACV7qB,QAAQ,gDACRwgC,QAAQ,CAAC,CAAC5+B,KAAK,W,yEAGkC4iF,GAClD,IAAMthB,EAAc5/D,KAAKkgF,iBAAiB9mD,YAAYp5B,KAAKkgF,iBAAiB7mD,aAC5E,OAAO6nD,GACN,KAAK,EACL,KAAK,EACJ,OAAGthB,EAAY,EACP,CAACshB,EAA2B,GAC7B,CAAC,EAAGA,GACZ,KAAK,EACJ,MAAO,CAAC,EAAE,GACX,KAAK,EACL,KAAK,EACJ,OAAGthB,EAAY,EACP,CAAC,EAAG,GACL,CAAC,EAAG,GACZ,KAAK,EACL,KAAK,EACJ,OAAGA,EAAY,EACP,CAAC,EAAG,GACL,CAAC,EAAG,GACZ,QACC,MAAM,IAAI5iE,MAAM,wB,KCnJCukF,IADuBnkF,EAApCyC,iBAAoCzC,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV05D,EAAwD15D,EAAxD05D,OAAQ2mB,EAAgDrgF,EAAhDqgF,6BAA8BjxC,EAAkBpvC,EAAlBovC,iBAF5B,OAGjB,EAAKC,kBAAoBD,EACzB,EAAKmG,cAAgBmkB,EACrB,EAAKtgB,eAAiB7hB,IAAMC,YAC5B,EAAKF,SAAWC,IAAMC,YACtB,EAAK8oD,oCAAsCD,EAC3C,EAAKjpC,cAAiB,KACtB,EAAK9d,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKs6C,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvf,SAAUiC,KAAK,EAAKA,OACrF,EAAKgnD,6BAA+B,EAAKA,6BAA6BvhF,KAAlC,gBACpC,EAAKwhF,qCAAsC,EAAKA,qCAAqCxhF,KAA1C,gBAC3C,EAAKyhF,oBAAsB,EAAKA,oBAAoBzhF,KAAzB,gBAC3B,EAAK24B,MAAM,CAAC8C,SAAQ,EAAOjyB,QAAQ,IAflB,E,gDAoBdsvB,GACH,IAAMtc,EAAOsc,EAAUtc,KACvB,GAAgC,OAA7B3c,KAAK6hF,gBAAgBllE,GAAxB,CACA,IACMmlE,EAAkB,cAAC,GAAD,CAAgB7oD,UAAWA,EAClD4zC,cAAe7sE,KAAK0hF,6BAA8B7nD,IAAKnB,IAAMC,YAC7Dp2B,cAAevC,KAAKwwC,qBAD2DvX,EAAUtc,MAEpFhT,EAAU3J,KAAK84B,MAAMnvB,QAC3BA,EAAQpJ,KAAKuhF,GACb9hF,KAAKs5B,SAAS,CAAC3vB,QAAQA,O,6BAWjBgT,GACN,IAAMhT,EAAU3J,KAAK84B,MAAMnvB,QACrBm4E,EAAiB9hF,KAAK6hF,gBAAgBllE,GAC5C,GAAoB,OAAjBmlE,EAAH,CACA,IAAM9zE,EAAQrE,EAAQ7G,QAAQg/E,GAC3B9zE,EAAM,IACTrE,EAAQjJ,OAAOsN,EAAO,GACtBhO,KAAKs5B,SAAS,CAAC3vB,QAAQA,IACvBm4E,EAAezgC,UAAUygC,EAAezgC,e,mDAEZpoB,GAC5Bj5B,KAAK4P,OAAOqpB,EAAUtc,MACtBsc,EAAUooB,a,sCAEK1kC,GAEf,IADA,IAAMhT,EAAU3J,KAAK84B,MAAMnvB,QACnBxG,EAAE,EAAGA,EAAEwG,EAAQnK,OAAQ2D,IAAI,CAClC,IAAMuU,EAAQ/N,EAAQxG,GACtB,GAAGuU,EAAMmiB,IAAIX,SAAUxhB,EAAMmiB,IAAIX,QAAQvc,OAAOA,EAAM,OAAOjF,EAE9D,OAAO,O,6DAGP1X,KAAKyhF,wC,4CAGLzhF,KAAK06B,OACLmlD,GAAsBvY,SAAS2Y,QAAQjgF,KAAK+hF,mBAAmB/3E,KAAI,SAAAivB,GAAS,OAAEA,EAAUioB,c,6BAMxFlhD,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKy6C,mBAAmB7d,WACxB58B,KAAKu4C,cAAcoC,OAAO36C,Q,6BAG1BA,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKu4C,cAAcE,QACnBz4C,KAAK02C,eAAe12C,KAAK02C,kB,sCAEVp0C,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAKu6C,eAAerhB,QAAQ0hB,gBAAgBt4C,K,+BAG5C,IAAIilB,EAAW,kBACZvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YACZ,IAAMy6D,GAAqBhsD,IAAWh2B,KAAKwwC,oBAAoB/qC,sBAAuB,wBAAQ8hB,UAAU,0BACtGoQ,QAAS33B,KAAK4hF,oBADsE,qBAC/B,KACjDj4E,EAAU3J,KAAK84B,MAAMnvB,QAAQnK,OAAO,EACxC,sBAAK+nB,UAAU,kBAAf,UACA,qBAAKA,UAAU,UAAf,SACCvnB,KAAK84B,MAAMnvB,UAEZ,wBAAQ4d,UAAU,qCAClBoQ,QAAS33B,KAAK2hF,qCADd,yCAEEK,KAEC,qBAAKz6D,UAAU,aAAf,gFACL,OAAQ,sBAAKA,UAAWA,EAAWoQ,QAAS33B,KAAKk4B,aAAc2B,IAAK75B,KAAKy4B,SAAjE,UACN,cAAC,GAAD,CAAeoB,IAAK75B,KAAKu6C,eAAgBpd,MAAM,eAC7CxzB,O,4BAvFJ,OAAO3J,KAAK84B,MAAMnvB,QAAQnK,S,yCAc1B,IAAMyiF,EAAkBjiF,KAAK84B,MAAMnvB,QACjCK,KAAI,SAAA0N,GAAK,OAAEA,EAAMmiB,IAAIX,WACrB72B,QAAO,SAAAqV,GAAK,OAAEA,EAAM2G,YACpBrU,KAAI,SAAA0N,GAAK,OAAEA,EAAMuhB,aACnB,OAAGgpD,EAAgBziF,OAAO,EAClByiF,EACDjiF,KAAK84B,MAAMnvB,QAAQK,KAAI,SAAA0N,GAAK,OAAEA,EAAMmiB,IAAIX,QAAQD,e,+BAgCvD,OAAOyb,GAASY,e,GAvEsB94C,cCPnB0lF,IADuB9kF,EAApCyC,iBAAoCzC,EAAlB0C,e,6GAEFqiF,GACtB,IAAMC,EAAOv4D,SAASu4D,MAAQv4D,SAASowC,qBAAqB,QAAQ,GAC9DngC,EAAQjQ,SAASC,cAAc,SACrCs4D,EAAKnnD,YAAYnB,GACjBA,EAAMz8B,KAAO,WACTy8B,EAAMuoD,WAETvoD,EAAMuoD,WAAWC,QAAUH,EAE3BroD,EAAMmB,YAAYpR,SAAS04D,eAAeJ,IAE3C,IAAIjzE,GAAW,EACf,OAAO,IAAI4F,GAAO,CAACtG,QAAQ,WACvBU,IACHkzE,EAAKt2B,YAAYhyB,GACjB5qB,GAAW,U,MCbOszE,IADuBplF,EAApCyC,iBAAoCzC,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,8BACjB,cAAMA,IACDo3C,cAAiB,KACtB,EAAKL,kBAAoB,KACzB,EAAKzb,YAAc/D,IAAMC,YACzB,EAAK4zC,WAAa7zC,IAAMC,YACxB,EAAK8zC,kBAAoB/zC,IAAMC,YAC/B,EAAK8B,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAM,EAAKA,KAAKv6B,KAAV,gBACX,EAAKs6C,mBAAqB,IAAI1C,GAAkB,CAACC,WAAW,EAAKvb,YAAa/B,KAAK,EAAKA,OACxF,EAAK5B,MAAM,CAAC8C,SAAQ,GAVH,E,mDAgBjB57B,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKy6C,mBAAmB7d,WACxB58B,KAAKu4C,cAAcoC,OAAO36C,Q,6BAG1BA,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKs5B,SAAS,CAACsC,SAAQ,IACvB57B,KAAKu4C,cAAcE,U,sCAEJn2C,GACftC,KAAKu4C,cAAgBj2C,EACrBtC,KAAKysE,kBAAkBvzC,QAAQ0hB,gBAAgBt4C,K,+BAG/C,IAAIilB,EAAW,sBAGf,OAFGvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YACJ,sBAAKA,UAAWA,EAAWoQ,QAAS33B,KAAKk4B,aAAc2B,IAAK75B,KAAKy8B,YAAjE,UACN,cAAC,GAAD,CAAe5C,IAAK75B,KAAKysE,kBAAmBtvC,MAAM,mBAClD,qBAAK5V,UAAU,eAAesS,IAAK75B,KAAKwsE,mBAAxC,uD,+BAtBF,OAAO93B,GAASc,mB,GAdyBh5C,cCPtBimF,I,OCEQrlF,EAArByC,iBDDP,WAAYsB,GAAO,sBEECuhF,G,kDACpB,WAAYvhF,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVwhF,EAAcxhF,EAAdwhF,aAFU,OAGjB,EAAKC,cAAgBD,EACrB/xE,GAAqB,gBAJJ,E,qDAQjB,OAAO5Q,KAAK4iF,cAAczjF,W,2BAG1B,OAAOa,KAAK4iF,cAAcv1D,S,GAZeo1D,ICFtBI,G,WAEpB,WAAY1hF,GAAO,0BACuBA,GAAO,GAAzC2hF,EADU,EACVA,gBAAiBC,EADP,EACOA,gBACxBv1E,EAAYxN,MAEZA,KAAKyP,IAAKzP,KAAKyP,IAAItP,KAAKH,MACxBA,KAAKgjF,KAAMhjF,KAAKgjF,KAAK7iF,KAAKH,MAC1BA,KAAKm9C,MAAOn9C,KAAKm9C,MAAMh9C,KAAKH,MAC5BA,KAAK4P,OAAQ5P,KAAK4P,OAAOzP,KAAKH,MAC9BA,KAAKijF,iCAAkCjjF,KAAKijF,iCAAiC9iF,KAAKH,MAClFA,KAAKkjF,QAASljF,KAAKkjF,QAAQ/iF,KAAKH,MAChCA,KAAK40B,KAAM50B,KAAK40B,KAAKz0B,KAAKH,MAC1BA,KAAKmjF,yBAA0BnjF,KAAKmjF,yBAAyBhjF,KAAKH,MAClEA,KAAKojF,KAAMpjF,KAAKojF,KAAKjjF,KAAKH,MAE1BA,KAAK4zD,YAAc,EACnB5zD,KAAKqjF,SAAU,EACfrjF,KAAKsjF,sBAAqCzlF,IAAlBilF,EAA4B,KAAKA,EACzD9iF,KAAKujF,iBAAkB,QAEF1lF,IAAlBklF,GAA+C,OAAlBA,GAC/B/iF,KAAKyP,IAAIszE,G,gDAaPS,GACH,IAAD,OACC,GAAGvvE,MAAMC,QAAQsvE,IAChB,GAAIA,EAAiBhkF,OAAS,EAAG,YAGjCgkF,EAAiB,CAACA,GAEnB,IAAIC,GAAQ,EACXD,EAAiBp0E,SAAS,SAAAs0E,GAAc,OAAID,GAAS,EAAKT,KAAKU,MAC5DD,GACHzjF,KAAKkjF,Y,8BAGN,IAAD,OACCljF,KAAKujF,iBAAiBn0E,SAAQ,SAAAs0E,GAAc,OAAE,EAAK9zE,OAAO8zE,MAC1D1jF,KAAKqjF,SAAU,EACfrjF,KAAKkjF,Y,6BAECQ,GAEN,IAAM11E,EAAQhO,KAAKujF,iBAAiBzgF,QAAQ4gF,GACzC11E,EAAM,IACT01E,EAAe51E,oBAAoB,kBAAmB9N,KAAKijF,kCAC3DjjF,KAAKujF,iBAAiB7iF,OAAOsN,EAAO,M,6BAIpChO,KAAKqjF,SAAU,EACfrjF,KAAKkjF,Y,2BAEDQ,GAEJ,QAAI1jF,KAAKujF,iBAAiBzgF,QAAQ4gF,IAAiB,KACnD1jF,KAAKujF,iBAAiBhjF,KAAKmjF,GAC3BA,EAAej2E,iBAAiB,kBAAmBzN,KAAKijF,mCACjD,K,uDAEyB1zE,GAEhCvP,KAAKkjF,Y,gCAIL,IAAMS,EAAgB3jF,KAAK4zD,YACvB5zD,KAAKojF,SAAWO,GACnB3jF,KAAKmjF,6B,iDAINnjF,KAAKiO,cAAc,CAAC5Q,KAAK,kBAAmBumF,mBAAmB5jF,KAAK4jF,uB,6BAIpE,GAAI5jF,KAAKqjF,QAAS,OAAO,EAEzB,GADcrjF,KAAKujF,iBAAiB/jF,OACxB,EAGX,OADAQ,KAAK4zD,YAAc,EACZ,EAER,IAAIiwB,EAAyB,EACzBC,EAAa,EASjB,OARA9jF,KAAKujF,iBAAiBn0E,SAAQ,SAAAs0E,GAC7BG,GAA0BH,EAAeZ,iBACxCY,EAAeE,mBAAqB,EAAI,EACvCF,EAAeE,mBAAqB,EAAI,EAAIF,EAAeE,oBAG7DE,GAAcJ,EAAeZ,mBAEtB9iF,KAAK4zD,YAAeiwB,EAAyBC,I,yCAhFrD,OAAO9jF,KAAKqjF,QAAQ,EAAGrjF,KAAK4zD,c,sCAI5B,GAA8B,OAA1B5zD,KAAKsjF,iBAA2B,OAAOtjF,KAAKsjF,iBAChD,IAAIS,EAAmB,EAEvB,OADA/jF,KAAKujF,iBAAiBn0E,SAAQ,SAAAs0E,GAAc,OAAIK,GAAqBL,EAAeZ,mBAC7EiB,M,KC3BDlkF,GAAqBzC,EAArByC,iBACamkF,G,kDACpB,WAAY7iF,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEV8uB,EAAyB9uB,EAAzB8uB,SAAU1tB,EAAepB,EAAfoB,cAFA,OAGbA,GAAc1C,GAAiB,iBACnC,EAAK4S,eAAiBlQ,EACtB,EAAK0hF,kCAAmC,EAAKA,kCAAkC9jF,KAAvC,gBACxC,EAAK+jF,gBAAkBj0D,EAAS5N,MAAM7C,WAAWxV,KAAI,SAAA+X,GAAI,OAAE,IAAI2gE,GAAc,CAACC,aAAa5gE,OAC3F,EAAK6V,UAAY3H,EACjB,EAAKk0D,uBAAyB,IAAItB,GAClC,EAAKsB,uBAAuB12E,iBAAiB,kBAAmB,EAAKw2E,mCACrErzE,GAAqB,gBACrBa,GAAc,eAAM,QAAQ,kBAAI,EAAKo2B,QAAM,SAACvlC,GAAD,OAAS,EAAKulC,KAAOvlC,KAChEmP,GAAc,eAAM,0BAA0B,kBAAI,EAAK2yE,0BAAwB,SAAC9hF,GAAD,OAAS,EAAK8hF,uBAAyB9hF,KACtHmP,GAAc,eAAM,sBAAsB,kBAAI,EAAK4yE,sBAblC,E,8EAuCgB90E,GACjCvP,KAAK6Q,gBAAgBZ,QAAQ,yBAA0BV,EAAEq0E,oBACzD5jF,KAAK6Q,gBAAgBZ,QAAQ,qBAAsBV,EAAEq0E,mBAAmB,K,iCAzBxE,OAAO5jF,KAAK43B,UAAU7I,OAAOd,qBAAqB,U,oCAGlD,OAAOjuB,KAAKyS,iB,4CAGZ,OAAOzS,KAAKmkF,yB,4BAGZ,OAAOnkF,KAAKkkF,kB,2BAGZ,OAAOlkF,KAAK+nC,O,aAEJzlC,GACRtC,KAAK+nC,MAAQzlC,I,6CAGb,OAAOtC,KAAKmkF,uBAAuBP,qB,yCAGnC,OAAO5jF,KAAKmkF,uBAAuBP,mBAAmB,M,GAtCPnB,ICN5B6B,GACpB,WAAYnjF,GAAO,oBACJA,EAAPgP,O,SCDDtQ,GAAqBzC,EAArByC,iBA4JO0kF,G,WA1Jd,WAAYhtE,GAAQ,0BACkDA,GAAQ,GAAtEitE,EADW,EACXA,aAAcC,EADH,EACGA,mBAAoBC,EADvB,EACuBA,2BACrCF,GAAa3kF,GAAiB,gBAClCG,KAAK2kF,yBAA2C9mF,IAArB4mF,EAA+B,GAAIA,EAC9DzkF,KAAK4kF,iCAA2D/mF,IAA7B6mF,EAAuC,GAAIA,EAC9E1kF,KAAK6kF,cAAgBL,EACrBxkF,KAAK8kF,yCAA0C9kF,KAAK8kF,yCAAyC3kF,KAAKH,MAClGA,KAAK+kF,KAAM/kF,KAAK+kF,KAAK5kF,KAAKH,MAC1BA,KAAKglF,cAAehlF,KAAKglF,cAAc7kF,KAAKH,MAC5CA,KAAKilF,aAAcjlF,KAAKilF,aAAa9kF,KAAKH,MAC1CA,KAAKklF,mCAAoCllF,KAAKklF,mCAAmC/kF,KAAKH,MACtFA,KAAKmlF,WAAanlF,KAAKmlF,WAAWhlF,KAAKH,MACvCA,KAAKolF,aAAcplF,KAAKolF,aAAajlF,KAAKH,MAC1CA,KAAKqlF,eAAgBrlF,KAAKqlF,eAAellF,KAAKH,MAC9CA,KAAKslF,sBAAwBtlF,KAAKslF,sBAAsBnlF,KAAKH,MAC7DA,KAAKulF,sBAAwBvlF,KAAKulF,sBAAsBplF,KAAKH,MAE7DwkF,EAAa37D,MAAM28D,cAAgB,OAEnChB,EAAaiB,OAAOC,mBAAqBC,cAAmBC,WAE5D5lF,KAAK6lF,iBAAgB,EACrB7lF,KAAK8lF,kBAAiB,EACtB9lF,KAAK+lF,MAAQ,EACb/lF,KAAKgmF,MAAQ,EACbhmF,KAAKimF,UAAY,EACjBjmF,KAAKkmF,UAAY,EAEjBlmF,KAAKmmF,UAAY,IAAIR,WACrB3lF,KAAKomF,YAAc,IAAIT,WACvB3lF,KAAKqmF,cAAgB,IAAIV,WACzB3lF,KAAKsmF,eAAiB,EACtBtmF,KAAK4L,UAAY,IAAI+5E,cACrB3lF,KAAKumF,YAAc,IAAIZ,WACvB3lF,KAAKwmF,UAAY,IAAIb,WACrB3lF,KAAKymF,OAAS,IAAId,WAClB3lF,KAAK0mF,QAAU,IAAIf,UAAeC,SAElC5lF,KAAK2mF,qBAAuB,KAC5B3mF,KAAK4mF,sBAAwB,KAC7B5mF,KAAK6lF,iBAAkB,EACvBrB,EAAa37D,MAAMg+D,cAAgB7mF,KAAKqlF,eACxCb,EAAa37D,MAAMi+D,YAAc9mF,KAAKolF,aACtCv7D,SAASpc,iBAAiB,aAAczN,KAAKmlF,Y,kEAExB51E,GACrB,IAAMw3E,EAA0B,IAAXx3E,EAAEy3E,QAAsB,IAAVz3E,EAAE03E,MAC/BC,EAA2B,IAAX33E,EAAEy3E,QAAsB,IAAVz3E,EAAE03E,MACtC,OAAO13E,EAAElS,MACR,IAAK,cACD0pF,EAAc/mF,KAAK6lF,iBAAgB,EAC9BqB,IAAclnF,KAAK8lF,kBAAiB,GAC5C,MACD,IAAK,YACDiB,EAAc/mF,KAAK6lF,iBAAgB,EAC9BqB,IAAclnF,KAAK8lF,kBAAiB,GAC5C,MACD,IAAK,aACJ9lF,KAAK6lF,iBAAgB,EACrB7lF,KAAK8lF,kBAAiB,K,+DAKgBqB,GAEvC,OAAOh0D,KAAKi0D,IAAIzB,WAAgB0B,IAAIF,EAAGxB,WAAgB2B,OADrB,M,iCAGzB/3E,GACVvP,KAAKslF,sBAAsB/1E,GAC3BvP,KAAKulF,0B,4CAEgBh2E,GACjBvP,KAAKunF,oBACTvnF,KAAKunF,mBAAoB,EACzBvnF,KAAK6kF,cAAch8D,MAAM28D,cAAgB,OACzCxlF,KAAK6kF,cAAch8D,MAAM2+D,yBAAyB53E,OAAO5P,KAAK4mF,uBAC9D5mF,KAAK2mF,qBAAuB3mF,KAAK6kF,cAAch8D,MAAM2+D,yBAAyB/3E,IAAIzP,KAAKilF,iB,2BAEnFwC,EAAOC,GAAQ,IAAD,OACdC,EAAoB,SAAC98E,EAAGC,GAM3B,OALA,EAAKo6E,mCAAmC,EAAKa,MAAO,EAAKC,MAAO,EAAKG,WACrE,EAAKjB,mCAAmCr6E,EAAGC,EAAG,EAAKs7E,aAEnDT,WAAgBiC,WAAW,EAAKzB,UAAW,EAAKC,YAAa,EAAKC,eAE9D,EAAKA,cAAcwB,gBAAkB,IACxC,EAAKvB,eAAiBX,WAAgBmC,uBAAuB,EAAK3B,UAAW,EAAKC,YAAa,EAAKC,eACpGV,cAAmBoC,kBAAkB,EAAK1B,eAAgB,EAAKC,eAAgB,EAAK16E,WAEpF,EAAK26E,YAAY1sE,IAAI,EAAG,EAAG,GAC3B,EAAK0sE,YAAYyB,wBAAwB,EAAKp8E,UAAW,EAAK26E,aAC9D,EAAKA,YAAYyB,wBAAwB,EAAKnD,cAAcY,OAAOC,mBAAoB,EAAKa,cACpF,EAAKzB,yCAAyC,EAAKyB,gBAKzDoB,EAAkBF,EAAOC,IAAUC,EAAkBF,EAAOznF,KAAKgmF,UACpEL,WAAgBiC,WAAWjC,WAAgB2B,KAAMtnF,KAAKumF,YAAavmF,KAAKwmF,WACxEb,WAAgBiC,WAAW5nF,KAAKumF,YAAavmF,KAAKwmF,UAAWxmF,KAAKymF,QAClEzmF,KAAK0mF,QAAQuB,iBAAiB,EAAGjoF,KAAKwmF,UAAU37E,EAAG7K,KAAKwmF,UAAU17E,EAAG9K,KAAKwmF,UAAUn7E,EAAG,GACvFrL,KAAK0mF,QAAQuB,iBAAiB,EAAGjoF,KAAKymF,OAAO57E,EAAG7K,KAAKymF,OAAO37E,EAAG9K,KAAKymF,OAAOp7E,EAAG,GAC9ErL,KAAK0mF,QAAQuB,iBAAiB,EAAGjoF,KAAKumF,YAAY17E,EAAG7K,KAAKumF,YAAYz7E,EAAG9K,KAAKumF,YAAYl7E,EAAG,GAC7FrL,KAAK6kF,cAAcqD,wBAAwBloF,KAAK0mF,QAAQyB,wB,sCAKzDnoF,KAAK+kF,KAAK/kF,KAAK6kF,cAAch8D,MAAMu/D,SAAUpoF,KAAK6kF,cAAch8D,MAAMw/D,UACtEroF,KAAKimF,UAAYjmF,KAAK6kF,cAAch8D,MAAMu/D,SAAWpoF,KAAK+lF,MAC1D/lF,KAAKkmF,UAAYlmF,KAAK6kF,cAAch8D,MAAMw/D,SAAWroF,KAAKgmF,MAC1DhmF,KAAK+lF,MAAQ/lF,KAAK6kF,cAAch8D,MAAMu/D,SACtCpoF,KAAKgmF,MAAQhmF,KAAK6kF,cAAch8D,MAAMw/D,W,qCAGlCl1D,KAAKi0D,IAAIpnF,KAAKimF,WAAajmF,KAAK4kF,6BAA+BzxD,KAAKi0D,IAAIpnF,KAAKkmF,WAAalmF,KAAK4kF,6BAClG5kF,KAAK+kF,KAAK/kF,KAAK+lF,MAAQ/lF,KAAKimF,UAAWjmF,KAAKgmF,MAAQhmF,KAAKkmF,WACzDlmF,KAAK+kF,KAAK/kF,KAAK+lF,MAAQ/lF,KAAKimF,UAAWjmF,KAAKgmF,MAAQhmF,KAAKkmF,WAEzDlmF,KAAKimF,WAAajmF,KAAK2kF,oBACvB3kF,KAAKkmF,WAAalmF,KAAK2kF,qBAGvB3kF,KAAK6kF,cAAch8D,MAAM2+D,yBAAyB53E,OAAO5P,KAAK2mF,wB,qCAGjDp3E,GACdvP,KAAKslF,sBAAsB/1E,GACvBvP,KAAK6lF,kBAAiB7lF,KAAK8lF,mBAC5B9lF,KAAKunF,oBACRvnF,KAAKunF,mBAAoB,EACzBvnF,KAAK6kF,cAAch8D,MAAM2+D,yBAAyB53E,OAAO5P,KAAK2mF,sBAC9D3mF,KAAK6kF,cAAch8D,MAAM28D,cAAgB,WACzCxlF,KAAK+lF,MAAQ/lF,KAAK6kF,cAAch8D,MAAMu/D,SACtCpoF,KAAKgmF,MAAQhmF,KAAK6kF,cAAch8D,MAAMw/D,SACtCroF,KAAK4mF,sBAAwB5mF,KAAK6kF,cAAch8D,MAAM2+D,yBAAyB/3E,IAAIzP,KAAKglF,mB,mCAE5Ez1E,GACZvP,KAAKslF,sBAAsB/1E,GAC3BvP,KAAKulF,0B,yDAE6B16E,EAAGC,EAAG+uB,GACxC8rD,WAAgB2C,eACf,IAAI3C,WAAgB96E,EAAGC,EAAG,GAC1B9K,KAAK6kF,cAAc0D,OAAO7xE,MAC1B1W,KAAK6kF,cAAc0D,OAAO5xE,OAC1BgvE,UAAeC,WACfD,UAAeC,WACf5lF,KAAK6kF,cAAcY,OAAO+C,sBAC1B3uD,GACDA,EAAI4uD,gB,KCxJE5oF,GAAqBzC,EAArByC,iBAwDO6oF,G,WAtDd,WAAYnxE,GAAQ,0BAC2FA,GAAQ,GAA/GitE,EADW,EACXA,aAA8DmE,GADnD,EACGlE,mBADH,EACuBC,2BADvB,EACmDiE,iBAAiBC,EADpE,EACoEA,uBAClFpE,GAAa3kF,GAAiB,gBAClCG,KAAK6oF,sBAAqChrF,IAAlB8qF,EAA4B,GAAGA,EACvD3oF,KAAK6kF,cAAgBL,EACrBxkF,KAAK8oF,6BAAmDjrF,IAAzB+qF,EAAmC,EAAEA,EACpE5oF,KAAK+oF,kCAAmC/oF,KAAK+oF,kCAAkC5oF,KAAKH,MACpFA,KAAKgpF,gBAAiBhpF,KAAKgpF,gBAAgB7oF,KAAKH,MAChDwkF,EAAa37D,MAAMogE,uBAAuBx5E,IAAKzP,KAAKgpF,gBAAiBrD,qBAA0BuD,cAAc,GAC7G,IAAIvnD,GAAe,CAAClL,QAAQ+tD,EAAa+D,OACzClpD,QAAQ,WACPziC,QAAQmC,IAAI,YACV6iC,eAAe,WACjBhlC,QAAQmC,IAAI,mBACV8iC,eAAe,WACjBjlC,QAAQmC,IAAI,mBACV+iC,cAAc,WAChBllC,QAAQmC,IAAI,kBACVgjC,cAAc,WAChBnlC,QAAQmC,IAAI,kBACVijC,aAAa,WACfplC,QAAQmC,IAAI,iBACVkjC,aAAa,WACfrlC,QAAQmC,IAAI,iBAEXwgC,MAAM,WACP3iC,QAAQmC,IAAI,Y,4DAGEoqF,EAAaC,GAC5B,IAAMl7E,EAAQi7E,EAAYj7E,MACtBm7E,EAAQ,EAOZ,GANIn7E,EAAMo7E,WACTD,EAAQn7E,EAAMo7E,WAENp7E,EAAMq7E,SACdF,GAASn7E,EAAMq7E,QAEXF,EAAL,CACA,IAAMG,EAAYxpF,KAAK6kF,cAAcY,OAAOgE,aAAa,IAAI9D,WAAgB,EAAE,EAAE0D,EAAM,EAAE,GAAG,IACtFK,EAAuB1pF,KAAK+oF,kCAAkCS,EAAWxpF,KAAK6oF,kBAC9Ec,EAAkBH,EAAUI,MAAMF,GACxC1pF,KAAK6kF,cAAcgF,WAAWF,M,wDAEGH,EAAWM,GAC5C,IAAM1qF,EAASY,KAAK6kF,cAAcY,OAAOj6E,SACnCu+E,EAAM,IAAIpE,OAAYvmF,EAAQoqF,EAAW,KACzCQ,EAAMhqF,KAAK6kF,cAAch8D,MAAMohE,YAAYF,GACjD,IAAIC,EAAIA,IAAI,OAAOF,EACnB,IAAMI,EAA4BF,EAAIG,SAAWnqF,KAAK8oF,wBACtD,OAAGoB,EAA0BJ,EAA+BA,EAC3B,GAA1BI,M,KCxDYE,G,WAEpB,WAAYjpF,GAAO,wBACX2hF,GAAiB3hF,GAAO,IAAxB2hF,gBACPt1E,EAAYxN,MACZA,KAAK40B,KAAM50B,KAAK40B,KAAKz0B,KAAKH,MAC1BA,KAAKmjF,yBAA0BnjF,KAAKmjF,yBAAyBhjF,KAAKH,MAClEA,KAAKsjF,sBAAqCzlF,IAAlBilF,GAA+C,OAAlBA,EAAuB,EAAEA,EAC9E9iF,KAAKqjF,SAAU,EACfrjF,KAAK4zD,YAAc,E,mDAehB5zD,KAAKqjF,UACRrjF,KAAKqjF,SAAU,EACfrjF,KAAKmjF,8B,iDAILnjF,KAAKiO,cAAc,CAAC5Q,KAAK,kBAAmBumF,mBAAmB5jF,KAAK4jF,uB,yCAlBpE,OAAO5jF,KAAKqjF,QAAU,EAAIrjF,KAAK4zD,a,aAETtxD,GACnBtC,KAAK4zD,cAActxD,IACtBtC,KAAK4zD,YAAatxD,EAClBtC,KAAKmjF,8B,sCAIL,OAAOnjF,KAAKsjF,qB,KCbO+G,G,kDACpB,WAAYlpF,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVgP,EAA2ChP,EAA3CgP,MAAOq0E,EAAoCrjF,EAApCqjF,aAAc8F,EAAsBnpF,EAAtBmpF,qBAFX,OAGjB,EAAKzF,cAAcL,EACnB,EAAK+F,sBAAwBD,EAC7B,EAAKvgE,WAAa,EAAKA,WAAW5pB,KAAhB,gBAClB,EAAKqqF,gBAAkB,EAAKA,gBAAgBrqF,KAArB,gBACvB,EAAKsqF,eAAiB,EAAKA,eAAetqF,KAApB,gBACtB,EAAKwZ,OAASxJ,EACdmJ,GAAsB,gBATL,E,yDAWL,IAAD,OACX,OAAO,IAAI/b,SAAQ,SAACO,EAASC,GAC5B,EAAKysF,kBAAkBpsF,MAAK,WAC3B,EAAKqsF,iBAAiBrsF,KAAKN,GAASY,MAAMX,MACxCW,MAAMX,Q,wCAGO,IAAD,OAChB,OAAO,IAAIR,SAAQ,SAACO,EAASC,GAC5B,IAAMgxB,EAAS,EAAKpV,OAAO+wE,WACrBC,EAAwB,EAAKhxE,OAAOgxE,sBAC1CA,EAAsBxtC,QAGtB,IAFA,IAAMytC,EAAiB,IAAI1mE,GAAS6K,GAC9Bg0D,EAAkB,GAChB8H,EAAO,EAAGA,EAAO97D,EAAOvvB,OAAQqrF,IAAS,CAChD,IAAMnH,EAAiB,IAAI0G,GAC3BrH,EAAgBxiF,KAAKmjF,GACrBiH,EAAsBl7E,IAAIi0E,GAE3B,IAAMoH,EAA0B,IAAI5mE,GAAS6+D,GACvCgI,EAAgB,IACD,SAAfC,IACL,GAAIJ,EAAeK,UAAnB,CAIA,IAAM96E,EAAQy6E,EAAejyE,OACvB+qE,EAAiBoH,EAAwBnyE,OAC/C+qE,EAAeE,mBAAoB,EACnChnF,QAAQmC,IAAI,+BACZnC,QAAQmC,IAAIoR,EAAMod,uBAClB,EAAKg9D,sBAAsBW,WAAW,CACrC79D,KAAKld,EAAMkd,KACXC,wBAAwBnd,EAAMmd,wBAC9B69D,cAAcj/E,EAAKk/E,yBAAyB,CAAC7oF,cAAc,EAAKoX,OAAOpX,cAAeiK,aAAa2D,EAAMod,wBACzG89D,uBAAuB3H,IACrBtlF,MAAK,SAACktF,GACR5H,EAAe9uD,OACfm2D,EAAcxqF,KAAK+qF,GACnBN,OACEtsF,MAAMX,QAjBRD,EAAQitF,GAmBVC,Q,uCAIe,IAAD,OACf,OAAO,IAAIztF,SAAQ,SAACO,EAASC,GAC5B,EAAK8mF,cAAc0G,uBAAuB,CAACC,sBAAqB,IAChE,IAAIjH,GAAiB,CAACC,aAAa,EAAKK,gBACxC,IAAI6D,GAAkB,CAAClE,aAAa,EAAKK,cAAe8D,gBAAgB,IACxE,EAAK9D,cAAc4G,iBACnB,EAAK5G,cAAc6G,kBAAmB,IAAI/F,WAAgB,IAAI,KAAK,MACnE7nF,S,mCAGWwE,Q,GApEwBgiF,ICAjBqH,G,kDACpB,WAAYxqF,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVgP,EAAoDhP,EAApDgP,MAAOsmB,EAA6Ct1B,EAA7Cs1B,QAAS+tD,EAAoCrjF,EAApCqjF,aAAc8F,EAAsBnpF,EAAtBmpF,qBAFpB,OAGjB,EAAK3wE,OAASxJ,EACd,EAAKsoB,SAAWhC,EAChB,EAAKouD,cAAcL,EACnB,EAAK+F,sBAAwBD,EAC7B,EAAKsB,WAAa,GAClB,EAAK7hE,WAAa,EAAKA,WAAW5pB,KAAhB,gBAClB,EAAK0rF,2BAA6B,EAAKA,2BAA2B1rF,KAAhC,gBAClCmZ,GAAsB,gBACtBuB,GAAuBmC,SAAvB,eAAsC7M,EAAO,OAAQ,EAAK27E,cAC1D,EAAKj4B,aAAe,IAAI3D,GAAY,CAAC//C,MAAMA,EAAOggD,+BAA+B,yBAA0BC,oBAAoB,qBAAsBC,UAAU,IAC/J,EAAK07B,WAAaliE,SAASC,cAAc,OACzC,EAAKiiE,WAAWvhE,IAAMte,EAAKQ,OAAO,kBAClC,EAAKq/E,WAAWhxD,UAAUtrB,IAAI,cAC9B,EAAKgpB,SAASwC,YAAYupD,EAAa/tD,SACvC,EAAKgC,SAASwC,YAAY,EAAK44B,aAAap9B,SAC5C,EAAKgC,SAASwC,YAAY,EAAK8wD,YAC/B,EAAKC,2BAA6BnxE,GAAuBmC,SAAvB,eAAsC7M,EAAO,qBAAsB,EAAK07E,4BAnBzF,E,yDAwBL,IAAD,OACL58E,EAAOjP,KACb,OAAO,IAAIzC,SAAQ,SAACO,EAASC,GACX,IAAIssF,GAAS,CAC7Bl6E,MAAM,EAAKwJ,OACX6qE,aAAav1E,EAAK41E,cAClByF,qBAAqBr7E,EAAKs7E,sBAC1B0B,wBAAwBh9E,EAAKi9E,2BACrBniE,aAAa3rB,MAAK,WAC1BN,OACEY,MAAMX,Q,mCAGEuE,M,iDAGcA,GACvBA,EAAMtC,KAAK+rF,WAAWhxD,UAAUtrB,IAAI,WAClCzP,KAAK+rF,WAAWhxD,UAAUnrB,OAAO,a,8BApBtC,OAAO5P,KAAKy4B,a,GAvB8B6rD,ICNpCzkF,I,qBCDqBzC,EAArByC,iBDCqBzC,EAArByC,kBACassF,G,WACjB,WAAYhrF,GAAQ,wBACRu9D,EAAiCv9D,EAAjCu9D,QAAS0tB,EAAwBjrF,EAAxBirF,SAAUxuF,EAAcuD,EAAdvD,IAAKyvB,EAASlsB,EAATksB,KAGhC,GAFKA,GAAMxtB,GAAiB,QAC5BG,KAAKwtB,MAAQH,EACD,OAARzvB,QAAwBC,IAARD,EACX8gE,GAAS1+D,KAAKqsF,yCAAyC,WAC5DrsF,KAAK2+D,SAAWD,EACX0tB,GAAUpsF,KAAKqsF,yCAAyC,YAC7DrsF,KAAKssF,UAAYF,MAEhB,CACD,IAAMG,EAAyBvtF,EAAUwtF,kCAAkC5uF,GAC3EoC,KAAK2+D,SAAW4tB,EAAuB,GACvCvsF,KAAKssF,UAAYC,EAAuB,I,uFAI5C,MAAM,IAAIvvF,MAAM,8E,2BAIhB,OAAOgD,KAAKwtB,Q,8BAGZ,OAAOxtB,KAAK2+D,W,+BAGZ,OAAO3+D,KAAKssF,c,KE9BCG,G,WACpB,WAAYtrF,GAAO,IAAD,+BACViL,EAAqGjL,EAArGiL,KAAMsgF,EAA+FvrF,EAA/FurF,cAAeC,EAAgFxrF,EAAhFwrF,gBAAiBC,EAA+DzrF,EAA/DyrF,UAAWv/D,EAAoDlsB,EAApDksB,KAAMluB,EAA8CgC,EAA9ChC,SAAUmuB,EAAoCnsB,EAApCmsB,wBAAyB8H,EAAWj0B,EAAXi0B,UACjG5nB,EAAYxN,MACZA,KAAK6sF,MAAQzgF,EACbpM,KAAK0tB,yBAA0BJ,EAC/BttB,KAAK8sF,WAAa13D,EAClBp1B,KAAK+sF,eAAiBL,EACtB1sF,KAAKgtF,iBAAmBL,EACxB3sF,KAAKitF,WAAaL,EAClB5sF,KAAKwtB,MAAQH,EACbrtB,KAAKktF,UAAY/tF,EACjBa,KAAKmtF,YAAcntF,KAAKmtF,YAAYhtF,KAAKH,MACzCA,KAAKotF,kBAAoBptF,KAAKotF,kBAAkBjtF,KAAKH,MACrDA,KAAKqtF,gBAAkBrtF,KAAKqtF,gBAAgBltF,KAAKH,MACjDA,KAAKwO,QAAUxO,KAAKwO,QAAQrO,KAAKH,MACjCA,KAAKstF,+BAAiCttF,KAAKstF,+BAA+BntF,KAAKH,MAC/EA,KAAKutF,qBAAuBvtF,KAAKutF,qBAAqBptF,KAAKH,MAC3DA,KAAKwtF,MAAQxtF,KAAKwtF,MAAMrtF,KAAKH,MAC7BA,KAAKytF,wBAA0B,IAAIvgE,IACnCltB,KAAK0tF,uBAAyB,GAC9BhB,EAAct9E,SAAQ,SAAAu+E,GACrB,GAAoC,IAAjCA,EAAYntE,GAAG1d,QAAQ,QAA1B,CACA,IAAM0H,EAASugB,SAAS4iE,EAAYntE,GAAGzP,OAAO,IAC9C,EAAK08E,wBAAwB5zE,IAAIrP,EAAQmjF,GACzC,EAAKD,uBAAuBntF,KAAKiK,OAElC5N,QAAQmC,IAAI,uBACZnC,QAAQmC,IAAIiB,KAAK+sF,gB,wDAQN5tF,GACXa,KAAKstF,+BAA+BnuF,EAASqM,SAAUrM,EAASsM,SAAUtM,EAASuM,W,6CAE7D,IAAD,gBACH1L,KAAK0tB,yBAAyBkgE,YAD3B,IACrB,IAAI,EAAJ,qBAA2D,CAAC,IAApDC,EAAmD,QAC1D7tF,KAAKqtF,gBAAgBQ,GAAQ,IAFT,8BAIrB7tF,KAAK0tF,uBAAyB1tF,KAAK0tB,yBAAyBkgE,a,wCAE3C9gE,GAAW,IAAD,OACrBghE,EAAiB9tF,KAAK0tB,yBAAyBf,uBAAuBG,GAC5EghE,EAAe1+E,SAAQ,SAAC2+E,GACvB,IAAMC,EAA+B,EAAKN,uBAAuB5qF,QAAQirF,GACtEC,GAA8B,EAChC,EAAKN,uBAAuBhtF,OAAOstF,EAA8B,GAEjE,EAAKX,gBAAgBU,GAAe,MAEtC/tF,KAAK0tF,uBAAuBt+E,SAAQ,SAAA6+E,GAAe,OAAE,EAAKZ,gBAAgBY,GAAiB,MAC3FjuF,KAAK0tF,uBAAyBI,I,sCAEfD,EAAQK,GACvB,IAAMC,EAAOnuF,KAAKytF,wBAAwB3zE,IAAI+zE,GAC1CM,GACJA,EAAKC,WAAWF,K,qDAEiB1iF,EAAUC,EAAUC,GAC/C1L,KAAK6sF,MAAMrhF,SAAU,IAAIm6E,WAAgBn6E,EAASX,EAAGW,EAASV,EAAGU,EAASH,GAC1ErL,KAAK6sF,MAAMphF,SAAW,IAAIk6E,WAAgBl6E,EAASZ,EAAGY,EAASX,EAAGW,EAASJ,GAC3ErL,KAAK6sF,MAAMnhF,QAAU,IAAIi6E,WAAgBj6E,EAAQb,EAAGa,EAAQZ,EAAGY,EAAQL,K,8BAG1DrL,KAAK6sF,MAAMW,QAC9B,OAAO,IAAIf,EAAa,CACvBrgF,KAAKpM,KAAK6sF,MACVH,cAAc1sF,KAAK+sF,eACnBJ,gBAAgB3sF,KAAKgtF,iBACrBJ,UAAU5sF,KAAKitF,WACf5/D,KAAKrtB,KAAKwtB,MACVruB,SAASa,KAAKktF,c,gCAIfltF,KAAKiO,cAAc,CAAC5Q,KAAK,WAAYiuF,aAAatrF,S,2BAhDlD,OAAOA,KAAKwtB,Q,gCAGZ,OAAOxtB,KAAK8sF,e,KC7B+B1vF,EAArCyC,iBAAqCzC,EAAnB0C,eAC1B6lF,eAAoB0I,aAAe1I,eAAoB2I,iB,IAClCC,G,WACjB,WAAYptF,GAAQ,oBACtBnB,KAAKwuF,2BAA6B,IAAIthE,I,gDAEnCuhE,EAAUnD,GACbtrF,KAAKwuF,2BAA2B30E,IAAI40E,EAAUnD,K,0BAE3CmD,GACH,OAAOzuF,KAAKwuF,2BAA2Bp1E,IAAIq1E,K,0BAExCA,GACH,OAAOzuF,KAAKwuF,2BAA2B10E,IAAI20E,O,KClBxBC,G,WACpB,cAAqB,IAAR7lE,EAAO,EAAPA,MAAO,oBACnB7oB,KAAK2uF,OAAO9lE,EACZ7oB,KAAK4uF,+BAAiC,IAAI1hE,IAC1CltB,KAAK6uF,wBAA0B7uF,KAAK6uF,wBAAwB1uF,KAAKH,MACjEA,KAAK8uF,wCAAyC9uF,KAAK8uF,wCAAwC3uF,KAAKH,MAChGA,KAAK+uF,oCAAqC/uF,KAAK+uF,oCAAoC5uF,KAAKH,MACxFA,KAAKgvF,aAAehvF,KAAKgvF,aAAa7uF,KAAKH,MAC3CA,KAAKivF,aAAcjvF,KAAKivF,aAAa9uF,KAAKH,M,oEAEnB0sF,GACvB,IADqC,EAC/Bp8E,EAAUtQ,KAAKgvF,eACfE,EAAoClvF,KAAK8uF,wCAAwCpC,GAFlD,cAGrBwC,GAHqB,IAGrC,IAAI,EAAJ,qBAAmD,CAAC,IAA5CC,EAA2C,uBACbA,EADa,GAC5CC,EAD4C,KAC9BC,EAD8B,KAKlD,GAFAzyF,QAAQmC,IAAI,iBAAiBqwF,GAC7BxyF,QAAQmC,IAAIswF,GACM,qCAAfD,KACAC,EAAgB7vF,OAAO,KAA1B,CACA,IAAI8vF,EAAetvF,KAAK4uF,+BAA+B90E,IAAIs1E,QACzCvxF,IAAfyxF,GAAyC,OAAfA,IAC5BD,EAAkB,CAACC,GAAcvlF,OAAOslF,IAEtCA,EAAgB7vF,OAAO,GAIR,QADlB8vF,EAAetvF,KAAKivF,aAAa3+E,IAAW++E,EAAiBrvF,KAAK2uF,UAIlE3uF,KAAK4uF,+BAA+B/0E,IAAIu1E,EAAcE,KArBlB,iC,qCAyBrC,IAAIC,EAAO,EACX,OAAO,WACN,MAAO,UAAWA,O,8DAGoB7C,GACvC,IADqD,EAC/C8C,EAA+B,IAAItiE,IACnCgiE,EAAqC,GAFU,cAG9BxC,GAH8B,IAGrD,IAAI,EAAJ,qBAAqC,CAAC,IAAD,EAA7BiB,EAA6B,QAC9ByB,EAAY,UAAGzB,EAAY8B,gBAAf,aAAG,EAAsB3yF,KACvCuyF,EAAkBG,EAA6B11E,IAAIs1E,QAClCvxF,IAAlBwxF,GAA+C,OAAlBA,GAC/BA,EAAkB,CAAC1B,GACnBuB,EAAmC3uF,KAAK,CAAC6uF,EAAcC,IACvDG,EAA6B31E,IAAIu1E,EAAcC,IAG/CA,EAAgB9uF,KAAKotF,IAZ8B,8BAcrD,OAAOuB,I,mCAIKQ,EAAUC,EAAQ9mE,GAC9B,KAAG8mE,EAAOnwF,OAAO,GAAjB,CAiBA,IAhBA,IAAMowF,EAAYD,EAAO,GACrBE,EAAU,GACVC,EAAY,GACZC,EAAqB,GACrBC,EAAqB,GACrBC,EAAa,GACbC,EAAe,GACfC,EAAa,GACbC,EAAS,GACTC,EAAkB,GAClBC,GAAU,EACVC,GAAY,EACZC,GAAqB,EACrBC,GAAqB,EACrBC,GAAY,EACVC,EAAmB,GAChBxtF,EAAI,EAAGA,EAAIwsF,EAAOnwF,OAAQ2D,IAAK,CACvC,IAAMgrF,EAAOwB,EAAOxsF,GACdytF,EAAUzC,EAAK0C,gBAAgBlL,gBAAqBmL,YACtDF,IACHF,GAAa,GACdC,EAAmBxtF,GAAGytF,EACjBzC,EAAK4C,sBAAsB,CAACpL,gBAAqBqL,YAAWV,GAAU,GACtEnC,EAAK4C,sBAAsB,CAACpL,gBAAqBsL,cAAaV,GAAY,GAC1EpC,EAAK4C,sBAAsB,CAACpL,gBAAqBuL,wBAAuBV,GAAqB,GAC7FrC,EAAK4C,sBAAsB,CAACpL,gBAAqBwL,wBAAuBV,GAAqB,GAGnG,IAAKttF,EAAI,EAAGA,EAAIwsF,EAAOnwF,OAAQ2D,IAAK,CACnC,IAAMgrF,EAAOwB,EAAOxsF,GACpB,IACC,IAAIiuF,EAAUjD,EAAKkD,aACnB,GAAa,OAAVD,EAAe,SAClB,IAAME,EAAYnD,EAAK0C,gBAAgBlL,gBAAqB4L,cAC5D,GAAe,OAAZD,EAAiB,SACpBnD,EAAKqD,oBAAmB,GACxBpB,EAASA,EAAOrmF,OAAOokF,EAAK0C,gBAAgBlL,gBAAqB8L,SAC7DnB,IAAST,EAAUA,EAAQ9lF,OAAOokF,EAAK0C,gBAAgBlL,gBAAqB+L,WAC5EnB,IAAWT,EAAYA,EAAU/lF,OAAOokF,EAAK0C,gBAAgBlL,gBAAqBsL,aAClFT,IAAoBT,EAAqBA,EAAmBhmF,OAAOokF,EAAK0C,gBAAgBlL,gBAAqBuL,uBAC7GT,IAAoBT,EAAqBA,EAAmBjmF,OAAOokF,EAAK0C,gBAAgBlL,gBAAqBwL,uBAEjH,IAAIQ,EAAkBzB,EAAa1wF,OAAS,EAExCoyF,EAAczD,EAAK0D,iBACvB7xF,KAAK+uF,oCAAoCqC,EAASE,GAClD,IAAK,IAAIQ,EAAc,EAAGA,EAAeR,EAAU9xF,OAAQsyF,GAAe,EAAG,CAC5E,IAAMC,EAASpM,WAAgBqM,qBAAqB,IAAIrM,WAAgB2L,EAAUQ,GAAcR,EAAUQ,EAAc,GAAIR,EAAUQ,EAAc,IAAKF,GACzJ1B,EAAa3vF,KAAKwxF,EAAOlnF,GACzBqlF,EAAa3vF,KAAKwxF,EAAOjnF,GACzBolF,EAAa3vF,KAAKwxF,EAAO1mF,GAE1B,GAAGqlF,EAAW,CACb,IAAME,EAAUD,EAAmBxtF,GACtB,OAAVytF,IACK,uBAAPA,EAAU,IAAI38E,MAAMq9E,EAAU9xF,OAAO,GAAUk9C,KAAK,IAErD,IAAK,IAAIu1C,EAAe,EAAGA,GAAgBrB,EAAQpxF,OAAQyyF,GAAgB,EAAG,CAC7E,IAAIC,EAASvM,WAAgBwM,gBAAgB,IAAIxM,WAAgBiL,EAAQqB,GAAerB,EAAQqB,EAAe,GAAIrB,EAAQqB,EAAe,IAAKL,GAC/IzB,EAAW5vF,KAAK2xF,EAAOrnF,GACvBslF,EAAW5vF,KAAK2xF,EAAOpnF,GACvBqlF,EAAW5vF,KAAK2xF,EAAO7mF,IAGzB,IAAK,IAAI+mF,EAAe,EAAGA,EAAehB,EAAQ5xF,OAAQ4yF,IACxDnC,EAAW1vF,KAAK6wF,EAAQgB,GAAgBT,GAnC3C,QAuCIxuF,EAAE,GACJktF,EAAgB9vF,KAAK4tF,IAGxB,GAAI8B,EAAWzwF,OAAO,GAAK0wF,EAAa1wF,OAAO,EAAG,OAAO,KACzD,IAAM6yF,EAAU,IAAI1M,QAAa+J,EAAU7mE,GAgB3C,OAfAwpE,EAAQC,gBAAgB3M,gBAAqB4L,aAAcrB,GAAc,GACtEQ,GAAaP,EAAW3wF,OAAO,GACjC6yF,EAAQC,gBAAgB3M,gBAAqBmL,WAAYX,GAAY,GACtEkC,EAAQC,gBAAgB3M,gBAAqB8L,OAAQrB,GAAQ,GAEzDP,EAAQrwF,OAAS,GAAG6yF,EAAQC,gBAAgB3M,gBAAqBqL,QAASnB,GAAS,GACnFC,EAAUtwF,OAAS,GAAG6yF,EAAQC,gBAAgB3M,gBAAqBsL,UAAWb,GAAQ,GACtFL,EAAmBvwF,OAAS,GAAG6yF,EAAQC,gBAAgB3M,gBAAqBuL,oBAAqBd,GAAQ,GACzGJ,EAAmBxwF,OAAS,GAAG6yF,EAAQC,gBAAgB3M,gBAAqBwL,oBAAqBf,GAAQ,GAE7GiC,EAAQE,WAAWtC,GACnBoC,EAAQ5C,SAAWG,EAAUH,SAC7B7yF,QAAQmC,IAAK6wF,EAAUH,UACvBY,EAAgBjhF,SAAQ,SAAA++E,GAAI,OAAEA,EAAK3/E,SAAQ,MAC3CohF,EAAUphF,SAAQ,GACX6jF,K,0DAE4BjB,EAASE,Q,KC5ItCzxF,GAAqCzC,EAArCyC,iBAAkBC,GAAmB1C,EAAnB0C,eAC1B6lF,eAAoB0I,aAAe1I,eAAoB2I,iBACvD,IACqBkE,G,WACjB,WAAYrxF,GAAQ,wBACR4tB,EAAgE5tB,EAAhE4tB,OAAQk9D,EAAwD9qF,EAAxD8qF,wBAAyBzH,EAA+BrjF,EAA/BqjF,aAAciO,EAAiBtxF,EAAjBsxF,cAClD1jE,GAAQlvB,GAAiB,WACzBkvB,aAAkBnB,IAAQ9tB,GAAe,SAAU8tB,GAAO7wB,YAAYD,MAC3EkD,KAAKsvB,QAAUP,EACjBy1D,GAAa3kF,GAAiB,gBAClCG,KAAK6kF,cAAgBL,EACjBiO,GAAc5yF,GAAiB,iBACnCG,KAAK0yF,eAAe1zF,EAAUsN,mBAAmBmmF,GACjDzyF,KAAK2yF,2BAA6B,IAAIpE,GACtCvuF,KAAK4yF,uBAAyB,IAAIlE,GAAsB,CAAC7lE,MAAM27D,IAC/DxkF,KAAKksF,yBAAyBD,EAC9BjsF,KAAK6yF,gCAAkC7yF,KAAK6yF,gCAAgC1yF,KAAKH,MACjFA,KAAK8yF,8BAAgC9yF,KAAK8yF,8BAA8B3yF,KAAKH,MAC7EA,KAAK+yF,4BAA8B/yF,KAAK+yF,4BAA4B5yF,KAAKH,MACzEA,KAAKgzF,0BAA2BhzF,KAAKgzF,0BAA0B7yF,KAAKH,MACpEA,KAAKizF,YAAcjzF,KAAKizF,YAAY9yF,KAAKH,MACzCA,KAAKkrF,WAAalrF,KAAKkrF,WAAW/qF,KAAKH,MACvCA,KAAKkzF,iBAAmBlzF,KAAKkzF,iBAAiB/yF,KAAKH,M,0DAG2D,IAAD,OAAlGqtB,EAAkG,EAAlGA,KAAMluB,EAA4F,EAA5FA,SAAUmuB,EAAkF,EAAlFA,wBAA2C69D,GAAuC,EAAzD+H,iBAAyD,EAAvC/H,eAAeE,EAAwB,EAAxBA,uBAC/Ep8E,EAAOjP,KACb,OAAO,IAAIzC,SAAQ,SAACO,EAASC,GACxBoB,IAASA,EAAWoM,EAAS4nF,cACjC,IAAMhjF,EAAQ,EAAKmf,QAAQtB,eAAeX,GAC1C,IAAIld,EAAM,MAAM,IAAInT,MAAJ,0BAA6BqwB,EAA7B,sCAChB,IAAM+lE,EAAY,EAAKP,gCAAgC1iF,EAAOkd,GAC9D,GAAIpe,EAAK0jF,2BAA2Bv5E,IAAIg6E,EAAUhH,UAQlD,MAAM,IAAIpvF,MAAM,0BAPfiS,EAAKikF,iBAAiB,CAAC7lE,OAAMluB,WAAUi0F,YAAWjjF,QAAOmd,0BAAyB69D,gBAAeE,2BAChGjtF,MAAK,SAAAktF,GACFD,IAAuBA,EAAuBzH,mBAAmB,GACpE9lF,EAAQwtF,MACN5sF,MAAMX,Q,0CAUyG,IAAD,OAAlGsvB,EAAkG,EAAlGA,KAAMluB,EAA4F,EAA5FA,SAAUi0F,EAAkF,EAAlFA,UAAkB9lE,GAAgE,EAAvEnd,MAAuE,EAAhEmd,yBAAyB69D,EAAuC,EAAvCA,cAAeE,EAAwB,EAAxBA,uBACrFp8E,EAAOjP,KACb,OAAO,IAAIzC,SAAQ,SAACO,EAASC,GAE5B,IAAMs1F,EAAsBhnF,GAAcinF,aAAanI,GACvDxF,eAAoB4N,WAAW,KAAMH,EAAU10B,QAAS00B,EAAUhH,SAAU,EAAKvH,cAAch8D,OAC9F,SAAC6jE,EAAeC,EAAiBC,GAChC,IAOCyG,EAAoBj1F,MAAK,SAACg3B,GACzB,IAAMk2D,EAAe,IAAImB,GAAa,CAACrgF,KAAK,KAAMsgF,gBAAeC,kBACjEC,YAAWv/D,OAAMluB,WAAUi2B,YAAW9H,4BACtC1wB,QAAQmC,IAAI,EAAK8lF,eACjB,EAAKA,cAAc2O,kBAAkBlI,GACrC1uF,QAAQmC,IAAI,yBACZnC,QAAQmC,IAAIq2B,GACZnmB,EAAK0jF,2BAA2BljF,IAAI2jF,EAAUhH,SAAUd,GACrDD,IAAuBA,EAAuBzH,mBAAmB,GACpE9lF,EAAQwtF,MACN5sF,MAAMX,GAGV,MAAMY,GACLZ,EAAOY,OAGT,SAACimE,GACA,GAAIymB,EAAJ,CACA,IAAMzH,EA9EgC,GA8EXhf,EAAS6uB,OAA4C7uB,EAAS8uB,MACzFrI,EAAuBzH,mBAAoBA,MAE5C,SAAC/6D,EAAOnsB,GACPqB,EAAO,IAAIf,MAAMN,Y,yFAQHyT,EAAOwjF,EAAkBjH,GAAgB,IAAD,OACnD,OAAO,IAAInvF,SAAQ,SAACO,EAASC,GACzB,EAAK+0F,8BAA8B3iF,EAAOu8E,EAAeiH,GACzD71F,S,oDAGsBqS,EAAOu8E,EAAeiH,GAEhD,IADA,IAAMhE,EAASx/E,EAAMw/E,OACZ3hF,EAAQ,EAAGA,EAAQ0+E,EAAcltF,OAAQwO,IAAS,CACvD,IAAM2/E,EAAcjB,EAAc1+E,GAClC,GAAIhO,KAAKizF,YAAYtF,GAC7B3tF,KAAKgzF,0BAA0BrF,EAAagG,OADpC,CAIT,IAAMxF,EAAOwB,EAAOiE,UAAUjG,EAAY7wF,MACtCsyF,OAAY,EAEhB,QADuBvxF,IAAPswF,GAAyB,OAAPA,EAEjCiB,EAAejB,EAAKsB,aAEjB,CACH,GAA0B,OAAvB9B,EAAY8B,SAAgB,SAC/BL,EAAezB,EAAY8B,SAAS3yF,KAErCkD,KAAK+yF,4BAA4B3D,EAAczB,EAAagG,O,gDAGjChG,EAAagG,GACnChG,EAAY8B,SAAWkE,EAAiBE,yB,kDAEhBzE,EAAczB,EAAagG,GACnDA,EAAiBG,yBAAyB1E,GAAchxF,MAAK,SAAC21F,GAC1DpG,EAAY8B,SAAWsE,KACxBr1F,MAAM9B,QAAQC,S,sDAEQsT,EAAOkd,GACtC,IAAM2mE,EAAoB7jF,EAAM3D,aAChC,GAAGwnF,EAAkB,CACpB,IAAMC,EAASj1F,EAAUuU,iBAAiBygF,GACpCp2F,EAAG,UAAMoC,KAAK0yF,gBAAX,OAA4BuB,GACrC,OAAO,IAAI9H,GAAU,CAAC9+D,KAAKA,EAAMzvB,IAAIA,IAEtC,OAAO,IAAIuuF,GAAU,CAAC9+D,KAAKA,EAAMqxC,QAAQ1+D,KAAK0yF,eAAiBtG,SAAS,GAAD,OAAI/+D,EAAJ,Y,kCAEzDsgE,GACR,IAAM7wF,EAAO6wF,EAAY7wF,KACzB,MAAgB,aAATA,GAAgC,aAATA,M,eCpI9B+C,I,oBAAqBzC,EAArByC,kBA4JOq0F,G,WA1JX,WAAY/yF,GAAQ,IAAD,gCAmJnBgzF,gBAAkB,SAAAjmF,GACb,EAAKkmF,QAAQxiD,UApJC,IACPyiD,EAAgClzF,EAAhCkzF,4BACRr0F,KAAKs0F,YAAa,EAClBt0F,KAAK2uF,OAAS,KACT0F,GAA6Bx0F,GAAiB,+BACzDG,KAAKu0F,6BAA+BF,EAC9Br0F,KAAKurF,uBAAyBvrF,KAAKurF,uBAAuBprF,KAAKH,MAC/DA,KAAKm0F,gBAAkBn0F,KAAKm0F,gBAAgBh0F,KAAKH,MACjDA,KAAKyrF,eAAiBzrF,KAAKyrF,eAAetrF,KAAKH,MAC/CA,KAAKw0F,cAAgBx0F,KAAKw0F,cAAcr0F,KAAKH,MAC7CA,KAAKy0F,aAAez0F,KAAKy0F,aAAat0F,KAAKH,MAC3CA,KAAK00F,WAAa10F,KAAK00F,WAAWv0F,KAAKH,MACvCA,KAAKwzF,kBAAoBxzF,KAAKwzF,kBAAkBrzF,KAAKH,MACrDA,KAAK20F,sBAAwB30F,KAAK20F,sBAAsBx0F,KAAKH,MAC7DA,KAAKkoF,wBAA0BloF,KAAKkoF,wBAAwB/nF,KAAKH,MACjEA,KAAK40F,sBAAwB50F,KAAK40F,sBAAsBz0F,KAAKH,MAC7DA,KAAK60F,iCAAmC70F,KAAK60F,iCAAiC10F,KAAKH,MACnFA,KAAKwO,QAAUxO,KAAKwO,QAAQrO,KAAKH,MACjCA,KAAK80F,+BAAiC90F,KAAKstF,+BAA+BntF,KAAKH,MAC/EA,KAAK+0F,6BAA+B/0F,KAAK+0F,6BAA6B50F,KAAKH,MACjFA,KAAKg1F,eAAe,GACpBh1F,KAAKi1F,8CAAgD,IAAIxxD,GAAyB,CAACC,YAAY,IAC/F1jC,KAAK4pB,QAAUC,SAASC,cAAc,UAChC9pB,KAAK4pB,QAAQkQ,MAAMpjB,MAAQ,OACjC1W,KAAK4pB,QAAQkQ,MAAMnjB,OAAS,OACtB3W,KAAKo0F,QAAU,IAAIzO,UAAe3lF,KAAK4pB,SAAS,GAChD5pB,KAAK2uF,OAAS,IAAIhJ,SAAe3lF,KAAKo0F,SAC5C,IAAMc,EAAuB,IAAIC,KAAqBn1F,KAAK2uF,QAC3D/gD,aAAY,kBAAIhxC,QAAQmC,IAAI,iBAAiBm2F,EAAqBE,iBAAiBl8D,WAAU,KACvFh6B,OAAOuO,iBAAiB,SAAUzN,KAAKm0F,iBAAiB,GAC9D5+E,YAAW,WACT,EAAK6+E,QAAQxiD,SACd,EAAK2iD,iCACH,G,8DAEcjJ,GACjBA,EAAa79E,iBAAiB,WAAYzN,KAAK20F,uBAC/C30F,KAAKg1F,eAAez0F,KAAK+qF,K,4CAEJ/7E,GAAG,IACjB+7E,EAAc/7E,EAAd+7E,aACDt9E,EAAQhO,KAAKg1F,eAAelyF,QAAQwoF,GACvCt9E,EAAM,GACThO,KAAKg1F,eAAet0F,OAAOsN,EAAO,K,6CAcTuJ,GAAS,IAAD,OACjCA,EAASA,GAAQ,CAACi0E,sBAAqB,GAEjCxrF,KAAK2uF,OAAO0G,2BAClBznD,aAAY,WACZ,EAAK+gD,OAAO2G,qBACN,EAAK3G,OAAO4G,OAAO,GAAGC,UAAY,MAExCx1F,KAAKy1F,QAAU,IAAI9P,cAAmB,SAAUA,WAAgB+P,OAAQ11F,KAAK2uF,QACvE3uF,KAAK21F,qBAAuB31F,KAAKy1F,QAAQG,S,mDAEhBC,GAC/Bj5F,QAAQmC,IAAI,uBACZnC,QAAQmC,IAAIiB,KAAKy1F,QAAQG,QACnB51F,KAAKy1F,QAAQG,OAAS51F,KAAK21F,qBAAuBE,I,wCAGvCrqF,GACjBxL,KAAKy1F,QAAQjqF,SAAWA,EACxBxL,KAAK60F,qC,iCAEKlL,GACV3pF,KAAKy1F,QAAQjqF,SAASq+E,WAAWF,GACjC3pF,KAAK60F,qC,8CAEkBiB,GACvBnQ,cAAmBoQ,wBAAwBD,EAAgB91F,KAAKy1F,QAAQ/P,oBACxE1lF,KAAK60F,qC,0CAGL,OAAO70F,KAAKy1F,QAAQjqF,W,uCAGdxL,KAAKy0F,cAAa,K,sCAGlBz0F,KAAKy0F,cAAa,K,mCAETnyF,GACHtC,KAAKs0F,WAAahyF,IACxBtC,KAAKs0F,WAAahyF,EACdA,EACCtC,KAAKo0F,QAAQ4B,cAAch2F,KAAK00F,YAGpC10F,KAAKo0F,QAAQ6B,eAAej2F,KAAK00F,e,yDAGxC10F,KAAKi1F,8CAA8CvmE,QAAQ1uB,KAAK40F,yB,8CAGhE,GAAG11F,OAAOg3F,gBAAV,CAA2B,IAAD,gBACDl2F,KAAKg1F,gBADJ,IACzB,IAAI,EAAJ,qBAA4C,CAAC,IAArC1J,EAAoC,QAC3C1uF,QAAQmC,IAAIG,OAAOg3F,iBACnB5K,EAAa8B,kBAAkBluF,OAAOg3F,kBAHd,oCAO1B,GAAGh3F,OAAOquF,qBAAV,CAAgC,IAAD,gBAENvtF,KAAKg1F,gBAFC,IAE9B,IAAI,EAAJ,qBAA4C,EAApC1J,EAAoC,SAC9BiC,wBAHgB,mCAA/B,CAOA,IAfsB,EAgBNvtF,KAAKy1F,QAAQjqF,SAAtBX,EAhBe,EAgBfA,EAAGC,EAhBY,EAgBZA,EAAGO,EAhBS,EAgBTA,EACP4Z,EAAcjlB,KAAKy1F,QAAQ/P,mBAAmByQ,gBAC9Cv2E,GAAaqF,EAAYna,EAAG+U,EAAaoF,EAAYpa,EAC3DjO,QAAQmC,IAAI6gB,GACZhjB,QAAQmC,IAAI8gB,GApBU,oBAqBE7f,KAAKg1F,gBArBP,IAqBtB,IAAI,EAAJ,qBAA4C,CAAC,IACtCkB,GADC5K,EAAoC,SACNl2D,UAAUpC,aAAa,CAACpT,aAAYC,eAAchV,IAAGC,IAAGO,MAC7FzO,QAAQmC,IAAIm3F,GACZ5K,EAAa8B,kBAAkB8I,IAxBV,kC,qDA2BW9pF,EAAMZ,EAAUC,EAAUC,GACrDU,EAAKZ,SAAW,IAAIm6E,WAAgBn6E,EAASX,EAAGW,EAASV,EAAGU,EAASH,GACrEe,EAAKX,SAAW,IAAIk6E,WAAgBl6E,EAASZ,EAAGY,EAASX,EAAGW,EAASJ,GACrEe,EAAKV,QAAU,IAAIi6E,WAAgBj6E,EAAQb,EAAGa,EAAQZ,EAAGY,EAAQL,K,kDAEzC8iF,EAAMR,EAAagG,GAC3CA,EAAiBG,yBAAyB3F,EAAKsB,UAAUrxF,MAAK,SAAC21F,GAC3DpG,EAAY8B,SAAWsE,KACxBr1F,MAAM9B,QAAQC,S,mCAGjBmD,KAAK2uF,OAAOvwD,W,gCAMZl/B,OAAO4O,oBAAoB,SAAU9N,KAAKm0F,iBAAiB,K,8BAzGjE,OAAOn0F,KAAK4pB,U,4BAGN,OAAO5pB,KAAK2uF,S,6BAGZ,OAAO3uF,KAAK4pB,U,6BAGlB,OAAO5pB,KAAKy1F,Y,KC5DOW,IAFQh5F,EAArByC,iB,kDAIJ,WAAYsB,GAAQ,IAAD,sBACf,cAAMA,GADS,IAEdu5B,EAAuFv5B,EAAvFu5B,KAAM27D,EAAiFl1F,EAAjFk1F,4BAA+D9lD,GAAkBpvC,EAApDm1F,iCAAoDn1F,EAAlBovC,kBAFvD,OAGrB,EAAKC,kBAAmBD,EACxB,EAAK7V,KAAOA,EACZ,EAAK67D,6BAA+BF,EAC9B,EAAK3uD,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAKg7B,WAAa,EAAKA,WAAWh7B,KAAhB,gBAClB,EAAKsnC,MAAQ,EAAKA,MAAMtnC,KAAX,gBACb,EAAKq2F,oBAAsB,EAAKA,oBAAoBr2F,KAAzB,gBAC3B,EAAKs2F,WAAa,EAAKA,WAAWt2F,KAAhB,gBAClB,EAAKu2F,8BAAgC,EAAKA,8BAA8Bv2F,KAAnC,gBACrC,EAAKs8B,YAAc/D,IAAMC,YACzB,EAAKG,MAAQ,CAAC8C,SAAQ,GAC5B,EAAK+6D,sBAAwB,KAC7B,EAAKntB,eAAiB,KACtB,EAAKotB,+BAAiC,KAhBjB,E,iDAkBjB3mE,GAAU,IAAD,OAEb,OADAjwB,KAAK43B,UAAY3H,EACV,IAAI1yB,SAAQ,SAACO,EAASC,GACxB,EAAK44F,wBACR,EAAKA,sBAAwB,IAAI52F,EACjCwV,WAAW,EAAKkyB,MAAM,IAEvB,EAAKkvD,sBAAsBv4F,KAAKN,GAChC,EAAK64F,sBAAsBj4F,MAAMX,Q,8BAG3B,IAEH84F,EAFE,OACAC,EAAsB,IAAI9S,GAAoB,CAAC/zD,SAASjwB,KAAK43B,UAAWr1B,cAAcvC,KAAKwwC,sBAE3Fg0C,EAAe,IAAI0P,GAAa,CAACG,4BAA4B,WAClEwC,EAAS9sE,aACR3rB,KAAK,EAAKu4F,sBAAsBv2F,QAChC1B,OAAM,SAACC,GACP/B,QAAQC,MAAM8B,GACd,EAAKg4F,sBAAsBt2F,QAAQ1B,GACnC,EAAKg4F,sBAAuB,KAC5B,EAAKH,4BAGDlM,EAAuB,IAAIkI,GAAqB,CAACuE,UAAU/2F,KAAKg3F,WAAYjoE,OAAO/uB,KAAK43B,UAAU7I,OACvGy1D,eAAciO,cAAcvmF,EAAKe,iBAAiBjN,KAAKwwC,oBAAoB3rC,YAC5EgyF,EAAW,IAAIlL,GAAe,CAACx7E,MAAM2mF,EAAqBrgE,QAAQz2B,KAAKy8B,YAAYvD,QAASsrD,aAAaA,EAAc8F,qBAAqBA,M,6CAEvF,EAAjC2M,MAAiC,EAA1BC,yBAC3Bl3F,KAAKwpE,eAAiBxsC,GAAOquC,OAAO,CACnCluC,MAAM,QACN5V,UAAU,0CACV7qB,QAAQ,oBACRwgC,QAAQ,CACP,CAAC5+B,KAAK,QAASgwB,SAAStuB,KAAKy2F,YAC7B,CAACn4F,KAAK,8BAA+BgwB,SAAStuB,KAAK02F,+BACnD,CAACp4F,KAAK,SAAUgwB,SAAStuB,KAAK06B,W,mCAKhC16B,KAAKynC,U,sDAGLznC,KAAKynC,U,iCAEKnlC,GAAO,IAAD,EAChB,UAAAtC,KAAK42F,sCAAL,SAAqCpoF,UACrCxO,KAAK42F,+BAAiC,KACnCt0F,IACFtC,KAAK42F,+BAAiC52F,KAAKu2F,+BAA+BpwC,kBAAkB,CACzF,cAAC,GAAD,CAAY5+B,UAAU,4BACvB+U,OAASpwB,EAAKQ,OAAO,2BAA4BirB,QAAS33B,KAAK06B,MAAWhiB,GAAWC,WAIxF3Y,KAAKs5B,SAAS,CAACsC,QAAQt5B,M,+BAGvB,IAAMilB,EAAY,iBAAiBvnB,KAAK84B,MAAM8C,QAAQ,UAAU,IAC1D,OACI,qBAAKrU,UAAWA,EAAWsS,IAAK75B,KAAKy8B,kB,GAjFTjgC,c,qBCblCqD,I,OAAkCzC,EAAlCyC,kBACes3F,IADmB/5F,EAAhB0C,e,WAEvB,WAAYqB,GAAO,oBAClB,IACOi2F,EAAgFj2F,EAAhFi2F,gBAAiBC,EAA+Dl2F,EAA/Dk2F,SAAUC,EAAqDn2F,EAArDm2F,eAAgBC,EAAqCp2F,EAArCo2F,2BAA4B5/D,EAASx2B,EAATw2B,QAC9E33B,KAAKw3F,iBAAmBJ,EACxBp3F,KAAKy3F,UAAYJ,EACjBr3F,KAAKw8B,eAAiB7E,EACtB33B,KAAK03F,SAAWH,EAA2BH,EAAgBzqF,kBAC3D3M,KAAKqlB,aAAe+xE,EAAgBnyE,YACpCjlB,KAAKslB,uBAAyB8xE,EAAgBlyE,sBAC9C,IAAMyyE,EAAqBP,EAAgBO,mBACxCA,IAAsB33F,KAAKslB,wBAC7BzlB,GAAiB,yBACDG,KAAKqlB,aAAavF,YACnC9f,KAAKk4B,aAAcl4B,KAAKk4B,aAAa/3B,KAAKH,MAC1CA,KAAK43F,cAAe53F,KAAK43F,cAAcz3F,KAAKH,MAC5CA,KAAKk4B,aAAel4B,KAAKk4B,aAAa/3B,KAAKH,MAC3CA,KAAK63F,8BAA+B73F,KAAK63F,8BAA8B13F,KAAKH,MAC5EA,KAAK83F,aAAc93F,KAAK83F,aAAa33F,KAAKH,MAC1C,IAAMy2B,EAAU5M,SAASC,cAAc,OACvC2M,EAAQsE,UAAUtrB,IAAI,WACnB2nF,EAAgB7vE,WAClBkP,EAAQsE,UAAUtrB,IAAI2nF,EAAgB7vE,WAEvC,IAAMwwE,EAAcluE,SAASC,cAAc,OAC3CiuE,EAAYh9D,UAAUtrB,IAAI,QAC1BsoF,EAAYh9D,UAAUtrB,IAAI,gBAC1BsoF,EAAYtqF,iBAAiB,QAASzN,KAAKk4B,cAC3C6/D,EAAYvtE,IAAMxqB,KAAK03F,SACvB13F,KAAK8qD,aAAeitC,EAEpB,IAAMC,EAAiBnuE,SAASC,cAAc,OAC9CkuE,EAAej9D,UAAUtrB,IAAI,mBAC7BuoF,EAAej9D,UAAUtrB,IAAI,mBAG7BgnB,EAAQwE,YAAY88D,GACpBthE,EAAQwE,YAAY+8D,GAEpBh4F,KAAKy4B,SAAWhC,EAEhB+kB,GAAqBx7C,KAAKy4B,UAC1Bz4B,KAAKi4F,iBAAmB9kE,KAAK+kE,IAAIl4F,KAAKqlB,aAAaxF,cACnD7f,KAAKm4F,SAAWb,EAAec,mBAAmBC,cAAc5hE,EAAS,CAAE6hE,IAAKt4F,KAAKqlB,aAAazF,WAAY24E,MAAMv4F,KAAKqlB,aAAaxF,eACtI7f,KAAK43F,cAAcD,EAAmB33F,KAAK63F,gCAAgC73F,KAAKqlB,aAAamzE,MAC1Fb,GACF33F,KAAK83F,e,2DAiBN,IAAM7oF,EAAOjP,KACPy4F,EAAiBz4F,KAAKm4F,SAASjV,QAAQ/iF,KAAKH,KAAKm4F,UACjDjzE,EAAsBllB,KAAKslB,uBACjCtlB,KAAKm4F,SAASjV,QAAU,WACvB,IAAMwV,EAAW14F,KAAK2L,UAChBgtF,EAAe34F,KAAK44F,MAAMC,oBAAoB,CAACP,IAAIpzE,EAAsBtF,WAC9E24E,MAAMrzE,EAAsBrF,eAC7B,GAAc,OAAX64E,GACc,MAAdC,GAAqC,OAAjBA,EAAa9tF,GAA2B,OAAjB8tF,EAAa7tF,EAA3D,CACA,IAAMguF,EAAgB3lE,KAAKC,GAAG,EAAID,KAAK4lE,MAAOJ,EAAa7tF,EAAI4tF,EAAS5tF,EAAK6tF,EAAa9tF,EAAI6tF,EAAS7tF,GACvGoE,EAAK2oF,cAAckB,GACnBL,Q,sDAKD,OAAOz4F,KAAKqlB,aAAavF,YAAa9f,KAAKm4F,SAASS,MAAMI,O,oCAE7CC,GAEb,IADA,IAAIC,EAAsB,CAAE,gBAAiB,oBAAqB,aACzD/1F,EAAI,EAAGA,EAAI+1F,EAAoB15F,OAAQ2D,IAAK,CACpD,IAAIg2F,EAAWD,EAAoB/1F,GACnCnD,KAAK8qD,aAAahxB,MAAMq/D,GAAY,UAAYF,EAAkB,U,qCAInEj5F,KAAKw8B,eAAex8B,Q,qCAvCpB,IAAM02B,EAAO12B,KAAKy4B,SAAS9B,wBAC3B,MAAO,CAACD,EAAKO,KAAMj3B,KAAKy4B,SAASW,YAAY,EAAI1C,EAAKI,IAAK92B,KAAKy4B,SAASY,aAAa,K,sCAGtF,OAAOr5B,KAAKw3F,mB,+BAGZ,OAAOx3F,KAAKy3F,Y,8BAGZ,OAAOz3F,KAAKy4B,a,MCzDR54B,I,OAAkBzC,EAAlByC,kBACeu5F,G,kDACpB,WAAYj4F,GAAO,IAAD,0BACVo2F,EAA+Ep2F,EAA/Eo2F,2BAA4B8B,EAAmDl4F,EAAnDk4F,eAAgBrtD,EAAmC7qC,EAAnC6qC,SAAUstD,EAAyBn4F,EAAzBm4F,wBAD5C,OAEjB,cAAMn4F,GACNqM,EAAY,gBACZ,EAAK4qC,UAAYpM,EACjB,EAAKutD,8BAAqD17F,IAA1By7F,GAA+D,OAA1BA,EAA+B,GAAGA,OACvEz7F,IAA7B05F,GAAqE,OAA7BA,GAC1C13F,GAAiB,8BAClB,EAAK25F,4BAA4BjC,EACjC,EAAKkC,sBAAwBJ,EAC7B,EAAKK,cAAgBhhE,IAAMC,YAC3B,EAAKghE,uBAAwB,EAAKA,uBAAuBx5F,KAA5B,gBAC7B,EAAKy5F,cAAgB,EAAKA,cAAcz5F,KAAnB,gBACrB,EAAK05F,6BAA+B,EAAKA,6BAA6B15F,KAAlC,gBACpC,EAAK25F,sBAAwB,EAAKA,sBAAsB35F,KAA3B,gBAC7B,EAAK45F,eAAiB,EAAKA,eAAe55F,KAApB,gBACtB,EAAK65F,gBAAkB,EAAKA,gBAAgB75F,KAArB,gBACvB,EAAK85F,gBAAkB,EAAKA,gBAAgB95F,KAArB,gBACvB,EAAK+5F,0BAA2B,EAAKA,0BAA0B/5F,KAA/B,gBAChC,EAAKg6F,UAAW,EAAKA,UAAUh6F,KAAf,gBAChB,EAAKi6F,2BAA6B,EAAKA,2BAA2Bj6F,KAAhC,gBAClC,EAAKk6F,oBAAqB,EAAKA,oBAAoBl6F,KAAzB,gBAC1B,EAAKm6F,iBAAkB,EAAKA,iBAAiBn6F,KAAtB,gBACvB,EAAKo6F,+BAAiC,EAAKA,+BAA+Bp6F,KAApC,gBACtC,EAAKq6F,wBAA0B,KAC/B,EAAK1hE,MAAQ,GAzBI,E,gEA6BX,IAWA2hE,EAAgBz6F,KAAK05F,cAAcxgE,QACnCl5B,KAAK06F,iBAAmB,IAAIC,KAAUC,OAAOH,EAZvB,CAClBI,UAAW,QACXC,SAAU,CACNC,cAAe,QAEnBC,MAAO,CACHC,WAAW,EACXC,uBAAuB,EACvBC,iBAAiB,KAKzBn7F,KAAKo7F,SAAWT,KAAUU,gBAAgBC,MAAMC,YAAY,KAAM,IAAIpoE,KAAKC,GAAG,IAAK,IAAID,KAAKC,GAAG,O,4CAEhFikE,EAAUmE,GAC/B,IAAMC,EAAkBz7F,KAAK25F,uBAAuBtC,GAC9CqE,EAAkB,IAAIf,KAAUU,gBAAgB,CAAC/C,IAAIkD,EAA2BA,EAA2B57E,gBAAW/hB,GAAYmC,KAAKo7F,UACvI9D,EAAiBt3F,KAAK06F,iBAAiBiB,iBAAiB,CAACnrF,KAAMkrF,IASrE,OARG17F,KAAK47F,4BACP57F,KAAK47F,4BACL57F,KAAK47F,0BAA4B,MAElC57F,KAAK47F,0BAA4B57F,KAAKs6F,iBACrCt6F,KAAK06F,iBAAkBpD,EAAiBD,EAASnxE,mBAClDlmB,KAAK45F,cAActC,EAAgBmE,EAAiBpE,EAASlxE,aAC7DnmB,KAAKi6F,gBAAgB3C,EAAgBD,GAC9BC,I,uCAESuE,EAAiBvE,EAAgBryE,GACjD,IAAMhW,EAAOjP,KACP87F,EAAYD,EAAgBE,YAAYC,WAO9C,OADAH,EAAgBE,YAAYC,WALZ,SAAS76F,GACxB26F,EAAU36F,GACV,IAAMm3F,EAAMhB,EAAesB,MAAMI,OAAO/zE,EAAYA,EAAYrF,WAAW,GAAK,SAChF3Q,EAAKhB,cAAc,CAAC5Q,KAAK,aAAci7F,IAAIA,KAGrC,WACNuD,EAAgBE,YAAYC,WAAaF,K,qCAK5B73E,EAAM5Y,EAAGR,EAAGC,GAC1B,MAAM,GAAN,OAAUmZ,EAAV,YAAkB5Y,EAAlB,YAAuBP,EAAvB,YAA4BD,EAA5B,U,6CAEsBwsF,GAAU,IAAD,OACzBoE,EAAkB,GASxB,OARApE,EAASvxE,OAAO1W,SAAQ,SAAC6sF,GACxBA,EAAev2E,QAAQtW,SAAQ,SAAC8sF,GAC/B,IAAMC,EAAiB,IAAIxB,KAAUyB,gBAAe,SAACC,GAAD,OAAQ,EAAKrC,gBAChEqC,EAAMhF,EAAU4E,EAAgBC,MAEjCT,EAAgBl7F,KAAK47F,SAGhBV,I,sCAEQY,EAAMhF,EAAUiF,EAAeJ,GAC9C,IAAIl2E,EAAS,UAAMqxE,EAASrxE,WAAf,OAA2Bs2E,EAAcvqF,KAAzC,KAUb,YAT8BlU,IAA3Bq+F,EAAoBnqF,MAA6C,OAA3BmqF,EAAoBnqF,OAC5DiU,GAAW,GAAF,OAAKk2E,EAAoBnqF,KAAzB,MAOF,CAAEnU,IAAI,GAAD,OAAKooB,GAAL,OAAiBhmB,KAAK+5F,eAAesC,EAAKp4E,KAAMo4E,EAAKhxF,EAAGgxF,EAAKxxF,EAAGwxF,EAAKvxF,O,oCAGrEwsF,EAAgBmE,EAAiB/3E,GACxC,IAD+C,EACzC64E,EAAwB,IAAI5B,KAAU6B,aAAa94E,GADV,cAExB+3E,GAFwB,IAErD,2BAA8C,CAAC,IAApCU,EAAmC,QAC7C7E,EAAemF,YAAY,CAC1BC,OAAQP,EACRQ,SAAUJ,EACVK,eAAe,KANoC,iC,sCAUtCtF,EAAgBD,GAC/B,IAAMpoF,EAAOjP,KACbq3F,EAAStxE,SAAS3W,SAAQ,SAASgoF,IACL,IAA1BA,EAAgBlJ,UAChBkJ,EAAgByF,YAClB78F,KAAKk6F,0BAA0B,CAAC9C,gBAAgBA,EAAiBC,SAASA,EAAUC,eAAeA,EACnGC,2BAA2BtoF,EAAKuqF,4BAChC7hE,QAAQ1oB,EAAKorF,sBAGd,IAAIlD,GAAQ,CAACC,gBAAgBA,EAAiBC,SAASA,EAAUC,eAAeA,EAChFC,2BAA2BtoF,EAAKuqF,4BAC/B7hE,QAAQ1oB,EAAKorF,4B,gDAGUjD,GAEzB,OAAO0F,EADe98F,KAAKu5F,yBAAyBnC,EAAgB/5F,OAC/C+5F,K,0CAEFhvE,GACnBpoB,KAAKy5F,sBAAsBrxE,K,mDAIvBpoB,KAAK06F,iBAAiBqC,aAAav9F,QAAU,GACjDQ,KAAK06F,iBAAiBsC,aAAah9F,KAAK06F,iBAAiBqC,aAAaE,W,gCAG1D1lF,GAAQ,IAAD,OACZ8/E,EAAsC9/E,EAAtC8/E,SAAUmE,EAA4BjkF,EAA5BikF,2BACbnE,GAASx3F,GAAiB,YAC9B,IAAMoP,EAAOjP,KACbA,KAAKw6F,yBAAyBx6F,KAAKw6F,0BACnC,IAAI7mD,GAAY,EAEhB,OADA3zC,KAAKw6F,wBAAyB,WAAK7mD,GAAY,GACxC,IAAIp2C,SAAQ,SAACO,EAASC,GAC5B,IAAMm/F,EAA2B,WAChCn/F,EAAO,IAAIf,MAAM,0DAElB,GAAG22C,EAAU,OAAOupD,IACpB,EAAKxC,iBAAiByC,aACtB,IAAM7F,EAAiB,EAAKwC,sBAAsBzC,EAAUmE,GACtD11E,EAASwxE,EAAe8F,aACxBC,EAAiB,IAAIn5E,GAAS4B,IACvB,SAAPnN,IACL,GAAGg7B,EAAU,OAAOupD,IACpB,GAAIG,EAAepS,UAAnB,CAQA,IAAMqS,EAAQD,EAAe1kF,OAC7B,EAAK4kF,WAAWD,GACdl/F,KAAKua,GAAMja,MAAMX,QATlBkR,EAAKuuF,eAAelG,GAAgBl5F,MAAK,WACxC,GAAGu1C,EAAU,OAAOupD,IACpBjuF,EAAKyrF,iBAAiByC,aACtBr/F,OACEY,MAAMX,GAOX4a,Q,qDAG6B2+E,EAAgBryE,GAC7CqyE,EAAemG,OAAOx4E,EAAYrF,c,qCAErB03E,GAAgB,IAAD,OAC7B,OAAO,IAAI/5F,SAAQ,SAACO,EAASC,GAC5B,IACCu5F,EAAeoG,SAAS,CACvBC,mBAAoB,IACpBC,iBAAkB,EAAK/D,+BACtB,WACD,EAAKO,6BACLt8F,OAGF,MAAMa,GACLZ,EAAOY,S,mDAImBk/F,EAAKC,EAAUC,GAC3C,IAAMj4E,EAASg4E,EAASV,aACxBt3E,EAAO1W,SAAQ,SAASkuF,EAAOtvF,GAC9B,IAAMgwF,EAAUH,EAAM/3E,EAAOtmB,QAAWwO,EAAM,EAAI8X,EAAOtmB,QACnDy+F,EAAUtD,KAAUuD,KAAKC,MAAMH,EAAQ,EAAG,GAChDV,EAAMc,aAAa,CAAEH,QAASA,OAE/BH,EAASO,kBAAkBC,aAAaxkE,MAAMmkE,QAAUJ,I,iCAG3CP,GACb,IAAMiB,EAAejB,EAAMiB,eAC3B,OAAO,IAAIhhG,SAAS,SAACO,EAASC,GAC7BwgG,EAAa9wF,iBAAiB,eAAe,SAAA4uF,GAC5Cv+F,OAEDygG,EAAa9wF,iBAAiB,eAAgB1P,Q,+BAI/C,OAAQ,qBAAKwpB,UAAU,WAAWsS,IAAK75B,KAAK05F,cAApC,SACN15F,KAAKo4C,gB,GArN4B57C,aCC9BqD,I,OAAkB1C,EAAlB0C,kBACc2+F,G,kDACpB,WAAYr9F,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVoB,EAAepB,EAAfoB,cAFU,OAGjB,EAAKkQ,eAAiBlQ,EACtB,EAAK0E,wBAA0B1E,EAAc+B,uBAC7C,EAAKm4B,YAAc/D,IAAMC,YACzB,EAAK8lE,aAAe/lE,IAAMC,YAC1B,EAAK+lE,0BAA2BhmE,IAAMC,YACtC,EAAKgmE,cAAgB,EAAKA,cAAcx+F,KAAnB,gBACrB,EAAKunC,KAAO,EAAKA,KAAKvnC,KAAV,gBACZ,EAAKu6B,KAAO,EAAKA,KAAKv6B,KAAV,gBACZ,EAAKy+F,gBAAkB,EAAKA,gBAAgBz+F,KAArB,gBACvB,EAAK29B,YAAc,EAAKA,YAAY39B,KAAjB,gBACnB,EAAK49B,wBAA0B,EAAKA,wBAAwB59B,KAA7B,gBAC/B,EAAK0+F,qCAAuC,EAAKA,qCAAqC1+F,KAA1C,gBAC5C,EAAK2+F,oCAAsC,EAAKA,oCAAoC3+F,KAAzC,gBAC3C,EAAK4+F,kCAAoC,EAAKA,kCAAkC5+F,KAAvC,gBACzC,EAAK6+F,gBAAkB,EAAKA,gBAAgB7+F,KAArB,gBACvB,EAAK8+F,aAAe,EAAKA,aAAa9+F,KAAlB,gBACpB,EAAK++F,eAAiB,EAAKA,eAAe/+F,KAApB,gBACtB,EAAKg/F,gBAAkB,EAAKA,gBAAgBh/F,KAArB,gBACvB,EAAKi/F,8BAAgC,IAAIr/F,EACzC,EAAK63B,UAAY,KACjB,EAAKynE,UAAW,EAChB,EAAKC,kBAAoB,KAxBR,E,gEA2BjB,IAAMC,EAAkBv/F,KAAKy+F,aAAavlE,QACpCzC,EAAUz2B,KAAKy8B,YAAYvD,QACjCqmE,EAAgB9xF,iBAAiB,OAAQzN,KAAKm/F,iBAC9CI,EAAgB9xF,iBAAiB,QAASzN,KAAKk/F,gBAC/Cl/F,KAAKi/F,aAAaxoE,K,mCAENA,GAAS,IAAD,OAChB+oE,EAAQ,KAAMtxB,EAAW,KACF,IAAIhvC,GAAmB,CACjDzI,UAAS0I,iBAAgB,EAAOC,gBAAe,EAC/CC,QAAQ,SAAC9vB,GACmB,MAAxB,EAAK+vF,oBACP,EAAKA,kBAAoB7oE,EAAQ2C,YAAY3C,EAAQ4C,cACtDmmE,EAAS,CAAC/oE,EAAQ2C,YAAc7pB,EAAE1E,EAAG4rB,EAAQ4C,aAAe9pB,EAAEzE,GAC9D2rB,EAAQqD,MAAMo0C,SAAW,OACzBA,EAAUz3C,EAAQ0H,WAAW/E,YAAc,IACzCkG,OAAO,SAAC/vB,GACV,IAAM1E,EAAI0E,EAAE1E,EAAGC,EAAEyE,EAAEzE,EACb20F,GAAmBD,EAAQ,GAAI10F,GAAI,EAAKw0F,kBACxCI,GAAmB70F,EAAI20F,EAAQ,IAAI,EAAKF,kBACxClpB,EAAKqpB,EAAgBA,EAAmBC,EAAgBA,EACxDC,EAAqB,EAAKL,kBAAkB,EAAKA,kBACnD3oF,EAASwc,KAAKsY,KAAK2qC,GAAI,EAAEupB,IACzBjpF,EAAQC,EAAS,EAAK2oF,kBACvB5oF,EAAMw3D,EAERv3D,GADAD,EAAQw3D,GACS,EAAKoxB,mBAGnB5oF,EAAQ,MACVA,EAAQ,KACTC,EAASD,EAAQ,EAAK4oF,mBAEvB7oE,EAAQqD,MAAMpjB,MAAQkC,OAAOlC,GAAO,KACpC+f,EAAQqD,MAAMnjB,OAASiC,OAAOjC,GAAQ,MACpC4oB,MAAM,aAASC,YAAW,M,sCAIfrf,GAAoB,IAAD,EAC5By/E,EAAwB,UAAG5/F,KAAK43B,iBAAR,aAAG,EAAgBnX,cAAc0yE,aAAa/mE,+BAA+BjM,GACvGy/E,IACJ5/F,KAAK6+F,qCAAgE,IAA3Be,EAAyB/0F,GACnE7K,KAAK8+F,oCAA+D,IAA3Bc,EAAyB90F,GAClE9K,KAAK++F,mCAAkC,M,sCAGxBc,GACf7/F,KAAK0+F,0BAA0BxlE,QAAQY,MAAMgmE,UAA7C,sCAAwFD,EAAQ1sE,KAAKC,GAArG,U,sCAGApzB,KAAK89B,aAAa99B,KAAKq/F,Y,6BAGvBr/F,KAAK89B,aAAY,K,6BAIjB99B,KAAK89B,aAAY,K,8BAGD,IAAD,OAAV7N,EAAU,EAAVA,SACL,OAAO,IAAI1yB,SAAQ,SAACO,EAASC,GAC5B,EAAK65B,UAAY3H,EACbA,GACHpwB,GAAiB,YAElB,IAAMmS,EAAmB9F,EAAKe,iBAAiB,EAAKwF,eAAe5N,UAAUorB,EAASxP,cAAc0yE,aAAanhF,kBACjH,EAAKysF,aAAavlE,QAAQ1O,IAAMxY,EAChC,EAAKotF,8BAA8BhhG,MAAK,WACvC,EAAK0/B,aAAY,GACjBhgC,OAED,EAAKshG,8BAA8B1gG,MAAMX,Q,uCAI1CiC,KAAKo/F,8BAA8B/+F,QAAQ,IAAIrD,MAAM,8B,wCAGrDgD,KAAKo/F,8BAA8Bh/F,W,kCAExBw7B,GACRA,EACF57B,KAAKy4B,SAASsC,UAAUtrB,IAAI,WAG5BzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,WAChC5P,KAAKq/F,SAAWzjE,I,2DAEoBmkE,GACpC//F,KAAKggG,8BAA8BlmE,MAAM7C,KAAzC,UAAiD8oE,EAAjD,O,0DAEmCE,GACnCjgG,KAAKggG,8BAA8BlmE,MAAMhD,IAAzC,UAAgDmpE,EAAhD,O,wDAEiCrkE,GAC9BA,EACF57B,KAAKggG,8BAA8BjlE,UAAUtrB,IAAI,WAEjDzP,KAAKggG,8BAA8BjlE,UAAUnrB,OAAO,a,gDASrD5P,KAAK06B,S,+BAGL,IAAMwlE,EAAkBlgG,KAAKiH,wBAC1B,qBAAKsgB,UAAU,+BAA+BsS,IAAK75B,KAAK0+F,0BAAxD,SACD,qBAAKl0E,IAAMte,EAAKQ,OAAO,4CAGvB1M,KAAKyS,eAAe1M,yBAGnB,qBAAKwhB,UAAU,+BAA+BsS,IAAK75B,KAAK0+F,0BAAxD,SACA,qBAAKl0E,IAAMte,EAAKQ,OAAO,qBAGvB,qBAAK6a,UAAU,0BAA0BsS,IAAK75B,KAAK0+F,0BAAnD,SACA,qBAAKn3E,UAAU,YAGlB,OAAQ,sBAAKA,UAAU,WAAWsS,IAAK75B,KAAKy8B,YAApC,UACP,qBAAKlV,UAAU,YAAYsS,IAAK75B,KAAKy+F,eACpC,cAAC,GAAD,CAAYl3E,UAAU,eAAe+U,OAASpwB,EAAKQ,OAAO,2BAA6BirB,QAAS33B,KAAK+9B,0BACnGmiE,O,+BA5BJ,OAAOlgG,KAAKy8B,YAAYvD,U,oDAGxB,OAAOl5B,KAAK0+F,0BAA0BxlE,Y,GAtIH18B,aCRhB2jG,I,OADmB/iG,EAAlCyC,iBAAkCzC,EAAhB0C,e,kDAEvB,WAAYqB,GAAO,IAAD,sBACjB,cAAMA,GACI,eAAV,IACOi2F,EAAgFj2F,EAAhFi2F,gBAAgFj2F,EAA/Dk2F,SAA+Dl2F,EAArDm2F,eAAqDn2F,EAArCo2F,2BAAqCp2F,EAATw2B,QAC9E,EAAKyoE,QAAU,EAAKA,QAAQjgG,KAAb,gBACf,EAAKq8B,eAAgB,EAAK4jE,QAC1B,IAAMC,EAAsBx2E,SAASC,cAAc,OANlC,OAOjBu2E,EAAoBtlE,UAAUtrB,IAAI,iBAClC4wF,EAAoBC,YAAclJ,EAAgB94F,KAClD,EAAKm4B,QAAQwE,YAAYolE,GATR,E,wFAaJl/F,GACb,OAAO,SAACA,GAAD,OAAS,IAAIg/F,EAAYh/F,Q,GAfOg2F,KCCpBoJ,IADuBnjG,EAApCyC,iBAAoCzC,EAAlB0C,e,kDAEzB,WAAYqB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEXqU,EAAkCrU,EAAlCqU,QAASmvB,EAAyBxjC,EAAzBwjC,cAAeqH,EAAU7qC,EAAV6qC,SAFb,OAGjB,EAAKoM,UAAYpM,EAEhB,EAAKpH,oBADa/mC,IAAhB8mC,GAA2C,OAAhBA,GAGPA,EAEvB,EAAK1vB,SAAWO,EAChB,EAAKgrF,gBAAkB,EAAKA,gBAAgBrgG,KAArB,gBACvBqV,EAAQ/H,iBAAiB,SAAU,EAAK+yF,iBACxC,EAAK1nE,MAAM,CAAC8C,SAAQ,GAZH,E,4DAcFrsB,GACf,IAAMqsB,EAAU57B,KAAK4kC,gBAAiBr1B,EAAEkG,WAAYlG,EAAEkG,WACtDzV,KAAKs5B,SAAS,CAACsC,QAAQA,M,+BAGvB,IAAIrU,EAAW,QAGf,OAFGvnB,KAAK84B,MAAM8C,UACbrU,GAAW,YACJ,qBAAKA,UAAWA,EAAhB,SACNvnB,KAAKo4C,gB,GAxB0B57C,cCe7BqD,GAAkBzC,EAAlByC,iBACAqzB,GAAiB,EAARC,KAAKC,GACCqtE,G,kDACpB,WAAYt/F,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVk1F,EACoDl1F,EADpDk1F,4BAA6BC,EACuBn1F,EADvBm1F,iCAAkCoK,EACXv/F,EADWu/F,OAAQC,EACnBx/F,EADmBw/F,iBAC7EC,EAA0Dz/F,EAA1Dy/F,aAActwD,EAA4CnvC,EAA5CmvC,4BAA6B/tC,EAAepB,EAAfoB,cAH3B,OAIjB,EAAKkQ,eAAiBlQ,EAClB8zF,GAA4Bx2F,GAAiB,+BAC7Cy2F,GAAiCz2F,GAAiB,oCACtD,EAAKmyC,cAAgB4uD,EACrB,EAAKlwD,6BAA+BJ,EACpC,EAAKuwD,YAAcnoE,IAAMC,YACzB,EAAKmoE,YAAapoE,IAAMC,YAExB,EAAKG,MAAQ,CAAC8C,SAAQ,GACtB,EAAKmlE,iBAAkB,EAAKA,iBAAiB5gG,KAAtB,gBACvB,EAAK6gG,kBAAmB,EAAKA,kBAAkB7gG,KAAvB,gBACxB,EAAK8gG,cAAgBP,EACrB,EAAKQ,0BAA4BP,EACjC,EAAKnH,4BAA8B,EAAKA,4BAA4Br5F,KAAjC,gBACnC,EAAKghG,oBAAqB,EAAKA,oBAAoBhhG,KAAzB,gBAC1B,EAAKihG,qBAAsB,EAAKA,qBAAqBjhG,KAA1B,gBAC3B,EAAKg7B,WAAY,EAAKA,WAAWh7B,KAAhB,gBACjB,EAAKkhG,+BAAiC,EAAKA,+BAA+BlhG,KAApC,gBACtC,EAAKmhG,WAAa,EAAKA,WAAWnhG,KAAhB,gBAClB,EAAKohG,YAAc,EAAKA,YAAYphG,KAAjB,gBACnB,EAAK0kC,gBAAkB,IAAI7vB,GAC3B,EAAKwsF,0CAA4C,EAAKA,0CAA0CrhG,KAA/C,gBACjD,EAAKo2F,6BAA+BF,EACpC,EAAKoL,kCAAoCnL,EACzC,EAAKoL,wBAA0B,IAAI3hG,EACnC,EAAK62F,+BAAiC,KACtC,EAAK+K,oCAAsC,KAC3C,EAAKpI,yBAAL,eAAgC9yE,GAAYG,KAAMu5E,GAAY90B,QA/B7C,E,iDAiCbp7C,GAAU,IAAD,OAGb,OAFAjwB,KAAK43B,UAAY3H,EACjBjwB,KAAK4hG,SAAU,EACR,IAAIrkG,SAAQ,SAACO,EAASC,GAC5B,EAAK8iG,YAAY3nE,QAAQihE,UAAU,CAAC9C,SAASpnE,EAASnB,WAAW+yE,oBAAoBnjG,MAAMX,GAAQK,MAAK,WACvG,EAAK0jG,oBAAsB,EAAKN,0CAA0CvxE,GAAU9vB,KAAK,GACzF,EAAK2gG,YAAY5nE,QAAQwO,KAAK,CAC7BzX,SAASA,IAET7xB,MAAK,WACL,EAAKwjG,SAAQ,EACb,EAAKF,wBAAwBthG,YAC3B1B,OAAM,SAACC,GACT,EAAK+iG,wBAAwBrhG,QAAQ1B,GACrCZ,EAAOY,SAGTb,S,mCAGW,IAAD,OACX,OAAO,IAAIP,SAAQ,SAACO,EAASC,GACzB,EAAK6jG,QAEP9jG,IAGD,EAAK4jG,wBAAwBtjG,KAAKN,GAASY,MAAMX,Q,yCAGhCoiB,EAAoBq7E,GAA4B,IAAD,OAC3D9xD,EAAgB1pC,KAAK6kC,gBAAgB1vB,OAC3C,OAAO,IAAI5X,SAAQ,SAACO,EAASC,GAC5B,IAAM4rC,EAAW,SAAChrC,GACjB/B,QAAQC,MAAM8B,GACd+qC,EAAcl7B,UACdzQ,EAAOY,IAER,EAAK2iG,aAAaljG,MAAK,WAKlB,EAAK0jG,oBAIT,EAAKA,oBAAoB3hF,EAAoBq7E,GAC3Cp9F,MATc,WACfsrC,EAAcl7B,UACd1Q,OAOiBY,MAAMirC,GAJvBA,EAAS,IAAI3sC,MAAM,uBAKlB0B,MAAMirC,Q,gEAG+B1Z,GAAU,IAAD,OAC5C3H,EAAS2H,EAASnB,WAAWrG,eACnC,OAAO,SAAC3B,EAA4B00E,GACnC,OAAO,IAAIj+F,SAAQ,SAACO,EAASC,GAC5B,IAAM8qB,EAAQP,EAAOjmB,QAAO,SAAAwmB,GAC1B,OAAOA,EAAM5C,WAAWa,KACvB,GACH,QAAWjpB,IAARgrB,GAA2B,OAARA,EACrB,MAAM,IAAI7rB,MAAJ,kDAAqD8pB,IACxD00E,IACHA,EAA6B,EAAK6F,+BAA+Bx4E,EAAO,EAAKk5E,iBAC9E,EAAKA,eAAel5E,EACpB,EAAKi4E,YAAY5nE,QAAQ0lE,gBAAgB93E,GACzC,EAAK+5E,YAAY3nE,QAAQihE,UAAU,CAClC9C,SAASxuE,EACT2yE,2BAA2BA,IAE3Bp9F,MAAK,WACLN,OACEY,MAAMX,S,qDAImBs5F,EAAU2K,GAAkB,IAAD,OAEnDC,EAAmB5K,EAAStxE,SAC9Bm8E,EAAc,GACdC,GAA4B,EAC5BC,EAAkB,KACtB,IAAIJ,EAAiB,OAAO,KAC5B,IAAI,IAAI7+F,EAAE,EAAGA,EAAE8+F,EAAiBziG,OAAQ2D,IAAI,CAC3C,IAAMilB,EAAU65E,EAAiB9+F,GAC9BilB,EAAQ/qB,OAAOopB,GAAYC,mBAC3Bs7E,GACC55E,EAAQtB,6BAA6Bk7E,EAAiB/7E,SACxDm8E,EAAkBh6E,GAIpB+5E,GAA4B,EAC5BD,EAAY3hG,KAAK6nB,EAAQlD,sBAAsBtF,cAEhD,IAAIA,EAAY,EAChB,GAAGuiF,EAA4B,CAC9B,IAAIC,EAAgB,OAAO,KAC3BxiF,EAAYwiF,EAAgBn9E,YAAYrF,gBAGxCsiF,EAAY9yF,SAAQ,SAAAtE,GACnB,IAAMu3F,EAAa,EAAKrB,kBAAkBl2F,GAC1ClO,QAAQmC,IAAIsjG,GACZziF,GAAYyiF,KAEbziF,GAAwBsiF,EAAY1iG,OAErC,GAAG4iG,GAAiBF,EAAY1iG,OAAO,EAAE,CACxC,IAAI8iG,EAAoBtiG,KAAKghG,kBAAkB7tE,KAAKC,GAAGgvE,EAAgBn9E,YAAYrF,YAC/E2iF,EAA6C3iF,EAAY0iF,GAC7DC,EAA6CpvE,KAAKqvE,KAAKD,GAA4CA,GACrDpvE,KAAKC,GAAG,IACrDxT,GAAwBuT,KAAKC,IAE/B,OAAO,IAAIzT,GAAY,CAACC,WAAWA,EAAYC,aAAa,EAAGC,YAAY,M,wCAE1Dxd,GAEhB,IADAA,GAAc4wB,GACR5wB,EAAM,GAAEA,GAAO4wB,GACrB,OAAO5wB,I,iCAEEA,GAAO,IAAD,IAKhB,UAAAtC,KAAK42F,sCAAL,SAAqCpoF,UACrCxO,KAAK42F,+BAAiC,KACtC,UAAA52F,KAAK2hG,2CAAL,SAA0CnzF,UAC1CxO,KAAK2hG,oCAAoC,KACtCr/F,IACFtC,KAAK42F,+BAAiC52F,KAAKu2F,+BAA+BpwC,kBAAkB,CACzF,cAAC,GAAD,CAAY5+B,UAAU,4BAA4B+U,OAASpwB,EAAKQ,OAAO,2BAA4BirB,QAAS33B,KAAK+gG,kBAAuBroF,GAAWC,UAGtJ3Y,KAAK2hG,oCAAsC3hG,KAAKyhG,oCAAoCt7C,kBAAkB,CACnG,cAAC,GAAD,CAAY5+B,UAAU,oCAAoC+U,OAASpwB,EAAKQ,OAAO,kCAAmCirB,QAAS33B,KAAKohG,qBAA8CqB,OAAO,GAA1B/pF,GAAWC,WAI1K3Y,KAAKs5B,SAAS,CAACsC,QAAQt5B,M,0CAGjBtC,KAAK6gG,YAAY3nE,QAAQzrB,iBAAiB,aAAczN,KAAKuhG,e,kCAExDhyF,GACXvP,KAAK8gG,YAAY5nE,QAAQ8lE,gBAAgBzvF,EAAE+oF,O,yCAG3Ct4F,KAAKihG,kB,6CAGWjhG,KAAK8gG,YAAY5nE,QACzBylE,kB,kDAEmBhyF,GAC3B,OAAOT,EAAKQ,OAAOC,I,0CAEAyb,GAAS,IACrBgvE,EAAiBhvE,EAAjBgvE,gBACP,OAAOA,EAAgB/5F,MACtB,KAAKopB,GAAYC,iBAChB1mB,KAAK8hG,oBAAoB1K,EAAgBtwE,4BAA4B1oB,MAAK,eAAQM,MAAM9B,QAAQC,OAChG,MACD,KAAK4pB,GAAYE,yBAChB,IAAMpkB,EAAgBvC,KAAKyS,eAC3B,GAAGlQ,EAAcyD,2CAA2C,CAC3D,IAAM0pB,EAAmB1vB,KAAK43B,UAAUzV,gBAAgBi1E,EAAgBnwE,YACxE,OAAG1kB,EAAcmD,gEAChB1F,KAAK0wC,6BAA6BhhB,QAGnC1vB,KAAKgyC,cAActiB,GAAkB,EAAOtH,EAAQs6E,gBAIrD,YADA1iG,KAAKkhG,0BAA0B9J,EAAgBnwE,YAEhD,QACC,MAAM,IAAIjqB,MAAM,4BAA4Bo6F,EAAgB/5F,S,+BAO9D,IAAMkqB,EAAY,kBAAkBvnB,KAAK84B,MAAM8C,QAAQ,UAAU,IACnC57B,KAAK84B,MAAM6pE,kBAC1C,OAAQ,sBAAKp7E,UAAWA,EAAhB,UACP,cAAC,GAAD,CAASsS,IAAK75B,KAAK6gG,YAAatJ,2BAA4Bv3F,KAAKw5F,4BAA6BH,eAAgBr5F,KAAKmhG,oBACnH7H,wBAAyBt5F,KAAKu5F,yBAD9B,SAEC,cAAC,GAAD,CAAS1/D,IAAK75B,KAAK8gG,YAAav+F,cAAevC,KAAKyS,mBAErD,cAAC,GAAD,CAAO+C,QAASxV,KAAK6kC,gBAArB,SACE,cAAC,GAAD,CAASH,eAAgB1kC,KAAK6kC,2B,GAnOOroC,aCfnCqD,I,OAAkBzC,EAAlByC,kBACeuwB,G,kDACpB,WAAYjvB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEXu5B,EAAkDv5B,EAAlDu5B,KAAM27D,EAA4Cl1F,EAA5Ck1F,4BAA6B9zF,EAAepB,EAAfoB,cAFxB,OAGjB,EAAKkQ,eAAiBlQ,EAClB8zF,GAA4Bx2F,GAAiB,+BACjD,EAAK62C,cAAgBhc,EACrB,EAAKkoE,wBAA0B,EAAKA,wBAAwBziG,KAA7B,gBAC/B,EAAK0iG,yBAA2B,EAAKA,yBAAyB1iG,KAA9B,gBAChC,EAAKm4C,uBAAyB,EAAKA,uBAAuBn4C,KAA5B,gBAC9B,EAAK2iG,cAAe,EAAKA,cAAc3iG,KAAnB,gBACpB,EAAK4iG,eAAiB,EAAKA,eAAe5iG,KAApB,gBACtB,EAAKo2F,6BAA+BF,EACpC,EAAKv9D,MAAQ,CAACkqE,QAAQ,KAAMpnE,SAAQ,GACpC,EAAKqnE,aAAc,EAbF,E,oGAkBP3gG,GAAO,IAAD,EAChB,UAAAtC,KAAK42F,sCAAL,SAAqCpoF,UACrCxO,KAAK42F,+BAAiC,KACnCt0F,IACFtC,KAAK42F,+BAAiC52F,KAAKu2F,+BAA+BpwC,kBAAkB,CACzF,cAAC,GAAD,CAAY5+B,UAAU,2BAA2B+U,OAASpwB,EAAKQ,OAAO,2BAA4BirB,QAAS33B,KAAKs4C,wBAA6B5/B,GAAWC,WAI5J3Y,KAAKs5B,SAAS,CAACsC,QAAQt5B,M,8CAEA46B,GACvBl9B,KAAK6iG,2BAD0B,IAExBh2F,EAAgBqwB,EAAhBrwB,KAAMq2F,EAAUhmE,EAAVgmE,SACPC,EAAUD,EAAS,IAAD,OAAKA,GAAW,GACpCtlG,EAAMsO,EAAKmb,0BAA0Bxa,EAAM7M,KAAKyS,gBACjD0wF,GAASvlG,IACXA,GAAKulG,GAEN,IAAMC,EACL,qBAAK77E,UAAU,iBAAf,SACC,wBAAQiD,IAAK5sB,EAAK2pB,UAAU,sBAAkDuS,MAAO,CAACnjB,OAAO,QAASm1B,OAAQ9rC,KAAK8iG,eAA5D9iG,KAAK+iG,oBAE9D/iG,KAAKs5B,SAAS,CAAC0pE,QAAQ,CAACI,O,+CAGxBpjG,KAAK6iG,2BACL7iG,KAAK02C,kB,oCAEQnnC,M,iDAGbvP,KAAKs5B,SAAS,CAAC0pE,QAAQ,O,uCAGvB,MAAM,UAAN,OAAkBhjG,KAAKijG,kB,+BAGvB,IAAM17E,EAAU,gBAAgBvnB,KAAK84B,MAAM8C,QAAQ,WAAW,IAC9D,OAAQ,qBAAKrU,UAAWA,EAAhB,SAA4BvnB,KAAK84B,MAAMkqE,c,GA1DPxmG,aCPpC6mG,GAAoB,CAACC,eAAe,eAAgBC,YAAY,aAAcC,aAAa,eAAgBC,QAAQ,SACzHJ,gBAAsC,SAASxF,GAC9C,OAAOA,GACN,KAAKwF,GAAoBC,eACxB,MAAO,yBACR,KAAKD,GAAoBE,YACxB,MAAO,sBACR,KAAKF,GAAoBG,aACxB,MAAO,uBACR,KAAKH,GAAoBI,QACxB,MAAO,kBAET,MAAO,KAEOJ,MCMRxjG,I,OAAkBzC,EAAlByC,kBAIc6jG,G,kDACpB,WAAYviG,GAAO,IAAD,sBACjB,cAAMA,GACNmY,GAAsB,gBAFL,IAGVw2B,EAE8B3uC,EAF9B2uC,wBAAyB+qB,EAEK15D,EAFL05D,OAAQ7qB,EAEH7uC,EAFG6uC,aAAcC,EAEjB9uC,EAFiB8uC,gBACtD4wB,EACqC1/D,EADrC0/D,eAAgB1wB,EACqBhvC,EADrBgvC,WAAYC,EACSjvC,EADTivC,6BAA8BE,EACrBnvC,EADqBmvC,4BAC1D4pC,EAAqC/4E,EAArC+4E,qBAAsB33E,EAAepB,EAAfoB,cALL,OAMjB,EAAKkQ,eAAiBlQ,EACtB,EAAKmuC,6BAAgCJ,EACrC,EAAK6pC,sBAAwBD,EAC7B,EAAKpZ,MAAQpoC,IAAMC,YACnB,EAAKkvB,QAASnvB,IAAMC,YACpB,EAAKgrE,QAASjrE,IAAMC,YACpB,EAAKmiC,gBAAgBD,EACjB/qB,GAAwBjwC,GAAiB,2BAC7C,EAAK8wC,iCAAmCb,EACxC,EAAKc,sBAAwBZ,EAC7B,EAAKa,yBAA2BZ,EAChC,EAAK8wB,wBAA0BF,EAC/B,EAAK9vB,oBAAsBZ,EAC3B,EAAKa,sCAAwCZ,EAC7C,EAAKwzD,WAAalrE,IAAMC,YACxB,EAAKkrE,iBAAkB,EAAKA,iBAAiB1jG,KAAtB,gBACvB,EAAK2jG,mCAAoC,EAAKA,mCAAmC3jG,KAAxC,gBACzC,EAAK4jG,qBAAsB,EAAKA,qBAAqB5jG,KAA1B,gBAC3B,EAAK6gE,2BAA6B,EAAKA,2BAA2B7gE,KAAhC,gBAClC,EAAK8gE,2BAA6B,EAAKA,2BAA2B9gE,KAAhC,gBAClC,EAAK6jG,yBAA2B,EAAKA,yBAAyB7jG,KAA9B,gBAChC,EAAK8jG,qBAAuB,EAAKA,qBAAqB9jG,KAA1B,gBAC5B,EAAKqmC,mBAAoB,EAAKA,mBAAmBrmC,KAAxB,gBACzB,EAAKsmC,kBAAmB,EAAKA,kBAAkBtmC,KAAvB,gBACxB,EAAK+jG,qBAAuB,EAAKA,qBAAqB/jG,KAA1B,gBAC5B,EAAKgkG,wBAAyB,EAAKA,wBAAwBhkG,KAA7B,gBAC9B,EAAKikG,0BAA2B,EAAKA,0BAA0BjkG,KAA/B,gBAChC,EAAKkkG,+CAAgD,EAAKA,+CAA+ClkG,KAApD,gBACrD,EAAKmkG,gBAAiB,EAAKA,gBAAgBnkG,KAArB,gBACtB,EAAKokG,WAAY,EAAKA,WAAWpkG,KAAhB,gBACjB,EAAKs3E,uBAAwB,EAAKA,uBAAuBt3E,KAA5B,gBAC7B,EAAKs6B,KAAO,EAAKA,KAAKt6B,KAAV,gBACZ,EAAKu6B,KAAO,EAAKA,KAAKv6B,KAAV,gBACZ,EAAK6iE,yBAA0B,EAAKA,yBAAyB7iE,KAA9B,gBAC/B,EAAKghE,2BAA6B,EAAKA,2BAA2BhhE,KAAhC,gBAClC,EAAKq3E,yBAA2B,EAAKA,yBAAyBr3E,KAA9B,gBAChC,EAAKqkG,4BAA8B,IAAIzkG,EACvC,EAAKm3C,aAAe,IAAIpY,IAAK,SAAA7gC,GAAM,OAAEA,OACrC,EAAKklE,yBAA2B,KAChC,EAAKshC,eAAiB,EACtB,EAAKC,qBAAuB,IAAI1vF,GAChC,EAAK8jB,MAAM,CAAC7I,SAAS,KAAMpjB,KAAK,MA/Cf,E,oDAiD4D,IAAD,OAAvErB,EAAuE,EAAvEA,SAAU2oC,EAA6D,EAA7DA,uBAAwBlkB,EAAqC,EAArCA,SAAUpjB,EAA2B,EAA3BA,KAAYgvD,GAAe,EAArB95C,KAAqB,EAAf85C,eAC7D,OAAO,IAAIt+D,SAAQ,SAACO,EAASC,GAAU,IAAD,IACjC8O,GAAKhN,GAAiB,QACvBgN,EAAKkV,KAAKlB,MAAMrhB,OAAO,IACzBqN,EAAO,EAAKi3F,mCAAmCj3F,EAAKkV,KAAKlB,QAEtDoP,GAASpwB,GAAiB,YAC9B,YAAK8kG,kCAAL,SAAiCn2F,UACjC,EAAK8qB,SAAS,CAACrJ,SAASA,EAAUpjB,KAAKA,IACvC,EAAKg7C,QAAQ3uB,QAAQ1O,IAAI,GACzB,EAAKq9B,QAAQ3uB,QAAQ1O,IAAM,EAAK+5E,WAAW13F,GAC3C,EAAKw2D,MAAQx2D,EACb,EAAK+2F,WAAW1qE,QAAQuB,KAAK,CAACjvB,SAASA,EAAU2oC,uBAAuBA,EAAwB0nB,kBAChG,EAAKmH,2BACL,YAAKG,gCAAL,SAA+B30D,UAC/B,EAAK20D,yBAAyBt2D,EAAKkV,KAAKyX,mBACxC,EAAKirE,gBAAiB,IAAInzC,MAAOC,UACjC,IAAIqzC,GAAY,EACVC,EAAgB,WAAK,IAAD,EACzBD,GAAY,EACZ,YAAKD,kCAAL,SAAiCn2F,WAElC+G,YAAW,WAAK,IAAD,EACXqvF,IACH,YAAKD,kCAAL,SAAiCn2F,UACjC,EAAKm2F,2BAA6B,EAAKD,qBAAqBvvF,UA5EjB,KA8E5C,EAAKqvF,4BAA4BpmG,MAAK,WACrCymG,IACA/mG,OACEY,OAAM,SAACC,GACTkmG,IACA9mG,EAAOY,W,6BAKTqB,KAAK4jG,WAAW1qE,QAAQwB,S,uCAERp4B,GAChBtC,KAAK8kG,eAAiBxiG,I,yDAEYue,GAClC,IAAI7gB,KAAK8kG,eAAe,OAAOjkF,EAAM,GACrC,IAFwC,EAElCkkF,EAA6B,GAFK,cAGxBlkF,GAHwB,IAGxC,IAAI,EAAJ,qBAAsB,CAAC,IAAfhU,EAAc,QAClB7M,KAAK8kG,eAAehiG,QAAQ+J,IAAO,GACrCk4F,EAA2BxkG,KAAKsM,IALM,8BAOxC,GAAGk4F,EAA2BvlG,OAAO,EACrC,CACC,IAAMk6B,EAAiBqrE,EAA2B1iG,QAAO,SAAAwK,GAAI,OAAEA,EAAKuR,SAASvc,EAAWC,aACxF,GAAG43B,EAAel6B,OAAO,EACxB,OAAOk6B,EAAe,GACvB,IAAMC,EAAkBorE,EAA2B1iG,QAAO,SAAAwK,GAAI,OAAEA,EAAKuR,SAASvc,EAAWE,eACzF,GAAG43B,EAAgBn6B,OAAO,EACzB,OAAOm6B,EAAgB,GAEzB,OAAO9Y,EAAM,K,iCAEHhU,GACV,IAAML,EAAeK,EAAKkV,KAAK7D,eAAe7G,uBAAuB,KAAK7K,aAC1E,MAAM,GAAN,OAAUN,EAAKe,iBAAiBjN,KAAKyS,eAAe5N,WAApD,OAAgE7F,EAAUuU,iBAAiB/G,M,6CAErE,IAAD,EAErB,UAAAxM,KAAK2kG,kCAAL,SAAiCn2F,UACjCxO,KAAK86D,iBAAiB96D,KAAK86D,kBAC3B96D,KAAKgjE,6B,2CAEezzD,GACpBvP,KAAKo8C,sBAAsB7sC,GAC3BvP,KAAK2wC,iCAAiC3wC,KAAK84B,MAAMjsB,Q,iDAEvBwR,GAC1Bre,KAAKo8C,wBACF/9B,EAASre,KAAK4wC,sBAAsB5wC,KAAK84B,MAAMjsB,MAC7C7M,KAAK6wC,yBAAyB7wC,KAAK84B,MAAMjsB,Q,iDAEpBvK,GACvBtC,KAAK8gE,MAAM5nC,UACbl5B,KAAK8gE,MAAM5nC,QAAQ7a,SAAS/b,K,2CAG7BtC,KAAKglG,aAAc,GACqB,IAAI1zC,MAAOC,UAAUvxD,KAAKykG,eAElEzkG,KAAKwkG,4BAA4BpkG,W,wCAYhBmP,GACjBvP,KAAKwkG,4BAA4BnkG,QAAQkP,K,iDAEfA,GAC1BvP,KAAKo8C,sBAAsB7sC,GAC3BvP,KAAK06B,OACL16B,KAAK+gE,wBAAwB,CAACkB,SAASjiE,KAAK84B,MAAMjsB,S,8CAE3B0C,GAAG,IAAD,OACzBvP,KAAKk3C,aAAaxoB,SAAQ,WACzB,EAAK0tB,sBAAsB7sC,GAC3B,EAAKmrB,OACL,EAAKiW,iCAAiC,EAAK7X,MAAMjsB,KAAMupB,GAAwBE,c,kDAGrD,IAAD,OAC1Bt2B,KAAKk3C,aAAaxoB,SAAQ,WACzB,EAAKgM,OACL,EAAKiW,iCAAiC,EAAK7X,MAAMjsB,KAAMupB,GAAwBG,kB,6CAG1DhnB,GACtBvP,KAAKo8C,sBAAsB7sC,GAC3BvP,KAAK06B,OACL16B,KAAK+wC,oBAAoB/wC,KAAK84B,MAAMjsB,Q,+CAEZ0C,GACxBvP,KAAKo8C,sBAAsB7sC,GAC3BvP,KAAK06B,OACL16B,KAAKgxC,sCAAsC,CAACnkC,KAAK7M,KAAKqjE,U,+CAE9B9zD,GACxBvP,KAAKo8C,wBACL,IAAM6oD,EAAcjlG,KAAK84B,MAAMjsB,KACzBkV,EAAOkjF,EAAYljF,KACzB,GAAIA,EAAJ,CACA,IAAMlB,EAAQkB,EAAKlB,MACfqkF,EAAYrkF,EAAM/d,QAAQmiG,GAAa,EACxCC,EAAU,IACZA,EAAUrkF,EAAMrhB,OAAO,GACxBQ,KAAKqjE,MAAMxiD,EAAMqkF,GACjBllG,KAAKs5B,SAAS,CAACzsB,KAAK7M,KAAKqjE,W,2CAEL9zD,GACpBvP,KAAKo8C,wBACL,IAAM6oD,EAAcjlG,KAAK84B,MAAMjsB,KACzBkV,EAAOkjF,EAAYljF,KACzB,GAAIA,EAAJ,CACA,IAAMlB,EAAQkB,EAAKlB,MACfqkF,EAAYrkF,EAAM/d,QAAQmiG,GAAa,EACxCC,GAAWrkF,EAAMrhB,SACnB0lG,EAAU,GACXllG,KAAKqjE,MAAMxiD,EAAMqkF,GACjBllG,KAAKs5B,SAAS,CAACzsB,KAAK7M,KAAKqjE,W,qEAEqB9zD,GAAG,IAAD,OAChDvP,KAAKk3C,aAAaxoB,SAAQ,WACrB,EAAKjc,eAAejM,6CACxB,EAAK41C,wBACL,EAAK1hB,OACL,EAAKgW,6BAA6B,EAAK2yB,a,wCAIxC,IAAMx2D,EAAO7M,KAAK84B,MAAMjsB,KACpBs4F,EAAgB,GACpBnlG,KAAKo8C,wBACL,IAAMl+B,EAAiBrR,EAAKkV,KAAK7D,eAC9BA,GACFinF,EAAc5kG,KAAK2d,GAEpB,IAAM4C,EAAkBjU,EAAKkV,KAAKjB,gBAC/BA,GACFqkF,EAAc5kG,KAAKugB,GACpBjU,EAAKwL,MAAMmH,WAAWpQ,SAAQ,SAAC+I,GAC9BgtF,EAAgBA,EAAcp7F,OAAOoO,EAAKP,WAE3C5X,KAAKm6E,sBAAsBgrB,K,4CAEN51F,GACjBA,IAAEA,EAAErQ,OAAOgP,OACfqB,EAAE4vB,iBAAiB5vB,EAAE4vB,kBACrB5vB,EAAE6vB,gBAAgB7vB,EAAE6vB,mB,iDAGhBp/B,KAAKmjE,2BACTnjE,KAAKmjE,yBAAyB30D,UAC9BxO,KAAKmjE,yBAAyB,Q,yCAEZtmC,EAAe4kC,GACjBA,EAAc50D,KAA9B,IACM80D,EAAU3hE,KAAK84B,MAAMjsB,KAC3B7M,KAAKuZ,WAAWL,QACbyoD,GACF9mD,GAAuBmC,SAAShd,KAAM2hE,EAAS,WAAY3hE,KAAKihE,8B,+BAGzD,IAAD,UAMH,EALEmX,EAAsB,UAACp4E,KAAK84B,MAAMjsB,YAAZ,aAAC,EAAiBurE,uBACxCQ,EAAkB54E,KAAKyS,eAAenN,eAApB,yBAA2CtF,KAAK84B,MAAMjsB,YAAtD,aAA2C,EAAiBsF,WAA5D,cAAmF,GACrGsrB,EAAU,GACbz9B,KAAKyS,eAAe2yF,oBACtB3nE,EAAQl9B,KAAM,wBAAgCgnB,UAAU,mBAAmBoQ,QAAS33B,KAAK+jG,qBAA3E,6BAAarrF,GAAWC,UAEV3Y,KAAK84B,MAAMjsB,MAAMX,EAAKmb,0BAA0BrnB,KAAK84B,MAAMjsB,KAAM7M,KAAKyS,iBAEjGgrB,EAAQl9B,KAAM,wBAAgCgnB,UAAU,qBAAqBoQ,QAAS33B,KAAKy3E,uBAA7E,uBAAa/+D,GAAWC,SACvC8kB,EAAQl9B,KAAM,wBAAgCgnB,UAAU,uBAAuBoQ,QAAS33B,KAAKw3E,yBAA/E,0BAAa9+D,GAAWC,UACnC,UAAA3Y,KAAK84B,MAAMjsB,YAAX,eAAiBkV,KAAKlB,MAAMrhB,QAAO,IACrCi+B,EAAQl9B,KAAM,wBAAgCgnB,UAAU,uBAAuBoQ,QAAS33B,KAAKgkG,yBAA/E,0BAAatrF,GAAWC,SACtC8kB,EAAQl9B,KAAM,wBAAgCgnB,UAAU,mBAAmBoQ,QAAS33B,KAAKikG,qBAA3E,sBAAavrF,GAAWC,WAGxC,IAAM+/D,EAAa14E,KAAK84B,MAAMjsB,OAAS7M,KAAK84B,MAAMjsB,KAAKs1D,SAAWniE,KAAK84B,MAAMjsB,KAAK8rE,WAC9E0sB,EAAkB,UACnBrlG,KAAK84B,MAAMjsB,OACbw4F,GAAiBxjG,EAAWyB,WAAWtD,KAAK84B,MAAMjsB,KAAKuR,SACxD,IAAMlM,EAAYlS,KAAKyS,eAAenM,cAAc,KACnD,sBAAKihB,UAAU,aAAf,oBAA6BvnB,KAAK84B,MAAMjsB,YAAxC,aAA6B,EAAiBqF,UAA9C,aAAmE0mE,KACpE,OAAQ,eAAC,GAAD,CAAWrxD,UAAU,YAAYqzC,aAAcV,GAAaM,cAAe3gC,IAAM75B,KAAK4jG,WAAY/oC,OAAQ76D,KAAKkkG,qBAA/G,UACT,sBAAK38E,UAAU,kBAAf,UACA,sBAAKA,UAAU,QAAf,UACC,sBAAKA,UAAU,MAAMsS,IAAK75B,KAAK2jG,QAAShsE,QAAS33B,KAAKskG,gBAAtD,UACC,qBAAKzqE,IAAK75B,KAAK6nD,QAAQ/b,OAAQ9rC,KAAKwmC,mBAAoBuF,QAAS/rC,KAAKymC,oBACtE,cAAC,GAAD,CAAS/B,eAAiB1kC,KAAK0kG,qBAAsB//D,eAAe,OAErE,sBAAKpd,UAAU,MAAMoQ,QAAS33B,KAAKqkG,+CAAnC,UACC,qBAAK98E,UAAU,OAAf,mBAAuBvnB,KAAK84B,MAAMjsB,YAAlC,aAAuB,EAAiB/P,OACxC,sBAAKyqB,UAAU,OAAf,6BAA6BvnB,KAAK84B,MAAMjsB,YAAxC,aAA6B,EAAiBrC,UAC9C,sBAAK+c,UAAW89E,EAAhB,cAAmCrlG,KAAK84B,MAAMjsB,KAAKhL,EAAWu0C,eAAep2C,KAAK84B,MAAMjsB,KAAKuR,QAAQ,YACrG,sBAAKmJ,UAAU,QAAf,eAA2BmxD,GAAa14E,KAAK84B,MAAMjsB,KAAKsR,OAAO,EAAG,IAAIne,KAAK84B,MAAMjsB,KAAKy1D,eACpFpwD,EACF,sBAAKqV,UAAU,gBAAf,UACC,cAAC,GAAD,CAAM+9B,iBAAkBtlD,KAAKghE,2BAA4BnnC,IAAK75B,KAAK8gE,MAAOtlB,sBAAsB,IAChG,cAAC,GAAD,CAAYj0B,UAAU,sCAAsC+U,OAAQpwB,EAAKQ,OAAO,+BAAgCirB,QAAS33B,KAAKmhE,6BAC9H,cAAC,GAAD,CAAY55C,UAAU,kCAAkC+U,OAAQ87C,EAAwBlsE,EAAKQ,OAAO,8BAAgCR,EAAKQ,OAAO,uCAChJirB,QAASygD,EAAuBp4E,KAAKmkG,wBAAwB,eAC7D,cAAC,GAAD,CAAY58E,UAAU,qCAAqC+U,OAAQpwB,EAAKQ,OAAO,gCAAiCirB,QAAS33B,KAAKokG,qCAIhI,qBAAK78E,UAAU,UAAf,SACEkW,OAGH,qBAAKlW,UAAU,8B,GAtSsB/qB,aCxBhC8oG,GAAa,CACfC,mBAAmB,EACnBhkB,WAAW,EACXikB,wBAAwB,EACxBp1E,aAAa,EAEjBk1E,UAAyB,SAASlhC,GACjC,OAAOA,GACN,KAAKkhC,GAAaC,mBACjB,MAAO,YACR,KAAKD,GAAa/jB,WACjB,MAAO,aACR,KAAK+jB,GAAaE,wBACjB,MAAO,kBACR,KAAKF,GAAal1E,aACjB,MAAO,eACR,QACC,MAAM,IAAIpzB,MAAM,sBAGJsoG,MCZRzlG,GAAkBzC,EAAlByC,iBACc4lG,G,WACpB,WAAYluF,GAAQ,wBACXqwD,EAAyBrwD,EAAzBqwD,uBACRtuD,GAAsBtZ,MAClB4nE,GAAuB/nE,GAAiB,0BAC5CG,KAAK0lG,wBAA0B99B,EAC/B5nE,KAAKwO,QAAUxO,KAAKwO,QAAQrO,KAAKH,MACjCA,KAAKkjF,QAAUljF,KAAKkjF,QAAQ/iF,KAAKH,MACjCA,KAAK2lG,uBAAyB,IAAIv3E,GAAsB,CAACC,MAAM,IAAKC,SAAStuB,KAAKkjF,UAClFljF,KAAK4lG,+BAAiC5lG,KAAK4lG,+BAA+BzlG,KAAKH,MAC/EA,KAAK6lG,oBAAsB7lG,KAAK6lG,oBAAoB1lG,KAAKH,MACzDA,KAAK8lG,2BAA6B9lG,KAAK8lG,2BAA2B3lG,KAAKH,MACvEA,KAAK+lG,6BAA+B/lG,KAAK+lG,6BAA6B5lG,KAAKH,MAC3EA,KAAKgmG,oCAAsC,KAC3ChmG,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,wBAC5BzP,KAAKimG,iBAAmBp8E,SAASC,cAAc,OAC/C9pB,KAAKimG,iBAAiBlrE,UAAUtrB,IAAI,YACpCzP,KAAKy4B,SAASwC,YAAYj7B,KAAKimG,kBAC/BjmG,KAAK6qD,cAAgBhhC,SAASC,cAAc,OAC5C9pB,KAAK6qD,cAAc9vB,UAAUtrB,IAAI,SACjCzP,KAAKy4B,SAASwC,YAAYj7B,KAAK6qD,eAC/B7qD,KAAK+qD,aAAelhC,SAASC,cAAc,OAC3C9pB,KAAK+qD,aAAahwB,UAAUtrB,IAAI,QAChCzP,KAAK6qD,cAAc5vB,YAAYj7B,KAAK+qD,cACpC/qD,KAAKk4B,aAAcl4B,KAAKk4B,aAAa/3B,KAAKH,MAC1CA,KAAKy4B,SAAShrB,iBAAiB,QAASzN,KAAKk4B,cAC7Cl4B,KAAKkmG,+BAAiC,IAAIr5D,GAAM,CAACve,SAAStuB,KAAK+lG,6BAA8B13E,MAAM,IAAKye,QAAQ,IAChH9sC,KAAKkmG,+BAA+B74D,QACpCrtC,KAAKmmG,uCAAyCtrF,GAAuBmC,SACpEhd,KAAM4nE,EAAwB,yBAA0B5nE,KAAK4lG,gCAE9D5lG,KAAKomG,4BAA6BvrF,GAAuBmC,SACxDhd,KAAM4nE,EAAwB,cAAe5nE,KAAK6lG,qBAEnD7lG,KAAKqmG,mCAAqCxrF,GAAuBmC,SAChEhd,KAAM4nE,EAAwB,qBAAsB5nE,KAAK8lG,4B,6EAS1D9lG,KAAKsmG,8BAA8B,IAAIh1C,MAAOC,UAC9CvxD,KAAK2lG,uBAAuBj3E,UACzB1uB,KAAK0lG,wBAAwB3hC,yBAAyBJ,GAAuBG,WAC/E9jE,KAAKkmG,+BAA+B94D,S,4CAGrCptC,KAAK2lG,uBAAuBj3E,Y,mDAG5B1uB,KAAK2lG,uBAAuBj3E,Y,gCAG5B1uB,KAAKumG,8CACLvmG,KAAK+lG,+BACL,IAAMznG,EAAO0B,KAAKwmG,WAClBxmG,KAAK+qD,aAAapvB,UAAYr9B,I,oEAG3B0B,KAAKgmG,qCACPhmG,KAAKy4B,SAASsC,UAAUnrB,OAAO5P,KAAKgmG,qCACrC,IAAMz+E,EAAYo8C,GAAuB8iC,aAAazmG,KAAK0lG,wBAAwB3hC,wBACnF/jE,KAAKgmG,oCAAsCz+E,EAC3CvnB,KAAKy4B,SAASsC,UAAUtrB,IAAI8X,K,qDAG5B,IAAIm/E,EAAgB,EACdC,GAAiC,IAAIr1C,MAAOC,UAAYvxD,KAAKsmG,6BAC7DM,EAA0B,EAAEzzE,KAAKuY,IAAI,GAAIi7D,EAA+B,KAC9E,OAAO3mG,KAAK0lG,wBAAwB3hC,wBACnC,KAAKJ,GAAuBC,OAC3B8iC,EAAgB,GAAI,GAAGE,EACvB,MACD,KAAKjjC,GAAuBE,WACD7jE,KAAK0lG,wBAAwB7gC,mBACvD6hC,EAAgB,GAAI,GAAGE,EACvB,MACD,KAAKjjC,GAAuBG,UAC3B4iC,EAAgB,IAChB,MACD,QACC,MAAM,IAAI1pG,MAAM,mBAElBgD,KAAKimG,iBAAiBnsE,MAAMpjB,MAAMkC,OAAO8tF,GAAiB,M,iCAI1D,IAAMtiC,EAAepkE,KAAK0lG,wBAAwBthC,aAC9C9lE,EAAK,GACT,OAAO0B,KAAK0lG,wBAAwB3hC,wBACnC,KAAKJ,GAAuBC,OAC3BtlE,GAAM,WACN,MACD,KAAKqlE,GAAuBE,WAC3BvlE,GAAM,eACN,MACD,KAAKqlE,GAAuBG,UAC3BxlE,GAAM,YACN,MACD,QACC,MAAM,IAAItB,MAAM,mBAElBsB,GAAMgnG,GAAauB,UAAUziC,GAC7B9lE,GAAM,YACN,IAAM4lE,EAAclkE,KAAK0lG,wBAAwBxhC,YAOjD,OANGA,GACCA,EAAY1kE,OAAO,GACnB4kE,IAAekhC,GAAaC,oBAC5BnhC,IAAekhC,GAAaE,0BAE/BlnG,GAAM,qCAAqC4lE,EAAY1gE,KAAK,KAAK,WAC3DlF,I,qCAGJ0B,KAAK0lG,wBAAwB3hC,yBAAyBJ,GAAuBG,UAIhF5kE,OAAO4nG,KAAK9mG,KAAK0lG,wBAAwBvhC,YAAa,UAAUoQ,QAH/Dv0E,KAAK+mG,2C,gCAMN/mG,KAAK6Q,gBAAgBrC,Y,mDAtFrB,OAAOxO,KAAK0lG,wBAAwBzhC,+B,8BAGpC,OAAOjkE,KAAKy4B,a,KC3COuuE,I,OADI5pG,EAAlByC,iB,WAEN,WAAY0X,GAAQ,wBACb++D,EAAuC/+D,EAAvC++D,YAAazoB,EAA0Bt2C,EAA1Bs2C,yBACnB7tD,KAAKu4C,cAAiB+9B,EACtBt2E,KAAKinG,0BAA4Bp5C,EACjC7tD,KAAKy6B,KAAOz6B,KAAKy6B,KAAKt6B,KAAKH,MAC3BA,KAAK06B,KAAO16B,KAAK06B,KAAKv6B,KAAKH,MAC3BA,KAAKknG,6BAA+BlnG,KAAKknG,6BAA8B/mG,KAAKH,MAC5EA,KAAKmnG,uBAAyBnnG,KAAKmnG,uBAAuBhnG,KAAKH,MAC/DA,KAAKonG,gCAAkCpnG,KAAKonG,gCAAgCjnG,KAAKH,MACjFA,KAAKqnG,2BAA6BrnG,KAAKqnG,2BAA2BlnG,KAAKH,MACvEA,KAAKsnG,aAAetnG,KAAKsnG,aAAannG,KAAKH,MAC3CA,KAAKunG,sCAAwCvnG,KAAKunG,sCAAsCpnG,KAAKH,MAC7FA,KAAKqnG,2BAA6BrnG,KAAKqnG,2BAA2BlnG,KAAKH,MACvEA,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,kBAC5BzP,KAAKy4B,SAASsC,UAAUtrB,IAAI,QAC5BzP,KAAKu6C,eAAiB,IAAI87B,GAAsB,CAAEl5C,MAAM,YAAam5C,YAAYA,IACjFt2E,KAAKy4B,SAASwC,YAAYj7B,KAAKu6C,eAAe9jB,SAC9Cz2B,KAAKwnG,uBAAyB39E,SAASC,cAAc,OACrD9pB,KAAKwnG,uBAAuBzsE,UAAUtrB,IAAI,mBAC1CzP,KAAKynG,gBAAkB59E,SAASC,cAAc,OAC9C9pB,KAAKynG,gBAAgB1sE,UAAUtrB,IAAI,WACnCzP,KAAKy4B,SAASwC,YAAYj7B,KAAKwnG,wBAC/BxnG,KAAKwnG,uBAAuBvsE,YAAYj7B,KAAKynG,iBAC7CznG,KAAKy6C,mBAAqB,IAAI1C,GAAkB,CAACthB,QAAQz2B,KAAKy4B,SAAUiC,KAAK16B,KAAK06B,OAClF16B,KAAK0nG,wCAA0C,IAAIx6E,IACnDltB,KAAK2nG,oBAAsB99E,SAASC,cAAc,OAClD9pB,KAAK2nG,oBAAoB5sE,UAAUtrB,IAAI,gBACvCzP,KAAK2nG,oBAAoBhsE,UAAY,wCACrC37B,KAAKy4B,SAASwC,YAAYj7B,KAAK2nG,qBAC/B3nG,KAAK2nG,oBAAoB5sE,UAAUtrB,IAAI,WACvCu2D,GAAiBsB,SAAS75D,iBAAiB,iCAAkCzN,KAAKonG,iC,iDAQ9E7vF,GACJ,IAAMqwF,EAAc,OAAGrwF,QAAH,IAAGA,OAAH,EAAGA,EAAQqwF,eAC/B5nG,KAAKy4B,SAASsC,UAAUtrB,IAAI,WAC5BzP,KAAKu4C,cAAcoC,OAAO36C,MAC1BA,KAAKy6C,mBAAmB7d,WACxB58B,KAAKqnG,6BACLrnG,KAAK6nG,qBAAuB7nG,KAAKinG,0BAA0BvyD,GAASe,WAAWtgC,OAC5EyyF,IACF5nG,KAAKwnG,uBAAuBtqB,UAAYl9E,KAAKwnG,uBAAuB5lC,gB,mDAIjE5hE,KAAK6nG,uBACT7nG,KAAK6nG,qBAAqBr5F,UAC1BxO,KAAK6nG,qBAAsB,Q,6BAG3B7nG,KAAKqnG,6BACLrnG,KAAKy4B,SAASsC,UAAUnrB,OAAO,WAC/B5P,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKu4C,cAAcE,U,sDAEYlpC,GAAG,IAAD,OAC3Bu4F,EAA8C7zF,MAAM4J,KAAK7d,KAAK0nG,wCAAwCz6E,QAC5E1d,EAAEg5D,wBACVn5D,SAAQ,SAAAw4D,GAC/B,IAAM55D,EAAQ85F,EAA4ChlG,QAAQ8kE,EAAuB3D,8BACtFj2D,GAAQ,EAAE85F,EAA4CpnG,OAAOsN,EAAO,GAClE,EAAKu5F,sCAAsC3/B,MAEjDkgC,EAA4C14F,SAAQ,SAAA24F,GACnD,IAAMrwF,EAAQ,EAAKgwF,wCAAwC5tF,IAAIiuF,GAC3DrwF,GACJ,EAAK4vF,aAAa5vF,Q,mCAGPA,GACZA,EAAMlJ,UACNxO,KAAK0nG,wCAAwCruF,OAAO3B,EAAMusD,8BAC1DjkE,KAAKynG,gBAAgB37C,YAAYp0C,EAAM+e,SACvCz2B,KAAKknG,iC,4DAEgCt/B,GACrC,IAAMogC,EAAqB,IAAIvC,GAAmB,CAAC79B,uBAAuBA,IAC1E5nE,KAAK0nG,wCAAwC7tF,IAAImuF,EAAmB/jC,6BAA8B+jC,GAClGhoG,KAAKynG,gBAAgBxsE,YAAY+sE,EAAmBvxE,SACpDz2B,KAAKknG,iC,qDAGLlnG,KAAKmnG,uBAAuBnnG,KAAK0nG,wCAAwC/jF,MAAM,K,6CAEzDrhB,GACnBA,EAAMtC,KAAK2nG,oBAAoB5sE,UAAUtrB,IAAI,WAC3CzP,KAAK2nG,oBAAoB5sE,UAAUnrB,OAAO,a,8BA1D/C,OAAO5P,KAAKy4B,W,+BAGZ,OAAOic,GAASe,c,MC1CGwyD,G,WACpB,cAAgE,IAAnDv4E,EAAkD,EAAlDA,iBAAkBw4E,EAAgC,EAAhCA,gBAAiB3lG,EAAe,EAAfA,cAAe,oBAC9DvC,KAAKmoG,iBAAmBD,EACxBloG,KAAK23E,kBAAoBjoD,EACzB1vB,KAAKooG,eAAgBpoG,KAAKooG,eAAejoG,KAAKH,MAC9CA,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,oBAC5BzP,KAAKqoG,qBAAuBx+E,SAASC,cAAc,OACnD9pB,KAAKqoG,qBAAqBttE,UAAUtrB,IAAI,iBACxCzP,KAAKomC,KAAOvc,SAASC,cAAc,OACnC9pB,KAAKomC,KAAKrL,UAAUtrB,IAAI,SACxBzP,KAAKomC,KAAK5b,IAAV,UAAmBte,EAAKe,iBAAiB1K,EAAcsC,WAAvD,OAAmE7F,EAAUuU,iBAAiBmc,EAAiBxR,eAAe5G,wBAAwB,IAAI9K,eAC1JxM,KAAKsoG,2BAA6Bz+E,SAASC,cAAc,OACzD9pB,KAAKsoG,2BAA2BvtE,UAAUtrB,IAAI,uBAC9CzP,KAAKuoG,oBAAsB1+E,SAASC,cAAc,OAClD,IAAM0+E,EAAc94E,EAAiB3N,KAAKlB,MAAMrhB,OAAO,EAAnC,gBAA8CkwB,EAAiB3N,KAAKvB,IAAK,GAC7FxgB,KAAKuoG,oBAAoB5sE,UAAzB,+BAA6D6sE,EAA7D,iBAAiF94E,EAAiBllB,OAAlG,wBAAwHklB,EAAiB5yB,MACzIkD,KAAKyoG,mBAAqB5+E,SAASC,cAAc,OACjD9pB,KAAKyoG,mBAAmB1tE,UAAUtrB,IAAI,eACtCzP,KAAKyoG,mBAAmB1tE,UAAUtrB,IAAI5N,EAAWyB,WAAWosB,EAAiBtR,SAC7Epe,KAAKyoG,mBAAmB9sE,UAAxB,UAAuC95B,EAAWu0C,eAAe1mB,EAAiBtR,SAClFpe,KAAKy4B,SAASwC,YAAYj7B,KAAKqoG,sBAC/BroG,KAAKqoG,qBAAqBptE,YAAYj7B,KAAKomC,MAC3CpmC,KAAKy4B,SAASwC,YAAYj7B,KAAKsoG,4BAC/BtoG,KAAKsoG,2BAA2BrtE,YAAYj7B,KAAKuoG,qBACjDvoG,KAAKsoG,2BAA2BrtE,YAAYj7B,KAAKyoG,oBACjDzoG,KAAKy4B,SAAShrB,iBAAiB,QAASzN,KAAKooG,gB,6DAe7CpoG,KAAKmoG,iBAAiBnoG,KAAK23E,qB,6BAZ3B,OAAO33E,KAAK23E,kBAAkBntE,S,gCAEflI,GACZA,EACFtC,KAAKy4B,SAASsC,UAAUtrB,IAAI,gBAE5BzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,kB,8BAGhC,OAAO5P,KAAKy4B,a,KC7BOiwE,I,kBACpB,cAIkB,IAJLp4D,EAII,EAJJA,4BACXq4D,EAGe,EAHfA,oBAAqBC,EAGN,EAHMA,SAAU/nC,EAGhB,EAHgBA,eAC/BgoC,EAEe,EAFfA,aAAcC,EAEC,EAFDA,uBACdv4D,EACe,EADfA,iBAAkBqI,EACH,EADGA,iBAClBG,EAAe,EAAfA,aAAe,oBAChB,IAAM5b,EAAQ,QACdn9B,KAAKy8E,QAAU,IAAInK,GAAc,CAACM,eAAez1C,EAAOrgC,KAAKqgC,EAAO4wC,SAAS,IAAKG,SAAS,IAAKD,UAAU,IAAKE,UAAU,IACxH2E,aAAa,IAAKC,cAAc,IAAKE,SAAS,GAAIC,SAAS,GAAIF,WAAU,EAAMthB,WAAU,EAAOygB,aAAY,EAC5GC,aAAY,EAAMzgB,WAAU,EAAM0gB,iBAAgB,EAAMc,WAAU,EAAMjB,UAAS,EACjF70E,KAAK8qD,GAAWC,uBAEjBpoD,KAAKwwC,kBAAoBD,EACzBvwC,KAAK0wC,6BAA+BJ,EACpCtwC,KAAK+oG,qBAAuBJ,EAC5B3oG,KAAKgpG,gBAAkBnoC,EACvB7gE,KAAKipG,wBAAyBH,EAC9B9oG,KAAKy4B,SAAWz4B,KAAKy8E,QAAQ3lC,aAC7B92C,KAAKy4B,SAASsC,UAAUtrB,IAAI,cAC5BzP,KAAK6qD,cAAe7qD,KAAKy8E,QAAQtH,iBACjCn1E,KAAK6qD,cAAc9vB,UAAUtrB,IAAI,SACjCzP,KAAKkpG,mBAAoBr/E,SAASC,cAAc,eAChD9pB,KAAKmpG,eAAiBnpG,KAAKmpG,eAAehpG,KAAKH,MAC/CA,KAAKopG,sBAAwBppG,KAAKopG,sBAAsBjpG,KAAKH,MAC7DA,KAAKy6B,KAAOz6B,KAAKy6B,KAAKt6B,KAAKH,MAC3BA,KAAK06B,KAAO16B,KAAK06B,KAAKv6B,KAAKH,MAC3BA,KAAKqpG,MAAQrpG,KAAKqpG,MAAMlpG,KAAKH,MAC7BA,KAAKspG,UAAYtpG,KAAKspG,UAAUnpG,KAAKH,MACrCA,KAAKsnG,aAAetnG,KAAKsnG,aAAannG,KAAKH,MAC3CA,KAAK+pB,WAAa/pB,KAAK+pB,WAAW5pB,KAAKH,MACvCA,KAAKupG,UAAYvpG,KAAKupG,UAAUppG,KAAKH,MACrCA,KAAKwpG,iBAAmBxpG,KAAKwpG,iBAAiBrpG,KAAKH,MACnDA,KAAK4J,SAAW,GAChB5J,KAAKypG,aAAc5/E,SAASC,cAAc,OAC1C9pB,KAAKypG,aAAa1uE,UAAUtrB,IAAI,YAChCzP,KAAK0pG,gBAAkB,IAAI99C,GAAmB,CAC5CrkC,UAAU,cACV+U,OAAOpwB,EAAKQ,OAAO,6BACnBirB,QAAQixE,IAEV5oG,KAAKypG,aAAaxuE,YAAYj7B,KAAK0pG,gBAAgBjzE,SACnDz2B,KAAK+8E,mBAAqBlzD,SAASC,cAAc,OACjD9pB,KAAK+8E,mBAAmBhiD,UAAUtrB,IAAI,cACtCzP,KAAK6qD,cAAc5vB,YAAYj7B,KAAKypG,cACpCzpG,KAAK6qD,cAAc5vB,YAAYj7B,KAAK+8E,oBACpC/8E,KAAKy6C,mBAAqB,IAAI1C,GAAkB,CAACC,WAAWh4C,KAAKy4B,SAAUiC,KAAK16B,KAAK06B,OACrFm+C,GAAeppE,IAAI,CAACgnB,QAAQz2B,KAAKy4B,SAAU6V,UAAUtuC,KAAKupG,YAC1DvpG,KAAK2pG,8BAAgC9/E,SAASC,cAAc,OAC5D9pB,KAAK2pG,8BAA8B5uE,UAAUtrB,IAAI,0BACjDzP,KAAKypG,aAAaxuE,YAAYj7B,KAAK2pG,+BACnC,IAAMC,EAAwBlxE,IAAMuyB,cAAcvS,IAClDyS,IAAS/sB,OAAOwrE,EAChB,CACC9wD,WAAU,EACVH,WAAWkwD,EAAcjwD,mBACzBrI,mBAAkBwI,iBAEnB/4C,KAAK2pG,+B,mDAGL3pG,KAAKy8E,QAAQnI,aACbt0E,KAAKy8E,QAAQjI,iB,6BAMbx0E,KAAKy8E,QAAQpI,a,uCAEGw1B,GAChB,IAAMC,EAAuB,IAAI58E,IACjCltB,KAAK4J,SAASwF,SAAQ,SAAAsI,GAAK,OAC1BoyF,EAAqBjwF,IAAInC,EAAMlN,OAAQkN,MACxCmyF,EAA0Bz6F,SAAQ,SAAA26F,GAEjC,IAAMryF,EAAQoyF,EAAqBhwF,IAAIiwF,EAAyBv/F,QAC5DkN,IACJoyF,EAAqBzwF,OAAO0wF,EAAyBv/F,QACrDkN,EAAMqhB,aAAc,MAEU9kB,MAAM4J,KAAKisF,EAAqB1nG,UACxCgN,SAAQ,SAAAsI,GAAK,OAAEA,EAAMqhB,aAAc,O,kCAGvD/4B,KAAK+8E,mBAAmB3jD,YAAY,IACtCp5B,KAAKwpG,iBAAiB,eAGpBxpG,KAAK+8E,mBAAmB3jD,YAAY,IACtCp5B,KAAKwpG,iBAAiB,eAGpBxpG,KAAK+8E,mBAAmB3jD,YAAY,KACtCp5B,KAAKwpG,iBAAiB,iBAGvBxpG,KAAKwpG,iBAAiB,kB,4CAED95E,GACrB,GAAG1vB,KAAKipG,4BAA4B5F,GAAoBE,YAGvD,OAFAvjG,KAAKgpG,gBAAgB,CAAC/mC,SAASvyC,SAC/B1vB,KAAK06B,OAGH16B,KAAKwwC,oBAAoB9qC,2DAC3B1F,KAAK0wC,6BAA6BhhB,GAElC1vB,KAAK+oG,qBAAqBr5E,GAA6B,GACxD1vB,KAAK06B,S,uCAEWnT,GACbvnB,KAAKgqG,yBACPhqG,KAAKy4B,SAASsC,UAAUnrB,OAAO5P,KAAKgqG,yBACrChqG,KAAKy4B,SAASsC,UAAUtrB,IAAI8X,GAC5BvnB,KAAKgqG,wBAA0BziF,I,8BAG/B,IAAM0iF,EAA4BjqG,KAAK4J,SAASvH,QAAO,SAAAqV,GAAK,OAAEA,EAAM2G,YAAUrU,KAAI,SAAA0N,GAAK,OAAEA,EAAMgY,oBAC/F1vB,KAAKkqG,gBAAgBD,GACrBjqG,KAAK06B,S,oCAEiB,IAAXzK,EAAU,EAAVA,SACXjwB,KAAK43B,UAAW3H,EAChBjwB,KAAKmpG,mB,uCAEW,IAAD,OACTvoB,EAAoB5gF,KAAK43B,UAAU3V,gBACzC2+D,EAAkB3pE,MAAK,SAASC,EAAGC,GAClC,OAAOD,EAAE1M,OAAS2M,EAAE3M,UAErBo2E,EAAkBxxE,SAAQ,SAAAsgB,GACzB,IAAMhY,EAAQ,IAAIyyF,GAAwB,CACzCjC,gBAAgB,EAAKkB,sBACrB15E,iBAAiBA,EACjBntB,cAAc,EAAKiuC,sBAEpB,EAAK84D,UAAU5xF,Q,gCAGPA,GACT1X,KAAK4J,SAASrJ,KAAKmX,GACnB1X,KAAK+8E,mBAAmB9hD,YAAYvjB,EAAM+e,W,mCAE9B/e,GACZ1X,KAAK4J,SAASlJ,OAAOV,KAAK4J,SAAS9G,QAAQ4U,GAAQ,GACnD1X,KAAK+8E,mBAAmBjxB,YAAYp0C,EAAM+e,W,8BAjF1C,OAAOz2B,KAAKy4B,a,MCnEO2xE,I,kBACpB,cAA2C,IAAD,OAA7BC,EAA6B,EAA7BA,gBAAiB/oG,EAAY,EAAZA,WAAY,oBACzCtB,KAAKsqG,iBAAmBD,EACxBrqG,KAAKuB,YAAcD,EACnBtB,KAAKuqG,OAASvqG,KAAKuqG,OAAOpqG,KAAKH,MAC/BA,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,kBAC5BzP,KAAKy4B,SAASsC,UAAUtrB,IAAI5N,EAAWyB,WAAWhC,IAClDtB,KAAKwqG,YAAc3gF,SAASC,cAAc,OAC1C9pB,KAAKwqG,YAAYzvE,UAAUtrB,IAAI,OAC/BzP,KAAKy4B,SAASwC,YAAYj7B,KAAKwqG,aAC/BxqG,KAAKyqG,aAAc5gF,SAASC,cAAc,OAC1C9pB,KAAKyqG,aAAa9uE,UAAY95B,EAAWu0C,eAAe90C,GACxDtB,KAAKyqG,aAAa1vE,UAAUtrB,IAAI,QAChCzP,KAAKy4B,SAASwC,YAAYj7B,KAAKyqG,cAC/BzqG,KAAK0qG,UAAW7gF,SAASC,cAAc,OACvC9pB,KAAK0qG,UAAU3vE,UAAUtrB,IAAI,KAC7BzP,KAAKy4B,SAASwC,YAAYj7B,KAAK0qG,WAC/B1qG,KAAK2qG,YAAc,IAAI7rE,GAAK9+B,KAAKuqG,QACjCF,EAAgBj7F,SAAQ,SAAAvC,GACvBgO,GAAuBmC,SAAS,EAAMnQ,EAAM,SAAU,EAAK89F,YAAYj8E,Y,qDAGhE,IAAD,OACHmnE,EAAE,EACN71F,KAAKsqG,iBAAiBl7F,SAAQ,SAAAvC,GACdA,EAAKuR,SACR,EAAK7c,aACjBs0F,OAED71F,KAAK0qG,UAAU/uE,UAAY/iB,OAAOi9E,GAC/BA,EAAE,EACJ71F,KAAKy4B,SAASsC,UAAUtrB,IAAI,WACxBzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,a,8BAGpC,OAAO5P,KAAKy4B,a,MCrCOmyE,G,WACpB,cAA0B,IAAD,OAAZt2F,EAAY,EAAZA,WAAY,oBACxBtU,KAAKmvB,YAAc7a,EACnBtU,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,YAC5BzP,KAAK4J,SAAW,GAChB,IAAIygG,EAAiB,GACrB/1F,EAAWlF,SAAQ,SAAAtC,GAAS,OAAEu9F,EAAkBA,EAAgBtgG,OAAO+C,EAAU+T,UACjFhf,EAAWgpG,YAAYz7F,SAAQ,SAAA9N,GAC9B,IAAMoW,EAAQ,IAAI0yF,GAAmC,CAACC,kBAAiB/oG,eACvE,EAAKsI,SAASrJ,KAAKmX,GACnB,EAAK+gB,SAASwC,YAAYvjB,EAAM+e,YAEjCz2B,KAAKkjF,U,sDAGLljF,KAAK4J,SAASwF,SAAQ,SAAAsI,GAAK,OAAEA,EAAM6yF,c,8BAGnC,OAAOvqG,KAAKy4B,a,KClBOqyE,G,WACpB,cAA0B,IAAD,OAAZx2F,EAAY,EAAZA,WAAY,oBACxBtU,KAAKmvB,YAAc7a,EACnBtU,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,eAC5BzP,KAAKsqG,iBAAkB,GACvBh2F,EAAWlF,SAAQ,SAAAtC,GAAS,OAAE,EAAKw9F,iBAAmB,EAAKA,iBAAiBvgG,OAAO+C,EAAU+T,UAC7F7gB,KAAKkjF,U,sDAGL,IACI6nB,EAAgBC,EADhBC,EAAW,KAAMC,EAAW,KAoBhC,GAlBAlrG,KAAKsqG,iBAAiBl7F,SAAQ,SAAA+7F,GAC7B,GAA0B,IAAvBA,EAAehtF,MAAlB,CACA,GAAa,MAAV8sF,EAKF,OAJAA,EAAWE,EAAehtF,MAC1B+sF,EAAWD,EACXF,EAAiBI,EAAe7oC,iBAChC0oC,EAAiBD,GAGfI,EAAehtF,MAAM8sF,IACvBA,EAAWE,EAAehtF,MAC1B4sF,EAAiBI,EAAe7oC,aAE9B6oC,EAAehtF,MAAM+sF,IACvBA,EAAWC,EAAehtF,MAC1B6sF,EAAiBG,EAAe7oC,iBAGpB,OAAX2oC,EAGF,OAFAjrG,KAAKy4B,SAASkD,UAAY,QAC1B37B,KAAKy4B,SAASsC,UAAUnrB,OAAO,WAGhC5P,KAAKy4B,SAASkD,UAAYsvE,IAAWC,EAASH,EAApB,UAAsCA,EAAtC,cAA0DC,GACpFhrG,KAAKy4B,SAASsC,UAAUtrB,IAAI,a,8BAG5B,OAAOzP,KAAKy4B,a,KCtCO2yE,G,WACpB,cAEiB,IAAD,OAFH92F,EAEG,EAFHA,WAAY4zF,EAET,EAFSA,gBAAiB5wC,EAE1B,EAF0BA,mBAAoB4iB,EAE9C,EAF8CA,qBAC7DrZ,EACe,EADfA,eAAgB1wB,EACD,EADCA,WAAYzV,EACb,EADaA,KAAM2wE,EACnB,EADmBA,qBAAsBC,EACzC,EADyCA,wBACxD/oG,EAAe,EAAfA,cAAe,oBACfvC,KAAK02C,cAAehc,EACpB16B,KAAKmoG,iBAAmBD,EACxBloG,KAAK4wC,sBAAwBy6D,EAC7BrrG,KAAK6wC,yBAA2By6D,EAChCtrG,KAAKm6E,sBAAuBD,EAC5Bl6E,KAAKgpG,gBAAkBnoC,EACvB7gE,KAAK47E,YAAazrC,EAClBnwC,KAAKmvB,YAAc7a,EACnBtU,KAAKurG,oBAAsBj0C,EAC3Bt3D,KAAKooG,eAAgBpoG,KAAKooG,eAAejoG,KAAKH,MAC9CA,KAAKmT,UAAY,IAAIy3F,GAA8B,CAACt2F,eACpDtU,KAAKwrG,YAAc,IAAIV,GAAgC,CAACx2F,eACxDtU,KAAKghE,2BAA6BhhE,KAAKghE,2BAA2B7gE,KAAKH,MACvEA,KAAK+sE,uBAAyB/sE,KAAK+sE,uBAAuB5sE,KAAKH,MAC/DA,KAAKyrG,mCAAqCzrG,KAAKyrG,mCAAmCtrG,KAAKH,MACvFA,KAAK0rG,2BAA6B1rG,KAAK0rG,2BAA2BvrG,KAAKH,MACvEA,KAAK2rG,gBAAkB3rG,KAAK2rG,gBAAgBxrG,KAAKH,MACjDA,KAAK4rG,kBAAoB5rG,KAAK4rG,kBAAkBzrG,KAAKH,MACrDA,KAAK6rG,gBAAkB7rG,KAAK6rG,gBAAgB1rG,KAAKH,MACjDA,KAAK8rG,wBAA0B9rG,KAAK8rG,wBAAwB3rG,KAAKH,MACjEA,KAAK+rG,aAAe/rG,KAAK+rG,aAAa5rG,KAAKH,MAC3CA,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,4BAC5BzP,KAAKqoG,qBAAuBx+E,SAASC,cAAc,OACnD9pB,KAAKqoG,qBAAqBttE,UAAUtrB,IAAI,iBACxCzP,KAAKomC,KAAOvc,SAASC,cAAc,OACnC9pB,KAAKomC,KAAKrL,UAAUtrB,IAAI,SACxB,IAAMu8F,EAAyB13F,EAAW,GACpC23F,EAAYD,EAAuBnrF,MAAM,GAC/C7gB,KAAKksG,WAAaD,EAClB,IAAME,EAAYF,EAAUlqF,KAC5B/hB,KAAKomC,KAAK5b,IAAV,UAAmBte,EAAKe,iBAAiB1K,EAAcsC,WAAvD,OAAmE7F,EAAUuU,iBAAiB44F,EAAUjuF,eAAe5G,wBAAwB,IAAI9K,eACnJxM,KAAKosG,oBAAsBviF,SAASC,cAAc,OAClD9pB,KAAKosG,oBAAoBrxE,UAAUtrB,IAAI,gBACvCzP,KAAKuoG,oBAAsB1+E,SAASC,cAAc,OAClD9pB,KAAKuoG,oBAAoBxtE,UAAUtrB,IAAI,eACvCzP,KAAKqsG,wBAA0BxiF,SAASC,cAAc,OACtD9pB,KAAKqsG,wBAAwBtxE,UAAUtrB,IAAI,oBAC3CzP,KAAKqsG,wBAAwB1wE,UAA7B,UAA4CqwE,EAAuBlvG,MACnEkD,KAAKssG,YAAcziF,SAASC,cAAc,OAC1C9pB,KAAKssG,YAAYvxE,UAAUtrB,IAAI,OAC/BzP,KAAKssG,YAAYrxE,YAAYj7B,KAAKqoG,sBAClCroG,KAAKqoG,qBAAqBptE,YAAYj7B,KAAKomC,MAC3CpmC,KAAKqoG,qBAAqB56F,iBAAiB,QAASzN,KAAK4rG,mBACzD5rG,KAAKssG,YAAYrxE,YAAYj7B,KAAKosG,qBAClCpsG,KAAKy4B,SAASwC,YAAYj7B,KAAKssG,aAC/BtsG,KAAKosG,oBAAoBnxE,YAAYj7B,KAAKuoG,qBAC1CvoG,KAAKuoG,oBAAoBttE,YAAYj7B,KAAKqsG,yBAC1CrsG,KAAKy4B,SAAShrB,iBAAiB,QAASzN,KAAKooG,gBAC7CpoG,KAAKghE,2BAA6BhhE,KAAKghE,2BAA2B7gE,KAAKH,MACvEA,KAAKusG,uBAAyB1iF,SAASC,cAAc,OACrD9pB,KAAKusG,uBAAuBxxE,UAAUtrB,IAAI,eAC1CzP,KAAKg4E,kBAAoBnuD,SAASC,cAAc,OAChD9pB,KAAKg4E,kBAAkBj9C,UAAUtrB,IAAI,cACrC,IAAMmpE,EAAkBr2E,EAAc+C,eAAd,eAAqC2mG,EAAU95F,WAA/C,cAAsE,GAC9FnS,KAAKg4E,kBAAkBr8C,UAAY,MAAM/iB,OAAOqzF,EAAU/5F,WAAW,YAAY0mE,EAEjF54E,KAAKi4E,qBAAuBpuD,SAASC,cAAc,OACnD9pB,KAAKi4E,qBAAqBl9C,UAAUtrB,IAAI,iBACxC,CAACzP,KAAKusG,uBAAwBvsG,KAAKg4E,mBACjC5oE,SAAQ,SAAA8oE,GAAY,OAAE,EAAKqwB,oBAAoBttE,YAAYi9C,MAC7D,CAACl4E,KAAKmT,UAAUsjB,QAASz2B,KAAKi4E,sBAC5B7oE,SAAQ,SAAA8oE,GAAY,OAAE,EAAKk0B,oBAAoBnxE,YAAYi9C,MAa7D,IAAME,EAAuB6zB,EAAU7zB,uBACvCp4E,KAAKq4E,oBAAsB,IAAIzsB,GAAmB,CAChDrkC,UAAU,CAAC,0BAA2B,eACtC+U,OAAOpwB,EAAKQ,OAAO,+BACnBirB,QAAQ33B,KAAK0rG,6BAEf1rG,KAAKi4E,qBAAqBh9C,YAAYj7B,KAAKq4E,oBAAoB5hD,SAG/Dz2B,KAAKs4E,uBAAyB,IAAI1sB,GAAmB,CACnDrkC,UAAU,CAAC,sBAAuB,eAClC+U,OAAO87C,EAAwBlsE,EAAKQ,OAAO,8BAAgCR,EAAKQ,OAAO,uCACvFirB,QAAQygD,EAAuBp4E,KAAK6rG,gBAAgB,eAEtD7rG,KAAKi4E,qBAAqBh9C,YAAYj7B,KAAKs4E,uBAAuB7hD,SAGlEz2B,KAAKwsG,yBAA2B,IAAI5gD,GAAmB,CACrDrkC,UAAU,CAAC,yBAA0B,eACrC+U,OAAOpwB,EAAKQ,OAAO,gCACnBirB,QAAQ33B,KAAK2rG,kBAEf3rG,KAAKi4E,qBAAqBh9C,YAAYj7B,KAAKwsG,yBAAyB/1E,SAEpEz2B,KAAKysG,sBAAwB,IAAI7gD,GAAmB,CAClDrkC,UAAU,CAAC,yBAA0B,eACrC+U,OAAOpwB,EAAKQ,OAAO,kCACnBirB,QAAQ33B,KAAK8rG,0BAEf9rG,KAAKi4E,qBAAqBh9C,YAAYj7B,KAAKysG,sBAAsBh2E,SACjEz2B,KAAKi4E,qBAAqBh9C,YAAYj7B,KAAKwrG,YAAY/0E,SAEvD,IAAMi2E,EAAkBh0E,IAAMuyB,cAAcvP,IAC5C17C,KAAK2sG,iBAAmB9iF,SAASC,cAAc,OAC/C9pB,KAAK4sG,UAAYzhD,IAAS/sB,OAAOsuE,EAChC,CAAI9wD,eAAc,EACjB1gC,SAASlb,KAAK+sE,uBACdlxB,uBAAsB,EACtBhiB,IAAInB,IAAMC,cAEX34B,KAAK2sG,kBAEN3sG,KAAKs8C,aAAet8C,KAAK4sG,UAAUtwD,aACnCt8C,KAAKuoG,oBAAoBttE,YAAYj7B,KAAK2sG,kBAE1C3sG,KAAK6sG,cAAgBhjF,SAASC,cAAc,OAC5C9pB,KAAK6sG,cAAc9xE,UAAUtrB,IAAI,SACjCzP,KAAK6sG,cAAclxE,UAAYswE,EAAU75F,MACzCpS,KAAK6sG,cAAcp/F,iBAAiB,QAASzN,KAAK+rG,cAClDx2F,YAAW,WACX,EAAK62F,oBAAoBnxE,YAAY,EAAK4xE,iBACvC,GACHv1C,EAAmB7pD,iBAAiB,kBAAmBzN,KAAKyrG,oC,2DAI5D,GAAGzrG,KAAK8sG,eAKP,OAJA9sG,KAAK8sG,gBAAiB,EACtB9sG,KAAKy4B,SAASqzB,YAAY9rD,KAAK6sG,eAC/B7sG,KAAKosG,oBAAoBnxE,YAAYj7B,KAAK6sG,oBAC1C7sG,KAAK6sG,cAAc9xE,UAAUnrB,OAAO,YAGrC5P,KAAK8sG,gBAAiB,EACtB9sG,KAAKosG,oBAAoBtgD,YAAY9rD,KAAK6sG,eAC1C7sG,KAAKy4B,SAASwC,YAAYj7B,KAAK6sG,eAC/B7sG,KAAK6sG,cAAc9xE,UAAUtrB,IAAI,c,iDAEP4O,GAAU,IAAD,OACnCre,KAAKmvB,YAAY/f,SAAQ,SAAAtC,GACxBA,EAAU+T,MAAMzR,SAAQ,SAAAvC,GACpBwR,EAAS,EAAKuyB,sBAAsB/jC,GAClC,EAAKgkC,yBAAyBhkC,W,0CAKrC7M,KAAKm6E,sBAAsB,CAACn6E,KAAKksG,WAAWhuF,mB,mDAG5Cle,KAAKgpG,gBAAgB,CAAC/mC,SAASjiE,KAAKksG,aACpClsG,KAAK02C,kB,yDAE6BnnC,GAClCvP,KAAKs8C,aAAapjB,QAAQmjB,QAAU9sC,EAAEjN,Q,6CAEhBiN,GACtBvP,KAAKurG,oBAAoBltF,SAAW9O,EAAE8sC,U,wCAGtCr8C,KAAKm6E,sBAAsBn6E,KAAKksG,WAAW5tF,mB,wCAG3Cte,KAAKm6E,sBAAsBn6E,KAAKksG,WAAW7zF,MAAM00F,a,gDAGjD/sG,KAAK47E,YAAY57E,KAAKksG,YACtBlsG,KAAK02C,kB,uCAeL12C,KAAKmoG,iBAAiBnoG,Q,6BAZtB,OAAOA,KAAKmvB,YAAY,GAAG3kB,S,gCAEZlI,GACZA,EACFtC,KAAKy4B,SAASsC,UAAUtrB,IAAI,gBAE5BzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,kB,8BAGhC,OAAO5P,KAAKy4B,a,KC9LOu0E,G,WACpB,WAAY7rG,GAAO,wBACX29C,EACqD39C,EADrD29C,wBAAyB+pD,EAC4B1nG,EAD5B0nG,aAAcD,EACcznG,EADdynG,SAAU1uB,EACI/4E,EADJ+4E,qBAAsBrZ,EAClB1/D,EADkB0/D,eAC9E7wB,EAA4D7uC,EAA5D6uC,aAAcC,EAA8C9uC,EAA9C8uC,gBAAiBE,EAA6BhvC,EAA7BgvC,WAAY5tC,EAAiBpB,EAAjBoB,cAC3CvC,KAAKyS,eAAgBlQ,EACrBvC,KAAKm6E,sBAAsBD,EAC3Bl6E,KAAKgpG,gBAAkBnoC,EACvB7gE,KAAKitG,gBAAiBjtG,KAAKitG,gBAAgB9sG,KAAKH,MAChDA,KAAK4wC,sBAAwBZ,EAC7BhwC,KAAK6wC,yBAA2BZ,EAChCjwC,KAAK++C,+BAA+BD,EACpC9+C,KAAK47E,YAAczrC,EACnBnwC,KAAKktG,qBAAuB,IAAIhgF,IAEhC,IAAMiQ,EAAQ,aACdn9B,KAAKy8E,QAAU,IAAInK,GAAc,CAACM,eAAez1C,EAAOrgC,KAAKqgC,EAAO4wC,SAAS,IAAKG,SAAS,IAAKD,UAAU,IAAKE,UAAU,IACxH2E,aAAa,IAAKC,cAAc,IAAKE,SAAS,GAAIC,SAAS,GAAIF,WAC/DzwE,EAAcoD,2BACd+rD,UAAUnvD,EAAcoD,2BAA4BwsE,aAAY,EAChEC,aAAY,EAAMzgB,WAAU,EAAM0gB,iBAAgB,EAAMc,WAAU,EAAMjB,UAAS,EACjF70E,KAAK8qD,GAAWE,oBAEjBroD,KAAKy4B,SAAWz4B,KAAKy8E,QAAQ3lC,aAC7B92C,KAAKy4B,SAASsC,UAAUtrB,IAAI,sBAC5BzP,KAAK6qD,cAAe7qD,KAAKy8E,QAAQtH,iBACjCn1E,KAAK6qD,cAAc9vB,UAAUtrB,IAAI,SACjCzP,KAAK+pB,WAAa/pB,KAAK+pB,WAAW5pB,KAAKH,MACvCA,KAAKmpG,eAAiBnpG,KAAKmpG,eAAehpG,KAAKH,MAC/CA,KAAKmtG,cAAgBntG,KAAKmtG,cAAchtG,KAAKH,MAC7CA,KAAKy6B,KAAOz6B,KAAKy6B,KAAKt6B,KAAKH,MAC3BA,KAAK06B,KAAM16B,KAAK06B,KAAKv6B,KAAKH,MAG1BA,KAAK4J,SAAW,GAChB5J,KAAKypG,aAAc5/E,SAASC,cAAc,OAC1C9pB,KAAKypG,aAAa1uE,UAAUtrB,IAAI,YAChCzP,KAAK0pG,gBAAkB,IAAI99C,GAAmB,CAC5CrkC,UAAU,cACV+U,OAAOpwB,EAAKQ,OAAO,6BACnBirB,QAAQixE,IAEV5oG,KAAKypG,aAAaxuE,YAAYj7B,KAAK0pG,gBAAgBjzE,SACnDz2B,KAAKotG,wBAA0B,IAAIxhD,GAAmB,CACpDrkC,UAAU,uBACV+U,OAAOpwB,EAAKQ,OAAO,mCACnBirB,QAAQkxE,IAEV7oG,KAAKypG,aAAaxuE,YAAYj7B,KAAKotG,wBAAwB32E,SAC3Dz2B,KAAK+8E,mBAAqBlzD,SAASC,cAAc,OACjD9pB,KAAK+8E,mBAAmBhiD,UAAUtrB,IAAI,cACtCzP,KAAK6qD,cAAc5vB,YAAYj7B,KAAKypG,cACpCzpG,KAAK6qD,cAAc5vB,YAAYj7B,KAAK+8E,oB,0DAEO,IAAhC9sD,EAA+B,EAA/BA,SAAUunC,EAAqB,EAArBA,oBACrBx3D,KAAK43B,UAAY3H,EACjB,IAAMkN,EAAQlN,EAASgqB,0BAA0B,iBAAiB,aAClEj6C,KAAKd,OAAO20E,QAAQ12C,GACpBn9B,KAAKd,OAAO40E,kBAAkB32C,GAC9Bn9B,KAAKmpG,eAAe3xC,K,wCAEH,IAAD,OACV61C,EAAyBrtG,KAAKstG,6BAC9BC,EAAa,GACnBF,EAAuBj+F,SAAQ,SAAAo+F,GAC9B,IAAMxB,EAAyBwB,EAAsB,GAC/C91F,EAAQ,EAAKw1F,qBAAqBpzF,IAAIkyF,GAC5CuB,EAAYhtG,KAAKmX,GACjBA,EAAM+1F,mBAAoB,KAEJztG,KAAK4J,SAASvH,QAAO,SAAAqV,GAAK,OAAE61F,EAAYzqG,QAAQ4U,GAAO,KAC/DtI,SAAQ,SAAAs+F,GAAY,OAAEA,EAAaD,mBAAkB,O,qCAEtDj2C,GAAqB,IAAD,OAClCA,EAAoB7tD,QAAQyF,SAAQ,SAAAkoD,GACnC,IAAMhjD,EAAYgjD,EAAmBF,uBACjCu2C,EAAoB,GAExB,GADAr5F,EAAWlF,SAAQ,SAAAtC,GAAS,OAAE6gG,EAAoBA,EAAkB5jG,OAAO+C,EAAU+T,YAClF8sF,EAAkBnuG,OAAO,GAA5B,CACA,IAAMouG,EAAwB,IAAIxC,GAAsB,CACvD92F,aACA4zF,gBAAgB,EAAKiF,cACrB71C,qBACA4iB,qBAAqB,EAAKC,sBAC1BtZ,eAAe,EAAKmoC,gBACpBtuE,KAAK,EAAKA,KACV2wE,qBAAqB,EAAKz6D,sBAC1B06D,wBAAwB,EAAKz6D,yBAC7BV,WAAW,EAAKyrC,YAChBr5E,cAAc,EAAKkQ,iBAEpB,EAAK7I,SAASrJ,KAAKqtG,GACnBt5F,EAAWlF,SAAQ,SAAAtC,GAAS,OAC3B,EAAKogG,qBAAqBrzF,IAAI/M,EAAW8gG,MAE1C,EAAK7wB,mBAAmB9hD,YAAY2yE,EAAsBn3E,e,oCAG9C/e,M,6BAIb1X,KAAKy8E,QAAQnI,aACbt0E,KAAKy8E,QAAQjI,iB,6BAGbx0E,KAAKy8E,QAAQpI,a,8BAGb,OAAOr0E,KAAKy4B,a,KCpHOo1E,G,WACpB,WAAYz2C,GAAwB,oBACnC5pD,EAAYxN,MACZA,KAAK8tG,wBAAyB12C,EAC9Bp3D,KAAK+tG,gBAAkB32C,EAAuB,GAC9Cp3D,KAAKguG,yBAA2BhuG,KAAKguG,yBAAyB7tG,KAAKH,M,qEAsB3CsC,GACxBtC,KAAKiO,cAAc,CAAC5Q,KAAK,kBAAmBiF,MAAMA,EAAOg1D,mBAAmBt3D,S,2BApB5E,OAAOA,KAAK+tG,gBAAgBjxG,O,4BAG5B,OAAOkD,KAAK+tG,gBAAgB37F,Q,6CAG5B,OAAOpS,KAAK8tG,0B,wCAGZ,OAAO9tG,KAAK+tG,gBAAgBE,yB,+BAG5B,OAAOjuG,KAAKkf,W,aAEA5c,GACTA,IAAQtC,KAAKkf,YAChBlf,KAAKkf,UAAY5c,EACjBtC,KAAKguG,yBAAyB1rG,Q,KCxBX4rG,G,WACpB,WAAYn4D,GAAY,IAAD,2BACtBvoC,EAAYxN,MACZA,KAAKguG,yBAA2BhuG,KAAKguG,yBAAyB7tG,KAAKH,MACnE,IAAMmuG,EAAmB,GACzBp4D,EAAW3mC,SAAQ,SAAAvC,GACfA,EAAKoR,YACLkwF,EAAmBrrG,QAAQ+J,EAAKC,WAAW,GAC7CqhG,EAAmB5tG,KAAKsM,EAAKC,cAG/B,IAAMshG,EAA+B,IAAIlhF,IACzCihF,EAAmB/+F,SAAQ,SAAAtC,GAC1B,IAAIuhG,EAA0BD,EAA6Bt0F,IAAIhN,EAAUhQ,WAC5Ce,IAA1BwwG,GAA+D,OAA1BA,IACvCA,EAAwB,GACxBD,EAA6Bv0F,IAAI/M,EAAUhQ,KAAMuxG,IAElDA,EAAwB9tG,KAAKuM,MAE9B,IAAMwhG,EAAiBr6F,MAAM4J,KAAKuwF,EAA6BhsG,UAC/DpC,KAAK4J,SAAW0kG,EAAetkG,KAAI,SAAAukG,GAClC,IAAMj3C,EAAqB,IAAIu2C,GAAmBU,GAElD,OADAj3C,EAAmB7pD,iBAAiB,kBAAmB,EAAKugG,0BACrD12C,K,qEAMgB/nD,GACxBvP,KAAKiO,cAAcsB,K,8BAHnB,OAAOvP,KAAK4J,a,KCtBO4kG,I,OADIpxG,EAAlByC,iB,WAEN,cAA6B,IAAhB0C,EAAe,EAAfA,cAAe,oBAC3BvC,KAAKyS,eAAiBlQ,EACtBvC,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,6BAC5BzP,KAAKyuG,wCAA0C5kF,SAASC,cAAc,OACtE9pB,KAAKyuG,wCAAwC1zE,UAAUtrB,IAAI,sCAC3DzP,KAAK0uG,iCAAkCh2E,IAAMuyB,cAAc+U,IAC3DhgE,KAAK06B,KAAM16B,KAAK06B,KAAKv6B,KAAKH,MAC1BA,KAAKy6B,KAAMz6B,KAAKy6B,KAAKt6B,KAAKH,MAC1BA,KAAK89B,YAAa99B,KAAK89B,YAAY39B,KAAKH,MACxCA,KAAK2uG,gCAAiC3uG,KAAK2uG,gCAAgCxuG,KAAKH,MAChFA,KAAK+9B,wBAAyB/9B,KAAK+9B,wBAAwB59B,KAAKH,MAChEA,KAAK2uG,gCAAgC,IACrC3uG,KAAKyzD,yBAA2B,IAAI7H,GAAmB,CAACtvB,OAAOpwB,EAAKQ,OAAO,2BAC1EirB,QAAQ33B,KAAK+9B,0BACd/9B,KAAKy4B,SAASwC,YAAYj7B,KAAKyuG,yCAC/BzuG,KAAKy4B,SAASwC,YAAYj7B,KAAKyzD,yBAAyBh9B,S,sEAGxDz2B,KAAK06B,S,sDAE0B9iB,GAC/BuzC,IAAS/sB,OAAOp+B,KAAK0uG,iCACpB,CACC92F,OAAOA,EACP8mD,QAAQxyD,EAAKe,iBAAiBjN,KAAKyS,eAAe5N,UAClD6gC,QAAQ,EACRD,QAAQ,IAETzlC,KAAKyuG,2C,6BAMNzuG,KAAK89B,aAAY,K,8BAEH,IAATlmB,EAAQ,EAARA,OACL5X,KAAK89B,aAAY,GACjB99B,KAAK2uG,gCAAgC/2F,K,kCAE1BtV,GACRA,EACFtC,KAAKy4B,SAASsC,UAAUtrB,IAAI,WACxBzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,a,8BAZpC,OAAO5P,KAAKy4B,a,gBCxCR54B,GAAkCzC,EAAlCyC,iBAAkBC,GAAgB1C,EAAhB0C,eACH8uG,G,mHACYC,EAASC,GACxCF,EAAeG,gBAAgBF,EAAS,WACxCD,EAAeG,gBAAgBD,EAAS,WAFS,mBAG7BD,EAH6B,GAG1CG,EAH0C,KAGpCC,EAHoC,oBAI7BH,EAJ6B,GAI1CI,EAJ0C,KAIpCC,EAJoC,KAM3CC,EAAKJ,EAAO77E,KAAKC,GAAG,IACpBi8E,EAAKH,EAAO/7E,KAAKC,GAAG,IACpBk8E,GAAMJ,EAAKF,GAAQ77E,KAAKC,GAAG,IAC3Bm8E,GAAMJ,EAAKF,GAAQ97E,KAAKC,GAAG,IAC3Blc,EAAIic,KAAKq8E,IAAIF,EAAG,GAAKn8E,KAAKq8E,IAAIF,EAAG,GACnCn8E,KAAK+kE,IAAIkX,GAAMj8E,KAAK+kE,IAAImX,GACxBl8E,KAAKq8E,IAAID,EAAG,GAAKp8E,KAAKq8E,IAAID,EAAG,GAGjC,OAVU,QAQA,EAAIp8E,KAAK4lE,MAAM5lE,KAAKsY,KAAKv0B,GAAIic,KAAKsY,KAAK,EAAEv0B,KACnC,M,sCAGM8X,EAAQrK,QAClB9mB,IAATmxB,GAA6B,OAATA,GACtBnvB,GAAiB8kB,GACd1Q,MAAMC,QAAQ8a,IAA0B,IAAhBA,EAAOxvB,QAClCM,GAAe6kB,EAAe,wB,KCnBZ8qF,I,kBACpB,cAAsC,IAAzBx/E,EAAwB,EAAxBA,SAAUy/E,EAAc,EAAdA,aAAc,oBACpC1vG,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,eAC5BzP,KAAKqoG,qBAAuBx+E,SAASC,cAAc,OACnD9pB,KAAKqoG,qBAAqBttE,UAAUtrB,IAAI,iBACxCzP,KAAKorD,YAAcvhC,SAASC,cAAc,OAC1C9pB,KAAK+qD,aAAelhC,SAASC,cAAc,OAC3C9pB,KAAK+qD,aAAahwB,UAAUtrB,IAAI,QAChCzP,KAAK2vG,iBAAmB9lF,SAASC,cAAc,OAC/C9pB,KAAK2vG,iBAAiB50E,UAAUtrB,IAAI,YACpCzP,KAAKy4B,SAASwC,YAAYj7B,KAAKqoG,sBAC/BroG,KAAKqoG,qBAAqBptE,YAAYj7B,KAAKorD,aAC3C,IAAM7oD,EAAgB0tB,EAAS1tB,cAC/BvC,KAAKorD,YAAY5gC,IAAMte,EAAKe,iBAAiB1K,EAAcsC,UACzD,IAAIorB,EAASxP,cAAc0yE,aAAanhF,kBAC1ChS,KAAKy4B,SAASwC,YAAYj7B,KAAK+qD,cAC/B/qD,KAAK+qD,aAAapvB,UAAUp5B,EAAcqC,SAC1C5E,KAAK2vG,iBAAiBh0E,UAAY,UAAU/iB,OAAOua,KAAKy8E,MAAMhB,GAAeiB,sBAAsB5/E,EAASjB,OAC1G0gF,EAAa1gF,UAAU,MACzBhvB,KAAK+qD,aAAa9vB,YAAYj7B,KAAK2vG,kB,oDAGnC,OAAO3vG,KAAKy4B,a,MCxBOq3E,G,WACpB,WAAY3uG,GAAO,iCACTA,GACTnB,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,gBAC5BzP,KAAK+pB,WAAa/pB,KAAK+pB,WAAW5pB,KAAKH,MACvCA,KAAKy6B,KAAOz6B,KAAKy6B,KAAKt6B,KAAKH,MAC3BA,KAAK06B,KAAM16B,KAAK06B,KAAKv6B,KAAKH,MAC1BA,KAAK89B,YAAa99B,KAAK89B,YAAY39B,KAAKH,MACxCA,KAAKy6C,mBAAqB,IAAI1C,GAAkB,CAACthB,QAAQz2B,KAAKy4B,SAAUiC,KAAK16B,KAAK06B,O,0DAE7C,IAAD,OAAzBq1E,EAAyB,EAAzBA,UAAWL,EAAc,EAAdA,aACtBK,EAAUpmG,QAAQyF,SAAQ,SAAA6gB,GACzB,GAAGA,IAAWy/E,EAAd,CACA,IAAMM,EAAa,IAAIP,GAAW,CAACx/E,WAAUy/E,iBAC7C,EAAKj3E,SAASwC,YAAY+0E,EAAWv5E,e,6BAOtCz2B,KAAKy6C,mBAAmB7d,WACxB58B,KAAK89B,aAAY,K,kCAENx7B,GACRA,EACFtC,KAAKy4B,SAASsC,UAAUtrB,IAAI,WAE5BzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,a,6BAGhC5P,KAAKy6C,mBAAmBjsC,UACxBxO,KAAK89B,aAAY,K,8BAdjB,OAAO99B,KAAKy4B,a,KC2BOw3E,IAHH,IAAIC,gBAAgBhxG,OAAOC,SAASgxG,QACrCjxG,OAAOC,SAASgK,KAAKC,MAAM,KAAK,GACzBhM,EAAlByC,iB,kDAWL,WAAYsB,GAAO,IAAD,sBACjB,cAAMA,GADW,IAEVoB,EAAiCpB,EAAjCoB,cAAe6tG,EAAkBjvG,EAAlBivG,iBAFL,OAGjB,EAAKC,kBAAoBD,EACzB,EAAK5/D,kBAAoB,kBAAIjuC,GAC7B,EAAKk6B,YAAc/D,IAAMC,YACzB,EAAK23E,YAAY53E,IAAMC,YACvB,EAAK43E,aAAe73E,IAAMC,YAC1B,EAAK63E,YAAY93E,IAAMC,YACvB,EAAK83E,0BAA4B/3E,IAAMC,YACvC,EAAK+3E,iBAAmBh4E,IAAMC,YAC9B,EAAKg4E,mBAAqBj4E,IAAMC,YAChC,EAAKi4E,eAAiBl4E,IAAMC,YAC5B,EAAKk4E,oBAAsBn4E,IAAMC,YACjC,EAAKm4E,mBAAqBp4E,IAAMC,YAChC,EAAKsT,YAAcvT,IAAMC,YACzB,EAAKo4E,iBAAiBr4E,IAAMC,YAC5B,EAAKq4E,wBAAwBt4E,IAAMC,YACnC,EAAKs4E,uBAAyBv4E,IAAMC,YACpC,EAAK8X,eAAiB/X,IAAMC,YAC5B,EAAKu4E,gBAAgBx4E,IAAMC,YAC3B,EAAKw4E,aAAa,EAAKA,aAAahxG,KAAlB,gBAClB,EAAK4pB,WAAa,EAAKA,WAAW5pB,KAAhB,gBAClB,EAAKixG,iBAAiB14E,IAAMC,YAC5B,EAAK04E,kBAAmB34E,IAAMC,YAC9B,EAAK24E,eAAiB54E,IAAMC,YAC5B,EAAK44E,gBAAkB74E,IAAMC,YAC7B,EAAK64E,iBAAmB94E,IAAMC,YAC9B,EAAK84E,gBAAkB/4E,IAAMC,YAC7B,EAAKsY,aAAevY,IAAMC,YAC1B,EAAK+4E,kBAAoBh5E,IAAMC,YAC/B,EAAKkM,gBAAkB,IAAI7vB,GAC3B,EAAK28F,UAAW,EAAKA,UAAUxxG,KAAf,gBAChB,EAAKyxG,YAAa,EAAKA,YAAYzxG,KAAjB,gBAClB,EAAK0xG,kBAAoB,EAAKA,kBAAkB1xG,KAAvB,gBACzB,EAAK2xG,oBAAsB,EAAKA,oBAAoB3xG,KAAzB,gBAC3B,EAAK4xG,gBAAgB,EAAKA,gBAAgB5xG,KAArB,gBACrB,EAAK6xG,oBAAoB,EAAKA,oBAAoB7xG,KAAzB,gBACzB,EAAK8xG,oBAAsB,EAAKA,oBAAoB9xG,KAAzB,gBAC3B,EAAK+xG,cAAgB,EAAKA,cAAc/xG,KAAnB,gBACrB,EAAKgyG,wBAAwB,EAAKA,wBAAwBhyG,KAA7B,gBAC7B,EAAKiyG,eAAiB,EAAKA,eAAejyG,KAApB,gBACtB,EAAKwxC,+BAAiC,EAAKA,+BAA+BxxC,KAApC,gBACtC,EAAKkyG,qBAAuB,EAAKA,qBAAqBlyG,KAA1B,gBAC5B,EAAKmyG,wBAA0B,EAAKA,wBAAwBnyG,KAA7B,gBAC/B,EAAKoyG,wBAA0B,EAAKA,wBAAwBpyG,KAA7B,gBAC/B,EAAKqyG,kBAAoB,EAAKA,kBAAkBryG,KAAvB,gBACzB,EAAKyxC,OAAQ,EAAKA,OAAOzxC,KAAZ,gBACb,EAAKsyG,gBAAiB,EAAKA,gBAAgBtyG,KAArB,gBACtB,EAAKuyG,2BAA4B,EAAKA,2BAA2BvyG,KAAhC,gBACjC,EAAKwyG,sBAAuB,EAAKA,sBAAsBxyG,KAA3B,gBAC5B,EAAKyyG,mBAAmB,EAAKA,mBAAmBzyG,KAAxB,gBACxB,EAAK0yG,oBAAsB,EAAKA,oBAAoB1yG,KAAzB,gBAC3B,EAAK2yG,uBAAyB,EAAKA,uBAAuB3yG,KAA5B,gBAC9B,EAAK4yG,sBAAwB,EAAKA,sBAAsB5yG,KAA3B,gBAC7B,EAAK6yG,6BAA+B,EAAKA,6BAA6B7yG,KAAlC,gBACpC,EAAK8yG,cAAgB,EAAKA,cAAc9yG,KAAnB,gBACrB,EAAK+yG,qBAAuB,EAAKA,qBAAqB/yG,KAA1B,gBAC5B,EAAKgzG,2BAA6B,EAAKA,2BAA2BhzG,KAAhC,gBAClC,EAAK4xC,kBAAoB,EAAKA,kBAAkB5xC,KAAvB,gBACzB,EAAKizG,0BAA4B,EAAKA,0BAA0BjzG,KAA/B,gBACjC,EAAKkzG,gCAAkC,EAAKA,gCAAgClzG,KAArC,gBACvC,EAAKmzG,6BAA+B,EAAKA,6BAA6BnzG,KAAlC,gBACpC,EAAKozG,8CAAgD,EAAKA,8CAA8CpzG,KAAnD,gBACrD,EAAK8xC,oCAAqC,EAAKA,oCAAoC9xC,KAAzC,gBAC1C,EAAKqzG,kCAAmC,EAAKA,kCAAkCrzG,KAAvC,gBACxC,EAAK8iE,sBAAuB,EAAKA,sBAAsB9iE,KAA3B,gBAC5B,EAAKszG,0BAA2B,EAAKA,0BAA0BtzG,KAA/B,gBAChC,EAAKuzG,4BAA8B,EAAKA,4BAA4BvzG,KAAjC,gBACnC,EAAKwzG,8BAAgC,EAAKA,8BAA8BxzG,KAAnC,gBACrC,EAAKyzG,2BAA6B,EAAKA,2BAA2BzzG,KAAhC,gBAClC,EAAKuwC,6BAA+B,EAAKA,6BAA6BvwC,KAAlC,gBACpC,EAAKg6E,sBAAwB,EAAKA,sBAAsBh6E,KAA3B,gBAC7B,EAAK0zG,iBAAmB,EAAKA,iBAAiB1zG,KAAtB,gBACxB,EAAK2zG,sBAAwB,EAAKA,sBAAsB3zG,KAA3B,gBAC7B,EAAK4oG,qBAAuB,EAAKA,qBAAqB5oG,KAA1B,gBAC5B,EAAK4zG,wCAA0C,EAAKA,wCAAwC5zG,KAA7C,gBAC/C,EAAK6zG,6BAA+B,KACpC,EAAKC,4BAA8B,KACnC,EAAKC,cAAgB,IAAIv8C,GACzB,EAAK//B,UAAY,KACjB,EAAKu8E,iCAAmC,KACxC,EAAKC,kBAAmB,EACxB,EAAKC,2BAA0B,EAC/B,EAAKv7E,MAAQ,CAAC5iB,aAAa,KAAMo+F,mBAAkB,EAAOC,mBAAkB,GApF3D,E,yEARjB,OAAO,I,8CAGP,OAAO,I,sCAGP,OAAO,O,mDAwFgB,IAAD,OAAXxE,EAAW,EAAXA,UACX,OAAO,IAAIxyG,SAAQ,SAACO,EAASC,GAC5B,IAAM2rC,EAAgB,EAAK7E,gBAAgB1vB,OAC3C,EAAKw8F,UAAU5B,GAAW3xG,MAAK,WAC9BsrC,EAAcl7B,UACd1Q,EAAQ,MACNY,OAAM,SAACC,GACT+qC,EAAcl7B,UACdzQ,EAAOY,W,gCAIAoxG,GAAW,IAAD,OACnB,OAAO,IAAIxyG,SAAQ,SAACO,EAASC,GAC5BsO,GAAcmoG,cAAc,EAAKhkE,qBAAqBpyC,MAAK,YAA8B,IAAD,MAA3B6xB,EAA2B,EAA3BA,SAAU1tB,EAAiB,EAAjBA,cACtE,EAAKq1B,UAAY3H,EACjB,EAAKonC,qBAAuB,IAAI62C,GAAoB,EAAKt2E,UAAU3V,iBAChDgO,EAAS5N,MAAM7C,WAAlC,IACMu2B,EAAa9lB,EAAS5N,MAAMJ,gBAClC,EAAKoxF,gCAAgC9wG,EAAcE,0BACnD,EAAKyxG,cAAcrL,eACnB,EAAK4H,0BAA0Bv3E,QAAQwO,KAAK,CAACqO,WAAWA,EAAY3sB,wBAAwB,EAAKwO,UAAU/I,gBAAgBzF,wBAC1H7K,sBAAsB,EAAKqZ,UAAUrZ,wBACrC,EAAKuyF,mBAAmB53E,QAAQwO,KAAK,CAACzX,aACvC,EAAKygF,iBAAiBx3E,QAAQwO,KAAKqO,GACnC,EAAK86D,oBAAoB33E,QAAQwO,KAAK,EAAK2vB,qBAAsBpnC,GACjE,EAAK0gF,mBAAmBz3E,QAAQwO,KAAKqO,GACrC,EAAK66D,eAAe13E,QAAQwO,KAAKzX,EAAS5N,OAC1C,YAAKoyF,2BAAL,SAA0B1qF,WAAW,CAACkG,aACtC,YAAKykF,yBAAL,SAAwB3qF,WAAW,CAACkG,WACnCunC,oBAAoB,EAAKH,uBACvB04C,IACF,YAAK4E,oBAAL,SAAmB5qF,WAAW,CAACgmF,YAAWL,aAAaz/E,KACxD,EAAKugF,YAAYt3E,QAAQwO,KAAK,CAACzX,aAC/B,EAAK+hF,sBAAsB5zG,MAAK,WAC/B,EAAKmzG,gBAAgBr4E,QAAQwO,KAAKzX,EAAU,EAAKugB,qBAAqBpyC,MAAK,WACzE,EAAKw2G,gBAAgBvR,GAAoBC,gBACtC,EAAKmQ,6BACP,EAAK3B,sBAEN,EAAK8B,6BACN91G,OACEY,MAAMX,MACPW,MAAMX,MACPW,MAAMX,Q,oDAG2C,IAAD,OAAzBwE,EAAyB,EAAzBA,cAAe0tB,EAAU,EAAVA,SAC1C,OAAO,IAAI1yB,SAAQ,SAACO,EAASC,GAC5B,IAAIwE,EAAc6C,cAAc,OAAO7H,QAAQO,UAC/C,EAAKwzG,eAAep4E,QAAQwO,KAAKzX,GAAU7xB,KAAKN,GAASY,MAAMX,Q,8DAGzBwhD,GAA+B,IAAD,OACrEA,EAA8B3jB,SAAU,EACxC,IAAMi5E,EAA6Bt1D,EAA8Bu1D,8BAA8B90G,KAAK43B,WACpG,GAAGi9E,EAA2Br1G,OAAO,EAAE,CACtC5C,QAAQmC,IAAI,8BACZnC,QAAQmC,IAAI81G,EAA2Br1G,QACvCQ,KAAKk0G,cAAcrL,eACnB7oG,KAAK0wG,iBAAiBx3E,QAAQ67E,mBAC9B/0G,KAAK6wG,oBAAoB33E,QAAQipB,qCAAqC5C,GACtEv/C,KAAK2wG,mBAAmBz3E,QAAQipB,qCAAqC5C,GACrEv/C,KAAKywG,0BAA0Bv3E,QAAQipB,qCAAqC5C,GAC5E,IAC0B,EADpBy1D,EAAgBh1G,KAAK6xG,oBAC3B,GAAGmD,EAAcx1G,OAAO,EAGvB,OAFA,UAAAQ,KAAKy0G,2BAAL,SAA0B5Q,iBAAiBmR,QAC3Ch1G,KAAKixC,aAAa/X,QAAQ2qE,iBAAiBmR,GAK7C,IAAMC,EAAqB,SAACp0F,EAAOnkB,GAAW,IAAD,EAC5C,EAAK23G,2BAA0B,EAC/B,IAAMa,EAAgB,GACtBr0F,EAAMzR,SAAQ,SAAAvC,GACVqoG,EAAcpyG,QAAQ+J,EAAKkV,MAAM,GACnCmzF,EAAc30G,KAAKsM,EAAKkV,SAE1B,EAAKqvF,iBAAiBl4E,QAAQwO,KAAK,CAACzX,SAAS,EAAK2H,UAAWwb,WAAW8hE,EACvEhiE,iBAAgB,EAAMG,UAAS,IAC/B30C,MAAM9B,QAAQC,OACf,YAAK43G,2BAAL,SAA0B5Q,iBAAiBhjF,GAC3C,EAAKowB,aAAa/X,QAAQ2qE,iBAAiBhjF,IAYtCs0F,EAA4B51D,EAA8B61D,6BAA6Bp1G,KAAK43B,WAClG,GAAGu9E,EAA0B31G,OAAO,EAMnC,OAJA5C,QAAQmC,IAAI,6BACZnC,QAAQmC,IAAIo2G,EAA0B31G,aACtCy1G,EAAmBE,GAKpB,IAAME,EAAWr1G,KAAK43B,UAAU3V,gBAC1BqzF,EAA2BD,EAAShzG,QAAO,SAAAqtB,GAAgB,OAAEA,EAAiBtR,SAASvc,EAAWC,aACxG,GAAGwzG,EAAyB91G,OAAO,EAKlC,OAJA5C,QAAQmC,IAAI,4BACZnC,QAAQmC,IAAIu2G,EAAyB91G,aACrCy1G,EAAmBK,GAKpB,IAAMC,EAAmCF,EAAShzG,QAAO,SAAAqtB,GAAgB,OAAEA,EAAiBtR,SAASvc,EAAWI,qBAAqBytB,EAAiBtR,SAASvc,EAAWK,YACvKqzG,EAAiC/1G,OAAO,EAC1Cy1G,EAAmBM,GAKpBN,EAAmBI,K,+BAGX,IAAD,EACPz4G,QAAQmC,IAAI,gBACZ,UAAAiB,KAAKoxG,iBAAiBl4E,eAAtB,SAA+B0Y,W,oCAElB,IAAD,OACZ,OAAO,IAAIr0C,SAAQ,SAACO,EAASC,GAC5BsO,GAAcmoG,cAAc,EAAKhkE,qBAAqBpyC,MAAK,YAA8B,IAA5B6xB,EAA2B,EAA3BA,SAA2B,EAAjB1tB,cACtE,EAAK+uG,eAAep4E,QAAQwO,KAAKzX,GAAU7xB,MAAK,WAC/CN,OACEY,MAAMX,MACPW,MAAMX,Q,mDAGkB,IAAD,OACrB0G,EAA8BzE,KAAKwwC,oBAAoB/rC,4BACvDg2B,EAAO,WACT,EAAK45E,4BACR,EAAKA,2BAA4B,EACjC,EAAKD,kBAAkB,EACvB,EAAKpC,sBAAsB5zG,MAAK,WAC/BmX,YAAW,WACV,EAAK+jB,SAAS,CAACi7E,mBAAkB,MAC/B,QACD71G,MAAM9B,QAAQC,SAEf4H,EAA4B,GAC9B8Q,WAAWklB,EAAiC,IAA5Bh2B,GAMjBolB,SAASgN,gBAAgBppB,iBAAiB,aAJb,SAAvB+nG,IACL3rF,SAASgN,gBAAgB/oB,oBAAoB,YAAa0nG,GAC1D/6E,S,sCAIcg7E,GAAqB,IAAD,OACnC,OAAO,IAAIl4G,SAAQ,SAACO,EAASC,GAE5B,OADA,EAAKi2G,6BAA+B,EAAKC,4BAClCwB,GACN,KAAKpS,GAAoBC,eACxB,EAAK8N,iBAAiBl4E,QAAQiC,YAAW,GACzC,EAAKo2E,gBAAgBr4E,QAAQiC,YAAW,GACxC,EAAKm2E,eAAep4E,QAAQiC,YAAW,GACvC,EAAKq2E,iBAAiBt4E,QAAQiC,YAAW,GAC1C,MACA,KAAKkoE,GAAoBE,YACxB,EAAK6N,iBAAiBl4E,QAAQiC,YAAW,GACzC,EAAKo2E,gBAAgBr4E,QAAQiC,YAAW,GACxC,EAAKm2E,eAAep4E,QAAQiC,YAAW,GACvC,EAAKq2E,iBAAiBt4E,QAAQiC,YAAW,GAC1C,MACA,KAAKkoE,GAAoBG,aACxB,EAAK4N,iBAAiBl4E,QAAQiC,YAAW,GACzC,EAAKo2E,gBAAgBr4E,QAAQiC,YAAW,GACxC,EAAKm2E,eAAep4E,QAAQiC,YAAW,GACvC,EAAKq2E,iBAAiBt4E,QAAQiC,YAAW,GAC1C,MACA,KAAKkoE,GAAoBI,QACxB,EAAK2N,iBAAiBl4E,QAAQiC,YAAW,GACzC,EAAKo2E,gBAAgBr4E,QAAQiC,YAAW,GACxC,EAAKm2E,eAAep4E,QAAQiC,YAAW,GACvC,EAAKq2E,iBAAiBt4E,QAAQiC,YAAW,GAG3C,EAAK84E,4BAA8BwB,EACnC,EAAKn8E,SAAS,CAACm8E,oBAAoBA,S,uCAIpC,IAAMh/E,EAAUz2B,KAAKy8B,YAAYvD,QACjC,OAAIzC,EACG,CAACA,EAAQ2C,YAAa3C,EAAQ4C,cADlB,O,kDAInB,IAAMq8E,EAAa11G,KAAKoyG,iBACxB,QAAIsD,IACIA,EAAW,GAAG,KAAOA,EAAW,GAAG,O,4CAGvC11G,KAAKwwC,oBAAoBvsC,wBAI7BjE,KAAKwwG,YAAYt3E,QAAQuB,OAHxBz6B,KAAKuwG,aAAar3E,QAAQuB,S,4CAMN,IAAD,OACpB,OAAO,IAAIl9B,SAAQ,SAACO,EAASC,GAC5BwX,YAAW,WAAK,IAAD,EACRy/F,EAAgB,EAAKnD,oBACrB8D,EAAgB,EAAK/9E,UAAUvV,MAAM7C,WAAWnd,QAAO,SAAA0f,GAE5D,IADA,IAAM6zF,EAAiB7zF,EAAKlB,MACpB1d,EAAE,EAAGA,EAAEyyG,EAAep2G,OAAQ2D,IAAI,CACzC,IAAM0yG,EAAWD,EAAezyG,GAChC,GAAG6xG,EAAclyG,QAAQ+yG,IAAW,EACnC,OAAO,EAET,OAAO,KAER,YAAKpB,2BAAL,SAA0B5Q,iBAAiBmR,GAC3C,EAAK/jE,aAAa/X,QAAQ2qE,iBAAiBmR,GAC3C,EAAK5D,iBAAiBl4E,QAAQwO,KAAK,CAACzX,SAAS,EAAK2H,UAAWwb,WAAWuiE,EACxEziE,gBAAgB,EAAKkhE,kBAAkB,EAAKC,4BAA4B,EAAKD,iBAAkB,EAAKF,cAAc4B,gBAAiBziE,UAAS,IAC3Ij1C,KAAKN,GAASY,MAAMX,KACnB,Q,0CAIJ,OAAOiC,KAAKk0G,cAAc50D,YAAYt/C,KAAK43B,UAAUvV,MAAMJ,iBACvD5f,QAAO,SAAAwK,GAAI,OAAGA,EAAKoR,gB,0CAEJpR,GAAM,IAAD,OACxB0I,YAAW,WACV,EAAK67F,iBAAiBl4E,QAAQwO,KAAK,CAACzX,SAAS,EAAK2H,UAAYwb,WAAW,CAACvmC,EAAKkV,MAAOsxB,UAAS,MAC9F,K,wCAEe,IAAD,OAChB,OAAO,IAAI91C,SAAQ,SAACO,EAASC,GAC5B,EAAK6yG,eAAe13E,QAAQikB,QAC5B,EAAK7jB,SAAS,CAACi7E,mBAAkB,IACjC,EAAKvC,sBAAsB5zG,MAAK,WAC/BN,OACEY,MAAMX,Q,0CAGS,IAAD,OAClBiC,KAAKqwG,kBAAkBrwG,MACvBA,KAAKk0G,cAAc6B,cAAc/1G,KAAKywG,0BAA0Bv3E,SAChEl5B,KAAKk0G,cAAc6B,cAAc/1G,KAAK0wG,iBAAiBx3E,SACvDl5B,KAAKk0G,cAAc6B,cAAc/1G,KAAK2wG,mBAAmBz3E,SACzDl5B,KAAKk0G,cAAc6B,cAAc/1G,KAAK6wG,oBAAoB33E,SAC1Dl5B,KAAKk0G,cAAc6B,cAAc/1G,KAAK4wG,eAAe13E,SAClDl5B,KAAK8wG,mBAAmB53E,SAC1Bl5B,KAAKk0G,cAAc6B,cAAc/1G,KAAK8wG,mBAAmB53E,SAC1Dl5B,KAAKswG,YAAYp3E,QAAQzrB,iBAAiB,sBAAuBzN,KAAK0zG,6BACtE,IAAMj9E,EAAUz2B,KAAKy8B,YAAYvD,QAC3B32B,EAAgBvC,KAAKwwC,oBACxBjuC,EAAciD,uBAChBxF,KAAKg2G,eAAiB,IAAIhP,GAAc,CAAC1wB,YAAYt2E,KAAKyxG,gBAAgBv4E,QACzE20B,yBAAyB7tD,KAAKswG,YAAYp3E,QAAQ20B,2BACnDp3B,EAAQwE,YAAYj7B,KAAKg2G,eAAev/E,UAEzCz2B,KAAKi2G,uBAAwB,IAAIxkD,GAAY,CAC5CC,WAAU,EACVC,WAAU,IAEXl7B,EAAQwE,YAAYj7B,KAAKi2G,uBAAuBx/E,SAC7Cl0B,EAAckE,2BAChBzG,KAAKy0G,oBAAqB,IAAI/L,GAAmB,CAChDp4D,4BAA4B,SAAC5gB,GAAD,OAAoB,EAAKswD,iCAAiCvlD,KAAK/K,IAC3Fi5E,oBAAoB3oG,KAAK+oG,qBACzBH,SAAS5oG,KAAK8xG,oBACdjJ,aAAa7oG,KAAKkyG,cAClBrxC,eAAe7gE,KAAKijE,sBACpB6lC,uBAAuB,kBAAI,EAAKmL,6BAChC1jE,iBAAiBvwC,KAAKwwC,kBACtBoI,iBAAiB54C,KAAKmxG,aACtBp4D,aAAa/4C,KAAKyxG,gBAAgBv4E,UAEnCzC,EAAQwE,YAAYj7B,KAAKy0G,oBAAoBh+E,UAE3Cl0B,EAAc8D,0BAChBrG,KAAK00G,kBAAmB,IAAI1H,GAAiB,CAC5CpE,SAAS5oG,KAAK8xG,oBACdjJ,aAAa7oG,KAAKkyG,cAClBgE,kBAAkBl2G,KAAK6wG,oBAAoB33E,QAAQg9E,kBACnDh8B,qBAAqBl6E,KAAKm6E,sBAC1BtZ,eAAe7gE,KAAKijE,sBACpBjzB,aAAahwC,KAAK6yG,oBAClB5iE,gBAAgBjwC,KAAK8yG,uBACrB3iE,WAAWnwC,KAAK+xC,kBAChBxvC,kBAEDk0B,EAAQwE,YAAYj7B,KAAK00G,kBAAkBj+E,UAE5Cz2B,KAAKggF,iCAAmC,IAAIrB,GAAgC,CAC3Et5C,cAAcrlC,KAAKy8B,YAAYvD,QAC/B8W,aAAahwC,KAAK6yG,oBAAqB5iE,gBAAgBjwC,KAAK8yG,uBAC5DjyC,eAAe7gE,KAAKijE,sBAAuBiX,qBAAqBl6E,KAAKm6E,sBACrEg8B,cAAcn2G,KAAKy0G,oBAAoBz0G,KAAKy0G,oBAAoBh6E,KAAK,aACrEl4B,gBACA6tC,6BAA6BpwC,KAAKiyC,oCAClC9B,WAAWnwC,KAAK+xC,oBAEjB/xC,KAAKo2G,uBAAyB,IAAI5H,GAAuB,CAACjsG,kBAC1Dk0B,EAAQwE,YAAYj7B,KAAKo2G,uBAAuB3/E,SAChDopD,GAAsB91D,WAAW,CAAC+1D,gCACjC9/E,KAAKggF,iCAAkCD,gBAAgB//E,KAAKy8B,YAAYvD,UACzEl5B,KAAK20G,aAAe,IAAI7E,GAAY,IACpCr5E,EAAQwE,YAAYj7B,KAAK20G,aAAal+E,W,kDAEXlnB,GAC3B,IAAMs0C,EAAet0C,EAAEs0C,aACvB7jD,KAAKs5B,SAAS,CAACg7E,kBAAkBzwD,M,sCAGjC7jD,KAAKk0G,cAAcrL,eACnB7oG,KAAKgyG,sBACLhyG,KAAK4wG,eAAe13E,QAAQikB,U,qCAG5Bn9C,KAAK0wG,iBAAiBx3E,QAAQm9E,e,8CAEPxpG,GACb,OAAPA,EACF7M,KAAKgyG,sBAELhyG,KAAKiyG,oBAAoBplG,K,qDAEIA,EAAMonC,GACRj0C,KAAKgxG,wBAAwB93E,QACrCuB,KAAKz6B,KAAK43B,UAAW/qB,OAAMhP,EAAWo2C,K,wCAEzC3xC,GACjBtC,KAAKoxG,iBAAiBl4E,QAAQ4N,QAAQxkC,K,sCAEvBA,GACftC,KAAKswG,YAAYp3E,QAAQ4N,QAAQxkC,K,iDAEPuf,GACvBA,EAAO7hB,KAAKywC,eAAevX,QAAQuB,OACjCz6B,KAAKywC,eAAevX,QAAQwB,S,8CAGjC16B,KAAKswG,YAAYp3E,QAAQgzB,qBAAoB,K,yCAE3B30C,GAClBvX,KAAKkxG,gBAAgBh4E,QAAQwO,KAAKnwB,K,6CAEZ1K,GACtB7M,KAAKywC,eAAevX,QAAQtpB,OAAO/C,EAAK8P,MACxC9P,EAAKwR,UAAS,I,0CAEKxR,GAAM,IAAD,OAExB,OADmB7M,KAAKywC,eAAevX,QACzBo9E,OAAOrG,EAASsG,iBAC7Bv2G,KAAKszG,gCACE,IAERzmG,EAAKwR,UAAS,EACdre,KAAKywC,eAAevX,QAAQzpB,IAAI,IAAIwxC,GAAU,CAACC,QAAQr0C,EAAMikB,YAAY,6BAAD,OAA8BjkB,EAAKrC,OAAnC,wBAAyDqC,EAAK/P,MACtIskD,SAAS,GAAD,OAAIl1C,EAAKe,iBAAiBjN,KAAKwwC,oBAAoB3rC,WAAnD,OAA+D7F,EAAUuU,iBAAiB1G,EAAKqR,eAAe5G,wBAAwB,IAAI9K,eAAiBmQ,KAAK9P,EAAK8P,KAC5KwkC,UAAUt0C,EAAKrC,OACf62C,SAAS,WAAKx0C,EAAKwR,UAAS,GAC5BsZ,QAAQ,WAAK,EAAK46E,wBAAwB1lG,QAEpC,K,8CAEgBA,GACvB,GAAG7M,KAAKwwC,oBAAoBpsC,+BAC3BpE,KAAK2xC,+BAA+B9kC,EAAMupB,GAAwBC,eAGlE,OAAOr2B,KAAKi0G,6BACX,KAAK5Q,GAAoBE,YAExB,YADAvjG,KAAKijE,sBAAsB,CAAChB,SAASp1D,IAEtC,QAEC,YADA7M,KAAK+oG,qBAAqBl8F,M,mDAK7B7M,KAAK40G,gBAAgBvR,GAAoBC,kB,wCAExBz2F,GACjB7M,KAAK2zG,8BAA8B9mG,EAAKrC,U,oDAEXyc,GAE7B,GADAjnB,KAAK40G,gBAAgBvR,GAAoBG,cACrCxjG,KAAK43B,UAAT,CACA,IAAM/qB,EAAO7M,KAAK43B,UAAUzV,gBAAgB8E,GAC5CjnB,KAAKwxG,iBAAiBt4E,QAAQ0pE,wBAAwB,CAACM,SAAS,KAAMr2F,KAAKA,O,sEAGxE7M,KAAKg0G,6BACPh0G,KAAK40G,gBAAgB50G,KAAKg0G,8BAE1Bh0G,KAAK40G,gBAAgBvR,GAAoBC,kB,4CAErB/rF,GAAQ,IAAD,OACxB4I,EAAkB,OAAG5I,QAAH,IAAGA,OAAH,EAAGA,EAAQ4I,mBAC3Bq7E,EAA0B,OAAGjkF,QAAH,IAAGA,OAAH,EAAGA,EAAQikF,gCAClB39F,IAAtBsiB,GAAsD,OAArBA,IACnCA,EAAmB,GACpBngB,KAAKuxG,gBAAgBr4E,QAAQs9E,mBAAmBr2F,EAAoBq7E,GAA4Bp9F,MAAK,eAClGM,MAAM9B,QAAQC,OACjB0Y,YAAW,WACV,EAAKq/F,gBAAgBvR,GAAoBE,eACxC,K,sCAGFvjG,KAAK40G,gBAAgBvR,GAAoBI,SACzCzjG,KAAK4xG,cAAcxzG,MAAK,eAErBM,MAAM9B,QAAQC,S,qDAEa,IAAD,cACvB0F,EAAgBvC,KAAKwwC,oBACrBtrC,EAA8B3C,EAAc2C,4BAChD3C,EAAc2C,4BAA4B,GACxC0b,EAAqB,UAAG5gB,KAAK43B,iBAAR,iBAAG,EAAgBvV,aAAnB,iBAAG,EAAuBF,gBAAgBjd,UAA1C,iBAAG,EAAqE6c,YAAxE,aAAG,EAA2EnB,sBACnGA,IACHA,EAAqB,UAAG5gB,KAAK43B,iBAAR,iBAAG,EAAgBvV,aAAnB,iBAAG,EAAuBo0F,sBAA1B,aAAG,EAAuC10F,KAAKnB,uBACjEA,GACJ5gB,KAAK+yG,sBAAsB,CAAC5yF,mBAAmBS,EAAsBT,mBACpEq7E,2BAA2B56E,EAAsBR,+B,qDAGlD4c,GAAOquC,OAAO,CACbluC,MAAM,uBACN5V,UAAU,0CACV7qB,QAAQ,+DACRwgC,QAAQ,CAAC,CAAC5+B,KAAK,W,0DAGmBiZ,GACnC,IAAM1K,EAAO0K,EAAO1K,KACpB7M,KAAKixG,uBAAuB/3E,QAAQwO,KAAK,CAAC7mB,MAAMhU,EAAK,CAACA,GAAM,S,0DAG5D7M,KAAKixG,uBAAuB/3E,QAAQwO,KAAK,M,4CAEpBn4B,GAAG,IAAD,EACjBqR,EAAqB,UAAGrR,EAAE0yD,gBAAL,aAAG,EAAYlgD,KAAKnB,sBAC3CA,GACJ5gB,KAAK+yG,sBAAsB,CAAC5yF,mBAAmBS,EAAsBT,mBACpEq7E,2BAA2B56E,EAAsBR,+B,6CAE5B,IAAD,EACrB,UAAApgB,KAAKg2G,sBAAL,SAAqBv7E,S,yCAEH,IAAD,EACjB,UAAAz6B,KAAKy0G,2BAAL,SAA0Bh6E,KAAK,M,8CAER,IAAD,EACtB,UAAAz6B,KAAK00G,yBAAL,SAAwBj6E,KAAK,M,kDAG7Bz6B,KAAK20G,aAAal6E,S,sDAEah4B,GAC/B,IAAGzC,KAAKm0G,iCAAR,CACA,IAAMuC,EAAgBj0G,EAAyBS,kBAC/Cg/E,GAAay0B,gBAAgBD,GAC7B12G,KAAKm0G,kCAAiC,K,2CAElBtnG,EAAM0mC,EAASh4B,GAAG,IAkB3B,EAlB0B,OAC/BqlF,EAAe,WAAK,IAAD,EACpBjrF,EACJ,OAAO,EAAKs+F,6BACX,KAAK5Q,GAAoBC,eACxB3tF,EAAc,UAAG,EAAKy7F,iBAAiBl4E,eAAzB,aAAG,EAA+BoZ,+BAA+BzlC,EAAKrC,QACpF,MACD,KAAK64F,GAAoBE,YACxB5tF,EAAiB4F,GAAI,CAAC,EAAE,GACxB,MACD,QAEC,YADA,EAAKm1B,6BAA6B7jC,GAGpC,EAAKokC,aAAa/X,QAAQuB,KAAK,CAACjvB,SAASmK,EACxCsa,SAAS,EAAK2H,UAAW/qB,KAAK,EAAK+qB,UAAUvV,MAAMF,gBAAgBtV,EAAKrC,QACxEqxD,eAAc,IAAOn9D,MAAM9B,QAAQC,QAElC02C,EACF,UAAAvzC,KAAKoxG,iBAAiBl4E,eAAtB,SAA+B4N,QAAQ,GAAG1oC,MAAK,WAC9CwiG,OACEliG,MAAM9B,QAAQC,OAEb+jG,M,mDAEuBlxE,GAC5B1vB,KAAKggF,iCAAiCvlD,KAAK/K,K,4CAEtB9X,GACrB5X,KAAKo2G,uBAAuB37E,KAAK,CAAC7iB,a,6CAGlC5X,KAAKi2G,uBAAuBjkD,KAAK,CAACp0D,IAAIsO,EAAK0qG,OAAO,e,gDAGlD52G,KAAKo2G,uBAAuB37E,KAAK,CAAC7iB,OAAO,CAAC,wB,+BAEjC,IAAD,OACFi/F,EAAoB,cAAc33G,OAAO82B,SAAS,UAAU,IAAIqtE,GAAoByT,gBAAgB92G,KAAK84B,MAAM28E,sBACnHz1G,KAAK84B,MAAMw7E,kBAAkB,uBAAuB,KACpDt0G,KAAK84B,MAAMy7E,kBAAkB,wBAAwB,KACrDv0G,KAAKwwC,oBAAoBprC,cAAc,GAAG,eAC7C,OAAQ,sBAAKmiB,UAAWsvF,EAAmBh9E,IAAK75B,KAAKy8B,YAA7C,UACN,sBAAKlV,UAAU,YAAf,UACC,cAAC,GAAD,CAASsS,IAAK75B,KAAKisC,YAAavH,eAAgB1kC,KAAK6kC,kBACrD,cAAC,GAAD,CAAchL,IAAK75B,KAAK+wG,iBAAkBrsE,eAAgB1kC,KAAK6kC,kBAC/D,cAAC,GAAD,CAAchL,IAAM75B,KAAKoxG,iBACxBthE,wBAAyB9vC,KAAK2xC,+BAC9BvB,6BAAgCpwC,KAAKiyC,oCACrCzM,yBAA0BxlC,KAAKyyG,gBAC/B1iE,cAAe/vC,KAAKywC,eACpBlL,wBAAyBvlC,KAAKmyC,gBAC9BzM,QAASuqE,EAAS8G,wBAClBtxE,QAASwqE,EAAS+G,wBAClB9mE,eAAgBlwC,KAAK+yG,sBACrBjrE,UAAW,aACXqI,WAAYnwC,KAAK+xC,kBAAmB/B,aAAehwC,KAAK6yG,oBACxD5iE,gBAAiBjwC,KAAK8yG,uBACtBziE,YAAarwC,KAAKixC,aAClBX,4BAA6BtwC,KAAK0wC,6BAClCH,iBAAkBvwC,KAAKwwC,oBACxB,cAAC,GAAD,CAAa3W,IAAK75B,KAAKuxG,gBAAiBhvG,cAAevC,KAAKwwC,oBAAqB6lD,4BAA6B,kBAAI,EAAKia,YAAYp3E,QAAQ+9E,0BAC3I3gB,iCAAkC,kBAAI,EAAKga,YAAYp3E,QAAQg+E,+BAC/DxW,OAAQ1gG,KAAKmzG,2BAA4BxS,iBAAkB3gG,KAAK2zG,8BAChE/S,aAAc5gG,KAAK+oG,qBAAsBz4D,4BAA6BtwC,KAAK0wC,+BAC3E,cAAC,GAAD,CAAY7W,IAAK75B,KAAKsxG,eAAgB52E,KAAM16B,KAAKuzG,8CAChDld,4BAA6B,kBAAI,EAAKia,YAAYp3E,QAAQ+9E,0BAC1D3gB,iCAAkC,kBAAI,EAAKga,YAAYp3E,QAAQg+E,+BAC/D3mE,iBAAkBvwC,KAAKwwC,oBAExB,cAAC,GAAD,CAAc3W,IAAK75B,KAAKwxG,iBAAkB92E,KAAO16B,KAAKuzG,8CACtDld,4BAA6B,kBAAI,EAAKia,YAAYp3E,QAAQ+9E,0BAC1D10G,cAAevC,KAAKwwC,yBAErB,eAAC,GAAD,CAAaolB,gBAAiB51D,KAAKy8B,YAAa5C,IAAK75B,KAAKyxG,gBAA1D,UACC,cAAC,GAAD,CAAS53E,IAAM75B,KAAKswG,YAAc//D,iBAAkBvwC,KAAKwwC,kBACxD0b,oBAAqBlsD,KAAK0yG,2BAC1B1mD,aAAchsD,KAAK8xG,oBAAqB7lD,aAAcjsD,KAAKwyG,kBAAmB9sE,QAASuqE,EAAS8G,wBAChGtxE,QAASwqE,EAAS+G,wBAAyB7vD,sBAAuBnnD,KAAKgzG,6BACvE7mD,wCAAyC,kBAAI,EAAKilD,iBAAiBl4E,SACnEkzB,cAAepsD,KAAKizG,cAAe5mD,cAAersD,KAAKkzG,qBACvD5mD,UAAWtsD,KAAK6zG,iBAAkBtnD,eAAgBvsD,KAAK8zG,sBACvDtnD,cAAexsD,KAAKqyG,qBACpB5lD,iBAAkBzsD,KAAKsyG,wBACvB5lD,mBAAoB1sD,KAAKozG,4BAC1B,cAAC,GAAD,CAAUv5E,IAAK75B,KAAKuwG,eACpB,cAAC,GAAD,CAAS12E,IAAK75B,KAAKwwG,YAAajgE,iBAAkBvwC,KAAKwwC,kBAAmBmI,WAAY34C,KAAKkyG,cAAet5D,iBAAkB54C,KAAKmxG,eACjI,cAAC,GAAD,CAAuBt3E,IAAO75B,KAAKywG,0BAA2B3xD,wBAAyB9+C,KAAK+xG,kBAC5F,cAAC,GAAD,CAAcl4E,IAAK75B,KAAK0wG,iBAAkB5xD,wBAAyB9+C,KAAK+xG,kBACxE,cAAC,GAAD,CAAgBl4E,IAAK75B,KAAK2wG,mBAAoB7xD,wBAAyB9+C,KAAK+xG,kBAC5E,cAAC,GAAD,CAAiBl4E,IAAK75B,KAAK6wG,oBAAqB/xD,wBAAyB9+C,KAAK+xG,kBAC9E,cAAC,GAAD,CAAgBl4E,IAAK75B,KAAK8wG,mBAAoBhyD,wBAAyB9+C,KAAK+xG,kBAC5E,cAAC,GAAD,CAAYl4E,IAAK75B,KAAK4wG,eAAgBl4C,aAAc14D,KAAKmyG,wBAAyBrzD,wBAAyB9+C,KAAK+xG,kBAChH,cAAC,GAAD,CAAqBl4E,IAAK75B,KAAKgxG,wBAAyBvyC,cAAez+D,KAAK4yG,mBAC3E5iE,aAAchwC,KAAK6yG,oBACnB5iE,gBAAiBjwC,KAAK8yG,uBACtBjyC,eAAgB7gE,KAAK+yG,sBACtBxwG,cAAiBvC,KAAKwwC,sBACtB,cAAC,GAAD,CAAoB3W,IAAK75B,KAAKixG,uBAC9BxoC,gBAAiB,iBAAI,CAAC,EAAK7wC,UAAW,EAAKA,UAAUvV,QACpDsmD,sBAAuB,kBAAI,EAAKl4B,eAAevX,QAAQ6oD,mBAAmB/3E,KAAI,SAAAivB,GAAS,OAAEA,EAAUioB,YACpGwnB,kBAAmB,WAAK,IAAD,EAAC,YAAKstC,sBAAL,SAAqBv7E,KAAK,CAACmtE,gBAAe,KAClEr3D,iBAAkBvwC,KAAKwwC,oBACvB,cAAC,GAAD,CAAY3W,IAAK75B,KAAKywC,eAAgBoqB,OAAQ76D,KAAK2yG,sBAAuBpiE,iBAAkBvwC,KAAKwwC,kBACjGgxC,6BAA8BxhF,KAAKwzG,oCACnC,cAAC,GAAD,CAAa35E,IAAK75B,KAAKkxG,kBACvB,cAAC,GAAD,CAAer3E,IAAK75B,KAAKqxG,uBAE1B,cAAC,GAAD,CAAUx3E,IAAK75B,KAAKixC,aAAcnB,wBAAyB9vC,KAAK2xC,+BAC/DpvC,cAAiBvC,KAAKwwC,oBACvBJ,6BAA8BpwC,KAAKiyC,oCACnC4uB,eAAgB7gE,KAAKijE,sBAAuBpI,OAAQ76D,KAAKm3G,oBAAqBnnE,aAAehwC,KAAK6yG,oBAClG5iE,gBAAkBjwC,KAAK8yG,uBAAwB3iE,WAAcnwC,KAAK+xC,kBAClEzB,4BAA6BtwC,KAAK0wC,6BAA8BwpC,qBAAsBl6E,KAAKm6E,+B,GAxqBxD39E,cCzCjB46G,G,WACpB,cAA2E,IAA9D70G,EAA6D,EAA7DA,cAAe8iC,EAA8C,EAA9CA,cAAegyE,EAA+B,EAA/BA,mBAAoBtH,EAAW,EAAXA,UAAW,oBACzE/vG,KAAKyS,eAAiBlQ,EACtBvC,KAAKs3G,oBAAsBD,EAC3Br3G,KAAKu3G,WAAaxH,EAClB/vG,KAAK+pB,WAAa/pB,KAAK+pB,WAAW5pB,KAAKH,MACvCA,KAAKy6B,KAAOz6B,KAAKy6B,KAAKt6B,KAAKH,MAC3BA,KAAK06B,KAAO16B,KAAK06B,KAAKv6B,KAAKH,MAC3BA,KAAK80E,aAAe90E,KAAK80E,aAAa30E,KAAKH,MAC3CA,KAAKg1E,cAAgBh1E,KAAKg1E,cAAc70E,KAAKH,MAC7C,IAAMm9B,EAAQn9B,KAAKyS,eAAe7N,SAClC5E,KAAKy8E,QAAU,IAAInK,GAAc,CAACM,eAAez1C,EAAOrgC,KAAKqgC,EAC5D4wC,SAAS,IAAKG,SAAS,KAAMD,UAAU,IAAKE,UAAU,IACtD2E,aAAa,IAAKC,cAAc,IAAKE,SAAS,GAAIC,SAAS,GAAIF,WAAWqkC,EAC1E3lD,WAAU,EAAOygB,aAAY,EAAMC,aAAY,EAAMzgB,WAAU,EAC/D0gB,iBAAgB,EAAMc,WAAWj0E,OAAO82B,SAAUk8C,UAAS,EAAM70E,KAAK8qD,GAAWG,UACjFjjB,kBAEDrlC,KAAKy4B,SAAWz4B,KAAKy8E,QAAQ3lC,aAC7B92C,KAAKy4B,SAASsC,UAAUtrB,IAAI,qB,2DAU5BzP,KAAKy8E,QAAQ3H,iB,sCAGb90E,KAAKy8E,QAAQzH,kB,2BAETwiC,GACAA,EAECx3G,KAAKy8E,QAAQtI,WADjBn0E,KAAKy8E,QAAQnI,aAEdt0E,KAAKy8E,QAAQjI,iB,6BAGbx0E,KAAKy8E,QAAQpI,a,mCAQD,IAAD,OACX,OAAO,IAAI92E,SAAQ,SAACO,EAASC,GAC5B,IAAM05G,EAAkB/+E,IAAMuyB,cAAcglD,IAC5C9kD,IAAS/sB,OAAOq5E,EAAgB,CAC/B59E,IAAInB,IAAMC,YACVp2B,cAAc,EAAKkQ,eACnB29F,iBAAiB,SAACsH,GACjB,EAAKC,UAAYD,EACjBniG,YAAW,WACVmiG,EAAS3tF,WAAW,CAACgmF,UAAU,EAAKwH,aAAan5G,MAAK,WACrDN,EAAQ45G,MACNh5G,MAAMX,KACR,GACF,EAAK0+E,QAAQhvE,iBAAiB86C,GAAiBC,UAAW,EAAKmvD,UAAU/lE,QACzE,EAAK6qC,QAAQhvE,iBAAiB86C,GAAiBE,UAAW,EAAKkvD,UAAU/lE,WAG3E,EAAK6qC,QAAQtH,uB,8BA3Cd,OAAOn1E,KAAKy4B,W,yCAGZ,OAAOz4B,KAAKs3G,sB,+BAkBZ,OAAOt3G,KAAK23G,Y,+BAGZ,OAAO33G,KAAKyS,eAAe7N,a,KChDRgzG,IADuBx6G,EAApCyC,iBAAoCzC,EAAlB0C,e,WAEzB,aAAc,oBACb8Q,GAAqB5Q,MACrBA,KAAK+pB,WAAa/pB,KAAK+pB,WAAW5pB,KAAKH,MACvCA,KAAKwvB,mBAAqBxvB,KAAKwvB,mBAAmBrvB,KAAKH,MACvDA,KAAK63G,0CAA4C,IAAIzpF,GAAsB,CAC1EC,MAAM,GAAKC,SAAStuB,KAAKwvB,qB,4DAO1B,IAAIoxD,EAAoB,GAIxB,OAHA5gF,KAAK4J,SAASwF,SAAQ,SAAA6gB,GACrB2wD,EAAoBA,EAAkB72E,OAAOkmB,EAAShO,oBAEhD2+D,I,2CA2BP,IAAMjxD,EAAc,GACdmoF,EAAU,GACZ93G,KAAK4J,WACT5J,KAAK4J,SAASwF,SAAQ,SAAA6gB,GACjBA,EAASN,aACbM,EAASN,YAAYvgB,SAAQ,SAAAygB,GACzBioF,EAAQh1G,QAAQ+sB,EAAQrP,IAAI,IAC9Bs3F,EAAQv3G,KAAKsvB,EAAQrP,IACrBmP,EAAYpvB,KAAKsvB,UAIpB7vB,KAAK8vB,aAAeH,EACpB3vB,KAAK6Q,gBAAgBZ,QAAQ,cAAejQ,KAAK8vB,iB,mCAmCrC,IAAD,OACX,OAAO,IAAIvyB,SAAQ,SAACO,EAASC,GAC5B,IAAM4L,EAAU,GACVouG,EAAiB1rG,GAAc0rG,eAC/BC,EAAyB,IAAI9zF,GAAS6zF,EAAepuG,UAC5C,SAATsuG,IACL,IAAID,EAAuB/sB,UAK1B,OAJA,EAAKrhF,SAAWD,EAChB8H,GAAc,EAAM,eAAe,kBAAI,EAAKke,eAAa,SAACrtB,GAAD,OAAS,EAAKqtB,YAAcrtB,KACrF,EAAKktB,0BACL1xB,IAGD,IAAMyE,EAAgBy1G,EAAuBr/F,OAC7CtM,GAAcmoG,cAAcjyG,GAAenE,MAAK,YAAe,IAAb6xB,EAAY,EAAZA,SACjDtmB,EAAQpJ,KAAK0vB,GACbpV,GAAuBmC,SAAS,EAAMiT,EAAU,cAC/C,EAAK4nF,0CAA0CnpF,SAChDupF,OACEv5G,MAAMX,GAEVk6G,Q,8BAvGD,OAAOj4G,KAAK4J,W,4BAWZ,IAAIsrG,EAAgB,GAOpB,OANAl1G,KAAK4J,SAASwF,SAAQ,SAAA6gB,GACrBA,EAAS5N,MAAMjT,SAAQ,SAAAuzE,GACnBuyB,EAAcpyG,QAAQ6/E,GAAc,GACtCuyB,EAAc30G,KAAKoiF,SAGfuyB,I,iCAGP,IAAMvrG,EAAU,GAOhB,OANA3J,KAAK4J,SAASwF,SAAQ,SAAA6gB,GACrBA,EAAS3b,WAAWlF,SAAQ,SAAAtC,GACxBnD,EAAQ7G,QAAQgK,GAAW,GAC7BnD,EAAQpJ,KAAKuM,SAGTnD,I,kCAGP,OAAO3J,KAAK8vB,e,mCA6BZ,IAAIC,EAAM,KASV,OARA/vB,KAAKiiB,gBAAgB7S,SAAQ,SAAAsgB,GACA,IAAzBA,EAAiBvR,OAAoC,OAAzBuR,EAAiBvR,YAAuCtgB,IAAzB6xB,EAAiBvR,QACtE,OAAN4R,GAGCA,EAAIL,EAAiBvR,SAFxB4R,EAAML,EAAiBvR,UAKlB4R,I,mCAGP,IAAIC,EAAM,KAQV,OAPAhwB,KAAKiiB,gBAAgB7S,SAAQ,SAAAsgB,IACnB,OAANM,GAGCA,EAAIN,EAAiBvR,SAFxB6R,EAAMN,EAAiBvR,UAKlB6R,M,MC3FYkoF,I,OADI96G,EAAlByC,iB,WAEN,WAAYsB,GAAO,IAAD,+BACVg3G,EAA4Bh3G,EAA5Bg3G,WAAYC,EAAgBj3G,EAAhBi3G,aACnBp4G,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,0BAC5BzP,KAAKy4B,SAASkD,UAAYy8E,EAC1Bp4G,KAAKq4G,YAAcr4G,KAAKq4G,YAAYl4G,KAAKH,MACzCA,KAAKs4G,WAAat4G,KAAKs4G,WAAWn4G,KAAKH,MACvCA,KAAKu4G,YAAcv4G,KAAKu4G,YAAYp4G,KAAKH,MACzCA,KAAKw4G,sBAAwBx4G,KAAKw4G,sBAAsBr4G,KAAKH,MAC7DA,KAAKy4B,SAAShrB,iBAAiB,QAASzN,KAAKq4G,aAC7Cr4G,KAAKynG,gBAAkB59E,SAASC,cAAc,OAC9C9pB,KAAKynG,gBAAgB1sE,UAAUtrB,IAAI,WACnCzP,KAAKy4B,SAASwC,YAAYj7B,KAAKynG,iBAC5B0Q,IACClkG,MAAMC,QAAQikG,GAChBA,EAAW/oG,SAAQ,SAAAmY,GAAS,OAAE,EAAKkR,SAASsC,UAAUtrB,IAAI8X,MAE1DvnB,KAAKy4B,SAASsC,UAAUtrB,IAAI0oG,IAE9Bn4G,KAAKk4C,kBAAoB,KACzBl4C,KAAKy6C,mBAAqB,IAAI1C,GAAkB,CAACthB,QAAQz2B,KAAKynG,gBAAiB/sE,KAC9E16B,KAAKu4G,c,0DAGNv4G,KAAKw4G,uBAAsB,GAC3Bx4G,KAAKy6C,mBAAmB7d,a,4CAEHt6B,GAClBA,EACFtC,KAAKy4B,SAASsC,UAAUtrB,IAAI,YAE5BzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,c,iCAKtBjG,GAAS,IAAD,SAClB,UAAA3J,KAAK4J,gBAAL,SAAewF,SAAQ,SAAAsI,GAAK,OAAE,EAAK+vF,gBAAgB37C,YAAYp0C,EAAM+e,YACrEz2B,KAAK4J,SAAU,GACfD,EAAQyF,SAAQ,SAAAsI,GAAQ,IAChB4W,EAAoC5W,EAApC4W,SAAUhsB,EAA0BoV,EAA1BpV,MAAOhE,EAAmBoZ,EAAnBpZ,KAAM65G,EAAazgG,EAAbygG,WACxBM,EAAe5uF,SAASC,cAAc,OAC5C,EAAK29E,gBAAgBxsE,YAAYw9E,GACjCA,EAAa98E,UAAYr9B,EACzBm6G,EAAa19E,UAAUtrB,IAAI,SACxB0oG,IACClkG,MAAMC,QAAQikG,GAChBA,EAAW/oG,SAAQ,SAAAmY,GAAS,OAAEkxF,EAAa19E,UAAUtrB,IAAI8X,MACrDkxF,EAAa19E,UAAUtrB,IAAI0oG,IAE9B7pF,GACFmqF,EAAahrG,iBAAiB,SAAS,SAAC8B,GACvCA,EAAEjN,MAAQA,EACV,EAAKi2G,cACLjqF,EAAS/e,MAGXisC,GAAqBi9D,EAAc,CAAE,aAAc,QAAS,cAC5D,EAAK7uG,SAASrJ,KAAK,CAACk4G,eAAcnqF,WAAUhsB,e,oCAI7C1F,QAAQmC,IAAI,eACZiB,KAAKy6C,mBAAmBjsC,UACxBxO,KAAKw4G,uBAAsB,K,8BA9B3B,OAAOx4G,KAAKy4B,a,MClCOigF,I,kBACpB,cAAgF,IAAnEC,EAAkE,EAAlEA,MAAOx6F,EAA2D,EAA3DA,MAAOrR,EAAoD,EAApDA,UAAWwG,EAAyC,EAAzCA,SAAUisC,EAA+B,EAA/BA,8BAA+B,oBAC9Ev/C,KAAK44G,+BAAiCr5D,EACtCv/C,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,iBAC5BzP,KAAKs4D,cAAet4D,KAAKs4D,cAAcn4D,KAAKH,MAC5CA,KAAK64G,aAAc74G,KAAK64G,aAAa14G,KAAKH,MAC1CA,KAAK84G,mBAAoB94G,KAAK84G,mBAAmB34G,KAAKH,MACtDA,KAAK+4G,gBAAiB/4G,KAAK+4G,gBAAgB54G,KAAKH,MAChDA,KAAKg5G,4BAA6Bh5G,KAAKg5G,4BAA4B74G,KAAKH,MACxEA,KAAKi5G,wBAAyBj5G,KAAKi5G,wBAAwB94G,KAAKH,MAChEA,KAAKk5G,sBAAwBl5G,KAAKk5G,sBAAsB/4G,KAAKH,MAC7DA,KAAKm5G,YAAcn5G,KAAKm5G,YAAYh5G,KAAKH,MACzCA,KAAKo5G,UAAWp5G,KAAKo5G,UAAUj5G,KAAKH,MACpCA,KAAKq5G,mBAAqBr5G,KAAKs4D,cAAc,OAAQ,gBAAiBt4D,KAAKo5G,UAAU,kBACpF,aAAa,SAAClnG,GAAD,OAAaA,EAAU0G,OAAO1G,GAAW,MACvDlS,KAAKs5G,oBAAsBt5G,KAAKs4D,cAAc,QAAS,eACtDt4D,KAAKo5G,UAAU,gBAAiBj7F,EAAMo7F,iBAAkB,aACxDv5G,KAAK84G,oBACN94G,KAAKw5G,uBAAyBx5G,KAAKs4D,cAAc,WAAY,kBAAmBt4D,KAAKo5G,UAAU,oBAC9F,YAAY,SAAC9lG,GAAD,OAAYA,EAASA,EAAStJ,KAAI,SAAA6lB,GAAO,OAAEA,EAAQ/yB,QAAM0G,KAAK,KAAK,MAChFxD,KAAKy5G,wBAA0Bz5G,KAAKs4D,cAAc,YAAa,mBAC9Dt4D,KAAKo5G,UAAU,qBAAsB,cACrC,SAAC7hD,GAAD,OAAuBA,EAAoBA,EAAoBvtD,KAAI,SAAAstD,GAAkB,OAAEA,EAAmBx6D,QAAM0G,KAAK,KAAK,MAC3HxD,KAAK05G,OAASf,EACd34G,KAAK25G,OAASx7F,EACdne,KAAKgf,WAAalS,EAClB9M,KAAKkT,UAAYI,EACjBqlG,EAAMlrG,iBAAiB,QAASzN,KAAKi5G,yBACrC96F,EAAM1Q,iBAAiB,QAASzN,KAAKi5G,yBACrC3lG,EAAS7F,iBAAiB,QAASzN,KAAKi5G,yBACxCnsG,EAAUW,iBAAiB,QAASzN,KAAKi5G,yBACzCj5G,KAAKq5G,mBAAmBp+E,YAAYj7B,KAAK05G,OAAOjjF,SAChDz2B,KAAKs5G,oBAAoBr+E,YAAYj7B,KAAK25G,OAAOljF,SACjDz2B,KAAKw5G,uBAAuBv+E,YAAYj7B,KAAKkT,UAAUujB,SACvDz2B,KAAKy5G,wBAAwBx+E,YAAYj7B,KAAKgf,WAAWyX,SACzD,IAAMmjF,EAAyB/vF,SAASC,cAAc,OACtD8vF,EAAuB7+E,UAAUtrB,IAAI,SACrCmqG,EAAuBj+E,UAAY,eACnC37B,KAAK65G,YAAchwF,SAASC,cAAc,UAC1C9pB,KAAK65G,YAAY9+E,UAAUtrB,IAAI,eAC/BzP,KAAK65G,YAAY9+E,UAAUtrB,IAAI,iBAC/BzP,KAAK65G,YAAY5+E,YAAY2+E,GAC7B55G,KAAK65G,YAAYpsG,iBAAiB,QAASzN,KAAK64G,cAChD74G,KAAKy4B,SAASwC,YAAYj7B,KAAK65G,aAC/B75G,KAAK85G,oCAAsCj/F,GAAuBmC,SAAShd,KAC3Eu/C,EACA,sBAAuBv/C,KAAKg5G,6B,wEAED12G,GAC3BtC,KAAK+5G,qBAAuBz3G,EAC5BtC,KAAKg6G,aAAeh6G,KAAK44G,+BAA+BqB,iBACxDj6G,KAAK+4G,gBAAgB/4G,KAAKg6G,gB,sCAEX13G,GACZA,EACFtC,KAAK65G,YAAY9+E,UAAUtrB,IAAI,WAC3BzP,KAAK65G,YAAY9+E,UAAUnrB,OAAO,a,qCAGnC5P,KAAKg6G,eACTh6G,KAAK44G,+BAA+Bh9E,SAAU,EAC9C57B,KAAK44G,+BAA+BsB,qB,oCAGpCl6G,KAAKi5G,4B,yCAEaz5D,GAClB,IAAIA,EAAW,MAAO,GADO,mBAEAA,EAFA,GAEtB26D,EAFsB,KAEXC,EAFW,KAK7B,YAF+Bv8G,IAAZs8G,GAAmC,OAAZA,OACft8G,IAAVu8G,GAA+B,OAAVA,EAI/B,GAAN,OAAUp6G,KAAKk5G,sBAAsBiB,GAArC,cAAqDn6G,KAAKk5G,sBAAsBkB,IADzE,QAAN,OAAep6G,KAAKk5G,sBAAsBiB,IAGtC,MAAN,OAAan6G,KAAKk5G,sBAAsBkB,M,4CAEnB93G,GACrB,QAAWzE,IAARyE,GAA2B,OAARA,EAAa,OAAOA,EAC1C,IAAI8H,EAAMwO,OAAOtW,GAEjB,OAAOiW,GADPnO,EAAMA,EAAIhB,MAAM,KAAK,M,gDAIlBpJ,KAAKq6G,2BACPr6G,KAAKy4B,SAASsC,UAAUnrB,OAAO5P,KAAKq6G,0BACpCr6G,KAAKq6G,yBAA2B,MAEjCr6G,KAAKy4B,SAASsC,UAAUnrB,OAAO,iB,gCAEtB0qG,EAAkBf,GAAiB,IAAD,OAC3C,OAAO,WACN,EAAKN,0BACL,EAAKxgF,SAASsC,UAAUtrB,IAAI,eAC5B,EAAKgpB,SAASsC,UAAUtrB,IAAI6qG,GAC5B,EAAKD,yBAA2BC,EAChCf,GAAiBA,O,oCAGLgB,EAAYC,EAAc7iF,EAASzmB,EAAcupG,GAC9D,IAAMC,EAAgB7wF,SAASC,cAAc,UAC7C4wF,EAAc3/E,UAAUtrB,IAAI,iBAC5BirG,EAAc3/E,UAAUtrB,IAAI+qG,GAC5B,IAAMhkC,EAAe3sD,SAASC,cAAc,OAC5C0sD,EAAaz7C,UAAUtrB,IAAI,SAC3BirG,EAAcjtG,iBAAiB,QAASkqB,GACxC+iF,EAAcz/E,YAAYu7C,GAE1Bx2E,KAAK26G,gBAAkB,IAAI/uD,GAAmB,CAC7CrkC,UAAU,cACV+U,OAAOpwB,EAAKQ,OAAO,iBACnBirB,QAAQ33B,KAAKm5G,YACb39D,sBAAqB,IACtBA,GAAqBx7C,KAAK26G,gBAAgBlkF,QAAS,CAAC,QAAS,YAAa,eAC1E+/C,EAAav7C,YAAYj7B,KAAK26G,gBAAgBlkF,SAC9C,IAAMmkF,EAAmB/wF,SAASC,cAAc,OAYhD,OAXA8wF,EAAiB7/E,UAAUtrB,IAAI,QAC/BmrG,EAAiBj/E,UAAY4+E,EAC7B/jC,EAAav7C,YAAY2/E,GACzB56G,KAAKy4B,SAASwC,YAAYy/E,GAC1B7/F,GAAuBmC,SAAShd,KAAMA,KAAK44G,+BAAgC1nG,GAC1E,SAAC5O,GACA,IAAIhE,EAAOm8G,EAAiBn4G,GAClB,KAAPhE,IACFA,EAAK,IAAD,OAAKA,EAAL,MACLs8G,EAAiBj/E,UAAjB,UAAgC4+E,EAAhC,YAA8Cj8G,MAEzCo8G,I,8BAGP,OAAO16G,KAAKy4B,a,MCvIOoiF,G,WACpB,cAA4C,IAA/B3S,EAA8B,EAA9BA,gBAAiB5pG,EAAa,EAAbA,KAAMgE,EAAO,EAAPA,MAAO,oBAC1CtC,KAAK0+C,OAASp8C,EACdtC,KAAKmoG,iBAAmBD,EACxBloG,KAAKi3C,SAAWj3C,KAAKi3C,SAAS92C,KAAKH,MACnCA,KAAK86G,OAAS96G,KAAK86G,OAAO36G,KAAKH,MAC/BA,KAAK+6G,SAAW/6G,KAAK+6G,SAAS56G,KAAKH,MACnCA,KAAKkf,WAAY,EACjBlf,KAAKy4B,SAAW5O,SAASC,cAAc,UACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,uBAC5BzP,KAAKy4B,SAASkD,UAAYr9B,EAC1B0B,KAAKy4B,SAAShrB,iBAAiB,QAASzN,KAAKi3C,UAC7CuE,GAAqBx7C,KAAKy4B,SAAU,CAAC,QAAS,YAAa,e,+DAEzCn2B,GACfA,EACFtC,KAAKy4B,SAASsC,UAAUnrB,OAAO,wBAE/B5P,KAAKy4B,SAASsC,UAAUtrB,IAAI,0B,iCAS7BzP,KAAKmoG,iBAAiBnoG,Q,+BAGtBA,KAAKkf,WAAY,EACjBlf,KAAKy4B,SAASsC,UAAUtrB,IAAI,c,iCAG5BzP,KAAKkf,WAAY,EACjBlf,KAAKy4B,SAASsC,UAAUnrB,OAAO,c,+BAd/B,OAAO5P,KAAKkf,Y,4BAGZ,OAAOlf,KAAK0+C,S,8BAcZ,OAAO1+C,KAAKy4B,a,KCtCOuiF,G,WACpB,cAAuD,IAAD,OAA/Bz7D,GAA+B,EAAzCtvB,SAAyC,EAA/BsvB,+BAA+B,oBACrD/xC,EAAYxN,MACZA,KAAK44G,+BAAiCr5D,EACtCv/C,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,UAC5BzP,KAAKi7G,sBAAuBj7G,KAAKi7G,sBAAsB96G,KAAKH,MAC5DA,KAAKk7G,cAAel7G,KAAKk7G,cAAc/6G,KAAKH,MAC5CA,KAAKm7G,+BAAiCn7G,KAAKm7G,+BAA+Bh7G,KAAKH,MAC/EA,KAAKo7G,0CAA4Cp7G,KAAKo7G,0CAA0Cj7G,KAAKH,MACrGA,KAAKq7G,wBAA0B,IAAInuF,IACnCltB,KAAKs7G,eAAe,GACpB/7D,EAA8Bg8D,gBAAgBnsG,SAAQ,SAAAosG,GAAU,OAAE,EAAKP,sBAAsBO,MAC7Fx7G,KAAKy7G,0BAA4B5gG,GAAuBmC,SAAShd,KAAMu/C,EACvE,YAAav/C,KAAKm7G,gCAClBn7G,KAAK07G,kDAAoD7gG,GAAuBmC,SAAShd,KACzFu/C,EACA,qCAAsCv/C,KAAKo7G,2C,2EAEb94G,GAC3BtC,KAAK27G,2BACP37G,KAAK27G,yBAAyBZ,WAC9B/6G,KAAK27G,yBAAyB,MAE/B,IAAMC,EAAe57G,KAAKq7G,wBAAwBvhG,IAAIxX,GAClDs5G,IACJA,EAAad,SACb96G,KAAK27G,yBAAyBC,K,gEAEWt5G,GACzCtC,KAAKs7G,eAAelsG,SAAQ,SAAAwsG,GAC3B,IAAM1pG,EAAY0pG,EAAat5G,MAC/Bs5G,EAAaC,oBAAwB,OAALv5G,QAAK,IAALA,OAAA,EAAAA,EAAOQ,QAAQoP,KAAY,Q,4CAGvCA,GACrB,IAAM0pG,EAAe,IAAIf,GAAiC,CACzD3S,gBAAgBloG,KAAKk7G,cAAchpG,GACnC5T,KAAKsa,OAAO1G,GACZ5P,MAAM4P,IAEPlS,KAAKq7G,wBAAwBxhG,IAAI3H,EAAW0pG,GAC5C57G,KAAKy4B,SAASwC,YAAY2gF,EAAanlF,SACvCz2B,KAAKs7G,eAAe/6G,KAAKq7G,K,oCAEZ1pG,GAAW,IAAD,OACvB,OAAO,SAAC0pG,GACP,GAAGA,EAAav9F,SAGf,OAFAu9F,EAAab,gBACb,EAAKnC,+BAA+B1mG,UAAU,MAG/C,EAAK0mG,+BAA+B1mG,UAAYA,EAChD,EAAKjE,cAAc,CAAC5Q,KAAK,a,8BAI1B,OAAO2C,KAAKy4B,a,KCzDOqjF,G,WACpB,cAAwD,IAA3C/L,EAA0C,EAA1CA,UAAWxwD,EAA+B,EAA/BA,8BAA+B,oBACtD/xC,EAAYxN,MACZA,KAAK44G,+BAAiCr5D,EACtCv/C,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,YAC5BzP,KAAK+7G,yBAA0B/7G,KAAK+7G,yBAAyB57G,KAAKH,MAClEA,KAAKg8G,sBAAuBh8G,KAAKg8G,sBAAsB77G,KAAKH,MAC5DA,KAAKi8G,iBAAkBj8G,KAAKi8G,iBAAiB97G,KAAKH,MAClDA,KAAKk8G,yBAA0Bl8G,KAAKk8G,yBAAyB/7G,KAAKH,MAClEA,KAAKm8G,gBAAiBn8G,KAAKm8G,gBAAgBh8G,KAAKH,MAChDA,KAAKo8G,0CAA2Cp8G,KAAKo8G,0CAA0Cj8G,KAAKH,MACpGA,KAAKq8G,sBAAwB,IAAInvF,IACjCltB,KAAKs7G,eAAe,GACpBt7G,KAAKs8G,yBAA2BzhG,GAAuBmC,SAAShd,KAC/D+vG,EAAW,cAAe/vG,KAAKi8G,kBAChCj8G,KAAKu8G,iCAAmC1hG,GAAuBmC,SAAShd,KACvEu/C,EAA+B,WAAYv/C,KAAKk8G,0BACjDl8G,KAAKw8G,kDAAoD3hG,GAAuBmC,SAAShd,KACxFu/C,EAA+B,oCAAqCv/C,KAAKo8G,2C,6DAE1D9oG,GAAU,IAAD,OACnBwkG,EAAU,GACR,OAARxkG,QAAQ,IAARA,KAAUlE,SAAQ,SAAAygB,GACjBioF,EAAQv3G,KAAKsvB,EAAQrP,IACF,EAAK67F,sBAAsBviG,IAAI+V,EAAQrP,KACzC,EAAKu7F,yBAAyBlsF,MAEhD5b,MAAM4J,KAAK7d,KAAKq8G,sBAAsBpvF,QAAQ7d,SAAQ,SAAAqhB,GAClDqnF,EAAQh1G,QAAQ2tB,IAAY,GAC/B,EAAKurF,sBAAsBvrF,Q,gEAGanuB,GACzC,GAAIA,EAAJ,CACA,IAAMm6G,EAAmB,OAAGn6G,QAAH,IAAGA,OAAH,EAAGA,EAAO0H,KAAI,SAAA6lB,GAAO,OAAEA,EAAQrP,MACxDxgB,KAAKs7G,eAAelsG,SAAQ,SAAAwsG,GAC3B,IAAMnrF,EAAYmrF,EAAat5G,MAC/B1F,QAAQmC,IAAI0xB,GACZ,IAAMisF,GAAsBD,GAAsBA,EAAoB35G,QAAQ2tB,IAAY,EAC1F7zB,QAAQmC,IAAI29G,GACZd,EAAaC,mBAAmBa,S,4CAGZjsF,GACrB,IAAMmrF,EAAe57G,KAAKq8G,sBAAsBviG,IAAI2W,GACpDzwB,KAAKy4B,SAASwC,YAAY2gF,EAAanlF,SACvCz2B,KAAKq8G,sBAAsBhjG,OAAOoX,GAClCzwB,KAAKs7G,eAAe56G,OAAOV,KAAKs7G,eAAex4G,QAAQ84G,GAAe,K,+CAE9Ct5G,GAAO,IAAD,OAC1BA,IACDA,EAAM9C,OAAO,IAChBQ,KAAKs7G,eAAelsG,SAAQ,SAAAwsG,GAAY,OAAEA,EAAab,cACvDz4G,EAAM8M,SAAQ,SAAAygB,GACb,EAAKwsF,sBAAsBviG,IAAI+V,EAAQrP,IAAIs6F,gB,+CAGpBjrF,GACxB,IAAM+rF,EAAe,IAAIf,GAAiC,CACzD3S,gBAAgBloG,KAAKm8G,gBAAgBtsF,GACrCvxB,KAAKuxB,EAAQ/yB,KACbwF,MAAMutB,EAAQrP,KAEfxgB,KAAKq8G,sBAAsBxiG,IAAIgW,EAAQrP,GAAIo7F,GAC3C57G,KAAKy4B,SAASwC,YAAY2gF,EAAanlF,SACvCz2B,KAAKs7G,eAAe/6G,KAAKq7G,K,sCAEV/rF,GAAS,IAAD,OACvB,OAAO,SAAC+rF,GACP,GAAGA,EAAav9F,SAGf,OAFAu9F,EAAab,gBACb,EAAKwB,iCAAiC1iG,IAAI,MAG3C,EAAK0iG,iCAAiC1iG,IAAI,CAACgW,IAC3C,EAAK5hB,cAAc,CAAC5Q,KAAK,a,8BAI1B,OAAO2C,KAAKy4B,a,KC5EOkkF,G,WACpB,cAAsE,IAAzD5M,EAAwD,EAAxDA,UAAWxwD,EAA6C,EAA7CA,8BAA6C,EAAdi3B,aAAc,oBACpEhpE,EAAYxN,MACZA,KAAK48G,cAAelkF,IAAMC,YAC1B34B,KAAK68G,cAAenkF,IAAMC,YAC1B34B,KAAK44G,+BAAiCr5D,EACtCv/C,KAAK88G,mBAAoB98G,KAAK88G,mBAAmB38G,KAAKH,MACtDA,KAAK+8G,yBAA2B/8G,KAAK+8G,yBAAyB58G,KAAKH,MACnEA,KAAKg9G,yBAA2Bh9G,KAAKg9G,yBAAyB78G,KAAKH,MACnEA,KAAKu5G,gBAAkBv5G,KAAKu5G,gBAAgBp5G,KAAKH,MACjDA,KAAKi9G,uBAAyBj9G,KAAKi9G,uBAAuB98G,KAAKH,MAC/DA,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,SAC5BzP,KAAKk9G,cAAerzF,SAASC,cAAc,OAC3C9pB,KAAKk9G,cAAcniF,UAAUtrB,IAAI,SACjCzP,KAAKy4B,SAASwC,YAAYj7B,KAAKk9G,eAC/Bl9G,KAAKm9G,yBAA2BtzF,SAASC,cAAc,OACvD9pB,KAAKm9G,yBAAyBpiF,UAAUtrB,IAAI,sBAC5CzP,KAAKo9G,yBAA2BvzF,SAASC,cAAc,OACvD9pB,KAAKo9G,yBAAyBriF,UAAUtrB,IAAI,sBAC5CzP,KAAKy4B,SAASwC,YAAYj7B,KAAKm9G,0BAE/B3hE,GAAsBx7C,KAAKm9G,yBAA0B,CAAC,QAAS,YAAa,eAC5E3hE,GAAsBx7C,KAAKo9G,yBAA0B,CAAC,QAAS,YAAa,eAC5E,IAAMjpD,EAAgBz7B,IAAMuyB,cAAcvH,IAE1CyH,IAAS/sB,OAAO+1B,EAChB,CACCt6B,IAAI75B,KAAK48G,cACT7sF,IAAIggF,EAAUsN,aAAcrtF,IAAI+/E,EAAUuN,aAAc35D,QAAQosD,EAAUsN,aAC1Ez5D,eAAe5jD,KAAK+8G,yBACpBl5D,cAAa,IAEd7jD,KAAKm9G,0BACLhyD,IAAS/sB,OAAO+1B,EAChB,CACCt6B,IAAI75B,KAAK68G,cACT9sF,IAAIggF,EAAUsN,aAAcrtF,IAAI+/E,EAAUuN,aAAc35D,QAAQosD,EAAUuN,aAC1E15D,eAAe5jD,KAAKg9G,yBACpBn5D,cAAa,IAEd7jD,KAAKo9G,0BACLp9G,KAAK48G,cAAc1jF,QAAQ5jB,OAAOmhB,QAAQkF,UAAY,MACtD37B,KAAK68G,cAAc3jF,QAAQ5jB,OAAOmhB,QAAQkF,UAAY,MACtD37B,KAAKm9G,yBAAyBliF,YAAYj7B,KAAKo9G,0BAC/Cp9G,KAAKu9G,2BAA6B1iG,GAAuBmC,SAAShd,KAAMu/C,EACvE,aACAv/C,KAAK88G,oBACNv9D,EAA8BC,WAAa,CAACuwD,EAAUsN,aAActN,EAAUuN,cAC9E1gH,QAAQmC,IAAI,uBAOZiB,KAAKw9G,uBAAwB,E,qEAG7Bx9G,KAAKiO,cAAc,CAAC5Q,KAAK,Y,wCAGrB2C,KAAKw9G,wBACTx9G,KAAKw9G,uBAAwB,EAC7Bx9G,KAAK48G,cAAc1jF,QAAQ0rB,sBAC3B5kD,KAAK68G,cAAc3jF,QAAQ0rB,yB,yCAETtiD,GAClB,GAAIA,EAAJ,CADwB,mBAENA,EAFM,GAEjBytB,EAFiB,KAEZC,EAFY,KAGxBhwB,KAAK48G,cAAc1jF,QAAQkrB,SAASr0B,GACpC/vB,KAAK68G,cAAc3jF,QAAQkrB,SAASp0B,UACfnyB,IAANkyB,GAAyB,OAANA,WACblyB,IAANmyB,GAAyB,OAANA,IACVD,EAAIC,EAC3BhwB,KAAKy4B,SAASsC,UAAUtrB,IAAI,WAG5BzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,c,+CAERtN,GACxB,QAAWzE,IAARyE,GAA2B,OAARA,EAAtB,CACA,IAAMm7G,EAAoBz9G,KAAKu9G,2BAA2BzjG,MAC1D9Z,KAAKu9G,2BAA2B1jG,IAAI,CAACvX,EAAOm7G,EAAkBA,EAAkB,GAAG,U,+CAE3Dn7G,GACxB,QAAWzE,IAARyE,GAA2B,OAARA,EAAtB,CACA,IAAMm7G,EAAoBz9G,KAAKu9G,2BAA2BzjG,MAC1D9Z,KAAKu9G,2BAA2B1jG,IAAI,CAAC4jG,EAAkBA,EAAkB,GAAG,KAAMn7G,O,8BAGlF,OAAOtC,KAAKy4B,a,KC/FOilF,G,WACpB,cACiC,IAAD,OADTlmD,GACS,EADnBvnC,SACmB,EADTunC,qBACtBjY,EAA+B,EAA/BA,8BAA+B,oBAC/B/xC,EAAYxN,MACZA,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,aAC5BzP,KAAK29G,2BAA4B39G,KAAK29G,2BAA2Bx9G,KAAKH,MACtEA,KAAK49G,4CAA6C59G,KAAK49G,4CAA4Cz9G,KAAKH,MACxGA,KAAK69G,mBAAoB79G,KAAK69G,mBAAmB19G,KAAKH,MACtDA,KAAK89G,mBAAoB99G,KAAK89G,mBAAmB39G,KAAKH,MACtDA,KAAKs7G,eAAiB,GACtBt7G,KAAK+9G,+BAAiC,IAAI7wF,IAC1CsqC,EAAoB7tD,QAAQyF,SAAQ,SAAAkoD,GAAkB,OAAE,EAAKqmD,2BAA2BrmD,MACxFt3D,KAAKg+G,2BAA4BnjG,GAC/BmC,SAAShd,KAAMu/C,EAA+B,aAAcv/C,KAAK89G,oBACnE99G,KAAKi+G,oDAAsDpjG,GAAuBmC,SAAShd,KAC3Fu/C,EACA,sCAAuCv/C,KAAK49G,6C,+DAE1Bt7G,GAAO,IAAD,OACxBtC,KAAKs7G,eAAelsG,SAAQ,SAAAwsG,GAAY,OAAEA,EAAab,cACnDz4G,GACJA,EAAM8M,SAAQ,SAAAkoD,GAAkB,OAAE,EAAKymD,+BACrCjkG,IAAIw9C,GAAoBwjD,c,kEAEiBx4G,GAC3C1F,QAAQmC,IAAI,uCACZiB,KAAKs7G,eAAelsG,SAAQ,SAAAwsG,GAC3B,IAAMtkD,EAAqBskD,EAAat5G,MACxC1F,QAAQmC,IAAI,sBACZnC,QAAQmC,IAAIu4D,GACZskD,EAAaC,oBAAqBv5G,GAAQA,EAAMQ,QAAQw0D,IAAqB,Q,iDAGpDA,GAC1B,IAAMskD,EAAe,IAAIf,GAAiC,CACzD3S,gBAAgBloG,KAAK69G,mBAAmBvmD,GACxCh5D,KAAKg5D,EAAmBx6D,KAAK,GAC7BwF,MAAMg1D,IAEPt3D,KAAK+9G,+BAA+BlkG,IAAIy9C,EAAoBskD,GAC5D57G,KAAKy4B,SAASwC,YAAY2gF,EAAanlF,SACvCz2B,KAAKs7G,eAAe/6G,KAAKq7G,K,yCAEPtkD,GAAoB,IAAD,OACrC,OAAO,SAACskD,GACP,GAAGA,EAAav9F,SAGf,OAFAu9F,EAAab,gBACb,EAAKiD,2BAA2BnkG,IAAI,MAGrC,EAAKmkG,2BAA2BnkG,IAAI,CAACy9C,IACrC,EAAKrpD,cAAc,CAAC5Q,KAAK,a,8BAI1B,OAAO2C,KAAKy4B,a,KC1DRylF,GAAqB,CAACC,UAAU,YAAarsG,UAAU,YAC5DssG,WAAW,aAAcC,SAAS,YACdC,G,WACpB,cAA+D,IAAD,OAAjDvO,EAAiD,EAAjDA,UAAWv4C,EAAsC,EAAtCA,oBAAqB0iD,EAAiB,EAAjBA,gBAAiB,oBAC7Dl6G,KAAKu3G,WAAaxH,EAClB/vG,KAAKu+G,gBAAkBv+G,KAAKu3G,WAAWt1F,gBAAgB5f,QAAO,SAAAm8G,GAAiB,OAAEA,EAAkBC,eACnGz+G,KAAKq3D,qBAAuBG,EAC5Bx3D,KAAK0+G,yBAA2BxE,EAChCl6G,KAAKk6G,gBAAkBl6G,KAAKk6G,gBAAgB/5G,KAAKH,MACjDA,KAAKo1G,6BAA+Bp1G,KAAKo1G,6BAA6Bj1G,KAAKH,MAC3EwN,EAAYxN,MACZA,KAAKq/F,UAAW,EAChBr/F,KAAK2+G,2CAA6C3+G,KAAK2+G,2CAA2Cx+G,KAAKH,MACvGA,KAAK4+G,oCAAsC5+G,KAAK4+G,oCAAoCz+G,KAAKH,MACzFA,KAAK6+G,0CAA4C7+G,KAAK6+G,0CAA0C1+G,KAAKH,MACrGA,KAAK8+G,2CAA6C9+G,KAAK8+G,2CAA2C3+G,KAAKH,MACvGA,KAAK++G,2CAA6C/+G,KAAK++G,2CAA2C5+G,KAAKH,MACvGyR,GAAczR,KAAM,aAAa,kBAAI,EAAKkS,aAAW,SAAC5P,GAAD,OAAS,EAAK4P,UAAY5P,KAC/EmP,GAAczR,KAAM,sCAAsC,kBAAI,EAAKg/G,sCACnEvtG,GAAczR,KAAM,cAAc,kBAAI,EAAKsU,cAAY,SAAChS,GAAD,OAAS,EAAKgS,WAAahS,KAClFmP,GAAczR,KAAM,uCAAuC,kBAAI,EAAKi/G,uCACpExtG,GAAczR,KAAM,YAAY,kBAAI,EAAKsT,YAAU,SAAChR,GAAD,OAAS,EAAKgR,SAAWhR,KAC5EmP,GAAczR,KAAM,qCAAqC,kBAAI,EAAKk/G,qCAClEztG,GAAczR,KAAM,cAAc,kBAAI,EAAKw/C,cAAY,SAACl9C,GAAD,OAAS,EAAKk9C,WAAal9C,KAClFmP,GAAczR,KAAM,uCAAuC,kBAAI,EAAKm/G,uCACpE1tG,GAAczR,KAAM,WAAW,kBAAI,EAAK47B,WAAS,SAACt5B,GAAD,OAAS,EAAKs5B,QAAUt5B,KACzEmP,GAAczR,KAAM,uBAAuB,kBAAI,EAAK80G,mC,8DAWpD90G,KAAK0+G,yBAAyB1+G,Q,iEAEYo/G,EAAuBnvF,GAAU,IAAD,OACtEovF,EAAsBr/G,KAAKu+G,gBAC/B,GAAGtuF,EAAS,CACX,IAAMqvF,EAA2BrvF,EAAShO,gBAC1Co9F,EAAsBA,EAAoBh9G,QAAO,SAAAqtB,GAAgB,OAAE4vF,EAAyBx8G,QAAQ4sB,MAMrG,GAJG0vF,IAAwBlB,GAAmBqB,eACzB1hH,IAAlBmC,KAAKqS,YAA0C,OAAlBrS,KAAKqS,aACpCgtG,EAAsBA,EAAoBh9G,QAAO,SAAAm8G,GAAiB,OACjEA,EAAkBtsG,YAAY,EAAKG,eAClC+sG,IAAwBlB,GAAmBpsG,gBAA8BjU,IAAnBmC,KAAKmvB,aAA4C,OAAnBnvB,KAAKmvB,aAAoBnvB,KAAKmvB,YAAY3vB,OAAO,EACxI,CACC,IAAI8U,EAAa,GACjBtU,KAAKmvB,YAAY/f,SAAQ,SAAAkoD,GAAkB,OAC1ChjD,EAAaA,EAAWvK,OAAOutD,EAAmBF,2BAEnDioD,EAAsBA,EAAoBh9G,QACzC,SAAAm8G,GAAiB,OAAElqG,EAAWxR,QAAQ07G,EAAkB1xG,YAAY,KAStE,GANGsyG,IAAwBlB,GAAmBE,YAC3Cp+G,KAAKw/G,kBACPH,EAAsBA,EAAoBh9G,QACzC,SAAAm8G,GAAiB,OAAE,EAAKgB,gBAAgBhB,EAAkBrgG,WAGzDihG,IAAwBlB,GAAmBG,eAC1BxgH,IAAjBmC,KAAKkT,WAAwC,OAAjBlT,KAAKkT,UAAiB,CACpD,IAAMusG,EAAqBz/G,KAAKkT,UAAUlJ,KAAI,SAAA6lB,GAAO,OAAEA,EAAQrP,MAC/D6+F,EAAsBA,EAAoBh9G,QAAO,SAAAm8G,GAAoB,IAAD,gBAChDA,EAAkBlrG,UAD8B,IACnE,IAAI,EAAJ,qBAA8C,CAAC,IAAvCuc,EAAsC,QAC7C,GAAG4vF,EAAmB38G,QAAQ+sB,EAAQrP,IACrC,OAAO,GAH0D,8BAKnE,OAAO,KAGT,OAAO6+F,I,oDAkBsBpvF,GAC7B,OAAOjwB,KAAK2+G,2CAA2C,KAAM1uF,K,mDAEjCA,GAAU,IAAD,OAC/BqvF,EAA2BrvF,EAAShO,gBACpCyX,EAAiB15B,KAAKu+G,gBAAgBl8G,QAAO,SAAAm8G,GAAiB,OAClEc,EAAyBx8G,QAAQ07G,IAAoB,KACnDa,EAAsB3lF,EAAer3B,QAAO,SAAAm8G,GAAiB,OAC/DA,EAAkBtsG,YAAY,EAAKG,cACrC,QAAsBxU,IAAnBmC,KAAKmvB,aAA4C,OAAnBnvB,KAAKmvB,YAAmB,CACxD,IAAI7a,EAAa,GACjBtU,KAAKmvB,YAAY/f,SAAQ,SAAAkoD,GAAkB,OAC1ChjD,EAAaA,EAAWvK,OAAOutD,EAAmBF,2BAEnDioD,EAAsBA,EAAoBt1G,OAAO2vB,EAAer3B,QAC/D,SAAAm8G,GAAiB,OAAElqG,EAAWxR,QAAQ07G,EAAkB1xG,YAAY,MAMtE,GAHAuyG,EAAsBA,EAAoBt1G,OAAO2vB,EAAer3B,QAC/D,SAAAm8G,GAAiB,OAAE,EAAKgB,gBAAgBhB,EAAkBrgG,gBAEvCtgB,IAAjBmC,KAAKkT,WAAwC,OAAjBlT,KAAKkT,UAAiB,CACpD,IAAMusG,EAAqBz/G,KAAKkT,UAAUlJ,KAAI,SAAA6lB,GAAO,OAAEA,EAAQrP,MAC/D6+F,EAAsBA,EAAoBt1G,OAAO2vB,EAAer3B,QAAO,SAAAm8G,GAAoB,IAAD,gBACtEA,EAAkBlrG,UADoD,IACzF,IAAI,EAAJ,qBAA8C,CAAC,IAAvCuc,EAAsC,QAC7C,GAAG4vF,EAAmB38G,QAAQ+sB,EAAQrP,IACrC,OAAO,GAHgF,8BAKzF,OAAO,MAGT,IAAMk/F,EAA+B,GAKrC,OAJAL,EAAoBjwG,SAAQ,SAAAuwG,GACxBD,EAA6B58G,QAAQ68G,GAAoB,GAC3DD,EAA6Bn/G,KAAKo/G,MAE7BN,I,kEA4BoC,IAAD,OAC1Cr/G,KAAK4/G,oCAAsC,GAC3C5/G,KAAK2+G,2CAA2CT,GAAmBC,WAAW/uG,SAAQ,SAAAovG,GACrF,IAAMtsG,EAAYssG,EAAkBtsG,UACjC,EAAK0tG,oCAAoC98G,QAAQoP,GAAW,GAC9D,EAAK0tG,oCAAoCr/G,KAAK2R,MAEhDlS,KAAK6Q,gBAAgBZ,QAAQ,qCAAsCjQ,KAAK4/G,uC,mEAiB5B,IAAD,OACrCC,EAAmC,IAAI3yF,IAC7CltB,KAAKq3D,qBAAqB1tD,QAAQyF,SAAQ,SAAAkoD,GACzCA,EAAmBF,uBAAuBhoD,SAAQ,SAAAtC,GAC7C+yG,EAAiCzmG,IAAItM,IACxC+yG,EAAiChmG,IAAI/M,EAAWwqD,SAGnDt3D,KAAK8/G,mCAAqC,GAC1C9/G,KAAK2+G,2CAA2CT,GAAmBpsG,WAAW1C,SAAQ,SAAAovG,GACrF,IAAMlnD,EAAqBuoD,EAAiC/lG,IAAI0kG,EAAkB1xG,WAC/E,EAAKgzG,mCAAmCh9G,QAAQw0D,GAAoB,GACtE,EAAKwoD,mCAAmCv/G,KAAK+2D,MAE/Ct3D,KAAK6Q,gBAAgBZ,QAAQ,sCAAuCjQ,KAAK8/G,sC,iEAiB/B,IAAD,OACzC9/G,KAAK+/G,mCAAqC,GAC1C//G,KAAK2+G,2CAA2CT,GAAmBG,UAAUjvG,SAAQ,SAAAovG,GAAoB,IAAD,EACvG,UAAAA,EAAkBlrG,gBAAlB,SAA4BlE,SAAQ,SAAAygB,GAChC,EAAKkwF,mCAAmCj9G,QAAQ+sB,GAAS,GAC3D,EAAKkwF,mCAAmCx/G,KAAKsvB,SAGhD7vB,KAAK6Q,gBAAgBZ,QAAQ,oCAAqCjQ,KAAK+/G,sC,mEAkB3B,IAAD,OACrCC,EAAqBhgH,KAAK2+G,2CAA2CT,GAAmBE,YAC9F,IAAK4B,GACFA,EAAmBxgH,OAAO,EAAG,OAAO,KACvCQ,KAAKigH,UAAU,KAAMjgH,KAAKkgH,UAAU,KACpCF,EAAmB5wG,SAAQ,SAAAovG,IACN,OAAjB,EAAKyB,WAAkBzB,EAAkBrgG,MAAM,EAAK8hG,aACtD,EAAKA,UAAYzB,EAAkBrgG,QAChB,OAAjB,EAAK+hG,WAAkB1B,EAAkBrgG,MAAM,EAAK+hG,aACrD,EAAKA,UAAY1B,EAAkBrgG,UAEtCne,KAAKmgH,qCAAuC,CAACngH,KAAKigH,UAAWjgH,KAAKkgH,WAClElgH,KAAK6Q,gBAAgBZ,QAAQ,sCAAuCjQ,KAAKmgH,wC,4DAMzE,QAAsBtiH,IAAnBmC,KAAKwrG,aAA4C,OAAnBxrG,KAAKwrG,YAAtC,CAKA,IAAM3tF,EAAO7d,KAAKwrG,YAAY,GACxB1tF,EAAK9d,KAAKwrG,YAAY,GAC5B,QAAU3tG,IAAPggB,GAAyB,OAAPA,EACpB,YAAQhgB,IAALigB,GAAqB,OAALA,OAClB9d,KAAKw/G,gBAAkB,SAACrhG,GACvB,OAAQA,GAAON,GAAQM,GAAOL,SAIhC9d,KAAKw/G,gBAAkB,SAACrhG,GAAD,OAASA,GAAON,IAOxC7d,KAAKw/G,qBAJG3hH,IAALigB,GAAqB,OAALA,EAII,KAHC,SAACK,GAAD,OAASA,GAAOL,QAhBvC9d,KAAKw/G,gBAAkB,O,8BAtOxB,OAAOx/G,KAAKq/F,U,aAED/8F,GACRtC,KAAKq/F,WAAY/8F,IACpBtC,KAAKq/F,SAAW/8F,EAChBtC,KAAK6Q,gBAAgBZ,QAAQ,UAAW3N,M,uCA8CxC,IAAM89G,EAA6C,OAAlBpgH,KAAKqS,iBAAqCxU,IAAlBmC,KAAKqS,YAAwBrS,KAAKqS,WAAW,EAChGguG,EAA8C,OAAnBrgH,KAAKmvB,kBAAuCtxB,IAAnBmC,KAAKmvB,aAAyBnvB,KAAKmvB,YAAY3vB,OAAO,EAC1G8gH,EAA0C,OAAjBtgH,KAAKkT,gBAAmCrV,IAAjBmC,KAAKkT,WAAuBlT,KAAKkT,UAAU1T,OAAO,EAClG+gH,EAA8C,OAAnBvgH,KAAKwrG,kBAAuC3tG,IAAnBmC,KAAKwrG,eAC7DxrG,KAAKwrG,YAAY,KAAKxrG,KAAKu3G,WAAW8F,cAAcr9G,KAAKwrG,YAAY,KAAKxrG,KAAKu3G,WAAW+F,cAQ5F,OAAO8C,GAAwBC,GAAyBC,GAAuBC,I,sCAwC1D,IAAD,OACpB,YAA2B1iH,IAAxBmC,KAAKwgH,kBAAsD,OAAxBxgH,KAAKwgH,mBAE3CxgH,KAAKwgH,iBAAkB,GACvBxgH,KAAKu+G,gBAAgBnvG,SAAQ,SAAAovG,GAC5B,IAAMtsG,EAAYssG,EAAkBtsG,UACjC,EAAKsuG,iBAAiB19G,QAAQoP,GAAW,GAC3C,EAAKsuG,iBAAiBjgH,KAAK2R,MAE7BlS,KAAKwgH,iBAAiBvpG,MAAK,SAACC,EAAGC,GAAJ,OAAQD,EAAEC,MAP7BnX,KAAKwgH,mB,gCAWb,OAAOxgH,KAAKqS,Y,aAEC/P,GACVtC,KAAKqS,aAAa/P,IACrBtC,KAAKqS,WAAa/P,EAClB1F,QAAQmC,IAAI,mBACZnC,QAAQmC,IAAIiB,KAAKqS,YACjBrS,KAAK6Q,gBAAgBZ,QAAQ,YAAa3N,GAC1CtC,KAAK8+G,6CACL9+G,KAAKygH,2CACLzgH,KAAK++G,6CACL/+G,KAAK6Q,gBAAgBZ,QAAQ,sBAAuBjQ,KAAK80G,oC,wDAYzD,OAAO90G,KAAK4/G,sC,iCAGZ,OAAO5/G,KAAKmvB,a,aAEE7sB,GACXtC,KAAKmvB,cAAc7sB,IACtBtC,KAAKmvB,YAAc7sB,EACnBtC,KAAK6Q,gBAAgBZ,QAAQ,aAAc3N,GAC3CtC,KAAK6+G,4CACL7+G,KAAKygH,2CACLzgH,KAAK++G,6CACL/+G,KAAK6Q,gBAAgBZ,QAAQ,sBAAuBjQ,KAAK80G,oC,0DAmBzD,OAAO90G,KAAK8/G,qC,+BAGZ,OAAO9/G,KAAKkT,W,aAEA5Q,GACTtC,KAAKkT,YAAY5Q,IACpBtC,KAAKkT,UAAY5Q,EACjBtC,KAAK6Q,gBAAgBZ,QAAQ,WAAY3N,GACzCtC,KAAK6+G,4CACL7+G,KAAK8+G,6CACL9+G,KAAK++G,6CACL/+G,KAAK6Q,gBAAgBZ,QAAQ,sBAAuBjQ,KAAK80G,oC,wDAazD,OAAO90G,KAAK+/G,qC,iCAGZ,OAAO//G,KAAKwrG,a,aAEElpG,GACXtC,KAAKwrG,cAAclpG,IACtBtC,KAAKwrG,YAAclpG,EACnBtC,KAAK4+G,sCACL5+G,KAAK6Q,gBAAgBZ,QAAQ,aAAc3N,GAC3CtC,KAAK6+G,4CACL7+G,KAAK8+G,6CACL9+G,KAAKygH,2CACLzgH,KAAK6Q,gBAAgBZ,QAAQ,sBAAuBjQ,KAAK80G,oC,0DAiBzD,OAAO90G,KAAKmgH,yC,KC9PCO,GAHyB,CACvCC,aAAa,iBCQOC,G,WACpB,cAAgB,oCACf5gH,KAAK6gH,YAAc7gH,KAAK6gH,YAAY1gH,KAAKH,MACzCA,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,4BAC5BzP,KAAK8gH,gBAAkB9gH,KAAK8gH,gBAAgB3gH,KAAKH,MACjDA,KAAK+pB,WAAa/pB,KAAK+pB,WAAW5pB,KAAKH,M,0DAEsB,IAAlD+vG,EAAiD,EAAjDA,UAAWv4C,EAAsC,EAAtCA,oBAAqB0iD,EAAiB,EAAjBA,gBAC3Ct9G,QAAQmC,IAAI,sBACZnC,QAAQmC,IAAIgxG,GACZ/vG,KAAK44G,+BAAiC,IAAI0F,GAA8B,CAACvO,YACxEv4C,sBAAqB0iD,oBACtBl6G,KAAK+gH,cAAgBl3F,SAASC,cAAc,OAC5C9pB,KAAK+gH,cAAchmF,UAAUtrB,IAAI,SACjCzP,KAAKy4B,SAASwC,YAAYj7B,KAAK+gH,eAC/B/gH,KAAK+gH,cAAcplF,UAAY,4BAC/B37B,KAAKghH,gBAAkBn3F,SAASC,cAAc,OAC9C9pB,KAAKghH,gBAAgBjmF,UAAUtrB,IAAI,WACnCzP,KAAKy4B,SAASwC,YAAYj7B,KAAKghH,iBAC/BpkH,QAAQmC,IAAI,aACZnC,QAAQmC,IAAIgxG,GACZ/vG,KAAKihH,2BAA6B,IAAIjG,GAA0B,CAC/DjL,YACAxwD,8BAA8Bv/C,KAAK44G,iCAEpC54G,KAAKkhH,8BAAgC,IAAIpF,GAA6B,CACrE/L,YACAxwD,8BAA8Bv/C,KAAK44G,iCAEpC54G,KAAKmhH,2BAA6B,IAAIxE,GAA0B,CAC/D5M,YACAxwD,8BAA8Bv/C,KAAK44G,iCAEpC54G,KAAKohH,+BAAiC,IAAI1D,GAA8B,CACvE3N,YACAv4C,sBACAjY,8BAA8Bv/C,KAAK44G,iCAEpC54G,KAAKqhH,kCAAoC,IAAI3I,GAAiC,CAC7EC,MAAM34G,KAAKihH,2BACX9iG,MAAMne,KAAKmhH,2BACXr0G,UAAU9M,KAAKohH,+BACf9tG,SAAStT,KAAKkhH,8BACd3hE,8BAA8Bv/C,KAAK44G,iCAEpC54G,KAAK6gH,YAAYS,GAAYX,cAC7B3gH,KAAKu9G,2BAA6B1iG,GAAuBmC,SAAShd,KAAMA,KAAK44G,+BAC5E,UACA54G,KAAK8gH,mB,sCAESx+G,GACZA,EACFtC,KAAKy4B,SAASsC,UAAUtrB,IAAI,WAE5BzP,KAAKy4B,SAASsC,UAAUnrB,OAAO,a,kCAErB2xG,GAIX,IAAIC,EACJ,OAJGxhH,KAAKyhH,wBACPzhH,KAAKy4B,SAASqzB,YAAY9rD,KAAKyhH,wBAGzBF,GACN,KAAKD,GAAYX,aAChBa,EAAoBxhH,KAAKqhH,kCAAkC5qF,QAC5D,MACA,QACC,MAAM,IAAIz5B,MAAM,mBAElBgD,KAAKghH,gBAAgB/lF,YAAYumF,K,8BAGjC,OAAOxhH,KAAKy4B,a,KClEOipF,G,WACpB,aAAc,oBACb1hH,KAAKy4B,SAAW5O,SAASC,cAAc,OACvC9pB,KAAKy4B,SAASsC,UAAUtrB,IAAI,cAC5BzP,KAAKy4B,SAASsC,UAAUtrB,IAAI,eAC5BzP,KAAK2hH,yBAA0B93F,SAASC,cAAc,OACtD9pB,KAAK2hH,yBAAyB5mF,UAAUtrB,IAAI,sBAC5CzP,KAAK4hH,sBAAwB,IAAI1J,GAAqB,CACrDC,WAAW,0BACXC,aAAa,gBAEdp4G,KAAKy4B,SAASwC,YAAYj7B,KAAK4hH,sBAAsBnrF,SACrDz2B,KAAKy4B,SAASwC,YAAYj7B,KAAK2hH,0BAC/B3hH,KAAK6hH,8BAAgC,IAAI30F,IACzCltB,KAAK8hH,gBAAiB9hH,KAAK8hH,gBAAgB3hH,KAAKH,MAChDA,KAAK+pB,WAAY/pB,KAAK+pB,WAAW5pB,KAAKH,MACtCA,KAAK+hH,4BAA6B/hH,KAAK+hH,4BAA4B5hH,KAAKH,MACxEA,KAAKgiH,uBAAwBhiH,KAAKgiH,uBAAuB7hH,KAAKH,MAC9DA,KAAKiiH,uBAAwBjiH,KAAKiiH,uBAAuB9hH,KAAKH,MAC9DA,KAAKkiH,uBAAwBliH,KAAKkiH,uBAAuB/hH,KAAKH,MAC9DA,KAAKmiH,mCAAoCniH,KAAKmiH,mCAAmChiH,KAAKH,MACtFA,KAAKoiH,0CAA2CpiH,KAAKoiH,0CAA0CjiH,KAAKH,MACjGqM,GAAc9J,cAAc0D,8BAC9BjG,KAAKqiH,sBAAwB,IAAIzB,GAAqB,IACtD5gH,KAAKy4B,SAASwC,YAAYj7B,KAAKqiH,sBAAsB5rF,UAEtDz2B,KAAKsiH,uBAAyBz4F,SAASC,cAAc,OACrD9pB,KAAKy4B,SAASwC,YAAYj7B,KAAKsiH,wBAC/BtiH,KAAK6kC,gBAAkB,IAAI7vB,GAC3B,IAAMutG,EAAiB7pF,IAAMuyB,cAAcxmB,IAC3C0mB,IAAS/sB,OAAOmkF,EACf,CACC79E,eAAe1kC,KAAK6kC,gBAAiBF,eAAc,IAEpD3kC,KAAKsiH,wBACNtiH,KAAKwiH,sBAAwBxiH,KAAK6kC,gBAAgB1vB,O,sFAERoqC,GAA+B,IAAD,OAExE,OADA3iD,QAAQmC,IAAI,6CACL,IAAIxB,SAAQ,SAACO,EAASC,GAC5B,EAAKkkH,uBAAuB,CAACQ,WAAU,EAAMljE,kCAAgCnhD,MAAK,SAACskH,GAC/EA,EAAmBljH,OAAO,EAC5B,EAAK0iH,uBAAuBQ,EAAoBnjE,GAA+BnhD,KAAKN,GAASY,MAAMX,GAGpG,EAAKkkH,uBAAuB,CAACQ,WAAU,EAAOljE,kCAAgCnhD,MAAK,SAACskH,GACnF,GAAGA,EAAmBljH,OAAO,EAK5B,OAJA,EAAK0iH,uBAAuBQ,EAAoBnjE,GAA+BnhD,KAAKN,GAASY,MAAMX,GACnG,EAAKgkH,4BACJ,iHACDjkH,IAGD,EAAKikH,4BACJ,wHACD,EAAKG,uBAAuB,EAAK3K,WAAW5tG,QAAS41C,GACnDnhD,KAAKN,GAASY,MAAMX,MACpBW,MAAMX,MACPW,MAAMX,Q,kDAGiBrB,GAC3BsgC,GAAOquC,OAAO,CACbluC,MAAM,OACN5V,UAAU,0CACV7qB,QAAQA,EACRwgC,QAAQ,CAAC,CAAC5+B,KAAK,KAAMgwB,SAAS,mB,6CAKTyhF,EAAWxwD,GAA+B,IAAD,OAC/D,OAAO,IAAIhiD,SAAQ,SAACO,EAASC,GAC5B,IAAM4kH,EAAoB,IAAIz+F,GAAS,EAAKqzF,WAAW5tG,SACjDi5G,EAAkB,GAClBC,EAAiC,EAAKV,sCAC7B,SAATlK,IACL,IAAI0K,EAAkB13B,UAOrB,OANG23B,EAAiBpjH,OAAO,IAC1B,EAAKi5B,SAASsC,UAAUnrB,OAAO,eAC/B,EAAKgyG,sBAAsBnrF,QAAQsE,UAAUtrB,IAAI,YAElD,EAAKuyG,uBAAuBY,QAC5B9kH,IAGD,IAAMmyB,EAAU0yF,EAAkBhqG,OAC5B0+F,EAAqBtH,EAAUjtG,QAAQmtB,IAAW,EACxD,EAAK6xF,gBAAgB7xF,EAAS1tB,cAAe80G,EAC5CwL,GAAgCzkH,MAAK,SAAC0kH,GACtCF,EAAiBriH,KAAKuiH,GACnBzL,GACFyL,EAAgBpL,SAAS3D,wCACxBx0D,GACF04D,OACEv5G,MAAMX,GAEVk6G,Q,6CAGqB2K,GACtB5iH,KAAK4hH,sBAAsBtJ,WAC1BsK,EAAiB54G,KAAI,SAAA84G,GACpB,MAAO,CACPxgH,MAAMwgH,EACNx0F,SAAS,SAAC/e,GAAD,OAAKuzG,EAAgBroF,QAC9Bn8B,KAAKwkH,EAAgBl+G,SACrBuzG,WAAY2K,EAAgBzL,mBAAmB,uBAAuB,iC,gDAIN,IAAD,OAA1CoL,EAA0C,EAA1CA,UAAWljE,EAA+B,EAA/BA,8BAClC,OAAO,IAAIhiD,SAAQ,SAACO,EAASC,GAC5B,IAAM2kH,EAAqB,GACrBK,EAAoB,IAAI7+F,GAAS,EAAKqzF,WAAW5tG,UAChC,SAAjBq5G,IACDD,EAAkB93B,WACrBntF,EAAQ4kH,GAET,IAJ0B,EAIpBzyF,EAAW8yF,EAAkBpqG,OAC7Bo9B,EAAa9lB,EAAShO,gBACtBo9F,EAAsBoD,EAC1BljE,EAA8Bu1D,8BAA8B7kF,GAC5DsvB,EAA8B61D,6BAA6BnlF,GARnC,cASIovF,GATJ,IAS1B,IAAI,EAAJ,qBAAkD,CAAC,IAA3CM,EAA0C,QACjD,GAAG5pE,EAAWjzC,QAAQ68G,IAAqB,EAAE,CAC5C+C,EAAmBniH,KAAK0vB,GACxB,QAZwB,8BAe1B+yF,IAEDA,Q,mCAGW,IAAD,OACX,OAAO,IAAIzlH,SAAQ,SAACO,EAASC,GAC5B,IAAMqC,EAAS,WACd,EAAKoiH,sBAAsBh0G,UAC3B1Q,KAEKuC,EAAU,SAAC1B,GAChB,EAAK6jH,sBAAsBh0G,UAC3BzQ,EAAOY,IAER,GAAG,EAAK0jH,sBASP,OARA,EAAK9K,WAAa,IAAIK,QACtB,EAAKL,WAAWxtF,aAAa3rB,MAAK,WAAK,IAAD,EACrC,EAAKi5D,qBAAuB,IAAI62C,GAAoB,EAAKqJ,WAAWt1F,iBACpE,YAAKogG,6BAAL,SAA4Bt4F,WAAW,CAACgmF,UAAU,EAAKwH,WACtD//C,oBAAoB,EAAKH,qBACzB6iD,gBAAgB,EAAKkI,4CACrBhiH,OACC1B,MAAM2B,GAGV,EAAKyhH,gBAAgBz1G,GAAc9J,eAAe,EAAM,EAAK4/G,sCAC3D/jH,KAAKgC,GAAQ1B,MAAM2B,Q,sCAMPkC,EAAe80G,EAAoBwL,GAClD,IAAIC,EAAkB9iH,KAAK6hH,8BAA8B/nG,IAAIvX,EAAcsC,UAC3E,OAAGi+G,GACCzL,GACFwL,EAA+BC,GACzB,IAAIvlH,SAAQ,SAACO,EAASC,GAAV,OAAmBD,EAAQglH,QAE/CA,EAAkB,IAAI1L,GAAgB,CACrC70G,gBACA8iC,cAAcrlC,KAAK2hH,yBACnBtK,qBACAtH,UAAU/vG,KAAKu3G,aAEhBv3G,KAAK6hH,8BAA8BhoG,IAAItX,EAAcsC,SAAUi+G,GAC/D9iH,KAAK2hH,yBAAyB1mF,YAAY6nF,EAAgBrsF,SACvD4gF,GACFwL,EAA+BC,GACzB,IAAIvlH,SAAQ,SAACO,EAASC,GAC5B+kH,EAAgB/4F,aAAa3rB,MAAK,kBAAIN,EAAQglH,MAAkBpkH,MAAMX,S,2DAGnC,IAAD,OAC7BoI,EAA4BkG,GAAc9J,cAAc4D,yBAC1D88G,EAAuB,KAC3B,OAAO,SAACH,GACP,IAAMI,EAAqB,EAAKrB,8BAA8Bl+F,KACxDw/F,EAAUD,GAAoB,EACpC,IAAIhkH,OAAO82B,UAAW7vB,IAA2BrF,EAAyBG,IACzE,OAAGkiH,GACFF,EAAuBH,OACvBA,EAAgBroF,MAAK,SAGLyoF,GAAoB,IAEpCD,EAAqBnuC,eACrBguC,EAAgB9tC,kBAIfmuC,GACFL,EAAgBroF,MAAK,M,8BA3CvB,OAAOz6B,KAAKy4B,a,gBC9KsBj8B,Y,gCCiBpC4mH,KAAY,CACVC,IAAKh3G,GAAc9J,cAAcgC,UACjC++G,aAAc,CAAC,IAAIC,KAAaC,gBAKhCC,iBAAkB,I,IAECC,G,kDACpB,WAAYviH,GAAO,IAAD,8BACjB,cAAMA,IACDwiH,QAAQjrF,IAAMC,YAFF,E,gEAMjB34B,KAAK4jH,iBAAmB,IAAI9+C,GAAgB,CAC3CC,aAAa14D,GAAc9J,cAAcoC,4BACzCE,SAASwH,GAAc9J,cAAcsC,WAEtC,IAAMg/G,EAAY,IAAInC,GACtB1hH,KAAK2jH,QAAQzqF,QAAQ+B,YAAY4oF,EAAUptF,SACxCv3B,OAAO82B,UACTnM,SAASqR,KAAKH,UAAUtrB,IAAI,UAC7Bo0G,EAAU95F,e,+BAGV,OACC,qBAAKxC,UAAU,eAAesS,IAAK75B,KAAK2jH,QAAxC,SACE,wBAAQp8F,UAAU,aAAlB,SACA,sBAAMzqB,KAAK,WAAWyB,QAAQ,sF,GArBF/B,aChBbsnH,QACW,cAA7B5kH,OAAOC,SAASoO,UAEe,UAA7BrO,OAAOC,SAASoO,UAEhBrO,OAAOC,SAASoO,SAASlD,MACvB,2DCZN8gD,IAAS/sB,OACP,cAAC,IAAM2lF,WAAP,UACE,cAAC,GAAD,MAEFl6F,SAASm6F,eAAe,SDyHpB,kBAAmB9tF,WACrBA,UAAU+tF,cAAcC,MACrB9lH,MAAK,SAAA+lH,GACJA,EAAaC,gBAEd1lH,OAAM,SAAA7B,GACLD,QAAQC,MAAMA,EAAMH,c","file":"static/js/main.82c0e043.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/logo.2d27ead7.svg\";","import React, { Component } from 'react';\r\nimport './NavMenu.css';\r\nexport default class NavMenu extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t}\r\n\trender() {\r\n\t\treturn (
\r\n\t\t\t
)\r\n\t}\r\n}\r\n","export default class ExtendableError extends Error {\r\n constructor(message, innerError) {\r\n\t\tif(innerError)\r\n\t\t\tconsole.error(innerError);\r\n super(message);\r\n this.name = this.constructor.name;\r\n this.innerError = innerError;\r\n if (typeof Error.captureStackTrace === 'function') {\r\n Error.captureStackTrace(this, this.constructor);\r\n } else {\r\n this.stack = (new Error(message)).stack;\r\n }\r\n }\r\n}\r\n","import ExtendableError from './ExtendableError';\r\nexport default class ParameterError extends ExtendableError {\r\n\r\n}","import ParameterError from './ParameterError';\r\nexport default class ParameterErrors {\r\n static throwNotProvided(name) {\r\n throw new ParameterError(`No parameter \"${name}\" was provided`);\r\n }\r\n static throwNotArray(name) {\r\n throw new ParameterError(`The parameter \"${name}\" was not an array`);\r\n }\r\n static throwNotOfType(name, type) {\r\n throw new ParameterError(`The parameter \"${name}\" was not of type \"${type}\"`);\r\n }\r\n}","import ExtendableError from './ExtendableError';\r\nexport default class ParseError extends ExtendableError {\r\n\r\n}","import {Promise} from \"bluebird\";\r\nimport ParseError from '../errors/ParseError';\r\nimport ParameterError from '../errors/ParameterError';\r\nimport BSON from 'bson';\r\nPromise.longStackTraces();\r\nPromise.config({\r\n warnings: true,\r\n longStackTraces: true\r\n});\r\nexport default class RemoteFileHelper {\r\n static loadJSON(url) {\r\n\t\tif(url===undefined||url===null)\r\n\t\t{\r\n\t\t\tthrow new ParameterError(`url was ${url}`);\r\n\t\t}\r\n return new Promise((resolve, reject) => {\r\n\t\t\tconst headers={\"Content-Type\": \"application/json\"};\r\n fetch(url, {\r\n\t\t\t\tmethod: 'GET', \r\n\t\t\t\tcredentials: \"same-origin\",\r\n\t\t\t\theaders:headers\r\n\t\t\t}).then((response) => {\r\n response.text().then((content) => {\r\n resolve(JSON.parse(content));\r\n }).catch((err)=>{\r\n\t\t\t\t\treject(new ParseError(`Parsing json from file path \\\"${url}\\\"`, err));\r\n\t\t\t\t});\r\n });\r\n })\r\n }\r\n static loadBSON(url) {\r\n\t\tif(url===undefined||url===null)\r\n\t\t{\r\n\t\t\tthrow new ParameterError(`url was ${url}`);\r\n\t\t}\r\n return new Promise((resolve, reject) => {\r\n\t\t\tconst headers={\"Content-Type\": \"application/bson\"};\r\n fetch(url, {\r\n\t\t\t\tmethod: 'GET', \r\n\t\t\t\tcredentials: \"same-origin\",\r\n\t\t\t\theaders:headers\r\n\t\t\t}).then((response) => {\r\n response.text().then((content) => {\r\n\t\t\t\t\tconst data = BSON.deserialize(content);\r\n\t\t\t\t\tconsole.log(data);\r\n resolve(data);\r\n }).catch((err)=>{\r\n\t\t\t\t\treject(new ParseError(`Parsing bin from file path \\\"${url}\\\"`, err));\r\n\t\t\t\t});\r\n });\r\n })\r\n }\r\n}","export default class UrlHelper {\r\n \r\n static getAbsoluteFromRelative(relativeUrl) {\r\n if (relativeUrl[0] !== '/')\r\n relativeUrl = '/' + relativeUrl;\r\n return `${window.location.origin}${relativeUrl}`;\r\n }\r\n static seperateUrlIntoRootUrlAndFileName(url) {\r\n const lastIndexForwardSlash = url.lastIndexOf('/');\r\n if (lastIndexForwardSlash < 0) {\r\n return ['', url];\r\n }\r\n return [\r\n url.substring(0, lastIndexForwardSlash + 1),\r\n url.substring(lastIndexForwardSlash + 1, url.length)];\r\n }\r\n static makeSureSlashOnEnd(url) {\r\n if (url === null || url === undefined||url.length<1) return url;\r\n if (url[url.length - 1] === '/') return url;\r\n return url + '/';\r\n }\r\n\tstatic setSlashes(url, hasStartSlash, hasEndSlash){\r\n if (url === null || url === undefined||url.length<1) return url;\r\n if (url[url.length - 1] === '/') return url;\r\n\t\tconst firstCharacter = url[0];\r\n\t\tconst firstCharacterIsSlash=firstCharacter==='/';\r\n\t\tif(hasStartSlash){\r\n\t\t\tif(!firstCharacterIsSlash)\r\n\t\t\t\turl = '/'+url;\r\n\t\t}\r\n\t\telse{\r\n\t\t\tif (firstCharacterIsSlash)\r\n\t\t\t\turl = url.substring(1, url.length-1);\r\n\t\t}\r\n\t\tconst lastCharacter = url[url.length-1];\r\n\t\tconst lastCharacterIsSlash=lastCharacter==='/';\r\n\t\tif(hasEndSlash){\r\n\t\t\tif(!lastCharacterIsSlash)\r\n\t\t\t\turl = url+'/';\r\n\t\t}\r\n\t\telse{\r\n\t\t\tif(lastCharacterIsSlash)\r\n\t\t\t\turl = url.substring(0, url.length-1);\r\n\t\t}\r\n\t\treturn url;\r\n\t}\r\n static removeStartSlash(url) {\r\n if (url === null || url === undefined||url.length<1) return url;\r\n if (url[0] === '/') return url.substring(1, url.length);\r\n return url;\r\n }\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class GroupedCallbacks {\r\n\tconstructor(){\r\n\t\tthis._callbacksThen=[];\r\n\t\tthis._callbacksCatch=[];\r\n\t\tthis.then = this.then.bind(this);\r\n\t\tthis.catch = this.catch.bind(this);\r\n\t\tthis.doThen = this.doThen.bind(this);\r\n\t\tthis.doCatch = this.doCatch.bind(this);\r\n\t}\r\n\tthen(callbackThen){\r\n\t\tthis._callbacksThen.push(callbackThen);\r\n\t\treturn this;\r\n\t}\r\n\tcatch(callbackCatch){\r\n\t\tif(callbackCatch===undefined||callbackCatch===null)throwNotProvided('callbackCatch');\r\n\t\tif(typeof(callbackCatch)!=='function')throwNotOfType('callbackCatch', 'function');\r\n\t\tthis._callbacksCatch.push(callbackCatch);\r\n\t\treturn this;\r\n\t}\r\n\tdoThen(){\r\n\t\tconst callbacksThen = this._callbacksThen;\r\n\t\twhile(callbacksThen.length>0)\r\n\t\t{\r\n\t\t\tconst callbackThen = callbacksThen.splice(0, 1)[0];\r\n\t\t\ttry{\r\n\t\t\t\tcallbackThen.apply(null, arguments);\r\n\t\t\t}\r\n\t\t\tcatch(err){\r\n\t\t\t\tconsole.error(err);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tdoCatch(err){\r\n\t\tconst callbacksCatch = this._callbacksCatch;\r\n\t\twhile(callbacksCatch.length>0)\r\n\t\t{\r\n\t\t\tconst callbackCatch = callbacksCatch.splice(0, 1)[0];\r\n\t\t\ttry{\r\n\t\t\t\tcallbackCatch(err);\r\n\t\t\t}\r\n\t\t\tcatch(err){\r\n\t\t\t\tconsole.error(err);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","const NFilteredSitePlansToShow={All:0, One:1, Two:2, };\r\nexport default NFilteredSitePlansToShow;","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotStatusConfiguration{\r\n\tstatic get UNIT_MARKER_COLOR_SUFFIX(){\r\n\t\treturn '-unit-marker-color';\r\n\t}\r\n\tconstructor(props){\r\n\t\tconst {unitMarkerColor, configuratorIconFileName, plotStatus} = props;\r\n\t\tif(plotStatus===undefined||plotStatus===null)\r\n\t\t\tthrowNotProvided('plotStatus');\r\n\t\tif(unitMarkerColor===undefined||unitMarkerColor===null)\r\n\t\t\tthrowNotProvided('unitMarkerColor');\r\n\t\tthis._plotStatus = plotStatus;\r\n\t\tthis._unitMarkerColor=unitMarkerColor;\r\n\t\tthis._configuratorIconFileName=configuratorIconFileName;\r\n\t}\r\n\tget unitMarkerColor(){\r\n\t\treturn this._unitMarkerColor;\r\n\t}\r\n\tget configuratorIconFileName(){\r\n\t\treturn this._configuratorIconFileName;\r\n\t}\r\n\tget plotStatus(){\r\n\t\treturn this._plotStatus;\r\n\t}\r\n\tstatic fromEnumAndJObject (plotStatus, jObject){\r\n\t\tconst unitMarkerColor = jObject.unitMarkerColor\r\n\t\treturn new PlotStatusConfiguration({plotStatus:plotStatus, \r\n\t\t\tunitMarkerColor:unitMarkerColor, configuratorIconFileName:jObject.configuratorIconFileName});\r\n\t}\r\n}","import ExtendableError from './ExtendableError';\r\nexport default class NotImplementedError extends ExtendableError {\r\n\r\n}","import ExtendableError from './ExtendableError';\r\nexport default class ValueError extends ExtendableError {\r\n\r\n}","import ParseError from '../errors/ParseError';\r\nimport NotImplementedError from '../errors/NotImplementedError';\r\nimport ValueError from '../errors/ValueError';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nconst PlotStatus = {\r\n AVAILABLE:4,\r\n COMING_SOON:3,\r\n FUTURE_RELEASE:6,\r\n SOLD_OR_UNAVAILABLE:2,\r\n\tRESERVED:8\r\n};\r\nPlotStatus.getValues = function(){\r\n\treturn Object.values(PlotStatus).filter(value=>typeof(value)==='number');\r\n};\r\nPlotStatus.getDescription = function(plotStatus){\r\n\tif(plotStatus===PlotStatus.AVAILABLE)\r\n\t\treturn \"Available\";\r\n\tif( plotStatus===PlotStatus.COMING_SOON)\r\n\t\treturn \"Coming Soon\";\r\n\tif( plotStatus===PlotStatus.FUTURE_RELEASE)\r\n\t\treturn \"Future Release\";\r\n\tif( plotStatus===PlotStatus.SOLD_OR_UNAVAILABLE)\r\n\t\treturn \"Sold\";\r\n\tif( plotStatus===PlotStatus.RESERVED)\r\n\t\treturn \"Reserved\";\r\n\tthrow new NotImplementedError(`Not implemented for \"${plotStatus}\"`);\r\n};\r\nPlotStatus.getCssName = function(plotStatus){\r\n\tif(plotStatus===PlotStatus.AVAILABLE)\r\n\t\treturn \"available\";\r\n\tif( plotStatus===PlotStatus.COMING_SOON)\r\n\t\treturn \"coming-soon\";\r\n\tif( plotStatus===PlotStatus.FUTURE_RELEASE)\r\n\t\treturn \"future-release\";\r\n\tif( plotStatus===PlotStatus.SOLD_OR_UNAVAILABLE)\r\n\t\treturn \"sold-or-unavailable\";\r\n\tif( plotStatus===PlotStatus.RESERVED)\r\n\t\treturn \"reserved\";\r\n\tthrow new NotImplementedError(`Not implemented for \"${plotStatus}\"`);\r\n};\r\nPlotStatus.toStr = function(plotStatus){\r\n\tif( plotStatus===PlotStatus.AVAILABLE)\r\n\t\treturn \"available\";\r\n\tif( plotStatus===PlotStatus.COMING_SOON)\r\n\t\treturn \"comingSoon\";\r\n\tif( plotStatus===PlotStatus.FUTURE_RELEASE)\r\n\t\treturn \"futureRelease\";\r\n\tif( plotStatus===PlotStatus.SOLD_OR_UNAVAILABLE)\r\n\t\treturn \"soldOrUnavailable\";\r\n\tif( plotStatus===PlotStatus.RESERVED)\r\n\t\treturn \"reserved\";\r\n\tthrow new NotImplementedError(`Not implemented for \"${plotStatus}\"`);\r\n};\r\nPlotStatus.getConfiguratorIconRelativePath = function(plotStatus, configuration){\r\n\t\tconst plotStatusConfiguration = configuration.plotStatusConfigurations.getFromPlotStatus(plotStatus);\r\n\t\treturn `icons/${plotStatusConfiguration?.configuratorIconFileName}`;\r\n};\r\nPlotStatus.parse = function(value){\r\n\tif(value===undefined||value===null)\r\n\t\tthrow ValueError('value was None');\r\n\tif(typeof(value)==='string')\r\n\t\treturn PlotStatus.parseFromString(value);\r\n\tif(typeof(value)==='number')\r\n\t\treturn PlotStatus.parseFromInt(value);\r\n\tthrow new ParseError(`Could not parse value \"${value}\" to PlotStatus\"`);\r\n};\r\nPlotStatus.parseFromString = function(value){\r\n\tvalue = value.toLowerCase();\r\n\tif (value==='available')\r\n\t\treturn PlotStatus.AVAILABLE;\r\n\tif (['coming soon', 'comingsoon', 'coming_soon', 'coming', 'soon'].indexOf(value)>=0){\r\n\t\treturn PlotStatus.COMING_SOON;\r\n\t}\r\n\tif (['future release', 'futurerelease', 'future_release', 'future'].indexOf(value)>=0){\r\n\t\treturn PlotStatus.FUTURE_RELEASE;\r\n\t}\r\n\tif (['sold or unavailable', 'soldorunavailable','sold_or_unavailable', 'sold', 'unavailable'].indexOf(value)>=0){\r\n\t\treturn PlotStatus.SOLD_OR_UNAVAILABLE;\r\n\t}\r\n\tif (['reserved'].indexOf(value)>=0){\r\n\t\treturn PlotStatus.RESERVED;\r\n\t}\r\n\tthrow new NotImplementedError(`Not implemented for \"${value}\"`);\r\n};\r\nPlotStatus.parseFromInt = function(value){\r\n\treturn value;\r\n};\r\nexport default PlotStatus;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport PlotStatusConfiguration from './PlotStatusConfiguration';\r\nimport PlotStatus from '../site/PlotStatus';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotStatusConfigurations{\r\n\tconstructor(props){\r\n\t\tconst {list}=props;\r\n\t\tthis._list = list;\r\n\t\tthis.getFromPlotStatus = this.getFromPlotStatus.bind(this);\r\n\t\tthis.toCssHtmlString = this.toCssHtmlString.bind(this);\r\n\t}\r\n\tgetFromPlotStatus(plotStatus){\r\n\t\tfor(var i=0; i2: same as 0, null or undefined: same as\r\n\t}\r\n\tget plotSelectionMenuEnabled(){\r\n\t\treturn this._plotSelectionMenuEnabled;\r\n\t}\r\n\tget showPlotDetailedInformationOnClickPlotMenu(){\r\n\t\treturn this._showPlotDetailedInformationOnClickPlotMenu;\r\n\t}\r\n\tget houseTypesViewerEnabled(){\r\n\t\treturn this._houseTypesViewerEnabled;\r\n\t}\r\n\tget suggestedSitesEnabled(){\r\n\t\treturn this._suggestedSitesEnabled;\r\n\t}\r\n\tget nFilteredSitePlansToShow(){\r\n\t\treturn this._nFilteredSitePlansToShow;\r\n\t}\r\n\tget featuresEnabled(){\r\n\t\treturn this._featuresEnabled;\r\n\t}\r\n\tget whatAreYouLookingForEnabled(){\r\n\t\treturn this._whatAreYouLookingForEnabled||window.location.href.split('#')[1]==='welcome';\r\n\t}\r\n\tget showPanelOnClickOutside360ConfiguratorIcon(){\r\n\t\treturn this._showPanelOnClickOutside360ConfiguratorIcon;\r\n\t}\r\n\tget miniMapConeMarkerEnabled(){\r\n\t\treturn this._miniMapConeMarkerEnabled;\r\n\t}\r\n\tget showFadedFilteredOutPlots(){\r\n\t\treturn this._showFadedFilteredOutPlots;\r\n\t}\r\n\tget showHouseTypesViewerOnOpen(){\r\n\t\treturn this._showHouseTypesViewerOnOpen;\r\n\t}\r\n\tget plotComparisonEnabled(){\r\n\t\treturn this._plotComparisonEnabled;\r\n\t}\r\n\tget brochuresMenuEnabled(){\r\n\t\treturn this._brochuresMenuEnabled;\r\n\t}\r\n\tget showPlotDetailedInformationOnDesktopClickInsteadOfHover(){\r\n\t\treturn this._showPlotDetailedInformationOnDesktopClickInsteadOfHover;\r\n\t}\r\n\tget windowStyleMenus(){\r\n\t\treturn this._windowStyleMenus;\r\n\t}\r\n\tget showNBathrooms(){\r\n\t\treturn this._showNBathrooms;\r\n\t}\r\n\tget threeDEnabled(){\r\n\t\treturn this._threeDEnabled;\r\n\t}\r\n\tget siteName(){\r\n\t\treturn this._siteName;\r\n\t}\r\n\tget siteSlug(){\r\n\t\treturn this._siteSlug;\r\n\t}\r\n\tget siteSlugForLatestSiteInfo(){\r\n\t\t\treturn this._siteSlugForLatestSiteInfo;\r\n\t\t\r\n\t}\r\n\tget defaultOutside360PlotNumber(){\r\n\t\treturn this._defaultOutside360PlotNumber;\r\n\t}\r\n\tget defaultAerialIndex(){\r\n\t\treturn this._defaultAerialIndex;\r\n\t}\r\n\tget plotStatusConfigurations(){\r\n\t\treturn this._plotStatusConfigurations;\r\n\t}\r\n\tget currencyConfiguration(){\r\n\t\treturn this._currencyConfiguration;\r\n\t}\r\n\tget goStraightToFiltersMenu(){\r\n\t\treturn this._goStraightToFiltersMenu;\r\n\t}\r\n\tget showShowForSaleButton(){\r\n\t\treturn this._showShowForSaleButton;\r\n\t}\r\n\tget hidePlotMoreInformationTabs(){\r\n\t\treturn this._hidePlotMoreInformationTabs;\r\n\t}\r\n\tget plotMoreInformationHasOverview(){\r\n\t\treturn this._plotMoreInformationHasOverview ;\r\n\t}\r\n\tget scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages(){\r\n\t\treturn this._scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages;\r\n\t}\r\n\tget fullScreenGalleryAndFloorPlans(){\r\n\t\treturn this._fullScreenGalleryAndFloorPlans;\r\n\t}\r\n\tget useCurrentPositionIcon(){\r\n\t\treturn this._useCurrentPositionIcon;\r\n\t}\r\n\tget sentryDSN(){\r\n\t\treturn this._sentryDSN;\r\n\t}\r\n\tget brochureGeneratorUrl(){\r\n\t\treturn this._brochureGeneratorUrl;\r\n\t}\r\n\tget delayShowPlotMarkersSeconds(){\r\n\t\treturn this._delayShowPlotMarkersSeconds;\r\n\t}\r\n\tget plotMarkerKeyAtTop(){\r\n\t\treturn this._plotMarkerKeyAtTop;\r\n\t}\r\n\tget googleAnalyticsTrackingCode(){\r\n\t\treturn this._googleAnalyticsTrackingCode;\r\n\t}\r\n\tget configuratorRootUrl(){\r\n\t\treturn this._configuratorRootUrl;\r\n\t}\r\n\tget siteInfoUrl(){\r\n\t\treturn this._siteInfoUrl;\r\n\t}\r\n\tget onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo(){\r\n\t\treturn this._onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo;\r\n\t}\r\n\tget siteVideoEnabled(){\r\n\t\treturn this._siteVideoEnabled;\r\n\t}\r\n\tget twoDSitePlanEnabled(){\r\n\t\treturn this._twoDSitePlanEnabled;\r\n\t}\r\n\tget hideNBedrooms(){\r\n\t\treturn this._hideNBedrooms;\r\n\t}\r\n\tget rotateOutside360Cameras180Degrees(){\r\n\t\treturn this._rotateOutside360Cameras180Degrees;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\tconst plotStatusConfigurations = PlotStatusConfigurations.fromJSON(jObject.plotStatuses);\r\n\t\treturn new Configuration({plotStatusConfigurations:plotStatusConfigurations, \r\n\t\t\tgoStraightToFiltersMenu:jObject.goStraightToFiltersMenu, showShowForSaleButton:jObject.showShowForSaleButton,\r\n\t\t\thidePlotMoreInformationTabs:jObject.hidePlotMoreInformationTabs,\r\n\t\t\tplotMoreInformationHasOverview:jObject.plotMoreInformationHasOverview,\r\n\t\t\tscrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages:\r\n\t\t\t\tjObject.scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages,\r\n\t\t\tfullScreenGalleryAndFloorPlans:jObject.fullScreenGalleryAndFloorPlans,\r\n\t\t\tuseCurrentPositionIcon:jObject.useCurrentPositionIcon,\r\n\t\t\tsentryDSN:jObject.sentryDSN,\r\n\t\t\tbrochureGeneratorUrl:jObject.brochureGeneratorUrl,\r\n\t\t\tdelayShowPlotMarkersSeconds:jObject.delayShowPlotMarkersSeconds,\r\n\t\t\tplotMarkerKeyAtTop:jObject.plotMarkerKeyAtTop,\r\n\t\t\tgoogleAnalyticsTrackingCode:jObject.googleAnalyticsTrackingCode,\r\n\t\t\tsiteName:jObject.siteName,\r\n\t\t\tsiteSlug:jObject.siteSlug,\r\n\t\t\tsiteSlugForLatestSiteInfo:jObject.siteSlugForLatestSiteInfo,\r\n\t\t\tconfiguratorRootUrl:jObject.configuratorRootUrl,\r\n\t\t\tsiteInfoUrl:jObject.siteInfoUrl,\r\n\t\t\tdefaultOutside360PlotNumber:jObject.defaultOutside360PlotNumber,\r\n\t\t\tdefaultAerialIndex:jObject.defaultAerialIndex,\r\n\t\t\tthreeDEnabled:jObject.threeDEnabled,\r\n\t\t\twindowStyleMenus:jObject.windowStyleMenus,\r\n\t\t\tbrochuresMenuEnabled:jObject.brochuresMenuEnabled,\r\n\t\t\tshowNBathrooms:jObject.showNBathrooms,\r\n\t\t\tshowPlotDetailedInformationOnDesktopClickInsteadOfHover:jObject.showPlotDetailedInformationOnDesktopClickInsteadOfHover,\r\n\t\t\tplotComparisonEnabled:jObject.plotComparisonEnabled,\r\n\t\t\tonClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo:jObject.onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo,\r\n\t\t\tshowHouseTypesViewerOnOpen:jObject.showHouseTypesViewerOnOpen,\r\n\t\t\tsiteVideoEnabled:jObject.siteVideoEnabled,\r\n\t\t\tshowFadedFilteredOutPlots:jObject.showFadedFilteredOutPlots,\r\n\t\t\ttwoDSitePlanEnabled:jObject.twoDSitePlanEnabled,\r\n\t\t\ttwoDSitePlanEnabled:jObject.twoDSitePlanEnabled,\r\n\t\t\tminiMapConeMarkerEnabled:jObject.miniMapConeMarkerEnabled,\r\n\t\t\tshowPanelOnClickOutside360ConfiguratorIcon:jObject.showPanelOnClickOutside360ConfiguratorIcon,\r\n\t\t\twhatAreYouLookingForEnabled:jObject.whatAreYouLookingForEnabled,\r\n\t\t\tfeaturesEnabled:jObject.featuresEnabled,\r\n\t\t\tnFilteredSitePlansToShow:jObject.nFilteredSitePlansToShow,\r\n\t\t\tsuggestedSitesEnabled:jObject.suggestedSitesEnabled,\r\n\t\t\thouseTypesViewerEnabled:jObject.houseTypesViewerEnabled,\r\n\t\t\thideNBedrooms:jObject.hideNBedrooms,\r\n\t\t\trotateOutside360Cameras180Degrees:jObject.rotateOutside360Cameras180Degrees,\r\n\t\t\tshowPlotDetailedInformationOnClickPlotMenu:jObject.showPlotDetailedInformationOnClickPlotMenu,\r\n\t\t\tplotSelectionMenuEnabled:jObject.plotSelectionMenuEnabled\r\n\t\t});\r\n\t}\r\n}","import Configuration from './Configuration';\r\nexport default class Configurations{\r\n\tconstructor(entries){\r\n\t\tthis._entries = entries;\r\n\t}\r\n\tget entries(){\r\n\t\treturn this._entries;\r\n\t}\r\n\tstatic fromJSON(jArray, defaultConfiguration){\r\n\t\tconst entries = [defaultConfiguration].concat(jArray.map(jObjectConfiguration=>Configuration.fromJSON(jObjectConfiguration)));\r\n\t\treturn new Configurations(entries);\r\n\t}\r\n}","const Validation = { isNumber};\r\nexport default Validation;\r\nconst regExpStringIsValidInt = /^-?\\d+$/;\r\nconst regExpStringIsValidFloat = /^-?\\d+\\.\\d+$/;\r\nfunction isNumber(value) {\r\n if (value === undefined || value === null) return false;\r\n if (typeof (value) === 'string') {\r\n if (!numberStringIsValid(value)) return false;\r\n }\r\n const number = parseFloat(value);\r\n if (isNaN(number)) return false;\r\n return true\r\n}\r\nfunction numberStringIsValid(str) {\r\n if (str.match(regExpStringIsValidInt)) return true;\r\n if (str.match(regExpStringIsValidFloat)) return true;\r\n return false;\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nconst { throwIsNotNumber } = ParameterErrors;\r\nexport default class Vector2 {\r\n constructor(props) {\r\n const { x, y } = props;\r\n if (!Validation.isNumber(x)) throwIsNotNumber(\"x\");\r\n if (!Validation.isNumber(y)) throwIsNotNumber(\"y\");\r\n this._x = x;\r\n this._y = y;\r\n\t\tthis.toArray = this.toArray.bind(this);\r\n }\r\n get x() {\r\n return this._x;\r\n }\r\n get y() {\r\n return this._y;\r\n }\r\n\ttoArray(){\r\n\t\treturn [this._x, this._y];\r\n\t}\r\n static fromArray(arr) {\r\n return new Vector2({\r\n x: arr[0],\r\n y: arr[1]\r\n })\r\n }\r\n static fromObj(obj) {\r\n return new Vector2(obj);\r\n }\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nconst { throwNotOfType } = ParameterErrors;\r\nexport default class Vector3 {\r\n constructor(props) {\r\n const { x, y, z } = props;\r\n if (!Validation.isNumber(x)) throwNotOfType(\"x\", \"number\");\r\n if (!Validation.isNumber(y)) throwNotOfType(\"y\", \"number\");\r\n if (!Validation.isNumber(z)) throwNotOfType(\"z\", \"number\");\r\n this._x = x;\r\n this._y = y;\r\n this._z = z;\r\n\t\tthis.toArray = this.toArray.bind(this);\r\n }\r\n get x() {\r\n return this._x;\r\n }\r\n get y() {\r\n return this._y;\r\n }\r\n get z() {\r\n return this._z;\r\n }\r\n\ttoArray(){\r\n\t\treturn [this._x, this._y, this._z];\r\n\t}\r\n static fromArray(arr) {\r\n return new Vector3({\r\n x: arr[0],\r\n y: arr[1],\r\n z: arr[2]\r\n });\r\n }\r\n static fromObj(obj) {\r\n return new Vector3(obj);\r\n }\r\n}\r\n","import Validation from '../validation/Validation';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Vector3 from '../geometry/Vector3';\r\nconst { throwNotProvided, throwNotOfType } = ParameterErrors;\r\nexport default class Location {\r\n constructor(props) {\r\n const { position, rotation, scaling } = props;\r\n\r\n if (!position)\r\n throwNotProvided(\"position\");\r\n if (!position instanceof Vector3)\r\n throwNotOfType(\"position\", Vector3.constructor.name);\r\n this._position = position;\r\n\r\n\r\n if (!rotation)\r\n throwNotProvided(\"rotation\");\r\n if (!rotation instanceof Vector3)\r\n throwNotOfType(\"rotation\", Vector3.constructor.name);\r\n this._rotation = rotation;\r\n\r\n\r\n if (!scaling)\r\n throwNotProvided(\"scaling\");\r\n if (!scaling instanceof Vector3)\r\n throwNotOfType(\"scaling\", Vector3.constructor.name);\r\n this._scaling = scaling;\r\n\t\tthis.toJSON = this.toJSON.bind(this);\r\n }\r\n get position() {\r\n return this._position;\r\n }\r\n get rotation() {\r\n return this._rotation;\r\n }\r\n get scaling() {\r\n return this._scaling;\r\n }\r\n\ttoJSON(){\r\n\t\treturn {\r\n\t\t\tposition:this._position.toArray(), \r\n\t\t\trotation:this._rotation.toArray(), \r\n\t\t\tscaling:this._scaling.toArray()\r\n\t\t};\r\n\t}\r\n static fromJSON(obj) {\r\n return new Location({\r\n position: Vector3.fromArray(obj.position),\r\n rotation: Vector3.fromArray(obj.rotation),\r\n scaling: Vector3.fromArray(obj.scaling)\r\n })\r\n }\r\n\tstatic getDefault(){\r\n return new Location({\r\n position: Vector3.fromArray([0,0,0]),\r\n rotation: Vector3.fromArray([0,0,0]),\r\n scaling: Vector3.fromArray([1,1,1])\r\n })\r\n\t}\r\n}\r\n","export default class RunningMode{\r\n\tstatic get isDevelopment(){\r\n\t\treturn process.env.NODE_ENV === 'development';\r\n\t}\r\n}\r\n","import UrlHelper from '../core/UrlHelper';\r\nimport RunningMode from '../RunningMode';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nexport default class Urls{\r\n\tstatic get backendPort(){\r\n\t\tconst thisPagePort = window.location.port;\r\n\t\treturn RunningMode.isDevelopment?51395:(thisPagePort===80?null:thisPagePort);\r\n\t}\r\n\tstatic get root(){\r\n\t\tconst backendPortString = Urls.backendPort!==null?`:${Urls.backendPort}`:'';\r\n\t\treturn `${window.location.protocol}//${window.location.hostname}${backendPortString}/`;\r\n\t}\r\n\tstatic getBrochureGenerator(){\r\n\t\treturn RunningMode.isDevelopment?`${Urls.root}brochureGeneration/`:AssetsManager.configuration.brochureGeneratorUrl;\r\n\t}\r\n\tstatic getSiteInfo(configuration){\r\n\t\treturn RunningMode.isDevelopment?`${Urls.root}siteInfo/`:UrlHelper.makeSureSlashOnEnd(configuration.siteInfoUrl);\r\n\t}\r\n\tstatic getLatestSiteInfo(configuration){\r\n\t\treturn `${Urls.getSiteInfo(configuration)}latestSiteInfo?siteName=${configuration.siteSlugForLatestSiteInfo?configuration.siteSlugForLatestSiteInfo:configuration.siteSlug}`;\r\n\t}\r\n\tstatic getQuadrantsAbsolutePath({configuration, relativePath}){\r\n\t\treturn `${Urls.root}assets/${configuration.siteSlug}/${relativePath}`;\r\n\t}\r\n\tstatic getGeneratePDFBrochureSimple(){\r\n\t\treturn `${Urls.getBrochureGenerator()}generatePDFBrochureSimple`;\r\n\t}\r\n\tstatic get assets(){\r\n\t\treturn `${Urls.root}assets/${AssetsManager.configuration.siteSlug}/`;\r\n\t}\r\n\tstatic getAssetsForSite(siteSlug){\r\n\t\treturn `${Urls.root}assets/${siteSlug}/`;\r\n\t}\r\n\tstatic get videos(){\r\n\t\treturn Urls.assets+'videos/';\r\n\t}\r\n\tstatic getConfigurationJSON(){\r\n\t\treturn `${Urls.assets}configuration.json`;\r\n\t}\r\n\tstatic getIcon(iconRelativePath){\r\n\t\treturn Urls.getIcons()+iconRelativePath;\r\n\t}\r\n\tstatic getBrochureGenerationCheckProgress(){\r\n\t\treturn `${Urls.getBrochureGenerator()}checkProgress`;\r\n\t}\r\n\tstatic getBrochureGenerationGetBrochuresForSession(){\r\n\t\treturn `${Urls.getBrochureGenerator()}getBrochuresForSession`;\r\n\t}\r\n\tstatic getConfiguratorUrlForPlot(plot, configuration){\r\n\t\tconst configuratorRootUrl = configuration.configuratorRootUrl;\r\n\t\tif(configuratorRootUrl)\r\n\t\t{\r\n\t\t\treturn`${configuratorRootUrl}${plot.number}`;\r\n\t\t}\r\n\t\tlet url = plot.houseType?.configuratorUrl;\r\n\t\tif(url) url +=`?plot=${plot.number}`;\r\n\t\telse url = plot.houseType?.tourUrl;\r\n\t\treturn url;\r\n\t}\r\n\tstatic getSiteAssets_3D(configuration){\r\n\t\treturn Urls.getAssetsForSite(configuration.siteSlug)+'3d/';\r\n\t}\r\n\tstatic getOutside360(configuration){\r\n\t\treturn Urls.getAssetsForSite(configuration.siteSlug)+'outside_360/';\r\n\t}\r\n\tstatic getIcons(){\r\n\t\treturn Urls.assets;\r\n\t}\r\n\tstatic getSiteJson(configuration){\r\n\t\treturn Urls.getAssetsForSite(configuration.siteSlug)+'site.json';\r\n\t}\r\n}","const eventEnable = function (obj) {\r\n\r\n\tobj.addEventListener = function (type, listener) {\r\n\r\n\t\tif (this._listeners == undefined)\r\n\t\t\tthis._listeners = {};\r\n\t\tvar listeners = this._listeners;\r\n\r\n\t\tif (listeners[type] == undefined) {\r\n\t\t\tlisteners[type] = [];\r\n\t\t}\r\n\r\n\t\tif (listeners[type].indexOf(listener) == - 1) {\r\n\r\n\t\t\tlisteners[type].push(listener);\r\n\r\n\t\t}\r\n\t};\r\n\r\n\tobj.hasEventListener = function (type, listener) {\r\n\r\n\t\tif (this._listeners == undefined) return false;\r\n\r\n\t\tvar listeners = this._listeners;\r\n\r\n\t\tif (listeners[type] !== undefined && listeners[type].indexOf(listener) !== - 1) {\r\n\r\n\t\t\treturn true;\r\n\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\r\n\t};\r\n\r\n\tobj.removeEventListener = function (type, listener) {\r\n\r\n\t\tif (this._listeners == undefined) return;\r\n\r\n\t\tvar listeners = this._listeners;\r\n\t\tvar listenerArray = listeners[type];\r\n\r\n\t\tif (listenerArray !== undefined) {\r\n\r\n\t\t\tvar index = listenerArray.indexOf(listener);\r\n\r\n\t\t\tif (index !== - 1) {\r\n\r\n\t\t\t\tlistenerArray.splice(index, 1);\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n\r\n\tobj.dispatchEvent = function (event) {\r\n\t\tif (this._listeners == undefined)\r\n\t\t\treturn;\r\n\t\tvar listeners = this._listeners;\r\n\t\tvar listenerArray = listeners[event.type];\r\n\r\n\t\tif (listenerArray !== undefined) {\r\n\r\n\t\t\tevent.target = this;\r\n\t\t\tvar array = [], i = 0;\r\n\t\t\tvar length = listenerArray.length;\r\n\r\n\t\t\tfor (i = 0; i < length; i++) {\r\n\t\t\t\tarray[i] = listenerArray[i];\r\n\t\t\t}\r\n\t\t\tfor (i = 0; i < length; i++) {\r\n\t\t\t\tarray[i].call(this, event);\r\n\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t};\r\n};\r\nexport default eventEnable;","import eventEnable from '../core/eventEnable';\r\nexport default class Binding{\r\n\tconstructor(name, callbackSet, dispose){\r\n\t\tthis._callbackSet = callbackSet;\r\n\t\tthis._dispose = dispose;\r\n\t\tthis._disposed = false;\r\n\t\tthis.getCallbackSet=this.getCallbackSet.bind(this);\r\n\t\tthis.callCallbackSet = this.callCallbackSet.bind(this);\r\n\t\tthis.dispose= this.dispose.bind(this);\r\n\t\tthis._dispatchDispose= this._dispatchDispose.bind(this);\r\n\t\teventEnable(this);\r\n\t}\r\n\tgetCallbackSet(){\r\n\t\treturn this._callbackSet;\r\n\t}\r\n\tcallCallbackSet(value){\r\n\t\tthis._callbackSet(value);\r\n\t}\r\n\tdispose(){\r\n\t\tif(this._disposed)return;\r\n\t\tthis._disposed = true;\r\n\t\tthis._dispatchDispose();\r\n\t}\r\n\t_dispatchDispose(){\r\n\t\tthis.dispatchEvent({type:'dispose', binding:this});\r\n\t}\r\n}","import eventEnable from '../core/eventEnable';\r\nexport default function Bindings(name, binding){\r\n\teventEnable(this);\r\n\tvar self = this;\r\n\tvar disposed = false;\r\n\tvar list = [];\r\n\tthis.add = add;\r\n\tthis.getList = function(){\r\n\t\treturn list;\r\n\t};\r\n\tthis.dispose = dispose;\r\n\tthis.remove = removeBinding;\r\n\tif(binding)\r\n\t\tself.add(binding);\r\n\tfunction dispose(){\r\n\t\tif(disposed)return;\r\n\t\tdisposed = true;\r\n\t\tlist.slice().forEach((binding)=>{/* because as we dispose them they will be calling back to remove themselves*/\r\n\t\t\tbinding.dispose();\r\n\t\t});\r\n\t\tdispatchDispose(); //Not really needed because upon disposing the last binding the event will be dispatched.\r\n\t}\r\n\tfunction add(binding){\r\n\t\tlistenForDispose(binding);\r\n\t\tlist.push(binding);\r\n\t}\r\n\tfunction listenForDispose(binding){\r\n\t\tbinding.addEventListener('dispose', callbackDispose);\r\n\t}\r\n\tfunction callbackDispose(e){\r\n\t\tremoveBinding(e.binding);\r\n\t}\r\n\tfunction removeBinding(binding){\r\n\t\tvar index = list.indexOf(binding);\r\n\t\tif(index<0)return;\r\n\t\tlist.splice(index, 1);\r\n\t\tif(list.length>0)return;\r\n\t\tdispose();\r\n\t}\r\n\tfunction dispatchDispose(){\r\n\t\tself.dispatchEvent({type:'dispose', bindings:self});\r\n\t}\r\n}","import Bindings from './Bindings';\r\nexport default function ModelBindingsForName(name, binding){\r\n\t\tvar self = this;\r\n\t\tvar bindings = new Bindings(name, binding);\r\n\t\tthis.containsCallbackSet=function(callbackSet){\r\n\t\t\treturn getByCallbackSet(callbackSet)?true:false;\r\n\t\t};\r\n\t\tthis.getByCallbackSet = getByCallbackSet;\r\n\t\tthis.changed= function(value){\r\n\t\t\tbindings.getList().forEach((binding)=>{\r\n\t\t\t\tbinding.callCallbackSet(value);\r\n\t\t\t});\r\n\t\t};\r\n\t\tthis.add = bindings.add;\r\n\t\tthis.getList = bindings.getList;\r\n\t\tthis.dispose = bindings.dispose;\r\n\t\tthis.addEventListener = bindings.addEventListener;\r\n\t\tthis.removeEventListener = bindings.removeEventListener;\r\n\t\tfunction getByCallbackSet(callbackSet){\r\n\t\t\tconst listBindings = bindings.getList();\r\n\t\t\tfor(var i=0, binding; binding=listBindings[i]; i++){\r\n\t\t\t\tif(binding.getCallbackSet()==callbackSet){\r\n\t\t\t\t\treturn binding;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}","import Console from './Console';\r\nimport Binding from './Binding';\r\nimport Bindings from './Bindings';\r\nimport ModelBindingsForName from './ModelBindingsForName';\r\nconst console = Console;\r\nexport default function BindingsHandler(model){\r\n\tconst self = this;\r\n\tconst mapNameToModelBindings = {};\r\n\tmodel.bind = (name, callbackSet)=>{\r\n\t\tvar view = this;\r\n\t\tvar viewBindings = getViewBindings(view);\r\n\t\tvar bindings = mapNameToModelBindings[name];\r\n\t\tif(!bindings){\r\n\t\t\tconst binding = new Binding(name, callbackSet);\r\n\t\t\tviewBindings.add(binding);\r\n\t\t\tconst modelBindings = new ModelBindingsForName(name, binding);\r\n\t\t\tmodelBindings.addEventListener('dispose', callbackDisposeModelBindings);\r\n\t\t\tmapNameToModelBindings[name]=modelBindings;\r\n\t\t\treturn viewBindings;\r\n\t\t}\r\n\t\tif(bindings.containsCallbackSet(callbackSet))return false;\r\n\t\tconst binding = new Binding(name, callbackSet);\r\n\t\tviewBindings.add(binding);\r\n\t\tbindings.add(binding);\r\n\t\treturn viewBindings;\r\n\t};\r\n\tmodel.unbind = (name, callbackSet)=>{\r\n\t\tvar bindings = mapNameToModelBindings[name];\r\n\t\tif(!bindings)return;\r\n\t\tvar binding = bindings.getByCallbackSet(callbackSet);\r\n\t\tif(!binding)return;\r\n\t\tbinding.dispose();\r\n\t};\r\n\tthis.changed = function(name, value){\r\n\t\tvar bindings = mapNameToModelBindings[name];\r\n\t\tif(!bindings)return;\r\n\t\tbindings.changed(value);\r\n\t};\r\n\tthis.dispose= function(){\r\n\t\tfor(var i in mapNameToModelBindings){\r\n\t\t\tvar modelBindings = mapNameToModelBindings[i];\r\n\t\t\tmodelBindings.dispose();\r\n\t\t}\r\n\t\tmapNameToModelBindings={};\r\n\t};\r\n\tfunction getViewBindings(view){\r\n\t\tif(!view.bindings){\r\n\t\t\tview.bindings = new Bindings();\r\n\t\t}\r\n\t\treturn view.bindings;\r\n\t}\r\n\tfunction callbackDisposeModelBindings(e){\r\n\t\tvar name = e.bindings.getName();\r\n\t\tif(mapNameToModelBindings[name])\r\n\t\t\tdelete mapNameToModelBindings[name];\r\n\t}\r\n}","import BindingsHandler from './BindingsHandler';\r\nimport Console from './Console';\r\nconst console = Console;\r\nexport default function enableAcceptBindings(model){\r\n\tif(model.bindingsHandler)return model.bindingsHandler\r\n\tmodel.bindingsHandler = new BindingsHandler(model);\r\n\treturn model.bindingsHandler;\r\n};","export default function capitalizeFirstLetter(str){\r\n\treturn str.substr(0, 1).toUpperCase()+str.substr(1, str.length-1);\r\n}","import capitalizeFirstLetter from '../core/capitalizeFirstLetter';\r\nexport default class PropertyHelper{\r\n\t//type '+model.constructor.name+' does not contain a getter method with name '+getterName);\r\n\tstatic getGetterName(propertyName){\r\n\t\treturn PropertyHelper._getGetterName(capitalizeFirstLetter(propertyName));\r\n\t}\r\n\tstatic getSetterName(propertyName){\r\n\t\treturn PropertyHelper._getSetterName(capitalizeFirstLetter(propertyName));\r\n\t}\r\n\tstatic hasGetter(model, propertyName){\r\n\t\treturn model[PropertyHelper._getGetterName(capitalizeFirstLetter(propertyName))]?true:false;\r\n\t}\r\n\tstatic propertyValuesToObj(obj, model, propertyNames){\r\n\t\tif(!obj)obj={};\r\n\t\tpropertyNames.forEach((propertyName)=>{\r\n\t\t\tvar getterName = PropertyHelper._getGetterName(capitalizeFirstLetter(propertyName));\r\n\t\t\tvar method = model[getterName];\r\n\t\t\tif(method===undefined)throw new Error('Model of type '+model.constructor.name+' has no method '+getterName);\r\n\t\t\tobj[propertyName]=method();\r\n\t\t});\r\n\t\treturn obj;\r\n\t}\r\n\tstatic propertyValuesFromObj(obj, model, propertyNames){\r\n\t\tpropertyNames.forEach((propertyName)=>{\r\n\t\t\tvar setterName = PropertyHelper._getSetterName(capitalizeFirstLetter(propertyName));\r\n\t\t\tvar method = model[setterName];\r\n\t\t\tif(method===undefined)throw new Error('Model of type '+model.constructor.name+' has no method '+setterName);\r\n\t\t\tmethod(obj[propertyName]);\r\n\t\t});\r\n\t\treturn obj;\r\n\t}\r\n\tstatic _getGetterName(capitalizedName){\r\n\t\treturn 'get'+capitalizedName;\r\n\t}\r\n\tstatic _getSetterName(capitalizedName){\r\n\t\treturn 'set'+capitalizedName;\r\n\t}\r\n}","import PropertyHelper from './PropertyHelper';\r\nimport enableAcceptBindings from './enableAcceptBindings';\r\nimport Console from './Console';\r\nconst console = Console;\r\nexport default function exposeBinding(model, name, getLambda, setLambda){\r\n\tconst getterName = PropertyHelper.getGetterName(name);\r\n\tif(model[getterName]!==undefined)throw new Error(`getter for exposing \\\"${name}\\\" is already defined`);\r\n\tconst setterName = PropertyHelper.getSetterName(name);\r\n\tif(model[setterName]!==undefined)throw new Error(`setter for exposing \\\"${name}\\\" is already defined`);\r\n\tmodel[getterName]=getLambda;\r\n\tmodel[setterName]=setLambda;\r\n\tenableAcceptBindings(model);\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport eventEnable from '../core/eventEnable';\r\nconst {throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class HouseType{\r\n\tstatic get _ALLOWED_NAME_SEPERATORS(){\r\n\t\treturn [' ', '_', '-', ''];\r\n\t}\r\n\tconstructor(props){\r\n\t\tconst{slug, name, imageRelativePath, getSiteJson, configuration, nBedrooms, nBathrooms, about}=props;\r\n\t\teventEnable(this);\r\n\t\tenableAcceptBindings(this);\r\n\t\t\r\n\t\t\r\n\t\tif(nBedrooms===undefined||nBedrooms===null)\r\n\t\t\tthrowNotProvided('nBedrooms');\r\n\t\t\r\n\t\tif(typeof(nBedrooms)!=='number')\r\n\t\t\tthrowNotOfType('nBedrooms', 'number');\r\n\t\tthis._nBedrooms = nBedrooms;\r\n\t\tthis._nBathrooms = nBathrooms;\r\n\t\tthis._about = about;\r\n\t\tconsole.log('_About is '+this._about);\r\n\t\tthis._getSiteJson =getSiteJson;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._slug = slug;\r\n\t\tthis._name = name;\r\n\t\tthis._imageRelativePath = imageRelativePath;\r\n\t\tthis._allPossibleLowerCaseStrings = HouseType._getAllPossibleLowerCaseStrings(name);\r\n\t\tthis._configuratorUrl = null;\r\n\t\tthis._tourUrl = null;\r\n\t\tthis._videoUrl = null;\r\n\t\tthis._features = [];\r\n\t\texposeBinding(this, 'tourUrl', ()=>this.tourUrl, (value)=>this.tourUrl = value);\r\n\t\tthis._statuses = null;\r\n\t\texposeBinding(this, 'statuses', ()=>this.statuses, (value)=>this.statuses = value, true);\r\n\t\texposeBinding(this, 'videoUrl', ()=>this.videoUrl, (value)=>this.videoUrl = value, true);\r\n\t\texposeBinding(this, 'features', ()=>this.features, (value)=>this.features = value);\r\n\t}\r\n\tget allPossibleLowerCaseStrings(){\r\n\t\treturn this._allPossibleLowerCaseStrings;\r\n\t}\r\n\tgetDescription(){\r\n\t\treturn this._name;\r\n\t}\r\n\tget name(){\r\n\t\treturn this._name;\r\n\t}\r\n\tget slug(){\r\n\t\treturn this._slug;\r\n\t}\r\n\tget configuratorUrl(){\r\n\t\treturn this._configuratorUrl;\r\n\t}\r\n\tset configuratorUrl(value){\r\n\t\tthis._configuratorUrl = value;\r\n\t}\r\n\tget tourUrl(){\r\n\t\treturn this._tourUrl;\r\n\t}\r\n\tget statuses(){\r\n\t\treturn this._statuses;\r\n\t}\r\n\tset tourUrl(value){\r\n\t\tconst changed = this._tourUrl!==value\r\n\t\tif(!changed)return;\r\n\t\tthis._tourUrl = value;\r\n\t\tthis.bindingsHandler.changed('tourUrl', value);\r\n\t}\r\n\tget videoUrl(){\r\n\t\treturn this._videoUrl;\r\n\t}\r\n\tset videoUrl(value){\r\n\t\tconst changed = this._videoUrl!==value\r\n\t\tif(!changed)return;\r\n\t\tthis._videoUrl = value;\r\n\t\tthis.bindingsHandler.changed('videoUrl', value);\r\n\t}\r\n\tget plots(){\r\n\t\treturn this._getSiteJson().getPlotsForHouseType(this);\r\n\t}\r\n\tgetImageAbsolutePath(){\r\n\t\treturn `${Urls.getAssetsForSite(this._configuration.siteSlug)}${UrlHelper.removeStartSlash(this._imageRelativePath)}`;\r\n\t}\r\n\tget features(){\r\n\t\treturn this._features;\r\n\t}\r\n\tset features(value){\r\n\t\tconsole.log('house type feature set');\r\n\t\tconsole.log(value);\r\n\t\tthis._features= value;\r\n\t\tthis.bindingsHandler.changed('features');\r\n\t\tthis.dispatchEvent({type:'featureschanged', features:this._features});\r\n\t}\r\n\tget nBedrooms(){\r\n\t\treturn this._nBedrooms;\r\n\t}\r\n\tget nBathrooms(){\r\n\t\treturn this._nBathrooms;\r\n\t}\r\n\tget about(){\r\n\t\treturn this._about;\r\n\t}\r\n\tstatic _getAllPossibleLowerCaseStrings(name){\r\n\t\tname = name.toLowerCase();\r\n\t\tconst allowedNameSeperators = HouseType._ALLOWED_NAME_SEPERATORS;\r\n\t\tconst nameComponents = name.split(new RegExp('['+allowedNameSeperators.join('')+']'));\r\n\t\tif(nameComponents.length<1)return name;\r\n\t\tconst strs=[];\r\n\t\tallowedNameSeperators.forEach((seperator)=>{\r\n\t\t\tlet str='';\r\n\t\t\tnameComponents.forEach(nameComponent=>str+=nameComponent);\r\n\t\t\tstrs.push(str);\r\n\t\t});\r\n\t\treturn strs;\r\n\t}\r\n\tstatic fromJSON(jObject, getSiteJson, configuration){\r\n\t\treturn new HouseType({\r\n\t\t\tslug:jObject.slug,\r\n\t\t\tname:jObject.name,\r\n\t\t\timageRelativePath:jObject.imageRelativePath,\r\n\t\t\tgetSiteJson,\r\n\t\t\tconfiguration,\r\n\t\t\tnBedrooms:jObject.nBedrooms,\r\n\t\t\tnBathrooms:jObject.nBathrooms,\r\n\t\t\tabout:jObject.about\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport HouseType from './HouseType';\r\nimport ParseError from '../errors/ParseError';\r\nconst {throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class HouseTypes{\r\n\tconstructor(props){\r\n\t\tconst{list } = props;\r\n\t\tthis.getBySlug = this.getBySlug.bind(this);\r\n\t\tif(list===undefined||list===null)throwNotProvided('list');\r\n\t\tif(!Array.isArray(list))throwNotOfType('list', 'array');\r\n\t\tthis._list = list;\r\n\t}\r\n\tgetArray(){\r\n\t\treturn this._list;\r\n\t}\r\n\tgetBySlug(slug){\r\n\t\tfor(var i=0; i=0)\r\n\t\t\t\treturn houseType;\r\n\t\t}\r\n\t\tthrow new ParseError(`Could not parse \"${value}\" to HouseType`);\r\n\t}\r\n}","import ParseError from '../errors/ParseError';\r\nimport NotImplementedError from '../errors/NotImplementedError';\r\nimport ValueError from '../errors/ValueError';\r\nconst RoomType = {\r\n\tKITCHEN:1,\r\n BEDROOM:2,\r\n BATHROOM:3,\r\n EN_SUITE:4\r\n};\r\nRoomType.getDescription = function(roomType){\r\n\tif(roomType===RoomType.KITCHEN)\r\n\t\treturn \"Kitchen\";\r\n\tif( roomType===RoomType.BEDROOM)\r\n\t\treturn \"Bedroom\";\r\n\tif( roomType===RoomType.BATHROOM)\r\n\t\treturn \"Bathroom\";\r\n\tif( roomType===RoomType.EN_SUITE)\r\n\t\treturn \"En Suite\";\r\n\tthrow new NotImplementedError(`Not implemented for \"${roomType}\"`);\r\n};\r\nRoomType.toStr = function(roomType){\r\n\tif( roomType===RoomType.KITCHEN)\r\n\t\treturn \"kitchen\";\r\n\tif( roomType===RoomType.BEDROOM)\r\n\t\treturn \"bedroom\";\r\n\tif( roomType===RoomType.BATHROOM)\r\n\t\treturn \"bathroom\";\r\n\tif( roomType===RoomType.EN_SUITE)\r\n\t\treturn \"ensuite\";\r\n\tthrow new NotImplementedError(`Not implemented for \"${roomType}\"`);\r\n};\r\nRoomType.parse = function(value){\r\n\tif(value===undefined||value===null)\r\n\t\tthrow ValueError('value was None');\r\n\tif(typeof(value)==='string')\r\n\t\treturn RoomType.parseFromString(value);\r\n\tif(typeof(value)==='number')\r\n\t\treturn RoomType.parseFromInt(value);\r\n\tthrow new ParseError(`Could not parse value \"${value}\" to RoomType\"`);\r\n};\r\nRoomType.parseFromString = function(value){\r\n\tvalue = value.toLowerCase();\r\n\tif (value==='kitchen')\r\n\t\treturn RoomType.KITCHEN;\r\n\tif (value==='bedroom'){\r\n\t\treturn RoomType.BEDROOM;\r\n\t}\r\n\tif (value==='bathroom'){\r\n\t\treturn RoomType.BATHROOM;\r\n\t}\r\n\tif ( ['ensuite', 'en_suite', 'en suite'].indexOf(value)>=0){\r\n\t\treturn RoomType.EN_SUITE;\r\n\t}\r\n\tthrow new NotImplementedError(`Not implemented for \"${value}\"`);\r\n};\r\nRoomType.parseFromInt = function(value){\r\n\treturn value;\r\n};\r\nexport default RoomType;","export default class Handle{\r\n\tconstructor(props){\r\n\t\tthis._callbackDispose = props.dispose;\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t}\r\n\tdispose(){\r\n\t\tthis._callbackDispose(this);\r\n\t}\r\n}","import eventEnable from './eventEnable';\r\nimport Handle from './Handle';\r\nexport default class Handles{\r\n\tconstructor(props){\r\n\t\teventEnable(this);\r\n\t\tthis._handles = [];\r\n\t\tthis._currentlyHasHandles = false;\r\n\t\tthis.take = this.take.bind(this);\r\n\t\tthis._dispose = this._dispose.bind(this);\r\n\t\tthis._dispatchChangedIfChanged = this._dispatchChangedIfChanged.bind(this);\r\n\t\tthis._dispatchChanged = this._dispatchChanged.bind(this);\r\n\t}\r\n\ttake(){\r\n\t\tconst handle = new Handle({dispose:this._dispose});\r\n\t\tthis._handles.push(handle);\r\n\t\tsetTimeout(this._dispatchChangedIfChanged, 0);\r\n\t\treturn handle;\r\n\t}\r\n\tget taken(){\r\n\t\treturn this._handles.length>0;\r\n\t}\r\n\t_dispose(handle){\r\n\t\tconst handles = this._handles;\r\n\t\tconst index = handles.indexOf(handle);\r\n\t\tif(index<0)return;\r\n\t\thandles.splice(index, 1);\r\n\t\tthis._dispatchChangedIfChanged();\r\n\t}\r\n\t_dispatchChangedIfChanged(){\r\n\t\tif((this._handles.length>0)^(this._currentlyHasHandles))\r\n\t\t{\r\n\t\t\tthis._currentlyHasHandles=!this._currentlyHasHandles;\r\n\t\t\tsetTimeout(this._dispatchChanged, 0);\r\n\t\t}\r\n\t}\r\n\t_dispatchChanged(){\r\n\t\tthis.dispatchEvent({type:'change', hasHandles:this._currentlyHasHandles});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Vector2 from '../geometry/Vector2';\r\nimport Location from '../modelling/Location';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport PlotStatus from './PlotStatus';\r\nimport HouseTypes from './HouseTypes';\r\nimport RoomType from './RoomType';\r\nimport eventEnable from '../core/eventEnable';\r\nimport Handles from '../core/Handles';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonUnitBirdsEyeView{\r\n\tconstructor(props){\r\n\t\tconst {index, markerPosition}=props;\r\n\t\tif(index===undefined||index===null)\r\n\t\t\tthrowNotProvided('index');\r\n\t\t\r\n\t\tif(typeof(index)!=='number')\r\n\t\t\tthrowNotOfType('index', 'number');\r\n\t\tthis._index = index;\r\n\t\t\r\n\t\tif(markerPosition===undefined || markerPosition===null)\r\n\t\t\tthrowNotProvided('markerPosition');\r\n\t\tthis._markerPosition = markerPosition;\r\n\t}\r\n\tget index(){\r\n\t return this._index;\r\n\t}\r\n\tget markerPosition(){\r\n\t\treturn this._markerPosition;\r\n\t}\r\n\ttoJSON(){\r\n\t\tthrow new Error('Not implemented');\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\treturn new SiteJsonUnitBirdsEyeView({\r\n\t\t\tindex:jObject.index, \r\n\t\t\tmarkerPosition:jObject.markerPosition?Vector2.fromObj(jObject.markerPosition):null\r\n\t\t});\r\n\t}\r\n\t\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport SiteJsonUnitBirdsEyeView from './SiteJsonUnitBirdsEyeView';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonUnitBirdsEyeViews{\r\n\tconstructor(props){\r\n\t\tconst {list}=props;\r\n\t\tthis._list = list;\r\n\t\tthis.getMarkerPositionForBirdsEyeViewWithIndex= this.getMarkerPositionForBirdsEyeViewWithIndex.bind(this);\r\n\t\tthis.toJSON=this.toJSON.bind(this);\r\n\t}\r\n\tgetMarkerPositionForBirdsEyeViewWithIndex(index){\r\n\t\tconst birdsEyeViewsWithIndex = this._list.filter(birdsEyeView=>birdsEyeView.index===index);\r\n\t\treturn birdsEyeViewsWithIndex.length>0?birdsEyeViewsWithIndex[0].markerPosition:null; \r\n\t}\r\n\ttoJSON(){\r\n\t\tthrow new Error('Not implemented');\r\n\t}\r\n\tstatic fromJSON(jArray){\r\n\t\tconst list = jArray.map(jObject=>SiteJsonUnitBirdsEyeView.fromJSON(jObject));\r\n\t\treturn new SiteJsonUnitBirdsEyeViews({\r\n\t\t\tlist:list\r\n\t\t});\r\n\t}\r\n\t\r\n}","const FitType ={WIDTH:'width', HEIGHT:'height'};\r\nexport default FitType;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nimport FitType from './FitType';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class DynamicImageFitCriteria {\r\n\tconstructor(props){\r\n\t\tconst {fitType} = props;\r\n\t\tthis._fitType = fitType;\r\n\t}\r\n\tget fitType(){\r\n\t\treturn this._fitType;\r\n\t}\r\n\tget fitWidth(){\r\n\t\treturn this._fitType===FitType.WIDTH;\r\n\t}\r\n\tget fitHeight(){\r\n\t\treturn this._fitType===FitType.HEIGHT;\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class DynamicImageEntry {\r\n\tconstructor(props){\r\n\t\tconst {relativePath, width, height} = props;\r\n\t\tthis._width = width;\r\n\t\tthis._height = height;\r\n\t\tthis._relativePath = relativePath;\r\n\t}\r\n\tget width(){\r\n\t\treturn this._width;\r\n\t}\r\n\tget height(){\r\n\t\treturn this._height;\r\n\t}\r\n\tget relativePath(){\r\n\t\treturn this._relativePath;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\treturn new DynamicImageEntry({\r\n\t\t\twidth:jObject.width,\r\n\t\t\theight:jObject.height,\r\n\t\t\trelativePath:jObject.relativePath\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nimport DynamicImageFitCriteria from './DynamicImageFitCriteria';\r\nimport DynamicImageEntry from './DynamicImageEntry';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class DynamicImage {\r\n\tconstructor(props){\r\n\t\tconst {entries}=props;\r\n\t\tthis._entriesIncreasing = entries;\r\n\t\tthis._entriesIncreasing.sort(function(a, b) {\r\n\t\t\treturn a.width - b.width;\r\n\t\t});\r\n\t\tthis.getBestEntryToFit= this.getBestEntryToFit.bind(this);\r\n\t\tthis.getBestEntryToFitWidth= this.getBestEntryToFitWidth.bind(this);\r\n\t\tthis.getBestEntryToFitHeight= this.getBestEntryToFitHeight.bind(this);\r\n\t}\r\n\tget entries(){\r\n\t\treturn this._entriesIncreasing;\r\n\t}\r\n\tgetLargestEntry (){\r\n\t\treturn this._entriesIncreasing[this._entriesIncreasing.length-1];\r\n\t}\r\n\tgetBestEntryToFit(params){\r\n\t\tconst {fitCriteria}=params;\r\n\t\tif(!fitCriteria)throwNotProvided('fitCriteria');\r\n\t\tif(fitCriteria.fitWidth){\r\n\t\t\treturn this.getBestEntryToFitWidth(params.width);\r\n\t\t}\r\n\t\treturn this.getBestEntryToFitHeight(params.height);\r\n\t}\r\n\tgetBestEntryToFitWidth(width){//Can improve how it picks images later. \r\n\t\tvar i=0; \r\n\t\twhile(i=width){\r\n\t\t\t\treturn entry;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._entriesIncreasing[i-1];\r\n\t}\r\n\tgetBestEntryToFitHeight(height){\r\n\t\tvar i=0; \r\n\t\twhile(i=height){\r\n\t\t\t\treturn entry;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn this._entriesIncreasing[i-1];\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\treturn new DynamicImage({\r\n\t\t\tentries:jObject.entries.map(entry=>new DynamicImageEntry(entry))\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport RoomType from './RoomType';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport DynamicImage from '../images/DynamicImage';\r\nconst { throwNotProvided, throwNotOfType } = ParameterErrors;\r\nexport default class SiteJsonUnitPlotRoom{\r\n\tconstructor(props){\r\n\t\tconst {roomType, features, images, getParentPlot}=props;\r\n\t\tif(roomType === undefined || roomType === null)throwNotProvided('roomType');\r\n\t\tthis._roomType = roomType;\r\n\t\t\r\n\t\tif(features ===undefined || features === null)\r\n\t\t\tthrowNotProvided('features');\r\n\t\t\r\n\t\tif(getParentPlot ===undefined || getParentPlot === null)\r\n\t\t\tthrowNotProvided('getParentPlot');\r\n\t\tthis._getParentPlot = getParentPlot;\r\n\t\t\r\n\t\tif(features ===undefined || features === null)\r\n\t\t\tthrowNotProvided('features');\r\n\t\t\r\n\t\tif(!Array.isArray(features))\r\n\t\t\tthrowNotOfType('features', 'array');\r\n\t\tthis._features = features;\r\n\t\t\r\n\t\tif(images==undefined||images===null)throwNotProvided('images');\r\n\t\tthis._images=images;\r\n\t\t\r\n\t}\r\n\tget roomType(){\r\n\t\treturn this._roomType;\r\n\t}\r\n\tget features(){\r\n\t\treturn this._features;\r\n\t}\r\n\tget images(){\r\n\t\treturn this._images;\r\n\t}\r\n\tstatic fromJSON(jObject, getParentPlot){\r\n\t\treturn new SiteJsonUnitPlotRoom({\r\n\t\t\troomType:RoomType.parse(jObject.roomType),\r\n\t\t\tfeatures:jObject.features,\r\n\t\t\timages:jObject.images.map(image=>DynamicImage.fromJSON(image)),\r\n\t\t\tgetParentPlot:getParentPlot\r\n\t\t});\r\n\t}\r\n\t\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport SiteJsonUnitPlotRoom from './SiteJsonUnitPlotRoom';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonUnitPlotRooms{\r\n\tconstructor(props){\r\n\t\tconst {list}=props;\r\n\t\tif(list === undefined || list === null)\r\n\t\t\tthrowNotProvided('list');\r\n\t\tif(!Array.isArray(list))\r\n\t\t\tthrowNotOfType('list', 'Array');\r\n\t\tthis._list = list;\r\n\t\tthis.toJSON= this.toJSON.bind(this);\r\n\t}\r\n\tgetArray(){\r\n\t\treturn this._list;\r\n\t}\r\n\ttoJSON(){\r\n\t\treturn this._list.map(room=>room.toJSON());\r\n\t}\r\n\tget allImages(){\r\n\t\tlet images =[];\r\n\t\tthis._list.forEach(room=>images = images.concat(room.images));\r\n\t\treturn images;\r\n\t}\r\n\tstatic fromJSON(jArraySites, getParentPlot){\r\n\t\tif(getParentPlot === undefined || getParentPlot === null)\r\n\t\t\tthrowNotProvided('getParentPlot');\r\n\t\tconst rooms=[];\r\n\t\tfor(var i=0; i{\r\n\t\t\tpropertyBinding.unbind();\r\n\t\t});\r\n\t\tthis._propertyBindings=new Set();\r\n\t}\r\n\tdispose(){\t\r\n\t\tif(this._disposed)\r\n\t\t\treturn;\r\n\t\tthis._disposed=true;\r\n\t\tthis.reset();\r\n\t}\r\n}","import MyBindings from './MyBindings';\r\nexport default function enableBindingToOthers (me){\r\n\tif(me.myBindings)return me.myBindings;\r\n\tme.myBindings= new MyBindings(me);\r\n\treturn me.myBindings;\r\n}","\r\nimport enableBindingToOthers from './enableBindingToOthers';\r\n//import enableHash from '../core/enableHash';\r\nimport capitalizeFirstLetter from '../core/capitalizeFirstLetter';\r\n//import PropertyBindings from './PropertyBindings';\r\n//import PropertyBinding from './PropertyBinding';\r\nimport PropertyHelper from './PropertyHelper';\r\n//import PropertyBindingCarriedOver from './PropertyBindingCarriedOver';\r\n//import PropertyBindingShell from './PropertyBindingShell';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided }= ParameterErrors\r\nexport default class PropertyBinding{\r\n\t\tconstructor (me, model, name, valueChanged){\r\n\t\t\tthis._me = me;\r\n\t\t\tthis._model = model;\r\n\t\t\tthis._name = name;\r\n\t\t\tthis._valueChanged = valueChanged;\r\n\t\t\tthis._disposed=false;\r\n\t\t\t\r\n\t\t\tthis.set = this.set.bind(this);\r\n\t\t\tthis.get = this.get.bind(this);\r\n\t\t\tthis.getName = this.getName.bind(this);\r\n\t\t\tthis.dispose= this.dispose.bind(this);\r\n\t\t\tthis.unbind = this.unbind.bind(this);\r\n\t\t\t\r\n\t\t\tconst capitalizedName = capitalizeFirstLetter(name);\r\n\t\t\tthis._setterName = PropertyHelper.getSetterName(capitalizedName);\r\n\t\t\tthis._getterName = PropertyHelper.getGetterName(capitalizedName);\r\n\t\t\tif(!model)throwNotProvided('model');\r\n\t\t\tmodel.bind(name, valueChanged);\r\n\t\t\tconst myPropertyBindings= enableBindingToOthers(me);\r\n\t\t\tmyPropertyBindings.add(this);\r\n\t\t}\r\n\t\tset(value){\r\n\t\t\tvar setter = this._model[this._setterName];\r\n\t\t\tif(!setter)\r\n\t\t\t\tthrow new Error('model of type '+this._model.constructor.name+' does not contain a setter method with name '+this._setterName);\r\n\t\t\tif(typeof(setter)!=='function')\r\n\t\t\t\tthrow new Error(this._model.constructor.name+'.'+this._setterName+' is not a function');\r\n\t\t\tsetter(value);\r\n\t\t}\r\n\t\tget(){\r\n\t\t\tvar getter = this._model[this._getterName];\r\n\t\t\tif(!getter)throw new Error('model of type '+this._model.constructor.name+' does not contain a getter method with name '+this._getterName);\r\n\t\t\tif(typeof(getter)!=='function')\r\n\t\t\t\tthrow new Error(this._model.constructor.name+'.'+this._getterName+' is not a function');\r\n\t\t\treturn getter();\r\n\t\t}\r\n\t\tgetName(){\r\n\t\t\treturn this._name;\r\n\t\t}\r\n\t\tdispose(){\r\n\t\t\tif(this._disposed)return;\r\n\t\t\tthis._disposed=true;\r\n\t\t\tthis._me.myBindings.remove(this);\r\n\t\t\tthis.unbind();\r\n\t\t}\r\n\t\tunbind(){\r\n\t\t\tthis._model.unbind(this._name, this._valueChanged);\r\n\t\t}\r\n\t}","export default function PropertyBindingCarriedOver(propertyBindingSource, propertyBindingCarriedOver){\r\n\t\tthis.getSource=function(){return propertyBindingSource;};\r\n\t\tthis.getCarriedOver=function(){return propertyBindingCarriedOver;};\r\n\t}","export default class PropertyBindingShell{\r\n\tconstructor(getterMethod, setterMethod){\r\n\t\tthis._getMethod = getterMethod;\r\n\t\tthis._setMethod =setterMethod;\r\n\t\tthis.get = this.get.bind(this);\r\n\t\tthis.set = this.set.bind(this);\r\n\t}\r\n\tget(){\r\n\t\treturn this._getMethod();\r\n\t}\r\n\tset(value){\r\n\t\tthis._setMethod(value);\r\n\t}\r\n}","import Console from './Console';\r\nimport enableAcceptBindings from './enableAcceptBindings';\r\nimport enableHash from '../core/enableHash';\r\nimport capitalizeFirstLetter from '../core/capitalizeFirstLetter';\r\nimport PropertyBinding from './PropertyBinding';\r\nimport PropertyHelper from './PropertyHelper';\r\nimport PropertyBindingCarriedOver from './PropertyBindingCarriedOver';\r\nimport PropertyBindingShell from './PropertyBindingShell';\r\nconst console = Console;\r\nexport default class PropertyBindingFactory{\r\n\t\r\n\t//meOrParams, model, nameParam, onChange, converter, viewModelName, onSetByView\r\n\t/*params {\r\n\t\tS.ME\r\n\t\tS.MODEL\r\n\t\tS.NAME or S_NAMES\r\n\t\tS.VIEW_MODEL_NAME (optional)\r\n\t\tS.ON_CHANGE(optional) Not intended if more than one name supplied.\r\n\t\tS.CONVERTER (optional)\r\n\t\tS.ON_SET_BY_VIEW (optional)\r\n\t}*/\r\n\tstatic carryOver(meOrParams, model, nameParam, viewModelName, converter, onChange, onSetByView){\r\n\t\tvar me, viewModelName;\r\n\t\tif(model===undefined&&nameParam===undefined){\r\n\t\t\tme=meOrParams.me;\r\n\t\t\tmodel = meOrParams.model;\r\n\t\t\tnameParam=meOrParams.name;\r\n\t\t\tif(!nameParam)\r\n\t\t\t\tnameParam=meOrParams.names;\r\n\t\t\telse \r\n\t\t\t{\r\n\t\t\t\tviewModelName = meOrParams.viewModelName;\r\n\t\t\t\tif(!viewModelName){\r\n\t\t\t\t\tviewModelName = nameParam;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tonChange=meOrParams.onChange;\r\n\t\t\tconverter=meOrParams.converter;\r\n\t\t\tonSetByView=meOrParams.onSetByView;\r\n\t\t}\r\n\t\telse\r\n\t\t\tme=meOrParams;\r\n\t\tif(typeof(nameParam)==='string'){\r\n\t\t\treturn /*new*/ PropertyBinding._carryOver(me, model, nameParam, onChange, converter, onSetByView, viewModelName);\r\n\t\t}\r\n\t\tconst propertyBindings=[];\r\n\t\tnameParam.forEach((name)=>{\r\n\t\t\tpropertyBindings.push(/*new*/ PropertyBinding._carryOver(me, model, name, undefined, converter));\r\n\t\t});\r\n\t\treturn propertyBindings;\r\n\t}\r\n\t\r\n\t\r\n\t//me, model, name, viewModelClass, onViewModelSet\r\n\t//me, model, name, viewModelName, viewModelClass, onViewModelSet\r\n\tstatic carryOverChildModelAsChildViewModel(me, model/*the model being carried over is a property of this model*/, name, a,b,c){\r\n\t\tvar createViewModel, onViewModelSet,viewModelName;\r\n\t\tif(typeof(a)==='string')\r\n\t\t{\r\n\t\t\tviewModelName=a;\r\n\t\t\tcreateViewModel = b;\r\n\t\t\tonViewModelSet = c;\r\n\t\t}else{\r\n\t\t\tviewModelName=name;\r\n\t\t\tcreateViewModel=a;\r\n\t\t\tonViewModelSet=b;\r\n\t\t}\t\t\r\n\t\tvar bindingsHandler = enableAcceptBindings(me);\r\n\t\tvar viewModel;\r\n\t\tvar currentModel;\r\n\t\tconst _change=(value, oldValue)=>{\r\n\t\t\tbindingsHandler.changed(viewModelName, value);\r\n\t\t\tonViewModelSet&&onViewModelSet(value, oldValue);\r\n\t\t};\r\n\t\tconst change=(value)=>{\r\n\t\t\tvar oldViewModel = viewModel;\r\n\t\t\tif(!value)\r\n\t\t\t{\r\n\t\t\t\tif(!currentModel)return;\r\n\t\t\t\tviewModel = null;\r\n\t\t\t\t_change(viewModel, oldViewModel);\r\n\t\t\t\tcurrentModel= null;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif(value==currentModel)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tcurrentModel = value;\r\n\t\t\tviewModel = createViewModel(value);\r\n\t\t\t_change(viewModel, oldViewModel);\r\n\t\t};\r\n\t\tvar capitalizedName = capitalizeFirstLetter(viewModelName);\r\n\t\tvar getterName = PropertyHelper.getGetterName(capitalizedName);\r\n\t\t//if(!model[getterName])throw new Error('Model of type '+model.constructor.name+' does not contain a getter with name '+getterName);\r\n\t\tme[getterName]=function(){return viewModel;};\r\n\t\tvar propertyBinding = new PropertyBinding(me, model, name, change);\r\n\t\tchange(propertyBinding.get());\r\n\t\treturn propertyBinding;\r\n\t}\r\n\tstatic carryOverChildViewModelAsChildView(me, viewModel,// this is actually very similar to the above but for now keep as seperate to avoid confusion.\r\n\t\tname, createView, onViewSet){\r\n\t\tvar bindingsHandler = enableAcceptBindings(me);\r\n\t\tvar view;\r\n\t\tvar currentViewModel;\r\n\t\tfunction change(value){\r\n\t\t\tif(!value)\r\n\t\t\t{\r\n\t\t\t\tif(!currentViewModel)return;\r\n\t\t\t\tvar oldView = view;\r\n\t\t\t\tdisposeCurrentView();\r\n\t\t\t\t_change(null, oldView);\r\n\t\t\t\tcurrentViewModel= null;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif(value==currentViewModel)\r\n\t\t\t{\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tvar oldView = view;\r\n\t\t\tdisposeCurrentView();\r\n\t\t\tcurrentViewModel = value;\r\n\t\t\tview = createView(value);\r\n\t\t\t_change(view, oldView);\r\n\t\t};\r\n\t\tfunction disposeCurrentView(){\r\n\t\t\tif(!view)return;\r\n\t\t\tview.dispose();//force implementing dispose for good practise so dont forget cleanup.\r\n\t\t\tview = null;\r\n\t\t}\r\n\t\tfunction _change(view, oldView){\r\n\t\t\tbindingsHandler.changed(name, view);\r\n\t\t\tonViewSet&&onViewSet(view, oldView);\r\n\t\t}\r\n\t\tvar capitalizedName = capitalizeFirstLetter(name);\r\n\t\tvar getterName = PropertyHelper.getGetterName(capitalizedName);\r\n\t\tvar getter = viewModel[getterName];\r\n\t\tif(!getter)throw new Error('Model of type '+viewModel.constructor.name+' does not contain a get method for property named '+name);\r\n\t\tchange(getter());\r\n\t\tme[getterName]=function(){return view;};\r\n\t\tvar propertyBinding = new PropertyBinding(me, viewModel, name, change);\r\n\t\treturn propertyBinding;\r\n\t}\r\n\tstatic arrayConversion(me, model, name, createConvertedItem, removedItem, changedCallback, postpone/* called any time the child changes*/){\r\n\t\treturn PropertyBindingFactory._arrayConversion(me, model, name, createConvertedItem, removedItem, changedCallback, postpone, function(item){\r\n\t\t\treturn enableHash(item);\r\n\t\t});\r\n\t}\r\n\tstatic arrayConversionFromPrimitives(me, model, name, createConvertedItem, removedItem, changedCallback/* called any time the child changes*/, postpone){\r\n\t\treturn PropertyBindingFactory._arrayConversion(me, model, name, createConvertedItem, removedItem, changedCallback, postpone, function(item){\r\n\t\t\treturn String(item);\r\n\t\t});\r\n\t}\r\n\tstatic _arrayConversion(me, model, name, createConvertedItem, removedItem, changedCallback/* called any time the child changes*/, postpone, getHashFromItem){\r\n\t\tvar mapHashToConvertedItem={};\r\n\t\tvar currentConvertedItems=[];\r\n\t\tvar propertyBinding = PropertyBindingFactory.standard(me, model, name, changed, true);\r\n\t\tfunction changed(items){\r\n\t\t\tvar hashesSeen = [];\r\n\t\t\tfor(var i=0; ithis.selected, (value)=>this.selected = value);\r\n\t\texposeBinding(this, 'status', ()=>this.status, (value)=>this.status = value);\r\n\t\texposeBinding(this, 'features', ()=>this.features, (value)=>this.features = value);\r\n\t\texposeBinding(this, 'plotFeatures', ()=>this.plotFeatures, (value)=>this.plotFeatures = value);\r\n\t\tthis._propertyBindingHouseTypeFeatures = PropertyBindingFactory.standard(this, this._houseType, 'features', this._houseTypeFeaturesChanged);\r\n\t}\r\n\tget unit(){\r\n\t\treturn this._getUnit();\r\n\t}\r\n\tget hash(){\r\n\t return this._hash;\r\n\t}\r\n\tget name(){\r\n\t\treturn this._name;\r\n\t}\r\n\tget about(){\r\n\t\treturn this._houseType.about;\r\n\t}\r\n\tget number(){\r\n\t\treturn this._number;\r\n\t}\r\n\tget rooms(){\r\n\t\treturn this._rooms;\r\n\t}\r\n\tget affordable(){\r\n\t\treturn this._affordable;\r\n\t}\r\n\tget frontViewImage(){\r\n\t\treturn this._frontViewImage;\r\n\t}\r\n\tget price(){\r\n\t\treturn this._price;\r\n\t}\r\n\tset price(value){\r\n\t\tthis._price = value;\r\n\t}\r\n\tget status(){\r\n\t\treturn this._status;\r\n\t}\r\n\tset status(value){\r\n\t\tthis._status=value;\r\n\t}\r\n\tget isSold(){\r\n\t\treturn this._status===PlotStatus.SOLD_OR_UNAVAILABLE;\r\n\t}\r\n\tget isReserved(){\r\n\t\treturn this._status===PlotStatus.RESERVED;\r\n\t}\r\n\tget isAvailable(){\r\n\t\treturn this._status===PlotStatus.AVAILABLE;\r\n\t}\r\n\tget nBedrooms(){\r\n\t\treturn this._houseType.nBedrooms;\r\n\t\t//return this._rooms.getArray().filter(room=>room.roomType===RoomType.BEDROOM).length;\r\n\t}\r\n\tget nBathrooms(){\r\n\t\treturn this._houseType.nBathrooms\r\n\t}\r\n\tget houseType(){\r\n\t\treturn this._houseType;\r\n\t}\r\n\tget priceString(){\r\n\t\treturn `${this._currencyConfiguration.currencyPrefix}${numberWithCommas(this.price)}${this._currencyConfiguration.currencySuffix}`;\r\n\t}\r\n\tget selected(){\r\n\t\treturn this._selected;\r\n\t}\r\n\tset selected(value){\r\n\t\tconst oldValue = this._selected;\r\n\t\tthis._selected = value;\r\n\t\tif(oldValue!==value){\r\n\t\t\tthis.bindingsHandler.changed('selected', value);\r\n\t\t\tthis.dispatchEvent({type:'selectedChanged'});\r\n\t\t}\r\n\t}\r\n\tget floorPlanImages(){\r\n\t\treturn this._floorPlanImages;\r\n\t}\r\n\tget hasOneOrMoreRoomImages(){\r\n\t\tif(!this.rooms)return false;\r\n\t\tconst rooms = this.rooms.getArray();\r\n\t\tfor(var i=0; i0){\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn false;\r\n\t}\r\n\tget features(){\r\n\t\tlet value = [];\r\n\t\tif(this._houseType.features)\r\n\t\t\tvalue =value.concat(this._houseType.features);\r\n\t\tif(this.plotFeatures)\r\n\t\t\tvalue = value.concat(this.plotFeatures);\r\n\t\treturn value;\r\n\t}\r\n\tget plotFeatures(){\r\n\t\treturn this._plotFeatures;\r\n\t}\r\n\tset plotFeatures(value){\r\n\t\tthis._plotFeatures= value;\r\n\t\tthis.bindingsHandler.changed('plotFeatures');\r\n\t\tthis.bindingsHandler.changed('features');\r\n\t\tthis.dispatchEvent({type:'plotfeatureschanged', plotFeatures:this._plotFeatures});\r\n\t}\r\n\t_houseTypeFeaturesChanged(){\r\n\t\tthis.bindingsHandler.changed('features');\r\n\t}\r\n\ttoJSON(){\r\n\t\treturn {\r\n\t\t\tname:this._name,\r\n\t\t\tnumber:this._number,\r\n\t\t\tfrontViewImageRelativePath:this._frontViewImageRelativePath,\r\n\t\t\tprice:this._price,\r\n\t\t\tstatus:PlotStatus.toString(this.status),\r\n\t\t\thouseType:this._houseType.name,\r\n\t\t\tselected:this._selected\r\n\t\t};\r\n\t}\r\n\tstatic fromJSON(jObject, houseTypes, currencyConfiguration, getUnit){\r\n\t\tif(jObject.number===undefined||jObject.number===null)\r\n\t\t\tthrowNotProvided('jObject.number (number of the number)');\r\n\t\tlet plot=null;\r\n\t\tconst getParentPlot=()=>{return plot;}\r\n\t\tplot = new SiteJsonUnitPlot({\r\n\t\t\tname:jObject.name,\r\n\t\t\tnumber:jObject.number,\r\n\t\t\trooms:jObject.rooms?SiteJsonUnitPlotRooms.fromJSON(jObject.rooms, getParentPlot):[],\r\n\t\t\taffordable:jObject.affordable||(jObject.houseType===undefined||jObject.houseType===null||jObject.houseType===''),\r\n\t\t\tfrontViewImage:jObject.frontViewImage?DynamicImage.fromJSON(jObject.frontViewImage):null,\r\n\t\t\tprice:jObject.price,\r\n\t\t\tstatus:PlotStatus.parse(jObject.status),\r\n\t\t\thouseType:houseTypes.parse(jObject.houseType),\r\n\t\t\tselected:jObject.selected,\r\n\t\t\tcurrencyConfiguration:currencyConfiguration,\r\n\t\t\tfloorPlanImages:jObject.floorPlanImages?.map(floorPlanImage=>DynamicImage.fromJSON(floorPlanImage)),\r\n\t\t\tgetUnit:getUnit\r\n\t\t});\r\n\t\treturn plot;\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class EulerAngles {\r\n constructor(props) {\r\n\t\tconst {yawRadians, pitchRadians, rollRadians}=props;\r\n\t\tif(yawRadians===undefined||yawRadians===null)\r\n\t\t\tthrowNotProvided('yawRadians');\r\n\t\tif(pitchRadians===undefined||pitchRadians===null)\r\n\t\t\tthrowNotProvided('pitchRadians');\r\n\t\tif(rollRadians===undefined||rollRadians===null)\r\n\t\t\tthrowNotProvided('rollRadians');\r\n\t\tthis._yawRadians = yawRadians;\r\n\t\tthis._pitchRadians = pitchRadians;\r\n\t\tthis._rollRadians = rollRadians;\r\n }\r\n get yawRadians() {\r\n return this._yawRadians;\r\n }\r\n get pitchRadians() {\r\n return this._pitchRadians;\r\n }\r\n get rollRadians() {\r\n return this._rollRadians;\r\n }\r\n static fromJSON(obj) {\r\n return new EulerAngles(obj);\r\n }\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport EulerAngles from '../geometry/EulerAngles';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonFileUnitNearestOutside360Move{\r\n\tconstructor(props){\r\n\t\tconst {outside360UniqueId, cameraAngleToFaceFrontDoor}=props;\r\n\t\tif(outside360UniqueId===undefined||outside360UniqueId===null)\r\n\t\t\tthrowNotProvided('outside360UniqueId');\r\n\t\tthis._outside360UniqueId = outside360UniqueId;\r\n\t\tif(cameraAngleToFaceFrontDoor===undefined||cameraAngleToFaceFrontDoor===null)\r\n\t\t\tthrowNotProvided('cameraAngleToFaceFrontDoor');\r\n\t\tthis._cameraAngleToFaceFrontDoor = cameraAngleToFaceFrontDoor;\r\n\t}\r\n\tget cameraAngleToFaceFrontDoor(){\r\n\t\treturn this._cameraAngleToFaceFrontDoor;\r\n\t}\r\n\tget outside360UniqueId(){\r\n\t\treturn this._outside360UniqueId;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\treturn new SiteJsonFileUnitNearestOutside360Move({\r\n\t\t\toutside360UniqueId:jObject.outside360UniqueId,\r\n\t\t\tcameraAngleToFaceFrontDoor:jObject.cameraAngleToFaceFrontDoor?EulerAngles.fromJSON(jObject.cameraAngleToFaceFrontDoor):null\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Vector2 from '../geometry/Vector2';\r\nimport Location from '../modelling/Location';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport Urls from '../urls/Urls';\r\nimport PlotStatus from './PlotStatus';\r\nimport HouseTypes from './HouseTypes';\r\nimport RoomType from './RoomType';\r\nimport eventEnable from '../core/eventEnable';\r\nimport Handles from '../core/Handles';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport SiteJsonUnitBirdsEyeViews from '../site/SiteJsonUnitBirdsEyeViews';\r\nimport SiteJsonUnitPlot from '../site/SiteJsonUnitPlot';\r\nimport SiteJsonFileUnitNearestOutside360Move from '../site/SiteJsonFileUnitNearestOutside360Move';\r\nimport DynamicImage from '../images/DynamicImage';\r\nimport numberWithCommas from '../core/numberWithCommas';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonUnit{\r\n\tconstructor(props){\r\n\t\teventEnable(this);\r\n\t\tenableAcceptBindings(this);\r\n\t\tconst {id, name, birdsEyeViews, useFrontViewInsteadOfStreetView,\r\n\t\t\tselected, threeDNodes, nearestOutside360Move, plots, frontViewImage, streetViewImage}=props;\r\n\t\t\r\n\t\tif(id===undefined||id===null)\r\n\t\t\tthrowNotProvided('id');\r\n\t\t\r\n\t\t/*if(name===undefined||name===null)\r\n\t\t\tthrowNotProvided('name');*/\r\n\t\t\r\n\t\tif(birdsEyeViews===undefined||birdsEyeViews===null)\r\n\t\t\tthrowNotProvided('birdsEyeViews');\r\n\t\t\r\n\t\t/*if(frontViewImageRelativePath===undefined || frontViewImageRelativePath===null)\r\n\t\t\tthrowNotProvided('frontViewImageRelativePath');*/\r\n\t\t\r\n\t\tif(plots===undefined||plots===null)\r\n\t\t\tthrowNotProvided('plots');\r\n\t\t\r\n\t\t\r\n\t\tthis._hash = `unit_${id}`;\r\n\t\tthis._id = id;\r\n\t\tthis._name = name;\r\n\t\tthis._birdsEyeViews = birdsEyeViews;\r\n\t\tthis._nearestOutside360Move = nearestOutside360Move;\r\n\t\tthis._threeDNodes = threeDNodes;\r\n\t\tthis._selected = selected?true:false;\r\n\t\tthis._plots = plots.sort(function(plotA, plotB){return plotA.number - plotB.number});\r\n\t\tthis._plotSelectedChanged=this._plotSelectedChanged.bind(this);\r\n\t\tthis._plots.forEach(plot=>plot.addEventListener('selectedChanged', this._plotSelectedChanged));\r\n\t\tthis._frontViewImage=frontViewImage;\r\n\t\tthis._streetViewImage= streetViewImage;\r\n\t\tthis._useFrontViewInsteadOfStreetView= useFrontViewInsteadOfStreetView;\r\n\t\tthis._dispatchActiveChanged=this._dispatchActiveChanged.bind(this);\r\n\t\tthis._handleActiveHandlesChange=this._handleActiveHandlesChange.bind(this);\r\n\t\tthis._activeHandles = new Handles();\r\n\t\tthis._activeHandles.addEventListener('change', this._handleActiveHandlesChange);\r\n\t\tthis.getBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex = this.getBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex.bind(this);\r\n\t\texposeBinding(this, 'selected', ()=>this._selected, (value)=>this._selected = value);\r\n\t}\r\n\t_plotSelectedChanged(){\r\n\t\tthis.bindingsHandler.changed('selected', this.selected);\r\n\t}\r\n\tget frontViewImage(){\r\n\t\treturn this._frontViewImage;\r\n\t}\r\n\tget streetViewImage(){\r\n\t\treturn this._streetViewImage;\r\n\t}\r\n\tget useFrontViewInsteadOfStreetView(){\r\n\t\treturn this._useFrontViewInsteadOfStreetView;\r\n\t}\r\n\tget nearestOutside360Move(){\r\n\t\treturn this._nearestOutside360Move;\r\n\t}\r\n\tget threeDNodes(){\r\n\t\treturn this._threeDNodes;\r\n\t}\r\n\tget hash(){\r\n\t return this._hash;\r\n\t}\r\n\tget id(){\r\n\t\treturn this._id;\r\n\t}\r\n\tget selected(){\r\n\t\treturn this._plots.filter(plot=>plot.selected).length>0;\r\n\t}\r\n\tget plots(){\r\n\t\treturn this._plots;\r\n\t}\r\n\tget allPlotsAffordable(){\r\n\t\tfor(var i=0; i1;\r\n\t}\r\n\t/*\r\n\tset selected(value){\r\n\t\tconst oldValue = this._selected;\r\n\t\tthis._selected = value;\r\n\t\tif(oldValue!==value){\r\n\t\t\tthis.bindingsHandler.changed('selected', value);\r\n\t\t}\r\n\t}*/\r\n\tget active(){\r\n\t\treturn this._activeHandles.taken;\r\n\t}\r\n\ttakeActiveHandle(){\r\n\t\treturn this._activeHandles.take();\r\n\t}\r\n\tgetBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex(index){\r\n\t\treturn this._birdsEyeViews.getMarkerPositionForBirdsEyeViewWithIndex(index);\r\n\t}\r\n\t_dispatchActiveChanged(){\r\n\t\tthis.dispatchEvent({type:'active', active:this.active});\r\n\t}\r\n\t_handleActiveHandlesChange(e){\r\n\t\tthis._dispatchActiveChanged();\r\n\t}\r\n\tstatic fromJSON(jObject, houseTypes, currencyConfiguration){\r\n\t\tlet unit = null;\r\n\t\tconst getUnit=()=>unit;\r\n\t\tconst plots = jObject.plots.map(plot=>SiteJsonUnitPlot.fromJSON(plot, houseTypes, currencyConfiguration, getUnit));\r\n\t\tunit=new SiteJsonUnit({\r\n\t\t\tid:jObject.id,\r\n\t\t\tname:jObject.name, \r\n\t\t\tbirdsEyeViews:SiteJsonUnitBirdsEyeViews.fromJSON(jObject.birdsEyeViews),\r\n\t\t\tfrontViewImage:jObject.frontViewImage?DynamicImage.fromJSON(jObject.frontViewImage):null,\r\n\t\t\tstreetViewImage:jObject.streetViewImage?DynamicImage.fromJSON(jObject.streetViewImage):null,\r\n\t\t\tuseFrontViewInsteadOfStreetView:jObject.useFrontViewInsteadOfStreetView,\r\n\t\t\tnearestOutside360Move:SiteJsonFileUnitNearestOutside360Move.fromJSON(jObject.nearestOutside360Move),\r\n\t\t\tplots:plots,\r\n\t\t\tthreeDNodes:jObject.threeDNodes\r\n\t\t});\r\n\t\treturn unit;\r\n\t}\r\n\t\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nimport SiteJsonUnit from './SiteJsonUnit';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonUnits{\r\n\tconstructor(props){\r\n\t\tconst {list}=props;\r\n\t\tif(list === undefined || list === null)\r\n\t\t\tthrowNotProvided('list');\r\n\t\tif(!Array.isArray(list))\r\n\t\t\tthrowNotOfType('list', 'Array');\r\n\t\tthis._list = list;\r\n\t\tthis.getArray = this.getArray.bind(this);\r\n\t\tthis.getPlotsArray = this.getPlotsArray.bind(this);\r\n\t\tthis.getByUnitId = this.getByUnitId.bind(this);\r\n\t\tthis.getPlotByNumber = this.getPlotByNumber.bind(this);\r\n\t\tthis.getSelectedPlotsAsArray = this.getSelectedPlotsAsArray.bind(this);\r\n\t}\r\n\tgetArray(){\r\n\t\treturn this._list;\r\n\t}\r\n\tgetPlotsArray(){\r\n\t\tlet list = [];\r\n\t\tthis._list.forEach(unit=>list=list.concat(unit.plots));\r\n\t\treturn list;\r\n\t}\r\n\tgetByUnitId(id){\r\n\t\tfor(var i=0; iplot.number===number)[0];\r\n\t}\r\n\tgetSelectedPlotsAsArray(){\r\n\t\treturn this.getPlotsArray().filter(plot=>plot.selected);\r\n\t}\r\n\tstatic fromJSON(jArray, houseTypes, currencyConfiguration){\r\n\t\tconst units=[];\r\n\t\tfor(var i=0; iExportedCubeJsonFace.fromJSON(face));\r\n\t\tconst {directoryRelativePath, levels }= jObject;\r\n\t\treturn new ExportedCubeJson({faces:faces, directoryRelativePath:directoryRelativePath, levels:levels});\r\n\t}\r\n}","export default class Iterator{\r\n\tconstructor(array)\r\n\t{\r\n\t\tthis._index=0;\r\n\t\tthis._array=array;\r\n\t\tthis._length=array.length;\r\n }\r\n\tnext()\r\n {\r\n return this._array[this._index++];\r\n }\r\n hasNext()\r\n {\r\n return this._indexSiteJsonOutside360Scene.fromJSON(scene, getPlotByNumber, configuration));\r\n\t\treturn new SiteJsonOutside360({scenes:scenes, configuration});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotOfType, throwNotProvided} = ParameterErrors;\r\nexport default class AvailablePricesSettings {\r\n\tconstructor(props){\r\n\t\tconst {desiredIntervalsPrice}=props;\r\n\t\tif(desiredIntervalsPrice !== undefined && desiredIntervalsPrice !==null)\r\n\t\tif(!Array.isArray(desiredIntervalsPrice))\r\n\t\t\tthrowNotOfType('desiredIntervalsPrice', 'Array');\r\n\t\tfor(var i=0; i{\r\n\t\t\tif(this._initialized)throw new Error('Already initialized');\r\n\t\t\t\r\n\t\t\tconst img = document.createElement('img');\r\n\t\t\timg.crossOrigin = \"Anonymous\";\r\n\t\t\timg.src = Urls.getAssetsForSite(this._configuration.siteSlug)+this._imageFileRelativePath;\r\n\t\t\timg.addEventListener('load', ()=>{\r\n\t\t\t\tthis._initialized=true;\r\n\t\t\t\tthis._canvas.width = img.width;\r\n\t\t\t\tthis._canvas.height = img.height;\r\n\t\t\t\tthis._canvas.getContext('2d').drawImage(img, 0, 0, img.width, img.height);\r\n\t\t\t\tresolve();\r\n\t\t\t});\r\n\t\t\timg.addEventListener('error', (err)=>{\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\t_checkInitialized(){\r\n\t\tif(!this._initialized)throw new Error('Not initialize');\r\n\t}\r\n\tgetValueFromPercentages(xPercent, yPercent){\r\n\t\treturn this.getValueFromProportions(xPercent/100, yPercent/100);\r\n\t}\r\n\tgetValueFromProportions(xProportion, yProportion){\r\n\t\tconst x = parseInt(xProportion*this._canvas.width);\r\n\t\tconst y = parseInt(yProportion*this._canvas.height);\r\n\t\treturn this.getValueFromPixel(x, y);\r\n\t}\r\n\tgetValueFromPixel(x, y){\r\n\t\tif(isNaN(x)||isNaN(y))return null;\r\n\t\tconst rgba = this._getPixelARGB(x, y);\r\n\t\tconst mapBToGToRToValue = this._mapAToBToGToRToValue[rgba[3]];\r\n\t\tif(!mapBToGToRToValue)return null;\r\n\t\tconst mapGToRToValue = mapBToGToRToValue[rgba[2]];\r\n\t\tif(!mapGToRToValue)return null;\r\n\t\tconst mapRToValue = mapGToRToValue[rgba[1]];\r\n\t\tif(!mapRToValue)return null;\r\n\t\tconst value = mapRToValue[rgba[0]];\r\n\t\treturn value;\r\n\t}\r\n\t_getPixelARGB(x, y){\r\n\t\tthis._checkInitialized();\r\n\t\tif(x<0)x=0;\r\n\t\telse if(x>=this._canvas.width)x=this._canvas.width-1;\r\n\t\tif(y<0)y=0;\r\n\t\telse if(y>=this._canvas.height)y=this._canvas.height-1;\r\n\t\tconst pixelData = this._canvas.getContext('2d').getImageData(x, y, 1, 1).data;\r\n\t\treturn pixelData;\r\n\t}\r\n\tstatic _parseRgbaValuePairsToMap(rgbaValuePairs){\r\n\t\tconst mapAToBToGToRToValue = {};\r\n\t\trgbaValuePairs.forEach((rgbaValuePair)=>{\r\n\t\t\tconst rgba = rgbaValuePair.rgba;\r\n\t\t\tconst mapBToGToRToValue=mapAToBToGToRToValue[rgba.a];\r\n\t\t\tif(!mapBToGToRToValue){\r\n\t\t\t\tmapAToBToGToRToValue[rgba.a]={\r\n\t\t\t\t\t[rgba.b]:{\r\n\t\t\t\t\t\t[rgba.g]:{\r\n\t\t\t\t\t\t\t[rgba.r]:rgbaValuePair.value\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst mapGToRToValue=mapBToGToRToValue[rgba.b];\r\n\t\t\tif(!mapGToRToValue){\r\n\t\t\t\tmapBToGToRToValue[rgba.b]={\r\n\t\t\t\t\t[rgba.g]:{\r\n\t\t\t\t\t\t[rgba.r]:rgbaValuePair.value\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst mapRToValue=mapGToRToValue[rgba.g];\r\n\t\t\tif(!mapRToValue){\r\n\t\t\t\tmapGToRToValue[rgba.g]={\r\n\t\t\t\t\t[rgba.r]:rgbaValuePair.value\r\n\t\t\t\t};\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tmapRToValue[rgba.r] = rgbaValuePair.value;\r\n\t\t});\r\n\t\treturn mapAToBToGToRToValue;\r\n\t}\r\n static fromJSON(jObject, configuration) {\r\n\t\tconst rgbaValuePairs=jObject.rgbaValuePairs;\r\n\t\tif(rgbaValuePairs===undefined||rgbaValuePairs===null)\r\n\t\t\tthrowNotProvided('rgbaValuePairs');\r\n\t\tconst imageFileRelativePath= jObject.imageFileRelativePath;\r\n\t\tif(imageFileRelativePath===undefined||imageFileRelativePath===null)\r\n\t\t\tthrowNotProvided('imageFileRelativePath');\r\n\t\tconst mapAToBToGToRToValue = PixelMappings._parseRgbaValuePairsToMap(rgbaValuePairs);\r\n\t\treturn new PixelMappings({mapAToBToGToRToValue:mapAToBToGToRToValue, imageFileRelativePath:imageFileRelativePath, configuration});\r\n }\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Vector2 from '../geometry/Vector2';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonUnitBirdsEyeViewOutside360MarkerPosition{\r\n\tconstructor(props){\r\n\t\tconst {outside360UniqueId, markerPosition}=props;\r\n\t\tif(outside360UniqueId===undefined||outside360UniqueId===null)\r\n\t\t\tthrowNotProvided('outside360UniqueId');\r\n\t\tthis._outside360UniqueId = outside360UniqueId;\r\n\t\tif(markerPosition===undefined||markerPosition===null)\r\n\t\t\tthrowNotProvided('markerPosition');\r\n\t\tthis._markerPosition = markerPosition;\r\n\t}\r\n\tget markerPosition(){\r\n\t\treturn this._markerPosition;\r\n\t}\r\n\tget outside360UniqueId(){\r\n\t\treturn this._outside360UniqueId;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\treturn new SiteJsonUnitBirdsEyeViewOutside360MarkerPosition({\r\n\t\t\toutside360UniqueId:jObject.outside360UniqueId,\r\n\t\t\tmarkerPosition:jObject.markerPosition?Vector2.fromObj(jObject.markerPosition):null\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nimport PixelMappings from '../pixel_mapping/PixelMappings';\r\nimport SiteJsonUnitBirdsEyeViewOutside360MarkerPosition from './SiteJsonUnitBirdsEyeViewOutside360MarkerPosition';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonBirdsEyeViewsBirdsEyeView{\r\n\tconstructor(props){\r\n\t\tconst {imageRelativePath, imageAspectRatio, index, nearestOutside360PixelMappings, outside360MarkerPositions}=props;\r\n\t\tif(!imageRelativePath)throwNotProvided('imageRelativePath');\r\n\t\tthis._imageRelativePath = imageRelativePath;\r\n\t\tif(!imageAspectRatio)throwNotProvided('imageAspectRatio');\r\n\t\tthis._imageAspectRatio = imageAspectRatio;\r\n\t\tif(index===null||index===undefined)\r\n\t\t\tthrowNotProvided('index');\r\n\t\tif(typeof(index)!=='number')\r\n\t\t\tthrowNotOfType('index', 'number');\r\n\t\tthis._index = index\r\n\t\t\r\n\t\tif(nearestOutside360PixelMappings===undefined||nearestOutside360PixelMappings===null)\r\n\t\t\tthrowNotProvided('nearestOutside360PixelMappings');\r\n\t\tthis._nearestOutside360PixelMappings= nearestOutside360PixelMappings;\r\n\t\t\r\n\t\tif(outside360MarkerPositions===undefined||outside360MarkerPositions===null)\r\n\t\t\tthrowNotProvided('outside360MarkerPositions');\r\n\t\tthis._outside360MarkerPositions= outside360MarkerPositions;\r\n\t\tthis._mapOutside360UniqueIdToMarkerPosition={};\r\n\t\tthis._outside360MarkerPositions.forEach(outside360MakerPosition=>\r\n\t\t\tthis._mapOutside360UniqueIdToMarkerPosition[outside360MakerPosition.outside360UniqueId]= outside360MakerPosition.markerPosition\r\n\t\t);\r\n\t\tthis.getMarkerPositionForOutside360= this.getMarkerPositionForOutside360.bind(this);\r\n\t}\r\n\tget index(){\r\n\t\treturn this._index;\r\n\t}\r\n\tget imageRelativePath(){\r\n\t\treturn this._imageRelativePath;\r\n\t}\r\n\tget imageAspectRatio(){\r\n\t\treturn this._imageAspectRatio;\r\n\t}\r\n\tget nearestOutside360PixelMappings(){\r\n\t\treturn this._nearestOutside360PixelMappings;\r\n\t}\r\n\tgetMarkerPositionForOutside360(outside360UniqueId){\r\n\t\treturn this._mapOutside360UniqueIdToMarkerPosition[outside360UniqueId];\r\n\t}\r\n\tstatic fromJSON(jObject, configuration){\r\n\t\treturn new SiteJsonBirdsEyeViewsBirdsEyeView({\r\n\t\t\tindex:jObject.index,\r\n\t\t\timageRelativePath:jObject.imageRelativePath,\r\n\t\t\timageAspectRatio:jObject.imageAspectRatio,\r\n\t\t\tnearestOutside360PixelMappings:PixelMappings.fromJSON(jObject.nearestOutside360PixelMappings, configuration),\r\n\t\t\toutside360MarkerPositions:jObject.outside360MarkerPositions.map(outside360MarkerPosition=>SiteJsonUnitBirdsEyeViewOutside360MarkerPosition.fromJSON(outside360MarkerPosition))\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nimport SiteJsonBirdsEyeViewsBirdsEyeView from './SiteJsonBirdsEyeViewsBirdsEyeView';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsonBirdsEyeViews{\r\n\tconstructor(props){\r\n\t\tconst {list}=props;\r\n\t\tthis._list = list;\r\n\t}\r\n\tgetArray(){\r\n\t\treturn this._list;\r\n\t}\r\n\tgetDefault(){\r\n\t\treturn this._list[0];\r\n\t}\r\n\tstatic fromJSON(jArray, configuration){\r\n\t\tconst list = jArray.map(jObjectBirdsEyeView=>SiteJsonBirdsEyeViewsBirdsEyeView.fromJSON(jObjectBirdsEyeView, configuration));\r\n\t\treturn new SiteJsonBirdsEyeViews({\r\n\t\t\tlist:list\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nconst OBJECT_ID_JSON_KEY='o';\r\nconst NODE_IDS_JSON_KEY='n';\r\nexport default class ObjectIdNodeIdsMappings{\r\n\tconstructor(mapObjectIdToNodeIds){\r\n\t\tthis.getNodeIdsForObjectId= this.getNodeIdsForObjectId.bind(this);\r\n\t\tthis.getNodeIdsForObjectIds= this.getNodeIdsForObjectIds.bind(this);\r\n\t\tthis._mapObjectIdToNodeIds= mapObjectIdToNodeIds;\r\n\t}\r\n\tget allNodeIds(){\r\n\t\treturn Array.from(this._mapObjectIdToNodeIds.keys());\r\n\t}\r\n\tgetNodeIdsForObjectId(objectId){\r\n\t\treturn this._mapObjectIdToNodeIds.get(objectId);\r\n\t}\r\n\tgetNodeIdsForObjectIds(objectIds){\r\n\t\tlet nodeIds =[];\r\n\t\tfor(var objectId of objectIds){\r\n\t\t\tconst nodeIdsForObjectId = this.getNodeIdsForObjectId(objectId);\r\n\t\t\tif(!nodeIdsForObjectId)continue;\r\n\t\t\tnodeIds=nodeIds.concat(nodeIdsForObjectId);\r\n\t\t}\r\n\t\treturn nodeIds;\r\n\t}\r\n\tstatic fromJSON(jArray){\r\n\t\tconst mapObjectIdToNodeIds = new Map();\r\n\t\tjArray.forEach(entry=>{\r\n\t\t\tmapObjectIdToNodeIds.set(entry[OBJECT_ID_JSON_KEY], entry[NODE_IDS_JSON_KEY]);\r\n\t\t});\r\n\t\treturn new ObjectIdNodeIdsMappings(mapObjectIdToNodeIds);\r\n\t}\r\n}","import ObjectIdNodeIdsMappings from '../modelling/ObjectIdNodeIdsMappings';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided, throwNotOfType } = ParameterErrors;\r\nexport default class Model {\r\n constructor(props) {\r\n const { groupCode, code, relativePath, objectIdNodeIdsMappings, quadrantsRelativePath} = props;\r\n if (!code) throwNotProvided(\"code\");\r\n if (!groupCode) throwNotProvided(\"groupCode\");\r\n if (!objectIdNodeIdsMappings) throwNotProvided(\"objectIdNodeIdsMappings\");\r\n this._code = code;\r\n\t\tthis._groupCode = groupCode;\r\n\t\tthis._relativePath = relativePath;\r\n\t\tthis._objectIdNodeIdsMappings = objectIdNodeIdsMappings;\r\n\t\tthis._quadrantsRelativePath = quadrantsRelativePath;\r\n\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n get groupCode() {\r\n return this._groupCode;\r\n }\r\n\tget relativePath(){\r\n\t\treturn this._relativePath;\r\n\t}\r\n\tget objectIdNodeIdsMappings(){\r\n\t\treturn this._objectIdNodeIdsMappings;\r\n\t}\r\n\tget quadrantsRelativePath(){\r\n\t\treturn this._quadrantsRelativePath;\r\n\t}\r\n static fromObj(obj) {\r\n return new Model({\r\n\t\t\tgroupCode:obj.groupCode,\r\n code: obj.code,\r\n\t\t\trelativePath:obj.relativePath,\r\n\t\t\tquadrantsRelativePath:obj.quadrantsRelativePath,\r\n\t\t\tobjectIdNodeIdsMappings:obj.objectIdNodeIdsMappings?ObjectIdNodeIdsMappings.fromJSON(obj.objectIdNodeIdsMappings):null\r\n })\r\n }\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Model from './Model';\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class Models {\r\n constructor(props) {\r\n const { map, mapGroupCodeToModels} = props;\r\n if (!map) throwNotProvided(\"map\");\r\n if (!mapGroupCodeToModels) throwNotProvided(\"mapGroupCodeToModels\");\r\n this._map = map;\r\n\t\tthis._mapGroupCodeToModels = mapGroupCodeToModels;\r\n\t\tthis.getModelByCode= this.getModelByCode.bind(this);\r\n\t\tthis.getModelsByGroupCode= this.getModelsByGroupCode.bind(this);\r\n }\r\n getModelByCode(code) {\r\n\t\tif(!this._map.has(code))return null;\r\n return this._map.get(code);\r\n }\r\n\tgetModelsByGroupCode(groupCode){\r\n\t\treturn this._mapGroupCodeToModels.get(groupCode);\r\n\t}\r\n static fromJSON(objArray) {\r\n const modelsMap = new Map();\r\n\t\tconst mapGroupCodeToModels = new Map();\r\n for (var i = 0; i < objArray.length; i++) {\r\n\t\t\tconst model = Model.fromObj(objArray[i]);\r\n modelsMap.set(model.code, model);\r\n\t\t\tif(!mapGroupCodeToModels.has(model.groupCode)){\r\n\t\t\t\tmapGroupCodeToModels.set(model.groupCode, [model]);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tmapGroupCodeToModels.get(model.groupCode).push(model);\r\n }\r\n return new Models({ map: modelsMap , mapGroupCodeToModels:mapGroupCodeToModels});\r\n }\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided }=ParameterErrors;\r\nexport default class WhenFinishedModifying {\r\n constructor(props){\r\n\t\tconst {delay, callback}=props;\r\n\t\tthis._delay = delay;\r\n\t\tif(!delay)\r\n\t\t\tthrowNotProvided('delay');\r\n\t\tif(!callback)\r\n\t\t\tthrowNotProvided('callback');\r\n\t\tthis._callback = callback;\r\n\t\tthis._currentTimeout= null;\r\n\t\tthis.trigger= this.trigger.bind(this);\r\n\t}\r\n\ttrigger(){\r\n\t\tif(this._currentTimeout)\r\n\t\t\tclearTimeout(this._currentTimeout);\r\n\t\tthis._currentTimeout = setTimeout(()=>{\r\n\t\t\tthis._callback();\r\n\t\t}, this._delay);\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nimport SiteJsonUnits from './SiteJsonUnits';\r\nimport SiteJsonOutside360 from './SiteJsonOutside360';\r\nimport HouseTypes from './HouseTypes';\r\nimport FiltersSettings from '../filters/FiltersSettings';\r\nimport SiteJsonBirdsEyeViews from './SiteJsonBirdsEyeViews';\r\nimport CurrencyConfiguration from '../configuration/CurrencyConfiguration';\r\nimport Models from '../modelling/Models';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport WhenFinishedModifying from '../core/WhenFinishedModifying';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJson{\r\n\tconstructor(props){\r\n\t\tenableAcceptBindings(this);\r\n\t\tconst {birdsEyeViews, units, houseTypes, filtersSettings,\r\n\t\toutside360, currencyConfiguration, models, configuration,\r\n\t\tlatLng}=props;\r\n\t\tthis._latLng = latLng;\r\n\t\tthis._configuration = configuration;\r\n\t\tif(!units)throwNotProvided('units');\r\n\t\tthis._units = units;\r\n\t\tif(!houseTypes)throwNotProvided('houseTypes');\r\n\t\tthis._houseTypes = houseTypes;\r\n\t\tif(!filtersSettings)throwNotProvided('filtersSettings');\r\n\t\tthis._filtersSettings = filtersSettings;\r\n\t\tif(!birdsEyeViews)throwNotProvided('birdsEyeViews');\r\n\t\tthis._birdsEyeViews = birdsEyeViews;\r\n\t\tif(!outside360)throwNotProvided('outside360');\r\n\t\tthis._outside360 = outside360;\r\n\t\tif(!currencyConfiguration)throwNotProvided('currencyConfiguration');\r\n\t\tthis._currencyConfiguration = currencyConfiguration;\r\n\t\tthis._models = models;\r\n\t\tthis.getPlotsForHouseType = this.getPlotsForHouseType.bind(this);\r\n\t\tthis.getPlotByNumber= this.getPlotByNumber.bind(this);\r\n\t\tthis.getPlotsArray= this.getPlotsArray.bind(this);\r\n\t\tthis._houseTypesOrPlotFeaturesChanged = this._houseTypesOrPlotFeaturesChanged.bind(this);\r\n\t\tthis._updateAllFeatures = this._updateAllFeatures.bind(this);\r\n\t\tthis._whenFinishedModifyingHouseTypesOrPlotFeatures = new WhenFinishedModifying({\r\n\t\t\tdelay:0.1, callback:this._updateAllFeatures\r\n\t\t});\r\n\t\thouseTypes.getArray().forEach(houseType=>houseType.addEventListener('featureschanged', this._houseTypesOrPlotFeaturesChanged));\r\n\t\tthis.getPlotsArray().forEach(siteJsonUnitPlot=>siteJsonUnitPlot.addEventListener('plotfeatureschanged', this._houseTypesOrPlotFeaturesChanged));\r\n\t\texposeBinding(this, 'allFeatures', ()=>this.allFeatures, (value)=>this.allFeatures = value);\r\n\t}\r\n\tget allUnitsHaveMultiplePlots(){\r\n\t\tfor(var unit of this._units.getArray())\r\n\t\t\tif(unit.plots.length<2)return false;\r\n\t\treturn true;\r\n\t}\r\n\tget latLng(){\r\n\t\treturn this._latLng;\r\n\t}\r\n\tget configuration(){\r\n\t\treturn this._configuration;\r\n\t}\r\n\tget name(){\r\n\t\tthrowNotProvided('name');\r\n\t}\r\n\tget currencyConfiguration(){\r\n\t\treturn this._currencyConfiguration;\r\n\t}\r\n\tget outside360(){\r\n\t\treturn this._outside360;\r\n\t}\r\n\tget units(){\r\n\t\treturn this._units;\r\n\t}\r\n\tget filtersSettings(){\r\n\t\treturn this._filtersSettings;\r\n\t}\r\n\tget birdsEyeViews(){\r\n\t\treturn this._birdsEyeViews;\r\n\t}\r\n\tget houseTypes(){\r\n\t\treturn this._houseTypes;\r\n\t}\r\n\tget allFeatures(){\r\n\t\treturn this._allFeatures;\r\n\t}\r\n\tget models(){\r\n\t\treturn this._models;\r\n\t}\r\n\tgetPlotByNumber(plotNumber){\r\n\t\treturn this.units.getPlotByNumber(plotNumber);\r\n\t}\r\n\tgetPlotsArray(plotNumber){\r\n\t\treturn this.units.getPlotsArray();\r\n\t}\r\n\tgetPlotsForHouseType(houseType){\r\n\t\treturn this.getPlotsArray().filter(plot=>plot.houseType===houseType);\r\n\t}\r\n\tget minPlotPrice(){\r\n\t\tlet min = null;\r\n\t\tthis.getPlotsArray().forEach(siteJsonUnitPlot=>{\r\n\t\t\tif(siteJsonUnitPlot.price===0||siteJsonUnitPlot.price===null||siteJsonUnitPlot.price===undefined) return;\r\n\t\t\tif(min===null)\r\n\t\t\t\tmin = siteJsonUnitPlot.price;\r\n\t\t\telse \r\n\t\t\t\tif(min>siteJsonUnitPlot.price)\r\n\t\t\t\t\tmin = siteJsonUnitPlot.price;\r\n\t\t});\r\n\t\treturn min;\r\n\t}\r\n\tget maxPlotPrice(){\r\n\t\tlet max = null;\r\n\t\tthis.getPlotsArray().forEach(siteJsonUnitPlot=>{\r\n\t\t\tif(max===null)\r\n\t\t\t\tmax = siteJsonUnitPlot.price;\r\n\t\t\telse \r\n\t\t\t\tif(max{\r\n\t\t\tsiteJsonUnitPlot.features?.forEach(feature=>{\r\n\t\t\t\tmapFeatureIdToFeature.set(feature.id, feature);\r\n\t\t\t});\r\n\t\t});\r\n\t\tthis.houseTypes.getArray().forEach(houseType=>{\r\n\t\t\tconsole.log('houseType.features');\r\n\t\t\tconsole.log(houseType.features);\r\n\t\t\thouseType.features?.forEach(feature=>{\r\n\t\t\t\tmapFeatureIdToFeature.set(feature.id, feature);\r\n\t\t\t});\r\n\t\t});\r\n\t\tthis._allFeatures = Array.from(mapFeatureIdToFeature.values());\r\n\t\tthis.bindingsHandler.changed('allFeatures', this._allFeatures);\r\n\t}\r\n\tstatic fromJSON(jObjectSite, configuration){\r\n\t\tconst name = jObjectSite.name;\r\n\t\tlet siteJson = null;\r\n\t\tconst houseTypes = HouseTypes.fromJSON(jObjectSite.houseTypes,\r\n\t\t\t()=>siteJson, configuration);\r\n\t\tconst currencyConfiguration = CurrencyConfiguration.fromJSON(jObjectSite.configuration.currency);\r\n\t\tconst units = SiteJsonUnits.fromJSON(jObjectSite.units, houseTypes, currencyConfiguration);\r\n\t\tconst filtersSettings = FiltersSettings.fromJSON(jObjectSite.filtersSettings);\r\n\t\tconst outside360 = SiteJsonOutside360.fromJSON(jObjectSite.outside360,\r\n\t\t(plotNumber)=>units.getPlotByNumber(plotNumber), configuration);\r\n\t\tconst birdsEyeViews = SiteJsonBirdsEyeViews.fromJSON(jObjectSite.birdsEyeViews, configuration);\r\n\t\tconst models = jObjectSite.models?Models.fromJSON(jObjectSite.models):null;\r\n\t\tsiteJson = new SiteJson({\r\n\t\t\tname:name, birdsEyeViews:birdsEyeViews,units:units, houseTypes:houseTypes, filtersSettings:filtersSettings, outside360:outside360,\r\n\t\t\tcurrencyConfiguration:currencyConfiguration, models:models,\r\n\t\t\tconfiguration,\r\n\t\t\tlatLng:jObjectSite.latLng\r\n\t\t});\r\n\t\treturn siteJson;\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Configurator{\r\n\tconstructor(props){\r\n\t\tconst {houseTypeSlug, tourUrl, configuratorUrl, videoUrl}=props;\r\n\t\tthis._houseTypeSlug = houseTypeSlug;\r\n\t\tthis._tourUrl = tourUrl;\r\n\t\tthis._videoUrl = videoUrl;\r\n\t\tthis._configuratorUrl = configuratorUrl;\r\n\t}\r\n\tget houseTypeSlug(){\r\n\t\treturn this._houseTypeSlug;\r\n\t}\r\n\tget tourUrl(){\r\n\t\treturn this._tourUrl;\r\n\t}\r\n\tget videoUrl(){\r\n\t\treturn this._videoUrl;\r\n\t}\r\n\tget configuratorUrl(){\r\n\t\treturn this._configuratorUrl;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\treturn new Configurator(jObject);\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class FeatureForPlot{\r\n\tconstructor(props){\r\n\t\tconst {getFeatureById, featureId}=props;\r\n\t\tthis._getFeatureById= getFeatureById;\r\n\t\tthis._featureId = featureId;\r\n\t\t\r\n\t}\r\n\tget feature(){\r\n\t\treturn this._getFeatureById(this._featureId);\r\n\t}\r\n\tget featureId(){\r\n\t\treturn this._featureId;\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class FeatureForHouseType{\r\n\tconstructor(props){\r\n\t\tconst {getFeatureById, featureId}=props;\r\n\t\tthis._getFeatureById= getFeatureById;\r\n\t\tthis._featureId = featureId;\r\n\t\t\r\n\t}\r\n\tget feature(){\r\n\t\treturn this._getFeatureById(this._featureId);\r\n\t}\r\n\tget featureId(){\r\n\t\treturn this._featureId;\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Feature{\r\n\tconstructor(props){\r\n\t\tconst {id, name, description}=props;\r\n\t\tthis._id = id;\r\n\t\tthis._name = name;\r\n\t\tthis._description = description;\r\n\t}\r\n\tget id(){\r\n\t\treturn this._id;\r\n\t}\r\n\tget name(){\r\n\t\treturn this._name;\r\n\t}\r\n\tget description(){\r\n\t\treturn this._description;\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nimport Configurator from './Configurator';\r\nimport FeatureForPlot from '../features/FeatureForPlot';\r\nimport FeatureForHouseType from '../features/FeatureForHouseType';\r\nimport Feature from '../features/Feature';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class LatestSiteInfo{\r\n\tconstructor(props){\r\n\t\tconst {configurators, latestPlotInfos, latestHouseTypeInfos}=props;\r\n\t\tif(!configurators)throwNotProvided('configurators');\r\n\t\tthis._configurators = configurators;\r\n\t\tif(!latestPlotInfos)throwNotProvided('latestPlotInfos');\r\n\t\tthis._latestPlotInfos = latestPlotInfos;\r\n\t\tif(!latestHouseTypeInfos)throwNotProvided('latestHouseTypeInfos');\r\n\t\tthis._latestHouseTypeInfos = latestHouseTypeInfos;\r\n\t}\r\n\tget configurators(){\r\n\t\treturn this._configurators;\r\n\t}\r\n\tget latestPlotInfos(){\r\n\t\treturn this._latestPlotInfos;\r\n\t}\r\n\tget latestHouseTypeInfos(){\r\n\t\treturn this._latestHouseTypeInfos;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\tconst features = jObject.features?.map(jObjectFeature =>new Feature(jObjectFeature));\r\n\t\tconst getFeatureById = (id)=>features?.filter(feature=>feature.id===id)[0];\r\n\t\tconst latestPlotInfos = jObject.latestPlotInfos;\r\n\t\tlatestPlotInfos?.forEach(latestPlotInfo=>{\r\n\t\t\tif(!latestPlotInfo.featuresForPlot)return;\r\n\t\t\tlatestPlotInfo.featuresForPlot = latestPlotInfo.featuresForPlot.map(featureForPlot=>{\r\n\t\t\t\tfeatureForPlot.getFeatureById = getFeatureById;\r\n\t\t\t\treturn new FeatureForPlot(featureForPlot);\r\n\t\t\t});\r\n\t\t});\r\n\t\tconst latestHouseTypeInfos = jObject.latestHouseTypeInfos;\r\n\t\t\r\n\t\tlatestHouseTypeInfos?.forEach(latestHouseTypeInfo=>{\r\n\t\t\tif(!latestHouseTypeInfo.featuresForHouseType)return;\r\n\t\t\tlatestHouseTypeInfo.featuresForHouseType = latestHouseTypeInfo.featuresForHouseType.map(featureForHouseType=>{\r\n\t\t\t\tfeatureForHouseType.getFeatureById = getFeatureById;\r\n\t\t\t\treturn new FeatureForHouseType(featureForHouseType);\r\n\t\t\t});\r\n\t\t});\r\n\t\treturn new LatestSiteInfo({\r\n\t\t\tfeatures,\r\n\t\t\tconfigurators:jObject.configurators?.map(jObjectConfigurator=>Configurator.fromJSON(jObjectConfigurator)),\r\n\t\t\tlatestPlotInfos,\r\n\t\t\tlatestHouseTypeInfos\r\n\t\t});\r\n\t}\r\n}","import ParameterErrors from '../../../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nconst OBJECT_IDS_JSON_KEY='o';\r\nexport default class Quadrant {\r\n\tconstructor({objectIds }){\r\n\t\tthis._objectIds = objectIds; \r\n\t}\r\n\tget objectIds(){\r\n\t\treturn this._objectIds;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\tconst objectIds = jObject[OBJECT_IDS_JSON_KEY];\r\n\t\treturn new Quadrant({objectIds});\r\n\t}\r\n}","import Quadrant from './Quadrant';\r\nimport ParameterErrors from '../../../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nconst X_Y_Z_QUADRANT_JSON_KEY='q2';\r\nexport default class QuadrantLevel{\r\n\tconstructor({x_Y_Z_Quadrant}){\r\n\t\tthis._X_Y_Z_Quadrant = x_Y_Z_Quadrant; \r\n\t}\r\n\tgetObjectIds({proportionX, proportionY, proportionZ}){\r\n\t\tconst xIndex = parseInt(proportionX/this._X_Y_Z_Quadrant.length);\r\n\t\tconst y_Z_Quadrant = this._X_Y_Z_Quadrant[xIndex];\r\n\t\tif(y_Z_Quadrant===null||y_Z_Quadrant===undefined||y_Z_Quadrant.length<1)return null;\r\n\t\tconst yIndex = parseInt(proportionY/y_Z_Quadrant.length);\r\n\t\tconst z_Quadrant = y_Z_Quadrant[yIndex];\r\n\t\tif(z_Quadrant===null||z_Quadrant===undefined||z_Quadrant.length<1) return null;\r\n\t\tconst zIndex = parseInt(proportionZ/z_Quadrant.length);\r\n\t\tconst quadrant = z_Quadrant[zIndex];\r\n\t\treturn quadrant.objectIds;\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\tconst x_Y_Z_Quadrant = jObject[X_Y_Z_QUADRANT_JSON_KEY]\r\n\t\t\t.map(y_Z_Quadrant=>\r\n\t\t\t\ty_Z_Quadrant\r\n\t\t\t\t.map(z_Quadrant=>\r\n\t\t\t\t\tz_Quadrant\r\n\t\t\t\t\t.map(quadrant=>\r\n\t\t\t\t\t\tQuadrant.fromJSON(quadrant)\r\n\t\t\t\t)\r\n\t\t\t)\r\n\t\t);\r\n\t\treturn new QuadrantLevel({x_Y_Z_Quadrant});\r\n\t}\r\n}","import QuadrantLevel from './QuadrantLevel';\r\nimport ParameterErrors from '../../../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nconst QUADRANT_LEVELS_JSON_KEY='l';\r\nexport default class QuadrantsForCameraAngle{\r\n\tconstructor({quadrantLevels }){\r\n\t\tthis._quadrantLevels = quadrantLevels; \r\n\t}\r\n\tget quadrantLevels(){\r\n\t\treturn this._quadrantLevels;\r\n\t}\r\n\tgetObjectIds({proportionX, proportionY, proportionZ}){\r\n\t\tlet allObjectIds = [];\r\n\t\tfor(var quadrantLevelIndex=0; quadrantLevelIndex\r\n\t\t\t\tQuadrantLevel.fromJSON(quadrantLevelJObject));\r\n\t\treturn new QuadrantsForCameraAngle({quadrantLevels});\r\n\t}\r\n}","import QuadrantsForCameraAngle from './QuadrantsForCameraAngle';\r\nimport ParameterErrors from '../../../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nconst XYZ_FROM_JSON_KEY_JSON_KEY='f',\r\n\tSCENE_SIZE_JSON_KEY='s',\r\n\tYAW_PITCH_QUADRANTS_JSON_KEY='q';\r\nconst TWO_PI=Math.PI*2;\r\nexport default class QuadrantsV2{\r\n\tconstructor({xYZFrom, sceneSize, yaw_Pitch_Quadrants}){\r\n\t\tthis._xYZFrom = xYZFrom;\r\n\t\tthis._sceneSize = sceneSize;\r\n\t\tthis._yaw_Pitch_Quadrants = yaw_Pitch_Quadrants; \r\n\t\tthis._yawLength = this._yaw_Pitch_Quadrants.length;\r\n\t\tthis._pitchLength = this._yaw_Pitch_Quadrants[0].length;\r\n\t}\r\n\tget xYZFrom(){\r\n\t\treturn this._xYZFrom;\r\n\t}\r\n\tget sceneSize(){\r\n\t\treturn this._sceneSize;\r\n\t}\r\n\tgetObjectIds({yawRadians, pitchRadians, x, y, z}){\r\n\t\twhile(yawRadians<0)yawRadians+=TWO_PI;\r\n\t\twhile(pitchRadians<0)pitchRadians+=TWO_PI;\r\n\t\tconst yawIndex = parseInt(yawRadians*this._yawLength/TWO_PI);\r\n\t\tconsole.log('yaw index is '+yawIndex+' out of '+this._yawLength);\r\n\t\tconst pitchIndex = parseInt(pitchRadians*this._pitchLength/TWO_PI);\r\n\t\tconsole.log('pitchIndex index is '+pitchIndex+' out of '+this._pitchLength);\r\n\t\tconst quadrantsForCameraAngle = this._yaw_Pitch_Quadrants[yawIndex][pitchIndex];\r\n\t\tif(quadrantsForCameraAngle ===null||quadrantsForCameraAngle===undefined)return null;\r\n\t\tconst proportionX = x/this._sceneSize[0], proportionY = y/this._sceneSize[1], proportionZ = z/this._sceneSize[2];\r\n\t\tconsole.log('proportionX is '+proportionX+' proportionY '+proportionY+' proportionZ '+proportionZ);\r\n\t\treturn quadrantsForCameraAngle.getObjectIds({proportionX, proportionY, proportionZ});\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\tconst xYZFrom = jObject[XYZ_FROM_JSON_KEY_JSON_KEY];\r\n\t\tconst sceneSize = jObject[SCENE_SIZE_JSON_KEY];\r\n\t\tconst yaw_Pitch_Quadrants = \r\n\t\t\tjObject[YAW_PITCH_QUADRANTS_JSON_KEY]\r\n\t\t\t.map(pitch_Quadrants=>\r\n\t\t\t\tpitch_Quadrants\r\n\t\t\t\t.map(jObjectQuadrants=>\r\n\t\t\t\t\t\tQuadrantsForCameraAngle.fromJSON(jObjectQuadrants)\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\treturn new QuadrantsV2({xYZFrom, sceneSize,\r\n\t\t\tyaw_Pitch_Quadrants});\r\n\t}\r\n}","//import QuadrantsForCameraAngle from './QuadrantsForCameraAngle';\r\nimport ParameterErrors from '../../../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nconst XYZ_FROM_JSON_KEY_JSON_KEY='f',\r\n\tSCENE_SIZE_JSON_KEY='s',\r\n\tYAW_PITCH_QUADRANTS_JSON_KEY='q';\r\nconst TWO_PI=Math.PI*2;\r\nexport default class Quadrants{\r\n\tconstructor({xYZFrom, sceneSize, yaw_Pitch_Quadrants}){\r\n\t\tthis._xYZFrom = xYZFrom;\r\n\t\tthis._sceneSize = sceneSize;\r\n\t\tthis._yaw_Pitch_Quadrants = yaw_Pitch_Quadrants; \r\n\t\tthis._yawLength = this._yaw_Pitch_Quadrants.length;\r\n\t\tthis._pitchLength = this._yaw_Pitch_Quadrants[0].length;\r\n\t}\r\n\tget xYZFrom(){\r\n\t\treturn this._xYZFrom;\r\n\t}\r\n\tget sceneSize(){\r\n\t\treturn this._sceneSize;\r\n\t}\r\n\tgetObjectIds({yawRadians, pitchRadians, x, y, z}){\r\n\t\tconst yawIndex = parseInt(yawRadians*this._yawLength/TWO_PI);\r\n\t\tconst pitchIndex = parseInt(pitchRadians*this._pitchLength/TWO_PI);\r\n\t\tconst quadrantsForCameraAngle = this._yaw_Pitch_Quadrants[yawIndex][pitchIndex];\r\n\t\tif(quadrantsForCameraAngle ===null||quadrantsForCameraAngle===undefined)return null;\r\n\t\tconst proportionX = x/this._sceneSize[0], proportionY = y/this._sceneSize[1], proportionZ = z/this._sceneSize[2];\r\n\t\treturn quadrantsForCameraAngle.getObjectIds({proportionX, proportionY, proportionZ});\r\n\t}\r\n\tstatic fromJSON(jObject){\r\n\t\tconst xYZFrom = jObject[XYZ_FROM_JSON_KEY_JSON_KEY];\r\n\t\tconst sceneSize = jObject[SCENE_SIZE_JSON_KEY];\r\n\t\t/*const yaw_Pitch_Quadrants = \r\n\t\t\tjObject[YAW_PITCH_QUADRANTS_JSON_KEY]\r\n\t\t\t.map(pitch_Quadrants=>\r\n\t\t\t\tpitch_Quadrants\r\n\t\t\t\t.map(jObjectQuadrants=>\r\n\t\t\t\t\t\tQuadrantsForCameraAngle.fromJSON(jObjectQuadrants)\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\treturn new Quadrants({xYZFrom, sceneSize,\r\n\t\t\tyaw_Pitch_Quadrants});*/\r\n\t\t\tthrow new Error('Not Implemented');\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport RemoteFileHelper from '../core/RemoteFileHelper';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport GroupedCallbacks from '../core/GroupedCallbacks';\r\nimport Configuration from '../configuration/Configuration';\r\nimport Configurations from '../configuration/Configurations';\r\nimport SiteJson from '../site/SiteJson';\r\nimport FiltersSettings from '../filters/FiltersSettings';\r\nimport LatestSiteInfo from '../site/LatestSiteInfo';\r\nimport Urls from '../urls/Urls';\r\nimport configurationJson from '../site_specific/current/configuration.json';\r\nimport configurationsJson from '../site_specific/configurations.json';\r\nimport QuadrantsV2 from '../modelling/quadrants/v2/QuadrantsV2';\r\nimport QuadrantsV1 from '../modelling/quadrants/v1/QuadrantsV1';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class AssetsManager{\r\n\tstatic get configuration(){\r\n\t\tif(AssetsManager._configuration===undefined){\r\n\t\t\tAssetsManager._configuration = Configuration.fromJSON(configurationJson);\r\n\t\t}\r\n\t\treturn AssetsManager._configuration;\r\n\t}\r\n\tstatic get configurations(){\r\n\t\tif(AssetsManager._configurations===undefined){\r\n\t\t\tAssetsManager._configurations = Configurations.fromJSON(configurationsJson, this.configuration);\r\n\t\t}\r\n\t\treturn AssetsManager._configurations;\r\n\t}\r\n\tstatic getSiteAssets(configuration){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst siteSlug = configuration.siteSlug;\r\n\t\t\tconst siteAssets = AssetsManager._mapSiteSlugToSiteAssets.get(siteSlug);\r\n\t\t\tif(siteAssets)\r\n\t\t\t{\r\n\t\t\t\tresolve(siteAssets);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet groupedCallbackGetSiteAssets = AssetsManager._mapSiteSlugToGroupedCallbackGetSiteAssets.get(siteSlug);\r\n\t\t\tif(groupedCallbackGetSiteAssets){\r\n\t\t\t\tgroupedCallbackGetSiteAssets.then(resolve).catch(reject);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tgroupedCallbackGetSiteAssets = new GroupedCallbacks();\r\n\t\t\tAssetsManager._mapSiteSlugToGroupedCallbackGetSiteAssets.set(siteSlug, groupedCallbackGetSiteAssets);\r\n\t\t\tconst deleteGroupedCallbackFromMap = ()=> AssetsManager._mapSiteSlugToGroupedCallbackGetSiteAssets.delete(siteSlug);\r\n\t\t\tgroupedCallbackGetSiteAssets.then((siteAssets)=>{\r\n\t\t\t\tdeleteGroupedCallbackFromMap();\r\n\t\t\t\tAssetsManager._mapSiteSlugToSiteAssets.set(siteSlug, siteAssets);\r\n\t\t\t\tresolve(siteAssets);\r\n\t\t\t}).catch((err)=>{\r\n\t\t\t\tdeleteGroupedCallbackFromMap();\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\t\t\tAssetsManager._getSiteAssets(configuration)\r\n\t\t\t\t.then((siteAssets)=>{\r\n\t\t\t\t\tconsole.log('siteAssets');\r\n\t\t\t\t\tconsole.log(siteAssets);\r\n\t\t\t\t\tgroupedCallbackGetSiteAssets.doThen(siteAssets);\r\n\t\t\t\t})\r\n\t\t\t\t.catch(groupedCallbackGetSiteAssets.doCatch);\r\n\t\t});\r\n\t}\t\r\n\t\r\n\tstatic _getSiteAssets(configuration){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tlet nJsonFilesGot = 0;\r\n\t\t\tlet siteJson = null, latestSiteInfo = null;\r\n\t\t\tlet done = false;\r\n\t\t\tconst gotAJsonFileOrError=(err)=>{\r\n\t\t\t\tif(err){\r\n\t\t\t\t\tdone = true;\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif(done)return;\r\n\t\t\t\tnJsonFilesGot++;\r\n\t\t\t\tif(nJsonFilesGot<2)return;\r\n\t\t\t\tdone = true;\r\n\t\t\t\tif(latestSiteInfo!==null)\r\n\t\t\t\t\tAssetsManager._updateSiteJsonFromLatestSiteInfo(siteJson, latestSiteInfo);\r\n\t\t\t\tresolve({siteJson:siteJson, configuration:configuration});\r\n\t\t\t};\r\n\t\t\tAssetsManager._getSiteJsonForSite(configuration)\r\n\t\t\t.then((siteJsonIn)=>{\r\n\t\t\t\tsiteJson = siteJsonIn;\r\n\t\t\t\tgotAJsonFileOrError();\r\n\t\t\t}).catch(gotAJsonFileOrError);\r\n\t\t\tAssetsManager.getLatestSiteInfo(configuration).then((latestSiteInfoIn)=>{\r\n\t\t\t\tlatestSiteInfo=latestSiteInfoIn;\r\n\t\t\t\tgotAJsonFileOrError();\r\n\t\t\t}).catch(gotAJsonFileOrError);\r\n\t\t});\r\n\t}\t\r\n\tstatic getQuadrants(url){\r\n\t\tconsole.log('getQuadrants');\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tRemoteFileHelper.loadJSON(url).then((jObject)=>{\r\n\t\t\t\tconst quadrants = url.indexOf('v2')>0||url.indexOfg('V2')>=0\r\n\t\t\t\t\t?\r\n\t\t\t\t\tQuadrantsV2.fromJSON(jObject)\r\n\t\t\t\t\t:\r\n\t\t\t\t\tQuadrantsV1.fromJSON(jObject);\r\n\t\t\t\tresolve(quadrants);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\tstatic _updateSiteJsonFromLatestSiteInfo(siteJson, latestSiteInfo){\r\n\t\tconst configurators = latestSiteInfo.configurators;\r\n\t\tconfigurators.forEach(configurator=>{\r\n\t\t\tconst houseType = siteJson.houseTypes.getBySlug(configurator.houseTypeSlug);\r\n\t\t\tif(!houseType)return;\r\n\t\t\thouseType.configuratorUrl = configurator.configuratorUrl;\r\n\t\t\thouseType.tourUrl = configurator.tourUrl;\r\n\t\t\thouseType.videoUrl = configurator.videoUrl;\r\n\t\t});\r\n\t\tconst latestPlotInfos = latestSiteInfo.latestPlotInfos;\r\n\t\tconst mapPlotNumberToPlot = {};\r\n\t\tsiteJson.getPlotsArray().forEach(plot=>mapPlotNumberToPlot[plot.number]=plot);\r\n\t\tlatestPlotInfos.forEach(latestPlotInfo=>{\r\n\t\t\tconst plot = mapPlotNumberToPlot[latestPlotInfo.number];\r\n\t\t\tif(!plot)return;\r\n\t\t\tplot.price = latestPlotInfo.price;\r\n\t\t\tplot.status = latestPlotInfo.plotStatusId;\r\n\t\t\tconst newFeatures = latestPlotInfo.featuresForPlot;\r\n\t\t\tif(!newFeatures)return;\r\n\t\t\tplot.plotFeatures = newFeatures.map(featureForPlot=>featureForPlot.feature);\r\n\t\t});\r\n\t\tconst houseTypes = siteJson.houseTypes;\r\n\t\tconst latestHouseTypeInfos = latestSiteInfo.latestHouseTypeInfos;\r\n\t\tlatestHouseTypeInfos.forEach(latestHouseTypeInfo=>{\r\n\t\t\tconst houseType = houseTypes.getBySlug(latestHouseTypeInfo.slug);\r\n\t\t\tif(!houseType)return;\r\n\t\t\tconsole.log('latestHouseTypeInfo.featuresForHouseType');\r\n\t\t\tconsole.log(latestHouseTypeInfo.featuresForHouseType);\r\n\t\t\tconst newFeatures = latestHouseTypeInfo.featuresForHouseType;\r\n\t\t\tif(!newFeatures)return;\r\n\t\t\thouseType.features = newFeatures.filter(featureForHouseType=>featureForHouseType.feature?true:false).map(featureForHouseType=>featureForHouseType.feature);\r\n\t\t});\r\n\t}\r\n\tstatic getLatestSiteInfo(siteSlug){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst url = Urls.getLatestSiteInfo(siteSlug);\r\n\t\t\tRemoteFileHelper.loadJSON(url).then((jObject)=>{\r\n\t\t\t\tif(jObject.errorMessage||!jObject.latestSiteInfo)\r\n\t\t\t\t{\r\n\t\t\t\t\treject(new Error('Failed to get latestSiteInfo'));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconsole.log('latest site info');\r\n\t\t\t\tconsole.log(jObject);\r\n\t\t\t\tresolve(LatestSiteInfo.fromJSON(jObject.latestSiteInfo));\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\tstatic _getSiteJsonForSite(configuration){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst url = Urls.getSiteJson(configuration);\r\n\t\t\tRemoteFileHelper.loadJSON(url).then((jArrayPlots)=>{\r\n\t\t\t\tconst siteJson = SiteJson.fromJSON(jArrayPlots, configuration);\r\n\t\t\t\tresolve(siteJson);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n}\r\nAssetsManager._mapSiteSlugToSiteAssets = new Map();\r\nAssetsManager._mapSiteSlugToGroupedCallbackGetSiteAssets = new Map();","window.isMobile = false; //initiate as false\r\n// device detection\r\nif (/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)\r\n || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(navigator.userAgent.substr(0, 4)))\r\n window.isMobile = true;\r\nexport default window.isMobile;","const PlotMoreInformationType={OVERVIEW:'overview', GALLERY:'gallery', FLOOR_PLANS:'floorPlans'};\r\nexport default PlotMoreInformationType;\t\t","function getAbsolute(element)\r\n{\r\n var rect = element.getBoundingClientRect();\r\n var docEl = document.documentElement;\r\n var rectTop = rect.top + window.pageYOffset - docEl.clientTop;\r\n var rectLeft = rect.left + window.pageXOffset - docEl.clientLeft;\r\n var rectRight = rect.right + window.pageYOffset - docEl.clientTop;\r\n var rectBottom = rect.bottom + window.pageXOffset - docEl.clientLeft;\r\n return { top: rectTop, left: rectLeft, right:rectRight, bottom:rectBottom }; \r\n}\r\nexport default getAbsolute;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nconst { throwIsNotNumber } = ParameterErrors;\r\nexport default class Rect {\r\n constructor(props) {\r\n const { x, y, width, height } = props;\r\n if (!Validation.isNumber(x)) throwIsNotNumber(\"x\");\r\n if (!Validation.isNumber(y)) throwIsNotNumber(\"y\");\r\n if (!Validation.isNumber(width)) throwIsNotNumber(\"width\");\r\n if (!Validation.isNumber(height)) throwIsNotNumber(\"height\");\r\n this._x = x;\r\n this._y = y;\r\n\t\tthis._width = width;\r\n\t\tthis._height = height;\r\n\t\tthis.containsPoint = this.containsPoint.bind(this);\r\n }\r\n get x() {\r\n return this._x;\r\n }\r\n get y() {\r\n return this._y;\r\n }\r\n get width() {\r\n return this._width;\r\n }\r\n get height() {\r\n return this._height;\r\n }\r\n\tcontainsPoint(point){\r\n\t\tconst x = point[0];\r\n\t\tconst y = point[1];\r\n\t\treturn (x>=this._x)&&(x<=this._x+this._width) && (y>=this._y)&&(y<=this._y+this._height);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './UnitMarker.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport Rect from '../geometry/Rect';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport enableBindingToOthers from '../mvvm/enableBindingToOthers';\r\nconst{throwNotProvided} = ParameterErrors;\r\nexport default class UnitMarker extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {siteJson, unit, position, onHover, onClick}=props;\r\n\t\tif(!siteJson)throwNotProvided('siteJson');\r\n\t\tif(!unit)throwNotProvided('unit');\r\n\t\tthis._siteJson = siteJson;\r\n\t\tthis._unit = unit;\r\n\t\tthis._position = position;\r\n\t\tif(!onHover)throwNotProvided('onHover');\r\n\t\tif(!onClick)throwNotProvided('onClick');\r\n\t\tthis._callbackOnHover = onHover;\r\n\t\tthis._callbackOnClick = onClick;\r\n\t\tthis._handleMouseEnter = this._handleMouseEnter.bind(this);\r\n\t\tthis._handleMouseLeave = this._handleMouseLeave.bind(this);\r\n\t\tthis._handleClick = this._handleClick.bind(this);\r\n\t\tthis._handleActiveChanged=this._handleActiveChanged.bind(this);\r\n\t\tthis._handleSelectedChanged=this._handleSelectedChanged.bind(this);\r\n\t\tthis._dispatchCallbackOnHover=this._dispatchCallbackOnHover.bind(this);\r\n\t\tthis._getMarkerPosition=this._getMarkerPosition.bind(this);\r\n\t\tthis.getMouseInBounds = this.getMouseInBounds.bind(this);\r\n\t\tthis._releaseUnitActiveHandle= this._releaseUnitActiveHandle.bind(this);\r\n\t\tthis._element = React.createRef();\r\n\t\tthis.deactivate = this.deactivate.bind(this);\r\n\t\tunit.addEventListener('active', this._handleActiveChanged);\r\n\t\tconst propertyBindingSelected = PropertyBindingFactory.standard(this, unit, 'selected', this._handleSelectedChanged);\r\n\t\tthis.state ={filteredOut:false, position:position, hovering:false, active:false, favourite:propertyBindingSelected.get()};\r\n\t\t\r\n\t}\r\n\tset filteredOut(value){\r\n\t\tthis.setState({filteredOut: value});\r\n\t}\r\n\tget position(){\r\n\t\treturn this._position;\r\n\t}\r\n\tget unit(){\r\n\t\treturn this._unit;\r\n\t}\r\n\tgetMouseInBounds(point){\r\n\t\tconst element = this._element.current;\r\n\t\tif(element===null)return;\r\n\t\tconst absolutePosition = getAbsolute(element);\r\n\t\tconst containsPoint = new Rect({x:absolutePosition.left, y:absolutePosition.top, width:element.offsetWidth, height:element.offsetHeight})\r\n\t\t.containsPoint(point);\r\n\t\treturn containsPoint;\r\n\t}\r\n\t_handleActiveChanged(e){\r\n\t\tconst active = e.active;\r\n\t\tif(active!==this.state.active)\r\n\t\t\tthis.setState({active:active});\r\n\t\t\r\n\t}\r\n\t_handleMouseEnter(e){\r\n\t\tthis.setState({hovering:true});\r\n\t\tthis._releaseUnitActiveHandle();\r\n\t\tthis._currentUnitActiveHandle=this._unit.takeActiveHandle();\r\n\t\tthis._dispatchCallbackOnHover(true);\r\n\t}\r\n\t_handleMouseLeave(e){\r\n\t\tthis.setState({hovering:false});\r\n\t\tthis._releaseUnitActiveHandle();\r\n\t\tthis._dispatchCallbackOnHover(false);\r\n\t}\r\n\t_getMarkerPosition(){\r\n const element = this._element.current;\r\n\t\tconst absolutePosition = getAbsolute(element);\r\n\t\treturn [absolutePosition.left+(element.offsetWidth/2), absolutePosition.top+(element.offsetHeight/2)];\r\n\t}\r\n\t_dispatchCallbackOnHover(hovering){\r\n\t\tthis._callbackOnHover({hovering:hovering, markerPosition:this._getMarkerPosition(), marker:this});\r\n\t}\r\n\t_handleClick(){\r\n\t\tthis._callbackOnClick({markerPosition:this._getMarkerPosition(), marker:this});\r\n\t}\r\n\t_releaseUnitActiveHandle(){\r\n\t\tif(!this._currentUnitActiveHandle)return;\r\n\t\tthis._currentUnitActiveHandle.dispose();\r\n\t\tthis._currentUnitActiveHandle=null;\r\n\t}\r\n\t_handleSelectedChanged(value){\r\n\t\tthis.setState({favourite:value});\r\n\t}\r\n\tdeactivate(){\r\n\t\tthis._releaseUnitActiveHandle();\r\n\t}\r\n\trender() {\r\n\t\tlet className=\"unit-marker\";\r\n\t\tif(this.state.active)\r\n\t\t\tclassName+=\" active\";\r\n\t\tif(this.state.favourite)\r\n\t\t\tclassName+=\" favourite\";\r\n\t\tif(this.state.filteredOut)\r\n\t\t\tclassName+=\" filtered-out\";\r\n\t\tconst unit = this._unit;\r\n\t\tconst availablePlots = unit.plots.filter(plot=>plot.status===PlotStatus.AVAILABLE);\r\n\t\tconst comingSoonPlots = unit.plots.filter(plot=>plot.status===PlotStatus.COMING_SOON);\r\n\t\tconst plotStatus = availablePlots.length>0?PlotStatus.AVAILABLE:(comingSoonPlots.length>0)?PlotStatus.COMING_SOON:PlotStatus.SOLD_OR_UNAVAILABLE;\r\n\t\t\t\r\n\t\tif(!unit.hasMoreThanOneUnit)\r\n\t\t\tclassName+=` ${PlotStatus.getCssName(plotStatus)}`;\r\n\t\treturn (
\r\n\t\t\t
\r\n\t\t
)\r\n\t}\r\n}\r\n","const Alignment ={left:'left', right:'right', top:'top', bottom:'bottom'};\r\nexport default Alignment;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParameterError from '../errors/ParameterError';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport Alignment from '../ui_core/Alignment';\r\nimport './Tooltip.css';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class Tooltip {\r\n\tstatic register({element, text, delay, atomicCallbackShow, noEnterLeaveEvents}){\r\n\t\tif(delay===undefined)\r\n\t\t\tdelay = 600;\r\n\t\tconst tooltip = Tooltip._getOrCreateTooltip();\r\n\t\tlet mouseDown = false;\r\n\t\tlet cancelShow = null;\r\n\t\tconst show = ()=>{\r\n\t\t\tcancelShow&&cancelShow();\r\n\t\t\tcancelShow = tooltip.show(element, text, delay, ()=>mouseDown);\r\n\t\t};\r\n\t\tconst hide = ()=>{\r\n\t\t\tcancelShow&&cancelShow();\r\n\t\t\ttooltip.hide();\r\n\t\t};\r\n\t\tif(!noEnterLeaveEvents){\r\n\t\t\telement.addEventListener('mouseenter', show);\r\n\t\t\telement.addEventListener('mouseleave', hide);\r\n\t\t}\r\n\t\tconst onMouseDown = ()=>{\r\n\t\t\tcancelShow&&cancelShow();\r\n\t\t\tmouseDown = true; \r\n\t\t\ttooltip.hide();\r\n\t\t};\r\n\t\tconst mouseUp = ()=>mouseDown = false;\r\n\t\telement.addEventListener('mousedown', onMouseDown);\r\n\t\telement.addEventListener('mouseup', mouseUp);\r\n\tconst disposeMouseDown= ()=>{\r\n\t\t\telement.removeEventListener('mousedown', onMouseDown);\r\n\t\t\telement.addEventListener('mouseup', mouseUp);\r\n\t\t};\r\n\t\tconst dispose = ()=>{\r\n\t\t\telement.removeEventListener('mouseenter', show);\r\n\t\t\telement.removeEventListener('mouseleave', hide);\r\n\t\t\tdisposeMouseDown&&disposeMouseDown();\r\n\t\t};\r\n\t\tif(atomicCallbackShow){\r\n\t\t\tatomicCallbackShow.show = show;\r\n\t\t}\r\n\t\treturn dispose;\r\n\t}\r\n\tstatic _getOrCreateTooltip(){\r\n\t\tif(Tooltip._tooltip)return Tooltip._tooltip;\r\n\t\tconst element = document.createElement('div');\r\n\t\telement.classList.add('tooltip');\r\n\t\tconst tooltipTextElement = document.createElement('div');\r\n\t\ttooltipTextElement.classList.add('tooltiptext');\r\n\t\telement.appendChild(tooltipTextElement);\r\n\t\tdocument.body.appendChild(element);\r\n\t\tconst setVisible = Tooltip._getSetVisible(element);\r\n\t\tconst setPosition = Tooltip._getSetPosition(element);\r\n\t\tconst triangleElement = document.createElement('div');\r\n\t\ttriangleElement.classList.add('triangle');\r\n\t\telement.appendChild(triangleElement);\r\n\t\tTooltip._tooltip = {\r\n\t\t\telement, \r\n\t\t\tshow:(elementShowingFor, text, delay, getMouseDown)=>{\r\n\t\t\t\tconsole.log('showing');\r\n\t\t\t\tlet showing = true;\r\n\t\t\t\tsetTimeout(()=>{\r\n\t\t\t\t\tif(!showing||getMouseDown())return;\r\n\t\t\t\t\ttooltipTextElement.innerHTML = text;\r\n\t\t\t\t\tsetVisible(true);\r\n\t\t\t\t\tsetPosition(elementShowingFor);\r\n\t\t\t\t}, delay);\r\n\t\t\t\tconst cancelShow = ()=>showing = false;\r\n\t\t\t\treturn cancelShow;\r\n\t\t\t},\r\n\t\t\thide:()=>{\r\n\t\t\t\tsetVisible(false);\r\n\t\t\t},\r\n\t\t\t\r\n\t\t};\r\n\t\treturn Tooltip._tooltip;\r\n\t}\r\n\tstatic _getSetVisible(element){\r\n\t\treturn (visible)=>{\r\n\t\t\tif(visible){\r\n\t\t\t\telement.classList.add('visible');\r\n\t\t\t\tsetTimeout(()=>element.classList.add('faded-in'),0);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\telement.classList.remove('visible');\r\n\t\t\t\telement.classList.remove('faded-in');\r\n\t\t\t}\r\n\t\t};\r\n\t}\r\n\tstatic _getSetPosition(element){\r\n\t\tconst setAlignment = Tooltip._getSetAlignment(element);\r\n\t\treturn (elementShowingFor)=>{\r\n\t\t\telement.style.left='0px';\r\n\t\t\telement.style.top='0px';\r\n\t\t\tconst width = element.offsetWidth;\r\n\t\t\tconst absolutePositionElementShowingFor = getAbsolute(elementShowingFor);\r\n\t\t\tconst leftWhichWouldBeRequiredForLeftAlign = absolutePositionElementShowingFor.left- element.offsetWidth;\r\n\t\t\tlet left;\r\n\t\t\tlet alignment = Alignment.left;\r\n\t\t\tif(leftWhichWouldBeRequiredForLeftAlign<0){\r\n\t\t\t\talignment = Alignment.right;\r\n\t\t\t\tconst leftWhichWouldBeRequiredForRightAlign = absolutePositionElementShowingFor.left+ elementShowingFor.offsetWidth+element.offsetWidth;\r\n\t\t\t\tleft = leftWhichWouldBeRequiredForRightAlign;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tleft = leftWhichWouldBeRequiredForLeftAlign;\r\n\t\t\t}\r\n\t\t\tsetAlignment(alignment);\r\n\t\t\telement.style.left=String(left)+'px';\r\n\t\t\telement.style.top=String(absolutePositionElementShowingFor.top+ (elementShowingFor.offsetHeight/2) - (element.offsetHeight/2))+'px';\r\n\t\t};\r\n\t}\r\n\tstatic _getSetAlignment(element){\r\n\t\tlet currentAlignmentClass = null;\r\n\t\treturn (alignment)=>{\r\n\t\t\tconst alignmentClass = alignment===Alignment.left?'align-left':'align-right';\r\n\t\t\tif(currentAlignmentClass===alignmentClass)return;\r\n\t\t\telement.classList.remove(currentAlignmentClass);\r\n\t\t\telement.classList.add(alignmentClass);\r\n\t\t\tcurrentAlignmentClass=alignmentClass;\r\n\t\t}\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Filters.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport Tooltip from './Tooltip';\r\n\r\nexport default class IconButton extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {faIcon, imgUrl, text, onClick, className, disabled, tooltip} = props;\r\n\t\tthis._callbackClick = onClick;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tif(faIcon&&imgUrl)throw new Error('Both faIcon and imgUrl were provided');\r\n\t\tthis._text = text;\r\n\t\tthis._handleClick=this._handleClick.bind(this);\r\n\t\tthis.state = { className:className, disabled:disabled===true?true:false, innerIcon :faIcon?():()};\r\n\t\tthis._tooltip = tooltip;\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tif(this._tooltip)\r\n\t\t\tTooltip.register({element:this._elementRef.current, text:this._tooltip});\r\n\t}\r\n\tcomponentDidUpdate(previousProps){\r\n\t\tif(previousProps.className!==this.props.className||previousProps.disabled!==this.props.disabled)\r\n\t\t\tthis.setState({className:this.props.className, disabled:this.props.disabled});\r\n\t\tif(previousProps.faIcon!==this.props.faIcon||previousProps.imgUrl!==this.props.imgUrl)\r\n\t\t\tthis.setState({innerIcon :this.props.faIcon?():()});\r\n\t\tif(previousProps.onClick!==this.props.onClick)\r\n\t\t{\r\n\t\t\tthis._callbackClick=this.props.onClick;\r\n\t\t}\r\n\t}\r\n\t_handleClick(e){\r\n\t\tthis._callbackClick(e);\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"icon-button\";\r\n\t\tif(this.state.className)\r\n\t\t\tclassName+=` ${this.state.className}`;\r\n\treturn ()\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './DialogButton.css';\r\nexport default class DialogButton extends Component{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\t\tconst {onClick, text, className}=props;\r\n\t\t\tthis._className = className;\r\n\t\t\tthis._text = text;\r\n\t\t\tthis._onClick = onClick;\r\n\t}\r\n\trender(){\r\n\t\tlet className = \"dialog-button\";\r\n\t\tif(this._className)className+=` ${this._className}`;\r\n\t\treturn (\r\n\t\t\t);\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport ReactDom from 'react-dom';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport './Dialog.css';\r\nimport IconButton from './IconButton';\r\nimport DialogButton from './DialogButton';\r\nimport Urls from '../urls/Urls';\r\nimport { faBackward, faTimes} from '@fortawesome/free-solid-svg-icons';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Dialog extends Component{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {preventInterraction, options, \r\n\t\t//disposeOnHide, \r\n\t\tmessage, title, className, onClickClose}=props;\r\n\t\tthis._preventInterraction=(preventInterraction===undefined||preventInterraction===null)?true:preventInterraction;\r\n\t\tif(!options)throwNotProvided('options');\r\n\t\tthis._options = options;\r\n\t\t//this._disposeOnHide = (disposeOnHide===undefined||disposeOnHide===null)?true:disposeOnHide;\r\n\t\tthis._message = message;\r\n\t\tthis._callbackClickClose = onClickClose;\r\n\t\tthis._disposed=false;\r\n\t\tconst buttons = options.map((option)=>{\r\n\t\t\treturn ();\r\n\t\t});\r\n\t\tthis.state ={className:className, message:message, title:title, buttons:buttons};\r\n\t\tthis._mapOptionHashToButton={};\r\n\t\tthis._buttons=[];\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\t//this.hide = this.hide.bind(this);\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis._handleClickButtonClose = this._handleClickButtonClose.bind(this);\r\n\t\t/*if(preventInterraction){\r\n\t\t\r\n\t\t\tvar p={};\r\n\t\t\tp[S.ELEMENT]=element;\r\n\t\t\tnew PreventInterraction(p);\r\n\t\t\tvar preventInterractionElement = element;\r\n\t\t\telement = E.DIV();\r\n\t\t\tpreventInterractionElement.appendChild(element);\r\n\t\t}*/\r\n\t}\r\n\tshow(){\r\n\t\t\tthis._setVisible(true);\r\n\t\t\treturn this;\r\n\t}\r\n\t/*hide(){\r\n\t\tif(this._disposeOnHide){\r\n\t\t\tthis.dispose();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.setState({visible:false});\r\n\t}*/\r\n\t_handleClickButtonClose(){\r\n\t\tthis._callbackClickClose&&this._callbackClickClose();\r\n\t\tthis.dispose();\r\n\t}\r\n\t_createOnClickForOption(callback){\r\n\t\treturn ()=>{\r\n\t\t\tcallback&&callback();\r\n\t\t\tthis.dispose();\r\n\t\t};\r\n\t}\r\n\tdispose(){\r\n\t\tif(this._disposed)return;\r\n\t\tthis._disposed=true;\r\n\t\tReactDom.unmountComponentAtNode(ReactDom.findDOMNode(this).parentNode);\r\n\t}\r\n\t_setVisible(value){\r\n\t\tthis.setState({visible:value});\r\n\t}\r\n\tstatic create(props){\r\n\t\tprops.ref = React.createRef();\r\n\t\tconst element = React.createElement(Dialog, props);\r\n\t\tReactDom.render(element , document.body.appendChild(document.createElement('div')));\r\n\t\treturn element.ref;\r\n\t}\r\n\trender(){\r\n\t\tlet className = \"dialog\";\r\n\t\tif(this.state.className)className+=` ${this.state.className}`;\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t
{this.state.title}
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.state.message}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
{this.state.buttons}
\r\n\t\t\t\t
\r\n\t\t\t
);\r\n\t}\r\n}","export default class EventNormalizer{\r\n\tstatic addFriendlyXYToTouch_LexicalClosure(callback2){\r\n\t\treturn (...args)=>{\r\n\t\t\tconst e = args[0];\r\n\t\t\tEventNormalizer.addFriendlyXYToTouch(e);\r\n\t\t\tcallback2.apply(null, args);\r\n\t\t};\r\n\t}\r\n\tstatic addFriendlyXYToMouse_LexicalClosure(callback){\r\n\t\treturn (...args)=>{\r\n\t\t\tconst e = args[0];\r\n\t\t\tEventNormalizer.addFriendlyXYToMouse(e);\r\n\t\t\tcallback.apply(null, args);\r\n\t\t};\r\n\t}\r\n\tstatic addFriendlyXYToTouch(e){\r\n\t\tconst touch = e.changedTouches[0];\r\n\t\tif(touch){\r\n\t\t\te.x = touch.clientX;\r\n\t\t\te.y = touch.clientY;\r\n\t\t}\r\n\t}\r\n\tstatic addFriendlyXYToMouse(e){\r\n\t\ttry{\r\n\t\tif(e.x===undefined)\r\n\t\t\te.x = e.clientX;\r\n\t\tif(e.y===undefined)\r\n\t\t\te.y = e.clientY;\r\n\t\t}catch{}\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class Once{\r\n\tconstructor(callback){//multiple triggers synchronously results in one call to the callback.\r\n\t\tthis._callback = callback;\r\n\t\tif(callback===undefined||callback===null)\r\n\t\t\tthrowNotProvided('callback');\r\n\t\tthis._set=false;\r\n\t\tthis.trigger = this.trigger.bind(this);\r\n\t\tthis._unsetIt=this._unsetIt.bind(this);\r\n\t\tthis._setIt = this._setIt.bind(this);\r\n\t}\r\n\tget triggered(){\r\n\t\treturn this._set;\r\n\t}\r\n\ttrigger(a){\r\n\t\tif(!this._set){\r\n\t\t\tthis._setIt(arguments);\r\n\t\t}\r\n\t};\r\n\t_unsetIt(){\r\n\t\tthis._set=false;\r\n\t}\r\n\t_setIt(args){\r\n\t\tsetTimeout(this._unsetIt, 0);\r\n\t\tthis._set=true;\r\n\t\tthis._callback.apply(null, args);\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport EventNormalizer from '../core/EventNormalizer';\r\nimport Once from '../core/Once';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class EfficientMoveCycle{\r\n\tconstructor(props){\r\n\t\tconst { element, stopPropagation, preventDefault, onStart, onMove, onEnd , friendlyXY} = props;\r\n\t\tif (!element) throwNotProvided(\"element\");\r\n\t\tthis._stopPropagation = (stopPropagation === undefined || stopPropagation === null)\r\n\t\t\t? false : stopPropagation;\r\n\t\tthis._preventDefault = (preventDefault === undefined || preventDefault === null)\r\n\t\t\t? false : preventDefault;\r\n\r\n\t\tif (!onStart) throwNotProvided(\"onStart\");\r\n\t\tif (typeof (onStart) !== \"function\") throwNotOfType(\"onStart\", \"function\");\r\n\t\tthis._onStartMouse = friendlyXY?EventNormalizer.addFriendlyXYToMouse_LexicalClosure(onStart):onStart;\r\n\t\tthis._onStartTouch = friendlyXY?EventNormalizer.addFriendlyXYToTouch_LexicalClosure(onStart):onStart;\r\n\t\t\r\n\t\tif (!onMove) throwNotProvided(\"onMove\");\r\n\t\tif (typeof (onMove) !== \"function\") throwNotOfType(\"onMove\", \"function\");\r\n\t\tthis._onMoveMouse = friendlyXY?EventNormalizer.addFriendlyXYToMouse_LexicalClosure(onMove):onMove;\r\n\t\tthis._onMoveTouch = friendlyXY?EventNormalizer.addFriendlyXYToTouch_LexicalClosure(onMove):onMove;\r\n\r\n\t\tif (!onEnd) throwNotProvided(\"onEnd\");\r\n\t\tif (typeof (onEnd) !== \"function\") throwNotOfType(\"onEnd\", \"function\");\r\n\t\tthis._onEndOnce = new Once(onEnd);\r\n\t\tthis._onEndMouse = friendlyXY?EventNormalizer.addFriendlyXYToMouse_LexicalClosure(this._onEndOnce.trigger):this._onEndOnce.trigger;\r\n\t\tthis._onEndTouch = friendlyXY?EventNormalizer.addFriendlyXYToTouch_LexicalClosure(this._onEndOnce.trigger):this._onEndOnce.trigger;\r\n\r\n\t\tthis._mouseDown = this._mouseDown.bind(this);\r\n\t\tthis._mouseMove = this._mouseMove.bind(this);\r\n\t\tthis._mouseUp = this._mouseUp.bind(this);\r\n\t\tthis._stopPropagationIfRequired = this._stopPropagationIfRequired.bind(this);\r\n\t\tthis._preventDefaultIfRequired = this._preventDefaultIfRequired.bind(this);\r\n\t\tthis._addMouseMoveEvent = this._addMouseMoveEvent.bind(this);\r\n\t\tthis._addMouseUpEvent = this._addMouseUpEvent.bind(this);\r\n\t\t\r\n\t\tthis._touchStart = this._touchStart.bind(this);\r\n\t\t//this._touchStartAnywhere = this._touchStartAnywhere.bind(this);\r\n\t\tthis._touchMove = this._touchMove.bind(this);\r\n\t\tthis._touchEnd = this._touchEnd.bind(this);\r\n\t\tthis._addTouchEnd = this._addTouchEnd.bind(this);\r\n\t\tthis._addTouchMove = this._addTouchMove.bind(this);\r\n\t\telement.addEventListener('mousedown', this._mouseDown, {passive: false});\r\n\t\telement.addEventListener('touchstart', this._touchStart, {passive: false});\r\n\t}\r\n\t_mouseDown(e) {\r\n\t\tif (!e) e = window.event;\r\n\t\tif(this._friendlyXY)this._addFriendlyMouseXY(e);\r\n\t\tif (this._onStartMouse(e, false) == false) return;\r\n\t\tEfficientMoveCycle._clearCurrentMouseMove();\r\n\t\tEfficientMoveCycle._clearCurrentMouseUp()\r\n\t\tthis._addMouseMoveEvent();\r\n\t\tthis._addMouseUpEvent();\r\n\t\tthis._stopPropagationIfRequired(e);\r\n\t\tthis._preventDefaultIfRequired(e);\r\n\t}\r\n\t_mouseMove(e) {\r\n\t\tif (!e) e = window.event;\r\n\t\tthis._onMoveMouse(e, false);\r\n\t\tthis._stopPropagationIfRequired(e);\r\n\t\tthis._preventDefaultIfRequired(e);\r\n\t}\r\n\t_mouseUp(e) {\r\n\t\tif (!e) e = window.event;\r\n\t\tthis._onEndMouse(e, false);\r\n\t\tEfficientMoveCycle._clearCurrentMouseUp();\r\n\t\tEfficientMoveCycle._clearCurrentMouseMove();\r\n\t\tthis._stopPropagationIfRequired(e);\r\n\t\tthis._preventDefaultIfRequired(e);\r\n\t}\r\n\t\r\n\t\r\n\t\r\n\t_touchStart(e) {\r\n\t\tif (!e)e = window.event;\r\n\t\tif (this._onStartTouch(e, true) == false) return;\r\n\t\tEfficientMoveCycle._clearCurrentTouchMove();\r\n\t\tEfficientMoveCycle._clearCurrentTouchEnd();\r\n\t\tthis._addTouchMove();\r\n\t\tthis._addTouchEnd();\r\n\t}\r\n\t/*_touchStartAnywhere(e){\r\n\t\tif (!e)e = window.event;\r\n\t\tself[S.ON_START_ANYWHERE](e, true);\r\n\t}*/\r\n\t_touchMove(e) {\r\n\t\tif (!e) e = window.event;\r\n\t\tthis._onMoveTouch(e, true);\r\n\t\tthis._stopPropagationIfRequired(e);\r\n\t\tthis._preventDefaultIfRequired(e);\r\n\t}\r\n\t_touchEnd(e) {\r\n\t\tif (!e)e = window.event;\r\n\t\tconst keep = this._onEndTouch(e, true);\r\n\t\tif(keep)return;\r\n\t\tEfficientMoveCycle._clearCurrentTouchEnd();\r\n\t\tEfficientMoveCycle._clearCurrentTouchMove();\r\n\t}\r\n\t_addTouchMove(){\r\n\t\tdocument.documentElement.addEventListener('touchmove', this._touchMove, {passive: false});\r\n\t\tEfficientMoveCycle._currentTouchMove = this._touchMove;\r\n\t}\r\n\t_addTouchEnd(){\r\n\t\tdocument.documentElement.addEventListener('touchend', this._touchEnd, {passive: false});\r\n\t\tEfficientMoveCycle._currentTouchEnd = this._touchEnd;\r\n\t}\r\n\t\r\n\t_stopPropagationIfRequired(e) {\r\n\t\tif (this._stopPropagation) {\r\n\t\t\te.stopPropagation && e.stopPropagation();\r\n\t\t}\r\n\t}\r\n\t_preventDefaultIfRequired(e) {\r\n\t\tif (this._preventDefault) {\r\n\t\t\te.preventDefault && e.preventDefault();\r\n\t\t}\r\n\t}\r\n\t_addMouseMoveEvent() {\r\n\t\tdocument.documentElement.addEventListener('mousemove', this._mouseMove, {passive: false});\r\n\t\tEfficientMoveCycle._currentMouseMove = this._mouseMove;\r\n\t}\r\n\t_addMouseUpEvent() {\r\n\t\tdocument.documentElement.addEventListener('mouseup', this._mouseUp, {passive: false});\r\n\t\tEfficientMoveCycle._currentMouseUp = this._mouseUp;\r\n\t}\t\r\n\tstatic _clearCurrentMouseUp() {\r\n\t\tif (!EfficientMoveCycle._currentMouseUp) return;\r\n\t\tdocument.documentElement.removeEventListener('mouseup', EfficientMoveCycle._currentMouseUp);\r\n\t\tEfficientMoveCycle._currentMouseUp = undefined;\r\n\t}\r\n\tstatic _clearCurrentMouseMove() {\r\n\t\tif (!EfficientMoveCycle._currentMouseMove) return;\r\n\t\tdocument.documentElement.removeEventListener('mousemove', EfficientMoveCycle._currentMouseMove);\r\n\t\tEfficientMoveCycle._currentMouseMove = undefined;\r\n\t}\r\n\t\r\n\t\r\n\tstatic _clearCurrentTouchEnd(){\r\n\t\tif(!EfficientMoveCycle._currentTouchEnd)return;\r\n\t\tdocument.documentElement.removeEventListener('touchend', EfficientMoveCycle._currentTouchEnd);\r\n\t\tEfficientMoveCycle._currentTouchEnd=undefined;\r\n\t}\r\n\tstatic _clearCurrentTouchMove(){\r\n\t\tif(!EfficientMoveCycle._currentTouchMove)return;\r\n\t\tdocument.documentElement.removeEventListener('touchmove', EfficientMoveCycle._currentTouchMove);\r\n\t\tEfficientMoveCycle._currentTouchMove=undefined;\r\n\t}\t\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class TwoFingerTouch{\r\n\tconstructor(props){\r\n\t\tconst {element, onStart, onStartFinger1, onStartFinger2, onMoveFinger1, onMoveFinger2, onEndFinger1, onEndFinger2, onEnd}=props;\r\n\t\tthis._finger1Active = false;\r\n\t\tthis._finger2Active=false;\r\n\t\tthis._touch1 = null;\r\n\t\tthis._touch2 = null;\r\n\t\tthis._onStart=onStart;\r\n\t\tthis._onMoveFinger2 = onMoveFinger2;\r\n\t\tthis._onMoveFinger1 = onMoveFinger1;\r\n\t\tthis._onStartFinger1 = onStartFinger1;\r\n\t\tthis._onStartFinger2 = onStartFinger2;\r\n\t\tthis._onEndFinger1 = onEndFinger1;\r\n\t\tthis._onEndFinger2 = onEndFinger2;\r\n\t\tthis._onEnd = onEnd;\r\n\t\tthis._finger1Id = null;\r\n\t\tthis._finger2Id = null;\r\n\t\t\r\n\t\tthis._start= this._start.bind(this);\r\n\t\tthis._startAnywhere= this._startAnywhere.bind(this);\r\n\t\tthis._startFinger2= this._startFinger2.bind(this);\r\n\t\tthis._move= this._move.bind(this);\r\n\t\tthis._end= this._end.bind(this);\r\n\t\t//onStartFinger1-2\r\n\t\t//onMoveFinger1-2\r\n\t\t//onEndFinger1-2\r\n\t\t//onStart when both fingers are down\r\n\t\t//onEnd when both fingers are up.\r\n\t\telement.addEventListener('touchstart', this._start);\r\n\t}\r\n\t_start(e){\r\n\t\t\tvar changedTouches = e.changedTouches;\r\n\t\t\tfor(var i=0; i{\r\n\t\t\tthis._pausing=false;\r\n\t\t\tif(this._triggered){\r\n\t\t\t\tthis._triggered=false;\r\n\t\t\t\tthis._callback();\r\n\t\t\t}\r\n\t\t}, this._delay);\r\n\t}\r\n}","import eventEnable from '../core/eventEnable';\r\nclass FullScreen{\r\n\tstatic toggle(element){\r\n\t\tif(document.fullscreenElement)\r\n\t\t\tFullScreen.exit();\r\n\t\telse\r\n\t\t\tFullScreen.enable(element);\r\n\t}\r\n\tstatic get isSupported(){\r\n\t\treturn document.fullscreenEnabled;\r\n\t}\r\n\tstatic get isEnabled(){\r\n\t\treturn document.fullscreenElement?true:false;\r\n\t}\r\n\tstatic enable(element){\r\n\t\tif(FullScreen.isEnabled){\r\n\t\t\tif(FullScreen._element===element)return;\r\n\t\t\tFullScreen.exit();\r\n\t\t}\r\n\t\tif (element.requestFullscreen) {\r\n\t\t\telement.requestFullscreen();\r\n\t\t} else if (element.webkitRequestFullscreen) { /* Safari */\r\n\t\t\telement.webkitRequestFullscreen();\r\n\t\t} else if (element.msRequestFullscreen) { /* IE11 */\r\n\t\t\telement.msRequestFullscreen();\r\n\t\t}\r\n\t\tFullScreen._dispatchChange();\r\n\t}\r\n\tstatic exit(){\r\n\t\tif(!FullScreen.isEnabled)return;\r\n\t\tdocument.exitFullscreen();\r\n\t\tFullScreen._dispatchChange();\r\n\t}\r\n\tstatic _dispatchChange(){\r\n\t\t\r\n\t}\r\n}\r\neventEnable(FullScreen);\r\nexport default FullScreen;","import React, { Component } from 'react';\r\nimport './Spinner.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Spinner extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst{spinnerHandles, invertHandles}=props;\r\n\t\tif(invertHandles===undefined||invertHandles===null)\r\n\t\t\tthis._invertHandles = false;\r\n\t\telse \r\n\t\t\tthis._invertHandles = invertHandles;\r\n\t\t\r\n\t\tthis._spinnerHandles = spinnerHandles;\r\n\t\tthis._spinnerHandlesChanged = this._spinnerHandlesChanged.bind(this);\r\n\t\tspinnerHandles.addEventListener('change', this._spinnerHandlesChanged);\r\n\t\tthis.state={visible:false};\r\n\t}\r\n\t_spinnerHandlesChanged(e){\r\n\t\tconst visible = this._invertHandles?(!e.hasHandles):e.hasHandles;\r\n\t\tthis.setState({visible:visible});\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"spinner\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t
);\r\n\t}\r\n}\r\n","\r\nexport default function getStyle(element, name)\r\n{ \r\n\treturn element.currentStyle ? element.currentStyle[name] : window.getComputedStyle ? window.getComputedStyle(element, null).getPropertyValue(name) : null;\r\n}","import getStyle from './getStyle';\r\nexport default function isDisplaying(element){\r\n\tlet currentElement = element;\r\n\twhile(currentElement){\r\n\t\tif(getStyle(currentElement, 'display')==='none')return false;\r\n\t\tcurrentElement = currentElement.parentElement;\r\n\t}\r\n\treturn true;\r\n}","import React, { Component } from 'react';\r\nimport './ZoomableDragable.css';\r\nimport EfficientMoveCycle from '../ui_core/EfficientMoveCycle';\r\nimport TwoFingerTouch from '../ui_core/TwoFingerTouch';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport FrequencyLimitedCallback from '../core/FrequencyLimitedCallback';\r\nimport GroupedCallbacks from '../core/GroupedCallbacks';\r\nimport Once from '../core/Once';\r\nimport Handles from '../core/Handles';\r\nimport FullScreen from '../ui_core/FullScreen';\r\nimport Spinner from './Spinner';\r\nimport isDisplaying from '../ui_core/isDisplaying';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class ParentElement extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {getContainerAspectRatio, updateExternalZoomSource, zoomMax, zoomMin, parentElementRef}= props;\r\n\t\tif(updateExternalZoomSource===undefined)throwNotProvided('updateExternalZoomSource');\r\n\t\tif(zoomMax===undefined||zoomMax===null)throwNotProvided('zoomMax');\r\n\t\tif(zoomMin===undefined||zoomMin===null)throwNotProvided('zoomMin');\r\n\t\tif(parentElementRef===undefined||parentElementRef===null)throwNotProvided('parentElementRef');\r\n\t\tthis._zoomMin = zoomMin;\r\n\t\tthis._zoomMax = zoomMax;\r\n\t\tthis._updateExternalZoomSource=updateExternalZoomSource;\r\n\t\tthis._getContainerAspectRatio = getContainerAspectRatio;\r\n\t\tthis.state ={site:null};\r\n\t\tthis._parentElementRef = parentElementRef;\r\n\t\tthis._imageWrapper = React.createRef();\r\n\t\tthis._inner = React.createRef();\r\n\t\tthis._img = React.createRef();\r\n\t\tthis._handleDragStart= this._handleDragStart.bind(this);\r\n\t\tthis._handleDragMove = this._handleDragMove.bind(this);\r\n\t\tthis._handleDragEnd = this._handleDragEnd.bind(this);\r\n\t\tthis._handleImageLoaded = this._handleImageLoaded.bind(this);\r\n\t\tthis._handleImageError = this._handleImageError.bind(this);\r\n\t\tthis._handleWindowResize = this._handleWindowResize.bind(this);\r\n\t\tthis._constrainAndSetPositionOfImageWrapper = this._constrainAndSetPositionOfImageWrapper.bind(this);\r\n\t\tthis._calculateMaxMinPosition= this._calculateMaxMinPosition.bind(this);\r\n\t\tthis._calculateZoomMultiplier= this._calculateZoomMultiplier.bind(this);\r\n\t\tthis.setZoom = this.setZoom.bind(this);\r\n\t\tthis._setZoomOnce = this._setZoomOnce.bind(this);\r\n\t\tthis._onTwoFingerStart= this._onTwoFingerStart.bind(this);\r\n\t\tthis._onMoveFinger1= this._onMoveFinger1.bind(this);\r\n\t\tthis._onMoveFinger2= this._onMoveFinger2.bind(this);\r\n\t\tthis._clearImage= this._clearImage.bind(this);\r\n\t\tthis.resizeIfNecessary = this.resizeIfNecessary.bind(this);\r\n\t\tthis._resize = this._resize.bind(this);\r\n\t\tthis._updateZoomFromTwoFingerTouch = this._updateZoomFromTwoFingerTouch.bind(this);\r\n\t\tthis._onTwoFingerEnd = this._onTwoFingerEnd.bind(this);\r\n\t\tthis._handleMouseWheelZoom = this._handleMouseWheelZoom.bind(this);\r\n\t\tthis._constrainAndSetZoom= this._constrainAndSetZoom.bind(this);\r\n\t\tthis._getImgAspectRatio = this._getImgAspectRatio.bind(this);\r\n\t\tthis._load = this._load.bind(this);\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis._groupedCallbacksSetZoom= new GroupedCallbacks();\r\n\t\tthis.state={imageWrapperPosition:[0, 0], zoom:1, showImage:false};\r\n\t\tthis._zoom = 1;\r\n\t\tthis._unmultipliedZoom = 1;\r\n\t\tthis._onceSetZoom = new Once(this._setZoomOnce);\r\n\t\tthis._initialUnmultipliedZoomOnStartOfTwoFingerTouch=null;\r\n\t\tthis._zoomMultiplier = 1;\r\n\t\tthis._doingTwoFingerTouch=null;\r\n\t\tthis._groupedCallbacksImageLoaded = new GroupedCallbacks();\r\n\t\tthis._startDistanceTwoFingerTouch=null;\r\n\t\tthis._frequencyLimitedCallbackZoom = new FrequencyLimitedCallback({frequencyHz:10});\r\n\t\tthis._spinnerHandles = new Handles();\r\n\t\tthis._imgUrl = null;\r\n\t\tthis._groupedCallbacksImageLoaded.then(()=>{\r\n\t\t\tthis._calculateZoomMultiplier();\r\n\t\t\t//this.setZoom(1);\r\n\t\t});\r\n\t\t\r\n\t}\r\n\tsetZoom(value){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._groupedCallbacksSetZoom.then(resolve).catch(reject); \r\n\t\t\tthis._onceSetZoom.trigger(value);\r\n\t\t});\r\n\t}\t\r\n\t_calculateZoomMultiplier(){\r\n\t\tif(!this._doneCalculateZoomMultiplier){\r\n\t\t\tthis._doneCalculateZoomMultiplier= true;\r\n\t\t\tconst imgAspectRatio = this._getImgAspectRatio();\r\n\t\t\tconst containerAspectRatio = this._getContainerAspectRatio();\r\n\t\t\tif(imgAspectRatio>containerAspectRatio)\r\n\t\t\t\tthis._zoomMultiplier=1;\r\n\t\t\telse \r\n\t\t\t\tthis._zoomMultiplier=imgAspectRatio /containerAspectRatio;\r\n\t\t}\r\n\t}\r\n\t_getImgAspectRatio(){\r\n\t\tconst img = this._img.current;\r\n\t\tconst imgAspectRatio = img.naturalWidth/img.naturalHeight;\r\n\t\treturn imgAspectRatio;\r\n\t}\r\n\t_setZoomOnce(value){\r\n\t\ttry{\r\n\t\tthis._updateExternalZoomSource&&this._updateExternalZoomSource (value);\r\n\t\tthis._unmultipliedZoom=value;\r\n\t\tconst currentZoom = this._zoom;\r\n\t\tthis._zoom = this._zoomMultiplier*value;\r\n\t\tconst parentElement = this._parentElementRef.current;\r\n\t\tconst imageWrapper = this._imageWrapper.current;\r\n\t\tconst multiplier = this._zoom/currentZoom;\r\n\t\tthis._calculateMaxMinPosition(imageWrapper.offsetWidth*multiplier, imageWrapper.offsetHeight*multiplier);\r\n\t\tconst proportionImageToLeft = (-imageWrapper.offsetLeft+(parentElement.offsetWidth/2))/imageWrapper.offsetWidth;\r\n\t\tconst newImageWrapperWidth = imageWrapper.offsetWidth*multiplier;\r\n\t\tconst newLeft = (parentElement.offsetWidth/2)-(proportionImageToLeft*newImageWrapperWidth)\r\n\t\t\r\n\t\t\r\n\t\tconst proportionImageToTop = (-imageWrapper.offsetTop+(parentElement.offsetHeight/2))/imageWrapper.offsetHeight;\r\n\t\tconst newImageWrapperHeight = imageWrapper.offsetHeight*multiplier;\r\n\t\tconst newTop = (parentElement.offsetHeight/2)-(proportionImageToTop*newImageWrapperHeight)\r\n\t\tthis._constrainAndSetPositionOfImageWrapper(newLeft, newTop, this._zoom);\r\n\t\t\tthis._groupedCallbacksSetZoom.doThen();\r\n\t\t}\r\n\t\tcatch(err){\r\n\t\t\tconsole.error(err);\r\n\t\t\tthis._groupedCallbacksSetZoom.catch(err);\r\n\t\t}\r\n\t}\r\n\tget imgUrl(){\r\n\t\treturn this._imgUrl;\r\n\t}\r\n\t_fitToHeight(){\r\n\t\tconst imgAspectRatio = this._getImgAspectRatio();\r\n\t\tconst containerAspectRatio = this._getContainerAspectRatio();\r\n\t\tthis.setZoom(imgAspectRatio/containerAspectRatio);\r\n\t}\r\n\tload(imgUrl, fitToHeight){\r\n\t\tthis._imgUrl = imgUrl;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst spinnerHandle = this._spinnerHandles.take();\r\n\t\t\tconst doReject = (err)=>{ \r\n\t\t\t\tspinnerHandle.dispose(); \r\n\t\t\t\treject(err);\r\n\t\t\t};\r\n\t\t\tthis._clearImage().then(()=>{\r\n\t\t\t\tthis.setState({imageWrapperPosition:[0, 0]});\r\n\t\t\t\tthis._load(imgUrl, fitToHeight).then((res)=>{\r\n\t\t\t\t\tspinnerHandle.dispose(); \r\n\t\t\t\t\tresolve(res);\r\n\t\t\t\t}).catch(doReject);\r\n\t\t\t}).catch(doReject);\r\n\t\t});\r\n\t}\r\n\t_load(imgUrl, fitToHeight){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst imgAlreadyHasUrl=this.state.imgUrl===imgUrl;\r\n\t\t\tthis._zoom = 1;\r\n\t\t\tthis._unmultipliedZoom = 1;\r\n\t\t\tthis._zoomMultiplier = 1;\r\n\t\t\tthis._doneCalculateZoomMultiplier=false;\r\n\t\t\tthis.setState({imgUrl:imgUrl, zoom:1});\r\n\t\t\tconst afterImgLoadIfNecessary =()=>{\r\n\t\t\t\tthis._calculateZoomMultiplier();\r\n\t\t\t\tthis.setState({showImage:true});\r\n\t\t\t\tif(fitToHeight){\r\n\t\t\t\t\tthis._fitToHeight();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.setZoom(1);\r\n\t\t\t\t}\r\n\t\t\t\tresolve();\r\n\t\t\t};\r\n\t\t\tif(imgAlreadyHasUrl){\r\n\t\t\t\tafterImgLoadIfNecessary();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._groupedCallbacksImageLoaded.then(()=>{\r\n\t\t\t\tafterImgLoadIfNecessary();\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_clearImage(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis.setState({imgUrl:'', showImage:false});\r\n\t\t\tsetTimeout(resolve, 0);\r\n\t\t});\r\n\t}\r\n\t_handleDragStart(e, isTouchElseMouse){\r\n\t\tconst parentElement = this._parentElementRef.current;\r\n\t\tconst imageWrapper = this._imageWrapper.current;\r\n\t\tconst startPosition = [imageWrapper.offsetLeft, imageWrapper.offsetTop];\r\n\t\tthis._calculateMaxMinPosition(imageWrapper.offsetWidth, imageWrapper.offsetHeight);\r\n\t\tconst screenZParent = isTouchElseMouse?e.touches[0]:e;\r\n\t\tthis._startOffset = [startPosition[0]-screenZParent.screenX, startPosition[1]-screenZParent.screenY];\r\n\t}\r\n\t_calculateMaxMinPosition(widthImageWrapper, heightImageWrapper){\r\n\t\tconst parentElement = this._parentElementRef.current;\r\n\t\tconst heightParentElement = parentElement.offsetHeight;\r\n\t\tconst widthParentElement = parentElement.offsetWidth;\r\n\t\tlet minY = heightParentElement-heightImageWrapper;\r\n\t\tif(minY>0)\r\n\t\t\tminY=minY/2;\r\n\t\tconst maxY = minY>0?minY:0;\r\n\t\tlet minX = widthParentElement-widthImageWrapper;\r\n\t\tif(minX>0)\r\n\t\t\tminX=minX/2;\r\n\t\tconst maxX=minX>0?minX:0;\r\n\t\tthis._maxPosition=[maxX, maxY];\r\n\t\tthis._minPosition =[minX, minY];\r\n\t}\r\n\t_handleDragMove(e, isTouchElseMouse){\r\n\t\tif(this._doingTwoFingerTouch )return;\r\n\t\tconst screenZParent = isTouchElseMouse?e.touches[0]:e;\r\n\t\tlet newLeft = screenZParent.screenX +this._startOffset[0];\r\n\t\tlet newTop = screenZParent.screenY + this._startOffset[1];\r\n\t\tthis._constrainAndSetPositionOfImageWrapper(newLeft, newTop, this._zoom);\r\n\t}\r\n\t_handleDragEnd(e){\r\n\r\n\t}\r\n\t_handleWindowResize(e){\r\n\t\tif((!this._inner.current)||(!isDisplaying(this._inner.current))){\r\n\t\t\tthis._resizeDue = true;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._resize();\r\n\t}\r\n\tresizeIfNecessary(){\r\n\t\tif((!this._inner.current)||(!isDisplaying(this._inner.current)))return;\r\n\t\tif(this._resizeDue)\r\n\t\t{\r\n\t\t\tthis._resizeDue=false;\r\n\t\t\tthis._resize();\r\n\t\t}\r\n\t}\r\n\t_resize(){\r\n\t\tthis._load(this.state.imgUrl).catch(console.error);\r\n\t}\r\n\tcomponentDidMount() {\r\n\t\tthis._efficientMoveCycle = new EfficientMoveCycle({\r\n\t\t\telement: this._imageWrapper.current,\r\n\t\t\tpreventDefault:true,\r\n onStart: this._handleDragStart,\r\n onMove: this._handleDragMove,\r\n onEnd:this._handleDragEnd\r\n\t\t});\r\n\t\tthis._twoFingerTouch = new TwoFingerTouch({\r\n\t\t\telement: this._imageWrapper.current,\r\n onMoveFinger1: this._onMoveFinger1,\r\n onMoveFinger2: this._onMoveFinger2,\r\n\t\t\tonStart:this._onTwoFingerStart,\r\n\t\t\tonEnd:this._onTwoFingerEnd\r\n\t\t});\r\n\t\tthis._imageWrapper.current.addEventListener('wheel', this._handleMouseWheelZoom);\r\n\t\twindow.addEventListener('resize', this._handleWindowResize);\r\n\t\tFullScreen.addEventListener('change', this._handleWindowResize);\r\n\t}\r\n\t_handleMouseWheelZoom(e){\r\n\t\te.preventDefault();\r\n\t\tconst deltaY = e.deltaY;\r\n\t\tconst newZoom = this._unmultipliedZoom-(deltaY*0.0016);\r\n\t\tthis._constrainAndSetZoom(newZoom);\r\n\t\treturn false;\r\n\t}\r\n\t_onTwoFingerStart(e){\r\n\t\tthis._finger1Point = [e.touch1.clientX, e.touch1.clientY];\r\n\t\tthis._finger2Point = [e.touch2.clientX, e.touch2.clientY];\r\n\t\tthis._startDistanceTwoFingerTouch = this._calculateDistanceBetweenPoints(this._finger1Point, this._finger2Point );\r\n\t\tthis._initialUnmultipliedZoomOnStartOfTwoFingerTouch = this._unmultipliedZoom;\r\n\t\tthis._doingTwoFingerTouch=true;\r\n\t}\r\n\t_onMoveFinger1(touch, e){\r\n\t\tif(!this._doingTwoFingerTouch )return;\r\n\t\tthis._finger1Point = [touch.clientX, touch.clientY];\r\n\t\tthis._updateZoomFromTwoFingerTouch();\r\n\t}\r\n\t_onMoveFinger2(touch, e){\r\n\t\tif(!this._doingTwoFingerTouch )return;\r\n\t\tthis._finger2Point = [touch.clientX, touch.clientY];\r\n\t\tthis._updateZoomFromTwoFingerTouch();\r\n\t}\r\n\t_onTwoFingerEnd(){\r\n\t\tif(this._doingTwoFingerTouch)\r\n\t\t\tthis._updateZoomFromTwoFingerTouch();\r\n\t\tthis._doingTwoFingerTouch=false;\r\n\t}\r\n\t_updateZoomFromTwoFingerTouch(){\r\n\t\tthis._frequencyLimitedCallbackZoom.trigger(()=>{\r\n\t\t\tconst newDistance = this._calculateDistanceBetweenPoints(this._finger1Point, this._finger2Point );\r\n\t\t\tlet newUnmultipliedZoom = this._initialUnmultipliedZoomOnStartOfTwoFingerTouch*newDistance/this._startDistanceTwoFingerTouch;\r\n\t\t\tthis._constrainAndSetZoom(newUnmultipliedZoom);\r\n\t\t});\r\n\t}\r\n\t_constrainAndSetZoom(zoom){\r\n\t\tif(zoom>this._zoomMax)zoom=this._zoomMax;\r\n\t\tif(zoommaxX)\r\n\t\t\tnewLeft =maxX;\r\n\t\telse\r\n\t\t\tif(newLeftmaxY)\r\n\t\t\tnewTop = maxY;\r\n\t\telse\r\n\t\t\tif(newTop\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\t{this.props.children}\r\n\t\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
)\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './DirectionalButtons.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faCaretRight, faCaretLeft, faCaretUp, faCaretDown} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport HashSource from '../core/HashSource';\r\nimport Urls from '../urls/Urls';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class DirectionalButtons extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {onClickLeft, onClickUp, onClickRight, onClickDown} = props;\r\n\t\tthis._onClickLeft = onClickLeft;\r\n\t\tthis._onClickRight = onClickRight;\r\n\t\tthis._onClickUp = onClickUp;\r\n\t\tthis._onClickDown = onClickDown;\r\n\t\tthis.state = {visible:true, disabled:false};\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"directional-buttons\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+= \" visible\"\r\n\t\tconst arr = [];\r\n\t\tif(this._onClickLeft)\r\n\t\t\tarr.push(());\r\n\t\tif(this._onClickUp)\r\n\t\t\tarr.push(());\r\n\t\tif(this._onClickRight)\r\n\t\t\tarr.push(());\r\n\t\tif(this._onClickDown)\r\n\t\t\tarr.push(());\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{arr}\r\n\t\t\t
\r\n\t\t)\r\n\t}\r\n}","export default class Timer{\r\n\tconstructor(props){\r\n\t\tlet {delay, callback, nTicks}=props;\r\n\t\tif (nTicks == undefined)\r\n\t\t{\r\n\t\t\tnTicks = -1;\r\n\t\t}\r\n\t\tif (delay == undefined)\r\n\t\t{\r\n\t\t\tdelay = 1000;\r\n\t\t}\r\n\t\tthis._nTicksCount = 0;\r\n\t\tthis._delay = delay;\r\n\t\tthis._callback = callback;\r\n\t\tthis._nTicks = nTicks;\r\n\t\tthis._interval = null;\r\n\t\tthis._isRunning=false;\r\n\t\tthis._tick= this._tick.bind(this);\r\n\t\tthis.stop= this.stop.bind(this);\r\n\t\tthis.reset= this.reset.bind(this);\r\n\t\tthis.start= this.start.bind(this);\r\n\t\tthis.setDelay= this.setDelay.bind(this);\r\n\t\tthis.isRunning= this.isRunning.bind(this);\r\n\t\tthis._setInterval= this._setInterval.bind(this);\r\n\t\tthis._cancelInterval= this._cancelInterval.bind(this);\r\n\t}\r\n\t_tick(){\r\n\t\tif (this._nTicks >= 0)\r\n\t\t{\r\n\t\t\tthis._nTicksCount++;\r\n\t\t\tif (this._nTicksCount >= this._nTicks)\r\n\t\t\t\tthis.stop();\r\n\t\t}\r\n\t\tthis._callback();\r\n\t}\r\n\tstop(){\r\n\t\tthis._cancelInterval();\r\n\t}\r\n\treset(keepRunning)\r\n\t{\r\n\t\tthis._nTicksCount = 0;\r\n\t\tif(keepRunning)\r\n\t\t{\r\n\t\t\tif(!this._isRunning)return;\r\n\t\t\tclearInterval(this._interval);\r\n\t\t\tthis._interval = setInterval(this._tick, this._delay);\r\n\t\t}else{\r\n\t\t\tthis._cancelInterval();\r\n\t\t}\r\n\t\t\t\t\r\n\t}\r\n\tstart(){\r\n\t\tif(this._isRunning)return;\r\n\t\tthis._setInterval();\r\n\t};\r\n\tsetDelay(value){\r\n\t\tthis.reset();\r\n\t\tthis._delay = value;\r\n\t\tthis._setInterval();\r\n\t};\r\n\tisRunning(){\r\n\t\treturn this._isRunning;\r\n\t}\r\n\t_setInterval()\r\n\t{\r\n\t\tthis._isRunning=true;\r\n\t\tthis._interval = setInterval(this._tick, this._delay);\r\n\t}\r\n\t_cancelInterval()\r\n\t{\r\n\t\tthis._isRunning=false;\r\n\t\tif (!this._interval)return;\r\n\t\tclearInterval(this._interval);\r\n\t\tthis._interval=null;\r\n\t}\r\n}","import Timer from './Timer';\r\nexport default class TemporalCallback{\r\n\tconstructor({callback, maxNTriggers, maxTotalDelay, delay}){\r\n\t\tthis._callback = callback;\r\n\t\tthis._maxNTriggers = maxNTriggers;\r\n\t\tthis._maxTotalDelay = maxTotalDelay;\r\n\t\tthis._delay = delay;\r\n\t\t\r\n\t\tthis.trigger = this.trigger.bind(this);\r\n\t\tthis._tick = this._tick.bind(this);\r\n\t\t\r\n\t\tthis._timerDelay = new Timer({callback:this._tick, delay:delay, nTicks:1});\r\n\t\tif(maxTotalDelay!==undefined&&maxTotalDelay!==null)\r\n\t\t\tthis._timerMaxDelay = new Timer({callback:this._tick, delay:maxTotalDelay, nTicks:1});\r\n\t\tthis._nTriggers=0;\r\n\t}\r\n\ttrigger(){\r\n\t\tthis._nTriggers++;\r\n\t\tif(!this._timerDelay.isRunning()){\r\n\t\t\tthis._timerDelay.start();\r\n\t\t\tthis._timerMaxDelay&&this._timerMaxDelay.start();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(this._maxNTriggers&&this._nTriggers>this._maxNTriggers){\r\n\t\t\tthis._tick();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._timerDelay.reset(true);\r\n\t}\r\n\t_tick(){\r\n\t\tthis._nTriggers++;\r\n\t\tthis._timerDelay.reset();\r\n\t\tthis._timerMaxDelay&&this._timerMaxDelay.reset();\r\n\t\tthis._nTriggers=0;\r\n\t\tthis._callback();\r\n\t}\r\n}","\r\nimport eventEnable from '../core/eventEnable';\r\nimport Timer from '../core/Timer';\r\nimport TemporalCallback from '../core/TemporalCallback';\r\nexport default class ResizeWatcher{\r\n\tconstructor({element, onResized, onFirstResize, staggered}){\r\n\t\teventEnable(this);\r\n\t\tstaggered=false;\r\n\t\tthis._element = element;\r\n\t\tthis._onResized= onResized;\r\n\t\tthis._onFirstResize= onFirstResize;\r\n\t\t\r\n\t\tthis.manual= this.manual.bind(this);\r\n\t\tthis.disposed= this.disposed.bind(this);\r\n\t\tthis._resizedCallbackNotInitial= this._resizedCallbackNotInitial.bind(this);\r\n\t\tthis._logSize= this._logSize.bind(this);\r\n\t\tthis._scheduleResize= this._scheduleResize.bind(this);\r\n\t\tthis._finishedResizing= this._finishedResizing.bind(this);\r\n\t\tthis._resized= this._resized.bind(this);\r\n\t\tthis._doStartIfRequired= this._doStartIfRequired.bind(this);\r\n\t\tthis.__resized= this.__resized.bind(this);\r\n\t\tthis._dispatchResized= this._dispatchResized.bind(this);\r\n\t\t\r\n\t\tthis._temporalCallback = staggered?new TemporalCallback({callback:this.__resized, delay:500, maxTotalDelay:800}):undefined;\r\n\t\tthis._timerFinishedResizing = new Timer({nTicks:1, delay:900, callback:this._finishedResizing});\r\n\t\tthis._startedResizing = false;\r\n\t\tthis._loggedSize=null;\r\n\t\tthis._resizeObserver= null;\r\n\t\tthis._hasResizeObserver=window['ResizeObserver']?true:false;\r\n\t\tthis._resizedCallback=staggered?this._scheduleResize: this._resized;\r\n\t\tif(this._hasResizeObserver)\r\n\t\t{\r\n\t\t\tthis._resizeObserver = new (window['ResizeObserver'])(this._resizedCallbackNotInitial);\r\n\t\t\tthis._resizeObserver['observe'](this._element);\r\n\t\t}\r\n\t\telse\r\n\t\t\twindow.addEventListener(\"resize\", this._resizedCallback);\r\n\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._resizedCallbackForNotInitial=this._resizedCallback;\r\n\t\t\t}\r\n\t\t,0);\r\n\t\t\r\n\t}\r\n\tmanual(){\r\n\t\tthis._resized();\r\n\t}\r\n\tdisposed(){\r\n\t\tif(!this._hasResizeObserver)\r\n\t\t\twindow.removeEventListener(\"resize\", this._resizedCallback);\r\n\t\telse\r\n\t\t\tthis._resizeObserver['disconnect']();\r\n\t}\r\n\t_resizedCallbackNotInitial(){\r\n\t\tthis._resizedCallbackForNotInitial&&this._resizedCallbackForNotInitial();\r\n\t}\r\n\t_logSize(){this._loggedSize= this._element['getBoundingClientRect']();}\r\n\t_scheduleResize(){\r\n\t\tthis._temporalCallback.trigger();\r\n\t\tthis._doStartIfRequired();\r\n\t}\r\n\t_finishedResizing(){\r\n\t\tthis._startedResizing=false;\r\n\t}\r\n\t_resized(params){\r\n\t\tthis._doStartIfRequired();\r\n\t\tthis.__resized();\r\n\t}\r\n\t_doStartIfRequired(){\r\n\t\tif(!this._startedResizing){\r\n\t\t\tthis._onFirstResize&&this._onFirstResize();\r\n\t\t\tthis._timerFinishedResizing.start();\r\n\t\t\tthis._startedResizing = true;\r\n\t\t}else{\r\n\t\t\tthis._timerFinishedResizing.reset(true);\r\n\t\t}\r\n\t}\r\n\t__resized(params){\r\n\t\tif(!this._loggedSize){this._logSize(); return;}\r\n\t\tvar previousLoggedSize= this._loggedSize;\r\n\t\tthis._logSize();\r\n\t\tif(previousLoggedSize['height']==this._loggedSize['height']&&previousLoggedSize['width']==this._loggedSize['width'])return;\r\n\t\tthis._dispatchResized();\r\n\t}\r\n\t_dispatchResized(){\r\n\t\tthis.dispatchEvent({type:'resized'});\r\n\t\tthis._onResized&&this._onResized();\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './BirdsEyeView.css';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport UnitMarker from './UnitMarker';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Dialog from './Dialog';\r\nimport ZoomableDragable from './ZoomableDragable';\r\nimport DirectionalButtons from './DirectionalButtons';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport Once from '../core/Once';\r\nimport FrequencyLimitedCallback from '../core/FrequencyLimitedCallback';\r\nimport Urls from '../urls/Urls';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport HashSource from '../core/HashSource';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class BirdsEyeView extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {showPlotMoreInformation, updateExternalZoomSource, favouritesRef, zoomMax, zoomMin,\r\n\t\t addFavourite, removeFavourite, showOutside360, enterHouse, showBrochureGenerationDialog,\r\n\t\t plotMenuRef, showPlotDetailedInformation, getConfiguration}= props;\r\n\t\t this._getConfiguration = getConfiguration;\r\n\t\tif(!showPlotMoreInformation)throwNotProvided('showPlotMoreInformation');\r\n\t\tif(!updateExternalZoomSource)throwNotProvided('updateExternalZoomSource');\r\n\t\tif(!updateExternalZoomSource)throwNotProvided('updateExternalZoomSource');\r\n\t\tif(!favouritesRef)throwNotProvided('favouritesRef');\r\n\t\tif(zoomMax===undefined||zoomMax===null)throwNotProvided('zoomMax');\r\n\t\tif(zoomMin===undefined||zoomMin===null)throwNotProvided('zoomMin');\r\n\t\tthis._zoomMin = zoomMin;\r\n\t\tthis._zoomMax = zoomMax;\r\n\t\tthis._favouritesRef=favouritesRef;\r\n\t\tthis._showPlotDetailedInformation= showPlotDetailedInformation;\r\n\t\tthis._updateExternalZoomSource=updateExternalZoomSource;\r\n\t\tthis._callbackShowPlotMoreInformation = showPlotMoreInformation;\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackShowOutside360=showOutside360;\r\n\t\tthis._callbackEnterHouse = enterHouse;\r\n\t\tthis._callbackShowBrochureGenerationDialog = showBrochureGenerationDialog;\r\n\t\tthis.state ={siteJson:null};\r\n\t\tthis.setVisible= this.setVisible.bind(this);\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._plotMenuRef = plotMenuRef;\r\n\t\tthis._zoomableDragableRef=React.createRef();\r\n\t\tthis._markersRef=React.createRef();\r\n\t\tthis._dragDropMarkerRef=React.createRef();\r\n\t\tthis._createMarkers = this._createMarkers.bind(this);\r\n\t\tthis._clear= this._clear.bind(this);\r\n\t\tthis._clearPlotMarkers = this._clearPlotMarkers.bind(this);\r\n\t\tthis._handleClickPlotMarker = this._handleClickPlotMarker.bind(this);\r\n\t\tthis._setMarkersVisible = this._setMarkersVisible.bind(this);\r\n\t\tthis._handleHoverPlotMarker = this._handleHoverPlotMarker.bind(this);\r\n\t\tthis._handleShowPlotMoreInformation = this._handleShowPlotMoreInformation.bind(this);\r\n\t\tthis.resize = this.resize.bind(this);\r\n\t\tthis._handleClickLeft = this._handleClickLeft.bind(this);\r\n\t\tthis._handleClickRight = this._handleClickRight.bind(this);\r\n\t\tthis._handleEnterHouse = this._handleEnterHouse.bind(this);\r\n\t\tthis._showPlotMenu = this._showPlotMenu.bind(this);\r\n\t\tthis._handleShowBrochureGenerationDialog= this._handleShowBrochureGenerationDialog.bind(this);\r\n\t\tthis._getShouldFitToHeight= this._getShouldFitToHeight.bind(this);\r\n\t\tthis._getAspectRatio= this._getAspectRatio.bind(this);\r\n\t\tthis._getNearestSiteJsonOutside360 = this._getNearestSiteJsonOutside360.bind(this);\r\n\t\tthis._setDragDropMarkerPosition= this._setDragDropMarkerPosition.bind(this);\r\n\t\tthis.getMarkerPositionForPlotNumber= this.getMarkerPositionForPlotNumber.bind(this);\r\n\t\tthis._initializeNearestOutside360PixelMappingsIfNecessary= this._initializeNearestOutside360PixelMappingsIfNecessary.bind(this);\r\n\t\tthis._isDesktopAndShouldShowPlotDetailedInformationInstead= this._isDesktopAndShouldShowPlotDetailedInformationInstead.bind(this);\r\n\t\tthis._frequencyLimitedCallbackGetNearestSiteJsonOutside360= new FrequencyLimitedCallback({frequencyHz:6});\r\n\t\tthis._fittedToHeight = false;\r\n\t\tthis._zoomedOutOnFirstFilterAfterFittingToHeight = false;\r\n\t\tthis._currentIndex=null;\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis._load = this._load.bind(this);\r\n\t\tthis.setZoom= this.setZoom.bind(this);\t\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tthis._birdsEyeViewIndex = configuration.defaultAerialIndex!==undefined?\r\n\t\t\tconfiguration.defaultAerialIndex:0;\r\n\t\tthis._currentSiteJsonBirdsEyeViewsBirdsEyeView = null;\r\n\t\tthis._nearestOutside360UniqueId = null;\r\n\t\tthis._showPlotMenuOnce = new Once(this._showPlotMenu);\r\n\t\tthis.state={unitMarkers:[], visible:true, showPlotMarkers:false};\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis._resizeWatcherParentElement = new ResizeWatcher({element:this._element.current});\r\n\t\tthis._resizeWatcherParentElement.addEventListener('resized', this.resize);\r\n\t}\r\n\t\r\n\tsetVisible(value){\r\n\t\tthis.setState({visible:value});\r\n\t\tif(value){\r\n\t\t\tthis.resize();\r\n\t\t}\r\n\t}\r\n\tresize(){\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\tthis._zoomableDragableRef.current?._resize();\r\n\t\t\t}, 0);\r\n\t}\r\n\tsetZoom(value){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._zoomableDragableRef.current.setZoom(value).then(resolve).catch(reject);\r\n\t\t});\r\n\t}\t\r\n\tload(params){\r\n\t\tconst self = this;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst {siteJson, unitsArray, showPlotMarkers, filtered}=params;\r\n\t\t\tconsole.log('called load with unitsArray ');\r\n\t\t\tconsole.log(unitsArray);\r\n\t\t\tif(siteJson===undefined||siteJson===null)throwNotProvided('siteJson');\r\n\t\t\tthis.setState({showPlotMarkers:showPlotMarkers||showPlotMarkers===undefined||showPlotMarkers===null});\r\n\t\t\tthis._siteJson = siteJson;\r\n\t\t\tthis._unitsArray = unitsArray; \r\n\t\t\tlet zoomOut = false;\r\n\t\t\tif(filtered){\r\n\t\t\t\tif(!this._zoomedOutOnFirstFilterAfterFittingToHeight &&this._fittedToHeight){\r\n\t\t\t\t\tthis._zoomedOutOnFirstFilterAfterFittingToHeight =true;\r\n\t\t\t\t\tzoomOut = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis._load(zoomOut).then(resolve).catch(reject);\r\n\t\t});\r\n\t}\r\n\tgetMarkerPositionForPlotNumber(plotNumber){\r\n\t\tlet markerPosition = this._siteJson.units.getPlotByNumber(plotNumber)?.unit.getBirdsEyeViewMarkerPositionForBirdsEyeViewWithIndex(this._currentIndex);\r\n\t\tconst positionAsPercentages = markerPosition?[markerPosition.x, markerPosition.y]:[50,50];\r\n\t\tconst element = this._markersRef.current;\r\n\t\tconst elementAbsolutePosition = getAbsolute(element);\r\n\t\tconst absolutePositionArray = [(positionAsPercentages[0]*element.offsetWidth/100)+elementAbsolutePosition.left, (positionAsPercentages[1]*element.offsetHeight/100)+elementAbsolutePosition.top];\r\n\t\treturn absolutePositionArray;\r\n\t}\r\n\t_load(zoomOut){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._cancelCurrentLoadOperation&&this._cancelCurrentLoadOperation();\r\n\t\t\tlet cancelled = false;\r\n\t\t\tthis._cancelCurrentLoadOperation =()=>{cancelled = true;};\r\n\t\t\tconst birdsEyeViews = this._siteJson.birdsEyeViews.getArray();\r\n\t\t\tif(this._birdsEyeViewIndex<0)this._birdsEyeViewIndex+=birdsEyeViews.length;\r\n\t\t\tthis._birdsEyeViewIndex = this._birdsEyeViewIndex%birdsEyeViews.length;\r\n\t\t\tconst siteJsonBirdsEyeViewsBirdsEyeView = birdsEyeViews[this._birdsEyeViewIndex];\r\n\t\t\tif(siteJsonBirdsEyeViewsBirdsEyeView===undefined||siteJsonBirdsEyeViewsBirdsEyeView===null)throwNotProvided('siteJsonBirdsEyeViewsBirdsEyeView');\r\n\t\t\tthis._currentSiteJsonBirdsEyeViewsBirdsEyeView = siteJsonBirdsEyeViewsBirdsEyeView;\r\n\t\t\tconst relativePath = siteJsonBirdsEyeViewsBirdsEyeView.imageRelativePath;\r\n\t\t\tthis._currentIndex = siteJsonBirdsEyeViewsBirdsEyeView.index;\r\n\t\t\tconst imgUrl =UrlHelper.makeSureSlashOnEnd(Urls.getAssetsForSite(this._getConfiguration().siteSlug))+\r\n\t\t\t\tUrlHelper.removeStartSlash(relativePath);\r\n\t\t\tthis._clear();\r\n\t\t\tconst afterLoadImg = ()=>{\r\n\t\t\t\tif(cancelled){\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif(!this._createdMarkers)\r\n\t\t\t\t\tthis._createMarkers(this._siteJson, this._unitsArray, siteJsonBirdsEyeViewsBirdsEyeView.index);\r\n\t\t\t\tthis._setMarkersVisible(this._unitsArray);\r\n\t\t\t\tthis._cancelCurrentLoadOperation=null;\r\n\t\t\t\tif(zoomOut){\r\n\t\t\t\t\tthis.setZoom(1);\r\n\t\t\t\t}\r\n\t\t\t\tthis._initializeNearestOutside360PixelMappingsIfNecessary().then(resolve).catch(reject);\r\n\t\t\t};\r\n\t\t\tconst zoomableDragable = this._zoomableDragableRef.current;\r\n\t\t\tif(zoomableDragable.imgUrl ===imgUrl){\r\n\t\t\t\tafterLoadImg();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst fitToHeight = this._getShouldFitToHeight();\r\n\t\t\tthis._fittedToHeight = fitToHeight;\r\n\t\t\tzoomableDragable.load(imgUrl, fitToHeight).then(afterLoadImg).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_initializeNearestOutside360PixelMappingsIfNecessary(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst nearestOutside360PixelMappings = this._currentSiteJsonBirdsEyeViewsBirdsEyeView?.nearestOutside360PixelMappings;\r\n\t\t\tif((!nearestOutside360PixelMappings)||nearestOutside360PixelMappings.initialized){\r\n\t\t\t\tresolve();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tnearestOutside360PixelMappings.initialize().then(resolve).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_getShouldFitToHeight(){\r\n\t\treturn (this._getAspectRatio()<0.9)||(this._element.current.offsetHeight<400);\r\n\t}\r\n\t_handleEnterHouse (plot){\r\n\t\tthis._callbackEnterHouse(plot);\r\n\t}\r\n\t_handleShowPlotMoreInformation(plot, plotMoreInformationType){\r\n\t\tthis._callbackShowPlotMoreInformation(plot, plotMoreInformationType);\r\n\t\tthis._plotMenuRef.current.hide();\r\n\t}\r\n\t_setMarkersVisible(){\r\n\t\tconst unitMarkers = this.state.unitMarkers;\r\n\t\tunitMarkers.forEach(unitMarker=>unitMarker.ref.current.filteredOut\r\n\t\t=this._unitsArray.indexOf(unitMarker.ref.current.unit)<0);\r\n\t}\r\n\t_clear(){\r\n\t\tthis._clearPlotMarkers();\r\n\t}\r\n\t_clearPlotMarkers(){\r\n\t\tthis.setState({unitMarkers:[]});\r\n\t\tthis._createdMarkers = false;\r\n\t}\r\n\t_getAspectRatio(){\r\n\t\tconst element = this._element.current;\r\n\t\tif(element===undefined||element=== null)return null;\r\n\t\treturn element.offsetWidth/element.offsetHeight;\r\n\t}\r\n\t_handleClickPlotMarker(e){\r\n\t\tthis._showPlotMenuOnce.trigger(e);\r\n\t}\r\n\t_handleHoverPlotMarker(e){\r\n\t\tif(!e.hovering)return;\r\n\t\tif(this._isDesktopAndShouldShowPlotDetailedInformationInstead()){\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t\tthis._showPlotMenuOnce.trigger(e);\r\n\t}\r\n\t_isDesktopAndShouldShowPlotDetailedInformationInstead(){\r\n\t\treturn !window.isMobile &&this._getConfiguration().showPlotDetailedInformationOnDesktopClickInsteadOfHover;\r\n\t}\r\n\t_showPlotMenu(e){\r\n\t\tconst marker = e.marker;\r\n\t\tif(this._isDesktopAndShouldShowPlotDetailedInformationInstead()){\r\n\t\t\tconst plot = marker.unit.plots[0];\r\n\t\t\tthis._showPlotDetailedInformation(plot);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._plotMenuRef.current.show({position:e.markerPosition, getMouseInSourceBounds:marker.getMouseInBounds, \r\n\t\t\tsiteJson:this._siteJson, unit:marker.unit, plot:marker.unit.plots[0] }).catch(console.error);\r\n\t}\r\n\t_createMarkers(siteJson, unitsArray, index){\r\n\t\tconst unitMarkers = this.state.unitMarkers;\r\n\t\tfor(var i=0; i);\r\n\t\t\tunitMarkers.push(unitMarker);\r\n\t\t}\r\n\t\tthis._createdMarkers=true;\r\n\t\tthis.setState({unitMarkers:unitMarkers});\r\n\t}\r\n\t_handleClickLeft(){\r\n\t\tthis._birdsEyeViewIndex--;\r\n\t\tthis._load().catch(console.error);\r\n\t}\r\n\t_handleClickRight(){\r\n\t\tthis._birdsEyeViewIndex++;\r\n\t\tthis._load().catch(console.error);\r\n\t}\r\n\t_handleShowBrochureGenerationDialog(params){\r\n\t\tthis._callbackShowBrochureGenerationDialog(params);\r\n\t}\r\n\tonDrop(params){\r\n\t\tthis._setDragDropMarkerPosition(null);\r\n\t\tthis._callbackShowOutside360({outside360UniqueId:this._nearestOutside360UniqueId});\r\n\t}\r\n\tonDragging(params){\r\n\t\tthis._frequencyLimitedCallbackGetNearestSiteJsonOutside360.trigger(()=>{\r\n\t\t\tconst siteJsonOutside360 = this._getNearestSiteJsonOutside360(params.x, params.y);\r\n\t\t});\r\n\t}\r\n\t_setDragDropMarkerPosition(markerPosition){\r\n\t\tconst dragDropMarkerElement = this._dragDropMarkerRef.current;\r\n\t\tif(!markerPosition){\r\n\t\t\tdragDropMarkerElement.style.display=`none`;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tdragDropMarkerElement.style.left=`${markerPosition.x*100}%`;\r\n\t\tdragDropMarkerElement.style.top=`${markerPosition.y*100}%`;\r\n\t\tdragDropMarkerElement.style.display=`block`;\r\n\t}\r\n\t_getNearestSiteJsonOutside360(x, y){\r\n\t\tconst nearestOutside360PixelMappings = this._currentSiteJsonBirdsEyeViewsBirdsEyeView?.nearestOutside360PixelMappings;\r\n\t\tif((!nearestOutside360PixelMappings)||(!nearestOutside360PixelMappings.initialized)){\r\n\t\t\tthis._nearestOutside360UniqueId=null;\r\n\t\t\treturn null;\r\n\t\t}\r\n\t\tconst unitMarkers = this._markersRef.current;\r\n\t\tif(!unitMarkers){\r\n\t\t\tthis._nearestOutside360UniqueId=null;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst unitMarkersAbsolutePosition = getAbsolute(this._markersRef.current);\r\n\t\tx = x - unitMarkersAbsolutePosition.left;\r\n\t\ty = y-unitMarkersAbsolutePosition.top;\r\n\t\tconst xProportion = x/unitMarkers.offsetWidth;\r\n\t\tconst yProportion = y/unitMarkers.offsetHeight;\r\n\t\tthis._nearestOutside360UniqueId = nearestOutside360PixelMappings.getValueFromProportions(xProportion, yProportion);\r\n\t\tconst markerPosition = this._currentSiteJsonBirdsEyeViewsBirdsEyeView.getMarkerPositionForOutside360(this._nearestOutside360UniqueId);\r\n\t\tthis._setDragDropMarkerPosition(markerPosition);\r\n\t}\r\n\trender() {\r\n\t\tlet innerClassName = \"inner\";\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tconst birdsEyeViewMarkers = this._siteJson?.birdsEyeViews.getArray();\r\n\t\tconst hasMoreThanOneBirdsEyeView = birdsEyeViewMarkers!==undefined&&birdsEyeViewMarkers!==null&&(birdsEyeViewMarkers.length>1);\r\n\t\tconsole.log('hasMoreThanOneBirdsEyeView '+hasMoreThanOneBirdsEyeView);\r\n\t\tconst className = \"birds-eye-view \"+(this.state.visible?'visible ':'')+\r\n\t\t\t(this.state.showPlotMarkers?'show-unit-markers ':'')\r\n\t\t\t+(configuration.showFadedFilteredOutPlots?'show-filtered-out-plots':'hide-filtered-out-plots');\r\n\t\treturn (
\r\n\t\t\t\t{hasMoreThanOneBirdsEyeView?():null}\r\n\t\t\t\t
\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t{this.state.unitMarkers}\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
)\r\n\t}\r\n}\r\n","const MenuType={\r\n\tMENU_BAR:'menuBar', MAIN_MENU:'mainMenu', FILTERS:'filters',\r\n\tAVAILABLE_PRICES_FILTER:'availablePricesFilter', STATUS_FILTER:'statusFilter',\r\n\tBEDROOMS_FILTER:'bedroomsFilter', HOUSE_TYPE_FILTER:'houseTypeFilter', PLOT_SEARCH:'plotSearch',\r\n\tSITE_PICKER:'sitePicker', PLOT_MORE_INFORMATION:'plotMoreInformation',\r\n\tBROCHURE_GENERATION:'brochureGeneration', FAVOURITES:'favourites', IMAGE_VIEWER:'imageViewer',\r\n\tPRIVACY_POLICY:'privacyPolicy', BROCHURES:'brochures',\r\n\tPLOT_DETAILED_INFORMATION:'plotDetailedInformation',\r\n\tFEATURES_FILTER:'featuresFilter'\r\n};\r\nexport default MenuType;","import React, { Component } from 'react';\r\nimport './UnitMarkerKey.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport HashSource from '../core/HashSource';\r\nconst{throwNotProvided} = ParameterErrors;\r\nexport default class UnitMarkerKey extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {hasKeyHeading}=props;\r\n\t\tthis._hasKeyHeading = hasKeyHeading;\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.state ={plotsArray:null};\r\n\t}\r\n\tload({siteJson}){\r\n\t\tthis.setState({plotsArray:siteJson.units.getPlotsArray()});\r\n\t}\r\n\trender() {\r\n\t\tconst plotStatusesForPlots = [];\r\n\t\tconst plotsArray = this.state.plotsArray;\r\n\t\tif(plotsArray){\r\n\t\t\tplotsArray.forEach(plot=>{\r\n\t\t\t\tif(plotStatusesForPlots.indexOf(plot.status)<0)\r\n\t\t\t\t\tplotStatusesForPlots.push(plot.status);\r\n\t\t\t});\r\n\t\t}\r\n\t\tplotStatusesForPlots.sort((firstPlotStatus, secondPlotStatus)=>{\r\n\t\t\tconst firstPlotStatusDescription = PlotStatus.getDescription(firstPlotStatus);\r\n\t\t\tconst secondPlotStatusDescription=PlotStatus.getDescription(secondPlotStatus);\r\n\t\t\tif(firstPlotStatusDescription===secondPlotStatusDescription)return 0;\r\n\t\t\treturn firstPlotStatusDescription>secondPlotStatusDescription?1:-1;\r\n\t\t});\r\n\t\tconst entries = plotStatusesForPlots.map((plotStatus)=>
  • \r\n\t\t\t{PlotStatus.getDescription(plotStatus)}
  • );\r\n\t\tconst heading = this._hasKeyHeading?'Key':null;\r\n\t\tconst className = \"unit-marker-key\"+(this._hasKeyHeading?' has-key-heading':'');\r\n\t\treturn (
    {heading}
      \r\n\t\t{entries}\r\n\t\t
    )\r\n\t}\r\n}\r\n","export default class ClickedOffHandle{\r\n\tconstructor(element, callbackHide, callbackDispose){\r\n\t\tthis._additionalElements =[];\r\n\t\tthis._disposed = false;\r\n\t\tthis._callbackHide = callbackHide;\r\n\t\tthis._element=element;\r\n\t\tthis._callbackDispose = callbackDispose;\r\n\t\tthis.addAdditionalElement = this.addAdditionalElement.bind(this);\r\n\t\tthis.removeAdditionalElement = this.removeAdditionalElement.bind(this);\r\n\t\tthis.getElements = this.getElements.bind(this);\r\n\t\tthis.getElement = this.getElement.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t}\r\n\taddAdditionalElement(additionalElement){\r\n\t\tif(this._additionalElements.indexOf(additionalElement)<0)\r\n\t\t\tthis._additionalElements.push(additionalElement);\r\n\t}\r\n\tremoveAdditionalElement(element){\r\n\t\tvar index = this._additionalElements.indexOf(element);\r\n\t\tif(index<0)return;\r\n\t\tthis._additionalElements.splice(index, 1);\r\n\t}\r\n\tgetElements(){\r\n\t\tvar elements = [this._element];\r\n\t\treturn elements.concat(this._additionalElements);\r\n\t}\r\n\tgetElement(){\r\n\t\treturn this._element;\r\n\t}\r\n\tgetDisposed(){\r\n\t\treturn this._disposed;\r\n\t}\r\n\thide(){\r\n\t\tif(this._disposed)return;\r\n\t\tthis._disposed = true;\r\n\t\tthis._callbackDispose(this);\r\n\t\tthis._callbackHide();\r\n\t}\r\n\tdispose(){\r\n\t\tif(this._disposed)return;\r\n\t\tthis._disposed = true;\r\n\t\tthis._callbackDispose(this);\r\n\t}\r\n}","import ClickedOffHandle from './ClickedOffHandle';\r\nimport getAbsolute from './getAbsolute';\r\nimport EventNormalizer from '../core/EventNormalizer';\r\nimport Once from '../core/Once';\r\nexport default class ClickedOff {\r\n\tconstructor(props){\r\n\t\tthis._clicked = this._clicked.bind(this);\r\n\t\tthis._onceClicked = new Once(this._clicked);\r\n\t}\r\n static register (element, callbackHide) {\r\n\t\tvar handle = new ClickedOffHandle(element, callbackHide, ClickedOff._dispose);\r\n\t\tsetTimeout(function () {\r\n\t\t\tif (!ClickedOff._containsElement(element)) {\r\n\t\t\t\tif(handle.getDisposed())return;\r\n\t\t\t\tClickedOff._handles.push(handle);\r\n\t\t\t}\r\n\t\t},0);\r\n return handle;\r\n };\r\n\tstatic remove(element){\r\n\t\tconst handles = ClickedOff._handles;\r\n\t\tvar i=0;\r\n\t\twhile(i xRight || y < yTop || y > yBottom)) {\r\n\t\t\t\t\twithinOne=true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif(!withinOne)\r\n\t\t\t\thandle.hide();\r\n }\r\n\t}\r\n static _containsElement(element) {\r\n for (var i = 0, handle; handle = ClickedOff._handles[i]; i++) {\r\n if (handle.getElement() == element){\r\n return true;\r\n\t\t\t}\r\n }\r\n return false;\r\n }\r\n\r\n}\r\nClickedOff._onceClicked = new Once(ClickedOff._clicked);\r\nClickedOff._handles=[];\r\ndocument.addEventListener('mousedown', EventNormalizer.addFriendlyXYToMouse_LexicalClosure(ClickedOff._clickedDocument));\r\ndocument.addEventListener('touchstart', EventNormalizer.addFriendlyXYToTouch_LexicalClosure(ClickedOff._touchedDocument));","import ClickedOff from './ClickedOff';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class ClickedOffManager{\r\n\tconstructor(props){\r\n\t\tconst {elementRef, element, hide}=props;\r\n\t\tif((!elementRef)&&(!element))throwNotProvided('elementRef and element');\r\n\t\tif(!hide)throwNotProvided('hide');\r\n\t\tthis._elementRef = elementRef;\r\n\t\tthis._element = element;\r\n\t\tthis._hide = hide;\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\tthis.register = this.register.bind(this);\r\n\t\tthis._clickedOffHandle=null;\r\n\t}\r\n\tregister(){\r\n\t\tthis.dispose();\r\n\t\tthis._clickedOffHandle = ClickedOff.register(this._elementRef?\r\n\t\t\tthis._elementRef.current:this._element,this._hide);\r\n\t}\r\n\tdispose(){\r\n\t\tthis._clickedOffHandle&&this._clickedOffHandle.dispose();\r\n\t\tthis._clickedOffHandle=null;\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './SubMenuHeader.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButton from './IconButton';\r\nimport { faBackward, faTimes} from '@fortawesome/free-solid-svg-icons'\r\nimport Urls from '../urls/Urls';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class SubMenuHeader extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {title, children}=props;\r\n\t\tthis._children = children;\r\n\t\tthis._hasChildren=children?true:false;\r\n\t\tthis._handleClickButtonBack= this._handleClickButtonBack.bind(this);\r\n\t\tthis._handleClickButtonClose= this._handleClickButtonClose.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.state ={title:title};\r\n\t}\r\n\tcomponentDidUpdate(previousProps){\r\n\t\tif(this.props.title!=this.state.title)\r\n\t\t\tthis.setState({title:this.props.title});\r\n\t}\r\n\t_handleClickButtonBack(){\r\n\t\tif(this._iMenuManager)\r\n\t\t\tthis._iMenuManager.back();\r\n\t}\r\n\t_handleClickButtonClose(){\r\n\t\tif(this._iMenuManager)\r\n\t\t\tthis._iMenuManager.close();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t}\r\n\trender() {\r\n\t\tconst className = \"sub-menu-header\"+(this._hasChildren?' has-children':'');\r\n\t\treturn (
    \r\n\t\t\t
    {this._children}
    \r\n\t\t\t
    {this.state.title}
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Menu.css';\r\nimport './IconButton.css';\r\nimport './Filters.css';\r\nimport MenuType from '../enums/MenuType';\r\nimport IconButton from './IconButton';\r\nimport HashSource from '../core/HashSource';\r\nimport UnitMarkerKey from './UnitMarkerKey';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport { faWalking, faMapMarker, faPoundSign, faHome, faBed, faBackspace} from '@fortawesome/free-solid-svg-icons';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport Urls from '../urls/Urls';\r\nimport AssetsManager from '../assets_management/AssetsManager';//\r\nexport default class FiltersButtons extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {clickClear, clickShowForSale, getConfiguration, nextKey, singleRow, iMenuManager} = props;\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tthis._clickClear = clickClear;\r\n\t\tthis._clickShowForSale = clickShowForSale;\r\n\t\tthis._singleRow = singleRow;\r\n\t\tthis._uniqueKey = 0;\r\n\t\tthis._nextKey = nextKey?nextKey:()=>String(this._uniqueKey ++);\r\n\t\tthis._handleClickFeatures=this._handleClickFeatures.bind(this);\r\n\t\tthis._handleClickPlot=this._handleClickPlot.bind(this);\r\n\t\tthis._handleClickShowForSale=this._handleClickShowForSale.bind(this);\r\n\t\tthis._handleClickStatus=this._handleClickStatus.bind(this);\r\n\t\tthis._handleClickAvailablePrices=this._handleClickAvailablePrices.bind(this);\r\n\t\tthis._handleClickBedrooms=this._handleClickBedrooms.bind(this);\r\n\t\tthis._handleClickHouseType=this._handleClickHouseType.bind(this);\r\n\t\tthis._handleClickClear=this._handleClickClear.bind(this);\r\n\t\tthis._iMenuManager = iMenuManager;\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.state = {siteJson:null};\r\n\t}\r\n\tload({siteJson}){\r\n\t\tthis.setState({siteJson});\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t}\r\n\t_handleClickPlot(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.PLOT_SEARCH);\r\n\t}\r\n\t_handleClickShowForSale(){\r\n\t\tthis._clickShowForSale();\r\n\t}\r\n\t_handleClickStatus(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.STATUS_FILTER);\r\n\t}\r\n\t_handleClickAvailablePrices(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.AVAILABLE_PRICES_FILTER);\r\n\t}\r\n\t_handleClickBedrooms(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.BEDROOMS_FILTER);\r\n\t}\r\n\t_handleClickHouseType(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.HOUSE_TYPE_FILTER);\r\n\t}\r\n\t_handleClickClear(){\r\n\t\tthis._clickClear();\r\n\t}\r\n\t_handleClickFeatures(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.FEATURES_FILTER);\r\n\t}\r\n\trender() {\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tconst rows =[];\r\n\t\tlet uniqueKey = 0;\r\n\t\tif(configuration.showShowForSaleButton){\r\n\t\t\trows.push((\r\n\t\t\t\t
    \r\n\t\t\t\t
    ));\r\n\t\t}\r\n\t\tconst featuresEnabled = configuration.featuresEnabled;\r\n\t\tconst features = !featuresEnabled\r\n\t\t\t?null\r\n\t\t\t:(\r\n\t\t\t);\r\n\t\tconst clearButton = ();\r\n\t\t\tconsole.log(this.state.siteJson?.allUnitsHaveMultiplePlots?\"Apartment Type\":\"House type\");\r\n\t\tconst iconButtonStatus = (\r\n\t\t\t\t\t);\r\n\t\tconst iconButtonPrice = (\r\n\t\t);\r\n\t\tconst iconButtonBedrooms = \r\n\t\t\t\t\t;\r\n\t\t\t\t\tconst iconButtonHouseType = (\r\n\t\t\t\t\t);\r\n\t\tconst iconButtonPlot = (\r\n\t\t\t\t\t);\r\n\t\tif(this._singleRow){\r\n\t\t\t\r\n\t\t\t\treturn [iconButtonStatus,\r\n\t\t\t\t\ticonButtonPrice,\r\n\t\t\t\t\ticonButtonBedrooms,\r\n\t\t\t\t\ticonButtonHouseType,\r\n\t\t\t\t\ticonButtonPlot,\r\n\t\t\t\t\tfeaturesEnabled?features:clearButton\r\n\t\t\t\t\t];\r\n\t\t}\r\n\t\telse{rows.push((\r\n\t\t\t\t
    \r\n\t\t\t\t\t{iconButtonStatus}\r\n\t\t\t\t\t{iconButtonPrice}\r\n\t\t\t\t\t{iconButtonBedrooms}\r\n\t\t\t\t
    ));\r\n\t\trows.push((
    \r\n\t\t\t\t\t{iconButtonHouseType}\r\n\t\t\t\t\t{iconButtonPlot}\r\n\t\t\t\t\t{featuresEnabled?features:clearButton}\r\n\t\t\t\t
    ));\r\n\t\tif(featuresEnabled){\r\n\t\t\trows.push((
    \r\n\t\t\t\t{clearButton}\r\n\t\t\t
    ));\r\n\t\t}\r\n\t\t}\r\n\t\treturn rows;\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './Menu.css';\r\nimport './IconButton.css';\r\nimport './Filters.css';\r\nimport MenuType from '../enums/MenuType';\r\nimport IconButton from './IconButton';\r\nimport HashSource from '../core/HashSource';\r\nimport UnitMarkerKey from './UnitMarkerKey';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport FiltersButtons from './FiltersButtons';\r\nimport Urls from '../urls/Urls';\r\nimport AssetsManager from '../assets_management/AssetsManager';//\r\nexport default class Filters extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {clickClear, clickShowForSale, getConfiguration} = props;\r\n\t\tthis._uniqueKey=0;\r\n\t\tthis._nextKey = ()=>String(this._uniqueKey++);\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tthis._clickClear = clickClear;\r\n\t\tthis._clickShowForSale = clickShowForSale;\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._unitMarkerKeyRef = React.createRef();\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis._filtersButtonsRef = React.createRef();\r\n\t\tthis.state = {visible:false, siteJson:null};\r\n\t}\r\n\tload({siteJson}){console.log('s');\r\n\t\tthis.setState({siteJson});\r\n\t\tconsole.log(this._filtersButtonsRef.current);\r\n\t\tthis._filtersButtonsRef.current.load({siteJson});\r\n\t\tthis._unitMarkerKeyRef.current?.load({siteJson});\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\t\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._filtersButtonsRef.current.setIMenuManager(value);\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.FILTERS;\r\n\t}\r\n\trender() {\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tthis._uniqueKey=0\r\n\t\tlet className = \"filters menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\tlet title = null;\r\n\t\tif(configuration.unitMarkerKeyAtTop){\r\n\t\t\tconst unitMarkerKey = ();\r\n\t\t\ttitle = unitMarkerKey;\r\n\t\t}\r\n\t\tlet bottomUnitMarkerKey = null;\r\n\t\tif(!configuration.unitMarkerKeyAtTop){\r\n\t\t\tbottomUnitMarkerKey = ();\r\n\t\t}\r\n\t\treturn (
    \r\n\t\t\t\t{title}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{bottomUnitMarkerKey}\r\n\t\t\t
    )\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class ReactTypeChecking{\r\n\tstatic isClassComponent(component) {\r\n\t\treturn (\r\n\t\t\ttypeof component === 'function' && \r\n\t\t\t!!component.prototype.isReactComponent\r\n\t\t)\r\n\t}\r\n\r\n\tstatic isFunctionComponent(component) {\r\n\t\treturn (\r\n\t\t\ttypeof component === 'function' && \r\n\t\t\tString(component).includes('return React.createElement')\r\n\t\t)\r\n\t}\r\n\r\n\tstatic isReactComponent(component) {\r\n\t\treturn (\r\n\t\t\tReactTypeChecking.isClassComponent(component) || \r\n\t\t\tReactTypeChecking.isFunctionComponent(component)\r\n\t\t)\r\n\t}\r\n\r\n\tstatic isElement(element) {\r\n\t\treturn React.isValidElement(element);\r\n\t}\r\n\r\n\tstatic isDOMTypeElement(element) {\r\n\t\treturn ReactTypeChecking.isElement(element) && typeof element.type === 'string';\r\n\t}\r\n\r\n\tstatic isCompositeTypeElement(element) {\r\n\t\treturn ReactTypeChecking.isElement(element) && typeof element.type === 'function';\r\n\t}\r\n}","export default function stopEventPropagation(element, eventList) {\r\n\tif(!eventList)\r\n\t\teventList= [ 'touchstart', 'touchmove', 'touchend', 'touchcancel','wheel', 'mousewheel' ];\r\n\tfor (var i = 0; i < eventList.length; i++) {\r\n\t\telement.addEventListener(eventList[i], function(event) {\r\n\t\t\tevent.stopPropagation();\r\n\t\t});\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './Checkbox.scss';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport CheckboxFilterOption from './CheckboxFilterOption';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport ReactTypeChecking from '../ui_core/ReactTypeChecking';\r\nimport Once from '../core/Once';\r\nimport HashSource from '../core/HashSource';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class Checkbox extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {text, paths, toggleOnClick, onChange, stopEventsPropagating}=props;\r\n\t\tif(toggleOnClick===undefined)\r\n\t\t\tthis._toggleOnClick=true;\r\n\t\telse this._toggleOnClick = toggleOnClick;\r\n\t\tthis._stopEventsPropagating = stopEventsPropagating;\r\n\t\tthis._text = text;\r\n\t\tthis._paths = paths;\r\n\t\tthis._get_dispatchChange_lexicalClosure= this._get_dispatchChange_lexicalClosure.bind(this);\r\n\t\tthis._onCallbackChange = onChange?new Once(this._get_dispatchChange_lexicalClosure(onChange)):null;\r\n\t\tthis.toggle = this.toggle.bind(this);\r\n\t\tthis._stopEventPropagation = this._stopEventPropagation.bind(this);\r\n\t\tthis.state ={checked:false};\r\n\t\tthis._children = props.children;\r\n\t\tthis._checkboxRef = React.createRef();\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._checked = false;\r\n\t}\r\n\t_get_dispatchChange_lexicalClosure(onChange){\r\n\t\treturn ()=>{\r\n\t\t\tonChange({checked:this._checked})\r\n\t\t};\r\n\t}\r\n\t_stopEventPropagation(e){\r\n\t\tif(!e)e=window.event;\r\n\t\te.stopPropagation&&e.stopPropagation();\r\n\t\te.preventDefault&&e.preventDefault();\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tif(!this._toggleOnClick)return;\r\n\t\tconst onceToggle = new Once(this.toggle);\r\n\t\tconst element = this._elementRef.current;\r\n\t\telement.addEventListener('click', (e)=>{\r\n\t\t\tif(this._stopEventsPropagating)\r\n\t\t\t\tthis._stopEventPropagation(e);\r\n\t\t\tonceToggle.trigger();\r\n\t\t});\r\n\t}\r\n\tget checked(){\r\n\t\treturn this._checked;\r\n\t}\r\n\tset checked(value){\r\n\t\tthis._checked = value;\r\n\t\tthis.setState({checked:value})\r\n\t\tthis._onCallbackChange?.trigger();\r\n\t}\r\n\ttoggle(){\r\n\t\tthis.checked = !this._checked;\r\n\t\tthis.setState({checked:this.checked })\r\n\t\tthis._onCallbackChange?.trigger();\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._checkboxRef.current.checked = this._checked;\r\n\t\t}, 0);\r\n\t}\r\n\trender() {\r\n\t\tconst paths = [];\r\n\t\tconst className = \"checkbox\"+(this.state.checked?' checked':'');\r\n\t\tif(!this._paths)\r\n\t\t\tpaths.push(());\r\n\t\telse\r\n\t\t\tthis._paths.forEach(p=>paths.push(ReactTypeChecking.isElement(p)?p:()));\r\n\t\treturn ();\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './CheckboxFilterOption.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Checkbox from './Checkbox';\r\nimport Once from '../core/Once';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class CheckboxFilterOption extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {option, onChange}=props;\r\n\t\tthis._inputCheckbox=React.createRef();\r\n\t\tif(!onChange)throwNotProvided('onChange');\r\n\t\tthis._callbackChange = onChange;\r\n\t\tif(!option)throwNotProvided('option');\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis._option = option;\r\n\t\tthis._toggleChecked = this._toggleChecked.bind(this);\r\n\t\t/*this._handleInputCheckboxChange = this._handleInputCheckboxChange.bind(this);*/\r\n\t\tthis._handleClick = this._handleClick.bind(this);\r\n\t\tthis._handleClickOnce = this._handleClickOnce.bind(this);\r\n\t\tthis._onceHandleClick = new Once(this._handleClickOnce);\r\n\t\tthis.state={isChecked:false};\r\n\t}\r\n\tget valueString(){\r\n\t\treturn this._option.valueString;\r\n\t}\r\n\tget option(){\r\n\t\treturn this._option;\r\n\t}\r\n\tget value(){\r\n\t\treturn this._option.value;\r\n\t}\r\n\tclear(){\r\n\t\tthis._inputCheckbox.current.checked=false;\r\n\t\tthis.setState({isChecked:false});\r\n\t}\r\n\tget isChecked(){\r\n\t\treturn this._inputCheckbox.current.checked;\r\n\t}\r\n\tset isChecked(value){\r\n\t\tif(typeof(value) !== \"boolean\")\r\n\t\t\tthrowNotOfType('value', 'boolean');\r\n\t\tthis.setState({isChecked:value});\r\n\t\tthis._inputCheckbox.current.checked=value;\r\n\t}\r\n\t_toggleChecked(){\r\n\t\tconsole.log('_toggleChecked');\r\n\t\tconst isChecked =!this.state.isChecked;\r\n\t\tthis.setState({isChecked:isChecked});\r\n\t\tthis._inputCheckbox.current.checked=isChecked;\r\n\t\tconsole.log('_callbackChange'+isChecked);\r\n\t\tthis._callbackChange();\r\n\t}/*\r\n\t_handleInputCheckboxChange(e){\r\n\t\tthis.state.isChecked = e.target.checked;\r\n\t\tthis._callbackChange();\r\n\t}*/\r\n\t_handleClick(){\r\n\t\tthis._onceHandleClick.trigger();\r\n\t}\r\n\t_handleClickOnce(){\r\n\t\tthis._toggleChecked();\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"checkbox-filter-option\";\r\n\t\tif(this.state.isChecked)\r\n\t\t\tclassName+=\" checked\";\r\n\t\tconst classNameOption = this._option.className;\r\n\t\tif(classNameOption)\r\n\t\t\tclassName+=` ${classNameOption}`;\r\n\t\treturn (
    \r\n\t\t\t\r\n\t\t\t
    );\t\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './CheckboxFilter.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport CheckboxFilterOption from './CheckboxFilterOption';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class CheckboxFilter extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {onSelectionChange}=props;\r\n\t\tif(!onSelectionChange)throwNotProvided('onSelectionChange');\r\n\t\tthis._onSelectionChange=onSelectionChange;\r\n\t\tthis.getCheckedValues = this.getCheckedValues.bind(this);\r\n\t\tthis.setOptions = this.setOptions.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis.state = {entries:[]};\r\n\t}\r\n\tget isApplied(){\r\n\t\tconst entries = this.state.entries;\r\n\t\tfor(var i=0; i{\r\n\t\t\tmapValueStringToOption[newOption.valueString]=newOption;\r\n\t\t});\r\n\t\tconst checkboxFilterOptionsToRemove =[];\r\n\t\tentries.forEach((existingCheckboxFilterOption)=>{\r\n\t\t\tconst existingCheckboxFilterOptionValueString = existingCheckboxFilterOption.valueString;\r\n\t\t\tif(mapValueStringToOption.has(existingCheckboxFilterOptionValueString)){\r\n\t\t\t\tconst option = mapValueStringToOption.get(existingCheckboxFilterOptionValueString);\r\n\t\t\t\tnewOptions.splice(newOptions.indexOf(option), 1);\r\n\t\t\t\treturn;\r\n\t\t\t}\t\t\r\n\t\t\tcheckboxFilterOptionsToRemove.push(existingCheckboxFilterOption);\r\n\t\t});\r\n\t\tfor(var i=0; i{\r\n\t\t\tconst checkboxFilterOption = ();\r\n\t\t\tentries.push(checkboxFilterOption);\r\n\t\t});\r\n\t\tthis.setState({entries:entries});\r\n\t}\r\n\tclear(){\r\n\t\tthis.state.entries.forEach((entry)=>{\r\n\t\t\tentry.ref.current.clear();\r\n\t\t});\r\n\t}\r\n\tgetCheckedValues(){\r\n\t\tconst checkedValues=[];\r\n\t\tthis.state.entries.forEach((entry)=>{\r\n\t\t\tif(!entry.ref.current)return;\r\n\t\t\tentry = entry.ref.current;\r\n\t\t\tif(entry.isChecked)\r\n\t\t\t\tcheckedValues.push(entry.value);\r\n\t\t});\r\n\t\treturn checkedValues;\r\n\t}\r\n\trender() {\r\n\t\treturn (
    \r\n\t\t\t\t
    \r\n\t\t\t\t{this.state.entries}\r\n\t\t\t\t
    \r\n\t\t\t
    )\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class Option{\r\n\tconstructor(props){\r\n\t\tconst{text, value, className}=props;\r\n\t\tif(!text)throwNotProvided('text');\r\n\t\tif(value===undefined)throwNotProvided('value');\r\n\t\tthis._className = className;\r\n\t\tthis._text = text;\r\n\t\tthis._value = value;\r\n\t\tthis._valueString = typeof(value)==='string'?value:JSON.stringify(value);\r\n\t}\r\n\tget value(){\r\n\t\treturn this._value;\r\n\t}\r\n\tget valueString(){\r\n\t\treturn this._valueString;\r\n\t}\r\n\tget className(){\r\n\t\treturn this._className;\r\n\t}\r\n\tget text(){\r\n\t\treturn this._text;\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './AvailablePricesFilter.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Option from '../choices/Option';\r\nimport MenuType from '../enums/MenuType';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport numberWithCommas from '../core/numberWithCommas';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class AvailablePricesFilter extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {onSelectedOptionsChange} = props;\r\n\t\tthis._callbackSelectedOptionsChange=onSelectedOptionsChange;\r\n\t\tthis._checkboxFilter = React.createRef();\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._dynamicallyGetFromPriceWithLowerRange = this._dynamicallyGetFromPriceWithLowerRange.bind(this);\r\n\t\tthis._roundDownToNearest100 = this._roundDownToNearest100.bind(this);\r\n\t\tthis._roundUpToNearest100=this._roundUpToNearest100.bind(this);\r\n\t\tthis._getAndUpdateOptions = this._getAndUpdateOptions.bind(this);\r\n\t\tthis._updateOptions = this._updateOptions.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._clickedOffHandle = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.filterPlots = this.filterPlots.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.state = {options:[], visible:false};\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t}\r\n\tsetFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel){\r\n\t\tconst priceRange = whatAreYouLookingForViewModel.priceRange;\r\n\t\tif(priceRange===undefined||priceRange===null)return;\r\n\t\tconst from = priceRange[0], to =priceRange[1];\r\n\t\tconst hasFrom = from!==undefined&&from!==null;\r\n\t\tconst hasTo = to!==undefined&&to!==null;\r\n\t\tconst checkboxOption = this._checkboxFilter.current.getCheckboxOptions()\r\n\t\t\t.map(checkboxOption=>checkboxOption.ref.current)\r\n\t\t\t.forEach(checkboxOption=>{\r\n\t\t\t\tconst value= checkboxOption.value;\r\n\t\t\t\tconst hasFromAndFromIsInsideRangeForCheckbox = hasFrom&&(from>=value.from&&from<=value.to);\r\n\t\t\t\tconst hasToAndToIsInsideRangeForCheckbox = hasTo&&(to>=value.from&&to<=value.to);\r\n\t\t\t\tconst hasFromAndToAndConsumesEntireCheckboxRange = hasFrom&&hasTo&&(to>=value.to&&from<=value.from);\r\n\t\t\t\tcheckboxOption.isChecked =hasFromAndFromIsInsideRangeForCheckbox\r\n\t\t\t\t||hasToAndToIsInsideRangeForCheckbox\r\n\t\t\t\t||hasFromAndToAndConsumesEntireCheckboxRange;\r\n\t\t\t});\r\n\t\tthis._callbackSelectedOptionsChange();\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tfilterPlots(plotsArray){\r\n\t\tconst priceRangesToShow = this._checkboxFilter.current.getCheckedValues();\r\n\t\tif(priceRangesToShow.length<1)return plotsArray;\r\n\t\tconst plotsToShow = [];\r\n\t\tfor(var i=0; i=priceRangeToShow.from&&price<=priceRangeToShow.to)\r\n\t\t\t\t{\r\n\t\t\t\t\tplotsToShow.push(plot);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn plotsToShow;\r\n\t}\r\n\tget isApplied(){\r\n\t\treturn this._checkboxFilter.current.isApplied;\r\n\t}\r\n\tclear(){\r\n\t\tthis._checkboxFilter.current.clear();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.AVAILABLE_PRICES_FILTER;\r\n\t}\r\n\tload({plotsArray, availablePricesSettings, currencyConfiguration}){\r\n\t\tif(!availablePricesSettings)throwNotProvided('availablePricesSettings');\r\n\t\tif(!currencyConfiguration)throwNotProvided('currencyConfiguration');\r\n\t\tthis._getAndUpdateOptions(plotsArray, availablePricesSettings, currencyConfiguration);\r\n\t}\r\n\t_getAndUpdateOptions(plotsArray, availablePricesSettings, currencyConfiguration){\r\n\t\tconst plotsInPriceOrder = plotsArray.sort(function(plotA, plotB){return plotA.price - plotB.price});\r\n\t\tconst desiredPriceIntervalsPlusDynamicallyAddedPriceIntervalsPrice = availablePricesSettings.desiredIntervalsPrice;\r\n\t\tlet from = null;\r\n\t\tconst requiredRanges =[];\r\n\t\tlet previousPriceIntervalWithToLessThan = null;\r\n\t\tconst dynamicRangesSeen=[];\r\n\t\tplotsInPriceOrder.forEach((plot)=>{\r\n\t\t\tif(plot.price<=0)return;\r\n\t\t\tlet foundRange =false;\r\n\t\t\tvar i=0;\r\n\t\t\tfor(i=0; i=plot.price){\r\n\t\t\t\t\t\tif(requiredRanges.indexOf(priceInterval)<0){\r\n\t\t\t\t\t\t\trequiredRanges.push(priceInterval)\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tfoundRange=true;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tpreviousPriceIntervalWithToLessThan = priceInterval;\r\n\t\t\t\t}\r\n\t\t\t\telse break;\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\tif(!foundRange){\r\n\t\t\t\tconst nextPriceInterval=i=0)return;\r\n\t\t\t\tdynamicRangesSeen.push(dynamicRangeString);\r\n\t\t\t\trequiredRanges.push(range);\r\n\t\t\t}\r\n\t\t});\r\n\t\tthis._updateOptions(requiredRanges, currencyConfiguration.currencyPrefix, currencyConfiguration.currencySuffix);\r\n\t}\r\n\t_dynamicallyGetFromPriceWithLowerRange(previousPriceInterval, price, nextPriceInterval){\r\n\t\tconst priceRoundedDownToNearest100=this._roundDownToNearest100(price);\r\n\t\tlet from = priceRoundedDownToNearest100;\r\n\t\tif(from<0)\r\n\t\t\tfrom = 0;\r\n\t\tif(previousPriceInterval!=null){\r\n\t\t\tif(previousPriceInterval.to>priceRoundedDownToNearest100)\r\n\t\t\t\tfrom = previousPriceInterval.to;\r\n\t\t}\r\n\t\tlet to = this._roundUpToNearest100(price);\r\n\t\tif(nextPriceInterval!==null){\r\n\t\t\tif(nextPriceInterval.from0?*/price+100-mod/*:price*/;\r\n\t}\r\n\t_checkboxFilterOptionsChanged(){\r\n\t\t\r\n\t}\r\n\t_updateOptions(requiredRanges, currencyPrefix, currencySuffix){\r\n\t\tconst options = requiredRanges.map((requiredRange)=>new Option({text:`${currencyPrefix}${numberWithCommas(requiredRange.from)}${currencySuffix} to ${currencyPrefix}${numberWithCommas(requiredRange.to)}${currencySuffix}`,\r\n\t\t\tvalue:requiredRange}));\r\n\t\tthis._checkboxFilter.current.setOptions(options);\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"available-prices-filter menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Favourite{\r\n\tconstructor(props){\r\n\t\tconst {payload, description, hash, sortValue, imageUrl, onClick, onRemove}=props;\r\n\t\tif(!description)throwNotProvided('description');\r\n\t\tif(hash===undefined||hash===null)throwNotProvided('hash');\r\n\t\tif(sortValue===undefined||sortValue===null)throwNotProvided('sortValue');\r\n\t\tthis._description = description;\r\n\t\tthis._onClick = onClick;\r\n\t\tthis._onRemove = onRemove;\r\n\t\tthis._payload = payload;\r\n\t\tthis._hash = hash;\r\n\t\tthis._imageUrl = imageUrl;\r\n\t\tthis._sortValue = sortValue;\r\n\t}\r\n\tget payload(){\r\n\t\treturn this._payload;\r\n\t}\r\n\tget hash(){\r\n\t\treturn this._hash;\r\n\t}\r\n\tget sortValue(){\r\n\t\treturn this._sortValue;\r\n\t}\r\n\tget description(){\r\n\t\treturn this._description;\r\n\t}\r\n\tget imageUrl(){\r\n\t\treturn this._imageUrl;\r\n\t}\r\n\tonClick(){\r\n\t\tthis._onClick&&this._onClick();\r\n\t}\r\n\tget onRemove(){\r\n\t\treturn this._onRemove;\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './StatusFilter.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport MenuType from '../enums/MenuType';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport Option from '../choices/Option';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nexport default class StatusFilter extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {onSelectedOptionsChange} = props;\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._callbackSelectedOptionsChange=onSelectedOptionsChange;\r\n\t\tthis._checkboxFilter=React.createRef();\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.filterPlots = this.filterPlots.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis._updateOptions= this._updateOptions.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.state = {options:[], visible:false};\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t}\r\n\thide(){\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tfilterPlots(plotsArray){\r\n\t\tconst plotStatusesToShow = this._checkboxFilter.current.getCheckedValues();\r\n\t\tif(plotStatusesToShow.length<1)return plotsArray;\r\n\t\treturn plotsArray.filter(plot=>plotStatusesToShow.indexOf(plot.status)>=0);\r\n\t}\r\n\tsetForSale(){\r\n\t\tthis._checkboxFilter.current.getCheckboxOptions().forEach(checkboxOption=>{\r\n\t\t\tcheckboxOption = checkboxOption.ref.current;\r\n\t\t\tconst checkboxOptionOption = checkboxOption.option;\r\n\t\t\tconst newChecked = checkboxOptionOption.value===PlotStatus.AVAILABLE;\r\n\t\t\tcheckboxOption.isChecked=newChecked;\r\n\t\t});\r\n\t\tthis._callbackSelectedOptionsChange();\r\n\t}\r\n\tclear(){\r\n\t\tthis._checkboxFilter.current.clear();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.STATUS_FILTER;\r\n\t}\r\n\tget isApplied(){\r\n\t\treturn this._checkboxFilter.current.isApplied;\r\n\t}\r\n\tsetAvailableOnly(){\r\n\t\tconst checkboxOption = this._checkboxFilter.current.getCheckboxOptions()\r\n\t\t\t.map(checkboxOption=>checkboxOption.ref.current)\r\n\t\t\t.forEach(checkboxOption=>{\r\n\t\t\t\tconst plotStatus= checkboxOption.value;\r\n\t\t\t\tcheckboxOption.isChecked =plotStatus===PlotStatus.AVAILABLE;\r\n\t\t\t});\r\n\t}\r\n\tload(plotsArray){\r\n\t\tconst plotStatusesForPlots = [];\r\n\t\tfor(var i=0; i{\r\n\t\t\tconst option = new Option({text:`${PlotStatus.getDescription(plotStatus)}`,\r\n\t\t\tvalue:plotStatus,\r\n\t\t\tclassName:PlotStatus.getCssName(plotStatus)})\r\n\t\t\treturn option;\r\n\t\t});\r\n\t\tthis._checkboxFilter.current.setOptions(options);\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"status-filter menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './BedroomsFilter.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport MenuType from '../enums/MenuType';\r\nimport Option from '../choices/Option';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nexport default class BedroomsFilter extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {bedroomsFilterSettings, onSelectedOptionsChange}=props;\r\n\t\tthis._callbackSelectedOptionsChange=onSelectedOptionsChange;\r\n\t\tthis._checkboxFilter=React.createRef();\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._options = [];\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis._updateOptions = this._updateOptions.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.filterPlots = this.filterPlots.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis.state = {options:[], visible:false};\r\n\t}\r\n\tsetFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel){\r\n\t\tconst nBedrooms = whatAreYouLookingForViewModel.nBedrooms;\r\n\t\tif(nBedrooms===undefined||nBedrooms===null)return;\r\n\t\tconst checkboxOption = this._checkboxFilter.current.getCheckboxOptions()\r\n\t\t\t.map(checkboxOption=>checkboxOption.ref.current)\r\n\t\t\t.forEach(checkboxOption=>{\r\n\t\t\t\tconst value= checkboxOption.value;\r\n\t\t\t\tcheckboxOption.isChecked = value===nBedrooms;\r\n\t\t\t});\r\n\t\tthis._callbackSelectedOptionsChange();\r\n\t}\r\n\tshow(callbackClose){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tfilterPlots(plotsArray){\r\n\t\tconst nBedroomssToShow = this._checkboxFilter.current.getCheckedValues();\r\n\t\tif(nBedroomssToShow.length<1)return plotsArray;\r\n\t\treturn plotsArray.filter(plot=>nBedroomssToShow.indexOf(plot.nBedrooms)>=0);\r\n\t}\r\n\tclear(){\r\n\t\tthis._checkboxFilter.current.clear();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.BEDROOMS_FILTER;\r\n\t}\r\n\tget isApplied(){\r\n\t\treturn this._checkboxFilter.current.isApplied;\r\n\t}\r\n\tload(plotsArray){\r\n\t\tconst nBedroomssForPlots = [];\r\n\t\tfor(var i=0; inew Option({text:`${nBedrooms} ${(nBedrooms>1?\"bedrooms\":\"bedroom\")}`,\r\n\t\t\tvalue:nBedrooms}));\r\n\t\tthis._checkboxFilter.current.setOptions(options);\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"bedrooms-filter menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+= \" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './HouseTypeFilter.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport MenuType from '../enums/MenuType';\r\nimport Option from '../choices/Option';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport Once from '../core/Once';\r\nexport default class FeaturesFilter extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {onSelectedOptionsChange} = props;\r\n\t\tthis._callbackSelectedOptionsChange=onSelectedOptionsChange;\r\n\t\tthis._checkboxFilter=React.createRef();\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.setFromWhatAreYouLookingForViewModel= this.setFromWhatAreYouLookingForViewModel.bind(this);\r\n\t\tthis._handleSelectedOptionsChanged= this._handleSelectedOptionsChanged.bind(this);;\r\n\t\tthis._setSelectedFeatures= this._setSelectedFeatures.bind(this);\r\n\t\tthis.filterPlots = this.filterPlots.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis._updateOptions= this._updateOptions.bind(this);\r\n\t\tthis._selectedFeatures=[];\r\n\t\tthis._mapFeatureIdToOption = new Map();\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.state = {options:[], visible:false};\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis._selectedOptionsChangedOnce = new Once(onSelectedOptionsChange);\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tfilterPlots(plotsArray){\r\n\t\tconsole.log('filtering plots');\r\n\t\tconst selectedFeatures = this._checkboxFilter.current.getCheckedValues();\r\n\t\tif(selectedFeatures.length<1)\r\n\t\t\treturn plotsArray;\r\n\t\treturn plotsArray.filter(siteJsonUnitPlot=>{\r\n\t\t\tfor(var selectedFeature of selectedFeatures){\r\n\t\t\t\tconsole.log('features is ');\r\n\t\t\t\tif(siteJsonUnitPlot.features===undefined\r\n\t\t\t\t||siteJsonUnitPlot.features===null)\r\n\t\t\t\t\treturn false;\r\n\t\t\t\tconsole.log(siteJsonUnitPlot.features);\r\n\t\t\t\tif(siteJsonUnitPlot.features.indexOf(selectedFeature)<0)\r\n\t\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t});\r\n\t}\r\n\tclear(){\r\n\t\tthis._checkboxFilter.current.clear();\r\n\t}\r\n\tsetFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel){\r\n\t\t/*const houseTypeViewModels = whatAreYouLookingForViewModel.houseTypes;\r\n\t\tif(!houseTypeViewModels)return;\r\n\t\tthis._setHouseTypeViewModelsToShow(houseTypeViewModels);*/\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.FEATURES_FILTER;\r\n\t}\r\n\tget isApplied(){\r\n\t\treturn this._checkboxFilter.current.isApplied;\r\n\t}\r\n\tload({siteJson}){\r\n\t\tthis._siteJson = siteJson;\r\n\t\tthis._propertyBindingAllFeatures = PropertyBindingFactory.standard(this, \r\n\t\t\tsiteJson, 'allFeatures', this._updateOptions);\r\n\t}\r\n\t_handleSelectedOptionsChanged(o){\r\n\t\tconst selectedFeatures = this._checkboxFilter.current.getCheckedValues();\r\n\t\tthis._setSelectedFeatures(selectedFeatures);\r\n\t\tthis._callbackSelectedOptionsChange();\r\n\t\tconsole.log('_callbackSelectedOptionsChange');\r\n\t}\r\n\t_setSelectedFeatures(selectedFeatures){\r\n\t\tthis._selectedFeatures = selectedFeatures;\r\n\t\tthis._siteJson.allFeatures?.forEach((feature)=>{\r\n\t\t\tconst option = this._mapFeatureIdToOption.get(feature.id);\r\n\t\t\toption.isChecked = this._selectedFeatures.indexOf(feature)>=0;\r\n\t\t});\r\n\t}\r\n\t_updateOptions(){\r\n\t\tthis._mapFeatureIdToOption.clear();\r\n\t\tif(!this._siteJson.allFeatures)return;\r\n\t\tconst options = this._siteJson.allFeatures.map((feature)=>{\r\n\t\t\tconst option = new Option({\r\n\t\t\t\ttext:feature.name,\r\n\t\t\t\tvalue:feature\r\n\t\t\t});\r\n\t\t\tthis._mapFeatureIdToOption.set(feature.id, option);\r\n\t\t\treturn option;\r\n\t\t});\r\n\t\tthis._checkboxFilter.current.setOptions(options);\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"features-filter menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport EfficientMoveCycle from '../../ui_core/EfficientMoveCycle';\r\nimport ParameterErrors from '../../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class SliderHandle extends Component{\r\n constructor(props) {\r\n super(props);\r\n const { callbackMoved } = props;\r\n if (!callbackMoved) throwNotProvided(\"callbackMoved\");\r\n this._callbackMoved = callbackMoved;\r\n this.setPosition = this.setPosition.bind(this);\r\n this._handleDragStart = this._handleDragStart.bind(this);\r\n this._handleDragMove = this._handleDragMove.bind(this);\r\n this._handleDragEnd = this._handleDragEnd.bind(this);\r\n this._element = React.createRef();\r\n this._startPosition = null;\r\n this._mouseStartPosition = null;\r\n this.state = {\r\n position: { x: 0, y: 0 },\r\n capturing: false\r\n };\r\n }\r\n\tget element(){\r\n\t\treturn this._element.current;\r\n\t}\r\n setPosition(position) {\r\n this.setState({ position: position });\r\n }\r\n get startPosition() {\r\n return this._startPosition;\r\n }\r\n _handleDragStart(e, isTouch) {\r\n\t\tif(isTouch)\r\n\t\t\te=e.touches[0];\r\n const element = this._element.current;\r\n this._startPosition = { x: element.offsetLeft+(element.offsetWidth/2), y: element.offsetTop+(element.offsetHeight/2) };\r\n this._mouseStartPosition = { x: e.clientX, y: e.clientY };\r\n this.setState({ capturing: true });\r\n }\r\n _handleDragMove(e, isTouch) {\r\n\t\tif(isTouch)\r\n\t\t\te=e.touches[0];\r\n const dX = e.clientX - this._mouseStartPosition.x;\r\n const dY = e.clientY - this._mouseStartPosition.y;\r\n this._callbackMoved(dX, dY);\r\n }\r\n _handleDragEnd(e) {\r\n this.setState({ capturing: false });\r\n }\r\n render() {\r\n const position = this.state.position;\r\n const className = \"handle\" + (this.state.capturing ? \" active\" : \"\");\r\n return (
    );\r\n }\r\n componentDidMount() {\r\n this._efficientMoveCycle = new EfficientMoveCycle({\r\n element: this._element.current,\r\n onStart: this._handleDragStart,\r\n onMove: this._handleDragMove,\r\n onEnd:this._handleDragEnd,\r\n\t\t\tstopPropagation:true,\r\n\t\t\tpreventDefault:true\r\n });\r\n }\r\n}","import React, { Component } from 'react';\r\nimport SliderHandle from './slider_components/SliderHandle';\r\nimport './Slider.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class Slider extends Component{\r\n constructor(props) {\r\n super(props);\r\n const { min, max, initial, onValueChanged, isHorizontal } = props;\r\n this._onValueChanged = onValueChanged;\r\n if (min === undefined) throwNotProvided(\"min\");\r\n if (max === undefined) throwNotProvided(\"max\");\r\n if (initial === undefined) throwNotProvided(\"initial\");\r\n this._min = min;\r\n this._max = max;\r\n this._initial = initial;\r\n this._isHorizontal = isHorizontal?true:false;\r\n\t\tthis._sliderHandle = React.createRef();\r\n this._inner = React.createRef();\r\n\t\tthis.setValue = this.setValue.bind(this);\r\n this._constrainValue = this._constrainValue.bind(this);\r\n this._sliderHandleMoved = this._sliderHandleMoved.bind(this);\r\n this.setMin = this.setMin.bind(this);\r\n this.setMax = this.setMax.bind(this);\r\n this._updateSliderHandlePosition = this._updateSliderHandlePosition.bind(this);\r\n this._calculateAndDispatchNewValue = this._calculateAndDispatchNewValue.bind(this);\r\n this._setSliderPositionFromValue = this._setSliderPositionFromValue.bind(this);\r\n this.setFromInitialValue = this.setFromInitialValue.bind(this);\r\n }\r\n\tget handle(){\r\n\t\treturn this._sliderHandle.current;\r\n\t}\r\n _sliderHandleMoved(dX, dY) {\r\n this._updateSliderHandlePosition(dX, dY);\r\n }\r\n _updateSliderHandlePosition(dX, dY) {\r\n const sliderHandle = this._sliderHandle.current;\r\n const inner = this._inner.current;\r\n const startPosition = sliderHandle.startPosition;\r\n\t\tif(this._isHorizontal){\r\n\t\t\tlet newX = startPosition.x + dX;\r\n\t\t\tconst innerWidth = inner.offsetWidth;\r\n\t\t\tif (newX < 0) newX = 0;\r\n\t\t\telse if (newX > inner.offsetWidth) newX = innerWidth;\r\n\t\t\tsliderHandle.setPosition({ x: newX, y: 0 });\r\n\t\t\tthis._calculateAndDispatchNewValue(newX, innerWidth);\r\n\t\t\treturn;\r\n\t\t}\r\n let newY = startPosition.y + dY;\r\n const innerHeight = inner.offsetHeight;\r\n if (newY < 0) newY = 0;\r\n else if (newY > inner.offsetHeight) newY = innerHeight;\r\n sliderHandle.setPosition({ x: 0, y: newY });\r\n this._calculateAndDispatchNewValue(newY, innerHeight);\r\n }\r\n\tsetMin(value){\r\n\t\tthis._min = value;\r\n\t\tthis._constrainValue(this._value);\r\n\t\tthis._setSliderPositionFromValue(this._value);\r\n\t}\r\n\tsetMax(value){\r\n\t\tthis._max = value;\r\n\t\tthis._constrainValue(this._value);\r\n\t\tthis._setSliderPositionFromValue(this._value);\r\n\t}\r\n\tsetFromInitialValue(){\r\n this._setSliderPositionFromValue(this._initial);\r\n\t}\r\n\tsetValue(value){\r\n\t\tthis._setSliderPositionFromValue(value);\r\n\t}\r\n _calculateAndDispatchNewValue(newDesired, innerLength) {\r\n\t\tthis._constrainValue(newDesired);\r\n this._onValueChanged(this._value);\r\n }\r\n\t_constrainValue(newDesired){\r\n\t\tconst inner = this._inner.current;\r\n\t\tconst innerLength = this._isHorizontal?inner.offsetWidth:inner.offsetHeight\r\n this._value = this._max - ((this._max - this._min) * (innerLength - newDesired) / innerLength) ;\r\n\t}\r\n _setSliderPositionFromValue(value) {\r\n\t\tif(this._isHorizontal){\r\n\t\t\tconst innerWidth = this._inner.current.offsetWidth;\r\n\t\t\tconst newX = innerWidth -((this._max - value) * innerWidth / (this._max - this._min));\r\n\t\t\tconst sliderHandle = this._sliderHandle.current;\r\n\t\t\tsliderHandle.setPosition({ x: newX, y: 0 });\r\n\t\t\treturn;\r\n\t\t}\r\n const innerHeight = this._inner.current.offsetHeight;\r\n const newY = innerHeight -((this._max - value) * innerHeight / (this._max - this._min));\r\n const sliderHandle = this._sliderHandle.current;\r\n sliderHandle.setPosition({ x: 0, y: newY });\r\n }\r\n componentDidMount() {\r\n this._setSliderPositionFromValue(this._initial);\r\n }\r\n render() {\r\n\t\tlet className = \"slider \"+(this._isHorizontal?\" horizontal\":\" vertical\");\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n );\r\n }\r\n}","import React, { Component } from 'react';\r\nimport './Star.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faStar} from '@fortawesome/free-solid-svg-icons';\r\nimport CheckboxFilterOption from './CheckboxFilterOption';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Tooltip from './Tooltip';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class Star extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {tooltip}=props;\r\n\t\tthis._tooltip = tooltip;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tconst {onSelectedChange, stopEventsPropagating}=props;\r\n\t\tthis._stopEventsPropagating = stopEventsPropagating?true:false;\r\n\t\tif(!onSelectedChange)throwNotProvided('onSelectedChange');\r\n\t\tthis._onSelectedChange=onSelectedChange;\r\n\t\tthis._handleClick= this._handleClick.bind(this);\r\n\t\tthis._clicking = false;\r\n\t\tthis._handleMouseUp = this._handleMouseUp.bind(this);\r\n\t\tthis.state = {selected:false};\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tTooltip.register({element:this._elementRef.current, text:this._tooltip});\r\n\t}\r\n\t_stopEventPropagation(e){\r\n\t\tif(!e)e=window.event;\r\n\t\te.stopPropagation&&e.stopPropagation();\r\n\t\te.preventDefault&&e.preventDefault();\r\n\t}\r\n\t_handleClick(e){\r\n\t\tif(this._stopEventsPropagating){\r\n\t\t\tthis._stopEventPropagation(e);\r\n\t\t}\r\n\t\tthis._clicking = true;\r\n\t\tconst selected = !this.state.selected;\r\n\t\tconst allow = this._onSelectedChange(selected);\r\n\t\tif(allow===false)return;\r\n\t\tthis.setState({selected:selected});\r\n\t}\r\n\t_handleMouseUp(e){\r\n\t\tif(this._stopEventsPropagating){\r\n\t\t\tthis._stopEventPropagation(e);\r\n\t\t}\r\n\t\tthis._clicking = false;\r\n\t}\r\n\tget selected(){\r\n\t\treturn this.state.selected;\r\n\t}\r\n\tset selected(value){\r\n\t\tif(this._clicking){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.setState({selected:value});\r\n\t}\r\n\trender() {\r\n\t\t/*\r\n\t\t
    \r\n\t\t\t\r\n\t\t
    */\r\n\t\tlet className = \"star\";\r\n\t\tif(this.state.selected)\r\n\t\t\tclassName+=\" selected\";\r\n\t\treturn (
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class InsertedMnuItemsRegistrationHandle{\r\n\tconstructor(props){\r\n\t\tconst {callbackRemove}=props;\r\n\t\tif(!callbackRemove)throwNotProvided('callbackRemove');\r\n\t\tthis._callbackRemove = callbackRemove;\r\n\t\tthis._disposed = false;\r\n\t\tthis.dispose= this.dispose.bind(this);\r\n\t}\r\n\tdispose(){\r\n\t\tif(this._disposed)return;\r\n\t\tthis._disposed = true;\r\n\t\tthis._callbackRemove();\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport InsertedMenuItemsRegistrationHandle from './InsertedMenuItemsRegistrationHandle';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class InsertedMenuItemsHandler{\r\n\tconstructor(getInsertedMenuItems, setInservedMenuItems){\r\n\t\tif(!setInservedMenuItems)\r\n\t\t\tthrowNotProvided('setInservedMenuItems');\r\n\t\tif(!getInsertedMenuItems)\r\n\t\t\tthrowNotProvided('getInsertedMenuItems');\r\n\t\tthis._setInservedMenuItems = setInservedMenuItems;\r\n\t\tthis._getInsertedMenuItems = getInsertedMenuItems;\r\n\t\tthis._getCallbackRemoveLexicalClosure = this._getCallbackRemoveLexicalClosure.bind(this);\r\n\t\tthis.registerMenuItems = this.registerMenuItems.bind(this);\r\n\t}\r\n\tregisterMenuItems(menuItems){\r\n\t\tconst insertedMenuItems = this._getInsertedMenuItems();\r\n\t\tmenuItems.forEach(menuItem=>insertedMenuItems.push(menuItem));\r\n\t\tthis._setInservedMenuItems(insertedMenuItems);\r\n\t\tconst callbackRemove = this._getCallbackRemoveLexicalClosure(menuItems);\r\n\t\treturn new InsertedMenuItemsRegistrationHandle({callbackRemove:callbackRemove});\r\n\t}\r\n\t_getCallbackRemoveLexicalClosure(menuItems){\r\n\t\treturn ()=>{\r\n\t\t\tconst insertedMenuItems = this._getInsertedMenuItems();\r\n\t\t\tmenuItems.forEach(menuItem=>{\r\n\t\t\t\tconst index = insertedMenuItems.indexOf(menuItem);\r\n\t\t\t\tif(index<0)return;\r\n\t\t\t\tinsertedMenuItems.splice(index, 1);\r\n\t\t\t});\r\n\t\t\tthis._setInservedMenuItems(insertedMenuItems);\r\n\t\t};\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './ZoomButtons.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faCaretRight, faCaretLeft, faCaretUp, faCaretDown} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport HashSource from '../core/HashSource';\r\nimport Urls from '../urls/Urls';\r\nimport Tooltip from './Tooltip';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class ZoomButtons extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst { min, max, initial, interval, onValueChanged} = props;\r\n\t\tthis._value = initial;\r\n\t\tthis._min = min;\r\n\t\tthis._max = max;\r\n\t\tthis._interval = interval;\r\n\t\tthis._onValueChanged = onValueChanged;\r\n\t\tthis._handleClickDown= this._handleClickDown.bind(this);\r\n\t\tthis._handleClickUp= this._handleClickUp.bind(this);\r\n\t\tthis.state = {visible:true, disabled:false};\r\n\t}\r\n\tsetValue(value){\r\n\t\tthis._value = value;\r\n\t}\r\n\t_handleClickUp(){\r\n\t\tthis._value+=this._interval;\r\n\t\tif(this._value>this._max)\r\n\t\t\tthis._value = this._max;\r\n\t\tthis._onValueChanged(this._value);\r\n\t}\r\n\t_handleClickDown(){\r\n\t\tthis._value-=this._interval;\r\n\t\tif(this._value\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t)\r\n\t}\r\n}","const DragDropType={STREET_VIEW_BUTTON:'streetViewButton'};\r\nexport default DragDropType;\t\t","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class IDragDropRecipient {\r\n\tstatic validate(obj){\r\n\t\tif(!obj)throwNotProvided('obj');\r\n\t\tconst objTypeName = obj.constructor.name;\r\n\t\tif(!obj.onDrop)throw new Error(`obj of type ${objTypeName} did not expose a method named onDrop`);\r\n\t\tif(typeof(obj.onDrop)!=='function')throw new Error(`${objTypeName}.onDrop was not a function`);\r\n\t\tif(!obj.onDragging)throw new Error(`obj of type ${objTypeName} did not expose a method named onDragging`);\r\n\t\tif(typeof(obj.onDragging)!=='function')throw new Error(`${objTypeName}.onDragging was not a function`);\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport Urls from '../urls/Urls';\r\nimport './DragDropStreetViewButton.css';\r\nimport EfficientMoveCycle from '../ui_core/EfficientMoveCycle';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport DragDropType from '../enums/DragDropType';\r\nimport IDragDropRecipient from '../interfaces/IDragDropRecipient';\r\nimport Tooltip from './Tooltip';\r\n\r\nexport default class DragDropStreetViewButton extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {showDefaultOutside360, getDragDropRecipient} = props;\r\n\t\tthis._callbackShowDefaultOutside360= showDefaultOutside360;\r\n\t\tthis._getDragDropRecipient = getDragDropRecipient;\r\n\t\tthis._handleClick=this._handleClick.bind(this);\r\n\t\tthis._setElementPosition= this._setElementPosition.bind(this);\r\n\t\tthis._onDragStart = this._onDragStart.bind(this);\r\n\t\tthis._onDragMove = this._onDragMove.bind(this);\r\n\t\tthis._onDragEnd = this._onDragEnd.bind(this);\r\n\t\tthis._setImage = this._setImage.bind(this);\r\n\t\tthis._getImageUrl = this._getImageUrl.bind(this);\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._imgRef = React.createRef();\r\n\t\tthis._offsets = null;\r\n\t\tthis._moving = false;\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis._iDragDropRecipient = this._getDragDropRecipient();\r\n\t\tIDragDropRecipient.validate(this._iDragDropRecipient);\r\n\t\tthis._efficientMoveCycle = new EfficientMoveCycle({element:this._elementRef.current, stopPropagation:false, preventDefault:true,\r\n\t\tonStart:this._onDragStart, onMove:this._onDragMove, onEnd:this._onDragEnd, friendlyXY:true});\r\n\t\tTooltip.register({\r\n\t\t\telement:this._elementRef.current, \r\n\t\t\ttext:\"Drag & drop to view street scene\"\r\n\t\t});\r\n\t}\r\n\t_onDragStart(e){\r\n\t\tconst element = this._elementRef.current;\r\n\t\tif(!element)return;\r\n\t\tthis._moving = false;\r\n\t\tconst absolutePosition = getAbsolute(element);\r\n\t\telement.classList.add('dragging');\r\n\t\tthis._setImage(this._imgRef.current, true);\r\n\t\tthis._offsets = [-element.offsetWidth/2, -element.offsetHeight/2];\r\n\t\tthis._setElementPosition(element, absolutePosition.left, absolutePosition.top);\r\n\t}\r\n\t_setImage(img, dragging){\r\n\t\timg.src = this._getImageUrl(dragging);\r\n\t}\r\n\t_getImageUrl(dragging){\r\n\t\treturn Urls.assets+(dragging?'icons/UI_Button_Walkmode_Selected.png':'icons/UI_Button_Walkmode.png');\r\n\t}\r\n\t_setElementPosition(element, x, y){\r\n\t\telement.style.left=`${x}px`;\r\n\t\telement.style.top=`${y}px`;\r\n\t}\r\n\t_onDragMove(e){\r\n\t\tthis._moving = true;\r\n\t\tthis._setElementPosition(this._elementRef.current, e.x+this._offsets[0], e.y+this._offsets[1]);\r\n\t\tthis._iDragDropRecipient.onDragging({type:DragDropType.STREET_VIEW_BUTTON, x:e.x, y:e.y});\r\n\t}\r\n\t_onDragEnd(e){\r\n\t\tconst element = this._elementRef.current;\r\n\t\telement.classList.remove('dragging');\r\n\t\tthis._setImage(this._imgRef.current, false);\r\n\t\telement.style.left=`0px`;\r\n\t\telement.style.top=`0px`;\r\n\t\tthis._iDragDropRecipient.onDrop({type:DragDropType.STREET_VIEW_BUTTON, x:e.x, y:e.y});\r\n\t}\r\n\tcomponentDidUpdate(previousProps){\r\n\t\t\r\n\t}\r\n\t_handleClick(e){\r\n\t\tif(this._moving)return;\r\n\t\tthis._callbackShowDefaultOutside360();\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"drag-drop-street-view-button\";\r\n\treturn ();\r\n\t}\r\n}\r\n","const WindowType={PLOT_DETAILED_INFORMATION:'plotDetailedInformation',\r\n\tPLOTS_SELECTION_MENU:'plotsSelectionMenu',\r\n\tHOUSE_TYPE_VIEWER:'houseTypeViewer',\r\n\tSITE_PLAN:'sitePlan'};\r\nexport default WindowType;\t\t","const WindowEventNames = {MAXIMIZED:'maximized', MINIMIZED:'minimized', FOCUSSED:'focussed',\r\n\tUNMINIMIZED:'unminimized', UNMAXIMIZED:'unmaximized', MOVED:'moved', CLOSED:'closed', \r\n\tWINDOW_CREATED:'windowcreated', WINDOW_DESTROYED:'windowdestroyed', DRAGGED:'dragged', \r\n\tDRAG_STARTED:'dragstarted', RESIZE_STARTED:'resizerstarted'};\r\nexport default WindowEventNames;","\r\nfunction styleFromObject(element, style)\r\n{\r\n for (var i in style)\r\n {\r\n var done = false;\r\n if (i.length > 2)\r\n {\r\n if (i.substring(0, 3) == '../')\r\n {\r\n var a = i.substring(3, i.length);\r\n element[a] = style[i];\r\n done = true;\r\n }\r\n }\r\n if (!done)\r\n element.style[i] = style[i];\r\n }\r\n}\r\nexport default styleFromObject;","import eventEnable from '../core/eventEnable';\r\nimport styleFromObject from '../ui_core/styleFromObject';\r\nimport EventNames from './WindowEventNames';\r\nimport './Windows.css';\r\nvar Windows = new (function () {\r\n const self = this;\r\n\tconst NEW_WINDOW_POSITION_OFFSET=20;\r\n this._instances = [];\r\n\tvar zIndexOffset=100;\r\n this.currentBounds = {minYPx: 0, maxYPx: 1200, minXPerc: 0, maxXPerc: 100};\r\n\teventEnable(this);\r\n this.getActive = function ()\r\n {\r\n\t\treturn self._instances.length<1?null:self._instances[self._instances.length-1];\r\n };\r\n this.getStartPosition = function (window)\r\n {\r\n\t\tlet mostActiveWindowNotThisWindow = null;\r\n\t\tconst parentElement = window.getParentElement();\r\n\t\tfor(var i = self._instances.length - 1; i>=0; i--){\r\n\t\t\tmostActiveWindowNotThisWindow = self._instances[i];\r\n\t\t\tif(parentElement!==undefined&&parentElement!==null){\r\n\t\t\t\tif(mostActiveWindowNotThisWindow.getParentElement()!==parentElement)\r\n\t\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tif(mostActiveWindowNotThisWindow!==window)break;\r\n\t\t}\r\n\t\tif(!mostActiveWindowNotThisWindow)return [0,0];\r\n\t\tconst otherWindowPosition = mostActiveWindowNotThisWindow.getPosition();\r\n\t\treturn [otherWindowPosition[0]+NEW_WINDOW_POSITION_OFFSET, otherWindowPosition[1]+NEW_WINDOW_POSITION_OFFSET];\r\n\t};\r\n window.addEventListener(\"resize\", function () {\r\n for (var i = 0; i < self._instances.length; i++)\r\n {\r\n self._instances[i]._screenResized();\r\n }\r\n }, false);\r\n\t\r\n this.divDragHeightTaskBarPx = document.documentElement.clientHeight / 12;\r\n\tthis._updateZIndices = function (){\r\n\t\tvar zIndex = zIndexOffset;\r\n\t\tfor (var i = 0; i < self._instances.length; i++)\r\n\t\t{\r\n\t\t\tself._instances[i]._setZIndex(zIndex);\r\n\t\t\tzIndex++;//xxx not right and need to wrap window and internal object in object inside instances.\r\n\t\t}\r\n\t};\r\n function isWindow(obj)\r\n {\r\n\t\tfor(var i=0; i\r\n\t\t\t\tthis._element.classList.add(c));\r\n\t\t\telse\r\n\t\t\t\tthis._element.classList.add(className);\r\n\t\t}\r\n\t\tthis._element.classList.add('icon-button');\r\n\t\tthis._element.disabled = disabled?true:false;\r\n\t\tthis._innerElement = document.createElement('div');\r\n\t\tthis._innerElement.classList.add('inner');\r\n\t\tthis._innerElement.addEventListener('click', this._handleClick);\r\n\t\tthis._iconElement = document.createElement('div');\r\n\t\tthis._iconElement.classList.add('icon');\r\n\t\tthis._textElement= document.createElement('div');\r\n\t\tthis._textElement.classList.add('text');\r\n\t\t\r\n\t\tthis._element.appendChild(this._innerElement);\r\n\t\tthis._innerElement.appendChild(this._iconElement);\r\n\t\tthis._innerElement.appendChild(this._textElement);\r\n\t\t\r\n\t\tif(!faIcon){\r\n\t\t\tthis._imgElement = document.createElement('img');\r\n\t\t\tthis._imgElement.src = imgUrl;\r\n\t\t\tthis._iconElement.appendChild(this._imgElement);\r\n\t\t}\r\n\t\telse{\r\n\t\t\tconst fontAwesomeIconFactory = React.createFactory(FontAwesomeIcon);\r\n\t\t\tReactDOM.render(fontAwesomeIconFactory(\r\n\t\t\t\t{ \tclassName:\"icon\",\r\n\t\t\t\t\ticon:faIcon\r\n\t\t\t\t}),\r\n\t\t\t\tthis._iconElement);\r\n\t\t}\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_handleClick(e){\r\n\t\tthis._callbackClick(e);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './MenuBar.css';\r\nimport WindowType from '../enums/WindowType';\r\nimport WindowEventNames from '../window/WindowEventNames';\r\nimport Windows from '../window/Windows';\r\nimport Urls from '../urls/Urls';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport { faCube, faHome, faBuilding} from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\nexport default class MenuBarWindowEntries {\r\n\tconstructor({element}){\r\n\t\tthis._element= element;\r\n\t\tthis._element.classList.add('window-entries');\r\n\t\tthis._windowCreated = this._windowCreated.bind(this);\r\n\t\tthis._windowDestroyed = this._windowDestroyed.bind(this);\r\n\t\tWindows.addEventListener(WindowEventNames.WINDOW_CREATED,this._windowCreated);\r\n\t\tWindows.addEventListener(WindowEventNames.WINDOW_DESTROYED,this._windowDestroyed);\r\n\t\tthis._mapWindowHashToEntry = new Map();\r\n\t}\r\n\t_windowCreated({window}){\r\n\t\tif(this._mapWindowHashToEntry.has(window.getHash()))\r\n\t\t\treturn;\r\n\t\tlet imgUrl ;\r\n\t\tswitch(window.getType()){\r\n\t\t\tcase WindowType.PLOT_DETAILED_INFORMATION:\r\n\t\t\t\timgUrl = Urls.assets+'icons/UI_Button_EnterHouse.png';\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\treturn;\r\n\t\t}\r\n\t\tconst iconButton = new IconButtonNonReact({imgUrl:imgUrl, \r\n\t\t\t onClick:window.toggleMinimize, className:undefined, disabled:false});\r\n\t\tthis._element.appendChild(iconButton.element);\r\n\t\tthis._mapWindowHashToEntry.set(window.getHash(), {\r\n\t\t\ticonButton\r\n\t\t});\r\n\t}\r\n\t_windowDestroyed({window}){\r\n\t\tconst entry = this._mapWindowHashToEntry.get(window.getHash());\r\n\t\tif(!entry)return;\r\n\t\tconst {iconButton}=entry;\r\n\t\tthis._element.removeChild(iconButton.element);\r\n\t\tthis._mapWindowHashToEntry.delete(window.getHash());\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './MenuBar.css';\r\nimport { faCube, faHome, faBuilding} from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport MenuType from '../enums/MenuType';\r\nimport Slider from './Slider';\r\nimport Star from './Star';\r\nimport InsertedMenuItemsHandler from '../ui_core/InsertedMenuItemsHandler';\r\nimport IconButton from './IconButton';\r\nimport ZoomButtons from './ZoomButtons';\r\nimport Urls from '../urls/Urls';\r\nimport DragDropStreetViewButton from './DragDropStreetViewButton';\r\nimport MenuBarWindowEntries from './MenuBarWindowEntries';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport eventEnable from '../core/eventEnable';\r\nimport FullScreen from '../ui_core/FullScreen';\r\nimport Handles from '../core/Handles';\r\nexport default class MenuBar extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {showMainMenu, onZoomChange, setFavouritesActive, zoomMin, zoomMax, showDefaultOutside360,\r\n\t\t\tgetDragDropRecipientForStreetViewButton, showDefault3d, showBrochures, showPlots, showHouseTypes,\r\n\t\t\tplaySiteVideo, showTwoDSitePlan, getConfiguration, showSuggestedSites} = props;\r\n\t\teventEnable(this);\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tthis._zoomMin=zoomMin;\r\n\t\tthis._zoomMax = zoomMax;\r\n\t\tthis._mapMenuTypeToHandles = new Map();\r\n\t\tthis._showMainMenu = showMainMenu;\r\n\t\tthis._callbackShowPlots = showPlots;\r\n\t\tthis._callbackShowDefaultOutside360 = showDefaultOutside360;\r\n\t\tthis._callbackShowDefault3d = showDefault3d;\r\n\t\tthis._callbackShowBrochures = showBrochures;\r\n\t\tthis._callbackShowHouseTypes= showHouseTypes;\r\n\t\tthis._callbackPlaySiteVideo= playSiteVideo;\r\n\t\tthis._callbackShowTwoDSitePlan= showTwoDSitePlan;\r\n\t\tthis._callbackShowSuggestedSites = showSuggestedSites;\r\n\t\tthis._zoomButtonsRef=React.createRef();\r\n\t\tthis._starRef=React.createRef();\r\n\t\tthis._callbackZoomChange = onZoomChange;\r\n\t\tthis._setFavouritesActive=setFavouritesActive;\r\n\t\tthis._getDragDropRecipientForStreetViewButton = getDragDropRecipientForStreetViewButton;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._handleClickButtonSite = this._handleClickButtonSite.bind(this);\r\n\t\tthis._handleClickButton3d = this._handleClickButton3d.bind(this);\r\n\t\tthis._handleClickButtonBrochures = this._handleClickButtonBrochures .bind(this);\r\n\t\tthis._handleSliderZoomValueChanged = this._handleSliderZoomValueChanged.bind(this);\r\n\t\tthis.getHandlesActivateButton = this.getHandlesActivateButton.bind(this);\r\n\t\tthis._handleClickButtonTwoDSitePlan = this._handleClickButtonTwoDSitePlan.bind(this);\r\n\t\tthis._onStarSelectedChange = this._onStarSelectedChange.bind(this);\r\n\t\tthis.setFavouritesActive = this.setFavouritesActive.bind(this);\r\n\t\tthis._handleWindowResized= this._handleWindowResized.bind(this);\r\n\t\tthis._handleClickButtonPlots= this._handleClickButtonPlots.bind(this);\r\n\t\tthis._dispatchIsHorizontalChanged = this._dispatchIsHorizontalChanged.bind(this);\r\n\t\tthis._menuTypeActiveChanged = this._menuTypeActiveChanged.bind(this);\r\n\t\tthis._getIsPortrait = this._getIsPortrait.bind(this);\r\n\t\tthis._handleClickButtonHouseTypes = this._handleClickButtonHouseTypes.bind(this);\r\n\t\tthis._handleClickButtonPlaySiteVideo = this._handleClickButtonPlaySiteVideo.bind(this);\r\n\t\tthis._handleClickButtonSuggestedSites = this._handleClickButtonSuggestedSites.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._windowEntriesRef = React.createRef();\r\n\t\tconst isHorizontal = this._getIsPortrait();\r\n\t\tthis.state = {visible:false, horizontal:isHorizontal, insertedMenuItems:[], insertedMenuItemsAtEnd:[]};\r\n\t\tthis._insertedMenuItemsHandler = new InsertedMenuItemsHandler(()=>this.state.insertedMenuItems, (insertedMenuItems)=>this.setState({insertedMenuItems:insertedMenuItems}));\r\n\t\tthis._insertedMenuItemsAtEndHandler = new InsertedMenuItemsHandler(()=>this.state.insertedMenuItemsAtEnd, (insertedMenuItemsAtEnd)=>this.setState({insertedMenuItemsAtEnd:insertedMenuItemsAtEnd}));\r\n\t\twindow.addEventListener('resize', this._handleWindowResized);\r\n\t\tsetTimeout(()=>this._dispatchIsHorizontalChanged(isHorizontal), 0);\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis._menuBarWindowEntries = new MenuBarWindowEntries({element:this._windowEntriesRef.current});\r\n\t}\r\n\tgetHandlesActivateButton(menuType){\r\n\t\tlet handles = this._mapMenuTypeToHandles.get(menuType);\r\n\t\tif(!handles) {\r\n\t\t\thandles = new Handles();\r\n\t\t\tthis._mapMenuTypeToHandles.set(menuType, handles);\r\n\t\t\thandles.addEventListener('change', (e)=>{\r\n\t\t\t\tthis._menuTypeActiveChanged(menuType, e.hasHandles);\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn handles;\r\n\t}\r\n\t_menuTypeActiveChanged(menuType, isActive){\r\n\t\tconst className = menuType.toLowerCase()+'-active';\r\n\t\tconst element = this._elementRef.current;\r\n\t\tif(isActive)element.classList.add(className);\r\n\t\telse element.classList.remove(className);\r\n\t}\r\n\t_getIsPortrait(){\r\n\t\treturn (document.documentElement.clientHeight/document.documentElement.clientWidth)>1;\r\n\t}\r\n\tget insertedMenuItemsHandler(){\r\n\t\treturn this._insertedMenuItemsHandler;\r\n\t}\r\n\tget insertedMenuItemsAtEndHandler(){\r\n\t\treturn this._insertedMenuItemsAtEndHandler;\r\n\t}\r\n\tsetFavouritesActive(active){\r\n\t\tthis._starRef.current.selected=active;\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t}\r\n\thide(){\r\n\t\tthis.setState({visible:false});\r\n\t}\r\n\t_handleWindowResized(){\r\n\t\tconst isHorizontal = this._getIsPortrait();\r\n\t\tconst changed = this.state.horizontal!==isHorizontal;\r\n\t\tthis._setHorizontal(isHorizontal);\r\n\t\t//if(changed)\r\n\t\t\tthis._dispatchIsHorizontalChanged(isHorizontal);\r\n\t}\r\n\t_dispatchIsHorizontalChanged(isHorizontal){\r\n\t\tthis.dispatchEvent({type:'isHorizontalChanged', isHorizontal:isHorizontal});\r\n\t}\r\n\t_setHorizontal(horizontal){\r\n\t\tthis.setState({horizontal:horizontal});\r\n\t}\r\n\tsetZoom(value){\r\n\t\tthis._zoomButtonsRef.current.setValue(value);\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.MENU_BAR;\r\n\t}\r\n\t_handleClickButtonSite(){\r\n\t\tthis._showMainMenu();\r\n\t}\r\n\t_handleSliderZoomValueChanged(value){\r\n\t\tthis._callbackZoomChange(value);\r\n\t}\r\n\t_handleClickButtonFullscreen(){\r\n\t\tFullScreen.toggle(document.documentElement);\r\n\t}\r\n\t_handleClickButton3d(){\r\n\t\tthis._callbackShowDefault3d();\r\n\t}\r\n\t_handleClickButtonBrochures(){\r\n\t\tthis._callbackShowBrochures();\r\n\t}\r\n\t_handleClickButtonPlots(){\r\n\t\tthis._callbackShowPlots();\r\n\t}\r\n\t_handleClickButtonHouseTypes(){\r\n\t\tthis._callbackShowHouseTypes();\r\n\t}\r\n\t_handleClickButtonPlaySiteVideo(){\r\n\t\tthis._callbackPlaySiteVideo();\r\n\t}\r\n\t_handleClickButtonTwoDSitePlan(){\r\n\t\tthis._callbackShowTwoDSitePlan();\r\n\t}\r\n\t_handleClickButtonSuggestedSites(){\r\n\t\tthis._callbackShowSuggestedSites();\r\n\t}\r\n\t_onStarSelectedChange(selected){\r\n\t\tthis._setFavouritesActive(selected);\r\n\t}/*\r\n\t\t\t\t*/\r\n\trender() {\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tlet className = \"menu-bar\"+(this.state.horizontal?' horizontal':'');\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\tconst iconButtonFullScreen = FullScreen.isSupported?(\r\n\t\t\t\t):null;\r\n\t\t\t\tconst buttonPlots = configuration.plotSelectionMenuEnabled?():null;\r\n\t\tconst playSiteVideoButton = configuration.siteVideoEnabled?():null;\r\n\t\tconst brochureMenu = configuration.brochuresMenuEnabled?():null;\r\n\t\tconst twoDSitePlanButton = configuration.twoDSitePlanEnabled?():null;\r\n\t\tconst suggestedSitesButton = AssetsManager.configuration.suggestedSitesEnabled?():null;\r\n\t\tconst buttonHouseTypes = configuration.houseTypesViewerEnabled?(\r\n\t\t\t\t):null;\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t\t{iconButtonFullScreen}\r\n\t\t\t\t\r\n\t\t\t\t\t{suggestedSitesButton}\r\n\t\t\t\t\t\t{buttonHouseTypes}\r\n\t\t\t\t\t\t\t{buttonPlots}\r\n\t\t\t\t\t{playSiteVideoButton}\r\n\t\t\t\t\t{twoDSitePlanButton}\r\n\t\t\t\t\r\n\t\t\t\t\t{brochureMenu}\r\n\t\t\t\t\t\r\n\t\t\t\t
    {this.state.insertedMenuItems}
    \t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t
    {this.state.insertedMenuItemsAtEnd}
    \r\n\t\t\t
    \r\n\t\t)\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './MainMenu.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faWalking, faFilter, faCity, faBook} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport MenuType from '../enums/MenuType';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nexport default class MainMenu extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {showMainMenu} = props;\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._showMainMenu = showMainMenu;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._handleClickFilter=this._handleClickFilter.bind(this);\r\n\t\tthis._handleClickSite = this._handleClickSite.bind(this);\r\n\t\tthis._handleClickBrochure = this._handleClickBrochure.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis.state = {visible:false};\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t\tthis._clickedOffManager.register();\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.MAIN_MENU;\r\n\t}\r\n\t_handleClickFilter(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.FILTERS);\r\n\t}\r\n\t_handleClickSite(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.SITE_PICKER);\r\n\t}\r\n\t_handleClickBrochure(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.BROCHURE_GENERATION);\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"main-menu menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+= \" visible\";\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t
    \r\n\t\t)\r\n\t}\r\n}","import enableBindingToOthers from '../mvvm/enableBindingToOthers';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport eventEnable from '../core/eventEnable';\r\nimport EfficientMoveCycle from '../ui_core/EfficientMoveCycle';\r\nimport FrequencyLimitedCallback from '../core/FrequencyLimitedCallback';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class ProgressBar{\r\n\tconstructor(props){\r\n\t\teventEnable(this);\r\n\t\tconst {propertyNameProgressProportion, propertyNameVisible, delayHide, model, clickEvent} = props;\r\n\t\tif(propertyNameProgressProportion===undefined||propertyNameProgressProportion===null)throwNotProvided('propertyNameProgressProportion');\r\n\t\tenableBindingToOthers(this);\r\n\t\tthis._handleProgressProportionChanged=this._handleProgressProportionChanged.bind(this);\r\n\t\tthis._handleVisibleChanged=this._handleVisibleChanged.bind(this);\r\n\t\tthis._touchedProgressBar=this._touchedProgressBar.bind(this);\r\n\t\t\r\n\t\tthis._startedTouchForwardReverse=this._startedTouchForwardReverse.bind(this);\r\n\t\tthis._moveTouchForwardReverse=this._moveTouchForwardReverse.bind(this);\r\n\t\tthis._endTouchForwardReverse=this._endTouchForwardReverse.bind(this);\r\n\t\tthis._updateProgressBarProportionFromTouch=this._updateProgressBarProportionFromTouch.bind(this);\r\n\t\t\r\n\t\tif(delayHide===undefined)this._delayHide = 2000;\r\n\t\telse if(delayHide==null) this._delayHide = 0;\r\n\t\telse this._delayHide =delayHide;\r\n\t\t\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('progress-bar');\r\n\t\tthis._bar = document.createElement('div');\r\n\t\tthis._bar.classList.add('bar');\r\n\t\tthis._bar.style.width = '0px';\r\n\t\tthis._element.appendChild(this._bar);\r\n\t\tthis._timeoutHide = null;\r\n\t\tthis._reachedHundredPercentAt = null;\r\n\t\tthis._propertyBindingProgressProportion = PropertyBindingFactory.standard(this, model, propertyNameProgressProportion, this._handleProgressProportionChanged);\r\n\t\tthis._propertyBindingVisible = PropertyBindingFactory.standard(this, model, propertyNameVisible, this._handleVisibleChanged);\r\n\t\tif(clickEvent){\r\n\t\t\tthis._element.addEventListener('mousedown', this._touchedProgressBar);\r\n\t\t\tthis._efficientMoveCycleTouchForwardReverse = new EfficientMoveCycle({element:this._element, stopPropagation:true, preventDefault:true,\r\n\t\t\t\tonStart:this._startedTouchForwardReverse, onMove:this._moveTouchForwardReverse, onEnd:this._endTouchForwardReverse, friendlyXY:true});\r\n\t\t\tthis._frequencyLimitedCallbackTouchForwardReverse = new FrequencyLimitedCallback({frequencyHz:4});\r\n\t\t}\r\n\t}\r\n\t_startedTouchForwardReverse(e){\r\n\t\tthis._frequencyLimitedCallbackTouchForwardReverse.cancel();\r\n\t\tthis._updateProgressBarProportionFromTouch(e);\r\n\t}\r\n\t_moveTouchForwardReverse(e){\r\n\t\tthis._touchedProgressBar(e);\r\n\t}\r\n\t_endTouchForwardReverse(){\r\n\t\t\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget barElement(){\r\n\t\treturn this._bar;\r\n\t}\r\n\t_handleProgressProportionChanged(value){\r\n\t\tif(value>=1)\r\n\t\t\tthis._reachedHundredPercentAt= new Date().getTime();\r\n\t\tthis._bar.style.width = (100*value)+'%';\r\n\t}\r\n\t_handleVisibleChanged(value){\r\n\t\tif(this._timeoutHide)\r\n\t\t\tclearTimeout(this._timeoutHide);\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse {\r\n\t\t\tlet delayHide = this._reachedHundredPercentAt!==null? this._delayHide -(new Date().getTime() - this._reachedHundredPercentAt):0;\r\n\t\t\tif(delayHide<0)delayHide=0;\r\n\t\t\tthis._timeoutHide = setTimeout(()=>{\r\n\t\t\t\tthis._element.classList.remove('visible');\r\n\t\t\t}, delayHide);\r\n\t\t}\r\n\t}\r\n\t_touchedProgressBar(e){\r\n\t\tthis._frequencyLimitedCallbackTouchForwardReverse.trigger(()=>this._updateProgressBarProportionFromTouch(e));\r\n\t}\r\n\t_updateProgressBarProportionFromTouch(e){\r\n\t\tconst {x, y} = e;\r\n\t\tconst barX = this._bar.getBoundingClientRect().left;\r\n\t\tlet dX = x - barX;\r\n\t\tlet proportion = dX / this._element.clientWidth;\r\n\t\tif(proportion<0)proportion=0;else if (proportion>1)proportion=1;\r\n\t\tthis.dispatchEvent({type:'clicked', proportion})\r\n\t}\r\n}\r\n","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Slider from './Slider';\r\nimport './VideoPlayer.css';\r\nimport Urls from '../urls/Urls';\r\nimport TemporalCallback from '../core/TemporalCallback';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport ProgressBar from '../views/ProgressBar';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport EfficientMoveCycle from '../ui_core/EfficientMoveCycle';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport FrequencyLimitedCallback from '../core/FrequencyLimitedCallback';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport ClickedOff from '../ui_core/ClickedOff';\r\nexport default class VideoPlayer {\r\n\tconstructor(props){\r\n\t\tconst {maximized, closeable, toggleMaximizeButton, forceFillWidth}=props;\r\n\t\tthis._forceFillWidth = forceFillWidth;\r\n\t\tthis._maximized = maximized;\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.play = this.play.bind(this);\r\n\t\tthis.stop = this.stop.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis._setPlayButtonImage = this._setPlayButtonImage.bind(this);\t\r\n\t\tthis._clickedPlayStopButton = this._clickedPlayStopButton.bind(this);\r\n\t\tthis._updateFillWidthHeight = this._updateFillWidthHeight.bind(this);\r\n\t\tthis._startedTouchForwardReverse = this._startedTouchForwardReverse.bind(this);\r\n\t\tthis._moveTouchForwardReverse = this._moveTouchForwardReverse.bind(this);\r\n\t\tthis._onVolumeSliderValueChanged = this._onVolumeSliderValueChanged.bind(this);\r\n\t\tthis._setVolumeVisible = this._setVolumeVisible.bind(this);\r\n\t\tthis._hideVolume = this._hideVolume.bind(this);\r\n\t\tthis._mouseActive = this._mouseActive.bind(this);\r\n\t\tthis._showUI = this._showUI.bind(this);\r\n\t\tthis._hideUI = this._hideUI.bind(this);\r\n\t\tthis._onVideoTimeUpdate = this._onVideoTimeUpdate.bind(this);\r\n\t\tthis._handleClickButtonFullscreen = this._handleClickButtonFullscreen.bind(this);\r\n\t\tthis._videoEnded = this._videoEnded.bind(this);\r\n\t\tthis._setVideoTimeFromTouchForwardReverseDistance = this._setVideoTimeFromTouchForwardReverseDistance.bind(this);\r\n\t\tthis._endTouchForwardReverse = this._endTouchForwardReverse.bind(this);\r\n\t\tthis._clickedProgressBar = this._clickedProgressBar.bind(this);\r\n\t\tthis._updateMaximized = this._updateMaximized.bind(this);\r\n\t\tthis._setHasVideo = this._setHasVideo.bind(this);\r\n\t\tthis._showVolume = this._showVolume.bind(this);\r\n\t\tthis._toggleVolume = this._toggleVolume.bind(this);\r\n\t\t\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('video-player');\r\n\t\tthis._videoElement = document.createElement('video');\r\n\t\tthis._volumeWrapperElement = document.createElement('div');\r\n\t\tthis._volumeWrapperElement.classList.add('volume-wrapper');\r\n\t\tthis._volumeWrapperInnerElement = document.createElement('div');\r\n\t\tthis._volumeWrapperInnerElement.classList.add('volume-wrapper-inner');\r\n\t\tthis._videoWrapperElement = document.createElement('div');\r\n\t\tthis._videoWrapperElement.appendChild(this._volumeWrapperElement);\r\n\t\tthis._videoWrapperElement.classList.add('video-wrapper');\r\n\t\tthis._element.appendChild(this._videoWrapperElement);\r\n\t\tthis._videoWrapperElement.appendChild(this._videoElement);\r\n\t\tthis._buttonPlayPause = document.createElement('button');\r\n\t\tthis._buttonPlayPause.classList.add('button-play-pause');\r\n\t\tthis._imgPlayPause = document.createElement('img');\r\n\t\tthis._buttonPlayPause.appendChild(this._imgPlayPause);\r\n\t\tthis._element.appendChild(this._buttonPlayPause);\r\n\t\tthis._playing = false;\r\n\t\tthis._buttonPlayPause.addEventListener('click', this._clickedPlayStopButton);\r\n\t\tthis._element.addEventListener('mousemove', this._mouseActive);\r\n\t\t\r\n\t\tif(closeable){\r\n\t\t\tthis._iconButtonNonReactClose = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Exit.png', className:'button-close', onClick:this.hide});\r\n\t\t\tthis._element.appendChild(this._iconButtonNonReactClose.element);\r\n\t\t}\r\n\t\t\t\t\r\n\t\tthis.__uiVisible = false;\r\n\t\texposeBinding(this, '_uiVisible', ()=>this._uiVisible, (value)=>this._uiVisible = value);\r\n\t\texposeBinding(this, '_proportion', ()=>this._proportion, (value)=>this._proportion = value);\r\n\t\tthis._progressBar = new ProgressBar({propertyNameProgressProportion:'_proportion', propertyNameVisible:'_uiVisible', delayHide:false, model:this,\r\n\t\t\tclickEvent:true});\r\n\t\t\tthis._progressBar.addEventListener('clicked', this._clickedProgressBar);\r\n\t\tthis._temporalCallbackHideUI = new TemporalCallback({callback:this._hideUI, delay:2000});\r\n\t\tthis._videoWrapperElement.appendChild(this._progressBar.element);\r\n\t\tthis._resizeWatcher = new ResizeWatcher({element:this._element, onResized:this._updateFillWidthHeight});\r\n\t\tthis._videoElement.addEventListener('timeupdate', this._onVideoTimeUpdate, false);\r\n\t\tthis._videoElement.addEventListener('ended', this._videoEnded, false);\r\n\t\tthis._efficientMoveCycleTouchForwardReverse = new EfficientMoveCycle({\r\n\t\t\telement:this._videoElement, stopPropagation:false, preventDefault:true,\r\n\t\t\tonStart:this._startedTouchForwardReverse, onMove:this._moveTouchForwardReverse, \r\n\t\t\tonEnd:this._endTouchForwardReverse, friendlyXY:true});\r\n\t\tthis._frequencyLimitedCallbackTouchForwardReverse = new FrequencyLimitedCallback({frequencyHz:4});\r\n\t\tthis._updateMaximized();\r\n\t\tthis._setHasVideo(false);\r\n\t\tthis._iconButtonVolume = new IconButtonNonReact({\r\n\t\t\tclassName:\"button-volume\",\r\n\t\t\timgUrl:Urls.assets+'icons/Volume.png',\r\n\t\t\tonClick:this._toggleVolume});\r\n\t\tthis._videoWrapperElement.appendChild(this._iconButtonVolume.element);\r\n\t\tif(toggleMaximizeButton){\r\n\t\t\t\r\n\t\t\tthis._iconButtonFullScreen = new IconButtonNonReact({\r\n\t\t\t\tclassName:\"button-fullscreen\",\r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Fullscreen.png',\r\n\t\t\t\tonClick:this._handleClickButtonFullscreen});\r\n\t\t\tthis._videoWrapperElement.appendChild(this._iconButtonFullScreen.element);\r\n\t\t}\r\n\t\tthis._volumeSliderRef = React.createRef();\r\n\t\tconst sliderFactory = React.createFactory(Slider);\r\n\t\tthis._volumeWrapperElement.appendChild(this._volumeWrapperInnerElement);\r\n\t\tReactDOM.render(sliderFactory(\r\n\t\t\t{ \r\n\t\t\t\tref:this._volumeSliderRef, \r\n\t\t\t\tmin:0, max:1, initial:0, \r\n\t\t\t\tonValueChanged:this._onVolumeSliderValueChanged, \r\n\t\t\t\tisHorizontal:false\r\n\t\t\t}),\r\n\t\t\tthis._volumeWrapperInnerElement);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({\r\n\t\t\telement:this._volumeWrapperElement, \r\n\t\t\thide:this._hideVolume});\r\n\t\t\r\n\t}\r\n\t_toggleVolume(){\r\n\t\tif(this._volumeShowing)\r\n\t\t\tthis._hideVolume();\r\n\t\telse \r\n\t\t\tthis._showVolume();\r\n\t}\r\n\t_showVolume(){\r\n\t\tthis._clickedOffVolumeHandle&&this._clickedOffVolumeHandle.dispose();\r\n\t\tthis._clickedOffVolumeHandle = this._clickedOffManager.register();\r\n\t\tthis._setVolumeVisible(true);\r\n\t}\r\n\t_hideVolume(){\r\n\t\tthis._clickedOffVolumeHandle&&this._clickedOffVolumeHandle.dispose();\r\n\t\tthis._setVolumeVisible(false);\r\n\t}\r\n\t_setVolumeVisible(value){\r\n\t\tif(value)\r\n\t\t\tthis._volumeWrapperElement.classList.add('visible');\r\n\t\telse \r\n\t\t\tthis._volumeWrapperElement.classList.remove('visible');\r\n\t\tthis._volumeShowing= value;\r\n\t}\r\n\t_onVolumeSliderValueChanged(e){\r\n\t\tconst proportionVolume = 1-e;\r\n\t\tthis._videoElement.volume=proportionVolume;\r\n\t}\r\n\t_setHasVideo(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('has-video');\r\n\t\telse \r\n\t\t\tthis._element.classList.remove('has-video');\r\n\t}\r\n\t_handleClickButtonFullscreen(){\r\n\t\tthis._maximized = !this._maximized;\r\n\t\tthis._updateMaximized();\r\n\t}\r\n\t_updateMaximized(){\r\n\t\t\r\n\t\tif(this._maximized)\r\n\t\t\tthis._element.classList.add('maximized');\r\n\t\telse \r\n\t\t\tthis._element.classList.remove('maximized');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_clickedProgressBar(e){\r\n\t\tthis._videoElement.currentTime = e.proportion*this._videoElement.duration\r\n\t}\r\n\t_startedTouchForwardReverse(e){\r\n\t\tthis._touchDownNotCancelledYet = true;\r\n\t\tthis._hideUISuspended = true;\r\n\t\tthis._startTouchPosition = [e.x, e.y];\r\n\t\tthis._videoProportionAtStartOfTouch = this._videoElement.currentTime/ this._videoElement.duration;\r\n\t}\r\n\t_moveTouchForwardReverse(e){\r\n\t\tthis._touchDownNotCancelledYet = false;\r\n\t\tconst distanceX = e.x - this._startTouchPosition[0];\r\n\t\tthis._frequencyLimitedCallbackTouchForwardReverse.trigger(()=>this._setVideoTimeFromTouchForwardReverseDistance(distanceX));\r\n\t}\r\n\t_setVideoTimeFromTouchForwardReverseDistance(distanceX){\r\n\t\tconst dProportion = distanceX / this._videoElement.offsetWidth;\r\n\t\tlet newProportion = (this._videoProportionAtStartOfTouch+dProportion);\r\n\t\tif(newProportion>1)newProportion = 1;\r\n\t\telse if(newProportion<0)newProportion = 0;\r\n\t\tthis._videoElement.currentTime = newProportion*this._videoElement.duration;\r\n\t}\r\n\t_endTouchForwardReverse(e){\r\n\t\tthis._hideUISuspended = false;\r\n\t\tif(this._touchDownNotCancelledYet){\r\n\t\t\tif(!this._volumeShowing)\r\n\t\t\t\tthis._clickedPlayStopButton();\r\n\t\t\tClickedOff.triggerClicked(e);\r\n\t\t}\r\n\t\tthis._temporalCallbackHideUI.trigger();\r\n\r\n\t}\r\n\t_updateFillWidthHeight(){\r\n\t\tconst videoAspectRatio = this._videoElement.videoWidth/this._videoElement.videoHeight;\r\n\t\tconst elementAspectRatio = this._element.offsetWidth/this._element.offsetHeight;\r\n\t\tconst fillHeight = (!this._forceFillWidth|this._maximized)&&videoAspectRatio<=elementAspectRatio;\r\n\t\tif(fillHeight)this._element.classList.add('fill-height');\r\n\t\telse this._element.classList.remove('fill-height');\r\n\t}\r\n\tget _uiVisible(){\r\n\t\treturn this.__uiVisible;\r\n\t}\r\n\tset _uiVisible(value){\r\n\t\tif(this.__uiVisible===value)return;\r\n\t\tthis.__uiVisible = value;\r\n\t\tthis.bindingsHandler.changed('_uiVisible', this.__uiVisible);\r\n\t\tif(value)this._element.classList.add('ui-visible');\r\n\t\telse this._element.classList.remove('ui-visible');\r\n\t}\r\n\tget _proportion(){\r\n\t\treturn this.__proportion;\r\n\t}\r\n\tset _proportion(value){\r\n\t\tif(this.__proportion===value)return;\r\n\t\tthis.__proportion = value;\r\n\t\tthis.bindingsHandler.changed('_proportion', this.__proportion);\r\n\t}\r\n\t_mouseActive(){\r\n\t\tthis._showUI();\r\n\t}\r\n\t_showUI(){\r\n\t\tthis._uiVisible = true;\r\n\t\tsetTimeout(this._updateFillWidthHeight, 0);\r\n\t\tthis._temporalCallbackHideUI.trigger();\r\n\t}\r\n\t_hideUI(){\r\n\t\tif(this._hideUISuspended)return;\r\n\t\tthis._uiVisible = false;\r\n\t}\r\n\t_clickedPlayStopButton(){\r\n\t\tif(!this._uiVisible)return;\r\n\t\tif(this._playing)\r\n\t\t\tthis.stop();\r\n\t\telse this._play();\r\n\t}\r\n\tplay({url}){\r\n\t\tthis._setVisible(true);\r\n\t\tthis._setHasVideo(url?true:false);\r\n\t\tthis._videoElement.src = url;\r\n\t\tthis._play();\r\n\t}\r\n\tload({url}){\r\n\t\tthis._setVisible(true);\r\n\t\tthis._setHasVideo(url?true:false);\r\n\t\tthis._videoElement.src = url;\r\n\t\tthis._setPlayButtonImage();\r\n\t}\r\n\t_play(){\r\n\t\tthis._videoElement.play();\r\n\t\tthis._playing = true;\r\n\t\tthis._setPlayButtonImage();\r\n\t}\r\n\tstop(){\r\n\t\tthis._videoElement.pause();\r\n\t\tthis._playing = false;\r\n\t\tthis._setPlayButtonImage();\r\n\t}\r\n\thide(){\r\n\t\tthis.stop();\r\n\t\tthis._setVisible(false);\r\n\t}\r\n\t_setPlayButtonImage(playing){\r\n\t\tthis._imgPlayPause.src= this._playing?(Urls.assets+'icons/UI_Button_Pause.png'):(\r\n\t\t\tUrls.assets+'icons/UI_Button_Play.png'\r\n\t\t);\r\n\t}\r\n\t_setVisible(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse\r\n\t\t\tthis._element.classList.remove('visible');\r\n\t}\r\n\t_onVideoTimeUpdate(e){\r\n\t\tconst video = this._videoElement;\r\n\t\tconst proportion = video.currentTime/ video.duration;\r\n\t\tthis._proportion= proportion;\r\n\t}\r\n _videoEnded(e) {\r\n\t\tthis.stop();\r\n\t\tthis._videoElement.currentTime=0;\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faWalking, faFilter} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport Once from '../core/Once';\r\nimport ParameterError from '../errors/ParameterError';\r\nexport default class MenuManager extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {outerElementRef}=props;\r\n\t\tthis._outerElementRef = outerElementRef;\r\n\t\tconst seenMenuTypes =[];\r\n\t\tthis._currentMenusShowing= [];\r\n\t\tthis._mapMenuTypeToMenu = new Map();\r\n\t\tthis._menuHistory = [];\r\n\t\tthis.showMenuByType = this.showMenuByType.bind(this);\r\n\t\tthis._showMenuByType = this._showMenuByType.bind(this);\r\n\t\tthis._showMenuWithLoopBreak = this._showMenuWithLoopBreak.bind(this);\r\n\t\tthis._showMenu=this._showMenu.bind(this);\r\n\t\tthis.close = this.close.bind(this);\r\n\t\tthis._close = this._close.bind(this);\r\n\t\tthis.showMe= this.showMe.bind(this);\r\n\t\tthis.back = this.back.bind(this);\r\n\t\tthis._closeOnce = new Once(this._close);\r\n\t\tthis._showMenuOnce = new Once(this._showMenu);\r\n\t\tthis.state ={hasBacks:false};\r\n\t}\r\n\tback(){\r\n\t\tif(this._menuHistory.length<2){\r\n\t\t\tthis.close(true);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis.showMe(this._menuHistory.splice(this._menuHistory.length-2, 2)[0]);\r\n\t}\r\n\tclose(keepHistory){\r\n\t\tthis._closeOnce.trigger(keepHistory);\r\n\t}\r\n\t_close(keepHistory){\r\n\t\tthis._currentMenusShowing.forEach((currentMenuShowing)=>currentMenuShowing.hide());\r\n\t\tthis._currentMenusShowing=[];\r\n\t\tif(!keepHistory){\r\n\t\t\tthis._menuHistory=[];\r\n\t\t\tthis._setHasBacks(false);\r\n\t\t}\r\n\t}\r\n\t_setHasBacks(value){\r\n\t\tconst classList = this._outerElementRef?.current?.classList;\r\n\t\tif(!classList)return;\r\n\t\tif(value)classList.add('back-visible');\r\n\t\telse classList.remove('back-visible');\r\n\t}\r\n\tshowMenuByType(menuType){\r\n\t\tthis._showMenuByType(menuType);\r\n\t}\r\n\tshowMe(menu){\r\n\t\tthis._showMenuWithLoopBreak(menu);\r\n\t}\r\n\t_showMenuByType(menuType){\r\n\t\tif(!this._mapMenuTypeToMenu.has(menuType))\r\n\t\t\tthrow new Error(`Has no child of menuType \"${menuType}\"`);\r\n\t\tconst menu = this._mapMenuTypeToMenu.get(menuType).ref.current;\r\n\t\tthis._showMenuWithLoopBreak(menu);\r\n\t}\r\n\t_showMenuWithLoopBreak(menu){\r\n\t\tthis._showMenuOnce.trigger(menu);\r\n\t}\r\n\t_showMenu(menu){\r\n\t\tif(this._currentMenusShowing.length>0)\r\n\t\t\tthis.close(true);\r\n\t\tmenu.show();\r\n\t\tthis._currentMenusShowing.push(menu);\t\r\n\t\tif(this._menuHistory.length<1){\r\n\t\t\tthis._setHasBacks(false);\r\n\t\t\tthis._menuHistory.push(menu);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst sameAsLast = this._menuHistory[this._menuHistory.length-1]===menu;\r\n\t\tif(!sameAsLast){\r\n\t\t\tthis._menuHistory.push(menu);\r\n\t\t}\r\n\t\tthis._setHasBacks(!sameAsLast);\r\n\t}\r\n\tcomponentDidMount() {\t\t\r\n\t\tlet index=0;\r\n\t\tthis.props.children.forEach((childMenu)=>{\r\n\t\t\tconst menuType = childMenu.ref.current.menuType;\r\n\t\t\tif(childMenu.ref===null)\r\n\t\t\t\tthrow new Error(`Child menu at index ${index} with type ${childMenu.type.name} had no ref`);\r\n\t\t\tif(menuType===undefined||menuType===null)\r\n\t\t\t\tthrow new Error(`Child menu with type ${childMenu.type.name} had no menuType property`);\r\n\t\t\tthis._mapMenuTypeToMenu.set(menuType, childMenu);\r\n\t\t\tindex++;\r\n\t\t\tconst childMenuInstance = childMenu.ref.current;\r\n\t\t\tconst setIMenuManager=childMenuInstance.setIMenuManager;\r\n\t\t\tif(setIMenuManager===undefined||setIMenuManager===null)\r\n\t\t\t\tthrow new Error(`Child menu with type ${childMenu.type.name} had no setIMenuManager method`);\r\n\t\t\tchildMenuInstance.setIMenuManager(this);\r\n\t\t });\r\n\t}\r\n\trender() {\r\n\t\tconst className = 'menu-manager '+(this.state.hasBacks?\"back-visible\":\"\");\r\n\t\treturn this.props.children;\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './HouseTypeFilter.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport MenuType from '../enums/MenuType';\r\nimport Option from '../choices/Option';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport Once from '../core/Once';\r\nexport default class HouseTypeFilter extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {onSelectedOptionsChange} = props;\r\n\t\tthis._checkboxFilter=React.createRef();\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.setFromWhatAreYouLookingForViewModel= this.setFromWhatAreYouLookingForViewModel.bind(this);\r\n\t\tthis._setHouseTypeViewModelsToShow= this._setHouseTypeViewModelsToShow.bind(this);\r\n\t\tthis.filterPlots = this.filterPlots.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis._updateOptions= this._updateOptions.bind(this);\r\n\t\t\r\n\t\tthis._handleSelectedOptionsChanged=this._handleSelectedOptionsChanged.bind(this);\r\n\t\t\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.state = {options:[], visible:false, siteJson:null};\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis._selectedOptionsChangedOnce = new Once(onSelectedOptionsChange);\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tfilterPlots(plotsArray){\r\n\t\tconst houseTypeViewModelsToShow = this._checkboxFilter.current.getCheckedValues();\r\n\t\tconst houseTypesToShow= [];\r\n\t\thouseTypeViewModelsToShow.forEach(houseTypeViewModelToShow=>{\r\n\t\t\thouseTypeViewModelToShow.houseTypesWithSameName.forEach(houseType=>houseTypesToShow.push(houseType));\r\n\t\t});\r\n\t\tif(houseTypesToShow.length<1)return plotsArray;\r\n\t\treturn plotsArray.filter(plot=>houseTypesToShow.indexOf(plot.houseType)>=0);\r\n\t}\r\n\tclear(){\r\n\t\tthis._houseTypesViewModel?.entries.forEach(houseTypeViewModel=>houseTypeViewModel.selected = false);\r\n\t\tthis._checkboxFilter.current.clear();\r\n\t}\r\n\tsetFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel){\r\n\t\tconst houseTypeViewModels = whatAreYouLookingForViewModel.houseTypes;\r\n\t\tif(!houseTypeViewModels)return;\r\n\t\tthis._setHouseTypeViewModelsToShow(houseTypeViewModels);\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.HOUSE_TYPE_FILTER;\r\n\t}\r\n\tget isApplied(){\r\n\t\treturn this._checkboxFilter.current.isApplied;\r\n\t}\r\n\tload(houseTypesViewModel, siteJson){\r\n\t\tthis.setState({siteJson});\r\n\t\tthis._houseTypesViewModel = houseTypesViewModel;\r\n\t\tthis._updateOptions();\r\n\t}\r\n\t_handleSelectedOptionsChanged(o){\r\n\t\tconsole.log(o);\r\n\t\tconsole.log('_handleSelectedOptionsChanged');\r\n\t\tconst houseTypesToShow= [];\r\n\t\tconst houseTypeViewModelsToShow = this._checkboxFilter.current.getCheckedValues();\r\n\t\tconsole.log(houseTypeViewModelsToShow);\r\n\t\tthis._setHouseTypeViewModelsToShow(houseTypeViewModelsToShow);\r\n\t}\r\n\t_setHouseTypeViewModelsToShow(houseTypeViewModelsToShow){\r\n\t\thouseTypeViewModelsToShow.forEach(houseTypeViewModelToShow=>{\r\n\t\t\thouseTypeViewModelToShow.selected = true;\r\n\t\t});\r\n\t\tthis._houseTypesViewModel.entries\r\n\t\t\t.filter(houseTypeViewModel=>houseTypeViewModelsToShow.indexOf(houseTypeViewModel)<0)\r\n\t\t\t.forEach(houseTypeViewModel=>houseTypeViewModel.selected = false);\r\n\t}\r\n\t_updateOptions(){\r\n\t\tconst options = this._houseTypesViewModel.entries.map((houseTypeViewModel)=>{\r\n\t\t\tconst option = new Option({text:(
    {houseTypeViewModel.name} 
    ),\r\n\t\t\t\tvalue:houseTypeViewModel});\r\n\t\t\thouseTypeViewModel.addEventListener('selectedchanged', ()=>{\r\n\t\t\t\tconst checkboxOption = this._checkboxFilter.current.getCheckboxOptions()\r\n\t\t\t\t.map(checkboxOption=>checkboxOption.ref.current)\r\n\t\t\t\t.filter(checkboxOption=>{\r\n\t\t\t\t\tconst value= checkboxOption.value;\r\n\t\t\t\t\treturn value===houseTypeViewModel;\r\n\t\t\t\t})[0];\r\n\t\t\t\tcheckboxOption.isChecked = houseTypeViewModel.selected;\r\n\t\t\t\tthis._selectedOptionsChangedOnce.trigger();\r\n\t\t\t});\r\n\t\t\treturn option;\r\n\t\t});\r\n\t\tthis._checkboxFilter.current.setOptions(options);\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"house-type-filter menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import ExtendableError from './ExtendableError';\r\nexport default class TypeError extends ExtendableError {\r\n\r\n}","import TypeError from '../errors/TypeError';\r\nimport NotImplementedError from '../errors/NotImplementedError';\r\nexport default class PlotFilterer{\r\n\tconstructor(props){\r\n\t\tthis._filters = [];\r\n\t}\r\n\taddPlotFilter(plotFilter){\r\n\t\tconst filterPlots = plotFilter.filterPlots;\r\n\t\tif(filterPlots===undefined||filterPlots===null)\r\n\t\t\tthrow new NotImplementedError(`The object of type ${plotFilter.constructor.name} did not have a .filterPlots method`);\r\n\t\tif(typeof(filterPlots)!=='function')\r\n\t\t\tthrow new TypeError('${plotFilter.constructor.name}.filterPlots was not a function');\r\n\t\tthis._filters.push(plotFilter);\r\n\t}\r\n\tget filtersApplied(){\r\n\t\tconst filters = this._filters;\r\n\t\tfor(var i=0; ifilter.clear());\r\n\t}\r\n\tfilterPlots(plots){\r\n\t\tthis._filters.forEach((filter)=>{\r\n\t\t\tplots = filter.filterPlots(plots);\r\n\t\t});\r\n\t\treturn plots;\t\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './CheckboxFilterOption.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class KeyboardButton extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {value, icon, imgUrl, text, onClick}=props;\r\n\t\tif(value===undefined)throwNotProvided('value');\r\n\t\tthis._value = value;\r\n\t\t\r\n\t\tconst textNotProvided=(text===undefined||text===null);\r\n\t\tconst iconNotProvided = (icon===undefined||icon===null);\r\n\t\tconst imgNotProvided = (imgUrl===undefined||imgUrl ===null);\r\n\t\tif(textNotProvided&&iconNotProvided&&imgNotProvided)throwNotProvided('text or icon or imgUrl');\r\n\t\tif(!textNotProvided){\r\n\t\t\tif(typeof(text)!=='string')throwNotOfType('text', 'string');\r\n\t\t}\r\n\t\tthis._text = text;\r\n\t\tthis._icon = icon;\r\n\t\tthis._imgUrl = imgUrl;\r\n\t\t\r\n\t\tif(onClick===undefined||onClick===null)\r\n\t\t\tthrowNotProvided('onClick');\r\n\t\t\r\n\t\tif(typeof(onClick)!=='function')\r\n\t\t\tthrowNotOfType('onClick', 'function');\r\n\t\tthis._callbackClick = onClick;\r\n\t\t\r\n\t\tthis._handleClick = this._handleClick.bind(this);\r\n\t}\r\n\t_handleClick(){\r\n\t\tthis._callbackClick(this._value);\r\n\t}\r\n\trender() {\r\n\t\tconst content = this._text?this._text:(\r\n\t\tthis._imgUrl? ():());\r\n\t\treturn ();\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './NumericalKeyboard.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport {faBackspace} from '@fortawesome/free-solid-svg-icons';\r\nimport KeyboardButton from './KeyboardButton';\r\nimport HashSource from '../core/HashSource';\r\nimport Urls from '../urls/Urls';\r\nconst {throwNotProvided} = ParameterErrors;\r\nexport default class NumericalKeyboard extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {onKey}=props;\r\n\t\tif(onKey===undefined||onKey===null)throwNotProvided('onKey');\r\n\t\tthis._onKey=onKey;\r\n\t\tthis._handleClickKeyboardButton = this._handleClickKeyboardButton.bind(this);\r\n\t\tthis._createButton = this._createButton.bind(this);\r\n\t}\r\n\t_handleClickKeyboardButton(key){\r\n\t\tthis._onKey(key);\r\n\t}\r\n\t_createButton(text, imgUrl, value, additionalClasses){\r\n\t\tconst className = \"keyboard-button-wrapper\"+(additionalClasses?(' '+additionalClasses):'');\r\n\t\treturn (
    \r\n\t\t\t\t\t
    );\r\n\t}\r\n\trender() {\r\n\t\tconst keyboardButtons = [];\r\n\t\t/*\r\n\t\tfor(var i=7; i>0; i-=3){\r\n\t\t\tfor(var j=i; j));\r\n\t\tkeyboardButtons.push(this._createButton(String(0), null, 48));\r\n\t\t//keyboardButtons.push((
    ));\r\n\t\tkeyboardButtons.push(this._createButton(null, Urls.assets+'icons/UI_Button_Filter_Clear.png', 8, 'backspace'));\r\n\t\treturn (
    \r\n\t\t\t{keyboardButtons}\r\n\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './PlotSearch.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport MenuType from '../enums/MenuType';\r\nimport Option from '../choices/Option';\r\nimport Once from '../core/Once';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport NumericalKeyboard from './NumericalKeyboard';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nexport default class PlotSearch extends Component {\r\n\tstatic get _MAX_LENGTH(){\r\n\t\treturn 5;\r\n\t}\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {bedroomsFilterSettings, selectedPlot, onSelectedOptionsChange}=props;\r\n\t\tthis._callbackSelectedPlot=selectedPlot;\r\n\t\tthis._selectedOptionsChangedOnce = new Once(onSelectedOptionsChange);\r\n\t\tthis._checkboxFilter=React.createRef();\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._input = React.createRef();\r\n\t\tthis._options = [];\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.clear = this.clear.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._handleInput = this._handleInput.bind(this);\r\n\t\tthis._handleKey= this._handleKey.bind(this);\r\n\t\tthis._allowedKeyCodes=[8, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57]\r\n\t\tthis._units = null;\r\n\t\tthis.state = {options:[], visible:false, plotNumberStr:'', numberValid:true};\r\n\t\tthis._clickedOffHandle=null;\r\n\t}\r\n\tfilterPlots(plotsArray){\r\n\t\tconsole.log('filtering on selected plot');\r\n\t\tconsole.log(this._selectedPlot);\r\n\t\tif(this._selectedPlot)\r\n\t\t\treturn plotsArray.filter(plot=>this._selectedPlot ===plot);\r\n\t\treturn plotsArray;\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tif(this._callbackClose){\r\n\t\t\tthis._callbackClose();\r\n\t\t\tthis._callbackClose=null;\r\n\t\t}\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.PLOT_SEARCH;\r\n\t}\r\n\tload(units){\r\n\t\tthis._units = units;\r\n\t\tthis.clear();\r\n\t}\r\n\tclear(){\r\n\t\tif(this._selectedOptionsChangedOnce.triggered)return;\r\n\t\tthis.setState({plotNumberStr:''});\r\n\t\tthis._selectedPlot = null;\r\n\t}\r\n\t_handleInput(e){\r\n\t\te=e.nativeEvent;\r\n\t\tswitch(e.inputType){\r\n\t\t\tcase 'deleteContentBackward':\r\n\t\t\t\tthis._handleKey(8);\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'insertText':\r\n\t\t\t\tthis._handleKey(e.data.charCodeAt(0));\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\t_handleKey(keyCode){\r\n\t\tconst allowedKey = this._allowedKeyCodes.indexOf(keyCode)>=0;\r\n\t\tif(!allowedKey)\r\n\t\t\treturn;\r\n\t\tlet plotNumberStr=this.state.plotNumberStr;\r\n\t\tif(plotNumberStr===null)plotNumberStr='';\r\n\t\tif(keyCode===8){\r\n\t\t\tif(plotNumberStr.length<1)return;\r\n\t\t\tplotNumberStr = plotNumberStr.substring(0, plotNumberStr.length-1);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tconst hasSpace = this.state.plotNumberStr.length0?parseInt(plotNumberStr):null;\r\n\t\tconst plot = plotNumber===null?null:this._units.getPlotByNumber(plotNumber);\r\n\t\tconst plotValidAndNotAffordable=(plot!==undefined&&plot!==null)&&(!plot.affordable);\r\n\t\tconst numberValid = (plotNumberStr==='')||plotValidAndNotAffordable;\r\n\t\tthis.setState({plotNumberStr:plotNumberStr, numberValid:numberValid});\r\n\t\tthis._callbackSelectedPlot(plotValidAndNotAffordable?plot:null);\r\n\t\tconst previousSelectedPlot = this._selectedPlot;\r\n\t\tif(plotValidAndNotAffordable){\r\n\t\t\tthis._selectedPlot = plot;\r\n\t\t}\r\n\t\telse{\r\n\t\t\tthis._selectedPlot = null;\r\n\t\t}\r\n\t\tif(previousSelectedPlot!==this._selectedPlot)\r\n\t\t\tthis._selectedOptionsChangedOnce.trigger();\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"plot-search menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+= \" visible\";\r\n\t\tlet classNamePlotNumber ='plot-number';\r\n\t\tclassNamePlotNumber+=this.state.numberValid?\" valid\":\" invalid\";\r\n\t\treturn (
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    Plot
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './MouseBlocker.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class MouseBlocker extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst{spinnerHandles}=props;\r\n\t\tthis._spinnerHandles = spinnerHandles;\r\n\t\tthis._spinnerHandlesChanged = this._spinnerHandlesChanged.bind(this);\r\n\t\tspinnerHandles.addEventListener('change', this._spinnerHandlesChanged);\r\n\t\tthis._handleClick= this._handleClick.bind(this);\r\n\t\tthis.state={visible:false};\r\n\t}\r\n\t_spinnerHandlesChanged(e){\r\n\t\tthis.setState({visible:e.hasHandles});\r\n\t}\r\n\t_handleClick(e){\r\n\t\tif(!e)e=window.event;\r\n\t\te.stopPropagation&&e.stopPropagation();\r\n\t\te.preventDefault&&e.preventDefault();\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"mouse-blocker\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Menu.css';\r\nimport './IconButton.css';\r\nimport './SitePicker.css';\r\nimport Select from 'react-select';\r\nimport MenuType from '../enums/MenuType';\r\nimport IconButton from './IconButton';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nexport default class SitePicker extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {\r\n\t\t\tsetSite\r\n\t\t} = props;\r\n\t\tthis._setSite = setSite;\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._handleChange = this._handleChange.bind(this);\r\n\t\tthis.setSelectedSiteName = this.setSelectedSiteName.bind(this);\r\n\t\tthis._options = null;\r\n\t\tthis.state = {selectedOption:null, visible:false, options:[]};\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tsetSelectedSiteName(value){\r\n\t\tthis.setState({selectedOption:this._options.filter(option=>option.value===value)[0]});\r\n\t}\r\n\tload(sites){\r\n\t\tthis._options = sites.getArray().map((site)=>{return {value:site.name, label:site.name};});\r\n\t\tthis.setState({options:this._options});\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.SITE_PICKER;\r\n\t}\r\n\t_handleChange(e){\r\n\t\tconst {value }= e;\r\n\t\tthis._setSite(value);\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"site-picker menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t\t
    )\r\n\t}\r\n}","function getViewportDimensions(){\r\n\tif(typeof document.documentElement !='undefined' &&\r\n\ttypeof document.documentElement.clientWidth !='undefined' &&\r\n\tdocument.documentElement.clientWidth!=0)\r\n\t\treturn [document.documentElement.clientWidth,document.documentElement.clientHeight];\r\n\tif(typeof window.innerWidth != 'undefined')\r\n\t\treturn [window.innerWidth,window.innerHeight];\r\n\tvar body = document.getElementsByTagName('body')[0];\r\n\treturn [body.clientWidth, body.clientHeight];\r\n}\r\nexport default getViewportDimensions;","const EdgeLocation={ TOP_LEFT:'top-left',TOP_CENTER:'top-center', TOP_RIGHT:'top-right', MIDDLE_RIGHT:'middle-right',\r\nBOTTOM_RIGHT:'bottom-right', BOTTOM_CENTER:'bottom-center', BOTTOM_LEFT:'bottom-lefft', MIDDLE_LEFT:'middle-left'};\r\nexport default EdgeLocation;","import React, { Component } from 'react';\r\nimport './PopupMenu.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport Rect from '../geometry/Rect';\r\nimport Once from '../core/Once';\r\nimport EventNormalizer from '../core/EventNormalizer';\r\nimport getViewportDimensions from '../ui_core/getViewportDimensions';\r\nimport EdgeLocation from '../ui_core/EdgeLocation';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PopupMenu extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {className, edgeLocation, onHide}=props;\r\n\t\tthis._callbackOnHide = onHide;\r\n\t\tthis._edgeLocation=edgeLocation;\r\n\t\tthis._className=className;\r\n\t\tthis._inner = React.createRef();\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._repositionVerticallySoOnPage = this._repositionVerticallySoOnPage.bind(this);\r\n\t\tthis._repositionHorizontallySoOnPage = this._repositionHorizontallySoOnPage.bind(this);\r\n\t\tthis._startWatchingForClickOff = this._startWatchingForClickOff.bind(this);\r\n\t\tthis._startWatchingMouseForLeave = this._startWatchingMouseForLeave.bind(this);\r\n\t\tthis._checkMouseWithinBoundsAndAct = this._checkMouseWithinBoundsAndAct.bind(this);\r\n\t\tthis._doResposition= this._doResposition.bind(this);\r\n\t\tthis._getCurrentRect= this._getCurrentRect.bind(this);\r\n\t\tthis._mouseMove = this._mouseMove.bind(this);\r\n\t\tthis._mouseDown = this._mouseDown.bind(this);\r\n\t\tthis._touchStart = this._touchStart.bind(this);\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis._setLeft= this._setLeft.bind(this);\r\n\t\tthis._setTop= this._setTop.bind(this);\r\n\t\tthis._setRelocated= this._setRelocated.bind(this);\r\n\t\tthis._showing = false;\r\n\t\tthis._checkMouseWithinBoundsAndActOnce = new Once(this._checkMouseWithinBoundsAndAct);\r\n\t\tthis.state = {relocated:false};\r\n\t}\r\n\tshow({position, getMouseInSourceBounds, untilClickOff}){\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._showing = true;\r\n\t\t\tthis._getMouseInSourceBounds=getMouseInSourceBounds;\r\n\t\t\tthis._dueReposition=true;\r\n\t\t\tthis._setLeft(position?position[0]:0);\r\n\t\t\tthis._setTop(position?position[1]:0);\r\n\t\t\tsetTimeout(this._doResposition, 0);\r\n\t\t\tthis._setVisible(true);\r\n\t\t\tthis._setRelocated(true);\r\n\t\t\tsetTimeout(untilClickOff?this._startWatchingForClickOff:this._startWatchingMouseForLeave,0);\r\n\t\t}, 0);\r\n\t}\r\n\t_setLeft(left){\r\n\t\tconst element = this._elementRef.current;\r\n\t\telement.style.left = `${left}px`;\r\n\t}\r\n\t_setTop(top){\r\n\t\tconst element = this._elementRef.current;\r\n\t\telement.style.top = `${top}px`;\r\n\t}\r\n\t_setVisible(visible){\r\n\t\tconst element = this._elementRef.current;\r\n\t\tif(visible)\r\n\t\t\telement.classList.add('visible');\r\n\t\telse \r\n\t\t\telement.classList.remove('visible');\r\n\t}\r\n\t_setRelocated(relocated){\r\n\t\tconst element = this._elementRef.current;\r\n\t\tif(relocated){\r\n\t\t\telement.classList.add('relocated');\r\n\t\t\telement.classList.remove('did-not-relocate');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\telement.classList.add('did-not-relocate');\r\n\t\telement.classList.remove('relocated');\r\n\t}\r\n\t_startWatchingMouseForLeave(){\r\n\t\tdocument.documentElement.addEventListener('mousemove', this._mouseMove);\r\n\t\tdocument.documentElement.addEventListener('touchstart', this._touchStart);\r\n\t\tthis._currentRect = this._getCurrentRect();\r\n\t}\r\n\t_startWatchingForClickOff(){\r\n\t\tdocument.documentElement.addEventListener('mousedown', this._mouseDown);\r\n\t\tdocument.documentElement.addEventListener('touchstart', this._touchStart);\r\n\t\tthis._currentRect = this._getCurrentRect();\r\n\t}\r\n\t_getCurrentRect(){\r\n\t\tconst inner = this._inner.current;\r\n\t\tconst absolutePosition = getAbsolute(inner);\r\n\t\treturn new Rect({x:absolutePosition.left, y:absolutePosition.top, width:inner.offsetWidth, height:inner.offsetHeight});\r\n\t}\r\n\t_mouseMove(e){\r\n\t\tthis._checkMouseWithinBoundsAndAct(e);\r\n\t}\r\n\t_mouseDown(e){\r\n\t\tEventNormalizer.addFriendlyXYToMouse(e);\r\n\t\tthis._checkMouseWithinBoundsAndActOnce.trigger(e);\r\n\t}\r\n\t_touchStart(e){\r\n\t\tEventNormalizer.addFriendlyXYToTouch(e);\r\n\t\tthis._checkMouseWithinBoundsAndActOnce.trigger(e);\r\n\t}\r\n\t_checkMouseWithinBoundsAndAct(e){\r\n\t\tconst x = e.x;\r\n\t\tconst y = e.y;\r\n\t\tconst point = [x,y];\r\n\t\tif(this._getMouseInSourceBounds&&this._getMouseInSourceBounds(point))return;\r\n\t\tif(!this._currentRect.containsPoint(point))\r\n\t\t\tthis.hide();\r\n\t}\r\n\thide(){\r\n\t\tif(!this._showing)return;\r\n\t\tthis._showing = false;\r\n\t\tthis._setVisible(false);\r\n\t\tdocument.documentElement.removeEventListener('mousemove', this._mouseMove);\r\n\t\tdocument.documentElement.removeEventListener('mousedown', this._mouseDown);\r\n\t\tdocument.documentElement.removeEventListener('touchstart', this._touchStart);\r\n\t\tthis._callbackOnHide&&this._callbackOnHide();\r\n\t}\r\n\t_doResposition(){\r\n\t\tconst innerElement = this._inner.current;\r\n\t\tconst viewportDimensions = getViewportDimensions();\r\n\t\tconst currentRect = this._getCurrentRect();\r\n\t\tconst relocatedVertically = this._repositionVerticallySoOnPage(currentRect, viewportDimensions);\r\n\t\tconst relocatedHorizontally = this._repositionHorizontallySoOnPage(currentRect, viewportDimensions);\r\n\t\tconst relocated = relocatedVertically||relocatedHorizontally;\r\n\t\tthis._setRelocated(relocated);\r\n\t}\r\n\t_repositionVerticallySoOnPage(currentRect, viewportDimensions){\r\n\t\tconst height = currentRect.height;\r\n\t\tconst fromTopOfViewPort = currentRect.y;\r\n\t\tconst fromBottomOfViewPort = viewportDimensions[1]-(fromTopOfViewPort+height);\r\n\t\tlet newTop;\r\n\t\tif(fromTopOfViewPort<0){\r\n\t\t\tnewTop=0;\r\n\t\t\tif(fromTopOfViewPort+fromBottomOfViewPort<0){\r\n\t\t\t\tnewTop = -(height-viewportDimensions[1])/2;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (fromBottomOfViewPort<0){\r\n\t\t\t newTop = viewportDimensions[1]-height;\r\n\t\t\tif(fromTopOfViewPort+fromBottomOfViewPort<0){\r\n\t\t\t\tnewTop = -(height-viewportDimensions[1])/2;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse return false;\r\n\t\tlet correctionForEdgeLocation=0;\r\n\t\tswitch(this._edgeLocation){\r\n\t\t\tcase EdgeLocation.TOP_LEFT:\r\n\t\t\tcase EdgeLocation.TOP_RIGHT:\r\n\t\t\tcase EdgeLocation.TOP_CENTER:\r\n\t\t\t\tbreak;\r\n\t\t\tcase EdgeLocation.MIDDLE_RIGHT:\r\n\t\t\tcase EdgeLocation.MIDDLE_LEFT:\r\n\t\t\t\tcorrectionForEdgeLocation=height/2;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EdgeLocation.BOTTOM_RIGHT:\r\n\t\t\tcase EdgeLocation.BOTTOM_LEFT:\r\n\t\t\tcase EdgeLocation.BOTTOM_CENTER:\r\n\t\t\t\tcorrectionForEdgeLocation=height;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tnewTop+= correctionForEdgeLocation;\r\n\t\tthis._setTop(newTop);\r\n\t\treturn true;\r\n\t}\r\n\t_repositionHorizontallySoOnPage(currentRect, viewportDimensions){\t\r\n\t\tconst width = currentRect.width;\r\n\t\tconst fromLeftOfViewPort = currentRect.x;\r\n\t\tconst fromRightOfViewPort = viewportDimensions[0]-(fromLeftOfViewPort+width);\r\n\t\tlet newLeft;\r\n\t\tif(fromLeftOfViewPort<0){\r\n\t\t\tnewLeft=0;\r\n\t\t\tif(fromLeftOfViewPort+fromRightOfViewPort<0){\r\n\t\t\t\tnewLeft = -(width-viewportDimensions[0])/2;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse if (fromRightOfViewPort<0){\r\n\t\t\tnewLeft = viewportDimensions[0]-width;\r\n\t\t\tif(fromLeftOfViewPort+fromRightOfViewPort<0){\r\n\t\t\t\tnewLeft = -(width-viewportDimensions[0])/2;\r\n\t\t\t}\r\n\t\t}\r\n\t\telse return false;\r\n\t\tlet correctionForEdgeLocation=0;\r\n\t\tswitch(this._edgeLocation){\r\n\t\t\tcase EdgeLocation.TOP_LEFT:\r\n\t\t\tcase EdgeLocation.BOTTOM_LEFT:\r\n\t\t\tcase EdgeLocation.MIDDLE_LEFT:\r\n\t\t\t\tbreak;\r\n\t\t\tcase EdgeLocation.TOP_CENTER:\r\n\t\t\tcase EdgeLocation.BOTTOM_CENTER:\r\n\t\t\t\tcorrectionForEdgeLocation=width/2;\r\n\t\t\t\tbreak;\r\n\t\t\tcase EdgeLocation.TOP_RIGHT:\r\n\t\t\tcase EdgeLocation.MIDDLE_RIGHT:\r\n\t\t\tcase EdgeLocation.BOTTOM_RIGHT:\r\n\t\t\t\tcorrectionForEdgeLocation=width;\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t\tnewLeft+=correctionForEdgeLocation;\r\n\t\tthis._setLeft(newLeft);\r\n\t\treturn true;\r\n\t}\r\n\trender() {\r\n\t\tlet className = `popup-menu`; \r\n\t\tconst innerClassName=`inner ${this._edgeLocation} ${this._className}`;\r\n\t\treturn (
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t{this.props.children}\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ParameterErrors from '../../errors/ParameterErrors';\r\nimport ParameterError from '../../errors/ParameterError';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class TabPanel_Panel extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {active}=props;\r\n\t\tthis.state = {active:active?true:false};\r\n\t\tthis._child = props.children;\r\n\t\tif(this._child===undefined||this._child===null)\r\n\t\t\tthrowNotProvided('single children entry');\r\n\t\tif(Array.isArray(this._child))\r\n\t\t\tthrow ParameterError('Only one child is accepted');\r\n\t}\r\n\tget tabInfo(){\r\n\t\treturn this._tabInfo;\r\n\t}\r\n\tset active(value){\r\n\t\tthis.setState({active:value});\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tconst tabInfo = this.props.children.ref.current.tabInfo;\r\n\t\tthis.setState({tabInfo:tabInfo});\r\n\t\tthis._tabInfo = tabInfo;\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"tab-panel-panel\";\r\n\t\tif(this.state.active)\r\n\t\t\tclassName+=\" active\";\r\n\t\treturn (
    \r\n\t\t\t{this.props.children}\r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nexport default class TabPanel_Tab extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {panel, tabInfo, setActive, active}=props;\r\n\t\tthis._setActive = setActive\r\n\t\tthis._panel = panel;\r\n\t\tthis._tabInfo = tabInfo;\r\n\t\tthis._handleSetActive = this._handleSetActive.bind(this);\r\n\t\tthis.state = {active:active?true:false};\r\n\t}\r\n\t_handleSetActive(){\r\n\t\tthis._setActive(this, this._panel.ref.current);\r\n\t}\r\n\tset active(value){\r\n\t\tthis.setState({active:value});\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"tab-panel-tab\";\r\n\t\tif(this.state.active)\r\n\t\t\tclassName+=\" active\";\r\n\t\tconst tabInfoClassName = this._tabInfo?.className;\r\n\t\tif(tabInfoClassName)\r\n\t\t\tclassName+=' '+tabInfoClassName;\r\n\t\treturn (
    \r\n\t\t
    \r\n\t\t\t{this._tabInfo.title}\r\n\t\t\t
    \r\n\t\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport ParameterError from '../errors/ParameterError';\r\nimport TabPanel_Panel from './tabs/TabPanel_Panel';\r\nimport TabPanel_Tab from './tabs/TabPanel_Tab';\r\nimport HashSource from '../core/HashSource';\r\nimport './TabPanel.css';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class TabPanel extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tthis._element = React.createRef();\r\n\t\tconst {defaultActiveTabIndex, onSetActive}= props;\r\n\t\tthis.setActive= this.setActive.bind(this);\r\n\t\tthis._callbackSetActive= onSetActive;\r\n\t\tconst panels = [];\r\n\t\tlet index=0;\r\n\t\tthis._defaultActiveTabIndex = defaultActiveTabIndex;\r\n\t\tthis.props.children.forEach(child=>{\r\n\t\t\tconst panelRef=React.createRef();\r\n\t\t\tconst active = index===defaultActiveTabIndex;\r\n\t\t\tconst childTabKey = child?.props?.tabKey;\r\n\t\t\tconst tabKey = childTabKey!==undefined&&childTabKey!==null?childTabKey:HashSource.next();\r\n\t\t\tconst panel = ({child});\r\n\t\t\tpanels.push(panel);\r\n\t\t\tindex++;\r\n\t\t});\r\n\t\tthis.state={tabs:[], panels:panels}\r\n\t}\r\n\tsetActive(tabKey){\r\n\t\tthis.state.tabs.forEach(tab=>{\r\n\t\t\tconst tabElement = tab.ref.current;\r\n\t\t\tconst active = tab.key===tabKey;\r\n\t\t\ttabElement.active= active;\r\n\t\t});\r\n\t\tthis.state.panels.forEach(panel=>{\r\n\t\t\tconst panelElement = panel.ref.current;\r\n\t\t\tconst active = panel.key===tabKey;\r\n\t\t\tpanelElement.active= active;\r\n\t\t});\r\n\t\tthis._callbackSetActive&&this._callbackSetActive(tabKey);\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tlet index=0;\r\n\t\tconst tabs =[];\r\n\t\tthis.state.panels.forEach(panel=>{\r\n\t\t\tconst tabRef = React.createRef();\r\n\t\t\tconst active = index===this._defaultActiveTabIndex;\r\n\t\t\tconst tab = (this.setActive(panel.key)} key={panel.key}>);\r\n\t\t\ttabs.push(tab);\r\n\t\t\tindex++;\r\n\t\t});\r\n\t\tthis.setState({tabs:tabs});\r\n\t\t\r\n\t}\r\n\trender() {\r\n\t\treturn (
    \r\n\t\t\t
    {this.state.tabs}
    \r\n\t\t\t
    {this.state.panels}
    \r\n\t\t
    )\r\n\t}\r\n}\r\n","import eventEnable from '../core/eventEnable';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class TabInfo{\r\n\tconstructor(props){\r\n\t\tconst {title, className}=props;\r\n\t\tif(title===undefined||title===null)throwNotProvided('title');\r\n\t\tthis._title = title;\r\n\t\tthis._className = className;\r\n\t}\r\n\tget title(){\r\n\t\treturn this._title;\r\n\t}\r\n\tget className(){\r\n\t\treturn this._className;\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './ImageCarousel.css';\r\nimport DynamicImageFitCriteria from '../images/DynamicImageFitCriteria';\r\nimport DynamicImage from '../images/DynamicImage';\r\nimport FitType from '../images/FitType';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport { faExpand} from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class ImageCarousel extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst {className, images, aspectRatioThreshold, getContainerViewPort, onExpandImage, rootUrl}=props;\r\n\t\tthis._rootUrl = rootUrl?UrlHelper.makeSureSlashOnEnd(rootUrl):null;\r\n\t\tthis._className = className;\r\n\t\tthis._callbackExpandImage = onExpandImage;\r\n\t\tif(getContainerViewPort===undefined||getContainerViewPort===null)throwNotProvided('getContainerViewPort');\r\n\t\tthis._getContainerViewPort = getContainerViewPort;\r\n\t\tthis._getContainerAspectRatio = this._getContainerAspectRatio.bind(this);\r\n\t\tthis._getVerticalElseHorizontal = this._getVerticalElseHorizontal.bind(this);\r\n\t\tthis.calculateAndUpdateVerticalOrHorizontal = this.calculateAndUpdateVerticalOrHorizontal.bind(this);\r\n\t\tthis._handleClickExpand= this._handleClickExpand.bind(this);\r\n\t\tthis._createImageElements= this._createImageElements.bind(this);\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._dynamicImageFitCriteriaVertical = new DynamicImageFitCriteria({fitType:FitType.WIDTH});\r\n\t\tthis._dynamicImageFitCriteriaHorizontal = new DynamicImageFitCriteria({fitType:FitType.HEIGHT});\r\n\t\tthis.state ={imageElements:[], verticalElseHorizontal:false};\r\n\t}\r\n\tcomponentDidUpdate(previousProps){\r\n\t\tconst imagesChanged = previousProps.images!==this.props.images;\r\n\t\tconst rootUrlChanged = previousProps.rootUrl!==this.props.rootUrl;\r\n\t\tif(imagesChanged){\r\n\t\t\tthis._images = this.props.images;\r\n\t\t}\r\n\t\tif(rootUrlChanged){\r\n\t\t\tconst rootUrl = this.props.rootUrl;\r\n\t\t\tthis._rootUrl = rootUrl?UrlHelper.makeSureSlashOnEnd(rootUrl):null;\r\n\t\t}\r\n\t\tif(imagesChanged||rootUrlChanged){\r\n\t\t\tthis.calculateAndUpdateVerticalOrHorizontal();\r\n\t\t\tthis._createImageElements();\r\n\t\t}\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis.calculateAndUpdateVerticalOrHorizontal();\r\n\t}\r\n\tcalculateAndUpdateVerticalOrHorizontal(){\r\n\t\tconst verticalElseHorizontal = this._getVerticalElseHorizontal();\r\n\t\tif(this.state.verticalElseHorizontal===verticalElseHorizontal)return;\r\n\t\tthis.setState({verticalElseHorizontal:verticalElseHorizontal});\r\n\t}\r\n\t_createImageElements(){\r\n\t\tif(!this._images){\r\n\t\t\tthis.setState({imageElements:[]});\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst verticalElseHorizontal = this._getVerticalElseHorizontal();\r\n\t\tconst imageElements = [];\r\n\t\tthis._images.forEach((image)=>{\r\n\t\t\tlet relativeUrl;\r\n\t\t\tif(image instanceof DynamicImage){\r\n\t\t\t\tconst viewPort = this._getContainerViewPort();\r\n\t\t\t\tconst dynamicImageEntry = image.getBestEntryToFit(verticalElseHorizontal\r\n\t\t\t\t?{fitCriteria:this._dynamicImageFitCriteriaVertical, width:viewPort[0]}\r\n\t\t\t\t:{fitCriteria:this._dynamicImageFitCriteriaHorizontal, height:viewPort[1]});\r\n\t\t\t\tif(dynamicImageEntry===undefined||dynamicImageEntry===null)\r\n\t\t\t\t\tthrow new Error('No dynamicImageEntry was returned');\r\n\t\t\t\trelativeUrl = dynamicImageEntry.relativePath;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tif(typeof(image )!=='string')\r\n\t\t\t\t\tthrow new Error('Not implemented');\r\n\t\t\t\trelativeUrl = image;\r\n\t\t\t}\r\n\t\t\tconst url = (this._rootUrl===null?'':this._rootUrl)+UrlHelper.removeStartSlash(relativeUrl);\r\n\t\t\timageElements.push((
    {\r\n\t\t\t\tthis._handleClickExpand(image);\r\n\t\t\t}}/>
    ))\r\n\t\t});\r\n\t\tthis.setState({imageElements:imageElements});\r\n\t}\r\n\t_getContainerAspectRatio(){\r\n\t\tconst containerViewPortDimensions = this._getContainerViewPort();\r\n\t\t let aspectRatio = containerViewPortDimensions[0]/containerViewPortDimensions[1];\r\n\t\t if(isNaN(aspectRatio))return 1;\r\n\t\t return aspectRatio;\r\n\t}\r\n\t_getVerticalElseHorizontal(){\t\t\r\n\t\tconst containerAspectRatio = this._getContainerAspectRatio();\r\n\t\tconst verticalElseHorizontal = this._aspectRatioThreshold>containerAspectRatio;\r\n\t\treturn verticalElseHorizontal;\r\n\t}\r\n\t_handleClickExpand(image){\r\n\t\tlet largestImageUrl;\r\n\t\tif(image instanceof DynamicImage){\r\n\t\t\tlargestImageUrl = image.getLargestEntry().relativePath;\r\n\t\t}\r\n\t\telse{\r\n\t\t\tif(typeof(image)!=='string'){\r\n\t\t\t\tthrow new Error(`Not implemented for type ${typeof(image)}`);\r\n\t\t\t}\r\n\t\t\tlargestImageUrl = image;\r\n\t\t}\r\n\t\tthis._callbackExpandImage({image:largestImageUrl, rootUrl:this._rootUrl});\r\n\t}\r\n\trender() {\r\n\t\tlet className = 'image-carousel';\r\n\t\tif(this._className)\r\n\t\t\tclassName+=` ${this._className}`;\r\n\t\tclassName+=this.state.verticalElseHorizontal?' vertical':' horizontal';\r\n\t\treturn (
    \r\n\t\t\t\t\t\t\t\t
    \r\n\t\t\t\t{this.state.imageElements}\r\n\t\t\t\t
    \r\n\t\t\t
    )\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './JumpableZoomableDragable.css';\r\nimport TwoFingerTouch from '../ui_core/TwoFingerTouch';\r\nimport ZoomableDragable from './ZoomableDragable';\r\nimport IconButton from './IconButton';\r\nimport DynamicImage from '../images/DynamicImage';\r\nimport FitType from '../images/FitType';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport Urls from '../urls/Urls';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class JumpableZoomableDragable extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {className, images, updateExternalZoomSource, zoomMax, zoomMin, rootUrl}=props;\r\n\t\tthis._className=className;\r\n\t\tthis._zoomMax = zoomMax;\r\n\t\tthis._zoomMin = zoomMin;\r\n\t\tthis._updateExternalZoomSource=updateExternalZoomSource?updateExternalZoomSource:null;\r\n\t\tthis._loadImage= this._loadImage.bind(this);\r\n\t\tthis._rootUrl = rootUrl?UrlHelper.makeSureSlashOnEnd(rootUrl):null;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._zoomableDragableRef = React.createRef();\r\n\t\tthis._getAspectRatio= this._getAspectRatio.bind(this);\r\n\t\tthis._handleClickLeft= this._handleClickLeft.bind(this);\r\n\t\tthis._handleClickRight= this._handleClickRight.bind(this);\r\n\t\tthis.state={noMoreLeft:true, noMoreRight:true};\r\n\t\tthis._index = 0;\r\n\t}\r\n\t_getAspectRatio(){\r\n\t\tconst element = this._elementRef.current;\r\n\t\tif(element===null)return 1;\r\n\t\treturn element.offsetWidth/element.offsetHeight;\r\n\t}\r\n\tcomponentDidUpdate(previousProps){\r\n\t\tconst imagesChanged = previousProps.images!==this.props.images;\r\n\t\tconst rootUrlChanged = previousProps.rootUrl!==this.props.rootUrl;\r\n\t\tif(imagesChanged){\r\n\t\t\tthis._images = this.props.images;\r\n\t\t\tthis.setState({noMoreLeft:true, noMoreRight:this._images.length<=1});\r\n\t\t}\r\n\t\tif(rootUrlChanged){\r\n\t\t\tconst rootUrl = this.props.rootUrl;\r\n\t\t\tthis._rootUrl = rootUrl?UrlHelper.makeSureSlashOnEnd(rootUrl):null;\r\n\t\t}\r\n\t\tif(imagesChanged||rootUrlChanged){\r\n\t\t\t\tthis._index=0;\r\n\t\t\t\tthis._loadImage();\r\n\t\t}\r\n\t}\r\n\t_loadImage(){\r\n\t\tconst hasAtLeastOneImage = this._images&&(this._images.length>0);\r\n\t\tif(!hasAtLeastOneImage)return;\r\n\t\tconst dynamicImageOrImagePathString = this._images[this._index];\r\n\t\tconst isImagePathString = typeof(dynamicImageOrImagePathString)==='string';\r\n\t\tconst relativeUrl = isImagePathString\r\n\t\t\t?dynamicImageOrImagePathString\r\n\t\t\t:dynamicImageOrImagePathString.getLargestEntry().relativePath;\r\n\t\tconst url = (this._rootUrl===null?'':this._rootUrl)+UrlHelper.removeStartSlash(relativeUrl);\r\n\t\tconst fitToHeight = false;\r\n\t\tthis._zoomableDragableRef.current.load(url, fitToHeight);\r\n\t}\r\n\t_handleClickLeft(){\r\n\t\tthis._index-=1;\r\n\t\tconst noMoreLeft = this._index<=0;\r\n\t\tif(noMoreLeft){\r\n\t\t\tthis._index=0;\r\n\t\t}\r\n\t\tthis.setState({noMoreLeft:noMoreLeft, noMoreRight:false});\r\n\t\tthis._loadImage();\r\n\t}\r\n\t_handleClickRight(){\r\n\t\tif(!this._images)return;\r\n\t\tthis._index+=1;\r\n\t\tconst noMoreRight = this._index>=this._images.length-1;\r\n\t\tif(noMoreRight){\r\n\t\t\tthis._index=this._images.length-1;\r\n\t\t}\r\n\t\tthis.setState({noMoreRight:noMoreRight, noMoreLeft:false});\r\n\t\tthis._loadImage();\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"jumpable-zoomable-dragable\";\r\n\t\tif(this._className)\r\n\t\t\tclassName+=' '+this._className;\r\n\t\tif(this.state.noMoreLeft)\r\n\t\t\tclassName+=' no-more-left';\r\n\t\tif(this.state.noMoreRight)\r\n\t\t\tclassName+=' no-more-right';\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport TabInfo from '../ui_core/TabInfo';\r\nimport ImageCarousel from './ImageCarousel';\r\nimport JumpableZoomableDragable from './JumpableZoomableDragable';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotMoreInformationFloorPlans extends Component {\r\n\tstatic get _IMAGE_CAROUSEL_ASPECT_RATIO_THRESHOLD(){\r\n\t\treturn 1.5;\r\n\t}\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {getViewPort, onExpandImage, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._callbackExpandImage = onExpandImage;\r\n\t\tthis._getContainerViewPort = getViewPort;\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._tabInfo = new TabInfo({title:'Floor plans', className:'floor-plans-tab'});\r\n\t\tthis.state={site:null, plot:null, images:null};\r\n\t}\r\n\tget tabInfo(){\r\n\t\treturn this._tabInfo;\r\n\t}\r\n\tload(site, plot){\r\n\t\tthis.setState({site:site, plot:plot});\r\n\t\tthis._loadFloorPlanImages(site, plot);\r\n\t}\r\n\t_loadFloorPlanImages(site, plot){\r\n\t\tthis.setState({images:plot.floorPlanImages});\r\n\t}\r\n\trender(){\r\n\t\tconst rootUrl = Urls.getAssetsForSite(this._configuration.siteSlug);\r\n\t\t return this._configuration.scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages\r\n\t\t?(\r\n\t\t)\r\n\t\t:(\r\n\t\t\r\n\t\t);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport TabInfo from '../ui_core/TabInfo';\r\nimport ImageCarousel from './ImageCarousel';\r\nimport Urls from '../urls/Urls';\r\nimport JumpableZoomableDragable from './JumpableZoomableDragable';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotMoreInformationGallery extends Component {\r\n\tstatic get _IMAGE_CAROUSEL_ASPECT_RATIO_THRESHOLD(){\r\n\t\treturn 1.5;\r\n\t}\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {getViewPort, onExpandImage, configuration}=props;\r\n\t\tthis._configuration= configuration;\r\n\t\tthis._callbackExpandImage = onExpandImage;\r\n\t\tthis._getContainerViewPort = getViewPort;\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._tabInfo = new TabInfo({title:'Gallery', className:'gallery-tab'});\r\n\t\tthis._loadRoomImages = this._loadRoomImages.bind(this);\r\n\t\tthis.state={site:null, plot:null, images:null};\r\n\t}\r\n\tget tabInfo(){\r\n\t\treturn this._tabInfo;\r\n\t}\r\n\tload(site, plot){\r\n\t\tthis.setState({site:site, plot:plot});\r\n\t\tthis._loadRoomImages(site, plot);\r\n\t}\r\n\t_loadRoomImages(site, plot){\r\n\t\tlet images = [];\r\n\t\tplot.rooms.getArray().forEach((room)=>{\r\n\t\t\tconst roomImages=room.images;\r\n\t\t\timages = images.concat(roomImages);\r\n\t\t});\r\n\t\tthis.setState({images:images});\r\n\t}\r\n\trender(){\r\n\t\tconst rootUrl = Urls.getAssetsForSite(this._configuration.siteSlug);\r\n\t\treturn this._configuration.scrollablePlotMoreInformationGalleryAndFloorPlansElseSingleJumpableZoomableDragableImages?\r\n\t\t(\r\n\t\t\r\n\t\t):\r\n\t\t(\r\n\t\t\r\n\t\t);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport TabInfo from '../ui_core/TabInfo';\r\nimport Star from './Star';\r\nimport { faBed, faToilet} from '@fortawesome/free-solid-svg-icons'\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport enableBindingToOthers from '../mvvm/enableBindingToOthers';\r\nimport { faStreetView} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport PlotStatus from '../site/PlotStatus';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotMoreInformationOverview extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tenableBindingToOthers(this);\r\n\t\tconst {removeFavourite, addFavourite, showStreetView}=props;\r\n\t\tthis._star = React.createRef();\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackShowStreetView = showStreetView;\r\n\t\tthis._tabInfo = new TabInfo({title:'Overview', className:'overview-tab'});\r\n\t\tthis._handleStarSelectedChanged= this._handleStarSelectedChanged.bind(this);\r\n\t\tthis._handlePlotSelectedChanged= this._handlePlotSelectedChanged.bind(this);\r\n\t\tthis._ellipsisAbout= this._ellipsisAbout.bind(this);\r\n\t\tthis._handleClick= this._handleClick.bind(this);\r\n\t\tthis._handleClickShowStreetView = this._handleClickShowStreetView.bind(this);\r\n\t\tthis._workBackwardsThroughStringToFindLastCharacterBeforeSpaceIndex= this._workBackwardsThroughStringToFindLastCharacterBeforeSpaceIndex.bind(this);\r\n\t\tthis.state ={plot:null, showAll:false, aboutTruncated:null};\r\n\t}\r\n\tload(site, plot){\r\n\t\t\tthis._firstAboutTruncation=true;\t\r\n\t\tthis.setState({plot:plot, site:site, aboutTruncated:plot.about, showAll:false, aboutTruncatedWithEllipsisWithEllipsisIfRequired:plot.about});\r\n\t}\r\n\tget tabInfo(){\r\n\t\treturn this._tabInfo;\r\n\t}\r\n\t_handleStarSelectedChanged(selected){\r\n\t\tif(selected)this._callbackAddFavourite(this.state.plot);\r\n\t\telse this._callbackRemoveFavourite(this.state.plot);\r\n\t}\r\n\t_handlePlotSelectedChanged(value){\r\n\t\tthis._star.current.selected=value;\r\n\t}\r\n\t\r\n\tcomponentDidUpdate(previousProps, previousState){\r\n\t\tconst oldPlot = previousState.plot;\r\n\t\tconst newPlot = this.state.plot;\r\n\t\tif(!this.state.showAll)\r\n\t\t\tthis._ellipsisAbout();\r\n\t\tif(oldPlot===newPlot)return;\r\n\t\t//example of using mvvm framework\r\n\t\tthis.myBindings.reset();\r\n\t\tPropertyBindingFactory.standard(this, newPlot, 'selected', this._handlePlotSelectedChanged);\r\n\t}\r\n\t_handleClick(){\r\n\t\tconst currentShowAll = this.state.showAll;\r\n\t\tif(currentShowAll)return;\r\n\t\tthis.setState({showAll:true, aboutTruncatedWithEllipsisWithEllipsisIfRequired:this.state.plot.about});\r\n\t}\r\n\t_ellipsisAbout(){\r\n\t\tconst element = this._elementRef.current;\r\n\t\tconst pixelsOverflowing = element.scrollHeight - element.clientHeight ;\r\n\t\tconst isOverflowing = pixelsOverflowing>0;\r\n\t\tif(!isOverflowing)return;\r\n\t\tlet aboutTruncated = this.state.aboutTruncated;\r\n\t\tlet indexToChopRemainingWrodOffFrom=aboutTruncated.length-1;\r\n\t\tif(this._firstAboutTruncation){\r\n\t\t\tconst proportionToKeep = element.clientHeight / element.scrollHeight;\r\n\t\t\tindexToChopRemainingWrodOffFrom = Math.floor((aboutTruncated.length-1)*proportionToKeep);\r\n\t\t\tthis._firstAboutTruncation=false;\r\n\t\t}\r\n\t\tconst lastCharacterBeforeSpaceIndex = this._workBackwardsThroughStringToFindLastCharacterBeforeSpaceIndex(indexToChopRemainingWrodOffFrom, aboutTruncated);\r\n\t\taboutTruncated=aboutTruncated.substr(0, lastCharacterBeforeSpaceIndex+1);\r\n\t\tconst aboutTruncatedWithEllipsisWithEllipsisIfRequired=aboutTruncated+'...';\r\n\t\tthis.setState({aboutTruncated:aboutTruncated, aboutTruncatedWithEllipsisWithEllipsisIfRequired:aboutTruncatedWithEllipsisWithEllipsisIfRequired});\r\n\t}\r\n\t_workBackwardsThroughStringToFindLastCharacterBeforeSpaceIndex(index, str){\r\n\t\t\twhile(str[index]!==' '&&index>0){\r\n\t\t\t\tindex--;\r\n\t\t\t}\r\n\t\t\treturn index-1;\r\n\t}\r\n\t_handleClickShowStreetView(){\r\n\t\tthis._callbackShowStreetView({nearPlot:this.state.plot});\r\n\t}\r\n\t/*\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{this.state.plot?.nBathrooms}\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t*/\r\n\trender(){\r\n\t\tlet className = \"plot-more-information-overview\";\r\n\t\tclassName+=this.state.showAll?\" show-all\":\" show-limited\";\r\n\t\tconst hasPrice = (this.state.plot)&&!this.state.plot.isSold;\r\n\t\treturn (\r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    {this.state.plot?.name}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    Plot {this.state.plot?.number}
    \r\n\t\t\t\t\t\t\t
    {this.state.plot? ' - '+PlotStatus.getDescription(this.state.plot.status)+(hasPrice?' - ':''):' - '}
    \r\n\t\t\t\t\t\t\t
    {!hasPrice?'':this.state.plot.priceString}
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{this.state.plot?.nBedrooms}\r\n\t\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t{this.state.aboutTruncatedWithEllipsisWithEllipsisIfRequired}\r\n\t\t\t\t
    \r\n\t\t)\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport PopupMenu from './PopupMenu';\r\nimport EdgeLocation from '../ui_core/EdgeLocation';\r\nimport './PlotMoreInformation.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport MenuType from '../enums/MenuType';\r\nimport TabPanel from './TabPanel';\r\nimport PlotMoreInformationFloorPlans from './PlotMoreInformationFloorPlans';\r\nimport PlotMoreInformationGallery from './PlotMoreInformationGallery';\r\nimport PlotMoreInformationOverview from './PlotMoreInformationOverview';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport enableBindingToOthers from '../mvvm/enableBindingToOthers';\r\nimport PlotMoreInformationType from '../enums/PlotMoreInformationType';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotMoreInformation extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {onExpandImage, addFavourite, removeFavourite, showStreetView, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._callbackExpandImage=onExpandImage;\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackShowStreetView = showStreetView;\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._tabPanelRef= React.createRef();\r\n\t\tthis._overview = React.createRef();\r\n\t\tthis._gallery = React.createRef();\r\n\t\tthis._floorPlans = React.createRef();\r\n\t\tthis._callbackClose = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._getTitle = this._getTitle.bind(this);\r\n\t\tthis._getPanelsViewPort = this._getPanelsViewPort.bind(this);\r\n\t\tthis._disposeClickedOffHandle=this._disposeClickedOffHandle.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._elementRef, hide:this.hide});\r\n\t\tthis._releasePlotActiveHandle= this._releasePlotActiveHandle.bind(this);\r\n\t\tthis._handleShowStreetView = this._handleShowStreetView.bind(this);\r\n\t\tthis._handleTabSetActive = this._handleTabSetActive.bind(this);\r\n\t\tthis._currentPlotActiveHandle = null;\r\n\t\tthis._currentPlotMoreInformationType = PlotMoreInformationType.OVERVIEW;\r\n\t\tthis.state={plot:null, visible:false};\r\n\t}\r\n\tshow(site, plot, configuration, plotMoreInformationType){\r\n\t\tthis.setState({plot:this._plot, visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tif(plot)this._plot = plot;\r\n\t\tif(site)this._site = site;\r\n\t\tif(this._plot){\r\n\t\t\tthis._releasePlotActiveHandle();\r\n\t\t\tthis._currentPlotActiveHandle = this._plot.unit.takeActiveHandle();\r\n\t\t}\r\n\t\tif(plotMoreInformationType){\r\n\t\t\tthis._tabPanelRef.current.setActive(plotMoreInformationType);\r\n\t\t}\r\n\t\telse \r\n\t\t{\r\n\t\t\tif(this._currentPlotMoreInformationType){\r\n\t\t\t\tthis._handleTabSetActive(this._currentPlotMoreInformationType);\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._releasePlotActiveHandle();\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.PLOT_MORE_INFORMATION;\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\t_releasePlotActiveHandle(){\r\n\t\tif(!this._currentPlotActiveHandle)return;\r\n\t\tthis._currentPlotActiveHandle.dispose();\r\n\t\tthis._currentPlotActiveHandle=null;\r\n\t}\r\n\t_getTitle(plot){\r\n\t\tif(this._configuration.fullScreenGalleryAndFloorPlans)return '';\r\n\t\treturn `More about Plot ${plot?.number}`;\r\n\t}\r\n\t_getPanelsViewPort(){\r\n\t\t const element = this._elementRef.current;\r\n\t\t if(element===undefined||element===null)return 1;\r\n\t\t return [element.offsetWidth, element.offsetHeight];\r\n\t}\r\n\t_disposeClickedOffHandle(){\r\n\t\tthis._clickedOffHandle&&this._clickedOffHandle.dispose();\r\n\t}\r\n\t_handleShowStreetView(e){\r\n\t\tthis._callbackShowStreetView();\r\n\t\tthis.hide();\r\n\t}\r\n\t_handleTabSetActive(tabKey){\r\n\t\tthis._currentPlotMoreInformationType =tabKey;\r\n\t\tswitch(tabKey){\r\n\t\t\tcase PlotMoreInformationType.GALLERY:\r\n\t\t\t\tthis._gallery.current.load(this._site, this._plot);\r\n\t\t\tbreak;\r\n\t\t\tcase PlotMoreInformationType.FLOOR_PLANS:\r\n\t\t\t\tthis._floorPlans.current.load(this._site, this._plot);\r\n\t\t\tbreak;\r\n\t\t\tcase PlotMoreInformationType.OVERVIEW:\r\n\t\t\t\tthis._overview.current.load(this._site, this._plot);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\trender(){\r\n\t\tlet className=\"plot-more-information menu\";\r\n\t\tif(this._configuration.fullScreenGalleryAndFloorPlans)\r\n\t\t\tclassName+=\" full-screen-gallery-and-floor-plans\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (\r\n\t
    \r\n\t\t\r\n\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t
    )\r\n\t}\r\n}","export default class PhoneNumberValidation{\r\n\tstatic get REG_EXP_INTERNATIONAL_NUMBER(){\r\n\t\treturn new RegExp('^(?:(?:\\\\+[1-9]{1}[0-9]{3,14})|(?:[0-9]{4,15}))$');\r\n\t}\r\n\tstatic validateInternational(value){\r\n\t\treturn PhoneNumberValidation.REG_EXP_INTERNATIONAL_NUMBER.test(value);\r\n\t}\r\n}","export default class EmailValidation{\r\n\tstatic get REG_EXP_EMAIL_RFC_5322(){\r\n\t\treturn /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n\t}\r\n\tstatic emailRFC5322(value){\r\n\t\treturn EmailValidation.REG_EXP_EMAIL_RFC_5322.test(value);\r\n\t}\r\n}","const BrochureProgressStatus={\r\n\tQueued:1,\r\n\tGenerating:2,\r\n\tGenerated:3\r\n};\r\nBrochureProgressStatus.getClassName = function(brochureProgressStatus){\r\n\tswitch(brochureProgressStatus){\r\n\t\tcase BrochureProgressStatus.Queued:\r\n\t\t\treturn 'queued';\r\n\t\tcase BrochureProgressStatus.Generating:\r\n\t\t\treturn 'generating';\r\n\t\tcase BrochureProgressStatus.Generated:\r\n\t\t\treturn 'generated';\r\n\t\tdefault:\r\n\t\t\tthrow new Error('Not implemented');\r\n\t}\r\n};\r\nexport default BrochureProgressStatus;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport BrochureProgressStatus from '../enums/BrochureProgressStatus';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class BrochureBeingGenerated{\r\n\tconstructor(params){\r\n\t\tenableAcceptBindings(this);\r\n\t\tlet {brochureGenerationIdentifier, brochureProgressStatus, plotNumbers, brochureUrl, brochureType} = params;\r\n\t\tif(brochureGenerationIdentifier===undefined||brochureGenerationIdentifier===null)\r\n\t\t\tthrowNotProvided('brochureGenerationIdentifier');\r\n\t\tthis._brochureGenerationIdentifier = brochureGenerationIdentifier;\r\n\t\tif(brochureProgressStatus===undefined||brochureProgressStatus===null)\r\n\t\t\tbrochureProgressStatus=BrochureProgressStatus.Queued;\r\n\t\tthis._brochureProgressStatus = brochureProgressStatus;\r\n\t\tthis._proportionProgress = 0;\r\n\t\tthis._brochureUrl=brochureUrl;\r\n\t\tthis._brochureType = brochureType;\r\n\t\tthis._plotNumbers = plotNumbers;\r\n\t\tthis.updateProgress= this.updateProgress.bind(this);\t\r\n\t\texposeBinding(this, 'brochureProgressStatus', ()=>this._brochureProgressStatus, (value)=>this._brochureProgressStatus = value);\r\n\t\texposeBinding(this, 'proportionProgress', ()=>this._proportionProgress, (value)=>this._proportionProgress = value);\r\n\t\texposeBinding(this, 'brochureUrl', ()=>this._brochureUrl, (value)=>this._brochureUrl = value);\r\n\t\r\n\t}\r\n\tget brochureProgressStatus(){\r\n\t\treturn this._brochureProgressStatus;\r\n\t}\r\n\tget brochureGenerationIdentifier(){\r\n\t\treturn this._brochureGenerationIdentifier;\r\n\t}\r\n\tget proportionProgress(){\r\n\t\treturn this._proportionProgress;\r\n\t}\r\n\tget brochureType(){\r\n\t\treturn this._brochureType;\r\n\t}\r\n\tget brochureUrl(){\r\n\t\treturn this._brochureUrl;\r\n\t}\r\n\tget plotNumbers(){\r\n\t\treturn this._plotNumbers;\r\n\t}\r\n\tupdateProgress(progress){\r\n\t\tif(this._brochureProgressStatus !== progress.brochureProgressStatus){\r\n\t\t\tthis._brochureProgressStatus = progress.brochureProgressStatus;\r\n\t\t\tthis.bindingsHandler.changed('brochureProgressStatus', this.brochureProgressStatus);\r\n\t\t}\r\n\t\t\r\n\t\tif(progress.proportionProgress!==undefined&&progress.proportionProgress!==null\r\n\t\t &&this._proportionProgress !== progress.proportionProgress){\r\n\t\t\tthis._proportionProgress = progress.proportionProgress;\r\n\t\t\tthis.bindingsHandler.changed('proportionProgress', this.proportionProgress);\r\n\t\t}\r\n\t\t\r\n\t\tif(progress.brochureUrl!==undefined&&progress.brochureUrl!==null\r\n\t\t\t&&this._brochureUrl !== progress.brochureUrl){\r\n\t\t\tthis._brochureUrl = progress.brochureUrl;\r\n\t\t\tif(this._brochureUrl)\r\n\t\t\t\tthis.bindingsHandler.changed('brochureUrl', this.brochureUrl);\r\n\t\t}\r\n\t}\r\n}","import React, {Component} from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nexport default class GoogleAnalytics{\r\n\tconstructor(props){\r\n\t\tconst {trackingCode, siteName}=props;\r\n\t\tconst script = document.createElement('script');\r\n\t\tscript.src = `https://www.googletagmanager.com/gtag/js?id=${this._trackingCode}`;\r\n\t\tdocument.body.appendChild(script);\r\n\t\tscript.addEventListener('load', ()=>{\r\n\t\t\twindow.dataLayer = window.dataLayer || [];\r\n\t\t\tGoogleAnalytics._gtag('js', new Date());\r\n\t\t\tGoogleAnalytics._gtag('config', 'UA-191995023-3');\r\n\t\t});\r\n\t\tscript.addEventListener('error', console.error);\r\n }\r\n\tstatic get instance(){\r\n\t\treturn GoogleAnalytics._instance;\r\n\t}\r\n\tstatic _gtag(){window.dataLayer?.push(arguments);}\r\n\tstatic logFavouritesBrochureRequest(siteName){\r\n\t\ttry{\r\n\t\t\tGoogleAnalytics._gtag('event', 'brochure_request', {\r\n\t\t\t 'event_category': 'Favourites Brochure',\r\n\t\t\t 'event_label': siteName\r\n\t\t\t});\r\n\t\t}\r\n\t\tcatch(err){\r\n\t\t\tconsole.error(err);\r\n\t\t}\r\n\t}\r\n\tstatic logPlotBrochureRequest(siteName, plotNumber){\r\n\t\ttry{\r\n\t\t\tGoogleAnalytics._gtag('event', 'brochure_request', {\r\n\t\t\t 'event_category': 'Plot Brochure',\r\n\t\t\t 'event_label': `${siteName} - Plot ${plotNumber}`\r\n\t\t\t});\r\n\t\t}\r\n\t\tcatch(err){\r\n\t\t\tconsole.error(err);\r\n\t\t}\r\n\t}\r\n}","export default class LocalStorageHelper{ \r\n\tstatic getObj(name)\r\n\t{\r\n\t\ttry\r\n\t\t{\r\n\t\t\tvar item = window.localStorage.getItem(name);\r\n\t\t\tif(item===undefined||item===null)return;\r\n\t\t\treturn JSON.parse(item);\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\treturn undefined;\r\n\t\t}\r\n\t}\r\n\tstatic setObj(name, obj)\r\n\t{\r\n\t\ttry\r\n\t\t{\r\n\t\t\twindow.localStorage.setItem(name, JSON.stringify(obj));\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\tconsole.error(ex);\r\n\t\t}\r\n\t}\r\n};","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ParseError from '../errors/ParseError';\r\nimport LocalStorageHelper from '../storage/LocalStorageHelper';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nconst SESSION_TOKEN='sessionToken';\r\nexport default class SessionManager{\r\n\tstatic get instance(){\r\n\t\tif(!SessionManager._instance)\r\n\t\t\tSessionManager._instance = new SessionManager();\r\n\t\treturn SessionManager._instance;\r\n\t}\r\n\tconstructor(){\r\n\t\tthis._sessionToken = LocalStorageHelper.getObj(SESSION_TOKEN);\r\n\t}\r\n\tset sessionToken(value){\r\n\t\tthis._sessionToken = value;\r\n\t\tLocalStorageHelper.setObj(SESSION_TOKEN, value);\r\n\t}\r\n\tget sessionToken(){\r\n\t\treturn this._sessionToken;\r\n\t}\r\n\tget sessionTokenIsValid(){\r\n\t\treturn this._sessionToken!==undefined&&this._sessionToken!==null&&this._sessionToken!=='';\r\n\t}\r\n\tclearSessionToken(){\r\n\t\tthis.sessionToken = null;\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport BrochureProgressStatus from '../enums/BrochureProgressStatus';\r\nimport BrochureBeingGenerated from './BrochureBeingGenerated';\r\nimport Urls from '../urls/Urls';\r\nimport GoogleAnalytics from '../google/GoogleAnalytics'; \r\nimport Timer from '../core/Timer';\r\nimport eventEnable from '../core/eventEnable';\r\nimport SessionManager from '../sessions/SessionManager';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class BrochuresManager{\r\n\tconstructor(params){\r\n\t\teventEnable(this);\r\n\t\tthis._brochuresBeingGenerated = [];\r\n\t\tthis._mapBrochureGenerationIdentifierToBrochureBeingGenerated = new Map();\r\n\t\tthis.setSessionTokenAndAddBrochureGenerationIdentifier_fromResponse_IfValid =\r\n\t\t\tthis.setSessionTokenAndAddBrochureGenerationIdentifier_fromResponse_IfValid.bind(this);\r\n\t\tthis._addBrochureBeingGenerated= this._addBrochureBeingGenerated.bind(this);\r\n\t\tthis._getUpdatesToBrochureBeingGenerateds= this._getUpdatesToBrochureBeingGenerateds.bind(this);\r\n\t\tthis._processUpdatesResponse= this._processUpdatesResponse.bind(this);\r\n\t\tthis._processBrochuresResponse= this._processBrochuresResponse.bind(this);\r\n\t\tthis._dispatchBrochuresBeingGeneratedChanged= this._dispatchBrochuresBeingGeneratedChanged.bind(this);\r\n\t\tthis._clearBrochuresBeingGeneratedWhichAreNotComplete = this._clearBrochuresBeingGeneratedWhichAreNotComplete.bind(this);\r\n\t\tthis._getBrochuresForSession= this._getBrochuresForSession.bind(this);\r\n\t\tthis._timerGetUpdatesToBrochureBeingGenerateds = new Timer({\r\n\t\t\tdelay:10000,\r\n\t\t\tcallback:this._getUpdatesToBrochureBeingGenerateds, \r\n\t\t\tnTicks:-1\r\n\t\t});\r\n\t\tthis._getBrochuresForSession();\r\n\t}\r\n\tstatic get instance(){\r\n\t\tif(!BrochuresManager._instance)\r\n\t\t\tBrochuresManager._instance = new BrochuresManager();\r\n\t\treturn BrochuresManager._instance;\r\n\t}\r\n\tgenerate({\r\n\t\tsiteName, siteSlug, plotNumbers, title, firstName, surname, email, phoneNumber, optInOptions, agreedToPrivacyNotice, singlePlotBrochure\r\n\t}){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst body = { \r\n\t\t\t\twaitForUrl:false,\r\n\t\t\t\tsiteName:siteSlug, \r\n\t\t\t\tplotNumbers:plotNumbers, \r\n\t\t\t\tdebug:false,\r\n\t\t\t\tuserInfo:{\r\n\t\t\t\t\ttitle,\r\n\t\t\t\t\tfirstName,\r\n\t\t\t\t\tsurname,\r\n\t\t\t\t\temail,\r\n\t\t\t\t\tphoneNumber,\r\n\t\t\t\t\toptInOptions,\r\n\t\t\t\t\tagreedToPrivacyNotice\r\n\t\t\t\t},\r\n\t\t\t\tsessionToken:SessionManager.instance.sessionToken\r\n\t\t\t};\r\n\t\t\tif(email&&email.toLowerCase().indexOf('@futurium.co.uk')<0){\r\n\t\t\t\tif(singlePlotBrochure)\r\n\t\t\t\t\tGoogleAnalytics.logPlotBrochureRequest(siteName, plotNumbers[0].number);\r\n\t\t\t\telse \r\n\t\t\t\t\tGoogleAnalytics.logFavouritesBrochureRequest(siteName);\r\n\t\t\t}\r\n\t\t\tfetch(Urls.getGeneratePDFBrochureSimple(this._configuration), {\r\n\t\t\t\t\tmethod: 'POST', \r\n\t\t\t\t\tcredentials: \"same-origin\",\r\n\t\t\t\t\tbody:JSON.stringify(body)\r\n\t\t\t}).then((response) => {\r\n\t\t\t\tresponse.text().then(res => {\r\n\t\t\t\t\tconst jObjectResponse = JSON.parse(res);\r\n\t\t\t\t\tthis.setSessionTokenAndAddBrochureGenerationIdentifier_fromResponse_IfValid(jObjectResponse);\r\n\t\t\t\t\tresolve(jObjectResponse);\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\tsetSessionTokenAndAddBrochureGenerationIdentifier_fromResponse_IfValid(jObjectResponse){\r\n\t\tif(jObjectResponse.sessionToken!==undefined&&jObjectResponse.sessionToken!==null){\r\n\t\t\tSessionManager.instance.sessionToken = jObjectResponse.sessionToken;\r\n\t\t}\r\n\t\tif(!jObjectResponse.brochureGenerationIdentifier)return;\r\n\t\tthis._addBrochureBeingGenerated(new BrochureBeingGenerated({\r\n\t\t\tbrochureGenerationIdentifier:jObjectResponse.brochureGenerationIdentifier,\r\n\t\t\tbrochureType:jObjectResponse.brochureType,\r\n\t\t\tstartedAt:jObjectResponse.startedAt,\r\n\t\t\tplotNumbers:jObjectResponse.plotNumbers,\r\n\t\t\tbrochureUrl:jObjectResponse.brochureUrl\r\n\t\t}));\r\n\t\tthis._timerGetUpdatesToBrochureBeingGenerateds.start();\r\n\t}\r\n\t_addBrochureBeingGenerated(brochureBeingGenerated){\r\n\t\tthis._brochuresBeingGenerated.push(brochureBeingGenerated);\r\n\t\tthis._mapBrochureGenerationIdentifierToBrochureBeingGenerated\r\n\t\t\t.set(brochureBeingGenerated.brochureGenerationIdentifier, brochureBeingGenerated);\r\n\t\tthis._dispatchBrochuresBeingGeneratedChanged();\r\n\t}\r\n\t_getBrochuresForSession(){\r\n\t\t\tif(!SessionManager.instance.sessionTokenIsValid){\r\n\t\t\t\tSessionManager.instance.clearSessionToken();\r\n\t\t\t\tthis._clearBrochuresBeingGeneratedWhichAreNotComplete();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst body = {\r\n\t\t\t\tsessionToken:SessionManager.instance.sessionToken\r\n\t\t\t};\r\n\t\t\tconst url = Urls.getBrochureGenerationGetBrochuresForSession();\r\n\t\t\tfetch(url, {\r\n\t\t\t\tmethod: 'POST', \r\n\t\t\t\tcredentials: \"same-origin\",\r\n\t\t\t\tbody:JSON.stringify(body)\r\n\t\t\t}).then((response) => {\r\n\t\t\t\tresponse.text().then(res => {\r\n\t\t\t\t\tconst jObjectResponse = JSON.parse(res);\r\n\t\t\t\t\tthis._processBrochuresResponse(jObjectResponse);\r\n\t\t\t\t}).catch(console.error);\r\n\t\t\t}).catch(console.error);\r\n\t}\r\n\t_getUpdatesToBrochureBeingGenerateds(){\r\n\t\ttry{\r\n\t\t\tconst brochureGenerationIdentifiersToGetUpdateFor = this._brochuresBeingGenerated\r\n\t\t\t\t.filter(brochureBeingGenerated=>brochureBeingGenerated.brochureProgressStatus!==BrochureProgressStatus.Generated)\r\n\t\t\t\t.map(brochureBeingGenerated=>brochureBeingGenerated.brochureGenerationIdentifier);\r\n\t\t\tif(brochureGenerationIdentifiersToGetUpdateFor.length<1){\r\n\t\t\t\tthis._timerGetUpdatesToBrochureBeingGenerateds.reset();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif(!SessionManager.instance.sessionTokenIsValid){\r\n\t\t\t\tSessionManager.instance.clearSessionToken();\r\n\t\t\t\tthis._clearBrochuresBeingGeneratedWhichAreNotComplete();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst body = {\r\n\t\t\t\tbrochureGenerationIdentifiers:brochureGenerationIdentifiersToGetUpdateFor,\r\n\t\t\t\tsessionToken:SessionManager.instance.sessionToken\r\n\t\t\t};\r\n\t\t\tconst url = Urls.getBrochureGenerationCheckProgress();\r\n\t\t\tfetch(url, {\r\n\t\t\t\tmethod: 'POST', \r\n\t\t\t\tcredentials: \"same-origin\",\r\n\t\t\t\tbody:JSON.stringify(body)\r\n\t\t\t}).then((response) => {\r\n\t\t\t\tresponse.text().then(res => {\r\n\t\t\t\t\tconst jObjectResponse = JSON.parse(res);\r\n\t\t\t\t\tthis._processUpdatesResponse(jObjectResponse);\r\n\t\t\t\t}).catch(console.error);\r\n\t\t\t}).catch(console.error);\r\n\t\t}\r\n\t\tcatch(err){\r\n\t\t\tconsole.error(err);\r\n\t\t}\t\t\r\n\t}\r\n\t_processBrochuresResponse(jObjectResponse){\r\n\t\tjObjectResponse.progresses?.forEach(progress=>{\r\n\t\t\tlet brochureBeingGenerated = this._mapBrochureGenerationIdentifierToBrochureBeingGenerated.get(\r\n\t\t\t\tprogress.brochureGenerationIdentifier);\r\n\t\t\tif(!brochureBeingGenerated){\r\n\t\t\t\tbrochureBeingGenerated = new BrochureBeingGenerated(progress);\r\n\t\t\t\tthis._addBrochureBeingGenerated(brochureBeingGenerated);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tbrochureBeingGenerated.updateProgress(progress);\r\n\t\t});\r\n\t}\r\n\t_processUpdatesResponse(jObjectResponse){\r\n\t\tif(jObjectResponse.sessionTimedOut){\r\n\t\t\tthis._clearBrochuresBeingGeneratedWhichAreNotComplete();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tjObjectResponse.progresses.forEach(progress=>{\r\n\t\t\tconst brochureBeingGenerated = this._mapBrochureGenerationIdentifierToBrochureBeingGenerated.get(progress.brochureGenerationIdentifier);\r\n\t\t\tif(!brochureBeingGenerated)return;\r\n\t\t\tbrochureBeingGenerated.updateProgress(progress);\r\n\t\t});\r\n\t}\r\n\t_clearBrochuresBeingGeneratedWhichAreNotComplete(){\r\n\t\tconst newBrochuresBeingGenerated =[];\r\n\t\tconst toRemove = [];\r\n\t\tthis._brochuresBeingGenerated.forEach(brochureBeingGenerated=> {\r\n\t\t\tif(brochureBeingGenerated.brochureProgressStatus===BrochureProgressStatus.Generated)\r\n\t\t\t\tnewBrochuresBeingGenerated.push(brochureBeingGenerated);\r\n\t\t\telse \r\n\t\t\t\ttoRemove.push(brochureBeingGenerated);\r\n\t\t});\r\n\t\ttoRemove.forEach(brochureBeingGenerated=>\r\n\t\t\tthis._mapBrochureGenerationIdentifierToBrochureBeingGenerated.delete(brochureBeingGenerated.brochureGenerationIdentifier)\r\n\t\t);\r\n\t\tthis._brochuresBeingGenerated = newBrochuresBeingGenerated;\r\n\t\tthis._dispatchBrochuresBeingGeneratedChanged();\r\n\t}\r\n\t_dispatchBrochuresBeingGeneratedChanged(){\r\n\t\tthis.dispatchEvent({type:'brochuresBeingGeneratedChanged', brochuresBeingGenerated:this._brochuresBeingGenerated});\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './BrochureGeneration.css';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faCog} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport MenuType from '../enums/MenuType';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport PhoneNumberValidation from '../validation/PhoneNumberValidation';\r\nimport EmailValidation from '../validation/EmailValidation';\r\nimport Dialog from './Dialog';\r\nimport Checkbox from './Checkbox';\r\nimport Handles from '../core/Handles';\r\nimport Spinner from './Spinner';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport HashSource from '../core/HashSource';\r\nimport BrochuresManager from '../brochures/BrochuresManager';\r\nimport SessionManager from '../sessions/SessionManager';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class BrochureGeneration extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {getSiteAndUnits, showBrochuresMenu, getSelectedFavourites, getConfiguration} = props;\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tif(!getSiteAndUnits)throwNotProvided('getSiteAndUnits');\r\n\t\tthis._getSiteAndUnits = getSiteAndUnits;\r\n\t\tthis._getSelectedFavourites = getSelectedFavourites;\r\n\t\tthis._showBrochuresMenu = showBrochuresMenu;\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._titleRef = React.createRef();\r\n\t\tthis._firstNameRef = React.createRef();\r\n\t\tthis._surnameRef = React.createRef();\r\n\t\tthis._phoneNumberRef = React.createRef();\r\n\t\tthis._checkboxOptInPhoneRef = React.createRef();\r\n\t\tthis._checkboxOptInEmailRef = React.createRef();\r\n\t\tthis._checkboxOptInTextRef = React.createRef();\r\n\t\tthis._emailRef = React.createRef();\r\n\t\tthis._privacyNoticeCheckboxRef = React.createRef();\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis._currentDialog = null;\r\n\t\tthis._agreedToPrivacyNotice= false;\r\n\t\tthis._handleClickGenerate = this._handleClickGenerate.bind(this);\r\n\t\tthis._startPdfDownload= this._startPdfDownload.bind(this)\r\n\t\tthis._handleTitleChange = this._handleTitleChange.bind(this);\r\n\t\tthis._handleFirstNameChange = this._handleFirstNameChange.bind(this);\r\n\t\tthis._handleSurnameChange = this._handleSurnameChange.bind(this);\r\n\t\tthis._handleEmailChange = this._handleEmailChange.bind(this);\r\n\t\tthis._handlePhoneNumberChange = this._handlePhoneNumberChange.bind(this);\r\n\t\tthis._handleClickShowPrivacyPolicy = this._handleClickShowPrivacyPolicy.bind(this);\r\n\t\tthis._validateText = this._validateText.bind(this);\r\n\t\tthis._validatePhoneNumber = this._validatePhoneNumber.bind(this);\r\n\t\tthis._validateEmail=this._validateEmail.bind(this);\r\n\t\tthis._getClassNameField = this._getClassNameField.bind(this);\r\n\t\tthis._disposeCurrentDialog = this._disposeCurrentDialog.bind(this);\r\n\t\tthis._showHasNoPlotsFavouritedDialog = this._showHasNoPlotsFavouritedDialog.bind(this);\r\n\t\tthis._showYouMustAgreeToPrivacyNoticeDialog = this._showYouMustAgreeToPrivacyNoticeDialog.bind(this);\r\n\t\tthis._getOptInOptions= this._getOptInOptions.bind(this);\r\n\t\tthis._onClickBrochureGenerationResultDialog= this._onClickBrochureGenerationResultDialog.bind(this);\r\n\t\tthis._handleCheckboxAgreedToPrivacyNoticeChanged= this._handleCheckboxAgreedToPrivacyNoticeChanged.bind(this);\r\n\t\tthis._showResponseDialog = this._showResponseDialog.bind(this);\r\n\t\tthis._setGenerating = this._setGenerating.bind(this);\r\n\t\tthis.state = {generating:false, visible:false, titleValid:true, \r\n\t\t\temailValid:true, phoneNumberValid:true, firstNameValid:true,\r\n\t\t\tsurnameValid:true, agreedToPrivacyNotice:false};\r\n\t\tthis._spinnerHandles = new Handles();\r\n\t}\r\n\tload(props){\r\n\t\tconst {plots }=props||{};\r\n\t\tthis._plotsShownFor = plots;\r\n\t\tthis.show();\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t\tthis._clickedOffManager.register();\r\n\t}\r\n\thide(){\r\n\t\tthis._plotsShownFor = null;\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t\tthis._disposeCurrentDialog();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.BROCHURE_GENERATION;\r\n\t}\r\n\t_disposeCurrentDialog(){\r\n\t\tif(this._currentDialog&&this._currentDialog.current)\t\r\n\t\t\tthis._currentDialog.current.dispose();\r\n\t\tthis._currentDialog= null;\r\n\t}\r\n\t_showHasNoPlotsFavouritedDialog(){\r\n\t\tthis._currentDialog = Dialog.create({\r\n\t\t\ttitle:'Error', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'No plots favourited. Please click on the plots you like and click the favourite star :(',\r\n\t\t\toptions:[{text:'OK', callback:this.hide}]}\r\n\t\t);\r\n\t}\r\n\t_showYouMustAgreeToPrivacyNoticeDialog(){\r\n\t\tthis._currentDialog = Dialog.create({\r\n\t\t\ttitle:'Error', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'You must agree to the privacy notice!',\r\n\t\t\toptions:[{text:'OK'}]}\r\n\t\t);\r\n\t}\r\n\t_handleClickGenerate(){\r\n\t\tif(this.state.generating)return;\r\n\t\tif(!this._validateOnSubmission())\r\n\t\t\t\treturn;\r\n\t\tconst [site, units] = this._getSiteAndUnits();\r\n\t\tconst selectedPlotsArray = this._getSelectedFavourites();\r\n\t\tconst hasNoPlots = (!this._plotsShownFor||this._plotsShownFor.length<1)&&(selectedPlotsArray.length<1);\r\n\t\tif(hasNoPlots)\r\n\t\t{\r\n\t\t\tthis._showHasNoPlotsFavouritedDialog();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(!this._agreedToPrivacyNotice)\r\n\t\t{\r\n\t\t\tthis._showYouMustAgreeToPrivacyNoticeDialog();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst spinnerHandle = this._spinnerHandles.take();\r\n\t\ttry{\r\n\t\t\tconst plotNumbers = (this._plotsShownFor?this._plotsShownFor:selectedPlotsArray).map(selectedPlot=>selectedPlot.number);\r\n\t\t\tconst singlePlotBrochure = this._plotsShownFor?true:false;\r\n\t\t\tconst configuration = this._getConfiguration();\r\n\t\t\tconst { siteName, siteSlug}= configuration;\r\n\t\t\tthis._setGenerating(true);\r\n\t\t\tBrochuresManager.instance.generate({\r\n\t\t\t\tsiteName,\r\n\t\t\t\tsiteSlug,\r\n\t\t\t\tsinglePlotBrochure,\r\n\t\t\t\tplotNumbers,\r\n\t\t\t\ttitle:this._title,\r\n\t\t\t\tfirstName:this._firstName,\r\n\t\t\t\tsurname:this._surname,\r\n\t\t\t\temail:this._email,\r\n\t\t\t\tphoneNumber:this._phoneNumber,\r\n\t\t\t\toptInOptions:this._getOptInOptions(),\r\n\t\t\t\tagreedToPrivacyNotice:this._agreedToPrivacyNotice\r\n\t\t\t}).then((jObjectResponse)=>{\r\n\t\t\t\tthis._setGenerating(false);\r\n\t\t\t\tspinnerHandle.dispose();\r\n\t\t\t\tthis._showResponseDialog(jObjectResponse);\r\n\t\t\t}).catch((err)=>{\r\n\t\t\t\tthis._setGenerating(false);\r\n\t\t\t\tconsole.error(err);\r\n\t\t\t\tspinnerHandle.dispose();\r\n\t\t\t});\r\n\t\t}\r\n\t\tcatch{\r\n\t\t\tthis._setGenerating(false);\r\n\t\t\tspinnerHandle.dispose();\r\n\t\t}\r\n\t}\r\n\t_setGenerating(value){\r\n\t\tthis.setState({generating:value});\r\n\t}\r\n\t_showResponseDialog(jObjectResponse){\r\n\t\tthis._disposeCurrentDialog();\r\n\t\tif(!jObjectResponse.error){\r\n\t\t\tthis.hide();\r\n\t\t\tthis._currentDialog = Dialog.create({\r\n\t\t\t\ttitle:'Success', \r\n\t\t\t\tclassName:'brochure-generation-result-dialog',\r\n\t\t\t\tmessage:'You should receive an email shortly containing the brochure',\r\n\t\t\t\tonClickClose:this.hide,\r\n\t\t\t\toptions:[{text:'OK', callback:this._showBrochuresMenu}]}\r\n\t\t\t);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconsole.error(jObjectResponse.error);\r\n\t\tthis._currentDialog = Dialog.create({\r\n\t\t\ttitle:'Error', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'An error occured while generating the brochure :(',\r\n\t\t\toptions:[{text:'Retry', callback:this._handleClickGenerate}, {text:'OK', callback:this.hide}]}\r\n\t\t);\r\n\t}\r\n\t_getOptInOptions(){\r\n\t\tvar strs = [];\r\n\t\tif(this._checkboxOptInEmailRef.current.checked)\r\n\t\t\tstrs.push('email');\r\n\t\tif(this._checkboxOptInPhoneRef.current.checked)\r\n\t\t\tstrs.push('phone');\r\n\t\tif(this._checkboxOptInTextRef.current.checked)\r\n\t\t\tstrs.push('text');\r\n\t\treturn strs.join(',');\r\n\t}\r\n\t_onClickBrochureGenerationResultDialog(){\r\n\t\t\r\n\t}\r\n\t_startPdfDownload(url){\r\n\t\tconst link = document.createElement('a');\r\n\t\tlink.href = url;\r\n\t\tlink.target=\"_blank\";\r\n\t\tlink.download = 'brochure.pdf';\r\n\t\tlink.click();\r\n\t}\r\n\t_handleTitleChange(e){\r\n\t\tthis._title = e.target.value;\r\n\t\tthis.setState({titleValid:this._validateText(this._title)});\r\n\t}\r\n\t_handleFirstNameChange(e){\r\n\t\tthis._firstName = e.target.value;\r\n\t\tthis.setState({firstNameValid:this._validateText(this._firstName)});\r\n\t}\r\n\t_handleSurnameChange(e){\r\n\t\tthis._surname = e.target.value;\r\n\t\tthis.setState({surnameValid:this._validateText(this._surname)});\r\n\t}\r\n\t_handlePhoneNumberChange(e){\r\n\t\tthis._phoneNumber = e.target.value;\r\n\t\tthis.setState({phoneNumberValid:this._validateText(this._phoneNumber)});\r\n\t}\r\n\t_handleEmailChange(e){\r\n\t\tthis._email = e.target.value;\r\n\t\tthis.setState({emailValid:this._validateText(this._email)});\r\n\t}\r\n\t_validateText(text, allowEmpty){\r\n\t\tif(allowEmpty===undefined)allowEmpty=true;\r\n\t\treturn text!==undefined&&text!==null&&(allowEmpty||text.length>0);\r\n\t}\r\n\t_validatePhoneNumber(text, allowEmpty){\r\n\t\tlet valid = this._validateText(text, allowEmpty);\r\n\t\tif(!valid)return false;\r\n\t\tif(text.length<1&&allowEmpty)return true;\r\n\t\treturn PhoneNumberValidation.validateInternational(text);\r\n\t}\r\n\t_validateEmail(text, allowEmpty){\r\n\t\tlet valid = this._validateText(text, allowEmpty);\r\n\t\tif(!valid)return false;\r\n\t\tif(text.length<1&&allowEmpty)return true;\r\n\t\treturn EmailValidation.emailRFC5322(text);\r\n\t}\r\n\t_validateOnSubmission(){\r\n\t\tconst titleValid = this._validateText(this._title, false);\r\n\t\tconst firstNameValid= this._validateText(this._firstName, false);\r\n\t\tconst surnameValid= this._validateText(this._surname, false);\r\n\t\tconst emailValid= this._validateEmail(this._email, false);\r\n\t\tconst phoneNumberValid= this._validatePhoneNumber(this._phoneNumber, false);\r\n\t\tthis.setState({\r\n\t\t\ttitleValid:titleValid,\r\n\t\t\tfirstNameValid:firstNameValid,\r\n\t\t\tsurnameValid:surnameValid,\r\n\t\t\temailValid:emailValid,\r\n\t\t\tphoneNumberValid:phoneNumberValid\r\n\t\t});\r\n\t\treturn titleValid&&firstNameValid&&surnameValid&&emailValid&&phoneNumberValid;\r\n\t}\r\n\t_getClassNameField(name, valid){\r\n\t\treturn `${name} full-width field ${valid?\"valid\":\"invalid\"}`;\r\n\t}\r\n\t_handleClickShowPrivacyPolicy(){\r\n\t\tthis._iMenuManager.showMenuByType(MenuType.PRIVACY_POLICY);\r\n\t}\r\n\t_handleCheckboxAgreedToPrivacyNoticeChanged(e){\r\n\t\tthis._agreedToPrivacyNotice = e.checked\r\n\t\tthis.setState({agreedToPrivacyNotice:this._agreedToPrivacyNotice});\r\n\t}\r\n\trender() {\r\n\t\tlet className = \"brochure-generation menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+= \" visible\"\r\n\t\tconst classNameIconButtonGenerate= 'submit '+(this.state.generating?\"rotate\":null);\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t

    Don't miss out on the latest information regarding our new homes, offers and purchase schemes at this and neighbouring developments.\r\n\t\t\t\t\t

    \r\n\t\t\t\t\tPlease tick all the ways you're happy to be contacted \r\n\t\t\t\t
      \r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t\t)]\r\n\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t\t)]\r\n\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t
    • \r\n\t\t\t\t\t\t)]\r\n\t\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    • \r\n\t\t\t\t
    \r\n\t\t\t\t

    (Remember, you can opt out at any time if you change your mind)

    \r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t
    In order for us to keep in touch, you need to select one or more of the options above
    \r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tI have read and agree to the privacy policy\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t
    \r\n
    \t\t)\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './ImageViewer.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport MenuType from '../enums/MenuType';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport Slider from './Slider';\r\nimport ZoomableDragable from './ZoomableDragable';\r\nimport DynamicImage from '../images/DynamicImage';\r\nimport UrlHelper from '../core/UrlHelper';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class ImageViewer extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._clickedOffHandle = null;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._sliderRef = React.createRef();\r\n\t\tthis._pictureWrapperRef=React.createRef();\r\n\t\tthis._zoomableDragableRef = React.createRef();\r\n\t\tthis._subMenuHeaderRef = React.createRef();\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis._handleSliderZoomValueChanged = this._handleSliderZoomValueChanged.bind(this);\r\n\t\tthis._getContainerAspectRatio= this._getContainerAspectRatio.bind(this);\r\n\t\tthis._updateZoomSlider= this._updateZoomSlider.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._elementRef, hide:this.hide});\r\n\t\tthis.state={visible:false, url:null, zoom:1};\r\n\t\tthis._zoomMin = 1;\r\n\t\tthis._zoomMax = 5;\r\n\t}\r\n\tload(params){\r\n\t\tconst{image, rootUrl} = params;\r\n\t\tlet url;\r\n\t\tif(image instanceof DynamicImage){\r\n\t\t\tthrow new Error('Not implemented');\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif(typeof(image)!=='string')\r\n\t\t\t\tthrow new Error('Not implemented');\r\n\t\t\turl = image;\r\n\t\t}\r\n\t\turl = (rootUrl?rootUrl:'')+UrlHelper.removeStartSlash(url);\r\n\t\tthis._zoomableDragableRef.current.load(url);\r\n\t\tthis.show();\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._zoomableDragableRef.current.setZoom(this._zoomMin);\r\n\t\t},0);\r\n\t\t\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.IMAGE_VIEWER;\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._zoomableDragableRef.current.setZoom(this._zoomMin);\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeaderRef.current.setIMenuManager(value);\r\n\t}\r\n\t_handleSliderZoomValueChanged(value){\r\n\t\tthis._zoomableDragableRef.current.setZoom(value);\r\n\t}\r\n\t_getContainerAspectRatio(){\r\n\t\tconst imageWrapper = this._pictureWrapperRef.current;\r\n\t\tif(imageWrapper===null)return 1;\r\n\t\treturn imageWrapper.offsetWidth/imageWrapper.offsetHeight;\r\n\t}\r\n\t_updateZoomSlider(value){\r\n\t\tthis._sliderRef.current.setValue(value);\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"image-viewer menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\tconst slider = (
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    );\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './FavouriteEntry.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButton from './IconButton';\r\nimport Checkbox from './Checkbox';\r\nimport { faBackward, faTimes} from '@fortawesome/free-solid-svg-icons'\r\nimport Urls from '../urls/Urls';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class FavouriteEntry extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {favourite, onClickRemove, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tif(!favourite)throwNotProvided('favourite');\r\n\t\tthis._inputCheckbox = React.createRef();\r\n\t\tthis._callbackClickRemove = onClickRemove;\r\n\t\tthis._handleCheckboxChanged = this._handleCheckboxChanged.bind(this);\r\n\t\tthis._handleClickClose = this._handleClickClose.bind(this);\r\n\t\tthis._handleClick = this._handleClick.bind(this);\r\n\t\tthis._favourite = favourite;\r\n\t\tthis._selected = true;\r\n\t\tthis.state ={};\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis._inputCheckbox.current.checked=this._selected;\r\n\t}\r\n\tget sortValue(){\r\n\t\treturn this._favourite.sortValue;\r\n\t}\r\n\tget hash(){\r\n\t\treturn this._favourite.hash;\r\n\t}\r\n\tget favourite(){\r\n\t\treturn this._favourite;\r\n\t}\r\n\tget selected(){\r\n\t\treturn this._selected;\r\n\t}\r\n\t_handleCheckboxChanged(e){\r\n\t\tthis._selected = e.checked;\r\n\t}\r\n\t_handleClickClose(e){\r\n\t\tthis._callbackClickRemove(this._favourite);\r\n\t\te.stopPropagation&&e.stopPropagation();\r\n\t}\r\n\t_handleClick(e){\r\n\t\tthis._favourite.onClick();\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"favourite-entry\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
    \r\n\t\t\t\t
    );\r\n\t}\r\n}\r\n","import EfficientMoveCycle from './EfficientMoveCycle';\r\nimport Timer from '../core/Timer';\r\nfunction Drag(element, handle, minX, maxX, minY, maxY, callback, callbackStarted) {\r\n var minXPercent;\r\n var maxXPercent;\r\n var self = this;\r\n if (minY == undefined) {\r\n minY = 0;\r\n }\r\n if (minX== undefined) {\r\n minX = 0;\r\n }\r\n if (maxY== undefined) {\r\n maxY = 2000;\r\n }\r\n if (maxX== undefined) {\r\n maxX = 100;\r\n }\r\n var state = 0;\r\n var start;\r\n var timer;\r\n this.setPosition = function (array) {\r\n self.drag(array[0], array[1]);\r\n };\r\n this.getPosition = function () {\r\n var array = [];\r\n array[0] = element.offsetLeft;\r\n array[1] = element.offsetTop;\r\n return array;\r\n };\r\n const efficientMovingCycle = new EfficientMoveCycle({ \r\n\t\telement, stopPropagation:false, preventDefault:true, onStart:onStart, onMove:onMove, onEnd:onEnd , friendlyXY:true});\r\n\t\r\n\tlet startedButNotMovedYet= false;\r\n\tthis.updateMinMax = function(){\r\n\t\tmaxXPercent = maxX - ((100 * element.offsetWidth) / document.documentElement.clientWidth);\r\n minXPercent = minX;\r\n if (maxXPercent < 0) {\r\n maxXPercent = 0;\r\n }\r\n else {\r\n if (maxXPercent > 100) {\r\n maxXPercent = 100;\r\n }\r\n }\r\n\t};\r\n function onStart(e)\r\n {\r\n\t\tstartedButNotMovedYet = true;\r\n\t\tconst {x, y}= e;\r\n if (element.style.display === \"none\")\r\n {\r\n return;\r\n }\r\n start = [element.offsetLeft - x, element.offsetTop - y];\r\n self.updateMinMax();\r\n timer = new Timer({callback:function () { if (callback != undefined) { callback(); } }, delay:1000, nTicks:1});\r\n state = 1;\r\n }\r\n function onMove(e)\r\n {\r\n\t\tif(startedButNotMovedYet){\r\n\t\t\tstartedButNotMovedYet = false;\r\n\t\t\tif(!Drag.cancel)\r\n\t\t\t\tif(callbackStarted)callbackStarted(e);\r\n\t\t}\r\n\t\tconst {x, y}= e;\r\n if(!Drag.cancel)\r\n if (state == 1) {\r\n self.drag((start[0] + x), (start[1] + y));\r\n timer.reset(true);\r\n }\r\n }\r\n this.drag=function(x, y)\r\n {\r\n\t\tvar left = 100 * x / document.documentElement.clientWidth;\r\n\t\tif (left < minXPercent) {\r\n\t\t\tleft = minXPercent;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (left > maxXPercent) {\r\n\t\t\t\tleft = maxXPercent;\r\n\t\t\t}\r\n\t\t}\r\n\t\telement.style.left = String(left) + '%';\r\n\t\tif (y < minY) {\r\n\t\t\ty = minY;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tif (y+element.offsetHeight > maxY) {\r\n\t\t\t\ty = maxY - element.offsetHeight;\r\n\t\t\t}\r\n\t\t}\r\n\t\telement.style.top = String(y) + 'px';\r\n };\r\n function onEnd(e) { \r\n Drag.cancel=false;\r\n state=0;\r\n };\r\n}\r\nexport default Drag;","function setText(element, text){\r\n\telement.innerHTML=text;\r\n}\r\nexport default setText;","import isMobile from '../core/isMobile';\r\nimport Timer from '../core/Timer';\r\nfunction Resizer({div, divInner, minWidth, minHeight, maxWidth, maxHeight, \r\n\t\tbounds, callbackResized, callbackInstantaneous, callbackStarted, \r\n\t\ttoInclude, fixedAspectRatio}) {\r\n var bounds = {maxYPx:2000,\r\n\tminYPx:0,\r\n\tmaxXPercentage:100,\r\n\tminXPercentage:0};\r\n\tif(toInclude===undefined||toInclude===null)toInclude = {top:true, left:true, bottom:true, right:true,\r\n\t\tleftTop:true, leftBottom:true, rightTop:true, rightBottom:true};\r\n\t\t\r\n\tvar divLeft, divTop , divRight, divBottom, divLeftTop, divLeftBottom, divRightTop, divRightBottom;\r\n\t\r\n\tthis.setFixedAspectRatio = function(value){\r\n\t\tfixedAspectRatio= value;\r\n\t};\r\n\tif(toInclude.leftTop){\r\n\t\tdivLeftTop = document.createElement('div');\r\n\t\tsetCornerGeneric(divLeftTop);\r\n\t\tdivLeftTop.style.top = '0px';\r\n\t\tdivLeftTop.style.left = '0px';\r\n\t\tdivLeftTop.style.cursor = 'nw-resize';\r\n\t}\r\n\tif(toInclude.leftBottom){\r\n\t\tdivLeftBottom = document.createElement('div');\r\n\t\tsetCornerGeneric(divLeftBottom);\r\n\t\tdivLeftBottom.style.bottom = '0px';\r\n\t\tdivLeftBottom.style.left = '0px';\r\n\t\tdivLeftBottom.style.cursor = 'sw-resize';\r\n\t}\r\n\t\r\n\tif(toInclude.rightTop){\r\n\t\tdivRightTop = document.createElement('div');\r\n\t\tsetCornerGeneric(divRightTop);\r\n\t\tdivRightTop.style.top = '0px';\r\n\t\tdivRightTop.style.right = '0px';\r\n\t\tdivRightTop.style.cursor = 'sw-resize';\r\n\t}\r\n\t\r\n\tif(toInclude.rightBottom){\r\n\t\tdivRightBottom = document.createElement('div');\r\n\t\tsetCornerGeneric(divRightBottom);\r\n\t\tdivRightBottom.style.bottom = '0px';\r\n\t\tdivRightBottom.style.right = '0px';\r\n\t\tdivRightBottom.style.cursor = 'nw-resize';\r\n\t}\r\n\tif(toInclude.left){\r\n\t\tdivLeft = document.createElement('div');\r\n\t\tdivLeft.style = `position:absolute;z-index:100;width:${Resizer.WIDTH}px;height:100%;left:0px;top:0px;cursor:e-resize;`;\r\n\t}\r\n\tif(toInclude.right){\r\n\t\tdivRight = document.createElement('div');\r\n\t\tdivRight.style = `position:absolute;z-index:100;width:${Resizer.WIDTH}px;height:100%;right:0px;top:0px;cursor:e-resize;`;\r\n }\r\n\tif(toInclude.top){\r\n\t\tdivTop = document.createElement('div');\r\n\t\tdivTop.style = `position:absolute;z-index:100;width:100%;height:${Resizer.WIDTH}px;top:0px;left:0px;cursor:n-resize;`;\r\n }\r\n\tif(toInclude.bottom){\r\n\t\tdivBottom = document.createElement('div');\r\n\t\tdivBottom.style = `position:absolute;z-index:100;width:100%;height:${Resizer.WIDTH}px;bottom:0px;left:0px;cursor:n-resize;`;\r\n }\r\n\tfunction setCornerGeneric(div)\r\n {\r\n div.style.position = 'absolute';\r\n div.style.width = '10px';\r\n div.style.height = '10px';\r\n div.style.zIndex = '102';\r\n }\r\n if(minWidth maxWidth)\r\n {\r\n return;\r\n }\r\n div.style.width = String(width) + 'px';\r\n div.style.left = String(left) + 'px';\r\n }\r\n function resizeRight(x, y, a) {\r\n var width = a + x;\r\n if (width < minWidth || width > maxWidth || 100 * ((width + div.offsetLeft) / document.documentElement.offsetWidth) > bounds.maxXPercentage) {\r\n return;\r\n }\r\n div.style.width = String(width) + 'px';\r\n }\r\n function resizeTop(x, y, a, b) {\r\n var height = a - y;\r\n var top = b + y;\r\n if (top < bounds.minYPx || height < minHeight || height > maxHeight) {\r\n return;\r\n }\r\n div.style.height = String(height) + 'px';\r\n div.style.top = String(top) + 'px';\r\n }\r\n function resizeBottom(x, y, a) {\r\n var height = a + y;\r\n if (height < minHeight || height > maxHeight || div.offsetTop + height > bounds.maxYPx) {\r\n return;\r\n }\r\n div.style.height = String(height) + 'px';\r\n }\r\n function doResize(e) {\r\n var x = e.pageX;\r\n var y = e.pageY;\r\n\t\t\r\n switch (state) {\r\n case \"up\":\r\n return;\r\n case \"down-left\":\r\n resizeLeft(x, y, startOffset[0], startOffset[1]);\r\n break;\r\n case \"down-right\":\r\n resizeRight(x, y, startOffset[0]);\r\n break;\r\n case \"down-top\":\r\n resizeTop(x, y, startOffset[0], startOffset[1]);\r\n break;\r\n case \"down-bottom\":\r\n resizeBottom(x, y, startOffset[0]);\r\n break;\r\n case \"down-left-top\":\r\n resizeLeft(x, y, startOffset[0], startOffset[1]);\r\n resizeTop(x, y, startOffset[2], startOffset[3]);\r\n break;\r\n case \"down-left-bottom\":\r\n resizeLeft(x, y, startOffset[0], startOffset[1]);\r\n resizeBottom(x, y, startOffset[2]);\r\n break;\r\n case \"down-right-top\":\r\n resizeRight(x, y, startOffset[0]);\r\n resizeTop(x, y, startOffset[1], startOffset[2]);\r\n break;\r\n case \"down-right-bottom\":\r\n resizeRight(x, y, startOffset[0]);\r\n resizeBottom(x, y, startOffset[1]);\r\n break;\r\n }\r\n timer.reset();\r\n if (callbackInstantaneous)\r\n {\r\n try\r\n {\r\n callbackInstantaneous();\r\n }\r\n catch(ex)\r\n {\r\n console.log(ex);\r\n }\r\n }\r\n }\r\n this.setBounds = function (boundsIn)//work in progress.\r\n {\r\n var previousBounds = bounds;\r\n bounds = boundsIn;\r\n if (previousBounds.minYpx < bounds.minYPx)\r\n {\r\n\r\n }\r\n if (previousBounds.maxYPx > bounds.maxYPx)\r\n {\r\n\r\n }\r\n if (previousBounds.minXPercent < bounds.minXPercentage)\r\n {\r\n\r\n }\r\n if (previousBounds.maxXPercent > bounds.maxXPercent)\r\n {\r\n\r\n }\r\n };\r\n}\r\nResizer.padding = 3;\r\nResizer.WIDTH=6;\r\nexport default Resizer;\r\n\r\n","var SelectHelper=new(function(){\r\nvar selectStrings =['webkitTouchCallout', 'webkitUserSelect', 'khtmlUserSelect', 'MozUserSelect', 'msUserSelect', 'userSelect', 'UserSelect'];\r\nthis.makeSelectable=function(element){\r\n setSelectable(element, \"element\");\r\n};\r\nthis.makeUnselectable=function(element){\r\n setSelectable(element, \"none\");\r\n};\r\nfunction setSelectable(element, selectableString)\r\n{\r\n if (element && element.type != 'text')//not text because this breaks internet explorer, stopping editing of text..\r\n {\r\n if (selectableString == \"none\")\r\n {\r\n if (element.nodeType == 1) {\r\n element.setAttribute(\"unselectable\", \"on\");\r\n\r\n }\r\n if (element.onselectstart != undefined)// if IE\r\n {\r\n element.onselectstart = function () {\r\n return false;\r\n };\r\n }\r\n }\r\n if (element.style)\r\n {\r\n var i = 0;\r\n selectStrings.forEach((selectString)=>{\r\n if (element.style[selectString] != undefined)// if Firefox\r\n {\r\n element.style[selectString] = selectableString;\r\n }\r\n i++;\r\n });\r\n }\r\n var child = element.firstChild;\r\n while (child) {\r\n setSelectable(child, selectableString);\r\n child = child.nextSibling;\r\n }\r\n }\r\n}\r\n})();\r\nexport default SelectHelper;","function Settings(settingsName, callbackReset)\r\n{\r\n this.get = function (name)\r\n {\r\n try\r\n {\r\n //return JSON.parse(getCookie(settingsName + '_' + name));\r\n return JSON.parse(localStorage.getItem(settingsName + '_' + name));\r\n\t\t}\r\n\t\tcatch(ex)\r\n\t\t{\r\n\t\t\treturn undefined;\r\n\t\t}\r\n };\r\n this.set = function (name, obj)\r\n {\r\n try\r\n {\r\n //setCookie(settingsName + '_' + name, JSON.stringify(obj));\r\n localStorage.setItem(settingsName + '_' + name, JSON.stringify(obj));\r\n }\r\n catch(ex)\r\n {\r\n console.log(ex);\r\n }\r\n };\r\n this.reset=callbackReset;\r\n Settings.instances.push(this);\r\n}\r\nSettings.getAll=function(){\r\n return localStorage;\r\n};\r\nSettings.addRange=function(obj)\r\n{\r\n for(var key in obj)\r\n {\r\n localStorage.setItem(key, JSON.stringify(obj[key]));\r\n }\r\n};\r\nSettings.instances=[];\r\nSettings.resetAll = function ()\r\n{\r\n \r\n};\r\nexport default Settings;","import Windows from './Windows';\r\nimport HashSource from '../core/HashSource';\r\nimport Urls from '../urls/Urls';\r\nimport Drag from '../ui_core/Drag';\r\nimport Hover from '../ui_core/Hover';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport setText from '../ui_core/setText';\r\nimport Resizer from '../ui_core/Resizer';\r\nimport SelectHelper from '../ui_core/SelectHelper';\r\nimport verticallyCenter from '../ui_core/verticallyCenter';\r\nimport isMobile from '../core/isMobile';\r\nimport eventEnable from '../core/eventEnable';\r\nimport Timer from '../core/Timer';\r\nimport Settings from '../core/Settings';\r\nimport EventNames from './WindowEventNames';\r\n\t\r\nconst defaults = {\r\n\tminWidth:100,\r\n\tminHeight:100,\r\n\tmaxWidth:1000,\r\n\tmaxHeight:1000,\r\n\tminXPerc:0,\r\n\tminYPx:0,\r\n\tmaxXPerc:100,\r\n\tmaxYPx:10000,\r\n\tResizer:true,\r\n\tdragable:true,\r\n\tcloseable:true,\r\n\tminimizable:true,\r\n\tmaximizable:true,\r\n\tminimizeOnClose:false\r\n\t\r\n};\r\nvar defaultsOptional={};\r\nconst GenericWindow= function(params){\r\n\tvar self = this;\r\n\teventEnable(this);\r\n\tthis._hash = HashSource.next();\r\n\tfor(var i in Object.keys(defaults))\r\n\t{\r\n\t\tif(params[i]===undefined)\r\n\t\t\tparams[i]=defaults[i];\r\n\t}\r\n\t\r\n\tvar previousSizes, maximizedSizes, cancelBringToFront;\r\n\tvar buttonClose, buttonMinimize, buttonMaximize;\r\n\tvar timerFlash, flashing = false, flashCount=0;\r\n\t\r\n\tvar name = params.name?params.name:'default';\r\n\tvar tooltipMessage=params.tooltipMessage;\r\n\tlet{ iconPath, minWidth, maxWidth, minHeight, maxHeight, defaultWidth, defaultHeight,\r\n\t\tdefaultX, defaultY, minimized, maximized, minimizable, maximizable, closeable, \r\n\t\tminimizeOnClose, resizable, dragable, minXPerc, maxXPerc, maxYPx, minYPx, zIndexOffset, \r\n\t\ttype, parentElement, element, toggleMaximizeOnDoubleClick}= params;\r\n\tif(!element) element = document.createElement('div');\r\n\telement.classList.add('generic-window');\r\n\t\r\n\tconst divInner = document.createElement('div');\r\n\tdivInner.classList.add('inner');\r\n\t\r\n\tconst divTab = document.createElement('div');\r\n\tdivTab.classList.add('tab');\r\n\t\r\n\tconst divMain = document.createElement('div');\r\n\tdivMain.classList.add('main');\r\n\t\r\n\tvar divName = document.createElement('div');\r\n\tdivName.classList.add('name');\r\n\t\r\n\tsetText(divName, name);\r\n\telement.appendChild(divInner);\r\n\tdivInner.appendChild(divTab);\r\n\tdivTab.appendChild(divName);\r\n\tdivInner.appendChild(divMain);\r\n\t(parentElement?parentElement:document.documentElement).appendChild(element);\r\n\t\r\n\t\r\n\tthis.getType= function(){\r\n\t\treturn type;\r\n\t};\r\n\tvar saveName = params.saveName? params.saveName:name;\r\n\t\r\n\tvar settings = new Settings(saveName, function () {\r\n\t\tthis.set(\"position\");\r\n\t\tthis.set(\"size\");\r\n\t\tthis.set(\"zIndex\");\r\n\t});\r\n\tWindows._instances.push(this);\r\n\t\r\n\tthis.flash = flash;\r\n\t\r\n\tthis.getHash=function(){\r\n\t\treturn this._hash;\r\n\t};\r\n\tthis.setName = function(name){\r\n\t\tsetText(divName, name);\r\n\t};\r\n\tthis.setTooltipMessage = function(value){\r\n\t\ttooltipMessage = value;\r\n\t};\r\n\tthis.getIcon=function(){\r\n\t\treturn iconPath;\r\n\t};\r\n\tthis.getTooltip = function(){\r\n\t\treturn tooltipMessage;\r\n\t};\r\n\tthis._setZIndex=function(zIndex){\r\n\t\telement.style.zIndex=String(zIndex);\r\n\t\tsettings.set(\"zIndex\", zIndex);\r\n\t\tdispatchZIndexChangedEvent();\r\n\t};\r\n\tthis.getState=function(){\r\n\t\treturn {maximized:maximized, minimized:minimized};\r\n\t};\r\n\tthis.maximize = maximize;\r\n\tthis.unmaximize = unmaximize;\r\n\tthis.minimize = minimize;\r\n\tthis.toggleMinimize = toggleMinimize;\r\n\tthis.unminimize=unminimize;\r\n\tthis.close = close;\r\n\tthis.focus = focus;\r\n\tthis.bringToFront = bringToFront;\r\n\tthis.toggleMaximize = toggleMaximize;\r\n\t\r\n\tthis._screenResized=function(obj) {\r\n\t\tif (maximized&(resizable||!window.isMobile))setWindowSizePositionMaximized();\r\n\t}\r\n\t\r\n\tthis.getMinimizable=function(){\r\n\t\treturn minimizable;\r\n\t};\r\n\tthis.getElement = function(){\r\n\t\treturn element;\r\n\t};\r\n\tthis.getParentElement = function(){\r\n\t\treturn parentElement;\r\n\t};\r\n\tthis.getTabElement = function(){\r\n\t\treturn divTab;\r\n\t};\r\n\tthis.fillLeftHalf = function(){\r\n\t\tmaximized = false;\r\n\t\tunminimize();\r\n\t\t//previousSizes = getSizes();\r\n\t\tif(resizable||!window.isMobile){\r\n\t\t\tconst p = resizable?Resizer.padding:0;\r\n\t\t\tsetWindowSizePosition({\r\n\t\t\t\twidth:(parentElement?parentElement:document.documentElement).clientWidth/2, \r\n\t\t\t\theight:((parentElement?parentElement:document.documentElement).clientHeight - p),\r\n\t\t\t\ttop:-p,\r\n\t\t\t\tleft:-p\r\n\t\t\t});\r\n\t\t}\r\n\t\tbringToFront();\r\n\t};\r\n\tthis.fillRightHalf = function(){\r\n\t\tmaximized = false;\r\n\t\tunminimize();\r\n\t\t//previousSizes = getSizes();\r\n\t\tif(resizable||!window.isMobile){\r\n\t\t\tconst p = resizable?Resizer.padding:0;\r\n\t\t\tconst halfWidth = (parentElement?parentElement:document.documentElement).clientWidth/2;\r\n\t\t\tsetWindowSizePosition({\r\n\t\t\t\twidth:halfWidth, \r\n\t\t\t\theight:((parentElement?parentElement:document.documentElement).clientHeight - p),\r\n\t\t\t\ttop:-p,\r\n\t\t\t\tleft:halfWidth-p\r\n\t\t\t});\r\n\t\t}\r\n\t\tbringToFront();\r\n\t};\r\n\tstopEventPropagation(divMain, ['mousedown']);\r\n\tdivMain.addEventListener('mousedown',clickedOnMe);\r\n\tthis.getMainElement = function(){\r\n\t\treturn divMain;\r\n\t};\r\n\tthis.getPosition = function(){\r\n\t\treturn [element.offsetLeft, element.offsetTop];\r\n\t};\r\n\t(parentElement?parentElement:document.documentElement).classList.add('web-windows');\r\n\tSelectHelper.makeUnselectable(element);\r\n\t\r\n\tdocument.body.appendChild(element);\r\n\telement.addEventListener(\"mousedown\", clickedOnMe);\r\n\tif(toggleMaximizeOnDoubleClick===undefined||toggleMaximizeOnDoubleClick)\r\n\t\tdivTab.addEventListener('dblclick', toggleMaximize);\r\n\tinitializePadding();\r\n\tif (!window.isMobile)\r\n\t{\r\n\t\tif (resizable)\r\n\t\t{\r\n\t\t\tself._resizer = new Resizer({div:element, divInner, minWidth, minHeight, maxWidth, maxHeight,\r\n\t\t\t\tbounds:self.currentBounds, callbackResized:resized, callbackInstantaneous:null, \r\n\t\t\tcallbackStarted:resizerStarted});\r\n\t\t}\r\n\t\tif (dragable)\r\n\t\t{\r\n\t\t\tself._drag = new Drag(element, divTab, minXPerc, maxXPerc, minYPx,\r\n\t\t\t\tmaxYPx, dragged, dragStarted);\r\n\t\t}\r\n\t\t\r\n\t\tconst fillerElement = document.createElement('div');\r\n\t\tfillerElement.classList.add('filler');\r\n\t\tdivTab.appendChild(fillerElement);\r\n\t\tif (minimizable)\r\n\t\t{\r\n\t\t\tconst iconButonMinimize = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Minimize.png', \r\n\t\t\tonClick:minimize});\r\n\t\t\tdivTab.appendChild(iconButonMinimize.element);\r\n\t\t\tstopEventPropagation(iconButonMinimize.element, ['touchstart', 'mousedown']);\r\n\t\t}\r\n\t\tif (maximizable)\r\n\t\t{\r\n\t\t\tconst iconButonMaximize = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Maximize.png', \r\n\t\t\tonClick:toggleMaximize});\r\n\t\t\tdivTab.appendChild(iconButonMaximize.element);\r\n\t\t\tstopEventPropagation(iconButonMaximize.element, ['touchstart', 'mousedown']);\r\n\t\t}\r\n\t}\r\n\tif (closeable||minimizeOnClose)\r\n\t{\r\n\t\tconst iconButonClose = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Exit.png', \r\n\t\t\tonClick:()=>{\r\n\t\t\t\tif (minimizeOnClose)\r\n\t\t\t\t\tminimize();\r\n\t\t\t\telse\r\n\t\t\t\t\tclose();\r\n\t\t\t\t}\r\n\t\t});\r\n\t\tdivTab.appendChild(iconButonClose.element);\r\n\t\tstopEventPropagation(iconButonClose.element, ['touchstart', 'mousedown']);\r\n\t}\r\n\tif(!window.isMobile){\r\n\t\tvar startPosition = settings.get(\"position\");\r\n\t\tif (!startPosition)\r\n\t\t{\r\n\t\t\tstartPosition = Windows.getStartPosition(this);\r\n\t\t} \r\n\t\tconsole.log('start position was ');\r\n\t\tconsole.log(startPosition);\r\n\t\telement.style.left = String(startPosition[0]) + 'px';\r\n\t\telement.style.top = String(startPosition[1]) + 'px';\r\n\r\n\t\tvar startSize = settings.get(\"size\");\r\n\t\tif (startSize)\r\n\t\t{\r\n\t\t\tif (startSize[0] < minWidth)\r\n\t\t\t\tstartSize[0] = minWidth;\r\n\t\t\tif (startSize[1] < minHeight)\r\n\t\t\t\tstartSize[1] = minHeight;\r\n\t\t\telement.style.width = String(startSize[0]) + 'px';\r\n\t\t\telement.style.height = String(startSize[1]) + 'px';\r\n\t\t} else\r\n\t\t{\r\n\t\t\telement.style.width = String(defaultWidth) + 'px';\r\n\t\t\telement.style.height = String(defaultHeight) + 'px';\r\n\t\t}\r\n\t}\r\n\r\n\tvar startZIndex = settings.get(\"zIndex\");\r\n\tif (startZIndex)\r\n\t{\r\n\t\telement.style.zIndex = String(startZIndex);\r\n\t}\r\n\telement.appendChild(divInner);\r\n\t\r\n\tthis.setWindowSizePosition = setWindowSizePositionConsideringResizers;\r\n\tif(!minimized)_unminimize();\r\n\tWindows._dispatchWindowCreatedEvent(self);\r\n\tif (bringToFront != false)self.bringToFront();\r\n\tfunction show()\r\n\t{\r\n\t\telement.classList.add('visible');\r\n\t}\r\n\tfunction hide()\r\n\t{\r\n\t\telement.classList.remove('visible');\r\n\t}\r\n\tfunction flash(){\r\n\t\tvar flashing = false;\r\n\t\tflashCount=0;\r\n\t\tif(!timerFlash)\r\n\t\t\ttimerFlash = new Timer({\r\n\t\t\t\tcallback:()=> {\r\n\t\t\t\tif (flashing) {\r\n\t\t\t\t\tdivInner.classList.remove('flashing');\r\n\t\t\t\t\tif(flashCount>=6)\r\n\t\t\t\t\t\ttimerFlash.stop();\r\n\t\t\t\t\tflashing = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tdivInner.classList.add('flashing');\r\n\t\t\t\t\tflashing = true;\r\n\t\t\t\t}\r\n\t\t\t\tflashCount++;\r\n\t\t}, delay:50, nTicks:-1});\r\n\t\telse{\r\n\t\t\ttimerFlash.reset();\r\n\t\t\tflashCount=0;\r\n\t\t}\r\n\t}\r\n\tfunction setWindowSizePositionMaximized(){\r\n\t\tconst p = resizable?(Resizer.padding * 2):0;\r\n\t\tsetWindowSizePosition({\r\n\t\t\twidth:(parentElement?parentElement:document.documentElement).clientWidth, \r\n\t\t\theight:(parentElement?parentElement:document.documentElement).clientHeight - p ,\r\n\t\t\ttop:resizable?-Resizer.padding:0,\r\n\t\t\tleft:resizable?-Resizer.padding:0\r\n\t\t});\r\n\t}\r\n\tfunction setWindowSizePositionConsideringResizers({width, height, top, left}){\r\n\t\tsetWindowSizePosition({\r\n\t\t\twidth:width, \r\n\t\t\theight:height,\r\n\t\t\ttop:top-Resizer.WIDTH,\r\n\t\t\tleft:left-Resizer.WIDTH\r\n\t\t});\r\n\t}\r\n\tfunction clickedOnMe(){\r\n\t\tif(!cancelBringToFront)\r\n\t\t\tbringToFront();\r\n\t\tcancelBringToFront = false;\r\n\t\tdispatchFocussedEvent();\r\n\t}\r\n\tfunction initializePadding(){ \r\n\t\tvar padding=!window.isMobile?3:0;\r\n\t\tvar paddingString = String(padding) + 'px';\r\n\t\telement.style.padding = paddingString;\r\n\t\tdivInner.style.position = 'absolute';\r\n\t\tdivInner.style.left = paddingString;\r\n\t\tdivInner.style.top = paddingString;\r\n\t\tdivInner.style.right = paddingString;\r\n\t\tdivInner.style.bottom = paddingString;\r\n\t}\r\n\tfunction close()\r\n\t{\r\n\t\tWindows._instances.splice(Windows._instances.indexOf(this), 1);\r\n\t\telement.parentNode.removeChild(element);\r\n\t\tdispatchClosedEvent();\r\n\t\tWindows._dispatchWindowDestroyedEvent(self);\r\n\t}\r\n\tfunction resized(){\r\n\t\tif(maximized){\r\n\t\t\tif(!maximizedSizes.equals(getSizes())){\r\n\t\t\t\tmaximized=false;\r\n\t\t\t}\r\n\t\t}\r\n\t\tsettings.set(\"position\", [element.offsetLeft, element.offsetTop]);\r\n\t\tsettings.set(\"size\", [element.offsetWidth, element.offsetHeight]);\r\n\t\tdispatchResizedEvent();\r\n\t}\r\n\tfunction minimize() {\r\n\t\tmaximized = false;\r\n\t\tif(minimized) return;\r\n\t\thide();\r\n\t\tWindows.sendToBack(self);\r\n\t\tminimized=true;\r\n\t\tdispatchMinimizedEvent();\r\n\t}\r\n\tfunction unminimize(){\r\n\t\tif(!minimized)\r\n\t\t\treturn;\r\n\t\t_unminimize();\r\n\t}\r\n\tfunction _unminimize(){\r\n\t\tshow();\r\n\t\tminimized=false;\r\n\t\tdispatchUnminimizedEvent();\r\n\t\tbringToFront();\r\n\t}\r\n\tfunction toggleMinimize(){\r\n\t\t\r\n\t\tif(minimized) unminimize();\r\n\t\telse minimize();\r\n\t}\r\n\tfunction maximize()\r\n\t{\r\n\t\tif(maximized)return;\r\n\t\tunminimize();\r\n\t\tpreviousSizes = getSizes();\r\n\t\tif(resizable||!window.isMobile)\r\n\t\t\tsetWindowSizePositionMaximized();\r\n\t\tmaximizedSizes = getSizes();\r\n\t\tmaximized = true;\r\n\t\tdispatchMaximizedEvent();\r\n\t\tbringToFront();\r\n\t}\r\n\tfunction unmaximize(mouseDragPosition)\r\n\t{\r\n\t\tif(!maximized)return;\r\n\t\tif (previousSizes)\r\n\t\t{\r\n\t\t\tif (!mouseDragPosition)\r\n\t\t\t\tsetWindowSizePosition({\r\n\t\t\t\t\twidth:previousSizes.width,\r\n\t\t\t\t\theight:previousSizes.height,\r\n\t\t\t\t\ttop:previousSizes.top,\r\n\t\t\t\t\tleft:previousSizes.left\r\n\t\t\t\t});\r\n\t\t\telse {\r\n\t\t\t\tvar b = mouseDragPosition.left / (parentElement?parentElement:document.documentElement).clientWidth;\r\n\t\t\t\tvar leftOffset = (b * previousSizes.width);\r\n\t\t\t\tvar l = mouseDragPosition.left - leftOffset;\r\n\t\t\t\tsetWindowSizePosition({\r\n\t\t\t\t\twidth:previousSizes.width, \r\n\t\t\t\t\theight:previousSizes.height,\r\n\t\t\t\tleft:l\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t\tmaximized = false;\r\n\t\tself._drag?.updateMinMax();\r\n\t\tdispatchUnmaximizedEvent();\r\n\t}\r\n\tfunction toggleMaximize()\r\n\t{\r\n\t\tif (!maximized)\r\n\t\t{\r\n\t\t\tmaximize();\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\tunmaximize();\r\n\t\t}\r\n\t}\r\n\tfunction bringToFront()\r\n\t{\r\n\t\tconst instances = Windows._instances;\r\n\t\tconst instance = instances.splice(instances.indexOf(self), 1)[0];\r\n\t\tinstances.push(instance);\r\n\t\tWindows._updateZIndices();\r\n\t};\r\n\tfunction focus(){\r\n\t\tbringToFront();\r\n\t\tdispatchFocussedEvent();\r\n\t}\r\n\tfunction dragged(){\r\n\t\tsettings.set(\"position\", [element.offsetLeft, element.offsetTop]);\r\n\t\tdispatchMovedEvent();\r\n\t\tdispatchDraggedEvent();\r\n\t}\r\n\tfunction dragStarted(e){\r\n\t\tconsole.log('dragStarted');\r\n\t\tif(maximized)\r\n\t\t\tunmaximize({left: e.screenX});\r\n\t\tdispatchDragStarted();\r\n\t}\r\n\tfunction getSizes()\r\n\t{\r\n\t\tvar p = Resizer.padding * 2;\r\n\t\treturn new (function(){\r\n\t\t\t\tvar self = this;\r\n\t\t\t\tthis.width=element.offsetWidth - p; \r\n\t\t\t\tthis.height= element.offsetHeight - p; \r\n\t\t\t\tthis.top= element.offsetTop;\r\n\t\t\t\tthis.left= element.offsetLeft;\r\n\t\t\t\tthis.equals=function(s){\r\n\t\t\t\t\treturn self.width==s.width&&self.height==s.height&&self.top==s.top&&self.left==s.left;\r\n\t\t\t\t};\r\n\t\t})();\r\n\t}\r\n\r\n\tfunction setWindowSizePosition(params)\r\n\t{\r\n\t\telement.style.height = String(params.height) + 'px';\r\n\t\telement.style.width = String(params.width) + 'px';\r\n\t\tif (params.top!==undefined)\r\n\t\t\telement.style.top = String(params.top) + 'px';\r\n\t\tif (params.left!==undefined)\r\n\t\t\telement.style.left = String(params.left) + 'px';\r\n\t}\r\n\tfunction resizerStarted(){\r\n\t\tconsole.log('resizerStarted');\r\n\t\tmaximized = false;\r\n\t\tdispatchResizerStartedEvent();\r\n\t}\r\n\tfunction dispatchResizedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.RESIZED});\r\n\t}\r\n\tfunction dispatchResizerStartedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.RESIZE_STARTED});\r\n\t}\r\n\tfunction dispatchMaximizedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.MAXIMIZED});\r\n\t}\r\n\tfunction dispatchMinimizedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.MINIMIZED});\r\n\t}\r\n\tfunction dispatchUnminimizedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.UNMINIMIZED});\r\n\t}\r\n\tfunction dispatchUnmaximizedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.UNMAXIMIZED});\r\n\t}\r\n\tfunction dispatchDragStarted(){\r\n\t\tself.dispatchEvent({type:EventNames.DRAG_STARTED});\r\n\t}\r\n\tfunction dispatchMovedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.MOVED});\r\n\t}\r\n\tfunction dispatchClosedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.CLOSED});\r\n\t}\r\n\tfunction dispatchFocussedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.FOCUSSED, window:self});\r\n\t}\r\n\tfunction dispatchDraggedEvent(){\r\n\t\tconsole.log('dispatchDraggedEvent');\r\n\t\tself.dispatchEvent({type:EventNames.DRAGGED});\r\n\t}\r\n\tfunction dispatchZIndexChangedEvent(){\r\n\t\tself.dispatchEvent({type:EventNames.Z_INDEX_CHANGED});\r\n\t}\r\n};\r\nGenericWindow.EventNames = EventNames;\r\nexport default GenericWindow;","import React, { Component } from 'react';\r\nimport './SubMenuHeader.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from './IconButtonNonReact';\r\nimport IconButton from './IconButton';\r\nimport { faBackward, faTimes} from '@fortawesome/free-solid-svg-icons'\r\nimport Urls from '../urls/Urls';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class SubMenuHeaderNonReact {\r\n\tconstructor(props){\r\n\t\tconst {title, children, menuManager}=props;\r\n\t\tthis._iMenuManager = menuManager;\r\n\t\tthis._children = children;\r\n\t\tthis._hasChildren=children?true:false;\r\n\t\tthis._handleClickButtonBack= this._handleClickButtonBack.bind(this);\r\n\t\tthis._handleClickButtonClose= this._handleClickButtonClose.bind(this);\r\n\t\tthis._iMenuManager = menuManager;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('sub-menu-header');\r\n\t\tif(this._hasChildren)\r\n\t\t\tthis._element.classList.add('has-children');\r\n\t\t\r\n\t\tconst childrenElement = document.createElement('div');\r\n\t\tchildrenElement.classList.add('children');\r\n\t\tif(this._children)\r\n\t\t\tthis._children.forEach(child=>childrenElement.appendChild(child));\r\n\t\tthis._element.appendChild(childrenElement);\r\n\t\tconst titleElement = document.createElement('div');\r\n\t\ttitleElement.classList.add('title');\r\n\t\ttitleElement.innerHTML = title;\r\n\t\tthis._element.appendChild(titleElement);\r\n\t\t\r\n\t\tconst backButtonWrapperElement = document.createElement('div');\r\n\t\tbackButtonWrapperElement.classList.add('button-back-wrapper');\r\n\t\tthis._element.appendChild(backButtonWrapperElement);\r\n\t\t\r\n\t\tconst closeButtonWrapperElement = document.createElement('div');\r\n\t\tcloseButtonWrapperElement.classList.add('button-close-wrapper');\r\n\t\tthis._element.appendChild(closeButtonWrapperElement);\r\n\t\t\r\n\t\tthis._iconButtonNonReactBack = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Open.png', onClick:this._handleClickButtonBack});\r\n\t\tbackButtonWrapperElement.appendChild(this._iconButtonNonReactBack.element);\r\n\t\t\r\n\t\tthis._iconButtonNonReactClose = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Exit.png', onClick:this._handleClickButtonClose});\r\n\t\tcloseButtonWrapperElement.appendChild(this._iconButtonNonReactClose.element);\r\n\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_handleClickButtonBack(){\r\n\t\tif(this._iMenuManager)\r\n\t\t\tthis._iMenuManager.back();\r\n\t}\r\n\t_handleClickButtonClose(){\r\n\t\tif(this._iMenuManager)\r\n\t\t\tthis._iMenuManager.close();\r\n\t}\r\n}\r\n","const PlotDetailedInformationSectionType={\r\n\tFloorPlans:'floorPlans',\r\n\tStreetViewImage:'streetViewImage',\r\n\tFrontViewImage:'frontViewImage',\r\n\tGallery:'gallery',\r\n\tDescription:'description',\r\n\tTour:'tour',\r\n\tVideo:'video'\r\n};\r\nexport default PlotDetailedInformationSectionType;","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Star from '../components/Star';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport Urls from '../urls/Urls';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationSummary {\r\n\tconstructor(props){\r\n\t\tconst { siteJsonUnitPlot, addFavourite, removeFavourite, showStreetView, scrollToFloorPlans,\r\n\t\t\tscrollToGallery, configuration, showBrochureGenerationDialog, enterHouse}=props;\r\n\t\tthis._callbackShowBrochureGenerationDialog = showBrochureGenerationDialog;\r\n\t\tthis._callbackEnterHouse = enterHouse;\r\n\t\tthis._configuration=configuration;\r\n\t\tthis._selectedChanged = this._selectedChanged.bind(this);\r\n\t\tthis._handleClickSendBrochure = this._handleClickSendBrochure.bind(this);\r\n\t\tthis._handleClickEnterHouse = this._handleClickEnterHouse.bind(this);\r\n\t\tthis._setValuesFromSiteJsonUnitPlot = this._setValuesFromSiteJsonUnitPlot.bind(this);\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackShowStreetView = showStreetView;\r\n\t\tthis._handleStarSelectedChanged = this._handleStarSelectedChanged.bind(this);\r\n\t\tthis._handleClickShowStreetView = this._handleClickShowStreetView.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('summary');\r\n\t\tthis._plotNameElement = document.createElement('div');\r\n\t\tthis._plotNameElement.classList.add('plot-name');\r\n\t\tthis._plotNumberElement = document.createElement('div');\r\n\t\tthis._plotNumberElement.classList.add('plot-number');\r\n\t\tthis._plotStatusDescriptionElement = document.createElement('div');\r\n\t\tthis._plotStatusDescriptionElement.classList.add('plot-status');\r\n\t\tthis._plotPriceElement = document.createElement('div');\r\n\t\tthis._plotPriceElement.classList.add('plot-price');\r\n\t\tthis._nBedroomsElement = document.createElement('div');\r\n\t\tthis._nBedroomsElement.classList.add('n-bedrooms');\r\n\t\tthis._smallButtonsElement = document.createElement('div');\r\n\t\tthis._smallButtonsElement.classList.add('small-buttons');\r\n\t\t[this._plotNameElement, this._plotNumberElement, this._plotStatusDescriptionElement, this._plotPriceElement, \r\n\t\t\tthis._nBedroomsElement, this._smallButtonsElement]\r\n\t\t.forEach(childElement=>this._element.appendChild(childElement));\r\n\t\tthis._star = React.createRef();\r\n\t\tconst starFactory = React.createFactory(Star);\r\n\t\tReactDOM.render(starFactory(\r\n\t\t\t{ \r\n\t\t\t\tonSelectedChange:this._handleStarSelectedChanged, \r\n\t\t\t\tref:this._star,\r\n\t\t\t\tstopEventPropagation:true\r\n\t\t\t}),\r\n\t\t\tthis._smallButtonsElement);\r\n\t\tconst hasOneOrMoreRoomImages=siteJsonUnitPlot.hasOneOrMoreRoomImages;\r\n\t\t\r\n\t\tthis._iconButtonWalkmode = new IconButtonNonReact({ \t\r\n\t\t\t\tclassName:[\"button-show-street-view\", \"button-show\"], \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Walkmode.png',\r\n\t\t\t\tonClick:this._handleClickShowStreetView\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonWalkmode.element);\r\n\t\t\t\r\n\t\t\r\n\t\tthis._iconButtonShowGallery = new IconButtonNonReact({\r\n\t\t\t\tclassName:[\"button-show-gallery\", \"button-show\"], \r\n\t\t\t\timgUrl:hasOneOrMoreRoomImages?(Urls.assets+'icons/UI_Button_Gallery.png'):(Urls.assets+'icons/UI_Button_Gallery_Disabled.png'),\r\n\t\t\t\tonClick:scrollToGallery\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonShowGallery.element);\r\n\t\t\t\r\n\t\t\r\n\t\tthis._iconButtonShowGallery = new IconButtonNonReact({\r\n\t\t\t\tclassName:[\"button-show-floor-plan\", \"button-show\"], \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Floorplan.png',\r\n\t\t\t\tonClick:scrollToFloorPlans\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonShowGallery.element);\r\n\t\t\r\n\t\tthis._buttonEnterHouse = document.createElement('button');\r\n\t\tthis._buttonEnterHouse.classList.add(\"button-enter-house\");\r\n\t\tthis._buttonEnterHouse.addEventListener('click', this._handleClickEnterHouse);\r\n\t\tthis._buttonEnterHouse.innerHTML = 'Enter Plot';\r\n\t\tthis._smallButtonsElement.appendChild(this._buttonEnterHouse);\r\n\t\t\r\n\t\tconst buttonSendBrochure = document.createElement('button');\r\n\t\tbuttonSendBrochure.classList.add(\"button-send-brochure\");\r\n\t\tbuttonSendBrochure.addEventListener('click', this._handleClickSendBrochure);\r\n\t\tbuttonSendBrochure.innerHTML = 'Send Brochure';\r\n\t\tthis._smallButtonsElement.appendChild(buttonSendBrochure);\r\n\t\t\r\n\t\tthis._setValuesFromSiteJsonUnitPlot(siteJsonUnitPlot);\r\n\t}\r\n\tset plot(siteJsonUnitPlot){\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._setValuesFromSiteJsonUnitPlot(siteJsonUnitPlot);\r\n\t}\r\n\t_setValuesFromSiteJsonUnitPlot(siteJsonUnitPlot){\r\n\t\tthis._propertyBindingSelected?.dispose();\r\n\t\tthis._propertyBindingSelected = PropertyBindingFactory.standard(this, siteJsonUnitPlot, 'selected', this._selectedChanged);\r\n\t\tthis._plotNameElement.innerHTML = siteJsonUnitPlot.name;\r\n\t\tthis._plotNumberElement.innerHTML = 'Plot '+String(siteJsonUnitPlot.number);\r\n\t\tthis._plotStatusDescriptionElement.innerHTML = siteJsonUnitPlot?PlotStatus.getDescription(siteJsonUnitPlot.status):' ';\r\n\t\tconst showPrice = (siteJsonUnitPlot)&&(!siteJsonUnitPlot.isSold)&&(!siteJsonUnitPlot.isReserved);\r\n\t\tthis._plotPriceElement.innerHTML = (!showPrice)||(siteJsonUnitPlot.price<=0)?' ':siteJsonUnitPlot.priceString;\r\n\t\tconst nBathroomString = this._configuration.showNBathrooms?` and ${siteJsonUnitPlot.nBathrooms} Bathrooms`:'';\r\n\t\tthis._nBedroomsElement.innerHTML = ' - '+String(siteJsonUnitPlot.nBedrooms)+' Bedrooms'+nBathroomString;\r\n\t\tconst hasConfiguratorOrTour=siteJsonUnitPlot&&Urls.getConfiguratorUrlForPlot(siteJsonUnitPlot, this._configuration);\r\n\t\tif(hasConfiguratorOrTour)\r\n\t\t\tthis._buttonEnterHouse.classList.add('visible');\r\n\t\telse\r\n\t\t\tthis._buttonEnterHouse.classList.remove('visible');\r\n\t}\r\n\t_selectedChanged(value){\r\n\t\tthis._star.current.selected=value;\r\n\t}\r\n\t_handleClickSendBrochure(){\r\n\t\tthis._callbackShowBrochureGenerationDialog({plot:this._siteJsonUnitPlot});\r\n\t}\r\n\t_handleClickEnterHouse(){\r\n\t\tthis._callbackEnterHouse(this._siteJsonUnitPlot);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget sectionType(){\r\n\t\treturn PlotDetailedInformationSectionType.Gallery;\r\n\t}\r\n\t_handleStarSelectedChanged(selected){\r\n\t\tif(selected)this._callbackAddFavourite(this._siteJsonUnitPlot);\r\n\t\telse this._callbackRemoveFavourite(this._siteJsonUnitPlot);\r\n\t}\r\n\t_handleClickShowStreetView(e){\r\n\t\tthis._callbackShowStreetView({nearPlot:this._siteJsonUnitPlot});\r\n\t}\r\n}","import ResizeWatcher from './ResizeWatcher';\r\nimport eventEnable from '../core/eventEnable';\r\nexport default class ResizeWatchers{\r\n\tstatic add({element, onResized, onFirstResize, staggered}){\r\n\t\treturn new ResizeWatcher({element, onResized, onFirstResize, staggered});\r\n\t}\r\n}\t\r\neventEnable(ResizeWatcher);\r\n\t","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Validation from '../validation/Validation';\r\nimport DynamicImageFitCriteria from './DynamicImageFitCriteria';\r\nimport DynamicImageEntry from './DynamicImageEntry';\r\nimport ResizeWatchers from '../ui_core/ResizeWatchers';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class DynamicImageDisplayer {\r\n\tconstructor({dynamicImage, parentElement, resizeWatcherParentElement, className,\r\n\tfitWidthElseHeight, allowDowngradeResolution, onClick, resolutionMultiplier, onLoaded,\r\n\tconfiguration}){\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._allowDowngradeResolution = allowDowngradeResolution===true?true:false;\r\n\t\tthis._resolutionMultiplier = resolutionMultiplier===undefined?1:resolutionMultiplier;\r\n\t\tthis._dynamicImage = dynamicImage;\r\n\t\tthis._parentElement = parentElement;\r\n\t\tthis._element = document.createElement('img');\r\n\t\tthis._element.classList.add('dynamic-image');\r\n\t\tif(onLoaded)\r\n\t\t\tthis._element.addEventListener('load', onLoaded);\r\n\t\tparentElement.appendChild(this._element);\r\n\t\tif(className)\r\n\t\t\tthis._element.classList.add(className);\r\n\t\tthis._onParentElementResize= this._onParentElementResize.bind(this);\r\n\t\tthis._fitImageToWidth = this._fitImageToWidth.bind(this);\r\n\t\tthis._fitImageToHeight = this._fitImageToHeight.bind(this);\r\n\t\tthis._shouldSkipUpdateCosIsDowngrade= this._shouldSkipUpdateCosIsDowngrade.bind(this);\r\n\t\tthis._setSrc = this._setSrc.bind(this);\r\n\t\tthis._fitImage = fitWidthElseHeight?this._fitImageToWidth:this._fitImageToHeight;\r\n\t\tif(resizeWatcherParentElement)\r\n\t\t\tthis._resizeWatcherParentElement = resizeWatcherParentElement;\r\n\t\telse \r\n\t\t\tthis._resizeWatcherParentElement = ResizeWatchers.add({element:parentElement, staggered:false});\r\n\t\tthis._resizeWatcherParentElement .addEventListener('resized', this._onParentElementResize);\r\n\t\tsetTimeout(this._fitImage, 0);\r\n\t\tif(onClick)\r\n\t\t\tthis._element.addEventListener('click', ()=>onClick(dynamicImage));\r\n\t}\r\n\t_onParentElementResize(e){\r\n\t\tthis._fitImage();\r\n\t}\r\n\t_fitImageToWidth(){\r\n\t\tconst newDynamicImageEntry = this._dynamicImage.getBestEntryToFitWidth(this._resolutionMultiplier*this._element.clientWidth);\r\n\t\tconst shouldSkip = this._shouldSkipUpdateCosIsDowngrade(newDynamicImageEntry);\r\n\t\tif(shouldSkip)\r\n\t\t\treturn;\r\n\t\tthis._currentDynamicImageEntry = newDynamicImageEntry;\r\n\t\tthis._setSrc(newDynamicImageEntry);\r\n\t}\r\n\t_fitImageToHeight(){\r\n\t\tconst newDynamicImageEntry = this._dynamicImage.getBestEntryToFitWidth(this._resolutionMultiplier*this._element.clientHeight);\r\n\t\tconst shouldSkip = this._shouldSkipUpdateCosIsDowngrade(newDynamicImageEntry);\r\n\t\tif(shouldSkip)\r\n\t\t\treturn;\r\n\t\tthis._currentDynamicImageEntry = newDynamicImageEntry;\r\n\t\tthis._setSrc(newDynamicImageEntry);\r\n\t}\r\n\t_shouldSkipUpdateCosIsDowngrade(newDynamicImageEntry){\r\n\t\tif(this._allowDowngradeResolution||!this._currentDynamicImageEntry) \r\n\t\t\treturn false;\r\n\t\tconst isIncrease = (\r\n\t\t\t\t(newDynamicImageEntry.width>this._currentDynamicImageEntry.width)\r\n\t\t\t\t||\r\n\t\t\t\t(newDynamicImageEntry.height>this._currentDynamicImageEntry.height)\r\n\t\t\t);\r\n\t\treturn !isIncrease;\r\n\t}\r\n\t_setSrc(dynamicImageEntry){\r\n\t\tthis._element.src = `${Urls.getAssetsForSite(this._configuration.siteSlug)}${UrlHelper.removeStartSlash(dynamicImageEntry.relativePath)}`;\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Star from '../components/Star';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport DynamicImageDisplayer from '../images/DynamicImageDisplayer';\r\nimport Once from '../core/Once';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nimport eventEnable from '../core/eventEnable';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationGallery {\r\n\tconstructor(props){\r\n\t\tconst { siteJsonUnitPlot, showImagesFullScreen, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\teventEnable(this);\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._showImagesFullScreen = showImagesFullScreen;\r\n\t\tthis._setupFromSiteJsonUnitPlot = this._setupFromSiteJsonUnitPlot.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('gallery');\r\n\t\tthis._loadImages= this._loadImages.bind(this);\r\n\t\tthis._resized = this._resized.bind(this);\r\n\t\tthis._setRoomImageClass = this._setRoomImageClass.bind(this);\r\n\t\tthis._dispatchLoaded = this._dispatchLoaded.bind(this);\r\n\t\tthis._resizeWatcherParentElement = new ResizeWatcher({element:this._element});\r\n\t\tthis._resizeWatcherParentElement.addEventListener('resized', this._resized);\r\n\t\tthis._loadedOnce = new Once(this._dispatchLoaded);\r\n\t\tthis._imgWrapperElement = document.createElement('div');\r\n\t\tthis._imgWrapperElement.classList.add('room-image-wrapper');\r\n\t\tthis._element.appendChild(this._imgWrapperElement);\r\n\t\tthis._setupFromSiteJsonUnitPlot();\r\n\t}\r\n\tset plot(siteJsonUnitPlot){\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._setupFromSiteJsonUnitPlot();\r\n\t}\r\n\t_setupFromSiteJsonUnitPlot(){\r\n\t\tthis._dynamicRoomImages = [];\r\n\t\tthis._siteJsonUnitPlot.rooms.getArray().forEach((room)=>{\r\n\t\t\tthis._dynamicRoomImages = this._dynamicRoomImages.concat(room.images);\r\n\t\t});\r\n\t\tsetTimeout(this._loadImages, 0);\r\n\t}\r\n\t_resized(){\r\n\t\tconst width = this._element.clientWidth;\r\n\t\tif(width<400){\r\n\t\t\tthis._setRoomImageClass('room-images-one-per-row');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(width<600){\r\n\t\t\tthis._setRoomImageClass('room-images-two-per-row');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(width<800){\r\n\t\t\tthis._setRoomImageClass('room-images-three-per-row');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(width<1000){\r\n\t\t\tthis._setRoomImageClass('room-images-four-per-row');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._setRoomImageClass('room-images-five-per-row');\r\n\t\t\r\n\t}\r\n\t_setRoomImageClass(newClassName){\r\n\t\tif(this._currentRoomImageClassName){\r\n\t\t\tthis._element.classList.remove(this._currentRoomImageClassName);\r\n\t\t}\r\n\t\tthis._currentRoomImageClassName = newClassName;\r\n\t\t\tthis._element.classList.add(newClassName);\r\n\t}\r\n\t_loadImages(){\r\n\t\tthis._element.innerHTML='';\r\n\t\tlet dynamicImageDisplayer = new DynamicImageDisplayer({\r\n\t\t\tdynamicImage:this._siteJsonUnitPlot.unit.frontViewImage, \r\n\t\t\tparentElement:this._element, \r\n\t\t\tresizeWatcherParentElement:this._resizeWatcherParentElement,\r\n\t\t\tclassName:'plot-image',\r\n\t\t\tfitWidthElseHeight:true,\r\n\t\t\tonClick:()=>this._showImagesFullScreen([this._siteJsonUnitPlot.unit.frontViewImage]),\r\n\t\t\tonLoaded:this._loadedOnce.trigger,\r\n\t\t\tconfiguration:this._configuration\r\n\t\t});\r\n\t\tconst streetViewImage = this._siteJsonUnitPlot.unit.streetViewImage;\r\n\t\tif(streetViewImage){\r\n\t\t\tnew DynamicImageDisplayer({\r\n\t\t\t\t\tdynamicImage:streetViewImage, \r\n\t\t\t\t\tparentElement:this._element, \r\n\t\t\t\t\tresizeWatcherParentElement:this._resizeWatcherParentElement,\r\n\t\t\t\t\tclassName:'plot-image',\r\n\t\t\t\t\tfitWidthElseHeight:true,\r\n\t\t\t\t\tonClick:()=>this._showImagesFullScreen([streetViewImage]),\r\n\t\t\t\t\tconfiguration:this._configuration\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis._imgWrapperElement.innerHTML='';\r\n\t\tthis._dynamicRoomImages.forEach(dynamicImage=>{\r\n\t\t\tnew DynamicImageDisplayer({\r\n\t\t\t\tdynamicImage, \r\n\t\t\t\tparentElement: this._imgWrapperElement,\r\n\t\t\t\tresizeWatcherParentElement:this._resizeWatcherParentElement,\r\n\t\t\t\tclassName:'room-image',\r\n\t\t\t\tfitWidthElseHeight:false,\r\n\t\t\t\tonClick:()=>this._showImagesFullScreen([dynamicImage]),\r\n\t\t\t\tconfiguration:this._configuration\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget sectionType(){\r\n\t\treturn PlotDetailedInformationSectionType.Gallery;\r\n\t}\r\n\t_dispatchLoaded(){\r\n\t\tthis.dispatchEvent({type:'loaded'});\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Star from '../components/Star';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationDescription {\r\n\tconstructor(props){\r\n\t\tconst { siteJsonUnitPlot}=props;\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('description');\r\n\t\tthis._innerElement = document.createElement('div');\r\n\t\tthis._innerElement.classList.add('inner');\r\n\t\tthis._element.appendChild(this._innerElement);\r\n\t\tthis._innerElement.innerHTML = siteJsonUnitPlot.about;\r\n\t}\r\n\tset plot(siteJsonUnitPlot){\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._innerElement.innerHTML = siteJsonUnitPlot.about;\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget sectionType(){\r\n\t\treturn PlotDetailedInformationSectionType.Description;\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Star from '../components/Star';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport Once from '../core/Once';\r\nimport eventEnable from '../core/eventEnable';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport DynamicImageDisplayer from '../images/DynamicImageDisplayer';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationFloorPlans {\r\n\tconstructor(props){\r\n\t\tconst { siteJsonUnitPlot, showImagesFullScreen, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._showImagesFullScreen=showImagesFullScreen;\r\n\t\teventEnable(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tif(!this._siteJsonUnitPlot.floorPlanImages)return;\r\n\t\tthis._element.classList.add('floor-plans');\r\n\t\tthis._resized = this._resized.bind(this);\r\n\t\tthis._setFloorPlanImageClass = this._setFloorPlanImageClass.bind(this);\r\n\t\tthis._setupFromSiteJsonUnitPlot = this._setupFromSiteJsonUnitPlot.bind(this);\r\n\t\tthis._dispatchLoaded = this._dispatchLoaded.bind(this);\r\n\t\tthis._resizeWatcherParentElement = new ResizeWatcher({element:this._element});\r\n\t\tthis._resizeWatcherParentElement.addEventListener('resized', this._resized);\r\n\t\tthis._loadedOnce = new Once(this._dispatchLoaded);\r\n\t\tthis._imgWrapperElement = document.createElement('div');\r\n\t\tthis._imgWrapperElement.classList.add('floor-plan-image-wrapper');\r\n\t\tthis._element.appendChild(this._imgWrapperElement);\r\n\t\tthis._setupFromSiteJsonUnitPlot();\r\n\t}\r\n\t_setupFromSiteJsonUnitPlot(){\r\n\t\tthis._dynamnicImageDisplayers = [];\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._imgWrapperElement.innerHTML='';\r\n\t\t\tthis._siteJsonUnitPlot.floorPlanImages.forEach(dynamicImage=>{\r\n\t\t\t\tconst dynamicImageDisplayer = new DynamicImageDisplayer({\r\n\t\t\t\t\tdynamicImage, \r\n\t\t\t\t\tparentElement: this._imgWrapperElement,\r\n\t\t\t\t\tresizeWatcherParentElement:this._resizeWatcherParentElement,\r\n\t\t\t\t\tclassName:'floor-plan-image',\r\n\t\t\t\t\tfitWidthElseHeight:true,\r\n\t\t\t\t\tonClick:()=>this._showImagesFullScreen([dynamicImage]),\r\n\t\t\t\t\tonLoaded:this._loadedOnce.trigger,\r\n\t\t\t\t\tconfiguration:this._configuration\r\n\t\t\t\t});\r\n\t\t\t\tthis._dynamnicImageDisplayers.push(dynamicImageDisplayer);\r\n\t\t\t});\r\n\t\t}, 0);\r\n\t}\r\n\t_resized(){\r\n\t\tconst width = this._element.clientWidth;\r\n\t\tif(this._siteJsonUnitPlot.floorPlanImages&&this._siteJsonUnitPlot.floorPlanImages.length>2){\r\n\t\t\tif(width>600){\r\n\t\t\t\tthis._setFloorPlanImageClass('floor-plan-images-two-per-row');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\tthis._setFloorPlanImageClass('floor-plan-images-one-per-row');\r\n\t}\r\n\t_setFloorPlanImageClass(newClassName){\r\n\t\tif(this._currentRoomImageClassName){\r\n\t\t\tthis._element.classList.remove(this._currentRoomImageClassName);\r\n\t\t}\r\n\t\tthis._currentRoomImageClassName = newClassName;\r\n\t\t\tthis._element.classList.add(newClassName);\r\n\t}\r\n\tset plot(siteJsonUnitPlot){\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._setupFromSiteJsonUnitPlot(siteJsonUnitPlot);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget sectionType(){\r\n\t\treturn PlotDetailedInformationSectionType.FloorPlans;\r\n\t}\r\n\t_dispatchLoaded(){\r\n\t\tthis.dispatchEvent({type:'loaded'});\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Star from '../components/Star';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport VideoPlayer from '../components/VideoPlayer';\r\nimport Once from '../core/Once';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport FullScreen from '../ui_core/FullScreen';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nimport eventEnable from '../core/eventEnable';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationVideo {\r\n\tconstructor(props){\r\n\t\tconst { siteJsonUnitPlot, showImagesFullScreen, configuration}=props;\r\n\t\teventEnable(this);\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('video');\r\n\t\tthis._dispatchLoaded = this._dispatchLoaded.bind(this);\r\n\t\tthis._videoUrlChanged = this._videoUrlChanged.bind(this);\r\n\t\tthis._videoPlayer = new VideoPlayer({\r\n\t\t\tmaximized:false,\r\n\t\t\tforceFillWidth:true,\r\n\t\t\ttoggleMaximizeButton:true\r\n\t\t});\r\n\t\tthis._element.appendChild(this._videoPlayer.element);\r\n\t\tthis._setupFromSiteJsonUnitPlot();\r\n\t}\r\n\tset plot(siteJsonUnitPlot){\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._setupFromSiteJsonUnitPlot();\r\n\t}\r\n\t_setupFromSiteJsonUnitPlot(){\r\n\t\tthis._propertyBindingTourUrl?.dispose();\r\n\t\tthis._propertyBindingTourUrl = PropertyBindingFactory.standard(this, this._siteJsonUnitPlot.houseType, 'videoUrl', this._videoUrlChanged);\r\n\t}\r\n\t_videoUrlChanged(value){\r\n\t\tconst noUrl = value===undefined||value===null;\r\n\t\tconst url =noUrl?null:\r\n\t\t(value.indexOf('http')>=0?value:(Urls.getAssetsForSite(this._configuration.siteSlug)+value));\r\n\t\tthis._videoPlayer.load({url:url});\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget sectionType(){\r\n\t\treturn PlotDetailedInformationSectionType.Video;\r\n\t}\r\n\t_dispatchLoaded(){\r\n\t\tthis.dispatchEvent({type:'loaded'});\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Star from '../components/Star';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport ResizeWatcher from '../ui_core/ResizeWatcher';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport FullScreen from '../ui_core/FullScreen';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nimport eventEnable from '../core/eventEnable';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationTour {\r\n\tconstructor(props){\r\n\t\tconst { siteJsonUnitPlot}=props;\r\n\t\teventEnable(this);\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._houseType = siteJsonUnitPlot.houseType;\r\n\t\tif(!this._houseType)return;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('tour');\r\n\t\tthis._iframeElement = document.createElement('iframe');\r\n\t\tthis._dispatchLoaded = this._dispatchLoaded.bind(this);\r\n\t\tthis._iframeElement.addEventListener('load', this._dispatchLoaded);\r\n\t\tthis._tourUrlChanged = this._tourUrlChanged.bind(this);\r\n\t\tthis._handleClickButtonFullscreen = this._handleClickButtonFullscreen.bind(this);\r\n\t\tthis._element.appendChild(this._iframeElement);\r\n\t\tthis._propertyBindingTourUrl = PropertyBindingFactory.standard(this, this._houseType, 'tourUrl', this._tourUrlChanged);\r\n\t\tthis._iconButtonFullScreen = new IconButtonNonReact({\r\n\t\t\tclassName:\"button-fullscreen\",\r\n\t\t\timgUrl:Urls.assets+'icons/UI_Fullscreen.png',\r\n\t\t\tonClick:this._handleClickButtonFullscreen});\r\n\t\tthis._element.appendChild(this._iconButtonFullScreen.element);\r\n\t}\r\n\t_handleClickButtonFullscreen(){\r\n\t\t\r\n\t\tFullScreen.toggle(this._element);\r\n\t}\r\n\t_tourUrlChanged(value){\r\n\t\tif(value===null||value===undefined){\r\n\t\t\tthis._setVisible(false);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._setVisible(true);\r\n\t\tthis._iframeElement.src = value;\r\n\t}\r\n\t_setVisible(value){\r\n\t\tif(value)this._element.classList.add('visible');\r\n\t\telse this._element.classList.remove('visible');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget sectionType(){\r\n\t\treturn PlotDetailedInformationSectionType.Tour;\r\n\t}\r\n\t_dispatchLoaded(){\r\n\t\tthis.dispatchEvent({type:'loaded'});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport SubMenuHeaderNonReact from '../components/SubMenuHeaderNonReact';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport Windows from '../window/Windows';\r\nimport WindowType from '../enums/WindowType';\r\nimport PlotDetailedInformationSummary from './PlotDetailedInformationSummary';\r\nimport PlotDetailedInformationGallery from './PlotDetailedInformationGallery';\r\nimport PlotDetailedInformationDescription from './PlotDetailedInformationDescription';\r\nimport PlotDetailedInformationFloorPlans from './PlotDetailedInformationFloorPlans';\r\nimport PlotDetailedInformationVideo from './PlotDetailedInformationVideo';\r\nimport PlotDetailedInformationTour from './PlotDetailedInformationTour';\r\nimport IconButton from '../components/IconButtonNonReact';\r\nimport eventEnable from '../core/eventEnable';\r\nimport getAbsolute from '../ui_core/getAbsolute';\r\nimport './PlotDetailedInformation.css';\r\nimport { faAngleLeft, faAngleRight} from '@fortawesome/free-solid-svg-icons'\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformation {\r\n\tconstructor(props){\r\n\t\tconst {parentElement, siteJsonUnitPlot, callbackDispose,\r\n\t\t\taddFavourite, removeFavourite, showStreetView,\r\n\t\t\tshowImagesFullScreen, configuration, showPlot, showBrochureGenerationDialog,\r\n\t\t\tenterHouse, callbackPlotNumberChanged}=props;\r\n\t\tthis._enterHouse = enterHouse;\r\n\t\teventEnable(this);\r\n\t\tthis._showPlot= showPlot;\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._callbackDispose = callbackDispose;\r\n\t\tthis._callbackShowStreetView= showStreetView;\r\n\t\tthis._callbackShowImagesFullScreen = showImagesFullScreen;\r\n\t\tthis._callbackPlotNumberChanged = callbackPlotNumberChanged;\r\n\t\tif(!parentElement)throwNotProvided('parentElement');\r\n\t\tthis._parentElement = parentElement;\r\n\t\tthis._currentPlotActiveHandle = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis.close = this.close.bind(this);\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\tthis._scrollToFloorPlans = this._scrollToFloorPlans.bind(this);\r\n\t\tthis._scrollToGallery = this._scrollToGallery.bind(this);\r\n\t\tthis._handleEnterHouse = this._handleEnterHouse.bind(this);\r\n\t\tthis._scrollToElement = this._scrollToElement.bind(this);\r\n\t\tthis.scrollToTop = this.scrollToTop.bind(this);\r\n\t\tthis._onClose = this._onClose.bind(this);\r\n\t\tthis._handleShowStreetView = this._handleShowStreetView.bind(this);\r\n\t\tthis.scrollToSectionWithProportion = this.scrollToSectionWithProportion.bind(this);\r\n\t\tthis.setSectionProportionRanges = this.setSectionProportionRanges.bind(this);\r\n\t\tthis._dispatchScrolled = this._dispatchScrolled.bind(this);\r\n\t\tlet title;\r\n\t\tconst moreThanOnePlotInUnit = this._siteJsonUnitPlot.unit.plots.length>1;\r\n\t\tif(moreThanOnePlotInUnit){\r\n\t\t\ttitle = \"More details\";\r\n\t\t}\r\n\t\telse \r\n\t\t\ttitle = \"More details for plot \"+siteJsonUnitPlot.number;\r\n\t\tthis._window = new GenericWindow({tooltipMessage:title, name:title, minWidth:250, maxWidth:1700, minHeight:100, maxHeight:1000,\r\n\t\t\tdefaultWidth:600, defaultHeight:600, defaultX:10, defaultY:10, minimized:false, maximized:false, minimizable:true,\r\n\t\t\tmaximizable:true, closeable:true, minimizeOnClose:false, resizable:true, dragable:true, toggleMaximizeOnDoubleClick:false,\r\n\t\t\ttype:WindowType.PLOT_DETAILED_INFORMATION\r\n\t\t});\r\n\t\tif(moreThanOnePlotInUnit){\r\n\t\t\tthis._createNextPreviousPlotButtons();\r\n\t\t}\r\n\t\tthis._window.addEventListener(GenericWindow.EventNames.CLOSED, this._onClose);\r\n\t\tthis._element = this._window.getElement();\r\n\t\tthis._element.classList.add('plot-detailed-information');\r\n\t\tthis._mainElement = this._window.getMainElement();\r\n\t\t\r\n\t\t\r\n\t\t\r\n\t\tthis._summary = new PlotDetailedInformationSummary({siteJsonUnitPlot, addFavourite, \r\n\t\t\tremoveFavourite, showStreetView:this._handleShowStreetView, \r\n\t\t\tscrollToFloorPlans:this._scrollToFloorPlans, \r\n\t\t\tscrollToGallery:this._scrollToGallery,\r\n\t\t\tconfiguration, showBrochureGenerationDialog, enterHouse:this._handleEnterHouse});\r\n\t\tthis._gallery = new PlotDetailedInformationGallery({\r\n\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\tshowImagesFullScreen,\r\n\t\t\tconfiguration\r\n\t\t});\r\n\t\tthis._floorPlans = new PlotDetailedInformationFloorPlans({\r\n\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\tshowImagesFullScreen,\r\n\t\t\tconfiguration\r\n\t\t});\r\n\t\tthis._description = new PlotDetailedInformationDescription({\r\n\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot\r\n\t\t});\r\n\t\tthis._video = new PlotDetailedInformationVideo({\r\n\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\tconfiguration\r\n\t\t});\r\n\t\tthis._tour = new PlotDetailedInformationTour({\r\n\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\tconfiguration\r\n\t\t});\r\n\t\tthis._mainElement.appendChild(this._summary.element);\r\n\t\tthis._scrollableElement = document.createElement('div');\r\n\t\tthis._mainElement.appendChild(this._scrollableElement);\r\n\t\tthis._scrollableElement.classList.add('scrollable');\r\n\t\tthis._sections = [this._gallery, this._floorPlans, this._description, this._video, this._tour];\r\n\t\tthis._sections.forEach(section=>\r\n\t\t\tthis._scrollableElement.appendChild(section.element));\r\n\t\tthis._scrollableElement.addEventListener('scroll', this._dispatchScrolled);\r\n\t\t//this._scrollableElement.addEventListener('touchmove', this._dispatchScrolled);\r\n\t\tthis._parentElement.appendChild(this._element);\r\n\t\tthis._tour.addEventListener('loaded', this.setSectionProportionRanges);\r\n\t\tthis._gallery.addEventListener('loaded', this.setSectionProportionRanges);\r\n\t\tthis._floorPlans.addEventListener('loaded', this.setSectionProportionRanges);\r\n\t\tthis.show();\r\n\t\tthis.window.addEventListener(GenericWindow.EventNames.UNMINIMIZED, this.setSectionProportionRanges);\r\n\t\tthis.window.addEventListener(GenericWindow.EventNames.FOCUSSED, this.setSectionProportionRanges);\r\n\t\tthis.window.getElement().addEventListener('mouseenter', this.setSectionProportionRanges);\r\n\t}\r\n\tscrollToTop(){\r\n\t\tthis._scrollableElement.scrollTop=0;\r\n\t}\r\n\t_handleEnterHouse(plot){\r\n\t\tthis._enterHouse(plot);\r\n\t\tthis.window.minimize();\r\n\t}\r\n\t_createNextPreviousPlotButtons(){\r\n\t\tconst tabElement = this.window.getTabElement();\r\n\t\tconst nextPreviousElement = document.createElement('div');\r\n\t\tnextPreviousElement.classList.add('next-previous');\r\n\t\tconst setNewPlotFromIndex=(plot)=>{\r\n\t\t\tthis._siteJsonUnitPlot = plot;\r\n\t\t\tthis._callbackPlotNumberChanged(this, this._siteJsonUnitPlot);\r\n\t\t\tthis._setupSiteJsonUnitPlot();\r\n\t\t};\r\n\t\tconst previous = (e)=>{\r\n\t\t\tconst plots = this._siteJsonUnitPlot.unit.plots;\r\n\t\t\tconst indexOfThisPlot = plots.indexOf(this._siteJsonUnitPlot);\r\n\t\t\tconst newIndex = indexOfThisPlot<1?plots.length-1:indexOfThisPlot-1;\r\n\t\t\tsetNewPlotFromIndex(plots[newIndex]);\r\n\t\t};\r\n\t\tconst next = (e)=>{\r\n\t\t\tconst plots = this._siteJsonUnitPlot.unit.plots;\r\n\t\t\tconst indexOfThisPlot = plots.indexOf(this._siteJsonUnitPlot);\r\n\t\t\tconst newIndex = indexOfThisPlot>=plots.length-1?0:indexOfThisPlot+1;\r\n\t\t\tsetNewPlotFromIndex(plots[newIndex]);\r\n\t\t};\r\n\t\tconst previousButton = new IconButton({faIcon:faAngleLeft, onClick:previous, className:'next'});\r\n\t\tconst nextButton = new IconButton({faIcon:faAngleRight, onClick:next, className:'previous'});\r\n\t\tnextPreviousElement.appendChild(previousButton.element);\r\n\t\tconst textElement = document.createElement('div');\r\n\t\ttextElement.classList.add('text');\r\n\t\ttextElement.innerHTML = 'Apartment Plot';\r\n\t\tnextPreviousElement.appendChild(textElement);\r\n\t\tnextPreviousElement.appendChild(nextButton.element);\r\n\t\ttabElement.insertBefore(nextPreviousElement, tabElement.childNodes[1]);\r\n\t}\r\n\t_setupSiteJsonUnitPlot(){\r\n\t\tthis._summary.plot = this._siteJsonUnitPlot;\r\n\t\tthis._gallery.plot = this._siteJsonUnitPlot;\r\n\t\tthis._floorPlans.plot = this._siteJsonUnitPlot;\r\n\t\tthis._description.plot = this._siteJsonUnitPlot;\r\n\t\tthis._video.plot = this._siteJsonUnitPlot;\r\n\t\tthis._tour.plot = this._siteJsonUnitPlot;\r\n\t}\r\n\t_handleShowStreetView(e){\r\n\t\tthis.hide();\r\n\t\tthis._callbackShowStreetView(e);\r\n\t}\r\n\t_scrollToFloorPlans(){\r\n\t\tthis._scrollToElement(this._floorPlans.element);\r\n\t}\r\n\t_scrollToGallery(){\r\n\t\tthis._scrollToElement(this._gallery.element);\r\n\t}\r\n\t_scrollToElement(element){\r\n\t\tthis._scrollableElement.scrollTop = element.getBoundingClientRect().top + this._scrollableElement.scrollTop - (this._scrollableElement.clientHeight/2);\r\n\t}\r\n\tget sectionTypeAndProportionScrolled(){\r\n\t\tconst scrollableElementBounds = this._scrollableElement.getBoundingClientRect();\r\n\t\tconst scrollableElementHeight = this._scrollableElement.scrollHeight;\r\n\t\tconst currentProportion = (this._scrollableElement.scrollTop/scrollableElementHeight);\r\n\t\tlet currentSection = null;\r\n\t\tlet proportion = 0;\r\n\t\tfor(const sectionProportionRange of this._sectionProportionRanges){\r\n\t\t\tif((sectionProportionRange.proportionFrom<=currentProportion)&&(sectionProportionRange.proportionTo>=currentProportion)){\r\n\t\t\t\tcurrentSection = sectionProportionRange.section;\r\n\t\t\t\tproportion = (currentProportion - sectionProportionRange.proportionFrom)\r\n\t\t\t\t\t/(sectionProportionRange.proportionTo - sectionProportionRange.proportionFrom);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn currentSection?{\r\n\t\t\tsectionType:currentSection.sectionType,\r\n\t\t\tproportion:proportion\r\n\t\t}:null;\r\n\t}\r\n\tsetSectionProportionRanges(){\r\n\t\tconst scrollableElementBounds = this._scrollableElement.getBoundingClientRect();\r\n\t\tconst scrollableElementHeight = this._scrollableElement.scrollHeight;\r\n\t\tthis._sectionProportionRanges = this._sections.map(section=>{\r\n\t\t\tconst sectionElementBounds = section.element.getBoundingClientRect();\r\n\t\t\tconst proportionFrom = (section.element.offsetTop)/scrollableElementHeight;\r\n\t\t\tconst proportionTo = (section.element.offsetTop+section.element.offsetHeight )/scrollableElementHeight;\r\n\t\t\treturn {proportionFrom, proportionTo, section};\r\n\t\t});\r\n\t}\r\n\tscrollToSectionWithProportion(plotDetailedInformationSectionType, proportion){\r\n\t\tif(!this._sectionProportionRanges)this.setSectionProportionRanges();\r\n\t\tconst sectionProportionRange = this._sectionProportionRanges.filter(sectionProportionRange=>sectionProportionRange.section.sectionType===plotDetailedInformationSectionType)[0];\r\n\t\tif(!sectionProportionRange)return;\r\n\t\tconst proportionForStartSection = sectionProportionRange.proportionFrom;\r\n\t\tconst proportionForProportionThroughSection = (sectionProportionRange.proportionTo - sectionProportionRange.proportionFrom)*proportion;\r\n\t\tconst totalProportionToScrollTo = proportionForStartSection +proportionForProportionThroughSection;\r\n\t\tconst pxToScrollTo = this._scrollableElement.scrollHeight*totalProportionToScrollTo;\r\n\t\tthis._scrollableElement.scrollTop = pxToScrollTo;\r\n\t}\r\n\tget window(){\r\n\t\treturn this._window;\r\n\t}\r\n\tget number(){\r\n\t\treturn this._siteJsonUnitPlot.number;\r\n\t}\r\n\tshow(){\r\n\t\tthis._window.unminimize();\r\n\t}\r\n\thide(){\r\n\t\tthis._window.minimize();\r\n\t}\r\n\t_setVisible(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse\r\n\t\t\tthis._element.classList.remove('visible');\r\n\t}\r\n\tclose(){\r\n\t\tthis._window.close();\r\n\t\tthis.dispose();\t\r\n\t}\r\n\t_onClose(){\r\n\t\tthis.dispose();\r\n\t}\r\n\tdispose(){\r\n\t\tconsole.log('dispose called');\r\n\t\tthis._callbackDispose(this);\r\n\t}\r\n\tbringIntoFocus(){\r\n\t\tthis.show();\r\n\t}\r\n\t_dispatchScrolled(){\r\n\t\tthis.dispatchEvent({type:'scrolled', plotDetailedInformation:this});\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport PlotDetailedInformation from './PlotDetailedInformation';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotDetailedInformationsManager {\r\n\tstatic get instance(){\r\n\t\tif(!PlotDetailedInformationsManager._instance)\r\n\t\t\tthrow new Error('Not initialized');\r\n\t\treturn PlotDetailedInformationsManager._instance;\r\n\t}/*\r\n\tstatic initialize({parentElement, addFavourite, removeFavourite}){\r\n\t\tif(PlotDetailedInformationsManager._instance)\r\n\t\t\tthrow new Error('Already initialized');\r\n\t\tPlotDetailedInformationsManager._instance = new PlotDetailedInformationsManager({\r\n\t\t\tparentElement:parentElement, addFavourite:addFavourite, removeFavourite:removeFavourite\r\n\t\t});\r\n\t}*/\r\n\tconstructor({parentElement, addFavourite, removeFavourite, showStreetView, showImagesFullScreen, configuration, showBrochureGenerationDialog, enterHouse}){\r\n\t\tthis._parentElement = parentElement;\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackShowStreetView = showStreetView;\r\n\t\tthis._callbackShowImagesFullScreen = showImagesFullScreen;\r\n\t\tthis._callbackShowBrochureGenerationDialog = showBrochureGenerationDialog;\r\n\t\tthis._callbackEnterHouse = enterHouse;\r\n\t\tthis._callbackDisposePlotDetailedInformation = this._callbackDisposePlotDetailedInformation.bind(this);\r\n\t\tthis._plotNumberChanged = this._plotNumberChanged.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis._plotDetailedInformations = [];\r\n\t\tthis._configuration = configuration;\r\n\t\tconsole.log(configuration);\r\n\t}\r\n\tshow(siteJsonUnitPlot){\r\n\t\tlet plotDetailedInformation = this._plotDetailedInformations.filter(plotDetailedInformation=>plotDetailedInformation.number===siteJsonUnitPlot.number)[0];\r\n\t\tif(plotDetailedInformation){\r\n\t\t\tconsole.log('bring into focus');\r\n\t\t\tplotDetailedInformation.bringIntoFocus();\r\n\t\t\treturn plotDetailedInformation;\r\n\t\t}\r\n\t\tplotDetailedInformation = new PlotDetailedInformation({\r\n\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot, \r\n\t\t\tparentElement:this._parentElement,\r\n\t\t\tcallbackDispose:this._callbackDisposePlotDetailedInformation,\r\n\t\t\taddFavourite:this._callbackAddFavourite,\r\n\t\t\tremoveFavourite:this._callbackRemoveFavourite,\r\n\t\t\tshowStreetView:this._callbackShowStreetView,\r\n\t\t\tshowImagesFullScreen:this._callbackShowImagesFullScreen,\r\n\t\t\tconfiguration:this._configuration,\r\n\t\t\tshowPlot:this.show,\r\n\t\t\tshowBrochureGenerationDialog:this._callbackShowBrochureGenerationDialog,\r\n\t\t\tcallbackPlotNumberChanged:this._plotNumberChanged,\r\n\t\t\tenterHouse:this._callbackEnterHouse\r\n\t\t});\r\n\t\tthis._plotDetailedInformations.push(plotDetailedInformation);\r\n\t\treturn plotDetailedInformation;\r\n\t}\r\n\t_plotNumberChanged(plotDetailedInformation, siteJsonUnitPlot){\r\n\t\t\r\n\t}\r\n\t_callbackDisposePlotDetailedInformation(plotDetailedInformation){\r\n\t\tconst index = this._plotDetailedInformations.indexOf(plotDetailedInformation);\r\n\t\tif(index<0)return;\r\n\t\tthis._plotDetailedInformations.splice(index, 1);\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport Dialog from '../components/Dialog';\r\nimport WindowType from '../enums/WindowType';\r\nimport getViewportDimensions from '../ui_core/getViewportDimensions';\r\nimport PlotDetailedInformationsManager from './PlotDetailedInformationsManager';\r\nimport PlotDetailedInformationSectionType from './PlotDetailedInformationSectionType';\r\nimport './PlotComparisonManager.css';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class PlotComparisonScrollManager {\r\n\tconstructor({plotDetailedInformations}){\r\n\t\tthis.dispose= this.dispose.bind(this);\r\n\t\tthis._plotDetailedInformations = plotDetailedInformations;\r\n\t\tthis._onPlotDetailedInformationWindowFocused = this._onPlotDetailedInformationWindowFocused.bind(this);\r\n\t\tthis._releasePreviouslyFocusedPlotDetailedInformation = this._releasePreviouslyFocusedPlotDetailedInformation.bind(this);\r\n\t\tthis._setFocusedPlotDetailedInformation = this._setFocusedPlotDetailedInformation.bind(this);\r\n\t\tthis._currentlyFocusedPlotDetailedInformationScrolled = this._currentlyFocusedPlotDetailedInformationScrolled.bind(this);\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\tthis._currentlyFocusedPlotDetailedInformation = null;\r\n\t\tplotDetailedInformations.forEach(plotDetailedInformation=>{\r\n\t\t\tplotDetailedInformation.window.addEventListener(GenericWindow.EventNames.FOCUSSED,\r\n\t\t\t\tthis._onPlotDetailedInformationWindowFocused);\r\n\t\t\tplotDetailedInformation.window.getElement().addEventListener('mouseenter', ()=>\r\n\t\t\t\tthis._onPlotDetailedInformationWindowFocused({window:plotDetailedInformation.window}));\r\n\t\t\tplotDetailedInformation.window.getElement().addEventListener('touchstart', ()=>\r\n\t\t\t\tthis._onPlotDetailedInformationWindowFocused({window:plotDetailedInformation.window}));\r\n\t\t});\r\n\t}\r\n\t_onPlotDetailedInformationWindowFocused(e){\r\n\t\tthis._focussed = true;\r\n\t\tconst windowHash = e.window.getHash();\r\n\t\tconst plotDetailedInformation = this._plotDetailedInformations.filter(plotDetailedInformation=>plotDetailedInformation.window.getHash()===windowHash)[0];\r\n\t\tif(plotDetailedInformation===undefined)return;\r\n\t\tthis._setFocusedPlotDetailedInformation(plotDetailedInformation);\r\n\t}\r\n\t_setFocusedPlotDetailedInformation(plotDetailedInformation){\r\n\t\tif(this._currentlyFocusedPlotDetailedInformation===plotDetailedInformation)return;\r\n\t\tthis._releasePreviouslyFocusedPlotDetailedInformation();\r\n\t\tthis._currentlyFocusedPlotDetailedInformation = plotDetailedInformation;\r\n\t\tthis._currentlyFocusedPlotDetailedInformation.addEventListener('scrolled', this._currentlyFocusedPlotDetailedInformationScrolled);\r\n\t}\r\n\t_releasePreviouslyFocusedPlotDetailedInformation(){\r\n\t\tif(this._currentlyFocusedPlotDetailedInformation===null)return;\r\n\t\tthis._currentlyFocusedPlotDetailedInformation.removeEventListener('scrolled', this._currentlyFocusedPlotDetailedInformationScrolled);\r\n\t\tthis._currentlyFocusedPlotDetailedInformation = null;\r\n\t}\r\n\t_currentlyFocusedPlotDetailedInformationScrolled(e){\r\n\t\tconst plotDetailedInformation = e.plotDetailedInformation;\r\n\t\tconst sectionTypeAndProportion =plotDetailedInformation.sectionTypeAndProportionScrolled;\r\n\t\tif(!sectionTypeAndProportion)return;\r\n\t\tconst {sectionType, proportion} = sectionTypeAndProportion;\r\n\t\tthis._plotDetailedInformations.forEach(plotDetailedInformationToScroll=>{\r\n\t\t\tif(plotDetailedInformationToScroll===plotDetailedInformation)return;\r\n\t\t\tplotDetailedInformationToScroll.scrollToSectionWithProportion(sectionType, proportion);\r\n\t\t});\r\n\t}\r\n\tdispose(){\r\n\t\tthis._plotDetailedInformations.forEach(plotDetailedInformation=>{\r\n\t\t\tplotDetailedInformation.window.removeEventListener(GenericWindow.EventNames.FOCUSSED,\r\n\t\t\t\tthis._onPlotDetailedInformationWindowFocused);\r\n\t\t});\r\n\t\tthis._releasePreviouslyFocusedPlotDetailedInformation();\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport Dialog from '../components/Dialog';\r\nimport WindowType from '../enums/WindowType';\r\nimport getViewportDimensions from '../ui_core/getViewportDimensions';\r\nimport PlotDetailedInformationsManager from './PlotDetailedInformationsManager';\r\nimport PlotComparisonScrollManager from './PlotComparisonScrollManager';\r\nimport './PlotComparisonManager.css';\r\nconst {throwNotProvided}=ParameterErrors;\r\nconst eventNamesToDetectWhenToExitComparison = [GenericWindow.EventNames.DRAG_STARTED, \r\nGenericWindow.EventNames.MAXIMIZED, GenericWindow.EventNames.UNMAXIMIZED, GenericWindow.EventNames.MINIMIZED, \r\n\tGenericWindow.EventNames.CLOSED, GenericWindow.EventNames.WINDOW_DESTROYED, GenericWindow.EventNames.RESIZE_STARTED];\r\nexport default class PlotComparisonManager {\r\n\tstatic get instance(){\r\n\t\tif(!PlotComparisonManager._instance){\r\n\t\t\tthrow new Error('Not initialized');\r\n\t\t}\r\n\t\treturn PlotComparisonManager._instance;\r\n\t}\r\n\tstatic initialize({plotDetailedInformationsManager, sitePlanElement}){\r\n\t\tPlotComparisonManager._instance = new PlotComparisonManager({plotDetailedInformationsManager, sitePlanElement});\r\n\t}\r\n\tconstructor({plotDetailedInformationsManager, sitePlanElement}){\r\n\t\tthis._plotDetailedInformationsManager=plotDetailedInformationsManager;\r\n\t\tthis.compare = this.compare.bind(this);\r\n\t\tthis._sitePlanElement = sitePlanElement;\r\n\t\tthis._plotComparisonElement = document.createElement('div');\r\n\t\tthis._plotComparisonElement.classList.add('plot-comparison');\r\n\t\tthis._plotComparisonTextElement = document.createElement('div');\r\n\t\tthis._plotComparisonTextElement.classList.add('text');\r\n\t\tthis._plotComparisonElement.appendChild(this._plotComparisonTextElement);\r\n\t\tthis._plotComparisonTextElement.innerHTML='';\r\n\t\tthis._sitePlanElement.appendChild(this._plotComparisonElement);\r\n\t\tthis._showTooManyPlotsSelectedToDoComparison = this._showTooManyPlotsSelectedToDoComparison.bind(this);\r\n\t\tthis._showAtLeastTwoPlotsMustBeSelectedDialog = this._showAtLeastTwoPlotsMustBeSelectedDialog.bind(this);\r\n\t\tthis._setComparingClassOnSitePlan= this._setComparingClassOnSitePlan.bind(this);\r\n\t\tthis._getNPlotDetailedInformationWindowsInEachDirection = this._getNPlotDetailedInformationWindowsInEachDirection.bind(this);\r\n\t\tthis._getPositionNextWindow = this._getPositionNextWindow.bind(this);\r\n\t\tthis._registerEventsToDetermineWhenToExit = this._registerEventsToDetermineWhenToExit.bind(this);\r\n\t\tthis._exitComparisonMode = this._exitComparisonMode.bind(this);\r\n\t}\r\n\tcompare(siteJsonUnitPlots){\r\n\t\tif(siteJsonUnitPlots.length<2){\r\n\t\t\tthis._showAtLeastTwoPlotsMustBeSelectedDialog();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(siteJsonUnitPlots.length>9){\r\n\t\t\tthis._showTooManyPlotsSelectedToDoComparison();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst plotDetailedInformations = siteJsonUnitPlots.map(siteJsonUnitPlot=>\r\n\t\t\tthis._plotDetailedInformationsManager.show(siteJsonUnitPlot)\r\n\t\t);\r\n\t\tconst positionNextWindow = this._getPositionNextWindow(plotDetailedInformations.length);\r\n\t\tplotDetailedInformations.forEach(plotDetailedInformation=>{\r\n\t\t\tpositionNextWindow(plotDetailedInformation);\r\n\t\t\tplotDetailedInformation.scrollToTop();\r\n\t\t\tplotDetailedInformation.window.bringToFront();\r\n\t\t});\r\n\t\tthis._registerEventsToDetermineWhenToExit(plotDetailedInformations);\r\n\t\tthis._setComparingClassOnSitePlan(true);\r\n\t\tthis._PlotComparisonScrollManager&&this._PlotComparisonScrollManager.dispose();\r\n\t\tthis._PlotComparisonScrollManager = new PlotComparisonScrollManager({plotDetailedInformations});\r\n\t}\r\n\t_registerEventsToDetermineWhenToExit(plotDetailedInformations){\r\n\t\tthis._unregisterEventsToDetermineWhenToExit&&this._unregisterEventsToDetermineWhenToExit();\r\n\t\tthis._unregisterEventsToDetermineWhenToExit=()=>{\r\n\t\t\tplotDetailedInformations.forEach(plotDetailedInformation=>{\r\n\t\t\t\teventNamesToDetectWhenToExitComparison.forEach(eventName=>\r\n\t\t\t\t\tplotDetailedInformation.window.removeEventListener(eventName, this._exitComparisonMode)\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t\twindow.removeEventListener('resize', this._exitComparisonMode);\r\n\t\t};\r\n\t\tplotDetailedInformations.forEach(plotDetailedInformation=>{\r\n\t\t\teventNamesToDetectWhenToExitComparison.forEach(eventName=>\r\n\t\t\t\tplotDetailedInformation.window.addEventListener(eventName, this._exitComparisonMode)\r\n\t\t\t);\r\n\t\t});\r\n\t\twindow.addEventListener('resize', this._exitComparisonMode);\r\n\t}\r\n\t_exitComparisonMode(e){\r\n\t\tthis._unregisterEventsToDetermineWhenToExit&&this._unregisterEventsToDetermineWhenToExit();\r\n\t\tthis._unregisterEventsToDetermineWhenToExit= null;\r\n\t\tthis._setComparingClassOnSitePlan(false);\r\n\t\tthis._PlotComparisonScrollManager&&this._PlotComparisonScrollManager.dispose();\r\n\t\tthis._plotComparisonScrollManager = null;\r\n\t}\r\n\t_getPositionNextWindow(nPlotDetailedInformations){\r\n\t\tconst nPlotDetailedInformationWindowsInEachDirection = this._getNPlotDetailedInformationWindowsInEachDirection(nPlotDetailedInformations);\r\n\t\tconst viewportDimensions = getViewportDimensions();\r\n\t\tconst windowDimensionsPx = [\r\n\t\t\tviewportDimensions[0]/nPlotDetailedInformationWindowsInEachDirection[0],\r\n\t\t\tviewportDimensions[1]/nPlotDetailedInformationWindowsInEachDirection[1]\r\n\t\t];\r\n\t\tlet nX = 0;\r\n\t\tlet nY = 0;\r\n\t\tconst width = windowDimensionsPx[0];\r\n\t\tconst height = windowDimensionsPx[1];\r\n\t\treturn (plotDetailedInformation)=>{\r\n\t\tif(nX>=nPlotDetailedInformationWindowsInEachDirection[0]){\r\n\t\t\t\tnX=0;\r\n\t\t\t\tnY++;\r\n\t\t\t}\r\n\t\t\tconst left = width*nX;\r\n\t\t\tconst top = height*nY;\r\n\t\t\tplotDetailedInformation.window.setWindowSizePosition({\r\n\t\t\t\twidth:width, \r\n\t\t\t\theight:height,\r\n\t\t\t\ttop:top,\r\n\t\t\t\tleft:left\r\n\t\t\t});\r\n\t\t\tnX++;\r\n\t\t};\r\n\t}\r\n\t_setComparingClassOnSitePlan(value){\r\n\t\tif(value)\r\n\t\t\tthis._sitePlanElement.classList.add('comparing-plots');\r\n\t\telse\r\n\t\t\tthis._sitePlanElement.classList.remove('comparing-plots');\r\n\t}\r\n\t_showAtLeastTwoPlotsMustBeSelectedDialog(){\r\n\t\tthis._currentDialog = Dialog.create({\r\n\t\t\ttitle:'Error', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'You must select at least two plots to do comparison!',\r\n\t\t\toptions:[{text:'OK'}]}\r\n\t\t);\r\n\t}\r\n\t_showTooManyPlotsSelectedToDoComparison(){\r\n\t\tthis._currentDialog = Dialog.create({\r\n\t\t\ttitle:'Error', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'Too many plots are selected to do comparison!',\r\n\t\t\toptions:[{text:'OK'}]}\r\n\t\t);\r\n\t}\r\n\t_getNPlotDetailedInformationWindowsInEachDirection(nPlotDetailedInformations){\r\n\t\tconst aspectRatio = this._sitePlanElement.offsetWidth/this._sitePlanElement.offsetHeight;\r\n\t\tswitch(nPlotDetailedInformations){\r\n\t\t\tcase 2:\r\n\t\t\tcase 3:\r\n\t\t\t\tif(aspectRatio>1)\r\n\t\t\t\t\treturn [nPlotDetailedInformations, 1];\r\n\t\t\t\treturn [1, nPlotDetailedInformations];\r\n\t\t\tcase 4:\r\n\t\t\t\treturn [2,2];\r\n\t\t\tcase 5:\r\n\t\t\tcase 6:\r\n\t\t\t\tif(aspectRatio>1)\r\n\t\t\t\t\treturn [3, 2];\r\n\t\t\t\treturn [2, 3];\r\n\t\t\tcase 7:\r\n\t\t\tcase 8:\r\n\t\t\t\tif(aspectRatio>1)\r\n\t\t\t\t\treturn [4, 2];\r\n\t\t\t\treturn [2, 4];\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error('Not implemented');\r\n\t\t}\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './Favourites.css';\r\nimport FavouriteEntry from './FavouriteEntry';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport MenuType from '../enums/MenuType';\r\nimport isMobile from '../core/isMobile';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport PlotComparisonManager from '../plot_detailed_information/PlotComparisonManager';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Favourites extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {onHide, onShowSendFavouritesBrochure, getConfiguration}=props;\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tthis._callbackHide = onHide;\r\n\t\tthis._subMenuHeader = React.createRef();\r\n\t\tthis._element = React.createRef();\r\n\t\tthis._callbackShowSendFavouritesBrochure = onShowSendFavouritesBrochure;\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tthis._onClickFavouriteEntryRemove = this._onClickFavouriteEntryRemove.bind(this);\r\n\t\tthis._handleClickSendMyFavouritesBrochure= this._handleClickSendMyFavouritesBrochure.bind(this);\r\n\t\tthis._handleClickCompare = this._handleClickCompare.bind(this);\r\n\t\tthis.state={visible:false, entries:[]};\r\n\t}\r\n\tget count(){\r\n\t\treturn this.state.entries.length;\r\n\t}\r\n\tadd(favourite){\r\n\t\tconst hash = favourite.hash;\r\n\t\tif(this._getEntryByHash(hash)!==null)return;\r\n\t\tconst favouriteEntryRef = React.createRef();\r\n\t\tconst favouriteEntry = ();\r\n\t\tconst entries = this.state.entries;\r\n\t\tentries.push(favouriteEntry);\r\n\t\tthis.setState({entries:entries});\r\n\t}\r\n\tget selectedFavourites(){\r\n\t\tconst selectedEntries = this.state.entries\r\n\t\t\t.map(entry=>entry.ref.current)\r\n\t\t\t.filter(entry=>entry.selected)\r\n\t\t\t.map(entry=>entry.favourite);\r\n\t\tif(selectedEntries.length>0)\r\n\t\t\treturn selectedEntries;\r\n\t\treturn this.state.entries.map(entry=>entry.ref.current.favourite);\r\n\t}\r\n\tremove(hash){\r\n\t\tconst entries = this.state.entries;\r\n\t\tconst favouriteEntry = this._getEntryByHash(hash);\r\n\t\tif(favouriteEntry===null)return;\r\n\t\tconst index = entries.indexOf(favouriteEntry);\r\n\t\tif(index<0)return;\r\n\t\tentries.splice(index, 1);\r\n\t\tthis.setState({entries:entries});\r\n\t\tfavouriteEntry.onRemove&&favouriteEntry.onRemove();\r\n\t}\r\n\t_onClickFavouriteEntryRemove(favourite){\r\n\t\tthis.remove(favourite.hash);\r\n\t\tfavourite.onRemove();\r\n\t}\r\n\t_getEntryByHash(hash){\r\n\t\tconst entries = this.state.entries;\r\n\t\tfor(var i=0; ifavourite.payload));\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.FAVOURITES;\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t\tthis._callbackHide&&this._callbackHide();\r\n\t}\t\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeader.current.setIMenuManager(value);\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"favourites menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\tconst comparisonButton = (!isMobile)&&this._getConfiguration().plotComparisonEnabled?():null;\r\n\t\tconst entries = this.state.entries.length>0?(\r\n\t\t\t\t
    \r\n\t\t\t\t
    \r\n\t\t\t\t{this.state.entries}\r\n\t\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\t{comparisonButton}\r\n\t\t\t\t
    \r\n\t\t\t\t):(
    No favourites. Click the star icon on a plot menu to favourite it!
    );\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t\t{entries}\r\n\t\t\t\t
    );\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Handle from '../core/Handle';\r\n\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class StylesHelper{\r\n\tstatic appendCssToPage(cssString){\r\n\t\tconst head = document.head || document.getElementsByTagName('head')[0];\r\n\t\tconst style = document.createElement('style');\r\n\t\thead.appendChild(style);\r\n\t\tstyle.type = 'text/css';\r\n\t\tif (style.styleSheet){\r\n\t\t\t// This is required for IE8 and below.\r\n\t\t\tstyle.styleSheet.cssText = cssString;\r\n\t\t} else {\r\n\t\t\tstyle.appendChild(document.createTextNode(cssString));\r\n\t\t}\r\n\t\tlet disposed = false;\r\n\t\treturn new Handle({dispose:()=>{\r\n\t\t\tif(disposed)return;\r\n\t\t\thead.removeChild(style);\r\n\t\t\tdisposed = true;\r\n\t\t}});\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './ImageViewer.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport MenuType from '../enums/MenuType';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport SubMenuHeader from './SubMenuHeader';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class PrivacyPolicy extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tthis._iMenuManager = null;\r\n\t\tthis._clickedOffHandle = null;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._sliderRef = React.createRef();\r\n\t\tthis._subMenuHeaderRef = React.createRef();\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._elementRef, hide:this.hide});\r\n\t\tthis.state={visible:false};\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.PRIVACY_POLICY;\r\n\t}\r\n\tshow(){\r\n\t\tthis.setState({visible:true});\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis.setState({visible:false});\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\tsetIMenuManager(value){\r\n\t\tthis._iMenuManager = value;\r\n\t\tthis._subMenuHeaderRef.current.setIMenuManager(value);\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"privacy-policy menu\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t\t\r\n\t\t\t\t
    \r\n\t\t\t\t\tThis is a privacy policy to go here!\r\n\t\t\t\t
    \r\n\t\t\t
    );\r\n\t}\r\n}\r\n","export default class ViewModelBase{\r\n\tconstructor(props){\r\n\t\t\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport eventEnable from '../core/eventEnable';\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class Models {\r\n constructor(props) {\r\n\t\teventEnable(this);\r\n\t\tthis._set =new Set();\r\n\t\tthis.add = this.add.bind(this);\r\n\t\tthis.remove = this.remove.bind(this);\r\n\t\tthis._dispatchAdded = this._dispatchAdded.bind(this);\r\n\t\tthis._dispatchRemoved = this._dispatchRemoved.bind(this);\r\n }\r\n\tadd(modelRef){\r\n\t\tif(this._set.has(modelRef))return;\r\n\t\tthis._set.add(modelRef);\r\n\t\tthis._dispatchAdded(modelRef);\r\n\t}\r\n\tremove(modelRef){\r\n\t\tif(!this._set.has(modelRef))return;\r\n\t\tthis._set.delete(modelRef);\r\n\t\tthis._dispatchRemoved(modelRef);\r\n\t}\r\n\t_dispatchAdded(modelRef){\r\n\t\tthis.dispatchEvent({type:'added', modelRef:modelRef});\r\n\t}\r\n\t_dispatchRemoved(modelRef){\r\n\t\tthis.dispatchEvent({type:'removed', modelRef:modelRef});\r\n\t}\r\n}\r\n","import ViewModelBase from './ViewModelBase';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nexport default class UnitViewModel extends ViewModelBase{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {siteJsonUnit}=props;\r\n\t\tthis._siteJsonUnit = siteJsonUnit;\r\n\t\tenableAcceptBindings(this);\r\n\t\t//exposeBinding(this, 'position', ()=>siteJsonPlotsPlot.position, (value)=>siteJsonPlotsPlot.position = value);\r\n\t}\r\n\tget location(){\r\n\t\treturn this._siteJsonUnit.location;\r\n\t}\r\n\tget code(){\r\n\t\treturn this._siteJsonUnit.code;\r\n\t}\r\n}","import eventEnable from '../core/eventEnable';\r\nexport default class CompositeProgressSource \r\n{\r\n\tconstructor(props){\r\n\t\tconst {weightingFactor, progressSources}=props||{};\r\n\t\teventEnable(this);\r\n\t\t\r\n\t\tthis.add= this.add.bind(this);\r\n\t\tthis._add= this._add.bind(this);\r\n\t\tthis.clear= this.clear.bind(this);\r\n\t\tthis.remove= this.remove.bind(this);\r\n\t\tthis._onProgressSourceProgressChanged= this._onProgressSourceProgressChanged.bind(this);\r\n\t\tthis._update= this._update.bind(this);\r\n\t\tthis.done= this.done.bind(this);\r\n\t\tthis._dispatchProgressChanged= this._dispatchProgressChanged.bind(this);\r\n\t\tthis._sum= this._sum.bind(this);\r\n\t\t\r\n\t\tthis._proportion = 0;\r\n\t\tthis._isDone = false;\r\n\t\tthis._weightingFactor = weightingFactor===undefined?null:weightingFactor;\r\n\t\tthis._progressSources =[];\r\n\t\t\r\n\t\tif(progressSources!==undefined&&progressSources!==null){\r\n\t\t\tthis.add(progressSources);\r\n\t\t}\r\n\t}\r\n\tget progressProportion(){\r\n\t\treturn this._isDone?1: this._proportion; \r\n\t}\r\n\tget weightingFactor()\r\n\t{\r\n\t\tif (this._weightingFactor !== null) return this._weightingFactor;\r\n\t\tvar weightingFactorSum=0;\r\n\t\tthis._progressSources.forEach(progressSource => weightingFactorSum +=progressSource.weightingFactor);\r\n\t\treturn weightingFactorSum;\r\n\t}\r\n\tadd(progressSource_s)\r\n\t{\r\n\t\tif(Array.isArray(progressSource_s)){\r\n\t\t\tif (progressSource_s.length < 1) return;\r\n\t\t}\r\n\t\telse{\r\n\t\t\tprogressSource_s=[progressSource_s];\r\n\t\t}\r\n\t\tvar added = false;\r\n\t\t\tprogressSource_s.forEach (progressSource => added |= this._add(progressSource));\r\n\t\tif (added)\r\n\t\t\tthis._update();\r\n\t}\r\n\tclear()\r\n\t{\r\n\t\tthis._progressSources.forEach(progressSource=>this.remove(progressSource));\r\n\t\tthis._isDone = false;\r\n\t\tthis._update();\r\n\t}\r\n\tremove(progressSource)\r\n\t{\r\n\t\tconst index = this._progressSources.indexOf(progressSource);\r\n\t\tif(index<0)return;\r\n\t\tprogressSource.removeEventListener('progresschanged', this._onProgressSourceProgressChanged);\r\n\t\tthis._progressSources.splice(index, 1);\r\n\t}\r\n\tdone()\r\n\t{ \r\n\t\tthis._isDone = true;\r\n\t\tthis._update();\r\n\t}\r\n\t_add(progressSource)\r\n\t{\r\n\t\tif (this._progressSources.indexOf(progressSource)>=0) return false;\r\n\t\tthis._progressSources.push(progressSource);\r\n\t\tprogressSource.addEventListener('progresschanged', this._onProgressSourceProgressChanged);\r\n\t\treturn true;\r\n\t}\r\n\t_onProgressSourceProgressChanged(e)\r\n\t{\r\n\t\tthis._update();\r\n\t}\r\n\t_update()\r\n\t{\r\n\t\tconst oldProportion = this._proportion;\r\n\t\tif (this._sum() !== oldProportion)\r\n\t\t\tthis._dispatchProgressChanged();\r\n\t}\r\n\t_dispatchProgressChanged()\r\n\t{\r\n\t\tthis.dispatchEvent({type:'progresschanged', progressProportion:this.progressProportion});\r\n\t}\r\n\t_sum()\r\n\t{\r\n\t\tif (this._isDone) return 1;\r\n\t\tconst count = this._progressSources.length;\r\n\t\tif (count < 1)\r\n\t\t{\r\n\t\t\tthis._proportion = 0;\r\n\t\t\treturn 0;\r\n\t\t}\r\n\t\tlet sumProgressTimesWeight = 0;\r\n\t\tlet sumWeights = 0;\r\n\t\tthis._progressSources.forEach(progressSource=>{\r\n\t\t\tsumProgressTimesWeight += progressSource.weightingFactor * (\r\n\t\t\t\tprogressSource.progressProportion > 1 ? 1 : (\r\n\t\t\t\t\tprogressSource.progressProportion < 0 ? 0 : progressSource.progressProportion\r\n\t\t\t\t)\r\n\t\t\t);\r\n\t\t\tsumWeights += progressSource.weightingFactor;\r\n\t\t});\r\n\t\treturn (this._proportion = (sumProgressTimesWeight / sumWeights));\r\n\t}\r\n}","import ViewModelBase from './ViewModelBase';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport UnitViewModel from './UnitViewModel';\r\nimport GenericModelViewModel from './GenericModelViewModel';\r\nimport CompositeProgressSource from '../progress/CompositeProgressSource';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class SitePlan3DViewModel extends ViewModelBase{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {siteJson, configuration}=props;\r\n\t\tif(!configuration)throwNotProvided('configuration');\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._loadingProgressProportionChanged= this._loadingProgressProportionChanged.bind(this);\r\n\t\tthis._unitViewModels = siteJson.units.getArray().map(unit=>new UnitViewModel({siteJsonUnit:unit}));\r\n\t\tthis._siteJson = siteJson;\r\n\t\tthis._progressSourceLoading = new CompositeProgressSource();\r\n\t\tthis._progressSourceLoading.addEventListener('progresschanged', this._loadingProgressProportionChanged);\r\n\t\tenableAcceptBindings(this);\r\n\t\texposeBinding(this, 'zoom', ()=>this.zoom, (value)=>this.zoom = value);\r\n\t\texposeBinding(this, 'loadProgressProportion', ()=>this.loadProgressProportion, (value)=>this.loadProgressProportion = value);\r\n\t\texposeBinding(this, 'progressBarVisible', ()=>this.progressBarVisible);\r\n\t}\r\n\tget siteModels(){\r\n\t\treturn this._siteJson.models.getModelsByGroupCode('site');\r\n\t}\r\n\tget configuration(){\r\n\t\treturn this._configuration;\r\n\t}\r\n\tget progressSourceLoading(){\r\n\t\treturn this._progressSourceLoading;\r\n\t}\r\n\tget units(){\r\n\t\treturn this._unitViewModels;\r\n\t}\r\n\tget zoom(){\r\n\t\treturn this._zoom;\r\n\t}\r\n\tset zoom(value){\r\n\t\tthis._zoom = value;\r\n\t}\r\n\tget loadProgressProportion(){\r\n\t\treturn this._progressSourceLoading.progressProportion;\r\n\t}\r\n\tget progressBarVisible(){\r\n\t\treturn this._progressSourceLoading.progressProportion<1;\r\n\t}\r\n\t_loadingProgressProportionChanged(e){\r\n\t\tthis.bindingsHandler.changed('loadProgressProportion', e.progressProportion);\r\n\t\tthis.bindingsHandler.changed('progressBarVisible', e.progressProportion<1);\r\n\t}\r\n}","import enableBindingToOthers from '../../mvvm/enableBindingToOthers';\r\nimport PropertyBindingFactory from '../../mvvm/PropertyBindingFactory';\r\nexport default class BabylonViewBase{\r\n\tconstructor(props){\r\n\t\tconst {model}=props;\r\n\t}\r\n}\r\n","import React, { Component } from \"react\";\r\nimport * as BABYLON from '@babylonjs/core';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\nclass BabylonCameraPan {\r\n\tconstructor(params){\r\n\t\tconst {babylonScene, inertiaDecayFactor, inertiaNegligibleThreshold}=params||{};\r\n\t\tif(!babylonScene)throwNotProvided('babylonScene');\r\n\t\tthis._inertiaDecayFactor = inertiaDecayFactor===undefined?0.9:inertiaDecayFactor;\r\n\t\tthis._inertiaNegligibleThreshold = inertiaNegligibleThreshold===undefined?0.5:inertiaNegligibleThreshold;\r\n\t\tthis._babylonScene = babylonScene;\r\n\t\tthis._isNewForwardVectorTooCloseToSingularity= this._isNewForwardVectorTooCloseToSingularity.bind(this);\r\n\t\tthis._pan= this._pan.bind(this);\r\n\t\tthis._sphericalPan= this._sphericalPan.bind(this);\r\n\t\tthis._inertialPan= this._inertialPan.bind(this);\r\n\t\tthis._getPointerViewSpaceDirectionToRef= this._getPointerViewSpaceDirectionToRef.bind(this);\r\n\t\tthis._mouseLeft = this._mouseLeft.bind(this);\r\n\t\tthis._onPointerUp= this._onPointerUp.bind(this);\r\n\t\tthis._onPointerDown= this._onPointerDown.bind(this);\r\n\t\tthis._setMouseButtonStates = this._setMouseButtonStates.bind(this);\r\n\t\tthis._stopPanningIfPanning = this._stopPanningIfPanning.bind(this);\r\n\t\t\r\n\t\tbabylonScene.scene.defaultCursor = \"grab\";\r\n\r\n\t\tbabylonScene.camera.rotationQuaternion = BABYLON.Quaternion.Identity();\r\n\t\t\r\n\t\tthis._leftButtonDown=false;\r\n\t\tthis._rightButtonDown=false;\r\n\t\tthis._ptrX = 0;\r\n\t\tthis._ptrY = 0;\r\n\t\tthis._inertiaX = 0;\r\n\t\tthis._inertiaY = 0;\r\n\r\n\t\tthis._priorDir = new BABYLON.Vector3();\r\n\t\tthis._currentDir = new BABYLON.Vector3();\r\n\t\tthis._rotationAxis = new BABYLON.Vector3();\r\n\t\tthis._rotationAngle = 0;\r\n\t\tthis._rotation = new BABYLON.Quaternion();\r\n\t\tthis._newForward = new BABYLON.Vector3();\r\n\t\tthis._newRight = new BABYLON.Vector3();\r\n\t\tthis._newUp = new BABYLON.Vector3();\r\n\t\tthis._matrix = new BABYLON.Matrix.Identity();\r\n\t\t\r\n\t\tthis._inertialPanObserver = null;\r\n\t\tthis._sphericalPanObserver = null;\r\n\t\tthis._leftButtonDown = false;\r\n\t\tbabylonScene.scene.onPointerDown = this._onPointerDown;\r\n\t\tbabylonScene.scene.onPointerUp = this._onPointerUp;\r\n\t\tdocument.addEventListener(\"mouseleave\", this._mouseLeft);\r\n\t}\r\n\t_setMouseButtonStates(e) {\r\n\t\tconst isLeftButton = e.button===0||e.which===1;\r\n\t\tconst isRightButton = e.button===2||e.which===3;\r\n\t\tswitch(e.type){\r\n\t\t\tcase 'pointerdown':\r\n\t\t\t\tif(isLeftButton) this._leftButtonDown=true;\r\n\t\t\t\telse if(isRightButton)this._rightButtonDown=true;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'pointerup':\r\n\t\t\t\tif(isLeftButton) this._leftButtonDown=false;\r\n\t\t\t\telse if(isRightButton)this._rightButtonDown=false;\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'mouseleave':\r\n\t\t\t\tthis._leftButtonDown=false;\r\n\t\t\t\tthis._rightButtonDown=false;\r\n\t\t\t\tbreak;\r\n\t\t\t\r\n\t\t}\r\n\t}\r\n\t_isNewForwardVectorTooCloseToSingularity(v){\r\n\t\t\tconst TOO_CLOSE_TO_UP_THRESHOLD = 0.99;\r\n\t\t\treturn Math.abs(BABYLON.Vector3.Dot(v, BABYLON.Vector3.Up())) > TOO_CLOSE_TO_UP_THRESHOLD;\r\n\t}\r\n\t_mouseLeft(e){\r\n\t\tthis._setMouseButtonStates(e);\r\n\t\tthis._stopPanningIfPanning();\r\n\t}\r\n\t_stopPanningIfPanning(e){\r\n\t\tif(!this._currentlyPanning)return;\r\n\t\tthis._currentlyPanning = false;\r\n\t\tthis._babylonScene.scene.defaultCursor = \"grab\";\r\n\t\tthis._babylonScene.scene.onBeforeRenderObservable.remove(this._sphericalPanObserver);\r\n\t\tthis._inertialPanObserver = this._babylonScene.scene.onBeforeRenderObservable.add(this._inertialPan);\r\n\t}\r\n\t_pan(currX, currY) {\r\n\t\tvar computeNewForward = (x, y) => {\r\n\t\t\tthis._getPointerViewSpaceDirectionToRef(this._ptrX, this._ptrY, this._priorDir);\r\n\t\t\tthis._getPointerViewSpaceDirectionToRef(x, y, this._currentDir);\r\n\r\n\t\t\tBABYLON.Vector3.CrossToRef(this._priorDir, this._currentDir, this._rotationAxis);\r\n\r\n\t\t\tif (this._rotationAxis.lengthSquared() > 0) {\r\n\t\t\t\tthis._rotationAngle = BABYLON.Vector3.GetAngleBetweenVectors(this._priorDir, this._currentDir, this._rotationAxis);\r\n\t\t\t\tBABYLON.Quaternion.RotationAxisToRef(this._rotationAxis, -this._rotationAngle, this._rotation);\r\n\r\n\t\t\t\tthis._newForward.set(0, 0, 1);\r\n\t\t\t\tthis._newForward.rotateByQuaternionToRef(this._rotation, this._newForward);\r\n\t\t\t\tthis._newForward.rotateByQuaternionToRef(this._babylonScene.camera.rotationQuaternion, this._newForward);\r\n\t\t\t\treturn !this._isNewForwardVectorTooCloseToSingularity(this._newForward);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\tif (computeNewForward(currX, currY) || computeNewForward(currX, this._ptrY)) {\r\n\t\t\tBABYLON.Vector3.CrossToRef(BABYLON.Vector3.Up(), this._newForward, this._newRight);\r\n\t\t\tBABYLON.Vector3.CrossToRef(this._newForward, this._newRight, this._newUp);\r\n\t\t\tthis._matrix.setRowFromFloats(0, this._newRight.x, this._newRight.y, this._newRight.z, 0);\r\n\t\t\tthis._matrix.setRowFromFloats(1, this._newUp.x, this._newUp.y, this._newUp.z, 0);\r\n\t\t\tthis._matrix.setRowFromFloats(2, this._newForward.x, this._newForward.y, this._newForward.z, 0);\r\n\t\t\tthis._babylonScene.fromRotationMatrixToRef(this._matrix.getRotationMatrix());\r\n\t\t}\r\n\t}\r\n\t\r\n\t_sphericalPan(){\r\n\t\tthis._pan(this._babylonScene.scene.pointerX, this._babylonScene.scene.pointerY);\r\n\t\tthis._inertiaX = this._babylonScene.scene.pointerX - this._ptrX;\r\n\t\tthis._inertiaY = this._babylonScene.scene.pointerY - this._ptrY;\r\n\t\tthis._ptrX = this._babylonScene.scene.pointerX;\r\n\t\tthis._ptrY = this._babylonScene.scene.pointerY;\r\n\t}\r\n\t _inertialPan(){\r\n\t\tif (Math.abs(this._inertiaX) > this._inertiaNegligibleThreshold || Math.abs(this._inertiaY) > this._inertiaNegligibleThreshold) {\r\n\t\t\tthis._pan(this._ptrX + this._inertiaX, this._ptrY + this._inertiaY);\r\n\t\t\tthis._pan(this._ptrX + this._inertiaX, this._ptrY + this._inertiaY);\r\n\r\n\t\t\tthis._inertiaX *= this._inertiaDecayFactor;\r\n\t\t\tthis._inertiaY *= this._inertiaDecayFactor;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._babylonScene.scene.onBeforeRenderObservable.remove(this._inertialPanObserver);\r\n\t\t}\r\n\t}\r\n\t_onPointerDown(e){\r\n\t\tthis._setMouseButtonStates(e);\r\n\t\tif(!this._leftButtonDown||this._rightButtonDown)return;\r\n\t\tif(this._currentlyPanning)return;\r\n\t\tthis._currentlyPanning = true;\r\n\t\tthis._babylonScene.scene.onBeforeRenderObservable.remove(this._inertialPanObserver);\r\n\t\tthis._babylonScene.scene.defaultCursor = \"grabbing\";\r\n\t\tthis._ptrX = this._babylonScene.scene.pointerX;\r\n\t\tthis._ptrY = this._babylonScene.scene.pointerY;\r\n\t\tthis._sphericalPanObserver = this._babylonScene.scene.onBeforeRenderObservable.add(this._sphericalPan);\r\n\t}\r\n\t_onPointerUp(e){\r\n\t\tthis._setMouseButtonStates(e);\r\n\t\tthis._stopPanningIfPanning();\r\n\t}\r\n\t_getPointerViewSpaceDirectionToRef(x, y, ref){\r\n\t\tBABYLON.Vector3.UnprojectToRef(\r\n\t\t\tnew BABYLON.Vector3(x, y, 0), \r\n\t\t\tthis._babylonScene.canvas.width, \r\n\t\t\tthis._babylonScene.canvas.height,\r\n\t\t\tBABYLON.Matrix.Identity(),\r\n\t\t\tBABYLON.Matrix.Identity(), \r\n\t\t\tthis._babylonScene.camera.getProjectionMatrix(),\r\n\t\t\tref);\r\n\t\tref.normalize();\r\n\t}\r\n}\r\nexport default BabylonCameraPan;","import React, { Component } from \"react\";\r\nimport * as BABYLON from '@babylonjs/core';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport TwoFingerTouch from '../ui_core/TwoFingerTouch';\r\nconst { throwNotProvided } = ParameterErrors;\r\nclass BabylonCameraZoom {\r\n\tconstructor(params){\r\n\t\tconst {babylonScene, inertiaDecayFactor, inertiaNegligibleThreshold, zoomSpeedFactor, closestCanGetToSurface}=params||{};\r\n\t\tif(!babylonScene)throwNotProvided('babylonScene');\r\n\t\tthis._zoomSpeedFactor = zoomSpeedFactor===undefined?15:zoomSpeedFactor;\r\n\t\tthis._babylonScene = babylonScene;\r\n\t\tthis._closestCanGetToSurface = closestCanGetToSurface===undefined?3:closestCanGetToSurface;\r\n\t\tthis._getMaximumDistanceCanMoveForward= this._getMaximumDistanceCanMoveForward.bind(this);\r\n\t\tthis._onPointerWheel= this._onPointerWheel.bind(this);\r\n\t\tbabylonScene.scene.onPrePointerObservable.add( this._onPointerWheel, BABYLON.PointerEventTypes.POINTERWHEEL, false);\r\n\t\tnew TwoFingerTouch({element:babylonScene.canvas, \r\n\t\tonStart:()=>{\r\n\t\t\tconsole.log('onStart');\r\n\t\t}, onStartFinger1:()=>{\r\n\t\t\tconsole.log('onStartFinger1');\r\n\t\t}, onStartFinger2:()=>{\r\n\t\t\tconsole.log('onStartFinger2');\r\n\t\t}, onMoveFinger1:()=>{\r\n\t\t\tconsole.log('onMoveFinger1');\r\n\t\t}, onMoveFinger2:()=>{\r\n\t\t\tconsole.log('onMoveFinger2');\r\n\t\t}, onEndFinger1:()=>{\r\n\t\t\tconsole.log('onEndFinger1');\r\n\t\t}, onEndFinger2:()=>{\r\n\t\t\tconsole.log('onEndFinger2');\r\n\t\t}\r\n\t\t, onEnd:()=>{\r\n\t\t\tconsole.log('onEnd');\r\n\t\t}});\r\n\t}\r\n\t_onPointerWheel(pointerInfo, eventState) {\r\n\t\tconst event = pointerInfo.event;\r\n\t\tvar delta = 0;\r\n\t\tif (event.wheelDelta) {\r\n\t\t\tdelta = event.wheelDelta;\r\n\t\t}\r\n\t\telse if (event.detail) {\r\n\t\t\tdelta = -event.detail;\r\n\t\t}\r\n\t\tif (!delta)return;\r\n\t\tconst direction = this._babylonScene.camera.getDirection(new BABYLON.Vector3(0,0,delta>0?1:-1));\r\n\t\tconst actualDistanceToMove = this._getMaximumDistanceCanMoveForward(direction, this._zoomSpeedFactor);\t\r\n\t\tconst scaledDirection = direction.scale(actualDistanceToMove);\r\n\t\tthis._babylonScene.addInPlace(scaledDirection);\r\n\t}\r\n\t_getMaximumDistanceCanMoveForward(direction, distanceWouldLikeToMove){\r\n\t\tconst origin = this._babylonScene.camera.position;\r\n\t\tconst ray = new BABYLON.Ray(origin, direction, 1000);\r\n\t\tconst hit = this._babylonScene.scene.pickWithRay(ray);\r\n\t\tif(!hit.hit)return distanceWouldLikeToMove;\r\n\t\tconst distanceLeftToMoveForward = hit.distance - this._closestCanGetToSurface;\r\n\t\tif(distanceLeftToMoveForward>distanceWouldLikeToMove)return distanceWouldLikeToMove;\r\n\t\treturn distanceLeftToMoveForward*0.7;\r\n\t}\r\n}\r\nexport default BabylonCameraZoom;","import eventEnable from '../core/eventEnable';\r\nexport default class StandardProgressSource\r\n{\r\n\tconstructor(props){\r\n\t\tconst {weightingFactor}=props||{};\r\n\t\teventEnable(this);\r\n\t\tthis.done= this.done.bind(this);\r\n\t\tthis._dispatchProgressChanged= this._dispatchProgressChanged.bind(this);\r\n\t\tthis._weightingFactor = weightingFactor===undefined||weightingFactor===null?1:weightingFactor;\r\n\t\tthis._isDone = false;\r\n\t\tthis._proportion = 0;\r\n\t}\r\n\tget progressProportion (){ \r\n\t\treturn this._isDone ? 1 : this._proportion;\r\n\t}\r\n\tset progressProportion(value){\r\n\t\tif(this._proportion===value)return;\r\n\t\tthis._proportion= value;\r\n\t\tthis._dispatchProgressChanged();\r\n\t}\r\n\tget weightingFactor()\r\n\t{\r\n\t\treturn this._weightingFactor;\r\n\t}\r\n\tdone() {\r\n\t\tif(this._isDone)return;\r\n\t\tthis._isDone = true; \r\n\t\tthis._dispatchProgressChanged(); \r\n\t}\r\n\t_dispatchProgressChanged()\r\n\t{\r\n\t\tthis.dispatchEvent({type:'progresschanged', progressProportion:this.progressProportion});\r\n\t}\r\n}","import enableBindingToOthers from '../../mvvm/enableBindingToOthers';\r\nimport PropertyBindingFactory from '../../mvvm/PropertyBindingFactory';\r\nimport BabylonViewBase from './BabylonViewBase';\r\nimport Iterator from '../../core/Iterator';\r\nimport * as BABYLON from '@babylonjs/core';\r\nimport BabylonCameraPan from '../../modelling/BabylonCameraPan';\r\nimport BabylonCameraZoom from '../../modelling/BabylonCameraZoom';\r\nimport StandardProgressSource from '../../progress/StandardProgressSource';\r\nimport Urls from '../../urls/Urls';\r\nexport default class SiteView extends BabylonViewBase{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {model, babylonScene, babylonModelsManager}=props;\r\n\t\tthis._babylonScene=babylonScene;\r\n\t\tthis._babylonModelsManager = babylonModelsManager;\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis._loadSiteModels = this._loadSiteModels.bind(this);\r\n\t\tthis._setupControls = this._setupControls.bind(this);\r\n\t\tthis._model = model;\r\n\t\tenableBindingToOthers(this);\r\n\t}\r\n\tinitialize(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._loadSiteModels().then(()=>{\r\n\t\t\t\tthis._setupControls().then(resolve).catch(reject);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_loadSiteModels(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst models = this._model.siteModels;\r\n\t\t\tconst progressSourceLoading = this._model.progressSourceLoading;\r\n\t\t\tprogressSourceLoading.clear();\r\n\t\t\tconst iteratorModels = new Iterator(models);\r\n\t\t\tconst progressSources = [];\r\n\t\t\tfor(var nModel=0; nModel{\r\n\t\t\t\tif(!iteratorModels.hasNext()){\r\n\t\t\t\t\tresolve(babylonModels);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst model = iteratorModels.next();\r\n\t\t\t\tconst progressSource = iteratorProgressSources.next();\r\n\t\t\t\tprogressSource.progressProportion =0;\r\n\t\t\t\tconsole.log('model.quadrantsRelativePath');\r\n\t\t\t\tconsole.log(model.quadrantsRelativePath);\r\n\t\t\t\tthis._babylonModelsManager.getNewMesh({\r\n\t\t\t\t\tcode:model.code,\r\n\t\t\t\t\tobjectIdNodeIdsMappings:model.objectIdNodeIdsMappings,\r\n\t\t\t\t\tquadrantsPath:Urls.getQuadrantsAbsolutePath({configuration:this._model.configuration, relativePath:model.quadrantsRelativePath}),\r\n\t\t\t\t\tstandardProgressSource:progressSource\r\n\t\t\t\t}).then((babylonModel)=>{\r\n\t\t\t\t\tprogressSource.done();\r\n\t\t\t\t\tbabylonModels.push(babylonModel);\r\n\t\t\t\t\tloadNextModel();\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t};\r\n\t\t\tloadNextModel();\r\n\t\t});\r\n\t\t\r\n\t}\r\n\t_setupControls(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._babylonScene.defaultCamerasAndLight({attachCameraControls:false});\r\n\t\t\tnew BabylonCameraPan({babylonScene:this._babylonScene});\r\n\t\t\tnew BabylonCameraZoom({babylonScene:this._babylonScene, zoomSpeedFactor:8});\r\n\t\t\tthis._babylonScene.startRendering();\r\n\t\t\tthis._babylonScene.setCameraPosition (new BABYLON.Vector3(200,200,-200));\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\t_zoomChanged(value){\r\n\t\t\r\n\t}\r\n}\r\n","import enableBindingToOthers from '../../mvvm/enableBindingToOthers';\r\nimport PropertyBindingFactory from '../../mvvm/PropertyBindingFactory';\r\nimport BabylonViewBase from './BabylonViewBase';\r\nimport Vector3 from '../../geometry/Vector3';\r\nimport Iterator from '../../core/Iterator';\r\nimport SiteView from './SiteView';\r\nimport GenericView from './GenericView';\r\nimport ProgressBar from '../ProgressBar';\r\nimport Urls from '../../urls/Urls';\r\nexport default class SitePlan3DView extends BabylonViewBase{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {model, element, babylonScene, babylonModelsManager}=props;\r\n\t\tthis._model = model;\r\n\t\tthis._element = element;\r\n\t\tthis._babylonScene=babylonScene;\r\n\t\tthis._babylonModelsManager = babylonModelsManager;\r\n\t\tthis._unitViews = [];\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis._progressBarVisibleChanged = this._progressBarVisibleChanged.bind(this);\r\n\t\tenableBindingToOthers(this);\r\n\t\tPropertyBindingFactory.standard(this, model, 'zoom', this._zoomChanged);\r\n\t\tthis._progressBar = new ProgressBar({model:model, propertyNameProgressProportion:'loadProgressProportion', propertyNameVisible:'progressBarVisible', delayHide:0});\r\n\t\tthis._logoLarge = document.createElement('img');\r\n\t\tthis._logoLarge.src = Urls.assets+'logos/large.png';\r\n\t\tthis._logoLarge.classList.add('logo-large');\r\n\t\tthis._element.appendChild(babylonScene.element);\r\n\t\tthis._element.appendChild(this._progressBar.element);\r\n\t\tthis._element.appendChild(this._logoLarge);\r\n\t\tthis._bindingProgressBarVisible = PropertyBindingFactory.standard(this, model, 'progressBarVisible', this._progressBarVisibleChanged);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tinitialize(){\r\n\t\tconst self = this;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst siteView = new SiteView({\r\n\t\t\t\tmodel:this._model, \r\n\t\t\t\tbabylonScene:self._babylonScene, \r\n\t\t\t\tbabylonModelsManager:self._babylonModelsManager, \r\n\t\t\t\tbabylonMaterialsManager:self._babylonMaterialsManager});\r\n\t\t\tsiteView.initialize().then(()=>{\r\n\t\t\t\tresolve();\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_zoomChanged(value){\r\n\t\t\r\n\t}\r\n\t_progressBarVisibleChanged(value){\r\n\t\tif(value)this._logoLarge.classList.add('visible');\r\n\t\telse this._logoLarge.classList.remove('visible');\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Mesh from './Mesh';\r\nimport UrlHelper from '../core/UrlHelper'\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class ModelFile {\r\n constructor(props) {\r\n const { rootUrl, fileName, url, code } = props;\r\n if (!code) throwNotProvided('code');\r\n this._code = code;\r\n if (url === null || url === undefined) {\r\n if (!rootUrl) this._throwMustProvideUrlOrRootUrlAndFileName(\"rootUrl\");\r\n this._rootUrl = rootUrl;\r\n if (!fileName) this._throwMustProvideUrlOrRootUrlAndFileName('fileName');\r\n this._fileName = fileName;\r\n }\r\n else {\r\n const seperatedUrlComponents = UrlHelper.seperateUrlIntoRootUrlAndFileName(url);\r\n this._rootUrl = seperatedUrlComponents[0];\r\n this._fileName = seperatedUrlComponents[1];\r\n }\r\n }\r\n _throwMustProvideUrlOrRootUrlAndFileName() {\r\n throw new Error('You must provide either the parameters \"rootUrl\" and \"fileName\" or \"url\"');\r\n\r\n }\r\n get code() {\r\n return this._code;\r\n }\r\n get rootUrl() {\r\n return this._rootUrl;\r\n }\r\n get fileName() {\r\n return this._fileName;\r\n }\r\n\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Vector3 from '../geometry/Vector3';\r\nconst { throwNotProvided } = ParameterErrors;\r\nexport default class Mesh {\r\n constructor(props) {\r\n const { name, material, position, relativePath} = props;\r\n if (!name) throwNotProvided(\"name\");\r\n this._name = name;\r\n //if (!material) throwNotProvided(\"material\");\r\n this._material = material;\r\n\r\n if (!position) throwNotProvided(\"position\");\r\n this._position = position;\r\n\t\t\r\n\t\tthis._relativePath = relativePath;\r\n }\r\n get name() {\r\n return this._name;\r\n }\r\n get material() {\r\n return this._material;\r\n }\r\n get position() {\r\n return this._position;\r\n }\r\n static fromObj(obj) {\r\n return new Mesh({\r\n name: obj.name,\r\n material: obj.material,\r\n position: Vector3.fromArray(obj.position),\r\n\t\t\trelativePath:obj.relativePath\r\n })\r\n }\r\n}\r\n","import * as BABYLON from '@babylonjs/core';\r\nimport eventEnable from '../core/eventEnable';\r\nexport default class BabylonModel{\r\n\tconstructor(props){\r\n\t\tconst {root, babylonMeshes, particleSystems, skeletons, code, location, objectIdNodeIdsMappings, quadrants}=props;\r\n\t\teventEnable(this);\r\n\t\tthis._root = root;\r\n\t\tthis._objectIdNodeIdsMappings= objectIdNodeIdsMappings;\r\n\t\tthis._quadrants = quadrants;\r\n\t\tthis._babylonMeshes = babylonMeshes;\r\n\t\tthis._particleSystems = particleSystems;\r\n\t\tthis._skeletons = skeletons;\r\n\t\tthis._code = code;\r\n\t\tthis._location = location;\r\n\t\tthis.setLocation = this.setLocation.bind(this);\r\n\t\tthis.setVisibleObjects = this.setVisibleObjects.bind(this);\r\n\t\tthis._setNodeEnabled = this._setNodeEnabled.bind(this);\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\tthis._setPositionRotationAndScaling = this._setPositionRotationAndScaling.bind(this);\r\n\t\tthis.setAllObjectsVisible = this.setAllObjectsVisible.bind(this);\r\n\t\tthis.clone = this.clone.bind(this);\r\n\t\tthis._mapNodeIdToBabylonMesh = new Map();\r\n\t\tthis._currentNodeIdsVisible = [];\r\n\t\tbabylonMeshes.forEach(babylonMesh=>{\r\n\t\t\tif(babylonMesh.id.indexOf('node')!==0)return;\r\n\t\t\tconst number = parseInt(babylonMesh.id.substr(4));\r\n\t\t\tthis._mapNodeIdToBabylonMesh.set(number, babylonMesh);\r\n\t\t\tthis._currentNodeIdsVisible.push(number);\r\n\t\t});\r\n\t\tconsole.log('this._babylonMeshes');\r\n\t\tconsole.log(this._babylonMeshes);\r\n\t}\r\n\tget code(){\r\n\t\treturn this._code;\r\n\t}\r\n\tget quadrants(){\r\n\t\treturn this._quadrants;\r\n\t}\r\n\tsetLocation(location){\r\n\t\tthis._setPositionRotationAndScaling(location.position, location.rotation, location.scaling);\r\n\t}\r\n\tsetAllObjectsVisible(){\r\n\t\tfor(var nodeId of this._objectIdNodeIdsMappings.allNodeIds){\r\n\t\t\tthis._setNodeEnabled(nodeId, true);\r\n\t\t}\r\n\t\tthis._currentNodeIdsVisible = this._objectIdNodeIdsMappings.allNodeIds;\r\n\t}\r\n\tsetVisibleObjects(objectIds){\r\n\t\tconst nodeIdsVisible = this._objectIdNodeIdsMappings.getNodeIdsForObjectIds(objectIds);\r\n\t\tnodeIdsVisible.forEach((nodeIdVisible)=>{\r\n\t\t\tconst indexInCurrentNodeIdsVisible = this._currentNodeIdsVisible.indexOf(nodeIdVisible);\r\n\t\t\tif(indexInCurrentNodeIdsVisible>=0)\r\n\t\t\t\tthis._currentNodeIdsVisible.splice(indexInCurrentNodeIdsVisible, 1);\r\n\t\t\telse\r\n\t\t\t\tthis._setNodeEnabled(nodeIdVisible, true);\r\n\t\t});\r\n\t\tthis._currentNodeIdsVisible.forEach(nodeIdToDisable=>this._setNodeEnabled(nodeIdToDisable, false));\r\n\t\tthis._currentNodeIdsVisible = nodeIdsVisible;\r\n\t}\r\n\t_setNodeEnabled(nodeId, enabled){\t\r\n\t\tconst mesh = this._mapNodeIdToBabylonMesh.get(nodeId);\r\n\t\tif(!mesh)return;\r\n\t\tmesh.setEnabled(enabled);\t\r\n\t}\r\n _setPositionRotationAndScaling(position, rotation, scaling) {\r\n this._root.position= new BABYLON.Vector3(position.x, position.y, position.z);\r\n this._root.rotation = new BABYLON.Vector3(rotation.x, rotation.y, rotation.z); \r\n this._root.scaling = new BABYLON.Vector3(scaling.x, scaling.y, scaling.z);\r\n }\r\n\tclone(){\r\n\t\tconst clonedRoot = this._root.clone();\r\n\t\treturn new BabylonModel({\r\n\t\t\troot:this._root,\r\n\t\t\tbabylonMeshes:this._babylonMeshes,\r\n\t\t\tparticleSystems:this._particleSystems,\r\n\t\t\tskeletons:this._skeletons,\r\n\t\t\tcode:this._code,\r\n\t\t\tlocation:this._location\r\n\t\t});\r\n\t}\r\n\tdispose(){\r\n\t\tthis.dispatchEvent({type:'disposed', babylonModel:this});\r\n\t}\r\n}","import * as BABYLON from '@babylonjs/core';\r\nimport Models from './Models';\r\nimport ModelFile from './ModelFile';\r\nimport BabylonModel from './BabylonModel';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport '@babylonjs/loaders'\r\nconst { throwNotProvided, throwNotOfType } = ParameterErrors;\r\nBABYLON.SceneLoader.loggingLevel = BABYLON.SceneLoader.DETAILED_LOGGING;\r\nexport default class BabylonModelsManagerCache {\r\n constructor(props) { \r\n\t\tthis._mapFileNameToBabylonModel = new Map();\r\n }\r\n\tadd(filePath, babylonModel){\r\n\t\tthis._mapFileNameToBabylonModel.set(filePath, babylonModel);\r\n\t}\r\n\thas(filePath){\r\n\t\treturn this._mapFileNameToBabylonModel.has(filePath);\r\n\t}\r\n\tget(filePath){\r\n\t\treturn this._mapFileNameToBabylonModel.get(filePath);\r\n\t}\r\n}","import * as BABYLON from '@babylonjs/core';\r\nimport Iterator from '../core/Iterator';\r\nexport default class BabylonMeshesCombiner{\r\n\tconstructor({scene}){\r\n\t\tthis._scene=scene;\r\n\t\tthis._mapMaterialNameToCombinedMesh = new Map();\r\n\t\tthis.combineMeshesByMaterial = this.combineMeshesByMaterial.bind(this);\r\n\t\tthis._get_MaterialName_MeshesToCombine_Pairs= this._get_MaterialName_MeshesToCombine_Pairs.bind(this);\r\n\t\tthis._validateAllVerticesHaveBufferBound= this._validateAllVerticesHaveBufferBound.bind(this);\r\n\t\tthis._get_getName = this._get_getName.bind(this);\r\n\t\tthis._mergeMeshes= this._mergeMeshes.bind(this);\r\n\t}\r\n\tcombineMeshesByMaterial(babylonMeshes){\r\n\t\tconst getName = this._get_getName();\r\n\t\tconst materialName_MeshesToCombine_Pairs= this._get_MaterialName_MeshesToCombine_Pairs(babylonMeshes);\r\n\t\tfor(var pair of materialName_MeshesToCombine_Pairs){\r\n\t\t\tlet [materialName, meshesToCombine]=pair;\r\n\t\t\t//if(materialName=='VG_Ext_Brick_IbstockSurreyOrange (Instance)'){\r\n\t\t\tconsole.log('materialName: '+materialName);\r\n\t\t\tconsole.log(meshesToCombine);\r\n\t\t\tif(materialName==='VG_Ext_Brick_IbstockSurreyOrange')continue;\r\n\t\t\tif(meshesToCombine.length>500)continue;\r\n\t\t\tlet combinedMesh = this._mapMaterialNameToCombinedMesh.get(materialName);\r\n\t\t\tif(combinedMesh!==undefined&&combinedMesh!==null){\r\n\t\t\t\tmeshesToCombine = [combinedMesh].concat(meshesToCombine);\r\n\t\t\t}\r\n\t\t\tif(meshesToCombine.length<2){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tcombinedMesh = this._mergeMeshes(getName(), meshesToCombine, this._scene);\r\n\t\t\tif(combinedMesh===null){\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tthis._mapMaterialNameToCombinedMesh.set(materialName, combinedMesh);\r\n\t\t}\r\n\t}\r\n\t_get_getName(){\r\n\t\tlet nMerge=0;\r\n\t\treturn ()=>{\r\n\t\t\treturn 'merged_'+(nMerge++);\r\n\t\t};\r\n\t}\r\n\t_get_MaterialName_MeshesToCombine_Pairs(babylonMeshes){\r\n\t\tconst mapMeshNameToMeshesToCombine = new Map();\r\n\t\tconst materialName_MeshesToCombine_Pairs = [];\r\n\t\tfor(var babylonMesh of babylonMeshes){\r\n\t\t\tconst materialName = babylonMesh.material?.name;\r\n\t\t\tlet meshesToCombine = mapMeshNameToMeshesToCombine.get(materialName);\r\n\t\t\tif(meshesToCombine===undefined||meshesToCombine===null){\r\n\t\t\t\tmeshesToCombine = [babylonMesh];\r\n\t\t\t\tmaterialName_MeshesToCombine_Pairs.push([materialName, meshesToCombine]);\r\n\t\t\t\tmapMeshNameToMeshesToCombine.set(materialName, meshesToCombine);\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t\tmeshesToCombine.push(babylonMesh);\r\n\t\t}\r\n\t\treturn materialName_MeshesToCombine_Pairs;\r\n\t}\r\n\t\r\n\t\r\n\t_mergeMeshes(meshName, meshes, scene) {\r\n\t\tif(meshes.length<2)return;\r\n\t\tconst firstMesh = meshes[0];\r\n\t\tlet newUv2s = [];\r\n\t\tlet newColors = [];\r\n\t\tlet newMatricesIndices = [];\r\n\t\tlet newMatricesWeights = [];\r\n\t\tlet newIndices = [];\r\n\t\tlet newPositions = [];\r\n\t\tlet newNormals = [];\r\n\t\tlet newUvs = [];\r\n\t\tlet meshesToDispose = [];\r\n\t\tvar hasUv2s = true;\r\n\t\tvar hasColors = true;\r\n\t\tvar hasMatricesIndices = true;\r\n\t\tvar hasMatricesWeights = true;\r\n\t\tlet hasNormals =true;\r\n\t\tconst normalsForEachMesh=[];\r\n\t\tfor (var i = 0; i < meshes.length; i++) {\r\n\t\t\tconst mesh = meshes[i];\r\n\t\t\tconst normals = mesh.getVerticesData(BABYLON.VertexBuffer.NormalKind);\r\n\t\t\tif(!normals)\r\n\t\t\t\thasNormals = false;\r\n\t\t\tnormalsForEachMesh[i]=normals;\r\n\t\t\tif (!mesh.isVerticesDataPresent([BABYLON.VertexBuffer.UV2Kind])) hasUv2s = false;\r\n\t\t\tif (!mesh.isVerticesDataPresent([BABYLON.VertexBuffer.ColorKind])) hasColors = false;\r\n\t\t\tif (!mesh.isVerticesDataPresent([BABYLON.VertexBuffer.MatricesIndicesKind])) hasMatricesIndices = false;\r\n\t\t\tif (!mesh.isVerticesDataPresent([BABYLON.VertexBuffer.MatricesWeightsKind])) hasMatricesWeights = false;\r\n\t\t\r\n\t\t}\r\n\t\tfor (i = 0; i < meshes.length; i++) {\r\n\t\t\tconst mesh = meshes[i];\r\n\t\t\ttry{\r\n\t\t\t\tvar indices = mesh.getIndices();\r\n\t\t\t\tif(indices===null)continue;\r\n\t\t\t\tconst positions = mesh.getVerticesData(BABYLON.VertexBuffer.PositionKind);\r\n\t\t\t\tif(positions===null)continue;\r\n\t\t\t\tmesh.computeWorldMatrix(true);\r\n\t\t\t\tnewUvs = newUvs.concat(mesh.getVerticesData(BABYLON.VertexBuffer.UVKind));\r\n\t\t\t\tif (hasUv2s) newUv2s = newUv2s.concat(mesh.getVerticesData(BABYLON.VertexBuffer.UV3Kind));\r\n\t\t\t\tif (hasColors) newColors = newColors.concat(mesh.getVerticesData(BABYLON.VertexBuffer.ColorKind));\r\n\t\t\t\tif (hasMatricesIndices) newMatricesIndices = newMatricesIndices.concat(mesh.getVerticesData(BABYLON.VertexBuffer.MatricesIndicesKind));\r\n\t\t\t\tif (hasMatricesWeights) newMatricesWeights = newMatricesWeights.concat(mesh.getVerticesData(BABYLON.VertexBuffer.MatricesWeightsKind));\r\n\r\n\t\t\t\tvar positionsOffset = newPositions.length / 3;\r\n\r\n\t\t\t\tvar worldMatrix = mesh.getWorldMatrix();\r\n\t\t\t\tthis._validateAllVerticesHaveBufferBound(indices, positions);\r\n\t\t\t\tfor (var vertexIndex = 0; vertexIndex < positions.length; vertexIndex += 3) {\r\n\t\t\t\t\tconst vertex = BABYLON.Vector3.TransformCoordinates(new BABYLON.Vector3(positions[vertexIndex], positions[vertexIndex + 1], positions[vertexIndex + 2]), worldMatrix);\r\n\t\t\t\t\tnewPositions.push(vertex.x);\r\n\t\t\t\t\tnewPositions.push(vertex.y);\r\n\t\t\t\t\tnewPositions.push(vertex.z);\r\n\t\t\t\t}\r\n\t\t\t\tif(hasNormals){\r\n\t\t\t\t\tconst normals = normalsForEachMesh[i];\r\n\t\t\t\t\tif(normals===null){\r\n\t\t\t\t\t\tnormals = new Array(positions.length/3/*???*/).fill(0);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfor (var normalsIndex = 0; normalsIndex != normals.length; normalsIndex += 3) {\r\n\t\t\t\t\t\tvar normal = BABYLON.Vector3.TransformNormal(new BABYLON.Vector3(normals[normalsIndex], normals[normalsIndex + 1], normals[normalsIndex + 2]), worldMatrix);\r\n\t\t\t\t\t\tnewNormals.push(normal.x);\r\n\t\t\t\t\t\tnewNormals.push(normal.y);\r\n\t\t\t\t\t\tnewNormals.push(normal.z);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tfor (var indicesIndex = 0; indicesIndex < indices.length; indicesIndex++) {\r\n\t\t\t\t newIndices.push(indices[indicesIndex] + positionsOffset);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfinally{\r\n\t\t\t\tif(i>0)\r\n\t\t\t\t\tmeshesToDispose.push(mesh);\r\n\t\t\t}\r\n\t\t}\r\n\t\tif((newIndices.length<1)||(newPositions.length<1))return null;\r\n\t\tconst newMesh = new BABYLON.Mesh(meshName, scene);\r\n\t\tnewMesh.setVerticesData(BABYLON.VertexBuffer.PositionKind, newPositions, false);\r\n\t\tif(hasNormals&&(newNormals.length>0))\r\n\t\t\tnewMesh.setVerticesData(BABYLON.VertexBuffer.NormalKind, newNormals, false);\r\n\t\tnewMesh.setVerticesData(BABYLON.VertexBuffer.UVKind, newUvs, false);\r\n\t\t\r\n\t\tif (newUv2s.length > 0) newMesh.setVerticesData(BABYLON.VertexBuffer.UV2Kind, newUv2s, false);\r\n\t\tif (newColors.length > 0) newMesh.setVerticesData(BABYLON.VertexBuffer.ColorKind, newUvs, false);\r\n\t\tif (newMatricesIndices.length > 0) newMesh.setVerticesData(BABYLON.VertexBuffer.MatricesIndicesKind, newUvs, false);\r\n\t\tif (newMatricesWeights.length > 0) newMesh.setVerticesData(BABYLON.VertexBuffer.MatricesWeightsKind, newUvs, false);\r\n\r\n\t\tnewMesh.setIndices(newIndices);\r\n\t\tnewMesh.material = firstMesh.material;\r\n\t\tconsole.log( firstMesh.material);\r\n\t\tmeshesToDispose.forEach(mesh=>mesh.dispose(true));\r\n\t\tfirstMesh.dispose(true);\r\n\t\treturn newMesh;\r\n\t}\r\n\t_validateAllVerticesHaveBufferBound(indices, positions){\r\n\t\t\r\n\t}\r\n}","import * as BABYLON from '@babylonjs/core';\r\nimport '@babylonjs/core/Debug/debugLayer';\r\nimport '@babylonjs/inspector';\r\nimport '@babylonjs/loaders';\r\nimport Models from './Models';\r\nimport ModelFile from './ModelFile';\r\nimport BabylonModel from './BabylonModel';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Location from '../modelling/Location';\r\nimport '@babylonjs/loaders'\r\nimport BabylonModelsManagerCache from './BabylonModelsManagerCache';\r\nimport BabylonMeshesCombiner from './BabylonMeshesCombiner';\r\nconst { throwNotProvided, throwNotOfType } = ParameterErrors;\r\nBABYLON.SceneLoader.loggingLevel = BABYLON.SceneLoader.DETAILED_LOGGING;\r\nconst PROPORTION_PROGRESS_DOWNLOADING_FILE=0.8;\r\nexport default class BabylonModelsManager {\r\n constructor(props) { \r\n const { models, babylonMaterialsManager, babylonScene, modelsRootUrl} = props;\r\n if (!models) throwNotProvided(\"models\");\r\n if (!models instanceof Models) throwNotOfType(\"models\", Models.constructor.name);\r\n this._models = models;\t\r\n\t\tif(!babylonScene)throwNotProvided('babylonScene');\r\n\t\tthis._babylonScene = babylonScene;\r\n\t\tif(!modelsRootUrl)throwNotProvided('modelsRootUrl');\r\n\t\tthis._modelsRootUrl=UrlHelper.makeSureSlashOnEnd(modelsRootUrl);\r\n\t\tthis._babylonModelsManagerCache = new BabylonModelsManagerCache();\r\n\t\tthis._babylonMeshesCombiner = new BabylonMeshesCombiner({scene:babylonScene });\r\n\t\tthis._babylonMaterialsManager=babylonMaterialsManager;\r\n\t\tthis._getModelFileFromModelAndOrCode = this._getModelFileFromModelAndOrCode.bind(this);\r\n\t\tthis._scheduleApplyTexturesToModel = this._scheduleApplyTexturesToModel.bind(this);\r\n\t\tthis._scheduleApplyTextureToMesh = this._scheduleApplyTextureToMesh.bind(this);\r\n\t\tthis._makeBabylonMeshInvisible= this._makeBabylonMeshInvisible.bind(this);\r\n\t\tthis._isCollider = this._isCollider.bind(this);\r\n\t\tthis.getNewMesh = this.getNewMesh.bind(this);\r\n\t\tthis.loadBabylonModel = this.loadBabylonModel.bind(this);\r\n\t\t\r\n }\r\n\tgetNewMesh({code, location, objectIdNodeIdsMappings, loadBabylonModel, quadrantsPath, standardProgressSource}){\r\n\t\tconst self = this;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(!location)location = Location.getDefault();\r\n\t\t\tconst model = this._models.getModelByCode(code);\r\n\t\t\tif(!model)throw new Error(`Model with code ${code} doesnt exist in models json file`);\r\n\t\t\tconst modelFile = this._getModelFileFromModelAndOrCode(model, code);\r\n\t\t\tif(!self._babylonModelsManagerCache.has(modelFile.fileName)){\r\n\t\t\t\tself.loadBabylonModel({code, location, modelFile, model, objectIdNodeIdsMappings, quadrantsPath, standardProgressSource})\r\n\t\t\t\t.then(babylonModel=>{\r\n\t\t\t\t\tif(standardProgressSource)standardProgressSource.progressProportion=1;\r\n\t\t\t\t\tresolve(babylonModel);\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthrow new Error('should not be here atm');\r\n\t\t\tconst existingBabylonModel = self._babylonModelsManagerCache.get(modelFile.fileName);\r\n\t\t\tconst babylonModel = existingBabylonModel.clone();\r\n\t\t\tbabylonModel.setLocation(location);\r\n\t\t\tresolve(babylonModel);\r\n\t\t});\r\n\t}\r\n\tloadBabylonModel({code, location, modelFile, model, objectIdNodeIdsMappings, quadrantsPath, standardProgressSource}){\r\n\t\tconst self = this;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\t//const root = new BABYLON.TransformNode();\r\n\t\t\tconst promiseGetQuadrants = AssetsManager.getQuadrants(quadrantsPath);\r\n\t\t\tBABYLON.SceneLoader.ImportMesh(null, modelFile.rootUrl, modelFile.fileName, this._babylonScene.scene,\r\n\t\t\t\t(babylonMeshes, particleSystems, skeletons)=>{\r\n\t\t\t\t\ttry{\r\n\t\t\t\t\t\t/*babylonMeshes.forEach(babylonMesh => {\r\n\t\t\t\t\t\t\tif (babylonMesh.parent)return;\r\n\t\t\t\t\t\t\tbabylonMesh.parent = root;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\t*/\r\n\t\t\t\t\t\t//self._applyTextures(model, this._babylonMaterialsManager, babylonMeshes).then(()=>{\r\n\t\t\t\t\t\tpromiseGetQuadrants.then((quadrants)=>{\r\n\t\t\t\t\t\t\tconst babylonModel = new BabylonModel({root:null, babylonMeshes, particleSystems,\r\n\t\t\t\t\t\t\tskeletons, code, location, quadrants, objectIdNodeIdsMappings});\r\n\t\t\t\t\t\t\tconsole.log(this._babylonScene);\r\n\t\t\t\t\t\t\tthis._babylonScene.babylonModelAdded(babylonModel);\r\n\t\t\t\t\t\t\tconsole.log('did quadrants promise');\r\n\t\t\t\t\t\t\tconsole.log(quadrants);\r\n\t\t\t\t\t\t\tself._babylonModelsManagerCache.add(modelFile.fileName, babylonModel);\r\n\t\t\t\t\t\t\tif(standardProgressSource)standardProgressSource.progressProportion=1;\r\n\t\t\t\t\t\t\tresolve(babylonModel);\r\n\t\t\t\t\t\t}).catch(reject);\r\n\t\t\t\t\t\t//}).catch(reject);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tcatch(err){\r\n\t\t\t\t\t\treject(err);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t(progress)=>{\r\n\t\t\t\t\tif(!standardProgressSource)return;\r\n\t\t\t\t\tconst progressProportion = progress.loaded*PROPORTION_PROGRESS_DOWNLOADING_FILE/progress.total;\r\n\t\t\t\t\tstandardProgressSource.progressProportion= progressProportion;\r\n\t\t\t\t},\r\n\t\t\t\t(scene, message)=>{\r\n\t\t\t\t\treject(new Error(message));\r\n\t\t\t\t}\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\t_combineMeshesByMaterial(){\r\n\r\n\t}\r\n _applyTextures(model, materialsManager, babylonMeshes) {\r\n return new Promise((resolve, reject) => { \r\n this._scheduleApplyTexturesToModel(model, babylonMeshes, materialsManager);\r\n resolve();\r\n });\r\n }\r\n _scheduleApplyTexturesToModel(model, babylonMeshes, materialsManager) {\r\n const meshes = model.meshes;\r\n for (var index = 0; index < babylonMeshes.length; index++) {\r\n const babylonMesh = babylonMeshes[index];\r\n if (this._isCollider(babylonMesh)) {\r\n\t\t\t\tthis._makeBabylonMeshInvisible(babylonMesh, materialsManager);\r\n\t\t\t\tcontinue;\r\n }\r\n\t\t\tconst mesh = meshes.getByName(babylonMesh.name);\r\n\t\t\tlet materialName;\r\n\t\t\tconst hasMesh = mesh!==undefined&&mesh!==null;\r\n\t\t\tif(hasMesh){\r\n\t\t\t\tmaterialName = mesh.material;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\tif(babylonMesh.material===null)continue;\r\n\t\t\t\tmaterialName = babylonMesh.material.name;\r\n\t\t\t}\r\n\t\t\tthis._scheduleApplyTextureToMesh(materialName, babylonMesh, materialsManager);\r\n }\r\n }\r\n _makeBabylonMeshInvisible(babylonMesh, materialsManager) {\r\n babylonMesh.material = materialsManager.getInvisibleMaterial();\r\n }\r\n _scheduleApplyTextureToMesh(materialName, babylonMesh, materialsManager) {\r\n materialsManager.getBabylonMaterialByName(materialName).then((babylonMaterial) => {\r\n babylonMesh.material = babylonMaterial;\r\n }).catch(console.error);\r\n }\r\n\t_getModelFileFromModelAndOrCode(model, code){\r\n\t\tconst modelRelativePath = model.relativePath;\r\n\t\tif(modelRelativePath){\r\n\t\t\tconst suffix = UrlHelper.removeStartSlash(modelRelativePath);\r\n\t\t\tconst url = `${this._modelsRootUrl}${suffix}`;\r\n\t\t\treturn new ModelFile({code:code, url:url}); \r\n\t\t}\r\n\t\treturn new ModelFile({code:code, rootUrl:this._modelsRootUrl, fileName:`${code}.gbx`}); \r\n\t}\r\n _isCollider(babylonMesh) {\r\n const name = babylonMesh.name;\r\n return name === 'Collider' || name === 'collider';\r\n }\r\n}","import React, { Component } from \"react\";\r\nimport * as BABYLON from '@babylonjs/core';\r\n/*import { Engine } from \"@babylonjs/core/Engines/engine\";\r\nimport { Scene } from \"@babylonjs/core/scene\";\r\nimport { ArcRotateCamera } from \"@babylonjs/core/Cameras/arcRotateCamera\";\r\nimport { Vector3 } from \"@babylonjs/core/Maths/math.vector\";\r\nimport { HemisphericLight } from \"@babylonjs/core/Lights/hemisphericLight\";\r\nimport { SceneLoader } from \"@babylonjs/core/Loading/sceneLoader\";\r\nimport { CubeTexture } from \"@babylonjs/core/Materials/Textures/cubeTexture\";\r\nimport { EnvironmentHelper } from \"@babylonjs/core/Helpers/environmentHelper\";\r\n*/\r\nimport { SceneInstrumentation } from \"@babylonjs/core/Instrumentation/sceneInstrumentation\";\r\n// required imports\r\nimport \"@babylonjs/core/Loading/loadingScreen\";\r\nimport \"@babylonjs/core/Materials/standardMaterial\";\r\nimport \"@babylonjs/core/Materials/Textures/Loaders/envTextureLoader\";\r\n\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport Iterator from '../core/Iterator';\r\nimport FrequencyLimitedCallback from '../core/FrequencyLimitedCallback';\r\nconst { throwNotProvided } = ParameterErrors;\r\nclass BabylonScene {\r\n constructor(props) {\r\n const { onReadyToAddSceneComponents } = props;\r\n this._rendering = false;\r\n this._scene = null;\r\n if (!onReadyToAddSceneComponents) throwNotProvided('onReadyToAddSceneComponents');\r\n\t\tthis._onReadyToAddSceneComponents = onReadyToAddSceneComponents;\r\n this.defaultCamerasAndLight = this.defaultCamerasAndLight.bind(this);\r\n this._onWindowResize = this._onWindowResize.bind(this);\r\n this.startRendering = this.startRendering.bind(this);\r\n this.stopRendering = this.stopRendering.bind(this);\r\n this.setRendering = this.setRendering.bind(this);\r\n this._rendeLoop = this._rendeLoop.bind(this);\r\n this.babylonModelAdded = this.babylonModelAdded.bind(this);\r\n this._babylonModelDisposed = this._babylonModelDisposed.bind(this);\r\n this.fromRotationMatrixToRef = this.fromRotationMatrixToRef.bind(this);\r\n this._updateVisibleObjects = this._updateVisibleObjects.bind(this);\r\n this._cameraPositionOrRotationChanged = this._cameraPositionOrRotationChanged.bind(this);\r\n this.dispose = this.dispose.bind(this);\r\n this._setScalingRotationAndPosition = this._setPositionRotationAndScaling.bind(this);\r\n this.setNTimesInitialCameraRadius = this.setNTimesInitialCameraRadius.bind(this);\r\n\t\tthis._babylonModels=[];\r\n\t\tthis._updateVisibleObjectsFrequencyLimitedCallback = new FrequencyLimitedCallback({frequencyHz:6});\r\n\t\tthis._canvas = document.createElement('canvas');\r\n this._canvas.style.width = '100%';\r\n\t\tthis._canvas.style.height = '100%';\r\n this._engine = new BABYLON.Engine(this._canvas, true);\r\n this._scene = new BABYLON.Scene( this._engine);\r\n\t\tconst sceneInstrumentation = new SceneInstrumentation(this._scene);\r\n\t\tsetInterval(()=>console.log('n draw calls: '+sceneInstrumentation.drawCallsCounter.current), 3000);\r\n window.addEventListener(\"resize\", this._onWindowResize, false);\r\n\t\tsetTimeout(()=>{\r\n\t\t\t this._engine.resize();\r\n\t\t\tthis._onReadyToAddSceneComponents();\r\n\t\t}, 0);\r\n }\r\n\tbabylonModelAdded(babylonModel){\r\n\t\tbabylonModel.addEventListener('disposed', this._babylonModelDisposed);\r\n\t\tthis._babylonModels.push(babylonModel);\r\n\t}\r\n\t_babylonModelDisposed(e){\r\n\t\tconst {babylonModel}=e;\r\n\t\tconst index = this._babylonModels.indexOf(babylonModel);\r\n\t\tif(index<0)return;\r\n\t\tthis._babylonModels.splice(index, 1);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._canvas;\r\n\t}\r\n get scene() {\r\n return this._scene;\r\n }\r\n get canvas() {\r\n return this._canvas;\r\n }\r\n\tget camera(){\r\n\t\treturn this._camera;\r\n\t}\r\n defaultCamerasAndLight(params) {\r\n\t\tparams = params||{attachCameraControls:true}\r\n //this._scene.createDefaultCameraOrLight(true, true, params.attachCameraControls);\r\n this._scene.createDefaultEnvironment();\r\n\t\tsetInterval(()=>{\r\n\t\tthis._scene.createDefaultLight();\r\n this._scene.lights[0].intensity = 20;\r\n\t\t});\r\n\t\tthis._camera = new BABYLON.FreeCamera(\"camera\", BABYLON.Vector3.Zero(), this._scene);\r\n this._initialCameraRadius = this._camera.radius;\r\n }\r\n setNTimesInitialCameraRadius(n) {\r\n\t\tconsole.log('this._camera.radius');\r\n\t\tconsole.log(this._camera.radius);\r\n this._camera.radius = this._initialCameraRadius * n;\r\n }\r\n\t\r\n\tsetCameraPosition(position){\r\n\t\tthis._camera.position = position;\r\n\t\tthis._cameraPositionOrRotationChanged();\r\n\t}\r\n\taddInPlace(scaledDirection){\r\n\t\tthis._camera.position.addInPlace(scaledDirection);\r\n\t\tthis._cameraPositionOrRotationChanged();\r\n\t}\r\n\tfromRotationMatrixToRef(rotationMatrix){\r\n\t\tBABYLON.Quaternion.FromRotationMatrixToRef(rotationMatrix, this._camera.rotationQuaternion);\r\n\t\tthis._cameraPositionOrRotationChanged();\r\n\t}\r\n\tgetCameraPosition(){\r\n\t\treturn this._camera.position;\r\n\t}\r\n startRendering() {\r\n this.setRendering(true);\r\n }\r\n stopRendering() {\r\n this.setRendering(false);\r\n }\r\n setRendering(value) {\r\n if (!(this._rendering ^ value)) return;\r\n this._rendering = value;\r\n if (value) {\r\n this._engine.runRenderLoop(this._rendeLoop);\r\n return;\r\n }\r\n this._engine.stopRenderLoop(this._rendeLoop);\r\n }\r\n\t_cameraPositionOrRotationChanged(){\r\n\t\tthis._updateVisibleObjectsFrequencyLimitedCallback.trigger(this._updateVisibleObjects);\r\n\t}\r\n\t_updateVisibleObjects(){\r\n\t\tif(window.objectIdsToShow){\r\n\t\t\tfor(var babylonModel of this._babylonModels){\r\n\t\t\t\tconsole.log(window.objectIdsToShow);\r\n\t\t\t\tbabylonModel.setVisibleObjects(window.objectIdsToShow);\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(window.setAllObjectsVisible){\r\n\t\t\t\t\r\n\t\t\tfor(var babylonModel of this._babylonModels){\r\n\t\t\t\tbabylonModel.setAllObjectsVisible();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tlet objectIdsToShow = [];\r\n\t\tconst {x, y, z}=this._camera.position;\r\n\t\tconst eulerAngles = this._camera.rotationQuaternion.toEulerAngles();\r\n\t\tconst yawRadians =-eulerAngles.y, pitchRadians=eulerAngles.x;\r\n\t\tconsole.log(yawRadians);\r\n\t\tconsole.log(pitchRadians);\r\n\t\tfor(var babylonModel of this._babylonModels){\r\n\t\t\tconst objectIdsToShow = babylonModel.quadrants.getObjectIds({yawRadians, pitchRadians, x, y, z});\r\n\t\t\tconsole.log(objectIdsToShow);\r\n\t\t\tbabylonModel.setVisibleObjects(objectIdsToShow);\r\n\t\t}\r\n\t}\r\n _setPositionRotationAndScaling(root, position, rotation, scaling) {\r\n root.position = new BABYLON.Vector3(position.x, position.y, position.z);\r\n root.rotation = new BABYLON.Vector3(rotation.x, rotation.y, rotation.z); \r\n root.scaling = new BABYLON.Vector3(scaling.x, scaling.y, scaling.z);\r\n }\r\n _scheduleApplyTextureToMesh(mesh, babylonMesh, materialsManager) {\r\n materialsManager.getBabylonMaterialByName(mesh.material).then((babylonMaterial) => {\r\n babylonMesh.material = babylonMaterial;\r\n }).catch(console.error);\r\n }\r\n _rendeLoop() {\r\n this._scene.render();\r\n }\r\n _onWindowResize = event => {\r\n this._engine.resize();\r\n };\r\n\tdispose(){\r\n window.removeEventListener(\"resize\", this._onWindowResize, false);\r\n\t}\r\n}\r\nexport default BabylonScene;","import React, { Component } from 'react';\r\nimport './SitePlan3D.css';\r\nimport ModelRefs from '../modelling/ModelRefs';\r\nimport SitePlan3DViewModel from '../view_models/SitePlan3DViewModel';\r\nimport SitePlan3DView from '../views/3d/SitePlan3DView';\r\nimport Slider from './Slider';\r\nimport IconButton from './IconButton';\r\nimport HashSource from '../core/HashSource';\r\nimport BabylonModelsManager from '../modelling/BabylonModelsManager';\r\nimport Models from '../modelling/Models';\r\nimport BabylonScene from '../modelling/BabylonScene';\r\nimport GroupedCallbacks from '../core/GroupedCallbacks';\r\nimport Urls from '../urls/Urls';\r\nimport Dialog from './Dialog';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst { throwNotProvided } = ParameterErrors;\r\n\r\nexport default class SitePlan3D extends Component {\r\n\t\r\n constructor(props) {\r\n super(props);\r\n\t\tconst {hide, getInsertedMenuItemsHandler, getInsertedMenuItemsAtEndHandler, getConfiguration}=props;\r\n\t\tthis._getConfiguration= getConfiguration;\r\n\t\tthis.hide = hide;\r\n\t\tthis._getInsertedMenuItemsHandler = getInsertedMenuItemsHandler;\r\n this.load = this.load.bind(this);\r\n this.setVisible = this.setVisible.bind(this);\r\n this._load = this._load.bind(this);\r\n this._displayErrorDialog = this._displayErrorDialog.bind(this);\r\n this._retryLoad = this._retryLoad.bind(this);\r\n this._retryLoadWithLowerResolution = this._retryLoadWithLowerResolution.bind(this);\r\n this._elementRef = React.createRef();\r\n this.state = {visible:false};\r\n\t\tthis._groupedCallbacksLoad = null;\r\n\t\tthis._currentDialog = null;\r\n\t\tthis._insertedMenuItemsRemoveHandle = null;\r\n }\r\n\tload(siteJson){\r\n\t\tthis._siteJson = siteJson;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(!this._groupedCallbacksLoad){\r\n\t\t\t\tthis._groupedCallbacksLoad = new GroupedCallbacks();\r\n\t\t\t\tsetTimeout(this._load,0);\r\n\t\t\t}\r\n\t\t\tthis._groupedCallbacksLoad.then(resolve);\r\n\t\t\tthis._groupedCallbacksLoad.catch(reject);\r\n\t\t});\r\n\t}\r\n\t_load(){\r\n\t\tconst sitePlan3DViewModel = new SitePlan3DViewModel({siteJson:this._siteJson, configuration:this._getConfiguration()});\r\n\t\tlet rootView;\r\n\t\tconst babylonScene = new BabylonScene({onReadyToAddSceneComponents:()=>{\r\n\t\t\trootView.initialize()\r\n\t\t\t.then(this._groupedCallbacksLoad.doThen)\r\n\t\t\t.catch((err)=>{\r\n\t\t\t\tconsole.error(err);\r\n\t\t\t\tthis._groupedCallbacksLoad.doCatch(err);\r\n\t\t\t\tthis._groupedCallbacksLoad= null;\r\n\t\t\t\tthis._displayErrorDialog();\r\n\t\t\t});\r\n\t\t}});\r\n\t\tconst babylonModelsManager = new BabylonModelsManager({modelRefs:this._modelRefs, models:this._siteJson.models,\r\n\t\t\tbabylonScene, modelsRootUrl:Urls.getAssetsForSite(this._getConfiguration().siteSlug) });\r\n\t\trootView = new SitePlan3DView({model:sitePlan3DViewModel, element:this._elementRef.current, babylonScene:babylonScene, babylonModelsManager:babylonModelsManager});\r\n\t}\r\n\t_displayErrorDialog({retry, retryWithLowerResolution}){\r\n\t\tthis._currentDialog = Dialog.create({\r\n\t\t\ttitle:'Error', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'Failed to load :(',\r\n\t\t\toptions:[\r\n\t\t\t\t{text:'Retry', callback:this._retryLoad}, \r\n\t\t\t\t{text:'Retry with lower resolution', callback:this._retryLoadWithLowerResolution},\r\n\t\t\t\t{text:'Cancel', callback:this.hide}\r\n\t\t\t]}\r\n\t\t);\r\n\t}\r\n\t_retryLoad(){\r\n\t\tthis._load();\r\n\t}\r\n\t_retryLoadWithLowerResolution(){\r\n\t\tthis._load();\r\n\t}\r\n\tsetVisible(value){\r\n\t\tthis._insertedMenuItemsRemoveHandle?.dispose();\r\n\t\tthis._insertedMenuItemsRemoveHandle = null;\r\n\t\tif(value){\r\n\t\t\tthis._insertedMenuItemsRemoveHandle = this._getInsertedMenuItemsHandler().registerMenuItems([\r\n\t\t\t\t\t()\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t}\r\n\t\tthis.setState({visible:value});\r\n\t}\r\n render() {\r\n\t\tconst className = 'site-plan-3d '+(this.state.visible?'visible':'');\r\n return (\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Hotspot.css';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class Hotspot{\r\n\tconstructor(props){\r\n\t\tconst self = this;\r\n\t\tconst {scene360Hotspot, scene360, marzipanoScene, getIconUrlFromRelativePath, onClick}=props;\r\n\t\tthis._scene360Hotspot = scene360Hotspot;\r\n\t\tthis._scene360 = scene360;\r\n\t\tthis._callbackClick = onClick;\r\n\t\tthis._iconUrl = getIconUrlFromRelativePath(scene360Hotspot.iconRelativePath);\r\n\t\tthis._eulerAngles = scene360Hotspot.eulerAngles;\r\n\t\tthis._pointingAtEulerAngles = scene360Hotspot.pointingAtEulerAngles;\r\n\t\tconst rotateToCompensate = scene360Hotspot.rotateToCompensate;\r\n\t\tif(rotateToCompensate&&(!this._pointingAtEulerAngles))\r\n\t\t\tthrowNotProvided('pointingAtEulerAngles');\r\n\t\tconst rotation = this._eulerAngles.rollRadians;\r\n\t\tthis._handleClick= this._handleClick.bind(this);\r\n\t\tthis._setTransform= this._setTransform.bind(this);\r\n\t\tthis._handleClick = this._handleClick.bind(this);\r\n\t\tthis._calculateCompensatedRotation= this._calculateCompensatedRotation.bind(this);\r\n\t\tthis._setToRotate= this._setToRotate.bind(this);\r\n\t\tconst element = document.createElement('div');\r\n\t\telement.classList.add(\"hotspot\");\r\n\t\tif(scene360Hotspot.className)\r\n\t\t\telement.classList.add(scene360Hotspot.className);\r\n\t\t\r\n\t\tconst iconElement = document.createElement('img');\r\n\t\ticonElement.classList.add(\"icon\");\r\n\t\ticonElement.classList.add(\"hotspot-icon\");\r\n\t\ticonElement.addEventListener('click', this._handleClick);\r\n\t\ticonElement.src = this._iconUrl;\r\n\t\tthis._iconElement = iconElement;\r\n\t\t\r\n\t\tconst tooltipElement = document.createElement('div');\r\n\t\ttooltipElement.classList.add(\"hotspot-tooltip\");\r\n\t\ttooltipElement.classList.add(\"hotspot-tooltip\");\r\n\t\t//tooltipElement.innerHTML = target;\r\n\t\t\r\n\t\telement.appendChild(iconElement);\r\n\t\telement.appendChild(tooltipElement);\r\n\t\t\r\n\t\tthis._element = element;\r\n\t\t\r\n\t\tstopEventPropagation(this._element);\r\n\t\tthis._cosPitchRadians = Math.cos(this._eulerAngles.pitchRadians);\r\n\t\tthis._hotspot = marzipanoScene.hotspotContainer().createHotspot(element, { yaw: this._eulerAngles.yawRadians, pitch:this._eulerAngles.pitchRadians});\r\n\t\tthis._setTransform(rotateToCompensate?this._calculateCompensatedRotation():this._eulerAngles.roll);\r\n\t\tif(rotateToCompensate){\r\n\t\t\tthis._setToRotate();\r\n\t\t}\r\n\t}\r\n\tget centerPosition(){\r\n\t\tconst rect = this._element.getBoundingClientRect();\r\n\t\treturn [rect.left+(this._element.offsetWidth/2), rect.top+(this._element.offsetHeight/2)];\r\n\t}\r\n\tget scene360Hotspot(){\r\n\t\treturn this._scene360Hotspot;\r\n\t}\r\n\tget scene360(){\r\n\t\treturn this._scene360;\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_setToRotate(){\r\n\t\tconst self = this;\r\n\t\tconst originalUpdate = this._hotspot._update.bind(this._hotspot);\r\n\t\tconst pointingAtEulerAngles=this._pointingAtEulerAngles;\r\n\t\tthis._hotspot._update = function(){\r\n\t\t\tconst xYMarker = this._position;\r\n\t\t\tconst xYPointingAt = this._view.coordinatesToScreen({yaw:pointingAtEulerAngles.yawRadians,\r\n\t\t\t\tpitch:pointingAtEulerAngles.pitchRadians});\t\t\t\r\n\t\t\tif(xYMarker===null)return;\r\n\t\t\tif(xYPointingAt==null||xYPointingAt.x===null||xYPointingAt.y===null)return;\r\n\t\t\tconst angleRadians = (Math.PI/2) +Math.atan2((xYPointingAt.y - xYMarker.y), (xYPointingAt.x - xYMarker.x));\r\n\t\t\tself._setTransform(angleRadians);\r\n\t\t\toriginalUpdate();\r\n\t\t};\r\n\t}\r\n\t_calculateCompensatedRotation(){\r\n\t\t//const a = Math.sin( this._eulerAngles.pitchRadians);\r\n\t\treturn this._eulerAngles.rollRadians-(this._hotspot._view._yaw);\r\n\t}\r\n\t_setTransform(rotationRadians){\r\n\t\tvar transformProperties = [ '-ms-transform', '-webkit-transform', 'transform' ];\r\n\t\tfor (var i = 0; i < transformProperties.length; i++) {\r\n\t\t\tvar property = transformProperties[i];\r\n\t\t\tthis._iconElement.style[property] = 'rotate(' + rotationRadians + 'rad)';\r\n\t\t}\r\n\t}\r\n\t_handleClick(){\r\n\t\tthis._callbackClick(this);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport Iterator from '../core/Iterator';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport Marzipano from 'marzipano';\r\nimport Hotspot from './Hotspot';\r\nimport eventEnable from '../core/eventEnable';\r\nimport './View360.css';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class View360 extends Component {\r\n\tconstructor(props){\r\n\t\tconst {getIconUrlFromRelativePath, onClickHotspot, children, mapHotspotTypeToFactory}=props;\r\n\t\tsuper(props);\r\n\t\teventEnable(this);\r\n\t\tthis._children = children;\r\n\t\tthis._mapHotspotTypeToFactory = mapHotspotTypeToFactory===undefined||mapHotspotTypeToFactory===null?{}:mapHotspotTypeToFactory;\r\n\t\tif(getIconUrlFromRelativePath===undefined||getIconUrlFromRelativePath===null)\r\n\t\t\tthrowNotProvided('getIconUrlFromRelativePath');\r\n\t\tthis._getIconUrlFromRelativePath=getIconUrlFromRelativePath;\r\n\t\tthis._callbackClickHotspot = onClickHotspot;\r\n\t\tthis._viewer360Ref = React.createRef();\r\n\t\tthis._createImageUrlSources= this._createImageUrlSources.bind(this);\r\n\t\tthis._createLayers = this._createLayers.bind(this);\r\n\t\tthis._handleSceneTransitionUpdate = this._handleSceneTransitionUpdate.bind(this);\r\n\t\tthis._createMarzipanoScene = this._createMarzipanoScene.bind(this);\r\n\t\tthis._createTileUrl = this._createTileUrl.bind(this);\r\n\t\tthis._sourceFromTile = this._sourceFromTile.bind(this);\r\n\t\tthis._createHotspots = this._createHotspots.bind(this);\r\n\t\tthis._createHotspotFromFactory= this._createHotspotFromFactory.bind(this);\r\n\t\tthis.loadScene= this.loadScene.bind(this);\r\n\t\tthis._handleSceneTransitionDone = this._handleSceneTransitionDone.bind(this);\r\n\t\tthis._handleHotspotClick= this._handleHotspotClick.bind(this);\r\n\t\tthis._hookUpdateEvent= this._hookUpdateEvent.bind(this);\r\n\t\tthis._setCameraDirectionEulerAngles = this._setCameraDirectionEulerAngles.bind(this);\r\n\t\tthis._cancelCurrentLoadScene = null;\r\n\t\tthis.state = {};\r\n\t}\r\n\t\r\n componentDidMount(){\r\n const viewerOptions = {\r\n stageType: 'webgl',\r\n controls: {\r\n mouseViewMode: 'drag' // drag|qtvr\r\n },\r\n stage: {\r\n antialias: true,\r\n preserveDrawingBuffer: true,\r\n generateMipmaps: false\r\n }\r\n }\r\n\t\tconst viewerElement = this._viewer360Ref.current;\r\n this._marzipanoViewer = new Marzipano.Viewer(viewerElement, viewerOptions);\r\n this._limiter = Marzipano.RectilinearView.limit.traditional(1024, 120*Math.PI/180, 120*Math.PI/180);\r\n\t}\r\n\t_createMarzipanoScene(scene360, cameraDirectionEulerAngles){\r\n\t\tconst imageUrlSources = this._createImageUrlSources(scene360);\r\n\t\tconst rectilinearView = new Marzipano.RectilinearView({yaw:cameraDirectionEulerAngles?cameraDirectionEulerAngles.yawRadians:undefined}, this._limiter );\r\n\t\tconst marzipanoScene = this._marzipanoViewer.createEmptyScene({view: rectilinearView});\r\n\t\tif(this._unhookCurrentUpdateEvent){\r\n\t\t\tthis._unhookCurrentUpdateEvent();\r\n\t\t\tthis._unhookCurrentUpdateEvent = null;\r\n\t\t}\r\n\t\tthis._unhookCurrentUpdateEvent = this._hookUpdateEvent(\r\n\t\t\tthis._marzipanoViewer, marzipanoScene, scene360.cameraEulerAngles);\r\n\t\tthis._createLayers(marzipanoScene, imageUrlSources, scene360.getLevels());\r\n\t\tthis._createHotspots(marzipanoScene, scene360);\r\n\t\treturn marzipanoScene;\r\n\t}\r\n\t_hookUpdateEvent(marzipanoViewer, marzipanoScene, eulerAngles){\r\n\t\tconst self = this;\r\n\t\tconst oldUpdate = marzipanoViewer._renderLoop._boundLoop;\r\n\t\tconst newLoop = function(props){\r\n\t\t\toldUpdate(props);\r\n\t\t\tconst yaw = marzipanoScene._view._yaw-((eulerAngles?eulerAngles.yawRadians:0) + 1.57079);\r\n\t\t\tself.dispatchEvent({type:'scenemoved', yaw:yaw});\r\n\t\t};\r\n\t\tmarzipanoViewer._renderLoop._boundLoop = newLoop;\r\n\t\treturn ()=>{\r\n\t\t\tmarzipanoViewer._renderLoop._boundLoop = oldUpdate;\r\n\t\t};\r\n\t}\r\n\t/*\r\n\t\t*/\r\n\t_createTileUrl(face, z, x, y){\r\n\t\treturn `${face}/${z}/${y}/${x}.jpg`;\r\n\t}\r\n\t_createImageUrlSources(scene360){\r\n\t\tconst imageUrlSources = [];\r\n\t\tscene360.layers.forEach((scene360Layers)=>{\r\n\t\t\tscene360Layers.choices.forEach((scene360LayerChoice)=>{\r\n\t\t\t\tconst imageUrlSource = new Marzipano.ImageUrlSource((tile)=>this._sourceFromTile(\r\n\t\t\t\t\ttile, scene360, scene360Layers, scene360LayerChoice\r\n\t\t\t\t));\r\n\t\t\t\timageUrlSources.push(imageUrlSource);\r\n\t\t\t});\r\n\t\t}); \r\n\t\treturn imageUrlSources;\t\t\r\n\t}\r\n\t_sourceFromTile(tile, scene360, scene360Layer, scene360LayerChoice){\r\n\t\tlet urlPrefix = `${scene360.urlPrefix}${scene360Layer.slug}/`;\r\n\t\tif(scene360LayerChoice.slug!==undefined&&scene360LayerChoice.slug!==null)\r\n\t\t\turlPrefix+=`${scene360LayerChoice.slug}/`;\r\n\t\tlet res;\r\n\t\t//if (tile.z === 0) {\r\n\t\t//\tvar mapY = 'bfrlud'.indexOf(tile.face) / 6;\r\n\t\t//\tres = { url: `${urlPrefix}preview.png`, rect: { x: 0, y: mapY, width: 1, height: 1/6 }};\r\n\t\t//}\r\n\t\t//else\r\n\t\t\tres = { url: `${urlPrefix}${this._createTileUrl(tile.face, tile.z, tile.x, tile.y)}` };\t\r\n\t\treturn res;\r\n\t}\r\n\t_createLayers(marzipanoScene, imageUrlSources, levels){\r\n const marzipanoCubeGeometry = new Marzipano.CubeGeometry(levels);\r\n\t\tfor (const imageUrlSource of imageUrlSources) {\r\n\t\t\tmarzipanoScene.createLayer({\r\n\t\t\t\tsource: imageUrlSource,\r\n\t\t\t\tgeometry: marzipanoCubeGeometry,\r\n\t\t\t\tpinFirstLevel: true\r\n\t\t\t});\r\n\t\t};\r\n\t}\r\n\t_createHotspots(marzipanoScene, scene360){\r\n\t\tconst self = this;\r\n\t\tscene360.hotspots.forEach(function(scene360Hotspot) {\r\n\t\t\tif(scene360Hotspot.enabled===false)return;\r\n\t\t\tif(scene360Hotspot.fromFactory){\r\n\t\t\t\tthis._createHotspotFromFactory({scene360Hotspot:scene360Hotspot, scene360:scene360, marzipanoScene:marzipanoScene, \r\n\t\t\t\tgetIconUrlFromRelativePath:self._getIconUrlFromRelativePath,\r\n\t\t\t\tonClick:self._handleHotspotClick});\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tnew Hotspot({scene360Hotspot:scene360Hotspot, scene360:scene360, marzipanoScene:marzipanoScene, \r\n\t\t\tgetIconUrlFromRelativePath:self._getIconUrlFromRelativePath,\r\n\t\t\t\tonClick:self._handleHotspotClick});\r\n\t\t});\r\n\t}\r\n\t_createHotspotFromFactory(scene360Hotspot){\r\n\t\tconst factoryMethod = this._mapHotspotTypeToFactory[scene360Hotspot.type];\r\n\t\treturn factoryMethod(scene360Hotspot);\r\n\t}\r\n\t_handleHotspotClick(hotspot){\r\n\t\tthis._callbackClickHotspot(hotspot);\r\n\t}\r\n\r\n\t_handleSceneTransitionDone() {\r\n\t\tif (this._marzipanoViewer.listScenes().length <= 1) return;\r\n\t\tthis._marzipanoViewer.destroyScene(this._marzipanoViewer.listScenes().shift());\r\n\t}\r\n\r\n loadScene(params){\r\n\t\tconst {scene360, cameraDirectionEulerAngles}=params;\r\n\t\tif(!scene360)throwNotProvided('scene360');\r\n\t\tconst self = this;\r\n\t\tthis._cancelCurrentLoadScene&&this._cancelCurrentLoadScene();\r\n\t\tlet cancelled = false;\r\n\t\tthis._cancelCurrentLoadScene =()=>{cancelled = true;};\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst doRejectBecauseCancelled = ()=>{\r\n\t\t\t\treject(new Error('cancelled because another scene then started loading'));\r\n\t\t\t};\r\n\t\t\tif(cancelled)return doRejectBecauseCancelled();\r\n\t\t\tthis._marzipanoViewer.updateSize();\r\n\t\t\tconst marzipanoScene = this._createMarzipanoScene(scene360, cameraDirectionEulerAngles);\r\n\t\t\tconst layers = marzipanoScene.listLayers();\r\n\t\t\tconst iteratorLayers = new Iterator(layers);\r\n\t\t\tconst next = ()=>{\r\n\t\t\t\tif(cancelled)return doRejectBecauseCancelled();\r\n\t\t\t\tif(!iteratorLayers.hasNext()){\r\n\t\t\t\t\tself._switchToScene(marzipanoScene).then(()=>{\r\n\t\t\t\t\t\tif(cancelled)return doRejectBecauseCancelled();\r\n\t\t\t\t\t\tself._marzipanoViewer.updateSize();\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}).catch(reject);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst layer = iteratorLayers.next();\r\n\t\t\t\tthis._loadLayer(layer)\r\n\t\t\t\t\t.then(next).catch(reject);\r\n\t\t\t};\r\n\t\t\tnext();\r\n\t\t});\r\n\t}\r\n\t_setCameraDirectionEulerAngles(marzipanoScene, eulerAngles){\r\n\t\t\tmarzipanoScene.setYaw(eulerAngles.yawRadians);\r\n\t}\r\n\t_switchToScene(marzipanoScene){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\ttry{\r\n\t\t\t\tmarzipanoScene.switchTo({\r\n\t\t\t\t\ttransitionDuration: 1000,\r\n\t\t\t\t\ttransitionUpdate: this._handleSceneTransitionUpdate\r\n\t\t\t\t},()=>{\r\n\t\t\t\t\tthis._handleSceneTransitionDone();\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tcatch(err){\r\n\t\t\t\treject(err);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t_handleSceneTransitionUpdate(val, newScene, oldScene) {\r\n\t\tconst layers = newScene.listLayers();\r\n\t\tlayers.forEach(function(layer, index) {\r\n\t\t\tconst newVal = (val * layers.length) + (index+1 - layers.length);\r\n\t\t\tconst opacity = Marzipano.util.clamp(newVal, 0, 1);\r\n\t\t\tlayer.mergeEffects({ opacity: opacity });\r\n\t\t});\r\n\t\tnewScene._hotspotContainer.domElement().style.opacity = val;\r\n\t\t//newScene._hotspotContainer.domElement().style.display=\"block\";\r\n\t}\r\n _loadLayer(layer){\r\n\t\tconst textureStore = layer.textureStore();\r\n\t\treturn new Promise ((resolve, reject)=>{\r\n\t\t\ttextureStore.addEventListener('textureLoad', tile => {\r\n\t\t\t\tresolve();\r\n\t\t\t});\r\n\t\t\ttextureStore.addEventListener('textureError', reject);\r\n\t\t});\r\n\t}\r\n\trender() {\r\n\t\treturn (
    \r\n\t\t\t{this._children}\r\n\t\t
    );\r\n\t}\r\n}\r\n//TODO check where viewere.destroy was and add in.\r\n","import React, { Component } from 'react';\r\nimport IconButton from './IconButton';\r\nimport GroupedCallbacks from '../core/GroupedCallbacks';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Once from '../core/Once';\r\nimport Urls from '../urls/Urls';\r\nimport ParameterError from '../errors/ParameterError';\r\nimport EfficientMoveCycle from '../ui_core/EfficientMoveCycle';\r\nimport './MiniMap.css';\r\nimport isMobile from '../core/isMobile';\r\nconst{ throwNotProvided}=ParameterError;\r\nexport default class MiniMap extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._useCurrentPositionIcon = configuration.useCurrentPositionIcon;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._mapImageRef = React.createRef();\r\n\t\tthis._currentPositionMarkerRef= React.createRef();\r\n\t\tthis.toggleShowing = this.toggleShowing.bind(this);\r\n\t\tthis.load = this.load.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis.setAtOutside360 = this.setAtOutside360.bind(this);\r\n\t\tthis._setVisible = this._setVisible.bind(this);\r\n\t\tthis._handleClickButtonClose = this._handleClickButtonClose.bind(this);\r\n\t\tthis._setCurrentPositionMarkerLeftPercent = this._setCurrentPositionMarkerLeftPercent.bind(this);\r\n\t\tthis._setCurrentPositionMarkerTopPercent = this._setCurrentPositionMarkerTopPercent.bind(this);\r\n\t\tthis._setCurrentPositionMarkerVisibile = this._setCurrentPositionMarkerVisibile.bind(this);\r\n\t\tthis.setAngleRadians = this.setAngleRadians.bind(this);\r\n\t\tthis._setupResize = this._setupResize.bind(this);\r\n\t\tthis._mapImageError = this._mapImageError.bind(this);\r\n\t\tthis._mapImageLoaded = this._mapImageLoaded.bind(this);\r\n\t\tthis._groupedCallbacksMapImageLoad = new GroupedCallbacks();\r\n\t\tthis._siteJson = null;\r\n\t\tthis._visible = false;\r\n\t\tthis._fixedAspectRatio = null;\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tconst mapImageElement = this._mapImageRef.current;\r\n\t\tconst element = this._elementRef.current;\r\n\t\tmapImageElement.addEventListener('load', this._mapImageLoaded);\r\n\t\tmapImageElement.addEventListener('error', this._mapImageError);\r\n\t\tthis._setupResize(element);\r\n\t}\r\n\t_setupResize(element){\r\n\t\tlet offsets=null, maxWidth = null;\r\n\t\tconst efficientMoveCycle = new EfficientMoveCycle({ \r\n\t\t\telement, stopPropagation:false, preventDefault:true, \r\n\t\t\tonStart:(e)=>{\r\n\t\t\t\tif(this._fixedAspectRatio==null)\r\n\t\t\t\t\tthis._fixedAspectRatio = element.offsetWidth/element.offsetHeight;\r\n\t\t\t\toffsets= [element.offsetWidth - e.x, element.offsetHeight + e.y];\r\n\t\t\t\telement.style.maxWidth = 'none';\r\n\t\t\t\tmaxWidth= element.parentNode.offsetWidth - 24;\r\n\t\t\t}, onMove:(e)=>{\r\n\t\t\t\tconst x = e.x, y=e.y;\r\n\t\t\t\tconst widthFromHeight = (offsets[1] -y )*this._fixedAspectRatio;\r\n\t\t\t\tconst heightFromWidth = (x + offsets[0])/this._fixedAspectRatio;\r\n\t\t\t\tconst l = (widthFromHeight*widthFromHeight)+ (heightFromWidth*heightFromWidth);\r\n\t\t\t\tconst aspectRatioSquared = this._fixedAspectRatio*this._fixedAspectRatio;\r\n\t\t\t\tlet height = Math.sqrt(l /(1+aspectRatioSquared));\r\n\t\t\t\tlet width = height * this._fixedAspectRatio;\r\n\t\t\t\tif(width>maxWidth){\r\n\t\t\t\t\twidth = maxWidth;\r\n\t\t\t\t\theight = width / this._fixedAspectRatio;\r\n\t\t\t\t}\r\n\t\t\t\telse{\r\n\t\t\t\t\tif(width < 100)\r\n\t\t\t\t\t\twidth = 100;\r\n\t\t\t\t\theight = width / this._fixedAspectRatio;\r\n\t\t\t\t}\r\n\t\t\t\telement.style.width = String(width)+'px';\r\n\t\t\t\telement.style.height = String(height)+'px';\r\n\t\t\t}, onEnd:()=>{} , friendlyXY:true\r\n\t\t});\r\n\t}\r\n\t\r\n\tsetAtOutside360(outside360UniqueId){\r\n\t\tconst markerPositionProportion = this._siteJson?.birdsEyeViews.getDefault().getMarkerPositionForOutside360(outside360UniqueId);\r\n\t\tif(!markerPositionProportion)return;\r\n\t\tthis._setCurrentPositionMarkerLeftPercent(markerPositionProportion.x*100);\r\n\t\tthis._setCurrentPositionMarkerTopPercent(markerPositionProportion.y*100);\r\n\t\tthis._setCurrentPositionMarkerVisibile(true);\r\n\t\t\r\n\t}\r\n\tsetAngleRadians(radians){\r\n\t\tthis._currentPositionMarkerRef.current.style.transform = `translate(-50%,-50%) rotate(${radians+Math.PI}rad)`;\r\n\t}\r\n\ttoggleShowing(){\r\n\t\tthis._setVisible(!this._visible);\r\n\t}\r\n\thide(){\r\n\t\tthis._setVisible(false);\r\n\t\t//this._setCurrentPositionMarkerVisibile(false);\r\n\t}\r\n\tshow(){\r\n\t\tthis._setVisible(true);\r\n\t\t//this._setCurrentPositionMarkerVisibile(false);\r\n\t}\r\n\tload({siteJson}){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._siteJson = siteJson;\r\n\t\t\tif(!siteJson){\r\n\t\t\t\tthrowNotProvided('siteJson');\r\n\t\t\t}\r\n\t\t\tconst imageRelativePath =Urls.getAssetsForSite(this._configuration.siteSlug)+siteJson.birdsEyeViews.getDefault().imageRelativePath;\r\n\t\t\tthis._mapImageRef.current.src = imageRelativePath;\r\n\t\t\tthis._groupedCallbacksMapImageLoad.then(()=>{\r\n\t\t\t\tthis._setVisible(true);\r\n\t\t\t\tresolve();\r\n\t\t\t});\r\n\t\t\tthis._groupedCallbacksMapImageLoad.catch(reject);\r\n\t\t});\r\n\t}\r\n\t_mapImageError(){\r\n\t\tthis._groupedCallbacksMapImageLoad.doCatch(new Error('Error loading map image'));\r\n\t}\r\n\t_mapImageLoaded(){\r\n\t\tthis._groupedCallbacksMapImageLoad.doThen();\r\n\t}\r\n\t_setVisible(visible){\r\n\t\tif(visible){\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\t}\r\n\t\telse \r\n\t\t\tthis._element.classList.remove('visible');\r\n\t\tthis._visible = visible;\r\n\t}\r\n\t_setCurrentPositionMarkerLeftPercent(leftPercent){\r\n\t\tthis._currentPositionMarkerElement.style.left=`${leftPercent}%`;\r\n\t}\r\n\t_setCurrentPositionMarkerTopPercent(topPercent){\r\n\t\tthis._currentPositionMarkerElement.style.top=`${topPercent}%`;\r\n\t}\r\n\t_setCurrentPositionMarkerVisibile(visible){\r\n\t\tif(visible)\r\n\t\t\tthis._currentPositionMarkerElement.classList.add('visible');\r\n\t\telse \r\n\t\t\tthis._currentPositionMarkerElement.classList.remove('visible');\r\n\t}\r\n\tget _element(){\r\n\t\treturn this._elementRef.current;\r\n\t}\r\n\tget _currentPositionMarkerElement(){\r\n\t\treturn this._currentPositionMarkerRef.current;\r\n\t}\r\n\t_handleClickButtonClose(){\r\n\t\tthis.hide();\r\n\t}\r\n\trender() {\r\n\t\tconst currentPosition = this._useCurrentPositionIcon\r\n\t\t\t?(
    \r\n\t\t\t\t\r\n\t\t\t
    )\r\n\t\t\t:(\r\n\t\t\t\tthis._configuration.miniMapConeMarkerEnabled\r\n\t\t\t\t?\r\n\t\t\t\t\r\n\t\t\t\t(
    \r\n\t\t\t\t\t\r\n\t\t\t\t
    )\r\n\t\t\t\t:\r\n\t\t\t\t(
    \r\n\t\t\t\t\t
    \r\n\t\t\t\t
    )\r\n\t\t\t);\r\n\t\treturn (
    \r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t{currentPosition}\r\n\t\t
    );\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport Hotspot from '../360_react/Hotspot';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class InfoHotspot extends Hotspot{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst self = this;\r\n\t\tconst {scene360Hotspot, scene360, marzipanoScene, getIconUrlFromRelativePath, onClick}=props;\r\n\t\tthis._expand = this._expand.bind(this);\r\n\t\tthis._callbackClick= this._expand;\r\n\t\tconst expandedTextElement = document.createElement('div');\r\n\t\texpandedTextElement.classList.add('expanded-text');\r\n\t\texpandedTextElement.textContent = scene360Hotspot.text;\r\n\t\tthis.element.appendChild(expandedTextElement);\r\n\t}\r\n\t_expand(){\r\n\t}\r\n\tstatic create(props){\r\n\t\treturn (props)=>new InfoHotspot(props);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Spinner.css';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst {throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class Hider extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tconst{handles, invertHandles, children}=props;\r\n\t\tthis._children = children;\r\n\t\tif(invertHandles===undefined||invertHandles===null)\r\n\t\t\tthis._invertHandles = false;\r\n\t\telse \r\n\t\t\tthis._invertHandles = invertHandles;\r\n\t\t\r\n\t\tthis._handles = handles;\r\n\t\tthis._handlesChanged = this._handlesChanged.bind(this);\r\n\t\thandles.addEventListener('change', this._handlesChanged);\r\n\t\tthis.state={visible:false};\r\n\t}\r\n\t_handlesChanged(e){\r\n\t\tconst visible = this._invertHandles?(!e.hasHandles):e.hasHandles;\r\n\t\tthis.setState({visible:visible});\r\n\t}\r\n\trender() {\r\n\t\tlet className =\"hider\";\r\n\t\tif(this.state.visible)\r\n\t\t\tclassName+=\" visible\";\r\n\t\treturn (
    \r\n\t\t\t{this._children}\r\n\t\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport Marzipano from 'marzipano';\r\nimport View360 from '../360_react/View360';\r\nimport MiniMap from './MiniMap';\r\nimport './SitePlan360.css';\r\nimport { faCaretRight, faCaretLeft, faCaretUp, faCaretDown} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport HashSource from '../core/HashSource';\r\nimport GroupedCallbacks from '../core/GroupedCallbacks';\r\nimport HotspotType from '../enums/HotspotType';\r\nimport InfoHotspot from '../hotspots/InfoHotspot';\r\nimport Handles from '../core/Handles';\r\nimport Spinner from './Spinner';\r\nimport Hider from './Hider';\r\nimport Urls from '../urls/Urls';\r\nimport EulerAngles from '../geometry/EulerAngles';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nconst{throwNotProvided}=ParameterErrors;\r\nconst TWO_PI = Math.PI*2;\r\nexport default class SitePlan360 extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {getInsertedMenuItemsHandler, getInsertedMenuItemsAtEndHandler, onBack, goToConfigurator, \r\n\t\t\tshowPlotMenu, showPlotDetailedInformation, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tif(!getInsertedMenuItemsHandler)throwNotProvided('getInsertedMenuItemsHandler');\r\n\t\tif(!getInsertedMenuItemsAtEndHandler)throwNotProvided('getInsertedMenuItemsAtEndHandler');\r\n\t\tthis._showPlotMenu = showPlotMenu;\r\n\t\tthis._showPlotDetailedInformation = showPlotDetailedInformation;\r\n\t\tthis._view360Ref = React.createRef();\r\n\t\tthis._miniMapRef= React.createRef();\r\n\t\t//this._iframeRef = React.createRef();\r\n\t\tthis.state = {visible:true};\r\n\t\tthis._handleClickBack= this._handleClickBack.bind(this);\r\n\t\tthis._normalizeRadians= this._normalizeRadians.bind(this);\r\n\t\tthis._callbackBack = onBack;\r\n\t\tthis._callbackGoToConfigurator = goToConfigurator;\r\n\t\tthis._getIconUrlFromRelativePath = this._getIconUrlFromRelativePath.bind(this);\r\n\t\tthis._handleClickHotspot= this._handleClickHotspot.bind(this);\r\n\t\tthis._handleToggleMinimap= this._handleToggleMinimap.bind(this);\r\n\t\tthis.setVisible= this.setVisible.bind(this);\r\n\t\tthis._getCameraDirectionEulerAngles = this._getCameraDirectionEulerAngles.bind(this);\r\n\t\tthis.whenLoaded = this.whenLoaded.bind(this);\r\n\t\tthis._sceneMoved = this._sceneMoved.bind(this);\r\n\t\tthis._spinnerHandles = new Handles();\r\n\t\tthis._create_SwitchToOutside360_LexicalClosure = this._create_SwitchToOutside360_LexicalClosure.bind(this);\r\n\t\tthis._getInsertedMenuItemsHandler = getInsertedMenuItemsHandler;\r\n\t\tthis._getInsertedMenuItemsAtEndHandler = getInsertedMenuItemsAtEndHandler;\r\n\t\tthis._groupedCallbacksLoaded = new GroupedCallbacks();\r\n\t\tthis._insertedMenuItemsRemoveHandle = null;\r\n\t\tthis._insertedMenuItemsAtEndRemoveHandle = null;\r\n\t\tthis._mapHotspotTypeToFactory={[HotspotType.INFO]:InfoHotspot.create};\r\n\t}\r\n\tload(siteJson){\r\n\t\tthis._siteJson = siteJson;\r\n\t\tthis._loaded = false;\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._view360Ref.current.loadScene({scene360:siteJson.outside360.getDefaultScene()}).catch(reject).then(()=>{\r\n\t\t\t\tthis._switchToOutside360 = this._create_SwitchToOutside360_LexicalClosure(siteJson).bind(this);\r\n\t\t\t\tthis._miniMapRef.current.load({\r\n\t\t\t\t\tsiteJson:siteJson\r\n\t\t\t\t})\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tthis._loaded=true;\r\n\t\t\t\t\tthis._groupedCallbacksLoaded.doThen();\r\n\t\t\t\t}).catch((err)=>{\r\n\t\t\t\t\tthis._groupedCallbacksLoaded.doCatch(err);\r\n\t\t\t\t\treject(err);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\twhenLoaded(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(this._loaded)\r\n\t\t\t{\r\n\t\t\t\tresolve();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._groupedCallbacksLoaded.then(resolve).catch(reject);\r\n\t\t});\r\n\t}\r\n\tswitchToOutside360(outside360UniqueId, cameraDirectionEulerAngles){\r\n\t\tconst spinnerHandle = this._spinnerHandles.take();\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst doReject = (err)=>{\r\n\t\t\t\tconsole.error(err);\t\r\n\t\t\t\tspinnerHandle.dispose();\r\n\t\t\t\treject(err);\r\n\t\t\t};\r\n\t\t\tthis.whenLoaded().then(()=>{\r\n\t\t\t\tconst doResolve=()=>{\r\n\t\t\t\t\tspinnerHandle.dispose();\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t};\r\n\t\t\t\tif(!this._switchToOutside360){\r\n\t\t\t\t\tdoReject(new Error('no scene loaded'));\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis._switchToOutside360(outside360UniqueId, cameraDirectionEulerAngles)\r\n\t\t\t\t\t.then(doResolve).catch(doReject);\r\n\t\t\t}).catch(doReject);\r\n\t\t});\r\n\t}\r\n\t_create_SwitchToOutside360_LexicalClosure(siteJson){\r\n\t\tconst scenes = siteJson.outside360.getScene360s();\r\n\t\treturn (outside360ToMoveToUniqueId, cameraDirectionEulerAngles)=>{\r\n\t\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\t\tconst scene = scenes.filter(scene=>{\r\n\t\t\t\t\t\treturn scene.uniqueId===outside360ToMoveToUniqueId\r\n\t\t\t\t})[0];\r\n\t\t\t\tif(scene===undefined||scene===null)\r\n\t\t\t\t\tthrow new Error(`No scene for outside360ToMoveToUniqueId ${outside360ToMoveToUniqueId}`);\r\n\t\t\t\tif(!cameraDirectionEulerAngles)\r\n\t\t\t\t\tcameraDirectionEulerAngles = this._getCameraDirectionEulerAngles(scene, this._previousScene);\t\r\n\t\t\t\tthis._previousScene=scene;\r\n\t\t\t\tthis._miniMapRef.current.setAtOutside360(outside360ToMoveToUniqueId);\r\n\t\t\t\tthis._view360Ref.current.loadScene({\r\n\t\t\t\t\tscene360:scene, \r\n\t\t\t\t\tcameraDirectionEulerAngles:cameraDirectionEulerAngles\r\n\t\t\t\t})\r\n\t\t\t\t.then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t});\r\n\t\t};\r\n\t}\r\n\t_getCameraDirectionEulerAngles(scene360, previousScene360){\r\n\t\tconst otherScenesNotCountingOneCameFrom = [];\r\n\t\tconst hotspotsForScene = scene360.hotspots;\r\n\t\tlet yawRadianss = [];\r\n\t\tlet hadNoOutside360MoveHotspots=true;\r\n\t\tlet previousHotspot = null;\r\n\t\tif(!previousScene360)return null;\r\n\t\tfor(var i=0; i{\r\n\t\t\t\tconst normalized = this._normalizeRadians(y);\r\n\t\t\t\tconsole.log(normalized);\r\n\t\t\t\tyawRadians+=normalized;\r\n\t\t\t});\r\n\t\t\tyawRadians = yawRadians/yawRadianss.length;\r\n\t\t}\r\n\t\tif(previousHotspot&&yawRadianss.length>1){\r\n\t\t\tlet directionOfTravel = this._normalizeRadians(Math.PI+previousHotspot.eulerAngles.yawRadians);\r\n\t\t\tlet differenceInDirectionOfTravelAndYawRadians = yawRadians- directionOfTravel;\r\n\t\t\tdifferenceInDirectionOfTravelAndYawRadians = Math.sign(differenceInDirectionOfTravelAndYawRadians)*differenceInDirectionOfTravelAndYawRadians;\r\n\t\t\tif(differenceInDirectionOfTravelAndYawRadians>Math.PI/2)\r\n\t\t\t\tyawRadians = yawRadians+Math.PI;\r\n\t\t}\r\n\t\treturn new EulerAngles({yawRadians:yawRadians, pitchRadians:0, rollRadians:0});\r\n\t}\r\n\t_normalizeRadians(value){\r\n\t\t\tvalue = value%TWO_PI;\r\n\t\t\twhile(value<0)value+=TWO_PI;\r\n\t\t\treturn value;\r\n\t}\r\n\tsetVisible(value){\r\n\t\t//this._iframeRef.current.src='about:blank';\r\n\t\t//setTimeout(()=>{\r\n\t\t//this._iframeRef.current.src=\"http://futurium.tech/Clients/vX922Pvm/VistryGroup/FletcherRise360/ExternalV3/\" ;\r\n\t\t//}, 0);\r\n\t\tthis._insertedMenuItemsRemoveHandle?.dispose();\r\n\t\tthis._insertedMenuItemsRemoveHandle = null;\r\n\t\tthis._insertedMenuItemsAtEndRemoveHandle?.dispose();\r\n\t\tthis._insertedMenuItemsAtEndRemoveHandle=null;\r\n\t\tif(value){\r\n\t\t\tthis._insertedMenuItemsRemoveHandle = this._getInsertedMenuItemsHandler().registerMenuItems([\r\n\t\t\t\t\t()\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t\tthis._insertedMenuItemsAtEndRemoveHandle = this._getInsertedMenuItemsAtEndHandler().registerMenuItems([\r\n\t\t\t\t\t()\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t}\r\n\t\tthis.setState({visible:value});\r\n\t}\r\n componentDidMount(){\r\n this._view360Ref.current.addEventListener('scenemoved', this._sceneMoved);\r\n\t}\r\n\t_sceneMoved(e){\r\n\t\tthis._miniMapRef.current.setAngleRadians(e.yaw);\r\n\t}\r\n\t_handleClickBack(){\r\n\t\tthis._callbackBack();\r\n\t}\r\n\t_handleToggleMinimap(){\r\n\t\tconst minimap = this._miniMapRef.current;\r\n\t\tminimap.toggleShowing();\r\n\t}\r\n\t_getIconUrlFromRelativePath(iconRelativePath){\r\n\t\treturn Urls.assets+iconRelativePath;\r\n\t}\r\n\t_handleClickHotspot(hotspot){\r\n\t\tconst {scene360Hotspot}=hotspot;\r\n\t\tswitch(scene360Hotspot.type){\r\n\t\t\tcase HotspotType.OUTSIDE_360_MOVE:\r\n\t\t\t\tthis._switchToOutside360(scene360Hotspot.outside360ToMoveToUniqueId).then(()=>{}).catch(console.error);\r\n\t\t\t\tbreak;\r\n\t\t\tcase HotspotType.OUTSIDE_360_CONFIGURATOR:\r\n\t\t\t\tconst configuration = this._configuration;\r\n\t\t\t\tif(configuration.showPanelOnClickOutside360ConfiguratorIcon){\r\n\t\t\t\t\tconst siteJsonUnitPlot = this._siteJson.getPlotByNumber(scene360Hotspot.plotNumber)\r\n\t\t\t\t\tif(configuration.onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo){\r\n\t\t\t\t\t\tthis._showPlotDetailedInformation(siteJsonUnitPlot);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._showPlotMenu(siteJsonUnitPlot, false, hotspot.centerPosition);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis._callbackGoToConfigurator(scene360Hotspot.plotNumber);\r\n\t\t\t\treturn;;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error('Not implemented for type '+scene360Hotspot.type);\r\n\t\t\t\t\r\n\t\t}\r\n\t}\t\t\r\n\t//\r\n\t\t\r\n\trender() {\r\n\t\tconst className = 'site-plan-360 '+(this.state.visible?'visible':'');\r\n\t\tconst hiderClassName='hider'+(this.state.hideBehindSpinner?' visible':'');\r\n\treturn (
    \r\n\t\t\r\n\t\t\t\r\n\t\t\r\n\t\t\r\n\t\t\t\t\r\n\t\t\t
    );\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Configurator.css';\r\nimport Urls from '../urls/Urls';\r\nimport IconButton from './IconButton';\r\nimport HashSource from '../core/HashSource';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class Configurator extends Component{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst{hide, getInsertedMenuItemsHandler, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tif(!getInsertedMenuItemsHandler)throwNotProvided('getInsertedMenuItemsHandler');\r\n\t\tthis._callbackHide = hide;\r\n\t\tthis.showConfiguratorForPlot = this.showConfiguratorForPlot.bind(this);\r\n\t\tthis.closeCurrentConfigurator = this.closeCurrentConfigurator.bind(this);\r\n\t\tthis._handleClickButtonBack = this._handleClickButtonBack.bind(this);\r\n\t\tthis._iframeLoaded= this._iframeLoaded.bind(this);\t\r\n\t\tthis._nextIframeKey = this._nextIframeKey.bind(this);\r\n\t\tthis._getInsertedMenuItemsHandler = getInsertedMenuItemsHandler;\r\n\t\tthis.state = {iframes:null, visible:false};\r\n\t\tthis._iframeCount =0;\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\t\r\n\t}\r\n\tsetVisible(value){\r\n\t\tthis._insertedMenuItemsRemoveHandle?.dispose();\r\n\t\tthis._insertedMenuItemsRemoveHandle = null;\r\n\t\tif(value){\r\n\t\t\tthis._insertedMenuItemsRemoveHandle = this._getInsertedMenuItemsHandler().registerMenuItems([\r\n\t\t\t\t\t()\r\n\t\t\t\t]\r\n\t\t\t);\r\n\t\t}\r\n\t\tthis.setState({visible:value});\r\n\t}\r\n\tshowConfiguratorForPlot(options){\r\n\t\tthis.closeCurrentConfigurator();\r\n\t\tconst {plot, roomName}=options\r\n\t\tconst roomStr = roomName?`#${roomName}`:'';\r\n\t\tlet url = Urls.getConfiguratorUrlForPlot(plot, this._configuration);\r\n\t\tif(roomStr&&url){\r\n\t\t\turl+=roomStr;\r\n\t\t}\r\n\t\tconst iframe = (\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t
    );\r\n\t\tthis.setState({iframes:[iframe]});\r\n\t}\r\n\t_handleClickButtonBack(){\r\n\t\tthis.closeCurrentConfigurator();\r\n\t\tthis._callbackHide();\r\n\t}\r\n\t_iframeLoaded(e){\r\n\t}\r\n\tcloseCurrentConfigurator(){\r\n\t\tthis.setState({iframes:[]});\r\n\t}\r\n\t_nextIframeKey(){\r\n\t\treturn `iframe_${(this._iframeCount++)}`;\r\n\t}\r\n\trender(){\r\n\t\tconst className=\"configurator\"+(this.state.visible?\" visible\":\"\");\r\n\t\treturn (
    {this.state.iframes}
    );\r\n\t}\r\n}\r\n","const SitePlanVisibleType={BIRDS_EYE_VIEW:'birdsEyeView', OUTSIDE_360:'outside360', CONFIGURATOR:'configurator', THREE_D:'threeD'};\r\nSitePlanVisibleType.getCssClassName = function(val){\r\n\tswitch(val){\r\n\t\tcase SitePlanVisibleType.BIRDS_EYE_VIEW:\r\n\t\t\treturn 'birds-eye-view-visible';\r\n\t\tcase SitePlanVisibleType.OUTSIDE_360:\r\n\t\t\treturn 'outside-360-visible';\r\n\t\tcase SitePlanVisibleType.CONFIGURATOR:\r\n\t\t\treturn 'configurator-visible';\r\n\t\tcase SitePlanVisibleType.THREE_D:\r\n\t\t\treturn 'three-d-visible';\r\n\t}\r\n\treturn '';\r\n}\r\nexport default SitePlanVisibleType;\t\t","import React, { Component } from 'react';\r\nimport PopupMenu from './PopupMenu';\r\nimport EdgeLocation from '../ui_core/EdgeLocation';\r\nimport Star from './Star';\r\nimport Spinner from './Spinner';\r\nimport './PlotMenu.css';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport Once from '../core/Once';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport enableBindingToOthers from '../mvvm/enableBindingToOthers';\r\nimport Handles from '../core/Handles';\r\nimport { faStreetView} from '@fortawesome/free-solid-svg-icons';\r\nimport IconButton from './IconButton';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport Urls from '../urls/Urls';\r\nimport GroupedCallbacks from '../core/GroupedCallbacks';\r\nimport PlotMoreInformationType from '../enums/PlotMoreInformationType';\r\nimport HashSource from '../core/HashSource';\r\nimport isMobile from '../core/isMobile';\r\nconst {throwNotProvided}=ParameterErrors;\r\nconst MIN_TIME_SHOW_SPINNER_MILLISECONDS=500;\r\nconst MAX_TIME_TO_LOAD_IMAGE_BEFORE_SPINNER_DELAY_REQUIRED=20; //This is so that if the image loads very fast because already cached the spinner is never seen.\r\nconst DELAY_BEFORE_SHOW_SPINNER_MILLISECONDS = 1000;\r\nexport default class PlotMenu extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t\tenableBindingToOthers(this);\r\n\t\tconst {showPlotMoreInformation, onHide, addFavourite, removeFavourite,\r\n\t\tshowStreetView, enterHouse, showBrochureGenerationDialog, showPlotDetailedInformation,\r\n\t\tshowImagesFullScreen, configuration}=props;\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._showPlotDetailedInformation = showPlotDetailedInformation;\r\n\t\tthis._showImagesFullScreen = showImagesFullScreen;\r\n\t\tthis._star = React.createRef();\r\n\t\tthis._imgRef= React.createRef();\r\n\t\tthis._lhsRef= React.createRef();\r\n\t\tthis._callbackOnHide=onHide;\r\n\t\tif(!showPlotMoreInformation)throwNotProvided('showPlotMoreInformation');\r\n\t\tthis._callbackShowPlotMoreInformation = showPlotMoreInformation;\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackShowStreetView = showStreetView;\r\n\t\tthis._callbackEnterHouse = enterHouse;\r\n\t\tthis._callbackShowBrochureGenerationDialog = showBrochureGenerationDialog;\r\n\t\tthis._popupMenu = React.createRef();\r\n\t\tthis.setFilteredPlots= this.setFilteredPlots.bind(this);\r\n\t\tthis._getFirstPlotMatchingFilteredPlots= this._getFirstPlotMatchingFilteredPlots.bind(this);\r\n\t\tthis._handleClickMoreInfo= this._handleClickMoreInfo.bind(this);\r\n\t\tthis._handleStarSelectedChanged = this._handleStarSelectedChanged.bind(this);\r\n\t\tthis._handlePlotSelectedChanged = this._handlePlotSelectedChanged.bind(this);\r\n\t\tthis._handleClickPreviousPlot = this._handleClickPreviousPlot.bind(this);\r\n\t\tthis._handleClickNextPlot = this._handleClickNextPlot.bind(this);\r\n\t\tthis._handleImageLoaded= this._handleImageLoaded.bind(this);\r\n\t\tthis._handleImageError= this._handleImageError.bind(this);\r\n\t\tthis._handlePopupMenuHide = this._handlePopupMenuHide.bind(this);\r\n\t\tthis._handleClickShowGallery= this._handleClickShowGallery.bind(this);\r\n\t\tthis._handleClickShowFloorPlan= this._handleClickShowFloorPlan.bind(this);\r\n\t\tthis._handleClickMeaningShowPlotDetailedInformation= this._handleClickMeaningShowPlotDetailedInformation.bind(this);\r\n\t\tthis._handleClickLHS= this._handleClickLHS.bind(this);\r\n\t\tthis._getImgUrl= this._getImgUrl.bind(this);\r\n\t\tthis._handleClickEnterHouse= this._handleClickEnterHouse.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._releasePlotActiveHandle= this._releasePlotActiveHandle.bind(this);\r\n\t\tthis._handleClickShowStreetView = this._handleClickShowStreetView.bind(this);\r\n\t\tthis._handleClickSendBrochure = this._handleClickSendBrochure.bind(this);\r\n\t\tthis._groupedCallbackImageLoaded = new GroupedCallbacks();\r\n\t\tthis._onceClicked = new Once(method=>method());\r\n\t\tthis._currentPlotActiveHandle = null;\r\n\t\tthis._startedShowAt = 0;\r\n\t\tthis._loadingImageHandles = new Handles();\r\n\t\tthis.state={siteJson:null, plot:null};\r\n\t}\r\n\tshow({position, getMouseInSourceBounds, siteJson, plot, unit, untilClickOff}){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(!plot)throwNotProvided('plot');\r\n\t\t\tif(plot.unit.plots.length>1){\r\n\t\t\t\tplot = this._getFirstPlotMatchingFilteredPlots(plot.unit.plots);\r\n\t\t\t}\r\n\t\t\tif(!siteJson)throwNotProvided('siteJson');\r\n\t\t\tthis._currentLoadingImageHandle?.dispose();\r\n\t\t\tthis.setState({siteJson:siteJson, plot:plot});\r\n\t\t\tthis._imgRef.current.src='';\r\n\t\t\tthis._imgRef.current.src = this._getImgUrl(plot);\r\n\t\t\tthis._plot = plot;\r\n\t\t\tthis._popupMenu.current.show({position:position, getMouseInSourceBounds:getMouseInSourceBounds, untilClickOff});\r\n\t\t\tthis._releasePlotActiveHandle();\r\n\t\t\tthis._currentPlotActiveHandle?.dispose();\r\n\t\t\tthis._currentPlotActiveHandle=plot.unit.takeActiveHandle();\r\n\t\t\tthis._startedShowAt = new Date().getTime();\r\n\t\t\tlet imgLoaded = false;\r\n\t\t\tconst whenImgLoaded = ()=>{\r\n\t\t\t\timgLoaded = true;\r\n\t\t\t\tthis._currentLoadingImageHandle?.dispose();\r\n\t\t\t};\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\t\tif(imgLoaded) return;\r\n\t\t\t\tthis._currentLoadingImageHandle?.dispose();\r\n\t\t\t\tthis._currentLoadingImageHandle = this._loadingImageHandles.take();\r\n\t\t\t}, DELAY_BEFORE_SHOW_SPINNER_MILLISECONDS);\r\n\t\t\tthis._groupedCallbackImageLoaded.then(()=>{\r\n\t\t\t\twhenImgLoaded();\r\n\t\t\t\tresolve();\r\n\t\t\t}).catch((err)=>{\r\n\t\t\t\twhenImgLoaded();\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\thide(){\r\n\t\tthis._popupMenu.current.hide();\r\n\t}\r\n\tsetFilteredPlots(value){\r\n\t\tthis._filteredPlots = value;\r\n\t}\r\n\t_getFirstPlotMatchingFilteredPlots(plots){\r\n\t\tif(!this._filteredPlots)return plots[0];\r\n\t\tconst plotsMatchingFilteredPlots = [];\r\n\t\tfor(var plot of plots){\r\n\t\t\tif(this._filteredPlots.indexOf(plot)>=0)\r\n\t\t\t\tplotsMatchingFilteredPlots.push(plot);\r\n\t\t}\r\n\t\tif(plotsMatchingFilteredPlots.length>0)\r\n\t\t{\r\n\t\t\tconst availablePlots = plotsMatchingFilteredPlots.filter(plot=>plot.status===PlotStatus.AVAILABLE);\r\n\t\t\tif(availablePlots.length>0)\r\n\t\t\t\treturn availablePlots[0];\r\n\t\t\tconst comingSoonPlots = plotsMatchingFilteredPlots.filter(plot=>plot.status===PlotStatus.COMING_SOON);\r\n\t\t\tif(comingSoonPlots.length>0)\r\n\t\t\t\treturn comingSoonPlots[0];\r\n\t\t}\r\n\t\treturn plots[0];\r\n\t}\r\n\t_getImgUrl(plot){\r\n\t\tconst relativePath = plot.unit.frontViewImage.getBestEntryToFitWidth(160).relativePath;\r\n\t\treturn `${Urls.getAssetsForSite(this._configuration.siteSlug)}${UrlHelper.removeStartSlash(relativePath)}`;\r\n\t}\r\n\t_handlePopupMenuHide(){\r\n\t\t//this.setState({plot:null});\r\n\t\tthis._currentLoadingImageHandle?.dispose();\r\n\t\tthis._callbackOnHide&&this._callbackOnHide();\r\n\t\tthis._releasePlotActiveHandle();\r\n\t}\r\n\t_handleClickMoreInfo(e){\r\n\t\tthis._stopEventPropagation(e);\r\n\t\tthis._callbackShowPlotMoreInformation(this.state.plot);\r\n\t}\r\n\t_handleStarSelectedChanged(selected){\r\n\t\tthis._stopEventPropagation();\r\n\t\tif(selected)this._callbackAddFavourite(this.state.plot);\r\n\t\telse this._callbackRemoveFavourite(this.state.plot);\r\n\t}\r\n\t_handlePlotSelectedChanged(value){\r\n\t\tif(this._star.current)\r\n\t\t\tthis._star.current.selected=value;\r\n\t}\r\n\t_handleImageLoaded(){\r\n\t\tthis._imgLoading = false;\r\n\t\tconst timeShownSpinnerForMilliseconds = new Date().getTime()-this._startedShowAt;\r\n\t\t//let timeLeftBeforeHideSpinner=0;\r\n\t\tthis._groupedCallbackImageLoaded.doThen();\r\n\t\t/*if(timeShownSpinnerForMilliseconds<=MAX_TIME_TO_LOAD_IMAGE_BEFORE_SPINNER_DELAY_REQUIRED)\r\n\t\t\ttimeLeftBeforeHideSpinner= 0;\r\n\t\telse\r\n\t\t{\t\r\n\t\t\ttimeLeftBeforeHideSpinner = MIN_TIME_SHOW_SPINNER_MILLISECONDS - timeShownSpinnerForMilliseconds;\r\n\t\t\tif(timeLeftBeforeHideSpinner<0)timeLeftBeforeHideSpinner=0;\r\n\t\t}*/\r\n\t\t/*this._currentLoadingImageHandle?.dispose();\r\n\t\tsetTimeout(()=>{\r\n\t\t}, timeLeftBeforeHideSpinner);*/\r\n\t}\r\n\t_handleImageError(e){\r\n\t\tthis._groupedCallbackImageLoaded.doCatch(e);\r\n\t}\r\n\t_handleClickShowStreetView(e){\r\n\t\tthis._stopEventPropagation(e);\r\n\t\tthis.hide();\r\n\t\tthis._callbackShowStreetView({nearPlot:this.state.plot});\r\n\t}\r\n\t_handleClickShowGallery(e){\r\n\t\tthis._onceClicked.trigger(()=>{\r\n\t\t\tthis._stopEventPropagation(e);\r\n\t\t\tthis.hide();\r\n\t\t\tthis._callbackShowPlotMoreInformation(this.state.plot, PlotMoreInformationType.GALLERY);\r\n\t\t});\r\n\t}\r\n\t_handleClickShowFloorPlan(){\r\n\t\tthis._onceClicked.trigger(()=>{\r\n\t\t\tthis.hide();\r\n\t\t\tthis._callbackShowPlotMoreInformation(this.state.plot, PlotMoreInformationType.FLOOR_PLANS);\r\n\t\t});\r\n\t}\r\n\t_handleClickEnterHouse(e){\r\n\t\tthis._stopEventPropagation(e);\r\n\t\tthis.hide();\r\n\t\tthis._callbackEnterHouse(this.state.plot);\r\n\t}\r\n\t_handleClickSendBrochure(e){\r\n\t\tthis._stopEventPropagation(e);\r\n\t\tthis.hide();\r\n\t\tthis._callbackShowBrochureGenerationDialog({plot:this._plot});\r\n\t}\r\n\t_handleClickPreviousPlot(e){\r\n\t\tthis._stopEventPropagation();\r\n\t\tconst currentPlot = this.state.plot;\r\n\t\tconst unit = currentPlot.unit;\r\n\t\tif(!unit)return;\r\n\t\tconst plots = unit.plots;\r\n\t\tlet nextIndex = plots.indexOf(currentPlot)-1;\r\n\t\tif(nextIndex<0)\r\n\t\t\tnextIndex=plots.length-1;\r\n\t\tthis._plot=plots[nextIndex];\r\n\t\tthis.setState({plot:this._plot});\r\n\t}\r\n\t_handleClickNextPlot(e){\r\n\t\tthis._stopEventPropagation();\r\n\t\tconst currentPlot = this.state.plot;\r\n\t\tconst unit = currentPlot.unit;\r\n\t\tif(!unit)return;\r\n\t\tconst plots = unit.plots;\r\n\t\tlet nextIndex = plots.indexOf(currentPlot)+1;\r\n\t\tif(nextIndex>=plots.length)\r\n\t\t\tnextIndex=0;\r\n\t\tthis._plot=plots[nextIndex];\r\n\t\tthis.setState({plot:this._plot});\r\n\t}\r\n\t_handleClickMeaningShowPlotDetailedInformation(e){\r\n\t\tthis._onceClicked.trigger(()=>{\r\n\t\t\tif(!this._configuration.showPlotDetailedInformationOnClickPlotMenu)return;\r\n\t\t\tthis._stopEventPropagation();\r\n\t\t\tthis.hide();\r\n\t\t\tthis._showPlotDetailedInformation(this._plot);\r\n\t\t});\r\n\t}\r\n\t_handleClickLHS(){\r\n\t\tconst plot = this.state.plot;\r\n\t\tlet dynamicImages = [];\r\n\t\tthis._stopEventPropagation();\r\n\t\tconst frontViewImage = plot.unit.frontViewImage;\r\n\t\tif(frontViewImage){\r\n\t\t\tdynamicImages.push(frontViewImage);\r\n\t\t}\r\n\t\tconst streetViewImage = plot.unit.streetViewImage;\r\n\t\tif(streetViewImage)\r\n\t\t\tdynamicImages.push(streetViewImage);\r\n\t\tplot.rooms.getArray().forEach((room)=>{\r\n\t\t\tdynamicImages = dynamicImages.concat(room.images);\r\n\t\t});\r\n\t\tthis._showImagesFullScreen(dynamicImages);\r\n\t}\r\n\t_stopEventPropagation(e){\r\n\t\tif(!e)e=window.event;\r\n\t\te.stopPropagation&&e.stopPropagation();\r\n\t\te.preventDefault&&e.preventDefault();\r\n\t}\r\n\t_releasePlotActiveHandle(){\r\n\t\tif(!this._currentPlotActiveHandle)return;\r\n\t\tthis._currentPlotActiveHandle.dispose();\r\n\t\tthis._currentPlotActiveHandle=null;\r\n\t}\r\n\tcomponentDidUpdate(previousProps, previousState){\r\n\t\tconst oldPlot = previousState.plot;\r\n\t\tconst newPlot = this.state.plot;\r\n\t\tthis.myBindings.reset();\r\n\t\tif(newPlot){\r\n\t\t\tPropertyBindingFactory.standard(this, newPlot, 'selected', this._handlePlotSelectedChanged);\r\n\t\t}\r\n\t}\r\n\trender(){\r\n\t\tconst hasOneOrMoreRoomImages=this.state.plot?.hasOneOrMoreRoomImages;\r\n\t\tconst nBathroomString = this._configuration.showNBathrooms?` and ${this.state.plot?.nBathrooms} Bathrooms`:'';\r\n\t\tconst buttons = [];\r\n\t\tif(this._configuration.showMoreInformation)\r\n\t\t\tbuttons.push(());\r\n\t\telse{\r\n\t\t\tconst hasConfiguratorOrTour=this.state.plot&&Urls.getConfiguratorUrlForPlot(this.state.plot, this._configuration);\r\n\t\t\tif(hasConfiguratorOrTour)\r\n\t\t\t\tbuttons.push(());\r\n\t\t\tbuttons.push(());\r\n\t\t\tif(this.state.plot?.unit.plots.length>1){\t\r\n\t\t\t\tbuttons.push(());\r\n\t\t\t\tbuttons.push(());\r\n\t\t\t}\r\n\t\t}\r\n\t\tconst showPrice = (this.state.plot)&&(!this.state.plot.isSold)&&(!this.state.plot.isReserved);\r\n\t\tlet classNameStatus = 'status ';\r\n\t\tif(this.state.plot)\r\n\t\t\tclassNameStatus+=PlotStatus.getCssName(this.state.plot.status);\r\n\t\tconst nBedrooms = this._configuration.hideNBedrooms?null:(\r\n\t\t\t
    {this.state.plot?.nBedrooms} Bedrooms {nBathroomString}
    );\r\n\t\treturn (\r\n\t
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t\r\n\t\t\t\r\n\t\t
    \r\n\t\t
    \r\n\t\t\t
    {this.state.plot?.name}
    \r\n\t\t\t
    Plot \t{this.state.plot?.number}
    \r\n\t\t\t
    {this.state.plot?PlotStatus.getDescription(this.state.plot.status):' '}
    \r\n\t\t\t
    {(!showPrice)||(this.state.plot.price<=0)?' ':this.state.plot.priceString}
    \r\n\t\t\t\t{nBedrooms}\r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{}}>\r\n\t\t\t\t\r\n\t\t\t
    \r\n\t\t
    \r\n\t
    \r\n\t\t
    \r\n\t\t\t{buttons}\r\n\t\t
    \r\n\t
    \r\n\t
    \t\r\n\t\t
    )\r\n\t}\r\n}\r\n","const BrochureType={\r\n FavouritesAllPlots:1,\r\n Favourites:2,\r\n FavouritesAllHouseTypes:3,\r\n Configurator:4\r\n};\r\nBrochureType.getString = function(brochureType){\r\n\tswitch(brochureType){\r\n\t\tcase BrochureType.FavouritesAllPlots:\r\n\t\t\treturn 'All Plots';\r\n\t\tcase BrochureType.Favourites:\r\n\t\t\treturn 'Favourites';\r\n\t\tcase BrochureType.FavouritesAllHouseTypes:\r\n\t\t\treturn 'All House Types';\r\n\t\tcase BrochureType.Configurator:\r\n\t\t\treturn 'Configurator';\r\n\t\tdefault:\r\n\t\t\tthrow new Error('Not implemented');\r\n\t}\r\n};\r\nexport default BrochureType;","import ParameterErrors from '../errors/ParameterErrors';\r\nimport enableBindingToOthers from '../mvvm/enableBindingToOthers';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport WhenFinishedModifying from '../core/WhenFinishedModifying';\r\nimport Timer from '../core/Timer';\r\nimport BrochureProgressStatus from '../enums/BrochureProgressStatus';\r\nimport BrochureType from '../enums/BrochureType';\r\nimport Tooltip from '../components/Tooltip';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class BrochuresMenuEntry{\t\r\n\tconstructor(params){\r\n\t\tconst { brochureBeingGenerated }=params;\r\n\t\tenableBindingToOthers(this);\r\n\t\tif(!brochureBeingGenerated)throwNotProvided('brochureBeingGenerated');\r\n\t\tthis._brochureBeingGenerated = brochureBeingGenerated;\r\n\t\tthis.dispose = this.dispose.bind(this);\r\n\t\tthis._update = this._update.bind(this);\r\n\t\tthis._whenFinishedModifying = new WhenFinishedModifying({delay:100, callback:this._update});\r\n\t\tthis._brochureProgressStatusChanged = this._brochureProgressStatusChanged.bind(this);\r\n\t\tthis._brochureUrlChanged = this._brochureUrlChanged.bind(this);\r\n\t\tthis._proportionProgressChanged = this._proportionProgressChanged.bind(this);\r\n\t\tthis._updateProgressBarProportion = this._updateProgressBarProportion.bind(this);\r\n\t\tthis._currentBrochureProgressStatusClass = null;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('brochures-menu-entry');\r\n\t\tthis._progressElement = document.createElement('div');\r\n\t\tthis._progressElement.classList.add('progress');\r\n\t\tthis._element.appendChild(this._progressElement);\r\n\t\tthis._innerElement = document.createElement('div');\r\n\t\tthis._innerElement.classList.add('inner');\r\n\t\tthis._element.appendChild(this._innerElement);\r\n\t\tthis._textElement = document.createElement('div');\r\n\t\tthis._textElement.classList.add('text');\r\n\t\tthis._innerElement.appendChild(this._textElement);\r\n\t\tthis._handleClick= this._handleClick.bind(this);\r\n\t\tthis._element.addEventListener('click', this._handleClick);\r\n\t\tthis._timerUpdateProgressProportion = new Timer({callback:this._updateProgressBarProportion, delay:500, nTicks:-1});\r\n\t\tthis._timerUpdateProgressProportion.start();\r\n\t\tthis._propertyBindingBrochureProgressStatus = PropertyBindingFactory.standard(\r\n\t\t\tthis, brochureBeingGenerated, 'brochureProgressStatus', this._brochureProgressStatusChanged);\r\n\t\t\t\r\n\t\tthis._propertyBindingBrochureUrl= PropertyBindingFactory.standard(\r\n\t\t\tthis, brochureBeingGenerated, 'brochureUrl', this._brochureUrlChanged);\r\n\t\t\t\r\n\t\tthis._propertyBindingProportionProgress = PropertyBindingFactory.standard(\r\n\t\t\tthis, brochureBeingGenerated, 'proportionProgress', this._proportionProgressChanged);\r\n\t}\r\n\tget brochureGenerationIdentifier(){\r\n\t\treturn this._brochureBeingGenerated.brochureGenerationIdentifier;\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_brochureProgressStatusChanged(){\r\n\t\tthis._changedStatusAtMilliseconds =new Date().getTime();\r\n\t\tthis._whenFinishedModifying.trigger();\r\n\t\tif(this._brochureBeingGenerated.brochureProgressStatus===BrochureProgressStatus.Generated)\r\n\t\t\tthis._timerUpdateProgressProportion.stop();\r\n\t}\r\n\t_brochureUrlChanged(){\r\n\t\tthis._whenFinishedModifying.trigger();\r\n\t}\r\n\t_proportionProgressChanged(){\r\n\t\tthis._whenFinishedModifying.trigger();\r\n\t}\r\n\t_update(){\r\n\t\tthis._updateBrochureProgressStatusClassOnElement();\r\n\t\tthis._updateProgressBarProportion();\r\n\t\tconst text = this._getText();\r\n\t\tthis._textElement.innerHTML = text;\r\n\t}\r\n\t_updateBrochureProgressStatusClassOnElement(){\r\n\t\tif(this._currentBrochureProgressStatusClass)\r\n\t\t\tthis._element.classList.remove(this._currentBrochureProgressStatusClass);\r\n\t\tconst className = BrochureProgressStatus.getClassName(this._brochureBeingGenerated.brochureProgressStatus);\r\n\t\tthis._currentBrochureProgressStatusClass = className;\r\n\t\tthis._element.classList.add(className);\r\n\t}\r\n\t_updateProgressBarProportion(){\r\n\t\tlet progressPercent=0;\r\n\t\tconst millisecondsSinceChangedStatus = new Date().getTime() - this._changedStatusAtMilliseconds ;\r\n\t\tconst neverGetThereProportion = 1-Math.pow(2, -millisecondsSinceChangedStatus/3000);\r\n\t\tswitch(this._brochureBeingGenerated.brochureProgressStatus){\r\n\t\t\tcase BrochureProgressStatus.Queued:\r\n\t\t\t\tprogressPercent=15+(35*neverGetThereProportion);\r\n\t\t\t\tbreak;\r\n\t\t\tcase BrochureProgressStatus.Generating:\r\n\t\t\tconst proportionProgress = this._brochureBeingGenerated.proportionProgress;\r\n\t\t\t\tprogressPercent=50+(50*neverGetThereProportion);\r\n\t\t\t\tbreak;\r\n\t\t\tcase BrochureProgressStatus.Generated:\r\n\t\t\t\tprogressPercent=100;\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error('Not implemented');\r\n\t\t}\r\n\t\tthis._progressElement.style.width=String(progressPercent)+'%';\r\n\t}\r\n\t_getText(){\r\n\t\t\r\n\t\tconst brochureType = this._brochureBeingGenerated.brochureType;\r\n\t\tlet text='';\r\n\t\tswitch(this._brochureBeingGenerated.brochureProgressStatus){\r\n\t\t\tcase BrochureProgressStatus.Queued:\r\n\t\t\t\ttext+='Queued: ';\r\n\t\t\t\tbreak;\r\n\t\t\tcase BrochureProgressStatus.Generating:\r\n\t\t\t\ttext+='Generating: ';\r\n\t\t\t\tbreak;\r\n\t\t\tcase BrochureProgressStatus.Generated:\r\n\t\t\t\ttext+='Download ';\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error('Not implemented');\r\n\t\t}\r\n\t\ttext+=BrochureType.getString(brochureType);\r\n\t\ttext+=' Brochure';\r\n\t\tconst plotNumbers = this._brochureBeingGenerated.plotNumbers;\r\n\t\tif(plotNumbers\r\n\t\t\t&&(plotNumbers.length>0)\r\n\t\t\t&&(brochureType!==BrochureType.FavouritesAllPlots)\r\n\t\t\t&&(brochureType!==BrochureType.FavouritesAllHouseTypes)\r\n\t\t\t)\r\n\t\t\ttext+='
    (Plots '+plotNumbers.join(',')+')
    ';\r\n\t\treturn text;\r\n\t}\r\n\t_handleClick(){\r\n\t\tif(this._brochureBeingGenerated.brochureProgressStatus!==BrochureProgressStatus.Generated){\r\n\t\t\tthis._showDownloadedBrochuresWillAppearHere();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\twindow.open(this._brochureBeingGenerated.brochureUrl, '_blank').focus();\r\n\t}\r\n\tdispose(){\r\n\t\tthis.bindingsHandler.dispose();\r\n\t}\r\n}","import ParameterErrors from '../errors/ParameterErrors';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport SubMenuHeaderNonReact from '../components/SubMenuHeaderNonReact';\r\nimport BrochuresManager from './BrochuresManager';\r\nimport BrochuresMenuEntry from './BrochuresMenuEntry';\r\nimport MenuType from '../enums/MenuType';\r\nimport './BrochuresMenu.css';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class BrochuresMenu{\t\r\n\tconstructor(params){\r\n\t\tconst{menuManager, getHandlesActivateButton}=params;\r\n\t\tthis._iMenuManager = menuManager;\r\n\t\tthis._getHandlesActivateButton = getHandlesActivateButton;\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._updateNoBrochuresVisibility = this._updateNoBrochuresVisibility .bind(this);\r\n\t\tthis._setNoBrochuresVisible = this._setNoBrochuresVisible.bind(this);\r\n\t\tthis._brochuresBeingGeneratedChanged = this._brochuresBeingGeneratedChanged.bind(this);\r\n\t\tthis._releaseHandleActivateIcon = this._releaseHandleActivateIcon.bind(this);\r\n\t\tthis._removeEntry = this._removeEntry.bind(this);\r\n\t\tthis._addEntryForNewBrochureBeingGenerated = this._addEntryForNewBrochureBeingGenerated.bind(this);\r\n\t\tthis._releaseHandleActivateIcon = this._releaseHandleActivateIcon.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('brochures-menu');\r\n\t\tthis._element.classList.add('menu');\r\n\t\tthis._subMenuHeader = new SubMenuHeaderNonReact({ title:\"Brochures\", menuManager:menuManager});\r\n\t\tthis._element.appendChild(this._subMenuHeader.element);\r\n\t\tthis._entriesWrapperElement = document.createElement('div');\r\n\t\tthis._entriesWrapperElement.classList.add('entries-wrapper');\r\n\t\tthis._entriesElement = document.createElement('div');\r\n\t\tthis._entriesElement.classList.add('entries');\r\n\t\tthis._element.appendChild(this._entriesWrapperElement);\r\n\t\tthis._entriesWrapperElement.appendChild(this._entriesElement);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({element:this._element, hide:this.hide});\r\n\t\tthis._mapBrochureGenerationIdentifierToEntry = new Map();\r\n\t\tthis._noBrochuresElement = document.createElement('div');\r\n\t\tthis._noBrochuresElement.classList.add('no-brochures');\r\n\t\tthis._noBrochuresElement.innerHTML = 'Downloaded brochures will appear here';\r\n\t\tthis._element.appendChild(this._noBrochuresElement);\r\n\t\tthis._noBrochuresElement.classList.add('visible');\r\n\t\tBrochuresManager.instance.addEventListener('brochuresBeingGeneratedChanged', this._brochuresBeingGeneratedChanged);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget menuType(){\r\n\t\treturn MenuType.BROCHURES;\r\n\t}\r\n\tshow(params){\r\n\t\tconst scrollToBottom = params?.scrollToBottom;\r\n\t\tthis._element.classList.add('visible');\r\n\t\tthis._iMenuManager.showMe(this);\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._releaseHandleActivateIcon();\r\n\t\tthis._handlActivateButton = this._getHandlesActivateButton(MenuType.BROCHURES).take();\r\n\t\tif(scrollToBottom){\r\n\t\t\tthis._entriesWrapperElement.scrollTop = this._entriesWrapperElement.scrollHeight;\r\n\t\t}\r\n\t}\r\n\t_releaseHandleActivateIcon(){\r\n\t\tif(!this._handlActivateButton)return;\r\n\t\tthis._handlActivateButton.dispose();\r\n\t\tthis._handlActivateButton= null;\r\n\t}\r\n\thide(){\r\n\t\tthis._releaseHandleActivateIcon()\r\n\t\tthis._element.classList.remove('visible');\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis._iMenuManager.close();\r\n\t}\r\n\t_brochuresBeingGeneratedChanged(e){\r\n\t\tconst currentBrochureGenerationIdentifiersNotSeen = Array.from(this._mapBrochureGenerationIdentifierToEntry.keys());\r\n\t\tconst brochuresBeingGenerated = e.brochuresBeingGenerated;\r\n\t\tbrochuresBeingGenerated.forEach(brochureBeingGenerated=>{\r\n\t\t\tconst index = currentBrochureGenerationIdentifiersNotSeen.indexOf(brochureBeingGenerated.brochureGenerationIdentifier);\r\n\t\t\tif(index >=0)currentBrochureGenerationIdentifiersNotSeen.splice(index, 1);\r\n\t\t\telse this._addEntryForNewBrochureBeingGenerated(brochureBeingGenerated);\r\n\t\t});\r\n\t\tcurrentBrochureGenerationIdentifiersNotSeen.forEach(brochureGenerationIdentifierNotSeen=>{\r\n\t\t\tconst entry = this._mapBrochureGenerationIdentifierToEntry.get(brochureGenerationIdentifierNotSeen);\r\n\t\t\tif(!entry)return;\r\n\t\t\tthis._removeEntry(entry);\r\n\t\t});\r\n\t}\r\n\t_removeEntry(entry){\r\n\t\tentry.dispose();\r\n\t\tthis._mapBrochureGenerationIdentifierToEntry.delete(entry.brochureGenerationIdentifier);\r\n\t\tthis._entriesElement.removeChild(entry.element);\r\n\t\tthis._updateNoBrochuresVisibility();\r\n\t}\r\n\t_addEntryForNewBrochureBeingGenerated(brochureBeingGenerated){\r\n\t\tconst brochuresMenuEntry = new BrochuresMenuEntry({brochureBeingGenerated:brochureBeingGenerated});\r\n\t\tthis._mapBrochureGenerationIdentifierToEntry.set(brochuresMenuEntry.brochureGenerationIdentifier, brochuresMenuEntry);\r\n\t\tthis._entriesElement.appendChild(brochuresMenuEntry.element);\r\n\t\tthis._updateNoBrochuresVisibility();\r\n\t}\r\n\t_updateNoBrochuresVisibility(){\r\n\t\tthis._setNoBrochuresVisible(this._mapBrochureGenerationIdentifierToEntry.size<=0);\r\n\t}\r\n\t_setNoBrochuresVisible(value){\r\n\t\tif(value)this._noBrochuresElement.classList.add('visible');\r\n\t\telse this._noBrochuresElement.classList.remove('visible');\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport PlotStatus from '../site/PlotStatus';\r\nexport default class PlotsMenuEntry {\r\n\tconstructor({siteJsonUnitPlot, callbackClicked, configuration}){\r\n\t\tthis._callbackClicked = callbackClicked;\r\n\t\tthis._siteJsonUnitPlot = siteJsonUnitPlot;\r\n\t\tthis._handleClicked= this._handleClicked.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('plots-menu-entry');\r\n\t\tthis._imageWrapperElement = document.createElement('div');\r\n\t\tthis._imageWrapperElement.classList.add(\"image-wrapper\");\r\n\t\tthis._img = document.createElement('img');\r\n\t\tthis._img.classList.add('image');\r\n\t\tthis._img.src = `${Urls.getAssetsForSite(configuration.siteSlug)}${UrlHelper.removeStartSlash(siteJsonUnitPlot.frontViewImage.getBestEntryToFitHeight(50).relativePath)}`;\r\n\t\tthis._descriptionWrapperElement = document.createElement('div');\r\n\t\tthis._descriptionWrapperElement.classList.add('description-wrapper');\r\n\t\tthis._descriptionElement = document.createElement('div');\r\n\t\tconst blockString = siteJsonUnitPlot.unit.plots.length>1?`Block ${siteJsonUnitPlot.unit.id}`:'';\r\n\t\tthis._descriptionElement.innerHTML = `${blockString} Plot ${siteJsonUnitPlot.number} ${siteJsonUnitPlot.name}`;\r\n\t\tthis._plotStatusElement = document.createElement('div');\r\n\t\tthis._plotStatusElement.classList.add('plot-status');\r\n\t\tthis._plotStatusElement.classList.add(PlotStatus.getCssName(siteJsonUnitPlot.status));\r\n\t\tthis._plotStatusElement.innerHTML = `${PlotStatus.getDescription(siteJsonUnitPlot.status)}`;\r\n\t\tthis._element.appendChild(this._imageWrapperElement);\r\n\t\tthis._imageWrapperElement.appendChild(this._img);\r\n\t\tthis._element.appendChild(this._descriptionWrapperElement);\r\n\t\tthis._descriptionWrapperElement.appendChild(this._descriptionElement);\r\n\t\tthis._descriptionWrapperElement.appendChild(this._plotStatusElement);\r\n\t\tthis._element.addEventListener('click', this._handleClicked);\r\n\t}\r\n\tget number(){\r\n\t\treturn this._siteJsonUnitPlot.number;\r\n\t}\r\n\tset filteredOut(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('filtered-out');\r\n\t\telse\r\n\t\t\tthis._element.classList.remove('filtered-out');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_handleClicked(){\r\n\t\tthis._callbackClicked(this._siteJsonUnitPlot);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport PlotsSelectionMenuEntry from './PlotsSelectionMenuEntry';\r\nimport SitePlanVisibleType from '../enums/SitePlanVisibleType';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport WindowType from '../enums/WindowType';\r\nimport ResizeWatchers from '../ui_core/ResizeWatchers';\r\nimport Urls from '../urls/Urls';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport FiltersButtons from './FiltersButtons';\r\nimport './PlotsSelectionMenu.css';\r\nexport default class PlotsSelectionMenu {\r\n\tconstructor({showPlotDetailedInformation,\r\n\t\t\tshowPlotMenuForPlot, showMenu, showStreetView,\r\n\t\t\tclearFilters, getSitePlanVisibleType,\r\n\t\t\tgetConfiguration, clickShowForSale,\r\n\t\t\tiMenuManager }){\r\n\t\tconst title = 'Plots';\r\n\t\tthis._window = new GenericWindow({tooltipMessage:title, name:title, minWidth:100, maxWidth:800, minHeight:100, maxHeight:1000,\r\n\t\t\tdefaultWidth:600, defaultHeight:600, defaultX:10, defaultY:10, minimized:true, maximized:false, minimizable:true,\r\n\t\t\tmaximizable:true, closeable:true, minimizeOnClose:true, resizable:true, dragable:true,\r\n\t\t\ttype:WindowType.PLOTS_SELECTION_MENU\r\n\t\t});\r\n\t\tthis._getConfiguration = getConfiguration;\r\n\t\tthis._showPlotDetailedInformation = showPlotDetailedInformation;\r\n\t\tthis._showPlotMenuForPlot = showPlotMenuForPlot;\r\n\t\tthis._showStreetView = showStreetView;\r\n\t\tthis._getSitePlanVisibleType= getSitePlanVisibleType;\r\n\t\tthis._element = this._window.getElement();\r\n\t\tthis._element.classList.add('plots-menu');\r\n\t\tthis._innerElement =this._window.getMainElement();\r\n\t\tthis._innerElement.classList.add('inner');\r\n\t\tthis._buttonDoneElement =document.createElement('button-done');\r\n\t\tthis._createEntries = this._createEntries.bind(this);\r\n\t\tthis._callbackClickedEntry = this._callbackClickedEntry.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis._done = this._done.bind(this);\r\n\t\tthis._addEntry = this._addEntry.bind(this);\r\n\t\tthis._removeEntry = this._removeEntry.bind(this);\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis._onResize = this._onResize.bind(this);\r\n\t\tthis._setColumnsClass = this._setColumnsClass.bind(this);\r\n\t\tthis._entries = [];\r\n\t\tthis._menuElement= document.createElement('div');\r\n\t\tthis._menuElement.classList.add('top-menu');\r\n\t\tthis._iconButtonMenu = new IconButtonNonReact({ \t\r\n\t\t\t\tclassName:\"button-menu\", \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Filter.png',\r\n\t\t\t\tonClick:showMenu\r\n\t\t});\r\n\t\tthis._menuElement.appendChild(this._iconButtonMenu.element);\r\n\t\tthis._scrollableElement = document.createElement('div');\r\n\t\tthis._scrollableElement.classList.add('scrollable');\r\n\t\tthis._innerElement.appendChild(this._menuElement);\r\n\t\tthis._innerElement.appendChild(this._scrollableElement);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({elementRef:this._element, hide:this.hide});\r\n\t\tResizeWatchers.add({element:this._element, onResized:this._onResize});\r\n\t\tthis._filtersButtonsWrapperElement = document.createElement('div');\r\n\t\tthis._filtersButtonsWrapperElement.classList.add('filter-buttons-wrapper');\r\n\t\tthis._menuElement.appendChild(this._filtersButtonsWrapperElement);\r\n\t\tconst filtersButtonsFactory = React.createFactory(FiltersButtons);\r\n\t\tReactDOM.render(filtersButtonsFactory(\r\n\t\t{ \r\n\t\t\tsingleRow:true,\r\n\t\t\tclickClear:clearFilters, clickShowForSale, \r\n\t\t\tgetConfiguration, iMenuManager\r\n\t\t}),\r\n\t\tthis._filtersButtonsWrapperElement);\r\n\t}\r\n\tshow(){\r\n\t\tthis._window.unminimize();\r\n\t\tthis._window.bringToFront();\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\thide(){\r\n\t\tthis._window.minimize();\r\n\t}\r\n\tsetFilteredPlots(filteredSiteJsonUnitPlots){\r\n\t\tconst mapPlotNumberToEntry = new Map();\r\n\t\tthis._entries.forEach(entry=>\r\n\t\t\tmapPlotNumberToEntry.set(entry.number, entry));\r\n\t\tfilteredSiteJsonUnitPlots.forEach(filteredSiteJsonUnitPlot=>\r\n\t\t{\r\n\t\t\tconst entry = mapPlotNumberToEntry.get(filteredSiteJsonUnitPlot.number);\r\n\t\t\tif(!entry)return;\r\n\t\t\tmapPlotNumberToEntry.delete(filteredSiteJsonUnitPlot.number);\r\n\t\t\tentry.filteredOut = false;\r\n\t\t});\r\n\t\tconst entriesToBeFilteredOut = Array.from(mapPlotNumberToEntry.values());\r\n\t\tentriesToBeFilteredOut.forEach(entry=>entry.filteredOut = true);\r\n\t}\r\n\t_onResize(){\r\n\t\tif(this._scrollableElement.offsetWidth<500){\r\n\t\t\tthis._setColumnsClass('one-columns');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(this._scrollableElement.offsetWidth<1000){\r\n\t\t\tthis._setColumnsClass('two-columns');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(this._scrollableElement.offsetWidth<1500){\r\n\t\t\tthis._setColumnsClass('three-columns');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._setColumnsClass('four-columns');\r\n\t}\r\n\t_callbackClickedEntry(siteJsonUnitPlot){\r\n\t\tif(this._getSitePlanVisibleType()===SitePlanVisibleType.OUTSIDE_360){\r\n\t\t\tthis._showStreetView({nearPlot:siteJsonUnitPlot});\r\n\t\t\tthis.hide();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(this._getConfiguration().onClickPlotSelectionMenuEntryShowDetailedElseSmallPlotInfo)\r\n\t\t\tthis._showPlotDetailedInformation(siteJsonUnitPlot);\r\n\t\telse\r\n\t\t\tthis._showPlotMenuForPlot(siteJsonUnitPlot, /*zoomOut*/true);\r\n\t\tthis.hide();\r\n\t}\r\n\t_setColumnsClass(className){\r\n\t\tif(this._currentColumnClassName)\r\n\t\t\tthis._element.classList.remove(this._currentColumnClassName);\r\n\t\tthis._element.classList.add(className);\r\n\t\tthis._currentColumnClassName = className;\r\n\t}\r\n\t_done(){\r\n\t\tconst selectedSiteJsonUnitPlots = this._entries.filter(entry=>entry.selected).map(entry=>entry.siteJsonUnitPlot);\r\n\t\tthis._callbackPicked(selectedSiteJsonUnitPlots);\r\n\t\tthis.hide();\r\n\t}\r\n\tinitialize({siteJson}){\r\n\t\tthis._siteJson= siteJson;\r\n\t\tthis._createEntries();\r\n\t}\r\n\t_createEntries(){\r\n\t\tconst siteJsonUnitPlots = this._siteJson.getPlotsArray();\r\n\t\tsiteJsonUnitPlots.sort(function(a, b) {\r\n\t\t\treturn a.number - b.number;\r\n\t\t});\r\n\t\tsiteJsonUnitPlots.forEach(siteJsonUnitPlot=>{\r\n\t\t\tconst entry = new PlotsSelectionMenuEntry({\r\n\t\t\t\tcallbackClicked:this._callbackClickedEntry,\r\n\t\t\t\tsiteJsonUnitPlot:siteJsonUnitPlot,\r\n\t\t\t\tconfiguration:this._getConfiguration()\r\n\t\t\t});\r\n\t\t\tthis._addEntry(entry);\r\n\t\t});\r\n\t}\r\n\t_addEntry(entry){\r\n\t\tthis._entries.push(entry);\r\n\t\tthis._scrollableElement.appendChild(entry.element);\r\n\t}\r\n\t_removeEntry(entry){\r\n\t\tthis._entries.splice(this._entries.indexOf(entry), 1);\r\n\t\tthis._scrollableElement.removeChild(entry.element);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport Once from '../core/Once';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Star from '../components/Star';\r\nexport default class HouseTypesViewerEntryStatusesEntry {\r\n\tconstructor({plotsToConsider, plotStatus}){\r\n\t\tthis._plotsToConsider = plotsToConsider;\r\n\t\tthis._plotStatus = plotStatus;\r\n\t\tthis.update = this.update.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('statuses-entry');\r\n\t\tthis._element.classList.add(PlotStatus.getCssName(plotStatus));\r\n\t\tthis._dotElement = document.createElement('div');\r\n\t\tthis._dotElement.classList.add('dot');\r\n\t\tthis._element.appendChild(this._dotElement);\r\n\t\tthis._nameElement= document.createElement('div');\r\n\t\tthis._nameElement.innerHTML = PlotStatus.getDescription(plotStatus);\r\n\t\tthis._nameElement.classList.add('name');\r\n\t\tthis._element.appendChild(this._nameElement);\r\n\t\tthis._nElement= document.createElement('div');\r\n\t\tthis._nElement.classList.add('n');\r\n\t\tthis._element.appendChild(this._nElement);\r\n\t\tthis._updateOnce = new Once(this.update);\r\n\t\tplotsToConsider.forEach(plot=>{\r\n\t\t\tPropertyBindingFactory.standard(this, plot, 'status', this._updateOnce.trigger);\r\n\t\t});\r\n\t}\r\n\tupdate(){\r\n\t\tlet n=0;\r\n\t\tthis._plotsToConsider.forEach(plot=>{\r\n\t\t\tconst status = plot.status;\r\n\t\t\tif(status!==this._plotStatus)return;\r\n\t\t\tn++;\r\n\t\t});\r\n\t\tthis._nElement.innerHTML = String(n);\r\n\t\tif(n>0)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse this._element.classList.remove('visible');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport HouseTypesViewerEntryStatusesEntry from './HouseTypesViewerEntryStatusesEntry';\r\nimport Star from '../components/Star';\r\nexport default class HouseTypesViewerEntryStatuses {\r\n\tconstructor({houseTypes}){\r\n\t\tthis._houseTypes = houseTypes;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('statuses');\r\n\t\tthis._entries = [];\r\n\t\tlet plotsToConsider =[];\r\n\t\thouseTypes.forEach(houseType=>plotsToConsider = plotsToConsider.concat(houseType.plots));\r\n\t\tPlotStatus.getValues().forEach(plotStatus=>{\r\n\t\t\tconst entry = new HouseTypesViewerEntryStatusesEntry({plotsToConsider, plotStatus});\r\n\t\t\tthis._entries.push(entry);\r\n\t\t\tthis._element.appendChild(entry.element);\r\n\t\t});\r\n\t\tthis._update();\r\n\t}\r\n\t_update(){\r\n\t\tthis._entries.forEach(entry=>entry.update());\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport HouseTypesViewerEntryStatusesEntry from './HouseTypesViewerEntryStatusesEntry';\r\nimport numberWithCommas from '../core/numberWithCommas';\r\nimport Star from '../components/Star';\r\nexport default class HouseTypesViewerEntryPriceRange {\r\n\tconstructor({houseTypes}){\r\n\t\tthis._houseTypes = houseTypes;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('price-range');\r\n\t\tthis._plotsToConsider =[];\r\n\t\thouseTypes.forEach(houseType=>this._plotsToConsider = this._plotsToConsider.concat(houseType.plots));\r\n\t\tthis._update();\r\n\t}\r\n\t_update(){\r\n\t\tlet minPrice = null, maxPrice = null;\r\n\t\tlet minPriceString, maxPriceString;\r\n\t\tthis._plotsToConsider.forEach(plotToConsider=>{\r\n\t\t\tif(plotToConsider.price===0)return;\r\n\t\t\tif(minPrice==null){\r\n\t\t\t\tminPrice = plotToConsider.price;\r\n\t\t\t\tmaxPrice = minPrice;\r\n\t\t\t\tminPriceString = plotToConsider.priceString;\r\n\t\t\t\tmaxPriceString = minPriceString;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif(plotToConsider.pricemaxPrice){\r\n\t\t\t\tmaxPrice = plotToConsider.price;\r\n\t\t\t\tmaxPriceString = plotToConsider.priceString;\r\n\t\t\t}\r\n\t\t});\r\n\t\tif(minPrice===null){\r\n\t\t\tthis._element.innerHTML = '';\r\n\t\t\tthis._element.classList.remove('visible');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._element.innerHTML = minPrice===maxPrice?minPriceString:`${minPriceString} - ${maxPriceString}`;\r\n\t\tthis._element.classList.add('visible');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport Urls from '../urls/Urls';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport HouseTypesViewerEntryStatuses from './HouseTypesViewerEntryStatuses';\r\nimport HouseTypesViewerEntryPriceRange from './HouseTypesViewerEntryPriceRange';\r\nimport Checkbox from '../components/Checkbox';\r\nimport Star from '../components/Star';\r\nexport default class HouseTypesViewerEntry {\r\n\tconstructor({houseTypes, callbackClicked, houseTypeViewModel, showImagesFullScreen,\r\n\t\tshowStreetView, enterHouse, hide, callbackAddFavourite, callbackRemoveFavourite,\r\n\t\tconfiguration}){\r\n\t\tthis._callbackHide =hide;\r\n\t\tthis._callbackClicked = callbackClicked;\r\n\t\tthis._callbackAddFavourite = callbackAddFavourite;\r\n\t\tthis._callbackRemoveFavourite = callbackRemoveFavourite;\r\n\t\tthis._showImagesFullScreen= showImagesFullScreen;\r\n\t\tthis._showStreetView = showStreetView;\r\n\t\tthis._enterHouse= enterHouse;\r\n\t\tthis._houseTypes = houseTypes;\r\n\t\tthis._houseTypeViewModel = houseTypeViewModel;\r\n\t\tthis._handleClicked= this._handleClicked.bind(this);\r\n\t\tthis._statuses = new HouseTypesViewerEntryStatuses({houseTypes});\r\n\t\tthis._priceRange = new HouseTypesViewerEntryPriceRange({houseTypes});\r\n\t\tthis._handleStarSelectedChanged = this._handleStarSelectedChanged.bind(this);\r\n\t\tthis._handleCheckboxChanged = this._handleCheckboxChanged.bind(this);\r\n\t\tthis._houseTypeViewModelSelectedChanged = this._houseTypeViewModelSelectedChanged.bind(this);\r\n\t\tthis._handleClickButtonWalkmode = this._handleClickButtonWalkmode.bind(this);\r\n\t\tthis._showFloorPlans = this._showFloorPlans.bind(this);\r\n\t\tthis._handleClickImage = this._handleClickImage.bind(this);\r\n\t\tthis._showRoomImages = this._showRoomImages.bind(this);\r\n\t\tthis._handleShowConfigurator = this._handleShowConfigurator.bind(this);\r\n\t\tthis._expandAbout = this._expandAbout.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('house-types-viewer-entry');\r\n\t\tthis._imageWrapperElement = document.createElement('div');\r\n\t\tthis._imageWrapperElement.classList.add(\"image-wrapper\");\r\n\t\tthis._img = document.createElement('img');\r\n\t\tthis._img.classList.add('image');\r\n\t\tconst firstHouseTypeWithName = houseTypes[0];\r\n\t\tconst firstPlot = firstHouseTypeWithName.plots[0];\r\n\t\tthis._firstPlot = firstPlot;\r\n\t\tconst firstUnit = firstPlot.unit;\r\n\t\tthis._img.src = `${Urls.getAssetsForSite(configuration.siteSlug)}${UrlHelper.removeStartSlash(firstUnit.frontViewImage.getBestEntryToFitHeight(50).relativePath)}`;\r\n\t\tthis._infoWrapperElement = document.createElement('div');\r\n\t\tthis._infoWrapperElement.classList.add('info-wrapper');\r\n\t\tthis._descriptionElement = document.createElement('div');\r\n\t\tthis._descriptionElement.classList.add('description');\r\n\t\tthis._descriptionTextElement = document.createElement('div');\r\n\t\tthis._descriptionTextElement.classList.add('description-text');\r\n\t\tthis._descriptionTextElement.innerHTML = `${firstHouseTypeWithName.name}`;\r\n\t\tthis._topElement = document.createElement('div');\r\n\t\tthis._topElement.classList.add('top');\r\n\t\tthis._topElement.appendChild(this._imageWrapperElement);\r\n\t\tthis._imageWrapperElement.appendChild(this._img);\r\n\t\tthis._imageWrapperElement.addEventListener('click', this._handleClickImage);\r\n\t\tthis._topElement.appendChild(this._infoWrapperElement);\r\n\t\tthis._element.appendChild(this._topElement);\r\n\t\tthis._infoWrapperElement.appendChild(this._descriptionElement);\r\n\t\tthis._descriptionElement.appendChild(this._descriptionTextElement);\r\n\t\tthis._element.addEventListener('click', this._handleClicked);\r\n\t\tthis._handleStarSelectedChanged = this._handleStarSelectedChanged.bind(this);\r\n\t\tthis._plotPriceRangeElement = document.createElement('div');\r\n\t\tthis._plotPriceRangeElement.classList.add('price-range');\r\n\t\tthis._nBedroomsElement = document.createElement('div');\r\n\t\tthis._nBedroomsElement.classList.add('n-bedrooms');\r\n\t\tconst nBathroomString = configuration.showNBathrooms?` and ${firstPlot.nBathrooms} Bathrooms`:'';\r\n\t\tthis._nBedroomsElement.innerHTML = ' - '+String(firstPlot.nBedrooms)+' Bedrooms'+nBathroomString;\r\n\t\t\r\n\t\tthis._smallButtonsElement = document.createElement('div');\r\n\t\tthis._smallButtonsElement.classList.add('small-buttons');\r\n\t\t[this._plotPriceRangeElement, this._nBedroomsElement]\r\n\t\t\t.forEach(childElement=>this._descriptionElement.appendChild(childElement));\r\n\t\t[this._statuses.element, this._smallButtonsElement]\r\n\t\t\t.forEach(childElement=>this._infoWrapperElement.appendChild(childElement));\r\n\t\t/*const starFactory = React.createFactory(Star);\r\n\t\t\r\n\t\tthis._starElement = document.createElement('div');\r\n\t\tReactDOM.render(starFactory(\r\n\t\t\t{ \r\n\t\t\t\tonSelectedChange:this._handleStarSelectedChanged, \r\n\t\t\t\tref:this._star,\r\n\t\t\t\tstopEventPropagation:true\r\n\t\t\t}),\r\n\t\t\tthis._starElement);\r\n\t\tthis._smallButtonsElement.appendChild(this._starElement);\r\n\t\t*/\r\n\t\tconst hasOneOrMoreRoomImages=firstPlot.hasOneOrMoreRoomImages;\r\n\t\tthis._iconButtonWalkmode = new IconButtonNonReact({ \t\r\n\t\t\t\tclassName:[\"button-show-street-view\", \"button-show\"], \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Walkmode.png',\r\n\t\t\t\tonClick:this._handleClickButtonWalkmode\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonWalkmode.element);\r\n\t\t\t\r\n\t\t\r\n\t\tthis._iconButtonShowGallery = new IconButtonNonReact({\r\n\t\t\t\tclassName:[\"button-show-gallery\", \"button-show\"], \r\n\t\t\t\timgUrl:hasOneOrMoreRoomImages?(Urls.assets+'icons/UI_Button_Gallery.png'):(Urls.assets+'icons/UI_Button_Gallery_Disabled.png'),\r\n\t\t\t\tonClick:hasOneOrMoreRoomImages?this._showRoomImages:()=>{}\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonShowGallery.element);\r\n\t\t\t\r\n\t\t\r\n\t\tthis._iconButtonShowFloorplan = new IconButtonNonReact({\r\n\t\t\t\tclassName:[\"button-show-floor-plan\", \"button-show\"], \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Floorplan.png',\r\n\t\t\t\tonClick:this._showFloorPlans\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonShowFloorplan.element);\r\n\t\t\r\n\t\tthis._iconButtonEnterHouse = new IconButtonNonReact({\r\n\t\t\t\tclassName:[\"button-show-floor-plan\", \"button-show\"], \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Enter_House.png',\r\n\t\t\t\tonClick:this._handleShowConfigurator\r\n\t\t\t});\r\n\t\tthis._smallButtonsElement.appendChild(this._iconButtonEnterHouse.element);\r\n\t\tthis._smallButtonsElement.appendChild(this._priceRange.element);\r\n\t\t\r\n\t\tconst checkboxFactory = React.createFactory(Checkbox);\r\n\t\tthis._checkboxElement = document.createElement('div');\r\n\t\tthis._checkbox = ReactDOM.render(checkboxFactory(\r\n\t\t\t{ \ttoggleOnClick:true, \r\n\t\t\t\tonChange:this._handleCheckboxChanged,\r\n\t\t\t\tstopEventsPropagating:true,\r\n\t\t\t\tref:React.createRef()\r\n\t\t\t}),\r\n\t\t\tthis._checkboxElement\r\n\t\t);\r\n\t\tthis._checkboxRef = this._checkbox._checkboxRef;\r\n\t\tthis._descriptionElement.appendChild(this._checkboxElement);\r\n\t\t\r\n\t\tthis._aboutElement = document.createElement('div');\r\n\t\tthis._aboutElement.classList.add('about');\r\n\t\tthis._aboutElement.innerHTML = firstPlot.about;\r\n\t\tthis._aboutElement.addEventListener('click', this._expandAbout);\r\n\t\tsetTimeout(()=>{\r\n\t\tthis._infoWrapperElement.appendChild(this._aboutElement);\r\n\t\t}, 0);\r\n\t\thouseTypeViewModel.addEventListener('selectedchanged', this._houseTypeViewModelSelectedChanged);\r\n\t\t\r\n\t}\r\n\t_expandAbout(){\r\n\t\tif(this._aboutExpanded){\r\n\t\t\tthis._aboutExpanded = false;\r\n\t\t\tthis._element.removeChild(this._aboutElement);\r\n\t\t\tthis._infoWrapperElement.appendChild(this._aboutElement);\r\n\t\t\tthis._aboutElement.classList.remove('expanded');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._aboutExpanded = true;\r\n\t\tthis._infoWrapperElement.removeChild(this._aboutElement);\r\n\t\tthis._element.appendChild(this._aboutElement);\r\n\t\tthis._aboutElement.classList.add('expanded');\r\n\t}\r\n\t_handleStarSelectedChanged(selected){\r\n\t\tthis._houseTypes.forEach(houseType=>{\r\n\t\t\thouseType.plots.forEach(plot=>{\r\n\t\t\t\tif(selected)this._callbackAddFavourite(plot);\r\n\t\t\t\telse this._callbackRemoveFavourite(plot);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\t_handleClickImage(){\r\n\t\tthis._showImagesFullScreen([this._firstPlot.frontViewImage]);\r\n\t}\r\n\t_handleClickButtonWalkmode(){\r\n\t\tthis._showStreetView({nearPlot:this._firstPlot});\r\n\t\tthis._callbackHide();\r\n\t}\r\n\t_houseTypeViewModelSelectedChanged(e){\r\n\t\tthis._checkboxRef.current.checked = e.value;\r\n\t}\r\n\t_handleCheckboxChanged(e){\r\n\t\tthis._houseTypeViewModel.selected = e.checked;\r\n\t}\r\n\t_showFloorPlans(){\r\n\t\tthis._showImagesFullScreen(this._firstPlot.floorPlanImages);\r\n\t}\r\n\t_showRoomImages(){\r\n\t\tthis._showImagesFullScreen(this._firstPlot.rooms.allImages);\r\n\t}\r\n\t_handleShowConfigurator(){\r\n\t\tthis._enterHouse(this._firstPlot);\r\n\t\tthis._callbackHide();\r\n\t}\r\n\tget number(){\r\n\t\treturn this._houseTypes[0].number;\r\n\t}\r\n\tset filteredOut(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('filtered-out');\r\n\t\telse\r\n\t\t\tthis._element.classList.remove('filtered-out');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_handleClicked(){\r\n\t\tthis._callbackClicked(this);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './HouseTypesViewer.css';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Urls from '../urls/Urls';\r\nimport WindowType from '../enums/WindowType';\r\nimport HouseTypesViewerEntry from './HouseTypesViewerEntry';\r\nimport MenuType from '../enums/MenuType';\r\nexport default class HouseTypesViewer {\r\n\tconstructor(props){\r\n\t\tconst {onSelectedOptionsChange, clearFilters, showMenu, showImagesFullScreen, showStreetView, \r\n\t\taddFavourite, removeFavourite, enterHouse, configuration} = props;\r\n\t\tthis._configuration= configuration;\r\n\t\tthis._showImagesFullScreen=showImagesFullScreen;\r\n\t\tthis._showStreetView = showStreetView;\r\n\t\tthis._updateSelected= this._updateSelected.bind(this);\r\n\t\tthis._callbackAddFavourite = addFavourite;\r\n\t\tthis._callbackRemoveFavourite = removeFavourite;\r\n\t\tthis._callbackSelectedOptionsChange=onSelectedOptionsChange;\r\n\t\tthis._enterHouse = enterHouse;\r\n\t\tthis._mapHouseTypeToEntry = new Map();\r\n\t\t\r\n\t\tconst title = \"House type\"\r\n\t\tthis._window = new GenericWindow({tooltipMessage:title, name:title, minWidth:100, maxWidth:800, minHeight:100, maxHeight:1000,\r\n\t\t\tdefaultWidth:600, defaultHeight:600, defaultX:10, defaultY:10, minimized:!\r\n\t\t\tconfiguration.showHouseTypesViewerOnOpen, \r\n\t\t\tmaximized:configuration.showHouseTypesViewerOnOpen, minimizable:true,\r\n\t\t\tmaximizable:true, closeable:true, minimizeOnClose:true, resizable:true, dragable:true,\r\n\t\t\ttype:WindowType.HOUSE_TYPE_VIEWER\r\n\t\t});\r\n\t\tthis._element = this._window.getElement();\r\n\t\tthis._element.classList.add('house-types-viewer');\r\n\t\tthis._innerElement =this._window.getMainElement();\r\n\t\tthis._innerElement.classList.add('inner');\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis._createEntries = this._createEntries.bind(this);\r\n\t\tthis._clickedEntry = this._clickedEntry.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\t\r\n\t\t\r\n\t\tthis._entries = [];\r\n\t\tthis._menuElement= document.createElement('div');\r\n\t\tthis._menuElement.classList.add('top-menu');\r\n\t\tthis._iconButtonMenu = new IconButtonNonReact({ \t\r\n\t\t\t\tclassName:\"button-menu\", \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Filter.png',\r\n\t\t\t\tonClick:showMenu\r\n\t\t});\r\n\t\tthis._menuElement.appendChild(this._iconButtonMenu.element);\r\n\t\tthis._iconButtonClearFilters = new IconButtonNonReact({ \t\r\n\t\t\t\tclassName:\"button-clear-filters\", \r\n\t\t\t\timgUrl:Urls.assets+'icons/UI_Button_Filter_Clear.png',\r\n\t\t\t\tonClick:clearFilters\r\n\t\t});\r\n\t\tthis._menuElement.appendChild(this._iconButtonClearFilters.element);\r\n\t\tthis._scrollableElement = document.createElement('div');\r\n\t\tthis._scrollableElement.classList.add('scrollable');\r\n\t\tthis._innerElement.appendChild(this._menuElement);\r\n\t\tthis._innerElement.appendChild(this._scrollableElement);\r\n\t}\r\n\tinitialize({siteJson, houseTypesViewModel}){\r\n\t\tthis._siteJson = siteJson;\r\n\t\tconst title = siteJson.allUnitsHaveMultiplePlots?\"Apartment Type\":\"House type\";\r\n\t\tthis.window.setName(title);\r\n\t\tthis.window.setTooltipMessage(title);\r\n\t\tthis._createEntries(houseTypesViewModel);\r\n\t}\r\n\t_updateSelected(){\r\n\t\tconst houseTypeListsSelected = this._getHouseTypeListsSelected();\r\n\t\tconst seenEntries =[];\r\n\t\thouseTypeListsSelected.forEach(houseTypeListSelected=>{\r\n\t\t\tconst firstHouseTypeWithName = houseTypeListSelected[0];\r\n\t\t\tconst entry = this._mapHouseTypeToEntry.get(firstHouseTypeWithName);\r\n\t\t\tseenEntries.push(entry);\r\n\t\t\tentry.houseTypeSelected = true;\r\n\t\t});\r\n\t\tconst entriesNotSeen = this._entries.filter(entry=>seenEntries.indexOf(entry)<0);\r\n\t\tentriesNotSeen.forEach(entryNotSeen=>entryNotSeen.houseTypeSelected=false);\r\n\t}\r\n\t_createEntries(houseTypesViewModel){\r\n\t\thouseTypesViewModel.entries.forEach(houseTypeViewModel=>{\r\n\t\t\tconst houseTypes =houseTypeViewModel.houseTypesWithSameName;\r\n\t\t\tlet allHouseTypePlots = [];\r\n\t\t\thouseTypes.forEach(houseType=>allHouseTypePlots = allHouseTypePlots.concat(houseType.plots));\r\n\t\t\tif(allHouseTypePlots.length<1)return;\r\n\t\t\tconst houseTypesViewerEntry = new HouseTypesViewerEntry({\r\n\t\t\t\thouseTypes,\r\n\t\t\t\tcallbackClicked:this._clickedEntry,\r\n\t\t\t\thouseTypeViewModel,\r\n\t\t\t\tshowImagesFullScreen:this._showImagesFullScreen,\r\n\t\t\t\tshowStreetView:this._showStreetView,\r\n\t\t\t\thide:this.hide,\r\n\t\t\t\tcallbackAddFavourite:this._callbackAddFavourite,\r\n\t\t\t\tcallbackRemoveFavourite:this._callbackRemoveFavourite,\r\n\t\t\t\tenterHouse:this._enterHouse,\r\n\t\t\t\tconfiguration:this._configuration\r\n\t\t\t});\r\n\t\t\tthis._entries.push(houseTypesViewerEntry);\r\n\t\t\thouseTypes.forEach(houseType=>\r\n\t\t\t\tthis._mapHouseTypeToEntry.set(houseType, houseTypesViewerEntry)\r\n\t\t\t);\r\n\t\t\tthis._scrollableElement.appendChild(houseTypesViewerEntry.element);\r\n\t\t});\r\n\t}\r\n\t_clickedEntry(entry){\r\n\t\t\r\n\t}\r\n\tshow(){\r\n\t\tthis._window.unminimize();\r\n\t\tthis._window.bringToFront();\r\n\t}\r\n\thide(){\r\n\t\tthis._window.minimize();\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}\r\n","import eventEnable from '../core/eventEnable';\r\nexport default class HouseTypeViewModel{\r\n\tconstructor(houseTypesWithSameName){\r\n\t\teventEnable(this);\r\n\t\tthis._houseTypesWithSameName= houseTypesWithSameName;\r\n\t\tthis._firstHouseType = houseTypesWithSameName[0];\r\n\t\tthis._dispatchSelectedChanged = this._dispatchSelectedChanged.bind(this);\r\n\t}\r\n\tget name(){\r\n\t\treturn this._firstHouseType.name;\r\n\t}\r\n\tget about(){\r\n\t\treturn this._firstHouseType.about;\r\n\t}\r\n\tget houseTypesWithSameName(){\r\n\t\treturn this._houseTypesWithSameName;\r\n\t}\r\n\tget imageAbsolutePath(){\r\n\t\treturn this._firstHouseType.getImageAbsolutePath();\r\n\t}\r\n\tget selected(){\r\n\t\treturn this._selected;\r\n\t}\r\n\tset selected(value){\r\n\t\tif(value===this._selected)return;\r\n\t\tthis._selected = value;\r\n\t\tthis._dispatchSelectedChanged(value);\r\n\t}\r\n\t_dispatchSelectedChanged(value){\r\n\t\tthis.dispatchEvent({type:'selectedchanged', value:value, houseTypeViewModel:this});\r\n\t}\r\n}","import HouseTypeViewModel from './HouseTypeViewModel';\r\nimport eventEnable from '../core/eventEnable';\r\nexport default class HouseTypesViewModel{\r\n\tconstructor(plotsArray){\r\n\t\teventEnable(this);\r\n\t\tthis._dispatchSelectedChanged = this._dispatchSelectedChanged.bind(this);\r\n\t\tconst houseTypesForPlots=[];\r\n\t\tplotsArray.forEach(plot=>{\r\n\t\t\tif(plot.affordable)return;\r\n\t\t\tif(houseTypesForPlots.indexOf(plot.houseType)<0)\r\n\t\t\t\thouseTypesForPlots.push(plot.houseType);\r\n\t\t});\r\n\t\t\r\n\t\tconst mapHouseTypeNameToHouseTypes = new Map();\r\n\t\thouseTypesForPlots.forEach(houseType=>{\r\n\t\t\tlet listOfHouseTypesForName = mapHouseTypeNameToHouseTypes.get(houseType.name);\r\n\t\t\tif(listOfHouseTypesForName===undefined||listOfHouseTypesForName===null){\r\n\t\t\t\tlistOfHouseTypesForName=[];\r\n\t\t\t\tmapHouseTypeNameToHouseTypes.set(houseType.name, listOfHouseTypesForName);\r\n\t\t\t}\r\n\t\t\tlistOfHouseTypesForName.push(houseType);\r\n\t\t});\r\n\t\tconst houseTypeLists = Array.from(mapHouseTypeNameToHouseTypes.values());\r\n\t\tthis._entries = houseTypeLists.map(houseTypeList=>{\r\n\t\t\tconst houseTypeViewModel = new HouseTypeViewModel(houseTypeList);\r\n\t\t\thouseTypeViewModel.addEventListener('selectedchanged', this._dispatchSelectedChanged);\r\n\t\t\treturn houseTypeViewModel;\r\n\t\t});\r\n\t}\r\n\tget entries(){\r\n\t\treturn this._entries;\r\n\t}\r\n\t_dispatchSelectedChanged(e){\r\n\t\tthis.dispatchEvent(e);\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React from 'react';\r\nimport JumpableZoomableDragable from '../components/JumpableZoomableDragable';\r\nimport Urls from '../urls/Urls';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport './FullScreenImagesViewer.css';\r\nimport IconButtonNonReact from './IconButtonNonReact';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class FullScreenImagesViewer {\r\n\tconstructor({configuration}){\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add(\"full-screen-images-viewer\");\r\n\t\tthis._jumpableZoomableDragableWrapperElement = document.createElement('div');\r\n\t\tthis._jumpableZoomableDragableWrapperElement.classList.add('jumpable-zoomable-dragable-wrapper');\r\n\t\tthis._jumpableZoomableDragableFactory= React.createFactory(JumpableZoomableDragable);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis.show= this.show.bind(this);\r\n\t\tthis._setVisible= this._setVisible.bind(this);\r\n\t\tthis._renderJumpableZoomableDragable= this._renderJumpableZoomableDragable.bind(this);\r\n\t\tthis._handleClickButtonClose= this._handleClickButtonClose.bind(this);\r\n\t\tthis._renderJumpableZoomableDragable([]);\r\n\t\tthis._iconButtonNonReactClose = new IconButtonNonReact({imgUrl:Urls.assets+'icons/UI_Button_Exit.png',\r\n\t\t\tonClick:this._handleClickButtonClose});\r\n\t\tthis._element.appendChild(this._jumpableZoomableDragableWrapperElement);\r\n\t\tthis._element.appendChild(this._iconButtonNonReactClose.element);\r\n\t}\r\n\t_handleClickButtonClose(){\r\n\t\tthis.hide();\r\n\t}\r\n\t_renderJumpableZoomableDragable(images){\r\n\t\tReactDOM.render(this._jumpableZoomableDragableFactory(\r\n\t\t\t{ \r\n\t\t\t\timages:images,\r\n\t\t\t\trootUrl:Urls.getAssetsForSite(this._configuration.siteSlug),\r\n\t\t\t\tzoomMin:1,\r\n\t\t\t\tzoomMax:4\r\n\t\t\t}),\r\n\t\t\tthis._jumpableZoomableDragableWrapperElement);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\thide(){\r\n\t\tthis._setVisible(false);\r\n\t}\r\n\tshow({images}){\r\n\t\tthis._setVisible(true);\r\n\t\tthis._renderJumpableZoomableDragable(images);\r\n\t}\r\n\t_setVisible(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse this._element.classList.remove('visible');\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nconst{throwNotProvided, throwNotOfType}=ParameterErrors;\r\nexport default class DistanceHelper {\r\n static calculateKmFromLatLng(latLng1, latLng2) {\r\n\t\tDistanceHelper._validateLatLng(latLng1, 'latLng1');\r\n\t\tDistanceHelper._validateLatLng(latLng2, 'latLng2');\r\n\t\tconst [lat1, lon1]= latLng1;\r\n\t\tconst [lat2, lon2]= latLng2;\r\n\t\tconst R = 6371e3; // metres\r\n\t\tconst φ1 = lat1 * Math.PI/180; // φ, λ in radians\r\n\t\tconst φ2 = lat2 * Math.PI/180;\r\n\t\tconst Δφ = (lat2-lat1) * Math.PI/180;\r\n\t\tconst Δλ = (lon2-lon1) * Math.PI/180;\r\n\t\tconst a = Math.sin(Δφ/2) * Math.sin(Δφ/2) +\r\n\t\t\t\t Math.cos(φ1) * Math.cos(φ2) *\r\n\t\t\t\t Math.sin(Δλ/2) * Math.sin(Δλ/2);\r\n\t\tconst c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));\r\n\t\tconst d = R * c/1000;\r\n\t\treturn d;\r\n }\r\n\tstatic _validateLatLng(latLng, parameterName){\r\n\t\tif(latLng===undefined||latLng===null)\r\n\t\t\tthrowNotProvided(parameterName);\r\n\t\tif(!Array.isArray(latLng)||(latLng.length!==2))\r\n\t\t\tthrowNotOfType(parameterName, '[number, number]');\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport DistanceHelper from '../geometry/DistanceHelper';\r\nimport Urls from '../urls/Urls';\r\nimport './NearbySites.css';\r\nexport default class NearbySite{\r\n\tconstructor({siteJson, thisSiteJson}){\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('nearby-site');\r\n\t\tthis._imageWrapperElement = document.createElement('div');\r\n\t\tthis._imageWrapperElement.classList.add('image-wrapper');\r\n\t\tthis._imgElement = document.createElement('img');\r\n\t\tthis._textElement = document.createElement('div');\r\n\t\tthis._textElement.classList.add('text');\r\n\t\tthis._distanceElement = document.createElement('div');\r\n\t\tthis._distanceElement.classList.add('distance');\r\n\t\tthis._element.appendChild(this._imageWrapperElement);\r\n\t\tthis._imageWrapperElement.appendChild(this._imgElement);\r\n\t\tconst configuration = siteJson.configuration;\r\n\t\tthis._imgElement.src = Urls.getAssetsForSite(configuration.siteSlug)\r\n\t\t\t+'/'+siteJson.birdsEyeViews.getDefault().imageRelativePath;\r\n\t\tthis._element.appendChild(this._textElement);\r\n\t\tthis._textElement.innerHTML=configuration.siteName;\r\n\t\tthis._distanceElement.innerHTML = ' ('+String(Math.round(DistanceHelper.calculateKmFromLatLng(siteJson.latLng, \r\n\t\t\t\tthisSiteJson.latLng)))+'km)';\r\n\t\tthis._textElement.appendChild(this._distanceElement);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport NearbySite from './NearbySite';\r\nimport './NearbySites.css';\r\nexport default class NearbySites{\r\n\tconstructor(props){\r\n\t\tconst {}=props;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('nearby-sites');\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide= this.hide.bind(this);\r\n\t\tthis._setVisible= this._setVisible.bind(this);\r\n\t\tthis._clickedOffManager = new ClickedOffManager({element:this._element, hide:this.hide});\r\n\t}\r\n\tinitialize({siteJsons, thisSiteJson}){\r\n\t\tsiteJsons.entries.forEach(siteJson=>{\r\n\t\t\tif(siteJson===thisSiteJson)return;\r\n\t\t\tconst nearbySite = new NearbySite({siteJson, thisSiteJson});\r\n\t\t\tthis._element.appendChild(nearbySite.element);\r\n\t\t});\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tshow(){\r\n\t\tthis._clickedOffManager.register();\r\n\t\tthis._setVisible(true);\r\n\t}\r\n\t_setVisible(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse \r\n\t\t\tthis._element.classList.remove('visible');\r\n\t}\r\n\thide(){\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis._setVisible(false);\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './SitePlan.css';\r\nimport PlotMoreInformationType from '../enums/PlotMoreInformationType';\r\nimport BirdsEyeView from './BirdsEyeView';\r\nimport Filters from './Filters';\r\nimport AvailablePricesFilter from './AvailablePricesFilter';\r\nimport Favourite from '../favourites/Favourite';\r\nimport StatusFilter from './StatusFilter';\r\nimport BedroomsFilter from './BedroomsFilter';\r\nimport FeaturesFilter from './FeaturesFilter';\r\nimport MenuBar from './MenuBar';\r\nimport MainMenu from './MainMenu';\r\nimport VideoPlayer from './VideoPlayer';\r\nimport MenuManager from './MenuManager';\r\nimport HouseTypeFilter from './HouseTypeFilter';\r\nimport PlotFilterer from '../filters/PlotFilterer';\r\nimport PlotSearch from './PlotSearch';\r\nimport SitePicker from './SitePicker';\r\nimport Spinner from './Spinner';\r\nimport MouseBlocker from './MouseBlocker';\r\nimport Handles from '../core/Handles';\r\nimport PlotMoreInformation from './PlotMoreInformation';\r\nimport BrochureGeneration from './BrochureGeneration';\r\nimport ImageViewer from './ImageViewer';\r\nimport Favourites from './Favourites';\r\nimport Dialog from './Dialog';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport StylesHelper from '../html/StylesHelper';\r\nimport PrivacyPolicy from './PrivacyPolicy';\r\nimport SitePlan3D from './SitePlan3D';\r\nimport SitePlan360 from './SitePlan360';\r\nimport Configurator from './Configurator';\r\nimport Urls from '../urls/Urls';\r\nimport SitePlanVisibleType from '../enums/SitePlanVisibleType';\r\nimport PlotMenu from './PlotMenu';\r\nimport UrlHelper from '../core/UrlHelper';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport BrochuresMenu from '../brochures/BrochuresMenu';\r\nimport BrochuresManager from '../brochures/BrochuresManager';\r\nimport PlotDetailedInformationsManager from '../plot_detailed_information/PlotDetailedInformationsManager';\r\nimport PlotComparisonManager from '../plot_detailed_information/PlotComparisonManager';\r\nimport PlotsSelectionMenu from './PlotsSelectionMenu';\r\nimport HouseTypesViewer from '../house_types_viewer/HouseTypesViewer';\r\nimport HouseTypesViewModel from '../view_models/HouseTypesViewModel';\r\nimport PlotStatus from '../site/PlotStatus';\r\nimport FullScreenImagesViewer from './FullScreenImagesViewer';\r\nimport NearbySites from './NearbySites';\r\nconst urlParams = new URLSearchParams(window.location.search);\r\nconst hashType = window.location.href.split('#')[1];\r\nconst{throwNotProvided}=ParameterErrors;\r\nexport default class SitePlan extends Component {\r\n\tstatic get BIRDS_EYE_VIEW_ZOOM_MIN(){\r\n\t\treturn 1;\r\n\t}\r\n\tstatic get BIRDS_EYE_VIEW_ZOOM_MAX(){\r\n\t\treturn 6;\r\n\t}\r\n\tstatic get _MAX_FAVOURITES(){\r\n\t\treturn 10\r\n\t}\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tconst {configuration, callbackDidMount}=props;\r\n\t\tthis._callbackDidMount = callbackDidMount;\r\n\t\tthis._getConfiguration = ()=>configuration;\r\n\t\tthis._elementRef = React.createRef();\r\n\t\tthis._menuBarRef=React.createRef();\r\n\t\tthis._mainMenuRef = React.createRef();\r\n\t\tthis._filtersRef=React.createRef();\r\n\t\tthis._availablePricesFilterRef = React.createRef(); \r\n\t\tthis._statusFilterRef = React.createRef();\r\n\t\tthis._bedroomsFilterRef = React.createRef();\r\n\t\tthis._plotSearchRef = React.createRef();\r\n\t\tthis._houseTypeFilterRef = React.createRef();\r\n\t\tthis._featuresFilterRef = React.createRef();\r\n\t\tthis._spinnerRef = React.createRef();\r\n\t\tthis._mouseBlockerRef=React.createRef();\r\n\t\tthis._plotMoreInformationRef=React.createRef();\r\n\t\tthis._brochureGenerationRef = React.createRef();\r\n\t\tthis._favouritesRef = React.createRef();\r\n\t\tthis._imageViewerRef=React.createRef();\r\n\t\tthis._showForSale=this._showForSale.bind(this);\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis._birdsEyeViewRef=React.createRef();\r\n\t\tthis._privacyPolicyRef= React.createRef();\r\n\t\tthis._sitePlan3DRef = React.createRef();\r\n\t\tthis._sitePlan360Ref = React.createRef();\r\n\t\tthis._configuratorRef = React.createRef();\r\n\t\tthis._menuManagerRef = React.createRef();\r\n\t\tthis._plotMenuRef = React.createRef();\r\n\t\tthis._brochuresMenuRef = React.createRef();\r\n\t\tthis._spinnerHandles = new Handles();\r\n\t\tthis._loadSite= this._loadSite.bind(this);\r\n\t\tthis._load3dSite= this._load3dSite.bind(this);\r\n\t\tthis._getFilteredPlots = this._getFilteredPlots.bind(this);\r\n\t\tthis._handleShowMainMenu = this._handleShowMainMenu.bind(this);\r\n\t\tthis._filtersChanged=this._filtersChanged.bind(this);\r\n\t\tthis._filterAndLoadPlots=this._filterAndLoadPlots.bind(this);\r\n\t\tthis._loadIndividualPlot = this._loadIndividualPlot.bind(this);\r\n\t\tthis._clearFilters = this._clearFilters.bind(this);\r\n\t\tthis._plotSearchSelectedPlot=this._plotSearchSelectedPlot.bind(this);\r\n\t\tthis._getDimensions = this._getDimensions.bind(this);\r\n\t\tthis._handleShowPlotMoreInformation = this._handleShowPlotMoreInformation.bind(this);\r\n\t\tthis._handlePlaySiteVideo = this._handlePlaySiteVideo.bind(this);\r\n\t\tthis._handleShowTwoDSitePlan = this._handleShowTwoDSitePlan.bind(this);\r\n\t\tthis._handleClickedFavourite = this._handleClickedFavourite.bind(this);\r\n\t\tthis._handleZoomChange = this._handleZoomChange.bind(this);\r\n\t\tthis.resize= this.resize.bind(this);\r\n\t\tthis._setMenuBarZoom= this._setMenuBarZoom.bind(this);\r\n\t\tthis._handleSetFavouritesActive= this._handleSetFavouritesActive.bind(this);\r\n\t\tthis._handleFavouritesHide= this._handleFavouritesHide.bind(this);\r\n\t\tthis._handleExpandImage=this._handleExpandImage.bind(this);\r\n\t\tthis._handleAddFavourite = this._handleAddFavourite.bind(this);\r\n\t\tthis._handleRemoveFavourite = this._handleRemoveFavourite.bind(this);\r\n\t\tthis._handleShowOutside360 = this._handleShowOutside360.bind(this);\r\n\t\tthis._handleShowDefaultOutside360 = this._handleShowDefaultOutside360.bind(this);\r\n\t\tthis._handleShow3d = this._handleShow3d.bind(this);\r\n\t\tthis._handleShowBrochures = this._handleShowBrochures.bind(this);\r\n\t\tthis._handleBackFromSitePlan360 = this._handleBackFromSitePlan360.bind(this);\r\n\t\tthis._handleEnterHouse = this._handleEnterHouse.bind(this);\r\n\t\tthis._handleShowSuggestedSites = this._handleShowSuggestedSites.bind(this);\r\n\t\tthis._initializeConfiguredCssClasses = this._initializeConfiguredCssClasses.bind(this);\r\n\t\tthis._showTooManyFavouritesDialog = this._showTooManyFavouritesDialog.bind(this);\r\n\t\tthis._handlePreviousSitePlanVisibleTypeElseDefault = this._handlePreviousSitePlanVisibleTypeElseDefault.bind(this);\r\n\t\tthis._handleShowBrochureGenerationDialog= this._handleShowBrochureGenerationDialog.bind(this);\r\n\t\tthis._handleShowSendFavouritesBrochure= this._handleShowSendFavouritesBrochure.bind(this);\r\n\t\tthis._handleShowStreetView= this._handleShowStreetView.bind(this);\r\n\t\tthis._hasSpaceToShowMenuOnOpen= this._hasSpaceToShowMenuOnOpen.bind(this);\r\n\t\tthis._menuBarIsHorizontalChanged = this._menuBarIsHorizontalChanged.bind(this);\r\n\t\tthis._handleEnterHouseByPlotNumber = this._handleEnterHouseByPlotNumber.bind(this);\r\n\t\tthis._setupFirstShowPlotMarkers = this._setupFirstShowPlotMarkers.bind(this);\r\n\t\tthis._showPlotDetailedInformation = this._showPlotDetailedInformation.bind(this);\r\n\t\tthis._showImagesFullScreen = this._showImagesFullScreen.bind(this);\r\n\t\tthis._handleShowPlots = this._handleShowPlots.bind(this);\r\n\t\tthis._handleShowHouseTypes = this._handleShowHouseTypes.bind(this);\r\n\t\tthis._showPlotMenuForPlot = this._showPlotMenuForPlot.bind(this);\r\n\t\tthis.setFilterInSiteFromWhatAreYouLookingFor = this.setFilterInSiteFromWhatAreYouLookingFor.bind(this);\r\n\t\tthis._previousSitePlanVisibleType = null;\r\n\t\tthis._currentSitePlanVisibleType = null;\r\n\t\tthis._plotFilterer = new PlotFilterer();\r\n\t\tthis._siteJson = null;\r\n\t\tthis._initializedConfiguredCssClasses = null;\r\n\t\tthis._showPlotMarkers = false;\r\n\t\tthis._doneFirstShowPlotMarkers=false;\r\n\t\tthis.state = {birdsEyeView:null, menuBarHorizontal:false, fadeInPlotMarkers:true}\r\n\t}\r\n\tinitialize({siteJsons}){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst spinnerHandle = this._spinnerHandles.take();\r\n\t\t\tthis._loadSite(siteJsons).then(()=>{\t\r\n\t\t\t\tspinnerHandle.dispose()\r\n\t\t\t\tresolve(this);\r\n\t\t\t}).catch((err)=>{\r\n\t\t\t\tspinnerHandle.dispose();\r\n\t\t\t\treject(err);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\t_loadSite(siteJsons){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tAssetsManager.getSiteAssets(this._getConfiguration()).then(({siteJson, configuration})=>{\r\n\t\t\t\tthis._siteJson = siteJson;\r\n\t\t\t\tthis._houseTypesViewModel = new HouseTypesViewModel(this._siteJson.getPlotsArray());\r\n\t\t\t\tconst unitsArray = siteJson.units.getArray();\r\n\t\t\t\tconst plotsArray = siteJson.units.getPlotsArray();\r\n\t\t\t\tthis._initializeConfiguredCssClasses(configuration.plotStatusConfigurations);\r\n\t\t\t\tthis._plotFilterer.clearFilters();\r\n\t\t\t\tthis._availablePricesFilterRef.current.load({plotsArray:plotsArray, availablePricesSettings:this._siteJson.filtersSettings.availablePricesSettings,\r\n\t\t\t\t\tcurrencyConfiguration:this._siteJson.currencyConfiguration});\r\n\t\t\t\t\tthis._featuresFilterRef.current.load({siteJson});\r\n\t\t\t\tthis._statusFilterRef.current.load(plotsArray);\r\n\t\t\t\tthis._houseTypeFilterRef.current.load(this._houseTypesViewModel, siteJson);\r\n\t\t\t\tthis._bedroomsFilterRef.current.load(plotsArray);\r\n\t\t\t\tthis._plotSearchRef.current.load(siteJson.units);\r\n\t\t\t\tthis._plotsSelectionMenu?.initialize({siteJson});\r\n\t\t\t\tthis._houseTypesViewer?.initialize({siteJson, \r\n\t\t\t\t\thouseTypesViewModel:this._houseTypesViewModel});\r\n\t\t\t\tif(siteJsons)\r\n\t\t\t\t\tthis._nearbySites?.initialize({siteJsons, thisSiteJson:siteJson});\r\n\t\t\t\tthis._filtersRef.current.load({siteJson});\r\n\t\t\t\tthis._filterAndLoadPlots().then(()=>{\r\n\t\t\t\t\tthis._sitePlan360Ref.current.load(siteJson, this._getConfiguration()).then(()=>{//needs to be visible as loads.\r\n\t\t\t\t\t\t\tthis._setVisibleType(SitePlanVisibleType.BIRDS_EYE_VIEW);\r\n\t\t\t\t\t\t\tif(this._hasSpaceToShowMenuOnOpen()){\r\n\t\t\t\t\t\t\t\tthis._handleShowMainMenu();//simpligon \r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tthis._setupFirstShowPlotMarkers();\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}).catch(reject);\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_initializeThreeDIfEnabled({configuration, siteJson}){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tif(!configuration.threeDEnabled)return Promise.resolve();\r\n\t\t\tthis._sitePlan3DRef.current.load(siteJson).then(resolve).catch(reject);\r\n\t\t});\r\n\t}\r\n\tsetFilterInSiteFromWhatAreYouLookingFor(whatAreYouLookingForViewModel){\r\n\t\twhatAreYouLookingForViewModel.visible = false;\r\n\t\tconst plotsStillAvailableWithAnd = whatAreYouLookingForViewModel.getPlotsStillAvailableForSite(this._siteJson);\r\n\t\tif(plotsStillAvailableWithAnd.length>0){\r\n\t\t\tconsole.log('plotsStillAvailableWithAnd');\r\n\t\t\tconsole.log(plotsStillAvailableWithAnd.length);\r\n\t\t\tthis._plotFilterer.clearFilters();\r\n\t\t\tthis._statusFilterRef.current.setAvailableOnly();\r\n\t\t\tthis._houseTypeFilterRef.current.setFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel);\r\n\t\t\tthis._bedroomsFilterRef.current.setFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel);\r\n\t\t\tthis._availablePricesFilterRef.current.setFromWhatAreYouLookingForViewModel(whatAreYouLookingForViewModel);\r\n\t\t\tconst filteredPlots = this._getFilteredPlots();\r\n\t\t\tif(filteredPlots.length>0){\r\n\t\t\t\tthis._plotsSelectionMenu?.setFilteredPlots(filteredPlots);\r\n\t\t\t\tthis._plotMenuRef.current.setFilteredPlots(filteredPlots);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tconst loadPlotsDirectory = (plots, message)=>{\t\r\n\t\t\tthis._doneFirstShowPlotMarkers=true;\t\t\r\n\t\t\tconst siteJsonUnits = [];\r\n\t\t\tplots.forEach(plot=>{\r\n\t\t\t\tif(siteJsonUnits.indexOf(plot.unit)<0)\r\n\t\t\t\t\tsiteJsonUnits.push(plot.unit);\r\n\t\t\t});\r\n\t\t\tthis._birdsEyeViewRef.current.load({siteJson:this._siteJson, unitsArray:siteJsonUnits,\r\n\t\t\t\tshowPlotMarkers:true, filtered:false})\r\n\t\t\t.catch(console.error);\r\n\t\t\tthis._plotsSelectionMenu?.setFilteredPlots(plots);\r\n\t\t\tthis._plotMenuRef.current.setFilteredPlots(plots);\r\n\t\t\t/*\r\n\t\t\tthis._currentDialog = Dialog.create({\r\n\t\t\t\ttitle:'Info', \r\n\t\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\t\tmessage:message,\r\n\t\t\t\toptions:[{text:'OK', callback:()=>{\r\n\t\t\t\t\t\r\n\t\t\t\t}}]}\r\n\t\t\t);*/\r\n\t\t};\r\n\t\t\r\n\t\tconst plotsStillAvailableWithOr = whatAreYouLookingForViewModel.getPlotsStillAvailableWithOr(this._siteJson);\r\n\t\tif(plotsStillAvailableWithOr.length>0)\r\n\t\t{\r\n\t\t\tconsole.log('plotsStillAvailableWithOr');\r\n\t\t\tconsole.log(plotsStillAvailableWithOr.length);\r\n\t\t\tloadPlotsDirectory(plotsStillAvailableWithOr, \r\n\t\t\t\t'No plots matched all filters. The active plots matched some of the filters!');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tconst allPlots = this._siteJson.getPlotsArray();\r\n\t\tconst allAvailablePlotsForSite = allPlots.filter(siteJsonUnitPlot=>siteJsonUnitPlot.status===PlotStatus.AVAILABLE);\r\n\t\tif(allAvailablePlotsForSite.length>0){\r\n\t\t\tconsole.log('allAvailablePlotsForSite');\r\n\t\t\tconsole.log(allAvailablePlotsForSite.length);\r\n\t\t\tloadPlotsDirectory(allAvailablePlotsForSite, \r\n\t\t\t\t'No available plots currently match what you’re looking for, please see other available plots below');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tconst allPlotsThatCouldBecomeAvailable = allPlots.filter(siteJsonUnitPlot=>siteJsonUnitPlot.status!==PlotStatus.SOLD_OR_UNAVAILABLE&&siteJsonUnitPlot.status!==PlotStatus.RESERVED);\r\n\t\tif(allPlotsThatCouldBecomeAvailable.length>0){\r\n\t\t\tloadPlotsDirectory(allPlotsThatCouldBecomeAvailable,\r\n\t\t\t\t'The site had no available plots. Please see other plots which may become available');\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tloadPlotsDirectory(allPlots, 'The site had no available plots. Showing other plots.');\r\n\t\t\r\n\t}\r\n\tresize(){\r\n\t\tconsole.log('resized_fdfd');\r\n\t\tthis._birdsEyeViewRef.current?.resize();\r\n\t}\r\n\t_load3dSite(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tAssetsManager.getSiteAssets(this._getConfiguration()).then(({siteJson, configuration})=>{\r\n\t\t\t\tthis._sitePlan3DRef.current.load(siteJson).then(()=>{\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_setupFirstShowPlotMarkers(){\r\n\t\tconst delayShowPlotMarkersSeconds = this._getConfiguration().delayShowPlotMarkersSeconds;\r\n\t\tconst show = ()=>{\r\n\t\t\tif(this._doneFirstShowPlotMarkers)return;\r\n\t\t\tthis._doneFirstShowPlotMarkers = true;\r\n\t\t\tthis._showPlotMarkers= true;\r\n\t\t\tthis._filterAndLoadPlots().then(()=>{\r\n\t\t\t\tsetTimeout(()=>{\r\n\t\t\t\t\tthis.setState({fadeInPlotMarkers:false});\r\n\t\t\t\t}, 5000);\r\n\t\t\t}).catch(console.error);\r\n\t\t};\r\n\t\tif(delayShowPlotMarkersSeconds>0){\r\n\t\t\tsetTimeout(show,delayShowPlotMarkersSeconds*1000);\r\n\t\t}\r\n\t\tconst handleFirstMouseDown = ()=>{\r\n\t\t\tdocument.documentElement.removeEventListener('mousedown', handleFirstMouseDown);\r\n\t\t\tshow();\r\n\t\t};\r\n\t\tdocument.documentElement.addEventListener('mousedown', handleFirstMouseDown);\r\n\t}\r\n\t_setVisibleType(sitePlanVisibleType){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._previousSitePlanVisibleType = this._currentSitePlanVisibleType;\r\n\t\t\tswitch(sitePlanVisibleType){\r\n\t\t\t\tcase SitePlanVisibleType.BIRDS_EYE_VIEW:\r\n\t\t\t\t\tthis._birdsEyeViewRef.current.setVisible(true);\r\n\t\t\t\t\tthis._sitePlan360Ref.current.setVisible(false);\r\n\t\t\t\t\tthis._sitePlan3DRef.current.setVisible(false);\r\n\t\t\t\t\tthis._configuratorRef.current.setVisible(false);\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase SitePlanVisibleType.OUTSIDE_360:\r\n\t\t\t\t\tthis._birdsEyeViewRef.current.setVisible(false);\r\n\t\t\t\t\tthis._sitePlan360Ref.current.setVisible(true);\r\n\t\t\t\t\tthis._sitePlan3DRef.current.setVisible(false);\r\n\t\t\t\t\tthis._configuratorRef.current.setVisible(false);\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase SitePlanVisibleType.CONFIGURATOR:\r\n\t\t\t\t\tthis._birdsEyeViewRef.current.setVisible(false);\r\n\t\t\t\t\tthis._sitePlan360Ref.current.setVisible(false);\r\n\t\t\t\t\tthis._sitePlan3DRef.current.setVisible(false);\r\n\t\t\t\t\tthis._configuratorRef.current.setVisible(true);\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase SitePlanVisibleType.THREE_D:\r\n\t\t\t\t\tthis._birdsEyeViewRef.current.setVisible(false);\r\n\t\t\t\t\tthis._sitePlan360Ref.current.setVisible(false);\r\n\t\t\t\t\tthis._sitePlan3DRef.current.setVisible(true);\r\n\t\t\t\t\tthis._configuratorRef.current.setVisible(false);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tthis._currentSitePlanVisibleType = sitePlanVisibleType;\r\n\t\t\tthis.setState({sitePlanVisibleType:sitePlanVisibleType});\r\n\t\t});\r\n\t}\r\n\t_getDimensions(){\r\n\t\tconst element = this._elementRef.current;\r\n\t\tif(!element)return null;\r\n\t\treturn [element.offsetWidth, element.offsetHeight];\r\n\t}\r\n\t_hasSpaceToShowMenuOnOpen(){\r\n\t\tconst dimensions = this._getDimensions();\r\n\t\tif(!dimensions)return false;\r\n\t\treturn (dimensions[0]>800)&&(dimensions[1]>400);\r\n\t}\r\n\t_handleShowMainMenu(){\r\n\t\tif(!this._getConfiguration().goStraightToFiltersMenu){\r\n\t\t\tthis._mainMenuRef.current.show();\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._filtersRef.current.show();\r\n\t\t\r\n\t}\r\n\t_filterAndLoadPlots(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tsetTimeout(()=>{\r\n\t\t\t\tconst filteredPlots = this._getFilteredPlots();\r\n\t\t\t\tconst filteredUnits = this._siteJson.units.getArray().filter(unit=>{\r\n\t\t\t\t\tconst unitPlotsArray = unit.plots;\r\n\t\t\t\t\tfor(var i=0; i=0)\r\n\t\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t});\r\n\t\t\t\tthis._plotsSelectionMenu?.setFilteredPlots(filteredPlots);\r\n\t\t\t\tthis._plotMenuRef.current.setFilteredPlots(filteredPlots);\r\n\t\t\t\tthis._birdsEyeViewRef.current.load({siteJson:this._siteJson, unitsArray:filteredUnits,\r\n\t\t\t\tshowPlotMarkers:this._showPlotMarkers||this._doneFirstShowPlotMarkers||(this._showPlotMarkers= this._plotFilterer.filtersApplied), filtered:true})\r\n\t\t\t\t.then(resolve).catch(reject);\r\n\t\t\t}, 0);\r\n\t\t});\r\n\t}\r\n\t_getFilteredPlots(){\r\n\t\treturn this._plotFilterer.filterPlots(this._siteJson.units.getPlotsArray())\r\n\t\t\t\t\t.filter(plot=>!plot.affordable);\r\n\t}\r\n\t_loadIndividualPlot(plot){\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._birdsEyeViewRef.current.load({siteJson:this._siteJson, unitsArray:[plot.unit], filtered:true});\r\n\t\t},0\t);\r\n\t}\r\n\t_filtersChanged(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._plotSearchRef.current.clear();\r\n\t\t\tthis.setState({fadeInPlotMarkers:false});\r\n\t\t\tthis._filterAndLoadPlots().then(()=>{\r\n\t\t\t\tresolve();\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\tcomponentDidMount(){\r\n\t\tthis._callbackDidMount(this);\r\n\t\tthis._plotFilterer.addPlotFilter(this._availablePricesFilterRef.current);\r\n\t\tthis._plotFilterer.addPlotFilter(this._statusFilterRef.current);\r\n\t\tthis._plotFilterer.addPlotFilter(this._bedroomsFilterRef.current);\r\n\t\tthis._plotFilterer.addPlotFilter(this._houseTypeFilterRef.current);\r\n\t\tthis._plotFilterer.addPlotFilter(this._plotSearchRef.current);\r\n\t\tif(this._featuresFilterRef.current)\r\n\t\t\tthis._plotFilterer.addPlotFilter(this._featuresFilterRef.current);\r\n\t\tthis._menuBarRef.current.addEventListener('isHorizontalChanged', this._menuBarIsHorizontalChanged);\r\n\t\tconst element = this._elementRef.current;\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tif(configuration.brochuresMenuEnabled){\r\n\t\t\tthis._brochuresMenu = new BrochuresMenu({menuManager:this._menuManagerRef.current,\r\n\t\t\t\tgetHandlesActivateButton:this._menuBarRef.current.getHandlesActivateButton});\r\n\t\t\telement.appendChild(this._brochuresMenu.element);\r\n\t\t}\r\n\t\tthis._videoPlayerFullScreen= new VideoPlayer({\r\n\t\t\tmaximized:true,\r\n\t\t\tcloseable:true\r\n\t\t});\r\n\t\telement.appendChild(this._videoPlayerFullScreen.element);\r\n\t\tif(configuration.plotSelectionMenuEnabled){\r\n\t\t\tthis._plotsSelectionMenu= new PlotsSelectionMenu({\r\n\t\t\t\tshowPlotDetailedInformation:(siteJsonUnitPlot)=>this._plotDetailedInformationsManager.show(siteJsonUnitPlot),\r\n\t\t\t\tshowPlotMenuForPlot:this._showPlotMenuForPlot,\r\n\t\t\t\tshowMenu:this._handleShowMainMenu,\r\n\t\t\t\tclearFilters:this._clearFilters,\r\n\t\t\t\tshowStreetView:this._handleShowStreetView,\r\n\t\t\t\tgetSitePlanVisibleType:()=>this._currentSitePlanVisibleType,\r\n\t\t\t\tgetConfiguration:this._getConfiguration,\r\n\t\t\t\tclickShowForSale:this._showForSale,\r\n\t\t\t\tiMenuManager:this._menuManagerRef.current\r\n\t\t\t});\r\n\t\t\telement.appendChild(this._plotsSelectionMenu.element);\r\n\t\t}\r\n\t\tif(configuration.houseTypesViewerEnabled){\r\n\t\t\tthis._houseTypesViewer= new HouseTypesViewer({\r\n\t\t\t\tshowMenu:this._handleShowMainMenu,\r\n\t\t\t\tclearFilters:this._clearFilters,\r\n\t\t\t\tiHouseTypesFilter:this._houseTypeFilterRef.current.iHouseTypesFilter,\r\n\t\t\t\tshowImagesFullScreen:this._showImagesFullScreen,\r\n\t\t\t\tshowStreetView:this._handleShowStreetView,\r\n\t\t\t\taddFavourite:this._handleAddFavourite, \r\n\t\t\t\tremoveFavourite:this._handleRemoveFavourite,\r\n\t\t\t\tenterHouse:this._handleEnterHouse,\r\n\t\t\t\tconfiguration\r\n\t\t\t});\r\n\t\t\telement.appendChild(this._houseTypesViewer.element);\r\n\t\t}\r\n\t\tthis._plotDetailedInformationsManager = new PlotDetailedInformationsManager({\r\n\t\t\tparentElement:this._elementRef.current, \r\n\t\t\taddFavourite:this._handleAddFavourite, removeFavourite:this._handleRemoveFavourite,\r\n\t\t\tshowStreetView:this._handleShowStreetView, showImagesFullScreen:this._showImagesFullScreen,\r\n\t\t\tshowPlotsMenu:this._plotsSelectionMenu?this._plotsSelectionMenu.show:()=>{},\r\n\t\t\tconfiguration,\r\n\t\t\tshowBrochureGenerationDialog:this._handleShowBrochureGenerationDialog,\r\n\t\t\tenterHouse:this._handleEnterHouse\r\n\t\t});\r\n\t\tthis._fullScreenImageViewer = new FullScreenImagesViewer({configuration});\r\n\t\telement.appendChild(this._fullScreenImageViewer.element);\r\n\t\tPlotComparisonManager.initialize({plotDetailedInformationsManager:\r\n\t\t\tthis._plotDetailedInformationsManager, sitePlanElement:this._elementRef.current});\r\n\t\tthis._nearbySites = new NearbySites({});\r\n\t\telement.appendChild(this._nearbySites.element);\r\n\t}\r\n\t_menuBarIsHorizontalChanged(e){\r\n\t\tconst isHorizontal = e.isHorizontal;\r\n\t\tthis.setState({menuBarHorizontal:isHorizontal});\r\n\t}\r\n\t_clearFilters(){\r\n\t\tthis._plotFilterer.clearFilters();\r\n\t\tthis._filterAndLoadPlots();\r\n\t\tthis._plotSearchRef.current.clear();\r\n\t}\r\n\t_showForSale(){\r\n\t\tthis._statusFilterRef.current.setForSale();\r\n\t}\r\n\t_plotSearchSelectedPlot(plot){\r\n\t\tif(plot===null)\r\n\t\t\tthis._filterAndLoadPlots();\r\n\t\telse\r\n\t\t\tthis._loadIndividualPlot(plot);\r\n\t}\r\n\t_handleShowPlotMoreInformation(plot, plotMoreInformationType){\r\n\t\tconst plotMoreInformation = this._plotMoreInformationRef.current;\r\n\t\tplotMoreInformation.show(this._siteJson, plot, undefined, plotMoreInformationType);\r\n\t}\r\n\t_handleZoomChange(value){\r\n\t\tthis._birdsEyeViewRef.current.setZoom(value);\r\n\t}\r\n\t_setMenuBarZoom(value){\r\n\t\tthis._menuBarRef.current.setZoom(value);\r\n\t}\r\n\t_handleSetFavouritesActive(active){\r\n\t\tif(active)this._favouritesRef.current.show();\r\n\t\telse this._favouritesRef.current.hide();\r\n\t}\r\n\t_handleFavouritesHide(){\r\n\t\tthis._menuBarRef.current.setFavouritesActive(false);\r\n\t}\r\n\t_handleExpandImage(params){\r\n\t\tthis._imageViewerRef.current.load(params);\r\n\t}\r\n\t_handleRemoveFavourite(plot){\r\n\t\tthis._favouritesRef.current.remove(plot.hash);\r\n\t\tplot.selected=false;\r\n\t}\r\n\t_handleAddFavourite(plot){\r\n\t\tconst favourites = this._favouritesRef.current;\r\n\t\tif(favourites.count>=SitePlan._MAX_FAVOURITES){\r\n\t\t\tthis._showTooManyFavouritesDialog();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t\tplot.selected=true;\r\n\t\tthis._favouritesRef.current.add(new Favourite({payload:plot, description:`Plot ${plot.number} ${plot.name}`, \r\n\t\timageUrl:`${Urls.getAssetsForSite(this._getConfiguration().siteSlug)}${UrlHelper.removeStartSlash(plot.frontViewImage.getBestEntryToFitHeight(50).relativePath)}`, hash:plot.hash,\r\n\t\t\tsortValue:plot.number,\r\n\t\t\tonRemove:()=>{plot.selected=false;},\r\n\t\t\tonClick:()=>{this._handleClickedFavourite(plot)}\r\n\t\t}));\r\n\t\treturn true;\r\n\t}\r\n\t_handleClickedFavourite(plot){\r\n\t\tif(this._getConfiguration().plotMoreInformationHasOverview){\r\n\t\t\tthis._handleShowPlotMoreInformation(plot, PlotMoreInformationType.OVERVIEW);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\tswitch(this._currentSitePlanVisibleType){\r\n\t\t\t\tcase SitePlanVisibleType.OUTSIDE_360:\r\n\t\t\t\t\tthis._handleShowStreetView({nearPlot:plot});\r\n\t\t\t\t\treturn;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis._showPlotMenuForPlot(plot);\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\t}\r\n\t_handleBackFromSitePlan360(){\r\n\t\tthis._setVisibleType(SitePlanVisibleType.BIRDS_EYE_VIEW);\r\n\t}\r\n\t_handleEnterHouse(plot){\r\n\t\tthis._handleEnterHouseByPlotNumber(plot.number);\r\n\t}\r\n\t_handleEnterHouseByPlotNumber(plotNumber){\r\n\t\tthis._setVisibleType(SitePlanVisibleType.CONFIGURATOR);\r\n\t\tif(!this._siteJson)return;\r\n\t\tconst plot = this._siteJson.getPlotByNumber(plotNumber);\r\n\t\tthis._configuratorRef.current.showConfiguratorForPlot({roomName:null, plot:plot});\r\n\t}\r\n\t_handlePreviousSitePlanVisibleTypeElseDefault(){\r\n\t\tif(this._previousSitePlanVisibleType)\r\n\t\t\tthis._setVisibleType(this._previousSitePlanVisibleType);\r\n\t\telse \r\n\t\t\tthis._setVisibleType(SitePlanVisibleType.BIRDS_EYE_VIEW);\r\n\t}\r\n\t_handleShowOutside360(params){\r\n\t\tlet outside360UniqueId = params?.outside360UniqueId;\r\n\t\tconst cameraDirectionEulerAngles = params?.cameraDirectionEulerAngles;\r\n\t\tif(outside360UniqueId ===undefined||outside360UniqueId===null)\r\n\t\t\toutside360UniqueId=0;\r\n\t\tthis._sitePlan360Ref.current.switchToOutside360(outside360UniqueId, cameraDirectionEulerAngles).then(()=>{\r\n\t\t}).catch(console.error);\r\n\t\tsetTimeout(()=>{\r\n\t\t\tthis._setVisibleType(SitePlanVisibleType.OUTSIDE_360);\r\n\t\t},0);\r\n\t}\r\n\t_handleShow3d(){\r\n\t\tthis._setVisibleType(SitePlanVisibleType.THREE_D);\r\n\t\tthis._load3dSite().then(()=>{\r\n\t\t\t\r\n\t\t}).catch(console.error);\r\n\t}\r\n\t_handleShowDefaultOutside360(){\r\n\t\tconst configuration = this._getConfiguration();\r\n\t\tconst defaultOutside360PlotNumber = configuration.defaultOutside360PlotNumber\r\n\t\t\t?configuration.defaultOutside360PlotNumber:18;\r\n\t\tlet nearestOutside360Move = this._siteJson?.units?.getPlotByNumber(defaultOutside360PlotNumber)?.unit?.nearestOutside360Move;\r\n\t\tif(!nearestOutside360Move)\r\n\t\t\tnearestOutside360Move = this._siteJson?.units?.getFirstPlot()?.unit.nearestOutside360Move;\r\n\t\tif(!nearestOutside360Move)return;\r\n\t\tthis._handleShowOutside360({outside360UniqueId:nearestOutside360Move.outside360UniqueId, \r\n\t\t\tcameraDirectionEulerAngles:nearestOutside360Move.cameraAngleToFaceFrontDoor});\r\n\t}\r\n\t_showTooManyFavouritesDialog(){\r\n\t\tDialog.create({\r\n\t\t\ttitle:'Too many favourites!',\r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:'You may only add up to ten plots. Remove another plot first!',\r\n\t\t\toptions:[{text:'OK'}]\r\n\t\t});\r\n\t}\r\n\t_handleShowBrochureGenerationDialog(params){\r\n\t\tconst plot = params.plot;\r\n\t\tthis._brochureGenerationRef.current.load({plots:plot?[plot]:null});\r\n\t}\r\n\t_handleShowSendFavouritesBrochure(){\r\n\t\tthis._brochureGenerationRef.current.load({});\r\n\t}\r\n\t_handleShowStreetView(e){\r\n\t\tconst nearestOutside360Move = e.nearPlot?.unit.nearestOutside360Move;\r\n\t\tif(!nearestOutside360Move)return;\r\n\t\tthis._handleShowOutside360({outside360UniqueId:nearestOutside360Move.outside360UniqueId, \r\n\t\t\tcameraDirectionEulerAngles:nearestOutside360Move.cameraAngleToFaceFrontDoor});\r\n\t}\r\n\t_handleShowBrochures(){\r\n\t\tthis._brochuresMenu?.show();\r\n\t}\r\n\t_handleShowPlots(){\r\n\t\tthis._plotsSelectionMenu?.show({});\r\n\t}\r\n\t_handleShowHouseTypes(){\r\n\t\tthis._houseTypesViewer?.show({});\r\n\t}\r\n\t_handleShowSuggestedSites(){\r\n\t\tthis._nearbySites.show();\r\n\t}\r\n\t_initializeConfiguredCssClasses(plotStatusConfigurations){\r\n\t\tif(this._initializedConfiguredCssClasses)return;\r\n\t\tconst cssHtmlString = plotStatusConfigurations.toCssHtmlString();\r\n\t\tStylesHelper.appendCssToPage(cssHtmlString);\r\n\t\tthis._initializedConfiguredCssClasses=true;\r\n\t}\r\n\t_showPlotMenuForPlot(plot, zoomOut, c){\r\n\t\tconst showPlotMenu = ()=>{\r\n\t\t\tlet markerPosition;\r\n\t\t\tswitch(this._currentSitePlanVisibleType){\r\n\t\t\t\tcase SitePlanVisibleType.BIRDS_EYE_VIEW:\r\n\t\t\t\t\tmarkerPosition = this._birdsEyeViewRef.current?.getMarkerPositionForPlotNumber(plot.number);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase SitePlanVisibleType.OUTSIDE_360:\r\n\t\t\t\t\tmarkerPosition = c?c:[0,0];\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis._showPlotDetailedInformation(plot);\r\n\t\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._plotMenuRef.current.show({position:markerPosition,\r\n\t\t\t\tsiteJson:this._siteJson, plot:this._siteJson.units.getPlotByNumber(plot.number), \r\n\t\t\t\tuntilClickOff:true}).catch(console.error);\r\n\t\t};\r\n\t\tif(zoomOut){\r\n\t\t\tthis._birdsEyeViewRef.current?.setZoom(1).then(()=>{\r\n\t\t\t\tshowPlotMenu();\r\n\t\t\t}).catch(console.error);\r\n\t\t}\r\n\t\telse showPlotMenu();\r\n\t}\r\n\t_showPlotDetailedInformation(siteJsonUnitPlot){\r\n\t\tthis._plotDetailedInformationsManager.show(siteJsonUnitPlot);\r\n\t}\r\n\t_showImagesFullScreen(images){\r\n\t\tthis._fullScreenImageViewer.show({images});\r\n\t}\r\n\t_handlePlaySiteVideo(){\r\n\t\tthis._videoPlayerFullScreen.play({url:Urls.videos+'site.mp4'});\r\n\t}\r\n\t_handleShowTwoDSitePlan(){\r\n\t\tthis._fullScreenImageViewer.show({images:['twoDSitePlan.jpg']});\r\n\t}\r\n\trender() {\r\n\t\tconst classNameSitePlan = \"site-plan \"+(window.isMobile?'mobile ':'')+SitePlanVisibleType.getCssClassName(this.state.sitePlanVisibleType) \r\n\t\t+(this.state.menuBarHorizontal?' menu-bar-horizontal':'')\r\n\t\t+(this.state.fadeInPlotMarkers?' fade-in-unit-markers':'')\r\n\t\t+(this._getConfiguration().threeDEnabled?'':' disable-3d');\r\n\treturn (
    \r\n\t\t\t
    \r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t{}}\r\n\t\t\t\t\tenterHouse={this._handleEnterHouse} addFavourite ={this._handleAddFavourite}\r\n\t\t\t\t\tremoveFavourite={this._handleRemoveFavourite}\r\n\t\t\t\t\tplotMenuRef={this._plotMenuRef}\r\n\t\t\t\t\tshowPlotDetailedInformation={this._showPlotDetailedInformation}\r\n\t\t\t\t\tgetConfiguration={this._getConfiguration}>\r\n\t\t\t\tthis._menuBarRef.current.insertedMenuItemsHandler}\r\n\t\t\t\tgetInsertedMenuItemsAtEndHandler={()=>this._menuBarRef.current.insertedMenuItemsAtEndHandler}\r\n\t\t\t\tonBack={this._handleBackFromSitePlan360} goToConfigurator={this._handleEnterHouseByPlotNumber}\r\n\t\t\t\tshowPlotMenu={this._showPlotMenuForPlot} showPlotDetailedInformation={this._showPlotDetailedInformation}>\r\n\t\t\t\tthis._menuBarRef.current.insertedMenuItemsHandler}\r\n\t\t\t\t\tgetInsertedMenuItemsAtEndHandler={()=>this._menuBarRef.current.insertedMenuItemsAtEndHandler}\r\n\t\t\t\t\tgetConfiguration={this._getConfiguration}\r\n\t\t\t\t>\r\n\t\t\t\tthis._menuBarRef.current.insertedMenuItemsHandler}\r\n\t\t\t\tconfiguration={this._getConfiguration()}/>\r\n\t\t\t
    \r\n\t\t\t\r\n\t\t\t\tthis._birdsEyeViewRef.current} \r\n\t\t\t\t\tshowDefault3d={this._handleShow3d} showBrochures={this._handleShowBrochures}\r\n\t\t\t\t\tshowPlots={this._handleShowPlots} showHouseTypes={this._handleShowHouseTypes}\r\n\t\t\t\t\tplaySiteVideo={this._handlePlaySiteVideo}\r\n\t\t\t\t\tshowTwoDSitePlan={this._handleShowTwoDSitePlan}\r\n\t\t\t\t\tshowSuggestedSites={this._handleShowSuggestedSites}>\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t[this._siteJson, this._siteJson.units]}\r\n\t\t\t\t\tgetSelectedFavourites={()=>this._favouritesRef.current.selectedFavourites.map(favourite=>favourite.payload)}\r\n\t\t\t\tshowBrochuresMenu={()=>{this._brochuresMenu?.show({scrollToBottom:true});}}\r\n\t\t\t\tgetConfiguration={this._getConfiguration}/>\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t
    )\r\n\t}\r\n}\r\n","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport './SitePlans.css';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport SitePlan from './SitePlan';\r\nimport GenericWindow from '../window/GenericWindow';\r\nimport Windows from '../window/Windows';\r\nimport WindowType from '../enums/WindowType';\r\nimport WindowEventNames from '../window/WindowEventNames';\r\nexport default class SitePlanWrapper {\r\n\tconstructor({configuration, parentElement, hasFilteredOptions, siteJsons}){\r\n\t\tthis._configuration = configuration;\r\n\t\tthis._hasFilteredOptions = hasFilteredOptions;\r\n\t\tthis._siteJsons = siteJsons;\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis.show = this.show.bind(this);\r\n\t\tthis.hide = this.hide.bind(this);\r\n\t\tthis.fillLeftHalf = this.fillLeftHalf.bind(this);\r\n\t\tthis.fillRightHalf = this.fillRightHalf.bind(this);\r\n\t\tconst title = this._configuration.siteName;\r\n\t\tthis._window = new GenericWindow({tooltipMessage:title, name:title, \r\n\t\t\tminWidth:100, maxWidth:1700, minHeight:100, maxHeight:1000,\r\n\t\t\tdefaultWidth:600, defaultHeight:600, defaultX:10, defaultY:10, minimized:!hasFilteredOptions, \r\n\t\t\tmaximized:false, minimizable:true, maximizable:true, closeable:true,\r\n\t\t\tminimizeOnClose:true, resizable:!window.isMobile, dragable:true, type:WindowType.SITE_PLAN,\r\n\t\t\tparentElement\r\n\t });\r\n\t\tthis._element = this._window.getElement();\r\n\t\tthis._element.classList.add('site-plan-wrapper');\r\n\t}\r\n\t\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tget hasFilteredOptions(){\r\n\t\treturn this._hasFilteredOptions;\r\n\t}\r\n\tfillLeftHalf(){\r\n\t\tthis._window.fillLeftHalf();\r\n\t}\r\n\tfillRightHalf(){\r\n\t\tthis._window.fillRightHalf();\r\n\t}\r\n\tshow(maximised){\r\n\t\tif(!maximised)\r\n\t\t\tthis._window.unminimize();\r\n\t\telse this._window.maximize();\r\n\t\tthis._window.bringToFront();\r\n\t}\r\n\thide(){\r\n\t\tthis._window.minimize();\r\n\t}\r\n\tget sitePlan(){\r\n\t\treturn this._sitePlan;\r\n\t}\r\n\tget siteName(){\r\n\t\treturn this._configuration.siteName;\r\n\t}\r\n\tinitialize(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst sitePlanFactory = React.createFactory(SitePlan);\r\n\t\t\tReactDOM.render(sitePlanFactory({ \r\n\t\t\t\tref:React.createRef(),\r\n\t\t\t\tconfiguration:this._configuration,\r\n\t\t\t\tcallbackDidMount:(sitePlan)=>{\r\n\t\t\t\t\tthis._sitePlan = sitePlan;\r\n\t\t\t\t\tsetTimeout(()=>{\r\n\t\t\t\t\t\tsitePlan.initialize({siteJsons:this._siteJsons}).then(()=>{\r\n\t\t\t\t\t\t\tresolve(sitePlan);\r\n\t\t\t\t\t\t}).catch(reject);\r\n\t\t\t\t\t},0);\r\n\t\t\t\t\tthis._window.addEventListener(WindowEventNames.MAXIMIZED, this._sitePlan.resize);\r\n\t\t\t\t\tthis._window.addEventListener(WindowEventNames.MINIMIZED, this._sitePlan.resize);\r\n\t\t\t\t}\r\n\t\t\t}),\r\n\t\t\tthis._window.getMainElement());\r\n\t\t});\r\n\t}\r\n}\r\n","import ParameterErrors from '../errors/ParameterErrors';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport Iterator from '../core/Iterator';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nimport WhenFinishedModifying from '../core/WhenFinishedModifying';\r\nconst { throwNotProvided, throwNotOfType} = ParameterErrors;\r\nexport default class SiteJsons{\r\n\tconstructor(){\r\n\t\tenableAcceptBindings(this);\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t\tthis._updateAllFeatures = this._updateAllFeatures.bind(this);\r\n\t\tthis._whenFinishedModifyingSiteJsonAllFeatures = new WhenFinishedModifying({\r\n\t\t\tdelay:0.1, callback:this._updateAllFeatures\r\n\t\t});\r\n\t}\r\n\tget entries(){\r\n\t\treturn this._entries;\r\n\t}\r\n\tgetPlotsArray(){\r\n\t\tlet siteJsonUnitPlots = [];\r\n\t\tthis._entries.forEach(siteJson=>{\r\n\t\t\tsiteJsonUnitPlots = siteJsonUnitPlots.concat(siteJson.getPlotsArray());\r\n\t\t});\r\n\t\treturn siteJsonUnitPlots;\r\n\t}\r\n\t\r\n\tget units(){\r\n\t\tlet siteJsonUnits = [];\r\n\t\tthis._entries.forEach(siteJson=>{\r\n\t\t\tsiteJson.units.forEach(siteJsonUnit=>{\r\n\t\t\t\tif(siteJsonUnits.indexOf(siteJsonUnit)<0)\r\n\t\t\t\t\tsiteJsonUnits.push(siteJsonUnit);\r\n\t\t\t});\r\n\t\t});\r\n\t\treturn siteJsonUnits;\r\n\t}\r\n\tget houseTypes(){\r\n\t\tconst entries = [];\r\n\t\tthis._entries.forEach(siteJson=>{\r\n\t\t\tsiteJson.houseTypes.forEach(houseType=>{\r\n\t\t\t\tif(entries.indexOf(houseType)<0)\r\n\t\t\t\t\tentries.push(houseType);\r\n\t\t\t});\r\n\t\t});\r\n\t\treturn entries;\r\n\t}\r\n\tget allFeatures(){\r\n\t\treturn this._allFeatures;\r\n\t}\r\n\t_updateAllFeatures(){\r\n\t\tconst allFeatures = [];\r\n\t\tconst seenIds = [];\r\n\t\tif(!this._entries)return;\r\n\t\tthis._entries.forEach(siteJson=>{\r\n\t\t\tif(!siteJson.allFeatures)return;\r\n\t\t\tsiteJson.allFeatures.forEach(feature=>{\r\n\t\t\t\tif(seenIds.indexOf(feature.id)<0){\r\n\t\t\t\t\tseenIds.push(feature.id);\r\n\t\t\t\t\tallFeatures.push(feature);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t\tthis._allFeatures = allFeatures;\r\n\t\tthis.bindingsHandler.changed('allFeatures', this._allFeatures);\r\n\t}\r\n\t/*\r\n\tget models(){\r\n\t\treturn this._models;\r\n\t}\r\n\tgetPlotByNumber(plotNumber){\r\n\t\treturn this.units.getPlotByNumber(plotNumber);\r\n\t}\r\n\tgetPlotsForHouseType(houseType){\r\n\t\treturn this.getPlotsArray().filter(plot=>plot.houseType===houseType);\r\n\t}*/\r\n\tget minPlotPrice(){\r\n\t\tlet min = null;\r\n\t\tthis.getPlotsArray().forEach(siteJsonUnitPlot=>{\r\n\t\t\tif(siteJsonUnitPlot.price===0||siteJsonUnitPlot.price===null||siteJsonUnitPlot.price===undefined) return;\r\n\t\t\tif(min===null)\r\n\t\t\t\tmin = siteJsonUnitPlot.price;\r\n\t\t\telse \r\n\t\t\t\tif(min>siteJsonUnitPlot.price)\r\n\t\t\t\t\tmin = siteJsonUnitPlot.price;\r\n\t\t});\r\n\t\treturn min;\r\n\t}\r\n\tget maxPlotPrice(){\r\n\t\tlet max = null;\r\n\t\tthis.getPlotsArray().forEach(siteJsonUnitPlot=>{\r\n\t\t\tif(max===null)\r\n\t\t\t\tmax = siteJsonUnitPlot.price;\r\n\t\t\telse \r\n\t\t\t\tif(max{\r\n\t\t\tconst entries = [];\r\n\t\t\tconst configurations = AssetsManager.configurations;\r\n\t\t\tconst configurationsIterator = new Iterator(configurations.entries);\r\n\t\t\tconst doNext = ()=>{\r\n\t\t\t\tif(!configurationsIterator.hasNext()){\r\n\t\t\t\t\tthis._entries = entries;\r\n\t\t\t\t\texposeBinding(this, 'allFeatures', ()=>this.allFeatures, (value)=>this.allFeatures = value);\r\n\t\t\t\t\tthis._updateAllFeatures();\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst configuration = configurationsIterator.next();\r\n\t\t\t\tAssetsManager.getSiteAssets(configuration).then(({siteJson})=>{\r\n\t\t\t\t\tentries.push(siteJson);\r\n\t\t\t\t\tPropertyBindingFactory.standard(this, siteJson, 'allFeatures', \r\n\t\t\t\t\t\tthis._whenFinishedModifyingSiteJsonAllFeatures.trigger);\r\n\t\t\t\t\tdoNext();\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t};\r\n\t\t\tdoNext();\r\n\t\t});\r\n\t}\r\n}","import React, { Component } from 'react';\r\nimport './DropdownSelectorMenu.css';\r\nimport CheckboxFilter from './CheckboxFilter';\r\nimport ClickedOffManager from '../ui_core/ClickedOffManager';\r\nimport ParameterErrors from '../errors/ParameterErrors';\r\nimport stopEventPropagation from'../ui_core/stopEventPropagation';\r\nconst {throwNotProvided}=ParameterErrors;\r\nexport default class DropdownSelectorMenu {\r\n\tconstructor(props){\r\n\t\tconst {classNames, defaultTitle} = props;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('dropdown-selector-menu');\r\n\t\tthis._element.innerHTML = defaultTitle;\r\n\t\tthis.showEntries = this.showEntries.bind(this);\r\n\t\tthis.setEntries = this.setEntries.bind(this);\r\n\t\tthis.hideEntries = this.hideEntries.bind(this);\r\n\t\tthis._setExpandedClassName = this._setExpandedClassName.bind(this);\r\n\t\tthis._element.addEventListener('click', this.showEntries)\r\n\t\tthis._entriesElement = document.createElement('div');\r\n\t\tthis._entriesElement.classList.add('entries');\r\n\t\tthis._element.appendChild(this._entriesElement);\r\n\t\tif(classNames){\r\n\t\t\tif(Array.isArray(classNames))\r\n\t\t\t\tclassNames.forEach(className=>this._element.classList.add(className));\r\n\t\t\telse \r\n\t\t\t\tthis._element.classList.add(classNames);\r\n\t\t}\r\n\t\tthis._clickedOffHandle = null;\r\n\t\tthis._clickedOffManager = new ClickedOffManager({element:this._entriesElement, hide:\r\n\t\t\tthis.hideEntries});\r\n\t}\r\n\tshowEntries(){\r\n\t\tthis._setExpandedClassName(true);\r\n\t\tthis._clickedOffManager.register();\r\n\t}\r\n\t_setExpandedClassName(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('expanded');\r\n\t\telse \r\n\t\t\tthis._element.classList.remove('expanded');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\tsetEntries(entries){\r\n\t\tthis._entries?.forEach(entry=>this._entriesElement.removeChild(entry.element));\r\n\t\tthis._entries =[];\r\n\t\tentries.forEach(entry=>{\r\n\t\t\tconst {callback, value, text, classNames}= entry;\r\n\t\t\tconst entryElement = document.createElement('div');\r\n\t\t\tthis._entriesElement.appendChild(entryElement);\r\n\t\t\tentryElement.innerHTML = text;\r\n\t\t\tentryElement.classList.add('entry');\r\n\t\t\tif(classNames){\r\n\t\t\t\tif(Array.isArray(classNames))\r\n\t\t\t\t\tclassNames.forEach(className=>entryElement.classList.add(className));\r\n\t\t\t\telse entryElement.classList.add(classNames);\r\n\t\t\t}\r\n\t\t\tif(callback){\r\n\t\t\t\tentryElement.addEventListener('click', (e)=>{\r\n\t\t\t\t\te.value = value;\r\n\t\t\t\t\tthis.hideEntries();\r\n\t\t\t\t\tcallback(e);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\tstopEventPropagation(entryElement, [ 'touchstart', 'click', 'mousedown' ]);\r\n\t\t\tthis._entries.push({entryElement, callback, value});\r\n\t\t});\r\n\t}\r\n\thideEntries(){\r\n\t\tconsole.log('hideEntries');\r\n\t\tthis._clickedOffManager.dispose();\r\n\t\tthis._setExpandedClassName(false);\r\n\t}\r\n}\r\n","import './WhatAreYouLookingFor.css';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport numberWithCommas from '../core/numberWithCommas';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nimport Dialog from '../components/Dialog';\r\nimport Urls from '../urls/Urls';\r\nimport Feature from '../enums/Feature';\r\nexport default class WhatAreYouLookingForFirstOptions{\r\n\tconstructor({nBeds, price, houseType, features, whatAreYouLookingForViewModel}){\r\n\t\tthis._whatAreYouLookingForViewModel = whatAreYouLookingForViewModel;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('first-options');\r\n\t\tthis._createButton= this._createButton.bind(this);\r\n\t\tthis._clickedNext= this._clickedNext.bind(this);\r\n\t\tthis._getPriceRangeText= this._getPriceRangeText.bind(this);\r\n\t\tthis._setNextEnabled= this._setNextEnabled.bind(this);\r\n\t\tthis._plotsStillAvailableChanged= this._plotsStillAvailableChanged.bind(this);\r\n\t\tthis.collapseExpandedOptions= this.collapseExpandedOptions.bind(this);\r\n\t\tthis._formatNumberToString = this._formatNumberToString.bind(this);\r\n\t\tthis._handleBack = this._handleBack.bind(this);\r\n\t\tthis._get_show= this._get_show.bind(this);\r\n\t\tthis._buttonBedsElement = this._createButton('Beds', 'n-beds-button', this._get_show('n-beds-visible'),\r\n\t\t\t'nBedrooms', (nBedrooms)=>nBedrooms?String(nBedrooms):'');\r\n\t\tthis._buttonPriceElement = this._createButton('Price', 'price-button', \r\n\t\t\tthis._get_show('price-visible', price.becomingVisible), 'priceRange',\r\n\t\t\tthis._getPriceRangeText);\r\n\t\tthis._buttonFeaturesElement = this._createButton('Features', 'features-button', this._get_show('features-visible'),\r\n\t\t\t'features', (features)=>features?features.map(feature=>feature.name).join(','):'');\r\n\t\tthis._buttonHousetypeElement = this._createButton('Housetype', 'housetype-button', \r\n\t\t\tthis._get_show('housetype-visible'), 'houseTypes', \r\n\t\t\t(houseTypeViewModels)=>houseTypeViewModels?houseTypeViewModels.map(houseTypeViewModel=>houseTypeViewModel.name).join(','):'');\r\n\t\tthis._nBeds = nBeds;\r\n\t\tthis._Price = price;\r\n\t\tthis._houseType = houseType;\r\n\t\tthis._features = features;\r\n\t\tnBeds.addEventListener('chose', this.collapseExpandedOptions);\r\n\t\tprice.addEventListener('chose', this.collapseExpandedOptions);\r\n\t\tfeatures.addEventListener('chose', this.collapseExpandedOptions);\r\n\t\thouseType.addEventListener('chose', this.collapseExpandedOptions);\r\n\t\tthis._buttonBedsElement.appendChild(this._nBeds.element);\r\n\t\tthis._buttonPriceElement.appendChild(this._Price.element);\r\n\t\tthis._buttonFeaturesElement.appendChild(this._features.element);\r\n\t\tthis._buttonHousetypeElement.appendChild(this._houseType.element);\r\n\t\tconst buttonNextTitleElement = document.createElement('div');\r\n\t\tbuttonNextTitleElement.classList.add('title');\r\n\t\tbuttonNextTitleElement.innerHTML = \"Find my Home\";\r\n\t\tthis._buttonNext = document.createElement('button');\r\n\t\tthis._buttonNext.classList.add('button-next');\r\n\t\tthis._buttonNext.classList.add('option-button');\r\n\t\tthis._buttonNext.appendChild(buttonNextTitleElement);\r\n\t\tthis._buttonNext.addEventListener('click', this._clickedNext);\r\n\t\tthis._element.appendChild(this._buttonNext);\r\n\t\tthis._propertyBindingPlotsStillAvailable = PropertyBindingFactory.standard(this,\r\n\t\twhatAreYouLookingForViewModel,\r\n\t\t'plotsStillAvailable', this._plotsStillAvailableChanged);\r\n\t}\r\n\t_plotsStillAvailableChanged(value){\r\n\t\tthis._plotsStillAvailable = value;\r\n\t\tthis._nextEnabled = this._whatAreYouLookingForViewModel.hasFilterApplied;\r\n\t\tthis._setNextEnabled(this._nextEnabled);\r\n\t}\r\n\t_setNextEnabled(value){\r\n\t\tif(value)\r\n\t\t\tthis._buttonNext.classList.add('enabled');\r\n\t\telse this._buttonNext.classList.remove('enabled');\r\n\t}\r\n\t_clickedNext(){\r\n\t\tif(!this._nextEnabled)return;\r\n\t\tthis._whatAreYouLookingForViewModel.visible = false;\r\n\t\tthis._whatAreYouLookingForViewModel.setFilterInSite();\r\n\t}\r\n\t_handleBack(){\r\n\t\tthis.collapseExpandedOptions();\r\n\t}\r\n\t_getPriceRangeText(priceRange){\r\n\t\tif(!priceRange)return '';\r\n\t\tconst [priceFrom, priceTo] = priceRange;\r\n\t\tconst hasPriceFrom=priceFrom!==undefined&&priceFrom!==null;\r\n\t\tconst hasPriceTo=priceTo!==undefined&&priceTo!==null;\r\n\t\tif(hasPriceFrom){\r\n\t\t\tif(!hasPriceTo)\r\n\t\t\t\treturn `from ${this._formatNumberToString(priceFrom)}`;\r\n\t\t\treturn `${this._formatNumberToString(priceFrom)} - ${this._formatNumberToString(priceTo)}`;\r\n\t\t}\r\n\t\treturn `to ${this._formatNumberToString(priceTo)}`;\r\n\t}\r\n\t_formatNumberToString(value){\r\n\t\tif(value===undefined||value===null)return value;\r\n\t\tlet str = String(value);\r\n\t\tstr = str.split('.')[0];\r\n\t\treturn numberWithCommas(str);\r\n\t}\r\n\tcollapseExpandedOptions(){\r\n\t\tif(this._currentCssClassNameShow){\r\n\t\t\tthis._element.classList.remove(this._currentCssClassNameShow);\r\n\t\t\tthis._currentCssClassNameShow = null;\r\n\t\t}\r\n\t\tthis._element.classList.remove('has-visible');\r\n\t}\r\n\t_get_show(cssClassNameShow, becomingVisible){\r\n\t\treturn ()=>{\r\n\t\t\tthis.collapseExpandedOptions();\r\n\t\t\tthis._element.classList.add('has-visible');\r\n\t\t\tthis._element.classList.add(cssClassNameShow);\r\n\t\t\tthis._currentCssClassNameShow = cssClassNameShow;\r\n\t\t\tbecomingVisible&&becomingVisible();\r\n\t\t};\r\n\t}\r\n\t_createButton(buttonText, cssClassName, onClick, propertyName, getTextFromValue){\r\n\t\tconst buttonElement = document.createElement('button');\r\n\t\tbuttonElement.classList.add('option-button');\r\n\t\tbuttonElement.classList.add(cssClassName);\r\n\t\tconst titleElement = document.createElement('div');\r\n\t\ttitleElement.classList.add('title');\r\n\t\tbuttonElement.addEventListener('click', onClick);\r\n\t\tbuttonElement.appendChild(titleElement);\r\n\t\tconst buttonBackElement = \r\n\t\tthis._iconButtonBack = new IconButtonNonReact({\r\n\t\t\tclassName:\"button-back\",\r\n\t\t\timgUrl:Urls.assets+'icons/back.png',\r\n\t\t\tonClick:this._handleBack,\r\n\t\t\tstopEventPropagation:true});\r\n\t\tstopEventPropagation(this._iconButtonBack.element, ['click', 'mousedown', 'touchstart']);\r\n\t\ttitleElement.appendChild(this._iconButtonBack.element);\r\n\t\tconst titleTextElement = document.createElement('div');\r\n\t\ttitleTextElement.classList.add('text');\r\n\t\ttitleTextElement.innerHTML = buttonText;\r\n\t\ttitleElement.appendChild(titleTextElement);\r\n\t\tthis._element.appendChild(buttonElement);\r\n\t\tPropertyBindingFactory.standard(this, this._whatAreYouLookingForViewModel, propertyName, \r\n\t\t\t(value)=>{\r\n\t\t\t\tlet text = getTextFromValue(value);\r\n\t\t\t\tif(text!=='')\r\n\t\t\t\t\ttext=`(${text})`;\r\n\t\t\t\ttitleTextElement.innerHTML = `${buttonText} ${text}`;\r\n\t\t});\r\n\t\treturn buttonElement;\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import './WhatAreYouLookingFor.css';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport numberWithCommas from '../core/numberWithCommas';\r\nimport Feature from '../enums/Feature';\r\nexport default class WhatAreYouLookingForToggleButton{\r\n\tconstructor({callbackClicked, text, value}){\r\n\t\tthis._value = value;\r\n\t\tthis._callbackClicked = callbackClicked;\r\n\t\tthis._clicked = this._clicked.bind(this);\r\n\t\tthis.select = this.select.bind(this);\r\n\t\tthis.unselect = this.unselect.bind(this);\r\n\t\tthis._selected = false;\r\n\t\tthis._element = document.createElement('button');\r\n\t\tthis._element.classList.add('child-option-button');\r\n\t\tthis._element.innerHTML = text;\r\n\t\tthis._element.addEventListener('click', this._clicked);\r\n\t\tstopEventPropagation(this._element, ['click', 'mousedown', 'touchstart']);\r\n\t}\r\n\tsetAvailableOption(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.remove('not-available-option');\r\n\t\telse \r\n\t\t\tthis._element.classList.add('not-available-option');\r\n\t}\r\n\tget selected(){\r\n\t\treturn this._selected;\r\n\t}\r\n\tget value(){\r\n\t\treturn this._value;\r\n\t}\r\n\t_clicked(){\r\n\t\tthis._callbackClicked(this);\r\n\t}\r\n\tselect(){\r\n\t\tthis._selected = true;\r\n\t\tthis._element.classList.add('selected');\r\n\t}\r\n\tunselect(){\r\n\t\tthis._selected = false;\r\n\t\tthis._element.classList.remove('selected');\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import './WhatAreYouLookingFor.css';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport eventEnable from '../core/eventEnable';\r\nimport WhatAreYouLookingForToggleButton from './WhatAreYouLookingForToggleButton';\r\nexport default class WhatAreYouLookingForNBeds{\r\n\tconstructor({siteJson, whatAreYouLookingForViewModel}){\r\n\t\teventEnable(this);\r\n\t\tthis._whatAreYouLookingForViewModel = whatAreYouLookingForViewModel;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('n-beds');\r\n\t\tthis._createSetNBedsButton= this._createSetNBedsButton.bind(this);\r\n\t\tthis._get_setNBeds= this._get_setNBeds.bind(this);\r\n\t\tthis._nBedroomsSelectedValueChanged = this._nBedroomsSelectedValueChanged.bind(this);\r\n\t\tthis._nBedroomAvailableWithOtherOptionsChanged = this._nBedroomAvailableWithOtherOptionsChanged.bind(this);\r\n\t\tthis._mapValueToToggleButton = new Map();\r\n\t\tthis._toggleButtons=[];\r\n\t\twhatAreYouLookingForViewModel.nBedroomsValues.forEach(nBedsValue=>this._createSetNBedsButton(nBedsValue));\r\n\t\tthis._propertyBindingNBedrooms = PropertyBindingFactory.standard(this, whatAreYouLookingForViewModel,\r\n\t\t'nBedrooms', this._nBedroomsSelectedValueChanged);\r\n\t\tthis._propertyBindingNBedroomAvailableWithOtherOptions = PropertyBindingFactory.standard(this,\r\n\t\twhatAreYouLookingForViewModel,\r\n\t\t'nBedroomsAvailableWithOtherOptions', this._nBedroomAvailableWithOtherOptionsChanged);\r\n\t}\r\n\t_nBedroomsSelectedValueChanged(value){\r\n\t\tif(this._currentlySelectedButton){\r\n\t\t\tthis._currentlySelectedButton.unselect();\r\n\t\t\tthis._currentlySelectedButton=null;\r\n\t\t}\r\n\t\tconst toggleButton = this._mapValueToToggleButton.get(value);\r\n\t\tif(!toggleButton)return;\r\n\t\ttoggleButton.select();\r\n\t\tthis._currentlySelectedButton=toggleButton;\r\n\t}\r\n\t_nBedroomAvailableWithOtherOptionsChanged(value){\r\n\t\tthis._toggleButtons.forEach(toggleButton=>{\r\n\t\t\tconst nBedrooms = toggleButton.value;\r\n\t\t\ttoggleButton.setAvailableOption(value?.indexOf(nBedrooms)>=0?true:false);\r\n\t\t});\r\n\t}\r\n\t_createSetNBedsButton(nBedrooms){\r\n\t\tconst toggleButton = new WhatAreYouLookingForToggleButton({\r\n\t\t\tcallbackClicked:this._get_setNBeds(nBedrooms),\r\n\t\t\ttext:String(nBedrooms),\r\n\t\t\tvalue:nBedrooms\r\n\t\t});\r\n\t\tthis._mapValueToToggleButton.set(nBedrooms, toggleButton);\r\n\t\tthis._element.appendChild(toggleButton.element);\r\n\t\tthis._toggleButtons.push(toggleButton);\r\n\t}\r\n\t_get_setNBeds(nBedrooms){\r\n\t\treturn (toggleButton)=>{\r\n\t\t\tif(toggleButton.selected){\r\n\t\t\t\ttoggleButton.unselect();\r\n\t\t\t\tthis._whatAreYouLookingForViewModel.nBedrooms=null;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._whatAreYouLookingForViewModel.nBedrooms = nBedrooms;\r\n\t\t\tthis.dispatchEvent({type:'chose'});\r\n\t\t};\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import './WhatAreYouLookingFor.css';\r\nimport WhatAreYouLookingForToggleButton from './WhatAreYouLookingForToggleButton';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport eventEnable from '../core/eventEnable';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nexport default class WhatAreYouLookingForFeatures{\r\n\tconstructor({siteJsons, whatAreYouLookingForViewModel}){\r\n\t\teventEnable(this);\r\n\t\tthis._whatAreYouLookingForViewModel = whatAreYouLookingForViewModel;\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('features');\r\n\t\tthis._createSetFeaturesButton= this._createSetFeaturesButton.bind(this);\r\n\t\tthis._removeFeaturesButton= this._removeFeaturesButton.bind(this);\r\n\t\tthis._featuresChanged= this._featuresChanged.bind(this);\r\n\t\tthis._selectedFeaturesChanged= this._selectedFeaturesChanged.bind(this);\r\n\t\tthis._get_setFeature= this._get_setFeature.bind(this);\r\n\t\tthis._featuresAvailableWithOtherOptionsChanged= this._featuresAvailableWithOtherOptionsChanged.bind(this);\r\n\t\tthis._mapFeatureIdToButton = new Map();\r\n\t\tthis._toggleButtons=[];\r\n\t\tthis._propertyBindingFeatures = PropertyBindingFactory.standard(this, \r\n\t\t\tsiteJsons, 'allFeatures', this._featuresChanged);\r\n\t\tthis._propertyBindingSelectedFeatures = PropertyBindingFactory.standard(this, \r\n\t\t\twhatAreYouLookingForViewModel, 'features', this._selectedFeaturesChanged);\r\n\t\tthis._propertyBindingFeaturesAvailableWithOtherOptions = PropertyBindingFactory.standard(this, \r\n\t\t\twhatAreYouLookingForViewModel, 'featuresAvailableWithOtherOptions', this._featuresAvailableWithOtherOptionsChanged);\r\n\t}\r\n\t_featuresChanged(features){\r\n\t\tconst seenIds = [];\r\n\t\tfeatures?.forEach(feature=>{\r\n\t\t\tseenIds.push(feature.id);\r\n\t\t\tlet toggleButton = this._mapFeatureIdToButton.get(feature.id);\r\n\t\t\tif(!toggleButton)this._createSetFeaturesButton(feature);\r\n\t\t});\r\n\t\tArray.from(this._mapFeatureIdToButton.keys()).forEach(featureId=>{\r\n\t\t\tif(seenIds.indexOf(featureId)>=0)return;\r\n\t\t\tthis._removeFeaturesButton(featureId);\r\n\t\t});\r\n\t}\r\n\t_featuresAvailableWithOtherOptionsChanged(value){\r\n\t\tif(!value)return;\r\n\t\tconst availableFeatureIds = value?.map(feature=>feature.id);\r\n\t\tthis._toggleButtons.forEach(toggleButton=>{\r\n\t\t\tconst featureId = toggleButton.value;\r\n\t\t\tconsole.log(featureId);\r\n\t\t\tconst isAvailableOption = (!availableFeatureIds)||availableFeatureIds.indexOf(featureId)>=0;\r\n\t\t\tconsole.log(isAvailableOption);\r\n\t\t\ttoggleButton.setAvailableOption(isAvailableOption);\r\n\t\t});\r\n\t}\r\n\t_removeFeaturesButton(featureId){\t\r\n\t\tconst toggleButton = this._mapFeatureIdToButton.get(featureId);\r\n\t\tthis._element.appendChild(toggleButton.element);\r\n\t\tthis._mapFeatureIdToButton.delete(featureId);\r\n\t\tthis._toggleButtons.splice(this._toggleButtons.indexOf(toggleButton), 1);\r\n\t}\r\n\t_selectedFeaturesChanged(value){\r\n\t\tif(!value)return;\r\n\t\tif(value.length<1)return;\r\n\t\tthis._toggleButtons.forEach(toggleButton=>toggleButton.unselect());\r\n\t\tvalue.forEach(feature=>{\r\n\t\t\tthis._mapFeatureIdToButton.get(feature.id).select();\r\n\t\t});\r\n\t}\r\n\t_createSetFeaturesButton(feature){\r\n\t\tconst toggleButton = new WhatAreYouLookingForToggleButton({\r\n\t\t\tcallbackClicked:this._get_setFeature(feature),\r\n\t\t\ttext:feature.name,\r\n\t\t\tvalue:feature.id\r\n\t\t});\r\n\t\tthis._mapFeatureIdToButton.set(feature.id, toggleButton);\r\n\t\tthis._element.appendChild(toggleButton.element);\r\n\t\tthis._toggleButtons.push(toggleButton);\r\n\t}\r\n\t_get_setFeature(feature){\r\n\t\treturn (toggleButton)=>{\r\n\t\t\tif(toggleButton.selected){\r\n\t\t\t\ttoggleButton.unselect();\r\n\t\t\t\tthis._propertyBindingSelectedFeatures.set(null);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._propertyBindingSelectedFeatures.set([feature]);\r\n\t\t\tthis.dispatchEvent({type:'chose'});\r\n\t\t};\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import './WhatAreYouLookingFor.css';\r\nimport ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport Slider from '../components/Slider';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport eventEnable from '../core/eventEnable';\r\nimport Urls from '../urls/Urls';\r\nimport IconButtonNonReact from '../components/IconButtonNonReact';\r\nexport default class WhatAreYouLookingForPrice{\r\n\tconstructor({siteJsons, whatAreYouLookingForViewModel, titleElement}){\r\n\t\teventEnable(this);\r\n\t\tthis._minSliderRef= React.createRef();\r\n\t\tthis._maxSliderRef= React.createRef();\r\n\t\tthis._whatAreYouLookingForViewModel = whatAreYouLookingForViewModel;\r\n\t\tthis._priceRangeChanged= this._priceRangeChanged.bind(this);\r\n\t\tthis._onSliderMinValueChanged = this._onSliderMinValueChanged.bind(this);\r\n\t\tthis._onSliderMaxValueChanged = this._onSliderMaxValueChanged.bind(this);\r\n\t\tthis.becomingVisible = this.becomingVisible.bind(this);\r\n\t\tthis._handleClickButtonDone = this._handleClickButtonDone.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('price');\r\n\t\tthis._valueElement= document.createElement('div');\r\n\t\tthis._valueElement.classList.add('value');\r\n\t\tthis._element.appendChild(this._valueElement);\r\n\t\tthis._sliderMinWrapperElement = document.createElement('div');\r\n\t\tthis._sliderMinWrapperElement.classList.add('slider-min-wrapper');\r\n\t\tthis._sliderMaxWrapperElement = document.createElement('div');\r\n\t\tthis._sliderMaxWrapperElement.classList.add('slider-max-wrapper');\r\n\t\tthis._element.appendChild(this._sliderMinWrapperElement);\r\n\t\t\r\n\t\tstopEventPropagation(\tthis._sliderMinWrapperElement, ['click', 'mousedown', 'touchstart']);\r\n\t\tstopEventPropagation(\tthis._sliderMaxWrapperElement, ['click', 'mousedown', 'touchstart']);\r\n\t\tconst sliderFactory = React.createFactory(Slider);\r\n\t\t\r\n\t\tReactDOM.render(sliderFactory(\r\n\t\t{ \r\n\t\t\tref:this._minSliderRef, \r\n\t\t\tmin:siteJsons.minPlotPrice, max:siteJsons.maxPlotPrice, initial:siteJsons.minPlotPrice, \r\n\t\t\tonValueChanged:this._onSliderMinValueChanged, \r\n\t\t\tisHorizontal:true\r\n\t\t}),\r\n\t\tthis._sliderMinWrapperElement);\r\n\t\tReactDOM.render(sliderFactory(\r\n\t\t{ \r\n\t\t\tref:this._maxSliderRef, \r\n\t\t\tmin:siteJsons.minPlotPrice, max:siteJsons.maxPlotPrice, initial:siteJsons.maxPlotPrice, \r\n\t\t\tonValueChanged:this._onSliderMaxValueChanged, \r\n\t\t\tisHorizontal:true\r\n\t\t}),\r\n\t\tthis._sliderMaxWrapperElement);\r\n\t\tthis._minSliderRef.current.handle.element.innerHTML = 'Min';\r\n\t\tthis._maxSliderRef.current.handle.element.innerHTML = 'Max';\r\n\t\tthis._sliderMinWrapperElement.appendChild(this._sliderMaxWrapperElement);\r\n\t\tthis._propertyBindingPriceRange = PropertyBindingFactory.standard(this, whatAreYouLookingForViewModel,\r\n\t\t\t'priceRange',\r\n\t\t\tthis._priceRangeChanged);\r\n\t\twhatAreYouLookingForViewModel.priceRange = [siteJsons.minPlotPrice, siteJsons.maxPlotPrice];\r\n\t\tconsole.log('set the price range');\r\n\t\t/*this._iconButtonNonReactDone = new IconButtonNonReact({\r\n\t\t\tclassName:'button-done',\r\n\t\t\timgUrl:Urls.assets+'icons/tick.png', \r\n\t\t\tonClick:this._handleClickButtonDone});\r\n\t\tstopEventPropagation(this._iconButtonNonReactDone.element, ['click', 'mousedown', 'touchstart']);\r\n\t\ttitleElement.appendChild(this._iconButtonNonReactDone.element);*/\r\n\t\tthis._firstBecomingVisible = true;\r\n\t}\r\n\t_handleClickButtonDone(){\r\n\t\tthis.dispatchEvent({type:'chose'});\r\n\t}\r\n\tbecomingVisible(){\r\n\t\tif(!this._firstBecomingVisible)return;\r\n\t\tthis._firstBecomingVisible = false;\r\n\t\tthis._minSliderRef.current.setFromInitialValue();\r\n\t\tthis._maxSliderRef.current.setFromInitialValue();\r\n\t}\r\n\t_priceRangeChanged(value){\r\n\t\tif(!value)return;\r\n\t\tconst [min, max]= value;\r\n\t\tthis._minSliderRef.current.setValue(min);\r\n\t\tthis._maxSliderRef.current.setValue(max);\r\n\t\tconst noMin = (min===undefined)||(min===null);\r\n\t\tconst noMax = (max===undefined)||(max===null);\r\n\t\tif((!noMin)&&(!noMax)&&(min>max)){\r\n\t\t\tthis._element.classList.add('invalid');\r\n\t\t}\r\n\t\telse\r\n\t\t\tthis._element.classList.remove('invalid');\r\n\t}\r\n\t_onSliderMinValueChanged(value){\r\n\t\tif(value===undefined||value===null)return;\r\n\t\tconst currentPriceRange = this._propertyBindingPriceRange.get();\r\n\t\tthis._propertyBindingPriceRange.set([value, currentPriceRange?currentPriceRange[1]:null]);\r\n\t}\r\n\t_onSliderMaxValueChanged(value){\r\n\t\tif(value===undefined||value===null)return;\r\n\t\tconst currentPriceRange = this._propertyBindingPriceRange.get();\r\n\t\tthis._propertyBindingPriceRange.set([currentPriceRange?currentPriceRange[0]:null, value]);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import './WhatAreYouLookingFor.css';\r\nimport stopEventPropagation from '../ui_core/stopEventPropagation';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport WhatAreYouLookingForToggleButton from './WhatAreYouLookingForToggleButton';\r\nimport eventEnable from '../core/eventEnable';\r\nexport default class WhatAreYouLookingForHouseType{\r\n\tconstructor({siteJson, houseTypesViewModel,\r\n\t\twhatAreYouLookingForViewModel}){\r\n\t\teventEnable(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('housetype');\r\n\t\tthis._createSetHouseTypesButton= this._createSetHouseTypesButton.bind(this);\r\n\t\tthis._houseTypesAvailableWithOtherOptionsChanged= this._houseTypesAvailableWithOtherOptionsChanged.bind(this);\r\n\t\tthis._get_setHouseTypes= this._get_setHouseTypes.bind(this);\r\n\t\tthis._houseTypesChanged= this._houseTypesChanged.bind(this);\r\n\t\tthis._toggleButtons = [];\r\n\t\tthis._mapHouseTypeViewModelToButton = new Map();\r\n\t\thouseTypesViewModel.entries.forEach(houseTypeViewModel=>this._createSetHouseTypesButton(houseTypeViewModel));\r\n\t\tthis._propertyBindingHouseTypes= PropertyBindingFactory\r\n\t\t\t.standard(this, whatAreYouLookingForViewModel, 'houseTypes', this._houseTypesChanged);\r\n\t\tthis._propertyBindingHouseTypesAvailableWithOtherOptions = PropertyBindingFactory.standard(this,\r\n\t\twhatAreYouLookingForViewModel,\r\n\t\t'houseTypesAvailableWithOtherOptions', this._houseTypesAvailableWithOtherOptionsChanged);\r\n\t}\r\n\t_houseTypesChanged(value){\r\n\t\tthis._toggleButtons.forEach(toggleButton=>toggleButton.unselect());\r\n\t\tif(!value)return;\r\n\t\tvalue.forEach(houseTypeViewModel=>this._mapHouseTypeViewModelToButton\r\n\t\t\t.get(houseTypeViewModel).select());\r\n\t}\r\n\t_houseTypesAvailableWithOtherOptionsChanged(value){\r\n\t\tconsole.log('houseTypesAvailableWithOtherOptions');\r\n\t\tthis._toggleButtons.forEach(toggleButton=>{\r\n\t\t\tconst houseTypeViewModel = toggleButton.value;\r\n\t\t\tconsole.log('houseTypeViewModel');\r\n\t\t\tconsole.log(houseTypeViewModel);\r\n\t\t\ttoggleButton.setAvailableOption((!value)||value.indexOf(houseTypeViewModel)>=0);\r\n\t\t});\r\n\t}\r\n\t_createSetHouseTypesButton(houseTypeViewModel){\r\n\t\tconst toggleButton = new WhatAreYouLookingForToggleButton({\r\n\t\t\tcallbackClicked:this._get_setHouseTypes(houseTypeViewModel),\r\n\t\t\ttext:houseTypeViewModel.name+'',\r\n\t\t\tvalue:houseTypeViewModel\r\n\t\t});\r\n\t\tthis._mapHouseTypeViewModelToButton.set(houseTypeViewModel, toggleButton);\r\n\t\tthis._element.appendChild(toggleButton.element);\r\n\t\tthis._toggleButtons.push(toggleButton);\r\n\t}\r\n\t_get_setHouseTypes(houseTypeViewModel){\r\n\t\treturn (toggleButton)=>{\r\n\t\t\tif(toggleButton.selected){\r\n\t\t\t\ttoggleButton.unselect();\r\n\t\t\t\tthis._propertyBindingHouseTypes.set(null);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._propertyBindingHouseTypes.set([houseTypeViewModel]);\r\n\t\t\tthis.dispatchEvent({type:'chose'});\r\n\t\t};\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import eventEnable from '../core/eventEnable';\r\nimport enableAcceptBindings from '../mvvm/enableAcceptBindings';\r\nimport exposeBinding from '../mvvm/exposeBinding';\r\nconst SelectedOptionType = {NBedrooms:'nBedrooms', HouseType:'hosueType',\r\n PriceRange:'priceRange', Features:'features'};\r\nexport default class WhatAreYouLookingForViewModel{\r\n\tconstructor({siteJsons, houseTypesViewModel, setFilterInSite}){\r\n\t\tthis._siteJsons = siteJsons;\r\n\t\tthis._availablePlots = this._siteJsons.getPlotsArray().filter(siteJsonsUnitPlot=>siteJsonsUnitPlot.isAvailable);\r\n\t\tthis._houseTypesViewModel = houseTypesViewModel;\r\n\t\tthis._setFilterInSiteCallback = setFilterInSite;\r\n\t\tthis.setFilterInSite = this.setFilterInSite.bind(this);\r\n\t\tthis.getPlotsStillAvailableWithOr = this.getPlotsStillAvailableWithOr.bind(this);\r\n\t\teventEnable(this);\r\n\t\tthis._visible = true;\r\n\t\tthis._getPlotsAvailableWithOtherSelectedOptions = this._getPlotsAvailableWithOtherSelectedOptions.bind(this);\r\n\t\tthis._createIsInPriceRangeLexicalClosure = this._createIsInPriceRangeLexicalClosure.bind(this);\r\n\t\tthis._createNBedroomsAvailableWithOtherOptions = this._createNBedroomsAvailableWithOtherOptions.bind(this);\r\n\t\tthis._createHouseTypesAvailableWithOtherOptions = this._createHouseTypesAvailableWithOtherOptions.bind(this);\r\n\t\tthis._createPriceRangeAvailableWithOtherOptions = this._createPriceRangeAvailableWithOtherOptions.bind(this);\r\n\t\texposeBinding(this, 'nBedrooms', ()=>this.nBedrooms, (value)=>this.nBedrooms = value);\r\n\t\texposeBinding(this, 'nBedroomsAvailableWithOtherOptions', ()=>this.nBedroomsAvailableWithOtherOptions);\r\n\t\texposeBinding(this, 'houseTypes', ()=>this.houseTypes, (value)=>this.houseTypes = value);\r\n\t\texposeBinding(this, 'houseTypesAvailableWithOtherOptions', ()=>this.houseTypesAvailableWithOtherOptions);\r\n\t\texposeBinding(this, 'features', ()=>this.features, (value)=>this.features = value);\r\n\t\texposeBinding(this, 'featuresAvailableWithOtherOptions', ()=>this.featuresAvailableWithOtherOptions);\r\n\t\texposeBinding(this, 'priceRange', ()=>this.priceRange, (value)=>this.priceRange = value);\r\n\t\texposeBinding(this, 'priceRangeAvailableWithOtherOptions', ()=>this.priceRangeAvailableWithOtherOptions);\r\n\t\texposeBinding(this, 'visible', ()=>this.visible, (value)=>this.visible = value);\r\n\t\texposeBinding(this, 'plotsStillAvailable', ()=>this.getPlotsStillAvailableForSite());\r\n\t}\r\n\tget visible(){\r\n\t\treturn this._visible;\r\n\t}\r\n\tset visible(value){\r\n\t\tif(this._visible ===value)return;\r\n\t\tthis._visible = value;\r\n\t\tthis.bindingsHandler.changed('visible', value);\r\n\t}\r\n\tsetFilterInSite(){\r\n\t\tthis._setFilterInSiteCallback(this);\r\n\t}\r\n\t_getPlotsAvailableWithOtherSelectedOptions(selectedOptionTypeFor, siteJson){\r\n\t\tlet plotsStillAvailable = this._availablePlots;\r\n\t\tif(siteJson){\r\n\t\t\tconst siteJsonUnitPlotsForSite = siteJson.getPlotsArray();\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.filter(siteJsonUnitPlot=>siteJsonUnitPlotsForSite.indexOf(siteJsonUnitPlot));\r\n\t\t}\r\n\t\tif(selectedOptionTypeFor!==SelectedOptionType.Bedrooms\r\n\t\t\t&&this._nBedrooms!==undefined&&this._nBedrooms!==null)\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.filter(siteJsonsUnitPlot=>\r\n\t\t\t\tsiteJsonsUnitPlot.nBedrooms===this._nBedrooms);\r\n\t\tif(selectedOptionTypeFor!==SelectedOptionType.HouseType&&this._houseTypes!==undefined&&this._houseTypes!==null&&this._houseTypes.length>0)\r\n\t\t{\r\n\t\t\tlet houseTypes = [];\r\n\t\t\tthis._houseTypes.forEach(houseTypeViewModel=>\r\n\t\t\t\thouseTypes = houseTypes.concat(houseTypeViewModel.houseTypesWithSameName)\r\n\t\t\t);\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.filter(\r\n\t\t\t\tsiteJsonsUnitPlot=>houseTypes.indexOf(siteJsonsUnitPlot.houseType)>=0\r\n\t\t\t)\r\n\t\t}\r\n\t\tif(selectedOptionTypeFor!==SelectedOptionType.PriceRange\r\n\t\t\t&&this._isInPriceRange){\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.filter(\r\n\t\t\t\tsiteJsonsUnitPlot=>this._isInPriceRange(siteJsonsUnitPlot.price)\r\n\t\t\t);\r\n\t\t}\r\n\t\tif(selectedOptionTypeFor!==SelectedOptionType.Features\r\n\t\t\t&&this._features!==undefined&&this._features!==null){\r\n\t\t\tconst selectedFeatureIds = this._features.map(feature=>feature.id);\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.filter(siteJsonsUnitPlot=>{\r\n\t\t\t\tfor(var feature of siteJsonsUnitPlot.features){\r\n\t\t\t\t\tif(selectedFeatureIds.indexOf(feature.id))\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t});\r\n\t\t}\r\n\t\treturn plotsStillAvailable;\r\n\t}\r\n\t\r\n\tget hasFilterApplied(){\r\n\t\tconst nBedroomsFilterApplied = (this._nBedrooms!==null&&this._nBedrooms!==undefined&&this._nBedrooms>0);\r\n\t\tconst houseTypesFilterApplied = (this._houseTypes!==null&&this._houseTypes!==undefined&&this._houseTypes.length>0);\r\n\t\tconst featuresFilterApplied = (this._features!==null&&this._features!==undefined&&this._features.length>0);\r\n\t\tconst priceRangeFilterApplied = (this._priceRange!==null&&this._priceRange!==undefined&&\r\n\t\t!(this._priceRange[0]===this._siteJsons.minPlotPrice&&this._priceRange[1]===this._siteJsons.maxPlotPrice));\r\n\t\t/*console.log('nBedroomsFilterApplied '+nBedroomsFilterApplied);\r\n\t\tconsole.log('houseTypesFilterApplied '+houseTypesFilterApplied);\r\n\t\tconsole.log('featuresFilterApplied '+featuresFilterApplied);\r\n\t\tconsole.log('priceRangeFilterApplied '+priceRangeFilterApplied);\r\n\t\tconsole.log(this._priceRange);\r\n\t\tconsole.log(this._minPrice);\r\n\t\tconsole.log(this._maxPrice);*/\r\n\t\treturn nBedroomsFilterApplied||houseTypesFilterApplied||featuresFilterApplied||priceRangeFilterApplied;\r\n\t}\r\n\tgetPlotsStillAvailableForSite(siteJson){\r\n\t\treturn this._getPlotsAvailableWithOtherSelectedOptions(null, siteJson);\r\n\t}\r\n\tgetPlotsStillAvailableWithOr(siteJson){\r\n\t\tconst siteJsonUnitPlotsForSite = siteJson.getPlotsArray();\r\n\t\tconst availablePlots = this._availablePlots.filter(siteJsonsUnitPlot=>\r\n\t\t\t\tsiteJsonUnitPlotsForSite.indexOf(siteJsonsUnitPlot)>=0);\r\n\t\tlet plotsStillAvailable = availablePlots.filter(siteJsonsUnitPlot=>\r\n\t\t\t\tsiteJsonsUnitPlot.nBedrooms===this._nBedrooms);\r\n\t\tif(this._houseTypes!==undefined&&this._houseTypes!==null){\r\n\t\t\tlet houseTypes = [];\r\n\t\t\tthis._houseTypes.forEach(houseTypeViewModel=>\r\n\t\t\t\thouseTypes = houseTypes.concat(houseTypeViewModel.houseTypesWithSameName)\r\n\t\t\t);\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.concat(availablePlots.filter(\r\n\t\t\t\tsiteJsonsUnitPlot=>houseTypes.indexOf(siteJsonsUnitPlot.houseType)>=0\r\n\t\t\t));\r\n\t\t}\r\n\t\tplotsStillAvailable = plotsStillAvailable.concat(availablePlots.filter(\r\n\t\t\tsiteJsonsUnitPlot=>this._isInPriceRange(siteJsonsUnitPlot.price)\r\n\t\t));\r\n\t\tif(this._features!==undefined&&this._features!==null){\r\n\t\t\tconst selectedFeatureIds = this._features.map(feature=>feature.id);\r\n\t\t\tplotsStillAvailable = plotsStillAvailable.concat(availablePlots.filter(siteJsonsUnitPlot=>{\r\n\t\t\t\tfor(var feature of siteJsonsUnitPlot.features){\r\n\t\t\t\t\tif(selectedFeatureIds.indexOf(feature.id))\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}));\r\n\t\t}\r\n\t\tconst oneOfEachPlotsStillAvailable = [];\r\n\t\tplotsStillAvailable.forEach(plotStillAvailable=>{\r\n\t\t\tif(oneOfEachPlotsStillAvailable.indexOf(plotStillAvailable)<0)\r\n\t\t\t\toneOfEachPlotsStillAvailable.push(plotStillAvailable);\r\n\t\t});\r\n\t\treturn plotsStillAvailable;\r\n\t}\r\n\tget nBedroomsValues(){\r\n\t\tif(this._nBedroomsValues!==undefined&&this._nBedroomsValues!==null)\r\n\t\t\treturn this._nBedroomsValues;\r\n\t\tthis._nBedroomsValues =[];\r\n\t\tthis._availablePlots.forEach(siteJsonsUnitPlot=>{\r\n\t\t\tconst nBedrooms = siteJsonsUnitPlot.nBedrooms;\r\n\t\t\tif(this._nBedroomsValues.indexOf(nBedrooms)<0)\r\n\t\t\t\tthis._nBedroomsValues.push(nBedrooms);\r\n\t\t});\r\n\t\tthis._nBedroomsValues.sort((a, b)=>a-b);\r\n\t\treturn this._nBedroomsValues;\r\n\t}\r\n\tget nBedrooms(){\r\n\t\treturn this._nBedrooms;\r\n\t}\r\n\tset nBedrooms(value){\r\n\t\tif(this._nBedrooms===value)return;\r\n\t\tthis._nBedrooms = value;\r\n\t\tconsole.log('this._nBedrooms');\r\n\t\tconsole.log(this._nBedrooms);\r\n\t\tthis.bindingsHandler.changed('nBedrooms', value);\r\n\t\tthis._createHouseTypesAvailableWithOtherOptions();\r\n\t\tthis._createFeaturesAvailableWithOtherOptions();\r\n\t\tthis._createPriceRangeAvailableWithOtherOptions();\r\n\t\tthis.bindingsHandler.changed('plotsStillAvailable', this.getPlotsStillAvailableForSite());\r\n\t}\r\n\t_createNBedroomsAvailableWithOtherOptions(){\r\n\t\tthis._nBedroomsAvailableWithOtherOptions = [];\r\n\t\tthis._getPlotsAvailableWithOtherSelectedOptions(SelectedOptionType.NBedrooms).forEach(siteJsonsUnitPlot=>{\r\n\t\t\tconst nBedrooms = siteJsonsUnitPlot.nBedrooms;\r\n\t\t\tif(this._nBedroomsAvailableWithOtherOptions.indexOf(nBedrooms)<0)\r\n\t\t\t\tthis._nBedroomsAvailableWithOtherOptions.push(nBedrooms);\r\n\t\t});\r\n\t\tthis.bindingsHandler.changed('nBedroomsAvailableWithOtherOptions', this._nBedroomsAvailableWithOtherOptions);\r\n\t}\r\n\tget nBedroomAvailableWithOtherOptions(){\r\n\t\treturn this._nBedroomsAvailableWithOtherOptions;\r\n\t}\r\n\tget houseTypes(){\r\n\t\treturn this._houseTypes;\r\n\t}\r\n\tset houseTypes(value){\r\n\t\tif(this._houseTypes===value)return;\r\n\t\tthis._houseTypes = value;\r\n\t\tthis.bindingsHandler.changed('houseTypes', value);\r\n\t\tthis._createNBedroomsAvailableWithOtherOptions();\r\n\t\tthis._createFeaturesAvailableWithOtherOptions();\r\n\t\tthis._createPriceRangeAvailableWithOtherOptions();\r\n\t\tthis.bindingsHandler.changed('plotsStillAvailable', this.getPlotsStillAvailableForSite());\r\n\t}\r\n\t_createHouseTypesAvailableWithOtherOptions(){\r\n\t\tconst mapHouseTypeToHouseTypeViewModel = new Map();\r\n\t\tthis._houseTypesViewModel.entries.forEach(houseTypeViewModel=>{\r\n\t\t\thouseTypeViewModel.houseTypesWithSameName.forEach(houseType=>{\r\n\t\t\t\tif(!mapHouseTypeToHouseTypeViewModel.has(houseType))\r\n\t\t\t\t\tmapHouseTypeToHouseTypeViewModel.set(houseType, houseTypeViewModel);\r\n\t\t\t});\r\n\t\t});\r\n\t\tthis._houseTypeViewModelsStillAvailable = [];\r\n\t\tthis._getPlotsAvailableWithOtherSelectedOptions(SelectedOptionType.HouseType).forEach(siteJsonsUnitPlot=>{\r\n\t\t\tconst houseTypeViewModel = mapHouseTypeToHouseTypeViewModel.get(siteJsonsUnitPlot.houseType);\r\n\t\t\tif(this._houseTypeViewModelsStillAvailable.indexOf(houseTypeViewModel)<0)\r\n\t\t\t\tthis._houseTypeViewModelsStillAvailable.push(houseTypeViewModel);\r\n\t\t});\r\n\t\tthis.bindingsHandler.changed('houseTypesAvailableWithOtherOptions', this._houseTypeViewModelsStillAvailable);\r\n\t}\r\n\tget houseTypesAvailableWithOtherOptions(){\r\n\t\treturn this._houseTypeViewModelsStillAvailable;\r\n\t}\r\n\tget features(){\r\n\t\treturn this._features;\r\n\t}\r\n\tset features(value){\r\n\t\tif(this._features===value)return;\r\n\t\tthis._features = value;\r\n\t\tthis.bindingsHandler.changed('features', value);\r\n\t\tthis._createNBedroomsAvailableWithOtherOptions();\r\n\t\tthis._createHouseTypesAvailableWithOtherOptions();\r\n\t\tthis._createPriceRangeAvailableWithOtherOptions();\r\n\t\tthis.bindingsHandler.changed('plotsStillAvailable', this.getPlotsStillAvailableForSite());\r\n\t}\r\n\t_createFeaturesAvailableWithOtherOptions(){\r\n\t\tthis._featuresAvailableWithOtherOptions = [];\r\n\t\tthis._getPlotsAvailableWithOtherSelectedOptions(SelectedOptionType.Features).forEach(siteJsonsUnitPlot=>{\r\n\t\t\tsiteJsonsUnitPlot.features?.forEach(feature=>{\r\n\t\t\t\tif(this._featuresAvailableWithOtherOptions.indexOf(feature)<0)\r\n\t\t\t\t\tthis._featuresAvailableWithOtherOptions.push(feature);\r\n\t\t\t});\r\n\t\t});\r\n\t\tthis.bindingsHandler.changed('featuresAvailableWithOtherOptions', this._featuresAvailableWithOtherOptions);\r\n\t}\r\n\tget featuresAvailableWithOtherOptions(){\r\n\t\treturn this._featuresAvailableWithOtherOptions;\r\n\t}\r\n\tget priceRange(){\r\n\t\treturn this._priceRange;\r\n\t}\r\n\tset priceRange(value){\r\n\t\tif(this._priceRange===value)return;\r\n\t\tthis._priceRange = value;\r\n\t\tthis._createIsInPriceRangeLexicalClosure();\r\n\t\tthis.bindingsHandler.changed('priceRange', value);\r\n\t\tthis._createNBedroomsAvailableWithOtherOptions();\r\n\t\tthis._createHouseTypesAvailableWithOtherOptions();\r\n\t\tthis._createFeaturesAvailableWithOtherOptions();\r\n\t\tthis.bindingsHandler.changed('plotsStillAvailable', this.getPlotsStillAvailableForSite());\r\n\t}\r\n\t_createPriceRangeAvailableWithOtherOptions(){\r\n\t\tconst siteJsonsUnitPlots = this._getPlotsAvailableWithOtherSelectedOptions(SelectedOptionType.PriceRange);\r\n\t\tif((!siteJsonsUnitPlots)\r\n\t\t\t||siteJsonsUnitPlots.length<1) return null;\r\n\t\tthis._minPrice=null; this._maxPrice=null;\r\n\t\tsiteJsonsUnitPlots.forEach(siteJsonsUnitPlot=>{\r\n\t\t\tif(this._minPrice===null||siteJsonsUnitPlot.pricethis._maxPrice)\r\n\t\t\t\t this._maxPrice = siteJsonsUnitPlot.price;\r\n\t\t});\r\n\t\tthis._priceRangeAvailableWithOtherOptions = [this._minPrice, this._maxPrice];\r\n\t\tthis.bindingsHandler.changed('priceRangeAvailableWithOtherOptions', this._priceRangeAvailableWithOtherOptions);\r\n\t}\r\n\tget priceRangeAvailableWithOtherOptions(){\r\n\t\treturn this._priceRangeAvailableWithOtherOptions;\r\n\t}\r\n\t_createIsInPriceRangeLexicalClosure(){\r\n\t\tif(this._priceRange===undefined||this._priceRange===null)\r\n\t\t{\r\n\t\t\tthis._isInPriceRange = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tconst from = this._priceRange[0];\r\n\t\tconst to = this._priceRange[1];\r\n\t\tif(from!==undefined&&from!==null){\r\n\t\t\tif(to!==undefined&&to!==null){\r\n\t\t\t\tthis._isInPriceRange = (price)=>{\r\n\t\t\t\t\treturn (price>=from)&&(price<=to);\r\n\t\t\t\t};\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._isInPriceRange = (price)=>price>=from;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif(to!==undefined&&to!==null){\r\n\t\t\tthis._isInPriceRange = (price)=>price<=to;\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tthis._isInPriceRange = null;\r\n\t}\r\n}","const WhatAreYouLookingForContentType = {\r\n\tFirstOptions:'first-options'\r\n};\r\nexport default WhatAreYouLookingForContentType;","import './WhatAreYouLookingFor.css';\r\nimport PropertyBindingFactory from '../mvvm/PropertyBindingFactory';\r\nimport WhatAreYouLookingForFirstOptions from './WhatAreYouLookingForFirstOptions';\r\nimport WhatAreYouLookingForNBeds from './WhatAreYouLookingForNBeds';\r\nimport WhatAreYouLookingForFeatures from './WhatAreYouLookingForFeatures';\r\nimport WhatAreYouLookingForPrice from './WhatAreYouLookingForPrice';\r\nimport WhatAreYouLookingForHouseType from './WhatAreYouLookingForHouseType';\r\nimport WhatAreYouLookingForViewModel from '../view_models/WhatAreYouLookingForViewModel';\r\nimport ContentType from './WhatAreYouLookingForContentType';\r\nexport default class WhatAreYouLookingFor{\r\n\tconstructor({}){\r\n\t\tthis._setContent = this._setContent.bind(this);\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('what-are-you-looking-for');\r\n\t\tthis._visibleChanged = this._visibleChanged.bind(this);\r\n\t\tthis.initialize = this.initialize.bind(this);\r\n\t}\r\n\tinitialize({siteJsons, houseTypesViewModel, setFilterInSite}){\r\n\t\tconsole.log('the site jsons is ');\r\n\t\tconsole.log(siteJsons);\r\n\t\tthis._whatAreYouLookingForViewModel = new WhatAreYouLookingForViewModel({siteJsons,\r\n\t\t\thouseTypesViewModel, setFilterInSite});\r\n\t\tthis._titleElement = document.createElement('div');\r\n\t\tthis._titleElement.classList.add('title');\r\n\t\tthis._element.appendChild(this._titleElement);\r\n\t\tthis._titleElement.innerHTML = 'What are you looking for?';\r\n\t\tthis._contentElement = document.createElement('div');\r\n\t\tthis._contentElement.classList.add('content');\r\n\t\tthis._element.appendChild(this._contentElement);\r\n\t\tconsole.log('siteJsons');\r\n\t\tconsole.log(siteJsons);\r\n\t\tthis._whatAreYouLookingForNBeds = new WhatAreYouLookingForNBeds({\r\n\t\t\tsiteJsons,\r\n\t\t\twhatAreYouLookingForViewModel:this._whatAreYouLookingForViewModel\r\n\t\t});\r\n\t\tthis._whatAreYouLookingForFeatures = new WhatAreYouLookingForFeatures({\r\n\t\t\tsiteJsons,\r\n\t\t\twhatAreYouLookingForViewModel:this._whatAreYouLookingForViewModel\r\n\t\t});\r\n\t\tthis._whatAreYouLookingForPrice = new WhatAreYouLookingForPrice({\r\n\t\t\tsiteJsons,\r\n\t\t\twhatAreYouLookingForViewModel:this._whatAreYouLookingForViewModel\r\n\t\t});\r\n\t\tthis._whatAreYouLookingForHouseType = new WhatAreYouLookingForHouseType({\r\n\t\t\tsiteJsons, \r\n\t\t\thouseTypesViewModel,\r\n\t\t\twhatAreYouLookingForViewModel:this._whatAreYouLookingForViewModel\r\n\t\t});\r\n\t\tthis._whatAreYouLookingForFirstOptions = new WhatAreYouLookingForFirstOptions({\r\n\t\t\tnBeds:this._whatAreYouLookingForNBeds,\r\n\t\t\tprice:this._whatAreYouLookingForPrice,\r\n\t\t\thouseType:this._whatAreYouLookingForHouseType,\r\n\t\t\tfeatures:this._whatAreYouLookingForFeatures,\r\n\t\t\twhatAreYouLookingForViewModel:this._whatAreYouLookingForViewModel\r\n\t\t});\r\n\t\tthis._setContent(ContentType.FirstOptions);\r\n\t\tthis._propertyBindingPriceRange = PropertyBindingFactory.standard(this, this._whatAreYouLookingForViewModel,\r\n\t\t\t'visible',\r\n\t\t\tthis._visibleChanged);\r\n\t}\r\n\t_visibleChanged(value){\r\n\t\tif(value)\r\n\t\t\tthis._element.classList.add('visible');\r\n\t\telse \r\n\t\t\tthis._element.classList.remove('visible');\r\n\t}\r\n\t_setContent(contentType){\r\n\t\tif(this._currentContentElement){\r\n\t\t\tthis._element.removeChild(this._currentContentElement);\r\n\t\t}\r\n\t\tvar newContentElement;\r\n\t\tswitch(contentType){\r\n\t\t\tcase ContentType.FirstOptions:\r\n\t\t\t\tnewContentElement = this._whatAreYouLookingForFirstOptions.element;\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tthrow new Error('Not implemented');\r\n\t\t}\r\n\t\tthis._contentElement.appendChild(newContentElement);\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n}","import ReactDOM from 'react-dom';\r\nimport React, { Component } from 'react';\r\nimport './SitePlans.css';\r\nimport AssetsManager from '../assets_management/AssetsManager';\r\nimport isMobile from '../core/isMobile';\r\nimport SitePlanWrapper from './SitePlanWrapper';\r\nimport SiteJsons from '../site/SiteJsons';\r\nimport Iterator from '../core/Iterator';\r\nimport NFilteredSitePlansToShow from '../enums/NFilteredSitePlansToShow';\r\nimport HouseTypesViewModel from '../view_models/HouseTypesViewModel';\r\nimport DropdownSelectorMenu from '../components/DropdownSelectorMenu';\r\nimport Spinner from '../components/Spinner';\r\nimport Handles from '../core/Handles';\r\nimport Dialog from './Dialog';\r\nimport WhatAreYouLookingFor from '../what_are_you_looking_for/WhatAreYouLookingFor';\r\nexport default class SitePlans {\r\n\tconstructor(){\r\n\t\tthis._element = document.createElement('div');\r\n\t\tthis._element.classList.add('site-plans');\r\n\t\tthis._element.classList.add('single-site');\r\n\t\tthis._sitePlansWrapperElement= document.createElement('div');\r\n\t\tthis._sitePlansWrapperElement.classList.add('site-plans-wrapper');\r\n\t\tthis._sitePlanSelectorMenu = new DropdownSelectorMenu({\r\n\t\t\tclassNames:'site-plan-selector-menu',\r\n\t\t\tdefaultTitle:'Select Site'\r\n\t\t});\r\n\t\tthis._element.appendChild(this._sitePlanSelectorMenu.element);\r\n\t\tthis._element.appendChild(this._sitePlansWrapperElement);\r\n\t\tthis._mapSiteSlugToSitePlanWrapper = new Map();\r\n\t\tthis._createSitePlan= this._createSitePlan.bind(this);\r\n\t\tthis.initialize= this.initialize.bind(this);\r\n\t\tthis._showPlotsExplanationDialog= this._showPlotsExplanationDialog.bind(this);\r\n\t\tthis._setupSiteSelectorMenu= this._setupSiteSelectorMenu.bind(this);\r\n\t\tthis._getSiteJsonsWithPlots= this._getSiteJsonsWithPlots.bind(this);\r\n\t\tthis._loadSitesForSiteJsons= this._loadSitesForSiteJsons.bind(this);\r\n\t\tthis._getSetWindowVisibilityForSitePlan= this._getSetWindowVisibilityForSitePlan.bind(this);\r\n\t\tthis._setFilterInSitesFromWhatAreYouLookingFor= this._setFilterInSitesFromWhatAreYouLookingFor.bind(this);\r\n\t\tif(AssetsManager.configuration.whatAreYouLookingForEnabled){\r\n\t\t\tthis._whatAreYouLookingFor = new WhatAreYouLookingFor({});\r\n\t\t\tthis._element.appendChild(this._whatAreYouLookingFor.element);\r\n\t\t}\r\n\t\tthis._spinnerWrapperElement = document.createElement('div');\r\n\t\tthis._element.appendChild(this._spinnerWrapperElement);\r\n\t\tthis._spinnerHandles = new Handles();\r\n\t\tconst spinnerFactory = React.createFactory(Spinner);\r\n\t\tReactDOM.render(spinnerFactory(\r\n\t\t\t{ \r\n\t\t\t\tspinnerHandles:this._spinnerHandles, invertHandles:false\r\n\t\t\t}),\r\n\t\t\tthis._spinnerWrapperElement);\r\n\t\tthis._spinnerHandleLoading = this._spinnerHandles.take();\r\n\t}\r\n\t_setFilterInSitesFromWhatAreYouLookingFor (whatAreYouLookingForViewModel){\r\n\t\tconsole.log('_setFilterInSitesFromWhatAreYouLookingFor');\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tthis._getSiteJsonsWithPlots({andElseOr:true, whatAreYouLookingForViewModel}).then((siteJsonsWithPlots)=>{\r\n\t\t\t\tif(siteJsonsWithPlots.length>0){\t\r\n\t\t\t\t\tthis._loadSitesForSiteJsons(siteJsonsWithPlots, whatAreYouLookingForViewModel).then(resolve).catch(reject);;\t\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\t\t\t\r\n\t\t\t\tthis._getSiteJsonsWithPlots({andElseOr:false, whatAreYouLookingForViewModel}).then((siteJsonsWithPlots)=>{\r\n\t\t\t\t\tif(siteJsonsWithPlots.length>0){\t\r\n\t\t\t\t\t\tthis._loadSitesForSiteJsons(siteJsonsWithPlots, whatAreYouLookingForViewModel).then(resolve).catch(reject);\r\n\t\t\t\t\t\tthis._showPlotsExplanationDialog( \r\n\t\t\t\t\t\t\t'No plots matched all filters for any site. The active plots matched some of the filters for these sites!');\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\t\r\n\t\t\t\t\tthis._showPlotsExplanationDialog( \r\n\t\t\t\t\t\t'No available plots currently match what you’re looking for for any site, please see other available plots below');\r\n\t\t\t\t\tthis._loadSitesForSiteJsons(this._siteJsons.entries, whatAreYouLookingForViewModel)\r\n\t\t\t\t\t\t.then(resolve).catch(reject);\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t}).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_showPlotsExplanationDialog(message){\r\n\t\tDialog.create({\r\n\t\t\ttitle:'Info', \r\n\t\t\tclassName:'brochure-generation-result-dialog error',\r\n\t\t\tmessage:message,\r\n\t\t\toptions:[{text:'OK', callback:()=>{\r\n\t\t\t\t\r\n\t\t\t}}]}\r\n\t\t);\r\n\t}\r\n\t_loadSitesForSiteJsons(siteJsons, whatAreYouLookingForViewModel){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst siteJsonsIterator = new Iterator(this._siteJsons.entries);\r\n\t\t\tconst sitePlanWrappers =[];\r\n\t\t\tconst setWindowVisibilityForSitePlan = this._getSetWindowVisibilityForSitePlan();\r\n\t\t\tconst doNext = ()=>{\r\n\t\t\t\tif(!siteJsonsIterator.hasNext()){\r\n\t\t\t\t\tif(sitePlanWrappers.length>1){\r\n\t\t\t\t\t\tthis._element.classList.remove('single-site');\r\n\t\t\t\t\t\tthis._sitePlanSelectorMenu.element.classList.add('visible');\t\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis._setupSiteSelectorMenu(sitePlanWrappers);\r\n\t\t\t\t\tresolve();\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst siteJson= siteJsonsIterator.next();\r\n\t\t\t\tconst hasFilteredOptions = siteJsons.indexOf(siteJson)>=0;\r\n\t\t\t\tthis._createSitePlan(siteJson.configuration, hasFilteredOptions,\r\n\t\t\t\t\tsetWindowVisibilityForSitePlan).then((sitePlanWrapper)=>{\r\n\t\t\t\t\tsitePlanWrappers.push(sitePlanWrapper);\r\n\t\t\t\t\tif(hasFilteredOptions)\r\n\t\t\t\t\t\tsitePlanWrapper.sitePlan.setFilterInSiteFromWhatAreYouLookingFor(\r\n\t\t\t\t\t\t\twhatAreYouLookingForViewModel);\r\n\t\t\t\t\tdoNext();\r\n\t\t\t\t}).catch(reject);\r\n\t\t\t};\r\n\t\t\tdoNext();\r\n\t\t});\r\n\t}\r\n\t_setupSiteSelectorMenu(sitePlanWrappers){\r\n\t\tthis._sitePlanSelectorMenu.setEntries(\r\n\t\t\tsitePlanWrappers.map(sitePlanWrapper=>{\r\n\t\t\t\treturn {\r\n\t\t\t\tvalue:sitePlanWrapper, \r\n\t\t\t\tcallback:(e)=>sitePlanWrapper.show(),\r\n\t\t\t\ttext:sitePlanWrapper.siteName,\r\n\t\t\t\tclassNames:(sitePlanWrapper.hasFilteredOptions?'has-filtered-options':'has-no-filtered-options')\r\n\t\t\t};})\r\n\t\t);\r\n\t}\r\n\t_getSiteJsonsWithPlots({andElseOr, whatAreYouLookingForViewModel}){\r\n\t\treturn new Promise((resolve, reject)=>{\t\r\n\t\t\tconst siteJsonsWithPlots = [];\r\n\t\t\tconst iteratorSiteJsons = new Iterator(this._siteJsons.entries);\r\n\t\t\tconst doNextSiteJson = ()=>{\r\n\t\t\t\tif(!iteratorSiteJsons.hasNext()){\r\n\t\t\t\t\tresolve(siteJsonsWithPlots);\r\n\t\t\t\t}\r\n\t\t\t\tconst siteJson = iteratorSiteJsons.next();\r\n\t\t\t\tconst plotsArray = siteJson.getPlotsArray();\r\n\t\t\t\tconst plotsStillAvailable = andElseOr\r\n\t\t\t\t\t?whatAreYouLookingForViewModel.getPlotsStillAvailableForSite(siteJson)\r\n\t\t\t\t\t:whatAreYouLookingForViewModel.getPlotsStillAvailableWithOr(siteJson);\r\n\t\t\t\tfor(var plotStillAvailable of plotsStillAvailable){\r\n\t\t\t\t\tif(plotsArray.indexOf(plotStillAvailable)>=0){\r\n\t\t\t\t\t\tsiteJsonsWithPlots.push(siteJson);\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tdoNextSiteJson();\r\n\t\t\t};\r\n\t\t\tdoNextSiteJson();\r\n\t\t});\r\n\t}\r\n\tinitialize(){\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tconst doThen = ()=>{\r\n\t\t\t\tthis._spinnerHandleLoading.dispose();\r\n\t\t\t\tresolve();\r\n\t\t\t};\r\n\t\t\tconst doCatch = (err)=>{\r\n\t\t\t\tthis._spinnerHandleLoading.dispose();\r\n\t\t\t\treject(err);\r\n\t\t\t};\r\n\t\t\tif(this._whatAreYouLookingFor){\t\t\r\n\t\t\t\tthis._siteJsons = new SiteJsons();\r\n\t\t\t\tthis._siteJsons.initialize().then(()=>{\r\n\t\t\t\t\tthis._houseTypesViewModel = new HouseTypesViewModel(this._siteJsons.getPlotsArray());\r\n\t\t\t\t\tthis._whatAreYouLookingFor?.initialize({siteJsons:this._siteJsons, \r\n\t\t\t\t\t\thouseTypesViewModel:this._houseTypesViewModel, \r\n\t\t\t\t\t\tsetFilterInSite:this._setFilterInSitesFromWhatAreYouLookingFor});\r\n\t\t\t\t\t\tdoThen();\r\n\t\t\t\t}).catch(doCatch);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis._createSitePlan(AssetsManager.configuration, true, this._getSetWindowVisibilityForSitePlan())\r\n\t\t\t\t.then(doThen).catch(doCatch);\r\n\t\t});\r\n\t}\r\n\tget element(){\r\n\t\treturn this._element;\r\n\t}\r\n\t_createSitePlan(configuration, hasFilteredOptions, setWindowVisibilityForSitePlan){\r\n\t\tlet sitePlanWrapper = this._mapSiteSlugToSitePlanWrapper.get(configuration.siteSlug);\r\n\t\tif(sitePlanWrapper){\r\n\t\t\tif(hasFilteredOptions)\r\n\t\t\t\tsetWindowVisibilityForSitePlan(sitePlanWrapper);\r\n\t\t\treturn new Promise((resolve, reject)=>resolve(sitePlanWrapper));\r\n\t\t}\r\n\t\tsitePlanWrapper = new SitePlanWrapper({\r\n\t\t\tconfiguration, \r\n\t\t\tparentElement:this._sitePlansWrapperElement,\r\n\t\t\thasFilteredOptions,\r\n\t\t\tsiteJsons:this._siteJsons\r\n\t\t});\r\n\t\tthis._mapSiteSlugToSitePlanWrapper.set(configuration.siteSlug, sitePlanWrapper);\r\n\t\tthis._sitePlansWrapperElement.appendChild(sitePlanWrapper.element);\r\n\t\tif(hasFilteredOptions)\r\n\t\t\tsetWindowVisibilityForSitePlan(sitePlanWrapper);\r\n\t\treturn new Promise((resolve, reject)=>{\r\n\t\t\tsitePlanWrapper.initialize().then(()=>resolve(sitePlanWrapper)).catch(reject);\r\n\t\t});\r\n\t}\r\n\t_getSetWindowVisibilityForSitePlan(){\r\n\t\tconst nFilteredSitePlansToShow = AssetsManager.configuration.nFilteredSitePlansToShow;\r\n\t\tlet firstSitePlanWrapper = null;\r\n\t\treturn (sitePlanWrapper)=>{\r\n\t\t\tconst nExistingSitePlans = this._mapSiteSlugToSitePlanWrapper.size;\r\n\t\t\tconst isFirst = nExistingSitePlans<=1;\r\n\t\t\tif(!window.isMobile&& nFilteredSitePlansToShow===NFilteredSitePlansToShow.Two){\r\n\t\t\t\tif(isFirst){\r\n\t\t\t\t\tfirstSitePlanWrapper = sitePlanWrapper;\r\n\t\t\t\t\tsitePlanWrapper.show(true);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst isSecond = nExistingSitePlans<=2;\r\n\t\t\t\tif(isSecond){\r\n\t\t\t\t\tfirstSitePlanWrapper.fillLeftHalf();\r\n\t\t\t\t\tsitePlanWrapper.fillRightHalf();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif(isFirst)\r\n\t\t\t\tsitePlanWrapper.show(true);\r\n\t\t};\r\n\t}\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Footer.css';\r\nexport default class Footer extends Component {\r\n\tconstructor(props){\r\n\t\tsuper(props)\r\n\t}\r\n\trender() {\r\n\t\treturn (
    \r\n\t\t\t
    )\r\n\t}\r\n}\r\n","import React, {Component} from 'react';\r\nimport logo from './logo.svg';\r\nimport './App.css';\r\nimport './ZIndices.css';\r\nimport NavMenu from './components/NavMenu';\r\nimport SitePlans from './components/SitePlans';\r\nimport Footer from './components/Footer';\r\nimport GoogleAnalytics from './google/GoogleAnalytics';\r\nimport * as Sentry from \"@sentry/react\";\r\nimport { Integrations } from \"@sentry/tracing\";\r\nimport AssetsManager from './assets_management/AssetsManager';\r\nimport isMobile from './core/isMobile';\r\nimport './site_specific/current/CssVariables.css';\r\nimport './site_specific/current/Fonts.css';\r\nimport { stopReportingRuntimeErrors } from \"react-error-overlay\";\r\n\r\nif (process.env.NODE_ENV === \"development\") {\r\n stopReportingRuntimeErrors(); // disables error overlays\r\n}\r\nSentry.init({\r\n dsn: AssetsManager.configuration.sentryDSN,\r\n integrations: [new Integrations.BrowserTracing()],\r\n\r\n // Set tracesSampleRate to 1.0 to capture 100%\r\n // of transactions for performance monitoring.\r\n // We recommend adjusting this value in production\r\n tracesSampleRate: 1.0,\r\n});\r\nexport default class App extends Component{\r\n\tconstructor(props){\r\n\t\tsuper(props);\r\n\t\tthis._appRef=React.createRef();\r\n\t}\r\n\tcomponentDidMount() {\r\n\t\t\r\n\t\tthis._googleAnalytics = new GoogleAnalytics({\r\n\t\t\ttrackingCode:AssetsManager.configuration.googleAnalyticsTrackingCode,\r\n\t\t\tsiteSlug:AssetsManager.configuration.siteSlug\r\n\t\t});\r\n\t\tconst sitePlans = new SitePlans();\r\n\t\tthis._appRef.current.appendChild(sitePlans.element);\r\n\t\tif(window.isMobile)\r\n\t\t\tdocument.body.classList.add('mobile');\r\n\t\tsitePlans.initialize();\r\n\t}\r\n\trender(){\r\n\t\treturn (\r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t\t \r\n\t\t\t
    \r\n\t\t\t
    \r\n\t\t);\r\n\t}\r\n}\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' },\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}