{"version":3,"sources":["lib/breadcrumbs/BreadcrumbItem.js","lib/tree/controllers/useTreeContext.js","lib/field/EnumField.js","lib/input/BooleanInput.js","lib/list/useDatagridColumns.js","components/Label/LabelChip.js","lib/list/useColumns.js","components/Profile/ProfileReferenceInput.js","lib/button/MoreButton.js","lib/button/ShowButtonAsMenuItem.js","lib/button/EditButtonAsMenuItem.js","lib/button/CloneButtonAsMenuItem.js","lib/widget lazy /^/.//.*$/ groupOptions: {} namespace object","lib/input/JsonInput/LabeledBox.js","lib/input/JsonInput/MonacoInput.js","lib/input/JsonInput/index.js","controller/remoteStorage/useRemoteStorage.js","lib/button/RemoveButtonAsMenuItem.js","controller/event/useEventContext.js","dataProvider/GatewayService/graphqlClient.js","lib/button/DeleteButtonAsMenuItem.js","lib/list/ListActions.js","dataProvider/EventbusService/Event/typeDefs.js","lib/button/RestoreButtonAsMenuItem.js","dataProvider/DatabusService/graphqlClient.js","lib/icons/Asset.js","controller/remoteStorage/useListPresets.js","lib/list/PresetButtonMenuItem.js","lib/list/PresetButtonSaveDialog.js","lib/list/PresetButton.js","controller/webSocket/WebSocketContext.js","controller/webSocket/useWebSocketContext.js","controller/webSocket/WebSocketNotificationSnackbar.js","controller/webSocket/WebSocketNotification.js","lib/layout/LayoutSimple.js","lib/breadcrumbs/RecordBreadcrumbItem.js","lib/breadcrumbs/ShowBreadcrumbs.js","lib/button/RestoreButton.js","lib/show/ShowRemovedActions.js","lib/show/ShowView.js","lib/layout/TitleForRecord.js","lib/show/BlankShowLayout.js","lib/field/ListFieldToolbar.js","lib/button/ReferenceListLinkButton.js","lib/field/ListFieldActions.js","lib/field/ListField.js","components/Event/EventSeverityAvatar.js","lib/button/DefaultDashboardPlayIconButton.js","components/Asset/AssetRepresentationField.js","components/Event/EventBanner.js","components/Event/EventAssistant.js","components/Event/EventAside.js","components/Event/EventShow.js","components/Event/index.js","lib/icons/CalendarHistory.js","lib/list/PaginationUnlimited.js","components/EventHistory/EventHistoryListFilter.js","components/EventHistory/EventHistoryListBulkActionButtons.js","lib/icons/RefreshSettings.js","lib/hook/useIntervalWithOnce.js","controller/remoteStorage/usePoolInterval.js","controller/remoteStorage/usePoolSubscriptions.js","lib/button/RefreshSettingsButton.js","components/EventHistory/EventHistoryActions.js","components/EventHistory/EventHistoryList.js","components/EventHistory/EventHistoryShow.js","components/EventHistory/index.js","lib/list/filter/FilterButtonWithSave.js","lib/list/filter/FilterWithSave.js","lib/chart/ChartView.js","lib/chart/Chart.js","components/TagSeries/convertValue.js","components/TagSeries/Higthchart.js","components/TagSeries/highchartsOptions.js","components/TagSeries/TagSeriesEmpty.js","lib/input/CustomSelectArrayInput.js","lib/input/CustomSelectArrayInput2.js","lib/icons/Shortcut.js","lib/tree/DirectoryIcon.js","components/TagSeries/TreeTagsSelector.js","components/TagSeries/PeriodsCreate.js","components/TagSeries/TreeNodeSetpoint.js","components/TagSeries/TagSeriesListFilter.js","components/TagSeries/useExporter.js","components/TagSeries/TagSeriesList.js","components/TagSeries/index.js","lib/list/List.js","lib/field/NestedField.js","lib/input/SearchInput.js","lib/input/QuickFilterInput.js","components/Asset/AssetListFilter.js","lib/importer/utils.js","lib/importer/useXlsxImporter.js","lib/importer/useJsonImporter.js","lib/importer/booleanParser.js","lib/importer/dateParser.js","lib/importer/linkParser.js","lib/importer/jsonParser.js","lib/importer/index.js","lib/importer/useImporter.js","components/Asset/assetExportImportModel.js","lib/field/WrapperField.js","lib/button/FavoriteIconButton.js","components/Asset/AssetList.js","lib/button/CloneButton.js","lib/show/TabbedShowLayout.js","lib/icons/Deploy.js","dataProvider/GatewayService/AssetClass/typeDefs.js","dataProvider/GatewayService/AssetClass/utils.js","dataProvider/GatewayService/AssetClass/deploy.js","lib/button/SynchronizeButton.js","components/Dashboard/DashboardListFilter.js","components/Dashboard/DashboardMoreActionsButton.js","components/Dashboard/dashboardExportImportModel.js","components/Dashboard/DashboardList.js","lib/show/Show.js","components/Dashboard/DashboardAside.js","lib/button/PlayButton.js","lib/dashboard/DashboardLinkChip.js","lib/button/FavoriteButton.js","components/Dashboard/DashboardShow.js","lib/breadcrumbs/CreateBreadcrumbs.js","lib/create/CreateView.js","lib/create/Create.js","components/Dashboard/DashboardVariablesInput.js","components/Dashboard/DashboardLinksInput.js","components/Dashboard/validation.js","lib/layout/Spacer.js","components/Dashboard/DashboardCreate.js","lib/breadcrumbs/EditBreadcrumbs.js","lib/edit/EditRemovedActions.js","lib/edit/EditView.js","lib/edit/Edit.js","lib/button/RemoveWithUndoButton.js","lib/button/RemoveWithConfirmButton.js","lib/button/RemoveButton.js","components/Dashboard/DashboardEdit.js","redux/dashboard/actions.js","controller/redux/useVariables.js","controller/dashboard/useDashboardController.js","controller/dashboard/DashboardVariablesContext.js","controller/dashboard/DashboardContextProvider.js","lib/dashboard/variables/VariablesFormInput.js","lib/input/AutocompleteWithFirstChoiceAsDefaultInput.js","lib/dashboard/variables/AssetIdVariableInput.js","lib/dashboard/variables/ParameterIdVariableInput.js","lib/input/EnhancedTextInput.js","lib/dashboard/variables/RangeOnlineInput.js","lib/dashboard/variables/RangeVariableInputForm.js","lib/dashboard/variables/RangeVariableInput.js","lib/dashboard/variables/VariablesForm.js","lib/dashboard/DashboardPlayToolbar.js","lib/button/CreateWidgetOnDashboardButton.js","lib/icons/DashboardEdit.js","lib/dashboard/DashboardChangeLayoutButton.js","lib/dashboard/DashboardPlayActions.js","lib/widgetOnDashboard/WidgetOnDashboardLoading.js","lib/widgetOnDashboard/WidgetOnDashboardNotFound.js","controller/widget/useWidgetModule.js","lib/widgetOnDashboard/WidgetOnDashboardPlayPreview.js","lib/dashboard/DashboardPlayLayout.js","lib/dashboard/DashboardChangeLayoutSnackbar.js","lib/breadcrumbs/DashboardPlayBreadcrumbs.js","lib/dashboard/DashboardLinkButton.js","lib/dashboard/DashboardLinksToolbar.js","lib/dashboard/DashboardPlayViewObjectVariableAlert.js","lib/dashboard/DashboardDeleted.js","lib/dashboard/DashboardPlayView.js","lib/dashboard/DashboardPlay.js","components/Dashboard/DashboardPlay.js","components/Dashboard/index.js","components/Asset/AssetDashboardCard.js","components/Asset/AssetDashboardChip.js","lib/file/FileUploadDropzone.js","dataProvider/BlobService/graphqlUploadClient.js","dataProvider/BlobService/Blob/upload.js","lib/file/FileUploadItem.js","dataProvider/BlobService/graphqlClient.js","dataProvider/BlobService/Blob/getOne.js","lib/file/FileItem.js","lib/file/FileUploadDialog.js","dataProvider/BlobService/Blob/deleteMany.js","dataProvider/GatewayService/File/utils.js","dataProvider/GatewayService/File/createMany.js","lib/file/FileListView.js","components/File/FileListFilter.js","lib/icons/ViewTable.js","lib/icons/ViewGrid.js","lib/list/useListViewPreferences.js","lib/list/ListViewButton.js","lib/button/ExternalLinkButtonAsMenuItem.js","lib/file/FileUploadButtonAsMenuItem.js","lib/file/FileCreateButton.js","components/File/FileListActions.js","components/File/FileListBulkActions.js","lib/file/FileListFieldCreateButton.js","lib/file/FileListFieldActions.js","lib/file/FileListField.js","components/File/FileList.js","components/History/HistoryListActions.js","components/History/HistoryRevertButton.js","components/History/useHistoryExporter.js","components/History/utils.js","components/History/HistoryResourceTypeInput.js","components/History/HistoryResourceIdInput.js","components/History/HistoryListFilter.js","components/History/HistoryList.js","components/Asset/AssetDashboardsNestedArrayField.js","lib/connect/ConnectContext.js","lib/connect/ConnectLayout.js","lib/connect/ConnectChip.js","lib/connect/ConnectTagField.js","lib/connect/ConnectGroupTreeLeaf.js","lib/connect/ConnectGroupTreeNode.js","lib/connect/ConnectGroupTree.js","lib/field/ConnectGroupTreeField.js","components/Report/ReportCreateButton.js","components/Report/ReportListFieldActions.js","components/Report/ReportListField.js","components/Report/ChipTemplateChip.js","components/Report/redirect.js","components/Report/ReportPlayIconButton.js","components/Report/ReportListReference.js","components/Asset/AssetShow.js","dataProvider/ra-dataProviderFactory/buildDataProviderFactory.js","dataProvider/ra-dataProviderFactory/index.js","dataProvider/AuthenticationService/graphqlClient.js","dataProvider/AuthenticationService/Account/typeDefs.js","dataProvider/AuthenticationService/Account/utils.js","dataProvider/AuthenticationService/Account/create.js","dataProvider/AuthenticationService/Account/getList.js","dataProvider/AuthenticationService/Account/getMany.js","dataProvider/AuthenticationService/Account/getManyReference.js","dataProvider/AuthenticationService/Account/getOne.js","dataProvider/AuthenticationService/Account/update.js","dataProvider/AuthenticationService/Account/delete.js","dataProvider/AuthenticationService/Account/remove.js","dataProvider/AuthenticationService/Account/restore.js","dataProvider/AuthenticationService/Account/ban.js","dataProvider/AuthenticationService/Account/unban.js","dataProvider/AuthenticationService/Account/index.js","dataProvider/AuthenticationService/Account/deleteMany.js","dataProvider/AuthenticationService/Account/removeMany.js","dataProvider/AuthenticationService/Account/restoreMany.js","dataProvider/AuthenticationService/index.js","dataProvider/AuthorizationService/graphqlClient.js","dataProvider/AuthorizationService/Profile/typeDefs.js","dataProvider/AuthorizationService/Profile/utils.js","dataProvider/AuthorizationService/Profile/create.js","dataProvider/AuthorizationService/Profile/getList.js","dataProvider/AuthorizationService/Profile/getMany.js","dataProvider/AuthorizationService/Profile/getManyReference.js","dataProvider/PreferencesService/graphqlClient.js","dataProvider/PreferencesService/Preferences/getPreferences.js","dataProvider/AuthorizationService/Profile/getOne.js","dataProvider/PreferencesService/Preferences/setPreferences.js","dataProvider/AuthorizationService/Profile/update.js","dataProvider/AuthorizationService/Profile/delete.js","dataProvider/AuthorizationService/Profile/remove.js","dataProvider/AuthorizationService/Profile/restore.js","dataProvider/AuthorizationService/Profile/index.js","dataProvider/AuthorizationService/Profile/deleteMany.js","dataProvider/AuthorizationService/Profile/removeMany.js","dataProvider/AuthorizationService/Profile/restoreMany.js","dataProvider/AuthorizationService/Application/typeDefs.js","dataProvider/AuthorizationService/Application/utils.js","dataProvider/AuthorizationService/Application/create.js","dataProvider/AuthorizationService/Application/getList.js","dataProvider/AuthorizationService/Application/getMany.js","dataProvider/AuthorizationService/Application/getManyReference.js","dataProvider/AuthorizationService/Application/getOne.js","dataProvider/AuthorizationService/Application/update.js","dataProvider/AuthorizationService/Application/delete.js","dataProvider/AuthorizationService/Application/remove.js","dataProvider/AuthorizationService/Application/restore.js","dataProvider/AuthorizationService/index.js","dataProvider/AuthorizationService/Application/index.js","dataProvider/AuthorizationService/Application/deleteMany.js","dataProvider/AuthorizationService/Application/removeMany.js","dataProvider/AuthorizationService/Application/restoreMany.js","dataProvider/HistoryService/graphqlClient.js","dataProvider/HistoryService/History/typeDefs.js","dataProvider/HistoryService/History/utils.js","dataProvider/HistoryService/History/create.js","dataProvider/HistoryService/History/getList.js","dataProvider/HistoryService/History/getMany.js","dataProvider/HistoryService/History/getManyReference.js","dataProvider/HistoryService/History/getOne.js","dataProvider/HistoryService/History/index.js","dataProvider/HistoryService/index.js","dataProvider/EventbusService/Event/utils.js","dataProvider/EventbusService/Event/create.js","dataProvider/EventbusService/utils.js","dataProvider/EventbusService/Event/getList.js","dataProvider/EventbusService/Event/getMany.js","dataProvider/EventbusService/Event/getOne.js","dataProvider/EventbusService/Event/getEnum.js","dataProvider/EventbusService/graphqlWsClient.js","dataProvider/EventbusService/Event/subscribe.js","dataProvider/EventbusService/Event/index.js","dataProvider/EventbusService/EventHistory/typeDefs.js","dataProvider/EventbusService/EventHistory/utils.js","dataProvider/EventbusService/EventHistory/getList.js","dataProvider/EventbusService/EventHistory/getMany.js","dataProvider/EventbusService/EventHistory/getOne.js","dataProvider/EventbusService/EventHistory/getEnum.js","dataProvider/EventbusService/EventHistory/index.js","dataProvider/EventbusService/index.js","dataProvider/DatabusService/TagHistory/typeDefs.js","dataProvider/DatabusService/TagHistory/getList.js","dataProvider/DatabusService/TagHistory/index.js","dataProvider/DatabusService/TagSeries/index.js","dataProvider/DatabusService/index.js","dataProvider/GatewayService/Asset/typeDefs.js","dataProvider/GatewayService/Asset/utils.js","dataProvider/GatewayService/Asset/create.js","dataProvider/GatewayService/Asset/createMany.js","dataProvider/GatewayService/Asset/getList.js","dataProvider/GatewayService/Asset/getMany.js","dataProvider/GatewayService/Asset/getManyReference.js","dataProvider/GatewayService/Asset/getOne.js","dataProvider/GatewayService/Asset/update.js","dataProvider/GatewayService/Asset/delete.js","dataProvider/GatewayService/Asset/remove.js","dataProvider/GatewayService/Asset/restore.js","dataProvider/GatewayService/Asset/favorite.js","dataProvider/GatewayService/Asset/unfavorite.js","dataProvider/GatewayService/Asset/index.js","dataProvider/GatewayService/Asset/deleteMany.js","dataProvider/GatewayService/Asset/removeMany.js","dataProvider/GatewayService/Asset/restoreMany.js","dataProvider/GatewayService/AssetWithVariable/typeDefs.js","dataProvider/GatewayService/AssetWithVariable/utils.js","dataProvider/GatewayService/AssetWithVariable/getList.js","dataProvider/GatewayService/AssetWithVariable/getMany.js","dataProvider/GatewayService/AssetWithVariable/getManyReference.js","dataProvider/GatewayService/AssetWithVariable/index.js","dataProvider/GatewayService/AssetClass/create.js","dataProvider/GatewayService/AssetClass/createMany.js","dataProvider/GatewayService/AssetClass/getList.js","dataProvider/GatewayService/AssetClass/getMany.js","dataProvider/GatewayService/AssetClass/getManyReference.js","dataProvider/GatewayService/AssetClass/getOne.js","dataProvider/GatewayService/AssetClass/update.js","dataProvider/GatewayService/AssetClass/delete.js","dataProvider/GatewayService/AssetClass/remove.js","dataProvider/GatewayService/AssetClass/restore.js","dataProvider/GatewayService/AssetClass/favorite.js","dataProvider/GatewayService/AssetClass/unfavorite.js","dataProvider/GatewayService/AssetClass/index.js","dataProvider/GatewayService/AssetClass/deleteMany.js","dataProvider/GatewayService/AssetClass/removeMany.js","dataProvider/GatewayService/AssetClass/restoreMany.js","dataProvider/GatewayService/AssetType/typeDefs.js","dataProvider/GatewayService/AssetType/utils.js","dataProvider/GatewayService/AssetType/create.js","dataProvider/GatewayService/AssetType/createMany.js","dataProvider/GatewayService/AssetType/getList.js","dataProvider/GatewayService/AssetType/getMany.js","dataProvider/GatewayService/AssetType/getManyReference.js","dataProvider/GatewayService/AssetType/getOne.js","dataProvider/GatewayService/AssetType/update.js","dataProvider/GatewayService/AssetType/delete.js","dataProvider/GatewayService/AssetType/deleteMany.js","dataProvider/GatewayService/AssetType/remove.js","dataProvider/GatewayService/AssetType/removeMany.js","dataProvider/GatewayService/AssetType/restore.js","dataProvider/GatewayService/AssetType/restoreMany.js","dataProvider/GatewayService/AssetType/index.js","dataProvider/GatewayService/AssetDatagrid/typeDefs.js","dataProvider/GatewayService/AssetDatagrid/utils.js","dataProvider/GatewayService/AssetDatagrid/getList.js","dataProvider/GatewayService/AssetDatagrid/getMany.js","dataProvider/GatewayService/AssetDatagrid/index.js","dataProvider/GatewayService/AssetMap/typeDefs.js","dataProvider/GatewayService/AssetMap/getList.js","dataProvider/GatewayService/AssetMap/index.js","dataProvider/GatewayService/AssetMap/utils.js","dataProvider/GatewayService/AssetTree/typeDefs.js","dataProvider/GatewayService/AssetTree/getRootNodes.js","dataProvider/GatewayService/AssetTree/getChildNodes.js","dataProvider/GatewayService/AssetTree/getOne.js","dataProvider/GatewayService/AssetTree/index.js","dataProvider/GatewayService/Dashboard/typeDefs.js","dataProvider/GatewayService/Dashboard/utils.js","dataProvider/GatewayService/Dashboard/create.js","dataProvider/GatewayService/Dashboard/createMany.js","dataProvider/GatewayService/Dashboard/getList.js","dataProvider/GatewayService/Dashboard/getMany.js","dataProvider/GatewayService/Dashboard/getManyReference.js","dataProvider/GatewayService/Dashboard/getOne.js","dataProvider/GatewayService/Dashboard/update.js","dataProvider/GatewayService/Dashboard/delete.js","dataProvider/GatewayService/Dashboard/remove.js","dataProvider/GatewayService/Dashboard/restore.js","dataProvider/GatewayService/Dashboard/getEnum.js","dataProvider/GatewayService/Dashboard/favorite.js","dataProvider/GatewayService/Dashboard/unfavorite.js","dataProvider/GatewayService/Dashboard/index.js","dataProvider/GatewayService/Dashboard/deleteMany.js","dataProvider/GatewayService/Dashboard/removeMany.js","dataProvider/GatewayService/Dashboard/restoreMany.js","dataProvider/GatewayService/Widget/typeDefs.js","dataProvider/GatewayService/Widget/utils.js","dataProvider/GatewayService/Widget/create.js","dataProvider/GatewayService/Widget/createMany.js","dataProvider/GatewayService/Widget/getList.js","dataProvider/GatewayService/Widget/getMany.js","dataProvider/GatewayService/Widget/getManyReference.js","dataProvider/GatewayService/Widget/getOne.js","dataProvider/GatewayService/Widget/update.js","dataProvider/GatewayService/Widget/delete.js","dataProvider/GatewayService/Widget/remove.js","dataProvider/GatewayService/Widget/restore.js","dataProvider/GatewayService/Widget/index.js","dataProvider/GatewayService/Widget/deleteMany.js","dataProvider/GatewayService/Widget/removeMany.js","dataProvider/GatewayService/Widget/restoreMany.js","dataProvider/GatewayService/WidgetOnDashboard/typeDefs.js","dataProvider/GatewayService/WidgetOnDashboard/utils.js","dataProvider/GatewayService/WidgetOnDashboard/create.js","dataProvider/GatewayService/WidgetOnDashboard/getList.js","dataProvider/GatewayService/WidgetOnDashboard/getMany.js","dataProvider/GatewayService/WidgetOnDashboard/getManyReference.js","dataProvider/GatewayService/WidgetOnDashboard/getOne.js","dataProvider/GatewayService/WidgetOnDashboard/update.js","dataProvider/GatewayService/WidgetOnDashboard/delete.js","dataProvider/GatewayService/WidgetOnDashboard/index.js","dataProvider/GatewayService/Parameter/getList.js","dataProvider/GatewayService/Parameter/getManyReference.js","dataProvider/GatewayService/Parameter/getOne.js","dataProvider/GatewayService/Parameter/index.js","dataProvider/GatewayService/ParameterWithVariable/typeDefs.js","dataProvider/GatewayService/ParameterWithVariable/utils.js","dataProvider/GatewayService/ParameterWithVariable/getList.js","dataProvider/GatewayService/ParameterWithVariable/getMany.js","dataProvider/GatewayService/ParameterWithVariable/getManyReference.js","dataProvider/GatewayService/ParameterWithVariable/index.js","dataProvider/GatewayService/Tag/typeDefs.js","dataProvider/GatewayService/Tag/getList.js","dataProvider/GatewayService/Tag/getMany.js","dataProvider/GatewayService/Tag/index.js","dataProvider/GatewayService/TagByNode/typeDefs.js","dataProvider/GatewayService/TagByNode/utils.js","dataProvider/GatewayService/TagByNode/getList.js","dataProvider/GatewayService/TagByNode/getMany.js","dataProvider/GatewayService/TagByNode/getManyReference.js","dataProvider/GatewayService/TagByNode/index.js","dataProvider/GatewayService/Tree/typeDefs.js","dataProvider/GatewayService/Tree/getRootNodes.js","dataProvider/GatewayService/Tree/getChildNodes.js","dataProvider/GatewayService/Tree/index.js","dataProvider/GatewayService/Label/typeDefs.js","dataProvider/GatewayService/Label/utils.js","dataProvider/GatewayService/Label/create.js","dataProvider/GatewayService/Label/getList.js","dataProvider/GatewayService/Label/getMany.js","dataProvider/GatewayService/Label/getManyReference.js","dataProvider/GatewayService/Label/getOne.js","dataProvider/GatewayService/Label/update.js","dataProvider/GatewayService/Label/delete.js","dataProvider/GatewayService/Label/remove.js","dataProvider/GatewayService/Label/restore.js","dataProvider/GatewayService/Label/index.js","dataProvider/GatewayService/Label/deleteMany.js","dataProvider/GatewayService/Label/removeMany.js","dataProvider/GatewayService/Label/restoreMany.js","dataProvider/GatewayService/Catalog/typeDefs.js","dataProvider/GatewayService/Catalog/getRootNodes.js","dataProvider/GatewayService/Catalog/getChildNodes.js","dataProvider/GatewayService/Catalog/index.js","dataProvider/GatewayService/File/typeDefs.js","dataProvider/GatewayService/File/create.js","dataProvider/GatewayService/File/getList.js","dataProvider/GatewayService/File/getMany.js","dataProvider/GatewayService/File/getManyReference.js","dataProvider/GatewayService/File/getOne.js","dataProvider/BlobService/Blob/delete.js","dataProvider/GatewayService/File/delete.js","dataProvider/GatewayService/File/deleteMany.js","dataProvider/GatewayService/File/update.js","dataProvider/GatewayService/File/remove.js","dataProvider/GatewayService/File/removeMany.js","dataProvider/GatewayService/File/restore.js","dataProvider/GatewayService/File/restoreMany.js","dataProvider/GatewayService/File/index.js","dataProvider/GatewayService/index.js","dataProvider/PreferencesService/Preferences/index.js","dataProvider/PreferencesService/index.js","dataProvider/DispatcherService/graphqlClient.js","dataProvider/DispatcherService/User/typeDefs.js","dataProvider/DispatcherService/User/create.js","dataProvider/DispatcherService/User/getList.js","dataProvider/DispatcherService/User/getMany.js","dataProvider/DispatcherService/User/getManyReference.js","dataProvider/DispatcherService/User/getOne.js","dataProvider/DispatcherService/User/update.js","dataProvider/DispatcherService/User/delete.js","dataProvider/AbilityService/graphqlClient.js","dataProvider/AbilityService/Rule/typeDefs.js","dataProvider/AbilityService/Rule/utils.js","dataProvider/AbilityService/Rule/create.js","dataProvider/AbilityService/Rule/getList.js","dataProvider/AbilityService/Rule/getMany.js","dataProvider/AbilityService/Rule/getManyReference.js","dataProvider/AbilityService/Rule/getOne.js","dataProvider/AbilityService/Rule/update.js","dataProvider/AbilityService/Rule/delete.js","dataProvider/AbilityService/Rule/remove.js","dataProvider/AbilityService/Rule/restore.js","dataProvider/AbilityService/Rule/index.js","dataProvider/AbilityService/Rule/deleteMany.js","dataProvider/AbilityService/Rule/removeMany.js","dataProvider/AbilityService/Rule/restoreMany.js","dataProvider/DispatcherService/utils.js","dataProvider/DispatcherService/index.js","dataProvider/DispatcherService/User/index.js","dataProvider/AbilityService/Resource/typeDefs.js","dataProvider/AbilityService/Resource/utils.js","dataProvider/AbilityService/Resource/getMany.js","dataProvider/AbilityService/index.js","dataProvider/AbilityService/Resource/index.js","dataProvider/ReportService/graphqlClient.js","dataProvider/ReportService/Report/typeDefs.js","dataProvider/ReportService/Report/utils.js","dataProvider/ReportService/Report/create.js","dataProvider/ReportService/Report/createMany.js","dataProvider/ReportService/Report/getList.js","dataProvider/ReportService/Report/getMany.js","dataProvider/ReportService/Report/getManyReference.js","dataProvider/ReportService/Report/getOne.js","dataProvider/ReportService/Report/update.js","dataProvider/ReportService/Report/delete.js","dataProvider/ReportService/Report/remove.js","dataProvider/ReportService/Report/restore.js","dataProvider/ReportService/Report/deleteMany.js","dataProvider/ReportService/Report/removeMany.js","dataProvider/ReportService/Report/restoreMany.js","dataProvider/ReportService/Report/index.js","dataProvider/ReportService/ReportType/typeDefs.js","dataProvider/ReportService/ReportType/utils.js","dataProvider/ReportService/ReportType/getList.js","dataProvider/ReportService/ReportType/getMany.js","dataProvider/ReportService/ReportType/getManyReference.js","dataProvider/ReportService/ReportType/getOne.js","dataProvider/ReportService/index.js","dataProvider/ReportService/ReportType/index.js","dataProvider/index.js","lib/form/validate.js","lib/input/IconInput.js","components/Asset/AssetAssetClassReferenceInput.js","components/Asset/AssetCreate.js","components/Asset/AssetEdit.js","components/Asset/index.js","lib/icons/Label.js","lib/icons/CheckboxBlank.js","lib/field/ColorField.js","components/Label/LabelTypenameInput.js","components/Label/LabelListFilter.js","components/Label/LabelMoreActionsButton.js","components/Label/labelExportImportModel.js","components/Label/LabelList.js","components/Label/LabelResourcesReferenceArrayField.js","components/Label/LabelShow.js","components/Label/LabelResourcesReferenceArrayInput.js","components/Label/LabelCreate.js","components/Label/LabelEdit.js","components/Label/index.js","lib/icons/AssetClass.js","components/AssetClass/AssetClassListFilter.js","components/AssetClass/AssetClassMoreActionsButton.js","components/AssetClass/assetClassExportImportModel.js","components/AssetClass/AssetClassList.js","lib/button/DeployButton.js","lib/field/MapField.js","components/AssetClass/AssetClassAside.js","components/AssetClass/AssetClassShow.js","lib/icons/SaveAndDeploy.js","lib/button/SaveAndDeployButton.js","components/AssetClass/AssetClassCreateAndDeployButton.js","components/AssetClass/AssetClassCreate.js","components/AssetClass/AssetClassEditAndDeployButton.js","components/AssetClass/AssetClassEdit.js","components/AssetClass/index.js","components/AssetDatagrid/useGetMainList.js","components/AssetDatagrid/useListParams.js","components/AssetDatagrid/useListController.js","lib/icons/LockOpen.js","lib/field/data/DoorField.js","lib/field/data/useDataFieldStyles.js","lib/field/data/IndicatorField.js","lib/icons/PersonAlert.js","lib/field/data/IffField.js","lib/field/data/DataField.js","controller/event/useEventController.js","lib/hook/useThrottle.js","controller/event/useRecordEvents.js","lib/field/HasEventsField.js","lib/button/CallButton.js","components/AssetDatagrid/AssetDatagridExportButton.js","components/AssetDatagrid/AssetDatagridSelectColumnsMenu.js","components/AssetDatagrid/AssetDatagridSelectColumnsButton.js","components/AssetDatagrid/useListColumnsWithLocation.js","components/AssetDatagrid/AssetDatagridColumnsButtonMenuItem.js","components/AssetDatagrid/AssetDatagridColumnsButton.js","components/AssetDatagrid/AssetDatagridActions.js","components/AssetDatagrid/AssetDatagridBulkExportButton.js","dataProvider/DatabusService/Tag/writeMultiple.js","dataProvider/EventbusService/Event/createMany.js","lib/button/BulkCallButton.js","components/AssetDatagrid/AssetDatagridBulkActions.js","components/AssetDatagrid/AssetDatagridFilter.js","components/AssetDatagrid/AssetDatagridParameterField.js","components/AssetDatagrid/AssetDatagridList.js","components/AssetDatagrid/index.js","lib/icons/Map.js","components/AssetMap/AssetMapActions.js","components/AssetMap/AssetMapFilter.js","lib/map/MapView.js","components/AssetMap/useListController.js","components/AssetMap/AssetMapList.js","components/AssetMap/index.js","lib/icons/AssetTree.js","lib/breadcrumbs/TreeBreadcrumbs.js","components/AssetTree/AssetTreeView.js","components/AssetTree/useTreeControllerWithAlarm.js","lib/tree/TreeView.js","lib/tree/TreeIcon.js","components/AssetTree/AssetTreeIcon.js","lib/dashboard/DashboardPlayFieldActions.js","lib/dashboard/DashboardPlayFieldView.js","lib/dashboard/DashboardPlayField.js","components/AssetTree/AssetTreeDefaultDashboardEmpty.js","components/AssetTree/AssetTreeShowDefaultDashboardLayout.js","components/AssetTree/AssetTreeShow.js","components/AssetTree/AssetTreeList.js","components/AssetTree/index.js","components/Report/ReportListFilter.js","components/Report/reportExportImportModel.js","components/Report/ReportListActions.js","components/Report/ReportMoreActionsButton.js","components/Report/ReportList.js","lib/field/JsonField.js","components/Report/ReportShow.js","components/Report/templater.js","components/Report/ReportTemplateInput.js","components/Report/ReportCreate.js","components/Report/ReportEdit.js","components/Report/index.js","components/Widget/WidgetListFilter.js","components/Widget/widgetExportImportModel.js","components/Widget/WidgetList.js","components/Widget/WidgetShow.js","components/Widget/WidgetCreate.js","lib/input/JsonSimpleInput.js","components/Widget/WidgetEdit.js","components/Widget/index.js","components/History/HistoryShow.js","components/History/index.js","components/File/FileShow.js","lib/input/ResourceSelectInput.js","lib/input/ResourceReferenceArrayInput.js","components/File/FileResourceReferenceArrayInput.js","components/File/FileEdit.js","components/File/index.js","components/Tag/TagListFilter.js","components/Tag/tagExportImportModel.js","components/Tag/useTagExporter.js","components/Tag/TagList.js","components/Tag/TagEdit.js","components/Tag/index.js","lib/layout/menu/MenuItem.js","lib/layout/menu/MenuGroup.js","lib/layout/menu/MenuItemCollapse.js","lib/layout/menu/ResourceMenuItem.js","controller/profile/ProfileContext.js","controller/profile/useProfile.js","lib/layout/AppMenu.js","lib/layout/ToggleSidebarButton.js","controller/notification/useNoticationSettings.js","lib/hook/useInterval.js","lib/hook/useAudio.js","controller/notification/useNoticationSoundController.js","lib/events/SubscribtionEventList.js","lib/input/SilencePeriodInput.js","lib/layout/NotificationSoundButton.js","lib/input/SoundInput.js","lib/input/RepeatInput.js","lib/layout/NotificationSettingsDialog.js","lib/layout/NotificationSettingsButton.js","lib/icons/CreationOutline.js","lib/layout/NotificationAutoOpenButton.js","lib/button/NotificationsButton.js","lib/button/AppSwitcherButtonMenuItem.js","lib/button/AppSwitcherButton.js","controller/identity/IdentityContext.js","controller/account/AccountContext.js","controller/account/AccountContextProvider.js","controller/profile/ProfileContextProvider.js","controller/identity/IdentityContextProvider.js","controller/identity/useIdentity.js","lib/layout/UserMenuProfile.js","lib/layout/ProfileMenuItemLink.js","lib/layout/AccountMenuItemLink.js","authProvider/authorizationProvider/errorHandler.js","authProvider/authorizationProvider/authorize.js","lib/layout/UserMenuOtherProfileMenuItem.js","lib/layout/UserMenuOtherProfiles.js","lib/layout/ThemeSettingsMenuItem.js","lib/layout/UserMenu.js","lib/layout/DigitalClock.js","lib/layout/AppBar.js","controller/webSocket/WebSocketContextProvider.js","controller/webSocket/useWebSocketController.js","controller/event/EventContextProvider.js","controller/remoteStorage/useRemoteStorageController.js","controller/remoteStorage/RemoteStorageContextProvider.js","lib/layout/Layout.js","lib/layout/themes.js","authProvider/authenticationProvider/errorHandler.js","authProvider/authenticationProvider/login.js","authProvider/unauthorizationProvider/graphqlClient.js","authProvider/unauthorizationProvider/unauthorize.js","authProvider/abilityProvider/graphqlClient.js","authProvider/abilityProvider/getAbility.js","authProvider/index.js","i18nProvider/en.js","i18nProvider/raPreferencesLanguageRussian.js","i18nProvider/archiveDataLanguageRussian.js","i18nProvider/ru.js","i18nProvider/i18nProvider.js","i18nProvider/index.js","components/Account/AccountBannedChip.js","controller/account/useAccount.js","components/Account/AccountMeEditButton.js","components/Account/AccountMeShowBreadcrumbs.js","components/Account/AccountMeShow.js","components/Account/AccountMeEditBreadcrumbs.js","components/Account/AccountMeShowButton.js","components/Account/AccountEmailInput.js","components/Account/AccountMeEdit.js","components/Profile/ProfileMeEditBreadcrumbs.js","components/Profile/ProfileMeShowButton.js","components/Profile/ProfileMeEdit.js","components/Rule/RuleActionField.js","components/Rule/RuleSubjectField.js","components/Rule/RuleFieldsField.js","components/Rule/RuleInvertedChip.js","components/Rule/RuleDatagrid.js","components/Profile/ProfileIsDefaultChip.js","components/Profile/ProfileMeEditButton.js","components/Profile/ProfileMeShowBreadcrumbs.js","components/Profile/ProfileMeShow.js","components/WidgetOnDashboard/WidgetOnDashboardShowBreadcrumbs.js","components/WidgetOnDashboard/WidgetOnDashboardShow.js","lib/form/Toolbar.js","lib/form/TabbedFormTabs.js","lib/form/TabbedAsideFormView.js","lib/form/TabbedAsideForm.js","lib/button/PopoverButton.js","components/WidgetOnDashboard/WidgetOnDashboardReferenceWidgetInput.js","components/WidgetOnDashboard/WidgetOnDashboardReferenceWidgetPropertiesInput.js","lib/widgetOnDashboard/WidgetOnDashboardPreviewPlay.js","components/WidgetOnDashboard/WidgetOnDashboardEditAside.js","components/WidgetOnDashboard/WidgetOnDashboardCreate.js","lib/button/SaveButton.js","lib/button/SaveAndContinueButton.js","components/WidgetOnDashboard/WidgetOnDashboardEditBreadcrumbs.js","components/WidgetOnDashboard/WidgetOnDashboardEdit.js","controller/widgetOnDashboard/useWidgetOnDashboardController.js","controller/widgetOnDashboard/WidgetOnDashboardContext.js","controller/widgetOnDashboard/WidgetOnDashboardContextProvider.js","controller/widgetOnDashboard/useWidgetOnDashboardContext.js","lib/widgetOnDashboard/WidgetOnDashboardPlayActions.js","lib/widgetOnDashboard/WidgetOnDashboardPlayLayout.js","lib/breadcrumbs/WidgetOnDashboardPlayBreadcrumbs.js","lib/widgetOnDashboard/WidgetOnDashboardPlayView.js","lib/widgetOnDashboard/WidgetOnDashboardPlay.js","components/WidgetOnDashboard/WidgetOnDashboardPlay.js","components/WidgetOnDashboard/index.js","components/About/AboutShow.js","components/About/Releases/CHANGELOG.md","components/About/Releases/index.js","components/About/Releases/Releases.js","dataProvider/AbilityService/info.js","dataProvider/AuthenticationService/info.js","dataProvider/AuthorizationService/info.js","dataProvider/PreferencesService/info.js","dataProvider/BlobService/info.js","dataProvider/DatabusService/info.js","dataProvider/EventbusService/info.js","dataProvider/GatewayService/info.js","components/About/Information/useInfo.js","components/About/Information/InformationServicesList.js","components/About/Information/index.js","components/About/Information/Information.js","customRoutes.js","redux/dashboard/reducer.js","customReducers.js","components/Login/LoginForm.js","components/Login/Login.js","components/Login/index.js","lib/dashboard/DashboardPlayViewSimple.js","components/Main/MainDashboardEmpty.js","components/Main/MainDashboard.js","components/Main/index.js","defaults.js","App.js","index.js","serviceWorker/index.js","lib/icons/DocumentBox.js","lib/icons/WordBox.js","lib/icons/ExcelBox.js","lib/icons/PdfBox.js","lib/icons/ZipBox.js","lib/icons/FileChart.js","lib/file/FileIcon.js","lib/field/TextCopyField.js","dataProvider/DatabusService/graphqlWsClient.js","lib/field/UrlField.js","lib/field/DialogField.js","components/Tag/useTagValueStyles.js","components/Tag/TagValueField.js","lib/exporter/defaultFormatter.js","lib/exporter/utils.js","lib/button/ExportButton.js","appsettings.js","components/Tag/TagQualityChip.js","dataProvider/EventbusService/Event/acknowledgeMany.js","lib/button/BulkAcknowledgeButton.js","components/Event/EventList.js","lib/input/sanitizeInputRestProps.js","lib/hook/useIsomorphicLayoutEffect.js","controller/localStorage/useListColumns.js","lib/breadcrumbs/ListBreadcrumbs.js","utils.js","lib/tree/controllers/useTreeController.js","lib/tree/controllers/TreeContextProvider.js","dataProvider/GatewayService/Parameter/typeDefs.js","dataProvider/GatewayService/Parameter/utils.js","lib/list/Empty.js","lib/list/ListView.js","lib/hook/useEventCallback.js","lib/hook/useLocalStorage.js","lib/list/ColumnsButtonMenuItem.js","lib/list/ColumnsButton.js","lib/tree/CreateTreeNode.js","lib/tree/TreeComponent.js","components/Tag/TagWriteButton.js","components/Tag/convertValue.js","components/Tag/TagReadHistoryDialogChart.js","components/Tag/highchartsOptions.js","components/Tag/TagReadHistoryDialogTableList.js","components/Tag/TagReadHistoryDialog.js","dataProvider/GatewayService/Tag/getHistory.js","components/Tag/TagReadHistoryButton.js","dataProvider/EventbusService/Event/acknowledge.js","lib/button/AcknowledgeButton.js","lib/field/FileSizeField.js","lib/field/MarkdownField.js","components/Event/EventActiveField.js","components/Event/EventAckField.js","lib/icons/SeverityCritical.js","lib/icons/SeverityHigh.js","lib/icons/SeverityMedium.js","lib/icons/SeverityLow.js","components/Event/severity.js","components/Event/EventListDatagrid.js","authProvider/abilityProvider/index.js","lib/icons/Database.js","controller/data/useTagSubscription.js","lib/input/utils.js","components/Catalog/CatalogIcon.js","components/Catalog/TreeCatalogSelector.js","controller/remoteStorage/RemoteStorageContext.js","controller/event/EventContext.js","lib/field/FilePathField.js","lib/icons/CalendarAlert.js","lib/button/BulkExportButton.js","components/Event/EventSeverityIcon.js","lib/exporter/useXlsxExporter.js","lib/exporter/useJsonExporter.js","lib/exporter/useExporter.js","lib/exporter/booleanFormatter.js","lib/exporter/dateFormatter.js","lib/exporter/enumFormatter.js","lib/exporter/linkFormatter.js","lib/exporter/jsonFormatter.js","lib/exporter/index.js","lib/input/EnumInput.js","components/Asset/AssetMoreActionsButton.js","lib/field/IconField.js","lib/button/ImportButton/ImportButtonDialog.js","lib/button/ImportButton/ImportButton.js","lib/button/ImportButton/index.js","lib/button/OpenWithAppButtonAsMenuItem.js","components/Tag/TagTypeField.js","components/Parameter/ParameterAccessChip.js","lib/map/utils.js","components/Event/EventStateField.js","components/Event/EventSeverityField.js","lib/field/CustomReferenceField.jsx","components/File/FileMoreActionsButton.js","lib/icons/GRO.js","lib/icons/GRS.js","lib/icons/ValvePad.js","lib/icons/DI.js","lib/icons/Gauge.js","lib/icons/DiscreteIO.js","lib/icons/AnalogIO.js","lib/icons/LineChart.js","lib/icons/Markdown.js","lib/icons/Thermometer.js","lib/icons/Signal.js","lib/icons/Newspaper.js","lib/icons/index.js","lib/input/ColorInput/ColorPicker.js","lib/input/ColorInput/Swatch.js","lib/input/ColorInput/ColorPaletteButton.js","lib/input/ColorInput/ColorInput.js","lib/input/ColorInput/index.js","dataProvider/DatabusService/Tag/write.js","lib/field/TextField.js","components/Tag/TagListDatagrid.js","lib/map/MapMarkerIcon.js","lib/map/MapMarker.js","dataProvider/DatabusService/TagSeries/typeDefs.js","dataProvider/DatabusService/TagSeries/getList.js","lib/field/sanitizeFieldRestProps.js","controller/remoteStorage/useRemoteStorageContext.js","lib/list/ListBulkActionsToolbar.js","lib/list/ListBulkActions.js","lib/button/BulkRestoreButton.js","lib/input/CheckboxInput.js","lib/icons/Creation.js","authProvider/authorizationProvider/graphqlClient.js","authProvider/authenticationProvider/graphqlClient.js","lib/icons/ThumbUpOff.js","lib/tree/controllers/TreeContext.js","lib/tree/TreeNodeExpandIcon.js","lib/tree/TreeNodeLabel.js","controller/dashboard/DashboardContext.js","components/File/FileResourcesReferenceArrayField.js","lib/field/BooleanField.js","lib/field/PhoneNumberField.js","lib/field/SelectField.jsx","lib/hook/useMemoCompare.js","lib/button/BulkRemoveWithUndoButton.js","lib/button/BulkRemoveWithConfirmButton.js","lib/button/BulkRemoveButton.js","authProvider/authenticationProvider/refreshToken.js","authProvider/authenticationProvider/checkToken.js","lib/list/filter/FilterFormInput.js","lib/list/filter/FilterForm.js","lib/button/PlayButtonAsMenuItem.js","lib/input/MarkdownInput.js","lib/layout/Loading.js","lib/icons/Valve.js","lib/list/useListStyles.js","authProvider/authorizationProvider/refreshToken.js","authProvider/authorizationProvider/checkToken.js","lib/hook/useEventListener.js","components/File/FileIconField.js","components/File/FileMediaReportPreview.js","components/File/FileMediaScadaPreview.js","components/File/FileMediaPreviewNotFound.js","components/File/FileMediaPreview.js","components/File/FileAside.js","lib/list/tilegrid/TilegridSkeleton.js","lib/list/tilegrid/TilegridTile.js","lib/list/tilegrid/Tilegrid.js","lib/file/FilePreviewAppbar.js","lib/file/FilePreview.js","lib/file/FilePreviewList.js","components/File/FileCardMedia.js","components/File/FileCard.js","lib/tree/TreeNode.js","lib/button/DefaultDashboardPlayButtonAsMenuItem.js","lib/tree/CreateMenuItem.js","lib/icons/Cut.js","lib/tree/CutMenuItem.js","lib/icons/Paste.js","lib/tree/PasteMenuItem.js","lib/tree/DeleteMenuItem.js","lib/tree/TreeNodeLabelActionsButton.js","lib/file/utils.js","lib/show/SimpleShowLayout.js","lib/layout/EllipsisLoader.js","dataProvider/DatabusService/Tag/subscribe.js","dataProvider/GatewayService/Parameter/getMany.js","lib/field/QualityField.js","lib/field/data/DataFieldTooltip.js","components/Tag/TagValueInput.js","components/Event/EventActiveIcon.js","components/Event/EventAckIcon.js","components/Event/EventListSimpleListItem.js","lib/file/FilePreviewTitlePortal.js","components/Tag/TagWriteDialog.js","lib/map/MapConsumer.js","lib/map/MapControl.js","lib/map/MapControlToolbar.js","lib/map/MapMarkerClusterIcon.js","lib/map/MapMarkerCluster.js","lib/map/MapLayer.js","components/AssetMap/AssetMapTagsOnMapNestedField.js","components/AssetMap/AssetMapCard.js","dataProvider/DatabusService/Tag/utils.js","lib/field/NestedArrayField.js","lib/field/ResourceLinkField.js","lib/list/filter/FilterButtonMenuItem.js","lib/list/filter/FilterButton.js","lib/list/filter/Filter.js","dataProvider/graphqlErrors.js","controller/dashboard/useDashboardContext.js","lib/breadcrumbs/DashboardBreadcrumbItem.js","lib/sounds lazy /^/.//.*$/ groupOptions: {} namespace object","lib/breadcrumbs/ListBreadcrumbItem.js","lib/sounds/silent.wav","dataProvider/EventbusService/graphqlClient.js"],"names":["BreadcrumbItem","_ref","children","to","match","_objectWithoutProperties","_excluded","useRouteMatch","path","strict","sensitive","isExact","_jsx","Typography","variant","color","component","Link","RouterLink","useTreeContext","useContext","TreeContext","EnumField","className","resource","source","_ref$record","record","option","props","translate","useTranslate","enumValue","get","value","concat","_","_objectSpread","sanitizeFieldRestProps","defaultProps","addLabel","useStyles","makeStyles","theme","input","minWidth","spacing","name","getBooleanFromString","getStringFromBoolean","BooleanInput","_props$format","classes","format","helperText","label","_props$margin","margin","onBlur","onChange","onFocus","options","_props$parse","parse","validate","_props$variant","_props$nullLabel","nullLabel","_props$falseLabel","falseLabel","_props$trueLabel","trueLabel","_props$displayNull","displayNull","rest","_useInput","useInput","id","isRequired","_useInput$meta","meta","error","submitError","touched","_jsxs","TextField","select","FieldTitle","InputHelperText","classnames","sanitizeInputRestProps","MenuItem","title","useDatagridColumns","columns","useResourceContext","columnsIds","map","col","key","columnsMap","keyBy","_useListColumns","useListColumns","selectedColumns","_slicedToArray","filter","Boolean","useMemo","datagridColumn","sanitizeDatagridColumn","omit","cloneElement","column","root","backgroundColor","palette","type","grey","getContrastText","emphasize","LabelChip","basePath","parent","ChipField","useColumns","fields","fieldsSignature","JSON","stringify","compact","ProfileReferenceInput","ReferenceInput","application","APPLICATION_NAME","AutocompleteInput","optionText","choice","role","matchSuggestion","autocompleteMatchTrue","MoreButton","cellClassName","_React$useState","React","useState","_React$useState2","anchorEl","setAnchorEl","Children","toArray","length","open","handleClose","event","stopPropagation","Tooltip","enterDelay","IconButton","onClick","currentTarget","size","MoreVertIcon","Menu","onClose","field","isValidElement","LinkRef","forwardRef","ref","innerRef","ShowButton","_ref$basePath","_ref$label","_ref$icon","icon","defaultIcon","_ref$target","target","linkToRecord","ListItemIcon","fontSize","ImageEye","e","linkToEditRecord","linkType","arguments","undefined","search","reduce","acc","part","_toConsumableArray","encodeURIComponent","join","ContentCreate","EditButton","withLocationSearch","location","useLocation","CloneButtonAsMenuItem","_props$basePath","_props$label","_props$scrollToTop","scrollToTop","_props$icon","_props$omit","pathname","recordClone","lodashOmit","DateTime","now","toLocaleString","DATETIME_SHORT","state","_scrollToTop","Queue","memo","webpackAsyncContext","req","__webpack_require__","o","Promise","resolve","then","Error","code","ids","all","slice","keys","Object","module","exports","position","fontFamily","typography","padding","border","boxSizing","verticalAlign","background","display","width","LabeledBox","fullWidth","restProps","hasError","FormControl","Box","borderColor","InputLabel","htmlFor","shrink","FormHelperText","afterSubmit","allowEmpty","allowNull","alwaysOn","beforeSubmit","data","defaultValue","formatOnBlur","formClassName","initialValue","initializeForm","isEqual","limitChoicesToValue","locale","multiple","optionValue","render","subscription","textAlign","translateChoice","validateFields","loader","config","paths","vs","availableLanguages","borderBottomWidth","borderBottomStyle","borderTopLeftRadius","borderTopRightRadius","action","hover","MonacoInput","_ref2","onMount","onValidate","_props$height","height","_excluded2","_usePreferences","useTheme","usePreferences","editorRef","useRef","_useState","_useState2","markersValidate","setMarkersValidate","jsonParseValidator","useCallback","m","startLineNumber","endLineNumber","message","_useInput$input","_excluded3","handleEditorDidMount","editor","monaco","current","onDidBlurEditorText","defineTheme","base","inherit","rules","colors","editorDomNode","getDomNode","window","addEventListener","layout","requestAnimationFrame","_editorDomNode$parent","rect","parentElement","getBoundingClientRect","handleEditorChange","val","handleEditorValidation","markers","getValue","raw_value","MonacoEditor","automaticLayout","scrollBeyondLastLine","_defineProperty","enabled","JsonInput","_ref$jsonSchemas","jsonSchemas","handleMount","prew_schemas","schemas","unionBy","languages","json","jsonDefaults","setDiagnosticsOptions","language","useRemoteStorage","remoteStorage","useRemoteStorageContext","getItem","storedValue","setStoredValue","setValue","valueToStore","Function","setItem","useEffect","storage","removeButton","main","alpha","RemoveIcon","RemoveButton","_props$confirmTitle","confirmTitle","_props$confirmContent","confirmContent","_props$redirect","redirect","redirectTo","onSuccess","onFailure","_props$mutationMode","undoable","mutationMode","notify","useNotify","useRedirect","refresh","useRefresh","_useMutation","useMutation","_useMutation2","mutate","loading","setOpen","handleRemove","payload","previousData","smart_count","Fragment","disabled","style","Confirm","isOpen","content","translateOptions","inflection","humanize","singularize","onConfirm","useEventContext","EventContext","GraphQLClientConstructor","_createClass","enpoint","_classCallCheck","client","GraphQLClient","this","request","_asyncToGenerator","_regeneratorRuntime","mark","_callee","query","variables","token","wrap","_context","prev","next","checkToken","sent","setHeader","abrupt","stop","_x","_x2","apply","URI_GATEWAY_SERVICE","deleteButton","DeleteButtonAsMenuItem","_useDeleteWithConfirm","useDeleteWithConfirmController","handleDelete","ListActions","_props$exporter","exporter","_props$importer","importer","filters","_useListContext","useListContext","currentSort","displayedFilters","filterValues","showFilter","total","hasCreate","useResourceDefinition","TopToolbar","sanitizeListRestProps","context","ColumnsButton","PresetButton","ExportButton","sort","ImportButton","CreateButton","disableElevation","selectedIds","onUnselectItems","EVENT_FRAGMENT","gql","_templateObject","_taggedTemplateLiteral","restoreButton","RestoreIcon","RestoreButtonAsMenuItem","handleRestore","URI_DATABUS_SERVICE","Icon","SvgIcon","d","useListPresets","PresetButtonMenuItem","preset","index","selected","onDelete","onSelect","handleSelect","ListItemSecondaryAction","edge","DeleteOutlineIcon","defaultSubscription","submitting","pristine","valid","invalid","values","validateName","required","maxLength","PresetButtonSaveDialog","listColumns","perPage","_useListContext$displ","_useListPresets","_useListPresets2","setListPresets","handleSavePreset","previous","Dialog","DialogTitle","Form","onSubmit","keepDirtyOnReinitialize","formProps","DialogContent","DialogContentText","TextInput","DialogActions","Button","handleSubmit","history","useHistory","setFilters","setPage","setPerPage","setSort","_useListColumns2","setListColumns","listPresets","currentSet","handleClick","preventDefault","_preset$payload","_preset$payload$sort","order","push","page","removedIndex","_useState3","_useState4","saveDialogOpen","setSaveDialogOpen","hasAlreadySavedListPreset","some","CreationIcon","getContentAnchorEl","presetSelected","WebSocketContext","createContext","status","connecting","connected","services","displayName","useWebSocketContext","zIndex","snackbar","top","left","right","justifyContent","alignItems","breakpoints","up","transform","WebSocketNotificationSnackbar","_props$autoHideDurati","autoHideDuration","ContentProps","_props$transitionDura","resumeHideDuration","transitionDuration","enter","duration","enteringScreen","exit","leavingScreen","TransitionProps","other","timerAutoHide","useEventCallback","setAutoHideTimer","autoHideDurationParam","clearTimeout","setTimeout","clsx","Grow","appear","in","timeout","direction","SnackbarContent","success","contrastText","dark","warning","light","WebSocketNotification","_useWebSocketContext","notification","setNotification","webSocketSignature","messageArgs","LayoutWithoutTheme","_Component","_inherits","_super","_createSuper","_this","call","errorInfo","listen","setState","_this$props","appBar","ErrorComponent","dashboard","logout","menu","sidebar","staticContext","_this$state","_Fragment","SkipNavigationButton","appFrame","createElement","contentWithSidebar","hasDashboard","Component","DefaultAppBar","DefaultError","DefaultMenu","DefaultNotification","DefaultSidebar","EnhancedLayout","compose","connect","admin","ui","sidebarOpen","withRouter","withStyles","_appFrame","_content","createStyles","flexDirection","minHeight","default","flexGrow","marginTop","down","flexBasis","paddingTop","paddingLeft","Layout","themeOverride","themeProp","createMuiTheme","setTheme","ThemeProvider","defaultTheme","RecordBreadcrumbItem","_ref$source","ShowBreadcrumbs","contextProps","useShowContext","Breadcrumbs","DashboardBreadcrumbItem","ListBreadcrumbItem","RestoreButton","ShowRemovedActions","permissions","_useShowContext","hasEdit","hasList","can","DeleteButton","ShowView","actions","aside","breadcrumbs","defaultTitle","version","_useResourceDefinitio","deleted","finalActions","DefaultShowActions","sanitizeRestProps","TitleForRecord","DefaultShowBreadcrumbs","opacity","pointerEvents","flexWrap","noActions","marginLeft","hasShow","loaded","refetch","resourceText","sourceText","marginBottom","BlankShowLayout","classesOverride","Content","gutterBottom","noWrap","only","_root","paddingBottom","paddingRight","paper","ListToolbar","Toolbar","button","text","secondary","ReferenceListLinkButton","reference","ListFieldActions","ListField","ResourceContextProvider","ListBase","ListFieldToolbar","Pagination","DefaultListFieldActions","Paper","filterDefaultValues","hideFilter","onToggleItem","syncWithLocation","avatar","_props$record","severityThemeKey","getSeverityKey","severity","EventSeverityAvatar","Avatar","colorDefault","EventSeverityIcon","DefaultDashboardPlayIconButton","defaultDashboard","assetId","PlayArrowIcon","AssetRepresentationField","link","resourceLinkPath","getResourceLinkPath","inlineLayout","inlineField","marginRight","EventBanner","body","comment","Card","CardHeader","CardContent","SimpleShowLayout","EventActiveField","EventAckField","NumberField","DateField","showTime","ReferenceField","bullet","pos","Assistant","HeadsetMicIcon","align","EventAside","EventAssistant","EventShowBreadcrumbs","EventShowActions","_ref$redirect","AcknowledgeButton","EventShow","_controllerProps$reco","_controllerProps$reco2","controllerProps","useShowController","tag","ShowContextProvider","EventReferenceDatagrid","EventName","EventResource","EventIcon","list","EventList","show","PaginationUnlimited","labelDisplayedRows","from","severityChoices","EventHistoryListFilter","Filter","SelectInput","choices","EnumInput","resettable","NumberInput","DateTimeInput","ReferenceArrayInput","typename","AutocompleteArrayInput","EventBulkActionButtons","BulkExportButton","useInterval","callback","delay","enable","savedCallback","useIsomorphicLayoutEffect","setInterval","clearInterval","usePoolInterval","usePoolSubscriptions","subscriptionTriggers","subscriptionTriggersIdMap","poolIntervals","poolIntervalsIdMap","poolIntervalsValueMap","RefreshSettingsButton","eventbusServiceVersion","_usePoolInterval","_usePoolInterval2","poolInterval","setPoolInterval","_usePoolSubscriptions","_usePoolSubscriptions2","poolSubscriptions","setPoolSubscriptions","handleTogglePoolSubscriptions","array","newArray","indexOf","splice","arrayToggleItem","handleSelectPoolInterval","handleOpen","includes","labelArray","poolSubscriptionId","RefreshSettingsIcon","keepMounted","ListSubheader","subscriptionTrigger","poolIntervalItem","EventHistoryActions","views","model","modelExport","header","booleanFormatter","enumFormatter","dateFormatter","linkFormatter","useEventListColumns","useListStyles","sortable","EventSeverityField","EventStateField","ResourceLinkField","celllLineClamp","NestedArrayField","CustomReferenceField","trueSource","useExporter","useListController","DatagridColumns","ListContextProvider","ListView","bulkActionButtons","EventHistoryListBulkActionButtons","pagination","EventListDatagrid","EventHistoryName","EventHistoryResource","EventHistoryIcon","EventHistoryList","EventHistoryShow","form","ChartView","defaultExporter","empty","getListControllerProps","listContext","useVersion","shouldRenderEmptyPage","Title","DefaultActions","DefaultListBreadcrumbs","Empty","transition","transitions","create","flex","boxShadow","bulkActionsDisplayed","noResults","Chart","useCheckMinimumRequiredProps","falsy","modelValue","test","toString","parseFloat","Number","Highcharts","setOptions","global","useUTC","plotOptions","series","connectNulls","legend","useHTML","tooltip","crosshairs","shared","credits","lang","months","weekdays","shortMonths","resetZoom","downloadPNG","downloadJPEG","downloadPDF","downloadSVG","printChart","headerActionButton","switchButton","chartContent","setpoint_role_color","HIHI_SET","deepOrange","HI_SET","LO_SET","red","LOLO_SET","MIN","MAX","tagsSelector","useSelector","_useListContext$data","_useListContext$filte","tagsIds","_filterValues$mode","mode","tags","buildTagFromId","groups","listTagHistory","_ref2$data","item","buildIdFromTag","xAxis","parameter","asset","flat","multiY","plotLines","_ref3","_ref3$setpoints","setpoints","sp","dashStyle","axisTheme","gridLineColor","divider","minorGridLineColor","labels","primary","lineColor","tickColor","yAxis","seriesColor","chartOptions","visible","сombinedOptions","opposite","splitOptions","offset","group","gridLineWidth","maxZoom","multiYOptions","min","fromISO","period","timestamp_gte","valueOf","max","timestamp_lte","highchartsData","_ref4","timestamp","convertValue","orderBy","chart","reflow","zoomType","itemStyle","fontWeight","itemHoverStyle","itemHiddenStyle","destroy","toolbar","getResourceLabel","useGetResourceLabel","resourceName","hasFilter","periods","emptyMessage","inviteMessage","Inbox","paragraph","AutocompleteInputLoader","_ref$timeout","useTimeout","CircularProgress","emptyArray","container","suggestionsContainer","modal","chip","chipContainerFilled","chipContainerOutlined","inputRoot","inputRootFilled","inputInput","maxWidth","popperContainer","chipLabel","overflow","textOverflow","chipRoot","clipLabelsTextWidth","CustomSelectArrayInput","_classNames2","getSelectedItems","_props$optionText","_props$popperPlacemen","popperPlacement","idOverride","inputOverride","isRequiredOverride","_props$size","metaOverride","_props$options","_props$options2","labelProps","inputProps","_props$hasNotClickAwa","hasNotClickAway","_props$hasSingleSelec","hasSingleSelect","inputRef","anchorRef","selectedItems","newSelectedItems","handleBlur","handleFocus","handleUpDown","_event$target","_event$target$lastChi","lastChild","items","singleSelect","ClickAwayListener","onClickAway","InputProps","readOnly","classNames","startAdornment","Chip","tabIndex","endAdornment","InputAdornment","ArrowDropUp","ArrowDropDownIcon","Popper","placement","disablePortal","_props$choices","_props$optionValue","inputValues","inputOnChange","getSuggestionFromValue","find","deletedOptionValue","newValues","selectedValues","Set","typeIcons","ASSET","AssetIcon","blue","PARAMETER","LabelIcon","green","TEMPLATE","CategoryIcon","teal","FolderIcon","amber","badge","bottom","DirectoryIcon","Badge","anchorOrigin","vertical","horizontal","badgeContent","ShortcutIcon","overlap","headerAction","TreeTagsSelectorComponent","treeNode","nodeIds","treeState","selectedNodes","selectedId","node","tree","useTreeController","getRootNodes","debouncedHandleSearch","debounce","TreeContextProvider","hiddenLabel","placeholder","SearchIcon","TreeComponent","TreeTagsSelector","fieldPriod","fieldDatetime","format_datetime","PeriodsCreate","defaultState","sel","toFormat","minus","days","fromFormat","plus","handleChangePeriod","handleChangeFrom","handleChangeTo","handleCreate","handleChange","Grid","xs","Select","labelId","InputLabelProps","justify","iconContainer","cursor","TreeNode","_node$parameter","nodeId","TreeNodeExpandIcon","treeNodeExpandIcon","TreeNodeLabel","treeNodeLabel","getNode","isNotSetpoint","TreeItem","Array","isArray","childNodes","childNode","DefaultTreeNodeExpandIcon","DefaultTreeNodeLabel","getSelectedItemsPeriods","sitem","toUTC","getOptionValue","getOptionText","TagSeriesListFilter","enableGetChoices","q","CustomSelectArrayInput2","defaultWorksheetOptions","ySplit","records","workbook","ExcelJS","Workbook","created","Date","modified","lastPrinted","local","forEach","table","taghistory","_step","_iterator","_createForOfIteratorHelper","s","n","done","setpoint","err","f","numFmt","rows","hour","toJSDate","id_split","split","worksheet_title","worksheet","addWorksheet","autoFilter","row","addRows","downloadXLSX","xlsx","TagSeriesListActions","selectInput","TagSeriesList","TagHistotyEmpty","Higthchart","TagSeriesName","TagSeriesResource","TagSeriesIcon","List","NestedField","useRecordContext","referenceRecord","rootPath","replace","sanitizeFieldProps","SearchInput","QuickFilterInput","getSelectedItemsTags","selectedItem","catalogOptionText","AssetListFilter","TreeCatalogSelector","arrayIndexRegex","defaultParser","sanitizeResource","_objectSpread2","startsWith","buildDataFromRows","_rows","_toArray","dataRows","modelKeys","_ref3$parse","isArrayKey","parsedValue","set","setArrayValue","useImporter","booleanParser","dateParser","toISO","linkParser","jsonParser","str","isValidJson","xlsxImporter","useXlsxImporter","jsonImporter","useJsonImporter","WrapperField","FavoriteIconButton","dispatchReduxStore","dispatch","useDispatch","fetchResponse","fetchStatus","useDispatchReduxStore","handleFavorite","where","response","CRUD_UPDATE_SUCCESS","handleUnfavorite","favorite","StarIcon","StarBorderIcon","AssetList","sortBy","cellMinWidth","Datagrid","cellAction","cellButton","AssetMoreActionsButton","CloneButton","TabbedShowLayout","_props$syncWithLocati","tabs","nonNullChildren","child","tabValue","setTabValue","initialValues","Divider","tab","Route","exact","escapePath","getTabFullPath","url","TabbedShowLayoutTabs","fillRule","clipRule","SINGLE_ASSETCLASS_FRAGMENT","MULTIPLE_ASSETCLASS_FRAGMENT","_templateObject2","buildReferenceCreateInput","buildReferenceArrayCreateInput","buildNestedArrayCreateInput","buildReferenceUpdateInput","disconnect","buildReferenceArrayUpdateInput","difference","assets","assetsIds","dashboards","dashboardsIds","labelsIds","parametersOnMapIds","parametersOnMap","sanitizeInput","_ref5","createdAt","createdById","updatedAt","DEPLOY_ASSETCLASS","args","graphqlClient","_response$data","_response$data$data","catch","graphqlErrorHandler","DeployIcon","SynchronizeButton","_record$assetClass2","_record$assetClass3","_record$assetClass4","setLoading","handleDeploy","_record$assetClass","fetchStart","deploy","assetClass","finally","fetchEnd","displayedLabel","assetName","assetClassName","MuiButton","autoFocus","DashboardListFilter","DashboardMoreActionsButton","PlayButtonAsMenuItem","ShowButtonAsMenuItem","EditButtonAsMenuItem","RemoveButtonAsMenuItem","jsonFormatter","DashboardList","linkTo","Show","DashboardAside","dateTimeOptions","TextCopyField","PlayButton","PurePlayButton","nextProps","InternalLinkRef","DashboardLinkChip","DashboardIcon","clickable","InternalLinkChip","AirplayIcon","ExternalLinkChip","href","LanguageIcon","DashboardEnchaencesLinkChip","DashboardShowActions","FavoriteButton","linkToWidgetOnDashboard","DashboardShow","take","ViewBreadcrumbs","useCreateContext","CreateView","_useCreateContext","save","saving","card","DefaultCreateBreadcrumbs","onFailureRef","onSuccessRef","setOnFailure","setOnSuccess","setTransform","transformRef","Create","useCreateController","CreateContextProvider","DashboardVariablesInput","dashboardParser","dashboardFormatter","validateType","validateUrl","DashboardLinksDashboardInput","useForm","dashboardsSelector","change","DashboardLinksInput","ArrayInput","SimpleFormIterator","FormDataConsumer","formData","scopedFormData","getSource","validateAssetsIds","assetsIdsValidation","Spacer","_classnames","DashboardCreateToolbar","SaveButton","submitOnEnter","DashboardCreate","SimpleForm","multiline","EditBreadcrumbs","useEditContext","EditRemovedActions","_useEditContext","EditView","DefaultEditBreadcrumbs","dashboardId","successMessage","Edit","useEditController","EditContextProvider","RemoveWithUndoButton","RemoveWithConfirmButton","cancel","confirmPrimary","confirmWarning","iconPaddingStyle","confirmcolor","getMutationMode","DashboardEditActions","DashboardEditToolbar","DashboardEdit","DASHBOARD_CHANGE_VARIABLES","useVariables","_state$dashboard","shallowEqual","variablesOrDefault","setVariables","newVariables","changeVariables","parseWidgetsOnDashboardToLayouts","widgetsOnDashboard","layouts","widgetOnDashboard","widgetOnDashboardLayouts","breakpoint","layoutsByBreakpoint","widgetOnDashboardLayoutByBreakpoint","i","parseWidgetOnDashboardToLayouts","widgetsOnDashboardLayoutsBreakpoint","widgetOnDashboardLayoutsBreakpoint","newWidgetsOnDashboardLayoutsBreakpoint","parseLocationSearch","parseObject","useDashboardController","variablesValuesOverride","variablesValues","_props$debounce","_useVariablesRedux","useVariablesRedux","locationSearch","getDefaultVariables","_useVariablesRedux2","dashboardVariables","setDashboardVariables","_useGetOne","useGetOne","CRUD_GET_ONE","_record$variables","assetIdOverride","_record$assetsIds","_record$assetsIds2","editable","setEditable","setLayouts","_useUpdate","useUpdate","update","parsedLayouts","saveLayouts","formatWidgetOnDashboardFromLayouts","CRUD_UPDATE","searchParams","setVariablesValues","debouncedSetVariablesValues","lodashDebounce","DashboardVariablesContext","DashboardContextProvider","DashboardContext","Provider","pick","variableValues","RecordContextProvider","emptyRecord","spacer","hideButton","VariablesFormInput","variableElement","emptyText","AutocompleteWithFirstChoiceAsDefaultInput","parentId","AssetIdVariableInput","useDashboardContext","assetIds","ParameterIdVariableInput","_props$source","_props$reference","popper","EnhancedTextInput","inputText","disableClickAwayListener","handleClickAway","elevation","RangeOnlineInput","utc","CheckboxInput","pickers","gap","RangeVariableInput","handleApply","dateTo","dateFrom","online","day","range","parcedDateFrom","fromJSDate","parcedDateTo","useFormState","RangeVariableInputForm","VariablesForm","_props$classes","_props$variables","clearFix","clear","active","dirty","dirtyFields","dirtyFieldsSinceLastSubmit","dirtySinceLastSubmit","displayedVariables","errors","hasSubmitErrors","hasValidationErrors","modifiedSinceLastSubmit","submitErrors","submitFailed","submitSucceeded","validating","visited","handleFinalFormSubmit","FormSpySubscription","EnhancedVariableForm","_useDashboardContext","mutators","arrayMutators","FormSpy","_toolbar","DashboardPlayToolbar","Actions","CreateWidgetOnDashboardButton","AddCircleIcon","PureCreateWidgetOnDashboardButton","DashboardChangeLayoutButton","DashboardEditIcon","DashboardPlayActions","focus","borderRadius","shape","Loading","WidgetIcon","EllipsisLoader","NotFound","Widget","WidgetPreview","WidgetProperties","hasWidget","hasWidgetPreview","hasWidgetProperties","useWidgetModule","setModule","onModuleLoad","WidgetOnDashboardPlayPreview","widget","_useWidgetModule","WidgetOnDashboardLoading","WidgetOnDashboardNotFound","buildGridProps","_pos$x","x","_pos$y","y","Infinity","_pos$w","w","_pos$h","h","ResponsiveReactGridLayout","WidthProvider","ResponsiveGridLayout","DashboardPlayLayout","viewOnly","handleLayoutChange","currentLayout","allLayouts","onLayoutChange","xxl","xl","lg","md","sm","cols","containerPadding","rowHeight","isBounded","measureBeforeMount","isDraggable","isResizable","nestedRecord","grid","DashboardChangeLayoutSnackbar","reason","handleSave","Snackbar","DashboardPlayBreadcrumbs","DashboardLinkButton","InternalLinkButton","ExternalLinkButton","DashboardEnchaencesLinkButton","DashboardLinksToolbar","disableGutters","DashboardPlayViewObjectVariableAlert","Alert","AlertTitle","Dashboard","DashboardPlayView","DashboardDeleted","hasVariables","hasActions","hasLinks","links","dashboardVariablesLoaded","variable","every","mainContent","DefaultDashboardPlayActions","DefaultDashboardPlayBreadcrumbs","setRange","DashboardPlay","DashboardPlayLib","DashboardName","DashboardResource","edit","clicable","media","AssetDashboardChip","isDefault","dropZone","isDragAccept","isDragReject","parseHeaders","rawHeaders","headers","Headers","line","parts","shift","trim","append","uploadFetch","reject","xhr","XMLHttpRequest","method","onload","opts","statusText","getAllResponseHeaders","responseURL","responseText","Response","onerror","ontimeout","onProgress","upload","onprogress","onAbortHandler","abort","onAborted","onabort","setRequestHeader","send","uploadOptions","fetch","URI_BLOB","UPLOAD_TO_BLOB","graphqlUploadClient","progress","flexShrink","aborted","FileUploadItem","file","onUploadedFile","abortHandler","setAbortHandler","uploading","uploaded","percent","handleProgress","Math","round","throttledSetPercent","lodashThrottle","handleAborted","handleAbortHandler","handleAbort","files","console","log","ListItem","thickness","FileIcon","ListItemText","ClearIcon","GET_ONE_FILE","fileIcon","FileItem","onRemoveFile","existFile","setExistFile","filename","dialog","caption","FileUploadDialog","uploadedFiles","onCreateMany","filesUpload","setFilesUpload","hasUploading","setHasUploading","handleRemoveFile","handleUploadMany","disableEscapeKeyDown","dense","DELETE_MANY_FROM_BLOB","isInternalPath","getUrlFromPath","URI_BLOB_DOWNLOAD","urlThumbnail","pathThumbnail","resourcesIds","resources","_resourcesIdsTypename","CREATE_MANY_FILES","buildResourceReferenceArrayCreateInput","count","ListBulkActionsToolbar","hasBulkActions","DefaultListBulkActions","DefaultPagination","FileListFilter","useListViewPreferences","ListViewButton","preference","_useListViewPreferenc","_useListViewPreferenc2","prefView","setPrefView","handleMenuItemClick","view","underline","ExternalLinkButtonAsMenuItem","_props$target","rel","defaultUploadOptions","appname","namecatalog","defaultCreateOptions","guessFileType","extensions","lastIndexOf","getFileExtensions","FileUploadButtonAsMenuItem","_props$uploadOptions","_props$createOptions","createOptions","setFiles","setUploadedFiles","uploadInputRef","handleReset","handleCreateMany","createMany","uploadedFile","onConflict","deleteMany","handleFiles","fileList","isEmptyFiles","modify_files","File","handleUploadedFile","accept","FILE_ACCEPT","sanitizeButtonRestProps","handleSubmitWithRedirect","onSave","FileCreateMenu","URI_STIMULSOFT_REPORTS","URI_SCADAJS","FileCreateButton","isSmall","useMediaQuery","Fab","floating","ContentAdd","prevProps","sortment","SortButton","FileListBulkActions","BulkRestoreButton","BulkDeleteButton","BulkRemoveButton","FileListFieldCreateButton","sanitizedRestProps","fileViews","TableViewIcon","TileViewIcon","fileSortment","FileList","previewId","setPreviewId","fileRowClick","FileListView","FileListActions","rowClick","FileIconField","FileSizeField","FileMoreActionsButton","Tilegrid","FileCard","canOpen","FilePreviewList","FileAside","FileListReference","сlasses","queryOptions","FileListField","HistoryListActions","maxResults","knownRevertActions","HistoryRevertButton","resourceType","resourceId","_useUpdate2","revert","HistoryIcon","EnchaencedHistoryRevertButton","useHistoryExporter","knownResources","resourceTypes","HistoryResourceTypeInput","HistoryResourceIdInput","HistoryListFilter","ReferenceFieldDatagrid","historyRowStyle","rowRecord","rowStyle","HistoryList","typename_in","ConnectContext","buildTagsFromTree","nodes","leafs","tagIds","hasTagId","hasWriteTagId","accessLevel","ConnectLayout","tag_in","dataTags","setDataTags","tagControllerProps","useTagSubscription","prewProps","_tagControllerProps$d","ConnectChip","_useContext","PowerOffIcon","PowerIcon","ConnectTagField","connectContext","tagsMap","tagId","tagWriteId","tagWrite","writeValue","quality","expanded","labelName","ConnectGroupTreeLeaf","TagValueField","TagQualityChip","TagReadHistoryButton","TagWriteButton","expandIcon","ConnectGroupTreeNode","ConnectGroupTree","setExpanded","TreeView","onNodeToggle","defaultCollapseIcon","FolderOpenIcon","defaultExpandIcon","ConnectGroupTreeField","isEmpty","ReportCreateMenu","queryParams","ReportCreateButton","ReportListFieldActions","ChipTemplateChip","hasTemplate","reportRedirectView","reportRedirectEdit","ReportPlayIconButton","ReportListReference","ReportListField","AssetShowActions","AssetShow","Tab","IconField","withName","ReferenceArrayField","SingleFieldList","AssetDashboardsNestedArrayField","TagListReferenceDatagrid","resourceAssetId","ReferenceHistoryDatagrid","dataProviderFactory","resolveMap","Proxy","params","resolver","buildDataProviderFactory","URI_AUTHENTICATION_SERVICE","ACCOUNT_FRAGMENT","dataKey","banned","confirmPassword","CREATE_ACCOUNT","GET_LIST_ACCOUNTS","GET_MANY_ACCOUNTS","GET_MANY_REFERENCE_ACCOUNTS","GET_ONE_ACCOUNT","UPDATE_ACCOUNT","DELETE_ACCOUNT","REMOVE_ACCOUNT","RESTORE_ACCOUNT","BAN_ACCOUNT","UNBAN_ACCOUNT","Account","getList","_args$pagination","_args$sort","toLowerCase","_response$data2","_response$data2$data","pageInfo","totalItems","getMany","getManyReference","getOne","delete","deleteMutation","results","remove","removeMany","restore","restoreMany","ban","unban","URI_AUTHORIZATION_SERVICE","PROFILE_FRAGMENT","account","preferences","CREATE_PROFILE","GET_LIST_PROFILES","GET_MANY_PROFILES","GET_MANY_REFERENCE_PROFILES","URI_PREFERENCES_SERVICE","GET_PREFERENCESS","GET_ONE_PROFILE","SET_PREFERENCES","UPDATE_PROFILE","setPreferences","DELETE_PROFILE","REMOVE_PROFILE","RESTORE_PROFILE","Profile","getPreferences","APPLICATION_FRAGMENT","CREATE_APPLICATION","GET_LIST_APPLICATIONS","GET_MANY_APPLICATIONS","GET_MANY_REFERENCE_APPLICATIONS","GET_ONE_APPLICATION","UPDATE_APPLICATION","DELETE_APPLICATION","REMOVE_APPLICATION","RESTORE_APPLICATION","Application","URI_HISTORY_SERVICE","HISTORY_FRAGMENT","CREATE_HISTORY","GET_LIST_HISTORIES","_args$filter","_args$filter2","profiles","getListProfile","createdById_in","p","buildFilter","t0","catalog","otherFilter","catalogFilter","parentIds","c","GET_MANY_HISTORIES","GET_MANY_REFERENCE_HISTORIES","GET_ONE_HISTORY","History","description","CREATE_EVENT","GET_LIST_ASSETS_IDS","assetLabelsFilter","assetLabelsAndIds","assetLabelsNotAndIds","requestParams","labelsAndIds","labelsNotAndIds","assetGraphqlClient","obj","buildAssetLabelsFilter","resource_in","GET_LIST_EVENTS","GET_MANY_EVENTS","GET_ONE_EVENT","GET_ENUMS","graphqlWsClient","tokenExpiryTimeout","createClient","keepAlive","lazy","shouldRetry","retryAttempts","retryWait","_retryWait","connectionParams","_connectionParams","_callee2","_context2","authorization","reload","on","socket","tokenExpiresIn","getCurrentTokenExpiresIn","readyState","WebSocket","OPEN","close","WS_EVENTBUS_SERVICE","SubscribeGraphqlWs","observerOrNext","onError","onComplete","unsubscribe","subscribe","complete","arg","resubscribe","Event","getEnum","enumValues","EVENT_HISTORY_FRAGMENT","GET_LIST_EVENT_HISTORIES","GET_MANY_EVENT_HISTORIES","GET_ONE_EVENT_HISTORY","EventHistory","GET_LIST_TAGHISTORY","TagHistory","TagSeries","SINGLE_ASSET_FRAGMENT","MULTIPLE_ASSET_FRAGMENT","_templateObject3","filesIds","treeConfiguration","CREATE_ASSET","CREATE_MANY_ASSETS","GET_LIST_ASSETS","GET_MANY_ASSETS","GET_MANY_REFERENCE_ASSETS","GET_ONE_ASSET","UPDATE_ASSET","DELETE_ASSET","REMOVE_ASSET","RESTORE_ASSET","FAVORITE_ASSET","UNFAVORITE_ASSET","Asset","buildNestedArrayUpdateInput","unfavorite","EMBEDED_ASSET_FRAGMENT","variableAsset","AssetWithVariable","_response$data3","_response$data3$data","_response$data4","_response$data4$data","_response$data5","_response$data6","_response$data7","_response$data7$data","CREATE_ASSETCLASS","CREATE_MANY_ASSETCLASSES","GET_LIST_ASSETCLASSES","GET_MANY_ASSETCLASSES","GET_MANY_REFERENCE_ASSETCLASSES","GET_ONE_ASSETCLASS","UPDATE_ASSETCLASS","DELETE_ASSETCLASS","REMOVE_ASSETCLASS","RESTORE_ASSETCLASS","FAVORITE_ASSETCLASS","UNFAVORITE_ASSETCLASS","AssetClass","SINGLE_ASSET_TYPE_FRAGMENT","MULTIPLE_ASSET_TYPE_FRAGMENT","CREATE_ASSET_TYPE","CREATE_MANY_ASSET_TYPES","_templateObject4","DELETE_ASSET_TYPE","_templateObject5","GET_LIST_ASSET_TYPES","_templateObject6","GET_MANY_ASSET_TYPES","_templateObject7","GET_MANY_REFERENCE_ASSET_TYPES","_templateObject8","GET_ONE_ASSET_TYPE","_templateObject9","REMOVE_ASSET_TYPE","_templateObject10","RESTORE_ASSET_TYPE","_templateObject11","UPDATE_ASSET_TYPE","_templateObject12","parseData","classesIds","formatInput","_response$data2$pageI","filterOverride","_delete","ASSETDATAGRID_FRAGMENT","GET_LIST_ASSETSDATAGRID","tagsFilter","buildSort","fieldArray","buildParameters","parameters","GET_MANY_ASSETSDATAGRID","AssetDatagrid","_params$pagination","_params$sort","ASSETMAP_FRAGMENT","GET_LIST_ASSETMAP","AssetMap","tagsOnMap","CATALOG_WITH_CHIDREN_FRAGMENT","CATALOG_FRAGMENT","GET_ROOT_CATALOG","GET_CHILDS_CATALOG","GET_ONE_CATALOG","Catalog","getChildNodes","SINGLE_DASHBOARD_FRAGMENT","MULTIPLE_DASHBOARD_FRAGMENT","assetClassesIds","assetClasses","_ref6","_ref7","linksIds","variablesIds","widgetsOnDashboardIds","CREATE_DASHBOARD","CREATE_MANY_DASHBOARDS","GET_LIST_DASHBOARDS","GET_MANY_DASHBOARDS","GET_MANY_REFERENCE_DASHBOARDS","GET_ONE_DASHBOARD","UPDATE_DASHBOARD","DELETE_DASHBOARD","REMOVE_DASHBOARD","RESTORE_DASHBOARD","FAVORITE_DASHBOARD","UNFAVORITE_DASHBOARD","currentIds","previousIds","currentMap","previousMap","intersection","SINGLE_WIDGET_FRAGMENT","MULTIPLE_WIDGET_FRAGMENT","CREATE_WIDGET","CREATE_MANY_WIDGETS","GET_LIST_WIDGETS","GET_MANY_WIDGETS","GET_MANY_REFERENCE_WIDGETS","GET_ONE_WIDGET","UPDATE_WIDGET","DELETE_WIDGET","REMOVE_WIDGET","RESTORE_WIDGET","SINGLE_WIDGETONDASHBOARD_FRAGMENT","MULTIPLE_WIDGETONDASHBOARD_FRAGMENT","buildReferenceCreateRequiredInput","buildReferenceUpdateRequiredInput","CREATE_WIDGETONDASHBOARD","GET_LIST_WIDGETONDASHBOARDS","GET_MANY_WIDGETONDASHBOARDS","GET_MANY_REFERENCE_WIDGETONDASHBOARDS","GET_ONE_WIDGETONDASHBOARD","UPDATE_WIDGETONDASHBOARD","DELETE_WIDGETONDASHBOARD","WidgetOnDashboard","GET_LIST_PARAMETERS","PARAMETER_FRAGMENT","GET_MANY_REFERENCE_PARAMETERS","GET_ONE_PARAMETER","Parameter","variableParameter","GET_MANY_PARAMETERS","ParameterWithVariable","TAG_FRAGMENT","GET_LIST_TAGS","buildAseetFilter","buildAseetsFilter","buildParameterFilter","buildParametersFilter","GET_MANY_TAGS","Tag","MULTIPLE_TAG_BY_NODE_FRAGMENT","sanitizeData","GET_LIST_TAG_BY_NODE","GET_MANY_TAG_BY_NODES","GET_MANY_REFERENCE_TAG_BY_NODES","TagByNode","NODE_FRAGMENT","GET_ROOT_NODES","GET_CHILD_NODES","Tree","LABEL_FRAGMENT","CREATE_LABEL","GET_LIST_LABELS","GET_MANY_LABELS","GET_MANY_REFERENCE_LABELS","GET_ONE_LABEL","UPDATE_LABEL","DELETE_LABEL","REMOVE_LABEL","RESTORE_LABEL","Label","FILE_FRAGMENT","CREATE_FILE","GET_LIST_FILES","GET_MANY_FILES","GET_MANY_REFERENCE_FILES","DELETE_FROM_BLOB","DELETE_FILE","DELETE_MANY_FILES","UPDATE_FILE","REMOVE_FILE","REMOVE_MANY_FILES","RESTORE_FILE","RESTORE_MANY_FILES","avaliableFilter","resultFilter","buildResourceReferenceArrayUpdateInput","AssetType","AssetTree","Preferences","setPreference","URI_DISPATCHER_SERVICE","SINGLE_USER_FRAGMENT","MULTIPLE_USER_FRAGMENT","CREATE_USER","GET_LIST_USERS","GET_MANY_USERS","GET_MANY_REFERENCE_USERS","GET_ONE_USER","UPDATE_USER","DELETE_USER","URI_ABILITY_SERVICE","RULE_FRAGMENT","CREATE_RULE","GET_LIST_RULES","GET_MANY_RULES","GET_MANY_REFERENCE_RULES","GET_ONE_RULE","UPDATE_RULE","DELETE_RULE","REMOVE_RULE","RESTORE_RULE","Rule","sanitizeUndefinedinput","sanitizedValue","User","mainDashboard","profile","_params$pagination2","_params$sort2","_response$data5$data","_response$data6$data","userInput","rule","_response$data8","_response$data8$data","_response$data9","_response$data9$data","RESOURCE_FRAGMENT","GET_MANY_RESOURCES","AbilityServiceResource","_ids$","URI_REPORTS_SERVICE","SINGLE_REPORT_FRAGMENT","MULTIPLE_REPORT_FRAGMENT","CREATE_REPORT","CREATE_MANY_REPORTS","GET_LIST_REPORTS","GET_MANY_REPORTS","GET_MANY_REFERENCE_REPORTS","GET_ONE_REPORT","UPDATE_REPORT","DELETE_REPORT","REMOVE_REPORT","RESTORE_REPORT","Report","SINGLE_REPORTTYPE_FRAGMENT","MULTIPLE_REPORTTYPE_FRAGMENT","GET_LIST_REPORTTYPES","GET_MANY_REPORTTYPES","GET_MANY_REFERENCE_REPORTTYPES","GET_ONE_REPORTTYPE","ReportType","dataProvider","AuthenticationService","AuthorizationService","HistoryService","GatewayService","EventbusService","DatabusService","PreferencesService","DispatcherService","AbilityService","ReportService","PHONE_REGEX","PASSWORD_REGEX","memoize","fn","lodashMemoize","_len","_key","asyncUnique","isLatitude","isFinite","abs","isLongitude","wait","leadingValue","TypeError","resolveList","_len2","arguments_","_key2","shouldCallNow","before","result","_i","_resolveList","allValues","prewValue","_yield$dataProvider$g","initial","_x3","phone","regex","password","passwordConfirmed","confirm","_choicesMap$input$val","disableValue","emptyValue","onCreate","_props$InputProps","choicesMap","_useChoices","useChoices","getChoiceText","getChoiceValue","getDisableValue","renderEmptyItemOption","renderMenuItem","ResettableTextField","clearAlwaysVisible","SelectProps","renderValue","icons","a","b","localeCompare","crudGetMatching","crudGetOne","filterToQuery","setFilter","setPagination","validation","AssetAssetClassReferenceInput","assetClassesSelector","validateId","AssetCreateToolbar","AssetCreate","IconInput","AssetEditActions","AssetEditToolbar","AssetEdit","AssetName","AssetResource","fill","rx","ColorField","hex","CheckboxBlankIcon","LabelTypenameInput","LabelListFilter","LabelMoreActionsButton","isSystem","LabelList","BooleanField","LabelResourcesReferenceArrayField","LabelShowActions","LabelShow","showLabel","LabelResourcesReferenceArrayInput","validateTypeName","LabelCreateToolbar","LabelCreate","ColorInput","LabelEditActions","LabelEditToolbar","LabelEdit","LabelName","LabelResource","AssetClassListFilter","cloneOmit","AssetClassMoreActionsButton","AssetClassList","DeployButton","MapField","coordinates","latlong","lat","lng","mapOptions","zoom","center","attributionControl","MapContainer","TileLayer","attribution","Marker","LeafletMarkerIcon","Popup","AssetdAside","AssetClassShowActions","AssetClassShow","AssetClassAside","SaveAndDeploy","leftIcon","SaveAndDeployButton","formContext","useFormContext","_useSaveContext","useSaveContext","setOnSave","AssetClassCreateAndDeployButton","disabledOverride","useDataProvider","responseUpdate","responseDeploy","AssetClassCreateToolbar","AssetClassCreate","AssetClassEditAndDeployButton","AssetClassEditActions","AssetClassEditToolbar","AssetClassEdit","AssetClassName","AssetClassResource","AssetClassIcon","defaultIds","defaultData","isDataLoaded","finalTotal","useGetMainList","requestSignature","_useQueryWithStore","useQueryWithStore","mainIds","mainTotal","finalIds","allRecords","_useQueryWithStore$da","emptyObject","defaultSort","SORT_ASC","defaultParams","validQueryParams","parseQueryFromLocation","pickBy","v","k","getQuery","queryFromLocation","hasCustomParams","getNumberOrDefault","possibleNumber","parsedNumber","parseInt","isNaN","useListParams","_ref$sort","_ref$perPage","_ref$debounce","reduxState","tempParams","isMounted","useIsMounted","changeListParams","changeParams","queryReducer","SET_PAGE","SET_SORT","newPage","newPerPage","SET_PER_PAGE","displayedFilterValues","debouncedSetFilters","SET_FILTER","removeEmpty","filterName","HIDE_FILTER","SHOW_FILTER","_props$sort","_props$perPage","_useListParams","_useListParams2","queryModifiers","_useRecordSelection","useRecordSelection","_useRecordSelection2","selectionModifiers","_useGetMainList","CRUD_GET_LIST","totalPages","ceil","toggle","clearSelection","DoorField","locales","LockOpenIcon","titleAccess","LockIcon","useDataFieldStyles","qualityBad","disabledOpacity","IndicatorField","_props$inverted","inverted","ErrorIcon","CheckCircleIcon","IffField","PersonAlert","PersonIcon","getEmptyText","DataField","floatNumberOptions","SelectField","intNumberOptions","UrlField","EnhancedDataField","isNull","showWriteValue","DataFieldTooltip","events","priority_gte","useEventController","authenticated","useAuthState","setVersion","_useLocalStorage","useLocalStorage","_useLocalStorage2","indicator","setIndicator","throttledVersion","limit","throttledValue","setThrottledValue","lastRan","handler","useThrottle","resetIndicator","onNext","_next$data","_next$data$data","_next$data2","_next$data2$data","mutation","timestampSrv","prevState","hasActive","hasUnack","ack","ackRequired","hasActiveUnack","useRecordEvents","selector","HasEventsField","resorceEvents","resorceActiveEvents","hasEvent","hasAlarm","NotificationsActiveIcon","NotificationsIcon","NotificationsNoneIcon","CallButton","handleConnect","writeTag","parameterId","CallIcon","DownloadIcon","_props$maxResults","customExporter","exporterFromContext","handleXlsxExport","xlsxExporter","fetchRelatedRecords","handleJsonExport","jsonExporter","checkbox","listItem","visibility","dragHandleIcon","useListColumnsWithLocation","locationColumnsSignature","initColumns","AssetDatagridColumnsButtonMenuItem","checked","handleToggle","Checkbox","disableRipple","getFieldLabelTranslationArgs","DragIndicatorIcon","outline","maxHeight","WebkitOverflowScrolling","overflowY","AssetDatagridColumnsButton","searchText","setSearchText","_useGetList","useGetList","_useGetList$data","_useGetList$ids","_useListColumnsWithLo","_useListColumnsWithLo2","columnsChoices","assetsChoices","parametersChoices","_parameter$unit","unit","uniqBy","choicesIds","mergedChoices","columnName","handleDrop","addedIndex","arrayMoveImmutable","TableChartIcon","Popover","PaperProps","MenuList","onKeyDown","Container","dragHandleSelector","lockAxis","onDrop","Draggable","AssetDatagridActions","AssetDatagridExportButton","WRITE_MULTIPLE_TAGS","writeMultiple","id_in","CREATE_MANY_EVENTS","BulkCallButton","unselectAll","useUnselectAll","writeMultipleTags","createManyEvents","priority","AssetDatagridBulkActions","AssetDatagridBulkExportButton","AssetDatagridFilter","AssetDatagridParameterField","hideDefault","getExportFormatFunction","defaultAssetColumns","AssetDatagridList","_listColumns$reduce","assetColumns","parametersColumns","sortedParametersColumns","setParameters","setParametersSignature","useParameters","AssetFields","assetFields","useAssetFields","ParameterFields","useParameterFields","DatagridFields","datagridFields","datagridFieldsMap","datagridField","useDatagridFields","getParametersExportModel","AssetDatagridName","AssetDatagridResource","AssetDatagridIcon","MapView","merge","AssetMapList","GEO","value_isNotNull","AssetMapActions","AssetMapFilter","MapLayer","MapMarker","AssetMapCard","AssetMapName","AssetMapResource","AssetMapIcon","TreeBreadcrumbs","RATreeView","_props$linkTo","changeSelect","enableSearch","_useTreeContext","matches","RegExp","exec","handleSearch","ExpandMoreIcon","ChevronRightIcon","onNodeSelect","Switch","routeProps","WithPermissions","decodeURIComponent","DefaultTreeBreadcrumbs","useTreeControllerWithAlarm","_useTreeController","setTree","tagGroupByAssetId","newTree","folder","TreeIcon","alarm","unack","animationName","animationDuration","animationTimingFunction","animationIterationCount","animationPlayState","AssetTreeIcon","isAlarm","isUnack","propTypes","PropTypes","string","object","bool","DashboardPlayFieldView","DefaultDashboardPlayFieldActions","DashboardPlayField","_props$record$default","hasDefaultDashboard","AssetTreeDefaultDashboardEmpty","AssetTreeShow","AssetTreeShowDefaultDashboardLayout","AssetTreeList","AssetTreeView","AssetTreeName","AssetTreeResource","WidgetListFilter","ReportListActions","ReportMoreActionsButton","OpenWithAppButtonAsMenuItem","app","ReportList","ReportListFilter","JsonField","shorter","easing","easeOut","jsObject","JSONInput","confirmGood","contentBox","background_warning","number","colon","keys_whiteSpace","primitive","ReportShow","srcresource","ReportTemplateInput","inputData","inputMeta","report","_report$Dictionary","dataSources","Dictionary","DataSources","uniq","_dataSources$key$Name","Name","replaceAll","strTemplateJsonReport","strJsonReport","encodeToTemplate","templatedJsonReport","dataSourceId","decodeFromTemplate","ReportCreateToolbar","ReportCreate","ReportEditToolbar","ReportEdit","ReportName","ReportResource","ReportIcon","WidgetList","WidgetShow","initialDefaultGridValue","WidgetCreate","sanitizeEmptyValues","WidgetEditToolbar","WidgetEdit","WidgetName","WidgetResource","jsonField","flexStart","HistoryShowActions","HistoryFilter","HistoryShow","HistoryName","HistoryResouce","FileShow","FilePathField","replaceValue","FileResourcesReferenceArrayField","ResourceSelectInput","ResourceReferenceArrayInput","sourceTypeName","getEnableGetChoices","FileResourceReferenceArrayInput","fileResourcelabel","FileEditActions","FileEditToolbar","FileEdit","FileName","FileResource","TagListFilter","cellActionRight","cellActionLeft","TagList","componentClasses","ParameterAccessChip","TagTypeField","TagEditActions","TagEditToolbar","TagEdit","typeName","TagName","TagResource","TagIcon","NavLinkRef","NavLink","isActive","sidebarIsOpen","handleMenuTap","translatedLabel","MuiMenuItem","activeClassName","primaryTypographyProps","menuGroup","menuGroupTitle","MenuGroup","childrens","collapse","_usePreferences2","menuIsCollapse","setMenuIsCollapse","Collapse","unmountOnExit","disablePadding","sidebarIsClosed","listitemText","shortest","ResourceMenuItem","resourceMenuItemProps","ProfileContext","useProfile","AppMenu","onMenuClick","_usePermissions","usePermissions","router","HomeIcon","MenuItemCollapse","TodayIcon","HelpIcon","NewReleasesIcon","InfoIcon","menuButton","menuButtonIconClosed","sharp","menuButtonIconOpen","ToggleSidebarButton","sidebarPref","setSidebarPref","stateRef","setSidebarVisibility","toggleSidebar","MenuIcon","initialStorage","sound","repeat","silencePeriod","silenceTo","autoOpen","useNoticationSettings","useAudio","refreshSignature","audio","Audio","setLoaded","pause","removeEventListener","useNoticationSoundController","_useEventContext","_useNoticationSetting","_useNoticationSetting2","_useNoticationSetting3","setSettings","setUrl","_useAudio","_useAudio2","enableRepeat","getSoundUrl","useIntervalWithOnce","play","silenced","SubscribtionEventList","_useEventContext$even","activeUnackEvents","subheader","EventListSimpleListItem","silencePeriodChoices","SilencePeriodInput","silencePeriodMap","SoundOffIconButton","soundOff","newSilenceTo","milliseconds","VolumeOffIcon","VolumeUpIcon","soundChoices","SoundInput","repeatChoices","RepeatInput","NotificationSettingsDialog","settings","NotificationSettingsIconButton","notificationSettings","setNotificationSettings","SettingsIcon","NotificationAutoOpenButton","CreationOutlineIcon","swing","animation","transformOrigin","NotificationsButton","buttonRef","_useNoticationSoundCo","hasEvents","NotificationsOffIcon","NotificationSettingsButton","NotificationSoundButton","CloseIcon","titleTypographyProps","menuItem","AppSwitcherButtonMenuItem","ListItemAvatar","alt","src","charAt","toUpperCase","AnchorOrigin","TransformOrigin","AppSwitcherButton","applications","AppsIcon","IdentityContext","idetity","AccountContext","AccountContextProvider","identity","ProfileContextProvider","IdentityContextProvider","versionContext","_useGetIdentity","useGetIdentity","IdentityContextProviderVersionaly","_createElement","useIdentity","UserMenuProfile","_profile$role","ProfileMenuItemLink","tooltipProps","AccountMenuItemLink","AccountIcon","AuthorizationError","_Error","_wrapNativeSuper","errorHandler","_error$extensions","_error$extensions2","errorCode","errorTranslateKey","translate_key","AUTHORIZE_MUTATION","UserMenuOtherProfileMenuItem","authorize","setCookie","AUTHORIZATION_TOKEN_COOKIE","domain","DOMAIN_COOKIE","AUTHORIZATION_REFRESH_TOKEN_COOKIE","refreshToken","deleteCookie","UserMenuOtherProfiles","_profile$account","_profile$account2","ThemeSettingsMenuItem","handleTogglePaletteType","Brightness4Icon","Brightness7Icon","AccountCircle","user","userButton","textTransform","UserMenu","startIcon","fullName","disableScrollLock","DigitalClock","setLocale","date","setDate","refreshClock","timerId","DATE_HUGE","TIME_WITH_SECONDS","whiteSpace","MyAppBar","_props$color","userMenu","isXSmall","HideOnScroll","AppBar","LoadingIndicator","WebSocketContextProvider","statusPriority","ERROR","DISCONNECTED","RECONNECTING","CONNECTING","RECONNECTED","CONNECTED","NONE","useWebSocketController","eventbusService","setEventbusService","_useState5","_useState6","databusService","setDatabusService","graphqlWsClientEventbus","prew","graphqlWsClientDatabus","statuses","aggregateStatus","EventContextProvider","useRemoteStorageController","setStorage","has","isNil","warn","RemoteStorageContextProvider","RemoteStorageContext","MyLayout","themes","createTheme","critical","high","orange","medium","purple","low","none","pink","deepPurple","indigo","marker","shadows","closedWidth","overrides","RaLink","textDecoration","MuiFilledInput","MuiButtonBase","MuiAvatar","rounded","MuiTableCell","sizeSmall","MuiChip","RaChipField","MuiAppBar","colorSecondary","buildThemeFromType","AuthenticationError","LOGIN_MUTATION","setHeaders","GET_ABILITY","authProvider","login","username","authentication","AUTHENTICATION_TOKEN_COOKIE","AUTHENTICATION_REFRESH_TOKEN_COOKIE","terminate","nameCookies","getCookiesByGroup","APPLICATION_GROUP","checkError","checkAuth","authorizationCheckToken","authenticationCheckToken","getPermissions","_getPermissions","getCookie","getAbility","ability","sleep","getIdentity","_getIdentity","_profile$data","decodedToken","_yield$Promise$all","_yield$Promise$all2","decodeJwt","accountDataProvider","accountId","profileDataProvider","profileId","en","englishMessages","raPreferencesLanguageEnglish","raPreferencesLanguageRussian","choose_columns","toggle_theme","saved_queries","query_name","new_label","new_dialog_title","remove_label","remove_label_with_name","remove_dialog_title","remove_message","help","saved_column_sets","column_set_name","archiveDataLanguageRussian","raLanguageRussian","ra","russianMessages","bulk_actions","save_and_continue","create_item","create_widget","play_in_new_window","preview","open_events","open_help","remove_content","remove_title","bulk_remove_title","bulk_remove_content","save_and_deploy","synchronize","acknowledge","acknowledge_all","call_all","check_all","command_execute","change_view","more","write","other_applications","change_layout","set_refresh","show_in_new_window","choose_preset","open_with","edit_with","list_of_deleted","xlsx_export","json_export","import","xlsx_import","json_import","json_copy","more_count","hide","boolean","null","about","releases","information","markdown","DONOTHING","DOUPDATE","favorited","notification_settings","widget_on_dashboard_loading","widget_on_dashboard_not_found","data_loading","data_not_found","data_error","properties_error","acknowledgement","acknowledge_dialog","deploy_title","deploy_content","deploy_question","save_and_deploy_title","save_and_deploy_content","save_and_deploy_question","synchronize_title","synchronize_content","synchronize_question","upload_title","upload_counter","write_tag_title","write_tag_content","write_tag_question","dialog_field_title","dialog_field_content","read_tag_history_title","read_tag_history_content","import_title","import_content","import_conflict","notification_settings_title","notification_settings_content","navigation","user_apps","auth","LOGIN_DOES_NOT_EXIST","LOGIN_WITH_PASSWORD_DOES_NOT_EXIST","BANNED","authentication_error","AUTHORIZATION_ERROR","authorization_error","default_profile_not_found","profile_not_found","permissions_error","expired","existed","removed","restored","acknowledged","called","cut_item","paste_item","value_is_written","command_executed","asset_added_to_context","web_socket_reconecting","web_socket_reconected","web_socket_error","deploed","synchronized","updated_and_deploed","created_and_deploed","not_equal_from_assetClass","imported","import_data_error","unfavorited","sound_off","sound_on","json_copied","sort_by","ASC","DESC","unique","jsonParse","assetsByVariables","units","bytes","KB","MB","GB","TB","PB","EB","ZB","YB","notification_and_sound","off","save_label","save_dialog","content_text","GRAPHQL_PARSE_FAILED","GRAPHQL_VALIDATION_FAILED","BAD_USER_INPUT","OPERATION_RESOLUTION_FAILURE","BAD_REQUEST","INTERNAL_SERVER_ERROR","messages","ru","createdAt_lte","createdAt_gte","enums","unauthorize","invite","declension","createdBy","project","teams","DASHBOARD","INTERNAL","EXTERNAL","defaultProperties","defaultGrid","properties","trueValue","falseValue","valveControl","step","command","thresholds","numberFormatOptions","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","startAngle","endAngle","strokeLinecap","showThresholdsLabels","showThresholdsMarkers","address","ACTIVE","SERVICE","DISABLE","door","true","false","iff","relatedAssets","good","bad","ALARM","ACK","hihi","hihiSet","hi","hiSet","lo","loSet","lolo","loloSet","DIAGNOSTIC","UNKNOWN","access","READABLE","WRITABLE","HISTORIZABLE","priority_lte","utcOffset","userId","timestampSrv_gte","timestampSrv_lte","assetLabels","severityType","Unknown","HiHi","Hi","Lo","LoLo","Rate","DevP","DevM","Info","System","Security","email","UNBANNED","me","Main","ADMIN","DISPATCHER","ENGINEER","GUEST","SUPERADMIN","ISDEFAULT","subject","conditions","RBAC","ABAC","DEFAULT","INVERTED","blobId","TABLE","TILE","GOOD","TEST","BAD","emptyfilter","invitefilter","widgets","currency","currencyDisplay","useGrouping","minimumSignificantDigits","maximumSignificantDigits","i18nProvider","polyglotI18nProvider","AccountBannedChip","useAccount","AccountMeShowBreadcrumbs","AccountShowActions","AccountMeEditButton","AccountShow","AccountMeBreadcrumbs","EmailField","PhoneNumberField","AccountMeEditBreadcrumbs","AccountEmailInput","validateLogin","validateEmail","validatePhone","validatePassword","AccountEditActions","AccountMeShowButton","AccountEditToolbar","sanitizeAccountProps","AccountEdit","_useAccount","PasswordInput","autoComplete","ProfileMeEditBreadcrumbs","ProfileEditActions","ProfileMeShowButton","ProfileEditToolbar","sanitizeProfileProps","ProfileEdit","_useProfile","RuleActionField","RuleSubjectField","RuleFieldsField","RuleInvertedChip","RuleReferenceDatagrid","ProfileIsDefaultChip","ProfileMeShowBreadcrumbs","ProfileShowActions","ProfileMeEditButton","linkToAccountMe","linkToDashboard","_record$preferences","_record$preferences$M","_record$preferences$M2","ProfileShow","ProfileMeBreadcrumbs","OR","WidgetOnDashboardShowBreadcrumbs","_contextProps$record","dashboardLink","widgetLink","WidgetOnDashboardShowActions","_data$dashboard","WidgetOnDashboardShow","desktopToolbar","defaultToolbar","valueOrDefault","alwaysEnableSaveButton","MuiToolbar","any","baseUrl","TabbedFormTabs","validTabPaths","Tabs","indicatorColor","tabPath","intent","TabbedAsideFormView","formRootPathname","defaultRedirect","useTabbedAsideFormViewStyles","hidden","errorTabButton","__versions","TabbedForm","FormWithRedirect","PopoverButton","WidgetOnDashboardReferenceWidgetInput","_props$record2","_props$record2$widget","selectWidgetData","setSelected","_props$record$widget","MarkdownField","WidgetOnDashboardReferenceWidgetPropertiesInput","_values$widget2","_values$widget","WidgetOnDashboardPreviewPlay","_record$widget","_record$widget2","wrapper","inner","WidgetOnDashboardEditAside","validateWidgetId","_basePath$split","_basePath$split2","dashboardResourceName","WidgetOnDashboardCreate","dashboardControllerProps","createControllerProps","FormTab","redirectHook","RaSaveButton","SaveAndContinueButton","WidgetOnDashboardEditBreadcrumbs","WidgetOnDashboardEditActions","MUIToolbar","WidgetOnDashboardEditToolbar","WidgetOnDashboardEdit","editControllerProps","useWidgetOnDashboardController","WidgetOnDashboardContext","WidgetOnDashboardContextProvider","useWidgetOnDashboardContext","WidgetOnDashboardPlayActions","_useWidgetOnDashboard","DashboardResponsiveGridLayout","WidgetOnDashboardPlayBreadcrumbs","WidgetOnDashboardPlayView","DashboardToolbar","WidgetOnDashboardPlayLayout","DefaultWidgetOnDashboardPlayActions","DefaultWidgetOnDashboardPlayBreadcrumbs","WidgetOnDashboardPlay","widgetOnDashboardControllerProps","WidgetOnDashboardPlayLib","WidgetOnDashboardName","AboutShowView","cardWrapper","useAuthenticated","AboutShow","Releases","setMarkdown","CHANGELOG","res","GET_VERSION","info","applicationAsService","APPLICATION_VERSION","initialState","useInfo","infoAuthenticationService","infoAuthorizationService","infoAbilityService","infoPreferencesService","infoBlobService","infoDatabusService","infoEventbusService","infoGatewayService","InformationServicesList","_useInfo","navigator","clipboard","writeText","Information","customRoutes","AccountMeEdit","AccountMeShow","ProfileMeEdit","ProfileMeShow","defaultDashboardState","dashboardReducer","previousState","customReducers","Input","_ref$meta","LoginForm","_useSafeSetState","useSafeSetState","_useSafeSetState2","useLogin","noValidate","Field","CardActions","illustration","illustrationImage","backgroundImage","process","backgroundRepeat","backgroundSize","backgroundPosition","logo","subtitle","Login","muiTheme","LoginPage","APPLICATION_PROJECT","APPLICATION_TITLE","APPLICATION_ATTRIBUTION","APPLICATION_LICENSE_URL","defaultThemes","DashboardPlayViewSimple","MainDashboard","_useRemoteStorage","defaultDashboardId","handleFailure","MainDashboardEmpty","MainPage","Settings","defaultLocale","rowsPerPageOptions","App","PreferencesBasedThemeProvider","themeFromType","Admin","disableTelemetry","loginPage","Resource","ReactDOM","StrictMode","document","getElementById","serviceWorker","register","sw","typeMap","doc","WordIcon","pdf","PdfIcon","TextIcon","xls","ExcelIcon","zip","ZipIcon","AudiotrackIcon","video","MovieIcon","image","ImageIcon","FileChart","copyClipboard","DOMException","handleCopy","WS_DATABUS_SERVICE","getUrlWithToken","DialogField","marginBlock","useTagValueStyles","EnhancedTagValueField","showUnit","ellipsis","defaultFormatter","buildData","resolvers","responses","referenceFields","referenceValue","buildColumns","columnKey","getKey","columnHeader","buildRow","_ref5$format","splitKey","getArrayValue","buildRows","buildDataFromModel","buildDataItemFromModel","writeBuffer","blob","Blob","msSaveOrOpenBlob","URL","createObjectURL","appendChild","download","click","revokeObjectURL","removeChild","downloadJSON","dataStr","downloadAnchorNode","setAttribute","require","global_env","ENV","REACT_APP_GROUP","REACT_APP_NAME","REACT_APP_VERSION","REACT_APP_PROJECT","REACT_APP_TITLE","REACT_APP_DESCRIPTION","REACT_APP_ATTRIBUTION","REACT_APP_LICENSE_URL","REACT_APP_DOMAIN_COOKIE","REACT_APP_URI_AUTHENTICATION_SERVICE","REACT_APP_URI_AUTHORIZATION_SERVICE","REACT_APP_URI_ABILITY_SERVICE","REACT_APP_URI_USER_SERVICE","REACT_APP_URI_DISPATCHER_SERVICE","REACT_APP_URI_GATEWAY_SERVICE","REACT_APP_URI_PREFERENCES_SERVICE","URI_EVENTBUS_SERVICE","REACT_APP_URI_EVENTBUS_SERVICE","REACT_APP_WS_EVENTBUS_SERVICE","REACT_APP_URI_DATABUS_SERVICE","REACT_APP_WS_DATABUS_SERVICE","REACT_APP_URI_FILES","REACT_APP_URI_BLOB","REACT_APP_URI_BLOB_DOWNLOAD","REACT_APP_URI_SCADAJS","REACT_APP_URI_HISTORY_SERVICE","REACT_APP_URI_STIMULSOFT_REPORTS","URI_TILE_SERVICE","REACT_APP_URI_TILE_SERVICE","REACT_APP_URI_REPORTS","getQualityEnum","ACKNOWLEDGE_MANY_EVENTS","ThumbUpIcon","_ref2$label","_ref2$icon","setComment","handleAcknowledgeManyEvents","acknowledgeManyEvents","RaButton","EventFilter","BulkAcknowledgeButton","EventWidgetDatagrid","useLayoutEffect","ListBreadcrumbs","year","month","minute","second","groupname","cookies","cookie","expires","toUTCString","updatedCookie","optionKey","ms","mergeTree","tree1","tree2","cuted","rootLoading","pluralize","nestedNode","deleteNode","withChildren","dtree","cutNode","pasteNode","moveNode","ListButton","parseJSON","localStorage","LOCAL_STORAGE_WORKSPACE","localStoredValue","dispatchEvent","handleStorageChange","useEventListener","_unused","ColumnsButtonMenuItem","mergedlistColumns","CreateTreeNode","handleLabelClick","onLabelClick","persist","closest","nodeChildren","expandable","hasOwnProperty","multiSelect","DefaultTreeNode","withEvent","handleWrite","EditIcon","TagWriteDialog","onWrite","ConditionalTagWriteButton","_props$record$paramet","expand","expandOpen","TagReadHistoryDialogChart","filterOptions","themeType","responce","handles","outlineColor","maskFill","scrollbar","barBackgroundColor","barBorderColor","buttonArrowColor","buttonBackgroundColor","buttonBorderColor","rifleColor","trackBackgroundColor","trackBorderColor","rangeSelector","buttonTheme","stroke","states","inputBoxBorderColor","inputStyle","labelStyle","buttons","zooming","valueDecimals","buttonOptions","symbolStroke","HighchartsReact","constructorType","highcharts","smallTable","numericTypes","TagReadHistoryDialogTableList","listClasses","typeIsNumeric","TagReadHistoryDialog","onRequest","setFilterOptions","handleRequest","scroll","includeOffset","startOf","endOf","ConditionalTagReadHistoryButton","ACKNOWLEDGE_EVENT","handleAcknowledgeEvent","acknowledgeEvent","ConditionalAcknowledgeButton","l","toFixed","niceBytes","valueText","fontWeightRegular","textSecondary","useEditorTheme","Editor","ThumbUpOffIcon","getSeverityIcon","severityLevel","SeverityNone","SeverityLowIcon","SeverityMediumIcon","SeverityHighIcon","SeverityCriticalIcon","rootBySeverity","darken","selectedOpacity","lighten","EventListDatagridRow","selectable","handleToggleSelection","effect","t1","TableRow","TableCell","DatagridCell","rowCell","EventListDatagridBody","DatagridBody","checkRules","Permissions","resolveAction","createAliasResolver","abilityInstance","Ability","defineAbilityRules","defineRule","defineAbilityFor","getConditions","rulesFor","fieldName","defaultOptions","_data$tag","datasource","blink","withAnimation","FOLDER","CatalogIcon","_record$alarm","_record$alarm$ALARM","_record$alarm2","_record$alarm2$ACK","hasAssetActiveAlarm","hasAssetAckAlarm","TreeCatalogSelectorComponent","onAssetSelect","alarms","setAlarms","tr","_tr$resource","flatMap","resource_alarm","_tr$resource2","_assetSelectNode$reso","assetSelectNode","buildRecords","useXlsxExporter","useJsonExporter","idField","origin","hyperlink","setEnums","calcEnumName","upperFirst","_fetchData","fetchData","_props$showDashboardP","showDashboardPlayButton","DefaultDashboardPlayButtonAsMenuItem","iconName","iconsMap","iconChoice","onConflictChoices","validateConfirm","ImportButtonDialog","onImport","conflict","hasConflict","handleImport","fileName","RadioButtonGroupInput","uploadXlsxInputRef","uploadJsonInputRef","hasData","handleXlsxLoad","fileReader","FileReader","readAsArrayBuffer","buffer","load","worksheets","hasValues","handleJsonLoad","readAsText","PublishIcon","OpenInBrowserIcon","isBroken","_record$parameter","tagType","parameterType","isBrokenType","readRegex","writeRegex","historyRegex","isReadable","isWritable","isHistorizable","locationToCoordinates","latlng","coordonate","isValidCoordinate","getCenterFromDataLocation","_item$GEO","getCenterOfBounds","latitude","longitude","getBoundsFromDataLocation","_item$GEO2","bounds","getBounds","maxLat","maxLng","minLat","minLng","headerClassName","sortByOrder","NonEmptyReferenceField","PureReferenceFieldView","useReference","ReferenceFieldView","_ref4$translateChoice","_excluded4","LinearProgress","scadaRedirect","reverse","reportRedirect","scada","fillOpacity","CarIcon","BusIcon","TruckIcon","AirplaneIcon","BuildIcon","GROIcon","GRSIcon","ValvePadIcon","ValveIcon","GradientIcon","AccountTreeIcon","DIIcon","SpeedIcon","RoomIcon","TextFieldsIcon","widgetsIcons","GaugeIcon","BatteryIcon","DiscreteIOIcon","AnalogIOIcon","LineChartIcon","MarkdownIcon","WriteValueIcon","ThermometerIcon","SignalIcon","ToggleIcon","NewspaperIcon","_ref3$onClick","onHover","_ref3$title","optionalEvents","onMouseOver","keyCode","gridTemplateColumns","gridTemplateRows","gridGap","swatch","float","ColorPicker","onSwatchHover","handleSwatch","hexcode","isValidHex","Swatch","focusStyle","lightBlue","cyan","lightGreen","lime","yellow","brown","blueGrey","colorArray","ColorWrap","ColorPaletteButton","PaletteIcon","disableAutoFocus","_ref$margin","_ref$variant","WRITE_TAG","hint","TagListDatagridSimple","TagListDatagridMap","TextFieldWithHint","disableSticky","markerIcon","MapMarkerIcon","viewBox","xmlns","xmlnsXlink","filterUnits","stdDeviation","dy","slope","xlinkHref","mapIcons","iconHTML","ReactDOMServer","renderToString","leafletIcon","leaflet","DivIcon","html","iconSize","point","iconAnchor","popupAnchor","LeafletAssetMarkerIcon","_popup","popup","_record$GEO","_record$ALARM","hideTitles","memorizedPosition","useMemoCompare","eventHandlers","closeButton","permanent","TAG_SERIES_FRAGMENT","GET_LIST_TAGSERIES","GET_MANY_SETPOINTTAGS","emptyData","getListData","_loop","keyedSerias","historyOptions","hasNextPage","delegateYield","_filter$tagsIds","_filter$periods","_filter$setpointTagsI","setpointTagsIds","_yield$graphqlClient$","_loop2","_context4","itemWithFilterTags","_context3","_series$find","seriesItem","topToolbar","collapsed","BulkActionsToolbar","ListBulkActions","handleRestoreMany","finalFormOnChange","FormGroup","FormControlLabel","control","actionsButton","TreeNodeLabelActionsButton","treeNodeLabelActionsButton","isCutted","DefaultTreeNodeLabelActionsButton","Labeled","valueLabelTrue","valueLabelFalse","choiceText","compare","previousRef","BulkRemoveWithUndoButton","handleRemoveMany","BulkRemoveWithConfirmButton","inflect","_ref2$mutationMode","REFRESH_TOKEN","authenticationTokenCookie","authenticationRefreshTokenCookie","_yield$refreshTokenMu","tokenExpired","current_time","exp","hideIcon","FilterFormInput","filterElement","handleHide","RemoveCircleIcon","FilterForm","_ref2$classes","_ref2$displayedFilter","dataset","lodashGet","EnhancedFilterForm","mergedInitialValuesWithDefaultValues","lodashSet","mergeInitialValuesWithDefaultValues","rest2","MarkdownInput","dictionary","addColumnAfter","addColumnBefore","addRowAfter","addRowBefore","alignCenter","alignLeft","alignRight","bulletList","checkboxList","codeBlock","codeCopied","codeInline","createLink","createLinkError","createNewDoc","deleteColumn","deleteRow","deleteTable","deleteImage","downloadImage","replaceImage","alignImageLeft","alignImageRight","alignImageDefault","em","embedInvalidLink","findOrCreateDoc","h1","h2","h3","heading","hr","imageUploadError","imageCaptionPlaceholder","infoNotice","linkCopied","newLineEmpty","newLineWithSlash","openLink","orderedList","pageBreak","pasteLink","pasteLinkWithTitle","quote","removeLink","searchOrPasteLink","strikethrough","strong","subheading","tip","tipNotice","warningNotice","bottomLineColor","borderBottom","borderBottomColor","textPrimary","cellBreakWord","wordWrap","cellOverflowEllipsis","authorizationTokenCookie","authorizationRefreshTokenCookie","eventName","element","savedHandler","targetElement","eventListener","FileMediaReportPreview","_props$queryOptions","hasAutoLink","FileMediaPreviewNotFound","openHandler","mediaImage","objectFit","mediaAudio","FileMediaPreview","TransformWrapper","TransformComponent","CardMedia","controls","FileMediaScadaPreview","mediaContent","common","black","details","titleIcon","FilePreviewTitlePortal","TilegridSkeleton","Skeleton","TilegridTile","LoadingGrid","LoadedGrid","_useListContext2","trigger","useScrollTrigger","Slide","FilePreviewAppbar","containerRef","ArrowBackIcon","responseType","onreadystatechange","GetAppIcon","overflowX","backdrop","previousIcon","nextIcon","FilePreview","onPrevious","mouseDownTarget","Modal","BackdropComponent","Backdrop","BackdropProps","closeAfterTransition","Fade","onMouseUp","onMouseDown","ChevronLeftIcon","FilePreviewWithTheme","FilePreviewSyncLocation","initialId","setHasAutoLink","handleNext","nextIndex","nextId","handlePrevious","prevIndex","prevId","FileCardMedia","titleField","pathField","pathThumbnailField","typeField","resultPath","CardActionArea","_node$parameter2","isNotHistorizable","CreateMenuItem","AddCircleOutlineIcon","handleCut","Cut","handlePaste","isPasted","Paste","isRoot","DeleteIcon","CutMenuItem","PasteMenuItem","DeleteMenuItem","RaSimpleShowLayout","_spanNthChild","_spanNthChild2","_spanNthChild3","Ellipsisloader","hasErrorDisconnect","QualityField","displayValue","TagValueInput","EnhancedTagValueInput","EventActiveIcon","EventAckIcon","listItemIcon","listItemTextPrimary","listItemTextTertiary","disableTypography","createPortal","validateRequired","_record$asset","showWriteTagQuestion","MapConsumer","useMap","fitBounds","setView","MapControl","_props$position","MapControlToolbar","handleZoomIn","zoomIn","zoomDelta","shiftKey","handleZoomOut","zoomOut","ButtonGroup","orientation","disableFocusRipple","AddIcon","FullscreenIcon","LabelOffIcon","MapMarkerClusterIcon","cx","cy","r","dominantBaseline","textAnchor","mapClusterIcon","refMarkerClusterGroup","iconCreateFunction","cluster","getAllChildMarkers","getChildCount","divIcon","refreshClusters","MarkerClusterGroup","showCoverageOnHover","maxClusterRadius","chunkedLoading","memorizedIds","setHideTitles","handleHideTitles","zoomControl","MapMarkerCluster","AssetMapTagsOnMapNestedField","tagsOnMapFiltered","cardHeader","cardActions","subheaderTypographyProps","_id$split","_id$split2","showMore","setShowMore","FilterButtonMenuItem","onShow","handleShow","FilterButton","hiddenFilters","handleClickButton","handleRequestClose","ContentFilter","renderButton","renderForm","_error$response","_error$response2","_error$response2$erro","_error$response2$erro2","messge","getMessageFromCode","extractDashboardContextProps","defaults"],"mappings":"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AC9B,IACA,GACA,IAED,iCAAkC,CACjC,IACA,GACA,IAED,4CAA6C,CAC5C,KACA,KAED,+CAAgD,CAC/C,KACA,KAED,kBAAmB,CAClB,IACA,EACA,GACA,IAED,mBAAoB,CACnB,IACA,EACA,GACA,IAED,0BAA2B,CAC1B,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,yBAA0B,CACzB,KACA,IAED,4BAA6B,CAC5B,KACA,IAED,mCAAoC,CACnC,KACA,EACA,KAED,sCAAuC,CACtC,KACA,EACA,KAED,wBAAyB,CACxB,IACA,EACA,GACA,IAED,2BAA4B,CAC3B,IACA,EACA,GACA,IAED,sCAAuC,CACtC,KACA,KAED,yCAA0C,CACzC,KACA,KAED,mBAAoB,CACnB,IACA,EACA,GACA,IAED,oBAAqB,CACpB,IACA,EACA,GACA,IAED,6CAA8C,CAC7C,KACA,KAED,gDAAiD,CAChD,KACA,KAED,0BAA2B,CAC1B,KACA,IAED,6BAA8B,CAC7B,KACA,IAED,oCAAqC,CACpC,KACA,EACA,KAED,uCAAwC,CACvC,KACA,EACA,KAED,yBAA0B,CACzB,IACA,EACA,GACA,IAED,4BAA6B,CAC5B,IACA,EACA,GACA,IAED,uCAAwC,CACvC,KACA,KAED,0CAA2C,CAC1C,KACA,KAED,yBAA0B,CACzB,KACA,KAED,4BAA6B,CAC5B,KACA,KAED,cAAe,CACd,KACA,KAED,iBAAkB,CACjB,KACA,KAED,gBAAiB,CAChB,KACA,KAED,mBAAoB,CACnB,KACA,KAED,wBAAyB,CACxB,KACA,KAED,2BAA4B,CAC3B,KACA,KAED,iBAAkB,CACjB,KACA,KAED,oBAAqB,CACpB,KACA,KAED,kBAAmB,CAClB,IACA,EACA,GACA,IAED,mBAAoB,CACnB,IACA,EACA,GACA,IAED,gCAAiC,CAChC,KACA,KAED,mCAAoC,CACnC,KACA,KAED,yBAA0B,CACzB,KACA,IAED,4BAA6B,CAC5B,KACA,IAED,mCAAoC,CACnC,KACA,EACA,KAED,sCAAuC,CACtC,KACA,EACA,KAED,wBAAyB,CACxB,IACA,EACA,GACA,IAED,2BAA4B,CAC3B,IACA,EACA,GACA,IAED,sCAAuC,CACtC,KACA,KAED,yCAA0C,CACzC,KACA,KAED,wBAAyB,CACxB,IACA,GACA,GACA,IAED,yBAA0B,CACzB,IACA,GACA,GACA,IAED,sCAAuC,CACtC,IACA,IAED,uCAAwC,CACvC,IACA,IAED,gDAAiD,CAChD,KACA,KAED,mDAAoD,CACnD,KACA,KAED,4CAA6C,CAC5C,IACA,IAED,+CAAgD,CAC/C,IACA,IAED,+BAAgC,CAC/B,KACA,IAED,kCAAmC,CAClC,KACA,IAED,yCAA0C,CACzC,KACA,IAED,4CAA6C,CAC5C,KACA,IAED,8BAA+B,CAC9B,IACA,GACA,GACA,IAED,iCAAkC,CACjC,IACA,GACA,GACA,IAED,4CAA6C,CAC5C,KACA,KAED,+CAAgD,CAC/C,KACA,KAED,mBAAoB,CACnB,IACA,GACA,IAED,oBAAqB,CACpB,IACA,GACA,IAED,4BAA6B,CAC5B,KACA,KAED,+BAAgC,CAC/B,KACA,KAED,0BAA2B,CAC1B,KACA,IAED,6BAA8B,CAC7B,KACA,IAED,oCAAqC,CACpC,KACA,IAED,uCAAwC,CACvC,KACA,IAED,yBAA0B,CACzB,IACA,GACA,IAED,4BAA6B,CAC5B,IACA,GACA,IAED,uCAAwC,CACvC,KACA,KAED,0CAA2C,CAC1C,KACA,KAED,eAAgB,CACf,IACA,EACA,EACA,GACA,IAED,gBAAiB,CAChB,IACA,EACA,EACA,GACA,IAED,yBAA0B,CACzB,KACA,IAED,4BAA6B,CAC5B,KACA,IAED,6BAA8B,CAC7B,KACA,EACA,KAED,gCAAiC,CAChC,KACA,EACA,KAED,sCAAuC,CACtC,KACA,EACA,KAED,yCAA0C,CACzC,KACA,EACA,KAED,gCAAiC,CAChC,KACA,IAED,mCAAoC,CACnC,KACA,IAED,wCAAyC,CACxC,KACA,KAED,2CAA4C,CAC3C,KACA,KAED,sCAAuC,CACtC,KACA,KAED,yCAA0C,CACzC,KACA,KAED,qCAAsC,CACrC,KACA,KAED,wCAAyC,CACxC,KACA,KAED,2BAA4B,CAC3B,KACA,KAED,8BAA+B,CAC9B,KACA,KAED,iCAAkC,CACjC,KACA,KAED,oCAAqC,CACpC,KACA,KAED,gDAAiD,CAChD,KACA,KAED,mDAAoD,CACnD,KACA,KAED,iCAAkC,CACjC,KACA,GAED,oCAAqC,CACpC,KACA,GAED,sBAAuB,CACtB,KACA,EACA,IAED,yBAA0B,CACzB,KACA,EACA,IAED,gCAAiC,CAChC,KACA,EACA,KAED,mCAAoC,CACnC,KACA,EACA,KAED,qBAAsB,CACrB,IACA,EACA,EACA,GACA,IAED,wBAAyB,CACxB,IACA,EACA,EACA,GACA,IAED,mCAAoC,CACnC,KACA,KAED,sCAAuC,CACtC,KACA,KAED,gBAAiB,CAChB,IACA,EACA,EACA,IAED,iBAAkB,CACjB,IACA,EACA,EACA,IAED,sBAAuB,CACtB,IACA,IAED,uBAAwB,CACvB,IACA,IAED,8BAA+B,CAC9B,KACA,KAED,iCAAkC,CACjC,KACA,KAED,4BAA6B,CAC5B,KACA,IAED,+BAAgC,CAC/B,KACA,IAED,4BAA6B,CAC5B,KACA,KAED,+BAAgC,CAC/B,KACA,KAED,0BAA2B,CAC1B,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,2BAA4B,CAC3B,KACA,KAED,8BAA+B,CAC9B,KACA,KAED,2BAA4B,CAC3B,KACA,KAED,8BAA+B,CAC9B,KACA,KAED,+BAAgC,CAC/B,KACA,IAED,kCAAmC,CAClC,KACA,IAED,4BAA6B,CAC5B,IACA,IAED,+BAAgC,CAC/B,IACA,IAED,4BAA6B,CAC5B,KACA,KAED,+BAAgC,CAC/B,KACA,KAED,uBAAwB,CACvB,KACA,GAED,0BAA2B,CAC1B,KACA,GAED,iCAAkC,CACjC,KACA,EACA,KAED,oCAAqC,CACpC,KACA,EACA,KAED,sBAAuB,CACtB,IACA,EACA,EACA,IAED,yBAA0B,CACzB,IACA,EACA,EACA,IAED,oCAAqC,CACpC,KACA,KAED,uCAAwC,CACvC,KACA,KAED,wBAAyB,CACxB,IACA,EACA,GACA,IAED,yBAA0B,CACzB,IACA,EACA,GACA,IAED,mCAAoC,CACnC,IACA,IAED,oCAAqC,CACpC,IACA,IAED,gDAAiD,CAChD,KACA,KAED,mDAAoD,CACnD,KACA,KAED,qDAAsD,CACrD,KACA,KAED,wDAAyD,CACxD,KACA,KAED,yCAA0C,CACzC,IACA,IAED,4CAA6C,CAC5C,IACA,IAED,yCAA0C,CACzC,KACA,KAED,4CAA6C,CAC5C,KACA,KAED,+BAAgC,CAC/B,KACA,IAED,kCAAmC,CAClC,KACA,IAED,yCAA0C,CACzC,KACA,EACA,KAED,4CAA6C,CAC5C,KACA,EACA,KAED,8BAA+B,CAC9B,IACA,EACA,GACA,IAED,iCAAkC,CACjC,IACA,EACA,GACA,IAED,4CAA6C,CAC5C,KACA,KAED,+CAAgD,CAC/C,KACA,KAED,yBAA0B,CACzB,IACA,EACA,GACA,IAED,0BAA2B,CAC1B,IACA,EACA,GACA,IAED,gCAAiC,CAChC,KACA,GAED,mCAAoC,CACnC,KACA,GAED,wDAAyD,CACxD,KACA,IAED,2DAA4D,CAC3D,KACA,IAED,0CAA2C,CAC1C,KACA,GACA,IAED,6CAA8C,CAC7C,KACA,GACA,IAED,wCAAyC,CACxC,KACA,KAED,2CAA4C,CAC3C,KACA,KAED,0CAA2C,CAC1C,KACA,KAED,6CAA8C,CAC7C,KACA,KAED,iDAAkD,CACjD,KACA,KAED,oDAAqD,CACpD,KACA,KAED,0CAA2C,CAC1C,KACA,KAED,6CAA8C,CAC7C,KACA,KAED,gDAAiD,CAChD,KACA,KAED,mDAAoD,CACnD,KACA,KAED,+BAAgC,CAC/B,IACA,EACA,GACA,IAED,kCAAmC,CAClC,IACA,EACA,GACA,IAED,6CAA8C,CAC7C,KACA,KAED,gDAAiD,CAChD,KACA,KAED,2CAA4C,CAC3C,KACA,KAED,8CAA+C,CAC9C,KACA,KAED,qCAAsC,CACrC,KACA,KAED,wCAAyC,CACxC,KACA,KAED,wCAAyC,CACxC,KACA,KAED,2CAA4C,CAC3C,KACA,KAED,6CAA8C,CAC7C,KACA,KAED,gDAAiD,CAChD,KACA,KAED,0CAA2C,CAC1C,KACA,KAED,6CAA8C,CAC7C,KACA,KAED,oBAAqB,CACpB,IACA,EACA,EACA,GACA,IAED,qBAAsB,CACrB,IACA,EACA,EACA,GACA,IAED,8BAA+B,CAC9B,IACA,EACA,IAED,+BAAgC,CAC/B,IACA,EACA,IAED,wCAAyC,CACxC,KACA,EACA,KAED,2CAA4C,CAC3C,KACA,EACA,KAED,6CAA8C,CAC7C,KACA,KAED,gDAAiD,CAChD,KACA,KAED,oCAAqC,CACpC,IACA,EACA,IAED,uCAAwC,CACvC,IACA,EACA,IAED,oCAAqC,CACpC,KACA,KAED,uCAAwC,CACvC,KACA,KAED,2BAA4B,CAC3B,KACA,EACA,IAED,8BAA+B,CAC9B,KACA,EACA,IAED,qCAAsC,CACrC,KACA,EACA,KAED,wCAAyC,CACxC,KACA,EACA,KAED,0BAA2B,CAC1B,IACA,EACA,EACA,GACA,IAED,6BAA8B,CAC7B,IACA,EACA,EACA,GACA,IAED,wCAAyC,CACxC,KACA,KAED,2CAA4C,CAC3C,KACA,KAED,kBAAmB,CAClB,IACA,EACA,GACA,IAED,mBAAoB,CACnB,IACA,EACA,GACA,IAED,8BAA+B,CAC9B,KACA,KAED,iCAAkC,CACjC,KACA,KAED,yBAA0B,CACzB,KACA,IAED,4BAA6B,CAC5B,KACA,IAED,mCAAoC,CACnC,KACA,EACA,KAED,sCAAuC,CACtC,KACA,EACA,KAED,wBAAyB,CACxB,IACA,EACA,GACA,IAED,2BAA4B,CAC3B,IACA,EACA,GACA,IAED,sCAAuC,CACtC,KACA,KAED,yCAA0C,CACzC,KACA,KAED,wBAAyB,CACxB,KACA,KAED,2BAA4B,CAC3B,KACA,KAED,cAAe,CACd,IACA,EACA,GACA,IAED,eAAgB,CACf,IACA,EACA,GACA,IAED,sBAAuB,CACtB,KACA,KAED,yBAA0B,CACzB,KACA,KAED,qBAAsB,CACrB,KACA,IAED,wBAAyB,CACxB,KACA,IAED,+BAAgC,CAC/B,KACA,EACA,KAED,kCAAmC,CAClC,KACA,EACA,KAED,oBAAqB,CACpB,IACA,EACA,GACA,IAED,uBAAwB,CACvB,IACA,EACA,GACA,IAED,kCAAmC,CAClC,KACA,KAED,qCAAsC,CACrC,KACA,KAED,oBAAqB,CACpB,KACA,KAED,uBAAwB,CACvB,KACA,KAED,mBAAoB,CACnB,IACA,GACA,GACA,IAED,oBAAqB,CACpB,IACA,GACA,GACA,IAED,0BAA2B,CAC1B,KACA,IAED,6BAA8B,CAC7B,KACA,IAED,oCAAqC,CACpC,KACA,IAED,uCAAwC,CACvC,KACA,IAED,yBAA0B,CACzB,IACA,GACA,GACA,IAED,4BAA6B,CAC5B,IACA,GACA,GACA,IAED,uCAAwC,CACvC,KACA,KAED,0CAA2C,CAC1C,KACA,KAED,eAAgB,CACf,IACA,GACA,GACA,IAED,gBAAiB,CAChB,IACA,GACA,GACA,IAED,wBAAyB,CACxB,KACA,IAED,2BAA4B,CAC3B,KACA,IAED,sBAAuB,CACtB,KACA,IAED,yBAA0B,CACzB,KACA,IAED,gCAAiC,CAChC,KACA,IAED,mCAAoC,CACnC,KACA,IAED,qBAAsB,CACrB,IACA,GACA,GACA,IAED,wBAAyB,CACxB,IACA,GACA,GACA,IAED,0BAA2B,CAC1B,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,mCAAoC,CACnC,KACA,KAED,sCAAuC,CACtC,KACA,KAED,oBAAqB,CACpB,KACA,KAED,uBAAwB,CACvB,KACA,KAED,eAAgB,CACf,IACA,EACA,GACA,IAED,gBAAiB,CAChB,IACA,EACA,GACA,IAED,+BAAgC,CAC/B,KACA,KAED,kCAAmC,CAClC,KACA,KAED,0BAA2B,CAC1B,KACA,IAED,6BAA8B,CAC7B,KACA,IAED,sBAAuB,CACtB,KACA,IAED,yBAA0B,CACzB,KACA,IAED,gCAAiC,CAChC,KACA,EACA,KAED,mCAAoC,CACnC,KACA,EACA,KAED,qBAAsB,CACrB,IACA,EACA,GACA,IAED,wBAAyB,CACxB,IACA,EACA,GACA,IAED,mCAAoC,CACnC,KACA,KAED,sCAAuC,CACtC,KACA,KAED,qBAAsB,CACrB,KACA,KAED,wBAAyB,CACxB,KACA,KAED,sBAAuB,CACtB,IACA,EACA,EACA,IAED,uBAAwB,CACvB,IACA,EACA,EACA,IAED,kCAAmC,CAClC,IACA,IAED,mCAAoC,CACnC,IACA,IAED,wCAAyC,CACxC,KACA,KAED,2CAA4C,CAC3C,KACA,KAED,8CAA+C,CAC9C,KACA,KAED,iDAAkD,CACjD,KACA,KAED,sCAAuC,CACtC,KACA,KAED,yCAA0C,CACzC,KACA,KAED,wCAAyC,CACxC,IACA,IAED,2CAA4C,CAC3C,IACA,IAED,wCAAyC,CACxC,KACA,KAED,2CAA4C,CAC3C,KACA,KAED,6BAA8B,CAC7B,KACA,GAED,gCAAiC,CAChC,KACA,GAED,uCAAwC,CACvC,KACA,EACA,KAED,0CAA2C,CAC1C,KACA,EACA,KAED,4BAA6B,CAC5B,IACA,EACA,EACA,IAED,+BAAgC,CAC/B,IACA,EACA,EACA,IAED,0CAA2C,CAC1C,KACA,KAED,6CAA8C,CAC7C,KACA,KAED,gCAAiC,CAChC,IACA,EACA,GACA,IAED,iCAAkC,CACjC,IACA,EACA,GACA,IAED,yCAA0C,CACzC,KACA,IAED,4CAA6C,CAC5C,KACA,IAED,uCAAwC,CACvC,KACA,IAED,0CAA2C,CAC1C,KACA,IAED,iDAAkD,CACjD,KACA,EACA,KAED,oDAAqD,CACpD,KACA,EACA,KAED,sCAAuC,CACtC,IACA,EACA,GACA,IAED,yCAA0C,CACzC,IACA,EACA,GACA,IAED,qDAAsD,CACrD,KACA,KAED,wDAAyD,CACxD,KACA,KAED,oDAAqD,CACpD,KACA,KAED,uDAAwD,CACvD,KACA,KAED,gCAAiC,CAChC,IACA,EACA,GACA,IAED,iCAAkC,CACjC,IACA,EACA,GACA,IAED,yCAA0C,CACzC,KACA,IAED,4CAA6C,CAC5C,KACA,IAED,uCAAwC,CACvC,KACA,IAED,0CAA2C,CAC1C,KACA,IAED,iDAAkD,CACjD,KACA,EACA,KAED,oDAAqD,CACpD,KACA,EACA,KAED,sCAAuC,CACtC,IACA,EACA,GACA,IAED,yCAA0C,CACzC,IACA,EACA,GACA,IAED,qDAAsD,CACrD,KACA,KAED,wDAAyD,CACxD,KACA,KAED,oDAAqD,CACpD,KACA,KAED,uDAAwD,CACvD,KACA,KAED,kBAAmB,CAClB,IACA,GACA,GACA,IAED,mBAAoB,CACnB,IACA,GACA,GACA,IAED,0BAA2B,CAC1B,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,yBAA0B,CACzB,KACA,IAED,4BAA6B,CAC5B,KACA,IAED,mCAAoC,CACnC,KACA,IAED,sCAAuC,CACtC,KACA,IAED,wBAAyB,CACxB,IACA,GACA,GACA,IAED,2BAA4B,CAC3B,IACA,GACA,GACA,IAED,sCAAuC,CACtC,KACA,KAED,yCAA0C,CACzC,KACA,KAED,aAAc,CACb,KACA,KAED,gBAAiB,CAChB,KACA,KAED,eAAgB,CACf,IACA,GACA,GACA,IAED,gBAAiB,CAChB,IACA,GACA,GACA,IAED,sBAAuB,CACtB,KACA,IAED,yBAA0B,CACzB,KACA,IAED,gCAAiC,CAChC,KACA,IAED,mCAAoC,CACnC,KACA,IAED,qBAAsB,CACrB,IACA,GACA,GACA,IAED,wBAAyB,CACxB,IACA,GACA,GACA,IAED,mCAAoC,CACnC,KACA,KAED,sCAAuC,CACtC,KACA,KAED,sBAAuB,CACtB,IACA,EACA,EACA,IAED,uBAAwB,CACvB,IACA,EACA,EACA,IAED,kCAAmC,CAClC,IACA,IAED,mCAAoC,CACnC,IACA,IAED,wCAAyC,CACxC,KACA,KAED,2CAA4C,CAC3C,KACA,KAED,sCAAuC,CACtC,KACA,KAED,yCAA0C,CACzC,KACA,KAED,8CAA+C,CAC9C,KACA,KAED,iDAAkD,CACjD,KACA,KAED,wCAAyC,CACxC,IACA,IAED,2CAA4C,CAC3C,IACA,IAED,wCAAyC,CACxC,KACA,KAED,2CAA4C,CAC3C,KACA,KAED,6BAA8B,CAC7B,KACA,GAED,gCAAiC,CAChC,KACA,GAED,uCAAwC,CACvC,KACA,EACA,KAED,0CAA2C,CAC1C,KACA,EACA,KAED,4BAA6B,CAC5B,IACA,EACA,EACA,IAED,+BAAgC,CAC/B,IACA,EACA,EACA,IAED,0CAA2C,CAC1C,KACA,KAED,6CAA8C,CAC7C,KACA,KAED,uBAAwB,CACvB,IACA,EACA,GACA,IAED,wBAAyB,CACxB,IACA,EACA,GACA,IAED,oCAAqC,CACpC,KACA,KAED,uCAAwC,CACvC,KACA,KAED,8BAA+B,CAC9B,KACA,IAED,iCAAkC,CACjC,KACA,IAED,wCAAyC,CACxC,KACA,EACA,KAED,2CAA4C,CAC3C,KACA,EACA,KAED,6BAA8B,CAC7B,IACA,EACA,GACA,IAED,gCAAiC,CAChC,IACA,EACA,GACA,IAED,4CAA6C,CAC5C,KACA,KAED,+CAAgD,CAC/C,KACA,KAED,2CAA4C,CAC3C,KACA,KAED,8CAA+C,CAC9C,KACA,KAED,uBAAwB,CACvB,IACA,EACA,EACA,EACA,GACA,IAED,wBAAyB,CACxB,IACA,EACA,EACA,EACA,GACA,IAED,6BAA8B,CAC7B,IACA,IAED,8BAA+B,CAC9B,IACA,IAED,mCAAoC,CACnC,KACA,KAED,sCAAuC,CACtC,KACA,KAED,mCAAoC,CACnC,KACA,IAED,sCAAuC,CACtC,KACA,IAED,mCAAoC,CACnC,IACA,IAED,sCAAuC,CACtC,IACA,IAED,mCAAoC,CACnC,KACA,KAED,sCAAuC,CACtC,KACA,KAED,oDAAqD,CACpD,KACA,KAED,uDAAwD,CACvD,KACA,KAED,+DAAgE,CAC/D,KACA,KAED,kEAAmE,CAClE,KACA,KAED,iEAAkE,CACjE,KACA,EACA,EACA,KAED,oEAAqE,CACpE,KACA,EACA,EACA,KAED,6DAA8D,CAC7D,KACA,EACA,GAED,gEAAiE,CAChE,KACA,EACA,GAED,kEAAmE,CAClE,KACA,IAED,qEAAsE,CACrE,KACA,IAED,kEAAmE,CAClE,KACA,IAED,qEAAsE,CACrE,KACA,IAED,mEAAoE,CACnE,KACA,IAED,sEAAuE,CACtE,KACA,IAED,4EAAwE,CACvE,KACA,KAED,+EAA2E,CAC1E,KACA,KAED,2DAA4D,CAC3D,KACA,IAED,8DAA+D,CAC9D,KACA,IAED,yDAA0D,CACzD,KACA,KAED,4DAA6D,CAC5D,KACA,KAED,gDAAiD,CAChD,KACA,KAED,mDAAoD,CACnD,KACA,KAED,8BAA+B,CAC9B,KACA,EACA,EACA,IAED,iCAAkC,CACjC,KACA,EACA,EACA,IAED,wCAAyC,CACxC,KACA,EACA,KAED,2CAA4C,CAC3C,KACA,EACA,KAED,6BAA8B,CAC7B,IACA,EACA,EACA,EACA,GACA,IAED,gCAAiC,CAChC,IACA,EACA,EACA,EACA,GACA,IAED,4CAA6C,CAC5C,KACA,KAED,+CAAgD,CAC/C,KACA,KAED,2CAA4C,CAC3C,KACA,KAED,8CAA+C,CAC9C,KACA,KAED,eAAgB,CACf,KACA,KAED,kBAAmB,CAClB,KACA,KAED,sBAAuB,CACtB,KACA,KAED,yBAA0B,CACzB,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,gCAAiC,CAChC,KACA,KAED,4BAA6B,CAC5B,KACA,KAED,+BAAgC,CAC/B,KACA,KAED,6BAA8B,CAC7B,KACA,IAED,gCAAiC,CAChC,KACA,IAED,iCAAkC,CACjC,KACA,KAED,oCAAqC,CACpC,KACA,KAED,2CAA4C,CAC3C,KACA,KAED,8CAA+C,CAC9C,KACA,KAED,uCAAwC,CACvC,KACA,KAED,0CAA2C,CAC1C,KACA,KAED,kCAAmC,CAClC,KACA,KAED,qCAAsC,CACrC,KACA,KAED,mCAAoC,CACnC,KACA,IAED,sCAAuC,CACtC,KACA,IAED,mCAAoC,CACnC,KACA,IAED,sCAAuC,CACtC,KACA,IAED,oCAAqC,CACpC,KACA,IAED,uCAAwC,CACvC,KACA,IAED,4BAA6B,CAC5B,KACA,KAED,+BAAgC,CAC/B,KACA,KAED,kCAAmC,CAClC,KACA,KAED,qCAAsC,CACrC,KACA,KAED,4BAA6B,CAC5B,KACA,IAED,+BAAgC,CAC/B,KACA,IAED,4BAA6B,CAC5B,KACA,IAED,+BAAgC,CAC/B,KACA,IAED,0BAA2B,CAC1B,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,+BAAgC,CAC/B,KACA,KAED,kCAAmC,CAClC,KACA,KAED,qBAAsB,CACrB,IACA,EACA,GACA,IAED,sBAAuB,CACtB,IACA,EACA,GACA,IAED,4BAA6B,CAC5B,KACA,IAED,+BAAgC,CAC/B,KACA,IAED,sCAAuC,CACtC,KACA,EACA,KAED,yCAA0C,CACzC,KACA,EACA,KAED,gCAAiC,CAChC,KACA,KAED,mCAAoC,CACnC,KACA,KAED,2BAA4B,CAC3B,IACA,EACA,GACA,IAED,8BAA+B,CAC9B,IACA,EACA,GACA,IAED,0CAA2C,CAC1C,KACA,KAED,6CAA8C,CAC7C,KACA,KAED,yCAA0C,CACzC,KACA,KAED,4CAA6C,CAC5C,KACA,KAED,mBAAoB,CACnB,IACA,IAED,oBAAqB,CACpB,IACA,IAED,0BAA2B,CAC1B,KACA,IAED,6BAA8B,CAC7B,KACA,IAED,gCAAiC,CAChC,KACA,KAED,mCAAoC,CACnC,KACA,KAED,iCAAkC,CACjC,KACA,IAED,oCAAqC,CACpC,KACA,IAED,oCAAqC,CACpC,KACA,KAED,uCAAwC,CACvC,KACA,KAED,yBAA0B,CACzB,IACA,IAED,4BAA6B,CAC5B,IACA,IAED,uCAAwC,CACvC,KACA,KAED,0CAA2C,CAC1C,KACA,KAED,yCAA0C,CACzC,KACA,KAED,4CAA6C,CAC5C,KACA,KAED,uCAAwC,CACvC,KACA,KAED,0CAA2C,CAC1C,KACA,KAED,yBAA0B,CACzB,KACA,KAED,4BAA6B,CAC5B,KACA,KAED,mBAAoB,CACnB,IACA,EACA,GACA,IAED,oBAAqB,CACpB,IACA,EACA,GACA,IAED,mCAAoC,CACnC,KACA,KAED,sCAAuC,CACtC,KACA,KAED,8BAA+B,CAC9B,KACA,IAED,iCAAkC,CACjC,KACA,IAED,0BAA2B,CAC1B,KACA,IAED,6BAA8B,CAC7B,KACA,IAED,oCAAqC,CACpC,KACA,EACA,KAED,uCAAwC,CACvC,KACA,EACA,KAED,yBAA0B,CACzB,IACA,EACA,GACA,IAED,4BAA6B,CAC5B,IACA,EACA,GACA,IAED,iCAAkC,CACjC,KACA,KAED,oCAAqC,CACpC,KACA,KAED,uCAAwC,CACvC,KACA,KAED,0CAA2C,CAC1C,KACA,KAED,yBAA0B,CACzB,KACA,KAED,4BAA6B,CAC5B,KACA,KAED,gBAAiB,CAChB,KACA,KAED,mBAAoB,CACnB,KACA,KAED,wBAAyB,CACxB,KACA,KAED,2BAA4B,CAC3B,KACA,KAED,0BAA2B,CAC1B,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,0BAA2B,CAC1B,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,wBAAyB,CACxB,KACA,KAED,2BAA4B,CAC3B,KACA,KAED,yBAA0B,CACzB,KACA,KAED,4BAA6B,CAC5B,KACA,KAED,gCAAiC,CAChC,KACA,KAED,mCAAoC,CACnC,KACA,KAED,mCAAoC,CACnC,KACA,KAED,sCAAuC,CACtC,KACA,KAED,UAAW,CACV,KACA,KAED,aAAc,CACb,KACA,KAED,2BAA4B,CAC3B,KACA,KAED,8BAA+B,CAC9B,KACA,MAGF,SAASyH,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAE5H,EAAK0H,GAC9B,OAAOG,QAAQC,UAAUC,MAAK,WAC7B,IAAIzC,EAAI,IAAI0C,MAAM,uBAAyBN,EAAM,KAEjD,MADApC,EAAE2C,KAAO,mBACH3C,CACP,IAGD,IAAI4C,EAAMlI,EAAI0H,GAAM9I,EAAKsJ,EAAI,GAC7B,OAAOL,QAAQM,IAAID,EAAIE,MAAM,GAAGpI,IAAI2H,EAAoBrC,IAAIyC,MAAK,WAChE,OAAOJ,EAAoB/I,EAC5B,GACD,CACA6I,EAAoBY,KAAO,WAC1B,OAAOC,OAAOD,KAAKrI,EACpB,EACAyH,EAAoB7I,GAAK,KACzB2J,EAAOC,QAAUf,C,yUCl/EXjL,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CAAC,EACP3D,MAAO,CACHmL,SAAU,YAEdxM,MAAO,CACHyM,WAAYhM,EAAMiM,WAAWD,WAC7B5N,MAAO,eACP8N,QAAQ,GAAD1M,OAAKQ,EAAMG,QAAQ,GAAE,SAAAX,OAAQQ,EAAMG,QAAQ,GAAK,EAAC,MACxDgM,OAAQ,EACRC,UAAW,cACXC,cAAe,SACfC,WAAY,OACZxL,OAAQ,EACRyL,QAAS,QACTC,MAAO,QAEd,GAAG,CAAEpM,KAAM,cAsGGqM,EApFI,SAACvN,GAChB,IACI3B,EAcA2B,EAdA3B,SACAqB,EAaAM,EAbAN,UAEA8N,GAWAxN,EAZAuB,QAYAvB,EAXAwN,WACAxK,EAUAhD,EAVAgD,GACAjC,EASAf,EATAe,MACAkC,EAQAjD,EARAiD,WACAvB,EAOA1B,EAPA0B,MAAKC,EAOL3B,EANA4B,cAAM,IAAAD,EAAG,QAAOA,EAChBwB,EAKAnD,EALAmD,KACAxD,EAIAK,EAJAL,SACAC,EAGAI,EAHAJ,OACA6B,EAEAzB,EAFAyB,WACGoB,EAAIrE,YACPwB,EAAKvB,GACH8C,EAAUX,EAAUZ,GAC1B,IAAK0B,IAAU9B,EAAQ,CAEnB,IAAMsB,EAAO7C,GAAYA,EAASmH,MAAQnH,EAASmH,KAAKtE,KAExD,MAAM,IAAIkL,MAAM,sCAAD9L,OAC2BY,EAAI,gKAElD,CACA,IAAMuM,EAAYD,EAAShN,wBAAA,GAAQqC,GAAI,IAAE2K,cAAc3K,EAEjD6K,EAAWvK,MAAWA,EAAKC,QAASD,EAAKE,aAC/C,OACIE,eAACoK,IAAW,CACRjO,UAAWA,EACX8N,UAAWA,EACXpK,MAAOsK,EACP9L,OAAQA,EAAOvD,SAAA,CAEfkF,eAACqK,IAAG,CAAClO,UAAW6B,EAAQ8D,KAAMwI,YAAaH,EAAW,aAAe,gBAAgBrP,SAAA,CACjFU,cAAC+O,IAAU,CAACC,QAAS/K,EAAIgL,QAAM,EAACtO,UAAW6B,EAAQG,MAAMrD,SACrDU,cAAC2E,IAAU,CACPhC,MAAOA,EACP9B,OAAQA,EACRD,SAAUA,EACVsD,WAAYA,MAGpBlE,cAAA,OAAKW,UAAW6B,EAAQlB,MAAMhC,SACzBA,GAAqC,kBAAlBA,EAASmH,KACvB2B,eAAmB9I,EAAQmC,YAAA,CACzBO,QACApB,YACG8N,IAELpP,OAGdU,cAACkP,IAAc,CAAA5P,SACXU,cAAC4E,IAAe,CACZL,QAASH,EAAKG,QACdF,MAAOD,EAAKC,OAASD,EAAKE,YAC1B5B,WAAYA,QAKhC,E,orBC9FMoC,EAAyB,SAAHzF,GACbA,EAAX8P,YACU9P,EAAV+P,WACS/P,EAATgQ,UACQhQ,EAARiQ,SACQjQ,EAARyH,SACYzH,EAAZkQ,aACSlQ,EAATe,UACIf,EAAJmQ,KACYnQ,EAAZoQ,aACKpQ,EAALgF,MACMhF,EAANoD,OACYpD,EAAZqQ,aACarQ,EAAbsQ,cACYtQ,EAAZuQ,aACcvQ,EAAdwQ,eACKxQ,EAAL2C,MACO3C,EAAPyQ,QACUzQ,EAAV6E,WACK7E,EAALsD,MACmBtD,EAAnB0Q,oBACM1Q,EAAN2Q,OACI3Q,EAAJ+E,KACQ/E,EAAR4Q,SACI5Q,EAAJ8C,KACO9C,EAAP4D,QACU5D,EAAVuI,WACWvI,EAAX6Q,YACK7Q,EAAL8D,MACM9D,EAAN0B,OACG1B,EAAHwK,IACMxK,EAAN8Q,OACQ9Q,EAARuB,SACMvB,EAANwB,OACWxB,EAAXiF,YACYjF,EAAZ+Q,aACS/Q,EAATgR,UACShR,EAAT6B,UACe7B,EAAfiR,gBACIjR,EAAJoH,KACQpH,EAAR+D,SACc/D,EAAdkR,eACKlR,EAALiC,MACO,OAAA7B,YAAAJ,EAAAK,EACA,EAEX8Q,IAAOC,OAAO,CAAEC,MAAO,CAAEC,GAAI,+BAAiC,SAAU,CAAEC,mBAAoB,CAAE,IAAK,SAErG,IAAM/O,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF2H,QAASlM,EAAMG,QAAQ,GACvB2O,kBAAmB,EACnBC,kBAAmB,QACnBC,oBAAqB,EACrBC,qBAAsB,EACtBzK,gBAAiBxE,EAAMyE,QAAQyK,OAAOC,OAE1CvO,MAAO,CACH4L,MAAO,QAEd,GAAG,CAAEpM,KAAM,kBAgOGgP,EA7NK,SAAAlQ,GAAU,IAADmQ,EAErBzQ,EAeAM,EAfAN,UAEA+B,GAaAzB,EAdAuB,QAcAvB,EAbAyB,YACAC,EAYA1B,EAZA0B,MACA/B,EAWAK,EAXAL,SACAC,EAUAI,EAVAJ,OACA4B,EASAxB,EATAwB,OACAU,EAQAlC,EARAkC,MACAkO,EAOApQ,EAPAoQ,QAEAjO,GAKAnC,EANAqQ,WAMArQ,EALAmC,UACArC,EAIAE,EAJAF,OACA0O,EAGAxO,EAHAwO,aAAY8B,EAGZtQ,EAFAuQ,cAAM,IAAAD,EAAG,IAAGA,EACTzN,EAAIrE,YACPwB,EAAKwQ,GAITC,GAFgBC,cAEAC,YAAe,QAAS,UAAjC7P,EAAyC8D,YAAA6L,EAAA,GAApC,GAENG,EAAYC,iBAAO,MACnBtP,EAAUX,EAAUZ,GAC1B8Q,EAA8C1J,qBAAU2J,EAAAnM,YAAAkM,EAAA,GAAjDE,EAAeD,EAAA,GAAEE,EAAkBF,EAAA,GAEpCG,EAAqBC,uBAAY,WACnC,GAAIH,GAAmBA,EAAgBtJ,OAAS,EAC5C,OAAO3I,cAAA,QAAAV,SAAO2S,EAAgB5M,KAAI,SAAAgN,GAAC,eAAA9Q,OAAa8Q,EAAEC,iBAAmBD,EAAEE,cAAgBF,EAAEC,gBAAe,GAAA/Q,OAAM8Q,EAAEC,gBAAe,KAAA/Q,OAAI8Q,EAAEE,eAAe,QAAAhR,OAAO8Q,EAAEG,QAAO,IAAIlH,KAAK,OAGrL,GAAG,CAAChK,EAAO2Q,IAEXlO,EAKIC,YAAQvC,YAAC,CACTZ,SACA4B,SACAU,QACAC,SAAS,GAAD7B,OAAA6J,YAAOhI,GAAY,IAAI,CAAC+O,KAC7BrO,IATHG,EAAEF,EAAFE,GAAEwO,EAAA1O,EACF/B,MAASe,EAAQ0P,EAAR1P,SAAUD,EAAM2P,EAAN3P,OAAQxB,EAAKmR,EAALnR,MAC3B8C,GAD+C3E,YAAAgT,EAAAC,GAC3C3O,EAAJK,MACAF,EAAUH,EAAVG,WASEyO,EAAuBP,uBAAY,SAACQ,EAAQC,GAE9ChB,EAAUiB,QAAUF,EACpBA,EAAOG,qBAAoB,kBAAMjQ,EAAOxB,EAAM,IACvB,oBAAZ+P,GAAwBA,EAAQuB,EAAQC,GAEnDA,EAAOD,OAAOI,YAAY,qBAAsB,CAC5CC,KAAM,KACNC,SAAS,EACTC,MAAO,GACPC,OAAQ,CACJ,oBAAqB,eAK7BP,EAAOD,OAAOI,YAAY,oBAAqB,CAC3CC,KAAM,UACNC,SAAS,EACTC,MAAO,GACPC,OAAQ,CACJ,oBAAqB,eAI7B,IAAMC,EAAgBT,EAAOU,aAG7BC,OAAOC,iBAAiB,UAAU,WAE9BZ,EAAOa,OAAO,CAAElF,MAAO,EAAGiD,OAAQ,IAElC+B,OAAOG,uBAAsB,WAAO,IAADC,EAEzBC,EAAoB,OAAbP,QAAa,IAAbA,GAA4B,QAAfM,EAAbN,EAAeQ,qBAAa,IAAAF,OAAf,EAAbA,EAA8BG,wBACvCF,GACAhB,EAAOa,OAAO,CAAElF,MAAOqF,EAAKrF,MAAOiD,OAAQoC,EAAKpC,QAExD,GACJ,GAoBJ,GAAG,CAACK,IAEEkC,EAAqB3B,uBAAY,SAAC4B,EAAKlL,GAEzC/F,EAASiR,EACb,GAAG,IAEGC,EAAyB7B,uBAAY,SAAA8B,GAIvC,GAFAhC,EAAmBgC,IAER,OAAPA,QAAO,IAAPA,OAAO,EAAPA,EAASvL,QAAS,EAClB5F,EAASzB,OACN,CACH,IAAM0S,EAAMnC,EAAUiB,QAAQqB,WAC9BpR,EAASiR,EACb,CAEJ,GAAG,CAACnC,EAAWvQ,IAGX0S,GAAM1S,EACV,IAAK0S,GAAK,CACN,IAAMI,GAAY/S,cAAIN,EAAQF,IAAW4O,EACzCuE,GAAM5M,KAAKC,UAAU+M,GAAW,KAAM,KAC1C,CAEA,OACIpU,cAACwO,EAAU/M,wBAAA,CACPwC,GAAIA,EACJtB,MAAOA,EACPhC,UAAWkE,IAAWrC,EAAQG,MAAOhC,GACrC6B,QAAS,CACL8D,KAAM9D,EAAQ8D,MAElBzF,OAAQA,EACRD,SAAUA,EACVsD,WAAYA,EACZE,KAAMA,EACN1B,WAAYA,GACRoC,EAAuBhB,IAAK,IAAAxE,SAEhCU,cAACqU,IAAY5S,YAAA,CACTU,KAAMtB,EACNS,MAAO0S,GACPjS,MAAgB,QAATA,EAAkB,oBAAsB,qBAC/CsP,QAASsB,EACT5P,SAAUgR,EACVzC,WAAY2C,EACZzC,OAAQA,EACRvO,SAAOmO,EAAC,CACJkD,iBAAiB,EACjBC,sBAAsB,GAAKC,YAAApD,EAAC,mBACX,GAAIoD,YAAApD,EAAC,UAKb,CACLqD,SAAS,IACZrD,IAEDtM,EAAuBhB,OAiD3C,E,sCCrPe4Q,IA7CG,SAAHrV,GAKR,IAADsV,EAAAtV,EAJFuV,mBAAW,IAAAD,EAAG,GAAEA,EAChB/T,EAAQvB,EAARuB,SACAC,EAAMxB,EAANwB,OACGI,EAAKxB,YAAAJ,EAAAK,GAGF+C,EAAS2P,uBAAY,SAAC9Q,GACxB,YAAiByJ,GAATzJ,GAAgD,kBAAVA,EAAhBA,EAA8C8F,KAAKC,UAAU/F,EAAO,KAAM,KAC5G,GAAG,IAEG6B,EAAQiP,uBAAY,SAAC9Q,GAEvB,YADyByJ,GAATzJ,GAAgC,KAAVA,EAAgBA,EAAQ8F,KAAKjE,MAAM7B,EAE7E,GAAG,IAEGuT,EAAczC,uBAAY,SAACQ,EAAQC,GACrC,GAAI+B,EAAa,CACb,IAAME,EAAezT,cAAIwR,EAAQ,4DAA8D,GACzFkC,EAAUC,kBAAQF,EAAcF,EAAa,OAEnD/B,EAAOoC,UAAUC,KAAKC,aAAaC,sBAAsB,CACrDhS,UAAU,EACV2R,WAER,CACJ,GAAG,IAGGnV,EAAI,uBAAA2B,OAA0BX,EAAQ,KAAAW,OAAIV,EAAM,SAEtD,OACIb,cAACmR,EAAW1P,wBAAA,GACJR,GAAK,IACTL,SAAUA,EACVC,OAAQA,EACRwU,SAAS,OACTzV,KAAMA,EACN6C,OAAQA,EACRU,MAAOA,EACPkO,QAASwD,IAGrB,C,+DCnBeS,IAxBU,SAAC/P,EAAKqK,GAC3B,IAAM2F,EAAgBC,cAEhBrB,EAAW/B,uBAAY,WAEzB,OADamD,EAAcE,QAAQlQ,EAAKqK,EAE5C,GAAG,CAACrK,EAAKqK,IAETmC,EAAsC1J,mBAAS8L,GAASnC,EAAAnM,YAAAkM,EAAA,GAAjD2D,EAAW1D,EAAA,GAAE2D,EAAc3D,EAAA,GAE5B4D,EAAWxD,uBAAY,SAAA9Q,GACzB,IAAMuU,EAAevU,aAAiBwU,SAAWxU,EAAMoU,GAAepU,EACtEiU,EAAcQ,QAAQxQ,EAAKsQ,GAC3BF,EAAeE,EACnB,GAAG,CAACtQ,EAAKmQ,IAOT,OALAM,qBAAU,WACNL,EAAexB,IACnB,GAAG,CAACoB,EAAcU,UAGX,CAACP,EAAaE,EACzB,C,0YC6GM/T,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCmU,aAAc,CACV/V,MAAO4B,EAAMyE,QAAQnC,MAAM8R,KAC3B,UAAW,CACP5P,gBAAiB6P,gBAAMrU,EAAMyE,QAAQnC,MAAM8R,KAAM,KAEjD,uBAAwB,CACpB5P,gBAAiB,iBAIhC,GAAG,CAAEpE,KAAM,mBAISkU,IAmBNC,IA3JM,SAACrV,GAClB,IAAA6K,EAeI7K,EAdA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAAAyK,EAc1BtV,EAbAuV,oBAAY,IAAAD,EAAG,yBAAwBA,EAAAE,EAavCxV,EAZAyV,sBAAc,IAAAD,EAAG,2BAA0BA,EAE3C9V,GAUAM,EAXAuB,QAWAvB,EAVAN,WAEAwI,GAQAlI,EATAkJ,KASAlJ,EARAkI,SACApI,EAOAE,EAPAF,OACA+F,EAMA7F,EANA6F,SAAQ6P,EAMR1V,EALA2V,SAAUC,OAAU,IAAAF,EAAG,OAAMA,EAC7BG,EAIA7V,EAJA6V,UACAC,EAGA9V,EAHA8V,UACQC,GAER/V,EAFAgW,SAEAhW,EAFUiW,qBAAY,IAAAF,EAAG,aAAYA,EAClClT,EAAIrE,YACPwB,EAAKvB,GACH8C,EAAUX,EAAUZ,GACpBkW,EAASC,cACTR,EAAWS,cACXC,EAAUC,cACVrW,EAAYC,cACZP,EAAWuE,YAAmBlE,GACpCuW,EAA8BC,cAAaC,EAAA7R,YAAA2R,EAAA,GAApCG,EAAMD,EAAA,GAAIE,EAAOF,EAAA,GAAPE,QAEjB7F,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GAYd8F,EAAe1F,uBAAY,SAACtJ,GAC9BA,EAAMC,kBACN4O,EAAO,CACHlR,KAAM,SACN7F,WACAmX,QAAS,CAAE9T,GAAIlD,EAAOkD,GAAI+T,aAAcjX,IAExC,CACImW,aAAcA,EACdJ,eAAyB/L,IAAd+L,EACLA,EACA,WACEK,EAAO,0BAA2B,OAAQ,CAAEc,YAAa,GAAsB,aAAjBf,GAC9DN,EAASC,EAAY/P,GACrBwQ,GACJ,EACJP,eAAyBhM,IAAdgM,EACLA,EACA,SAAA1S,GACE8S,EACqB,kBAAV9S,EACDA,EACAA,EAAMmO,SAAW,6BACvB,UACA,CACIhR,EACqB,kBAAV6C,EACDA,EACAA,GAASA,EAAMmO,QACXnO,EAAMmO,aACNzH,IAGtBuM,GACJ,IAEW,oBAAZnO,GACPA,EAAQL,EAEhB,GAAG,CAAC6O,EAAQxO,EAASpI,IAErB,OACIyD,eAAC0T,WAAQ,CAAA5Y,SAAA,CACTkF,eAACO,IAAQtD,wBAAA,CACL0H,QAtDiB,SAAAwB,GACrBkN,GAAQ,GACRlN,EAAE5B,iBACN,EAoDQoP,SAAUP,EACVjX,UAAWkE,IACP,mBACArC,EAAQ0T,aACRvV,IAEAmD,GAAI,IAAAxE,SAAA,CAERU,cAACwK,IAAY,CAAC4N,MAAO,CAAEjY,MAAO,WAAYb,SACtCU,cAACqW,IAAU,CAAC5L,SAAS,YAEzBzK,cAACC,IAAU,CAACC,QAAQ,UAASZ,SAAE4B,EAAUyB,SAE7C3C,cAACqY,IAAO,CACAC,OAAQ1P,EACRgP,QAASA,EACT5S,MAAOwR,EACP+B,QAAS7B,EACT8B,iBAAkB,CACdrW,KAAMjB,EAAU,aAADK,OAAcX,EAAQ,mBAAmB,CACpDqX,YAAa,EACbzW,EAAGiX,IAAWC,SACVxX,EAAU,aAADK,OAAcX,EAAQ,SAAS,CACpCqX,YAAa,EACbzW,EAAGiX,IAAWE,YAAY/X,MAE9B,KAGRqD,GAAIlD,EAAOoB,MAEfyW,UAAWd,EACXtO,QAlFc,SAAAmB,GACtBkN,GAAQ,GACRlN,EAAE5B,iBACN,MAoFJ,C,mCCtIA,oBAKe8P,IAFS,WAAH,OAASrY,qBAAWsY,IAAc,C,8FCEjDC,EAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,gBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,YAAAC,cAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,cAAa,KAAD,EACkC,OAD5DL,EAAKE,EAAAI,KACXhB,EAAOiB,UAAU,gBAAiBP,EAAK,UAAAtY,OAAasY,GAAU,IAAIE,EAAAM,OAAA,SAE3DlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EALW,EAMd,IAGIqO,EAAS,IAAIJ,EAAyB2B,KAE7BvB,K,qWCqFTtX,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC4Y,aAAc,CACVxa,MAAO4B,EAAMyE,QAAQnC,MAAM8R,KAC3B,UAAW,CACP5P,gBAAiB6P,gBAAMrU,EAAMyE,QAAQnC,MAAM8R,KAAM,KAEjD,uBAAwB,CACpB5P,gBAAiB,iBAIhC,GAAG,CAAEpE,KAAM,2BAISkU,IAmBNuE,IAzHgB,SAAC3Z,GAC5B,IAAA6K,EAeI7K,EAdA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAAAyK,EAc1BtV,EAbAuV,oBAAY,IAAAD,EAAG,yBAAwBA,EAAAE,EAavCxV,EAZAyV,sBAAc,IAAAD,EAAG,2BAA0BA,EAE3C9V,GAUAM,EAXAuB,QAWAvB,EAVAN,WAEAwI,GAQAlI,EATAkJ,KASAlJ,EARAkI,SACApI,EAOAE,EAPAF,OACA+F,EAMA7F,EANA6F,SAAQ6P,EAMR1V,EALA2V,gBAAQ,IAAAD,EAAG,OAAMA,EACjBG,EAIA7V,EAJA6V,UACAC,EAGA9V,EAHA8V,UAASC,EAGT/V,EAFAiW,oBAAY,IAAAF,EAAG,aAAYA,EACxBlT,EAAIrE,YACPwB,EAAKvB,GACH8C,EAAUX,EAAUZ,GACpBC,EAAYC,cACZP,EAAWuE,YAAmBlE,GAEpC4Z,EAAkCC,YAA+B,CAC7D/Z,SACAH,WACAkG,WACA8P,WACAzN,UACA2N,YACAC,YACAG,iBARIU,EAAOiD,EAAPjD,QAASmD,EAAYF,EAAZE,aAWjBhJ,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GAYpB,OACIxN,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLkF,eAACO,IAAQtD,wBAAA,CACL0H,QAba,SAAAwB,GACrBkN,GAAQ,GACRlN,EAAE5B,iBACN,EAWYoP,SAAUP,EACVjX,UAAWkE,IACP,mBACArC,EAAQmY,aACRha,IAEAmD,GAAI,IAAAxE,SAAA,CAERU,cAACwK,IAAY,CAAC4N,MAAO,CAAEjY,MAAO,WAAYb,SACtCU,cAACqW,IAAU,CAAC5L,SAAS,YAEzBzK,cAACC,IAAU,CAACC,QAAQ,UAASZ,SAAE4B,EAAUyB,SAE7C3C,cAACqY,IAAO,CACJC,OAAQ1P,EACRgP,QAASA,EACT5S,MAAOwR,EACP+B,QAAS7B,EACT8B,iBAAkB,CACdrW,KAAMjB,EAAU,aAADK,OAAcX,EAAQ,mBAAmB,CACpDqX,YAAa,EACbzW,EAAGiX,IAAWC,SACVxX,EAAU,aAADK,OAAcX,EAAQ,SAAS,CACpCqX,YAAa,EACbzW,EAAGiX,IAAWE,YAAY/X,MAE9B,KAGRqD,GAAIlD,EAAOoB,MAEfyW,UAAWmC,EACXvR,QAzCc,SAAAmB,GACtBkN,GAAQ,GACRlN,EAAE5B,iBACN,MA2CJ,C,uNC7FMiS,EAAc,SAAC/Z,GACjB,IACIN,EAMAM,EANAN,UAASsa,EAMTha,EALAia,gBAAQ,IAAAD,GAAQA,EAAAE,EAKhBla,EAJAma,gBAAQ,IAAAD,GAAQA,EAChBE,EAGApa,EAHAoa,QACAnW,EAEAjE,EAFAiE,QACGpB,EAAIrE,YACPwB,EAAKvB,GACT4b,EAOIC,YAAeta,GANfua,EAAWF,EAAXE,YACAC,EAAgBH,EAAhBG,iBACAC,EAAYJ,EAAZI,aACA5U,EAAQwU,EAARxU,SACA6U,EAAUL,EAAVK,WACAC,EAAKN,EAALM,MAEEhb,EAAWuE,YAAmBrB,GAC5B+X,EAAcC,YAAsBhY,GAApC+X,UAER,OAAO7V,mBAAQ,kBACXxB,eAACuX,IAAUta,wBAAA,CAACd,UAAWA,GAAeqb,YAAsBlY,IAAK,IAAAxE,SAAA,CAC5D+b,GACGjV,uBAAaiV,EAAS,CAClBza,WACA+a,aACAF,mBACAC,eACAO,QAAS,WAEjBjc,cAACkc,IAAa,CAAChX,QAASA,IACxBlF,cAACmc,IAAY,CAACjX,QAASA,KACT,IAAbgW,GACGlb,cAACoc,IAAY,CACTlB,SAAUA,EACV/C,SAAoB,IAAVyD,EACVhb,SAAUA,EACVyb,KAAMb,EACNE,aAAcA,KAGR,IAAbN,GACGpb,cAACsc,IAAY,CACTlB,SAAUA,EACVxa,SAAUA,IAGjBib,GAAa7b,cAACuc,IAAY,CAACzV,SAAUA,EAAU5G,QAAQ,YAAYsc,kBAAgB,OAC3E,GAGb,CACI5b,EACA6a,EACAC,EACAC,EACAN,EACAO,EACA9U,EACAnG,EACA6a,EACAN,EACAW,GAGZ,EAkBAb,EAAYrZ,aAAe,CACvB8a,YAAa,GACbC,gBAAiB,kBAAM,IAAI,GAGhB1B,K,yFC/FF2B,EAAiBC,YAAGC,MAAAC,YAAA,sQ,+SC6F3Bjb,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCgb,cAAe,CAAC,EACnB,GAAG,CAAE5a,KAAM,4BAIS6a,IAmBNC,IA5GiB,SAAChc,GAC7B,IAAA6K,EAYI7K,EAXA0B,aAAK,IAAAmJ,EAAG,oBAAmBA,EAE3BnL,GASAM,EAVAuB,QAUAvB,EATAN,WAEAwI,GAOAlI,EARAkJ,KAQAlJ,EAPAkI,SACApI,EAMAE,EANAF,OACA+F,EAKA7F,EALA6F,SAAQ6P,EAKR1V,EAJA2V,SAAUC,OAAU,IAAAF,EAAG,OAAMA,EAC7BG,EAGA7V,EAHA6V,UACAC,EAEA9V,EAFA8V,UACGjT,EAAIrE,YACPwB,EAAKvB,GACH8C,EAAUX,EAAUZ,GACpBkW,EAASC,cACTR,EAAWS,cACXC,EAAUC,cACVrW,EAAYC,cACZP,EAAWuE,YAAmBlE,GACpCuW,EAA8BC,cAAaC,EAAA7R,YAAA2R,EAAA,GAApCG,EAAMD,EAAA,GAAIE,EAAOF,EAAA,GAAPE,QAEXsF,EAAgB9K,uBAAY,SAACtJ,GAC/BA,EAAMC,kBACN4O,EAAO,CACHlR,KAAM,UACN7F,WACAmX,QAAS,CAAE9T,GAAIlD,EAAOkD,GAAI+T,aAAcjX,IAExC,CACImW,aAAc,WACdJ,eAAyB/L,IAAd+L,EACLA,EACA,WACEK,EAAO,2BAA4B,OAAQ,CAAEc,YAAa,IAAK,GAC/DrB,EAASC,EAAY/P,GACrBwQ,GACJ,EACJP,eAAyBhM,IAAdgM,EACLA,EACA,SAAA1S,GACE8S,EACqB,kBAAV9S,EACDA,EACAA,EAAMmO,SAAW,6BACvB,UACA,CACIhR,EACqB,kBAAV6C,EACDA,EACAA,GAASA,EAAMmO,QACXnO,EAAMmO,aACNzH,IAGtBuM,GACJ,IAEW,oBAAZnO,GACPA,EAAQL,EAEhB,GAAG,CAAC6O,EAAQxO,EAASpI,IAErB,OACIyD,eAACO,IAAQtD,wBAAA,CACL0H,QAAS+T,EACT/E,SAAUP,EACVjX,UAAWkE,IACP,oBACArC,EAAQua,cACRpc,IAEAmD,GAAI,IAAAxE,SAAA,CAERU,cAACwK,IAAY,CAAAlL,SACTU,cAACgd,IAAW,CAACvS,SAAS,YAE1BzK,cAACC,IAAU,CAACC,QAAQ,UAASZ,SAAE4B,EAAUyB,QAIrD,C,sHC1FMoW,EAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,gBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,YAAAC,cAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,cAAa,KAAD,EACkC,OAD5DL,EAAKE,EAAAI,KACXhB,EAAOiB,UAAU,gBAAiBP,EAAK,UAAAtY,OAAasY,GAAU,IAAIE,EAAAM,OAAA,SAE3DlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EALW,EAMd,IAGIqO,EAAS,IAAIJ,EAAyBoE,KAE7BhE,K,0FCVAiE,IARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,oVAGd,C,sMCLeC,EAFQ,SAAC3c,GAAQ,IAAEgP,EAAY9E,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAE,OAAKwK,YAAiB,GAAD/T,OAAIX,EAAQ,iBAAiBgP,EAAa,E,qDCO5G/N,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACvC,CAAC,GAAG,CAAEI,KAAM,yBA0CGqb,EAxCc5T,sBAAW,SAAC3I,EAAO4I,GAC5C,IAAQ4T,EAAgDxc,EAAhDwc,OAAQC,EAAwCzc,EAAxCyc,MAAOC,EAAiC1c,EAAjC0c,SAAUC,EAAuB3c,EAAvB2c,SAAUC,EAAa5c,EAAb4c,SAErCrb,EAAUX,IAEVic,EAAe1L,uBAAY,SAACtJ,GAC9BA,EAAMC,kBACD4U,GAAUE,EAASJ,EAC5B,GAAG,CAACE,EAAUE,IAER9C,EAAe3I,uBAAY,SAACtJ,GAC9BA,EAAMC,kBACN6U,EAASF,EACb,GAAG,CAACE,IAEJ,OACIpZ,eAACO,IAAQ,CACLoE,QAAS2U,EACTjU,IAAKA,EAAIvK,SAAA,CAETkF,eAAA,QAAM7D,UAAW6B,EAAQG,MAAMrD,SAAA,CAC1Bqe,GAAY,UACZF,EAAOtb,QAEZnC,cAAC+d,IAAuB,CAAAze,SACpBU,cAACkJ,IAAU,CACP8U,KAAK,MACL,aAAW,SACX3U,KAAK,QACLF,QAAS4R,EAAazb,SAEtBU,cAACie,IAAiB,CAACxT,SAAS,gBAKhD,I,oFClCMyT,EAAsB,CACxBC,YAAY,EACZC,UAAU,EACVC,OAAO,EACPC,SAAS,EACTC,QAAQ,GAGNC,EAAe,CAACC,cAAYC,YAAU,MAmE7BC,EAjEgB,SAAHtf,GAIrB,IAHHuJ,EAAIvJ,EAAJuJ,KACAY,EAAOnK,EAAPmK,QACAoV,EAAWvf,EAAXuf,YAEM1d,EAAYC,cAClBma,EAAgFC,cAAxEG,EAAYJ,EAAZI,aAAcF,EAAWF,EAAXE,YAAaqD,EAAOvD,EAAPuD,QAAOC,EAAAxD,EAAEG,wBAAgB,IAAAqD,EAAG,CAAC,EAACA,EAAEle,EAAQ0a,EAAR1a,SACnEme,EAAsCxB,EAAe3c,GAASoe,EAAAnZ,YAAAkZ,EAAA,GAA1CE,GAAFD,EAAA,GAAgBA,EAAA,IAI5BnW,EAAcuJ,uBAAY,SAACtJ,GAC7BU,GACJ,GAAG,CAACA,IAEE0V,EAAmB9M,uBAAY,SAACmM,GAClCU,GAAe,SAAAE,GAEX,OAAOA,EAAS5d,OAAO,CACnBY,KAAMoc,EAAOpc,KACb4V,QAAS,CACL7S,QAAS0Z,EACTvD,QAASK,EACTW,KAAMb,EACNqD,UACApD,qBAGZ,IACAjS,GACJ,GAAG,CAACyV,EAAgBzV,EAASoV,IAE7B,OACIpa,eAAC4a,IAAM,CACHxW,KAAMA,EACNY,QAASA,EACT,kBAAgB,yBAAwBlK,SAAA,CAExCU,cAACqf,IAAW,CAACpb,GAAG,yBAAwB3E,SAAE4B,EAAU,iCACpDlB,cAACsf,IAAI,CACDC,SAAUL,EACV9O,aAAc8N,EACdsB,yBAAuB,EACvBrP,OAAQ,SAAAsP,GAAS,OACbjb,eAAA,QAAAlF,SAAA,CACIU,cAAA,WACAwE,eAACkb,IAAa,CAAApgB,SAAA,CACVU,cAAC2f,IAAiB,CAAC1b,GAAG,yBAAwB3E,SAAE4B,EAAU,wCAC1DlB,cAAC4f,IAAS,CAAC/e,OAAO,OAAO8B,MAAOzB,EAAU,qCAAsCkC,SAAUob,EAAc/P,WAAS,OAErHjK,eAACqb,IAAa,CAAAvgB,SAAA,CACVU,cAAC8f,IAAM,CAAC3W,QAASN,EAAYvJ,SACxB4B,EAAU,sBAEflB,cAAC8f,IAAM,CAAC3W,QAASsW,EAAUM,aAAc5f,MAAM,UAASb,SACnD4B,EAAU,yBAGhB,MAK3B,E,0BCrEMW,EAAYC,YAAW,CACzBwE,KAAM,CAAEgI,QAAS,iBAClB,CAAEnM,KAAM,iBA6IIga,IA3IM,SAAClb,GAClB,IACIiE,EAGAjE,EAHAiE,QACAvE,EAEAM,EAFAN,UAGEqf,GAFKvgB,YACPwB,EAAKvB,GACOugB,eACV/e,EAAYC,cAClB4Q,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GACdzJ,EAAWuJ,mBACXtP,EAAUX,EAAUZ,GAC1Bqa,EAUIC,cATAG,EAAYJ,EAAZI,aACAF,EAAWF,EAAXE,YACAqD,EAAOvD,EAAPuD,QAAOC,EAAAxD,EACPG,wBAAgB,IAAAqD,EAAG,CAAC,EAACA,EACrBle,EAAQ0a,EAAR1a,SACAsf,EAAU5E,EAAV4E,WACAC,EAAO7E,EAAP6E,QACAC,EAAU9E,EAAV8E,WACAC,EAAO/E,EAAP+E,QAEEjb,EAAaC,IAAIH,EAAS,gBAChCQ,EAAsCC,YAAe/E,EAAUwE,GAAWkb,EAAAza,YAAAH,EAAA,GAAnEkZ,EAAW0B,EAAA,GAAEC,EAAcD,EAAA,GAClCvB,EAAsCxB,EAAe3c,GAASoe,EAAAnZ,YAAAkZ,EAAA,GAAvDyB,EAAWxB,EAAA,GAAEC,EAAcD,EAAA,GAC5ByB,EAAaza,mBAAQ,iBAAO,CAAEd,QAAS0Z,EAAavD,QAASK,EAAcW,KAAMb,EAAaqD,UAASpD,mBAAkB,GAAG,CAACmD,EAAalD,EAAcF,EAAaqD,EAASpD,EAAkB7a,IAGhM8f,EAActO,uBAAY,SAAAtJ,GAC5BA,EAAM6X,iBACN9I,GAAQ,GACRtP,EAASuK,QAAUhK,EAAMM,aAC7B,GAAG,CAACb,EAAUsP,IAERhP,GAAcuJ,uBAAY,WAC5ByF,GAAQ,EACZ,GAAG,CAACA,IAEEiG,GAAe1L,uBAAY,SAACqL,GAC9B,IAAAmD,EAA6FnD,EAAO1F,QAAnF6G,EAAWgC,EAApB1b,QAAsBmW,EAAOuF,EAAPvF,QAAOwF,EAAAD,EAAEvE,KAAQ5S,EAAKoX,EAALpX,MAAOqX,EAAKD,EAALC,MAASjC,EAAO+B,EAAP/B,QAASpD,EAAgBmF,EAAhBnF,iBACxEuE,EAAQe,KAAK,CACT/V,OAAQ3D,oBAAU,CACdvB,OAAQsB,KAAKC,UAAUgU,GACvBgB,KAAM5S,EACNqX,MAAOA,EACPE,KAAM,EACNnC,QAASA,EACTpD,iBAAkBrU,KAAKC,UAAUoU,OAIzC8E,EAAe3B,GACf/G,GAAQ,EACZ,GAAG,CAAC0I,EAAgBL,EAAYC,EAASC,EAAYC,IAE/CtF,GAAe3I,uBAAY,SAAC6O,GAC9BhC,GAAe,SAAAE,GACX,OAAOA,EAASrZ,QAAO,SAACtE,EAAGkc,GAAK,OAAKA,IAAUuD,CAAY,GAC/D,GACJ,GAAG,CAAChC,IAGJiC,GAA4C7Y,oBAAS,GAAM8Y,GAAAtb,YAAAqb,GAAA,GAApDE,GAAcD,GAAA,GAAEE,GAAiBF,GAAA,GAuBlCG,GAA4Btb,mBAAQ,WACtC,OAAOwa,EAAYe,MAAK,SAAA9D,GACpB,OAAO3N,IAAQ2N,EAAO1F,QAAS0I,EACnC,GACJ,GAAG,CAACD,EAAaC,IAIjB,OACIjc,eAAA,OACI7D,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,GAAWrB,SAAA,CAE/CU,cAAC8f,IAAM,CACHnf,UAAU,aACVgC,MAAM,kBACN,gBAAc,OACdwG,QAASuX,EAAYphB,SAErBU,cAACwhB,IAAY,MAEjBhd,eAAC+E,IAAI,CACDX,KAAMA,EACNL,SAAUA,EAASuK,QACnBtJ,QAASX,GACT4Y,mBAAoB,KAAKniB,SAAA,CAExBkhB,EAAYnb,KAAI,SAACoY,EAAQC,GACtB,IAAMgE,EAAiB5R,IAAQ2N,EAAO1F,QAAS0I,GAC/C,OACIzgB,cAACwd,EAAoB,CAEjBC,OAAQA,EACRC,MAAOA,EACPC,SAAU+D,EACV7D,SAAUC,GACVF,SAAU7C,IALL2C,EAQjB,IACE4D,GAEE,KADAthB,cAAC+E,IAAQ,CAACoE,QA7DG,WACzB0O,GAAQ,GACRwJ,IAAkB,EACtB,EA0DwD/hB,SAAE4B,EAAU,6BAG5DlB,cAAC2e,EAAsB,CACnB/V,KAAMwY,GACN5X,QA7DkB,WAC1B6X,IAAkB,EACtB,EA4DYzC,YAAaA,MAI7B,C,mRC3JM+C,EAAmBC,wBAAc,CACnCC,OAAQ,KACRC,YAAY,EACZC,WAAW,EACX1d,MAAO,KACP2d,SAAU,OAGdL,EAAiBM,YAAc,mBAEhBN,QCPAO,EAFa,WAAH,OAAS1hB,qBAAWmhB,EAAkB,E,0NCOzD9f,EAAYC,aAAW,SAACC,GAAK,MAAM,CACrCuE,KAAIkO,YAAA,CACA2N,OAAQpgB,EAAMogB,OAAOC,SACrBtU,SAAU,QACVuU,IAAK,EACL/T,QAAS,OACTgU,KAAM,EACNC,MAAO,EACPC,eAAgB,SAChBC,WAAY,UACX1gB,EAAM2gB,YAAYC,GAAG,MAAQ,CAC1BN,IAAK,GACLC,KAAM,MACNC,MAAO,OACPK,UAAW,qBAGtB,GAAG,CAAEzgB,KAAM,oCAGN0gB,EAAgCza,IAAMwB,YAAW,SAAC3I,EAAO4I,GAC3D,IACIoH,EAeAhQ,EAfAgQ,OAAM6R,EAeN7hB,EAdA8hB,wBAAgB,IAAAD,EAAG,KAAIA,EAEvBniB,GAYAM,EAbA3B,SAaA2B,EAZAN,WACAqiB,EAWA/hB,EAXA+hB,aACAxQ,EAUAvR,EAVAuR,QACAhJ,EASAvI,EATAuI,QACAZ,EAQA3H,EARA2H,KACkBqa,GAOlBhiB,EAPAiiB,mBAOAjiB,EANAkiB,2BAAkB,IAAAF,EAAG,CACjBG,MAAOC,WAASC,eAChBC,KAAMF,WAASG,eAClBP,EACDQ,EAEAxiB,EAFAwiB,gBACGC,EAAKjkB,YACRwB,EAAKvB,GAGH8C,EAAUX,IACV8hB,EAAgBvb,IAAM0J,SAEtBjJ,EAAc+a,KAAiB,WAC7Bpa,GACAA,EAAOiR,WAAC,EAAD3P,UAEf,IAEM+Y,EAAmBD,KAAiB,SAACE,GAClCta,GAAoC,MAAzBsa,IAIhBC,aAAaJ,EAAc7Q,SAC3B6Q,EAAc7Q,QAAUkR,YAAW,WAC/Bnb,EAAY,KAAM,UACtB,GAAGib,GACP,IAiBA,OAfA1b,IAAM4N,WAAU,WAKZ,OAJIpN,GACAib,EAAiBd,GAGd,WACHgB,aAAaJ,EAAc7Q,QAC/B,CACJ,GAAG,CAAClK,EAAMma,EAAkBc,IAOvBjb,EAKD5I,cAAA,MAAAyB,wBAAA,CACId,UAAWsjB,kBACPzhB,EAAQ8D,KACR3F,GAEJkJ,IAAKA,GACD6Z,GAAK,IAAApkB,SAETU,cAACkkB,IAAIziB,wBAAA,CACD0iB,QAAM,EACNC,GAAIxb,EACJyb,QAASlB,EACTmB,UAAU,QACNb,GAAe,IAAAnkB,SAEnBU,cAACukB,IAAe9iB,YAAA,CAAC+Q,QAASA,EAASvB,OAAQA,GAAY+R,UAnBxD,IAuBf,IAEeH,I,WCnGThhB,EAAYC,aAAW,SAACC,GAAK,MAAM,CACrCyiB,QAAS,CACLje,gBAAiBxE,EAAMyE,QAAQge,QAAQrO,KACvChW,MAAO4B,EAAMyE,QAAQge,QAAQC,cAEjCpgB,MAAO,CACHkC,gBAAiBxE,EAAMyE,QAAQnC,MAAMqgB,KACrCvkB,MAAO4B,EAAMyE,QAAQnC,MAAMogB,cAE/BE,QAAS,CACLpe,gBAAiBxE,EAAMyE,QAAQnC,MAAMugB,MACrCzkB,MAAO4B,EAAMyE,QAAQnC,MAAMogB,cAElC,GAAG,CAAEtiB,KAAM,4BAGN0iB,EAAwB,SAAC5jB,GAC3B,IAAQwF,EAAkBxF,EAAlBwF,KAAS3C,EAAIrE,YAAKwB,EAAKvB,GACzB8C,EAAUX,IACVX,EAAYC,cAClB2jB,EAAiD5C,IAAzCL,EAAMiD,EAANjD,OAAQE,EAAS+C,EAAT/C,UAAWD,EAAUgD,EAAVhD,WAAYzd,EAAKygB,EAALzgB,MACvC0N,EAAwC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAA/CgT,EAAY/S,EAAA,GAAEgT,EAAehT,EAAA,GAC9BiT,EAAqB7d,KAAKC,UAAU,CAACwa,EAAQE,EAAWD,EAAYzd,IAE1E2R,qBAAU,WACN,GAAe,SAAX6L,EAOJ,OANIxd,GAAO2gB,EAAgB,CAAExS,QAAS,mCAAoC/L,KAAM,UAAWsc,iBAAkB,OAC9F,iBAAXlB,GAA6BC,GAAYkD,EAAgB,CAAExS,QAAS,yCAA0C/L,KAAM,UAAWsc,iBAAkB,OACtI,gBAAXlB,GAA4BE,GAAWiD,EAAgB,CAAExS,QAAS,wCAAyCuQ,iBAAkB,MAI1H,WACHiC,EAAgB,KACpB,CACJ,GAAG,CAACC,IAMJ,OAAKF,EAGD/kB,cAAC6iB,EAA6BphB,YAAA,CAC1BmH,KAAM7C,QAAQgf,GACdhC,iBAAkBgC,EAAahC,iBAC/BvZ,QAVY,WAChBwb,EAAgB,KACpB,EASQxS,QAASuS,EAAavS,SAAWtR,EAAU6jB,EAAavS,QAASuS,EAAaG,aAC9ElC,aAAc,CACVriB,UAAWkE,IAAWrC,EAAQuiB,EAAate,MAAQA,MAEnD3C,IAXc,IAc9B,EAOA+gB,EAAsBljB,aAAe,CACjC8E,KAAM,QAGKoe,Q,kQCCTM,GAAkB,SAAAC,GAAAC,YAAAF,EAAAC,GAAA,IAAAE,EAAAC,YAAAJ,GAGpB,SAAAA,EAAYlkB,GAAQ,IAADukB,EAMZ,OANYtM,YAAA,KAAAiM,IACfK,EAAAF,EAAAG,KAAA,KAAMxkB,IAHVyL,MAAQ,CAAEiC,UAAU,EAAOtK,MAAO,KAAMqhB,UAAW,MAI/CzkB,EAAM+e,QAAQ2F,QAAO,WACbH,EAAK9Y,MAAMiC,UACX6W,EAAKI,SAAS,CAAEjX,UAAU,GAElC,IAAG6W,CACP,CA8DC,OA9DAxM,YAAAmM,EAAA,EAAA5f,IAAA,oBAAAjE,MAED,SAAkB+C,EAAOqhB,GACrBrM,KAAKuM,SAAS,CAAEjX,UAAU,EAAMtK,QAAOqhB,aAC3C,GAAC,CAAAngB,IAAA,SAAAjE,MAED,WACI,IAAAukB,EAmBIxM,KAAKpY,MAlBL6kB,EAAMD,EAANC,OACAxmB,EAAQumB,EAARvmB,SACAkD,EAAOqjB,EAAPrjB,QACA7B,EAASklB,EAATllB,UACOolB,EAAcF,EAArBxhB,MACA2hB,EAASH,EAATG,UACAC,EAAMJ,EAANI,OACAC,EAAIL,EAAJK,KACAnB,EAAYc,EAAZd,aACAnc,EAAIid,EAAJjd,KACAud,EAAON,EAAPM,QACAnhB,EAAK6gB,EAAL7gB,MAMG/D,GAJE4kB,EAALrmB,MACQqmB,EAARna,SACOma,EAAP7F,QACa6F,EAAbO,cACQ3mB,YAAAomB,EAAAnmB,KAEZ2mB,EAAuChN,KAAK3M,MAApCiC,EAAQ0X,EAAR1X,SAAUtK,EAAKgiB,EAALhiB,MAAOqhB,EAASW,EAATX,UACzB,OACIlhB,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIkF,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,SAAUrC,EAAQ8D,KAAM3F,IAC1CM,GAAK,IAAA3B,SAAA,CAETU,cAACumB,IAAoB,IACrB/hB,eAAA,OAAK7D,UAAW6B,EAAQgkB,SAASlnB,SAAA,CAC5BmnB,wBAAcX,EAAQ,CAAE9gB,QAAO4D,OAAMqd,WACtCzhB,eAAA,QAAM7D,UAAW6B,EAAQkkB,mBAAmBpnB,SAAA,CACvCmnB,wBAAcN,EAAS,CACpB7mB,SAAUmnB,wBAAcP,EAAM,CAC1BD,SACAU,eAAgBX,MAGxBhmB,cAAA,OAAKiE,GAAG,eAAetD,UAAW6B,EAAQ+V,QAAQjZ,SAC7CqP,EACG3O,cAAC+lB,EAAc,CACX1hB,MAAOA,EACPqhB,UAAWA,EACX1gB,MAAOA,IAGX1F,cAMpBU,cAAC6kB,EAAqB,IACrB4B,wBAAc1B,KAG3B,KAACI,CAAA,CAxEmB,CAASyB,aAA3BzB,GA0FKxjB,aAAe,CAClBmkB,OAAQe,IACRxiB,MAAOyiB,IACPZ,KAAMa,IACNhC,aAAciC,IACdb,QAASc,KAIjB,IAIMC,GAAiBC,IACnBC,aALoB,SAAA1a,GAAK,MAAK,CAC9B9D,KAAM8D,EAAM2a,MAAMC,GAAGC,YACxB,GAKO,CAAC,GAELC,IACAC,aA9JW,SAAA1lB,GAAK,IAAA2lB,EAAAC,EAAA,OAChBC,YAAa,CACTthB,KAAM,CACFgI,QAAS,OACTuZ,cAAe,SACf1F,OAAQ,EACR2F,UAAW,QACXvhB,gBAAiBxE,EAAMyE,QAAQ6H,WAAW0Z,QAC1Cja,SAAU,WACV7L,SAAU,cACVsM,MAAO,OACPpO,MAAO4B,EAAMyE,QAAQG,gBACjB5E,EAAMyE,QAAQ6H,WAAW0Z,UAGjCvB,UAAQkB,EAAA,CACJpZ,QAAS,OACTuZ,cAAe,SACfG,SAAU,GAACxT,YAAAkT,EACV3lB,EAAM2gB,YAAYC,GAAG,MAAQ,CAC1BsF,UAAWlmB,EAAMG,QAAQ,KAC5BsS,YAAAkT,EACA3lB,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5BD,UAAWlmB,EAAMG,QAAQ,KAC5BwlB,GAELhB,mBAAoB,CAChBpY,QAAS,OACT0Z,SAAU,GAEdzP,SAAOoP,EAAA,CACHphB,gBAAiBxE,EAAMyE,QAAQ6H,WAAW0Z,QAC1C5F,OAAQ,EACR7T,QAAS,OACTuZ,cAAe,SACfG,SAAU,EACVG,UAAW,EACXla,QAASlM,EAAMG,QAAQ,GACvBkmB,WAAYrmB,EAAMG,QAAQ,GAC1BmmB,YAAa,GAAC7T,YAAAmT,EACb5lB,EAAM2gB,YAAYC,GAAG,MAAQ,CAC1B0F,YAAa,IAChB7T,YAAAmT,EACA5lB,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5Bja,QAAS,IACZ0Z,IAEN,GA+GgB,CAAExlB,KAAM,aANRglB,CAOrBhC,IAEImD,GAAS,SAAHjpB,GAGL,IAFIkpB,EAAalpB,EAApB0C,MACGd,EAAKxB,YAAAJ,EAAAoS,IAEF+W,EAAY1W,iBAAOyW,GACzBxW,EAA0B1J,oBAAS,kBAAMogB,YAAeF,EAAc,IAACvW,EAAAnM,YAAAkM,EAAA,GAAhEhQ,EAAKiQ,EAAA,GAAE0W,EAAQ1W,EAAA,GAStB,OAPAgE,qBAAU,WACFwS,EAAU1V,UAAYyV,IACtBC,EAAU1V,QAAUyV,EACpBG,EAASD,YAAeF,IAEhC,GAAG,CAACA,EAAeC,EAAWzmB,EAAO2mB,IAGjC1oB,cAAC2oB,IAAa,CAAC5mB,MAAOA,EAAMzC,SACxBU,cAACknB,GAAczlB,YAAA,GAAKR,KAGhC,EAMAqnB,GAAO3mB,aAAe,CAClBI,MAAO6mB,MAGIN,U,0RCxMAO,GAdc,SAAHxpB,GAA+C,IAADypB,EAAAzpB,EAAxCwB,cAAM,IAAAioB,EAAG,OAAMA,EAAEhiB,EAAQzH,EAARyH,SAAU/F,EAAM1B,EAAN0B,OACjD4B,EAAQtB,KAAIN,EAAQF,GACpBoD,EAAK5C,KAAIN,EAAQ,MAEvB,OACIf,cAACZ,KAAc,CAEXG,GAAE,GAAAgC,OAAKuF,EAAQ,KAAAvF,OAAI0C,EAAE,SAAQ3E,SAE5BqD,GAAgB,OAHb,QAMhB,ECKeomB,GAZS,SAAC9nB,GACrB,IAAM+nB,EAAeC,eAErB,OACIzkB,eAAC0kB,KAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,KAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,KAAkB3nB,YAAA,GAAKunB,IACxBhpB,cAAC6oB,GAAoBpnB,wBAAA,GAAKunB,GAAkB/nB,MAGxD,E,sMC6DMY,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNgb,cAAe,CACf,EACH,GACD,CAAE5a,KAAM,oBAKNiI,GAAcpK,cAACgd,KAAW,IAmBjBqM,GAtGO,SAAApoB,GAClB,IAAA6K,EAYI7K,EAXA0B,aAAK,IAAAmJ,EAAG,oBAAmBA,EAE3BnL,GASAM,EAVAuB,QAUAvB,EATAN,WAASsL,EASThL,EARAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EAElBlL,GAMAE,EAPAkI,QAOAlI,EANAF,QACA+F,EAKA7F,EALA6F,SAAQ6P,EAKR1V,EAJA2V,SAAUC,OAAU,IAAAF,EAAG,OAAMA,EAC7BG,EAGA7V,EAHA6V,UACAC,EAEA9V,EAFA8V,UACGjT,EAAIrE,YACPwB,EAAKvB,IACH8C,EAAUX,GAAUZ,GACpBkW,EAASC,eACTR,EAAWS,eACXC,EAAUC,eACV3W,EAAWuE,aAAmBlE,GACpCuW,EAAqCC,aACjC,CACIhR,KAAM,UACN7F,WACAmX,QAAS,CAAE9T,GAAIlD,EAAOkD,GAAI+T,aAAcjX,IAE5C,CACImW,aAAc,WACdJ,eAAyB/L,IAAd+L,EACLA,EACA,WACEK,EAAO,2BAA4B,OAAQ,CAAEc,YAAa,IAAK,GAC/DrB,EAASC,EAAY/P,GACrBwQ,GACJ,EACJP,eAAyBhM,IAAdgM,EACLA,EACA,SAAA1S,GACE8S,EACqB,kBAAV9S,EACDA,EACAA,EAAMmO,SAAW,6BACvB,UACA,CACIhR,EACqB,kBAAV6C,EACDA,EACAA,GAASA,EAAMmO,QACXnO,EAAMmO,aACNzH,IAGtBuM,GACJ,IACNI,EAAA7R,YAAA2R,EAAA,GAlCC0F,EAAaxF,EAAA,GAAIE,EAAOF,EAAA,GAAPE,QAoCxB,OACI5X,cAAC8f,KAAMre,wBAAA,CACH0H,QAAS+T,EACT/E,SAAUP,EACVjV,MAAOA,EACPhC,UAAWkE,IACP,oBACArC,EAAQua,cACRpc,IAGAmD,GAAI,IAAAxE,SAEP6K,IAHG,SAMhB,E,0FC3Cemf,GAtBY,SAAHlY,GAA6C,IAT9C/R,EASOsB,EAASyQ,EAATzQ,UAAW4oB,EAAWnY,EAAXmY,YAAgBzlB,EAAIrE,YAAA2R,EAAAK,IACzD+X,EAAuCP,aAAenlB,GAA9CgD,EAAQ0iB,EAAR1iB,SAAU/F,EAAMyoB,EAANzoB,OAAQH,EAAQ4oB,EAAR5oB,SAC1B,OACI4D,eAACuX,KAAUta,wBAAA,CAACd,UAAWA,KAZRtB,EAYyCyE,GAX5DgD,SACSzH,EAATsB,UACOtB,EAAPoqB,QACOpqB,EAAPqqB,QACQrqB,EAARuB,SACOnB,YAAAJ,EAAAK,MAM0D,IAAAJ,SAAA,CACxDiqB,EAAYI,IAAI,UAAW/oB,IAAaZ,cAACqpB,GAAa,CAACviB,SAAUA,EAAU/F,OAAQA,IACnFwoB,EAAYI,IAAI,SAAU/oB,IAAaZ,cAAC4pB,KAAY,CAAC3S,UAAU,EAAOnQ,SAAUA,EAAU/F,OAAQA,EAAQmW,aAAa,kBAGpI,E,0PCTa2S,GAAW,SAAC5oB,GACrB,IACI6oB,EASA7oB,EATA6oB,QACAC,EAQA9oB,EARA8oB,MACAC,EAOA/oB,EAPA+oB,YACA1qB,EAMA2B,EANA3B,SAEAqB,GAIAM,EALAuB,QAKAvB,EAJAN,WAEAqE,GAEA/D,EAHAb,UAGAa,EAFA+D,OACGlB,EAAIrE,YACPwB,EAAKvB,IAEH8C,EAAUX,GAAUZ,GAE1BuoB,EAA8DP,aAAehoB,GAArE6F,EAAQ0iB,EAAR1iB,SAAUmjB,EAAYT,EAAZS,aAAclpB,EAAMyoB,EAANzoB,OAAQH,EAAQ4oB,EAAR5oB,SAAUspB,EAAOV,EAAPU,QAClDC,EAA6BrO,aAAsB7a,GAA3CwoB,EAAOU,EAAPV,QAASC,EAAOS,EAAPT,QACXU,EAAgB,OAANrpB,QAAM,IAANA,OAAM,EAANA,EAAQqpB,QAExB,IAAKrpB,EAAQ,OAAO,KACpB,IAAKzB,EAAU,OAAO,KAEtB,IAAM+qB,EAAeD,EACjBpqB,cAACspB,GAAkB,CAACC,YAAatoB,EAAMsoB,cAEpB,qBAAZO,GAA2BL,EAC9BzpB,cAACsqB,KAAkB,IAEnBR,EAGR,OACItlB,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,YAAarC,EAAQ8D,KAAM3F,IAC7C4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAE3BU,cAACwqB,KAAc,CACXxlB,MAAOA,EACPjE,OAAQA,EACRkpB,aAAcA,IAEjBD,EACAK,GACGjkB,uBAAaikB,EAAY5oB,YAAA,CACrBqF,WACA0I,KAAMzO,EACN2oB,UACAD,UACA7oB,YAEGypB,EAAappB,QAExBuD,eAAA,OAAK7D,UAAWkE,IAAW,oBAAqBrC,EAAQ+V,QAAO/D,YAAA,GAAKhS,EAAQ4nB,QAAUA,IAAW9qB,SAAA,CAC7FU,cAAA,OAAKW,UAAW6B,EAAQ2T,KAAK7W,SACxByB,GAAU0H,WAASpD,IAAI/F,GAAU,SAACmK,EAAOiU,GAAK,OAC3CtX,uBAAaqD,EAAO,CAChBlE,IAAKmY,EACL9c,WACAkG,WACA/F,SACAmpB,WACF,MAGTH,GACG/pB,cAAA,OAAKW,UAAW6B,EAAQunB,MAAMzqB,SACzB8G,uBAAa2jB,EAAO,CACjBnpB,WACAkG,WACA/F,SACAmpB,oBAQ5B,EAqBAL,GAASloB,aAAe,CACpBa,QAAS,CAAC,EACVpC,UAAW,MACX0pB,QAAS9pB,cAACsqB,KAAkB,IAC5BN,YAAahqB,cAACyqB,GAAsB,KAGxC,IAAM5oB,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFgI,QAAS,OACTuZ,cAAe,UAEnBuC,QAAS,CACLM,QAAS,GACTC,cAAe,QAEnBpS,QAAS,CACLjK,QAAS,OACTsc,SAAU,QAEdzU,KAAM,CACF7H,QAAS,OACTuZ,cAAe,SACfG,SAAU,GAEd6C,UAAW,CACP5C,UAAW,OAEf8B,MAAKvV,YAAA,CACDsW,WAAY,IACX/oB,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5B4C,WAAY,IAGvB,GAAG,CAAE3oB,KAAM,WAENooB,GAAoB,SAAHlrB,KACnByH,SAAezH,EACf4qB,aAAmB5qB,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACd0rB,QAAc1rB,EACd2gB,QAAc3gB,EACd4E,GAAS5E,EACT2rB,OAAa3rB,EACbuY,QAAcvY,EACdqM,SAAerM,EACfG,MAAYH,EACZ4D,QAAc5D,EACd4rB,QAAc5rB,EACdkqB,YACO,OAAA9pB,YAAAJ,EAAAoS,GACA,E,2CCpJI+Y,GAbQ,SAAHnrB,GAAgD,IAA1CuB,EAAQvB,EAARuB,SAAUC,EAAMxB,EAANwB,OAAQE,EAAM1B,EAAN0B,OAClCG,GADkDzB,YAAAJ,EAAAK,IACtCyB,eAElB,IAAKJ,EAAQ,OAAO,KAEpB,IAAMmqB,EAAehqB,EAAU,aAADK,OAAcX,EAAQ,SAAS,CAAEqX,YAAa,IACtEkT,EAAa9pB,eAAIN,EAAQF,GAE/B,MAAM,GAANU,OAAU2pB,EAAY,MAAA3pB,OAAK4pB,EAC/B,E,mECNMtpB,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF2hB,UAAWlmB,EAAMG,QAAQ,GACzBkpB,aAAcrpB,EAAMG,UACpB,gBAAiB,CACb+lB,UAAW,IAGnB1P,QAAS,CAAC,EACb,IAEK8S,GAAkB,SAAHhsB,GAOd,IANHC,EAAQD,EAARC,SACSgsB,EAAejsB,EAAxBmD,QACA7B,EAAStB,EAATsB,UACAgC,EAAKtD,EAALsD,MACW4oB,EAAOlsB,EAAlBe,UACGa,EAAKxB,YAAAJ,EAAAK,IAGF8C,EAAUX,GAAU,CAAEW,QAAS8oB,IAC/BpqB,EAAYC,cAClB,OACIqD,eAAA,OAAK7D,UAAS,GAAAY,OAAKiB,EAAQ8D,KAAI,KAAA/E,OAAIZ,GAAYrB,SAAA,CAC1CqD,GAAS3C,cAACC,KAAU,CAACC,QAAQ,YAAYC,MAAM,gBAAgBqrB,cAAY,EAACC,QAAM,EAAAnsB,SAAE4B,EAAUyB,EAAO,CAAEnB,EAAGmB,MAC3G3C,cAACurB,EAAO,CAAC5qB,UAAW6B,EAAQ+V,QAAQjZ,SAC/B8G,uBAAaqC,WAASijB,KAAKpsB,GAASmC,wBAAA,GAC9BR,GACA3B,EAAS2B,YAMhC,EAEAoqB,GAAgB1pB,aAAe,CAC3BvB,UAAW,OAIAirB,U,wFC3CTxpB,G,OAAYC,IACd,SAAAC,GAAK,IAAA4pB,EAAA,MAAK,CACNrlB,MAAIqlB,EAAA,CACArd,QAAS,OACTkU,eAAgB,WAChBC,WAAY,aACZmJ,cAAe7pB,EAAMG,QAAQ,GAC7B4lB,UAAW,SAAOtT,YAAAmX,EACjB5pB,EAAM2gB,YAAYC,GAAG,MAAQ,CAC1B0F,YAAa,EACbwD,aAAc,IACjBrX,YAAAmX,EACA5pB,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5B2D,aAAc9pB,EAAMG,QAAQ,KAC/BsS,YAAAmX,EACA5pB,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5Bja,QAASlM,EAAMG,QAAQ,GACvBqE,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,QAC7CH,GAEL7B,QAAOtV,YAAA,CACH4T,WAAYrmB,EAAMG,QAAQ,GAC1B4lB,UAAW/lB,EAAMG,QAAQ,IACxBH,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5Bja,QAASlM,EAAMG,QAAQ,GACvBqE,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,QAGrD,GACD,CAAE3pB,KAAM,uBAGN4pB,GAAc,SAAA9qB,GACgDA,EAAxDuB,QAAR,IAAkC6Y,EAA8Bpa,EAA9Boa,QAASyO,EAAqB7oB,EAArB6oB,QAAYhmB,EAAIrE,YAAKwB,EAAKvB,IAC/D8C,EAAUX,GAAUZ,GAC1B,OACIuD,eAACwnB,KAAO,CAACrrB,UAAW6B,EAAQ8D,KAAKhH,SAAA,CAC5B+b,GACGjT,IAAMhC,aAAaiV,EAAO5Z,wBAAA,GACnBqC,GAAI,IACPmY,QAAS,UAEjBjc,cAAA,WACC8pB,GACG1hB,IAAMhC,aAAa0jB,EAAOroB,wBAAA,GACnBqC,GAAI,IACPnD,UAAW6B,EAAQsnB,QACnBzO,WACGyO,EAAQ7oB,UAI/B,EAWemH,OAAMyE,KAAKkf,I,uIC7DpBlqB,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCkqB,OAAQ,CACJ9rB,MAAO4B,EAAMyE,QAAQ0lB,KAAKC,WAEjC,IA6BcC,GA3BwB,SAAH/sB,GAAeA,EAATsB,UAAiBtB,EAANiL,OAAiBjL,EAATgtB,UAAiBhtB,EAAN0B,OAAgBtB,YAAAJ,EAAAK,IAAQ,IAEtF8C,EAAUX,KAChByZ,EAAqDC,eAA7CzU,EAAQwU,EAARxU,SAAUhB,EAAMwV,EAANxV,OAAQ4V,EAAYJ,EAAZI,aAAsBjc,YAAA6b,EAAA7J,IAEhD,OACIzR,cAAC8f,KAAM,CACH1f,UAAWC,KACXd,GAAI,CACA4M,SAAUrF,EACVkE,OAAQ3D,qBAAU,CACdvB,OAAQsB,KAAKC,UAAS5F,wBAAC,CAAC,EACjBqE,GACA4V,OAIfrS,KAAK,QACLmT,kBAAgB,EAChB7b,UAAW6B,EAAQypB,OAAO3sB,SAC7B,mFAIT,E,sCCtBMuC,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF8hB,WAAY,EACZwD,cAAe,EACf9D,UAAW,GAElB,IAEKwE,GAAmB,SAAArrB,GACrB,IAAQN,EAA0CM,EAA1CN,UAAqB0a,GAAqBpa,EAA/Bia,SAA+Bja,EAArBoa,SAAYvX,EAAIrE,YAAKwB,EAAKvB,IACjD8C,EAAUX,KAChByZ,EAQIC,aAAeta,GANfwa,GADWH,EAAXE,YACgBF,EAAhBG,kBACAC,EAAYJ,EAAZI,aAEAe,GADQnB,EAARxU,SACWwU,EAAXmB,aACAd,EAAUL,EAAVK,WACAC,EAAKN,EAALM,MAEEhb,EAAWuE,aAAmBrB,GAEpC,OAAOkC,mBACH,kBACIxB,eAACuX,KAAUta,wBAAA,CACPd,UAAWA,EACX6B,QAAS,CAAE8D,KAAM9D,EAAQ8D,OAErB0V,aAAsBlY,IAAK,IAAAxE,SAAA,CAE9B+b,GACGjV,uBAAaiV,EAAS,CAClBza,WACA+a,aACAF,mBACAC,eACAO,QAAS,WAGjBjc,cAACosB,GAAuB3qB,YAAA,GAAKqC,OACpB,GAEjB,CAAClD,EAAU6a,EAAkBC,EAAce,EAAapB,EAASO,GAEzE,EAIA0Q,GAAiB3qB,aAAe,CAC5B8a,YAAa,GACbC,gBAAiB,kBAAM,IAAI,GAGhB4P,U,+dC7DTC,GAAY,SAAHltB,GAOR,IANHC,EAAQD,EAARC,SACAwqB,EAAOzqB,EAAPyqB,QACAzO,EAAOhc,EAAPgc,QACWkQ,EAAOlsB,EAAlBe,UACAQ,EAAQvB,EAARuB,SACGK,EAAKxB,YAAAJ,EAAAK,IAIR,OACIM,cAACwsB,KAAuB,CAAClrB,MAAOV,EAAStB,SACrCkF,eAACioB,KAAQhrB,wBAAA,GACDR,GAAK,IAAA3B,SAAA,EAEP+b,GAAWyO,IACT9pB,cAAC0sB,GAAgB,CACbrR,QAASA,EACTyO,QAASA,IAGjBtlB,eAAC+mB,EAAO,CAAAjsB,SAAA,CACH8G,uBAAaqC,WAASijB,KAAKpsB,GAASmC,YAAA,GAC9B8oB,GAAkBtpB,KAEzBjB,cAAC2sB,KAAU,YAS/B,EAEAJ,GAAU5qB,aAAe,CACrBmoB,QAAS9pB,cAAC4sB,GAAuB,IAEjCxsB,UAAWysB,KAIXjrB,UAAU,GAId,IAAM2oB,GAAoB,SAACtpB,GAAK,OAAK,SAAAmQ,KACjCtK,SAAesK,EACfoK,YAAkBpK,EAClB5B,KAAW4B,EACX6Y,aAAmB7Y,EACnBqK,iBAAuBrK,EACvB0b,oBAA0B1b,EAC1BsK,aAAmBtK,EACnByK,UAAgBzK,EAChBqY,QAAcrY,EACdsY,QAActY,EACd2Z,QAAc3Z,EACd2b,WAAiB3b,EACjB4O,QAAc5O,EACd7D,IAAU6D,EACVwG,QAAcxG,EACd4Z,OAAa5Z,EACb1F,SAAe0F,EACf5R,MAAY4R,EACZyM,SAAezM,EACf4b,aAAmB5b,EACnBsL,gBAAsBtL,EACtBnO,QAAcmO,EACd4P,KAAW5P,EACXmY,YAAkBnY,EAClByN,QAAczN,EACdxQ,SAAewQ,EACfqL,YAAkBrL,EAClB8O,WAAiB9O,EACjB+O,QAAc/O,EACdgP,WAAiBhP,EACjBiP,QAAcjP,EACduK,WAAiBvK,EACjB6b,iBAAuB7b,EACvBiL,KAAWjL,EACXwK,MACO,OAAAnc,YAAA2R,EAAAK,GACA,CAAD,EAEK8a,M,yECvFT1qB,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCmrB,OAAQ,SAACjsB,GAAW,IAADksB,EACTC,EAAmBC,aAAoB,OAALpsB,QAAK,IAALA,GAAa,QAARksB,EAALlsB,EAAOF,cAAM,IAAAosB,OAAR,EAALA,EAAeG,UACvD,GAAKF,EACL,MAAO,CACH7mB,gBAAyC,UAAvBxE,EAAMyE,QAAQC,KAAoB1E,EAAMyE,QAAQ4mB,GAAkBxI,MAAQ7iB,EAAMyE,QAAQ4mB,GAAkB1I,KAEpI,EACH,GAAG,CAAEviB,KAAM,wBAaGorB,GAXa,SAACtsB,GACzB,IAAMuB,EAAUX,GAAUZ,GAE1B,OACIjB,cAACwtB,KAAM,CAAC,aAAW,QAAQttB,QAAQ,UAAUsC,QAAS,CAAEirB,aAAcjrB,EAAQ0qB,QAAS5tB,SACnFU,cAAC0tB,KAAiBjsB,YAAA,GAAKR,KAInC,E,yNCjBM0I,GAAUvB,IAAMwB,YAAW,SAAC3I,EAAO4I,GAAG,OAAK7J,cAACK,KAAIoB,YAAA,CAACqI,SAAUD,GAAS5I,GAAS,IAE7E0sB,GAAiCvlB,IAAMwB,YAAW,SAAAvK,EAQrDwK,GAAS,IAPRlJ,EAAStB,EAATsB,UAGAI,GAHS1B,EACTyH,SAAazH,EACbsD,MACMtD,EAAN0B,QAAMsJ,EAAAhL,EACNiL,cAAM,IAAAD,EAAG,QAAOA,EAEbvG,GADUzE,EAAb6I,cACOzI,YAAAJ,EAAAK,KAEDwB,EAAYC,cACZysB,EAAyB,OAAN7sB,QAAM,IAANA,OAAM,EAANA,EAAQ6sB,iBAC3BzV,EAAWpS,SAAS6nB,GACpBruB,EAAKquB,EAAmB,CAC1BzhB,SAAS,cAAD5K,OAAgBqsB,EAAiB3pB,GAAE,SAC3C+G,OAAO,IAADzJ,OAAM8F,qBAAU,CAClBuS,UAAWxS,KAAKC,UAAU,CAAEwmB,QAAS9sB,EAAOkD,SAEhD,GAEJ,OACIjE,cAACgJ,KAAO,CAAChE,MAAO9D,EAAU,iBAAkB,CAAEM,EAAG,SAAWyH,WAAY,IAAI3J,SACxEU,cAAA,QAAAV,SACIU,cAACkJ,KAAUzH,wBAAA,GACHqC,GAAI,IACR,aAAY5C,EAAU,iBAAkB,CAAEM,EAAG,SAC7CpB,UAAWuJ,GACXpK,GAAIA,EACJ+K,OAAQA,EACRT,IAAKA,EACLV,QAASJ,GACToP,SAAUA,EACV9O,KAAK,QACL1I,UAAWA,EACXR,MAAM,UAASb,SAGfU,cAAC8tB,KAAa,UAKlC,IAEM/kB,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EASlC4kB,MChDT5kB,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EA2BlCglB,GAxBkB,SAAC9sB,GAChC,IAAQN,EAAsCM,EAAtCN,UAAWqtB,EAA2B/sB,EAA3B+sB,KAAMptB,EAAqBK,EAArBL,SAAUG,EAAWE,EAAXF,OAC7BktB,EAAmBC,aAAoB,CAC3CttB,WACAyrB,UAAWzrB,EACXG,SACAF,OAAQ,KACRmtB,SAGF,OACExpB,eAAA,QAAAlF,SAAA,CACEU,cAAC2tB,GAA8BlsB,YAAA,GAAKR,IACpCjB,cAACK,KAAI,CACHd,GAAI0uB,EACJttB,UAAWA,EACXwI,QAASJ,GAAgBzJ,SAEzBU,cAACyE,KAAShD,YAAA,GAAKR,QAIvB,E,2BCtBMY,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF2hB,UAAWlmB,EAAMG,QAAQ,GACzBkpB,aAAcrpB,EAAMG,UACpB,gBAAiB,CACb+lB,UAAW,IAGnBkG,aAAc,CACV7f,QAAS,OACTsc,SAAU,QAEdwD,YAAa,CACTC,YAAatsB,EAAMG,QAAQ,GAC3B,eAAgB,CACZmsB,YAAa,IAGxB,IA8CcC,GA5CK,SAAHjvB,GAA2D,IAA5CisB,EAAejsB,EAAxBmD,QAA0B7B,EAAStB,EAATsB,UAAcM,EAAKxB,YAAAJ,EAAAK,IAC1D8C,EAAUX,GAAU,CAAEW,QAAS8oB,IAC7BvqB,EAAWE,EAAXF,OAER,IAAKA,EAAU,OAAO,KACtB,IAAMiE,EAAQjE,EAAOyR,QAAQxN,MACvBupB,EAAOxtB,EAAOyR,QAAQ+b,KACZxtB,EAAOytB,QAEvB,OACIhqB,eAACiqB,KAAI,CAAC9tB,UAAS,GAAAY,OAAKiB,EAAQ8D,KAAI,KAAA/E,OAAIZ,GAAYrB,SAAA,CAC5CU,cAAC0uB,KAAU,CACPxB,OAAQltB,cAACutB,GAAmB9rB,YAAA,GAAKR,IACjC+D,MAAOhF,cAACC,KAAU,CAACC,QAAQ,KAAIZ,SAAE0F,MAKrChF,cAAC2uB,KAAW,CAAArvB,SACRU,cAACC,KAAU,CAACC,QAAQ,YAAYsrB,cAAY,EAAAlsB,SAAEivB,MAKlD/pB,eAACoqB,KAAgBntB,wBAAA,CAACd,UAAW6B,EAAQ2rB,cAAkBltB,GAAK,IAAA3B,SAAA,CACxDU,cAAC6uB,KAAgB,CAAChuB,OAAO,SAASF,UAAW6B,EAAQ4rB,cACrDpuB,cAAC8uB,KAAa,CAACjuB,OAAO,MAAMF,UAAW6B,EAAQ4rB,cAC/CpuB,cAACU,KAAS,CAACG,OAAO,OAAOF,UAAW6B,EAAQ4rB,cAC5CpuB,cAAC+uB,KAAW,CAACluB,OAAO,WAAWF,UAAW6B,EAAQ4rB,cAClDpuB,cAACgvB,KAAS,CAACnuB,OAAO,YAAYouB,UAAQ,EAACtuB,UAAW6B,EAAQ4rB,cAC1DpuB,cAACgvB,KAAS,CAACnuB,OAAO,eAAeouB,UAAQ,EAACtuB,UAAW6B,EAAQ4rB,cAC7DpuB,cAACkvB,KAAc,CAACruB,OAAO,WAAW8B,MAAM,+BAA+B0pB,UAAU,QAAQ2B,MAAM,EAAOrtB,UAAW6B,EAAQ4rB,YAAY9uB,SACjIU,cAAC+tB,GAAwB,CAACltB,OAAO,OAAOmtB,KAAK,WAEjDhuB,cAACkvB,KAAc,CAACruB,OAAO,MAAM8B,MAAM,mCAAmC0pB,UAAU,YAAY2B,MAAM,EAAOrtB,UAAW6B,EAAQ4rB,YAAY9uB,SACpIU,cAACyE,KAAS,CAAC5D,OAAO,iBAKtC,E,gCCnEMgB,GAAYC,YAAW,CACzBwE,KAAM,CACF,EAEJ6oB,OAAQ,CACJ7gB,QAAS,eACTzL,OAAQ,QACR+f,UAAW,cAEf5d,MAAO,CACHyF,SAAU,IAEd2kB,IAAK,CACDhE,aAAc,MAqBPiE,GAjBG,WACExtB,KAEhB,OACI2C,eAACqK,KAAG,CAACP,QAAQ,OAAOuZ,cAAc,SAAQvoB,SAAA,CACtCkF,eAACqK,KAAG,CAACP,QAAQ,OAAOuZ,cAAc,SAASpF,WAAW,SAAS2I,aAAc,EAAE9rB,SAAA,CAC3EU,cAACsvB,KAAc,CAACnvB,MAAM,aACtBH,cAACC,KAAU,CAACE,MAAM,gBAAeb,SAAC,8DAEtCU,cAAC6O,KAAG,CAACP,QAAQ,OAAOuZ,cAAc,SAASpF,WAAW,SAAS2I,aAAc,EAAE9rB,SAC3EU,cAACC,KAAU,CAACE,MAAM,gBAAgBovB,MAAM,SAASrvB,QAAQ,UAASZ,SAAC,2aAKnF,ECrCMuC,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFiI,MAAOxM,EAAMG,QAAQ,KAE5B,IAccstB,GAZI,SAACvuB,GAChB,IAAMuB,EAAUX,KAEhB,OACI7B,cAAA,OAAKW,UAAW6B,EAAQ8D,KAAKhH,SACzBU,cAAC2uB,KAAW,CAAArvB,SACRU,cAACyvB,GAAc,OAI/B,E,SCRMC,GAAuB,WAAH,OACtB1vB,cAAC+oB,GAAe,CAACloB,OAAO,iBAAkB,EAGxC8uB,GAAmB,SAAHtwB,GAAA,IAAMyH,EAAQzH,EAARyH,SAAU0I,EAAInQ,EAAJmQ,KAAcogB,GAAAvwB,EAARuB,SAAQvB,EAAEuX,iBAAQ,IAAAgZ,EAAG,OAAMA,EAAA,OACnE5vB,cAAC+b,KAAU,CAAAzc,SACNiqB,KAAYI,IAAI,cAAe,UAAY3pB,cAAC6vB,KAAiB,CAACjZ,SAAUA,EAAU9P,SAAUA,EAAU/F,OAAQyO,KACtG,EAwCFsgB,GArCG,SAAC7uB,GAAW,IAAD8uB,EAAAC,EACnBC,EAAkBC,aAAkBjvB,GACpCL,EAAiC,QAAzBmvB,EAAGE,EAAgBlvB,cAAM,IAAAgvB,OAAA,EAAtBA,EAAwBnvB,SACnCuvB,EAA4B,QAAzBH,EAAGC,EAAgBlvB,cAAM,IAAAivB,OAAA,EAAtBA,EAAwBG,IAEpC,OACInwB,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC3CU,cAACowB,KAAmB,CAAC9uB,MAAO2uB,EAAgB3wB,SACxCkF,eAACqlB,GAAQpoB,oCAAA,GACDR,GACAgvB,GAAe,IACnBnG,QAAS9pB,cAAC2vB,GAAgB,IAC1B5F,MAAO/pB,cAACwvB,GAAU,IAClBxF,YAAahqB,cAAC0vB,GAAoB,IAClC1qB,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,iBAAoBI,IAAU3B,SAAA,CAE5DU,cAACsuB,GAAW,IACZtuB,cAACqrB,GAAe,CAAC1oB,MAAM,8HAAyBrD,SAC5CU,cAACusB,GAAS,CACN3rB,SAAS,eACTkG,SAAS,gBACThB,OAAQ,CACJlF,WACAuvB,OAEJ9T,KAAM,CAAE5S,MAAO,YAAaqX,MAAO,QACnCjC,QAAS,EAAEvf,SAEXU,cAACqwB,KAAsB,eAOnD,ECtDMC,GAAY,QASHC,GAPO,CAClBpuB,KAAMmuB,GACNnmB,KAAMqmB,KACNC,KAAMC,KACNC,KAAMb,I,UCAK1S,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,6aAGd,E,wICKesT,GAVa,SAAA3vB,GAExB,IAAM4vB,EAAqBze,uBAAY,SAAA/S,GAAA,IAAGyxB,EAAIzxB,EAAJyxB,KAAMvxB,EAAEF,EAAFE,GAAE,SAAAgC,OAAUuvB,EAAI,KAAAvvB,OAAIhC,EAAE,IAEtE,OAAOS,cAAC2sB,KAAUlrB,wBAAA,GACVR,GAAK,IACT4vB,mBAAoBA,IAE5B,E,4HCHME,GAAkB,CACpB,CAAE9sB,GAAI,EAAG9B,KAAM,oCACf,CAAE8B,GAAI,EAAG9B,KAAM,oCACf,CAAE8B,GAAI,EAAG9B,KAAM,oCACf,CAAE8B,GAAI,EAAG9B,KAAM,oCACf,CAAE8B,GAAI,EAAG9B,KAAM,qCAoCJ6uB,GAjCgB,SAAC/vB,GAE5B,OACIuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACbU,cAACkxB,KAAW,CAACrwB,OAAO,WAAWswB,QAASJ,KACxC/wB,cAACsC,KAAY,CAACzB,OAAO,SAASgD,aAAW,IACzC7D,cAACsC,KAAY,CAACzB,OAAO,MAAMgD,aAAW,IACtC7D,cAACoxB,KAAS,CAACvwB,OAAO,OAAOsB,KAAK,cAC9BnC,cAACwH,KAAc,CAAC3G,OAAO,WAAW8B,MAAM,+BAA+B0pB,UAAU,QAAQgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,OAAQxhB,SACtIU,cAAC2H,KAAiB,CAACC,WAAW,OAAOG,gBAAiBC,SAE1DhI,cAACwH,KAAc,CAAC3G,OAAO,MAAM8B,MAAM,mCAAmC0pB,UAAU,YAAYgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,OAAQxhB,SACzIU,cAAC2H,KAAiB,CAACC,WAAW,OAAOG,gBAAiBC,SAE1DhI,cAACsxB,KAAW,CAACzwB,OAAO,aACpBb,cAACsxB,KAAW,CAACzwB,OAAO,iBACpBb,cAACsxB,KAAW,CAACzwB,OAAO,iBACpBb,cAACuH,KAAqB,CAAC1G,OAAO,SAAS8B,MAAM,iCAAiC0pB,UAAU,UAAUgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,SAC3I9gB,cAACuxB,KAAa,CAAC1wB,OAAO,kBACtBb,cAACuxB,KAAa,CAAC1wB,OAAO,kBACtBb,cAACuxB,KAAa,CAAC1wB,OAAO,qBACtBb,cAACuxB,KAAa,CAAC1wB,OAAO,qBACtBb,cAACwxB,KAAmB,CAAE3wB,OAAO,oBAAoB8B,MAAM,2CAA2CmD,OAAQ,CAAE2rB,SAAU,SAAWpF,UAAU,QAAQgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,OAAQxhB,SAChMU,cAAC0xB,KAAsB,CAAC9pB,WAAW,OAAOG,gBAAiBC,SAE/DhI,cAACwxB,KAAmB,CAAC3wB,OAAO,uBAAuB8B,MAAM,8CAA8CmD,OAAQ,CAAE2rB,SAAU,SAAWpF,UAAU,QAAQgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,OAAQxhB,SACrMU,cAAC0xB,KAAsB,CAAC9pB,WAAW,OAAOG,gBAAiBC,YAI3E,E,UCjCe2pB,GAVgB,SAAA1wB,GAC3B,OACIjB,cAAAsmB,WAAA,CAAAhnB,SACIU,cAAC4xB,KAAgBnwB,YAAA,GAAKR,KAGlC,E,4DCCemc,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,otBAGd,E,UCeeuU,OArBf,SAAqBC,EAAUC,EAAOC,GACpC,IAAMC,EAAgBngB,iBAAOggB,GAE7BI,cAA0B,WACxBD,EAAcnf,QAAUgf,CAC1B,GAAG,CAACA,IAEJ9b,qBAAU,WACHgc,GACLF,GACF,GAAG,CAACE,IAEJhc,qBAAU,WACR,GAAKgc,EAAL,CAEA,IAAM/tB,EAAKkuB,aAAY,kBAAMF,EAAcnf,SAAS,GAAEif,GAEtD,OAAO,kBAAMK,cAAcnuB,EAAI,CAJZ,CAKrB,GAAG,CAAC8tB,EAAOC,GACb,E,UClBeK,GAFS,SAACzxB,GAAQ,IAAEgP,EAAY9E,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,EAAC,OAAKwK,aAAiB,GAAD/T,OAAIX,EAAQ,kBAAkBgP,EAAa,ECEpG0iB,GAFc,SAAC1xB,GAAQ,IAAEgP,EAAY9E,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,mBAAkB,OAAKwK,aAAiB,GAAD/T,OAAIX,EAAQ,uBAAuBgP,EAAa,ECUzI2iB,GAAuB,CACzB,CAAEtuB,GAAI,kBAAmB9B,KAAM,oEAAqEb,MAAO,oBAGzGkxB,GAA4B/sB,KAAM8sB,GAAsB,MAGxDE,IAF+BhtB,KAAM8sB,GAAsB,SAE3C,CAClB,CAAEtuB,GAAI,MAAO9B,KAAM,iDAAkDb,MAAO,GAC5E,CAAE2C,GAAI,KAAM9B,KAAM,gDAAiDb,MAAO,KAC1E,CAAE2C,GAAI,MAAO9B,KAAM,iDAAkDb,MAAO,KAC5E,CAAE2C,GAAI,MAAO9B,KAAM,iDAAkDb,MAAO,KAC5E,CAAE2C,GAAI,KAAM9B,KAAM,gDAAiDb,MAAO,KAC1E,CAAE2C,GAAI,KAAM9B,KAAM,gDAAiDb,MAAO,KAC1E,CAAE2C,GAAI,MAAO9B,KAAM,iDAAkDb,MAAO,KAC5E,CAAE2C,GAAI,MAAO9B,KAAM,iDAAkDb,MAAO,MAC5E,CAAE2C,GAAI,KAAM9B,KAAM,gDAAiDb,MAAO,QAExEoxB,GAAqBjtB,KAAMgtB,GAAe,MAC1CE,GAAwBltB,KAAMgtB,GAAe,SAoGpCG,GAtFe,SAAC3xB,GAC3B,IAAA8Q,EAAgC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GACtB9Q,EAAYC,cACZP,EAAWuE,aAAmBlE,GAC5BgqB,EAAY1P,aAAeta,GAA3BgqB,QACS4H,EAA2Bha,eAApCqR,QACR4I,EAAwCT,GAAgBzxB,GAASmyB,EAAAltB,YAAAitB,EAAA,GAA1DE,EAAYD,EAAA,GAAEE,EAAeF,EAAA,GACpCG,EAAkDZ,GAAqB1xB,GAASuyB,EAAAttB,YAAAqtB,EAAA,GAAzEE,EAAiBD,EAAA,GAAEE,EAAoBF,EAAA,GAExCG,EAAgClhB,uBAAY,SAACnO,GAAE,OAAK,SAAC6E,GACvDuqB,GAAqB,SAAAlU,GAAQ,OAtBb,SAACoU,EAAOjyB,GAC5B,IAAMkyB,EAAQpoB,aAAOmoB,GACf7V,EAAQ8V,EAASC,QAAQnyB,GAO/B,OAN6B,IAAXoc,EAEd8V,EAASE,OAAOhW,EAAO,GAEvB8V,EAASzS,KAAKzf,GAEXkyB,CACX,CAYyCG,CAAgBxU,EAAUlb,EAAG,GAClE,CAAC,GAAE,CAACovB,IAEEO,EAA2BxhB,uBAAY,SAACnO,GAAE,OAAK,SAAC6E,GAClDmqB,EAAgBP,GAAmBzuB,GAAI3C,MAC3C,CAAC,GAAE,CAAC2xB,IAEEY,EAAazhB,uBAAY,SAACtJ,GAC5BN,EAAYM,EAAMM,cACtB,GAAG,CAACZ,IAEEK,EAAcuJ,uBAAY,WAC5B5J,EAAY,KAChB,GAAG,CAACA,IAGJwN,qBAAU,WACyB,IAA3B6c,GAAgCO,EAAkBU,SAAS,oBAC3D7I,GAER,GAAG,CAACA,EAAS4H,EAAwBO,IAErCvB,IAAY,WACR5G,GACJ,GAAG+H,EAA+B,IAAjBA,GAGjB,IAAMe,EAAU3oB,aAAOgoB,EAAkB/tB,KAAI,SAAA2uB,GAAkB,OAAI9yB,EAAUsxB,GAA0BwB,GAAoB7xB,KAAM,CAAE8V,YAAa,GAAI,KAC/H,IAAjB+a,GAAoBe,EAAWhT,KAAK7f,EAAUyxB,GAAsBK,GAAc7wB,KAAM,CAAE8V,YAAa,KAC3G,IAAMtV,EAAQoxB,EAAWprB,OAAS,EAAC,gEAAApH,OAAiBwyB,EAAWzoB,KAAK,OAAK,oGAEzE,OACI9G,eAAA,OAAAlF,SAAA,CACIU,cAAC8f,KAAM,CACHnf,UAAU,cACVgC,MAAOA,EACP,gBAAc,cACd,gBAAc,OACdwG,QAAS0qB,EAAWv0B,SAEpBU,cAACi0B,GAAmB,MAExBzvB,eAAC+E,KAAI,CACDtF,GAAG,cACH2E,KAAM7C,QAAQwC,GACdA,SAAUA,EACVkZ,mBAAoB,KACpByS,aAAW,EACX1qB,QAASX,EAAYvJ,SAAA,CAErBU,cAACm0B,KAAa,CAAA70B,SAAA,qDACbizB,GAAqBltB,KAAI,SAAA+uB,GACtB,OAAQp0B,cAAC+E,KAAQ,CAEboE,QAASmqB,EAA8Bc,EAAoBnwB,IAC3D0Z,SAAUyV,EAAkBU,SAASM,EAAoBnwB,IAAI3E,SAE5D4B,EAAUkzB,EAAoBjyB,KAAM,CAAE8V,YAAa,KAJ/Cmc,EAAoBnwB,GAMjC,IACAjE,cAACm0B,KAAa,CAAA70B,SAAA,mCACbmzB,GAAcptB,KAAI,SAAAgvB,GACf,OAAQr0B,cAAC+E,KAAQ,CAEboE,QAASyqB,EAAyBS,EAAiBpwB,IACnD0Z,SAAUqV,IAAiBqB,EAAiB/yB,MAAMhC,SAEjD4B,EAAUmzB,EAAiBlyB,KAAM,CAAE8V,YAAa,KAJ5Coc,EAAiBpwB,GAM9B,SAIhB,E,mFCpHMqwB,GAAsB,SAACrzB,GAC3B,IAAQN,EAAuDM,EAAvDN,UAAW0a,EAA4Cpa,EAA5Coa,QAASkZ,EAAmCtzB,EAAnCszB,MAAOrvB,EAA4BjE,EAA5BiE,QAAmBpB,GAAS7C,EAAnBuzB,MAAc/0B,YAAKwB,EAAKvB,KACpE4b,EAQIC,aAAeta,GAPjBia,EAAQI,EAARJ,SACAM,EAAWF,EAAXE,YACAC,EAAgBH,EAAhBG,iBACAC,EAAYJ,EAAZI,aACAe,EAAWnB,EAAXmB,YACAd,EAAUL,EAAVK,WACAC,EAAKN,EAALM,MAEIhb,EAAWuE,aAAmBrB,GAEpC,OAAOkC,mBACL,kBACExB,eAACuX,KAAUta,wBAAA,CAACd,UAAWA,GAAeqb,aAAsBlY,IAAK,IAAAxE,SAAA,CAC9D+b,GACCjV,uBAAaiV,EAAS,CACpBza,WACA+a,aACAF,mBACAC,eACAO,QAAS,WAEbjc,cAACkc,KAAa,CAAChX,QAASA,IACxBlF,cAACmc,KAAY,CAACjX,QAASA,IACvBlF,cAAC4yB,GAAqB,KACR,IAAb1X,GACClb,cAACoc,KAAY,CACXlB,SAAUA,EACV/C,SAAoB,IAAVyD,EACVhb,SAAUA,EACVyb,KAAMb,EACNE,aAAcA,OAGP,GAEf,CACE9a,EACA6a,EACAC,EACAe,EACApB,EACAkZ,EACArvB,EACA0W,GAGN,EAEA0Y,GAAoB3yB,aAAe,CACjC8a,YAAa,GACbC,gBAAiB,kBAAM,IAAI,GAGd4X,UCjCTG,GAAc,CAClB,CAAElvB,IAAK,KAAMmvB,OAAQ,oCACrB,CAAEnvB,IAAK,WAAYmvB,OAAQ,0CAC3B,CAAEnvB,IAAK,WAAYmvB,OAAQ,0CAC3B,CACEnvB,IAAK,SACLmvB,OAAQ,uCACRjyB,OAAQkyB,MAEV,CACEpvB,IAAK,MACLmvB,OAAQ,oCACRjyB,OAAQkyB,MAEV,CACEpvB,IAAK,cACLmvB,OAAQ,4CACRjyB,OAAQkyB,MAEV,CACEpvB,IAAK,OACLmvB,OAAQ,qCACRjyB,OAAQmyB,aAAc,iBAExB,CACErvB,IAAK,gBACLmvB,OAAQ,+CAEV,CAAEnvB,IAAK,eAAgBmvB,OAAQ,8CAC/B,CACEnvB,IAAK,cACLmvB,OAAQ,CACN,yCACA,6BAEFrI,UAAW,CAAEzrB,SAAU,QAAS0J,OAAQ,aAE1C,CACE/E,IAAK,gBACLmvB,OAAQ,CACN,yCACA,+BAEFrI,UAAW,CAAEzrB,SAAU,QAAS0J,OAAQ,aAE1C,CACE/E,IAAK,SACLmvB,OAAQ,CACN,oCACA,iCAEFrI,UAAW,CAAEzrB,SAAU,YAAa0J,OAAQ,QAE9C,CACE/E,IAAK,WACLmvB,OAAQ,CACN,oCACA,mCAEFrI,UAAW,CAAEzrB,SAAU,YAAa0J,OAAQ,QAE9C,CAAE/E,IAAK,UAAWmvB,OAAQ,yCAC1B,CACEnvB,IAAK,YACLmvB,OAAQ,CACN,wCACA,+BAEFrI,UAAW,CAAEzrB,SAAU,UAAW0J,OAAQ,WAE5C,CACE/E,IAAK,cACLmvB,OAAQ,CACN,wCACA,iCAEFrI,UAAW,CAAEzrB,SAAU,UAAW0J,OAAQ,WAE5C,CACE/E,IAAK,YACLmvB,OAAQ,0CACRjyB,OAAQoyB,MAEV,CACEtvB,IAAK,eACLmvB,OAAQ,6CACRjyB,OAAQoyB,MAEV,CACEtvB,IAAK,OACLmvB,OAAQ,6BACRjyB,OAAQqyB,aAAc,eAAgB,QAIpCC,GAAsB,WAC1B,IAAMvyB,EAAUwyB,eAwEhB,OAtEgB/tB,aAAW,CACzBjH,cAAC6uB,KAAgB,CAAChuB,OAAO,SAASo0B,UAAU,IAC5Cj1B,cAAC8uB,KAAa,CAACjuB,OAAO,MAAMo0B,UAAU,IACtCj1B,cAACk1B,KAAkB,CAACr0B,OAAO,WAAWo0B,UAAU,IAChDj1B,cAACm1B,KAAe,CAACt0B,OAAO,QAAQo0B,UAAU,IAC1Cj1B,cAACo1B,KAAiB,CAChBv0B,OAAO,gBACPyO,UAAQ,EACRpH,cAAe1F,EAAQ6yB,eACvBJ,UAAU,IAEZj1B,cAACyE,KAAS,CACR5D,OAAO,eACPqH,cAAe1F,EAAQ6yB,eACvBJ,UAAU,IAEZj1B,cAACU,KAAS,CAACG,OAAO,OAAOo0B,UAAU,IACnCj1B,cAACkvB,KAAc,CACbpoB,SAAS,SACTjG,OAAO,WACP8B,MAAM,qCACN0pB,UAAU,QACV2B,KAAK,OACLiH,UAAU,EAAM31B,SAEhBU,cAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAO/sB,SACjDU,cAAC6G,KAAS,CAAChG,OAAO,OAAOwI,KAAK,cAGlCrJ,cAACu1B,KAAoB,CACnB10B,OAAO,eACP20B,WAAW,WACX7yB,MAAM,+BACN0pB,UAAU,QACV2B,KAAK,OACLiH,UAAU,EACV/sB,cAAe1F,EAAQ6yB,eAAe/1B,SAEtCU,cAACyE,KAAS,CAAC5D,OAAO,WAEpBb,cAACkvB,KAAc,CACbruB,OAAO,MACP8B,MAAM,mCACN0pB,UAAU,YACV2B,MAAM,EACNiH,UAAU,EACV/sB,cAAe1F,EAAQ6yB,eAAe/1B,SAEtCU,cAACyE,KAAS,CAAC5D,OAAO,WAEpBb,cAAC+uB,KAAW,CAACluB,OAAO,WAAWo0B,UAAU,IACzCj1B,cAACyE,KAAS,CACR5D,OAAO,UACPo0B,UAAU,EACV/sB,cAAe1F,EAAQ6yB,iBAEzBr1B,cAACkvB,KAAc,CACbruB,OAAO,SACP8B,MAAM,iCACNqrB,MAAM,EACN3B,UAAU,UACV4I,UAAU,EACV/sB,cAAe1F,EAAQ6yB,eAAe/1B,SAEtCU,cAACyE,KAAS,CAAC5D,OAAO,WAEpBb,cAACgvB,KAAS,CAACnuB,OAAO,YAAYouB,UAAQ,EAAC5e,UAAU,UACjDrQ,cAACgvB,KAAS,CAACnuB,OAAO,eAAeouB,UAAQ,EAAC5e,UAAU,WAIxD,EAEMqgB,GAAY,SAACzvB,GACjB,IAAMia,EAAWua,aAAYhB,IACvBxE,EAAkByF,aAAiBj0B,YAAC,CAAEyZ,YAAaja,IACnDiE,EAAU6vB,KACVY,EAAkB1wB,aAAmBC,GAE3C,OACElF,cAAC41B,KAAmB,CAACt0B,MAAO2uB,EAAgB3wB,SAC1CU,cAAC61B,KAAQp0B,oCAAA,GACHR,GACAgvB,GAAe,IACnBnG,QAAS9pB,cAACs0B,GAAmB,CAACpvB,QAASA,IACvC4wB,kBAAmB91B,cAAC+1B,GAAiC,IACrD1a,QAASrb,cAACgxB,GAAsB,IAChCgF,WAAYh2B,cAAC4wB,GAAmB,IAAItxB,SAEpCU,cAACi2B,KAAiB,CAAA32B,SAAEq2B,QAI5B,EAEAjF,GAAU/uB,aAAe,CACvB0a,KAAM,CAAE5S,MAAO,eAAgBqX,MAAO,SAGjC,IAUQ4P,MCrOThB,GAAuB,WAAH,OACtB1vB,cAAC+oB,GAAe,CAACloB,OAAO,iBAAkB,EAGxC8uB,GAAmB,SAAHtwB,GAAA,IAAMyH,EAAQzH,EAARyH,SAAU0I,EAAInQ,EAAJmQ,KAAcnQ,EAARuB,SAAQ,OAChDZ,cAAC+b,KAAU,CAAAzc,SACNiqB,KAAYI,IAAI,cAAe,UAAY3pB,cAAC6vB,KAAiB,CAAC/oB,SAAUA,EAAU/F,OAAQyO,KAClF,EAwCFsgB,GArCG,SAAC7uB,GAAW,IAAD8uB,EAAAC,EACnBC,EAAkBC,aAAkBjvB,GACpCL,EAAiC,QAAzBmvB,EAAGE,EAAgBlvB,cAAM,IAAAgvB,OAAA,EAAtBA,EAAwBnvB,SACnCuvB,EAA4B,QAAzBH,EAAGC,EAAgBlvB,cAAM,IAAAivB,OAAA,EAAtBA,EAAwBG,IAEpC,OACInwB,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC3CU,cAACowB,KAAmB,CAAC9uB,MAAO2uB,EAAgB3wB,SACxCkF,eAACqlB,GAAQpoB,oCAAA,GACDR,GACAgvB,GAAe,IACnBnG,QAAS9pB,cAAC2vB,GAAgB,IAC1B5F,MAAO/pB,cAACwvB,GAAU,IAClBxF,YAAahqB,cAAC0vB,GAAoB,IAClC1qB,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,iBAAoBI,IAAU3B,SAAA,CAE5DU,cAACsuB,GAAW,IACZtuB,cAACqrB,GAAe,CAAC1oB,MAAM,8HAAyBrD,SAC5CU,cAACusB,GAAS,CACN3rB,SAAS,QACTkG,SAAS,SACThB,OAAQ,CACJlF,WACAuvB,OAEJ9T,KAAM,CAAE5S,MAAO,YAAaqX,MAAO,QACnCjC,QAAS,EAAEvf,SAEXU,cAACqwB,KAAsB,eAOnD,ECrDM6F,GAAmB,eASVC,GAPc,CACzBh0B,KAAM+zB,GACN/rB,KAAMisB,GACN3F,KAAM4F,GACN1F,KAAM2F,I,oJCmBQx0B,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CAAEgI,QAAS,gBACjB4X,KAAM,CACF3f,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,OAEjD,GAAG,CAAE3pB,KAAM,mBC5BML,YACd,CACImqB,OAAQ,CAAC,EACTsK,KAAM,CAAC,GAEX,CAAEp0B,KAAM,a,+mBCWCq0B,GAAY,SAACv1B,GACtB,IACI6oB,EAWA7oB,EAXA6oB,QACAE,EAUA/oB,EAVA+oB,YACA3O,EASApa,EATAoa,QACA/b,EAQA2B,EARA3B,SACAqB,EAOAM,EAPAN,UAEW4qB,GAKXtqB,EANAuB,QAMAvB,EALAb,WAAS6a,EAKTha,EAJAia,gBAAQ,IAAAD,EAAGwb,KAAexb,EAC1BjW,EAGA/D,EAHA+D,MACA0xB,EAEAz1B,EAFAy1B,MACG5yB,EAAIrE,YACPwB,EAAKvB,IACHuwB,EAAkB0G,aAAuB11B,GACzC21B,EAAcrb,aAAeta,GAC7BuB,EAAUX,GAAUZ,GAEtBgpB,EAMA2M,EANA3M,aACArO,EAKAgb,EALAhb,MACAoP,EAIA4L,EAJA5L,OACApT,EAGAgf,EAHAhf,QAIEsS,GADF0M,EAFAlb,aAEAkb,EADAna,YAEYoa,gBAEVC,EACF9L,IAAWpT,GAAqB,IAAVgE,EAE1B,OACIpX,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,aAAcrC,EAAQ8D,KAAM3F,IAC9C4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAE3BU,cAAC+2B,KAAK,CAAC/xB,MAAOA,EAAOilB,aAAcA,IAClCD,GACC3O,GAAWyO,IACT9pB,cAAC+rB,KAAWtqB,wBAAA,CACR4Z,QAASA,GACL4U,GAAe,IACnBnG,QAASA,EACT5O,SAAUA,KAGlBlb,cAAA,OAAKW,UAAW6B,EAAQ2T,KAAK7W,SACxBw3B,IAAmC,IAAVJ,EACpBtwB,uBAAaswB,EAAOE,GACnB52B,cAACurB,EAAO,CACP5qB,UAAWkE,IAAWrC,EAAQ+V,SAASjZ,SAGtCA,GAEG8G,uBAAaqC,WAASijB,KAAKpsB,GAASmC,YAAA,GAC7BwuB,KALN/F,QAY7B,EAGAsM,GAAU70B,aAAe,CACrBmoB,QAAS9pB,cAACg3B,KAAc,IACxBhN,YAAahqB,cAACi3B,KAAsB,IACpCz0B,QAAS,CAAC,EACVpC,UAAWysB,KACX6J,MAAO12B,cAACk3B,KAAK,KAGjB,IAAMr1B,GAAYC,aACd,SAAAC,GAAK,IAAA4lB,EAAA,MAAK,CACNrhB,KAAM,CACFgI,QAAS,OACTuZ,cAAe,SACfG,SAAU,GAEd7R,KAAM,CACF7H,QAAS,OACT0Z,SAAU,EACVxF,eAAgB,UAEpBjK,SAAOoP,EAAA,CACHM,UAAW,EACXkP,WAAYp1B,EAAMq1B,YAAYC,OAAO,cACrCvpB,SAAU,WACVwpB,KAAM,YAAU9iB,YAAAmT,EACf5lB,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5BqP,UAAW,SACd/iB,YAAAmT,EAAC,WACQ,WAASA,GAEvB6P,qBAAsB,CAClBvP,WAAYlmB,EAAMG,QAAQ,GAC1Bi1B,WAAYp1B,EAAMq1B,YAAYC,OAAO,eAEzCvN,QAAS,CACL3H,OAAQ,EACR7T,QAAS,OACTkU,eAAgB,WAChBoI,SAAU,QAEd6M,UAAW,CAAExpB,QAAS,IACzB,GACD,CAAE9L,KAAM,YAKNooB,GAAoB,SAAHlrB,KACnByH,SAAezH,EACfmc,YAAkBnc,EAClBmQ,KAAWnQ,EACX4qB,aAAmB5qB,EACnBoc,iBAAuBpc,EACvBytB,oBAA0BztB,EAC1Bqc,aAAmBrc,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACd0rB,QAAc1rB,EACd0tB,WAAiB1tB,EACjB2gB,QAAc3gB,EACdkO,IAAUlO,EACVuY,QAAcvY,EACd2rB,OAAa3rB,EACbqM,SAAerM,EACfG,MAAYH,EACZwe,SAAexe,EACf2tB,aAAmB3tB,EACnBqd,gBAAsBrd,EACtB4D,QAAc5D,EACd2hB,KAAW3hB,EACXkqB,YAAkBlqB,EAClBwf,QAAcxf,EACd4rB,QAAc5rB,EACduB,SAAevB,EACfod,YAAkBpd,EAClB6gB,WAAiB7gB,EACjB8gB,QAAc9gB,EACd+gB,WAAiB/gB,EACjBghB,QAAchhB,EACdsc,WAAiBtc,EACjB4tB,iBAAuB5tB,EACvBgd,KAAWhd,EACXuc,MACO,OAAAnc,YAAAJ,EAAAoS,GACA,EAEI+kB,MCvKTkB,GAAQ,SAACz2B,GACX02B,aAA6B,OAAQ,CAAC,YAAa12B,GACnD,IAAMgvB,EAAkByF,aAAkBz0B,GAC1C,OACIjB,cAAC41B,KAAmB,CAACt0B,MAAO2uB,EAAgB3wB,SACxCU,cAACw2B,GAAS/0B,wBAAA,GAAKR,GAAWgvB,KAGtC,EAEAyH,GAAM/1B,aAAe,CACjBmE,OAAQ,CAAC,EACT+Y,QAAS,IAGE6Y,U,gDCtBXE,GAAQ,2BAEG,YAACC,GAEZ,IAAQpxB,EAAgBoxB,EAAhBpxB,KAAMnF,EAAUu2B,EAAVv2B,MACd,OAAQmF,GACJ,IAAK,UACD,MAAoB,mBAAVnF,GACW,IAAVA,EAAiB,EAAI,EAEpBs2B,GAAME,KAAKx2B,EAAMy2B,YAAkB,EAAJ,EAG/C,IAAK,SACD,OAAOC,WAAW12B,GAEtB,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,SACL,IAAK,SACL,IAAK,SACD,OAAO22B,OAAO32B,GAElB,QACI,OAAO02B,WAAW12B,EAAMy2B,YAEnC,E,sDCjBDG,KAAWC,WCbiB,CACxBC,OAAQ,CACJC,QAAQ,GAEZC,YAAa,CACTC,OAAQ,CACJC,cAAc,IAGtBxzB,MAAO,CACHknB,KAAM,IAEVuM,OAAQ,CACJC,SAAS,EACTtgB,MAAO,CACH3N,SAAU,SAGlBkuB,QAAS,CACLC,YAAY,EACZC,QAAQ,EACRH,SAAS,GAEbI,QAAS,CACLrkB,SAAS,GAEbskB,KAAM,CACFC,OAAQ,CAAC,uCAAU,6CAAW,2BAAQ,uCAAU,qBAAO,2BAAQ,2BAAQ,uCAAU,mDAAY,6CAAW,uCAAU,8CAClHC,SAAU,CAAC,qEAAe,qEAAe,6CAAW,iCAAS,6CAAW,6CAAW,8CACnFC,YAAa,CAAC,qBAAO,qBAAO,2BAAQ,qBAAO,qBAAO,2BAAQ,2BAAQ,qBAAO,2BAAQ,qBAAO,2BAAQ,sBAChGC,UAAW,yFACXC,YAAa,iDACbC,aAAc,kDACdC,YAAa,iDACbC,YAAa,iDACbC,WAAY,oGACZ5hB,QAAS,0DDrBjB,IAAM/V,GAAYC,aAAW,SAACC,GAAK,MAAM,CACvC6V,QAAS,CACPrJ,MAAO,QAETkrB,mBAAoB,CAClB52B,OAAQ,GAEV62B,aAAc,CACZrL,YAAatsB,EAAMG,QAAQ,IAE7By3B,aAAc,CACZ92B,OAAQ,GACR2O,OAAQ,QAEX,IAEKooB,GAAsB,CAC1BC,SAAUC,KAAW,KACrBC,OAAQD,KAAW,KACnBE,OAAQC,KAAI,KACZC,SAAUD,KAAI,KACdE,IAAKF,KAAI,KACTG,IAAKN,KAAW,MAGZtD,GAAY,SAAHn3B,GAAgD,IAAjCisB,EAAejsB,EAAxBmD,QAA6BvB,EAAKxB,YAAAJ,EAAAK,IAC/CqC,EAAQ4P,eAERnP,GADYT,EAAMyE,QAAQC,KAChB5E,GAAU,CAAEW,QAAS8oB,KAC/B+O,EAAeC,aAAY,SAAC5tB,GAChC,OAAOrL,KAAIqL,EAAM,iCACnB,IACA4O,EAAkDC,aAAeta,GAAMs5B,EAAAjf,EAA/D9L,YAAI,IAAA+qB,EAAG,CAAC,EAACA,EAASC,GAAAlf,EAAP1D,QAAO0D,EAAEI,qBAAY,IAAA8e,EAAG,CAAC,EAACA,EACrCC,EAA8B/e,EAA9B+e,QAAOC,EAAuBhf,EAArBif,YAAI,IAAAD,EAAG,UAASA,EA2YjC,OAvMA1kB,qBAAU,WAER,IAAM4kB,GAAQH,GAAW,IAAIp1B,IAAIw1B,MAC3BC,EAASntB,OAAO4Q,OAAO/O,GAG9B,GADezJ,QAAQ60B,EAAKjyB,OAAS,GAAKmyB,EAAOnyB,OAAS,GAC1D,CAIA,IAAMoyB,EAAiBD,EAAOz1B,KAAI,SAAA+L,EAAgBsM,GAAW,IAADsd,EAAA5pB,EAAvB5B,KACnC,YADuC,IAAAwrB,EAAG,GAAEA,GAChC31B,KAAI,SAAC41B,GACf,IAAM9K,EAAMkK,EAAaa,aAAeD,EAAK9K,MAC7C,OAAA1uB,wBAAA,GACKw5B,GAAI,IACPE,MAAOzd,EACPvb,KAAMguB,EAAG,GAAA5uB,OAAM4uB,EAAIiL,UAAUj5B,KAAI,OAAAZ,OAAM4uB,EAAIkL,MAAMl5B,MAAS,QAE9D,GACF,IAAGm5B,OAEGC,EAAkB,YAATZ,EAETa,EAAYV,EAAOz1B,KAAI,SAAAo2B,GAAyB,IAADC,EAAAD,EAArBE,UAC9B,YADuC,IAAAD,EAAG,GAAEA,GAC3Br2B,KAAI,SAAAu2B,GACnB,IAAMzL,EAAMkK,EAAaa,aAAeU,EAAGzL,MACrChwB,EAAQy5B,GAAoBzJ,GAAOA,EAAIiL,UAAUtzB,OAASgyB,KAAW,KAC3E,MAAO,CACLx4B,MAAOs6B,EAAGt6B,MACVnB,QACA07B,UAAW,YACXttB,MAAO,EACP5L,MAAO,CACLupB,KAAMiE,EAAG,IAAA5uB,OAAOq6B,EAAGt6B,MAAK,MAAAC,OAAK4uB,EAAIiL,UAAUj5B,KAAI,OAAAZ,OAAM4uB,EAAIkL,MAAMl5B,MAAS,OACxEiW,MAAO,CACLjY,UAIR,IAAG2F,OAAOC,QACZ,IAAGu1B,OAEGQ,EAAY,CAChBC,cAAeh6B,EAAMyE,QAAQw1B,QAC7BC,mBAAoBl6B,EAAMyE,QAAQw1B,QAClCE,OAAQ,CACN9jB,MAAO,CACLjY,MAAO4B,EAAMyE,QAAQ0lB,KAAKiQ,UAG9BC,UAAWr6B,EAAMyE,QAAQw1B,QACzBK,UAAWt6B,EAAMyE,QAAQw1B,QACzBh3B,MAAO,CAAEknB,KAAM,OAGXoQ,EAAQf,EACVR,EAAe11B,KAAI,SAAC41B,EAAMvd,GAC1B,IAAM6e,EAAcx6B,EAAMyE,QAAQg2B,aAAappB,OAAOsK,GAEhDza,EAAU,CAEd+B,MAAO,CACLknB,KAAM+O,EAAK94B,KACXiW,MAAO,CACLjY,MAAOo8B,IAGXL,OAAQ,CACN9jB,MAAO,CACLjY,MAAOo8B,IAGXE,SAAS,EACTx4B,GAAIyZ,GAGAgf,EAA4B,kBAAT/B,EAAuB,CAC9CgC,SAAUjf,EAAQ,GAChB,CAAC,EAECkf,EAAyB,UAATjC,EAAoB,CACxCnpB,OAAO,GAADjQ,OAAK,IAAMw5B,EAAepyB,OAAS,EAAC,KAC1C0Z,IAAI,GAAD9gB,OAAK,IAAMw5B,EAAepyB,OAAS+U,EAAK,KAC3Cmf,OAAQ,EACRh6B,OAAQ,KACN,CAAC,EAEL,OAAApB,4DAAA,GACKq6B,GACA74B,GACAy5B,GACAE,GAAY,IACfpB,aAEJ,IAAE/5B,wBAAA,GAEGq6B,GAAS,IACZN,cAGEL,EAAQL,EAAOz1B,KAAI,SAACy3B,EAAOpf,GAC/B,IAAMza,EAAU,CACdw5B,SAAS,EACTE,UAAU,EACV14B,GAAIyZ,EACJqf,cAAe,EACft2B,KAAM,WACNu2B,QAAS,OAGLC,EAAiB1B,EAAU,CAC/B2B,IAAK5wB,YAAS6wB,QAAQL,EAAMM,OAAOC,eAAeC,UAClDC,IAAKjxB,YAAS6wB,QAAQL,EAAMM,OAAOI,eAAeF,WAChD,CAAC,EAGL,OAAA77B,oCAAA,GACKq6B,GACA74B,GACAg6B,EAEP,IAEM1E,EAASwC,EAAe11B,KAAI,SAAC41B,EAAMvd,GACvC,IAAQlO,EAA2ByrB,EAA3BzrB,KAAMrN,EAAqB84B,EAArB94B,KAAWg5B,GAAUF,EAAf9K,IAAe8K,EAAVE,OAEnBsC,EAAiBjuB,EAAKvE,QAAO,SAACC,EAAGwyB,GAAkC,IAA9Bp8B,EAAKo8B,EAALp8B,MAAOq8B,EAASD,EAATC,UAAWl3B,EAAIi3B,EAAJj3B,KAE3D,QAD2B,MAATnF,GACJ,GAAAC,OAAA6J,aAAOF,GAAG,CAAE,CAACoB,YAAS6wB,QAAQQ,GAAWL,UAAWM,GAAa,CAAEt8B,QAAOmF,YAAYyE,CACtG,GAAG,IAIGjI,EAAU,CACdd,OACAqN,KAJ4BquB,mBAAQJ,EAAgB,IAAK,QAOrDR,EAAiB1B,EAAU,CAC/Bp7B,MAAO4B,EAAMyE,QAAQg2B,aAAappB,OAAOsK,GACzC4e,MAAO5e,EACPyd,MAAOA,GACL,CAAC,EAEL,OAAA15B,wBAAA,GACKwB,GACAg6B,EAEP,IAIMh6B,EAAU,CACd66B,MAAO,CACLv3B,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,MAC1C1T,MAAO,CACLrK,WAAYhM,EAAMiM,WAAWD,YAE/BgwB,QAAQ,EACRC,SAAU,IACVxsB,OAAQ,KAEV4B,OAAQrR,EAAMyE,QAAQg2B,aAAappB,OACnCulB,QAAS,CACPpyB,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,MAE1C1T,MAAO,CACLjY,MAAO4B,EAAMyE,QAAQ0lB,KAAKiQ,UAG9B1D,OAAQ,CACNwF,UAAW,CACT99B,MAAOiW,aAAMrU,EAAMyE,QAAQ0lB,KAAKiQ,QAAS,IACzC+B,WAAY,WAEdC,eAAgB,CACdh+B,MAAO4B,EAAMyE,QAAQ0lB,KAAKiQ,SAE5BiC,gBAAiB,CACfj+B,MAAO4B,EAAMyE,QAAQ0lB,KAAK/T,WAG9BmkB,QACAnB,MAAOI,EAASJ,EAAQA,EAAM,GAC9B5C,UAMKuF,EAAQ5F,KAAW4F,MAAM,uBAAwB76B,GAEvD,OAAO,WAEL66B,EAAMO,SACR,CA7L4B,CA8L9B,GAAG,CAAC5D,EAASjrB,EAAMmrB,EAAMN,EAAct4B,IAIrC/B,cAAA,OAAKW,UAAW6B,EAAQm3B,aAAar6B,SAInCU,cAAA,OAAKiE,GAAG,0BAGd,EAEAuyB,GAAUvU,YAAc,YAETuU,U,+BEnZT30B,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNyQ,QAAS,CACLnC,UAAW,SACXqa,QAAgC,UAAvB3oB,EAAMyE,QAAQC,KAAmB,GAAM,GAChD5D,OAAQ,QACR1C,MAC2B,UAAvB4B,EAAMyE,QAAQC,KACR,UACA1E,EAAMyE,QAAQ0lB,KAAKiQ,SAEjChyB,KAAM,CACFoE,MAAO,MACPiD,OAAQ,OAEZ8sB,QAAS,CACLjuB,UAAW,SACX4X,UAAW,OAElB,GACD,CAAE9lB,KAAM,YAIG+0B,GAlED,SAACj2B,GACX,IAAML,EAAWuE,aAAmBlE,GAC9BuB,EAAUX,GAAUZ,GACpBC,EAAYC,cAEZo9B,EAAmBC,eACnBC,EAAev9B,EAAU,aAADK,OAAcX,EAAQ,mBAAmB,CACnEqX,YAAa,EACbzW,EAAG+8B,EAAiB39B,EAAU,KAG1B8a,EAAiBH,aAAeta,GAAhCya,aAEFgjB,KAAehjB,EAAakf,OAAQlf,EAAaijB,SAEjDC,EAAe19B,EAAU,gBAAiB,CAAEiB,KAAMs8B,IAClDI,EAAgB39B,EAAU,kBAEhC,OACIlB,cAAAsmB,WAAA,CAAAhnB,SACIkF,eAAA,OAAK7D,UAAW6B,EAAQgQ,QAAQlT,SAAA,CAC5BU,cAAC8+B,KAAK,CAACn+B,UAAW6B,EAAQ2H,OAC1BnK,cAACC,KAAU,CAACC,QAAQ,KAAK6+B,WAAS,EAAAz/B,SAC7B4B,EAAmB,aAAAK,OACDX,EADR89B,EACgB,SACA,gBAC3B,CAAEl9B,EAAGo9B,MAGT5+B,cAACC,KAAU,CAACC,QAAQ,QAAOZ,SACtB4B,EAAmB,aAAAK,OACCX,EADV89B,EACkB,UACA,iBAAiB,CAC1Cl9B,EAAGq9B,UAO3B,E,odCjCMG,GAA0B,SAAH3/B,GAA4B,IAAD4/B,EAAA5/B,EAArBglB,eAAO,IAAA4a,EAAG,IAAIA,EAE7C,OAD2BC,aAAW7a,GAE3BrkB,cAACm/B,KAAgB,CAAC91B,KAAM,KAE5B,IACX,EA6NM+1B,GAAa,GAEbv9B,GAAYC,aACd,SAACC,GAAK,MAAM,CACRs9B,UAAW,CACPrX,SAAU,EACVla,SAAU,WACV7L,SAAUF,EAAMG,QAAQ,KAE5Bo9B,qBAAsB,CAClBnd,OAAQpgB,EAAMogB,OAAOod,OAEzBC,KAAM,CAEF38B,OAAQd,EAAMG,QAAQ,GAAK,GAAK,GAAK,IAEzCu9B,oBAAqB,CACjB58B,OAAQ,oBAEZ68B,sBAAuB,CACnB78B,OAAQ,oBAEZ88B,UAAW,CACP/U,SAAU,OAEV3oB,SAAU,KAEd29B,gBAAiB,CACbhV,SAAU,OACV,UAAW,CACPrkB,gBAC2B,UAAvBxE,EAAMyE,QAAQC,KACR,sBACA,8BAGlBo5B,WAAY,CACRtxB,MAAO,OACPyZ,SAAU,EACV2C,cAAe,OACfmV,SAAU/9B,EAAMG,QAAQ,IAQ5B69B,gBAAiB,CACb5d,OAAQpgB,EAAMogB,OAAOod,MACrBhI,UAAW,2GAEfyI,UAAW,CACPC,SAAU,SACVC,aAAc,YAElBC,SAAU,CACNL,SAAU,SAAA1uB,GAAsB,OAAAA,EAAnBgvB,qBAAiD,GAAG,GAExE,GACD,CAAEj+B,KAAM,6BAGGk+B,GA1RgB,SAACp/B,GAmCxBA,EAjCAuB,QAFmC,IAAD89B,EAGlChhC,EAgCA2B,EAhCA3B,SACAihC,EA+BAt/B,EA/BAs/B,iBAAgBC,EA+BhBv/B,EA9BA2G,kBAAU,IAAA44B,EAAG,OAAMA,EAAAC,EA8BnBx/B,EA7BAy/B,uBAAe,IAAAD,EAAG,eAAcA,EAChCtoB,EA4BAlX,EA5BAkX,SACA1V,EA2BAxB,EA3BAwB,OAEAC,GAyBAzB,EA1BAwN,UA0BAxN,EAzBAyB,YACIi+B,EAwBJ1/B,EAxBAgD,GACO28B,EAuBP3/B,EAvBAe,MACY6+B,EAsBZ5/B,EAtBAiD,WACAvB,EAqBA1B,EArBA0B,MACAiV,EAoBA3W,EApBA2W,QAAOhV,EAoBP3B,EAnBA4B,cAAM,IAAAD,EAAG,QAAOA,EAAAk+B,EAmBhB7/B,EAlBAoI,YAAI,IAAAy3B,EAAG,QAAOA,EACRC,EAiBN9/B,EAjBAmD,KACAtB,EAgBA7B,EAhBA6B,OACAC,EAeA9B,EAfA8B,SACAC,EAcA/B,EAdA+B,QAAOg+B,EAcP//B,EAbAgC,QAAOg+B,OAAA,IAAAD,EAIH,CAAC,EAACA,EAHFE,EAAUD,EAAVC,WACAC,EAAUF,EAAVE,WACGl+B,EAAOxD,YAAAwhC,EAAAvhC,IAEdyD,EAQAlC,EARAkC,MACAvC,EAOAK,EAPAL,SACAC,EAMAI,EANAJ,OACAuC,EAKAnC,EALAmC,SAAQg+B,EAKRngC,EAJAogC,uBAAe,IAAAD,GAAQA,EAAAE,EAIvBrgC,EAHAsgC,uBAAe,IAAAD,GAAQA,EAAAj+B,EAGvBpC,EAFAf,eAAO,IAAAmD,EAAG,SAAQA,EACfS,EAAIrE,YACPwB,EAAKwQ,IAEHjP,EAAUX,GAAUZ,GAE1B8C,EAKIC,aAAQvC,YAAC,CACTgB,SACAwB,GAAI08B,EACJ3+B,MAAO4+B,EACPx8B,KAAM28B,EACNj+B,SACAC,WACAC,UACAG,QACAvC,WACAC,SACAuC,YACGU,IAhBHG,EAAEF,EAAFE,GACAjC,EAAK+B,EAAL/B,MACAkC,EAAUH,EAAVG,WAAUC,EAAAJ,EACVK,KAAQG,GAAOJ,EAAPI,QAASF,GAAKF,EAALE,MAAOC,GAAWH,EAAXG,YAgBxBk9B,GAAW1vB,mBACT2vB,GAAYr5B,IAAM0J,OAAO,MAC/B3J,GAAwBC,IAAMC,UAAS,GAAMC,GAAAzC,YAAAsC,GAAA,GAAtCS,GAAIN,GAAA,GAAEuP,GAAOvP,GAAA,GAEdo5B,GAAgB1/B,EAAMV,OAAS89B,GAE/BrkB,GAAe3I,uBACjB,SAAA6oB,GAAI,OAAI,WACJ,IAAM0G,EAAgBv2B,aAAOs2B,IAC7BC,EAAiBjO,OAAOiO,EAAiBlO,QAAQwH,GAAO,GACxDj5B,EAAMe,SAAS4+B,EACnB,CAAC,GACD,CAAC3/B,EAAO0/B,KAGNE,GAAaxvB,uBACf,SAAAtJ,GACI9G,EAAMc,OAAOgG,EACjB,GACA,CAAC9G,IAIC6/B,GAAczvB,uBAAY,SAAAtJ,GAC5B+O,IAAQ,GACR7V,EAAMgB,QAAQ8F,EAClB,GAAG,CAAC9G,IAGE8/B,GAAe1vB,uBAAY,SAAAtJ,GAC7B+O,IAASjP,GACb,GAAG,CAACA,GAAMiP,KAMJhP,GAAc,SAACC,GAAW,IAADi5B,EAAAC,EAGe,oBAA1B,QAAZD,EAAAj5B,EAAMwB,cAAM,IAAAy3B,GAAW,QAAXC,EAAZD,EAAcE,iBAAS,IAAAD,OAAX,EAAZA,EAAyBrhC,YAI7BkX,IAAQ,EACZ,EAEMiG,GAAe1L,uBAAY,SAAC8vB,EAAOC,GACrC,GAAI5B,EAAkB,CAClB,IAAMoB,EAAmBpB,EAAiB2B,EAAOR,IACjD1/B,EAAMe,UAA2B,IAAjBo/B,GAAyBZ,EAAmBI,EAAgB,GAAApgC,OAAA6J,aAAOs2B,IAAat2B,aAAKu2B,IACzG,CACJ,GAAG,CAACD,KAEJ,OACI1hC,cAACoiC,KAAiB,CAACC,YAAchB,EAAgC,WAAQ,EAAtBx4B,GAAwBvJ,SACvEkF,eAAA,OAAK7D,UAAW6B,EAAQ68B,UAAU//B,SAAA,CAC9BU,cAACyE,KAAShD,YAAA,CACNwC,GAAIA,EACJ4F,IAAK43B,GACLhzB,WAAS,EACT6zB,WAAU7gC,YAAA,CACN8gC,UAAU,EACVf,SAAUA,GACVh/B,QAAS,CACL8D,KAAMk8B,IAAWhgC,EAAQm9B,UAASnrB,YAAA,GAC7BhS,EAAQo9B,gBACO,WAAZ1/B,IAER8B,MAAOQ,EAAQq9B,YAEnB4C,eACIziC,cAAA,OACIW,UAAW6hC,KAAUlC,EAAA,GAAA9rB,YAAA8rB,EAChB99B,EAAQi9B,oBACO,WAAZv/B,GAAoBsU,YAAA8rB,EACvB99B,EAAQk9B,sBACO,aAAZx/B,GAAsBogC,IAC3BhhC,SAEFoiC,GAAcr8B,KACX,SAAC41B,EAAMvd,GACH,IAAM1Y,EAA6B,mBAAd4C,EAA2BA,EAAWqzB,GAAQA,EAAKrzB,GACxE,OAAO5H,cAAC0iC,KAAI,CAERlgC,QAASvB,EAAMm/B,oBAAsB,CACjC95B,KAAM9D,EAAQ29B,SACdx9B,MAAOH,EAAQw9B,WACf,CAAC,EACLh7B,MAAO/D,EAAMm/B,oBAAsBp7B,OAAQ+F,EAC3C43B,UAAW,EACXhgC,MAAOqC,EACPrE,UAAW6B,EAAQg9B,KACnB5hB,SAAU7C,GACNkgB,IAVCvd,EAab,MAOZklB,aAAchrB,EACV5X,cAACg/B,GAAuB,IAExBh/B,cAAC6iC,KAAc,CAAC/0B,SAAS,MAAMsK,MAAO,CAAE0S,WAAY,QAASxrB,SACzDU,cAACkJ,KAAU,CAACG,KAAK,QAAQF,QAAS24B,GAAaxiC,SAC1CsJ,GACG5I,cAAC8iC,KAAW,CAAC3iC,MAAM,WACjBH,cAAC+iC,KAAiB,CAAC5iC,MAAM,eAI3C2C,OAAQ8+B,GACR5+B,QAAS6+B,IACNV,GAEP98B,SAAUE,KAAYF,KAASC,IAC/B3B,MACI3C,cAAC2E,KAAUlD,wBAAA,CACPkB,MAAOA,GACHu+B,GAAU,IACdrgC,OAAQA,EACRD,SAAUA,EACVsD,WAEQ,qBADG28B,EAEDA,EACA38B,KAIlBxB,WACI1C,cAAC4E,KAAe,CACZL,QAASA,GACTF,MAAOA,IAASC,GAChB5B,WAAYA,IAGpB2G,KAAMA,EACNnJ,QAASA,EACT2C,OAAQA,EACRsV,SAAUA,GACNlV,IAERjD,cAACgjC,KAAM,CAACp6B,KAAMA,GAAMjI,UAAW6B,EAAQu9B,gBAAiBkD,UAAWvC,EAAiBn4B,SAAUk5B,GAAU3uB,QAAShL,UAAMiD,EAAWosB,YAAU,EAAC+L,eAAa,EAAA5jC,SACrJ8I,IAAMhC,aAAa9G,EAAU,CAC1BkK,QAASX,GACTgV,SAAUC,GACV4jB,yBAOxB,E,2UCrOM1C,GAA0B,SAAH3/B,GAA4B,IAAD4/B,EAAA5/B,EAArBglB,eAAO,IAAA4a,EAAG,IAAIA,EAE/C,OAD2BC,aAAW7a,GAE7BrkB,cAACm/B,KAAgB,CAAC91B,KAAM,KAE1B,IACT,EAgOM+1B,GAAa,GAEbv9B,GAAYC,aAChB,SAACC,GAAK,MAAM,CACVs9B,UAAW,CACTrX,SAAU,EACVla,SAAU,WACV7L,SAAUF,EAAMG,QAAQ,KAE1Bo9B,qBAAsB,CACpBnd,OAAQpgB,EAAMogB,OAAOod,OAEvBC,KAAM,CACJ38B,OAAQd,EAAMG,QAAQ,GAAK,GAAK,GAAK,IAEvCu9B,oBAAqB,CACnB58B,OAAQ,oBAEV68B,sBAAuB,CACrB78B,OAAQ,oBAEV88B,UAAW,CACT/U,SAAU,OAEV3oB,SAAU,KAEZ29B,gBAAiB,CACfhV,SAAU,OACV,UAAW,CACTrkB,gBACyB,UAAvBxE,EAAMyE,QAAQC,KACV,sBACA,8BAGVo5B,WAAY,CACVtxB,MAAO,OACPyZ,SAAU,EACV2C,cAAe,OACfmV,SAAU/9B,EAAMG,QAAQ,IAQ1B69B,gBAAiB,CACf5d,OAAQpgB,EAAMogB,OAAOod,MACrBhI,UACE,2GAEJyI,UAAW,CACTC,SAAU,SACVC,aAAc,YAEhBC,SAAU,CACRL,SAAU,KAEb,GACD,CAAE39B,KAAM,6BAGKk+B,GA7RgB,SAACp/B,GA+B1BA,EA7BFuB,QAFuC,IAAD89B,EAGtChhC,EA4BE2B,EA5BF3B,SAAQ6jC,EA4BNliC,EA3BFkwB,eAAO,IAAAgS,EAAG,GAAEA,EAAAC,EA2BVniC,EA1BFiP,mBAAW,IAAAkzB,EAAG,KAAIA,EAAA5C,EA0BhBv/B,EAzBF2G,kBAAU,IAAA44B,EAAG,OAAMA,EAAAC,EAyBjBx/B,EAxBFy/B,uBAAe,IAAAD,EAAG,eAAcA,EAChCtoB,EAuBElX,EAvBFkX,SACA1V,EAsBExB,EAtBFwB,OAEAC,GAoBEzB,EArBFwN,UAqBExN,EApBFyB,YACIi+B,EAmBF1/B,EAnBFgD,GACO28B,EAkBL3/B,EAlBFe,MACY6+B,EAiBV5/B,EAjBFiD,WACAvB,EAgBE1B,EAhBF0B,MACAiV,EAeE3W,EAfF2W,QAAOhV,EAeL3B,EAdF4B,cAAM,IAAAD,EAAG,QAAOA,EAAAk+B,EAcd7/B,EAbFoI,YAAI,IAAAy3B,EAAG,QAAOA,EACRC,EAYJ9/B,EAZFmD,KACAtB,EAWE7B,EAXF6B,OACAC,EAUE9B,EAVF8B,SACAC,EASE/B,EATF+B,QAAOg+B,EASL//B,EARFgC,QAAOg+B,OAAA,IAAAD,EAA2C,CAAC,EAACA,EAAzCE,EAAUD,EAAVC,WAAYC,EAAUF,EAAVE,WAAel+B,EAAOxD,YAAAwhC,EAAAvhC,IAC7CyD,EAOElC,EAPFkC,MACAvC,EAMEK,EANFL,SACAC,EAKEI,EALFJ,OACAuC,EAIEnC,EAJFmC,SAAQg+B,EAINngC,EAHFogC,uBAAe,IAAAD,GAAQA,EAAA/9B,EAGrBpC,EAFFf,eAAO,IAAAmD,EAAG,SAAQA,EACfS,EAAIrE,YACLwB,EAAKwQ,IAEHjP,EAAUX,GAAUZ,GAE1B8C,EAKIC,aAAQvC,YAAC,CACXgB,SACAwB,GAAI08B,EACJ3+B,MAAO4+B,EACPx8B,KAAM28B,EACNj+B,SACAC,WACAC,UACAG,QACAvC,WACAC,SACAuC,YACGU,IAhBHG,EAAEF,EAAFE,GACAjC,EAAK+B,EAAL/B,MACAkC,EAAUH,EAAVG,WAAUC,GAAAJ,EACVK,KAAQG,GAAOJ,GAAPI,QAASF,GAAKF,GAALE,MAAOC,GAAWH,GAAXG,YAgBtBk9B,GAAW1vB,mBACT2vB,GAAYr5B,IAAM0J,OAAO,MAC/B3J,GAAwBC,IAAMC,UAAS,GAAMC,GAAAzC,YAAAsC,GAAA,GAAtCS,GAAIN,GAAA,GAAEuP,GAAOvP,GAAA,GACd+6B,GAAcrhC,EAAMV,OAAS89B,GAC7BkE,GAAgBthC,EAAMe,SAEtBwgC,GAAyBnxB,uBAC7B,SAAC9Q,GACC,OAAO6vB,EAAQqS,MAAK,SAAC37B,GAMnB,OAJyB,oBAAhBqI,EACHA,EAAYrI,GACZxG,KAAIwG,EAAQqI,MAEK5O,CACzB,GACF,GACA,CAAC6vB,EAASjhB,IAGNwxB,GAAgB17B,mBAAQ,kBAAMq9B,GAAYh+B,IAAIk+B,GAAuB,GAAE,CAACA,GAAwBF,KAEhGtoB,GAAe3I,uBAAY,SAAC6oB,GAAI,OAAK,WACzC,IAAMwI,EAA4C,oBAAhBvzB,EAA6BA,EAAY+qB,GAAQ55B,KAAI45B,EAAM/qB,GACvFwzB,EAAYL,GAAYv9B,QAAO,SAAAxE,GAAK,OAAIA,IAAUmiC,CAAkB,IAC1EH,GAAcI,EAChB,CAAC,GAAE,CAACxzB,EAAamzB,GAAaC,KAExB1B,GAAaxvB,uBAAY,SAACtJ,GAC9B9G,EAAMc,OAAOgG,EACf,GAAG,CAAC9G,IAEE6/B,GAAczvB,uBAAY,SAACtJ,GAC/B+O,IAAQ,GACR7V,EAAMgB,QAAQ8F,EAChB,GAAG,CAAC9G,IAEE8/B,GAAe1vB,uBAAY,SAACtJ,GAChC+O,IAASjP,GACX,GAAG,CAACA,GAAMiP,KAGJhP,GAAc,SAACC,GAAW,IAADi5B,EAAAC,EAEc,qBAA3B,QAAZD,EAAAj5B,EAAMwB,cAAM,IAAAy3B,GAAW,QAAXC,EAAZD,EAAcE,iBAAS,IAAAD,OAAX,EAAZA,EAAyBrhC,YAI7BkX,IAAQ,EACV,EAEMiG,GAAe1L,uBAAY,SAAC8vB,EAAOC,GACvC,IAAMwB,EACmB,oBAAhBzzB,EACHgyB,EAAM78B,IAAI6K,GACVgyB,EAAM78B,KAAI,SAAC41B,GAAI,OAAK55B,KAAI45B,EAAM/qB,EAAY,IAC1CwzB,EAASt4B,aAAO,IAAIw4B,IAAI,GAADriC,OAAA6J,aAAKi4B,IAAWj4B,aAAKu4B,MAElDL,GAAcI,EAChB,GAAG,CAACxzB,EAAamzB,GAAaC,KAE9B,OACEtjC,cAACoiC,KAAiB,CAACC,YAAchB,EAAgC,WAAQ,EAAtBx4B,GAAwBvJ,SACzEkF,eAAA,OAAK7D,UAAW6B,EAAQ68B,UAAU//B,SAAA,CAChCU,cAACyE,KAAShD,YAAA,CACRwC,GAAIA,EACJ4F,IAAK43B,GACLhzB,WAAS,EACT6zB,WAAU7gC,YAAA,CACR8gC,UAAU,EACVf,SAAUA,GACVh/B,QAAS,CACP8D,KAAMk8B,IAAWhgC,EAAQm9B,UAASnrB,YAAA,GAC/BhS,EAAQo9B,gBAA8B,WAAZ1/B,IAE7B8B,MAAOQ,EAAQq9B,YAEjB4C,eACEziC,cAAA,OACEW,UAAW6hC,KAAUlC,EAAA,GAAA9rB,YAAA8rB,EAClB99B,EAAQi9B,oBAAkC,WAAZv/B,GAAoBsU,YAAA8rB,EAClD99B,EAAQk9B,sBAAoC,aAAZx/B,GAAsBogC,IACtDhhC,SAEFoiC,GACE57B,QAAO,SAACm1B,GAAI,QAAOA,CAAI,IACvB51B,KAAI,SAAC41B,EAAMvd,GACV,IAAM1Y,EAA6B,mBAAd4C,EAA2BA,EAAWqzB,GAAQ55B,KAAI45B,EAAMrzB,GAE7E,OACE5H,cAAC0iC,KAAI,CAEHlgC,QAAS,CAAE8D,KAAM9D,EAAQ29B,SAAUx9B,MAAOH,EAAQw9B,WAClDh7B,MAAOA,EACP29B,UAAW,EACXhgC,MAAOqC,EACPrE,UAAW6B,EAAQg9B,KACnB5hB,SAAU7C,GAAakgB,IANlBvd,EASX,MAGNklB,aAAchrB,EACZ5X,cAACg/B,GAAuB,IAExBh/B,cAAC6iC,KAAc,CAAC/0B,SAAS,MAAMsK,MAAO,CAAE0S,WAAY,QAASxrB,SAC3DU,cAACkJ,KAAU,CAACG,KAAK,QAAQF,QAAS24B,GAAaxiC,SAC5CsJ,GACC5I,cAAC8iC,KAAW,CAAC3iC,MAAM,WAEnBH,cAAC+iC,KAAiB,CAAC5iC,MAAM,eAKjC2C,OAAQ8+B,GACR5+B,QAAS6+B,IACNV,GAEL98B,SAAUE,KAAYF,KAASC,IAC/B3B,MACE3C,cAAC2E,KAAUlD,wBAAA,CACTkB,MAAOA,GACHu+B,GAAU,IACdrgC,OAAQA,EACRD,SAAUA,EACVsD,WACgC,qBAAvB28B,EACHA,EACA38B,KAIVxB,WACE1C,cAAC4E,KAAe,CACdL,QAASA,GACTF,MAAOA,IAASC,GAChB5B,WAAYA,IAGhB2G,KAAMA,EACNnJ,QAASA,EACT2C,OAAQA,EACRsV,SAAUA,GACNlV,IAENjD,cAACgjC,KAAM,CACLp6B,KAAMA,GACNjI,UAAW6B,EAAQu9B,gBACnBkD,UAAWvC,EACXn4B,SAAUk5B,GAAU3uB,QACpBhL,UAAMiD,EACNosB,YAAU,EACV+L,eAAa,EAAA5jC,SAEZ8I,IAAMhC,aAAa9G,EAAU,CAC5BkK,QAASX,GACTgV,SAAUC,GACV4jB,yBAMZ,E,wICxOetkB,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,oEAGd,E,8ECCMumB,GAAY,CAEdC,MAAO9jC,cAAC+jC,KAAS,CAAC3rB,MAAO,CAAEjY,MAAO6jC,KAAK,MAAQv5B,SAAS,UAExDw5B,UAAWjkC,cAACkkC,KAAS,CAAC9rB,MAAO,CAAEjY,MAAOgkC,KAAM,MAAQ15B,SAAS,UAC7D25B,SAAUpkC,cAACqkC,KAAY,CAACjsB,MAAO,CAAEjY,MAAOmkC,KAAK,MAAQ75B,SAAS,WAG5DL,GAAcpK,cAACukC,KAAU,CAACnsB,MAAO,CAAEjY,MAAOqkC,KAAM,MAAQ/5B,SAAS,UAGjE5I,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC0iC,MAAO,CACHliB,MAAO,EACPmiB,OAAQ,EACR9hB,UAAW,uBAGlB,GAAG,CAAEzgB,KAAM,kBA0BGwiC,GAvBc,SAAHtlC,GAA8B,IAAxB0B,EAAM1B,EAAN0B,OAAWE,EAAKxB,YAAAJ,EAAAK,IACtC8C,EAAUX,KACR4E,EAAe1F,EAAf0F,KAAMunB,EAASjtB,EAATitB,KACR7jB,EAAO05B,GAAUp9B,IAAS2D,GAEhC,OAAO4jB,EACHhuB,cAAC4kC,KAAK,CACFC,aAAc,CACVC,SAAU,SACVC,WAAY,SAEhBC,aAAchlC,cAACilC,GAAY,CAACx6B,SAAS,UACrCy6B,QAAQ,UACR1iC,QAAS,CAAEiiC,MAAOjiC,EAAQiiC,OAAQnlC,SAEjC8G,uBAAa+D,EAAI1I,YAAA,GAAOR,MAG7BmF,uBAAa+D,EAAI1I,YAAA,GAAOR,GAGhC,E,qDCpCMY,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNuE,KAAM,CACF2hB,UAAW,GAEf1P,QAAS,CACL0nB,SAAU,OACVzuB,OAAQ,IACRjD,MAAO,IACPN,QAAS,GAGbymB,OAAQ,CACJtM,WAAYrmB,EAAMG,QAAQ,GAC1B0pB,cAAe7pB,EAAMG,QAAQ,IAEjCijC,aAAc,CACVtiC,OAAQ,GAEZ42B,mBAAoB,CAChB52B,OAAQ,EACRioB,WAAY/oB,EAAMG,QAAQ,IAEjC,IAGCkjC,GAA4B,SAAH/lC,GAKxB,IAJHwe,EAAQxe,EAARwe,SAEAwnB,GADOhmC,EAAPmK,QACQnK,EAARgmC,UACGpkC,EAAKxB,YAAAJ,EAAAK,IAEF8C,EAAUX,GAAUZ,GACpBC,EAAYC,cAEZ2c,EAAe1L,uBAAY,SAACkzB,EAASC,GACvC,IAAMC,EAAgBF,EAAQr6B,QAAO,SAACC,EAAKu6B,GACvC,IAAMC,EAAOH,EAAUI,KAAKF,GAC5B,MAAsB,eAAX,OAAJC,QAAI,IAAJA,OAAI,EAAJA,EAAMj/B,MAAoB,GAAAlF,OAAA6J,aAAOF,GAAG,CAAEw6B,IAAQx6B,CACzD,GAAG,IAE0B,IAAzBs6B,EAAc78B,QAElBkV,GAAYA,EAAS2nB,EAEzB,GAAG,CAAC3nB,IAEEoS,EAAkB2V,aAAiBnkC,wBAAC,CAAC,EAAIR,GAAK,IAAE4c,SAAUC,KAG5D+nB,EAGA5V,EAHA4V,aAqBEC,EAAwBC,MAJT,SAACj9B,GAClB+8B,EAAa/8B,EAAMwB,OAAOhJ,MAC9B,GAEqD,KAErD,OACItB,cAACgmC,KAAmB,CAAC1kC,MAAO2uB,EAAgB3wB,SACxCkF,eAACiqB,KAAI,CAAC9tB,UAAW6B,EAAQ8D,KAAKhH,SAAA,CAC1BU,cAAC2uB,KAAW,CAAArvB,SACRU,cAACyE,KAAS,CACNgK,WAAS,EACTw3B,aAAW,EACXljC,SAAU+iC,EACVI,YAAahlC,EAAU,oBACvBhB,QAAQ,SACRmJ,KAAK,QACLi5B,WAAY,CACRM,aACI5iC,cAAC6iC,KAAc,CAAC/0B,SAAS,MAAKxO,SAC1BU,cAACmmC,KAAU,CAAChmC,MAAM,oBAMtCH,cAAC2uB,KAAW,CAAChuB,UAAW6B,EAAQ+V,QAAQjZ,SACpCU,cAAComC,KAAa,CAACf,SAAUA,UAM7C,EAEMgB,GAAmB,SAAHj1B,GAAA,IAAMxQ,EAAQwQ,EAARxQ,SAAaK,EAAKxB,YAAA2R,EAAAK,IAAA,OAC1CzR,cAACwsB,KAAuB,CAAClrB,MAAOV,EAAStB,SACrCU,cAAColC,GAAyB3jC,YAAA,GAAKR,KACT,EAG9BolC,GAAiB1kC,aAAe,CAC5BwI,KAAMw6B,GACN7+B,OAAQ,CAAC,EACTy8B,UAAU,GAGC8D,U,8FCrGTxkC,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF2hB,UAAW,GAEf1P,QAAS,CACL/G,OAAQ,OACRjD,MAAO,KAEX+3B,WAAY,CACR/3B,MAAO,KAEXg4B,cAAe,CACXh4B,MAAO,KAEX0d,OAAQ,CACJnB,WAAY/oB,EAAMG,QAAQ,IAEjC,IAEKskC,GAAe,qBAgKNC,GA7JO,SAAHpnC,GAMZ,IALMisB,EAAejsB,EAAxBmD,QACAqb,EAAQxe,EAARwe,SACArU,EAAOnK,EAAPmK,QACAk4B,EAAariC,EAAbqiC,cAIMl/B,GAHE/C,YAAAJ,EAAAK,IAEUyB,cACFU,GAAU,CAAEW,QAAS8oB,KAE/Bob,EAAe1gC,mBAAQ,WACzB,GAAI07B,GAAiBA,EAAc/4B,OAAS,EAAG,CAC3C,IAAMg+B,EAAMjF,EAAcA,EAAc/4B,OAAS,GACjD,MAAO,CACHy0B,OAAQ,OACRtM,KAAO6V,EAAItJ,eAAiB/wB,YAAS6wB,QAAQwJ,EAAItJ,eAAeuJ,SAASJ,KAAqB,KAC9FjnC,GAAKonC,EAAInJ,eAAiBlxB,YAAS6wB,QAAQwJ,EAAInJ,eAAeoJ,SAASJ,KAAqB,KAEpG,CACI,MAAO,CACHpJ,OAAQ,OACRtM,KAAMxkB,YAASC,MAAMs6B,MAAM,CAAEC,KAAM,IAAKF,SAASJ,IACjDjnC,GAAI+M,YAASC,MAAMq6B,SAASJ,IAIxC,GAAG,CAAC9E,IAEJ3vB,EAA0B1J,mBAASq+B,GAAa10B,EAAAnM,YAAAkM,EAAA,GAAzCrF,EAAKsF,EAAA,GAAE4T,EAAQ5T,EAAA,GAEtBgE,qBAAU,WACN,GAAoB,QAAhBtJ,EAAM0wB,OAAV,CACA,IAAM79B,EAAMmN,EAAMokB,MAAQxkB,YAASy6B,WAAWr6B,EAAMokB,KAAM0V,IAAiBQ,KAAIxyB,YAAC,CAAC,EAAE9H,EAAM0wB,OAAS,IAAKwJ,SAASJ,KAAqB,KACrI5gB,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACPza,MAAE,GAJ4B,CAMtC,GAAG,CAACmN,EAAM0wB,OAAQ1wB,EAAMokB,OAExB,IAAMmW,EAAqB70B,uBAAY,SAACtJ,GACpC8c,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACPojB,OAAQt0B,EAAMwB,OAAOhJ,OAAK,GAElC,GAAG,CAACskB,IAEEshB,EAAmB90B,uBAAY,SAACtJ,GAClC8c,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACP8W,KAAMhoB,EAAMwB,OAAOhJ,OAAK,GAEhC,GAAG,CAACskB,IAEEuhB,EAAiB/0B,uBAAY,SAACtJ,GAChC8c,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACPza,GAAIuJ,EAAMwB,OAAOhJ,OAAK,GAE9B,GAAG,CAACskB,IAEEwhB,EAAeh1B,uBAAY,SAACtJ,GAC9B+U,GAAYA,EAAS,CAACnR,IACtBlD,GAAWA,EAAQV,EACvB,GAAG,CAAC4D,EAAOmR,EAAUrU,IAEf69B,EAAej1B,uBAAY,SAACtJ,GAC9B+U,GAAYA,EAAS,CAACnR,IAAQ,GAC9BlD,GAAWA,EAAQV,EACvB,GAAG,CAAC4D,EAAOmR,EAAUrU,IAErB,OAEIxJ,cAACyuB,KAAI,CAAC9tB,UAAW6B,EAAQ8D,KAAKhH,SAC1BU,cAAC2uB,KAAW,CAAChuB,UAAW6B,EAAQ+V,QAAQjZ,SACpCkF,eAAC8iC,KAAI,CAACjI,WAAS,EAACn9B,QAAS,EAAE5C,SAAA,CACvBU,cAACsnC,KAAI,CAACrM,MAAI,EAACsM,GAAI,EAAEjoC,SACbkF,eAACoK,KAAW,CAAC1O,QAAQ,SAASuO,WAAS,EAAAnP,SAAA,CACnCU,cAAC+O,KAAU,CAAC9K,GAAG,sBAAqB3E,SAAC,yCACrCkF,eAACgjC,KAAM,CACHC,QAAQ,sBACRxjC,GAAG,gBACH3C,MAAOoL,EAAM0wB,OACbr6B,SAAUkkC,EAAmB3nC,SAAA,CAE7BU,cAAC+E,KAAQ,CAACzD,MAAM,OAAMhC,SAAC,qGACvBU,cAAC+E,KAAQ,CAACzD,MAAM,QAAOhC,SAAC,uBACxBU,cAAC+E,KAAQ,CAACzD,MAAM,OAAMhC,SAAC,6BACvBU,cAAC+E,KAAQ,CAACzD,MAAM,QAAOhC,SAAC,yCACxBU,cAAC+E,KAAQ,CAACzD,MAAM,SAAQhC,SAAC,mCACzBU,cAAC+E,KAAQ,CAACzD,MAAM,WAAUhC,SAAC,+CAC3BU,cAAC+E,KAAQ,CAACzD,MAAM,QAAOhC,SAAC,+BAIpCU,cAACsnC,KAAI,CAACrM,MAAI,EAACsM,GAAI,EAAEjoC,SACbU,cAACyE,KAAS,CACNgK,WAAS,EACTvO,QAAQ,SACRyC,MAAM,IACN8D,KAAK,iBACLnF,MAAOoL,EAAMokB,KACb/tB,SAAUmkC,EACV/F,WAAY,CAAE5D,IAAK7wB,EAAMnN,IACzBmoC,gBAAiB,CACbz4B,QAAQ,OAIpBjP,cAACsnC,KAAI,CAACrM,MAAI,EAACsM,GAAI,EAAEjoC,SACbU,cAACyE,KAAS,CACNgK,WAAS,EACTvO,QAAQ,SACRiY,SAA0B,QAAhBzL,EAAM0wB,OAChBz6B,MAAM,eACN8D,KAAK,iBACLnF,MAAOoL,EAAMnN,GACbwD,SAAUokC,EACVhG,WAAY,CAAEjE,IAAKxwB,EAAMokB,MACzB4W,gBAAiB,CACbz4B,QAAQ,OAIpBzK,eAAC8iC,KAAI,CAACrM,MAAI,EAACsM,GAAI,GAAIlI,WAAS,EAACsI,QAAQ,WAAUroC,SAAA,CAC3CU,cAAC8f,KAAM,CACH5f,QAAQ,YACRsc,kBAAgB,EAChBrT,QAASK,EAAQlK,SACpB,yCAGDU,cAAC8f,KAAM,CACH5f,QAAQ,YACRS,UAAW6B,EAAQypB,OACnB9rB,MAAM,UACNqc,kBAAgB,EAChBrT,QAASi+B,EAAa9nC,SACzB,+CAGwB,GAAxBoiC,EAAc/4B,QAAe3I,cAAC8f,KAAM,CACjC5f,QAAQ,YACRS,UAAW6B,EAAQypB,OACnB9rB,MAAM,UACNqc,kBAAgB,EAChBrT,QAASk+B,EAAa/nC,SACzB,8DASzB,E,4FCnMMuC,GAAYC,YAAW,CACzB8lC,cAAe,CACXr5B,MAAO,GACPiD,OAAQ,GACR6c,YAAa,EACb5L,WAAY,UAEhBtK,SAAU,CACNwS,cAAe,OACfkd,OAAQ,UACRnd,QAAS,MAIXod,GAAWj7B,gBAAK,SAAAxN,GAKf,IAAD0oC,EAJFC,EAAM3oC,EAAN2oC,OACoBC,EAAkB5oC,EAAtC6oC,mBACeC,EAAa9oC,EAA5B+oC,cAGM5lC,GAFE/C,YAAAJ,EAAAK,IAEQmC,MAEV6jC,GAAO2C,EADO9nC,eAAZ8nC,SACaL,GACrB,IAAKtC,EAAM,OAAO,KAElB,IAAM4C,GAAoB,OAAJ5C,QAAI,IAAJA,GAAe,QAAXqC,EAAJrC,EAAMtK,iBAAS,IAAA2M,OAAX,EAAJA,EAAiBjgC,SAAU,CAAC,WAAY,SAAU,SAAU,WAAY,MAAO,OAAO2rB,QAAQiS,EAAKtK,UAAUtzB,OAAS,GAG5I,OACI9H,cAACuoC,KAAQ,CACLP,OAAQtC,EAAKzhC,GACbtB,MAAO3C,cAACmoC,EAAa,CAACzC,KAAMA,IAC5Bv7B,KAAMnK,cAACioC,EAAkB,CAACvC,KAAMA,IAChC/kC,UAAWsjB,kBAAIzP,YAAC,CAAC,EACZhS,EAAQ2V,SAAWmwB,IAExB9lC,QAAS,CAAEolC,cAAeplC,EAAQolC,eAAgBtoC,SAEjDkpC,MAAMC,QAAQ/C,EAAKgD,YAAchD,EAAKgD,WAAWrjC,KAAI,SAACsjC,GAAS,OAAM3oC,cAAC8nC,GAAQ,CAACE,OAAQW,EAAU1kC,IAAS0kC,EAAU1kC,GAAM,IAAK,MAG5I,IAEA6jC,GAASnmC,aAAe,CACpBumC,mBAAoBU,KACpBR,cAAeS,MAIJf,UC1CTgB,GAA0B,SAAC5G,EAAOR,GAOtC,OANiBQ,EAAMp8B,QACrB,SAACm1B,GAAI,OACFyG,EAAcngB,MACb,SAACwnB,GAAK,OAAKA,EAAMjY,MAAQmK,EAAKnK,MAAQiY,EAAMxpC,IAAM07B,EAAK17B,EAAE,GAC1D,IAEW8F,KAAI,SAAC41B,GAAI,MAAM,CAC7BoC,cACEpC,EAAKnK,MAAqB,IAAbmK,EAAKnK,KACdxkB,YAAS6wB,QAAQlC,EAAKnK,MACrBkY,QACApC,SAAS,4BACV,KACNpJ,cACEvC,EAAK17B,IAAiB,IAAX07B,EAAK17B,GACZ+M,YAAS6wB,QAAQlC,EAAK17B,IAAIypC,QAAQpC,SAAS,4BAC3C,KACP,GACH,EAEMh/B,GAAa,SAACqzB,GAClB,OACGA,EAAKoC,cACF/wB,YAAS6wB,QAAQlC,EAAKoC,eAAeuJ,SAAS,oBAC9C,IACJ,OACC3L,EAAKuC,cACFlxB,YAAS6wB,QAAQlC,EAAKuC,eAAeoJ,SAAS,oBAC9C,GAER,EAEMqC,GAAiB,SAACphC,GACtB,OAAOqzB,aAAe,CACpBt6B,SAAUiH,EAAOwzB,MAAMp3B,GACvBksB,IAAKtoB,EAAOuzB,UAAUn3B,IAE1B,EAEMilC,GAAgB,SAACjO,GACrB,MAAM,GAAN15B,OAAU05B,EAAKG,UAAUj5B,KAAI,OAAAZ,OAAM05B,EAAKI,MAAMl5B,KAChD,EA0DegnC,GAxDa,SAACloC,GAAK,OAChCuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACfU,cAACwxB,KAAmB,CAClBliB,UAAQ,EACRzO,OAAO,UACP8B,MAAM,2BACN0pB,UAAU,YACVjd,YAAU,EACVg6B,iBAAkB,SAAA/pC,GAAA,IAAGgqC,EAAChqC,EAADgqC,EAAC,QAAQA,GAAIA,EAAE1gC,QAAU,CAAS,EAAErJ,SAEzDU,cAACspC,GAAuB,CACtBp5B,YAAa+4B,GACbrhC,WAAYshC,GAAc5pC,SAE1BU,cAACqmC,GAAgB,CAACzlC,SAAS,aAG/BZ,cAACwxB,KAAmB,CAClBliB,UAAQ,EACRzO,OAAO,kBACP8B,MAAM,6CACN0pB,UAAU,YACVjd,YAAU,EACVg6B,iBAAkB,SAAAh4B,GAAA,IAAGi4B,EAACj4B,EAADi4B,EAAC,QAAQA,GAAIA,EAAE1gC,QAAU,CAAS,EAAErJ,SAEzDU,cAACspC,GAAuB,CACtBp5B,YAAa+4B,GACbrhC,WAAYshC,GAAc5pC,SAE1BU,cAACqmC,GAAgB,CAACzlC,SAAS,OAAOykC,SAAUyC,SAGhD9nC,cAACqgC,GAAsB,CACrB/wB,UAAQ,EACRzO,OAAO,UACP8B,MAAM,6CACN0+B,iBAAe,EACfX,gBAAgB,SAChBH,iBAAkBuI,GAClBlhC,WAAYA,GAAWtI,SAEvBU,cAACymC,GAAa,MAEhBzmC,cAACkxB,KAAW,CACV5hB,UAAQ,EACRzO,OAAO,OACP8B,MAAM,iCACNwuB,QAAS,CACP,CAAEltB,GAAI,UAAW9B,KAAM,sEACvB,CAAE8B,GAAI,gBAAY9B,KAAM,0DACxB,CAAE8B,GAAI,QAAS9B,KAAM,2DAGlB,E,yCC1GLonC,GAA0B,CAC5BhV,MAAO,CACH,CAAE7nB,MAAO,SAAU88B,OAAQ,KAsGpB/T,GAlGK,WAEhB,IAAM4E,EAAeC,aAAY,SAAC5tB,GAC9B,OAAOrL,KAAIqL,EAAM,iCACrB,IAEA,OAAO,SAAC+8B,GAEJ,IAAMC,EAAW,IAAIC,KAAQC,SAC7BF,EAASG,QAAU,IAAIC,KACvBJ,EAASK,SAAW,IAAID,KACxBJ,EAASM,YAAc,IAAIF,KAE3B,IAAMjN,EAASvwB,YAAS29B,QAAQpN,OAAS,GAEzC4M,EAAQS,SAAQ,SAAAnpC,GACZ,IAAMopC,EAAQ,CAAC,EAEfppC,EAAOyO,KAAK06B,SAAQ,SAAAE,GAEhB,IAAMja,EAAMkK,EAAaa,aAAekP,EAAWja,MAEnDia,EAAW56B,KAAK06B,SAAQ,SAAAjP,GAUfkP,EAAMlP,EAAK0C,aAAcwM,EAAMlP,EAAK0C,WAAa,CAAC,GACvDwM,EAAMlP,EAAK0C,WAAW,GAADp8B,OAAI4uB,EAAIkL,MAAMp3B,GAAE,KAAA1C,OAAI4uB,EAAIiL,UAAUn3B,KAAQ25B,GAAa3C,EAChF,GACJ,IAAG,IAG0CoP,EAH1CC,EAAAC,aAGoBxpC,EAAO46B,WAAa,IAAE,IAA7C,IAAA2O,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAA+C,CAAC,IAArCC,EAAQN,EAAA/oC,MAET0S,EAAM4pB,GAAa+M,GACnBxa,EAAMkK,EAAaa,aAAeyP,EAASxa,MAEjD,IAAK,IAAM5qB,KAAO4kC,EACdA,EAAM5kC,GAAK,GAADhE,OAAI4uB,EAAIkL,MAAMp3B,GAAE,KAAA1C,OAAI4uB,EAAIiL,UAAUn3B,KAAQ+P,CAE5D,CAAC,OAAA42B,GAAAN,EAAA3/B,EAAAigC,EAAA,SAAAN,EAAAO,GAAA,CAGD,IAAM3lC,EAAO,CAAI,CACbwvB,OAAQ,CAAC,YAAa,2DACtBnvB,IAAK,YACL6S,MAAO,CAAE0yB,OAAQ,uBACjBv8B,MAAO,KACVhN,OAAA6J,aAAKrK,EAAOyO,KAAKnK,KAAI,SAAA+kC,GAClB,IAAMja,EAAMkK,EAAaa,aAAekP,EAAWja,MAC7C5qB,EAAG,GAAAhE,OAAM4uB,EAAIkL,MAAMp3B,GAAE,KAAA1C,OAAI4uB,EAAIiL,UAAUn3B,IAC7C,MAAO,CACHywB,OAAQ,CAACnvB,EAAK4qB,EAAIiL,UAAUj5B,MAC5BoD,MACAgJ,MAAO,GAEf,KAAEnD,cAAMrK,EAAO46B,WAAa,IAAIt2B,KAAI,SAAAslC,GAChC,IAAMxa,EAAMkK,EAAaa,aAAeyP,EAASxa,MAC3C5qB,EAAG,GAAAhE,OAAM4uB,EAAIkL,MAAMp3B,GAAE,KAAA1C,OAAI4uB,EAAIiL,UAAUn3B,IAC7C,MAAO,CACHywB,OAAQ,CAACnvB,EAAK4qB,EAAIiL,UAAUj5B,MAC5BoD,MACAgJ,MAAO,GAEf,MAEMw8B,EAAOp9B,OAAOD,KAAKy8B,GAAO9tB,OAAOhX,KAAI,SAAAE,GAKvC,OAJS9D,YAAA,CACLk8B,UAAWrxB,YAAS6wB,QAAQ53B,GAAKyhC,KAAK,CAAEgE,KAAMnO,IAAUoO,YACrDd,EAAM5kC,GAGjB,IAEM2lC,EAAWnqC,EAAOkD,GAAGknC,MAAM,KAC3BC,EAAkB9+B,YAAS6wB,QAAQ+N,EAAS,IAAItE,SAAS,cAAgB,MAAQt6B,YAAS6wB,QAAQ+N,EAAS,IAAItE,SAAS,cAExHyE,EAAY3B,EAAS4B,aAAaF,EAAiB7B,IACzD8B,EAAUnmC,QAAUA,EACpBmmC,EAAUE,WAAa,CAAEza,KAAM,CAAE0a,IAAK,EAAGnlC,OAAQ,GAAK9G,GAAI,CAAEisC,IAAK,EAAGnlC,OAAQnB,EAAQyD,SACpF0iC,EAAUI,QAAQV,EACtB,IAGAW,aAAap/B,YAAS29B,QAAQrD,SAAS,iBAAmB,eAAgB8C,EAASiC,KAIvF,CACJ,E,2DC9EMC,IAjBY9pC,aAAW,SAAAC,GAAK,MAAK,CACnC0uB,KAAM,CACFxI,UAAWlmB,EAAMG,QAAQ,IAE7B2pC,YAAa,CACTt9B,MAAO,KAEXoxB,UAAW,CACPnuB,OAAQ,IAEf,IAO4B,SAACvQ,GAQtBA,EANAN,UADJ,IACasa,EAMTha,EALAia,gBAAQ,IAAAD,GAAQA,EAEhBI,GAGApa,EAJAma,SAIAna,EAHAoa,SAEGvX,GACH7C,EAFAiE,QACOzF,YACPwB,EAAKvB,KACT4b,EAOIC,aAAeta,GANfua,EAAWF,EAAXE,YACAC,EAAgBH,EAAhBG,iBACAC,EAAYJ,EAAZI,aAEAC,GADQL,EAARxU,SACUwU,EAAVK,YACAC,EAAKN,EAALM,MAEEhb,EAAWuE,aAAmBrB,GACpC,OACIU,eAACuX,KAAU,CAAAzc,SAAA,CACN+b,GACGjV,uBAAaiV,EAAS,CAClBza,WACA+a,aACAF,mBACAC,eACAO,QAAS,WAEjBjc,cAACmc,KAAY,KACC,IAAbjB,GACGlb,cAACoc,KAAY,CACTjE,SAAoB,IAAVyD,EACVhb,SAAUA,EACVyb,KAAMb,EACNE,aAAcA,MAKlC,GAqBeowB,GAnBO,SAAC7qC,GAEnB,IAAMia,EAAWua,KAEjB,OACIz1B,cAAC03B,GAAKj2B,wBAAA,GACER,GAAK,IACT4d,QAAS,IACT6X,MAAO12B,cAAC+rC,GAAe,IACvB7wB,SAAUA,EACVG,QAASrb,cAACmpC,GAAmB,IAC7Brf,QAAS9pB,cAAC4rC,GAAoB,IAC9B9e,oBAAqB,CAAE6N,KAAM,WAAYr7B,SAEzCU,cAACgsC,GAAU,MAGvB,ECtFMC,GAAgB,YAQPC,GANW,CACtB/pC,KAAM8pC,GACN9hC,KAAMgiC,KACN1b,KAAMqb,I,WCDJM,GAAO,SAACnrC,GACV02B,aAA6B,OAAQ,CAAC,YAAa12B,GACnD,IAAMgvB,EAAkByF,aAAkBz0B,GAC1C,OACIjB,cAAC41B,KAAmB,CAACt0B,MAAO2uB,EAAgB3wB,SACxCU,cAAC61B,KAAQp0B,wBAAA,GAAKR,GAAWgvB,KAGrC,EAEAmc,GAAKzqC,aAAe,CAChBmE,OAAQ,CAAC,EACT+Y,QAAS,IAGEutB,U,oHCbTrjC,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAE3CsjC,GAAc,SAAHhtC,GAUV,IATHC,EAAQD,EAARC,SACAqB,EAAStB,EAATsB,UAEAmG,GADwBzH,EAAxBmD,QACQnD,EAARyH,UACAulB,EAAShtB,EAATgtB,UACAzrB,EAAQvB,EAARuB,SACAC,EAAMxB,EAANwB,OACAmtB,EAAI3uB,EAAJ2uB,KACG/sB,EAAKxB,YAAAJ,EAAAK,IAGFqB,EAASurC,aAAiBrrC,GAC1BsrC,EAAkBlrC,KAAIN,EAAQF,GACpC,IAAK0rC,EAAiB,OAAO,KAC7B,IAAMC,EAAW1lC,EAAS2lC,QAAQ7rC,EAAUyrB,GACtC4B,IAAoBD,IAAgC,oBAATA,EAAuBA,EAAKue,EAAiBlgB,GAAU,GAAA9qB,OAAMirC,EAAQ,KAAAjrC,OAAI8J,mBAAmBkhC,EAAgBtoC,IAAG,KAAA1C,OAAIysB,IAC9J0e,EAAqBhrC,aAAuBT,GAElD,OAAIgtB,EAEIjuB,cAACK,KAAI,CACDd,GAAI0uB,EACJttB,UAAWA,EACXwI,QAASJ,GAAgBzJ,SAExB8I,IAAMhC,aAAa9G,EAAQmC,YAAA,CACxBd,UAAWrB,EAAS2B,MAAMN,UAC1BI,OAAQwrC,EACRxlC,OAAQhG,EACRH,SAAUyrB,EACVvlB,YACG4lC,MAMZtkC,IAAMhC,aAAa9G,EAAQmC,YAAA,CAC9Bd,UAAU,GAADY,OAAKZ,EAAS,KAAAY,OAAIjC,EAAS2B,MAAMN,WAC1CI,OAAQwrC,EACRxlC,OAAQhG,EACRH,SAAUyrB,EACVvlB,YACG4lC,GAEX,EAyBAL,GAAY1qC,aAAe,CACvBa,QAAS,CAAC,EACVwrB,KAAM,OACNpsB,UAAU,GAICyqC,U,yBCnDAM,GA7BK,SAAA1rC,GAC8BA,EAAtCuB,QAAR,IAAqCsB,EAAIrE,YAAKwB,EAAKvB,IAC7CwB,EAAYC,cAClB,GAAIF,EAAM0B,MACN,MAAM,IAAI0K,MACN,mGAIR,OACIrN,cAAC4f,KAASne,YAAA,CACNkB,MAAOzB,EAAU,oBACjBmwB,YAAU,EACViR,WAAY,CACRM,aACI5iC,cAAC6iC,KAAc,CAAC/0B,SAAS,MAAKxO,SAC1BU,cAACmmC,KAAU,CAAChmC,MAAM,iBAI1B2D,GAGhB,EC3BMjC,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCy9B,KAAM,CACFpU,aAAcrpB,EAAMG,QAAQ,IAEnC,GAAG,CAAEC,KAAM,uBASGyqC,GANU,SAAHvtC,GAAmB,IAAbsD,EAAKtD,EAALsD,MAClBzB,EAAYC,cACZqB,EAAUX,KAChB,OAAO7B,cAAC0iC,KAAI,CAAC/hC,UAAW6B,EAAQg9B,KAAM78B,MAAOzB,EAAUyB,IAC3D,E,UCLMkqC,GAAuB,SAAC3K,EAAOR,GAAa,OAAKQ,EAAMp8B,QAAO,SAAAm1B,GAAI,OAAKyG,EAAcngB,MAAK,SAAAurB,GAAY,OAAIA,EAAa7oC,KAAOg3B,EAAKh3B,EAAE,GAAC,GAAE,EACxI8oC,GAAoB,SAAA9R,GAAI,SAAA15B,OAAO05B,EAAK94B,KAAI,EAkC/B6qC,GAhCS,SAAC/rC,GAAK,OAC5BuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACfU,cAAC2sC,GAAW,CAAC9rC,OAAO,IAAIyO,UAAQ,IAChCtP,cAAC4sC,GAAgB,CAAC/rC,OAAO,WAAW8B,MAAM,kCAAkC8M,cAAc,IAC1FzP,cAACwH,KAAc,CAAC3G,OAAO,UAAUwrB,UAAU,YAAY1pB,MAAM,8BAA6BrD,SACxFU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAEtChI,cAACwH,KAAc,CAAC3G,OAAO,gBAAgBwrB,UAAU,aAAa1pB,MAAM,oCAAmCrD,SACrGU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAEtChI,cAACqgC,GACC,CACAkB,iBAAe,EACf1gC,OAAO,UACP8B,MAAM,6CACN49B,iBAAkBsM,GAClBzM,oBAAqB,IACrBx4B,WAAYmlC,GAAkBztC,SAE9BU,cAACitC,KAAmB,CAACrsC,SAAS,cAEhCZ,cAACwxB,KAAmB,CAAC3wB,OAAO,eAAeuO,YAAY,EAAOid,UAAU,QAAQvmB,OAAQ,CAAE2rB,SAAU,SAAW9uB,MAAM,sCAAqCrD,SACxJU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE3ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,kBAAkBuO,YAAY,EAAOid,UAAU,QAAQvmB,OAAQ,CAAE2rB,SAAU,SAAW9uB,MAAM,yCAAwCrD,SAC9JU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE3ChI,cAACuH,KAAqB,CAAC1G,OAAO,cAAc8B,MAAM,mCAAmC0pB,UAAU,UAAUgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,SAClJ9gB,cAAC4sC,GAAgB,CAAC/rC,OAAO,UAAU8B,MAAM,mBAAmB8M,cAAc,OACnE,E,6DCrCLy9B,GAAkB,eAElBC,GAAgB,SAAC5nC,EAAKjE,EAAOkzB,EAAOtzB,GAAS,OAAKI,GAAgB,IAAI,EAEtE8rC,GAAmB,SAAnBA,EAAmB59B,GACrB,OAAKA,EACU7B,OAAOD,KAAK8B,GAAMvE,QAAO,SAACC,EAAK3F,GAC1C,IAI2D8nC,EAJrD/rC,EAAQkO,EAAKjK,GACnB,OAAIA,EAAI+nC,WAAW,KAAapiC,EAE5Bu9B,KAAQnnC,GACgB,kBAAbA,EAAM,IAAgC,OAAbA,EAAM,GACtCG,wBAAA,GACOyJ,GAAG,IAAAmiC,EAAA,GAAA74B,YAAA64B,EACL9nC,EAAMjE,EAAM+D,IAAI+nC,IAAiB54B,YAAA64B,EAAC,GAAD9rC,OAC9BgE,EAAG,OAAQjE,EAAM+D,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,KAACopC,IAG5C5rC,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMjE,IAIX,kBAAVA,GAAgC,OAAVA,EAC7BG,wBAAA,GACOyJ,GAAG,GAAAsJ,YAAA,GACLjP,EAAM6nC,EAAiB9rC,KAIhCG,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMjE,GAC5B,GAAG,CAAC,GAzBc,IA4BtB,EAaaisC,GAAoB,SAAC/Y,EAAOtzB,GAAS,OAAK,SAAC6pC,GACpD,IAAAyC,EAAAC,aAAqC1C,GAA9BrW,EAAM8Y,EAAA,GAAYE,GAALF,EAAA,GAAaA,EAAA//B,MAAA,IAC3BkgC,EAAYnZ,EAAMnvB,KAAI,SAAA+L,GAAM,OAAAA,EAAH7L,GAAa,IAE5C,IADoCuK,KAAQ69B,EAAWjZ,GACrB,MAAMrnB,MAAM,qCAkB9C,OAhBgBqgC,EAASroC,KAAI,SAAAmmC,GAazB,OAZehX,EAAMvpB,QAAO,SAACC,EAAGuwB,EAAkC/d,GAAW,IAAzCnY,EAAGk2B,EAAHl2B,IAAGqoC,EAAAnS,EAAEt4B,aAAK,IAAAyqC,EAAGT,GAAaS,EACpDC,EAAaX,GAAgBpV,KAAKvyB,GAClCjE,EAAQD,KAAImqC,EAAK,CAAC9tB,IACxB,GAAImwB,EAAY,CACZ,IACMC,GADmBxsC,EAAQA,EAAM6pC,MAAM,MAAQ,IAChB9lC,KAAI,SAAA41B,GAAI,OAAI93B,EAAMoC,EAAK01B,EAAMzG,EAAOtzB,EAAU,IACnF,OAAO4sC,EApBD,SAACvoC,EAAKxE,EAAQO,GAIhC,OAHAA,EAAM4oC,SAAQ,SAACjP,EAAMvd,GACbud,GAAM8S,KAAIhtC,EAAQwE,EAAIknC,QAAQS,GAAgB,IAAD3rC,OAAMmc,EAAK,MAAMud,EACtE,IACOl6B,CACX,CAeqCitC,CAAczoC,EAAK2F,EAAK4iC,GAAe5iC,CAChE,CACI,IAAM4iC,EAAc3qC,EAAMoC,EAAKjE,EAAOkzB,EAAOtzB,GAC7C,OAAO4sC,EA3BN,SAACvoC,EAAKxE,EAAQO,GAC3B,OAAOysC,KAAIhtC,EAAQwE,EAAKjE,EAC5B,CAyBqCsU,CAASrQ,EAAK2F,EAAK4iC,GAAe5iC,CAE/D,GAAG,CAAC,EAER,IAEe7F,IAAI+nC,GACvB,CAAC,EC1Dca,GAZK,SAACzZ,GACjB,IAAMtzB,EAAYC,cAGlB,MAAO,CACHsB,OAAQ8qC,GAAkB/Y,EAAOtzB,GACjCszB,QACAtzB,YAER,ECGe+sC,GAZK,SAACzZ,GACjB,IAAMtzB,EAAYC,cAGlB,MAAO,CACHsB,OFmEkD,SAACgnC,GAEvD,OAAOA,EAAQpkC,IAAI+nC,GACvB,EErEQ5Y,QACAtzB,YAER,ECRegtC,GAPO,SAAC3oC,EAAKjE,EAAOkzB,EAAOtzB,GACtC,OAAa,MAATI,EAAsBA,EACtBA,IAAUJ,EAAU,oBACpBI,IAAUJ,EAAU,qBACjBI,CACX,ECIe6sC,GAPI,SAAC5oC,EAAKjE,EAAOkzB,EAAOtzB,GACnC,OAAa,MAATI,EAAsBA,EACnBgL,YAASy6B,WAAWzlC,EAAO,KAAK0nC,QAAQoF,OACnD,ECDeC,GAJI,WAAgB,ECWnC,IAUeC,GAVI,SAAC/oC,EAAKjE,EAAOkzB,EAAOzzB,EAAQG,GAC3C,OAAQI,EAZZ,SAAqBitC,GACjB,IAAKA,EAAK,OAAO,EACjB,IACInnC,KAAKjE,MAAMorC,EACf,CAAE,MAAO5jC,GACL,OAAO,CACX,CACA,OAAO,CACX,CAKU6jC,CAAYltC,GACR8F,KAAKjE,MAAM7B,GACXA,EACJ,IACV,ECPe2sC,GCNK,SAACzZ,GACjB,MAAO,CACHia,aAAcC,GAAgBla,GAC9Bma,aAAcC,GAAgBpa,GAEtC,ECmBeA,GAvBD,CACV,CAAEjvB,IAAK,KAAMmvB,OAAQ,6BACrB,CAAEnvB,IAAK,OAAQmvB,OAAQ,+BACvB,CAAEnvB,IAAK,cAAemvB,OAAQ,sCAC9B,CAAEnvB,IAAK,YAAamvB,OAAQ,mCAAoCjyB,OAAQoyB,KAAe1xB,MAAOgrC,IAC9F,CAAE5oC,IAAK,YAAamvB,OAAQ,mCAAoCjyB,OAAQoyB,KAAe1xB,MAAOgrC,IAC9F,CAAE5oC,IAAK,UAAWmvB,OAAQ,iCAAkCjyB,OAAQkyB,KAAkBxxB,MAAO+qC,IAC7F,CAAE3oC,IAAK,OAAQmvB,OAAQ,+BAEvB,CAAEnvB,IAAK,4BAA6BmvB,OAAQ,CAAC,yCAA0C,kCACvF,CAAEnvB,IAAK,wBAAyBmvB,OAAQ,CAAC,0CAA2C,oCACpF,CAAEnvB,IAAK,sBAAuBmvB,OAAQ,CAAC,0CAA2C,kCAClF,CAAEnvB,IAAK,yBAA0BmvB,OAAQ,CAAC,oCAAqC,oCAC/E,CAAEnvB,IAAK,uBAAwBmvB,OAAQ,CAAC,oCAAqC,kCAC7E,CAAEnvB,IAAK,YAAamvB,OAAQ,CAAC,8BAA+B,oCAC5D,CAAEnvB,IAAK,UAAWmvB,OAAQ,CAAC,8BAA+B,kCAC1D,CAAEnvB,IAAK,kBAAmBmvB,OAAQ,CAAC,oCAAqC,qCACxE,CAAEnvB,IAAK,gBAAiBmvB,OAAQ,CAAC,oCAAqC,mCACtE,CAAEnvB,IAAK,qBAAsBmvB,OAAQ,CAAC,gCAAiC,gCACvE,CAAEnvB,IAAK,mBAAoBmvB,OAAQ,CAAC,gCAAiC,8BACrE,CAAEnvB,IAAK,OAAQmvB,OAAQ,6BAAUjyB,OAAQqyB,aAAc,QAAS,MAAO3xB,MAAOkrC,K,4BCnB5ExsC,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFgI,QAAS,QAEhB,GAAG,CAAEnM,KAAM,iBAaG0sC,GAVa,SAAHxvC,GAA2C,IAArCC,EAAQD,EAARC,SAAUqB,EAAStB,EAATsB,UAAcM,EAAKxB,YAAAJ,EAAAK,IAClD8C,EAAUX,KAChB,OACI7B,cAAA,OAAKW,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,GAAWrB,SAC/CmJ,WAASpD,IAAI/F,GAAU,SAAAmK,GAAK,OAAIrD,uBAAaqD,EAAKhI,YAAA,GAAOR,GAAQ,KAG9E,E,6FC4Ee6tC,GAvEY,SAAHzvC,GAAsD,IAAhDuB,EAAQvB,EAARuB,SAAmCK,GAAZ5B,EAAb6I,cAAoB7I,EAALc,MAAeV,YAAAJ,EAAAK,KAC1DiB,EAAoDM,EAApDN,UAAWI,EAAyCE,EAAzCF,OAAM+K,EAAmC7K,EAAjC0B,aAAK,IAAAmJ,EAAG,qBAAoBA,EACjDqL,EAASC,eACTlW,EAAYC,cACZ4tC,EAtBoB,WAC1B,IAAMC,EAAWC,cAcjB,OAZuB,SAACxoC,EAAMsR,EAASnX,GACnCouC,EAAS,CACLvoC,OACAsR,UACA3T,KAAM,CACFxD,WACAsuC,cAAe,SACfC,YAAa,iBAGzB,CAGJ,CAM+BC,GAC3B53B,EAA8BC,eAAaC,EAAA7R,YAAA2R,EAAA,GAApCG,EAAMD,EAAA,GAAIE,EAAOF,EAAA,GAAPE,QAEXy3B,EAAiBj9B,uBAAY,SAACtJ,GAChC,OAAO6O,EACH,CACIlR,KAAM,WACN7F,WACAmX,QAAS,CAAEu3B,MAAa,OAANvuC,QAAM,IAANA,OAAM,EAANA,EAAQkD,KAE9B,CACIiT,aAAc,cACdJ,UAAW,SAAAy4B,GACPp4B,EAAO,4BAA6B,OAAQ,CAAC,GAC7C43B,EAAmBS,KAAqBD,EAAU3uC,EACtD,EACAmW,UAAW,SAAA1S,GACP8S,EAAO,6BAA8B,UACzC,GAEZ,GAAG,CAACQ,EAAQ5W,IAEN0uC,EAAmBr9B,uBAAY,SAACtJ,GAClC,OAAO6O,EACH,CACIlR,KAAM,aACN7F,WACAmX,QAAS,CAAEu3B,MAAa,OAANvuC,QAAM,IAANA,OAAM,EAANA,EAAQkD,KAE9B,CACIiT,aAAc,cACdJ,UAAW,SAAAy4B,GACPp4B,EAAO,8BAA+B,OAAQ,CAAC,GAC/C43B,EAAmBS,KAAqBD,EAAU3uC,EACtD,EACAmW,UAAW,SAAA1S,GACP8S,EAAO,6BAA8B,UACzC,GAEZ,GAAG,CAACQ,EAAQ5W,IAEN2f,EAActO,uBAAY,SAACtJ,GAC7BA,EAAMC,kBACI,OAANhI,QAAM,IAANA,KAAQ2uC,SACRD,EAAiB3mC,GAGjBumC,EAAevmC,EAEvB,GAAG,CAACumC,EAAgBI,EAAkB1uC,IAEtC,OACIf,cAACgJ,KAAO,CAAChE,MAAO9D,EAAUyB,GAAQsG,WAAY,IAAI3J,SAC9CU,cAACkJ,KAAU,CACP,aAAW,WACXvI,UAAWA,EACX0I,KAAK,QACLlJ,MAAa,OAANY,QAAM,IAANA,KAAQ2uC,SAAW,UAAY,UACtCvmC,QAASuX,EACTvI,SAAUP,EAAQtY,SAEX,OAANyB,QAAM,IAANA,KAAQ2uC,SAAW1vC,cAAC2vC,KAAQ,IAAM3vC,cAAC4vC,KAAc,OAIlE,ECxEaC,GAAY,SAAC5uC,GACxB,IAAMuB,EAAUwyB,eACV9Z,EAAWua,aAAYjB,IACvBpZ,EAAW6yB,GAAYzZ,IAEvBtvB,EAAU+B,aAAW,CACzBjH,cAACo1B,KAAiB,CAACv0B,OAAO,OAAOyO,UAAQ,EAACpH,cAAe1F,EAAQ6yB,iBACjEr1B,cAACyE,KAAS,CAAC5D,OAAO,cAAcqH,cAAe1F,EAAQ6yB,iBACvDr1B,cAACqsC,GAAW,CAACxrC,OAAO,OAAOwrB,UAAU,YAAYyjB,OAAO,YAAY9hB,MAAM,EAAO9lB,cAAe1F,EAAQ6yB,eAAe/1B,SACrHU,cAACyE,KAAS,CAAC5D,OAAO,WAEpBb,cAACqsC,GAAW,CAACxrC,OAAO,aAAawrB,UAAU,aAAayjB,OAAO,kBAAkB5nC,cAAe1F,EAAQ6yB,eAAe/1B,SACrHU,cAACyE,KAAS,CAAC5D,OAAO,WAEpBb,cAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAQ4I,UAAU,EAAM31B,SAClEU,cAAC6G,KAAS,CAAChG,OAAO,OAAOwI,KAAK,YAEhCrJ,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,eACrD/vC,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,iBAGjDpa,EAAkB1wB,aAAmBC,GAE3C,OACElF,cAACosC,GAAI3qC,wBAAA,GACCR,GAAK,IACT6oB,QAAS9pB,cAACgb,KAAW,CAAC9V,QAASA,IAC/BgW,SAAUA,EACVE,SAAUA,EACVC,QAASrb,cAACgtC,GAAe,IAAI1tC,SAE7BkF,eAACwrC,KAAQ,CAAA1wC,SAAA,CACPU,cAAC2tB,GAA8B,CAACzlB,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQytC,cACjFta,EACDnxB,eAACqqC,GAAY,CAAC3mC,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQ0tC,YAAa5wC,SAAA,CAC3EU,cAAC8uC,GAAkB,IACnB9uC,cAACmwC,KAAsB,YAKjC,EAEAN,GAAUluC,aAAe,CACvB0a,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,QAGjB+uB,U,kJC5DFO,GAAc,SAACnvC,GACxB,IAAA4K,EAQI5K,EAPA6F,gBAAQ,IAAA+E,EAAG,GAAEA,EAAAC,EAOb7K,EANA0B,aAAK,IAAAmJ,EAAG,kBAAiBA,EAAAC,EAMzB9K,EALA+K,mBAAW,IAAAD,GAAOA,EAClBhL,EAIAE,EAJAF,OAAMkL,EAINhL,EAHAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EAAAC,EAGlBjL,EAFAkF,YAAI,IAAA+F,EAAG,CAAC,MAAKA,EACVpI,EAAIrE,YACPwB,EAAKvB,IAEHkB,EAAWuE,eACXgH,EAAWrF,EAAQ,GAAAvF,OAAMuF,EAAQ,eAAAvF,OAAgBX,EAAQ,WACzDwL,EAAcrL,GAAMU,wBAAA,GACnB4K,KAAWtL,EAAQoF,IAAK,IAC3BhE,KAAK,GAADZ,OAAKR,EAAOoB,KAAI,mDAAAZ,OAAe+K,YAASC,MAAMC,eAAeF,YAASG,mBAG9E,OACIzM,cAAC8f,KAAMre,wBAAA,CACHrB,UAAWC,KACXd,GACIwB,EACM,CACEoL,WACAnB,OAAQ3D,qBAAU,CACdxG,OAAQuG,KAAKC,UAAU+E,KAE3BM,MAAO,CAAEC,aAAcX,IAEzBG,EAEVxJ,MAAOA,EACPwG,QAASJ,IACLjF,GAAI,IAAAxE,SAEP6K,IAGb,EAEMC,GAAcpK,cAAC4M,KAAK,IAGpB7D,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAElC8D,kBAAKujC,I,mRCjCdvuC,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNwW,QAAS,CACL6P,WAAYrmB,EAAMG,QAAQ,IAEjC,GACD,CAAEC,KAAM,uBAGNkuC,GAAmB,SAACpvC,GACtB,IAxBmB5B,EAyBfyH,EAWA7F,EAXA6F,SACAxH,EAUA2B,EAVA3B,SAEAqB,GAQAM,EATAuB,QASAvB,EARAN,WACAI,EAOAE,EAPAF,OACAH,EAMAK,EANAL,SAAQ0vC,EAMRrvC,EALAgsB,wBAAgB,IAAAqjB,GAAOA,EACvBC,EAIAtvC,EAJAsvC,KAEArmB,GAEAjpB,EAHAK,MAGAL,EAFAipB,SACGpmB,EAAIrE,YACPwB,EAAKwQ,IACHjS,EAAQG,cACR6C,EAAUX,GAAUZ,GACpBuvC,EAAkB/nC,WAASC,QAAQpJ,GAAUwG,QAC/C,SAAA2qC,GAAK,OAAc,OAAVA,CAAc,IAE3B1+B,EAAgC1J,mBAAS,GAAE2J,EAAAnM,YAAAkM,EAAA,GAApC2+B,EAAQ1+B,EAAA,GAAE2+B,EAAW3+B,EAAA,GAQ5B,OACIxN,eAAA,MAAA/C,wBAAA,CAAKd,UAAWA,KAnDDtB,EAmDgDyE,GAlDnExE,SACSD,EAATsB,UACMtB,EAAN0B,OACQ1B,EAARuB,SACQvB,EAARyH,SACOzH,EAAP6qB,QACa7qB,EAAbuxC,cACavxC,EAAb+mB,cACS/mB,EAAT6B,UACI7B,EAAJkxC,KACO9wC,YAAAJ,EAAAK,MAwCiE,IAAAJ,SAAA,CAC/D8G,uBACGmqC,EACA,CACItjB,mBACAlqB,SAZQ,SAAC+F,EAAOxH,GACvB2rB,GACD0jB,EAAYrvC,EAEpB,EASgBA,MAAOovC,GAEXF,GAGJxwC,cAAC6wC,KAAO,IACR7wC,cAAA,OAAKW,UAAW6B,EAAQ+V,QAAQjZ,SAC3BmJ,WAASpD,IAAImrC,GAAiB,SAACM,EAAKpzB,GAAK,OACtCozB,GAAOpnC,yBAAeonC,GAClB7jB,EACIjtB,cAAC+wC,IAAK,CACFC,OAAK,EACLpxC,KAAMqxC,aACFC,aAAeJ,EAAKpzB,EAAOle,EAAM2xC,MAErChhC,OAAQ,kBACJ/J,uBAAa0qC,EAAK,CACd70B,QAAS,UACTrb,WACAG,SACA+F,YACF,IAGV4pC,IAAahzB,EACbtX,uBAAa0qC,EAAK,CACd70B,QAAS,UACTrb,WACAG,SACA+F,aAEJ,KACJ,IAAI,SAtCYojB,EA2CxC,EAEAmmB,GAAiB1uC,aAAe,CAC5B4uC,KAAMvwC,cAACoxC,KAAoB,KAGhBf,UCjGAjzB,I,SAAAA,GARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,gbAGpD,E,0CCLai0B,GAA6B30B,aAAGC,QAAAC,aAAA,+XAoBhC00B,GAA+B50B,aAAG60B,QAAA30B,aAAA,iY,iPCjBlC40B,GAA4B,SAAC5+B,GACtC,OAAe,OAAPA,QAAO,IAAPA,KAAS7O,GAAM,CAAEmjB,QAAS,CAAEnjB,GAAW,OAAP6O,QAAO,IAAPA,OAAO,EAAPA,EAAS7O,UAAS8G,CAC9D,EAEa4mC,GAAiC,WAAmB,IACvDvqB,GAD4Ctc,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,IAC7BzF,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAEzC,OADkB8B,QAAQqhB,EAAQze,QACb,CAAEye,gBAAYrc,CACvC,EAEa6mC,GAA8B,WAAmB,IACpD7D,GADyCjjC,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,IAC9BzF,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAErC,OADc8B,QAAQgoC,EAAIplC,QACT,CAAEolC,YAAQhjC,CAC/B,EAEa8mC,GAA4B,SAAC/+B,EAASqM,GAE/C,OADkBrP,KAAQgD,EAASqM,GAEvB,OAAPrM,QAAO,IAAPA,KAAS7O,GACN,CAAEmjB,QAAS,CAAEnjB,GAAW,OAAP6O,QAAO,IAAPA,OAAO,EAAPA,EAAS7O,KAChB,OAARkb,QAAQ,IAARA,KAAUlb,GACN,CAAE6tC,YAAY,QACd/mC,OACRA,CACV,EAEagnC,GAAiC,WAAkC,IAAjCj/B,EAAOhI,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAIqU,EAAQrU,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAC9Dsc,EAAU4qB,KAAWl/B,EAASqM,GAAU9Z,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IACzD6tC,EAAaE,KAAW7yB,EAAUrM,GAASzN,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAGlE,OAF8B8B,QAAQqhB,EAAQze,SAAW5C,QAAQ+rC,EAAWnpC,QAE3C,CAC7Bye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,EAC7C+mC,WAAY/rC,QAAQ+rC,EAAWnpC,QAAUmpC,OAAa/mC,QACtDA,CACR,EAQaqiC,GAAmB,SAAA59B,GAC5B,OAAKA,EAEO/N,wBAAA,GACL+N,GAAI,IACPrN,KAAMqN,EAAK4a,QAAO,0CAAA7oB,OAAeiO,EAAKrN,MAASqN,EAAKrN,KACpD8vC,OAAQziC,EAAKyiC,QAAUziC,EAAKyiC,OAAO5sC,KAAI,SAAC41B,GAAI,OAAAx5B,wBAAA,GAAWw5B,GAAI,IAAE94B,KAAM84B,EAAK7Q,QAAO,0CAAA7oB,OAAe05B,EAAK94B,MAAS84B,EAAK94B,MAAI,IACrH+vC,UAAW1iC,EAAKyiC,QAAUziC,EAAKyiC,OAAO5sC,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,IACxDkuC,WAAY3iC,EAAK2iC,YAAc3iC,EAAK2iC,WAAW9sC,KAAI,SAAC41B,GAAI,OAAAx5B,wBAAA,GAAWw5B,GAAI,IAAE94B,KAAM84B,EAAK7Q,QAAO,0CAAA7oB,OAAe05B,EAAK94B,MAAS84B,EAAK94B,MAAI,IACjIiwC,cAAe5iC,EAAK2iC,YAAc3iC,EAAK2iC,WAAW9sC,KAAI,SAAA+L,GAAK,OAAAA,EAAFnN,EAAW,IACpE2pB,iBAAkBpe,EAAKoe,kBAAgBnsB,wBAAA,GAAS+N,EAAKoe,kBAAgB,IAAEzrB,KAAMqN,EAAKoe,iBAAiBxD,QAAO,0CAAA7oB,OAAeiO,EAAKoe,iBAAiBzrB,MAASqN,EAAKoe,iBAAiBzrB,OAC9KkwC,UAAW7iC,EAAK0sB,QAAU1sB,EAAK0sB,OAAO72B,KAAI,SAAAo2B,GAAK,OAAAA,EAAFx3B,EAAW,IACxDquC,mBAAoB9iC,EAAK+iC,iBAAmB/iC,EAAK+iC,gBAAgBltC,KAAI,SAAAq4B,GAAK,OAAAA,EAAFz5B,EAAW,MAXrE,IAetB,EACauuC,GAAgB,SAAHC,GACbA,EAATC,UACWD,EAAXE,YACSF,EAATG,UACOH,EAAProB,QACIqoB,EAAJhsC,KACMgsC,EAANR,OACSQ,EAATP,UACUO,EAAVN,WACaM,EAAbL,cACgBK,EAAhB7kB,iBACQ6kB,EAAR/C,SACe+C,EAAfF,gBACkBE,EAAlBH,mBACMG,EAANvW,OACSuW,EAATJ,UACiB,OAAA5yC,YAAAgzC,EAAA/yC,GAAqB,EC3E7BmzC,GAAoBj2B,aAAGC,QAAAC,aAAA,gSAQ9By0B,IAGS,YAACuB,GACZ,IAAQ7uC,EAAa6uC,EAAb7uC,GACAiuC,EADaY,EAATtjC,KACJ0iC,UAER,OAAOa,KAAcz5B,QAAQu5B,GAAmB,CAC5CvD,MAAO,CAAErrC,MACTiuC,cACD9kC,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,E,wCC6FK/oC,GAAcpK,cAACozC,GAAU,IAWhBC,GAhHW,SAACpyC,GAOnBA,EALA6F,SAF8B,IAADwsC,EAAAC,EAAAC,EAEhB1nC,EAKb7K,EAJA0B,aAAK,IAAAmJ,EAAG,wBAAuBA,EAC/B/K,EAGAE,EAHAF,OAAMkL,EAGNhL,EAFAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EACfnI,EAAIrE,YACPwB,EAAKvB,IACTqS,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GACpBkP,EAA8B7Y,oBAAS,GAAM8Y,EAAAtb,YAAAqb,EAAA,GAAtCtJ,EAAOuJ,EAAA,GAAEsyB,EAAUtyB,EAAA,GACpB6tB,EAAWC,cACX33B,EAAUC,eACVJ,EAASC,eAETlW,GADWiE,eACChE,eAEZ0yB,EAAazhB,uBAAY,SAACtJ,IAlBZ,SAAAA,GAASA,EAAMC,iBAAkB,CAmBjDA,CAAgBD,GAChB+O,GAAQ,EAEZ,GAAG,CAACA,IAEEhP,EAAcuJ,uBAAY,WAC5ByF,GAAQ,EACZ,GAAG,CAACA,IAEE67B,EAAethC,uBAAY,SAAAtJ,GAAU,IAAD6qC,EACtC3E,EAAS4E,gBACTH,GAAW,GAEXI,GAAO,CAAE5vC,GAAIlD,EAAO+yC,WAAW7vC,GAAIuL,KAAM,CAAEvL,GAAU,OAANlD,QAAM,IAANA,GAAkB,QAAZ4yC,EAAN5yC,EAAQ+yC,kBAAU,IAAAH,OAAZ,EAANA,EAAoB1vC,GAAIiuC,UAAW,CAACnxC,EAAOkD,OACrFmJ,MAAK,SAAAmiC,GACFp4B,EAAO,+BAAgC,CAAE+N,YAAa,CAAEjN,YAAa,KACrEX,GACJ,IACC47B,OAAM,SAAA7uC,GACH8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,CAAE/L,KAAM,YAClG6Q,GACJ,IACCy8B,SAAQ,WACL/E,EAASgF,gBACTP,GAAW,GACX57B,GAAQ,EACZ,GACR,GAAG,CAACg8B,GAAQ9yC,EAAQiuC,EAAUyE,EAAY57B,IAE1C,IAAK9W,EAAQ,OAAO,KAEpB,IAAMoX,IAAapX,EAAOkD,IAAMlD,EAAO+yC,YAAc/yC,EAAO+yC,WAAW7vC,IACjEgwC,EAAiBtxC,GAASzB,EAAUyB,EAAO,CAAEnB,EAAGmB,IACtD,OACI6B,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC8f,KAAMre,wBAAA,CAEH0H,QAAS0qB,EACT1zB,MAAOyX,EAAU,UAAY,UAC7B,aAAYq8B,EACZ97B,SAAUA,GAAYP,EACtBjV,MAAOsxC,GACHnwC,GAAI,IAAAxE,SAEP6K,KAEL3F,eAAC4a,KAAM,CACHxW,KAAMA,EACNY,QAASX,EACT,kBAAgB,oBAChB,mBAAiB,sBAAqBvJ,SAAA,CAEtCU,cAACqf,KAAW,CAACpb,GAAG,oBAAmB3E,SAC9B4B,EAAU,+BAAgC,CAAEgzC,UAAWnzC,EAAOoB,KAAMgyC,eAAiC,QAAnBb,EAAEvyC,EAAO+yC,kBAAU,IAAAR,OAAA,EAAjBA,EAAmBnxC,SAE5GqC,eAACkb,KAAa,CAAApgB,SAAA,CACVU,cAAC2f,KAAiB,CAAC1b,GAAG,sBAAqB3E,SACtC4B,EAAU,iCAAkC,CAAEgzC,UAAWnzC,EAAOoB,KAAMgyC,eAAiC,QAAnBZ,EAAExyC,EAAO+yC,kBAAU,IAAAP,OAAA,EAAjBA,EAAmBpxC,SAE9GnC,cAAC2f,KAAiB,CAAArgB,SACb4B,EAAU,kCAAmC,CAAEgzC,UAAWnzC,EAAOoB,KAAMgyC,eAAiC,QAAnBX,EAAEzyC,EAAO+yC,kBAAU,IAAAN,OAAA,EAAjBA,EAAmBrxC,YAGnHqC,eAACqb,KAAa,CAAAvgB,SAAA,CACVU,cAACo0C,KAAS,CACNj8B,SAAUP,EACVzO,QAASN,EAAYvJ,SAEpB4B,EAAU,mBAAoB,CAAEM,EAAG,aAExCxB,cAACo0C,KAAS,CACNj8B,SAAUP,EACVzO,QAASuqC,EACTvzC,MAAM,UACNk0C,WAAS,EAAA/0C,SACR20C,YAOzB,E,qBClGeK,GAjBa,SAACrzC,GAAK,OAC9BuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACbU,cAAC2sC,GAAW,CAAC9rC,OAAO,IAAIyO,UAAQ,IAChCtP,cAAC4sC,GAAgB,CAAC/rC,OAAO,WAAW8B,MAAM,sCAAsC8M,cAAc,IAC9FzP,cAACwxB,KAAmB,CAAC3wB,OAAO,eAAeuO,YAAY,EAAOid,UAAU,QAAQvmB,OAAQ,CAAE2rB,SAAU,aAAe9uB,MAAM,0CAAyCrD,SAC9JU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,kBAAkBuO,YAAY,EAAOid,UAAU,QAAQvmB,OAAQ,CAAE2rB,SAAU,aAAe9uB,MAAM,6CAA4CrD,SACpKU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACuH,KAAqB,CAAC1G,OAAO,cAAc8B,MAAM,uCAAuC0pB,UAAU,UAAUgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,SACtJ9gB,cAAC4sC,GAAgB,CAAC/rC,OAAO,UAAU8B,MAAM,mBAAmB8M,cAAc,OACrE,E,gFCUE8kC,I,OAjBoB,SAACtzC,GAClC,IAAQL,EAAqBK,EAArBL,SAAUG,EAAWE,EAAXF,OACZqpB,EAAgB,OAANrpB,QAAM,IAANA,OAAM,EAANA,EAAQqpB,QAExB,OACE5lB,eAACyD,KAAUxG,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAClBiqB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAACw0C,KAAoB,IAC5DjrB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAACy0C,KAAoB,IAC5DlrB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC00C,KAAoB,IAC5DnrB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC4L,KAAqB,IAC7D2d,KAAYI,IAAI,SAAU/oB,KAAcwpB,GAAWpqB,cAAC20C,KAAsB,IAC1EprB,KAAYI,IAAI,UAAW/oB,IAAawpB,GAAWpqB,cAACid,KAAuB,IAC3EsM,KAAYI,IAAI,UAAW/oB,IAAawpB,GAAWpqB,cAAC4a,KAAsB,OAGjF,GCLe4Z,GAnBD,CACV,CAAEjvB,IAAK,KAAMmvB,OAAQ,iCACrB,CAAEnvB,IAAK,OAAQmvB,OAAQ,mCACvB,CAAEnvB,IAAK,cAAemvB,OAAQ,0CAC9B,CAAEnvB,IAAK,YAAamvB,OAAQ,uCAAwCjyB,OAAQoyB,KAAe1xB,MAAOgrC,IAClG,CAAE5oC,IAAK,YAAamvB,OAAQ,uCAAwCjyB,OAAQoyB,KAAe1xB,MAAOgrC,IAClG,CAAE5oC,IAAK,UAAWmvB,OAAQ,qCAAsCjyB,OAAQkyB,KAAkBxxB,MAAO+qC,IACjG,CAAE3oC,IAAK,YAAamvB,OAAQ,uCAAwCjyB,OAAQmyC,KAAezxC,MAAOmrC,IAClG,CAAE/oC,IAAK,QAASmvB,OAAQ,mCAAoCjyB,OAAQmyC,KAAezxC,MAAOmrC,IAC1F,CAAE/oC,IAAK,qBAAsBmvB,OAAQ,gDAAiDjyB,OAAQmyC,KAAezxC,MAAOmrC,IACpH,CAAE/oC,IAAK,qBAAsBmvB,OAAQ,CAAC,oCAAqC,gCAC3E,CAAEnvB,IAAK,mBAAoBmvB,OAAQ,CAAC,oCAAqC,8BACzE,CAAEnvB,IAAK,2BAA4BmvB,OAAQ,CAAC,0CAA2C,qCACvF,CAAEnvB,IAAK,yBAA0BmvB,OAAQ,CAAC,0CAA2C,mCACrF,CAAEnvB,IAAK,qBAAsBmvB,OAAQ,CAAC,oCAAqC,gCAC3E,CAAEnvB,IAAK,mBAAoBmvB,OAAQ,CAAC,oCAAqC,8BACzE,CAAEnvB,IAAK,OAAQmvB,OAAQ,6BAAUjyB,OAAQqyB,aAAc,YAAa,MAAO3xB,MAAOkrC,KCDzEwG,GAAgB,SAAC5zC,GAC1B,IAAMuB,EAAUwyB,eACV9Z,EAAWua,aAAYjB,IACvBpZ,EAAW6yB,GAAYzZ,IAEvBtvB,EAAU+B,aAAW,CACvBjH,cAACo1B,KAAiB,CAACv0B,OAAO,OAAOi0C,OAAO,OAAOxlC,UAAQ,EAACpH,cAAe1F,EAAQ6yB,iBAC/Er1B,cAACyE,KAAS,CAAC5D,OAAO,cAAcqH,cAAe1F,EAAQ6yB,iBACvDr1B,cAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAQ4I,UAAU,EAAM31B,SAChEU,cAAC6G,KAAS,CAAChG,OAAO,OAAOwI,KAAK,YAElCrJ,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,eACrD/vC,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,iBAGnDpa,EAAkB1wB,aAAmBC,GAE3C,OACIlF,cAACosC,GAAI3qC,wBAAA,GACGR,GAAK,IACT6oB,QAAS9pB,cAACgb,KAAW,CAAC9V,QAASA,IAC/BgW,SAAUA,EACVE,SAAUA,EACVC,QAASrb,cAACs0C,GAAmB,IAAIh1C,SAEjCkF,eAACwrC,KAAQ,CAAA1wC,SAAA,CACJq2B,EACDnxB,eAACqqC,GAAY,CAAC3mC,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQ0tC,YAAa5wC,SAAA,CACzEU,cAAC8uC,GAAkB,IACnB9uC,cAACu0C,GAA0B,YAK/C,EAEAM,GAAclzC,aAAe,CACzB0a,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,QAKnB+zB,UCxBAE,GA5BK,SAAC9zC,GACjB,IAAMgvB,EAAkBC,aAAkBjvB,GAE1C,OACIjB,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC3CU,cAACowB,KAAmB,CAAC9uB,MAAO2uB,EAAgB3wB,SACxCU,cAAC6pB,GAAQpoB,YAAA,GAAKR,OAI9B,E,mBCZMY,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFiI,MAAOxM,EAAMG,QAAQ,KAE5B,IAuBc8yC,GArBQ,SAAC/zC,GACpB,IAAMuB,EAAUX,KAEhB,OACI2C,eAACoqB,KAAgBntB,wBAAA,GACTR,GAAK,IACTN,UAAW6B,EAAQ8D,KACnBlG,UAAU,MAAKd,SAAA,CAEfU,cAACyE,KAAS,CAAC5D,OAAO,SAClBb,cAACyE,KAAS,CAAC5D,OAAO,gBAClBb,cAACkvB,KAAc,CAACruB,OAAO,cAAcwrB,UAAU,UAAU1pB,MAAM,uCAAuCqrB,MAAM,EAAM1uB,SAC9GU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACk1C,KAAa,CAACr0C,OAAO,UAGlC,E,gECzBMs0C,GAAa,SAACl0C,GAChB,IAAA4K,EAOI5K,EANA6F,gBAAQ,IAAA+E,EAAG,GAAEA,EAAAI,EAMbhL,EALAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EAAAH,EAKlB7K,EAJA0B,aAAK,IAAAmJ,EAAG,iBAAgBA,EACxB/K,EAGAE,EAHAF,OAAMgL,EAGN9K,EAFA+K,mBAAW,IAAAD,GAAOA,EACfjI,EAAIrE,YACPwB,EAAKvB,IACHkB,EAAWuE,eACjB,OACInF,cAAC8f,KAAMre,wBAAA,CACHrB,UAAWC,KACXd,GAAIyG,mBACA,iBAAO,CACHmG,SAAUpL,EAAM,GAAAQ,OACPgJ,aACDzD,GAAQ,IAAAvF,OAAQX,GAChBG,EAAOkD,IACV,SACC,GACNyI,MAAO,CAAEC,aAAcX,GAC1B,GACD,CAAClF,EAAU/F,EAAQH,EAAUoL,IAEjCrJ,MAAOA,EACPwG,QAASJ,IACLjF,GAAI,IAAAxE,SAEP6K,IAGb,EAEMC,GAAcpK,cAAC8tB,KAAa,IAE5B/kB,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAqBlCqsC,GAXQvoC,eACnBsoC,IACA,SAACl0C,EAAOo0C,GAAS,OACZp0C,EAAMF,QAAUs0C,EAAUt0C,OACrBE,EAAMF,OAAOkD,KAAOoxC,EAAUt0C,OAAOkD,GACrChD,EAAMF,QAAUs0C,EAAUt0C,SAChCE,EAAM6F,WAAauuC,EAAUvuC,UAC7B7F,EAAM1B,KAAO81C,EAAU91C,IACvB0B,EAAMkX,WAAak9B,EAAUl9B,QAAQ,I,oFCrDvCm9B,GAAkBltC,IAAMwB,YAAW,SAAC3I,EAAO4I,GAAG,OAAK7J,cAACK,KAAIoB,YAAA,CAACqI,SAAUD,GAAS5I,GAAS,IAErFs0C,GAAoB3rC,sBAAW,SAAC3I,EAAO4I,GAC3C,IAAQ9I,EAAoBE,EAApBF,OACAoB,GADe1C,YAAKwB,EAAKvB,IACXqB,EAAdoB,MAAMgvC,EAAQpwC,EAARowC,IAEd,OACEnxC,cAAC0iC,KAAI,CACH//B,MAAOR,EACP/B,UAAWk1C,GACXzrC,IAAKA,EACLtK,GAAI4xC,EACJhnC,KAAMnK,cAACw1C,KAAa,CAAC/qC,SAAS,UAC9BgrC,WAAS,GAGf,IAEMC,GAAmB9rC,sBAAW,SAAC3I,EAAO4I,GAC1C,IAAQ9I,EAAoBE,EAApBF,OACAoB,GADe1C,YAAKwB,EAAKwQ,IACX1Q,EAAdoB,MAAMgvC,EAAQpwC,EAARowC,IAEd,OACEnxC,cAAC0iC,KAAI,CACH//B,MAAOR,EACP/B,UAAWk1C,GACXzrC,IAAKA,EACLtK,GAAI4xC,EACJhnC,KAAMnK,cAAC21C,KAAW,CAAClrC,SAAS,UAC5BgrC,WAAS,GAKf,IAEMG,GAAmB,SAAC30C,GACxB,IAAQF,EAAoBE,EAApBF,OACAoB,GADe1C,YAAKwB,EAAKyR,IACX3R,EAAdoB,MAAMgvC,EAAQpwC,EAARowC,IAEd,OACEnxC,cAAC0iC,KAAI,CACH//B,MAAOR,EACP/B,UAAU,IACVy1C,KAAM1E,EAENhnC,KAAMnK,cAAC81C,KAAY,CAACrrC,SAAS,UAC7BgrC,WAAS,GAGf,EAoBeM,GAjBqB,SAAC90C,GACnC,IAAQF,EAAWE,EAAXF,OACR,IAAKA,EAAQ,OAAO,KAEpB,OAAQA,EAAO0F,MACb,IAAK,YAAa,OAAQzG,cAACu1C,GAAiB9zC,YAAA,GAAKR,IACjD,IAAK,WAAY,OAAQjB,cAAC01C,GAAgBj0C,YAAA,GAAKR,IAC/C,IAAK,WAAY,OAAQjB,cAAC41C,GAAgBn0C,YAAA,GAAKR,IAGnD,E,wCCoBe6tC,GAnEY,SAAHzvC,GAAsD,IAAhDuB,EAAQvB,EAARuB,SAAmCK,GAAZ5B,EAAb6I,cAAoB7I,EAALc,MAAeV,YAAAJ,EAAAK,KAC1DiB,EAAoDM,EAApDN,UAAWI,EAAyCE,EAAzCF,OAAM+K,EAAmC7K,EAAjC0B,aAAK,IAAAmJ,EAAG,qBAAoBA,EACjDqL,EAASC,eACT23B,EArBoB,WAC1B,IAAMC,EAAWC,cAcjB,OAZuB,SAACxoC,EAAMsR,EAASnX,GACnCouC,EAAS,CACLvoC,OACAsR,UACA3T,KAAM,CACFxD,WACAsuC,cAAe,SACfC,YAAa,iBAGzB,CAGJ,CAK+BC,GAC3B53B,EAA8BC,eAAaC,EAAA7R,YAAA2R,EAAA,GAApCG,EAAMD,EAAA,GAAIE,EAAOF,EAAA,GAAPE,QAEXy3B,EAAiBj9B,uBAAY,SAACtJ,GAChC,OAAO6O,EACH,CACIlR,KAAM,WACN7F,WACAmX,QAAS,CAAEu3B,MAAa,OAANvuC,QAAM,IAANA,OAAM,EAANA,EAAQkD,KAE9B,CACIiT,aAAc,cACdJ,UAAW,SAAAy4B,GACPp4B,EAAO,4BAA6B,OAAQ,CAAC,GAC7C43B,EAAmBS,KAAqBD,EAAU3uC,EACtD,EACAmW,UAAW,SAAA1S,GACP8S,EAAO,6BAA8B,UACzC,GAEZ,GAAG,CAACQ,EAAQ5W,IAEN0uC,EAAmBr9B,uBAAY,SAACtJ,GAClC,OAAO6O,EACH,CACIlR,KAAM,aACN7F,WACAmX,QAAS,CAAEu3B,MAAa,OAANvuC,QAAM,IAANA,OAAM,EAANA,EAAQkD,KAE9B,CACIiT,aAAc,cACdJ,UAAW,SAAAy4B,GACPp4B,EAAO,8BAA+B,OAAQ,CAAC,GAC/C43B,EAAmBS,KAAqBD,EAAU3uC,EACtD,EACAmW,UAAW,SAAA1S,GACP8S,EAAO,6BAA8B,UACzC,GAEZ,GAAG,CAACQ,EAAQ5W,IAEN2f,EAActO,uBAAY,SAACtJ,GAC7BA,EAAMC,kBACI,OAANhI,QAAM,IAANA,KAAQ2uC,SACRD,EAAiB3mC,GAGjBumC,EAAevmC,EAEvB,GAAG,CAACumC,EAAgBI,EAAkB1uC,IAEtC,OACIf,cAAC8f,KAAM,CACHnd,MAAOA,EACP,aAAW,WACXhC,UAAWA,EACXwI,QAASuX,EACTvI,SAAUP,EAAQtY,SAEX,OAANyB,QAAM,IAANA,KAAQ2uC,SAAW1vC,cAAC2vC,KAAQ,IAAM3vC,cAAC4vC,KAAc,KAG9D,EC5EMoG,GAAuB,SAAH32C,GAAgD,IAA1CyH,EAAQzH,EAARyH,SAAU0I,EAAInQ,EAAJmQ,KAAMia,EAAOpqB,EAAPoqB,QAAS5N,EAASxc,EAATwc,UAErD,OACIrX,eAACuX,KAAU,CAAAzc,SAAA,CACPU,cAACi2C,GAAc,CAACnvC,SAAUA,EAAU/F,OAAQyO,EAAM5O,SAAS,cAC3DZ,cAACm1C,GAAU,CAACruC,SAAUA,EAAU/F,OAAQyO,IACvCqM,GAAa7b,cAACowC,GAAW,CAACtpC,SAAUA,EAAU/F,OAAQyO,IACtDia,GAAWzpB,cAACwL,KAAU,CAAC1E,SAAUA,EAAU/F,OAAQyO,MAGhE,EAEM0mC,GAA0B,SAACnvC,EAAQslB,EAAWtrB,EAAQH,GAAQ,UAAAW,OAASX,EAAQ,KAAAW,OAAIR,EAAOkD,GAAE,KAAA1C,OAAI8qB,EAAS,KAAA9qB,OAAIwF,EAAO9C,GAAE,UAmC7GkyC,GAhCc,SAACl1C,GAE1B,OACIjB,cAAC+0C,GAAItzC,wBAAA,GACGR,GAAK,IACT6oB,QAAS9pB,cAACg2C,GAAoB,IAC9BjsB,MAAO/pB,cAACg1C,GAAc,IACtBhwC,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IAAU3B,SAEnDkF,eAACoqB,KAAgB,CAAAtvB,SAAA,CACbU,cAACs1B,KAAgB,CAACz0B,OAAO,qBAAqBwrB,UAAU,oBAAoB2B,KAAMkoB,GAAwB52C,SACtGU,cAACgH,KAAS,CAACnG,OAAO,WAEtBb,cAACs1B,KAAgB,CAACz0B,OAAO,QAAQmtB,MAAM,EAAM1uB,SACzCU,cAACu1C,GAAiB,MAEtBv1C,cAACs1B,KAAgB,CAACz0B,OAAO,eAAewrB,UAAU,aAAa1pB,MAAM,0CAA0CqrB,KAAK,OAAM1uB,SACtHU,cAACgH,KAAS,CAACnG,OAAO,WAEtBb,cAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAQ1pB,MAAM,oCAAoCqrB,KAAK,OAAOooB,KAAM,GAAG92C,SAC/GU,cAACgH,KAAS,CAACnG,OAAO,WAEtBb,cAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAO/sB,SAC/CU,cAAC6G,KAAS,CAAChG,OAAO,gBAKtC,E,kEClCew1C,GAbS,SAACp1C,GACrB,IAAMC,EAAYC,cACZ6nB,EAAestB,eAErB,OACI9xC,eAAC0kB,KAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,KAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,KAAkB3nB,YAAA,GAAKunB,IACxBhpB,cAACZ,KAAc,CAAAE,SAAE4B,EAAU,wBAGvC,E,yXCXaq1C,GAAa,SAACt1C,GACvB,IACI6oB,EASA7oB,EATA6oB,QACAC,EAQA9oB,EARA8oB,MACAC,EAOA/oB,EAPA+oB,YACA1qB,EAMA2B,EANA3B,SAEAqB,GAIAM,EALAuB,QAKAvB,EAJAN,WACW4qB,EAGXtqB,EAHAb,UACA4E,EAEA/D,EAFA+D,MACGlB,EAAIrE,YACPwB,EAAKvB,IAEH8C,EAAUX,GAAUZ,GAE1Bu1C,EAUIF,aAAiBr1C,GATjB6F,EAAQ0vC,EAAR1vC,SACAmjB,EAAYusB,EAAZvsB,aACAP,EAAO8sB,EAAP9sB,QACA3oB,EAAMy1C,EAANz1C,OACA6V,EAAQ4/B,EAAR5/B,SACAhW,EAAQ41C,EAAR51C,SACA61C,EAAID,EAAJC,KACAC,EAAMF,EAANE,OACAxsB,EAAOssB,EAAPtsB,QAGJ,OACI1lB,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,cAAerC,EAAQ8D,KAAM3F,IAC/C4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAE3BU,cAACwqB,KAAc,CACXxlB,MAAOA,EACPjE,OAAQA,EACRkpB,aAAcA,IAEjBD,EACAF,GACG1jB,uBAAa0jB,EAAOroB,YAAA,CAChBqF,WACAlG,WACA8oB,WAEGI,EAAQ7oB,QAEnBuD,eAAA,OACI7D,UAAWkE,IAAWrC,EAAQ2T,KAAI3B,YAAA,GAC7BhS,EAAQqoB,WAAaf,IACvBxqB,SAAA,CAEHU,cAACurB,EAAO,CAAC5qB,UAAW6B,EAAQm0C,KAAKr3C,SAC5B8G,uBAAaqC,WAASijB,KAAKpsB,GAAW,CACnCwH,WACA/F,SACA6V,SACuC,qBAA5BtX,EAAS2B,MAAM2V,SAChBA,EACAtX,EAAS2B,MAAM2V,SACzBhW,WACA61C,KACmC,qBAAxBn3C,EAAS2B,MAAMw1C,KAChBA,EACAn3C,EAAS2B,MAAMw1C,KACzBC,SACAxsB,cAGPH,GACG3jB,uBAAa2jB,EAAO,CAChBjjB,WACA/F,SACAH,WACA61C,KACmC,qBAAxBn3C,EAAS2B,MAAMw1C,KAChBA,EACAn3C,EAAS2B,MAAMw1C,KACzBC,SACAxsB,kBAKxB,EAwBAqsB,GAAW50C,aAAe,CACtBa,QAAS,CAAC,EACVpC,UAAWysB,KACX7C,YAAahqB,cAAC42C,GAAwB,KAG1C,IAAM/0C,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNuE,KAAM,CAAC,EACP6P,KAAM,CACF7H,QAAS,QAEbuc,UAASrW,YAAA,GACJzS,EAAM2gB,YAAYC,GAAG,MAAQ,CAC1BsF,UAAW,QAGnB0uB,KAAM,CACFrf,KAAM,YAEb,GACD,CAAEn1B,KAAM,aAGNooB,GAAoB,SAAHlrB,KACnByH,SAAezH,EACf4qB,aAAmB5qB,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACd0rB,QAAc1rB,EACd2gB,QAAc3gB,EACd2rB,OAAa3rB,EACbuY,QAAcvY,EACdqM,SAAerM,EACfG,MAAYH,EACZ0X,UAAgB1X,EAChBw3C,aAAmBx3C,EACnByX,UAAgBzX,EAChBy3C,aAAmBz3C,EACnB4D,QAAc5D,EACdkqB,YAAkBlqB,EAClBo3C,KAAWp3C,EACXq3C,OAAar3C,EACb03C,aAAmB13C,EACnB23C,aAAmB33C,EACnB43C,aAAmB53C,EACnBujB,UAAgBvjB,EAChB63C,aACO,OAAAz3C,YAAAJ,EAAAoS,GACA,ECvHI0lC,GArCO,SAACl2C,GACnB02B,aAA6B,SAAU,CAAC,YAAa12B,GACrD,IAAMgvB,EAAkBmnB,aAAoBn2C,GACtCstB,EACFvuB,cAACq3C,KAAqB,CAAC/1C,MAAO2uB,EAAgB3wB,SAC1CU,cAACu2C,GAAU90C,wBAAA,GAAKR,GAAWgvB,MAGnC,OAAOhvB,EAAML,SAETZ,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC1CivB,IAGLA,CAER,ECvBM3U,GAAY,CACd,CAAE3V,GAAI,UAAW9B,KAAM,yCACvB,CAAE8B,GAAI,cAAe9B,KAAM,6CAC3B,CAAE8B,GAAI,QAAS9B,KAAM,wCAWVm1C,GARiB,SAACr2C,GAC7B,OACIjB,cAAC0xB,KAAsBjwB,wBAAA,GAAKR,GAAK,IAAEkwB,QAASvX,KAEpD,E,iGCJM/X,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCw0B,KAAM,CACFjoB,QAAS,QAEbnM,KAAM,CACF2oB,WAAY,IAEhBqmB,IAAK,CACDrmB,WAAY,GACZ9C,SAAU,EACV/lB,SAAU,KAEjB,IAMKs1C,GAAkB,SAAAv1C,GAEpB,OADeA,EAAQ,CAAC,KAAM,YAAaA,EAAO,QAAQsJ,KAAK,KAAOtJ,CAE1E,EACMw1C,GAAqB,SAAAz2C,GAEvB,OADcA,EAASA,EAAOoqC,MAAM,KAAK,GAAKpqC,CAElD,EAEM02C,GAAe,CAACh5B,gBAChBD,GAAe,CAACC,eAAYC,aAAU,MACtCg5B,GAAc,CAACj5B,gBA0Bfk5B,GAA+B,SAAC12C,GAClC,IAAQgD,EAAOhD,EAAPgD,GACFsyB,EAAOqhB,eACPC,EAAqBvd,aAAY,SAAA5tB,GAAK,OAAIrL,KAAIqL,EAAM,iCAAkC,IAEtF26B,EAAej1B,uBAAY,SAAC9Q,GAC9B,IAAM0kB,EAAY6xB,EAAmBv2C,GACjC0kB,GACAuQ,EAAKuhB,OAAO,GAADv2C,OAAI0C,EAAE,SAAS+hB,EAAU7jB,KAE5C,GAAG,CAAC8B,EAAI4zC,IAER,OAEI73C,cAACwH,KAAc/F,wBAAA,GAAKR,GAAK,IAAE8B,SAAUskC,EAAa/nC,SAC9CU,cAAC2H,KAAiB,MAI9B,EAGeowC,GA9Ca,SAAC92C,GACzB,IAAMuB,EAAUX,KAEhB,OACI7B,cAACg4C,KAAUv2C,wBAAA,GAAKR,GAAK,IAAA3B,SACjBkF,eAACyzC,KAAkB,CAACz1C,QAAS,CAAE+zB,KAAM/zB,EAAQ+zB,MAAOj3B,SAAA,CAChDU,cAACoxB,KAAS,CAACvwB,OAAO,OAAOsB,KAAK,oBAAoBnB,OAAO,qCAAqC2B,MAAM,iCAAiCS,SAAUq0C,GAAc7nC,aAAa,aAC1K5P,cAACk4C,KAAgB,CAACvoC,cAAenN,EAAQ2uC,IAAK1iC,WAAS,EAAAnP,SAClD,SAAAD,GAAWA,EAAR84C,SAAoD,IAA1CC,EAAc/4C,EAAd+4C,eAAgBC,EAASh5C,EAATg5C,UAAcv0C,EAAIrE,YAAAJ,EAAAK,IAC5C,OAAO04C,EACqB,cAAxBA,EAAe3xC,KACXzG,cAAC23C,GAA4Bl2C,wBAAA,GAAKqC,GAAI,IAAEjD,OAAQw3C,EAAU,OAAQhsB,UAAU,YAAY5pB,OAAQ+0C,GAAoBr0C,MAAOo0C,GAAiBn0C,SAAUs0C,GAAa/0C,MAAM,yCAEzK3C,cAAC4f,KAASne,wBAAA,GAAKqC,GAAI,IAAEjD,OAAQw3C,EAAU,OAAQj1C,SAAUs0C,GAAa/0C,MAAM,mCAE9E,IACV,IAEJ3C,cAAC4f,KAAS,CAAC/e,OAAO,OAAO8B,MAAM,iCAAiCS,SAAUob,GAAc7O,cAAenN,EAAQL,YAI/H,ECtDaqc,GAAe,CAACC,eAAYC,aAAU,MACtC45B,GAAoB,CANL,WAAH,IAAI9lC,EAAO1H,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,kCAAiC,OAAK,SAAConC,EAAS7yC,GAAqB,IAAjBua,EAASva,EAATua,UACvF,GAAK4uB,MAAMC,QAAQ7uB,IAAcA,EAAUka,SAAS,cAAiB0U,MAAMC,QAAQyJ,IAAcA,EAAUvpC,OAAS,GAAI,OAAO6J,CAEnI,CAAE,CAGgC+lC,ICF5B12C,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCsE,OAAQ,CACJxD,OAAQ,WAEZ2oC,IAAK,CACD3oC,OAAQ,UAEZ2K,IAAK,CACD3K,OAAQ,QAEf,GACG,CAAEV,KAAM,aA8BGq2C,GA1BA,SAACv3C,GAAW,IAADw3C,EACtBp1C,EAA4BpC,EAApBf,eAAO,IAAAmD,EAAG,MAAKA,EACjBb,EAAUX,KAEhB,OACI7B,cAAA,OACIW,UAAWkE,KAAU4zC,EAAA,GAAAjkC,YAAAikC,EAChBj2C,EAAQgL,IAAkB,QAAZtN,GAAiBsU,YAAAikC,EAC/Bj2C,EAAQgpC,IAAkB,QAAZtrC,GAAiBsU,YAAAikC,EAC/Bj2C,EAAQ6D,OAAqB,WAAZnG,GAAoBu4C,KAMtD,EC7BMC,GAAyB,SAAAz3C,GAC3B,OACIuD,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACdU,cAAC24C,KAAU,CAACC,eAAe,EAAMzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,SACpE5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACpJ9qB,cAACw4C,GAAM,CAACt4C,QAAQ,WAG1B,EA4Ba24C,GA1BS,SAAC53C,GACrB,OACIjB,cAACm3C,GAAM11C,wBAAA,GAAKR,GAAK,IAAA3B,SACbkF,eAACs0C,KAAU,CAACxa,QAASt+B,cAAC04C,GAAsB,IAAIp5C,SAAA,CAC5CU,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAACs3C,GAAuB,CAACz2C,OAAO,YAAY4N,WAAS,IACrDzO,cAAC+3C,GAAmB,CAACl3C,OAAO,QAAQ4N,WAAS,IAC7CzO,cAACwxB,KAAmB,CAAC3wB,OAAO,kBAAkBwrB,UAAU,aAAa1pB,MAAM,0CAA0C8L,WAAS,EAAAnP,SAC1HU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ1pB,MAAM,oCAAoC8L,WAAS,EAACrL,SAAUk1C,GAAkBh5C,SACtIU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ1pB,MAAM,oCAAoCmD,OAAQ,CAAE2rB,SAAU,aAAehjB,WAAS,EAAAnP,SAC5IU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,cAK7D,E,uDCbegxC,GAdS,SAAC/3C,GACrB,IAAM+nB,EAAeiwB,eACf/3C,EAAYC,cAElB,OACIqD,eAAC0kB,KAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,KAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,KAAkB3nB,YAAA,GAAKunB,IACxBhpB,cAAC6oB,GAAoBpnB,wBAAA,GAAKunB,GAAkB/nB,IAC5CjB,cAACZ,KAAc,CAAAE,SAAE4B,EAAU,sBAGvC,E,0FCaeg4C,GAtBY,SAAH9nC,GAA6C,IAT9C/R,EASOsB,EAASyQ,EAATzQ,UAAW4oB,EAAWnY,EAAXmY,YAAgBzlB,EAAIrE,YAAA2R,EAAAK,IACzD0nC,EAAuCF,aAAen1C,GAA9CgD,EAAQqyC,EAARryC,SAAU/F,EAAMo4C,EAANp4C,OAAQH,EAAQu4C,EAARv4C,SAC1B,OACI4D,eAACuX,KAAUta,wBAAA,CAACd,UAAWA,KAZRtB,EAYyCyE,GAX5DgD,SACSzH,EAATsB,UACOtB,EAAPoqB,QACOpqB,EAAPqqB,QACQrqB,EAARuB,SACOnB,YAAAJ,EAAAK,MAM0D,IAAAJ,SAAA,EAC7C,OAAXiqB,QAAW,IAAXA,OAAW,EAAXA,EAAaI,IAAI,UAAW/oB,KAAaZ,cAACqpB,GAAa,CAACviB,SAAUA,EAAU/F,OAAQA,KACzE,OAAXwoB,QAAW,IAAXA,OAAW,EAAXA,EAAaI,IAAI,SAAU/oB,KAAaZ,cAAC4pB,KAAY,CAAC9iB,SAAUA,EAAU/F,OAAQA,EAAQmW,aAAa,aAAaD,UAAU,OAG3I,E,icCXamiC,GAAW,SAACn4C,GAAW,IAADw3C,EAE3B3uB,EAWA7oB,EAXA6oB,QACAC,EAUA9oB,EAVA8oB,MACAC,EASA/oB,EATA+oB,YACA1qB,EAQA2B,EARA3B,SAEAqB,GAMAM,EAPAuB,QAOAvB,EANAN,WACW4qB,EAKXtqB,EALAb,UACA4E,EAIA/D,EAJA+D,MACAiS,EAGAhW,EAHAgW,SACAC,EAEAjW,EAFAiW,aACGpT,EAAIrE,YACPwB,EAAKvB,IAEH8C,EAAUX,GAAUZ,GAE1Bk4C,EAYIF,aAAeh4C,GAXf6F,EAAQqyC,EAARryC,SACAmjB,EAAYkvB,EAAZlvB,aACAP,EAAOyvB,EAAPzvB,QACAqB,EAAOouB,EAAPpuB,QACAlP,EAASs9B,EAATt9B,UACA9a,EAAMo4C,EAANp4C,OACA6V,EAAQuiC,EAARviC,SACAhW,EAAQu4C,EAARv4C,SACA61C,EAAI0C,EAAJ1C,KACAC,EAAMyC,EAANzC,OACAxsB,EAAOivB,EAAPjvB,QAEEE,EAAgB,OAANrpB,QAAM,IAANA,OAAM,EAANA,EAAQqpB,QAExB,IAAKrpB,EAAQ,OAAO,KACpB,IAAKzB,EAAU,OAAO,KAEtB,IAAM+qB,EAAeD,EACjBpqB,cAACk5C,GAAkB,CAAC3vB,YAAatoB,EAAMsoB,cACpB,qBAAZO,GAA2BiB,EAClC/qB,cAACg3B,KAAc,IAEflN,EAGJ,OACItlB,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,YAAarC,EAAQ8D,KAAM3F,IAC7C4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAE3BU,cAACwqB,KAAc,CACXxlB,MAAOA,EACPjE,OAAQA,EACRkpB,aAAcA,IAGlBzlB,eAAA,OAAK7D,UAAW6B,EAAQ2T,KAAK7W,SAAA,CACxB0qB,EACAK,GACGjkB,uBAAaikB,EAAY5oB,YAAA,CACrBqF,WACA0I,KAAMzO,EACNgqB,UACAlP,YACA6N,UACA9oB,YAEGypB,EAAappB,QAExBjB,cAACurB,EAAO,CACJ5qB,UAAWkE,IAAWrC,EAAQ+V,SAAOkgC,EAAA,GAAAjkC,YAAAikC,EAChCj2C,EAAQqoB,WAAaR,GAAY7V,YAAAikC,EACjCj2C,EAAQ4nB,QAAUA,GAAOquB,IAC3Bn5C,SAEFyB,GAAU0H,WAASpD,IAAI/F,GAAU,SAACi3B,EAAM7Y,GAAK,OAC1CtX,uBAAamwB,EAAM,CACfhxB,IAAKmY,EACL9c,WACAkG,WACA/F,SACAmpB,UACAtT,SACmC,qBAAxB2f,EAAKt1B,MAAM2V,SACZA,EACA2f,EAAKt1B,MAAM2V,SACrB6/B,KAC+B,qBAApBlgB,EAAKt1B,MAAMw1C,KACZA,EACAlgB,EAAKt1B,MAAMw1C,KACrBC,SACAz/B,WACAC,gBACF,MAGT6S,GACG3hB,IAAMhC,aAAa2jB,EAAO,CACtBjjB,WACA/F,SACAH,WACAspB,UACAusB,KACmC,qBAAxBn3C,EAAS2B,MAAMw1C,KAChBA,EACAn3C,EAAS2B,MAAMw1C,KACzBC,iBAKxB,EA6BA0C,GAASz3C,aAAe,CACpBa,QAAS,CAAC,EACVpC,UAAWquB,KACXzE,YAAahqB,cAACq5C,GAAsB,KAGxC,IAAMx3C,GAAYC,YACd,CACIwE,KAAM,CACFgI,QAAS,QAEb8b,QAAS,CACLM,QAAS,GACTC,cAAe,QAEnBxU,KAAM,CACF7H,QAAS,OACTuZ,cAAe,SACfG,SAAU,GAEd6C,UAAW,CACP5C,UAAW,OAEf1P,QAAS,CACL+e,KAAM,YAEVvN,MAAO,CACHe,WAAY,KAGpB,CAAE3oB,KAAM,WAGNooB,GAAoB,SAAHlrB,KACnByH,SAAezH,EACf4qB,aAAmB5qB,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACd0rB,QAAc1rB,EACd2gB,QAAc3gB,EACd4E,GAAS5E,EACTi6C,YAAkBj6C,EAClB2rB,OAAa3rB,EACbuY,QAAcvY,EACdqM,SAAerM,EACfG,MAAYH,EACZ0X,UAAgB1X,EAChBw3C,aAAmBx3C,EACnByX,UAAgBzX,EAChBy3C,aAAmBz3C,EACnB4D,QAAc5D,EACdkqB,YAAkBlqB,EAClB4rB,QAAc5rB,EACdo3C,KAAWp3C,EACXq3C,OAAar3C,EACb03C,aAAmB13C,EACnB23C,aAAmB33C,EACnB43C,aAAmB53C,EACnBk6C,eAAqBl6C,EACrBujB,UAAgBvjB,EAChB63C,aACO,OAAAz3C,YAAAJ,EAAAoS,GACA,ECjKI+nC,GAxCF,SAACv4C,GACV02B,aAA6B,OAAQ,CAAC,YAAa12B,GACnD,IAAMgvB,EAAkBwpB,aAAkBx4C,GACpCstB,EACFvuB,cAAC05C,KAAmB,CAACp4C,MAAO2uB,EAAgB3wB,SACxCU,cAACo5C,GAAQ33C,wBAAA,GAAKR,GAAWgvB,MAGjC,OAAOhvB,EAAML,SAETZ,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC1CivB,IAGLA,CAER,E,iMCwDMnkB,GAAcpK,cAACqW,KAAU,IAEzBxU,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCmU,aAAc,CACV/V,MAAO4B,EAAMyE,QAAQnC,MAAM8R,KAC3B,UAAW,CACP5P,gBAAiB6P,iBAAMrU,EAAMyE,QAAQnC,MAAM8R,KAAM,KAEjD,uBAAwB,CACpB5P,gBAAiB,iBAIhC,GAAG,CAAEpE,KAAM,mBAGGw3C,GA5Fc,SAAA14C,GACzB,IAAA6K,EAaI7K,EAZA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAE1BnL,GAUAM,EAXAuB,QAWAvB,EAVAN,WAASsL,EAUThL,EATAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EAElBlL,GAOAE,EARAkI,QAQAlI,EAPAF,QACA+F,EAMA7F,EANA6F,SAAQ6P,EAMR1V,EALA2V,SAAUC,OAAU,IAAAF,EAAG,OAAMA,EAC7BG,EAIA7V,EAJA6V,UACAC,EAGA9V,EAHA8V,UAEGjT,GACH7C,EAFAgW,SAEAhW,EAFUiW,aACHzX,YACPwB,EAAKvB,KAEH8C,EAAUX,GAAUZ,GACpBkW,EAASC,eACTR,EAAWS,eACXC,EAAUC,eACV3W,EAAWuE,aAAmBlE,GAEpCuW,EAAoCC,aAChC,CACIhR,KAAM,SACN7F,WACAmX,QAAS,CAAE9T,GAAIlD,EAAOkD,GAAI+T,aAAcjX,IAE5C,CACImW,aAAc,WACdJ,eAAyB/L,IAAd+L,EACLA,EACA,WACEK,EAAO,0BAA2B,OAAQ,CAAEc,YAAa,IAAK,GAC9DrB,EAASC,EAAY/P,GAAQ,IAAAvF,OAAQX,IACrC0W,GACJ,EACJP,eAAyBhM,IAAdgM,EACLA,EACA,SAAA1S,GACE8S,EACqB,kBAAV9S,EACDA,EACAA,EAAMmO,SAAW,6BACvB,UACA,CACIhR,EACqB,kBAAV6C,EACDA,EACAA,GAASA,EAAMmO,QACXnO,EAAMmO,aACNzH,IAGtBuM,GACJ,IACNI,EAAA7R,YAAA2R,EAAA,GAlCCM,EAAYJ,EAAA,GAAIE,EAAOF,EAAA,GAAPE,QAoCvB,OACI5X,cAAC8f,KAAMre,wBAAA,CACH0H,QAAS2O,EACTK,SAAUP,EACVjV,MAAOA,EACPhC,UAAWkE,IACP,mBACArC,EAAQ0T,aACRvV,IAGAmD,GAAI,IAAAxE,SAEP6K,IAHG,SAMhB,E,wLCjEMyvC,GAA0B,SAAA34C,GAC5B,IAAA6K,EAgBI7K,EAfA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAAAyK,EAe1BtV,EAdAuV,oBAAY,IAAAD,EAAG,yBAAwBA,EAAAE,EAcvCxV,EAbAyV,sBAAc,IAAAD,EAAG,2BAA0BA,EAG3C9V,GAUAM,EAZA44C,OAYA54C,EAXAuB,QAWAvB,EAVAN,WAASsL,EAUThL,EATAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EAElBlL,GAOAE,EARAkI,QAQAlI,EAPAF,QACA+F,EAMA7F,EANA6F,SAAQ6P,EAMR1V,EALA2V,SAAUC,OAAU,IAAAF,EAAG,OAAMA,EAC7BG,EAIA7V,EAJA6V,UACAC,EAGA9V,EAHA8V,UACUG,GAEVjW,EAFAgW,SAEAhW,EAFUiW,cACPpT,EAAIrE,YACPwB,EAAKvB,IAEHwB,EAAYC,cACZqB,EAAUX,GAAUZ,GACpBL,EAAWuE,aAAmBlE,GAC9BkW,EAASC,eACTR,EAAWS,eACXC,EAAUC,eAEhBxF,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GAepBwF,GAJoBpF,uBAAY,SAAAzH,GAC5BA,EAAE5B,iBACN,GAAG,IAEiC0O,aAChC,CACIhR,KAAM,SACN7F,WACAmX,QAAS,CAAE9T,GAAIlD,EAAOkD,GAAI+T,aAAcjX,IAE5C,CACImW,aAAcA,EACdJ,eAAyB/L,IAAd+L,EACLA,EACA,WACEK,EAAO,0BAA2B,OAAQ,CAAEc,YAAa,GAAsB,aAAjBf,GAC9DN,EAASC,EAAY/P,GAAQ,IAAAvF,OAAQX,IACrC0W,GACJ,EACJP,eAAyBhM,IAAdgM,EACLA,EACA,SAAA1S,GACE8S,EACqB,kBAAV9S,EACDA,EACAA,EAAMmO,SAAW,6BACvB,UACA,CACIhR,EACqB,kBAAV6C,EACDA,EACAA,GAASA,EAAMmO,QACXnO,EAAMmO,aACNzH,IAGtBuM,GACJ,KACNI,EAAA7R,YAAA2R,EAAA,GAlCCM,EAAYJ,EAAA,GAAIE,EAAOF,EAAA,GAAPE,QAoCvB,OACIpT,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC8f,KAAMre,wBAAA,CACH0H,QApDa,SAAAwB,GACrBkN,GAAQ,GACRlN,EAAE5B,iBACN,EAkDYoP,SAAUP,EACVjV,MAAOA,EACPhC,UAAWkE,IACP,mBACArC,EAAQ0T,aACRvV,IAGAmD,GAAI,IAAAxE,SAEP6K,IAHG,UAKRnK,cAACqY,KAAO,CACJC,OAAQ1P,EACRgP,QAASA,EACT5S,MAAOwR,EACP+B,QAAS7B,EACT8B,iBAAkB,CACdrW,KAAMjB,EAAU,aAADK,OAAcX,EAAQ,mBAAmB,CACpDqX,YAAa,EACbzW,EAAGiX,KAAWC,SACVxX,EAAU,aAADK,OAAcX,EAAQ,SAAS,CACpCqX,YAAa,EACbzW,EAAGiX,KAAWE,YAAY/X,MAE9B,KAGRqD,GAAIlD,EAAOoB,MAEfyW,UAAWd,EACXtO,QA/Ec,SAAAmB,GACtBkN,GAAQ,GACRlN,EAAE5B,iBACN,MAgFJ,EACMqB,GAAcpK,cAACqW,KAAU,IAEzBxU,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCmU,aAAc,CACV/V,MAAO4B,EAAMyE,QAAQnC,MAAM8R,KAC3B,UAAW,CACP5P,gBAAiB6P,iBAAMrU,EAAMyE,QAAQnC,MAAM8R,KAAM,KAEjD,uBAAwB,CACpB5P,gBAAiB,iBAI7BuzC,eAAgB,CACZ35C,MAAO4B,EAAMyE,QAAQ21B,QAAQhmB,MAEjC4jC,eAAgB,CACZ55C,MAAO4B,EAAMyE,QAAQnC,MAAM8R,KAC3B,UAAW,CACP5P,gBAAiB6P,iBAAMrU,EAAMyE,QAAQnC,MAAM8R,KAAM,KAEjD,uBAAwB,CACpB5P,gBAAiB,iBAI7ByzC,iBAAkB,CACdnuB,aAAc,SAErB,GAAG,CAAE1pB,KAAM,mBAEZy3C,GAAwBj4C,aAAe,CACnCs4C,aAAc,WAGHL,U,qICzGAtjC,IAnBMD,KAtCA,SAAApV,GAcbA,EAZA0B,MAYA1B,EAXAuB,QAWAvB,EAVAN,UAUAM,EATAkJ,KASAlJ,EARAkI,QALJ,IAMIpI,EAOAE,EAPAF,OACA+F,EAMA7F,EANA6F,SAIAmQ,GAEAhW,EALA2V,SAKA3V,EAJA6V,UAIA7V,EAHA8V,UAGA9V,EAFAgW,UAAQD,EAER/V,EAFUiW,oBAAY,IAAAF,EAAG,WAAUA,EAChClT,EAAIrE,YACPwB,EAAKvB,IACHi7B,EAAOuf,aAAgBhjC,EAAcD,GAE3C,MAD4B,aAAT0jB,EAEf36B,cAAC25C,GAAoBl4C,YAAA,CAACV,OAAQA,GAAY+C,IAEtC9D,cAAC45C,GAAuBn4C,YAAA,CAC5BqF,SAAUA,EACVoQ,aAAcyjB,EACd55B,OAAQA,GAEJ+C,GAYZ,GC3BMq2C,GAAuB,SAAH96C,GAA0D,IAApDmQ,EAAInQ,EAAJmQ,KAAgB1I,GAAFzH,EAARuB,SAAkBvB,EAARyH,UAAUikB,EAAO1rB,EAAP0rB,QAASlP,EAASxc,EAATwc,UAE/D,OACIrX,eAACuX,KAAU,CAAAzc,SAAA,CACPU,cAACm1C,GAAU,CAACruC,SAAUA,EAAU/F,OAAQyO,IACvCqM,GAAa7b,cAACowC,GAAW,CAACtpC,SAAUA,EAAU/F,OAAQyO,IACtDub,GAAW/qB,cAAC+J,KAAU,CAACjD,SAAUA,EAAU/F,OAAQyO,MAGhE,EAGM4qC,GAAuB,SAAAn5C,GACzB,OACIuD,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACdU,cAAC24C,KAAU,CAACC,eAAe,EAAMzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,SACpE5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACpJ9qB,cAACw4C,GAAM,CAACt4C,QAAQ,QAChBF,cAACsW,GAAY,CAACY,aAAa,kBAGvC,EA+BemjC,GA7BO,SAACp5C,GAEnB,OACIjB,cAACw5C,GAAI/3C,wBAAA,GACGR,GAAK,IACT6oB,QAAS9pB,cAACm6C,GAAoB,IAC9Bn1C,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IAAU3B,SAEnDkF,eAACs0C,KAAU,CAACxa,QAASt+B,cAACo6C,GAAoB,IAAI96C,SAAA,CAC1CU,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAACs3C,GAAuB,CAACz2C,OAAO,YAAY4N,WAAS,IACrDzO,cAAC+3C,GAAmB,CAACl3C,OAAO,QAAQ4N,WAAS,IAC7CzO,cAACwxB,KAAmB,CAAC3wB,OAAO,kBAAkBwrB,UAAU,aAAa1pB,MAAM,0CAA0C8L,WAAS,EAAAnP,SAC1HU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ1pB,MAAM,oCAAoC8L,WAAS,EAACrL,SAAUk1C,GAAkBh5C,SACtIU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ1pB,MAAM,oCAAoCmD,OAAQ,CAAE2rB,SAAU,aAAehjB,WAAS,EAAAnP,SAC5IU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,cAK7D,E,iCCjEasyC,GAA6B,6BCuB3BC,GAnBM,SAAC35C,GAAiC,IAAvBgP,EAAY9E,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,EACtCkkC,EAAWC,cAEXr1B,EAAY0gB,aAAY,SAAA5tB,GAAK,IAAA8tC,EAAA,OAAS,OAAL9tC,QAAK,IAALA,GAAgB,QAAX8tC,EAAL9tC,EAAOsZ,iBAAS,IAAAw0B,OAAX,EAALA,EAAkB5gC,SAAS,GAAE6gC,KAE9DC,GAA+B,OAAT9gC,QAAS,IAATA,OAAS,EAATA,EAAWiU,WAAuB,OAAZje,QAAY,IAAZA,OAAY,EAAZA,EAAcie,SAAWje,EAAegK,EAEpF+gC,EAAe,SAAC5iC,GAClB,IAAM6iC,EAAmC,oBAAZ7iC,EAA0BA,EAAQ2iC,GAAsB3iC,EACrFi3B,EDXuB,SAACp1B,GAAS,MAAM,CAC3CnT,KAAM6zC,GACNviC,QAAS,CAAE6B,aACd,CCQgBihC,CAAgBD,GAC7B,EAMA,OAJA5kC,qBAAU,WACD4D,GAAW+gC,EAAa/qC,EACjC,GAAG,IAEI,CAAC8qC,EAAoBC,EAChC,ECwBaG,GAAmC,SAACC,GAC7C,IAAMC,EAAU,CAAC,EAWjB,OATAD,EAAmB7Q,SAAQ,SAAA+Q,GACvB,IAAMC,EAd0B,SAACD,GACrC,IAAMD,EAAUC,EAAkBD,SAAW,CAAC,EAM9C,OALiCrtC,OAAOD,KAAKstC,GAAS/vC,QAAO,SAACC,EAAKiwC,GAC/D,IAAMC,EAAsBJ,EAAQG,GAC9BE,EAAmC55C,wBAAA,GAAQ25C,GAAmB,IAAEE,EAAGL,EAAkBh3C,KAC3F,OAAAxC,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAG2mC,EAAaE,GACnC,GAAG,CAAC,EAER,CAMyCE,CAAgCN,GACjEttC,OAAOD,KAAKwtC,GAA0BhR,SAAQ,SAAAiR,GAC1C,IAAMK,EAAsCR,EAAQG,IAAe,GAC7DM,EAAqCP,EAAyBC,GAC9DO,EAAyCD,EAAkC,GAAAl6C,OAAA6J,aAAOowC,GAAmC,CAAEC,IAAsCD,EACnKzN,KAAIiN,EAAS,CAACG,GAAaO,EAC/B,GACJ,IACOV,CACX,EAYaW,GAAsB,SAAC3wC,GAChC,IAAM2O,EAAQxW,iBAAM6H,GAGpB,OAdgB,SAAC2O,EAAOlQ,GACxB,GAAIkQ,EAAMlQ,IAAkC,kBAAjBkQ,EAAMlQ,GAC7B,IACIkQ,EAAMlQ,GAASrC,KAAKjE,MAAMwW,EAAMlQ,GACpC,CAAE,MAAOmhC,UACEjxB,EAAMlQ,EACjB,CAER,CAKImyC,CAAYjiC,EAAO,aACZA,CACX,EAoKekiC,GA7JgB,SAAC56C,GAC5B02B,aAA6B,YAAa,CAAC,WAAY,WAAY,MAAO12B,GAC1E,IACI6F,EAKA7F,EALA6F,SACA7C,EAIAhD,EAJAgD,GACiB63C,EAGjB76C,EAHA86C,gBACAhlC,EAEA9V,EAFA8V,UAASilC,EAET/6C,EADA8kC,gBAAQ,IAAAiW,EAAG,IAAGA,EAEZp7C,EAAWuE,aAAmBlE,GAC9BC,EAAYC,cACZgW,EAASC,eACTR,EAAWS,eACXC,EAAUC,eACV2S,EAAU2M,eACVnrB,EAAWC,cACXqU,EAAUC,cAEhBg8B,EAAoDC,GAAkBt7C,EAvB9C,SAAC8K,GACzB,IAAMywC,EAAiBR,GAAoBjwC,EAASV,QACpD,OAAqB,OAAdmxC,QAAc,IAAdA,KAAgBviC,UAAYuiC,EAAeviC,UAAY,CAAC,CACnE,CAoBoFwiC,CAAoB1wC,IAAU2wC,EAAAx2C,YAAAo2C,EAAA,GAAvGK,EAAkBD,EAAA,GAAEE,EAAqBF,EAAA,GAIhDG,EAA0DC,aAAU77C,EAAUqD,EAAI,CAC9EgN,OAAQyrC,KACR3lC,UACa,OAATA,QAAS,IAATA,IACC,WACGI,EAAO,oCAAqC,CACxC1Q,KAAM,YAEVmQ,EAAS,OAAQ9P,GACjBwQ,GACJ,EACJ7C,QAAS1O,QAAQ9B,KAXPlD,EAAMy7C,EAAZhtC,KAAcnL,EAAKm4C,EAALn4C,MAAOuT,EAAO4kC,EAAP5kC,QAASoT,EAAMwxB,EAANxxB,OAAQC,EAAOuxB,EAAPvxB,QAc9CjV,qBAAU,WAAO,IAAD2mC,EACNC,GAAyC,OAAvBd,QAAuB,IAAvBA,OAAuB,EAAvBA,EAAyBjuB,WAA6B,OAAlByuB,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBzuB,SAEhF,GAAU,OAAN9sB,QAAM,IAANA,GAAiB,QAAX47C,EAAN57C,EAAQ6Y,iBAAS,IAAA+iC,GAAjBA,EAAmB7oB,SAAS,YAAc8oB,EAAiB,CAAC,IAADC,EAAAC,EAErDjvB,EAAgB,OAAN9sB,QAAM,IAANA,GAAiB,QAAX87C,EAAN97C,EAAQmxC,iBAAS,IAAA2K,GAAjBA,EAAmB/oB,SAAS8oB,GAAmBA,EAAkC,QAAnBE,EAAG/7C,EAAOmxC,iBAAS,IAAA4K,OAAA,EAAhBA,EAAmB,GAEpG98B,EAAQe,KAAK,CACT/V,OAAO,IAADzJ,OAAM8F,qBAAS5F,wBAAC,CAAC,EAChB0B,iBAAM6c,EAAQtU,SAASV,SAAO,IACjC4O,UAAWxS,KAAKC,UAAS5F,wBAAC,CAAC,EAAI66C,GAAkB,IAAEzuB,kBAG/D,CACJ,GAAG,CAAC9sB,EAAQif,EAASs8B,EAA2C,OAAvBR,QAAuB,IAAvBA,OAAuB,EAAvBA,EAAyBjuB,UAclE,IACM5D,EAAe/oB,EAAU,eAAgB,CAC3CiB,KAFqBq8B,cAEfD,CAAiB39B,EAAU,GACjCqD,KACAlD,WAKJgR,EAAgC1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAxCgrC,EAAQ/qC,EAAA,GAAEgrC,EAAWhrC,EAAA,GAC5BkP,EAA8B7Y,qBAAU8Y,EAAAtb,YAAAqb,EAAA,GAAjC85B,EAAO75B,EAAA,GAAE87B,EAAU97B,EAAA,GAC1B+7B,EAAiBC,eAAVC,EAAqBv3C,YAAAq3C,EAAA,GAAf,GAEblnC,qBAAU,WACN,GAAIjV,EAAQ,CACR,IAAMs8C,EAAgBvC,GAAiC/5C,EAAOg6C,oBAC9DkC,EAAWI,EACf,CACJ,GAAG,CAACt8C,EAAQk8C,IAEZ,IAAMK,EAAclrC,uBAAY,WAC5B,IAAKtC,KAAQ/O,EAAOi6C,QAASA,GAAU,CACnC,IAAMD,EAAqBh6C,EAAOg6C,mBAAmB11C,KAAI,SAAA41C,GAAiB,OA9I3C,SAACA,EAAmBD,GAC3D,IAAME,EAA2BvtC,OAAOD,KAAKstC,GAAS/vC,QAAO,SAACC,EAAKiwC,GAC/D,IACME,EADsBL,EAAQG,GAC4B3X,MAAK,SAAAnkC,GAAI,OAAAA,EAADi8C,IAAcL,EAAkBh3C,EAAE,IAC1G,OAAAxC,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAG2mC,EAAaE,EAAsCl1C,KAAKk1C,EAAqC,UAAOtwC,GAC1H,GAAG,CAAC,GACJ,MAAO,CAAE9G,GAAIg3C,EAAkBh3C,GAAI+2C,QAASE,EAChD,CAuI0FqC,CAAmCtC,EAAmBD,EAAQ,IAC5IoC,EACI,YACAr8C,EAAOkD,GACP,CAAE82C,mBAAoBA,GACtB,CAAEA,mBAAoBh6C,EAAOg6C,oBAC7B,CACI9pC,OAAQusC,MAGpB,CACJ,GAAG,CAACz8C,EAAQi6C,IAEZhlC,qBAAU,WACN,IAAMynC,EAAe9B,GAAoBjwC,EAASV,QAOlDuxC,GAAsB,SAAAp9B,GAClB,OAAA1d,wBAAA,GACO0d,GACAs+B,EAAa7jC,UAExB,GAGJ,GAAG,CAAClO,EAASV,SAEb,IAAM0yC,EAAqBtrC,uBAAY,SAAC2pC,GACpC/7B,EAAQe,KAAK,CACT/V,OAAO,IAADzJ,OAAM8F,qBAAS5F,wBAAC,CAAC,EAChB0B,iBAAM6c,EAAQtU,SAASV,SAAO,IACjC4O,UAAWxS,KAAKC,UAAU00C,QAItC,GAAG,CAAC/7B,IAEE29B,EAA8BC,MAAe,SAAC7B,GAChD2B,EAAmB3B,EACvB,GAAGhW,GAEH,MAAO,CACH1hC,QACAuT,UACAoT,SACAf,eACArpB,WACAkG,WACA/F,SACAkqB,UACAf,UACAtQ,UAAiB,OAAN7Y,QAAM,IAANA,OAAM,EAANA,EAAQ6Y,UACnBmiC,gBAAiBO,EACjBoB,mBAAoBC,EACpBZ,WACAC,cACAhC,UACAiC,aACAK,cAGR,E,+BCtOMO,GAA4Bj8B,wBAAc,CAC5Cm6B,gBAAiB,KACjBpB,aAAc,KACd/5C,SAAU,OAWdi9C,GAA0B57B,YAAc,4BAEzB47B,UCFAC,GAVkB,SAAHz+C,GAAA,IDGS4c,ECHH3c,EAAQD,EAARC,SAAUgC,EAAKjC,EAALiC,MAAK,OAC/CtB,cAAC+9C,KAAiBC,SAAQ,CAAC18C,MAAOA,EAAMhC,SACpCU,cAAC69C,GAA0BG,SAAQ,CAAC18C,ODCL2a,ECDmC3a,EDEtE0E,mBAAQ,kBAAMi4C,KAAKhiC,EAAS,CACxB,kBACA,eACA,YACF,GAAE,CAACA,EAAQiiC,eAAgBjiC,EAAQ0+B,gBCNwCr7C,SACrEU,cAACm+C,KAAqB,CAAC78C,MAAOA,GAASA,EAAMP,OAAOzB,SAC/CA,OAGe,E,mBCN1B8+C,GAAc,CAAC,EAEfv8C,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNwsB,KAAM,CACFjgB,QAAS,OACTmU,WAAY,WACZkI,cAAe,QAEnB0zB,OAAQ,CAAE9vC,MAAOxM,EAAMG,QAAQ,IAC/Bo8C,WAAY,CAAC,EAChB,GACD,CAAEn8C,KAAM,yBAyCGo8C,GAtCY,SAAAt9C,GACvB,IAAQu9C,EAAqCv9C,EAArCu9C,gBAAiBt+C,EAAoBe,EAApBf,QAAS2C,EAAW5B,EAAX4B,OAC5BjC,EAAWuE,aAAmBlE,GAE9BuB,GADYrB,cACFU,GAAUZ,IAC1B,OACIuD,eAAA,OACI,cAAag6C,EAAgBv9C,MAAMJ,OACnCF,UAAWkE,IAAW,kBAAmBrC,EAAQ+rB,MAAMjvB,SAAA,CAEtD8I,IAAMhC,aAAao4C,EAAiB,CACjCpvC,gBACyCrE,IAArCyzC,EAAgBv9C,MAAMmO,YAEhBovC,EAAgBv9C,MAAMmO,WAChCqvC,UAAW,mBACX79C,WACAG,OAAQq9C,GACRl+C,UACA2C,SACAH,YAAY,EAEZ+M,kBAAc1E,IAElB/K,cAAA,OAAKW,UAAW6B,EAAQ67C,OAAO/+C,SAAC,WAG5C,ECvBeo/C,GAlBmC,SAACz9C,GAC/C,IAAMs1B,EAAOqhB,eACbxU,EAAkDniC,EAA1CiP,mBAAW,IAAAkzB,EAAG,KAAIA,EAAEjS,EAAsBlwB,EAAtBkwB,QAASwtB,EAAa19C,EAAb09C,SAC/BlvC,EAAexO,EAAMe,MAAMV,OAASD,KAAI8vB,EAAS,CAAC,EAAGjhB,IAM3D,OAJA8F,qBAAU,WACNugB,EAAKuhB,OAAO72C,EAAMJ,OAAQ4O,EAC9B,GAAG,CAACA,EAAckvC,IAGd3+C,cAAC2H,KAAiBlG,YAAA,GAAKR,GAE/B,ECdMY,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAIkO,YAAA,CACAjG,MAAOxM,EAAMG,QAAQ,KACpBH,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5B3Z,MAAO,SAGlB,IAiBcqwC,GAfc,SAAC39C,GAC1B,IAAMuB,EAAUX,KACRd,EAAW89C,eAAX99C,OACF+9C,EAAiB,OAAN/9C,QAAM,IAANA,KAAQmxC,UAAYnxC,EAAOmxC,UAAY,GAClDyM,EAAW59C,EAAOkD,GAExB,OACIjE,cAACwH,KAAc/F,wBAAA,GAAKR,GAAK,IAAE6E,OAAQ,CAAEyH,IAAKuxC,GAAY1vC,YAAU,EAACqvC,UAAU,mBAAmB99C,UAAW6B,EAAQ8D,KAAMq4C,SAAUA,EAASr/C,SACtIU,cAAC0+C,GAAyC,CAAC32C,gBAAiBC,SAGxE,ECJe+2C,GAhBkB,SAAC99C,GAC9B,IAAA6K,EAII7K,EAHA0B,aAAK,IAAAmJ,EAAG,4CAA2CA,EAAAkzC,EAGnD/9C,EAFAJ,cAAM,IAAAm+C,EAAG,cAAaA,EAAAC,EAEtBh+C,EADAorB,iBAAS,IAAA4yB,EAAG,YAAWA,EAG3B,OACIj/C,cAACwH,KAAc/F,wBAAA,GAAKR,GAAK,IAAE0B,MAAOA,EAAO9B,OAAQA,EAAQwrB,UAAWA,EAAWjd,YAAU,EAACqvC,UAAU,mBAAkBn/C,SAClHU,cAAC0+C,GAAyC,CAAC32C,gBAAiBC,SAGxE,E,wQC6IMnG,GAAYC,aAAW,SAACC,GAAK,MAAM,CACvCs9B,UAAW,CACTrX,SAAU,EACVla,SAAU,WACV7L,SAAUF,EAAMG,QAAQ,KAE1Bg9C,OAAQ,CACN/8B,OAAQpgB,EAAMogB,OAAOod,OAExB,GAAG,CAAEp9B,KAAM,sBAEGg9C,GAhKW,SAACl+C,GA4BrBA,EA1BFuB,QADF,IAEE7B,EAyBEM,EAzBFN,UACArB,EAwBE2B,EAxBF3B,SACA6Y,EAuBElX,EAvBFkX,SACA1V,EAsBExB,EAtBFwB,OACAC,EAqBEzB,EArBFyB,WACAC,EAoBE1B,EApBF0B,MACOC,GAmBL3B,EAnBF2W,QAmBE3W,EAlBF4B,eAAM,IAAAD,EAAG,QAAOA,EAAAk+B,EAkBd7/B,EAjBFoI,YAAI,IAAAy3B,EAAG,QAAOA,EACdh+B,EAgBE7B,EAhBF6B,OACAC,EAeE9B,EAfF8B,SACAC,EAcE/B,EAdF+B,QAAOg+B,EAcL//B,EAbFgC,QAAOg+B,OAAA,IAAAD,EAIH,CAAC,EAACA,EAHJE,EAAUD,EAAVC,WACAC,EAAUF,EAAVE,WACGl+B,EAAOxD,YAAAwhC,EAAAvhC,IAEZyD,EAQElC,EARFkC,MACAvC,EAOEK,EAPFL,SACAC,EAMEI,EANFJ,OACAuC,EAKEnC,EALFmC,SAAQC,EAKNpC,EAJFf,eAAO,IAAAmD,EAAG,SAAQA,EAClB+7C,EAGEn+C,EAHFm+C,UACAC,EAEEp+C,EAFFo+C,yBACGv7C,EAAIrE,YACLwB,EAAKwQ,IAEHjP,EAAUX,GAAUZ,GAE1B8C,EAKIC,aAAQvC,YAAC,CACXgB,SACAK,SACAC,WACAC,UACAG,QACAvC,WACAC,SACAuC,YACGU,IAbHG,EAAEF,EAAFE,GACAjC,EAAK+B,EAAL/B,MACAkC,EAAUH,EAAVG,WAAUC,EAAAJ,EACVK,KAAQG,EAAOJ,EAAPI,QAASF,EAAKF,EAALE,MAAOC,EAAWH,EAAXG,YAapBk9B,EAAW1vB,mBACX2vB,EAAY3vB,iBAAO,MACzBC,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GAEd4vB,EAAaxvB,uBAAY,SAAAtJ,GAC7B9G,EAAMc,OAAOgG,EACf,GAAG,CAAC9G,IAEE6/B,EAAczvB,uBAAY,SAAAtJ,GAC9B+O,GAAQ,GACR7V,EAAMgB,QAAQ8F,EAChB,GAAG,CAAC9G,IAEE6G,EAAcuJ,uBAAY,SAAAtJ,GAAU,IAADi5B,EAAAC,EAEI,oBAAlC,OAALl5B,QAAK,IAALA,GAAa,QAARi5B,EAALj5B,EAAOwB,cAAM,IAAAy3B,GAAW,QAAXC,EAAbD,EAAeE,iBAAS,IAAAD,OAAnB,EAALA,EAA0BrhC,YAI9BkX,GAAQ,EACV,GAAG,IAEGynC,EAAkBltC,uBAAY,SAAAtJ,GAC9Bu2C,GAGFx2C,EAAYC,EAGhB,GAAG,CAACu2C,EAA0Bx2C,IAExBw+B,GAAej1B,uBAAY,SAAA9Q,GAC/BU,EAAMe,SAASzB,EACjB,GAAG,IAEG6S,GAAW/B,uBAAY,SAAA9Q,GAC3B,MAA4B,oBAAd89C,EAA2BA,EAAU99C,GAASA,CAC9D,GAAG,CAAC89C,IAGJ,OACEp/C,cAACoiC,KAAiB,CAACC,YAAaid,EAAgBhgD,SAC9CkF,eAAA,OAAAlF,SAAA,CACEU,cAACyE,KAAShD,wBAAA,CACRwC,GAAIA,GACAjC,GAAK,IACTrB,UAAWkE,IAAWrC,EAAQR,MAAOrB,GACrCW,MAAO6S,GAASnS,EAAMV,OACtBuI,IAAK43B,EACLhzB,WAAS,EACT6zB,WAAU7gC,YAAA,CACR8gC,UAAU,EACVf,SAAUA,EACV1+B,OAAQ8+B,EACR5+B,QAAS6+B,GACNV,GAEL98B,SAAUE,IAAYF,IAASC,GAC/B3B,MACE3C,cAAC2E,KAAUlD,wBAAA,CACTkB,MAAOA,GACHu+B,GAAU,IACdrgC,OAAQA,EACRD,SAAUA,EACVsD,WAAYA,KAGhBxB,WACE1C,cAAC4E,KAAe,CACdL,QAASA,EACTF,MAAOA,GAASC,EAChB5B,WAAYA,IAGhB2G,KAAMA,EACNnJ,QAASA,EACT2C,OAAQA,EACRsV,SAAUA,GACNlV,IAENjD,cAACgjC,KAAM,CACLriC,UAAW6B,EAAQ08C,OACnBt2C,KAAMA,EACNL,SAAUk5B,EAAU3uB,QACpBqkB,YAAU,EACV+L,eAAa,EAAA5jC,SAEbU,cAAC6sB,KAAK,CAAC0yB,UAAW,EAAEjgD,SACjB8I,IAAMhC,aAAa9G,EAAU,CAC5BkK,QAASX,EACT9F,SAAUskC,GACV/lC,MAAOU,EAAMV,gBAO3B,E,UCzIek+C,GAdU,SAACv+C,GACtB,IAAMs1B,EAAOqhB,eAEPvQ,EAAej1B,uBAAY,SAAC9Q,GAE9Bi1B,EAAKuhB,OAAO,SAAUxrC,YAASmzC,MAAMrR,QAEzC,GAAG,IAEH,OACIpuC,cAAC0/C,KAAaj+C,wBAAA,GAAKR,GAAK,IAAE8B,SAAUskC,IAE5C,ECNMxlC,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCwW,QAAS,CAET,EACAonC,QAAS,CACLrxC,QAAS,OACTsxC,IAAK,IAEZ,IAEK1hC,GAAsB,CACxBC,YAAY,EACZC,UAAU,EACVC,OAAO,EACPC,SAAS,EACTC,QAAQ,GA0DGshC,GAtDY,SAAC5+C,GACxB,IACIuI,EAGAvI,EAHAuI,QACAzG,EAEA9B,EAFA8B,SACAzB,EACAL,EADAK,MAIEkB,EAAUX,KACVX,EAAYC,cAEZ0H,EAAcuJ,uBAAY,SAACtJ,GAC7BU,EAAQV,EACZ,GAAG,CAACU,IAEEs2C,EAAc1tC,uBAAY,SAACmM,GAC7Bxb,EAASwb,GACT/U,GACJ,GAAG,CAACzG,EAAUyG,IAEd,OACIxJ,cAACsf,KAAI,CACDsxB,cAAetvC,EACfie,SAAUugC,EACV1vC,aAAc8N,GACdsB,yBAAuB,EACvBrP,OAAQ,SAAA9Q,GAAA,IAAG0gB,EAAY1gB,EAAZ0gB,aAAczB,EAAOjf,EAAPif,QAASC,EAAMlf,EAANkf,OAAM,OACpC/Z,eAAA,QAAAlF,SAAA,CACIkF,eAACkb,KAAa,CAAC/e,UAAW6B,EAAQ+V,QAAQjZ,SAAA,CACtCkF,eAAA,OAAK7D,UAAW6B,EAAQm9C,QAAQrgD,SAAA,CAC5BU,cAACuxB,KAAa,CAAC1wB,OAAO,WAAWD,SAAS,YAAYugC,WAAY,CAAE5D,IAAKjxB,YAAS6wB,QAAQ5e,EAAOwhC,QAAQnZ,SAAS,yBAClH5mC,cAACuxB,KAAa,CAAC1wB,OAAO,SAASD,SAAS,YAAYugC,WAAY,CAAEjE,IAAK5wB,YAAS6wB,QAAQ5e,EAAOyhC,UAAUpZ,SAAS,uBAAyBzuB,SAAgB,OAANoG,QAAM,IAANA,OAAM,EAANA,EAAQ0hC,YAEjKjgD,cAACw/C,GAAgB,CAAC3+C,OAAO,SAASD,SAAS,iBAE/C4D,eAACqb,KAAa,CAAAvgB,SAAA,CACVU,cAAC8f,KAAM,CACH3H,SAAUmG,EACVnV,QAASN,EAAYvJ,SACvB4B,EAAU,sBACZlB,cAAC8f,KAAM,CACH3H,SAAUmG,EACVnV,QAAS4W,EACT5f,MAAM,UAASb,SACjB4B,EAAU,0BAEb,GAIvB,ECzEM0O,GAAe,CACjBowC,SAAU1zC,YAASC,MAAMs6B,MAAM,CAAEqZ,IAAK,IAAK9R,QAC3C2R,OAAQzzC,YAASC,MAAM6hC,QACvB6R,QAAQ,GAGNb,GAAY,SAACe,GACf,IAAQH,EAA6BG,EAA7BH,SAAUD,EAAmBI,EAAnBJ,OAAQE,EAAWE,EAAXF,OACpBG,EAAiBJ,aAAoBlW,KAAOx9B,YAAS+zC,WAAWL,GAAY1zC,YAAS6wB,QAAQ6iB,GAC7FM,EAAeP,aAAkBjW,KAAOx9B,YAAS+zC,WAAWN,GAAUzzC,YAAS6wB,QAAQ4iB,GAC7F,OAAOE,EAAM,GAAA1+C,OACJ6+C,EAAe5zC,eAAeF,YAASG,gBAAe,8CAAAlL,OACtD6+C,EAAe5zC,eAAeF,YAASG,gBAAe,OAAAlL,OAAM++C,EAAa9zC,eAAeF,YAASG,gBAC9G,EAEM5K,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFiI,MAAOxM,EAAMG,QAAQ,KAE5B,IA8Bc29C,GA5BY,SAAC5+C,GACxB,IAAQJ,EAAWI,EAAXJ,OACF2B,EAAUX,KACR0c,EAAWgiC,eAAXhiC,OACFgY,EAAOqhB,eACPnoC,EAAepO,KAAIkd,EAAQ1d,IAAW+O,GAO5C,OALAoG,qBAAU,WACNugB,EAAKuhB,OAAO72C,EAAMJ,OAAQ4O,EAC9B,GAAG,CAACA,IAIAzP,cAACm/C,GAAiB19C,wBAAA,GACVR,GAAK,IACTN,UAAW6B,EAAQ8D,KACnB84C,UAAWA,GACXC,0BAAwB,EAAA//C,SAExBU,cAACwgD,GAAsB,MAGnC,E,ohBCrCaC,GAAgB,SAACx/C,GAC1B,IAAAy/C,EAQIz/C,EAPAuB,eAAO,IAAAk+C,EAAG,CAAC,EAACA,EACZ//C,EAMAM,EANAN,UACAkC,EAKA5B,EALA4B,OAAM89C,EAKN1/C,EAJA2Y,iBAAS,IAAA+mC,EAAG,GAAEA,EACdzgD,EAGAe,EAHAf,QAEG4D,GACH7C,EAFA2vC,cACOnxC,YACPwB,EAAKvB,KACHkB,EAAWuE,aAAmBlE,GAEpC,OACIuD,eAAA,OAAA/C,wBAAA,CACId,UAAWkE,IAAWlE,EAAW6B,EAAQ+zB,OACrChM,GAAkBzmB,IAAK,IAC3Byb,SAAUQ,GAAazgB,SAAA,CAEtBsa,EAAUka,SAAS,YAAc9zB,cAACu+C,GAAkB,CACjDC,gBAAiBx+C,cAAC4+C,GAAoB,CAAC/9C,OAAO,UAAUwrB,UAAU,QAAQ1pB,MAAM,0CAChF/B,SAAUA,EACVV,QAASA,EACT2C,OAAQA,IAEX+W,EAAUka,SAAS,gBAAkB9zB,cAACu+C,GAAkB,CACrDC,gBAAiBx+C,cAAC++C,GAAwB,CAACl+C,OAAO,cAAcwrB,UAAU,YAAY1pB,MAAM,8CAC5F/B,SAAUA,EACVV,QAASA,EACT2C,OAAQA,IAEX+W,EAAUka,SAAS,UAAY9zB,cAACu+C,GAAkB,CAC/CC,gBAAiBx+C,cAAC6/C,GAAkB,CAACh/C,OAAO,QAAQ8B,MAAM,wCAC1D/B,SAAUA,EACVV,QAASA,EACT2C,OAAQA,IAEZ7C,cAAA,OAAKW,UAAW6B,EAAQo+C,cAGpC,EAEM7gC,GAAe,SAAAjX,GAEjB,OADAA,EAAM6X,kBACC,CACX,EASM9e,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNw0B,KAAM,CACFtO,WAAYlmB,EAAMG,QAAQ,GAC1BkmB,WAAY,EACZ9Z,QAAS,OACTmU,WAAY,WACZmI,SAAU,OACV9C,UAAW/lB,EAAMG,QAAQ,IACzByoB,cAAe,QAEnBi2B,SAAU,CAAEC,MAAO,SACtB,GACD,CAAE1+C,KAAM,iBAGNooB,GAAoB,SAAHlrB,GACbA,EAANyhD,OACKzhD,EAAL0hD,MACW1hD,EAAX2hD,YAC0B3hD,EAA1B4hD,2BACoB5hD,EAApB6hD,qBACkB7hD,EAAlB8hD,mBACK9hD,EAALgF,MACMhF,EAAN+hD,OACc/hD,EAAd6+C,eACI7+C,EAAJk3B,KACYl3B,EAAZ0gB,aACe1gB,EAAfgiD,gBACmBhiD,EAAnBiiD,oBACUjiD,EAAV0tB,WACO1tB,EAAPif,QACQjf,EAAR0qC,SACuB1qC,EAAvBkiD,wBACQliD,EAAR+e,SACQ/e,EAARuB,SACYvB,EAAZs7C,aACWt7C,EAAXiF,YACYjF,EAAZmiD,aACYniD,EAAZoiD,aACepiD,EAAfqiD,gBACUriD,EAAV8e,WACO9e,EAAPkF,QACKlF,EAALgf,MACUhf,EAAVsiD,WACMtiD,EAANkf,OACOlf,EAAPuiD,QACQ,OAAAniD,YAAAJ,EAAAoS,GACA,EA4CNowC,GAAwB,WAAQ,EAGhCC,GAAsB,CAAEvjC,QAAQ,EAAMH,UAAU,EAAME,SAAS,GAEtDyjC,GA3Cc,SAAA9gD,GAKrBA,EAHAuB,QAGAvB,EAFA2vC,cACOnxC,YACPwB,EAAKyR,IAJT,IAKMlQ,EAAUX,GAAUZ,GAC1B+gD,EAA2DnD,aAAoB59C,GAAvE2Y,EAASooC,EAATpoC,UAAWmiC,EAAeiG,EAAfjG,gBAAiB2B,EAAkBsE,EAAlBtE,mBAIpC,OACI19C,cAACsf,KAAI,CACDC,SAAUsiC,GACVjR,cAAemL,EACfkG,SAAQxgD,YAAA,GAAOygD,MACf/xC,OAAQ,SAAAsP,GAAS,OACbjb,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIU,cAACmiD,KAAO,CACJ/xC,aAAc0xC,GACd/+C,SAAU,SAAAqO,GAAoC,IAAjCgN,EAAQhN,EAARgN,SAAUG,EAAMnN,EAANmN,OAAQD,EAAOlN,EAAPkN,QACvBF,GAAYE,GAGhBo/B,EAAmBn/B,EACvB,IAEJve,cAACygD,GAAah/C,wBAAA,CACVe,QAASA,GACLid,GAAS,IACb7F,UAAWA,OAEhB,GAInB,E,qCCxJM/X,GAAYC,aACd,SAAAC,GAAK,IAAAqgD,EAAA,MAAK,CACN9jB,SAAO8jB,EAAA,CACH5/B,eAAgB,gBAChBC,WAAY,aACZoJ,aAAc,GAACrX,YAAA4tC,EACdrgD,EAAM2gB,YAAYC,GAAG,MAAQ,CAC1B0F,YAAa,IAChB7T,YAAA4tC,EACArgD,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5BG,YAAatmB,EAAMG,QAAQ,GAC3BqE,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,QAC7Cs2B,GAELt4B,QAAOtV,YAAA,CACH4T,WAAYrmB,EAAMG,QAAQ,GAC1B4lB,UAAW/lB,EAAMG,QAAQ,IACxBH,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5Bja,QAASlM,EAAMG,QAAQ,GACvBqE,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,QAGrD,GACD,CAAE3pB,KAAM,2BAGNkgD,GAAuB,SAACphD,GAMtBA,EAJAuB,QADJ,IAEI8/C,EAGArhD,EAHAqhD,QACA1oC,EAEA3Y,EAFA2Y,UACG9V,EAAIrE,YACPwB,EAAKvB,IACH8C,EAAUX,GAAUZ,GAE1B,OACIuD,eAACwnB,KAAO,CAACrrB,UAAW6B,EAAQ87B,QAAQh/B,SAAA,CAC/Bsa,GACG5Z,cAACygD,GAAah/C,YAAA,GAAKqC,IAEvB9D,cAAA,WACCsiD,GACGl6C,IAAMhC,aAAak8C,EAAO7gD,wBAAA,GACnBqC,GAAI,IACPnD,UAAW6B,EAAQsnB,QACnBlQ,aACG0oC,EAAQrhD,UAI/B,EAUemH,OAAMyE,KAAKw1C,I,4EC1DpBE,GAAgC,SAACthD,GACnC,IAAA4K,EAOI5K,EANA6F,gBAAQ,IAAA+E,EAAG,qBAAoBA,EAAAI,EAM/BhL,EALAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EAAAH,EAKlB7K,EAJA0B,aAAK,IAAAmJ,EAAG,0BAAyBA,EACjC/K,EAGAE,EAHAF,OAEG+C,GACH7C,EAFA+K,YACOvM,YACPwB,EAAKvB,KAGHkB,EAAWuE,eACX5F,EAAKyG,mBAAQ,iBAAO,CACtBmG,SAAS,cAAD5K,OAAsB,OAANR,QAAM,IAANA,OAAM,EAANA,EAAQkD,GAAE,6BACrC,GAAG,CAAC6C,EAAU/F,EAAQH,IAEvB,OAAKG,EAGDf,cAAC8f,KAAMre,wBAAA,CACHrB,UAAWC,KACXd,GAAIA,EACJoD,MAAOA,EACPwG,QAASJ,IACLjF,GAAI,IAAAxE,SAEP6K,KAVW,IAaxB,EAEMC,GAAcpK,cAACwiD,KAAa,IAE5Bz5C,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAqBlC05C,GAX2B51C,eACtC01C,IACA,SAACthD,EAAOo0C,GAAS,OACZp0C,EAAMF,QAAUs0C,EAAUt0C,OACrBE,EAAMF,OAAOkD,KAAOoxC,EAAUt0C,OAAOkD,GACrChD,EAAMF,QAAUs0C,EAAUt0C,SAChCE,EAAM6F,WAAauuC,EAAUvuC,UAC7B7F,EAAM1B,KAAO81C,EAAU91C,IACvB0B,EAAMkX,WAAak9B,EAAUl9B,QAAQ,IChD9BiF,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,6SAGd,E,iCCyBMvU,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAIlC25C,GA9BqB,SAACzhD,GAM7BA,EAJA6F,SADJ,IACiBgF,EAIb7K,EAHA0B,aAAK,IAAAmJ,EAAG,0BAAyBA,EAE9BhI,GACH7C,EAFAF,OACOtB,YACPwB,EAAKvB,KACDs9C,EAAgB6B,eAAhB7B,YAEFt8B,EAActO,uBAAY,SAACtJ,GAC7BC,GAAgBD,GAChBk0C,GAAY,EAChB,GAAG,CAACA,IAEJ,OACIh9C,cAAC8f,KAAMre,wBAAA,CACHkB,MAAOA,EACPwG,QAASuX,GACL5c,GAAI,IAAAxE,SAERU,cAAC2iD,GAAiB,MAG9B,E,4ECyBeC,GA9Bc,SAAHxxC,GAAgC,IATnC/R,EASSsB,EAASyQ,EAATzQ,UAAcmD,EAAIrE,YAAA2R,EAAAK,IAC9CuwC,EAAuCnD,aAAoB/6C,GAAnDgD,EAAQk7C,EAARl7C,SAAU/F,EAAMihD,EAANjhD,OACZqpB,GAD4B43B,EAARphD,SACJ,OAANG,QAAM,IAANA,OAAM,EAANA,EAAQqpB,SACxB,OACI5lB,eAACuX,KAAUta,wBAAA,CAACd,UAAWA,KAbRtB,EAayCyE,GAZ5DgD,SACSzH,EAATsB,UACOtB,EAAPoqB,QACOpqB,EAAPqqB,QACQrqB,EAARuB,SACOnB,YAAAJ,EAAAK,MAO0D,IAAAJ,SAAA,CACxDiqB,KAAYI,IAAI,SAAU,cAAgBJ,KAAYI,IAAI,SAAU,sBAAwBJ,KAAYI,IAAI,UAAW,WAAaJ,KAAYI,IAAI,UAAW,WAAa3pB,cAACuiD,GAA6B,CAACz7C,SAAUA,EAAU/F,OAAQA,IACvOwoB,KAAYI,IAAI,SAAU,cAAgB3pB,cAAC0iD,GAA2B,CAAC57C,SAAUA,EAAU/F,OAAQA,IACpGyD,eAACyD,KAAU,CAAC9H,MAAM,UAASb,SAAA,CACtBiqB,KAAYI,IAAI,SAAU,cAAgB3pB,cAACy0C,KAAoB,CAAC3tC,SAAUA,EAAU/F,OAAQA,IAC5FwoB,KAAYI,IAAI,SAAU,cAAgB3pB,cAAC00C,KAAoB,CAAC5tC,SAAUA,EAAU/F,OAAQA,IAC5FwoB,KAAYI,IAAI,SAAU,cAAgB3pB,cAAC4L,KAAqB,CAAC9E,SAAUA,EAAU/F,OAAQA,IAC7FwoB,KAAYI,IAAI,SAAU,eAAiBS,GAAWpqB,cAAC20C,KAAsB,CAAC7tC,SAAUA,EAAU/F,OAAQA,IAC1GwoB,KAAYI,IAAI,UAAW,cAAgBS,GAAWpqB,cAACid,KAAuB,CAACnW,SAAUA,EAAU/F,OAAQA,IAC3GwoB,KAAYI,IAAI,UAAW,cAAgBS,GAAWpqB,cAAC4a,KAAsB,CAAC9T,SAAUA,EAAU/F,OAAQA,UAI3H,E,mDClCMc,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCs9B,UAAW,CACP/wB,QAAS,OACTuZ,cAAe,SACfrF,eAAgB,SAChBC,WAAY,SACZjR,OAAQ,OACRjL,gBAAiBxE,EAAMyE,QAAQyK,OAAO4xC,MACtCC,aAAc/gD,EAAMghD,MAAMD,cAE9BtwC,QAAS,CACLlE,QAAS,OACTuZ,cAAe,SACfrF,eAAgB,SAChBC,WAAY,SACZ1U,WAAY,qBACZ2c,QAAS,GACTzc,QAAS,GAEbie,KAAM,CACF7b,UAAW,UAElB,GAAG,CAAElO,KAAM,+BA2BG6gD,GAzBC,SAAA/hD,GACZ,IACIN,EAEAM,EAFAN,UAGE6B,EAAUX,GAAUZ,GACpBC,EAAYC,cAClB,OACInB,cAAA,OAAKW,UAAWkE,IAAWrC,EAAQ68B,UAAW1+B,GAAWrB,SACrDkF,eAAA,OAAK7D,UAAW6B,EAAQgQ,QAAQlT,SAAA,CAC5BU,cAACijD,KAAU,IACXz+C,eAACvE,KAAU,CAACC,QAAQ,QAAQS,UAAW6B,EAAQ0pB,KAAK5sB,SAAA,CAAE4B,EAAU,0CAA0ClB,cAACkjD,KAAc,WAIzI,ECzCMrhD,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCs9B,UAAW,CACP/wB,QAAS,OACTuZ,cAAe,SACfrF,eAAgB,SAChBC,WAAY,SACZjR,OAAQ,OACRjL,gBAAiBxE,EAAMyE,QAAQyK,OAAO4xC,MACtCC,aAAc/gD,EAAMghD,MAAMD,cAE9BtwC,QAAS,CACLlE,QAAS,OACTuZ,cAAe,SACfrF,eAAgB,SAChBC,WAAY,SACZ1U,WAAY,qBACZ2c,QAAS,GACTzc,QAAS,GAEbie,KAAM,CACF7b,UAAW,UAElB,GAAG,CAAElO,KAAM,gCAoBGghD,GAlBE,SAAAliD,GACb,IACIN,EAEAM,EAFAN,UAGE6B,EAAUX,GAAUZ,GACpBC,EAAYC,cAClB,OACInB,cAAA,OAAKW,UAAWkE,IAAWrC,EAAQ68B,UAAW1+B,GAAWrB,SACrDkF,eAAA,OAAK7D,UAAW6B,EAAQgQ,QAAQlT,SAAA,CAC5BU,cAACijD,KAAU,IACXjjD,cAACC,KAAU,CAACC,QAAQ,QAAQS,UAAW6B,EAAQ0pB,KAAK5sB,SAAE4B,EAAU,kDAIhF,EC5CMwlC,GAAe,CACjB0c,YAAQr4C,EACRs4C,mBAAet4C,EACfu4C,sBAAkBv4C,EAClBw4C,WAAW,EACXC,kBAAkB,EAClBC,qBAAqB,EACrB7rC,SAAS,EACToT,QAAQ,GAgDG04B,GA7CS,SAACvS,GAErB,IAAAp/B,EAA4B1J,mBAASq+B,IAAa10B,EAAAnM,YAAAkM,EAAA,GAA3CnE,EAAMoE,EAAA,GAAE2xC,EAAS3xC,EAAA,GAuCxB,OArCAgE,qBAAU,WA+BN,OAJIm7B,GAzBiB,SAACA,GAElBwS,EAASliD,wBAAC,CAAC,EAAIilC,IAAY,IAAE9uB,SAAS,KACtC,QAAO,KAADrW,OAAqB4vC,EAAI1E,QAAQ,KAAM,MACxCr/B,MAAK,SAAAQ,GACF+1C,EAAU,CACNP,OAAQx1C,EAAOw1C,OACfC,cAAez1C,EAAOy1C,cACtBC,iBAAkB11C,EAAO01C,iBACzBC,UAAWx9C,QAAQ6H,EAAOw1C,QAC1BI,iBAAkBz9C,QAAQ6H,EAAOy1C,eACjCI,oBAAqB19C,QAAQ6H,EAAO01C,kBACpC1rC,SAAS,EACToT,QAAQ,GAEhB,IACCkoB,OAAM,SAAA7uC,GACHs/C,EAAU,CACNt/C,QACAuT,SAAS,EACToT,QAAQ,GAEhB,GACR,CAGI44B,CAAazS,GAGV,WACHwS,EAAUjd,GACd,CAEJ,GAAG,CAACyK,IAEGvjC,CACX,EC/Bei2C,GAlBsBj6C,sBAAW,SAAC3I,EAAO4I,GACpD,IAAQoxC,EAA8Bh6C,EAA9Bg6C,kBAAmB6I,EAAW7iD,EAAX6iD,OAC3BC,EAA4DL,GAAgBI,EAAO3S,KAA3EkS,EAAaU,EAAbV,cAAeG,EAAgBO,EAAhBP,iBAAkBn/C,EAAK0/C,EAAL1/C,MAEzC,OAFuD0/C,EAAPnsC,QAE3B5X,cAACgkD,GAAwB,IACzCR,GAAqB95C,yBAAe1J,cAACqjD,EAAa,KACnDh/C,EAAe,WAGd42C,EAGDj7C,cAACqjD,EAAa5hD,YAAA,GAAKR,IAHQ,KAJsCjB,cAACikD,GAAyB,GASnG,I,4DCTMC,GAAiB,SAAC90B,GACtB,IAAKA,EAAK,OAAO,KACjB,IAAA+0B,EAA8C/0B,EAAtCg1B,SAAC,IAAAD,EAAG,EAACA,EAAAE,EAAiCj1B,EAA/Bk1B,SAAC,IAAAD,EAAGE,IAAQF,EAAAG,EAAmBp1B,EAAjBq1B,SAAC,IAAAD,EAAG,EAACA,EAAAE,EAAYt1B,EAAVu1B,EACpC,MAAO,CAAEP,IAAGE,IAAGG,IAAGE,OADmB,IAAAD,EAAG,EAACA,EAE3C,EAEM7iD,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACrCg7C,SAAU,CACRlV,OAAQ,OACR,6BAA8B,CAC5BA,OAAQ,aAGb,GAAG,CAAE1lC,KAAM,wBAENyiD,GAA4BC,yBAAcC,eAgEjCC,GA9Da,SAAC9jD,GAC3B,IACE6F,EAME7F,EANF6F,SAIAk+C,GAEE/jD,EALFN,UAKEM,EAJFL,SAIEK,EAHFipB,QAGEjpB,EAFF+jD,UAGIxiD,GAFG/C,YACLwB,EAAKvB,IACOmC,MAChBmgD,EAAkDnD,eAA1C99C,EAAMihD,EAANjhD,OAAQi6C,EAAOgH,EAAPhH,QAASiC,EAAU+E,EAAV/E,WAAYF,EAAQiF,EAARjF,SAE/BhC,EAAqB/0C,mBAAQ,kBAAY,OAANjF,QAAM,IAANA,OAAM,EAANA,EAAQg6C,kBAAkB,GAAE,CAACh6C,IAEhEkkD,EAAqB7yC,uBAAY,SAAC8yC,EAAeC,GACrDlI,EAAWkI,EACb,GAAG,CAAClI,IAEJ,OAAMjC,GAAWD,EACbvS,MAAMC,QAAQsS,IAAqD,IAA9BA,EAAmBpyC,OAAsB3I,cAACk3B,KAAK,CAACt2B,SAAS,oBAAoBkG,SAAQ,GAAAvF,OAAKuF,EAAQ,KAAAvF,OAAIR,EAAOkD,GAAE,sBAAsB4X,WAAW,IAIvL7b,cAAC4kD,GAAyB,CACxBQ,eAAgBH,EAChBtkD,UAAU,SACVq6C,QAASA,EACTt4B,YAAa,CAAE2iC,IAAK,KAAMC,GAAI,KAAMC,GAAI,KAAMC,GAAI,IAAKC,GAAI,IAAKle,GAAI,GACpEme,KAAM,CAAEL,IAAK,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,EAAGle,GAAI,GACpD1kC,OAAQ,CAAC,GAAI,IACb8iD,iBAAkB,CAAC,EAAG,GACtBC,UAAW,GACXC,WAAW,EACXC,oBAAoB,EACpBC,YAAahgD,SAASi/C,GAAYjI,GAClCiJ,YAAajgD,SAASi/C,GAAYjI,GAAUz9C,SAE3Cy7C,EAAmB11C,KAAI,SAAA41C,GACtB,IAAMgL,EAAYxkD,wBAAA,GACbw5C,GAAiB,IACpBj1B,UAAW7f,KAAKpF,EAAQ,CAAC,yBAG3B,OACEf,cAAA,OAAgCW,UAAWkE,IAAU2P,YAAC,CAAC,EAAEhS,EAAQu6C,SAAWA,IAAa,YAAWmH,GAAejJ,EAAkBiL,MAAM5mD,SACzIU,cAAC6jD,GAA4B,CAC3B/8C,SAAQ,cAAAvF,OAAsB,OAANR,QAAM,IAANA,OAAM,EAANA,EAAQkD,GAAE,sBAClC+hB,UAAWjlB,EACXk6C,kBAAmBA,EACnB6I,OAAQ7I,EAAkB6I,OAC1B/iD,OAAQklD,EACRjB,SAAUA,KAPJ/J,EAAkBh3C,GAWhC,MArCyC,IAyC/C,E,WChCekiD,GA9CuB,SAACllD,GACnC,IAAA+gD,EAAmEnD,eAA3D99C,EAAMihD,EAANjhD,OAAQg8C,EAAQiF,EAARjF,SAAUC,EAAWgF,EAAXhF,YAAaM,EAAW0E,EAAX1E,YAAaL,EAAU+E,EAAV/E,WAC9C/7C,EAAYC,cAEZ0H,EAAcuJ,uBAAY,SAACtJ,EAAOs9C,GACpC,GAAe,cAAXA,EAAJ,CAIApJ,GAAY,GACZ,IAAMK,EAAgBvC,GAAiC/5C,EAAOg6C,oBAC9DkC,EAAWI,EAJX,CAKJ,GAAG,CAACL,EAAaC,EAAYl8C,IAEvBslD,EAAaj0C,uBAAY,SAAAtJ,GAC3Bw0C,IACAN,GAAY,EAChB,GAAG,CAACM,EAAaN,IAEjB,OAEIh9C,cAACsmD,KAAQ,CACLzhB,aAAc,CACVC,SAAU,SACVC,WAAY,UAEhBn8B,KAAMm0C,EAENvzC,QAASX,EACT2J,QAAStR,EAAU,4BACnB+P,OACIzM,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC8f,KAAM,CAAC3f,MAAM,UAAUkJ,KAAK,QAAQF,QAASN,EAAYvJ,SAAE4B,EAAU,sBACtElB,cAAC8f,KAAM,CAAC3f,MAAM,UAAUkJ,KAAK,QAAQF,QAASk9C,EAAW/mD,SAAE4B,EAAU,wBAKzF,ECpBeqlD,GAdkB,SAACtlD,GAC9B,IAAM+nB,EAAe61B,eACf39C,EAAYC,cAElB,OACIqD,eAAC0kB,KAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,KAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,KAAkB3nB,YAAA,GAAKunB,IACxBhpB,cAAC6oB,GAAoBpnB,wBAAA,GAAKunB,GAAkB/nB,IAC5CjB,cAACZ,KAAc,CAAAE,SAAE4B,EAAU,sBAGvC,E,0CCjBMslD,GAAsB,SAACvlD,GAC3B,IAAQF,EAAoBE,EAApBF,OACF2K,GADiBjM,YAAKwB,EAAKvB,IAChBiM,eACTxJ,EAAcpB,EAAdoB,KAAMgvC,EAAQpwC,EAARowC,IACR5xC,EAAE,GAAAgC,OAAM4vC,GAAG5vC,OAAGmK,EAASV,QAC7B,OACEhL,cAAC8f,KAAM,CACL1f,UAAWC,KACXd,GAAIA,EACJoD,MAAOR,EACPgH,QAASJ,GACT7I,QAAQ,WACRmJ,KAAK,SAAQ/J,SAEbU,cAACw1C,KAAa,KAGpB,EAEMiR,GAAqB,SAACxlD,GAC1B,IAAQF,EAAoBE,EAApBF,OACAoB,GADe1C,YAAKwB,EAAKwQ,IACX1Q,EAAdoB,MAAMgvC,EAAQpwC,EAARowC,IACd,OACEnxC,cAAC8f,KAAM,CACL1f,UAAWC,KACXd,GAAI4xC,EACJxuC,MAAOR,EACPgH,QAASJ,GACT7I,QAAQ,WACRmJ,KAAK,SAAQ/J,SAEbU,cAAC21C,KAAW,KAGlB,EAEM+Q,GAAqB,SAACzlD,GAC1B,IAAQF,EAAoBE,EAApBF,OACAoB,GADe1C,YAAKwB,EAAKyR,IACX3R,EAAdoB,MAAMgvC,EAAQpwC,EAARowC,IACd,OACEnxC,cAAC8f,KAAM,CACL+1B,KAAM1E,EACN7mC,OAAO,SACP3H,MAAOR,EACPgH,QAASJ,GACT7I,QAAQ,WACRmJ,KAAK,SAAQ/J,SAEbU,cAAC81C,KAAY,KAGnB,EAgBM/sC,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAIlC49C,GAjBuB,SAAC1lD,GACrC,IAAQF,EAAWE,EAAXF,OACR,IAAKA,EAAQ,OAAO,KAEpB,OAAQA,EAAO0F,MACb,IAAK,YAAa,OAAQzG,cAACwmD,GAAmB/kD,YAAA,GAAKR,IACnD,IAAK,WAAY,OAAQjB,cAACymD,GAAkBhlD,YAAA,GAAKR,IACjD,IAAK,WAAY,OAAQjB,cAAC0mD,GAAkBjlD,YAAA,GAAKR,IAGrD,E,kCCjEMY,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACrCuE,KAAM,CACJkc,eAAgB,cAElB6c,UAAW,CACTpX,UAAW,EACXmD,aAAc,EACdw0B,IAAK,GAER,GAAG,CAAEz9C,KAAM,0BAkBGykD,GAhBe,SAAC3lD,GAC7B,IAAQuO,EAAsCvO,EAAtCuO,KAAM1I,EAAgC7F,EAAhC6F,SAAUlG,EAAsBK,EAAtBL,SAAakD,EAAIrE,YAAKwB,EAAKvB,IAC7C8C,EAAUX,KAEhB,OACE7B,cAACgsB,KAAO,CAACrrB,UAAW6B,EAAQ8D,KAAMugD,gBAAc,EAAAvnD,SAC9CU,cAACs1B,KAAgB7zB,wBAAA,CAACZ,OAAO,QAAQD,SAAUA,EAAUkG,SAAUA,EAAU/F,OAAQyO,GAAU1L,GAAI,IAAEkqB,MAAM,EAAOrtB,UAAW6B,EAAQ68B,UAAU//B,SACzIU,cAACwmD,GAAmB,QAK5B,E,sBCtBM3kD,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF4H,OAAO,aAAD3M,OAAeQ,EAAMyE,QAAQme,QAAQC,OAC3CwG,aAAcrpB,EAAMG,QAAQ,IAEnC,GAAG,CAAEC,KAAM,yCAsBG2kD,GApB8B,SAAC7lD,GAC1C,IACI2Y,EAEA3Y,EAFA2Y,UACAmiC,EACA96C,EADA86C,gBAGEv5C,EAAUX,KAGhB,QAFuB,OAAT+X,QAAS,IAATA,KAAWka,SAAS,cAAwB,OAATla,QAAS,IAATA,OAAS,EAATA,EAAWka,SAAS,aAA0C,OAAb,OAAfioB,QAAe,IAAfA,OAAe,EAAfA,EAAiBluB,SAEnF,KAGbrpB,eAACuiD,KAAK,CAACz5B,SAAS,UAAU9qB,QAAS,CAAE8D,KAAM9D,EAAQ8D,MAAOhH,SAAA,CACtDU,cAACgnD,KAAU,CAAA1nD,SAAC,yFAA2B,iHACnBU,cAAA,UAAAV,SAAQ,yCAAe,oiBAGvD,ECKMuC,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNuE,KAAM,CACFgI,QAAS,OACTuZ,cAAe,SACfG,SAAU,EACVxF,eAAgB,SAChBC,WAAY,UAEhBjQ,QAAS,CACLnC,UAAW,SACXqa,QAAgC,UAAvB3oB,EAAMyE,QAAQC,KAAmB,GAAM,GAChD5D,OAAQ,QACR1C,MAC2B,UAAvB4B,EAAMyE,QAAQC,KACR,UACA1E,EAAMyE,QAAQ0lB,KAAKiQ,SAEjChyB,KAAM,CACFoE,MAAO,GACPiD,OAAQ,IAEZ8sB,QAAS,CACLjuB,UAAW,SACX4X,UAAW,OAElB,GAAG,CAAE9lB,KAAM,YAED+0B,GAvDD,SAACj2B,GACX,IAAQF,EAAWE,EAAXF,OACFyB,EAAUX,GAAUZ,GAE1B,OAAKF,EAGDyD,eAAA,OAAK7D,UAAW6B,EAAQ8D,KAAKhH,SAAA,CACzBkF,eAAA,OAAK7D,UAAW6B,EAAQgQ,QAAQlT,SAAA,CAC5BU,cAACinD,KAAS,CAACtmD,UAAW6B,EAAQ2H,OAC9BnK,cAACC,KAAU,CAACC,QAAQ,KAAK6+B,WAAS,EAAAz/B,SAAA,wCAAAiC,OACnBR,EAAOoB,KAAI,iDAE1BnC,cAACC,KAAU,CAACC,QAAQ,QAAOZ,SAAC,qHAKhCU,cAAA,OAAKW,UAAW6B,EAAQ87B,QAAQh/B,SAC5BU,cAACwL,KAAU,CAAC1E,SAAS,aAAa/F,OAAQA,SAflC,IAoBxB,E,gXChBMmmD,GAAoB,SAACjmD,GACvB,IACIqhD,EAOArhD,EAPAqhD,QACAp5B,EAMAjoB,EANAioB,YAGAvoB,GAGAM,EALA3B,SAKA2B,EAJAuB,QAIAvB,EAHAN,WACAo2B,EAEA91B,EAFA81B,MACGjzB,EAAIrE,YACPwB,EAAKvB,IAEH8C,EAAUX,GAAUZ,GAE1B+gD,EASInD,aAAoB59C,GARpB6F,EAAQk7C,EAARl7C,SACAmjB,EAAY+3B,EAAZ/3B,aACAP,EAAOs4B,EAAPt4B,QACA3oB,EAAMihD,EAANjhD,OACAH,EAAQohD,EAARphD,SACAspB,EAAO83B,EAAP93B,QACAtQ,EAASooC,EAATpoC,UACAmiC,EAAeiG,EAAfjG,gBAEItyB,EAAY3N,aAAsB7a,GAAlCwoB,QACR,IAAK1oB,EAAQ,OAAO,KAEpB,GADsB,OAANA,QAAM,IAANA,OAAM,EAANA,EAAQqpB,QACX,OAAQpqB,cAACmnD,GAAgB,CAACpmD,OAAQA,IAC/C,IAAMqmD,EAAe5e,MAAMC,QAAQ7uB,IAAcA,EAAUjR,OAAS,EAC9D0+C,EAAathD,QAAQu8C,GACrBgF,EAAW9e,MAAMC,QAAQ1nC,EAAOwmD,QAAUxmD,EAAOwmD,MAAM5+C,OAAS,EAChE6+C,GAA2B5tC,GAAYA,EAAUvU,KAAI,SAAAoiD,GAAQ,QAAI1L,KAAiD,MAA7BA,EAAgB0L,GAA0B,IAAEC,MAAM3hD,SAE7I,OACIvB,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,iBAAkBrC,EAAQ8D,KAAM3F,IAClD4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAE3BU,cAACwqB,KAAc,CACXxlB,MAAO+xB,EACPh2B,OAAQA,EACRkpB,aAAcA,IAEjBf,GACCk+B,GAAgBC,IACdrnD,cAACqiD,GAAoB,CACjBC,QAASA,EACTx7C,SAAUA,EACV0I,KAAMzO,EACN2oB,QAASA,EACTD,QAASA,EACT7oB,SAAUA,EACVgZ,UAAWA,IAGlB0tC,GAAatnD,cAAC4mD,GAAqB,CAAC9/C,SAAUA,EAAU0I,KAAMzO,EAAQH,SAAUA,IACjFZ,cAAA,OAAKW,UAAWkE,IAAWrC,EAAQ2T,MAAM7W,SACrCkF,eAAA,OAAK7D,UAAW6B,EAAQmlD,YAAYroD,SAAA,CAChCU,cAAC8mD,GAAoC,CAACltC,UAAWA,EAAWmiC,gBAAiBA,IAC5Eh7C,GAAUymD,GACPxnD,cAAC+kD,GAAmB,CAACnkD,SAAUA,EAAUkG,SAAUA,EAAU/F,OAAQA,EAAQmpB,QAASA,SAIlGlqB,cAACmmD,GAA6B,OAG1C,EAqBAe,GAAkBvlD,aAAe,CAC7Ba,QAAS,CAAC,EACV8/C,QAAStiD,cAAC4nD,GAA2B,IACrC1+B,YAAalpB,cAAC6nD,GAA+B,KAGjD,I,YAAMhmD,GAAYC,YACd,CACIwE,KAAM,CAAC,EACP6P,KAAM,CACF7H,QAAS,QAEbq5C,YAAa,CACTrwB,KAAM,aAGd,CAAEn1B,KAAM,wBAGNooB,GAAoB,SAAHlrB,KACnByH,SAAezH,EACf4qB,aAAmB5qB,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACdsnB,aAAmBtnB,EACnB2gB,QAAc3gB,EACd4E,GAAS5E,EACT2rB,OAAa3rB,EACbuY,QAAcvY,EACdqM,SAAerM,EACfG,MAAYH,EACZ4D,QAAc5D,EACd4rB,QAAc5rB,EACdkqB,YAAkBlqB,EAClB8gD,MAAY9gD,EACZyoD,SAAezoD,EACfua,UAAgBva,EAChB08C,gBAAsB18C,EACtBq+C,mBAAyBr+C,EACzB09C,SAAe19C,EACf29C,YAAkB39C,EAClB49C,WAAiB59C,EACjBi+C,YAAkBj+C,EAClB2lD,SACO,OAAAvlD,YAAAJ,EAAAoS,GACA,EAGIy1C,MC3HAa,GAtBO,SAAC9mD,GACnB,IAAMgvB,EAAkB4rB,GAAuB56C,GAE/C,OACIjB,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC3CU,cAAC89C,GAAwB,CAACx8C,MAAO2uB,EAAgB3wB,SAC7CU,cAACknD,GAAiBzlD,wBAAA,GAAKR,GAAWgvB,OAIlD,ECLe83B,GARc,SAAC9mD,GAAK,OAC/BjB,cAACgoD,GAAgBvmD,wBAAA,GACTR,GAAK,IACT81B,MAAO/2B,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,MAC3C,ECDAgnD,GAAgB,YAWPC,GATW,CACtB/lD,KAAM8lD,GACN99C,KAAMqrC,KACN/kB,KAAMokB,GACNlkB,KAAMwlB,GACN9e,OAAQwhB,GACRsP,KAAM9N,I,yBCWQv4C,aAAW,SAAAC,GAAK,MAAK,CAOnC40C,KAAM,CACF,EAEJyR,SAAU,CACNvgB,OAAQ,WAEZwgB,MAAO,CACH72C,OAAQ,IACRlD,QAAS,OACTmU,WAAY,SACZD,eAAgB,SAChB/X,SAAU,IAGdzF,MAAO,CACHqpB,YAAa,QAEjBpd,OAAQ,CACJgX,WAAY,EACZmD,cAAe,GAEtB,I,+DC/CKvpB,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCy9B,KAAM,CACN,EACH,IAEK71B,GAAUvB,IAAMwB,YAAW,SAAC3I,EAAO4I,GAAG,OAAK7J,cAACK,KAAIoB,YAAA,CAACqI,SAAUD,GAAS5I,GAAS,IA+BpEqnD,GA7BY1+C,sBAAW,SAAAvK,EAAsFwK,GAAS,IAAnFyhB,EAAejsB,EAAxBmD,QAA+CzB,GAAZ1B,EAATsB,UAAmBtB,EAARuB,SAAgBvB,EAAN0B,QAAQgG,EAAM1H,EAAN0H,OAAQlG,EAAMxB,EAANwB,OAC9F2B,GAD8G/C,YAAAJ,EAAAK,IACpGmC,GAAU,CAAEW,QAAS8oB,KAE/BhqB,EAAQD,KAAIN,EAAQF,GACpB0nD,EAAkB,OAANxnD,QAAM,IAANA,OAAM,EAANA,EAAQwnD,UAE1B,OACIvoD,cAAC0iC,KAAI,CACD/hC,UAAW6B,EAAQg9B,KACnB78B,MAAOrB,EAEPnB,MAAOooD,EAAY,UAAY,UAC/BnoD,UAAWuJ,GACXE,IAAKA,EACLtK,GAAI,CACA4M,SAAS,cAAD5K,OAAgBR,EAAOkD,GAAE,SACjC+G,OAAO,IAADzJ,OAAM8F,qBAAU,CAClBuS,UAAWxS,KAAKC,UAAU,CAAEwmB,QAAS9mB,EAAO9C,SAGpDwxC,WAAS,GAKrB,I,oDChCkB3zC,aAAW,SAAAC,GAAK,MAAK,CACnCymD,SAAU,SAAAnpD,GAAA,IAAGopD,EAAYppD,EAAZopD,aAAcC,EAAYrpD,EAAZqpD,aAAY,MAAQ,CAC3CniD,gBAAiBkiD,EAAe,UAAYC,EAAe,UAAY3mD,EAAMyE,QAAQyK,OAAO0M,SAC5Fxd,MAAO4B,EAAMyE,QAAQ0lB,KAAKC,UAC1B22B,aAAc/gD,EAAMghD,MAAMD,aAC1Bjb,OAAQ,UACR55B,QAASlM,EAAMG,QAAQ,GACvBmO,UAAW,SACX8mB,WAAY,oCACZ/L,aAAcrpB,EAAMG,QAAQ,GAC/B,EACJ,I,qHChBKymD,GAAe,SAACC,GACpB,IAAMC,EAAU,IAAIC,QAYpB,OAT4BF,EAAWnc,QAAQ,eAAgB,KAC3CtB,MAAM,SAASjB,SAAQ,SAAC6e,GAC1C,IAAMC,EAAQD,EAAK5d,MAAM,KACnB5lC,EAAMyjD,EAAMC,QAAQC,OAC1B,GAAI3jD,EAAK,CACP,IAAMjE,EAAQ0nD,EAAM19C,KAAK,KAAK49C,OAC9BL,EAAQM,OAAO5jD,EAAKjE,EACtB,CACF,IACOunD,CACT,EAEMO,GAAc,SAACjY,EAAKluC,GAAO,OAC/B,IAAIiK,SAAQ,SAACC,EAASk8C,GACpB,IAAMC,EAAM,IAAIC,eAEhBD,EAAI1gD,KAAK3F,EAAQumD,OAAQrY,GAAK,GAE9BmY,EAAIG,OAAS,WACX,IAAMC,EAAO,CACX7nC,OAAQynC,EAAIznC,OACZ8nC,WAAYL,EAAIK,WAChBd,QAASF,GAAaW,EAAIM,yBAA2B,KAEvDF,EAAKvY,IACH,gBAAiBmY,EACbA,EAAIO,YACJH,EAAKb,QAAQxnD,IAAI,iBACvB,IAAMktB,EAAO,aAAc+6B,EAAMA,EAAI/Z,SAAW+Z,EAAIQ,aACpD38C,EAAQ,IAAI48C,SAASx7B,EAAMm7B,GAC7B,EAEAJ,EAAIU,QAAU,WACZX,EAAO,IAAIh8C,MAAM,0BACnB,EAEAi8C,EAAIW,UAAY,WACdZ,EAAO,IAAIh8C,MAAM,2BACnB,EAIkC,oBAAvBpK,EAAQinD,aAA2BZ,EAAIa,OAAOC,WAAannD,EAAQinD,YACxC,oBAA3BjnD,EAAQonD,gBAA+BpnD,EAAQonD,gBAH5C,WAAQf,EAAIgB,OAAQ,IAID,oBAAtBrnD,EAAQsnD,YAA0BjB,EAAIkB,QAAUvnD,EAAQsnD,WAEnE58C,OAAOD,KAAKzK,EAAQ4lD,SAAS3e,SAAQ,SAAA3kC,GACnC+jD,EAAImB,iBAAiBllD,EAAKtC,EAAQ4lD,QAAQtjD,GAC5C,IAIA+jD,EAAIoB,KAAKznD,EAAQsrB,KACnB,GAAE,EAEExV,GAAwBC,aAC5B,SAAAD,EAAYE,EAAS0xC,GAAezxC,YAAA,KAAAH,GAElC,IAAMI,EAAS,IAAIC,iBAAcH,EAAOxX,YAAA,CAAImpD,MAAOxB,IAAgBuB,IAEnEtxC,KAAKC,QAAO,eAAAja,EAAAka,aAAAC,eAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,eAAa,KAAD,EAEqB,OAF/CL,EAAKE,EAAAI,KACXhB,EAAOiB,UAAU,gBAAiBP,EAAK,UAAAtY,OAAasY,GAAU,IAC9DV,EAAOiB,UAAU,2BAA4B,QAAQL,EAAAM,OAAA,SAG9ClB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EAPW,EAQd,IAKaqO,GAFA,SAACwxC,GAAa,OAAK,IAAI5xC,GAAyB8xC,IAAUF,EAAc,EC3E1EG,GAAiBluC,aAAGC,QAAAC,aAAA,8ZAejC,kBAAAzd,EAAAka,aAAAC,eAAAC,MAAe,SAAAC,EAAOo5B,EAAM6X,GAAa,OAAAnxC,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAM,OAAA,SAE9B0wC,GAAoBJ,GAAerxC,QAAQwxC,GAAgBhY,GAC7D1lC,MAAK,SAAAmiC,GACF,MAAO,CACH//B,KAAc,OAAR+/B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAAK,GAE7B,KAAE,wBAAAuK,EAAAO,OAAA,GAAAZ,EAAA,KACT,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EARD,G,UCJMjJ,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCyiB,QAAS,CACLrkB,MAAO4B,EAAMyE,QAAQge,QAAQrO,MAEjC60C,SAAU,CACNC,WAAY,GAEhBC,QAAS,CACLxgC,QAAS,IAEhB,GAAG,CAAEvoB,KAAM,uBAgHGgpD,GA7GQ,SAAClqD,GACpB,IACImqD,EAGAnqD,EAHAmqD,KACAT,EAEA1pD,EAFA0pD,cACAU,EACApqD,EADAoqD,eAEE7oD,EAAUX,KAChBkQ,EAAwC1J,qBAAU2J,EAAAnM,YAAAkM,EAAA,GAA3Cu5C,EAAYt5C,EAAA,GAAEu5C,EAAev5C,EAAA,GACpCkP,EAA0B7Y,mBAAS,CAC/BmH,UAAMzE,EACNygD,WAAW,EACXC,UAAU,EACVP,SAAS,EACT7mD,WAAO0G,EACP2gD,QAAS,IACXvqC,EAAAtb,YAAAqb,EAAA,GAPKxU,EAAKyU,EAAA,GAAEyE,EAAQzE,EAAA,GAWlBqqC,GAKA9+C,EANA8C,KAMA9C,EALA8+C,WAEAN,GAGAx+C,EAJA++C,SAIA/+C,EAHAw+C,SAEAQ,GACAh/C,EAFArI,MAEAqI,EADAg/C,SAGEC,EAAiBv5C,uBAAY,SAAC44C,GAChC,IAAMU,EAAUV,GAAYA,EAAShgC,OAAS,EAAI4gC,KAAKC,MAAMb,EAAShgC,OAASggC,EAASpvC,MAAQ,KAAO,EACjGkwC,EAAsBC,MAAe,SAACL,GACxC9lC,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAEusC,WAAO,GAChD,GAAG,KACHI,EAAoBJ,EACxB,GAAG,CAAC9lC,IAEEomC,EAAgB55C,uBAAY,WAC9BwT,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GACV0d,GAAQ,IACXqsC,WAAW,EACXC,UAAU,EACVP,SAAS,GAAI,GAErB,GAAG,CAACtlC,IAEEqmC,EAAqB75C,uBAAY,SAACk5C,GACpCC,GAAgB,kBAAMD,CAAY,GACtC,GAAG,CAACC,IAEEW,EAAc95C,uBAAY,WACA,oBAAjBk5C,GAA6BA,GAC5C,GAAG,CAACA,IAyCJ,OAtCAt1C,qBAAU,WACFk1C,IACJtlC,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAEqsC,WAAW,GAAI,IACpDrB,GAAM1oD,wBAAC,CAAC,EACDkpD,GAAa,IAChBwB,MAAO,CAACf,KACT,CACClB,WAAYyB,EACZpB,UAAWyB,EACX3B,eAAgB4B,IAEf7+C,MAAK,SAAAmiC,GACF3pB,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GACV0d,GAAQ,IACX3P,KAAc,OAAR+/B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAChBg8C,WAAW,EACXC,UAAU,GAAI,IAElBJ,EAAuB,OAAR9b,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAC7B,IACC0jC,OAAM,SAAC7uC,GACJ+nD,QAAQC,IAAI,2IAAmChoD,GAE/CuhB,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GACV0d,GAAQ,IACXqsC,WAAW,EACXC,UAAU,EACVpnD,SAAK,GAEb,IACR,GAAG,CAAC6mD,EAAStlC,IAEb5P,qBAAU,WACN,OAAO,WACyB,oBAAjBs1C,GAA6BA,GAC5C,CACJ,GAAG,CAACA,IAGA9mD,eAAC8nD,KAAQ,CAAC3rD,UAAWkE,IAAU2P,YAAC,CAAC,EAAEhS,EAAQ0oD,QAAUA,IAAW5rD,SAAA,CAC5DU,cAACwK,KAAY,CAAAlL,SACRksD,EACKxrD,cAACm/B,KAAgB,CAACx+B,UAAW6B,EAAQwoD,SAAU9qD,QAAQ,cAAcmJ,KAAM,GAAIkjD,UAAW,EAAGjrD,MAAOoqD,IACpG1rD,cAACwsD,KAAQ,CAACzrD,OAAQ,CAAE0F,KAAM2kD,EAAK3kD,UAGzCzG,cAACysD,KAAY,CAACtwB,QAASivB,EAAKjpD,OAC3BqpD,IAAcN,GACXlrD,cAACkJ,KAAU,CAAC8U,KAAK,MAAM3U,KAAK,QAAQF,QAAS+iD,EAAY5sD,SACrDU,cAAC0sD,KAAS,CAACjiD,SAAS,cAMxC,EClIMsO,GAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,iBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,aAAAC,eAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,eAAa,KAAD,EACkC,OAD5DL,EAAKE,EAAAI,KACXhB,EAAOiB,UAAU,gBAAiBP,EAAK,UAAAtY,OAAasY,GAAU,IAAIE,EAAAM,OAAA,SAE3DlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EALW,EAMd,IAKaqO,GAFA,IAAIJ,GAAyB8xC,KCf/B8B,GAAe/vC,aAAGC,QAAAC,aAAA,kNCOzBjb,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC6qD,SAAU,CACNliC,QAAS,IAGhB,GAAG,CAAEvoB,KAAM,uBA0CG0qD,GAvCE,SAAC5rD,GACd,IACImqD,EAEAnqD,EAFAmqD,KACA0B,EACA7rD,EADA6rD,aAGEtqD,EAAUX,KAEhBkQ,EAAkC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAAzCg7C,EAAS/6C,EAAA,GAAEg7C,EAAYh7C,EAAA,GAExB8F,EAAe1F,uBAAY,WAC7B06C,GAAgBA,EAAa1B,EAAKjpD,KACtC,GAAG,CAAC2qD,IAUJ,OARA92C,qBAAU,WDlBC,IAAC88B,KCmBG,CACPxD,MAAO,CAAE2d,SAAU7B,EAAKjpD,ODnBzB4wC,GAAcz5B,QAAQqzC,GAAc7Z,ICoBpC1lC,MAAK,SAAAoC,GACJw9C,EAAax9C,EAAKA,KAAKA,MAAQ,KACnC,GACJ,GAAG,CAAC47C,IAGA5mD,eAAA8hB,WAAA,CAAAhnB,SAAA,CACAkF,eAAC8nD,KAAQ,CAAAhtD,SAAA,CACLU,cAACwK,KAAY,CAAAlL,SACTU,cAACwsD,KAAQ,CAAC7rD,UAAW6B,EAAQoqD,SAAU7rD,OAAQ,CAAE0F,KAAM2kD,EAAK3kD,UAEhEzG,cAACysD,KAAY,CAACtwB,QAASivB,EAAKjpD,OAC5BnC,cAACkJ,KAAU,CAAC8U,KAAK,MAAM3U,KAAK,QAAQF,QAAS2O,EAAaxY,SACtDU,cAAC0sD,KAAS,CAACjiD,SAAS,eAG3BsiD,GAAavoD,eAACuiD,KAAK,CAACz5B,SAAS,UAAShuB,SAAA,CAAC,yEAAgBytD,EAAUE,SAAS,kWAInF,ECzCMprD,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCmrD,OAAQ,CAAC,EACTz8B,KAAM,CACFpI,YAAatmB,EAAMG,UACnB2pB,aAAc9pB,EAAMG,WAExBirD,QAAS,CACL7+C,QAAS,OACTkU,eAAgB,iBAEvB,GAAG,CAAErgB,KAAM,uBAwGGirD,GArGU,SAACnsD,GACtB,IACI2H,EAOA3H,EAPA2H,KACAujD,EAMAlrD,EANAkrD,MACAxB,EAKA1pD,EALA0pD,cACA0C,EAIApsD,EAJAosD,cACAhC,EAGApqD,EAHAoqD,eACA7hD,EAEAvI,EAFAuI,QACA8jD,EACArsD,EADAqsD,aAEE9qD,EAAUX,KACVX,EAAYC,cAElB4Q,EAAsC1J,mBAAS,IAAG2J,EAAAnM,YAAAkM,EAAA,GAA3Cw7C,EAAWv7C,EAAA,GAAEw7C,EAAcx7C,EAAA,GAClCkP,EAAwC7Y,oBAAS,GAAM8Y,EAAAtb,YAAAqb,EAAA,GAAhDusC,EAAYtsC,EAAA,GAAEusC,EAAevsC,EAAA,GAEpCnL,qBAAU,WACN03C,GAAgB,GAChBF,EAAerB,EACnB,GAAG,CAACA,IAEJn2C,qBAAU,WACmB,GAAtBu3C,EAAY5kD,QAAe0kD,EAAc1kD,QAAU4kD,EAAY5kD,QAC9Dqb,YAAW,kBAAMspC,GAAc,GAAE,IAEzC,GAAG,CAACD,EAAeE,IAEnB,IAAM1kD,EAAcuJ,uBAAY,WAC5B5I,GACJ,GAAG,CAACA,IAEEmkD,EAAmBv7C,uBAAY,SAAC66C,GAClCO,EAAeD,EAAYznD,QAAO,SAAAslD,GAAI,OAAIA,EAAKjpD,MAAQ8qD,CAAQ,IACnE,GAAG,CAACM,IAEEK,EAAmBx7C,uBAAY,WACjCs7C,GAAgB,EACpB,GAAG,CAACJ,IAWJ,OACI9oD,eAAC4a,KAAM,CACHxW,KAAMA,EACN,kBAAgB,sBAChB,mBAAiB,4BACjB6F,WAAS,EACTqxB,SAAS,KACT+tB,sBAAoB,EACpBrrD,QAAS,CAAEspB,MAAOtpB,EAAQ0qD,QAAS5tD,SAAA,CAEnCU,cAACqf,KAAW,CAACpb,GAAG,sBAAqB3E,SAChC4B,EAAU,6BAEflB,cAACosC,KAAI,CAAC0hB,OAAK,EAACntD,UAAW6B,EAAQiuB,KAAKnxB,SAC9BmuD,EAQOF,EAAYloD,KAAI,SAAC+lD,EAAM1tC,GACxB,OACI1d,cAACmrD,GAAc,CAEXC,KAAMA,EACNT,cAAeA,EAAcS,EAAK3kD,OAASkkD,EAAc5iC,QACzDsjC,eAAgBA,GAHX3tC,EAMjB,IAjBa6vC,EAAYloD,KAAI,SAAC+lD,EAAM1tC,GAChC,OACI1d,cAAC6sD,GAAQ,CAELzB,KAAMA,EACN0B,aAAca,GAFTjwC,EAKjB,MAYR1d,cAAC0f,KAAa,CAAC/e,UAAW6B,EAAQ2qD,QAAQ7tD,SAEtCU,cAACC,KAAU,CAACC,QAAQ,QAAQC,MAAM,gBAAeb,SAAE4B,EAAU,4BAA6B,CAAEuqD,SAAU4B,EAAc1kD,OAAQiT,MAAO2xC,EAAY5kD,aAEnJnE,eAACqb,KAAa,CAAAvgB,SAAA,CACVU,cAAC8f,KAAM,CAAC3W,QAASN,EAAYvJ,SACxB4B,EAAU,mBAAoB,CAAEM,EAAG,aAKxCxB,cAAC8f,KAAM,CAAC3H,SAAUs1C,EAActkD,QAASykD,EAAkBztD,MAAM,UAAUk0C,WAAS,EAAA/0C,SAC/E4B,EAAU,mBAAoB,CAAEM,EAAG,kBAKxD,ECzHausD,GAAwBnxC,aAAGC,QAAAC,aAAA,qIAQzB,YAACg2B,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,GAAcz5B,QAAQy0C,GAAuB,CAChDxgD,QACDH,MAAK,SAAAmiC,GAEJ,MAAO,CACH//B,KAFkB,OAAR+/B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAI5B,IAAG0jC,MAAMC,KACZ,E,kJCnBK6a,GAAiB,MAEVC,GAAiB,SAACruD,GAI3B,OADmBouD,GAAel2B,KAAKl4B,GACtB,GAAA2B,OAAM2sD,KAAiB3sD,OAAG3B,GAASA,CACxD,EAwCawtC,GAAmB,SAAA59B,GAC5B,OAAKA,EACL/N,wBAAA,GACO+N,GAAI,IACP2hC,IAAK3hC,EAAK5P,KAAOquD,GAAez+C,EAAK5P,WAAQmL,EAC7CojD,aAAc3+C,EAAK4+C,cAAgBH,GAAez+C,EAAK4+C,oBAAiBrjD,EACxEsjD,aAAc7+C,EAAK8+C,UAAUjpD,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,IAC/CsqD,sBAAuB/+C,EAAK8+C,UAAU,GAAK9+C,EAAK8+C,UAAU,GAAG78B,cAAW1mB,EACxEsnC,UAAW7iC,EAAK0sB,OAAO72B,KAAI,SAAA+L,GAAK,OAAAA,EAAFnN,EAAW,MAP3B,IAStB,EAEauuC,GAAgB,SAAH/W,GACbA,EAATiX,UACWjX,EAAXkX,YACSlX,EAATmX,UACOnX,EAAPrR,QACSqR,EAAT6yB,UACY7yB,EAAZ4yB,aACG5yB,EAAH0V,IACY1V,EAAZ0yB,aACqB1yB,EAArB8yB,sBACM9yB,EAANS,OACST,EAAT4W,UACiB,OAAA5yC,YAAAg8B,EAAA/7B,GAAqB,ECxE7B8uD,GAAoB5xC,aAAGC,QAAAC,aAAA,sNAUrB,YAACg2B,GACd,IAEM9wC,EAFW8wC,EAATtjC,KAEWnK,KAAI,SAAA41B,GACrB,IAAMj5B,EAAQwwC,GAAcvX,GACtBqzB,EDJ4C,WAA6B,IAAd78B,EAAQ3mB,UAAAnC,OAAA,EAAAmC,UAAA,QAAAC,EACnEqc,GADoDtc,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,IACrCzF,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAIwtB,WAAU,IAEnD,OADkB1rB,QAAQqhB,EAAQze,QACb,CAAEye,gBAAYrc,CACvC,CCAsB0jD,CAAuCxzB,EAAKozB,aAAcpzB,EAAKszB,uBAEjF,OAAA9sD,wBAAA,GACKO,GAAK,IACRssD,aAEJ,IAMA,OAAOvb,KAAcz5B,QAAQk1C,GAAmB,CAC9CxsD,UAECoL,KAAI,eAAA/N,EAAAka,aAAAC,eAAAC,MAAC,SAAAC,EAAO61B,GAAQ,IAAAyD,EAAAC,EAAAyb,EAAA,OAAAl1C,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACuB,OAApCy0C,EAAgB,OAARnf,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsByb,MAAK30C,EAAAM,OAAA,SAElC,CACL7K,KAAM,CACJk/C,WAEH,wBAAA30C,EAAAO,OAAA,GAAAZ,EAAA,KACF,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EARI,IAQFooC,MAAMC,KACZ,E,+kBCnBYtd,GAAW,SAAC50B,GACrB,IACI6oB,EAcA7oB,EAdA6oB,QACAC,EAaA9oB,EAbA8oB,MACAC,EAYA/oB,EAZA+oB,YACA3O,EAWApa,EAXAoa,QACAya,EAUA70B,EAVA60B,kBACAE,EASA/0B,EATA+0B,WACA12B,EAQA2B,EARA3B,SACAqB,EAOAM,EAPAN,UAEW4qB,GAKXtqB,EANAuB,QAMAvB,EALAb,WAAS6a,EAKTha,EAJAia,gBAAQ,IAAAD,EAAGwb,KAAexb,EAC1BjW,EAGA/D,EAHA+D,MACA0xB,EAEAz1B,EAFAy1B,MACG5yB,EAAIrE,YACPwB,EAAKvB,IACHuwB,EAAkB0G,aAAuB11B,GACzC21B,EAAcrb,aAAeta,GAC7BuB,EAAUX,GAAUZ,GAEtBgpB,EAMA2M,EANA3M,aACArO,EAKAgb,EALAhb,MACAoP,EAIA4L,EAJA5L,OACApT,EAGAgf,EAHAhf,QACA8D,EAEAkb,EAFAlb,aACAe,EACAma,EADAna,YAEEyN,EAAU2M,eAEVC,EACF9L,IAAWpT,GAAqB,IAAVgE,IAAgBjO,OAAOD,KAAKgO,GAAc/S,OAEpE,OACInE,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,YAAarC,EAAQ8D,KAAM3F,IAC7C4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAE3BU,cAAC+2B,KAAK,CAAC/xB,MAAOA,EAAOilB,aAAcA,IAElCD,GACC3O,GAAWyO,IACT9pB,cAAC+rB,KAAWtqB,wBAAA,CACR4Z,QAASA,GACL4U,GAAe,IACnBnG,QAASA,EACT5O,SAAUA,KAIjB4b,IAAmC,IAAVJ,EACpBtwB,uBAAaswB,EAAOE,GAElBpyB,eAAA,OAAK7D,UAAW6B,EAAQ2T,KAAK7W,SAAA,CAEzBkF,eAAC+mB,EAAO,CACJ5qB,UAAWkE,IAAWrC,EAAQ+V,QAAO/D,YAAA,GAChChS,EAAQg1B,qBAAuB/a,EAAY9T,OAAS,IACtDrJ,SAAA,EAGoB,IAAtBw2B,GAA+BA,GAC5B91B,cAAC2uD,KAAsBltD,wBAAA,GAAKwuB,GAAe,IAAA3wB,SACtCw2B,KAGRx2B,GAEG8G,uBAAaqC,WAASijB,KAAKpsB,GAASmC,wBAAA,GAC7BwuB,GAAe,IAClB2+B,gBAAsC,IAAtB94B,KAEvBE,GAAc5vB,uBAAa4vB,EAAYY,KAbnC1M,GAeRH,GAAS3jB,uBAAa2jB,EAAO6M,SAMtD,EAEAf,GAASl0B,aAAe,CACpBmoB,QAAS9pB,cAACg3B,KAAc,IACxBhN,YAAahqB,cAACi3B,KAAsB,IACpCz0B,QAAS,CAAC,EACVpC,UAAWquB,KACXqH,kBAAmB91B,cAAC6uD,KAAsB,IAC1C74B,WAAYh2B,cAAC8uD,KAAiB,IAC9Bp4B,MAAO12B,cAACk3B,KAAK,KAGjB,IAAMr1B,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNuE,KAAM,CAAC,EACP6P,KAAM,CACF7H,QAAS,QAEbiK,QAAO/D,YAAA,CACHyT,UAAW,EACXkP,WAAYp1B,EAAMq1B,YAAYC,OAAO,cACrCvpB,SAAU,WACVwpB,KAAM,YACLv1B,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5BqP,UAAW,SAInBC,qBAAsB,CAClBvP,WAAYlmB,EAAMG,QAAQ,GAC1Bi1B,WAAYp1B,EAAMq1B,YAAYC,OAAO,eAEzCvN,QAAS,CACL3H,OAAQ,EACR7T,QAAS,OACTkU,eAAgB,WAChBoI,SAAU,QAEd6M,UAAW,CAAExpB,QAAS,IACzB,GACD,CAAE9L,KAAM,WAKNooB,GAAoB,SAAHlrB,KACnByH,SAAezH,EACfmc,YAAkBnc,EAClBmQ,KAAWnQ,EACX4qB,aAAmB5qB,EACnBoc,iBAAuBpc,EACvBytB,oBAA0BztB,EAC1Bqc,aAAmBrc,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACd0rB,QAAc1rB,EACd0tB,WAAiB1tB,EACjB2gB,QAAc3gB,EACdkO,IAAUlO,EACVuY,QAAcvY,EACd2rB,OAAa3rB,EACbqM,SAAerM,EACfG,MAAYH,EACZwe,SAAexe,EACf2tB,aAAmB3tB,EACnBqd,gBAAsBrd,EACtB4D,QAAc5D,EACd2hB,KAAW3hB,EACXkqB,YAAkBlqB,EAClBwf,QAAcxf,EACd4rB,QAAc5rB,EACduB,SAAevB,EACfod,YAAkBpd,EAClB6gB,WAAiB7gB,EACjB8gB,QAAc9gB,EACd+gB,WAAiB/gB,EACjBghB,QAAchhB,EACdsc,WAAiBtc,EACjB4tB,iBAAuB5tB,EACvBgd,KAAWhd,EACXuc,MACO,OAAAnc,YAAAJ,EAAAoS,GACA,EAEIokB,M,oBChKAk5B,GAtBQ,SAAC9tD,GAAK,OAC3BuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACfU,cAAC2sC,GAAW,CAAC9rC,OAAO,IAAIyO,UAAQ,IAChCtP,cAACwH,KAAc,CAAC3G,OAAO,kBAAkBwrB,UAAU,QAAQ1pB,MAAM,sCAAqCrD,SACpGU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAEtChI,cAACwxB,KAAmB,CAAC3wB,OAAO,eAAeuO,YAAY,EAAOid,UAAU,QAAQvmB,OAAQ,CAAE2rB,SAAU,QAAU9uB,MAAM,qCAAoCrD,SACtJU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE3ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,kBAAkBuO,YAAY,EAAOid,UAAU,QAAQvmB,OAAQ,CAAE2rB,SAAU,QAAU9uB,MAAM,wCAAuCrD,SAC5JU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAI3ChI,cAAC4sC,GAAgB,CACf/rC,OAAO,UACP8B,MAAM,mBACN8M,cAAc,OAET,E,8BChBI2N,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,sOAGd,ECEeF,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,4DAGd,ECLa0xC,GAAyB,SAACp/C,GACnC,IAAMhP,EAAWuE,eACjB,OAAOyM,aAAe,GAADrQ,OAAIX,EAAQ,cAAcgP,EACnD,E,iDCoEeq/C,GAjEe,SAAChuD,GAC3B,IAAQszB,EAA0CtzB,EAA1CszB,MACFrzB,GAD4CD,EAAnCiuD,WAAmCjuD,EAAvBN,UAAkBlB,YAAKwB,EAAKvB,IACrCyB,eAClBguD,EAAgCH,GAAuBz6B,EAAM,GAAGtwB,IAAGmrD,EAAAvpD,YAAAspD,EAAA,GAA5DE,EAAQD,EAAA,GAAEE,EAAWF,EAAA,GAC5Br9C,EAAgC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GAEtB0O,EAActO,uBAAY,SAACtJ,GAC7BN,EAAYM,EAAMM,cACtB,GAAG,CAACZ,IAEEK,EAAcuJ,uBAAY,WAC5B5J,EAAY,KAChB,GAAG,CAACA,IAEE+mD,EAAsBn9C,uBAAY,SAACo9C,GAAI,OAAK,SAAC1mD,GAC/CwmD,EAAYE,EAAKvrD,IACjBuE,EAAY,KAChB,CAAC,GAAE,CAAC8mD,EAAa9mD,IAEX9D,EAAS6vB,EAAMiP,MAAK,SAAAnkC,GAAK,OAAAA,EAAF4E,KAAgBorD,CAAQ,IAErD,OACI7qD,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC8f,KAAM,CACHnf,UAAU,aACVgC,MAAOzB,EAAU,wBAAyB,CACtCM,EAAG,cACHguD,KAAMtuD,EAAUwD,EAAO/B,MAAO,CAAEnB,EAAGkD,EAAO/B,UAE9C,gBAAc,iBACd,gBAAc,OACdwG,QAASuX,EAAYphB,SAErBU,cAAC0E,EAAOyF,KAAI,MAEhBnK,cAACuJ,KAAI,CACDtF,GAAG,iBACHsE,SAAUA,EACV2rB,aAAW,EACXtrB,KAAM7C,QAAQwC,GACdiB,QAASX,EAAYvJ,SAGpBi1B,EAAMzuB,QAAO,SAAAsL,GAAK,OAAAA,EAAFnN,KAAgBS,EAAOT,EAAE,IAAEoB,KAAI,SAAAmqD,GAC5C,IAAQvrD,EAA0BurD,EAA1BvrD,GAAItB,EAAsB6sD,EAAtB7sD,MAAaya,EAASoyC,EAAfrlD,KACnB,OACI3F,eAACO,KAAQ,CAELoE,QAASomD,EAAoBC,GAAMlwD,SAAA,CAElC8d,GACGpd,cAACwK,KAAY,CAAAlL,SACTU,cAACod,EAAI,MAGbpd,cAACC,KAAU,CAACC,QAAQ,UAASZ,SAAE4B,EAAUyB,EAAO,CAAEnB,EAAGmB,QARhDsB,EAWjB,QAIhB,E,qDCjEM0F,GAAUvB,IAAMwB,YAAW,SAAC3I,EAAO4I,GAAG,OAAK7J,cAACK,KAAIoB,YAAA,CAACqI,SAAUD,EAAK4lD,UAAU,QAAWxuD,GAAS,IAkCrFyuD,GAhCsB9lD,sBAAW,SAAC3I,EAAO4I,GACpD,IAAAiC,EAKI7K,EAJA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAC1B+pC,EAGA50C,EAHA40C,KACArsC,EAEAvI,EAFAuI,QAAOmmD,EAEP1uD,EADAqJ,cAAM,IAAAqlD,EAAG,SAAQA,EAGfzuD,EAAYC,cAEZuf,EAActO,uBAAY,SAACtJ,GACN,oBAAZU,GAAwBA,EAAQV,EAC/C,GAAG,CAACU,IAEJ,OACIxJ,cAAC+E,KAAQtD,wBAAA,CACLrB,UAAWuJ,GACXE,IAAKA,EACLgsC,KAAMA,EACNvrC,OAAQA,EACRslD,IAAI,WACJzvD,MAAM,UACNgJ,QAASuX,GACLzf,GAAK,IAAA3B,SAGR4B,EAAUyB,EAAO,CAAEnB,EAAGmB,MAGnC,IC5BMktD,GAAuB,CACzB9nC,QAAS,CAAE+nC,QAAS,QAASC,YAAa,SAC1C,kBAAmB,CAAED,QAAS,QAASC,YAAa,eACpD,kBAAmB,CAAED,QAAS,QAASC,YAAa,YAElDC,GAAuB,CAAC,EAMxBC,GAAgB,SAAC7E,GACnB,IAAKA,EAAK3kD,KAAM,CACZ,IAAMypD,EANY,SAAC9E,GACvB,OAAOA,EAAKjpD,KAAKsL,MAA+C,GAAxC29C,EAAKjpD,KAAKguD,YAAY,KAAO,IAAM,GAC/D,CAI2BC,CAAkBhF,GACrC,OAAO8E,EAAU,eAAA3uD,OAAkB2uD,GAAe,0BACtD,CACA,OAAO9E,EAAK3kD,IAChB,EA8Ge4pD,GA1GoB,SAACpvD,GAChC,IAAAqvD,EAKIrvD,EAJA0pD,qBAAa,IAAA2F,EAAGT,GAAoBS,EAAAC,EAIpCtvD,EAHAuvD,qBAAa,IAAAD,EAAGP,GAAoBO,EAAAzkD,EAGpC7K,EAFA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAC1BtC,EACAvI,EADAuI,QAEJuI,EAA0B1J,mBAAS,IAAG2J,EAAAnM,YAAAkM,EAAA,GAA/Bo6C,EAAKn6C,EAAA,GAAEy+C,EAAQz+C,EAAA,GACtBkP,EAA0C7Y,mBAAS,IAAG8Y,EAAAtb,YAAAqb,EAAA,GAA/CmsC,EAAalsC,EAAA,GAAEuvC,EAAgBvvC,EAAA,GACtChZ,EAAwBC,IAAMC,UAAS,GAAMC,EAAAzC,YAAAsC,EAAA,GAAtCS,EAAIN,EAAA,GAAEuP,EAAOvP,EAAA,GACd0mC,EAAWC,cACX33B,EAAUC,eACVJ,EAASC,eACTlW,EAAYC,cACZwvD,EAAiB7+C,iBAAO,MAExB8+C,EAAcx+C,uBAAY,WAC5ByF,GAAQ,GACR44C,EAAS,IACTC,EAAiB,GACrB,GAAG,CAACD,EAAUC,EAAkB74C,IAE1Bg5C,EAAmBz+C,uBAAY,WACjC48B,EAAS4E,gBACTkd,GAAW,CACPthD,KAAM69C,EAAchoD,KAAI,SAAA0rD,GACpB,IAAQ9sD,EAAkD8sD,EAAlD9sD,GAAI9B,EAA8C4uD,EAA9C5uD,KAAMsE,EAAwCsqD,EAAxCtqD,KAAM4C,EAAkC0nD,EAAlC1nD,KAAM8nC,EAA4B4f,EAA5B5f,IAAKgd,EAAuB4C,EAAvB5C,aAAcvuD,EAASmxD,EAATnxD,KACjD,OAAA6B,wBAAA,GACO+uD,GAAa,IAChBvsD,KACA9B,OACAvC,KAAMuxC,EAAG,OAAA5vC,OAAU3B,QAASmL,EAC5BqjD,cAAeD,EAAY,aAAA5sD,OAAgB3B,QAASmL,EACpD1B,OACA5C,QAIR,IACAuqD,WAAY,aACb5jD,MAAK,SAAAmiC,GACJp4B,EAAO,2BAA4B,CAAE+N,YAAa,CAAEjN,YAAqB,OAARs3B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAAKk/C,SAChFp3C,GACJ,IACK47B,OAAM,SAAA7uC,GACH8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,CAAE/L,KAAM,YAClG6Q,GACJ,IACCy8B,SAAQ,WACL/E,EAASgF,gBACT4c,GACJ,GACR,GAAG,CAACvD,EAAex1C,EAAS+4C,IAEtB/nD,EAAcuJ,uBAAY,WAC5B6+C,GAAW,CAAE1jD,IAAK8/C,EAAchoD,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,MAC7CmJ,MAAK,SAAAmiC,GAGN,IACC2D,OAAM,SAAA7uC,GACH+nD,QAAQC,IAAI,qIAAkChoD,EAClD,IACC0vC,SAAQ,WACL6c,GACJ,GACR,GAAG,CAACvD,EAAeuD,IAEbM,EAAc9+C,uBAAY,SAACtJ,GAC7B,IAAMqoD,EAAWroD,EAAMwB,OAAO6hD,MAC9B,GAxEa,SAACA,GAAK,OAAc,MAATA,KAAuB3jB,MAAMC,QAAQ0jB,IAAUA,EAAMxjD,OAAS,EAAgB,CAwEjGyoD,CAAajF,GAAlB,CACA,IAAMkF,EAAe7oB,MAAM1X,KAAKqgC,GAAU9rD,KAAI,SAAAwlC,GAAC,OAAI,IAAIymB,KAAK,CAACzmB,GAAIA,EAAE1oC,KAAM,CAAEsE,KAAMwpD,GAAcplB,IAAK,IACpG4lB,EAASY,GACTx5C,GAAQ,GACRrO,GAJgC,CAKpC,GAAG,CAACinD,EAAU54C,EAASrO,IAEjB+nD,EAAqBn/C,uBAAY,SAAC2+C,GACpCL,GAAiB,SAAA12C,GAAI,SAAAzY,OAAA6J,aAAQ4O,GAAI,CAAE+2C,GAAe,GACtD,GAAG,CAACL,IAEJ,OAAQlsD,eAAA8hB,WAAA,CAAAhnB,SAAA,CACJU,cAAA,SACI6J,IAAK8mD,EACLa,OAAQC,KACRr5C,MAAO,CAAE9J,QAAS,QAClBrK,GAAG,cACHwC,KAAK,OACLwJ,UAAQ,EACRlN,SAAUmuD,IAEdlxD,cAAA,SAAOgP,QAAQ,cAAa1P,SACxBU,cAAC+E,KAAQ,CAACoE,QAASN,EAAYvJ,SAAE4B,EAAUyB,OAE/C3C,cAACotD,GAAgB,CACbxkD,KAAMA,EACNujD,MAAOA,EACPkB,cAAeA,EACf1C,cAAeA,EACf2C,aAAcuD,EACdrnD,QAASX,EACTwiD,eAAgBkG,MAG5B,E,wOCtHaG,GAA0B,SAAHryD,GACxBA,EAARyH,SACYzH,EAAZ0gB,aACwB1gB,EAAxBsyD,yBACOtyD,EAAPif,QACMjf,EAANuyD,OACQvyD,EAAR+e,SACM/e,EAAN0B,OACQ1B,EAARuX,SACQvX,EAARuB,SACMvB,EAANq3C,OACar3C,EAAbu5C,cACQv5C,EAAR4X,SACO,OAAAxX,YAAAJ,EAAAK,GACA,EAGLmyD,GAAiB,SAAC5wD,GACpB,IAAQsH,EAA4BtH,EAA5BsH,SAAUK,EAAkB3H,EAAlB2H,KAAMY,EAAYvI,EAAZuI,QAClBX,EAAcuJ,uBAAY,WAC5B5I,GACJ,GAAG,CAACA,IAEJ,OACIhF,eAAC+E,KAAI,CACDtF,GAAG,iBACHsE,SAAUA,EACV2rB,aAAW,EACXtrB,KAAMA,EACNY,QAASX,EAAYvJ,SAAA,CAIrBU,cAAC0vD,GAA4B,CAAC/sD,MAAM,4CAAmBkzC,KAAI,GAAAt0C,OAAKuwD,IAAsB,WAAW3oD,QAASN,IAC1G7I,cAAC0vD,GAA4B,CAAC/sD,MAAM,yDAAiBkzC,KAAI,GAAAt0C,OAAKwwD,IAAW,WAAW5oD,QAASN,IAC7F7I,cAACqwD,GAA0B,CAAC7mD,QAASX,MAGjD,EAGMmpD,GAAmB,SAAC/wD,GAUlBA,EARA6F,SADJ,IAEInG,EAOAM,EAPAN,UACOsL,GAMPhL,EANAuB,QAMAvB,EALAkJ,aAAI,IAAA8B,EAAG7B,GAAW6B,EAAAH,EAKlB7K,EAJA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAE1B5L,GAEAe,EAHA+K,YAGA/K,EAFAf,SACG4D,EAAIrE,YACPwB,EAAKwQ,IACHjP,EAAUX,GAAUZ,GACpBC,EAAYC,cACZ8wD,EAAUC,cAAc,SAACnwD,GAAK,OAChCA,EAAM2gB,YAAYwF,KAAK,KAAK,IAIhCnW,GAFiB5M,eAEekD,mBAAS,OAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GAEtB0O,EAActO,uBAAY,SAACtJ,GAC7BN,EAAYM,EAAMM,cACtB,GAAG,CAACZ,IAEEK,EAAcuJ,uBAAY,WAC5B5J,EAAY,KAChB,GAAG,CAACA,IAEJ,OAAOypD,EACHztD,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAACmyD,KAAG1wD,wBAAA,CACA0H,QAASuX,EACTvgB,MAAM,UACNQ,UAAWkE,IAAWrC,EAAQ4vD,SAAUzxD,GACxC,aAAYgC,GAASzB,EAAUyB,GAC/B,gBAAc,iBACd,gBAAc,QACV+uD,GAAwB5tD,IAAK,IAAAxE,SAEhC6K,KAELnK,cAAC6xD,GAAc,CACXtpD,SAAUA,EACVK,KAAM7C,QAAQwC,GACdiB,QAASX,OAKjBrE,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC8f,KAAMre,wBAAA,CACH0H,QAASuX,EACT/f,UAAWA,EACXgC,MAAOA,EACPzC,QAASA,EACT,gBAAc,iBACd,gBAAc,QACV4D,GAAI,IAAAxE,SAEP6K,KAELnK,cAAC6xD,GAAc,CACXtpD,SAAUA,EACVK,KAAM7C,QAAQwC,GACdiB,QAASX,MAKzB,EAEMuB,GAAcpK,cAACqyD,KAAU,IAEzBxwD,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNqwD,SAAU,CACNjyD,MAAO4B,EAAMyE,QAAQG,gBAAgB5E,EAAMyE,QAAQ21B,QAAQhmB,MAC3DtT,OAAQ,EACRwf,IAAK,OACLE,MAAO,GACPmiB,OAAQ,GACRpiB,KAAM,OACNxU,SAAU,QACVqU,OAAQ,KAEf,GACD,CAAEhgB,KAAM,qBAKG0K,kBAAKmlD,IAAkB,SAACM,EAAWjd,GAC9C,OACIid,EAAUxrD,WAAauuC,EAAUvuC,UACjCwrD,EAAU3vD,QAAU0yC,EAAU1yC,OAC9B2vD,EAAUpxD,YAAcm0C,EAAUn0C,WAClCoxD,EAAU/yD,KAAO81C,EAAU91C,IAC3B+yD,EAAUn6C,WAAak9B,EAAUl9B,QAEzC,I,mECrJM6C,GAAc,SAAC/Z,GACnB,IACEN,EAOEM,EAPFN,UACAua,EAMEja,EANFia,SACAG,EAKEpa,EALFoa,QAEAk3C,GAGEtxD,EAJFiE,QAIEjE,EAHFsxD,UACAh+B,EAEEtzB,EAFFszB,MACGzwB,EAAIrE,YACLwB,EAAKvB,IACT4b,EAOIC,aAAeta,GANjBua,EAAWF,EAAXE,YACAC,EAAgBH,EAAhBG,iBACAC,EAAYJ,EAAZI,aACA5U,EAAQwU,EAARxU,SACA6U,EAAUL,EAAVK,WACAC,EAAKN,EAALM,MAEIhb,EAAWuE,aAAmBrB,GACpCqrD,EAAeH,GAAuBz6B,EAAM,GAAGtwB,IAAxCurD,EAA2C3pD,YAAAspD,EAAA,GAAvC,GAEX,OAAOnpD,mBAAQ,kBACbxB,eAACuX,KAAUta,wBAAA,CAACd,UAAWA,GAAeqb,aAAsBlY,IAAK,IAAAxE,SAAA,CAC9D+b,GACCjV,uBAAaiV,EAAS,CACpBza,WACA+a,aACAF,mBACAC,eACAO,QAAS,WAEZs2C,GAAqB,SAAT/C,GAAmBxvD,cAACwyD,KAAU,CAACtrD,OAAQqrD,IACnDh+B,GAASv0B,cAACivD,GAAc,CAAC16B,MAAOA,IAChChL,KAAYI,IAAI,SAAU/oB,IAAaZ,cAACgyD,GAAgB,CAAClrD,SAAUA,OASzD,GAGb,CACElG,EACA6a,EACAC,EACAC,EACAN,EACAO,EACA9U,EACAnG,EACA6a,EACAN,GAGN,EAGAF,GAAYrZ,aAAe,CACzB8a,YAAa,GACbC,gBAAiB,kBAAM,IAAI,GAGd1B,U,8BC/CAy3C,GAhBa,SAAAxxD,GAIxB,OAHgBA,EAAMya,aAAa0O,QAI/B5lB,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC0yD,KAAiBjxD,YAAA,GAAKR,IACvBjB,cAAC2yD,KAAgBlxD,YAAA,CAACwV,UAAU,GAAWhW,OAG3CjB,cAACkY,WAAQ,CAAA5Y,SACLU,cAAC4yD,KAAgBnxD,YAAA,CAACyV,aAAa,cAAiBjW,KAG5D,E,kVCbaywD,GAA0B,SAAHryD,GACxBA,EAARyH,SACYzH,EAAZ0gB,aACwB1gB,EAAxBsyD,yBACOtyD,EAAPif,QACMjf,EAANuyD,OACQvyD,EAAR+e,SACM/e,EAAN0B,OACQ1B,EAARuX,SACQvX,EAARuB,SACMvB,EAANq3C,OACar3C,EAAbu5C,cACQv5C,EAAR4X,SACW5X,EAAXod,YACepd,EAAfqd,gBACard,EAAbsrD,cACatrD,EAAbmxD,cACO,OAAA/wD,YAAAJ,EAAAK,GACA,EAGLmyD,GAAiB,SAAC5wD,GACpB,IAAQsH,EAA6CtH,EAA7CsH,SAAUK,EAAmC3H,EAAnC2H,KAAMY,EAA6BvI,EAA7BuI,QAASzI,EAAoBE,EAApBF,OAAW+C,EAAIrE,YAAKwB,EAAKwQ,IACpD5I,EAAcuJ,uBAAY,WAC5B5I,GACJ,GAAG,CAACA,IAEJ,OACIhF,eAAC+E,KAAI,CACDtF,GAAG,iBACHsE,SAAUA,EACV2rB,aAAW,EACXtrB,KAAMA,EACNY,QAASX,EAAYvJ,SAAA,CAIrBU,cAAC0vD,GAA4B,CAAC/sD,MAAM,4CAAmBkzC,KAAI,GAAAt0C,OAAKuwD,IAAsB,qBAAAvwD,OAA0B,OAANR,QAAM,IAANA,OAAM,EAANA,EAAQkD,IAAMkF,QAASN,IACjI7I,cAAC0vD,GAA4B,CAAC/sD,MAAM,yDAAiBkzC,KAAI,GAAAt0C,OAAKwwD,IAAW,qBAAAxwD,OAA0B,OAANR,QAAM,IAANA,OAAM,EAANA,EAAQkD,IAAMkF,QAASN,IACpH7I,cAACqwD,GAA0B5uD,wBAAA,GAAKqC,GAAI,IAAE0F,QAASX,OAG3D,EAEMgqD,GAA4B,SAAC5xD,GAU3BA,EARA6F,SADJ,IAEInG,EAOAM,EAPAN,UACOsL,GAMPhL,EANAuB,QAMAvB,EALAkJ,aAAI,IAAA8B,EAAG7B,GAAW6B,EAAAH,EAKlB7K,EAJA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAE1B5L,GAEAe,EAHA+K,YAGA/K,EAFAf,SACG4D,EAAIrE,YACPwB,EAAKyR,IACHlQ,EAAUX,KAChBkQ,EAAgC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GAEtB0O,EAActO,uBAAY,SAACtJ,GAC7BN,EAAYM,EAAMM,cACtB,GAAG,CAACZ,IAEEK,EAAcuJ,uBAAY,WAC5B5J,EAAY,KAChB,GAAG,CAACA,IAEJ,OACIhE,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC8f,KAAMre,wBAAA,CACH0H,QAASuX,EACT/f,UAAWkE,IAAWlE,EAAW6B,EAAQypB,QACzCtpB,MAAOA,EACPzC,QAASA,EACT,gBAAc,iBACd,gBAAc,QACVwxD,GAAwB5tD,IAAK,IAAAxE,SAEhC6K,KAELnK,cAAC6xD,GAAcpwD,YAAA,CACX8G,SAAUA,EACVK,KAAM7C,QAAQwC,GACdiB,QAASX,GACL/E,MAIpB,EAEMsG,GAAcpK,cAACqyD,KAAU,IAEzBxwD,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCkqB,OAAQ,CACJ9rB,MAAO4B,EAAMyE,QAAQ0lB,KAAKC,WAEjC,GAAG,CAAEhqB,KAAM,8BAIG0K,kBAAKgmD,IAA2B,SAACP,EAAWjd,GACvD,OACIid,EAAUxrD,WAAauuC,EAAUvuC,UACjCwrD,EAAU3vD,QAAU0yC,EAAU1yC,OAC9B2vD,EAAUpxD,YAAcm0C,EAAUn0C,WAClCoxD,EAAU/yD,KAAO81C,EAAU91C,IAC3B+yD,EAAUn6C,WAAak9B,EAAUl9B,QAEzC,I,sECvGMtW,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF8hB,WAAY,EACZwD,cAAe,EACf9D,UAAW,GAElB,IAEKwE,GAAmB,SAAArrB,GACrB,IAAQN,EAAwEM,EAAxEN,UAAqB0a,GAAmDpa,EAA7Dia,SAA6Dja,EAAnDoa,SAASsvC,EAA0C1pD,EAA1C0pD,cAAe6F,EAA2BvvD,EAA3BuvD,cAAkB1sD,EAAIrE,YAAKwB,EAAKvB,IAC/E8C,EAAUX,KAChByZ,EAQIC,aAAeta,GANfwa,GADWH,EAAXE,YACgBF,EAAhBG,kBACAC,EAAYJ,EAAZI,aACA5U,EAAQwU,EAARxU,SACA2V,EAAWnB,EAAXmB,YACAd,EAAUL,EAAVK,WACAC,EAAKN,EAALM,MAEEhb,EAAWuE,aAAmBrB,GAEpC,OAAOkC,mBACH,kBACIxB,eAACuX,KAAUta,wBAAA,CACPd,UAAWA,EACX6B,QAAS,CAAE8D,KAAM9D,EAAQ8D,OAErB0V,aAAsBlY,IAAK,IAAAxE,SAAA,CAE9B+b,GACGjV,uBAAaiV,EAAS,CAClBza,WACA+a,aACAF,mBACAC,eACAO,QAAS,WAEhBsN,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC6yD,GAAyBpxD,YAAA,CAACqF,SAAUA,EAAU6jD,cAAeA,EAAe6F,cAAeA,GAAmB1sD,IACvJ9D,cAACosB,GAAuB3qB,YAAA,GAAKqC,OACpB,GAEjB,CAAClD,EAAU6a,EAAkBC,EAAce,EAAapB,EAASO,GAEzE,EAIA0Q,GAAiB3qB,aAAe,CAC5B8a,YAAa,GACbC,gBAAiB,kBAAM,IAAI,GAGhB4P,U,+fC7DTC,GAAY,SAAHltB,GASR,IARHC,EAAQD,EAARC,SACAwqB,EAAOzqB,EAAPyqB,QACAzO,EAAOhc,EAAPgc,QACWkQ,EAAOlsB,EAAlBe,UACAQ,EAAQvB,EAARuB,SACA+pD,EAAatrD,EAAbsrD,cACA6F,EAAanxD,EAAbmxD,cACGvvD,EAAKxB,YAAAJ,EAAAK,IAIFozD,EAAqBvoC,GAAkBtpB,GAE7C,OACIjB,cAACwsB,KAAuB,CAAClrB,MAAOV,EAAStB,SACrCkF,eAACioB,KAAQhrB,wBAAA,GACDR,GAAK,IAAA3B,SAAA,EAEP+b,GAAWyO,IACT9pB,cAAC0sB,GAAgBjrB,wBAAA,GACTqxD,GAAkB,IACtBz3C,QAASA,EACTyO,QAASA,EACT6gC,cAAeA,EACf6F,cAAeA,KAIvBhsD,eAAC+mB,EAAO,CAAAjsB,SAAA,CACH8G,uBAAaqC,WAASijB,KAAKpsB,GAASmC,YAAA,GAC9BqxD,IAEP9yD,cAAC2sB,KAAU,YAS/B,EAEAJ,GAAU5qB,aAAe,CACrBmoB,QAAS9pB,cAAC4sB,GAAuB,IAEjCxsB,UAAWysB,KAIXjrB,UAAU,GAId,IAAM2oB,GAAoB,SAAHnZ,KACnBtK,SAAesK,EACfoK,YAAkBpK,EAClB5B,KAAW4B,EACX6Y,aAAmB7Y,EACnBqK,iBAAuBrK,EACvB0b,oBAA0B1b,EAC1BsK,aAAmBtK,EACnByK,UAAgBzK,EAChBqY,QAAcrY,EACdsY,QAActY,EACd2Z,QAAc3Z,EACd2b,WAAiB3b,EACjB4O,QAAc5O,EACd7D,IAAU6D,EACVwG,QAAcxG,EACd4Z,OAAa5Z,EACb1F,SAAe0F,EACf5R,MAAY4R,EACZyM,SAAezM,EACf4b,aAAmB5b,EACnBsL,gBAAsBtL,EACtBnO,QAAcmO,EACd4P,KAAW5P,EACXmY,YAAkBnY,EAClByN,QAAczN,EACdxQ,SAAewQ,EACfqL,YAAkBrL,EAClB8O,WAAiB9O,EACjB+O,QAAc/O,EACdgP,WAAiBhP,EACjBiP,QAAcjP,EACduK,WAAiBvK,EACjB6b,iBAAuB7b,EACvBiL,KAAWjL,EACXwK,MACO,OAAAnc,YAAA2R,EAAAK,GACA,EAEI8a,M,UC1ETwmC,GAAY,CAChB,CAAE9uD,GAAI,QAAStB,MAAO,kCAAmCwH,KAAM6oD,IAC/D,CAAE/uD,GAAI,OAAQtB,MAAO,iCAAkCwH,KAAM8oD,KAGzDC,GAAe,CAAC,OAAQ,OAAQ,YAAa,aAI7CC,GAAW,SAAClyD,GAChB,IAAMuB,EAAUwyB,eACV/E,EAAkByF,aAAkBz0B,GAC1CkuD,EAAeH,GAAuB+D,GAAU,GAAG9uD,IAA5CurD,EAA+C3pD,YAAAspD,EAAA,GAA3C,GACXp9C,EAAkC1J,qBAAU2J,EAAAnM,YAAAkM,EAAA,GAArCqhD,EAASphD,EAAA,GAAEqhD,EAAYrhD,EAAA,GAExBshD,EAAelhD,uBAAY,SAACnO,GAChCovD,EAAapvD,EACf,GAAG,CAACovD,IAEExqD,EAAcuJ,uBAAY,WAC9BihD,GACF,GAAG,CAACA,IAEJ,OACE7uD,eAACoxB,KAAmB,CAACt0B,MAAO2uB,EAAgB3wB,SAAA,CAC1CU,cAACuzD,GAAY9xD,oCAAA,GACPR,GACAgvB,GAAe,IACnBnG,QAAS9pB,cAACwzD,GAAe,CAACjB,SAAUW,GAAc3+B,MAAOw+B,KACzDj9B,kBAAmB91B,cAACyyD,GAAmB,IACvCp3C,QAASrb,cAAC+uD,GAAc,IACxB3uD,UAAoB,UAATovD,EAAmB/gC,KAAO,MAAMnvB,SAGhC,UAATkwD,EACAhrD,eAACwrC,KAAQ,CAACyjB,SAAUH,EAAah0D,SAAA,CAC/BU,cAAC0zD,KAAa,CAACxrD,cAAerD,IAAWrC,EAAQutC,aAAcvtC,EAAQytC,cACvEjwC,cAACo1B,KAAiB,CAACv0B,OAAO,OAAOqH,cAAe1F,EAAQ6yB,iBACxDr1B,cAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAQ4I,UAAU,EAAM31B,SAClEU,cAAC6G,KAAS,CAAChG,OAAO,OAAOwI,KAAK,YACZ,IACpBrJ,cAAC2zD,KAAa,CAAC9yD,OAAO,OAAOqH,cAAe1F,EAAQutC,eACpD/vC,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,eACrD/vC,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,eACrD/vC,cAAC4zD,KAAqB,CAAC1rD,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQ0tC,iBAG3ElwC,cAAC6zD,KAAQ,CAACJ,SAAUH,EAAah0D,SAC/BU,cAAC8zD,KAAQ,CAAC9uD,MAAM,OAAOpF,KAAK,OAAOwuD,cAAc,gBAAgB3nD,KAAK,OAAOstD,SAAO,SAI1F/zD,cAACg0D,KAAe,CAACZ,UAAWA,EAAW5pD,QAASX,EAAYvJ,SAC1DU,cAACi0D,KAAS,QAKlB,EAEAd,GAASxxD,aAAe,CACtB0a,KAAM,CAAE5S,MAAO,YAAaqX,MAAO,SAI9B,IAAMozC,GAAoB,SAACjzD,GAAW,IAADksB,EACpCgnC,EAAUn/B,eAChBtjB,EAAeE,aAAe,iBAAkB,SAAzC49C,EAAiD3pD,YAAA6L,EAAA,GAA7C,GACXwP,EAAkC7Y,qBAAU8Y,EAAAtb,YAAAqb,EAAA,GAArCkyC,EAASjyC,EAAA,GAAEkyC,EAAYlyC,EAAA,GACxBizC,EAAe,CAAExzD,SAAsB,QAAdusB,EAAElsB,EAAMF,cAAM,IAAAosB,OAAA,EAAZA,EAAclpB,IAEzCqvD,EAAelhD,uBAAY,SAACnO,GAChCovD,EAAapvD,EACf,GAAG,CAACovD,IAEExqD,EAAcuJ,uBAAY,WAC9BihD,GACF,GAAG,CAACA,IAGJ,OACErzD,cAACq0D,GAAa5yD,wBAAA,GACRR,GAAK,IACTb,UAAoB,UAATovD,EAAmB/gC,KAAO,MAAMnvB,SAE3CkF,eAAC0T,WAAQ,CAAA5Y,SAAA,CACI,UAATkwD,EACAhrD,eAACwrC,KAAQ,CAACyjB,SAAUH,EAAah0D,SAAA,CAC/BU,cAAC0zD,KAAa,CAACxrD,cAAerD,IAAWsvD,EAAQpkB,aAAcokB,EAAQlkB,cACvEjwC,cAACo1B,KAAiB,CAACv0B,OAAO,OAAOqH,cAAeisD,EAAQ9+B,iBACxDr1B,cAAC2zD,KAAa,CAAC9yD,OAAO,OAAOqH,cAAeisD,EAAQpkB,eACpD/vC,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAeisD,EAAQpkB,eACrD/vC,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAeisD,EAAQpkB,eACrD/vC,cAAC4zD,KAAqB,CAAC1rD,cAAa,GAAA3G,OAAK4yD,EAAQpkB,aAAY,KAAAxuC,OAAI4yD,EAAQjkB,iBAG3ElwC,cAAC6zD,KAAQ,CAACJ,SAAUH,EAAah0D,SAC/BU,cAAC8zD,KAAQ,CAAC9uD,MAAM,OAAOpF,KAAK,OAAOwuD,cAAc,gBAAgB3nD,KAAK,OAAOstD,SAAO,MAGxF/zD,cAACg0D,KAAe,CAACZ,UAAWA,EAAW5pD,QAASX,EAAYvJ,SAC1DU,cAACi0D,KAAS,CAACG,aAAcA,WAKnC,EAGejB,M,mGChITmB,GAAqB,SAACrzD,GACxB,IACIN,EAMAM,EANAN,UAASsa,EAMTha,EALAia,gBAAQ,IAAAD,GAAQA,EAAAE,EAKhBla,EAJAma,gBAAQ,IAAAD,GAAQA,EAChBE,EAGApa,EAHAoa,QACAnW,EAEAjE,EAFAiE,QACGpB,EAAIrE,YACPwB,EAAKvB,IACT4b,EAOIC,aAAeta,GANfua,EAAWF,EAAXE,YACAC,EAAgBH,EAAhBG,iBACAC,EAAYJ,EAAZI,aACA5U,EAAQwU,EAARxU,SACA6U,EAAUL,EAAVK,WACAC,EAAKN,EAALM,MAEEhb,EAAWuE,aAAmBrB,GAC5B+X,EAAcC,aAAsBhY,GAApC+X,UAER,OAAO7V,mBAAQ,kBACXxB,eAACuX,KAAUta,wBAAA,CAACd,UAAWA,GAAeqb,aAAsBlY,IAAK,IAAAxE,SAAA,CAC5D+b,GACGjV,uBAAaiV,EAAS,CAClBza,WACA+a,aACAF,mBACAC,eACAO,QAAS,WAEjBjc,cAACkc,KAAa,CAAChX,QAASA,IACxBlF,cAACmc,KAAY,CAACjX,QAASA,KACT,IAAbgW,GACGlb,cAACoc,KAAY,CACTlB,SAAUA,EACV/C,SAAoB,IAAVyD,EACVhb,SAAUA,EACVyb,KAAMb,EACNE,aAAcA,EACd64C,WAAY,OAGN,IAAbn5C,GACGpb,cAACsc,KAAY,CACTlB,SAAUA,EACVxa,SAAUA,IAGjBib,GAAa7b,cAACuc,KAAY,CAACzV,SAAUA,EAAU5G,QAAQ,YAAYsc,kBAAgB,OAC3E,GAGb,CACI5b,EACA6a,EACAC,EACAC,EACAN,EACAO,EACA9U,EACAnG,EACA6a,EACAN,EACAW,GAGZ,EAkBAy4C,GAAmB3yD,aAAe,CAC9B8a,YAAa,GACbC,gBAAiB,kBAAM,IAAI,GAGhB43C,U,qBC9FTE,GAAqB,CAAC,UAEtBC,GAAsB,SAACxzD,GACzB,IAAQF,EAAWE,EAAXF,OACFuW,EAAUC,eACV3W,EAAWG,EAAO2zD,aAClBzwD,EAAKlD,EAAO4zD,WACZnlD,EAAOzO,EAAOiX,aACdmH,EAAWpe,EAAOyO,KAClBvM,EAAU,CACZ6T,UAAW,WACPQ,GACJ,GAGJ4lC,EAA8BC,aAAUv8C,EAAUqD,EAAIuL,EAAM2P,EAAUlc,GAAQ2xD,EAAA/uD,YAAAq3C,EAAA,GAAvE2X,EAAMD,EAAA,GAAIh9C,EAAOg9C,EAAA,GAAPh9C,QACjB,OACI5X,cAAC8f,KAAM,CAACnd,MAAM,mBAAmBwG,QAAS0rD,EAAQ18C,SAAUP,EAAQtY,SAChEU,cAAC80D,KAAW,KAGxB,EAUeC,GARuB,SAAC9zD,GAEnC,OADmBA,EAAXF,QAEgByzD,GAAmB1gC,SAAS7yB,EAAMF,OAAOkQ,QAE1DjR,cAACy0D,GAAmBhzD,YAAA,GAAKR,IAHZ,IAIxB,EC7BauzB,GAAQ,CACjB,CAAEjvB,IAAK,KAAMmvB,OAAQ,+BACrB,CAAEnvB,IAAK,SAAUmvB,OAAQ,mCACzB,CAAEnvB,IAAK,eAAgBmvB,OAAQ,yCAC/B,CAAEnvB,IAAK,OAAQmvB,OAAQ,iCACvB,CAAEnvB,IAAK,cAAemvB,OAAQ,wCAC9B,CAAEnvB,IAAK,YAAamvB,OAAQ,qCAAsCjyB,OAAQoyB,MAC1E,CAAEtvB,IAAK,OAAQmvB,OAAQ,6BAAUjyB,OAAQqyB,aAAc,UAAW,QAOvDkgC,GAJY,WAAH,OAASv/B,aAAYjB,GAAM,ECbtCygC,GAAiB,CAC1B,QACA,WACA,QACA,aACA,gBACA,WACA,MACA,QACA,eACA,aACA,YACA,SACA,oBACA,OACA,UACA,YACA,UACA,cACA,UACA,OACA,0BAGSnrC,GAAU,CACnB,CAAE7lB,GAAI,SAAU9B,KAAM,yCACtB,CAAE8B,GAAI,SAAU9B,KAAM,yCACtB,CAAE8B,GAAI,SAAU9B,KAAM,yCACtB,CAAE8B,GAAI,UAAW9B,KAAM,0CACvB,CAAE8B,GAAI,SAAU9B,KAAM,yCACtB,CAAE8B,GAAI,YAAa9B,KAAM,4CACzB,CAAE8B,GAAI,cAAe9B,KAAM,8CAC3B,CAAE8B,GAAI,QAAS9B,KAAM,yCAGZ+yD,GAAgB,CACzB,CAAEjxD,GAAI,QAAS9B,KAAM,8CACrB,CAAE8B,GAAI,aAAc9B,KAAM,mDAC1B,CAAE8B,GAAI,YAAa9B,KAAM,kDACzB,CAAE8B,GAAI,SAAU9B,KAAM,+CACtB,CAAE8B,GAAI,UAAW9B,KAAM,gDACvB,CAAE8B,GAAI,cAAe9B,KAAM,qDCrBhBgzD,GAfkB,SAACl0D,GAC9B,IAAMs1B,EAAOqhB,eAEPvQ,EAAej1B,uBAAY,SAAAtJ,GAE7BytB,EAAKuhB,OAAO,aAAc,KAC9B,GAAG,IAGH,OACI93C,cAACkxB,KAAWzvB,wBAAA,GAAKR,GAAK,IAAEkwB,QAAS+jC,GAAepvD,OAAQmvD,GAAgBlyD,SAAUskC,IAE1F,ECKe+tB,GAjBgB,SAACn0D,GAC5B,IACML,EADa2/C,eAAXhiC,OACgBm2C,aAExB,OAAK9zD,EAMDZ,cAACwH,KAAc/F,wBAAA,GAAKR,GAAK,IAAEorB,UAAWzrB,EAAU+B,MAAK,wCAAApB,OAA0CX,GAAWtB,SACtGU,cAAC2H,KAAiB,CAACI,gBAAiBC,UANxChI,cAAC4f,KAASne,wBAAA,GAAKR,GAAK,IAAEkX,UAAQ,IAStC,ECKek9C,GAdW,SAACp0D,GAAK,OAC5BuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACbU,cAAC2sC,GAAW,CAAC9rC,OAAO,IAAIyO,UAAQ,IAChCtP,cAACkxB,KAAW,CAACrwB,OAAO,SAASyO,UAAQ,EAAC6hB,QAASrH,KAC/C9pB,cAACm1D,GAAwB,CAACt0D,OAAO,eAAeyO,UAAQ,IACxDtP,cAACo1D,GAAsB,CAACv0D,OAAO,eAC/Bb,cAACuH,KAAqB,CAAC1G,OAAO,cAAcwrB,UAAU,UAAUhQ,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,OAASjC,QAAS,MAChH7e,cAACuxB,KAAa,CAAC1wB,OAAO,kBACtBb,cAACuxB,KAAa,CAAC1wB,OAAO,qBACjB,EC+CAy0D,GAAyB,SAACr0D,GACnC,IAAMuB,EAAUwyB,eACVj0B,EAASurC,eAETipB,EAAkBnjD,uBAAY,SAACojD,EAAW93C,GAC5C,IAAU,OAAN3c,QAAM,IAANA,OAAM,EAANA,EAAQkD,MAAOuxD,EAAUvxD,GAAI,MAAO,CAAEsC,gBAAiB,sBAC/D,GAAG,CAAO,OAANxF,QAAM,IAANA,OAAM,EAANA,EAAQkD,KACZ,OAAKlD,EAEDyD,eAACwrC,KAAQvuC,wBAAA,GACDR,GAAK,IACTwyD,SAAS,OACTgC,SAAUF,EAAgBj2D,SAAA,CAE1BU,cAACU,KAAS,CAACG,OAAO,SAAS4qB,QAAM,IACjCzrB,cAACo1B,KAAiB,CAACv0B,OAAO,SAC1Bb,cAACyE,KAAS,CAAC5D,OAAO,cAAco0B,UAAU,IAC1Cj1B,cAACkvB,KAAc,CAACruB,OAAO,cAAcwrB,UAAU,UAAU2B,MAAM,EAAM1uB,SACjEU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,aAAc9sC,QAASgyC,OAC5Ej1C,cAACy0D,GAAmB,CAACvsD,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQ0tC,kBAd3D,IAiBxB,EAEMwlB,GAAc,SAACz0D,GACjB,IAAMuB,EAAUwyB,eACV9Z,EAAW85C,KAEX9vD,EAAU+B,aAAW,CACvBjH,cAACU,KAAS,CAACG,OAAO,SAAS4qB,QAAM,EAACnc,UAAQ,IAC1CtP,cAACU,KAAS,CAACG,OAAO,eAAeyO,UAAQ,IACzCtP,cAACo1B,KAAiB,CAACv0B,OAAO,OAAOyO,UAAQ,EAACpH,cAAe1F,EAAQ6yB,iBACjEr1B,cAACyE,KAAS,CAAC5D,OAAO,cAAcqH,cAAe1F,EAAQ6yB,iBACvDr1B,cAACkvB,KAAc,CAACruB,OAAO,cAAcwrB,UAAU,UAAU2B,MAAM,EAAM1uB,SACjEU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,aAAc9sC,QAASgyC,SAG1Etf,EAAkB1wB,aAAmBC,GAE3C,OACIlF,cAACosC,GAAI3qC,wBAAA,GACGR,GAAK,IACT6oB,QAAS9pB,cAACs0D,GAAkB,CAACpvD,QAASA,IACtCgW,SAAUA,EACVG,QAASrb,cAACq1D,GAAiB,IAAI/1D,SAE/BkF,eAACwrC,KAAQ,CAAA1wC,SAAA,CACJq2B,EACD31B,cAACy0D,GAAmB,CAACvsD,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQ0tC,mBAIvF,EAEAwlB,GAAY/zD,aAAe,CACvBmE,OAAQ,CAAE2B,YAAa,CAAExD,GAAIyD,KAAoBiuD,YAAa,CAAC,QAAS,aAAc,gBAAiB,WAAY,MAAO,QAAS,eAAgB,aAAc,YAAa,SAAU,oBAAqB,OAAQ,UAAW,YAAa,UAAW,gBACxP92C,QAAS,GACTxC,KAAM,CAAE5S,MAAO,YAAaqX,MAAO,QACnCgV,mBAAmB,GAKR4/B,U,iIC7HT7zD,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACrCuE,KAAM,CACJgI,QAAS,OACTsc,SAAU,OACV3C,WAAY,EACZmD,cAAe,GAElB,GAAG,CAAEjpB,KAAM,qBAGN4G,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAK3C2X,GAAc,WAAQ,EAE5B,SAAS4U,GAAgBj2B,GACfA,EAARuC,SAWE,IAVO0pB,EAAejsB,EAAxBmD,QACA7B,EAAStB,EAATsB,UACAI,EAAM1B,EAAN0B,OAEAH,GADMvB,EAANwB,OACQxB,EAARuB,UACAyrB,EAAShtB,EAATgtB,UACAvlB,EAAQzH,EAARyH,SACAxH,EAAQD,EAARC,SACA0uB,EAAI3uB,EAAJ2uB,KACGlqB,EAAIrE,YAAAJ,EAAAK,IAED8C,EAAUX,GAAU,CAAEW,QAAS8oB,IAC/BsC,EAAmBvsB,KAAIN,EAAQ,oBAC/BoxC,EAAa9wC,KAAIN,EAAQ,cACzByO,EAAOoe,EAAgB,CAAAnsB,wBAAA,GAASmsB,GAAgB,IAAE26B,WAAW,KAAIhnD,OAAA6J,aAAO+mC,IAAcA,EAE5F,OAAK3iC,EAGHxP,cAAA,MAAAyB,wBAAA,CACEd,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,IAChCe,aAAuBoC,IAAK,IAAAxE,SAE/BkQ,EAAKnK,KAAI,SAAC41B,EAAMvd,GACf,IAAM8uB,EAAW1lC,EAAS2lC,QAAQ7rC,EAAUyrB,GACtCkgB,EAAkBtR,EAClBhN,IAAoBD,IAAgC,oBAATA,EAAuBA,EAAKue,EAAiBlgB,EAAWtrB,EAAQH,GAAS,GAAAW,OAAMirC,EAAQ,KAAAjrC,OAAI8J,mBAAmBkhC,EAAgBtoC,IAAG,KAAA1C,OAAIysB,IAEtL,OAAIC,EAEAjuB,cAACK,KAAI,CAEHM,UAAW6B,EAAQwrB,KACnBzuB,GAAI0uB,EACJ9kB,QAASJ,GAAgBzJ,SAExB8G,uBAAaqC,WAASijB,KAAKpsB,GAAW,CACrCyB,OAAQk6B,EACRr6B,SAAUyrB,EACVvlB,SAAU0lC,EACVzlC,OAAQhG,EACRoI,QAASuX,MAVNhD,GAgBJtX,uBAAaqC,WAASijB,KAAKpsB,GAAW,CAC3CiG,IAAKmY,EACL3c,OAAQk6B,EACRr6B,SAAUyrB,EACVvlB,SAAU0lC,EACVzlC,OAAQhG,GAEZ,OAtCgB,IAyCtB,CAeAu0B,GAAiB3zB,aAAe,CAC9Ba,QAAS,CAAC,EACVwrB,KAAM,OACNpsB,UAAU,GAGG0zB,UCvGTsgC,GAAiBh0C,wBAAc,CACjCpS,UAAMzE,EACN1G,MAAO,KACPuT,SAAS,EACToT,QAAQ,IAGZ4qC,GAAe3zC,YAAc,iBAEd2zC,U,0ECATC,GAAoB,SAApBA,EAAqBnwB,GACvB,IAAQrK,EAAmCqK,EAAnCrK,MAAOD,EAA4BsK,EAA5BtK,UAAW06B,EAAiBpwB,EAAjBowB,MAAOC,EAAUrwB,EAAVqwB,MAC3BC,EAAS,GACTC,GAAiB,OAAL56B,QAAK,IAALA,OAAK,EAALA,EAAOp3B,MAAe,OAATm3B,QAAS,IAATA,OAAS,EAATA,EAAWn3B,IACpCiyD,GAAsB,OAAL76B,QAAK,IAALA,OAAK,EAALA,EAAOp3B,MAAe,OAATm3B,QAAS,IAATA,OAAS,EAATA,EAAWn3B,KAAMm3B,EAAU+6B,YAAYriC,SAAS,KAapF,OAXImiC,GAAUD,EAAOj1C,KAAK,CAAEoP,IAAKiL,EAAUn3B,GAAIrD,SAAUy6B,EAAMp3B,KAC3DiyD,GAAeF,EAAOj1C,KAAK,CAAEoP,IAAI,SAAD5uB,OAAW65B,EAAUn3B,IAAMrD,SAAUy6B,EAAMp3B,KAE/E6xD,EAAM5rB,SAAQ,SAAAxE,GACVswB,EAAOj1C,KAAItG,MAAXu7C,EAAM5qD,aAASyqD,EAAkBnwB,IACrC,IAEAqwB,EAAM7rB,SAAQ,SAAAxE,GACVswB,EAAOj1C,KAAItG,MAAXu7C,EAAM5qD,aAASyqD,EAAkBnwB,IACrC,IAEOswB,CACX,EAyDeI,GAvDO,SAAH/2D,GAQZ,IAPHC,EAAQD,EAARC,SACAsB,EAAQvB,EAARuB,SACAkG,EAAQzH,EAARyH,SACA/F,EAAM1B,EAAN0B,OACAmpB,EAAO7qB,EAAP6qB,QACAyb,EAAItmC,EAAJsmC,KAIM0wB,GAHE52D,YAAAJ,EAAAK,IAGOsG,mBAAQ,WACnB,OAAO6vD,GAAkBlwB,EAC7B,GAAG,CAACA,KAEJ5zB,EAAgC1J,mBAAS,CACrCmH,KAAM,GACNwb,QAAQ,EACRpT,SAAS,EACTvT,MAAO,OACT2N,EAAAnM,YAAAkM,EAAA,GALKukD,EAAQtkD,EAAA,GAAEukD,EAAWvkD,EAAA,GAOtBwkD,EAAqBC,aAAmB,CAC1C3wD,OAAQ,CAAEuwD,WACX,CAAE5hD,QAAS4hD,EAAO1tD,OAAS,IAmB9B,OAjBAqN,qBAAU,WACNugD,GAAY,SAACG,GAAS,OAAAj1D,wBAAA,GACfi1D,GAAS,IACZlnD,KAAM,IAAE,GAEhB,GAAG,CAACzO,EAAOkD,KAEX+R,qBAAU,WAAO,IAAD2gD,GACU,OAAlBH,QAAkB,IAAlBA,GAAwB,QAANG,EAAlBH,EAAoBhnD,YAAI,IAAAmnD,OAAN,EAAlBA,EAA0BhuD,QAAS,GACnC4tD,GAAY,SAACG,GAAS,OAAAj1D,oCAAA,GACfi1D,GACAF,GAAkB,IACrBhnD,KAAMwF,mBAA0B,OAAlBwhD,QAAkB,IAAlBA,OAAkB,EAAlBA,EAAoBhnD,KAAe,OAATknD,QAAS,IAATA,OAAS,EAATA,EAAWlnD,KAAM,OAAK,GAG1E,GAAG,CAACgnD,IAGAx2D,cAAC41D,GAAe5X,SAAQ,CAAC18C,MAAOg1D,EAASh3D,SACpC8G,uBAAaqC,WAASijB,KAAKpsB,GAAW,CACnCsB,WACAkG,WACA/F,SACAmpB,UACAyb,UAIhB,E,6EC5EM9jC,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFzD,OAAQ,WAEZsH,KAAM,SAAA9K,GAAA,IAAGuY,EAAOvY,EAAPuY,QAAc,MAAQ,CAC3BzX,MADmBd,EAALgF,MACC,UAAYuT,EAAU,UAAY,UACpD,EACJ,IAoBcg/C,GAjBK,SAAC31D,GACjB,IAAA41D,EAA2Br2D,qBAAWo1D,IAA9Bh+C,EAAOi/C,EAAPj/C,QAASvT,EAAKwyD,EAALxyD,MACX7B,EAAUX,GAAU,CAAE+V,UAASvT,UAG/B8F,EAAO9F,EAAQrE,cAAC82D,KAAY,CAACn2D,UAAW6B,EAAQ2H,OAAWyN,EAAU5X,cAACm/B,KAAgB,CAACx+B,UAAW6B,EAAQ2H,KAAMd,KAAM,GAAIkjD,UAAW,IAAQvsD,cAAC+2D,KAAS,CAACp2D,UAAW6B,EAAQ2H,OAC3KnF,EAAQX,EAAQ,uCAAWuT,EAAU,wEAAmB,+DAE9D,OAAO5X,cAAC0iC,KAAI,CACRlgC,QAAS,CAAE8D,KAAM9D,EAAQ8D,MACzB+C,KAAK,QACLc,KAAMA,EACNnF,MAAOA,EACPrC,MAAM,iEAEd,EC1BMq0D,GAAkB,SAAH33D,GAA4B,IAAtBqmC,EAAIrmC,EAAJqmC,KAAMpmC,EAAQD,EAARC,SACvB23D,EAAiBz2D,qBAAWo1D,IAClC,IAAKlwB,EAAM,OAAO,KAClB,IAAM9K,EAAOv5B,KAAI41D,EAAgB,CAAC,SAC5BC,EAAUzxD,KAAMm1B,EAAM,MACtBu8B,EAAQj8B,aAAe,CAAEt6B,SAAU8kC,EAAKrK,MAAMp3B,GAAIksB,IAAKuV,EAAKtK,UAAUn3B,KACtEmzD,EAAal8B,aAAe,CAAEt6B,SAAU8kC,EAAKrK,MAAMp3B,GAAIksB,IAAI,SAAD5uB,OAAWmkC,EAAKtK,UAAUn3B,MACpFksB,EAAM+mC,EAAQC,GACdE,EAAWH,EAAQE,GAEzB,IAAKjnC,EAAK,OAAO,KAEjB,IAAMpvB,EAAMU,oCAAA,GACLikC,GACAvV,GAAG,IACNmnC,WAAYD,GAAiC,IAArBA,EAASE,QAAgBF,EAAS/1D,MAAQ,OAGtE,OAAOmH,WAASpD,IAAI/F,GAAU,SAACmK,EAAOiU,GAAK,OACvCtX,uBAAaqD,EAAO,CAAE1I,UAAS,GAEvC,EAEeqH,OAAMyE,KAAKmqD,I,oDCjBpBn1D,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCk5B,KAAM,CAAC,EACP1iB,QAAS,CAAC,EACVukB,MAAO,CAAC,EACR06B,SAAU,CAAC,EACX75C,SAAU,CAAC,EACXhb,MAAO,CACHsL,QAAS,EACTK,QAAS,OACTmU,WAAY,SACZm9B,IAAK79C,EAAMG,WAEfu1D,UAAW,CACPzvC,SAAU,GAEd7d,KAAM,CACFhK,MAAO4B,EAAMyE,QAAQ0lB,KAAKC,WAEjC,IAKKurC,GAAuB,SAAHr4D,GAA4B,IAAtBqmC,EAAIrmC,EAAJqmC,KACtBljC,GADoC/C,YAAAJ,EAAAK,IAC1BmC,MAChB,IAAK6jC,EAAM,OAAO,KAElB,IAAM3kC,EAAMU,wBAAA,GAAQikC,GAAI,IAAEzhC,GAAIi3B,aAAe,CAAEt6B,SAAU8kC,EAAKrK,MAAMp3B,GAAIksB,IAAKuV,EAAKtK,UAAUn3B,OAE5F,OACIjE,cAACuoC,KAAQ,CAELP,OAAQtC,EAAKzhC,GACbtB,MACI6B,eAACgoB,KAAuB,CAAClrB,MAAM,MAAKhC,SAAA,CAChCU,cAACyE,KAAS,CAAC1D,OAAQA,EAAQH,SAAS,MAAMC,OAAO,iBAAiBF,UAAW6B,EAAQi1D,YACrFjzD,eAACwyD,GAAe,CAACtxB,KAAMA,EAAKpmC,SAAA,CACxBU,cAAC23D,KAAa,CAAC/2D,SAAS,MAAMC,OAAO,UACrCb,cAAC43D,KAAc,CAACh3D,SAAS,MAAMC,OAAO,eAE1C2D,eAAA,QAAAlF,SAAA,CACIU,cAAC63D,KAAoB,CAAC92D,OAAQA,EAAQH,SAAS,QAC9C2oB,KAAYI,IAAI,QAAS,QAAU3pB,cAAC83D,KAAc,CAAC/2D,OAAQA,EAAQH,SAAS,cAKzF4B,QAAS,CACL8D,KAAM9D,EAAQy4B,KACd1iB,QAAS/V,EAAQ+V,QACjBi/C,SAAUh1D,EAAQg1D,SAClB75C,SAAUnb,EAAQmb,SAClBmf,MAAOt6B,EAAQs6B,MACfn6B,MAAOH,EAAQG,QAtBd+iC,EAAKzhC,GA0BtB,EAEemE,OAAMyE,KAAK6qD,I,YCjEpB71D,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF2hB,UAAWlmB,EAAMG,QAAQ,GACzBkpB,aAAcrpB,EAAMG,UACpB,gBAAiB,CACb+lB,UAAW,IAGnBjjB,MAAO,CACHsJ,QAAS,OACTkU,eAAgB,gBAChBC,WAAY,WACZ2I,aAAc,GAElBua,KAAM,CAAC,EACPoyB,WAAY,CACR53D,MAAO,WAEX86B,KAAM,CAAC,EACP1iB,QAAS,CAAC,EACVukB,MAAO,CAAC,EACR06B,SAAU,CAAC,EACX75C,SAAU,CAAC,EACXhb,MAAO,CACHsL,QAAS,EACTK,QAAS,OACTmU,WAAY,UAEnB,IAEKu1C,GAAuB,SAAvBA,EAAoB34D,GAA4B,IAAtBqmC,EAAIrmC,EAAJqmC,KACtBljC,GADoC/C,YAAAJ,EAAAK,IAC1BmC,MAChB,IAAK6jC,EAAM,OAAO,KAClB,IAAQzhC,EAA2ByhC,EAA3BzhC,GAAI9B,EAAuBujC,EAAvBvjC,KAAM2zD,EAAiBpwB,EAAjBowB,MAAOC,EAAUrwB,EAAVqwB,MAEzB,OACIvxD,eAAC+jC,KAAQ,CAELP,OAAQ/jC,EACRtB,MAAO3C,cAACC,KAAU,CAACC,QAAQ,QAAQS,UAAW6B,EAAQi1D,UAAUn4D,SAAE6C,IAClEK,QAAS,CACL8D,KAAM9D,EAAQy4B,KACd1iB,QAAS/V,EAAQ+V,QACjBi/C,SAAUh1D,EAAQg1D,SAClB75C,SAAUnb,EAAQmb,SAClBmf,MAAOt6B,EAAQs6B,MACfn6B,MAAOH,EAAQG,OACjBrD,SAAA,CAEDkpC,MAAMC,QAAQqtB,GAASA,EAAMzwD,KAAI,SAACqgC,GAAI,OAAK1lC,cAACg4D,EAAoB,CAACtyB,KAAMA,GAAWA,EAAKzhC,GAAM,IAAI,KACjGukC,MAAMC,QAAQstB,GAASA,EAAM1wD,KAAI,SAACqgC,GAAI,OAAK1lC,cAAC03D,GAAoB,CAAChyB,KAAMA,GAAWA,EAAKzhC,GAAM,IAAI,OAb7FA,EAiBjB,EAWemE,OAAMyE,KAAKmrD,I,0EC7DpBn2D,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF2hB,UAAWlmB,EAAMG,QAAQ,GACzBkpB,aAAcrpB,EAAMG,UACpB,gBAAiB,CACb+lB,UAAW,IAGnBjjB,MAAO,CACHsJ,QAAS,OACTkU,eAAgB,gBAChBC,WAAY,WACZ2I,aAAc,GAElBua,KAAM,CAAC,EACPoyB,WAAY,CACR53D,MAAO,WAEX86B,KAAM,CAAC,EACP1iB,QAAS,CAET,EACAukB,MAAO,CAAC,EACR06B,SAAU,CAAC,EACX75C,SAAU,CAAC,EACd,IA4Ccs6C,GA1CU,SAAH54D,GASf,IARHsB,EAAStB,EAATsB,UACAC,EAAQvB,EAARuB,SACAC,EAAMxB,EAANwB,OAIA8kC,GAHQtmC,EAARyH,SACMzH,EAAN0B,OACO1B,EAAP6qB,QACI7qB,EAAJsmC,MAGMnjC,GAFE/C,YAAAJ,EAAAK,IAEQmC,MAEVc,EADYxB,aACJD,CAAU,aAADK,OAAcX,EAAQ,YAAAW,OAAWV,IACxDsH,EAAgCC,IAAMC,SAAS,IAAGC,EAAAzC,YAAAsC,EAAA,GAA3CqvD,EAAQlvD,EAAA,GAAE4vD,EAAW5vD,EAAA,GAM5B,OACI9D,eAAA,OAAK7D,UAAS,GAAAY,OAAKiB,EAAQ8D,KAAI,KAAA/E,OAAIZ,GAAYrB,SAAA,CAC3CkF,eAAA,OAAK7D,UAAW6B,EAAQwC,MAAM1F,SAAA,CAC1BU,cAACC,KAAU,CAACC,QAAQ,UAAUC,MAAM,gBAAgBsrB,QAAM,EAAAnsB,SAAEqD,IAC5D3C,cAAA,OAAAV,SACIU,cAAC42D,GAAW,SAGpB52D,cAAA,OAAKW,UAAW6B,EAAQ+V,QAAQjZ,SAC5BU,cAACm4D,KAAQ,CACLx3D,UAAW6B,EAAQmjC,KACnByyB,aAfK,SAACtvD,EAAOw8B,GACzB4yB,EAAY5yB,EAChB,EAcgBkyB,SAAUA,EACVa,oBAAqBr4D,cAACs4D,KAAc,CAAC33D,UAAW6B,EAAQu1D,aACxDQ,kBAAmBv4D,cAACukC,KAAU,CAAC5jC,UAAW6B,EAAQu1D,aAAez4D,SAEjEU,cAACg4D,GAAoB,CAACtyB,KAAMC,UAKhD,E,kCCxEM6yB,GAAwB,SAACv3D,GAC3B,IAAQF,EAAsCE,EAAtCF,OAAkBF,GAAoBI,EAA9BL,SAA8BK,EAApBJ,QACpB8kC,GADmClmC,YAAKwB,EAAKvB,IACtC2B,eAAIN,EAAQF,IAEzB,OAAI43D,mBAAQ9yB,GAAc3lC,cAAC+mD,KAAK,CAACz5B,SAAS,OAAMhuB,SAAC,oFAG7CU,cAACo2D,GAAa30D,wBAAA,CAACkkC,KAAMA,GAAU1kC,GAAK,IAAA3B,SAChCU,cAACi4D,GAAgBx2D,YAAA,GAAKR,MAIlC,EAEAu3D,GAAsB72D,aAAe,CACjCC,UAAU,GAGC42D,U,wPCVF9G,GAA0B,SAAHryD,GACxBA,EAARyH,SACYzH,EAAZ0gB,aACwB1gB,EAAxBsyD,yBACOtyD,EAAPif,QACMjf,EAANuyD,OACQvyD,EAAR+e,SACM/e,EAAN0B,OACQ1B,EAARuX,SACQvX,EAARuB,SACMvB,EAANq3C,OACar3C,EAAbu5C,cACQv5C,EAAR4X,SACO,OAAAxX,YAAAJ,EAAAK,GACA,EAGLg5D,GAAmB,SAACz3D,GACtB,IAAQsH,EAA2CtH,EAA3CsH,SAAUK,EAAiC3H,EAAjC2H,KAAMY,EAA2BvI,EAA3BuI,QAASgnD,EAAkBvvD,EAAlBuvD,cAC3B3nD,EAAcuJ,uBAAY,WAC5B5I,GACJ,GAAG,CAACA,IAGEmvD,GAA2B,OAAbnI,QAAa,IAAbA,OAAa,EAAbA,EAAenC,aAAa,KAAMhnD,qBAAU,CAAEzG,SAAU4vD,EAAcnC,aAAa,KAEvG,OACIruD,cAACuJ,KAAI,CACDtF,GAAG,mBACHsE,SAAUA,EACV2rB,aAAW,EACXtrB,KAAMA,EACNY,QAASX,EAAYvJ,SAIrBU,cAAC0vD,GAA4B,CAAC/sD,MAAM,4CAAmBkzC,KAAI,GAAAt0C,OAAKuwD,IAAsB,kBAAAvwD,OAAiBo3D,EAAW,IAAAp3D,OAAOo3D,GAAgB,IAAMxvD,QAASN,KAIpK,EAGM+vD,GAAqB,SAAC33D,GAWpBA,EATA6F,SADJ,IAEInG,EAQAM,EARAN,UACOsL,GAOPhL,EAPAuB,QAOAvB,EANAkJ,aAAI,IAAA8B,EAAG7B,GAAW6B,EAAAH,EAMlB7K,EALA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAE1B5L,GAGAe,EAJA+K,YAIA/K,EAHAf,SACAswD,EAEAvvD,EAFAuvD,cACG1sD,EAAIrE,YACPwB,EAAKwQ,IACHjP,EAAUX,GAAUZ,GACpBC,EAAYC,cACZ8wD,EAAUC,cAAc,SAACnwD,GAAK,OAChCA,EAAM2gB,YAAYwF,KAAK,KAAK,IAIhCnW,GAFiB5M,eAEekD,mBAAS,OAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GAEtB0O,EAActO,uBAAY,SAACtJ,GAC7BN,EAAYM,EAAMM,cACtB,GAAG,CAACZ,IAEEK,EAAcuJ,uBAAY,WAC5B5J,EAAY,KAChB,GAAG,CAACA,IAEJ,OAAOypD,EACHztD,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAACmyD,KAAG1wD,wBAAA,CACA0H,QAASuX,EACTvgB,MAAM,UACNQ,UAAWkE,IAAWrC,EAAQ4vD,SAAUzxD,GACxC,aAAYgC,GAASzB,EAAUyB,GAC/B,gBAAc,mBACd,gBAAc,QACV+uD,GAAwB5tD,IAAK,IAAAxE,SAEhC6K,KAELnK,cAAC04D,GAAgB,CACbnwD,SAAUA,EACVK,KAAM7C,QAAQwC,GACdiB,QAASX,EACT2nD,cAAeA,OAKvBhsD,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC8f,KAAMre,wBAAA,CACH0H,QAASuX,EACT/f,UAAWA,EACXgC,MAAOA,EACPzC,QAASA,EACT,gBAAc,mBACd,gBAAc,QACV4D,GAAI,IAAAxE,SAEP6K,KAELnK,cAAC04D,GAAgB,CACbnwD,SAAUA,EACVK,KAAM7C,QAAQwC,GACdiB,QAASX,EACT2nD,cAAeA,MAK/B,EAEMpmD,GAAcpK,cAACqyD,KAAU,IAEzBxwD,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNqwD,SAAU,CACNjyD,MAAO4B,EAAMyE,QAAQG,gBAAgB5E,EAAMyE,QAAQ21B,QAAQhmB,MAC3DtT,OAAQ,EACRwf,IAAK,OACLE,MAAO,GACPmiB,OAAQ,GACRpiB,KAAM,OACNxU,SAAU,QACVqU,OAAQ,KAEf,GACD,CAAEhgB,KAAM,uBAKG0K,kBAAK+rD,IAAoB,SAACtG,EAAWjd,GAChD,OACIid,EAAUxrD,WAAauuC,EAAUvuC,UACjCwrD,EAAU3vD,QAAU0yC,EAAU1yC,OAC9B2vD,EAAUpxD,YAAcm0C,EAAUn0C,WAClCoxD,EAAU/yD,KAAO81C,EAAU91C,IAC3B+yD,EAAUn6C,WAAak9B,EAAUl9B,QAEzC,I,sDC7IMtW,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF8hB,WAAY,EACZwD,cAAe,EACf9D,UAAW,GAElB,IAEK+wC,GAAyB,SAAA53D,GAC3B,IAAQN,EAAyDM,EAAzDN,UAAqB0a,GAAoCpa,EAA9Cia,SAA8Cja,EAApCoa,SAASm1C,EAA2BvvD,EAA3BuvD,cAAkB1sD,EAAIrE,YAAKwB,EAAKvB,IAChE8C,EAAUX,KAChByZ,EAQIC,aAAeta,GANfwa,GADWH,EAAXE,YACgBF,EAAhBG,kBACAC,EAAYJ,EAAZI,aACA5U,EAAQwU,EAARxU,SACA2V,EAAWnB,EAAXmB,YACAd,EAAUL,EAAVK,WACAC,EAAKN,EAALM,MAEEhb,EAAWuE,aAAmBrB,GAEpC,OAAOkC,mBACH,kBACIxB,eAACuX,KAAUta,wBAAA,CACPd,UAAWA,EACX6B,QAAS,CAAE8D,KAAM9D,EAAQ8D,OAErB0V,aAAsBlY,IAAK,IAAAxE,SAAA,CAE9B+b,GACGjV,uBAAaiV,EAAS,CAClBza,WACA+a,aACAF,mBACAC,eACAO,QAAS,WAEhBsN,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC44D,GAAkB,CAAC9xD,SAAUA,EAAU0pD,cAAeA,IAC/FxwD,cAACosB,GAAuB3qB,YAAA,GAAKqC,OACpB,GAEjB,CAAClD,EAAU6a,EAAkBC,EAAce,EAAapB,EAASO,GAEzE,EAIAi9C,GAAuBl3D,aAAe,CAClC8a,YAAa,GACbC,gBAAiB,kBAAM,IAAI,GAGhBm8C,U,+eChETtsC,GAAY,SAAHltB,GAQR,IAPHC,EAAQD,EAARC,SACAwqB,EAAOzqB,EAAPyqB,QACAzO,EAAOhc,EAAPgc,QACWkQ,EAAOlsB,EAAlBe,UACAQ,EAAQvB,EAARuB,SACA4vD,EAAanxD,EAAbmxD,cACGvvD,EAAKxB,YAAAJ,EAAAK,IAIFozD,EAAqBvoC,GAAkBtpB,GAE7C,OACIjB,cAACwsB,KAAuB,CAAClrB,MAAOV,EAAStB,SACrCkF,eAACioB,KAAQhrB,wBAAA,GACDR,GAAK,IAAA3B,SAAA,EAEP+b,GAAWyO,IACT9pB,cAAC0sB,GAAgBjrB,wBAAA,GACTqxD,GAAkB,IACtBz3C,QAASA,EACTyO,QAASA,EACT0mC,cAAeA,KAGvBhsD,eAAC+mB,EAAO,CAAAjsB,SAAA,CACH8G,uBAAaqC,WAASijB,KAAKpsB,GAASmC,YAAA,GAC9BqxD,IAEP9yD,cAAC2sB,KAAU,YAS/B,EAEAJ,GAAU5qB,aAAe,CACrBmoB,QAAS9pB,cAAC64D,GAAsB,IAEhCz4D,UAAWysB,KAIXjrB,UAAU,GAId,I,iIAAM2oB,GAAoB,SAAHnZ,KACnBtK,SAAesK,EACfoK,YAAkBpK,EAClB5B,KAAW4B,EACX6Y,aAAmB7Y,EACnBqK,iBAAuBrK,EACvB0b,oBAA0B1b,EAC1BsK,aAAmBtK,EACnByK,UAAgBzK,EAChBqY,QAAcrY,EACdsY,QAActY,EACd2Z,QAAc3Z,EACd2b,WAAiB3b,EACjB4O,QAAc5O,EACd7D,IAAU6D,EACVwG,QAAcxG,EACd4Z,OAAa5Z,EACb1F,SAAe0F,EACf5R,MAAY4R,EACZyM,SAAezM,EACf4b,aAAmB5b,EACnBsL,gBAAsBtL,EACtBnO,QAAcmO,EACd4P,KAAW5P,EACXmY,YAAkBnY,EAClByN,QAAczN,EACdxQ,SAAewQ,EACfqL,YAAkBrL,EAClB8O,WAAiB9O,EACjB+O,QAAc/O,EACdgP,WAAiBhP,EACjBiP,QAAcjP,EACduK,WAAiBvK,EACjB6b,iBAAuB7b,EACvBiL,KAAWjL,EACXwK,MACO,OAAAnc,YAAA2R,EAAAK,GACA,EAEI8a,MC1FAusC,GANU,SAAHz5D,GAAoB,IAAd0B,EAAM1B,EAAN0B,OACxB,OAAa,OAANA,QAAM,IAANA,KAAQg4D,YACT/4D,cAAC0iC,KAAI,CAACr5B,KAAK,QAAQ1G,MAAM,yCACzB,IACV,ECJaq2D,GAAqB,SAAClyD,EAAU7C,EAAIlD,EAAQqzD,GACrD,IAAMuE,EAActxD,qBAAU+sD,GAC9B,MAAM,GAAN7yD,OAAUuwD,IAAsB,iBAAAvwD,OAAgB0C,GAAE1C,OAAGo3D,EAAW,IAAAp3D,OAAOo3D,GAAgB,GAC3F,EAEaM,GAAqB,SAACnyD,EAAU7C,EAAIlD,EAAQqzD,GACrD,IAAMuE,EAActxD,qBAAU+sD,GAC9B,MAAM,GAAN7yD,OAAUuwD,IAAsB,mBAAAvwD,OAAkB0C,GAAE1C,OAAGo3D,EAAW,IAAAp3D,OAAOo3D,GAAgB,GAC7F,E,gGCAMO,GAAuB9wD,IAAMwB,YAAW,SAAAvK,EAU3CwK,GAAS,IATRlJ,EAAStB,EAATsB,UAASqJ,EAAA3K,EACTyH,gBAAQ,IAAAkD,EAAG,GAAEA,EAEbjJ,GAFa1B,EACbsD,MACMtD,EAAN0B,QAGAqzD,GAHM/0D,EACNiL,OACajL,EAAb6I,cACY7I,EAAZ+0D,cACAx9C,EAAQvX,EAARuX,SACG9S,EAAIrE,YAAAJ,EAAAK,IAEDwB,EAAYC,cAEZuf,EAActO,uBAAY,SAACzH,GAC7BA,EAAE5B,kBACF,IAAM8sC,EAAOj/B,EAAS9P,EAAU/F,EAAOkD,GAAIlD,EAAQqzD,GACnD7gD,OAAO3K,KAAKitC,EAAM,WACtB,GAAG,CAAC/uC,EAAU/F,IAEd,OACIf,cAACgJ,KAAO,CAAChE,MAAO9D,EAAU,iBAAkB,CAAEM,EAAG,SAAWyH,WAAY,IAAI3J,SACxEU,cAAA,QAAAV,SACIU,cAACkJ,KAAUzH,wBAAA,GACHqC,GAAI,IACR,aAAY5C,EAAU,iBAAkB,CAAEM,EAAG,SAC7C2H,QAASuX,EACTrX,KAAK,QACL1I,UAAWA,EACXR,MAAM,UAASb,SAEfU,cAAC8tB,KAAa,UAKlC,IAWeorC,MClBEC,GA3BW,SAACl4D,GAAW,IAADksB,EAC7B3qB,EAAUwyB,eAEVo/B,EAAe,CAAExzD,SAAsB,QAAdusB,EAAElsB,EAAMF,cAAM,IAAAosB,OAAA,EAAZA,EAAclpB,IAE/C,OACEjE,cAACo5D,GAAe33D,wBAAA,GACVR,GAAK,IACTb,UAAWquB,KAAKnvB,SAEhBU,cAACkY,WAAQ,CAAA5Y,SACLkF,eAACwrC,KAAQ,CAAA1wC,SAAA,CACLU,cAACk5D,GAAoB,CAAC9E,aAAcA,EAAcx9C,SAAUoiD,GAAoB9wD,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQytC,cAClIjwC,cAAC84D,GAAgB,CAAC5wD,cAAe1F,EAAQutC,aAAclvC,OAAO,gBAAiB,IAC/Eb,cAACo1B,KAAiB,CAACv0B,OAAO,OAAOyO,UAAQ,EAACpH,cAAe1F,EAAQ6yB,iBAAmB,IACpFr1B,cAACyE,KAAS,CAAC5D,OAAO,cAAcqH,cAAe1F,EAAQ6yB,iBAAmB,IAC1Er1B,cAACqsC,GAAW,CAACxrC,OAAO,OAAOwrB,UAAU,aAAa2B,MAAM,EAAOiH,UAAU,EAAO/sB,cAAe1F,EAAQutC,aAAazwC,SAChHU,cAACyE,KAAS,CAAC5D,OAAO,WACP,IACfb,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,eAAiB,IACtE/vC,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,eAAiB,WAKpF,ECCI8f,GAAuB,CAC3B9nC,QAAS,CAAE+nC,QAAS,QAASC,YAAa,SAC1C,kBAAmB,CAAED,QAAS,QAASC,YAAa,eACpD,kBAAmB,CAAED,QAAS,QAASC,YAAa,YAGhDsJ,GAAmB,SAAHh6D,GAA6D,IAAvDyH,EAAQzH,EAARyH,SAAU0I,EAAInQ,EAAJmQ,KAAMia,EAAOpqB,EAAPoqB,QAAS5N,EAASxc,EAATwc,UAAW0N,EAAWlqB,EAAXkqB,YAC9D,OACE/kB,eAACuX,KAAU,CAAAzc,SAAA,CACTU,cAACi2C,GAAc,CAACnvC,SAAUA,EAAU/F,OAAQyO,EAAM5O,SAAS,UAC1D2oB,EAAYI,IAAI,SAAU,eAAiB3pB,cAACqzC,GAAiB,CAACvsC,SAAUA,EAAU/F,OAAQyO,IAC1FqM,GAAa7b,cAACowC,GAAW,CAACtpC,SAAUA,EAAU/F,OAAQyO,IACtDia,GAAWzpB,cAACwL,KAAU,CAAC1E,SAAUA,EAAU/F,OAAQyO,MAG1D,EA+Ie8pD,GA7IU,SAACr4D,GACxB,IAAMgvB,EAAkBC,aAAkBjvB,GACpCF,EAASkvB,EAAgBlvB,OACzBwoB,EAActoB,EAAMsoB,YAE1B,OAAKxoB,EAEHf,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC7CU,cAACowB,KAAmB,CAAC9uB,MAAO2uB,EAAgB3wB,SAC1CU,cAAC6pB,GAAQpoB,wBAAA,GACHR,GAAK,IACT6oB,QAAS9pB,cAACq5D,GAAgB,CAAC9vC,YAAaA,IACxCvkB,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IAAU3B,SAEnDkF,eAAC6rC,GAAgB,CAAA/wC,SAAA,CACfU,cAACu5D,KAAG,CAAC52D,MAAM,mDAAUrD,SACnBkF,eAACoqB,KAAgB,CAAAtvB,SAAA,CACfU,cAACyE,KAAS,CAAC5D,OAAO,SAClBb,cAACyE,KAAS,CAAC5D,OAAO,gBAClBb,cAACyE,KAAS,CAAC5D,OAAO,YAClBb,cAACqsC,GAAW,CAACxrC,OAAO,OAAOwrB,UAAU,YAAY2B,MAAM,EAAM1uB,SAC3DU,cAACyE,KAAS,CAAC5D,OAAO,WAEpBb,cAACqsC,GAAW,CAACxrC,OAAO,aAAawrB,UAAU,aAAY/sB,SACrDU,cAACyE,KAAS,CAAC5D,OAAO,WAEpBb,cAACw5D,KAAS,CAAC34D,OAAO,OAAO44D,UAAQ,IACjCz5D,cAAC05D,KAAmB,CAAC74D,OAAO,qBAAqBwrB,UAAU,YAAY1pB,MAAM,yCAAwCrD,SACnHU,cAAC25D,KAAe,CAAC9uD,UAAU,EAAMvL,SAC/BU,cAACgH,KAAS,CAACnG,OAAO,aAGtBb,cAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAO/sB,SACjDU,cAAC6G,KAAS,CAAChG,OAAO,WAEpBb,cAACkvB,KAAc,CAACruB,OAAO,cAAcwrB,UAAU,UAAU1pB,MAAM,mCAAmCqrB,MAAM,EAAM1uB,SAC5GU,cAACyE,KAAS,CAAC5D,OAAO,WAEpBb,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACk1C,KAAa,CAACr0C,OAAO,YAG1Bb,cAACu5D,KAAG,CAAC52D,MAAM,6CAAU/C,KAAK,SAAQN,SAChCU,cAACqrB,GAAe,CAAA/rB,SACdU,cAACusB,GAAS,CACR3rB,SAAS,QACTkG,SAAS,SACThB,OAAQ,CACNlF,SAAUG,EAAOkD,IAEnBoY,KAAM,CAAE5S,MAAO,YAAaqX,MAAO,QACnCjC,QAAS,EAAEvf,SAEXU,cAACqwB,KAAsB,UAI7BrwB,cAACu5D,KAAG,CAAC52D,MAAM,uCAAS/C,KAAK,aAAYN,SAMnCU,cAAC4uB,KAAgB,CAAAtvB,SACfU,cAAC45D,GAA+B,CAAC/4D,OAAO,aAAawrB,UAAU,YAAY2B,MAAM,EAAM1uB,SACrFU,cAACsoD,GAAkB,CAACznD,OAAO,eAIjCb,cAACu5D,KAAG,CAAC52D,MAAM,uCAAS/C,KAAK,OAAMN,SAC7BU,cAACqrB,GAAe,CAAA/rB,SACdU,cAACusB,GAAS,CACR3rB,SAAS,MACTkG,SAAS,OACThB,OAAQ,CACNu1B,MAAO,CACLp3B,GAAIlD,EAAOkD,KAGfoY,KAAM,CAAE5S,MAAO,YAAaqX,MAAO,QACnCjC,QAAS,GAAGvf,SAEZU,cAAC65D,KAAwB,UAI/B75D,cAACu5D,KAAG,CAAC52D,MAAM,sEAAe/C,KAAK,OAAMN,SACnCU,cAAC4uB,KAAgB,CAAAtvB,SACfU,cAACw4D,GAAqB,CAAC33D,OAAO,aAGlCb,cAACu5D,KAAG,CAAC52D,MAAM,iCAAQ/C,KAAK,QAAON,SAC7BU,cAACqrB,GAAe,CAAA/rB,SACdU,cAACk0D,GAAiB,CAChBtzD,SAAS,OACTkG,SAAS,QACThB,OAAQ,CAAEg0D,gBAAiB/4D,EAAOkD,IAClCoY,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,QAC9BjC,QAAS,GACT8rC,cAAekF,GACfW,cAAe,CAAEnC,aAAc,CAACttD,EAAOkD,IAAKsqD,sBAAuB,eAIzEvuD,cAACu5D,KAAG,CAAC52D,MAAM,uCAAS/C,KAAK,UAASN,SAChCU,cAACqrB,GAAe,CAAA/rB,SACdU,cAACm5D,GAAmB,CAClBv4D,SAAS,SACTkG,SAAS,UACThB,OAAQ,CAAEmsC,OAAQ,CAAE1wB,KAAM,CAAEtd,GAAIlD,EAAOkD,MACvCoY,KAAM,CAAE5S,MAAO,YAAaqX,MAAO,QACnCjC,QAAS,GACT2xC,cAAe,CAAEnC,aAAc,CAACttD,EAAOkD,IAAKsqD,sBAAuB,eAIzEvuD,cAACu5D,KAAG,CAAC52D,MAAM,6CAAU/C,KAAK,UAASN,SACjCU,cAACqrB,GAAe,CAAA/rB,SACdU,cAACusB,GAAS,CACR3rB,SAAS,UACTkG,SAAS,WACThB,OAAQ,CACN4uD,aAAc,QACdC,WAAY5zD,EAAOkD,IAErBoY,KAAM,CAAE5S,MAAO,YAAaqX,MAAO,QACnCjC,QAAS,GAAGvf,SAEZU,cAAC+5D,GAAwB,oBA5HrB,IAsItB,E,gCC9KeC,GAfa,SAACC,GAYzB,OAX0B,IAAIC,MAAM,CAAC,EAAG,CACpC74D,IAAK,SAACiJ,EAAQk/C,GACV,OAAO,SAAC5oD,EAAUu5D,GACd,IAAMv6D,EAAO,CAACgB,EAAU4oD,GAClB4Q,EAAW/4D,KAAI44D,EAAYr6D,GACjC,IAAKw6D,EAAU,MAAM/sD,MAAM,aAAD9L,OAAcioD,EAAM,WAAAjoD,OAAUX,EAAQ,yBAChE,OAAOw5D,EAASD,EACpB,CACJ,GAIR,EChBeE,MCGTthD,GAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,iBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,aAAAC,eAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,eAAa,KAAD,EACkC,OAD5DL,EAAKE,EAAAI,KACXhB,EAAOiB,UAAU,gBAAiBP,EAAK,UAAAtY,OAAasY,GAAU,IAAIE,EAAAM,OAAA,SAE3DlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EALW,EAMd,IAGIqO,GAAS,IAAIJ,GAAyBuhD,KAE7BnhD,MCjBFohD,GAAmB39C,aAAGC,QAAAC,aAAA,mL,8FC0EtBswB,GAAmB,SAAnBA,EAAmB59B,GAC5B,OAAKA,EAEU7B,OAAOD,KAAK8B,GAAMvE,QAAO,SAACC,EAAK3F,GAC1C,GAAIA,EAAI+nC,WAAW,KACf,OAAOpiC,EAGX,IAO+DmiC,EAPzDmtB,EAAUhrD,EAAKjK,GAErB,OAAgB,OAAZi1D,QAAgCzvD,IAAZyvD,EACbtvD,EAGPs9B,MAAMC,QAAQ+xB,GACY,kBAAfA,EAAQ,IAAkC,OAAfA,EAAQ,GAC1C/4D,wBAAA,GACOyJ,GAAG,IAAAmiC,EAAA,GAAA74B,YAAA64B,EACL9nC,EAAMi1D,EAAQn1D,IAAI+nC,IAAiB54B,YAAA64B,EAAC,GAAD9rC,OAChCgE,EAAG,OAAQi1D,EAAQn1D,KAAI,SAAAiY,GAAC,OAAIA,EAAErZ,EAAE,KAACopC,IAGzC5rC,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,IAIT,kBAAZA,GAAoC,OAAZA,EAC/B/4D,wBAAA,GACOyJ,GAAG,GAAAsJ,YAAA,GAKLjP,EAAM6nC,EAAiBotB,KAIhC/4D,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,GAC5B,GAAG,CAAC,GArCc,IAwCtB,EAEahoB,GAAgB,SAAHphC,GACpBA,EAAFnN,GACSmN,EAATshC,UACWthC,EAAXuhC,YACSvhC,EAATwhC,UACOxhC,EAAPgZ,QACMhZ,EAANqpD,OACerpD,EAAfspD,gBACiB,OAAAj7D,YAAA2R,EAAA1R,GAAqB,ECzH7Bi7D,GAAiB/9C,aAAGC,QAAAC,aAAA,gOAQ3By9C,ICPOK,GAAoBh+C,aAAGC,QAAAC,aAAA,oWAS9By9C,ICVOM,GAAoBj+C,aAAGC,QAAAC,aAAA,6MAQ9By9C,ICPOO,GAA8Bl+C,aAAGC,QAAAC,aAAA,6WASxCy9C,ICVOQ,GAAkBn+C,aAAGC,QAAAC,aAAA,mOAQ5By9C,ICPOS,GAAiBp+C,aAAGC,QAAAC,aAAA,+QAQ3By9C,ICTOU,GAAiBr+C,aAAGC,QAAAC,aAAA,oOAQ3By9C,IAGS,YAACznB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQ2hD,GAAgB,CACzC3rB,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECvBY+nB,GAAiBt+C,aAAGC,QAAAC,aAAA,oOAQ3By9C,IAGS,YAACznB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQ4hD,GAAgB,CACzC5rB,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBYgoB,GAAkBv+C,aAAGC,QAAAC,aAAA,sOAQ5By9C,IAGS,YAACznB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQ6hD,GAAiB,CAC1C7rB,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBYioB,GAAcx+C,aAAGC,QAAAC,aAAA,4QAQxBy9C,ICROc,GAAgBz+C,aAAGC,QAAAC,aAAA,8QAQ1By9C,ICmBSe,GAjBC,CACZjkC,OXCW,SAACyb,GAEZ,IAAQtjC,EAASsjC,EAATtjC,KAEFxN,EAAQwwC,GAAchjC,GAE5B,OAAOujC,GAAcz5B,QAAQqhD,GAAgB,CACzC34D,MAAKP,YAAA,GACEO,KAERoL,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,KAFiB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAIvC,IAAGiY,MAAMC,KAEZ,EWjBGooB,QVEW,SAACzoB,GACZ,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,GAAcz5B,QAAQshD,GAAmB,CAC5C90D,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,OAAM,SAAA7uC,GAEL,MADA+nD,QAAQ/nD,MAAMA,GACR,IAAIgJ,MAAM,sCACpB,IAAG6lC,MAAMC,KACZ,EUpBG4oB,QTDW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,GAAcz5B,QAAQuhD,GAAmB,CAC5CttD,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,ESTG6oB,iBREW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,GAAcz5B,QAAQwhD,GAA6B,CACtDh1D,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EQpBG8oB,OPHW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQyhD,GAAiB,CAC1CzrB,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EOPGiK,ONHW,SAACtK,GACZ,IAAQ7uC,EAA2B6uC,EAA3B7uC,GAAIuL,EAAuBsjC,EAAvBtjC,KAENxN,GAF6B8wC,EAAjB96B,aAEJw6B,GAAchjC,IAE5B,OAAOujC,GAAcz5B,QAAQ0hD,GAAgB,CACzC1rB,MAAO,CAAErrC,MACTjC,MAAKP,YAAA,GACEO,KAERoL,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,KAFiB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAIvC,IAAGiY,MAAMC,KACZ,EMZG+oB,OAAQC,GACRlL,WCrBW,SAACne,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNk4D,GAAe,CAAEl4D,MAAK,KAE5BmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EDQGmxD,UACAC,WEvBW,SAACxpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNo4D,GAAO,CAAEp4D,MAAK,KAEpBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EFUGqxD,WACAC,YGzBW,SAAC1pB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNs4D,GAAQ,CAAEt4D,MAAK,KAErBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EHYGuxD,IFZW,SAAC3pB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQ8hD,GAAa,CACtC9rB,MAAO,CAAErrC,MACTjC,MAAO,CAAEy4D,QAAQ,KAClBrtD,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,KAFiB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAIvC,IAAGiY,MAAMC,KACZ,EECGupB,MDbW,SAAC5pB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQ+hD,GAAe,CACxC/rB,MAAO,CAAErrC,MACTjC,MAAO,CAAEy4D,QAAQ,KAClBrtD,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,KAFiB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAIvC,IAAGiY,MAAMC,KACZ,GKrBc8mB,GANI,CACfqB,YCCEviD,GAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,iBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,aAAAC,eAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,eAAa,KAAD,EACkC,OAD5DL,EAAKE,EAAAI,KACXhB,EAAOiB,UAAU,gBAAiBP,EAAK,UAAAtY,OAAasY,GAAU,IAAIE,EAAAM,OAAA,SAE3DlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EALW,EAMd,IAKaqO,GAFA,IAAIJ,GAAyB4jD,KCf/BC,GAAmBhgD,aAAGC,QAAAC,aAAA,oP,gGCKtB40B,GAA4B,SAAC5+B,GACtC,OAAQA,EAAW,CAAEsU,QAAS,CAAEnjB,GAAI6O,EAAQ7O,UAAS8G,CACzD,EAGa8mC,GAA4B,SAAC/+B,EAASqM,GAG/C,OAFkBrP,KAAQgD,EAASqM,GAEP,OAAPrM,QAAO,IAAPA,KAAS7O,GAAM,CAAEmjB,QAAS,CAAEnjB,GAAI6O,EAAQ7O,KAAS,CAAE6tC,YAAY,QAAS/mC,CACjG,EAuDaqiC,GAAmB,SAAnBA,EAAmB59B,GAC5B,OAAKA,EAEU7B,OAAOD,KAAK8B,GAAMvE,QAAO,SAACC,EAAK3F,GAC1C,GAAIA,EAAI+nC,WAAW,KACf,OAAOpiC,EAGX,IAO+DmiC,EAPzDmtB,EAAUhrD,EAAKjK,GAErB,OAAgB,OAAZi1D,QAAgCzvD,IAAZyvD,EACbtvD,EAGPs9B,MAAMC,QAAQ+xB,GACY,kBAAfA,EAAQ,IAAkC,OAAfA,EAAQ,GAC1C/4D,wBAAA,GACOyJ,GAAG,IAAAmiC,EAAA,GAAA74B,YAAA64B,EACL9nC,EAAMi1D,EAAQn1D,IAAI+nC,IAAiB54B,YAAA64B,EAAC,GAAD9rC,OAChCgE,EAAG,OAAQi1D,EAAQn1D,KAAI,SAAAiY,GAAC,OAAIA,EAAErZ,EAAE,KAACopC,IAGzC5rC,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,IAIT,kBAAZA,GAAoC,OAAZA,EAC/B/4D,wBAAA,GACOyJ,GAAG,GAAAsJ,YAAA,GAKLjP,EAAM6nC,EAAiBotB,KAIhC/4D,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,GAC5B,GAAG,CAAC,GArCc,IAwCtB,EAEahoB,GAAgB,SAAHphC,GACpBA,EAAFnN,GACSmN,EAATshC,UACWthC,EAAXuhC,YACSvhC,EAATwhC,UACOxhC,EAAPgZ,QACOhZ,EAAPyrD,QACWzrD,EAAX3J,YACW2J,EAAX0rD,YACiB,OAAAr9D,YAAA2R,EAAA1R,GAAqB,ECrH7Bq9D,GAAiBngD,aAAGC,QAAAC,aAAA,gOAQ3B8/C,IA2BSvlC,GAxBA,SAACyb,GACZ,IAAQtjC,EAASsjC,EAATtjC,KACFxN,EAAQwwC,GAAchjC,GACtBqtD,EAAUnrB,GAA0BliC,EAAKqtD,SACzCp1D,EAAciqC,GAA0BliC,EAAK/H,aAC7CK,EAAO4pC,GAA0BliC,EAAK1H,MAE5C,OAAOirC,GAAcz5B,QAAQyjD,GAAgB,CACzC/6D,MAAKP,wBAAA,GACEO,GAAK,IACR66D,UACAp1D,cACAK,WAELsF,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,KAFiB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAIvC,IAAGiY,MAAMC,KAEb,EC/Ba6pB,GAAoBpgD,aAAGC,QAAAC,aAAA,oWAS9B8/C,IAGS,YAAC9pB,GACZ,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,GAAcz5B,QAAQ0jD,GAAmB,CAC5Cl3D,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,OAAM,SAAA7uC,GAEL,MADA+nD,QAAQ/nD,MAAMA,GACR,IAAIgJ,MAAM,sCACpB,IAAG6lC,MAAMC,KACZ,EChCY8pB,GAAoBrgD,aAAGC,QAAAC,aAAA,6MAQ9B8/C,ICPOM,GAA8BtgD,aAAGC,QAAAC,aAAA,6WASxC8/C,ICbA7jD,GAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,iBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,aAAAC,eAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,eAAa,KAAD,EACkC,OAD5DL,EAAKE,EAAAI,KACXhB,EAAOiB,UAAU,gBAAiBP,EAAK,UAAAtY,OAAasY,GAAU,IAAIE,EAAAM,OAAA,SAE3DlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EALW,EAMd,IAKaqO,GAFA,IAAIJ,GAAyBokD,KCf/BC,GAAmBxgD,aAAGC,QAAAC,aAAA,wJASpB,YAACg2B,GACZ,OAAOC,GAAcz5B,QAAQ8jD,GAAkBtqB,EAClD,ECNYuqB,GAAkBzgD,aAAGC,QAAAC,aAAA,mOAQ5B8/C,ICXOU,GAAkB1gD,aAAGC,QAAAC,aAAA,+LASnB,YAACg2B,GACZ,OAAOC,GAAcz5B,QAAQgkD,GAAiBxqB,EACjD,ECRYyqB,GAAiB3gD,aAAGC,QAAAC,aAAA,+QAQ3B8/C,IAiCSxf,GA9BA,SAACtK,GACZ,IAAQ7uC,EAA2B6uC,EAA3B7uC,GAAIuL,EAAuBsjC,EAAvBtjC,KAAMwI,EAAiB86B,EAAjB96B,aAEZhW,EAAQwwC,GAAchjC,GACtBqtD,EAAUhrB,GAA0BriC,EAAKqtD,QAAS7kD,EAAa6kD,SAC/Dp1D,EAAcoqC,GAA0BriC,EAAK/H,YAAauQ,EAAavQ,aACvEK,EAAO+pC,GAA0BriC,EAAK1H,KAAMkQ,EAAalQ,MACzDg1D,EAActtD,EAAKstD,YAEzB,OAAO/pB,GAAcz5B,QAAQikD,GAAgB,CACzCjuB,MAAO,CAAErrC,MACTjC,MAAKP,wBAAA,GACEO,GAAK,IACR66D,UACAp1D,cACAK,WAELsF,MAAK,SAAAmiC,GACJ,OAAOiuB,GAAe,CAAEj4D,IAAK,GAAIwS,QAAS+kD,IACrC1vD,MAAK,SAAA/N,GAAe,IAAD2zC,EAAAC,EAAXzjC,EAAInQ,EAAJmQ,KACCyrB,EAAOmS,GAAyB,OAARmC,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,MAC9C6hC,EAAkB,OAAJttD,QAAI,IAAJA,OAAI,EAAJA,EAAMuI,QAC1B,MAAO,CACHvI,KAAI/N,wBAAA,GAAOw5B,GAAI,IAAE6hC,gBAEzB,GACR,IAAG5pB,MAAMC,KACb,ECvCasqB,GAAiB7gD,aAAGC,QAAAC,aAAA,oOAQ3B8/C,IAGS,YAAC9pB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQmkD,GAAgB,CACzCnuB,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECvBYuqB,GAAiB9gD,aAAGC,QAAAC,aAAA,oOAQ3B8/C,IAGS,YAAC9pB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQokD,GAAgB,CACzCpuB,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBYwqB,GAAkB/gD,aAAGC,QAAAC,aAAA,sOAQ5B8/C,IAGS,YAAC9pB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQqkD,GAAiB,CAC1CruB,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECAcyqB,GAfC,CACZvmC,UACAkkC,WACAQ,QVEW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,GAAcz5B,QAAQ2jD,GAAmB,CAC5C1vD,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,EUZG6oB,iBTKW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,GAAcz5B,QAAQ4jD,GAA6B,CACtDp3D,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,ESvBG8oB,ONCW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQ+jD,GAAiB,CAC1C/tB,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GACJ,OAAOsuB,GAAe,CAAEt4D,IAAK,KACxB6H,MAAK,SAAA/N,GAAe,IAAD2zC,EAAAC,EAAXzjC,EAAInQ,EAAJmQ,KACCyrB,EAAOmS,GAAyB,OAARmC,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,MAC9C6hC,EAAkB,OAAJttD,QAAI,IAAJA,OAAI,EAAJA,EAAMuI,QAC1B,MAAO,CACHvI,KAAI/N,wBAAA,GAAOw5B,GAAI,IAAE6hC,gBAEzB,GACR,IAAG5pB,MAAMC,KACZ,EMfGiK,UACA8e,OAAQC,GACRlL,WClBW,SAACne,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNk4D,GAAe,CAAEl4D,MAAK,KAE5BmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EDKGmxD,UACAC,WEpBW,SAACxpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNo4D,GAAO,CAAEp4D,MAAK,KAEpBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EFOGqxD,WACAC,YGtBW,SAAC1pB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNs4D,GAAQ,CAAEt4D,MAAK,KAErBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,GCdY4yD,GAAuBlhD,aAAGC,QAAAC,aAAA,mK,qDC0E1BswB,GAAmB,SAAnBA,EAAmB59B,GAC5B,OAAKA,EAEU7B,OAAOD,KAAK8B,GAAMvE,QAAO,SAACC,EAAK3F,GAC1C,GAAIA,EAAI+nC,WAAW,KACf,OAAOpiC,EAGX,IAO+DmiC,EAPzDmtB,EAAUhrD,EAAKjK,GAErB,OAAgB,OAAZi1D,QAAgCzvD,IAAZyvD,EACbtvD,EAGPs9B,MAAMC,QAAQ+xB,GACY,kBAAfA,EAAQ,IAAkC,OAAfA,EAAQ,GAC1C/4D,wBAAA,GACOyJ,GAAG,IAAAmiC,EAAA,GAAA74B,YAAA64B,EACL9nC,EAAMi1D,EAAQn1D,IAAI+nC,IAAiB54B,YAAA64B,EAAC,GAAD9rC,OAChCgE,EAAG,OAAQi1D,EAAQn1D,KAAI,SAAAiY,GAAC,OAAIA,EAAErZ,EAAE,KAACopC,IAGzC5rC,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,IAIT,kBAAZA,GAAoC,OAAZA,EAC/B/4D,wBAAA,GACOyJ,GAAG,GAAAsJ,YAAA,GAKLjP,EAAM6nC,EAAiBotB,KAIhC/4D,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,GAC5B,GAAG,CAAC,GArCc,IAwCtB,EC/GauD,GAAqBnhD,aAAGC,QAAAC,aAAA,gPAQ/BghD,ICPOE,GAAwBphD,aAAGC,QAAAC,aAAA,wXASlCghD,ICVOG,GAAwBrhD,aAAGC,QAAAC,aAAA,yNAQlCghD,ICPOI,GAAkCthD,aAAGC,QAAAC,aAAA,iYAS5CghD,ICVOK,GAAsBvhD,aAAGC,QAAAC,aAAA,mPAQhCghD,I,0DCROM,GAAqBxhD,aAAGC,QAAAC,aAAA,mSAQ/BghD,ICROO,GAAqBzhD,aAAGC,QAAAC,aAAA,oPAQ/BghD,IAGS,YAAChrB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQ+kD,GAAoB,CAC7C/uB,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECvBYmrB,GAAqB1hD,aAAGC,QAAAC,aAAA,oPAQ/BghD,IAGS,YAAChrB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQglD,GAAoB,CAC7ChvB,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBYorB,GAAsB3hD,aAAGC,QAAAC,aAAA,sPAQhCghD,IAGS,YAAChrB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQilD,GAAqB,CAC9CjvB,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EClBc8mB,GAPI,CACf2D,WACAY,YCQgB,CAChBnnC,OVIW,SAACyb,GAEZ,IDoGsB1hC,ECpGd5B,EAASsjC,EAATtjC,KAEFxN,IDkGgBoP,EClGM5B,GDmG5BkjC,UACWthC,EAAXuhC,YACSvhC,EAATwhC,UACOxhC,EAAPgZ,QACiB3qB,YAAA2R,EAAA1R,KCrGjB,OAAOqzC,GAAcz5B,QAAQykD,GAAoB,CAC7C/7D,MAAKP,YAAA,GACEO,KAERoL,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,KAFiB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAIvC,IAAGiY,MAAMC,KAEZ,EUpBGooB,QTKW,SAACzoB,GACZ,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,GAAcz5B,QAAQ0kD,GAAuB,CAChDl4D,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,OAAM,SAAA7uC,GAEL,MADA+nD,QAAQ/nD,MAAMA,GACR,IAAIgJ,MAAM,sCACpB,IAAG6lC,MAAMC,KACZ,ESvBG4oB,QREW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,GAAcz5B,QAAQ2kD,GAAuB,CAChD1wD,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,EQZG6oB,iBPKW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,GAAcz5B,QAAQ4kD,GAAiC,CAC1Dp4D,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EOvBG8oB,ONAW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQ6kD,GAAqB,CAC9C7uB,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EMVGiK,OLOW,SAACtK,GACZ,IATsBzzC,EASd4E,EAA2B6uC,EAA3B7uC,GAAIuL,EAAuBsjC,EAAvBtjC,KAENxN,GAF6B8wC,EAAjB96B,cATI3Y,EAWMmQ,GAV5BvL,GACS5E,EAATqzC,UACWrzC,EAAXszC,YACStzC,EAATuzC,UACOvzC,EAAP+qB,QACiB3qB,YAAAJ,EAAAK,KAOjB,OAAOqzC,GAAcz5B,QAAQ8kD,GAAoB,CAC7C9uB,MAAO,CAAErrC,MACTjC,MAAKP,YAAA,GACEO,KAERoL,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,KAFiB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAIvC,IAAGiY,MAAMC,KACZ,EKtBG+oB,OAAQC,GACRlL,WClBW,SAACne,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNk4D,GAAe,CAAEl4D,MAAK,KAE5BmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EDKGmxD,UACAC,WEpBW,SAACxpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNo4D,GAAO,CAAEp4D,MAAK,KAEpBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EFOGqxD,WACAC,YGtBW,SAAC1pB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNs4D,GAAQ,CAAEt4D,MAAK,KAErBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,ICbK6N,GAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,iBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,aAAAC,eAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,eAAa,KAAD,EACkC,OAD5DL,EAAKE,EAAAI,KACXhB,EAAOiB,UAAU,gBAAiBP,EAAK,UAAAtY,OAAasY,GAAU,IAAIE,EAAAM,OAAA,SAE3DlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EALW,EAMd,IAKaqO,GAFA,IAAIJ,GAAyB0lD,KChB/BC,GAAmB9hD,aAAGC,QAAAC,aAAA,iP,+GCmEtBswB,GAAmB,SAAA59B,GAC5B,OAAKA,GAAa,IAEtB,EC3DamvD,GAAiB/hD,aAAGC,QAAAC,aAAA,qQAU3B4hD,I,kCCfOE,GAAqBhiD,aAAGC,QAAAC,aAAA,0iBAuB/B4hD,IAGN,kBAAAr/D,EAAAka,aAAAC,eAAAC,MAAe,SAAAC,EAAMo5B,GAAI,IAAA+rB,EAAAC,EAAAr3D,EAAA3B,EAAA01D,EAAAx6C,EAAAnC,EAAA48C,EAAAhyD,EAAAqX,EAAAkyB,EAAAC,EAAA0oB,EAAAC,EAAAmD,EAAAxvB,EAAArN,EAAA25B,EAAA,OAAAriD,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAIG,GAJH4kD,EAKjB/rB,EAHAhtC,OAAW2B,GAALq3D,OAAA,IAAAD,EAAgC,CAAC,EAACA,GAA7Bp3D,YAAgB3B,EAAMrG,YAAAq/D,EAAAp/D,IAAA87D,EAGjC1oB,EAFA9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAE3B3oB,EADAz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAAK/G,EAAAC,KAAA,GAKjBvS,EAAY,CAADsS,EAAAE,KAAA,eAAAF,EAAAE,KAAA,EAEa+kD,GAAe,CAClChpC,WAAY,CAAEhV,KAAM,EAAGnC,QAAS,KAChCxC,KAAM,CAAE5S,MAAO,KAAMqX,MAAO,OAC5Bhb,OAAQ,CAAE2B,cAAaxD,GAAI6B,EAAO6sC,eACnC,KAAD,EAJIosB,EAAQhlD,EAAAI,KAMdrU,EAAOm5D,eAAiBF,EAASvvD,KAAKnK,KAAI,SAAA65D,GAAC,OAAIA,EAAEj7D,EAAE,WAC5C6B,EAAO6sC,YAAY,cAAA54B,EAAAE,KAAA,GAGP84B,GAAcz5B,QAAQslD,GAAoB,CAC7D94D,OAAQq5D,GAAYr5D,GACpBuW,KAAM,CAAA7H,YAAA,GAAI/K,EAAQqX,EAAM46C,gBACxB16C,OACAnC,YACF,QAG4C,OARxC0wB,EAAQx1B,EAAAI,KAOV+nB,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SAAQ9hD,EAAAM,OAAA,SAEtC,CACH7K,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,aACnB,QAAA/hD,EAAAC,KAAA,GAAAD,EAAAqlD,GAAArlD,EAAA,SAEDo5B,aAAmBp5B,EAAAqlD,IAAK,yBAAArlD,EAAAO,OAAA,GAAAZ,EAAA,mBAqB/B,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EAzDD,GA2DMq0D,GAAc,SAACr5D,GACjB,IAAQu5D,EAA4Bv5D,EAA5Bu5D,QAAYC,EAAW7/D,YAAKqG,EAAM2L,IACpC8tD,EAAgBF,EAAU,CAC5BA,QAAS,CACLG,UAAWH,EAAQh6D,KAAI,SAAAo6D,GAAC,OAAIA,EAAEx7D,EAAE,MAEpC,CAAC,EAEL,OAAAxC,wBAAA,GAAY89D,GAAkBD,EAClC,EC/FaI,GAAqB9iD,aAAGC,QAAAC,aAAA,8MAQ/B4hD,ICPOiB,GAA+B/iD,aAAGC,QAAAC,aAAA,8WASzC4hD,ICVOkB,GAAkBhjD,aAAGC,QAAAC,aAAA,uQAU5B4hD,ICXAmB,GAAU,CACZxoC,OLmBW,SAACyb,GACZ,ID+CsB1hC,EC/Cd5B,EAASsjC,EAATtjC,KAEFxN,ID6CgBoP,EC7CM5B,GD8C5BklD,aACUtjD,EAAVujD,WACIvjD,EAAJjP,KACWiP,EAAX0uD,YACM1uD,EAANH,OACIG,EAAJ5B,KACY4B,EAAZ4G,aACS5G,EAATshC,UACWthC,EAAXuhC,YACiBlzC,YAAA2R,EAAA1R,KCrDjB,OAAOqzC,GACFz5B,QAAQqlD,GAAgB,CACrB38D,MAAKP,YAAA,GACEO,KAGVoL,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACRhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAEnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KAChB,EKpCGooB,WACAQ,QHSW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,GAAcz5B,QAAQomD,GAAoB,CAC7CnyD,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,EGnBG6oB,iBFWW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,GAAcz5B,QAAQqmD,GAA8B,CACvD75D,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAA7H,YAAA,GAAI/K,EAAQqX,EAAM46C,gBACxB16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EE7BG8oB,ODSW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GACFz5B,QAAQsmD,GAAiB,CACtBtwB,MAAO,CAAErrC,QAEZmJ,KAAI,eAAA/N,EAAAka,aAAAC,eAAAC,MAAC,SAAAC,EAAO61B,GAAQ,IAAAyD,EAAAC,EAAAhY,EAAA,OAAAzhB,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACuB,OAAlCghB,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAAIlhB,EAAAM,OAAA,SAChC,CACH7K,KAAM49B,GAAiBnS,KAC1B,wBAAAlhB,EAAAO,OAAA,GAAAZ,EAAA,KACJ,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EALI,IAKFooC,MAAMC,KAChB,GE1Bc8mB,GANI,CACf4F,QDYWA,I,wEEdFzyB,GAAmB,SAAnBA,EAAmB59B,GAC5B,OAAKA,EACU7B,OAAOD,KAAK8B,GAAMvE,QAAO,SAACC,EAAK3F,GAC1C,GAAIA,EAAI+nC,WAAW,KACf,OAAOpiC,EAGX,IAO+DmiC,EAPzDmtB,EAAUhrD,EAAKjK,GAErB,OAAgB,OAAZi1D,QAAgCzvD,IAAZyvD,EACbtvD,EAGPs9B,MAAMC,QAAQ+xB,GACY,kBAAfA,EAAQ,IAAkC,OAAfA,EAAQ,GAC1C/4D,wBAAA,GACOyJ,GAAG,IAAAmiC,EAAA,GAAA74B,YAAA64B,EACL9nC,EAAMi1D,EAAQn1D,IAAI+nC,IAAiB54B,YAAA64B,EAAC,GAAD9rC,OAChCgE,EAAG,OAAQi1D,EAAQn1D,KAAI,SAAAiY,GAAC,OAAIA,EAAErZ,EAAE,KAACopC,IAGzC5rC,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,IAIT,kBAAZA,GAAoC,OAAZA,EAC/B/4D,wBAAA,GACOyJ,GAAG,GAAAsJ,YAAA,GAKLjP,EAAM6nC,EAAiBotB,KAIhC/4D,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,GAC5B,GAAG,CAAC,GApCc,IAuCtB,EAEahoB,GAAgB,SAAHnzC,GACbA,EAATqzC,UACWrzC,EAAXszC,YACStzC,EAATuzC,UACOvzC,EAAP+qB,QACiB,OAAA3qB,YAAAJ,EAAAK,GAAqB,ECxC7BqgE,GAAenjD,aAAGC,QAAAC,aAAA,yMAU3BH,MCdEqjD,GAAsBpjD,eAAGC,QAAAC,aAAA,gRAYxB,SAASmjD,GAAkBn6D,GAChC,IAAMo6D,EAAoBp6D,EAAOo6D,mBAAqB,GAChDC,EAAuBr6D,EAAOq6D,sBAAwB,GAE5D,GAAID,EAAkBv3D,OAAS,GAAKw3D,EAAqBx3D,OAAS,EAAG,CACnE,IAKMy3D,EAAgB,CACpBt6D,OANmB,CACnBu6D,aAAcH,EACdI,gBAAiBH,GAKjB9jD,KAAM,GACN2E,KAAM,EACNnC,QAAS,KAMX,cAHO/Y,EAAOo6D,yBACPp6D,EAAOq6D,qBAEPI,KACJjnD,QAAQ0mD,GAAqBI,GAC7BhzD,MAAK,SAACmiC,GAAc,IAADyD,EAAAC,EAElB,QADsB,OAAR1D,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,QAAS,IAChC78B,KAAI,SAACm7D,GAAG,OAAKA,EAAIv8D,EAAE,GAClC,IACCivC,MAAMC,KACX,CACE,OAAOjmC,QAAQC,QAAQ,KAE3B,CAEO,SAASszD,GAAuB36D,EAAQg5C,GACxCtW,MAAMC,QAAQqW,KAInBh5C,EAAO46D,YAAc5hB,EAASn2C,OAAS,EAAIm2C,EAAW,CAAC,IACzD,CC5CO,I,SAAM6hB,GAAkB/jD,aAAGC,QAAAC,aAAA,2VAa9BH,MChBSikD,GAAkBhkD,aAAGC,QAAAC,aAAA,yLAU9BH,MCVSkkD,GAAgBjkD,aAAGC,QAAAC,aAAA,2MAU5BH,MCXSmkD,GAAYlkD,aAAGC,QAAAC,aAAA,gM,UCAtBikD,GAAe/nD,aACnB,SAAA+nD,EAAY9nD,GAASC,YAAA,KAAA6nD,GAEnB,IAAIC,EAAqB,KAEnB7nD,EAAS8nD,wBAAa,CACxB9vB,IAAKl4B,EACLioD,UAAW,IAWXC,MAAM,EAyBNC,YAAa,kBAAM,CAAI,EAwBvBC,cAAe,IAUfC,UAAU,WAAD,IAAAC,EAAAhoD,aAAAC,eAAAC,MAAE,SAAAC,IAAA,OAAAF,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EACH,IAAI/M,SAAQ,SAACC,GAAO,OAAK6W,WAAW7W,EAAS,IAAK,IAAE,KAAD,mBAAA4M,EAAAO,OAAA,GAAAZ,EAAA,KAC1D,yBAAA6nD,EAAA9mD,MAAA,KAAA3P,UAAA,EAFS,GAIV02D,iBAAiB,WAAD,IAAAC,EAAAloD,aAAAC,eAAAC,MAAE,SAAAioD,IAAA,IAAA7nD,EAAA,OAAAL,eAAAM,MAAA,SAAA6nD,GAAA,cAAAA,EAAA3nD,KAAA2nD,EAAA1nD,MAAA,cAAA0nD,EAAA3nD,KAAA,EAAA2nD,EAAA1nD,KAAA,EAEQC,eAAa,KAAD,EAArB,OAALL,EAAK8nD,EAAAxnD,KAAAwnD,EAAAtnD,OAAA,SACJ,CACLunD,cAAe/nD,EAAK,UAAAtY,OAAasY,GAAU,KAC5C,OAAA8nD,EAAA3nD,KAAA,EAAA2nD,EAAAvC,GAAAuC,EAAA,SAEHvV,QAAQ/nD,MAAMs9D,EAAAvC,GAAI5sD,SAClBe,OAAO7H,SAASm2D,SAAS,eAAAF,EAAAtnD,OAAA,SAEpB,CAAC,GAAC,yBAAAsnD,EAAArnD,OAAA,GAAAonD,EAAA,kBACV,yBAAAD,EAAAhnD,MAAA,KAAA3P,UAAA,EAXgB,GAajBg3D,GAAI,CACF//C,UAAW,SAACggD,GACPf,GACDj9C,aAAai9C,GAGf,IAAIgB,EAAiBC,eAClBD,EAAiB,IAClBhB,EAAqBh9C,YAAW,WAC1B+9C,EAAOG,aAAeC,UAAUC,MAClCL,EAAOM,MAAM,KAAM,YACvB,GAAGL,GAEP,KA+BN,OAAO7oD,CACT,IAKaA,GAFF,IAAI4nD,GAAgBuB,KClJjC,SAASC,GAAmBzvB,EAAM0vB,EAAgBC,EAASC,GAEzD,IAAMC,EAAc5B,GAAgB6B,UAClC,CACEjpD,MAAM,qjBAwBNC,UAAWk5B,GAEb,CACE74B,KAAMuoD,EACNn+D,MAAO,SAACumC,GACNwhB,QAAQC,IAAI,iBAAD9qD,OAAkBqpC,EAAIp4B,UACjCiwD,GAAWA,EAAQ73B,EACrB,EACAi4B,SAAU,SAACC,GACT1W,QAAQC,IAAI,0BACZqW,GAAcA,EAAWI,EAC3B,IAKJzpD,KAAK0pD,YAAc,WACnB,EAEA1pD,KAAKspD,YAAc,kBAAMA,GAAc,CAEzC,CAEc,I,4hBAAA,YAAC7vB,EAAM0vB,EAAgBC,EAASC,GAC5C,OAAO,IAAIH,GAAmBzvB,EAAM0vB,EAAgBC,EAASC,EAC9D,EC9CKM,GAAQ,CACV3rC,ORWW,SAACyb,GACd,IAAQtjC,EAASsjC,EAATtjC,KAEFxN,EAAQwwC,GAAchjC,GAE5B,OAAOujC,KAAcz5B,QAAQymD,GAAc,CACzC/9D,MAAKP,YAAA,GACAO,KAGJoL,KAAI,eAAA/N,EAAAka,aAAAC,eAAAC,MAAC,SAAAC,EAAO61B,GAAQ,IAAAyD,EAAAC,EAAAhY,EAAA,OAAAzhB,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACqB,OAAlCghB,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAAIlhB,EAAAM,OAAA,SAEhC,CACL7K,KAAM49B,GAAiBnS,KACxB,wBAAAlhB,EAAAO,OAAA,GAAAZ,EAAA,KACF,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EANI,IAMFooC,MAAMC,KACZ,EQ3BGooB,QNeW,SAACzoB,GACd,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOm/C,GAAkBn6D,GAAQsH,MAAK,SAAC0xC,GAGrC,OAFA2hB,GAAuB36D,EAAQg5C,GAExB/L,KAAcz5B,QAAQqnD,GAAiB,CAC5C76D,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACCzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACZ15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACLrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAEpB,IAAG5oB,MAAMC,KACX,GACD,EMlCG4oB,QLQW,SAACjpB,GACd,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQsnD,GAAiB,CAC5CrzD,QACCH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAElB,MAAO,CACLzjC,MAFoB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEtB78B,IAAI+nC,IAEpB,IAAG8F,MAAMC,KACV,EKlBG8oB,OJOW,SAACnpB,GACd,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQunD,GAAe,CAC1CvxB,MAAO,CAAErrC,QACRmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACZhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACLzrB,KAAM49B,GAAiBnS,GAE3B,IAAGiY,MAAMC,KACV,EIjBG8vB,QHIW,SAACnwB,GACd,IAAQ3wC,EAAS2wC,EAAT3wC,KAER,OAAO4wC,KAAcz5B,QAAQwnD,GAAW,CACtC3+D,SACCiL,MAAK,SAAAmiC,GAAa,IAADyD,EAGlB,MAAO,CACLxjC,KAHoB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBkwB,WAKhC,GACD,EGfGN,cAGWI,MCdFG,GAAyBvmD,aAAGC,QAAAC,aAAA,qRCH5BswB,GAAmB,SAAnBA,EAAmB59B,GAC5B,OAAKA,EACU7B,OAAOD,KAAK8B,GAAMvE,QAAO,SAACC,EAAK3F,GAC1C,GAAIA,EAAI+nC,WAAW,KACf,OAAOpiC,EAGX,IAO+DmiC,EAPzDmtB,EAAUhrD,EAAKjK,GAErB,OAAgB,OAAZi1D,QAAgCzvD,IAAZyvD,EACbtvD,EAGPs9B,MAAMC,QAAQ+xB,GACY,kBAAfA,EAAQ,IAAkC,OAAfA,EAAQ,GAC1C/4D,wBAAA,GACOyJ,GAAG,IAAAmiC,EAAA,GAAA74B,YAAA64B,EACL9nC,EAAMi1D,EAAQn1D,IAAI+nC,IAAiB54B,YAAA64B,EAAC,GAAD9rC,OAChCgE,EAAG,OAAQi1D,EAAQn1D,KAAI,SAAAiY,GAAC,OAAIA,EAAErZ,EAAE,KAACopC,IAGzC5rC,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,IAIT,kBAAZA,GAAoC,OAAZA,EAC/B/4D,wBAAA,GACOyJ,GAAG,GAAAsJ,YAAA,GAKLjP,EAAM6nC,EAAiBotB,KAIhC/4D,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,GAC5B,GAAG,CAAC,GApCc,IAuCtB,EC/Ba4I,GAA2BxmD,aAAGC,QAAAC,aAAA,+XAavCqmD,IChBSE,GAA2BzmD,aAAGC,QAAAC,aAAA,+MAUvCqmD,ICVSG,GAAwB1mD,aAAGC,QAAAC,aAAA,uOAUpCqmD,ICXSrC,GAAYlkD,aAAGC,QAAAC,aAAA,gMCCtBymD,GAAe,CACjBhI,QJkBW,SAACzoB,GACd,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOm/C,GAAkBn6D,GAAQsH,MAAK,SAAC0xC,GAGrC,OAFA2hB,GAAuB36D,EAAQg5C,GAExB/L,KAAcz5B,QAAQ8pD,GAA0B,CACrDt9D,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACCzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACZ15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACLrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAEpB,IAAG5oB,MAAMC,KACX,GACD,EIrCG4oB,QHWW,SAACjpB,GACd,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQ+pD,GAA0B,CACrD91D,QACCH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAElB,MAAO,CACLzjC,MAFoB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEtB78B,IAAI+nC,IAEpB,IAAG8F,MAAMC,KACV,EGrBG8oB,OFUW,SAACnpB,GACd,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQgqD,GAAuB,CAClDh0B,MAAO,CAAErrC,QACRmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACZhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACLzrB,KAAM49B,GAAiBnS,GAE3B,IAAGiY,MAAMC,KACV,EEpBG8vB,QDOW,SAACnwB,GACd,IAAQ3wC,EAAS2wC,EAAT3wC,KAER,OAAO4wC,KAAcz5B,QAAQwnD,GAAW,CACtC3+D,SACCiL,MAAK,SAAAmiC,GAAa,IAADyD,EAGlB,MAAO,CACLxjC,KAHoB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBkwB,WAKhC,GACD,GChBcK,MCRTtJ,GAAa,CACf+I,SACAO,iBAKWtJ,M,UCXFyE,GAAmB9hD,aAAGC,QAAAC,aAAA,qLCEtB0mD,GAAsB5mD,aAAGC,QAAAC,aAAA,ueAuBlC4hD,ICxBE+E,GAAa,CACflI,QD0BW,SAACzoB,GACd,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,KAAcz5B,QAAQkqD,GAAqB,CAC9C19D,SACAuW,KAAM,CAAA7H,YAAA,GAAI/K,EAAQqX,EAAM46C,gBACxB16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EAGhB,MAAO,CACHpsD,KAHuB,QAAhBwjC,EAAGzD,EAAS//B,YAAI,IAAAwjC,GAAM,QAANC,EAAbD,EAAexjC,YAAI,IAAAyjC,OAAN,EAAbA,EAAqB/Q,MAI/BtmB,OAH0B,QAAhB+/C,EAAGpsB,EAAS//B,YAAI,IAAAmsD,GAAM,QAANC,EAAbD,EAAensD,YAAI,IAAAosD,OAAN,EAAbA,EAAqBC,UAGlBC,WAExB,GACD,GCvCc2H,M,UCLTC,GAAY,CACdnI,cAGWmI,MCDTzJ,GAAa,CACfwJ,cACAC,cAKWzJ,MCDF0J,IARyB/mD,aAAGC,QAAAC,aAAA,8FAQJF,aAAG60B,QAAA30B,aAAA,qfA0B3B8mD,GAA0BhnD,aAAGinD,QAAA/mD,aAAA,ud,8OChC7B40B,GAA4B,SAAC5+B,GACtC,OAAe,OAAPA,QAAO,IAAPA,KAAS7O,GAAM,CAAEmjB,QAAS,CAAEnjB,GAAI6O,EAAQ7O,UAAS8G,CAC7D,EAEa4mC,GAAiC,WAAmB,IACvDvqB,GAD4Ctc,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,IAC7BzF,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAEzC,OADkB8B,QAAQqhB,EAAQze,QACb,CAAEye,gBAAYrc,CACvC,EAEa6mC,GAA8B,WAAmB,IACpD7D,GADyCjjC,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,IAC9BzF,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAErC,OADc8B,QAAQgoC,EAAIplC,QACT,CAAEolC,YAAQhjC,CAC/B,EAEa8mC,GAA4B,SAAC/+B,EAASqM,GAE/C,OADkBrP,KAAQgD,EAASqM,GACP,OAAPrM,QAAO,IAAPA,KAAS7O,GAAM,CAAEmjB,QAAS,CAAEnjB,GAAW,OAAP6O,QAAO,IAAPA,OAAO,EAAPA,EAAS7O,KAAS,CAAE6tC,YAAY,QAAS/mC,CAClG,EAEagnC,GAAiC,WAAkC,IAAjCj/B,EAAOhI,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAIqU,EAAQrU,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAC9Dsc,EAAU4qB,KAAWl/B,EAASqM,GAAU9Z,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IACzD6tC,EAAaE,KAAW7yB,EAAUrM,GAASzN,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAGlE,OAF8B8B,QAAQqhB,EAAQze,SAAW5C,QAAQ+rC,EAAWnpC,QAE3C,CAC7Bye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,EAC7C+mC,WAAY/rC,QAAQ+rC,EAAWnpC,QAAUmpC,OAAa/mC,QACtDA,CACR,EASaqiC,GAAmB,SAAA59B,GAC5B,OAAKA,EAEO/N,wBAAA,GACL+N,GAAI,IACPrN,KAAMqN,EAAK4a,QAAO,0CAAA7oB,OAAeiO,EAAKrN,MAASqN,EAAKrN,KACpDgwC,WAAY3iC,EAAK2iC,YAAc3iC,EAAK2iC,WAAW9sC,KAAI,SAAC41B,GAAI,OAAAx5B,wBAAA,GAAWw5B,GAAI,IAAE94B,KAAM84B,EAAK7Q,QAAO,0CAAA7oB,OAAe05B,EAAK94B,MAAS84B,EAAK94B,MAAI,IACjIiwC,cAAe5iC,EAAK2iC,YAAc3iC,EAAK2iC,WAAW9sC,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,IACpE2pB,iBAAkBpe,EAAKoe,kBAAgBnsB,wBAAA,GAAS+N,EAAKoe,kBAAgB,IAAEzrB,KAAMqN,EAAKoe,iBAAiBxD,QAAO,0CAAA7oB,OAAeiO,EAAKoe,iBAAiBzrB,MAASqN,EAAKoe,iBAAiBzrB,OAC9K2hE,SAAUt0D,EAAK28C,OAAS38C,EAAK28C,MAAM9mD,KAAI,SAAA+L,GAAK,OAAAA,EAAFnN,EAAW,IACrDouC,UAAW7iC,EAAK0sB,QAAU1sB,EAAK0sB,OAAO72B,KAAI,SAAAo2B,GAAK,OAAAA,EAAFx3B,EAAW,IACxDquC,mBAAoB9iC,EAAK+iC,iBAAmB/iC,EAAK+iC,gBAAgBltC,KAAI,SAAAq4B,GAAK,OAAAA,EAAFz5B,EAAW,MAVrE,IActB,EAEauuC,GAAgB,SAAHC,GACbA,EAATC,UACWD,EAAXE,YACSF,EAATG,UACOH,EAAProB,QACIqoB,EAAJhsC,KACUgsC,EAAVqB,WACUrB,EAAVN,WACaM,EAAbL,cACgBK,EAAhB7kB,iBACM6kB,EAANvW,OACSuW,EAATJ,UACKI,EAAL0Z,MACQ1Z,EAARqxB,SACQrxB,EAAR/C,SACe+C,EAAfF,gBACkBE,EAAlBH,mBACiBG,EAAjBsxB,kBACItxB,EAAJ9M,KACiB,OAAAlmC,YAAAgzC,EAAA/yC,GAAqB,ECjE7BskE,GAAepnD,aAAGC,QAAAC,aAAA,+MAU3B6mD,ICXSM,GAAqBrnD,aAAGC,QAAAC,aAAA,sN,eCLxBonD,GAAkBtnD,aAAGC,QAAAC,aAAA,iaAuB9B8mD,IA4BEzE,GAAc,SAACr5D,GACnB,IAAQu5D,EAA4Bv5D,EAA5Bu5D,QAAYC,EAAW7/D,YAAKqG,EAAMpG,IACpC6/D,EAAgBF,EAAU,CAC9BA,QAAS,CACPG,UAAWH,EAAQh6D,KAAI,SAAAo6D,GAAC,OAAIA,EAAEx7D,EAAE,MAEhC,CAAC,EAEL,OAAAxC,wBAAA,GAAY89D,GAAkBD,EAChC,EC7Da6E,GAAkBvnD,aAAGC,QAAAC,aAAA,+MAQ5B8mD,ICPOQ,GAA4BxnD,aAAGC,QAAAC,aAAA,2WAStC8mD,ICVOS,GAAgBznD,aAAGC,QAAAC,aAAA,6LAQ5B6mD,ICHSW,GAAe1nD,aAAGC,QAAAC,aAAA,4QAa3B6mD,IClBSY,GAAe3nD,aAAGC,QAAAC,aAAA,kOAQzB6mD,IAGS,YAAC7wB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQirD,GAAc,CACvCj1B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECvBYqxB,GAAe5nD,aAAGC,QAAAC,aAAA,kOAQzB6mD,IAGS,YAAC7wB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQkrD,GAAc,CACvCl1B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBYsxB,GAAgB7nD,aAAGC,QAAAC,aAAA,oOAQ1B6mD,IAGS,YAAC7wB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQmrD,GAAe,CACxCn1B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBYuxB,GAAiB9nD,aAAGC,QAAAC,aAAA,sOAQ3B6mD,ICROgB,GAAmB/nD,aAAGC,QAAAC,aAAA,0OAQ7B6mD,ICCAiB,GAAQ,CACVvtC,OZWW,SAACyb,GACd,IAAQtjC,EAASsjC,EAATtjC,KAEFxN,EAAQwwC,GAAchjC,GACtB/I,EAAOirC,GAA0BliC,EAAK/I,MACtCqtC,EAAapC,GAA0BliC,EAAKskC,YAC5ClmB,EAAmB8jB,GAA0BliC,EAAKoe,kBAClDukB,EAAaR,GAA+BniC,EAAK4iC,eACjDlW,EAASyV,GAA+BniC,EAAK6iC,WAC7C8Z,EAAQxa,GAA+BniC,EAAKs0D,UAC5CvxB,EAAkBX,GAA4BpiC,EAAK8iC,oBAEzD,OAAOS,KACJz5B,QAAQ0qD,GAAc,CACrBhiE,MAAKP,wBAAA,GACAO,GAAK,IACRyE,OACAqtC,aACAlmB,mBACAukB,aACAjW,SACAiwB,QACA5Z,sBAGHnlC,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAEnC,MAAO,CACLzrB,KAAM49B,GAAiBnS,GAE3B,IAAGiY,MAAMC,KACZ,EY1CG2d,WXMW,SAAChe,GACd,IAAQtjC,EAAqBsjC,EAArBtjC,KAAMwhD,EAAele,EAAfke,WAERhvD,EAAQwN,EAAKnK,KAAI,SAAA41B,GACrB,IAAMj5B,EAAQwwC,GAAcvX,GACtBx0B,EAAOirC,GAA0BliC,EAAK/I,MACtCqtC,EAAapC,GAA0BzW,EAAK6Y,YAC5ClmB,EAAmB8jB,GAA0BzW,EAAKrN,kBAClDukB,EAAaR,GAA+B1W,EAAKmX,eACjDlW,EAASyV,GAA+B1W,EAAKoX,WAC7CE,EAAkBX,GAA4B3W,EAAKqX,oBAEzD,OAAA7wC,wBAAA,GACKO,GAAK,IACRyE,OACAqtC,aACAlmB,mBACAukB,aACAjW,SACAqW,mBAEJ,IAGA,OAAOQ,KACJz5B,QAAQ2qD,GAAoB,CAC3BjiE,QACAgvD,eAED5jD,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACLzjC,KAAM,CAAEk/C,MAFY,OAARnf,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsByb,OAItC,IAAGxb,MAAMC,KACZ,EWxCGooB,QVgBW,SAACzoB,GACd,IACEhtC,EAGEgtC,EAHFhtC,OAAM01D,EAGJ1oB,EAFF9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAEzB3oB,EADFz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAGjB,OAAOiyB,KACJz5B,QAAQ4qD,GAAiB,CACxBp+D,OAAQq5D,GAAYr5D,GACpBuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YAEDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACZ15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SAErC,MAAO,CACLrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAEpB,IAAG5oB,MAAMC,KACZ,EUtCG4oB,QTDW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQ6qD,GAAiB,CAC1C52D,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAGhB,MAAO,CACHzjC,MAHkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OACjB78B,IAAI+nC,IAI3B,IAAG8F,MAAMC,KACZ,ESVG6oB,iBRCW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,KAAcz5B,QAAQ8qD,GAA2B,CACpDt+D,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EQnBG8oB,OPHW,SAACnpB,GACd,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQ+qD,GAAe,CAC1C/0B,MAAO,CAAErrC,QAERmJ,KAAI,eAAA/N,EAAAka,aAAAC,eAAAC,MAAC,SAAAC,EAAO61B,GAAQ,IAAAyD,EAAAC,EAAAzjC,EAAA,OAAAgK,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACsC,OAAnDzK,EAAO49B,GAAyB,OAARmC,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,MAAKlhB,EAAAM,OAAA,SAClD,CACL7K,SACD,wBAAAuK,EAAAO,OAAA,GAAAZ,EAAA,KACF,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EALI,IAKFooC,MAAMC,KACZ,EORGiK,ONMW,SAACtK,GACd,IAAQ7uC,EAA2B6uC,EAA3B7uC,GAAIuL,EAAuBsjC,EAAvBtjC,KAAMwI,EAAiB86B,EAAjB96B,aAEZhW,EAAQwwC,GAAchjC,GACtB/I,EAAOorC,GAA0BriC,EAAK/I,KAAMuR,EAAavR,MACzDqtC,EAAajC,GAA0BriC,EAAKskC,WAAY97B,EAAa87B,YACrElmB,EAAmBikB,GAA0BriC,EAAKoe,iBAAkB5V,EAAa4V,kBACjFukB,EAAaJ,GAA+BviC,EAAK4iC,cAAep6B,EAAao6B,eAC7ElW,EAAS6V,GAA+BviC,EAAK6iC,UAAWr6B,EAAaq6B,WACrE8Z,EAAQpa,GAA+BviC,EAAKs0D,SAAU9rD,EAAa8rD,UACnEvxB,EPFmC,WAAmB,IACpDxE,GADyCjjC,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,IAC9BzF,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAErC,OADc8B,QAAQgoC,EAAIplC,QACT,CAAEolC,YAAQhjC,CAC/B,COF0B85D,CAA4Br1D,EAAK8iC,oBAGzD,OAAOS,KACJz5B,QAAQgrD,GAAc,CACrBh1B,MAAO,CAAErrC,MACTjC,MAAKP,wBAAA,GACAO,GAAK,IACRyE,OACAqtC,aACAlmB,mBACAukB,aACAjW,SACAiwB,QACA5Z,sBAGHnlC,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAEnC,MAAO,CACLzrB,KAAM49B,GAAiBnS,GAE3B,IAAGiY,MAAMC,KACZ,EMvCG+oB,OAAQC,GACRlL,WCrBW,SAACne,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNk4D,GAAe,CAAEl4D,MAAK,KAE5BmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EDQGmxD,UACAC,WEvBW,SAACxpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNo4D,GAAO,CAAEp4D,MAAK,KAEpBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EFUGqxD,WACAC,YGzBW,SAAC1pB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNs4D,GAAQ,CAAEt4D,MAAK,KAErBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EHYGwkC,SFZW,SAACoD,GACZ,IAAQxD,EAAUwD,EAAVxD,MAER,OAAOyD,KAAcz5B,QAAQorD,GAAgB,CACzCp1B,MAAO,CAAErrC,GAAIqrC,KACdliC,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EEEG2xB,WDbW,SAAChyB,GACZ,IAAQxD,EAAUwD,EAAVxD,MAER,OAAOyD,KAAcz5B,QAAQqrD,GAAkB,CAC3Cr1B,MAAO,CAAErrC,GAAIqrC,KACdliC,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,GCKcyxB,MI/BFG,GAAyBnoD,aAAGC,QAAAC,aAAA,2GCyC5BswB,GAAmB,SAAA59B,GAC5B,OAAKA,EAEO/N,wBAAA,GACL+N,GAAI,IACPrN,KAAMqN,EAAK4a,QAAO,0CAAA7oB,OAAeiO,EAAKrN,MAASqN,EAAKrN,OAJtC,IAQtB,EAEa6iE,GAAgB,CAAE/gE,GAAI,aAAc9B,KAAM,0CAAa29D,YAAa,MC9CpEoE,GAAkBtnD,aAAGC,QAAAC,aAAA,gaAuB9BioD,ICxBSZ,GAAkBvnD,aAAGC,QAAAC,aAAA,8MAQ5BioD,ICPOX,GAA4BxnD,aAAGC,QAAAC,aAAA,0WAStCioD,ICbAE,GAAoB,CACtB1J,QH8BW,SAACzoB,GACd,IACEhtC,EAGEgtC,EAHFhtC,OAAM01D,EAGJ1oB,EAFF9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAEzB3oB,EADFz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAGjB,OAAOiyB,KACJz5B,QAAQ4qD,GAAiB,CACxBp+D,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YAEDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAuJ,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAEVvjC,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,GAApBA,EAAsB/Q,MAAK,CAAI8iC,IAAazjE,OAAA6J,aAAa,OAARmkC,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,OAAN,EAARA,EAAgBnsD,KAAK0yB,QAAiB,OAARqN,QAAQ,IAARA,GAAc,QAAN21B,EAAR31B,EAAU//B,YAAI,IAAA01D,GAAM,QAANC,EAAdD,EAAgB11D,YAAI,IAAA21D,OAAZ,EAARA,EAAsBjjC,MAC7G25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAAN61B,EAAR71B,EAAU//B,YAAI,IAAA41D,GAAM,QAANC,EAAdD,EAAgB51D,YAAI,IAAA61D,GAApBA,EAAsBxJ,SAAQp6D,wBAAA,GAAgB,OAAR8tC,QAAQ,IAARA,GAAc,QAAN+1B,EAAR/1B,EAAU//B,YAAI,IAAA81D,OAAN,EAARA,EAAgB91D,KAAKqsD,UAAQ,IAAEC,YAAoB,OAARvsB,QAAQ,IAARA,GAAc,QAANg2B,EAARh2B,EAAU//B,YAAI,IAAA+1D,OAAN,EAARA,EAAgB/1D,KAAKqsD,SAASC,YAAa,IAAc,OAARvsB,QAAQ,IAARA,GAAc,QAANi2B,EAARj2B,EAAU//B,YAAI,IAAAg2D,GAAM,QAANC,EAAdD,EAAgBh2D,YAAI,IAAAi2D,OAAZ,EAARA,EAAsB5J,SAEzK,MAAO,CACLrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAEpB,IAAG5oB,MAAMC,KACZ,EGrDG4oB,QFYW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQ6qD,GAAiB,CAC1C52D,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAuJ,EAAAC,EAEVjjC,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,GAApBA,EAAsB/Q,MAAK,CAAI8iC,IAAazjE,OAAA6J,aAAa,OAARmkC,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,OAAN,EAARA,EAAgBnsD,KAAK0yB,QAAiB,OAARqN,QAAQ,IAARA,GAAc,QAAN21B,EAAR31B,EAAU//B,YAAI,IAAA01D,GAAM,QAANC,EAAdD,EAAgB11D,YAAI,IAAA21D,OAAZ,EAARA,EAAsBjjC,MACzGA,EAAM78B,IAAI+nC,IACpB,MAAO,CACH59B,KAAM0yB,EAAM78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,EExBG6oB,iBDcW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,KAAcz5B,QAAQ8qD,GAA2B,CACpDt+D,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAuJ,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACVvjC,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,GAApBA,EAAsB/Q,MAAK,CAAI8iC,IAAazjE,OAAA6J,aAAa,OAARmkC,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,OAAN,EAARA,EAAgBnsD,KAAK0yB,QAAiB,OAARqN,QAAQ,IAARA,GAAc,QAAN21B,EAAR31B,EAAU//B,YAAI,IAAA01D,GAAM,QAANC,EAAdD,EAAgB11D,YAAI,IAAA21D,OAAZ,EAARA,EAAsBjjC,MAC7G25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAAN61B,EAAR71B,EAAU//B,YAAI,IAAA41D,GAAM,QAANC,EAAdD,EAAgB51D,YAAI,IAAA61D,GAApBA,EAAsBxJ,SAAQp6D,wBAAA,GAAgB,OAAR8tC,QAAQ,IAARA,GAAc,QAAN+1B,EAAR/1B,EAAU//B,YAAI,IAAA81D,OAAN,EAARA,EAAgB91D,KAAKqsD,UAAQ,IAAEC,YAAoB,OAARvsB,QAAQ,IAARA,GAAc,QAANg2B,EAARh2B,EAAU//B,YAAI,IAAA+1D,OAAN,EAARA,EAAgB/1D,KAAKqsD,SAASC,YAAa,IAAc,OAARvsB,QAAQ,IAARA,GAAc,QAANi2B,EAARj2B,EAAU//B,YAAI,IAAAg2D,GAAM,QAANC,EAAdD,EAAgBh2D,YAAI,IAAAi2D,OAAZ,EAARA,EAAsB5J,SAC/J35B,EAAM78B,IAAI+nC,IACpB,MAAO,CACH59B,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,GC/Bc8xB,MCKFS,GAAoB9oD,aAAGC,QAAAC,aAAA,kPAQ9By0B,ICZOo0B,GAA2B/oD,aAAGC,QAAAC,aAAA,sOCH9B8oD,GAAwBhpD,aAAGC,QAAAC,aAAA,4XASlC00B,ICVOq0B,GAAwBjpD,aAAGC,QAAAC,aAAA,+NAQlC00B,ICPOs0B,GAAkClpD,aAAGC,QAAAC,aAAA,qYAS5C00B,ICVOu0B,GAAqBnpD,aAAGC,QAAAC,aAAA,qPAQ/By0B,ICDOy0B,GAAoBppD,aAAGC,QAAAC,aAAA,oSAQ9By0B,IChBO00B,GAAoBrpD,aAAGC,QAAAC,aAAA,sPAQ9By0B,IAGS,YAACuB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQ2sD,GAAmB,CAC5C32B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBY+yB,GAAoBtpD,aAAGC,QAAAC,aAAA,sPAQ9By0B,IAGS,YAACuB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQ4sD,GAAmB,CAC5C52B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBYgzB,GAAqBvpD,aAAGC,QAAAC,aAAA,wPAQ/By0B,IAGS,YAACuB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQ6sD,GAAoB,CAC7C72B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBYizB,GAAsBxpD,aAAGC,QAAAC,aAAA,0PAQhCy0B,ICRO80B,GAAwBzpD,aAAGC,QAAAC,aAAA,8PAQlCy0B,ICIA+0B,GAAa,CACfjvC,OZOW,SAACyb,GACZ,IAAQtjC,EAASsjC,EAATtjC,KAEFxN,EAAQwwC,GAAchjC,GACtB/I,EAAOirC,GAA0BliC,EAAK/I,MACtCwrC,EAASN,GAA+BniC,EAAK0iC,WAC7CC,EAAaR,GAA+BniC,EAAK4iC,eACjDxkB,EAAmB8jB,GAA0BliC,EAAKoe,kBAClD2kB,EAAkBX,GAA4BpiC,EAAK8iC,oBACnDpW,EAASyV,GAA+BniC,EAAK6iC,WAEnD,OAAOU,KAAcz5B,QAAQosD,GAAmB,CAC5C1jE,MAAKP,wBAAA,GACEO,GAAK,IACRyE,OACAwrC,SACAE,aACAvkB,mBACA2kB,kBACArW,aAEL9uB,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EYjCG2d,WXCW,SAAChe,GACd,IAAQtjC,EAAqBsjC,EAArBtjC,KAAMwhD,EAAele,EAAfke,WAERhvD,EAAQwN,EAAKnK,KAAI,SAAA41B,GACrB,IAAMj5B,EAAQwwC,GAAcvX,GACtBx0B,EAAOirC,GAA0BliC,EAAK/I,MACtCwrC,EAASN,GAA+B1W,EAAKiX,WAC7CC,EAAaR,GAA+B1W,EAAKmX,eACjDxkB,EAAmB8jB,GAA0BzW,EAAKrN,kBAClD2kB,EAAkBX,GAA4B3W,EAAKqX,oBACnDpW,EAASyV,GAA+B1W,EAAKoX,WAEnD,OAAA5wC,wBAAA,GACKO,GAAK,IACRyE,OACAwrC,SACAE,aACAvkB,mBACA2kB,kBACArW,UAEJ,IAGA,OAAO6W,KACJz5B,QAAQqsD,GAA0B,CACjC3jE,QACAgvD,eAED5jD,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACLzjC,KAAM,CAAEk/C,MAFY,OAARnf,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsByb,OAItC,IAAGxb,MAAMC,KACZ,EWnCGooB,QVDW,SAACzoB,GACZ,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,KAAcz5B,QAAQssD,GAAuB,CAChD9/D,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EUdG4oB,QTJW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQusD,GAAuB,CAChDt4D,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,ESNG6oB,iBRHW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,KAAcz5B,QAAQwsD,GAAiC,CAC1DhgE,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EQfG8oB,OPNW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQysD,GAAoB,CAC7Cz2B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EOJGiK,ONAW,SAACtK,GACZ,IAAQ7uC,EAA2B6uC,EAA3B7uC,GAAIuL,EAAuBsjC,EAAvBtjC,KAAMwI,EAAiB86B,EAAjB96B,aAEZhW,EAAQwwC,GAAchjC,GACtB/I,EAAOorC,GAA0BriC,EAAK/I,KAAMuR,EAAavR,MACzDwrC,EAASF,GAA+BviC,EAAK0iC,UAAWl6B,EAAak6B,WACrEC,EAAaJ,GAA+BviC,EAAK4iC,cAAep6B,EAAao6B,eAC7ExkB,EAAmBikB,GAA0BriC,EAAKoe,iBAAkB5V,EAAa4V,kBACjF2kB,E3OWiC,WAAmB,IACpDxE,GADyCjjC,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,IAC9BzF,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAErC,OADc8B,QAAQgoC,EAAIplC,QACT,CAAEolC,YAAQhjC,CAC/B,C2Of4B85D,CAA4Br1D,EAAK8iC,oBACnDpW,EAAS6V,GAA+BviC,EAAK6iC,UAAWr6B,EAAaq6B,WAE3E,OAAOU,KAAcz5B,QAAQ0sD,GAAmB,CAC5C12B,MAAO,CAAErrC,MACTjC,MAAKP,wBAAA,GACEO,GAAK,IACRyE,OACAwrC,SACAE,aACAvkB,mBACA2kB,kBACArW,aAEL9uB,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EM3BG+oB,OAAQC,GACRlL,WCxBW,SAACne,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNk4D,GAAe,CAAEl4D,MAAK,KAE5BmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EDWGmxD,UACAC,WE1BW,SAACxpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNo4D,GAAO,CAAEp4D,MAAK,KAEpBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EFaGqxD,WACAC,YG5BW,SAAC1pB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNs4D,GAAQ,CAAEt4D,MAAK,KAErBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EHeG2oC,UACAnE,SFhBW,SAACoD,GACZ,IAAQxD,EAAUwD,EAAVxD,MAER,OAAOyD,KAAcz5B,QAAQ8sD,GAAqB,CAC9C92B,MAAO,CAAErrC,GAAIqrC,KACdliC,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EEMG2xB,WDjBW,SAAChyB,GACZ,IAAQxD,EAAUwD,EAAVxD,MAER,OAAOyD,KAAcz5B,QAAQ+sD,GAAuB,CAChD/2B,MAAO,CAAErrC,GAAIqrC,KACdliC,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,GCScmzB,MInCFC,GAA6B3pD,aAAGC,QAAAC,aAAA,qMAahC0pD,GAA+B5pD,aAAG60B,QAAA30B,aAAA,uMAalC2pD,GAAoB7pD,aAAGinD,QAAA/mD,aAAA,gMAQhCypD,IAGSG,GAA0B9pD,aAAG+pD,QAAA7pD,aAAA,2MAQ7B8pD,GAAoBhqD,aAAGiqD,QAAA/pD,aAAA,qMAQhCypD,IAGSO,GAAuBlqD,aAAGmqD,QAAAjqD,aAAA,gVAWnC0pD,IAGSQ,GAAuBpqD,aAAGqqD,QAAAnqD,aAAA,8KAQnC0pD,IAGSU,GAAiCtqD,aAAGuqD,QAAArqD,aAAA,yVAW7C0pD,IAGSY,GAAqBxqD,aAAGyqD,QAAAvqD,aAAA,kMAQjCypD,IAGSe,GAAoB1qD,aAAG2qD,QAAAzqD,aAAA,sMAQhCypD,IAGSiB,GAAqB5qD,aAAG6qD,QAAA3qD,aAAA,wMAQjCypD,IAGSmB,GAAoB9qD,aAAG+qD,QAAA7qD,aAAA,mPAQhCypD,I,iGCjHS50B,GAAiC,WAAmB,IACvDvqB,GAD4Ctc,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,IAC7BzF,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAGzC,OAFkB8B,QAAQqhB,EAAQze,QAEb,CACjBye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,QAC7CA,CACR,EAQagnC,GAAiC,WAAkC,IAAjCj/B,EAAOhI,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAIqU,EAAQrU,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAC9Dsc,EAAU4qB,KAAWl/B,EAASqM,GAAU9Z,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IACzD6tC,EAAaE,KAAW7yB,EAAUrM,GAASzN,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAGlE,OAF8B8B,QAAQqhB,EAAQze,SAAW5C,QAAQ+rC,EAAWnpC,QAE3C,CAC7Bye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,EAC7C+mC,WAAY/rC,QAAQ+rC,EAAWnpC,QAAUmpC,OAAa/mC,QACtDA,CACR,EAea68D,GAAY,SAACp4D,GACtB,OAAKA,EAEL/N,wBAAA,GACO+N,GAAI,IACPrN,KAAMqN,EAAK4a,QAAO,0CAAA7oB,OAAeiO,EAAKrN,MAASqN,EAAKrN,KACpD+vC,UAAW1iC,EAAKyiC,QAAUziC,EAAKyiC,OAAO5sC,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,IACxD4jE,WAAYr4D,EAAKhN,SAAWgN,EAAKhN,QAAQ6C,KAAI,SAAA+L,GAAK,OAAAA,EAAFnN,EAAW,MAN7C,IAQtB,EAEa6jE,GAAc,SAAHrsC,GACXA,EAATiX,UACWjX,EAAXkX,YACSlX,EAATmX,UACOnX,EAAPrR,QACMqR,EAANwW,OACSxW,EAATyW,UACOzW,EAAPj5B,QACUi5B,EAAVosC,WACiB,OAAApoE,YAAAg8B,EAAA/7B,GAAqB,ECxD3B23B,GArBA,SAACyb,GACZ,IAAQtjC,EAASsjC,EAATtjC,KACFxN,EAAKP,wBAAA,GACJqmE,GAAYt4D,IAAK,IACpByiC,OAAQN,GAA+BniC,EAAK0iC,WAC5C1vC,QAASmvC,GAA+BniC,EAAKq4D,cAGjD,OAAO90B,KACFz5B,QAAQmtD,GAAmB,CACxBzkE,UAEHoL,MAAK,SAAAmiC,GAAa,IAADyD,EAEd,MAAO,CACHxjC,KAFSo4D,GAAuB,QAAd50B,EAACzD,EAAS//B,YAAI,IAAAwjC,OAAA,EAAbA,EAAexjC,MAI1C,IACC0jC,MAAMC,KACf,ECMe2d,GA1BI,SAAChe,GAClB,IAAQtjC,EAAqBsjC,EAArBtjC,KAAMwhD,EAAele,EAAfke,WAERhvD,EAAQwN,EAAKnK,KAAI,SAAA41B,GACrB,OAAAx5B,wBAAA,GACKqmE,GAAY7sC,IAAK,IACpBgX,OAAQN,GAA+B1W,EAAKiX,WAC5C1vC,QAASmvC,GAA+B1W,EAAK4sC,aAEjD,IAEA,OAAO90B,KACJz5B,QAAQotD,GAAyB,CAChC1kE,QACAgvD,eAED5jD,MAAK,SAAAmiC,GAAa,IAADyD,EAEhB,MAAO,CACLxjC,KAAM,CAAEk/C,MAFiB,QAAhB1b,EAAGzD,EAAS//B,YAAI,IAAAwjC,OAAA,EAAbA,EAAe0b,OAI/B,IACCxb,MAAMC,KACX,ECCeooB,GAvBC,SAACzoB,GACb,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MACxDzE,EAAO,CAAA7H,YAAA,GAAI/K,EAAQqX,EAAM46C,gBAE/B,OAAO3oB,KACFz5B,QAAQwtD,GAAsB,CAC3BhhE,SACAuW,OACA2E,OACAnC,YAEHzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAA2oB,EAAAoM,EAGd,MAAO,CACHv4D,KAHsB,QAAhBwjC,EAAGzD,EAAS//B,YAAI,IAAAwjC,OAAA,EAAbA,EAAexjC,KAAKnK,IAAIuiE,IAIjChsD,MAHuB,QAAhB+/C,EAAGpsB,EAAS//B,YAAI,IAAAmsD,GAAU,QAAVoM,EAAbpM,EAAeE,gBAAQ,IAAAkM,OAAV,EAAbA,EAAyBjM,WAK3C,IACC5oB,MAAMC,KACf,ECLe4oB,GAhBC,SAACjpB,GACb,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KACFz5B,QAAQ0tD,GAAsB,CAC3Bz5D,QAEHH,MAAK,SAAAmiC,GAAa,IAADyD,EAEd,MAAO,CACHxjC,KAFsB,QAAhBwjC,EAAGzD,EAAS//B,YAAI,IAAAwjC,OAAA,EAAbA,EAAexjC,KAAKnK,IAAIuiE,IAIzC,IACC10B,MAAMC,KACf,ECYe6oB,GAzBU,SAAClpB,GACtB,IAAgBk1B,EAAsFl1B,EAA9FhtC,OAAM01D,EAAwF1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GACzF6B,EAAMrE,wBAAA,GACLumE,GACAj6B,KAAI,CAAC,EAAGzjC,EAAQrG,IAEjBoY,EAAO,CAAA7H,YAAA,GAAI/K,EAAQqX,EAAM46C,gBAE/B,OAAO3oB,KAAcz5B,QAAQ4tD,GAAgC,CACzDphE,SACAuW,OACA2E,OACAnC,YAECzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAA2oB,EAAAoM,EAGd,MAAO,CACHv4D,KAHsB,QAAhBwjC,EAAGzD,EAAS//B,YAAI,IAAAwjC,OAAA,EAAbA,EAAexjC,KAAKnK,IAAIuiE,IAIjChsD,MAHuB,QAAhB+/C,EAAGpsB,EAAS//B,YAAI,IAAAmsD,GAAU,QAAVoM,EAAbpM,EAAeE,gBAAQ,IAAAkM,OAAV,EAAbA,EAAyBjM,WAK3C,IACC5oB,MAAMC,KACf,ECNe8oB,GAjBA,SAACnpB,GACZ,IACMxD,EAAQ,CAAErrC,GADD6uC,EAAP7uC,IAGR,OAAO8uC,KACFz5B,QAAQ8tD,GAAoB,CACzB93B,UAEHliC,MAAK,SAAAmiC,GAAa,IAADyD,EAEd,MAAO,CACHxjC,KAFSo4D,GAAuB,QAAd50B,EAACzD,EAAS//B,YAAI,IAAAwjC,OAAA,EAAbA,EAAexjC,MAI1C,IACC0jC,MAAMC,KACf,ECOeiK,GAvBA,SAACtK,GACZ,IAAQ7uC,EAA2B6uC,EAA3B7uC,GAAIuL,EAAuBsjC,EAAvBtjC,KAAMwI,EAAiB86B,EAAjB96B,aACZs3B,EAAQ,CAAErrC,MACVjC,EAAKP,wBAAA,GACJqmE,GAAYt4D,IAAK,IACpByiC,OAAQF,GAA+BviC,EAAK0iC,UAAWl6B,EAAak6B,WACpE1vC,QAASuvC,GAA+BviC,EAAKq4D,WAAY7vD,EAAa6vD,cAG1E,OAAO90B,KACFz5B,QAAQouD,GAAmB,CACxBp4B,QACAttC,UAEHoL,MAAK,SAAAmiC,GAAa,IAADyD,EAEd,MAAO,CACHxjC,KAFSo4D,GAAuB,QAAd50B,EAACzD,EAAS//B,YAAI,IAAAwjC,OAAA,EAAbA,EAAexjC,MAI1C,IACC0jC,MAAMC,KACf,ECJe80B,GAjBC,SAACn1B,GACb,IACMxD,EAAQ,CAAErrC,GADD6uC,EAAP7uC,IAGR,OAAO8uC,KACFz5B,QAAQstD,GAAmB,CACxBt3B,UAEHliC,MAAK,SAAAmiC,GAAa,IAADyD,EAEd,MAAO,CACHxjC,KAFSo4D,GAAuB,QAAd50B,EAACzD,EAAS//B,YAAI,IAAAwjC,OAAA,EAAbA,EAAexjC,MAI1C,IACC0jC,MAAMC,KACf,ECFe8d,GAhBI,SAACne,GAChB,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNk4D,GAAe,CAAEl4D,MAAK,KAE5BmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACJ,ECKemxD,GAjBA,SAACvpB,GACZ,IACMxD,EAAQ,CAAErrC,GADD6uC,EAAP7uC,IAGR,OAAO8uC,KACFz5B,QAAQguD,GAAmB,CACxBh4B,UAEHliC,MAAK,SAAAmiC,GAAa,IAADyD,EAEd,MAAO,CACHxjC,KAFSo4D,GAAuB,QAAd50B,EAACzD,EAAS//B,YAAI,IAAAwjC,OAAA,EAAbA,EAAexjC,MAI1C,IACC0jC,MAAMC,KACf,ECDempB,GAhBI,SAACxpB,GAChB,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNo4D,GAAO,CAAEp4D,MAAK,KAEpBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACJ,ECKeqxD,GAjBC,SAACzpB,GACb,IACMxD,EAAQ,CAAErrC,GADD6uC,EAAP7uC,IAGR,OAAO8uC,KACFz5B,QAAQkuD,GAAoB,CACzBl4B,UAEHliC,MAAK,SAAAmiC,GAAa,IAADyD,EAEd,MAAO,CACHxjC,KAFSo4D,GAAuB,QAAd50B,EAACzD,EAAS//B,YAAI,IAAAwjC,OAAA,EAAbA,EAAexjC,MAI1C,IACC0jC,MAAMC,KACf,ECDeqpB,GAhBK,SAAC1pB,GACjB,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNs4D,GAAQ,CAAEt4D,MAAK,KAErBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACJ,ECHMo7D,GAAa,CACfjvC,UACAy5B,cACAyK,WACAQ,WACAC,oBACAC,UACA7e,UACA8e,OAAQC,GACRlL,cACAoL,UACAC,cACAC,WACAC,gBAGW8J,MC5BF4B,GAAyBtrD,aAAGC,QAAAC,aAAA,qaC2C5BswB,GAAmB,SAAA59B,GAC5B,OAAKA,EAEO/N,wBAAA,GACL+N,GAAI,IACPrN,KAAMqN,EAAK4a,QAAO,0CAAA7oB,OAAeiO,EAAKrN,MAASqN,EAAKrN,KACpDiwC,cAAe5iC,EAAK2iC,YAAc3iC,EAAK2iC,WAAW9sC,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,IACpE6/D,SAAUt0D,EAAK28C,OAAS38C,EAAK28C,MAAM9mD,KAAI,SAAA+L,GAAK,OAAAA,EAAFnN,EAAW,IACrDouC,UAAW7iC,EAAK0sB,QAAU1sB,EAAK0sB,OAAO72B,KAAI,SAAAo2B,GAAK,OAAAA,EAAFx3B,EAAW,IACxDquC,mBAAoB9iC,EAAK+iC,iBAAmB/iC,EAAK+iC,gBAAgBltC,KAAI,SAAAq4B,GAAK,OAAAA,EAAFz5B,EAAW,MARrE,IAYtB,E,kCCjDakkE,GAA0BvrD,aAAGC,QAAAC,aAAA,gbASpCorD,IAyBA/I,GAAc,SAACr5D,GACjB,IAAQ80B,EAAkC90B,EAAlC80B,KAAMykC,EAA4Bv5D,EAA5Bu5D,QAAYC,EAAW7/D,YAAKqG,EAAM2L,IAC1C22D,EAAaxtC,EAAO,CACtBA,KAAMjtB,OAAOD,KAAKktB,GAAMv1B,KAAI,SAAAE,GACxB,IAAM4qB,EAAMyK,EAAKr1B,GACjB,OAAA9D,YAAA,CAASwC,GAAIsB,GAAQ4qB,EACzB,KACA,CAAC,EAECovC,EAAgBF,EAAU,CAC5BA,QAAS,CACLG,UAAWH,EAAQh6D,KAAI,SAAAo6D,GAAC,OAAIA,EAAEx7D,EAAE,MAEpC,CAAC,EAEL,OAAAxC,oCAAA,GAAY2mE,GAAe7I,GAAkBD,EACjD,EAEM+I,GAAY,SAAC5+D,EAAOqX,GACtB,IAAMwnD,EAAa7+D,EAAM0hC,MAAM,KAE/B,MAD+B,SAAlBm9B,EAAW,GAAgB,CAAC,CAAE1tC,KAAM,CAAE32B,GAAIqkE,EAAW,GAAIhnE,MAAOwf,EAAM46C,iBAAqB,CAAC3tB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,eAElI,EAEM6M,GAAkB,SAACC,GACrB,OAAOA,EAAWnjE,KAAI,SAAA+L,GAAK,MAAQ,CAAEnN,GAAVmN,EAAFnN,GAAgB,GAC7C,E,YC7DawkE,GAA0B7rD,aAAGC,QAAAC,aAAA,mUASpCorD,IA8CAK,GAAkB,SAACC,GACrB,OAAOA,EAAWnjE,KAAI,SAAAo2B,GAAK,MAAQ,CAAEx3B,GAAVw3B,EAAFx3B,GAAgB,GAC7C,EC7DMykE,GAAgB,CAClBnN,QFiBW,SAACpB,GACZ,IAAQr0D,EAA8Eq0D,EAA9Er0D,OAAM6iE,EAAwExO,EAAtEnkC,WAAchV,EAAI2nD,EAAJ3nD,KAAMnC,EAAO8pD,EAAP9pD,QAAO+pD,EAA2CzO,EAAvC99C,KAAQ5S,EAAKm/D,EAALn/D,MAAOqX,EAAK8nD,EAAL9nD,MAAS0nD,EAAerO,EAAfqO,WAGvE,OAAOz1B,KAAcz5B,QAAQ6uD,GAAyB,CAClDriE,OAAQq5D,GAAYr5D,GACpBuW,KAAMgsD,GAAU5+D,EAAOqX,GACvBE,OACAnC,UACA2pD,WAAYD,GAAgBC,KAC7Bp7D,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SAEvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,KAAI,SAAAhG,GAAA,IAAGu7B,EAAIv7B,EAAJu7B,KAASlX,EAAKjkB,YAAAJ,EAAAK,IAAA,OAAA+B,wBAAA,GAAa2rC,GAAiB1pB,IAAWje,KAAMm1B,EAAM,gBAAe,IACrGhf,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EEnCG4oB,QDeW,SAAC5B,GACZ,IAAQ5sD,EAAoB4sD,EAApB5sD,IAAKi7D,EAAerO,EAAfqO,WAGb,OAAOz1B,KAAcz5B,QAAQmvD,GAAyB,CAClDl7D,MACAi7D,WAAYD,GAAgBC,KAC7Bp7D,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SAEvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,KAAI,SAAAhG,GAAA,IAAGu7B,EAAIv7B,EAAJu7B,KAASlX,EAAKjkB,YAAAJ,EAAAK,IAAA,OAAA+B,wBAAA,GAAa2rC,GAAiB1pB,IAAWje,KAAMm1B,EAAM,gBAAe,IACrGhf,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,GC1Bcu1B,MCTFG,GAAoBjsD,aAAGC,QAAAC,aAAA,2lB,sBCMvBgsD,GAAoBlsD,aAAGC,QAAAC,aAAA,iWAS9B+rD,IAwBA1J,GAAc,SAACr5D,GACjB,IAAQ80B,EAAkC90B,EAAlC80B,KAAMykC,EAA4Bv5D,EAA5Bu5D,QAAYC,EAAW7/D,YAAKqG,EAAMpG,IAC1C0oE,EAAaxtC,EAAO,CACtBA,KAAMjtB,OAAOD,KAAKktB,GAAMv1B,KAAI,SAAAE,GACxB,IAAM4qB,EAAMyK,EAAKr1B,GACjB,OAAA9D,YAAA,CAASwC,GAAIsB,GAAQ4qB,EACzB,KACA,CAAC,EAECovC,EAAgBF,EAAU,CAC5BA,QAAS,CACLG,UAAWH,EAAQh6D,KAAI,SAAAo6D,GAAC,OAAIA,EAAEx7D,EAAE,MAEpC,CAAC,EAEL,OAAAxC,oCAAA,GAAY2mE,GAAe7I,GAAkBD,EACjD,ECtDMyJ,GAAW,CACbxN,QDiBW,SAACpB,GACZ,IAAQr0D,EAA8Eq0D,EAA9Er0D,OAAM6iE,EAAwExO,EAAtEnkC,WAAchV,EAAI2nD,EAAJ3nD,KAAMnC,EAAO8pD,EAAP9pD,QAAO+pD,EAA2CzO,EAAvC99C,KAAQ5S,EAAKm/D,EAALn/D,MAAOqX,EAAK8nD,EAAL9nD,MAAwBq5C,EAAfqO,WAEvE,OAAOz1B,KAAcz5B,QAAQwvD,GAAmB,CAC5ChjE,OAAQq5D,GAAYr5D,GACpBuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SAEvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,KAAI,SAAA41B,GAAI,OAAAx5B,wBAAA,IEWA+N,EFX2ByrB,GEc3Cx5B,wBAAA,GACL+N,GAAI,IACPrN,KAAMqN,EAAK4a,QAAO,0CAAA7oB,OAAeiO,EAAKrN,MAASqN,EAAKrN,KACpDiwC,cAAe5iC,EAAK2iC,YAAc3iC,EAAK2iC,WAAW9sC,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,IACpE6/D,SAAUt0D,EAAK28C,OAAS38C,EAAK28C,MAAM9mD,KAAI,SAAA+L,GAAK,OAAAA,EAAFnN,EAAW,IACrDouC,UAAW7iC,EAAK0sB,QAAU1sB,EAAK0sB,OAAO72B,KAAI,SAAAo2B,GAAK,OAAAA,EAAFx3B,EAAW,IACxDquC,mBAAoB9iC,EAAK+iC,iBAAmB/iC,EAAK+iC,gBAAgBltC,KAAI,SAAAq4B,GAAK,OAAAA,EAAFz5B,EAAW,MARrE,MFZ+CwB,KAAMw1B,EAAK+tC,UAAW,iBEW3D,IAAAx5D,CFX0E,IAC9FoM,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,GC7Bc41B,MEPFE,GAAgCrsD,aAAGC,QAAAC,aAAA,6QAoBnCosD,GAAmBtsD,aAAG60B,QAAA30B,aAAA,qICjBtBqsD,GAAmBvsD,aAAGC,QAAAC,aAAA,qNAM7BmsD,ICNOG,GAAqBxsD,aAAGC,QAAAC,aAAA,mOAM/BmsD,ICPOI,GAAkBzsD,aAAGC,QAAAC,aAAA,qOAQ5BosD,ICTAI,GAAU,CACZzjC,aHUW,SAACiN,GAEZ,IAAQhtC,EAAWgtC,EAAXhtC,OAER,OAAOitC,KAAcz5B,QAAQ6vD,GAAkB,CAC3CrjE,WACDsH,MAAK,SAAAmiC,GAAa,IAADyD,EAIhB,MAAO,CACHxjC,KAHSquB,oBAAgB,OAAR0R,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,OAAQ,GAAI,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAC/DnK,KAAI,SAAAqgC,GAAI,OAAAjkC,wBAAA,GAAUikC,GAAI,IAAEpmC,SAAWu+B,mBAAQ6H,EAAKpmC,UAAY,GAAI,CAAC,OAAQ,QAAS,CAAC,OAAQ,SAAO,IAInH,IAAG4zC,MAAMC,KACZ,EGvBGo2B,cFSW,SAACz2B,GAEZ,IAAQ6L,EAAa7L,EAAb6L,SAER,OAAO5L,KAAcz5B,QAAQ8vD,GAAoB,CAC7CriE,OAAQ,CAAE9C,GAAI06C,KACfvxC,MAAK,SAAAmiC,GAAa,IAADyD,EAIhB,MAAO,CACHxjC,KAHSquB,oBAAqB,QAAbmV,EAAAzD,EAAS//B,YAAI,IAAAwjC,OAAA,EAAbA,EAAexjC,OAAQ,GAAI,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAClEnK,KAAI,SAAAqgC,GAAI,OAAAjkC,wBAAA,GAAUikC,GAAI,IAAEpmC,SAAWu+B,mBAAQ6H,EAAKpmC,UAAY,GAAI,CAAC,OAAQ,QAAS,CAAC,OAAQ,SAAO,IAI/G,IAAG4zC,MAAMC,KACZ,EEtBG8oB,ODSW,SAACnpB,GAEZ,IAAMl5B,EAAY,CACd01B,MAAOwD,GAGX,OAAOC,KAAcz5B,QAAQ+vD,GAAiBzvD,GAAWxM,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAGtE,MAAO,CACHzjC,MAHkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,OAAQ,CAAC,EAKjD,IAAGiY,MAAMC,KACZ,GCnBcm2B,MCNFE,GAA4B5sD,aAAGC,QAAAC,aAAA,whBAmC/B2sD,GAA8B7sD,aAAG60B,QAAA30B,aAAA,0hB,4PC5BjC40B,GAA4B,SAAC5+B,GACtC,OAAe,OAAPA,QAAO,IAAPA,KAAS7O,GAAM,CAAEmjB,QAAS,CAAEnjB,GAAW,OAAP6O,QAAO,IAAPA,OAAO,EAAPA,EAAS7O,UAAS8G,CAC9D,EAwBa4mC,GAAiC,WAAmB,IACvDvqB,GAD4Ctc,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,IAC7BzF,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAGzC,OAFkB8B,QAAQqhB,EAAQze,QAEb,CACjBye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,QAC7CA,CACR,EAEagnC,GAAiC,WAAkC,IAAjCj/B,EAAOhI,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAIqU,EAAQrU,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAC9Dsc,EAAU4qB,KAAWl/B,EAASqM,GAAU9Z,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IACzD6tC,EAAaE,KAAW7yB,EAAUrM,GAASzN,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAGlE,OAF8B8B,QAAQqhB,EAAQze,SAAW5C,QAAQ+rC,EAAWnpC,QAE3C,CAC7Bye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,EAC7C+mC,WAAY/rC,QAAQ+rC,EAAWnpC,QAAUmpC,OAAa/mC,QACtDA,CACR,EAEa6mC,GAA8B,WAAmB,IACpDva,EADyCvsB,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAIlD,OAFiB/E,QAAQsxB,EAAO1uB,QAEZ,CAChB0uB,OAAQA,QACRtsB,CACR,EAgCaqiC,GAAmB,SAAA59B,GAC5B,OAAKA,EAEO/N,wBAAA,GACL+N,GAAI,IACPrN,KAAMqN,EAAK4a,QAAO,0CAAA7oB,OAAeiO,EAAKrN,MAASqN,EAAKrN,KACpDunE,gBAAiBl6D,EAAKm6D,cAAgBn6D,EAAKm6D,aAAatkE,KAAI,SAAAq4B,GAAK,OAAAA,EAAFz5B,EAAW,IAC1EiuC,UAAW1iC,EAAKyiC,QAAUziC,EAAKyiC,OAAO5sC,KAAI,SAAAotC,GAAK,OAAAA,EAAFxuC,EAAW,IACxDouC,UAAW7iC,EAAK0sB,QAAU1sB,EAAK0sB,OAAO72B,KAAI,SAAAukE,GAAK,OAAAA,EAAF3lE,EAAW,MAP1C,IAWtB,EAEauuC,GAAgB,SAAHq3B,GACbA,EAATn3B,UACWm3B,EAAXl3B,YACSk3B,EAATj3B,UACOi3B,EAAPz/C,QACKy/C,EAALtiB,MACQsiB,EAARC,SACSD,EAATjwD,UACYiwD,EAAZE,aACMF,EAAN53B,OACS43B,EAAT33B,UACY23B,EAAZF,aACeE,EAAfH,gBACkBG,EAAlB9uB,mBACqB8uB,EAArBG,sBACMH,EAAN3tC,OACS2tC,EAATx3B,UACQw3B,EAARn6B,SACiB,OAAAjwC,YAAAoqE,EAAAnqE,GAAqB,ECvH7BuqE,GAAmBrtD,aAAGC,QAAAC,aAAA,8OAQ7B0sD,ICTOU,GAAyBttD,aAAGC,QAAAC,aAAA,kOCC5BqtD,GAAsBvtD,aAAGC,QAAAC,aAAA,sXAShC2sD,ICVOW,GAAsBxtD,aAAGC,QAAAC,aAAA,2NAQhC2sD,ICPOY,GAAgCztD,aAAGC,QAAAC,aAAA,+XAS1C2sD,ICVOa,GAAoB1tD,aAAGC,QAAAC,aAAA,iPAQ9B0sD,ICROe,GAAmB3tD,aAAGC,QAAAC,aAAA,+RAQ7B0sD,ICROgB,GAAmB5tD,aAAGC,QAAAC,aAAA,kPAQ7B0sD,IAGS,YAAC12B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQkxD,GAAkB,CAC3Cl7B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECvBYs3B,GAAmB7tD,aAAGC,QAAAC,aAAA,kPAQ7B0sD,IAGS,YAAC12B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQmxD,GAAkB,CAC3Cn7B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBYu3B,GAAoB9tD,aAAGC,QAAAC,aAAA,oPAQ9B0sD,IAGS,YAAC12B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQoxD,GAAmB,CAC5Cp7B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECvBY2tB,GAAYlkD,aAAGC,QAAAC,aAAA,gMCCf6tD,GAAqB/tD,aAAGC,QAAAC,aAAA,sPAQ/B0sD,ICROoB,GAAuBhuD,aAAGC,QAAAC,aAAA,0PAQjC0sD,ICGAviB,GAAY,CACd5vB,ObCW,SAACyb,GAEZ,IAAQtjC,EAASsjC,EAATtjC,KAEFxN,EAAQwwC,GAAchjC,GACtByiC,EAASN,GAA+BniC,EAAK0iC,WAC7Cy3B,EAAeh4B,GAA+BniC,EAAKk6D,iBACnD3uB,EAAqBnJ,GAA4BpiC,EAAKurC,mBAAqBvrC,EAAKurC,mBAAmB11C,KAAI,SAAA41C,GACzG,OAAAx5C,wBAAA,GACO0E,KAAK80C,EAAmB,OAAK,IAChC6I,OAAQpS,GAA0BuJ,EAAkB6I,SAE5D,SAAK/4C,GACCw8C,EAAQ/3C,EAAK+3C,MAAQ/3C,EAAK+3C,MAAMzhD,OAAOC,SAAWyJ,EAAK+3C,MACvD3tC,EAAYpK,EAAKoK,UAAYpK,EAAKoK,UAAU9T,OAAOC,SAAWyJ,EAAKoK,UACnEsiB,EAASyV,GAA+BniC,EAAK6iC,WAEnD,OAAOU,KAAcz5B,QAAQ2wD,GAAkB,CAC3CjoE,MAAKP,wBAAA,GACEO,GAAK,IACRiwC,SACA03B,eACA5uB,qBACAwM,QACA3tC,YACAsiB,aAEL9uB,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KAEZ,EalCG2d,WZFW,SAAChe,GACd,IAAQtjC,EAAqBsjC,EAArBtjC,KAAMwhD,EAAele,EAAfke,WAERhvD,EAAQwN,EAAKnK,KAAI,SAAA41B,GACrB,IAAMj5B,EAAQwwC,GAAcvX,GACtBgX,EAASN,GAA+B1W,EAAKiX,WAC7Cy3B,EAAeh4B,GAA+B1W,EAAKyuC,iBACnD3uB,EAAqBnJ,GAA4B3W,EAAK8f,mBAAqB9f,EAAK8f,mBAAmB11C,KAAI,SAAA41C,GAC3G,OAAAx5C,wBAAA,GACoB,aAAfuvD,EAA4B/V,EAAoB90C,KAAK80C,EAAmB,OAAK,IAChF6I,OAAQpS,GAA0BuJ,EAAkB6I,SAExD,SAAK/4C,GACCw8C,EAAQtsB,EAAKssB,MAAQtsB,EAAKssB,MAAMzhD,OAAOC,SAAWk1B,EAAKssB,MACvD3tC,EAAYqhB,EAAKrhB,UAAYqhB,EAAKrhB,UAAU9T,OAAOC,SAAWk1B,EAAKrhB,UACnEsiB,EAASyV,GAA+B1W,EAAKoX,WAEnD,OAAA5wC,wBAAA,GACKO,GAAK,IACRiwC,SACA03B,eACA5uB,qBACAwM,QACA3tC,YACAsiB,UAEJ,IAGA,OAAO6W,KACJz5B,QAAQ4wD,GAAwB,CAC/BloE,QACAgvD,eAED5jD,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACLzjC,KAAM,CAAEk/C,MAFY,OAARnf,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsByb,OAItC,IAAGxb,MAAMC,KACZ,EYrCGooB,QXAW,SAACzoB,GACZ,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,KAAcz5B,QAAQ6wD,GAAqB,CAC9CrkE,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EWfG4oB,QVHW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQ8wD,GAAqB,CAC9C78D,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,EUPG6oB,iBTAW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,KAAcz5B,QAAQ+wD,GAA+B,CACxDvkE,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,ESlBG8oB,ORLW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQgxD,GAAmB,CAC5Ch7B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EQLGiK,OPNW,SAACtK,GACZ,IAAQ7uC,EAA2B6uC,EAA3B7uC,GAAIuL,EAAuBsjC,EAAvBtjC,KAAMwI,EAAiB86B,EAAjB96B,aAEZhW,EAAQwwC,GAAchjC,GACtByiC,EAASF,GAA+BviC,EAAK0iC,UAAWl6B,EAAak6B,WACrEy3B,EAAe53B,GAA+BviC,EAAKk6D,gBAAiB1xD,EAAa0xD,iBACjF3uB,EPyCiC,WAAkC,IAAjCjoC,EAAOhI,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAIqU,EAAQrU,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAC3D+/D,EAAa/3D,EAAQzN,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,IACvC6mE,EAAc3rD,EAAS9Z,KAAI,SAAA+L,GAAK,OAAAA,EAAFnN,EAAW,IACzC8mE,EAAatlE,KAAMqN,EAAS,MAC5Bk4D,EAAcvlE,KAAM0Z,EAAU,MAC9BkY,EAASvkB,EAAQhN,QAAO,SAAA21B,GAAK,OAAa,MAAbA,EAAFx3B,EAAmB,IAC9Cm5C,EAAS6tB,KAAaJ,EAAYC,GAAa7/D,QAAO,SAACC,EAAKjH,GAAE,OAAK6L,KAAQi7D,EAAW9mE,GAAK+mE,EAAY/mE,IAAOiH,EAAG,GAAA3J,OAAA6J,aAAOF,GAAG,CAAE,CAAEokC,MAAO,CAAErrC,MAAMuL,KAAMu7D,EAAW9mE,KAAM,GAAE,IACvKgkE,EAAUj2B,KAAW84B,EAAaD,GAAYxlE,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAGrE,OAFwB8B,QAAQsxB,EAAO1uB,SAAW5C,QAAQq3C,EAAOz0C,SAAW5C,QAAQkiE,EAAQt/D,QAEjE,CACvB0uB,OAAQtxB,QAAQsxB,EAAO1uB,QAAU0uB,OAAStsB,EAC1CqyC,OAAQr3C,QAAQq3C,EAAOz0C,QAAUy0C,OAASryC,EAC1CmxD,OAAQn2D,QAAQkiE,EAAQt/D,QAAUs/D,OAAUl9D,QAC5CA,CACR,COxD+B85D,CAA4Br1D,EAAKurC,mBAAoB/iC,EAAa+iC,oBACvFwM,EAAQ/3C,EAAK+3C,MAAQ/3C,EAAK+3C,MAAMzhD,OAAOC,SAAWyJ,EAAK+3C,MACvD3tC,EAAYpK,EAAKoK,UAAYpK,EAAKoK,UAAU9T,OAAOC,SAAWyJ,EAAKoK,UACnEsiB,EAAS6V,GAA+BviC,EAAK6iC,UAAWr6B,EAAaq6B,WAE3E,OAAOU,KAAcz5B,QAAQixD,GAAkB,CAC3Cj7B,MAAO,CAAErrC,MACTjC,MAAKP,wBAAA,GACEO,GAAK,IACRiwC,SACA03B,eACA5uB,qBACAwM,QACA3tC,YACAsiB,aAEL9uB,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EOrBG+oB,OAAQC,GACRlL,WCvBW,SAACne,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNk4D,GAAe,CAAEl4D,MAAK,KAE5BmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EDUGmxD,UACAC,WEzBW,SAACxpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNo4D,GAAO,CAAEp4D,MAAK,KAEpBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EFYGqxD,WACAC,YG3BW,SAAC1pB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNs4D,GAAQ,CAAEt4D,MAAK,KAErBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EHcG+3D,QHdW,SAACnwB,GACd,IAAQ3wC,EAAS2wC,EAAT3wC,KAER,OAAO4wC,KAAcz5B,QAAQwnD,GAAW,CACtC3+D,SACCiL,MAAK,SAAAmiC,GAAa,IAADyD,EAGlB,MAAO,CACLxjC,KAHoB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBkwB,WAKhC,GACD,EGGGxzB,SFfW,SAACoD,GACZ,IAAQxD,EAAUwD,EAAVxD,MAER,OAAOyD,KAAcz5B,QAAQqxD,GAAoB,CAC7Cr7B,MAAO,CAAErrC,GAAIqrC,KACdliC,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EEKG2xB,WDhBW,SAAChyB,GACZ,IAAQxD,EAAUwD,EAAVxD,MAER,OAAOyD,KAAcz5B,QAAQsxD,GAAsB,CAC/Ct7B,MAAO,CAAErrC,GAAIqrC,KACdliC,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,GCQc8T,MIjCFikB,GAAyBtuD,aAAGC,QAAAC,aAAA,4MAe5BquD,GAA2BvuD,aAAG60B,QAAA30B,aAAA,8M,qDCiD9BswB,GAAmB,SAAA59B,GAC5B,OAAKA,EAEO/N,wBAAA,GACL+N,GAAI,IACPrN,KAAMqN,EAAK4a,QAAO,0CAAA7oB,OAAeiO,EAAKrN,MAASqN,EAAKrN,OAJtC,IAQtB,EAGaqwC,GAAgB,SAAHnzC,GACbA,EAATqzC,UACWrzC,EAAXszC,YACStzC,EAATuzC,UACOvzC,EAAP+qB,QACiB,OAAA3qB,YAAAJ,EAAAK,GAAqB,EC7E7B0rE,GAAgBxuD,aAAGC,QAAAC,aAAA,gOAQ1BouD,ICVOG,GAAsBzuD,aAAGC,QAAAC,aAAA,yNCGzBwuD,GAAmB1uD,aAAGC,QAAAC,aAAA,qWAS7BquD,ICVOI,GAAmB3uD,aAAGC,QAAAC,aAAA,gNAQ7BquD,ICPOK,GAA6B5uD,aAAGC,QAAAC,aAAA,8WASvCquD,ICVOM,GAAiB7uD,aAAGC,QAAAC,aAAA,mOAQ3BouD,ICPOQ,GAAgB9uD,aAAGC,QAAAC,aAAA,8QAQ1BouD,ICTOS,GAAgB/uD,aAAGC,QAAAC,aAAA,oOAQ1BouD,IAGS,YAACp4B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQqyD,GAAe,CACxCr8B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECvBYy4B,GAAgBhvD,aAAGC,QAAAC,aAAA,sOAQ1BouD,IAGS,YAACp4B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQsyD,GAAe,CACxCt8B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBY04B,GAAiBjvD,aAAGC,QAAAC,aAAA,wOAQ3BouD,IAGS,YAACp4B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQuyD,GAAgB,CACzCv8B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECZKiQ,GAAS,CACX/rB,OVCW,SAACyb,GACZ,IAAc9wC,EAAU8wC,EAAhBtjC,KAER,OAAOujC,KAAcz5B,QAAQ8xD,GAAe,CACxCppE,MAAKP,YAAA,GACE+wC,GAAcxwC,MAEtBoL,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EUbG2d,WTHW,SAAChe,GACd,IAAQtjC,EAAqBsjC,EAArBtjC,KAAMwhD,EAAele,EAAfke,WAERhvD,EAAQwN,EAAKnK,KAAI,SAAA41B,GAGrB,OAAAx5B,YAAA,GACK+wC,GAAcvX,GAErB,IAGA,OAAO8X,KACJz5B,QAAQ+xD,GAAqB,CAC5BrpE,QACAgvD,eAED5jD,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACLzjC,KAAM,CAAEk/C,MAFY,OAARnf,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsByb,OAItC,IAAGxb,MAAMC,KACZ,ESnBGooB,QRCW,SAACzoB,GACZ,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,KAAcz5B,QAAQgyD,GAAkB,CAC3CxlE,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EQhBG4oB,QPFW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQiyD,GAAkB,CAC3Ch+D,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,EORG6oB,iBNDW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,KAAcz5B,QAAQkyD,GAA4B,CACrD1lE,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EMjBG8oB,OLJW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQmyD,GAAgB,CACzCn8B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,KAFS49B,GAAyB,OAARmC,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,MAIxD,IAAGiY,MAAMC,KACZ,EKNGiK,OJJW,SAACtK,GACZ,IAAQ7uC,EAA2B6uC,EAA3B7uC,GAAIuL,EAAuBsjC,EAAvBtjC,KAENxN,GAF6B8wC,EAAjB96B,aAEJ7R,KAAKqJ,EAAM,CAAC,YAAa,YAAa,cAAe,YAAa,aAC1EyiC,EAASziC,EAAK0iC,UAAY1iC,EAAK0iC,UAAU7sC,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,SAAK8G,EAErE,OAAOgoC,KAAcz5B,QAAQoyD,GAAe,CACxCp8B,MAAO,CAAErrC,MACTjC,MAAKP,wBAAA,GACEO,GAAK,IACRiwC,aAEL7kC,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EIbG+oB,OAAQC,GACRlL,WCtBW,SAACne,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNk4D,GAAe,CAAEl4D,MAAK,KAE5BmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EDSGmxD,UACAC,WExBW,SAACxpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNo4D,GAAO,CAAEp4D,MAAK,KAEpBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EFWGqxD,WACAC,YG1BW,SAAC1pB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNs4D,GAAQ,CAAEt4D,MAAK,KAErBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,GHeck4C,MI9BF0oB,GAAoClvD,aAAGC,QAAAC,aAAA,qVAyBvCivD,GAAsCnvD,aAAG60B,QAAA30B,aAAA,sK,0ECHzCkvD,GAAoC,SAACl5D,GAC9C,OAAQA,EAAW,CAAEsU,QAAS,CAAEnjB,GAAW,OAAP6O,QAAO,IAAPA,OAAO,EAAPA,EAAS7O,UAAS8G,CAC1D,EAEakhE,GAAoC,SAACn5D,EAASqM,GAGvD,OAFkBrP,KAAQgD,EAASqM,IAEP,OAAPrM,QAAO,IAAPA,KAAS7O,GAAM,CAAEmjB,QAAS,CAAEnjB,GAAW,OAAP6O,QAAO,IAAPA,OAAO,EAAPA,EAAS7O,UAAqB8G,CACvF,EAkCaqiC,GAAmB,SAAA59B,GAC5B,OAAKA,GAAa,IAEtB,EAEagjC,GAAgB,SAAHnzC,GACbA,EAATqzC,UACWrzC,EAAXszC,YACStzC,EAATuzC,UACOvzC,EAAP+qB,QACS/qB,EAAT2mB,UACM3mB,EAANykD,OACiB,OAAArkD,YAAAJ,EAAAK,GAAqB,ECtE7BwsE,GAA2BtvD,aAAGC,QAAAC,aAAA,8QAQrCgvD,ICROK,GAA8BvvD,aAAGC,QAAAC,aAAA,8ZASxCivD,ICVOK,GAA8BxvD,aAAGC,QAAAC,aAAA,mPAQxCivD,ICPOM,GAAwCzvD,aAAGC,QAAAC,aAAA,uaASlDivD,ICVOO,GAA4B1vD,aAAGC,QAAAC,aAAA,iRAQtCgvD,ICPOS,GAA2B3vD,aAAGC,QAAAC,aAAA,uUAQrCgvD,ICTOU,GAA2B5vD,aAAGC,QAAAC,aAAA,kRAQrCgvD,ICNAW,GAAoB,CACtBp1C,OPSW,SAACyb,GACZ,IAAQtjC,EAASsjC,EAATtjC,KAEFxN,EAAQwwC,GAAchjC,GACtBwW,EAAYgmD,GAAkCx8D,EAAKwW,WACnD89B,EAASkoB,GAAkCx8D,EAAKs0C,QAEtD,OAAO/Q,KAAcz5B,QAAQ4yD,GAA0B,CACnDlqE,MAAKP,wBAAA,GACEO,GAAK,IACRgkB,YACA89B,aAEL12C,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EO3BGooB,QNSW,SAACzoB,GACZ,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,KAAcz5B,QAAQ6yD,GAA6B,CACtDrmE,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EMxBG4oB,QLMW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQ8yD,GAA6B,CACtD7+D,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,EKhBG6oB,iBJSW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAG/E,OAAO8uC,KAAcz5B,QAAQ+yD,GAAuC,CAChEvmE,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EI5BG8oB,OHIW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQgzD,GAA2B,CACpDh9B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EGdGiK,OFIW,SAACtK,GACZ,IAAQ7uC,EAA2B6uC,EAA3B7uC,GAAIuL,EAAuBsjC,EAAvBtjC,KAAMwI,EAAiB86B,EAAjB96B,aAEZhW,EAAQwwC,GAAchjC,GACtBwW,EAAYimD,GAAkCz8D,EAAKwW,UAAWhO,EAAagO,WAC3E89B,EAASmoB,GAAkCz8D,EAAKs0C,OAAQ9rC,EAAa8rC,QAG3E,OAAO/Q,KAAcz5B,QAAQizD,GAA0B,CACnDj9B,MAAO,CAAErrC,MACTjC,MAAKP,wBAAA,GACEO,GAAK,IACRgkB,YACA89B,aAEL12C,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EExBG+oB,ODEW,SAACppB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQkzD,GAA0B,CACnDl9B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,GCRcs5B,M,oBCdFC,GAAsB9vD,aAAGC,QAAAC,aAAA,0bAahC6vD,M,UCZOC,GAAgChwD,aAAGC,QAAAC,aAAA,mcAa1C6vD,MCdOE,GAAoBjwD,aAAGC,QAAAC,aAAA,oRAU9B6vD,MCXAG,GAAY,CACdvR,QHiBW,SAACzoB,GACZ,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,KAAcz5B,QAAQozD,GAAqB,CAC9C5mE,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,MAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EGhCG4oB,aACAC,iBFiBW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAG/E,OAAO8uC,KAAcz5B,QAAQszD,GAA+B,CACxD9mE,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,MAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EEpCG8oB,ODUW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQuzD,GAAmB,CAC5Cv9B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,aAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,GClBc25B,MCXFH,GAAqB/vD,aAAGC,QAAAC,aAAA,+FCgExBiwD,GAAoB,CAAE9oE,GAAI,iBAAkB9B,KAAM,sDAAe29D,YAAa,MAG9E1yB,GAAmB,SAAA59B,GAC5B,OAAKA,GAAa,IAEtB,ECjEak9D,GAAsB9vD,aAAGC,QAAAC,aAAA,0bAahC6vD,ICbOK,GAAsBpwD,aAAGC,QAAAC,aAAA,2WAUhC6vD,ICTOC,GAAgChwD,aAAGC,QAAAC,aAAA,mcAa1C6vD,IChBAM,GAAwB,CAC1B1R,QHkBW,SAACzoB,GACZ,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,KAAcz5B,QAAQozD,GAAqB,CAC9C5mE,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAuJ,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACVvjC,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,GAApBA,EAAsB/Q,MAAK,CAAI6qC,IAAiBxrE,OAAA6J,aAAa,OAARmkC,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,OAAN,EAARA,EAAgBnsD,KAAK0yB,QAAiB,OAARqN,QAAQ,IAARA,GAAc,QAAN21B,EAAR31B,EAAU//B,YAAI,IAAA01D,GAAM,QAANC,EAAdD,EAAgB11D,YAAI,IAAA21D,OAAZ,EAARA,EAAsBjjC,MACjH25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAAN61B,EAAR71B,EAAU//B,YAAI,IAAA41D,GAAM,QAANC,EAAdD,EAAgB51D,YAAI,IAAA61D,GAApBA,EAAsBxJ,SAAQp6D,wBAAA,GAAgB,OAAR8tC,QAAQ,IAARA,GAAc,QAAN+1B,EAAR/1B,EAAU//B,YAAI,IAAA81D,OAAN,EAARA,EAAgB91D,KAAKqsD,UAAQ,IAAEC,YAAoB,OAARvsB,QAAQ,IAARA,GAAc,QAANg2B,EAARh2B,EAAU//B,YAAI,IAAA+1D,OAAN,EAARA,EAAgB/1D,KAAKqsD,SAASC,YAAa,IAAc,OAARvsB,QAAQ,IAARA,GAAc,QAANi2B,EAARj2B,EAAU//B,YAAI,IAAAg2D,GAAM,QAANC,EAAdD,EAAgBh2D,YAAI,IAAAi2D,OAAZ,EAARA,EAAsB5J,SAEzK,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EGlCG4oB,QFaW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQ0zD,GAAqB,CAC9ClnE,OAAQ,CACJyH,OAEJsR,QAAStR,EAAI5E,SACdyE,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAuJ,EAAAC,EAGhB,MAAO,CACH31D,MAHkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,GAApBA,EAAsB/Q,MAAK,CAAI6qC,IAAiBxrE,OAAA6J,aAAa,OAARmkC,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,OAAN,EAARA,EAAgBnsD,KAAK0yB,QAAiB,OAARqN,QAAQ,IAARA,GAAc,QAAN21B,EAAR31B,EAAU//B,YAAI,IAAA01D,GAAM,QAANC,EAAdD,EAAgB11D,YAAI,IAAA21D,OAAZ,EAARA,EAAsBjjC,OAGvG78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,EE3BG6oB,iBDkBW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAG/E,OAAO8uC,KAAcz5B,QAAQszD,GAA+B,CACxD9mE,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAuJ,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACVvjC,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,GAApBA,EAAsB/Q,MAAK,CAAI6qC,IAAiBxrE,OAAA6J,aAAa,OAARmkC,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,OAAN,EAARA,EAAgBnsD,KAAK0yB,QAAiB,OAARqN,QAAQ,IAARA,GAAc,QAAN21B,EAAR31B,EAAU//B,YAAI,IAAA01D,GAAM,QAANC,EAAdD,EAAgB11D,YAAI,IAAA21D,OAAZ,EAARA,EAAsBjjC,MACjH25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAAN61B,EAAR71B,EAAU//B,YAAI,IAAA41D,GAAM,QAANC,EAAdD,EAAgB51D,YAAI,IAAA61D,GAApBA,EAAsBxJ,SAAQp6D,wBAAA,GAAgB,OAAR8tC,QAAQ,IAARA,GAAc,QAAN+1B,EAAR/1B,EAAU//B,YAAI,IAAA81D,OAAN,EAARA,EAAgB91D,KAAKqsD,UAAQ,IAAEC,YAAoB,OAARvsB,QAAQ,IAARA,GAAc,QAANg2B,EAARh2B,EAAU//B,YAAI,IAAA+1D,OAAN,EAARA,EAAgB/1D,KAAKqsD,SAASC,YAAa,IAAc,OAARvsB,QAAQ,IAARA,GAAc,QAANi2B,EAARj2B,EAAU//B,YAAI,IAAAg2D,GAAM,QAANC,EAAdD,EAAgBh2D,YAAI,IAAAi2D,OAAZ,EAARA,EAAsB5J,SAEzK,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,GCpCc85B,M,qBCQFC,IAjBuBtwD,aAAGC,QAAAC,aAAA,uOAiBXF,aAAG60B,QAAA30B,aAAA,qR,yBCVlBqwD,GAAgBvwD,aAAGC,QAAAC,aAAA,uSAS5BowD,IAGEE,GAAmB,SAAC/xC,GAAK,OAAMo9B,KAAa,OAALp9B,QAAK,IAALA,OAAK,EAALA,EAAOp3B,IAAO,CAAC,EAAI,CAAEo3B,MAAO,CAAEp3B,GAAIo3B,EAAMp3B,IAAM,EACrFopE,GAAoB,SAAChyC,GAAK,OAAMo9B,KAAa,OAALp9B,QAAK,IAALA,OAAK,EAALA,EAAO9tB,KAAQ,CAAC,EAAI,CAAE0kC,OAAQ5W,EAAM9tB,IAAIlI,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAAI,EACrGqpE,GAAuB,SAAClyC,GAAS,OAAMq9B,KAAiB,OAATr9B,QAAS,IAATA,OAAS,EAATA,EAAWn3B,IAAO,CAAC,EAAI,CAAEm3B,UAAW,CAAEn3B,GAAIm3B,EAAUn3B,IAAM,EACzGspE,GAAwB,SAACnyC,GAAS,OAAMq9B,KAAiB,OAATr9B,QAAS,IAATA,OAAS,EAATA,EAAW7tB,KAAQ,CAAC,EAAI,CAAEi7D,WAAYptC,EAAU7tB,IAAIlI,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAAI,ECjBlHupE,GAAgB5wD,aAAGC,QAAAC,aAAA,iMAQ1BowD,ICNAO,GAAM,CACRlS,QFiBW,SAACzoB,GACd,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MACtDua,EAAqCv1B,EAArCu1B,MAAOD,EAA8Bt1B,EAA9Bs1B,UAAckkC,EAAW7/D,YAAKqG,EAAMpG,IACnD,OAAOqzC,KAAcz5B,QAAQ6zD,GAAe,CAC1CrnE,OAAMrE,4DAAA,GACD69D,GACA8N,GAAiB/xC,IACjBgyC,GAAkBhyC,IAClBiyC,GAAqBlyC,IACrBmyC,GAAsBnyC,IAE3B/e,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACCzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EAGlB,MAAO,CACLpsD,KAHoB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAIlCtmB,OAHuB,OAAR2zB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,UAGrBC,WAEpB,IAAG5oB,MAAMC,KACV,EEtCG4oB,QDOW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQk0D,GAAe,CACxCjgE,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAGhB,MAAO,CACHzjC,KAHkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAKxC,IAAGgR,MAAMC,KACZ,GCbcs6B,MCfFC,GAAgC9wD,aAAGC,QAAAC,aAAA,iICHnC6wD,GAAe,SAAAn+D,GACxB,OAAKA,GAAa,IAGtB,ECGao+D,GAAuBhxD,aAAGC,QAAAC,aAAA,scAajC4wD,IAuBSnS,GAnBC,SAACzoB,GACb,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,KACFz5B,QAAQs0D,GAAsB,CAC3B9nE,SACAuW,KAAM,CAAA7H,YAAA,GAAI/K,EAAQqX,EAAM46C,gBACxB16C,OACAnC,YAEHzR,MAAK,SAAAmiC,GAGF,MAAO,CAAE//B,KAFInO,KAAIkuC,EAAU,CAAC,OAAQ,OAAQ,QAAS,IAAIlqC,IAAIsoE,IAE9C/xD,MADDva,KAAIkuC,EAAU,CAAC,OAAQ,OAAQ,WAAY,cAAe,GAE5E,IACC2D,MAAMC,KACf,EChCa06B,GAAwBjxD,aAAGC,QAAAC,aAAA,qQAUlC4wD,IAgBS3R,GAbC,SAACjpB,GACb,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KACFz5B,QAAQu0D,GAAuB,CAAEtgE,QACjCH,MAAK,SAAAmiC,GAEF,MAAO,CAAE//B,KADInO,KAAIkuC,EAAU,CAAC,OAAQ,OAAQ,QAAS,IAAIlqC,IAAIsoE,IAGjE,IACCz6B,MAAMC,KACf,ECvBa26B,GAAkClxD,aAAGC,QAAAC,aAAA,+cAa5C4wD,IAuBS1R,GAlBU,SAAClpB,GACtB,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,KACFz5B,QAAQw0D,GAAiC,CACtChoE,OAAMrE,wBAAA,GAAOqE,GAAWioC,KAAI,CAAC,EAAGzjC,EAAQrG,IACxCoY,KAAM,CAAA7H,YAAA,GAAI/K,EAAQqX,EAAM46C,gBACxB16C,OACAnC,YAEHzR,MAAK,SAAAmiC,GAGF,MAAO,CAAE//B,KAFInO,KAAIkuC,EAAU,CAAC,OAAQ,OAAQ,QAAS,IAAIlqC,IAAIsoE,IAE9C/xD,MADDva,KAAIkuC,EAAU,CAAC,OAAQ,OAAQ,WAAY,cAAe,GAE5E,IACC2D,MAAMC,KACf,ECtCM46B,GAAY,CACdxS,WACAQ,WACAC,qBAGW+R,MCRFC,GAAgBpxD,aAAGC,QAAAC,aAAA,iKCGnBmxD,GAAiBrxD,aAAGC,QAAAC,aAAA,0KAQ7BkxD,IAkBWnoC,GAfM,SAACiN,GACpB,IAAQhtC,EAAWgtC,EAAXhtC,OAER,OAAOitC,KACJz5B,QAAQ20D,GAAgB,CACvBnoE,WAEDsH,MAAK,SAACmiC,GAAc,IAADyD,EAElB,MAAO,CACLxjC,KAFoB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,KAIhC,GACJ,ECtBa0+D,GAAkBtxD,aAAGC,QAAAC,aAAA,yNAQ5BkxD,ICVAG,GAAO,CACTtoC,gBACA0jC,cDWW,SAACz2B,GACZ,IAAQ6L,EAAa7L,EAAb6L,SAER,OAAO5L,KAAcz5B,QAAQ40D,GAAiB,CAC1CnnE,OAAQ,CACJ9C,GAAI06C,KAETvxC,MAAK,SAAAmiC,GAAa,IAADyD,EAEhB,MAAO,CACHxjC,KAFiB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,KAIjC,IAAG0jC,MAAMC,KACZ,GCrBcg7B,MCPFC,GAAiBxxD,aAAGC,QAAAC,aAAA,gN,gFCyEpBswB,GAAmB,SAAA59B,GAC5B,OAAKA,EAEO/N,wBAAA,GACL+N,GAAI,IACPrN,KAAMqN,EAAK4a,QAAO,0CAAA7oB,OAAeiO,EAAKrN,MAASqN,EAAKrN,KACpDksD,aAAc7+C,EAAK8+C,WAAa9+C,EAAK8+C,UAAUjpD,KAAI,SAAA+L,GAAK,OAAAA,EAAFnN,EAAW,MALnD,IAStB,EAEauuC,GAAgB,SAAH/W,GACbA,EAATiX,UACWjX,EAAXkX,YACSlX,EAATmX,UACOnX,EAAPrR,QACSqR,EAAT6yB,UACY7yB,EAAZ4yB,aACiB,OAAA5uD,YAAAg8B,EAAA/7B,GAAqB,EClF7B2uE,GAAezxD,aAAGC,QAAAC,aAAA,yMAU3BsxD,ICfSE,GAAkB1xD,aAAGC,QAAAC,aAAA,yZAuB9BsxD,ICxBSG,GAAkB3xD,aAAGC,QAAAC,aAAA,uMAQ5BsxD,ICPOI,GAA4B5xD,aAAGC,QAAAC,aAAA,mWAStCsxD,ICVOK,GAAgB7xD,aAAGC,QAAAC,aAAA,2MAU5BsxD,ICLSM,GAAe9xD,aAAGC,QAAAC,aAAA,sQAa3BsxD,IClBSO,GAAe/xD,aAAGC,QAAAC,aAAA,4NAQzBsxD,IAGS,YAACt7B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQq1D,GAAc,CACvCr/B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECvBYy7B,GAAehyD,aAAGC,QAAAC,aAAA,4NAQzBsxD,IAGS,YAACt7B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQs1D,GAAc,CACvCt/B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBY07B,GAAgBjyD,aAAGC,QAAAC,aAAA,8NAQ1BsxD,IAGS,YAACt7B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQu1D,GAAe,CACxCv/B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECdK27B,GAAQ,CACVz3C,OTWW,SAACyb,GACd,IAAQtjC,EAASsjC,EAATtjC,KAEFxN,EAAQwwC,GAAchjC,GACtB8+C,EDGsC,WAA6B,IAAd78B,EAAQ3mB,UAAAnC,OAAA,EAAAmC,UAAA,QAAAC,EAC3Dqc,GAD4Ctc,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,IAC7BzF,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAIwtB,WAAU,IAGnD,OAFkB1rB,QAAQqhB,EAAQze,QAEb,CACjBye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,QAC7CA,CACR,CCVoB4mC,CAA+BniC,EAAK6+C,aAAc7+C,EAAKiiB,UAEzE,OAAOshB,KACJz5B,QAAQ+0D,GAAc,CACrBrsE,MAAKP,wBAAA,GACAO,GAAK,IACRssD,gBAGHlhD,KAAI,eAAA/N,EAAAka,aAAAC,eAAAC,MAAC,SAAAC,EAAO61B,GAAQ,IAAAyD,EAAAC,EAAAhY,EAAA,OAAAzhB,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACqB,OAAlCghB,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAAIlhB,EAAAM,OAAA,SAEhC,CACL7K,KAAM49B,GAAiBnS,KACxB,wBAAAlhB,EAAAO,OAAA,GAAAZ,EAAA,KACF,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EANI,IAMFooC,MAAMC,KACZ,ES9BGooB,QRkBW,SAACzoB,GACd,IACEhtC,EAGEgtC,EAHFhtC,OAAM01D,EAGJ1oB,EAFF9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAEzB3oB,EADFz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAGjB,OAAOiyB,KACJz5B,QAAQg1D,GAAiB,CACxBxoE,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YAEDzR,KAAI,eAAA/N,EAAAka,aAAAC,eAAAC,MAAC,SAAAC,EAAO61B,GAAQ,IAAAyD,EAAAC,EAAA0oB,EAAAC,EAAA15B,EAAA25B,EAAA,OAAAriD,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAE2B,OAD1CioB,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SAAQ9hD,EAAAM,OAAA,SAEtC,CACL7K,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,aACjB,wBAAA/hD,EAAAO,OAAA,GAAAZ,EAAA,KACF,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EARI,IAQFooC,MAAMC,KACZ,EQxCG4oB,QPCW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQi1D,GAAiB,CAC1ChhE,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,EOXG6oB,iBNGW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,KAAcz5B,QAAQk1D,GAA2B,CACpD1oE,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EMrBG8oB,OLCW,SAACnpB,GACd,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KACJz5B,QAAQm1D,GAAe,CACtBn/B,MAAO,CAAErrC,QAEVmJ,KAAI,eAAA/N,EAAAka,aAAAC,eAAAC,MAAC,SAAAC,EAAO61B,GAAQ,IAAAyD,EAAAC,EAAAhY,EAAA,OAAAzhB,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACoB,OAAjCghB,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAAIlhB,EAAAM,OAAA,SAEhC,CACL7K,KAAM49B,GAAiBnS,KACxB,wBAAAlhB,EAAAO,OAAA,GAAAZ,EAAA,KACF,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EANI,IAMFooC,MAAMC,KACZ,EKdGiK,OJUW,SAACtK,GACd,IAAQ7uC,EAA2B6uC,EAA3B7uC,GAAIuL,EAAuBsjC,EAAvBtjC,KAAMwI,EAAiB86B,EAAjB96B,aAEZhW,EAAQwwC,GAAchjC,GACtB8+C,ENQsC,WAA4C,IAA3Cx7C,EAAOhI,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAIqU,EAAQrU,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAI2mB,EAAQ3mB,UAAAnC,OAAA,EAAAmC,UAAA,QAAAC,EAC1Eqc,EAAU4qB,KAAWl/B,EAASqM,GAAU9Z,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAIwtB,WAAU,IACnEqgB,EAAaE,KAAW7yB,EAAUrM,GAASzN,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAIwtB,WAAU,IAG5E,OAF8B1rB,QAAQqhB,EAAQze,SAAW5C,QAAQ+rC,EAAWnpC,QAE3C,CAC7Bye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,EAC7C+mC,WAAY/rC,QAAQ+rC,EAAWnpC,QAAUmpC,OAAa/mC,QACtDA,CACR,CMjBoBgnC,CAA+BviC,EAAK6+C,aAAcr2C,EAAaq2C,aAAc7+C,EAAKiiB,UAEpG,OAAOshB,KACJz5B,QAAQo1D,GAAc,CACrBp/B,MAAO,CAAErrC,MACTjC,MAAKP,wBAAA,GACAO,GAAK,IACRssD,gBAGHlhD,KAAI,eAAA/N,EAAAka,aAAAC,eAAAC,MAAC,SAAAC,EAAO61B,GAAQ,IAAAyD,EAAAC,EAAAhY,EAAA,OAAAzhB,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACqB,OAAlCghB,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAAIlhB,EAAAM,OAAA,SAChC,CACL7K,KAAM49B,GAAiBnS,KACxB,wBAAAlhB,EAAAO,OAAA,GAAAZ,EAAA,KACF,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EALI,IAKFooC,MAAMC,KACZ,EI7BG+oB,OAAQC,GACRlL,WCnBW,SAACne,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNk4D,GAAe,CAAEl4D,MAAK,KAE5BmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EDMGmxD,UACAC,WErBW,SAACxpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNo4D,GAAO,CAAEp4D,MAAK,KAEpBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EFQGqxD,WACAC,YGvBW,SAAC1pB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNs4D,GAAQ,CAAEt4D,MAAK,KAErBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,GHYc4jE,MI3BF7F,GAAgCrsD,aAAGC,QAAAC,aAAA,6QCGnCqsD,GAAmBvsD,aAAGC,QAAAC,aAAA,qNAM7BmsD,ICNOG,GAAqBxsD,aAAGC,QAAAC,aAAA,mOAM/BmsD,ICTAK,GAAU,CACZzjC,aFWW,SAACiN,GAEZ,IAAQhtC,EAAWgtC,EAAXhtC,OAER,OAAOitC,KAAcz5B,QAAQ6vD,GAAkB,CAC3CrjE,WACDsH,MAAK,SAAAmiC,GAAa,IAADyD,EAIhB,MAAO,CACHxjC,KAHSquB,oBAAgB,OAAR0R,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,OAAQ,GAAI,CAAC,OAAQ,QAAS,CAAC,OAAQ,QACtDnK,KAAI,SAAAqgC,GAAI,OAAAjkC,wBAAA,GAAUikC,GAAI,IAAEpmC,SAAWu+B,mBAAQ6H,EAAKpmC,UAAY,GAAI,CAAC,OAAQ,QAAS,CAAC,OAAQ,SAAO,IAI5H,IAAG4zC,MAAMC,KACZ,EExBGo2B,cDUW,SAACz2B,GAEZ,IAAQ6L,EAAa7L,EAAb6L,SAER,OAAO5L,KAAcz5B,QAAQ8vD,GAAoB,CAC7CriE,OAAQ,CAAE9C,GAAI06C,KACfvxC,MAAK,SAAAmiC,GAAa,IAADyD,EAGhB,MAAO,CACHxjC,KAHSquB,oBAAqB,QAAbmV,EAAAzD,EAAS//B,YAAI,IAAAwjC,OAAA,EAAbA,EAAexjC,OAAQ,GAAI,CAAC,OAAQ,QAAS,CAAC,OAAQ,QAC1EnK,KAAI,SAAAqgC,GAAI,OAAAjkC,wBAAA,GAAUikC,GAAI,IAAEpmC,SAAWu+B,mBAAQ6H,EAAKpmC,UAAY,GAAI,CAAC,OAAQ,QAAS,CAAC,OAAQ,SAAO,IAIvG,IAAG4zC,MAAMC,KACZ,GCpBcm2B,MCLFyF,GAAgBnyD,aAAGC,QAAAC,aAAA,qQCGnBkyD,GAAcpyD,aAAGC,QAAAC,aAAA,qMAU1BiyD,I,uBCNSE,GAAiBryD,aAAGC,QAAAC,aAAA,qVAS3BiyD,ICXOG,GAAiBtyD,aAAGC,QAAAC,aAAA,oMAQ3BiyD,ICPOI,GAA2BvyD,aAAGC,QAAAC,aAAA,sWASrCiyD,ICVOpiB,GAAe/vC,aAAGC,QAAAC,aAAA,uNAQzBiyD,ICVOK,GAAmBxyD,aAAGC,QAAAC,aAAA,iICGtBuyD,GAAczyD,aAAGC,QAAAC,aAAA,wNAQxBiyD,ICXOO,GAAoB1yD,aAAGC,QAAAC,aAAA,iLCAvByyD,GAAc3yD,aAAGC,QAAAC,aAAA,iPAU1BiyD,ICTSS,GAAc5yD,aAAGC,QAAAC,aAAA,wNAQxBiyD,ICTOU,GAAoB7yD,aAAGC,QAAAC,aAAA,iLCCvB4yD,GAAe9yD,aAAGC,QAAAC,aAAA,0NAQzBiyD,ICTOY,GAAqB/yD,aAAGC,QAAAC,aAAA,mLCU/Bw0C,GAAO,CACTj6B,ObEW,SAACyb,GACd,IAAQtjC,EAASsjC,EAATtjC,KAEFxN,EAAQwwC,GAAchjC,GACtB0sB,ElSUsC,WAAmB,IACvD9U,GAD4Ctc,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,IAC7BzF,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAGzC,OAFkB8B,QAAQqhB,EAAQze,QAEb,CACjBye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,QAC7CA,CACR,CkSjBiB4mC,CAA+BniC,EAAK6iC,WAEnD,OAAOU,KAAcz5B,QAAQ01D,GAAa,CACxChtE,MAAKP,wBAAA,GACAO,GAAK,IACRk6B,aAGD9uB,KAAI,eAAA/N,EAAAka,aAAAC,eAAAC,MAAC,SAAAC,EAAO61B,GAAQ,IAAAyD,EAAAC,EAAAhY,EAAA,OAAAzhB,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACqB,OAAlCghB,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAAIlhB,EAAAM,OAAA,SAEhC,CACL7K,KAAM49B,GAAiBnS,KACxB,wBAAAlhB,EAAAO,OAAA,GAAAZ,EAAA,KACF,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EANI,IAMFooC,MAAMC,KACZ,EapBG2d,cACAyK,QZGW,SAACzoB,GACZ,IAAA+rB,EAA+E/rB,EAAvEhtC,cAAM,IAAA+4D,EAAG,CAAC,EAACA,EAAArD,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE3Dg5C,EAAwCh0D,EAAxCg0D,gBAAoB8V,EAAenwE,YAAKqG,EAAMpG,IAChDmwE,EAAYpuE,wBAAA,GACXmuE,GAAe,IAClBthB,UAAWwL,EAAkB,CAAEv4C,KAAM,CAAEhU,IAAK,CAACusD,UAAuB/uD,IAGxE,OAAOgoC,KAAcz5B,QAAQ21D,GAAgB,CACzCnpE,OAAQ+pE,EACRxzD,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EYxBG4oB,QXDW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQ41D,GAAgB,CACzC3hE,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,EWTG6oB,iBVAW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,KAAcz5B,QAAQ61D,GAA0B,CACnDrpE,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EUlBG8oB,OTHW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQqzC,GAAc,CACvCrd,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,KAFS49B,GAAyB,OAARmC,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,MAIxD,IAAGiY,MAAMC,KACZ,ESPGiK,OLJW,SAACtK,GACd,IAAQ7uC,EAA2B6uC,EAA3B7uC,GAAIuL,EAAuBsjC,EAAvBtjC,KAAMwI,EAAiB86B,EAAjB96B,aAEZhW,EAAQwwC,GAAchjC,GACtB8+C,E1SD8C,WAA4C,IAA3Cx7C,EAAOhI,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAIqU,EAAQrU,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAI2mB,EAAQ3mB,UAAAnC,OAAA,EAAAmC,UAAA,QAAAC,EAClFqc,EAAU4qB,KAAWl/B,EAASqM,GAAU9Z,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAIwtB,WAAU,IACnEqgB,EAAaE,KAAW7yB,EAAUrM,GAASzN,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAIwtB,WAAU,IAG5E,OAF8B1rB,QAAQqhB,EAAQze,SAAW5C,QAAQ+rC,EAAWnpC,QAE3C,CAC7Bye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,EAC7C+mC,WAAY/rC,QAAQ+rC,EAAWnpC,QAAUmpC,OAAa/mC,QACtDA,CACR,C0SRoB+kE,CAAuCtgE,EAAK6+C,aAAcr2C,EAAaq2C,aAAc7+C,EAAK++C,uBACtGryB,E1SkBsC,WAAkC,IAAjCppB,EAAOhI,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAIqU,EAAQrU,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAC9Dsc,EAAU4qB,KAAWl/B,EAASqM,GAAU9Z,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IACzD6tC,EAAaE,KAAW7yB,EAAUrM,GAASzN,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAGlE,OAF8B8B,QAAQqhB,EAAQze,SAAW5C,QAAQ+rC,EAAWnpC,QAE3C,CAC7Bye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,EAC7C+mC,WAAY/rC,QAAQ+rC,EAAWnpC,QAAUmpC,OAAa/mC,QACtDA,CACR,C0S3BiBgnC,CAA+BviC,EAAK6iC,UAAWr6B,EAAaq6B,WAE3E,OAAOU,KAAcz5B,QAAQi2D,GAAa,CACxCjgC,MAAO,CAAErrC,MACTjC,MAAKP,wBAAA,GACAO,GAAK,IACRssD,YACApyB,aAED9uB,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACZhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACLzrB,KAAM49B,GAAiBnS,GAE3B,IAAGiY,MAAMC,KACV,EKfG+oB,OPJW,SAACppB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQ+1D,GAAa,CACtC//B,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,ODbO,SAAC6X,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQ81D,GAAkB,CAC3C7hE,IAAK,CAACtJ,KACPmJ,MAAK,SAAAmiC,GAEJ,MAAO,CACH//B,KAFiB,OAAR+/B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAI3B,IAAG0jC,MAAMC,KACZ,CCEcgpB,CAAe,CAAEl4D,GAAIg3B,EAAKh3B,KAAMmJ,MAAK,WACxC,MAAO,CACHoC,KAAM49B,GAAiBnS,GAE/B,GACJ,IAAGiY,MAAMC,KACZ,EORG8d,WNTW,SAACne,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQg2D,GAAmB,CAC5C/hE,QACDH,MAAK,SAAAmiC,GACJ,OAAO0hB,GAAW,CAAE1jD,QAAOH,MAAK,WAC5B,MAAO,CACHoC,KAAMjC,EAEd,GACJ,IAAG2lC,MAAMC,KACZ,EMFGkpB,OJRW,SAACvpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQk2D,GAAa,CACtClgC,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EIFGmpB,WHXW,SAACxpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQm2D,GAAmB,CAC5CliE,QACDH,MAAK,SAAAmiC,GACJ,MAAO,CACH//B,KAAMjC,EAEd,IAAG2lC,MAAMC,KACZ,EGEGopB,QFVW,SAACzpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,KAAcz5B,QAAQo2D,GAAc,CACvCpgC,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EEAGqpB,YDbW,SAAC1pB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,KAAcz5B,QAAQq2D,GAAoB,CAC7CpiE,QACDH,MAAK,SAAAmiC,GACJ,MAAO,CACH//B,KAAMjC,EAEd,IAAG2lC,MAAMC,KACZ,GCMcme,MCbT2I,GAAa,CACf2K,SACAK,qBACA8K,aACAzJ,cACAoC,iBACAK,YACAiH,aACA/oB,aACA7D,UACAqpB,qBACAK,aACAG,yBACAQ,OACAM,aACAI,QACAW,SACAxF,WACAhY,SAKW2I,MCrCTgW,GAAc,CAChBpS,eAAgB,SAAC1D,GACb,IAAQ50D,EAAQ40D,EAAR50D,IAER,OAAOs4D,GAAe,CAAEt4D,QAAO6H,MAAK,SAAAmiC,GAAa,IAADyD,EAE5C,OADwB,OAARzD,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBj7B,OAEpC,GACJ,EACAm4D,cAAe,SAAC/V,GAEZ,IAAQ50D,EAAiB40D,EAAjB50D,IAAKwS,EAAYoiD,EAAZpiD,QAEb,OAAOm4D,GAAc,CAAE3qE,MAAKwS,YAAW3K,MAAK,SAAAmiC,GAAa,IAADosB,EAEpD,OADwB,OAARpsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,OAAN,EAARA,EAAgB5jD,OAEpC,GACJ,GAGWk4D,MCtBThW,GAAa,CACfgW,gBAKWhW,MCJTlhD,GAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,iBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,aAAAC,eAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,eAAa,KAAD,EACkC,OAD5DL,EAAKE,EAAAI,KACXhB,EAAOiB,UAAU,gBAAiBP,EAAK,UAAAtY,OAAasY,GAAU,IAAIE,EAAAM,OAAA,SAE3DlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EALW,EAMd,IAGIqO,GAAS,IAAIJ,GAAyBo3D,KAE7Bh3D,MClBFi3D,GAAuBxzD,aAAGC,QAAAC,aAAA,wQAsB1BuzD,GAAyBzzD,aAAG60B,QAAA30B,aAAA,oOCpB5BwzD,GAAc1zD,aAAGC,QAAAC,aAAA,0NAQxBszD,ICROG,GAAiB3zD,aAAGC,QAAAC,aAAA,6VAS3BuzD,ICTOG,GAAiB5zD,aAAGC,QAAAC,aAAA,4MAQ3BuzD,ICNOI,GAA2B7zD,aAAGC,QAAAC,aAAA,sWASrCuzD,ICVOK,GAAe9zD,aAAGC,QAAAC,aAAA,6NAQzBszD,ICTOO,GAAc/zD,aAAGC,QAAAC,aAAA,sQAQxBszD,ICROQ,GAAch0D,aAAGC,QAAAC,aAAA,8NAQxBszD,ICRAr3D,GAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,iBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,aAAAC,eAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,eAAa,KAAD,EACkC,OAD5DL,EAAKE,EAAAI,KACXhB,EAAOiB,UAAU,gBAAiBP,EAAK,UAAAtY,OAAasY,GAAU,IAAIE,EAAAM,OAAA,SAE3DlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EALW,EAMd,IAKaqO,GAFA,IAAIJ,GAAyB83D,KCf/BC,GAAgBl0D,aAAGC,QAAAC,aAAA,iR,qFC0EnBswB,GAAmB,SAAnBA,EAAmB59B,GAC5B,OAAKA,EAEU7B,OAAOD,KAAK8B,GAAMvE,QAAO,SAACC,EAAK3F,GAC1C,GAAIA,EAAI+nC,WAAW,KACf,OAAOpiC,EAGX,IAO+DmiC,EAPzDmtB,EAAUhrD,EAAKjK,GAErB,OAAgB,OAAZi1D,QAAgCzvD,IAAZyvD,EACbtvD,EAGPs9B,MAAMC,QAAQ+xB,GACY,kBAAfA,EAAQ,IAAkC,OAAfA,EAAQ,GAC1C/4D,wBAAA,GACOyJ,GAAG,IAAAmiC,EAAA,GAAA74B,YAAA64B,EACL9nC,EAAMi1D,EAAQn1D,IAAI+nC,IAAiB54B,YAAA64B,EAAC,GAAD9rC,OAChCgE,EAAG,OAAQi1D,EAAQn1D,KAAI,SAAAiY,GAAC,OAAIA,EAAErZ,EAAE,KAACopC,IAGzC5rC,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,IAIT,kBAAZA,GAAoC,OAAZA,EAC/B/4D,wBAAA,GACOyJ,GAAG,GAAAsJ,YAAA,GAKLjP,EAAM6nC,EAAiBotB,KAIhC/4D,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,GAC5B,GAAG,CAAC,GArCc,IAwCtB,EAEahoB,GAAgB,SAAHphC,GACpBA,EAAFnN,GACSmN,EAATshC,UACWthC,EAAXuhC,YACSvhC,EAATwhC,UACOxhC,EAAPgZ,QACMhZ,EAANqpD,OACerpD,EAAfspD,gBACiB,OAAAj7D,YAAA2R,EAAA1R,GAAqB,ECzH7BqxE,GAAcn0D,aAAGC,QAAAC,aAAA,oNAQxBg0D,ICPOE,GAAiBp0D,aAAGC,QAAAC,aAAA,qVAS3Bg0D,ICVOG,GAAiBr0D,aAAGC,QAAAC,aAAA,oMAQ3Bg0D,ICPOI,GAA2Bt0D,aAAGC,QAAAC,aAAA,8VASrCg0D,ICVOK,GAAev0D,aAAGC,QAAAC,aAAA,uNAQzBg0D,ICPOM,GAAcx0D,aAAGC,QAAAC,aAAA,gQAQxBg0D,ICTOO,GAAcz0D,aAAGC,QAAAC,aAAA,wNAQxBg0D,IAGS,YAACh+B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQ+3D,GAAa,CACtC/hC,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECvBYm+B,GAAc10D,aAAGC,QAAAC,aAAA,wNAQxBg0D,IAGS,YAACh+B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQg4D,GAAa,CACtChiC,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECtBYo+B,GAAe30D,aAAGC,QAAAC,aAAA,0NAQzBg0D,IAGS,YAACh+B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQi4D,GAAc,CACvCjiC,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,ECEcq+B,GAhBF,CACTn6C,OTGW,SAACyb,GAEZ,IAAQtjC,EAASsjC,EAATtjC,KAEFxN,EAAQwwC,GAAchjC,GAE5B,OAAOujC,GAAcz5B,QAAQy3D,GAAa,CACtC/uE,MAAKP,YAAA,GACEO,KAERoL,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,KAFiB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAIvC,IAAGiY,MAAMC,KAEZ,ESnBGooB,QRIW,SAACzoB,GACZ,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,GAAcz5B,QAAQ03D,GAAgB,CACzClrE,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,OAAM,SAAA7uC,GAEL,MADA+nD,QAAQ/nD,MAAMA,GACR,IAAIgJ,MAAM,sCACpB,IAAG6lC,MAAMC,KACZ,EQtBG4oB,QPCW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,GAAcz5B,QAAQ23D,GAAgB,CACzC1jE,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,EOXG6oB,iBNIW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,GAAcz5B,QAAQ43D,GAA0B,CACnDprE,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAAA0oB,EAAAC,EACV15B,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsBC,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EMtBG8oB,OLDW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQ63D,GAAc,CACvC7hC,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,IAAGiY,MAAMC,KACZ,EKTGiK,OJDW,SAACtK,GACZ,IAAQ7uC,EAA2B6uC,EAA3B7uC,GAAIuL,EAAuBsjC,EAAvBtjC,KAENxN,GAF6B8wC,EAAjB96B,aAEJw6B,GAAchjC,IAE5B,OAAOujC,GAAcz5B,QAAQ83D,GAAa,CACtC9hC,MAAO,CAAErrC,MACTjC,MAAKP,YAAA,GACEO,KAERoL,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,KAFiB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KAIvC,IAAGiY,MAAMC,KACZ,EIdG+oB,OAAQC,GACRlL,WCnBW,SAACne,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNk4D,GAAe,CAAEl4D,MAAK,KAE5BmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EDMGmxD,UACAC,WErBW,SAACxpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNo4D,GAAO,CAAEp4D,MAAK,KAEpBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,EFQGqxD,WACAC,YGvBW,SAAC1pB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNs4D,GAAQ,CAAEt4D,MAAK,KAErBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACH,GC0DYkiC,GAAmB,SAAnBA,EAAmB59B,GAC5B,OAAKA,EACU7B,OAAOD,KAAK8B,GAAMvE,QAAO,SAACC,EAAK3F,GAC1C,GAAIA,EAAI+nC,WAAW,KACf,OAAOpiC,EAGX,IAO+DmiC,EAPzDmtB,EAAUhrD,EAAKjK,GAErB,OAAgB,OAAZi1D,QAAgCzvD,IAAZyvD,EACbtvD,EAGPs9B,MAAMC,QAAQ+xB,GACY,kBAAfA,EAAQ,IAAkC,OAAfA,EAAQ,GAC1C/4D,wBAAA,GACOyJ,GAAG,IAAAmiC,EAAA,GAAA74B,YAAA64B,EACL9nC,EAAMi1D,EAAQn1D,IAAI+nC,IAAiB54B,YAAA64B,EAAC,GAAD9rC,OAChCgE,EAAG,OAAQi1D,EAAQn1D,KAAI,SAAAiY,GAAC,OAAIA,EAAErZ,EAAE,KAACopC,IAGzC5rC,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,IAIT,kBAAZA,GAAoC,OAAZA,EAC/B/4D,wBAAA,GACOyJ,GAAG,GAAAsJ,YAAA,GAKLjP,EAAM6nC,EAAiBotB,KAIhC/4D,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,GAC5B,GAAG,CAAC,GApCc,IAuCtB,EAEaiX,GAAyB,SAAzBA,EAA0BzvE,GAEnC,QAAc+I,IAAV/I,EACJ,MAAqB,kBAAVA,EACHA,aAAiB8nC,KACV9nC,EAEPwmC,MAAMC,QAAQzmC,GACPA,EAAMiJ,QAAO,SAACC,EAAK+vB,GACtB,IAAMy2C,EAAiBD,EAAuBx2C,GAC9C,OAAOy2C,EAAc,GAAAnwE,OAAA6J,aAAOF,GAAG,CAAEwmE,IAAkBxmE,CACvD,GAAG,IAEAyC,OAAOD,KAAK1L,GAAOiJ,QAAO,SAACC,EAAK3F,GACnC,IAAMjE,EAAQU,EAAMuD,GACdmsE,EAAiBD,EAAuBnwE,GAC9C,OAAOowE,EAAcjwE,wBAAA,GAAQyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMmsE,IAAmBxmE,CAEhE,GAAG,CAAC,GAIDlJ,CACX,ECpIei4D,GANI,CACf0X,KCeS,CACTt6C,OAAQ,SAAC8iC,GAEL,IFdkCrnD,EvBQ1BggC,EyBMAtjC,EAAS2qD,EAAT3qD,KAEFxN,EAAQmE,KAAKqJ,EAAM,CAAC,UAAW,UAAW,kBAK1CoiE,GFrB4B9+D,EEqBctD,EAAKoiE,eFpBtC,CAAExqD,QAAStU,QAAY/H,EEwBtC,OzBjBQ+nC,EyBiBM,CACV9wC,MAAKP,wBAAA,GACEO,GAAK,IACR66D,QATQ,CAAEz1C,QAAS,CAAEnjB,GAAI,oBAUzB4tE,QATQ,CAAEzqD,QAAS,CAAEnjB,GAAI,sBAUzB2tE,mBzBpBL7+B,GAAcz5B,QAAQg3D,GAAax9B,IyBsBnC1lC,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,GACJ,EACAsgC,QAAS,SAACpB,GACN,IxB/BQrnB,EwB+BAhtC,EAAkEq0D,EAAlEr0D,OAAM6iE,EAA4DxO,EAA1DnkC,WAAchV,EAAI2nD,EAAJ3nD,KAAMnC,EAAO8pD,EAAP9pD,QAAO+pD,EAA+BzO,EAA3B99C,KAAQ5S,EAAKm/D,EAALn/D,MAAOqX,EAAK8nD,EAAL9nD,MAE9D,OxBjCQgyB,EwBiCO,CACXhtC,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,WxBpCDk0B,GAAcz5B,QAAQi3D,GAAgBz9B,IwBqCtC1lC,MAAK,SAAAmiC,GAAa,IAADosB,EAAAC,EAAAsJ,EAAAC,EACVjjC,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,GAAM,QAANC,EAAdD,EAAgBnsD,YAAI,IAAAosD,OAAZ,EAARA,EAAsB15B,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAAN21B,EAAR31B,EAAU//B,YAAI,IAAA01D,GAAM,QAANC,EAAdD,EAAgB11D,YAAI,IAAA21D,OAAZ,EAARA,EAAsBtJ,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,GACJ,EACAC,QAAS,SAAC5B,GACN,IvBjDQrnB,EuBiDAvlC,EAAQ4sD,EAAR5sD,IAER,OvBnDQulC,EuBmDO,CACXvlC,OvBnDDwlC,GAAcz5B,QAAQk3D,GAAgB19B,IuBoDtC1lC,MAAK,SAAAmiC,GAAa,IAAD61B,EAAAC,EAEhB,MAAO,CACH71D,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAAN61B,EAAR71B,EAAU//B,YAAI,IAAA41D,GAAM,QAANC,EAAdD,EAAgB51D,YAAI,IAAA61D,OAAZ,EAARA,EAAsBnjC,OAEpB78B,IAAI+nC,IAExB,GACJ,EACA4uB,iBAAkB,SAAC7B,GACf,ItBxDQrnB,EsBwDAhtC,EAA8Eq0D,EAA9Er0D,OAAMgsE,EAAwE3X,EAAtEnkC,WAAchV,EAAI8wD,EAAJ9wD,KAAMnC,EAAOizD,EAAPjzD,QAAOkzD,EAA2C5X,EAAvC99C,KAAQ5S,EAAKsoE,EAALtoE,MAAOqX,EAAKixD,EAALjxD,MAASxW,EAAe6vD,EAAf7vD,OAAQrG,EAAOk2D,EAAPl2D,GAG/E,OtB3DQ6uC,EsB2DgB,CACpBhtC,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,WtBjEDk0B,GAAcz5B,QAAQm3D,GAA0B39B,IsBkEhD1lC,MAAK,SAAAmiC,GAAa,IAAD+1B,EAAA0M,EAAAzM,EAAA0M,EACV/vC,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAAN+1B,EAAR/1B,EAAU//B,YAAI,IAAA81D,GAAM,QAAN0M,EAAd1M,EAAgB91D,YAAI,IAAAwiE,OAAZ,EAARA,EAAsB9vC,MAC9B25B,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANg2B,EAARh2B,EAAU//B,YAAI,IAAA+1D,GAAM,QAAN0M,EAAd1M,EAAgB/1D,YAAI,IAAAyiE,OAAZ,EAARA,EAAsBpW,SACvC,MAAO,CACHrsD,KAAM0yB,EAAM78B,IAAI+nC,IAChBxxB,MAAOigD,EAASC,WAExB,GACJ,EACAG,OAAQ,SAAC9B,GACL,IrBjFQrnB,EqBiFA7uC,EAAOk2D,EAAPl2D,GAER,OrBnFQ6uC,EqBmFM,CACVxD,MAAO,CAAErrC,OrBnFV8uC,GAAcz5B,QAAQo3D,GAAc59B,IqBoFpC1lC,MAAK,SAAAmiC,GAAa,IAADi2B,EAAAC,EACVxqC,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANi2B,EAARj2B,EAAU//B,YAAI,IAAAg2D,GAAM,QAANC,EAAdD,EAAgBh2D,YAAI,IAAAi2D,OAAZ,EAARA,EAAsBxqC,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,GACJ,EACAmiB,OAAQ,SAAC+c,GAEL,IpB/FQrnB,EoB+FA7uC,EAA2Bk2D,EAA3Bl2D,GAAIuL,EAAuB2qD,EAAvB3qD,KAAMwI,EAAiBmiD,EAAjBniD,aAEZk6D,EAAYj0B,KAAKzuC,EAAM,CAAC,KAAM,OAAQ,cAAe,QAAS,kBAC9DoiE,EFrG2B,SAAC9+D,EAASqM,GAE/C,IADcrP,KAAQgD,EAASqM,GAE/B,OAAuB,OAAR,OAAPrM,QAAO,IAAPA,OAAO,EAAPA,EAAS7O,IACM,OAAR,OAARkb,QAAQ,IAARA,OAAQ,EAARA,EAAUlb,SACP8G,EACA,CAAE+mC,YAAY,GAClB,CAAE1qB,QAAS,CAAEnjB,GAAI6O,EAAQ7O,IACnC,CE6F8B4tC,CAA0BriC,EAAKoiE,cAAe55D,EAAa45D,eAYjF,OAVIpiE,EAAK2iE,MAELjlE,QAAQM,IACJG,OAAOD,KAAK8B,EAAK2iE,MAAM9sE,KAAI,SAAApB,GACvB,IAAMkuE,EAAOV,GAAuBjiE,EAAK2iE,KAAKluE,IAC9C,OAAOutE,GAAKp0B,OAAO,CAAEn5C,KAAIuL,KAAM2iE,GACnC,MpB1GAr/B,EoB8GM,CACVxD,MAAO,CAAErrC,MACTjC,MAAKP,wBAAA,GACEywE,GAAS,IACZN,mBpBjHL7+B,GAAcz5B,QAAQq3D,GAAa79B,IoBmHnC1lC,MAAK,SAAAmiC,GAAa,IAAD6iC,EAAAC,EACVp3C,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAAN6iC,EAAR7iC,EAAU//B,YAAI,IAAA4iE,GAAM,QAANC,EAAdD,EAAgB5iE,YAAI,IAAA6iE,OAAZ,EAARA,EAAsBp3C,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,GACJ,EACAihC,OAAQ,SAAC/B,GACL,InB5HQrnB,EmB4HA7uC,EAAOk2D,EAAPl2D,GAER,OnB9HQ6uC,EmB8Hc,CAClBxD,MAAO,CAAErrC,OnB9HV8uC,GAAcz5B,QAAQs3D,GAAa99B,ImB+HnC1lC,MAAK,SAAAmiC,GAAa,IAAD+iC,EAAAC,EACVt3C,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAAN+iC,EAAR/iC,EAAU//B,YAAI,IAAA8iE,GAAM,QAANC,EAAdD,EAAgB9iE,YAAI,IAAA+iE,OAAZ,EAARA,EAAsBt3C,KACnC,MAAO,CACHzrB,KAAM49B,GAAiBnS,GAE/B,GACJ,IClJSu3C,GAAoB51D,aAAGC,QAAAC,aAAA,mICwEvBswB,GAAmB,SAAnBA,EAAmB59B,GAC5B,OAAKA,EAEU7B,OAAOD,KAAK8B,GAAMvE,QAAO,SAACC,EAAK3F,GAC1C,GAAIA,EAAI+nC,WAAW,KACf,OAAOpiC,EAGX,IAO+DmiC,EAPzDmtB,EAAUhrD,EAAKjK,GAErB,OAAgB,OAAZi1D,QAAgCzvD,IAAZyvD,EACbtvD,EAGPs9B,MAAMC,QAAQ+xB,GACY,kBAAfA,EAAQ,IAAkC,OAAfA,EAAQ,GAC1C/4D,wBAAA,GACOyJ,GAAG,IAAAmiC,EAAA,GAAA74B,YAAA64B,EACL9nC,EAAMi1D,EAAQn1D,IAAI+nC,IAAiB54B,YAAA64B,EAAC,GAAD9rC,OAChCgE,EAAG,OAAQi1D,EAAQn1D,KAAI,SAAAiY,GAAC,OAAIA,EAAErZ,EAAE,KAACopC,IAGzC5rC,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,IAIT,kBAAZA,GAAoC,OAAZA,EAC/B/4D,wBAAA,GACOyJ,GAAG,GAAAsJ,YAAA,GAKLjP,EAAM6nC,EAAiBotB,KAIhC/4D,wBAAA,GAAYyJ,GAAG,GAAAsJ,YAAA,GAAGjP,EAAMi1D,GAC5B,GAAG,CAAC,GArCc,IAwCtB,EC7GaiY,GAAqB71D,aAAGC,QAAAC,aAAA,0PAQ/B01D,ICLSvY,GAPI,CACfuX,QACAkB,uBCSa,CAGb3W,QFCW,SAACjpB,GAAU,IAAD6/B,EACbplE,EAAQulC,EAARvlC,IACFkkB,EAAiB,QAATkhD,EAAGplE,EAAI,UAAE,IAAAolE,OAAA,EAANA,EAAQlhD,SAEzB,OAAOshB,GAAcz5B,QAAQm5D,GAAoB,CAC7CllE,IAAKA,EAAIlI,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,IAC3BwtB,aACDrkB,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,IAExB,IAAG8F,MAAMC,KACZ,IG3BKp6B,GAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,iBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,aAAAC,eAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,eAAa,KAAD,EACkC,OAD5DL,EAAKE,EAAAI,KACXhB,EAAOiB,UAAU,gBAAiBP,EAAK,UAAAtY,OAAasY,GAAU,IAAIE,EAAAM,OAAA,SAE3DlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EALW,EAMd,IAKaqO,GAFA,IAAIJ,GAAyB65D,KChB/BC,GAAyBj2D,aAAGC,QAAAC,aAAA,wQAsB5Bg2D,GAA2Bl2D,aAAG60B,QAAA30B,aAAA,0Q,6EChB9B40B,GAA4B,SAAC5+B,GACtC,OAAe,OAAPA,QAAO,IAAPA,KAAS7O,GAAM,CAAEmjB,QAAS,CAAEnjB,GAAW,OAAP6O,QAAO,IAAPA,OAAO,EAAPA,EAAS7O,UAAS8G,CAC9D,EAwBa4mC,GAAiC,WAAmB,IACvDvqB,GAD4Ctc,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,IAC7BzF,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAGzC,OAFkB8B,QAAQqhB,EAAQze,QAEb,CACjBye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,QAC7CA,CACR,EA0BaqiC,GAAmB,SAAA59B,GAC5B,OAAKA,EAEO/N,wBAAA,GACL+N,GAAI,IACPrN,KAAMqN,EAAK4a,QAAO,0CAAA7oB,OAAeiO,EAAKrN,MAASqN,EAAKrN,KACpD+vC,UAAW1iC,EAAKyiC,QAAUziC,EAAKyiC,OAAO5sC,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,MAL1C,IAStB,EAGauuC,GAAgB,SAAHphC,GACpBA,EAAFnN,GACSmN,EAAT8gC,UACS9gC,EAATshC,UACWthC,EAAXuhC,YACSvhC,EAATwhC,UACOxhC,EAAPgZ,QACIhZ,EAAJ3K,KACiB,OAAAhH,YAAA2R,EAAA1R,GAAqB,ECjF7BqzE,GAAgBn2D,aAAGC,QAAAC,aAAA,6LAM1B+1D,ICROG,GAAsBp2D,aAAGC,QAAAC,aAAA,iMCGzBm2D,GAAmBr2D,aAAGC,QAAAC,aAAA,6TAO7Bg2D,ICROI,GAAmBt2D,aAAGC,QAAAC,aAAA,iLAO7Bg2D,ICNOK,GAA6Bv2D,aAAGC,QAAAC,aAAA,sUAOvCg2D,ICROM,GAAiBx2D,aAAGC,QAAAC,aAAA,kMAM3B+1D,ICLOQ,GAAgBz2D,aAAGC,QAAAC,aAAA,sOAM1B+1D,ICPOS,GAAgB12D,aAAGC,QAAAC,aAAA,+LAM1B+1D,IAGS,YAAC//B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQg6D,GAAe,CACxChkC,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EACVxjC,EAAe,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,KAC7B,MAAO,CACHA,KAAM49B,GAAiB59B,GAE/B,IAAG0jC,MAAMC,KACZ,ECrBYogC,GAAgB32D,aAAGC,QAAAC,aAAA,kMAM1B+1D,IAGS,YAAC//B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQi6D,GAAe,CACxCjkC,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EACVxjC,EAAe,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,KAC7B,MAAO,CACHA,KAAM49B,GAAiB59B,GAE/B,IAAG0jC,MAAMC,KACZ,ECpBYqgC,GAAiB52D,aAAGC,QAAAC,aAAA,qMAM3B+1D,IAGS,YAAC//B,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQk6D,GAAgB,CACzClkC,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EACVxjC,EAAe,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,KAC7B,MAAO,CACHA,KAAM49B,GAAiB59B,GAE/B,IAAG0jC,MAAMC,KACZ,ECPc8d,GAhBI,SAACne,GAChB,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNk4D,GAAe,CAAEl4D,MAAK,KAE5BmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACJ,ECEeoxD,GAhBI,SAACxpB,GAChB,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNo4D,GAAO,CAAEp4D,MAAK,KAEpBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACJ,ECEesxD,GAhBK,SAAC1pB,GACjB,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOL,QAAQM,IACXD,EAAIlI,KAAI,SAAApB,GAAE,OACNs4D,GAAQ,CAAEt4D,MAAK,KAErBmJ,MAAK,SAAAgvD,GAKH,MAAO,CAAE5sD,KAJI4sD,EAAQnxD,QAAO,SAACC,EAAKsE,GAC9B,IAAMyrB,EAAW,OAAJzrB,QAAI,IAAJA,OAAI,EAAJA,EAAMA,KACnB,OAAOyrB,EAAI,GAAA15B,OAAA6J,aAAOF,GAAG,CAAE+vB,EAAKh3B,KAAMiH,CACtC,GAAG,IAEP,GACJ,ECJMuoE,GAAS,CACXp8C,ObEW,SAACyb,GACZ,IAAc9wC,EAAU8wC,EAAhBtjC,KAEF/I,EAAOirC,GAA0B1vC,EAAMyE,MACvCwrC,EAASN,GAA+B3vC,EAAMkwC,WAEpD,OAAOa,GAAcz5B,QAAQy5D,GAAe,CACxC/wE,MAAKP,wBAAA,GACE+wC,GAAcxwC,IAAM,IACvBiC,GAAGjC,EAAMiC,GACTwC,OACAwrC,aAEL7kC,MAAK,SAAAmiC,GAAa,IAADyD,EACVxjC,EAAe,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,KAC7B,MAAO,CACHA,KAAM49B,GAAiB59B,GAE/B,IAAG0jC,MAAMC,KACZ,EapBG2d,WZFW,SAAChe,GACd,IAAQtjC,EAAqBsjC,EAArBtjC,KAAMwhD,EAAele,EAAfke,WAERhvD,EAAQwN,EAAKnK,KAAI,SAAA41B,GAErB,IAAMx0B,EAAOirC,GAA0BzW,EAAKx0B,MACtCwrC,EAASN,GAA+B1W,EAAKgX,QAEnD,OAAAxwC,wBAAA,GACK+wC,GAAcvX,IAAK,IACtBh3B,GAAIg3B,EAAKh3B,GACTwC,OACAwrC,UAEJ,IAGA,OAAOc,GACJz5B,QAAQ05D,GAAqB,CAC5BhxE,QACAgvD,eAED5jD,MAAK,SAAAmiC,GAAa,IAADyD,EAEhB,MAAO,CACLxjC,KAAM,CAAEk/C,MAFY,OAARnf,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgB0b,OAIhC,IAAGxb,MAAMC,KACZ,EYzBGooB,QXEW,SAACzoB,GACZ,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,GAAcz5B,QAAQ25D,GAAkB,CAC3CntE,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAA2oB,EACVnsD,EAAe,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,KACvBqsD,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,OAAN,EAARA,EAAgBE,SACjC,MAAO,CACHrsD,KAAMA,EAAKnK,IAAI+nC,IACfxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EWjBG4oB,QVAW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,GAAcz5B,QAAQ45D,GAAkB,CAC3C3lE,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAEhB,MAAO,CACHxjC,MAFiB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,MAEdnK,IAAI+nC,IAEvB,IAAG8F,MAAMC,KACZ,EUVG6oB,iBTAW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,GAAcz5B,QAAQ65D,GAA4B,CACrDrtE,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAA2oB,EACVnsD,EAAe,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,KACvBqsD,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,OAAN,EAARA,EAAgBE,SACjC,MAAO,CACHrsD,KAAMA,EAAKnK,IAAI+nC,IACfxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,ESlBG8oB,ORHW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQ85D,GAAgB,CACzC9jC,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAEhB,MAAO,CACHxjC,KAFS49B,GAAyB,OAARmC,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,MAIlD,IAAG0jC,MAAMC,KACZ,EQPGiK,OPHW,SAACtK,GACZ,IPLsChgC,EAASqM,EOKvClb,EAAkC6uC,EAAlC7uC,GAAUjC,EAAwB8wC,EAA9BtjC,KAAawI,EAAiB86B,EAAjB96B,aAEnBvR,GPPgCqM,EOOC9Q,EAAMyE,KPPE0Y,EOOInH,EAAavR,KPN9CqJ,KAAQgD,EAASqM,QAO7BpU,EALM,OAAP+H,QAAO,IAAPA,KAAS7O,GACN,CAAEmjB,QAAS,CAAEnjB,GAAW,OAAP6O,QAAO,IAAPA,OAAO,EAAPA,EAAS7O,KAChB,OAARkb,QAAQ,IAARA,KAAUlb,GACN,CAAE6tC,YAAY,QACd/mC,GOCRknC,EPsBoC,WAAkC,IAAjCn/B,EAAOhI,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAIqU,EAAQrU,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAC9Dsc,EAAU4qB,KAAWl/B,EAASqM,GAAU9Z,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IACzD6tC,EAAaE,KAAW7yB,EAAUrM,GAASzN,KAAI,SAAApB,GAAE,MAAK,CAAEA,KAAI,IAGlE,OAF8B8B,QAAQqhB,EAAQze,SAAW5C,QAAQ+rC,EAAWnpC,QAE3C,CAC7Bye,QAASrhB,QAAQqhB,EAAQze,QAAUye,OAAUrc,EAC7C+mC,WAAY/rC,QAAQ+rC,EAAWnpC,QAAUmpC,OAAa/mC,QACtDA,CACR,CO/BmBgnC,CAA+B/vC,EAAMkwC,UAAWl6B,EAAak6B,WAE5E,OAAOa,GAAcz5B,QAAQ+5D,GAAe,CACxC/jC,MAAO,CAAErrC,MACTjC,MAAKP,wBAAA,GACE+wC,GAAcxwC,IAAM,IACvByE,OACAwrC,aAEL7kC,MAAK,SAAAmiC,GAAa,IAADyD,EACVxjC,EAAe,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,KAC7B,MAAO,CACHA,KAAM49B,GAAiB59B,GAE/B,IAAG0jC,MAAMC,KACZ,EOfG+oB,OAAQC,GACRE,UACAE,WACAtL,cACAqL,cACAE,gBAGWiX,MC3BFC,GAA6B92D,aAAGC,QAAAC,aAAA,sFAOhC62D,GAA+B/2D,aAAG60B,QAAA30B,aAAA,wFC0DlCswB,GAAmB,SAAA59B,GAC5B,OAAKA,EAEO/N,wBAAA,GACL+N,GAAI,IACPrN,KAAMqN,EAAK4a,QAAO,0CAAA7oB,OAAeiO,EAAKrN,MAASqN,EAAKrN,OAJtC,IAQtB,ECpEayxE,GAAuBh3D,aAAGC,QAAAC,aAAA,iVAOjC62D,ICROE,GAAuBj3D,aAAGC,QAAAC,aAAA,6LAOjC62D,ICNOG,GAAiCl3D,aAAGC,QAAAC,aAAA,0VAO3C62D,ICROI,GAAqBn3D,aAAGC,QAAAC,aAAA,wMAM/B42D,ICNSzZ,GALI,CACfwZ,UACAO,WCAe,CACfzY,QLaW,SAACzoB,GACZ,IAAQhtC,EAAkEgtC,EAAlEhtC,OAAM01D,EAA4D1oB,EAA1D9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA+B3oB,EAA3Bz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAE9D,OAAOiyB,GAAcz5B,QAAQs6D,GAAsB,CAC/C9tE,SACAuW,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAA2oB,EACVnsD,EAAe,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,KACvBqsD,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,OAAN,EAARA,EAAgBE,SACjC,MAAO,CACHrsD,KAAMA,EAAKnK,IAAI+nC,IACfxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EK5BG4oB,QJWW,SAACjpB,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,GAAcz5B,QAAQu6D,GAAsB,CAC/CtmE,QACDH,MAAK,SAAAmiC,GAAa,IAADyD,EAEhB,MAAO,CACHxjC,MAFiB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,MAEdnK,IAAI+nC,IAEvB,IAAG8F,MAAMC,KACZ,EIrBG6oB,iBHWW,SAAClpB,GACZ,IAAQhtC,EAA8EgtC,EAA9EhtC,OAAM01D,EAAwE1oB,EAAtE9c,WAAchV,EAAIw6C,EAAJx6C,KAAMnC,EAAO28C,EAAP38C,QAAO48C,EAA2C3oB,EAAvCz2B,KAAQ5S,EAAKgyD,EAALhyD,MAAOqX,EAAK26C,EAAL36C,MAASxW,EAAewoC,EAAfxoC,OAAQrG,EAAO6uC,EAAP7uC,GAE/E,OAAO8uC,GAAcz5B,QAAQw6D,GAAgC,CACzDhuE,OAAMrE,wBAAA,GACCqE,GACAioC,KAAI,CAAC,EAAGzjC,EAAQrG,IAEvBoY,KAAM,CAAC0xB,KAAI,CAAC,EAAGtkC,EAAOqX,EAAM46C,gBAC5B16C,OACAnC,YACDzR,MAAK,SAAAmiC,GAAa,IAADyD,EAAA2oB,EACVnsD,EAAe,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,KACvBqsD,EAAmB,OAARtsB,QAAQ,IAARA,GAAc,QAANosB,EAARpsB,EAAU//B,YAAI,IAAAmsD,OAAN,EAARA,EAAgBE,SACjC,MAAO,CACHrsD,KAAMA,EAAKnK,IAAI+nC,IACfxxB,MAAOigD,EAASC,WAExB,IAAG5oB,MAAMC,KACZ,EG7BG8oB,OFQW,SAACnpB,GACZ,IAAQ7uC,EAAO6uC,EAAP7uC,GAER,OAAO8uC,GAAcz5B,QAAQy6D,GAAoB,CAC7CzkC,MAAO,CAAErrC,QACVmJ,MAAK,SAAAmiC,GAAa,IAADyD,EAEhB,MAAO,CACHxjC,KAFS49B,GAAyB,OAARmC,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,MAIlD,IAAG0jC,MAAMC,KACZ,IGIc8gC,GAFM5Z,GAfL54D,wHAAA,GACTyyE,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,IACAC,KCrBDC,GAAc,qBACdC,GAAiB,yFAEjBpc,GAAU,SAACn3D,GAAK,MACD,qBAAVA,GACG,OAAVA,GACU,KAAVA,GACCknC,MAAMC,QAAQnnC,IAA2B,IAAjBA,EAAMqH,MAAc,EAE3CmsE,GAAU,SAACC,GAAE,OAAKC,KAAcD,GAAI,mBAAAE,EAAAnqE,UAAAnC,OAAImqC,EAAI,IAAAtK,MAAAysC,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAJpiC,EAAIoiC,GAAApqE,UAAAoqE,GAAA,OAAK9tE,KAAKC,UAAUyrC,EAAK,GAAE,EAsDhEqiC,IAdWL,IAAQ,eAACtiE,EAAO1H,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,yBAAwB,OAAK,SAACxJ,EAAOid,GAC5E,IAAM62D,EAAaC,SAAS/zE,IAAUsqD,KAAK0pB,IAAIh0E,IAAU,GACzD,OAAQm3D,GAAQn3D,IAAW8zE,OAErBrqE,EADA,CAAEyH,UAEZ,CAAC,IAEwBsiE,IAAQ,eAACtiE,EAAO1H,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,0BAAyB,OAAK,SAACxJ,EAAOid,GAC9E,IAAMg3D,EAAcF,SAAS/zE,IAAUsqD,KAAK0pB,IAAIh0E,IAAU,IAC1D,OAAQm3D,GAAQn3D,IAAWi0E,OAErBxqE,EADA,CAAEyH,UAEZ,CAAC,IAE0BsiE,IAAQ,SAACl0E,GAAQ,OApD3B,SAACm0E,EAAIS,GAAwB,IAKtCC,EACApxD,EANoBphB,EAAO6H,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,EACnC,IAAKmtB,OAAOo9C,SAASG,GACjB,MAAM,IAAIE,UAAU,yCAKxB,IAAIC,EAAc,GAElB,OAAO,WAAyB,IAAC,IAADnwD,EAAA,KAAAowD,EAAA9qE,UAAAnC,OAAZktE,EAAU,IAAArtC,MAAAotC,GAAAE,EAAA,EAAAA,EAAAF,EAAAE,IAAVD,EAAUC,GAAAhrE,UAAAgrE,GAC1B,OAAO,IAAI5oE,SAAQ,SAAAC,GACf,IAAM4oE,EAAgB9yE,EAAQ+yE,SAAW3xD,EAEzCN,aAAaM,GAEbA,EAAUL,YAAW,WACjBK,EAAU,KAIV,IAFA,IAAM4xD,EAAShzE,EAAQ+yE,OAASP,EAAeV,EAAGt6D,MAAM+K,EAAMqwD,GAE9DK,EAAA,EAAAC,EAAgBR,EAAWO,EAAAC,EAAAxtE,OAAAutE,KAAtB/oE,EAAOgpE,EAAAD,IACAD,GAGZN,EAAc,EAClB,GAAGH,GAECO,GACAN,EAAeV,EAAGt6D,MAAM+K,EAAMqwD,GAC9B1oE,EAAQsoE,IAERE,EAAY50D,KAAK5T,EAEzB,GACJ,CACJ,CAiBiD44B,CAAQ,eAAA1mC,EAAAka,aAAAC,eAAAC,MAAC,SAAAC,EAAOpY,EAAO80E,EAAWn1E,GAAK,IAAAo1E,EAAAC,EAAA9mE,EAAA,OAAAgK,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACpD,SACblP,KADbsrE,EAAYp1E,EAAMs1E,UACQF,IAAc/0E,SAAoByJ,IAAVzJ,EAAmB,CAAAyY,EAAAE,KAAA,eAAAF,EAAAM,OAAA,cAAStP,GAAS,cAAAgP,EAAAE,KAAA,EACtEg6D,GAAahY,OAAOr7D,EAAQ4T,YAAA,GAAKvT,EAAMkB,KAAOb,IAAS,KAAD,EAAjE,OAAiEg1E,EAAAv8D,EAAAI,KAArE3K,EAAI8mE,EAAJ9mE,KAAIuK,EAAAM,OAAA,SACJo+C,GAAQjpD,QAA+DzE,EAAvD,CAAEyH,QAAS,uBAAwBsgC,KAAM,CAAExxC,WAAqB,wBAAAyY,EAAAO,OAAA,GAAAZ,EAAA,KAC3F,gBAAAa,EAAAC,EAAAg8D,GAAA,OAAAn3E,EAAAob,MAAA,KAAA3P,UAAA,EALwD,GAKtD,IAAI,KAEM2rE,GAAQ3B,IAAQ,eAACtiE,EAAO1H,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,sBAAqB,OACzD4rE,aAAM9B,GAAapiE,EAAQ,IAGlBmkE,GAAW7B,IAAQ,eAACtiE,EAAO1H,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,yBAAwB,OAC/D4rE,aAAM7B,GAAgBriE,EAAQ,IAGrBokE,GAAoB9B,IAAQ,SAAC+B,GAA0D,IAAjDrkE,EAAO1H,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,kCACzD,OAAO,SAACxJ,EAAO80E,EAAWn1E,GACtB,GAAa,MAATK,EACJ,OAAOA,IAAU80E,EAAUS,QACrB9rE,EACA,CAAEyH,UACZ,CACJ,I,osBCtEM0e,GAAc,SAACjwB,GAAW,IAAD61E,EAEvB3lD,EA2BAlwB,EA3BAkwB,QACA/hB,EA0BAnO,EA1BAmO,WAEAzO,GAwBAM,EAzBAuB,QAyBAvB,EAxBAN,WACAo2E,EAuBA91E,EAvBA81E,aACAt4B,EAsBAx9C,EAtBAw9C,UACAu4B,EAqBA/1E,EArBA+1E,WACAv0E,EAoBAxB,EApBAwB,OACAC,EAmBAzB,EAnBAyB,WACAC,EAkBA1B,EAlBA0B,MAEOC,GAgBP3B,EAjBA+pB,OAiBA/pB,EAhBA2W,QAgBA3W,EAfA4B,eAAM,IAAAD,EAAG,QAAOA,EAChBE,EAcA7B,EAdA6B,OACAC,EAaA9B,EAbA8B,SAEAC,GAWA/B,EAZAg2E,SAYAh2E,EAXA+B,SACAC,EAUAhC,EAVAgC,QACA2E,EASA3G,EATA2G,WACAsI,EAQAjP,EARAiP,YACA/M,EAOAlC,EAPAkC,MACAvC,EAMAK,EANAL,SACAC,EAKAI,EALAJ,OACAyP,EAIArP,EAJAqP,gBACAlN,EAGAnC,EAHAmC,SAAQ8zE,EAGRj2E,EAFAqhC,kBAAU,IAAA40C,EAAG,CAAC,EAACA,EACZpzE,EAAIrE,YACPwB,EAAKvB,IACHwB,EAAYC,cACZqB,EAAUX,GAAUZ,GACpBk2E,EAAa1xE,KAAM0rB,EAAS,MAGlCimD,EAA2DC,aAAW,CAClEzvE,aACAsI,cACA6mE,eACAzmE,oBAJIgnE,EAAaF,EAAbE,cAAeC,EAAcH,EAAdG,eAAgBC,EAAeJ,EAAfI,gBAOvCzzE,EAAyEC,aAAQvC,YAAC,CAC9EgB,SACAK,SACAC,WACAC,UACAG,QACAvC,WACAC,SACAuC,YACGU,IATCG,EAAEF,EAAFE,GAAIjC,EAAK+B,EAAL/B,MAAOkC,EAAUH,EAAVG,WAAUC,EAAAJ,EAAEK,KAAQG,EAAOJ,EAAPI,QAASF,EAAKF,EAALE,MAAOC,EAAWH,EAAXG,YAajDmzE,EAAwBrlE,uBAAY,WACtC,OAAOhK,IAAMsB,eAAe+0C,GACtBr2C,IAAMhC,aAAaq4C,GACL,KAAdA,EACI,SACAv9C,EAAUu9C,EAAW,CAAEj9C,EAAGi9C,GACxC,GAAG,CAACA,EAAWv9C,IAGTmmC,EAAej1B,uBAAY,SAACtJ,GAC9B9G,EAAMe,SAAS+F,EACnB,GAAG,CAAC9G,IAEE01E,EAAiBtlE,uBACnB,SAAAvK,GACI,OAAOA,EACHrD,eAACO,KAAQ,CAELzD,MAAOi2E,EAAe1vE,GACtBsQ,SAAUq/D,EAAgB3vE,GAAQvI,SAAA,CAElCU,cAACwK,KAAY,CAAAlL,SACR63E,EAAiB,OAANtvE,QAAM,IAANA,OAAM,EAANA,EAAQ5D,IAAIkG,OAE3BmtE,EAAczvE,KAPV0vE,EAAe1vE,IASxB,IACR,GACA,CAAC0vE,EAAgBC,EAAiBF,IAGtC,OACIt3E,cAAAsmB,WAAA,CAAAhnB,SACIkF,eAACmzE,KAAmBl2E,gDAAA,CAChBwC,GAAIA,GACAjC,GAAK,IACTe,SAAUskC,EACV3iC,QAAM,EACN/B,MACc,KAAVA,IACU,IAAVA,GACI3C,cAAC2E,KAAU,CACPhC,MAAOA,EACP9B,OAAQA,EACRD,SAAUA,EACVsD,WAAYA,IAIxBvD,UAAS,GAAAY,OAAKiB,EAAQR,MAAK,KAAAT,OAAIZ,GAC/Bi3E,oBAAkB,EAClBvzE,SAAUE,IAAYF,IAASC,GAC/B5B,WACI1C,cAAC4E,KAAe,CACZL,QAASA,EACTF,MAAOA,GAASC,EAChB5B,WAAYA,IAGpBG,OAAQA,EACRy/B,WAAU7gC,wBAAA,GACH6gC,GAAU,IACbG,eACIziC,cAAC6iC,KAAc,CAAC/0B,SAAS,QAAOxO,SAC3B0C,EAAMV,OAAS8E,uBAAoC,QAAxB0wE,EAACK,EAAWn1E,EAAMV,cAAM,IAAAw1E,OAAA,EAAvBA,EAAyB3sE,KAAM,CAAEhK,MAAO,gBAIjF03E,YAAa,CACTC,YAAa,SAACn6D,GAAQ,OAAK25D,EAAcH,EAAWx5D,GAAU,IAE9D1a,GACAsnB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAE1B8P,EACGpP,cAAC+E,KAAQ,CACLzD,MAAO01E,EAEP,aAAY91E,EAAU,+BACtB8D,MAAO9D,EAAU,+BAA+B5B,SAE/Cm4E,KAJG,QAMR,KACHtmD,EAAQ9rB,IAAIqyE,QAK7B,EAwBAxmD,GAAYvvB,aAAe,CACvBwvB,QAAS4mD,KAAM17D,MAAK,SAAC27D,EAAGC,GAAC,OAAKD,EAAE71E,KAAK+1E,cAAcD,EAAE91E,KAAK,IAC1Ds8C,UAAW,GACXu4B,WAAY,GACZ/zE,QAAS,CAAC,EACV2E,WAAY,OACZsI,YAAa,KACbI,iBAAiB,EACjBymE,aAAc,YAGlB,IAAMxsD,GAAoB,SAAHlrB,GACXA,EAARuC,SACWvC,EAAX8P,YACS9P,EAATgQ,UACYhQ,EAAZkQ,aACOlQ,EAAP8xB,QACS9xB,EAATsB,UACetB,EAAf84E,gBACU94E,EAAV+4E,WACI/4E,EAAJmQ,KACMnQ,EAANyG,OACazG,EAAbg5E,cACYh5E,EAAZqQ,aACOrQ,EAAPyQ,QACmBzQ,EAAnB0Q,oBACQ1Q,EAAR4Q,SACI5Q,EAAJ8C,KACU9C,EAAV22B,WACO32B,EAAPwf,QACGxf,EAAHwK,IACSxK,EAATgtB,UACOhtB,EAAP4rB,QACM5rB,EAAN8Q,OACS9Q,EAATi5E,UACaj5E,EAAbk5E,cACOl5E,EAAPghB,QACIhhB,EAAJgd,KACYhd,EAAZ+Q,aACI/Q,EAAJoH,KACcpH,EAAdkR,eACUlR,EAAVm5E,WACKn5E,EAALiC,MA/BmB,IAgChBwC,EAAIrE,YAAAJ,EAAAoS,IAAA,OACL3M,aAAuBhB,EAAM,EAE7BjC,GAAYC,aACd,SAAAC,GAAK,MAAK,CAENC,MAAO,CACHC,SAAUF,EAAMG,QAAQ,KAE/B,GACD,CAAEC,KAAM,kBAGG+uB,MCpNAunD,GAvBuB,SAACx3E,GACnC,IAAQ62C,EAAWF,eAAXE,OACF4gC,EAAuBp+C,aAAY,SAAA5tB,GAAK,OAAIrL,KAAIqL,EAAM,kCAAmC,IAEzF26B,EAAej1B,uBAAY,SAAC9Q,GAC9B,IAAMwyC,EAAa4kC,EAAqBp3E,GACpCwyC,IACAgE,EAAO,OAAQhE,EAAW3pC,MAC1B2tC,EAAO,OAAQhE,EAAWrtC,MAC1BqxC,EAAO,qBAAsBhE,EAAWvB,gBAAgBltC,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,KAC1E6zC,EAAO,mBAAoBhE,EAAWlmB,kBACtCkqB,EAAO,gBAAiBhE,EAAW3B,WAAW9sC,KAAI,SAAA+L,GAAK,OAAAA,EAAFnN,EAAW,KAExE,GAAG,CAACy0E,EAAsB5gC,IAE1B,OACI93C,cAACwH,KAAc/F,wBAAA,GAAKR,GAAK,IAAE8B,SAAUskC,EAAa/nC,SAC9CU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAGhD,ECLM2wE,GAAa,CAACjC,aAAM,mBAAoBvB,GAAY,UACpD32D,GAAe,CAACC,eAAYC,aAAU,MAEtCk6D,GAAqB,SAAA33E,GACzB,OACEuD,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAChBU,cAAC24C,KAAU,CAACC,eAAe,EAAMzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,SACpE5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACpJ9qB,cAACw4C,GAAM,CAACt4C,QAAQ,WAGtB,EAiCe24E,GA/BY,SAAC53E,GAAK,OAC/BjB,cAACm3C,KAAM11C,wBAAA,GAAKR,GAAK,IAAA3B,SACfkF,eAACs0C,KAAU,CAACxa,QAASt+B,cAAC44E,GAAkB,IAAIt5E,SAAA,CAC1CU,cAAC4f,KAAS,CAAC/e,OAAO,KAAKuC,SAAUu1E,KACjC34E,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAAC4f,KAAS,CAAC/e,OAAO,UAAUk4C,WAAS,EAACtqC,WAAS,IAC/CzO,cAACy4E,GAA6B,CAAC53E,OAAO,gBAAgBwrB,UAAU,aAAa1pB,MAAM,oCAAoCyM,YAAU,EAACqvC,UAAU,qBAC5Iz+C,cAACwH,KAAc,CAAC3G,OAAO,UAAUwrB,UAAU,YAAY1pB,MAAM,8BAA6BrD,SACxFU,cAAC2H,KAAiB,CAAC9G,OAAO,OAAOkH,gBAAiBC,SAEpDhI,cAACwH,KAAc,CAAC3G,OAAO,sBAAsBwrB,UAAU,YAAY1pB,MAAM,0CAA0CyM,YAAU,EAACqvC,UAAU,mBAAkBn/C,SACxJU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAEtChI,cAAC84E,GAAS,CAACj4E,OAAO,OAAO+O,aAAa,cACtC5P,cAACwxB,KAAmB,CAAC3wB,OAAO,qBAAqBwrB,UAAU,YAAY1pB,MAAM,yCAAyC8L,WAAS,EAACmB,aAAc,CAAC,MAAO,SAAStQ,SAC7JU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE3ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,gBAAgBwrB,UAAU,YAAY1pB,MAAM,oCAAoC8L,WAAS,EAAAnP,SACnHU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE3ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ1pB,MAAM,gCAAgCmD,OAAQ,CAAE2rB,SAAU,SAAWhjB,WAAS,EAAAnP,SACtIU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE3ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,WAAWwrB,UAAU,OAAO1pB,MAAM,+BAA+B8L,WAAS,EAAAnP,SACpGU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,cAGtC,E,mBCrCLwW,GAAe,CAACC,eAAYC,aAAU,MAEtCq6D,GAAmB,SAAH15E,GAA6D,IAAvDmQ,EAAInQ,EAAJmQ,KAAM1I,EAAQzH,EAARyH,SAAUikB,EAAO1rB,EAAP0rB,QAASlP,EAASxc,EAATwc,UAAsBxc,EAAXkqB,YAC9D,OACE/kB,eAACuX,KAAU,CAAAzc,SAAA,CACRuc,GAAa7b,cAACowC,GAAW,CAACtpC,SAAUA,EAAU/F,OAAQyO,IACtDub,GAAW/qB,cAAC+J,KAAU,CAACjD,SAAUA,EAAU/F,OAAQyO,MAG1D,EAEMwpE,GAAmB,SAAH5nE,GAAmC,IAA7BmY,EAAWnY,EAAXmY,YAAgBtoB,EAAKxB,YAAA2R,EAAA1R,IAC/C,OACE8E,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAChBU,cAAC24C,KAAU,CAACC,eAAe,EAAMzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,SACpE5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACpJ9qB,cAACw4C,GAAM,CAACt4C,QAAQ,QACfqpB,EAAYI,IAAI,SAAU,UAAY3pB,cAACsW,GAAY,CAACY,aAAa,kBAGxE,EAwCe+hE,GAtCU,SAACh4E,GACxB,IAAMsoB,EAActoB,EAAMsoB,YAE1B,OACEvpB,cAACw5C,GAAI/3C,wBAAA,GACCR,GAAK,IACT6oB,QAAS9pB,cAAC+4E,GAAgB,CAACxvD,YAAaA,IACxCvkB,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IAAU3B,SAEnDkF,eAACs0C,KAAU,CAACxa,QAASt+B,cAACg5E,GAAgB,CAACzvD,YAAaA,IAAgBjqB,SAAA,CAClEU,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAAC4f,KAAS,CAAC/e,OAAO,UAAUk4C,WAAS,EAACtqC,WAAS,IAC/CzO,cAACy4E,GAA6B,CAAC53E,OAAO,gBAAgBwrB,UAAU,aAAa1pB,MAAM,oCAAoCyM,YAAU,EAACqvC,UAAU,qBAC5Iz+C,cAACwH,KAAc,CAAC3G,OAAO,UAAUwrB,UAAU,YAAY1pB,MAAM,8BAA6BrD,SACxFU,cAAC2H,KAAiB,CAAC9G,OAAO,OAAOkH,gBAAiBC,SAEpDhI,cAAC84E,GAAS,CAACj4E,OAAO,OAAO+O,aAAa,cACtC5P,cAACwxB,KAAmB,CAAC3wB,OAAO,qBAAqBwrB,UAAU,YAAY1pB,MAAM,yCAAyC8L,WAAS,EAAAnP,SAC7HU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE3ChI,cAACwH,KAAc,CAAC3G,OAAO,sBAAsBwrB,UAAU,YAAY1pB,MAAM,0CAA0CyM,YAAU,EAACqvC,UAAU,mBAAkBn/C,SACxJU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAEtChI,cAACwxB,KAAmB,CAAC3wB,OAAO,gBAAgBwrB,UAAU,YAAY1pB,MAAM,oCAAoC8L,WAAS,EAAAnP,SACnHU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE3ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ1pB,MAAM,gCAAgCmD,OAAQ,CAAE2rB,SAAU,SAAWhjB,WAAS,EAAAnP,SACtIU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE3ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,WAAWwrB,UAAU,OAAO1pB,MAAM,+BAA+B8L,WAAS,EAAAnP,SACpGU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,cAKnD,EC9EMkxE,GAAY,QAWHC,GATO,CAClBh3E,KAAM+2E,GACN/uE,KAAM45B,KACNtT,KAAMof,GACNlf,KAAM2oC,GACNjiC,OAAQwhD,GACR1wB,KAAM8wB,ICDK77D,OAXf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QACEo5E,KAAK,eACL97D,EAAE,kIAIV,E,WCDeF,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMokD,EAAE,IAAIE,EAAE,IAAI/1C,MAAM,KAAKiD,OAAO,KAAK6nE,GAAG,QAGlD,E,yCCAMx3E,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFgI,QAAS,OACTmU,WAAY,UAEnB,IAEK62D,GAAa,SAAHj6E,GAAsD,IAAhDsB,EAAStB,EAATsB,UAAWI,EAAM1B,EAAN0B,OAAQF,EAAMxB,EAANwB,OAAQ04E,EAAGl6E,EAAHk6E,IAAQt4E,EAAKxB,YAAAJ,EAAAK,IAEpD8C,EAAUX,KACV1B,EAAQkB,KAAIN,EAAQF,GAC1B,OAAKV,EAIDqE,eAAA,OAAK7D,UAAW6B,EAAQ8D,KAAKhH,SAAA,CACzBU,cAACw5E,GAAiB,CAACphE,MAAO,CAAEjY,MAAOA,KAClCo5E,GAAOv5E,cAACC,KAAUwB,wBAAA,CAACvB,QAAQ,QAAQS,UAAWA,GAAee,aAAuBT,IAAM,IAAA3B,SAAIa,QANlF,IAUzB,EAQAm5E,GAAW33E,aAAe,CACtBC,UAAU,GAGC03E,UCrCTnoD,GAAU,CACZ,CAAEltB,GAAI,QAAS9B,KAAM,wCACrB,CAAE8B,GAAI,aAAc9B,KAAM,6CAC1B,CAAE8B,GAAI,YAAa9B,KAAM,4CACzB,CAAE8B,GAAI,OAAQ9B,KAAM,wCAOTs3E,GAJmB,SAACx4E,GAAK,OAAMjB,cAACkxB,KAAWzvB,wBAAA,GAAKR,GAAK,IAAEkwB,QAASA,KAAW,ECU3EuoD,GAdS,SAACz4E,GAAK,OAC5BuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACfU,cAAC2sC,GAAW,CAAC9rC,OAAO,IAAIyO,UAAQ,IAChCtP,cAACy5E,GAAkB,CAAC54E,OAAO,aAC3Bb,cAACsC,KAAY,CAACzB,OAAO,aACrBb,cAAC4sC,GAAgB,CACf/rC,OAAO,UACP8B,MAAM,mBACN8M,cAAc,OAGT,ECWIkqE,GAlBgB,SAAC14E,GAC9B,IAAQL,EAAqBK,EAArBL,SAAUG,EAAWE,EAAXF,OACZqpB,EAAgB,OAANrpB,QAAM,IAANA,OAAM,EAANA,EAAQqpB,QAClBwvD,EAAiB,OAAN74E,QAAM,IAANA,OAAM,EAANA,EAAQ64E,SAEzB,OACEp1E,eAACyD,KAAUxG,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAClBiqB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAACy0C,KAAoB,IAC5DlrB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC00C,KAAoB,IAC5DnrB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC4L,KAAqB,IAC7D2d,KAAYI,IAAI,SAAU/oB,KAAcwpB,IAAYwvD,GAAY55E,cAAC20C,KAAsB,IACvFprB,KAAYI,IAAI,UAAW/oB,IAAawpB,IAAYwvD,GAAY55E,cAACid,KAAuB,IACxFsM,KAAYI,IAAI,UAAW/oB,IAAawpB,IAAYwvD,GAAY55E,cAAC4a,KAAsB,OAG9F,ECRe4Z,GAdD,CACV,CAAEjvB,IAAK,KAAMmvB,OAAQ,6BACrB,CAAEnvB,IAAK,OAAQmvB,OAAQ,+BACvB,CAAEnvB,IAAK,cAAemvB,OAAQ,sCAC9B,CAAEnvB,IAAK,YAAamvB,OAAQ,mCAAoCjyB,OAAQoyB,KAAe1xB,MAAOgrC,IAC9F,CAAE5oC,IAAK,YAAamvB,OAAQ,mCAAoCjyB,OAAQoyB,KAAe1xB,MAAOgrC,IAC9F,CAAE5oC,IAAK,UAAWmvB,OAAQ,iCAAkCjyB,OAAQkyB,KAAkBxxB,MAAO+qC,IAC7F,CAAE3oC,IAAK,QAASmvB,OAAQ,gCACxB,CAAEnvB,IAAK,WAAYmvB,OAAQ,kCAAmCjyB,OAAQkyB,KAAkBxxB,MAAO+qC,IAC/F,CAAE3oC,IAAK,WAAYmvB,OAAQ,mCAC3B,CAAEnvB,IAAK,sBAAuBmvB,OAAQ,CAAC,mCAAoC,kCAC3E,CAAEnvB,IAAK,OAAQmvB,OAAQ,6BAAUjyB,OAAQqyB,aAAc,QAAS,MAAO3xB,MAAOkrC,KCM5EwrC,GAAY,SAAC54E,GACjB,IAAMuB,EAAUwyB,eACV9Z,EAAWua,aAAYjB,IAEvBtvB,EAAU+B,aAAW,CACzBjH,cAACo1B,KAAiB,CAACv0B,OAAO,OAAOyO,UAAQ,EAACpH,cAAe1F,EAAQ6yB,iBACjEr1B,cAACyE,KAAS,CAAC5D,OAAO,cAAcqH,cAAe1F,EAAQ6yB,iBACvDr1B,cAACU,KAAS,CAACG,OAAO,aAClBb,cAACs5E,GAAU,CAACz4E,OAAO,QAAQ04E,KAAG,EAACtkD,UAAU,IACzCj1B,cAAC85E,KAAY,CAACj5E,OAAO,WAAWo0B,UAAU,IAC1Cj1B,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,eACrD/vC,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,iBAGjDpa,EAAkB1wB,aAAmBC,GAE3C,OACElF,cAACosC,GAAI3qC,wBAAA,GACCR,GAAK,IACT6oB,QAAS9pB,cAACgb,KAAW,CAAC9V,QAASA,IAC/BgW,SAAUA,EACVG,QAASrb,cAAC05E,GAAe,IAAIp6E,SAE7BkF,eAACwrC,KAAQ,CAAA1wC,SAAA,CACNq2B,EACD31B,cAAC25E,GAAsB,CAACzxE,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQ0tC,mBAIlF,EAEA2pC,GAAUl4E,aAAe,CACvBmE,OAAQ,CAAE6vD,YAAa,CAAC,QAAS,aAAc,gBAAiB,WAAY,MAAO,QAAS,eAAgB,aAAc,YAAa,SAAU,oBAAqB,OAAQ,UAAW,cACzLt5C,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,QAKjB+4D,UCnDFE,GAAoC,SAAC94E,GAE9C,IAAQF,EAAWE,EAAXF,OACFsrB,EAAYhrB,KAAIN,EAAQ,YAE9B,OAEIf,cAAC05D,KAAmBj4D,wBAAA,GAAKR,GAAK,IAAEorB,UAAWA,EAAU/sB,SACjDU,cAAC25D,KAAe,CAAC9uD,SAAS,OAAMvL,SAC5BU,cAACgH,KAAS,CAACnG,OAAO,aAKlC,EAEAk5E,GAAkCp4E,aAAe,CAC7CC,UAAU,GAICm4E,UCNTC,GAAmB,SAAH36E,GAAgD,IAA1CyH,EAAQzH,EAARyH,SAAU0I,EAAInQ,EAAJmQ,KAAMia,EAAOpqB,EAAPoqB,QAAS5N,EAASxc,EAATwc,UACnD,OACErX,eAACuX,KAAU,CAAAzc,SAAA,CACRuc,GAAa7b,cAACowC,GAAW,CAACtpC,SAAUA,EAAU/F,OAAQyO,IACtDia,GAAWzpB,cAACwL,KAAU,CAAC1E,SAAUA,EAAU/F,OAAQyO,MAG1D,EAmCeyqE,GAjCU,SAACh5E,GACxB,IAAMgvB,EAAkBC,aAAkBjvB,GAClCF,EAAWkvB,EAAXlvB,OACF0wB,EAAiB,OAAN1wB,QAAM,IAANA,OAAM,EAANA,EAAQ0wB,SAGzB,OACEzxB,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC7CU,cAACowB,KAAmB,CAAC9uB,MAAO2uB,EAAgB3wB,SAC1CU,cAAC6pB,GAAQpoB,wBAAA,GACHR,GAAK,IACT6oB,QAAS9pB,cAACg6E,GAAgB,IAC1Bh1E,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IAAU3B,SAEnDkF,eAACoqB,KAAgB,CAAAtvB,SAAA,CACfU,cAACyE,KAAS,CAAC5D,OAAO,SAClBb,cAACyE,KAAS,CAAC5D,OAAO,gBAClBb,cAACU,KAAS,CAACG,OAAO,aAClBb,cAACs5E,GAAU,CAACz4E,OAAO,QAAQq5E,UAAU,OAAOX,KAAG,IAC/Cv5E,cAAC85E,KAAY,CAACj5E,OAAO,aACrBb,cAACyE,KAAS,CAAC5D,OAAO,gBAClBb,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACk1C,KAAa,CAACr0C,OAAO,OACtBb,cAAC+5E,GAAiC,CAACl5E,OAAO,eAAe8B,MAAK,mCAAApB,OAAqCkwB,cAO/G,E,UCpCe0oD,GAlBkC,SAACl5E,GAE9C,IAAQsd,EAAWgiC,eAAXhiC,OACF8N,EAAYhrB,KAAIkd,EAAQ,YACxB5b,EAAK,mCAAApB,OAAsC8qB,GAEjD,OAAKA,EAGDrsB,cAACwxB,KAAmB/vB,wBAAA,GAAKR,GAAK,IAAEorB,UAAWA,EAAW1pB,MAAOA,EAAMrD,SAC/DU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,UAJ1B,IAQ3B,ECbMwW,IADck4D,aAAM,uBACL,CAACj4D,eAAYC,aAAU,OACtC07D,GAAmB,CAAC37D,gBAEpB47D,GAAqB,SAAAp5E,GACvB,OACIuD,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACdU,cAAC24C,KAAU,CAACC,eAAe,EAAMzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,SACpE5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACpJ9qB,cAACw4C,GAAM,CAACt4C,QAAQ,WAG1B,EAoBao6E,GAhBY,SAACr5E,GAAK,OAC7BjB,cAACm3C,KAAM11C,wBAAA,GAAKR,GAAK,IAAA3B,SACbkF,eAACs0C,KAAU,CAACxa,QAASt+B,cAACq6E,GAAkB,IAAI/6E,SAAA,CAExCU,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAACy5E,GAAkB,CAAC54E,OAAO,WAAWuC,SAAUg3E,KAChDp6E,cAACu6E,KAAU,CAAC15E,OAAO,QAAQ4O,aAAa,YACxCzP,cAACsC,KAAY,CAACzB,OAAO,WAAW4O,cAAc,IAC9CzP,cAACm6E,GAAiC,CAACt5E,OAAO,eAAe4N,WAAS,SAEjE,ECpBP+P,GAAe,CAACC,eAAYC,aAAU,MAGtC87D,IAFoB/7D,eAED,SAAHpf,GAAgD,IAA1CmQ,EAAInQ,EAAJmQ,KAAM1I,EAAQzH,EAARyH,SAAUikB,EAAO1rB,EAAP0rB,QAASlP,EAASxc,EAATwc,UACnD,OACErX,eAACuX,KAAU,CAAAzc,SAAA,CACRuc,GAAa7b,cAACowC,GAAW,CAACtpC,SAAUA,EAAU/F,OAAQyO,IACtDub,GAAW/qB,cAAC+J,KAAU,CAACjD,SAAUA,EAAU/F,OAAQyO,MAG1D,GAEMirE,GAAmB,SAAAx5E,GACvB,OACEuD,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAChBU,cAAC24C,KAAU,CAACC,eAAe,EAAMzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,SACpE5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACpJ9qB,cAACw4C,GAAM,CAACt4C,QAAQ,SACde,EAAMF,OAAO64E,UAAY55E,cAACsW,GAAY,CAACY,aAAa,kBAG5D,EAqBewjE,GAnBU,SAACz5E,GACxB,OACEjB,cAACw5C,GAAI/3C,wBAAA,GACCR,GAAK,IACT6oB,QAAS9pB,cAACw6E,GAAgB,IAC1Bx1E,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IACzCgW,UAAU,EAAM3X,SAEhBkF,eAACs0C,KAAU,CAACxa,QAASt+B,cAACy6E,GAAgB,IAAIn7E,SAAA,CACxCU,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAACu6E,KAAU,CAAC15E,OAAO,QAAQ4O,aAAa,YACxCzP,cAACsC,KAAY,CAACzB,OAAO,WAAW4O,cAAc,IAC9CzP,cAACm6E,GAAiC,CAACt5E,OAAO,eAAe4N,WAAS,SAI1E,ECnDMksE,GAAY,QAWHC,GATO,CACpBz4E,KAAMw4E,GACNxwE,KAAM+5B,GACNzT,KAAMopD,GACNlpD,KAAMspD,GACN5iD,OAAQijD,GACRnyB,KAAMuyB,ICHOt9D,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,8ZAGd,ECmBeu9D,GApBc,SAAC55E,GAAK,OAC/BuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACbU,cAAC2sC,GAAW,CAAC9rC,OAAO,IAAIyO,UAAQ,IAChCtP,cAACwH,KAAc,CAAC3G,OAAO,UAAUwrB,UAAU,YAAY1pB,MAAM,8BAA6BrD,SACtFU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAExChI,cAAC4sC,GAAgB,CAAC/rC,OAAO,WAAW8B,MAAM,uCAAuC8M,cAAc,IAC/FzP,cAACwxB,KAAmB,CAAC3wB,OAAO,eAAeuO,YAAY,EAAOid,UAAU,QAAQvmB,OAAQ,CAAE2rB,SAAU,cAAgB9uB,MAAM,2CAA0CrD,SAChKU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,kBAAkBuO,YAAY,EAAOid,UAAU,QAAQvmB,OAAQ,CAAE2rB,SAAU,cAAgB9uB,MAAM,8CAA6CrD,SACtKU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACuH,KAAqB,CAAC1G,OAAO,cAAc8B,MAAM,wCAAwC0pB,UAAU,UAAUgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,SACvJ9gB,cAAC4sC,GAAgB,CAAC/rC,OAAO,UAAU8B,MAAM,mBAAmB8M,cAAc,OACrE,ECXPqrE,GAAY,CAAC,KAAM,SAAU,aAkBpBC,GAhBqB,SAAC95E,GACnC,IAAQL,EAAqBK,EAArBL,SAAUG,EAAWE,EAAXF,OACZqpB,EAAgB,OAANrpB,QAAM,IAANA,OAAM,EAANA,EAAQqpB,QAExB,OACE5lB,eAACyD,KAAUxG,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAClBiqB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAACy0C,KAAoB,IAC5DlrB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC00C,KAAoB,IAC5DnrB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC4L,KAAqB,CAACzF,KAAM20E,KACpEvxD,KAAYI,IAAI,SAAU/oB,KAAcwpB,GAAWpqB,cAAC20C,KAAsB,IAC1EprB,KAAYI,IAAI,UAAW/oB,IAAawpB,GAAWpqB,cAACid,KAAuB,IAC3EsM,KAAYI,IAAI,UAAW/oB,IAAawpB,GAAWpqB,cAAC4a,KAAsB,OAGjF,ECHe4Z,GApBD,CACV,CAAEjvB,IAAK,KAAMmvB,OAAQ,kCACrB,CAAEnvB,IAAK,OAAQmvB,OAAQ,oCACvB,CAAEnvB,IAAK,cAAemvB,OAAQ,2CAC9B,CAAEnvB,IAAK,YAAamvB,OAAQ,wCAAyCjyB,OAAQoyB,KAAe1xB,MAAOgrC,IACnG,CAAE5oC,IAAK,YAAamvB,OAAQ,wCAAyCjyB,OAAQoyB,KAAe1xB,MAAOgrC,IACnG,CAAE5oC,IAAK,UAAWmvB,OAAQ,sCAAuCjyB,OAAQkyB,KAAkBxxB,MAAO+qC,IAClG,CAAE3oC,IAAK,YAAamvB,OAAQ,CAAC,mCAAoC,oCACjE,CAAEnvB,IAAK,UAAWmvB,OAAQ,CAAC,mCAAoC,kCAC/D,CAAEnvB,IAAK,wBAAyBmvB,OAAQ,CAAC,+CAAgD,oCACzF,CAAEnvB,IAAK,sBAAuBmvB,OAAQ,CAAC,+CAAgD,kCACvF,CAAEnvB,IAAK,yBAA0BmvB,OAAQ,CAAC,yCAA0C,oCACpF,CAAEnvB,IAAK,uBAAwBmvB,OAAQ,CAAC,yCAA0C,kCAClF,CAAEnvB,IAAK,qBAAsBmvB,OAAQ,CAAC,qCAAsC,gCAC5E,CAAEnvB,IAAK,mBAAoBmvB,OAAQ,CAAC,qCAAsC,8BAE1E,CAAEnvB,IAAK,4BAA6BmvB,OAAQ,CAAC,8CAA+C,kCAC5F,CAAEnvB,IAAK,OAAQmvB,OAAQ,6BAAUjyB,OAAQqyB,aAAc,aAAc,MAAO3xB,MAAOkrC,KCD1E2sC,GAAiB,SAAC/5E,GAC3B,IAAMuB,EAAUwyB,eACV9Z,EAAWua,aAAYjB,IACvBpZ,EAAW6yB,GAAYzZ,IAEvBtvB,EAAU+B,aAAW,CACvBjH,cAACo1B,KAAiB,CAACv0B,OAAO,OAAOyO,UAAQ,EAACpH,cAAe1F,EAAQ6yB,iBACjEr1B,cAACyE,KAAS,CAAC5D,OAAO,cAAcqH,cAAe1F,EAAQ6yB,iBACvDr1B,cAACqsC,GAAW,CAACxrC,OAAO,OAAOwrB,UAAU,YAAYyjB,OAAO,YAAY9hB,MAAM,EAAM1uB,SAC5EU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAQ4I,UAAU,EAAM31B,SAChEU,cAAC6G,KAAS,CAAChG,OAAO,OAAOwI,KAAK,YAElCrJ,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,eACrD/vC,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,iBAGnDpa,EAAkB1wB,aAAmBC,GAE3C,OACIlF,cAACosC,GAAI3qC,wBAAA,GACGR,GAAK,IACT6oB,QAAS9pB,cAACgb,KAAW,CAAC9V,QAASA,IAC/BgW,SAAUA,EACVE,SAAUA,EACVC,QAASrb,cAAC66E,GAAoB,IAAIv7E,SAElCkF,eAACwrC,KAAQ,CAAA1wC,SAAA,CACJq2B,EACDnxB,eAACqqC,GAAY,CAAC3mC,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQ0tC,YAAa5wC,SAAA,CACzEU,cAAC8uC,GAAkB,IACnB9uC,cAAC+6E,GAA2B,YAKhD,EAGAC,GAAer5E,aAAe,CAC1B0a,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,QAInBk6D,U,wCC2DT5wE,GAAcpK,cAACozC,GAAU,IAWhB6nC,GA/GM,SAACh6E,GAOdA,EALA6F,SADJ,IACiBgF,EAKb7K,EAJA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAC1B/K,EAGAE,EAHAF,OAAMkL,EAGNhL,EAFAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EACfnI,EAAIrE,YACPwB,EAAKvB,IACTqS,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GACpBkP,EAA8B7Y,oBAAS,GAAM8Y,EAAAtb,YAAAqb,EAAA,GAAtCtJ,EAAOuJ,EAAA,GAAEsyB,EAAUtyB,EAAA,GACpB6tB,EAAWC,cACX33B,EAAUC,eACVJ,EAASC,eAETlW,GADWiE,eACChE,eAEZ0yB,EAAazhB,uBAAY,SAACtJ,IAlBZ,SAAAA,GAASA,EAAMC,iBAAkB,CAmBjDA,CAAgBD,GAChB+O,GAAQ,EAEZ,GAAG,CAACA,IAEEhP,EAAcuJ,uBAAY,WAC5ByF,GAAQ,EACZ,GAAG,CAACA,IAEE67B,EAAethC,uBAAY,SAAAtJ,GAC7BkmC,EAAS4E,gBACTH,GAAW,GAEXI,GAAO,CAAE5vC,GAAIlD,EAAOkD,GAAIuL,KAAMzO,IACzBqM,MAAK,SAAAmiC,GACFp4B,EAAO,0BAA2B,CAAE+N,YAAa,CAAEjN,YAAa,IACpE,IACCi7B,OAAM,SAAA7uC,GACH8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,CAAE/L,KAAM,YAClG6Q,GACJ,IACCy8B,SAAQ,WACL/E,EAASgF,gBACTP,GAAW,GACX57B,GAAQ,EACZ,GACR,GAAG,CAACg8B,GAAQ9yC,EAAQiuC,EAAUyE,EAAY57B,IAE1C,IAAK9W,EAAQ,OAAO,KAEpB,IAAMoX,IAAapX,EAAOkD,IAAMlD,EAAOmxC,WAAa1J,MAAMC,QAAQ1nC,EAAOmxC,YAAcnxC,EAAOmxC,UAAUvpC,OAAS,GAC3GsrC,EAAiBtxC,GAASzB,EAAUyB,EAAO,CAAEnB,EAAGmB,IACtD,OACI6B,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC8f,KAAMre,wBAAA,CAEH0H,QAAS0qB,EACT1zB,MAAOyX,EAAU,UAAY,UAC7B,aAAYq8B,EACZ97B,SAAUA,GAAYP,EACtBjV,MAAOsxC,GACHnwC,GAAI,IAAAxE,SAEP6K,KAEL3F,eAAC4a,KAAM,CACHxW,KAAMA,EACNY,QAASX,EACT,kBAAgB,eAChB,mBAAiB,iBAAgBvJ,SAAA,CAEjCU,cAACqf,KAAW,CAACpb,GAAG,eAAc3E,SACzB4B,EAAU,0BAA2B,CAAEiB,KAAMpB,EAAOoB,SAEzDqC,eAACkb,KAAa,CAAApgB,SAAA,CACVU,cAAC2f,KAAiB,CAAC1b,GAAG,iBAAgB3E,SACjC4B,EAAU,4BAA6B,CAAEiB,KAAMpB,EAAOoB,SAE3DnC,cAAC2f,KAAiB,CAAArgB,SACb4B,EAAU,6BAA8B,CAAEiB,KAAMpB,EAAOoB,YAGhEqC,eAACqb,KAAa,CAAAvgB,SAAA,CACVU,cAACo0C,KAAS,CACNj8B,SAAUP,EACVzO,QAASN,EAAYvJ,SAEpB4B,EAAU,mBAAoB,CAAEM,EAAG,aAExCxB,cAACo0C,KAAS,CACNj8B,SAAUP,EACVzO,QAASuqC,EACTvzC,MAAM,UACNk0C,WAAS,EAAA/0C,SACR20C,YAOzB,E,mGChHMpyC,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFiI,MAAO,OACPiD,OAAQ,KAEf,GAAG,CAAErP,KAAM,aAEC+4E,GAAWruE,gBAAK,SAAAxN,GAA8C,IAA3C0B,EAAM1B,EAAN0B,OAAQF,EAAMxB,EAANwB,OAAQF,EAAStB,EAATsB,UACtC6B,GADyD/C,YAAAJ,EAAAK,IAC/CmC,MACVs5E,EAAc95E,KAAIN,EAAQF,GAC1BsB,EAAOd,KAAIN,EAAQ,CAAC,SACpB++D,EAAcz+D,KAAIN,EAAQ,CAAC,gBACjC,IAAKo6E,EAAa,OAAO,KAEzB,IAAMC,EAAUD,EAAYhwC,MAAM,KAG5Br9B,EAAW,CAAEutE,IAFFrjD,WAAWojD,EAAQ,IAEFE,IADhBtjD,WAAWojD,EAAQ,KAIjCG,EAAa,CACbC,KAAM,GACNC,OAAQ3tE,EACR4tE,oBAAoB,GAKxB,OACIl3E,eAACm3E,KAAYl6E,wBAAA,GAAK85E,GAAU,IAAE56E,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,GAAWrB,SAAA,CACzEU,cAAC47E,KAAS,CACNC,YAAY,yEACZ1qC,IAAI,uDAERnxC,cAAC87E,KAAM,CACH73E,GAAIlD,EAAOkD,GACX6J,SAAUA,EACV3D,KAAM4xE,eAAoBz8E,SAE1BkF,eAACw3E,KAAK,CAAA18E,SAAA,CACFU,cAACC,KAAU,CAACC,QAAQ,YAAWZ,SAAE6C,IACjCnC,cAACC,KAAU,CAACC,QAAQ,QAAQE,UAAU,OAAOgY,MAAO,CAAE9J,QAAS,SAAWkd,cAAY,EAAAlsB,SAAEwgE,IACxF9/D,cAACC,KAAU,CAACC,QAAQ,UAAUC,MAAM,gBAAgBiY,MAAO,CAAE9J,QAAS,SAAUhP,SAAE67E,YAKtG,IAEAD,GAASv5E,aAAe,CACpBC,UAAU,GAKCs5E,ICxDTr5E,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFiI,MAAOxM,EAAMG,QAAQ,KAE5B,IAuBc+5E,GArBK,SAACh7E,GACjB,IAAMuB,EAAUX,KAEhB,OACI2C,eAACoqB,KAAgBntB,wBAAA,GACTR,GAAK,IACTN,UAAW6B,EAAQ8D,KACnBlG,UAAU,MAAKd,SAAA,CAEfU,cAACyE,KAAS,CAAC5D,OAAO,SAClBb,cAACyE,KAAS,CAAC5D,OAAO,gBAClBb,cAACkvB,KAAc,CAACruB,OAAO,cAAcwrB,UAAU,UAAU1pB,MAAM,wCAAwCqrB,MAAM,EAAM1uB,SAC/GU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACk1C,KAAa,CAACr0C,OAAO,UAGlC,ECpBMq7E,GAAwB,SAAH78E,GAAgD,IAA1CyH,EAAQzH,EAARyH,SAAU0I,EAAInQ,EAAJmQ,KAAMia,EAAOpqB,EAAPoqB,QAAS5N,EAASxc,EAATwc,UACtD,OACIrX,eAACuX,KAAU,CAAAzc,SAAA,CACPU,cAACi2C,GAAc,CAACnvC,SAAUA,EAAU/F,OAAQyO,EAAM5O,SAAS,eAC3DZ,cAACi7E,GAAY,CAACn0E,SAAUA,EAAU/F,OAAQyO,IACzCqM,GAAa7b,cAACowC,GAAW,CAACtpC,SAAUA,EAAU/F,OAAQyO,IACtDia,GAAWzpB,cAACwL,KAAU,CAAC1E,SAAUA,EAAU/F,OAAQyO,MAGhE,EA0Ce2sE,GAxCe,SAACl7E,GAE3B,OACIuD,eAACuwC,GAAItzC,wBAAA,GACGR,GAAK,IACT6oB,QAAS9pB,cAACk8E,GAAqB,IAC/BnyD,MAAO/pB,cAACo8E,GAAe,IACvBp3E,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IAAU3B,SAAA,CAEnDkF,eAACoqB,KAAgB,CAAAtvB,SAAA,CACbU,cAACqsC,GAAW,CAACxrC,OAAO,OAAOwrB,UAAU,YAAY2B,MAAM,EAAM1uB,SACzDU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAACw5D,KAAS,CAAC34D,OAAO,OAAO44D,UAAQ,IACjCz5D,cAAC05D,KAAmB,CAAC74D,OAAO,qBAAqBwrB,UAAU,YAAY1pB,MAAM,8CAA6CrD,SACtHU,cAAC25D,KAAe,CAAC9uD,UAAU,EAAMvL,SAC7BU,cAACgH,KAAS,CAACnG,OAAO,aAG1Bb,cAACqsC,GAAW,CAACxrC,OAAO,mBAAmBwrB,UAAU,YAAY1pB,MAAM,+CAA+CqrB,KAAK,OAAM1uB,SACzHU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAACs1B,KAAgB,CAACz0B,OAAO,aAAawrB,UAAU,YAAY1pB,MAAM,yCAAyCqrB,KAAK,OAAM1uB,SAClHU,cAACgH,KAAS,CAACnG,OAAO,WAEtBb,cAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAO/sB,SAC/CU,cAAC6G,KAAS,CAAChG,OAAO,cAG1Bb,cAAC4uB,KAAgB,CAACjsB,MAAM,4CAA2CrD,SAC/DU,cAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAQ2B,KAAK,OAAOooB,KAAM,GAAG92C,SACrEU,cAACgH,KAAS,CAACnG,OAAO,gBAKtC,E,UCnDeuc,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,mnBAGpD,E,uXCkLMlT,GAAcpK,cAACq8E,GAAa,IAE5Bx6E,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNkqB,OAAQ,CACJne,SAAU,YAEdwuE,SAAU,CACNjuD,YAAatsB,EAAMG,QAAQ,IAE/BiI,KAAM,CACFM,SAAU,IAEjB,GACD,CAAEtI,KAAM,0BAGCuvD,GAA0B,SAAHryD,GAExBA,EAARyH,SACYzH,EAAZ0gB,aACwB1gB,EAAxBsyD,yBACOtyD,EAAPif,QACMjf,EAANuyD,OACQvyD,EAAR+e,SACM/e,EAAN0B,OACQ1B,EAARuX,SACQvX,EAARuB,SACMvB,EAANq3C,OACar3C,EAAbu5C,cACQv5C,EAAR4X,SACO,OAAAxX,YAAAJ,EAAAoS,GACA,EAqBI8qE,GA3Na,SAACt7E,GACzB,IACIN,EAkBAM,EAlBAN,UAEA2d,GAgBArd,EAjBAuB,QAiBAvB,EAhBAqd,SAAOxS,EAgBP7K,EAfA0B,aAAK,IAAAmJ,EAAG,4BAA2BA,EACnCqM,EAcAlX,EAdAkX,SACAvB,EAaA3V,EAbA2V,SACA8/B,EAYAz1C,EAZAy1C,OACAkC,EAWA33C,EAXA23C,cAAav1C,EAWbpC,EAVAf,eAAO,IAAAmD,EAAG,YAAWA,EAAA4I,EAUrBhL,EATAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EAClB9C,EAQAlI,EARAkI,QACAwoD,EAOA1wD,EAPA0wD,yBACAC,EAMA3wD,EANA2wD,OACA96C,EAKA7V,EALA6V,UACAC,EAIA9V,EAJA8V,UACA6L,EAGA3hB,EAHA2hB,UACA7hB,EAEAE,EAFAF,OACG+C,EAAIrE,YACPwB,EAAKvB,IACTqS,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GACdxP,EAAUX,GAAUZ,GACpBkW,EAASC,eACTlW,EAAYC,cACZq7E,EAAcC,eACpBC,EAAqDC,aAAe17E,GAA5D+1C,EAAY0lC,EAAZ1lC,aAAcD,EAAY2lC,EAAZ3lC,aAAcE,EAAYylC,EAAZzlC,aAE9BpjB,EAAazhB,uBAAY,WACvBkM,EACAnH,EAAO,0BAA2B,CAAE1Q,KAAM,YAE1CoR,GAAQ,EAGhB,GAAG,CAACyG,EAASzG,IAEPhP,EAAcuJ,uBAAY,WAC5ByF,GAAQ,EACZ,GAAG,CAACA,IA8DEpR,EAAOmyC,EAAgB,SAAW,SAClC3E,EAAiBtxC,GAASzB,EAAUyB,EAAO,CAAEnB,EAAGmB,IACtD,OACI6B,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLkF,eAACsb,KAAMre,wBAAA,CACHd,UAAWkE,IAAWrC,EAAQypB,OAAQtrB,GACtCT,QAASA,EACTuG,KAAMA,EACN0C,QAAS0qB,EACT1zB,MAAOu2C,EAAS,UAAY,UAC5B,aAAYzC,EACZ97B,SAAUA,GACNu5C,GAAwB5tD,IAAK,IAAAxE,SAAA,CAEhCo3C,EACG12C,cAACm/B,KAAgB,CACb91B,KAAM,GACNkjD,UAAW,EACX5rD,UAAW6B,EAAQ85E,WAGvBl2E,uBAAa+D,EAAM,CACfxJ,UAAWkE,IAAWrC,EAAQ85E,SAAU95E,EAAQ2H,QAGvD8pC,MAELzvC,eAAC4a,KAAM,CACHxW,KAAMA,EACNY,QAASX,EACT,kBAAgB,wBAChB,mBAAiB,0BAAyBvJ,SAAA,CAE1CU,cAACqf,KAAW,CAACpb,GAAG,wBAAuB3E,SAClC4B,EAAU,mCAAoC,CAAEiB,KAAMpB,EAAOoB,SAElEqC,eAACkb,KAAa,CAAApgB,SAAA,CACVU,cAAC2f,KAAiB,CAAC1b,GAAG,0BAAyB3E,SAC1C4B,EAAU,qCAAsC,CAAEiB,KAAMpB,EAAOoB,SAEpEnC,cAAC2f,KAAiB,CAAArgB,SACb4B,EAAU,sCAAuC,CAAEiB,KAAMpB,EAAOoB,YAGzEqC,eAACqb,KAAa,CAAAvgB,SAAA,CACVU,cAAC8f,KAAM,CACH3H,SAAUu+B,EACVvtC,QAASN,EAAYvJ,SAEpB4B,EAAU,mBAAoB,CAAEM,EAAG,aAExCxB,cAAC8f,KAAM,CACH3H,SAAUu+B,EACVvtC,QAjHA,SAAAL,GAEM,oBAAX8oD,EAWH4qB,GAAeA,EAAYI,WAC3BJ,EAAYI,UAAUhrB,GAYtB4qB,GAAeA,EAAYI,WAE3BJ,EAAYI,YAGhB9lE,GACAkgC,EAAalgC,GAEbC,GACAggC,EAAahgC,GAEb6L,GACAq0B,EAAar0B,GAEb8zB,EAEA5tC,EAAM6X,kBAEFrC,GACAnH,EAAO,0BAA2B,CAAE1Q,KAAM,YAG1CqC,GACAA,EAAM6X,iBAEVgxC,EAAyB/6C,GACzBiB,GAAQ,IAGW,oBAAZ1O,GACPA,EAAQL,EAEhB,EAwDoB3I,MAAM,UACNk0C,WAAS,EAAA/0C,SACR20C,YAOzB,EClJe4oC,GA/ByB,SAAC57E,GACrC,IAAQL,EAA2DK,EAA3DL,SAA4Bk8E,GAA+B77E,EAAjDF,OAAiDE,EAAzCkX,UAA4BrR,EAAa7F,EAAb6F,SAChDqQ,EAASC,eACTP,EAAaQ,eACb48D,EAAe8I,eACbx+D,EAAWgiC,eAAXhiC,OACFpG,EAAW2kE,KAAsBv+D,EAAO2zB,WAAa1J,MAAMC,QAAQlqB,EAAO2zB,YAAc3zB,EAAO2zB,UAAUvpC,OAAS,GAElH09C,EAAaj0C,uBAAY,SAACmM,EAAQ3H,GAEpCq9D,EACK58C,OAAOz2B,EAAU,CAAE4O,KAAM+O,IACzBnR,MAAK,SAAA4vE,GACF,OAAOnpC,GAAO,CAAE5vC,GAAI+4E,EAAextE,KAAKvL,GAAIuL,KAAMwtE,EAAextE,OAAQpC,MAAK,SAAA6vE,GAC1E9lE,EAAO,sCAAuC,CAAE+N,YAAa,CAAEjN,YAAa,KAC5EpB,EAAWD,EAAU9P,EAAUk2E,EAAextE,KAAKvL,GAAI+4E,EAAextE,KAC1E,GACJ,IACC0jC,OAAM,SAAA7uC,GACH8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,CAAE/L,KAAM,WACtG,GAER,GAAG,CAACwtE,EAAc98D,EAAQN,EAAY/P,IAGtC,OACI9G,cAACu8E,GAAmB96E,wBAAA,GAAKR,GAAK,IAAEF,OAAQwd,EAAQpG,SAAUA,EAAUy5C,OAAQvL,IAEpF,EC3BMsyB,GAAa,CAACjC,aAAM,uCACpBl4D,GAAe,CAACC,eAAYC,aAAU,MAGtCw+D,GAA0B,SAAAj8E,GAC5B,OACIuD,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACdU,cAAC24C,KAAU,CACPC,eAAe,EACfzgC,SAAUlX,EAAMmd,SAChBxH,SAAS,SAEb5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACpJ9qB,cAAC68E,GAA+B,CAC5BjkC,eAAe,EACfzgC,SAAUlX,EAAMmd,SAChBle,QAAQ,YAIxB,EAqCei9E,GAnCiB,SAACl8E,GAAK,OAClCjB,cAACm3C,KAAM11C,wBAAA,GAAKR,GAAK,IAAA3B,SACbkF,eAACs0C,KAAU,CACPxa,QAASt+B,cAACk9E,GAAuB,IAAI59E,SAAA,CAErCU,cAAC4f,KAAS,CAAC/e,OAAO,KAAKuC,SAAUu1E,KACjC34E,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAACwH,KAAc,CAAC3G,OAAO,UAAUwrB,UAAU,YAAY1pB,MAAM,8BAA6BrD,SACtFU,cAAC2H,KAAiB,CAAC9G,OAAO,OAAOkH,gBAAiBC,SAEtDhI,cAAC84E,GAAS,CAACj4E,OAAO,OAAO+O,aAAa,cACtC5P,cAACwxB,KAAmB,CAAC3wB,OAAO,qBAAqBwrB,UAAU,YAAY1pB,MAAM,yCAAyC8L,WAAS,EAACmB,aAAc,CAAC,MAAO,SAAStQ,SAC3JU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwH,KAAc,CAAC3G,OAAO,sBAAsBwrB,UAAU,YAAY5d,WAAS,EAAC9L,MAAM,+CAA+CyM,YAAU,EAACqvC,UAAU,mBAAkBn/C,SACrKU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAExChI,cAACwxB,KAAmB,CAAC3wB,OAAO,gBAAgBwrB,UAAU,YAAY5d,WAAS,EAAC9L,MAAM,yCAAwCrD,SACtHU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ5d,WAAS,EAAC9L,MAAM,qCAAoCrD,SAC1GU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ1pB,MAAM,qCAAqCmD,OAAQ,CAAE2rB,SAAU,cAAgBhjB,WAAS,EAAAnP,SAC9IU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,cAG5C,ECnBEo1E,GAhCuB,SAACn8E,GACnC,IAAQL,EAA2DK,EAA3DL,SAAUG,EAAiDE,EAAjDF,OAAQ+F,EAAyC7F,EAAzC6F,SAAoBg2E,EAAqB77E,EAA/BkX,SAC9BhB,EAASC,eACTP,EAAaQ,eACb48D,EAAe8I,eACbx+D,EAAWgiC,eAAXhiC,OACFpG,EAAW2kE,KAAsBv+D,EAAO2zB,WAAa1J,MAAMC,QAAQlqB,EAAO2zB,YAAc3zB,EAAO2zB,UAAUvpC,OAAS,GAElH09C,EAAaj0C,uBAAY,SAACmM,EAAQ3H,GACpCq9D,EACK72B,OAAOx8C,EAAU,CAAEqD,GAAIlD,EAAOkD,GAAIuL,KAAM+O,EAAQvG,aAAcjX,IAC9DqM,MAAK,SAAA4vE,GAEF,OAAOnpC,GAAO,CAAE5vC,GAAI+4E,EAAextE,KAAKvL,GAAIuL,KAAMwtE,EAAextE,OAAQpC,MAAK,SAAA6vE,GAC1E9lE,EAAO,sCAAuC,CAAE+N,YAAa,CAAEjN,YAAa,KAC5EpB,EAAWD,EAAU9P,EAAUk2E,EAAextE,KAAKvL,GAAI+4E,EAAextE,KAC1E,GACJ,IACC0jC,OAAM,SAAA7uC,GACH8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,CAAE/L,KAAM,WACtG,GAER,GAAG,CAACwtE,EAAc98D,EAAQN,EAAY9V,EAAQ+F,IAExBqR,GAAcoG,EAAO2zB,WAAa1J,MAAMC,QAAQlqB,EAAO2zB,YAAc3zB,EAAO2zB,UAAUvpC,OAE5G,OACI3I,cAACu8E,GAAmB96E,wBAAA,GAAKR,GAAK,IAAEF,OAAQwd,EAAQpG,SAAUA,EAAUy5C,OAAQvL,IAEpF,ECrBMy0B,GAAY,CAAC,KAAM,SAAU,aAE7Bt8D,GAAe,CAACC,eAAYC,aAAU,MAEtC2+D,GAAwB,SAAHh+E,GAAgD,IAA1CmQ,EAAInQ,EAAJmQ,KAAM1I,EAAQzH,EAARyH,SAAUikB,EAAO1rB,EAAP0rB,QAASlP,EAASxc,EAATwc,UACtD,OACIrX,eAACuX,KAAU,CAAAzc,SAAA,CACNuc,GAAa7b,cAACowC,GAAW,CAACtpC,SAAUA,EAAU/F,OAAQyO,EAAMrJ,KAAM20E,KAClE/vD,GAAW/qB,cAAC+J,KAAU,CAACjD,SAAUA,EAAU/F,OAAQyO,MAGhE,EAEM8tE,GAAwB,SAAAr8E,GAC1B,OACIuD,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACdU,cAAC24C,KAAU,CAACC,eAAe,EAAMzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,SACpE5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACpJ9qB,cAACo9E,GAA6B,CAACxkC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACnI9qB,cAACw4C,GAAM,CAACt4C,QAAQ,QAChBF,cAACsW,GAAY,CAACY,aAAa,kBAGvC,EAsCeqmE,GApCe,SAACt8E,GAAK,OAChCjB,cAACw5C,GAAI/3C,wBAAA,GACGR,GAAK,IACT6oB,QAAS9pB,cAACq9E,GAAqB,IAC/Br4E,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IAAU3B,SAEnDkF,eAACs0C,KAAU,CAACxa,QAASt+B,cAACs9E,GAAqB,IAAIh+E,SAAA,CAC3CU,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAACwH,KAAc,CAAC3G,OAAO,UAAUwrB,UAAU,YAAY1pB,MAAM,8BAA6BrD,SACtFU,cAAC2H,KAAiB,CAAC9G,OAAO,OAAOkH,gBAAiBC,SAEtDhI,cAAC84E,GAAS,CAACj4E,OAAO,OAAO+O,aAAa,cACtC5P,cAACwxB,KAAmB,CAAC3wB,OAAO,qBAAqBwrB,UAAU,YAAY1pB,MAAM,yCAAyC8L,WAAS,EAAAnP,SAC3HU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwH,KAAc,CAAC3G,OAAO,sBAAsBwrB,UAAU,YAAY5d,WAAS,EAAC9L,MAAM,+CAA+CyM,YAAU,EAACqvC,UAAU,mBAAkBn/C,SACrKU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAExChI,cAACwxB,KAAmB,CAAC3wB,OAAO,gBAAgBwrB,UAAU,YAAY5d,WAAS,EAAC9L,MAAM,yCAAwCrD,SACtHU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ1pB,MAAM,qCAAqCmD,OAAQ,CAAE2rB,SAAU,cAAgBhjB,WAAS,EAAAnP,SAC9IU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ5d,WAAS,EAAC9L,MAAM,qCAAoCrD,SAC1GU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,cAG9C,EC/DLw1E,GAAiB,aAWRC,GATY,CACvBt7E,KAAMq7E,GACNrzE,KAAMuzE,GACNjtD,KAAMuqD,GACNrqD,KAAMwrD,GACN9kD,OAAQ8lD,GACRh1B,KAAMo1B,I,kFCXJI,GAAa,GACbC,GAAc,CAAC,EAiHfC,GAAe,SAACruE,GAAI,OAAwB,MAAnBA,EAAKsuE,UAAmB,EAGxCC,GAlHQ,SACnBn9E,EACAo1B,EACA3Z,EACAvW,EAEA0iE,EACAvlE,GAEA,IAAM+6E,EAAmB52E,KAAKC,UAAU,CAAE2uB,aAAY3Z,OAAMvW,WACtD+G,EAAOiF,iBAAO,CAAC,GACrBmsE,EAMIC,aACA,CAAEz3E,KAAM,UAAW7F,WAAUmX,QAAS,CAAEie,aAAY3Z,OAAMvW,SAAQ0iE,eAClEvlE,GAEA,SAACyJ,GACG,IAAMa,EAAMlM,KAAIqL,EAAM2a,MAAMinC,UAAW,CACnC1tD,EACA,OACA,iBACAo9E,EACA,QAEEpiE,EAAQva,KAAIqL,EAAM2a,MAAMinC,UAAW,CACrC1tD,EACA,OACA,iBACAo9E,EACA,UAOEG,EAAU98E,KAAIqL,EAAM2a,MAAMinC,UAAW,CACvC1tD,EACA,OACA,QAKEw9E,EAAY/8E,KAAIqL,EAAM2a,MAAMinC,UAAW,CACzC1tD,EACA,OACA,UAIEy9E,EAA0B,qBAAR9wE,EAAsB4wE,EAAU5wE,EAElDuwE,EAA8B,qBAAVliE,EAAwBwiE,EAAYxiE,EAExD0iE,EAAaj9E,KACfqL,EAAM2a,MAAMinC,UACZ,CAAC1tD,EAAU,QACXg9E,IAGJ,GACI/wE,EAAKiG,QAAQurE,WAAaA,GAC1BxxE,EAAKiG,QAAQgrE,aAAeA,GAC5BjxE,EAAKiG,QAAQwrE,aAAeA,EAC9B,CACE,IAAMrI,EAAS,CACXoI,WACAP,aACAQ,cAEJzxE,EAAKiG,QAAU,CAAEurE,WAAUP,aAAYQ,aAAYrI,SACvD,CACA,OAAOppE,EAAKiG,QAAQmjE,MACxB,IACA,kBAAM,IAAI,GACV4H,IACHU,EAAAN,EAtEGzuE,KAAQ6uE,EAAQE,EAARF,SAAUP,EAAUS,EAAVT,WAAYQ,EAAUC,EAAVD,WAC9Bj6E,EAAK45E,EAAL55E,MACAuT,EAAOqmE,EAAPrmE,QACAoT,EAAMizD,EAANjzD,OACAC,EAAOgzD,EAAPhzD,QAkFJ,MAAO,CACHzb,KAfSxJ,mBACT,iBACwB,qBAAbq4E,EACDT,GACAS,EACGh5E,KAAI,SAAApB,GAAE,OAAIq6E,EAAWr6E,EAAG,IACxBgH,QAAO,SAACC,EAAKnK,GACV,OAAKA,GACLmK,EAAInK,EAAOkD,IAAMlD,EACVmK,GAFaA,CAGxB,GAAG,CAAC,EAAE,GAClB,CAACmzE,EAAUC,IAKX/wE,IAAyB,qBAAb8wE,EAA2BV,GAAaU,EACpDziE,MAAOkiE,EACPz5E,QACAuT,UACAoT,SACAC,UAER,E,yCC5FMuzD,I,OAAc,CAAC,GAEfC,GAAc,CAChBh1E,MAAO,KACPqX,MAAO49D,MAGLC,GAAgB,CAAC,EAiLVC,GAAmB,CAC5B,OACA,UACA,OACA,QACA,SACA,mBACA,WAGEhjC,GAAc,SAACjiC,EAAOlQ,GACxB,GAAIkQ,EAAMlQ,IAAkC,kBAAjBkQ,EAAMlQ,GAC7B,IACIkQ,EAAMlQ,GAASrC,KAAKjE,MAAMwW,EAAMlQ,GACpC,CAAE,MAAOmhC,UACEjxB,EAAMlQ,EACjB,CAER,EAEao1E,GAAyB,SAAHztE,GAAoB,IAAdpG,EAAMoG,EAANpG,OAC/B2O,EAAQmlE,KACV37E,iBAAM6H,IACN,SAAC+zE,EAAGC,GAAC,OAAsC,IAAjCJ,GAAiBnrD,QAAQurD,EAAS,IAIhD,OAFApjC,GAAYjiC,EAAO,UACnBiiC,GAAYjiC,EAAO,oBACZA,CACX,EAiCaslE,GAAW,SAAHxjD,GAMd,IALHyjD,EAAiBzjD,EAAjByjD,kBACA/kB,EAAM1+B,EAAN0+B,OACArtC,EAAmB2O,EAAnB3O,oBACAzQ,EAAIof,EAAJpf,KACAwC,EAAO4c,EAAP5c,QAEMlF,EACFhM,OAAOD,KAAKwxE,GAAmBv2E,OAAS,EAClCu2E,EA3BiB,SAAC/kB,GAC5B,OACIA,GACAA,EAAOr0D,SACN6H,OAAOD,KAAKysD,EAAOr0D,QAAQ6C,OAAS,GACjB,MAAhBwxD,EAAOr5C,OACS,IAAhBq5C,EAAOn5C,MACW,MAAlBm5C,EAAOt7C,SACQ,MAAfs7C,EAAO99C,KAEnB,CAkBc8iE,CAAgBhlB,GAAO14D,YAAA,GACd04D,GACL,CAAEr0D,OAAQgnB,GAAuB,CAAC,GAahD,OAXKnT,EAAM0C,OACP1C,EAAM0C,KAAOA,EAAK5S,MAClBkQ,EAAMmH,MAAQzE,EAAKyE,OAEF,MAAjBnH,EAAMkF,UACNlF,EAAMkF,QAAUA,GAEF,MAAdlF,EAAMqH,OACNrH,EAAMqH,KAAO,GAGjBvf,wBAAA,GACOkY,GAAK,IACRqH,KAAMo+D,GAAmBzlE,EAAMqH,KAAM,GACrCnC,QAASugE,GAAmBzlE,EAAMkF,QAAS,KAEnD,EAEaugE,GAAqB,SAC9BC,EACA5vE,GAEA,IAAM6vE,EACwB,kBAAnBD,EACDE,SAASF,EAAgB,IACzBA,EAEV,OAAOG,MAAMF,GAAgB7vE,EAAe6vE,CAChD,EAEeG,GAxRO,SAAHpgF,GAMZ,IALHuB,EAAQvB,EAARuB,SACAksB,EAAmBztB,EAAnBytB,oBAAmB4yD,EAAArgF,EACnBgd,YAAI,IAAAqjE,EAAGjB,GAAWiB,EAAAC,EAAAtgF,EAClBwf,eAAO,IAAA8gE,EAAG,GAAEA,EAAAC,EAAAvgF,EACZ0mC,gBAAQ,IAAA65C,EAAG,IAAGA,EAER5wC,EAAWC,cACXvjC,EAAWC,cACXqU,EAAUC,cACVk6C,EAAS7/B,aACX,SAACulD,GAAU,OACPA,EAAWx4D,MAAMinC,UAAU1tD,GACrBi/E,EAAWx4D,MAAMinC,UAAU1tD,GAAU6vB,KAAK0pC,OAC1CwkB,EAAa,GACvBlkC,KAEEqlC,EAAahuE,mBACbiuE,EAAYC,eAGZhC,EAAmB,CACrBtyE,EAASV,OACTpK,EACAu5D,EACArtC,EACA1lB,KAAKC,UAAUgV,GACfwC,GAGEqgE,EAAoBL,GAAuBnzE,GAE3CiO,EAAQ3T,mBACV,kBACIi5E,GAAS,CACLC,oBACA/kB,SACArtC,sBACAzQ,OACAwC,WACF,GACNm/D,GAOJhoE,qBAAU,WACFrI,OAAOD,KAAKwxE,GAAmBv2E,OAAS,GACxCqmC,EAASixC,aAAiBr/E,EAAU+Y,GAE5C,GAAG,CAACjO,EAASV,SAEb,IAAMk1E,EAAe9tE,uBAAY,SAAAnB,GAIxB8uE,EAAUjtE,UAEVgtE,EAAWhtE,QAsBZgtE,EAAWhtE,QAAUqtE,aAAaL,EAAWhtE,QAAS7B,IApBtD6uE,EAAWhtE,QAAUqtE,aAAaxmE,EAAO1I,GAEzC+S,YAAW,WAEPhE,EAAQe,KAAK,CACT/V,OAAO,IAADzJ,OAAM8F,qBAAS5F,wBAAC,CAAC,EAChBq+E,EAAWhtE,SAAO,IACrBhN,OAAQsB,KAAKC,UAAUy4E,EAAWhtE,QAAQhN,QAC1C2V,iBAAkBrU,KAAKC,UACnBy4E,EAAWhtE,QAAQ2I,sBAG3B/O,MAAO,CAAEC,aAAcsE,EAAOxK,OAAS25E,QAI3CN,EAAWhtE,aAAU/H,CACzB,GAAG,IAKX,GAAGizE,GAQG39D,GANajO,uBACf,SAAClN,GAAO,OAAKg7E,EAAa,CAAEz5E,KAAM,cAAesR,QAAS7S,GAAU,GACpE84E,GAIY5rE,uBACZ,SAACiK,EAAMyE,GAAK,OACRo/D,EAAa,CACTz5E,KAAM45E,KACNtoE,QAAS,CAAEsE,OAAMyE,UACnB,GACNk9D,IAGE79D,EAAU/N,uBACZ,SAACkuE,GAAO,OAAKJ,EAAa,CAAEz5E,KAAM25E,KAAUroE,QAASuoE,GAAU,GAC/DtC,GAGE59D,EAAahO,uBACf,SAACmuE,GAAU,OACPL,EAAa,CAAEz5E,KAAM+5E,KAAczoE,QAASwoE,GAAa,GAC7DvC,GAGEtiE,EAAe/B,EAAM7T,QAAU04E,GAC/BiC,EAAwB9mE,EAAM8B,kBAAoB+iE,GAElDkC,EAAsB9iC,MAAe,SAAC93C,EAAQ2V,GAChDykE,EAAa,CACTz5E,KAAMk6E,KACN5oE,QAAS,CACLjS,OAAQ86E,aAAY96E,GACpB2V,qBAGZ,GAAGsqB,GAEG7lB,EAAa9N,uBACf,SAACtM,EAAQ2V,GAAiC,QAAP3Q,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,KAAAA,UAAA,GAEzB41E,EAAoB56E,EAAQ2V,GAC5BykE,EAAa,CACXz5E,KAAMk6E,KACN5oE,QAAS,CACLjS,OAAQ86E,aAAY96E,GACpB2V,qBAEN,GACVuiE,GAGEjxD,EAAa3a,uBAAY,SAACyuE,GAC5BX,EAAa,CACTz5E,KAAMq6E,KACN/oE,QAAS8oE,GAEjB,GAAG7C,GAEGriE,EAAavJ,uBAAY,SAACyuE,EAAYpxE,GACxCywE,EAAa,CACTz5E,KAAMs6E,KACNhpE,QAAS,CACL8oE,aACApxE,iBAGZ,GAAGuuE,GAEH,MAAO,CAAAv8E,YAAA,CAECga,iBAAkBglE,EAClB/kE,eACAsiE,oBACGrkE,GAEP,CACIumE,eACA//D,UACAC,aACAC,UACAH,aACA6M,aACApR,cAGZ,ECjMM8iE,GAAc,CAChBh1E,MAAO,KACPqX,MAAO49D,MA6MIhpD,GA1MW,SAAAz0B,GACtB02B,aAA6B,OAAQ,CAAC,YAAa12B,GAEnD,IACI6F,EAWA7F,EAXA6F,SAAQmU,EAWRha,EAVAia,gBAAQ,IAAAD,EAAGwb,KAAexb,EAC1B6R,EASA7rB,EATA6rB,oBACAjR,EAQA5a,EARA4a,UAASmlE,EAQT//E,EAPAob,YAAI,IAAA2kE,EAAGvC,GAAWuC,EAAAC,EAOlBhgF,EANA4d,eAAO,IAAAoiE,EAAG,GAAEA,EACZn7E,EAKA7E,EALA6E,OAAMk2C,EAKN/6C,EAJA8kC,gBAAQ,IAAAiW,EAAG,IAAGA,EACd/uB,EAGAhsB,EAHAgsB,iBAEAu7C,EACAvnE,EADAunE,WAEE5nE,EAAWuE,aAAmBlE,GAEpC,IAAKL,EACD,MAAM,IAAIyM,MAAM,+GAIpB,GAAIvH,GAAU4D,yBAAe5D,GACzB,MAAM,IAAIuH,MACN,yNAIR,IAAMnM,EAAYC,cACZgW,EAASC,eAEf8pE,EAAgCzB,GAAc,CAC1C7+E,WACAksB,sBACAzQ,OACAwC,UACAknB,WACA9Y,qBACFk0D,EAAAt7E,YAAAq7E,EAAA,GAPKvnE,EAAKwnE,EAAA,GAAEC,EAAcD,EAAA,GAS5BE,EAA0CC,aAAmB1gF,GAAS2gF,EAAA17E,YAAAw7E,EAAA,GAA/D5kE,EAAW8kE,EAAA,GAAEC,EAAkBD,EAAA,GAMtCE,EAQI1D,GACAn9E,EACA,CACIogB,KAAMrH,EAAMqH,KACZnC,QAASlF,EAAMkF,SAEnB,CAAEpV,MAAOkQ,EAAM0C,KAAMyE,MAAOnH,EAAMmH,OAAOrf,wBAAA,GACpCkY,EAAM7T,QAAWA,GAEtB0iE,EACA,CACIv3D,OAAQywE,KAER3qE,UAAW,SAAA1S,GAAK,OACZ8S,EACqB,kBAAV9S,EACDA,EACAA,EAAMmO,SAAW,6BACvB,CACI/L,KAAM,UACNye,YAAa,CACT1jB,EACqB,kBAAV6C,EACDA,EACAA,GAASA,EAAMmO,QACXnO,EAAMmO,aACNzH,IAGzB,IApCTwC,EAAGk0E,EAAHl0E,IACAiC,EAAIiyE,EAAJjyE,KACAoM,EAAK6lE,EAAL7lE,MACAvX,EAAKo9E,EAALp9E,MACAuT,EAAO6pE,EAAP7pE,QACAoT,EAAMy2D,EAANz2D,OACAC,EAAOw2D,EAAPx2D,QAkCE02D,EAAa/1B,KAAKg2B,KAAKhmE,EAAQjC,EAAMkF,UAAY,EA6BvD,OA3BA7I,qBAAU,WAEF2D,EAAMqH,MAAQ,IACZpJ,GAAW+B,EAAMqH,KAAO,GAAoB,IAAfzT,EAAI5E,OAGnCy4E,EAAejhE,QAAQ,IACfvI,GAAW+B,EAAMqH,KAAO2gE,GAGhCP,EAAejhE,QAAQwhE,EAE/B,GAAG,CAAC/pE,EAAS+B,EAAMqH,KAAMzT,EAAK6zE,EAAgBxlE,EAAO+lE,IAe9C,CACH76E,WACA0U,YAfgBxV,mBAChB,iBAAO,CACHyD,MAAOkQ,EAAM0C,KACbyE,MAAOnH,EAAMmH,MAChB,GACD,CAACnH,EAAM0C,KAAM1C,EAAMmH,QAWnBtR,OACAya,aARiB/oB,EAAU,eAAgB,CAC3CiB,KAFqBq8B,cAEfD,CAAiB39B,EAAU,KAQjC6a,iBAAkB9B,EAAM8B,iBACxBpX,QACA6W,WACApV,SACA4V,aAAc/B,EAAM+B,aACpBG,YACAkR,WAAYq0D,EAAer0D,WAC3Bxf,MACAyd,OAAQA,GAAUzd,EAAI5E,OAAS,EAC/BiP,UACAiG,SAAU2jE,EAAmB98E,OAC7BsoB,aAAcw0D,EAAmBK,OACjCnlE,gBAAiB8kE,EAAmBM,eACpC9gE,KAAMrH,EAAMqH,KACZnC,QAASlF,EAAMkF,QACfoM,UACArqB,WACA6b,cACAyD,WAAYkhE,EAAelhE,WAC3BC,QAASihE,EAAejhE,QACxBC,WAAYghE,EAAehhE,WAC3BC,QAAS+gE,EAAe/gE,QACxB1E,WAAYylE,EAAezlE,WAC3BC,MAAOA,EAEP4sD,aAER,E,0CC1JeprD,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,oOAGd,E,sECAaykE,GAAYl1E,gBACrB,SAAA5L,GACI,IACIN,EAOAM,EAPAN,UACA89C,EAMAx9C,EANAw9C,UACA59C,EAKAI,EALAJ,OAIGiD,GACH7C,EAJA+gF,QAIA/gF,EAHAgC,QAGAhC,EAFAoP,UACO5Q,YACPwB,EAAKvB,KACHwB,EAAYC,cACZJ,EAASurC,aAAiBrrC,GAChC,IAAKF,EACD,OAAO,KAEX,IAAMO,EAAQD,KAAIN,EAAQF,GAE1B,OAAa,MAATS,EACOm9C,EACHz+C,cAACC,KAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,aAAuBoC,IAAK,IAAAxE,SAE/Bm/C,KAEL,KAGDn9C,EAECtB,cAACiiF,GAAY,CAACC,YAAahhF,EAAU,kCAAmC,CAAEM,EAAG,SAAWrB,MAAM,UAG9FH,cAACmiF,KAAQ,CAACD,YAAahhF,EAAU,mCAAoC,CAAEM,EAAG,UAAYrB,MAAM,YAExG,IAIJ4hF,GAAU9/D,YAAc,YAExB8/D,GAAUpgF,aAAe,CACrBC,UAAU,GAICmgF,U,0CCnDAK,GAJYtgF,aAAW,SAAAC,GAAK,MAAK,CAC5CsgF,WAAY,CAAE33D,QAAS3oB,EAAMyE,QAAQyK,OAAOqxE,iBAC/C,I,iFCMYC,GAAiB11E,gBAC1B,SAAA5L,GACI,IACIN,EAQAM,EARAN,UACA89C,EAOAx9C,EAPAw9C,UAIS+jC,GAGTvhF,EANAJ,OAMAI,EALA+gF,QAKA/gF,EAJAgC,QAIAhC,EAHAoP,UAGApP,EAFAwhF,iBAAQ,IAAAD,GAAQA,EACb1+E,EAAIrE,YACPwB,EAAKvB,IACHqB,EAASurC,aAAiBrrC,GAC1BuB,EAAU4/E,KAEhB,IAAKrhF,EAAQ,OAAO,KAEpB,IAAMO,EAAQmhF,GAAY1hF,EAAOO,MAAQP,EAAOO,MAE1C+gF,EAA+B,MAAlBthF,EAAOw2D,SAAmBx2D,EAAOw2D,QAAU,EAE9D,OAAa,MAATj2D,EACOm9C,EACHz+C,cAACC,KAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,aAAuBoC,IAAK,IAAAxE,SAE/Bm/C,KAEL,KAIJz+C,cAACC,KAAUwB,wBAAA,CACPvB,QAAQ,QACRE,UAAU,OACVO,UAAWkE,IAAWlE,EAAS6T,YAAA,GAAKhS,EAAQ6/E,WAAaA,KACrD3gF,aAAuBoC,IAAK,IAAAxE,SAE/BgC,EAAQtB,cAAC0iF,KAAS,CAACviF,MAAM,UAAaH,cAAC2iF,KAAe,CAACxiF,MAAM,eAI1E,IAIJoiF,GAAetgE,YAAc,iBAE7BsgE,GAAe5gF,aAAe,CAC1BC,UAAU,GAIC2gF,U,qBCxDAnlE,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,wKAGd,E,sECCaslE,GAAW/1E,gBACpB,SAAA5L,GACI,IACIN,EAOAM,EAPAN,UACA89C,EAMAx9C,EANAw9C,UACA59C,EAKAI,EALAJ,OAIGiD,GACH7C,EAJA+gF,QAIA/gF,EAHAgC,QAGAhC,EAFAoP,UACO5Q,YACPwB,EAAKvB,KACHwB,EAAYC,cACZJ,EAASurC,aAAiBrrC,GAChC,IAAKF,EACD,OAAO,KAEX,IAAMO,EAAQD,KAAIN,EAAQF,GAE1B,OAAa,MAATS,EACOm9C,EACHz+C,cAACC,KAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,aAAuBoC,IAAK,IAAAxE,SAE/Bm/C,KAEL,KAGDn9C,EAECtB,cAAC6iF,GAAW,CAACX,YAAahhF,EAAU,kCAAmC,CAAEM,EAAG,QAAUrB,MAAM,UAG5FH,cAAC8iF,KAAU,CAACZ,YAAahhF,EAAU,iCAAkC,CAAEM,EAAG,WAAarB,MAAM,YAEzG,IAIJyiF,GAAS3gE,YAAc,WAEvB2gE,GAASjhF,aAAe,CACpBC,UAAU,GAICghF,U,qCC9CTG,GAAe,SAAChiF,EAAM1B,GAAA,IAAIwB,EAAMxB,EAANwB,OAAM,OAAOQ,KAAIN,EAAQF,EAAO,EAE1DmiF,GAAY,SAAC/hF,GACf,IAAQF,EAAWE,EAAXF,OACR,IAAKA,EAAQ,OAAO,KACpB,IAAM0F,EAAOpF,KAAIN,EAAQ,CAAC,YAAa,SAGvC,OAFgBM,KAAIN,EAAQ,CAAC,YAAa,aAGtC,IAAK,UAAW,OAAOf,cAAC+uB,KAAWttB,wBAAA,GAAKR,GAAK,IAAE+gF,QAAQ,QAAQ/+E,QAAS5B,KAAIN,EAAQ,CAAC,YAAa,SAAU,uBAAwBkiF,SACpI,IAAK,UAAW,OAAOjjF,cAACuiF,GAAc9gF,YAAA,GAAKR,IAC3C,IAAK,WAAY,OAAOjB,cAACuiF,GAAc9gF,YAAA,CAACghF,UAAQ,GAAKxhF,IACrD,IAAK,cACL,IAAK,OAOL,IAAK,OAEL,QAAS,OAAOjB,cAACyE,KAAShD,YAAA,GAAKR,IAR/B,IAAK,WAAY,OAAOjB,cAACgvB,KAASvtB,wBAAA,GAAKR,GAAK,IAAEgC,QAAS5B,KAAIN,EAAQ,CAAC,YAAa,SAAU,yBAA0Bk0C,SACrH,IAAK,OAAQ,OAAOj1C,cAAC+hF,GAAStgF,YAAA,GAAKR,IACnC,IAAK,OAAQ,OAAOjB,cAACkjF,KAAWzhF,wBAAA,GAAKR,GAAK,IAAEkwB,QAAS9vB,KAAIN,EAAQ,CAAC,YAAa,SAAU,gBAAiB,WAAY,IAAK6G,WAAW,QAAQsI,YAAY,KAAKuuC,UAAWskC,MAC1K,IAAK,OAAQ,OAAO/iF,cAAC85E,KAAYr4E,YAAA,GAAKR,IACtC,IAAK,MAAO,OAAOjB,cAAC4iF,GAAQnhF,YAAA,GAAKR,IACjC,IAAK,SAAU,OAAOjB,cAAC+uB,KAAWttB,wBAAA,GAAKR,GAAK,IAAE+gF,QAAQ,QAAQ/+E,QAAS5B,KAAIN,EAAQ,CAAC,YAAa,SAAU,uBAAiC,QAAT0F,EAAiB08E,KAAmBF,SAEvK,IAAK,MAAO,OAAOjjF,cAACojF,KAAQ3hF,YAAA,GAAKR,IAGzC,EAEMoiF,GAAoB,SAAHjyE,GAAiC,IAA3BzQ,EAASyQ,EAATzQ,UAAcM,EAAKxB,YAAA2R,EAAA1R,IACpCqB,EAAWE,EAAXF,OACFyB,EAAU4/E,KAChB,IAAKrhF,EAAQ,OAAO,KACpB,IAAMO,EAAQP,EAAOO,MACfg2D,EAAav2D,EAAOu2D,WACpB+qB,EAAaiB,aAAOviF,EAAOw2D,UAAYx2D,EAAOw2D,QAAU,EACxDgsB,GAAmBD,aAAOhsB,IAAeA,IAAeh2D,EAE9D,OACItB,cAACwjF,KAAgB,CAACziF,OAAQA,EAAOzB,SAC7BkF,eAAA,QAAM7D,UAAWkE,IAAWlE,EAAS6T,YAAA,GAAKhS,EAAQ6/E,WAAaA,IAAc/iF,SAAA,CACzEU,cAACgjF,GAASvhF,YAAA,GAAKR,IACdsiF,GAAmB/+E,eAAA8hB,WAAA,CAAAhnB,SAAA,CAAE,IAACU,cAAA,QAAAV,SAAO,aAI9C,EAEA+jF,GAAkB1hF,aAAe,CAC7BC,UAAU,EACVY,QAAS,CAAC,GAIC6gF,U,2CCzDT38C,GAAe,CACnB+8C,YAAQ14E,EACR6M,SAAS,EACToT,QAAQ,EACR3mB,WAAO0G,GAEHjF,GAAS,CAAE49E,aAAc,KAkFhBC,GAhFY,WACzB,IAAMxsE,EAASC,eACPwsE,EAAkBC,eAAlBD,cACR7xE,EAA8B1J,mBAAS,GAAE2J,EAAAnM,YAAAkM,EAAA,GAAlCmY,EAAOlY,EAAA,GAAE8xE,EAAU9xE,EAAA,GAC1B+xE,EAAkCC,aAAgB,kBAAmB,GAAEC,EAAAp+E,YAAAk+E,EAAA,GAAhEG,EAASD,EAAA,GAAEE,EAAYF,EAAA,GACxBG,ECjBO,SAAC9iF,EAAO+iF,GACnB,IAAAtyE,EAA4C1J,mBAAS/G,GAAM0Q,EAAAnM,YAAAkM,EAAA,GAApDuyE,EAActyE,EAAA,GAAEuyE,EAAiBvyE,EAAA,GAClCwyE,EAAU1yE,iBAAOg4B,KAAKv9B,OAiB5B,OAfAyJ,qBAAU,WACR,IAAMyuE,EAAUzgE,YAAW,WACrB8lB,KAAKv9B,MAAQi4E,EAAQ1xE,SAAWuxE,IAClCE,EAAkBjjF,GAClBkjF,EAAQ1xE,QAAUg3B,KAAKv9B,MAE3B,GAAG83E,GAASv6C,KAAKv9B,MAAQi4E,EAAQ1xE,UAGjC,OAAO,WACLiR,aAAa0gE,EAEf,CACF,GAAG,CAACnjF,EAAO+iF,IAEJC,CACV,CDH0BI,CAAYx6D,EAAS,KAC9ChJ,EAA0B7Y,mBAASq+B,IAAavlB,EAAAtb,YAAAqb,EAAA,GAAzCxU,EAAKyU,EAAA,GAAEyE,EAAQzE,EAAA,GAEhBwjE,EAAiBvyE,uBAAY,WACjC+xE,EAAa,EACf,GAAG,IAEGS,EAASxyE,uBAAY,SAAC6H,GAAU,IAAD4qE,EAAAC,EAAAC,EAAAC,EAC7Bx1E,GAAW,OAAJyK,QAAI,IAAJA,GAAU,QAAN4qE,EAAJ5qE,EAAMzK,YAAI,IAAAq1E,GAAM,QAANC,EAAVD,EAAYr1E,YAAI,IAAAs1E,OAAZ,EAAJA,EAAkBt1E,OAAQ,GAGtB,mBAFI,OAAJyK,QAAI,IAAJA,GAAU,QAAN8qE,EAAJ9qE,EAAMzK,YAAI,IAAAu1E,GAAM,QAANC,EAAVD,EAAYv1E,YAAI,IAAAw1E,OAAZ,EAAJA,EAAkBC,WAAY,SAEZz1E,EAAK7G,OAAS,IAE/Cm7E,GAAW,SAAA9pE,GAAI,OAAIA,EAAO,CAAC,IAC3BmqE,GAAa,SAAAnqE,GAAI,OAAIA,EAAO,CAAC,KAG/B4L,GAAS,SAAA5L,GAEP,MAAO,CACLypE,OAFazuE,KAAQxF,EAAMwK,EAAKypE,OAAQ,MAAMpnE,MAAK,SAAC27D,EAAGC,GAAQ,OAAO,IAAInuC,KAAKmuC,EAAEiN,cAAgB,IAAIp7C,KAAKkuC,EAAEkN,aAAc,IAG1HttE,SAAS,EACToT,QAAQ,EAEZ,GAEF,GAAG,CAAC84D,EAAYK,EAAcv+D,IAExB68C,EAAUrwD,uBAAY,SAAC/N,GAC3B8S,EACmB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BACrD,WAGFoT,GAAS,SAAAu/D,GAAS,OAAA1jF,wBAAA,GACb0jF,GAAS,IACZ9gF,QACAuT,SAAS,EACToT,QAAQ,GAAK,GAGjB,GAAG,CAACpF,EAAUzO,IAERurD,EAAatwD,uBAAY,WAAQ,GAAG,IAEpCgzE,EAAY58C,MAAMC,QAAQ/7B,EAAM+2E,SAAW/2E,EAAM+2E,OAAO96E,OAAS,GAAK+D,EAAM+2E,OAAOliE,MAAK,SAAAliB,GAAS,OAAAA,EAANyhD,MAAmB,IAC9GukC,EAAW78C,MAAMC,QAAQ/7B,EAAM+2E,SAAW/2E,EAAM+2E,OAAO96E,OAAS,GAAK+D,EAAM+2E,OAAOliE,MAAK,SAAAnQ,GAAA,IAAGk0E,EAAGl0E,EAAHk0E,IAAgB,OAAAl0E,EAAXm0E,cAAkCD,CAAG,IACpIE,EAAiBJ,GAAaC,EAgBpC,OAdArvE,qBAAU,WACR,GAAK4tE,EAAL,CAEAO,EAAa,GACbv+D,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GAAUuY,GAAI,IAAEpC,SAAS,EAAMoT,QAAQ,GAAK,IAEzD,IAAM5a,EAAewyD,GAAU,CAAE98D,WAAU8+E,EAAQniB,EAASC,GAE5D,OAAO,WACL98C,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GAAUuY,GAAI,IAAEpC,SAAS,EAAOoT,QAAQ,GAAK,IAC1D5a,EAAauyD,aACf,CAV0B,CAW5B,GAAG,CAACihB,EAAegB,EAAQniB,EAASC,EAAYyhB,IAEhD1iF,wBAAA,GACKiL,GAAK,IACRwd,QAASk6D,EACTF,YACAS,iBACAS,YACAC,WACAG,kBAEJ,EE7EeC,GAPS,SAAC1kF,GAA2B,IAL9BO,EAKWT,EAAMiK,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,KAChC46E,EAAWrkF,KAAIN,EAAQF,GACrB4iF,EAAW5qE,eAAX4qE,OAER,OATkBniF,EAQgBmiF,IANzBj7C,MAAMC,QAAQnnC,IAAUA,EAAMqH,OAAS,EAMC86E,EAAO39E,QAAO,SAAAgD,GAAK,OAAIzH,KAAIyH,EAAO,cAAgB48E,CAAQ,IAA/D,EAEhD,E,yFCAM38E,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAE3C48E,GAAiB94E,gBAAK,SAAC5L,GACzB,IAAQN,EAA+BM,EAA/BN,UAAWI,EAAoBE,EAApBF,OAAW+C,EAAIrE,YAAKwB,EAAKvB,IACtCkmF,EAAgBH,GAAgB1kF,GAChC8kF,EAAsBD,EAAc9/E,QAAO,SAAAzG,GAAS,OAAAA,EAANyhD,MAAmB,IACjEglC,EAAWF,EAAcj9E,OAAS,EAClCo9E,EAAWF,EAAoBl9E,OAAS,EAE9C,OACI3I,cAACC,KAAUwB,wBAAA,CACPrB,UAAWC,KACXd,GAAI,CACA4M,SAAU,SACVnB,OAAQ3D,qBAAU,CACdvB,OAAQsB,KAAKC,UAAU,CACnBzG,SAAUG,EAAOkD,QAI7BkF,QAASJ,GACT7I,QAAQ,QACRS,UAAWA,GACPe,aAAuBoC,IAAK,IAAAxE,SAE/BwmF,EAAWC,EAAW/lF,cAACgmF,KAAuB,CAAC7lF,MAAM,UAAaH,cAACimF,KAAiB,IAAMjmF,cAACkmF,KAAqB,CAAC/lF,MAAM,eAGpI,IAEAwlF,GAAe1jE,YAAc,iBAE7B0jE,GAAehkF,aAAe,CAC1BC,UAAU,GAGC+jF,U,wGC4BAQ,GA7DI,SAAAllF,GASXA,EAPAuB,QADJ,IAEI7B,EAMAM,EANAN,UAEAI,GAIAE,EALAkI,QAKAlI,EAJAF,QAGG+C,GACH7C,EAHA6F,SAGA7F,EAFAiH,cACOzI,YACPwB,EAAKvB,KACHsvC,EAAWC,cACX/tC,EAAYC,cACZgW,EAASC,eACfrF,EAA8B1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAtC6F,EAAO5F,EAAA,GAAEyhC,EAAUzhC,EAAA,GAEpBo0E,EAAgBh0E,uBAAY,SAACtJ,GACfA,EAlBOC,kBAmBvBimC,EAAS4E,gBACTH,GAAW,GAEX4yC,aAAS,CACLpiF,GAAIi3B,aAAe,CAAEt6B,SAAUG,EAAOkD,GAAIksB,IAAK,SAC/C3gB,KAAM,CACFlO,OAAO,KAGV8L,MAAK,SAAA/N,GAAe,IAAZmQ,EAAInQ,EAAJmQ,KACGvL,EAA0CuL,EAA1CvL,GAA0BwC,GAAgB+I,EAAtCqe,QAAsCre,EAA7B82E,YAA6B92E,EAAhB/I,MAAMnF,EAAUkO,EAAVlO,MAC1BJ,EAAU,yBAA0B,CAAE+W,YAAa,IACvD,GAAA1W,OAAM0C,EAAE,OAAA1C,OAAMD,EAAMy2B,WAAU,MAAAx2B,OAAKkF,EAAI,KAEjD0Q,EAAO,yBAA0B,OAAQ,CAAEc,YAAa,GAE5D,IACCi7B,OAAM,SAAC7uC,GACJ8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,UAC9F,IACCuhC,SAAQ,WACL/E,EAASgF,gBACThwB,YAAW,WACPyvB,GAAW,EACf,GAAG,IACP,GAER,GAAG,CAAC1yC,EAAQiuC,EAAUyE,EAAYt8B,EAAQjW,IAE1C,OACIlB,cAAC8f,KAAMre,wBAAA,CACH0H,QAASi9E,EACTjuE,SAAUP,EACVjV,MAAM,iBACNhC,UAAWkE,IAAW,oBAAqBlE,IAEvCmD,GAAI,IAAAxE,SAERU,cAACumF,KAAQ,MAHL,SAMhB,E,sICuFMn8E,GAAcpK,cAACwmF,KAAY,IAE3Bj8D,GAAoB,SAAHkR,GACXA,EAAR30B,SACY20B,EAAZ/f,aACQ+f,EAAR76B,SACO,OAAAnB,YAAAg8B,EAAAhqB,GAEF,EAEM2K,GA5JM,SAACnb,GAClB,IAAAwlF,EAQIxlF,EAPAszD,kBAAU,IAAAkyB,EAAG,IAAIA,EACjBt9E,EAMAlI,EANAkI,QAAO2C,EAMP7K,EALA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAAAG,EAK1BhL,EAJAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EACRy6E,EAGVzlF,EAHAia,SACAmB,EAEApb,EAFAob,KACGvY,EAAIrE,YACPwB,EAAKvB,IAET4b,EAOIC,aAAeta,GANL0lF,EAAmBrrE,EAA7BJ,SACApV,EAAMwV,EAANxV,OACA4V,EAAYJ,EAAZI,aACAF,EAAWF,EAAXE,YAEAgtD,GADKltD,EAALM,MACUN,EAAVktD,YAEEttD,EAAWwrE,GAAkBC,EAC7B/lF,EAAWuE,aAAmBlE,GAC9BgzE,EAAe8I,eACf77E,EAAYC,cACZgW,EAASC,eAEfrF,EAAgC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GAEtB6hB,EAAazhB,uBAAY,SAACtJ,GAC5BN,EAAYM,EAAMM,cACtB,IAEMP,EAAcuJ,uBAAY,WAC5B5J,EAAY,KAChB,IAEMo+E,EAAmBx0E,uBAAY,SAAAtJ,GACjCD,IACAorE,EACK1Y,QAAQ36D,EAAU,CACfyb,KAAMb,GAAea,EACrBvW,OAAQA,EAAMrE,wBAAA,GACHia,GAAiB5V,GACtB4V,EACNsa,WAAY,CAAEhV,KAAM,EAAGnC,QAAS01C,GAChCiU,eAEHp7D,MACG,SAAA/N,GAAA,IAAGmQ,EAAInQ,EAAJmQ,KAAI,OACH0L,EAAS2rE,cACT3rE,EAAS2rE,aACLr3E,EACAs3E,aAAoB7S,GACpBA,EACArzE,EACH,IAERsyC,OAAM,SAAA7uC,GACH+nD,QAAQ/nD,MAAMA,GACd8S,EAAO,6BAA8B,CAAE1Q,KAAM,WACjD,IACmB,oBAAZ0C,GACPA,EAAQL,EAEhB,GACI,CACI0S,EACAy4D,EACAnuE,EACA4V,EACA64C,EACAp9C,EACAhO,EACAvI,EACAyb,IAIF0qE,EAAmB30E,uBAAY,SAAAtJ,GACjCD,IACAorE,EACK1Y,QAAQ36D,EAAU,CACfyb,KAAMb,GAAea,EACrBvW,OAAQA,EAAMrE,wBAAA,GACHia,GAAiB5V,GACtB4V,EACNsa,WAAY,CAAEhV,KAAM,EAAGnC,QAAS01C,GAChCiU,eAEHp7D,MACG,SAAAgE,GAAA,IAAG5B,EAAI4B,EAAJ5B,KAAI,OACH0L,EAAS8rE,cACT9rE,EAAS8rE,aACLx3E,EACAs3E,aAAoB7S,GACpBA,EACArzE,EACH,IAERsyC,OAAM,SAAA7uC,GACH+nD,QAAQ/nD,MAAMA,GACd8S,EAAO,6BAA8B,CAAE1Q,KAAM,WACjD,IACmB,oBAAZ0C,GACPA,EAAQL,EAEhB,GACI,CACI0S,EACAy4D,EACAnuE,EACA4V,EACA64C,EACAp9C,EACAhO,EACAvI,EACAyb,IAKR,OACI7X,eAAA,OAAAlF,SAAA,CACIU,cAAC8f,KAAMre,wBAAA,CACH,gBAAc,cACd,gBAAc,OACd0H,QAAS0qB,EACTlxB,MAAOA,GACH4nB,GAAkBzmB,IAAK,IAAAxE,SAE1B6K,KAEL3F,eAAC+E,KAAI,CACDtF,GAAG,cACHsE,SAAUA,EACV2rB,aAAW,EACXtrB,KAAM7C,QAAQwC,GACdiB,QAASX,EAAYvJ,SAAA,CAErBU,cAAC+E,KAAQ,CAACoE,QAASy9E,EAAiBtnF,SAAG4B,EAAU,2BACjDlB,cAAC+E,KAAQ,CAACoE,QAAS49E,EAAiBznF,SAAG4B,EAAU,gCAKjE,E,uEC1DkBY,YACd,CACImlF,SAAU,CAGNh/D,WAAY,EACZmD,cAAe,GAEnB87D,SAAU,CACN,uBAAwB,CACpBx8D,QAAS,EACTy8D,WAAY,YAGpBC,eAAgB,CACZ18D,QAAS,EACTy8D,WAAY,SACZt/C,OAAQ,cAGhB,CAAE1lC,KAAM,2BCxGML,aAAW,SAAAC,GAAK,MAAK,CACnCmkB,KAAM,CACF3f,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,OAEjD,GACG,CAAE3pB,KAAM,0B,yCCiCGklF,GAhDoB,SAACzmF,GAAiC,IAAvBgP,EAAY9E,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GACnDY,EAAWC,cACXqU,EAAUC,cACVk6C,EAASh3D,iBAAMuI,EAASV,QAC9B+4E,EAAsCC,aAAgB,GAADziF,OAAIX,EAAQ,iBAAiBgP,EAAanC,MAAM,EAAG,KAAIw2E,EAAAp+E,YAAAk+E,EAAA,GAArGnlE,EAAWqlE,EAAA,GAAE1jE,EAAc0jE,EAAA,GAC5BqD,EAA2BlgF,KAAKC,UAAUuX,GAoChD,OAlCA5I,qBAAU,WACN,IAAiBuxE,EAAgBptB,EAAzBj1D,QACFA,EAAUqiF,EAAcngF,KAAKjE,MAAMokF,GAAeA,EACpDriF,IAAY4K,KAAQ5K,EAAS0Z,IAC7B2B,EAAerb,EAEvB,GAAG,IAEH8Q,qBAAU,WACNgK,EAAQe,KAAK,CACT/V,OAAO,IAADzJ,OAAM8F,qBAAS5F,wBAAC,CAAC,EAChB04D,GAAM,IACTj1D,QAASkC,KAAKC,UAAUuX,QAGpC,GAAG,CAAC0oE,IAmBG,CAAC1oE,EAAa2B,EACzB,E,gCCtCM1e,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCklF,SAAU,CACNh5E,QAAS,EACTogB,YAAa,EACbvD,YAAa,EACb7C,WAAY,EACZmD,cAAe,GAEnBzoB,MAAO,CACHqlB,SAAU,EACVqG,YAAa,GAEjB+4D,eAAgB,CACZv/C,OAAQ,YACR,UAAW,CACP1nC,MAAO4B,EAAMyE,QAAQyK,OAAO6vC,SAGvC,GAAG,CAAE3+C,KAAM,0BAkDGqlF,GAhD4B59E,sBAAW,SAAC3I,EAAO4I,GAC1D,IACIhC,EAGA5G,EAHA4G,OACA4/E,EAEAxmF,EAFAwmF,QACAt+E,EACAlI,EADAkI,QAEE3G,EAAUX,KACVX,EAAYC,cACZumF,EAAet1E,uBAAY,SAACtJ,GAC9BA,EAAMC,kBACNI,EAAQtB,EAAO5D,GACnB,GAAG,CAACkF,EAAStB,IAEb,OACIrD,eAAC8nD,KAAQ,CACLziD,IAAKA,EACLikD,OAAK,EACL7hC,QAAM,EACN9iB,QAASu+E,EACTvvE,SAAUtQ,EAAOyH,SACjBnN,KAAM0F,EAAO5D,GAAG3E,SAAA,CAEhBU,cAAC2nF,KAAQ,CACLC,eAAa,EACbzmD,WAAY,CAAE,kBAAmBt5B,EAAO5D,IACxCwjF,QAASA,EACTtnF,MAAM,UACNQ,UAAW6B,EAAQykF,WAEvBjnF,cAAA,QAAMW,UAAW6B,EAAQG,MAAMrD,SAC1B4B,EAASuZ,WAAC,EAADrP,aACHy8E,aAA6B,CAC5BllF,MAAOkF,EAAOlF,MACd/B,SAAUiH,EAAOjH,SACjBC,OAAQgH,EAAOhH,aAI1B4mF,GAAYznF,cAAC+d,KAAuB,CAAAze,SACjCU,cAAC8nF,KAAiB,CAACnnF,UAAWkE,IAAW,cAAerC,EAAQ4kF,gBAAiBjnF,MAAM,WAAWsK,SAAS,cAI3H,I,+ECnDM5I,GAAYC,YAAW,CACzBwE,KAAM,CAAEgI,QAAS,gBACjBwd,MAAO,CACHmU,SAAU,SACV3xB,QAAS,OACTuZ,cAAe,UAEnB4I,KAAM,CACFs3D,QAAS,EACTC,UAAW,oBACXC,wBAAyB,QACzBC,UAAW,SAGf,CAAE/lF,KAAM,kBA4KNooB,GAAoB,SAAHkR,KACnBhgB,iBAAuBggB,EACvB/f,aAAmB+f,EACnB9f,WACO,OAAAlc,YAAAg8B,EAAAhqB,GACA,EAII02E,GAlLoB,SAAClnF,GAChC,IACIiE,EAGAjE,EAHAiE,QACAvE,EAEAM,EAFAN,UACGmD,EAAIrE,YACPwB,EAAKvB,IAEHwB,EAAYC,cAClB4Q,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GACdzJ,EAAWuJ,mBACXtP,EAAUX,GAAUZ,GAC1BigB,EAAoC7Y,mBAAS,IAAG8Y,EAAAtb,YAAAqb,EAAA,GAAzCknE,EAAUjnE,EAAA,GAAEknE,EAAalnE,EAAA,GAChCmnE,EAAuCC,aAAW,YAAa,CAAEvnE,KAAM,EAAGnC,QAAS,KAAO,CAAEpV,MAAO,OAAQqX,MAAO,OAAS,CAAEuoB,EAAG++C,IAAaI,EAAAF,EAArI94E,YAAI,IAAAg5E,EAAG,CAAC,EAACA,EAAAC,EAAAH,EAAE/6E,WAAG,IAAAk7E,EAAG,GAAEA,EAAE7sE,EAAK0sE,EAAL1sE,MAC7B8sE,EAAsCrB,GAA2B,iBAAgBsB,EAAA9iF,YAAA6iF,EAAA,GAA1E9pE,EAAW+pE,EAAA,GAAEpoE,EAAcooE,EAAA,GAC5BC,EAAiB1jF,EAAQG,KAAI,SAAAoE,GAC/B,MAAO,CACHxF,GAAIwF,EAAMxI,MAAMJ,OAChBD,SAAU,QACVC,OAAQ4I,EAAMxI,MAAMJ,OACpB8B,MAAO8G,EAAMxI,MAAM0B,MACnB2M,SAAU7F,EAAMxI,MAAMqO,SAE9B,IACMu5E,EAAgB,CAClB,CAAE5kF,GAAI,OAAQrD,SAAU,QAASC,OAAQ,OAAQyO,UAAU,GAC3D,CAAErL,GAAI,cAAerD,SAAU,QAASC,OAAQ,eAChD,CAAEoD,GAAI,OAAQrD,SAAU,QAASC,OAAQ,QACzC,CAAEoD,GAAI,aAAcrD,SAAU,QAASC,OAAQ,cAC/C,CAAEoD,GAAI,SAAUrD,SAAU,QAASC,OAAQ,WAEzCioF,EAAoBv7E,EAAIlI,KAAI,SAAApB,GAAO,IAAD8kF,EAC9B3tD,EAAY5rB,EAAKvL,GACvB,MAAO,CACHA,GAAIm3B,EAAUn3B,GACdrD,SAAU,YACVC,OAAQu6B,EAAUn3B,GAClBtB,MAAqB,QAAdomF,EAAA3tD,EAAU4tD,YAAI,IAAAD,GAAdA,EAAgB5mF,KAAI,GAAAZ,OAAM65B,EAAUj5B,KAAI,MAAAZ,OAAK65B,EAAU4tD,KAAK7mF,MAASi5B,EAAUj5B,KAE9F,IACMgvB,EAAU83D,KAAO,GAAD1nF,OAAA6J,aAAKw9E,GAAmBC,EAAaz9E,aAAK09E,IAAoB,MAC9EI,EAAa/3D,EAAQ9rB,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,IACvCkzE,EAAa1xE,KAAM0rB,EAAS,MAE5Bg4D,EADmB3gD,MAAM1X,KAAK,IAAI8S,IAAI,GAADriC,OAAA6J,aAAKwT,GAAWxT,aAAK89E,MACzB7jF,KAAI,SAAApB,GAAE,OAAIkzE,EAAWlzE,EAAG,IAQzD6hC,EAAwBC,MALT,SAACj9B,GAClB,IAAMxH,EAAQwH,EAAMwB,OAAOhJ,MAAMo6D,cACjC2sB,EAAc/mF,EAClB,GAEqD,KAE/Cof,EAActO,uBAAY,SAAAtJ,GAC5BA,EAAM6X,iBACN9I,GAAQ,GACRtP,EAASuK,QAAUhK,EAAMM,aAC7B,GAAG,CAACb,EAAUsP,IAERhP,EAAcuJ,uBAAY,WAC5ByF,GAAQ,EACZ,GAAG,CAACA,IAEE6vE,EAAet1E,uBAAY,SAACg3E,GAE9B7oE,GAAe,SAAApB,GAKX,OAJgBA,EAAS2U,SAASs1D,GAE5BjqE,EAASrZ,QAAO,SAAAm1B,GAAI,OAAIA,IAASmuD,CAAU,IAC3CjqE,EAAS5d,OAAO,CAAC6nF,GAE3B,GAEJ,GAAG,CAAC7oE,IAEE8oE,EAAaj3E,uBAAY,SAAAhB,GAAmC,IAAhC6P,EAAY7P,EAAZ6P,aAAcqoE,EAAUl4E,EAAVk4E,WACxCroE,IAAiBqoE,GACjB/oE,GAAe,SAAApB,GAEX,OAD0BoqE,aAAmBpqE,EAAU8B,EAAcqoE,EAEzE,GAGR,GAAG,CAAC/oE,IAaJ,OACI/b,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,IAChC4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAE3BU,cAAC8f,KAAM,CACHnf,UAAU,aACVgC,MAAM,2BACN,gBAAc,OACdwG,QAASuX,EAAYphB,SAErBU,cAACwpF,KAAc,MAEnBhlF,eAACilF,KAAO,CACJ7gF,KAAMA,EACNL,SAAUA,EAASuK,QACnBtJ,QAASX,EACT4Y,mBAAoB,KACpByS,aAAa,EACbw1D,WAAY,CACRlnF,QAAS,CACL8D,KAAM9D,EAAQspB,QAEpBxsB,SAAA,CAEFU,cAAC2uB,KAAW,CAAArvB,SACRU,cAACyE,KAAS,CACNgK,WAAS,EACTw3B,aAAW,EACXljC,SAAU+iC,EACVI,YAAahlC,EAAU,oBACvBhB,QAAQ,SACRmJ,KAAK,QACLi5B,WAAY,CACRM,aACI5iC,cAAC6iC,KAAc,CAAC/0B,SAAS,MAAKxO,SAC1BU,cAACmmC,KAAU,CAAChmC,MAAM,oBAMtCqE,eAACmlF,KAAQ,CACL,gBAAc,OACdC,UAvDU,SAAC9gF,GACL,QAAdA,EAAMvD,MACNuD,EAAM6X,iBAEF9X,GACAA,EAAYC,EAAO,cAG/B,EAgDgBnI,UAAWkE,IAAWrC,EAAQiuB,MAAMnxB,SAAA,CAEpCU,cAAC6pF,aAAS,CAACC,mBAAmB,eAAeC,SAAS,IAAIC,OAAQX,EAAW/pF,SACxE6pF,EAAc9jF,KAAI,SAAAwC,GACf,IAAKA,EAAQ,OAAO,KACpB,IAAM4/E,EAAU7oE,EAAYkV,SAASjsB,EAAO5D,IAE5C,OACIjE,cAACiqF,aAAS,CAAA3qF,SACNU,cAACwnF,GAAkC,CAC/B3/E,OAAQA,EACR4/E,QAASA,EACTt+E,QAASu+E,KAJD7/E,EAAO5D,GAQ/B,MAEJjE,cAACssD,KAAQ,CAACwB,OAAK,EAAAxuD,SACXU,cAACC,KAAU,CAACC,QAAQ,UAAUC,MAAM,gBAAeb,SAAA,GAAAiC,OAAK4nF,EAAcxgF,OAAM,kBAAApH,OAAOqa,EAAQitE,EAAclgF,qBAOjI,E,qDCpMMuhF,GAAuB,SAACjpF,GAC1B,IAAQN,EAAuDM,EAAvDN,UAAW0a,EAA4Cpa,EAA5Coa,QAASkZ,EAAmCtzB,EAAnCszB,MAAOrvB,EAA4BjE,EAA5BiE,QAAmBpB,GAAS7C,EAAnBuzB,MAAc/0B,YAAKwB,EAAKvB,KACpE4b,EASIC,aAAeta,GARfia,EAAQI,EAARJ,SACAM,EAAWF,EAAXE,YACAC,EAAgBH,EAAhBG,iBACAC,EAAYJ,EAAZI,aAEAe,GADQnB,EAARxU,SACWwU,EAAXmB,aACAd,EAAUL,EAAVK,WACAC,EAAKN,EAALM,MAEEhb,EAAWuE,aAAmBrB,GACdgY,aAAsBhY,GAApC+X,UAIR,OAAO7V,mBACH,kBACIxB,eAACuX,KAAUta,wBAAA,CAACd,UAAWA,GAAeqb,aAAsBlY,IAAK,IAAAxE,SAAA,CAC5D+b,GACGjV,uBAAaiV,EAAS,CAClBza,WACA+a,aACAF,mBACAC,eACAO,QAAS,WAIjBjc,cAACmoF,GAA0B,CAACjjF,QAASA,IACrClF,cAACmc,KAAY,CAACjX,QAASA,IAGvBlF,cAAC4yB,GAAqB,KACR,IAAb1X,GACGlb,cAACmqF,GAAyB,CACtBhyE,SAAoB,IAAVyD,EACVhb,SAAS,gBACTyb,KAAMb,EACNE,aAAcA,OAIb,GAEjB,CAAC9a,EAAU6a,EAAkBC,EAAce,EAAapB,EAASkZ,EAAOrvB,EAAS0W,GAEzF,EAsBAsuE,GAAqBvoF,aAAe,CAChC8a,YAAa,GACbC,gBAAiB,kBAAM,IAAI,GAIhBwtE,I,MAAAA,M,iICkCT9/E,GAAcpK,cAACwmF,KAAY,IAE3Bj8D,GAAoB,SAAHkR,GACXA,EAAR30B,SACY20B,EAAZ/f,aACQ+f,EAAR76B,SACW66B,EAAXhf,YACO,OAAAhd,YAAAg8B,EAAAhqB,GAEF,EAEMmgB,GArHU,SAAC3wB,GAUlBA,EARAszD,WADJ,IAEIprD,EAOAlI,EAPAkI,QAAO2C,EAOP7K,EANA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAAAG,EAM1BhL,EALAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EACRy6E,EAIVzlF,EAJAia,SAGGpX,GACH7C,EAHAob,KAGApb,EAFAN,UACOlB,YACPwB,EAAKvB,KAET4b,EAIIC,aAAeta,GAHL0lF,EAAmBrrE,EAA7BJ,SACAuB,EAAWnB,EAAXmB,YACA+rD,EAAUltD,EAAVktD,WAEEttD,EAAWwrE,GAAkBC,EAC7B/lF,EAAWuE,aAAmBlE,GAC9BgzE,EAAe8I,eACf77E,EAAYC,cACZgW,EAASC,eAEfrF,EAAgC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GAEtB6hB,EAAazhB,uBAAY,SAACtJ,GAC5BN,EAAYM,EAAMM,cACtB,IAEMP,EAAcuJ,uBAAY,WAC5B5J,EAAY,KAChB,IAEMo+E,EAAmBx0E,uBAAY,SAAAtJ,GACjCD,IACAorE,EACKlY,QAAQn7D,EAAU,CAAE2M,IAAKkP,EAAa+rD,eACtCp7D,MACG,SAAA/N,GAAA,IAAGmQ,EAAInQ,EAAJmQ,KAAI,OACH0L,EAAS2rE,cACT3rE,EAAS2rE,aACLr3E,EACAs3E,aAAoB7S,GACpBA,EACArzE,EACH,IAERsyC,OAAM,SAAA7uC,GACH+nD,QAAQ/nD,MAAMA,GACd8S,EAAO,6BAA8B,CAAE1Q,KAAM,WACjD,IACmB,oBAAZ0C,GACPA,EAAQL,EAEhB,GAAG,CAACmrE,EAAc/4D,EAAU/D,EAAQhO,EAASvI,EAAU6b,IAEjDsqE,EAAmB30E,uBAAY,SAAAtJ,GACjCD,IACAorE,EACKlY,QAAQn7D,EAAU,CAAE2M,IAAKkP,EAAa+rD,eACtCp7D,MACG,SAAAgE,GAAA,IAAG5B,EAAI4B,EAAJ5B,KAAI,OACH0L,EAAS8rE,cACT9rE,EAAS8rE,aACLx3E,EACAs3E,aAAoB7S,GACpBA,EACArzE,EACH,IAERsyC,OAAM,SAAA7uC,GACH+nD,QAAQ/nD,MAAMA,GACd8S,EAAO,6BAA8B,CAAE1Q,KAAM,WACjD,IACmB,oBAAZ0C,GACPA,EAAQL,EAEhB,GAAG,CAACmrE,EAAc/4D,EAAU/D,EAAQhO,EAASvI,EAAU6b,IAGvD,OACIjY,eAAA,QAAAlF,SAAA,CACIU,cAAC8f,KAAMre,wBAAA,CACH,gBAAc,mBACd,gBAAc,OACd0H,QAAS0qB,EACTlxB,MAAOA,GACH4nB,GAAkBzmB,IAAK,IAAAxE,SAE1B6K,KAEL3F,eAAC+E,KAAI,CACDtF,GAAG,mBACHsE,SAAUA,EACV2rB,aAAW,EACXtrB,KAAM7C,QAAQwC,GACdiB,QAASX,EAAYvJ,SAAA,CAErBU,cAAC+E,KAAQ,CAACoE,QAASy9E,EAAiBtnF,SAAG4B,EAAU,2BACjDlB,cAAC+E,KAAQ,CAACoE,QAAS49E,EAAiBznF,SAAG4B,EAAU,gCAKjE,E,WChHMkpF,GAAsBxtE,aAAGC,QAAAC,aAAA,0fAwChButE,GAnBO,SAACv3C,GACnB,IAAQvlC,EAAculC,EAAdvlC,IAAKiC,EAASsjC,EAATtjC,KAGb,OAAOujC,KAAcz5B,QAAQ8wE,GAAqB,CAC9CpoF,MAAO,CACH8D,OAAQ,CACJwkF,MAAO/8E,GAEXjM,MAAOkO,EAAKlO,SAEjB8L,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,MAExB,IAAG8F,MAAMC,KACb,ECrCao3C,GAAqB3tE,aAAGC,QAAAC,aAAA,uNAUjCH,M,mEC2EW6tE,GA/EQ,SAAAvpF,GAQfA,EANA6F,SAMA7F,EALAuB,QAFJ,IAGI7B,EAIAM,EAJAN,UAEA8b,GAEAxb,EAHAya,aAGAza,EAFAwb,aACG3Y,EAAIrE,YACPwB,EAAKvB,IAEHyX,EAASC,eACTlW,EAAYC,cACZspF,EAAcC,eACd17C,EAAWC,cACjBl9B,EAA8B1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAA7B0hC,GAAFzhC,EAAA,GAAYA,EAAA,IAEpBpR,EAAWuE,aAAmBlE,GAC9BmlF,EAAgBh0E,uBAAY,SAACtJ,GACfA,EApBOC,kBAqBvBimC,EAAS4E,gBACTH,GAAW,GAEXk3C,GAAkB,CACdp9E,IAAKkP,EAAYpX,KAAI,SAAApB,GAAE,OAAIi3B,aAAe,CAAEt6B,SAAUqD,EAAIksB,IAAK,QAAS,IACxE3gB,KAAM,CACFlO,MAAO,KAGV8L,MAAK,SAAA/N,GAAe,IAAZmQ,EAAInQ,EAAJmQ,KAEL2H,EAAO,yBAA0B,OAAQ,CAAEc,YAAazI,EAAK7G,SAC7D,IAAM3D,EAAQ9D,EAAU,yBAA0B,CAAE+W,YAAa,KDxBlE,SAAC66B,GACd,IAEM5Q,EAFW4Q,EAATtjC,KAEWnK,IAAImtC,IAEhBO,KAAcz5B,QAAQixE,GAAoB,CAC/CvoF,MAAO,CACLkgC,WAGD90B,KAAI,eAAA/N,EAAAka,aAAAC,eAAAC,MAAC,SAAAC,EAAO61B,GAAQ,IAAAyD,EAAAC,EAAA/Q,EAAA,OAAA1oB,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACuB,OAApCioB,EAAgB,OAARqN,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,MAAKnoB,EAAAM,OAAA,SAElC,CACL7K,KAAM0yB,EAAM78B,IAAI+nC,MACjB,wBAAArzB,EAAAO,OAAA,GAAAZ,EAAA,KACF,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EANI,IAMFooC,MAAMC,KACZ,CCSey3C,CAAiB,CACbp7E,KAAMA,EAAKnK,KAAI,SAAA8qB,GACX,IAAQlsB,EAA0CksB,EAA1ClsB,GAAI4pB,EAAsCsC,EAAtCtC,QAASy4D,EAA6Bn2D,EAA7Bm2D,YAAa7/E,EAAgB0pB,EAAhB1pB,KAAMnF,EAAU6uB,EAAV7uB,MAClCitB,EAAI,GAAAhtB,OAAM0C,EAAE,OAAA1C,OAAMD,EAAMy2B,WAAU,MAAAx2B,OAAKkF,EAAI,KAEjD,MAAO,CACH7F,SAAUitB,EACVsC,IAAKm2D,EACL7/E,KAAM,OACNq6C,QAAQ,EACRtuC,QAAS,CAAExN,QAAOupB,QAClBg3D,aAAa,EACbsF,SAAU,EAGlB,MAGJJ,EAAY7pF,EAChB,IACCsyC,OAAM,SAAC7uC,GACJ8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,UAC9F,IACCuhC,SAAQ,WACL/E,EAASgF,gBACThwB,YAAW,WACPyvB,GAAW,EACf,GAAG,IACP,GAER,GAAG,CAACh3B,EAAauyB,EAAUyE,EAAYt8B,EAAQjW,IAE/C,OACIlB,cAAC8f,KAAMre,wBAAA,CACH0H,QAASi9E,EAETzjF,MAAM,iBACNhC,UAAWkE,IAAW,oBAAqBlE,IAEvCmD,GAAI,IAAAxE,SAERU,cAACumF,KAAQ,MAHL,SAMhB,EC5EeuE,GATkB,SAAA7pF,GAC7B,OACIuD,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIU,cAAC+qF,GAA6BtpF,wBAAA,GAAKR,GAAK,IAAEL,SAAS,mBACnDZ,cAACwqF,GAAc/oF,YAAA,GAAKR,MAGhC,ECAM4rC,GAAuB,SAAC3K,EAAOR,GAAa,OAAKQ,EAAMp8B,QAAO,SAAAm1B,GAAI,OAAKyG,EAAcngB,MAAK,SAAAurB,GAAY,OAAIA,EAAa7oC,KAAOg3B,EAAKh3B,EAAE,GAAC,GAAE,EACxI8oC,GAAoB,SAAA9R,GAAI,SAAA15B,OAAO05B,EAAK94B,KAAI,EAoC/B6oF,GAlCa,SAAC/pF,GAAK,OAC9BuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACbU,cAAC2sC,GAAW,CAAC9rC,OAAO,IAAIyO,UAAQ,IAChCtP,cAAC4sC,GAAgB,CAAC/rC,OAAO,WAAW8B,MAAM,kCAAkC8M,cAAc,IAC1FzP,cAACwH,KAAc,CAAC3G,OAAO,UAAUwrB,UAAU,YAAY1pB,MAAM,8BAA6BrD,SACtFU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAExChI,cAACqgC,GACG,CACAkB,iBAAe,EACf1gC,OAAO,UACP8B,MAAM,6CACN49B,iBAAkBsM,GAClBzM,oBAAqB,IACrBx4B,WAAYmlC,GAAkBztC,SAE9BU,cAACitC,KAAmB,CAACrsC,SAAS,cAElCZ,cAACwH,KAAc,CAAC3G,OAAO,gBAAgBwrB,UAAU,aAAa1pB,MAAM,oCAAmCrD,SACnGU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAExChI,cAACwxB,KAAmB,CAAC3wB,OAAO,eAAeuO,YAAY,EAAOid,UAAU,QAAQvmB,OAAQ,CAAE2rB,SAAU,SAAW9uB,MAAM,sCAAqCrD,SACtJU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,kBAAkBuO,YAAY,EAAOid,UAAU,QAAQvmB,OAAQ,CAAE2rB,SAAU,SAAW9uB,MAAM,yCAAwCrD,SAC5JU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACuH,KAAqB,CAAC1G,OAAO,cAAc8B,MAAM,mCAAmC0pB,UAAU,UAAUgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,SAClJ9gB,cAACsC,KAAY,CAACzB,OAAO,mBAAmB8B,MAAM,qCAAqCkB,aAAW,IAC9F7D,cAACsC,KAAY,CAACzB,OAAO,iBAAiB8B,MAAM,mCAAmCkB,aAAW,IAC1F7D,cAAC4sC,GAAgB,CAAC/rC,OAAO,UAAU8B,MAAM,mBAAmB8M,cAAc,OACrE,E,qFC7BEw7E,GAZqB,SAAH75E,GAA2D,IAFzE/R,EAEoBC,EAAQ8R,EAAR9R,SAAUyB,EAAMqQ,EAANrQ,OAAQF,EAAMuQ,EAANvQ,OAAQu6B,EAAShqB,EAATgqB,UAAcn6B,EAAKxB,YAAA2R,EAAAK,IAE1EjC,EAAOnO,KAAIN,EAAQF,GAEzB,OAAQuF,uBAAa9G,EAAQmC,wBAAA,KANdpC,EAOM4B,GAPAqO,SAAqBjQ,EAAX6rF,YAAmB7rF,EAANgH,OAAgB5G,YAAAJ,EAAAK,MAOjC,IACvBqB,OAAQyO,EAAI/N,wBAAA,GAAQ+N,GAAI,IAAE4rB,cAAc5rB,IAEhD,ECWailB,GAAc,CACvB,CAAElvB,IAAK,KAAMmvB,OAAQ,6BACrB,CAAEnvB,IAAK,OAAQmvB,OAAQ,+BACvB,CAAEnvB,IAAK,cAAemvB,OAAQ,sCAC9B,CAAEnvB,IAAK,YAAamvB,OAAQ,CAAC,8BAA+B,oCAC5D,CAAEnvB,IAAK,UAAWmvB,OAAQ,CAAC,8BAA+B,kCAC1D,CAAEnvB,IAAK,kBAAmBmvB,OAAQ,CAAC,4CAA6C,qCAChF,CAAEnvB,IAAK,gBAAiBmvB,OAAQ,CAAC,4CAA6C,mCAC9E,CAAEnvB,IAAK,YAAamvB,OAAQ,mCAAoCjyB,OAAQoyB,MACxE,CAAEtvB,IAAK,YAAamvB,OAAQ,mCAAoCjyB,OAAQoyB,MACxE,CAAEtvB,IAAK,OAAQmvB,OAAQ,6BAAUjyB,OAAQqyB,aAAc,QAAS,QAG9Dq2D,GAA0B,SAAA1kF,GAC5B,OAAQA,GACJ,IAAK,KACL,IAAK,SACL,IAAK,WAEL,IAAK,MACL,IAAK,SACL,IAAK,QAEL,IAAK,OACL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,MACL,IAAK,KACL,IAAK,OACL,IAAK,QACL,IAAK,OACL,QAAS,OAdT,IAAK,UAAW,OAAOkuB,KAIvB,IAAK,WAAY,OAAOE,KAYhC,EAeMu2D,GAAsB,CAAC,OAAQ,cAAe,OAAQ,aAAc,UAEpEhsD,GAAa,GAgFbisD,GAAoB,SAACpqF,GACvB,IAAQL,EAAaK,EAAbL,SACF4B,EAAUwyB,eAChB0zD,EAAsBrB,GAA2BzmF,EAAUwqF,IAApDxsE,EAAwE/Y,YAAA6iF,EAAA,GAA7D,GAClB4C,EAA4C1sE,EAAY3T,QAAO,SAACC,EAAK7E,GAOjE,OANsB+kF,GAAoBt3D,SAASztB,GAE/C6E,EAAIqgF,aAAaxqE,KAAK1a,GAEtB6E,EAAIsgF,kBAAkBzqE,KAAK1a,GAExB6E,CAEX,GAAG,CAAEqgF,aAAc,GAAIC,kBAAmB,KATlCD,EAAYD,EAAZC,aAWF/iB,EArEY,SAACgjB,GACnB,IAAMC,EAA0BD,EAAkBnvE,OAClDisE,EAAgCC,aAAW,YAAa,CAAEvnE,KAAM,EAAGnC,QAAS4sE,EAAwB9iF,QAAU,CAAEc,MAAO,OAAQqX,MAAO,OAAS,CAAEvT,IAAKk+E,GAA2B,CAAEh3E,QAASg3E,EAAwB9iF,OAAS,IAAI6/E,EAAAF,EAAzN94E,YAAI,IAAAg5E,EAAG,CAAC,EAACA,EAAAC,EAAAH,EAAE/6E,WAAG,IAAAk7E,EAAG,GAAEA,EAC3B12E,EAAoC1J,mBAAS+2B,IAAWptB,EAAAnM,YAAAkM,EAAA,GAAjDy2D,EAAUx2D,EAAA,GAAE05E,EAAa15E,EAAA,GAC1B25E,EAAyBvkF,KAAKC,UAAUkG,GAO9C,OANAyI,qBAAU,WACFzI,EAAI5E,OAAS,GACb+iF,EAAcn+E,EAAIlI,KAAI,SAAApB,GAAE,OAAIuL,EAAKvL,EAAG,IAE5C,GAAG,CAAC0nF,IAEGnjB,CACX,CAyDuBojB,CAXoBN,EAAjBE,mBAYhBK,EA9Fa,SAACN,EAAc/oF,GAClC,IAAM2E,EAAkBC,KAAKC,UAAUkkF,GACjCO,EAAc,CAChB9rF,cAACo1B,KAAiB,CAACv0B,OAAO,OAAOiG,SAAS,QAAQwI,UAAQ,EAACpH,cAAe1F,EAAQ6yB,iBAClFr1B,cAACyE,KAAS,CAAC5D,OAAO,cAAcqH,cAAe1F,EAAQ6yB,iBACvDr1B,cAACqsC,GAAW,CAACxrC,OAAO,OAAOwrB,UAAU,YAAYyjB,OAAO,YAAY9hB,MAAM,EAAO9lB,cAAe1F,EAAQ6yB,eAAe/1B,SACnHU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAACqsC,GAAW,CAACxrC,OAAO,aAAawrB,UAAU,aAAa4I,UAAU,EAAO/sB,cAAe1F,EAAQ6yB,eAAe/1B,SAC3GU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAAC2lF,GAAc,CAAC9kF,OAAO,SAASo0B,UAAU,EAAO/sB,cAAe1F,EAAQytC,cAU5E,OAPwBjqC,mBAAQ,WAC5B,OAAO8lF,EAAYhmF,QAAO,SAAA2D,GACtB,IAAMpD,EAASoD,EAAMlE,KAAOkE,EAAMxI,MAAMJ,OACxC,OAAO0qF,EAAaz3D,SAASztB,EACjC,GACJ,GAAG,CAACc,GAGR,CAwEwB4kF,CAAeR,EAAc/oF,GAC3CwpF,EAzDiB,SAACxjB,EAAYhmE,GAkBpC,OAhB6BwD,mBAAQ,WACjC,OAAOwiE,EAAWnjE,KAAI,SAAA+1B,GAAc,IAAD2tD,EAC/B,OACI/oF,cAACirF,GAA2B,CAExBpqF,OAAQu6B,EAAUn3B,GAClBtB,MAAqB,QAAdomF,EAAA3tD,EAAU4tD,YAAI,IAAAD,GAAdA,EAAgB5mF,KAAI,GAAAZ,OAAM65B,EAAUj5B,KAAI,MAAAZ,OAAK65B,EAAU4tD,KAAK7mF,MAASi5B,EAAUj5B,KACtF2tC,OAAM,QAAAvuC,OAAU65B,EAAUn3B,IAC1Bm3B,UAAWA,EAAU97B,SAErBU,cAACgjF,GAAS,CAACniF,OAAO,WANbu6B,EAAUn3B,GAS3B,GACJ,GAAG,CAACukE,GAGR,CAsC4ByjB,CAAmBzjB,GACrC0jB,EApCgB,SAACttE,EAAautE,GACpC,IAAMC,EAAoB3mF,KAAM0mF,GAAgB,SAAA1iF,GAAK,OAAIA,EAAMlE,KAAOkE,EAAMxI,MAAMJ,MAAM,IAClF+E,EAAkBgZ,EAAY9Y,QAAO,SAAA7B,GAAE,OAAI8B,QAAQqmF,EAAkBnoF,GAAI,IAY/E,OAV2B+B,mBAAQ,WAO/B,OANe4Y,EAAY3T,QAAO,SAACC,EAAK7E,GACpC,IAAMgmF,EAAgBD,EAAkB/lF,GAExC,OAAOgmF,EAAa,GAAA9qF,OAAA6J,aAAOF,GAAG,CAAEmhF,IAAiBnhF,CACrD,GAAG,GAGP,GAAG,CAACtF,GAGR,CAqB2B0mF,CAAkB1tE,EAAY,GAADrd,OAAA6J,aAAMygF,GAAWzgF,aAAK4gF,KACpE9wE,EAAWua,aAAY,GAADl0B,OAAKkzB,GAAWrpB,aAlHf,SAACo9D,GAS9B,OARcA,EAAWnjE,KAAI,SAAAhG,GAA+B,IAA5B4E,EAAE5E,EAAF4E,GAAI9B,EAAI9C,EAAJ8C,KAAM6mF,EAAI3pF,EAAJ2pF,KAAMviF,EAAIpH,EAAJoH,KAC5C,MAAO,CACHlB,IAAI,GAADhE,OAAK0C,EAAE,UACVywB,OAAY,OAAJs0D,QAAI,IAAJA,KAAM7mF,KAAI,GAAAZ,OAAMY,EAAI,MAAAZ,OAAKynF,EAAK7mF,MAASA,EAC/CM,OAAQ0oF,GAAwB1kF,GAExC,GAGJ,CAwGqD8lF,CAAyB/jB,MACpEtjE,EAAUgnF,EACVj8D,EAAkByF,GAAiBj0B,wBAAC,CAAC,EAAIR,GAAK,IAAEia,WAAUhW,UAASsjE,gBAEzE,OACIxoE,cAAC41B,KAAmB,CAACt0B,MAAO2uB,EAAgB3wB,SACxCU,cAAC61B,KAAQp0B,oCAAA,GACDR,GACAgvB,GAAe,IACnBnG,QAAS9pB,cAACkqF,GAAoB,CAAChlF,QAASA,IACxC4wB,kBAAmB91B,cAAC8qF,GAAwB,IAC5CzvE,QAASrb,cAACgrF,GAAmB,IAC7BpqF,SAAS,QACTkG,SAAS,SAAQxH,SAEjBkF,eAACwrC,KAAQ,CAAA1wC,SAAA,CACLU,cAAC2tB,GAA8B,CAACzlB,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQytC,cACjFi8C,EACDlsF,cAACmmF,GAAU,CAACj+E,cAAerD,IAAWrC,EAAQutC,aAAcvtC,EAAQytC,cACpEjwC,cAACmwC,KAAsB,CAACjoC,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQytC,qBAM9F,EAEAo7C,GAAkB1pF,aAAe,CAC7B0a,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,QAanBuqE,UCpNTmB,GAAoB,gBASXC,GAPe,CAC1BtqF,KAAMqqF,GACNriF,KAAMuiF,KACNj8D,KAAM46D,ICEKjuE,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,mhBAGpD,E,2BCDMtC,GAAc,SAAC/Z,GACjB,IAAQN,EAAgCM,EAAhCN,UAAW0a,EAAqBpa,EAArBoa,QAAYvX,EAAIrE,YAAKwB,EAAKvB,IAC7C4b,EASIC,aAAeta,GARfia,EAAQI,EAARJ,SACAM,EAAWF,EAAXE,YACAC,EAAgBH,EAAhBG,iBACAC,EAAYJ,EAAZI,aAEAe,GADQnB,EAARxU,SACWwU,EAAXmB,aACAd,EAAUL,EAAVK,WACAC,EAAKN,EAALM,MAEEhb,EAAWuE,aAAmBrB,GAEpC,OAAOkC,mBACH,kBACIxB,eAACuX,KAAUta,wBAAA,CAACd,UAAWA,GAAeqb,aAAsBlY,IAAK,IAAAxE,SAAA,CAC5D+b,GACGjV,uBAAaiV,EAAS,CAClBza,WACA+a,aACAF,mBACAC,eACAO,QAAS,WAGjBjc,cAACmc,KAAY,IACbnc,cAAC4yB,GAAqB,KACR,IAAb1X,GACGlb,cAACoc,KAAY,CACTjE,SAAoB,IAAVyD,EACVhb,SAAUA,EACVyb,KAAMb,EACNE,aAAcA,OAGb,GAEjB,CAAC9a,EAAU6a,EAAkBC,EAAce,EAAapB,EAASO,GAEzE,EAGAZ,GAAYrZ,aAAe,CACvB8a,YAAa,GACbC,gBAAiB,kBAAM,IAAI,GAIhB1B,UC5CT6xB,GAAuB,SAAC3K,EAAOR,GAAa,OAAKQ,EAAMp8B,QAAO,SAAAm1B,GAAI,OAAKyG,EAAcngB,MAAK,SAAAurB,GAAY,OAAIA,EAAa7oC,KAAOg3B,EAAKh3B,EAAE,GAAC,GAAE,EACxI8oC,GAAoB,SAAA9R,GAAI,SAAA15B,OAAO05B,EAAK94B,KAAI,EAoC/B6oF,GAlCa,SAAC/pF,GAAK,OAC9BuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACbU,cAAC2sC,GAAW,CAAC9rC,OAAO,IAAIyO,UAAQ,IAChCtP,cAAC4sC,GAAgB,CAAC/rC,OAAO,WAAW8B,MAAM,kCAAkC8M,cAAc,IAC1FzP,cAACwH,KAAc,CAAC3G,OAAO,UAAUwrB,UAAU,YAAY1pB,MAAM,8BAA6BrD,SACtFU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAExChI,cAACqgC,GACG,CACAkB,iBAAe,EACf1gC,OAAO,UACP8B,MAAM,6CACN49B,iBAAkBsM,GAClBzM,oBAAqB,IACrBx4B,WAAYmlC,GAAkBztC,SAE9BU,cAACitC,KAAmB,CAACrsC,SAAS,cAElCZ,cAACwH,KAAc,CAAC3G,OAAO,gBAAgBwrB,UAAU,aAAa1pB,MAAM,oCAAmCrD,SACnGU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAExChI,cAACwxB,KAAmB,CAAC3wB,OAAO,eAAeuO,YAAY,EAAOid,UAAU,QAAQvmB,OAAQ,CAAE2rB,SAAU,SAAW9uB,MAAM,sCAAqCrD,SACtJU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,kBAAkBuO,YAAY,EAAOid,UAAU,QAAQvmB,OAAQ,CAAE2rB,SAAU,SAAW9uB,MAAM,yCAAwCrD,SAC5JU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACuH,KAAqB,CAAC1G,OAAO,cAAc8B,MAAM,mCAAmC0pB,UAAU,UAAUgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,SAClJ9gB,cAACsC,KAAY,CAACzB,OAAO,mBAAmB8B,MAAM,qCAAqCkB,aAAW,IAC9F7D,cAACsC,KAAY,CAACzB,OAAO,iBAAiB8B,MAAM,mCAAmCkB,aAAW,IAC1F7D,cAAC4sC,GAAgB,CAAC/rC,OAAO,UAAU8B,MAAM,mBAAmB8M,cAAc,OACrE,E,6hBCxBAk9E,GAAU,SAAC1rF,GACpB,IACI6oB,EAYA7oB,EAZA6oB,QACAE,EAWA/oB,EAXA+oB,YACA3O,EAUApa,EAVAoa,QAEA/b,EAQA2B,EARA3B,SACAqB,EAOAM,EAPAN,UAEW4qB,GAKXtqB,EANAuB,QAMAvB,EALAb,WAAS6a,EAKTha,EAJAia,gBAAQ,IAAAD,EAAGwb,KAAexb,EAC1BjW,EAGA/D,EAHA+D,MAEGlB,GACH7C,EAFAy1B,MACOj3B,YACPwB,EAAKvB,KACHuwB,EAAkB0G,aAAuB11B,GACzC21B,EAAcrb,aAAeta,GAC7BuB,EAAUX,GAAUZ,GAEtBgpB,EAMA2M,EANA3M,aAMA2M,EALAhb,MAKAgb,EAJA5L,OAIA4L,EAHAhf,QAGAgf,EAFAlb,aAEAkb,EADAna,YAEYoa,eAKhB,OACIryB,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,WAAYrC,EAAQ8D,KAAM3F,IAC5C4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAE3BU,cAAC+2B,KAAK,CAAC/xB,MAAOA,EAAOilB,aAAcA,IAClCD,GACC3O,GAAWyO,IACT9pB,cAAC+rB,KAAWtqB,wBAAA,CACR4Z,QAASA,GACL4U,GAAe,IACnBnG,QAASA,EACT5O,SAAUA,KAGlBlb,cAACurB,EAAO,CAAC5qB,UAAW6B,EAAQ6C,IAAI/F,SAC3BA,OAIjB,EAIAqtF,GAAQhrF,aAAe,CACnBmoB,QAAS9pB,cAACg3B,KAAc,IACxBhN,YAAahqB,cAACi3B,KAAsB,IACpCz0B,QAAS,CAAC,EACVpC,UAAWysB,KACXmJ,WAAYh2B,cAAC8uD,KAAiB,IAC9Bp4B,MAAO12B,cAACk3B,KAAK,KAGjB,IAAMr1B,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNuE,KAAM,CAEF0hB,SAAU,EACV1Z,QAAS,OACTuZ,cAAe,UAEnBxiB,IAAK,CACDiyB,KAAM,WACN2I,SAAU,UAGdnW,QAAS,CACL3H,OAAQ,EACR7T,QAAS,OACTkU,eAAgB,WAChBoI,SAAU,QAEd6M,UAAW,CAAExpB,QAAS,IACzB,GACD,CAAE9L,KAAM,UAKNooB,GAAoB,SAAHlrB,KACnByH,SAAezH,EACfmc,YAAkBnc,EAClBmQ,KAAWnQ,EACX4qB,aAAmB5qB,EACnBoc,iBAAuBpc,EACvBytB,oBAA0BztB,EAC1Bqc,aAAmBrc,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACd0rB,QAAc1rB,EACd0tB,WAAiB1tB,EACjB2gB,QAAc3gB,EACdkO,IAAUlO,EACVuY,QAAcvY,EACd2rB,OAAa3rB,EACbqM,SAAerM,EACfG,MAAYH,EACZwe,SAAexe,EACf2tB,aAAmB3tB,EACnBqd,gBAAsBrd,EACtB4D,QAAc5D,EACd2hB,KAAW3hB,EACXkqB,YAAkBlqB,EAClBwf,QAAcxf,EACd4rB,QAAc5rB,EACduB,SAAevB,EACfod,YAAkBpd,EAClB6gB,WAAiB7gB,EACjB8gB,QAAc9gB,EACd+gB,WAAiB/gB,EACjBghB,QAAchhB,EACdsc,WAAiBtc,EACjB4tB,iBAAuB5tB,EACvBgd,KAAWhd,EACXuc,MACO,OAAAnc,YAAAJ,EAAAoS,GACA,EAEIk7E,M,+DC/ITlO,GAAc,CAChBh1E,MAAO,KACPqX,MAAO49D,MAsMIhpD,GAnMW,SAACz0B,GACvB02B,aAA6B,OAAQ,CAAC,YAAa12B,GAEnD,IACI6F,EASA7F,EATA6F,SAAQmU,EASRha,EARAia,gBAAQ,IAAAD,EAAGwb,KAAexb,EAC1B6R,EAOA7rB,EAPA6rB,oBACAjR,EAMA5a,EANA4a,UAASmlE,EAMT//E,EALAob,YAAI,IAAA2kE,EAAGvC,GAAWuC,EAAAC,EAKlBhgF,EAJA4d,eAAO,IAAAoiE,EAAG,GAAEA,EACZn7E,EAGA7E,EAHA6E,OAAMk2C,EAGN/6C,EAFA8kC,gBAAQ,IAAAiW,EAAG,IAAGA,EACd/uB,EACAhsB,EADAgsB,iBAEErsB,EAAWuE,aAAmBlE,GAEpC,IAAKL,EACD,MAAM,IAAIyM,MAAM,+GAIpB,GAAIvH,GAAU4D,yBAAe5D,GACzB,MAAM,IAAIuH,MACN,yNAIR,IAAMnM,EAAYC,cACZgW,EAASC,eAEf8pE,EAAgCzB,aAAc,CAC1C7+E,WACAksB,sBACAzQ,OACAwC,UACAknB,WACA9Y,qBACFk0D,EAAAt7E,YAAAq7E,EAAA,GAPKvnE,EAAKwnE,EAAA,GAAEC,EAAcD,EAAA,GAS5BE,EAA0CC,aAAmB1gF,GAAS2gF,EAAA17E,YAAAw7E,EAAA,GAA/D5kE,EAAW8kE,EAAA,GAAEC,EAAkBD,EAAA,GAMtCE,EAQI1D,aACAn9E,EACA,CACIogB,KAAMrH,EAAMqH,KACZnC,QAASlF,EAAMkF,SAEnB,CAAEpV,MAAOkQ,EAAM0C,KAAMyE,MAAOnH,EAAMmH,OAClC8rE,KAAMjzE,EAAM7T,OAAQA,GACpB,CACImL,OAAQywE,KACR3qE,UAAW,SAAA1S,GAAK,OACZ8S,EACqB,kBAAV9S,EACDA,EACAA,EAAMmO,SAAW,6BACvB,CACI/L,KAAM,UACNye,YAAa,CACT1jB,EACqB,kBAAV6C,EACDA,EACAA,GAASA,EAAMmO,QACXnO,EAAMmO,aACNzH,IAGzB,IAjCTwC,EAAGk0E,EAAHl0E,IACAiC,EAAIiyE,EAAJjyE,KACAoM,EAAK6lE,EAAL7lE,MACAvX,EAAKo9E,EAALp9E,MACAuT,EAAO6pE,EAAP7pE,QACAoT,EAAMy2D,EAANz2D,OACAC,EAAOw2D,EAAPx2D,QA+BE02D,EAAa/1B,KAAKg2B,KAAKhmE,EAAQjC,EAAMkF,UAAY,EA6BvD,OA3BA7I,qBAAU,WAEF2D,EAAMqH,MAAQ,IACZpJ,GAAW+B,EAAMqH,KAAO,GAAoB,IAAfzT,EAAI5E,OAGnCy4E,EAAejhE,QAAQ,IACfvI,GAAW+B,EAAMqH,KAAO2gE,GAGhCP,EAAejhE,QAAQwhE,EAE/B,GAAG,CAAC/pE,EAAS+B,EAAMqH,KAAMzT,EAAK6zE,EAAgBxlE,EAAO+lE,IAe9C,CACH76E,WACA0U,YAfgBxV,mBAChB,iBAAO,CACHyD,MAAOkQ,EAAM0C,KACbyE,MAAOnH,EAAMmH,MAChB,GACD,CAACnH,EAAM0C,KAAM1C,EAAMmH,QAWnBtR,OACAya,aARiB/oB,EAAU,eAAgB,CAC3CiB,KAFqBq8B,cAEfD,CAAiB39B,EAAU,KAQjC6a,iBAAkB9B,EAAM8B,iBACxBpX,QACA6W,WACApV,SACA4V,aAAc/B,EAAM+B,aACpBG,YACAkR,WAAYq0D,EAAer0D,WAC3Bxf,MACAyd,OAAQA,GAAUzd,EAAI5E,OAAS,EAC/BiP,UACAiG,SAAU2jE,EAAmB98E,OAC7BsoB,aAAcw0D,EAAmBK,OACjCnlE,gBAAiB8kE,EAAmBM,eACpC9gE,KAAMrH,EAAMqH,KACZnC,QAASlF,EAAMkF,QACfoM,UACArqB,WACA6b,cACAyD,WAAYkhE,EAAelhE,WAC3BC,QAASihE,EAAejhE,QACxBC,WAAYghE,EAAehhE,WAC3BC,QAAS+gE,EAAe/gE,QACxB1E,WAAYylE,EAAezlE,WAC3BC,MAAOA,EAEf,EChJa4Y,GAAQ,CACjB,CAAEjvB,IAAK,KAAMmvB,OAAQ,6BACrB,CAAEnvB,IAAK,OAAQmvB,OAAQ,+BACvB,CAAEnvB,IAAK,cAAemvB,OAAQ,sCAC9B,CAAEnvB,IAAK,YAAamvB,OAAQ,CAAC,8BAA+B,oCAC5D,CAAEnvB,IAAK,UAAWmvB,OAAQ,CAAC,8BAA+B,kCAC1D,CAAEnvB,IAAK,kBAAmBmvB,OAAQ,CAAC,4CAA6C,qCAChF,CAAEnvB,IAAK,gBAAiBmvB,OAAQ,CAAC,4CAA6C,mCAC9E,CAAEnvB,IAAK,YAAamvB,OAAQ,mCAAoCjyB,OAAQoyB,MACxE,CAAEtvB,IAAK,YAAamvB,OAAQ,mCAAoCjyB,OAAQoyB,MACxE,CAAEtvB,IAAK,OAAQmvB,OAAQ,6BAAUjyB,OAAQqyB,aAAc,QAAS,QAG9D+3D,GAAe,SAAC5rF,GAClB,IAAMia,EAAWua,aAAYjB,IACvBvE,EAAkByF,GAAiBj0B,wBAAC,CAAC,EACpCR,GAAK,IACRia,WACApV,OAAQ,CACJ80B,KAAM,CACFkyD,IAAK,CACDC,iBAAiB,KAI7BluE,QAAS,OAGb,OACI7e,cAAC41B,KAAmB,CAACt0B,MAAO2uB,EAAgB3wB,SACxCU,cAAC2sF,GAAOlrF,oCAAA,GACAR,GACAgvB,GAAe,IACnBnG,QAAS9pB,cAACgtF,GAAe,IACzB3xE,QAASrb,cAACitF,GAAc,IAAI3tF,SAE5BU,cAACktF,KAAQ,CAAA5tF,SACLU,cAACmtF,KAAS,CAAA7tF,SACNU,cAACotF,KAAY,YAMrC,EAEAP,GAAalrF,aAAe,CACxB0a,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,QAGnB+rE,UC3DTQ,GAAe,WAQNC,GANU,CACrBnrF,KAAMkrF,GACNljF,KAAMojF,GACN98D,KAAMo8D,ICEKzvE,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,mdAGpD,E,oDCYekwE,GAVS,SAACvsF,GACrB,IAAM+nB,EAAezoB,eACrB,OACIiE,eAAC0kB,KAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,KAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,KAAkB3nB,wBAAA,GAAKunB,GAAkB/nB,MAGtD,E,qhBCDawsF,GAAa,SAACxsF,GACvB,IACI+oB,EAYA/oB,EAZA+oB,YACAqN,EAWAp2B,EAXAo2B,OACA8wB,EAUAlnD,EAVAknD,KACAx3B,EASA1vB,EATA0vB,KACAhwB,EAQAM,EARAN,UACW4qB,EAOXtqB,EAPAb,UAASstF,EAOTzsF,EANA6zC,cAAM,IAAA44C,EAAG,OAAMA,EAEf1oF,EAIA/D,EAJA+D,MACA2oF,EAGA1sF,EAHA0sF,aACAC,EAEA3sF,EAFA2sF,aACG9pF,EAAIrE,YACPwB,EAAKvB,IAETmuF,EAMIttF,eALAuG,EAAQ+mF,EAAR/mF,SACAlG,EAAQitF,EAARjtF,SACAqpB,EAAY4jE,EAAZ5jE,aACA4b,EAAYgoD,EAAZhoD,aACAwC,EAAOwlD,EAAPxlD,QAGE7lC,EAAUX,GAAUZ,GACpBipB,EAAU2M,eACV7W,EAAUC,cACVvU,EAAWC,cACXzK,EAAYC,cAIZ2sF,EADU,IAAIC,OAAO,GAADxsF,OAAIuF,EAAQ,iBACdknF,KAAKtiF,EAASS,UAEhC0P,GADeiyE,GAAWA,EAAQ,KACpBz2D,GACd5N,IAAY0+B,EACZp9B,IAAY4F,EAKZ7S,EAAe1L,uBAAY,SAACtJ,EAAOw8B,GACrC,IAAM0C,EAAS1C,EAAQ,GACjBI,EAAO2C,EAAQL,GAGrB,GAFkC,UAAdtC,EAAKj/B,KAER,CACb,IAAMonB,EAAU6X,EAAK9kC,SAASqD,GAC9B+b,EAAQe,KAAKxW,aAAazD,EAAU+mB,EAASinB,IAC7C64C,GAAgBA,EAAaroD,EACjC,CAEJ,GAAG,CAACtlB,EAASlZ,EAAUguC,EAAQzM,IAEzB4lD,EAAe77E,uBAAY,SAACtJ,GAC9B+8B,EAAa/8B,EAAMwB,OAAOhJ,MAC9B,GAAG,CAACssF,IAEJ,OACIppF,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,YAAarC,EAAQ8D,KAAM3F,IAC7C4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAG3BU,cAAA,OAAKW,UAAWkE,IAAWrC,EAAQwnB,aAAa1qB,SAAG0qB,IACnDxlB,eAAA,OAAK7D,UAAWkE,IAAWrC,EAAQ2T,MAAM7W,SAAA,CACrCkF,eAAC+mB,EAAO,CACJ5qB,UAAWkE,IAAWrC,EAAQ+V,QAAS/V,EAAQqoB,WAAWvrB,SAAA,CAGzDsuF,GAAgB5tF,cAACyE,KACd,CACA9B,MAAOzB,EAAU,oBACjB6B,SAAUkrF,EAEV71E,MAAO,CAAEgT,aAAc,IACvBlrB,QAAQ,SACRmJ,KAAK,QACLi5B,WAAY,CACRM,aACI5iC,cAAC6iC,KAAc,CAAC/0B,SAAS,MAAKxO,SAC1BU,cAACmmC,KAAU,CAAChmC,MAAM,kBAKlCH,cAAComC,KAAa,CACVzlC,UAAW6B,EAAQmjC,KACnB0yB,oBAAqBr4D,cAACkuF,KAAc,IACpC31B,kBAAmBv4D,cAACmuF,KAAgB,IACpCC,aAActwE,EACdjC,UAAWA,EACX4N,QAASA,EACTsB,QAASA,MAzBRb,GA4BTlqB,cAAC6O,KAAG,CAACN,MAAM,OAAMjP,SACbkF,eAAC6pF,IAAM,CAAA/uF,SAAA,CACFuc,GACG7b,cAAC+wC,IAAK,CACFnxC,KAAI,GAAA2B,OAAKuF,EAAQ,WACjBqJ,OAAQ,SAACm+E,GAAU,OACftuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAWi3B,EACXvwB,SAAUA,EACVlG,SAAUA,GACN0tF,GACN,IAIbvjE,GACG/qB,cAAC+wC,IAAK,CACFnxC,KAAI,GAAA2B,OAAKuF,EAAQ,aACjBqJ,OAAQ,SAACm+E,GAAU,OACftuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAWuwB,EACX7pB,SAAUA,EACVlG,SAAUA,EACVqD,GAAIuqF,mBAAmBF,EAAW9uF,MAAM26D,OAAOl2D,KAC3CqqF,GACN,IAIb7kE,GACGzpB,cAAC+wC,IAAK,CACFnxC,KAAI,GAAA2B,OAAKuF,EAAQ,QACjBqJ,OAAQ,SAACm+E,GAAU,OACftuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAW+nD,EACXrhD,SAAUA,EACVlG,SAAUA,EACVqD,GAAIuqF,mBAAmBF,EAAW9uF,MAAM26D,OAAOl2D,KAC3CqqF,GACN,IAIdtuF,cAAC+wC,IAAK,CACFnxC,KAAMkH,EACNqJ,OAAQ,kBACJnQ,cAAC+2B,KAAK,CAAC/xB,MAAOA,EAAOilB,aAAcA,GAAgB,eASnF,EAKAwjE,GAAW9rF,aAAe,CACtBvB,UAAW,MACXoC,QAAS,CAAC,EACVwnB,YAAahqB,cAACyuF,GAAsB,KAGxC,IAAM5sF,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNuE,KAAM,CACF0hB,SAAU,EACV1Z,QAAS,OACTuZ,cAAe,UAEnB1R,KAAM,CACF6R,SAAU,EACV1Z,QAAS,QAEbuc,UAAW,CACP5C,UAAW,OAEf0d,KAAM,CACF3d,SAAU,EACViY,SAAU,OACV1xB,MAAO,IACPiD,OAAQ,GAIZwY,YAAa,CACT3H,IAAKtgB,EAAMG,QAAQ,GACnB4L,SAAU,SACV0D,OAAQzP,EAAMG,QAAQ,IAE1BqW,QAAS,CACLyP,SAAU,EACV1Z,QAAS,OACTuZ,cAAe,SACfxF,IAAKtgB,EAAMG,QAAQ,IACnB4L,SAAU,SACV0D,OAAQ,sBAQR6c,YAAa,IAGjBmJ,qBAAsB,CAClBvP,WAAYlmB,EAAMG,QAAQ,IAG9B4nB,QAAS,CACL3H,OAAQ,EACR7T,QAAS,OACTkU,eAAgB,WAChBoI,SAAU,QAEd6M,UAAW,CAAExpB,QAAS,IACzB,GACD,CAAE9L,KAAM,WAINooB,GAAoB,SAACtpB,GAAK,OAAK,SAAA5B,KACjCyH,SAAezH,EACfmc,YAAkBnc,EAClBmQ,KAAWnQ,EACX4qB,aAAmB5qB,EACnBoc,iBAAuBpc,EACvBytB,oBAA0BztB,EAC1Bqc,aAAmBrc,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACd0rB,QAAc1rB,EACd0tB,WAAiB1tB,EACjB2gB,QAAc3gB,EACdkO,IAAUlO,EACVuY,QAAcvY,EACd2rB,OAAa3rB,EACbqM,SAAerM,EACfG,MAAYH,EACZwe,SAAexe,EACf2tB,aAAmB3tB,EACnBqd,gBAAsBrd,EACtB4D,QAAc5D,EACd2hB,KAAW3hB,EACXkqB,YAAkBlqB,EAClBwf,QAAcxf,EACduB,SAAevB,EACfod,YAAkBpd,EAClB6gB,WAAiB7gB,EACjB8gB,QAAc9gB,EACd+gB,WAAiB/gB,EACjBghB,QAAchhB,EACdsc,WAAiBtc,EACjB4tB,iBAAuB5tB,EACvBgd,KAAWhd,EACXuc,MACO,OAAAnc,YAAAJ,EAAAoS,GACA,CAAD,EAEKg8E,M,sBCpOAiB,GAzCoB,SAACztF,GAChC,IAAA0tF,EAA8C/oD,aAAkB3kC,GAAxD0kC,EAAIgpD,EAAJhpD,KAAMipD,EAAOD,EAAPC,QAAY3+D,EAAexwB,YAAAkvF,EAAAjvF,IAEnC22D,EAASrwD,mBAAQ,WACnB,OAAO2H,OAAO4Q,OAAOonB,GAAM16B,QAAO,SAACC,EAAKw6B,GACpC,MAAqB,UAAdA,EAAKj/B,KAAgB,GAAAlF,OAAA6J,aAClBF,GAAG,CAAE,CAAEilB,IAAK,QAASvvB,SAAU8kC,EAAK9kC,SAASqD,IAAM,CAAEksB,IAAK,MAAOvvB,SAAU8kC,EAAK9kC,SAASqD,MAC7FiH,CACV,GAAG,GACP,GAAG,CAACy6B,IAEIn2B,EAASinD,aAAmB,CAChC3wD,OAAQ,CAAEuwD,WACX,CAAE5hD,QAAS4hD,EAAO1tD,OAAS,IAFtB6G,KAuBR,OAnBAwG,qBAAU,WACN,IAAKxG,EAAM,OAAOm2B,EAClB,IAAMkpD,EAAoBr/E,EAAKvE,QAAO,SAAC6xB,EAAO3M,GAC1C,IAAQtC,EAAgCsC,EAAhCtC,QAASy4D,EAAuBn2D,EAAvBm2D,YAAahlF,EAAU6uB,EAAV7uB,MAE9B,OADAysC,KAAIjR,EAAO,CAACjP,EAASy4D,EAAY5qB,eAAgBp6D,GAC1Cw7B,CACX,GAAG,CAAC,GAEEgyD,EAAUnhF,OAAO4Q,OAAOonB,GAAM16B,QAAO,SAACC,EAAKw6B,GAC7C,IAAQzhC,EAAiByhC,EAAjBzhC,GAAIrD,EAAa8kC,EAAb9kC,SACNU,EAAgB,OAARV,QAAQ,IAARA,KAAUqD,IAAM4qF,EAAkBjuF,EAASqD,IAAGxC,wBAAA,GAAQikC,GAASmpD,EAAkBjuF,EAASqD,KAAQyhC,EAEhH,OADAqI,KAAI7iC,EAAK,CAACjH,GAAK3C,GACR4J,CACX,GAAG,CAAC,GAEJ0jF,EAAQE,EAEZ,GAAG,CAACt/E,EAAMo/E,IAEVntF,YAAA,CAASkkC,OAAMipD,WAAY3+D,EAG/B,E,qiBCxBaw9D,GAAa,SAACxsF,GACvB,IACI+oB,EAYA/oB,EAZA+oB,YACAqN,EAWAp2B,EAXAo2B,OACA8wB,EAUAlnD,EAVAknD,KACAx3B,EASA1vB,EATA0vB,KACAhwB,EAQAM,EARAN,UACW4qB,EAOXtqB,EAPAb,UAASstF,EAOTzsF,EANA6zC,cAAM,IAAA44C,EAAG,OAAMA,EAEf1oF,EAIA/D,EAJA+D,MACA2oF,EAGA1sF,EAHA0sF,aACAC,EAEA3sF,EAFA2sF,aACG9pF,EAAIrE,YACPwB,EAAKvB,IAETmuF,EAKIttF,eAJAuG,EAAQ+mF,EAAR/mF,SACAlG,EAAQitF,EAARjtF,SACAqpB,EAAY4jE,EAAZ5jE,aACA4b,EAAYgoD,EAAZhoD,aAGErjC,EAAUX,GAAUZ,GACpBipB,EAAU2M,eACV7W,EAAUC,cACVvU,EAAWC,cACXzK,EAAYC,cAIZ2sF,EADU,IAAIC,OAAO,GAADxsF,OAAIuF,EAAQ,iBACdknF,KAAKtiF,EAASS,UAEhC0P,GADeiyE,GAAWA,EAAQ,KACpBz2D,GACd5N,IAAY0+B,EACZp9B,IAAY4F,EAKZ7S,EAAe1L,uBAAY,SAACtJ,EAAOw8B,GACrCtlB,EAAQe,KAAKxW,aAAazD,EAAUw+B,EAAQ,GAAIwP,IAChD64C,GAAgBA,EAAaroD,EACjC,GAAG,CAACtlB,EAASlZ,EAAUguC,IAIjBm5C,EAAe77E,uBAAY,SAACtJ,GAC9B+8B,EAAa/8B,EAAMwB,OAAOhJ,MAC9B,GAAG,CAACssF,IAEJ,OACIppF,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,YAAarC,EAAQ8D,KAAM3F,IAC7C4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAE1B0qB,EACDxlB,eAAA,OAAK7D,UAAWkE,IAAWrC,EAAQ2T,MAAM7W,SAAA,CACrCkF,eAAC+mB,EAAO,CACJ5qB,UAAWkE,IAAWrC,EAAQ+V,QAAS/V,EAAQqoB,WAAWvrB,SAAA,CAGzDsuF,GAAgB5tF,cAACyE,KAAS,CACvBwhC,aAAW,EACXljC,SAAUkrF,EACV/nD,YAAahlC,EAAU,oBACvBkX,MAAO,CAAEgT,aAAc,IACvBlrB,QAAQ,SACRmJ,KAAK,QACLi5B,WAAY,CACRM,aACI5iC,cAAC6iC,KAAc,CAAC/0B,SAAS,MAAKxO,SAC1BU,cAACmmC,KAAU,CAAChmC,MAAM,kBAKlCH,cAAComC,KAAa,CACVzlC,UAAW6B,EAAQmjC,KACnB0yB,oBAAqBr4D,cAACkuF,KAAc,IACpC31B,kBAAmBv4D,cAACmuF,KAAgB,IACpCC,aAActwE,EACdjC,UAAWA,EACX4N,QAASA,EACTsB,QAASA,MAxBRb,GA2BTlqB,cAAC6O,KAAG,CAACN,MAAM,OAAMjP,SACbkF,eAAC6pF,IAAM,CAAA/uF,SAAA,CACFuc,GACG7b,cAAC+wC,IAAK,CACFnxC,KAAI,GAAA2B,OAAKuF,EAAQ,WACjBqJ,OAAQ,SAACm+E,GAAU,OACftuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAWi3B,EACXvwB,SAAUA,EACVlG,SAAUA,GACN0tF,GACN,IAIbvjE,GACG/qB,cAAC+wC,IAAK,CACFnxC,KAAI,GAAA2B,OAAKuF,EAAQ,aACjBqJ,OAAQ,SAACm+E,GAAU,OACftuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAWuwB,EACX7pB,SAAUA,EACVlG,SAAUA,EACVqD,GAAIuqF,mBAAmBF,EAAW9uF,MAAM26D,OAAOl2D,KAC3CqqF,GACN,IAIb7kE,GACGzpB,cAAC+wC,IAAK,CACFnxC,KAAI,GAAA2B,OAAKuF,EAAQ,QACjBqJ,OAAQ,SAACm+E,GAAU,OACftuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAW+nD,EACXrhD,SAAUA,EACVlG,SAAUA,EACVqD,GAAIuqF,mBAAmBF,EAAW9uF,MAAM26D,OAAOl2D,KAC3CqqF,GACN,IAIdtuF,cAAC+wC,IAAK,CACFnxC,KAAMkH,EACNqJ,OAAQ,kBACJnQ,cAAC+2B,KAAK,CAAC/xB,MAAOA,EAAOilB,aAAcA,GAAgB,eASnF,EAKAwjE,GAAW9rF,aAAe,CACtBvB,UAAW,MACXoC,QAAS,CAAC,EACVwnB,YAAahqB,cAACyuF,GAAsB,KAGxC,IAAM5sF,GAAYC,aACd,SAAAC,GAAK,IAAA4lB,EAAA,MAAK,CACNrhB,KAAM,CAEN,EACA6P,KAAM,CACF7H,QAAS,QAEbuc,UAAW,CACP5C,UAAW,OAEf0d,KAAM,CACF1jC,SAAU,KAEdsW,SAAOoP,EAAA,CACHwP,WAAYp1B,EAAMq1B,YAAYC,OAAO,cACrCvpB,SAAU,WACVwpB,KAAM,YAAU9iB,YAAAmT,EACf5lB,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5BqP,UAAW,SACd/iB,YAAAmT,EAAC,WACQ,WAASnT,YAAAmT,EAAC,UACX,kBAAgBnT,YAAAmT,EAAC,cACb,IAAEA,GAEnB6P,qBAAsB,CAClBvP,WAAYlmB,EAAMG,QAAQ,GAC1Bi1B,WAAYp1B,EAAMq1B,YAAYC,OAAO,eAEzCvN,QAAS,CACL3H,OAAQ,EACR7T,QAAS,OACTkU,eAAgB,WAChBoI,SAAU,QAEd6M,UAAW,CAAExpB,QAAS,IACzB,GACD,CAAE9L,KAAM,WAINooB,GAAoB,SAACtpB,GAAK,OAAK,SAAA5B,KACjCyH,SAAezH,EACfmc,YAAkBnc,EAClBmQ,KAAWnQ,EACX4qB,aAAmB5qB,EACnBoc,iBAAuBpc,EACvBytB,oBAA0BztB,EAC1Bqc,aAAmBrc,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACd0rB,QAAc1rB,EACd0tB,WAAiB1tB,EACjB2gB,QAAc3gB,EACdkO,IAAUlO,EACVuY,QAAcvY,EACd2rB,OAAa3rB,EACbqM,SAAerM,EACfG,MAAYH,EACZwe,SAAexe,EACf2tB,aAAmB3tB,EACnBqd,gBAAsBrd,EACtB4D,QAAc5D,EACd2hB,KAAW3hB,EACXkqB,YAAkBlqB,EAClBwf,QAAcxf,EACduB,SAAevB,EACfod,YAAkBpd,EAClB6gB,WAAiB7gB,EACjB8gB,QAAc9gB,EACd+gB,WAAiB/gB,EACjBghB,QAAchhB,EACdsc,WAAiBtc,EACjB4tB,iBAAuB5tB,EACvBgd,KAAWhd,EACXuc,MACO,OAAAnc,YAAAJ,EAAAoS,GACA,CAAD,E,wBCtPJ5P,GAAYC,YAAW,CACzBu5B,MAAO,CAAEl7B,MAAO6jC,KAAK,MACrB+qD,OAAQ,CAAE5uF,MAAOqkC,KAAM,OACxB,CAAEriC,KAAM,aAaI6sF,GAXE,SAAC/tF,GACd,IAAQwF,EAA8BxF,EAA9BwF,KAAM9F,EAAwBM,EAAxBN,UAAc+iB,EAAKjkB,YAAKwB,EAAKvB,IACrC8C,EAAUX,KAEhB,MACS,UADD4E,EACiBzG,cAAC+jC,KAAStiC,wBAAA,GAAKiiB,GAAK,IAAE/iB,UAAWkE,IAAWrC,EAAQ64B,MAAO16B,MAEhEX,cAACukC,KAAU9iC,wBAAA,GAAKiiB,GAAK,IAAE/iB,UAAWkE,IAAWrC,EAAQusF,OAAQpuF,KAErF,E,0BCdMkB,GAAYC,YAAW,CACzB,mBAAoB,CAChB,MAAO,CACH4oB,QAAS,MAGjBukE,MAAO,CACH9uF,MAAO85B,KAAI,MAEfi1D,MAAO,CACH/uF,MAAO85B,KAAI,KACXk1D,cAAe,SACfC,kBAAmB,KACnBC,wBAAyB,4BACzBC,wBAAyB,WACzBC,mBAAoB,YAEzB,CAAEptF,KAAM,kBAkBIqtF,GAdc,SAACvuF,GAAW,IAADw3C,EAE5B13C,EAA+BE,EAA/BF,OAAQJ,EAAuBM,EAAvBN,UACV8uF,GAD4BhwF,YAAKwB,EAAKvB,IACZ,MAAhBqB,EAAOkuF,OAAiBluF,EAAOkuF,OACzCS,EAAwB,MAAd3uF,EAAOukF,MAAgBvkF,EAAOukF,IAExC9iF,EAAUX,KAEhB,OACI7B,cAACgvF,GAAQ,CAACvoF,KAAM1F,EAAO0F,KAAM9F,UAAWkE,IAAWlE,GAAS83C,EAAA,GAAAjkC,YAAAikC,EAAKj2C,EAAQysF,MAAQQ,GAAOj7E,YAAAikC,EAAGj2C,EAAQ0sF,MAAQQ,GAAOj3C,IAAKhuC,SAAS,SAGxI,E,+CCjBMm4C,GAAuB,SAAHxxC,GAAeA,EAATzQ,UAA0B,IAAZmD,EAAIrE,YAAA2R,EAAAK,IAC9CuwC,EAA6BnD,aAAoB/6C,GACjDqmB,GADgB63B,EAARl7C,SAAgBk7C,EAANjhD,OACW+a,aAAsBhY,IAApCqmB,EAAPV,QAAgBU,EAAPY,QACjB,OAAO,IACX,EAEA63B,GAAqB+sC,UAAY,CAC7B7oF,SAAU8oF,KAAUC,OACpBlvF,UAAWivF,KAAUC,OACrBrgF,KAAMogF,KAAUE,OAChBj0E,UAAW+zE,KAAUG,KACrBtmE,QAASmmE,KAAUG,KACnBppE,aAAcipE,KAAUG,KACxBrmE,QAASkmE,KAAUG,KACnBnvF,SAAUgvF,KAAUC,QAGTjtC,U,0VC1BTotC,GAAyB,SAAC/uF,GAC5B,IACIqhD,EAMArhD,EANAqhD,QAGA3hD,GAGAM,EALA3B,SAKA2B,EAJAuB,QAIAvB,EAHAN,WACAqkD,EAEA/jD,EAFA+jD,SACGlhD,EAAIrE,YACPwB,EAAKvB,IAEH8C,EAAUX,GAAUZ,GAE1B+gD,EAQInD,aAAoB59C,GAPpB6F,EAAQk7C,EAARl7C,SACA4iB,EAAOs4B,EAAPt4B,QACA3oB,EAAMihD,EAANjhD,OACAH,EAAQohD,EAARphD,SACAspB,EAAO83B,EAAP93B,QACAtQ,EAASooC,EAATpoC,UACAmiC,EAAeiG,EAAfjG,gBAEItyB,EAAY3N,aAAsB7a,GAAlCwoB,QACR,IAAK1oB,EAAQ,OAAO,KAEpB,IAAMumD,EAAW9e,MAAMC,QAAQ1nC,EAAOwmD,QAAUxmD,EAAOwmD,MAAM5+C,OAAS,EAChE6+C,GAA2B5tC,GAAYA,EAAUvU,KAAI,SAAAoiD,GAAQ,QAAI1L,KAAiD,MAA7BA,EAAgB0L,GAA0B,IAAEC,MAAM3hD,SAE7I,OACIvB,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,iBAAkBrC,EAAQ8D,KAAM3F,IAClD4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,EAEzBsa,GAAa0oC,IACXtiD,cAACqiD,GAAoB,CACjBC,QAASA,EACTx7C,SAAUA,EACV0I,KAAMzO,EACN2oB,QAASA,EACTD,QAASA,EACT7oB,SAAUA,EACVgZ,UAAWA,EACXorC,SAAUA,IAGjBsC,GAAatnD,cAAC4mD,GAAqB,CAAC9/C,SAAUA,EAAU0I,KAAMzO,EAAQH,SAAUA,IACjFZ,cAAA,OAAKW,UAAWkE,IAAWrC,EAAQ2T,MAAM7W,SACrCkF,eAAA,OAAK7D,UAAW6B,EAAQmlD,YAAYroD,SAAA,CAChCU,cAAC8mD,GAAoC,CAACltC,UAAWA,EAAWmiC,gBAAiBA,IAC5Eh7C,GAAUymD,GACPxnD,cAAC+kD,GAAmB,CAACnkD,SAAUA,EAAUkG,SAAUA,EAAU/F,OAAQA,EAAQmpB,QAASA,EAAS86B,SAAUA,SAIrHhlD,cAACmmD,GAA6B,OAG1C,EAoBA6pC,GAAuBruF,aAAe,CAClCa,QAAS,CAAC,EACV8/C,QAAStiD,cAACiwF,GAAgC,KAG9C,IAAMpuF,GAAYC,YACd,CACIwE,KAAM,CAAC,EACP6P,KAAM,CACF7H,QAAS,QAEbq5C,YAAa,CACTrwB,KAAM,aAGd,CAAEn1B,KAAM,2BAGNooB,GAAoB,SAAHlrB,KACnByH,SAAezH,EACf4qB,aAAmB5qB,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACdsnB,aAAmBtnB,EACnB2gB,QAAc3gB,EACd4E,GAAS5E,EACT2rB,OAAa3rB,EACbuY,QAAcvY,EACdqM,SAAerM,EACfG,MAAYH,EACZ4D,QAAc5D,EACd4rB,QAAc5rB,EACdkqB,YAAkBlqB,EAClB8gD,MAAY9gD,EACZyoD,SAAezoD,EACfua,UAAgBva,EAChB08C,gBAAsB18C,EACtBq+C,mBAAyBr+C,EACzB09C,SAAe19C,EACf29C,YAAkB39C,EAClB49C,WAAiB59C,EACjBi+C,YACO,OAAA79C,YAAAJ,EAAAoS,GACA,EAGIu+E,MC/HTE,GAAqB,SAACjvF,GACxB,IAAQF,EAAuCE,EAAvCF,OAAQF,EAA+BI,EAA/BJ,OACVoD,GADyChD,EAAvBL,SAAuBK,EAAb6F,SACvBzF,KAAIN,EAAQF,IACjBovB,EAAkB4rB,GAAuB,CAC3C53C,KACArD,SAAU,YACVkG,SAAU,aACVi1C,gBAAiB,CAAEluB,QAAS9sB,EAAOkD,MAOvC,OAAKA,EAGDjE,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC3CU,cAAC89C,GAAwB,CAACx8C,MAAO2uB,EAAgB3wB,SAC7CU,cAACgwF,GAAsBvuF,oCAAA,GAAKR,GAAWgvB,GAAe,IAAE+0B,UAAQ,SAL5D,IASpB,EAEAkrC,GAAmBvuF,aAAe,CAC9Bf,SAAU,YACVkG,SAAU,cAaCopF,UCjBTruF,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNyQ,QAAS,CACLnC,UAAW,SACXqa,QAAgC,UAAvB3oB,EAAMyE,QAAQC,KAAmB,GAAM,GAChD5D,OAAQ,QACR1C,MAC2B,UAAvB4B,EAAMyE,QAAQC,KACR,UACA1E,EAAMyE,QAAQ0lB,KAAKiQ,SAEjChyB,KAAM,CACFoE,MAAO,GACPiD,OAAQ,IAEZ8sB,QAAS,CACLjuB,UAAW,SACX4X,UAAW,OAElB,GACD,CAAE9lB,KAAM,YAGG+0B,GA/CD,SAACj2B,GACX,IAAMuB,EAAUX,GAAUZ,GAE1B,OACIuD,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIkF,eAAA,OAAK7D,UAAW6B,EAAQgQ,QAAQlT,SAAA,CAC5BU,cAACinD,KAAS,CAACtmD,UAAW6B,EAAQ2H,OAC9BnK,cAACC,KAAU,CAACC,QAAQ,KAAK6+B,WAAS,EAAAz/B,SAAC,6LAGnCU,cAACC,KAAU,CAACC,QAAQ,QAAOZ,SAAC,6KAKhCU,cAAA,OAAKW,UAAW6B,EAAQ87B,QAAQh/B,SAC5BU,cAACwL,KAAU,CAAC1E,SAAS,SAAS/F,OAAQE,EAAMF,aAK5D,E,0DCtBMc,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF2hB,UAAWlmB,EAAMG,UACjBkpB,aAAcrpB,EAAMG,UACpB,gBAAiB,CACb+lB,WAAY,IAGpB1P,QAAS,CAAC,EACb,IAEK8S,GAAkB,SAAHhsB,GACTA,EAARC,SAMG,IAAD6tB,EAAAgjE,EALO7kE,EAAejsB,EAAxBmD,QACA7B,EAAStB,EAATsB,UAGGM,GAFE5B,EAALsD,MACkBtD,EAAlBe,UACQX,YAAAJ,EAAAK,KAGF8C,EAAUX,GAAU,CAAEW,QAAS8oB,IAE/B8kE,GADYjvF,cACsB,QAAfgsB,EAAGlsB,EAAMF,cAAM,IAAAosB,GAAkB,QAAlBgjE,EAAZhjE,EAAcS,wBAAgB,IAAAuiE,OAAlB,EAAZA,EAAgClsF,IAG5D,OACIjE,cAAA,OAAKW,UAAS,GAAAY,OAAKiB,EAAQ8D,KAAI,KAAA/E,OAAIZ,GAAYrB,SAC1C8wF,EACGpwF,cAACkwF,GAAkBzuF,wBAAA,GAAKR,GAAK,IAAEJ,OAAO,yBAEtCb,cAACqwF,GAA8B5uF,YAAA,GAAKR,KAcpD,EAEAoqB,GAAgB1pB,aAAe,CAC3BvB,UAAW,OAIAirB,UC9BAilE,GArBc,SAACrvF,GAE1B,OAEIjB,aADA,CACC+0C,KAAItzC,wBAAA,GACGR,GAAK,IACTL,SAAS,QACTkpB,SAAS,EACThjB,SAAS,SACT9B,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IACzCb,UAAU,MAAKd,SAEfU,cAACuwF,GAAmC,MAOhD,ECoBeC,GA3BO,SAACvvF,GACnB,IAAQ6F,EAAuB7F,EAAvB6F,SACFmpB,GADyBhvB,EAAbL,SACM8tF,GAA2B,CAC/C5nF,WACAqD,KAAMqlF,GACNjtD,UAAU,KAGd,OACIviC,cAACgmC,KAAmB,CAAC1kC,MAAO2uB,EAAgB3wB,SACxCU,cAACywF,GAAahvF,wBAAA,GACNR,GAAK,IACTkgE,MAAM,EACNrsB,OAAO,OACPnkB,KAAM2/D,GAEN/tD,UAAU,EACVqrD,cAAY,MAM5B,ECxCM8C,GAAgB,YASPC,GAPW,CACtBxuF,KAAMuuF,GACNvmF,KAAMqlF,GACN/+D,KAAM+/D,ICOKI,GARU,SAAC3vF,GAAK,OAC7BuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACfU,cAAC2sC,GAAW,CAAC9rC,OAAO,IAAIyO,UAAQ,IAChCtP,cAAC4sC,GAAgB,CAAC/rC,OAAO,UAAU8B,MAAM,mBAAmB8M,cAAc,IAC1EzP,cAACuH,KAAqB,CAAC1G,OAAO,cAAc8B,MAAM,oCAAoC0pB,UAAU,UAAUgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,YAC5I,ECGI0T,GAXD,CACV,CAAEjvB,IAAK,KAAMmvB,OAAQ,8BACrB,CAAEnvB,IAAK,OAAQmvB,OAAQ,gCACvB,CAAEnvB,IAAK,cAAemvB,OAAQ,uCAC9B,CAAEnvB,IAAK,cAAemvB,OAAQ,uCAC9B,CAAEnvB,IAAK,UAAWmvB,OAAQ,CAAC,+BAAgC,kCAC3D,CAAEnvB,IAAK,YAAamvB,OAAQ,oCAAqCjyB,OAAQoyB,KAAe1xB,MAAOgrC,IAC/F,CAAE5oC,IAAK,YAAamvB,OAAQ,oCAAqCjyB,OAAQoyB,KAAe1xB,MAAOgrC,IAC/F,CAAE5oC,IAAK,OAAQmvB,OAAQ,+BAAgCjyB,OAAQmyC,KAAezxC,MAAOmrC,K,2DCDnFuiD,GAAoB,SAAC5vF,GACvB,IACIN,EAMAM,EANAN,UAASsa,EAMTha,EALAia,gBAAQ,IAAAD,GAAQA,EAAAE,EAKhBla,EAJAma,gBAAQ,IAAAD,GAAQA,EAChBE,EAGApa,EAHAoa,QACAnW,EAEAjE,EAFAiE,QACGpB,EAAIrE,YACPwB,EAAKvB,IACT4b,EAOIC,aAAeta,GANfua,EAAWF,EAAXE,YACAC,EAAgBH,EAAhBG,iBACAC,EAAYJ,EAAZI,aACA5U,EAAQwU,EAARxU,SACA6U,EAAUL,EAAVK,WACAC,EAAKN,EAALM,MAEEhb,EAAWuE,aAAmBrB,GAC5B+X,EAAcC,aAAsBhY,GAApC+X,UAER,OAAO7V,mBAAQ,kBACXxB,eAACuX,KAAUta,wBAAA,CAACd,UAAWA,GAAeqb,aAAsBlY,IAAK,IAAAxE,SAAA,CAC5D+b,GACGjV,uBAAaiV,EAAS,CAClBza,WACA+a,aACAF,mBACAC,eACAO,QAAS,WAEjBjc,cAACkc,KAAa,CAAChX,QAASA,KACV,IAAbgW,GACGlb,cAACoc,KAAY,CACTlB,SAAUA,EACV/C,SAAoB,IAAVyD,EACVhb,SAAUA,EACVyb,KAAMb,EACNE,aAAcA,KAGR,IAAbN,GACGpb,cAACsc,KAAY,CACTlB,SAAUA,EACVxa,SAAUA,IAIjB2oB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC44D,GAAkB,CAAC9xD,SAAUA,OAC7D,GAGb,CACIlG,EACA6a,EACAC,EACAC,EACAN,EACAO,EACA9U,EACAnG,EACA6a,EACAN,EACAW,GAGZ,EAkBAg1E,GAAkBlvF,aAAe,CAC7B8a,YAAa,GACbC,gBAAiB,kBAAM,IAAI,GAGhBm0E,U,UCpEAC,GAlBiB,SAAC7vF,GAC/B,IAAQL,EAAqBK,EAArBL,SAAUG,EAAWE,EAAXF,OACZqpB,EAAgB,OAANrpB,QAAM,IAANA,OAAM,EAANA,EAAQqpB,QAExB,OACE5lB,eAACyD,KAAUxG,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAClBiqB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC+wF,KAA2B,CAACn6E,SAAUoiD,GAAoB1uD,OAAO,SAAS0mF,IAAI,yCACtHznE,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC+wF,KAA2B,CAACn6E,SAAUqiD,GAAoB3uD,OAAO,SAAS0mF,IAAI,uCAASruF,MAAM,wBACrI4mB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAACy0C,KAAoB,IAC5DlrB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC4L,KAAqB,IAC7D2d,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC00C,KAAoB,IAC5DnrB,KAAYI,IAAI,SAAU/oB,KAAcwpB,GAAWpqB,cAAC20C,KAAsB,IAC1EprB,KAAYI,IAAI,UAAW/oB,IAAawpB,GAAWpqB,cAACid,KAAuB,IAC3EsM,KAAYI,IAAI,UAAW/oB,IAAawpB,GAAWpqB,cAAC4a,KAAsB,OAGjF,EC8Beq2E,GAxCW,SAAChwF,GACvB,IAAMuB,EAAUwyB,eACV9Z,EAAWua,aAAYjB,IACvBpZ,EAAW6yB,GAAYzZ,IAEvBtvB,EAAU+B,aAAW,CACvBjH,cAAC84D,GAAgB,CAAC5wD,cAAe1F,EAAQutC,aAAclvC,OAAO,gBAC9Db,cAACo1B,KAAiB,CAACv0B,OAAO,OAAOyO,UAAQ,EAACpH,cAAe1F,EAAQ6yB,iBACjEr1B,cAACyE,KAAS,CAAC5D,OAAO,cAAcqH,cAAe1F,EAAQ6yB,iBACvDr1B,cAACqsC,GAAW,CAACxrC,OAAO,OAAOwrB,UAAU,aAAa2B,MAAM,EAAOiH,UAAU,EAAO/sB,cAAe1F,EAAQutC,aAAazwC,SAChHU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,eACrD/vC,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,iBAInDpa,EAAkB1wB,aAAmBC,GAE3C,OACIlF,cAACosC,GAAI3qC,wBAAA,GACGR,GAAK,IACT6oB,QAAS9pB,cAAC6wF,GAAiB,CAAC3rF,QAASA,IACrCgW,SAAUA,EACVE,SAAUA,EACVsb,OAAO,EACPrb,QAASrb,cAACkxF,GAAgB,IAAI5xF,SAE9BkF,eAACwrC,KAAQ,CAAA1wC,SAAA,CACLU,cAACk5D,GAAoB,CAACtiD,SAAUoiD,GAAoB9wD,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQytC,cAErGta,EACD31B,cAAC8wF,GAAuB,CAAE5oF,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQ0tC,mBAI5F,E,gECWMihD,IApDYrvF,aAAW,SAAAC,GACzB,IAAM6iB,EAA+B,UAAvB7iB,EAAMyE,QAAQC,KACtBF,EAAkBqe,EAAQ,sBAAwB,4BAExD,MAAO,CACHte,KAAM,CACFwH,SAAU,WACVvH,kBACAwK,oBAAqBhP,EAAMghD,MAAMD,aACjC9xC,qBAAsBjP,EAAMghD,MAAMD,aAClC3rB,WAAYp1B,EAAMq1B,YAAYC,OAAO,mBAAoB,CACrDhU,SAAUthB,EAAMq1B,YAAY/T,SAAS+tE,QACrCC,OAAQtvF,EAAMq1B,YAAYi6D,OAAOC,UAErC,UAAW,CACP/qF,gBAAiBqe,EAAQ,sBAAwB,4BAEjD,uBAAwB,CACpBre,oBAGR,YAAa,CACTA,gBAAiBqe,EAAQ,sBAAwB,6BAErD,aAAc,CACVre,gBAAiBqe,EAAQ,sBAAwB,8BAGzDjiB,MAAO,CACH0lB,YAAa,IAGzB,IAoBkB,SAAHhpB,GAA6C,IAAvC0B,EAAM1B,EAAN0B,OAAQF,EAAMxB,EAANwB,OAAQkB,EAAK1C,EAAL0C,MAAUd,EAAKxB,YAAAJ,EAAAK,IAC1CwV,EAAO7T,KAAIN,EAAQF,GACzB,IAAKqU,EAAM,OAAO,KAClB,IAAMq8E,EAA4B,kBAATr8E,EAAqB9N,KAAKjE,MAAM+R,GAAQA,EAEjE,OAEIlV,cAACwxF,KAAS/vF,YAAA,CAENykC,YAAaqrD,EACbvsC,UAAQ,EACRysC,aAAa,EACbr+E,OAAM3R,wBAAA,GAAOM,GAAK,IAAEsM,WAAY,SAChC2B,OAAQA,KACRoI,MAAO,CACHmW,KAAM,CACF9jB,SAAU,QAEdinF,WAAY,CACRvxF,MAAO,wBAGfqR,OAAO,QACPjD,MAAM,QACF7M,aAAuBT,IAKvC,GAEAkwF,GAAUxvF,aAAe,CACrBI,MA9CgB,CAChBgmB,QAAS,sBACT1Z,WAAY,sBACZsjF,mBAAoB,OACpB9B,OAAQ,OACR+B,OAAQ,UACRC,MAAO,UACPnkF,KAAM,sBACNokF,gBAAiB,UACjBC,UAAW,UACX1tF,MAAO,WAqCPzC,UAAU,GAGCuvF,UCvEAa,GAvBW,SAAC/wF,GAAK,OAC5BjB,cAAC+0C,GAAItzC,wBAAA,GAAKR,GAAK,IAAA3B,SACXkF,eAACoqB,KAAgB,CAAAtvB,SAAA,CACbU,cAACyE,KAAS,CAAC5D,OAAO,OAClBb,cAACyE,KAAS,CAAC5D,OAAO,SAClBb,cAACyE,KAAS,CAAC5D,OAAO,gBAClBb,cAACgvB,KAAS,CAACnuB,OAAO,cAClBb,cAACgvB,KAAS,CAACnuB,OAAO,cAClBb,cAACqsC,GAAW,CAACxrC,OAAO,OAAOwrB,UAAU,aAAa2B,MAAM,EAAM1uB,SAC1DU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAAC05D,KAAmB,CAACrtC,UAAU,QAAQxrB,OAAO,YAAWvB,SACrDU,cAAC25D,KAAe,CAAAr6D,SACZU,cAACgH,KAAS,CAACnG,OAAO,aAG1Bb,cAACmxF,GAAS,CAACtwF,OAAO,OAAO4N,WAAS,SAEnC,E,qBC1BLwjF,GAAc,eC0CLC,GAtCa,SAACjxF,GAKzB,IAAekxF,EAAcnuF,aAAS,CAAEnD,OAAQ,SAAxCmB,MACOowF,EAAcpuF,aAAS,CAAEnD,OAAQ,SAAxCmB,MAEF0e,EAActO,uBAAY,SAAC4B,GAE7B,IAAMq+E,EAASF,EAAU7wF,MACzB,IAAW,IAAR0S,EAAc,CAAC,IAADs+E,EAEPC,GAA+B,QAAjBD,EAAAD,EAAOG,kBAAU,IAAAF,OAAA,EAAjBA,EAAmBG,cAAe,CAAC,EACjDllF,EAAMmlF,gBAAK/kF,OAAOD,KAAK6kF,GAAaltF,KAAI,SAAAE,GAAG,IAAAotF,EAAA,OAAyB,QAAzBA,EAAIJ,EAAYhtF,GAAKqtF,YAAI,IAAAD,OAAA,EAArBA,EAAuBE,WAAW,YAAa,GAAG,KAEjGC,EDlBc,SAACC,GAA6B,IAEtC1oD,EAFwB98B,EAAGzC,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAEw/B,EAAAC,aAEnCh9B,GAAG,IAApB,IAAA+8B,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAAsB,CAAC,IAAZzmC,EAAEomC,EAAA/oC,MACTyxF,EAAgBA,EAAcF,WAAW5uF,EAAIguF,GACjD,CAAC,OAAArnD,GAAAN,EAAA3/B,EAAAigC,EAAA,SAAAN,EAAAO,GAAA,CAED,OAAOkoD,CACX,CCW0CC,CADR5rF,KAAKC,UAAUgrF,GACyB9kF,GACxD0lF,EAAsB7rF,KAAKjE,MAAM2vF,GACvCX,EAAUpvF,SAASkwF,GAChB1lF,EAAI5E,OAAS,GACZypF,EAAUrvF,SAAS,CACfmwF,aAAc3lF,EAAI,IAG9B,KAAO,CACH,IAAMnJ,EAAOguF,EAAU9wF,OAAS,CAAC,EAE3BwxF,EDnBgB,SAACC,EAAe9uF,GAG9C,OADgB8uF,EAAcF,WAAWZ,GAAahuF,EAE1D,CCe0CkvF,CADR/rF,KAAKC,UAAUgrF,GAC2BjuF,EAAK8uF,cAC/DD,EAAsB7rF,KAAKjE,MAAM2vF,GACvCX,EAAUpvF,SAASkwF,GACnBb,EAAUrvF,SAAS,CAAC,EACxB,CAEJ,GAAG,CAACovF,EAAWC,IAEf,OAAOpyF,cAACsC,KAAYb,wBAAA,GAAKR,GAAK,IAAE8B,SAAU2d,IAC9C,ECtBMi4D,GAAa,CAACjC,aAAM,mBAAoBvB,GAAY,WACpD32D,GAAe,CAACC,eAAYC,aAAU,MAEtC00E,GAAsB,SAAAnyF,GAC1B,OACEuD,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAChBU,cAAC24C,KAAU,CAACC,eAAe,EAAMzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,SACpE5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACpJ9qB,cAACw4C,GAAM,CAACt4C,QAAQ,WAGtB,EAoBemzF,GAlBa,SAACpyF,GAAK,OAChCjB,cAACm3C,KAAM11C,wBAAA,GAAKR,GAAK,IAAA3B,SACfkF,eAACs0C,KAAU,CAACxa,QAASt+B,cAACozF,GAAmB,IAAI9zF,SAAA,CAC3CU,cAAC4f,KAAS,CAAC/e,OAAO,KAAKuC,SAAUu1E,KACjC34E,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAACwH,KAAc,CAAC3G,OAAO,UAAUwrB,UAAU,aAAa1pB,MAAM,+BAA8BrD,SACxFU,cAACkxB,KAAW,CAACrwB,OAAO,WAExBb,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ5d,WAAS,EAAAnP,SAC7DU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE/ChI,cAACkyF,GAAmB,CAACrxF,OAAO,gBAC5Bb,cAAC0U,KAAS,CAAC7T,OAAO,OAAO2Q,OAAO,QAAQoD,YAAa,UAEhD,E,WCvBL+jE,GAAa,CAACjC,aAAM,mBAAoBvB,GAAY,WACpD32D,GAAe,CAACC,eAAYC,aAAU,MAEtC40E,GAAoB,SAAAryF,GACxB,OACEuD,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAChBU,cAAC24C,KAAU,CAACC,eAAe,EAAMzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,SACpE5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACpJ9qB,cAACw4C,GAAM,CAACt4C,QAAQ,QACfqpB,KAAYI,IAAI,SAAU,WAAa3pB,cAACsW,GAAY,CAACY,aAAa,kBAGzE,EAoBeq8E,GAlBW,SAACtyF,GAAK,OAC9BjB,cAACw5C,KAAI/3C,wBAAA,GAAKR,GAAK,IAAA3B,SACbkF,eAACs0C,KAAU,CAACxa,QAASt+B,cAACszF,GAAiB,IAAIh0F,SAAA,CACvCU,cAAC4f,KAAS,CAAC/e,OAAO,KAAKuC,SAAUu1E,KACjC34E,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAACwH,KAAc,CAAC3G,OAAO,UAAUwrB,UAAU,aAAa1pB,MAAM,+BAA8BrD,SAC1FU,cAACkxB,KAAW,CAACrwB,OAAO,WAEtBb,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ5d,WAAS,EAAAnP,SAC/DU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE7ChI,cAACkyF,GAAmB,CAACrxF,OAAO,gBAC9Bb,cAAC0U,KAAS,CAAC7T,OAAO,OAAO2Q,OAAO,QAAQoD,YAAa,UAElD,EC7CH4+E,GAAa,SAWJC,GATQ,CACnBtxF,KAAMqxF,GACNrpF,KAAMupF,KACNjjE,KAAMwgE,GACNtgE,KAAMqhE,GACN36D,OAAQg8D,GACRlrC,KAAMorC,ICAK3C,GARU,SAAC3vF,GAAK,OAC7BuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACfU,cAAC2sC,GAAW,CAAC9rC,OAAO,IAAIyO,UAAQ,IAChCtP,cAAC4sC,GAAgB,CAAC/rC,OAAO,UAAU8B,MAAM,mBAAmB8M,cAAc,IAC1EzP,cAACuH,KAAqB,CAAC1G,OAAO,cAAc8B,MAAM,oCAAoC0pB,UAAU,UAAUgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,YAC5I,ECII0T,GAZD,CACV,CAAEjvB,IAAK,KAAMmvB,OAAQ,8BACrB,CAAEnvB,IAAK,OAAQmvB,OAAQ,gCACvB,CAAEnvB,IAAK,cAAemvB,OAAQ,uCAC9B,CAAEnvB,IAAK,MAAOmvB,OAAQ,+BACtB,CAAEnvB,IAAK,oBAAqBmvB,OAAQ,4CAA6CjyB,OAAQmyC,KAAezxC,MAAOmrC,IAC/G,CAAE/oC,IAAK,cAAemvB,OAAQ,sCAAuCjyB,OAAQmyC,KAAezxC,MAAOmrC,IACnG,CAAE/oC,IAAK,YAAamvB,OAAQ,oCAAqCjyB,OAAQoyB,KAAe1xB,MAAOgrC,IAC/F,CAAE5oC,IAAK,YAAamvB,OAAQ,oCAAqCjyB,OAAQoyB,KAAe1xB,MAAOgrC,IAC/F,CAAE5oC,IAAK,OAAQmvB,OAAQ,6BAAUjyB,OAAQqyB,aAAc,SAAU,MAAO3xB,MAAOkrC,KC8CpEslD,GAvCW,SAAC1yF,GACvB,IAAQL,EAAaK,EAAbL,SACF4B,EAAUwyB,eACV9Z,EAAWua,aAAYjB,IACvBpZ,EAAW6yB,GAAYzZ,IAEvBtvB,EAAU+B,aAAW,CACvBjH,cAACo1B,KAAiB,CAACv0B,OAAO,OAAOyO,UAAQ,EAACpH,cAAe1F,EAAQ6yB,iBACjEr1B,cAACyE,KAAS,CAAC5D,OAAO,cAAcqH,cAAe1F,EAAQ6yB,iBACvDr1B,cAACgvB,KAAS,CAACnuB,OAAO,cAClBb,cAACgvB,KAAS,CAACnuB,OAAO,cAClBb,cAACyE,KAAS,CAAC5D,OAAO,UAGhB80B,EAAkB1wB,aAAmBC,GAE3C,OACIlF,cAACosC,GAAI3qC,wBAAA,GACGR,GAAK,IACT6oB,QAAS9pB,cAACgb,KAAW,CAAC9V,QAASA,IAC/BgW,SAAUA,EACVE,SAAUA,EACVC,QAASrb,cAAC4wF,GAAgB,IAAItxF,SAE9BkF,eAACwrC,KAAQ,CAAA1wC,SAAA,CACJq2B,EACDnxB,eAACyD,KAAU,CAACC,cAAa,GAAA3G,OAAKiB,EAAQutC,aAAY,KAAAxuC,OAAIiB,EAAQ0tC,YAAa5wC,SAAA,CACtEiqB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAACy0C,KAAoB,IAC5DlrB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC00C,KAAoB,IAC5DnrB,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC4L,KAAqB,IAC7D2d,KAAYI,IAAI,SAAU/oB,IAAaZ,cAAC20C,KAAsB,YAKnF,E,UChCei/C,GAfW,SAAC3yF,GAAK,OAC5BjB,cAAC+0C,GAAItzC,wBAAA,GAAKR,GAAK,IAAA3B,SACXkF,eAACoqB,KAAgB,CAAAtvB,SAAA,CACbU,cAACyE,KAAS,CAAC5D,OAAO,OAClBb,cAACyE,KAAS,CAAC5D,OAAO,SAClBb,cAACyE,KAAS,CAAC5D,OAAO,gBAClBb,cAACgvB,KAAS,CAACnuB,OAAO,cAClBb,cAACgvB,KAAS,CAACnuB,OAAO,cAClBb,cAACyE,KAAS,CAAC5D,OAAO,aAEnB,ECZL83E,GAAa,CAACjC,aAAM,wBACpBl4D,GAAe,CAACC,eAAYC,aAAU,MACtCg5B,GAAc,CAACj5B,gBACfo1E,GAA0B,CAAEpvC,EAAG,EAAGE,EAAG,GAErCi0B,GAAqB,SAAA33E,GACvB,OACIuD,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACdU,cAAC24C,KAAU,CAACC,eAAe,EAAMzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,SACpE5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,QAG9J,EAmBagpE,GAjBa,SAAC7yF,GAAK,OAC9BjB,cAACm3C,KAAM11C,wBAAA,GAAKR,GAAK,IAAA3B,SACbkF,eAACs0C,KAAU,CAACi7C,qBAAqB,EAAOz1D,QAASt+B,cAAC44E,GAAkB,IAAIt5E,SAAA,CACpEU,cAAC4f,KAAS,CAAC/e,OAAO,KAAKuC,SAAUu1E,KACjC34E,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAAC4f,KAAS,CAAC/e,OAAO,MAAMuC,SAAUs0C,GAAa9nC,aAAc,OAC7D5P,cAAC0U,KAAS,CAAC7T,OAAO,oBAAoB2Q,OAAO,QAAQoD,YAAa,KAClE5U,cAAC0U,KAAS,CAAC7T,OAAO,cAAc2Q,OAAO,QAAQoD,YAAa,GAAInF,aAAcokF,UAE7E,E,eChBb,I,mBCHMr1E,GAAe,CAACC,eAAYC,aAAU,MACtCg5B,GAAc,CAACj5B,gBACfo1E,GAA0B,CAAEzvC,EAAG,EAAGE,EAAG,EAAGG,EAAG,EAAGE,EAAG,GAEjDqvC,GAAoB,SAAH30F,GAAmC,IAA7BkqB,EAAWlqB,EAAXkqB,YAAgBtoB,EAAKxB,YAAAJ,EAAAK,IAC9C,OACI8E,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACdU,cAAC24C,KAAU,CAACC,eAAe,EAAMzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,SACpE5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACpJ9qB,cAACw4C,GAAM,CAACt4C,QAAQ,QACfqpB,EAAYI,IAAI,SAAU,WAAa3pB,cAACsW,GAAY,CAACY,aAAa,kBAG/E,EA4Be+8E,GAzBW,SAAChzF,GACvB,IAAMsoB,EAActoB,EAAMsoB,YAE1B,OACIvpB,cAACw5C,GAAI/3C,wBAAA,GAAKR,GAAK,IAAA3B,SACXkF,eAACs0C,KAAU,CACPxa,QAASt+B,cAACg0F,GAAiB,CAACzqE,YAAaA,IACzCwqE,qBAAqB,EAAMz0F,SAAA,CAE3BU,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAAC4f,KAAS,CAAC/e,OAAO,MAAMuC,SAAUs0C,GAAa9nC,aAAc,OAG7D5P,cAAC0U,KAAS,CAAC7T,OAAO,oBAAoB2Q,OAAO,QAAQoD,YAAa,KAClE5U,cAAC0U,KAAS,CAAC7T,OAAO,cAAc2Q,OAAO,QAAQoD,YAAa,GAAInF,aAAcokF,UAI9F,ECvCMK,GAAa,SAWJC,GATQ,CACnBhyF,KAAM+xF,GACN/pF,KAAM84C,KACNxyB,KAAMkjE,GACNhjE,KAAMijE,GACNv8D,OAAQy8D,GACR3rC,KAAM8rC,I,WCSJpyF,GAAYC,aAAW,SAAAC,GACzB,MAAO,CACHqyF,UAAW,CACP9lF,QAAS,QAEb+lF,UAAW,CACP7xE,eAAgB,cAG5B,IAEM8xE,GAAqB,SAAHj1F,GAA4B,IAAtByH,EAAQzH,EAARyH,SAAU0I,EAAInQ,EAAJmQ,KACpC,OACIxP,cAAC+b,KAAU,CAAAzc,SACPU,cAACy0D,GAAmB,CAAC3tD,SAAUA,EAAU/F,OAAQyO,EAAM5O,SAAS,aAG5E,EAEM2zF,GAAgB,SAACtzF,GAAK,OACxBjB,cAACixB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SACbU,cAACkxB,KAAW,CAACC,QAASrH,GAASjpB,OAAO,SAAS8B,MAAM,kCAAkC2M,UAAQ,MAC1F,EAiDEklF,GA9CY,SAACvzF,GACxB,IAAMgvB,EAAkBC,aAAkBjvB,GACpCuB,EAAUX,KAChB,IAAKouB,EAAgBlvB,OAAQ,OAAO,KACpC,IAAAgvB,EAA2CE,EAAgBlvB,OAAnDoB,EAAI4tB,EAAJ5tB,KAAMwyD,EAAU5kC,EAAV4kC,WAAYD,EAAY3kC,EAAZ2kC,aAE1B,OACI10D,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC3CU,cAACowB,KAAmB,CAAC9uB,MAAO2uB,EAAgB3wB,SACxCkF,eAACqlB,GAAQpoB,oCAAA,GACDR,GACAgvB,GAAe,IACnBnG,QAAS9pB,cAACs0F,GAAkB,IAC5BtvF,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IAAU3B,SAAA,CAEnDkF,eAACoqB,KAAgBntB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACvBU,cAACU,KAAS,CAACG,OAAO,SAAS4qB,QAAM,IACjCzrB,cAACU,KAAS,CAACG,OAAO,iBAClBb,cAACyE,KAAS,CAAC5D,OAAO,SAClBb,cAACmxF,GAAS,CAACtwF,OAAO,OAAOF,UAAW6B,EAAQ4xF,YAC5Cp0F,cAACmxF,GAAS,CAACtwF,OAAO,eAAeF,UAAW6B,EAAQ4xF,YACpDp0F,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAACqrB,GAAe,CAAC1oB,MAAK,8CAAApB,OAAaY,GAAO7C,SACtCU,cAACusB,GAAS,CACN3rB,SAAS,UACTkG,SAAS,WACTgjB,SAAS,EACTzO,QAASrb,cAACu0F,GAAa,IACvBzuF,OAAQ,CACJ4uD,eACAC,cAEJt4C,KAAM,CAAE5S,MAAO,YAAaqX,MAAO,QACnCjC,QAAS,GAAGvf,SAEZU,cAAC+5D,GAAwB,eAOrD,ECzFM06B,GAAc,UASLC,GAPQ,CACnBvyF,KAAMsyF,GACNtqF,KAAM2qD,KACNrkC,KAAMilC,GACN/kC,KAAM6jE,I,oBC0CKG,GAjCS,SAAC1zF,GACvB,IAAMgvB,EAAkBC,aAAkBjvB,GAG1C,OACEjB,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC7CU,cAACowB,KAAmB,CAAC9uB,MAAO2uB,EAAgB3wB,SAC1CU,cAAC6pB,GAAQpoB,wBAAA,GACHR,GAAK,IACT+D,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IAAU3B,SAEnDkF,eAACoqB,KAAgB,CAAAtvB,SAAA,CACfU,cAACyE,KAAS,CAAC5D,OAAO,SAClBb,cAACyE,KAAS,CAAC5D,OAAO,gBAClBb,cAAC2zD,KAAa,CAAC9yD,OAAO,SACtBb,cAACyE,KAAS,CAAC5D,OAAO,SAClBb,cAAC40F,KAAa,CAAC/zF,OAAO,OAAO8B,MAAM,4BAA4BkyF,aAAa,sBAC5E70F,cAAC40F,KAAa,CAAC/zF,OAAO,gBAAgB8B,MAAM,qCAAqCkyF,aAAa,sBAC9F70F,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACk1C,KAAa,CAACr0C,OAAO,OACtBb,cAAC80F,KAAgC,CAACj0F,OAAO,iBACzCb,cAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAO/sB,SACjDU,cAAC6G,KAAS,CAAChG,OAAO,oBAQhC,EC9CMswB,GAAU,CACZ,CAAEltB,GAAI,QAAS9B,KAAM,2BAGZ4yF,GAAsB,SAAC9zF,GAAK,OAAMjB,cAACkxB,KAAWzvB,wBAAA,GAAKR,GAAK,IAAEkwB,QAASA,KAAW,ECErFtvB,GAAYC,aAAW,SAACC,GAAK,MAAM,CACrCs9B,UAAW,CACP/wB,QAAS,OACTsxC,IAAK79C,EAAMG,QAAQ,IAE1B,GAAG,CAAEC,KAAM,gCAqCG6yF,GAlCqB,SAAC/zF,GACjC,IAAQL,EAAuBK,EAAvBL,SAAUkG,EAAa7F,EAAb6F,SACZtE,EAAUX,KACV00B,EAAOqhB,eACLr5B,EAAWgiC,eAAXhiC,OACF02E,EAAc,IAAA1zF,OAAON,EAAMJ,OAAM,YACjCwrB,EAAY9N,EAAO02E,GAEnB5tD,EAAej1B,uBAAY,SAAAtJ,GAC7BytB,EAAKuhB,OAAO72C,EAAMJ,YAAQkK,EAC9B,GAAG,IAEGq+B,EAtBkB,SAAA/c,GAAS,OAAI,SAAA3Q,GAAY,OAAI3V,QAAQsmB,EAAU,EAsB9C6oE,CAAoB7oE,GAE7C,OACI7nB,eAAA,OAAK7D,UAAW6B,EAAQ68B,UAAU//B,SAAA,CAC9BU,cAAC+0F,GAAmB,CAACl0F,OAAQo0F,EAAgBr0F,SAAUA,EAAUkG,SAAUA,EAAU/D,SAAUskC,IAC/FrnC,cAACwxB,KAAmB/vB,wBAAA,GACZR,GAAK,IACTorB,UAAWA,GAAaprB,EAAML,SAC9B6N,WAAS,EACT26B,iBAAkBA,EAClBnmC,QAAS,CAAEkV,UAAWpS,QAAQsmB,IAAa/sB,SAE3CU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,YAIzD,ECtBemtF,GAhByB,SAACl0F,GACrC,IAAQF,EAA0BE,EAA1BF,OAAQF,EAAkBI,EAAlBJ,OAAQ8B,EAAU1B,EAAV0B,MAClB8uB,EAAW1wB,EAAO,IAADQ,OAAKV,EAAM,aAC5BK,EAAYC,cACZi0F,EAAoB3jE,EAAWvwB,EAAU,iCAADK,OAAkCkwB,IAAc9uB,EAG9F,OACI3C,cAACg1F,GAA2BvzF,wBAAA,GAAKR,GAAK,IAAE0B,MAAOyyF,IAEvD,ECDMC,IAFgB52E,eAAYC,aAAU,KAEpB,SAAHrf,GAAgD,IAA1CmQ,EAAInQ,EAAJmQ,KAAM1I,EAAQzH,EAARyH,SAAUikB,EAAO1rB,EAAP0rB,QAASlP,EAASxc,EAATwc,UAClD,OACErX,eAACuX,KAAU,CAAAzc,SAAA,CACRuc,GAAa7b,cAACowC,GAAW,CAACtpC,SAAUA,EAAU/F,OAAQyO,IACtDub,GAAW/qB,cAAC+J,KAAU,CAACjD,SAAUA,EAAU/F,OAAQyO,MAG1D,GAEM8lF,GAAkB,SAAAr0F,GACtB,OACEuD,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAChBU,cAAC24C,KAAU,CAACC,eAAe,EAAMzgC,SAAUlX,EAAMmd,SAAUxH,SAAS,SACpE5W,cAAC24C,KAAU,CAACC,eAAe,EAAOzgC,SAAUlX,EAAMmd,SAAUzb,MAAM,8BAA8BiU,SAAS,OAAO1W,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KACpJ9qB,cAACw4C,GAAM,CAACt4C,QAAQ,QAChBF,cAACsW,GAAY,CAACY,aAAa,kBAGjC,EAuBeq+E,GArBS,SAACt0F,GAAK,OAC5BjB,cAACw5C,GAAI/3C,wBAAA,GACCR,GAAK,IACT6oB,QAAS9pB,cAACq1F,GAAe,IACzBrwF,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IAAU3B,SAEnDkF,eAACs0C,KAAU,CAACxa,QAASt+B,cAACs1F,GAAe,IAAIh2F,SAAA,CAGvCU,cAACm1F,GAA+B,CAACt0F,OAAO,eAAe8B,MAAM,oCAC7D3C,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYwrB,UAAU,QAAQ1pB,MAAM,+BAA+BmD,OAAQ,CAAE2rB,SAAU,QAAUhjB,WAAS,EAAAnP,SACpIU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,cAGxC,EC9CHwtF,GAAW,OAUFC,GARM,CACjBtzF,KAAMqzF,GACNrrF,KAAMqiD,KACN/7B,KAAM0iC,GACNxiC,KAAMgkE,GACNxsC,KAAMotC,I,8BCWKG,GAjBO,SAACz0F,GAAK,OAC1BuD,eAACysB,KAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACfU,cAACwH,KAAc,CAAC3G,OAAO,WAAWwrB,UAAU,QAAQ1pB,MAAM,6BAA6B2M,UAAQ,EAAAhQ,SAC7FU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAEtChI,cAACwH,KAAc,CAAC3G,OAAO,eAAewrB,UAAU,YAAY1pB,MAAM,iCAAiC2M,UAAQ,EAAAhQ,SACzGU,cAAC2H,KAAiB,CAACI,gBAAiBC,SAEtChI,cAACwxB,KAAmB,CAAC3wB,OAAO,YAAYuO,YAAY,EAAOid,UAAU,QAAQ1pB,MAAM,8BAA6BrD,SAC9GU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,SAE3ChI,cAACwxB,KAAmB,CAAC3wB,OAAO,gBAAgBuO,YAAY,EAAOid,UAAU,YAAY1pB,MAAM,kCAAiCrD,SAC1HU,cAAC0xB,KAAsB,CAAC3pB,gBAAiBC,YAEpC,ECJIwsB,ICqB2DK,KACMA,KAEnCC,aAAc,MAAO,MDvCpD,CACV,CAAEvvB,IAAK,KAAMmvB,OAAQ,2BACrB,CAAEnvB,IAAK,WAAYmvB,OAAQ,CAAC,6BAA8B,8BAC1D,CAAEnvB,IAAK,aAAcmvB,OAAQ,CAAC,6BAA8B,gCAC5D,CAAEnvB,IAAK,eAAgBmvB,OAAQ,CAAC,iCAAkC,kCAClE,CAAEnvB,IAAK,iBAAkBmvB,OAAQ,CAAC,iCAAkC,oCACpE,CAAEnvB,IAAK,QAASmvB,OAAQ,8BACxB,CAAEnvB,IAAK,UAAWmvB,OAAQ,gCAC1B,CAAEnvB,IAAK,OAAQmvB,OAAQ,6BACvB,CAAEnvB,IAAK,YAAamvB,OAAQ,iCAAkCjyB,OAAQoyB,MACtE,CAAEtvB,IAAK,eAAgBmvB,OAAQ,oCAAqCjyB,OAAQoyB,MAC5E,CAAEtvB,IAAK,YAAamvB,OAAQ,kCAC5B,CAAEnvB,IAAK,OAAQmvB,OAAQ,6BAAUjyB,OAAQqyB,aAAc,MAAO,SEQ5DjzB,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACrC4zF,gBAAiB,CACfttE,YAAa,GAEfutE,eAAgB,CACd/pE,aAAc,GAEjB,GAAG,CAAE1pB,KAAM,oBAIN0zF,GAAU,SAAC50F,GACf,IAAMuB,EAAUwyB,eACV8gE,EAAmBj0F,KACnBqZ,EAAWua,aAAYjB,IAEvBtvB,EAAU+B,aAAW,CACzBjH,cAACyE,KAAS,CAAC5D,OAAO,OAClBb,cAACyE,KAAS,CAAC5D,OAAO,aAAa8B,MAAM,6BAA6BsyB,UAAU,EAAO/sB,cAAe1F,EAAQ6yB,iBAC1Gr1B,cAACyE,KAAS,CAAC5D,OAAO,iBAAiB8B,MAAM,iCAAiCsyB,UAAU,EAAO/sB,cAAe1F,EAAQ6yB,iBAClHr1B,cAAC23D,KAAa,CAAC92D,OAAO,QAAQqH,cAAe1F,EAAQ6yB,iBACrDr1B,cAAC43D,KAAc,CAAC/2D,OAAO,UAAUqH,cAAerD,IAAWrC,EAAQutC,aAAcvtC,EAAQytC,cACzFjwC,cAAC+1F,KAAmB,CAACl1F,OAAO,wBAAwB8B,MAAM,yCAAyCuF,cAAerD,IAAWrC,EAAQytC,YAAahb,UAAU,IAC5Jj1B,cAACg2F,KAAY,CAACn1F,OAAO,OAAOqH,cAAe1F,EAAQutC,aAAc9a,UAAU,IAC3Ej1B,cAACgvB,KAAS,CAACnuB,OAAO,YAAY4qB,QAAM,EAACxoB,QAASgyC,KAAiB/sC,cAAe1F,EAAQutC,iBAGlFpa,EAAkB1wB,aAAmBC,GAE3C,OACElF,cAACosC,GAAI3qC,wBAAA,GACCR,GAAK,IACT6oB,QAAS9pB,cAACgb,KAAW,CAAC9V,QAASA,IAC/BgW,SAAUA,EACVG,QAASrb,cAAC01F,GAAa,IAAIp2F,SAE3BkF,eAACwrC,KAAQ,CAAA1wC,SAAA,CACNq2B,EACD31B,cAAC63D,KAAoB,CAAC3vD,cAAerD,IAAWrC,EAAQutC,aAAcvtC,EAAQytC,WAAY6lD,EAAiBF,kBAC1GrsE,KAAYI,IAAI,QAAS,QAAU3pB,cAAC83D,KAAc,CAAC5vD,cAAerD,IAAWrC,EAAQutC,aAAcvtC,EAAQytC,WAAY6lD,EAAiBH,wBAIjJ,EAEAE,GAAQl0F,aAAe,CACrB0a,KAAM,CAAE5S,MAAO,YAAaqX,MAAO,QAKtB+0E,UCrDTr3E,GAAe,CAACC,eAAYC,aAAU,MAEtCu3E,GAAiB,SAAH52F,GAAgD,IAA1CmQ,EAAInQ,EAAJmQ,KAAM1I,EAAQzH,EAARyH,SAAUikB,EAAO1rB,EAAP0rB,QAASlP,EAASxc,EAATwc,UACjD,OACErX,eAACuX,KAAU,CAAAzc,SAAA,CACRuc,GAAa7b,cAACowC,GAAW,CAACtpC,SAAUA,EAAU/F,OAAQyO,IACtDub,GAAW/qB,cAAC+J,KAAU,CAACjD,SAAUA,EAAU/F,OAAQyO,MAG1D,EAEM0mF,GAAiB,SAAAj1F,GACrB,OACEuD,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAChBU,cAAC24C,KAAU,CAACxgC,SAAUlX,EAAMmd,WAC5Bpe,cAACw4C,GAAM,CAACt4C,QAAQ,QAChBF,cAACsW,GAAY,CAACY,aAAa,kBAGjC,EAsDei/E,GApDQ,SAACl1F,GAAK,OAC3BjB,cAACw5C,GAAI/3C,wBAAA,GACCR,GAAK,IACT6oB,QAAS9pB,cAACi2F,GAAc,IACxBjxF,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IAAU3B,SAEnDkF,eAACs0C,KAAU,CACTliC,SAAS,OACT0nB,QAASt+B,cAACk2F,GAAc,IAAI52F,SAAA,CAE5BU,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAAC4f,KAAS,CAAC/e,OAAO,UAAUk4C,WAAS,EAACtqC,WAAS,IAC/CzO,cAAC4f,KAAS,CAAC/e,OAAO,aAClBb,cAACwH,KAAc,CACb3G,OAAO,gBACPwrB,UAAU,WACV1pB,MAAM,kCACNyM,YAAU,EAACqvC,UAAU,mBAAkBn/C,SAEvCU,cAAC2H,KAAiB,MAEpB3H,cAACwH,KAAc,CACb3G,OAAO,sBACPwrB,UAAU,YACV1pB,MAAM,wCACNyM,YAAU,EAACqvC,UAAU,mBAAkBn/C,SAEvCU,cAAC2H,KAAiB,MAEpB3H,cAACwxB,KAAmB,CAClB3wB,OAAO,gBACPwrB,UAAU,YACV1pB,MAAM,kCACN8L,WAAS,EAAAnP,SAETU,cAAC0xB,KAAsB,MAGzB1xB,cAACwxB,KAAmB,CAClB1rB,OAAQ,CAAEswF,SAAU,OACpBv1F,OAAO,SACPwrB,UAAU,QACV1pB,MAAM,kCACN8L,WAAS,EAAAnP,SAETU,cAAC0xB,KAAsB,WAGtB,ECrFH2kE,GAAU,MASDC,GAPK,CAChBn0F,KAAMk0F,GACNlsF,KAAMosF,KACN9lE,KAAMolE,GACN1tC,KAAMguC,I,oGCIJK,GAAa5sF,sBAAW,SAAC3I,EAAO4I,GAAG,OACrC7J,cAACy2F,KAAOh1F,YAAA,CAACqI,SAAUD,GAAS5I,GAAS,IAGnC8D,GAAW6E,sBAAW,SAAC3I,EAAO4I,GAa5B5I,EAXAuB,QADJ,IAEI7B,EAUAM,EAVAN,UACAgC,EASA1B,EATA0B,MACAwH,EAQAlJ,EARAkJ,KAEAhB,GAMAlI,EAPAkB,KAOAlB,EANAkI,SACA5J,EAKA0B,EALA1B,GACAyxC,EAIA/vC,EAJA+vC,MACA0lD,EAGAz1F,EAHAy1F,SAEG5yF,GACH7C,EAFA4lD,eACOpnD,YACPwB,EAAKvB,KACH8C,EAAUX,GAAUZ,GACpBC,EAAYC,cACZw1F,EAAgBr8D,aAAY,SAAA5tB,GAAK,OAAIA,EAAM2a,MAAMC,GAAGC,WAAW,IAG/DqvE,EAAgBxkF,uBAAY,SAAAtJ,GAC9BK,GAAWA,EAAQL,EACvB,GAAG,CAACK,IAGE0tF,EAAkBntF,yBAAe/G,GACjCA,EACAzB,EAAUyB,EAAMo1B,WAAY,CAC1B9f,YAAa,EACbzW,EAAGmB,IAGX,OAEI6B,eAACsyF,KAAWr1F,wBAAA,CACRwqB,QAAM,EACNtrB,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,GACpCo2F,gBAAiBv0F,EAAQs+C,OACzB1gD,UAAWo2F,GACXj3F,GAAIA,EACJyxC,MAAOA,EACP0lD,SAAUA,EACV7sF,IAAKA,EACL84B,SAAU,EACVx5B,QAASytF,GACL9yF,GAAI,IAAAxE,SAAA,CAGP6K,GACGnK,cAACwK,KAAY,CAAC7J,UAAW6B,EAAQ2H,KAAK7K,SACjC8G,uBAAa+D,EAAM,CAChB+3E,YAAa2U,MAIxBF,GACG32F,cAACysD,KAAY,CACT9rD,UAAW6B,EAAQG,MACnBq0F,uBAAwB,CAAEvrE,QAAQ,GAAOnsB,SAExCu3F,OAMrB,IAYMh1F,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNuE,KAAM,CACFnG,MAAO4B,EAAMyE,QAAQ0lB,KAAKC,WAE9B20B,OAAQ,CACJ3gD,MAAO4B,EAAMyE,QAAQ21B,QAAQhmB,KAC7B,UAAW,CACP5P,gBAAiB6P,iBAAMrU,EAAMyE,QAAQ21B,QAAQhmB,KAAM,MAEvD,YAAa,CACToC,QAAS,KACTjK,QAAS,QACTC,MAAO,EACPiD,OAAQ,OACR1D,SAAU,WACVuU,IAAK,EACLC,KAAM,EACN/b,gBAAiBxE,EAAMyE,QAAQ21B,QAAQhmB,KACvC2sC,aAAc,gBAGtB34C,KAAM,CACFhK,MAAO,UACP8B,SAAUF,EAAMG,QAAQ,GACxBmsB,YAAatsB,EAAMG,QAAQ,GAC3BoM,QAAS,cACTmU,WAAY,SACZD,eAAgB,UAEpB7f,MAAO,CACHE,OAAQ,GAGf,GACD,CAAEV,KAAM,eAGG4C,M,wBClITlD,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCk1F,UAAW,CAAC,EACZC,eAAgB,CACZ9uE,WAAYrmB,EAAMG,QAAQ,GAC1BmmB,YAAatmB,EAAMG,QAAQ,IAGlC,IAkBci1F,GAhBG,SAAH93F,GAAuC,IAAjC2F,EAAK3F,EAAL2F,MAAO1F,EAAQD,EAARC,SAClBkD,GADoC/C,YAAAJ,EAAAK,IAC1BmC,MACVu1F,EAAY3uF,WAASC,QAAQpJ,GAEnC,OAAyB,IAArB83F,EAAUzuF,OAAqB,KAG/BnE,eAAA,OAAK7D,UAAW6B,EAAQy0F,UAAU33F,SAAA,GAC1B0F,GAAUhF,cAACC,KAAU,CAACC,QAAQ,YAAYC,MAAM,gBAAgBqrB,cAAY,EAACC,QAAM,EAAC9qB,UAAW6B,EAAQ00F,eAAe53F,SAAG0F,IAC5HoyF,IAIb,E,0HCFMryF,GAAW6E,sBAAW,SAAC3I,EAAO4I,GAChC,IACIvK,EAYA2B,EAZA3B,SAEAqB,GAUAM,EAXAuB,QAWAvB,EAVAN,WACAgC,EASA1B,EATA0B,MACAwH,EAQAlJ,EARAkJ,KACAhI,EAOAlB,EAPAkB,KACAgH,EAMAlI,EANAkI,QAEA6nC,GAIA/vC,EALA1B,GAKA0B,EAJA+vC,OACAqmD,EAGAp2F,EAHAo2F,SAEGvzF,GACH7C,EAFA4lD,eACOpnD,YACPwB,EAAKvB,KACH8C,EAAUX,GAAUZ,GACpBC,EAAYC,cACZuK,EAAWC,cACXqU,EAAUC,cACV02E,EAAgBr8D,aAAY,SAAA5tB,GAAK,OAAIA,EAAM2a,MAAMC,GAAGC,WAAW,IACrE7V,EAA4CE,aAAe,WAADrQ,OAAYY,EAAI,YAAYk1F,GAASC,EAAAzxF,YAAA6L,EAAA,GAAxF6lF,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAClCF,EAAY3uF,WAASC,QAAQpJ,GAC7Bo3F,EAAWU,EAAU/xF,KAAI,SAAAhG,GAAQ,OAAAA,EAAL4B,MAAkB1B,EAAE,IAAEu0B,SAASpoB,EAASS,UAEpEyqF,EAAgBxkF,uBAAY,SAAAtJ,GAC9B0uF,GAAmBD,GACdA,GAAmBb,GACpB12E,EAAQe,KAAKzhB,EAAS,GAAG2B,MAAM1B,IAEnC4J,GAAWA,EAAQL,EACvB,GAAG,CAACK,EAASouF,EAAgBC,EAAmBd,EAAU12E,EAAS1gB,IAEnE,GAAyB,IAArB83F,EAAUzuF,OAAc,OAAO,KAEnC,IAAMkuF,EAAkBntF,yBAAe/G,GACjCA,EACAzB,EAAUyB,EAAMo1B,WAAY,CAC1B9f,YAAa,EACbzW,EAAGmB,IAIX,OACI6B,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLkF,eAACsyF,KAAWr1F,wBAAA,CACRwqB,QAAM,EACNtrB,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,EAAS6T,YAAA,GAAKhS,EAAQs+C,OAAS41C,IACnE1lD,MAAOA,EACPrO,SAAU,EACVx5B,QAASytF,GACL9yF,GAAI,IAAAxE,SAAA,CAEP6K,GACGnK,cAACwK,KAAY,CAAC7J,UAAW6B,EAAQ2H,KAAK7K,SACjC8G,uBAAa+D,EAAM,CAChB+3E,YAAa2U,MAIxBF,GACG32F,cAACysD,KAAY,CACT9rD,UAAW6B,EAAQG,MACnBq0F,uBAAwB,CAAEvrE,QAAQ,GAAOnsB,SAExCu3F,IAGRF,GACG32F,cAACkJ,KAAU,CACPvI,UAAWkE,IAAWrC,EAAQu1D,WAAUvjD,YAAA,GACnChS,EAAQg1D,SAAW+/B,IAExBv5E,KAAK,MACL3U,KAAK,QACLjJ,UAAU,MACVuiC,SAAU,KACV76B,KAAM,KACN,iBAAWxI,SAEXU,cAACkuF,KAAc,UAI3BluF,cAACy3F,KAAQ,CAACrzE,GAAImzE,EAAgBlzE,QAAQ,OAAOqzE,eAAa,EAAAp4F,SACtDU,cAACosC,KAAI,CACDhsC,UAAU,MACVu3F,gBAAc,EACdh3F,UACIg2F,EACMn0F,EAAQm0F,cACRn0F,EAAQo1F,gBACjBt4F,SAEAA,QAKrB,IAYMuC,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNuE,KAAM,CACFnG,MAAO4B,EAAMyE,QAAQ0lB,KAAKC,WAE9B20B,OAAQ,CACJ3gD,MAAO4B,EAAMyE,QAAQ21B,QAAQhmB,KAC7B,UAAW,CACP5P,gBAAiB6P,iBAAMrU,EAAMyE,QAAQ21B,QAAQhmB,KAAM,MAEvD,YAAa,CACToC,QAAS,KACTjK,QAAS,QACTC,MAAO,EACPiD,OAAQ,OACR1D,SAAU,WACVuU,IAAK,EACLC,KAAM,EACN/b,gBAAiBxE,EAAMyE,QAAQ21B,QAAQhmB,KACvC2sC,aAAc,gBAGtB34C,KAAM,CACFhK,MAAO,UACP8B,SAAUF,EAAMG,QAAQ,GACxBmsB,YAAatsB,EAAMG,QAAQ,GAC3BoM,QAAS,cACTmU,WAAY,SACZD,eAAgB,UAEpB7f,MAAO,CACHE,OAAQ,GAEZ8zF,cAAe,CACX,MAAO,CACHtuE,YAAatmB,EAAMG,QAAQ,GAC3Bi1B,WAAY,wDAGpBygE,gBAAiB,CACb,MAAO,CACHvvE,YAAatmB,EAAMG,QAAQ,GAC3Bi1B,WAAY,wDAGpB0gE,aAAc,CACVvgE,KAAM,YAEVkgC,SAAU,CAAC,EACXO,WAAY,CACR9vC,WAAY,EACZmD,cAAe,EACfxI,UAAW,eACXuU,WAAYp1B,EAAMq1B,YAAYC,OAAO,YAAa,CAC9ChU,SAAUthB,EAAMq1B,YAAY/T,SAASy0E,WAEzC,UAAW,CAIPvxF,gBAAiB,eAErB,aAAc,CACVqc,UAAW,mBAItB,GACD,CAAEzgB,KAAM,eAGG4C,M,gBC5LAgzF,GAZU,SAAH14F,GAAgC,IAA1BuB,EAAQvB,EAARuB,SAAaK,EAAKxB,YAAAJ,EAAAK,IACpCs4F,EAAwB,CAC1B71F,KAAMvB,EAASuB,KACfQ,MAAM,aAADpB,OAAeX,EAASuB,KAAI,SACjCgI,KAAMnK,cAACY,EAASuJ,KAAI,IACpB5K,GAAG,IAADgC,OAAMX,EAASuB,OAGrB,OAAQnC,cAAC+E,GAAQtD,wBAAA,GAAKu2F,GAA2B/2F,GAErD,ECbMg3F,GAAiBr2E,wBAAc,CACjCiwD,QAAS,KACT7mD,OAAQ,KACRpT,QAAS,KACTsS,QAAS,KACT5S,QAAS,OAGb2gF,GAAeh2E,YAAc,iBAEdg2E,UCPAC,GAFI,WAAH,OAAS13F,qBAAWy3F,GAAgB,E,iECoGrCE,GAjEC,SAAH94F,GACeA,EAAxBmD,QACSnD,EAATsB,UACYtB,EAAZsnB,aAIG,IAHHyxE,EAAW/4F,EAAX+4F,YAEGn3F,GADG5B,EAAN4mB,OACQxmB,YAAAJ,EAAAK,KAIR24F,GADkBl3F,cACem3F,gBAAzB/uE,EAAW8uE,EAAX9uE,YAAa3R,EAAOygF,EAAPzgF,QAGrB,OAFA0iB,aAAY,SAAC5tB,GAAK,OAAKA,EAAM6rF,OAAO7sF,SAASS,QAAQ,IAEjDyL,EAAgB,KAIhBpT,eAAC+E,IAAI9H,wBAAA,CACD0H,QAASivF,GACLn3F,GAAK,IAAA3B,SAAA,CAETU,cAAC+E,GAAQ,CAAC5C,KAAK,YAAYQ,MAAO,oBAAqBwH,KAAMnK,cAACw4F,KAAQ,IAAKj5F,GAAG,IAAIyxC,OAAK,IACvFxsC,eAACi0F,GAAgB,CACbt2F,KAAK,SACLQ,MAAM,6CACNwH,KAAMnK,cAAC04F,KAAS,IAChBn5F,GAAE,IAAAgC,OAAMyhE,GAAM7gE,MACdk1F,UAAQ,EAAA/3F,SAAA,CAEPiqB,EAAYI,IAAI,UAAW,UAAY3pB,cAAC+3F,GAAgB,CAACn3F,SAAUoiE,KACnEz5C,EAAYI,IAAI,UAAW,UAAY3pB,cAAC+3F,GAAgB,CAACn3F,SAAU2iE,QAEvEh6C,EAAYI,IAAI,UAAW,UAAY3pB,cAAC+3F,GAAgB,CAACn3F,SAAUmoE,KACnEx/C,EAAYI,IAAI,UAAW,UAAY3pB,cAAC+3F,GAAgB,CAACn3F,SAAU8nE,KACnEn/C,EAAYI,IAAI,UAAW,UAAY3pB,cAAC+3F,GAAgB,CAACn3F,SAAUgkE,KACnEr7C,EAAYI,IAAI,UAAW,UAAY3pB,cAAC+3F,GAAgB,CAACn3F,SAAUovE,KACnEzmD,EAAYI,IAAI,UAAW,eAAiB3pB,cAAC+3F,GAAgB,CAACn3F,SAAU8iE,KACxEn6C,EAAYI,IAAI,UAAW,cAAgB3pB,cAAC+3F,GAAgB,CAACn3F,SAAUqmD,KACvE19B,EAAYI,IAAI,UAAW,WAAa3pB,cAAC+3F,GAAgB,CAACn3F,SAAU6yE,KACrEjvE,eAAC2yF,GAAS,CAACnyF,MAAO,qEAAc1F,SAAA,CAE3BiqB,EAAYI,IAAI,UAAW,eAAiB3pB,cAAC+3F,GAAgB,CAACn3F,SAAU0lE,KACxE/8C,EAAYI,IAAI,UAAW,QAAU3pB,cAAC+3F,GAAgB,CAACn3F,SAAU6sE,KACjElkD,EAAYI,IAAI,UAAW,SAAW3pB,cAAC+3F,GAAgB,CAACn3F,SAAU0wD,KAClE/nC,EAAYI,IAAI,UAAW,UAAY3pB,cAAC+3F,GAAgB,CAACn3F,SAAUkuE,KACnEvlD,EAAYI,IAAI,UAAW,WAAa3pB,cAAC+3F,GAAgB,CAACn3F,SAAUwiD,QAEzE5+C,eAAC2yF,GAAS,CAACnyF,MAAO,6CAAU1F,SAAA,CACvBiqB,EAAYI,IAAI,UAAW,YAAc3pB,cAAC+3F,GAAgB,CAACn3F,SAAUi/D,KACtEr7D,eAACi0F,GAAgB,CACbt2F,KAAK,QACLQ,MAAO,gBACPwH,KAAMnK,cAAC24F,KAAQ,IACfp5F,GAAE,SAAWD,SAAA,CAEbU,cAAC+E,GAAQ,CAAC5C,KAAK,WAAWQ,MAAO,mBAAoBwH,KAAMnK,cAAC44F,KAAe,IAAKr5F,GAAG,kBAAkByxC,OAAK,IAC1GhxC,cAAC+E,GAAQ,CAAC5C,KAAK,cAAcQ,MAAO,sBAAuBwH,KAAMnK,cAAC64F,KAAQ,IAAKt5F,GAAG,qBAAqByxC,OAAK,aAMhI,E,4ECzFMnvC,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC+2F,WAAY,CACRzqE,YAAatsB,EAAMG,QAAQ,IAE/B62F,qBAAsB,CAClB5hE,WAAYp1B,EAAMq1B,YAAYC,OAAO,CAAC,aAAc,CAChDg6D,OAAQtvF,EAAMq1B,YAAYi6D,OAAO2H,MACjC31E,SAAUthB,EAAMq1B,YAAY/T,SAASG,gBAEzCZ,UAAW,gBAEfq2E,mBAAoB,CAChB9hE,WAAYp1B,EAAMq1B,YAAYC,OAAO,CAAC,aAAc,CAChDg6D,OAAQtvF,EAAMq1B,YAAYi6D,OAAO2H,MACjC31E,SAAUthB,EAAMq1B,YAAY/T,SAASG,gBAEzCZ,UAAW,kBAElB,GACG,CAAEzgB,KAAM,0BAiEG+2F,GA7Da,SAACj4F,GACzB,IAAQ2H,EAAkB3H,EAAlB2H,KAAS9E,EAAIrE,YAAKwB,EAAKvB,IACzB8C,EAAUX,KACVmtC,EAAWC,cACX/tC,EAAYC,cAClBuQ,EAAsCE,aAAe,kBAAiB0lF,EAAAzxF,YAAA6L,EAAA,GAA/DynF,EAAW7B,EAAA,GAAE8B,EAAc9B,EAAA,GAC5B+B,EAAWvnF,mBAsCjB,OApCAkE,qBAAU,WAC0B,qBAArBqjF,EAASvmF,SAEhBumF,EAASvmF,QACkB,qBAAhBqmF,EACDA,EACAvwF,EAEiB,qBAAhBuwF,GACPA,IAAgBvwF,GAGhBomC,EAASsqD,aAAqBH,KAG9BE,EAASvmF,UAAYlK,EAEjBuwF,IAAgBvwF,IAEhBwwF,EAAexwF,GACfywF,EAASvmF,QAAUlK,QAKJmC,GAAfouF,GACAA,IAAgBvwF,IAGhBomC,EAASsqD,aAAqBH,IAC9BE,EAASvmF,QAAUqmF,EAInC,GAAG,CAACnqD,EAAUmqD,EAAaC,EAAgBxwF,IAGvC5I,cAACgJ,KAAO,CACJhE,MAAO9D,EAAU0H,EAAO,uBAAyB,sBAAuB,CAAEpH,EAAG,oBAC7EyH,WAAY,IAAI3J,SAEhBU,cAACkJ,KAAUzH,wBAAA,CACPtB,MAAM,UACNgJ,QAAS,kBAAM6lC,EAASuqD,eAAgB,EACxC54F,UAAW6B,EAAQs2F,YACfh1F,GAAI,IAAAxE,SAERU,cAACw5F,KAAQ,CAACh3F,QAAS,CAAE8D,KAAMsC,EAAOpG,EAAQy2F,mBAAqBz2F,EAAQu2F,4BAIvF,E,2CCzFMU,GAAiB,CAAEC,MAAO,oBAAqBC,OAAQ,IAAOC,cAAe,EAAGC,eAAW9uF,EAAW+uF,UAAU,GAMvGC,GAJe,WAAH,OAAS/V,aAAgB,eAAgByV,GAAe,ECepE5nE,OAhBf,SAAqBC,EAAUC,EAAOC,GAClC,IAAMC,EAAgBngB,iBAAOggB,GAE7BI,cAA0B,WACtBD,EAAcnf,QAAUgf,CAC5B,GAAG,CAACA,IAEJ9b,qBAAU,WACN,GAAKgc,EAAL,CAEA,IAAM/tB,EAAKkuB,aAAY,kBAAMF,EAAcnf,SAAS,GAAEif,GAEtD,OAAO,kBAAMK,cAAcnuB,EAAG,CAJX,CAKvB,GAAG,CAAC8tB,EAAOC,GACf,ECwDegoE,GAjCE,SAAC7oD,GAAuB,IAAlBluC,EAAO6H,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,EACxBmvF,EAAmB7yF,KAAKC,UAAU,CAAE8pC,MAAKluC,YACzCi3F,EAAQl0F,mBAAQ,kBAAMmrC,EAAM,IAAIgpD,MAAMhpD,EAAKluC,QAAW8H,CAAS,GAAE,CAACkvF,IACxEloF,EAA8B1J,oBAAS,GAAK2J,EAAAnM,YAAAkM,EAAA,GAArC6F,EAAO5F,EAAA,GAAEyhC,EAAUzhC,EAAA,GAC1BkP,EAA4B7Y,oBAAS,GAAM8Y,EAAAtb,YAAAqb,EAAA,GAApC8J,EAAM7J,EAAA,GAAEi5E,EAASj5E,EAAA,GAwBxB,OApBAnL,qBAAU,WACN,GAAKkkF,EAAL,CACAzmD,GAAW,GACX2mD,GAAU,GAEV,IAAM3wC,EAAS,SAAC3gD,GACZ2qC,GAAW,GACX2mD,GAAU,EACd,EAIA,OAFAF,EAAM1mF,iBAAiB,iBAAkBi2C,GAElC,WACCywC,IACAA,EAAMG,QACNH,EAAMI,oBAAoB,iBAAkB7wC,GAEpD,CAhBkB,CAiBtB,GAAG,CAACywC,IAEG,CAACA,EAAOtiF,EAASoT,EAE5B,ECTeuvE,GA1CsB,WACnC,IAAAC,EAA8B3hF,eAAtBwsE,EAAQmV,EAARnV,SAAUn7D,EAAOswE,EAAPtwE,QAClBuwE,EAAoDV,KAAuBW,EAAA70F,YAAA40F,EAAA,GAAAE,EAAAD,EAAA,GAAlEhB,EAAKiB,EAALjB,MAAOC,EAAMgB,EAANhB,OAAQE,EAASc,EAATd,UAAae,EAAWF,EAAA,GAChD3oF,EAAsB1J,qBAAU2J,EAAAnM,YAAAkM,EAAA,GAAzBo/B,EAAGn/B,EAAA,GAAE6oF,EAAM7oF,EAAA,GAClB8oF,EAAiCd,GAAS7oD,GAAI4pD,EAAAl1F,YAAAi1F,EAAA,GAAvCZ,EAAKa,EAAA,GAAW/vE,GAAF+vE,EAAA,GAAQA,EAAA,IACvBC,EAAej1F,QAAQs/E,KAAct/E,QAAQ8zF,IAAc9zF,QAAQ4zF,GA6BzE,OA1BA3jF,qBAAU,YAnBQ,SAAC0jF,GACnB,OAAKA,EACE,OAAO,KAADn4F,OAAqBm4F,IAC/BtsF,MAAK,SAAAQ,GACJ,OAAOA,EAAOma,OAChB,IACCmrB,OAAM,SAAA7uC,GACL,MAAMA,CACR,IAPiB6I,QAAQm8C,OAAO,IAAIh8C,MAAM,aAQ9C,EAWI4tF,CAAYvB,GACTtsF,MAAK,SAAA+jC,GACJ0pD,EAAO1pD,EACT,GACJ,GAAG,CAAC0pD,EAAQnB,IAGZ7nE,IAAY,WACNgoE,GAAavtF,YAASC,MAAQD,YAAS6wB,QAAQ08D,IACjDe,GAAY,SAAAz7E,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAE06E,eAAW9uF,GAAS,GAEhE,GAAG,IAAM8uF,GAGTqB,IAAoB,WACdlwE,GAAQkvE,EAAMiB,OAAOjoD,OAAM,SAAA7uC,GAAW,GAC5C,GAAGs1F,EAAQqB,GAGXhlF,qBAAU,WACJgV,GAAUjlB,QAAQs/E,KAAct/E,QAAQ8zF,KAAeF,GAAQO,EAAMiB,OAAOjoD,OAAM,SAAA7uC,GAAW,GACnG,GAAG,CAAC2mB,EAAQq6D,EAAUn7D,EAAS2vE,EAAWF,IAInC,CACLyB,SAAUr1F,QAAQ8zF,GAClBmB,eAEJ,E,UC/CM57D,GAAa,GAEbv9B,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFC,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,MAC1CmU,SAAU,QAEjB,GAAG,CAAE99B,KAAM,0BA+CGk5F,GA5Ce,SAACp6F,GAC3B,IAAQkI,EAAYlI,EAAZkI,QACF3G,EAAUX,KACVX,EAAYC,cAC+Bm6F,EAAjBziF,eAAxB4qE,cAAM,IAAA6X,EAAGl8D,GAAUk8D,EACrBC,EAAoBv1F,mBAAQ,kBAAMy9E,EAAO39E,QAAO,SAAAgD,GAClD,IAAM4tF,EAAW5tF,EAAMg4C,OACjB4uC,GAAW5mF,EAAMw8E,KAAOx8E,EAAMy8E,YAEpC,OADsBmR,GAAYhH,CAEtC,GAAE,GAAE,CAACjM,IAEC/iE,EAActO,uBAAY,SAACtJ,GACzBK,GAASA,EAAQL,EACzB,GAAG,CAACK,IAEJ,OAAQoyF,EAAkB5yF,OAAS,EAC/BnE,eAAC4nC,KAAI,CACDovD,UAAWx7F,cAACm0B,KAAa,CAAA70B,SAAE4B,EAAU,uBAAwB,CAAE+W,YAAa,MAC5EtX,UAAW6B,EAAQ8D,KAAKhH,SAAA,CAEvBi8F,EAAkB9tF,MAAM,EAAG,IAAIpI,KAAI,SAAAyD,GAAK,OACrC9I,cAACm+C,KAAqB,CAAgB78C,MAAOwH,EAAMxJ,SAC/CU,cAACy7F,KAAuB,CACpB16F,OAAQ+H,EACRhC,SAAS,SACTqC,QAASuX,KAJW5X,EAAM7E,GAMV,IAG5BjE,cAAC6wC,KAAO,IACR7wC,cAACssD,KAAQ,CAACrgC,QAAM,EAAC7rB,UAAWC,KAAMd,GAAG,SAAS4J,QAASuX,EAAYphB,SAAC,qEAGxEU,cAACssD,KAAQ,CAAAhtD,SACLU,cAACysD,KAAY,CACTtwB,QAASj7B,EAAU,yBACnBirB,UAAWjrB,EAAU,6BAIrC,E,4CC3Daw6F,GAAuB,CAChC,CAAEz3F,GAAI,EAAG9B,KAAM,0DACf,CAAE8B,GAAI,IAAW9B,KAAM,0CACvB,CAAE8B,GAAI,IAAe9B,KAAM,oCAC3B,CAAE8B,GAAI,IAAgB9B,KAAM,qCAC5B,CAAE8B,GAAI,KAAgB9B,KAAM,qCAC5B,CAAE8B,GAAI,KAAgB9B,KAAM,yBAYjBw5F,GARY,SAAC16F,GAExB,OACIjB,cAACkxB,KAAWzvB,wBAAA,GAAKR,GAAK,IAAEkwB,QAASuqE,KAEzC,E,eCPME,GAAmBn2F,KAAMi2F,GAAsB,MA4CtCG,GA1CYjyF,sBAAW,SAAC3I,EAAO4I,GAC1C,IACIV,EAEAlI,EAFAkI,QACGrF,EAAIrE,YACPwB,EAAKvB,IACHwB,EAAYC,cAClBs5F,EAAoDV,KAAuBW,EAAA70F,YAAA40F,EAAA,GAAAE,EAAAD,EAAA,GAAlEd,EAAae,EAAbf,cAAeC,EAASc,EAATd,UAAae,EAAWF,EAAA,GAC1CvjF,EAASC,eACT0kF,EAAW/1F,QAAQ8zF,GAEnBn5E,EAActO,uBAAY,SAACwnF,EAAeC,GAAS,OAAK,SAAC/wF,GAC3D,IAAMizF,EAAelC,OAAY9uF,EAAY6uF,EAAgBttF,YAASC,MAAMy6B,KAAK,CAAEg1D,aAAcpC,IAAiBxrD,aAAUrjC,EAC5H6vF,GAAY,SAAAz7E,GACR,OAAA1d,wBAAA,GACO0d,GAAQ,IACX06E,UAAWkC,GAEnB,IACIA,EACA5kF,EAAO,4BAA6B,OAAQ,CAAEyiF,cAAegC,GAAiBhC,GAAez3F,OAE7FgV,EAAO,2BAA4B,QAGvChO,GAAWA,EAAQL,EACvB,CAAC,GAAE,CAACK,EAASyxF,IAGb,OACI56F,cAACgJ,KAAO,CAAChE,MAAO9D,EAAU,GAADK,OAAIu6F,EAAW,wBAA0B,yBAA2B7yF,WAAY,IAAI3J,SACzGU,cAACkJ,KAAUzH,wBAAA,CACP0H,QAASuX,EAAYk5E,EAAeC,GACpC1hF,SAA4B,IAAlByhF,GACN91F,GAAI,IAAAxE,SAEPw8F,EAAW97F,cAACi8F,KAAa,IAAMj8F,cAACk8F,KAAY,QAI7D,I,qBC7CaC,I,OAAe,CACxB,CAAEl4F,GAAI,oBAAqB9B,KAAM,wEACjC,CAAE8B,GAAI,oBAAqB9B,KAAM,wEACjC,CAAE8B,GAAI,oBAAqB9B,KAAM,wEACjC,CAAE8B,GAAI,oBAAqB9B,KAAM,wEACjC,CAAE8B,GAAI,0BAA2B9B,KAAM,wEACvC,CAAE8B,GAAI,2BAA4B9B,KAAM,wEACxC,CAAE8B,GAAI,2BAA4B9B,KAAM,wEACxC,CAAE8B,GAAI,2BAA4B9B,KAAM,wEACxC,CAAE8B,GAAI,2BAA4B9B,KAAM,wEACxC,CAAE8B,GAAI,2BAA4B9B,KAAM,wEACxC,CAAE8B,GAAI,2BAA4B9B,KAAM,wEACxC,CAAE8B,GAAI,iBAAkB9B,KAAM,sDAC9B,CAAE8B,GAAI,iBAAkB9B,KAAM,sDAC9B,CAAE8B,GAAI,iBAAkB9B,KAAM,sDAC9B,CAAE8B,GAAI,iBAAkB9B,KAAM,sDAC9B,CAAE8B,GAAI,aAAc9B,KAAM,gDAC1B,CAAE8B,GAAI,aAAc9B,KAAM,kDAuCfi6F,GAvBI,SAACn7F,GAChB,IAAA8Q,EAAsB1J,qBAAU2J,EAAAnM,YAAAkM,EAAA,GAAzBo/B,EAAGn/B,EAAA,GAAE6oF,EAAM7oF,EAAA,GAClB8oF,EAAiCd,GAAS7oD,GAAI4pD,EAAAl1F,YAAAi1F,EAAA,GAAvCZ,EAAKa,EAAA,GAAW/vE,GAAF+vE,EAAA,GAAQA,EAAA,IAEvB1zD,EAAej1B,uBAAY,SAAAtJ,IAhBjB,SAAC4wF,GACjB,OAAKA,EACE,OAAO,KAADn4F,OAAcm4F,IACtBtsF,MAAK,SAAAQ,GACF,OAAOA,EAAOma,OAClB,IACCmrB,OAAM,SAAA7uC,GACH,MAAMA,CACV,IAPe6I,QAAQm8C,OAAO,IAAIh8C,MAAM,aAQhD,EASQ4tF,CADcnyF,EAAMwB,OAAOhJ,OAEtB8L,MAAK,SAAA+jC,GACF0pD,EAAO1pD,EACX,GACR,GAAG,CAAC0pD,IAMJ,OAJA7kF,qBAAU,WACFgV,GAAQkvE,EAAMiB,MACtB,GAAG,CAACjB,EAAOlvE,IAGPhrB,cAACkxB,KAAWzvB,wBAAA,GAAKR,GAAK,IAAEkwB,QAASgrE,GAAcp5F,SAAUskC,IAGjE,ECzDag1D,GAAgB,CACzB,CAAEp4F,GAAI,EAAG9B,KAAM,0DACf,CAAE8B,GAAI,IAAU9B,KAAM,0CACtB,CAAE8B,GAAI,IAAW9B,KAAM,2CACvB,CAAE8B,GAAI,IAAW9B,KAAM,2CACvB,CAAE8B,GAAI,IAAW9B,KAAM,2CAYZm6F,GARK,SAACr7F,GAEjB,OACIjB,cAACkxB,KAAWzvB,wBAAA,GAAKR,GAAK,IAAEkwB,QAASkrE,KAEzC,ECEMn+E,GAAsB,CACxBC,YAAY,EACZC,UAAU,EACVC,OAAO,EACPC,SAAS,GAQPzc,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCw0B,KAAM,CACFjoB,QAAS,OACTuZ,cAAe,UAEnB7lB,MAAO,CACHgmB,SAAU,GAEjB,GAAG,CAAE7lB,KAAM,yBA4DGo6F,GAxDoB,SAACt7F,GAChC,IAAQ2H,EAAoC3H,EAApC2H,KAAMgpD,EAA8B3wD,EAA9B2wD,OAAQpoD,EAAsBvI,EAAtBuI,QAASgzF,EAAav7F,EAAbu7F,SACzBh6F,EAAUX,KACVX,EAAYC,cAGZ0H,EAAcuJ,uBAAY,WAC5B5I,GACJ,GAAG,CAACA,IAEE68C,EAAaj0C,uBAAY,SAACmM,GAC5BqzC,EAAOrzC,EACX,GAAG,CAACqzC,IAEJ,OACIptD,eAAC4a,KAAM,CACHxW,KAAMA,EACNY,QAASX,EACT4F,WAAS,EACTqxB,SAAS,KACT,kBAAgB,qCAChB,mBAAiB,2CAA0CxgC,SAAA,CAE3DU,cAACqf,KAAW,CAACpb,GAAG,qCAAoC3E,SAAE4B,EAAU,4CAChElB,cAAC0f,KAAa,CAAApgB,SACVU,cAAC2f,KAAiB,CAAArgB,SAAG4B,EAAU,gDAEnClB,cAACsf,KAAI,CACDC,SAAU8mC,EACVzV,cAAe4rD,EACfpsF,aAAc8N,GACdsB,yBAAuB,EACvBrP,OAAQ,SAAAsP,GAAS,OACbjb,eAAA,QAAAlF,SAAA,CACIU,cAAC0f,KAAa,CAAApgB,SACVkF,eAAA,OAAK7D,UAAW6B,EAAQ+zB,KAAKj3B,SAAA,CACzBU,cAACo8F,GAAU,CAACv7F,OAAO,QAAQ8B,MAAM,yCACjC3C,cAACs8F,GAAW,CAACz7F,OAAO,SAAS8B,MAAM,0CACnC3C,cAAC27F,GAAkB,CAAC96F,OAAO,gBAAgB8B,MAAM,sDAGzD6B,eAACqb,KAAa,CAAAvgB,SAAA,CACVU,cAAC8f,KAAM,CAAC3W,QAASN,EAAYvJ,SACxB4B,EAAU,mBAAoB,CAAEM,EAAG,aAExCxB,cAAC8f,KAAM,CAAC3W,QAASsW,EAAUM,aAAc5f,MAAM,UAASb,SACnD4B,EAAU,iBAAkB,CAAEM,EAAG,gBAGvC,MAK3B,E,eC9Cei7F,GA3CwB7yF,sBAAW,SAAC3I,EAAO4I,GACtD,IACIV,EAEAlI,EAFAkI,QACGrF,EAAIrE,YACPwB,EAAKvB,IACHwB,EAAYC,cAClBgH,EAAwBC,IAAMC,UAAS,GAAMC,EAAAzC,YAAAsC,EAAA,GAAtCS,EAAIN,EAAA,GAAEuP,EAAOvP,EAAA,GACpBmyF,EAAwDV,KAAuBW,EAAA70F,YAAA40F,EAAA,GAAxEiC,EAAoBhC,EAAA,GAAEiC,EAAuBjC,EAAA,GAE9Ch6E,EAActO,uBAAY,SAACtJ,GAC7B+O,GAAQ,GACR1O,GAAWA,EAAQL,EACvB,GAAG,CAAC+O,EAAS1O,IAEPN,EAAcuJ,uBAAY,WAC5ByF,GAAQ,EACZ,GAAG,CAACA,IAEEwuC,EAAaj0C,uBAAY,SAACmM,GAC5Bo+E,EAAwBp+E,GACxB1G,GAAQ,EACZ,GAAG,CAACA,EAAS8kF,IAEb,OACIn4F,eAAA8hB,WAAA,CAAAhnB,SAAA,CAEIU,cAACgJ,KAAO,CAAChE,MAAO9D,EAAU,sCAAuC+H,WAAY,IAAI3J,SAC7EU,cAACkJ,KAAUzH,wBAAA,CAAC0H,QAASuX,GAAiB5c,GAAI,IAAAxE,SACtCU,cAAC48F,KAAY,SAGrB58F,cAACu8F,GAA0B,CACvB3zF,KAAMA,EACNY,QAASX,EACT+oD,OAAQvL,EACRm2C,SAAUE,MAK1B,I,UCvCet/E,OARf,SAAcnc,GACZ,OACEjB,cAACqd,KAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,oRAGd,E,eC2Beu/E,GA1BoBjzF,sBAAW,SAAC3I,EAAO4I,GAClD,IACIV,EAEAlI,EAFAkI,QACGrF,EAAIrE,YACPwB,EAAKvB,IAEHwB,EAAYC,cAClBs5F,EAAoCV,KAAuBW,EAAA70F,YAAA40F,EAAA,GAAlDX,EAAQY,EAAA,GAARZ,SAAYc,EAAWF,EAAA,GAE1Bh6E,EAActO,uBAAY,SAACtJ,GAC7B8xF,GAAY,SAAAz7E,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAE26E,UAAW36E,EAAS26E,UAAQ,IAEpE3wF,GAAWA,EAAQL,EACvB,GAAG,CAACK,EAASyxF,IAGb,OACI56F,cAACgJ,KAAO,CAAChE,MAAO9D,EAAU,wBAAyB+H,WAAY,IAAI3J,SAC/DU,cAACkJ,KAAUzH,wBAAA,CAAC0H,QAASuX,GAAiB5c,GAAI,IAAAxE,SACrCw6F,EAAW95F,cAACwhB,KAAY,IAAMxhB,cAAC88F,GAAmB,QAInE,ICVMj7F,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCg7F,MAAO,CACHC,UAAW,kCACXC,gBAAiB,cAErB,mBAAoB,CAChB,KAAM,CAAEr6E,UAAW,2BACnB,MAAO,CAAEA,UAAW,2BACpB,MAAO,CAAEA,UAAW,4BACpB,MAAO,CAAEA,UAAW,6BACpB,MAAO,CAAEA,UAAW,2BACpB,MAAO,CAAEA,UAAW,4BACpB,GAAM,CAAEA,UAAW,4BAEvBs8B,OAAQ,CACJ3wC,MAAO,IACP4T,OAAQpgB,EAAMogB,OAAOod,OAE5B,GAAG,CAAEp9B,KAAM,0BAqFG+6F,GAnFa,SAACj8F,GACzB,IAAMuB,EAAUX,KACVX,EAAYC,cACZg8F,EAAYrrF,iBAAO,MACzBC,EAAgC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GAC5BwoF,EAAyD3hF,eAAjD4qE,EAAM+W,EAAN/W,OAAQS,EAASsW,EAATtW,UAAWS,EAAc6V,EAAd7V,eAAgBS,EAASoV,EAATpV,UAC3CgY,EAA6B7C,KAAba,GAAFgC,EAANprE,OAAgBorE,EAARhC,UAChBX,EAAuBV,KAAdD,EAAqCj0F,YAAA40F,EAAA,GAA7B,GAARX,SACHuD,EAAa70D,MAAMC,QAAQg7C,IAAWA,EAAO96E,OAAS,EAE5DqN,qBAAU,WACFkuE,GAAa4V,GAAwB,MAAZvxF,IACzBC,EAAY20F,EAAUrqF,SACtB6xE,IAGR,GAAG,CAACT,EAAW4V,EAAUvxF,IAEzB,IAKMM,EAAc,SAACC,EAAOs9C,GACT,kBAAXA,GACJ59C,EAAY,KAChB,EAEA,OACIhE,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIU,cAACgJ,KAAO,CAAChE,MAAO9D,EAAU,wBAAyB,CAAEM,EAAG,gBAAkByH,WAAY,IAAI3J,SACtFU,cAACkJ,KAAU,CACPW,IAAKszF,EACL,mBAAiB,cACjBh0F,QAhBI,SAACL,GACjBN,EAAYM,EAAMM,eAClBu7E,GACJ,EAaqCrlF,SACrBU,cAAC4kC,KAAK,CAACI,aAAck/C,EAAW/jF,MAAM,QAAQ+kC,QAAQ,cAAa5lC,SAC9D+9F,EACGjC,EAEQp7F,cAACs9F,KAAoB,CAACn9F,MAAOilF,EAAY,QAAU,UAAWzkF,UAAWkE,IAAU2P,YAAC,CAAC,EAAEhS,EAAQu6F,MAAQ7Y,EAAY,MAEnHlkF,cAACgmF,KAAuB,CAAC7lF,MAAOilF,EAAY,QAAU,UAAWzkF,UAAWkE,IAAU2P,YAAC,CAAC,EAAEhS,EAAQu6F,MAAQ7Y,EAAY,MAE1HlkF,cAACkmF,KAAqB,UAK1ClmF,cAACgjC,KAAM,CACH/+B,GAAG,cACHsE,SAAUA,EACVK,KAAM7C,QAAQwC,GACd06B,UAAU,eACVtiC,UAAW6B,EAAQ08C,OAAO5/C,SAE1BkF,eAACqoB,KAAK,CAAC0yB,UAAW,EAAEjgD,SAAA,CAChBU,cAAC0uB,KAAU,CACPzd,OACIzM,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIU,cAAC68F,GAA0B,IAC3B78F,cAACu9F,GAA0B,IAC3Bv9F,cAACw9F,GAAuB,IACxBx9F,cAACkJ,KAAU,CACP,aAAW,QACXC,QAASN,EAAYvJ,SAErBU,cAACy9F,KAAS,SAKtBz4F,MAAM,qEACN04F,qBAAsB,CAAEx9F,QAAS,WAErCF,cAACq7F,GAAqB,CAAClyF,QAASN,WAKpD,E,iCChHMhH,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC47F,SAAU,CACN17F,SAAU,KAEdirB,OAAQ,CAER,EACH,GAAG,CAAE/qB,KAAM,8BAENwH,GAAUvB,IAAMwB,YAAW,SAAC3I,EAAO4I,GAAG,OAAK7J,cAACK,KAAIoB,YAAA,CAACqI,SAAUD,EAAK4lD,UAAU,QAAWxuD,GAAS,IA6BrF28F,GA3BmBh0F,sBAAW,SAAC3I,EAAO4I,GACjD,IAAQ9I,EAAWE,EAAXF,OACAoB,EAAsBpB,EAAtBoB,KAAMgvC,EAAgBpwC,EAAhBowC,IAAKjkB,EAAWnsB,EAAXmsB,OACb1qB,EAAUX,KAChB,OACI2C,eAACO,KAAQtD,wBAAA,CACLrB,UAAWuJ,GACXE,IAAKA,EACLgsC,KAAM1E,EACN7mC,OAAO,SACPslD,IAAI,WACJzvD,MAAM,UACNqC,QAAS,CAAE8D,KAAM9D,EAAQm7F,WACrB18F,GAAK,IAAA3B,SAAA,CAGTU,cAAC69F,KAAc,CAAAv+F,SACXU,cAACwtB,KAAM,CAACttB,QAAQ,UAAU49F,IAAK37F,EAAM47F,IAAK7wE,EAAO5tB,SAC5C6C,EAAK67F,OAAO,GAAGC,kBAGxBj+F,cAACysD,KAAY,CAACtwB,QAASh6B,OAGnC,ICnCM+7F,GAAe,CACjBp5D,SAAU,SACVC,WAAY,UAGVo5D,GAAkB,CACpBr5D,SAAU,MACVC,WAAY,UAmDDq5D,GAhDW,SAACn9F,GACvB,IAAMC,EAAYC,cAClBgH,EAAgCC,IAAMC,SAAS,MAAKC,EAAAzC,YAAAsC,EAAA,GAA7CI,EAAQD,EAAA,GAAEE,EAAWF,EAAA,GACtBM,EAAO7C,QAAQwC,GACrB+/E,EAAsBC,aAAW,cAAe,CAAEvnE,KAAM,EAAGnC,QAAS,IAAM,CAAEpV,MAAO,KAAMqX,MAAO,QAAU,CAAE84D,UAAU,IAA9GpqE,EAAI84E,EAAJ94E,KACF6uF,EADW/V,EAAH/6E,IACWzH,QAAO,SAAA7B,GAAE,OAAIA,IAAOyD,GAAgB,IAAErC,KAAI,SAAApB,GAAE,OAAIuL,EAAKvL,EAAG,IAYjF,OAA4B,IAAxBo6F,EAAa11F,OAAqB,KAGlCnE,eAAA,OAAAlF,SAAA,CACIU,cAACgJ,KAAO,CAAChE,MAAO9D,EAAU,+BAAgC,CAAEM,EAAG,uBAAyByH,WAAY,IAAI3J,SACpGU,cAACkJ,KAAU,CACP/I,MAAM,UACN,gBAAc,0BACd,gBAAc,OACdgJ,QAnBI,SAACL,GACjBA,EAAMC,kBACNP,EAAYM,EAAMM,cACtB,EAgBqC9J,SAErBU,cAACs+F,KAAQ,QAGjBt+F,cAACuJ,KAAI,CACDtF,GAAG,0BACHsE,SAAUA,EACVs8B,aAAcq5D,GACdjB,gBAAiBkB,GACjB18E,mBAAoB,KACpB7Y,KAAMA,EACNY,QA1BQ,SAACV,GACjBA,EAAMC,kBACNP,EAAY,KAChB,EAuBiClJ,SAEpB++F,EAAah5F,KAAI,SAAAoC,GAAW,OACzBzH,cAAC49F,GAAyB,CAAsB78F,OAAQ0G,GAAxBA,EAAYxD,GAA2B,QAK3F,E,qBChEMs6F,GAAkB38E,wBAAc,CAClC48E,QAAS,KACTxzE,OAAQ,KACRpT,QAAS,KACTsS,QAAS,KACT5S,QAAS,OAGbinF,GAAgBt8E,YAAc,kBAEfs8E,U,WCVTE,GAAiB78E,wBAAc,CACjCi7C,QAAS,KACT7xC,OAAQ,KACRpT,QAAS,KACTsS,QAAS,KACT5S,QAAS,OAGbmnF,GAAex8E,YAAc,iBAEdw8E,I,YAAAA,M,gBCaAC,GApBgB,SAAHr/F,GAAgC,IAA1BC,EAAQD,EAARC,SAAa2B,EAAKxB,YAAAJ,EAAAK,IACxCi/F,EAAgD19F,EAAhD09F,SAAU3zE,EAAsC/pB,EAAtC+pB,OAAQpT,EAA8B3W,EAA9B2W,QAASsS,EAAqBjpB,EAArBipB,QAAS5S,EAAYrW,EAAZqW,QAEtC2E,EAAUjW,mBAAQ,iBAAO,CAC3B62D,QAAiB,OAAR8hC,QAAQ,IAARA,OAAQ,EAARA,EAAU9hC,QACnB7xC,SACApT,UACAsS,UACA5S,UACH,GAAG,CAACqnF,EAAU3zE,EAAQpT,EAASsS,EAAS5S,IAGzC,OACItX,cAACy+F,GAAezgD,SAAQ,CAAC18C,MAAO2a,EAAQ3c,SACnCA,GAGb,E,gBCGes/F,GApBgB,SAAHv/F,GAAgC,IAA1BC,EAAQD,EAARC,SAAa2B,EAAKxB,YAAAJ,EAAAK,IACxCi/F,EAAgD19F,EAAhD09F,SAAU3zE,EAAsC/pB,EAAtC+pB,OAAQpT,EAA8B3W,EAA9B2W,QAASsS,EAAqBjpB,EAArBipB,QAAS5S,EAAYrW,EAAZqW,QAEtC2E,EAAUjW,mBAAQ,iBAAO,CAC3B6rE,QAAiB,OAAR8sB,QAAQ,IAARA,OAAQ,EAARA,EAAU9sB,QACnB7mD,SACApT,UACAsS,UACA5S,UACH,GAAG,CAACqnF,EAAU3zE,EAAQpT,EAASsS,EAAS5S,IAGzC,OACItX,cAACi4F,GAAej6C,SAAQ,CAAC18C,MAAO2a,EAAQ3c,SACnCA,GAGb,ECfMu/F,GAA0B,SAAHx/F,GAAsC,IAAhCC,EAAQD,EAARC,SAAUw/F,EAAcz/F,EAAdy/F,eACzCC,EAAsCC,eAA9BL,EAAQI,EAARJ,SAAU3zE,EAAM+zE,EAAN/zE,OAAQpT,EAAOmnF,EAAPnnF,QAClBsS,EAAqB40E,EAArB50E,QAAS5S,EAAYwnF,EAAZxnF,QAEX2E,EAAUjW,mBAAQ,iBAAO,CAC3B24F,WACA3zE,SACApT,UACAsS,UACA5S,UACH,GAAG,CAACqnF,EAAU3zE,EAAQpT,EAASsS,EAAS5S,IAGzC,OACItX,cAACu+F,GAAgBvgD,SAAQ,CAAC18C,MAAO2a,EAAQ3c,SACrCU,cAAC0+F,GAAsBj9F,wBAAA,GAAKwa,GAAO,IAAA3c,SAC/BU,cAAC4+F,GAAsBn9F,wBAAA,GAAKwa,GAAO,IAAA3c,SAC9BA,SAKrB,EAoBe2/F,GAjB2B,SAACh+F,GAEvC,IAAA8Q,EAA8B1J,mBAAS,GAAE2J,EAAAnM,YAAAkM,EAAA,GAAlCmY,EAAOlY,EAAA,GAAE8xE,EAAU9xE,EAAA,GAEpB8sF,EAAiB94F,mBAAQ,iBAAO,CAClCkkB,UACA5S,QAAS,kBACLwsE,GAAW,SAAA9pE,GAAI,OAAIA,EAAO,CAAC,GAAC,EACnC,GAAG,CAACkQ,IAEL,OACIg1E,wBAACL,GAAuBp9F,wBAAA,GAAKR,GAAK,IAAE69F,eAAgBA,EAAgBv5F,IAAK2kB,IAEjF,ECxCei1E,GAFK,WAAH,OAAS3+F,qBAAW+9F,GAAiB,ECShD18F,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFuhB,cAAe,SACf1nB,MAAO4B,EAAMyE,QAAQ0lB,KAAKC,WAE9Be,OAAQ,CACJ9B,aAAc,GAErB,GAAG,CAAEjpB,KAAM,oBAqBGi9F,GAnBSh3F,IAAMwB,YAAW,SAAC3I,EAAO4I,GAAS,IAADw1F,EAC/C78F,EAAUX,GAAUZ,GAClB4wE,EAAYqmB,KAAZrmB,QACF3wE,EAAYC,cAElB,OAAK0wE,EAGDrtE,eAAC8nD,KAAQ,CAAC3rD,UAAW6B,EAAQ8D,KAAMuD,IAAKA,EAAIvK,SAAA,CACxCU,cAACwtB,KAAM,CAACttB,QAAQ,UAAUS,UAAW6B,EAAQ0qB,OAAO5tB,SAChDU,cAAC8iF,KAAU,CAACZ,YAAahhF,EAAU,4BAEvClB,cAACC,KAAU,CAACC,QAAQ,QAAQC,MAAM,cAAab,SAAEuyE,EAAQ1vE,OACzDnC,cAACC,KAAU,CAACC,QAAQ,QAAOZ,SAAG4B,EAAU,gCAADK,OAA6C,QAA7C89F,EAAiCxtB,EAAQ/pE,YAAI,IAAAu3F,OAAA,EAAZA,EAAcp7F,UARzE,IAWzB,I,+ECxBMuyF,GAAa5sF,sBAAW,SAAC3I,EAAO4I,GAAG,OACrC7J,cAACy2F,KAAOh1F,YAAA,CAACqI,SAAUD,GAAS5I,GAAS,IAInCY,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNuE,KAAM,CACFnG,MAAO4B,EAAMyE,QAAQ0lB,KAAKC,WAE9B20B,OAAQ,CACJ3gD,MAAO4B,EAAMyE,QAAQ0lB,KAAKiQ,SAE9BhyB,KAAM,CAAElI,SAAUF,EAAMG,QAAQ,IACnC,GACD,CAAEC,KAAM,0BA0CGm9F,GAvCa11F,sBAAW,SAAC3I,EAAO4I,GASvC5I,EAPAuB,QADJ,IAEI7B,EAMAM,EANAN,UAEAwI,GAIAlI,EALAq7E,SAKAr7E,EAJAkI,SAGGrF,GACH7C,EAHA01F,cAGA11F,EAFAs+F,aACO9/F,YACPwB,EAAKvB,KACH8C,EAAUX,GAAUZ,GAClB4wE,EAAYqmB,KAAZrmB,QACF3wE,EAAYC,cACZy1F,EAAgBxkF,uBAAY,SAAAzH,GAC9BxB,GAAWA,EAAQwB,EACvB,GAAG,CAACxB,IAEJ,OAAK0oE,EAGDrtE,eAACO,KAAQtD,wBAAA,CACLd,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,GACpCo2F,gBAAiBv0F,EAAQs+C,OACzB1gD,UAAWo2F,GACX3sF,IAAKA,EACL84B,SAAU,EACVpjC,GAAG,oBACCuE,GAAI,IACRqF,QAASytF,EAAct3F,SAAA,CAEvBU,cAACwK,KAAY,CAAC7J,UAAW6B,EAAQ2H,KAAK7K,SAClCU,cAAC8iF,KAAU,CAACZ,YAAahhF,EAAU,4BAEtCA,EAAU,4BAhBE,IAmBzB,I,qCC1DMs1F,GAAa5sF,sBAAW,SAAC3I,EAAO4I,GAAG,OACrC7J,cAACy2F,KAAOh1F,YAAA,CAACqI,SAAUD,GAAS5I,GAAS,IAInCY,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNuE,KAAM,CACFnG,MAAO4B,EAAMyE,QAAQ0lB,KAAKC,WAE9B20B,OAAQ,CACJ3gD,MAAO4B,EAAMyE,QAAQ0lB,KAAKiQ,SAE9BhyB,KAAM,CACFhK,MAAO,UACP8B,SAAUF,EAAMG,QAAQ,IAE/B,GACD,CAAEC,KAAM,wBAsCGq9F,GAnCa51F,sBAAW,SAAC3I,EAAO4I,GAMvC5I,EAJAuB,QADJ,IAEI7B,EAGAM,EAHAN,UACAwI,EAEAlI,EAFAkI,QACGrF,EAAIrE,YACPwB,EAAKvB,IACH8C,EAAUX,GAAUZ,GACpBC,EAAYC,cAEZy1F,EAAgBxkF,uBAAY,SAAAzH,GAC9BxB,GAAWA,EAAQwB,EACvB,GAAG,CAACxB,IAGJ,OACI3E,eAACO,KAAQtD,wBAAA,CACLd,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,GACpCo2F,gBAAiBv0F,EAAQs+C,OACzB1gD,UAAWo2F,GACX3sF,IAAKA,EACL84B,SAAU,EACVpjC,GAAG,oBACCuE,GAAI,IACRqF,QAASytF,EAAct3F,SAAA,CAEvBU,cAACwK,KAAY,CAAC7J,UAAW6B,EAAQ2H,KAAK7K,SAClCU,cAACy/F,KAAW,CAACvd,YAAahhF,EAAU,4BAEvCA,EAAU,2BAGvB,I,oBC/DMw+F,GAAkB,SAAAC,GAAAt6E,YAAAq6E,EAAAC,GAAA,IAAAr6E,EAAAC,YAAAm6E,GACpB,SAAAA,EAAYltF,EAAS09C,GAAa,IAAD1qC,EAGD,OAHCtM,YAAA,KAAAwmF,IAC7Bl6E,EAAAF,EAAAG,KAAA,KAAMjT,IACDrQ,KAAO,qBACZqjB,EAAK0qC,WAAaA,EAAU1qC,CAChC,CAAC,OAAAxM,YAAA0mF,EAAA,CALmB,CAKnBE,aAL4BvyF,QA8BlBwyF,GATM,SAAHxgG,GAAsB,IAADygG,EAAAC,EAbdx6F,EAAK+H,EAaNiiC,EAAQlwC,EAARkwC,SACdlrC,EAAgB,OAARkrC,QAAQ,IAARA,OAAQ,EAARA,EAAU6R,OAAO,GACzB4+C,EAAiB,OAAL37F,QAAK,IAALA,GAAiB,QAAZy7F,EAALz7F,EAAO6rD,kBAAU,IAAA4vC,OAAZ,EAALA,EAAmBxyF,KAC/B2yF,EAAyB,OAAL57F,QAAK,IAALA,GAAiB,QAAZ07F,EAAL17F,EAAO6rD,kBAAU,IAAA6vC,OAAZ,EAALA,EAAmBG,cACvC1tF,GAjBoBlF,EAiByB0yF,GAjB9Bz6F,EAiBW06F,GAhBjB,WAAN1+F,OAAkBgE,GAIpB+H,GAFY,CAAC,uBAGHwmB,SAASxmB,GAAK,WAAA/L,OACV+L,GAEf,+BASA4X,EAAmB,OAAL7gB,QAAK,IAALA,OAAK,EAALA,EAAO6rD,WAC3B,MAAM,IAAIwvC,GAAmBltF,EAAS0S,EAC1C,ECtBMi7E,GAAqBvjF,aAAGC,QAAAC,aAAA,0dAsBf,YAACg2B,GACZ,OAAOC,KAAcz5B,QAAQ6mF,GAAoBrtD,GAC5C1lC,MAAK,SAAAmiC,GAAQ,OAAY,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,IAAI,IAC/B0jC,MAAM2sD,GACd,E,eCZKh+F,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC+F,KAAM,CACFgjB,WAAY,IAEhB3gB,KAAM,CACFlI,SAAUF,EAAMG,QAAQ,IAE/B,GAAG,CAAEC,KAAM,iCAkDGi+F,GAhDsB,SAACn/F,GAClC,IACI4wE,EAEA5wE,EAFA4wE,QACG/tE,EAAIrE,YACPwB,EAAKvB,IACH8C,EAAUX,GAAUZ,GACpBC,EAAYC,cACVmW,EAAY4gF,KAAZ5gF,QAwBR,OACI9S,eAACO,KAAQtD,wBAAA,CACLd,UAAWkE,IAAWrC,EAAQ8D,MAC9B6C,QAzBY,WAChBk3F,GAAU,CAAExuB,QAAS,CAAE5tE,GAAI4tE,EAAQ5tE,MAC9BmJ,MAAK,SAAAw0D,GACF0+B,aAAUC,IAA4B3+B,EAAc/nD,MAAO,CAAE2mF,OAAQC,MACrEH,aAAUI,IAAoC9+B,EAAc++B,aAAc,CAAEH,OAAQC,MACpFnpF,GASJ,IACC47B,OAAM,SAAA7uC,GAGH,MAFAu8F,aAAaL,IAA4B,CAAEC,OAAQC,MACnDG,aAAaF,IAAoC,CAAEF,OAAQC,MACrDp8F,CACV,GACR,EAMQs+B,SAAU,GACN7+B,GAAI,IAAAxE,SAAA,CAERU,cAACwK,KAAY,CAAC7J,UAAW6B,EAAQ2H,KAAK7K,SAClCU,cAAC8iF,KAAU,CAACZ,YAAahhF,EAAU,4BAEvClB,cAACysD,KAAY,CAAAntD,SAAGuyE,EAAQ1vE,OACxBnC,cAACC,KAAU,CAACU,UAAW6B,EAAQsF,KAAM5H,QAAQ,QAAQC,MAAM,gBAAeb,SAAGuyE,EAAQ/pE,KAAK3F,UAGtG,ECpCe0+F,GA9Be,SAAC5/F,GAAW,IAAD6/F,EAAAC,EAC7BlvB,EAAYqmB,KAAZrmB,QACRyW,EAAsBC,aAClB,eACAx9E,OACAA,EACA,CACItD,YAAa,CAAExD,GAAIyD,KACnBm1D,QAAS,CAAE54D,GAAW,OAAP4tE,QAAO,IAAPA,GAAgB,QAATivB,EAAPjvB,EAAShV,eAAO,IAAAikC,OAAT,EAAPA,EAAkB78F,KAErC,CACIwQ,QAAS1O,QAAe,OAAP8rE,QAAO,IAAPA,GAAgB,QAATkvB,EAAPlvB,EAAShV,eAAO,IAAAkkC,OAAT,EAAPA,EAAkB98F,MATnCuL,EAAI84E,EAAJ94E,KAAMjC,EAAG+6E,EAAH/6E,IAad,IAAKskE,EAAS,OAAO,KAErB,IAAM9S,EAAWxxD,EAAIzH,QAAO,SAAA7B,GAAE,OAAIA,IAAO4tE,EAAQ5tE,IAAMuL,EAAKvL,GAAIwD,YAAYxD,KAAO4tE,EAAQpqE,YAAYxD,EAAE,IAAEoB,KAAI,SAAApB,GAAE,OAAIuL,EAAKvL,EAAG,IAE7H,OAAwB,IAApB86D,EAASp2D,OAAqB,KAG9B3I,cAAAsmB,WAAA,CAAAhnB,SACKy/D,EAAS15D,KAAI,SAAAwsE,GAAO,OACjB7xE,cAACogG,GAA4B,CAAkBvuB,QAASA,GAArBA,EAAQ5tE,GAAwB,KAInF,E,+ECvBMpC,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFnG,MAAO4B,EAAMyE,QAAQ0lB,KAAKC,WAE9BhiB,KAAM,CACFhK,MAAO,UACP8B,SAAUF,EAAMG,QAAQ,IAE/B,GAAG,CAAEC,KAAM,0BAiCG6+F,GA/Bep3F,sBAAW,SAAC3I,EAAO4I,GAMzC5I,EAJAuB,QADJ,IAEI7B,EAGAM,EAHAN,UACAwI,EAEAlI,EAFAkI,QACGrF,EAAIrE,YACPwB,EAAKvB,IACH8C,EAAUX,GAAUZ,GACpBC,EAAYC,cAClBuQ,EAA0BE,aAAe,QAAS,SAAQ0lF,EAAAzxF,YAAA6L,EAAA,GAAnD3P,EAAKu1F,EAAA,GAAE5uE,EAAQ4uE,EAAA,GAEhB2J,EAA0B7uF,uBAAY,SAAAzH,GACxC+d,EAAmB,UAAV3mB,EAAoB,OAAS,SACtCoH,GAAWA,EAAQwB,EACvB,GAAG,CAAC5I,EAAO2mB,EAAUvf,IAErB,OACI3E,eAACO,KAAQtD,wBAAA,CACLd,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,GACpCwI,QAAS83F,GACLn9F,GAAI,IAAAxE,SAAA,CAERU,cAACwK,KAAY,CAAC7J,UAAW6B,EAAQ2H,KAAK7K,SACvB,UAAVyC,EAAoB/B,cAACkhG,KAAe,IAAMlhG,cAACmhG,KAAe,MAE9DjgG,EAAU,GAADK,OAAc,UAAVQ,EAAoB,0BAA4B,8BAG1E,IC5BMqI,GAAcpK,cAACohG,KAAa,IAE5Bv/F,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNs/F,KAAM,CAAC,EACPC,WAAY,CACRC,cAAe,QAEnBr0E,OAAQ,CACJ3e,MAAOxM,EAAMG,QAAQ,GACrBsP,OAAQzP,EAAMG,QAAQ,IAE7B,GACD,CAAEC,KAAM,eAGN+7F,GAAe,CACjBp5D,SAAU,SACVC,WAAY,SAGVo5D,GAAkB,CACpBr5D,SAAU,MACVC,WAAY,SA6FDy8D,GA1FE,SAACvgG,GACd,IAAA8Q,EAAgC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GACtB9Q,EAAYC,cACVw9F,EAAaQ,KAAbR,SACFn8F,EAAUX,GAAUZ,GAGtB3B,EAIA2B,EAJA3B,SAAQwM,EAIR7K,EAHA0B,aAAK,IAAAmJ,EAAG,oBAAmBA,EAAAG,EAG3BhL,EAFAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EAClBga,EACAhlB,EADAglB,OAGJ,IAAKA,IAAW3mB,EAAU,OAAO,KACjC,IAAMsJ,EAAO7C,QAAQwC,GAEfmY,EAAc,SAAC5X,GACjBN,EAAYM,EAAMM,cACtB,EAEMP,EAAc,WAChBL,EAAY,KAChB,EAEA,OACIhE,eAAA,OAAK7D,UAAW6B,EAAQ6+F,KAAK/hG,SAAA,CACxBq/F,EACG3+F,cAAC8f,KAAM,CACH,aAAYnd,GAASzB,EAAUyB,EAAO,CAAEnB,EAAGmB,IAC3ChC,UAAW6B,EAAQ8+F,WACnBnhG,MAAM,UACNshG,UACI9C,EAASzxE,OACLltB,cAACwtB,KAAM,CACH7sB,UAAW6B,EAAQ0qB,OACnB6wE,IAAKY,EAASzxE,OACd4wE,IAAKa,EAAS+C,WAGlBv3F,EAGRhB,QAASuX,EAAYphB,SAEpBq/F,EAAS+C,WAGd1hG,cAACgJ,KAAO,CAAChE,MAAOrC,GAASzB,EAAUyB,EAAO,CAAEnB,EAAGmB,IAASrD,SACpDU,cAACkJ,KAAU,CACP,aAAYvG,GAASzB,EAAUyB,EAAO,CAAEnB,EAAGmB,IAC3C,YAAWiG,EAAO,cAAgB,KAClC,iBAAe,EACfzI,MAAM,UACNgJ,QAASuX,EAAYphB,SAEpB6K,MAIb3F,eAAC+E,KAAI,CACDtF,GAAG,cACH09F,mBAAiB,EACjBp5F,SAAUA,EACVs8B,aAAcq5D,GACdjB,gBAAiBkB,GACjBjqE,aAAW,EACXzS,mBAAoB,KACpB7Y,KAAMA,EACNY,QAASX,EAAYvJ,SAAA,CAErBU,cAACo/F,GAAe,IAChBp/F,cAACs/F,GAAmB,CAACn2F,QAASN,IAC9B7I,cAAC6gG,GAAqB,IACtB7gG,cAACw/F,GAAmB,CAACr2F,QAASN,IAC9B7I,cAACghG,GAAqB,IACtBhhG,cAAC6wC,KAAO,CAACz4B,MAAO,CAAEgT,aAAc,EAAGnD,UAAW,KAC7ChC,OAIjB,ECzGe27E,GAlBM,WACjB,IAAA7vF,EAAwB1J,mBAASiE,YAASC,MAAMs1F,UAAU,OAAM7vF,EAAAnM,YAAAkM,EAAA,GAAzD+vF,EAAI9vF,EAAA,GAAE+vF,EAAO/vF,EAAA,GAEpB,SAASgwF,IACLD,EAAQz1F,YAASC,MAAMs1F,UAAU,MACrC,CAOA,OANA7rF,qBAAU,WACN,IAAMisF,EAAU9vE,YAAY6vE,EAAc,KAC1C,OAAO,WACH5vE,cAAc6vE,EAClB,CACJ,GAAG,IAECjiG,cAACgJ,KAAO,CAAChE,MAAO88F,EAAKt1F,eAAeF,YAAS41F,WAAW5iG,SACpDU,cAACC,KAAU,CAACC,QAAQ,KAAKkY,MAAO,CAAEiQ,YAAa,GAAIwD,aAAc,GAAIzD,WAAY,EAAGwD,cAAe,GAAItsB,SAAEwiG,EAAKt1F,eAAeF,YAAS61F,sBAGlJ,E,iFCNMtgG,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC+jB,OAAQ,CACJ3lB,MAAO4B,EAAMyE,QAAQ0lB,KAAKC,UAC1B5lB,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyX,OAC1CyR,UAAW,+HAEf+G,QAAS,CAET,EACAt5B,MAAO,CACHsyB,KAAM,EACN4I,aAAc,WACdkiE,WAAY,SACZniE,SAAU,SACV9/B,MAAO4B,EAAMyE,QAAQ0lB,KAAKiQ,SAEjC,GACG,CAAEh6B,KAAM,aAyCGkgG,GArCE,SAACphG,GAWVA,EATA3B,SASA2B,EARAuB,QAFJ,IAGI7B,EAOAM,EAPAN,UAAS2hG,EAOTrhG,EANAd,aAAK,IAAAmiG,EAAG,YAAWA,EACnBr8E,EAKAhlB,EALAglB,OACArd,EAIA3H,EAJA2H,KAGG9E,GACH7C,EAHA+D,MAGA/D,EAFAshG,SACO9iG,YACPwB,EAAKvB,KACH8C,EAAUX,KAEV2gG,EAAWtwC,cAAc,SAAAnwD,GAAK,OAChCA,EAAM2gB,YAAYwF,KAAK,KAAK,IAGhC,OACIloB,cAACoI,IAAM8P,SAAQ,CAAA5Y,SACXU,cAACyiG,KAAY,CAAAnjG,SACTU,cAAC0iG,KAAMjhG,wBAAA,CAACd,UAAWkE,IAAWlE,EAAW6B,EAAQsjB,QAAS3lB,MAAOA,GAAW2D,GAAI,IAAAxE,SAC5EkF,eAACwnB,KAAO,CAAC9rB,QAASsiG,EAAW,UAAY,QAAS7hG,UAAW6B,EAAQ87B,QAAQh/B,SAAA,CACzEU,cAACk5F,GAAmB,CAACtwF,KAAMA,EAAMoV,KAAK,UACtChe,cAACC,KAAU,CAACC,QAAQ,KAAKC,MAAM,UAAUQ,UAAW6B,EAAQwC,MAAOf,GAAG,sBACtEjE,cAAC4hG,GAAY,IACb5hG,cAACk9F,GAAmB,IACpBl9F,cAACo+F,GAAiB,IAClBp+F,cAAC2iG,KAAgB,CAAC3kF,KAAK,QACvBhe,cAACwhG,GAAQ,CAACv7E,OAAQA,aAM1C,ECvDe28E,GAZkB,SAAHvjG,GAA6B,IAAvBC,EAAQD,EAARC,SAAUgC,EAAKjC,EAALiC,MAC1C,OACItB,cAAC2hB,EAAiBq8B,SAAQ,CAAC18C,MAAOA,EAAMhC,SACnCA,GAIb,E,sDCLMujG,GAAiB,CACnBC,MAAO,EACPC,aAAc,EACdC,aAAc,EACdC,WAAY,EACZC,YAAa,EACbC,UAAW,EACXC,KAAM,GA6MKC,GAjMgB,WAE3B,IAAAtxF,EAA0B1J,mBAAS,CAC/BwZ,OAAQ,OACRC,WAAY,KACZC,UAAW,KACX1d,MAAO,OACT2N,EAAAnM,YAAAkM,EAAA,GALKrF,EAAKsF,EAAA,GAAE4T,EAAQ5T,EAAA,GAOtBkP,EAA8C7Y,mBAAS,CACnDpE,GAAI,kBACJ9B,KAAM,kFACN0f,OAAQ,OACRC,WAAY,KACZC,UAAW,KACX1d,MAAO,OACT8c,EAAAtb,YAAAqb,EAAA,GAPKoiF,EAAeniF,EAAA,GAAEoiF,EAAkBpiF,EAAA,GAS1CqiF,EAA4Cn7F,mBAAS,CACjDpE,GAAI,iBACJ9B,KAAM,4EACN0f,OAAQ,OACRC,WAAY,KACZC,UAAW,KACX1d,MAAO,OACTo/F,EAAA59F,YAAA29F,EAAA,GAPKE,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAuKxC,OA9JAztF,qBAAU,WAEN4tF,GAAwB9hC,GAAG,aAAa,WACpC1V,QAAQC,IAAI,qCACZk3C,GAAmB,SAACM,GAChB,MAAoB,iBAAhBA,EAAKhiF,OACE,CACH5d,GAAI,kBACJ9B,KAAM,kFACN0f,OAAQ,cACRC,YAAY,EACZC,WAAW,GAGR,CACH9d,GAAI,kBACJ9B,KAAM,kFACN0f,OAAQ,YACRC,YAAY,EACZC,WAAW,EAGvB,GACJ,IAEA6hF,GAAwB9hC,GAAG,cAAc,WACrC1V,QAAQC,IAAI,sCACZk3C,GAAmB,SAACM,GAChB,MAAoB,UAAhBA,EAAKhiF,OACE,CACH5d,GAAI,kBACJ9B,KAAM,kFACN0f,OAAQ,eACRC,YAAY,EACZC,WAAW,GAGR,CACH9d,GAAI,kBACJ9B,KAAM,kFACN0f,OAAQ,aACRC,YAAY,EACZC,WAAW,EAGvB,GACJ,IAEA6hF,GAAwB9hC,GAAG,SAAS,SAACz9D,GACjC+nD,QAAQC,IAAI,iCACZk3C,EAAmB,CACft/F,GAAI,kBACJ9B,KAAM,kFACN0f,OAAQ,QACRC,YAAY,EACZC,WAAW,EACX1d,SAER,IAEAu/F,GAAwB9hC,GAAG,UAAU,WACjC1V,QAAQC,IAAI,iCAChB,IAEAu3C,GAAwB9hC,GAAG,UAAU,WACjC1V,QAAQC,IAAI,iCAChB,GAEJ,GAAG,CAACk3C,IAGJvtF,qBAAU,WAEN8tF,KAAuBhiC,GAAG,aAAa,WACnC1V,QAAQC,IAAI,oCACZs3C,GAAkB,SAACE,GACf,MAAoB,iBAAhBA,EAAKhiF,OACE,CACH5d,GAAI,iBACJ9B,KAAM,kFACN0f,OAAQ,cACRC,YAAY,EACZC,WAAW,GAGR,CACH9d,GAAI,iBACJ9B,KAAM,kFACN0f,OAAQ,YACRC,YAAY,EACZC,WAAW,EAGvB,GACJ,IAEA+hF,KAAuBhiC,GAAG,cAAc,WACpC1V,QAAQC,IAAI,qCACZs3C,GAAkB,SAACE,GACf,MAAoB,UAAhBA,EAAKhiF,OACE,CACH5d,GAAI,iBACJ9B,KAAM,kFACN0f,OAAQ,eACRC,YAAY,EACZC,WAAW,GAGR,CACH9d,GAAI,iBACJ9B,KAAM,kFACN0f,OAAQ,aACRC,YAAY,EACZC,WAAW,EAGvB,GACJ,IAEA+hF,KAAuBhiC,GAAG,SAAS,SAACz9D,GAChC+nD,QAAQC,IAAI,gCACZs3C,EAAkB,CACd1/F,GAAI,iBACJ9B,KAAM,kFACN0f,OAAQ,QACRC,YAAY,EACZC,WAAW,EACX1d,SAER,IAEAy/F,KAAuBhiC,GAAG,UAAU,WAChC1V,QAAQC,IAAI,gCAChB,IAEAy3C,KAAuBhiC,GAAG,UAAU,WAChC1V,QAAQC,IAAI,gCAChB,GAEJ,GAAG,CAACs3C,IAEJ3tF,qBAAU,WACN,IAAM6L,EAlLU,SAACkiF,GACrB,IAAI9tB,EAAS,OAKb,OAHA8tB,EAAS75D,SAAQ,SAAAM,GACbyrC,EAAS4sB,GAAer4D,GAAKq4D,GAAe5sB,GAAUzrC,EAAIyrC,CAC9D,IACOA,CACX,CA2KuB+tB,CAAgB,CAACV,EAAgBzhF,OAAQ6hF,EAAe7hF,SACjEC,EAAayb,KAAI,CAAC+lE,EAAgBxhF,WAAY4hF,EAAe5hF,aAC7DC,EAAYmb,KAAI,CAAComE,EAAgBvhF,UAAW2hF,EAAe3hF,YAC3Dq/B,EAAS,CAACkiD,EAAgBj/F,MAAOq/F,EAAer/F,OAAOyB,OAAOC,SAC9D1B,EAAQ+8C,EAAOz4C,OAAS,EAAIy4C,EAAO91C,KAAK,MAAQ,KAEtDsa,EAAS,CACL/D,SACAC,aACAC,YACA1d,SAGR,GAAG,CAACuhB,EAAU09E,EAAiBI,IAG/BjiG,wBAAA,GACOiL,GAAK,IACRsV,SAAU,CAACshF,EAAiBI,IAEpC,E,UCtMeO,GAbc,SAAH5kG,GAA6B,IAAvBC,EAAQD,EAARC,SAAUgC,EAAKjC,EAALiC,MAEhC2a,EAAUjW,mBAAQ,kBAAAvE,YAAC,CAAD,EACjBH,EAAK,GACR,CAACA,IAEL,OACItB,cAAC8Y,KAAaklC,SAAQ,CAAC18C,MAAO2a,EAAQ3c,SACjCA,GAGb,E,gCCNIiW,GAAgB,CAAC,EAiDN2uF,GA/CoB,WAC/B,IAAQryB,EAAYqmB,KAAZrmB,QAER9/D,EAA8B1J,mBAASkN,IAAcvD,EAAAnM,YAAAkM,EAAA,GAA9CkE,EAAOjE,EAAA,GAAEmyF,EAAUnyF,EAAA,GAE1BgE,qBAAU,WACNT,GAAgB,CAAC,CACrB,GAAG,CAACs8D,IAiCJ,MAAO,CACH57D,UACAR,QAjCYrD,uBAAY,SAAC7M,EAAKqK,GAc9B,OAbKw0F,KAAI7uF,GAAehQ,KACpBwoC,KAAIx4B,GAAehQ,EAAKqK,GACxBiuD,GAAe,CAAEt4D,QACZ6H,MAAK,SAAA/N,GAAe,IAAZmQ,EAAInQ,EAAJmQ,KACA60F,KAAM70F,EAAKuI,WACZg2B,KAAIx4B,GAAe/F,EAAKjK,IAAKiK,EAAKuI,SAClCosF,EAAU1iG,YAAC,CAAC,EAAI8T,KAExB,IAAG29B,OAAM,SAAA7uC,GACL+nD,QAAQk4C,KAAK,uCAAD/iG,OAAmCgE,EAAG,WAAMlB,EAC5D,KAGDhD,KAAIkU,GAAehQ,EAAKqK,EACnC,GAAG,CAACu0F,IAmBApuF,QAjBY,SAACxQ,EAAKwS,GAClBg2B,KAAIx4B,GAAehQ,EAAKwS,GACxBosF,EAAU1iG,YAAC,CAAC,EAAI8T,KAChBioD,GAAe,CAAEj4D,MAAKwS,YACjB3K,MAAK,SAAAgE,GAAe,IAAZ5B,EAAI4B,EAAJ5B,KACAM,KAAQiI,EAASvI,EAAKuI,WACvBg2B,KAAIx4B,GAAe/F,EAAKjK,IAAKiK,EAAKuI,SAClCosF,EAAU1iG,YAAC,CAAC,EAAI8T,KAExB,IAAG29B,OAAM,SAAA7uC,GACL+nD,QAAQk4C,KAAK,sCAAD/iG,OAAkCgE,EAAG,WAAMlB,EAC3D,GACR,EAOJ,ECzCekgG,GAXsB,SAAHllG,GAAsB,IAAhBC,EAAQD,EAARC,SAC9B2c,EAAUioF,KAChB,OACIlkG,cAACwkG,KAAqBxmD,SAAQ,CAAC18C,MAAO2a,EAAQ3c,SACzCA,GAGb,ECYemlG,I,OAdE,SAACxjG,GACd,OACIjB,cAAC6+F,GAAuB,CAAAv/F,SACpBU,cAAC4iG,GAAwB,CAACthG,MAAO+hG,KAAyB/jG,SACtDU,cAACikG,GAAoB,CAAC3iG,MAAOqiF,KAAqBrkF,SAC9CU,cAACukG,GAA4B,CAAAjlG,SACzBU,cAACsoB,GAAM7mB,wBAAA,GAAKR,GAAK,IAAE6kB,OAAQ48E,GAAQx8E,KAAMiyE,aAMjE,G,wECnBMuM,GAAS,CACX9/E,MAAO+/E,aAAY,CACfn+F,QAAS,CACLC,KAAM,QACN01B,QAAS,CACLhmB,KAAM,UACNsO,aAAc,QAElBD,QAAS,CACLrO,KAAMguB,KAAM,KACZvf,MAAOuf,KAAM,KACbzf,KAAM,WAEVrW,WAAY,CACR0Z,QAAS,UACTjC,OAAQ,WAEZkI,KAAM,CACF7X,KAAM,WAEVyuF,SAAU,CACNhgF,MAAOqV,KAAI,KACX9jB,KAAM8jB,KAAI,MAEd4qE,KAAM,CACFjgF,MAAOkgF,KAAO,KACd3uF,KAAM2uF,KAAO,MAEjBC,OAAQ,CACJngF,MAAOogF,KAAO,KACd7uF,KAAM6uF,KAAO,MAEjBC,IAAK,CACDrgF,MAAOof,KAAK,KACZ7tB,KAAM6tB,KAAK,MAEfkhE,KAAM,CACFtgF,MAAOle,KAAK,KACZyP,KAAMzP,KAAK,MAEf81B,aAAc,CACVppB,OAAQ,CAAC4wB,KAAK,KAAMM,KAAK,KAAMH,KAAM,KAAMK,KAAM,KAAMsgE,KAAO,KAAMK,KAAK,KAAMlrE,KAAI,KAAM+qE,KAAO,KAAMI,KAAW,KAAMC,KAAO,OAElIC,OAAQ,CACJnvF,KAAM6tB,KAAK,KACXvf,aAAc,SAGtB8gF,QAAS,CACL,OACA,8HACA,0HACA,qGACA,sGACA,sGACA,uGACA,uGACA,uGACA,uGACA,wGACA,wGACA,wGACA,wGACA,wGACA,wGACA,yGACA,yGACA,yGACA,yGACA,0GACA,0GACA,0GACA,0GACA,2GAEJp/E,QAAS,CACL5X,MAAO,IACPi3F,YAAa,IAEjBt/E,KAAM,CACF3X,MAAO,IACPi3F,YAAa,IAEjBC,UAAW,CACPC,OAAQ,CACJ13E,KAAM,CACF,UAAW,CACP23E,eAAgB,eAI5BC,eAAgB,CACZt/F,KAAM,CACFC,gBAAiB,sBACjB,aAAc,CACVA,gBAAiB,yBAI7Bs/F,cAAe,CACXv/F,KAAM,CACF,wBAAyB,CAKrBiS,QAAS,KACTjK,QAAS,QACTC,MAAO,OACPiD,OAAQ,OACR1D,SAAU,WACVuU,IAAK,EACLE,MAAO,EACPhc,gBAAiB,eACjBmkB,QAAS,GACTo4B,aAAc,aAI1BgjD,UAAW,CACPC,QAAS,CACLjjD,aAAc,IAQtBkjD,aAAc,CACVC,UAAW,CACPh4F,QAAS,UACT,gBAAiB,CACboa,YAAa,IAEjB,eAAgB,CACZwD,aAAc,MAI1Bq6E,QAAS,CACL5/F,KAAM,CACFzD,OAAQ,EACRigD,aAAc,IAGtBqjD,YAAa,CACT3mE,KAAM,CACF38B,OAAQ,EACRigD,aAAc,KAI1B7hD,MAAO,CACH4kG,cAAe,CACXje,eAAe,MAI3BljE,KAAMigF,aAAY,CACdn+F,QAAS,CACL21B,QAAS,CACLhmB,KAAM,UACNsO,aAAc,QAElBD,QAAS,CACLrO,KAAMguB,KAAM,KACZvf,MAAOuf,KAAM,KACbzf,KAAM,WAEVyH,UAAW,CACPhW,KAAM,WAEVyuF,SAAU,CACNzuF,KAAM8jB,KAAI,KACVvV,KAAM,WAEVmgF,KAAM,CACF1uF,KAAM2uF,KAAO,KACbpgF,KAAM,WAEVqgF,OAAQ,CACJ5uF,KAAM6uF,KAAO,KACbtgF,KAAM,WAEVugF,IAAK,CACD9uF,KAAM6tB,KAAK,KACXtf,KAAM,WAEVwgF,KAAM,CACF/uF,KAAMzP,KAAK,KACXge,KAAMhe,KAAK,MAEf81B,aAAc,CACVppB,OAAQ,CAAC4wB,KAAK,KAAMM,KAAK,KAAMH,KAAM,KAAMK,KAAM,KAAMsgE,KAAO,KAAMK,KAAK,KAAMlrE,KAAI,KAAM+qE,KAAO,KAAMI,KAAW,KAAMC,KAAO,OAElIC,OAAQ,CACJnvF,KAAM6tB,KAAK,KACXvf,aAAc,QAElBhe,KAAM,QAEV0f,QAAS,CACL5X,MAAO,IACPi3F,YAAa,IAEjBt/E,KAAM,CACF3X,MAAO,IACPi3F,YAAa,IAEjBC,UAAW,CACPC,OAAQ,CACJ13E,KAAM,CACF,UAAW,CACP23E,eAAgB,eAI5BS,UAAW,CACPC,eAAgB,CACZlmG,MAAO,YACPoG,gBAAiB,cAGzBs/F,cAAe,CACXv/F,KAAM,CACF,wBAAyB,CAKrBiS,QAAS,KACTjK,QAAS,QACTC,MAAO,OACPiD,OAAQ,OACR1D,SAAU,WACVuU,IAAK,EACLE,MAAO,EACPhc,gBAAiB,eACjBmkB,QAAS,GACTo4B,aAAc,aAI1BgjD,UAAW,CACPC,QAAS,CACLjjD,aAAc,IAGtBkjD,aAAc,CACVC,UAAW,CACPh4F,QAAS,UACT,gBAAiB,CACboa,YAAa,IAEjB,eAAgB,CACZwD,aAAc,MAI1Bq6E,QAAS,CACL5/F,KAAM,CACFzD,OAAQ,EACRigD,aAAc,KAI1B7hD,MAAO,CACH4kG,cAAe,CAEXje,eAAe,OAMlB0e,GAAqB,SAAC7/F,GAE/B,OAAOi+F,GAAOj+F,EAClB,EAIei+F,M,oBC9RT6B,GAAmB,SAAA5G,GAAAt6E,YAAAkhF,EAAA5G,GAAA,IAAAr6E,EAAAC,YAAAghF,GACrB,SAAAA,EAAY/zF,EAAS09C,GAAa,IAAD1qC,EAGD,OAHCtM,YAAA,KAAAqtF,IAC7B/gF,EAAAF,EAAAG,KAAA,KAAMjT,IACDrQ,KAAO,sBACZqjB,EAAK0qC,WAAaA,EAAU1qC,CAChC,CAAC,OAAAxM,YAAAutF,EAAA,CALoB,CAKpB3G,aAL6BvyF,QA+BnBwyF,GATM,SAAHxgG,GAAsB,IAADygG,EAAAC,EAbdx6F,EAAK+H,EAaNiiC,EAAQlwC,EAARkwC,SACdlrC,EAAgB,OAARkrC,QAAQ,IAARA,OAAQ,EAARA,EAAU6R,OAAO,GACzB4+C,EAAiB,OAAL37F,QAAK,IAALA,GAAiB,QAAZy7F,EAALz7F,EAAO6rD,kBAAU,IAAA4vC,OAAZ,EAALA,EAAmBxyF,KAC/B2yF,EAAyB,OAAL57F,QAAK,IAALA,GAAiB,QAAZ07F,EAAL17F,EAAO6rD,kBAAU,IAAA6vC,OAAZ,EAALA,EAAmBG,cACvC1tF,GAjBoBlF,EAiByB0yF,GAjB9Bz6F,EAiBW06F,GAhBjB,WAAN1+F,OAAkBgE,GAIpB+H,GAFY,CAAC,uBAAwB,qCAAsC,UAGjEwmB,SAASxmB,GAAK,WAAA/L,OACV+L,GAEf,gCASA4X,EAAmB,OAAL7gB,QAAK,IAALA,OAAK,EAALA,EAAO6rD,WAC3B,MAAM,IAAIq2C,GAAoB/zF,EAAS0S,EAC3C,ECvBMshF,GAAiB5pF,aAAGC,QAAAC,aAAA,kXCApB/D,GAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,iBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,aAAAC,eAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,eAAa,KAAD,EAG7B,OAHGL,EAAKE,EAAAI,KACXhB,EAAOstF,WAAW,CAChB7kC,cAAe/nD,EAAK,UAAAtY,OAAasY,GAAU,KAC1CE,EAAAM,OAAA,SAEIlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EAPW,EAQd,IAOaqO,GAJA,IAAIJ,GAAyB4jD,KClBtCwjC,GAAqBvjF,aAAGC,QAAAC,aAAA,gKCExB/D,GAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,iBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,aAAAC,eAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,eAAa,KAAD,EAG7B,OAHGL,EAAKE,EAAAI,KACXhB,EAAOstF,WAAW,CAChB7kC,cAAe/nD,EAAK,UAAAtY,OAAasY,GAAU,KAC1CE,EAAAM,OAAA,SAEIlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EAPW,EAQd,IAOaqO,GAJA,IAAIJ,GAAyB83D,KCjBtC61B,GAAc9pF,aAAGC,QAAAC,aAAA,iWAkBR,YAACg2B,GACZ,OAAOC,GAAcz5B,QAAQotF,GAAa5zD,GAAM1lC,MAAK,SAAAmiC,GAAQ,OAAY,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,IAAI,GAClF,E,UCCKm3F,GAAe,CACjBC,MAAO,SAAAvnG,GAEH,OLNO,SAACyzC,GACZ,IAAQ8zD,EAAoB9zD,EAApB8zD,MAAOjwB,EAAa7jC,EAAb6jC,SACf,OAAO5jC,KAAcz5B,QAAQktF,GAAgB,CAAEI,QAAOjwB,aACjDvpE,MAAK,SAAAmiC,GAAQ,OAAY,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,IAAI,IAC/B0jC,MAAM2sD,GACd,CKCc+G,CAAM,CAAEA,MAFDvnG,EAARwnG,SAE0BlwB,SAFRt3E,EAARs3E,WAGXvpE,MAAK,SAAA05F,GAIF,OAHAxG,aAAUyG,IAA6BD,EAAejtF,MAAO,CAAE2mF,OAAQC,MACvEH,aAAU0G,IAAqCF,EAAenG,aAAc,CAAEH,OAAQC,MAE/EJ,KACFjzF,MAAK,SAAAw0D,GACF0+B,aAAUC,IAA4B3+B,EAAc/nD,MAAO,CAAE2mF,OAAQC,MACrEH,aAAUI,IAAoC9+B,EAAc++B,aAAc,CAAEH,OAAQC,KACxF,IACCvtD,OAAM,SAAA7uC,GAGH,MAFAu8F,aAAaL,IAA4B,CAAEC,OAAQC,MACnDG,aAAaF,IAAoC,CAAEF,OAAQC,MACrDp8F,CACV,GACR,IACC6uC,OAAM,SAAA7uC,GAIH,MAFAu8F,aAAamG,IAA6B,CAAEvG,OAAQC,MACpDG,aAAaoG,IAAqC,CAAExG,OAAQC,MACtDp8F,CACV,GACR,EACA4hB,OAAQ,SAACk0C,GHxCE,IAACrnB,EGyCc,OAAtBgxD,WAAsB,IAAtBA,WAAwBmD,YACD,OAAvBrD,SAAuB,IAAvBA,OAAyBqD,YHzCtBl0D,GAAcz5B,QAAQ6mF,GAAoBrtD,GAC5C1lC,MAAK,SAAAmiC,GACF,OAAe,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,IACrB,IG6CA,IAC8B66B,EADxB68D,EAAcC,aAAkBC,KAAmB98D,EAAAC,aACtC28D,GAAW,IAA9B,IAAA58D,EAAAE,MAAAH,EAAAC,EAAAG,KAAAC,MAAgC,CAAC,IAAtBvoC,EAAIkoC,EAAA/oC,MACXs/F,aAAaz+F,EAAM,CAAEq+F,OAAQC,KACjC,CAMA,OAAA71D,GAAAN,EAAA3/B,EAAAigC,EAAA,SAAAN,EAAAO,GAAA,CACA,OAAO39B,QAAQC,SACnB,EACAk6F,WAAY,SAACltC,GACT,IAAMt4C,EAASs4C,EAAOt4C,OACtB,OAAe,MAAXA,GAA6B,MAAXA,GAElB++E,aAAamG,IAA6B,CAAEvG,OAAQC,MACpDG,aAAaoG,IAAqC,CAAExG,OAAQC,MAC5DG,aAAaL,IAA4B,CAAEC,OAAQC,MACnDG,aAAaF,IAAoC,CAAEF,OAAQC,MACpDvzF,QAAQm8C,UAEZn8C,QAAQC,SACnB,EACAm6F,UAAW,SAACntC,GACR,OAAOotC,eACFn6F,MAAK,SAAAyM,GACF,OAAOA,CACX,IACCq5B,OAAM,SAAA7uC,GACH,OAAOmjG,eACFp6F,MAAK,SAAAyM,GACF,OAAOwmF,KACFjzF,MAAK,SAAAw0D,GAGF,OAFA0+B,aAAUC,IAA4B3+B,EAAc/nD,MAAO,CAAE2mF,OAAQC,MACrEH,aAAUI,IAAoC9+B,EAAc++B,aAAc,CAAEH,OAAQC,MAC7E7+B,CACX,IACC1uB,OAAM,SAAA7uC,GAGH,MAFAu8F,aAAaL,IAA4B,CAAEC,OAAQC,MACnDG,aAAaF,IAAoC,CAAEF,OAAQC,MACrDp8F,CACV,GACR,IACC6uC,OAAM,SAAA7uC,GACH,MAAMA,CACV,GACR,GACR,EACAojG,eAAe,WAAD,IAAAC,EAAAnuF,aAAAC,eAAAC,MAAE,SAAAC,EAAOygD,GAAM,OAAA3gD,eAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAC2B,IAAtC0tF,aAAUpH,KAEd,CAADxmF,EAAAE,KAAA,eAAAF,EAAAM,OAAA,SACEutF,KACFx6F,MAAK,SAAAy6F,GAEF,OADAt+E,KAAY6zB,OAAOyqD,GACZt+E,IACX,KAAE,cAAAxP,EAAAM,OAAA,SAECytF,aAAM,KAAM16F,MAAK,WAEpB,OAAOw6F,KACFx6F,MAAK,SAAAy6F,GAEF,OADAt+E,KAAY6zB,OAAOyqD,GACZt+E,IACX,GACR,KAAE,wBAAAxP,EAAAO,OAAA,GAAAZ,EAAA,KAET,gBAAAa,GAAA,OAAAmtF,EAAAjtF,MAAA,KAAA3P,UAAA,EAnBc,GAoBfi9F,YAAY,WAAD,IAAAC,EAAAzuF,aAAAC,eAAAC,MAAE,SAAAioD,IAAA,IAAAumC,EAAApuF,EAAAquF,EAAAC,EAAAC,EAAAvrC,EAAAgV,EAAA,OAAAr4D,eAAAM,MAAA,SAAA6nD,GAAA,cAAAA,EAAA3nD,KAAA2nD,EAAA1nD,MAAA,OAG4B,OAD/BJ,EAAQ8tF,aAAUpH,KAClB2H,EAAeG,aAAUxuF,GAAM8nD,EAAA1nD,KAAA,EAEJ/M,QAAQM,IAAI,CACzC86F,GAAoBrsC,OAAO,CAAEh4D,GAAIikG,EAAaK,YAC9CC,GAAoBvsC,OAAO,CAAEh4D,GAAIikG,EAAaO,cAC/C,KAAD,EAHqB,OAGrBN,EAAAxmC,EAAAxnD,KAAAiuF,EAAAviG,YAAAsiG,EAAA,GAHKtrC,EAAOurC,EAAA,GAAEv2B,EAAOu2B,EAAA,GAAAzmC,EAAAtnD,OAAA,SAMhB,CACHwiD,QAAgB,OAAPA,QAAO,IAAPA,OAAO,EAAPA,EAASrtD,KAClBqiE,QAAgB,OAAPA,QAAO,IAAPA,OAAO,EAAPA,EAASriE,KAClBkyF,SAAiB,OAAP7vB,QAAO,IAAPA,GAAa,QAANo2B,EAAPp2B,EAASriE,YAAI,IAAAy4F,OAAN,EAAPA,EAAe9lG,OAC5B,wBAAAw/D,EAAArnD,OAAA,GAAAonD,EAAA,KACJ,yBAAAsmC,EAAAvtF,MAAA,KAAA3P,UAAA,EAhBW,IAuBD67F,M,oBCjJA+B,GALPjnG,wBAAA,GACDknG,MACAC,M,qBC0BQC,GA/BsB,CACjC,iBAAkB,CACd53F,OAAQ,CACJ63F,eAAgB,wFAChBC,aAAc,+FAElBC,cAAe,CACXrmG,MAAO,gHACPsmG,WAAY,mDACZC,UAAW,yIACXC,iBAAkB,+JAClBC,aAAc,qJACdC,uBAAwB,4FACxBC,oBAAqB,sJACrBC,eAAgB,yZAChBC,KAAM,wZAEVC,kBAAmB,CACf9mG,MAAO,0GACP+mG,gBAAiB,mDACjBR,UAAW,mIACXC,iBAAkB,yJAClBC,aAAc,+IACdC,uBAAwB,sFACxBC,oBAAqB,gJACrBC,eAAgB,mZAChBC,KAAM,0ZCpBHG,GANoB,CAC/B,YAAe,CACXxnG,KAAM,+CC4zBRynG,GAAoB,CACtBC,GAAI,CACA54F,OAAMxP,wBAAA,GACCqoG,KAAgBD,GAAG54F,QAAM,IAC5B84F,aAAc,oLACdC,kBAAmB,6HACnBC,YAAa,qDACbC,cAAe,kFACf/O,KAAM,mDACNgP,mBAAoB,kHACpBC,QAAS,8IACTC,YAAa,wFACbC,UAAW,wFACXjuC,OAAQ,6CACRkuC,eAAgB,sKAChBC,aAAc,4DACdC,kBAAmB,0EACnBC,oBAAqB,2LACrBnuC,QAAS,2EACTouC,gBAAiB,yIACjB92D,OAAQ,2EACR+2D,YAAa,mGACb1uC,OAAQ,8FACR2uC,YAAa,qEACbC,gBAAiB,wFACjBrlF,KAAM,6CACNslF,SAAU,gEACVC,UAAW,gEACXC,gBAAiB,yDACjBC,YAAa,wEACbzwF,MAAO,yDACP0wF,KAAM,iFACNC,MAAO,mDACPC,mBAAoB,+DACpBC,cAAe,gHACfC,YAAa,sHACb56E,KAAM,mDACN66E,mBAAoB,kHACpBlyF,QAAS,uCACTo2B,SAAU,yDACVya,OAAQ,yDACRtQ,OAAQ,uCACRivD,eAAgB,wCAChB2C,cAAe,iFACf7iG,KAAM,6CACN8iG,UAAW,sGACXC,UAAW,0IACXC,gBAAiB,8FACjBC,YAAa,kDACbC,YAAa,kDACbC,OAAQ,uCACRC,YAAa,4CACbC,YAAa,4CACbC,UAAW,oEACXC,WAAY,iCACZC,KAAM,uCACNv3C,OAAQ,6EAGZw3C,QAAO5qG,wBAAA,GACAqoG,KAAgBD,GAAGwC,SAAO,IAC7BC,KAAM,SAEVtrF,KAAIvf,wBAAA,GACGqoG,KAAgBD,GAAG7oF,MAAI,IAC1B+qF,OAAQ,yFACR5Q,KAAM,iBACNoR,MAAO,sEACPC,SAAU,2DACVC,YAAa,iEAEjBzqG,MAAKP,wBAAA,GACEqoG,KAAgBD,GAAG7nG,OAAK,IAC3BooB,QAAS,yDACT+mB,IAAK,CACDjlB,KAAM,wCAEVwgF,SAAU,CACNxmE,YAAa,gFAEjB6lE,OAAQ,CACJ/6C,WAAY,CACR7uD,KAAM,6HACNwqG,UAAW,0GACXC,SAAU,+FAEd/1B,QAAS,CACL10E,KAAM,2QAGd0qG,UAAW,yDACXC,sBAAuB,CACnBpT,MAAO,2BACPC,OAAQ,uCACRC,cAAe,+EAGvBpnF,QAAO/Q,wBAAA,GACAqoG,KAAgBD,GAAGr3F,SAAO,IAC7Bu6F,4BAA6B,2JAC7BC,8BAA+B,+QAC/BC,aAAc,wFACdC,eAAgB,wNAChBC,WAAY,mIACZC,iBAAkB,+QAClBC,gBAAiB,4HACjBC,mBAAoB,8ZACpBC,aAAc,6JACdC,eAAgB,siBAChBC,gBAAiB,qRACjBC,sBAAuB,qNACvBC,wBAAyB,8lBACzBC,yBAA0B,mVAC1BC,kBAAmB,8PACnBC,oBAAqB,2fACrBC,qBAAsB,4XACtBC,aAAc,wFACdC,eAAgB,2FAChBC,gBAAiB,wFACjBC,kBAAmB,wHACnBC,mBAAoB,obACpBC,mBAAoB,oGACpBC,qBAAsB,oIAEtBC,uBAAwB,6CACxBC,yBAA0B,6EAC1BlD,cAAe,4HACfmD,aAAc,mDACdC,eAAgB,2cAChBC,gBAAiB,0pBACjBC,4BAA6B,2GAC7BC,8BAA+B,uTAEnCC,WAAUrtG,wBAAA,GACHqoG,KAAgBD,GAAGiF,YAAU,IAChCC,UAAW,iEAEfC,KAAIvtG,wBAAA,GACGqoG,KAAgBD,GAAGmF,MAAI,IAC1BC,qBAAsB,mUACtBC,mCAAoC,keACpCC,OAAQ,2YACRC,qBAAsB,+NACtBC,oBAAqB,6MACrBC,oBAAqB,6MACrBC,0BAA2B,qYAC3BC,kBAAmB,iUACnBC,kBAAmB,gEACnBC,QAAS,yVACTC,QAAS,oXAEb5qF,aAAYtjB,wBAAA,GACLqoG,KAAgBD,GAAG9kF,cAAY,IAClC6qF,QAAS,0aACTC,SAAU,0jBACVzlF,QAAS,2cACTqhC,SAAU,kQACVqkD,aAAc,sYACdC,OAAQ,0UACRC,SAAU,wFACVC,WAAY,8FACZC,iBAAkB,gVAClBC,iBAAkB,oGAClBC,uBAAwB,mHACxBC,uBAAwB,uJACxBC,sBAAuB,wIACvBC,iBAAkB,mdAClBC,QAAS,0SACTC,aAAc,kXACdC,oBAAqB,8dACrBC,oBAAqB,4JACrBC,0BAA2B,iRAC3BC,SAAU,oaACVC,kBAAmB,wKACnBjE,UAAW,uHACXkE,YAAa,uHACbC,UAAW,0GACXC,SAAU,sEACVC,YAAa,sEAEjB70F,KAAM,CACF80F,QAAS,oGACTC,IAAK,kFACLC,KAAM,iEAEV74B,WAAU/2E,wBAAA,GACHqoG,KAAgBD,GAAGrxB,YAAU,IAChC84B,OAAQ,wJACRC,UAAW,gFACXC,kBAAmB,oPAEvBC,MAAO,CACHC,MAAO,2BACPC,GAAI,eACJC,GAAI,eACJC,GAAI,eACJC,GAAI,eACJC,GAAI,eACJC,GAAI,eACJC,GAAI,eACJC,GAAI,gBAER1V,SAAU,CACNx3F,MAAO,yDACPmtG,uBAAwB,2GACxBzY,MAAO,CACH53B,GAAI,kFACJswC,IAAK,6EAETrwG,MAAO,CACH6iB,MAAO,4DACPF,KAAM,4DAEVo1E,SAAU,yIAEdr8E,OAAQ,CACJ9a,MAAO,iFACP0vG,WAAY,mLACZC,YAAa,CACTttG,MAAO,wIACPutG,aAAc,iwBACdrrG,OAAQ,CACJ/E,KAAM,8EAIlBkC,MAAO,CACHmuG,qBAAsB,kNACtBC,0BAA2B,iMAC3BC,eAAgB,wVAChBC,6BAA8B,8nBAC9BC,YAAa,oUACbC,sBAAuB,0RChiC7BC,GAAW,CACbpK,GAAIC,GACJoK,GDmiCItxG,4DAAA,GAviCyB,CAC7B6sD,UAAW,CACPuR,QAAS,CACL35C,KAAM,6FACN/jB,KAAM,6FACN+E,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACXC,YAAa,2EACb+hB,aAAc,gEACdC,WAAY,gDACZ1jD,OAAQ,mDACRzB,KAAM,oGACNwI,aAAc,sHACdg7F,cAAe,oDACfC,cAAe,+CAEnBC,MAAO,CACHjiG,OAAQ,CACJomB,OAAQ,mDACR+lB,OAAQ,+DACRif,OAAQ,mDACRE,QAAS,uFACTL,OAAQ,oGACRmkC,UAAW,2BACX8S,YAAa,iCACb/H,MAAO,yFAEX12C,aAAc,CACVkQ,MAAO,uCACP0B,WAAY,kFACZrf,UAAW,uCACX7D,OAAQ,uCACRwa,QAAS,6CACTY,YAAa,iEAGrB9nC,MAAO,gHACP08E,OAAQ,iGAEZtkC,MAAO,CACH5oD,KAAM,qEACN/jB,KAAM,qEACNkxG,WAAY,yGACZnsG,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACXxoB,QAAS,uCACTqH,SAAU,qBACVtxB,MAAO,2BACPy5E,SAAU,yDACVtrB,UAAW,8CAEf4kD,MAAO,CACHzhF,SAAU,CACNmzC,MAAO,uCACP0B,WAAY,kFACZrf,UAAW,uCACXqK,KAAM,4BAEVhD,UAAW,CACPsW,MAAO,6CACP0B,WAAY,8FACZrf,UAAW,uCACXqK,KAAM,mCAGd56B,MAAO,qGAEXuwB,UAAW,CACP9kD,KAAM,iFACN+jB,KAAM,iFACNmtF,WAAY,iIACZnsG,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACXxoB,QAAS,uCACTmpF,QAAS,uCACTC,MAAO,6CACPz4D,mBAAoB,+FACpB+I,OAAQ,uCACR7R,OAAQ,6CACR03B,aAAc,6CACd/vD,UAAW,+DACX2tC,MAAO,uCACPvH,SAAU,kCACVD,OAAQ,wCACRE,OAAQ,uCACRvQ,SAAU,yDACVxT,OAAQ,iCACRmkC,aAAc,0CACdC,gBAAiB,wDAErB1mD,UAAW,CACPiU,QAAS,uCACTy4D,YAAa,mDACbnmC,MAAO,oDAEXoH,MAAO,CACH9gD,KAAM,qBACNtE,KAAM,2EACNgvC,IAAK,MACLnrB,UAAW,wCAEfktF,MAAO,CACHroG,SAAU,CACN4oG,UAAW,uCACXC,SAAU,+DACVC,SAAU,+CAGlBj9E,MAAO,0GACP08E,OAAQ,iGAEZhwD,OAAQ,CACJjhD,KAAM,uFACN+jB,KAAM,uFACNmtF,WAAY,6IACZnsG,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACXxoB,QAAS,uCACT+mB,IAAK,MACL/sC,KAAM,+DACNwvG,kBAAmB,uHACnBC,YAAa,wMAEjBC,WAAY,CACR3jF,IAAK,CACD3uB,EAAG,qBACHyC,GAAI,KACJ3C,MAAO,mDACPmF,KAAM,2DAEV6wD,WAAY,mDACZy8C,UAAW,wFACXC,WAAY,4EACZrxG,MAAO,iCACPgB,UAAW,sEACXF,WAAY,0DACZwwG,aAAc,CACVjvG,MAAO,+IACPkvG,KAAM,CACF9sF,QAAS,CACLnW,OAAQ,+DACRjM,MAAO,4JACPuT,QAAS,+PAGbo+D,SAAU,CACN1lE,OAAQ,yDACRjM,MAAO,oGACPuT,QAAS,uVAEb47F,QAAS,CACLljG,OAAQ,yDACR4xD,SAAU,yDACV79D,MAAO,0GACPuT,QAAS,iRAGjB7L,MAAO,CACH,EAAG,uCACH,EAAG,uCACH,EAAG,uCACH,EAAG,kFAEPynG,QAAS,CACL,EAAG,6CACH,EAAG,6CACH,EAAG,+DACH,EAAG,4HACH,EAAG,+FAGX/4E,UAAW,CACP55B,EAAG,mDACHiF,KAAM,4EACNuiF,KAAM,2FACN5kF,KAAM,oFAGdsyB,MAAO,gHACP08E,OAAQ,iGAEZ3/B,OAAQ,CACJtxE,KAAM,2EACN+jB,KAAM,2EACNmtF,WAAY,2HACZnsG,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACXxoB,QAAS,uCACT+mB,IAAK,MACL/sC,KAAM,+DACNqC,KAAM,0DACNsyD,YAAa,uCACb7mB,UAAW,6CACX1iC,KAAM,mDACNokG,kBAAmB,uHACnBC,YAAa,wMAEjBn9E,MAAO,0GACP08E,OAAQ,iGAEZ3mC,kBAAmB,CACftqE,KAAM,2LACN+jB,KAAM,2LACNhf,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACX5sB,UAAW,uCACXmrB,IAAK,MACL/sC,KAAM,+DACN0/C,OAAQ,uCACRgwD,WAAY,mDACZ5tD,KAAM,oIAEV4tD,WAAY,CACRxyG,MAAO,CACH2C,GAAI,4FACJ3C,MAAO,mDACP0nF,KAAM,oCACNrmF,MAAO,kCAEX20D,WAAY,CACRrzD,GAAI,+IAERs5B,IAAK,CACDt5B,GAAI,+GACJ3C,MAAO,oDAEX47B,IAAK,CACDj5B,GAAI,+GACJ3C,MAAO,8CAEX8yG,WAAY,CACRjyG,KAAM,6CACN8B,GAAI,+GACJ3C,MAAO,mDACPnB,MAAO,4BAEXk0G,oBAAqB,CACjBC,qBAAsB,wPACtBC,sBAAuB,oQACvBC,sBAAuB,2QAE3BnrG,KAAM,gHACNorG,WAAY,kFACZC,SAAU,4EACVC,cAAe,iHACfC,qBAAsB,yIACtBC,sBAAuB,qJACvB1jE,IAAK,CACDltC,GAAI,+GACJ3C,MAAO,OAEX6sD,aAAc,CACVlqD,GAAI,+GACJ3C,MAAO,8DAEX0D,MAAO,mDACPyB,KAAM,sBAEViwB,MAAO,kKACP08E,OAAQ,iGAEZxuC,MAAO,CACHziE,KAAM,uFACN+jB,KAAM,uFACNmtF,WAAY,6IACZxrG,OAAQ,uCACRX,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACXxoB,QAAS,uCACT3jB,KAAM,qBACNqtC,WAAY,uCACZ3B,WAAY,uCACZvkB,iBAAkB,2GAClBzjB,KAAM,uCACNooC,gBAAiB,qGACjBuiE,QAAS,iCACT54E,OAAQ,iCACRmkC,aAAc,0CACdC,gBAAiB,uDACjBnU,MAAO,iCACPs3B,OAAQ,6CACR/zC,SAAU,yDACV/J,KAAM,uEAEVutE,MAAO,CACHrxF,OAAQ,CACJkzF,OAAQ,6CACRC,QAAS,uCACTC,QAAS,oDAEbC,KAAM,CACFC,KAAM,6CACNC,MAAO,8CAEXC,IAAK,CACDF,KAAM,2BACNC,MAAO,mCAGf1+E,MAAO,gHACP08E,OAAQ,iGAEZrjC,UAAW,CACP5tE,KAAM,yIACN+jB,KAAM,yIACNmtF,WAAY,8NACZnsG,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACXX,OAAQ,6CACRzvC,QAAS,yFAEbk0B,MAAO,+IACP08E,OAAQ,iGAEZ9sC,WAAY,CACRnkE,KAAM,6KACN+jB,KAAM,6KACNmtF,WAAY,oRACZnsG,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACXxoB,QAAS,uCACTkrF,cAAe,oGACf7uG,KAAM,qBACNwrC,OAAQ,6CACRE,WAAY,uCACZvkB,iBAAkB,2GAClB8hB,SAAU,yDACVvlC,KAAM,uCACNooC,gBAAiB,qGACjBrW,OAAQ,iCACRmkC,aAAc,0CACdC,gBAAiB,wDAErB5pC,MAAO,iKACP08E,OAAQ,iGAEZ1qC,cAAe,CACXvmE,KAAM,8IACN+jB,KAAM,8IACNhf,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACXnsC,KAAM,qBACNqtC,WAAY,uCACZ5X,OAAQ,iCACRunD,OAAQ,8CAEZyvB,MAAO,CACH37C,QAAS,CACLg+C,KAAM,6CACNC,IAAK,wCAETphF,oBAAqB,CACjBkvE,gBAAiB,wFACjBI,eAAgB,mFAEpB1wE,aAAc,CACVo/E,IAAK,yGACL,KAAM,kEACN,MAAO,oEACP,MAAO,oEACP,KAAM,kEACN,KAAM,4DACN,MAAO,8DACP,MAAO,8DACP,KAAM,kDAGd17E,MAAO,6KACP08E,OAAQ,iGAEZrqC,SAAU,CACN5mE,KAAM,qEACN+jB,KAAM,qEACNhf,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACXnsC,KAAM,qBACNqtC,WAAY,uCACZ5X,OAAQ,mCAGhB8zC,UAAW,CACP7tE,KAAM,+LACN+jB,KAAM,8FAEV4mD,UAAW,CACP3qE,KAAM,+GACN+jB,KAAM,+GACNhf,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbxxD,QAAS,kFACTxG,KAAM,2BACNrB,KAAM,qBACNuiF,KAAM,oCACN7yB,YAAa,uCACb/xD,KAAM,4BAEV8uG,MAAO,CACHjvG,GAAI,CACAwxG,MAAO,yDACPC,IAAK,wFAET5tG,KAAM,CACFxG,MAAO,mDACPi8B,IAAK,mDACLo4E,KAAM,sBACNC,QAAS,qBACTC,GAAI,sBACJC,MAAO,qBACPC,GAAI,sBACJC,MAAO,qBACPC,KAAM,sBACNC,QAAS,qBACTh5E,IAAK,6CACLi5E,WAAY,qEACZC,QAAS,gEAEbC,OAAQ,CACJC,SAAU,uCACVC,SAAU,uCACVC,aAAc,gDAI1BxzC,MAAO,CACH7gE,KAAM,mLACN+jB,KAAM,6FACNhf,OAAQ,CACJjD,GAAI,KACJuO,QAAS,CACLxN,MAAO,2BACPupB,KAAM,0DAEV9nB,KAAM,qBACN7F,SAAU,uCACVuvB,IAAK,mDACL3B,QAAS,qEACTlB,SAAU,mDACVu9D,SAAU,yDACVnH,aAAc,gEACd+yB,aAAc,sEACd31D,OAAQ,6CACRwkC,IAAK,2EACL54E,MAAO,yDACP64E,YAAa,wIACbmxB,UAAW,mDACXC,OAAQ,8EACRh5E,UAAW,2BACXunD,aAAc,uDACd7pD,MAAO,uCACPD,UAAW,mDACXy2C,QAAS,2EACTx0C,cAAe,kCACfG,cAAe,wCACfo5E,iBAAkB,8DAClBC,iBAAkB,oEAClBC,YAAa,4EACb52C,kBAAmB,qFACnBC,qBAAsB,mGAE1B+yC,MAAO,CACH5lF,SAAU,CACN,EAAG,qBACH,EAAG,uCACH,EAAG,6CACH,EAAG,6CACH,EAAG,sEAEPypF,aAAc,CACV,EAAG,qBACH,EAAG,uCACH,EAAG,6CACH,EAAG,uCACH,EAAG,sEAEPtwG,KAAM,CACFuwG,QAAS,qEACTC,KAAM,qBACNC,GAAI,qBACJC,GAAI,qBACJC,KAAM,qBACNC,KAAM,OACNC,KAAM,OACNC,KAAM,OACNC,KAAM,2BACNC,OAAQ,6CACRC,SAAU,uCACVjkC,OAAQ,kCAEZ3yB,OAAQ,CACJq0D,KAAM,6CACNC,MAAO,2DAEX9vB,IAAK,CACD6vB,KAAM,2EACNC,MAAO,wFACPlQ,KAAM,wEAGdxuE,MAAO,2JACP08E,OAAQ,6JAEZ7vC,aAAc,CACVphE,KAAM,mLACN+jB,KAAM,6FACNhf,OAAQ,CACJjD,GAAI,KACJuO,QAAS,CACLxN,MAAO,2BACPupB,KAAM,0DAEV9nB,KAAM,qBACN7F,SAAU,uCACVuvB,IAAK,mDACL3B,QAAS,qEACTlB,SAAU,mDACVu9D,SAAU,yDACVnH,aAAc,gEACd+yB,aAAc,sEACd31D,OAAQ,6CACRwkC,IAAK,2EACL54E,MAAO,yDACP64E,YAAa,wIACbmxB,UAAW,mDACXC,OAAQ,8EACRh5E,UAAW,2BACXunD,aAAc,uDACd7pD,MAAO,uCACPD,UAAW,mDACXy2C,QAAS,2EACTx0C,cAAe,kCACfG,cAAe,wCACfo5E,iBAAkB,8DAClBC,iBAAkB,qEAEtB3D,MAAO,CACH5lF,SAAU,CACN,EAAG,qBACH,EAAG,uCACH,EAAG,6CACH,EAAG,6CACH,EAAG,sEAEP7mB,KAAM,CACFuwG,QAAS,qEACTC,KAAM,qBACNC,GAAI,qBACJC,GAAI,qBACJC,KAAM,qBACNC,KAAM,OACNC,KAAM,OACNC,KAAM,OACNC,KAAM,2BACNC,OAAQ,6CACRC,SAAU,uCACVjkC,OAAQ,kCAEZ3yB,OAAQ,CACJq0D,KAAM,6CACNC,MAAO,2DAEX9vB,IAAK,CACD6vB,KAAM,2EACNC,MAAO,wFACPlQ,KAAM,wEAGdxuE,MAAO,4JAEX4kC,QAAS,CACLn5D,KAAM,mGACN+jB,KAAM,mGACNhf,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACNuwC,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACXg0D,MAAO,iCACP+Q,MAAO,QACPlhC,MAAO,6CACPhc,OAAQ,+DACRkc,SAAU,uCACVjc,gBAAiB,+FAErBw4C,MAAO,CACHz4C,OAAQ,CACJ00C,OAAQ,2EACRyI,SAAU,mFAGlBC,GAAI,gEACJnhF,MAAO,sHACP08E,OAAQ,iGAEZx1C,QAAS,CACLz7D,KAAM,6FACN+jB,KAAM,6FACNhf,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACX9qC,KAAM,2BACNL,YAAa,+DACbo1D,QAAS,6CACTtU,UAAW,iHACXuU,YAAa,CACTg7C,KAAM,CACFlqF,iBAAkB,mJAI9BslF,MAAO,CACHprG,KAAM,CACFiwG,MAAO,iFACPC,WAAY,yDACZC,SAAU,6CACVC,MAAO,iCACPC,WAAY,gEAEhB5vD,UAAW,CACP6vD,UAAW,mHAGnBP,GAAI,gEACJnhF,MAAO,gHACP08E,OAAQ,iGAEZ5hC,KAAM,CACFrvE,KAAM,mLACN+jB,KAAM,6FACNhf,OAAQ,CACJjD,GAAI,KACJwC,KAAM,qBACNqB,KAAM,2BACN+pE,QAAS,6CACTpqE,YAAa,+DACbqZ,MAAO,IACP7P,OAAQ,mDACRonG,QAAS,6CACTC,WAAY,6CACZpxG,OAAQ,2BACRu7E,SAAU,qEACVr8B,OAAQ,6CACR1T,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,oDAEfsgE,MAAO,CACHzsG,KAAM,CACF8xG,KAAM,6CACNC,KAAM,oGAEV/1B,SAAU,CACNg2B,QAAS,uCACTC,SAAU,qDAGlBhiF,MAAO,2JACP08E,OAAQ,iGAEZ9hD,KAAM,CACFnvD,KAAM,+DACN+jB,KAAM,+DACNmtF,WAAY,yGACZnsG,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACN29D,YAAa,mDACbptB,UAAW,uCACX4gE,UAAW,uCACX1gE,UAAW,mDACX+lE,OAAQ,UACRxnE,IAAK,qCACLgd,aAAc,4FACd9kD,KAAM,uCACN5C,KAAM,qBACN6nD,UAAW,6CACXC,sBAAuB,uCACvBryB,OAAQ,iCACRmkC,aAAc,0CACdC,gBAAiB,wDAErB4yC,MAAO,CACH1jD,KAAM,CACFopD,MAAO,6CACPC,KAAM,wCAEVpnF,SAAU,CACNmzC,MAAO,+CAGfluC,MAAO,qGAEX+2C,IAAK,CACDtrE,KAAM,6HACN+jB,KAAM,mDACNhf,OAAQ,CACJjD,GAAI,KACJ9B,KAAM,2EACNo1D,QAAS,mDACT55B,UAAW,+EACXunD,aAAc,uGACdz+E,KAAM,6DACNiwG,UAAW,gIACXp1G,MAAO,mDACPg2D,WAAY,qGACZj8B,MAAO,uCACP4W,OAAQ,6CACR7W,UAAW,mDACXotC,WAAY,0DAEhB0qC,MAAO,CACH37C,QAAS,CACLuhD,KAAM,6CACNC,KAAM,2BACNC,IAAK,yCAGbtiF,MAAO,+FAEXgtC,UAAW,CACPvhE,KAAM,uFACN+jB,KAAM,uFACN+yF,YAAa,kRACbC,aAAc,GACdxiF,MAAO,mLACP08E,OAAQ,qKAyRbxJ,IACAf,IACAc,IArRwB,CAC3BwP,QAAS,CACLrF,WAAY,CACRxyG,MAAO,mDACP47B,IAAK,6CACLK,IAAK,mDACL62E,WAAY,6CACZ/qG,KAAM,gHACNorG,WAAY,kFACZC,SAAU,4EACVC,cAAe,gEACfC,qBAAsB,8FACtBC,sBAAuB,0GACvBR,oBAAqB,uHAEzB/yG,MAAO,CACH2C,GAAI,8BACJ3C,MAAO,mDACP0nF,KAAM,oCACN7oF,MAAO,4BAEXk0G,oBAAqB,CACjBj8F,MAAO,sHACPghG,SAAU,uCACVC,gBAAiB,oGACjBC,YAAa,gHACbhF,qBAAsB,4KACtBC,sBAAuB,yJACvBC,sBAAuB,+JACvB+E,yBAA0B,+JAC1BC,yBAA0B,0KEtzBvBC,GDSMC,cAAqB,SAAA1pG,GAAM,OAAI8iG,GAAS9iG,EAAO,GAAE,M,4GEIhEnO,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC61G,SAAU,CACNrxG,gBAAiB49B,KAAM,KACvBhkC,MAAO4B,EAAMyE,QAAQge,QAAQE,MAEjCyqF,OAAQ,CACJ5oG,gBAAiB0zB,KAAI,KACrB95B,MAAO4B,EAAMyE,QAAQnC,MAAMqgB,MAElC,GAAG,CAAEviB,KAAM,sBAGNw3G,GAAoB,SAAHt6G,GAA2D,IAArDsB,EAAStB,EAATsB,UAAWC,EAAQvB,EAARuB,SAAUC,EAAMxB,EAANwB,OAAQE,EAAM1B,EAAN0B,OAAWE,EAAKxB,YAAAJ,EAAAK,IAChEwB,EAAYC,cACZqB,EAAUX,GAAUd,GACpB05D,EAASp5D,KAAIN,EAAQF,GAC3B,GAAIyiF,aAAO7oB,GAAS,OAAO,KAE3B,IAAMr5D,EAAYq5D,EAAS,SAAW,WAChC93D,EAAQzB,EAAU,aAADK,OAAcX,EAAQ,WAAAW,OAAUV,EAAM,KAAAU,OAAIH,IAEjE,OACIpB,cAAC0iC,KAAIjhC,YAAA,CACDd,UAAWkE,IAAWlE,EAAW6B,EAAQpB,IACzCiI,KAAK,QACL1G,MAAOA,GACHjB,aAAuBT,IAGvC,EAEA04G,GAAkBh4G,aAAe,CAC7BC,UAAU,GAGC+3G,U,UC7CAC,GAFI,WAAH,OAASp5G,qBAAWi+F,GAAgB,E,yCCmB9Cr0F,GAAcpK,cAACuL,KAAa,IAG5BxC,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAOlCyC,GA1BI,SAAHnM,GAAA,IAAA4K,EAAA5K,EACZsD,aAAK,IAAAsH,EAAG,iBAAgBA,EAAAC,EAAA7K,EACxB8K,YAAI,IAAAD,EAAGE,GAAWF,EACfpG,EAAIrE,YAAAJ,EAAAK,IAAA,OAEPM,cAAC8f,KAAMre,wBAAA,CACHrB,UAAWC,KACXd,GAAE,cACFoD,MAAOA,EACPwG,QAASJ,IACLjF,GAAI,IAAAxE,SAEP6K,IACI,ECEE0vG,GAZkB,SAAC54G,GAC9B,IAAMC,EAAYC,cACZ6nB,EAAeC,eACrB,OACIzkB,eAAC0kB,KAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,KAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,KAAkB3nB,YAAA,GAAKunB,IACxBhpB,cAACZ,KAAc,CAAAE,SAAE4B,EAAU,4BAGvC,ECNM44G,GAAqB,SAAHz6G,GAAA,IAAMyH,EAAQzH,EAARyH,SAAU0I,EAAInQ,EAAJmQ,KAAMia,EAAOpqB,EAAPoqB,QAAO,OACjDzpB,cAAC+b,KAAU,CAAAzc,SACNmqB,GAAWzpB,cAAC+5G,GAAmB,CAACjzG,SAAUA,EAAU/F,OAAQyO,KACpD,EAkCFwqG,GA9BY,SAAC/4G,GACxB,IAAQ47D,EAAY+8C,KAAZ/8C,QACR,OAAKA,EAGD78D,cAAC+0C,GAAItzC,wBAAA,GACGR,GAAK,IACT6oB,QAAS9pB,cAAC85G,GAAkB,IAC5BhzG,SAAS,WACTlG,SAAS,UACTqD,GAAI44D,EAAQ54D,GACZ+lB,YAAahqB,cAACi6G,GAAoB,IAClCj1G,MAAM,uBACNykB,SAAO,EAAAnqB,SAEPkF,eAACoqB,KAAgB,CAAAtvB,SAAA,CACbU,cAACyE,KAAS,CAAC5D,OAAO,SAClBb,cAACyE,KAAS,CAAC5D,OAAO,UAClBb,cAACk6G,KAAU,CAACr5G,OAAO,UACnBb,cAACm6G,KAAgB,CAACt5G,OAAO,UACzBb,cAAC25G,GAAiB,CAAC94G,OAAO,WAC1Bb,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,aApB9B,IAwBzB,E,WCxBemlE,GAbkB,SAACn5G,GAC9B,IAAMC,EAAYC,cACZ6nB,EAAeiwB,eACrB,OACIz0C,eAAC0kB,KAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,KAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,KAAkB3nB,YAAA,GAAKunB,IACxBhpB,cAACZ,KAAc,CAACG,GAAE,mBAAqBD,SAAE4B,EAAU,0BACnDlB,cAACZ,KAAc,CAAAE,SAAE4B,EAAU,sBAGvC,E,yCCEMkJ,GAAcpK,cAAC0K,KAAQ,IAGvB3B,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAOlCgB,GA1BI,SAAH1K,GAAA,IAAA4K,EAAA5K,EACZsD,aAAK,IAAAsH,EAAG,iBAAgBA,EAAAC,EAAA7K,EACxB8K,YAAI,IAAAD,EAAGE,GAAWF,EACfpG,EAAIrE,YAAAJ,EAAAK,IAAA,OAEPM,cAAC8f,KAAMre,wBAAA,CACHrB,UAAWC,KACXd,GAAE,mBACFoD,MAAOA,EACPwG,QAASJ,IACLjF,GAAI,IAAAxE,SAEP6K,IACI,ECCEkwG,GAdW,SAACp5G,GACvB,IAAMs1B,EAAOqhB,eAEPvQ,EAAej1B,uBAAY,SAAAtJ,GAC7B,IAAMxH,EAAQwH,EAAMwB,OAAOhJ,MAC3Bi1B,EAAKuhB,OAAO,QAASx2C,EACzB,GAAG,IAEH,OACItB,cAAC4f,KAASne,wBAAA,GAAKR,GAAK,IAAE8B,SAAUskC,IAExC,E,2BCJMizE,GAAgB,CAAC5jC,aAAM,uBAAwBj4D,gBAC/CD,GAAe,CAACC,eAAYC,aAAU,MACtC67F,GAAgB,CAAC5C,eAASl5F,gBAC1B+7F,GAAgB,CAAC/jC,MACjBgkC,GAAmB,CAAC9jC,KAAYC,GAAkB,oBAElD8jC,GAAqB,SAAHr7G,GAAA,IAAMyH,EAAQzH,EAARyH,SAAU0I,EAAInQ,EAAJmQ,KAAMub,EAAO1rB,EAAP0rB,QAAO,OACjD/qB,cAAC+b,KAAU,CAAAzc,SACNyrB,GAAW/qB,cAAC26G,GAAmB,CAAC7zG,SAAUA,EAAU/F,OAAQyO,KACpD,EAGXorG,GAAqB,SAAA35G,GAAK,OAC5BjB,cAACgsB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SACdU,cAAC24C,KAAU,CAACxgC,SAAUlX,EAAMmd,aACtB,EA6CRy8F,GAAuB,SAAHzpG,GACdA,EAARtK,SACQsK,EAARxQ,SACQ,OAAAnB,YAAA2R,EAAA1R,GAAY,EAETo7G,GA/CY,SAAC75G,GACxB,IAAA85G,EAA6BnB,KAArB/8C,EAAOk+C,EAAPl+C,QAASvlD,EAAOyjG,EAAPzjG,QACXH,EAASC,eACTR,EAAWS,eACXP,EAAY1E,uBAAY,WAC1BkF,IACAH,EAAO,0BAA2B,OAAQ,CAAEc,YAAa,IAAK,GAC9DrB,EAAS,mBACb,GAAG,CAACU,EAASH,EAAQP,IAErB,OAAKimD,EAGD78D,cAACw5C,GAAI/3C,wBAAA,GACGo5G,GAAqB55G,IAAM,IAC/B6oB,QAAS9pB,cAAC06G,GAAkB,IAC5Bz2G,GAAI44D,EAAQ54D,GACZrD,SAAS,UACTkG,SAAS,WACTkjB,YAAahqB,cAACo6G,GAAwB,IACtCtjG,UAAWA,EACX9R,MAAM,uBACNiS,UAAU,EACV8T,SAAO,EAAAzrB,SAGPkF,eAACs0C,KAAU,CACPliC,SAAS,mBACT0nB,QAASt+B,cAAC46G,GAAkB,IAAIt7G,SAAA,CAEhCU,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAACq6G,GAAiB,CAACx5G,OAAO,QAAQuC,SAAUm3G,KAC5Cv6G,cAAC4f,KAAS,CAAC/e,OAAO,QAAQuC,SAAUo3G,KACpCx6G,cAAC4f,KAAS,CAAC/e,OAAO,QAAQuC,SAAUk3G,KACpCt6G,cAACg7G,KAAa,CAACn6G,OAAO,WAAWuC,SAAUq3G,GAAkBt5E,WAAY,CAAE85E,aAAc,kBACzFj7G,cAACg7G,KAAa,CAACn6G,OAAO,0BAzBb,IA6BzB,EChDeq6G,GAbkB,SAACj6G,GAC9B,IAAMC,EAAYC,cACZ6nB,EAAeiwB,eACrB,OACIz0C,eAAC0kB,KAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,KAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,KAAkB3nB,YAAA,GAAKunB,IACxBhpB,cAACZ,KAAc,CAACG,GAAE,mBAAqBD,SAAE4B,EAAU,0BACnDlB,cAACZ,KAAc,CAAAE,SAAE4B,EAAU,sBAGvC,E,oBCEMkJ,GAAcpK,cAAC0K,KAAQ,IAGvB3B,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAOlCgB,GA1BI,SAAH1K,GAAA,IAAA4K,EAAA5K,EACZsD,aAAK,IAAAsH,EAAG,iBAAgBA,EAAAC,EAAA7K,EACxB8K,YAAI,IAAAD,EAAGE,GAAWF,EACfpG,EAAIrE,YAAAJ,EAAAK,IAAA,OAEPM,cAAC8f,KAAMre,wBAAA,CACHrB,UAAWC,KACXd,GAAE,mBACFoD,MAAOA,EACPwG,QAASJ,IACLjF,GAAI,IAAAxE,SAEP6K,IACI,E,2BCNPqU,GAAe,CAACC,eAAYC,aAAU,MAEtCy8F,GAAqB,SAAH97G,GAAA,IAAMyH,EAAQzH,EAARyH,SAAU0I,EAAInQ,EAAJmQ,KAAMub,EAAO1rB,EAAP0rB,QAAO,OACjD/qB,cAAC+b,KAAU,CAAAzc,SACNyrB,GAAW/qB,cAACo7G,GAAmB,CAACt0G,SAAUA,EAAU/F,OAAQyO,KACpD,EAGX6rG,GAAqB,SAAAp6G,GAAK,OAC5BjB,cAACgsB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SACdU,cAAC24C,KAAU,CAACxgC,SAAUlX,EAAMmd,aACtB,EA4CRk9F,GAAuB,SAAHlqG,GACdA,EAARtK,SACQsK,EAARxQ,SACQ,OAAAnB,YAAA2R,EAAA1R,GAAY,EAET67G,GA9CY,SAACt6G,GACxB,IAAAu6G,EAA6BtjB,KAArBrmB,EAAO2pC,EAAP3pC,QAASv6D,EAAOkkG,EAAPlkG,QACXH,EAASC,eACTR,EAAWS,eACXP,EAAY1E,uBAAY,WAC1BkF,IACAH,EAAO,0BAA2B,OAAQ,CAAEc,YAAa,IAAK,GAC9DrB,EAAS,mBACb,GAAG,CAACU,EAASH,EAAQP,IAErB,OAAKi7D,EAGD7xE,cAACw5C,GAAI/3C,wBAAA,GACG65G,GAAqBr6G,IAAM,IAC/B6oB,QAAS9pB,cAACm7G,GAAkB,IAC5Bl3G,GAAI4tE,EAAQ5tE,GACZrD,SAAS,UACTkG,SAAS,WACTkjB,YAAahqB,cAACk7G,GAAwB,IACtCpkG,UAAWA,EACX9R,MAAM,uBACNiS,UAAU,EACV8T,SAAO,EAAAzrB,SAEPkF,eAACs0C,KAAU,CACPliC,SAAS,mBACT0nB,QAASt+B,cAACq7G,GAAkB,IAAI/7G,SAAA,CAEhCU,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,IACnDzO,cAACsC,KAAY,CAACzB,OAAO,YAAY+O,cAAc,IAC/C5P,cAACwH,KAAc,CAAC3G,OAAO,uCAAuCwrB,UAAU,YAAY1pB,MAAM,6DAA6DyM,YAAU,EAACqvC,UAAU,mBAAkBn/C,SAC1LU,cAAC2H,KAAiB,CAACI,gBAAiBC,eAvB/B,IA4BzB,E,qBCrDMnG,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFC,gBAAiB6+F,KAAW,KAC5BjlG,MAAOilG,KAAW,MAEzB,GAAG,CAAEjjG,KAAM,oBAGNs5G,GAAkB,SAACx6G,GACoBA,EAAjCN,UAAR,IAAmBE,EAAsBI,EAAtBJ,OACb2B,GADmCvB,EAAdw9C,UACX58C,GAAUd,IAEpBA,GADYI,cACHmrC,aAAiBrrC,IAC1BK,EAAQD,KAAIN,EAAQF,GAC1B,OAAIyiF,aAAOhiF,GAAe,KAGtBtB,cAACkY,WAAQ,CAAA5Y,SACJgC,EAAM+D,KAAI,SAAC41B,EAAMvd,GAEd,OAAQ1d,cAAC0iC,KAAI,CAET/hC,UAAW6B,EAAQ8D,KACnB+C,KAAK,QACL1G,MAAOs4B,GAHFvd,EAMb,KAIZ,EAEA+9F,GAAgB95G,aAAe,CAC3BC,UAAU,GAGC65G,U,qBCrCT55G,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFC,gBAAiBy9B,KAAK,KACtB7jC,MAAO6jC,KAAK,MAEnB,GAAG,CAAE7hC,KAAM,qBAGNu5G,GAAmB,SAACz6G,GACmBA,EAAjCN,UAAR,IAAmBE,EAAsBI,EAAtBJ,OACb2B,GADmCvB,EAAdw9C,UACX58C,GAAUd,IAEpBA,GADYI,cACHmrC,aAAiBrrC,IAC1BK,EAAQD,KAAIN,EAAQF,GAC1B,OAAIyiF,aAAOhiF,GAAe,KAGtBtB,cAACkY,WAAQ,CAAA5Y,SACJgC,EAAM+D,KAAI,SAAC41B,EAAMvd,GAEd,OAAQ1d,cAAC0iC,KAAI,CAET/hC,UAAW6B,EAAQ8D,KACnB+C,KAAK,QACL1G,MAAOs4B,GAHFvd,EAMb,KAIZ,EAEAg+F,GAAiB/5G,aAAe,CAC5BC,UAAU,GAGC85G,U,qBCrCT75G,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFC,gBAAiBu+F,KAAO,KACxB3kG,MAAO2kG,KAAO,MAErB,GAAG,CAAE3iG,KAAM,oBAGNw5G,GAAkB,SAAC16G,GACoBA,EAAjCN,UAAR,IAAmBE,EAAsBI,EAAtBJ,OACb2B,GADmCvB,EAAdw9C,UACX58C,GAAUd,IAEpBA,GADYI,cACHmrC,aAAiBrrC,IAC1BK,EAAQD,KAAIN,EAAQF,GAC1B,OAAIyiF,aAAOhiF,GAAe,KAGtBtB,cAACkY,WAAQ,CAAA5Y,SACJgC,EAAM+D,KAAI,SAAC41B,EAAMvd,GAEd,OAAQ1d,cAAC0iC,KAAI,CAET/hC,UAAW6B,EAAQ8D,KACnB+C,KAAK,QACL1G,MAAOs4B,GAHFvd,EAMb,KAIZ,EAEAi+F,GAAgBh6G,aAAe,CAC3BC,UAAU,GAGC+5G,U,8CClCT95G,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC02G,QAAS,CACLlyG,gBAAiB49B,KAAM,KACvBhkC,MAAO4B,EAAMyE,QAAQge,QAAQE,MAEjCg0F,SAAU,CACNnyG,gBAAiB0zB,KAAI,KACrB95B,MAAO4B,EAAMyE,QAAQnC,MAAMqgB,MAElC,GAAG,CAAEviB,KAAM,qBAGNy5G,GAAmB,SAAHv8G,GAA2D,IAArDsB,EAAStB,EAATsB,UAAWC,EAAQvB,EAARuB,SAAUC,EAAMxB,EAANwB,OAAQE,EAAM1B,EAAN0B,OAAWE,EAAKxB,YAAAJ,EAAAK,IAC/DwB,EAAYC,cACZqB,EAAUX,GAAUd,GACpB0hF,EAAWphF,KAAIN,EAAQF,GAC7B,GAAIyiF,aAAOb,GAAW,OAAO,KAE7B,IAAMrhF,EAAYqhF,EAAW,WAAa,UACpC9/E,EAAQzB,EAAU,aAADK,OAAcX,EAAQ,WAAAW,OAAUV,EAAM,KAAAU,OAAIH,IAEjE,OACIpB,cAAC0iC,KAAIjhC,YAAA,CACDd,UAAWkE,IAAWlE,EAAW6B,EAAQpB,IACzCiI,KAAK,QACL1G,MAAOA,GACHjB,aAAuBT,IAGvC,EAEA26G,GAAiBj6G,aAAe,CAC5BC,UAAU,GAGCg6G,UCxCFC,GAAwB,SAAC56G,GAClC,IAAMuB,EAAUwyB,eAEhB,OACIxwB,eAACwrC,KAAQvuC,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACfU,cAACU,KAAS,CAACG,OAAO,SAClBb,cAACy7G,GAAe,CAAC56G,OAAO,SAASo0B,UAAU,EAAO/sB,cAAe1F,EAAQytC,aACzEjwC,cAAC07G,GAAgB,CAAC76G,OAAO,UAAUo0B,UAAU,EAAO/sB,cAAe1F,EAAQytC,aAC3EjwC,cAAC27G,GAAe,CAAC96G,OAAO,SAASo0B,UAAU,EAAO/sB,cAAe1F,EAAQytC,aACzEjwC,cAACyE,KAAS,CAAC5D,OAAO,aAAao0B,UAAU,IACzCj1B,cAACyE,KAAS,CAAC5D,OAAO,SAASo0B,UAAU,IACrCj1B,cAAC47G,GAAgB,CAAC/6G,OAAO,WAAWo0B,UAAU,EAAO/sB,cAAe1F,EAAQytC,aAC5EjwC,cAACyE,KAAS,CAAC5D,OAAO,QAAQo0B,UAAU,IACpCj1B,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,eACrD/vC,cAACgvB,KAAS,CAACnuB,OAAO,YAAYqH,cAAe1F,EAAQutC,kBAGjE,E,8CCZMluC,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFC,gBAAiB49B,KAAM,KACvBhkC,MAAO4B,EAAMyE,QAAQge,QAAQE,MAEpC,GAAG,CAAEviB,KAAM,yBAGN25G,GAAuB,SAAHz8G,GAA2D,IAArDsB,EAAStB,EAATsB,UAAWC,EAAQvB,EAARuB,SAAUC,EAAMxB,EAANwB,OAAQE,EAAM1B,EAAN0B,OAAWE,EAAKxB,YAAAJ,EAAAK,IACnEwB,EAAYC,cACZqB,EAAUX,GAAUd,GACpBwnD,EAAYlnD,KAAIN,EAAQF,GAC9B,GAAIyiF,aAAO/6B,GAAY,OAAO,KAC9B,IAAKA,EAAW,OAAO,KAEvB,IAAM5lD,EAAQzB,EAAU,aAADK,OAAcX,EAAQ,WAAAW,OAAUV,EAAM,eAE7D,OACIb,cAAC0iC,KAAIjhC,YAAA,CACDd,UAAWkE,IAAWlE,EAAW6B,EAAQ8D,MACzC+C,KAAK,QACL1G,MAAOA,GACHjB,aAAuBT,IAGvC,EAEA66G,GAAqBn6G,aAAe,CAChCC,UAAU,GAGCk6G,U,oBCxBT1xG,GAAcpK,cAACuL,KAAa,IAG5BxC,GAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAOlCyC,GA1BI,SAAHnM,GAAA,IAAA4K,EAAA5K,EACZsD,aAAK,IAAAsH,EAAG,iBAAgBA,EAAAC,EAAA7K,EACxB8K,YAAI,IAAAD,EAAGE,GAAWF,EACfpG,EAAIrE,YAAAJ,EAAAK,IAAA,OAEPM,cAAC8f,KAAMre,wBAAA,CACHrB,UAAWC,KACXd,GAAE,cACFoD,MAAOA,EACPwG,QAASJ,IACLjF,GAAI,IAAAxE,SAEP6K,IACI,ECEE4xG,GAZkB,SAAC96G,GAC9B,IAAMC,EAAYC,cACZ6nB,EAAeC,eACrB,OACIzkB,eAAC0kB,KAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,KAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,KAAkB3nB,YAAA,GAAKunB,IACxBhpB,cAACZ,KAAc,CAAAE,SAAE4B,EAAU,4BAGvC,ECFM86G,GAAqB,SAAH38G,GAAA,IAAMyH,EAAQzH,EAARyH,SAAU0I,EAAInQ,EAAJmQ,KAAMia,EAAOpqB,EAAPoqB,QAAO,OACjDzpB,cAAC+b,KAAU,CAAAzc,SACNmqB,GAAWzpB,cAACi8G,GAAmB,CAACn1G,SAAUA,EAAU/F,OAAQyO,KACpD,EAGX0sG,GAAkB,SAACn7G,EAAQsrB,GAAS,MAAK,kBAAkB,EAC3D8vF,GAAkB,SAACp7G,EAAQsrB,GAAS,IAAA+vF,EAAAC,EAAAC,EAAA,UAAA/6G,OAAS8qB,EAAS,KAAA9qB,OAAU,OAANR,QAAM,IAANA,GAAmB,QAAbq7G,EAANr7G,EAAQ+7D,mBAAW,IAAAs/C,GAAM,QAANC,EAAnBD,EAAqBtE,YAAI,IAAAuE,GAAkB,QAAlBC,EAAzBD,EAA2BzuF,wBAAgB,IAAA0uF,OAArC,EAANA,EAA6Cr4G,GAAE,UAoEhGs4G,GAhEY,SAACt7G,GAAW,IAADo+F,EAC1BxtB,EAAYqmB,KAAZrmB,QAER,OAAKA,EAGDrtE,eAACuwC,GAAItzC,wBAAA,GACGR,GAAK,IACT6oB,QAAS9pB,cAACg8G,GAAkB,IAC5Bl1G,SAAS,WACTlG,SAAS,UACTqD,GAAI4tE,EAAQ5tE,GACZ+lB,YAAahqB,cAACw8G,GAAoB,IAClCx3G,MAAM,uBACNykB,SAAO,EAAAnqB,SAAA,CAEPkF,eAACoqB,KAAgB,CAAAtvB,SAAA,CACbU,cAACkvB,KAAc,CAACruB,OAAO,aAAawrB,UAAU,UAAU2B,KAAMkuF,GAAiBv5G,MAAM,mCAAkCrD,SACnHU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAACyE,KAAS,CAAC5D,OAAO,SAClBb,cAACyE,KAAS,CAAC5D,OAAO,gBAClBb,cAACyE,KAAS,CAAC5D,OAAO,YAAY8B,MAAM,kCACpC3C,cAACqsC,GAAW,CAACxrC,OAAO,cAAcwrB,UAAU,cAAc2B,MAAM,EAAM1uB,SAClEU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAAC87G,GAAoB,CAACj7G,OAAO,cAC7Bb,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,OACvCj1C,cAACgvB,KAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,UAE3Cj1C,cAAC4uB,KAAgB,CAACjsB,MAAM,2EAAcrD,SAClCU,cAACkvB,KAAc,CAACruB,OAAO,uCAAuCwrB,UAAU,YAAY1pB,MAAM,6DAA6DqrB,KAAMmuF,GAAgB78G,SACzKU,cAACyE,KAAS,CAAC5D,OAAO,aAG1Bb,cAACqrB,GAAe,CAAC1oB,MAAM,wFAAiBrD,SACpCU,cAACusB,GAAS,CACNzC,SAAS,EACTlpB,SAAS,OACTkG,SAAS,QACThB,OAAQ,CACJ22G,GAAI,CACA,CACI30G,KAAM,CAAE7D,GAAgB,QAAdo7F,EAAExtB,EAAQ/pE,YAAI,IAAAu3F,OAAA,EAAZA,EAAcp7F,IAC1BwD,YAAa,CAAExD,GAAI4tE,EAAQpqE,YAAYxD,KAE3C,CACI4tE,QAAS,CAAE5tE,GAAI4tE,EAAQ5tE,OAKnCoY,KAAM,CAAE5S,MAAO,iBAAkBqX,MAAO,OACxCjC,QAAS,EAAEvf,SAEXU,cAAC67G,GAAqB,YApDjB,IAyDzB,EC/Dea,GAd0B,SAACz7G,GAAW,IAAD07G,EAC1C3zF,EAAeC,eACfjD,EAA+B,QAAtB22F,EAAG3zF,EAAajoB,cAAM,IAAA47G,OAAA,EAAnBA,EAAqB32F,UAEvC,OACIxhB,eAAC0kB,KAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,KAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,KAAkB,CAACtiB,SAAS,aAAalG,SAAS,cACnDZ,cAAC6oB,GAAoB,CAAC/hB,SAAS,aAAa/F,OAAQilB,IACpDhmB,cAAC6oB,GAAoBpnB,wBAAA,GAAKunB,GAAkB/nB,MAGxD,ECXM27G,GAAgB,SAAC77G,GAAM,oBAAAQ,OAAmBR,EAAOkD,GAAE,UACnD44G,GAAa,SAAC97G,GAAM,iBAAAQ,OAAgBR,EAAOkD,GAAE,UAE7C64G,GAA+B,SAAHz9G,GAAgD,IAAD09G,EAAzCvtG,EAAInQ,EAAJmQ,KAAM5O,EAAQvB,EAARuB,SACpCkG,GADqDzH,EAAPoqB,QAAkBpqB,EAATwc,UAC/C,cAAAta,OAAqB,OAAJiO,QAAI,IAAJA,GAAe,QAAXutG,EAAJvtG,EAAMwW,iBAAS,IAAA+2F,OAAX,EAAJA,EAAiB94G,GAAE,KAAA1C,OAAIX,IACtD,OACI4D,eAACuX,KAAU,CAAAzc,SAAA,CACNiqB,KAAYI,IAAI,SAAU,cAAgBJ,KAAYI,IAAI,SAAU,sBAAwBJ,KAAYI,IAAI,UAAW,WAAaJ,KAAYI,IAAI,UAAW,WAAa3pB,cAACowC,GAAW,CAACtpC,SAAUA,EAAU/F,OAAQyO,IACrN+Z,KAAYI,IAAI,SAAU,cAAgBJ,KAAYI,IAAI,SAAU,sBAAwBJ,KAAYI,IAAI,UAAW,WAAa3pB,cAACwL,KAAU,CAAC1E,SAAUA,EAAU/F,OAAQyO,MAGzL,EA8BewtG,GA5BsB,SAAC/7G,GAAK,OACvCjB,cAAC+0C,GAAItzC,wBAAA,GACGR,GAAK,IACT6oB,QAAS9pB,cAAC88G,GAA4B,IACtC9yF,YAAahqB,cAAC08G,GAAgC,IAC9C13G,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IAAU3B,SAEnDkF,eAACoqB,KAAgB,CAAAtvB,SAAA,CACbU,cAACyE,KAAS,CAAC5D,OAAO,OAClBb,cAACyE,KAAS,CAAC5D,OAAO,SAClBb,cAACyE,KAAS,CAAC5D,OAAO,gBAClBb,cAACgvB,KAAS,CAACnuB,OAAO,cAClBb,cAACgvB,KAAS,CAACnuB,OAAO,cAClBb,cAACqsC,GAAW,CAACxrC,OAAO,YAAYwrB,UAAU,YAAY2B,KAAM4uF,GAAct9G,SACtEU,cAACyE,KAAS,CAAC5D,OAAO,WAEtBb,cAACqsC,GAAW,CAACxrC,OAAO,SAASwrB,UAAU,SAAS2B,KAAM6uF,GAAWv9G,SAC7DU,cAACyE,KAAS,CAAC5D,OAAO,gBAMvB,E,yQCnCLgB,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNu8B,QAAS,CACL/3B,gBAC2B,UAAvBxE,EAAMyE,QAAQC,KACR1E,EAAMyE,QAAQE,KAAK,KACnB3E,EAAMyE,QAAQE,KAAK,MAEjCu2G,eAAgB,CACZh1F,UAAWlmB,EAAMG,QAAQ,IAG7Bg7G,eAAgB,CACZ5lF,KAAM,EACNhpB,QAAS,OACTkU,eAAgB,iBAEvB,GACD,CAAErgB,KAAM,cAGNg7G,GAAiB,SAAC77G,EAAOmO,GAAY,MACtB,qBAAVnO,EAAwBmO,EAAenO,CAAM,EAElD0qB,GAAU,SAAA/qB,GACZ,IACIm8G,EAkBAn8G,EAlBAm8G,uBACAt2G,EAiBA7F,EAjBA6F,SACAxH,EAgBA2B,EAhBA3B,SACAqB,EAeAM,EAfAN,UAEAof,GAaA9e,EAdAuB,QAcAvB,EAbA8e,cACA4xC,EAYA1wD,EAZA0wD,yBACArzC,EAWArd,EAXAqd,QACAF,EAUAnd,EAVAmd,SACArd,EASAE,EATAF,OACA6V,EAQA3V,EARA2V,SACAhW,EAOAK,EAPAL,SACA81C,EAMAz1C,EANAy1C,OACAkC,EAKA33C,EALA23C,cACA3hC,EAIAhW,EAJAgW,SAEA0qC,GAEA1gD,EAHAiW,aAGAjW,EAFA0gD,YACG79C,EAAIrE,YACPwB,EAAKvB,IACH8C,EAAUX,GAAUZ,GAIpBkX,GAAYglG,IACa,IAA3BC,EAAmCA,OAAyBryG,GAC3DqT,IAAaujC,GAGlB,OACI3hD,cAACkY,WAAQ,CAAA5Y,SACLU,cAACq9G,KAAU57G,wBAAA,CACPd,UAAWkE,IACPrC,EAAQ87B,QACR39B,GAEJmH,KAAK,WACDhE,GAAI,IAAAxE,SAEsB,IAA7BmJ,WAASimD,MAAMpvD,GACZkF,eAAA,OAAK7D,UAAW6B,EAAQ06G,eAAe59G,SAAA,CACnCU,cAAC24C,KAAU,CACPgZ,yBACIA,GAA4B5xC,EAEhC5H,SAAUA,EACVmG,QAASA,EACT1H,SAAUA,EACV8/B,OAAQA,GAAUiL,EAClB/I,cAAeA,IAElB73C,GAA+B,qBAAdA,EAAOkD,IACrBjE,cAAC4pB,KAAY,CACT9iB,SAAUA,EACV/F,OAAQA,EACRH,SAAUA,EAEVqW,UAAU,EACVC,aAAa,kBAKzBzO,WAASpD,IAAI/F,GAAU,SAAC2sB,GAAM,OAC1BA,GAAUviB,iBAAiB4zG,IAAOrxF,EAC5B7jB,IAAMhC,aAAa6lB,EAAQ,CACzBnlB,SAAUq2G,GACNlxF,EAAOhrB,MAAM6F,SACbA,GAEJiZ,aAAco9F,GACVlxF,EAAOhrB,MAAM8e,aACbA,GAEJ4xC,yBAA0BwrD,GACtBlxF,EAAOhrB,MAAM0wD,yBACbA,GAEJC,OAAQ3lC,EAAOhrB,MAAM2wD,OACrBtzC,UACAF,WACArd,OAAQo8G,GACJlxF,EAAOhrB,MAAMF,OACbA,GAEJH,SAAUu8G,GACNlxF,EAAOhrB,MAAML,SACbA,GAEJ81C,SACAkC,cAAeukE,GACXlxF,EAAOhrB,MAAM23C,cACbA,GAEJ3hC,SAAUkmG,GACNlxF,EAAOhrB,MAAMgW,SACbA,KAGN,IAAI,QAMlC,EAwBA+U,GAAQrqB,aAAe,CACnBi3C,eAAe,GAGJ5sB,U,sEChHFklB,GAAiB,SAC1BJ,EACApzB,EACA6/F,GAAO,MAEP,GAAAh8G,OAAGg8G,GAAOh8G,OAAGuvC,EAAI7vC,MAAMrB,KAAI,IAAA2B,OAAOuvC,EAAI7vC,MAAMrB,MAAS8d,EAAQ,EAAC,IAAAnc,OAAOmc,GAAU,IACxE+uB,QAAQ,KAAM,IAAK,EAIf+wE,GA/DQ,SAACv8G,GACpB,IAAQ3B,EAA6D2B,EAA7D3B,SAAUkD,EAAmDvB,EAAnDuB,QAAS2uC,EAA0ClwC,EAA1CkwC,IAAKlkB,EAAqChsB,EAArCgsB,iBAAkB3rB,EAAmBL,EAAnBK,MAAUwC,EAAIrE,YAAKwB,EAAKvB,IACpEgM,EAAWC,cAEX8xG,EAAgBh1G,WAASpD,IAAI/F,GAAU,SAACwxC,EAAKpzB,GAC/C,GAAKhU,yBAAeonC,GACpB,OAAOI,GAAeJ,EAAKpzB,EAAOyzB,EACtC,IASMT,EAAW+sE,EAAc3pF,SAASpoB,EAASS,UAC3CT,EAASS,SACTsxG,EAAc,GAEpB,OACIz9G,cAAC09G,KAAIj8G,wBAAA,CACDH,MAAO2rB,EAAmByjB,EAAWpvC,EACrCq8G,eAAe,WACX75G,GAAI,IAAAxE,SAEPmJ,WAASpD,IAAI/F,GAAU,SAACwxC,EAAKpzB,GAC1B,IAAKhU,yBAAeonC,GAAM,OAAO,KAMjC,IAAM8sE,EAAU1sE,GAAeJ,EAAKpzB,EAAOyzB,GAE3C,OAAO/qC,uBAAa0qC,EAAK,CACrB+sE,OAAQ,SACRv8G,MAAO2rB,EAAmB2wF,EAAUlgG,EACpClb,UACAyqB,oBAER,MAGZ,E,knBC1Ba6wF,GAAsB,SAAC78G,GAChC,IACI8oB,EAwBA9oB,EAxBA8oB,MACAjjB,EAuBA7F,EAvBA6F,SACAxH,EAsBA2B,EAtBA3B,SACAqB,EAqBAM,EArBAN,UAGAof,GAkBA9e,EApBAuB,QAoBAvB,EAnBA88G,iBAmBA98G,EAlBA8e,cACA4xC,EAiBA1wD,EAjBA0wD,yBACArzC,EAgBArd,EAhBAqd,QACApH,EAeAjW,EAfAiW,aACAkH,EAcAnd,EAdAmd,SACArd,EAaAE,EAbAF,OACUi9G,EAYV/8G,EAZA2V,SACAhW,EAWAK,EAXAL,SACA81C,EAUAz1C,EAVAy1C,OACAkC,EASA33C,EATA23C,cAAatI,EASbrvC,EARAgsB,wBAAgB,IAAAqjB,GAAOA,EACvBC,EAOAtvC,EAPAsvC,KACAjS,EAMAr9B,EANAq9B,QACArnB,EAKAhW,EALAgW,SACA/W,EAIAe,EAJAf,QACA2C,EAGA5B,EAHA4B,OACA8+C,EAEA1gD,EAFA0gD,WACG79C,EAAIrE,YACPwB,EAAKvB,IACH8C,EAAUy7G,GAA6Bh9G,GACvCzB,EAAQG,cACR+L,EAAWC,cACXwlC,EAAM3xC,EAAQA,EAAM2xC,IAAMzlC,EAASS,SACzC4F,EAAgC1J,mBAAS,GAAE2J,EAAAnM,YAAAkM,EAAA,GAApC2+B,EAAQ1+B,EAAA,GAAE2+B,EAAW3+B,EAAA,GAQ5B,OACIxN,eAAA,OAAA/C,wBAAA,CAAMd,UAAWkE,IAAW,cAAerC,EAAQ2T,KAAMxV,IAAgB4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAC3FyqB,GACG3jB,uBAAa2jB,EAAO,CAChBppB,UAAW6B,EAAQunB,MACnBnpB,WACAkG,WACA/F,WAGRf,cAAA,OAAKW,UAAW6B,EAAQ+zB,KAAKj3B,SACzBkF,eAACiqB,KAAI,CAAAnvB,SAAA,CAEA8G,uBACGmqC,EACA,CACI/tC,UACA2uC,MACAlkB,mBACAlqB,SAzBA,SAAC+F,EAAOxH,GACvB2rB,GACD0jB,EAAYrvC,EAEpB,EAsBwBA,MAAOovC,GAEXpxC,GAEJU,cAAC6wC,KAAO,IACR7wC,cAAA,OAAKW,UAAW6B,EAAQ+V,QAAQjZ,SAK3BmJ,WAASpD,IAAI/F,GAAU,SAACwxC,EAAKpzB,GAC1B,GAAKozB,EAAL,CAGA,IAAM8sE,EAAU1sE,GAAeJ,EAAKpzB,EAAOyzB,GAC3C,OACInxC,cAAC+wC,IAAK,CAACC,OAAK,EAACpxC,KAAMqxC,aAAW2sE,GAASt+G,SAClC,SAAAgvF,GAAU,OACP5kF,yBAAeonC,GACT1oC,IAAMhC,aAAa0qC,EAAK,CACtB+sE,OAAQ,UACRr7G,UACA5B,WACAG,SACA+F,WACAo3G,OAAQjxF,GACDqhE,EAAW9uF,MACZkxC,IAAahzB,EACnBxd,QAAS4wC,EAAI7vC,MAAMf,SAAWA,EAC9B2C,OAAQiuC,EAAI7vC,MAAM4B,QAAUA,EAC5BvB,MAAO2rB,EACD2wF,EACAlgG,IAER,IAAI,GArBtB,CAyBJ,MAEH4gB,GACGl2B,IAAMhC,aAAak4B,EAAS,CACxBx3B,WACAnG,UAAW,UACXgxD,2BACA5xC,eACAzB,UACApH,eACAkH,WACArd,SACA6V,SAAUonG,EACVp9G,WACA81C,SACAkC,gBACA+I,aACA1qC,qBAS5B,EAEagnG,GAA+Bn8G,aACxC,SAAAC,GAAK,MAAK,CACNo8G,eAAgB,CAAEh+G,MAAO4B,EAAMyE,QAAQnC,MAAM8R,MAC7CoC,QAAS,CACL6P,WAAYrmB,EAAMG,QAAQ,GAC1BmmB,YAAatmB,EAAMG,QAAQ,GAC3B2pB,aAAc9pB,EAAMG,QAAQ,IAEhCiU,KAAM,CACF7H,QAAS,OACTsxC,IAAK,IAET71B,MAAO,CACH/B,SAAU,GAEduO,KAAM,CACFhoB,MAAOxM,EAAMG,QAAQ,KAE5B,GACD,CAAEC,KAAM,iBAoCZ27G,GAAoBn8G,aAAe,CAC/Bi3C,eAAe,EACfrI,KAAMvwC,cAACw9G,GAAc,IACrBl/E,QAASt+B,cAACgsB,GAAO,KAIrB,IAAMzB,GAAoB,SAAHlrB,GACbA,EAANyhD,OACKzhD,EAAL0hD,MACW1hD,EAAX2hD,YAC0B3hD,EAA1B4hD,2BACoB5hD,EAApB6hD,qBACK7hD,EAALgF,MACMhF,EAAN+hD,OACI/hD,EAAJk3B,KACel3B,EAAfgiD,gBACmBhiD,EAAnBiiD,oBACajiD,EAAbuxC,cAAavxC,EACb0qC,SACuB1qC,EAAvBkiD,wBAAuBliD,EACvBo3C,KACWp3C,EAAXiF,YACYjF,EAAZmiD,aACYniD,EAAZoiD,aACepiD,EAAfqiD,gBACUriD,EAAV8e,WAAU9e,EACVkF,QACKlF,EAALgf,MACMhf,EAANkf,OAAMlf,EACNuiD,QAAcviD,EACd++G,WACQ,OAAA3+G,YAAAJ,EAAAoS,GACA,ECxKG4sG,GA5DW,SAACp9G,GACvB,IAAMzB,EAAQG,cACR+L,EAAWC,cACXoyG,EAAmBv+G,EAAQA,EAAM2xC,IAAMzlC,EAASS,SAEtD,OACInM,cAACs+G,KAAgB78G,wBAAA,GACTR,GAAK,IACT88G,iBAAkBA,EAClB5tG,OAAQ,SAAAsP,GAAS,OAAIzf,cAAC89G,GAAmBr8G,YAAA,GAAKge,GAAa,IAGvE,E,8DC0DMrV,GAAcpK,cAAC64F,KAAQ,CAACpuF,SAAS,UAWxB8zG,GA5EO,SAACt9G,GACnB,IAAA4K,EAQI5K,EAPA6F,gBAAQ,IAAA+E,EAAG,GAAEA,EAAAC,EAOb7K,EANA0B,aAAK,IAAAmJ,EAAG,iBAAgBA,EACxB/K,EAKAE,EALAF,OAAMkL,EAKNhL,EAJAkJ,YAAI,IAAA8B,EAAG7B,GAAW6B,EAClB3M,EAGA2B,EAHA3B,SACAsB,EAEAK,EAFAL,SAIEM,GAHKzB,YACPwB,EAAKvB,IAESyB,eAClB4Q,EAAgC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GACtB/N,EAAKsE,EAAW,sBAAmBwC,EAEnC8oB,EAAazhB,uBAAY,SAACtJ,IAjBZ,SAAAA,GAASA,EAAMC,iBAAkB,CAkBjDA,CAAgBD,GAChBN,EAAYM,EAAMM,cACtB,GAAG,CAACZ,IAEEK,EAAcuJ,uBAAY,WAC5B5J,EAAY,KAChB,GAAG,CAACA,IAEJ,OAAKzH,EAGDyD,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAACgJ,KAAO,CAAChE,MAAO9D,EAAUyB,GAAQsG,WAAY,IAAI3J,SAC9CU,cAACkJ,KAAU,CACPC,QAAS0qB,EACT,mBAAkB5vB,EAClBoF,KAAK,QAAO/J,SAEX6K,MAGTnK,cAACypF,KAAO,CACJxlF,GAAIA,EACJ2E,KAAM7C,QAAQwC,GACdA,SAAUA,EACViB,QAASX,EACTg8B,aAAc,CACVC,SAAU,SACVC,WAAY,UAEhBk4D,gBAAiB,CACbn4D,SAAU,MACVC,WAAY,UACdzlC,SAEFU,cAAC2uB,KAAW,CAAArvB,SACP8G,uBAAaqC,WAASijB,KAAKpsB,GAASmC,YAAA,CACjCV,SACA+F,WACAlG,YACGc,aAAuBT,YAhC1B,IAuCxB,ECbeu9G,GAlD+B,SAACv9G,GAAW,IAADw9G,EAAAC,EAC/CnoF,EAAOqhB,eACP+mE,EAAmBrkF,aAAY,SAAA5tB,GAAK,OAAIrL,KAAIqL,EAAM,8BAA+B,IACvFqF,EAAgC1J,qBAAU2J,EAAAnM,YAAAkM,EAAA,GAAnC4L,EAAQ3L,EAAA,GAAE4sG,EAAW5sG,EAAA,GAE5BgE,qBAAU,WAAO,IAADmX,EAAA0xF,EACI,MAAZlhG,GAAoBghG,GAAgC,QAAhBxxF,EAAIlsB,EAAMF,cAAM,IAAAosB,GAAQ,QAAR0xF,EAAZ1xF,EAAc22B,cAAM,IAAA+6D,GAApBA,EAAsB56G,IAC9D26G,EAAYD,EAAiB19G,EAAMF,OAAO+iD,OAAO7/C,IAEzD,GAAG,CAAC06G,EAA8B,QAAdF,EAAEx9G,EAAMF,cAAM,IAAA09G,GAAQ,QAARC,EAAZD,EAAc36D,cAAM,IAAA46D,OAAR,EAAZA,EAAsBz6G,GAAI0Z,EAAUihG,IAc1D,OACI5+G,cAACwH,KAAc/F,wBAAA,GAAKR,GAAK,IAAE8B,SAbJ,SAACzB,GACxB,IAAMqc,EAAWtc,KAAIs9G,EAAkB,CAACr9G,IAClCsyG,EAA4B,OAARj2F,QAAQ,IAARA,OAAQ,EAARA,EAAUi2F,kBAC9BC,EAAsB,OAARl2F,QAAQ,IAARA,OAAQ,EAARA,EAAUk2F,YACxB1xG,EAAe,OAARwb,QAAQ,IAARA,OAAQ,EAARA,EAAUxb,KACvBy8G,EAAYjhG,GACZ4Y,EAAKuhB,OAAO,SAAUn6B,GACtB4Y,EAAKuhB,OAAO,aAAc87D,GAC1Br9E,EAAKuhB,OAAO,OAAQ+7D,GACpBt9E,EAAKuhB,OAAO,OAAQ31C,EACxB,EAG4D7C,SACpDU,cAAC2H,KAAiB,CACdC,WAAW,OACX3E,QAAS,CACLq/B,WAAY,CACRM,aACI5iC,cAAC6iC,KAAc,CAAC/0B,SAAS,MAAKxO,SAC1BU,cAACu+G,GAAa,CACVp0G,KAAMnK,cAAC64F,KAAQ,CAACpuF,SAAS,UACzB9H,MAAM,sCACN5B,OAAQ4c,EACR/c,SAAUK,EAAML,SAChBkG,SAAU7F,EAAM6F,SAASxH,SAEzBU,cAAC8+G,KAAa,CAACj+G,OAAO,cAAc49C,UAAU,kIAUlF,E,cCvCesgE,GAZyC,SAAH1/G,GAAYA,EAANwB,OAAwB,IAADm+G,EAAZ/9G,EAAKxB,YAAAJ,EAAAK,IAC/D6e,EAAWgiC,eAAXhiC,OACF4yB,EAAMnrC,mBAAQ,eAAAi5G,EAAA,OAAY,OAAN1gG,QAAM,IAANA,GAAc,QAAR0gG,EAAN1gG,EAAQulC,cAAM,IAAAm7D,OAAR,EAANA,EAAgB9tE,GAAG,GAAE,CAAO,OAAN5yB,QAAM,IAANA,GAAc,QAARygG,EAANzgG,EAAQulC,cAAM,IAAAk7D,OAAR,EAANA,EAAgB7tE,MAChE4S,EAAkDL,GAAgBvS,GAA1DmS,EAAgBS,EAAhBT,iBAER,OAF6CS,EAAnBN,oBAKtBzjD,cAACsjD,EAAgB7hD,YAAA,GAAKR,IAHO,IAKrC,E,qEC4Bei+G,GA5BsB,SAACj+G,GAShCA,EAPF6F,SAOE7F,EANFN,UAH6C,IAADw+G,EAAAC,EAI5Cr+G,EAKEE,EALFF,OAOFgjD,GAFI9iD,EAJFL,SAIEK,EAHFipB,QAGEjpB,EAFF87C,SACOt9C,YACLwB,EAAKvB,IAEmDgkD,GAAsB,OAAN3iD,QAAM,IAANA,GAAc,QAARo+G,EAANp+G,EAAQ+iD,cAAM,IAAAq7D,OAAR,EAANA,EAAgBhuE,MAApFkS,EAAaU,EAAbV,cAAeG,EAAgBO,EAAhBP,iBAAkBn/C,EAAK0/C,EAAL1/C,MAAOuT,EAAOmsC,EAAPnsC,QAEhD,OAAW,OAAN7W,QAAM,IAANA,GAAc,QAARq+G,EAANr+G,EAAQ+iD,cAAM,IAAAs7D,GAAdA,EAAgBjuE,IACjBv5B,EAAiB5X,cAACgkD,GAAwB,IACzCR,GAAqB95C,yBAAe1J,cAACqjD,EAAa,KACnDh/C,EAAe,WAGdtD,EAGHf,cAACqjD,EAAa5hD,YAAA,GAAKR,IAHD,KAJiDjB,cAACikD,GAAyB,IAF7DjkD,cAACikD,GAAyB,GAY9D,ECpCapiD,GAAYC,aAAW,SAAAC,GAAK,MAAK,CAC1Cs9G,QAAS,CACT,EACAC,MAAO,CACHxxG,SAAU,SACVuU,IAAK,MACLpgB,SAAU,IACVuP,OAAQ,KAGf,GAAG,CAAErP,KAAM,+BAmBGo9G,GAjBoB,SAACt+G,GAChC,IAAQN,EAAcM,EAAdN,UACF6B,EAAUX,KACR0c,EAAWgiC,eAAXhiC,OACR,OACIve,cAAA,OAAKW,UAAWkE,IAAWlE,EAAW6B,EAAQ68G,SAAS//G,SACnDU,cAAA,OAAKW,UAAW6B,EAAQ88G,MAAMhgH,SAC1BU,cAACk/G,GAA4Bz9G,wBAAA,GAAMR,GAAK,IAAEF,OAAQwd,EAAQymC,UAAQ,QAIlF,ECrBMxmC,GAAe,CAACC,eAAYC,aAAU,MACtC8gG,GAAmB,CAAC/gG,gBACpB7H,GAAW,SAAC9P,EAAU7C,EAAIuL,GAC5B,IAAAiwG,EAAgD34G,EAASqkC,MAAM,KAAIu0E,EAAA75G,YAAA45G,EAAA,GAAzDE,GAAFD,EAAA,GAAuBA,EAAA,IAAEpmE,EAAWomE,EAAA,GAC5C,MAAM,IAANn+G,OAAWo+G,EAAqB,KAAAp+G,OAAI+3C,EAAW,QACnD,EA8CesmE,GA5CiB,SAAC3+G,GAC7B,IAAM4+G,EAA2BhkE,GAAuB,CAAEj7C,SAAU,YAAaqD,GAAIhD,EAAMq4C,YAAaxyC,SAAU,eAC5Gg5G,EAAwB1oE,aAAoBn2C,GAClD,OACIjB,cAACwsB,KAAuB,CAAClrB,MAAM,YAAWhC,SACtCU,cAAC89C,GAAwB,CAACx8C,MAAOu+G,EAAyBvgH,SACtDU,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC3CU,cAACq3C,KAAqB,CAAC/1C,MAAOw+G,EAAsBxgH,SAChDU,cAACu2C,KAAU90C,oCAAA,GACHR,GACA6+G,GAAqB,IACzB1/G,UAAU,MAAKd,SAEfkF,eAAC65G,GAAU,CACPznG,SAAUA,GACVm9E,qBAAqB,EACrBhqE,MAAO/pB,cAACu/G,GAA0B,IAClCjhF,QAASt+B,cAACgsB,KAAO,CAACoxF,wBAAsB,IAAI99G,SAAA,CAE5CkF,eAACu7G,KAAO,CAACp9G,MAAM,mDAAUrD,SAAA,CACrBU,cAACw+G,GAAqC,CAAC39G,OAAO,YAAYwrB,UAAU,SAASjpB,SAAUo8G,GAAkB78G,MAAM,8CAC/G3C,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,OAEvDzO,cAAC+/G,KAAO,CAACp9G,MAAM,mDAAUrD,SACrBU,cAAC++G,GAA+C,CAACl+G,OAAO,wBAE5D2D,eAACu7G,KAAO,CAACp9G,MAAM,OAAMrD,SAAA,CACjBU,cAAC0U,KAAS,CAAC7T,OAAO,aAAa2Q,OAAO,UACtCxR,cAAC0U,KAAS,CAAC7T,OAAO,OAAO2Q,OAAO,0BASpE,ECFemnC,GA5CI,SAAA13C,GACf,IAAQL,EAAqBK,EAArBL,SAAUG,EAAWE,EAAXF,OACZoW,EAASC,eACTE,EAAUC,eACVyoG,EAAe3oG,eACrB6lC,EAA8BC,aAC1Bv8C,EACAG,EAAOkD,GACP,CAAC,EACDlD,GACH6zD,EAAA/uD,YAAAq3C,EAAA,GALME,EAAMwX,EAAA,GAAIh9C,EAAOg9C,EAAA,GAAPh9C,QAQXyuC,EAAaj0C,uBAAY,SAACmM,EAAQ3H,GACpCwmC,EACI,CAAErlC,QAAS,CAAEvI,KAAM+O,IACnB,CACItN,OAAQusC,KACR1mC,UAAW,WACPK,EAAO,0BACH,CACI1Q,KAAM,OACNye,YAAa,CAAEjN,YAAa,KAIpC+nG,EAAappG,EACjB,EACAG,UAAW,SAAA1S,GACP8S,EAAO,6BACH,CACI1Q,KAAM,YAId6Q,GACJ,GAGZ,GAAG,CAAC8lC,EAAQjmC,EAAQ6oG,EAAc1oG,IAElC,OAAOtX,cAACigH,KAAYx+G,wBAAA,GAAKR,GAAK,IAAE2wD,OAAQvL,EAAYluC,SAAUP,IAClE,ECAesoG,GA3Ce,SAAAj/G,GAC1B,IAAQL,EAAqBK,EAArBL,SAAUG,EAAWE,EAAXF,OACZoW,EAASC,eACTE,EAAUC,eAChB2lC,EAA8BC,aAC1Bv8C,EACAG,EAAOkD,GACP,CAAC,EACDlD,GACH6zD,EAAA/uD,YAAAq3C,EAAA,GALME,EAAMwX,EAAA,GAAIh9C,EAAOg9C,EAAA,GAAPh9C,QAQXyuC,EAAaj0C,uBAAY,SAACmM,EAAQ3H,GACpCwmC,EACI,CAAErlC,QAAS,CAAEvI,KAAM+O,IACnB,CACItN,OAAQusC,KACR1mC,UAAW,WACPK,EAAO,0BACH,CACI1Q,KAAM,OACNye,YAAa,CAAEjN,YAAa,IAKxC,EACAlB,UAAW,SAAA1S,GACP8S,EAAO,6BACH,CACI1Q,KAAM,YAId6Q,GACJ,GAGZ,GAAG,CAAC8lC,EAAQjmC,EAAQG,IAEpB,OAAOtX,cAAC24C,KAAUl3C,wBAAA,GAAKR,GAAK,IAAE2wD,OAAQvL,EAAY1jD,MAAM,8BAA8BwV,SAAUP,IACpG,ECxBeuoG,GAhB0B,SAACl/G,GAAW,IAAD07G,EAC1C3zF,EAAeiwB,eACf/3C,EAAYC,cACZ6kB,EAA+B,QAAtB22F,EAAG3zF,EAAajoB,cAAM,IAAA47G,OAAA,EAAnBA,EAAqB32F,UAEvC,OACIxhB,eAAC0kB,KAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,KAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,KAAkB,CAACtiB,SAAS,aAAalG,SAAS,cACnDZ,cAAC6oB,GAAoB,CAAC/hB,SAAS,aAAa/F,OAAQilB,IACpDhmB,cAAC6oB,GAAoBpnB,wBAAA,GAAKunB,GAAkB/nB,IAC5CjB,cAACZ,KAAc,CAAAE,SAAE4B,EAAU,sBAGvC,ECFMsd,GAAe,CAACC,eAAYC,aAAU,MACtC8gG,GAAmB,CAAC/gG,gBAEpB2hG,GAA+B,SAAH/gH,GAAgD,IAAD09G,EAAzCvtG,EAAInQ,EAAJmQ,KAAM5O,EAAQvB,EAARuB,SAAmBgZ,GAAFva,EAAPoqB,QAAkBpqB,EAATua,WACvD9S,EAAQ,cAAAvF,OAAqB,OAAJiO,QAAI,IAAJA,GAAe,QAAXutG,EAAJvtG,EAAMwW,iBAAS,IAAA+2F,OAAX,EAAJA,EAAiB94G,GAAE,KAAA1C,OAAIX,GACtD,OACI4D,eAAC67G,KAAU,CAACx5D,gBAAc,EAAAvnD,SAAA,CACrBsa,GACG5Z,cAACygD,GAAa,IAElBzgD,cAACw4C,GAAM,IACPx4C,cAAC+b,KAAU,CAAAzc,SACNiqB,KAAYI,IAAI,SAAU,cAAgBJ,KAAYI,IAAI,SAAU,sBAAwBJ,KAAYI,IAAI,UAAW,WAAaJ,KAAYI,IAAI,UAAW,WAAa3pB,cAACowC,GAAW,CAACtpC,SAAUA,EAAU/F,OAAQyO,QAItO,EAIM8wG,GAA+B,SAAAr/G,GAKjC,IAAMkW,EAASC,eACTE,EAAUC,eAOhB,OACI/S,eAACwnB,KAAOvqB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACdU,cAAC24C,GAAU,CAAC/hC,SAAU3V,EAAM2V,WAC5B5W,cAACkgH,GAAqB,CAACtnE,eAAe,EAAOj2C,MAAM,8BAA8BmU,UARvE,WACdK,EAAO,0BAA2B,OAAQ,CAAEc,YAAa,IACzDX,GACJ,EAK+GpX,QAAQ,OAAOkY,MAAO,CAAE0S,WAAY,KAC3I9qB,cAACw4C,GAAM,CAACt4C,QAAQ,QACfqpB,KAAYI,IAAI,SAAU,cAAgBJ,KAAYI,IAAI,SAAU,sBAAwB3pB,cAAC4pB,KAAY,CAAC1S,aAAa,aAAaN,SAAU3V,EAAM2V,SAAUjU,MAAM,wBAGjL,EAwDe49G,GAtDsB,SAACt/G,GAClC,IAAM4+G,EAA2BhkE,GAAuB,CAAEj7C,SAAU,YAAaqD,GAAIhD,EAAMq4C,YAAaxyC,SAAU,eAC5G05G,EAAsB/mE,aAAkBx4C,GACxC2V,EAAQ,cAAArV,OAAiBN,EAAMq4C,YAAW,SAAA/3C,OAAQN,EAAMyK,SAASV,QAEvE,OACIhL,cAACwsB,KAAuB,CAAClrB,MAAM,YAAWhC,SACtCU,cAAC89C,GAAwB,CAACx8C,MAAOu+G,EAAyBvgH,SACtDU,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC3CU,cAAC05C,KAAmB,CAACp4C,MAAOk/G,EAAoBlhH,SAC5CU,cAACo5C,GAAQ33C,oCAAA,GACDR,GACAu/G,GAAmB,IACvB12F,QAAS9pB,cAACogH,GAA4B,IACtCp2F,YAAahqB,cAACmgH,GAAgC,IAC9Cn7G,MAAOhF,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,IACzCb,UAAU,MAAKd,SAEfkF,eAAC65G,GAAU,CACPznG,SAAUA,EACVm9E,qBAAqB,EACrBhqE,MAAO/pB,cAACu/G,GAA0B,IAClCjhF,QAASt+B,cAACsgH,GAA4B,IAAIhhH,SAAA,CAE1CkF,eAACu7G,KAAO,CAACp9G,MAAM,mDAAUrD,SAAA,CACrBU,cAACw+G,GAAqC,CAAC39G,OAAO,YAAYwrB,UAAU,SAASjpB,SAAUo8G,GAAkB78G,MAAM,8CAC/G3C,cAAC4f,KAAS,CAAC/e,OAAO,OAAOuC,SAAUob,KACnCxe,cAAC4f,KAAS,CAAC/e,OAAO,cAAck4C,WAAS,EAACtqC,WAAS,OAEvDzO,cAAC+/G,KAAO,CAACp9G,MAAM,mDAAUrD,SACrBU,cAAC++G,GAA+C,CAACl+G,OAAO,wBAE5D2D,eAACu7G,KAAO,CAACp9G,MAAM,OAAMrD,SAAA,CAGjBU,cAAC0U,KAAS,CAAC7T,OAAO,aAAa2Q,OAAO,UACtCxR,cAAC0U,KAAS,CAAC7T,OAAO,OAAO2Q,OAAO,0BAapE,ECpDeivG,GA/CwB,SAACx/G,GACpC02B,aAA6B,oBAAqB,CAAC,WAAY,YAAa12B,GAC5E,IACI6F,EAGA7F,EAHA6F,SACA7C,EAEAhD,EAFAgD,GACA8S,EACA9V,EADA8V,UAEEnW,EAAWuE,aAAmBlE,GAC9BC,EAAYC,cACZgW,EAASC,eACTR,EAAWS,eACXC,EAAUC,eACV2S,EAAU2M,eAGV5M,EAAe/oB,EAAU,eAAgB,CAC3CiB,KAFqBq8B,cAEfD,CAAiB39B,EAAU,GACjCqD,KACAlD,WAIJy7C,EAA0DC,aAAU77C,EAAUqD,EAAI,CAC9EgN,OAAQyrC,KACR3lC,UACa,OAATA,QAAS,IAATA,IACC,WACGI,EAAO,oCAAqC,WAC5CP,EAAS,OAAQ9P,GACjBwQ,GACJ,IARMvW,EAAMy7C,EAAZhtC,KAAcnL,EAAKm4C,EAALn4C,MAAOuT,EAAO4kC,EAAP5kC,QAASoT,EAAMwxB,EAANxxB,OAAQC,EAAOuxB,EAAPvxB,QAW9C,MAAO,CACH5mB,QACAuT,UACAoT,SACAf,eACArpB,WACAkG,WACA/F,SACAkqB,UACAf,UAGR,EC3DMw2F,GAA2B9+F,wBAAc,CAC3C9a,SAAU,KACV/F,OAAQ,KACRkpB,aAAc,KACde,OAAQ,KACRpT,QAAS,KACTvT,MAAO,KACP4mB,QAAS,KACTrqB,SAAU,KACVspB,QAAS,OAGbw2F,GAAyBz+F,YAAc,2BAExBy+F,UCCAC,GAX0B,SAAHthH,GAA6B,IAAvBC,EAAQD,EAARC,SAAUgC,EAAKjC,EAALiC,MAElD,OACItB,cAAC0gH,GAAyB1iE,SAAQ,CAAC18C,MAAOA,EAAMhC,SAC5CU,cAACm+C,KAAqB,CAAC78C,MAAOA,GAASA,EAAMP,OAAOzB,SAC/CA,KAIjB,ECTeshH,GAHqB,WAAH,OAASpgH,qBAAWkgH,GAA0B,E,4EC2ChEG,GAzBsB,SAAHzvG,GAAgC,IAT3C/R,EASiBsB,EAASyQ,EAATzQ,UAAcmD,EAAIrE,YAAA2R,EAAAK,IACtDqvG,EAA6BF,GAA4B98G,GAAjDgD,EAAQg6G,EAARh6G,SAAU/F,EAAM+/G,EAAN//G,OAClBopB,EAA6BrO,aAAsBhY,GAApCqmB,EAAPV,QAAgBU,EAAPY,QACjB,OACI/qB,cAAC+b,KAAUta,wBAAA,CAACd,UAAWA,KAbRtB,EAayCyE,GAZ5DgD,SACSzH,EAATsB,UACOtB,EAAPoqB,QACOpqB,EAAPqqB,QACQrqB,EAARuB,SACOnB,YAAAJ,EAAAK,MAO0D,IAAAJ,SACzDkF,eAACyD,KAAU,CAAC9H,MAAM,UAASb,SAAA,CACvBU,cAACy0C,KAAoB,CAAC3tC,SAAUA,EAAU/F,OAAQA,IAClDf,cAAC00C,KAAoB,CAAC5tC,SAAUA,EAAU/F,OAAQA,IAClDf,cAAC4L,KAAqB,CAAC9E,SAAUA,EAAU/F,OAAQA,SAInE,E,qECgBeggH,GA5BuB,SAAC9/G,GASjCA,EAPF6F,SAOE7F,EANFN,UAFF,IAGEI,EAKEE,EALFF,OAQFgjD,GAHI9iD,EAJFL,SAIEK,EAHFipB,QAGEjpB,EAFF87C,SACOt9C,YACLwB,EAAKvB,IAGmDgkD,GAAgB3iD,EAAO+iD,OAAO3S,MAAlFkS,EAAaU,EAAbV,cAAeG,EAAgBO,EAAhBP,iBAAkBn/C,EAAK0/C,EAAL1/C,MAEzC,OAFuD0/C,EAAPnsC,QAE3B5X,cAACgkD,GAAwB,IACzCR,GAAqB95C,yBAAe1J,cAACqjD,EAAa,KACnDh/C,EAAe,WAGdtD,EAGHf,cAACqjD,EAAa5hD,YAAA,GAAKR,IAHD,KAJiDjB,cAACikD,GAAyB,GAUjG,EClBe+8D,GAhB0B,SAAC//G,GAAW,IAAD07G,EAC1C3zF,EAAe43F,KACf1/G,EAAYC,cACZ6kB,EAA+B,QAAtB22F,EAAG3zF,EAAajoB,cAAM,IAAA47G,OAAA,EAAnBA,EAAqB32F,UAEvC,OACIxhB,eAAC0kB,KAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,KAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,KAAkB,CAACtiB,SAAS,aAAalG,SAAS,cACnDZ,cAAC6oB,GAAoB,CAAC/hB,SAAS,aAAa/F,OAAQilB,IACpDhmB,cAAC6oB,GAAoBpnB,wBAAA,GAAKunB,GAAkB/nB,IAC5CjB,cAACZ,KAAc,CAAAE,SAAE4B,EAAU,sBAGvC,E,+TCZM+/G,GAA4B,SAAChgH,GAC/B,IACIqhD,EAOArhD,EAPAqhD,QACAp5B,EAMAjoB,EANAioB,YAGAvoB,GAGAM,EALA3B,SAKA2B,EAJAuB,QAIAvB,EAHAN,WACAo2B,EAEA91B,EAFA81B,MACGjzB,EAAIrE,YACPwB,EAAKvB,IAEH8C,EAAUX,GAAUZ,GAE1B+gD,EAGInD,aAAoB59C,GAFpB2Y,EAASooC,EAATpoC,UACAmiC,EAAeiG,EAAfjG,gBAEJ+kE,EAQIF,GAA4B3/G,GAP5B6F,EAAQg6G,EAARh6G,SACAmjB,EAAY62F,EAAZ72F,aACAP,EAAOo3F,EAAPp3F,QACA3oB,EAAM+/G,EAAN//G,OACAH,EAAQkgH,EAARlgH,SACAspB,EAAO42F,EAAP52F,QAGIT,EAAY3N,aAAsB7a,GAAlCwoB,QACR,IAAK1oB,EAAQ,OAAO,KAEpB,IAAMymD,GAA2B5tC,GAAYA,EAAUvU,KAAI,SAAAoiD,GAAQ,QAAI1L,KAAiD,MAA7BA,EAAgB0L,GAA0B,IAAEC,MAAM3hD,SAE7I,OACIvB,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,iBAAkBrC,EAAQ8D,KAAM3F,IAClD4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,CAE3BU,cAACwqB,KAAc,CACXxlB,MAAO+xB,EACPh2B,OAAQA,EACRkpB,aAAcA,IAEjBf,GACCtP,GAAa0oC,IACXtiD,cAACkhH,GAAgB,CACb5+D,QAASA,EACTx7C,SAAUA,EACV0I,KAAMzO,EACN2oB,QAASA,EACTD,QAASA,EACT7oB,SAAUA,EACVgZ,UAAWA,IAGnB5Z,cAAA,OAAKW,UAAWkE,IAAWrC,EAAQ2T,MAAM7W,SACrCU,cAAA,OAAKW,UAAW6B,EAAQmlD,YAAYroD,SAC/ByB,GAAUymD,GACPxnD,cAACmhH,GAA2B,CAACvgH,SAAUA,EAAUkG,SAAUA,EAAU/F,OAAQA,EAAQmpB,QAASA,WAMtH,EAqBA+2F,GAA0Bt/G,aAAe,CACrCa,QAAS,CAAC,EACV8/C,QAAStiD,cAACohH,GAAmC,IAC7Cl4F,YAAalpB,cAACqhH,GAAuC,KAGzD,I,wBAAMx/G,GAAYC,YACd,CACIwE,KAAM,CAAC,EACP6P,KAAM,CACF7H,QAAS,QAEbq5C,YAAa,CACTrwB,KAAM,aAGd,CAAEn1B,KAAM,gBAGNooB,GAAoB,SAAHlrB,KACnByH,SAAezH,EACf4qB,aAAmB5qB,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACdsnB,aAAmBtnB,EACnB2gB,QAAc3gB,EACd4E,GAAS5E,EACTi6C,YAAkBj6C,EAClB2rB,OAAa3rB,EACbuY,QAAcvY,EACdqM,SAAerM,EACfG,MAAYH,EACZ4D,QAAc5D,EACd4rB,QAAc5rB,EACdkqB,YAAkBlqB,EAClB8gD,MAAY9gD,EACZyoD,SAAezoD,EACfua,UAAgBva,EAChB08C,gBAAsB18C,EACtBq+C,mBAEO,OAAAj+C,YAAAJ,EAAAoS,GACA,EAGIwvG,MCvGAK,GA7Be,SAACrgH,GAE3B,IAAM4+G,EAA2BhkE,GAAsBp6C,wBAAC,CAAC,EAAIR,GAAK,IAAEL,SAAU,YAAaqD,GAAIhD,EAAMq4C,eAC/FioE,EAAmCd,GAA+Bx/G,GAExE,OACIjB,cAACwsB,KAAuB,CAAClrB,MAAM,YAAWhC,SACtCU,cAAC89C,GAAwB,CAACx8C,MAAOu+G,EAAyBvgH,SACtDU,cAACwsB,KAAuB,CAAClrB,MAAOL,EAAML,SAAStB,SAC3CU,cAAC2gH,GAAgC,CAACr/G,MAAOigH,EAAiCjiH,SACtEU,cAACihH,GAAyBx/G,wBAAA,GAAKR,GAAWsgH,WAMlE,ECbeD,GATsB,SAACrgH,GAAK,OACvCjB,cAACwhH,GAAwB//G,wBAAA,GACjBR,GAAK,IACT81B,MAAO/2B,cAACwqB,GAAc/oB,YAAA,CAACZ,OAAO,QAAWI,MAC3C,ECFAwgH,GAAwB,oB,iECejBC,GAAgBj6F,aAdd,SAAA1lB,GAAK,MAAK,CACrBuE,KAAM,CAAC,EACP6P,KAAM,CACF7H,QAAS,QAEbqoC,KAAM,CACFrf,KAAM,YAEVqqF,YAAa,CACTrqF,KAAM,YAEb,GAG4B7P,EAAmB,SAAApoB,GAOzC,IANH2F,EAAK3F,EAAL2F,MACA+kB,EAAK1qB,EAAL0qB,MACAzqB,EAAQD,EAARC,SACAkD,EAAOnD,EAAPmD,QACA7B,EAAStB,EAATsB,UACQlB,YAAAJ,EAAAK,IAGR,OADAkiH,eACKtiH,EAGDkF,eAAA,OAAK7D,UAAWkE,IAAW,aAAcrC,EAAQ8D,KAAM3F,GAAWrB,SAAA,CAC9DU,cAAC+2B,KAAK,CAAC/xB,MAAOA,IACdR,eAAA,OAAK7D,UAAS,GAAAY,OAAKiB,EAAQ2T,MAAO7W,SAAA,CAC9BU,cAAA,OAAKW,UAAS,GAAAY,OAAKiB,EAAQm/G,aAAcriH,SAEpCmJ,WAASpD,IAAI/F,GAAU,SAACmK,EAAOiU,GAAK,OACjCtX,uBAAaqD,EAAO,CAAC,EAAE,MAI9BsgB,GAAS3jB,uBAAa2jB,EAAO,CAAC,SAbnB,IAiB5B,IAee83F,GAZG,SAAA5gH,GAAK,OACnBjB,cAAC0hH,GAAajgH,YAAA,GAAKR,GAAS,ECpDjB,OAA0B,qCCG1B6gH,GCGE,SAAC7gH,GACd,IAAA8Q,EAAgC1J,mBAAS,IAAG2J,EAAAnM,YAAAkM,EAAA,GAArC26F,EAAQ16F,EAAA,GAAE+vG,EAAW/vG,EAAA,GAQ5B,OANAgE,qBAAU,WACN40C,MAAMo3D,IACD50G,MAAK,SAAC60G,GAAG,OAAKA,EAAI/1F,MAAM,IACxB9e,MAAK,SAAC8e,GAAI,OAAK61F,EAAY71F,EAAK,GACzC,GAAG,IAGClsB,cAAC6hH,GAASpgH,wBAAA,GACFR,GAAK,IACT+D,MAAM,mBAAkB1F,SAExBU,cAAC8+G,KAAa,CAAC/9G,OAAQ,CAAE2rG,YAAY7rG,OAAO,eAGxD,EClBaqhH,GAActlG,aAAGC,QAAAC,aAAA,mFAkBfqlG,GATF,SAACrvE,GACV,OAAOC,GAAcz5B,QAAQ4oG,IAAa90G,MAAK,SAAAmiC,GAE3C,MAAO,CACH//B,KAFiB,OAAR+/B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAI3B,GACJ,EChBa0yG,GAActlG,aAAGC,QAAAC,aAAA,mFAkBfqlG,GATF,SAACrvE,GACV,OAAOC,GAAcz5B,QAAQ4oG,IAAa90G,MAAK,SAAAmiC,GAE3C,MAAO,CACH//B,KAFiB,OAAR+/B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAI3B,GACJ,EChBa0yG,GAActlG,aAAGC,QAAAC,aAAA,mFAkBfqlG,GATF,SAACrvE,GACV,OAAOC,GAAcz5B,QAAQ4oG,IAAa90G,MAAK,SAAAmiC,GAE3C,MAAO,CACH//B,KAFiB,OAAR+/B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAI3B,GACJ,EChBa0yG,GAActlG,aAAGC,QAAAC,aAAA,mFAkBfqlG,GATF,SAACrvE,GACV,OAAOC,GAAcz5B,QAAQ4oG,IAAa90G,MAAK,SAAAmiC,GAE3C,MAAO,CACH//B,KAFiB,OAAR+/B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAI3B,GACJ,EChBa0yG,GAActlG,aAAGC,QAAAC,aAAA,sEAkBfqlG,GATF,SAACrvE,GACV,OAAOC,GAAcz5B,QAAQ4oG,IAAa90G,MAAK,SAAAmiC,GAE3C,MAAO,CACH//B,KAFiB,OAAR+/B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAI3B,GACJ,EChBa0yG,GAActlG,aAAGC,QAAAC,aAAA,mFAkBfqlG,GATF,SAACrvE,GACV,OAAOC,KAAcz5B,QAAQ4oG,IAAa90G,MAAK,SAAAmiC,GAE3C,MAAO,CACH//B,KAFiB,OAAR+/B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAI3B,GACJ,EChBa0yG,GAActlG,aAAGC,QAAAC,aAAA,mFAkBfqlG,GATF,SAACrvE,GACV,OAAOC,KAAcz5B,QAAQ4oG,IAAa90G,MAAK,SAAAmiC,GAE3C,MAAO,CACH//B,KAFiB,OAAR+/B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAI3B,GACJ,EChBa0yG,GAActlG,aAAGC,QAAAC,aAAA,mFAkBfqlG,GATF,SAACrvE,GACV,OAAOC,KAAcz5B,QAAQ4oG,IAAa90G,MAAK,SAAAmiC,GAE3C,MAAO,CACH//B,KAFiB,OAAR+/B,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,KAI3B,GACJ,ECRM4yG,GAAuB,CAAE5yG,KAAM,CAAErN,KAAMuF,IAAkBwiB,QAASm4F,MAElEC,GAAe,CACjB9yG,UAAMzE,EACN1G,WAAO0G,EACP6M,SAAS,EACToT,QAAQ,GA8CGu3F,GA3CC,WACZ,IAAMr4F,EAAU2M,eACVmY,EAAWC,cACjBl9B,EAA0B1J,mBAASi6G,IAAatwG,EAAAnM,YAAAkM,EAAA,GAAzCrF,EAAKsF,EAAA,GAAE4T,EAAQ5T,EAAA,GAqCtB,OAnCAgE,qBAAU,WA8BN,OA7BAg5B,EAAS4E,gBACT1mC,QAAQM,IAAI,CACR40G,GACAI,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,KACAC,OAEC31G,MAAK,SAAAoC,GACFoW,EAAS,CACLpW,OACAoI,SAAS,EACToT,QAAQ,GAEhB,IACCkoB,OAAM,SAAA7uC,GACHuhB,EAAS,CACLvhB,QACAuT,SAAS,EACToT,QAAQ,GAEhB,IAAG+oB,SAAQ,WACP/E,EAASgF,eACb,IAEI,WACJpuB,EAAS08F,GACb,CACJ,GAAG,CAACtzE,EAAU9kB,IAEPxd,CACX,ECLes2G,GA/CiB,SAAC/hH,GAC7B,IAAMC,EAAYC,cACZgW,EAASC,eACf6rG,EAAyCV,KAAjC/yG,EAAIyzG,EAAJzzG,KAAMnL,EAAK4+G,EAAL5+G,MAAOuT,EAAOqrG,EAAPrrG,QAASoT,EAAMi4F,EAANj4F,OAgB9B,OANAhV,qBAAU,WACF3R,GACA8S,EAAO,gBAAiB,UAEhC,GAAG,CAAC9S,IAEAA,EAAc,MACb2mB,GAAUpT,EAAgB1W,EAAU,mBAKrCsD,eAAA,OAAAlF,SAAA,CACIU,cAACosC,KAAI,CAAC0hB,OAAK,EAAAxuD,SACNkQ,EAAKnK,KAAI,SAAA41B,GACN,IAAMknF,EAAOlnF,EAAKzrB,KAElB,OACIxP,cAACssD,KAAQ,CAAAhtD,SACLU,cAACysD,KAAY,CAACtwB,QAASgmF,EAAKhgH,KAAMgqB,UAAWg2F,EAAKj4F,WADvCi4F,EAAKhgH,KAI5B,MAEJnC,cAAC8f,KAAM,CACH3f,MAAM,UACNgJ,QAAS,kBAlCD+L,EAkCkB1F,OAjClC0zG,UAAUC,UAAUC,UAAUh8G,KAAKC,UAAU6N,EAAM,KAAM,OAAO9H,MAAK,WACjE+J,EAAO,8BAA+B,OAC1C,IAAG+7B,OAAM,SAAC7uC,GAEV,IALe,IAAC6Q,CAkCuB,EAAC5V,SAE/B4B,EAAU,2BAI3B,ECrDemiH,GCIK,SAACpiH,GAEjB,OACIjB,cAAC6hH,GAASpgH,wBAAA,GACFR,GAAK,IACT+D,MAAM,sBAAqB1F,SAE3BU,cAACgjH,GAAuB,MAIpC,ECmIeM,GArIM,CACjBtjH,cAAC+wC,IAAK,CAEFnxC,KAAK,cACLoxC,OAAK,EACL7gC,OAAQ,SAAAm+E,GAAU,OACdtuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAWmjH,GACXz8G,SAAS,WACTlG,SAAS,WACL0tF,GACN,GATF,iBAYRtuF,cAAC+wC,IAAK,CAEFnxC,KAAK,mBACLuQ,OAAQ,SAAAm+E,GAAU,OACdtuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAWojH,GACX18G,SAAS,WACTlG,SAAS,WACL0tF,GACN,GARF,iBAWRtuF,cAAC+wC,IAAK,CAEFnxC,KAAK,cACLoxC,OAAK,EACL7gC,OAAQ,SAAAm+E,GAAU,OACdtuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAWqjH,GACX38G,SAAS,WACTlG,SAAS,WACL0tF,GACN,GATF,iBAYRtuF,cAAC+wC,IAAK,CAEFnxC,KAAK,mBACLuQ,OAAQ,SAAAm+E,GAAU,OACdtuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAWsjH,GACX58G,SAAS,WACTlG,SAAS,WACL0tF,GACN,GARF,iBAWRtuF,cAAC+wC,IAAK,CACFnxC,KAAK,sBACLuQ,OAAQ,SAAAm+E,GAAU,OACdtuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAW2nD,GACXjhD,SAAS,aACTlG,SAAS,YACTqD,GAAIuqF,mBAAmBF,EAAW9uF,MAAM26D,OAAOl2D,KAC3CqqF,GACN,IAGVtuF,cAAC+wC,IAAK,CACFnxC,KAAK,qDACLuQ,OAAQ,SAAAm+E,GAAU,OACdtuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAW48G,GACXl2G,SAAQ,cAAAvF,OAAgBitF,mBAAmBF,EAAW9uF,MAAM26D,OAAO7gB,aAAY,sBAC/E14C,SAAS,oBACTqD,GAAIuqF,mBAAmBF,EAAW9uF,MAAM26D,OAAOl2D,IAC/Cq1C,YAAak1C,mBAAmBF,EAAW9uF,MAAM26D,OAAO7gB,cACpDg1C,GACN,IAGVtuF,cAAC+wC,IAAK,CACFnxC,KAAK,qDACLuQ,OAAQ,SAAAm+E,GAAU,OACdtuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAWkhH,GACXx6G,SAAQ,cAAAvF,OAAgBitF,mBAAmBF,EAAW9uF,MAAM26D,OAAO7gB,aAAY,sBAC/E14C,SAAS,oBACTqD,GAAIuqF,mBAAmBF,EAAW9uF,MAAM26D,OAAOl2D,IAC/Cq1C,YAAak1C,mBAAmBF,EAAW9uF,MAAM26D,OAAO7gB,cACpDg1C,GACN,IAGVtuF,cAAC+wC,IAAK,CACFnxC,KAAK,mDACLuQ,OAAQ,SAAAm+E,GAAU,OACdtuF,cAACuuF,KAAe9sF,wBAAA,GACR6sF,GAAU,IACdluF,UAAWw/G,GACX94G,SAAQ,cAAAvF,OAAgBitF,mBAAmBF,EAAW9uF,MAAM26D,OAAO7gB,aAAY,sBAC/E14C,SAAS,oBACT04C,YAAak1C,mBAAmBF,EAAW9uF,MAAM26D,OAAO7gB,aACxDv4C,OAAQ,CAAEilB,UAAW,CAAE/hB,GAAIuqF,mBAAmBF,EAAW9uF,MAAM26D,OAAO7gB,iBACxE,IAGVt5C,cAAC+wC,IAAK,CACFnxC,KAAK,gDACLuQ,OAAQ,SAAAm+E,GAAU,OACdtuF,cAACuuF,KAAe9sF,YAAA,CACZrB,UAAWmgH,GACXz5G,SAAQ,cAAAvF,OAAgBitF,mBAAmBF,EAAW9uF,MAAM26D,OAAO7gB,aAAY,sBAC/E14C,SAAS,oBACTqD,GAAIuqF,mBAAmBF,EAAW9uF,MAAM26D,OAAOl2D,IAC/Cq1C,YAAak1C,mBAAmBF,EAAW9uF,MAAM26D,OAAO7gB,cACpDg1C,GACN,IAGVtuF,cAAC+wC,IAAK,CACFnxC,KAAK,kBACLuQ,OAAQ,SAAAm+E,GAAU,OACdtuF,cAAC8hH,GAAQrgH,YAAA,GACD6sF,GACN,IAGVtuF,cAAC+wC,IAAK,CACFnxC,KAAK,qBACLuQ,OAAQ,SAAAm+E,GAAU,OACdtuF,cAACqjH,GAAW5hH,YAAA,GACJ6sF,GACN,KC7IRq1B,GAAwB,CAC1B/pG,eAAW7O,GAYA64G,GATU,WAA+D,IAA9DC,EAAa/4G,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG64G,GAAqBtkH,EAAAyL,UAAAnC,OAAA,EAAAmC,UAAA,QAAAC,EAAItE,EAAIpH,EAAJoH,KAAMsR,EAAO1Y,EAAP0Y,QACrE,OAAItR,IAAS6zC,GACF,CACH1gC,UAAW7B,EAAQ6B,WAGpBiqG,CACX,ECReC,GAJQ,CACnB99F,UAAW49F,I,+BCWT/hH,GAAYC,aAAW,SAACC,GAAK,MAAM,CACrCw0B,KAAM,CACFtoB,QAAS,iBAEbjM,MAAO,CACHimB,UAAW,OAEfgE,OAAQ,CACJ1d,MAAO,QAEXpE,KAAM,CACFkkB,YAAatsB,EAAMG,QAAQ,IAElC,GACG,CAAEC,KAAM,gBAGN4hH,GAAQ,SAAH1kH,GAAA,IAAA2kH,EAAA3kH,EACP+E,KAAQG,EAAOy/G,EAAPz/G,QAASF,EAAK2/G,EAAL3/G,MACV88B,EAAU9hC,EAAjB2C,MACGf,EAAKxB,YAAAJ,EAAAK,IAAA,OAERM,cAACyE,KAAShD,oCAAA,CACN4C,SAAUE,IAAWF,GACrB3B,WAAY6B,GAAWF,GACnB88B,GACAlgC,GAAK,IACTwN,WAAS,IACX,EA6FSw1G,GA1FG,SAAChjH,GACf,IAAQ4V,EAAe5V,EAAf4V,WACRqtG,EAA8BC,cAAgB,GAAMC,EAAAv+G,YAAAq+G,EAAA,GAA7CtsG,EAAOwsG,EAAA,GAAE3wE,EAAU2wE,EAAA,GACpBxd,EAAQyd,eACRnjH,EAAYC,cACZgW,EAASC,eACT5U,EAAUX,GAAUZ,GA2B1B,OACIjB,cAACsf,KAAI,CACDC,SAfO,SAAAhB,GACXk1B,GAAW,GACXmzD,EAAMroF,EAAQ1H,GACTzJ,MAAK,WACFqmC,GAAW,EACf,IACCP,OAAM,SAAA7uC,GACHovC,GAAW,GACX,IAAQjhC,EAAwBnO,EAAxBmO,QAAS09C,EAAe7rD,EAAf6rD,WACjB/4C,EAAO3E,EAAS,CAAE/L,KAAM,UAAWye,YAAagrC,GACpD,GACR,EAKQ9sD,SA5BS,SAACmb,GACd,IAAM6iC,EAAS,CAAEylD,cAAU97F,EAAW4rE,cAAU5rE,GAQhD,OANKwT,EAAOsoF,WACRzlD,EAAOylD,SAAW3lG,EAAU,2BAE3Bqd,EAAOo4D,WACRv1B,EAAOu1B,SAAWz1E,EAAU,2BAEzBkgD,CACX,EAmBQjxC,OAAQ,SAAAiB,GAAA,IAAG2O,EAAY3O,EAAZ2O,aAAY,OACnBvb,eAAA,QAAM+a,SAAUQ,EAAcukG,YAAU,EAAAhlH,SAAA,CACpCkF,eAAA,OAAK7D,UAAW6B,EAAQ+zB,KAAKj3B,SAAA,CACzBU,cAAA,OAAKW,UAAW6B,EAAQR,MAAM1C,SAC1BU,cAACukH,KAAK,CACFlwE,WAAS,EACTpwC,GAAG,WACH9B,KAAK,WACL/B,UAAW2jH,GACXphH,MAAOzB,EAAU,oBACjBiX,SAAUP,MAGlB5X,cAAA,OAAKW,UAAW6B,EAAQR,MAAM1C,SAC1BU,cAACukH,KAAK,CACFtgH,GAAG,WACH9B,KAAK,WACL/B,UAAW2jH,GACXphH,MAAOzB,EAAU,oBACjBuF,KAAK,WACL0R,SAAUP,EACVqjG,aAAa,0BAIzBj7G,cAACwkH,KAAW,CAAAllH,SACRkF,eAACsb,KAAM,CACH5f,QAAQ,YACRuG,KAAK,SACLtG,MAAM,UACNgY,SAAUP,EACVjX,UAAW6B,EAAQypB,OAAO3sB,SAAA,CAEzBsY,GACG5X,cAACm/B,KAAgB,CACbx+B,UAAW6B,EAAQ2H,KACnBd,KAAM,GACNkjD,UAAW,IAGlBrrD,EAAU,0BAGhB,GAIvB,E,oHC1GMW,GAAYC,aAAW,SAACC,GAAK,MAAM,CACrCoU,KAAM,CACF7H,QAAS,OACTwZ,UAAW,QACXvhB,gBAAiBxE,EAAMyE,QAAQ6H,WAAW0Z,SAE9C08F,aAAc,CACVz8F,SAAU,EACV1Z,QAAS,OACTuZ,cAAe,SACfthB,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,MAC1CyL,UAAWx1B,EAAMwjG,QAAQ,IAE7Bmf,kBAAmB,CACf52G,SAAU,WACVmyB,SAAU,SACVzuB,OAAQ,MACRmzG,gBAAwC,UAAvB5iH,EAAMyE,QAAQC,KAAgB,OAAAlF,OAAUqjH,GAAsB,iCAAArjH,OAAgCqjH,GAAsB,4CAAArjH,OAA6CqjH,GAAsB,iCAAArjH,OAAgCqjH,GAAsB,oCAC9PC,iBAAkB,uBAClBC,eAAgB,cAChBC,mBAAoB,sCAExBlpC,YAAa,CACT5zD,UAAW,OACXha,QAASlM,EAAMG,QAAQ,IAE3Bq0B,KAAM,CACFtoB,QAASlM,EAAMG,QAAQ,KAE3B8iH,KAAM,CACF/2G,QAASlM,EAAMG,QAAQ,IAE3B8C,MAAO,CACHk5B,WAAY,KAEhB+mF,SAAU,CAEV,EACAtuE,KAAM,CACF10C,SAAU,IACVgmB,UAAW,OAEfiF,OAAQ,CACJrqB,OAAQ,MACRyL,QAAS,OACTkU,eAAgB,UAEpBrY,KAAM,CACF5D,gBAAiBxE,EAAMyE,QAAQ2lB,UAAU,MAEhD,GACG,CAAEhqB,KAAM,YAGN+iH,GAAQ,SAAH7lH,GAA6B,IAAvB0C,EAAK1C,EAAL0C,MAAUd,EAAKxB,YAAAJ,EAAAK,IAEtBylH,EAAWn/G,mBAAQ,kBAAM2+F,aAAY5iG,EAAM,GAAE,CAACA,IAEpD,OACI/B,cAAC2oB,IAAa,CAAC5mB,MAAOojH,EAAS7lH,SAC3BU,cAAColH,GAAS3jH,YAAA,GAAKR,KAG3B,EAEMmkH,GAAY,SAAAnkH,GAWVA,EATAc,MASAd,EARA+D,MAQA/D,EAPAuB,QAHJ,IAII7B,EAMAM,EANAN,UAEAokB,GAIA9jB,EALA3B,SAKA2B,EAJA8jB,cAGGjhB,GACH7C,EAHAmlB,cAGAnlB,EAFA0jH,gBACOllH,YACPwB,EAAKwQ,KAEHjP,EAAUX,GAAUZ,GAE1B,OACIuD,eAAA,MAAA/C,wBAAA,CAAKd,UAAWkE,IAAWrC,EAAQ2T,KAAMxV,IAAgBmD,GAAI,IAAAxE,SAAA,CACzDkF,eAAA,OAAK7D,UAAW6B,EAAQiiH,aAAanlH,SAAA,CACjCkF,eAAA,OAAK7D,UAAW6B,EAAQwiH,KAAK1lH,SAAA,CACzBU,cAACC,KAAU,CAACC,QAAQ,YAAYC,MAAM,gBAAgBQ,UAAW6B,EAAQyiH,SAAS3lH,SAAE+lH,MACpFrlH,cAACC,KAAU,CAACC,QAAQ,KAAKC,MAAM,cAAcQ,UAAW6B,EAAQwC,MAAM1F,SAAEgmH,SAE5EtlH,cAAA,OAAKW,UAAW6B,EAAQkiH,oBACxB1kH,cAAA,OAAKW,UAAW6B,EAAQq5E,YAAYv8E,SAChCkF,eAACvE,KAAU,CAACC,QAAQ,QAAQC,MAAM,gBAAgBC,UAAU,OAAMd,SAAA,CAAEimH,IAAwB,IAAEC,IAA0BxlH,cAACK,KAAI,CAACw1C,KAAM2vE,IAAwBlmH,SAAC,0IAAiC,WAGtMU,cAAA,OAAKW,UAAW6B,EAAQ+zB,KAAKj3B,SACzBkF,eAACiqB,KAAI,CAAC9tB,UAAW6B,EAAQm0C,KAAKr3C,SAAA,CAC1BU,cAAA,OAAKW,UAAW6B,EAAQ0qB,OAAO5tB,SAC3BU,cAACwtB,KAAM,CAAC7sB,UAAW6B,EAAQ2H,KAAK7K,SAC5BU,cAACmiF,KAAQ,QAGjBniF,cAACikH,GAAS,SAGjBl/F,EAAe0B,wBAAc1B,GAAgB,QAG1D,EAWAmgG,GAAMvjH,aAAe,CACjBI,MAAO0jH,GAAc7gG,MACrBG,aAAciC,KAGHk+F,IC9IAA,GD8IAA,G,0VElITQ,GAA0B,SAACzkH,GAC7B,IACIqhD,EAMArhD,EANAqhD,QAGA3hD,GAGAM,EALA3B,SAKA2B,EAJAuB,QAIAvB,EAHAN,WAEGmD,GACH7C,EAFA87C,SACOt9C,YACPwB,EAAKvB,KAEH8C,EAAUX,GAAUZ,GAE1B+gD,EAQInD,aAAoB59C,GAPpB6F,EAAQk7C,EAARl7C,SACA4iB,EAAOs4B,EAAPt4B,QACA3oB,EAAMihD,EAANjhD,OACAH,EAAQohD,EAARphD,SACAspB,EAAO83B,EAAP93B,QACAtQ,EAASooC,EAATpoC,UACAmiC,EAAeiG,EAAfjG,gBAEItyB,EAAY3N,aAAsB7a,GAAlCwoB,QACR,IAAK1oB,EAAQ,OAAO,KAEpB,GADsB,OAANA,QAAM,IAANA,OAAM,EAANA,EAAQqpB,QACX,OAAQpqB,cAACmnD,GAAgB,CAACpmD,OAAQA,IAC/C,IAAMqmD,EAAe5e,MAAMC,QAAQ7uB,IAAcA,EAAUjR,OAAS,EAC9D0+C,EAAathD,QAAQu8C,GACrBgF,EAAW9e,MAAMC,QAAQ1nC,EAAOwmD,QAAUxmD,EAAOwmD,MAAM5+C,OAAS,EAChE6+C,GAA2B5tC,GAAYA,EAAUvU,KAAI,SAAAoiD,GAAQ,QAAI1L,KAAiD,MAA7BA,EAAgB0L,GAA0B,IAAEC,MAAM3hD,SAG7I,OACIvB,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,iBAAkBrC,EAAQ8D,KAAM3F,IAClD4pB,GAAkBzmB,IAAK,IAAAxE,SAAA,EAEzB8nD,GAAgBC,IACdrnD,cAACqiD,GAAoB,CACjBC,QAASA,EACTx7C,SAAUA,EACV0I,KAAMzO,EACN2oB,QAASA,EACTD,QAASA,EACT7oB,SAAUA,EACVgZ,UAAWA,IAGlB0tC,GAAatnD,cAAC4mD,GAAqB,CAAC9/C,SAAUA,EAAU0I,KAAMzO,EAAQH,SAAUA,IACjFZ,cAAA,OAAKW,UAAWkE,IAAWrC,EAAQ2T,MAAM7W,SACrCU,cAAA,OAAKW,UAAW6B,EAAQmlD,YAAYroD,SAC/ByB,GAAUymD,GACPxnD,cAAC+kD,GAAmB,CAACnkD,SAAUA,EAAUkG,SAAUA,EAAU/F,OAAQA,EAAQmpB,QAASA,EAAS86B,UAAQ,QAInHhlD,cAACmmD,GAA6B,OAG1C,EAmBAu/D,GAAwB/jH,aAAe,CACnCa,QAAS,CAAC,GAGd,IAAMX,GAAYC,YACd,CACIwE,KAAM,CAAC,EACP6P,KAAM,CACF7H,QAAS,QAEbq5C,YAAa,CACTrwB,KAAM,aAGd,CAAEn1B,KAAM,4BAGNooB,GAAoB,SAAHlrB,KACnByH,SAAezH,EACf4qB,aAAmB5qB,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACdsnB,aAAmBtnB,EACnB2gB,QAAc3gB,EACd4E,GAAS5E,EACT2rB,OAAa3rB,EACbuY,QAAcvY,EACdqM,SAAerM,EACfG,MAAYH,EACZ4D,QAAc5D,EACd4rB,QAAc5rB,EACdkqB,YAAkBlqB,EAClB8gD,MAAY9gD,EACZyoD,SAAezoD,EACfua,UAAgBva,EAChB08C,gBAAsB18C,EACtBq+C,mBAAyBr+C,EACzB09C,SAAe19C,EACf29C,YAAkB39C,EAClB49C,WAAiB59C,EACjBi+C,YACO,OAAA79C,YAAAJ,EAAAoS,GACA,EAGIi0G,MCvGT7jH,GAAYC,aACd,SAAAC,GAAK,MAAK,CACNuE,KAAM,CACFgI,QAAS,OACTuZ,cAAe,SACfG,SAAU,EACVxF,eAAgB,SAChBC,WAAY,UAEhBjQ,QAAS,CACLnC,UAAW,SACXqa,QAAgC,UAAvB3oB,EAAMyE,QAAQC,KAAmB,GAAM,GAChD5D,OAAQ,QACR1C,MAC2B,UAAvB4B,EAAMyE,QAAQC,KACR,UACA1E,EAAMyE,QAAQ0lB,KAAKiQ,SAEjChyB,KAAM,CACFoE,MAAO,GACPiD,OAAQ,IAEZ8sB,QAAS,CACLjuB,UAAW,SACX4X,UAAW,OAElB,GAAG,CAAE9lB,KAAM,YAED+0B,GApDD,SAACj2B,GACX,IAAMuB,EAAUX,GAAUZ,GAE1B,OACIuD,eAAA,OAAK7D,UAAW6B,EAAQ8D,KAAKhH,SAAA,CACzBkF,eAAA,OAAK7D,UAAW6B,EAAQgQ,QAAQlT,SAAA,CAC5BU,cAACinD,KAAS,CAACtmD,UAAW6B,EAAQ2H,OAC9BnK,cAACC,KAAU,CAACC,QAAQ,KAAK6+B,WAAS,EAAAz/B,SAAC,kOAGnCU,cAACC,KAAU,CAACC,QAAQ,QAAOZ,SAAC,kLAKhCU,cAAA,OAAKW,UAAW6B,EAAQ87B,QAAQh/B,SAC5BU,cAACwL,KAAU,CAAC1E,SAAS,WAAW/F,OAAQ,CAAEkD,GAAI,YAK9D,ECIe0hH,GAxBO,SAAC1kH,GACnB,IAAMkW,EAASC,eACfwuG,EAA6BtwG,aAAiB,4BAAvCuwG,EAAkEhgH,YAAA+/G,EAAA,GAAhD,GACnBE,EAAgB1zG,uBAAY,WAC9B+E,EAAO,oCAAqC,CACxC1Q,KAAM,WAEd,GAAG,CAAC0Q,IAEE8Y,EAAkB4rB,GAAuB,CAAE/0C,SAAU,aAAclG,SAAU,YAAaqD,GAAI4hH,EAAoB9uG,UAAW+uG,IAEnI,OAAQD,GAAsB51F,EAAgBlvB,OAC1Cf,cAACwsB,KAAuB,CAAClrB,MAAM,YAAWhC,SACtCU,cAAC89C,GAAwB,CAACx8C,MAAO2uB,EAAgB3wB,SAC7CU,cAAC0lH,GAAuBjkH,YAAA,GAAMwuB,QAItCjwB,cAAC+lH,GAAkB,GAI3B,ECzBMlkH,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCs9B,UAAW,CACPjX,WAAY,GACZ9Z,QAAS,OACTuZ,cAAe,SACfG,SAAU,GAEjB,GAAG,CAAE7lB,KAAM,aAaG6jH,GAXE,SAAC/kH,GACd,IAAMuB,EAAUX,KAChB,OACI2C,eAAA,OAAK7D,UAAW6B,EAAQ68B,UAAU//B,SAAA,CAC9BU,cAAC+2B,KAAK,CAAC/xB,MAAOsgH,MACdtlH,cAAC2lH,GAAa,MAI1B,ECrBAM,YAASC,cAAgB,KAEzBv5F,KAAWhrB,aAAe,CACxBwkH,mBAAoB,CAAC,EAAG,GAAI,GAAI,GAAI,MAGtC3+G,KAAe7F,aAAe,CAC5BmE,OAAQ,CAAC,EACTuyE,cAAe,SAAA+P,GAAU,OAAKA,EAAa,CAAE/+C,EAAG++C,GAAe,CAAC,CAAC,EACjE/rE,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,OAC9BjC,QAAS,KAGX2S,KAAoB7vB,aAAe,CACjCmE,OAAQ,CAAC,EACTuyE,cAAe,SAAA+P,GAAU,OAAKA,EAAa,CAAE/+C,EAAG++C,GAAe,CAAC,CAAC,EACjE/rE,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,OAC9BjC,QAAS,KAGXzC,KAAaza,aAAe,CAC1B4yD,WAAY,KCad,IAiIe6xD,GAjIH,WAEV,OACEpmH,cAACqmH,KAA6B,CAACC,cAAehgB,GAAmBhnG,SAC/DU,cAACumH,IAAK,CACJ5f,aAAcA,GACd1yB,aAAcA,GACdjuD,UAAW8xF,GACX0O,kBAAgB,EAChB/M,aAAcA,GACdqK,eAAgBA,GAChBR,aAAcA,GACd7vG,OAAQ6U,GACRm+F,UAAWvB,GACXlgH,MAAOsgH,IAAkBhmH,SAExB,SAAAiqB,GAAW,MAAI,CACdvpB,cAAC0mH,IAAQ,CAACvkH,KAAMw4E,GACdlqD,KAAMlH,EAAYI,IAAI,UAAWgxD,KAAcd,GAC/ClpD,KAAMpH,EAAYI,IAAI,SAAUgxD,KAAcV,GAC9C5iD,OAAQ9N,EAAYI,IAAI,SAAUgxD,KAAcL,GAChDnyB,KAAM5+B,EAAYI,IAAI,SAAUgxD,KAAcD,GAC9CvwE,KAAM+5B,KAERlkC,cAAC0mH,IAAQ,CAACvkH,KAAM+2E,GACdzoD,KAAMlH,EAAYI,IAAI,UAAWuvD,KAAcrpC,GAC/Clf,KAAMpH,EAAYI,IAAI,SAAUuvD,KAAc5f,GAC9CjiC,OAAQ9N,EAAYI,IAAI,SAAUuvD,KAAcL,GAChD1wB,KAAM5+B,EAAYI,IAAI,SAAUuvD,KAAcD,GAC9C9uE,KAAM45B,OAER/jC,cAAC0mH,IAAQ,CAACvkH,KAAK,sBACfnC,cAAC0mH,IAAQ,CAACvkH,KAAMq7E,GACd/sD,KAAMlH,EAAYI,IAAI,UAAW6zD,KAAmBxC,GACpDrqD,KAAMpH,EAAYI,IAAI,SAAU6zD,KAAmBrB,GACnD9kD,OAAQ9N,EAAYI,IAAI,SAAU6zD,KAAmBL,GACrDh1B,KAAM5+B,EAAYI,IAAI,SAAU6zD,KAAmBD,GACnDpzE,KAAMuzE,KAER19E,cAAC0mH,IAAQ,CAACvkH,KAAMqqF,GACd/7D,KAAMlH,EAAYI,IAAI,UAAWuvD,KAAcmS,GAC/ClhF,KAAMuiF,OAER1sF,cAAC0mH,IAAQ,CAACvkH,KAAMkrF,GACd58D,KAAMlH,EAAYI,IAAI,UAAWuvD,KAAc2T,GAC/C1iF,KAAMojF,KAERvtF,cAAC0mH,IAAQ,CAACvkH,KAAMuuF,GACdjgE,KAAMlH,EAAYI,IAAI,UAAWuvD,KAAcsX,GAC/CrmF,KAAMqlF,KAERxvF,cAAC0mH,IAAQ,CAACvkH,KAAMk0F,GACd5lE,KAAMlH,EAAYI,IAAI,UAAW0sE,KAAYR,GAC7C1rF,KAAMosF,OAERv2F,cAAC0mH,IAAQ,CAACvkH,KAAMmuB,GACdG,KAAMlH,EAAYI,IAAI,UAAW2G,KAAcI,KAC/CC,KAAMpH,EAAYI,IAAI,SAAU2G,KAAcR,GAC9C3lB,KAAMqmB,OAERxwB,cAAC0mH,IAAQ,CAACvkH,KAAM+zB,GACdzF,KAAMlH,EAAYI,IAAI,UAAWuM,KAAqBG,GACtD1F,KAAMpH,EAAYI,IAAI,SAAUuM,KAAqBI,GACrDnsB,KAAMisB,KAERp2B,cAAC0mH,IAAQ,CAACvkH,KAAM8pC,GACdxb,KAAMlH,EAAYI,IAAI,UAAW,eAAiBmiB,GAClD3hC,KAAMgiC,OAERnsC,cAAC0mH,IAAQ,CAACvkH,KAAM8lD,GACdx3B,KAAMlH,EAAYI,IAAI,UAAWs+B,KAAkBpT,GACnDlkB,KAAMpH,EAAYI,IAAI,SAAUs+B,KAAkB9R,GAClD9e,OAAQ9N,EAAYI,IAAI,SAAUs+B,KAAkBpP,GACpDsP,KAAM5+B,EAAYI,IAAI,SAAUs+B,KAAkB5N,GAClDlwC,KAAMqrC,OAERx1C,cAAC0mH,IAAQ,CAACvkH,KAAM+xF,GACdzjE,KAAMlH,EAAYI,IAAI,UAAWuqE,KAAeP,GAChDhjE,KAAMpH,EAAYI,IAAI,SAAUuqE,KAAeN,GAC/Cv8D,OAAQ9N,EAAYI,IAAI,SAAUuqE,KAAeJ,GACjD3rC,KAAM5+B,EAAYI,IAAI,SAAUuqE,KAAeD,GAC/C9pF,KAAM84C,OAERjjD,cAAC0mH,IAAQ,CAACvkH,KAAMs/G,GACd9wF,KAAMpH,EAAYI,IAAI,SAAU83F,KAA0BzE,GAC1D3lF,OAAQ9N,EAAYI,IAAI,SAAU83F,KAA0B7B,GAC5Dz3D,KAAM5+B,EAAYI,IAAI,SAAU83F,KAA0BlB,KAE5DvgH,cAAC0mH,IAAQ,CAACvkH,KAAMqzF,GACd/kE,KAAMlH,EAAYI,IAAI,UAAW6rE,KAAariC,GAC9CxiC,KAAMpH,EAAYI,IAAI,SAAU6rE,KAAab,GAC7CxsC,KAAM5+B,EAAYI,IAAI,SAAU6rE,KAAaD,GAC7CprF,KAAMqiD,OAERxsD,cAAC0mH,IAAQ,CAACvkH,KAAMqxF,GACd/iE,KAAMlH,EAAYI,IAAI,UAAW6pE,KAAevC,GAChDtgE,KAAMpH,EAAYI,IAAI,SAAU6pE,KAAexB,GAC/C36D,OAAQ9N,EAAYI,IAAI,SAAU6pE,KAAeH,GACjDlrC,KAAM5+B,EAAYI,IAAI,SAAU6rE,KAAajC,GAC7CppF,KAAMupF,OAER1zF,cAAC0mH,IAAQ,CAACvkH,KAAK,eACfnC,cAAC0mH,IAAQ,CAACvkH,KAAK,cACfnC,cAAC0mH,IAAQ,CAACvkH,KAAK,YACfnC,cAAC0mH,IAAQ,CAACvkH,KAAK,cACfnC,cAAC0mH,IAAQ,CAACvkH,KAAK,0BACfnC,cAAC0mH,IAAQ,CAACvkH,KAAK,YACfnC,cAAC0mH,IAAQ,CAACvkH,KAAK,gBACfnC,cAAC0mH,IAAQ,CAACvkH,KAAK,YACfnC,cAAC0mH,IAAQ,CAACvkH,KAAK,SACfnC,cAAC0mH,IAAQ,CAACvkH,KAAK,cACfnC,cAAC0mH,IAAQ,CAACvkH,KAAK,2BACfnC,cAAC0mH,IAAQ,CAACvkH,KAAK,eACfnC,cAAC0mH,IAAQ,CAACvkH,KAAMsyF,GACdhkE,KAAMlH,EAAYI,IAAI,UAAW8qE,KAAgB/+B,GACjD/kC,KAAMpH,EAAYI,IAAI,SAAU8qE,KAAgBD,GAChDrqF,KAAM2qD,OAGT,KAQT,EChKA6xD,IAASx2G,OACPnQ,cAACoI,IAAMw+G,WAAU,CAAAtnH,SACfU,cAAComH,GAAG,MAENS,SAASC,eAAe,SCTlB,kBAAmB5D,WAEnB3vG,OAAOC,iBAAiB,QAAQ,WAG5B0vG,UAAU6D,cAAcC,SAFb,UAGN55G,MAAK,SAAC65G,GACH76D,QAAQC,IAAI,yCAChB,IACCnZ,OAAM,SAAU7uC,GACb+nD,QAAQ/nD,MAAM,uBAAwBA,EAC1C,GACR,G,4ECFO+Y,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,oIAGd,ECEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,+KAGd,ECEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,sKAGd,ECEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,qtBAGd,E,kBCEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,qKAGd,E,sCCEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,uJAGd,E,qBCuBekvC,IAjBE,SAAHntD,GAA8B,IAAxB0B,EAAM1B,EAAN0B,OAAWE,EAAKxB,YAAAJ,EAAAK,GAC1B+G,EAAa,OAAN1F,QAAM,IAANA,OAAM,EAANA,EAAQ0F,KAErB,OAAIygH,IAAQC,IAAIrzF,SAASrtB,GAAezG,cAAConH,EAAQ3lH,wBAAA,GAAKR,GAAK,IAAEmX,MAAO,CAAEjY,MAAO,cACzE+mH,IAAQG,IAAIvzF,SAASrtB,GAAezG,cAACsnH,EAAO7lH,wBAAA,GAAKR,GAAK,IAAEmX,MAAO,CAAEjY,MAAO,cACxE+mH,IAAQh7F,KAAK4H,SAASrtB,GAAezG,cAACunH,EAAQ9lH,wBAAA,GAAKR,GAAK,IAAEmX,MAAO,CAAEjY,MAAO,cAC1E+mH,IAAQM,IAAI1zF,SAASrtB,GAAezG,cAACynH,EAAShmH,wBAAA,GAAKR,GAAK,IAAEmX,MAAO,CAAEjY,MAAO,cAC1E+mH,IAAQQ,IAAI5zF,SAASrtB,GAAezG,cAAC2nH,EAAOlmH,wBAAA,GAAKR,GAAK,IAAEmX,MAAO,CAAEjY,MAAO,cACxE+mH,IAAQhtB,MAAMpmE,SAASrtB,GAAezG,cAAC4nH,IAAcnmH,wBAAA,GAAKR,GAAK,IAAEmX,MAAO,CAAEjY,MAAO,cACjF+mH,IAAQW,MAAM/zF,SAASrtB,GAAezG,cAAC8nH,IAASrmH,wBAAA,GAAKR,GAAK,IAAEmX,MAAO,CAAEjY,MAAO,cAC5E+mH,IAAQa,MAAMj0F,SAASrtB,GAAezG,cAACgoH,IAASvmH,wBAAA,GAAKR,GAAK,IAAEmX,MAAO,CAAEjY,MAAO,cAC5E+mH,IAAQ70B,OAAOv+D,SAASrtB,GAAezG,cAACioH,EAASxmH,wBAAA,GAAKR,GAAK,IAAEmX,MAAO,CAAEjY,MAAO,cACzEH,cAACunH,EAAQ,GAErB,C,iKCpBMW,EAAa,eAAA7oH,EAAAka,YAAAC,cAAAC,MAAG,SAAAC,EAAOwS,GAAI,OAAA1S,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,UAKxBipG,UAAUC,UAAU,CAADppG,EAAAE,KAAA,cAAQ,IAAIkuG,aAAa,6BAA8B,mBAAkB,cAAApuG,EAAAM,OAAA,SAE1F6oG,UAAUC,UAAUC,UAAUl3F,IAAK,wBAAAnS,EAAAO,OAAA,GAAAZ,EAAA,KAC7C,gBARkBa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,KAWboqC,EAAgBroC,gBAAK,SAAA5L,GACvB,IAAQN,EAA0CM,EAA1CN,UAAWE,EAA+BI,EAA/BJ,OAAQ49C,EAAuBx9C,EAAvBw9C,UAAc36C,EAAIrE,YAAKwB,EAAKvB,GACjDqB,EAASurC,YAAiBrrC,GAC1BK,EAAQD,IAAIN,EAAQF,GACpBunH,EAAah2G,uBAAY,SAACtJ,GACZA,EAlBOC,kBAmBvBm/G,EAAc5mH,EAClB,GAAG,CAACA,IAEJ,OACItB,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,EACXwI,QAASi/G,EACThwG,MAAO,CAAEyvB,OAAQ,SACbnmC,YAAuBoC,IAAK,IAAAxE,SAEtB,MAATgC,GAAkC,kBAAVA,EACnB8F,KAAKC,UAAU/F,GACfA,GAASm9C,IAG3B,IAGAvJ,EAAcjzB,YAAc,gBAE5BizB,EAAcvzC,aAAe,CACzBC,UAAU,GAGCszC,K,gGC7CT6rB,EAAe/nD,aACnB,SAAA+nD,EAAY9nD,GAASC,YAAA,KAAA6nD,GAEnB,IAAIC,EAAqB,KAEnB7nD,EAAS8nD,uBAAa,CAC1B9vB,IAAKl4B,EACLioD,UAAW,IAWXC,MAAM,EAyBNC,YAAa,kBAAM,CAAI,EAwBvBC,cAAe,IAUfC,UAAU,WAAD,IAAAC,EAAAhoD,YAAAC,cAAAC,MAAE,SAAAC,IAAA,OAAAF,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EACH,IAAI/M,SAAQ,SAACC,GAAO,OAAK6W,WAAW7W,EAAS,IAAK,IAAE,KAAD,mBAAA4M,EAAAO,OAAA,GAAAZ,EAAA,KAC1D,yBAAA6nD,EAAA9mD,MAAA,KAAA3P,UAAA,EAFS,GAIV02D,iBAAiB,WAAD,IAAAC,EAAAloD,YAAAC,cAAAC,MAAE,SAAAioD,IAAA,IAAA7nD,EAAA,OAAAL,cAAAM,MAAA,SAAA6nD,GAAA,cAAAA,EAAA3nD,KAAA2nD,EAAA1nD,MAAA,cAAA0nD,EAAA3nD,KAAA,EAAA2nD,EAAA1nD,KAAA,EAEMC,cAAa,KAAD,EAArB,OAALL,EAAK8nD,EAAAxnD,KAAAwnD,EAAAtnD,OAAA,SACJ,CACLunD,cAAe/nD,EAAK,UAAAtY,OAAasY,GAAU,KAC5C,OAAA8nD,EAAA3nD,KAAA,EAAA2nD,EAAAvC,GAAAuC,EAAA,SAEDvV,QAAQ/nD,MAAMs9D,EAAAvC,GAAI5sD,SAElBe,OAAO7H,SAASm2D,SAChB,eAAAF,EAAAtnD,OAAA,SAGK,CAAC,GAAC,yBAAAsnD,EAAArnD,OAAA,GAAAonD,EAAA,kBACV,yBAAAD,EAAAhnD,MAAA,KAAA3P,UAAA,EAdgB,GAgBjBg3D,GAAI,CACF//C,UAAW,SAACggD,GACNf,GACFj9C,aAAai9C,GAGf,IAAIgB,EAAiBC,cACjBD,EAAiB,IACnBhB,EAAqBh9C,YAAW,WAC1B+9C,EAAOG,aAAeC,UAAUC,MAClCL,EAAOM,MAAM,KAAM,YACvB,GAAGL,GAEP,KA+BJ,OAAO7oD,CACT,IAGIA,EAAS,IAAI4nD,EAAgBsnD,KAIpBlvG,K,2QC7ITiqE,EAAWv2E,gBAAK,SAAA5L,GAClB,IAAQN,EAAwDM,EAAxDN,UAAW89C,EAA6Cx9C,EAA7Cw9C,UAAW59C,EAAkCI,EAAlCJ,OAAQg0F,EAA0B5zF,EAA1B4zF,aAAiB/wF,EAAIrE,YAAKwB,EAAKvB,GAC/DwB,EAAYC,cACZJ,EAASurC,YAAiBrrC,GAC1BK,EAAQD,IAAIN,EAAQF,GACpBswC,EAVqB,SAACA,GAC5B,IAAMt3B,EAAQ8tF,YAAUpH,KACxB,MAAM,GAANh/F,OAAU4vC,EAAG,KAAA5vC,OAAIsY,EACrB,CAOgByuG,CAAgBhnH,GAG5B,OAAa,MAATA,EAEItB,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,YAAuBoC,IAAK,IAAAxE,SAE/Bm/C,KAMTz+C,cAACK,IAAIoB,wBAAA,CACDd,UAAWA,EACXk1C,KAAM1E,EACNjxC,QAAQ,SACJwB,YAAuBoC,IAAK,IAAAxE,SAE/Bu1F,EAAe3zF,EAAU2zF,EAAc,CAAErzF,EAAGqzF,IAAkBvzF,IAG3E,IAEA8hF,EAASzhF,aAAe,CACpBC,UAAU,GAKCwhF,Q,2GCcAmlC,EAtDK,SAAAtnH,GAChB,IACI3B,EAGA2B,EAHA3B,SAAQwM,EAGR7K,EAFA0B,aAAK,IAAAmJ,EAAG,iBAAgBA,EACrBhI,EAAIrE,YACPwB,EAAKvB,GAGHwB,EAAYC,cAElB4Q,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GAGd6hB,EAAazhB,uBAAY,SAAAtJ,GAC3B+O,GAAQ,GACR/O,EAAMC,iBACV,GAAG,CAAC8O,IAEEhP,EAAcuJ,uBAAY,SAAAtJ,GAC5B+O,GAAQ,GACR/O,EAAMC,iBACV,GAAG,CAAC8O,IAGJ,OACIrT,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIU,cAAC8f,IAAM,CAAC3W,QAAS0qB,EAAYxqB,KAAK,QAAQ+O,MAAO,CAAEowG,aAAc,GAAKlpH,SACjE4B,EAAUyB,KAEf6B,eAAC4a,IAAM,CACHxW,KAAMA,EACNY,QAASX,EACT,kBAAgB,eAAcvJ,SAAA,CAE9BU,cAACqf,IAAW,CAACpb,GAAG,eAAc3E,SAAE4B,EAAU,mCAG1CsD,eAACkb,IAAa,CAAApgB,SAAA,CACVU,cAAC2f,IAAiB,CAAArgB,SAAG4B,EAAU,kCAAmC,CAAEivB,IAAKrsB,EAAK/C,OAAOkD,OAEpFmC,uBAAaqC,WAASijB,KAAKpsB,GAASmC,YAAA,GAAOqC,OAEhD9D,cAAC6f,IAAa,CAAAvgB,SACVU,cAAC8f,IAAM,CAAC3W,QAASN,EAAYvJ,SACxB4B,EAAU,6BAMnC,E,iBC7CeunH,EAjBW3mH,aAAW,SAAAC,GAAK,MAAK,CAC3Cw1D,QAAS,SAAAl4D,GACL,OADeA,EAAPk4D,SAEJ,KAAK,GACD,MAAO,CAAEp3D,MAAO,WAEpB,KAAK,EACD,MAAO,CAAEA,MAAO,uBAEpB,QACI,MAAO,CAAEA,MAAO,WAG5B,EACAkiF,WAAY,CAAE33D,QAAS3oB,EAAMyE,QAAQyK,OAAOqxE,iBAC/C,GAAG,CAAEngF,KAAM,kB,gBCJN4gF,EAAe,SAAChiF,EAAM1B,GAAA,IAAIwB,EAAMxB,EAANwB,OAAM,OAAOQ,IAAIN,EAAQF,EAAO,EAE1D82D,EAAgB,SAAC12D,GACnB,IAAQF,EAAWE,EAAXF,OACR,IAAKA,EAAQ,OAAO,KACpB,IAAM0F,EAAOpF,IAAIN,EAAQ,CAAC,YAAa,SACjCuN,EAAUjN,IAAIN,EAAQ,CAAC,YAAa,YAG1C,OAF+B,SAAZuN,EAAsBA,EAAU7H,GAG/C,IAAK,KACL,IAAK,SAQL,IAAK,OAIL,IAAK,KACL,IAAK,OACL,IAAK,QACL,IAAK,OAEL,QAAS,OAAOzG,cAACyE,IAAShD,YAAA,GAAKR,IAhB/B,IAAK,WAAY,OAAOjB,cAACuoH,EAAW9mH,wBAAA,GAAKR,GAAK,IAAA3B,SAAEU,cAAC8+G,IAAa,OAC9D,IAAK,UAAW,OAAO9+G,cAAC85E,IAAYr4E,YAAA,GAAKR,IACzC,IAAK,MACL,IAAK,SAGL,IAAK,OAAQ,OAAOjB,cAAC+uB,IAAWttB,wBAAA,GAAKR,GAAK,IAAE+gF,QAAQ,QAAQ/+E,QAAS5B,IAAIN,EAAQ,CAAC,YAAa,SAAU,uBAAwBoiF,QAFjI,IAAK,QAAS,OAAOnjF,cAAC+uB,IAAWttB,wBAAA,GAAKR,GAAK,IAAE+gF,QAAQ,QAAQ/+E,QAAS5B,IAAIN,EAAQ,CAAC,YAAa,SAAU,uBAAwBkiF,QAClI,IAAK,WAAY,OAAOjjF,cAACgvB,IAASvtB,wBAAA,GAAKR,GAAK,IAAEgC,QAAS5B,IAAIN,EAAQ,CAAC,YAAa,SAAU,yBAA0Bk0C,QAGrH,IAAK,QAAS,OAAOj1C,cAACk6G,IAAUz4G,YAAA,GAAKR,IACrC,IAAK,QAAS,OAAOjB,cAACm6G,IAAgB14G,YAAA,GAAKR,IAC3C,IAAK,MAAO,OAAOjB,cAACojF,EAAQ3hF,wBAAA,GAAKR,GAAK,IAAE4zF,aAAa,uBAKrD,IAAK,OAAQ,OAAO70F,cAACkjF,IAAWzhF,wBAAA,GAAKR,GAAK,IAAEkwB,QAAS9vB,IAAIN,EAAQ,CAAC,YAAa,SAAU,gBAAiB,WAAY,IAAK6G,WAAW,QAAQsI,YAAY,KAAKuuC,UAAWskC,KAGlL,EAGM2lC,EAAwB,SAAHt3G,GAAiC,IAA3BzQ,EAASyQ,EAATzQ,UAAcM,EAAKxB,YAAA2R,EAAA1R,GACxCqB,EAAsBE,EAAtBF,OAAQq6B,EAAcn6B,EAAdm6B,UACV54B,EAAUimH,IAChB,IAAK1nH,EAAQ,OAAO,KAChBq6B,IAAWr6B,EAAOq6B,UAAYA,GAClC,IAAM4tD,EAAO3nF,IAAIN,EAAQ,CAAC,YAAa,SACjCshF,EAAaiB,YAAOviF,EAAOw2D,UAAYx2D,EAAOw2D,QAAU,EACxDgsB,GAAmBD,YAAOviF,EAAOu2D,YACjCqxD,GAAarlC,YAAO0F,GAG1B,OACIxkF,eAAA,QAAM7D,UAAWkE,IAAWlE,EAAS6T,YAAA,GAAKhS,EAAQ6/E,WAAaA,IAAc/iF,SAAA,CACzEU,cAAC23D,EAAal2D,wBAAA,GAAKR,GAAK,IAAEN,UAAW6B,EAAQomH,YAC5CrlC,GAAmB/+E,eAAA8hB,WAAA,CAAAhnB,SAAA,CAAE,KAAEU,cAAC23D,EAAal2D,wBAAA,GAAKR,GAAK,IAAEJ,OAAO,aAAaF,UAAW6B,EAAQomH,YAAY,OACpGD,GAAankH,eAAA8hB,WAAA,CAAAhnB,SAAA,CAAE,IAACU,cAAA,QAAAV,SAAQ0pF,EAAK7mF,YAG1C,EAEAumH,EAAsB/mH,aAAe,CACjCC,UAAU,EACVY,QAAS,CAAC,GAICkmH,K,sTCtEAG,EAFU,SAACtjH,EAAKjE,EAAOkzB,EAAOzzB,EAAQG,GAAS,OAAc,MAATI,EAAgB,KAAOA,CAAK,ECOzF4rC,EAAkB,aAGX47E,EAAY,SAACt0F,EAAOiV,EAASq9C,GAEtC,IAAMz6D,EAAY48D,IAAOz0D,EAAM1uB,QAAO,SAAAm1B,GAAI,OAAIA,EAAK5O,SAAS,IAAEhnB,KAAI,SAAAhG,GAAY,OAAAA,EAATgtB,SAAyB,IAAG,YAC3F08F,EAAY18F,EAAUhnB,KAAI,SAAA+L,GAAA,IAAGxQ,EAAQwQ,EAARxQ,SAAU0J,EAAM8G,EAAN9G,OAAM,OAAOw8E,EAAoBr9C,EAASn/B,EAAQ1J,EAAS,IAExG,OAAOsM,QAAQM,IAAIu7G,GACd37G,MAAK,SAAA47G,GAiBF,OAhBav/E,EAAQpkC,KAAI,SAAAtE,GACrB,IAAMkoH,EAAkB58F,EAAUphB,QAAO,SAACC,EAAGuwB,EAAwB/d,GAAZ+d,EAAR76B,SAA+B,IAArB0J,EAAMmxB,EAANnxB,OACjD4+G,EAAiB7nH,IAAIN,EAAQ,CAACuJ,IACpC,OAAA7I,wBAAA,GACOyJ,GAAG,GAAAsJ,YAAA,GACLlK,EAASk+B,MAAMC,QAAQygF,GAClBA,EAAe7jH,KAAI,SAAA41B,GAAI,OAAI+tF,EAAUtrG,GAAOud,EAAK,IACjD+tF,EAAUtrG,GAAOwrG,IAE/B,GAAG,CAAC,GAEJ,OAAAznH,wBAAA,GACOV,GACAkoH,EAEX,GAEJ,GACR,EAEaE,EAAe,SAAC30F,EAAOtzB,GAUhC,OARgBszB,EAAMnvB,KAAI,SAAAq4B,GAAsB,IAAnBn4B,EAAGm4B,EAAHn4B,IAAKmvB,EAAMgJ,EAANhJ,OACxB00F,EAhCQ,SAAC7jH,GAAG,OAAKijC,MAAMC,QAAQljC,GAAOA,EAAI+F,KAAK,KAAO/F,CAAG,CAgC7C8jH,CAAO9jH,GACnB+jH,EAAe9gF,MAAMC,QAAQ/T,GAAUA,EAAOrvB,KAAI,SAAA41B,GAAI,OAAI/5B,EAAU+5B,EAAM,CAAEz5B,EAAGy5B,GAAO,IAAE3vB,KAAK,KAAOpK,EAAUwzB,EAAQ,CAAElzB,EAAGkzB,IAGjI,MAAO,CAAEA,OAAQ,CAAC00F,EAAWE,GAAe/jH,IAAK6jH,EAAW76G,MAFxCq9C,KAAKruB,IAAI+rF,EAAa3gH,OAAS,EAAG,IAG1D,GAGJ,EAEawL,EAAW,SAAC5O,EAAKxE,GAE1B,OADcM,IAAIN,EAAQwE,EAE9B,EAUagkH,EAAW,SAAC/0F,EAAOzzB,EAAQG,GAQpC,OAPYszB,EAAMnvB,KAAI,SAAAotC,GAAyC,IAAtCltC,EAAGktC,EAAHltC,IAAGikH,EAAA/2E,EAAEhwC,cAAM,IAAA+mH,EAAGX,EAAgBW,EAC7C37E,EAAaX,EAAgBpV,KAAKvyB,GAClCjE,EAAQusC,EAXO,SAACtoC,EAAKxE,GAC/B,IAAM0oH,EAAWlkH,EAAI4lC,MAAM,YAG3B,OAFc9pC,IAAIN,EAAQ0oH,EAAS,GAAI,IACnBpkH,KAAI,SAAA41B,GAAI,OAAI55B,IAAI45B,EAAMwuF,EAAS,GAAG,GAE1D,CAMmCC,CAAcnkH,EAAKxE,GAAUoT,EAAS5O,EAAKxE,GAEtE,OADuB8sC,EAAavsC,EAAM+D,KAAI,SAAA41B,GAAI,OAAIx4B,EAAO8C,EAAK01B,EAAMzG,EAAOzzB,EAAQG,EAAU,IAAEoK,KAAK,MAAQ7I,EAAO8C,EAAKjE,EAAOkzB,EAAOzzB,EAAQG,EAEtJ,GAGJ,EAEayoH,EAAY,SAACn1F,EAAOiV,EAASvoC,GAEtC,OADauoC,EAAQpkC,KAAI,SAAAtE,GAAM,OAAIwoH,EAAS/0F,EAAOzzB,EAAQG,EAAU,GAEzE,EAkCa0oH,EAAqB,SAACp1F,EAAOiV,GACtC,IAAMj6B,EAAOi6B,EAAQpkC,KAAI,SAACtE,GAAM,OA1BE,SAACyzB,EAAOzzB,GAsB1C,OArBayzB,EAAMvpB,QAAO,SAACC,EAAG0+D,GAAe,IAAXrkE,EAAGqkE,EAAHrkE,IAG9B,GAFmB2nC,EAAgBpV,KAAKvyB,GAExB,CACZ,IAAMyjD,EAAQzjD,EAAI4lC,MAAM,YAClBjJ,EAAQnhC,EAAOioD,EAAM,IAS3B,OARI9mB,EAAMv5B,OACNu5B,EAAMgI,SAAQ,SAACjP,EAAMvd,GACjBqwB,IAAI7iC,EAAK,CAAC89C,EAAM,GAAItrC,EAAOsrC,EAAM,IAAK/tB,EAAK+tB,EAAM,IACrD,IAEAjb,IAAI7iC,EAAK,CAAC89C,EAAM,IAAK9mB,GAGlBh3B,CACX,CACI,IAAM5J,EAAQ6S,EAAS5O,EAAKxE,GAC5B,OAAOgtC,IAAI7iC,EAAK3F,EAAKjE,EAE7B,GAAG,CAAC,EAGR,CAGyCuoH,CAAuBr1F,EAAOzzB,EAAO,IAC1E,OAAOyO,CACX,EAEak8B,EAAe,SAAC1mC,EAAO2mC,GAEhC,OAAOA,EAAKm+E,cAAc18G,MAAK,SAAUoC,GACrC,IAAMu6G,EAAO,IAAIC,KAAK,CAACx6G,GAAO,CAAE/I,KAAM,sEACtC,GAAI8M,OAAO2vG,WAAa3vG,OAAO2vG,UAAU+G,iBACrC12G,OAAO2vG,UAAU+G,iBAAiBF,EAAM/kH,EAAQ,aAC7C,CACH,IAAMmsC,EAAM59B,OAAO22G,IAAIC,gBAAgBJ,GACjC/xC,EAAI6uC,SAASpgG,cAAc,KACjCogG,SAASt4F,KAAK67F,YAAYpyC,GAC1BA,EAAEniC,KAAO1E,EACT6mC,EAAEqyC,SAAWrlH,EAAQ,QACrBgzE,EAAEsyC,QACF/2G,OAAO22G,IAAIK,gBAAgBp5E,GAC3B01E,SAASt4F,KAAKi8F,YAAYxyC,EAC9B,CACJ,GACJ,EAEayyC,EAAe,SAACzlH,EAAOwK,GAChC,IAAMk7G,EAAO,gCAAAnpH,OAAmC8J,mBAAmBjE,KAAKC,UAAUmI,EAAM,KAAM,QACxFm7G,EAAqB9D,SAASpgG,cAAc,KAClDkkG,EAAmBC,aAAa,OAAQF,GACxCC,EAAmBC,aAAa,WAAW,GAADrpH,OAAKyD,EAAK,UACpD6hH,SAASt4F,KAAK67F,YAAYO,GAC1BA,EAAmBL,QACnBK,EAAmBtuD,QACvB,C,iRCeMjyD,EAAcpK,cAACwmF,IAAY,IAE3Bj8D,EAAoB,SAAHkR,GACXA,EAAR30B,SACY20B,EAAZ/f,aACQ+f,EAAR76B,SACO,OAAAnB,YAAAg8B,EAAAhqB,EAEF,EAEM2K,IAzJM,SAACnb,GAClB,IAAAwlF,EAQIxlF,EAPAszD,kBAAU,IAAAkyB,EAAG,IAAIA,EACjBt9E,EAMAlI,EANAkI,QAAO2C,EAMP7K,EALA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAAAG,EAK1BhL,EAJAkJ,YAAI,IAAA8B,EAAG7B,EAAW6B,EACRy6E,EAGVzlF,EAHAia,SACAmB,EAEApb,EAFAob,KACGvY,EAAIrE,YACPwB,EAAKvB,GAET4b,EAMIC,YAAeta,GALL0lF,EAAmBrrE,EAA7BJ,SACApV,EAAMwV,EAANxV,OACA4V,EAAYJ,EAAZI,aACAF,EAAWF,EAAXE,YAGEN,GAFGI,EAALM,MAEa8qE,GAAkBC,GAC7B/lF,EAAWuE,YAAmBlE,GAC9BgzE,EAAe8I,cACf77E,EAAYC,cACZgW,EAASC,cAEfrF,EAAgC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GAEtB6hB,EAAazhB,uBAAY,SAACtJ,GAC5BN,EAAYM,EAAMM,cACtB,IAEMP,EAAcuJ,uBAAY,WAC5B5J,EAAY,KAChB,IAEMo+E,EAAmBx0E,uBAAY,SAAAtJ,GACjCD,IACAorE,EACK1Y,QAAQ36D,EAAU,CACfyb,KAAMb,GAAea,EACrBvW,OAAQA,EAAMrE,wBAAA,GACHia,GAAiB5V,GACtB4V,EACNsa,WAAY,CAAEhV,KAAM,EAAGnC,QAAS01C,KAEnCnnD,MACG,SAAA/N,GAAA,IAAGmQ,EAAInQ,EAAJmQ,KAAI,OACH0L,EAAS2rE,cACT3rE,EAAS2rE,aACLr3E,EACAs3E,YAAoB7S,GACpBA,EACArzE,EACH,IAERsyC,OAAM,SAAA7uC,GACH+nD,QAAQ/nD,MAAMA,GACd8S,EAAO,6BAA8B,CAAE1Q,KAAM,WACjD,IACmB,oBAAZ0C,GACPA,EAAQL,EAEhB,GACI,CACI0S,EACAy4D,EACAnuE,EACA4V,EACA64C,EACAp9C,EACAhO,EACAvI,EACAyb,IAIF0qE,EAAmB30E,uBAAY,SAAAtJ,GACjCD,IACAorE,EACK1Y,QAAQ36D,EAAU,CACfyb,KAAMb,GAAea,EACrBvW,OAAQA,EAAMrE,wBAAA,GACHia,GAAiB5V,GACtB4V,EACNsa,WAAY,CAAEhV,KAAM,EAAGnC,QAAS01C,KAEnCnnD,MACG,SAAAgE,GAAA,IAAG5B,EAAI4B,EAAJ5B,KAAI,OACH0L,EAAS8rE,cACT9rE,EAAS8rE,aACLx3E,EACAs3E,YAAoB7S,GACpBA,EACArzE,EACH,IAERsyC,OAAM,SAAA7uC,GACH+nD,QAAQ/nD,MAAMA,GACd8S,EAAO,6BAA8B,CAAE1Q,KAAM,WACjD,IACmB,oBAAZ0C,GACPA,EAAQL,EAEhB,GACI,CACI0S,EACAy4D,EACAnuE,EACA4V,EACA64C,EACAp9C,EACAhO,EACAvI,EACAyb,IAKR,OACI7X,eAAA,QAAAlF,SAAA,CACIU,cAAC8f,IAAMre,wBAAA,CACH,gBAAc,cACd,gBAAc,OACd0H,QAAS0qB,EACTlxB,MAAOA,GACH4nB,EAAkBzmB,IAAK,IAAAxE,SAE1B6K,KAEL3F,eAAC+E,IAAI,CACDtF,GAAG,cACHsE,SAAUA,EACV2rB,aAAW,EACXtrB,KAAM7C,QAAQwC,GACdiB,QAASX,EAAYvJ,SAAA,CAErBU,cAAC+E,IAAQ,CAACoE,QAASy9E,EAAiBtnF,SAAG4B,EAAU,2BACjDlB,cAAC+E,IAAQ,CAACoE,QAAS49E,EAAiBznF,SAAG4B,EAAU,gCAKjE,C,kCC5JA2pH,49BAAQ,MAAUp6G,SAElB,IAAMq6G,EAAsEv3G,OAAOw3G,IAEtE3jB,EAAoB0jB,EAAWE,gBAC/BtjH,EAAmBojH,EAAWG,eAC9B5I,EAAsByI,EAAWI,kBACjC7F,EAAsByF,EAAWK,kBACjC7F,EAAoBwF,EAAWM,gBAE/B7F,GAD0BuF,EAAWO,sBACXP,EAAWQ,uBACrC9F,EAA0BsF,EAAWS,sBACrCxkB,EAA2B,GAAAxlG,OAAM6lG,EAAiB,yBAClDJ,EAAmC,GAAAzlG,OAAM6lG,EAAiB,iCAC1D7G,EAA0B,GAAAh/F,OAAM6lG,EAAiB,KAAA7lG,OAAImG,EAAgB,wBACrEg5F,EAAkC,GAAAn/F,OAAM6lG,EAAiB,KAAA7lG,OAAImG,EAAgB,gCAC7E+4F,EAAgBqqB,EAAWU,wBAG3BlxD,EAA6BwwD,EAAWW,sCAAwC,4BAChF9uD,EAA4BmuD,EAAWY,qCAAuC,4BAC9E76C,EAAsBi6C,EAAWa,+BAAiC,4BAElEx7C,GADmB26C,EAAWc,2BACLd,EAAWe,kCAAoC,yBACxEnxG,EAAsBowG,EAAWgB,+BAAiC,wBAClE3uD,EAA0B2tD,EAAWiB,mCAAqC,wBAC1EC,EAAuBlB,EAAWmB,gCAAkC,yBACpE3pD,EAAsBwoD,EAAWoB,+BAAiC,uBAClE/uG,EAAsB2tG,EAAWqB,+BAAiC,qCAClE9D,EAAqByC,EAAWsB,8BAAgC,mCAEhEvhE,GADYigE,EAAWuB,oBACZvB,EAAWwB,oBAAsB,6BAC5Cp+D,EAAoB48D,EAAWyB,6BAA+B,4BAC9Dx6D,EAAc+4D,EAAW0B,uBAAyB,wBAClD/tD,EAAsBqsD,EAAW2B,+BAAiC,wBAClE36D,EAAyBg5D,EAAW4B,iCACpCC,EAAmB7B,EAAW8B,4BAA8B,qCAC5Dh6C,EAAsBk4C,EAAW+B,uBAAyB,wB,0PCdjEhrH,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC+2G,KAAM,CACFvyG,gBAAiB49B,IAAM,KACvBhkC,MAAO4B,EAAMyE,QAAQge,QAAQE,MAEjCq0F,KAAM,CACFxyG,gBAAiBu+F,IAAO,KACxB3kG,MAAO4B,EAAMyE,QAAQme,QAAQD,MAEjCs0F,IAAK,CACDzyG,gBAAiB0zB,IAAI,KACrB95B,MAAO4B,EAAMyE,QAAQnC,MAAMqgB,MAElC,GAAG,CAAEviB,KAAM,kBAGNy1D,EAAiB,SAAHv4D,GAAwE,IAAlEsB,EAAStB,EAATsB,UAAWC,EAAQvB,EAARuB,SAAUC,EAAMxB,EAANwB,OAAMC,EAAAzB,EAAE0B,cAAM,IAAAD,EAAG,CAAC,EAACA,EAAaG,GAAL5B,EAAN2B,OAAgBvB,YAAAJ,EAAAK,IAC1EwB,EAAYC,cACZqB,EAAUX,EAAUd,GACpBw2D,EAAUl2D,IAAIN,EAAQF,GAC5B,GAAIyiF,YAAO/rB,GAAU,OAAO,KAE5B,IAAMn2D,EA9BoB,SAACm2D,GAC3B,OAAQA,GACJ,KAAK,EAAG,MAAO,OACf,KAAK,GAAI,MAAO,OAChB,QAAS,MAAO,MAExB,CAwBsBu1D,CAAev1D,GAC3B50D,EAAQzB,EAAU,aAADK,OAAcX,EAAQ,WAAAW,OAAUV,EAAM,KAAAU,OAAIH,GAAa,CAAEI,EAAG,QAEnF,OACIxB,cAAC0iC,IAAIjhC,YAAA,CACDd,UAAWkE,IAAWlE,EAAW6B,EAAQpB,IACzCiI,KAAK,QACL1G,MAAOA,GACHjB,YAAuBT,IAGvC,EAEA22D,EAAej2D,aAAe,CAC1BC,UAAU,GAGCg2D,K,0iBCxDTm1D,GAA0BnwG,YAAGC,MAAAC,YAAA,qSAU7BH,K,qGCkBA9a,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCgb,cAAe,CAAC,EACnB,IAoHK3S,GAAcpK,eAACgtH,IAAW,IAEjBt6D,GApHW,SAAHthD,GACXA,EAARtK,SAQe,IAPflG,EAAQwQ,EAARxQ,SACS0qB,EAAela,EAAxB5O,QACA7B,EAASyQ,EAATzQ,UAASssH,EAAA77G,EACTzO,aAAK,IAAAsqH,EAAG,4BAA2BA,EAAAC,EAAA97G,EACnCjH,YAAI,IAAA+iH,EAAG9iH,GAAW8iH,EAElBzwG,GADYrL,EAAZsK,aACWtK,EAAXqL,aACG3Y,EAAIrE,YAAA2R,EAAAK,IACDu9B,EAAWC,cACX33B,EAAUC,cACVJ,EAASC,cACTqzE,EAAcC,cAGdxpF,GAFUW,GAAU,CAAEW,QAAS8oB,IAEnBnqB,eAElB4Q,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GACpBkP,EAA8B7Y,oBAAS,GAAM8Y,EAAAtb,YAAAqb,EAAA,GAAtCtJ,EAAOuJ,EAAA,GAAEsyB,EAAUtyB,EAAA,GAC1BhZ,EAA8BC,IAAMC,WAAUC,EAAAzC,YAAAsC,EAAA,GAAvCqmB,EAAOlmB,EAAA,GAAE6kH,EAAU7kH,EAAA,GAEpBoY,EAActO,uBAAY,SAAAtJ,GAC5BA,EAAMC,iBACV,GAAG,IAEG8qB,EAAazhB,uBAAY,SAAAtJ,GAC3B+O,GAAQ,GACR/O,EAAMC,iBACV,GAAG,CAAC8O,IAEEhP,EAAcuJ,uBAAY,SAACtJ,EAAOs9C,GACpCvuC,GAAQ,GACR/O,EAAMC,iBACV,GAAG,CAAC8O,IAEEwvB,EAAej1B,uBAAY,SAAAtJ,GAC7BqkH,EAAWrkH,EAAMwB,OAAOhJ,MAC5B,GAAG,CAAC6rH,IAEEC,EAA8Bh7G,uBAAY,SAAAtJ,GAC5CA,EAAMC,kBACN0qC,GAAW,GACXzE,EAAS4E,eD9DF,SAAAv0C,GAAyB,IAAtBirF,EAAKjrF,EAALirF,MAAO97D,EAAOnvB,EAAPmvB,QACrB,OAAOukB,IAAcz5B,QAAQyzG,GAAyB,CAClDjnH,OAAQ,CACJwkF,SAEJtoF,MAAO,CACHwsB,aAEL0kB,MAAMC,IACZ,CCuDOk6E,CAAsB,CAClB/iC,MAAO7tE,EACP+R,YAECphB,MAAK,WACFkK,IACAH,EAAO,+BAAgC,OAAQ,CAAEc,YAAawE,EAAY9T,SAC1E8hF,EAAY7pF,GACZiX,GAAQ,EACZ,IACCq7B,OAAM,SAAC7uC,GACJ8S,EACqB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BACrD,UAER,IACCuhC,SAAQ,WACLN,GAAW,GACXzE,EAASgF,cACb,GACR,GAAG,CAACv3B,EAAa+R,IAEjB,OACIhqB,gBAAA8hB,YAAA,CAAAhnB,SAAA,CACIU,eAACstH,IAAQ7rH,wBAAA,CACL0H,QAAS0qB,EACTlxB,MAAOA,EACPhC,UAAWkE,IACP,6BACAlE,IAGAmD,GAAI,IAAAxE,SAEP6K,IAHG,UAKR3F,gBAAC4a,IAAM,CACHxW,KAAMA,EACNY,QAASX,EACTM,QAASuX,EACT,kBAAgB,qBAAoBphB,SAAA,CAEpCU,eAACqf,IAAW,CAACpb,GAAG,qBAAoB3E,SAAE4B,EAAU,gCAChDsD,gBAACkb,IAAa,CAAApgB,SAAA,CACVU,eAAC2f,IAAiB,CAAArgB,SAAE4B,EAAU,mCAC9BlB,eAACyE,IAAS,CACN4vC,WAAS,EACTxxC,OAAO,QACPoB,GAAG,UACHtB,MAAOzB,EAAU,kCACjBI,MAAOktB,EACPzrB,SAAUskC,EACV54B,WAAS,OAGjBjK,gBAACqb,IAAa,CAAAvgB,SAAA,CACVU,eAAC8f,IAAM,CAAC3W,QAASN,EAAa1I,MAAM,UAAUgY,SAAUP,EAAQtY,SAC3D4B,EAAU,sBAEflB,eAAC8f,IAAM,CAAC3W,QAASikH,EAA6BjtH,MAAM,UAAUgY,SAAUP,EAAS1X,QAAQ,YAAYsc,kBAAgB,EAAAld,SAChH4B,EAAU,mCAOnC,E,qKCvHMuzB,GAAc,CAChB,CAAElvB,IAAK,KAAMmvB,OAAQ,6BACrB,CAAEnvB,IAAK,WAAYmvB,OAAQ,mCAC3B,CAAEnvB,IAAK,WAAYmvB,OAAQ,mCAC3B,CAAEnvB,IAAK,SAAUmvB,OAAQ,gCAAiCjyB,OAAQkyB,MAClE,CAAEpvB,IAAK,MAAOmvB,OAAQ,6BAA8BjyB,OAAQkyB,MAC5D,CAAEpvB,IAAK,cAAemvB,OAAQ,qCAAsCjyB,OAAQkyB,MAC5E,CAAEpvB,IAAK,OAAQmvB,OAAQ,8BAA+BjyB,OAAQmyB,aAAc,UAC5E,CAAErvB,IAAK,gBAAiBmvB,OAAQ,wCAChC,CAAEnvB,IAAK,eAAgBmvB,OAAQ,uCAC/B,CAAEnvB,IAAK,cAAemvB,OAAQ,CAAC,kCAAmC,6BAA8BrI,UAAW,CAAEzrB,SAAU,QAAS0J,OAAQ,aACxI,CAAE/E,IAAK,gBAAiBmvB,OAAQ,CAAC,kCAAmC,+BAAgCrI,UAAW,CAAEzrB,SAAU,QAAS0J,OAAQ,aAC5I,CAAE/E,IAAK,SAAUmvB,OAAQ,CAAC,6BAA8B,iCAAkCrI,UAAW,CAAEzrB,SAAU,YAAa0J,OAAQ,QACtI,CAAE/E,IAAK,WAAYmvB,OAAQ,CAAC,6BAA8B,mCAAoCrI,UAAW,CAAEzrB,SAAU,YAAa0J,OAAQ,QAC1I,CAAE/E,IAAK,UAAWmvB,OAAQ,kCAC1B,CAAEnvB,IAAK,YAAamvB,OAAQ,CAAC,wCAAyC,+BAAgCrI,UAAW,CAAEzrB,SAAU,UAAW0J,OAAQ,WAChJ,CAAE/E,IAAK,cAAemvB,OAAQ,CAAC,wCAAyC,iCAAkCrI,UAAW,CAAEzrB,SAAU,UAAW0J,OAAQ,WACpJ,CAAE/E,IAAK,YAAamvB,OAAQ,mCAAoCjyB,OAAQoyB,MACxE,CAAEtvB,IAAK,eAAgBmvB,OAAQ,sCAAuCjyB,OAAQoyB,MAC9E,CAAEtvB,IAAK,OAAQmvB,OAAQ,6BAAUjyB,OAAQqyB,aAAc,QAAS,QAG9D/D,GAAkB,CACpB,CAAE9sB,GAAI,EAAG9B,KAAM,oCACf,CAAE8B,GAAI,EAAG9B,KAAM,oCACf,CAAE8B,GAAI,EAAG9B,KAAM,oCACf,CAAE8B,GAAI,EAAG9B,KAAM,oCACf,CAAE8B,GAAI,EAAG9B,KAAM,qCAGborH,GAAc,SAACtsH,GAEjB,OACIuD,gBAACysB,IAAMxvB,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACbU,eAACkxB,IAAW,CAACrwB,OAAO,WAAWswB,QAASJ,KACxC/wB,eAACsC,KAAY,CAACzB,OAAO,SAASgD,aAAW,IACzC7D,eAACsC,KAAY,CAACzB,OAAO,MAAMgD,aAAW,IACtC7D,eAACoxB,KAAS,CAACvwB,OAAO,SAClBb,eAACwH,IAAc,CAAC3G,OAAO,WAAW8B,MAAM,+BAA+B0pB,UAAU,QAAQgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,OAAQxhB,SACtIU,eAAC2H,IAAiB,CAACC,WAAW,OAAOG,gBAAiBC,SAE1DhI,eAACwH,IAAc,CAAC3G,OAAO,MAAM8B,MAAM,mCAAmC0pB,UAAU,YAAYgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,OAAQxhB,SACzIU,eAAC2H,IAAiB,CAACC,WAAW,OAAOG,gBAAiBC,SAE1DhI,eAACsxB,IAAW,CAACzwB,OAAO,aACpBb,eAACsxB,IAAW,CAACzwB,OAAO,iBACpBb,eAACsxB,IAAW,CAACzwB,OAAO,iBACpBb,eAACuH,KAAqB,CAAC1G,OAAO,SAAS8B,MAAM,iCAAiC0pB,UAAU,UAAUgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,SAC3I9gB,eAACuxB,IAAa,CAAC1wB,OAAO,kBACtBb,eAACuxB,IAAa,CAAC1wB,OAAO,kBACtBb,eAACuxB,IAAa,CAAC1wB,OAAO,qBACtBb,eAACuxB,IAAa,CAAC1wB,OAAO,qBACtBb,eAACwxB,IAAmB,CAAC3wB,OAAO,oBAAoB8B,MAAM,2CAA2CmD,OAAQ,CAAE2rB,SAAU,SAAWpF,UAAU,QAAQgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,OAAQxhB,SAC/LU,eAAC0xB,IAAsB,CAAC9pB,WAAW,OAAOG,gBAAiBC,SAE/DhI,eAACwxB,IAAmB,CAAC3wB,OAAO,uBAAuB8B,MAAM,8CAA8CmD,OAAQ,CAAE2rB,SAAU,SAAWpF,UAAU,QAAQgF,YAAU,EAAChV,KAAM,CAAE5S,MAAO,OAAQqX,MAAO,OAAQxhB,SACrMU,eAAC0xB,IAAsB,CAAC9pB,WAAW,OAAOG,gBAAiBC,YAI3E,EAEM2pB,GAAyB,SAAA1wB,GAC3B,OACIuD,gBAAA8hB,YAAA,CAAAhnB,SAAA,CACKiqB,KAAYI,IAAI,cAAe,UAAY3pB,eAACwtH,GAAqB/rH,YAAA,GAAKR,IACvEjB,eAAC4xB,KAAgBnwB,YAAA,GAAKR,MAGlC,EAEM8zB,GAAsB,WACxB,IAAMvyB,EAAUwyB,cA+BhB,OA7BgB/tB,YAAW,CACvBjH,eAAC6uB,KAAgB,CAAChuB,OAAO,WACzBb,eAAC8uB,KAAa,CAACjuB,OAAO,QACtBb,eAACk1B,KAAkB,CAACr0B,OAAO,aAC3Bb,eAACm1B,KAAe,CAACt0B,OAAO,UACxBb,eAACo1B,KAAiB,CAACv0B,OAAO,gBAAgByO,UAAQ,EAACpH,cAAe1F,EAAQ6yB,iBAC1Er1B,eAACyE,IAAS,CAAC5D,OAAO,eAAeo0B,UAAU,EAAO/sB,cAAe1F,EAAQ6yB,iBACzEr1B,eAACU,KAAS,CAACG,OAAO,SAClBb,eAACkvB,IAAc,CAACruB,OAAO,WAAWiG,SAAS,SAASnE,MAAM,qCAAqC0pB,UAAU,QAAQ2B,KAAK,OAAOiH,UAAU,EAAM31B,SACzIU,eAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAO/sB,SAC/CU,eAAC6G,KAAS,CAAChG,OAAO,OAAOwI,KAAK,cAGtCrJ,eAACu1B,KAAoB,CAAC10B,OAAO,eAAe20B,WAAW,WAAW7yB,MAAM,+BAA+B0pB,UAAU,QAAQ2B,KAAK,OAAOiH,UAAU,EAAO/sB,cAAe1F,EAAQ6yB,eAAe/1B,SACxLU,eAACyE,IAAS,CAAC5D,OAAO,WAEtBb,eAACkvB,IAAc,CAACruB,OAAO,MAAM8B,MAAM,mCAAmC0pB,UAAU,YAAY2B,MAAM,EAAOiH,UAAU,EAAO/sB,cAAe1F,EAAQ6yB,eAAe/1B,SAC5JU,eAACyE,IAAS,CAAC5D,OAAO,WAEtBb,eAAC+uB,IAAW,CAACluB,OAAO,aACpBb,eAACyE,IAAS,CAAC5D,OAAO,UAAUo0B,UAAU,EAAO/sB,cAAe1F,EAAQ6yB,iBACpEr1B,eAACkvB,IAAc,CAACruB,OAAO,SAAS8B,MAAM,iCAAiC0pB,UAAU,UAAU2B,MAAM,EAAOiH,UAAU,EAAO/sB,cAAe1F,EAAQ6yB,eAAe/1B,SAC3JU,eAACyE,IAAS,CAAC5D,OAAO,WAEtBb,eAACgvB,IAAS,CAACnuB,OAAO,YAAYouB,UAAQ,EAAC5e,UAAU,UACjDrQ,eAACgvB,IAAS,CAACnuB,OAAO,eAAeouB,UAAQ,EAAC5e,UAAU,WAK5D,EAEMqgB,GAAY,SAACzvB,GACf,IAAQipB,EAAYrR,eAAZqR,QACFhP,EAAWua,aAAYhB,IACvBxE,EAAkByF,YAAiBj0B,YAAC,CAAEyZ,YAAaja,IACnDgqB,EAAUgF,EAAgBhF,QAEhCjV,qBAAU,WACNiV,GACJ,GAAG,CAACA,EAASf,IAEb,IAAMhlB,EAAU6vB,KACVY,EAAkB1wB,YAAmBC,GAE3C,OACIlF,eAAC41B,IAAmB,CAACt0B,MAAO2uB,EAAgB3wB,SACxCU,eAAC61B,IAAQp0B,oCAAA,GACDR,GACAgvB,GAAe,IACnBnG,QAAS9pB,eAACgb,IAAW,CAAC9V,QAASA,IAC/B4wB,kBAAmB91B,eAAC2xB,GAAsB,IAC1CtW,QAASrb,eAACutH,GAAW,IAAIjuH,SAEzBkF,gBAACyxB,IAAiB,CAAA32B,SAAA,CACbq2B,EACApM,KAAYI,IAAI,cAAe,UAAY3pB,eAAC6vB,IAAiB,WAKlF,EAEAa,GAAU/uB,aAAe,CACrB0a,KAAM,CAAE5S,MAAO,eAAgBqX,MAAO,SAGnC,IAAMuP,GAAyB,SAACpvB,GACnC,IAAMiE,EAAU6vB,KACVY,EAAkB1wB,YAAmBC,GAE3C,OACIV,gBAACyxB,IAAiBx0B,wBAAA,GAAKR,GAAK,IAAEwyD,SAAS,OAAMn0D,SAAA,CACxCq2B,EACApM,KAAYI,IAAI,cAAe,UAAY3pB,eAAC6vB,IAAiB,OAG1E,EAGa49F,GAAsB,SAACxsH,GAChC,IAAQiE,EAAYjE,EAAZiE,QACF1C,EAAUwyB,cAEhB,OACIxwB,gBAACyxB,IAAiBx0B,wBAAA,GAAKR,GAAK,IAAEwyD,SAAS,OAAMn0D,SAAA,CACxC4F,EAAQ4uB,SAAS,WAAa9zB,eAAC6uB,KAAgB,CAAChuB,OAAO,WACvDqE,EAAQ4uB,SAAS,QAAU9zB,eAAC8uB,KAAa,CAACjuB,OAAO,QACjDqE,EAAQ4uB,SAAS,aAAe9zB,eAACk1B,KAAkB,CAACr0B,OAAO,aAC3DqE,EAAQ4uB,SAAS,UAAY9zB,eAACm1B,KAAe,CAACt0B,OAAO,UACrDqE,EAAQ4uB,SAAS,kBAAoB9zB,eAACo1B,KAAiB,CAACv0B,OAAO,gBAAgByO,UAAQ,EAACpH,cAAe1F,EAAQ6yB,iBAC/GnwB,EAAQ4uB,SAAS,iBAAmB9zB,eAACyE,IAAS,CAAC5D,OAAO,eAAeo0B,UAAU,EAAO/sB,cAAe1F,EAAQ6yB,iBAC7GnwB,EAAQ4uB,SAAS,SAAW9zB,eAACU,KAAS,CAACG,OAAO,SAC9CqE,EAAQ4uB,SAAS,aACd9zB,eAACkvB,IAAc,CACXpoB,SAAS,SACTjG,OAAO,WACP8B,MAAM,qCACN0pB,UAAU,QACV2B,KAAK,OACLiH,UAAU,EAAM31B,SAChBU,eAACs1B,KAAgB,CAACz0B,OAAO,SAASwrB,UAAU,QAAO/sB,SAC/CU,eAAC6G,KAAS,CAAChG,OAAO,OAAOwI,KAAK,cAIzCnE,EAAQ4uB,SAAS,iBACd9zB,eAACu1B,KAAoB,CACjB10B,OAAO,eACP20B,WAAW,WACX7yB,MAAM,+BACN0pB,UAAU,QACV2B,KAAK,OACLiH,UAAU,EACV/sB,cAAe1F,EAAQ6yB,eAAe/1B,SACtCU,eAACyE,IAAS,CAAC5D,OAAO,WAGzBqE,EAAQ4uB,SAAS,QAAU9zB,eAACkvB,IAAc,CAACruB,OAAO,MAAM8B,MAAM,mCAAmC0pB,UAAU,YAAY2B,MAAM,EAAOiH,UAAU,EAAO/sB,cAAe1F,EAAQ6yB,eAAe/1B,SACxLU,eAACyE,IAAS,CAAC5D,OAAO,WAErBqE,EAAQ4uB,SAAS,aAAe9zB,eAAC+uB,IAAW,CAACluB,OAAO,aACpDqE,EAAQ4uB,SAAS,YAAc9zB,eAACyE,IAAS,CAAC5D,OAAO,UAAUo0B,UAAU,EAAO/sB,cAAe1F,EAAQ6yB,iBACnGnwB,EAAQ4uB,SAAS,WAAa9zB,eAACkvB,IAAc,CAACruB,OAAO,SAAS8B,MAAM,iCAAiC0pB,UAAU,UAAU2B,MAAM,EAAOiH,UAAU,EAAO/sB,cAAe1F,EAAQ6yB,eAAe/1B,SAC1LU,eAACyE,IAAS,CAAC5D,OAAO,WAErBqE,EAAQ4uB,SAAS,cAAgB9zB,eAACgvB,IAAS,CAACnuB,OAAO,YAAYouB,UAAQ,EAAC5e,UAAU,UAClFnL,EAAQ4uB,SAAS,iBAAmB9zB,eAACgvB,IAAS,CAACnuB,OAAO,eAAeouB,UAAQ,EAAC5e,UAAU,UACxFkZ,KAAYI,IAAI,cAAe,UAAY3pB,eAAC6vB,IAAiB,OAG1E,EAIea,M,0hBClMA5rB,IA9CgB,SAAHzF,GACbA,EAAX8P,YACU9P,EAAV+P,WACS/P,EAATgQ,UACQhQ,EAARiQ,SACQjQ,EAARyH,SACYzH,EAAZkQ,aACSlQ,EAATe,UACIf,EAAJmQ,KACYnQ,EAAZoQ,aACKpQ,EAALgF,MACMhF,EAANoD,OACYpD,EAAZqQ,aACarQ,EAAbsQ,cACYtQ,EAAZuQ,aACcvQ,EAAdwQ,eACKxQ,EAAL2C,MACO3C,EAAPyQ,QACUzQ,EAAV6E,WACK7E,EAALsD,MACmBtD,EAAnB0Q,oBACM1Q,EAAN2Q,OACI3Q,EAAJ+E,KACQ/E,EAAR4Q,SACI5Q,EAAJ8C,KACO9C,EAAP4D,QACU5D,EAAVuI,WACWvI,EAAX6Q,YACK7Q,EAAL8D,MACM9D,EAAN0B,OACG1B,EAAHwK,IACMxK,EAAN8Q,OACQ9Q,EAARuB,SACMvB,EAANwB,OACWxB,EAAXiF,YACYjF,EAAZ+Q,aACS/Q,EAATgR,UACShR,EAAT6B,UACe7B,EAAfiR,gBACIjR,EAAJoH,KACQpH,EAAR+D,SACc/D,EAAdkR,eACKlR,EAALiC,MACO,OAAA7B,YAAAJ,EAAAK,EACA,C,mCC5CX,WAEMwyB,EACgB,qBAAX3e,OAAyBm6G,kBAAkB13G,YAEvCkc,K,mCCLf,aAIevsB,IAFQ,SAAC/E,GAAQ,IAAEgP,EAAY9E,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,GAAE,OAAKk5E,YAAgB,GAADziF,OAAIX,EAAQ,iBAAiBgP,EAAanC,MAAM,EAAG,IAAI,C,+FCkB/GkgH,IAVS,SAAC1sH,GACrB,IAAM+nB,EAAezN,cACrB,OACI/W,eAAC0kB,IAAW,CAAC,aAAW,aAAY5pB,SAAA,CAChCU,cAACmpB,IAAuB1nB,YAAA,GAAKunB,IAC7BhpB,cAACopB,IAAkB3nB,wBAAA,GAAKunB,GAAkB/nB,MAGtD,C,iXCfag0C,EAAkB,CAC3B24E,KAAM,UAAWC,MAAO,UAAW3tE,IAAK,UACxClV,KAAM,UAAW8iF,OAAQ,UAAWC,OAAQ,WAGnC9qC,EAAqB,CAC9BsxB,sBAAuB,EACvBC,sBAAuB,GAGdrxB,EAAmB,CAAC,EAEpBgkB,EAAoB,SAAC6mB,GAC9B,IAAMC,EAAUC,IAAO/qH,MAAM0jH,SAASqH,QACtC,OAAOvgH,OAAOD,KAAKugH,GAASnoH,QAAO,SAAA25D,GAAC,OAAIA,GAA6B,GAAxBA,EAAEhsC,QAAQu6F,EAAe,GAC1E,EAEarmB,EAAY,SAACxlG,GAAI,OAAK+rH,IAAO/qH,MAAM0jH,SAASqH,QAAQ/rH,EAAM,EAE1Dm+F,EAAY,SAACn+F,EAAMb,GAAyB,IAAlB2B,EAAO6H,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,GAE9C7H,EAAOxB,YAAA,CACH7B,KAAM,KAEHqD,IAGKkrH,SAAWlrH,EAAQkrH,QAAQC,cACnCnrH,EAAQkrH,QAAUlrH,EAAQkrH,QAAQC,eAGtC,IAAIC,EAAgBhjH,mBAAmBlJ,GAAQ,IAAMkJ,mBAAmB/J,GAExE,IAAK,IAAIgtH,KAAarrH,EAAS,CAC3BorH,GAAiB,KAAOC,EACxB,IAAIp+G,EAAcjN,EAAQqrH,IACN,IAAhBp+G,IACAm+G,GAAiB,IAAMn+G,EAE/B,CAEA22G,SAASqH,OAASG,CACtB,EAEaztB,EAAe,SAACz+F,GAAwB,IAAlBc,EAAO6H,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC1Cw1F,EAAUn+F,EAAM,GAAEV,wBAAA,GACXwB,GAAO,IACV,WAAY,IAEpB,EAEaqgF,EAAS,SAAC9zE,GACnB,OAAOzJ,QAAgB,MAARyJ,EACnB,EAEas4F,EAAQ,SAACymB,GAClB,OAAO,IAAIrhH,SAAQ,SAAUC,EAASk8C,GAClCrlC,YAAW,WACP7W,EAAQ,WACZ,GAAGohH,EACP,GACJ,C,4JC2JMC,EAAY,WAAH,IAAIC,EAAK3jH,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAG4jH,EAAK5jH,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAC,OAAK6C,OAAOD,KAAKghH,GAAOzjH,QAAO,SAACC,EAAK3F,GAM1E,OALI2F,EAAI3F,GACJ2F,EAAI3F,GAAI9D,wBAAA,GAAQyJ,EAAI3F,IAASmpH,EAAMnpH,IAEnC2F,EAAI3F,GAAOmpH,EAAMnpH,GAEd2F,CACX,GAACzJ,YAAA,GAAOgtH,GAAS,EAEF7oF,IA7NkB,SAAC3kC,GAC9B,IAAQ6F,EAA+C7F,EAA/C6F,SAAUqD,EAAqClJ,EAArCkJ,KAAMo4B,EAA+BthC,EAA/BshC,SAAUz8B,EAAqB7E,EAArB6E,OAAQ+X,EAAa5c,EAAb4c,SACpCjd,EAAWuE,YAAmBlE,GAC9BC,EAAYC,cACZgW,EAASC,cAGT8S,GAFW7S,cACDE,cACAsf,eACVo9C,EAAe8I,cACrBhrE,EAA0B1J,mBAAS,CAC/Bs9B,KAAM,CAAC,EACPn2B,KAAM,GACNgoD,SAAU,GACV75C,SAAU,GACVgxG,WAAO5jH,EACP6M,QAAS,GACTvT,WAAO0G,EACP6jH,aAAa,IACf58G,EAAAnM,YAAAkM,EAAA,GATKrF,EAAKsF,EAAA,GAAE4T,EAAQ5T,EAAA,GAWhBysB,EAAev9B,EAAU,aAADK,OAAcX,EAAQ,SAAS,CACzDqX,YAAa,EACbzW,EAAGiX,IAAWC,SAASD,IAAWo2G,UAAUjuH,MAE1CqpB,EAAe/oB,EAAU,eAAgB,CAC3CiB,KAAMs8B,IAGJ4J,EAAUj2B,uBAAY,SAAA41B,GACxB,IAAMtC,EAAOh5B,EAAMi5B,KAAKqC,GACxB,GAAKtC,EAAL,CACA,IAAMgD,EAAahD,EAAKpmC,SAAS2L,QAAO,SAACC,EAAKulC,GAC1C,IAAMq+E,EAAapiH,EAAMi5B,KAAK8K,EAAMxsC,IACpC,OAAO6qH,EAAU,GAAAvtH,OAAA6J,YAAOF,GAAG,CAAE4jH,IAAc5jH,CAC/C,GAAG,IAEH,OAAAzJ,wBAAA,GACOikC,GAAI,IACPgD,cARuB,CAU/B,GAAG,CAACh8B,EAAMi5B,OAEJuyB,EAAc9lD,uBAAY,SAAAkzB,GAC5B1f,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACPw9C,SAAUlyB,GAAO,GAEzB,GAAG,CAAC1f,IAEEg5F,EAAcxsG,uBAAY,SAAAkzB,GAC5B1f,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACP2D,SAAU2nB,GAAO,IAGG,oBAAbznB,GAAyBA,EAASynB,EAAS54B,EAE1D,GAAG,CAACA,EAAOkZ,IAELigB,EAAezzB,uBAAY,SAAApH,GAC7B4a,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACP40G,aAAa,GAAI,IAGrB36C,EAAapuC,aAAajlC,EAAU,CAAEkF,OAAMrE,wBAAA,GAAOqE,GAAM,IAAEujC,EAAGr+B,MACzDoC,MAAK,SAAA/N,GAAe,IAAZmQ,EAAInQ,EAAJmQ,KACLoW,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACPxK,OACAm2B,KAAMn2B,EAAOg/G,EAAUx0G,EAAK2rB,KAAMlgC,gBAAM+J,EAAM,OAASwK,EAAK2rB,MAAI,GAExE,IACCuN,OAAM,SAAA7uC,GACH8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,UAC9F,IACCuhC,SAAQ,WACLnuB,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACP40G,aAAa,GAAK,GAE1B,GACR,GAAG,CAAChuH,IAEE2oE,EAAgBn3D,uBAAY,SAACusC,GAC/B/4B,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACPpC,QAAQ,GAADrW,OAAA6J,YAAM4O,EAAKpC,SAAO,CAAE+mC,KAAS,IAGxCs1B,EAAa1K,cAAc3oE,EAAU,CAAE+9C,aAClCvxC,MAAK,SAAAgE,GAAe,IAAZ5B,EAAI4B,EAAJ5B,KAELoW,GAAS,SAAA5L,GACL,OAAAvY,wBAAA,GACOuY,GAAI,IACP2rB,KAAMn2B,EAAOg/G,EAAUx0G,EAAK2rB,KAAMlgC,gBAAM+J,EAAM,OAASwK,EAAK2rB,KAC5D6xB,SAAS,GAADj2D,OAAA6J,YAAM4O,EAAKw9C,UAAQ,CAAE7Y,KAErC,GACJ,IACCzL,OAAM,SAAA7uC,GACH8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,UAC9F,IACCuhC,SAAQ,WACLnuB,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACPpC,QAASoC,EAAKpC,QAAQ9R,QAAO,SAAAm1B,GAAI,OAAIA,IAAS0jB,CAAQ,KAAC,GAE/D,GACR,GAAG,CAAC/9C,IAEEmuH,EAAa38G,uBAAY,SAAC41B,GAAkC,IAA1BgnF,EAAYlkH,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,IAAAA,UAAA,GAChD8a,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACPpC,QAAQ,GAADrW,OAAA6J,YAAM4O,EAAKpC,SAAO,CAAEowB,KAAO,IAGtCisC,EAAa86C,WAAWnuH,EAAU,CAAEonC,SAAQgnF,iBACvC5hH,MAAK,SAAAquB,GAAe,IAAZjsB,EAAIisB,EAAJjsB,KAELoW,GAAS,SAAA5L,GACL,IAAMi1G,EAAKxtH,YAAA,GAAQuY,EAAK2rB,MAExB,cADOspF,EAAMz/G,EAAKvL,IAClBxC,wBAAA,GACOuY,GAAI,IACP2rB,KAAMspF,GAEd,GACJ,IACC/7E,OAAM,SAAA7uC,GACH8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,UAC9F,IACCuhC,SAAQ,WACLnuB,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACPpC,QAASoC,EAAKpC,QAAQ9R,QAAO,SAAAm1B,GAAI,OAAIA,IAAS+M,CAAM,KAAC,GAE7D,GACR,GAAG,CAACpnC,IAEEsuH,EAAU98G,uBAAY,SAAC41B,GACzBpiB,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACP20G,MAAO,CAAE3mF,WAAQ,IAErB7wB,EAAO,2BACX,GAAG,CAACvW,IAEEuuH,EAAY/8G,uBAAY,SAACusC,EAAU3W,GAErCisC,EAAam7C,SAASxuH,EAAU,CAAE+9C,WAAU3W,WACvC56B,MAAK,SAAAswB,GAAOA,EAAJluB,KAULoW,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACP20G,WAAO5jH,GAAS,IAEpBoM,EAAO,6BACX,IACC+7B,OAAM,SAAA7uC,GACH8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,UAC9F,IACCuhC,SAAQ,WACLnuB,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACPpC,QAASoC,EAAKpC,QAAQ9R,QAAO,SAAAm1B,GAAI,OAAIA,IAAS+M,CAAM,KAAC,GAE7D,GACR,GAAG,CAACpnC,IAEEguF,EAAUx8E,uBAAY,SAAC08E,GACzBlpE,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACP2rB,KAAMmpD,GAAO,GAErB,GAAG,CAAClpE,IAQJ,OANA5P,qBAAU,WACDpV,GACLilC,GACJ,GAAG,CAACjlC,EAAUspB,IAGdzoB,wBAAA,GACOiL,GAAK,IACRud,eACAsY,WACA3hC,WACAkG,WACAqD,OACA+tD,cACA0mD,cACAhwB,UACA/oD,eACA0jC,gBACAlhC,UACA0mF,aACAG,UACAC,YACAjlG,WAER,C,mCCzNA,yBAae8b,IARa,SAAH3mC,GAA6B,IAAvBiC,EAAKjC,EAALiC,MAAOhC,EAAQD,EAARC,SAClC,OACIU,cAACS,IAAYu9C,SAAQ,CAAC18C,MAAOA,EAAMhC,SAC9BA,GAGb,C,yFCRaqtE,EAAqB/vD,YAAGC,MAAAC,YAAA,6L,8GC2ExBswB,EAAmB,SAAA59B,GAC5B,OAAKA,GAAa,IAEtB,C,oSCjEM3N,EAAYC,aACd,SAAAC,GAAK,MAAK,CACNyQ,QAAS,CACLnC,UAAW,SACXqa,QAAgC,UAAvB3oB,EAAMyE,QAAQC,KAAmB,GAAM,GAChD5D,OAAQ,QACR1C,MAC2B,UAAvB4B,EAAMyE,QAAQC,KACR,UACA1E,EAAMyE,QAAQ0lB,KAAKiQ,SAEjChyB,KAAM,CACFoE,MAAO,MACPiD,OAAQ,OAEZ8sB,QAAS,CACLhwB,QAAS,OACTmU,WAAY,SACZD,eAAgB,SAChBo9B,IAAK,EACL33B,UAAW,OAElB,GACD,CAAE9lB,KAAM,UA0DG+0B,EAtDD,SAACj2B,GACX,IAAAqa,EAAgCC,YAAeta,GAAvC6F,EAAQwU,EAARxU,SAAU+U,EAASP,EAATO,UACZjb,EAAWuE,YAAmBlE,GAC9BuB,EAAUX,EAAUZ,GACpBC,EAAYC,cAEZo9B,EAAmBC,cACnBC,EAAev9B,EAAU,aAADK,OAAcX,EAAQ,mBAAmB,CACnEqX,YAAa,EACbzW,EAAG+8B,EAAiB39B,EAAU,KAG5Bg+B,EAAe19B,EAAU,gBAAiB,CAAEiB,KAAMs8B,IAClDI,EAAgB39B,EAAU,kBAEhC,OACIsD,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIkF,eAAA,OAAK7D,UAAW6B,EAAQgQ,QAAQlT,SAAA,CAC5BU,cAAC8+B,IAAK,CAACn+B,UAAW6B,EAAQ2H,OAC1BnK,cAACC,IAAU,CAACC,QAAQ,KAAK6+B,WAAS,EAAAz/B,SAC7B4B,EAAU,aAADK,OAAcX,EAAQ,UAAU,CACtCY,EAAGo9B,MAGV/iB,GACG7b,cAACC,IAAU,CAACC,QAAQ,QAAOZ,SACtB4B,EAAU,aAADK,OAAcX,EAAQ,WAAW,CACvCY,EAAGq9B,SAKlBhjB,GACGrX,eAAA,OAAK7D,UAAW6B,EAAQ87B,QAAQh/B,SAAA,CAC5BU,cAACuc,IAAY,CAACrc,QAAQ,YAAY4G,SAAUA,IAC5C9G,cAACqvH,IAAU,CACP1sH,MAAM,4BACNpD,GAAI,CACA4M,SAAUrF,EACVkE,OAAQ3D,oBAAU,CACdvB,OAAQsB,KAAKC,UAAU,CAAE+iB,SAAS,IAClC3O,iBAAkBrU,KAAKC,UAAU,CAAE+iB,SAAS,cAQ5E,E,+kBCpEayL,EAAW,SAAC50B,GACrB,IACI6oB,EAeA7oB,EAfA6oB,QACAC,EAcA9oB,EAdA8oB,MACAC,EAaA/oB,EAbA+oB,YACA3O,EAYApa,EAZAoa,QACAya,EAWA70B,EAXA60B,kBACAE,EAUA/0B,EAVA+0B,WACA12B,EASA2B,EATA3B,SACAqB,EAQAM,EARAN,UAEW4qB,GAMXtqB,EAPAuB,QAOAvB,EANAb,WAAS6a,EAMTha,EALAia,gBAAQ,IAAAD,EAAGwb,IAAexb,EAC1BG,EAIAna,EAJAma,SACApW,EAGA/D,EAHA+D,MACA0xB,EAEAz1B,EAFAy1B,MACG5yB,EAAIrE,YACPwB,EAAKvB,GACHuwB,EAAkB0G,YAAuB11B,GACzC21B,EAAcrb,YAAeta,GAC7BuB,EAAUX,EAAUZ,GAEtBgpB,EAMA2M,EANA3M,aACArO,EAKAgb,EALAhb,MACAoP,EAIA4L,EAJA5L,OACApT,EAGAgf,EAHAhf,QACA8D,EAEAkb,EAFAlb,aACAe,EACAma,EADAna,YAEEyN,EAAU2M,cAuCVC,EACF9L,IAAWpT,GAAqB,IAAVgE,IAAgBjO,OAAOD,KAAKgO,GAAc/S,OAEpE,OACInE,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAW,YAAarC,EAAQ8D,KAAM3F,IAC7C4pB,EAAkBzmB,IAAK,IAAAxE,SAAA,CAE3BU,cAAC+2B,IAAK,CAAC/xB,MAAOA,EAAOilB,aAAcA,IAClC6M,IAAmC,IAAVJ,EACpBtwB,uBAAaswB,EAAOE,GA9C9BpyB,eAAA8hB,WAAA,CAAAhnB,SAAA,CACK0qB,GACC3O,GAAWyO,IACT9pB,cAAC+rB,IAAWtqB,wBAAA,CACR4Z,QAASA,GACL4U,GAAe,IACnBnG,QAASA,EACT5O,SAAUA,EACVE,SAAUA,KAGlB5W,eAAA,OAAK7D,UAAW6B,EAAQ2T,KAAK7W,SAAA,CACzBkF,eAAC+mB,EAAO,CACJ5qB,UAAWkE,IAAWrC,EAAQ+V,QAAO/D,YAAA,GAChChS,EAAQg1B,qBAAuB/a,EAAY9T,OAAS,IACtDrJ,SAAA,EAGoB,IAAtBw2B,GAA+BA,GAC5B91B,cAAC2uD,IAAsBltD,wBAAA,GAAKwuB,GAAe,IAAA3wB,SACtCw2B,KAGRx2B,GAEG8G,uBAAaqC,WAASijB,KAAKpsB,GAASmC,wBAAA,GAC7BwuB,GAAe,IAClB2+B,gBAAsC,IAAtB94B,KAEvBE,GAAc5vB,uBAAa4vB,EAAYY,KAbnC1M,GAeRH,GAAS3jB,uBAAa2jB,EAAO6M,YAmB9C,EAEAf,EAASl0B,aAAe,CACpBmoB,QAAS9pB,cAACg3B,IAAc,IACxBhN,YAAahqB,cAACi3B,IAAsB,IACpCz0B,QAAS,CAAC,EACVpC,UAAWquB,IACXqH,kBAAmB91B,cAAC6uD,IAAsB,IAC1C74B,WAAYh2B,cAAC8uD,IAAiB,IAC9Bp4B,MAAO12B,cAACk3B,EAAK,KAGjB,IAAMr1B,EAAYC,aACd,SAAAC,GAAK,IAAA4lB,EAAA,MAAK,CACNrhB,KAAM,CAAC,EACP6P,KAAM,CACF7H,QAAS,QAEbiK,SAAOoP,EAAA,CACHM,UAAW,EACXkP,WAAYp1B,EAAMq1B,YAAYC,OAAO,cACrCvpB,SAAU,WACVwpB,KAAM,YAAU9iB,YAAAmT,EACf5lB,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5BqP,UAAW,SACd/iB,YAAAmT,EAAC,WACQ,WAASA,GAEvB6P,qBAAsB,CAClBvP,WAAYlmB,EAAMG,QAAQ,GAC1Bi1B,WAAYp1B,EAAMq1B,YAAYC,OAAO,eAEzCvN,QAAS,CACL3H,OAAQ,EACR7T,QAAS,OACTkU,eAAgB,WAChBoI,SAAU,QAEd6M,UAAW,CAAExpB,QAAS,IACzB,GACD,CAAE9L,KAAM,WAKNooB,EAAoB,SAAHlrB,KACnByH,SAAezH,EACfmc,YAAkBnc,EAClBmQ,KAAWnQ,EACX4qB,aAAmB5qB,EACnBoc,iBAAuBpc,EACvBytB,oBAA0BztB,EAC1Bqc,aAAmBrc,EACnBwc,UAAgBxc,EAChBoqB,QAAcpqB,EACdqqB,QAAcrqB,EACd0rB,QAAc1rB,EACd0tB,WAAiB1tB,EACjB2gB,QAAc3gB,EACdkO,IAAUlO,EACVuY,QAAcvY,EACd2rB,OAAa3rB,EACbqM,SAAerM,EACfG,MAAYH,EACZwe,SAAexe,EACf2tB,aAAmB3tB,EACnBqd,gBAAsBrd,EACtB4D,QAAc5D,EACd2hB,KAAW3hB,EACXkqB,YAAkBlqB,EAClBwf,QAAcxf,EACd4rB,QAAc5rB,EACduB,SAAevB,EACfod,YAAkBpd,EAClB6gB,WAAiB7gB,EACjB8gB,QAAc9gB,EACd+gB,WAAiB/gB,EACjBghB,QAAchhB,EACdsc,WAAiBtc,EACjB4tB,iBAAuB5tB,EACvBgd,KAAWhd,EACXuc,MACO,OAAAnc,YAAAJ,EAAAoS,EACA,EAEIokB,K,2HC9KAjS,EAZU,SAACmxD,GACtB,IAAMlrE,EAAMiI,kBAAO,WACf,MAAM,IAAIzE,MAAM,gDACpB,IAKA,OAJA6kB,aAA0B,WACtBroB,EAAIiJ,QAAUiiE,CAClB,GAAG,CAACA,IAEG3iE,uBAAY,kBAAavI,EAAIiJ,QAAO2H,MAAX5Q,EAAGiB,UAAiB,GAAE,CAACjB,GAC3D,E,QC0Dem6E,IA9DS,SAACz+E,EAAKqK,GAE1B,IAAMuE,EAAW/B,uBAAY,WACzB,GAAsB,qBAAXmB,OACP,OAAO3D,EAGX,IACI,IACMqrB,EAAOq0F,EADA/7G,OAAOg8G,aAAa95G,QAAQ+5G,MAIzC,OAAOnuH,IAAI45B,EAAM11B,EAAKqK,EAC1B,CAAE,MAAOvL,GAEL,OADA+nD,QAAQk4C,KAAK,wCAAD/iG,OAAoCgE,EAAG,WAAMlB,GAClDuL,CACX,CACJ,GAAG,CAACrK,EAAKqK,IAETmC,EAAsC1J,mBAAS8L,GAASnC,EAAAnM,YAAAkM,EAAA,GAAjD2D,EAAW1D,EAAA,GAAE2D,EAAc3D,EAAA,GAE5B4D,EAAWgO,GAAiB,SAAAtiB,GAET,oBAAViS,QACP64C,QAAQk4C,KAAK,wCAAD/iG,OAC2BgE,EAAG,mDAI9C,IACI,IAAMsQ,EAAevU,aAAiBwU,SAAWxU,EAAMoU,GAAepU,EAEhE25B,EAAOq0F,EADA/7G,OAAOg8G,aAAa95G,QAAQ+5G,MAEnCC,EAAmBx0F,EAAO8S,IAAI9S,EAAM11B,EAAKsQ,GAAgBk4B,IAAI,CAAC,EAAGxoC,EAAKsQ,GAC5EtC,OAAOg8G,aAAax5G,QAAQy5G,IAAyBpoH,KAAKC,UAAUooH,IACpE95G,EAAeE,GACftC,OAAOm8G,cAAc,IAAI1sD,MAAM,iBACnC,CAAE,MAAO3+D,GACL+nD,QAAQk4C,KAAK,wCAAD/iG,OAAoCgE,EAAG,WAAMlB,EAC7D,CACJ,IAEA2R,qBAAU,WACNL,EAAexB,IACnB,GAAG,IAEH,IAAMw7G,EAAsBv9G,uBAAY,WACpC,IAAM9Q,EAAQ6S,IACErE,IAAQxO,EAAOoU,IAE3BC,EAAerU,EAGvB,GAAG,CAAC6S,EAAUuB,IAMd,OAJAk6G,YAAiB,UAAWD,GAE5BC,YAAiB,gBAAiBD,GAE3B,CAACj6G,EAAaE,EACzB,EAMA,SAAS05G,EAAUhuH,GACf,IACI,MAAiB,cAAVA,OAAwByJ,EAAY3D,KAAKjE,MAAW,OAAL7B,QAAK,IAALA,IAAS,GACnE,CAAE,MAAAuuH,GAEE,YADAzjE,QAAQC,IAAI,mBAAoB,CAAE/qD,SAEtC,CACJ,C,uRCxEMO,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCklF,SAAU,CACNh5E,QAAS,EACTogB,YAAa,EACbvD,YAAa,EACb7C,WAAY,EACZmD,cAAe,GAEnBzoB,MAAO,CACHqlB,SAAU,EACVqG,YAAa,GAEjB+4D,eAAgB,CACZv/C,OAAQ,YACR,UAAW,CACP1nC,MAAO4B,EAAMyE,QAAQyK,OAAO6vC,SAGvC,GAAG,CAAE3+C,KAAM,0BAmDG2tH,EAjDelmH,sBAAW,SAAC3I,EAAO4I,GAC7C,IACIxD,EAGApF,EAHAoF,OACAohF,EAEAxmF,EAFAwmF,QACAt+E,EACAlI,EADAkI,QAEE3G,EAAUX,IACVX,EAAYC,cACZP,EAAWuE,YAAmBlE,GAC9BymF,EAAet1E,uBAAY,SAACtJ,GAC9BA,EAAMC,kBACNI,EAAQ9C,EAAOpF,MAAMJ,OACzB,GAAG,CAACsI,IAEJ,OACI3E,eAAC8nD,IAAQ,CACLziD,IAAKA,EACLikD,OAAK,EACL7hC,QAAM,EACN9iB,QAASu+E,EACTvvE,SAAU9R,EAAOpF,MAAMqO,SACvBnN,KAAMkE,EAAOpF,MAAMJ,OAAOvB,SAAA,CAE1BU,cAAC2nF,IAAQ,CACLC,eAAa,EACbzmD,WAAY,CAAE,kBAAmB96B,EAAOpF,MAAMJ,QAC9C4mF,QAASA,EACTtnF,MAAM,UACNQ,UAAW6B,EAAQykF,WAEvBjnF,cAAA,QAAMW,UAAW6B,EAAQG,MAAMrD,SAC1B4B,EAASuZ,WAAC,EAADrP,YACHy8E,YAA6B,CAC5BllF,MAAO0D,EAAOpF,MAAM0B,MACpB/B,WACAC,OAAQwF,EAAOpF,MAAMJ,aAIhC4mF,GAAYznF,cAAC+d,IAAuB,CAAAze,SACjCU,cAAC8nF,IAAiB,CAACnnF,UAAWkE,IAAW,cAAerC,EAAQ4kF,gBAAiBjnF,MAAM,WAAWsK,SAAS,cAI3H,I,6EC5DM5I,EAAYC,YAAW,CACzBwE,KAAM,CAAEgI,QAAS,iBAEjB,CAAEnM,KAAM,kBA6FNooB,EAAoB,SAAHnZ,KACnBqK,iBAAuBrK,EACvBsK,aAAmBtK,EACnBuK,WACO,OAAAlc,YAAA2R,EAAAK,EACA,EAIIyK,IAlGO,SAACjb,GACnB,IACIiE,EAGAjE,EAHAiE,QACAvE,EAEAM,EAFAN,UACGmD,EAAIrE,YACPwB,EAAKvB,GAEHkB,EAAWuE,YAAmBlE,GACpC8Q,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GACdzJ,EAAWuJ,mBACXtP,EAAUX,EAAUZ,GACpBmE,EAAaC,IAAIH,EAAS,gBAC1BM,EAAaC,IAAMP,EAAS,gBAClCQ,EAAsCC,YAAe/E,EAAUwE,GAAWkb,EAAAza,YAAAH,EAAA,GAAnEkZ,EAAW0B,EAAA,GAAEC,EAAcD,EAAA,GAC5ByvG,EAAoBvnF,MAAM1X,KAAK,IAAI8S,IAAI,GAADriC,OAAA6J,YAAKwT,GAAWxT,YAAKhG,MAG3Dsb,EAActO,uBAAY,SAAAtJ,GAC5BA,EAAM6X,iBACN9I,GAAQ,GACRtP,EAASuK,QAAUhK,EAAMM,aAC7B,GAAG,CAACb,EAAUsP,IAERhP,EAAcuJ,uBAAY,WAC5ByF,GAAQ,EACZ,GAAG,CAACA,IAEE6vE,EAAet1E,uBAAY,SAACg3E,GAE9B7oE,GAAe,SAAApB,GAEX,OADgBA,EAAS2U,SAASs1D,GAE5BjqE,EAASrZ,QAAO,SAAAm1B,GAAI,OAAIA,IAASmuD,CAAU,IAC3CjqE,EAAS5d,OAAO,CAAC6nF,GAC3B,GAEJ,GAAG,CAAC7oE,IAEE8oE,EAAaj3E,uBAAY,SAAA/S,GAAmC,IAAhC4hB,EAAY5hB,EAAZ4hB,aAAcqoE,EAAUjqF,EAAViqF,WACxCroE,IAAiBqoE,GACjB/oE,GAAe,SAAApB,GAEX,OAD0BoqE,YAAmBpqE,EAAU8B,EAAcqoE,EAEzE,GAGR,GAAG,CAAC/oE,IAGJ,OACI/b,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,IAChC4pB,EAAkBzmB,IAAK,IAAAxE,SAAA,CAE3BU,cAAC8f,IAAM,CACHnf,UAAU,aACVgC,MAAM,2BACN,gBAAc,OACdwG,QAASuX,EAAYphB,SAErBU,cAACwpF,IAAc,MAEnBxpF,cAACuJ,IAAI,CACDX,KAAMA,EACNL,SAAUA,EAASuK,QACnBtJ,QAASX,EACT4Y,mBAAoB,KAAKniB,SAEzBU,cAAC6pF,YAAS,CAACC,mBAAmB,eAAeC,SAAS,IAAIC,OAAQX,EAAW/pF,SACxEywH,EAAkB1qH,KAAI,SAAA+jF,GACnB,IAAM/iF,EAASb,EAAW4jF,GACpB3B,EAAU7oE,EAAYkV,SAASs1D,GAErC,OAAO/iF,EACHrG,cAACiqF,YAAS,CAAA3qF,SACNU,cAAC8vH,EAAqB,CAClBzpH,OAAQA,EACRohF,QAASA,EACTt+E,QAASu+E,KAJD0B,GAOhB,IACR,GAAG,WAKvB,C,0PCnGM4mC,EAAiB,SAAA/uH,GACnB,IACI6F,EAMA7F,EANA6F,SAOEtE,GADFvB,EALAN,UAKAM,EAJAuB,QAIAvB,EAHA+K,YAGA/K,EAFAf,QACOT,YACPwB,EAAKvB,GACOmC,EAAUZ,IACpBC,EAAYC,cACZ6e,EAAUC,cAGVgwG,GAFW9qH,cAEQiN,uBAAY,SAACtJ,GAClCA,EAAM6X,iBACN7X,EAAMC,kBACNiX,EAAQe,KAAK,GAADxf,OAAIuF,EAAQ,WAC5B,GAAG,KAEH,OACI9G,cAACuoC,IAAQ,CACLP,OAAO,cACPrlC,MAAO6B,eAAA,OAAK7D,UAAW6B,EAAQG,MAAMrD,SAAA,CACjCU,cAACqyD,IAAU,CAAC5nD,SAAS,QAAQ9J,UAAW6B,EAAQ2H,OAChDnK,cAACC,IAAU,CAACC,QAAQ,QAAQS,UAAW6B,EAAQ0pB,KAAK5sB,SAC/C4B,EAAU,gCAGnBgvH,aAAcD,EACdztH,QAAS,CAAEolC,cAAeplC,EAAQolC,gBAG9C,EAGM/lC,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC6lC,cAAe,CACXr5B,MAAO,GACPiD,OAAQ,GACR6c,YAAa,EACb5L,WAAY,UAEhB9f,MAAO,CACH2L,QAAS,OACTmU,WAAY,SACZxU,QAASlM,EAAMG,QAAQ,KAE3BiI,KAAM,CACFkkB,YAAatsB,EAAMG,QAAQ,IAE/BgqB,KAAM,CACFgS,WAAY,UACZlW,SAAU,GAEjB,GAAG,CAAE7lB,KAAM,mBAGG0K,iBAAKmjH,GAAgB,SAAC19D,EAAWjd,GAC5C,OACIid,EAAUxrD,WAAauuC,EAAUvuC,UACjCwrD,EAAU3vD,QAAU0yC,EAAU1yC,OAC9B2vD,EAAUpxD,YAAcm0C,EAAUn0C,WAClCoxD,EAAU/yD,KAAO81C,EAAU91C,IAC3B+yD,EAAUn6C,WAAak9B,EAAUl9B,QAEzC,I,yFCjEMiuB,EAAgB,SAACnlC,GACnB,IACIN,EAQAM,EARAN,UACAy3D,EAOAn3D,EAPAm3D,aACAg2B,EAMAntF,EANAmtF,aACUtmD,EAKV7mC,EALAokC,SACAxpB,EAIA5a,EAJA4a,UAGG/X,GACH7C,EAHAwoB,QAGAxoB,EAFA8pB,QACOtrB,YACPwB,EAAKvB,IAEH8C,EAAUX,EAAUZ,GAC1B4sF,EAWIttF,cAVAolC,EAAIkoD,EAAJloD,KACAn2B,EAAIq+E,EAAJr+E,KACA1I,EAAQ+mF,EAAR/mF,SACAlG,EAAQitF,EAARjtF,SACA2hC,EAAQsrD,EAARtrD,SACAi1B,EAAQq2B,EAARr2B,SACA75C,EAAQkwE,EAARlwE,SACAu6C,EAAW21B,EAAX31B,YACA0mD,EAAW/wB,EAAX+wB,YACAr1C,EAAaskB,EAAbtkB,cAIEme,EAAet1E,uBAAY,SAACtJ,EAAOw8B,GACrCx8B,EAAMqnH,UACYrnH,EAAMwB,OAAO8lH,QAAQ,gCAEnCl4D,EAAY5yB,GACgB,oBAAjB8yB,GAA6BA,EAAatvD,EAAOw8B,GAEpE,GAAG,IAGGxnB,EAAe1L,uBAAY,SAACtJ,EAAOw8B,GAGrC,GAFAx8B,EAAMqnH,UAEFrnH,EAAMwB,OAAO8lH,QAAQ,8BAA+B,CACpD,IAAMpoF,EAAS1C,EAAQ,GACjB+qF,EAAehvH,IAAIskC,EAAM,CAACqC,EAAQ,aAClCsoF,EAAavqH,QAAQyiC,MAAMC,QAAQ4nF,GAAgBA,EAAa1nH,OAAS0nH,GACzErlG,EAASqlG,EAAa9uG,MAAK,SAAAkvB,GAAK,OAAI9K,EAAK4qF,eAAe9/E,EAAMxsC,GAAG,IACnEqsH,IAAetlG,GACfu+C,EAAcvhC,EAEtB,CAEIl/B,EAAMwB,OAAO8lH,QAAQ,wBACrBxR,EAAYt5E,GACgB,oBAAjB8oD,GAA6BA,EAAatlF,EAAOw8B,GAEpE,GAAG,CAACK,EAAM6xB,IAEV,OAEIhzD,eAAC2zD,IAAQ12D,wBAAA,CACLd,UAAWsjB,kBACPzhB,EAAQ8D,KACR3F,GAEJ62D,SAAUA,EACV75C,SAAUA,EACVy6C,aAAcsvB,EACd0G,aAActwE,EACd0yG,aAAW,GACP1sH,GAAI,IAAAxE,SAAA,CAEPkQ,EAAKnK,KAAI,SAAAqgC,GAAI,OAAK1lC,cAAC8nC,EAAQ,CAACE,OAAQtC,EAAKzhC,IAASyhC,EAAKzhC,GAAM,KAC5Ds+B,GAAY1mB,GAAa7b,cAACgwH,EAAc,CAAClpH,SAAUA,EAAUlG,SAAUA,OAIrF,EAGAwlC,EAAczkC,aAAe,CACzB0jC,SAAUorF,KAKd,IAAM5uH,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF+hB,YAAatmB,EAAMG,QAAQ,IAElC,GAAG,CAAEC,KAAM,WAIGikC,K,8MCvFT0xB,EAAiB,SAAC72D,GACpB,IAAQN,EAAiDM,EAAjDN,UAAWI,EAAsCE,EAAtCF,OACbiuC,GADmD/tC,EAA9ByvH,UAAyBjxH,YAAKwB,EAAKvB,GAC7CuvC,eACX93B,EAASC,cACTlW,EAAYC,cAClB4Q,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GAGd6hB,EAAazhB,uBAAY,SAAAtJ,IAVX,SAAAA,GAASA,EAAMC,iBAAkB,CAWjDA,CAAgBD,GAChB+O,GAAQ,EACZ,GAAG,CAACA,IAEEhP,EAAcuJ,uBAAY,WAC5ByF,GAAQ,EACZ,GAAG,CAACA,IAEE84G,EAAcv+G,uBAAY,SAAC9Q,GACUP,EAA/BkD,GAAR,IAAYo3B,EAA2Bt6B,EAA3Bs6B,MAAOD,EAAoBr6B,EAApBq6B,UAAoBr6B,EAAT0F,KAC1B68E,YAAOhiF,KAEX0tC,EAAS4E,eAETyyC,YAAS,CACLpiF,GAAIi3B,YAAe,CAAEt6B,SAAUy6B,EAAMp3B,GAAIksB,IAAKiL,EAAUn3B,KACxDuL,KAAM,CACFlO,WAGH8L,MAAK,SAAA/N,GAAe,IAAZmQ,EAAInQ,EAAJmQ,KACGvL,EAA0CuL,EAA1CvL,GAA0BwC,GAAgB+I,EAAtCqe,QAAsCre,EAA7B82E,YAA6B92E,EAAhB/I,MAAMnF,EAAUkO,EAAVlO,MAC1BJ,EAAU,mCAAoC,CAAE+W,YAAa,IACjE,GAAA1W,OAAM0C,EAAE,OAAA1C,OAAMD,EAAMy2B,WAAU,MAAAx2B,OAAKkF,EAAI,KAEjD0Q,EAAO,mCAAoC,OAAQ,CAAEc,YAAa,GAEtE,IACCi7B,OAAM,SAAC7uC,GACJ8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,UAC9F,IACCuhC,SAAQ,WACL/E,EAASgF,eACTnrC,GACJ,IAER,GAAG,CAAC9H,EAAQiuC,EAAU73B,EAAQtO,IAE9B,OACIrE,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAACkJ,IAAU,CAACG,KAAK,QAAQF,QAAS0qB,EAAYlzB,UAAWA,EAAUrB,SAC/DU,cAAC4wH,IAAQ,MAEb5wH,cAAC6wH,IAAc,CACX9vH,OAAQA,EACR6H,KAAMA,EACNY,QAASX,EACTioH,QAASH,MAIzB,EAUeI,IARmB,SAAA9vH,GAAU,IAADksB,EAAA6jG,EACjC3a,EAAqB,QAAflpF,EAAGlsB,EAAMF,cAAM,IAAAosB,GAAW,QAAX6jG,EAAZ7jG,EAAciO,iBAAS,IAAA41F,OAAX,EAAZA,EAAyB76D,YACxC,GAAImtB,YAAO+yB,GAAS,OAAO,KAG3B,MAFmB,KACWv+E,KAAKu+E,GACbr2G,cAAC83D,EAAcr2D,YAAA,GAAKR,IAAY,IAC1D,C,2SCnFI22B,EAAQ,2BAEG,WAACC,GAEZ,IAAQpxB,EAAgBoxB,EAAhBpxB,KAAMnF,EAAUu2B,EAAVv2B,MACd,OAAQmF,GACJ,IAAK,UACD,MAAoB,mBAAVnF,GACW,IAAVA,EAAiB,EAAI,EAEpBs2B,EAAME,KAAKx2B,EAAMy2B,YAAkB,EAAJ,EAG/C,IAAK,SACD,OAAOC,WAAW12B,GAEtB,IAAK,QACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,QACL,IAAK,QACL,IAAK,OACL,IAAK,SACL,IAAK,SACL,IAAK,SACD,OAAO22B,OAAO32B,GAElB,QACI,OAAO02B,WAAW12B,EAAMy2B,YAEnC,E,mCCZDG,IAAWC,WClBiB,CACxBC,OAAQ,CACJC,QAAQ,GAEZC,YAAa,CACTC,OAAQ,CACJC,cAAc,IAGtBxzB,MAAO,CACHknB,KAAM,IAEVuM,OAAQ,CACJC,SAAS,EACTtgB,MAAO,CACH3N,SAAU,SAGlBkuB,QAAS,CACLC,YAAY,EACZC,QAAQ,EACRH,SAAS,GAEbI,QAAS,CACLrkB,SAAS,GAEbskB,KAAM,CACFC,OAAQ,CAAC,uCAAU,6CAAW,2BAAQ,uCAAU,qBAAO,2BAAQ,2BAAQ,uCAAU,mDAAY,6CAAW,uCAAU,8CAClHC,SAAU,CAAC,qEAAe,qEAAe,6CAAW,iCAAS,6CAAW,6CAAW,8CACnFC,YAAa,CAAC,qBAAO,qBAAO,2BAAQ,qBAAO,qBAAO,2BAAQ,2BAAQ,qBAAO,2BAAQ,qBAAO,2BAAQ,sBAChGC,UAAW,yFACXC,YAAa,iDACbC,aAAc,kDACdC,YAAa,iDACbC,YAAa,iDACbC,WAAY,oGACZ5hB,QAAS,0DDhBjB,I,EAAM/V,EAAYC,aAAW,SAACC,GAAK,MAAM,CACrCkvH,OAAQ,CACJruG,UAAW,eACXuU,WAAYp1B,EAAMq1B,YAAYC,OAAO,YAAa,CAC9ChU,SAAUthB,EAAMq1B,YAAY/T,SAASy0E,YAG7Co5B,WAAY,CACRtuG,UAAW,kBAGlB,IAEK0/F,EAAe,CACjB9yG,KAAM,GACNnL,WAAO0G,EACP6M,SAAS,EACToT,QAAQ,GAmOGmmG,EA9NmB,SAAClwH,GAE/B,IACImwH,EAEAnwH,EAFAmwH,cACArwH,EACAE,EADAF,OAGEgB,EAAQ4P,cACR0/G,EAAYtvH,EAAMyE,QAAQC,KAC1BjE,EAAUX,IACVmtC,EAAWC,cACX93B,EAASC,cAIfrF,EAAgC1J,oBAAS,GAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCylD,EAAQxlD,EAAA,GAAEkmD,EAAWlmD,EAAA,GAC5BkP,EAA0B7Y,mBAASi6G,GAAanhG,EAAAtb,YAAAqb,EAAA,GAAzCxU,EAAKyU,EAAA,GAAEyE,EAAQzE,EAAA,GAMtBnL,qBAAU,WAENg5B,EAAS4E,eACThuB,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAEvH,SAAS,EAAMoT,QAAQ,GAAK,IAEjE,IAAQmsC,EAAqBi6D,EAArBj6D,MAAU/5B,EAAM39B,YAAK2xH,EAAa1xH,GAE1C67D,YAAQ,CACJz1D,OAAQ,CAAE64B,QAAS,CAACvB,GAAS3C,QAAS,CAAC08B,MACxC/pD,MAAK,SAAAkkH,GACJ,IAAM9hH,EAAOnO,cAAIiwH,EAAU,CAAC,OAAQ,EAAG,OAAQ,EAAG,QAAS,IAC3D1rG,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAE3P,OAAMoI,SAAS,EAAOoT,QAAQ,GAAI,GAC3E,IACCkoB,OAAM,SAAC7uC,GACJ8S,EAAwB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BAA8B,WAC1FoT,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAE9a,QAAOuT,SAAS,EAAOoT,QAAQ,GAAK,GAC7E,IACC+oB,SAAQ,WACL/E,EAASgF,cACb,GAGJ,GAAG,CAACo9E,IAEJ,IAAMnuH,EAAU+C,mBAAQ,WAEpB,IAAM81B,EAAY,CACdC,cAAeh6B,EAAMyE,QAAQw1B,QAC7BC,mBAAoBl6B,EAAMyE,QAAQw1B,QAClCE,OAAQ,CACN31B,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,MAC1C1T,MAAO,CACLjY,MAAO4B,EAAMyE,QAAQ0lB,KAAKiQ,UAG9BC,UAAWr6B,EAAMyE,QAAQw1B,QACzBK,UAAWt6B,EAAMyE,QAAQw1B,QACzBh3B,MAAO,CAAEknB,KAAM,OAGnB,OAAAzqB,wBAAA,GAC8B,QAAtBM,EAAMyE,QAAQC,KAAiB,CAC/By8G,UAAW,CACPqO,QAAS,CACLhrH,gBAAiB,OACjBuI,YAAa,QAEjB0iH,aAAc,OACdC,SAAU,wBACVl5F,OAAQ,CACJp4B,MAAO,UACPi8B,UAAW,WAEfjB,MAAO,CACHY,cAAe,YAGvB21F,UAAW,CACPC,mBAAoB,UACpBC,eAAgB,UAChBC,iBAAkB,OAClBC,sBAAuB,UACvBC,kBAAmB,UACnBC,WAAY,OACZC,qBAAsB,UACtBC,iBAAkB,YAEtB,CAAC,GAAG,CAAF,GACNC,cAAa1wH,wBAAA,GACiB,QAAtBM,EAAMyE,QAAQC,KAAiB,CAC/B2rH,YAAa,CACTh5C,KAAM,UACNi5C,OAAQ,UACRj6G,MAAO,CACHjY,MAAO,QAEXmyH,OAAQ,CACJphH,MAAO,CACHkoE,KAAM,UACNi5C,OAAQ,UACRj6G,MAAO,CACHjY,MAAO,UAGfuE,OAAQ,CACJ00E,KAAM,UACNi5C,OAAQ,UACRj6G,MAAO,CACHjY,MAAO,YAKvBoyH,oBAAqB,UACrBC,WAAY,CACRjsH,gBAAiB,OACjBpG,MAAO,UAEXsyH,WAAY,CACRtyH,MAAO,WAEX,CAAC,GAAG,CAAF,GACNwd,SAAU,EACV+0G,QAAS,CACL,CAAEjsH,KAAM,OAAQioD,MAAO,EAAGxiC,KAAM,UAAMlnB,MAAO,sFAC7C,CAAEyB,KAAM,OAAQioD,MAAO,EAAGxiC,KAAM,UAAMlnB,MAAO,kGAC7C,CAAEyB,KAAM,OAAQioD,MAAO,GAAIxiC,KAAM,WAAOlnB,MAAO,mGAC/C,CAAEyB,KAAM,MAAOioD,MAAO,EAAGxiC,KAAM,UAAMlnB,MAAO,4FAC5C,CAAEyB,KAAM,MAAOioD,MAAO,EAAGxiC,KAAM,UAAMlnB,MAAO,4FAC5C,CAAEyB,KAAM,OAAQioD,MAAO,EAAGxiC,KAAM,UAAMlnB,MAAO,wGAC7C,CAAEyB,KAAM,QAASioD,MAAO,EAAGxiC,KAAM,UAAMlnB,MAAO,kGAC9C,CAAEyB,KAAM,MAAOylB,KAAM,qBAAOlnB,MAAO,kIAG3C84B,MAAO,CACHv3B,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,MAC1C1T,MAAO,CACHrK,WAAYhM,EAAMiM,WAAWD,YAEjC4kH,QAAS,CACLlsH,KAAM,MAGd2M,OAAQrR,EAAMyE,QAAQg2B,aAAappB,OACnCulB,QAAS,CACLpyB,gBAAiBxE,EAAMyE,QAAQ6H,WAAWyd,MAC1C8mG,cAAe,EACfx6G,MAAO,CACLjY,MAAO4B,EAAMyE,QAAQ0lB,KAAKiQ,UAGhC1D,OAAQ,CACJwF,UAAW,CACT99B,MAAOiW,YAAMrU,EAAMyE,QAAQ0lB,KAAKiQ,QAAS,IACzC+B,WAAY,WAEdC,eAAgB,CACdh+B,MAAO4B,EAAMyE,QAAQ0lB,KAAKiQ,SAE5BiC,gBAAiB,CACfj+B,MAAO4B,EAAMyE,QAAQ0lB,KAAK/T,WAGhC22F,WAAY,CACR+jB,cAAe,CACXC,aAAc/wH,EAAMyE,QAAQ0lB,KAAKiQ,QACjCp6B,MAAO,CACHq3E,KAAMr3E,EAAMyE,QAAQ6H,WAAWyd,SAI3CwQ,MAAK76B,YAAA,GACEq6B,GAEPX,MAAK15B,YAAA,CACDgF,KAAM,YACHq1B,GAEPvD,OAAQ,CAAC,CACL/oB,KAAM9C,EAAM8C,KAAKnK,KAAI,SAAAhG,GAAA,IAAGs+B,EAASt+B,EAATs+B,UAAWl3B,EAAIpH,EAAJoH,KAAMnF,EAAKjC,EAALiC,MAAK,MAAM,CAACgL,WAAS6wB,QAAQQ,GAAWL,UAAWM,EAAa,CAAEt8B,QAAOmF,SAAQ,IAE1HtE,KAAK,GAADZ,OAAKR,EAAOq6B,UAAUj5B,KAAI,OAAAZ,OAAMR,EAAOs6B,MAAMl5B,SAG7D,GAAG,CAACuK,EAAM8C,KAAMzO,EAAQgB,IAGxB,OAAK2K,EAAMkL,SAAiC,IAAtBlL,EAAM8C,KAAK7G,OAE7BnE,eAACkb,IAAa,CAAApgB,SAAA,CACVU,cAAC8f,IAAM,CACHrR,WAAS,EACTtF,QAhLc,WACtB+uD,GAAaV,EACjB,EA+KY,gBAAeA,EACf,aAAW,YACX72D,UAAW6B,EAAQypB,OACnBw1E,UAAWzhG,cAACkuF,IAAc,CAACvtF,UAAWsjB,kBAAKzhB,EAAQyuH,OAAMz8G,YAAA,GACpDhS,EAAQ0uH,WAAa15D,MACnBl4D,SACV,yCAGDU,cAACy3F,IAAQ,CAACrzE,GAAIozC,EAAUnzC,QAAQ,OAAOqzE,eAAa,EAAAp4F,SAChDU,cAAA,OAAKW,UAAW6B,EAAQm3B,aAAar6B,SAChCoN,EAAMkL,QACH5X,cAACgjD,IAAO,CAACriD,UAAW6B,EAAQoV,UAE5B5X,cAAC+yH,IAAe,CAEZC,gBAAiB,aACjBC,WAAY/6F,IACZj1B,QAASA,GAHJouH,UArByB,IA+B1D,E,kFEzPMxvH,EAAYC,aAAW,SAACC,GAAK,MAAM,CACrCkvH,OAAQ,CACJruG,UAAW,eACXuU,WAAYp1B,EAAMq1B,YAAYC,OAAO,YAAa,CAC9ChU,SAAUthB,EAAMq1B,YAAY/T,SAASy0E,YAG7Co5B,WAAY,CACRtuG,UAAW,kBAEfsiE,aAAc,CACV32E,MAAO,IACP6zF,WAAY,UAEhB8wB,WAAa,CACT,gBAAiB,CACbjlH,QAAQ,sBAEZ,4BAA6B,CACzBA,QAAQ,wBAKnB,IAEKklH,EAAe,CAAC,MAAO,SAAU,QAAS,QA0EjCC,GAvEuB,SAACnyH,GACnC,IACImwH,EAEAnwH,EAFAmwH,cACArwH,EACAE,EADAF,OAIEyB,EAAUX,IACVwxH,EAAcr+F,cACdvuB,EAAa,OAAN1F,QAAM,IAANA,OAAM,EAANA,EAAQ0F,KACf20B,EAAkB,OAANr6B,QAAM,IAANA,OAAM,EAANA,EAAQq6B,UACpBk4F,EAAgBH,EAAar/F,SAASrtB,GAC5CsL,EAAgC1J,oBAAUirH,GAActhH,EAAAnM,YAAAkM,EAAA,GAAjDylD,EAAQxlD,EAAA,GAAEkmD,EAAWlmD,EAAA,GAiBtBie,EAAkByF,YAAkB,CACtC5uB,SAAS,cACTlG,SAAS,aACTkF,OAAQsrH,EACR/0G,KAAM,CAAE5S,MAAO,YAAaqX,MAAO,QACnCjC,QAAQ,KAKZ,OACIra,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC0f,IAAa,CAAApgB,SACVU,cAAC8f,IAAM,CACHrR,WAAS,EACTtF,QA9BU,WACtB+uD,GAAaV,EACjB,EA6BgB,gBAAeA,EACf,aAAW,YACX72D,UAAW6B,EAAQypB,OACnBw1E,UAAWzhG,cAACkuF,IAAc,CAACvtF,UAAWsjB,kBAAKzhB,EAAQyuH,OAAMz8G,YAAA,GACpDhS,EAAQ0uH,WAAa15D,MACnBl4D,SACV,iDAILU,cAACy3F,IAAQ,CAACrzE,GAAIozC,EAAUnzC,QAAQ,OAAOqzE,eAAa,EAAAp4F,SAChDkF,eAACoxB,IAAmB,CAACt0B,MAAO2uB,EAAgB3wB,SAAA,CACxCkF,eAACwrC,IAAQ,CAACrvC,UAAW6B,EAAQ0wH,WAAW5zH,SAAA,CACpCU,cAAC23D,IAAa,CAAC92D,OAAO,QAAQo0B,UAAU,EAAOmG,UAAWA,IAC1Dp7B,cAAC43D,IAAc,CAAC/2D,OAAO,UAAUo0B,UAAU,EAAO/sB,cAAemrH,EAAYtjF,eAC7E/vC,cAACgvB,IAAS,CAACnuB,OAAO,YAAY4qB,QAAM,EAACxoB,QAASgyC,IAAiB/sC,cAAemrH,EAAYtjF,eAC1F/vC,cAACgvB,IAAS,CAACnuB,OAAO,eAAe4qB,QAAM,EAACxoB,QAASgyC,IAAiB/sC,cAAe1F,EAAQ0iF,kBAE7FllF,cAAC2sB,IAAU,WAM/B,EClGMzO,GAAsB,CACxBC,YAAY,EACZC,UAAU,EACVC,OAAO,EACPC,SAAS,EACTC,QAAQ,GAGN1c,GAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCw0B,KAAM,CACFjoB,QAAS,OACTsxC,IAAK,IAET59C,MAAO,CACHgmB,SAAU,GAEjB,GAAG,CAAE7lB,KAAM,yBAyFGoxH,GArFc,SAACtyH,GAC1B,IAAQ2H,EAA8D3H,EAA9D2H,KAAMY,EAAwDvI,EAAxDuI,QAASgqH,EAA+CvyH,EAA/CuyH,UAAWzyH,EAAoCE,EAApCF,OAAQH,EAA4BK,EAA5BL,SAAUgwC,EAAkB3vC,EAAlB2vC,cAC9CpuC,EAAUX,KACVX,EAAYC,cAEZuf,EAActO,uBAAY,SAAAtJ,GAC5BA,EAAMC,iBACV,GAAG,IAEGF,EAAcuJ,uBAAY,WAC5B5I,GACJ,GAAG,CAACA,IAEJuI,EAA0C1J,mBAAS,CAAC,GAAE2J,EAAAnM,YAAAkM,EAAA,GAA/Cq/G,EAAap/G,EAAA,GAAEyhH,EAAgBzhH,EAAA,GAEhC0hH,EAAgBthH,uBAAY,SAACmM,GAC/Bk1G,EAAgBhyH,wBAAC,CAAC,EAAG8c,GAAM,IAAE44C,MAAOp2D,EAAOkD,KAC/C,GAAG,CAACuvH,EAAWzyH,IAMf,OAJAiV,qBAAU,WACFpN,GAAM6qH,EAAgBhyH,wBAAC,CAAC,EAAImvC,GAAa,IAAEumB,MAAOp2D,EAAOkD,KACjE,GAAG,CAACuvH,EAAW5qH,IAGXpE,eAAC4a,IAAM,CACHxW,KAAMA,EACNY,QAASX,EACTM,QAASuX,EACTjS,WAAS,EACTqxB,SAAS,KACT,kBAAgB,gCAChB,mBAAiB,sCACjB6zF,OAAO,OAAMr0H,SAAA,CAEbU,cAACqf,IAAW,CAACpb,GAAG,gCAA+B3E,SAAE4B,EAAU,uCAC3DlB,cAACsf,IAAI,CACDsxB,cAAeA,EACfrxB,SAAUm0G,EACVtjH,aAAc8N,GACdsB,yBAAuB,EACvBrP,OAAQ,SAAAsP,GAAS,OACbjb,eAAA,QAAAlF,SAAA,CACIU,cAAA,WACAwE,eAACkb,IAAa,CAAApgB,SAAA,CACVU,cAAC2f,IAAiB,CAAArgB,SAAG4B,EAAU,sCAAuC,CAAEivB,IAAKpvB,EAAOkD,OACpFO,eAAA,OAAK7D,UAAW6B,EAAQ+zB,KAAKj3B,SAAA,CACzBU,cAACuxB,IAAa,CACV5wB,UAAW6B,EAAQR,MACnBnB,OAAO,gBACP8B,MAAM,IACNw+B,WAAY,CAAE5D,IAAKjxB,WAAS+zC,WAAW5gC,EAAUlB,OAAOif,eAAe4Q,MAAM,CAAEwlF,eAAe,OAElG5zH,cAACuxB,IAAa,CACV5wB,UAAW6B,EAAQR,MACnBnB,OAAO,gBACP8B,MAAM,eACNw+B,WAAY,CAAEjE,IAAK5wB,WAAS+zC,WAAW5gC,EAAUlB,OAAO8e,eAAe+Q,MAAM,CAAEwlF,eAAe,aAI1G5zH,cAACmxH,EAAyB,CACtBvwH,SAAUA,EACVG,OAAQA,EACRqwH,cAAeA,IAEnBpxH,cAACozH,GAA6B,CAC1BxyH,SAAUA,EACVG,OAAQA,EACRqwH,cAAeA,IAEnB5sH,eAACqb,IAAa,CAAAvgB,SAAA,CACVU,cAAC8f,IAAM,CAAC3W,QAASN,EAAYvJ,SACxB4B,EAAU,mBAAoB,CAAEM,EAAG,aAExCxB,cAAC8f,IAAM,CAAC3W,QAASsW,EAAUM,aAAc5f,MAAM,UAASb,SACnD4B,EAAU,oBAAqB,CAAEM,EAAG,mBAG1C,MAK3B,E,sFChH+Bob,aAAGC,MAAAC,aAAA,mqB,mCCe5B8zB,GAAgB,CAClBvT,cAAe/wB,WAAS29B,QAAQpD,MAAM,CAAEC,KAAM,IAAK+sF,QAAQ,OAAO5oF,WAClEzN,cAAelxB,WAAS29B,QAAQ6pF,MAAM,OAAO7oF,YAK3C4sB,GAAuB,SAAC52D,GAC1B,IAAQN,EAAyCM,EAAzCN,UAAWI,EAA8BE,EAA9BF,OAAQH,EAAsBK,EAAtBL,SAI3BmR,GAJ4CtS,YAAKwB,EAAKvB,IAI9B2I,oBAAS,IAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GAKd6hB,EAAazhB,uBAAY,SAAAtJ,IAZX,SAAAA,GAASA,EAAMC,iBAAkB,CAajDA,CAAgBD,GAChB+O,GAAQ,EACZ,GAAG,CAACA,IAEEhP,EAAcuJ,uBAAY,WAC5ByF,GAAQ,EACZ,GAAG,CAACA,IA6BJ,OACIrT,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAACkJ,KAAU,CAACG,KAAK,QAAQF,QAAS0qB,EAAYlzB,UAAWA,EAAUrB,SAC/DU,cAAC80D,KAAW,MAEhB90D,cAACuzH,GAAoB,CACjB3yH,SAAUA,EACVG,OAAQA,EACR6vC,cAAeA,GACfhoC,KAAMA,EACNY,QAASX,MAKzB,EAUekrH,IARyB,SAAA9yH,GAAU,IAADksB,EAAA6jG,EACvC3a,EAAqB,QAAflpF,EAAGlsB,EAAMF,cAAM,IAAAosB,GAAW,QAAX6jG,EAAZ7jG,EAAciO,iBAAS,IAAA41F,OAAX,EAAZA,EAAyB76D,YACxC,GAAImtB,YAAO+yB,GAAS,OAAO,KAG3B,MAFqB,KACev+E,KAAKu+E,GACfr2G,cAAC63D,GAAoBp2D,YAAA,GAAKR,IAAY,IACpE,C,mNC3FM+yH,EAAoBp3G,YAAGC,MAAAC,YAAA,kSAUvBH,K,kJCAAkT,EAAoB,SAAA5uB,GACtB,IAAA6K,EASI7K,EARA0B,aAAK,IAAAmJ,EAAG,wBAAuBA,EAE/BnL,GAMAM,EAPAuB,QAOAvB,EANAN,WAASsL,EAMThL,EALAkJ,YAAI,IAAA8B,EAAG7B,EAAW6B,EAClBlL,EAIAE,EAJAF,OACA+F,EAGA7F,EAHA6F,SAAQ6P,EAGR1V,EAFA2V,SAAUC,OAAU,IAAAF,GAAQA,EACzB7S,EAAIrE,YACPwB,EAAKvB,GAEHsvC,EAAWC,cACX93B,EAASC,cACTR,EAAWS,cACXC,EAAUC,cACVrW,EAAYC,cAElB4Q,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GACpBkP,EAA8B7Y,oBAAS,GAAM8Y,EAAAtb,YAAAqb,EAAA,GAAtCtJ,EAAOuJ,EAAA,GAAEsyB,EAAUtyB,EAAA,GAC1BhZ,EAA8BC,IAAMC,SAAS,IAAGC,EAAAzC,YAAAsC,EAAA,GAAzCqmB,EAAOlmB,EAAA,GAAE6kH,EAAU7kH,EAAA,GAEpBoY,GAActO,uBAAY,SAAAtJ,GAC5BA,EAAMC,iBACV,GAAG,IAEG8qB,GAAazhB,uBAAY,SAAAtJ,GAC3B+O,GAAQ,GACR/O,EAAMC,iBACV,GAAG,CAAC8O,IAEEhP,GAAcuJ,uBAAY,SAACtJ,EAAOs9C,GACpCvuC,GAAQ,GACR/O,EAAMC,iBACV,GAAG,CAAC8O,IAEEwvB,GAAej1B,uBAAY,SAAAtJ,GAC7BqkH,EAAWrkH,EAAMwB,OAAOhJ,MAC5B,GAAG,CAAC6rH,IAEE8G,GAAyB7hH,uBAAY,SAAAtJ,GACvCA,EAAMC,kBACN0qC,GAAW,GACXzE,EAAS4E,eDxCF,SAAAv0C,GAAsB,IAAnB4E,EAAE5E,EAAF4E,GAAIuqB,EAAOnvB,EAAPmvB,QAClB,OAAOukB,IAAcz5B,QAAQ06G,EAAmB,CAC5C1kF,MAAO,CACHrrC,MAEJjC,MAAO,CACHwsB,aAEL0kB,MAAMC,IACZ,CCiCO+gF,CAAiB,CACbjwH,GAAIlD,EAAOkD,GACXuqB,YAECphB,MAAK,WACF+J,EAAO,+BAAgC,OAAQ,CAAEc,YAAa,IAG3DpB,GACCD,EAASC,EAAY/P,GAGzBwQ,IACAO,GAAQ,EACZ,IACCq7B,OAAM,SAAC7uC,GACJ8S,EACqB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BACrD,UAER,IACCuhC,SAAQ,WACLN,GAAW,GACXzE,EAASgF,cACb,GACR,GAAG,CAACjzC,EAAQytB,IAEZ,OAAKztB,EAGDyD,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIU,cAACstH,IAAQ7rH,wBAAA,CACL0H,QAAS0qB,GACT1b,SAAUpX,EAAOukF,IACjB3iF,MAAOA,EACPhC,UAAWkE,IACP,wBACAlE,IAGAmD,GAAI,IAAAxE,SAEP6K,IAHG,UAKR3F,eAAC4a,IAAM,CACHxW,KAAMA,EACNY,QAASX,GACTM,QAASuX,GACT,kBAAgB,qBAAoBphB,SAAA,CAEpCU,cAACqf,IAAW,CAACpb,GAAG,qBAAoB3E,SAAE4B,EAAU,gCAChDsD,eAACkb,IAAa,CAAApgB,SAAA,CACVU,cAAC2f,IAAiB,CAAArgB,SAAE4B,EAAU,mCAC9BlB,cAACyE,IAAS,CACN4vC,WAAS,EACTxxC,OAAO,QACPoB,GAAG,UACHtB,MAAOzB,EAAU,kCACjBI,MAAOktB,EACPzrB,SAAUskC,GACV54B,WAAS,OAejBjK,eAACqb,IAAa,CAAAvgB,SAAA,CACVU,cAAC8f,IAAM,CAAC3W,QAASN,GAAa1I,MAAM,UAAUgY,SAAUP,EAAQtY,SAC3D4B,EAAU,sBAEflB,cAAC8f,IAAM,CAAC3W,QAAS8qH,GAAwB9zH,MAAM,UAAUgY,SAAUP,EAAS1X,QAAQ,YAAYsc,kBAAgB,EAAAld,SAC3G4B,EAAU,oCArDX,IA2DxB,EAOMkJ,EAAcpK,cAACgtH,IAAW,IAEjBmH,IAPsB,SAAAlzH,GAAU,IAADksB,EAE1C,OAAwB,KADQ,QAAfA,EAAGlsB,EAAMF,cAAM,IAAAosB,OAAA,EAAZA,EAAco4D,aACD,KAAOvlF,cAAC6vB,EAAiBpuB,YAAA,GAAKR,GACnE,C,oKCjJMwwG,EAAQ,CAAC,QAAS,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAiB3D,IAAM99C,EAAgB9mD,gBAAK,SAAAxN,GAAmF,IAAhFsB,EAAStB,EAATsB,UAAqC89C,GAAFp/C,EAAxBmD,QAAmCnD,EAATo/C,WAAW59C,EAAMxB,EAANwB,OAAQE,EAAM1B,EAAN0B,OAAWE,EAAKxB,YAAAJ,EAAAK,GACnGwB,EAAYC,cAClB,IAAKJ,EAAQ,OAAO,KACpB,IAAMO,EAAQD,IAAIN,EAAQF,GACpBwI,EAnBV,SAAmB+6C,GAIf,IAFA,IAAIgwE,EAAI,EAAG3pF,EAAI80C,SAASn7B,EAAG,KAAO,EAE3B3Z,GAAK,QAAU2pF,GAClB3pF,GAAQ,KAGZ,MAAO,CACHikB,MAAOjkB,EAAE4pF,QAAQ5pF,EAAI,IAAM2pF,EAAI,EAAI,EAAI,GACvCprC,KAAMyoB,EAAM2iB,GAEpB,CAOiBE,CAAUhzH,GACjBizH,EAAajzH,EAAK,GAAAC,OACf8H,EAAKqlD,MAAK,QAAAntD,OAAIL,EAAU,YAADK,OAAa8H,EAAK2/E,MAAQ,CAAExnF,EAAG6H,EAAK2/E,QAC9DvqC,EAEN,OACIz+C,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,YAAuBT,IAAM,IAAA3B,SAEhCi1H,IAGb,IAEA5gE,EAAchyD,aAAe,CACzBC,UAAU,GAKC+xD,K,uMCtBTmrD,EAAgB,SAAC79G,GACnB,IAAQJ,EAAoDI,EAApDJ,OAAQD,EAA4CK,EAA5CL,SAAU69C,EAAkCx9C,EAAlCw9C,UAAW99C,EAAuBM,EAAvBN,UAAcmD,EAAIrE,YAAKwB,EAAKvB,GAC3DqB,EAASurC,YAAiBrrC,GAC1BK,EAAQD,IAAIN,EAAQF,GACpB2B,EAAUX,IACVE,EAvBa,WACnB,IAAMA,EAAQ4P,cACRiX,EAAsC,UAAvB7mB,EAAMyE,QAAQC,KAAmBme,QAAQF,OAa9D,OAZoB1e,mBAAQ,kBAAAvE,wBAAC,CAAD,EACrBmnB,GAAY,IAEfoF,KAAMjsB,EAAMyE,QAAQ21B,QAAQhmB,KAC5B9H,WAAY,cACZN,WAAYhM,EAAMiM,WAAWD,WAC7BmwB,WAAYn8B,EAAMiM,WAAWwmH,kBAC7BtoG,KAAM,6BACNuoG,cAAe1yH,EAAMyE,QAAQ0lB,KAAKC,UAClC+Z,YAAankC,EAAMyE,QAAQ0lB,KAAKC,WAAS,GACzC,CAACpqB,GAGT,CAOkB2yH,GAEd,OAAa,MAATpzH,EACOm9C,EACHz+C,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,YAAuBoC,IAAK,IAAAxE,SAE/Bm/C,KAEL,KAIJz+C,cAAC20H,IAAM,CACH1wH,GAAE,GAAA1C,OAAKX,EAAQ,KAAAW,OAAIV,EAAM,KAAAU,OAAIR,EAAOkD,IACpCtD,UAAW6B,EAAQ8D,KACnBvE,MAAOA,EAEPT,MAAOA,EACPihC,UAAQ,GAGpB,EAEAu8E,EAAcn9G,aAAe,CACzBC,UAAU,EACV6M,WAAW,GAGf,IAAM5M,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFmE,SAAU1I,EAAMiM,WAAWvD,UAElC,GAAG,CAAEtI,KAAM,oBAGG28G,K,6IClETjwF,EAAmBhiB,gBAAK,SAAAxN,GAAYA,EAATsB,UAAkD,IAAzCG,EAAAzB,EAAE0B,cAAM,IAAAD,EAAG,CAAC,EAACA,EAC7CI,GADwD7B,EAATo/C,UAAkBh/C,YAAAJ,EAAAK,GACrDyB,eAGlB,OAFeJ,EAAO+/C,OAGhB9gD,cAACgmF,IAAuB,CAAC9D,YAAahhF,EAAU,oCAAqC,CAAEM,EAAG,SAAWrB,MAAM,UAC3GH,cAACimF,IAAiB,CAAC/D,YAAahhF,EAAU,qCAAsC,CAAEM,EAAG,UAAYrB,MAAM,YAEjH,IAEA0uB,EAAiB5M,YAAc,mBAE/B4M,EAAiBltB,aAAe,CAC5BC,UAAU,GAGCitB,K,6IChBTC,EAAgBjiB,gBAAK,SAAAxN,GAAYA,EAATsB,UAAiBtB,EAANwB,OAA+C,IAAzCC,EAAAzB,EAAE0B,cAAM,IAAAD,EAAG,CAAC,EAACA,EAClDI,GAD6D7B,EAATo/C,UAAkBh/C,YAAAJ,EAAAK,GAC1DyB,eACZmkF,EAAMvkF,EAAOukF,IAGnB,OAFoBvkF,EAAOwkF,YAGrBD,EACItlF,cAACgtH,IAAW,CAAC9qC,YAAahhF,EAAU,iCAAkC,CAAEM,EAAG,SAAWrB,MAAM,YAC5FH,cAACgtH,IAAW,CAAC9qC,YAAahhF,EAAU,kCAAmC,CAAEM,EAAG,UAAYrB,MAAM,aAClGH,cAAC40H,IAAc,CAAC1yC,YAAahhF,EAAU,iCAAkC,CAAEM,EAAG,SAAWrB,MAAM,YAEzG,IAEA2uB,EAAc7M,YAAc,gBAE5B6M,EAAcntB,aAAe,CACzBC,UAAU,GAGCktB,K,oKCfA1R,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,yGAGd,ECEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,0EAGd,ECEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,uFAGd,ECEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,yFAGd,E,mBCDau3G,EAAkB,SAACC,GAC5B,OAAQA,GACJ,KAAK,EAAG,OAAO90H,cAAC+0H,IAAY,IAC5B,KAAK,EAAG,OAAO/0H,cAACg1H,EAAe,IAC/B,KAAK,EAAG,OAAOh1H,cAACi1H,EAAkB,IAClC,KAAK,EAAG,OAAOj1H,cAACk1H,EAAgB,IAChC,KAAK,EAAG,OAAOl1H,cAACm1H,EAAoB,IACpC,QAAS,OAAO,KAExB,EAgCa9nG,EAAiB,SAACynG,GAC3B,OAAQA,GACJ,KAAK,EACL,KAAK,EAIL,QAAS,MAAO,MAHhB,KAAK,EAAG,MAAO,SACf,KAAK,EAAG,MAAO,OACf,KAAK,EAAG,MAAO,WAGvB,C,qYC7CMjzH,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCqzH,eAAgB,SAACn0H,GACb,IAAQF,EAAWE,EAAXF,OAER,GAAKA,EAAL,CAEA,IAAMusB,EAAWvsB,EAAOusB,SAClBwzB,EAAS//C,EAAO+/C,OAChBouC,GAASnuF,EAAOukF,KAAOvkF,EAAOwkF,YAC9Bn4D,EAAmBC,YAAeC,GACxC,GAAKF,IAAsB0zB,GAAUouC,GAErC,MAA+B,UAAvBntF,EAAMyE,QAAQC,KAAoB,CACtCF,gBAAiBxE,EAAMyE,QAAQ4mB,GAAkBxI,MACjD,4BAA6B,CACzBre,gBAAiB8uH,iBAAOtzH,EAAMyE,QAAQ4mB,GAAkBxI,MAAO7iB,EAAMyE,QAAQyK,OAAOqkH,mBAExF,CACA/uH,gBAAiBxE,EAAMyE,QAAQ4mB,GAAkB1I,KACjD,4BAA6B,CACzBne,gBAAiBgvH,kBAAQxzH,EAAMyE,QAAQ4mB,GAAkB1I,KAAM3iB,EAAMyE,QAAQyK,OAAOqkH,kBAhBzE,CAmBvB,EACH,GAAG,CAAEnzH,KAAM,gBAgBNqzH,EAAuBptH,IAAMwB,YAAW,SAAC3I,EAAO4I,GAClD,IACI/C,EAeA7F,EAfA6F,SACAxH,EAcA2B,EAdA3B,SAEAqB,GAYAM,EAbAuB,QAaAvB,EAZAN,WAEAiuD,GAUA3tD,EAXAgwH,OAWAhwH,EAVA2tD,gBACA19C,EASAjQ,EATAiQ,MACAjN,EAQAhD,EARAgD,GACA+oB,EAOA/rB,EAPA+rB,aACAjsB,EAMAE,EANAF,OACA0yD,EAKAxyD,EALAwyD,SACA91C,EAIA1c,EAJA0c,SACAvF,EAGAnX,EAHAmX,MACAq9G,EAEAx0H,EAFAw0H,WACG3xH,EAAIrE,YACPwB,EAAKvB,GAEH8C,EAAUX,EAAU,CAAEd,WACtBH,EAAWuE,YAAmBlE,GAC9B+e,EAAUC,cAGVy1G,EAAwBtjH,uBAC1B,SAAAtJ,GACS2sH,IACLzoG,EAAa/oB,EAAI6E,GACjBA,EAAMC,kBACV,GACA,CAAC9E,EAAI+oB,EAAcyoG,IAEjB/0G,EAActO,sBAAW,eAAA/S,EAAAka,YAAAC,cAAAC,MAC3B,SAAAC,EAAM5Q,GAAK,IAAA6sH,EAAA,OAAAn8G,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,UACFw5C,EAAS,CAAD15C,EAAAE,KAAA,eAAAF,EAAAM,OAAA,iBACG,GAAhBvR,EAAMqnH,UAGkB,oBAAb18D,EAAuB,CAAA15C,EAAAE,KAAA,eAAAF,EAAAE,KAAA,EAClBw5C,EAASxvD,EAAI6C,GAAQ,IAAAvF,OAAQX,GAAYG,GAAO,OAAAgZ,EAAAqlD,GAAArlD,EAAAI,KAAAJ,EAAAE,KAAA,gBAAAF,EAAAqlD,GACtD3L,EAAS,KAAD,GAHZkiE,EAAM57G,EAAAqlD,GAAArlD,EAAA67G,GAIJD,EAAM57G,EAAAE,KACL,SADKF,EAAA67G,GACC,GAGN,SAHM77G,EAAA67G,GAGA,GAKN,oBALM77G,EAAA67G,GAKW,oBAPyC,OAA3D51G,EAAQe,KAAKxW,YAAazD,GAAQ,IAAAvF,OAAQX,GAAYqD,IAAK8V,EAAAM,OAAA,kBAKzD,OAFF2F,EAAQe,KACJxW,YAAazD,GAAQ,IAAAvF,OAAQX,GAAYqD,EAAI,SAC/C8V,EAAAM,OAAA,kBAG2B,OAA7Bq7G,EAAsB5sH,GAAOiR,EAAAM,OAAA,kBAGI,OAA7Bs7G,GAAQ31G,EAAQe,KAAK40G,GAAQ57G,EAAAM,OAAA,mCAAAN,EAAAO,OAAA,GAAAZ,EAAA,KAG5C,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EAzB0B,GA0B3B,CACIhE,EACAkZ,EACA01G,EACAzxH,EACAlD,EACAH,EACA6yD,IAIR,OACIzzD,cAACm+C,IAAqB,CAAC78C,MAAOP,EAAOzB,SACjCkF,eAACqxH,IAAQp0H,wBAAA,CACLoI,IAAKA,EACLlJ,UAAWA,EACX6B,QAAS,CAAE8D,KAAM9D,EAAQ4yH,gBAEzBh9G,MAAOA,EACPlH,MAAOA,EACP/H,QAASuX,GACL5c,GAAI,IAAAxE,SAAA,CAEPsvD,GACG5uD,cAAC81H,IAAS,CAAC7nH,QAAQ,WAAU3O,SACxBm2H,GACGz1H,cAAC2nF,IAAQ,CACLxnF,MAAM,UACNQ,UAAS,eAAAY,OAAiBiB,EAAQykF,UAClCQ,QAAS9pE,EACTxU,QAASusH,MAKxBttH,IAAMK,SAASpD,IAAI/F,GAAU,SAACmK,EAAOiU,GAAK,OACvChU,yBAAeD,GACXzJ,cAAC+1H,IAAY,CAGTp1H,UAAWkE,IAAW,UAADtD,OACNkI,EAAMxI,MAAOJ,QACxB2B,EAAQwzH,SAEZj1H,OAAQA,EACF0I,QAAO3C,WAAUlG,YAAQ,GAAAW,OAPvB0C,EAAE,KAAA1C,OAAKkI,EAAMxI,MAAOJ,QAAU6c,IAS1C,IAAI,OA9BPzZ,IAmCrB,IAEAuxH,EAAqB7zH,aAAe,CAChCitD,gBAAgB,EAChB19C,OAAO,EACPyM,UAAU,EACV83G,YAAY,GAGhB,IAAMQ,EAAwB,SAACh1H,GAC3B,OAAQjB,cAACk2H,IAAYz0H,wBAAA,GAAKR,GAAK,IAAEuqC,IAAKxrC,cAACw1H,EAAoB,MAC/D,EAMev/F,IAJW,SAACh1B,GACvB,OAAQjB,cAACgwC,IAAQvuC,wBAAA,GAAKR,GAAK,IAAEstB,KAAMvuB,cAACi2H,EAAqB,MAC7D,C,+FC3JaE,EAAa,SAAChjH,GAAK,OAAKpN,QAAQyiC,MAAMC,QAAQt1B,IAAUA,EAAMxK,OAAS,EAAE,EA+ChF4gB,EAAc,IA5CHvQ,aACf,SAAAo9G,IAAe,IAAD5wG,EAAA,KAAAtM,YAAA,KAAAk9G,GAEZ,IAAMC,EAAgBC,YAAoB,CACxC9oH,IAAK,CAAC,SAAU,UAAW,UAAW,SAAU,SAAU,SAAU,SAAU,aAG1E+oH,EAAkB,IAAIC,IAAQ,GAAI,CACtCH,kBAGFh9G,KAAK+jC,OAAS,SAACyqD,GACb,IAAIsuB,EAAWtuB,EAAQ10F,OAQrB,MADAojH,EAAgBn5E,OAAO,IACjB/vC,MAAM,6BAPZ,IAAMopH,EAjCkB,SAAUtjH,GACxC,GAAKgjH,EAAWhjH,GAUhB,OAToBA,EAAMlI,QAAO,SAACC,EAAKinE,GACrC,IAAMukD,EAAUj1H,wBAAA,GACX0wE,GAAI,IACPjrE,OAAQshC,MAAMC,QAAQ0pC,EAAKjrE,SAAWirE,EAAKjrE,OAAOyB,OAAS,EAAIwpE,EAAKjrE,OAAS,OAG/E,MAAM,GAAN3F,OAAA6J,YAAWF,GAAG,CAAEwrH,GAClB,GAAG,GAML,CAkBmCC,CAAiB9uB,EAAQ10F,OACpDojH,EAAgBn5E,OAAO,IACvBm5E,EAAgBn5E,OAAOq5E,GACvBjxG,EAAK1d,KAAO+/F,EAAQ//F,KACpB0d,EAAKrS,MAAQsjH,CAMjB,EAEAp9G,KAAKsQ,IAAM,SAAC1Y,EAAQonG,EAAS5uG,EAAO4iB,GAClC,OAAOA,EAAYkqG,EAAgB5sG,IAAI1Y,EAAQonG,EAAS5uG,IAAU8sH,EAAgB5sG,IAAI,UAAW0C,GAAakqG,EAAgB5sG,IAAI1Y,EAAQonG,EAAS5uG,EACrJ,EAEA4P,KAAKu9G,cAAgB,SAAC3lH,EAAQonG,GAI5B,OAFcke,EAAgBM,SAAS5lH,EAAQonG,GAElCvyG,QAAO,SAAAqsE,GAAI,OAAKA,EAAKsQ,UAAYtQ,EAAKmmC,UAAU,IAAErtG,QAAO,SAACsT,EAAQ4zD,GAAI,OAAKxkE,OAAOD,KAAKykE,EAAKmmC,YAAYrtG,QAAO,SAAC/D,EAAQ4vH,GACnI,IAAMx1H,EAAQ6wE,EAAKmmC,WAAWwe,GAI9B,OAFA/oF,IAAI7mC,EAAQ4vH,EAAWx1H,GAEhB4F,CACT,GAAGqX,EAAO,GAAE,CAAC,EACf,CACF,KAOagL,K,qEC/DAnM,IARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,uMAGd,C,yGCJMopB,EAAe,CACjBl3B,KAAM,KACNoI,SAAS,EACToT,QAAQ,EACR3mB,MAAO,MAGL0yH,EAAiB,CACnBtiH,SAAS,GAGPhS,EAAS,SAAC+M,GACZ,IAAAwnH,EAA6CxnH,EAArC2gB,IAAOvvB,EAAQo2H,EAARp2H,SAAUuvB,EAAG6mG,EAAH7mG,IAAUzM,EAAKjkB,YAAK+P,EAAI9P,GAQjD,OAPY+B,YAAA,CACRwC,GAAG,YAAD1C,OAAcX,EAAQ,KAAAW,OAAI4uB,GAC5B8mG,WAAY,UACZppG,QAASjtB,EACT0lF,YAAan2D,GACVzM,EAGX,EAoEe+yC,IAjEY,WAA0C,IAAzC3jB,EAAIhoC,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,CAAC,EAAG7H,EAAO6H,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAGisH,EACvC5/G,EAASC,cACT8S,EAAU2M,cAChB9kB,EAA0B1J,mBAASq+B,GAAa10B,EAAAnM,YAAAkM,EAAA,GAAzCrF,EAAKsF,EAAA,GAAE4T,EAAQ5T,EAAA,GAGdlM,EAAWgtC,EAAXhtC,OACA2O,EAAYxR,EAAZwR,QACFupE,EAAmB52E,KAAKC,UAAU,CAACvB,EAAQ2O,EAASyV,IACpD+vE,EAAmB7yF,KAAKC,UAAU,CAACvB,EAAQ2O,IAEjDuB,qBAAU,WACDvB,GACLmR,EAAS8gB,EACb,GAAG,CAACuzD,EAAkBr0E,IAEtB,IAAMg/D,EAASxyE,uBAAY,SAAC6H,GAAU,IAAD4qE,EAAAC,EAC3Bt1E,GAAW,OAAJyK,QAAI,IAAJA,GAAU,QAAN4qE,EAAJ5qE,EAAMzK,YAAI,IAAAq1E,GAAM,QAANC,EAAVD,EAAYr1E,YAAI,IAAAs1E,OAAZ,EAAJA,EAAkBt1E,OAAQ,GAEvCoW,GAAS,SAAA5L,GACL,OAAAvY,wBAAA,GACOuY,GAAI,IACPxK,KAAMA,EAAKnK,IAAI5C,GACfmV,SAAS,EACToT,QAAQ,GAEhB,GAEJ,GAAG,CAACpF,IAEE68C,EAAUrwD,uBAAY,SAAC/N,GACzB8S,EACqB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BACrD,WAGJoT,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GACNuY,GAAI,IACP3V,QACAuT,SAAS,EACToT,QAAQ,GAAK,GAGrB,GAAG,CAACpF,EAAUzO,IAERurD,EAAatwD,uBAAY,WAAQ,GAAG,IAgB1C,OAdA4D,qBAAU,WACN,GAAKvB,EAAL,CAEAmR,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GAAUuY,GAAI,IAAEpC,SAAS,EAAMoT,QAAQ,GAAK,IAEzD,IAAM5a,EAAewyD,YAAU,CAAE98D,UAAU8+E,EAAQniB,EAASC,GAE5D,OAAO,WACH98C,GAAS,SAAA5L,GAAI,OAAAvY,wBAAA,GAAUuY,GAAI,IAAEpC,SAAS,EAAOoT,QAAQ,GAAK,IAC1C,OAAZ5a,QAAY,IAAZA,KAAcuyD,aAAavyD,EAAauyD,aAChD,CAToB,CAWxB,GAAG,CAACqb,EAAkBp4D,IAEflZ,CAEX,C,kCC5FA,kCAAO,IAAM1E,EAAwB,WAAH,OAAS,CAAK,C,mRCO1CnG,EAAYC,YAAW,CACzB,qBAAsB,CAClB,MAAO,CACH4oB,QAAS,KAGjBvgB,KAAM,CACF2gB,WAAY,EACZuD,YAAa,EACb9nB,gBAAiB,eAErB2wH,MAAO,CACH/nC,cAAe,WACfC,kBAAmB,KACnBC,wBAAyB,SACzBC,wBAAyB,YAE7B6nC,cAAe,CACX5nC,mBAAoB,aAItB1rD,EAAY,CACdC,MAAO9jC,cAAC+jC,IAAS,CAACt5B,SAAS,UAC3B2sH,OAAQp3H,cAACukC,IAAU,CAAC95B,SAAS,WAoClB4sH,EAjCY,SAAHh4H,GAA8B,IAADi4H,EAAAC,EAAAC,EAAAC,EAAvB12H,EAAM1B,EAAN0B,OAAWE,EAAKxB,YAAAJ,EAAAK,GAEtCyK,EAAO05B,EAAU9iC,EAAO0F,OAAS,KAE/BixH,GAAqD,KAAnB,QAAZJ,EAAAv2H,EAAOkuF,aAAK,IAAAqoC,GAAO,QAAPC,EAAZD,EAAc7hB,aAAK,IAAA8hB,OAAP,EAAZA,EAAqBj2H,OAC3Cq2H,IAAmBl/D,kBAAQ13D,EAAOkuF,OAAS,CAAC,KAAyC,KAAjB,QAAZuoC,EAAAz2H,EAAOkuF,aAAK,IAAAuoC,GAAK,QAALC,EAAZD,EAAc9hB,WAAG,IAAA+hB,OAAL,EAAZA,EAAmBn2H,OAE3EkB,EAAUX,IAEVlB,EAAY,CAAC6B,EAAQ2H,MACvBhK,OAAQ4K,EACZ,OAAQhK,EAAO0F,MACX,IAAK,SACDtG,EAAQqkC,IAAM,KACd,MACJ,IAAK,QACDrkC,EAASu3H,IAAwBC,EAAoB19F,IAAI,KAAO+J,IAAK,KAChE2zF,IACDh3H,EAAUogB,KAAKve,EAAQ00H,OACvBv2H,EAAUogB,KAAKve,EAAQ20H,gBAKnC,OAAKhtH,EAEE/D,uBAAa+D,EAAI1I,wBAAA,GACjBR,GAAK,IACRN,UAAWA,EAAU2K,KAAK,KAC1B8M,MAAO,CAAEjY,YALK,IAOtB,E,iEC3CM0B,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF2hB,UAAW,GAEf1P,QAAS,CACL6P,WAAYrmB,EAAMG,QAAQ,GAC1B+9B,SAAU,OACVzuB,OAAQ,IACRjD,MAAO,IACPN,QAAS,GAGhB,IAEK2pH,EAA+B,SAAHv4H,GAK3B,IAJHw4H,EAAax4H,EAAbw4H,cACAh6G,EAAQxe,EAARwe,SACSyN,EAAejsB,EAAxBmD,QACGvB,EAAKxB,YAAAJ,EAAAK,GAEF8C,EAAUX,EAAU,CAAEW,QAAS8oB,IAC/BpqB,EAAYC,cACZ8uB,EAAkB2V,YAAkB3kC,GAGtC0c,EAKAsS,EALAtS,SACAgoB,EAIA1V,EAJA0V,KACAipD,EAGA3+D,EAHA2+D,QACAvmD,EAEApY,EAFAoY,QACAxC,EACA5V,EADA4V,aAGJ9zB,EAA4B1J,mBAAS,IAAG2J,EAAAnM,YAAAkM,EAAA,GAAjC+lH,EAAM9lH,EAAA,GAAE+lH,EAAS/lH,EAAA,GAElBqkD,EAASrwD,mBAAQ,WACnB,OAAIyyD,kBAAQ9yB,GAAgB,GACrBh4B,OAAO4Q,OAAOonB,GAAM7/B,QAAO,SAAAkyH,GAAE,IAAAC,EAAA,MAAe,SAAXD,EAAGvxH,OAA8B,QAAfwxH,EAAID,EAAGp3H,gBAAQ,IAAAq3H,OAAA,EAAXA,EAAah0H,GAAE,IAAEi0H,SAAQ,SAAAF,GAAE,MAAI,CACzF,CAAE7nG,IAAK,QAASvvB,SAAUo3H,EAAGp3H,SAASqD,IACtC,CAAEksB,IAAK,MAAOvvB,SAAUo3H,EAAGp3H,SAASqD,IACvC,GACL,GAAG,CAAC0hC,IAEIn2B,EAASinD,YAAmB,CAChC3wD,OAAQ,CAAEuwD,WACX,CAAE5hD,QAAS4hD,EAAO1tD,OAAS,IAFtB6G,KAIRwG,qBAAU,YACE,OAAJxG,QAAI,IAAJA,OAAI,EAAJA,EAAM7G,QAAS,GACfovH,GAAU,SAACrhE,GAAS,OAAK1hD,kBAAQxF,EAAMknD,EAAW,KAAK,GAE/D,GAAG,CAAClnD,IAEJwG,oBAASuD,YAAAC,cAAAC,MAAC,SAAAC,IAAA,OAAAF,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,QACDw+C,kBAAQ9yB,IAASmyF,EAAOnvH,OAAS,GAClCimF,EAAQnpF,gBAAMkI,OAAO4Q,OAAOonB,GAAMtgC,KAAI,SAAA2yH,GAClC,GAAe,SAAXA,EAAGvxH,KAAiB,CACpB,IAAM0xH,EAAiBL,EAAOhyH,QAAO,SAAAkyE,GAAC,IAAAogD,EAAA,OAAIpgD,EAAEnqD,UAAsB,QAAfuqG,EAAIJ,EAAGp3H,gBAAQ,IAAAw3H,OAAA,EAAXA,EAAan0H,GAAI,IACxE,OAAOk0H,EAAexvH,OAAS,EAAClH,wBAAA,GACzBu2H,GAAE,IACL/oC,MAAOxpF,gBAAM0yH,EAAgB,iBAC7BH,CACR,CACI,OAAOA,CAEf,IAAI,OACP,wBAAAj+G,EAAAO,OAAA,GAAAZ,EAAA,KACF,CAACo+G,IAGJ9hH,oBAASuD,YAAAC,cAAAC,MAAC,SAAAioD,IAAA,IAAA22D,EAAA7yF,EAAA8yF,EAAA,OAAA9+G,cAAAM,MAAA,SAAA6nD,GAAA,cAAAA,EAAA3nD,KAAA2nD,EAAA1nD,MAAA,QACM,OAAR0D,QAAQ,IAARA,OAAQ,EAARA,EAAUhV,QAAS,IACb68B,EAAgB7nB,EAAStY,KAAI,SAAApB,GAAE,OAAIokC,EAAQpkC,EAAG,IAIvB,UAAV,QAFbq0H,EAAkB9yF,EAAc,UAEnB,IAAf8yF,OAAe,EAAfA,EAAiB7xH,OAAkC,OAAf6xH,QAAe,IAAfA,GAAyB,QAAVD,EAAfC,EAAiB13H,gBAAQ,IAAAy3H,GAAzBA,EAA2Bp0H,IAC/D4zH,GAAiBA,EAAc,CAC3BhqG,QAASyqG,EAAgB13H,SAASqD,KAI1C4Z,GAAYA,EAAS2nB,IACxB,wBAAAm8B,EAAArnD,OAAA,GAAAonD,EAAA,KACF,CAACr5B,EAAS1qB,IAOb,OACI3d,cAACgmC,IAAmB,CAAC1kC,MAAO2uB,EAAgB3wB,SACxCkF,eAACiqB,IAAI,CAAC9tB,UAAW6B,EAAQ8D,KAAKhH,SAAA,CAC1BU,cAAC2uB,IAAW,CAAArvB,SACRU,cAACyE,IAAS,CACNgK,WAAS,EACTw3B,aAAW,EACXljC,SAXC,SAAC+F,GAClB+8B,EAAa/8B,EAAMwB,OAAOhJ,MAC9B,EAUoB4kC,YAAahlC,EAAU,oBACvBhB,QAAQ,SACRmJ,KAAK,QACLi5B,WAAY,CACRM,aACI5iC,cAAC6iC,IAAc,CAAC/0B,SAAS,MAAKxO,SAC1BU,cAACmmC,IAAU,CAAChmC,MAAM,oBAMtCH,cAAC2uB,IAAW,CAAChuB,UAAW6B,EAAQ+V,QAAQjZ,SACpCU,cAAComC,IAAa,UAKlC,EAEM6G,EAAsB,SAAHvP,GAAA,IAAM98B,EAAQ88B,EAAR98B,SAAaK,EAAKxB,YAAAi+B,EAAAjsB,GAAA,OAC7CzR,cAACwsB,IAAuB,CAAClrB,MAAOV,EAAStB,SACrCU,cAAC43H,EAA4Bn2H,YAAA,GAAKR,KACZ,EAG9BgsC,EAAoBtrC,aAAe,CAC/BwI,KAAMktH,EACNvxH,OAAQ,CAAC,EACTy8B,UAAU,GAGC0K,K,mCCxJf,WAEMu3D,EAAuB5iF,wBAAc,CACvC3L,QAAS,KACTR,QAAS,KACTM,QAAS,OAGbyuF,EAAqBviF,YAAc,uBAEpBuiF,K,mCCVf,WAEM1rF,EAAe8I,wBAAc,CAC/B6hE,OAAQ,KACRz4D,OAAQ,KACRpT,QAAS,KACTvT,MAAO,KACP6lB,QAAS,KACTg6D,UAAW,KACXS,eAAgB,KAChBS,UAAW,KACXC,SAAU,KACVG,eAAgB,OAGpB1sE,EAAamJ,YAAc,eAEZnJ,K,yLCRT87E,EAAgB/nF,gBAAK,SAAA5L,GACvB,IAAQN,EAAwDM,EAAxDN,UAAW89C,EAA6Cx9C,EAA7Cw9C,UAAW59C,EAAkCI,EAAlCJ,OAAQg0F,EAA0B5zF,EAA1B4zF,aAAiB/wF,EAAIrE,YAAKwB,EAAKvB,GAC/DwB,EAAYC,cACZJ,EAASurC,YAAiBrrC,GAC1BK,EAAQD,IAAIN,EAAQF,GACpBswC,EAAMm3E,YAAgBhnH,GAG5B,OAAa,MAATA,EAEItB,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,YAAuBoC,IAAK,IAAAxE,SAE/Bm/C,KAMTz+C,cAACK,IAAIoB,wBAAA,CACDd,UAAWA,EACXk1C,KAAM1E,EACNjxC,QAAQ,QACRoK,OAAO,UACH5I,YAAuBoC,IAAK,IAAAxE,SAE/Bu1F,EAAe3zF,EAAU2zF,EAAc,CAAErzF,EAAGqzF,IAAkBvzF,IAG3E,IAEAszF,EAAcjzF,aAAe,CACzBC,UAAU,GAKCgzF,K,qECtCAx3E,IARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,0KAGd,C,6RC+GMlT,EAAcpK,cAACwmF,IAAY,IAE3Bj8D,EAAoB,SAAHkR,GACXA,EAAR30B,SACY20B,EAAZ/f,aACQ+f,EAAR76B,SACO,OAAAnB,YAAAg8B,EAAAhqB,EAEF,EAEMmgB,IAnHU,SAAC3wB,GAUlBA,EARAszD,WADJ,IAEIprD,EAOAlI,EAPAkI,QAAO2C,EAOP7K,EANA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAAAG,EAM1BhL,EALAkJ,YAAI,IAAA8B,EAAG7B,EAAW6B,EACRy6E,EAIVzlF,EAJAia,SAGGpX,GACH7C,EAHAob,KAGApb,EAFAN,UACOlB,YACPwB,EAAKvB,IAET4b,EAGIC,YAAeta,GAFL0lF,EAAmBrrE,EAA7BJ,SACAuB,EAAWnB,EAAXmB,YAEEvB,EAAWwrE,GAAkBC,EAC7B/lF,EAAWuE,YAAmBlE,GAC9BgzE,EAAe8I,cACf77E,EAAYC,cACZgW,EAASC,cAEfrF,EAAgC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GAEtB6hB,EAAazhB,uBAAY,SAACtJ,GAC5BN,EAAYM,EAAMM,cACtB,IAEMP,EAAcuJ,uBAAY,WAC5B5J,EAAY,KAChB,IAEMo+E,EAAmBx0E,uBAAY,SAAAtJ,GACjCD,IACAorE,EACKlY,QAAQn7D,EAAU,CAAE2M,IAAKkP,IACzBrP,MACG,SAAA/N,GAAA,IAAGmQ,EAAInQ,EAAJmQ,KAAI,OACH0L,EAAS2rE,cACT3rE,EAAS2rE,aACLr3E,EACAs3E,YAAoB7S,GACpBA,EACArzE,EACH,IAERsyC,OAAM,SAAA7uC,GACH+nD,QAAQ/nD,MAAMA,GACd8S,EAAO,6BAA8B,CAAE1Q,KAAM,WACjD,IACmB,oBAAZ0C,GACPA,EAAQL,EAEhB,GAAG,CAACmrE,EAAc/4D,EAAU/D,EAAQhO,EAASvI,EAAU6b,IAEjDsqE,EAAmB30E,uBAAY,SAAAtJ,GACjCD,IACAorE,EACKlY,QAAQn7D,EAAU,CAAE2M,IAAKkP,IACzBrP,MACG,SAAAgE,GAAA,IAAG5B,EAAI4B,EAAJ5B,KAAI,OACH0L,EAAS8rE,cACT9rE,EAAS8rE,aACLx3E,EACAs3E,YAAoB7S,GACpBA,EACArzE,EACH,IAERsyC,OAAM,SAAA7uC,GACH+nD,QAAQ/nD,MAAMA,GACd8S,EAAO,6BAA8B,CAAE1Q,KAAM,WACjD,IACmB,oBAAZ0C,GACPA,EAAQL,EAEhB,GAAG,CAACmrE,EAAc/4D,EAAU/D,EAAQhO,EAASvI,EAAU6b,IAGvD,OACIjY,eAAA,QAAAlF,SAAA,CACIU,cAAC8f,IAAMre,wBAAA,CACH,gBAAc,mBACd,gBAAc,OACd0H,QAAS0qB,EACTlxB,MAAOA,GACH4nB,EAAkBzmB,IAAK,IAAAxE,SAE1B6K,KAEL3F,eAAC+E,IAAI,CACDtF,GAAG,mBACHsE,SAAUA,EACV2rB,aAAW,EACXtrB,KAAM7C,QAAQwC,GACdiB,QAASX,EAAYvJ,SAAA,CAErBU,cAAC+E,IAAQ,CAACoE,QAASy9E,EAAiBtnF,SAAG4B,EAAU,2BACjDlB,cAAC+E,IAAQ,CAACoE,QAAS49E,EAAiBznF,SAAG4B,EAAU,gCAKjE,C,uHC/GMW,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCoI,KAAM,SAAClJ,GAAW,IAADksB,EACPC,EAAmBC,YAAoB,OAALpsB,QAAK,IAALA,GAAa,QAARksB,EAALlsB,EAAOF,cAAM,IAAAosB,OAAR,EAALA,EAAeG,UACvD,GAAKF,EACL,MAAO,CACHjtB,MAAO4B,EAAMyE,QAAQ4mB,GAAkBjX,KAE/C,EACH,GAAG,CAAEhU,KAAM,sBAENurB,EAAoB7gB,gBAAK,SAAAxN,GAA8B,IAA3BsB,EAAStB,EAATsB,UAAcM,EAAKxB,YAAAJ,EAAAK,GACjD++G,EAAwBx9G,EAAhBF,cAAM,IAAA09G,EAAG,CAAC,EAACA,EACbj8G,EAAUX,EAAUZ,GACpBC,EAAYC,YAAaF,GACzBkJ,EAAO0qH,YAAgB9zH,EAAOusB,UAC9BtoB,EAAQ9D,EAAU,kCAADK,OAAmCR,EAAOusB,WAEjE,OAAKnjB,EAEG/D,uBAAa+D,EAAM,CACvBxJ,UAAWkE,IAAWlE,EAAS6T,YAAA,GAAKhS,EAAQ2H,MAAQlJ,EAAMkX,WAC1D+pE,YAAal9E,IAJC,IAMtB,IAIe0oB,K,mPC7BT6b,EAA0B,CAC5BhV,MAAO,CACH,CAAE7nB,MAAO,SAAU88B,OAAQ,KAgCpB/T,EA5BK,SAACjB,GACjB,IAAMtzB,EAAYC,cAElB,OAAO,SAACsoC,EAASq9C,EAAqB7S,EAAcrzE,GAEhDkoH,YAAUt0F,EAAOiV,EAASq9C,GACrB15E,MAAK,SAAAmrH,GAEF,IAAMvzH,EAAQ9D,EAAU,aAADK,OAAcX,EAAQ,SAAS,CAAEqX,YAAa,IAC/D/S,EAAUikH,YAAa30F,EAAOtzB,GAC9B6pC,EAAO4+E,YAAUn1F,EAAO+jG,EAAcr3H,GAEtCwoC,EAAW,IAAIC,IAAQC,SAC7BF,EAASG,QAAU,IAAIC,KACvBJ,EAASK,SAAW,IAAID,KACxBJ,EAASM,YAAc,IAAIF,KAE3B,IAAMuB,EAAY3B,EAAS4B,aAAatmC,EAAOukC,GAC/C8B,EAAUnmC,QAAUA,EACpBmmC,EAAUE,WAAa,CAAEza,KAAM,CAAE0a,IAAK,EAAGnlC,OAAQ,GAAK9G,GAAI,CAAEisC,IAAK,EAAGnlC,OAAQnB,EAAQyD,SACpF0iC,EAAUI,QAAQV,GAElBW,YAAa1mC,EAAO0kC,EAASiC,KACjC,GACR,CACJ,ECZelW,EAlBK,SAACjB,GACjB,IAAMtzB,EAAYC,cAElB,OAAO,SAACsoC,EAASq9C,EAAqB7S,EAAcrzE,GAEhDkoH,YAAUt0F,EAAOiV,EAASq9C,GACrB15E,MAAK,SAAAmrH,GAEF,IAAMvzH,EAAQ9D,EAAU,aAADK,OAAcX,EAAQ,SAAS,CAAEqX,YAAa,IAC/DzI,EAAOo6G,YAAmBp1F,EAAO+jG,GAGvC9N,YAAazlH,EAAOwK,EACxB,GACR,CACJ,ECTeimB,EATK,SAACjB,GAEjB,MAAO,CACHqyD,aAAc2xC,EAAgBhkG,GAC9BwyD,aAAcyxC,EAAgBjkG,GAEtC,ECHeG,EANU,SAACpvB,EAAKjE,EAAOkzB,EAAOzzB,EAAQG,GACjD,OAAc,IAAVI,EAAuBJ,EAAU,oBACvB,IAAVI,EAAwBJ,EAAU,oBAC/BI,CACX,E,QCIeuzB,EANO,SAACtvB,EAAKjE,EAAOkzB,EAAOzzB,EAAQG,GAC9C,OAAOoL,WAAS6wB,QAAQ77B,GAAOkL,eAAeF,WAASG,eAC3D,ECEemoB,EANO,SAACh0B,GAAQ,OAAK,SAAC2E,EAAKjE,EAAOkzB,EAAOzzB,EAAQG,GAC5D,OAAOA,EAAU,aAADK,OAAcX,EAAQ,WAAAW,OAAUgE,EAAG,KAAAhE,OAAID,GAAS,CAAEE,EAAGF,GACzE,CAAE,E,iBCUawzB,EAVO,SAACl0B,EAAU83H,GAAO,OAAK,SAACnzH,EAAKjE,EAAOkzB,EAAOzzB,EAAQG,GAErE,IAAM+C,EAAK5C,IAAIN,EAAQ23H,GACfC,EAAWplH,OAAO7H,SAAlBitH,OACF/4H,EAAI,GAAA2B,OAAMo3H,EAAM,OAAAp3H,OAAMX,EAAQ,KAAAW,OAAI0C,EAAE,SAC1C,MAAO,CAAEioB,KAAM,uCAAU0sG,UAAWh5H,EAAM+4B,QAAS/4B,EACvD,CAAE,ECEag1C,EAVO,SAACrvC,EAAKjE,EAAOkzB,EAAOzzB,EAAQG,GAC9C,OAAiB,MAATI,GAEgB,kBAAVA,EADRA,EAGI8F,KAAKC,UAAU/F,EAAO,KACpC,ECMem0B,K,+NCLTrE,EAAY,SAAH/xB,GAAiF,IAA3E8C,EAAI9C,EAAJ8C,KAAM2D,EAAMzG,EAANyG,OAAQ/E,EAAM1B,EAAN0B,OAAQH,EAAQvB,EAARuB,SAAUC,EAAMxB,EAANwB,OAAmBG,GAAF3B,EAAT6B,UAAiB7B,EAAN2B,QAAWC,EAAKxB,YAAAJ,EAAAK,GAC9Eu0E,EAAe8I,cACrBhrE,EAA0B1J,mBAAS,IAAG2J,EAAAnM,YAAAkM,EAAA,GAA/BmhG,EAAKlhG,EAAA,GAAE6mH,EAAQ7mH,EAAA,GAChB8mH,EAAe32H,GAAQ42H,IAAWn4H,GAAYm4H,IAAWl4H,GAE/DmV,qBAAU,WACkB,SAAAgjH,IAQvB,OARuBA,EAAAz/G,YAAAC,cAAAC,MAAxB,SAAAC,IAAA,OAAAF,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACIg6D,EAAahR,QAAQriE,EAAU,CAAEuB,KAAM22H,IAClC1rH,MAAK,SAAAgE,GAAe,IAAZ5B,EAAI4B,EAAJ5B,KACLqpH,EAASrpH,EACb,IACC0jC,OAAM,SAAA7uC,GACH+nD,QAAQC,IAAI,UAAWhoD,EAC3B,IAAE,wBAAA0V,EAAAO,OAAA,GAAAZ,EAAA,MACTe,MAAA,KAAA3P,UAAA,EATY,WACWkuH,EAAAv+G,MAAC,KAAD3P,UAAA,CASxBmuH,EACJ,GAAG,CAACH,IAGJ,IAAMn7G,EAAWu1F,EAAMptG,QAAO,SAAA+B,GAAM,OAAIA,EAAO1F,OAASd,IAAIN,EAAQF,EAAO,IAErEswB,EAAWrrB,EAAMsF,YAAQ,IAAIw4B,IAAI,GAADriC,OAAA6J,YAAKuS,GAAQvS,YAAK8nG,EAAMptG,OAAOA,OAAaotG,EAKlF,OACIlzG,cAACkxB,IAAWzvB,YAAA,CAACZ,OAAQA,EAAQD,SAAUA,EAAUuwB,QAASA,EAASjhB,YAAY,OAAOtI,WAJxE,SAAAC,GAAM,OAAI7G,EAAM,GAAAO,OAAMP,EAAM,KAAAO,OAAIsG,EAAO1F,MAAI,aAAAZ,OAAkBX,EAAQ,WAAAW,OAAUV,EAAM,KAAAU,OAAIsG,EAAO1F,KAAO,GAIJlB,GAGzH,EAEAmwB,EAAUzvB,aAAe,CACzB,EAQeyvB,K,4IClBA+e,IAjBgB,SAAClvC,GAC9B,IAAQL,EAAsDK,EAAtDL,SAAUG,EAA4CE,EAA5CF,OAAMm4H,EAAsCj4H,EAApCk4H,+BAAuB,IAAAD,GAAQA,EACnD9uG,EAAgB,OAANrpB,QAAM,IAANA,OAAM,EAANA,EAAQqpB,QAExB,OACE5lB,eAACyD,IAAUxG,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAClB65H,GAA2B5vG,IAAYI,IAAI,SAAU/oB,IAAaZ,cAACo5H,IAAoC,IACvG7vG,IAAYI,IAAI,SAAU/oB,IAAaZ,cAACy0C,IAAoB,IAC5DlrB,IAAYI,IAAI,SAAU/oB,IAAaZ,cAAC00C,IAAoB,IAC5DnrB,IAAYI,IAAI,SAAU/oB,IAAaZ,cAAC4L,IAAqB,IAC7D2d,IAAYI,IAAI,SAAU/oB,KAAcwpB,GAAWpqB,cAAC20C,IAAsB,IAC1EprB,IAAYI,IAAI,UAAW/oB,IAAawpB,GAAWpqB,cAACid,IAAuB,IAC3EsM,IAAYI,IAAI,UAAW/oB,IAAawpB,GAAWpqB,cAAC4a,IAAsB,OAGjF,C,mLClBM/Y,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFgI,QAAS,OACTmU,WAAY,OAEnB,IAEK+2C,EAAY,SAAHn6D,GAA2D,IAArDsB,EAAStB,EAATsB,UAAWI,EAAM1B,EAAN0B,OAAQF,EAAMxB,EAANwB,OAAQ44D,EAAQp6D,EAARo6D,SAAax4D,EAAKxB,YAAAJ,EAAAK,GAExD8C,EAAUX,IACVw3H,EAAWh4H,IAAIN,EAAQF,GACvBy4H,EAAW7zH,IAAMsyE,IAAO,MAC9B,IAAKshD,EAAY,OAAO,KAExB,IAAME,EAAaD,EAASD,IAAaC,EAASv1F,UAElD,OACIv/B,eAAA,OAAK7D,UAAW6B,EAAQ8D,KAAKhH,SAAA,CACxBi6H,EAAWpvH,KACXsvD,GAAYj1D,eAACvE,IAAUwB,wBAAA,CAACvB,QAAQ,QAAQS,UAAWA,GAAee,YAAuBT,IAAM,IAAA3B,SAAA,CAAG,OAAEi6H,EAAWp3H,WAI5H,EAQAq3D,EAAU73D,aAAe,CACrBC,UAAU,GAGC43D,K,mSC9BTt7C,EAAsB,CACxBC,YAAY,EACZC,UAAU,EACVC,OAAO,EACPC,SAAS,GAGPk7G,EAAoB,CACtB,CAAEv1H,GAAI,YAAa9B,KAAM,wCACzB,CAAE8B,GAAI,WAAY9B,KAAM,wCAOtBs3H,EAAkB,CAJP,SAACn4H,GACd,OAAiB,IAAVA,OAAiByJ,EAAY,wBACxC,GAuEe2uH,EAhEY,SAACz4H,GACxB,IAAQ2H,EAA4D3H,EAA5D2H,KAAM+wH,EAAsD14H,EAAtD04H,SAAUnwH,EAA4CvI,EAA5CuI,QAAS5I,EAAmCK,EAAnCL,SAAU4O,EAAyBvO,EAAzBuO,KAAMoqH,EAAmB34H,EAAnB24H,SAAUxuE,EAASnqD,EAATmqD,KACrDlqD,EAAYC,cACZ04H,EAAc9zH,QAAQyiC,MAAMC,QAAQmxF,IAAaA,EAASjxH,OAAS,GAGnEE,EAAcuJ,uBAAY,WAC5B5I,GACJ,GAAG,CAACA,IAEEswH,EAAe1nH,uBAAY,SAACmM,GAC9Bo7G,EAASp7G,EACb,GAAG,CAACo7G,IAEJ,OACIn1H,eAAC4a,IAAM,CACHxW,KAAMA,EACNY,QAASX,EACT4F,WAAS,EACTqxB,SAAS,KACT,kBAAgB,sBAChB,mBAAiB,4BAA2BxgC,SAAA,CAE5CU,cAACqf,IAAW,CAACpb,GAAG,sBAAqB3E,SAAE4B,EAAU,0BAA2B,CAAEN,SAAUM,EAAU,aAADK,OAAcX,EAAQ,eAAe,CAAEqX,YAAa,QACrJzT,eAACkb,IAAa,CAAApgB,SAAA,CACVU,cAAC2f,IAAiB,CAAArgB,SAAG4B,EAAU,4BAA6B,CAAEN,SAAUM,EAAU,aAADK,OAAcX,EAAQ,SAAS,CAAEqX,YAAa,IAAMA,YAAazI,EAAK7G,OAAQoxH,SAAU3uE,EAAKjpD,SAC7K03H,GAAgB75H,cAAC2f,IAAiB,CAAArgB,SAAG4B,EAAU,6BAA8B,CAAEN,SAAUM,EAAU,aAADK,OAAcX,EAAQ,SAAS,CAAEqX,YAAa,IAAMA,YAAa2hH,EAASjxH,cAEjL3I,cAACsf,IAAI,CACDC,SAAUu6G,EACV1pH,aAAc8N,EACdsB,yBAAuB,EACvBrP,OAAQ,SAAAsP,GAAS,OACbjb,eAAA,QAAAlF,SAAA,CACIkF,eAACkb,IAAa,CAAApgB,SAAA,CACTu6H,GACG75H,cAACg6H,IAAqB,CAClBn5H,OAAO,aACP8B,MAAM,kCACNwuB,QAASqoG,EAAmBhuF,KAAK,EACjC57B,aAAc,cAGtB5P,cAAC0/C,IAAa,CACV7+C,OAAO,UACP8B,MAAM,+BACNS,SAAUq2H,OAGlBj1H,eAACqb,IAAa,CAAAvgB,SAAA,CACVU,cAAC8f,IAAM,CAAC3W,QAASN,EAAYvJ,SACxB4B,EAAU,mBAAoB,CAAEM,EAAG,aAExCxB,cAAC8f,IAAM,CAAC3W,QAASsW,EAAUM,aAAc5f,MAAM,UAASb,SACnD4B,EAAU,mBAAoB,CAAEM,EAAG,kBAGzC,MAK3B,E,kCCtFMuH,EAAkB,SAAAD,GAAK,OAAIA,EAAMC,iBAAkB,EAEnDu5G,EAAe,CACjB9yG,UAAMzE,EACN6uH,cAAU7uH,EACVqgD,UAAMrgD,EACN1G,WAAO0G,EACP6M,SAAS,EACToT,QAAQ,GA4LG1O,EAzLM,SAACrb,GAClB,IAAA6K,EAKI7K,EAJA0B,aAAK,IAAAmJ,EAAG,mBAAkBA,EAC1BsP,EAGAna,EAHAma,SACAxa,EAEAK,EAFAL,SACGkD,EAAIrE,YACPwB,EAAKvB,GACHu0E,EAAe8I,cAEfzlE,GADciE,cAAZ0P,QACQ1T,eACVrW,EAAYC,cACZgW,EAASC,cACT6iH,EAAqBnoH,iBAAO,MAC5BooH,EAAqBpoH,iBAAO,MAClCC,EAA0B1J,mBAASi6G,GAAatwG,EAAAnM,YAAAkM,EAAA,GAAzCrF,EAAKsF,EAAA,GAAE4T,EAAQ5T,EAAA,GACtBkP,EAAwB7Y,oBAAS,GAAM8Y,EAAAtb,YAAAqb,EAAA,GAAhCtY,EAAIuY,EAAA,GAAEtJ,EAAOsJ,EAAA,GACdg5G,EAAUp0H,QAAQyiC,MAAMC,QAAa,OAAL/7B,QAAK,IAALA,OAAK,EAALA,EAAO8C,QAAc,OAAL9C,QAAK,IAALA,OAAK,EAALA,EAAO8C,KAAK7G,QAAS,GAE3E66F,EAAgCn7F,mBAAS,MAAKo7F,EAAA59F,YAAA29F,EAAA,GAAvCj7F,EAAQk7F,EAAA,GAAEj7F,EAAWi7F,EAAA,GAEtB5vE,EAAazhB,uBAAY,SAACtJ,GAC5BN,EAAYM,EAAMM,cACtB,IAEMP,EAAcuJ,uBAAY,WAC5B5J,EAAY,MACZooD,GACJ,GAAG,CAACA,IAEEA,EAAcx+C,uBAAY,SAAAtJ,GAC5B+O,GAAQ,GACRoiH,EAAmBnnH,QAAQxR,MAAQ,GACnC44H,EAAmBpnH,QAAQxR,MAAQ,GACnCskB,EAAS08F,EACb,GAAG,CAAC2X,EAAoBC,EAAoBt0G,EAAU/N,IAEhDuiH,EAAiBhoH,uBAAY,SAACtJ,GAChC,IAAMsiD,EAAOtiD,EAAMwB,OAAO6hD,MAAM,GAChC,GAAKf,EAAL,CAEAriD,EAAgBD,GAChB8c,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAEvH,SAAS,GAAI,IAElD,IAAMyiH,EAAa,IAAIC,WACvBD,EAAWE,kBAAkBnvE,GAC7BivE,EAAW7vE,QAAU,WACjB5kC,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAEvH,SAAS,EAAOvT,MAAO,2BAAyB,GACzF,EACAg2H,EAAWrwE,QAAU,WACjBpkC,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAEvH,SAAS,EAAOvT,MAAO,2BAAyB,GACzF,EACAg2H,EAAW5wE,OAAS,WAChB,IAAM+wE,EAASH,EAAWpkD,QACT,IAAItsC,IAAQC,UACpB+B,KAAK8uF,KAAKD,GAAQptH,KAAI,eAAA/N,EAAAka,YAAAC,cAAAC,MAAC,SAAAC,EAAOgwB,GAAQ,IAAA2B,EAAAN,EAAAv7B,EAAAoqH,EAAA,OAAApgH,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAOQ,OAN7CoxB,EAAY3B,EAASgxF,WAAW,GAChC3vF,EAAOM,EAAUmC,MAAMviC,QAAO,SAACC,EAAKsgC,GACtC,OAAOA,EAAImvF,UAAS,GAAAp5H,OAAA6J,YAAOF,GAAG,CAAEsgC,EAAIjtB,OAAO9Q,MAAM,KAAMvC,CAC3D,GAAG,IAAG6O,EAAAC,KAAA,EAGIxK,EAAO4L,EAASqzB,aAAahsC,OAAOsoC,GAAKhxB,EAAAE,KAAA,EACxBg6D,EAAalY,QAAQn7D,EAAU,CAAE2M,IAAKiC,EAAKvE,QAAO,SAACC,EAAGkG,GAAA,IAAInN,EAAEmN,EAAFnN,GAAE,OAAOA,EAAE,GAAA1C,OAAA6J,YAAOF,GAAG,CAAEjH,IAAMiH,CAAG,GAAE,MAAOkC,MAAK,SAAAquB,GAAO,OAAAA,EAAJjsB,IAAe,IAAC,OAA5IoqH,EAAQ7/G,EAAAI,KAEdyL,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAE3P,OAAMoqH,WAAUxuE,OAAMxzC,SAAS,EAAOoT,QAAQ,GAAI,IACvFnT,GAAQ,GAAKkC,EAAAE,KAAA,iBAAAF,EAAAC,KAAA,GAAAD,EAAAqlD,GAAArlD,EAAA,SAEb5C,EAAO,oCAAqC,WAC5Cy5C,IAAa,yBAAA72C,EAAAO,OAAA,GAAAZ,EAAA,mBAEpB,gBAAAa,GAAA,OAAAlb,EAAAob,MAAA,KAAA3P,UAAA,EAhB8B,GAiBnC,CAjCiB,CAkCrB,GAAG,CAAC8a,EAAU/N,EAAS+4C,IAGjBgqE,EAAiBxoH,uBAAY,SAACtJ,GAChC,IAAMsiD,EAAOtiD,EAAMwB,OAAO6hD,MAAM,GAChC,GAAKf,EAAL,CAEAriD,EAAgBD,GAChB8c,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAEvH,SAAS,GAAI,IAElD,IAAMyiH,EAAa,IAAIC,WACvBD,EAAWQ,WAAWzvE,GACtBivE,EAAW7vE,QAAU,WACjB5kC,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAEvH,SAAS,EAAOvT,MAAO,2BAAyB,GACzF,EACAg2H,EAAWrwE,QAAU,WACjBpkC,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAEvH,SAAS,EAAOvT,MAAO,2BAAyB,GACzF,EACAg2H,EAAW5wE,OAAM,eAAA/rB,EAAAnkB,YAAAC,cAAAC,MAAG,SAAAioD,EAAO54D,GAAK,IAAA2gC,EAAAj6B,EAAAoqH,EAAA,OAAApgH,cAAAM,MAAA,SAAA6nD,GAAA,cAAAA,EAAA3nD,KAAA2nD,EAAA1nD,MAAA,OAG0B,OAH1B0nD,EAAA3nD,KAAA,EAElByvB,EAAUriC,KAAKjE,MAAM2F,EAAMwB,OAAO2rE,QAClCzmE,EAAO4L,EAASuzB,aAAalsC,OAAOgnC,GAAQk4B,EAAA1nD,KAAA,EAC3Bg6D,EAAalY,QAAQn7D,EAAU,CAAE2M,IAAKiC,EAAKvE,QAAO,SAACC,EAAGunC,GAAA,IAAIxuC,EAAEwuC,EAAFxuC,GAAE,OAAOA,EAAE,GAAA1C,OAAA6J,YAAOF,GAAG,CAAEjH,IAAMiH,CAAG,GAAE,MAAOkC,MAAK,SAAAw8D,GAAO,OAAAA,EAAJp6D,IAAe,IAAC,OAA5IoqH,EAAQj4D,EAAAxnD,KAEdyL,GAAS,SAAAzG,GAAQ,OAAA1d,wBAAA,GAAU0d,GAAQ,IAAE3P,OAAMoqH,WAAUxuE,OAAMxzC,SAAS,EAAOoT,QAAQ,GAAI,IACvFnT,GAAQ,GAAK8pD,EAAA1nD,KAAA,iBAAA0nD,EAAA3nD,KAAA,GAAA2nD,EAAAvC,GAAAuC,EAAA,SAEbxqD,EAAO,oCAAqC,WAC5Cy5C,IAAa,yBAAA+Q,EAAArnD,OAAA,GAAAonD,EAAA,mBAGpB,gBAAAlnD,GAAA,OAAAkjB,EAAAjjB,MAAA,KAAA3P,UAAA,EAbgB,EAbA,CA2BrB,GAAG,CAAC8a,EAAU/N,EAAS+4C,IAGjBkpE,EAAe1nH,uBAAY,SAACmM,GAE9B01D,EAAanjB,WAAWlwD,EAAU,CAAE4O,KAAW,OAAL9C,QAAK,IAALA,OAAK,EAALA,EAAO8C,KAAMwhD,WAAYzyC,EAAOyyC,aACrE5jD,MAAK,SAAAy8D,GAAe,IAAZr6D,EAAIq6D,EAAJr6D,KACLohD,IACAz5C,EAAO,2BAA4B,OAAQ,CAAEc,YAAazI,EAAKk/C,QAAS,GACxEp3C,GACJ,IACC47B,OAAM,SAAA7uC,GACH8S,EACqB,kBAAV9S,EAAqBA,EAAQA,EAAMmO,SAAW,6BACrD,UACA,CACIhR,EAAoB,kBAAV6C,EAAqBA,EAAQA,GAASA,EAAMmO,QAAUnO,EAAMmO,aAAUzH,GAG5F,GAER,GAAG,CAAM,OAAL2B,QAAK,IAALA,OAAK,EAALA,EAAO8C,KAAMohD,IAGjB,OACIpsD,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAA,SACI6J,IAAKowH,EACLzoE,OAAO,8FACPp5C,MAAO,CAAE9J,QAAS,QAClBrK,GAAG,mBACHwC,KAAK,OACL1D,SAAUq3H,IAEdp6H,cAAA,SACI6J,IAAKqwH,EACL1oE,OAAO,mBACPp5C,MAAO,CAAE9J,QAAS,QAClBrK,GAAG,mBACHwC,KAAK,OACL1D,SAAU63H,IAEd56H,cAAC8f,IAAMre,wBAAA,CACH,gBAAc,cACd,gBAAc,OACd0H,QAAS0qB,EACTlxB,MAAOA,EACPvC,UAAU,QACN0D,GAAI,IAAAxE,SAERU,cAAC86H,IAAW,OAEhBt2H,eAAC+E,IAAI,CACDtF,GAAG,cACHsE,SAAUA,EACV2rB,aAAW,EACXtrB,KAAM7C,QAAQwC,GACdiB,QAASX,EAAYvJ,SAAA,CAErBU,cAAA,SAAOgP,QAAQ,mBAAkB1P,SAC7BU,cAAC+E,IAAQ,CAAAzF,SAAI4B,EAAU,6BAE3BlB,cAAA,SAAOgP,QAAQ,mBAAkB1P,SAC7BU,cAAC+E,IAAQ,CAAAzF,SAAG4B,EAAU,gCAG7Bi5H,GACGn6H,cAAC05H,EAAkBj4H,wBAAA,GACXiL,GAAK,IACT9D,KAAMA,EACNY,QAASX,EACT8wH,SAAUG,EACVl5H,SAAUA,OAK9B,EC1Me0b,K,2MCUT3S,EAAUvB,IAAMwB,YAAW,SAAC3I,EAAO4I,GAAG,OAAK7J,cAACK,IAAIoB,YAAA,CAACqI,SAAUD,GAAS5I,GAAS,IAE7E8vF,EAA8B3oF,IAAMwB,YAAW,SAAAvK,EASlDwK,GAAS,IAADG,EAAA3K,EARPyH,gBAAQ,IAAAkD,EAAG,GAAEA,EAAAC,EAAA5K,EACbsD,aAAK,IAAAsH,EAAG,sBAAqBA,EAAAC,EAAA7K,EAC7B8K,YAAI,IAAAD,EAAGE,EAAWF,EAClBnJ,EAAM1B,EAAN0B,OAAMsJ,EAAAhL,EACNiL,cAAM,IAAAD,EAAG,QAAOA,EAChBuM,EAAQvX,EAARuX,SACAo6E,EAAG3xF,EAAH2xF,IACGltF,EAAIrE,YAAAJ,EAAAK,GAEDwB,EAAYC,cACZ00C,EAAOj/B,EAAS9P,EAAU/F,EAAOkD,GAAIlD,GAE3C,OACIyD,eAACO,IAAQtD,wBAAA,CACLrB,UAAWuJ,EACXksC,KAAMA,EACN11C,MAAM,UACNsvD,UAAU,OACVnlD,OAAQA,EACRT,IAAKA,EACLV,QAASJ,GACLjF,GAAI,IAAAxE,SAAA,CAERU,cAACwK,IAAY,CAAAlL,SACR8I,IAAMhC,aAAa+D,EAAM,CACtBM,SAAU,YAGlBzK,cAACC,IAAU,CAACC,QAAQ,UAASZ,SAAE4B,EAAUyB,EAAO,CAAEquF,aAG9D,IAEM5mF,EAAcpK,cAAC+6H,IAAiB,IAEhChyH,EAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EASlCgoF,K,6ICpDTlvF,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCi5H,SAAU,CACNr1B,eAAgB,gBAEvB,GAAG,CAAExjG,KAAM,iBAGN6zF,EAAe,SAAC/0F,GAAW,IAADg6H,EACpBl6H,EAA+BE,EAA/BF,OAAQJ,EAAuBM,EAAvBN,UAAcmD,EAAIrE,YAAKwB,EAAKvB,GACtC8C,EAAUX,IAChB,IAAKd,EAAQ,OAAO,KACpB,IAAMm6H,EAAUn6H,EAAO0F,KACjB00H,EAAgC,QAAnBF,EAAGl6H,EAAOq6B,iBAAS,IAAA6/F,OAAA,EAAhBA,EAAkBx0H,KAClC20H,GAAgBr1H,QAAQm1H,IAAYC,GAE1C,OACIn7H,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWkE,IAAWlE,EAAS6T,YAAA,GAAKhS,EAAQw4H,SAAWI,KACnD15H,YAAuBoC,IAAK,IAAAxE,SAE/B47H,IAGb,EAGAllC,EAAar0F,aAAe,CACxBC,UAAU,GAICo0F,K,4KC7BTqlC,EAAY,KACZC,EAAa,KACbC,EAAe,KAEf15H,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC+2G,KAAM,CACFvyG,gBAAiBxE,EAAMyE,QAAQge,QAAQI,MACvCzkB,MAAO4B,EAAMyE,QAAQge,QAAQE,MAEjCq0F,KAAM,CACFxyG,gBAAiBxE,EAAMyE,QAAQme,QAAQC,MACvCzkB,MAAO4B,EAAMyE,QAAQme,QAAQD,MAEjCs0F,IAAK,CACDzyG,gBAAiBxE,EAAMyE,QAAQnC,MAAMugB,MACrCzkB,MAAO4B,EAAMyE,QAAQnC,MAAMqgB,MAElC,GAAG,CAAEviB,KAAM,wBAGN4zF,EAAsB,SAAH12F,GAAgE,IAA1DsB,EAAStB,EAATsB,UAAqBE,GAAFxB,EAARuB,SAAgBvB,EAANwB,QAAMC,EAAAzB,EAAE0B,cAAM,IAAAD,EAAG,CAAC,EAACA,EAC7DI,GADuEzB,YAAAJ,EAAAK,GAC3DyB,eACZqB,EAAUX,EAAUd,GACpBs1G,EAASh1G,IAAIN,EAAQF,GAC3B,GAAIyiF,YAAO+yB,GAAS,OAAO,KAE3B,IAAMmlB,EAAaH,EAAUvjG,KAAKu+E,GAC5BolB,EAAaH,EAAWxjG,KAAKu+E,GAC7BqlB,EAAiBH,EAAazjG,KAAKu+E,GAEzC,OACI7xG,eAAA,QAAAlF,SAAA,CACKk8H,GACGx7H,cAAC0iC,IAAI,CACD/hC,UAAWkE,IAAWlE,EAAW6B,EAAQ8zG,UACzCjtG,KAAK,QACL1G,MAAOzB,EAAU,4CAA6C,CAAEM,EAAG,eAG1Ei6H,GACGz7H,cAAC0iC,IAAI,CACD/hC,UAAWkE,IAAWlE,EAAW6B,EAAQ+zG,UACzCltG,KAAK,QACL1G,MAAOzB,EAAU,4CAA6C,CAAEM,EAAG,eAG1Ek6H,GACG17H,cAAC0iC,IAAI,CACD/hC,UAAWkE,IAAWlE,EAAW6B,EAAQg0G,cACzCntG,KAAK,QACL1G,MAAOzB,EAAU,gDAAiD,CAAEM,EAAG,qBAM3F,EAEAu0F,EAAoBp0F,aAAe,CAC/BC,UAAU,GAGCm0F,K,8JC3DF4lC,EAAwB,SAACjwH,GAClC,GAAKA,GACmB,kBAAbA,EAAX,CACA,IAAMkwH,EAASlwH,EAASy/B,MAAM,KAGxB0wF,EAAa,CAAExgD,IAFJrjD,WAAW4jG,EAAO,IAECtgD,IADlBtjD,WAAW4jG,EAAO,KAEpC,OAAOE,4BAAkBD,GAAcA,OAAa9wH,CALF,CAMtD,EAEagxH,EAA4B,SAACvsH,EAAMjC,GAC5C,IAnBuBlO,EAmBjB87E,EAAc5tE,EAAItC,QAAO,SAACC,EAAKjH,GAAQ,IAAD+3H,EAClC/gG,EAAOzrB,EAAKvL,GACZ6J,EAAW6tH,EAA0B,OAAJ1gG,QAAI,IAAJA,GAAS,QAAL+gG,EAAJ/gG,EAAM6xD,WAAG,IAAAkvC,OAAL,EAAJA,EAAW16H,OAClD,OAAOwM,EAAQ,GAAAvM,OAAA6J,YAAOF,GAAG,CAAE4C,IAAY5C,CAC3C,GAAG,IACGuwE,EAASN,EAAYxyE,OAAS,EAAIszH,4BAAkB9gD,QAAepwE,EACzE,OAAO0wE,EAxBA,CAAEJ,KADch8E,EAyBQo8E,GAzBFygD,SACL5gD,IADwBj8E,EAAT88H,WAyBER,EA3BN,uBA4BvC,EAEaS,EAA4B,SAAC5sH,EAAMjC,GAC5C,IAzB6B6D,EAyBvB+pE,EAAc5tE,EAAItC,QAAO,SAACC,EAAKjH,GAAQ,IAADo4H,EAClCphG,EAAOzrB,EAAKvL,GACZ6J,EAAW6tH,EAA0B,OAAJ1gG,QAAI,IAAJA,GAAS,QAALohG,EAAJphG,EAAM6xD,WAAG,IAAAuvC,OAAL,EAAJA,EAAW/6H,OAClD,OAAOwM,EAAQ,GAAAvM,OAAA6J,YAAOF,GAAG,CAAE4C,IAAY5C,CAC3C,GAAG,IACGoxH,EAASnhD,EAAYxyE,OAAS,EAAI4zH,oBAAUphD,QAAepwE,EACjE,OAAOuxH,EA9BA,CAAC,CAAEjhD,KADmBjqE,EA+BQkrH,GA/BFE,OACZlhD,IAD0BlqE,EAANqrH,QACL,CAAEphD,IADiBjqE,EAANsrH,OACEphD,IADYlqE,EAANurH,cA+BZ5xH,CACnD,C,kJCrBMoqB,EAAkBtoB,gBACpB,SAAAxN,GAA6D,IAZ/CyhD,EAAQwkC,EAYnB3kF,EAAStB,EAATsB,UAAWE,EAAMxB,EAANwB,OAAMC,EAAAzB,EAAE0B,cAAM,IAAAD,EAAG,CAAC,EAACA,EAAgBgD,GAALzE,EAATo/C,UAAkBh/C,YAAAJ,EAAAK,IAE3CgN,GADQrL,IAAIN,EAAQF,GAbhBigD,EAca//C,EAAO+/C,OAdZwkC,EAcoBvkF,EAAOukF,IAZ7CxkC,EACQwkC,EAAM,UAAY,YAElBA,EAAM,UAAY,aAa1B,OACItlF,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,YAAuBoC,IAAK,IAAAxE,SAE/BoN,IAGb,IAGJyoB,EAAgBlT,YAAc,kBAE9BkT,EAAgBxzB,aAAe,CAC3BC,UAAU,EACVqzB,UAAU,GAGCE,K,4GC1CTD,EAAqBroB,gBAAK,SAAC5L,GAC7B,IAAQN,EAAuBM,EAAvBN,UAAcmD,EAAIrE,YAAKwB,EAAKvB,GACpC,OACIM,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,YAAuBoC,IAAK,IAAAxE,SAEhCU,cAAC0tB,IAAiBjsB,YAAA,GAAKR,MAGnC,IAEAi0B,EAAmBjT,YAAc,qBAEjCiT,EAAmBvzB,aAAe,CAC9BC,UAAU,GAGCszB,K,8qBCVTxzB,EAAyB,SAAHrC,GAClBA,EAARuC,SACUvC,EAAV+P,WACQ/P,EAARyH,SACazH,EAAb6I,cACS7I,EAATsB,UACStB,EAATo/C,UACap/C,EAAbsQ,cACStQ,EAAToP,UACepP,EAAfu9H,gBACKv9H,EAALsD,MACQtD,EAARwL,SACIxL,EAAJ2uB,KACM3uB,EAAN2Q,OACM3Q,EAAN0B,OACO1B,EAAP4rB,QACQ5rB,EAARuB,SACQvB,EAAR41B,SACM51B,EAANywC,OACWzwC,EAAXw9H,YACMx9H,EAANwB,OACSxB,EAATgR,UACehR,EAAfiR,gBACQ,OAAA7Q,YAAAJ,EAAAK,EACC,EAELwvB,EAAiB,SAAH9d,GAAYA,EAANvQ,OAA8C,IAAtC20B,EAAUpkB,EAAVokB,WAAYipB,EAASrtC,EAATqtC,UAAc36C,EAAIrE,YAAA2R,EAAAK,GACxD1Q,EAASurC,YAAiBxoC,GAGhC,IAF4Bw2B,aAAY,SAAC5tB,GAAK,MAAsD,qBAA1CA,EAAM2a,MAAMinC,UAAUxqD,EAAKuoB,UAA0B,IAG7G,MAAM,IAAIhf,MAAM,sCAAD9L,OACyBuC,EAAKuoB,UAAS,oDAAA9qB,OAAmDuC,EAAKuoB,UAAS,OAIzH,OAAkC,MAA3BhrB,cAAIN,EAAQy0B,GACjBipB,EACEz+C,cAACC,IAAU,CAACG,UAAU,OAAOF,QAAQ,QAAOZ,SACzCm/C,IAED,KAEJz+C,cAAC88H,EAAsBr7H,wBAAA,GAAKqC,GAAI,IAAE/C,OAAQA,EAAQF,OAAQ20B,IAE9D,EAuBAtG,EAAevtB,aAAe,CAC5BC,UAAU,EACVY,QAAS,CAAC,EACVwrB,KAAM,QAGR,IAAM8uG,EAAyB,SAAHrhG,GAAgD,IAA1Cn8B,EAAQm8B,EAARn8B,SAAUyB,EAAM06B,EAAN16B,OAAQF,EAAM46B,EAAN56B,OAAWI,EAAKxB,YAAAg8B,EAAA/oB,GAClE,GAAiC,IAA7BjK,WAASimD,MAAMpvD,GACjB,MAAM,IAAI+N,MAAM,gDAElB,IAAQvG,EAAkC7F,EAAlC6F,SAAUlG,EAAwBK,EAAxBL,SAAUyrB,EAAcprB,EAAdorB,UAEtB4B,EAAmBC,YAAmBzsB,wBAAC,CAAC,EACzCR,GAAK,IACRL,WACAG,SACAF,SACAiG,cAGF,OACE9G,cAACwsB,IAAuB,CAAClrB,MAAO+qB,EAAU/sB,SACxCU,cAAC+8H,EAAsBt7H,oCAAA,GACjBR,GACA+7H,YAAa,CACf3wG,YACApoB,GAAI5C,cAAIN,EAAQF,MAChB,IACFotB,iBAAkBA,EAAiB3uB,SAClCA,MAIT,EAEMuC,EAAYC,aAAW,SAACC,GAAK,MAAM,CACvCisB,KAAM,CACJ7tB,MAAO4B,EAAMyE,QAAQ21B,QAAQhmB,MAEhC,IAEKpN,EAAkB,SAAC4B,GAAC,OAAKA,EAAE5B,iBAAiB,EAE5Ck0H,EAAqB,SAAHv/F,GAiBjB,IAhBL52B,EAAQ42B,EAAR52B,SACAxH,EAAQo+B,EAARp+B,SACAqB,EAAS+8B,EAAT/8B,UAEA0D,GADwBq5B,EAAxBl7B,QACKk7B,EAALr5B,OACA2mB,EAAM0S,EAAN1S,OAGAqB,GAFOqR,EAAP9lB,QACM8lB,EAAN38B,OACS28B,EAATrR,WACAkgB,EAAe7O,EAAf6O,gBACAthB,EAAOyS,EAAPzS,QAEAgD,GADQyP,EAAR98B,SACgB88B,EAAhBzP,kBACMivG,GAAAx/F,EAAN78B,OAAM68B,EACNptB,wBAAe,IAAA4sH,GAAQA,EACpBp5H,EAAIrE,YAAAi+B,EAAAy/F,GAED36H,EAAUX,IAEhB,OAAIwC,EAEArE,cAAC0iF,IAAS,CACR,oBAAmBr+E,EAAMmO,QAAUnO,EAAMmO,QAAUnO,EACnDyD,KAAK,eACL3H,MAAM,QACNsK,SAAS,UAIVugB,EAGAuhB,EAIDte,EAEAjuB,cAACm+C,IAAqB,CAAC78C,MAAOirC,EAAgBjtC,SAC5CU,cAACK,IAAI,CAACd,GAAI0uB,EAAkBttB,UAAWA,EAAWwI,QAASJ,EAAgBzJ,SACxE8G,uBAAaqC,WAASijB,KAAKpsB,GAASmC,YAAA,CACnCd,UAAW6B,EAAQwrB,KACnBjtB,OAAQwrC,EACRthB,UACArqB,SAAUyrB,EACVvlB,WACAwJ,mBACG5O,EAAuBoC,SAQlC9D,cAACm+C,IAAqB,CAAC78C,MAAOirC,EAAgBjtC,SAC3C8G,uBAAaqC,WAASijB,KAAKpsB,GAASmC,YAAA,CACnCV,OAAQwrC,EACR3rC,SAAUyrB,EACVvlB,WACAwJ,mBACG5O,EAAuBoC,OA5BvB,KAHA9D,cAACo9H,IAAc,GAmC1B,EAEML,EAAyBlwH,eAAKowH,GAErB/tG,K,mJCvLTmuG,EAAgB,SAACv2H,EAAU7C,EAAIuL,GACnC,IAAMuqH,EAAWvqH,EAAK5P,KAAKurC,MAAM,KAAKmyF,UAAU,GAChD,MAAM,GAAN/7H,OAAUwwD,IAAW,UAAAxwD,OAASw4H,EAChC,EAEMwD,EAAiB,SAACz2H,EAAU7C,EAAIuL,GACpC,IAAMuqH,EAAWvqH,EAAK5P,KAAKurC,MAAM,KAAKmyF,UAAU,GAChD,MAAM,GAAN/7H,OAAUuwD,IAAsB,UAAAvwD,OAASw4H,EAC3C,EAmBenmE,IAjBe,SAAC3yD,GAC7B,IAAQL,EAAqBK,EAArBL,SAAUG,EAAWE,EAAXF,OACZqpB,EAAgB,OAANrpB,QAAM,IAANA,OAAM,EAANA,EAAQqpB,QAExB,OACE5lB,eAACyD,IAAUxG,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAClBiqB,IAAYI,IAAI,SAAU/oB,IAAaZ,cAACy0C,IAAoB,IAC5DlrB,IAAYI,IAAI,SAAU/oB,IAAaZ,cAAC00C,IAAoB,IAC5DnrB,IAAYI,IAAI,SAAU/oB,IAAasmH,IAAQsW,MAAM1pG,SAAe,OAAN/yB,QAAM,IAANA,OAAM,EAANA,EAAQ0F,OAASzG,cAAC+wF,IAA2B,CAACn6E,SAAUymH,EAAe/yH,OAAO,SAAS0mF,IAAI,aACzJznE,IAAYI,IAAI,SAAU/oB,IAAasmH,IAAQ70B,OAAOv+D,SAAe,OAAN/yB,QAAM,IAANA,OAAM,EAANA,EAAQ0F,OAASzG,cAAC+wF,IAA2B,CAACn6E,SAAU2mH,EAAgBjzH,OAAO,SAAS0mF,IAAI,yCAC3JznE,IAAYI,IAAI,SAAU/oB,KAAcwpB,GAAWpqB,cAAC20C,IAAsB,IAC1EprB,IAAYI,IAAI,UAAW/oB,IAAawpB,GAAWpqB,cAACid,IAAuB,IAC3EsM,IAAYI,IAAI,UAAW/oB,IAAawpB,GAAWpqB,cAAC4a,IAAsB,OAGjF,C,mPC5BewC,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,kmBAGpD,ECEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,8GAGpD,ECEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,mUAGpD,E,yECEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,iGAGpD,E,4GCGeF,MATf,SAAcnc,GACZ,OACEuD,eAAC6Y,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,yFAAyFmgH,YAAY,OACnJz9H,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,uKAGpD,E,mBCCeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,0CAGpD,ECEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,2eAGpD,ECIeF,MAVf,SAAcnc,GACZ,OACEuD,eAAC6Y,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUmsF,YAAY,KAAKngH,EAAE,0KAC/Dtd,cAAA,QAAMy9H,YAAY,KAAKngH,EAAE,+BACzBtd,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,0EAGpD,ECAeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,wRAGd,E,SCEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,sFAGd,ECEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,yDAGd,E,kBCEeF,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,oNAGd,EC4Bay6D,GAAQ,CACjB,CAAE9zE,GAAI,YAAa9B,KAAM,uCAAUgI,KAAMnK,cAAC+jC,IAAS,KACnD,CAAE9/B,GAAI,UAAW9B,KAAM,+DAAcgI,KAAMnK,cAAC09H,IAAO,KACnD,CAAEz5H,GAAI,UAAW9B,KAAM,6CAAWgI,KAAMnK,cAAC29H,IAAO,KAChD,CAAE15H,GAAI,YAAa9B,KAAM,mDAAYgI,KAAMnK,cAAC49H,IAAS,KACrD,CAAE35H,GAAI,eAAgB9B,KAAM,6CAAWgI,KAAMnK,cAAC69H,IAAY,KAC1D,CAAE55H,GAAI,YAAa9B,KAAM,sEAAgBgI,KAAMnK,cAAC89H,IAAS,KACzD,CAAE75H,GAAI,UAAW9B,KAAM,qBAAOgI,KAAMnK,cAAC+9H,EAAO,KAC5C,CAAE95H,GAAI,UAAW9B,KAAM,qBAAOgI,KAAMnK,cAACg+H,EAAO,KAC5C,CAAE/5H,GAAI,eAAgB9B,KAAM,oGAAqBgI,KAAMnK,cAACi+H,EAAY,KACpE,CAAEh6H,GAAI,YAAa9B,KAAM,2BAAQgI,KAAMnK,cAACk+H,IAAS,KACjD,CAAEj6H,GAAI,eAAgB9B,KAAM,gHAAuBgI,KAAMnK,cAACm+H,IAAY,KACtE,CAAEl6H,GAAI,iBAAkB9B,KAAM,yDAAagI,KAAMnK,cAACsvB,IAAc,KAChE,CAAErrB,GAAI,kBAAmB9B,KAAM,6CAAWgI,KAAMnK,cAACo+H,IAAe,KAChE,CAAEn6H,GAAI,gBAAiB9B,KAAM,uCAAUgI,KAAMnK,cAAC8tB,IAAa,KAC3D,CAAE7pB,GAAI,SAAU9B,KAAM,gHAAuBgI,KAAMnK,cAACq+H,EAAM,KAC1D,CAAEp6H,GAAI,YAAa9B,KAAM,6CAAWgI,KAAMnK,cAACwwB,IAAS,KACpD,CAAEvsB,GAAI,aAAc9B,KAAM,iCAASgI,KAAMnK,cAACukC,IAAU,KACpD,CAAEtgC,GAAI,YAAa9B,KAAM,mDAAYgI,KAAMnK,cAACs+H,IAAS,KACrD,CAAEr6H,GAAI,WAAY9B,KAAM,uCAAUgI,KAAMnK,cAACu+H,IAAQ,KACjD,CAAEt6H,GAAI,UAAW9B,KAAM,gEAAegI,KAAMnK,cAACu2F,IAAO,KACpD,CAAEtyF,GAAI,iBAAkB9B,KAAM,iCAASgI,KAAMnK,cAACw+H,IAAc,KAC5D,CAAEv6H,GAAI,gBAAiB9B,KAAM,uCAAUgI,KAAMnK,cAACw1C,IAAa,MAIlDipF,GAAe,CACxB,CAAEx6H,GAAI,iBAAkB9B,KAAM,yDAAagI,KAAMnK,cAACsvB,IAAc,KAChE,CAAErrB,GAAI,kBAAmB9B,KAAM,6CAAWgI,KAAMnK,cAACo+H,IAAe,KAChE,CAAEn6H,GAAI,YAAa9B,KAAM,6CAAWgI,KAAMnK,cAACwwB,IAAS,KACpD,CAAEvsB,GAAI,aAAc9B,KAAM,iCAASgI,KAAMnK,cAACukC,IAAU,KACpD,CAAEtgC,GAAI,YAAa9B,KAAM,mDAAYgI,KAAMnK,cAACs+H,IAAS,KACrD,CAAEr6H,GAAI,WAAY9B,KAAM,uCAAUgI,KAAMnK,cAACu+H,IAAQ,KACjD,CAAEt6H,GAAI,iBAAkB9B,KAAM,iCAASgI,KAAMnK,cAACw+H,IAAc,KAE5D,CAAEv6H,GAAI,gBAAiB9B,KAAM,uCAAUgI,KAAMnK,cAACw1C,IAAa,KAC3D,CAAEvxC,GAAI,YAAa9B,KAAM,sHAAwBgI,KAAMnK,cAAC0+H,EAAS,KACjE,CAAEz6H,GAAI,cAAe9B,KAAM,6CAAWgI,KAAMnK,cAAC2+H,IAAW,KACxD,CAAE16H,GAAI,iBAAkB9B,KAAM,mEAAkBgI,KAAMnK,cAAC4+H,EAAc,KACrE,CAAE36H,GAAI,eAAgB9B,KAAM,mEAAkBgI,KAAMnK,cAAC6+H,EAAY,KACjE,CAAE56H,GAAI,gBAAiB9B,KAAM,wFAAmBgI,KAAMnK,cAAC8+H,EAAa,KACpE,CAAE76H,GAAI,eAAgB9B,KAAM,0CAAkBgI,KAAMnK,cAAC++H,EAAY,KACjE,CAAE96H,GAAI,UAAW9B,KAAM,gEAAegI,KAAMnK,cAACu2F,IAAO,KACpD,CAAEtyF,GAAI,YAAa9B,KAAM,4EAAiBgI,KAAMnK,cAACk+H,IAAS,KAC1D,CAAEj6H,GAAI,iBAAkB9B,KAAM,wFAAmBgI,KAAMnK,cAACg/H,IAAc,KACtE,CAAE/6H,GAAI,kBAAmB9B,KAAM,yDAAagI,KAAMnK,cAACi/H,EAAe,KAClE,CAAEh7H,GAAI,aAAc9B,KAAM,uCAAUgI,KAAMnK,cAACk/H,EAAU,KACrD,CAAEj7H,GAAI,aAAc9B,KAAM,iFAAiBgI,KAAMnK,cAACm/H,IAAU,KAC5D,CAAEl7H,GAAI,gBAAiB9B,KAAM,6CAAWgI,KAAMnK,cAACo/H,EAAa,K,uCCevChsH,E,8YC9FnBvR,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,SAAAjH,GAAQ,MAAQ,CAClBgP,WADUhP,EAALc,MAELoO,MAAO,GACPiD,OAAQ,GACRsxC,aAAc,EACdjb,OAAQ,UACRkgD,QAAS,OACZ,EACDllC,MAAO,SAAAzxC,GAAA,IAAGjR,EAAKiR,EAALjR,MAAK,MAAQ,CACnBo3B,UAAU,WAADh2B,OAAapB,GACzB,EACJ,IAoCc0hC,yBA/BO,SAAHpG,GAKD,IAJdt7B,EAAKs7B,EAALt7B,MAAKk/H,EAAA5jG,EACLtyB,eAAO,IAAAk2H,EAAG,WAAQ,EAACA,EACnBC,EAAO7jG,EAAP6jG,QAAOC,EAAA9jG,EACPz2B,aAAK,IAAAu6H,EAAGp/H,EAAKo/H,EACb18E,EAAKpnB,EAALonB,MAEMrgD,EAAUX,EAAU,CAAE1B,UAKtBq/H,EAAiB,CAAC,EAKxB,OAJIF,IACAE,EAAeC,YAJC,SAAA90H,GAAC,OAAI20H,EAAQn/H,EAAOwK,EAAE,GAQtC3K,cAAA,MAAAyB,YAAA,CACId,UAAWkE,IAAWrC,EAAQ8D,KAAIkO,YAAA,GAC7BhS,EAAQqgD,MAAQA,IAErB15C,QAdY,SAAAwB,GAAC,OAAIxB,EAAQhJ,EAAOwK,EAAE,EAelC3F,MAAOA,EACP29B,SAAU,EACVinD,UAhBc,SAAAj/E,GAAC,OAXb,KAWiBA,EAAE+0H,SAAqBv2H,EAAQhJ,EAAOwK,EAAE,GAiBvD60H,GAGhB,I,mBDvCM39H,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF,EAEJ4/C,KAAM,CACF53C,QAAS,OACTqxH,oBAAqB,kBACrBC,iBAAkB,GAClBC,QAAS,GAEbC,OAAQ,CACJvxH,MAAO,GACPiD,OAAQ,GACRuuH,MAAO,OACPj9E,aAAc,EACdjgD,OAAQ,eAEZb,MAAO,CACHuM,MAAO,KAEd,IAEYyxH,EAAc,SAAH3gI,GAMjB,IALH0D,EAAQ1D,EAAR0D,SACAk9H,EAAa5gI,EAAb4gI,cACA7sH,EAAM/T,EAAN+T,OACAzS,EAAStB,EAATsB,UAGM6B,GAFHnD,EAAHk6E,IAEgB13E,KAGVq+H,EAAe,SAACC,EAASr3H,GACvBs3H,qBAAWD,IACXp9H,EAAS,CACLw2E,IAAK4mD,EACLt/H,OAAQ,OACTiI,EAGX,EAeA,OACI9I,cAAC6sB,IAAK,CAAClsB,UAAS,GAAAY,OAAKiB,EAAQ8D,KAAI,KAAA/E,OAAIZ,GAAYrB,SAC7CU,cAAC2uB,IAAW,CAAChuB,UAAW6B,EAAQ0jD,KAAK5mD,SAChC+F,IAAI+N,GAAQ,SAACqsD,EAAGnkB,GACb,OACIt7C,cAACqgI,EAAM,CAEHlgI,MAAOs/D,EACP8Z,IAAK9Z,EACLt2D,QAAS+2H,EACTZ,QAASW,EACTK,WAAY,CACR/oG,UAAU,WAADh2B,OAAak+D,KANrBnkB,EAUjB,OAchB,EAYA0kF,EAAYr+H,aAAe,CACvByR,QAXqBA,EAWG,CAAC6mB,IAAKkrE,IAAMH,IAAQI,IAAYC,IAAQrhE,IAAMu8F,IAAWC,IAAMl8F,IAAMH,IAAOs8F,IAAYC,IAAMC,IAAQn8F,IAAOsgE,IAAQhrE,IAAY8mG,IAAOC,IAAUn6H,KAVtJ0M,EAAOnI,QAAO,SAACC,EAAK/K,GACpC,IAAM2gI,EAAa,CAAC3gI,EAAM,KAAQA,EAAM,KAAQA,EAAM,KAAQA,EAAM,KAAQA,EAAM,KAAQA,EAAM,KAAQA,EAAM,KAAQA,EAAM,KAAQA,EAAM,MAE1I,MAAM,GAANoB,OAAA6J,YAAWF,GAAQ41H,EACvB,GAAG,MA8BQC,2BAAUf,G,kBEtEVgB,GAzDY,SAAH3hI,GAIjB,IAHH4E,EAAE5E,EAAF4E,GACAjC,EAAK3C,EAAL2C,MAIA+P,GAHOtS,YAAAJ,EAAAK,IAGyB2I,mBAAS,OAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GAgB5B,OACIxN,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIU,cAACkJ,IAAU,CACPC,QAjBO,SAACL,GAChBA,EAAM6X,iBACNnY,EAAYM,EAAMM,cACtB,EAeYC,KAAK,QACL,mBAAkBpF,EAAG3E,SAErBU,cAACihI,IAAW,CAAC7oH,MAAO,CAAEjY,MAAO6B,EAAMV,OAASmJ,SAAS,YAEzDzK,cAACypF,IAAO,CACJxlF,GAAIA,EACJ2E,KAAM7C,QAAQwC,GACd24H,kBAAkB,EAClB34H,SAAUA,EACViB,QAvBQ,WAChBhB,EAAY,KAChB,EAsBYq8B,aAAc,CACVC,SAAU,SACVC,WAAY,UAEhBk4D,gBAAiB,CACbn4D,SAAU,MACVC,WAAY,UACdzlC,SAEFU,cAACggI,GAAW,CACR7/H,MAAO6B,EAAMV,MACbyB,SA/BK,SAAHqO,GAAiB,IAAXmoE,EAAGnoE,EAAHmoE,IACpBv3E,EAAMe,SAASw2E,GACf/wE,EAAY,KAChB,QAkCJ,E,mKCiDe+xE,GAtGI,SAAHl7E,GAiBT,IAhBHoD,EAAMpD,EAANoD,OACAC,EAAUrD,EAAVqD,WACAC,EAAKtD,EAALsD,MAAKw+H,EAAA9hI,EACLwD,cAAM,IAAAs+H,EAAG,QAAOA,EAChBr+H,EAAMzD,EAANyD,OACAE,EAAO3D,EAAP2D,QACAD,EAAQ1D,EAAR0D,SACAE,EAAO5D,EAAP4D,QACArC,EAAQvB,EAARuB,SACAC,EAAMxB,EAANwB,OACAuC,EAAQ/D,EAAR+D,SAAQg+H,EAAA/hI,EACRa,eAAO,IAAAkhI,EAAG,SAAQA,EAClBjgG,EAAU9hC,EAAV8hC,WACAmB,EAAUjjC,EAAVijC,WACA3hC,EAAStB,EAATsB,UACGmD,EAAIrE,YAAAJ,EAAAK,IAGPqE,EAKIC,YAAQvC,YAAC,CACTgB,SACAK,SACAC,WACAC,UACApC,WACAC,SACAuC,YACGU,IAZHG,EAAEF,EAAFE,GACAjC,EAAK+B,EAAL/B,MACAkC,EAAUH,EAAVG,WAAUC,EAAAJ,EACVK,KAAQC,EAAKF,EAALE,MAAOE,EAAOJ,EAAPI,QAYnBwN,EAAgC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAA/BC,EAAA,GAAaA,EAAA,GAkB5B,OACIhS,cAACyE,IAAShD,oCAAA,CACNwC,GAAIA,GACAjC,GAAK,IACTrB,UAAWA,EACXT,QAASA,EACTmE,SAAUE,IAAWF,GACrB3B,WACI1C,cAAC4E,IAAe,CACZL,QAASA,EACTF,MAAOA,EACP3B,WAAYA,IAGpBC,MACI3C,cAAC2E,IAAU,CACPhC,MAAOA,EACP9B,OAAQA,EACRD,SAAUA,EACVsD,WAAYA,IAGpBrB,OAAQA,EACRy/B,WAAU7gC,wBAAA,GACH0/B,GAAU,IACbyB,aAAwB,OAAVN,QAAU,IAAVA,KAAYM,aAAex8B,uBAAak8B,EAAWM,aAAc,CAC3EtjC,SAAS,CAAEU,cAACghI,GAAkB,CAAC/8H,GAAIA,EAAIjC,MAAOA,KAAST,OAAA6J,YAAKk3B,EAAWM,aAAa3hC,MAAM3B,aAE1FU,cAAC6iC,IAAc,CAAC/0B,SAAS,MAAKxO,SAC1BU,cAACghI,GAAkB,CAAC/8H,GAAIA,EAAIjC,MAAOA,SAY3CiB,GACA6B,YAAuBhB,IAIvC,EC1Gey2E,M,+ECIT8mD,EAAYzkH,YAAGC,MAAAC,YAAA,gfAwCNsuF,IAnBD,SAACt4D,GACX,IAAQ7uC,EAAa6uC,EAAb7uC,GAAIuL,EAASsjC,EAATtjC,KAGZ,OAAOujC,IAAcz5B,QAAQ+nH,EAAW,CACpCr/H,MAAO,CACHiC,KACA3C,MAAOkO,EAAKlO,SAEjB8L,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EACVhY,EAAe,OAARsU,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsBhY,KACnC,MAAO,CACHzrB,KAAM49B,YAAiBnS,GAE/B,IAAGiY,MAAMC,IACb,C,qTClCM1uC,EAAYoI,gBAAK,SAAA5L,GACnB,IAAQN,EAAgDM,EAAhDN,UAAWE,EAAqCI,EAArCJ,OAAQ49C,EAA6Bx9C,EAA7Bw9C,UAAW6iF,EAAkBrgI,EAAlBqgI,KAASx9H,EAAIrE,YAAKwB,EAAKvB,GACvDqB,EAASurC,YAAiBrrC,GAC1BK,EAAQD,IAAIN,EAAQF,GACpBmE,EAAQ3D,IAAIN,EAAQugI,GAE1B,OACIthI,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,EACXqE,MAAOA,GACHtD,YAAuBoC,IAAK,IAAAxE,SAEtB,MAATgC,GAAkC,kBAAVA,EACnB8F,KAAKC,UAAU/F,GACfA,GAASm9C,IAG3B,IAGAh6C,EAAUwd,YAAc,YAExBxd,EAAU9C,aAAe,CACrBC,UAAU,GAIC6C,Q,8ECpBT5C,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACrC4zF,gBAAiB,CACfttE,YAAa,GAEfutE,eAAgB,CACd/pE,aAAc,GAEjB,GAAG,CAAE1pB,KAAM,oBAGCo/H,EAAwB,SAACtgI,GACpC,IAAMuB,EAAUwyB,cACV8gE,EAAmBj0F,IACnBqD,EAAUjE,EAAMiE,SAAW,CAAC,iBAAkB,SAEpD,OACEV,eAACwrC,IAAQvuC,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAChB4F,EAAQ4uB,SAAS,OAAS9zB,cAACyE,IAAS,CAAC5D,OAAO,OAC5CqE,EAAQ4uB,SAAS,eAAiB9zB,cAACyE,IAAS,CAAC5D,OAAO,aAAa8B,MAAM,6BAA6BsyB,UAAU,IAC9G/vB,EAAQ4uB,SAAS,mBAAqB9zB,cAACyE,IAAS,CAAC5D,OAAO,iBAAiB8B,MAAM,iCAAiCsyB,UAAU,IAC1H/vB,EAAQ4uB,SAAS,UAAY9zB,cAAC23D,IAAa,CAAC92D,OAAO,UACnDqE,EAAQ4uB,SAAS,YAAc9zB,cAAC43D,IAAc,CAAC/2D,OAAO,UAAUqH,cAAerD,IAAWrC,EAAQutC,aAAcvtC,EAAQytC,cACxH/qC,EAAQ4uB,SAAS,0BAA4B9zB,cAAC+1F,IAAmB,CAACl1F,OAAO,wBAAwB8B,MAAM,yCAAyCuF,cAAerD,IAAWrC,EAAQytC,YAAahb,UAAU,IACzM/vB,EAAQ4uB,SAAS,SAAW9zB,cAACg2F,IAAY,CAACn1F,OAAO,OAAOqH,cAAe1F,EAAQutC,aAAc9a,UAAU,IACvG/vB,EAAQ4uB,SAAS,cAAgB9zB,cAACgvB,IAAS,CAACnuB,OAAO,YAAY4qB,QAAM,EAACxoB,QAASgyC,IAAiB/sC,cAAe1F,EAAQutC,eACxH/vC,cAAC63D,IAAoB,CAAC3vD,cAAerD,IAAWrC,EAAQutC,aAAcvtC,EAAQytC,WAAY6lD,EAAiBF,kBAC1GrsE,IAAYI,IAAI,QAAS,QAAU3pB,cAAC83D,IAAc,CAAC5vD,cAAerD,IAAWrC,EAAQutC,aAAcvtC,EAAQytC,WAAY6lD,EAAiBH,sBAG/I,EAEa6rC,EAAqB,SAACvgI,GACjC,IAAMuB,EAAUwyB,cAChB,OACExwB,eAACwrC,IAAQvuC,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACjBU,cAACyhI,EAAiB,CAAC5gI,OAAO,iBAAiB8B,MAAM,iCAAiC2+H,KAAK,wBAAwBrsG,UAAU,EAAO2nG,gBAAiBp6H,EAAQk/H,gBACzJ1hI,cAAC23D,IAAa,CAAC92D,OAAO,QAAQ+7H,gBAAiBp6H,EAAQk/H,mBAG7D,EAEa7nE,EAA2B,SAAC54D,GACvC,IAAMuB,EAAUwyB,cACV8gE,EAAmBj0F,IACzB,OACE2C,eAACwrC,IAAQvuC,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CACjBU,cAACyE,IAAS,CAAC5D,OAAO,OAClBb,cAACyE,IAAS,CAAC5D,OAAO,iBAAiB8B,MAAM,iCAAiCsyB,UAAU,IACpFj1B,cAAC23D,IAAa,CAAC92D,OAAO,UACtBb,cAAC43D,IAAc,CAAC/2D,OAAO,UAAUqH,cAAerD,IAAWrC,EAAQutC,aAAcvtC,EAAQytC,cACzFjwC,cAAC+1F,IAAmB,CAACl1F,OAAO,wBAAwB8B,MAAM,yCAAyCuF,cAAerD,IAAWrC,EAAQytC,YAAahb,UAAU,IAC5Jj1B,cAACg2F,IAAY,CAACn1F,OAAO,OAAOqH,cAAe1F,EAAQutC,aAAc9a,UAAU,IAC3Ej1B,cAACgvB,IAAS,CAACnuB,OAAO,YAAY4qB,QAAM,EAACxoB,QAASgyC,IAAiB/sC,cAAe1F,EAAQutC,eACtF/vC,cAAC63D,IAAoB,CAAC3vD,cAAerD,IAAWrC,EAAQutC,aAAcvtC,EAAQytC,WAAY6lD,EAAiBF,kBAC1GrsE,IAAYI,IAAI,QAAS,QAAU3pB,cAAC83D,IAAc,CAAC5vD,cAAerD,IAAWrC,EAAQutC,aAAcvtC,EAAQytC,WAAY6lD,EAAiBH,sBAG/I,C,wOCrEM9zF,EAAYC,aAAW,SAAAC,GACzB,MAAO,CACHuE,KAAM,CACFwH,SAAU,YAEdw3F,OAAQ,SAAAjmG,GAAA,IAAGc,EAAKd,EAALc,MAAK,MAAQ,CACpBA,MAAO4B,EAAMyE,QAAQrG,GAAOgW,KAC/B,EACDwrH,WAAY,SAAAvwH,GAAA,IAAGjR,EAAKiR,EAALjR,MAAK,MAAQ,CACxBA,MAAO4B,EAAMyE,QAAQG,gBAAgB5E,EAAMyE,QAAQrG,GAAOgW,MAC1DrI,SAAU,WACVwU,KAAM,GACND,IAAK,GACR,EAET,GAAG,CAAElgB,KAAM,oBAELy/H,EAAgB,SAAHnmG,GAAgC,IAA1Bn8B,EAAQm8B,EAARn8B,SAAa2B,EAAKxB,YAAAg8B,EAAA/7B,GACjC8C,EAAUX,EAAUZ,GAE1B,OACIuD,eAAA,OAAK7D,UAAW6B,EAAQ8D,KAAKhH,SAAA,CACzBU,cAAA,OAAKW,UAAW6B,EAAQ8iG,OAAOhmG,SAC3BkF,eAAA,OAAK+J,MAAM,OAAOiD,OAAO,OAAOqwH,QAAQ,YAAYC,MAAM,6BAA6BC,WAAW,+BAA8BziI,SAAA,CAC5HkF,eAAA,QAAAlF,SAAA,CACIkF,eAAA,UAAQ4/C,EAAE,SAASE,EAAE,SAAS/1C,MAAM,SAASiD,OAAO,SAASwwH,YAAY,oBAAoB/9H,GAAG,IAAG3E,SAAA,CAC/FU,cAAA,kBAAgBokB,GAAG,gBAAgB69G,aAAa,MAChDjiI,cAAA,YAAUkiI,GAAG,MACbliI,cAAA,uBAAAV,SACIU,cAAA,WAASyG,KAAK,SAAS07H,MAAM,YAGrCniI,cAAA,QAAMsd,EAAE,iOAAiOrZ,GAAG,SAEhPO,eAAA,KAAG40E,KAAK,OAAO/nC,SAAS,UAAS/xC,SAAA,CAC7BkF,eAAA,KAAG6sC,SAAS,UAAUzuB,UAAU,iBAAiBw2D,KAAK,eAAc95E,SAAA,CAChEU,cAAA,OAAK8F,OAAO,UAAUs8H,UAAU,OAChCpiI,cAAA,OAAKoiI,UAAU,UAEnBpiI,cAAA,QAAMsd,EAAE,8DAA8D87D,KAAK,OAAO/nC,SAAS,YAC3FrxC,cAAA,QAAMsd,EAAE,+CAA+C87D,KAAK,yBAIxEp5E,cAAA,OAAKW,UAAW6B,EAAQm/H,WAAWriI,SAC9BA,MAKjB,EAEAsiI,EAAcjgI,aAAe,CACzBxB,MAAO,WAGIyhI,Q,2BChDTS,EAAW,CAAC,EAGLtmD,EAAoB,SAAC96E,GAC9B,IAAMc,EAAQ4P,cACR0/G,EAAYtvH,EAAMyE,QAAQC,KAC1BlB,EAAG,kBAAAhE,OAAqB8vH,GAG9B,GAAIgR,EAAS9R,eAAehrH,GAExB,OADoB88H,EAAS98H,GAG7B,IAAM+8H,EAAWC,IAAeC,eAC5BxiI,cAAC2oB,IAAa,CAAC5mB,MAAOA,EAAMzC,SACxBU,cAAC4hI,EAAangI,wBAAA,GAAKR,GAAK,IAAA3B,SACpBU,cAAC+jC,IAAS,UAKhB0+F,EAAc,IAAIC,IAAQC,QAAQ,CACpCC,KAAMN,EACN3hI,UAAW,GACXkiI,SAAUH,IAAQI,MAAM,GAAI,IAAI,GAChCC,WAAYL,IAAQI,MAAM,GAAI,IAAI,GAClCE,YAAaN,IAAQI,MAAM,GAAI,IAAI,KAKvC,OAFAT,EAAS98H,GAAOk9H,EAETA,CAKf,EAEaQ,EAAyB,SAAChiI,GACnC,IAAQF,EAAkBE,EAAlBF,OAAQZ,EAAUc,EAAVd,MACV4B,EAAQ4P,cACR0/G,EAAYtvH,EAAMyE,QAAQC,KAC1B0D,EAAa,OAANpJ,QAAM,IAANA,KAAQoJ,KAAOpJ,EAAOoJ,KAAO,YACpC5E,EAAG,GAAAhE,OAAM8vH,GAAS9vH,OAAG4I,GAAI5I,OAAGpB,GAoDlC,GAAIkiI,EAAS9R,eAAehrH,GAExB,OADoB88H,EAAS98H,GAI7B,IAAM+8H,EAAWC,IAAeC,eAC5BxiI,cAAC2oB,IAAa,CAAC5mB,MAAOA,EAAMzC,SACxBU,cAAC4hI,EAAa,CAACzhI,MAAOA,EAAMb,SACxBU,cAACw5D,IAAS,CAACz4D,OAAQ,CAAEoJ,QAAQtJ,OAAO,cAK1C4hI,EAAc,IAAIC,IAAQC,QAAQ,CACpCC,KAAMN,EACN3hI,UAAW,GACXkiI,SAAUH,IAAQI,MAAM,GAAI,IAAI,GAChCC,WAAYL,IAAQI,MAAM,GAAI,IAAI,GAClCE,YAAaN,IAAQI,MAAM,GAAI,IAAI,KAKvC,OAFAT,EAAS98H,GAAOk9H,EAETA,CAOf,EAEM5gI,EAAYC,aAAW,SAAAC,GAAK,IAAAmhI,EAAA,MAAK,CACnCC,OAAKD,EAAA,GAAA1uH,YAAA0uH,EACA,MAAQ,CACL/iI,MAAO4B,EAAMyE,QAAQ21B,QAAQhmB,OAChC3B,YAAA0uH,EACA,mCAAqC,CAClC70H,WAAYtM,EAAMyE,QAAQ6H,WAAWyd,MACrC7d,QAAS,UACZuG,YAAA0uH,EACA,uDAAyD,CACtD70H,WAAYtM,EAAMyE,QAAQ6H,WAAWyd,QACxCtX,YAAA0uH,EACA,2BAA6B,CAC1BrgI,OAAQ,UACXqgI,GAER,GAAG,CAAE/gI,KAAM,cA2CGgrF,IAvCG,SAAClsF,GAAW,IAADmiI,EAAAC,EACjBtiI,EAA0CE,EAA1CF,OAAQzB,EAAkC2B,EAAlC3B,SAAU6J,EAAwBlI,EAAxBkI,QAASm6H,EAAeriI,EAAfqiI,WAC7B9gI,EAAUX,IACViM,EAAW6tH,YAA4B,OAAN56H,QAAM,IAANA,GAAW,QAALqiI,EAANriI,EAAQ+rF,WAAG,IAAAs2C,OAAL,EAANA,EAAa9hI,OAE9CiiI,EAAoBC,YAAe11H,GAAU,SAACkM,EAAMC,GAAI,OAAK7S,KAAKC,UAAU2S,KAAU5S,KAAKC,UAAU4S,EAAK,IAE1GyG,EAActO,uBAAY,SAACtJ,GACtB,OAAPK,QAAO,IAAPA,KAAUL,EAAO/H,EACrB,GAAG,CAACoI,EAASpI,IAEb,IAAK+M,EAAU,OAAO,KACtB,IAAM2hF,EAAgB,OAAN1uF,QAAM,IAANA,GAAa,QAAPsiI,EAANtiI,EAAQ00G,aAAK,IAAA4tB,OAAP,EAANA,EAAe/hI,MAE/B,OACItB,cAACm+C,IAAqB,CAAC78C,MAAOP,EAAOzB,SACjCkF,eAACs3E,IAAMr6E,wBAAA,CACHqM,SAAUy1H,EACVp5H,KAAM84H,EAAuB,CAAEliI,SAAQZ,MAAOsvF,EAAU,QAAU,WAGlExrF,GAAIlD,EAAOkD,GACXlD,OAAQA,EACR0iI,cAAe,CACXnZ,MAAO5pG,IAEPzf,GAAK,IAAA3B,SAAA,CAETU,cAACg8E,IAAK,CAAC13D,UAAU,MAAMo/G,aAAa,EAAO/iI,UAAW6B,EAAQ2gI,MAAM7jI,SAC/D8G,uBAAaqC,WAASijB,KAAKpsB,GAAW,CACnCyB,aAGPuiI,GAAc9+H,eAACwE,IAAO,CAACsb,UAAU,OAAOuY,OAAQ,CAAC,IAAK,IAAK8mG,WAAS,EAAArkI,SAAA,CAAC,IAAQ,OAANyB,QAAM,IAANA,OAAM,EAANA,EAAQoB,KAAK,UAbhFstF,IAiBrB,C,6GClMam0C,EAAsBhnH,YAAGC,MAAAC,YAAA,qQ,GAoBVF,YAAG60B,MAAA30B,YAAA,+K,OCjBzB+mH,EAAqBjnH,YAAGC,MAAAC,YAAA,oRAW1B8mH,GAGSE,EAAwBlnH,YAAG60B,MAAA30B,YAAA,+TAiBlCinH,EAAY,CAChBv0H,KAAM,GACNoM,MAAO,GAGHooH,EAAW,eAAA3kI,EAAAka,YAAAC,cAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAoH,EAAAi1D,EAAAguD,EAAA3oF,EAAA,OAAA9hC,cAAAM,MAAA,SAAA6nD,GAAA,cAAAA,EAAA3nD,KAAA2nD,EAAA1nD,MAAA,OAErC+G,EAAO,EAELi1D,EAAS,CAAC,EAACguD,EAAAzqH,cAAAC,MAAA,SAAAwqH,IAAA,IAAAjxF,EAAAzD,EAAA20F,EAAA3+H,EAAAiK,EAAA,OAAAgK,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAGsB,OAArCL,EAAUuqH,eAAenjH,KAAOA,EAAKjH,EAAAE,KAAA,EACd84B,IAAcz5B,QAAQK,EAAOC,GAAW,KAAD,EAI9D,IAAWrU,KAJLgqC,EAAQx1B,EAAAI,KAER+pH,EAAcz+H,gBAAc,OAAR8pC,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,OAAN,EAARA,EAAgBxjC,KAAK0yB,OAAO,SAACjH,GAAI,OAAKC,YAAeD,EAAK9K,IAAI,IAGtF4d,cAAIkoC,EAAQ,CAAC1wE,EAAK,OAAQ2+H,EAAY3+H,GAAK4qB,MACrC3gB,EAAOnO,cAAI40E,EAAQ,CAAC1wE,EAAK,QAAS,KACnCwb,KAAItG,MAATjL,EAAIpE,YAAS84H,EAAY3+H,GAAKiK,OAC9Bu+B,cAAIkoC,EAAQ,CAAC1wE,EAAK,QAASiK,GAG+F,GAA5HoK,EAAU9T,OAAOuwD,OAAS1oD,OAAOD,KAAKw2H,GAAap+H,QAAO,SAAAP,GAAG,OAAI2+H,EAAY3+H,GAAKs2D,SAASuoE,WAAW,IAAE/+H,IAAIw1B,KACvE,GAAlCjhB,EAAU9T,OAAOuwD,OAAO1tD,OAAW,CAAAoR,EAAAE,KAAA,eAAAF,EAAAM,OAAA,yBAItC2G,IAAO,yBAAAjH,EAAAO,OAAA,GAAA2pH,EAAA,IAlBA3oF,EAAI,EAAE,KAAD,OAAEA,EAAI,IAAE,CAAAqmB,EAAA1nD,KAAA,gBAAA0nD,EAAA0iE,cAAAJ,IAAA,eAAC,GAAD,UAAAtiE,EAAAvC,GAAA,CAAAuC,EAAA1nD,KAAA,eAAA0nD,EAAAtnD,OAAA,mBAAEihC,IAAGqmB,EAAA1nD,KAAA,uBAAA0nD,EAAAtnD,OAAA,SAqBpB1M,OAAO4Q,OAAO03D,IAAO,yBAAAtU,EAAArnD,OAAA,GAAAZ,EAAA,KAC7B,gBA5BgBa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,KAgCXywD,EAAO,eAAAnqD,EAAAmI,YAAAC,cAAAC,MAAG,SAAAioD,EAAO5uB,GAAI,IAAA+rB,EAAA/4D,EAAAw+H,EAAA7pG,EAAA8pG,EAAA5lG,EAAA6lG,EAAAC,EAAA9oG,EAAA+oG,EAAAxiG,EAAAm0B,EAAA7mD,EAAAm1H,EAAArpF,EAAA,OAAA9hC,cAAAM,MAAA,SAAA8qH,GAAA,cAAAA,EAAA5qH,KAAA4qH,EAAA3qH,MAAA,OAIuC,GAJvC4kD,EACD/rB,EAAhBhtC,OAAWw+H,GAAXx+H,OAAM,IAAA+4D,EAAG,CAAC,EAACA,GACXpkC,eAAO,IAAA6pG,EAAG,GAAEA,EAAAC,EAAyCz+H,EAAvC64B,eAAO,IAAA4lG,EAAG,GAAEA,EAAAC,EAA2B1+H,EAAzB2+H,uBAAe,IAAAD,EAAG,GAAEA,EAElCz+H,QAAQ00B,EAAQ9xB,QAAUg2B,EAAQh2B,QAErC,CAADi8H,EAAA3qH,KAAA,eAAA2qH,EAAAvqH,OAAA,SAASnN,QAAQC,QAAQ42H,IAAU,OAEjC,GAAdpoG,EAAY,KACf8oG,EAAgB97H,OAAS,GAAC,CAAAi8H,EAAA3qH,KAAA,gBAAA2qH,EAAA3qH,KAAA,EACgB84B,IAAcz5B,QAAQwqH,EAAuB,CACtFv2H,IAAKk3H,IACJ,KAAD,EAAAC,EAAAE,EAAAzqH,KAFsB+nB,EAAKwiG,EAArBl1H,KAAQA,KAAQ0yB,MAIxBvG,EAAU5a,KAAItG,MAAdkhB,EAASvwB,YAAS82B,IAAO,QAGrBm0B,EAAS57B,EAAQp1B,IAAIw1B,KAErBrrB,EAAO,GAAEm1H,EAAAnrH,cAAAC,MAAA,SAAAkrH,IAAA,IAAAvnG,EAAA7E,EAAAssG,EAAC,OAADrrH,cAAAM,MAAA,SAAAgrH,GAAA,cAAAA,EAAA9qH,KAAA8qH,EAAA7qH,MAAA,OAEY,OAAnBmjB,EAASuB,EAAQ2c,GAAEwpF,EAAA7qH,KAAA,EACJ+pH,EAAYH,EAAoB,CACnD/9H,OAAQ,CACNuwD,UAEF8tE,eAAc1iI,wBAAA,GACT27B,GAAM,IACTve,QAAS,QAEV,KAAD,EARI0Z,EAAMusG,EAAA3qH,MAUN0qH,EAAqBxuE,EAAOhxD,KAAI,SAAC8qB,GAAG,IAAA40G,EAAA,MAAM,CAC9Cv1H,MAOG,QANDu1H,EAAAxsG,EAAOiL,MACL,SAACwhG,GAAU,OAETA,EAAW70G,IAAIA,KAAOA,EAAIA,KAE1B60G,EAAW70G,IAAIvvB,UAAYuvB,EAAIvvB,QAAQ,WAC1C,IAAAmkI,OAAA,EANDA,EAMGv1H,OAAQ,GACb2gB,IAAKA,EACN,KAEsB5O,MAAK,SAAC6iC,GAAC,OAAM,OAADA,QAAC,IAADA,OAAC,EAADA,EAAG50C,KAAK7G,QAAS,CAAC,KACnD6G,EAAKuR,KAAK,CACR9c,GAAG,GAAD1C,OAAK67B,EAAOC,cAAa,KAAA97B,OAAI67B,EAAOI,eACtCJ,SACA5tB,KAAMq1H,EACNlpG,cAEH,wBAAAmpG,EAAAxqH,OAAA,GAAAqqH,EAAA,IA/BMrpF,EAAI,EAAE,KAAD,QAAEA,EAAI3c,EAAQh2B,QAAM,CAAAi8H,EAAA3qH,KAAA,gBAAA2qH,EAAAP,cAAAM,IAAA,iBAAErpF,IAAGspF,EAAA3qH,KAAA,wBAAA2qH,EAAAvqH,OAAA,SAkChC,CACL7K,OACAoM,MAAOpM,EAAK7G,SACb,yBAAAi8H,EAAAtqH,OAAA,GAAAonD,EAAA,KACF,gBA1DY8U,GAAA,OAAAplE,EAAAqJ,MAAA,KAAA3P,UAAA,KA4DEywD,K,sVCzGA75D,IA7BgB,SAAHrC,GAChBA,EAARuC,SACUvC,EAAV+P,WACQ/P,EAARyH,SACazH,EAAb6I,cACS7I,EAATsB,UACStB,EAATo/C,UACap/C,EAAbsQ,cACStQ,EAAToP,UACepP,EAAfu9H,gBACKv9H,EAALsD,MACQtD,EAARwL,SACIxL,EAAJ2uB,KACM3uB,EAAN2Q,OACM3Q,EAAN0B,OACO1B,EAAP4rB,QACQ5rB,EAARuB,SACQvB,EAAR41B,SACM51B,EAANywC,OACWzwC,EAAXw9H,YACMx9H,EAANwB,OACSxB,EAATgR,UACehR,EAAfiR,gBACQjR,EAARiQ,SACWjQ,EAAX6rF,YACM7rF,EAANgH,OACQ,OAAA5G,YAAAJ,EAAAK,EACA,C,mCC3BZ,oBASe4V,IAJU,WAAH,OAAS9U,qBAAWgkG,IAAsB,C,mNCQ1D3iG,EAAYC,aACd,SAAAC,GAAK,MAAK,CACNu8B,QAAS,CACL9b,eAAgB,gBAChBL,OAAQ,EACR5b,gBAC2B,UAAvBxE,EAAMyE,QAAQC,KACR8uH,kBAAQxzH,EAAMyE,QAAQ21B,QAAQvX,MAAO,KACrCywG,iBAAOtzH,EAAMyE,QAAQ21B,QAAQzX,KAAM,IAC7CoD,UAAW/lB,EAAMG,QAAQ,GACzBsP,OAAQzP,EAAMG,QAAQ,GACtBi1B,WAAW,GAAD51B,OAAKQ,EAAMq1B,YAAYC,OAC7B,UACH,MAAA91B,OAAKQ,EAAMq1B,YAAYC,OAAO,gBAGnC4tG,WAAY,CACR78G,WAAYrmB,EAAMG,QAAQ,IAE9BwwH,QAAS,CAAC,EACVwS,UAAW,CACPp9G,UAAW,EACXtW,OAAQ,EACR02E,UAAW,UAEfljF,MAAKwP,YAAA,CACDlG,QAAS,OACTmU,WAAY,SACZ6U,KAAM,WACNxM,WAAY,UACX/oB,EAAM2gB,YAAYwF,KAAK,MAAQ,CAC5B4C,WAAY,IAGpB3gB,KAAM,CAEFkkB,YAAa,SAGpB,GACD,CAAElsB,KAAM,yBAyEGgjI,IAtEY,SAAClkI,GAMpBA,EAJAuB,QADJ,IACWsJ,EAIP7K,EAHA0B,aAAK,IAAAmJ,EAAG,yBAAwBA,EAChCxM,EAEA2B,EAFA3B,SACGwE,EAAIrE,YACPwB,EAAKvB,GACT4b,EAMIC,YAAeta,GALf6F,EAAQwU,EAARxU,SACA4U,EAAYJ,EAAZI,aACA9a,EAAQ0a,EAAR1a,SACA6b,EAAWnB,EAAXmB,YACAC,EAAepB,EAAfoB,gBAEEla,EAAUX,EAAUZ,GACpBC,EAAYC,cAElB,OACIqD,eAACwnB,IAAOvqB,wBAAA,CACJd,UAAWkE,IAAWrC,EAAQ87B,QAAO9pB,YAAA,GAChChS,EAAQ0iI,UAAmC,IAAvBzoH,EAAY9T,UAEjCqT,YAAsBlY,IAAK,IAAAxE,SAAA,CAG/BU,cAAA,OAAAV,SACIkF,eAAA,OAAK7D,UAAW6B,EAAQwC,MAAM1F,SAAA,CAC1BU,cAACkJ,IAAU,CACPvI,UAAW6B,EAAQ2H,KACnB,aAAYjJ,EAAU,sBACtB8D,MAAO9D,EAAU,sBACjBiI,QAASuT,EACTrT,KAAK,QAAO/J,SAEZU,cAACy9F,IAAS,CAAChzF,SAAS,YAExBzK,cAACC,IAAU,CAACE,MAAM,UAAUD,QAAQ,YAAWZ,SAC1C4B,EAAUyB,EAAO,CACdnB,EAAGmB,EACHsV,YAAawE,EAAY9T,gBAOzC3I,cAAA,OAAAV,SAEQmJ,WAASpD,IAAI/F,GAAU,SAAAmxC,GAAK,OACxB/mC,yBAAe+mC,GACTrqC,uBAAaqqC,EAAO,CAClB3pC,WACA4U,eACA9a,WACA6b,gBAEF,IAAI,SAMlC,C,gGCzFe2oH,IAjBS,SAAAnkI,GAIpB,OAHgBA,EAAMya,aAAa0O,QAI/B5lB,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC0yD,IAAiBjxD,YAAA,GAAKR,IACvBjB,cAAC2yD,IAAgBlxD,YAAA,CAACwV,UAAU,GAAWhW,OAG3CuD,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC4xB,IAAgBnwB,YAAA,GAAKR,IACtBjB,cAAC4yD,IAAgBnxD,YAAA,CAACyV,aAAa,cAAiBjW,MAG5D,C,sZCFMY,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCgb,cAAe,CAAC,EACnB,IAkEc21C,IAhEW,SAAHthD,GACXA,EAARtK,SAMe,IA7BWzH,EAwB1BuB,EAAQwQ,EAARxQ,SACS0qB,EAAela,EAAxB5O,QACA7B,EAASyQ,EAATzQ,UAEA8b,GADYrL,EAAZsK,aACWtK,EAAXqL,aACG3Y,EAAIrE,YAAA2R,EAAAK,GAED6F,EAAUC,cACVJ,EAASC,cACTqzE,EAAcC,cACdloF,EAAUX,EAAU,CAAEW,QAAS8oB,IAErC9T,EAAyCC,YACrC,CACIhR,KAAM,cACN7F,WACAmX,QAAS,CAAExK,IAAKkP,IAEpB,CACIvF,aAAc,WAEdJ,UAAW,WAEPK,EAAO,2BAA4B,OAAQ,CAAEc,YAAawE,EAAY9T,SAAU,GAChF8hF,EAAY7pF,GACZ0W,GACJ,EACAP,UAAW,SAAA1S,GACP8S,EACqB,kBAAV9S,EACDA,EACAA,EAAMmO,SAAW,6BACvB,UACA,CACIhR,EACqB,kBAAV6C,EACDA,EACAA,GAASA,EAAMmO,QACXnO,EAAMmO,aACNzH,IAGtBuM,GACJ,IAEPI,EAAA7R,YAAA2R,EAAA,GAjCM6tH,EAAiB3tH,EAAA,GAAIE,EAAOF,EAAA,GAAPE,QAmC5B,OACI5X,cAAC8f,IAAMre,wBAAA,CACH0H,QAASk8H,EACTltH,SAAUP,EACVjV,MAAM,oBACNhC,UAAS,qBAAAY,OAAuBiB,EAAQua,cAAa,KAAAxb,OAAIZ,MA5EvCtB,EA8EIyE,GA7E9BgD,SACOzH,EAAPmD,QACYnD,EAAZqc,aACYrc,EAAZ0gB,aACwB1gB,EAAxBsyD,yBACOtyD,EAAPif,QACKjf,EAALsD,MACQtD,EAAR+e,SACQ/e,EAARuB,SACMvB,EAANq3C,OACWr3C,EAAXod,YACQpd,EAAR4X,SACQ5X,EAARuX,SACavX,EAAbu5C,cACOn5C,YAAAJ,EAAAK,KA+D4B,IAAAJ,SAE3BU,cAACgd,IAAW,MAHR,SAOhB,C,oTC/EM0iC,EAAgB,SAACz+C,GACnB,IACIwB,EAcAxB,EAdAwB,OACAE,EAaA1B,EAbA0B,MAEAD,GAWAzB,EAZAwN,UAYAxN,EAXAyB,YACAI,EAUA7B,EAVA6B,OACAC,EASA9B,EATA8B,SACAC,EAQA/B,EARA+B,QACAC,EAOAhC,EAPAgC,QACAkV,EAMAlX,EANAkX,SACAhV,EAKAlC,EALAkC,MACAvC,EAIAK,EAJAL,SACAC,EAGAI,EAHAJ,OACAuC,EAEAnC,EAFAmC,SACGU,EAAIrE,YACPwB,EAAKvB,GACTqE,EAKIC,YAAQvC,YAAC,CACTgB,SACAK,SACAC,WACAC,UACAG,QACAvC,WACAC,SACA4F,KAAM,WACNrD,YACGU,IAdHG,EAAEF,EAAFE,GAAEwO,EAAA1O,EACF/B,MAAmBsjI,EAAiB7yH,EAA3B1P,SAA6Co+B,GAAZ1uB,EAAJhM,KAAWgM,EAALnR,MAAoB7B,YAAAgT,EAAAhB,IAChEvN,EAAUH,EAAVG,WAAUC,EAAAJ,EACVK,KAAQC,EAAKF,EAALE,MAAOC,EAAWH,EAAXG,YAAaC,EAAOJ,EAAPI,QAc1B8iC,EAAej1B,uBACjB,SAACtJ,EAAOxH,GACJgkI,EAAkBhkI,EACtB,GACA,CAACgkI,IAGL,OACI9gI,eAAC+gI,IAAS9jI,wBAAA,GAAKqD,YAAuBhB,IAAK,IAAAxE,SAAA,CACvCU,cAACwlI,IAAgB,CACbC,QACIzlI,cAAC2nF,IAAQlmF,oCAAA,CACLwC,GAAIA,EACJ9D,MAAM,UACN4C,SAAUskC,GACNlG,GACAl+B,GAAO,IACXkV,SAAUA,KAGlBxV,MACI3C,cAAC2E,IAAU,CACPhC,MAAOA,EACP9B,OAAQA,EACRD,SAAUA,EACVsD,WAAYA,MAIxBlE,cAACkP,IAAc,CAAC7K,SAAUA,IAASC,GAAahF,SAC5CU,cAAC4E,IAAe,CACZL,QAASA,EACTF,MAAOA,GAASC,EAChB5B,WAAYA,SAKhC,EAQAg9C,EAAc/9C,aAAe,CACzBsB,QAAS,CAAC,GAICy8C,K,qECvFAtiC,IARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,uMAGd,C,gGCHMvE,EAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,gBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,YAAAC,cAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,cAAa,KAAD,EAI7B,OAJGL,EAAKE,EAAAI,KACXhB,EAAOstF,WAAW,CAChBK,eAAgBjtF,EAAK,UAAAtY,OAAasY,GAAU,GAC5CpS,YAAaC,MACZqS,EAAAM,OAAA,SAEIlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EARW,EASd,IAGIqO,EAAS,IAAIJ,EAAyB4jD,KAI7BxjD,K,uECtBTJ,EAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GACnB,IAAMI,EAAS,IAAIC,gBAAcH,GACjCI,KAAKC,QAAU,SAACK,EAAOC,GACrB,OAAOT,EAAOG,QAAQK,EAAOC,EAC/B,CACF,IAIIT,EAAS,IAAIJ,EAAyBuhD,KAI7BnhD,K,qECRAiE,IARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,sPAGpD,C,mCCTA,WAEM7c,EAAcmhB,0BAEpBnhB,EAAYwhB,YAAc,cAEXxhB,K,qICEToB,EAAYC,YAAW,CACzBi2D,WAAY,CAAC,IAGX9vB,EAAqBp7B,gBAAK,SAAAxN,GAAyB,IAAtBqmC,EAAIrmC,EAAJqmC,KACzBljC,GADuC/C,YAAAJ,EAAAK,GAC7BmC,KAChBgsF,EAA8BttF,cAAtBi3D,EAAQq2B,EAARr2B,SAAU5/C,EAAOi2E,EAAPj2E,QACV3T,EAAuByhC,EAAvBzhC,GAAU3E,GAAaomC,EAAnBvjC,KAAmBujC,EAAbpmC,UACZgxH,EAAavqH,QAAQyiC,MAAMC,QAAQnpC,GAAYA,EAASqJ,OAASrJ,GACjE2xH,EAASz5D,EAAS1jC,SAAS7vB,GAC3Bw2H,EAAO7iH,EAAQkc,SAAS7vB,GAC9B,OAAOqsH,EACDmK,EACIz6H,cAACm/B,IAAgB,CAAC91B,KAAM,KACxB4nH,EACIjxH,cAACkuF,IAAc,CAACvtF,UAAW6B,EAAQu1D,aACnC/3D,cAACmuF,IAAgB,CAACxtF,UAAW6B,EAAQu1D,aAC7C,IACV,IAGe9vB,K,2LClBTpmC,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFgI,QAAS,OACTmU,WAAY,SACZxU,QAASlM,EAAMG,QAAQ,IACvB4L,SAAU,WACV,UAAW,CACP,mBAAoB,CAChB4c,QAAS,KAIrBvgB,KAAM,CACFkkB,YAAatsB,EAAMG,QAAQ,GAC3B/B,MAAOqkC,IAAM,MAEjBtY,KAAM,CACFgS,WAAY,UACZlW,SAAU,GAEd09G,cAAe,CACXh7G,QAAS,GAEbikG,MAAO,CACHjkG,QAAS,IAEhB,GAAG,CAAEvoB,KAAM,kBAINgmC,GAFe5D,IAEC13B,gBAAK,SAAAxN,GAIpB,IAHHqmC,EAAIrmC,EAAJqmC,KAC4BigG,EAA0BtmI,EAAtDumI,2BAGMpjI,GAFE/C,YAAAJ,EAAAK,GAEQmC,KAChBgsF,EAAwCttF,cAA1B6c,EAAIywE,EAAV1jF,KAAYwkH,EAAK9gC,EAAL8gC,MAAOpsF,EAAQsrD,EAARtrD,SACrBsjG,EAAWlX,GAASA,EAAM3mF,SAAWtC,EAAKzhC,GAGhD,OACIO,eAAA,OAAK7D,UAAWsjB,kBACZzhB,EAAQ8D,KAAIkO,YAAA,GAEPhS,EAAQmsH,MAAQkX,IAClBvmI,SAAA,CAEF8d,EACKpd,cAACod,EAAI,CAACrc,OAAQ2kC,EAAMvlC,MAAM,UAAUQ,UAAW6B,EAAQ2H,KAAMM,SAAS,UACtEzK,cAACukC,IAAU,CAACpkC,MAAM,UAAUQ,UAAW6B,EAAQ2H,KAAMM,SAAS,UAEpEzK,cAACC,IAAU,CAACC,QAAQ,QAAQS,UAAW6B,EAAQ0pB,KAAK5sB,SAC/ComC,EAAKvjC,QAERogC,GAAYviC,cAAC2lI,EAA0B,CAAChlI,UAAW6B,EAAQkjI,cAAehgG,KAAMA,MAG9F,KAEAyC,EAAcxmC,aAAe,CACzBikI,2BAA4BE,KAGjB39F,K,mCC1Ef,WAEM4V,EAAmBn8B,wBAAc,CACnC9a,SAAU,KACV/F,OAAQ,KACRkpB,aAAc,KACde,OAAQ,KACRpT,QAAS,KACTvT,MAAO,KACP4mB,QAAS,KACTrqB,SAAU,KACVspB,QAAS,KACTi2B,MAAO,KACP2H,SAAU,KACVluC,UAAW,KACXmiC,gBAAiB,KACjB2B,mBAAoB,KACpBX,SAAU,KACVC,YAAa,KACbC,WAAY,KACZK,YAAa,OAGjBS,EAAiB97B,YAAc,mBAEhB87B,K,mGCKA+2C,IA3B0B,SAAC7zF,GACxC,IAAQF,EAAkDE,EAAlDF,OAAQH,EAA0CK,EAA1CL,SAAUkG,EAAgC7F,EAAhC6F,SAAUjG,EAAsBI,EAAtBJ,OAAQ4N,EAAcxN,EAAdwN,UACtCgjB,EAAW1wB,EAAO,IAADQ,OAAKV,EAAM,cAAe,QAC3C8B,EAAQ8uB,EAAQ,iCAAAlwB,OAAoCkwB,GAAQ,sCAIlE,OACEzxB,cAAC+lI,IAAO,CACNhlI,OAAQA,EACRH,SAAUA,EACVkG,SAAUA,EACVnE,MAAOA,EACP9B,OAAQA,EACRsX,UAAU,EACV1J,UAAWA,EAAUnP,SAErBU,cAAC05D,IAAmBj4D,wBAAA,GAAKR,GAAK,IAAEorB,UAAWoF,EAASnyB,SAClDU,cAAC25D,IAAe,CAAC9uD,SAAS,OAAMvL,SAC9BU,cAACgH,IAAS,CAACnG,OAAO,eAK5B,C,uMCnBai5E,EAAejtE,gBAAK,SAAAxN,GAAoH,IAAjHsB,EAAStB,EAATsB,UAAqC89C,GAAFp/C,EAAxBmD,QAAmCnD,EAATo/C,WAAW59C,EAAMxB,EAANwB,OAAQE,EAAM1B,EAAN0B,OAAQilI,EAAc3mI,EAAd2mI,eAAgBC,EAAe5mI,EAAf4mI,gBAAoBhlI,EAAKxB,YAAAJ,EAAAK,GACnIwB,EAAYC,cAClB,IAAKJ,EAAQ,OAAO,KACpB,IAAMO,EAAQD,IAAIN,EAAQF,GACpB0zH,GAAuB,IAAVjzH,EACb0kI,GACW,IAAV1kI,EACG2kI,EACAxnF,EAEV,OAAkB,IAAVn9C,IAA6B,IAAVA,EACvBtB,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,YAAuBT,IAAM,IAAA3B,SAEhC4B,EAAUqzH,EAAW,CAAE/yH,EAAG+yH,OAG/Bv0H,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,YAAuBT,IAAM,IAAA3B,SAEhCi1H,IAGb,IAEAz6C,EAAan4E,aAAe,CACxBC,UAAU,EACVokI,eAAgB,kBAChBC,gBAAiB,oBAKNnsD,K,0JCvCT/wE,EAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAE3CoxG,EAAmBttG,gBAAK,SAAA5L,GAC1B,IAAQN,EAA0CM,EAA1CN,UAAWE,EAA+BI,EAA/BJ,OAAQ49C,EAAuBx9C,EAAvBw9C,UAAc36C,EAAIrE,YAAKwB,EAAKvB,GACjDqB,EAASurC,YAAiBrrC,GAC1BK,EAAQD,IAAIN,EAAQF,GAE1B,OAAa,MAATS,EACOm9C,EACHz+C,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,YAAuBoC,IAAK,IAAAxE,SAE/Bm/C,KAEL,KAIJz+C,cAACK,IAAIoB,wBAAA,CACDd,UAAWA,EACXk1C,KAAI,OAAAt0C,OAASD,GACb6H,QAASJ,EACT7I,QAAQ,SACJwB,YAAuBoC,IAAK,IAAAxE,SAE/BgC,IAGb,IAEA64G,EAAiBx4G,aAAe,CAC5BC,UAAU,GAGCu4G,K,iNCpCFj3B,EAAcr2E,gBAAK,SAAA5L,GAC5B,IACIN,EAQAM,EARAN,UACA89C,EAOAx9C,EAPAw9C,UACA59C,EAMAI,EANAJ,OACAswB,EAKAlwB,EALAkwB,QACAjhB,EAIAjP,EAJAiP,YACAtI,EAGA3G,EAHA2G,WACA0I,EAEArP,EAFAqP,gBACGxM,EAAIrE,YACPwB,EAAKvB,GACHqB,EAASurC,YAAiBrrC,GAC1BK,EAAQD,IAAIN,EAAQF,GAC1Bu2E,EAA0CC,YAAW,CACjDzvE,aACAsI,cACAI,oBAHIgnE,EAAaF,EAAbE,cAAeC,EAAcH,EAAdG,eAMjB1vE,EAASspB,EAAQqS,MAAK,SAAA37B,GAAM,OAAI0vE,EAAe1vE,KAAYvG,CAAK,IAEtE,IAAKuG,EACD,OAAO42C,EACHz+C,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,YAAuBoC,IAAK,IAAAxE,SAEV,oBAAdm/C,EAA2BA,EAAU19C,EAAQE,GAASw9C,KAElE,KAGR,IAAIynF,EAAa5uD,EAAczvE,GAE/B,OACI7H,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,GACPe,YAAuBoC,IAAK,IAAAxE,SAE/B4mI,IAGb,IAEAhjD,EAAYvhF,aAAe,CACvBiG,WAAY,OACZsI,YAAa,KACbI,iBAAiB,GAGrB4yE,EAAYvhF,aAAe,CACvBC,UAAU,GAKdshF,EAAYjhE,YAAc,cAEXihE,K,mCCvEf,WAsBesgD,IAnBf,SAAwBvpH,EAAMksH,GAE1B,IAAMC,EAAct0H,mBACdqN,EAAWinH,EAAYtzH,QAGvBhD,EAAUq2H,EAAQhnH,EAAUlF,GAUlC,OANAjE,qBAAU,WACDlG,IACDs2H,EAAYtzH,QAAUmH,EAE9B,IAEOnK,EAAUqP,EAAWlF,CAChC,C,sUCfMpY,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCmU,aAAc,CACV/V,MAAO4B,EAAMyE,QAAQnC,MAAM8R,KAC3B,UAAW,CACP5P,gBAAiB6P,gBAAMrU,EAAMyE,QAAQnC,MAAM8R,KAAM,KACjD,uBAAwB,CACpB5P,gBAAiB,iBAIhC,IA2Ec8/H,EAzEkB,SAAAplI,GAgBzBA,EAbA0B,MADJ,IAEa2oB,EAYTrqB,EAZAuB,QACA7B,EAWAM,EAXAN,UAOA8b,GAIAxb,EAVAkI,QAUAlI,EATAF,OASAE,EARA6F,SAQA7F,EAPA2V,SAOA3V,EANA6V,UAMA7V,EALA8V,UAKA9V,EAJAwb,aAMEnF,GAFFrW,EAHAgW,SAGAhW,EAHUiW,aAGVjW,EAFAya,aACOjc,YACPwB,EAAKvB,GAEO6X,eACVJ,EAASC,cACTqzE,EAAcC,cACdloF,EAAUX,EAAU,CAAEW,QAAS8oB,IAC/B1qB,EAAWuE,YAAmBlE,GAExCuW,EAAwCC,YACpC,CACIhR,KAAM,aACN7F,WACAmX,QAAS,CAAExK,IAAKkP,IAEpB,CACIvF,aAAc,WAEdJ,UAAW,WAEPK,EAAO,0BAA2B,OAAQ,CAAEc,YAAawE,EAAY9T,SAAU,GAC/E8hF,EAAY7pF,GACZ0W,GACJ,EACAP,UAAW,SAAA1S,GACP8S,EACqB,kBAAV9S,EACDA,EACAA,EAAMmO,SAAW,6BACvB,UACA,CACIhR,EACqB,kBAAV6C,EACDA,EACAA,GAASA,EAAMmO,QACXnO,EAAMmO,aACNzH,IAGtBuM,GACJ,IAEPI,EAAA7R,YAAA2R,EAAA,GAjCM8uH,EAAgB5uH,EAAA,GAAIE,EAAOF,EAAA,GAAPE,QAmC3B,OACI5X,cAAC8f,IAAM,CACH3W,QAASm9H,EACTnuH,SAAUP,EACVjV,MAAM,mBACNhC,UAAS,yBAAAY,OAA2BiB,EAAQ0T,aAAY,KAAA3U,OAAIZ,GAAYrB,SAIxEU,cAACqW,IAAU,KAHP,SAMZ,E,yLCzEMxU,EAAYC,aACd,SAAAC,GAAK,MAAK,CACNmU,aAAc,CACV/V,MAAO4B,EAAMyE,QAAQnC,MAAM8R,KAC3B,UAAW,CACP5P,gBAAiB6P,gBAAMrU,EAAMyE,QAAQnC,MAAM8R,KAAM,KAEjD,uBAAwB,CACpB5P,gBAAiB,iBAIhC,IAIC6D,EAAcpK,cAACqW,IAAU,IAEzBkwH,EAA8B,SAACtlI,GAe7BA,EAbA6F,SAaA7F,EAZAuB,QAFJ,IAEW+T,EAYPtV,EAXAuV,oBAAY,IAAAD,EAAG,8BAA6BA,EAAAE,EAW5CxV,EAVAyV,sBAAc,IAAAD,EAAG,gCAA+BA,EACvCxK,GASThL,EATAN,UASAM,EARAkJ,aAAI,IAAA8B,EAAG7B,EAAW6B,EAClBtJ,EAOA1B,EAPA0B,MAIA8Z,GAGAxb,EANAkI,QAMAlI,EALAF,OAKAE,EAJA2V,SAIA3V,EAHAwb,aACAvF,EAEAjW,EAFAiW,aAGJnF,GAFWtS,YACPwB,EAAKvB,GACe2I,oBAAS,IAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GACdxP,EAAUX,EAAUZ,GACpBkW,EAASC,cACTqzE,EAAcC,cACdpzE,EAAUC,cACVrW,EAAYC,cACZP,EAAWuE,YAAmBlE,GACpCuW,EAAwCC,YACpC,CACIhR,KAAM,aACN7F,WACAmX,QAAS,CAAExK,IAAKkP,IAEpB,CACIvF,aAAcA,EAEdJ,UAAW,WAEPK,EAAO,0BAA2B,OAAQ,CAAEc,YAAawE,EAAY9T,QAA2B,aAAjBuO,GAC/EuzE,EAAY7pF,GACZ0W,GACJ,EACAP,UAAW,SAAA1S,GACP8S,EACqB,kBAAV9S,EACDA,EACAA,EAAMmO,SAAW,6BACvB,UACA,CACIhR,EACqB,kBAAV6C,EACDA,EACAA,GAASA,EAAMmO,QACXnO,EAAMmO,aACNzH,IAGtBuM,GACJ,IAEPI,EAAA7R,YAAA2R,EAAA,GAjCM8uH,EAAgB5uH,EAAA,GAAIE,EAAOF,EAAA,GAAPE,QA4CPxF,uBAAY,SAAAzH,GAC5BA,EAAE5B,iBACN,GAAG,IAEH,OACIvE,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAAC8f,IAAM,CACH3W,QAhBa,SAAAwB,GACrBkN,GAAQ,GACRlN,EAAE5B,iBACN,EAcYpG,MAAOA,EACPhC,UAAW6B,EAAQ0T,aACnB5W,SAEC6K,IAELnK,cAACqY,IAAO,CACJC,OAAQ1P,EACRgP,QAASA,EACT5S,MAAOwR,EACP+B,QAAS7B,EACT8B,iBAAkB,CACdP,YAAawE,EAAY9T,OACzB0qG,WAAYnyG,EAAU,aAADK,OAAcX,EAAQ,mBAAmB,CAC1DqX,YAAawE,EAAY9T,OACzBnH,EAAGiX,IAAWC,SACVxX,EAAU,aAADK,OAAcX,EAAQ,eAAe,CAC1CqX,YAAawE,EAAY9T,OACzBnH,EAAGiX,IAAW+tH,QACV5lI,EACA6b,EAAY9T,WAGpB,MAIZiQ,UAAW0tH,EACX98H,QAxCc,SAAAmB,GACtBkN,GAAQ,GACRlN,EAAE5B,iBACN,MAyCJ,EAEAw9H,EAA4B5kI,aAAe,CACvCgB,MAAO,oBAGI4jI,Q,kDCtGA3zE,IApBU,SAAHxhD,GAIH,IAHftK,EAAQsK,EAARtK,SACAmQ,EAAQ7F,EAAR6F,SAAQwvH,EAAAr1H,EAAE8F,oBAAY,IAAAuvH,EAAG,WAAUA,EACnC1lI,EAAMqQ,EAANrQ,OACG+C,EAAIrE,YAAA2R,EAAAK,GAEDkpB,EAAOuf,YAAgBhjC,EAAcD,GAE3C,MAD4B,aAAT0jB,EAEf36B,cAACqmI,EAAwB5kI,YAAA,CAACV,OAAQA,GAAY+C,IAE1C9D,cAACumI,EAA2B9kI,YAAA,CAChCqF,SAAUA,EACVoQ,aAAcyjB,EACd55B,OAAQA,GACJ+C,GAGZ,C,yGCrCM4iI,EAAgB9pH,YAAGC,MAAAC,YAAA,8RCCnB5C,EAAU,eAAA7a,EAAAka,YAAAC,cAAAC,MAAG,SAAAC,IAAA,IAAAitH,EAAAC,EAAAC,EAAAhtH,EAAA8mF,EAAA,OAAAnnF,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAGuE,GADlF0sH,EAA4Bh/B,YAAUZ,KACtC6/B,EAAmCj/B,YAAUX,KAE7C2/B,GAA8BC,EAAgC,CAAA7sH,EAAAE,KAAA,QACxB,MAAtCmyC,QAAQ/nD,MAAM,wBACR,IAAIgJ,MAAM,mBAAmB,KAAD,MAInCy5H,EAAaH,GAA2B,CAAD5sH,EAAAE,KAAA,YAClC6sH,EAAaF,GAAkC,CAAD7sH,EAAAE,KAAA,gBAAAF,EAAAC,KAAA,EAAAD,EAAAE,KAAA,GDI1C64B,ECF2D,CAAE6tD,aAAcimC,GDGlF7zF,IAAcz5B,QAAQotH,EAAe5zF,GAAM1lC,MAAK,SAAAmiC,GAAQ,OAAY,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,IAAI,ICH4C,KAAD,GAEtB,OAFsBq3H,EAAA9sH,EAAAI,KAAtGN,EAAKgtH,EAALhtH,MAAO8mF,EAAYkmC,EAAZlmC,aACfL,YAAUyG,IAA6BltF,EAAO,CAAE2mF,OAAQC,MACxDH,YAAU0G,IAAqCrG,EAAc,CAAEH,OAAQC,MAAiB1mF,EAAAM,OAAA,SACjFR,GAAK,QAGiE,MAHjEE,EAAAC,KAAA,GAAAD,EAAAqlD,GAAArlD,EAAA,SAEZ6mF,YAAamG,IAA6B,CAAEvG,OAAQC,MACpDG,YAAaoG,IAAqC,CAAExG,OAAQC,MACtD,IAAIpzF,MAAM,GAAD9L,OAAIwY,EAAAqlD,GAAM5sD,QAAQi6B,QAAQ,UAAW,IAAIA,QAAQ,kBAAmB,MAAM,QAAA1yB,EAAAE,KAAA,iBAGlC,MAA3DmyC,QAAQ/nD,MAAM,6CACR,IAAIgJ,MAAM,mBAAmB,KAAD,GAAA0M,EAAAE,KAAA,wBAAAF,EAAAM,OAAA,SAG/BssH,GAAyB,yBAAA5sH,EAAAO,ODZzB,IAACw4B,CCYwB,GAAAp5B,EAAA,mBAEvC,kBA9Be,OAAAra,EAAAob,MAAA,KAAA3P,UAAA,KA4DHg8H,EAAe,SAACjtH,GACzB,GAAIA,EAAO,CACP,IAAMquF,EAAeG,YAAUxuF,GACzBktH,EAAej9F,KAAKv9B,MAAQ,IAElC,OADgB27F,EAAa8+B,IAAM,GAAMD,CAE7C,CACI,OAAO,CAEf,EAEe7sH,K,qMCrETkkC,EAAc,CAAC,EAEfv8C,EAAYC,aACd,SAAAC,GAAK,MAAK,CACNwsB,KAAM,CACFjgB,QAAS,OACTmU,WAAY,WACZkI,cAAe,OACf7c,SAAU,YAEduwC,OAAQ,CAAE9vC,MAAOxM,EAAMG,QAAQ,IAC/Bo8C,WAAY,CACR9sC,OAAQ,GACRjD,MAAO,GACPN,QAAS,EACTH,SAAU,WACVuU,IAAK,EACLE,MAAO,GAEX0kH,SAAU,CACNz1H,OAAQ,GACRjD,MAAO,IAEd,GACD,CAAEpM,KAAM,sBAsDG+kI,EAnDS,SAAAjmI,GACpB,IAAQkmI,EAA+ClmI,EAA/CkmI,cAAeC,EAAgCnmI,EAAhCmmI,WAAYlnI,EAAoBe,EAApBf,QAAS2C,EAAW5B,EAAX4B,OACtCjC,EAAWuE,YAAmBlE,GAC9BC,EAAYC,cACZqB,EAAUX,EAAUZ,GAG1B,OACIuD,eAAA,OACI,cAAa2iI,EAAclmI,MAAMJ,OACjCF,UAAWkE,IAAW,eAAgBrC,EAAQ+rB,MAAMjvB,SAAA,CAEnD8I,IAAMhC,aAAa+gI,EAAe,CAC/B/3H,gBACuCrE,IAAnCo8H,EAAclmI,MAAMmO,YAEd+3H,EAAclmI,MAAMmO,WAC9BxO,WACAG,OAAQq9C,EACRl+C,UACA2C,SACAH,YAAY,EAEZ+M,kBAAc1E,KAEhBo8H,EAAclmI,MAAMqO,UAClBtP,cAACkJ,IAAU,CACPvI,UAAWkE,IAAW,cAAerC,EAAQ87C,YAC7Cn1C,QAASi+H,EACT,WAAUD,EAAclmI,MAAMJ,OAC9BmE,MAAO9D,EAAU,2BACjB0mF,eAAa,EAAAtoF,SAGbU,cAACqnI,IAAgB,CAAC1mI,UAAW6B,EAAQykI,aAG7CjnI,cAAA,OAAKW,UAAW6B,EAAQ67C,OAAO/+C,SAAC,WAG5C,E,6gBChEMuC,EAAYC,aACd,SAAAC,GAAK,MAAK,CACNw0B,KAAM,CAEFnO,WAAY,EACZ9Z,QAAS,OACTmU,WAAY,WACZmI,SAAU,OAEVD,cAAe,QAEnBi2B,SAAU,CAAEC,MAAO,SACtB,GACD,CAAE1+C,KAAM,iBAmCCmlI,EAAa,SAAHl2H,GAWhB,IAADm2H,EAAAn2H,EAVF5O,eAAO,IAAA+kI,EAAG,CAAC,EAACA,EACZ5mI,EAASyQ,EAATzQ,UACAC,EAAQwQ,EAARxQ,SACAiC,EAAMuO,EAANvO,OACA3C,EAAOkR,EAAPlR,QACAmb,EAAOjK,EAAPiK,QAAOmsH,EAAAp2H,EACPqK,wBAAgB,IAAA+rH,EAAG,CAAC,EAACA,EACrBz6G,EAAU3b,EAAV2b,WACA6jB,EAAax/B,EAAbw/B,cACG9sC,EAAIrE,YAAA2R,EAAAK,GAEPuE,qBAAU,WACNqF,EAAQ6uB,SAAQ,SAACpkC,GACb,GAAIA,EAAO7E,MAAMqO,UAAYxJ,EAAO7E,MAAMwO,aACtC,MAAM,IAAIpC,MACN,kIAGZ,GACJ,GAAG,CAACgO,IAEJ,IAtDmBhc,EA+Db+nI,EAAah1H,uBACf,SAAAtJ,GAAK,OAAIikB,EAAWjkB,EAAMM,cAAcq+H,QAAQliI,IAAI,GACpD,CAACwnB,IAGL,OACIvoB,eAAA,OAAA/C,wBAAA,CACId,UAAWkE,IAAWlE,EAAW6B,EAAQ+zB,SAtE9Bl3B,EAuEWyE,GAtE9Bg9C,OACKzhD,EAAL0hD,MACW1hD,EAAX2hD,YAC0B3hD,EAA1B4hD,2BACoB5hD,EAApB6hD,qBACK7hD,EAALgF,MACMhF,EAAN+hD,OACY/hD,EAAZqc,aACIrc,EAAJk3B,KACYl3B,EAAZ0gB,aACe1gB,EAAfgiD,gBACmBhiD,EAAnBiiD,oBACOjiD,EAAPif,QACQjf,EAAR0qC,SACuB1qC,EAAvBkiD,wBACQliD,EAAR+e,SACU/e,EAAV6gB,WACW7gB,EAAXiF,YACYjF,EAAZmiD,aACYniD,EAAZoiD,aACepiD,EAAfqiD,gBACUriD,EAAV8e,WACO9e,EAAPkF,QACKlF,EAALgf,MACUhf,EAAVsiD,WACMtiD,EAANkf,OACOlf,EAAPuiD,QACQniD,YAAAJ,EAAAK,KA2C2B,IAC3B6f,SAAUQ,EAAazgB,SAAA,CAjB3B+b,EAAQvV,QACJ,SAACqhI,GAAa,OACVA,EAAclmI,MAAMqO,UACpBmM,EAAiB0rH,EAAclmI,MAAMJ,SAErC,qBADO6mI,IAAU92F,EAAeu2F,EAAclmI,MAAMJ,OACzC,IAcIwE,KAAI,SAAC8hI,GAAa,OACjCnnI,cAACknI,EAAe,CAEZC,cAAeA,EACfC,WAAYA,EACZxmI,SAAUA,EACVV,QAASinI,EAAclmI,MAAMf,SAAWA,EACxC2C,OAAQskI,EAAclmI,MAAM4B,QAAUA,GALjCskI,EAAclmI,MAAMJ,OAM3B,IAENb,cAAA,OAAKW,UAAW6B,EAAQo+C,cAGpC,EAEM7gC,EAAe,SAAAjX,GAEjB,OADAA,EAAM6X,kBACC,CACX,EAkEMkhC,EAAwB,WAAQ,EAGhCC,EAAsB,CAAEvjC,QAAQ,EAAMH,UAAU,GAEvCupH,IAtCY,SAAA1mI,GACuBA,EAAtCuB,QAAR,IAAqCsB,EAAIrE,YAAKwB,EAAKyR,GAC7ClQ,EAAUX,EAAUZ,GAEpB2mI,EAzByC,SAAHnsG,GAAA,IAC5CmV,EAAanV,EAAbmV,cACAv1B,EAAOogB,EAAPpgB,QAAO,OAAA5Z,wBAAA,GAEJ4Z,EACEvV,QACG,SAACqhI,GAAa,OACVA,EAAclmI,MAAMqO,UAAY63H,EAAclmI,MAAMwO,YAAY,IAEvExE,QACG,SAACC,EAAKi8H,GAAa,OACfU,IAASpmI,YAAC,CAAD,EACAyJ,GACLi8H,EAAclmI,MAAMJ,OACpBsmI,EAAclmI,MAAMwO,aACvB,GACL,CAAC,IAENmhC,EAAa,CAO6Bk3F,CACzC7mI,GAGsB8mI,GAAUjkI,EAA5B8sC,cAAuBnxC,YAAKqE,EAAIq5H,IAExC,OACIn9H,cAACsf,IAAI,CACDC,SAAUsiC,EACVjR,cAAeg3F,EACf3lF,SAAQxgD,YAAA,GAAOygD,KACf/xC,OAAQ,SAAAsP,GAAS,OACbjb,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIU,cAACmiD,IAAO,CACJ/xC,aAAc0xC,EACd/+C,SAAU,SAAA26B,GAA2B,IAAxBtf,EAAQsf,EAARtf,SAAUG,EAAMmf,EAANnf,OACfH,GAGJta,GAAQA,EAAKoc,WAAW3B,EAC5B,IAEJve,cAACsnI,EAAU7lI,wBAAA,CAACe,QAASA,GAAaid,GAAesoH,MAClD,GAInB,C,yMC5KMp+H,EAAUvB,IAAMwB,YAAW,SAAC3I,EAAO4I,GAAG,OAAK7J,cAACK,IAAIoB,YAAA,CAACqI,SAAUD,GAAS5I,GAAS,IAE7EuzC,EAAuBpsC,IAAMwB,YAAW,SAAAvK,EAO3CwK,GAAS,IAADG,EAAA3K,EANPyH,gBAAQ,IAAAkD,EAAG,GAAEA,EAAAC,EAAA5K,EACbsD,aAAK,IAAAsH,EAAG,iBAAgBA,EAAAC,EAAA7K,EACxB8K,YAAI,IAAAD,EAAGE,EAAWF,EAClBnJ,EAAM1B,EAAN0B,OAAMsJ,EAAAhL,EACNiL,cAAM,IAAAD,EAAG,QAAOA,EACbvG,EAAIrE,YAAAJ,EAAAK,GAEDwB,EAAYC,cACZuK,EAAWC,cAEjB,OACInH,eAACO,IAAQtD,wBAAA,CACLrB,UAAWuJ,EACXpK,GAAI,CACA4M,SAAS,GAAD5K,OAAKgJ,YAAazD,EAAU/F,GAAUA,EAAOkD,IAAG,SACxD+G,OAAQU,EAASV,QAErBV,OAAQA,EACRT,IAAKA,EACLV,QAASJ,GACLjF,GAAI,IAAAxE,SAAA,CAERU,cAACwK,IAAY,CAAAlL,SACR8I,IAAMhC,aAAa+D,EAAM,CACtBM,SAAU,YAGlBzK,cAACC,IAAU,CAACC,QAAQ,UAASZ,SAAE4B,EAAUyB,QAGrD,IAEMyH,EAAcpK,cAAC8tB,IAAa,IAE5B/kB,EAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EASlCyrC,K,sTCwCTwzF,EAAgB,SAAA/mI,GAcdA,EAZA3B,SAYA2B,EAXAN,UAWAM,EAVAuB,QAHJ,IAIIiM,EASAxN,EATAwN,UACA9L,EAQA1B,EARA0B,MAAKC,EAQL3B,EAPA4B,cAAM,IAAAD,EAAG,QAAOA,EAChBF,EAMAzB,EANAyB,WACA9B,EAKAK,EALAL,SACAC,EAIAI,EAJAJ,OAEAyhC,GAEArhC,EAHAF,OAGAE,EAFAqhC,YACGx+B,EAAIrE,YACPwB,EAAKvB,GACH8C,EAAUX,IACVE,EApGa,WACnB,IAAMA,EAAQ4P,cACRiX,EAAsC,UAAvB7mB,EAAMyE,QAAQC,KAAmBme,QAAQF,OAY9D,OAXoB1e,mBAAQ,kBAAAvE,wBAAC,CAAD,EACrBmnB,GAAY,IACfzG,OAAQpgB,EAAMogB,OAAOod,MACrBlxB,WAAY,cACZN,WAAYhM,EAAMiM,WAAWD,WAC7BmwB,WAAYn8B,EAAMiM,WAAWwmH,kBAC7BtoG,KAAMnqB,EAAMyE,QAAQ0lB,KAAKiQ,QACzBs4F,cAAe1yH,EAAMyE,QAAQ0lB,KAAKC,UAClC+Z,YAAankC,EAAMyE,QAAQ0lB,KAAKC,WAAS,GACzC,CAACpqB,GAGT,CAqFkB2yH,GACRuT,EAnFa,CACfC,eAAgB,6HAChBC,gBAAiB,6HACjBC,YAAa,uHACbC,aAAc,uHACdC,YAAa,2GACbC,UAAW,oIACXC,WAAY,0IACZC,WAAY,sHACZC,aAAc,0DACdC,UAAW,oDACXC,WAAY,gJACZC,WAAY,qBACZC,WAAY,kFACZC,gBAAiB,yPACjBC,aAAc,6HACdC,aAAc,wFACdC,UAAW,kFACXC,YAAa,wFACbC,YAAa,gHACbC,cAAe,4HACfC,aAAc,sHACdC,eAAgB,+KAChBC,gBAAiB,qLACjBC,kBAAmB,+FACnBC,GAAI,uCACJC,iBAAkB,wTAClBC,gBAAiB,sJACjBC,GAAI,4GACJC,GAAI,4GACJC,GAAI,4GACJC,QAAS,yDACTC,GAAI,qEACJliB,MAAO,qEACPmiB,iBAAkB,uRAClBC,wBAAyB,8FACzBhoB,KAAM,+DACNioB,WAAY,0JACZp8G,KAAM,uCACNq8G,WAAY,qLACZ5wH,KAAM,mDACN6wH,aAAc,wIACdC,iBAAkB,wOAClB9yG,UAAW,wFACX+yG,SAAU,kFACVC,YAAa,sHACbC,UAAW,wFACXC,UAAW,2FACXC,mBAAoB,SAAC5lI,GAAK,+FAAAzD,OAAwByD,EAAK,WACvDkhC,YAAa,qEACb2kG,MAAO,uCACPC,WAAY,kFACZC,kBAAmB,gJACnBC,cAAe,qEACfC,OAAQ,uCACRC,WAAY,2EACZ/gG,MAAO,6CACPghG,IAAK,yDACLC,UAAW,mIACXzmH,QAAS,uFACT0mH,cAAe,kKA0BnBtnI,EAKIC,YAAQvC,YAAC,CACTZ,UACGiD,IANHG,EAAEF,EAAFE,GAAEwO,EAAA1O,EACF/B,MAASe,EAAQ0P,EAAR1P,SAAUC,EAAOyP,EAAPzP,QAASF,EAAM2P,EAAN3P,OAAQxB,EAAKmR,EAALnR,MACpC4C,EAAUH,EAAVG,WACAE,EAAIL,EAAJK,KAKJ2N,EAAgC1J,mBAAS/G,GAAM0Q,EAAAnM,YAAAkM,EAAA,GAAxC26F,EAAQ16F,EAAA,GAAE+vG,EAAW/vG,EAAA,GACpB3N,EAAwCD,EAAxCC,MAAOC,EAAiCF,EAAjCE,YAAaC,EAAoBH,EAApBG,QAASu8C,EAAW18C,EAAX08C,OAE/BzZ,EAAej1B,uBAAY,SAAC+B,GAC9B,IAAM7S,EAAQ6S,IACd4tG,EAAYzgH,GACZyB,EAASzB,EACb,GAAG,CAACygH,EAAah/G,IAEX8+B,EAAczvB,uBAAY,WAC5BpP,GACJ,GAAG,CAACA,IAEE4+B,EAAaxvB,uBAAY,WAC3BtP,GACJ,GAAG,CAACA,IAIJ,OACI0B,eAACoK,IAAW,CACR1O,QAAQ,SACRuO,UAAWA,EACXpK,MAAOE,MAAcF,IAASC,GAC9BzB,OAAQA,EAAOvD,SAAA,CAEfU,cAAC+O,IAAU,CAACC,QAAS/K,EAAIgL,QAAM,EAACtO,UAAW6B,EAAQG,MAAMrD,SACrDU,cAAC2E,IAAU,CACPhC,MAAOA,EACP9B,OAAQA,EACRD,SAAUA,EACVsD,WAAYA,OAKT,OAAVo+B,QAAU,IAAVA,OAAU,EAAVA,EAAYM,eAAiBx8B,uBAAuB,OAAVk8B,QAAU,IAAVA,OAAU,EAAVA,EAAYM,aAAc,CAAEjiC,UAAW6B,EAAQogC,eAE1F5iC,cAAC20H,IAAM,CACH1wH,GAAE,GAAA1C,OAAKX,EAAQ,KAAAW,OAAIV,EAAM,KAAAU,OAAI0C,GAC7BtD,UAAWkE,IAAWrC,EAAQ8D,KAAM9D,EAAQitD,UAAW,CAAE,QAAW3O,IACpE/+C,MAAOA,EACPkmI,WAAYA,EACZx4H,aAAci9F,EACd3pG,SAAUskC,EACVrkC,QAAS6+B,EACT/+B,OAAQ8+B,EACRsE,YAAY,gHAEhBlmC,cAACkP,IAAc,CAAC7K,MAAOE,IAAYF,GAASC,GAAahF,SACrDU,cAAC4E,IAAe,CACZL,QAASA,EACTF,MAAOA,GAASC,EAChB5B,WAAYA,QAMhC,EAEMb,EAAYC,aAAW,SAAAC,GACzB,IAAM6iB,EAA+B,UAAvB7iB,EAAMyE,QAAQC,KACtB6kI,EAAkB1mH,EAAQ,sBAAwB,2BAClDre,EAAkBqe,EAAQ,sBAAwB,4BACxD,MAAO,CACHte,KAAM,CACF8hB,WAAY,GACZwD,cAAe,EACfvD,YAAa,GACbwD,aAAc,GACdphB,SAAU1I,EAAMiM,WAAWvD,SAC3BqD,SAAU,WACVvH,kBACAwK,oBAAqBhP,EAAMghD,MAAMD,aACjC9xC,qBAAsBjP,EAAMghD,MAAMD,aAClC3rB,WAAYp1B,EAAMq1B,YAAYC,OAAO,mBAAoB,CACrDhU,SAAUthB,EAAMq1B,YAAY/T,SAAS+tE,QACrCC,OAAQtvF,EAAMq1B,YAAYi6D,OAAOC,UAErC,UAAW,CACP/qF,gBAAiBqe,EAAQ,sBAAwB,4BAEjD,uBAAwB,CACpBre,oBAGR,YAAa,CACTA,gBAAiBqe,EAAQ,sBAAwB,6BAErD,aAAc,CACVre,gBAAiBqe,EAAQ,sBAAwB,8BAGzD6qC,UAAW,CACP,UAAW,CACP87E,aAAa,aAADhqI,OAAeQ,EAAMyE,QAAQ21B,QAAQhmB,MACjDmM,KAAM,EACNoiB,OAAQ,EAERnsB,QAAS,KACTzK,SAAU,WACVyU,MAAO,EACPK,UAAW,YACXuU,WAAYp1B,EAAMq1B,YAAYC,OAAO,YAAa,CAC9ChU,SAAUthB,EAAMq1B,YAAY/T,SAAS+tE,QACrCC,OAAQtvF,EAAMq1B,YAAYi6D,OAAOC,UAErC3mE,cAAe,QAEnB,kBAAmB,CACf/H,UAAW,aAEf,gBAAiB,CACb4oH,kBAAmBzpI,EAAMyE,QAAQnC,MAAM8R,KACvCyM,UAAW,aAEf,WAAY,CACR2oH,aAAa,aAADhqI,OAAe+pI,GAC3BhpH,KAAM,EACNoiB,OAAQ,EAERnsB,QAAS,WACTzK,SAAU,WACVyU,MAAO,EACP4U,WAAYp1B,EAAMq1B,YAAYC,OAAO,sBAAuB,CACxDhU,SAAUthB,EAAMq1B,YAAY/T,SAAS+tE,UAEzCzmE,cAAe,QAEnB,iBAAkB,CACd4gH,aAAa,aAADhqI,OAAeQ,EAAMyE,QAAQ0lB,KAAKiQ,UAElD,oBAAqB,CACjBrrB,kBAAmB,WAG3B8xB,aAAc,CACV90B,SAAU,WACVuU,IAAK,GACLE,MAAO,EACPJ,OAAQ,GAGpB,GAAG,CAAEhgB,KAAM,oBAEX6lI,EAAcrmI,aAAe,CACzB8M,WAAW,GAIAu5H,K,mCCrRf,0DAOMnmI,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCs9B,UAAW,CACP/wB,QAAS,OACTuZ,cAAe,SACfrF,eAAgB,SAChByF,UAAW,MACXmD,aAAc,OAElB5Y,QAAS,CACLnC,UAAW,SACXtC,WAAY,qBACZ2c,QAAS,GACT7nB,OAAQ,SAEf,GAAG,CAAEV,KAAM,cAEN6gD,EAAU,SAAA/hD,GACZ,IACIN,EAGAM,EAHAN,UACA8qI,EAEAxqI,EAFAwqI,YACAhX,EACAxzH,EADAwzH,cAEEjyH,EAAUX,EAAUZ,GACpBC,EAAYC,cAClB,OACInB,cAAA,OAAKW,UAAWkE,IAAWrC,EAAQ68B,UAAW1+B,GAAWrB,SACrDkF,eAAA,OAAK7D,UAAW6B,EAAQgQ,QAAQlT,SAAA,CAC5BU,cAACm/B,IAAgB,CAACh/B,MAAM,YACxBH,cAAA,MAAAV,SAAK4B,EAAUuqI,KACfjnI,eAAA,OAAAlF,SAAA,CAAM4B,EAAUuzH,GAAe,WAI/C,EASAzxE,EAAQrhD,aAAe,CACnB8pI,YAAa,kBACbhX,cAAe,sBAGJzxE,K,qEC1CA5lC,IATf,SAAcnc,GACZ,OACEuD,eAAC6Y,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAAA,CAChBU,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,mHAAmHmgH,YAAY,OAC7Kz9H,cAAA,QAAMqxC,SAAS,UAAUC,SAAS,UAAUh0B,EAAE,iLAGpD,C,kCCTA,YAEM0X,EAAgBlzB,aAAW,SAAAC,GAAK,MAAK,CACvCypC,IAAK,CAAEh6B,OAAQ,IACfkwH,cAAe,CACX5zH,SAAU,SAEdiiC,aAAc,CACVxhC,MAAO,EACP6zF,WAAY,UAEhBnyD,WAAY,CACR7nB,WAAY,EACZwD,cAAe,GAEnBH,OAAQ,CAAE22E,WAAY,UACtBlyD,WAAY,CACR3hC,MAAO,GACPN,QAAS,iBAEby9H,cAAe,CACX5rG,SAAU,EACV6rG,SAAU,cAEdC,qBAAsB,CAClB9rG,SAAU,EACVG,SAAU,SACVC,aAAc,WACdkiE,WAAY,UAGhB/sE,eAAgB,CACZyK,SAAU,IACV6rG,SAAU,aACV,MAAO,CACH1rG,SAAU,SACV3xB,QAAS,cACT,qBAAsB,WACtB,qBAAsB,IAIjC,IAEc0mB,K,0ICxCT0xG,EAAgB9pH,YAAGC,MAAAC,YAAA,oWCAnB5C,EAAU,eAAA7a,EAAAka,YAAAC,cAAAC,MAAG,SAAAC,IAAA,IAAAmyH,EAAAC,EAAAjF,EAAAhtH,EAAA8mF,EAAA,OAAAnnF,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAEqE,GADhF4xH,EAA2BlkC,YAAUpH,KACrCurC,EAAkCnkC,YAAUjH,KAE5CmrC,GAA6BC,EAA+B,CAAA/xH,EAAAE,KAAA,QAE5D,MADAmyC,QAAQ/nD,MAAM,wBAKR,IAAIgJ,MAAM,mBAAmB,KAAD,MAGnCy5H,EAAa+E,GAA0B,CAAD9xH,EAAAE,KAAA,YACjC6sH,EAAagF,GAAiC,CAAD/xH,EAAAE,KAAA,gBAAAF,EAAAC,KAAA,EAAAD,EAAAE,KAAA,GDQzC64B,ECN2D,CAAE6tD,aAAcmrC,GDOlF/4F,IAAcz5B,QAAQotH,EAAe5zF,GAAM1lC,MAAK,SAAAmiC,GAAQ,OAAY,OAARA,QAAQ,IAARA,OAAQ,EAARA,EAAU//B,IAAI,ICP2C,KAAD,GAEtB,OAFsBq3H,EAAA9sH,EAAAI,KAArGN,EAAKgtH,EAALhtH,MAAO8mF,EAAYkmC,EAAZlmC,aACfL,YAAUC,IAA4B1mF,EAAO,CAAE2mF,OAAQC,MACvDH,YAAUI,IAAoCC,EAAc,CAAEH,OAAQC,MAAiB1mF,EAAAM,OAAA,SAChFR,GAAK,QAGgE,MAHhEE,EAAAC,KAAA,GAAAD,EAAAqlD,GAAArlD,EAAA,SAEZ6mF,YAAaL,IAA4B,CAAEC,OAAQC,MACnDG,YAAaF,IAAoC,CAAEF,OAAQC,MACrD,IAAIpzF,MAAM,GAAD9L,OAAIwY,EAAAqlD,GAAM5sD,QAAQi6B,QAAQ,UAAW,IAAIA,QAAQ,kBAAmB,MAAM,QAAA1yB,EAAAE,KAAA,iBAGnC,MAA1DmyC,QAAQ/nD,MAAM,4CACR,IAAIgJ,MAAM,mBAAmB,KAAD,GAAA0M,EAAAE,KAAA,wBAAAF,EAAAM,OAAA,SAG/BwxH,GAAwB,yBAAA9xH,EAAAO,ODRxB,IAACw4B,CCQuB,GAAAp5B,EAAA,mBAEtC,kBAhCe,OAAAra,EAAAob,MAAA,KAAA3P,UAAA,KA6DHm3D,EAA2B,WACpC,IAAMpoD,EAAQ8tF,YAAUpH,KAClBwmC,EAAej9F,KAAKv9B,MAAQ,IAGlC,OAAmB,KAFE87F,YAAUxuF,GACAmtH,IAAMD,EAEzC,EAEaD,EAAe,SAACjtH,GACzB,GAAIA,EAAO,CACP,IAAMquF,EAAeG,YAAUxuF,GACzBktH,EAAej9F,KAAKv9B,MAAQ,IAElC,OADgB27F,EAAa8+B,IAAM,GAAMD,CAE7C,CACI,OAAO,CAEf,EAEe7sH,K,mCCrFf,oBA0Be01G,IAtBU,SAACmc,EAAWtnD,EAASunD,GAC1C,IAAMC,EAAen6H,iBAAO2yE,GAE5BvyD,aAA0B,WACtB+5G,EAAan5H,QAAU2xE,CAC3B,GAAG,CAACA,IAEJzuE,qBAAU,WACN,IAAMk2H,GAAuB,OAAPF,QAAO,IAAPA,OAAO,EAAPA,EAASl5H,UAAWS,OAC1C,GAAM24H,GAAiBA,EAAc14H,iBAArC,CAIA,IAAM24H,EAAgB,SAAArjI,GAAK,OAAImjI,EAAan5H,QAAQhK,EAAM,EAG1D,OAFAojI,EAAc14H,iBAAiBu4H,EAAWI,GAEnC,WACHD,EAAc5xC,oBAAoByxC,EAAWI,EACjD,CAPA,CAQJ,GAAG,CAACJ,EAAWC,GACnB,C,kFCXet4E,IATO,SAAHr0D,GAA8B,IAAxB0B,EAAM1B,EAAN0B,OAAgBtB,YAAAJ,EAAAK,GACrC,OACIM,cAAA,QAAMoY,MAAO,CAAE9J,QAAS,QAAShP,SAC7BU,cAACwsD,IAAQ,CAACzrD,OAAQA,KAG9B,C,8SCMMc,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFgI,QAAS,OACTuZ,cAAe,SACfpF,WAAY,SACZD,eAAgB,UAEvB,GAAG,CAAErgB,KAAM,6BAGNwH,EAAUvB,IAAMwB,YAAW,SAAC3I,EAAO4I,GAAG,OAAK7J,cAACK,IAAIoB,YAAA,CAACqI,SAAUD,EAAK4lD,UAAU,QAAWxuD,GAAS,IA0DrFmrI,EAxDgBxiI,sBAAW,SAAC3I,EAAO4I,GAE9C,IACI9I,EAMAE,EANAF,OAAM+K,EAMN7K,EALA0B,aAAK,IAAAmJ,EAAG,6CAASA,EAAA6jD,EAKjB1uD,EAJAqJ,cAAM,IAAAqlD,EAAG,SAAQA,EAAA08E,EAIjBprI,EAHAmzD,oBAAY,IAAAi4E,EAAG,CAAC,EAACA,EACjBC,EAEArrI,EAFAqrI,YAGE9pI,GAFK/C,YACPwB,EAAKvB,GACOmC,KAGV82D,EAActxD,oBAAU+sD,GAKxB2lE,EAJO14H,IAAIN,EAAQ,OAAQ,IAIXoqC,MAAM,KAAKmyF,UAAU,GAK3ClxE,QAAQC,IAAI,SAAD9qD,OAAU+qI,IAErB,IAAMz2F,EAAOkkF,GAAQ,GAAAx4H,OAAOuwD,IAAsB,UAAAvwD,OAASw4H,GAAQx4H,OAAGo3D,EAAW,IAAAp3D,OAAOo3D,GAAgB,IAQxG,OANA3iD,qBAAU,WACH6/B,IAAwB,IAAhBy2F,GACP/4H,OAAO3K,KAAKitC,EAAMvrC,EAE1B,GAAG,CAACgiI,IAECvrI,EAGDyD,eAAA,OAAK7D,UAAW6B,EAAQ8D,KAAKhH,SAAA,CACzBU,cAACC,IAAU,CAACurB,cAAY,EAAAlsB,SAAC,8XACzBU,cAAC8f,IAAM,CAAC5f,QAAQ,YACZE,UAAWuJ,EACXE,IAAKA,EACLgsC,KAAMA,EACNvrC,OAAQA,EACRnK,MAAM,UAEVb,SAEKqD,OAdO,IAoBxB,I,2DClEMd,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFgI,QAAS,OACTuZ,cAAe,SACfpF,WAAY,SACZD,eAAgB,UAEvB,GAAG,CAAErgB,KAAM,6BAGNwH,EAAUvB,IAAMwB,YAAW,SAAC3I,EAAO4I,GAAG,OAAK7J,cAACK,IAAIoB,YAAA,CAACqI,SAAUD,EAAK4lD,UAAU,QAAWxuD,GAAS,IAkDrFmrI,EAhDgBxiI,sBAAW,SAAC3I,EAAO4I,GAE9C,IACI9I,EAMAE,EANAF,OAAM+K,EAMN7K,EALA0B,aAAK,IAAAmJ,EAAG,6CAASA,EAAA6jD,EAKjB1uD,EAJAqJ,cAAM,IAAAqlD,EAAG,SAAQA,EAAA08E,EAIjBprI,EAHAmzD,oBAAY,IAAAi4E,EAAG,CAAC,EAACA,EACjBC,EAEArrI,EAFAqrI,YAGE9pI,GAFK/C,YACPwB,EAAKvB,GACOmC,KAEV82D,EAActxD,oBAAU+sD,GAGxB2lE,EAFO14H,IAAIN,EAAQ,QAEHoqC,MAAM,KAAKmyF,UAAU,GAGrCznF,EAAOkkF,GAAQ,GAAAx4H,OAAOwwD,IAAW,UAAAxwD,OAASw4H,GAAQx4H,OAAGo3D,EAAW,IAAAp3D,OAAOo3D,GAAgB,IAQ7F,OANA3iD,qBAAU,WACH6/B,IAAwB,IAAhBy2F,GACP/4H,OAAO3K,KAAKitC,EAAMvrC,EAE1B,GAAG,CAACgiI,IAECvrI,EAGDyD,eAAA,OAAK7D,UAAW6B,EAAQ8D,KAAKhH,SAAA,CACzBU,cAACC,IAAU,CAACurB,cAAY,EAAAlsB,SAAC,gVACzBU,cAAC8f,IAAM,CAAC5f,QAAQ,YACZE,UAAWuJ,EACXE,IAAKA,EACLgsC,KAAMA,EACNvrC,OAAQA,EACRnK,MAAM,UACVb,SAEKqD,OAbO,IAmBxB,I,qCC/DMd,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFgI,QAAS,OACTuZ,cAAe,SACfpF,WAAY,SACZD,eAAgB,UAEvB,GAAG,CAAErgB,KAAM,6BAiFGoqI,EA5ByB,SAAHltI,GAAiD,IAA3C0B,EAAM1B,EAAN0B,OAAMkJ,EAAA5K,EAAEsD,aAAK,IAAAsH,EAAG,6CAASA,EAC1DzH,GADoE/C,YAAAJ,EAAAK,GAC1DmC,KAChB,IAAKd,EAAQ,OAAO,KACpB,IAAMnB,EAAOyB,IAAIN,EAAQ,QACnBg9F,EAAMuqB,YAAgB1oH,GAEtB4sI,EAAW,eAAAp7H,EAAAmI,YAAAC,cAAAC,MAAG,SAAAC,EAAO/O,GAAC,OAAA6O,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OACxBtP,EAAE5B,kBACFwK,OAAO3K,KAAKm1F,EAAK,UAAS,wBAAAhkF,EAAAO,OAAA,GAAAZ,EAAA,KAC7B,gBAHgBa,GAAA,OAAAnJ,EAAAqJ,MAAA,KAAA3P,UAAA,KAMjB,OACItG,eAAA,OAAK7D,UAAW6B,EAAQ8D,KAAKhH,SAAA,CACzBU,cAACC,IAAU,CAACurB,cAAY,EAAAlsB,SAAC,6MACzBU,cAAC8f,IAAM,CAAC5f,QAAQ,YACZC,MAAM,UACNgJ,QAASqjI,EAAYltI,SAEpBqD,MAMjB,E,qFCjFMd,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC0qI,WAAY,CACRC,UAAW,WAEfC,WAAY,CACRp+H,MAAO,KAEd,GAAG,CAAEpM,KAAM,aA0DGyqI,EAvDiB,SAAHvtI,GAAeA,EAATsB,UAAmCtB,EAAxBmD,QAAmCnD,EAATo/C,UAAiBp/C,EAANwB,OAA2D,IAAnDE,EAAM1B,EAAN0B,OAAQqzD,EAAY/0D,EAAZ+0D,aAAck4E,EAAWjtI,EAAXitI,YACvG9pI,GAD4H/C,YAAAJ,EAAAK,GAClHmC,KAChB,IAAKd,EAAQ,OAAO,KACpB,IAAMnB,EAAOyB,IAAIN,EAAQ,QACnB0F,EAAOpF,IAAIN,EAAQ,QACnBgnH,EAAQO,YAAgB1oH,GAG9B,OAAOsnH,IAAQa,MAAMj0F,SAASrtB,GAEtBzG,cAAC6sI,IAAgB,CAAAvtI,SACbU,cAAC8sI,IAAkB,CAAAxtI,SACfU,cAAC+sI,IAAS,CACN3sI,UAAU,MACVO,UAAW6B,EAAQiqI,WACnB1kB,MAAOA,EACPx5G,MAAM,OACNiD,OAAO,OACPxM,MAAOjE,EAAOoB,WAM5B+kH,IAAQW,MAAM/zF,SAASrtB,GAClBzG,cAAC+sI,IAAS,CACT3sI,UAAU,QACVO,UAAW6B,EAAQiqI,WACnB1kB,MAAOA,EACPx5G,MAAM,OACNiD,OAAO,OACPxM,MAAOjE,EAAOoB,KAEd6qI,UAAQ,IAEV9lB,IAAQhtB,MAAMpmE,SAASrtB,GAClBzG,cAAC+sI,IAAS,CACT3sI,UAAU,QACVO,UAAW6B,EAAQmqI,WACnB5kB,MAAOA,EACPx5G,MAAM,OACNiD,OAAO,OACPxM,MAAOjE,EAAOoB,KACd6qI,UAAQ,IAEV9lB,IAAQ70B,OAAOv+D,SAASrtB,GACnBzG,cAACosI,EAAsB,CAACrrI,OAAQA,EAAQqzD,aAAcA,EAAck4E,YAAaA,IAClFplB,IAAQsW,MAAM1pG,SAASrtB,GAClBzG,cAACitI,EAAqB,CAAClsI,OAAQA,EAAQqzD,aAAcA,EAAck4E,YAAaA,IAChFtsI,cAACusI,EAAwB,CAACxrI,OAAQA,GAG7D,E,iBC3DMc,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CAEN,EACAiS,QAAS,CACLjK,QAAS,OACTsxC,IAAK,IAETstF,aAAc,CACV5+H,QAAS,OACTuZ,cAAe,SACfpF,WAAY,SACZD,eAAgB,SAChBwF,SAAU,EACVxW,OAAQ,mCACRjL,gBAAiBxE,EAAMyE,QAAQ2mI,OAAOC,OAE1CC,QAAS,CACLvtG,SAAU,KAEd96B,MAAO,CACHsJ,QAAS,OACTmU,WAAY,UAEhB6qH,UAAW,CACPh/H,QAAS,OACT+f,YAAa,IAEpB,IAsCc4lC,IApCG,SAAChzD,GACf,IAAMuB,EAAUX,IACRd,EAAsCE,EAAtCF,OAAQqzD,EAA8BnzD,EAA9BmzD,aAAck4E,EAAgBrrI,EAAhBqrI,YAE9B,OAAKvrI,EAEDyD,eAAA,OAAK7D,UAAW6B,EAAQ8D,KAAKhH,SAAA,CACzBU,cAACutI,IAAsB,CAAAjuI,SACnBkF,eAACvE,IAAU,CAACC,QAAQ,KAAKS,UAAW6B,EAAQwC,MAAM1F,SAAA,CAACU,cAACwsD,IAAQ,CAACzrD,OAAQA,EAAQJ,UAAW6B,EAAQ8qI,YAAcvsI,EAAOoB,UAEzHqC,eAAA,OAAK7D,UAAW6B,EAAQ+V,QAAQjZ,SAAA,CAC5BU,cAAA,OAAKW,UAAW6B,EAAQ0qI,aAAa5tI,SACjCU,cAAC4sI,EAAgB,CAAC7rI,OAAQA,EAAQqzD,aAAcA,EAAck4E,YAAaA,MAE/EtsI,cAAA,OAAKW,UAAW6B,EAAQ6qI,QAAQ/tI,SAC5BkF,eAACoqB,IAAgBntB,wBAAA,GACTR,GAAK,IACTb,UAAU,MAAKd,SAAA,CAEfU,cAACyE,IAAS,CAAC5D,OAAO,SAClBb,cAACyE,IAAS,CAAC5D,OAAO,gBAClBb,cAAC2zD,IAAa,CAAC9yD,OAAO,SACtBb,cAACyE,IAAS,CAAC5D,OAAO,SAClBb,cAAC40F,IAAa,CAAC/zF,OAAO,OAAO8B,MAAM,4BAA4BkyF,aAAa,sBAC5E70F,cAAC40F,IAAa,CAAC/zF,OAAO,gBAAgB8B,MAAM,qCAAqCkyF,aAAa,sBAC9F70F,cAACgvB,IAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,MACvCj1C,cAACgvB,IAAS,CAACnuB,OAAO,YAAYoC,QAASgyC,MACvCj1C,cAACk1C,IAAa,CAACr0C,OAAO,OACtBb,cAAC80F,IAAgC,CAACj0F,OAAO,6BAxBzC,IA8BxB,C,uHCvEe2sI,EANU,WACvB,OACExtI,cAACytI,IAAQ,CAACvtI,QAAQ,OAAOsR,OAAQ,KAErC,E,2DC0Cek8H,EA3CM,SAAHruI,GAA0C,IAApCC,EAAQD,EAARC,SAAUm0D,EAAQp0D,EAARo0D,SAAaxyD,EAAKxB,YAAAJ,EAAAK,GAC5CsgB,EAAUC,cAChB3E,EAA+BC,cAAvB3a,EAAQ0a,EAAR1a,SAAUkG,EAAQwU,EAARxU,SACZ/F,EAASurC,cACT5rB,EAActO,sBAAW,eAAAhB,EAAAmI,YAAAC,cAAAC,MAC7B,SAAAC,EAAM5Q,GAAK,IAAA6sH,EAAA,OAAAn8G,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,UACJw5C,EAAS,CAAD15C,EAAAE,KAAA,eAAAF,EAAAM,OAAA,iBACG,GAAhBvR,EAAMqnH,UAGgB,oBAAb18D,EAAuB,CAAA15C,EAAAE,KAAA,eAAAF,EAAAE,KAAA,EACpBw5C,EAAS1yD,EAAOkD,GAAI6C,GAAQ,IAAAvF,OAAQX,GAAYG,GAAO,OAAAgZ,EAAAqlD,GAAArlD,EAAAI,KAAAJ,EAAAE,KAAA,gBAAAF,EAAAqlD,GAC7D3L,EAAS,KAAD,GAHRkiE,EAAM57G,EAAAqlD,GAAArlD,EAAA67G,GAIJD,EAAM57G,EAAAE,KACP,SADOF,EAAA67G,GACD,GAGN,SAHM77G,EAAA67G,GAGA,oBAFyD,OAAlE51G,EAAQe,KAAKxW,YAAazD,GAAQ,IAAAvF,OAAQX,GAAYG,EAAOkD,KAAK8V,EAAAM,OAAA,kBAKhE,OAFF2F,EAAQe,KACNxW,YAAazD,GAAQ,IAAAvF,OAAQX,GAAYG,EAAOkD,GAAI,SACpD8V,EAAAM,OAAA,kBAG+B,OAA7Bs7G,GAAQ31G,EAAQe,KAAK40G,GAAQ57G,EAAAM,OAAA,mCAAAN,EAAAO,OAAA,GAAAZ,EAAA,KAGtC,gBAAAa,GAAA,OAAAnJ,EAAAqJ,MAAA,KAAA3P,UAAA,EAtB4B,GAuB7B,CACEhE,EACAkZ,EACAjf,EACAH,EACA6yD,IAIJ,OAAK1yD,EAEEqF,uBAAaqC,WAASijB,KAAKpsB,GAASmC,wBAAA,GAAOR,GAAK,IAAEkI,QAASuX,KAF9C,IAGtB,E,gCCpCM7e,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACrCuE,KAAM,CACJgI,QAAS,OACTsxC,IAAK79C,EAAMG,QAAQ,GACnBy9H,oBAAqB,yCAExB,GAAG,CAAEx9H,KAAM,aAINwrI,EAAc,SAAHtuI,GAAiC,IAFnCqvD,EAAOqmB,EAECp0E,EAAStB,EAATsB,UACf6B,GADkC/C,YAAAJ,EAAAK,GACxBmC,KACRgd,EAAYtD,cAAZsD,QACR,OACE7e,cAAA,OAAKW,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,GAAWrB,UANzCovD,EAOF7vC,EAPSk2D,EAOA,SAAAxvE,GAAG,OACjBvF,cAACwtI,EAAgB,GAAMjoI,EAAO,EARTijC,MAAM1X,KAAK,CAAEnoB,OAAQ+lD,IAAS,SAACltD,EAAG+D,GAAG,OAAKwvE,EAAGxvE,EAAI,MAY9E,EAEMqoI,EAAa,SAAHx8H,GAAiC,IAA3BzQ,EAASyQ,EAATzQ,UAAcM,EAAKxB,YAAA2R,EAAAK,GACjCjP,EAAUX,IAChBgsI,EAAsBtyH,cAAdhO,EAAGsgI,EAAHtgI,IAAKiC,EAAIq+H,EAAJr+H,KACb,OAAKjC,GAAQiC,EAGXxP,cAAA,OAAKW,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,GAAWrB,SACjDiO,EAAIlI,KAAI,SAAApB,GAAE,OACTjE,cAACm+C,IAAqB,CAAC78C,MAAOkO,EAAKvL,GAAI3E,SACrCU,cAAC0tI,EAAYjsI,YAAA,GAAKR,KADyBgD,EAErB,MAPJ,IAW5B,EAYe4vD,IATE,SAAC5yD,GAEhB,OADmBsa,cAAXyP,OAENhrB,cAAC4tI,EAAUnsI,YAAA,GAAKR,IAEhBjB,cAAC2tI,EAAWlsI,YAAA,GAAKR,GAErB,C,+RClCMY,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnC+jB,OAAQ,CACJvf,gBAAiB,uBAErBm9H,YAAa,CACTr1G,YAAatsB,EAAMG,QAAQ,IAE/B8C,MAAO,CACHsyB,KAAM,EACN4I,aAAc,WACdkiE,WAAY,SACZniE,SAAU,SACV9/B,MAAO,WAEd,GACG,CAAEgC,KAAM,sBAmHNsgG,EAAe,SAACxhG,GAClB,IAAQ3B,EAAqB2B,EAArB3B,SAAUgL,EAAWrJ,EAAXqJ,OACZwjI,EAAUC,YAAiB,CAAEzjI,OAAQA,QAAkBS,IAE7D,OACI/K,cAACguI,IAAK,CAAC7pH,QAAQ,EAAOG,UAAU,OAAOF,IAAK0pH,EAAQxuI,SAC/CA,GAGb,EAIe2uI,EAjGW,SAAChtI,GACvB,IACIN,EAGAM,EAHAN,UACAutI,EAEAjtI,EAFAitI,aACA1kI,EACAvI,EADAuI,QAEEhH,EAAUX,IACV2gG,EAAWtwC,aAAc,SAAAnwD,GAAK,OAChCA,EAAM2gB,YAAYwF,KAAK,KAAK,IAGxBnnB,EAAWkoB,cAAXloB,OAqDR,OACIyD,eAAC0T,WAAQ,CAAA5Y,SAAA,CACLU,cAACyiG,EAAY,CAACn4F,OAAQ4jI,EAAap7H,QAAQxT,SACvCU,cAAC0iG,IAAM,CAAC/hG,UAAWkE,IAAWlE,EAAW6B,EAAQsjB,QAAQxmB,SACrDkF,eAACwnB,IAAO,CAAC9rB,QAASsiG,EAAW,UAAY,QAAQljG,SAAA,CAC7CU,cAACkJ,IAAU,CAAC8U,KAAK,QAAQ7d,MAAM,UAAUQ,UAAW6B,EAAQkhI,YAAav6H,QAASK,EAAQlK,SACtFU,cAACmuI,IAAa,MAElBnuI,cAAA,OAAKW,UAAW6B,EAAQwC,MAAOf,GAAG,uBAClCjE,cAACkJ,IAAU,CAAC8U,KAAK,MAAM7d,MAAM,UAAUgJ,QAzBpC,SAACL,IACpBA,EAAMC,kBAEFhI,IAvEC,SAACowC,GAAG,OAAK,IAAIjkC,SAAQ,SAACC,GAC/B,IAAI09B,EAAI,IAAI0e,eACZ1e,EAAEjiC,KAAK,MAAOuoC,GAAK,GACnBtG,EAAEujG,aAAe,OAEjBvjG,EAAEwjG,mBAAqB,WAEnB,GAAoB,IAAjBxjG,EAAEq3B,aAEe,MAAbr3B,EAAEhpB,QAA8B,GAAZgpB,EAAEhpB,QACzB,CACI,IAAIogG,EAAM5oG,KAAKk2B,SACfpiC,EAAQ80G,EACZ,CAER,EAEAp3E,EAAE6f,KAAK,KACX,GAAG,CAyDK+vE,CAjFgB,SAAC76H,GACrB,IAAMia,EAAQ8tF,YAAUpH,KACxB,MAAM,GAANh/F,OAAU2sD,KAAiB3sD,OAAG3B,EAAI,WAAA2B,OAAUsY,EAChD,CA4EoByuG,CAAgBvnH,EAAOnB,OAEzBwN,MAAK,SAAA28G,GACX,IAAM/7F,EAAO64F,SAASpgG,cAAc,KACpCuH,EAAK6nB,KAAOq0E,IAAIC,gBAAgBJ,GAChC/7F,EAAKq8F,SAAWtpH,EAAOoB,KACvB6rB,EAAKs8F,QACLt8F,EAAKquC,QACT,GACJ,EAWmF/8D,SAC3DU,cAACsuI,IAAU,aAK3BtuI,cAACgsB,IAAO,CAAC9rB,QAASsiG,EAAW,UAAY,YAGrD,E,qLCxIMzgG,EAAQ4iG,YAAY,CACtBn+F,QAAS,CACLC,KAAM,UAIR5E,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFnG,MAAO4B,EAAMyE,QAAQG,gBACjB5E,EAAMyE,QAAQ6H,WAAW0Z,SAE7B,eAAgB,CAEZja,SAAU,wBAGlBuxB,UAAW,CACP7tB,OAAQ,OACRlD,QAAS,OACTuZ,cAAe,SACf,eAAgB,CACZrW,OAAQ,QAGZu2E,QAAS,EACTG,UAAW,OACXqmD,UAAW,SAEX,UAAW,CACPh2H,QAAS,KACTjK,QAAS,eACTF,cAAe,SACfoD,OAAQ,OACRjD,MAAO,MAGfgK,QAAS,CACLyP,SAAU,EACVC,UAAW,GACXmD,aAAc,GACdN,WAAY,GACZuD,YAAa,IAEjBvI,OAAQ,CAAC,EACT0oH,SAAU,CACNjoI,gBAAiB,uBAErBkoI,aAAc,CACV5rI,OAAQ,GACRiL,SAAU,WACVwU,KAAM,EACND,IAAK,SAETqsH,SAAU,CACN7rI,OAAQ,GACRiL,SAAU,WACVyU,MAAO,EACPF,IAAK,SAGZ,GAAG,CAAElgB,KAAM,gBAENghB,EAAqB,CAAEC,MAAOC,IAASC,eAAgBC,KAAMF,IAASG,eAEtEmrH,EAAc,SAAC1tI,GACjB,IACI3B,EAYA2B,EAZA3B,SACAqB,EAWAM,EAXAN,UACAiI,EAUA3H,EAVA2H,KACA6a,EASAxiB,EATAwiB,gBACA7iB,EAQAK,EARAL,SACAkG,EAOA7F,EAPA6F,SACA7C,EAMAhD,EANAgD,GACAuF,EAKAvI,EALAuI,QACAo7E,EAIA3jF,EAJA2jF,OACAgqD,EAGA3tI,EAHA2tI,WACAtC,EAEArrI,EAFAqrI,YACG5oH,EAAKjkB,YACRwB,EAAKvB,GAIH8C,EAAUX,IACVouB,EAAkBC,YAAkB,CAAEtvB,WAAUkG,WAAU7C,OAC1DiqI,EAAep8H,iBAAO,MACtB+8H,EAAkB/8H,mBAuBxB,OACI9R,cAACowB,IAAmB,CAAC9uB,MAAO2uB,EAAgB3wB,SACxCU,cAAC8uI,IAAKrtI,wBAAA,CACFd,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,GACpCouI,kBAAmBC,IACnBC,cAAe,CACX9rH,mBAAoBA,EACpB3gB,QAAS,CAAE8D,KAAM9D,EAAQgsI,WAE7BU,sBAAoB,EACpB1lI,QAASA,EACTZ,KAAMA,GACF8a,GAAK,IAAApkB,SAETU,cAACmvI,IAAI1tI,wBAAA,CACD0iB,QAAM,EACNC,GAAIxb,EACJyb,QAASlB,GACLM,GAAe,IAAAnkB,SAEnBkF,eAAA,OACIqF,IAAKqkI,EACLvtI,UAAWkE,IAAWrC,EAAQ68B,WAC9B+vG,UAxCQ,SAACtmI,GACrBA,EAAMwB,SAAWxB,EAAMM,eAIvBN,EAAMwB,SAAWukI,EAAgB/7H,UAIrC+7H,EAAgB/7H,QAAU,KAEtBtJ,GACAA,EAAQV,EAAO,iBAEvB,EA2BoBumI,YA7CI,SAACvmI,GACrB+lI,EAAgB/7H,QAAUhK,EAAMwB,MACpC,EA2CiDhL,SAAA,CAE7BU,cAACiuI,EAAiB,CAACC,aAAcA,EAAc1kI,QAASA,IACxDxJ,cAAA,OAAKW,UAAWkE,IAAW,uBAAwBrC,EAAQ+V,SAASjZ,SAC/D8G,uBAAaqC,WAASijB,KAAKpsB,GAASmC,wBAAA,GAC9BwuB,GAAe,IAClBq8G,mBAIPvmI,QAAQ6oI,IACT5uI,cAACkJ,IAAU,CAAC/I,MAAM,UAAUQ,UAAW6B,EAAQisI,aAActlI,QAASylI,EAAWtvI,SAC7EU,cAACsvI,IAAe,MAEnBvpI,QAAQ6+E,IACT5kF,cAACkJ,IAAU,CAAC/I,MAAM,UAAUQ,UAAW6B,EAAQksI,SAAUvlI,QAASy7E,EAAOtlF,SACrEU,cAACmuF,IAAgB,gBAQ7C,EAYeohD,EAVc,SAACtuI,GAE1B,OACIjB,cAAC2oB,IAAa,CAAC5mB,MAAOA,EAAMzC,SACxBU,cAAC2uI,EAAWltI,YAAA,GAAKR,KAG7B,EC1HeuuI,IAjDwB,SAACvuI,GACtC,IAAQ3B,EAA4C2B,EAA5C3B,SAAqBmwI,EAAuBxuI,EAAlCmyD,UAAsB5pD,EAAYvI,EAAZuI,QACxC8R,EAA0CC,cAAlC3a,EAAQ0a,EAAR1a,SAAUkG,EAAQwU,EAARxU,SAAgByG,GAAF+N,EAAJ9L,KAAS8L,EAAH/N,KAClCwE,EAAkC1J,mBAASonI,GAAUz9H,EAAAnM,YAAAkM,EAAA,GAA9CqhD,EAASphD,EAAA,GAAEqhD,EAAYrhD,EAAA,GAC9BkP,EAAsC7Y,oBAAS,GAAM8Y,EAAAtb,YAAAqb,EAAA,GAA9CorH,EAAWnrH,EAAA,GAAEuuH,EAAcvuH,EAAA,GAElCnL,qBAAU,WACRq9C,EAAao8E,GACbC,GAAe,EACjB,GAAG,CAACD,IAEJ,IAAME,EAAav9H,uBAAY,WAC7B,IAAMsL,EAAQnQ,EAAIkmB,QAAQ2/B,GACpBw8E,GAAwB,IAAXlyH,GAAmBA,IAAUnQ,EAAI5E,OAAS,EAAK,EAAI+U,EAAQ,EACxEmyH,EAAStiI,EAAIqiI,GAEnBv8E,EAAaw8E,GACbH,GAAe,EACjB,GAAG,CAACr8E,EAAc9lD,EAAK6lD,IAEjB08E,EAAiB19H,uBAAY,WACjC,IAAMsL,EAAQnQ,EAAIkmB,QAAQ2/B,GACpB28E,GAAwB,IAAXryH,GAA6B,IAAVA,EAAenQ,EAAI5E,OAAS,EAAI+U,EAAQ,EACxEsyH,EAASziI,EAAIwiI,GAEnB18E,EAAa28E,GACbN,GAAe,EACjB,GAAG,CAACr8E,EAAc9lD,EAAK6lD,IAGvB,OAAKA,EAGHpzD,cAAC2uI,EAAW,CACVrvI,SAAUA,EACV2E,GAAImvD,EACJxyD,SAAUA,EACVkG,SAAUA,EACV8B,KAAM7C,QAAQqtD,GACd5pD,QAASA,EACTo7E,OAAQ+qD,EACRf,WAAYkB,EACZxD,YAAaA,IAZM,IAgBzB,C,+KCTe2D,EAnCO,SAAChvI,GACnB,IACIN,EAKAM,EALAN,UACOuvI,EAIPjvI,EAJA+D,MACMmrI,EAGNlvI,EAHArB,KACewwI,EAEfnvI,EAFAmtD,cACMiiF,EACNpvI,EADAwF,KAEE1F,EAASurC,YAAiBrrC,GAC1B+D,EAAQ3D,IAAIN,EAAQmvI,EAAYA,GAChCtwI,EAAOyB,IAAIN,EAAQovI,GAEnBG,EADgBjvI,IAAIN,EAAQqvI,EAAoBxwI,IAClBA,EAC9B6G,EAAOpF,IAAIN,EAAQsvI,GAEzB,OAAInpB,IAAQa,MAAMj0F,SAASrtB,GACvBzG,cAAC+sI,IAAS,CACN3sI,UAAU,MACVO,UAAWA,EACXonH,MAAOO,YAAgBgoB,GACvBtrI,MAAOA,IAIXhF,cAAC+sI,IAAS,CACNpsI,UAAWA,EACXqE,MAAOA,EAAM1F,SAEbU,cAACwsD,IAAQ,CAACzrD,OAAQA,EAAQ0J,SAAS,aAI/C,E,SC1BM5I,EAAYC,aAAW,SAAAC,GAAK,MAAK,CAOnC40C,KAAM,CACF,EAEJyR,SAAU,CACNvgB,OAAQ,WAEZwgB,MAAO,CACH72C,OAAQ,IACRlD,QAAS,OACTmU,WAAY,SACZD,eAAgB,SAChB/X,SAAU,IAGdzF,MAAO,CACHqpB,YAAa,QAEjBpd,OAAQ,CACJgX,WAAY,EACZmD,cAAe,GAEtB,IAKK0oC,EAAW,SAAC7yD,GASVA,EAPAN,UADJ,IAEa2qB,EAMTrqB,EANAuB,QACA5B,EAKAK,EALAL,SACOsvI,EAIPjvI,EAJA+D,MACAmE,EAGAlI,EAHAkI,QACArC,EAEA7F,EAFA6F,SAAQzD,EAERpC,EADAf,eAAO,IAAAmD,EAAG,YAAWA,EAEnBb,EAAUX,EAAU,CAAEW,QAAS8oB,IAC/BvqB,EAASurC,cACf,IAAKvrC,EAAQ,OAAO,KAEpB,IAAMiE,EAAQ3D,IAAIN,EAAQmvI,EAAYA,GAGtC,OACI1rI,eAACiqB,IAAI,CAAC9tB,UAAWkE,IAAWrC,EAAQm0C,MAAOz2C,QAASA,EAAQZ,SAAA,CACxDU,cAACuwI,IAAc,CAACpnI,QAASA,EAAQ7J,SAC7BU,cAACiwI,EAAaxuI,YAAA,CAACd,UAAW6B,EAAQ6lD,OAAWpnD,MAEjDuD,eAACggH,IAAW,CAAAllH,SAAA,CACRU,cAACwsD,IAAQ,CAACzrD,OAAQA,IAClBf,cAACC,IAAU,CAACC,QAAQ,UAAUurB,QAAM,EAAC9qB,UAAW6B,EAAQwC,MAAM1F,SAAE0F,IAChEhF,cAAC4zD,IAAqB,CAAC7yD,OAAQA,EAAQH,SAAUA,EAAUkG,SAAUA,SAIrF,EAEAgtD,EAASnyD,aAAe,CACpBf,SAAU,OACViK,SAAU,QAGCipD,K,2KC3ETynE,EAAe,KAEf15H,EAAYC,YAAW,CACzB8lC,cAAe,CACXr5B,MAAO,GACPiD,OAAQ,GACR6c,YAAa,EACb5L,WAAY,UAEhBtK,SAAU,CACNwS,cAAe,OACfkd,OAAQ,UACRnd,QAAS,MAIXod,EAAWj7B,gBAAK,SAAAxN,GAKf,IAAD0oC,EAAAyoG,EAJFxoG,EAAM3oC,EAAN2oC,OACoBC,EAAkB5oC,EAAtC6oC,mBACeC,EAAa9oC,EAA5B+oC,cAGM5lC,GAFE/C,YAAAJ,EAAAK,GAEQmC,KAEV6jC,GAAO2C,EADO9nC,cAAZ8nC,SACaL,GACrB,IAAKtC,EAAM,OAAO,KAElB,IAAM+qG,GAAwB,OAAJ/qG,QAAI,IAAJA,GAAe,QAAXqC,EAAJrC,EAAMtK,iBAAS,IAAA2M,OAAX,EAAJA,EAAiBouB,eAAgBolE,EAAazjG,KAAS,OAAJ4N,QAAI,IAAJA,GAAe,QAAX8qG,EAAJ9qG,EAAMtK,iBAAS,IAAAo1G,OAAX,EAAJA,EAAiBr6E,aAE9F,OACIn2D,cAACuoC,IAAQ,CACLP,OAAQtC,EAAKzhC,GACbtB,MAAO3C,cAACmoC,EAAa,CAACzC,KAAMA,IAC5Bv7B,KAAMnK,cAACioC,EAAkB,CAACvC,KAAMA,IAChC/kC,UAAWsjB,kBAAIzP,YAAC,CAAC,EACZhS,EAAQ2V,SAAWs4H,IAExBjuI,QAAS,CAAEolC,cAAeplC,EAAQolC,eAAgBtoC,SAEjDkpC,MAAMC,QAAQ/C,EAAKgD,YAAchD,EAAKgD,WAAWrjC,KAAI,SAACsjC,GAAS,OAAM3oC,cAAC8nC,EAAQ,CAACE,OAAQW,EAAU1kC,IAAS0kC,EAAU1kC,GAAM,IAAK,MAG5I,IAEA6jC,EAASnmC,aAAe,CACpBumC,mBAAoBU,IACpBR,cAAeS,KAIJf,K,gMC/CTn+B,EAAUvB,IAAMwB,YAAW,SAAC3I,EAAO4I,GAAG,OAAK7J,cAACK,IAAIoB,YAAA,CAACqI,SAAUD,GAAS5I,GAAS,IAE7EuzC,EAAuBpsC,IAAMwB,YAAW,SAAAvK,EAO3CwK,GAAQxK,EANPyH,SAMQ,IANKmD,EAAA5K,EACbsD,aAAK,IAAAsH,EAAG,iBAAgBA,EAAAC,EAAA7K,EACxB8K,YAAI,IAAAD,EAAGE,EAAWF,EAClBnJ,EAAM1B,EAAN0B,OAAMsJ,EAAAhL,EACNiL,cAAM,IAAAD,EAAG,QAAOA,EACbvG,EAAIrE,YAAAJ,EAAAK,GAEDwB,EAAYC,cACZysB,EAAyB,OAAN7sB,QAAM,IAANA,OAAM,EAANA,EAAQ6sB,iBAEjC,OAAKA,EAGDppB,eAACO,IAAQtD,wBAAA,CACLrB,UAAWuJ,EACXpK,GAAI,CACA4M,SAAS,cAAD5K,OAAgBqsB,EAAiB3pB,GAAE,SAC3C+G,OAAO,IAADzJ,OAAM8F,oBAAU,CAClBuS,UAAWxS,KAAKC,UAAU,CAAEwmB,QAAS9sB,EAAOkD,SAGpDqG,OAAQA,EACRT,IAAKA,EACLV,QAASJ,GACLjF,GAAI,IAAAxE,SAAA,CAERU,cAACwK,IAAY,CAAAlL,SACR8I,IAAMhC,aAAa+D,EAAM,CACtBM,SAAU,YAGlBzK,cAACC,IAAU,CAACC,QAAQ,UAASZ,SAAE4B,EAAUyB,SArBnB,IAwBlC,IAEMyH,EAAcpK,cAAC8tB,IAAa,IAE5B/kB,EAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EASlCyrC,K,8NCpBAk8F,EAjCQ,SAAHrxI,GAIb,IAHHmK,EAAOnK,EAAPmK,QACAzI,EAAM1B,EAAN0B,OAGMyB,GAFE/C,YAAAJ,EAAAK,GAEQmC,KAChBgsF,EAGIttF,cAFAK,GADQitF,EAAJr+B,KACIq+B,EAARjtF,UACAkG,EAAQ+mF,EAAR/mF,SAIE4E,EAAW1F,mBACb,iBAAO,CACHmG,SAAS,IAAD5K,OAAMX,EAAQ,WACtB8L,MAAO,CAAEiyC,SAAU59C,EAAOkD,IAC7B,GACD,CAAC6C,EAAUlG,IAGf,OAEI4D,eAACO,IAAQ,CACL3E,UAAWC,IACXd,GAAImM,EACJvC,QAfY,WAAH,OAASK,GAAU,EAePlK,SAAA,CAErBU,cAAC2wI,IAAoB,CAACxwI,MAAM,SAASQ,UAAW6B,EAAQ2H,KAAMM,SAAS,UACvEzK,cAACC,IAAU,CAACC,QAAQ,UAASZ,SAAC,iDAG1C,EAKMuC,EAAYC,YAAW,CACzBqI,KAAM,CACFkkB,YAAa,M,gBCpCNjR,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,sgBAGd,ECyBeozH,EA3BQ,SAAHrxI,GACRA,EAARyH,SAEQzH,EAARC,SACSD,EAATsB,UAIG,IAHHI,EAAM1B,EAAN0B,OAEAyI,GADQnK,EAARuB,SACOvB,EAAPmK,SAEMhH,EAAUX,IACRqtH,EAAY3uH,cAAZ2uH,QAEF0hB,EAAYx+H,uBAAY,SAACtJ,GAC3BA,EAAM6X,iBACN7X,EAAMC,kBACNmmH,EAAQnuH,EAAOkD,IACfuF,GACJ,GAAG,IAEH,OACIhF,eAACO,IAAQ,CAACoE,QAASynI,EAAUtxI,SAAA,CACzBU,cAAC6wI,EAAG,CAAC1wI,MAAM,SAASQ,UAAW6B,EAAQ2H,KAAMM,SAAS,UACtDzK,cAACC,IAAU,CAACC,QAAQ,UAASZ,SAAC,uDAG1C,EAKMuC,EAAYC,YAAW,CACzBqI,KAAM,CACFkkB,YAAa,MC5BNjR,MARf,SAAcnc,GACZ,OACEjB,cAACqd,IAAO5b,wBAAA,GAAKR,GAAK,IAAA3B,SAChBU,cAAA,QAAMsd,EAAE,6NAGd,EC4BeozH,EA9BQ,SAAHrxI,GACRA,EAARyH,SAEQzH,EAARC,SACSD,EAATsB,UAIG,IAHHI,EAAM1B,EAAN0B,OAEAyI,GADQnK,EAARuB,SACOvB,EAAPmK,SAEMhH,EAAUX,IAChBgsF,EAA6BttF,cAArBouH,EAAK9gC,EAAL8gC,MAAOQ,EAASthC,EAATshC,UAET2hB,EAAc1+H,uBAAY,SAACtJ,GAC7BA,EAAM6X,iBACN7X,EAAMC,kBACNomH,EAAUpuH,EAAOkD,GAAI0qH,EAAM3mF,QAC3Bx+B,GACJ,GAAG,IAEGunI,EAAWpiB,GAAS5tH,EAAOkD,KAAO0qH,EAAM3mF,OAE9C,OAEIxjC,eAACO,IAAQ,CAACoT,UAAW44H,EAAU5nI,QAAS2nI,EAAYxxI,SAAA,CAChDU,cAACgxI,EAAK,CAAC7wI,MAAM,SAASQ,UAAW6B,EAAQ2H,KAAMM,SAAS,UACxDzK,cAACC,IAAU,CAACC,QAAQ,UAASZ,SAAC,uDAG1C,EAKMuC,EAAYC,YAAW,CACzBqI,KAAM,CACFkkB,YAAa,M,iBCRNqiH,EA3BQ,SAAHrxI,GACRA,EAARyH,SAEQzH,EAARC,SACSD,EAATsB,UAIG,IAHHI,EAAM1B,EAAN0B,OAEAyI,GADQnK,EAARuB,SACOvB,EAAPmK,SAEMhH,EAAUX,IACRktH,EAAexuH,cAAfwuH,WACFkiB,EAAyB,SAAhBlwI,EAAO0F,KAOtB,OAEIjC,eAACO,IAAQ,CAACoE,QAPM,WAChB4lH,EAAWhuH,EAAOkD,GAAIgtI,GACtBznI,GACJ,EAImClK,SAAA,CAC3BU,cAACkxI,IAAU,CAAC/wI,MAAM,SAASQ,UAAW6B,EAAQ2H,KAAMM,SAAS,UAC7DzK,cAACC,IAAU,CAACC,QAAQ,UAASZ,SAAC,iDAG1C,EAKMuC,EAAYC,YAAW,CACzBqI,KAAM,CACFkkB,YAAa,MCqCfxsB,GAHS8jI,IAnDoB,SAAHtmI,GAMzB,IALHyH,EAAQzH,EAARyH,SACAxH,EAAQD,EAARC,SACAqB,EAAStB,EAATsB,UACA+kC,EAAIrmC,EAAJqmC,KACA9kC,EAAQvB,EAARuB,SAEAmR,EAAgC1J,mBAAS,MAAK2J,EAAAnM,YAAAkM,EAAA,GAAvCxJ,EAAQyJ,EAAA,GAAExJ,EAAWwJ,EAAA,GACtBxP,EAAUX,IASVgH,EAAc,WAAH,OAASL,EAAY,KAAM,EAE5C,OACIhE,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIU,cAACkJ,IAAU,CAAC,aAAW,eAAeG,KAAK,QAAQF,QATvC,SAACL,GACjBA,EAAMC,kBACNP,EAAYM,EAAMM,cACtB,EAMiFzI,UAAWkE,IAAWrC,EAAQkjI,cAAe/kI,GAAWrB,SAC7HU,cAACsJ,IAAY,CAACmB,SAAS,cAQ3BjG,eAAC+E,IAAI,CAAChB,SAAUA,EAAUK,OAAQL,EAAUiB,QAASX,EAAYvJ,SAAA,CAC5DmJ,WAASpD,IAAI/F,GAAU,SAAAmxC,GAAK,OACzB/mC,yBAAe+mC,GACTrqC,uBAAaqqC,EAAO,CAClB3pC,WACA/F,OAAQ2kC,EACR9kC,aAEF,IAAI,IAEdZ,cAAC0wI,EAAc,CAAClnI,QAASX,EAAa9H,OAAQ2kC,IAC9C1lC,cAACmxI,EAAW,CAAC3nI,QAASX,EAAa9H,OAAQ2kC,IAC3C1lC,cAACoxI,EAAa,CAAC5nI,QAASX,EAAa9H,OAAQ2kC,IAC7C1lC,cAAC6wC,IAAO,IACR7wC,cAACqxI,EAAc,CAAC7nI,QAASX,EAAa9H,OAAQ2kC,SAK9D,EAKkB5jC,YAAW,CACzB4jI,cAAe,CAIX,EAEJv7H,KAAM,CACFkkB,YAAa,M,4JChFf2/B,G,MAAiB,OAEVs6D,EAAkB,SAAC1oH,GAI5B,OADmBouD,EAAel2B,KAAKl4B,GACtB,GAAA2B,OAAM2sD,KAAiB3sD,OAAG3B,GAASA,CACxD,EAEasnH,EAAU,CACnBC,IAAK,CAAC,2EACNE,IAAK,CAAC,mBACNn7F,KAAM,CAAC,cACPs7F,IAAK,CAAC,qEACNE,IAAK,CAAC,MAAO,2BAA4B,kBAAmB,oBAAqB,gCACjFxtB,MAAO,CAAC,cACR2tB,MAAO,CAAC,aACRE,MAAO,CAAC,aAAc,YAAa,iBACnC11B,OAAQ,CAAC,kBAAmB,oBAC5BmrC,MAAO,CAAC,kBAAmB,qBAGlB/rE,EAAc9jD,OAAOD,KAAKw5G,GAASj8G,QAAO,SAACC,EAAK3F,GAAG,SAAAhE,OAAA6J,YAASF,GAAGE,YAAK87G,EAAQ3hH,IAAI,GAAG,G,uKClB1F1D,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACF2hB,UAAWlmB,EAAMG,QAAQ,GACzBkpB,aAAcrpB,EAAMG,UACpB,gBAAiB,CACb+lB,UAAW,IAGnB1P,QAAS,CACL0nB,SAAU,UAEjB,GAAG,CAAE99B,KAAM,qBAENysB,EAAmB,SAAHvvB,GAOf,IANHC,EAAQD,EAARC,SAEAqB,GADwBtB,EAAxBmD,QACSnD,EAATsB,WACWimB,EAASvnB,EAApBe,UACAuC,EAAKtD,EAALsD,MACG1B,EAAKxB,YAAAJ,EAAAK,GAGF8C,EAAUX,IACVX,EAAYC,cAClB,OACIqD,eAAA,OAAK7D,UAAS,GAAAY,OAAKiB,EAAQ8D,KAAI,KAAA/E,OAAIZ,GAAYrB,SAAA,CAC1CqD,GAAS3C,cAACC,IAAU,CAACC,QAAQ,YAAYC,MAAM,gBAAgBqrB,cAAY,EAACC,QAAM,EAAAnsB,SAAE4B,EAAUyB,EAAO,CAAEnB,EAAGmB,MAC3G3C,cAAC4mB,EAAS,CAACjmB,UAAW6B,EAAQ+V,QAAQjZ,SAClCU,cAACsxI,IAAkB7vI,wBAAA,GAAKR,GAAK,IAAA3B,SACxBA,SAKrB,EAEAsvB,EAAiBjtB,aAAe,CAC5BvB,UAAWquB,KAKAG,K,qEC9CT/sB,EAAYC,aAAW,SAAAC,GAAK,IAAAwvI,EAAAC,EAAAC,EAAA,MAAK,CACnCnrI,KAAM,CACF,SAAU,CACNokB,QAAS,EACTsyE,UAAW,uBAEf,uBAAqBu0C,EAAA,GAAA/8H,YAAA+8H,EAChB,0BAA4B,QAAM/8H,YAAA+8H,EAAC,iBACpB,QAAMA,GAE1B,uBAAqBC,EAAA,GAAAh9H,YAAAg9H,EAChB,0BAA4B,QAAMh9H,YAAAg9H,EAAC,iBACpB,QAAMA,GAE1B,uBAAqBC,EAAA,GAAAj9H,YAAAi9H,EAChB,0BAA4B,QAAMj9H,YAAAi9H,EAAC,iBACpB,QAAMA,IAG9B,oBAAqB,CACjB,KAAM,CAAE/mH,QAAS,GACjB,MAAO,CAAEA,QAAS,GAClB,OAAQ,CAAEA,QAAS,IAG1B,IAQcgnH,IALQ,SAACzwI,GACpB,IAAMuB,EAAUX,IAChB,OAAO2C,eAAA,QAAM7D,UAAW6B,EAAQ8D,KAAKhH,SAAA,CAACU,cAAA,QAAAV,SAAM,MAAQU,cAAA,QAAAV,SAAM,MAAQU,cAAA,QAAAV,SAAM,QAC5E,C,mCCnCA,aAIA,SAASijE,EAAmBzvB,EAAM0vB,EAAgBC,EAASC,GAIzD,IAAMC,EAAc5B,IAAgB6B,UAClC,CACEjpD,MAAM,qXAiBNC,UAAWk5B,GAEb,CACE74B,KAAMuoD,EACNn+D,MAAO,SAACumC,GACNwhB,QAAQC,IAAI,gBAAD9qD,OAAiBqpC,EAAIp4B,UAChCiwD,GAAWA,EAAQ73B,EACrB,EACAi4B,SAAU,SAACC,GAETJ,GAAcA,EAAWI,EAC3B,IAMJzpD,KAAK0pD,YAAc,WACnB,EAEA1pD,KAAKspD,YAAc,kBAAMA,GAAc,EAEvCtpD,KAAKs4H,oBAAqB,CAE5B,CAOe/uE,IAJG,SAAC9vB,EAAM0vB,EAAgBC,EAASC,GAChD,OAAO,IAAIH,EAAmBzvB,EAAM0vB,EAAgBC,EAASC,EAC/D,C,wFChDasK,EAAsBpwD,YAAGC,MAAAC,YAAA,2WAUhC6vD,KAGS,aAAC75B,GACZ,IAAQvlC,EAAQulC,EAARvlC,IAER,OAAOwlC,IAAcz5B,QAAQ0zD,EAAqB,CAC9ClnE,OAAQ,CACJyH,OAEJsR,QAAStR,EAAI5E,SACdyE,MAAK,SAAAmiC,GAAa,IAADyD,EAAAC,EAEhB,MAAO,CACHzjC,MAFkB,OAAR+/B,QAAQ,IAARA,GAAc,QAANyD,EAARzD,EAAU//B,YAAI,IAAAwjC,GAAM,QAANC,EAAdD,EAAgBxjC,YAAI,IAAAyjC,OAAZ,EAARA,EAAsB/Q,OAEpB78B,IAAI+nC,KAExB,IAAG8F,MAAMC,IACZ,C,+LC5BKy+F,EAAe/kI,gBAAK,SAAA5L,GACtB,IAAQN,EAA0CM,EAA1CN,UAAWE,EAA+BI,EAA/BJ,OAAQ49C,EAAuBx9C,EAAvBw9C,UAAc36C,EAAIrE,YAAKwB,EAAKvB,GACjDwB,EAAYC,cACZJ,EAASurC,YAAiBrrC,GAC1BK,EAAQD,IAAIN,EAAQF,GACpBgxI,EAAyB,MAATvwI,EAAiBm9C,EAAYv9C,EAAqB,IAAVI,EAAe,6CAA+C,6CAE5H,OACItB,cAACC,IAAUwB,wBAAA,CACPrB,UAAU,OACVF,QAAQ,QACRS,UAAWA,EACXR,MAAQmB,EAAQ,EAAK,QAAU,WAC3BI,YAAuBoC,IAAK,IAAAxE,SAE/BuyI,IAGb,IAEAD,EAAa3vH,YAAc,eAE3B2vH,EAAajwI,aAAe,CACxBC,UAAU,GAGCgwI,Q,eCKApuD,IA5BU,SAAHnkF,GAAgC,IAA1BC,EAAQD,EAARC,SAAa2B,EAAKxB,YAAAJ,EAAAK,GACpCwB,EAAYC,cACVJ,EAAWE,EAAXF,OAER,OAAKA,EAGDf,cAACgJ,IAAO,CACJhE,MACIR,eAAA8hB,WAAA,CAAAhnB,SAAA,CACIkF,eAACvE,IAAU,CAACC,QAAQ,UAAUE,UAAU,IAAGd,SAAA,CAAE4B,EAAU,2BAA2B,KAAElB,cAACyE,IAAS,CAAC1D,OAAQA,EAAQF,OAAO,KAAKX,QAAQ,eACnIsE,eAACvE,IAAU,CAACC,QAAQ,UAAUE,UAAU,IAAGd,SAAA,CAAE4B,EAAU,8BAA8B,KAAElB,cAACyE,IAAS,CAAC1D,OAAQA,EAAQF,OAAO,QAAQX,QAAQ,eACzIsE,eAACvE,IAAU,CAACC,QAAQ,UAAUE,UAAU,IAAGd,SAAA,CAAE4B,EAAU,mCAAmC,KAAElB,cAACyE,IAAS,CAAC1D,OAAQA,EAAQF,OAAO,aAAa49C,UAAU,IAAIv+C,QAAQ,eACjKsE,eAACvE,IAAU,CAACC,QAAQ,UAAUE,UAAU,IAAGd,SAAA,CAAE4B,EAAU,kCAAkC,KAAElB,cAACgvB,IAAS,CAACjuB,OAAQA,EAAQF,OAAO,YAAYouB,UAAQ,EAAC/uB,QAAQ,eAC1JsE,eAACvE,IAAU,CAACC,QAAQ,UAAUE,UAAU,IAAGd,SAAA,CAAE4B,EAAU,qCAAqC,KAAElB,cAACgvB,IAAS,CAACjuB,OAAQA,EAAQF,OAAO,eAAeouB,UAAQ,EAAC/uB,QAAQ,eAChKsE,eAACvE,IAAU,CAACC,QAAQ,UAAUE,UAAU,IAAGd,SAAA,CAAE4B,EAAU,kCAAkC,KAAGH,EAAO21G,UAAU,+BAC7GlyG,eAACvE,IAAU,CAACC,QAAQ,UAAUE,UAAU,IAAGd,SAAA,CAAE4B,EAAU,gCAAgC,KAAElB,cAAC4xI,EAAY,CAAC7wI,OAAQA,EAAQF,OAAO,UAAUX,QAAQ,kBAGxJ+I,WAAY,IAAI3J,SAEfA,IAjBWA,CAoBxB,C,sJCxBawyI,EAAgB,SAAC7wI,GAC1B,IAAQF,EAAWE,EAAXF,OACR,IAAKA,EAAQ,OAAO,KACpB,IAAM0F,EAAOpF,IAAIN,EAAQ,CAAC,YAAa,SACjCuN,EAAUjN,IAAIN,EAAQ,CAAC,YAAa,YAG1C,OAF+B,SAAZuN,EAAsBA,EAAU7H,GAG/C,IAAK,KACL,IAAK,SAQL,IAAK,OACL,IAAK,QACL,IAAK,QACL,IAAK,MACL,IAAK,KACL,IAAK,OACL,IAAK,QACL,IAAK,OAEL,QAAS,OAAOzG,cAAC4f,IAASne,YAAA,GAAKR,IAhB/B,IAAK,WAAY,OAAOjB,cAACgoI,IAAavmI,YAAA,GAAKR,IAC3C,IAAK,UAAW,OAAOjB,cAACsC,IAAYb,YAAA,GAAKR,IACzC,IAAK,MACL,IAAK,SAGL,IAAK,OAAQ,OAAOjB,cAACsxB,IAAW7vB,YAAA,CAACyyG,KAAM,GAAOjzG,IAF9C,IAAK,QAAS,OAAOjB,cAACsxB,IAAW7vB,YAAA,CAACyyG,KAAM,IAASjzG,IACjD,IAAK,WAAY,OAAOjB,cAACuxB,IAAa9vB,YAAA,GAAKR,IAU3C,IAAK,OAAQ,OAAOjB,cAACkxB,IAAWzvB,wBAAA,GAAKR,GAAK,IAAEkwB,QAAS9vB,IAAIN,EAAQ,CAAC,YAAa,SAAU,gBAAiB,WAAY,IAAK6G,WAAW,QAAQsI,YAAY,QAGlK,EAuBe6hI,IApBe,SAAC9wI,GAC3B,IAAQF,EAAsBE,EAAtBF,OAAQq6B,EAAcn6B,EAAdm6B,UAChB,IAAKr6B,EAAQ,OAAO,KAChBq6B,IAAWr6B,EAAOq6B,UAAYA,GAClC,IAAM4tD,EAAO3nF,IAAIN,EAAQ,CAAC,YAAa,SACjC4nH,GAAarlC,YAAO0F,GAE1B,OACIhpF,cAAC8xI,EAAarwI,wBAAA,GACNR,GAAK,IACTwN,WAAS,EACT6zB,WAAY,CACRM,aAAc+lF,EAAW3oH,cAAC6iC,IAAc,CAAC/0B,SAAS,MAAKxO,SAAE0pF,EAAK7mF,OAAyB,QAIvG,C,iOCrCe6vI,EAbS,SAAH3yI,GAAiC,IAA3BsB,EAAStB,EAATsB,UACfI,EADkCtB,YAAAJ,EAAAK,GAClCqB,OACFG,EAAYC,cAClB,OAAKJ,EAEGA,EAAO+/C,OACT9gD,cAACgmF,IAAuB,CAAC9D,YAAahhF,EAAU,oCAAqC,CAAEM,EAAG,SAAWb,UAAWA,EAAWR,MAAM,UACjIH,cAACimF,IAAiB,CAAC/D,YAAahhF,EAAU,qCAAsC,CAAEM,EAAG,UAAYb,UAAWA,EAAWR,MAAM,aAJ/G,IAMxB,E,2CCKe8xI,EAfM,SAAH5yI,GAAiC,IAA3BsB,EAAStB,EAATsB,UACZI,EAD+BtB,YAAAJ,EAAAK,GAC/BqB,OACFG,EAAYC,cAClB,OAAKJ,EAEGA,EAAOwkF,YACTxkF,EAAOukF,IACHtlF,cAACgtH,IAAW,CAAC9qC,YAAahhF,EAAU,iCAAkC,CAAEM,EAAG,SAAWb,UAAWA,EAAWR,MAAM,YAClHH,cAACgtH,IAAW,CAAC9qC,YAAahhF,EAAU,kCAAmC,CAAEM,EAAG,UAAYb,UAAWA,EAAWR,MAAM,aACxHH,cAAC40H,IAAc,CAAC1yC,YAAahhF,EAAU,iCAAkC,CAAEM,EAAG,SAAWb,UAAWA,EAAWR,MAAM,aANvG,IAQxB,E,wBCFM0B,EAAYC,YAAW,CACzBowI,aAAc,CACV7jH,YAAa,IAEjB8jH,oBAAqB,CACjB7jI,QAAS,QAEb8jI,qBAAsB,CAClBtnH,WAAY,OACZs3E,WAAY,SACZ/5E,YAAa,IAElB,CAAElmB,KAAM,4BA4CIs5F,IAxCiB,SAACx6F,GAC7B,IACIF,EAGAE,EAHAF,OACA+F,EAEA7F,EAFA6F,SACGhD,EAAIrE,YACPwB,EAAKvB,GACH8C,EAAUX,IAChB,OAAKd,EAGDyD,eAAC8nD,IAAQ7qD,wBAAA,CACLwqB,QAAM,EACN7rB,UAAWC,IACXd,GAAE,GAAAgC,OAAKgJ,YAAazD,EAAU/F,EAAOkD,IAAG,SACxCtD,UAAW6B,EAAQwrB,MACflqB,GAAI,IAAAxE,SAAA,CAERkF,eAACgG,IAAY,CAAChI,QAAS,CAAE8D,KAAM9D,EAAQ0vI,cAAe5yI,SAAA,CAClDU,cAAC0tB,IAAiB,CAAC3sB,OAAQA,EAAQJ,UAAW6B,EAAQ2H,OACtDnK,cAACgyI,EAAe,CAACjxI,OAAQA,EAAQJ,UAAW6B,EAAQ2H,OACpDnK,cAACiyI,EAAY,CAAClxI,OAAQA,EAAQJ,UAAW6B,EAAQ2H,UAErDnK,cAACysD,IAAY,CACT4lF,mBAAiB,EACjBl2G,QACI33B,eAAA,OAAK7D,UAAW6B,EAAQ2vI,oBAAoB7yI,SAAA,CACxCU,cAACkvB,IAAc,CAACruB,OAAO,WAAW8B,MAAM,+BAA+B0pB,UAAU,QAAQ2B,MAAM,EAAM1uB,SACjGU,cAACyE,IAAS,CAAC5D,OAAO,OAAOX,QAAQ,QAAQurB,QAAM,MAEnDzrB,cAACC,IAAU,CAACC,QAAQ,QAAQS,UAAW6B,EAAQ4vI,qBAAqB9yI,SAAEgN,WAAS6wB,QAAQp8B,EAAOmkF,cAAc14E,eAAeF,WAASG,qBAG5I0f,UAAWnsB,cAACC,IAAU,CAACC,QAAQ,QAAQC,MAAM,gBAAeb,SAAEyB,EAAOyR,QAAQxN,cAzBrE,IA8BxB,C,mCCpEA,YAceuoI,IAXgB,SAAHluI,GAAsB,IAAhBC,EAAQD,EAARC,SACxB+/B,EACkB,qBAAbwnF,SACDA,SAASC,eAAe,sBACxB,KAEV,OAAKznF,EAEEizG,uBAAahzI,EAAU+/B,GAFP,IAG3B,C,mCCZA,wHAcMkzG,EAAmB,CAAC9zH,eAEpBP,EAAsB,CACxBC,YAAY,EACZC,UAAU,EACVC,OAAO,EACPC,SAAS,GA6DEuyG,IA1DQ,SAAC5vH,GAAW,IAADuxI,EAAAvX,EACtBryH,EAAmC3H,EAAnC2H,KAAMY,EAA6BvI,EAA7BuI,QAASsnH,EAAoB7vH,EAApB6vH,QAAS/vH,EAAWE,EAAXF,OAC1BG,EAAYC,cACZuB,EAAa3B,EAAOu2D,WAAU,GAAA/1D,OAAML,EAAU,mCAAkC,MAAAK,OAAKR,EAAOu2D,iBAAevsD,EAC3G0nI,GAA6B,OAAN1xI,QAAM,IAANA,GAAa,QAAPyxI,EAANzxI,EAAQs6B,aAAK,IAAAm3G,OAAP,EAANA,EAAerwI,QAAc,OAANpB,QAAM,IAANA,GAAiB,QAAXk6H,EAANl6H,EAAQq6B,iBAAS,IAAA6/F,OAAX,EAANA,EAAmB94H,MAEjEue,EAActO,uBAAY,SAAAtJ,GAC5BA,EAAMC,iBACV,GAAG,IAEGF,EAAcuJ,uBAAY,WAC5B5I,GACJ,GAAG,CAACA,IAEEmnH,EAAcv+G,uBAAY,SAACmM,GAC7BuyG,EAAQvyG,EAAOjd,MACnB,GAAG,CAACwvH,IAEJ,OACItsH,eAAC4a,IAAM,CACHxW,KAAMA,EACNY,QAASX,EACTM,QAASuX,EACTjS,WAAS,EACTqxB,SAAS,KACT,kBAAgB,yBAChB,mBAAiB,+BAA8BxgC,SAAA,CAE/CU,cAACqf,IAAW,CAACpb,GAAG,yBAAwB3E,SAAE4B,EAAU,gCACpDsD,eAACkb,IAAa,CAAApgB,SAAA,CACVU,cAAC2f,IAAiB,CAAArgB,SAAG4B,EAAU,+BAAgC,CAAEivB,IAAKpvB,EAAOkD,OAC5EwuI,GAAwBzyI,cAAC2f,IAAiB,CAAArgB,SAAG4B,EAAU,gCAAiC,CAAEm6B,MAAOt6B,EAAOs6B,MAAMl5B,KAAMi5B,UAAWr6B,EAAOq6B,UAAUj5B,YAErJnC,cAACsf,IAAI,CACDsxB,cAAe,CAAEtvC,MAAa,OAANP,QAAM,IAANA,OAAM,EAANA,EAAQO,OAChCie,SAAUoxG,EACVvgH,aAAc8N,EACdsB,yBAAuB,EACvBrP,OAAQ,SAAAsP,GAAS,OACbjb,eAAA,QAAAlF,SAAA,CACIU,cAAC6O,IAAG,CAACZ,QAAQ,SAAQ3O,SACjBU,cAAC8xI,IAAa,CAAClxI,SAAS,MAAMG,OAAQA,EAAQF,OAAO,QAAQ4N,WAAS,EAAC/L,WAAYA,EAAYU,SAAUmvI,MAE7G/tI,eAACqb,IAAa,CAAAvgB,SAAA,CACVU,cAAC8f,IAAM,CAAC3W,QAASN,EAAYvJ,SACxB4B,EAAU,mBAAoB,CAAEM,EAAG,aAExCxB,cAAC8f,IAAM,CAAC3W,QAASsW,EAAUM,aAAc5f,MAAM,UAASb,SACnD4B,EAAU,kBAAmB,CAAEM,EAAG,iBAGxC,MAK3B,C,sHC3DekxI,EAhBK,SAAHrzI,GAAkC,IAA5Bo8E,EAAMp8E,EAANo8E,OAAQD,EAAIn8E,EAAJm8E,KAAM8gD,EAAMj9H,EAANi9H,OAC3Bj3H,EAAMstI,cAUZ,OARA38H,qBAAU,WACFsmH,EACAj3H,EAAIutI,UAAUtW,GAEdj3H,EAAIwtI,QAAQp3D,EAAQD,EAE5B,GAAG,CAACC,EAAQD,EAAM8gD,IAEX,IACX,E,kKCWewW,EAvBI,SAAC7xI,GAAW,IAADw3C,EAEtB93C,EAGAM,EAHAN,UACArB,EAEA2B,EAFA3B,SAAQyzI,EAER9xI,EADA6M,gBAAQ,IAAAilI,EAAG,UAASA,EAGxB,OACI/yI,cAAA,OAAKW,UAAU,4BAA2BrB,SACtCU,cAAA,OAAKW,UAAWkE,KAAU4zC,EAAA,GAAAjkC,YAAAikC,EACrB,cAAgB3qC,EAASgmB,SAAS,QAAMtf,YAAAikC,EACxC,iBAAmB3qC,EAASgmB,SAAS,WAAStf,YAAAikC,EAC9C,eAAiB3qC,EAASgmB,SAAS,SAAOtf,YAAAikC,EAC1C,gBAAkB3qC,EAASgmB,SAAS,UAAQ2kB,IAC9Cn5C,SACCU,cAAA,OAAKW,UAAWkE,IAAW,kBAAmBlE,GAAWrB,SACpDA,OAKrB,ECVMuC,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCs9B,UAAW,CACP/wB,QAAS,OACTuZ,cAAe,SACf+3B,IAAK,GAET3zB,OAAQ,CACJhqB,SAAU,QACVgM,QAAS,EACT1H,gBAAiB,SAExB,GAAG,CAAEpE,KAAM,sBAqDG6wI,EAnDW,SAAC/xI,GACvB,IAAQkI,EAA8ClI,EAA9CkI,QAASm6H,EAAqCriI,EAArCqiI,WAAY7nD,EAAyBx6E,EAAzBw6E,OAAQD,EAAiBv6E,EAAjBu6E,KAAM8gD,EAAWr7H,EAAXq7H,OAErCj3H,EAAMstI,cAENnwI,EAAUX,IAEVoxI,EAAe7gI,uBAAY,SAACtJ,GAC9BA,EAAM6X,iBACN7X,EAAMC,kBACN1D,EAAI6tI,OAAO7tI,EAAIpC,QAAQkwI,WAAarqI,EAAMsqI,SAAW,EAAI,GAC7D,GAAG,IAEGC,EAAgBjhI,uBAAY,SAACtJ,GAC/BA,EAAM6X,iBACN7X,EAAMC,kBACN1D,EAAIiuI,QAAQjuI,EAAIpC,QAAQkwI,WAAarqI,EAAMsqI,SAAW,EAAI,GAC9D,GAAG,IAEGxiF,EAAcx+C,uBAAY,SAACtJ,GAC7BA,EAAM6X,iBACN7X,EAAMC,kBACFuzH,EACAj3H,EAAIutI,UAAUtW,GAEdj3H,EAAIwtI,QAAQp3D,EAAQD,EAE5B,GAAG,CAACC,EAAQD,EAAM8gD,IAElB,OAEI93H,eAACsuI,EAAU,CAACnyI,UAAW6B,EAAQ68B,UAAU//B,SAAA,CACrCkF,eAAC+uI,IAAW,CAACrzI,QAAQ,YAAYszI,YAAY,WAAWC,oBAAkB,EAAC7rD,eAAa,EAAAtoF,SAAA,CACpFU,cAAC8f,IAAM,CAAC3W,QAAS8pI,EAActyI,UAAW6B,EAAQypB,OAAO3sB,SAAEU,cAAC0zI,IAAO,MACnE1zI,cAAC8f,IAAM,CAAC3W,QAASkqI,EAAe1yI,UAAW6B,EAAQypB,OAAO3sB,SAAEU,cAACqW,IAAU,MACvErW,cAAC8f,IAAM,CAAC3W,QAASynD,EAAajwD,UAAW6B,EAAQypB,OAAO3sB,SAAEU,cAAC2zI,IAAc,SAE7E3zI,cAACuzI,IAAW,CAACrzI,QAAQ,YAAYszI,YAAY,WAAWC,oBAAkB,EAAC7rD,eAAa,EAAAtoF,SACpFU,cAACgJ,IAAO,CAACi6B,UAAU,QAAQj+B,MAAOs+H,EAAa,yIAA6B,qJAA6BhkI,SACrGU,cAAC8f,IAAM,CAAC3W,QAASA,EAASxI,UAAW6B,EAAQypB,OAAO3sB,SAC/CgkI,EAAatjI,cAACkkC,IAAS,IAAMlkC,cAAC4zI,IAAY,YAOnE,E,wECvEM/xI,EAAYC,aAAW,SAAAC,GAAK,MAC9B,CACIuE,KAAM,SAAAjH,GAAA,IAAGc,EAAKd,EAALc,MAAK,MAAQ,CAClBA,MAAO4B,EAAMyE,QAAQrG,GAAOgW,KAC/B,EACD+V,KAAM,SAAA9a,GAAA,IAAGjR,EAAKiR,EAALjR,MAAK,MAAQ,CAClBi5E,KAAMr3E,EAAMyE,QAAQG,gBAAgB5E,EAAMyE,QAAQrG,GAAOgW,MAC5D,EACJ,GACF,CAAEhU,KAAM,2BAEL0xI,EAAuB,SAAC5yI,GAC1B,IAAQytD,EAAUztD,EAAVytD,MACFlsD,EAAUX,EAAUZ,GAE1B,OACIuD,eAAA,OAAK+J,MAAM,OAAOiD,OAAO,OAAOqwH,QAAQ,YAAYzoD,KAAK,OAAO0oD,MAAM,6BAA6BnhI,UAAW6B,EAAQ8D,KAAKhH,SAAA,CACvHU,cAAA,UAAQ8zI,GAAG,KAAKC,GAAG,KAAKC,EAAE,KAAK56D,KAAK,eAAeqkD,YAAY,SAC/Dz9H,cAAA,UAAQ8zI,GAAG,KAAKC,GAAG,KAAKC,EAAE,KAAK56D,KAAK,eAAez4E,UAAW6B,EAAQ8iG,SACtEtlG,cAAA,QAAMokD,EAAE,MAAME,EAAE,MAAM2vF,iBAAiB,SAASC,WAAW,SAASvzI,UAAW6B,EAAQ0pB,KAAK5sB,SACvFovD,MAIjB,EAEAmlF,EAAqBlyI,aAAe,CAChCxB,MAAO,WAGI0zI,QCzBTM,EAAiB,CAAC,EAsFTjnD,EApFE,SAACjsF,GACd,IAAQ3B,EAAa2B,EAAb3B,SACFyC,EAAQ4P,cACR0/G,EAAYtvH,EAAMyE,QAAQC,KAE1B2tI,EAAwBtiI,mBAGxBuiI,EAAqBjiI,uBAAY,SAACkiI,GAGpC,IAAMpgI,EAAUogI,EAAQC,qBAClB7lF,EAAQ4lF,EAAQE,gBAChB/kD,EAAUv7E,EAAQqN,MAAK,SAAA+jF,GAAW,IAAD+9B,EAC7BtiI,EAASukG,EAAOriG,QAAQlC,OAC9B,OAAOgF,QAAc,OAANhF,QAAM,IAANA,GAAa,QAAPsiI,EAANtiI,EAAQ00G,aAAK,IAAA4tB,OAAP,EAANA,EAAe/hI,MAClC,IAsBMiE,EAAG,GAAAhE,OAAM8vH,GAAS9vH,OAAGmtD,GAAKntD,OAAGkuF,GAEnC,QAA2B1kF,IAAxBopI,EAAe5uI,GAAoB,CAElC6mD,QAAQC,IAAI,wBAEZ,IAAMi2E,EAAWC,IAAeC,eAC5BxiI,cAAC2oB,IAAa,CAAC5mB,MAAOA,EAAMzC,SACxBU,cAAC6zI,EAAoB,CAACnlF,MAAOA,EAAOvuD,MAAOsvF,EAAU,QAAU,cAIvE0kD,EAAe5uI,GAAOm9H,IAAQ+R,QAAQ,CAClC7R,KAAMN,EACN3hI,UAAW,GACXkiI,SAAUH,IAAQI,MAAM,GAAI,IAAI,IAExC,CAEA,OAAOqR,EAAe5uI,EAE1B,GAAG,CAAC8rH,EAAWtvH,IAYf,OATAiU,qBAAU,WACFo+H,EAAsBthI,UACtBshI,EAAsBthI,QAAQ7P,QAAQoxI,mBAAqBA,EAC3DD,EAAsBthI,QAAQ4hI,kBAGtC,GAAG,CAACN,EAAuBC,EAAoBtyI,IAI3C/B,cAAC20I,IAAkB,CACfC,qBAAqB,EACrBC,iBAAkB,GAClBR,mBAAoBA,EACpBxqI,IAAKuqI,EACLU,gBAAc,EAAAx1I,SAEbA,GAGb,E,2CCvCe4tF,IAxCE,SAAH7tF,GAIP,IAHHC,EAAQD,EAARC,SAEG2B,GADqB5B,EAAxBmD,QACQ/C,YAAAJ,EAAAK,IAGR4b,EAAsBC,YAAeta,GAA7BuO,EAAI8L,EAAJ9L,KAAMjC,EAAG+N,EAAH/N,IACRwnI,EAAevR,YAAej2H,GAAK,SAACyM,EAAMC,GAAI,OAAKD,GAAQA,EAAK+d,aAAe9d,EAAK8d,UAAU,IAC9F0jD,EAASz1E,mBAAQ,kBAAM+1H,YAA0BvsH,EAAMulI,EAAa,GAAE,CAACA,IACvEzY,EAASt2H,mBAAQ,kBAAMo2H,YAA0B5sH,EAAMulI,EAAa,GAAE,CAACA,IACvEv5D,EAAOx1E,mBAAQ,kBAAM,CAAC,GAAE,IAE9B+L,EAAoC1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAA5CuxH,EAAUtxH,EAAA,GAAEgjI,EAAahjI,EAAA,GAE1BijI,EAAmB7iI,uBAAY,WACjC4iI,GAAc,SAACnxC,GAAI,OAAMA,CAAI,GACjC,GAAG,IAGH,OACIr/F,eAACm3E,IAAY,CAACH,KAAMA,EAAMC,OAAQA,EAAQC,oBAAoB,EAAOw5D,aAAa,EAAO98H,MAAO,CAAE7J,MAAO,OAAQiD,OAAQ,QAASlS,SAAA,CAC9HU,cAAC0yI,EAAW,CAACl3D,KAAMA,EAAMC,OAAQA,EAAQ6gD,OAAQA,IACjDt8H,cAACgzI,EAAiB,CAACx3D,KAAMA,EAAMC,OAAQA,EAAQ6gD,OAAQA,EAAQnzH,QAAS8rI,EAAkB3R,WAAYA,IACtGtjI,cAAC47E,IAAS,CACNC,YAAa,2EACb1qC,IAAG,GAAA5vC,OAAKorH,IAAgB,sBAE5B3sH,cAACm1I,EAAgB,CAAA71I,SACZiO,EAAIlI,KAAI,SAAApB,GAAE,OACPmC,uBAAaqC,WAASijB,KAAKpsB,GAAW,CAClCiG,IAAKtB,EACLlD,OAAQyO,EAAKvL,GACbq/H,cACF,QAKtB,C,wKCvBe8R,EArBsBvoI,gBAAK,SAAA5L,GACtC,IAAQJ,EAAWI,EAAXJ,OACFE,EAASurC,YAAiBrrC,GAC1B+nE,EAAY3nE,IAAIN,EAAQF,GACxBw0I,EAAoBrsE,EAAUljE,QAAO,SAAAm1B,GAAI,OAAK,CAAC,MAAO,SAASnH,SAASmH,EAAKG,UAAUn3B,GAAG,IAEhG,IAAK+kE,EAAW,OAAO,KAEvB,IAAMpyC,EAAc,CAChBpnB,KAAM/J,IAAM4vI,EAAmB,MAC/B9nI,IAAK8nI,EAAkBhwI,KAAI,SAAAhG,GAAK,OAAAA,EAAF4E,EAAW,IACzC6C,SAAU,OACVlG,SAAU,MACV4a,YAAa,CAAE/R,MAAO,KAAMqX,MAAO,QAGvC,OACI9gB,cAACwhI,IAAkB//H,YAAA,GAAKm1B,GAEhC,ICjBM/0B,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuzI,WAAY,CACR1pH,cAAe7pB,EAAMG,WAEzBqzI,YAAa,CACT/yH,eAAgB,iBAEvB,GAAG,CAAErgB,KAAM,iBA2BGirF,IAvBM,SAACnsF,GAClB,IAAQF,EAAqCE,EAArCF,OAAiBuqB,EAAoBrqB,EAA7BuB,QACVA,EAAUX,EAAU,CAAEW,QAAS8oB,IAErC,OAAKvqB,EAGDyD,eAACiqB,IAAI,CAAAnvB,SAAA,CACDU,cAAC0uB,IAAU,CACP1pB,MAAOjE,EAAOoB,KACdu7F,qBAAsB,CAAEx9F,QAAS,aACjCs7F,UAAWz6F,EAAO+rF,IAAIxrF,MACtBk0I,yBAA0B,CAAEt1I,QAAS,WACrCsC,QAAS,CAAE8D,KAAM9D,EAAQ8yI,cAE7Bt1I,cAACo1I,EAA4B,CAACv0I,OAAO,cACrC2D,eAACggH,IAAW,CAAChiH,QAAS,CAAE8D,KAAM9D,EAAQ+yI,aAAcj2I,SAAA,CAChDU,cAAC+J,IAAU,CAACnJ,SAAS,QAAQkG,SAAS,SAAS/F,OAAQA,IACvDf,cAACmwC,IAAsB,CAACgpF,yBAAyB,EAAMv4H,SAAS,QAAQkG,SAAS,SAAS/F,OAAQA,UAd1F,IAiBxB,C,oLCvCa85B,EAAiB,SAAC52B,GAC3B,IAAAwxI,EAA2CxxI,EAAGknC,MAAM,KAAIuqG,EAAA7vI,YAAA4vI,EAAA,GAAvCC,EAAA,GAKjB,MAJY,CACR90I,SAFsB80I,EAAA,GAGtBvlH,IAHmCulH,EAAA,GAM3C,EAEax6G,EAAiB,SAAC/K,GAO3B,MADW,CALQ,WAIfA,EAFAvvB,SAEAuvB,EADAA,KAE0C7kB,KAAK,IAEvD,EAea8hC,EAAmB,SAAA59B,GAC5B,IAAKA,EAAM,OAAO,KAClB,IAAMymE,EAfY,SAACzmE,GACnB,IAAQ2gB,EAAkB3gB,EAAlB2gB,IAAQzM,EAAKjkB,YAAK+P,EAAI9P,GAQ9B,OAPY+B,YAAA,CACRwC,GAAIi3B,EAAe/K,GACnB8mG,WAAY,WACZppG,QAASsC,EAAIvvB,SACb0lF,YAAan2D,EAAIA,KACdzM,EAGX,CAKmBjhB,CAAO+M,GAEtB,OAAOymE,CACX,C,wQC7BMp0E,EAAYC,aAAW,SAAAC,GAAK,MAAK,CACnCuE,KAAM,CACFgI,QAAS,OACTsc,SAAU,OACV3C,WAAY,EACZmD,cAAe,GAEtB,GAAG,CAAEjpB,KAAM,qBAGN4G,EAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAK3C2X,EAAc,WAAQ,EAE5B,SAAS4U,EAAgBj2B,GACbA,EAARuC,SAYA,IAXS0pB,EAAejsB,EAAxBmD,QACA7B,EAAStB,EAATsB,UACAI,EAAM1B,EAAN0B,OACAF,EAAMxB,EAANwB,OACAD,EAAQvB,EAARuB,SACAyrB,EAAShtB,EAATgtB,UACAvlB,EAAQzH,EAARyH,SACAxH,EAAQD,EAARC,SACA0uB,EAAI3uB,EAAJ2uB,KACAooB,EAAI/2C,EAAJ+2C,KACGtyC,EAAIrE,YAAAJ,EAAAK,GAED8C,EAAUX,EAAU,CAAEW,QAAS8oB,IAC/BpqB,EAAYC,cACZqO,EAAOnO,IAAIN,EAAQF,EAAQ,IAC3BsqG,EAAO/0D,EAAO5mC,EAAK7G,OAASytC,EAAO,EACnCzlB,EAAOw6E,EAAO,EACpBp5F,EAAgC1J,mBAAS8iG,GAAQ,GAAEn5F,EAAAnM,YAAAkM,EAAA,GAA5C4jI,EAAQ3jI,EAAA,GAAE4jI,EAAW5jI,EAAA,GACtBkwB,EAAQkU,EAAOu/F,EAAWnmI,EAAOA,EAAK/B,MAAM,EAAG2oC,GAAQ5mC,EAE7D,IAAKA,EAAM,OAAO,KAQlB,OACIhL,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,IAChCe,YAAuBoC,IAAK,IAAAxE,SAAA,CAE/B4iC,EAAM78B,KAAI,SAAC41B,EAAMvd,GACd,IAAM8uB,EAAW1lC,EAAS2lC,QAAQ7rC,EAAUyrB,GACtCkgB,EAAkBtR,EAClBhN,IAAoBD,IAAgC,oBAATA,EAAuBA,EAAKue,EAAiBlgB,EAAWtrB,EAAQH,GAAS,GAAAW,OAAMirC,EAAQ,KAAAjrC,OAAI8J,mBAAmBkhC,EAAgBtoC,IAAG,KAAA1C,OAAIysB,IAEtL,OAAIC,EAEIjuB,cAACK,IAAI,CAEDM,UAAW6B,EAAQwrB,KACnBzuB,GAAI0uB,EACJ9kB,QAASJ,EAAgBzJ,SAExB8G,uBAAaqC,WAASijB,KAAKpsB,GAAW,CACnCyB,OAAQk6B,EACRr6B,SAAUyrB,EACVvlB,SAAU0lC,EACVzlC,OAAQhG,EACRoI,QAASuX,KAVRhD,GAgBVtX,uBAAaqC,WAASijB,KAAKpsB,GAAW,CACzCiG,IAAKmY,EACL3c,OAAQk6B,EACRr6B,SAAUyrB,EACVvlB,SAAU0lC,EACVzlC,OAAQhG,GAEhB,IACCq1C,GAAQzlB,GAAS3wB,cAAC0iC,IAAI,CACnB//B,MAAOgzI,EAAWz0I,EAAU,kBAAoBA,EAAU,uBAAwB,CAAEwtD,MAAOy8C,IAC3FhiG,QA7Ca,WACrBysI,GAAY,SAAAz2H,GAAQ,OAAKA,CAAQ,GACrC,OAgDJ,CAeAmW,EAAiB3zB,aAAe,CAC5Ba,QAAS,CAAC,EACVwrB,KAAM,OACNpsB,UAAU,EACV6M,WAAW,GAGA6mB,K,6KCjHTvsB,EAAkB,SAAA4B,GAAC,OAAIA,EAAE5B,iBAAkB,EAE3CqsB,EAAoBvoB,gBAAK,SAAA5L,GAC3B,IAAQN,EAAqEM,EAArEN,UAAsBE,GAA+CI,EAA1Dw9C,UAA0Dx9C,EAA/CJ,QAAM6sF,EAAyCzsF,EAAvC6zC,cAAM,IAAA44C,EAAG,OAAMA,EAAE5mF,EAAsB7F,EAAtB6F,SAAahD,EAAIrE,YAAKwB,EAAKvB,GAC5EqB,EAASurC,YAAiBrrC,GAC1BK,EAAQD,IAAIN,EAAQF,GACpBmtB,EATW,SAAClnB,EAAU7C,GAAE,IAAE4G,EAAQC,UAAAnC,OAAA,QAAAoC,IAAAD,UAAA,GAAAA,UAAA,GAAG,OAAM,MAAkB,SAAbD,EAAmB,GAAAtJ,OAAMuF,EAAQ,KAAAvF,OAAI8J,mBAAmBpH,IAAG,GAAA1C,OAAQuF,EAAQ,KAAAvF,OAAI8J,mBAAmBpH,GAAG,KAAA1C,OAAIsJ,EAAU,CAS5JN,CAAazD,EAAgB,OAAN/F,QAAM,IAANA,OAAM,EAANA,EAAQkD,GAAI6wC,GAEhD,OACI90C,cAAA,QAAAV,SACIU,cAACK,IAAIoB,wBAAA,CACDvB,QAAQ,QACRS,UAAWA,EACXP,UAAWE,IACXf,GAAIyuB,EACJ7kB,QAASJ,GACLrH,YAAuBoC,IAAK,IAAAxE,SAE/BgC,MAKjB,IAEA8zB,EAAkBzzB,aAAe,CAC7BC,UAAU,GAGdwzB,EAAkBnT,YAAc,oBAGjBmT,K,6MCrCFygH,EAAuBjsI,sBAChC,SAAC3I,EAAO4I,GACJ,IAAQ/D,EAA8B7E,EAA9B6E,OAAQgwI,EAAsB70I,EAAtB60I,OAAQzhG,EAAcpzC,EAAdozC,UAClBzzC,EAAWuE,YAAmBlE,GAC9B80I,EAAa3jI,uBAAY,WAC3B0jI,EAAO,CACHj1I,OAAQiF,EAAO7E,MAAMJ,OACrB4O,aAAc3J,EAAO7E,MAAMwO,cAEnC,GAAG,CAAC3J,EAAO7E,MAAMwO,aAAc3J,EAAO7E,MAAMJ,OAAQi1I,IAEpD,OACI91I,cAAC+E,IAAQ,CACLpE,UAAU,kBACV,WAAUmF,EAAO7E,MAAMJ,OACvB,qBAAoBiF,EAAO7E,MAAMwO,aAEjCtG,QAAS4sI,EACT1hG,UAAWA,EACXxqC,IAAKA,EAAIvK,SAETU,cAAC2E,IAAU,CACPhC,MAAOmD,EAAO7E,MAAM0B,MACpB9B,OAAQiF,EAAO7E,MAAMJ,OACrBD,SAAUA,KARTkF,EAAO7E,MAAMJ,OAY9B,I,uFClBEgB,EAAYC,YACd,CACIwE,KAAM,CAAEgI,QAAS,iBAErB,CAAEnM,KAAM,mBAyFNooB,EAAoB,SAAHnZ,KACnBqK,iBAAuBrK,EACvBsK,aAAmBtK,EACnBuK,WACO,OAAAlc,YAAA2R,EAAAK,EACA,EAYIukI,EAvGM,SAAC/0I,GAClB,IACIoa,EAIApa,EAJAoa,QAEA1a,GAEAM,EAHAuB,QAGAvB,EAFAN,WACGmD,EAAIrE,YACPwB,EAAKvB,GAEHkB,EAAWuE,YAAmBlE,GACpCqa,EAA4DC,YACxDta,GACH6d,EAAAxD,EAFOG,wBAAgB,IAAAqD,EAAG,CAAC,EAACA,EAAEpD,EAAYJ,EAAZI,aAAcC,EAAUL,EAAVK,WAG7C5J,EAAwB1J,oBAAS,GAAM2J,EAAAnM,YAAAkM,EAAA,GAAhCnJ,EAAIoJ,EAAA,GAAE6F,EAAO7F,EAAA,GACdzJ,EAAWuJ,mBACXtP,EAAUX,EAAUZ,GAE1B,QAAgB8J,IAAZsQ,EACA,MAAM,IAAIhO,MAAM,gDAGpB,IAAM4oI,EAAgB56H,EAAQvV,QAC1B,SAACqhI,GAAa,OACTA,EAAclmI,MAAMqO,WACpBmM,EAAiB0rH,EAAclmI,MAAMJ,SAEtC,qBADO6mI,IAAUhsH,EAAcyrH,EAAclmI,MAAMJ,OACxC,IAGbq1I,EAAoB9jI,uBACtB,SAAAtJ,GAEIA,EAAM6X,iBACN9I,GAAQ,GACRtP,EAASuK,QAAUhK,EAAMM,aAC7B,GACA,CAACb,EAAUsP,IAGTs+H,EAAqB/jI,uBAAY,WACnCyF,GAAQ,EACZ,GAAG,CAACA,IAEEk+H,EAAa3jI,uBACf,SAAA/S,GAA+B,IAA5BwB,EAAMxB,EAANwB,OAAQ4O,EAAYpQ,EAAZoQ,aACPkM,EAAW9a,EAAQ4O,GACnBoI,GAAQ,EACZ,GACA,CAAC8D,EAAY9D,IAGjB,OAA6B,IAAzBo+H,EAActtI,OAAqB,KAEnCnE,eAAA,MAAA/C,wBAAA,CACId,UAAWkE,IAAWrC,EAAQ8D,KAAM3F,IAChC4pB,EAAkBzmB,IAAK,IAAAxE,SAAA,CAE3BU,cAAC8f,IAAM,CACHnf,UAAU,aACVgC,MAAM,uBACN,gBAAc,OACdwG,QAAS+sI,EAAkB52I,SAG3BU,cAACo2I,IAAa,MAElBp2I,cAACuJ,IAAI,CACDtF,GAAG,cACH2E,KAAMA,EACNL,SAAUA,EAASuK,QACnBtJ,QAAS2sI,EACT10H,mBAAoB,KAAKniB,SAExB22I,EAAc5wI,KAAI,SAAC8hI,EAAezpH,GAAK,OACpC1d,cAAC61I,EAAoB,CAEjB/vI,OAAQqhI,EACRvmI,SAAUA,EACVk1I,OAAQC,EACR1hG,UAAqB,IAAV32B,GAJNypH,EAAclmI,MAAMJ,OAK3B,SAKtB,E,gFCnGMgB,EAAYC,YACd,CACImqB,OAAQ,CAAC,EACTsK,KAAM,CAAC,GAEX,CAAEp0B,KAAM,aAkFG8uB,IA1DA,SAAChwB,GACZ,IAAMuB,EAAUX,EAAUZ,GAC1Bqa,EAOIC,YAAeta,GANfL,EAAQ0a,EAAR1a,SACA+a,EAAUL,EAAVK,WACAoR,EAAUzR,EAAVyR,WACA7M,EAAU5E,EAAV4E,WACAzE,EAAgBH,EAAhBG,iBACAC,EAAYJ,EAAZI,aAyCJ,MAAyB,WAAlBza,EAAMgb,QAvCQ,WAObhb,EALAuB,QAKAvB,EAJAgb,QAFJ,IAGI3c,EAGA2B,EAHA3B,SAEGwE,GACH7C,EAFAf,QACOT,YACPwB,EAAKvB,IAET,OACIM,cAACg2I,EAAYv0I,YAAA,CACTd,UAAW6B,EAAQypB,OACnBrrB,SAAUA,EACVya,QAASjT,WAAeM,QAAQpJ,GAChCqc,WAAYA,EACZF,iBAAkBA,EAClBC,aAAcA,GACVM,YAAsBlY,IAGtC,CAmBoCuyI,GAjBjB,WACkDp1I,EAAzDuB,QAAyDvB,EAA/Bgb,QAAlC,IAA2C3c,EAAsB2B,EAAtB3B,SAAawE,EAAIrE,YAAKwB,EAAKwQ,GAEtE,OACIzR,cAACsnI,IAAU7lI,YAAA,CACPd,UAAW6B,EAAQ+zB,KACnB31B,SAAUA,EACVya,QAASjT,WAAeM,QAAQpJ,GAChCytB,WAAYA,EACZtR,iBAAkBA,EAClBm1B,cAAel1B,EACfwE,WAAYA,GACRlE,YAAsBlY,IAGtC,CAEqDwyI,EACzD,C,iCCvFA,kCAAO,IAaMnjG,EAAsB,SAAC9uC,GAAW,IAADkyI,EAG1C,GAF4B,OAALlyI,QAAK,IAALA,GAAe,QAAVkyI,EAALlyI,EAAOkrC,gBAAQ,IAAAgnG,OAAV,EAALA,EAAiBn1F,OAEpB,CAAC,IAADo1F,EAAAC,EAAAC,EAEVC,EAlBoB,SAACrpI,GAC/B,OAAQA,GACJ,IAAK,uBAAwB,MAAO,gCACpC,IAAK,4BAA6B,MAAO,qCACzC,IAAK,iBAAkB,MAAO,0BAC9B,IAAK,+BAAgC,MAAO,wCAC5C,IAAK,cAAe,MAAO,uBAC3B,IAAK,wBAAyB,MAAO,iCACrC,QAAS,MAAO,sCAExB,CAQuBspI,CADoB,OAALvyI,QAAK,IAALA,GAAe,QAAVmyI,EAALnyI,EAAOkrC,gBAAQ,IAAAinG,GAAW,QAAXC,EAAfD,EAAiBp1F,OAAO,UAAE,IAAAq1F,GAAY,QAAZC,EAA1BD,EAA4BvmF,kBAAU,IAAAwmF,OAAjC,EAALA,EAAwCppI,MAEtE,MAAM,IAAID,MAAMspI,EACpB,CACI,MAAMtyI,CAEd,C,kCCvBA,sCAmBMwyI,EAA+B,SAAHx3I,GAOvB,MACJ,CACHyH,SARQzH,EAARyH,SASA/F,OARM1B,EAAN0B,OASAkpB,aARY5qB,EAAZ4qB,aASAe,OARM3rB,EAAN2rB,OASApT,QAROvY,EAAPuY,QASAhX,SARQvB,EAARuB,SASAspB,QARO7qB,EAAP6qB,QASH,EAGc20B,IAlCa,SAAC59C,GAEzB,IAAMgb,EAAUzb,qBAAWu9C,KAE3B,OAAO/3C,mBACH,kBACI8wI,IACI,CAAC,EACQ,MAAT71I,EAAgB41I,EAA6B51I,GAAS,CAAC,EACvDgb,EACH,GACL,CAACA,EAAShb,GAElB,C,kCCjBA,iCAkBekoB,IAZiB,SAACloB,GAC7B,IAAMC,EAAYC,cAElB,OACInB,cAACZ,IAAc,CACXG,GAAG,IAAGD,SAEL4B,EAAU,oBAAqB,CAAEM,EAAG,eAEjD,C,sBCfA,IAAI6D,EAAM,CACT,eAAgB,CACf,KACA,KAED,eAAgB,CACf,KACA,KAED,mBAAoB,CACnB,KACA,KAED,mBAAoB,CACnB,KACA,KAED,mBAAoB,CACnB,KACA,KAED,mBAAoB,CACnB,KACA,KAED,sBAAuB,CACtB,KACA,KAED,sBAAuB,CACtB,KACA,KAED,sBAAuB,CACtB,KACA,KAED,sBAAuB,CACtB,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,6BAA8B,CAC7B,KACA,KAED,4BAA6B,CAC5B,KACA,KAED,eAAgB,CACf,MAGF,SAASyH,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAE5H,EAAK0H,GAC9B,OAAOG,QAAQC,UAAUC,MAAK,WAC7B,IAAIzC,EAAI,IAAI0C,MAAM,uBAAyBN,EAAM,KAEjD,MADApC,EAAE2C,KAAO,mBACH3C,CACP,IAGD,IAAI4C,EAAMlI,EAAI0H,GAAM9I,EAAKsJ,EAAI,GAC7B,OAAOL,QAAQM,IAAID,EAAIE,MAAM,GAAGpI,IAAI2H,EAAoBrC,IAAIyC,MAAK,WAChE,OAAOJ,EAAoB/I,EAC5B,GACD,CACA6I,EAAoBY,KAAO,WAC1B,OAAOC,OAAOD,KAAKrI,EACpB,EACAyH,EAAoB7I,GAAK,IACzB2J,EAAOC,QAAUf,C,kCC3FjB,iCAcesc,IATY,SAAH/pB,GAAgC,IAA1ByH,EAAQzH,EAARyH,SAAUlG,EAAQvB,EAARuB,SAC9BM,EAAYC,cAElB,OACInB,cAACZ,IAAc,CAACG,GAAIuH,EAASxH,SACxB4B,EAAU,aAADK,OAAcX,EAAQ,SAAS,CAAEY,EAAGZ,EAAUqX,YAAa,KAEjF,C,mCCZA,OAAe,cAA0B,kC,8FCKnCc,EAAwBC,aAC5B,SAAAD,EAAYE,GAASC,YAAA,KAAAH,GAEnB,IAAMI,EAAS,IAAIC,gBAAcH,GAEjCI,KAAKC,QAAO,eAAAja,EAAAka,YAAAC,cAAAC,MAAG,SAAAC,EAAOC,EAAOC,GAAS,IAAAC,EAAA,OAAAL,cAAAM,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAChBC,cAAa,KAAD,EACkC,OAD5DL,EAAKE,EAAAI,KACXhB,EAAOiB,UAAU,gBAAiBP,EAAK,UAAAtY,OAAasY,GAAU,IAAIE,EAAAM,OAAA,SAE3DlB,EAAOG,QAAQK,EAAOC,IAAU,wBAAAG,EAAAO,OAAA,GAAAZ,EAAA,KACxC,gBAAAa,EAAAC,GAAA,OAAAnb,EAAAob,MAAA,KAAA3P,UAAA,EALW,EAMd,IAGIqO,EAAS,IAAIJ,EAAyBizG,KAE7B7yG,K","file":"static/js/main.38b17f20.chunk.js","sourcesContent":["import React from 'react';\nimport { Link as RouterLink, useRouteMatch } from 'react-router-dom';\n\nimport { Link, Typography } from '@material-ui/core';\n\n\n\nconst BreadcrumbItem = ({ children, to, ...props }) => {\n\n let match = useRouteMatch({\n path: to,\n strict: true,\n sensitive: true\n });\n\n const isMatch = match?.isExact || !to\n\n return isMatch\n ? (\n \n {children}\n \n )\n : (\n \n {children}\n \n )\n};\n\nexport default BreadcrumbItem","import { useContext } from \"react\";\nimport TreeContext from \"./TreeContext\";\n\nconst useTreeContext = () => useContext(TreeContext);\n\nexport default useTreeContext","import React from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport { sanitizeFieldRestProps } from 'react-admin';\nimport { useTranslate } from 'react-admin';\n\n\nconst EnumField = ({ className, resource, source, record = {}, option, ...props }) => {\n const translate = useTranslate();\n const enumValue = get(record, source);\n if (!enumValue) { return null };\n\n const value = option ? translate(`${option}.${enumValue}`, { _: enumValue }) : translate(`resources.${resource}.enums.${source}.${enumValue}`, { _: enumValue });\n\n return (\n \n {value}\n \n )\n};\n\nEnumField.propTypes = {\n label: PropTypes.string,\n record: PropTypes.object,\n source: PropTypes.string.isRequired,\n};\n\nEnumField.defaultProps = {\n addLabel: true,\n};\n\nexport default EnumField;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport TextField from '@material-ui/core/TextField';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { useInput, useTranslate, FieldTitle } from 'ra-core';\n\nimport sanitizeInputRestProps from './sanitizeInputRestProps';\nimport { InputHelperText } from 'react-admin';\n\nconst useStyles = makeStyles(theme => ({\n input: {\n minWidth: theme.spacing(20),\n },\n}), { name: 'NullableBooleanInput' });\n\nconst getBooleanFromString = (value) => {\n if (value === 'true') return true;\n if (value === 'false') return false;\n return null;\n};\n\nconst getStringFromBoolean = (value) => {\n if (value === true) return 'true';\n if (value === false) return 'false';\n return '';\n};\n\nconst BooleanInput = props => {\n const {\n className,\n classes: classesOverride,\n format = getStringFromBoolean,\n helperText,\n label,\n margin = 'dense',\n onBlur,\n onChange,\n onFocus,\n options,\n parse = getBooleanFromString,\n resource,\n source,\n validate,\n variant = 'filled',\n nullLabel = 'ra.boolean.null',\n falseLabel = 'ra.boolean.false',\n trueLabel = 'ra.boolean.true',\n displayNull = false,\n ...rest\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n\n const {\n id,\n input,\n isRequired,\n meta: { error, submitError, touched },\n } = useInput({\n format,\n onBlur,\n onChange,\n onFocus,\n parse,\n resource,\n source,\n validate,\n ...rest,\n });\n\n return (\n \n }\n error={!!(touched && (error || submitError))}\n helperText={\n \n }\n className={classnames(classes.input, className)}\n variant={variant}\n {...options}\n {...sanitizeInputRestProps(rest)}\n >\n {displayNull && {translate(nullLabel)}}\n {translate(falseLabel)}\n {translate(trueLabel)}\n \n );\n};\n\nBooleanInput.propTypes = {\n label: PropTypes.string,\n options: PropTypes.object,\n resource: PropTypes.string,\n source: PropTypes.string,\n nullLabel: PropTypes.string,\n falseLabel: PropTypes.string,\n trueLabel: PropTypes.string,\n};\n\nexport default BooleanInput;\n","import { cloneElement, useMemo } from 'react';\nimport keyBy from \"lodash/keyBy\";\nimport map from \"lodash/map\";\nimport omit from \"lodash/omit\";\nimport useListColumns from '../../controller/localStorage/useListColumns';\nimport { useResourceContext } from 'ra-core';\n\n\n\nconst useDatagridColumns = (columns) => {\n const resource = useResourceContext();\n /*\n Если делаем референс на один и тот-же \"source\" более чем один раз, нужно указывать свойство \"key\" у компонента, иначе будет рендериться только последний упомянутый \"source\" из повторяющихся.\n Например: src\\components\\Event\\EventList.js Там вытягиваем \"name\" и \"labels\" по 'source=\"resource\"'\n Указываем свойство \"key\", чтобы useDatagridColumns могла различать между ними, т.к. props.source одинаковый.\n */\n const columnsIds = map(columns, col => col.key || col.props.source)\n const columnsMap = keyBy(columns, col => col.key || col.props.source)\n const [listColumns] = useListColumns(resource, columnsIds);\n const selectedColumns = listColumns.filter(id => Boolean(columnsMap[id]))\n\n const datagridColumns = useMemo(() => {\n return selectedColumns.map(id => {\n const datagridColumn = columnsMap[id]\n const sanitizeDatagridColumn = { ...datagridColumn, props: omit(datagridColumn.props, [\"alwaysOn\", \"hideDefault\", \"column\"]) }\n\n return cloneElement(sanitizeDatagridColumn, {\n key: datagridColumn.props.column || datagridColumn.props.source\n })\n })\n\n }, [selectedColumns])\n\n return datagridColumns;\n};\n\n\n\nexport default useDatagridColumns;\n","import React from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { emphasize } from '@material-ui/core/styles/colorManipulator';\nimport { ChipField } from 'react-admin';\nimport sanitizeFieldRestProps from '../../lib/field/sanitizeFieldRestProps';\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: (props) => {\n const backgroundColor = props.color ? props.color : theme.palette.type === 'light' ? theme.palette.grey[300] : theme.palette.grey[700];\n\n return {\n color: theme.palette.getContrastText(backgroundColor),\n backgroundColor: backgroundColor,\n '&:hover, &:focus': {\n backgroundColor: emphasize(backgroundColor, 0.08),\n }\n }\n }\n}));\n\nconst LabelChip = props => {\n const { record, resource, source, basePath, className, parent, ...rest } = props\n const classes = useStyles({ color: record.color });\n\n return (\n \n )\n}\n\nexport default LabelChip;","import { useMemo } from 'react';\nimport compact from 'lodash/compact';\n\nconst useColumns = (fields) => {\n\n const fieldsSignature = JSON.stringify(fields.map(({ key }) => key))\n\n const columns = useMemo(() => {\n return compact(fields)\n }, [fieldsSignature]);\n\n return columns\n}\n\nexport default useColumns","import React, { useCallback } from \"react\";\nimport { ReferenceInput, AutocompleteInput, useTranslate } from 'react-admin';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\nimport { APPLICATION_NAME } from '../../appsettings';\n\n\nconst optionText = (translate) => (choice) => choice?.id ? `${choice.name} (${choice.role.name})` : \"\"\n\nconst ProfileReferenceInput = (props) => {\n const translate = useTranslate()\n return (\n \n \n \n )\n}\n\nexport default ProfileReferenceInput","import React, { Children, isValidElement } from 'react';\nimport { Tooltip, IconButton, Menu } from '@material-ui/core';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport { useTranslate } from 'react-admin';\n\n\n\nconst MoreButton = ({ label = 'ra.action.more', children, cellClassName, className, color, ...props }) => {\n const translate = useTranslate();\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n if (Children.toArray(children).length === 0) return null;\n\n const open = Boolean(anchorEl);\n\n const handleClick = (event) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = (event) => {\n event.stopPropagation();\n setAnchorEl(null);\n };\n\n return (\n
\n \n \n \n \n \n \n {Children.map(children, field =>\n field && isValidElement(field)\n ? React.cloneElement(field, { ...props, ...field.props, onClose: handleClose })\n : null\n )}\n \n
\n );\n}\n\nexport default MoreButton;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImageEye from '@material-ui/icons/RemoveRedEye';\nimport { Link } from 'react-router-dom';\nimport { linkToRecord, useTranslate } from 'ra-core';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\n\n\nconst LinkRef = React.forwardRef((props, ref) => );\n\nconst ShowButton = React.forwardRef(({\n basePath = '',\n label = 'ra.action.show',\n icon = defaultIcon,\n record,\n target = \"_self\",\n ...rest\n}, ref) => {\n const translate = useTranslate();\n\n return (\n \n \n {React.cloneElement(icon, {\n fontSize: \"small\"\n })}\n \n {translate(label)}\n \n )\n});\n\nconst defaultIcon = ;\n\nconst stopPropagation = e => e.stopPropagation();\n\nShowButton.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n};\n\nexport default ShowButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ContentCreate from '@material-ui/icons/Create';\nimport { Link, useLocation } from 'react-router-dom';\nimport { useTranslate } from 'ra-core';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\n\nconst linkToEditRecord = (basePath, id, linkType = 'edit', search) => {\n const link = [\"basePath\", \"id\", \"linkType\", \"search\"].reduce((acc, part) => {\n switch (part) {\n case \"basePath\": return [...acc, basePath];\n case \"id\": return [...acc, encodeURIComponent(id)];\n case \"linkType\": return linkType !== 'edit' ? [...acc, linkType] : acc;\n case \"search\": return search ? [...acc, search] : acc;\n }\n }, []).join('/')\n\n return link;\n};\n\n\nconst EditButton = ({\n basePath = '',\n label = 'ra.action.edit',\n record,\n icon = defaultIcon,\n withLocationSearch,\n ...rest\n}) => {\n const translate = useTranslate();\n const location = useLocation()\n\n return (\n \n \n \n \n {translate(label)}\n \n )\n};\n\nconst defaultIcon = ;\n\nconst stopPropagation = e => e.stopPropagation();\n\nEditButton.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n};\n\nexport default EditButton;\n","import React, { memo } from 'react';\nimport lodashOmit from 'lodash/omit';\nimport Queue from '@material-ui/icons/Queue';\nimport { Link } from 'react-router-dom';\nimport { stringify } from 'query-string';\nimport { useTranslate, useResourceContext } from 'ra-core';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\nimport { DateTime } from 'luxon';\n\n\n\nconst LinkRef = React.forwardRef((props, ref) => );\n\nexport const CloneButtonAsMenuItem = React.forwardRef((props, ref) => {\n const {\n basePath = '',\n label = 'ra.action.clone',\n scrollToTop = true,\n record,\n icon = defaultIcon,\n omit = [\"id\"],\n ...rest\n } = props;\n\n const translate = useTranslate()\n const resource = useResourceContext();\n const pathname = basePath ? `${basePath}/create` : `/${resource}/create`;\n const recordClone = record && {\n ...lodashOmit(record, omit),\n name: `${record.name} - копия от ${DateTime.now().toLocaleString(DateTime.DATETIME_SHORT)}`\n }\n\n return (\n \n \n {React.cloneElement(icon, {\n fontSize: \"small\"\n })}\n \n {translate(label)}\n \n );\n});\n\nconst defaultIcon = ;\n\n// useful to prevent click bubbling in a datagrid with rowClick\nconst stopPropagation = e => e.stopPropagation();\n\nexport default memo(CloneButtonAsMenuItem);\n","var map = {\n\t\"./AnalogWidget\": [\n\t\t657,\n\t\t0,\n\t\t12,\n\t\t52\n\t],\n\t\"./AnalogWidget/\": [\n\t\t657,\n\t\t0,\n\t\t12,\n\t\t52\n\t],\n\t\"./AnalogWidget/AnalogPlate\": [\n\t\t1259,\n\t\t101\n\t],\n\t\"./AnalogWidget/AnalogPlate.js\": [\n\t\t1259,\n\t\t101\n\t],\n\t\"./AnalogWidget/Widget\": [\n\t\t1181,\n\t\t12\n\t],\n\t\"./AnalogWidget/Widget.js\": [\n\t\t1181,\n\t\t12\n\t],\n\t\"./AnalogWidget/WidgetProperties\": [\n\t\t1233,\n\t\t0,\n\t\t155\n\t],\n\t\"./AnalogWidget/WidgetProperties.js\": [\n\t\t1233,\n\t\t0,\n\t\t155\n\t],\n\t\"./AnalogWidget/index\": [\n\t\t657,\n\t\t0,\n\t\t12,\n\t\t52\n\t],\n\t\"./AnalogWidget/index.js\": [\n\t\t657,\n\t\t0,\n\t\t12,\n\t\t52\n\t],\n\t\"./AnalogWidget/useWidgetProperties\": [\n\t\t1260,\n\t\t102\n\t],\n\t\"./AnalogWidget/useWidgetProperties.js\": [\n\t\t1260,\n\t\t102\n\t],\n\t\"./AssistantDemoWidget\": [\n\t\t658,\n\t\t32,\n\t\t43\n\t],\n\t\"./AssistantDemoWidget/\": [\n\t\t658,\n\t\t32,\n\t\t43\n\t],\n\t\"./AssistantDemoWidget/Widget\": [\n\t\t1182,\n\t\t32\n\t],\n\t\"./AssistantDemoWidget/Widget.js\": [\n\t\t1182,\n\t\t32\n\t],\n\t\"./AssistantDemoWidget/WidgetProperties\": [\n\t\t1234,\n\t\t94\n\t],\n\t\"./AssistantDemoWidget/WidgetProperties.js\": [\n\t\t1234,\n\t\t94\n\t],\n\t\"./AssistantDemoWidget/index\": [\n\t\t658,\n\t\t32,\n\t\t43\n\t],\n\t\"./AssistantDemoWidget/index.js\": [\n\t\t658,\n\t\t32,\n\t\t43\n\t],\n\t\"./AssistantDemoWidget/useWidgetProperties\": [\n\t\t1261,\n\t\t190\n\t],\n\t\"./AssistantDemoWidget/useWidgetProperties.js\": [\n\t\t1261,\n\t\t190\n\t],\n\t\"./BatteryWidget\": [\n\t\t659,\n\t\t0,\n\t\t13,\n\t\t53\n\t],\n\t\"./BatteryWidget/\": [\n\t\t659,\n\t\t0,\n\t\t13,\n\t\t53\n\t],\n\t\"./BatteryWidget/Battery\": [\n\t\t1262,\n\t\t103\n\t],\n\t\"./BatteryWidget/Battery.js\": [\n\t\t1262,\n\t\t103\n\t],\n\t\"./BatteryWidget/Widget\": [\n\t\t1183,\n\t\t13\n\t],\n\t\"./BatteryWidget/Widget.js\": [\n\t\t1183,\n\t\t13\n\t],\n\t\"./BatteryWidget/WidgetProperties\": [\n\t\t1235,\n\t\t0,\n\t\t156\n\t],\n\t\"./BatteryWidget/WidgetProperties.js\": [\n\t\t1235,\n\t\t0,\n\t\t156\n\t],\n\t\"./BatteryWidget/index\": [\n\t\t659,\n\t\t0,\n\t\t13,\n\t\t53\n\t],\n\t\"./BatteryWidget/index.js\": [\n\t\t659,\n\t\t0,\n\t\t13,\n\t\t53\n\t],\n\t\"./BatteryWidget/useWidgetProperties\": [\n\t\t1263,\n\t\t104\n\t],\n\t\"./BatteryWidget/useWidgetProperties.js\": [\n\t\t1263,\n\t\t104\n\t],\n\t\"./CatalogsWidget\": [\n\t\t660,\n\t\t1,\n\t\t25,\n\t\t59\n\t],\n\t\"./CatalogsWidget/\": [\n\t\t660,\n\t\t1,\n\t\t25,\n\t\t59\n\t],\n\t\"./CatalogsWidget/TreeCatalogSelectorWidget\": [\n\t\t1264,\n\t\t191\n\t],\n\t\"./CatalogsWidget/TreeCatalogSelectorWidget.js\": [\n\t\t1264,\n\t\t191\n\t],\n\t\"./CatalogsWidget/Widget\": [\n\t\t1184,\n\t\t25\n\t],\n\t\"./CatalogsWidget/Widget.js\": [\n\t\t1184,\n\t\t25\n\t],\n\t\"./CatalogsWidget/WidgetProperties\": [\n\t\t1236,\n\t\t1,\n\t\t192\n\t],\n\t\"./CatalogsWidget/WidgetProperties.js\": [\n\t\t1236,\n\t\t1,\n\t\t192\n\t],\n\t\"./CatalogsWidget/index\": [\n\t\t660,\n\t\t1,\n\t\t25,\n\t\t59\n\t],\n\t\"./CatalogsWidget/index.js\": [\n\t\t660,\n\t\t1,\n\t\t25,\n\t\t59\n\t],\n\t\"./CatalogsWidget/useWidgetProperties\": [\n\t\t1265,\n\t\t193\n\t],\n\t\"./CatalogsWidget/useWidgetProperties.js\": [\n\t\t1265,\n\t\t193\n\t],\n\t\"./CatalogsWidget/utils\": [\n\t\t1326,\n\t\t194\n\t],\n\t\"./CatalogsWidget/utils.js\": [\n\t\t1326,\n\t\t194\n\t],\n\t\"./DataError\": [\n\t\t1133,\n\t\t195\n\t],\n\t\"./DataError.js\": [\n\t\t1133,\n\t\t195\n\t],\n\t\"./DataLoading\": [\n\t\t1132,\n\t\t175\n\t],\n\t\"./DataLoading.js\": [\n\t\t1132,\n\t\t175\n\t],\n\t\"./DataLoadingSkeleton\": [\n\t\t1153,\n\t\t176\n\t],\n\t\"./DataLoadingSkeleton.js\": [\n\t\t1153,\n\t\t176\n\t],\n\t\"./DataNotFound\": [\n\t\t1129,\n\t\t177\n\t],\n\t\"./DataNotFound.js\": [\n\t\t1129,\n\t\t177\n\t],\n\t\"./DiscretWidget\": [\n\t\t661,\n\t\t0,\n\t\t14,\n\t\t54\n\t],\n\t\"./DiscretWidget/\": [\n\t\t661,\n\t\t0,\n\t\t14,\n\t\t54\n\t],\n\t\"./DiscretWidget/DiscretePlate\": [\n\t\t1266,\n\t\t106\n\t],\n\t\"./DiscretWidget/DiscretePlate.js\": [\n\t\t1266,\n\t\t106\n\t],\n\t\"./DiscretWidget/Widget\": [\n\t\t1185,\n\t\t14\n\t],\n\t\"./DiscretWidget/Widget.js\": [\n\t\t1185,\n\t\t14\n\t],\n\t\"./DiscretWidget/WidgetProperties\": [\n\t\t1237,\n\t\t0,\n\t\t157\n\t],\n\t\"./DiscretWidget/WidgetProperties.js\": [\n\t\t1237,\n\t\t0,\n\t\t157\n\t],\n\t\"./DiscretWidget/index\": [\n\t\t661,\n\t\t0,\n\t\t14,\n\t\t54\n\t],\n\t\"./DiscretWidget/index.js\": [\n\t\t661,\n\t\t0,\n\t\t14,\n\t\t54\n\t],\n\t\"./DiscretWidget/useWidgetProperties\": [\n\t\t1267,\n\t\t107\n\t],\n\t\"./DiscretWidget/useWidgetProperties.js\": [\n\t\t1267,\n\t\t107\n\t],\n\t\"./EventDatagridWidget\": [\n\t\t663,\n\t\t28,\n\t\t37,\n\t\t68\n\t],\n\t\"./EventDatagridWidget/\": [\n\t\t663,\n\t\t28,\n\t\t37,\n\t\t68\n\t],\n\t\"./EventDatagridWidget/EventDatagrid\": [\n\t\t662,\n\t\t60\n\t],\n\t\"./EventDatagridWidget/EventDatagrid/\": [\n\t\t662,\n\t\t60\n\t],\n\t\"./EventDatagridWidget/EventDatagrid/EventList\": [\n\t\t1230,\n\t\t196\n\t],\n\t\"./EventDatagridWidget/EventDatagrid/EventList.js\": [\n\t\t1230,\n\t\t196\n\t],\n\t\"./EventDatagridWidget/EventDatagrid/index\": [\n\t\t662,\n\t\t60\n\t],\n\t\"./EventDatagridWidget/EventDatagrid/index.js\": [\n\t\t662,\n\t\t60\n\t],\n\t\"./EventDatagridWidget/Widget\": [\n\t\t1186,\n\t\t28\n\t],\n\t\"./EventDatagridWidget/Widget.js\": [\n\t\t1186,\n\t\t28\n\t],\n\t\"./EventDatagridWidget/WidgetProperties\": [\n\t\t1269,\n\t\t37\n\t],\n\t\"./EventDatagridWidget/WidgetProperties.js\": [\n\t\t1269,\n\t\t37\n\t],\n\t\"./EventDatagridWidget/index\": [\n\t\t663,\n\t\t28,\n\t\t37,\n\t\t68\n\t],\n\t\"./EventDatagridWidget/index.js\": [\n\t\t663,\n\t\t28,\n\t\t37,\n\t\t68\n\t],\n\t\"./EventDatagridWidget/useWidgetProperties\": [\n\t\t1268,\n\t\t108\n\t],\n\t\"./EventDatagridWidget/useWidgetProperties.js\": [\n\t\t1268,\n\t\t108\n\t],\n\t\"./FileListWidget\": [\n\t\t664,\n\t\t22,\n\t\t42\n\t],\n\t\"./FileListWidget/\": [\n\t\t664,\n\t\t22,\n\t\t42\n\t],\n\t\"./FileListWidget/FileList\": [\n\t\t1270,\n\t\t109\n\t],\n\t\"./FileListWidget/FileList.js\": [\n\t\t1270,\n\t\t109\n\t],\n\t\"./FileListWidget/Widget\": [\n\t\t1187,\n\t\t22\n\t],\n\t\"./FileListWidget/Widget.js\": [\n\t\t1187,\n\t\t22\n\t],\n\t\"./FileListWidget/WidgetProperties\": [\n\t\t1238,\n\t\t87\n\t],\n\t\"./FileListWidget/WidgetProperties.js\": [\n\t\t1238,\n\t\t87\n\t],\n\t\"./FileListWidget/index\": [\n\t\t664,\n\t\t22,\n\t\t42\n\t],\n\t\"./FileListWidget/index.js\": [\n\t\t664,\n\t\t22,\n\t\t42\n\t],\n\t\"./FileListWidget/useWidgetProperties\": [\n\t\t1271,\n\t\t110\n\t],\n\t\"./FileListWidget/useWidgetProperties.js\": [\n\t\t1271,\n\t\t110\n\t],\n\t\"./FileWidget\": [\n\t\t665,\n\t\t1,\n\t\t2,\n\t\t31,\n\t\t61\n\t],\n\t\"./FileWidget/\": [\n\t\t665,\n\t\t1,\n\t\t2,\n\t\t31,\n\t\t61\n\t],\n\t\"./FileWidget/FileAside\": [\n\t\t1272,\n\t\t82\n\t],\n\t\"./FileWidget/FileAside.js\": [\n\t\t1272,\n\t\t82\n\t],\n\t\"./FileWidget/FileCardMedia\": [\n\t\t1190,\n\t\t2,\n\t\t197\n\t],\n\t\"./FileWidget/FileCardMedia.js\": [\n\t\t1190,\n\t\t2,\n\t\t197\n\t],\n\t\"./FileWidget/FileCardMediaComponent\": [\n\t\t1274,\n\t\t2,\n\t\t178\n\t],\n\t\"./FileWidget/FileCardMediaComponent.js\": [\n\t\t1274,\n\t\t2,\n\t\t178\n\t],\n\t\"./FileWidget/FileMediaPreview\": [\n\t\t1189,\n\t\t86\n\t],\n\t\"./FileWidget/FileMediaPreview.js\": [\n\t\t1189,\n\t\t86\n\t],\n\t\"./FileWidget/FileMediaPreviewNotFound\": [\n\t\t1163,\n\t\t198\n\t],\n\t\"./FileWidget/FileMediaPreviewNotFound.js\": [\n\t\t1163,\n\t\t198\n\t],\n\t\"./FileWidget/FileMediaReportPreview\": [\n\t\t1161,\n\t\t199\n\t],\n\t\"./FileWidget/FileMediaReportPreview.js\": [\n\t\t1161,\n\t\t199\n\t],\n\t\"./FileWidget/FileMediaScadaPreview\": [\n\t\t1162,\n\t\t200\n\t],\n\t\"./FileWidget/FileMediaScadaPreview.js\": [\n\t\t1162,\n\t\t200\n\t],\n\t\"./FileWidget/FilePreview\": [\n\t\t1273,\n\t\t179\n\t],\n\t\"./FileWidget/FilePreview.js\": [\n\t\t1273,\n\t\t179\n\t],\n\t\"./FileWidget/FilePreviewAppbar\": [\n\t\t1191,\n\t\t201\n\t],\n\t\"./FileWidget/FilePreviewAppbar.js\": [\n\t\t1191,\n\t\t201\n\t],\n\t\"./FileWidget/FileResourcesReferenceArrayField\": [\n\t\t1188,\n\t\t202\n\t],\n\t\"./FileWidget/FileResourcesReferenceArrayField.js\": [\n\t\t1188,\n\t\t202\n\t],\n\t\"./FileWidget/FileWidgetPreview\": [\n\t\t1239,\n\t\t2\n\t],\n\t\"./FileWidget/FileWidgetPreview.js\": [\n\t\t1239,\n\t\t2\n\t],\n\t\"./FileWidget/Widget\": [\n\t\t1192,\n\t\t2,\n\t\t31\n\t],\n\t\"./FileWidget/Widget.js\": [\n\t\t1192,\n\t\t2,\n\t\t31\n\t],\n\t\"./FileWidget/WidgetProperties\": [\n\t\t1240,\n\t\t1,\n\t\t203\n\t],\n\t\"./FileWidget/WidgetProperties.js\": [\n\t\t1240,\n\t\t1,\n\t\t203\n\t],\n\t\"./FileWidget/index\": [\n\t\t665,\n\t\t1,\n\t\t2,\n\t\t31,\n\t\t61\n\t],\n\t\"./FileWidget/index.js\": [\n\t\t665,\n\t\t1,\n\t\t2,\n\t\t31,\n\t\t61\n\t],\n\t\"./FileWidget/useWidgetProperties\": [\n\t\t1275,\n\t\t111\n\t],\n\t\"./FileWidget/useWidgetProperties.js\": [\n\t\t1275,\n\t\t111\n\t],\n\t\"./GaugeWidget\": [\n\t\t666,\n\t\t0,\n\t\t6,\n\t\t55\n\t],\n\t\"./GaugeWidget/\": [\n\t\t666,\n\t\t0,\n\t\t6,\n\t\t55\n\t],\n\t\"./GaugeWidget/Gauge\": [\n\t\t647,\n\t\t40\n\t],\n\t\"./GaugeWidget/Gauge/\": [\n\t\t647,\n\t\t40\n\t],\n\t\"./GaugeWidget/Gauge/ArcPath\": [\n\t\t1164,\n\t\t141\n\t],\n\t\"./GaugeWidget/Gauge/ArcPath.js\": [\n\t\t1164,\n\t\t141\n\t],\n\t\"./GaugeWidget/Gauge/Gauge\": [\n\t\t1193,\n\t\t74\n\t],\n\t\"./GaugeWidget/Gauge/Gauge.js\": [\n\t\t1193,\n\t\t74\n\t],\n\t\"./GaugeWidget/Gauge/Label\": [\n\t\t1167,\n\t\t142\n\t],\n\t\"./GaugeWidget/Gauge/Label.js\": [\n\t\t1167,\n\t\t142\n\t],\n\t\"./GaugeWidget/Gauge/Svg\": [\n\t\t1165,\n\t\t143\n\t],\n\t\"./GaugeWidget/Gauge/Svg.js\": [\n\t\t1165,\n\t\t143\n\t],\n\t\"./GaugeWidget/Gauge/Text\": [\n\t\t1155,\n\t\t144\n\t],\n\t\"./GaugeWidget/Gauge/Text.js\": [\n\t\t1155,\n\t\t144\n\t],\n\t\"./GaugeWidget/Gauge/Tick\": [\n\t\t1154,\n\t\t145\n\t],\n\t\"./GaugeWidget/Gauge/Tick.js\": [\n\t\t1154,\n\t\t145\n\t],\n\t\"./GaugeWidget/Gauge/TickText\": [\n\t\t1166,\n\t\t95\n\t],\n\t\"./GaugeWidget/Gauge/TickText.js\": [\n\t\t1166,\n\t\t95\n\t],\n\t\"./GaugeWidget/Gauge/index\": [\n\t\t647,\n\t\t40\n\t],\n\t\"./GaugeWidget/Gauge/index.js\": [\n\t\t647,\n\t\t40\n\t],\n\t\"./GaugeWidget/Gauge/utils\": [\n\t\t1140,\n\t\t161\n\t],\n\t\"./GaugeWidget/Gauge/utils.js\": [\n\t\t1140,\n\t\t161\n\t],\n\t\"./GaugeWidget/Widget\": [\n\t\t1194,\n\t\t6\n\t],\n\t\"./GaugeWidget/Widget.js\": [\n\t\t1194,\n\t\t6\n\t],\n\t\"./GaugeWidget/WidgetProperties\": [\n\t\t1241,\n\t\t0,\n\t\t158\n\t],\n\t\"./GaugeWidget/WidgetProperties.js\": [\n\t\t1241,\n\t\t0,\n\t\t158\n\t],\n\t\"./GaugeWidget/index\": [\n\t\t666,\n\t\t0,\n\t\t6,\n\t\t55\n\t],\n\t\"./GaugeWidget/index.js\": [\n\t\t666,\n\t\t0,\n\t\t6,\n\t\t55\n\t],\n\t\"./GaugeWidget/useWidgetProperties\": [\n\t\t1276,\n\t\t112\n\t],\n\t\"./GaugeWidget/useWidgetProperties.js\": [\n\t\t1276,\n\t\t112\n\t],\n\t\"./HigthchartLineChart\": [\n\t\t667,\n\t\t0,\n\t\t19,\n\t\t58\n\t],\n\t\"./HigthchartLineChart/\": [\n\t\t667,\n\t\t0,\n\t\t19,\n\t\t58\n\t],\n\t\"./HigthchartLineChart/Higthchart\": [\n\t\t652,\n\t\t44\n\t],\n\t\"./HigthchartLineChart/Higthchart/\": [\n\t\t652,\n\t\t44\n\t],\n\t\"./HigthchartLineChart/Higthchart/convertValue\": [\n\t\t1195,\n\t\t204\n\t],\n\t\"./HigthchartLineChart/Higthchart/convertValue.js\": [\n\t\t1195,\n\t\t204\n\t],\n\t\"./HigthchartLineChart/Higthchart/highchartsOptions\": [\n\t\t1196,\n\t\t205\n\t],\n\t\"./HigthchartLineChart/Higthchart/highchartsOptions.js\": [\n\t\t1196,\n\t\t205\n\t],\n\t\"./HigthchartLineChart/Higthchart/index\": [\n\t\t652,\n\t\t44\n\t],\n\t\"./HigthchartLineChart/Higthchart/index.js\": [\n\t\t652,\n\t\t44\n\t],\n\t\"./HigthchartLineChart/Higthchart/utils\": [\n\t\t1197,\n\t\t206\n\t],\n\t\"./HigthchartLineChart/Higthchart/utils.js\": [\n\t\t1197,\n\t\t206\n\t],\n\t\"./HigthchartLineChart/Widget\": [\n\t\t1198,\n\t\t19\n\t],\n\t\"./HigthchartLineChart/Widget.js\": [\n\t\t1198,\n\t\t19\n\t],\n\t\"./HigthchartLineChart/WidgetProperties\": [\n\t\t1242,\n\t\t0,\n\t\t174\n\t],\n\t\"./HigthchartLineChart/WidgetProperties.js\": [\n\t\t1242,\n\t\t0,\n\t\t174\n\t],\n\t\"./HigthchartLineChart/index\": [\n\t\t667,\n\t\t0,\n\t\t19,\n\t\t58\n\t],\n\t\"./HigthchartLineChart/index.js\": [\n\t\t667,\n\t\t0,\n\t\t19,\n\t\t58\n\t],\n\t\"./HigthchartLineChart/useWidgetProperties\": [\n\t\t1277,\n\t\t113\n\t],\n\t\"./HigthchartLineChart/useWidgetProperties.js\": [\n\t\t1277,\n\t\t113\n\t],\n\t\"./InteractiveSVGWidget\": [\n\t\t668,\n\t\t7,\n\t\t33,\n\t\t69\n\t],\n\t\"./InteractiveSVGWidget/\": [\n\t\t668,\n\t\t7,\n\t\t33,\n\t\t69\n\t],\n\t\"./InteractiveSVGWidget/Widget\": [\n\t\t1199,\n\t\t7\n\t],\n\t\"./InteractiveSVGWidget/Widget.js\": [\n\t\t1199,\n\t\t7\n\t],\n\t\"./InteractiveSVGWidget/WidgetInteractiveSVGProperties\": [\n\t\t1280,\n\t\t93\n\t],\n\t\"./InteractiveSVGWidget/WidgetInteractiveSVGProperties.js\": [\n\t\t1280,\n\t\t93\n\t],\n\t\"./InteractiveSVGWidget/WidgetProperties\": [\n\t\t1281,\n\t\t33,\n\t\t96\n\t],\n\t\"./InteractiveSVGWidget/WidgetProperties.js\": [\n\t\t1281,\n\t\t33,\n\t\t96\n\t],\n\t\"./InteractiveSVGWidget/WidgetUrlInput\": [\n\t\t1282,\n\t\t207\n\t],\n\t\"./InteractiveSVGWidget/WidgetUrlInput.js\": [\n\t\t1282,\n\t\t207\n\t],\n\t\"./InteractiveSVGWidget/hooks/useSvgData\": [\n\t\t1279,\n\t\t180\n\t],\n\t\"./InteractiveSVGWidget/hooks/useSvgData.js\": [\n\t\t1279,\n\t\t180\n\t],\n\t\"./InteractiveSVGWidget/hooks/useSvgInteractive\": [\n\t\t1327,\n\t\t208\n\t],\n\t\"./InteractiveSVGWidget/hooks/useSvgInteractive.js\": [\n\t\t1327,\n\t\t208\n\t],\n\t\"./InteractiveSVGWidget/hooks/useSvgLoad\": [\n\t\t1200,\n\t\t146\n\t],\n\t\"./InteractiveSVGWidget/hooks/useSvgLoad.js\": [\n\t\t1200,\n\t\t146\n\t],\n\t\"./InteractiveSVGWidget/hooks/useSvgParameters\": [\n\t\t1201,\n\t\t209\n\t],\n\t\"./InteractiveSVGWidget/hooks/useSvgParameters.js\": [\n\t\t1201,\n\t\t209\n\t],\n\t\"./InteractiveSVGWidget/index\": [\n\t\t668,\n\t\t7,\n\t\t33,\n\t\t69\n\t],\n\t\"./InteractiveSVGWidget/index.js\": [\n\t\t668,\n\t\t7,\n\t\t33,\n\t\t69\n\t],\n\t\"./InteractiveSVGWidget/useWidgetProperties\": [\n\t\t1278,\n\t\t114\n\t],\n\t\"./InteractiveSVGWidget/useWidgetProperties.js\": [\n\t\t1278,\n\t\t114\n\t],\n\t\"./InteractiveSVGWidget/utils/ajaxRequest\": [\n\t\t1169,\n\t\t181\n\t],\n\t\"./InteractiveSVGWidget/utils/ajaxRequest.js\": [\n\t\t1169,\n\t\t181\n\t],\n\t\"./InteractiveSVGWidget/utils/cache\": [\n\t\t1168,\n\t\t210\n\t],\n\t\"./InteractiveSVGWidget/utils/cache.js\": [\n\t\t1168,\n\t\t210\n\t],\n\t\"./InteractiveSVGWidget/utils/isObject\": [\n\t\t1328,\n\t\t211\n\t],\n\t\"./InteractiveSVGWidget/utils/isObject.js\": [\n\t\t1328,\n\t\t211\n\t],\n\t\"./InteractiveSVGWidget/utils/isObjectEmpty\": [\n\t\t1202,\n\t\t212\n\t],\n\t\"./InteractiveSVGWidget/utils/isObjectEmpty.js\": [\n\t\t1202,\n\t\t212\n\t],\n\t\"./InteractiveSVGWidget/utils/parseValue\": [\n\t\t1170,\n\t\t213\n\t],\n\t\"./InteractiveSVGWidget/utils/parseValue.js\": [\n\t\t1170,\n\t\t213\n\t],\n\t\"./LineChartWidget\": [\n\t\t669,\n\t\t3,\n\t\t0,\n\t\t29,\n\t\t62\n\t],\n\t\"./LineChartWidget/\": [\n\t\t669,\n\t\t3,\n\t\t0,\n\t\t29,\n\t\t62\n\t],\n\t\"./LineChartWidget/LineChart\": [\n\t\t648,\n\t\t3,\n\t\t45\n\t],\n\t\"./LineChartWidget/LineChart/\": [\n\t\t648,\n\t\t3,\n\t\t45\n\t],\n\t\"./LineChartWidget/LineChart/LineChart\": [\n\t\t1203,\n\t\t3,\n\t\t105\n\t],\n\t\"./LineChartWidget/LineChart/LineChart.js\": [\n\t\t1203,\n\t\t3,\n\t\t105\n\t],\n\t\"./LineChartWidget/LineChart/PulseIndicator\": [\n\t\t1178,\n\t\t214\n\t],\n\t\"./LineChartWidget/LineChart/PulseIndicator.js\": [\n\t\t1178,\n\t\t214\n\t],\n\t\"./LineChartWidget/LineChart/index\": [\n\t\t648,\n\t\t3,\n\t\t45\n\t],\n\t\"./LineChartWidget/LineChart/index.js\": [\n\t\t648,\n\t\t3,\n\t\t45\n\t],\n\t\"./LineChartWidget/LineChart/utils\": [\n\t\t1171,\n\t\t115\n\t],\n\t\"./LineChartWidget/LineChart/utils.js\": [\n\t\t1171,\n\t\t115\n\t],\n\t\"./LineChartWidget/Widget\": [\n\t\t1204,\n\t\t3,\n\t\t29\n\t],\n\t\"./LineChartWidget/Widget.js\": [\n\t\t1204,\n\t\t3,\n\t\t29\n\t],\n\t\"./LineChartWidget/WidgetProperties\": [\n\t\t1243,\n\t\t0,\n\t\t215\n\t],\n\t\"./LineChartWidget/WidgetProperties.js\": [\n\t\t1243,\n\t\t0,\n\t\t215\n\t],\n\t\"./LineChartWidget/index\": [\n\t\t669,\n\t\t3,\n\t\t0,\n\t\t29,\n\t\t62\n\t],\n\t\"./LineChartWidget/index.js\": [\n\t\t669,\n\t\t3,\n\t\t0,\n\t\t29,\n\t\t62\n\t],\n\t\"./LineChartWidget/useWidgetProperties\": [\n\t\t1283,\n\t\t116\n\t],\n\t\"./LineChartWidget/useWidgetProperties.js\": [\n\t\t1283,\n\t\t116\n\t],\n\t\"./MapListWidget\": [\n\t\t670,\n\t\t1,\n\t\t30,\n\t\t63\n\t],\n\t\"./MapListWidget/\": [\n\t\t670,\n\t\t1,\n\t\t30,\n\t\t63\n\t],\n\t\"./MapListWidget/MapListCard\": [\n\t\t1284,\n\t\t216\n\t],\n\t\"./MapListWidget/MapListCard.js\": [\n\t\t1284,\n\t\t216\n\t],\n\t\"./MapListWidget/Widget\": [\n\t\t1205,\n\t\t30\n\t],\n\t\"./MapListWidget/Widget.js\": [\n\t\t1205,\n\t\t30\n\t],\n\t\"./MapListWidget/WidgetProperties\": [\n\t\t1244,\n\t\t1,\n\t\t217\n\t],\n\t\"./MapListWidget/WidgetProperties.js\": [\n\t\t1244,\n\t\t1,\n\t\t217\n\t],\n\t\"./MapListWidget/index\": [\n\t\t670,\n\t\t1,\n\t\t30,\n\t\t63\n\t],\n\t\"./MapListWidget/index.js\": [\n\t\t670,\n\t\t1,\n\t\t30,\n\t\t63\n\t],\n\t\"./MapListWidget/useWidgetProperties\": [\n\t\t1285,\n\t\t117\n\t],\n\t\"./MapListWidget/useWidgetProperties.js\": [\n\t\t1285,\n\t\t117\n\t],\n\t\"./MapListWidget/utils\": [\n\t\t1329,\n\t\t218\n\t],\n\t\"./MapListWidget/utils.js\": [\n\t\t1329,\n\t\t218\n\t],\n\t\"./MapWidget\": [\n\t\t671,\n\t\t1,\n\t\t23,\n\t\t64\n\t],\n\t\"./MapWidget/\": [\n\t\t671,\n\t\t1,\n\t\t23,\n\t\t64\n\t],\n\t\"./MapWidget/MapCard\": [\n\t\t1286,\n\t\t118\n\t],\n\t\"./MapWidget/MapCard.js\": [\n\t\t1286,\n\t\t118\n\t],\n\t\"./MapWidget/Widget\": [\n\t\t1206,\n\t\t23\n\t],\n\t\"./MapWidget/Widget.js\": [\n\t\t1206,\n\t\t23\n\t],\n\t\"./MapWidget/WidgetProperties\": [\n\t\t1245,\n\t\t1,\n\t\t219\n\t],\n\t\"./MapWidget/WidgetProperties.js\": [\n\t\t1245,\n\t\t1,\n\t\t219\n\t],\n\t\"./MapWidget/index\": [\n\t\t671,\n\t\t1,\n\t\t23,\n\t\t64\n\t],\n\t\"./MapWidget/index.js\": [\n\t\t671,\n\t\t1,\n\t\t23,\n\t\t64\n\t],\n\t\"./MapWidget/useWidgetProperties\": [\n\t\t1287,\n\t\t119\n\t],\n\t\"./MapWidget/useWidgetProperties.js\": [\n\t\t1287,\n\t\t119\n\t],\n\t\"./MapWidget/utils\": [\n\t\t1330,\n\t\t220\n\t],\n\t\"./MapWidget/utils.js\": [\n\t\t1330,\n\t\t220\n\t],\n\t\"./MarkdownWidget\": [\n\t\t672,\n\t\t26,\n\t\t35,\n\t\t70\n\t],\n\t\"./MarkdownWidget/\": [\n\t\t672,\n\t\t26,\n\t\t35,\n\t\t70\n\t],\n\t\"./MarkdownWidget/Widget\": [\n\t\t1207,\n\t\t26\n\t],\n\t\"./MarkdownWidget/Widget.js\": [\n\t\t1207,\n\t\t26\n\t],\n\t\"./MarkdownWidget/WidgetProperties\": [\n\t\t1289,\n\t\t35\n\t],\n\t\"./MarkdownWidget/WidgetProperties.js\": [\n\t\t1289,\n\t\t35\n\t],\n\t\"./MarkdownWidget/index\": [\n\t\t672,\n\t\t26,\n\t\t35,\n\t\t70\n\t],\n\t\"./MarkdownWidget/index.js\": [\n\t\t672,\n\t\t26,\n\t\t35,\n\t\t70\n\t],\n\t\"./MarkdownWidget/useWidgetProperties\": [\n\t\t1288,\n\t\t120\n\t],\n\t\"./MarkdownWidget/useWidgetProperties.js\": [\n\t\t1288,\n\t\t120\n\t],\n\t\"./NewsWidget\": [\n\t\t673,\n\t\t20,\n\t\t34,\n\t\t71\n\t],\n\t\"./NewsWidget/\": [\n\t\t673,\n\t\t20,\n\t\t34,\n\t\t71\n\t],\n\t\"./NewsWidget/NewsCard\": [\n\t\t1290,\n\t\t97\n\t],\n\t\"./NewsWidget/NewsCard.js\": [\n\t\t1290,\n\t\t97\n\t],\n\t\"./NewsWidget/Widget\": [\n\t\t1209,\n\t\t20\n\t],\n\t\"./NewsWidget/Widget.js\": [\n\t\t1209,\n\t\t20\n\t],\n\t\"./NewsWidget/WidgetProperties\": [\n\t\t1292,\n\t\t34\n\t],\n\t\"./NewsWidget/WidgetProperties.js\": [\n\t\t1292,\n\t\t34\n\t],\n\t\"./NewsWidget/index\": [\n\t\t673,\n\t\t20,\n\t\t34,\n\t\t71\n\t],\n\t\"./NewsWidget/index.js\": [\n\t\t673,\n\t\t20,\n\t\t34,\n\t\t71\n\t],\n\t\"./NewsWidget/newsClient\": [\n\t\t1208,\n\t\t221\n\t],\n\t\"./NewsWidget/newsClient.js\": [\n\t\t1208,\n\t\t221\n\t],\n\t\"./NewsWidget/useWidgetProperties\": [\n\t\t1291,\n\t\t121\n\t],\n\t\"./NewsWidget/useWidgetProperties.js\": [\n\t\t1291,\n\t\t121\n\t],\n\t\"./PropertiesError\": [\n\t\t1134,\n\t\t222\n\t],\n\t\"./PropertiesError.js\": [\n\t\t1134,\n\t\t222\n\t],\n\t\"./ScadaWebJS\": [\n\t\t674,\n\t\t1,\n\t\t21,\n\t\t65\n\t],\n\t\"./ScadaWebJS/\": [\n\t\t674,\n\t\t1,\n\t\t21,\n\t\t65\n\t],\n\t\"./ScadaWebJS/IframeComponent\": [\n\t\t1210,\n\t\t223\n\t],\n\t\"./ScadaWebJS/IframeComponent.js\": [\n\t\t1210,\n\t\t223\n\t],\n\t\"./ScadaWebJS/ScadaWebJS\": [\n\t\t1293,\n\t\t98\n\t],\n\t\"./ScadaWebJS/ScadaWebJS.js\": [\n\t\t1293,\n\t\t98\n\t],\n\t\"./ScadaWebJS/Widget\": [\n\t\t1211,\n\t\t21\n\t],\n\t\"./ScadaWebJS/Widget.js\": [\n\t\t1211,\n\t\t21\n\t],\n\t\"./ScadaWebJS/WidgetProperties\": [\n\t\t1246,\n\t\t1,\n\t\t224\n\t],\n\t\"./ScadaWebJS/WidgetProperties.js\": [\n\t\t1246,\n\t\t1,\n\t\t224\n\t],\n\t\"./ScadaWebJS/index\": [\n\t\t674,\n\t\t1,\n\t\t21,\n\t\t65\n\t],\n\t\"./ScadaWebJS/index.js\": [\n\t\t674,\n\t\t1,\n\t\t21,\n\t\t65\n\t],\n\t\"./ScadaWebJS/useWidgetProperties\": [\n\t\t1294,\n\t\t122\n\t],\n\t\"./ScadaWebJS/useWidgetProperties.js\": [\n\t\t1294,\n\t\t122\n\t],\n\t\"./ScadaWebJS/utils\": [\n\t\t1331,\n\t\t225\n\t],\n\t\"./ScadaWebJS/utils.js\": [\n\t\t1331,\n\t\t225\n\t],\n\t\"./SignalLevelWidget\": [\n\t\t675,\n\t\t0,\n\t\t8,\n\t\t56\n\t],\n\t\"./SignalLevelWidget/\": [\n\t\t675,\n\t\t0,\n\t\t8,\n\t\t56\n\t],\n\t\"./SignalLevelWidget/SignalLevel\": [\n\t\t649,\n\t\t46\n\t],\n\t\"./SignalLevelWidget/SignalLevel/\": [\n\t\t649,\n\t\t46\n\t],\n\t\"./SignalLevelWidget/SignalLevel/Label\": [\n\t\t1332,\n\t\t147\n\t],\n\t\"./SignalLevelWidget/SignalLevel/Label.js\": [\n\t\t1332,\n\t\t147\n\t],\n\t\"./SignalLevelWidget/SignalLevel/SignalLevel\": [\n\t\t1213,\n\t\t123\n\t],\n\t\"./SignalLevelWidget/SignalLevel/SignalLevel.js\": [\n\t\t1213,\n\t\t123\n\t],\n\t\"./SignalLevelWidget/SignalLevel/Svg\": [\n\t\t1333,\n\t\t148\n\t],\n\t\"./SignalLevelWidget/SignalLevel/Svg.js\": [\n\t\t1333,\n\t\t148\n\t],\n\t\"./SignalLevelWidget/SignalLevel/index\": [\n\t\t649,\n\t\t46\n\t],\n\t\"./SignalLevelWidget/SignalLevel/index.js\": [\n\t\t649,\n\t\t46\n\t],\n\t\"./SignalLevelWidget/SignalLevel/utils\": [\n\t\t1212,\n\t\t162\n\t],\n\t\"./SignalLevelWidget/SignalLevel/utils.js\": [\n\t\t1212,\n\t\t162\n\t],\n\t\"./SignalLevelWidget/Widget\": [\n\t\t1214,\n\t\t8\n\t],\n\t\"./SignalLevelWidget/Widget.js\": [\n\t\t1214,\n\t\t8\n\t],\n\t\"./SignalLevelWidget/WidgetProperties\": [\n\t\t1247,\n\t\t0,\n\t\t159\n\t],\n\t\"./SignalLevelWidget/WidgetProperties.js\": [\n\t\t1247,\n\t\t0,\n\t\t159\n\t],\n\t\"./SignalLevelWidget/index\": [\n\t\t675,\n\t\t0,\n\t\t8,\n\t\t56\n\t],\n\t\"./SignalLevelWidget/index.js\": [\n\t\t675,\n\t\t0,\n\t\t8,\n\t\t56\n\t],\n\t\"./SignalLevelWidget/useWidgetProperties\": [\n\t\t1295,\n\t\t124\n\t],\n\t\"./SignalLevelWidget/useWidgetProperties.js\": [\n\t\t1295,\n\t\t124\n\t],\n\t\"./SwitcherTypeOneButtonWidget\": [\n\t\t676,\n\t\t0,\n\t\t10,\n\t\t48\n\t],\n\t\"./SwitcherTypeOneButtonWidget/\": [\n\t\t676,\n\t\t0,\n\t\t10,\n\t\t48\n\t],\n\t\"./SwitcherTypeOneButtonWidget/Switcher\": [\n\t\t1296,\n\t\t91\n\t],\n\t\"./SwitcherTypeOneButtonWidget/Switcher.js\": [\n\t\t1296,\n\t\t91\n\t],\n\t\"./SwitcherTypeOneButtonWidget/Widget\": [\n\t\t1216,\n\t\t10\n\t],\n\t\"./SwitcherTypeOneButtonWidget/Widget.js\": [\n\t\t1216,\n\t\t10\n\t],\n\t\"./SwitcherTypeOneButtonWidget/WidgetProperties\": [\n\t\t1248,\n\t\t0,\n\t\t137\n\t],\n\t\"./SwitcherTypeOneButtonWidget/WidgetProperties.js\": [\n\t\t1248,\n\t\t0,\n\t\t137\n\t],\n\t\"./SwitcherTypeOneButtonWidget/index\": [\n\t\t676,\n\t\t0,\n\t\t10,\n\t\t48\n\t],\n\t\"./SwitcherTypeOneButtonWidget/index.js\": [\n\t\t676,\n\t\t0,\n\t\t10,\n\t\t48\n\t],\n\t\"./SwitcherTypeOneButtonWidget/useWidgetPreviewData\": [\n\t\t1297,\n\t\t168\n\t],\n\t\"./SwitcherTypeOneButtonWidget/useWidgetPreviewData.js\": [\n\t\t1297,\n\t\t168\n\t],\n\t\"./SwitcherTypeOneButtonWidget/useWidgetProperties\": [\n\t\t1298,\n\t\t125\n\t],\n\t\"./SwitcherTypeOneButtonWidget/useWidgetProperties.js\": [\n\t\t1298,\n\t\t125\n\t],\n\t\"./SwitcherTypeTwoButtonWidget\": [\n\t\t677,\n\t\t0,\n\t\t11,\n\t\t49\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/\": [\n\t\t677,\n\t\t0,\n\t\t11,\n\t\t49\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/Switcher\": [\n\t\t1299,\n\t\t85\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/Switcher.js\": [\n\t\t1299,\n\t\t85\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/Widget\": [\n\t\t1217,\n\t\t11\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/Widget.js\": [\n\t\t1217,\n\t\t11\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/WidgetProperties\": [\n\t\t1249,\n\t\t0,\n\t\t138\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/WidgetProperties.js\": [\n\t\t1249,\n\t\t0,\n\t\t138\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/index\": [\n\t\t677,\n\t\t0,\n\t\t11,\n\t\t49\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/index.js\": [\n\t\t677,\n\t\t0,\n\t\t11,\n\t\t49\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/useWidgetPreviewData\": [\n\t\t1300,\n\t\t169\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/useWidgetPreviewData.js\": [\n\t\t1300,\n\t\t169\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/useWidgetProperties\": [\n\t\t1301,\n\t\t126\n\t],\n\t\"./SwitcherTypeTwoButtonWidget/useWidgetProperties.js\": [\n\t\t1301,\n\t\t126\n\t],\n\t\"./TagListWidget\": [\n\t\t678,\n\t\t24,\n\t\t38,\n\t\t72\n\t],\n\t\"./TagListWidget/\": [\n\t\t678,\n\t\t24,\n\t\t38,\n\t\t72\n\t],\n\t\"./TagListWidget/TagList\": [\n\t\t1145,\n\t\t226\n\t],\n\t\"./TagListWidget/TagList.js\": [\n\t\t1145,\n\t\t226\n\t],\n\t\"./TagListWidget/Widget\": [\n\t\t1218,\n\t\t24\n\t],\n\t\"./TagListWidget/Widget.js\": [\n\t\t1218,\n\t\t24\n\t],\n\t\"./TagListWidget/WidgetProperties\": [\n\t\t1303,\n\t\t38\n\t],\n\t\"./TagListWidget/WidgetProperties.js\": [\n\t\t1303,\n\t\t38\n\t],\n\t\"./TagListWidget/index\": [\n\t\t678,\n\t\t24,\n\t\t38,\n\t\t72\n\t],\n\t\"./TagListWidget/index.js\": [\n\t\t678,\n\t\t24,\n\t\t38,\n\t\t72\n\t],\n\t\"./TagListWidget/useWidgetProperties\": [\n\t\t1302,\n\t\t127\n\t],\n\t\"./TagListWidget/useWidgetProperties.js\": [\n\t\t1302,\n\t\t127\n\t],\n\t\"./Template\": [\n\t\t1334,\n\t\t227\n\t],\n\t\"./Template.js\": [\n\t\t1334,\n\t\t227\n\t],\n\t\"./TextWidget\": [\n\t\t679,\n\t\t27,\n\t\t36,\n\t\t73\n\t],\n\t\"./TextWidget/\": [\n\t\t679,\n\t\t27,\n\t\t36,\n\t\t73\n\t],\n\t\"./TextWidget/Widget\": [\n\t\t1219,\n\t\t27\n\t],\n\t\"./TextWidget/Widget.js\": [\n\t\t1219,\n\t\t27\n\t],\n\t\"./TextWidget/WidgetProperties\": [\n\t\t1305,\n\t\t36\n\t],\n\t\"./TextWidget/WidgetProperties.js\": [\n\t\t1305,\n\t\t36\n\t],\n\t\"./TextWidget/index\": [\n\t\t679,\n\t\t27,\n\t\t36,\n\t\t73\n\t],\n\t\"./TextWidget/index.js\": [\n\t\t679,\n\t\t27,\n\t\t36,\n\t\t73\n\t],\n\t\"./TextWidget/useWidgetProperties\": [\n\t\t1304,\n\t\t128\n\t],\n\t\"./TextWidget/useWidgetProperties.js\": [\n\t\t1304,\n\t\t128\n\t],\n\t\"./ThermometerWidget\": [\n\t\t680,\n\t\t0,\n\t\t9,\n\t\t57\n\t],\n\t\"./ThermometerWidget/\": [\n\t\t680,\n\t\t0,\n\t\t9,\n\t\t57\n\t],\n\t\"./ThermometerWidget/Thermometer\": [\n\t\t650,\n\t\t47\n\t],\n\t\"./ThermometerWidget/Thermometer/\": [\n\t\t650,\n\t\t47\n\t],\n\t\"./ThermometerWidget/Thermometer/Label\": [\n\t\t1335,\n\t\t149\n\t],\n\t\"./ThermometerWidget/Thermometer/Label.js\": [\n\t\t1335,\n\t\t149\n\t],\n\t\"./ThermometerWidget/Thermometer/Svg\": [\n\t\t1336,\n\t\t150\n\t],\n\t\"./ThermometerWidget/Thermometer/Svg.js\": [\n\t\t1336,\n\t\t150\n\t],\n\t\"./ThermometerWidget/Thermometer/Thermometer\": [\n\t\t1221,\n\t\t129\n\t],\n\t\"./ThermometerWidget/Thermometer/Thermometer.js\": [\n\t\t1221,\n\t\t129\n\t],\n\t\"./ThermometerWidget/Thermometer/index\": [\n\t\t650,\n\t\t47\n\t],\n\t\"./ThermometerWidget/Thermometer/index.js\": [\n\t\t650,\n\t\t47\n\t],\n\t\"./ThermometerWidget/Thermometer/utils\": [\n\t\t1220,\n\t\t164\n\t],\n\t\"./ThermometerWidget/Thermometer/utils.js\": [\n\t\t1220,\n\t\t164\n\t],\n\t\"./ThermometerWidget/Widget\": [\n\t\t1222,\n\t\t9\n\t],\n\t\"./ThermometerWidget/Widget.js\": [\n\t\t1222,\n\t\t9\n\t],\n\t\"./ThermometerWidget/WidgetProperties\": [\n\t\t1250,\n\t\t0,\n\t\t160\n\t],\n\t\"./ThermometerWidget/WidgetProperties.js\": [\n\t\t1250,\n\t\t0,\n\t\t160\n\t],\n\t\"./ThermometerWidget/index\": [\n\t\t680,\n\t\t0,\n\t\t9,\n\t\t57\n\t],\n\t\"./ThermometerWidget/index.js\": [\n\t\t680,\n\t\t0,\n\t\t9,\n\t\t57\n\t],\n\t\"./ThermometerWidget/useWidgetProperties\": [\n\t\t1306,\n\t\t130\n\t],\n\t\"./ThermometerWidget/useWidgetProperties.js\": [\n\t\t1306,\n\t\t130\n\t],\n\t\"./ToggleButtonWidget\": [\n\t\t681,\n\t\t0,\n\t\t15,\n\t\t50\n\t],\n\t\"./ToggleButtonWidget/\": [\n\t\t681,\n\t\t0,\n\t\t15,\n\t\t50\n\t],\n\t\"./ToggleButtonWidget/ToggleButton\": [\n\t\t1307,\n\t\t131\n\t],\n\t\"./ToggleButtonWidget/ToggleButton.js\": [\n\t\t1307,\n\t\t131\n\t],\n\t\"./ToggleButtonWidget/Widget\": [\n\t\t1223,\n\t\t15\n\t],\n\t\"./ToggleButtonWidget/Widget.js\": [\n\t\t1223,\n\t\t15\n\t],\n\t\"./ToggleButtonWidget/WidgetProperties\": [\n\t\t1251,\n\t\t0,\n\t\t139\n\t],\n\t\"./ToggleButtonWidget/WidgetProperties.js\": [\n\t\t1251,\n\t\t0,\n\t\t139\n\t],\n\t\"./ToggleButtonWidget/index\": [\n\t\t681,\n\t\t0,\n\t\t15,\n\t\t50\n\t],\n\t\"./ToggleButtonWidget/index.js\": [\n\t\t681,\n\t\t0,\n\t\t15,\n\t\t50\n\t],\n\t\"./ToggleButtonWidget/useWidgetPreviewData\": [\n\t\t1308,\n\t\t170\n\t],\n\t\"./ToggleButtonWidget/useWidgetPreviewData.js\": [\n\t\t1308,\n\t\t170\n\t],\n\t\"./ToggleButtonWidget/useWidgetProperties\": [\n\t\t1309,\n\t\t132\n\t],\n\t\"./ToggleButtonWidget/useWidgetProperties.js\": [\n\t\t1309,\n\t\t132\n\t],\n\t\"./ValveControlWidget\": [\n\t\t682,\n\t\t5,\n\t\t0,\n\t\t4,\n\t\t17,\n\t\t66\n\t],\n\t\"./ValveControlWidget/\": [\n\t\t682,\n\t\t5,\n\t\t0,\n\t\t4,\n\t\t17,\n\t\t66\n\t],\n\t\"./ValveControlWidget/Valve\": [\n\t\t651,\n\t\t41\n\t],\n\t\"./ValveControlWidget/Valve/\": [\n\t\t651,\n\t\t41\n\t],\n\t\"./ValveControlWidget/Valve/Label\": [\n\t\t1173,\n\t\t151\n\t],\n\t\"./ValveControlWidget/Valve/Label.js\": [\n\t\t1173,\n\t\t151\n\t],\n\t\"./ValveControlWidget/Valve/Valve\": [\n\t\t1224,\n\t\t83\n\t],\n\t\"./ValveControlWidget/Valve/Valve.js\": [\n\t\t1224,\n\t\t83\n\t],\n\t\"./ValveControlWidget/Valve/index\": [\n\t\t651,\n\t\t41\n\t],\n\t\"./ValveControlWidget/Valve/index.js\": [\n\t\t651,\n\t\t41\n\t],\n\t\"./ValveControlWidget/Valve/utils\": [\n\t\t1156,\n\t\t165\n\t],\n\t\"./ValveControlWidget/Valve/utils.js\": [\n\t\t1156,\n\t\t165\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/CheckIcon\": [\n\t\t1152,\n\t\t183\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/CheckIcon.js\": [\n\t\t1152,\n\t\t183\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveConnectedAratar\": [\n\t\t1310,\n\t\t166\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveConnectedAratar.js\": [\n\t\t1310,\n\t\t166\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveControlActionArea\": [\n\t\t1311,\n\t\t5,\n\t\t4,\n\t\t228\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveControlActionArea.js\": [\n\t\t1311,\n\t\t5,\n\t\t4,\n\t\t228\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveControlDialog\": [\n\t\t1312,\n\t\t5,\n\t\t4\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveControlDialog.js\": [\n\t\t1312,\n\t\t5,\n\t\t4\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveControlStepCommand\": [\n\t\t1180,\n\t\t80\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveControlStepCommand.js\": [\n\t\t1180,\n\t\t80\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveControlStepConnect\": [\n\t\t1313,\n\t\t81\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveControlStepConnect.js\": [\n\t\t1313,\n\t\t81\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveControlStepPassword\": [\n\t\t1314,\n\t\t79\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveControlStepPassword.js\": [\n\t\t1314,\n\t\t79\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValvePasswordСonfirmedAratar\": [\n\t\t1315,\n\t\t184\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValvePasswordСonfirmedAratar.js\": [\n\t\t1315,\n\t\t184\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveStateAratar\": [\n\t\t1316,\n\t\t99\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveStateAratar.js\": [\n\t\t1316,\n\t\t99\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveStateIcon\": [\n\t\t1337,\n\t\t100\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/ValveStateIcon.js\": [\n\t\t1337,\n\t\t100\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/utils\": [\n\t\t1160,\n\t\t229\n\t],\n\t\"./ValveControlWidget/ValveControlDialog/utils.js\": [\n\t\t1160,\n\t\t229\n\t],\n\t\"./ValveControlWidget/Widget\": [\n\t\t1225,\n\t\t5,\n\t\t4,\n\t\t17\n\t],\n\t\"./ValveControlWidget/Widget.js\": [\n\t\t1225,\n\t\t5,\n\t\t4,\n\t\t17\n\t],\n\t\"./ValveControlWidget/WidgetProperties\": [\n\t\t1252,\n\t\t0,\n\t\t230\n\t],\n\t\"./ValveControlWidget/WidgetProperties.js\": [\n\t\t1252,\n\t\t0,\n\t\t230\n\t],\n\t\"./ValveControlWidget/index\": [\n\t\t682,\n\t\t5,\n\t\t0,\n\t\t4,\n\t\t17,\n\t\t66\n\t],\n\t\"./ValveControlWidget/index.js\": [\n\t\t682,\n\t\t5,\n\t\t0,\n\t\t4,\n\t\t17,\n\t\t66\n\t],\n\t\"./ValveControlWidget/useWidgetPreviewData\": [\n\t\t1338,\n\t\t171\n\t],\n\t\"./ValveControlWidget/useWidgetPreviewData.js\": [\n\t\t1338,\n\t\t171\n\t],\n\t\"./ValveControlWidget/useWidgetProperties\": [\n\t\t1317,\n\t\t133\n\t],\n\t\"./ValveControlWidget/useWidgetProperties.js\": [\n\t\t1317,\n\t\t133\n\t],\n\t\"./WidgetCard\": [\n\t\t1339,\n\t\t231\n\t],\n\t\"./WidgetCard.js\": [\n\t\t1339,\n\t\t231\n\t],\n\t\"./WidgetPreviewCard\": [\n\t\t1137,\n\t\t232\n\t],\n\t\"./WidgetPreviewCard.js\": [\n\t\t1137,\n\t\t232\n\t],\n\t\"./WidgetPreviewCardActions\": [\n\t\t1139,\n\t\t233\n\t],\n\t\"./WidgetPreviewCardActions.js\": [\n\t\t1139,\n\t\t233\n\t],\n\t\"./WidgetPreviewCardAvatar\": [\n\t\t1157,\n\t\t234\n\t],\n\t\"./WidgetPreviewCardAvatar.js\": [\n\t\t1157,\n\t\t234\n\t],\n\t\"./WidgetPreviewCardContent\": [\n\t\t1340,\n\t\t84\n\t],\n\t\"./WidgetPreviewCardContent.js\": [\n\t\t1340,\n\t\t84\n\t],\n\t\"./WidgetPreviewCardContentItem\": [\n\t\t1172,\n\t\t235\n\t],\n\t\"./WidgetPreviewCardContentItem.js\": [\n\t\t1172,\n\t\t235\n\t],\n\t\"./WidgetPreviewCardContentItemActionArea\": [\n\t\t1149,\n\t\t163\n\t],\n\t\"./WidgetPreviewCardContentItemActionArea.js\": [\n\t\t1149,\n\t\t163\n\t],\n\t\"./WidgetPreviewCardContentItemDialog\": [\n\t\t1148,\n\t\t182\n\t],\n\t\"./WidgetPreviewCardContentItemDialog.js\": [\n\t\t1148,\n\t\t182\n\t],\n\t\"./WidgetPreviewCardContentItems\": [\n\t\t1215,\n\t\t186\n\t],\n\t\"./WidgetPreviewCardContentItems.js\": [\n\t\t1215,\n\t\t186\n\t],\n\t\"./WidgetPreviewCardContentSeries\": [\n\t\t1146,\n\t\t88\n\t],\n\t\"./WidgetPreviewCardContentSeries.js\": [\n\t\t1146,\n\t\t88\n\t],\n\t\"./WidgetPreviewCardContentSimple\": [\n\t\t1143,\n\t\t89\n\t],\n\t\"./WidgetPreviewCardContentSimple.js\": [\n\t\t1143,\n\t\t89\n\t],\n\t\"./WidgetPreviewCardContentWrapper\": [\n\t\t1318,\n\t\t90\n\t],\n\t\"./WidgetPreviewCardContentWrapper.js\": [\n\t\t1318,\n\t\t90\n\t],\n\t\"./WidgetPreviewCardHeader\": [\n\t\t1138,\n\t\t187\n\t],\n\t\"./WidgetPreviewCardHeader.js\": [\n\t\t1138,\n\t\t187\n\t],\n\t\"./WidgetPreviewCardHeaderAvatar\": [\n\t\t1135,\n\t\t236\n\t],\n\t\"./WidgetPreviewCardHeaderAvatar.js\": [\n\t\t1135,\n\t\t236\n\t],\n\t\"./WidgetPreviewCardSeries\": [\n\t\t1147,\n\t\t75\n\t],\n\t\"./WidgetPreviewCardSeries.js\": [\n\t\t1147,\n\t\t75\n\t],\n\t\"./WidgetPreviewCardSimple\": [\n\t\t1144,\n\t\t76\n\t],\n\t\"./WidgetPreviewCardSimple.js\": [\n\t\t1144,\n\t\t76\n\t],\n\t\"./WidgetPreviewCard_old\": [\n\t\t1174,\n\t\t185\n\t],\n\t\"./WidgetPreviewCard_old.js\": [\n\t\t1174,\n\t\t185\n\t],\n\t\"./WidgetPropertyInputWrapper\": [\n\t\t1341,\n\t\t237\n\t],\n\t\"./WidgetPropertyInputWrapper.js\": [\n\t\t1341,\n\t\t237\n\t],\n\t\"./WriteValueWidget\": [\n\t\t683,\n\t\t0,\n\t\t16,\n\t\t51\n\t],\n\t\"./WriteValueWidget/\": [\n\t\t683,\n\t\t0,\n\t\t16,\n\t\t51\n\t],\n\t\"./WriteValueWidget/Widget\": [\n\t\t1226,\n\t\t16\n\t],\n\t\"./WriteValueWidget/Widget.js\": [\n\t\t1226,\n\t\t16\n\t],\n\t\"./WriteValueWidget/WidgetProperties\": [\n\t\t1253,\n\t\t0,\n\t\t140\n\t],\n\t\"./WriteValueWidget/WidgetProperties.js\": [\n\t\t1253,\n\t\t0,\n\t\t140\n\t],\n\t\"./WriteValueWidget/WriteValue\": [\n\t\t1321,\n\t\t134\n\t],\n\t\"./WriteValueWidget/WriteValue.js\": [\n\t\t1321,\n\t\t134\n\t],\n\t\"./WriteValueWidget/index\": [\n\t\t683,\n\t\t0,\n\t\t16,\n\t\t51\n\t],\n\t\"./WriteValueWidget/index.js\": [\n\t\t683,\n\t\t0,\n\t\t16,\n\t\t51\n\t],\n\t\"./WriteValueWidget/useWidgetPreviewData\": [\n\t\t1319,\n\t\t172\n\t],\n\t\"./WriteValueWidget/useWidgetPreviewData.js\": [\n\t\t1319,\n\t\t172\n\t],\n\t\"./WriteValueWidget/useWidgetProperties\": [\n\t\t1320,\n\t\t135\n\t],\n\t\"./WriteValueWidget/useWidgetProperties.js\": [\n\t\t1320,\n\t\t135\n\t],\n\t\"./_CommandWidget\": [\n\t\t684,\n\t\t39\n\t],\n\t\"./_CommandWidget/\": [\n\t\t684,\n\t\t39\n\t],\n\t\"./_CommandWidget/Widget\": [\n\t\t1175,\n\t\t78\n\t],\n\t\"./_CommandWidget/Widget.js\": [\n\t\t1175,\n\t\t78\n\t],\n\t\"./_CommandWidget/WidgetAvatar\": [\n\t\t1177,\n\t\t238\n\t],\n\t\"./_CommandWidget/WidgetAvatar.js\": [\n\t\t1177,\n\t\t238\n\t],\n\t\"./_CommandWidget/WidgetPreview\": [\n\t\t1254,\n\t\t77\n\t],\n\t\"./_CommandWidget/WidgetPreview.js\": [\n\t\t1254,\n\t\t77\n\t],\n\t\"./_CommandWidget/WidgetProperties\": [\n\t\t1256,\n\t\t239\n\t],\n\t\"./_CommandWidget/WidgetProperties.js\": [\n\t\t1256,\n\t\t239\n\t],\n\t\"./_CommandWidget/index\": [\n\t\t684,\n\t\t39\n\t],\n\t\"./_CommandWidget/index.js\": [\n\t\t684,\n\t\t39\n\t],\n\t\"./_CommandWidget/useParsedProperties\": [\n\t\t1158,\n\t\t188\n\t],\n\t\"./_CommandWidget/useParsedProperties.js\": [\n\t\t1158,\n\t\t188\n\t],\n\t\"./_CommandWidget/useTagsFromProperties\": [\n\t\t1159,\n\t\t240\n\t],\n\t\"./_CommandWidget/useTagsFromProperties.js\": [\n\t\t1159,\n\t\t240\n\t],\n\t\"./_CommandWidget/useWidgetController\": [\n\t\t1176,\n\t\t152\n\t],\n\t\"./_CommandWidget/useWidgetController.js\": [\n\t\t1176,\n\t\t152\n\t],\n\t\"./_CommandWidget/utils\": [\n\t\t1342,\n\t\t167\n\t],\n\t\"./_CommandWidget/utils.js\": [\n\t\t1342,\n\t\t167\n\t],\n\t\"./_IvideonWidget\": [\n\t\t685,\n\t\t1,\n\t\t18,\n\t\t67\n\t],\n\t\"./_IvideonWidget/\": [\n\t\t685,\n\t\t1,\n\t\t18,\n\t\t67\n\t],\n\t\"./_IvideonWidget/IframeComponent\": [\n\t\t1227,\n\t\t241\n\t],\n\t\"./_IvideonWidget/IframeComponent.js\": [\n\t\t1227,\n\t\t241\n\t],\n\t\"./_IvideonWidget/ScadaWebJS\": [\n\t\t1322,\n\t\t92\n\t],\n\t\"./_IvideonWidget/ScadaWebJS.js\": [\n\t\t1322,\n\t\t92\n\t],\n\t\"./_IvideonWidget/Widget\": [\n\t\t1229,\n\t\t18\n\t],\n\t\"./_IvideonWidget/Widget.js\": [\n\t\t1229,\n\t\t18\n\t],\n\t\"./_IvideonWidget/WidgetProperties\": [\n\t\t1255,\n\t\t1,\n\t\t242\n\t],\n\t\"./_IvideonWidget/WidgetProperties.js\": [\n\t\t1255,\n\t\t1,\n\t\t242\n\t],\n\t\"./_IvideonWidget/index\": [\n\t\t685,\n\t\t1,\n\t\t18,\n\t\t67\n\t],\n\t\"./_IvideonWidget/index.js\": [\n\t\t685,\n\t\t1,\n\t\t18,\n\t\t67\n\t],\n\t\"./_IvideonWidget/ivideonClient\": [\n\t\t1228,\n\t\t243\n\t],\n\t\"./_IvideonWidget/ivideonClient.js\": [\n\t\t1228,\n\t\t243\n\t],\n\t\"./_IvideonWidget/useWidgetProperties\": [\n\t\t1323,\n\t\t136\n\t],\n\t\"./_IvideonWidget/useWidgetProperties.js\": [\n\t\t1323,\n\t\t136\n\t],\n\t\"./_IvideonWidget/utils\": [\n\t\t1343,\n\t\t244\n\t],\n\t\"./_IvideonWidget/utils.js\": [\n\t\t1343,\n\t\t244\n\t],\n\t\"./getTextSize\": [\n\t\t1344,\n\t\t245\n\t],\n\t\"./getTextSize.js\": [\n\t\t1344,\n\t\t245\n\t],\n\t\"./useParsedProperties\": [\n\t\t1324,\n\t\t189\n\t],\n\t\"./useParsedProperties.js\": [\n\t\t1324,\n\t\t189\n\t],\n\t\"./useSubscriptionFilter\": [\n\t\t1345,\n\t\t246\n\t],\n\t\"./useSubscriptionFilter.js\": [\n\t\t1345,\n\t\t246\n\t],\n\t\"./useTagsFromProperties\": [\n\t\t1325,\n\t\t247\n\t],\n\t\"./useTagsFromProperties.js\": [\n\t\t1325,\n\t\t247\n\t],\n\t\"./useWidgetController\": [\n\t\t1346,\n\t\t153\n\t],\n\t\"./useWidgetController.js\": [\n\t\t1346,\n\t\t153\n\t],\n\t\"./useWidgetPreviewData\": [\n\t\t1141,\n\t\t173\n\t],\n\t\"./useWidgetPreviewData.js\": [\n\t\t1141,\n\t\t173\n\t],\n\t\"./useWidgetPreviewHistoryData\": [\n\t\t1231,\n\t\t248\n\t],\n\t\"./useWidgetPreviewHistoryData.js\": [\n\t\t1231,\n\t\t248\n\t],\n\t\"./useWidgetPreviewPropertyStyles\": [\n\t\t1136,\n\t\t249\n\t],\n\t\"./useWidgetPreviewPropertyStyles.js\": [\n\t\t1136,\n\t\t249\n\t],\n\t\"./utils\": [\n\t\t1151,\n\t\t250\n\t],\n\t\"./utils.js\": [\n\t\t1151,\n\t\t250\n\t],\n\t\"./widgetPreviewDataUtils\": [\n\t\t1127,\n\t\t154\n\t],\n\t\"./widgetPreviewDataUtils.js\": [\n\t\t1127,\n\t\t154\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 1533;\nmodule.exports = webpackAsyncContext;","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport FormControl from '@material-ui/core/FormControl';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { FieldTitle } from 'ra-core';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport { InputHelperText } from 'react-admin';\nimport Box from '@material-ui/core/Box';\n\nconst useStyles = makeStyles(theme => ({\n root: {},\n label: {\n position: 'relative',\n },\n value: {\n fontFamily: theme.typography.fontFamily,\n color: 'currentColor',\n padding: `${theme.spacing(1)}px 0 ${theme.spacing(1) / 2}px`,\n border: 0,\n boxSizing: 'content-box',\n verticalAlign: 'middle',\n background: 'none',\n margin: 0, // Reset for Safari\n display: 'block',\n width: '100%',\n },\n}), { name: 'RaLabeled' });\n\n\n/**\n * Use any component as read-only Input, labeled just like other Inputs.\n *\n * Useful to use a Field in the Edit or Create components.\n * The child component will receive the current record.\n *\n * This component name doesn't have a typo. We had to choose between\n * the American English \"Labeled\", and the British English \"Labelled\".\n * We flipped a coin.\n *\n * @example\n * \n * \n * \n */\nconst LabeledBox = (props) => {\n const {\n children,\n className,\n classes: classesOverride,\n fullWidth,\n id,\n input,\n isRequired,\n label,\n margin = 'dense',\n meta,\n resource,\n source,\n helperText,\n ...rest\n } = props;\n const classes = useStyles(props);\n if (!label && !source) {\n // @ts-ignore\n const name = children && children.type && children.type.name;\n\n throw new Error(\n `Cannot create label for component <${name}>: You must set either the label or source props. You can also disable automated label insertion by setting 'addLabel: false' in the component default props`\n );\n }\n const restProps = fullWidth ? { ...rest, fullWidth } : rest;\n\n const hasError = meta && !!(meta.error || meta.submitError);\n return (\n \n \n \n \n \n
\n {children && typeof children.type !== 'string'\n ? React.cloneElement(children, {\n input,\n resource,\n ...restProps,\n })\n : children}\n
\n
\n \n \n \n \n );\n};\n\nLabeledBox.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.element,\n className: PropTypes.string,\n classes: PropTypes.object,\n fullWidth: PropTypes.bool,\n id: PropTypes.string,\n input: PropTypes.object,\n isRequired: PropTypes.bool,\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n meta: PropTypes.object,\n onChange: PropTypes.func,\n record: PropTypes.object,\n resource: PropTypes.string,\n source: PropTypes.string,\n labelStyle: PropTypes.object,\n};\n\nexport default LabeledBox;","import React, { useCallback, useRef, useState } from 'react'\nimport MonacoEditor, { loader } from \"@monaco-editor/react\";\nimport { usePreferences } from '@react-admin/ra-preferences';\n// https://github.com/suren-atoyan/monaco-react\n\n\nimport classnames from 'classnames';\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\n\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport LabeledBox from './LabeledBox'\nimport Box from '@material-ui/core/Box';\nimport { useInput, InputHelperText } from 'react-admin';\nimport { get } from 'lodash';\n\nconst sanitizeInputRestProps = ({\n afterSubmit,\n allowEmpty,\n allowNull,\n alwaysOn,\n basePath,\n beforeSubmit,\n component,\n data,\n defaultValue,\n error,\n format,\n formatOnBlur,\n formClassName,\n initialValue,\n initializeForm,\n input,\n isEqual,\n isRequired,\n label,\n limitChoicesToValue,\n locale,\n meta,\n multiple,\n name,\n options,\n optionText,\n optionValue,\n parse,\n record,\n ref,\n render,\n resource,\n source,\n submitError,\n subscription,\n textAlign,\n translate,\n translateChoice,\n type,\n validate,\n validateFields,\n value,\n ...rest\n}) => rest;\n\nloader.config({ paths: { vs: 'monaco-editor/0.33.0/min/vs' }, \"vs/nls\": { availableLanguages: { \"*\": \"ru\" } } });\n\nconst useStyles = makeStyles(theme => ({\n root: {\n padding: theme.spacing(1),\n borderBottomWidth: 1,\n borderBottomStyle: 'solid',\n borderTopLeftRadius: 4,\n borderTopRightRadius: 4,\n backgroundColor: theme.palette.action.hover\n },\n label: {\n width: '100%',\n }\n}), { name: 'RaMonacoInput' });\n\n\nconst MonacoInput = props => {\n const {\n className,\n classes: classesOverride,\n helperText,\n label,\n resource,\n source,\n format,\n parse,\n onMount,\n onValidate,\n validate,\n record,\n defaultValue,\n height = 400,\n ...rest\n } = props;\n\n const uitheme = useTheme();\n\n const [theme] = usePreferences('theme', \"light\"); //dark\n\n const editorRef = useRef(null);\n const classes = useStyles(props);\n const [markersValidate, setMarkersValidate] = useState();\n\n const jsonParseValidator = useCallback(() => {\n if (markersValidate && markersValidate.length > 0) {\n return {markersValidate.map(m => `[Line ${m.startLineNumber == m.endLineNumber ? m.startLineNumber : `${m.startLineNumber}-${m.endLineNumber}`}] - ${m.message}`).join(`, `)};\n }\n return undefined;\n }, [value, markersValidate]);\n\n const {\n id,\n input: { onChange, onBlur, value, ...inputProps },\n meta,\n isRequired,\n } = useInput({\n source,\n format,\n parse,\n validate: [...(validate || []), jsonParseValidator],\n ...rest,\n });\n\n const handleEditorDidMount = useCallback((editor, monaco) => {\n\n editorRef.current = editor;\n editor.onDidBlurEditorText(() => onBlur(value));\n if (typeof onMount === 'function') onMount(editor, monaco);\n\n monaco.editor.defineTheme('ra-mui-theme-light', {\n base: 'vs',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n }\n });\n\n\n monaco.editor.defineTheme('ra-mui-theme-dark', {\n base: 'vs-dark',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#00000000',\n }\n });\n\n const editorDomNode = editor.getDomNode();\n\n\n window.addEventListener('resize', () => {\n // make editor as small as possible\n editor.layout({ width: 0, height: 0 });\n\n window.requestAnimationFrame(() => {\n // get the parent dimensions and re-layout the editor\n const rect = editorDomNode?.parentElement?.getBoundingClientRect();\n if (rect) {\n editor.layout({ width: rect.width, height: rect.height })\n }\n });\n });\n\n /*\n let ignoreEvent = false;\n const updateHeight = () => {\n const contentHeight = Math.min(1000, editor.getContentHeight());\n const contentW = Math.min(1000, editor.ge);\n \n editorDomNode.style.height = `${contentHeight}px`;\n \n try {\n ignoreEvent = true;\n editor.layout({ width: rect.width, height: contentHeight });\n } finally {\n ignoreEvent = false;\n }\n };\n editor.onDidContentSizeChange(updateHeight);\n //updateHeight();*/\n\n }, [editorRef]);\n\n const handleEditorChange = useCallback((val, event) => {\n //console.log(`[handleEditorChange] : ${val}`); \n onChange(val);\n }, []);\n\n const handleEditorValidation = useCallback(markers => {\n\n setMarkersValidate(markers);\n\n if (markers?.length > 0) {\n onChange(value);\n } else {\n const val = editorRef.current.getValue();\n onChange(val);\n }\n\n }, [editorRef, value]);\n\n\n let val = value;\n if (!val) {\n const raw_value = get(record, source) || defaultValue;\n val = JSON.stringify(raw_value, null, '\\t');\n }\n\n return (\n \n \n \n\n // \n // <>\n // \n // \n // \n // \n // \n // \n // \n // \n );\n};\n\n\n\nexport default MonacoInput;\n","import React, { useCallback } from 'react'\nimport MonacoInput from './MonacoInput'\nimport { get, unionBy } from 'lodash';\n\n\nconst JsonInput = ({\n jsonSchemas = [],\n resource,\n source,\n ...props\n}) => {\n\n const format = useCallback((value) => {\n return (value == undefined) ? value : (typeof value === 'string') ? value : JSON.stringify(value, null, '\\t')\n }, []);\n\n const parse = useCallback((value) => {\n const result = (value == undefined || value === \"\") ? value : JSON.parse(value);\n return result;\n }, []);\n\n const handleMount = useCallback((editor, monaco) => {\n if (jsonSchemas) {\n const prew_schemas = get(monaco, 'languages.json.jsonDefaults._diagnosticsOptions.schemas') || [];\n const schemas = unionBy(prew_schemas, jsonSchemas, 'uri');\n\n monaco.languages.json.jsonDefaults.setDiagnosticsOptions({\n validate: true,\n schemas\n });\n }\n }, []);\n\n\n const path = `inmemory://inmemory/${resource}_${source}.json`;\n\n return (\n \n );\n};\n\nexport default JsonInput;\n","import { useCallback, useEffect, useState } from 'react'\nimport useRemoteStorageContext from './useRemoteStorageContext'\n\n\n\nconst useRemoteStorage = (key, initialValue) => {\n const remoteStorage = useRemoteStorageContext()\n\n const getValue = useCallback(() => {\n const item = remoteStorage.getItem(key, initialValue);\n return item\n }, [key, initialValue])\n\n const [storedValue, setStoredValue] = useState(getValue)\n\n const setValue = useCallback(value => {\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n remoteStorage.setItem(key, valueToStore);\n setStoredValue(valueToStore);\n }, [key, storedValue])\n\n useEffect(() => {\n setStoredValue(getValue())\n }, [remoteStorage.storage])\n\n\n return [storedValue, setValue]\n}\n\nexport default useRemoteStorage","import React, { useCallback, Fragment,useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { alpha } from '@material-ui/core/styles/colorManipulator';\nimport RemoveIcon from '@material-ui/icons/Delete';\nimport classnames from 'classnames';\nimport { useMutation, useResourceContext, useRefresh, useNotify, useRedirect, useTranslate, Confirm } from 'react-admin';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\nimport inflection from 'inflection';\n\n\n\n\nconst RemoveButton = (props) => {\n const {\n label = 'ra.action.remove',\n confirmTitle = 'ra.action.remove_title',\n confirmContent = 'ra.action.remove_content',\n classes: classesOverride,\n className,\n icon = defaultIcon,\n onClick,\n record,\n basePath,\n redirect: redirectTo = 'list',\n onSuccess,\n onFailure,\n undoable, mutationMode = \"optimistic\",\n ...rest\n } = props;\n const classes = useStyles(props);\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const translate = useTranslate()\n const resource = useResourceContext(props);\n const [mutate, { loading }] = useMutation();\n\n const [open, setOpen] = useState(false);\n\n const handleDialogOpen = e => {\n setOpen(true);\n e.stopPropagation();\n };\n\n const handleDialogClose = e => {\n setOpen(false);\n e.stopPropagation();\n };\n\n const handleRemove = useCallback((event) => {\n event.stopPropagation();\n mutate({\n type: 'remove',\n resource,\n payload: { id: record.id, previousData: record }\n },\n {\n mutationMode: mutationMode,\n onSuccess: onSuccess !== undefined\n ? onSuccess\n : () => {\n notify('ra.notification.removed', 'info', { smart_count: 1 }, mutationMode === 'undoable');\n redirect(redirectTo, basePath);\n refresh();\n },\n onFailure: onFailure !== undefined\n ? onFailure\n : error => {\n notify(\n typeof error === 'string'\n ? error\n : error.message || 'ra.notification.http_error',\n 'warning',\n {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n }\n );\n refresh();\n },\n })\n if (typeof onClick === 'function') {\n onClick(event);\n }\n }, [mutate, onClick, record]);\n\n return (\n \n \n \n \n \n {translate(label)}\n \n \n \n );\n\n};\n\nconst useStyles = makeStyles(theme => ({\n removeButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}), { name: 'RaRemoveButton' });\n\n\n\nconst defaultIcon = ;\n\n\n\nRemoveButton.propTypes = {\n basePath: PropTypes.string,\n classes: PropTypes.object,\n className: PropTypes.string,\n label: PropTypes.string,\n record: PropTypes.any,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n resource: PropTypes.string,\n icon: PropTypes.element,\n};\n\nexport default RemoveButton;","import { useContext } from \"react\";\nimport EventContext from \"./EventContext\";\n\nconst useEventContext = () => useContext(EventContext);\n\nexport default useEventContext","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../../authProvider/authorizationProvider/checkToken';\nimport { URI_GATEWAY_SERVICE } from '../../appsettings';\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeader('authorization', token ? `Bearer ${token}` : \"\");\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_GATEWAY_SERVICE)\n\nexport default client","import React, { useState, useCallback, Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { alpha } from '@material-ui/core/styles/colorManipulator';\nimport RemoveIcon from '@material-ui/icons/Delete';\nimport classnames from 'classnames';\nimport {\n useDeleteWithConfirmController,\n useResourceContext,\n useTranslate,\n} from 'ra-core';\nimport { Confirm } from \"react-admin\";\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\nimport inflection from 'inflection';\n\n\n\nconst DeleteButtonAsMenuItem = (props) => {\n const {\n label = 'ra.action.delete',\n confirmTitle = 'ra.action.remove_title',\n confirmContent = 'ra.action.remove_content',\n classes: classesOverride,\n className,\n icon = defaultIcon,\n onClick,\n record,\n basePath,\n redirect = 'list',\n onSuccess,\n onFailure,\n mutationMode = 'optimistic',\n ...rest\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate()\n const resource = useResourceContext(props)\n\n const { loading, handleDelete } = useDeleteWithConfirmController({\n record,\n resource,\n basePath,\n redirect,\n onClick,\n onSuccess,\n onFailure,\n mutationMode,\n });\n\n const [open, setOpen] = useState(false);\n\n const handleDialogOpen = e => {\n setOpen(true);\n e.stopPropagation();\n };\n\n const handleDialogClose = e => {\n setOpen(false);\n e.stopPropagation();\n };\n\n return (\n \n \n \n \n \n {translate(label)}\n \n \n \n );\n\n};\n\nconst useStyles = makeStyles(theme => ({\n deleteButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}), { name: 'DeleteButtonAsMenuItem' });\n\n\n\nconst defaultIcon = ;\n\n\n\nDeleteButtonAsMenuItem.propTypes = {\n basePath: PropTypes.string,\n classes: PropTypes.object,\n className: PropTypes.string,\n label: PropTypes.string,\n record: PropTypes.any,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n resource: PropTypes.string,\n icon: PropTypes.element,\n};\n\nexport default DeleteButtonAsMenuItem;","import React, { cloneElement, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { sanitizeListRestProps, useListContext, useResourceContext, useResourceDefinition } from 'ra-core';\nimport { CreateButton, TopToolbar } from 'react-admin';\nimport ImportButton from '../../lib/button/ImportButton';\nimport ExportButton from '../../lib/button/ExportButton';\nimport ColumnsButton from '../../lib/list/ColumnsButton';\nimport PresetButton from '../../lib/list/PresetButton';\n\n\n\nconst ListActions = (props) => {\n const {\n className,\n exporter = false,\n importer = false,\n filters,\n columns, \n ...rest\n } = props;\n const {\n currentSort,\n displayedFilters,\n filterValues,\n basePath,\n showFilter,\n total \n } = useListContext(props);\n const resource = useResourceContext(rest);\n const { hasCreate } = useResourceDefinition(rest);\n\n return useMemo(() => (\n \n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })}\n \n \n {exporter !== false && (\n \n )}\n {importer !== false && (\n \n )}\n {hasCreate && }\n \n ),\n /* eslint-disable react-hooks/exhaustive-deps */\n [\n resource,\n displayedFilters,\n filterValues,\n showFilter,\n filters,\n total,\n basePath,\n className,\n currentSort,\n exporter,\n hasCreate,\n ]\n );\n};\n\nListActions.propTypes = {\n basePath: PropTypes.string,\n className: PropTypes.string,\n currentSort: PropTypes.any,\n displayedFilters: PropTypes.object,\n exporter: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.bool]),\n filters: PropTypes.element,\n filterValues: PropTypes.object,\n hasCreate: PropTypes.bool,\n resource: PropTypes.string,\n onUnselectItems: PropTypes.func.isRequired,\n selectedIds: PropTypes.arrayOf(PropTypes.any),\n showFilter: PropTypes.func,\n total: PropTypes.number,\n};\n\nListActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\nexport default ListActions;\n","import gql from 'graphql-tag';\n\n\n\nexport const EVENT_FRAGMENT = gql`\n fragment EventFragment on Event {\n id\n type\n resource\n tag\n active\n ack\n ackRequired\n message{\n title\n body\n }\n priority\n severity\n userId\n comment\n timestamp\n timestampSrv\n }\n`\n","import React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport RestoreIcon from '@material-ui/icons/RestoreFromTrash';\nimport classnames from 'classnames';\nimport { useMutation, useResourceContext, useRefresh, useNotify, useRedirect, useTranslate } from 'react-admin';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\n\n\n\n\n\nconst RestoreButtonAsMenuItem = (props) => {\n const {\n label = 'ra.action.restore',\n classes: classesOverride,\n className,\n icon = defaultIcon,\n onClick,\n record,\n basePath,\n redirect: redirectTo = 'list',\n onSuccess,\n onFailure,\n ...rest\n } = props;\n const classes = useStyles(props);\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const translate = useTranslate()\n const resource = useResourceContext(props)\n const [mutate, { loading }] = useMutation()\n\n const handleRestore = useCallback((event) => {\n event.stopPropagation();\n mutate({\n type: 'restore',\n resource,\n payload: { id: record.id, previousData: record }\n },\n {\n mutationMode: 'undoable',\n onSuccess: onSuccess !== undefined\n ? onSuccess\n : () => {\n notify('ra.notification.restored', 'info', { smart_count: 1 }, true);\n redirect(redirectTo, basePath);\n refresh();\n },\n onFailure: onFailure !== undefined\n ? onFailure\n : error => {\n notify(\n typeof error === 'string'\n ? error\n : error.message || 'ra.notification.http_error',\n 'warning',\n {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n }\n );\n refresh();\n },\n })\n if (typeof onClick === 'function') {\n onClick(event);\n }\n }, [mutate, onClick, record]);\n\n return (\n \n \n \n \n {translate(label)}\n \n );\n\n};\n\nconst useStyles = makeStyles(theme => ({\n restoreButton: {},\n}), { name: 'RestoreButtonAsMenuItem' });\n\n\n\nconst defaultIcon = ;\n\n\n\nRestoreButtonAsMenuItem.propTypes = {\n basePath: PropTypes.string,\n classes: PropTypes.object,\n className: PropTypes.string,\n label: PropTypes.string,\n record: PropTypes.any,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n resource: PropTypes.string,\n icon: PropTypes.element,\n};\n\nexport default RestoreButtonAsMenuItem;","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../../authProvider/authorizationProvider/checkToken';\nimport { URI_DATABUS_SERVICE } from '../../appsettings';\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeader('authorization', token ? `Bearer ${token}` : \"\");\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_DATABUS_SERVICE)\n\nexport default client","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n \n \n \n );\n}\n\nexport default Icon;","import useRemoteStorage from '../../controller/remoteStorage/useRemoteStorage';\n\nconst useListPresets = (resource, initialValue = []) => useRemoteStorage(`${resource}.list.presets`, initialValue)\n\nexport default useListPresets\n","import React, { forwardRef, useCallback } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport IconButton from '@material-ui/core/IconButton';\nimport DeleteOutlineIcon from '@material-ui/icons/DeleteOutline';\n\n\n\nconst useStyles = makeStyles(theme => ({\n}), { name: 'PresetButtonMenuItem' });\n\nconst PresetButtonMenuItem = forwardRef((props, ref) => {\n const { preset, index, selected, onDelete, onSelect } = props;\n\n const classes = useStyles();\n\n const handleSelect = useCallback((event) => {\n event.stopPropagation();\n if (!selected) onSelect(preset);\n }, [selected, onSelect]);\n\n const handleDelete = useCallback((event) => {\n event.stopPropagation();\n onDelete(index);\n }, [onDelete]);\n\n return (\n \n \n {selected && \"✓ \"}\n {preset.name}\n \n \n \n \n \n \n \n );\n});\n\n\n\nexport default PresetButtonMenuItem","import React, { useCallback } from 'react';\nimport { Form } from 'react-final-form';\nimport { useListContext, useTranslate, TextInput, required, maxLength } from 'react-admin';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport useListPresets from '../../controller/remoteStorage/useListPresets';\nimport useListColumns from '../../controller/localStorage/useListColumns';\n\n\n\nconst defaultSubscription = {\n submitting: true,\n pristine: true,\n valid: true,\n invalid: true,\n values: true,\n};\n\nconst validateName = [required(), maxLength(128)]\n\nconst PresetButtonSaveDialog = ({\n open,\n onClose,\n listColumns,\n}) => {\n const translate = useTranslate();\n const { filterValues, currentSort, perPage, displayedFilters = {}, resource } = useListContext();\n const [listPresets, setListPresets] = useListPresets(resource);\n // const [listColumns] = useListColumns(resource)\n\n\n const handleClose = useCallback((event) => {\n onClose()\n }, [onClose]);\n\n const handleSavePreset = useCallback((values) => {\n setListPresets(previous => {\n\n return previous.concat({\n name: values.name,\n payload: {\n columns: listColumns,\n filters: filterValues,\n sort: currentSort,\n perPage,\n displayedFilters,\n },\n })\n })\n onClose()\n }, [setListPresets, onClose, listColumns])\n\n return (\n \n {translate('ra.preset.save_dialog.title')}\n (\n
\n \n \n {translate('ra.preset.save_dialog.content_text')}\n \n \n \n \n \n \n \n )}\n />\n \n );\n};\n\nexport default PresetButtonSaveDialog","import React, { useState, useCallback, useRef, useMemo } from 'react';\nimport map from \"lodash/map\";\nimport { useHistory } from 'react-router-dom';\nimport { stringify } from 'query-string';\nimport isEqual from 'lodash/isEqual';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport CreationIcon from '../icons/Creation';\nimport { useTranslate, useListContext, Button } from 'react-admin';\nimport useListPresets from '../../controller/remoteStorage/useListPresets';\nimport useListColumns from '../../controller/localStorage/useListColumns';\nimport PresetButtonMenuItem from './PresetButtonMenuItem';\nimport PresetButtonSaveDialog from './PresetButtonSaveDialog';\n\n\n\nconst useStyles = makeStyles({\n root: { display: 'inline-block' },\n}, { name: 'PresetButton' });\n\nconst PresetButton = (props) => {\n const {\n columns,\n className,\n ...rest\n } = props;\n const history = useHistory();\n const translate = useTranslate();\n const [open, setOpen] = useState(false);\n const anchorEl = useRef();\n const classes = useStyles(props);\n const {\n filterValues,\n currentSort,\n perPage,\n displayedFilters = {},\n resource,\n setFilters,\n setPage,\n setPerPage,\n setSort\n } = useListContext();\n const columnsIds = map(columns, \"props.source\")\n const [listColumns, setListColumns] = useListColumns(resource, columnsIds)\n const [listPresets, setListPresets] = useListPresets(resource)\n const currentSet = useMemo(() => ({ columns: listColumns, filters: filterValues, sort: currentSort, perPage, displayedFilters }), [listColumns, filterValues, currentSort, perPage, displayedFilters, resource])\n\n\n const handleClick = useCallback(event => {\n event.preventDefault();\n setOpen(true);\n anchorEl.current = event.currentTarget;\n }, [anchorEl, setOpen]);\n\n const handleClose = useCallback(() => {\n setOpen(false)\n }, [setOpen]);\n\n const handleSelect = useCallback((preset) => {\n const { columns: listColumns, filters, sort: { field, order }, perPage, displayedFilters } = preset.payload\n history.push({\n search: stringify({\n filter: JSON.stringify(filters),\n sort: field,\n order: order,\n page: 1,\n perPage: perPage,\n displayedFilters: JSON.stringify(displayedFilters),\n }),\n });\n\n setListColumns(listColumns)\n setOpen(false)\n }, [setListColumns, setFilters, setPage, setPerPage, setSort]);\n\n const handleDelete = useCallback((removedIndex) => {\n setListPresets(previous => {\n return previous.filter((_, index) => index !== removedIndex)\n });\n }, [setListPresets]);\n\n // add query dialog state\n const [saveDialogOpen, setSaveDialogOpen] = useState(false);\n\n const handleSaveDialogOpen = () => {\n setOpen(false);\n setSaveDialogOpen(true);\n };\n\n const handleSaveDialogClose = () => {\n setSaveDialogOpen(false);\n };\n\n\n // const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n\n // const handleDeleteDialogOpen = () => {\n // setOpen(false);\n // setDeleteDialogOpen(true);\n // };\n\n // const handleDeleteDialogClose = () => {\n // setDeleteDialogOpen(false);\n // };\n\n const hasAlreadySavedListPreset = useMemo(() => {\n return listPresets.some(preset => {\n return isEqual(preset.payload, currentSet)\n })\n }, [listPresets, currentSet])\n\n\n\n return (\n \n \n \n \n \n {listPresets.map((preset, index) => {\n const presetSelected = isEqual(preset.payload, currentSet)\n return (\n )\n\n })}\n {!hasAlreadySavedListPreset ? (\n {translate('ra.preset.save_label')}\n ) : null}\n \n \n \n );\n};\n\n\n\nexport default PresetButton;\n","import { createContext } from 'react';\n\nconst WebSocketContext = createContext({\n status: null,\n connecting: false,\n connected: false,\n error: null,\n services: null,\n});\n\nWebSocketContext.displayName = 'WebSocketContext';\n\nexport default WebSocketContext","import { useContext } from \"react\";\nimport WebSocketContext from \"./WebSocketContext\";\n\nconst useWebSocketContext = () => useContext(WebSocketContext);\n\nexport default useWebSocketContext","import React from 'react';\nimport clsx from 'clsx';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { duration } from '@material-ui/core/styles/transitions';\nimport useEventCallback from '@material-ui/core/utils/useEventCallback';\nimport Grow from '@material-ui/core/Grow';\nimport SnackbarContent from '@material-ui/core/SnackbarContent';\n\n\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n zIndex: theme.zIndex.snackbar,\n position: 'fixed',\n top: 8,\n display: 'flex',\n left: 8,\n right: 8,\n justifyContent: 'center',\n alignItems: 'center',\n [theme.breakpoints.up('sm')]: {\n top: 24,\n left: '50%',\n right: 'auto',\n transform: 'translateX(-50%)',\n },\n },\n}), { name: 'RaWebSocketNotificationSnackbar' });\n\n\nconst WebSocketNotificationSnackbar = React.forwardRef((props, ref) => {\n const {\n action,\n autoHideDuration = null,\n children,\n className,\n ContentProps,\n message,\n onClose,\n open,\n resumeHideDuration,\n transitionDuration = {\n enter: duration.enteringScreen,\n exit: duration.leavingScreen,\n },\n TransitionProps,\n ...other\n } = props;\n\n\n const classes = useStyles();\n const timerAutoHide = React.useRef();\n\n const handleClose = useEventCallback((...args) => {\n if (onClose) {\n onClose(...args);\n }\n });\n\n const setAutoHideTimer = useEventCallback((autoHideDurationParam) => {\n if (!onClose || autoHideDurationParam == null) {\n return;\n }\n\n clearTimeout(timerAutoHide.current);\n timerAutoHide.current = setTimeout(() => {\n handleClose(null, 'timeout');\n }, autoHideDurationParam);\n });\n\n React.useEffect(() => {\n if (open) {\n setAutoHideTimer(autoHideDuration);\n }\n\n return () => {\n clearTimeout(timerAutoHide.current);\n };\n }, [open, autoHideDuration, setAutoHideTimer]);\n\n\n\n\n\n // So we only render active snackbars.\n if (!open) {\n return null;\n }\n\n return (\n \n \n \n \n \n );\n});\n\nexport default WebSocketNotificationSnackbar","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { useTranslate } from 'ra-core';\nimport useWebSocketContext from './useWebSocketContext';\nimport WebSocketNotificationSnackbar from './WebSocketNotificationSnackbar';\n\n\n\n\nconst useStyles = makeStyles((theme) => ({\n success: {\n backgroundColor: theme.palette.success.main,\n color: theme.palette.success.contrastText,\n },\n error: {\n backgroundColor: theme.palette.error.dark,\n color: theme.palette.error.contrastText,\n },\n warning: {\n backgroundColor: theme.palette.error.light,\n color: theme.palette.error.contrastText,\n },\n}), { name: 'RaWebSocketNotification' });\n\n\nconst WebSocketNotification = (props) => {\n const { type, ...rest } = props;\n const classes = useStyles();\n const translate = useTranslate();\n const { status, connected, connecting, error } = useWebSocketContext();\n const [notification, setNotification] = useState(null);\n const webSocketSignature = JSON.stringify([status, connected, connecting, error])\n\n useEffect(() => {\n if (status === \"NONE\") return\n if (error) setNotification({ message: \"ra.notification.web_socket_error\", type: \"warning\", autoHideDuration: null })\n if (status === \"RECONNECTING\" && connecting) setNotification({ message: \"ra.notification.web_socket_reconecting\", type: \"warning\", autoHideDuration: null })\n if (status === \"RECONNECTED\" && connected) setNotification({ message: \"ra.notification.web_socket_reconected\", autoHideDuration: 4000 })\n\n //console.log(`[WebSocketNotification] status = ${status}`);\n\n return () => {\n setNotification(null)\n };\n }, [webSocketSignature])\n\n const handleClose = () => {\n setNotification(null);\n };\n\n if (!notification) return null;\n\n return (\n \n );\n}\n\n\nWebSocketNotification.propTypes = {\n type: PropTypes.string,\n};\n\nWebSocketNotification.defaultProps = {\n type: 'info',\n};\n\nexport default WebSocketNotification","import React, {\n Component,\n createElement,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport { connect } from 'react-redux';\nimport classnames from 'classnames';\nimport { withRouter } from 'react-router-dom';\nimport { withStyles, createStyles } from '@material-ui/core/styles';\nimport { ThemeProvider } from '@material-ui/styles';\nimport { ComponentPropType } from 'ra-core';\nimport compose from 'lodash/flowRight';\nimport WebSocketNotification from \"../../controller/webSocket/WebSocketNotification\";\n\n\nimport {\n AppBar as DefaultAppBar,\n Sidebar as DefaultSidebar,\n Menu as DefaultMenu,\n Notification as DefaultNotification,\n Error as DefaultError,\n createMuiTheme,\n defaultTheme,\n SkipNavigationButton,\n} from 'react-admin';\n\n\nconst styles = theme =>\n createStyles({\n root: {\n display: 'flex',\n flexDirection: 'column',\n zIndex: 1,\n minHeight: '100vh',\n backgroundColor: theme.palette.background.default,\n position: 'relative',\n minWidth: 'fit-content',\n width: '100%',\n color: theme.palette.getContrastText(\n theme.palette.background.default\n ),\n },\n appFrame: {\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n [theme.breakpoints.up('xs')]: {\n marginTop: theme.spacing(6),\n },\n [theme.breakpoints.down('xs')]: {\n marginTop: theme.spacing(7),\n },\n },\n contentWithSidebar: {\n display: 'flex',\n flexGrow: 1,\n },\n content: {\n backgroundColor: theme.palette.background.default,\n zIndex: 2,\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n flexBasis: 0,\n padding: theme.spacing(3),\n paddingTop: theme.spacing(1),\n paddingLeft: 0,\n [theme.breakpoints.up('xs')]: {\n paddingLeft: 5,\n },\n [theme.breakpoints.down('sm')]: {\n padding: 0,\n },\n },\n });\n\nclass LayoutWithoutTheme extends Component {\n state = { hasError: false, error: null, errorInfo: null };\n\n constructor(props) {\n super(props);\n props.history.listen(() => {\n if (this.state.hasError) {\n this.setState({ hasError: false });\n }\n });\n }\n\n componentDidCatch(error, errorInfo) {\n this.setState({ hasError: true, error, errorInfo });\n }\n\n render() {\n const {\n appBar,\n children,\n classes,\n className,\n error: ErrorComponent,\n dashboard,\n logout,\n menu,\n notification,\n open,\n sidebar,\n title,\n // sanitize react-router props\n match,\n location,\n history,\n staticContext,\n ...props\n } = this.props;\n const { hasError, error, errorInfo } = this.state;\n return (\n <>\n \n \n
\n {createElement(appBar, { title, open, logout })}\n
\n {createElement(sidebar, {\n children: createElement(menu, {\n logout,\n hasDashboard: !!dashboard,\n }),\n })}\n
\n {hasError ? (\n \n ) : (\n children\n )}\n
\n
\n
\n \n \n {createElement(notification)}\n \n );\n }\n\n static propTypes = {\n appBar: ComponentPropType,\n children: PropTypes.oneOfType([PropTypes.func, PropTypes.node]),\n classes: PropTypes.object,\n className: PropTypes.string,\n dashboard: ComponentPropType,\n error: ComponentPropType,\n history: PropTypes.object.isRequired,\n logout: PropTypes.element,\n menu: ComponentPropType,\n notification: ComponentPropType,\n open: PropTypes.bool,\n sidebar: ComponentPropType,\n title: PropTypes.node.isRequired,\n };\n\n static defaultProps = {\n appBar: DefaultAppBar,\n error: DefaultError,\n menu: DefaultMenu,\n notification: DefaultNotification,\n sidebar: DefaultSidebar,\n };\n}\n\nconst mapStateToProps = state => ({\n open: state.admin.ui.sidebarOpen,\n});\n\nconst EnhancedLayout = compose(\n connect(\n mapStateToProps,\n {} // Avoid connect passing dispatch in props\n ),\n withRouter,\n withStyles(styles, { name: 'RaLayout' })\n)(LayoutWithoutTheme);\n\nconst Layout = ({\n theme: themeOverride,\n ...props\n}) => {\n const themeProp = useRef(themeOverride);\n const [theme, setTheme] = useState(() => createMuiTheme(themeOverride));\n\n useEffect(() => {\n if (themeProp.current !== themeOverride) {\n themeProp.current = themeOverride;\n setTheme(createMuiTheme(themeOverride));\n }\n }, [themeOverride, themeProp, theme, setTheme]);\n\n return (\n \n \n \n );\n};\n\nLayout.propTypes = {\n theme: PropTypes.object,\n};\n\nLayout.defaultProps = {\n theme: defaultTheme,\n};\n\nexport default Layout;\n","import React from 'react';\nimport get from 'lodash/get';\nimport { useParams } from 'react-router-dom';\nimport BreadcrumbItem from './BreadcrumbItem';\n\n\nconst RecordBreadcrumbItem = ({ source = \"name\", basePath, record }) => {\n const label = get(record, source)\n const id = get(record, \"id\")\n\n return (\n \n {label ? label : '...'}\n \n )\n};\n\nexport default RecordBreadcrumbItem\n","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useShowContext } from 'react-admin';\nimport DashboardBreadcrumbItem from './DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from './ListBreadcrumbItem';\nimport RecordBreadcrumbItem from './RecordBreadcrumbItem';\n\n\n\n\n\nconst ShowBreadcrumbs = (props) => {\n const contextProps = useShowContext();\n\n return (\n \n \n \n \n \n );\n};\n\nexport default ShowBreadcrumbs\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { alpha } from '@material-ui/core/styles/colorManipulator';\nimport RestoreIcon from '@material-ui/icons/RestoreFromTrash';\nimport classnames from 'classnames';\nimport { useMutation, useResourceContext, useRefresh, useNotify, useRedirect, Button } from 'react-admin';\n\n\nconst RestoreButton = props => {\n const {\n label = 'ra.action.restore',\n classes: classesOverride,\n className,\n icon = defaultIcon,\n onClick,\n record,\n basePath,\n redirect: redirectTo = 'list',\n onSuccess,\n onFailure,\n ...rest\n } = props;\n const classes = useStyles(props);\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const resource = useResourceContext(props);\n const [handleRestore, { loading }] = useMutation(\n {\n type: 'restore',\n resource,\n payload: { id: record.id, previousData: record }\n },\n {\n mutationMode: 'undoable',\n onSuccess: onSuccess !== undefined\n ? onSuccess\n : () => {\n notify('ra.notification.restored', 'info', { smart_count: 1 }, true);\n redirect(redirectTo, basePath);\n refresh();\n },\n onFailure: onFailure !== undefined\n ? onFailure\n : error => {\n notify(\n typeof error === 'string'\n ? error\n : error.message || 'ra.notification.http_error',\n 'warning',\n {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n }\n );\n refresh();\n },\n });\n\n return (\n \n {icon}\n \n );\n};\n\nconst useStyles = makeStyles(\n theme => ({\n restoreButton: {\n },\n }),\n { name: 'RaRestoreButton' }\n);\n\n\n\nconst defaultIcon = ;\n\n\n\nRestoreButton.propTypes = {\n basePath: PropTypes.string,\n classes: PropTypes.object,\n className: PropTypes.string,\n label: PropTypes.string,\n record: PropTypes.any,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n resource: PropTypes.string,\n icon: PropTypes.element,\n};\n\nexport default RestoreButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useShowContext, TopToolbar, DeleteButton } from 'react-admin';\nimport RestoreButton from '../button/RestoreButton';\n\n\nconst sanitizeRestProps = ({\n basePath,\n className,\n hasEdit,\n hasList,\n resource,\n ...rest\n}) => rest;\n\nconst ShowRemovedActions = ({ className, permissions, ...rest }) => {\n const { basePath, record, resource } = useShowContext(rest);\n return (\n \n {permissions.can('restore', resource) && }\n {permissions.can('delete', resource) && }\n \n );\n};\n\nShowRemovedActions.propTypes = {\n basePath: PropTypes.string,\n className: PropTypes.string,\n data: PropTypes.object,\n hasCreate: PropTypes.bool,\n hasEdit: PropTypes.bool,\n hasShow: PropTypes.bool,\n hasList: PropTypes.bool,\n resource: PropTypes.string,\n};\n\n\nexport default ShowRemovedActions","import React, { cloneElement, Children, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport {\n useResourceDefinition,\n useShowContext,\n} from 'ra-core';\n\nimport { ShowActions as DefaultShowActions, TitleForRecord } from 'react-admin';\nimport DefaultShowBreadcrumbs from '../breadcrumbs/ShowBreadcrumbs';\nimport ShowRemovedActions from './ShowRemovedActions';\n\n\nexport const ShowView = (props) => {\n const {\n actions,\n aside,\n breadcrumbs,\n children,\n classes: classesOverride,\n className,\n component: Content,\n title,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n\n const { basePath, defaultTitle, record, resource, version } = useShowContext(props);\n const { hasEdit, hasList } = useResourceDefinition(props);\n const deleted = record?.deleted\n\n if (!record) return null;\n if (!children) return null;\n\n const finalActions = deleted ? (\n \n ) :\n typeof actions === 'undefined' && hasEdit ? (\n \n ) : (\n actions\n );\n\n return (\n \n \n {breadcrumbs}\n {finalActions &&\n cloneElement(finalActions, {\n basePath,\n data: record,\n hasList,\n hasEdit,\n resource,\n // Ensure we don't override any user provided props\n ...finalActions.props,\n })}\n
\n
\n {record && Children.map(children, (field, index) => (\n cloneElement(field, {\n key: index,\n resource,\n basePath,\n record,\n version,\n })\n ))}\n
\n {aside &&\n
\n {cloneElement(aside, {\n resource,\n basePath,\n record,\n version,\n })}\n
\n }\n
\n\n \n );\n};\n\nShowView.propTypes = {\n actions: PropTypes.element,\n breadcrumbs: PropTypes.element,\n aside: PropTypes.element,\n basePath: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n defaultTitle: PropTypes.any,\n hasEdit: PropTypes.bool,\n hasList: PropTypes.bool,\n loading: PropTypes.bool,\n loaded: PropTypes.bool,\n record: PropTypes.object,\n resource: PropTypes.string,\n title: PropTypes.any,\n version: PropTypes.node,\n};\n\nShowView.defaultProps = {\n classes: {},\n component: \"div\",\n actions: ,\n breadcrumbs: ,\n};\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n },\n deleted: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n content: {\n display: 'flex',\n flexWrap: \"wrap\",\n },\n main: {\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1\n },\n noActions: {\n marginTop: '1em',\n },\n aside: {\n marginLeft: 16,\n [theme.breakpoints.down('xs')]: {\n marginLeft: 0\n },\n }\n}), { name: 'RaShow' });\n\nconst sanitizeRestProps = ({\n basePath = null,\n defaultTitle = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n history = null,\n id = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n options = null,\n refetch = null,\n permissions = null,\n ...rest\n}) => rest;\n","import { useTranslate } from 'react-admin';\nimport { get } from 'lodash';\n\n\n\nconst TitleForRecord = ({ resource, source, record, ...props }) => {\n const translate = useTranslate();\n\n if (!record) return null;\n\n const resourceText = translate(`resources.${resource}.name`, { smart_count: 1 });\n const sourceText = get(record, source);\n\n return `${resourceText} ${sourceText}`;\n};\n\n\n\nexport default TitleForRecord;","import React, { cloneElement, Children } from 'react';\nimport Card from '@material-ui/core/Card';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate } from 'react-admin';\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(),\n '&:first-child': {\n marginTop: 0,\n },\n },\n content: {}\n}));\n\nconst BlankShowLayout = ({\n children,\n classes: classesOverride,\n className,\n label,\n component: Content,\n ...props\n}) => {\n\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate();\n return (\n
\n {label && {translate(label, { _: label })}}\n \n {cloneElement(Children.only(children), {\n ...props,\n ...children.props\n })}\n \n
\n\n );\n};\n\nBlankShowLayout.defaultProps = {\n component: \"div\",\n};\n\n\nexport default BlankShowLayout;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport makeStyles from '@material-ui/core/styles/makeStyles';\n\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'flex-start',\n paddingBottom: theme.spacing(1),\n minHeight: \"unset\",\n [theme.breakpoints.up('xs')]: {\n paddingLeft: 0,\n paddingRight: 0,\n },\n [theme.breakpoints.down('sm')]: {\n paddingRight: theme.spacing(2),\n },\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(1),\n backgroundColor: theme.palette.background.paper,\n },\n },\n actions: {\n paddingTop: theme.spacing(3),\n minHeight: theme.spacing(5),\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(1),\n backgroundColor: theme.palette.background.paper,\n },\n },\n }),\n { name: 'RaListFieldToolbar' }\n);\n\nconst ListToolbar = props => {\n const { classes: classesOverride, filters, actions, ...rest } = props;\n const classes = useStyles(props);\n return (\n \n {filters &&\n React.cloneElement(filters, {\n ...rest,\n context: 'form',\n })}\n \n {actions &&\n React.cloneElement(actions, {\n ...rest,\n className: classes.actions,\n filters,\n ...actions.props,\n })}\n \n );\n};\n\nListToolbar.propTypes = {\n classes: PropTypes.object,\n filters: PropTypes.element,\n // @ts-ignore\n actions: PropTypes.oneOfType([PropTypes.bool, PropTypes.element]),\n // @ts-ignore\n exporter: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n};\n\nexport default React.memo(ListToolbar);\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { stringify } from 'query-string';\nimport Button from '@material-ui/core/Button';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useListContext } from 'react-admin';\n\n\nconst useStyles = makeStyles(theme => ({\n button: {\n color: theme.palette.text.secondary,\n },\n}));\n\nexport const ReferenceListLinkButton = ({ className, target, reference, record, ...props }) => {\n\n const classes = useStyles();\n const { basePath, filter, filterValues, ...fgsdf } = useListContext();\n\n return (\n \n Открыть список\n \n );\n};\n\n\nexport default ReferenceListLinkButton;","import React, { cloneElement, useMemo } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n sanitizeListRestProps,\n Identifier,\n SortPayload,\n Exporter,\n useListContext,\n useResourceContext,\n useResourceDefinition,\n TopToolbar,\n} from 'react-admin';\nimport ReferenceListLinkButton from '../button/ReferenceListLinkButton';\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n paddingTop: 0,\n paddingBottom: 0,\n minHeight: 0,\n },\n}));\n\nconst ListFieldActions = props => {\n const { className, exporter, filters, ...rest } = props;\n const classes = useStyles();\n const {\n currentSort,\n displayedFilters,\n filterValues,\n basePath,\n selectedIds,\n showFilter,\n total,\n } = useListContext(props);\n const resource = useResourceContext(rest);\n\n return useMemo(\n () => (\n \n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })}\n\n \n \n ),\n [resource, displayedFilters, filterValues, selectedIds, filters, total] // eslint-disable-line react-hooks/exhaustive-deps\n );\n};\n\n\n\nListFieldActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\nexport default ListFieldActions;\n","import React, { cloneElement, Children } from 'react';\nimport { ListBase, ListToolbar, Pagination, ResourceContextProvider } from 'react-admin';\nimport Paper from '@material-ui/core/Paper';\nimport ListFieldToolbar from './ListFieldToolbar';\nimport DefaultListFieldActions from './ListFieldActions';\n\n\n\nconst ListField = ({\n children,\n actions,\n filters,\n component: Content,\n resource,\n ...props\n}) => {\n\n\n return (\n \n \n {(filters || actions) && (\n \n )}\n \n {cloneElement(Children.only(children), {\n ...sanitizeRestProps(props),\n })}\n \n \n \n \n\n\n\n\n );\n};\n\nListField.defaultProps = {\n actions: ,\n // classes: {},\n component: Paper,\n // bulkActionButtons: ,\n // pagination: ,\n // empty: ,\n addLabel: true,\n};\n\n\nconst sanitizeRestProps = (props) => ({\n basePath = null,\n currentSort = null,\n data = null,\n defaultTitle = null,\n displayedFilters = null,\n filterDefaultValues = null,\n filterValues = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n hideFilter = null,\n history = null,\n ids = null,\n loading = null,\n loaded = null,\n location = null,\n match = null,\n onSelect = null,\n onToggleItem = null,\n onUnselectItems = null,\n options = null,\n page = null,\n permissions = null,\n perPage = null,\n resource = null,\n selectedIds = null,\n setFilters = null,\n setPage = null,\n setPerPage = null,\n setSort = null,\n showFilter = null,\n syncWithLocation = null,\n sort = null,\n total = null,\n ...rest\n}) => rest;\n\nexport default ListField;","import React from 'react';\nimport Avatar from '@material-ui/core/Avatar';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { getSeverityKey } from './severity';\nimport EventSeverityIcon from './EventSeverityIcon';\n\n\nconst useStyles = makeStyles(theme => ({\n avatar: (props) => {\n const severityThemeKey = getSeverityKey(props?.record?.severity)\n if (!severityThemeKey) return;\n return {\n backgroundColor: (theme.palette.type === 'light') ? theme.palette[severityThemeKey].light : theme.palette[severityThemeKey].dark\n }\n },\n}), { name: 'EventSeverityAvater' });\n\nconst EventSeverityAvatar = (props) => {\n const classes = useStyles(props);\n\n return (\n \n \n \n\n );\n};\n\nexport default EventSeverityAvatar;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport { Link } from 'react-router-dom';\nimport { stringify } from 'query-string';\nimport { useTranslate } from 'react-admin';\n\nconst LinkRef = React.forwardRef((props, ref) => );\n\nconst DefaultDashboardPlayIconButton = React.forwardRef(({\n className,\n basePath = '',\n label = 'ra.action.play',\n record,\n target = \"_self\",\n cellClassName,\n ...rest\n}, ref) => {\n const translate = useTranslate();\n const defaultDashboard = record?.defaultDashboard\n const disabled = Boolean(!defaultDashboard)\n const to = defaultDashboard ? {\n pathname: `/Dashboard/${defaultDashboard.id}/play`,\n search: `?${stringify({\n variables: JSON.stringify({ assetId: record.id }),\n })}`,\n } : \"\"\n\n return (\n \n \n \n \n \n \n \n )\n});\n\nconst stopPropagation = e => e.stopPropagation();\n\nDefaultDashboardPlayIconButton.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n};\n\nexport default DefaultDashboardPlayIconButton;\n","import React from \"react\";\nimport {\n useReference,\n UseReferenceProps,\n getResourceLinkPath,\n LinkToType,\n ResourceContextProvider,\n RecordContextProvider,\n Record,\n useRecordContext,\n ReduxState,\n} from 'ra-core';\nimport { TextField, Link } from 'react-admin';\nimport DefaultDashboardPlayIconButton from '../../lib/button/DefaultDashboardPlayIconButton';\n\nconst stopPropagation = e => e.stopPropagation();\n\n\nconst AssetRepresentationField = (props) => {\n const { className, link, resource, record } = props\n const resourceLinkPath = getResourceLinkPath({\n resource,\n reference: resource,\n record,\n source: \"id\",\n link,\n });\n\n return (\n \n \n \n \n \n \n );\n}\n\nexport default AssetRepresentationField;\n","import React from 'react';\nimport Card from '@material-ui/core/Card';\nimport Typography from '@material-ui/core/Typography'\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\nimport DescriptionIcon from '@material-ui/icons/Description';\nimport CommentIcon from '@material-ui/icons/Comment';\nimport { makeStyles } from '@material-ui/core/styles';\nimport EventSeverityAvatar from \"./EventSeverityAvatar\";\nimport { SimpleShowLayout, DateField, NumberField, ReferenceField, TextField } from 'react-admin';\nimport EventActiveField from './EventActiveField';\nimport EventAckField from './EventAckField';\nimport EnumField from '../../lib/field/EnumField';\nimport AssetRepresentationField from '../Asset/AssetRepresentationField';\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(),\n '&:first-child': {\n marginTop: 0,\n },\n },\n inlineLayout: {\n display: \"flex\",\n flexWrap: \"wrap\",\n },\n inlineField: {\n marginRight: theme.spacing(3),\n '&:last-child': {\n marginRight: 0,\n },\n }\n}));\n\nconst EventBanner = ({ classes: classesOverride, className, ...props }) => {\n const classes = useStyles({ classes: classesOverride });\n const { record } = props;\n\n if (!record) { return null }\n const title = record.message.title\n const body = record.message.body\n const comment = record.comment\n\n return (\n \n }\n title={{title}}\n // action={\n // \n // }\n />\n \n {body}\n {/* {comment && {comment} \n \n } */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\n\n\nexport default EventBanner;","import React from \"react\";\nimport Typography from '@material-ui/core/Typography';\nimport HeadsetMicIcon from '@material-ui/icons/HeadsetMic';\nimport Box from '@material-ui/core/Box';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardActions from '@material-ui/core/CardActions';\nimport CardContent from '@material-ui/core/CardContent';\n\n\n\nconst useStyles = makeStyles({\n root: {\n // minWidth: 275,\n },\n bullet: {\n display: 'inline-block',\n margin: '0 2px',\n transform: 'scale(0.8)',\n },\n title: {\n fontSize: 14,\n },\n pos: {\n marginBottom: 12,\n },\n});\n\nconst Assistant = () => {\n const classes = useStyles();\n\n return (\n \n \n \n Аксистент\n \n \n Это ваш ассистент. Как только у него появится дельный совет, он поделится им с Вами\n \n \n )\n\n};\n\nexport default Assistant","import React from \"react\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport CardContent from '@material-ui/core/CardContent';\nimport EventAssistant from './EventAssistant';\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n width: theme.spacing(45)\n },\n}));\n\nconst EventAside = (props) => {\n const classes = useStyles();\n\n return (\n
\n \n \n \n
\n )\n}\n\nexport default EventAside;","import React from \"react\";\nimport { ShowContextProvider, ResourceContextProvider, useShowController, TopToolbar } from 'react-admin';\nimport { ShowView } from '../../lib/show/ShowView';\nimport TitleForRecord from '../../lib/layout/TitleForRecord';\nimport BlankShowLayout from '../../lib/show/BlankShowLayout';\nimport ListField from '../../lib/field/ListField';\nimport AcknowledgeButton from '../../lib/button/AcknowledgeButton';\nimport EventBanner from './EventBanner';\nimport EventAside from './EventAside';\nimport { EventReferenceDatagrid } from './EventList';\nimport ShowBreadcrumbs from '../../lib/breadcrumbs/ShowBreadcrumbs';\nimport permissions from \"../../authProvider/abilityProvider\";\n\n\nconst EventShowBreadcrumbs = () => (\n \n);\n\nconst EventShowActions = ({ basePath, data, resource, redirect = 'list' }) => (\n \n {permissions.can('acknowledge', \"Event\") && }\n \n);\n\nconst EventShow = (props) => {\n const controllerProps = useShowController(props);\n const resource = controllerProps.record?.resource\n const tag = controllerProps.record?.tag\n\n return (\n \n \n }\n aside={}\n breadcrumbs={}\n title={}\n >\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default EventShow;","import EventIcon from '../../lib/icons/CalendarAlert';\nimport EventList from './EventList';\nimport EventShow from './EventShow';\n\n\nconst EventName = \"Event\"\n\nconst EventResource = {\n name: EventName,\n icon: EventIcon,\n list: EventList,\n show: EventShow,\n}\n\nexport default EventResource;\nexport {\n EventName,\n EventIcon,\n EventList,\n EventShow,\n};\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n \n \n \n );\n}\n\nexport default Icon;","\nimport { useCallback } from 'react';\nimport { Pagination } from 'react-admin';\n\nconst PaginationUnlimited = props => {\n \n const labelDisplayedRows = useCallback(({ from, to }) => `${from}-${to}`);\n \n return \n};\n\nexport default PaginationUnlimited;","import React from \"react\";\nimport { SelectInput, NumberInput, DateTimeInput, ReferenceInput, AutocompleteInput, ReferenceArrayInput, AutocompleteArrayInput } from 'react-admin';\nimport Filter from \"../../lib/list/filter/Filter\";\nimport EnumInput from '../../lib/input/EnumInput';\nimport BooleanInput from '../../lib/input/BooleanInput';\nimport ProfileReferenceInput from '../Profile/ProfileReferenceInput';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n\nconst severityChoices = [\n { id: 4, name: 'resources.Event.enums.severity.4' },\n { id: 3, name: 'resources.Event.enums.severity.3' },\n { id: 2, name: 'resources.Event.enums.severity.2' },\n { id: 1, name: 'resources.Event.enums.severity.1' },\n { id: 0, name: 'resources.Event.enums.severity.0' },\n]\n\nconst EventHistoryListFilter = (props) => {\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n};\n\n\nexport default EventHistoryListFilter;","import React from \"react\";\nimport BulkExportButton from '../../lib/button/BulkExportButton';\n\n\nconst EventBulkActionButtons = props => {\n return (\n <>\n \n \n )\n};\n\n\n\nexport default EventBulkActionButtons;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n \n \n \n );\n}\n\nexport default Icon;","import { useEffect, useRef } from \"react\";\nimport useIsomorphicLayoutEffect from \"./useIsomorphicLayoutEffect\";\n\nfunction useInterval(callback, delay, enable) {\n const savedCallback = useRef(callback);\n\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (!enable) return;\n callback();\n }, [enable]);\n\n useEffect(() => {\n if (!enable) return;\n\n const id = setInterval(() => savedCallback.current(), delay);\n\n return () => clearInterval(id);\n }, [delay, enable]);\n}\n\nexport default useInterval;\n","import useRemoteStorage from '../../controller/remoteStorage/useRemoteStorage';\n\nconst usePoolInterval = (resource, initialValue = 0) => useRemoteStorage(`${resource}.pool.interval`, initialValue)\n\nexport default usePoolInterval\n","import useRemoteStorage from '../../controller/remoteStorage/useRemoteStorage';\n\nconst usePoolSubscriptions = (resource, initialValue = ['eventbusService']) => useRemoteStorage(`${resource}.pool.subscriptions`, initialValue)\n\nexport default usePoolSubscriptions\n","import React, { useCallback, useState, useEffect } from 'react';\nimport keyBy from 'lodash/keyBy';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListSubheader from '@material-ui/core/ListSubheader';\nimport { Button, useTranslate, useResourceContext, useListContext } from 'react-admin';\nimport RefreshSettingsIcon from '../icons/RefreshSettings';\nimport useInterval from '../hook/useIntervalWithOnce';\nimport useEventContext from '../../controller/event/useEventContext';\nimport usePoolInterval from '../../controller/remoteStorage/usePoolInterval';\nimport usePoolSubscriptions from '../../controller/remoteStorage/usePoolSubscriptions';\n\nconst subscriptionTriggers = [\n { id: 'eventbusService', name: 'resources.AssetDatagrid.enums.subscriptionTrigger.eventbusService', value: 'eventbusService' },\n // { id: 'databusService', name: 'resources.AssetDatagrid.enums.subscriptionTrigger.databusService', value: 'databusService' },\n]\nconst subscriptionTriggersIdMap = keyBy(subscriptionTriggers, \"id\")\nconst subscriptionTriggersValueMap = keyBy(subscriptionTriggers, \"value\")\n\nconst poolIntervals = [\n { id: \"off\", name: 'resources.AssetDatagrid.enums.poolInterval.off', value: 0 },\n { id: '5s', name: 'resources.AssetDatagrid.enums.poolInterval.5s', value: 1000 * 5 },\n { id: '10s', name: 'resources.AssetDatagrid.enums.poolInterval.10s', value: 1000 * 10 },\n { id: '30s', name: 'resources.AssetDatagrid.enums.poolInterval.30s', value: 1000 * 30 },\n { id: '1m', name: 'resources.AssetDatagrid.enums.poolInterval.1m', value: 1000 * 60 },\n { id: '5m', name: 'resources.AssetDatagrid.enums.poolInterval.5m', value: 1000 * 60 * 5 },\n { id: '10m', name: 'resources.AssetDatagrid.enums.poolInterval.10m', value: 1000 * 60 * 10 },\n { id: '30m', name: 'resources.AssetDatagrid.enums.poolInterval.30m', value: 1000 * 60 * 30 },\n { id: '1h', name: 'resources.AssetDatagrid.enums.poolInterval.1h', value: 1000 * 60 * 60 },\n]\nconst poolIntervalsIdMap = keyBy(poolIntervals, \"id\")\nconst poolIntervalsValueMap = keyBy(poolIntervals, \"value\")\n\nconst arrayToggleItem = (array, value) => {\n const newArray = [...array]\n const index = newArray.indexOf(value)\n const isExist = !(index === -1)\n if (isExist) {\n newArray.splice(index, 1)\n } else {\n newArray.push(value)\n }\n return newArray\n}\n\nconst RefreshSettingsButton = (props) => {\n const [anchorEl, setAnchorEl] = useState(null)\n const translate = useTranslate()\n const resource = useResourceContext(props)\n const { refetch } = useListContext(props)\n const { version: eventbusServiceVersion } = useEventContext();\n const [poolInterval, setPoolInterval] = usePoolInterval(resource)\n const [poolSubscriptions, setPoolSubscriptions] = usePoolSubscriptions(resource)\n\n const handleTogglePoolSubscriptions = useCallback((id) => (event) => {\n setPoolSubscriptions(previous => arrayToggleItem(previous, id))\n }, [setPoolSubscriptions]);\n\n const handleSelectPoolInterval = useCallback((id) => (event) => {\n setPoolInterval(poolIntervalsIdMap[id].value)\n }, [setPoolInterval]);\n\n const handleOpen = useCallback((event) => {\n setAnchorEl(event.currentTarget);\n }, [setAnchorEl]);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, [setAnchorEl]);\n\n ///Обновляем список\n useEffect(() => {\n if (eventbusServiceVersion !== 0 && poolSubscriptions.includes(\"eventbusService\")) {\n refetch()\n }\n }, [refetch, eventbusServiceVersion, poolSubscriptions]);\n\n useInterval(() => {\n refetch()\n }, poolInterval, poolInterval !== 0);\n\n\n const labelArray = [...poolSubscriptions.map(poolSubscriptionId => translate(subscriptionTriggersIdMap[poolSubscriptionId].name, { smart_count: 2 }))]\n if (poolInterval !== 0) labelArray.push(translate(poolIntervalsValueMap[poolInterval].name, { smart_count: 2 }))\n const label = labelArray.length > 0 ? `Обновление ${labelArray.join(\", \")}` : `Обновление ручное`\n\n return (\n
\n \n \n \n \n {`Подписка`}\n {subscriptionTriggers.map(subscriptionTrigger => {\n return (\n {translate(subscriptionTrigger.name, { smart_count: 1 })}\n )\n })}\n {`Опрос`}\n {poolIntervals.map(poolIntervalItem => {\n return (\n {translate(poolIntervalItem.name, { smart_count: 1 })}\n )\n })}\n \n
\n );\n}\n\n\nexport default RefreshSettingsButton","import React, { cloneElement, useMemo } from \"react\";\nimport {\n sanitizeListRestProps,\n useListContext,\n useResourceContext,\n} from \"ra-core\";\nimport { TopToolbar } from \"react-admin\";\nimport RefreshSettingsButton from \"../../lib/button/RefreshSettingsButton\";\nimport ExportButton from \"../../lib/button/ExportButton\";\nimport ColumnsButton from \"../../lib/list/ColumnsButton\";\nimport PresetButton from \"../../lib/list/PresetButton\";\n\nconst EventHistoryActions = (props) => {\n const { className, filters, views, columns, model, ...rest } = props;\n const {\n exporter,\n currentSort,\n displayedFilters,\n filterValues,\n selectedIds,\n showFilter,\n total,\n } = useListContext(props);\n const resource = useResourceContext(rest);\n\n return useMemo(\n () => (\n \n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: \"button\",\n })}\n \n \n \n {exporter !== false && (\n \n )}\n \n ),\n [\n resource,\n displayedFilters,\n filterValues,\n selectedIds,\n filters,\n views,\n columns,\n total,\n ] // eslint-disable-line react-hooks/exhaustive-deps\n );\n};\n\nEventHistoryActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\nexport default EventHistoryActions;\n","import React, { useEffect } from \"react\";\nimport {\n useListController,\n ListContextProvider,\n TextField,\n DateField,\n NumberField,\n ReferenceField,\n} from \"react-admin\";\nimport ListView from \"../../lib/list/ListView\";\nimport EventListDatagrid from \"../Event/EventListDatagrid\";\nimport useColumns from \"../../lib/list/useColumns\";\nimport useDatagridColumns from \"../../lib/list/useDatagridColumns\";\nimport useListStyles from \"../../lib/list/useListStyles\";\nimport EventActiveField from \"../Event/EventActiveField\";\nimport EventAckField from \"../Event/EventAckField\";\nimport EventStateField from \"../Event/EventStateField\";\nimport EventSeverityField from \"../Event/EventSeverityField\";\nimport EnumField from \"../../lib/field/EnumField\";\nimport ResourceLinkField from \"../../lib/field/ResourceLinkField\";\nimport useExporter, {\n dateFormatter,\n booleanFormatter,\n enumFormatter,\n linkFormatter,\n} from \"../../lib/exporter\";\nimport useEventContext from \"../../controller/event/useEventContext\";\nimport NestedArrayField from \"../../lib/field/NestedArrayField\";\nimport LabelChip from \"../Label/LabelChip\";\nimport CustomReferenceField from \"../../lib/field/CustomReferenceField\";\nimport PaginationUnlimited from \"../../lib/list/PaginationUnlimited\";\nimport EventHistoryListFilter from \"./EventHistoryListFilter\";\nimport EventHistoryListBulkActionButtons from \"./EventHistoryListBulkActionButtons\";\nimport EventHistoryActions from \"./EventHistoryActions\";\n\nconst modelExport = [\n { key: \"id\", header: \"resources.EventHistory.fields.id\" },\n { key: \"severity\", header: \"resources.EventHistory.fields.severity\" },\n { key: \"priority\", header: \"resources.EventHistory.fields.priority\" },\n {\n key: \"active\",\n header: \"resources.EventHistory.fields.active\",\n format: booleanFormatter,\n },\n {\n key: \"ack\",\n header: \"resources.EventHistory.fields.ack\",\n format: booleanFormatter,\n },\n {\n key: \"ackRequired\",\n header: \"resources.EventHistory.fields.ackRequired\",\n format: booleanFormatter,\n },\n {\n key: \"type\",\n header: \"resources.EventHistory.fields.type\",\n format: enumFormatter(\"EventHistory\"),\n },\n {\n key: \"message.title\",\n header: \"resources.EventHistory.fields.message.title\",\n },\n { key: \"message.body\", header: \"resources.EventHistory.fields.message.body\" },\n {\n key: \"resource.id\",\n header: [\n \"resources.EventHistory.fields.resource\",\n \"resources.Asset.fields.id\",\n ],\n reference: { resource: \"Asset\", target: \"resource\" },\n },\n {\n key: \"resource.name\",\n header: [\n \"resources.EventHistory.fields.resource\",\n \"resources.Asset.fields.name\",\n ],\n reference: { resource: \"Asset\", target: \"resource\" },\n },\n {\n key: \"tag.id\",\n header: [\n \"resources.EventHistory.fields.tag\",\n \"resources.Parameter.fields.id\",\n ],\n reference: { resource: \"Parameter\", target: \"tag\" },\n },\n {\n key: \"tag.name\",\n header: [\n \"resources.EventHistory.fields.tag\",\n \"resources.Parameter.fields.name\",\n ],\n reference: { resource: \"Parameter\", target: \"tag\" },\n },\n { key: \"comment\", header: \"resources.EventHistory.fields.comment\" },\n {\n key: \"userId.id\",\n header: [\n \"resources.EventHistory.fields.profile\",\n \"resources.Profile.fields.id\",\n ],\n reference: { resource: \"Profile\", target: \"userId\" },\n },\n {\n key: \"userId.name\",\n header: [\n \"resources.EventHistory.fields.profile\",\n \"resources.Profile.fields.name\",\n ],\n reference: { resource: \"Profile\", target: \"userId\" },\n },\n {\n key: \"timestamp\",\n header: \"resources.EventHistory.fields.timestamp\",\n format: dateFormatter,\n },\n {\n key: \"timestampSrv\",\n header: \"resources.EventHistory.fields.timestampSrv\",\n format: dateFormatter,\n },\n {\n key: \"link\",\n header: \"Ccылка\",\n format: linkFormatter(\"EventHistory\", \"id\"),\n },\n];\n\nconst useEventListColumns = () => {\n const classes = useListStyles();\n\n const columns = useColumns([\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n \n \n \n \n ,\n \n \n ,\n \n \n ,\n ,\n ,\n \n \n ,\n ,\n ,\n ]);\n\n return columns;\n};\n\nconst EventList = (props) => {\n const exporter = useExporter(modelExport);\n const controllerProps = useListController({ exporter, ...props });\n const columns = useEventListColumns();\n const DatagridColumns = useDatagridColumns(columns);\n\n return (\n \n }\n bulkActionButtons={}\n filters={}\n pagination={}\n >\n {DatagridColumns}\n \n \n );\n};\n\nEventList.defaultProps = {\n sort: { field: \"timestampSrv\", order: \"DESC\" },\n};\n\nexport const EventReferenceDatagrid = (props) => {\n const columns = useEventListColumns();\n const DatagridColumns = useDatagridColumns(columns);\n return (\n \n {DatagridColumns}\n \n );\n};\n\nexport default EventList;\n","import React from \"react\";\nimport { ShowContextProvider, ResourceContextProvider, useShowController, TopToolbar } from 'react-admin';\nimport { ShowView } from '../../lib/show/ShowView';\nimport TitleForRecord from '../../lib/layout/TitleForRecord';\nimport BlankShowLayout from '../../lib/show/BlankShowLayout';\nimport ListField from '../../lib/field/ListField';\nimport AcknowledgeButton from '../../lib/button/AcknowledgeButton';\nimport EventBanner from '../Event/EventBanner';\nimport EventAside from '../Event/EventAside';\nimport { EventReferenceDatagrid } from '../Event/EventList';\nimport ShowBreadcrumbs from '../../lib/breadcrumbs/ShowBreadcrumbs';\nimport permissions from \"../../authProvider/abilityProvider\";\n\nconst EventShowBreadcrumbs = () => (\n \n);\n\nconst EventShowActions = ({ basePath, data, resource }) => (\n \n {permissions.can('acknowledge', \"Event\") && }\n \n);\n\nconst EventShow = (props) => {\n const controllerProps = useShowController(props);\n const resource = controllerProps.record?.resource\n const tag = controllerProps.record?.tag\n\n return (\n \n \n }\n aside={}\n breadcrumbs={}\n title={}\n >\n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default EventShow;","import EventHistoryIcon from '../../lib/icons/CalendarHistory';\nimport EventHistoryList from './EventHistoryList';\nimport EventHistoryShow from './EventHistoryShow';\n\n\nconst EventHistoryName = \"EventHistory\"\n\nconst EventHistoryResource = {\n name: EventHistoryName,\n icon: EventHistoryIcon,\n list: EventHistoryList,\n show: EventHistoryShow,\n}\n\nexport default EventHistoryResource;\nexport {\n EventHistoryName,\n EventHistoryIcon,\n EventHistoryList,\n EventHistoryShow,\n};\n","import React, {\n useEffect,\n useState,\n useCallback,\n useRef,\n forwardRef,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport isEqual from 'lodash/isEqual';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListSubheader from '@material-ui/core/ListSubheader';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ContentFilter from '@material-ui/icons/FilterList';\nimport classnames from 'classnames';\nimport lodashGet from 'lodash/get';\nimport { useHistory } from 'react-router-dom';\nimport { stringify } from 'query-string';\nimport {\n Button,\n FieldTitle,\n useTranslate,\n useListContext,\n} from 'react-admin';\n\n//import { useSavedQueries, AddSavedQueryDialog, RemoveSavedQueryDialog } from '@react-admin/ra-preferences';\nimport useSavedQueries from '../../../controller/remoteStorage/useSavedQueries';\nimport AddSavedQueryDialog from '../../list/AddSavedQueryDialog';\nimport RemoveSavedQueryDialog from '../../list/RemoveSavedQueryDialog';\n\nconst useStyles = makeStyles(theme => ({\n root: { display: 'inline-block' },\n menu: {\n backgroundColor: theme.palette.background.paper,\n },\n}), { name: 'RaFilterButton' });\n\nconst FilterButtonWithSave = (props) => {\n const { filters, className, ...rest } = props;\n const {\n filterValues,\n currentSort,\n perPage,\n displayedFilters = {},\n showFilter,\n resource,\n setFilters\n } = useListContext();\n const translate = useTranslate();\n const [open, setOpen] = useState(false);\n const anchorEl = useRef();\n const classes = useStyles(props);\n const [savedQueries] = useSavedQueries(resource);\n const history = useHistory();\n\n\n const hasFilterValues = !isEqual(filterValues, {});\n const hasSavedCurrentQuery = savedQueries.some(savedQuery =>\n isEqual(savedQuery.value, {\n filter: filterValues,\n sort: currentSort,\n perPage,\n displayedFilters,\n })\n );\n\n const hiddenFilters = filters.filter(\n (filterElement) =>\n !filterElement.props.alwaysOn &&\n !displayedFilters[filterElement.props.source] &&\n typeof lodashGet(filterValues, filterElement.props.source) ===\n 'undefined'\n );\n\n // menu state\n const handleClickButton = useCallback(\n event => {\n // This prevents ghost click.\n event.preventDefault();\n setOpen(true);\n anchorEl.current = event.currentTarget;\n },\n [anchorEl, setOpen]\n );\n const handleRequestClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n const handleShow = useCallback(\n ({ source, defaultValue }) => {\n showFilter(source, defaultValue);\n setOpen(false);\n },\n [showFilter, setOpen]\n );\n\n // add query dialog state\n const [addSavedQueryDialogOpen, setAddSavedQueryDialogOpen] = useState(\n false\n );\n const hideAddSavedQueryDialog = () => {\n setAddSavedQueryDialogOpen(false);\n };\n const showAddSavedQueryDialog = () => {\n setOpen(false);\n setAddSavedQueryDialogOpen(true);\n };\n\n // remove query dialog state\n const [\n removeSavedQueryDialogOpen,\n setRemoveSavedQueryDialogOpen,\n ] = useState(false);\n const hideRemoveSavedQueryDialog = () => {\n setRemoveSavedQueryDialogOpen(false);\n };\n const showRemoveSavedQueryDialog = () => {\n setOpen(false);\n setRemoveSavedQueryDialogOpen(true);\n };\n\n return (\n
\n \n \n \n \n }}\n >\n {translate('ra-preferences.saved_queries.label')}\n {savedQueries.map((savedQuery, index) =>\n isEqual(savedQuery.value, {\n filter: filterValues,\n sort: currentSort,\n perPage,\n displayedFilters,\n }) ? (\n \n {translate(\n 'ra-preferences.saved_queries.remove_label_with_name',\n {\n _: 'Remove query \"%{name}\"',\n name: savedQuery.label,\n }\n )}\n \n ) : (\n {\n history.push({\n search: stringify({\n filter: JSON.stringify(\n savedQuery.value.filter\n ),\n sort: savedQuery.value.sort.field,\n order: savedQuery.value.sort.order,\n page: 1,\n perPage: savedQuery.value.perPage,\n displayedFilters: JSON.stringify(\n savedQuery.value.displayedFilters\n ),\n }),\n });\n setOpen(false);\n // setSavedQueries([...savedQueries.map(q => ({ ...q, selected: q.label == savedQuery.label }))]);\n }}\n key={index}\n >\n {savedQuery.label}\n \n )\n )}\n {hasFilterValues && !hasSavedCurrentQuery ? (\n \n {translate('ra-preferences.saved_queries.new_label', {\n _: 'Save current query...',\n })}\n \n ) : null}\n {Boolean(hiddenFilters.length) && Фильтры}\n {hiddenFilters.map((filterElement) => (\n \n ))}\n \n \n \n
\n );\n};\n\nFilterButtonWithSave.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n filters: PropTypes.arrayOf(PropTypes.node).isRequired,\n};\n\n\n\n\n// FIXME: remove once react-admin exports FilterButtonMenuItem\n// eslint-disable-next-line react/display-name\nconst FilterButtonMenuItem = forwardRef(\n (props, ref) => {\n const { filter, onShow, resource } = props;\n const handleShow = useCallback(() => {\n onShow({\n source: filter.props.source,\n defaultValue: filter.props.defaultValue,\n });\n }, [filter.props.defaultValue, filter.props.source, onShow]);\n\n return (\n \n \n \n );\n }\n);\n\nFilterButtonMenuItem.propTypes = {\n filter: PropTypes.element.isRequired,\n onShow: PropTypes.func.isRequired,\n resource: PropTypes.string.isRequired,\n};\n\nexport default FilterButtonWithSave","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { sanitizeListRestProps, useListContext } from 'react-admin';\nimport FilterForm from './FilterForm';\nimport FilterButtonWithSave from './FilterButtonWithSave';\n\nconst useStyles = makeStyles(\n {\n button: {},\n form: {},\n },\n { name: 'RaFilter' }\n);\n\n\nexport const FilterWithSave = (props) => {\n\n const classes = useStyles(props);\n const {\n resource,\n hideFilter,\n setFilters,\n displayedFilters,\n filterValues,\n } = useListContext(props);\n\n const renderButton = () => {\n const {\n classes: classesOverride,\n context,\n children,\n variant,\n ...rest\n } = props;\n\n return (\n \n );\n };\n\n const renderForm = () => {\n const { classes: classesOverride, context, children, ...rest } = props;\n\n return (\n \n );\n };\n\n return props.context === 'button' ? renderButton() : renderForm();\n};\n\nFilterWithSave.propTypes = {\n children: PropTypes.node,\n classes: PropTypes.object,\n context: PropTypes.oneOf(['form', 'button']),\n};\n\nexport default FilterWithSave\n","import React, { Children, cloneElement } from 'react';\nimport Paper from '@material-ui/core/Paper';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n defaultExporter,\n useListContext,\n getListControllerProps,\n useVersion,\n} from 'ra-core';\nimport {\n Title,\n ListToolbar,\n Pagination as DefaultPagination,\n BulkDeleteButton,\n BulkActionsToolbar,\n ListActions as DefaultActions,\n Empty,\n} from 'react-admin';\nimport DefaultListBreadcrumbs from '../breadcrumbs/ListBreadcrumbs';\n\n\n\nexport const ChartView = (props) => {\n const {\n actions,\n breadcrumbs,\n filters,\n children,\n className,\n classes: classesOverride,\n component: Content,\n exporter = defaultExporter,\n title,\n empty,\n ...rest\n } = props;\n const controllerProps = getListControllerProps(props); // deprecated, to be removed in v4\n const listContext = useListContext(props);\n const classes = useStyles(props);\n const {\n defaultTitle,\n total,\n loaded,\n loading,\n filterValues,\n selectedIds,\n } = listContext;\n const version = useVersion();\n\n const shouldRenderEmptyPage =\n loaded && !loading && total === 0 /*&& !Object.keys(filterValues).length*/;\n\n return (\n \n \n {breadcrumbs}\n {(filters || actions) && (\n <ListToolbar\n filters={filters}\n {...controllerProps} // deprecated, use ListContext instead, to be removed in v4\n actions={actions}\n exporter={exporter} // deprecated, use ListContext instead, to be removed in v4\n />\n )}\n <div className={classes.main}>\n {shouldRenderEmptyPage && empty !== false\n ? cloneElement(empty, listContext)\n : (<Content\n className={classnames(classes.content)}\n key={version}\n >\n {children &&\n // @ts-ignore-line\n cloneElement(Children.only(children), {\n ...controllerProps, // deprecated, use ListContext instead, to be removed in v4\n })}\n </Content>)}\n\n </div>\n </div>\n );\n};\n\n\nChartView.defaultProps = {\n actions: <DefaultActions />,\n breadcrumbs: <DefaultListBreadcrumbs />,\n classes: {},\n component: Paper,\n empty: <Empty />,\n};\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1,\n },\n main: {\n display: 'flex',\n flexGrow: 1,\n justifyContent: \"center\",\n },\n content: {\n marginTop: 0,\n transition: theme.transitions.create('margin-top'),\n position: 'relative',\n flex: '1 1 auto',\n [theme.breakpoints.down('xs')]: {\n boxShadow: 'none',\n },\n overflow: 'inherit',\n },\n bulkActionsDisplayed: {\n marginTop: -theme.spacing(8),\n transition: theme.transitions.create('margin-top'),\n },\n actions: {\n zIndex: 2,\n display: 'flex',\n justifyContent: 'flex-end',\n flexWrap: 'wrap',\n },\n noResults: { padding: 20 },\n }),\n { name: 'RaChart' }\n);\n\n\n\nconst sanitizeRestProps = ({\n basePath = null,\n currentSort = null,\n data = null,\n defaultTitle = null,\n displayedFilters = null,\n filterDefaultValues = null,\n filterValues = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n hideFilter = null,\n history = null,\n ids = null,\n loading = null,\n loaded = null,\n location = null,\n match = null,\n onSelect = null,\n onToggleItem = null,\n onUnselectItems = null,\n options = null,\n page = null,\n permissions = null,\n perPage = null,\n refetch = null,\n resource = null,\n selectedIds = null,\n setFilters = null,\n setPage = null,\n setPerPage = null,\n setSort = null,\n showFilter = null,\n syncWithLocation = null,\n sort = null,\n total = null,\n ...rest\n}) => rest;\n\nexport default ChartView;\n","import React from 'react';\nimport {\n useCheckMinimumRequiredProps,\n useListController,\n ListContextProvider,\n} from 'ra-core';\nimport ChartView from './ChartView';\n\nconst Chart = (props) => {\n useCheckMinimumRequiredProps('List', ['children'], props);\n const controllerProps = useListController(props);\n return (\n <ListContextProvider value={controllerProps}>\n <ChartView {...props} {...controllerProps} />\n </ListContextProvider>\n );\n};\n\nChart.defaultProps = {\n filter: {},\n perPage: 10,\n};\n\nexport default Chart;\n","\nvar falsy = /^(?:f(?:alse)?|no?|0+)$/i;\n\nexport default (modelValue) => {\n \n const { type, value } = modelValue; \n switch (type) {\n case 'BOOLEAN': {\n if(typeof value === 'boolean') {\n return value === true ? 1 : 0;\n } else {\n return !falsy.test(value.toString()) ? 1 : 0;\n } \n }\n case 'STRING': {\n return parseFloat(value)\n }\n case 'FLOAT':\n case 'DOUBLE':\n case 'BYTE':\n case 'INT':\n case 'INT32':\n case 'INT64':\n case 'UINT':\n case 'UINT32':\n case 'UINT64':\n case 'BIGINT': {\n return Number(value);\n } \n default:\n return parseFloat(value.toString());\n }\n}","import React, { useMemo, useEffect } from \"react\";\nimport get from \"lodash/get\";\nimport { DateTime } from \"luxon\";\nimport Highcharts from \"highcharts\";\nimport { useSelector } from \"react-redux\";\nimport { makeStyles, alpha } from \"@material-ui/core/styles\";\nimport { useTheme } from \"@material-ui/core/styles\";\nimport { useListContext } from \"react-admin\";\nimport convertValue from \"./convertValue\";\nimport { chartOptions } from \"./highchartsOptions\";\nimport Loading from \"../../lib/layout/Loading\";\nimport { orderBy } from \"lodash\";\nimport { buildTagFromId, buildIdFromTag } from \"../../dataProvider/DatabusService/Tag/utils\";\nimport { red, pink, purple, deepPurple, deepOrange, indigo, blue, teal, green, amber, orange, grey } from '@material-ui/core/colors';\n\nHighcharts.setOptions(chartOptions);\n\nconst useStyles = makeStyles((theme) => ({\n loading: {\n width: \"100%\",\n },\n headerActionButton: {\n margin: 5,\n },\n switchButton: {\n marginRight: theme.spacing(2),\n },\n chartContent: {\n margin: 16,\n height: \"100%\",\n },\n}));\n\nconst setpoint_role_color = {\n HIHI_SET: deepOrange[400],\n HI_SET: deepOrange[200], \n LO_SET: red[200], \n LOLO_SET: red[400],\n MIN: red[600],\n MAX: deepOrange[700]\n}\n\nconst ChartView = ({ classes: classesOverride, ...props }) => {\n const theme = useTheme();\n const themeType = theme.palette.type;\n const classes = useStyles({ classes: classesOverride });\n const tagsSelector = useSelector((state) => {\n return get(state, `admin.resources.TagByNode.data`)\n });\n const { data = {}, loading, filterValues = {} } = useListContext(props);\n const { tagsIds, mode = \"default\" } = filterValues;\n \n \n /*\n const options = useMemo(() => {\n \n\n\n const tags = (tagsIds || []).map(buildTagFromId);\n const groups = Object.values(data);\n\n const enable = Boolean(tags.length > 0 && groups.length > 0);\n if (!enable) return undefined;\n\n\n\n const listTagHistory = groups.map(({ data = [] }, index) => {\n return data.map((item) => {\n const tag = tagsSelector[buildIdFromTag(item.tag)]; \n return {\n ...item,\n xAxis: index,\n name: tag ? `${tag.parameter.name} - ${tag.asset.name}` : \"none\",\n };\n });\n }).flat();\n\n const multiY = mode !== \"default\";\n\n const plotLines = groups.map(({ setpoints = [] }) => {\n return setpoints.map(sp => {\n const tag = tagsSelector[buildIdFromTag(sp.tag)];\n const color = setpoint_role_color[tag && tag.parameter.role] || deepOrange[400];\n return {\n value: sp.value,\n color,\n dashStyle: 'shortdash',\n width: 2,\n label: {\n text: tag ? `[${sp.value}] ${tag.parameter.name} - ${tag.asset.name}` : \"none\",\n style: {\n color,\n },\n }\n } \n }).filter(Boolean)\n }).flat();\n\n const axisTheme = {\n gridLineColor: theme.palette.divider,\n minorGridLineColor: theme.palette.divider,\n labels: {\n style: {\n color: theme.palette.text.primary,\n },\n },\n lineColor: theme.palette.divider,\n tickColor: theme.palette.divider,\n title: { text: null }\n };\n\n const yAxis = multiY\n ? listTagHistory.map((item, index) => {\n const seriesColor = theme.palette.chartOptions.colors[index];\n\n const options = {\n\n title: {\n text: item.name,\n style: {\n color: seriesColor,\n },\n },\n labels: {\n style: {\n color: seriesColor,\n },\n },\n visible: true,\n id: index,\n };\n\n const сombinedOptions = (mode === \"сombined\") ? {\n opposite: index > 0,\n } : {}\n\n const splitOptions = (mode === \"split\") ? {\n height: `${100 / listTagHistory.length - 4}%`,\n top: `${100 / listTagHistory.length * index}%`,\n offset: 0,\n margin: 160,\n } : {}\n\n return { \n ...axisTheme,\n ...options,\n ...сombinedOptions,\n ...splitOptions,\n plotLines\n };\n })\n : {\n ...axisTheme,\n plotLines\n };\n\n const xAxis = groups.map((group, index) => {\n const options = {\n visible: true,\n opposite: false,\n id: index,\n gridLineWidth: 1,\n type: \"datetime\",\n maxZoom: 86400,\n };\n\n const multiYOptions = (multiY) ? {\n min: DateTime.fromISO(group.period.timestamp_gte).valueOf(),\n max: DateTime.fromISO(group.period.timestamp_lte).valueOf(),\n } : {}\n\n\n return {\n ...axisTheme,\n ...options,\n ...multiYOptions\n };\n });\n\n const series = listTagHistory.map((item, index) => {\n const { data, name, tag, xAxis } = item\n\n const highchartsData = data.reduce((acc, { value, timestamp, type }) => {\n const isValue = !(value == null)\n return isValue ? [...acc, [DateTime.fromISO(timestamp).valueOf(), convertValue({ value, type })]] : acc\n }, [])\n\n const orderedHighchartsData = orderBy(highchartsData, \"0\", \"asc\")\n\n const options = {\n name,\n data: orderedHighchartsData,\n };\n\n const multiYOptions = (multiY) ? {\n color: theme.palette.chartOptions.colors[index],\n yAxis: index,\n xAxis: xAxis,\n } : {}\n\n return {\n ...options,\n ...multiYOptions\n };\n });\n\n console.log(series);\n\n return {\n chart: {\n backgroundColor: theme.palette.background.paper,\n style: {\n fontFamily: theme.typography.fontFamily,\n },\n reflow: true,\n zoomType: \"x\",\n height: 690,\n },\n colors: theme.palette.chartOptions.colors,\n tooltip: {\n backgroundColor: theme.palette.background.paper,\n \n style: {\n color: theme.palette.text.primary,\n },\n },\n legend: {\n itemStyle: {\n color: alpha(theme.palette.text.primary, 0.8),\n fontWeight: \"inherit\",\n },\n itemHoverStyle: {\n color: theme.palette.text.primary,\n },\n itemHiddenStyle: {\n color: theme.palette.text.disabled,\n },\n },\n yAxis,\n xAxis: multiY ? xAxis : xAxis[0],\n series,\n };\n \n }, [tagsIds, data, mode, tagsSelector, theme]);\n */\n\n useEffect(() => {\n\n const tags = (tagsIds || []).map(buildTagFromId);\n const groups = Object.values(data);\n\n const enable = Boolean(tags.length > 0 && groups.length > 0);\n if (!enable) return undefined;\n\n\n\n const listTagHistory = groups.map(({ data = [] }, index) => {\n return data.map((item) => {\n const tag = tagsSelector[buildIdFromTag(item.tag)]; \n return {\n ...item,\n xAxis: index,\n name: tag ? `${tag.parameter.name} - ${tag.asset.name}` : \"none\",\n };\n });\n }).flat();\n\n const multiY = mode !== \"default\";\n\n const plotLines = groups.map(({ setpoints = [] }) => {\n return setpoints.map(sp => {\n const tag = tagsSelector[buildIdFromTag(sp.tag)];\n const color = setpoint_role_color[tag && tag.parameter.role] || deepOrange[400];\n return {\n value: sp.value,\n color,\n dashStyle: 'shortdash',\n width: 2,\n label: {\n text: tag ? `[${sp.value}] ${tag.parameter.name} - ${tag.asset.name}` : \"none\",\n style: {\n color,\n },\n }\n } \n }).filter(Boolean)\n }).flat();\n\n const axisTheme = {\n gridLineColor: theme.palette.divider,\n minorGridLineColor: theme.palette.divider,\n labels: {\n style: {\n color: theme.palette.text.primary,\n },\n },\n lineColor: theme.palette.divider,\n tickColor: theme.palette.divider,\n title: { text: null }\n };\n\n const yAxis = multiY\n ? listTagHistory.map((item, index) => {\n const seriesColor = theme.palette.chartOptions.colors[index];\n\n const options = {\n\n title: {\n text: item.name,\n style: {\n color: seriesColor,\n },\n },\n labels: {\n style: {\n color: seriesColor,\n },\n },\n visible: true,\n id: index,\n };\n\n const сombinedOptions = (mode === \"сombined\") ? {\n opposite: index > 0,\n } : {}\n\n const splitOptions = (mode === \"split\") ? {\n height: `${100 / listTagHistory.length - 4}%`,\n top: `${100 / listTagHistory.length * index}%`,\n offset: 0,\n margin: 160,\n } : {}\n\n return { \n ...axisTheme,\n ...options,\n ...сombinedOptions,\n ...splitOptions,\n plotLines\n };\n })\n : {\n ...axisTheme,\n plotLines\n };\n\n const xAxis = groups.map((group, index) => {\n const options = {\n visible: true,\n opposite: false,\n id: index,\n gridLineWidth: 1,\n type: \"datetime\",\n maxZoom: 86400,\n };\n\n const multiYOptions = (multiY) ? {\n min: DateTime.fromISO(group.period.timestamp_gte).valueOf(),\n max: DateTime.fromISO(group.period.timestamp_lte).valueOf(),\n } : {}\n\n\n return {\n ...axisTheme,\n ...options,\n ...multiYOptions\n };\n });\n\n const series = listTagHistory.map((item, index) => {\n const { data, name, tag, xAxis } = item\n\n const highchartsData = data.reduce((acc, { value, timestamp, type }) => {\n const isValue = !(value == null)\n return isValue ? [...acc, [DateTime.fromISO(timestamp).valueOf(), convertValue({ value, type })]] : acc\n }, [])\n\n const orderedHighchartsData = orderBy(highchartsData, \"0\", \"asc\")\n\n const options = {\n name,\n data: orderedHighchartsData,\n };\n\n const multiYOptions = (multiY) ? {\n color: theme.palette.chartOptions.colors[index],\n yAxis: index,\n xAxis: xAxis,\n } : {}\n\n return {\n ...options,\n ...multiYOptions\n };\n });\n\n //console.log(series);\n\n const options = {\n chart: {\n backgroundColor: theme.palette.background.paper,\n style: {\n fontFamily: theme.typography.fontFamily,\n },\n reflow: true,\n zoomType: \"x\",\n height: 690,\n },\n colors: theme.palette.chartOptions.colors,\n tooltip: {\n backgroundColor: theme.palette.background.paper,\n \n style: {\n color: theme.palette.text.primary,\n },\n },\n legend: {\n itemStyle: {\n color: alpha(theme.palette.text.primary, 0.8),\n fontWeight: \"inherit\",\n },\n itemHoverStyle: {\n color: theme.palette.text.primary,\n },\n itemHiddenStyle: {\n color: theme.palette.text.disabled,\n },\n },\n yAxis,\n xAxis: multiY ? xAxis : xAxis[0],\n series,\n };\n \n \n \n //console.log('create >> HighchartGantt');\n const chart = Highcharts.chart('container_highcharts', options);\n\n return () => {\n //console.log('destroy >> Highchart');\n chart.destroy();\n } \n }, [tagsIds, data, mode, tagsSelector, theme])\n \n\n return (\n <div className={classes.chartContent}>\n {/* {loading ? (\n <Loading className={classes.loading} />\n ) */}\n <div id=\"container_highcharts\"></div> \n </div>\n );\n};\n\nChartView.displayName = \"ChartView\";\n\nexport default ChartView;\n","\n\nexport const chartOptions = {\n global: {\n useUTC: false\n }, \n plotOptions: {\n series: {\n connectNulls: true\n }\n },\n title: {\n text: ''\n },\n legend: {\n useHTML: true,\n style: {\n fontSize: \"16px\"\n }\n },\n tooltip: {\n crosshairs: true,\n shared: true,\n useHTML: true\n },\n credits: {\n enabled: false\n },\n lang: {\n months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],\n weekdays: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],\n shortMonths: ['Янв', 'Фев', 'Март', 'Апр', 'Май', 'Июнь', 'Июль', 'Авг', 'Сент', 'Окт', 'Нояб', 'Дек'],\n resetZoom: 'Cбросить масштаб',\n downloadPNG: 'Скачать PNG',\n downloadJPEG: 'Скачать JPEG',\n downloadPDF: 'Скачать PDF',\n downloadSVG: 'Скачать SVG',\n printChart: 'Напечатать график',\n loading: 'Загрузка ...'\n },\n // symbols: ['circle', 'square', 'diamond']\n}\n\n","import React from 'react';\nimport { Typography } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Inbox from '@material-ui/icons/Inbox';\nimport {\n useTranslate,\n useResourceContext,\n useGetResourceLabel,\n useListContext\n} from 'ra-core';\n\n\nconst Empty = (props) => {\n const resource = useResourceContext(props);\n const classes = useStyles(props);\n const translate = useTranslate();\n\n const getResourceLabel = useGetResourceLabel();\n const resourceName = translate(`resources.${resource}.forcedCaseName`, {\n smart_count: 0,\n _: getResourceLabel(resource, 0),\n });\n\n const { filterValues } = useListContext(props);\n\n const hasFilter = !!(filterValues.tags && filterValues.periods)\n\n const emptyMessage = translate('ra.page.empty', { name: resourceName });\n const inviteMessage = translate('ra.page.invite');\n\n return (\n <>\n <div className={classes.message}>\n <Inbox className={classes.icon} />\n <Typography variant=\"h6\" paragraph>\n {translate(hasFilter \n ? `resources.${resource}.empty`\n : `resources.${resource}.emptyfilter`, \n { _: emptyMessage })}\n </Typography>\n\n <Typography variant=\"body1\">\n {translate(hasFilter \n ? `resources.${resource}.invite`\n : `resources.${resource}.invitefilter`, {\n _: inviteMessage,\n })}\n </Typography>\n\n </div>\n </>\n );\n};\n\nconst useStyles = makeStyles(\n theme => ({\n message: {\n textAlign: 'center',\n opacity: theme.palette.type === 'light' ? 0.5 : 0.8,\n margin: '0 1em',\n color:\n theme.palette.type === 'light'\n ? 'inherit'\n : theme.palette.text.primary,\n },\n icon: {\n width: '9em',\n height: '9em',\n },\n toolbar: {\n textAlign: 'center',\n marginTop: '2em',\n },\n }),\n { name: 'RaEmpty' }\n);\n\n\nexport default Empty","import React, { useCallback, useRef } from 'react';\nimport classNames from 'classnames';\nimport TextField from '@material-ui/core/TextField';\nimport Chip from '@material-ui/core/Chip';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport Popper from '@material-ui/core/Popper';\nimport ClickAwayListener from '@material-ui/core/ClickAwayListener';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown';\nimport ArrowDropUp from '@material-ui/icons/ArrowDropUp';\nimport AddIcon from '@material-ui/icons/Add';\nimport { useInput, useTimeout, FieldTitle, InputHelperText } from 'react-admin';\nimport IconButton from '@material-ui/core/IconButton';\n\n\n\n\n\nconst AutocompleteInputLoader = ({ timeout = 1000 }) => {\n const oneSecondHasPassed = useTimeout(timeout);\n if (oneSecondHasPassed) {\n return <CircularProgress size={24} />;\n }\n return null;\n};\n\nconst CustomSelectArrayInput = (props) => {\n const {\n classes: classesOverride,\n children,\n getSelectedItems,\n optionText = \"name\",\n popperPlacement = \"bottom-start\",\n disabled,\n format,\n fullWidth,\n helperText,\n id: idOverride,\n input: inputOverride,\n isRequired: isRequiredOverride,\n label,\n loading,\n margin = 'dense',\n size = 'small',\n meta: metaOverride,\n onBlur,\n onChange,\n onFocus,\n options: {\n labelProps,\n inputProps,\n ...options\n } = {},\n parse,\n resource,\n source,\n validate,\n hasNotClickAway = false,\n hasSingleSelect = false,\n variant = 'filled',\n ...rest\n } = props;\n\n const classes = useStyles(props);\n\n const {\n id,\n input,\n isRequired,\n meta: { touched, error, submitError },\n } = useInput({\n format,\n id: idOverride,\n input: inputOverride,\n meta: metaOverride,\n onBlur,\n onChange,\n onFocus,\n parse,\n resource,\n source,\n validate,\n ...rest,\n });\n\n let inputRef = useRef();\n const anchorRef = React.useRef(null);\n const [open, setOpen] = React.useState(false);\n\n const selectedItems = input.value || emptyArray;\n\n const handleDelete = useCallback(\n item => () => {\n const newSelectedItems = [...selectedItems];\n newSelectedItems.splice(newSelectedItems.indexOf(item), 1);\n input.onChange(newSelectedItems);\n },\n [input, selectedItems]\n );\n\n const handleBlur = useCallback(\n event => {\n input.onBlur(event);\n },\n [input]\n );\n\n\n const handleFocus = useCallback(event => {\n setOpen(true);\n input.onFocus(event);\n }, [input]);\n\n\n const handleUpDown = useCallback(event => {\n setOpen(!open);\n }, [open, setOpen]);\n\n // const handleAdd = useCallback(event => {\n // setOpen(true);\n // }, [setOpen]);\n\n const handleClose = (event) => {\n\n //Костыль котрый исправляет срабатывание ClickAwayListener при использовании элемента select\n if (event.target?.lastChild?.className == 'MuiPopover-root') {\n return;\n }\n\n setOpen(false);\n };\n\n const handleSelect = useCallback((items, singleSelect) => {\n if (getSelectedItems) {\n const newSelectedItems = getSelectedItems(items, selectedItems);\n input.onChange((singleSelect === true || hasSingleSelect) ? newSelectedItems : [...selectedItems, ...newSelectedItems]);\n }\n }, [selectedItems]);\n\n return (\n <ClickAwayListener onClickAway={!hasNotClickAway ? handleClose : () => { }}>\n <div className={classes.container}>\n <TextField\n id={id}\n ref={anchorRef}\n fullWidth\n InputProps={{\n readOnly: true,\n inputRef: inputRef,\n classes: {\n root: classNames(classes.inputRoot, {\n [classes.inputRootFilled]:\n variant === 'filled',\n }),\n input: classes.inputInput,\n },\n startAdornment: (\n <div\n className={classNames({\n [classes.chipContainerFilled]:\n variant === 'filled',\n [classes.chipContainerOutlined]:\n variant === 'outlined',\n })}\n >\n {selectedItems.map(\n (item, index) => {\n const title = typeof optionText == 'function' ? optionText(item) : item[optionText];\n return <Chip\n key={index}\n classes={props.clipLabelsTextWidth ? {\n root: classes.chipRoot,\n label: classes.chipLabel\n } : {}}\n title={props.clipLabelsTextWidth ? title : undefined}\n tabIndex={-1}\n label={title}\n className={classes.chip}\n onDelete={handleDelete(\n item\n )}\n />\n }\n )}\n {/* <IconButton size=\"small\" onClick={handleAdd}>\n <AddIcon />\n </IconButton> */}\n </div>\n ),\n endAdornment: loading ? (\n <AutocompleteInputLoader />\n ) : (\n <InputAdornment position=\"end\" style={{ marginLeft: \"auto\" }}>\n <IconButton size=\"small\" onClick={handleUpDown}>\n {open ?\n <ArrowDropUp color=\"action\" />\n : <ArrowDropDownIcon color=\"action\" />\n }\n </IconButton>\n </InputAdornment>),\n onBlur: handleBlur,\n onFocus: handleFocus,\n ...inputProps\n }}\n error={!!(touched && (error || submitError))}\n label={\n <FieldTitle\n label={label}\n {...labelProps}\n source={source}\n resource={resource}\n isRequired={\n typeof isRequiredOverride !==\n 'undefined'\n ? isRequiredOverride\n : isRequired\n }\n />\n }\n helperText={\n <InputHelperText\n touched={touched}\n error={error || submitError}\n helperText={helperText}\n />\n }\n size={size}\n variant={variant}\n margin={margin}\n disabled={disabled}\n {...options}\n />\n <Popper open={open} className={classes.popperContainer} placement={popperPlacement} anchorEl={anchorRef.current} role={undefined} transition disablePortal>\n {React.cloneElement(children, {\n onClose: handleClose,\n onSelect: handleSelect,\n selectedItems\n })}\n </Popper>\n </div>\n\n </ClickAwayListener>\n );\n};\n\nconst emptyArray = [];\n\nconst useStyles = makeStyles(\n (theme) => ({\n container: {\n flexGrow: 1,\n position: 'relative',\n minWidth: theme.spacing(24)\n },\n suggestionsContainer: {\n zIndex: theme.zIndex.modal,\n },\n chip: {\n\n margin: theme.spacing(0.5, 0.5, 0.5, 0),\n },\n chipContainerFilled: {\n margin: '27px 12px 10px 0',\n },\n chipContainerOutlined: {\n margin: '12px 12px 10px 0',\n },\n inputRoot: {\n flexWrap: 'wrap',\n //minHeight: 69,\n minWidth: 250\n },\n inputRootFilled: {\n flexWrap: 'wrap',\n '& $chip': {\n backgroundColor:\n theme.palette.type === 'light'\n ? 'rgba(0, 0, 0, 0.09)'\n : 'rgba(255, 255, 255, 0.09)',\n },\n },\n inputInput: {\n width: 'auto',\n flexGrow: 1,\n pointerEvents: \"none\",\n maxWidth: theme.spacing(2)\n // left: 0,\n // width: \"100%\",\n // bottom: 0,\n // opacity: 0,\n // position: \"absolute\",\n // pointerEvents: \"none\",\n },\n popperContainer: {\n zIndex: theme.zIndex.modal,\n boxShadow: '0px 5px 5px -3px rgb(0 0 0 / 20%), 0px 8px 10px 1px rgb(0 0 0 / 14%), 0px 3px 14px 2px rgb(0 0 0 / 12%)'\n },\n chipLabel: {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n chipRoot: {\n maxWidth: ({ clipLabelsTextWidth }) => clipLabelsTextWidth || 150,\n }\n }),\n { name: 'RaCustomSelectArrayInput' }\n);\n\nexport default CustomSelectArrayInput;\n","import React, { useCallback, useRef, useMemo } from \"react\";\nimport get from \"lodash/get\";\nimport classNames from \"classnames\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Chip from \"@material-ui/core/Chip\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\nimport Popper from \"@material-ui/core/Popper\";\nimport ClickAwayListener from \"@material-ui/core/ClickAwayListener\";\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport ArrowDropDownIcon from \"@material-ui/icons/ArrowDropDown\";\nimport ArrowDropUp from \"@material-ui/icons/ArrowDropUp\";\nimport { useInput, useTimeout, FieldTitle, InputHelperText } from \"react-admin\";\nimport IconButton from \"@material-ui/core/IconButton\";\n\nconst AutocompleteInputLoader = ({ timeout = 1000 }) => {\n const oneSecondHasPassed = useTimeout(timeout);\n if (oneSecondHasPassed) {\n return <CircularProgress size={24} />;\n }\n return null;\n};\n\nconst CustomSelectArrayInput = (props) => {\n const {\n classes: classesOverride,\n children,\n choices = [],\n optionValue = \"id\",\n optionText = \"name\",\n popperPlacement = \"bottom-start\",\n disabled,\n format,\n fullWidth,\n helperText,\n id: idOverride,\n input: inputOverride,\n isRequired: isRequiredOverride,\n label,\n loading,\n margin = \"dense\",\n size = \"small\",\n meta: metaOverride,\n onBlur,\n onChange,\n onFocus,\n options: { labelProps, inputProps, ...options } = {},\n parse,\n resource,\n source,\n validate,\n hasNotClickAway = false,\n variant = \"filled\",\n ...rest\n } = props;\n\n const classes = useStyles(props);\n\n const {\n id,\n input,\n isRequired,\n meta: { touched, error, submitError },\n } = useInput({\n format,\n id: idOverride,\n input: inputOverride,\n meta: metaOverride,\n onBlur,\n onChange,\n onFocus,\n parse,\n resource,\n source,\n validate,\n ...rest,\n });\n\n let inputRef = useRef();\n const anchorRef = React.useRef(null);\n const [open, setOpen] = React.useState(false);\n const inputValues = input.value || emptyArray;\n const inputOnChange = input.onChange\n\n const getSuggestionFromValue = useCallback(\n (value) => {\n return choices.find((choice) => {\n const choiceValue =\n typeof optionValue === \"function\"\n ? optionValue(choice)\n : get(choice, optionValue);\n\n return choiceValue === value;\n });\n },\n [choices, optionValue]\n );\n\n const selectedItems = useMemo(() => inputValues.map(getSuggestionFromValue), [getSuggestionFromValue, inputValues]);\n\n const handleDelete = useCallback((item) => () => {\n const deletedOptionValue = typeof optionValue === \"function\" ? optionValue(item) : get(item, optionValue)\n const newValues = inputValues.filter(value => value !== deletedOptionValue);\n inputOnChange(newValues);\n }, [optionValue, inputValues, inputOnChange]);\n\n const handleBlur = useCallback((event) => {\n input.onBlur(event);\n }, [input]);\n\n const handleFocus = useCallback((event) => {\n setOpen(true);\n input.onFocus(event);\n }, [input]);\n\n const handleUpDown = useCallback((event) => {\n setOpen(!open);\n }, [open, setOpen]);\n\n\n const handleClose = (event) => {\n //Костыль котрый исправляет срабатывание ClickAwayListener при использовании элемента select\n if (event.target?.lastChild?.className === \"MuiPopover-root\") {\n return;\n }\n\n setOpen(false);\n };\n\n const handleSelect = useCallback((items, singleSelect) => {\n const selectedValues =\n typeof optionValue === \"function\"\n ? items.map(optionValue)\n : items.map((item) => get(item, optionValue));\n const newValues = [...new Set([...inputValues, ...selectedValues])];\n\n inputOnChange(newValues);\n }, [optionValue, inputValues, inputOnChange]);\n\n return (\n <ClickAwayListener onClickAway={!hasNotClickAway ? handleClose : () => { }}>\n <div className={classes.container}>\n <TextField\n id={id}\n ref={anchorRef}\n fullWidth\n InputProps={{\n readOnly: true,\n inputRef: inputRef,\n classes: {\n root: classNames(classes.inputRoot, {\n [classes.inputRootFilled]: variant === \"filled\",\n }),\n input: classes.inputInput,\n },\n startAdornment: (\n <div\n className={classNames({\n [classes.chipContainerFilled]: variant === \"filled\",\n [classes.chipContainerOutlined]: variant === \"outlined\",\n })}\n >\n {selectedItems\n .filter((item) => !!item)\n .map((item, index) => {\n const title = typeof optionText == \"function\" ? optionText(item) : get(item, optionText);\n\n return (\n <Chip\n key={index}\n classes={{ root: classes.chipRoot, label: classes.chipLabel, }}\n title={title}\n tabIndex={-1}\n label={title}\n className={classes.chip}\n onDelete={handleDelete(item)}\n />\n );\n })}\n </div>\n ),\n endAdornment: loading ? (\n <AutocompleteInputLoader />\n ) : (\n <InputAdornment position=\"end\" style={{ marginLeft: \"auto\" }}>\n <IconButton size=\"small\" onClick={handleUpDown}>\n {open ? (\n <ArrowDropUp color=\"action\" />\n ) : (\n <ArrowDropDownIcon color=\"action\" />\n )}\n </IconButton>\n </InputAdornment>\n ),\n onBlur: handleBlur,\n onFocus: handleFocus,\n ...inputProps,\n }}\n error={!!(touched && (error || submitError))}\n label={\n <FieldTitle\n label={label}\n {...labelProps}\n source={source}\n resource={resource}\n isRequired={\n typeof isRequiredOverride !== \"undefined\"\n ? isRequiredOverride\n : isRequired\n }\n />\n }\n helperText={\n <InputHelperText\n touched={touched}\n error={error || submitError}\n helperText={helperText}\n />\n }\n size={size}\n variant={variant}\n margin={margin}\n disabled={disabled}\n {...options}\n />\n <Popper\n open={open}\n className={classes.popperContainer}\n placement={popperPlacement}\n anchorEl={anchorRef.current}\n role={undefined}\n transition\n disablePortal\n >\n {React.cloneElement(children, {\n onClose: handleClose,\n onSelect: handleSelect,\n selectedItems,\n })}\n </Popper>\n </div>\n </ClickAwayListener>\n );\n};\n\nconst emptyArray = [];\n\nconst useStyles = makeStyles(\n (theme) => ({\n container: {\n flexGrow: 1,\n position: \"relative\",\n minWidth: theme.spacing(24),\n },\n suggestionsContainer: {\n zIndex: theme.zIndex.modal,\n },\n chip: {\n margin: theme.spacing(0.5, 0.5, 0.5, 0),\n },\n chipContainerFilled: {\n margin: \"27px 12px 10px 0\",\n },\n chipContainerOutlined: {\n margin: \"12px 12px 10px 0\",\n },\n inputRoot: {\n flexWrap: \"wrap\",\n //minHeight: 69,\n minWidth: 250,\n },\n inputRootFilled: {\n flexWrap: \"wrap\",\n \"& $chip\": {\n backgroundColor:\n theme.palette.type === \"light\"\n ? \"rgba(0, 0, 0, 0.09)\"\n : \"rgba(255, 255, 255, 0.09)\",\n },\n },\n inputInput: {\n width: \"auto\",\n flexGrow: 1,\n pointerEvents: \"none\",\n maxWidth: theme.spacing(2),\n // left: 0,\n // width: \"100%\",\n // bottom: 0,\n // opacity: 0,\n // position: \"absolute\",\n // pointerEvents: \"none\",\n },\n popperContainer: {\n zIndex: theme.zIndex.modal,\n boxShadow:\n \"0px 5px 5px -3px rgb(0 0 0 / 20%), 0px 8px 10px 1px rgb(0 0 0 / 14%), 0px 3px 14px 2px rgb(0 0 0 / 12%)\",\n },\n chipLabel: {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n chipRoot: {\n maxWidth: 256,\n },\n }),\n { name: \"RaCustomSelectArrayInput\" }\n);\n\nexport default CustomSelectArrayInput;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props} >\n <path d=\"M14 9V5L21 12L14 19V14.9C9 14.9 5.5 16.5 3 20C4 15 7 10 14 9Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React, { cloneElement } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Badge from '@material-ui/core/Badge';\nimport FolderIcon from '@material-ui/icons/Folder';\nimport CategoryIcon from '@material-ui/icons/Category';\nimport AssetIcon from '../icons/Asset';\nimport ShortcutIcon from '../icons/Shortcut';\nimport LabelIcon from '@material-ui/icons/Label';\nimport { amber, green, blue, deepPurple, teal } from '@material-ui/core/colors';\n\nconst typeIcons = {\n // GROUPOBJECT: <FolderIcon style={{ color: deepPurple[600] }} fontSize=\"small\" />,\n ASSET: <AssetIcon style={{ color: blue[600] }} fontSize=\"small\" />,\n // GROUP: <FolderIcon style={{ color: amber[600] }} fontSize=\"small\" />,\n PARAMETER: <LabelIcon style={{ color: green[600] }} fontSize=\"small\" />,\n TEMPLATE: <CategoryIcon style={{ color: teal[600] }} fontSize=\"small\" />,\n}\n\nconst defaultIcon = <FolderIcon style={{ color: amber[600] }} fontSize=\"small\" />\n\n\nconst useStyles = makeStyles(theme => ({\n badge: {\n right: 0,\n bottom: 0,\n transform: \"translate(16%, 32%)\"\n },\n\n}), { name: 'DirectoryIcon' });\n\n\nexport const DirectoryIcon = ({ record, ...props }) => {\n const classes = useStyles();\n const { type, link } = record\n const icon = typeIcons[type] || defaultIcon\n\n return link ? (\n <Badge\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n badgeContent={<ShortcutIcon fontSize=\"small\" />}\n overlap=\"overlap\"\n classes={{ badge: classes.badge }}\n >\n {cloneElement(icon, { ...props })}\n </Badge>\n ) : (\n cloneElement(icon, { ...props })\n )\n\n}\n\nexport default DirectoryIcon;","import React, { useEffect, useCallback } from 'react';\nimport debounce from 'lodash/debounce';\nimport { ResourceContextProvider, useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport TextField from '@material-ui/core/TextField';\nimport SearchIcon from '@material-ui/icons/Search';\nimport TreeComponent from '../../lib/tree/TreeComponent';\nimport useTreeController from '../../lib/tree/controllers/useTreeController';\nimport TreeContextProvider from '../../lib/tree/controllers/TreeContextProvider';\nimport DirectoryIcon from '../../lib/tree/DirectoryIcon';\n\n\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n marginTop: 0\n },\n content: {\n overflow: 'auto',\n height: 500,\n width: 320,\n padding: 0,\n // '&:last-child': { paddingBottom: 0 }\n },\n header: {\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(1)\n },\n headerAction: {\n margin: 0\n },\n headerActionButton: {\n margin: 5,\n marginLeft: theme.spacing(2)\n }\n })\n);\n\nconst TreeTagsSelectorComponent = ({\n onSelect,\n onClose,\n treeNode,\n ...props\n}) => {\n const classes = useStyles(props);\n const translate = useTranslate();\n\n const handleSelect = useCallback((nodeIds, treeState) => {\n const selectedNodes = nodeIds.reduce((acc, selectedId) => {\n const node = treeState.tree[selectedId]\n return node?.type === 'PARAMETER' ? [...acc, node] : acc\n }, [])\n\n if (selectedNodes.length === 0) return\n\n onSelect && onSelect(selectedNodes)\n\n }, [onSelect]);\n\n const controllerProps = useTreeController({ ...props, onSelect: handleSelect });\n\n const {\n getRootNodes,\n // selected,\n // tree\n } = controllerProps;\n\n // useEffect(() => {\n // const selectedNodes = selected.reduce((acc, selectedId) => {\n // const node = tree[selectedId]\n // return node?.type === 'PARAMETER' ? [...acc, node] : acc\n // }, [])\n\n // if (selectedNodes.length === 0) return\n\n // onSelect && onSelect(selectedNodes)\n // }, [tree, selected, onSelect])\n\n\n const handleSearch = (event) => {\n getRootNodes(event.target.value);\n }\n\n const debouncedHandleSearch = debounce(handleSearch, 500);\n\n return (\n <TreeContextProvider value={controllerProps}>\n <Card className={classes.root}>\n <CardContent >\n <TextField\n fullWidth\n hiddenLabel\n onChange={debouncedHandleSearch}\n placeholder={translate('ra.action.search')}\n variant=\"filled\"\n size=\"small\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <SearchIcon color=\"disabled\" />\n </InputAdornment>\n ),\n }}\n />\n </CardContent>\n <CardContent className={classes.content}>\n <TreeComponent treeNode={treeNode}/>\n </CardContent>\n </Card>\n {/* </ClickAwayListener> */}\n </TreeContextProvider>\n )\n}\n\nconst TreeTagsSelector = ({ resource, ...props }) => (\n <ResourceContextProvider value={resource}>\n <TreeTagsSelectorComponent {...props} />\n </ResourceContextProvider>\n);\n\nTreeTagsSelector.defaultProps = {\n icon: DirectoryIcon,\n filter: {},\n readOnly: true,\n};\n\nexport default TreeTagsSelector;","import React, { useEffect, useState, useMemo } from \"react\";\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport {\n Card,\n Divider,\n CardHeader,\n CardContent,\n IconButton,\n Typography,\n ClickAwayListener,\n InputAdornment,\n Grid,\n InputLabel,\n MenuItem,\n FormHelperText,\n FormControl,\n Select,\n TextField,\n Button\n} from '@material-ui/core';\n\nimport { useTranslate } from 'react-admin';\n\nimport ClearIcon from '@material-ui/icons/Clear';\n\nimport { DateTime } from \"luxon\";\nimport { useCallback } from \"react\";\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginTop: 0\n },\n content: {\n height: 'auto',\n width: 670,\n },\n fieldPriod: {\n width: 210,\n },\n fieldDatetime: {\n width: 210,\n },\n button: {\n marginLeft: theme.spacing(1)\n }\n}));\n\nconst format_datetime = `yyyy-LL-dd'T'HH:mm`\n\n\nconst PeriodsCreate = ({\n classes: classesOverride,\n onSelect,\n onClose,\n selectedItems,\n ...props\n}) => {\n const translate = useTranslate();\n const classes = useStyles({ classes: classesOverride });\n\n const defaultState = useMemo(() => {\n if (selectedItems && selectedItems.length > 0) {\n const sel = selectedItems[selectedItems.length - 1];\n return {\n period: 'user',\n from: (sel.timestamp_gte && DateTime.fromISO(sel.timestamp_gte).toFormat(format_datetime)) || null,\n to: (sel.timestamp_lte && DateTime.fromISO(sel.timestamp_lte).toFormat(format_datetime)) || null\n }\n } else {\n return {\n period: 'user',\n from: DateTime.now().minus({ days: 1 }).toFormat(format_datetime),\n to: DateTime.now().toFormat(format_datetime)\n }\n }\n\n }, [selectedItems]);\n\n const [state, setState] = useState(defaultState);\n\n useEffect(() => {\n if (state.period == 'user') return;\n const to = (state.from && DateTime.fromFormat(state.from, format_datetime).plus({ [state.period]: 1 }).toFormat(format_datetime)) || null;\n setState(prev => ({\n ...prev,\n to\n }));\n }, [state.period, state.from]);\n\n const handleChangePeriod = useCallback((event) => {\n setState(prev => ({\n ...prev,\n period: event.target.value\n }));\n }, [setState]);\n\n const handleChangeFrom = useCallback((event) => {\n setState(prev => ({\n ...prev,\n from: event.target.value\n }));\n }, [setState]);\n\n const handleChangeTo = useCallback((event) => {\n setState(prev => ({\n ...prev,\n to: event.target.value\n }));\n }, [setState]);\n\n const handleCreate = useCallback((event) => {\n onSelect && onSelect([state]);\n onClose && onClose(event);\n }, [state, onSelect, onClose]);\n\n const handleChange = useCallback((event) => {\n onSelect && onSelect([state], true);\n onClose && onClose(event);\n }, [state, onSelect, onClose]);\n\n return (\n\n <Card className={classes.root}>\n <CardContent className={classes.content}>\n <Grid container spacing={2} >\n <Grid item xs={4}>\n <FormControl variant=\"filled\" fullWidth>\n <InputLabel id=\"select-period-label\">Период</InputLabel>\n <Select\n labelId=\"select-period-label\"\n id=\"select-period\"\n value={state.period}\n onChange={handleChangePeriod}\n >\n <MenuItem value=\"user\">Пользовательский</MenuItem>\n <MenuItem value=\"hours\">Час</MenuItem>\n <MenuItem value=\"days\">День</MenuItem>\n <MenuItem value=\"weeks\">Неделя</MenuItem>\n <MenuItem value=\"months\">Месяц</MenuItem>\n <MenuItem value=\"quarters\">Квартал</MenuItem>\n <MenuItem value=\"years\">Год</MenuItem>\n </Select>\n </FormControl>\n </Grid>\n <Grid item xs={4}>\n <TextField\n fullWidth\n variant=\"filled\"\n label=\"C\"\n type=\"datetime-local\"\n value={state.from}\n onChange={handleChangeFrom}\n inputProps={{ max: state.to }}\n InputLabelProps={{\n shrink: true,\n }}\n />\n </Grid>\n <Grid item xs={4}>\n <TextField\n fullWidth\n variant=\"filled\"\n disabled={state.period != 'user'}\n label=\"По\"\n type=\"datetime-local\"\n value={state.to}\n onChange={handleChangeTo}\n inputProps={{ min: state.from }}\n InputLabelProps={{\n shrink: true,\n }}\n />\n </Grid>\n <Grid item xs={12} container justify=\"flex-end\">\n <Button\n variant=\"contained\"\n disableElevation\n onClick={onClose}\n >\n Отмена\n </Button>\n <Button\n variant=\"contained\"\n className={classes.button}\n color=\"primary\"\n disableElevation\n onClick={handleCreate}\n >\n Создать\n </Button>\n {selectedItems.length == 1 && <Button\n variant=\"contained\"\n className={classes.button}\n color=\"primary\"\n disableElevation\n onClick={handleChange}\n >\n Изменить\n </Button>}\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n\n )\n}\n\nexport default PeriodsCreate;","import React, { memo } from 'react';\nimport clsx from 'clsx';\nimport { makeStyles } from '@material-ui/core/styles';\nimport useTreeContext from '../../lib/tree/controllers/useTreeContext';\nimport TreeItem from '@material-ui/lab/TreeItem';\nimport DefaultTreeNodeExpandIcon from '../../lib/tree/TreeNodeExpandIcon';\nimport DefaultTreeNodeLabel from '../../lib/tree/TreeNodeLabel';\n\n\nconst historyRegex = /H/i;\n\nconst useStyles = makeStyles({\n iconContainer: {\n width: 24,\n height: 24,\n marginRight: 0,\n alignItems: \"center\",\n },\n disabled: {\n pointerEvents: 'none', // Disable link interactions\n cursor: 'default',\n opacity: 0.5,\n }\n});\n\nconst TreeNode = memo(({\n nodeId,\n treeNodeExpandIcon: TreeNodeExpandIcon,\n treeNodeLabel: TreeNodeLabel,\n ...props\n}) => {\n const classes = useStyles();\n const { getNode } = useTreeContext();\n const node = getNode(nodeId)\n if (!node) return null\n\n const isNotSetpoint = node?.parameter?.role && !(['HIHI_SET', 'HI_SET', 'LO_SET', 'LOLO_SET', 'MIN', 'MAX'].indexOf(node.parameter.role) > -1)\n \n \n return (\n <TreeItem\n nodeId={node.id}\n label={<TreeNodeLabel node={node} />}\n icon={<TreeNodeExpandIcon node={node} />}\n className={clsx({\n [classes.disabled]: isNotSetpoint\n })}\n classes={{ iconContainer: classes.iconContainer }}\n >\n {Array.isArray(node.childNodes) ? node.childNodes.map((childNode) => (<TreeNode nodeId={childNode.id} key={childNode.id} />)) : null}\n </TreeItem>\n )\n});\n\nTreeNode.defaultProps = {\n treeNodeExpandIcon: DefaultTreeNodeExpandIcon,\n treeNodeLabel: DefaultTreeNodeLabel\n}\n\n\nexport default TreeNode","import React from \"react\";\nimport Filter from \"../../lib/list/filter/Filter\";\nimport {\n SelectInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n choices,\n} from \"react-admin\";\nimport CustomSelectArrayInput from \"../../lib/input/CustomSelectArrayInput\";\nimport CustomSelectArrayInput2 from \"../../lib/input/CustomSelectArrayInput2\";\nimport TreeTagsSelector from \"./TreeTagsSelector\";\nimport PeriodsCreate from \"./PeriodsCreate\";\nimport { DateTime } from \"luxon\";\nimport { buildIdFromTag } from \"../../dataProvider/DatabusService/Tag/utils\";\nimport TreeNode from \"./TreeNodeSetpoint\";\n\n\n\nconst getSelectedItemsPeriods = (items, selectedItems) => {\n const newItems = items.filter(\n (item) =>\n !selectedItems.some(\n (sitem) => sitem.from == item.from && sitem.to == item.to\n )\n );\n return newItems.map((item) => ({\n timestamp_gte:\n item.from && item.from != \"\"\n ? DateTime.fromISO(item.from)\n .toUTC()\n .toFormat(`yyyy-LL-dd'T'HH:mm:ss'Z'`)\n : null,\n timestamp_lte:\n item.to && item.to != \"\"\n ? DateTime.fromISO(item.to).toUTC().toFormat(`yyyy-LL-dd'T'HH:mm:ss'Z'`)\n : null,\n }));\n};\n\nconst optionText = (item) => {\n return (\n (item.timestamp_gte\n ? DateTime.fromISO(item.timestamp_gte).toFormat(\"dd.LL.yyyy HH:mm\")\n : \"\") +\n \" - \" +\n (item.timestamp_lte\n ? DateTime.fromISO(item.timestamp_lte).toFormat(\"dd.LL.yyyy HH:mm\")\n : \"\")\n );\n};\n\nconst getOptionValue = (choice) => {\n return buildIdFromTag({\n resource: choice.asset.id,\n tag: choice.parameter.id,\n });\n};\n\nconst getOptionText = (item) => {\n return `${item.parameter.name} - ${item.asset.name}`;\n};\n\nconst TagSeriesListFilter = (props) => (\n <Filter {...props}>\n <ReferenceArrayInput\n alwaysOn\n source=\"tagsIds\"\n label=\"Теги\"\n reference=\"TagByNode\"\n allowEmpty\n enableGetChoices={({ q }) => (q ? q.length >= 2 : false)}\n >\n <CustomSelectArrayInput2\n optionValue={getOptionValue}\n optionText={getOptionText}\n >\n <TreeTagsSelector resource=\"Tree\" />\n </CustomSelectArrayInput2>\n </ReferenceArrayInput>\n <ReferenceArrayInput\n alwaysOn\n source=\"setpointTagsIds\"\n label=\"Уставки\"\n reference=\"TagByNode\"\n allowEmpty\n enableGetChoices={({ q }) => (q ? q.length >= 2 : false)}\n >\n <CustomSelectArrayInput2\n optionValue={getOptionValue}\n optionText={getOptionText}\n >\n <TreeTagsSelector resource=\"Tree\" treeNode={TreeNode} />\n </CustomSelectArrayInput2>\n </ReferenceArrayInput>\n <CustomSelectArrayInput\n alwaysOn\n source=\"periods\"\n label=\"Периоды\"\n hasNotClickAway\n popperPlacement=\"bottom\"\n getSelectedItems={getSelectedItemsPeriods}\n optionText={optionText}\n >\n <PeriodsCreate />\n </CustomSelectArrayInput>\n <SelectInput\n alwaysOn\n source=\"mode\"\n label=\"Режим\"\n choices={[\n { id: \"default\", name: \"Стандартный\" },\n { id: \"сombined\", name: \"Мультиось\" },\n { id: \"split\", name: \"По одному\" },\n ]}\n />\n </Filter>\n);\n\nexport default TagSeriesListFilter;\n","\nimport { DateTime } from 'luxon'\nimport convertValue from './convertValue'\nimport ExcelJS from 'exceljs';\nimport { downloadXLSX } from '../../lib/exporter/utils';\nimport { useSelector } from \"react-redux\";\nimport get from \"lodash/get\";\nimport { buildIdFromTag } from \"../../dataProvider/DatabusService/Tag/utils\";\n\nconst defaultWorksheetOptions = {\n views: [\n { state: 'frozen', ySplit: 2 }\n ]\n}\n\nconst useExporter = () => {\n\n const tagsSelector = useSelector((state) => {\n return get(state, `admin.resources.TagByNode.data`)\n });\n\n return (records) => {\n\n const workbook = new ExcelJS.Workbook();\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n\n const offset = DateTime.local().offset / 60;\n\n records.forEach(record => {\n const table = {};\n\n record.data.forEach(taghistory => {\n \n const tag = tagsSelector[buildIdFromTag(taghistory.tag)]\n \n taghistory.data.forEach(item => {\n // quality: 0\n // timestamp: \"2021-05-28T14:10:47Z\"\n // timestampSrv: \"2021-05-28T14:10:47Z\"\n // utcOffset: 0\n // value: \"12.069264\"\n\n //resource: \"shrp_ucmiyurt\"\n //tag: \"AKB\"\n\n if (!table[item.timestamp]) { table[item.timestamp] = {} }\n table[item.timestamp][`${tag.asset.id}.${tag.parameter.id}`] = convertValue(item)\n }) \n });\n\n \n for (const setpoint of record.setpoints || []) {\n \n const val = convertValue(setpoint);\n const tag = tagsSelector[buildIdFromTag(setpoint.tag)]\n \n for (const key in table) { \n table[key][`${tag.asset.id}.${tag.parameter.id}`] = val; \n }\n }\n \n \n const columns = [{\n header: ['timestamp', 'Дата/Время'],\n key: 'timestamp',\n style: { numFmt: 'dd.mm.yyyy hh:mm:ss' },\n width: 20\n }, ...record.data.map(taghistory => {\n const tag = tagsSelector[buildIdFromTag(taghistory.tag)]\n const key = `${tag.asset.id}.${tag.parameter.id}`;\n return {\n header: [key, tag.parameter.name],\n key,\n width: 25\n }\n }), ...(record.setpoints || []).map(setpoint => {\n const tag = tagsSelector[buildIdFromTag(setpoint.tag)]\n const key = `${tag.asset.id}.${tag.parameter.id}`;\n return {\n header: [key, tag.parameter.name],\n key,\n width: 25\n }\n })];\n\n const rows = Object.keys(table).sort().map(key => {\n const row = {\n timestamp: DateTime.fromISO(key).plus({ hour: offset }).toJSDate(), //.toLocaleString(DateTime.DATETIME_SHORT), \n ...table[key]\n };\n return row;\n });\n\n const id_split = record.id.split('_');\n const worksheet_title = DateTime.fromISO(id_split[0]).toFormat('dd.LL.yyyy') + ' - ' + DateTime.fromISO(id_split[1]).toFormat('dd.LL.yyyy')\n\n const worksheet = workbook.addWorksheet(worksheet_title, defaultWorksheetOptions);\n worksheet.columns = columns\n worksheet.autoFilter = { from: { row: 2, column: 1 }, to: { row: 2, column: columns.length } }\n worksheet.addRows(rows);\n });\n\n\n downloadXLSX(DateTime.local().toFormat('yyyyLLdd_HHmm') + '_archivedata', workbook.xlsx)\n\n\n\n };\n}\n\n\nexport default useExporter","import React, {cloneElement} from \"react\";\nimport { number, TopToolbar, ExportButton } from 'react-admin';\nimport { useListContext, useResourceContext } from 'ra-core';\nimport FilterWithSave from '../../lib/list/filter/FilterWithSave';\nimport { makeStyles } from '@material-ui/core/styles';\n\nimport Chart from '../../lib/chart/Chart'\nimport PresetButton from '../../lib/list/PresetButton';\n\nimport Higthchart from './Higthchart'\nimport TagHistotyEmpty from './TagSeriesEmpty'\nimport TagSeriesListFilter from \"./TagSeriesListFilter\";\nimport useExporter from './useExporter';\n\n\nconst useStyles = makeStyles(theme => ({\n list: {\n marginTop: theme.spacing(2)\n },\n selectInput: {\n width: 180\n },\n inputRoot: {\n height: 69\n }\n}));\n\n\n\n\n\n\nconst TagSeriesListActions = (props) => {\n const {\n className,\n exporter = false,\n importer = false,\n filters,\n columns,\n ...rest\n } = props;\n const {\n currentSort,\n displayedFilters,\n filterValues,\n basePath,\n showFilter,\n total,\n } = useListContext(props);\n const resource = useResourceContext(rest);\n return (\n <TopToolbar>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })}\n <PresetButton />\n {exporter !== false && (\n <ExportButton\n disabled={total === 0}\n resource={resource}\n sort={currentSort}\n filterValues={filterValues}\n />\n )}\n </TopToolbar>\n );\n};\n\nconst TagSeriesList = (props) => {\n\n const exporter = useExporter()\n\n return (\n <Chart\n {...props}\n perPage={10000}\n empty={<TagHistotyEmpty />}\n exporter={exporter}\n filters={<TagSeriesListFilter />}\n actions={<TagSeriesListActions />}\n filterDefaultValues={{ mode: 'default' }}\n >\n <Higthchart />\n </Chart>\n )\n};\n\nexport default TagSeriesList;","import TagSeriesIcon from '@material-ui/icons/InsertChart';\nimport TagSeriesList from './TagSeriesList';\n\n\nconst TagSeriesName = \"TagSeries\"\n\nconst TagSeriesResource = {\n name: TagSeriesName,\n icon: TagSeriesIcon,\n list: TagSeriesList,\n}\n\nexport default TagSeriesResource;\nexport {\n TagSeriesName,\n TagSeriesIcon,\n TagSeriesList,\n};\n","import React from 'react';\nimport {\n useCheckMinimumRequiredProps,\n useListController,\n ListContextProvider,\n} from 'ra-core';\nimport ListView from './ListView';\n\nconst List = (props) => {\n useCheckMinimumRequiredProps('List', ['children'], props);\n const controllerProps = useListController(props);\n return (\n <ListContextProvider value={controllerProps}>\n <ListView {...props} {...controllerProps} />\n </ListContextProvider>\n );\n};\n\nList.defaultProps = {\n filter: {},\n perPage: 10,\n};\n\nexport default List;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport { useRecordContext, Link } from 'react-admin';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\n\n\n\n\n\nconst stopPropagation = e => e.stopPropagation();\n\nconst NestedField = ({\n children,\n className,\n classes: classesOverride,\n basePath,\n reference,\n resource,\n source,\n link,\n ...props\n}) => {\n\n const record = useRecordContext(props);\n const referenceRecord = get(record, source);\n if (!referenceRecord) return null;\n const rootPath = basePath.replace(resource, reference);\n const resourceLinkPath = !link ? false : (typeof link === 'function') ? link(referenceRecord, reference) : `${rootPath}/${encodeURIComponent(referenceRecord.id)}/${link}`;\n const sanitizeFieldProps = sanitizeFieldRestProps(props)\n\n if (resourceLinkPath) {\n return (\n <Link\n to={resourceLinkPath}\n className={className}\n onClick={stopPropagation}\n >\n {React.cloneElement(children, {\n className: children.props.className,\n record: referenceRecord,\n parent: record,\n resource: reference,\n basePath,\n ...sanitizeFieldProps,\n })}\n </Link>\n );\n }\n\n return React.cloneElement(children, {\n className: `${className} ${children.props.className}`,\n record: referenceRecord,\n parent: record,\n resource: reference,\n basePath,\n ...sanitizeFieldProps,\n });\n}\n\n\nNestedField.propTypes = {\n addLabel: PropTypes.bool,\n basePath: PropTypes.string,\n children: PropTypes.element.isRequired,\n classes: PropTypes.object,\n className: PropTypes.string,\n cellClassName: PropTypes.string,\n headerClassName: PropTypes.string,\n label: PropTypes.string,\n record: PropTypes.object,\n reference: PropTypes.string.isRequired,\n resource: PropTypes.string,\n sortBy: PropTypes.string,\n source: PropTypes.string.isRequired,\n link: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]).isRequired,\n};\n\n\nNestedField.defaultProps = {\n classes: {},\n link: 'show',\n addLabel: true,\n};\n\n\nexport default NestedField;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport SearchIcon from '@material-ui/icons/Search';\nimport { InputAdornment } from '@material-ui/core';\nimport { useTranslate, TextInput } from 'react-admin';\n\n\n\n\n\nconst SearchInput = props => {\n const { classes: classesOverride, ...rest } = props;\n const translate = useTranslate();\n if (props.label) {\n throw new Error(\n \"<SearchInput> isn't designed to be used with a label prop. Use <TextInput> if you need a label.\"\n );\n }\n\n return (\n <TextInput\n label={translate('ra.action.search')}\n resettable\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <SearchIcon color=\"disabled\" />\n </InputAdornment>\n ),\n }}\n {...rest}\n />\n );\n};\n\nSearchInput.propTypes = {\n classes: PropTypes.object,\n};\n\nexport default SearchInput;\n","import React from 'react';\nimport { makeStyles, Chip } from '@material-ui/core';\nimport { useTranslate } from 'react-admin';\n\n\n\nconst useStyles = makeStyles(theme => ({\n chip: {\n marginBottom: theme.spacing(1),\n },\n}), { name: 'RaQuickFilterInput' });\n\n\nconst QuickFilterInput = ({ label }) => {\n const translate = useTranslate();\n const classes = useStyles();\n return <Chip className={classes.chip} label={translate(label)} />;\n};\n\nexport default QuickFilterInput","import React from \"react\";\nimport Filter from \"../../lib/list/filter/Filter\";\nimport SearchInput from \"../../lib/input/SearchInput\";\nimport QuickFilterInput from \"../../lib/input/QuickFilterInput\";\nimport { ReferenceInput, AutocompleteInput, AutocompleteArrayInput, ReferenceArrayInput } from \"react-admin\";\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\nimport CustomSelectArrayInput from '../../lib/input/CustomSelectArrayInput'\nimport ProfileReferenceInput from '../Profile/ProfileReferenceInput';\nimport TreeCatalogSelector from '../Catalog/TreeCatalogSelector'\n\n\n\nconst getSelectedItemsTags = (items, selectedItems) => items.filter(item => !selectedItems.some(selectedItem => selectedItem.id === item.id));\nconst catalogOptionText = item => `${item.name}`\n\nconst AssetListFilter = (props) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <QuickFilterInput source=\"favorite\" label=\"resources.Asset.fields.favorite\" defaultValue={true} />\n <ReferenceInput source=\"type.id\" reference=\"AssetType\" label=\"resources.Asset.fields.type\">\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <ReferenceInput source=\"assetClass.id\" reference=\"AssetClass\" label=\"resources.Asset.fields.assetClass\">\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <CustomSelectArrayInput\n //alwaysOn\n hasSingleSelect\n source=\"catalog\"\n label=\"Каталог\"\n getSelectedItems={getSelectedItemsTags}\n clipLabelsTextWidth={250}\n optionText={catalogOptionText}\n >\n <TreeCatalogSelector resource=\"Catalog\" />\n </CustomSelectArrayInput>\n <ReferenceArrayInput source=\"labelsAndIds\" allowEmpty={false} reference=\"Label\" filter={{ typename: \"Asset\" }} label=\"resources.Asset.fields.labelsAndIds\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"labelsNotAndIds\" allowEmpty={false} reference=\"Label\" filter={{ typename: \"Asset\" }} label=\"resources.Asset.fields.labelsNotAndIds\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ProfileReferenceInput source=\"createdById\" label=\"resources.Asset.fields.createdBy\" reference=\"Profile\" resettable sort={{ field: 'name', order: 'ASC' }} />\n <QuickFilterInput source=\"deleted\" label=\"ra.input.deleted\" defaultValue={true} />\n </Filter>\n);\n\nexport default AssetListFilter;\n","import set from 'lodash/set';\nimport get from 'lodash/get';\nimport isArray from 'lodash/isArray';\nimport isEqual from 'lodash/isEqual';\n\n\n\nconst arrayIndexRegex = /\\[(index)\\]/i;\n\nconst defaultParser = (key, value, model, translate) => value ? value : null\n\nconst sanitizeResource = data => {\n if (!data) return null\n const result = Object.keys(data).reduce((acc, key) => {\n const value = data[key]\n if (key.startsWith('_')) return acc\n\n if (isArray(value)) {\n if (typeof value[0] === 'object' && value[0] !== null) {\n return {\n ...acc,\n [key]: value.map(sanitizeResource),\n [`${key}Ids`]: value.map(({ id }) => id),\n };\n } else {\n return { ...acc, [key]: value };\n }\n }\n\n if (typeof value === 'object' && value !== null) {\n return {\n ...acc,\n [key]: sanitizeResource(value),\n };\n }\n\n return { ...acc, [key]: value };\n }, {});\n\n return result;\n};\n\nconst setValue = (key, record, value) => {\n return set(record, key, value)\n}\n\nconst setArrayValue = (key, record, value) => {\n value.forEach((item, index) => {\n if (item) set(record, key.replace(arrayIndexRegex, `[${index}]`), item)\n });\n return record\n}\n\nexport const buildDataFromRows = (model, translate) => (rows) => {\n const [header, title, ...dataRows] = rows\n const modelKeys = model.map(({ key }) => key)\n const modelKeysisEqualRowsColumns = isEqual(modelKeys, header)\n if (!modelKeysisEqualRowsColumns) throw Error(\"Model keys does not equal columns\")\n\n const records = dataRows.map(row => {\n const record = model.reduce((acc, { key, parse = defaultParser }, index) => {\n const isArrayKey = arrayIndexRegex.test(key)\n const value = get(row, [index])\n if (isArrayKey) {\n const transformedValue = value ? value.split(\"; \") : []\n const parsedValue = transformedValue.map(item => parse(key, item, model, translate))\n return parsedValue ? setArrayValue(key, acc, parsedValue) : acc\n } else {\n const parsedValue = parse(key, value, model, translate)\n return parsedValue ? setValue(key, acc, parsedValue) : acc\n }\n }, {})\n return record\n })\n\n return records.map(sanitizeResource)\n}\n\nexport const buildDataFromRecords = (model, translate) => (records) => {\n\n return records.map(sanitizeResource)\n}\n\n","import { useTranslate } from 'react-admin';\nimport { buildDataFromRows } from './utils';\n\n\n\n\nconst useImporter = (model) => {\n const translate = useTranslate()\n\n\n return {\n format: buildDataFromRows(model, translate),\n model,\n translate,\n }\n}\n\n\nexport default useImporter\n","import { useTranslate } from 'react-admin';\nimport { buildDataFromRecords } from './utils';\n\n\n\n\nconst useImporter = (model) => {\n const translate = useTranslate()\n\n\n return {\n format: buildDataFromRecords(model, translate),\n model,\n translate,\n }\n}\n\n\nexport default useImporter\n","const booleanParser = (key, value, model, translate) => {\n if (value == null) return value\n if (value === translate(\"ra.boolean.true\")) return true\n if (value === translate(\"ra.boolean.false\")) return false\n return value\n}\n\nexport default booleanParser;","import { DateTime } from 'luxon'\n\nconst dateParser = (key, value, model, translate) => {\n if (value == null) return value\n return DateTime.fromFormat(value, \"f\").toUTC().toISO()\n};\n\n\n\nexport default dateParser;","const linkParser = () => undefined;\n\n\n\nexport default linkParser;","function isValidJson(str) {\n if (!str) return true;\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n}\n\n\nconst jsonParser = (key, value, model, record, translate) => {\n return (value)\n ? isValidJson(value)\n ? JSON.parse(value)\n : value\n : null\n};\n\n\n\nexport default jsonParser;","import useImporter from './useImporter';\nimport useXlsxImporter from './useXlsxImporter';\nimport useJsonImporter from './useJsonImporter';\nimport booleanParser from './booleanParser';\nimport dateParser from './dateParser';\nimport linkParser from './linkParser';\nimport jsonParser from './jsonParser';\n\n\n\nexport default useImporter\nexport {\n useXlsxImporter,\n useJsonImporter,\n booleanParser,\n dateParser,\n linkParser,\n jsonParser,\n}","\nimport useXlsxImporter from './useXlsxImporter';\nimport useJsonImporter from './useJsonImporter';\n\nconst useImporter = (model) => {\n return {\n xlsxImporter: useXlsxImporter(model),\n jsonImporter: useJsonImporter(model),\n }\n}\n\n\nexport default useImporter\n","import { dateFormatter, booleanFormatter, enumFormatter, linkFormatter } from '../../lib/exporter';\nimport { dateParser, linkParser, booleanParser } from '../../lib/importer';\n\n// https://github.com/prisma/prisma/issues/5066\n\nconst model = [\n { key: \"id\", header: \"resources.Asset.fields.id\" },\n { key: \"name\", header: \"resources.Asset.fields.name\" },\n { key: \"description\", header: \"resources.Asset.fields.description\" },\n { key: \"createdAt\", header: \"resources.Asset.fields.createdAt\", format: dateFormatter, parse: dateParser },\n { key: \"updatedAt\", header: \"resources.Asset.fields.updatedAt\", format: dateFormatter, parse: dateParser },\n { key: \"deleted\", header: \"resources.Asset.fields.deleted\", format: booleanFormatter, parse: booleanParser },\n { key: \"icon\", header: \"resources.Asset.fields.icon\" },\n // { key: \"parametersOnMap[index].name\", header: [\"resources.Asset.fields.parametersOnMap\", \"resources.Parameter.fields.name\"] },\n { key: \"parametersOnMap[index].id\", header: [\"resources.Asset.fields.parametersOnMap\", \"resources.Parameter.fields.id\"] },\n { key: \"defaultDashboard.name\", header: [\"resources.Asset.fields.defaultDashboard\", \"resources.Dashboard.fields.name\"] },\n { key: \"defaultDashboard.id\", header: [\"resources.Asset.fields.defaultDashboard\", \"resources.Dashboard.fields.id\"] },\n { key: \"dashboards[index].name\", header: [\"resources.Asset.fields.dashboards\", \"resources.Dashboard.fields.name\"] },\n { key: \"dashboards[index].id\", header: [\"resources.Asset.fields.dashboards\", \"resources.Dashboard.fields.id\"] },\n { key: \"type.name\", header: [\"resources.Asset.fields.type\", \"resources.AssetType.fields.name\"] },\n { key: \"type.id\", header: [\"resources.Asset.fields.type\", \"resources.AssetType.fields.id\"] },\n { key: \"assetClass.name\", header: [\"resources.Asset.fields.assetClass\", \"resources.AssetClass.fields.name\"] },\n { key: \"assetClass.id\", header: [\"resources.Asset.fields.assetClass\", \"resources.AssetClass.fields.id\"] },\n { key: \"labels[index].name\", header: [\"resources.Asset.fields.labels\", \"resources.Label.fields.name\"] },\n { key: \"labels[index].id\", header: [\"resources.Asset.fields.labels\", \"resources.Label.fields.id\"] },\n { key: \"link\", header: \"Ccылка\", format: linkFormatter(\"Asset\", \"id\"), parse: linkParser },\n]\n\nexport default model;","import React, { Children, Fragment, cloneElement } from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: \"flex\"\n },\n}), { name: 'WrapperField' });\n\n\nexport const WrapperField = ({ children, className, ...props }) => {\n const classes = useStyles()\n return (\n <div className={classnames(classes.root, className)}>\n {Children.map(children, field => cloneElement(field, { ...props }))}\n </div>\n )\n}\n\n\nexport default WrapperField;\n","import React, { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Tooltip, IconButton } from '@material-ui/core';\nimport StarIcon from '@material-ui/icons/Star';\nimport StarBorderIcon from '@material-ui/icons/StarBorder';\nimport { useMutation, useNotify, useTranslate, CRUD_UPDATE_SUCCESS } from 'react-admin';\n\nconst useDispatchReduxStore = () => {\n const dispatch = useDispatch()\n\n const handleDispatch = (type, payload, resource) => {\n dispatch({\n type,\n payload,\n meta: {\n resource,\n fetchResponse: \"UPDATE\",\n fetchStatus: \"RA/FETCH_END\",\n },\n })\n }\n\n return handleDispatch\n}\n\nconst FavoriteIconButton = ({ resource, cellClassName, color, ...props }) => {\n const { className, record, label = 'ra.action.favorite' } = props\n const notify = useNotify()\n const translate = useTranslate()\n const dispatchReduxStore = useDispatchReduxStore()\n const [mutate, { loading }] = useMutation();\n\n const handleFavorite = useCallback((event) => {\n return mutate(\n {\n type: 'favorite',\n resource,\n payload: { where: record?.id },\n },\n {\n mutationMode: 'pessimistic',\n onSuccess: response => {\n notify('ra.notification.favorited', 'info', {});\n dispatchReduxStore(CRUD_UPDATE_SUCCESS, response, resource)\n },\n onFailure: error => {\n notify('ra.notification.http_error', 'warning');\n },\n })\n }, [mutate, record])\n\n const handleUnfavorite = useCallback((event) => {\n return mutate(\n {\n type: 'unfavorite',\n resource,\n payload: { where: record?.id },\n },\n {\n mutationMode: 'pessimistic',\n onSuccess: response => {\n notify('ra.notification.unfavorited', 'info', {});\n dispatchReduxStore(CRUD_UPDATE_SUCCESS, response, resource)\n },\n onFailure: error => {\n notify('ra.notification.http_error', 'warning');\n },\n })\n }, [mutate, record])\n\n const handleClick = useCallback((event) => {\n event.stopPropagation();\n if (record?.favorite) {\n handleUnfavorite(event)\n }\n else {\n handleFavorite(event)\n }\n }, [handleFavorite, handleUnfavorite, record])\n\n return (\n <Tooltip title={translate(label)} enterDelay={700}>\n <IconButton\n aria-label='favorite'\n className={className}\n size=\"small\"\n color={record?.favorite ? \"primary\" : \"default\"}\n onClick={handleClick}\n disabled={loading}\n >\n {record?.favorite ? <StarIcon /> : <StarBorderIcon />}\n </IconButton>\n </Tooltip>\n );\n}\n\nexport default FavoriteIconButton","import React from \"react\";\nimport { Datagrid, TextField, DateField } from \"react-admin\";\nimport List from \"../../lib/list/List\";\nimport ListActions from \"../../lib/list/ListActions\";\nimport ResourceLinkField from \"../../lib/field/ResourceLinkField\";\nimport NestedField from \"../../lib/field/NestedField\";\nimport NestedArrayField from \"../../lib/field/NestedArrayField\";\nimport LabelChip from \"../Label/LabelChip\";\nimport useListStyles from \"../../lib/list/useListStyles\";\nimport useColumns from '../../lib/list/useColumns';\nimport useDatagridColumns from '../../lib/list/useDatagridColumns';\nimport AssetListFilter from \"./AssetListFilter\";\nimport AssetMoreActionsButton from './AssetMoreActionsButton';\nimport model from \"./assetExportImportModel\";\nimport useExporter from \"../../lib/exporter\";\nimport useImporter from \"../../lib/importer\";\nimport WrapperField from \"../../lib/field/WrapperField\";\nimport DefaultDashboardPlayIconButton from \"../../lib/button/DefaultDashboardPlayIconButton\";\nimport FavoriteIconButton from \"../../lib/button/FavoriteIconButton\";\n\n\n\nexport const AssetList = (props) => {\n const classes = useListStyles()\n const exporter = useExporter(model)\n const importer = useImporter(model)\n\n const columns = useColumns([\n <ResourceLinkField source=\"name\" alwaysOn cellClassName={classes.celllLineClamp} />,\n <TextField source=\"description\" cellClassName={classes.celllLineClamp} />,\n <NestedField source=\"type\" reference=\"AssetType\" sortBy=\"type.name\" link={false} cellClassName={classes.celllLineClamp} >\n <TextField source=\"name\" />\n </NestedField>,\n <NestedField source=\"assetClass\" reference=\"AssetClass\" sortBy=\"assetClass.name\" cellClassName={classes.celllLineClamp}>\n <TextField source=\"name\" />\n </NestedField>,\n <NestedArrayField source=\"labels\" reference=\"Label\" sortable={false}>\n <LabelChip source=\"name\" size=\"small\" />\n </NestedArrayField>,\n <DateField source=\"createdAt\" cellClassName={classes.cellMinWidth} />,\n <DateField source=\"updatedAt\" cellClassName={classes.cellMinWidth} />,\n ]);\n\n const DatagridColumns = useDatagridColumns(columns)\n\n return (\n <List\n {...props}\n actions={<ListActions columns={columns} />}\n exporter={exporter}\n importer={importer}\n filters={<AssetListFilter />}\n >\n <Datagrid>\n <DefaultDashboardPlayIconButton cellClassName={`${classes.cellMinWidth} ${classes.cellAction}`} />\n {DatagridColumns}\n <WrapperField cellClassName={`${classes.cellMinWidth} ${classes.cellButton}`}>\n <FavoriteIconButton />\n <AssetMoreActionsButton />\n </WrapperField>\n </Datagrid>\n </List>\n );\n};\n\nAssetList.defaultProps = {\n sort: { field: \"name\", order: \"ASC\" },\n};\n\nexport default AssetList;\n","import React, { memo } from 'react';\nimport lodashOmit from 'lodash/omit';\nimport Queue from '@material-ui/icons/Queue';\nimport { Link } from 'react-router-dom';\nimport { stringify } from 'query-string';\nimport { useResourceContext, Button } from 'react-admin';\nimport { DateTime } from 'luxon';\n\n\nexport const CloneButton = (props) => {\n const {\n basePath = '',\n label = 'ra.action.clone',\n scrollToTop = true,\n record,\n icon = defaultIcon,\n omit = [\"id\"],\n ...rest\n } = props;\n\n const resource = useResourceContext();\n const pathname = basePath ? `${basePath}/create` : `/${resource}/create`;\n const recordClone = record && {\n ...lodashOmit(record, omit),\n name: `${record.name} - копия от ${DateTime.now().toLocaleString(DateTime.DATETIME_SHORT)}`\n }\n\n return (\n <Button\n component={Link}\n to={\n record\n ? {\n pathname,\n search: stringify({\n source: JSON.stringify(recordClone),\n }),\n state: { _scrollToTop: scrollToTop },\n }\n : pathname\n }\n label={label}\n onClick={stopPropagation}\n {...rest}\n >\n {icon}\n </Button>\n );\n};\n\nconst defaultIcon = <Queue />;\n\n// useful to prevent click bubbling in a datagrid with rowClick\nconst stopPropagation = e => e.stopPropagation();\n\nexport default memo(CloneButton);\n","import React, { Children, cloneElement, isValidElement, useState } from 'react';\nimport Divider from '@material-ui/core/Divider';\nimport { Route } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useRouteMatch } from 'react-router-dom';\nimport { escapePath } from 'ra-core';\nimport { TabbedShowLayoutTabs, getTabFullPath } from 'react-admin';\n\nconst sanitizeRestProps = ({\n children,\n className,\n record,\n resource,\n basePath,\n version,\n initialValues,\n staticContext,\n translate,\n tabs,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles(\n theme => ({\n content: {\n paddingTop: theme.spacing(2),\n },\n }),\n { name: 'RaTabbedShowLayout' }\n);\n\nconst TabbedShowLayout = (props) => {\n const {\n basePath,\n children,\n classes: classesOverride,\n className,\n record,\n resource,\n syncWithLocation = true,\n tabs,\n value,\n version,\n ...rest\n } = props;\n const match = useRouteMatch();\n const classes = useStyles(props);\n const nonNullChildren = Children.toArray(children).filter(\n child => child !== null\n );\n const [tabValue, setTabValue] = useState(0);\n\n const handleTabChange = (event, value) => {\n if (!syncWithLocation) {\n setTabValue(value);\n }\n };\n\n return (\n <div className={className} key={version} {...sanitizeRestProps(rest)}>\n {cloneElement(\n tabs,\n {\n syncWithLocation,\n onChange: handleTabChange,\n value: tabValue,\n },\n nonNullChildren\n )}\n\n <Divider />\n <div className={classes.content}>\n {Children.map(nonNullChildren, (tab, index) =>\n tab && isValidElement(tab) ? (\n syncWithLocation ? (\n <Route\n exact\n path={escapePath(\n getTabFullPath(tab, index, match.url)\n )}\n render={() =>\n cloneElement(tab, {\n context: 'content',\n resource,\n record,\n basePath,\n })\n }\n />\n ) : tabValue === index ? (\n cloneElement(tab, {\n context: 'content',\n resource,\n record,\n basePath,\n })\n ) : null\n ) : null\n )}\n </div>\n </div>\n );\n};\n\nTabbedShowLayout.defaultProps = {\n tabs: <TabbedShowLayoutTabs />,\n};\n\nexport default TabbedShowLayout","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M10.7 17.96c-.82.6-2.26-.83-3.04-1.62-.79-.78-2.22-2.22-1.62-3.04l.37-.52-1.86-1.02c-.94-.52-.83-1.85.16-1.95l3.9-.38c2.75-4.25 5.48-7.9 12.35-7.38.52.04.95.47 1 .99.5 6.87-3.14 9.6-7.39 12.34l-.38 3.91c-.1 1-1.43 1.1-1.95.16l-1.03-1.86-.51.37Zm-3.48 3.01c-1.01 1.02-2.53 1.14-5.15.96-.18-2.62-.06-4.14.96-5.15 1.01-1.01 2.77-.9 3.93.26 1.16 1.16 1.27 2.92.26 3.93Zm6.73-10.92a2.97 2.97 0 1 0 4.2-4.2 2.97 2.97 0 0 0-4.2 4.2Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import gql from 'graphql-tag';\n\n\n\nexport const SINGLE_ASSETCLASS_FRAGMENT = gql`\n fragment SingleAssetClassFragment on AssetClass {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n type { id name }\n assets { id name deleted}\n dashboards { id name deleted}\n defaultDashboard { id name deleted}\n labels { id name deleted color }\n favorite\n icon\n parametersOnMap { id }\n }\n`\n\nexport const MULTIPLE_ASSETCLASS_FRAGMENT = gql`\n fragment MultipleAssetClassFragment on AssetClass {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n type { id name }\n assets { id name deleted}\n dashboards { id name deleted}\n defaultDashboard { id name deleted}\n labels { id name deleted color }\n favorite\n icon\n parametersOnMap { id }\n }\n`","import difference from 'lodash/difference';\nimport isEqual from 'lodash/isEqual';\nimport isNil from 'lodash/isNil';\nimport isArray from 'lodash/isArray';\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current?.id } } : undefined;\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n return (isConnect) ? { connect } : undefined\n}\n\nexport const buildNestedArrayCreateInput = (current = []) => {\n const set = current.map(id => ({ id }))\n const isSet = Boolean(set.length)\n return (isSet) ? { set } : undefined\n}\n\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildNestedArrayUpdateInput = (current = []) => {\n const set = current.map(id => ({ id }))\n const isSet = Boolean(set.length)\n return (isSet) ? { set } : undefined\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = {\n ...data,\n name: data.deleted ? `(Удален) ${data.name}` : data.name,\n assets: data.assets && data.assets.map((item) => ({ ...item, name: item.deleted ? `(Удален) ${item.name}` : item.name })),\n assetsIds: data.assets && data.assets.map(({ id }) => id),\n dashboards: data.dashboards && data.dashboards.map((item) => ({ ...item, name: item.deleted ? `(Удален) ${item.name}` : item.name })),\n dashboardsIds: data.dashboards && data.dashboards.map(({ id }) => id),\n defaultDashboard: data.defaultDashboard && { ...data.defaultDashboard, name: data.defaultDashboard.deleted ? `(Удален) ${data.defaultDashboard.name}` : data.defaultDashboard.name },\n labelsIds: data.labels && data.labels.map(({ id }) => id),\n parametersOnMapIds: data.parametersOnMap && data.parametersOnMap.map(({ id }) => id),\n }\n\n return result;\n};\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n type,\n assets,\n assetsIds,\n dashboards,\n dashboardsIds,\n defaultDashboard,\n favorite,\n parametersOnMap,\n parametersOnMapIds,\n labels,\n labelsIds,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag'\nimport pi from 'lodash/omit';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSETCLASS_FRAGMENT } from './typeDefs';\nimport { buildReferenceArrayUpdateInput, buildReferenceUpdateInput, sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const DEPLOY_ASSETCLASS = gql`\n mutation deployAssetClass($where: AssetClassWhereUniqueInput!, $assetsIds: [ID!]!) {\n data: AssetClass{\n data: deploy(where: $where, assetsIds: $assetsIds) {\n item { ...SingleAssetClassFragment }\n }\n }\n }\n ${SINGLE_ASSETCLASS_FRAGMENT}\n`\n\nexport default (args) => {\n const { id, data } = args\n const { assetsIds } = data\n\n return graphqlClient.request(DEPLOY_ASSETCLASS, {\n where: { id },\n assetsIds,\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import React, { Fragment, useState, useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport MuiButton from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DeployIcon from '../../lib/icons/Deploy';\nimport {\n useTranslate,\n useResourceContext,\n fetchEnd,\n fetchStart,\n useRefresh,\n useNotify,\n Button\n} from 'react-admin';\nimport deploy from '../../dataProvider/GatewayService/AssetClass/deploy';\n\n\n\nconst stopPropagation = event => event.stopPropagation();\n\nconst SynchronizeButton = (props) => {\n const {\n basePath = '',\n label = 'ra.action.synchronize',\n record,\n icon = defaultIcon,\n ...rest\n } = props;\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false)\n const dispatch = useDispatch()\n const refresh = useRefresh();\n const notify = useNotify();\n const resource = useResourceContext();\n const translate = useTranslate();\n\n const handleOpen = useCallback((event) => {\n stopPropagation(event)\n setOpen(true);\n\n }, [setOpen]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleDeploy = useCallback(event => {\n dispatch(fetchStart())\n setLoading(true)\n\n deploy({ id: record.assetClass.id, data: { id: record?.assetClass?.id, assetsIds: [record.id] } })\n .then(response => {\n notify('ra.notification.synchronized', { messageArgs: { smart_count: 1 } });\n refresh();\n })\n .catch(error => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', { type: 'warning' });\n refresh();\n })\n .finally(() => {\n dispatch(fetchEnd());\n setLoading(false);\n setOpen(false);\n });\n }, [deploy, record, dispatch, setLoading, setOpen]);\n\n if (!record) return null\n\n const disabled = !(record.id && record.assetClass && record.assetClass.id)\n const displayedLabel = label && translate(label, { _: label });\n return (\n <Fragment>\n <Button\n\n onClick={handleOpen}\n color={loading ? 'default' : 'primary'}\n aria-label={displayedLabel}\n disabled={disabled || loading}\n label={displayedLabel}\n {...rest}\n >\n {icon}\n </Button>\n <Dialog\n open={open}\n onClose={handleClose}\n aria-labelledby=\"synchronize_title\"\n aria-describedby=\"synchronize_content\"\n >\n <DialogTitle id=\"synchronize_title\">\n {translate(\"ra.message.synchronize_title\", { assetName: record.name, assetClassName: record.assetClass?.name })}\n </DialogTitle>\n <DialogContent>\n <DialogContentText id=\"synchronize_content\">\n {translate(\"ra.message.synchronize_content\", { assetName: record.name, assetClassName: record.assetClass?.name })}\n </DialogContentText>\n <DialogContentText>\n {translate(\"ra.message.synchronize_question\", { assetName: record.name, assetClassName: record.assetClass?.name })}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <MuiButton\n disabled={loading}\n onClick={handleClose}\n >\n {translate(\"ra.action.cancel\", { _: \"Cancel\" })}\n </MuiButton>\n <MuiButton\n disabled={loading}\n onClick={handleDeploy}\n color=\"primary\"\n autoFocus>\n {displayedLabel}\n </MuiButton>\n </DialogActions>\n </Dialog>\n </Fragment>\n\n );\n};\n\nconst defaultIcon = <DeployIcon />;\n\nSynchronizeButton.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n};\n\n\n\nexport default SynchronizeButton;\n","import React from \"react\";\nimport Filter from \"../../lib/list/filter/Filter\";\nimport SearchInput from '../../lib/input/SearchInput';\nimport QuickFilterInput from '../../lib/input/QuickFilterInput';\nimport ProfileReferenceInput from '../Profile/ProfileReferenceInput';\nimport { AutocompleteArrayInput, ReferenceArrayInput } from \"react-admin\";\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n\nconst DashboardListFilter = (props) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <QuickFilterInput source=\"favorite\" label=\"resources.Dashboard.fields.favorite\" defaultValue={true} />\n <ReferenceArrayInput source=\"labelsAndIds\" allowEmpty={false} reference=\"Label\" filter={{ typename: \"Dashboard\" }} label=\"resources.Dashboard.fields.labelsAndIds\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"labelsNotAndIds\" allowEmpty={false} reference=\"Label\" filter={{ typename: \"Dashboard\" }} label=\"resources.Dashboard.fields.labelsNotAndIds\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ProfileReferenceInput source=\"createdById\" label=\"resources.Dashboard.fields.createdBy\" reference=\"Profile\" resettable sort={{ field: 'name', order: 'ASC' }} />\n <QuickFilterInput source=\"deleted\" label=\"ra.input.deleted\" defaultValue={true} />\n </Filter>\n);\n\n\n\nexport default DashboardListFilter;","import React from \"react\";\nimport MoreButton from '../../lib/button/MoreButton';\nimport ShowButtonAsMenuItem from '../../lib/button/ShowButtonAsMenuItem';\nimport PlayButtonAsMenuItem from '../../lib/button/PlayButtonAsMenuItem';\nimport EditButtonAsMenuItem from '../../lib/button/EditButtonAsMenuItem';\nimport CloneButtonAsMenuItem from '../../lib/button/CloneButtonAsMenuItem';\nimport RemoveButtonAsMenuItem from '../../lib/button/RemoveButtonAsMenuItem';\nimport RestoreButtonAsMenuItem from '../../lib/button/RestoreButtonAsMenuItem';\nimport DeleteButtonAsMenuItem from '../../lib/button/DeleteButtonAsMenuItem';\nimport DefaultDashboardPlayButtonAsMenuItem from '../../lib/button/DefaultDashboardPlayButtonAsMenuItem';\nimport permissions from \"../../authProvider/abilityProvider\";\n\n\n\nconst DashboardMoreActionsButton = (props) => {\n const { resource, record } = props\n const deleted = record?.deleted\n\n return (\n <MoreButton {...props}>\n {permissions.can('getOne', resource) && <PlayButtonAsMenuItem />}\n {permissions.can('getOne', resource) && <ShowButtonAsMenuItem />}\n {permissions.can('update', resource) && <EditButtonAsMenuItem />}\n {permissions.can('create', resource) && <CloneButtonAsMenuItem />}\n {permissions.can('remove', resource) && !deleted && <RemoveButtonAsMenuItem />}\n {permissions.can('restore', resource) && deleted && <RestoreButtonAsMenuItem />}\n {permissions.can('restore', resource) && deleted && <DeleteButtonAsMenuItem />}\n </MoreButton>\n );\n}\n\nexport default DashboardMoreActionsButton;\n","import { dateFormatter, booleanFormatter, enumFormatter, linkFormatter, jsonFormatter } from '../../lib/exporter';\nimport { dateParser, linkParser, booleanParser, jsonParser } from '../../lib/importer';\n\n// https://github.com/prisma/prisma/issues/5066\n\nconst model = [\n { key: \"id\", header: \"resources.Dashboard.fields.id\" },\n { key: \"name\", header: \"resources.Dashboard.fields.name\" },\n { key: \"description\", header: \"resources.Dashboard.fields.description\" },\n { key: \"createdAt\", header: \"resources.Dashboard.fields.createdAt\", format: dateFormatter, parse: dateParser },\n { key: \"updatedAt\", header: \"resources.Dashboard.fields.updatedAt\", format: dateFormatter, parse: dateParser },\n { key: \"deleted\", header: \"resources.Dashboard.fields.deleted\", format: booleanFormatter, parse: booleanParser },\n { key: \"variables\", header: \"resources.Dashboard.fields.variables\", format: jsonFormatter, parse: jsonParser },\n { key: \"links\", header: \"resources.Dashboard.fields.links\", format: jsonFormatter, parse: jsonParser },\n { key: \"widgetsOnDashboard\", header: \"resources.Dashboard.fields.widgetsOnDashboard\", format: jsonFormatter, parse: jsonParser },\n { key: \"assets[index].name\", header: [\"resources.Dashboard.fields.assets\", \"resources.Asset.fields.name\"] },\n { key: \"assets[index].id\", header: [\"resources.Dashboard.fields.assets\", \"resources.Asset.fields.id\"] },\n { key: \"assetClasses[index].name\", header: [\"resources.Dashboard.fields.assetClasses\", \"resources.AssetClass.fields.name\"] },\n { key: \"assetClasses[index].id\", header: [\"resources.Dashboard.fields.assetClasses\", \"resources.AssetClass.fields.id\"] },\n { key: \"labels[index].name\", header: [\"resources.Dashboard.fields.labels\", \"resources.Label.fields.name\"] },\n { key: \"labels[index].id\", header: [\"resources.Dashboard.fields.labels\", \"resources.Label.fields.id\"] },\n { key: \"link\", header: \"Ccылка\", format: linkFormatter(\"Dashboard\", \"id\"), parse: linkParser },\n]\n\nexport default model;","import React from \"react\";\nimport { Datagrid, TextField, DateField } from 'react-admin';\nimport List from '../../lib/list/List';\nimport ListActions from '../../lib/list/ListActions';\nimport useColumns from '../../lib/list/useColumns';\nimport useDatagridColumns from '../../lib/list/useDatagridColumns';\nimport useListStyles from '../../lib/list/useListStyles';\nimport ResourceLinkField from '../../lib/field/ResourceLinkField';\nimport DashboardListFilter from './DashboardListFilter';\nimport DashboardMoreActionsButton from './DashboardMoreActionsButton';\nimport model from \"./dashboardExportImportModel\";\nimport useExporter from \"../../lib/exporter\";\nimport useImporter from \"../../lib/importer\";\nimport WrapperField from \"../../lib/field/WrapperField\";\nimport FavoriteIconButton from \"../../lib/button/FavoriteIconButton\";\nimport NestedArrayField from \"../../lib/field/NestedArrayField\";\nimport LabelChip from \"../Label/LabelChip\";\n\n\n\nexport const DashboardList = (props) => {\n const classes = useListStyles();\n const exporter = useExporter(model)\n const importer = useImporter(model)\n\n const columns = useColumns([\n <ResourceLinkField source=\"name\" linkTo=\"play\" alwaysOn cellClassName={classes.celllLineClamp} />,\n <TextField source=\"description\" cellClassName={classes.celllLineClamp} />,\n <NestedArrayField source=\"labels\" reference=\"Label\" sortable={false}>\n <LabelChip source=\"name\" size=\"small\" />\n </NestedArrayField>,\n <DateField source=\"createdAt\" cellClassName={classes.cellMinWidth} />,\n <DateField source=\"updatedAt\" cellClassName={classes.cellMinWidth} />,\n ]);\n\n const DatagridColumns = useDatagridColumns(columns)\n\n return (\n <List\n {...props}\n actions={<ListActions columns={columns} />}\n exporter={exporter}\n importer={importer}\n filters={<DashboardListFilter />}\n >\n <Datagrid >\n {DatagridColumns}\n <WrapperField cellClassName={`${classes.cellMinWidth} ${classes.cellButton}`}>\n <FavoriteIconButton />\n <DashboardMoreActionsButton />\n </WrapperField>\n </Datagrid>\n </List>\n )\n};\n\nDashboardList.defaultProps = {\n sort: { field: 'name', order: 'ASC' }\n}\n\n\n\nexport default DashboardList;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n ShowContextProvider,\n ResourceContextProvider,\n useShowController,\n} from 'ra-core';\nimport { ShowView } from './ShowView';\n\n\nexport const Show = (props) => {\n const controllerProps = useShowController(props);\n\n return (\n <ResourceContextProvider value={props.resource}>\n <ShowContextProvider value={controllerProps}>\n <ShowView {...props} />\n </ShowContextProvider>\n </ResourceContextProvider>\n )\n};\n\nShow.propTypes = {\n actions: PropTypes.element,\n breadcrumbs: PropTypes.element,\n aside: PropTypes.element,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n hasCreate: PropTypes.bool,\n hasEdit: PropTypes.bool,\n hasList: PropTypes.bool,\n hasShow: PropTypes.bool,\n id: PropTypes.any.isRequired,\n resource: PropTypes.string,\n title: PropTypes.node,\n};\n\nexport default Show","import React from \"react\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport { DateField, TextField, ReferenceField } from 'react-admin';\nimport SimpleShowLayout from '../../lib/show/SimpleShowLayout';\nimport TextCopyField from '../../lib/field/TextCopyField';\nimport { dateTimeOptions } from '../../utils';\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n width: theme.spacing(45)\n },\n}));\n\nconst DashboardAside = (props) => {\n const classes = useStyles();\n\n return (\n <SimpleShowLayout\n {...props}\n className={classes.root}\n component=\"div\"\n >\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <ReferenceField source=\"createdById\" reference=\"Profile\" label=\"resources.Dashboard.fields.createdBy\" link={false}>\n <TextField source=\"name\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={dateTimeOptions} />\n <DateField source=\"updatedAt\" options={dateTimeOptions} />\n <TextCopyField source=\"id\" />\n </SimpleShowLayout>\n )\n}\n\nexport default DashboardAside;","import React, { memo, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport { Link } from 'react-router-dom';\nimport { linkToRecord, useResourceContext, Button } from 'react-admin';\n\n\n\nconst PlayButton = (props) => {\n const {\n basePath = '',\n icon = defaultIcon,\n label = 'ra.action.play',\n record,\n scrollToTop = true,\n ...rest\n } = props;\n const resource = useResourceContext();\n return (\n <Button\n component={Link}\n to={useMemo(\n () => ({\n pathname: record\n ? `${linkToRecord(\n basePath || `/${resource}`,\n record.id\n )}/play`\n : '',\n state: { _scrollToTop: scrollToTop },\n }),\n [basePath, record, resource, scrollToTop]\n )}\n label={label}\n onClick={stopPropagation}\n {...rest}\n >\n {icon}\n </Button>\n );\n};\n\nconst defaultIcon = <PlayArrowIcon />;\n\nconst stopPropagation = e => e.stopPropagation();\n\nPlayButton.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n scrollToTop: PropTypes.bool,\n};\n\nconst PurePlayButton = memo(\n PlayButton,\n (props, nextProps) =>\n (props.record && nextProps.record\n ? props.record.id === nextProps.record.id\n : props.record == nextProps.record) && // eslint-disable-line eqeqeq\n props.basePath === nextProps.basePath &&\n props.to === nextProps.to &&\n props.disabled === nextProps.disabled\n);\n\nexport default PurePlayButton;\n","import React, { forwardRef } from 'react';\nimport { Link } from 'react-router-dom';\nimport Chip from '@material-ui/core/Chip';\nimport DashboardIcon from '@material-ui/icons/Dashboard';\nimport AirplayIcon from '@material-ui/icons/Airplay';\nimport LanguageIcon from '@material-ui/icons/Language';\n\n\n\nconst InternalLinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} {...props} />);\n\nconst DashboardLinkChip = forwardRef((props, ref) => {\n const { record, ...rest } = props;\n const { name, url } = record\n\n return (\n <Chip\n label={name}\n component={InternalLinkRef}\n ref={ref}\n to={url}\n icon={<DashboardIcon fontSize=\"small\" />}\n clickable\n />\n );\n});\n\nconst InternalLinkChip = forwardRef((props, ref) => {\n const { record, ...rest } = props;\n const { name, url } = record\n\n return (\n <Chip\n label={name}\n component={InternalLinkRef}\n ref={ref}\n to={url}\n icon={<AirplayIcon fontSize=\"small\" />}\n clickable\n />\n\n\n );\n});\n\nconst ExternalLinkChip = (props) => {\n const { record, ...rest } = props;\n const { name, url } = record\n\n return (\n <Chip\n label={name}\n component=\"a\"\n href={url}\n\n icon={<LanguageIcon fontSize=\"small\" />}\n clickable\n />\n );\n};\n\n\nconst DashboardEnchaencesLinkChip = (props) => {\n const { record } = props\n if (!record) return null\n\n switch (record.type) {\n case \"DASHBOARD\": return (<DashboardLinkChip {...props} />)\n case \"INTERNAL\": return (<InternalLinkChip {...props} />)\n case \"EXTERNAL\": return (<ExternalLinkChip {...props} />)\n }\n\n};\n\n// useful to prevent click bubbling in a datagrid with rowClick\nconst stopPropagation = e => e.stopPropagation();\n\n\n\nexport default DashboardEnchaencesLinkChip;\n","import React, { useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport StarIcon from '@material-ui/icons/Star';\nimport StarBorderIcon from '@material-ui/icons/StarBorder';\nimport { useMutation, useNotify, Button, CRUD_UPDATE_SUCCESS } from 'react-admin';\n\n\nconst useDispatchReduxStore = () => {\n const dispatch = useDispatch()\n\n const handleDispatch = (type, payload, resource) => {\n dispatch({\n type,\n payload,\n meta: {\n resource,\n fetchResponse: \"UPDATE\",\n fetchStatus: \"RA/FETCH_END\",\n },\n })\n }\n\n return handleDispatch\n}\n\nconst FavoriteIconButton = ({ resource, cellClassName, color, ...props }) => {\n const { className, record, label = 'ra.action.favorite' } = props\n const notify = useNotify();\n const dispatchReduxStore = useDispatchReduxStore()\n const [mutate, { loading }] = useMutation();\n\n const handleFavorite = useCallback((event) => {\n return mutate(\n {\n type: 'favorite',\n resource,\n payload: { where: record?.id },\n },\n {\n mutationMode: 'pessimistic',\n onSuccess: response => {\n notify('ra.notification.favorited', 'info', {});\n dispatchReduxStore(CRUD_UPDATE_SUCCESS, response, resource)\n },\n onFailure: error => {\n notify('ra.notification.http_error', 'warning');\n },\n })\n }, [mutate, record])\n\n const handleUnfavorite = useCallback((event) => {\n return mutate(\n {\n type: 'unfavorite',\n resource,\n payload: { where: record?.id },\n },\n {\n mutationMode: 'pessimistic',\n onSuccess: response => {\n notify('ra.notification.unfavorited', 'info', {});\n dispatchReduxStore(CRUD_UPDATE_SUCCESS, response, resource)\n },\n onFailure: error => {\n notify('ra.notification.http_error', 'warning');\n },\n })\n }, [mutate, record])\n\n const handleClick = useCallback((event) => {\n event.stopPropagation();\n if (record?.favorite) {\n handleUnfavorite(event)\n }\n else {\n handleFavorite(event)\n }\n }, [handleFavorite, handleUnfavorite, record])\n\n return (\n <Button\n label={label}\n aria-label='favorite'\n className={className}\n onClick={handleClick}\n disabled={loading}\n >\n {record?.favorite ? <StarIcon /> : <StarBorderIcon />}\n </Button>\n );\n}\n\nexport default FavoriteIconButton","import React from \"react\";\nimport { ChipField, EditButton, TopToolbar } from 'react-admin';\nimport CloneButton from '../../lib/button/CloneButton';\nimport Show from '../../lib/show/Show';\nimport SimpleShowLayout from '../../lib/show/SimpleShowLayout';\nimport TitleForRecord from '../../lib/layout/TitleForRecord';\nimport DashboardAside from './DashboardAside';\nimport PlayButton from '../../lib/button/PlayButton';\nimport NestedArrayField from '../../lib/field/NestedArrayField';\nimport DashboardLinkChip from '../../lib/dashboard/DashboardLinkChip';\nimport FavoriteButton from \"../../lib/button/FavoriteButton\";\nimport LabelChip from \"../Label/LabelChip\";\n\n\nconst DashboardShowActions = ({ basePath, data, hasEdit, hasCreate }) => {\n\n return (\n <TopToolbar>\n <FavoriteButton basePath={basePath} record={data} resource=\"Dashboard\" />\n <PlayButton basePath={basePath} record={data} />\n {hasCreate && <CloneButton basePath={basePath} record={data} />}\n {hasEdit && <EditButton basePath={basePath} record={data} />}\n </TopToolbar>\n )\n};\n\nconst linkToWidgetOnDashboard = (parent, reference, record, resource) => `/${resource}/${record.id}/${reference}/${parent.id}/show`\n\n\nexport const DashboardShow = (props) => {\n\n return (\n <Show\n {...props}\n actions={<DashboardShowActions />}\n aside={<DashboardAside />}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n <SimpleShowLayout>\n <NestedArrayField source=\"widgetsOnDashboard\" reference=\"WidgetOnDashboard\" link={linkToWidgetOnDashboard}>\n <ChipField source=\"name\" />\n </NestedArrayField>\n <NestedArrayField source=\"links\" link={false}>\n <DashboardLinkChip />\n </NestedArrayField>\n <NestedArrayField source=\"assetClasses\" reference=\"AssetClass\" label=\"resources.Dashboard.fields.assetClasses\" link=\"show\">\n <ChipField source=\"name\" />\n </NestedArrayField>\n <NestedArrayField source=\"assets\" reference=\"Asset\" label=\"resources.Dashboard.fields.assets\" link=\"show\" take={10} >\n <ChipField source=\"name\" />\n </NestedArrayField>\n <NestedArrayField source=\"labels\" reference=\"Label\">\n <LabelChip source=\"name\" />\n </NestedArrayField>\n </SimpleShowLayout>\n </Show>\n )\n};\n\n\n\nexport default DashboardShow;","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useCreateContext, useTranslate } from 'react-admin';\nimport DashboardBreadcrumbItem from './DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from './ListBreadcrumbItem';\nimport BreadcrumbItem from './BreadcrumbItem';\n\n\n\n\nconst ViewBreadcrumbs = (props) => {\n const translate = useTranslate();\n const contextProps = useCreateContext();\n\n return (\n <Breadcrumbs aria-label=\"breadcrumb\">\n <DashboardBreadcrumbItem {...contextProps} />\n <ListBreadcrumbItem {...contextProps} />\n <BreadcrumbItem>{translate(\"ra.action.create\")}</BreadcrumbItem>\n </Breadcrumbs>\n );\n};\n\nexport default ViewBreadcrumbs\n","import React, { Children, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport { useCreateContext } from 'ra-core';\nimport Paper from '@material-ui/core/Paper';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { TitleForRecord } from 'react-admin';\nimport DefaultCreateBreadcrumbs from '../breadcrumbs/CreateBreadcrumbs';\n\n\nexport const CreateView = (props) => {\n const {\n actions,\n aside,\n breadcrumbs,\n children,\n classes: classesOverride,\n className,\n component: Content,\n title,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n\n const {\n basePath,\n defaultTitle,\n hasList,\n record,\n redirect,\n resource,\n save,\n saving,\n version,\n } = useCreateContext(props);\n\n return (\n <div\n className={classnames('create-page', classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n <TitleForRecord\n title={title}\n record={record}\n defaultTitle={defaultTitle}\n />\n {breadcrumbs}\n {actions &&\n cloneElement(actions, {\n basePath,\n resource,\n hasList,\n // Ensure we don't override any user provided props\n ...actions.props,\n })}\n <div\n className={classnames(classes.main, {\n [classes.noActions]: !actions,\n })}\n >\n <Content className={classes.card}>\n {cloneElement(Children.only(children), {\n basePath,\n record,\n redirect:\n typeof children.props.redirect === 'undefined'\n ? redirect\n : children.props.redirect,\n resource,\n save:\n typeof children.props.save === 'undefined'\n ? save\n : children.props.save,\n saving,\n version,\n })}\n </Content>\n {aside &&\n cloneElement(aside, {\n basePath,\n record,\n resource,\n save:\n typeof children.props.save === 'undefined'\n ? save\n : children.props.save,\n saving,\n version,\n })}\n </div>\n </div>\n );\n};\n\nCreateView.propTypes = {\n actions: PropTypes.element,\n aside: PropTypes.element,\n basePath: PropTypes.string,\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n defaultTitle: PropTypes.any,\n hasList: PropTypes.bool,\n hasShow: PropTypes.bool,\n record: PropTypes.object,\n redirect: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n resource: PropTypes.string,\n save: PropTypes.func,\n title: PropTypes.node,\n onSuccess: PropTypes.func,\n onFailure: PropTypes.func,\n setOnSuccess: PropTypes.func,\n setOnFailure: PropTypes.func,\n setTransform: PropTypes.func,\n};\n\nCreateView.defaultProps = {\n classes: {},\n component: Paper,\n breadcrumbs: <DefaultCreateBreadcrumbs />\n};\n\nconst useStyles = makeStyles(\n theme => ({\n root: {},\n main: {\n display: 'flex',\n },\n noActions: {\n [theme.breakpoints.up('sm')]: {\n marginTop: '1em',\n },\n },\n card: {\n flex: '1 1 auto',\n },\n }),\n { name: 'RaCreate' }\n);\n\nconst sanitizeRestProps = ({\n basePath = null,\n defaultTitle = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n history = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n onFailure = null,\n onFailureRef = null,\n onSuccess = null,\n onSuccessRef = null,\n options = null,\n permissions = null,\n save = null,\n saving = null,\n setOnFailure = null,\n setOnSuccess = null,\n setTransform = null,\n transform = null,\n transformRef = null,\n ...rest\n}) => rest;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n CreateContextProvider,\n ResourceContextProvider,\n useCheckMinimumRequiredProps,\n useCreateController,\n} from 'ra-core';\n\nimport { CreateView } from './CreateView';\n\nexport const Create = (props) => {\n useCheckMinimumRequiredProps('Create', ['children'], props);\n const controllerProps = useCreateController(props);\n const body = (\n <CreateContextProvider value={controllerProps}>\n <CreateView {...props} {...controllerProps} />\n </CreateContextProvider>\n );\n return props.resource ? (\n // support resource override via props\n <ResourceContextProvider value={props.resource}>\n {body}\n </ResourceContextProvider>\n ) : (\n body\n );\n};\n\nCreate.propTypes = {\n actions: PropTypes.element,\n aside: PropTypes.element,\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n hasCreate: PropTypes.bool,\n hasEdit: PropTypes.bool,\n hasShow: PropTypes.bool,\n resource: PropTypes.string,\n title: PropTypes.node,\n record: PropTypes.object,\n hasList: PropTypes.bool,\n successMessage: PropTypes.string,\n onSuccess: PropTypes.func,\n onFailure: PropTypes.func,\n transform: PropTypes.func,\n};\n\nexport default Create;\n","import React from \"react\";\nimport { AutocompleteArrayInput } from 'react-admin';\n\n\nconst variables = [\n { id: \"assetId\", name: 'resources.Dashboard.variables.assetId' },\n { id: \"parameterId\", name: 'resources.Dashboard.variables.parameterId' },\n { id: \"range\", name: 'resources.Dashboard.variables.range' }\n]\n\nconst DashboardVariablesInput = (props) => {\n return (\n <AutocompleteArrayInput {...props} choices={variables} />\n )\n};\n\n\n\nexport default DashboardVariablesInput;","import React, { useCallback } from \"react\";\nimport get from 'lodash/get';\nimport { useSelector } from 'react-redux';\nimport { useForm } from 'react-final-form';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ArrayInput, SimpleFormIterator, FormDataConsumer, TextInput, ReferenceInput, AutocompleteInput, required, maxLength } from 'react-admin';\nimport EnumInput from '../../lib/input/EnumInput';\n\n\n\nconst useStyles = makeStyles(theme => ({\n form: {\n display: \"flex\",\n },\n name: {\n marginLeft: 16,\n },\n url: {\n marginLeft: 16,\n flexGrow: 1,\n minWidth: 256\n },\n}));\n\n// const defautltValue = [\n// { date: \"2012-08-09T00:00:00.000Z\", url: \"http://example.com/bar/baz.html\" }\n// ]\n\nconst dashboardParser = input => {\n const record = input ? [null, \"Dashboard\", input, \"play\"].join('/') : input\n return record\n}\nconst dashboardFormatter = record => {\n const input = record ? record.split('/')[2] : record\n return input\n}\n\nconst validateType = [required()]\nconst validateName = [required(), maxLength(128)]\nconst validateUrl = [required()]\n\nconst DashboardLinksInput = (props) => {\n const classes = useStyles()\n\n return (\n <ArrayInput {...props} >\n <SimpleFormIterator classes={{ form: classes.form }}>\n <EnumInput source=\"type\" name=\"DashboardLinkType\" option=\"resources.Dashboard.enums.linkType\" label=\"resources.Dashboard.links.type\" validate={validateType} initialValue=\"INTERNAL\" />\n <FormDataConsumer formClassName={classes.url} fullWidth>\n {({ formData, scopedFormData, getSource, ...rest }) => {\n return scopedFormData ?\n scopedFormData.type === \"DASHBOARD\" ? (\n <DashboardLinksDashboardInput {...rest} source={getSource(\"url\")} reference=\"Dashboard\" format={dashboardFormatter} parse={dashboardParser} validate={validateUrl} label=\"resources.Dashboard.links.dashboard\" />\n ) : (\n <TextInput {...rest} source={getSource(\"url\")} validate={validateUrl} label=\"resources.Dashboard.links.url\" />\n )\n : null\n }}\n </FormDataConsumer>\n <TextInput source=\"name\" label=\"resources.Dashboard.links.name\" validate={validateName} formClassName={classes.name} />\n </SimpleFormIterator>\n </ArrayInput>\n )\n};\n\nconst DashboardLinksDashboardInput = (props) => {\n const { id } = props\n const form = useForm();\n const dashboardsSelector = useSelector(state => get(state, `admin.resources.Dashboard.data`));\n\n const handleChange = useCallback((value) => {\n const dashboard = dashboardsSelector[value]\n if (dashboard) {\n form.change(`${id}.name`, dashboard.name)\n }\n }, [id, dashboardsSelector]);\n\n return (\n\n <ReferenceInput {...props} onChange={handleChange}>\n <AutocompleteInput />\n </ReferenceInput>\n\n )\n};\n\n\nexport default DashboardLinksInput;","import { required, maxLength } from 'react-admin';\n\n\n\nconst assetsIdsValidation = (message = \"ra.validation.assetsByVariables\") => (assetsIds, { variables }) => {\n if ((Array.isArray(variables) && variables.includes(\"assetId\")) && !(Array.isArray(assetsIds) && assetsIds.length > 0)) return message\n return undefined;\n};\n\nexport const validateName = [required(), maxLength(128)];\nexport const validateAssetsIds = [assetsIdsValidation()];","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n column: {\n margin: \"auto 0 \"\n },\n row: {\n margin: \"0 auto\"\n },\n all: {\n margin: \"auto\"\n },\n}),\n { name: 'MySpacer' }\n);\n\n\nconst Spacer = (props) => {\n const { variant = 'row' } = props;\n const classes = useStyles();\n\n return (\n <div\n className={classnames({\n [classes.all]: variant === \"all\",\n [classes.row]: variant === \"row\",\n [classes.column]: variant === \"column\",\n })}\n >\n {/*   */}\n </div>\n );\n}\n\nSpacer.propTypes = {\n variant: PropTypes.oneOf([\n 'row',\n 'column',\n 'all',\n ]),\n};\n\n\nexport default Spacer","import React from \"react\";\nimport { SimpleForm, TextInput, ReferenceArrayInput, AutocompleteArrayInput, Toolbar,SaveButton } from 'react-admin';\nimport Create from '../../lib/create/Create';\nimport DashboardVariablesInput from './DashboardVariablesInput';\nimport DashboardLinksInput from './DashboardLinksInput';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\nimport { validateName, validateAssetsIds } from './validation';\nimport Spacer from '../../lib/layout/Spacer';\n\nconst DashboardCreateToolbar = props => {\n return (\n <Toolbar {...props} >\n <SaveButton submitOnEnter={true} disabled={props.pristine} redirect=\"list\" />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <Spacer variant=\"row\" />\n </Toolbar>\n )\n };\n\nconst DashboardCreate = (props) => {\n return (\n <Create {...props}>\n <SimpleForm toolbar={<DashboardCreateToolbar />}>\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <DashboardVariablesInput source=\"variables\" fullWidth />\n <DashboardLinksInput source=\"links\" fullWidth />\n <ReferenceArrayInput source=\"assetClassesIds\" reference=\"AssetClass\" label=\"resources.Dashboard.fields.assetClasses\" fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"assetsIds\" reference=\"Asset\" label=\"resources.Dashboard.fields.assets\" fullWidth validate={validateAssetsIds}>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"labelsIds\" reference=\"Label\" label=\"resources.Dashboard.fields.labels\" filter={{ typename: \"Dashboard\" }} fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n </SimpleForm>\n </Create>\n )\n};\n\n\n\n\n\nexport default DashboardCreate;","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useEditContext, useTranslate } from 'react-admin';\nimport DashboardBreadcrumbItem from './DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from './ListBreadcrumbItem';\nimport RecordBreadcrumbItem from './RecordBreadcrumbItem';\nimport BreadcrumbItem from './BreadcrumbItem';\n\n\n\n\n\nconst EditBreadcrumbs = (props) => {\n const contextProps = useEditContext();\n const translate = useTranslate();\n\n return (\n <Breadcrumbs aria-label=\"breadcrumb\">\n <DashboardBreadcrumbItem {...contextProps} />\n <ListBreadcrumbItem {...contextProps} />\n <RecordBreadcrumbItem {...contextProps} {...props} />\n <BreadcrumbItem>{translate(\"ra.action.edit\")}</BreadcrumbItem>\n </Breadcrumbs>\n );\n};\n\nexport default EditBreadcrumbs\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useEditContext, TopToolbar, DeleteButton } from 'react-admin';\nimport RestoreButton from '../button/RestoreButton';\n\n\nconst sanitizeRestProps = ({\n basePath,\n className,\n hasEdit,\n hasList,\n resource,\n ...rest\n}) => rest;\n\nconst EditRemovedActions = ({ className, permissions, ...rest }) => {\n const { basePath, record, resource } = useEditContext(rest);\n return (\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\n {permissions?.can('restore', resource) && <RestoreButton basePath={basePath} record={record} />}\n {permissions?.can('delete', resource) && <DeleteButton basePath={basePath} record={record} mutationMode=\"optimistic\" undoable={false} />}\n </TopToolbar>\n );\n};\n\nEditRemovedActions.propTypes = {\n basePath: PropTypes.string,\n className: PropTypes.string,\n data: PropTypes.object,\n hasCreate: PropTypes.bool,\n hasEdit: PropTypes.bool,\n hasShow: PropTypes.bool,\n hasList: PropTypes.bool,\n resource: PropTypes.string,\n};\n\n\nexport default EditRemovedActions","import React, { Children, cloneElement } from 'react';\nimport PropTypes from 'prop-types';\nimport Card from '@material-ui/core/Card';\nimport CardContent from '@material-ui/core/CardContent';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { ComponentPropType, useEditContext } from 'ra-core';\nimport { EditActions as DefaultActions, TitleForRecord } from 'react-admin';\nimport DefaultEditBreadcrumbs from '../breadcrumbs/EditBreadcrumbs';\nimport EditRemovedActions from './EditRemovedActions';\n\n\nexport const EditView = (props) => {\n const {\n actions,\n aside,\n breadcrumbs,\n children,\n classes: classesOverride,\n className,\n component: Content,\n title,\n undoable,\n mutationMode,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n\n const {\n basePath,\n defaultTitle,\n hasList,\n hasShow,\n hasCreate,\n record,\n redirect,\n resource,\n save,\n saving,\n version,\n } = useEditContext(props);\n const deleted = record?.deleted\n\n if (!record) return null\n if (!children) return null\n\n const finalActions = deleted ? (\n <EditRemovedActions permissions={props.permissions} />\n ) : typeof actions === 'undefined' && hasShow ? (\n <DefaultActions />\n ) : (\n actions\n );\n\n return (\n <div\n className={classnames('edit-page', classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n <TitleForRecord\n title={title}\n record={record}\n defaultTitle={defaultTitle}\n />\n\n <div className={classes.main}>\n {breadcrumbs}\n {finalActions &&\n cloneElement(finalActions, {\n basePath,\n data: record,\n hasShow,\n hasCreate,\n hasList,\n resource,\n // Ensure we don't override any user provided props\n ...finalActions.props,\n })}\n <Content\n className={classnames(classes.content, {\n [classes.noActions]: !finalActions,\n [classes.deleted]: deleted,\n })}\n >\n {record && Children.map(children, (form, index) => (\n cloneElement(form, {\n key: index,\n resource,\n basePath,\n record,\n version,\n redirect:\n typeof form.props.redirect === 'undefined'\n ? redirect\n : form.props.redirect,\n save:\n typeof form.props.save === 'undefined'\n ? save\n : form.props.save,\n saving,\n undoable,\n mutationMode,\n })\n ))}\n </Content>\n {aside &&\n React.cloneElement(aside, {\n basePath,\n record,\n resource,\n version,\n save:\n typeof children.props.save === 'undefined'\n ? save\n : children.props.save,\n saving,\n })}\n </div>\n </div>\n );\n};\n\n\nEditView.propTypes = {\n actions: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n aside: PropTypes.element,\n basePath: PropTypes.string,\n // children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n component: ComponentPropType,\n defaultTitle: PropTypes.any,\n hasList: PropTypes.bool,\n hasShow: PropTypes.bool,\n mutationMode: PropTypes.oneOf(['pessimistic', 'optimistic', 'undoable']),\n record: PropTypes.object,\n redirect: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n resource: PropTypes.string,\n save: PropTypes.func,\n title: PropTypes.node,\n version: PropTypes.number,\n onSuccess: PropTypes.func,\n onFailure: PropTypes.func,\n setOnSuccess: PropTypes.func,\n setOnFailure: PropTypes.func,\n setTransform: PropTypes.func,\n undoable: PropTypes.bool,\n};\n\nEditView.defaultProps = {\n classes: {},\n component: Card,\n breadcrumbs: <DefaultEditBreadcrumbs />\n};\n\nconst useStyles = makeStyles(\n {\n root: {\n display: 'flex'\n },\n deleted: {\n opacity: 0.5,\n pointerEvents: 'none',\n },\n main: {\n display: 'flex',\n flexDirection: 'column',\n flexGrow: 1\n },\n noActions: {\n marginTop: '1em',\n },\n content: {\n flex: '1 1 auto',\n },\n aside: {\n marginLeft: 16\n }\n },\n { name: 'RaEdit' }\n);\n\nconst sanitizeRestProps = ({\n basePath = null,\n defaultTitle = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n history = null,\n id = null,\n dashboardId = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n onFailure = null,\n onFailureRef = null,\n onSuccess = null,\n onSuccessRef = null,\n options = null,\n permissions = null,\n refetch = null,\n save = null,\n saving = null,\n setOnFailure = null,\n setOnSuccess = null,\n setTransform = null,\n successMessage = null,\n transform = null,\n transformRef = null,\n ...rest\n}) => rest;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport {\n EditContextProvider,\n ResourceContextProvider,\n useCheckMinimumRequiredProps,\n useEditController,\n} from 'ra-core';\nimport { EditView } from './EditView';\n\n\n\nconst Edit = (props) => {\n useCheckMinimumRequiredProps('Edit', ['children'], props);\n const controllerProps = useEditController(props);\n const body = (\n <EditContextProvider value={controllerProps}>\n <EditView {...props} {...controllerProps} />\n </EditContextProvider>\n );\n return props.resource ? (\n // support resource override via props\n <ResourceContextProvider value={props.resource}>\n {body}\n </ResourceContextProvider>\n ) : (\n body\n );\n};\n\nEdit.propTypes = {\n actions: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n aside: PropTypes.element,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n hasCreate: PropTypes.bool,\n hasEdit: PropTypes.bool,\n hasShow: PropTypes.bool,\n hasList: PropTypes.bool,\n id: PropTypes.any.isRequired,\n mutationMode: PropTypes.oneOf(['pessimistic', 'optimistic', 'undoable']),\n onSuccess: PropTypes.func,\n onFailure: PropTypes.func,\n resource: PropTypes.string,\n successMessage: PropTypes.string,\n title: PropTypes.node,\n transform: PropTypes.func,\n undoable: PropTypes.bool,\n};\n\n\nexport default Edit","import { Button, useMutation, useNotify, useRedirect, useRefresh, useResourceContext } from \"react-admin\";\nimport React from \"react\";\nimport classnames from 'classnames';\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport inflection from 'inflection';\nimport RemoveIcon from \"@material-ui/icons/Delete\";\n\nconst RemoveWithUndoButton = props => {\n const {\n label = 'ra.action.remove',\n classes: classesOverride,\n className,\n icon = defaultIcon,\n onClick,\n record,\n basePath,\n redirect: redirectTo = 'list',\n onSuccess,\n onFailure,\n undoable, mutationMode,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const resource = useResourceContext(props);\n\n const [handleRemove, { loading }] = useMutation(\n {\n type: 'remove',\n resource,\n payload: { id: record.id, previousData: record }\n },\n {\n mutationMode: 'undoable',\n onSuccess: onSuccess !== undefined\n ? onSuccess\n : () => {\n notify('ra.notification.removed', 'info', { smart_count: 1 }, true);\n redirect(redirectTo, basePath || `/${resource}`);\n refresh();\n },\n onFailure: onFailure !== undefined\n ? onFailure\n : error => {\n notify(\n typeof error === 'string'\n ? error\n : error.message || 'ra.notification.http_error',\n 'warning',\n {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n }\n );\n refresh();\n },\n });\n\n return (\n <Button\n onClick={handleRemove}\n disabled={loading}\n label={label}\n className={classnames(\n 'ra-remove-button',\n classes.removeButton,\n className\n )}\n key=\"button\"\n {...rest}\n >\n {icon}\n </Button>\n );\n}\n\nconst defaultIcon = <RemoveIcon />;\n\nconst useStyles = makeStyles(theme => ({\n removeButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}), { name: 'RaRemoveButton' });\n\n\nexport default RemoveWithUndoButton;","import { Button, useMutation, useNotify, useRedirect, useRefresh, useResourceContext,Confirm } from \"react-admin\";\nimport React, { useState, Fragment, useCallback } from \"react\";\nimport classnames from 'classnames';\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport { alpha } from \"@material-ui/core/styles/colorManipulator\";\nimport inflection from 'inflection';\n\nimport {\n OnSuccess,\n OnFailure,\n Record,\n RedirectionSideEffect,\n useDeleteWithConfirmController,\n useTranslate,\n} from 'ra-core';\nimport RemoveIcon from \"@material-ui/icons/Delete\";\n\nconst RemoveWithConfirmButton = props => {\n const {\n label = 'ra.action.remove',\n confirmTitle = 'ra.action.remove_title',\n confirmContent = 'ra.action.remove_content',\n cancel = 'ra.action.cancel',\n classes: classesOverride,\n className,\n icon = defaultIcon,\n onClick,\n record,\n basePath,\n redirect: redirectTo = 'list',\n onSuccess,\n onFailure,\n undoable, mutationMode,\n ...rest\n } = props;\n\n const translate = useTranslate();\n const classes = useStyles(props);\n const resource = useResourceContext(props);\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n\n const [open, setOpen] = useState(false);\n\n const handleDialogOpen = e => {\n setOpen(true);\n e.stopPropagation();\n };\n\n const handleDialogClose = e => {\n setOpen(false);\n e.stopPropagation();\n };\n const handleClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n\n const [handleRemove, { loading }] = useMutation(\n {\n type: 'remove',\n resource,\n payload: { id: record.id, previousData: record }\n },\n {\n mutationMode: mutationMode,\n onSuccess: onSuccess !== undefined\n ? onSuccess\n : () => {\n notify('ra.notification.removed', 'info', { smart_count: 1 }, mutationMode === 'undoable');\n redirect(redirectTo, basePath || `/${resource}`);\n refresh();\n },\n onFailure: onFailure !== undefined\n ? onFailure\n : error => {\n notify(\n typeof error === 'string'\n ? error\n : error.message || 'ra.notification.http_error',\n 'warning',\n {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n }\n );\n refresh();\n },\n });\n\n return (\n <Fragment>\n <Button\n onClick={handleDialogOpen}\n disabled={loading}\n label={label}\n className={classnames(\n 'ra-remove-button',\n classes.removeButton,\n className\n )}\n key=\"button\"\n {...rest}\n >\n {icon}\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title={confirmTitle}\n content={confirmContent}\n translateOptions={{\n name: translate(`resources.${resource}.forcedCaseName`, {\n smart_count: 1,\n _: inflection.humanize(\n translate(`resources.${resource}.name`, {\n smart_count: 1,\n _: inflection.singularize(resource),\n }),\n true\n ),\n }),\n id: record.name,\n }}\n onConfirm={handleRemove}\n onClose={handleDialogClose}\n />\n </Fragment>\n );\n}\nconst defaultIcon = <RemoveIcon />;\n\nconst useStyles = makeStyles(theme => ({\n removeButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n confirmPrimary: {\n color: theme.palette.primary.main,\n },\n confirmWarning: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n iconPaddingStyle: {\n paddingRight: '0.5em',\n },\n}), { name: 'RaRemoveButton' });\n\nRemoveWithConfirmButton.defaultProps = {\n confirmcolor: 'primary',\n}\n\nexport default RemoveWithConfirmButton;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { getMutationMode } from 'ra-core'\nimport RemoveWithUndoButton from './RemoveWithUndoButton';\nimport RemoveWithConfirmButton from './RemoveWithConfirmButton';\nimport RemoveIcon from \"@material-ui/icons/Delete\";\n\nconst RemoveButton = props => {\n const {\n label = 'ra.action.remove',\n classes: classesOverride,\n className,\n icon = defaultIcon,\n onClick,\n record,\n basePath,\n redirect: redirectTo = 'list',\n onSuccess,\n onFailure,\n undoable, mutationMode = \"undoable\",\n ...rest\n } = props;\n const mode = getMutationMode(mutationMode, undoable);\n const isUndoMode = mode === \"undoable\";\n if (isUndoMode) return (\n <RemoveWithUndoButton record={record} {...rest} />\n );\n return (<RemoveWithConfirmButton\n basePath={basePath}\n mutationMode={mode}\n record={record}\n //undoable={false}\n {...rest}\n />)\n // return (mode === 'undoable') ? (\n // <RemoveWithUndoButton record={record} {...rest} />\n // ) : (\n // <RemoveWithConfirmButton\n // mutationMode={mode}\n // record={record}\n // undoable={undoable}\n // {...rest}\n // />\n // );\n};\nconst defaultIcon = <RemoveIcon />;\n\nRemoveButton.propTypes = {\n basePath: PropTypes.string,\n label: PropTypes.string,\n mutationMode: PropTypes.oneOf(['pessimistic', 'optimistic', 'undoable']),\n record: PropTypes.any,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n resource: PropTypes.string,\n undoable: PropTypes.bool,\n icon: PropTypes.element,\n};\n\n\n\nexport default RemoveButton;\n","import React from \"react\";\nimport { TextInput, SimpleForm, ReferenceArrayInput, AutocompleteArrayInput } from 'react-admin';\nimport { TopToolbar, ShowButton } from 'react-admin';\nimport CloneButton from '../../lib/button/CloneButton';\nimport { Toolbar, SaveButton } from 'react-admin';\nimport Edit from '../../lib/edit/Edit';\nimport TitleForRecord from '../../lib/layout/TitleForRecord';\nimport PlayButton from '../../lib/button/PlayButton';\nimport DashboardVariablesInput from './DashboardVariablesInput';\nimport DashboardLinksInput from './DashboardLinksInput';\nimport Spacer from '../../lib/layout/Spacer';\nimport RemoveButton from '../../lib/button/RemoveButton';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\nimport { validateName, validateAssetsIds } from './validation';\n\n\n\nconst DashboardEditActions = ({ data, resource, basePath, hasShow, hasCreate }) => {\n\n return (\n <TopToolbar>\n <PlayButton basePath={basePath} record={data} />\n {hasCreate && <CloneButton basePath={basePath} record={data} />}\n {hasShow && <ShowButton basePath={basePath} record={data} />}\n </TopToolbar>\n )\n};\n\n\nconst DashboardEditToolbar = props => {\n return (\n <Toolbar {...props} >\n <SaveButton submitOnEnter={true} disabled={props.pristine} redirect=\"list\" />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <Spacer variant=\"row\" />\n <RemoveButton mutationMode=\"optimistic\" />\n </Toolbar>\n )\n};\n\nconst DashboardEdit = (props) => {\n\n return (\n <Edit\n {...props}\n actions={<DashboardEditActions />}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n <SimpleForm toolbar={<DashboardEditToolbar />}>\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <DashboardVariablesInput source=\"variables\" fullWidth />\n <DashboardLinksInput source=\"links\" fullWidth />\n <ReferenceArrayInput source=\"assetClassesIds\" reference=\"AssetClass\" label=\"resources.Dashboard.fields.assetClasses\" fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"assetsIds\" reference=\"Asset\" label=\"resources.Dashboard.fields.assets\" fullWidth validate={validateAssetsIds}>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"labelsIds\" reference=\"Label\" label=\"resources.Dashboard.fields.labels\" filter={{ typename: \"Dashboard\" }} fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n </SimpleForm>\n </Edit>\n )\n};\n\n\n\nexport default DashboardEdit;","export const DASHBOARD_CHANGE_VARIABLES = 'DASHBOARD_CHANGE_VARIABLES';\n\nexport const changeVariables = (variables) => ({\n type: DASHBOARD_CHANGE_VARIABLES,\n payload: { variables },\n});","import { useEffect } from 'react';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport { changeVariables } from '../../redux/dashboard/actions';\n\nconst useVariables = (resource, initialValue = {}) => {\n const dispatch = useDispatch();\n\n const variables = useSelector(state => state?.dashboard?.variables, shallowEqual);\n //const variablesOrDefault = variables ?? initialValue\n const variablesOrDefault = (variables?.assetId != initialValue?.assetId) ? initialValue : variables;\n\n const setVariables = (payload) => {\n const newVariables = (typeof payload === 'function') ? payload(variablesOrDefault) : payload\n dispatch(changeVariables(newVariables))\n };\n\n useEffect(() => {\n if (!variables) setVariables(initialValue)\n }, [])\n\n return [variablesOrDefault, setVariables]\n}\n\nexport default useVariables\n","import { useCallback, useEffect, useState } from 'react';\nimport {\n useTranslate,\n useCheckMinimumRequiredProps,\n useUpdate,\n CRUD_UPDATE,\n CRUD_GET_ONE,\n useNotify,\n useRedirect,\n useRefresh,\n useVersion,\n useResourceContext,\n useGetResourceLabel,\n useQuery,\n useGetOne,\n} from 'react-admin';\nimport isEqual from \"lodash/isEqual\";\nimport omit from \"lodash/omit\";\nimport set from \"lodash/set\";\nimport { parse, stringify } from 'query-string';\nimport lodashDebounce from 'lodash/debounce';\nimport { useHistory, useLocation } from 'react-router-dom';\n// import useVariables from '../localStorage/useVariables';\nimport useVariablesRedux from '../redux/useVariables';\n\n\nconst formatWidgetOnDashboardFromLayouts = (widgetOnDashboard, layouts) => {\n const widgetOnDashboardLayouts = Object.keys(layouts).reduce((acc, breakpoint) => {\n const layoutsByBreakpoint = layouts[breakpoint]\n const widgetOnDashboardLayoutByBreakpoint = layoutsByBreakpoint.find(({ i }) => i === widgetOnDashboard.id)\n return { ...acc, [breakpoint]: widgetOnDashboardLayoutByBreakpoint ? omit(widgetOnDashboardLayoutByBreakpoint, \"i\") : undefined }\n }, {})\n return { id: widgetOnDashboard.id, layouts: widgetOnDashboardLayouts }\n}\n\nconst parseWidgetOnDashboardToLayouts = (widgetOnDashboard) => {\n const layouts = widgetOnDashboard.layouts || {}\n const widgetOnDashboardLayouts = Object.keys(layouts).reduce((acc, breakpoint) => {\n const layoutsByBreakpoint = layouts[breakpoint]\n const widgetOnDashboardLayoutByBreakpoint = { ...layoutsByBreakpoint, i: widgetOnDashboard.id }\n return { ...acc, [breakpoint]: widgetOnDashboardLayoutByBreakpoint }\n }, {})\n return widgetOnDashboardLayouts\n}\n\nexport const parseWidgetsOnDashboardToLayouts = (widgetsOnDashboard) => {\n const layouts = {}\n\n widgetsOnDashboard.forEach(widgetOnDashboard => {\n const widgetOnDashboardLayouts = parseWidgetOnDashboardToLayouts(widgetOnDashboard)\n Object.keys(widgetOnDashboardLayouts).forEach(breakpoint => {\n const widgetsOnDashboardLayoutsBreakpoint = layouts[breakpoint] || []\n const widgetOnDashboardLayoutsBreakpoint = widgetOnDashboardLayouts[breakpoint]\n const newWidgetsOnDashboardLayoutsBreakpoint = widgetOnDashboardLayoutsBreakpoint ? [...widgetsOnDashboardLayoutsBreakpoint, widgetOnDashboardLayoutsBreakpoint] : widgetsOnDashboardLayoutsBreakpoint\n set(layouts, [breakpoint], newWidgetsOnDashboardLayoutsBreakpoint)\n })\n })\n return layouts\n}\n\nconst parseObject = (query, field) => {\n if (query[field] && typeof query[field] === 'string') {\n try {\n query[field] = JSON.parse(query[field]);\n } catch (err) {\n delete query[field];\n }\n }\n};\n\nexport const parseLocationSearch = (search) => {\n const query = parse(search);\n\n parseObject(query, 'variables');\n return query;\n};\n\nconst getDefaultVariables = (location) => {\n const locationSearch = parseLocationSearch(location.search)\n return locationSearch?.variables ? locationSearch.variables : {}\n}\n\nconst useDashboardController = (props) => {\n useCheckMinimumRequiredProps('Dashboard', ['basePath', 'resource', 'id'], props);\n const {\n basePath,\n id,\n variablesValues: variablesValuesOverride,\n onFailure,\n debounce = 500,\n } = props;\n const resource = useResourceContext(props);\n const translate = useTranslate();\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const version = useVersion();\n const location = useLocation();\n const history = useHistory();\n\n const [dashboardVariables, setDashboardVariables] = useVariablesRedux(resource, getDefaultVariables(location));\n\n // const [queryParams, setQueryParams] = useVariables(resource, getDefaultVariables(location));\n\n const { data: record, error, loading, loaded, refetch } = useGetOne(resource, id, {\n action: CRUD_GET_ONE,\n onFailure:\n onFailure ??\n (() => {\n notify('ra.notification.item_doesnt_exist', {\n type: 'warning',\n });\n redirect('list', basePath);\n refresh();\n }),\n enabled: Boolean(id)\n });\n\n useEffect(() => {\n const assetIdOverride = variablesValuesOverride?.assetId || dashboardVariables?.assetId\n\n if (record?.variables?.includes(\"assetId\") && assetIdOverride) {\n\n const assetId = record?.assetsIds?.includes(assetIdOverride) ? assetIdOverride : record.assetsIds?.[0]\n\n history.push({\n search: `?${stringify({\n ...parse(history.location.search),\n variables: JSON.stringify({ ...dashboardVariables, assetId }),\n })}`,\n })\n }\n }, [record, history, dashboardVariables, variablesValuesOverride?.assetId]);\n\n // useEffect(() => {\n\n // if (record?.variables?.includes(\"assetId\") && !record?.assetsIds?.includes(dashboardVariables?.assetId)) {\n // history.push({\n // search: `?${stringify({\n // variables: JSON.stringify({ ...dashboardVariables, assetId: record.assetsIds?.[0] }),\n // })}`,\n // });\n\n // }\n // }, [record, history, dashboardVariables]);\n\n const getResourceLabel = useGetResourceLabel();\n const defaultTitle = translate('ra.page.play', {\n name: getResourceLabel(resource, 1),\n id,\n record,\n });\n\n\n\n const [editable, setEditable] = useState(false);\n const [layouts, setLayouts] = useState();\n const [update] = useUpdate();\n\n useEffect(() => {\n if (record) {\n const parsedLayouts = parseWidgetsOnDashboardToLayouts(record.widgetsOnDashboard)\n setLayouts(parsedLayouts)\n }\n }, [record, setLayouts]);\n\n const saveLayouts = useCallback(() => {\n if (!isEqual(record.layouts, layouts)) {\n const widgetsOnDashboard = record.widgetsOnDashboard.map(widgetOnDashboard => formatWidgetOnDashboardFromLayouts(widgetOnDashboard, layouts))\n update(\n 'Dashboard',\n record.id,\n { widgetsOnDashboard: widgetsOnDashboard },\n { widgetsOnDashboard: record.widgetsOnDashboard },\n {\n action: CRUD_UPDATE,\n }\n )\n }\n }, [record, layouts]);\n\n useEffect(() => {\n const searchParams = parseLocationSearch(location.search)\n // setQueryParams(previous => ({\n // ...previous,\n // ...searchParams\n // }))\n\n\n setDashboardVariables(previous => {\n return {\n ...previous,\n ...searchParams.variables\n }\n })\n\n // setLocalStorageVariables(variablesValues)\n }, [location.search]);\n\n const setVariablesValues = useCallback((variablesValues) => {\n history.push({\n search: `?${stringify({\n ...parse(history.location.search),\n variables: JSON.stringify(variablesValues),\n })}`,\n });\n\n }, [history]);\n\n const debouncedSetVariablesValues = lodashDebounce((variablesValues) => {\n setVariablesValues(variablesValues);\n }, debounce);\n\n return {\n error,\n loading,\n loaded,\n defaultTitle,\n resource,\n basePath,\n record,\n refetch,\n version,\n variables: record?.variables,\n variablesValues: dashboardVariables,\n setVariablesValues: debouncedSetVariablesValues,\n editable,\n setEditable,\n layouts,\n setLayouts,\n saveLayouts,\n };\n\n};\n\n\n\n\n\nexport default useDashboardController","import { createContext, useMemo } from 'react';\nimport pick from 'lodash/pick';\n\nconst DashboardVariablesContext = createContext({\n variablesValues: null,\n setVariables: null,\n resource: null,\n});\n\n\nexport const usePickVariableContext = (context) =>\n useMemo(() => pick(context, [\n 'variablesValues',\n 'setVariables',\n 'resource',\n ]), [context.variableValues, context.setVariables,]);\n\nDashboardVariablesContext.displayName = 'DashboardVariablesContext';\n\nexport default DashboardVariablesContext;\n","import React from 'react';\nimport { RecordContextProvider } from 'react-admin';\nimport DashboardContext from './DashboardContext';\nimport DashboardVariablesContext, { usePickVariableContext } from './DashboardVariablesContext';\n\n\n\nconst DashboardContextProvider = ({ children, value }) => (\n <DashboardContext.Provider value={value}>\n <DashboardVariablesContext.Provider value={usePickVariableContext(value)}>\n <RecordContextProvider value={value && value.record}>\n {children}\n </RecordContextProvider>\n </DashboardVariablesContext.Provider>\n </DashboardContext.Provider>\n);\n\nexport default DashboardContextProvider","import React from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from '@material-ui/core/IconButton';\nimport ActionHide from '@material-ui/icons/HighlightOff';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { useResourceContext, useTranslate } from 'ra-core';\n\nconst emptyRecord = {};\n\nconst useStyles = makeStyles(\n theme => ({\n body: {\n display: 'flex',\n alignItems: 'flex-end',\n pointerEvents: 'auto',\n },\n spacer: { width: theme.spacing(2) },\n hideButton: {},\n }),\n { name: 'RaVariablesFormInput' }\n);\n\nconst VariablesFormInput = props => {\n const { variableElement, variant, margin } = props;\n const resource = useResourceContext(props);\n const translate = useTranslate();\n const classes = useStyles(props);\n return (\n <div\n data-source={variableElement.props.source}\n className={classnames('variables-field', classes.body)}\n >\n {React.cloneElement(variableElement, {\n allowEmpty:\n variableElement.props.allowEmpty === undefined\n ? true\n : variableElement.props.allowEmpty,\n emptyText: \"ra.boolean.false\",\n resource,\n record: emptyRecord,\n variant,\n margin,\n helperText: false,\n // ignore defaultValue in Field because it was already set in Form (via mergedInitialValuesWithDefaultValues)\n defaultValue: undefined,\n })}\n <div className={classes.spacer}> </div>\n </div>\n );\n};\n\nVariablesFormInput.propTypes = {\n variableElement: PropTypes.node,\n handleHide: PropTypes.func,\n classes: PropTypes.object,\n resource: PropTypes.string,\n margin: PropTypes.string,\n variant: PropTypes.string,\n};\n\nexport default VariablesFormInput;\n","import React, { useEffect } from 'react';\nimport get from 'lodash/get';\nimport { useForm, useFormState } from 'react-final-form';\nimport { AutocompleteInput } from 'react-admin';\n\n\n\n\n\nconst AutocompleteWithFirstChoiceAsDefaultInput = (props) => {\n const form = useForm();\n const { optionValue = 'id', choices, parentId } = props\n const defaultValue = props.input.value || get(choices, [0, optionValue])\n\n useEffect(() => {\n form.change(props.source, defaultValue)\n }, [defaultValue, parentId])\n\n return (\n <AutocompleteInput {...props} />\n );\n}\n\n\n\n\n\nexport default AutocompleteWithFirstChoiceAsDefaultInput;","import React from \"react\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport { ReferenceInput } from 'react-admin';\nimport { autocompleteMatchTrue } from '../../input/utils';\nimport useDashboardContext from '../../../controller/dashboard/useDashboardContext';\nimport AutocompleteWithFirstChoiceAsDefaultInput from '../../input/AutocompleteWithFirstChoiceAsDefaultInput';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n width: theme.spacing(56),\n [theme.breakpoints.down('xs')]: {\n width: \"auto\"\n },\n },\n}));\n\nconst AssetIdVariableInput = (props) => {\n const classes = useStyles()\n const { record } = useDashboardContext()\n const assetIds = record?.assetsIds ? record.assetsIds : [];\n const parentId = record.id;\n\n return (\n <ReferenceInput {...props} filter={{ ids: assetIds }} allowEmpty emptyText=\"ra.boolean.false\" className={classes.root} parentId={parentId}>\n <AutocompleteWithFirstChoiceAsDefaultInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n )\n};\n\n\n\nexport default AssetIdVariableInput;","import React from \"react\";\nimport { ReferenceInput } from 'react-admin';\nimport { autocompleteMatchTrue } from '../../input/utils';\nimport AutocompleteWithFirstChoiceAsDefaultInput from '../../input/AutocompleteWithFirstChoiceAsDefaultInput';\n\n\n\nconst ParameterIdVariableInput = (props) => {\n const {\n label = \"resources.Dashboard.variables.parameterId\",\n source = \"parameterId\",\n reference = \"Parameter\",\n } = props\n\n return (\n <ReferenceInput {...props} label={label} source={source} reference={reference} allowEmpty emptyText=\"ra.boolean.false\">\n <AutocompleteWithFirstChoiceAsDefaultInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n )\n};\n\n\n\nexport default ParameterIdVariableInput;","import React, { useCallback, useRef, useState } from 'react';\nimport classnames from 'classnames';\nimport TextField from '@material-ui/core/TextField';\nimport Paper from '@material-ui/core/Paper';\nimport Popper from '@material-ui/core/Popper';\nimport ClickAwayListener from '@material-ui/core/ClickAwayListener';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useInput, FieldTitle, InputHelperText } from 'react-admin';\n\n\n\nconst EnhancedTextInput = (props) => {\n const {\n classes: classesOverride,\n className,\n children,\n disabled,\n format,\n helperText,\n label,\n loading,\n margin = 'dense',\n size = 'small',\n onBlur,\n onChange,\n onFocus,\n options: {\n labelProps,\n inputProps,\n ...options\n } = {},\n parse,\n resource,\n source,\n validate,\n variant = 'filled',\n inputText,\n disableClickAwayListener,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n\n const {\n id,\n input,\n isRequired,\n meta: { touched, error, submitError },\n } = useInput({\n format,\n onBlur,\n onChange,\n onFocus,\n parse,\n resource,\n source,\n validate,\n ...rest,\n });\n\n const inputRef = useRef();\n const anchorRef = useRef(null);\n const [open, setOpen] = useState(false);\n\n const handleBlur = useCallback(event => {\n input.onBlur(event);\n }, [input]);\n\n const handleFocus = useCallback(event => {\n setOpen(true);\n input.onFocus(event);\n }, [input]);\n\n const handleClose = useCallback(event => {\n //Костыль котрый исправляет срабатывание ClickAwayListener при использовании элемента select\n if (event?.target?.lastChild?.className == 'MuiPopover-root') {\n return;\n }\n\n setOpen(false);\n }, [])\n\n const handleClickAway = useCallback(event => {\n if (disableClickAwayListener) {\n return;\n } else {\n handleClose(event)\n }\n\n }, [disableClickAwayListener, handleClose])\n\n const handleChange = useCallback(value => {\n input.onChange(value);\n }, [])\n\n const getValue = useCallback(value => {\n return typeof inputText === 'function' ? inputText(value) : value;\n }, [inputText])\n\n\n return (\n <ClickAwayListener onClickAway={handleClickAway} >\n <div>\n <TextField\n id={id}\n {...input}\n className={classnames(classes.input, className)}\n value={getValue(input.value)}\n ref={anchorRef}\n fullWidth\n InputProps={{\n readOnly: true,\n inputRef: inputRef,\n onBlur: handleBlur,\n onFocus: handleFocus,\n ...inputProps\n }}\n error={!!(touched && (error || submitError))}\n label={\n <FieldTitle\n label={label}\n {...labelProps}\n source={source}\n resource={resource}\n isRequired={isRequired}\n />\n }\n helperText={\n <InputHelperText\n touched={touched}\n error={error || submitError}\n helperText={helperText}\n />\n }\n size={size}\n variant={variant}\n margin={margin}\n disabled={disabled}\n {...options}\n />\n <Popper\n className={classes.popper}\n open={open}\n anchorEl={anchorRef.current}\n transition\n disablePortal\n >\n <Paper elevation={8} >\n {React.cloneElement(children, {\n onClose: handleClose,\n onChange: handleChange,\n value: input.value\n })}\n </Paper>\n </Popper>\n </div>\n </ClickAwayListener>\n );\n};\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n flexGrow: 1,\n position: 'relative',\n minWidth: theme.spacing(24)\n },\n popper: {\n zIndex: theme.zIndex.modal,\n }\n}), { name: 'EnhancedTextInput' });\n\nexport default EnhancedTextInput;\n","import React, { useCallback } from 'react';\nimport { DateTime } from \"luxon\";\nimport { useForm } from 'react-final-form';\nimport CheckboxInput from '../../input/CheckboxInput';\n\n\n\nconst RangeOnlineInput = (props) => {\n const form = useForm();\n\n const handleChange = useCallback((value) => {\n //if (value === true) {\n form.change('dateTo', DateTime.utc().toISO())\n //} \n }, []);\n\n return (\n <CheckboxInput {...props} onChange={handleChange} />\n );\n};\n\nexport default RangeOnlineInput;","import React, { useCallback } from \"react\";\nimport { DateTime } from 'luxon';\nimport { Form } from 'react-final-form';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport { useTranslate, DateTimeInput } from 'react-admin';\nimport RangeOnlineInput from './RangeOnlineInput';\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n content: {\n\n },\n pickers: {\n display: \"flex\",\n gap: 16\n },\n}));\n\nconst defaultSubscription = {\n submitting: true,\n pristine: true,\n valid: true,\n invalid: true,\n values: true,\n};\n\n\nconst RangeVariableInput = (props) => {\n const {\n onClose,\n onChange,\n value,\n } = props\n\n\n const classes = useStyles()\n const translate = useTranslate();\n\n const handleClose = useCallback((event) => {\n onClose(event)\n }, [onClose])\n\n const handleApply = useCallback((values) => {\n onChange(values)\n onClose()\n }, [onChange, onClose])\n\n return (\n <Form\n initialValues={value}\n onSubmit={handleApply}\n subscription={defaultSubscription}\n keepDirtyOnReinitialize\n render={({ handleSubmit, invalid, values }) => (\n <form>\n <DialogContent className={classes.content}>\n <div className={classes.pickers}>\n <DateTimeInput source=\"dateFrom\" resource=\"Dashboard\" inputProps={{ max: DateTime.fromISO(values.dateTo).toFormat(\"yyyy-LL-dd'T'HH:mm\") }} />\n <DateTimeInput source=\"dateTo\" resource=\"Dashboard\" inputProps={{ min: DateTime.fromISO(values.dateFrom).toFormat(\"yyyy-LL-dd'T'HH:mm\") }} disabled={values?.online} />\n </div>\n <RangeOnlineInput source=\"online\" resource=\"Dashboard\" />\n </DialogContent>\n <DialogActions>\n <Button\n disabled={invalid}\n onClick={handleClose}\n >{translate(`ra.action.cancel`)}</Button>\n <Button\n disabled={invalid}\n onClick={handleSubmit}\n color=\"primary\"\n >{translate(`ra.action.apply`)}</Button>\n </DialogActions>\n </form>\n )}\n />\n )\n};\n\n\n\nexport default RangeVariableInput;","import React, { useEffect } from \"react\";\nimport get from 'lodash/get';\nimport EnhancedTextInput from '../../input/EnhancedTextInput';\nimport { makeStyles } from '@material-ui/core/styles';\nimport RangeVariableInputForm from './RangeVariableInputForm';\nimport { DateTime } from \"luxon\";\nimport { useForm, useFormState } from 'react-final-form';\n\n\nconst initialValue = {\n dateFrom: DateTime.now().minus({ day: 1 }).toISO(),\n dateTo: DateTime.now().toISO(),\n online: false\n}\n\nconst inputText = (range) => {\n const { dateFrom, dateTo, online } = range\n const parcedDateFrom = dateFrom instanceof Date ? DateTime.fromJSDate(dateFrom) : DateTime.fromISO(dateFrom)\n const parcedDateTo = dateTo instanceof Date ? DateTime.fromJSDate(dateTo) : DateTime.fromISO(dateTo)\n return online\n ? `${parcedDateFrom.toLocaleString(DateTime.DATETIME_SHORT)} - Онлайн`\n : `${parcedDateFrom.toLocaleString(DateTime.DATETIME_SHORT)} - ${parcedDateTo.toLocaleString(DateTime.DATETIME_SHORT)}`\n};\n\nconst useStyles = makeStyles(theme => ({\n root: {\n width: theme.spacing(37)\n },\n}));\n\nconst RangeVariableInput = (props) => {\n const { source } = props\n const classes = useStyles()\n const { values } = useFormState();\n const form = useForm();\n const defaultValue = get(values, source) || initialValue\n\n useEffect(() => {\n form.change(props.source, defaultValue)\n }, [defaultValue])\n\n\n return (\n <EnhancedTextInput\n {...props}\n className={classes.root}\n inputText={inputText}\n disableClickAwayListener\n >\n <RangeVariableInputForm />\n </EnhancedTextInput>\n )\n};\n\n\n\n\n\nexport default RangeVariableInput;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useResourceContext } from 'ra-core';\nimport { Form, FormSpy } from 'react-final-form';\nimport arrayMutators from 'final-form-arrays';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport useDashboardContext from '../../../controller/dashboard/useDashboardContext';\nimport VariablesFormInput from './VariablesFormInput';\nimport AssetIdVariableInput from './AssetIdVariableInput';\nimport ParameterIdVariableInput from './ParameterIdVariableInput';\nimport RangeVariableInput from './RangeVariableInput';\n\n\n\nexport const VariablesForm = (props) => {\n const {\n classes = {},\n className,\n margin,\n variables = [],\n variant,\n initialValues,\n ...rest\n } = props;\n const resource = useResourceContext(props);\n\n return (\n <form\n className={classnames(className, classes.form)}\n {...sanitizeRestProps(rest)}\n onSubmit={handleSubmit}\n >\n {variables.includes(\"assetId\") && <VariablesFormInput\n variableElement={<AssetIdVariableInput source=\"assetId\" reference=\"Asset\" label=\"resources.Dashboard.variables.assetId\" />}\n resource={resource}\n variant={variant}\n margin={margin}\n />}\n {variables.includes(\"parameterId\") && <VariablesFormInput\n variableElement={<ParameterIdVariableInput source=\"parameterId\" reference=\"Parameter\" label=\"resources.Dashboard.variables.parameterId\" />}\n resource={resource}\n variant={variant}\n margin={margin}\n />}\n {variables.includes(\"range\") && <VariablesFormInput\n variableElement={<RangeVariableInput source=\"range\" label=\"resources.Dashboard.variables.range\" />}\n resource={resource}\n variant={variant}\n margin={margin}\n />}\n <div className={classes.clearFix} />\n </form>\n );\n};\n\nconst handleSubmit = event => {\n event.preventDefault();\n return false;\n};\n\nVariablesForm.propTypes = {\n resource: PropTypes.string,\n dashboardVariables: PropTypes.oneOfType([PropTypes.bool, PropTypes.array]),\n classes: PropTypes.object,\n className: PropTypes.string,\n};\n\nconst useStyles = makeStyles(\n theme => ({\n form: {\n marginTop: -theme.spacing(2),\n paddingTop: 0,\n display: 'flex',\n alignItems: 'flex-end',\n flexWrap: 'wrap',\n minHeight: theme.spacing(10),\n pointerEvents: 'none',\n },\n clearFix: { clear: 'right' },\n }),\n { name: 'RaFilterForm' }\n);\n\nconst sanitizeRestProps = ({\n active,\n dirty,\n dirtyFields,\n dirtyFieldsSinceLastSubmit,\n dirtySinceLastSubmit,\n displayedVariables,\n error,\n errors,\n variableValues,\n form,\n handleSubmit,\n hasSubmitErrors,\n hasValidationErrors,\n hideFilter,\n invalid,\n modified,\n modifiedSinceLastSubmit,\n pristine,\n resource,\n setVariables,\n submitError,\n submitErrors,\n submitFailed,\n submitSucceeded,\n submitting,\n touched,\n valid,\n validating,\n values,\n visited,\n ...props\n}) => props;\n\n\n\n\n\nconst EnhancedVariableForm = props => {\n const {\n classes: classesOverride,\n initialValues,\n ...rest\n } = props;\n const classes = useStyles(props);\n const { variables, variablesValues, setVariablesValues } = useDashboardContext(props);\n\n\n\n return (\n <Form\n onSubmit={handleFinalFormSubmit}\n initialValues={variablesValues}\n mutators={{ ...arrayMutators }}\n render={formProps => (\n <>\n <FormSpy\n subscription={FormSpySubscription}\n onChange={({ pristine, values, invalid }) => {\n if (pristine || invalid) {\n return;\n }\n setVariablesValues(values);\n }}\n />\n <VariablesForm\n classes={classes}\n {...formProps}\n variables={variables}\n />\n </>\n )}\n />\n );\n};\n\nconst handleFinalFormSubmit = () => { };\n\n// Options to instruct the FormSpy that it should only listen to the values and pristine changes\nconst FormSpySubscription = { values: true, pristine: true, invalid: true };\n\nexport default EnhancedVariableForm;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport { makeStyles } from '@material-ui/core/styles';\nimport VariablesForm from './variables/VariablesForm';\n\nconst useStyles = makeStyles(\n theme => ({\n toolbar: {\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n paddingRight: 0,\n [theme.breakpoints.up('xs')]: {\n paddingLeft: 0,\n },\n [theme.breakpoints.down('xs')]: {\n paddingLeft: theme.spacing(2),\n backgroundColor: theme.palette.background.paper,\n },\n },\n actions: {\n paddingTop: theme.spacing(3),\n minHeight: theme.spacing(5),\n [theme.breakpoints.down('xs')]: {\n padding: theme.spacing(1),\n backgroundColor: theme.palette.background.paper,\n },\n },\n }),\n { name: 'RaDashboardPlayToolbar' }\n);\n\nconst DashboardPlayToolbar = (props) => {\n const {\n classes: classesOverride,\n Actions,\n variables,\n ...rest\n } = props;\n const classes = useStyles(props);\n\n return (\n <Toolbar className={classes.toolbar}>\n {variables && (\n <VariablesForm {...rest} />\n )}\n <span />\n {Actions &&\n React.cloneElement(Actions, {\n ...rest,\n className: classes.actions,\n variables,\n ...Actions.props,\n })}\n </Toolbar>\n );\n};\n\nDashboardPlayToolbar.propTypes = {\n classes: PropTypes.object,\n variables: PropTypes.oneOfType([PropTypes.bool, PropTypes.array]),\n Actions: PropTypes.oneOfType([PropTypes.bool, PropTypes.element]),\n};\n\n\n\nexport default React.memo(DashboardPlayToolbar);\n","import React, { memo, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport AddCircleIcon from '@material-ui/icons/AddCircle';\nimport { Link } from 'react-router-dom';\nimport { useResourceContext, Button } from 'react-admin';\n\n\n\nconst CreateWidgetOnDashboardButton = (props) => {\n const {\n basePath = '/WidgetOnDashboard',\n icon = defaultIcon,\n label = 'ra.action.create_widget',\n record,\n scrollToTop = true,\n ...rest\n } = props;\n\n\n const resource = useResourceContext();\n const to = useMemo(() => ({\n pathname: `/Dashboard/${record?.id}/WidgetOnDashboard/create`,\n }), [basePath, record, resource])\n\n if (!record) return null\n\n return (\n <Button\n component={Link}\n to={to}\n label={label}\n onClick={stopPropagation}\n {...rest}\n >\n {icon}\n </Button>\n );\n};\n\nconst defaultIcon = <AddCircleIcon />;\n\nconst stopPropagation = e => e.stopPropagation();\n\nCreateWidgetOnDashboardButton.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n scrollToTop: PropTypes.bool,\n};\n\nconst PureCreateWidgetOnDashboardButton = memo(\n CreateWidgetOnDashboardButton,\n (props, nextProps) =>\n (props.record && nextProps.record\n ? props.record.id === nextProps.record.id\n : props.record == nextProps.record) && // eslint-disable-line eqeqeq\n props.basePath === nextProps.basePath &&\n props.to === nextProps.to &&\n props.disabled === nextProps.disabled\n);\n\nexport default PureCreateWidgetOnDashboardButton;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M21 13.1C20.9 13.1 20.7 13.2 20.6 13.3L19.6 14.3L21.7 16.4L22.7 15.4C22.9 15.2 22.9 14.8 22.7 14.6L21.4 13.3C21.3 13.2 21.2 13.1 21 13.1M19.1 14.9L13 20.9V23H15.1L21.2 16.9L19.1 14.9M21 9H13V3H21V9M13 18.06V11H21V11.1C20.24 11.1 19.57 11.5 19.19 11.89L13 18.06M11 13H3V3H11V13M11 21H3V15H11V21Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React, { useCallback } from 'react';\nimport { Button } from 'react-admin';\nimport DashboardEditIcon from '../icons/DashboardEdit';\nimport useDashboardContext from '../../controller/dashboard/useDashboardContext';\n\n\n\n\nconst DashboardChangeLayoutButton = (props) => {\n const {\n basePath = '',\n label = 'ra.action.change_layout',\n record,\n ...rest\n } = props\n const { setEditable } = useDashboardContext()\n\n const handleClick = useCallback((event) => {\n stopPropagation(event)\n setEditable(true)\n }, [setEditable])\n\n return (\n <Button\n label={label}\n onClick={handleClick}\n {...rest}\n >\n <DashboardEditIcon />\n </Button>\n )\n}\n\n\nconst stopPropagation = e => e.stopPropagation();\n\n\n\nexport default DashboardChangeLayoutButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { TopToolbar } from 'react-admin';\nimport useDashboardContext from '../../controller/dashboard/useDashboardContext';\nimport CreateWidgetOnDashboardButton from '../button/CreateWidgetOnDashboardButton';\nimport MoreButton from '../button/MoreButton';\nimport ShowButtonAsMenuItem from '../button/ShowButtonAsMenuItem';\nimport EditButtonAsMenuItem from '../button/EditButtonAsMenuItem';\nimport CloneButtonAsMenuItem from '../button/CloneButtonAsMenuItem';\nimport RemoveButtonAsMenuItem from '../../lib/button/RemoveButtonAsMenuItem';\nimport RestoreButtonAsMenuItem from '../../lib/button/RestoreButtonAsMenuItem';\nimport DeleteButtonAsMenuItem from '../../lib/button/DeleteButtonAsMenuItem';\nimport permissions from \"../../authProvider/abilityProvider\";\nimport DashboardChangeLayoutButton from './DashboardChangeLayoutButton';\n\n\n\nconst sanitizeRestProps = ({\n basePath,\n className,\n hasEdit,\n hasList,\n resource,\n ...rest\n}) => rest;\n\nconst DashboardPlayActions = ({ className, ...rest }) => {\n const { basePath, record, resource } = useDashboardContext(rest);\n const deleted = record?.deleted\n return (\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\n {permissions.can('update', \"Dashboard\") && permissions.can('create', \"WidgetOnDashboard\") && permissions.can('getMany', \"Widget\") && permissions.can('getList', \"Widget\") && <CreateWidgetOnDashboardButton basePath={basePath} record={record} />}\n {permissions.can('update', \"Dashboard\") && <DashboardChangeLayoutButton basePath={basePath} record={record} />}\n <MoreButton color=\"primary\">\n {permissions.can('getOne', \"Dashboard\") && <ShowButtonAsMenuItem basePath={basePath} record={record} />}\n {permissions.can('update', \"Dashboard\") && <EditButtonAsMenuItem basePath={basePath} record={record} />}\n {permissions.can('create', \"Dashboard\") && <CloneButtonAsMenuItem basePath={basePath} record={record} />}\n {permissions.can('remove', \"Dashboard\") && !deleted && <RemoveButtonAsMenuItem basePath={basePath} record={record} />}\n {permissions.can('restore', \"Dashboard\") && deleted && <RestoreButtonAsMenuItem basePath={basePath} record={record} />}\n {permissions.can('restore', \"Dashboard\") && deleted && <DeleteButtonAsMenuItem basePath={basePath} record={record} />}\n </MoreButton>\n </TopToolbar>\n );\n};\n\nDashboardPlayActions.propTypes = {\n basePath: PropTypes.string,\n className: PropTypes.string,\n data: PropTypes.object,\n hasCreate: PropTypes.bool,\n hasEdit: PropTypes.bool,\n hasDashboard: PropTypes.bool,\n hasList: PropTypes.bool,\n resource: PropTypes.string,\n};\n\nexport default DashboardPlayActions","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport WidgetIcon from '@material-ui/icons/Extension';\nimport classnames from 'classnames';\nimport EllipsisLoader from '../../lib/layout/EllipsisLoader';\nimport { useTranslate } from 'ra-core';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n height: \"100%\",\n backgroundColor: theme.palette.action.focus,\n borderRadius: theme.shape.borderRadius\n },\n message: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n fontFamily: 'Roboto, sans-serif',\n opacity: 0.5,\n padding: 8,\n },\n text: {\n textAlign: \"center\"\n },\n}), { name: 'RaWidgetOnDashboardLoading' });\n\nconst Loading = props => {\n const {\n className,\n\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n return (\n <div className={classnames(classes.container, className)}>\n <div className={classes.message}>\n <WidgetIcon />\n <Typography variant='body2' className={classes.text}>{translate(\"ra.message.widget_on_dashboard_loading\")}<EllipsisLoader /></Typography>\n </div>\n </div >\n );\n};\n\nLoading.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n textPrimary: PropTypes.string,\n textSecondary: PropTypes.string,\n};\n\n\nexport default Loading;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport WidgetIcon from '@material-ui/icons/Extension';\nimport classnames from 'classnames';\nimport { useTranslate } from 'ra-core';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n height: \"100%\",\n backgroundColor: theme.palette.action.focus,\n borderRadius: theme.shape.borderRadius\n },\n message: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n alignItems: 'center',\n fontFamily: 'Roboto, sans-serif',\n opacity: 0.5,\n padding: 8,\n },\n text: {\n textAlign: \"center\"\n },\n}), { name: 'RaWidgetOnDashboardNotFound' });\n\nconst NotFound = props => {\n const {\n className,\n\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n return (\n <div className={classnames(classes.container, className)}>\n <div className={classes.message}>\n <WidgetIcon />\n <Typography variant='body2' className={classes.text}>{translate(\"ra.message.widget_on_dashboard_not_found\")}</Typography>\n </div>\n </div>\n );\n};\n\n\nexport default NotFound;\n","import { useEffect, useState } from 'react';\n\nconst defaultState = {\n Widget: undefined,\n WidgetPreview: undefined,\n WidgetProperties: undefined,\n hasWidget: false,\n hasWidgetPreview: false,\n hasWidgetProperties: false,\n loading: false,\n loaded: false,\n}\n\nconst useWidgetModule = (url) => {\n\n const [module, setModule] = useState(defaultState)\n\n useEffect(() => {\n\n const onModuleLoad = (url) => {\n\n setModule({ ...defaultState, loading: true });\n import(`../../lib/widget/${url.replace('./', '')}`) //прикол вебпак https://stackoverflow.com/questions/54254553/dynamic-import-in-react-not-working-when-trying-to-import-a-component-in-another\n .then(module => {\n setModule({\n Widget: module.Widget,\n WidgetPreview: module.WidgetPreview,\n WidgetProperties: module.WidgetProperties,\n hasWidget: Boolean(module.Widget),\n hasWidgetPreview: Boolean(module.WidgetPreview),\n hasWidgetProperties: Boolean(module.WidgetProperties),\n loading: false,\n loaded: true,\n });\n })\n .catch(error => {\n setModule({\n error,\n loading: false,\n loaded: false,\n });\n });\n }\n\n if (url) {\n onModuleLoad(url)\n };\n\n return () => {\n setModule(defaultState);\n }\n\n }, [url]);\n\n return module;\n}\n\n\nexport default useWidgetModule","import React, { forwardRef, isValidElement } from 'react';\nimport WidgetOnDashboardLoading from './WidgetOnDashboardLoading';\nimport WidgetOnDashboardNotFound from './WidgetOnDashboardNotFound';\nimport useWidgetModule from '../../controller/widget/useWidgetModule';\n\n\nconst WidgetOnDashboardPlayPreview = forwardRef((props, ref) => {\n const { widgetOnDashboard, widget } = props\n const { WidgetPreview, hasWidgetPreview, error, loading } = useWidgetModule(widget.url);\n\n if (loading) return (<WidgetOnDashboardLoading />);\n if (!hasWidgetPreview || !isValidElement(<WidgetPreview />)) return (<WidgetOnDashboardNotFound />)\n if (error) return (\"error...\");\n\n\n if (!widgetOnDashboard) return null;\n\n return (\n <WidgetPreview {...props} />\n );\n});\n\n\n\nexport default WidgetOnDashboardPlayPreview;","import React, { useCallback, useMemo } from \"react\";\nimport omit from 'lodash/omit';\nimport { WidthProvider, Responsive as ResponsiveGridLayout } from \"react-grid-layout\";\nimport './styles.css';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Empty } from 'react-admin';\nimport WidgetOnDashboardPlayPreview from \"../widgetOnDashboard/WidgetOnDashboardPlayPreview\";\nimport useDashboardContext from '../../controller/dashboard/useDashboardContext';\n\n\nconst buildGridProps = (pos) => {\n if (!pos) return null\n const { x = 0, y = Infinity, w = 1, h = 1 } = pos\n return { x, y, w, h }\n}\n\nconst useStyles = makeStyles(theme => ({\n editable: {\n cursor: \"grab\",\n \"&.react-draggable-dragging\": {\n cursor: \"grabbing\",\n }\n },\n}), { name: 'DashboardPlayLayout' });\n\nconst ResponsiveReactGridLayout = WidthProvider(ResponsiveGridLayout);\n\nconst DashboardPlayLayout = (props) => {\n const {\n basePath,\n className,\n resource,\n version,\n viewOnly,\n ...rest\n } = props\n const classes = useStyles()\n const { record, layouts, setLayouts, editable } = useDashboardContext()\n\n const widgetsOnDashboard = useMemo(() => record?.widgetsOnDashboard, [record])\n\n const handleLayoutChange = useCallback((currentLayout, allLayouts) => {\n setLayouts(allLayouts)\n }, [setLayouts])\n\n if (!(layouts && widgetsOnDashboard)) return null\n if (Array.isArray(widgetsOnDashboard) && widgetsOnDashboard.length === 0) return (<Empty resource=\"WidgetOnDashboard\" basePath={`${basePath}/${record.id}/WidgetOnDashboard`} hasCreate={true} />)\n\n\n return (\n <ResponsiveReactGridLayout\n onLayoutChange={handleLayoutChange}\n className=\"layout\"\n layouts={layouts}\n breakpoints={{ xxl: 1920, xl: 1600, lg: 1280, md: 960, sm: 600, xs: 0 }}\n cols={{ xxl: 32, xl: 24, lg: 20, md: 14, sm: 6, xs: 2 }}\n margin={[16, 16]}\n containerPadding={[0, 0]}\n rowHeight={24}\n isBounded={true}\n measureBeforeMount={true}\n isDraggable={Boolean(!viewOnly && editable)}\n isResizable={Boolean(!viewOnly && editable)}\n >\n {widgetsOnDashboard.map(widgetOnDashboard => {\n const nestedRecord = {\n ...widgetOnDashboard,\n dashboard: omit(record, [\"widgetsOnDashboard\"])\n }\n\n return (\n <div key={widgetOnDashboard.id} className={classnames({ [classes.editable]: editable })} data-grid={buildGridProps(widgetOnDashboard.grid)}>\n <WidgetOnDashboardPlayPreview\n basePath={`/Dashboard/${record?.id}/WidgetOnDashboard`}\n dashboard={record} //deprecated\n widgetOnDashboard={widgetOnDashboard} //deprecated\n widget={widgetOnDashboard.widget} //deprecated\n record={nestedRecord}\n viewOnly={viewOnly}\n />\n </div>\n )\n })}\n </ResponsiveReactGridLayout>\n )\n\n}\n\n\nexport default DashboardPlayLayout","import React, { useCallback, Fragment } from 'react';\nimport Button from '@material-ui/core/Button';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport { useTranslate } from 'ra-core';\nimport useDashboardContext from '../../controller/dashboard/useDashboardContext';\nimport { parseWidgetsOnDashboardToLayouts } from '../../controller/dashboard/useDashboardController';\n\n\n\nconst DashboardChangeLayoutSnackbar = (props) => {\n const { record, editable, setEditable, saveLayouts, setLayouts } = useDashboardContext()\n const translate = useTranslate();\n\n const handleClose = useCallback((event, reason) => {\n if (reason === 'clickaway') {\n return;\n }\n\n setEditable(false);\n const parsedLayouts = parseWidgetsOnDashboardToLayouts(record.widgetsOnDashboard)\n setLayouts(parsedLayouts)\n }, [setEditable, setLayouts, record])\n\n const handleSave = useCallback(event => {\n saveLayouts();\n setEditable(false);\n }, [saveLayouts, setEditable])\n\n return (\n\n <Snackbar\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'center',\n }}\n open={editable}\n\n onClose={handleClose}\n message={translate(\"ra.message.change_layout\")}\n action={\n <Fragment>\n <Button color=\"inherit\" size=\"small\" onClick={handleClose}>{translate(\"ra.action.cancel\")}</Button>\n <Button color=\"primary\" size=\"small\" onClick={handleSave}>{translate(\"ra.action.save\")}</Button>\n </Fragment>\n }\n />\n )\n}\n\n\n\nconst stopPropagation = e => e.stopPropagation();\n\n\n\nexport default DashboardChangeLayoutSnackbar;\n","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useTranslate } from 'react-admin';\nimport DashboardBreadcrumbItem from './DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from './ListBreadcrumbItem';\nimport RecordBreadcrumbItem from './RecordBreadcrumbItem';\nimport BreadcrumbItem from './BreadcrumbItem';\nimport useDashboardContext from '../../controller/dashboard/useDashboardContext';\n\n\n\n\n\nconst DashboardPlayBreadcrumbs = (props) => {\n const contextProps = useDashboardContext();\n const translate = useTranslate();\n\n return (\n <Breadcrumbs aria-label=\"breadcrumb\">\n <DashboardBreadcrumbItem {...contextProps} />\n <ListBreadcrumbItem {...contextProps} />\n <RecordBreadcrumbItem {...contextProps} {...props} />\n <BreadcrumbItem>{translate(\"ra.action.play\")}</BreadcrumbItem>\n </Breadcrumbs>\n );\n};\n\nexport default DashboardPlayBreadcrumbs\n","import React from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport { Button } from 'react-admin';\nimport DashboardIcon from '@material-ui/icons/Dashboard';\nimport AirplayIcon from '@material-ui/icons/Airplay';\nimport LanguageIcon from '@material-ui/icons/Language';\n\n\nconst DashboardLinkButton = (props) => {\n const { record, ...rest } = props;\n const location = useLocation();\n const { name, url } = record\n const to = `${url}${location.search}`\n return (\n <Button\n component={Link}\n to={to}\n label={name}\n onClick={stopPropagation}\n variant=\"outlined\"\n size=\"medium\"\n >\n <DashboardIcon />\n </Button>\n );\n};\n\nconst InternalLinkButton = (props) => {\n const { record, ...rest } = props;\n const { name, url } = record\n return (\n <Button\n component={Link}\n to={url}\n label={name}\n onClick={stopPropagation}\n variant=\"outlined\"\n size=\"medium\"\n >\n <AirplayIcon />\n </Button>\n );\n};\n\nconst ExternalLinkButton = (props) => {\n const { record, ...rest } = props;\n const { name, url } = record\n return (\n <Button\n href={url}\n target=\"_blank\"\n label={name}\n onClick={stopPropagation}\n variant=\"outlined\"\n size=\"medium\"\n >\n <LanguageIcon />\n </Button>\n );\n};\n\n\nconst DashboardEnchaencesLinkButton = (props) => {\n const { record } = props\n if (!record) return null\n\n switch (record.type) {\n case \"DASHBOARD\": return (<DashboardLinkButton {...props} />)\n case \"INTERNAL\": return (<InternalLinkButton {...props} />)\n case \"EXTERNAL\": return (<ExternalLinkButton {...props} />)\n }\n\n};\n\n// useful to prevent click bubbling in a datagrid with rowClick\nconst stopPropagation = e => e.stopPropagation();\n\n\n\nexport default DashboardEnchaencesLinkButton;\n","import React from 'react';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport { makeStyles } from '@material-ui/core/styles';\nimport NestedArrayField from '../field/NestedArrayField';\nimport DashboardLinkButton from './DashboardLinkButton';\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n justifyContent: 'flex-start',\n },\n container: {\n marginTop: 8,\n marginBottom: 8,\n gap: 8,\n },\n}), { name: 'DashboardLinksToolbar' })\n\nconst DashboardLinksToolbar = (props) => {\n const { data, basePath, resource, ...rest } = props\n const classes = useStyles()\n\n return (\n <Toolbar className={classes.root} disableGutters >\n <NestedArrayField source=\"links\" resource={resource} basePath={basePath} record={data} {...rest} link={false} className={classes.container}>\n <DashboardLinkButton />\n </NestedArrayField>\n </Toolbar>\n\n );\n};\n\n\n\nexport default DashboardLinksToolbar","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { Alert, AlertTitle } from '@material-ui/lab';\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n border: `1px solid ${theme.palette.warning.light}`,\n marginBottom: theme.spacing(2)\n },\n}), { name: 'DashboardPlayViewObjectVariableAlert' });\n\nconst DashboardPlayViewObjectVariableAlert = (props) => {\n const {\n variables,\n variablesValues,\n } = props;\n\n const classes = useStyles();\n const hide = !variables?.includes(\"assetId\") || (variables?.includes(\"assetId\") && variablesValues?.assetId != null)\n\n if (hide) return null\n\n return (\n <Alert severity=\"warning\" classes={{ root: classes.root }}>\n <AlertTitle>Предупреждение</AlertTitle>\n Значение переменной <strong>Объект</strong> не заполнено. Выберите Объект из выпадающего списка или проверьте связанные Объекты в свойствах Панели\n </Alert>\n );\n};\n\n\nexport default DashboardPlayViewObjectVariableAlert","import * as React from 'react';\nimport { Typography } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Dashboard from '@material-ui/icons/Dashboard';\nimport {\n EditButton,\n} from 'react-admin';\n\n\n\nconst Empty = (props) => {\n const { record } = props\n const classes = useStyles(props);\n\n if (!record) return null\n\n return (\n <div className={classes.root}>\n <div className={classes.message}>\n <Dashboard className={classes.icon} />\n <Typography variant=\"h5\" paragraph>\n {`Панель ${record.name} удалена`}\n </Typography>\n <Typography variant=\"body1\">\n Просмотр недоступен\n </Typography>\n </div>\n\n <div className={classes.toolbar}>\n <EditButton basePath=\"/Dashboard\" record={record} />\n </div>\n\n </div>\n );\n};\n\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n flexGrow: 1,\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n message: {\n textAlign: 'center',\n opacity: theme.palette.type === 'light' ? 0.5 : 0.8,\n margin: '0 1em',\n color:\n theme.palette.type === 'light'\n ? 'inherit'\n : theme.palette.text.primary,\n },\n icon: {\n width: 56,\n height: 56,\n },\n toolbar: {\n textAlign: 'center',\n marginTop: '2em',\n },\n }), { name: 'RaEmpty' });\n\nexport default Empty","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { useResourceDefinition, TitleForRecord } from 'react-admin';\nimport useDashboardContext from '../../controller/dashboard/useDashboardContext';\nimport DashboardPlayToolbar from './DashboardPlayToolbar';\nimport DefaultDashboardPlayActions from './DashboardPlayActions';\nimport DashboardPlayLayout from './DashboardPlayLayout';\nimport DashboardChangeLayoutSnackbar from './DashboardChangeLayoutSnackbar';\nimport DefaultDashboardPlayBreadcrumbs from '../breadcrumbs/DashboardPlayBreadcrumbs';\nimport DashboardLinksToolbar from './DashboardLinksToolbar';\nimport DashboardPlayViewObjectVariableAlert from './DashboardPlayViewObjectVariableAlert';\nimport DashboardDeleted from './DashboardDeleted';\n\n\n\n\nconst DashboardPlayView = (props) => {\n const {\n Actions,\n Breadcrumbs,\n children,\n classes: classesOverride,\n className,\n Title,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n\n const {\n basePath,\n defaultTitle,\n hasList,\n record,\n resource,\n version,\n variables,\n variablesValues,\n } = useDashboardContext(props);\n const { hasEdit } = useResourceDefinition(props);\n if (!record) return null\n const deleted = record?.deleted\n if (deleted) return (<DashboardDeleted record={record} />)\n const hasVariables = Array.isArray(variables) && variables.length > 0\n const hasActions = Boolean(Actions)\n const hasLinks = Array.isArray(record.links) && record.links.length > 0\n const dashboardVariablesLoaded = variables ? variables.map(variable => variablesValues ? !(variablesValues[variable] == null) : false).every(Boolean) : true\n\n return (\n <div\n className={classnames('dashboard-page', classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n <TitleForRecord\n title={Title}\n record={record}\n defaultTitle={defaultTitle}\n />\n {Breadcrumbs}\n {(hasVariables || hasActions) && (\n <DashboardPlayToolbar\n Actions={Actions}\n basePath={basePath}\n data={record}\n hasList={hasList}\n hasEdit={hasEdit}\n resource={resource}\n variables={variables}\n />\n )}\n {hasLinks && (<DashboardLinksToolbar basePath={basePath} data={record} resource={resource} />)}\n <div className={classnames(classes.main)}>\n <div className={classes.mainContent}>\n <DashboardPlayViewObjectVariableAlert variables={variables} variablesValues={variablesValues} />\n {record && dashboardVariablesLoaded && (\n <DashboardPlayLayout resource={resource} basePath={basePath} record={record} version={version} />\n )}\n </div>\n </div>\n <DashboardChangeLayoutSnackbar />\n </div>\n );\n};\n\nDashboardPlayView.propTypes = {\n Actions: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n Breadcrumbs: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n aside: PropTypes.element,\n basePath: PropTypes.string,\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n defaultTitle: PropTypes.any,\n hasEdit: PropTypes.bool,\n hasList: PropTypes.bool,\n loading: PropTypes.bool,\n loaded: PropTypes.bool,\n record: PropTypes.object,\n resource: PropTypes.string,\n Title: PropTypes.any,\n version: PropTypes.node,\n};\n\nDashboardPlayView.defaultProps = {\n classes: {},\n Actions: <DefaultDashboardPlayActions />,\n Breadcrumbs: <DefaultDashboardPlayBreadcrumbs />,\n};\n\nconst useStyles = makeStyles(\n {\n root: {},\n main: {\n display: 'flex',\n },\n mainContent: {\n flex: '1 1 auto',\n },\n },\n { name: 'RaDashboardPlayView' }\n);\n\nconst sanitizeRestProps = ({\n basePath = null,\n defaultTitle = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasDashboard = null,\n history = null,\n id = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n options = null,\n refetch = null,\n permissions = null,\n range = null,\n setRange = null,\n variables = null,\n variablesValues = null,\n setVariablesValues = null,\n editable = null,\n setEditable = null,\n setLayouts = null,\n saveLayouts = null,\n viewOnly = null,\n ...rest\n}) => rest;\n\n\nexport default DashboardPlayView","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { ResourceContextProvider, useCheckMinimumRequiredProps } from 'ra-core';\nimport useDashboardController from '../../controller/dashboard/useDashboardController';\nimport DashboardContextProvider from '../../controller/dashboard/DashboardContextProvider';\nimport DashboardPlayView from './DashboardPlayView';\n\n\n\nconst DashboardPlay = (props) => {\n const controllerProps = useDashboardController(props);\n\n return (\n <ResourceContextProvider value={props.resource}>\n <DashboardContextProvider value={controllerProps}>\n <DashboardPlayView {...props} {...controllerProps} />\n </DashboardContextProvider>\n </ResourceContextProvider>\n )\n};\n\nDashboardPlay.propTypes = {\n Actions: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n Breadcrumbs: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n classes: PropTypes.object,\n className: PropTypes.string,\n id: PropTypes.any.isRequired,\n resource: PropTypes.string,\n Title: PropTypes.node,\n};\n\nexport default DashboardPlay\n","import React from \"react\";\nimport DashboardPlayLib from '../../lib/dashboard/DashboardPlay';\nimport TitleForRecord from '../../lib/layout/TitleForRecord';\n\n\n\nexport const DashboardPlay = (props) => (\n <DashboardPlayLib\n {...props}\n Title={<TitleForRecord source=\"name\" {...props} />}\n />\n);\n\n\nexport default DashboardPlay;","import DashboardIcon from '@material-ui/icons/Dashboard';\nimport DashboardList from './DashboardList';\nimport DashboardShow from './DashboardShow';\nimport DashboardCreate from './DashboardCreate';\nimport DashboardEdit from './DashboardEdit';\nimport DashboardPlay from './DashboardPlay';\n\n\n\nconst DashboardName = \"Dashboard\"\n\nconst DashboardResource = {\n name: DashboardName,\n icon: DashboardIcon,\n list: DashboardList,\n show: DashboardShow,\n create: DashboardCreate,\n edit: DashboardEdit\n}\n\nexport default DashboardResource;\nexport {\n DashboardName,\n DashboardIcon,\n DashboardList,\n DashboardShow,\n DashboardCreate,\n DashboardEdit,\n DashboardPlay,\n};","import React, { forwardRef } from 'react';\nimport { Link } from 'react-router-dom';\n\n\n\nimport { DashboardIcon } from '../Dashboard';\n\n\nimport { parse, stringify } from 'query-string';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardActions from '@material-ui/core/CardActions';\nimport Typography from '@material-ui/core/Typography';\n\n\n\nconst LinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} {...props} />);\n\n\n\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n // root: {\n // maxWidth: theme.spacing(32),\n // margin: \".125rem\",\n // background: \"rgba(0, 0, 0, 0.04)\",\n // },\n\n card: {\n // maxWidth: 345,\n },\n clicable: {\n cursor: 'pointer',\n },\n media: {\n height: 140,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 56,\n\n },\n title: {\n marginRight: \"auto\",\n },\n action: {\n marginTop: -3,\n marginBottom: -3,\n },\n}));\n\nconst stopPropagation = e => e.stopPropagation();\n\n\nconst AssetDashboardCard = forwardRef((props, ref) => {\n const {\n className,\n classes: classesOverride,\n record,\n resource,\n source,\n linkType,\n parent,\n ...rest\n } = props\n const classes = useStyles({ classes: classesOverride });\n\n if (!record) return null;\n\n return (\n <Card {...rest} className={classnames(classes.card)}>\n <CardActionArea\n component={LinkRef}\n ref={ref}\n to={{\n pathname: `/Dashboard/${record.id}/play`,\n search: `?${stringify({\n variables: JSON.stringify({ assetId: parent.id }),\n })}`,\n }}\n >\n <div className={classes.media} >\n <DashboardIcon fontSize='inherit' color='primary' />\n </div>\n </CardActionArea>\n <CardActions>\n <DashboardIcon color='primary' />\n <Typography variant=\"caption\" noWrap className={classes.title}>{record.name}</Typography>\n </CardActions>\n </Card>\n );\n});\n\n\n\nexport default AssetDashboardCard;","import React, { forwardRef } from 'react';\nimport get from 'lodash/get';\nimport { Link } from 'react-router-dom';\nimport Chip from '@material-ui/core/Chip';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate } from 'react-admin';\nimport { parse, stringify } from 'query-string';\n\nconst useStyles = makeStyles(theme => ({\n chip: {\n }\n}));\n\nconst LinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} {...props} />);\n\nconst AssetDashboardChip = forwardRef(({ classes: classesOverride, className, resource, record, parent, source, ...props }, ref) => {\n const classes = useStyles({ classes: classesOverride });\n\n const value = get(record, source);\n const isDefault = record?.isDefault\n\n return (\n <Chip\n className={classes.chip}\n label={value}\n // size=\"small\"\n color={isDefault ? \"primary\" : \"default\"}\n component={LinkRef}\n ref={ref}\n to={{\n pathname: `/Dashboard/${record.id}/play`,\n search: `?${stringify({\n variables: JSON.stringify({ assetId: parent.id }),\n })}`,\n }}\n clickable\n />\n\n\n );\n});\n\n\n\nexport default AssetDashboardChip;","import React from 'react';\nimport { useDropzone } from 'react-dropzone'\nimport { useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\n\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n dropZone: ({ isDragAccept, isDragReject }) => ({\n backgroundColor: isDragAccept ? \"#c8e6c9\" : isDragReject ? \"#ffcdd2\" : theme.palette.action.selected,\n color: theme.palette.text.secondary,\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n padding: theme.spacing(1),\n textAlign: 'center',\n transition: \"background-color .24s ease-in-out\",\n marginBottom: theme.spacing(2),\n })\n}));\n\nconst Dropzone = ({ onChange, accept, disabled }) => {\n\n const translate = useTranslate();\n\n const { getRootProps, getInputProps, isDragAccept, isDragReject } = useDropzone({\n accept: accept || null,\n disabled,\n multiple: true,\n onDrop: (acceptedFiles) => {\n onChange(acceptedFiles);\n },\n })\n\n const classes = useStyles({ isDragAccept, isDragReject });\n\n return (\n <div className={classes.dropZone} {...getRootProps()}>\n <input {...getInputProps()} />\n <p>{translate('ra.input.file.upload_single')}</p>\n </div>\n )\n};\n\nexport default Dropzone\n\n","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../../authProvider/authorizationProvider/checkToken';\nimport { URI_BLOB } from '../../appsettings';\n\nconst parseHeaders = (rawHeaders) => {\n const headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n const preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, \" \")\n preProcessedHeaders.split(/\\r?\\n/).forEach((line) => {\n const parts = line.split(\":\")\n const key = parts.shift().trim()\n if (key) {\n const value = parts.join(\":\").trim()\n headers.append(key, value)\n }\n })\n return headers\n}\n\nconst uploadFetch = (url, options) =>\n new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest()\n\n xhr.open(options.method, url, true)\n\n xhr.onload = () => {\n const opts = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || \"\")\n }\n opts.url =\n \"responseURL\" in xhr\n ? xhr.responseURL\n : opts.headers.get(\"X-Request-URL\");\n const body = \"response\" in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, opts))\n }\n\n xhr.onerror = () => {\n reject(new Error(\"Network request failed\"))\n }\n\n xhr.ontimeout = () => {\n reject(new Error(\"Network request timeout\"))\n }\n\n const abort = () => { xhr.abort() }\n\n if (typeof options.onProgress === 'function') xhr.upload.onprogress = options.onProgress\n if (typeof options.onAbortHandler === 'function') options.onAbortHandler(abort)\n if (typeof options.onAborted === 'function') xhr.onabort = options.onAborted\n\n Object.keys(options.headers).forEach(key => {\n xhr.setRequestHeader(key, options.headers[key])\n })\n\n \n\n xhr.send(options.body)\n })\n\nclass GraphQLClientConstructor {\n constructor(enpoint, uploadOptions) {\n\n const client = new GraphQLClient(enpoint, { fetch: uploadFetch, ...uploadOptions });\n\n this.request = async (query, variables,) => {\n const token = await checkToken();\n client.setHeader('authorization', token ? `Bearer ${token}` : \"\");\n client.setHeader('Apollo-Require-Preflight', 'true');\n\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = (uploadOptions) => new GraphQLClientConstructor(URI_BLOB, uploadOptions)\n\nexport default client","import gql from 'graphql-tag'\nimport graphqlUploadClient from '../graphqlUploadClient';\n\n\nexport const UPLOAD_TO_BLOB = gql`\n mutation multipleUpload($appname: String!, $namecatalog: String! $files: [Upload!]!) {\n data: multipleUpload(appname: $appname, namecatalog: $namecatalog, files: $files) { \n id\n name: filename\n url\n urlThumbnail\n catalog\n size: sizeInBytes\n type: mimetype\n path: virtualpath\n }\n }\n`\n\nexport default async (args, uploadOptions) => {\n\n return graphqlUploadClient(uploadOptions).request(UPLOAD_TO_BLOB, args)\n .then(response => {\n return {\n data: response?.data[0]\n }\n })\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport IconButton from '@material-ui/core/IconButton';\nimport ClearIcon from '@material-ui/icons/Clear';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport lodashThrottle from 'lodash/throttle';\nimport { useTranslate } from 'react-admin';\nimport upload from '../../dataProvider/BlobService/Blob/upload';\nimport FileIcon from './FileIcon';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\n\nconst useStyles = makeStyles(theme => ({\n success: {\n color: theme.palette.success.main\n },\n progress: {\n flexShrink: 0\n },\n aborted: {\n opacity: 0.5\n },\n}), { name: 'RaFileUploadDialog' });\n\n\nconst FileUploadItem = (props) => {\n const {\n file,\n uploadOptions,\n onUploadedFile\n } = props\n const classes = useStyles()\n const [abortHandler, setAbortHandler] = useState();\n const [state, setState] = useState({\n data: undefined,\n uploading: false,\n uploaded: false,\n aborted: false,\n error: undefined,\n percent: 0\n });\n\n const {\n data,\n uploading,\n uploaded,\n aborted,\n error,\n percent\n } = state\n\n const handleProgress = useCallback((progress) => {\n const percent = progress && progress.loaded > 0 ? Math.round(progress.loaded / progress.total * 100) : 0\n const throttledSetPercent = lodashThrottle((percent) => {\n setState(previous => ({ ...previous, percent }))\n }, 500);\n throttledSetPercent(percent)\n }, [setState])\n\n const handleAborted = useCallback(() => {\n setState(previous => ({\n ...previous,\n uploading: false,\n uploaded: false,\n aborted: true\n }))\n }, [setState])\n\n const handleAbortHandler = useCallback((abortHandler) => {\n setAbortHandler(() => abortHandler)\n }, [setAbortHandler])\n\n const handleAbort = useCallback(() => {\n if (typeof abortHandler === 'function') abortHandler()\n }, [abortHandler])\n\n\n useEffect(() => {\n if (aborted) return\n setState(previous => ({ ...previous, uploading: true }))\n upload({\n ...uploadOptions,\n files: [file]\n }, {\n onProgress: handleProgress,\n onAborted: handleAborted,\n onAbortHandler: handleAbortHandler,\n })\n .then(response => {\n setState(previous => ({\n ...previous,\n data: response?.data,\n uploading: false,\n uploaded: true\n }))\n onUploadedFile(response?.data)\n })\n .catch((error) => {\n console.log('Ошибка создания файлов в BLOB: ', error)\n\n setState(previous => ({\n ...previous,\n uploading: false,\n uploaded: false,\n error\n }))\n })\n }, [aborted, setState])\n\n useEffect(() => {\n return function cleanup() {\n if (typeof abortHandler === 'function') abortHandler()\n };\n }, [abortHandler])\n\n return (\n <ListItem className={classnames({ [classes.aborted]: aborted })}>\n <ListItemIcon>\n {uploading\n ? <CircularProgress className={classes.progress} variant=\"determinate\" size={18} thickness={6} value={percent} />\n : <FileIcon record={{ type: file.type }} />\n }\n </ListItemIcon>\n <ListItemText primary={file.name} />\n {uploading && !aborted && (\n <IconButton edge=\"end\" size=\"small\" onClick={handleAbort}>\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n )}\n </ListItem>\n\n );\n}\n\nexport default FileUploadItem\n","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../../authProvider/authorizationProvider/checkToken';\nimport { URI_BLOB } from '../../appsettings';\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeader('authorization', token ? `Bearer ${token}` : \"\");\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_BLOB)\n\nexport default client","import gql from 'graphql-tag'\nimport graphqlClient from '../graphqlClient';\n\n\nexport const GET_ONE_FILE = gql`\n query getOneFile($where: FileWhereUniqueInput!) {\n data: getOneFile(where: $where) { \n data {\n id\n filename\n }\n }\n }\n`\n\nexport default (args) => {\n return graphqlClient.request(GET_ONE_FILE, args)\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport IconButton from '@material-ui/core/IconButton';\nimport ClearIcon from '@material-ui/icons/Clear';\nimport Alert from '@material-ui/lab/Alert';\nimport FileIcon from './FileIcon';\nimport getOneFile from '../../dataProvider/BlobService/Blob/getOne';\n\nconst useStyles = makeStyles(theme => ({\n fileIcon: {\n opacity: 0.5\n },\n\n}), { name: 'RaFileUploadDialog' });\n\n\nconst FileItem = (props) => {\n const {\n file,\n onRemoveFile\n } = props\n \n const classes = useStyles();\n\n const [existFile, setExistFile] = useState(null);\n\n const handleRemove = useCallback(() => {\n onRemoveFile && onRemoveFile(file.name);\n }, [onRemoveFile]);\n\n useEffect(() => {\n getOneFile({\n where: { filename: file.name }\n }).then(data => {\n setExistFile(data.data.data || null); \n })\n }, [file])\n\n return (\n <>\n <ListItem>\n <ListItemIcon>\n <FileIcon className={classes.fileIcon} record={{ type: file.type }} />\n </ListItemIcon>\n <ListItemText primary={file.name} /> \n <IconButton edge=\"end\" size=\"small\" onClick={handleRemove}>\n <ClearIcon fontSize=\"small\" />\n </IconButton> \n </ListItem>\n {existFile && <Alert severity=\"warning\">Файл с именем \"{existFile.filename}\" уже существует в хранилище. Продолжение загрузки перезапишет его</Alert>}\n </>\n\n );\n}\n\nexport default FileItem\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport List from '@material-ui/core/List';\nimport Typography from '@material-ui/core/Typography';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useTranslate } from 'react-admin';\nimport FileUploadItem from './FileUploadItem';\nimport FileItem from './FileItem';\n\n\nconst useStyles = makeStyles(theme => ({\n dialog: {},\n list: {\n paddingLeft: theme.spacing(),\n paddingRight: theme.spacing(),\n },\n caption: {\n display: \"flex\",\n justifyContent: \"space-between\"\n },\n}), { name: 'RaFileUploadDialog' });\n\n\nconst FileUploadDialog = (props) => {\n const {\n open,\n files,\n uploadOptions,\n uploadedFiles,\n onUploadedFile,\n onClose,\n onCreateMany,\n } = props\n const classes = useStyles()\n const translate = useTranslate();\n\n const [filesUpload, setFilesUpload] = useState([]);\n const [hasUploading, setHasUploading] = useState(false);\n\n useEffect(() => {\n setHasUploading(false);\n setFilesUpload(files);\n }, [files]);\n\n useEffect(() => {\n if(filesUpload.length != 0 && uploadedFiles.length == filesUpload.length) {\n setTimeout(() => onCreateMany(), 500) \n }\n }, [uploadedFiles, filesUpload]);\n\n const handleClose = useCallback(() => {\n onClose()\n }, [onClose])\n\n const handleRemoveFile = useCallback((filename) => {\n setFilesUpload(filesUpload.filter(file => file.name != filename));\n }, [filesUpload])\n \n const handleUploadMany = useCallback(() => {\n setHasUploading(true);\n }, [onCreateMany])\n \n\n // const handleUpload = useCallback(() => {\n // onUpload()\n // }, [onUpload])\n\n // const handleCancel = useCallback(() => {\n // console.log(\"cancel\")\n // }, [onCancel])\n\n return (\n <Dialog\n open={open}\n aria-labelledby=\"upload-dialog-title\"\n aria-describedby=\"upload-dialog-description\"\n fullWidth\n maxWidth=\"sm\"\n disableEscapeKeyDown\n classes={{ paper: classes.dialog }}\n >\n <DialogTitle id=\"upload-dialog-title\">\n {translate(\"ra.message.upload_title\")}\n </DialogTitle>\n <List dense className={classes.list}>\n {!hasUploading ? filesUpload.map((file, index) => {\n return (\n <FileItem\n key={index}\n file={file} \n onRemoveFile={handleRemoveFile}\n />\n );\n }) : filesUpload.map((file, index) => {\n return (\n <FileUploadItem\n key={index}\n file={file}\n uploadOptions={uploadOptions[file.type] || uploadOptions.default }\n onUploadedFile={onUploadedFile}\n />\n );\n })\n }\n </List>\n <DialogContent className={classes.caption}>\n {/* <Typography variant=\"body2\" color=\"textSecondary\">\\{uploadOptions.namecatalog}</Typography> */} \n <Typography variant=\"body2\" color=\"textSecondary\">{translate('ra.message.upload_counter', { uploaded: uploadedFiles.length, total: filesUpload.length })}</Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose}>\n {translate(\"ra.action.cancel\", { _: \"Cancel\" })}\n </Button>\n {/* <Button onClick={handleCreateMany} color=\"primary\" autoFocus>\n {translate(\"ra.action.save\", { _: \"Save\" })}\n </Button> */}\n <Button disabled={hasUploading} onClick={handleUploadMany} color=\"primary\" autoFocus>\n {translate(\"ra.action.upload\", { _: \"Upload\" })}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nexport default FileUploadDialog\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\n\n\n\nexport const DELETE_MANY_FROM_BLOB = gql`\n mutation deleteManyFromBlob($ids: [ID]) {\n data: multipleRemove(ids:$ids) {\n id\n }\n }\n`\n\nexport default (args) => {\n const { ids } = args\n\n return graphqlClient.request(DELETE_MANY_FROM_BLOB, {\n ids,\n }).then(response => {\n const items = response?.data\n return {\n data: items,\n }\n }).catch(graphqlErrorHandler);\n};","import { URI_BLOB_DOWNLOAD } from '../../../appsettings';\nimport difference from 'lodash/difference';\nimport keyBy from 'lodash/keyBy';\n\n\n\nconst isInternalPath = /^\\//;\n\nexport const getUrlFromPath = (path) => {\n //const token = getCookie(AUTHORIZATION_TOKEN_COOKIE)\n //return `${URI_BLOB_DOWNLOAD}${path}?${token}`;\n const isInternal = isInternalPath.test(path)\n return isInternal ? `${URI_BLOB_DOWNLOAD}${path}` : path;\n};\n\n\nexport const buildResourceReferenceArrayCreateInput = (current = [], typename) => {\n const connect = current.map(id => ({ id, typename }))\n const isConnect = Boolean(connect.length)\n return (isConnect) ? { connect } : undefined\n}\n\nexport const buildResourceReferenceArrayUpdateInput = (current = [], previous = [], typename) => {\n const connect = difference(current, previous).map(id => ({ id, typename }))\n const disconnect = difference(previous, current).map(id => ({ id, typename }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n return {\n ...data,\n url: data.path ? getUrlFromPath(data.path) : undefined,\n urlThumbnail: data.pathThumbnail ? getUrlFromPath(data.pathThumbnail) : undefined,\n resourcesIds: data.resources.map(({ id }) => id),\n _resourcesIdsTypename: data.resources[0] ? data.resources[0].typename : undefined,\n labelsIds: data.labels.map(({ id }) => id),\n };\n};\n\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n resources,\n resourcesIds,\n url,\n urlThumbnail,\n _resourcesIdsTypename,\n labels,\n labelsIds,\n ...sanitizedInput }) => sanitizedInput","import gql from \"graphql-tag\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { sanitizeInput, buildResourceReferenceArrayCreateInput } from \"./utils\";\n\nexport const CREATE_MANY_FILES = gql`\n mutation createManyFiles($input: [FileCreateInput!]!, $onConflict: OnConflict) {\n data: File {\n data: createMany(input: $input, onConflict: $onConflict) {\n count\n }\n }\n }\n`;\n\nexport default (args) => {\n const { data } = args;\n\n const input = data.map(item => {\n const input = sanitizeInput(item)\n const resources = buildResourceReferenceArrayCreateInput(item.resourcesIds, item._resourcesIdsTypename)\n\n return {\n ...input,\n resources,\n }\n })\n\n\n\n\n\n return graphqlClient.request(CREATE_MANY_FILES, {\n input,\n })\n .then(async (response) => {\n const count = response?.data?.data?.count;\n\n return {\n data: {\n count\n },\n };\n }).catch(graphqlErrorHandler);\n};\n","import React, { Children, cloneElement } from 'react';\nimport Card from '@material-ui/core/Card';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n defaultExporter,\n useListContext,\n getListControllerProps,\n useVersion,\n} from 'ra-core';\nimport {\n Title,\n ListToolbar,\n Pagination as DefaultPagination,\n BulkActionsToolbar,\n ListActions as DefaultActions,\n Empty,\n} from 'react-admin';\nimport DefaultListBreadcrumbs from '../breadcrumbs/ListBreadcrumbs';\nimport ListBulkActionsToolbar from '../list/ListBulkActionsToolbar';\nimport DefaultListBulkActions from '../list/ListBulkActions';\nimport FileUpload from './FileUpload';\n\n\n\nexport const ListView = (props) => {\n const {\n actions,\n aside,\n breadcrumbs,\n filters,\n bulkActionButtons,\n pagination,\n children,\n className,\n classes: classesOverride,\n component: Content,\n exporter = defaultExporter,\n title,\n empty,\n ...rest\n } = props;\n const controllerProps = getListControllerProps(props); // deprecated, to be removed in v4\n const listContext = useListContext(props);\n const classes = useStyles(props);\n const {\n defaultTitle,\n total,\n loaded,\n loading,\n filterValues,\n selectedIds,\n } = listContext;\n const version = useVersion();\n\n const shouldRenderEmptyPage =\n loaded && !loading && total === 0 && !Object.keys(filterValues).length;\n\n return (\n <div\n className={classnames('list-page', classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n <Title title={title} defaultTitle={defaultTitle} />\n\n {breadcrumbs}\n {(filters || actions) && (\n <ListToolbar\n filters={filters}\n {...controllerProps} // deprecated, use ListContext instead, to be removed in v4\n actions={actions}\n exporter={exporter} // deprecated, use ListContext instead, to be removed in v4\n />\n )}\n {/* <FileUpload /> */}\n {shouldRenderEmptyPage && empty !== false\n ? cloneElement(empty, listContext)\n : (\n <div className={classes.main}>\n\n <Content\n className={classnames(classes.content, {\n [classes.bulkActionsDisplayed]: selectedIds.length > 0,\n })}\n key={version}\n >\n {bulkActionButtons !== false && bulkActionButtons && (\n <ListBulkActionsToolbar {...controllerProps}>\n {bulkActionButtons}\n </ListBulkActionsToolbar>\n )}\n {children &&\n // @ts-ignore-line\n cloneElement(Children.only(children), {\n ...controllerProps, // deprecated, use ListContext instead, to be removed in v4\n hasBulkActions: bulkActionButtons !== false,\n })}\n {pagination && cloneElement(pagination, listContext)}\n </Content>\n {aside && cloneElement(aside, listContext)}\n </div>\n )}\n\n </div>\n );\n};\n\nListView.defaultProps = {\n actions: <DefaultActions />,\n breadcrumbs: <DefaultListBreadcrumbs />,\n classes: {},\n component: Card,\n bulkActionButtons: <DefaultListBulkActions />,\n pagination: <DefaultPagination />,\n empty: <Empty />,\n};\n\nconst useStyles = makeStyles(\n theme => ({\n root: {},\n main: {\n display: 'flex',\n },\n content: {\n marginTop: 0,\n transition: theme.transitions.create('margin-top'),\n position: 'relative',\n flex: '1 1 auto',\n [theme.breakpoints.down('xs')]: {\n boxShadow: 'none',\n },\n // overflow: 'inherit',\n },\n bulkActionsDisplayed: {\n marginTop: -theme.spacing(8),\n transition: theme.transitions.create('margin-top'),\n },\n actions: {\n zIndex: 2,\n display: 'flex',\n justifyContent: 'flex-end',\n flexWrap: 'wrap',\n },\n noResults: { padding: 20 },\n }),\n { name: 'RaList' }\n);\n\n\n\nconst sanitizeRestProps = ({\n basePath = null,\n currentSort = null,\n data = null,\n defaultTitle = null,\n displayedFilters = null,\n filterDefaultValues = null,\n filterValues = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n hideFilter = null,\n history = null,\n ids = null,\n loading = null,\n loaded = null,\n location = null,\n match = null,\n onSelect = null,\n onToggleItem = null,\n onUnselectItems = null,\n options = null,\n page = null,\n permissions = null,\n perPage = null,\n refetch = null,\n resource = null,\n selectedIds = null,\n setFilters = null,\n setPage = null,\n setPerPage = null,\n setSort = null,\n showFilter = null,\n syncWithLocation = null,\n sort = null,\n total = null,\n ...rest\n}) => rest;\n\nexport default ListView;\n","import React from \"react\";\nimport Filter from \"../../lib/list/filter/Filter\";\nimport SearchInput from \"../../lib/input/SearchInput\";\nimport QuickFilterInput from \"../../lib/input/QuickFilterInput\";\nimport { ReferenceInput, AutocompleteInput, AutocompleteArrayInput, ReferenceArrayInput } from \"react-admin\";\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n\nconst FileListFilter = (props) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <ReferenceInput source=\"resourceAssetId\" reference=\"Asset\" label=\"resources.File.enums.typename.Asset\">\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <ReferenceArrayInput source=\"labelsAndIds\" allowEmpty={false} reference=\"Label\" filter={{ typename: \"File\" }} label=\"resources.File.fields.labelsAndIds\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"labelsNotAndIds\" allowEmpty={false} reference=\"Label\" filter={{ typename: \"File\" }} label=\"resources.File.fields.labelsNotAndIds\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n {/* <FileResourceTypeInput source=\"resourceType\" />\n <TextInput source=\"resourceId\" /> */}\n <QuickFilterInput\n source=\"deleted\"\n label=\"ra.input.deleted\"\n defaultValue={true}\n />\n </Filter>\n);\n\nexport default FileListFilter;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M4,3H20A2,2 0 0,1 22,5V20A2,2 0 0,1 20,22H4A2,2 0 0,1 2,20V5A2,2 0 0,1 4,3M4,7V10H8V7H4M10,7V10H14V7H10M20,10V7H16V10H20M4,12V15H8V12H4M4,20H8V17H4V20M10,12V15H14V12H10M10,20H14V17H10V20M20,20V17H16V20H20M20,12H16V15H20V12Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M3,11H11V3H3M3,21H11V13H3M13,21H21V13H13M13,3V11H21V3\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import { useResourceContext } from 'react-admin';\nimport { usePreferences } from '@react-admin/ra-preferences';\n//import { usePreferences } from '../preferences/usePreferences';\n\nexport const useListViewPreferences = (initialValue) => {\n const resource = useResourceContext()\n return usePreferences(`${resource}.list.view`, initialValue)\n}\n","import React, { useState, useCallback, Fragment } from 'react';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\nimport { Button, useTranslate } from 'react-admin';\nimport { useListViewPreferences } from './useListViewPreferences';\n\n\n\nexport const ListViewButton = (props) => {\n const { views, preference, className, ...rest } = props;\n const translate = useTranslate();\n const [prefView, setPrefView] = useListViewPreferences(views[0].id)\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleClick = useCallback((event) => {\n setAnchorEl(event.currentTarget);\n }, [setAnchorEl]);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, [setAnchorEl]);\n\n const handleMenuItemClick = useCallback((view) => (event) => {\n setPrefView(view.id);\n setAnchorEl(null);\n }, [setPrefView, setAnchorEl]);\n\n const select = views.find(({ id }) => id === prefView)\n\n return (\n <Fragment>\n <Button\n className=\"add-filter\"\n label={translate(\"ra.action.change_view\", {\n _: \"Change view\",\n view: translate(select.label, { _: select.label })\n })}\n aria-controls=\"list-view-menu\"\n aria-haspopup=\"true\"\n onClick={handleClick}\n >\n <select.icon />\n </Button>\n <Menu\n id=\"list-view-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n\n >\n {views.filter(({ id }) => id !== select.id).map(view => {\n const { id, label, icon: Icon } = view\n return (\n <MenuItem\n key={id}\n onClick={handleMenuItemClick(view)}\n >\n {Icon &&\n <ListItemIcon>\n <Icon />\n </ListItemIcon>\n }\n <Typography variant=\"inherit\">{translate(label, { _: label })}</Typography>\n </MenuItem>\n )\n })}\n </Menu>\n </Fragment>\n );\n};\n\n\nexport default ListViewButton","import React, { forwardRef, useCallback } from 'react';\nimport Link from '@material-ui/core/Link';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { useTranslate } from 'react-admin';\n\n\n\nconst LinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} underline=\"none\" {...props} />);\n\nconst ExternalLinkButtonAsMenuItem = forwardRef((props, ref) => {\n const {\n label = 'ra.action.upload',\n href,\n onClose,\n target = \"_blank\"\n } = props\n\n const translate = useTranslate()\n\n const handleClick = useCallback((event) => {\n if (typeof onClose === 'function') onClose(event)\n }, [onClose])\n\n return (\n <MenuItem\n component={LinkRef}\n ref={ref}\n href={href}\n target={target}\n rel=\"noopener\"\n color=\"inherit\"\n onClick={handleClick}\n {...props}\n\n >\n {translate(label, { _: label })}\n </MenuItem>\n )\n});\n\n\nexport default ExternalLinkButtonAsMenuItem;\n\n\n","import React, { useState, useCallback, useRef } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { fetchEnd, fetchStart, useRefresh, useNotify, useTranslate } from 'react-admin';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport FileUploadDialog from './FileUploadDialog';\nimport deleteMany from '../../dataProvider/BlobService/Blob/deleteMany';\nimport createMany from '../../dataProvider/GatewayService/File/createMany';\nimport { FILE_ACCEPT } from './utils';\n\n\nconst defaultUploadOptions = {\n default: { appname: 'AXIIT', namecatalog: \"AXIIT\" },\n 'application/scd': { appname: 'AXIIT', namecatalog: \"ScadaJSDisp\" },\n 'application/mrt': { appname: 'AXIIT', namecatalog: \"Reports\" }\n}\nconst defaultCreateOptions = {}\n\nconst getFileExtensions = (file) => {\n return file.name.slice((file.name.lastIndexOf(\".\") - 1 >>> 0) + 2)\n}\n\nconst guessFileType = (file) => {\n if (!file.type) {\n const extensions = getFileExtensions(file)\n return extensions ? `application/${extensions}` : \"application/octet-stream\"\n }\n return file.type\n}\n\nconst isEmptyFiles = (files) => files == null ? true : Array.isArray(files) && files.length > 0 ? false : true\n\nconst FileUploadButtonAsMenuItem = (props) => {\n const {\n uploadOptions = defaultUploadOptions,\n createOptions = defaultCreateOptions,\n label = 'ra.action.upload',\n onClose,\n } = props\n const [files, setFiles] = useState([])\n const [uploadedFiles, setUploadedFiles] = useState([])\n const [open, setOpen] = React.useState(false)\n const dispatch = useDispatch()\n const refresh = useRefresh();\n const notify = useNotify();\n const translate = useTranslate()\n const uploadInputRef = useRef(null);\n\n const handleReset = useCallback(() => {\n setOpen(false)\n setFiles([])\n setUploadedFiles([])\n }, [setFiles, setUploadedFiles, setOpen])\n\n const handleCreateMany = useCallback(() => {\n dispatch(fetchStart())\n createMany({\n data: uploadedFiles.map(uploadedFile => {\n const { id, name, type, size, url, urlThumbnail, path } = uploadedFile\n return {\n ...createOptions,\n id,\n name,\n path: url ? `/get${path}` : undefined,\n pathThumbnail: urlThumbnail ? `/thumbnail${path}` : undefined,\n size,\n type\n //type : guessFileType(uploadedFile),\n }\n\n }),\n onConflict: 'DOUPDATE'\n }).then(response => {\n notify('ra.notification.uploaded', { messageArgs: { smart_count: response?.data.count } });\n refresh();\n })\n .catch(error => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', { type: 'warning' });\n refresh();\n })\n .finally(() => {\n dispatch(fetchEnd())\n handleReset()\n });\n }, [uploadedFiles, setOpen, handleReset])\n\n const handleClose = useCallback(() => {\n deleteMany({ ids: uploadedFiles.map(({ id }) => id) })\n .then(response => {\n\n const a = response\n })\n .catch(error => {\n console.log('Ошибка очистки файлов в BLOB: ', error)\n })\n .finally(() => {\n handleReset()\n })\n }, [uploadedFiles, handleReset])\n\n const handleFiles = useCallback((event) => {\n const fileList = event.target.files;\n if (!isEmptyFiles(files)) return\n const modify_files = Array.from(fileList).map(f => new File([f], f.name, { type: guessFileType(f) }));\n setFiles(modify_files);\n setOpen(true);\n onClose()\n }, [setFiles, setOpen, onClose])\n\n const handleUploadedFile = useCallback((uploadedFile) => {\n setUploadedFiles(prev => [...prev, uploadedFile]);\n }, [setUploadedFiles])\n\n return (<>\n <input\n ref={uploadInputRef}\n accept={FILE_ACCEPT}\n style={{ display: \"none\" }}\n id=\"upload-file\"\n type=\"file\"\n multiple\n onChange={handleFiles}\n />\n <label htmlFor=\"upload-file\">\n <MenuItem onClick={handleClose}>{translate(label)}</MenuItem>\n </label>\n <FileUploadDialog\n open={open}\n files={files}\n uploadedFiles={uploadedFiles}\n uploadOptions={uploadOptions}\n onCreateMany={handleCreateMany}\n onClose={handleClose}\n onUploadedFile={handleUploadedFile}\n />\n </>)\n};\n\nexport default FileUploadButtonAsMenuItem\n\n","import React, { memo, useMemo, useState, useCallback, Fragment } from 'react';\n\nimport { Fab, useMediaQuery } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ContentAdd from '@material-ui/icons/Add';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport classnames from 'classnames';\nimport { useTranslate, useResourceContext } from 'ra-core';\n\nimport { Button } from 'react-admin';\nimport ExternalLinkButtonAsMenuItem from '../button/ExternalLinkButtonAsMenuItem';\nimport FileUploadButtonAsMenuItem from './FileUploadButtonAsMenuItem';\nimport { URI_STIMULSOFT_REPORTS, URI_SCADAJS } from '../../appsettings';\n\n\n\nexport const sanitizeButtonRestProps = ({\n basePath,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n onSave,\n pristine,\n record,\n redirect,\n resource,\n saving,\n submitOnEnter,\n undoable,\n ...rest\n}) => rest;\n\n\nconst FileCreateMenu = (props) => {\n const { anchorEl, open, onClose } = props\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n return (\n <Menu\n id=\"FileCreateMenu\"\n anchorEl={anchorEl}\n keepMounted\n open={open}\n onClose={handleClose}\n >\n\n {/* `${URI_STIMULSOFT_REPORTS}/editor` */}\n <ExternalLinkButtonAsMenuItem label=\"Отчет Stimulsoft\" href={`${URI_STIMULSOFT_REPORTS}/editor`} onClick={handleClose} />\n <ExternalLinkButtonAsMenuItem label=\"Документ SCADA\" href={`${URI_SCADAJS}/editor`} onClick={handleClose} />\n <FileUploadButtonAsMenuItem onClose={handleClose} />\n </Menu>\n )\n}\n\n\nconst FileCreateButton = (props) => {\n const {\n basePath = '',\n className,\n classes: classesOverride,\n icon = defaultIcon,\n label = 'ra.action.create',\n scrollToTop = true,\n variant,\n ...rest\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n const isSmall = useMediaQuery((theme) =>\n theme.breakpoints.down('sm')\n );\n const resource = useResourceContext();\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleClick = useCallback((event) => {\n setAnchorEl(event.currentTarget);\n }, [setAnchorEl]);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, [setAnchorEl]);\n\n return isSmall ? (\n <Fragment>\n <Fab\n onClick={handleClick}\n color=\"primary\"\n className={classnames(classes.floating, className)}\n aria-label={label && translate(label)}\n aria-controls=\"FileCreateMenu\"\n aria-haspopup=\"true\"\n {...sanitizeButtonRestProps(rest)}\n >\n {icon}\n </Fab>\n <FileCreateMenu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={handleClose}\n />\n </Fragment>\n\n ) : (\n <Fragment>\n <Button\n onClick={handleClick}\n className={className}\n label={label}\n variant={variant}\n aria-controls=\"FileCreateMenu\"\n aria-haspopup=\"true\"\n {...rest}\n >\n {icon}\n </Button>\n <FileCreateMenu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={handleClose}\n />\n </Fragment>\n\n );\n};\n\nconst defaultIcon = <ContentAdd />;\n\nconst useStyles = makeStyles(\n theme => ({\n floating: {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n margin: 0,\n top: 'auto',\n right: 20,\n bottom: 60,\n left: 'auto',\n position: 'fixed',\n zIndex: 1000,\n },\n }),\n { name: 'FileCreateButton' }\n);\n\n\n\nexport default memo(FileCreateButton, (prevProps, nextProps) => {\n return (\n prevProps.basePath === nextProps.basePath &&\n prevProps.label === nextProps.label &&\n prevProps.translate === nextProps.translate &&\n prevProps.to === nextProps.to &&\n prevProps.disabled === nextProps.disabled\n );\n});\n","import React, { cloneElement, useMemo } from 'react';\nimport { sanitizeListRestProps, useListContext, useResourceContext, useResourceDefinition } from 'ra-core';\nimport { ExportButton, TopToolbar, SortButton } from 'react-admin';\nimport ListViewButton from '../../lib/list/ListViewButton';\nimport { useListViewPreferences } from '../../lib/list/useListViewPreferences';\nimport FileCreateButton from '../../lib/file/FileCreateButton';\nimport permissions from \"../../authProvider/abilityProvider\";\n\nconst ListActions = (props) => {\n const {\n className,\n exporter,\n filters,\n columns,\n sortment,\n views,\n ...rest\n } = props;\n const {\n currentSort,\n displayedFilters,\n filterValues,\n basePath,\n showFilter,\n total,\n } = useListContext(props);\n const resource = useResourceContext(rest);\n const [view] = useListViewPreferences(views[0].id)\n\n return useMemo(() => (\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })}\n {sortment && view === \"TILE\" && <SortButton fields={sortment} />}\n {views && <ListViewButton views={views} />}\n {permissions.can('create', resource) && <FileCreateButton basePath={basePath} />}\n {/* {exporter !== false && (\n <ExportButton\n disabled={total === 0}\n resource={resource}\n sort={currentSort}\n filterValues={filterValues}\n />\n )} */}\n </TopToolbar>\n ),\n /* eslint-disable react-hooks/exhaustive-deps */\n [\n resource,\n displayedFilters,\n filterValues,\n showFilter,\n filters,\n total,\n basePath,\n className,\n currentSort,\n exporter,\n ]\n );\n};\n\n\nListActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\nexport default ListActions;\n","import React from 'react';\nimport { Fragment } from 'react';\nimport { BulkDeleteButton } from 'react-admin';\nimport BulkRemoveButton from '../../lib/button/BulkRemoveButton';\nimport BulkRestoreButton from '../../lib/button/BulkRestoreButton';\n\n\n\n\n\n\nconst FileListBulkActions = props => {\n const deleted = props.filterValues.deleted\n\n\n return deleted ? (\n <Fragment>\n <BulkRestoreButton {...props} />\n <BulkDeleteButton undoable={false} {...props} />\n </Fragment>\n ) : (\n <Fragment>\n <BulkRemoveButton mutationMode='optimistic' {...props} />\n </Fragment>\n )\n};\n\nexport default FileListBulkActions","import React, { memo, useState, useCallback, Fragment } from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ContentAdd from '@material-ui/icons/Add';\nimport Menu from '@material-ui/core/Menu';\nimport { Button } from 'react-admin';\nimport ExternalLinkButtonAsMenuItem from '../button/ExternalLinkButtonAsMenuItem';\nimport FileUploadButtonAsMenuItem from './FileUploadButtonAsMenuItem';\nimport { URI_STIMULSOFT_REPORTS, URI_SCADAJS } from '../../appsettings';\n\n\n\nexport const sanitizeButtonRestProps = ({\n basePath,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n onSave,\n pristine,\n record,\n redirect,\n resource,\n saving,\n submitOnEnter,\n undoable,\n selectedIds,\n onUnselectItems,\n uploadOptions,\n createOptions,\n ...rest\n}) => rest;\n\n\nconst FileCreateMenu = (props) => {\n const { anchorEl, open, onClose, record, ...rest } = props\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n return (\n <Menu\n id=\"FileCreateMenu\"\n anchorEl={anchorEl}\n keepMounted\n open={open}\n onClose={handleClose}\n >\n\n {/* `${URI_STIMULSOFT_REPORTS}/editor` */}\n <ExternalLinkButtonAsMenuItem label=\"Отчет Stimulsoft\" href={`${URI_STIMULSOFT_REPORTS}/editor?resource=${record?.id}`} onClick={handleClose} />\n <ExternalLinkButtonAsMenuItem label=\"Документ SCADA\" href={`${URI_SCADAJS}/editor?resource=${record?.id}`} onClick={handleClose} />\n <FileUploadButtonAsMenuItem {...rest} onClose={handleClose} />\n </Menu>\n )\n}\n\nconst FileListFieldCreateButton = (props) => {\n const {\n basePath = '',\n className,\n classes: classesOverride,\n icon = defaultIcon,\n label = 'ra.action.create',\n scrollToTop = true,\n variant,\n ...rest\n } = props;\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleClick = useCallback((event) => {\n setAnchorEl(event.currentTarget);\n }, [setAnchorEl]);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, [setAnchorEl]);\n\n return (\n <Fragment>\n <Button\n onClick={handleClick}\n className={classnames(className, classes.button)}\n label={label}\n variant={variant}\n aria-controls=\"FileCreateMenu\"\n aria-haspopup=\"true\"\n {...sanitizeButtonRestProps(rest)}\n >\n {icon}\n </Button>\n <FileCreateMenu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={handleClose}\n {...rest}\n />\n </Fragment>\n );\n};\n\nconst defaultIcon = <ContentAdd />;\n\nconst useStyles = makeStyles(theme => ({\n button: {\n color: theme.palette.text.secondary,\n },\n}), { name: 'FileListFieldCreateButton' });\n\n\n\nexport default memo(FileListFieldCreateButton, (prevProps, nextProps) => {\n return (\n prevProps.basePath === nextProps.basePath &&\n prevProps.label === nextProps.label &&\n prevProps.translate === nextProps.translate &&\n prevProps.to === nextProps.to &&\n prevProps.disabled === nextProps.disabled\n );\n});\n","import React, { cloneElement, useMemo } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n sanitizeListRestProps,\n Identifier,\n SortPayload,\n Exporter,\n useListContext,\n useResourceContext,\n useResourceDefinition,\n TopToolbar,\n} from 'react-admin';\nimport FileListFieldCreateButton from './FileListFieldCreateButton';\nimport ReferenceListLinkButton from '../button/ReferenceListLinkButton';\nimport permissions from \"../../authProvider/abilityProvider\";\n\nconst useStyles = makeStyles(theme => ({\n root: {\n paddingTop: 0,\n paddingBottom: 0,\n minHeight: 0,\n },\n}));\n\nconst ListFieldActions = props => {\n const { className, exporter, filters, uploadOptions, createOptions, ...rest } = props;\n const classes = useStyles();\n const {\n currentSort,\n displayedFilters,\n filterValues,\n basePath,\n selectedIds,\n showFilter,\n total,\n } = useListContext(props);\n const resource = useResourceContext(rest);\n\n return useMemo(\n () => (\n <TopToolbar\n className={className}\n classes={{ root: classes.root }}\n // variant=\"dense\"\n {...sanitizeListRestProps(rest)}\n >\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })}\n {permissions.can('create', resource) && <FileListFieldCreateButton basePath={basePath} uploadOptions={uploadOptions} createOptions={createOptions} {...rest} />}\n <ReferenceListLinkButton {...rest} />\n </TopToolbar>\n ),\n [resource, displayedFilters, filterValues, selectedIds, filters, total] // eslint-disable-line react-hooks/exhaustive-deps\n );\n};\n\n\n\nListFieldActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\nexport default ListFieldActions;\n","import React, { cloneElement, Children } from 'react';\nimport { ListBase, ListToolbar, Pagination, ResourceContextProvider } from 'react-admin';\nimport Paper from '@material-ui/core/Paper';\nimport ListFieldToolbar from '../field/ListFieldToolbar';\nimport DefaultListFieldActions from './FileListFieldActions';\n\nimport FileUpload from './FileUpload';\n\nconst ListField = ({\n children,\n actions,\n filters,\n component: Content,\n resource,\n uploadOptions,\n createOptions,\n ...props\n}) => {\n\n\n const sanitizedRestProps = sanitizeRestProps(props)\n\n return (\n <ResourceContextProvider value={resource}>\n <ListBase\n {...props}\n >\n {(filters || actions) && (\n <ListFieldToolbar\n {...sanitizedRestProps}\n filters={filters}\n actions={actions}\n uploadOptions={uploadOptions}\n createOptions={createOptions}\n />\n )}\n {/* <FileUpload uploadOptions={uploadOptions} createOptions={createOptions} /> */}\n <Content >\n {cloneElement(Children.only(children), {\n ...sanitizedRestProps,\n })}\n <Pagination />\n </Content>\n </ListBase>\n </ResourceContextProvider>\n\n\n\n\n );\n};\n\nListField.defaultProps = {\n actions: <DefaultListFieldActions />,\n // classes: {},\n component: Paper,\n // bulkActionButtons: <DefaultBulkActionButtons />,\n // pagination: <DefaultPagination />,\n // empty: <Empty />,\n addLabel: true,\n};\n\n\nconst sanitizeRestProps = ({\n basePath = null,\n currentSort = null,\n data = null,\n defaultTitle = null,\n displayedFilters = null,\n filterDefaultValues = null,\n filterValues = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n hideFilter = null,\n history = null,\n ids = null,\n loading = null,\n loaded = null,\n location = null,\n match = null,\n onSelect = null,\n onToggleItem = null,\n onUnselectItems = null,\n options = null,\n page = null,\n permissions = null,\n perPage = null,\n resource = null,\n selectedIds = null,\n setFilters = null,\n setPage = null,\n setPerPage = null,\n setSort = null,\n showFilter = null,\n syncWithLocation = null,\n sort = null,\n total = null,\n ...rest\n}) => rest;\n\nexport default ListField;","import React, { Fragment, useState, useCallback } from \"react\";\nimport classnames from \"classnames\";\nimport Card from '@material-ui/core/Card';\nimport { useListController, ListContextProvider } from 'ra-core';\nimport { usePreferences } from '@react-admin/ra-preferences';\nimport { Datagrid, DateField } from \"react-admin\";\nimport Tilegrid from '../../lib/list/tilegrid/Tilegrid';\nimport ResourceLinkField from \"../../lib/field/ResourceLinkField\";\nimport FileListView from '../../lib/file/FileListView';\nimport useListStyles from \"../../lib/list/useListStyles\";\nimport FileIconField from \"./FileIconField\";\nimport FileSizeField from \"../../lib/field/FileSizeField\";\nimport FileListFilter from \"./FileListFilter\";\nimport FileAside from \"./FileAside\";\nimport FilePreviewList from '../../lib/file/FilePreviewList';\nimport FileCard from './FileCard';\nimport TableViewIcon from '../../lib/icons/ViewTable';\nimport TileViewIcon from '../../lib/icons/ViewGrid';\nimport { useListViewPreferences } from '../../lib/list/useListViewPreferences';\nimport FileListActions from './FileListActions';\nimport FileListBulkActions from './FileListBulkActions';\nimport FileListField from \"../../lib/file/FileListField\";\nimport FileMoreActionsButton from './FileMoreActionsButton';\nimport NestedArrayField from \"../../lib/field/NestedArrayField\";\nimport LabelChip from \"../Label/LabelChip\";\n\n\n\nconst fileViews = [\n { id: \"TABLE\", label: \"resources.File.enums.view.TABLE\", icon: TableViewIcon },\n { id: \"TILE\", label: \"resources.File.enums.view.TILE\", icon: TileViewIcon },\n]\n\nconst fileSortment = ['name', 'size', 'createdAt', 'updatedAt']\n\n\n\nconst FileList = (props) => {\n const classes = useListStyles();\n const controllerProps = useListController(props);\n const [view] = useListViewPreferences(fileViews[0].id)\n const [previewId, setPreviewId] = useState()\n\n const fileRowClick = useCallback((id) => {\n setPreviewId(id)\n }, [setPreviewId]);\n\n const handleClose = useCallback(() => {\n setPreviewId()\n }, [setPreviewId]);\n\n return (\n <ListContextProvider value={controllerProps}>\n <FileListView\n {...props}\n {...controllerProps}\n actions={<FileListActions sortment={fileSortment} views={fileViews} />}\n bulkActionButtons={<FileListBulkActions />}\n filters={<FileListFilter />}\n component={view === \"TABLE\" ? Card : \"div\"}\n >\n\n {(view === \"TABLE\") ? (\n <Datagrid rowClick={fileRowClick}>\n <FileIconField cellClassName={classnames(classes.cellMinWidth, classes.cellAction)} />\n <ResourceLinkField source=\"name\" cellClassName={classes.celllLineClamp} />\n <NestedArrayField source=\"labels\" reference=\"Label\" sortable={false}>\n <LabelChip source=\"name\" size=\"small\" />\n </NestedArrayField>,\n <FileSizeField source=\"size\" cellClassName={classes.cellMinWidth} />\n <DateField source=\"createdAt\" cellClassName={classes.cellMinWidth} />\n <DateField source=\"updatedAt\" cellClassName={classes.cellMinWidth} />\n <FileMoreActionsButton cellClassName={`${classes.cellMinWidth} ${classes.cellButton}`} />\n </Datagrid>\n ) : (\n <Tilegrid rowClick={fileRowClick}>\n <FileCard title=\"name\" path=\"path\" pathThumbnail=\"pathThumbnail\" type=\"type\" canOpen />\n </Tilegrid>\n )}\n </FileListView>\n <FilePreviewList previewId={previewId} onClose={handleClose}>\n <FileAside />\n </FilePreviewList>\n </ListContextProvider>\n )\n\n};\n\nFileList.defaultProps = {\n sort: { field: 'updatedAt', order: 'DESC' },\n};\n\n\nexport const FileListReference = (props) => {\n const сlasses = useListStyles();\n const [view] = usePreferences(\"File.list.view\", \"TABLE\")\n const [previewId, setPreviewId] = useState()\n const queryOptions = { resource: props.record?.id }\n\n const fileRowClick = useCallback((id) => {\n setPreviewId(id)\n }, [setPreviewId]);\n\n const handleClose = useCallback(() => {\n setPreviewId()\n }, [setPreviewId]);\n\n\n return (\n <FileListField\n {...props}\n component={view === \"TABLE\" ? Card : \"div\"}\n >\n <Fragment>\n {(view === \"TABLE\") ? (\n <Datagrid rowClick={fileRowClick}>\n <FileIconField cellClassName={classnames(сlasses.cellMinWidth, сlasses.cellAction)} />\n <ResourceLinkField source=\"name\" cellClassName={сlasses.celllLineClamp} />\n <FileSizeField source=\"size\" cellClassName={сlasses.cellMinWidth} />\n <DateField source=\"createdAt\" cellClassName={сlasses.cellMinWidth} />\n <DateField source=\"updatedAt\" cellClassName={сlasses.cellMinWidth} />\n <FileMoreActionsButton cellClassName={`${сlasses.cellMinWidth} ${сlasses.cellButton}`} />\n </Datagrid>\n ) : (\n <Tilegrid rowClick={fileRowClick}>\n <FileCard title=\"name\" path=\"path\" pathThumbnail=\"pathThumbnail\" type=\"type\" canOpen />\n </Tilegrid>\n )}\n <FilePreviewList previewId={previewId} onClose={handleClose} >\n <FileAside queryOptions={queryOptions} />\n </FilePreviewList>\n </Fragment>\n </FileListField>\n )\n};\n\n\nexport default FileList;\n","import React, { cloneElement, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { sanitizeListRestProps, useListContext, useResourceContext, useResourceDefinition } from 'ra-core';\nimport { CreateButton, TopToolbar } from 'react-admin';\nimport ImportButton from '../../lib/button/ImportButton';\nimport ExportButton from '../../lib/button/ExportButton';\nimport ColumnsButton from '../../lib/list/ColumnsButton';\nimport PresetButton from '../../lib/list/PresetButton';\n\nconst HistoryListActions = (props) => {\n const {\n className,\n exporter = false,\n importer = false,\n filters,\n columns, \n ...rest\n } = props;\n const {\n currentSort,\n displayedFilters,\n filterValues,\n basePath,\n showFilter,\n total \n } = useListContext(props);\n const resource = useResourceContext(rest);\n const { hasCreate } = useResourceDefinition(rest);\n\n return useMemo(() => (\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })}\n <ColumnsButton columns={columns} />\n <PresetButton columns={columns} />\n {exporter !== false && (\n <ExportButton\n exporter={exporter}\n disabled={total === 0}\n resource={resource}\n sort={currentSort}\n filterValues={filterValues}\n maxResults={20000}\n />\n )}\n {importer !== false && (\n <ImportButton\n importer={importer}\n resource={resource}\n />\n )}\n {hasCreate && <CreateButton basePath={basePath} variant=\"contained\" disableElevation />}\n </TopToolbar>\n ),\n /* eslint-disable react-hooks/exhaustive-deps */\n [\n resource,\n displayedFilters,\n filterValues,\n showFilter,\n filters,\n total,\n basePath,\n className,\n currentSort,\n exporter,\n hasCreate,\n ]\n );\n};\n\nHistoryListActions.propTypes = {\n basePath: PropTypes.string,\n className: PropTypes.string,\n currentSort: PropTypes.any,\n displayedFilters: PropTypes.object,\n exporter: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.bool]),\n filters: PropTypes.element,\n filterValues: PropTypes.object,\n hasCreate: PropTypes.bool,\n resource: PropTypes.string,\n onUnselectItems: PropTypes.func.isRequired,\n selectedIds: PropTypes.arrayOf(PropTypes.any),\n showFilter: PropTypes.func,\n total: PropTypes.number,\n};\n\nHistoryListActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\nexport default HistoryListActions;\n","import * as React from \"react\";\nimport { useUpdate, useRefresh, Button } from 'react-admin';\nimport HistoryIcon from '@material-ui/icons/History';\n\nconst knownRevertActions = ['update']\n\nconst HistoryRevertButton = (props) => {\n const { record } = props\n const refresh = useRefresh()\n const resource = record.resourceType\n const id = record.resourceId\n const data = record.previousData\n const previous = record.data\n const options = {\n onSuccess: () => {\n refresh()\n }\n }\n\n const [revert, { loading }] = useUpdate(resource, id, data, previous, options);\n return (\n <Button label=\"ra.action.revert\" onClick={revert} disabled={loading} >\n <HistoryIcon />\n </Button>\n )\n};\n\nconst EnchaencedHistoryRevertButton = (props) => {\n const { record } = props\n if (!record) return null\n const hasRevertAction = knownRevertActions.includes(props.record.action)\n if (!hasRevertAction) return null\n return <HistoryRevertButton {...props} />;\n};\n\nexport default EnchaencedHistoryRevertButton","import useExporter, { dateFormatter, booleanFormatter, enumFormatter, linkFormatter } from '../../lib/exporter';\n\n\n\nexport const model = [\n { key: \"id\", header: \"resources.History.fields.id\" },\n { key: \"action\", header: \"resources.History.fields.action\" },\n { key: \"resourceType\", header: \"resources.History.fields.resourceType\" },\n { key: \"name\", header: \"resources.History.fields.name\" },\n { key: \"createdById\", header: \"resources.History.fields.createdById\" },\n { key: \"createdAt\", header: \"resources.History.fields.createdAt\", format: dateFormatter },\n { key: \"link\", header: \"Ccылка\", format: linkFormatter(\"History\", \"id\") },\n]\n\nconst useHistoryExporter = () => useExporter(model)\n\n\n\nexport default useHistoryExporter;","\nexport const knownResources = [\n \"Label\",\n \"Resource\",\n \"Asset\",\n \"AssetClass\",\n \"AssetDatagrid\",\n \"AssetMap\",\n \"Tag\",\n \"Event\",\n \"EventHistory\",\n \"TagHistory\",\n \"Dashboard\",\n \"Widget\",\n \"WidgetOnDashboard\",\n \"File\",\n \"Catalog\",\n \"Parameter\",\n \"Account\",\n \"Application\",\n \"Profile\",\n \"Rule\",\n \"AbilityServiceResource\"\n]\n\nexport const actions = [\n { id: 'create', name: 'resources.History.enums.action.create' },\n { id: 'update', name: 'resources.History.enums.action.update' },\n { id: 'remove', name: 'resources.History.enums.action.remove' },\n { id: 'restore', name: 'resources.History.enums.action.restore' },\n { id: 'delete', name: 'resources.History.enums.action.delete' },\n { id: 'authorize', name: 'resources.History.enums.action.authorize' },\n { id: 'unauthorize', name: 'resources.History.enums.action.unauthorize' },\n { id: 'write', name: 'resources.History.enums.action.write' },\n]\n\nexport const resourceTypes = [\n { id: 'Asset', name: 'resources.History.enums.resourceType.Asset' },\n { id: 'AssetClass', name: 'resources.History.enums.resourceType.AssetClass' },\n { id: 'Dashboard', name: 'resources.History.enums.resourceType.Dashboard' },\n { id: 'Widget', name: 'resources.History.enums.resourceType.Widget' },\n { id: 'Profile', name: 'resources.History.enums.resourceType.Profile' },\n { id: 'Application', name: 'resources.History.enums.resourceType.Application' }\n]\n","import React, { useCallback } from 'react';\nimport { useForm } from 'react-final-form';\nimport { SelectInput } from \"react-admin\";\nimport { resourceTypes, knownResources } from \"./utils\";\n\n\nconst HistoryResourceTypeInput = (props) => {\n const form = useForm();\n\n const handleChange = useCallback(event => {\n // const value = event.target.value\n form.change(\"resourceId\", null)\n }, []);\n\n\n return (\n <SelectInput {...props} choices={resourceTypes} filter={knownResources} onChange={handleChange} />\n );\n}\n\n\nexport default HistoryResourceTypeInput","import React from 'react';\nimport { useFormState } from 'react-final-form';\nimport { ReferenceInput, AutocompleteInput, TextInput } from 'react-admin';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n\nconst HistoryResourceIdInput = (props) => {\n const { values } = useFormState()\n const resource = values.resourceType\n\n if (!resource) return (\n <TextInput {...props} disabled />\n )\n\n\n return (\n <ReferenceInput {...props} reference={resource} label={`resources.History.enums.resourceType.${resource}`} >\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n );\n}\n\n\nexport default HistoryResourceIdInput","import React from \"react\";\nimport { DateTimeInput, SelectInput } from \"react-admin\";\nimport Filter from \"../../lib/list/filter/Filter\";\nimport SearchInput from \"../../lib/input/SearchInput\";\nimport ProfileReferenceInput from '../Profile/ProfileReferenceInput';\nimport HistoryResourceTypeInput from \"./HistoryResourceTypeInput\";\nimport HistoryResourceIdInput from \"./HistoryResourceIdInput\";\nimport { actions } from \"./utils\";\n\n\n\nconst HistoryListFilter = (props) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <SelectInput source=\"action\" alwaysOn choices={actions} />\n <HistoryResourceTypeInput source=\"resourceType\" alwaysOn />\n <HistoryResourceIdInput source=\"resourceId\" />\n <ProfileReferenceInput source=\"createdById\" reference=\"Profile\" sort={{ field: 'name', order: 'ASC' }} perPage={100} />\n <DateTimeInput source=\"createdAt_gte\" />\n <DateTimeInput source=\"createdAt_lte\" />\n </Filter>\n);\n\n\n\nexport default HistoryListFilter;\n","import React, { useCallback } from \"react\";\nimport { useMediaQuery } from '@material-ui/core';\nimport {\n Datagrid,\n TextField,\n DateField,\n useTranslate,\n SimpleList,\n useRecordContext,\n ReferenceField\n} from \"react-admin\";\nimport List from \"../../lib/list/List\";\nimport HistoryListActions from \"./HistoryListActions\";\nimport ResourceLinkField from \"../../lib/field/ResourceLinkField\";\nimport EnumField from \"../../lib/field/EnumField\";\nimport useListStyles from \"../../lib/list/useListStyles\";\nimport useColumns from '../../lib/list/useColumns';\nimport useDatagridColumns from '../../lib/list/useDatagridColumns';\nimport { dateTimeOptions } from '../../utils';\nimport HistoryRevertButton from './HistoryRevertButton';\nimport useHistoryExporter from \"./useHistoryExporter\";\nimport { APPLICATION_NAME } from \"../../appsettings\";\nimport HistoryListFilter from \"./HistoryListFilter\";\n\n\nexport const DefaultDatagrid = (props) => {\n const classes = useListStyles();\n return (\n <Datagrid {...props} rowClick=\"show\" >\n <EnumField source=\"action\" noWrap />\n <EnumField source=\"resourceType\" />\n <ResourceLinkField source=\"name\" />\n <TextField source=\"description\" />\n <ReferenceField source=\"createdById\" reference=\"Profile\" link={false}>\n <TextField source=\"name\" />\n </ReferenceField>\n <DateField source=\"createdAt\" cellClassName={classes.cellMinWidth} options={dateTimeOptions} />\n <HistoryRevertButton cellClassName={`${classes.cellMinWidth} ${classes.cellButton}`} />\n </Datagrid>\n );\n}\n\nexport const ReferenceDatagrid = (props) => {\n const isMobile = useMediaQuery(theme => theme.breakpoints.down('sm'))\n const translate = useTranslate();\n const classes = useListStyles();\n\n return isMobile ? (\n <SimpleList\n primaryText={record => translate(`action.${record.action}`)}\n tertiaryText={record => new Date(record.createdAt).toLocaleDateString()}\n linkType=\"show\"\n />\n ) : (\n <Datagrid {...props} rowClick=\"show\" >\n <TextField source=\"action\" noWrap />\n <TextField source=\"resourceType\" />\n <ResourceLinkField source=\"name\" />\n <ReferenceField source=\"createdById\" reference=\"Profile\" link={false}>\n <TextField source=\"name\" />\n </ReferenceField>\n <DateField source=\"createdAt\" cellClassName={classes.cellMinWidth} options={dateTimeOptions} />\n <HistoryRevertButton cellClassName={`${classes.cellMinWidth} ${classes.cellButton}`} />\n </Datagrid>\n );\n}\n\nexport const ReferenceFieldDatagrid = (props) => {\n const classes = useListStyles();\n const record = useRecordContext()\n\n const historyRowStyle = useCallback((rowRecord, index) => {\n if (record?.id === rowRecord.id) return { backgroundColor: 'rgba(0, 0, 0, 0.08)' }\n }, [record?.id]);\n if (!record) return null;\n return (\n <Datagrid\n {...props}\n rowClick=\"show\"\n rowStyle={historyRowStyle}\n >\n <EnumField source=\"action\" noWrap />\n <ResourceLinkField source=\"name\" />\n <TextField source=\"description\" sortable={false} />\n <ReferenceField source=\"createdById\" reference=\"Profile\" link={false}>\n <TextField source=\"name\" />\n </ReferenceField>\n <DateField source=\"createdAt\" cellClassName={classes.cellMinWidth} options={dateTimeOptions} />\n <HistoryRevertButton cellClassName={`${classes.cellMinWidth} ${classes.cellButton}`} />\n </Datagrid>\n );\n}\n\nconst HistoryList = (props) => {\n const classes = useListStyles();\n const exporter = useHistoryExporter();\n\n const columns = useColumns([\n <EnumField source=\"action\" noWrap alwaysOn />,\n <EnumField source=\"resourceType\" alwaysOn />,\n <ResourceLinkField source=\"name\" alwaysOn cellClassName={classes.celllLineClamp} />,\n <TextField source=\"description\" cellClassName={classes.celllLineClamp} />,\n <ReferenceField source=\"createdById\" reference=\"Profile\" link={false} >\n <TextField source=\"name\" />\n </ReferenceField>,\n <DateField source=\"createdAt\" cellClassName={classes.cellMinWidth} options={dateTimeOptions} />,\n ]);\n\n const DatagridColumns = useDatagridColumns(columns)\n\n return (\n <List\n {...props}\n actions={<HistoryListActions columns={columns} />}\n exporter={exporter}\n filters={<HistoryListFilter />}\n >\n <Datagrid>\n {DatagridColumns}\n <HistoryRevertButton cellClassName={`${classes.cellMinWidth} ${classes.cellButton}`} />\n </Datagrid>\n </List>\n );\n};\n\nHistoryList.defaultProps = {\n filter: { application: { id: APPLICATION_NAME }, typename_in: [\"Asset\", \"AssetClass\", \"AssetDatagrid\", \"AssetMap\", \"Tag\", \"Event\", \"EventHistory\", \"TagHistory\", \"Dashboard\", \"Widget\", \"WidgetOnDashboard\", \"File\", \"Catalog\", \"Parameter\", \"Profile\", \"Application\"] },\n perPage: 50,\n sort: { field: 'createdAt', order: 'DESC' },\n bulkActionButtons: false,\n};\n\n\n\nexport default HistoryList;\n","import React, { cloneElement, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { linkToRecord } from 'ra-core';\nimport { Link } from 'react-admin';\nimport sanitizeFieldRestProps from '../../lib/field/sanitizeFieldRestProps';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexWrap: 'wrap',\n marginTop: -8,\n marginBottom: -8,\n },\n}), { name: \"NestedArrayField\" });\n\n// useful to prevent click bubbling in a datagrid with rowClick\nconst stopPropagation = e => e.stopPropagation();\n\n\n\n\nconst handleClick = () => { };\n\nfunction NestedArrayField({\n addLabel,\n classes: classesOverride,\n className,\n record,\n source,\n resource,\n reference,\n basePath,\n children,\n link,\n ...rest\n}) {\n const classes = useStyles({ classes: classesOverride })\n const defaultDashboard = get(record, \"defaultDashboard\")\n const dashboards = get(record, \"dashboards\")\n const data = defaultDashboard ? [{ ...defaultDashboard, isDefault: true }, ...dashboards] : dashboards\n\n if (!data) { return null }\n\n return (\n <div\n className={classnames(classes.root, className)}\n {...sanitizeFieldRestProps(rest)}\n >\n {data.map((item, index) => {\n const rootPath = basePath.replace(resource, reference);\n const referenceRecord = item;\n const resourceLinkPath = !link ? false : (typeof link === 'function') ? link(referenceRecord, reference, record, resource) : `${rootPath}/${encodeURIComponent(referenceRecord.id)}/${link}`;\n\n if (resourceLinkPath) {\n return (\n <Link\n key={index}\n className={classes.link}\n to={resourceLinkPath}\n onClick={stopPropagation}\n >\n {cloneElement(Children.only(children), {\n record: item,\n resource: reference,\n basePath: rootPath,\n parent: record,\n onClick: handleClick,\n })}\n </Link>\n );\n }\n\n return cloneElement(Children.only(children), {\n key: index,\n record: item,\n resource: reference,\n basePath: rootPath,\n parent: record,\n });\n })}\n </div>\n );\n}\n\nNestedArrayField.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.element.isRequired,\n classes: PropTypes.object,\n className: PropTypes.string,\n link: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]).isRequired,\n resource: PropTypes.string,\n};\n\nNestedArrayField.defaultProps = {\n classes: {},\n link: 'show',\n addLabel: true,\n};\n\nexport default NestedArrayField;\n","import { createContext } from 'react';\n\n\nconst ConnectContext = createContext({\n data: undefined,\n error: null,\n loading: true,\n loaded: false,\n});\n\nConnectContext.displayName = 'ConnectContext';\n\nexport default ConnectContext;\n","import React, {\n Children,\n cloneElement,\n useEffect,\n useMemo,\n useState\n} from 'react';\nimport ConnectContext from './ConnectContext';\nimport useTagSubscription from \"../../controller/data/useTagSubscription\";\nimport { unionBy } from 'lodash';\n\n\nconst buildTagsFromTree = (node) => {\n const { asset, parameter, nodes, leafs } = node\n const tagIds = []\n const hasTagId = (asset?.id && parameter?.id)\n const hasWriteTagId = (asset?.id && parameter?.id && parameter.accessLevel.includes('W'))\n\n if (hasTagId) tagIds.push({ tag: parameter.id, resource: asset.id })\n if (hasWriteTagId) tagIds.push({ tag: `Write@${parameter.id}`, resource: asset.id })\n\n nodes.forEach(node => {\n tagIds.push(...buildTagsFromTree(node))\n });\n\n leafs.forEach(node => {\n tagIds.push(...buildTagsFromTree(node))\n });\n\n return tagIds;\n}\n\nconst ConnectLayout = ({\n children,\n resource,\n basePath,\n record,\n version,\n tree,\n ...props\n}) => {\n\n const tag_in = useMemo(() => {\n return buildTagsFromTree(tree)\n }, [tree]);\n\n const [dataTags, setDataTags] = useState({\n data: [],\n loaded: false,\n loading: false,\n error: null\n });\n\n const tagControllerProps = useTagSubscription({\n filter: { tag_in }\n }, { enabled: tag_in.length > 0 });\n\n useEffect(() => {\n setDataTags((prewProps) => ({\n ...prewProps,\n data: []\n }));\n }, [record.id]);\n\n useEffect(() => {\n if (tagControllerProps?.data?.length > 0) {\n setDataTags((prewProps) => ({\n ...prewProps,\n ...tagControllerProps,\n data: unionBy(tagControllerProps?.data, prewProps?.data, \"id\")\n }));\n }\n }, [tagControllerProps]);\n\n return (\n <ConnectContext.Provider value={dataTags}>\n {cloneElement(Children.only(children), {\n resource,\n basePath,\n record,\n version,\n tree,\n })}\n </ConnectContext.Provider>\n )\n};\n\nexport default ConnectLayout;","import React, { useContext } from 'react';\nimport Chip from '@material-ui/core/Chip';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport PowerIcon from '@material-ui/icons/Power';\nimport PowerOffIcon from '@material-ui/icons/PowerOff';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ConnectContext from \"./ConnectContext\";\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n margin: \".125rem\",\n },\n icon: ({ loading, error }) => ({\n color: error ? \"#e53935\" : loading ? \"#616161\" : \"#388e3c\"\n }),\n}));\n\n\nconst ConnectChip = (props) => {\n const { loading, error } = useContext(ConnectContext)\n const classes = useStyles({ loading, error });\n\n\n const icon = error ? <PowerOffIcon className={classes.icon} /> : loading ? <CircularProgress className={classes.icon} size={16} thickness={4} /> : <PowerIcon className={classes.icon} />\n const title = error ? \"Ошибка\" : loading ? \"Подключение...\" : \"Подключено\"\n\n return <Chip\n classes={{ root: classes.root }}\n size=\"small\"\n icon={icon}\n title={title}\n label=\"Шина данных\"\n />;\n}\n\nexport default ConnectChip;","import React, { Children, cloneElement, useContext } from 'react';\nimport get from 'lodash/get';\nimport keyBy from 'lodash/keyBy';\nimport ConnectContext from \"./ConnectContext\";\nimport { buildIdFromTag } from '../../dataProvider/DatabusService/Tag/utils';\n\n\n\nconst ConnectTagField = ({ node, children }) => {\n const connectContext = useContext(ConnectContext)\n if (!node) return null;\n const tags = get(connectContext, [\"data\"])\n const tagsMap = keyBy(tags, \"id\")\n const tagId = buildIdFromTag({ resource: node.asset.id, tag: node.parameter.id })\n const tagWriteId = buildIdFromTag({ resource: node.asset.id, tag: `Write@${node.parameter.id}` })\n const tag = tagsMap[tagId]\n const tagWrite = tagsMap[tagWriteId]\n\n if (!tag) return null\n\n const record = {\n ...node,\n ...tag,\n writeValue: tagWrite && tagWrite.quality !== 0 ? tagWrite.value : null\n }\n\n return Children.map(children, (field, index) => (\n cloneElement(field, { record })\n ))\n};\n\nexport default React.memo(ConnectTagField);","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TreeItem from '@material-ui/lab/TreeItem';\nimport { TextField, ResourceContextProvider } from \"react-admin\";\nimport permissions from '../../authProvider/abilityProvider'\nimport ConnectTagField from \"./ConnectTagField\";\nimport TagValueField from \"../../components/Tag/TagValueField\";\nimport TagQualityChip from \"../../components/Tag/TagQualityChip\";\nimport TagWriteButton from \"../../components/Tag/TagWriteButton\";\nimport TagReadHistoryButton from \"../../components/Tag/TagReadHistoryButton\";\nimport { buildIdFromTag } from '../../dataProvider/DatabusService/Tag/utils';\n\n\n\nconst useStyles = makeStyles(theme => ({\n item: {},\n content: {},\n group: {},\n expanded: {},\n selected: {},\n label: {\n padding: 4,\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(),\n },\n labelName: {\n flexGrow: 1,\n },\n icon: {\n color: theme.palette.text.secondary\n },\n}));\n\n\n\n\nconst ConnectGroupTreeLeaf = ({ node, ...props }) => {\n const classes = useStyles()\n if (!node) return null;\n\n const record = { ...node, id: buildIdFromTag({ resource: node.asset.id, tag: node.parameter.id }) }\n\n return (\n <TreeItem\n key={node.id}\n nodeId={node.id}\n label={\n <ResourceContextProvider value='Tag'>\n <TextField record={record} resource=\"Tag\" source=\"parameter.name\" className={classes.labelName} />\n <ConnectTagField node={node}>\n <TagValueField resource=\"Tag\" source=\"value\" />\n <TagQualityChip resource=\"Tag\" source=\"quality\" />\n </ConnectTagField>\n <span>\n <TagReadHistoryButton record={record} resource=\"Tag\" />\n {permissions.can('write', \"Tag\") && <TagWriteButton record={record} resource=\"Tag\" />}\n </span>\n </ResourceContextProvider>\n }\n // onLabelClick={handleClick}\n classes={{\n root: classes.item,\n content: classes.content,\n expanded: classes.expanded,\n selected: classes.selected,\n group: classes.group,\n label: classes.label,\n }}\n />\n )\n};\n\nexport default React.memo(ConnectGroupTreeLeaf);","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TreeItem from '@material-ui/lab/TreeItem';\nimport Typography from '@material-ui/core/Typography';\nimport ConnectGroupTreeLeaf from './ConnectGroupTreeLeaf';\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(),\n '&:first-child': {\n marginTop: 0,\n },\n },\n title: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"baseline\",\n marginBottom: 4,\n },\n tree: {},\n expandIcon: {\n color: \"#fbc02d\"\n },\n item: {},\n content: {},\n group: {},\n expanded: {},\n selected: {},\n label: {\n padding: 4,\n display: 'flex',\n alignItems: 'center',\n },\n}));\n\nconst ConnectGroupTreeNode = ({ node, ...props }) => {\n const classes = useStyles();\n if (!node) return null\n const { id, name, nodes, leafs } = node\n\n return (\n <TreeItem\n key={id}\n nodeId={id}\n label={<Typography variant=\"body2\" className={classes.labelName}>{name}</Typography>}\n classes={{\n root: classes.item,\n content: classes.content,\n expanded: classes.expanded,\n selected: classes.selected,\n group: classes.group,\n label: classes.label,\n }}\n >\n {Array.isArray(nodes) ? nodes.map((node) => <ConnectGroupTreeNode node={node} key={node.id} />) : null}\n {Array.isArray(leafs) ? leafs.map((node) => <ConnectGroupTreeLeaf node={node} key={node.id} />) : null}\n </TreeItem>\n )\n\n}\n\nConnectGroupTreeNode.propTypes = {\n node: PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n name: PropTypes.string.isRequired,\n nodes: PropTypes.array,\n leafs: PropTypes.array,\n }),\n};\n\nexport default React.memo(ConnectGroupTreeNode);\n\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TreeView from '@material-ui/lab/TreeView';\nimport Typography from '@material-ui/core/Typography';\nimport FolderIcon from '@material-ui/icons/Folder';\nimport FolderOpenIcon from '@material-ui/icons/FolderOpen';\nimport ConnectChip from './ConnectChip';\nimport ConnectGroupTreeNode from './ConnectGroupTreeNode';\nimport { useTranslate } from 'react-admin';\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(),\n '&:first-child': {\n marginTop: 0,\n },\n },\n title: {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"baseline\",\n marginBottom: 4,\n },\n tree: {},\n expandIcon: {\n color: \"#fbc02d\"\n },\n item: {},\n content: {\n\n },\n group: {},\n expanded: {},\n selected: {},\n}));\n\nconst ConnectGroupTree = ({\n className,\n resource,\n source,\n basePath,\n record,\n version,\n tree,\n ...props\n}) => {\n const classes = useStyles();\n const translate = useTranslate()\n const label = translate(`resources.${resource}.fields.${source}`)\n const [expanded, setExpanded] = React.useState([]);\n\n const handleToggle = (event, nodeIds) => {\n setExpanded(nodeIds);\n };\n\n return (\n <div className={`${classes.root} ${className}`}>\n <div className={classes.title}>\n <Typography variant=\"caption\" color=\"textSecondary\" noWrap>{label}</Typography>\n <div>\n <ConnectChip />\n </div>\n </div>\n <div className={classes.content}>\n <TreeView\n className={classes.tree}\n onNodeToggle={handleToggle}\n expanded={expanded}\n defaultCollapseIcon={<FolderOpenIcon className={classes.expandIcon} />}\n defaultExpandIcon={<FolderIcon className={classes.expandIcon} />}\n >\n <ConnectGroupTreeNode node={tree} />\n </TreeView>\n </div>\n </div>\n );\n}\n\nexport default ConnectGroupTree;","import React from 'react'\nimport Alert from '@material-ui/lab/Alert';\nimport ConnectLayout from '../connect/ConnectLayout';\nimport ConnectGroupTree from '../connect/ConnectGroupTree';\nimport { get, isEmpty } from 'lodash';\n\n\nconst ConnectGroupTreeField = (props) => {\n const { record, resource, source, ...rest } = props\n const tree = get(record, source);\n\n if (isEmpty(tree)) return <Alert severity=\"info\">Нет параметров</Alert>\n\n return (\n <ConnectLayout tree={tree} {...props} >\n <ConnectGroupTree {...props} />\n </ConnectLayout>\n );\n\n};\n\nConnectGroupTreeField.defaultProps = {\n addLabel: false,\n};\n\nexport default ConnectGroupTreeField;","import React, { memo, useMemo, useState, useCallback, Fragment } from 'react';\nimport { stringify } from 'query-string';\nimport { Fab, useMediaQuery } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ContentAdd from '@material-ui/icons/Add';\nimport Menu from '@material-ui/core/Menu';\nimport classnames from 'classnames';\nimport { useTranslate, useResourceContext } from 'ra-core';\n\nimport { Button } from 'react-admin';\nimport { URI_STIMULSOFT_REPORTS } from '../../appsettings';\nimport ExternalLinkButtonAsMenuItem from '../../lib/button/ExternalLinkButtonAsMenuItem';\n\n\n\nexport const sanitizeButtonRestProps = ({\n basePath,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n onSave,\n pristine,\n record,\n redirect,\n resource,\n saving,\n submitOnEnter,\n undoable,\n ...rest\n}) => rest;\n\n\nconst ReportCreateMenu = (props) => {\n const { anchorEl, open, onClose, createOptions } = props\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n\n const queryParams = createOptions?.resourcesIds[0] && stringify({ resource: createOptions.resourcesIds[0] }) \n\n return (\n <Menu\n id=\"ReportCreateMenu\"\n anchorEl={anchorEl}\n keepMounted\n open={open}\n onClose={handleClose}\n >\n\n {/* `${URI_STIMULSOFT_REPORTS}/editor` */}\n <ExternalLinkButtonAsMenuItem label=\"Отчет Stimulsoft\" href={`${URI_STIMULSOFT_REPORTS}/report/editor${queryParams ? `?${queryParams}` : \"\"}`} onClick={handleClose} />\n {/* <FileUploadButtonAsMenuItem onClose={handleClose} /> */}\n </Menu>\n )\n}\n\n\nconst ReportCreateButton = (props) => {\n const {\n basePath = '',\n className,\n classes: classesOverride,\n icon = defaultIcon,\n label = 'ra.action.create',\n scrollToTop = true,\n variant,\n createOptions,\n ...rest\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n const isSmall = useMediaQuery((theme) =>\n theme.breakpoints.down('sm')\n );\n const resource = useResourceContext();\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleClick = useCallback((event) => {\n setAnchorEl(event.currentTarget);\n }, [setAnchorEl]);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, [setAnchorEl]);\n\n return isSmall ? (\n <Fragment>\n <Fab\n onClick={handleClick}\n color=\"primary\"\n className={classnames(classes.floating, className)}\n aria-label={label && translate(label)}\n aria-controls=\"ReportCreateMenu\"\n aria-haspopup=\"true\"\n {...sanitizeButtonRestProps(rest)}\n >\n {icon}\n </Fab>\n <ReportCreateMenu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={handleClose}\n createOptions={createOptions}\n />\n </Fragment>\n\n ) : (\n <Fragment>\n <Button\n onClick={handleClick}\n className={className}\n label={label}\n variant={variant}\n aria-controls=\"ReportCreateMenu\"\n aria-haspopup=\"true\"\n {...rest}\n >\n {icon}\n </Button>\n <ReportCreateMenu\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n onClose={handleClose}\n createOptions={createOptions}\n />\n </Fragment>\n\n );\n};\n\nconst defaultIcon = <ContentAdd />;\n\nconst useStyles = makeStyles(\n theme => ({\n floating: {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n margin: 0,\n top: 'auto',\n right: 20,\n bottom: 60,\n left: 'auto',\n position: 'fixed',\n zIndex: 1000,\n },\n }),\n { name: 'ReportCreateButton' }\n);\n\n\n\nexport default memo(ReportCreateButton, (prevProps, nextProps) => {\n return (\n prevProps.basePath === nextProps.basePath &&\n prevProps.label === nextProps.label &&\n prevProps.translate === nextProps.translate &&\n prevProps.to === nextProps.to &&\n prevProps.disabled === nextProps.disabled\n );\n});\n","import React, { cloneElement, useMemo } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n sanitizeListRestProps,\n Identifier,\n SortPayload,\n Exporter,\n useListContext,\n useResourceContext,\n useResourceDefinition,\n TopToolbar,\n} from 'react-admin';\n\n\n\nimport ReportCreateButton from './ReportCreateButton';\nimport ReferenceListLinkButton from '../../lib/button/ReferenceListLinkButton';\nimport permissions from '../../authProvider/abilityProvider';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n paddingTop: 0,\n paddingBottom: 0,\n minHeight: 0,\n },\n}));\n\nconst ReportListFieldActions = props => {\n const { className, exporter, filters, createOptions, ...rest } = props;\n const classes = useStyles();\n const {\n currentSort,\n displayedFilters,\n filterValues,\n basePath,\n selectedIds,\n showFilter,\n total,\n } = useListContext(props);\n const resource = useResourceContext(rest);\n\n return useMemo(\n () => (\n <TopToolbar\n className={className}\n classes={{ root: classes.root }}\n // variant=\"dense\"\n {...sanitizeListRestProps(rest)}\n >\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })} \n {permissions.can('create', resource) && <ReportCreateButton basePath={basePath} createOptions={createOptions} />}\n <ReferenceListLinkButton {...rest} />\n </TopToolbar>\n ),\n [resource, displayedFilters, filterValues, selectedIds, filters, total] // eslint-disable-line react-hooks/exhaustive-deps\n );\n};\n\n\n\nReportListFieldActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\nexport default ReportListFieldActions;\n","import React, { cloneElement, Children } from 'react';\nimport { ListBase, ListToolbar, Pagination, ResourceContextProvider } from 'react-admin';\nimport Paper from '@material-ui/core/Paper';\n\n\nimport ListFieldToolbar from '../../lib/field/ListFieldToolbar';\nimport ReportListFieldActions from './ReportListFieldActions';\n\nconst ListField = ({\n children,\n actions,\n filters,\n component: Content,\n resource,\n createOptions,\n ...props\n}) => {\n\n\n const sanitizedRestProps = sanitizeRestProps(props)\n\n return (\n <ResourceContextProvider value={resource}>\n <ListBase\n {...props}\n >\n {(filters || actions) && (\n <ListFieldToolbar\n {...sanitizedRestProps}\n filters={filters}\n actions={actions}\n createOptions={createOptions}\n />\n )}\n <Content >\n {cloneElement(Children.only(children), {\n ...sanitizedRestProps,\n })}\n <Pagination />\n </Content>\n </ListBase>\n </ResourceContextProvider>\n\n\n\n\n );\n};\n\nListField.defaultProps = {\n actions: <ReportListFieldActions />,\n // classes: {},\n component: Paper,\n // bulkActionButtons: <DefaultBulkActionButtons />,\n // pagination: <DefaultPagination />,\n // empty: <Empty />,\n addLabel: true,\n};\n\n\nconst sanitizeRestProps = ({\n basePath = null,\n currentSort = null,\n data = null,\n defaultTitle = null,\n displayedFilters = null,\n filterDefaultValues = null,\n filterValues = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n hideFilter = null,\n history = null,\n ids = null,\n loading = null,\n loaded = null,\n location = null,\n match = null,\n onSelect = null,\n onToggleItem = null,\n onUnselectItems = null,\n options = null,\n page = null,\n permissions = null,\n perPage = null,\n resource = null,\n selectedIds = null,\n setFilters = null,\n setPage = null,\n setPerPage = null,\n setSort = null,\n showFilter = null,\n syncWithLocation = null,\n sort = null,\n total = null,\n ...rest\n}) => rest;\n\nexport default ListField;","import React from \"react\";\nimport { Chip } from '@material-ui/core';\n\nconst ChipTemplateChip = ({ record }) => {\n return record?.hasTemplate \n ? <Chip size=\"small\" label=\"Шаблон\" />\n : null\n};\n\nexport default ChipTemplateChip;","import { URI_STIMULSOFT_REPORTS } from \"../../appsettings\";\nimport { stringify } from 'query-string';\n\nexport const reportRedirectView = (basePath, id, record, queryOptions) => { \n const queryParams = stringify(queryOptions);\n return `${URI_STIMULSOFT_REPORTS}/report/view/${id}${queryParams ? `?${queryParams}` : \"\"}`;\n}\n \nexport const reportRedirectEdit = (basePath, id, record, queryOptions) => {\n const queryParams = stringify(queryOptions);\n return `${URI_STIMULSOFT_REPORTS}/report/editor/${id}${queryParams ? `?${queryParams}` : \"\"}`;\n}","import React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport { Link } from 'react-router-dom';\nimport { useTranslate } from 'react-admin';\n\n\n\n\nconst ReportPlayIconButton = React.forwardRef(({\n className,\n basePath = '',\n label = 'ra.action.play',\n record,\n target = \"_self\",\n cellClassName,\n queryOptions,\n redirect,\n ...rest\n}, ref) => {\n const translate = useTranslate();\n \n const handleClick = useCallback((e) => {\n e.stopPropagation();\n const href = redirect(basePath, record.id, record, queryOptions);\n window.open(href, '\"_blank\"');\n }, [basePath, record]);\n\n return (\n <Tooltip title={translate('ra.action.play', { _: 'Play' })} enterDelay={700}>\n <span>\n <IconButton\n {...rest}\n aria-label={translate('ra.action.play', { _: 'Play' })}\n onClick={handleClick}\n size=\"small\"\n className={className}\n color=\"primary\"\n >\n <PlayArrowIcon />\n </IconButton>\n </span>\n </Tooltip>\n )\n});\n\nconst stopPropagation = e => e.stopPropagation();\n\nReportPlayIconButton.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n};\n\nexport default ReportPlayIconButton;\n","import React, { Fragment, useState, useCallback } from \"react\";\nimport Card from '@material-ui/core/Card';\nimport { Datagrid, DateField, TextField } from \"react-admin\";\nimport ResourceLinkField from \"../../lib/field/ResourceLinkField\";\nimport useListStyles from \"../../lib/list/useListStyles\";\nimport ReportListField from \"./ReportListField\";\nimport ChipTemplateChip from \"./ChipTemplateChip\";\nimport NestedField from \"../../lib/field/NestedField\";\nimport { reportRedirectView } from \"./redirect\";\nimport ReportPlayIconButton from \"./ReportPlayIconButton\";\n\n\nconst ReportListReference = (props) => {\n const classes = useListStyles();\n \n const queryOptions = { resource: props.record?.id }\n\n return (\n <ReportListField\n {...props}\n component={Card}\n >\n <Fragment> \n <Datagrid>\n <ReportPlayIconButton queryOptions={queryOptions} redirect={reportRedirectView} cellClassName={`${classes.cellMinWidth} ${classes.cellAction}`}/>\n <ChipTemplateChip cellClassName={classes.cellMinWidth} source=\"hasTemplate\" />,\n <ResourceLinkField source=\"name\" alwaysOn cellClassName={classes.celllLineClamp} />, \n <TextField source=\"description\" cellClassName={classes.celllLineClamp} />, \n <NestedField source=\"type\" reference=\"ReportType\" link={false} sortable={false} cellClassName={classes.cellMinWidth}>\n <TextField source=\"name\" />\n </NestedField>,\n <DateField source=\"createdAt\" cellClassName={classes.cellMinWidth} />,\n <DateField source=\"updatedAt\" cellClassName={classes.cellMinWidth} />,\n </Datagrid> \n </Fragment>\n </ReportListField>\n )\n };\n\n export default ReportListReference;","import React from \"react\";\nimport {\n ShowContextProvider,\n ResourceContextProvider,\n useShowController,\n TextField,\n TopToolbar,\n EditButton,\n ReferenceField,\n ChipField, ReferenceArrayField, SingleFieldList,\n} from \"react-admin\";\nimport { ShowView } from \"../../lib/show/ShowView\";\nimport CloneButton from '../../lib/button/CloneButton';\nimport SimpleShowLayout from \"../../lib/show/SimpleShowLayout\";\nimport TabbedShowLayout from \"../../lib/show/TabbedShowLayout\";\nimport BlankShowLayout from \"../../lib/show/BlankShowLayout\";\nimport ListField from '../../lib/field/ListField';\nimport TitleForRecord from \"../../lib/layout/TitleForRecord\";\nimport SynchronizeButton from \"../../lib/button/SynchronizeButton\";\nimport NestedField from \"../../lib/field/NestedField\";\nimport NestedArrayField from \"../../lib/field/NestedArrayField\";\nimport AssetDashboardCard from \"./AssetDashboardCard\";\nimport AssetDashboardChip from \"./AssetDashboardChip\";\nimport LabelChip from \"../Label/LabelChip\";\nimport { FileListReference } from \"../File/FileList\";\nimport { EventReferenceDatagrid } from '../Event/EventList';\nimport { TagListReferenceDatagrid } from '../Tag/TagListDatagrid';\nimport { ReferenceFieldDatagrid as ReferenceHistoryDatagrid } from \"../History/HistoryList\";\nimport { Tab } from 'react-admin'\nimport { DateField } from 'react-admin';\nimport TextCopyField from '../../lib/field/TextCopyField';\nimport IconField from '../../lib/field/IconField';\nimport AssetDashboardsNestedArrayField from './AssetDashboardsNestedArrayField';\nimport { dateTimeOptions } from '../../utils';\nimport FavoriteButton from \"../../lib/button/FavoriteButton\";\nimport ConnectGroupTreeField from '../../lib/field/ConnectGroupTreeField';\nimport ReportListReference from \"../Report/ReportListReference\";\n\nconst defaultUploadOptions = {\n default: { appname: 'AXIIT', namecatalog: \"AXIIT\" },\n 'application/scd': { appname: 'AXIIT', namecatalog: \"ScadaJSDisp\" },\n 'application/mrt': { appname: 'AXIIT', namecatalog: \"Reports\" }\n}\n\nconst AssetShowActions = ({ basePath, data, hasEdit, hasCreate, permissions }) => {\n return (\n <TopToolbar>\n <FavoriteButton basePath={basePath} record={data} resource=\"Asset\" />\n {permissions.can('deploy', \"AssetClass\") && <SynchronizeButton basePath={basePath} record={data} />}\n {hasCreate && <CloneButton basePath={basePath} record={data} />}\n {hasEdit && <EditButton basePath={basePath} record={data} />}\n </TopToolbar>\n );\n};\n\nexport const AssetShow = (props) => {\n const controllerProps = useShowController(props)\n const record = controllerProps.record\n const permissions = props.permissions\n\n if (!record) return null\n return (\n <ResourceContextProvider value={props.resource}>\n <ShowContextProvider value={controllerProps}>\n <ShowView\n {...props}\n actions={<AssetShowActions permissions={permissions} />}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n <TabbedShowLayout>\n <Tab label=\"Основное\">\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <TextField source=\"address\" />\n <NestedField source=\"type\" reference=\"AssetType\" link={false} >\n <TextField source=\"name\" />\n </NestedField>\n <NestedField source=\"assetClass\" reference=\"AssetClass\" >\n <TextField source=\"name\" />\n </NestedField>\n <IconField source=\"icon\" withName />\n <ReferenceArrayField source=\"parametersOnMapIds\" reference=\"Parameter\" label=\"resources.Asset.fields.parametersOnMap\">\n <SingleFieldList linkType={false}>\n <ChipField source=\"name\" />\n </SingleFieldList>\n </ReferenceArrayField>\n <NestedArrayField source=\"labels\" reference=\"Label\">\n <LabelChip source=\"name\" />\n </NestedArrayField>\n <ReferenceField source=\"createdById\" reference=\"Profile\" label=\"resources.Asset.fields.createdBy\" link={false} >\n <TextField source=\"name\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={dateTimeOptions} />\n <DateField source=\"updatedAt\" options={dateTimeOptions} />\n <TextCopyField source=\"id\" />\n </SimpleShowLayout>\n </Tab>\n <Tab label=\"События\" path=\"events\">\n <BlankShowLayout>\n <ListField\n resource=\"Event\"\n basePath=\"/Event\"\n filter={{\n resource: record.id\n }}\n sort={{ field: 'timestamp', order: 'DESC' }}\n perPage={5}\n >\n <EventReferenceDatagrid />\n </ListField>\n </BlankShowLayout>\n </Tab>\n <Tab label=\"Панели\" path=\"dashboards\">\n {/* <BlankShowLayout label=\"resources.Asset.fields.defaultDashboard\">\n <NestedField source=\"defaultDashboard\" reference=\"Dashboard\" link={false}>\n <AssetDashboardCard source=\"name\" />\n </NestedField>\n </BlankShowLayout> */}\n <SimpleShowLayout >\n <AssetDashboardsNestedArrayField source=\"dashboards\" reference=\"Dashboard\" link={false} >\n <AssetDashboardChip source=\"name\" />\n </AssetDashboardsNestedArrayField>\n </SimpleShowLayout>\n </Tab>\n <Tab label=\"Данные\" path=\"tags\">\n <BlankShowLayout>\n <ListField\n resource=\"Tag\"\n basePath=\"/Tag\"\n filter={{\n asset: {\n id: record.id\n }\n }}\n sort={{ field: 'timestamp', order: 'DESC' }}\n perPage={25}\n >\n <TagListReferenceDatagrid />\n </ListField>\n </BlankShowLayout>\n </Tab>\n <Tab label=\"Дерево тегов\" path=\"tree\">\n <SimpleShowLayout>\n <ConnectGroupTreeField source=\"tree\" />\n </SimpleShowLayout>\n </Tab>\n <Tab label=\"Файлы\" path=\"files\">\n <BlankShowLayout>\n <FileListReference\n resource=\"File\"\n basePath=\"/File\"\n filter={{ resourceAssetId: record.id }}\n sort={{ field: 'name', order: 'DESC' }}\n perPage={10}\n uploadOptions={defaultUploadOptions}\n createOptions={{ resourcesIds: [record.id], _resourcesIdsTypename: \"Asset\" }}\n />\n </BlankShowLayout>\n </Tab>\n <Tab label=\"Отчеты\" path=\"reports\">\n <BlankShowLayout>\n <ReportListReference\n resource=\"Report\"\n basePath=\"/Report\"\n filter={{ assets: { some: { id: record.id} } }}\n sort={{ field: 'updatedAt', order: 'DESC' }}\n perPage={10}\n createOptions={{ resourcesIds: [record.id], _resourcesIdsTypename: \"Asset\" }}\n />\n </BlankShowLayout>\n </Tab>\n <Tab label=\"История\" path=\"history\">\n <BlankShowLayout>\n <ListField\n resource=\"History\"\n basePath=\"/History\"\n filter={{\n resourceType: \"Asset\",\n resourceId: record.id\n }}\n sort={{ field: 'createdAt', order: 'DESC' }}\n perPage={10}\n >\n <ReferenceHistoryDatagrid />\n </ListField>\n </BlankShowLayout>\n </Tab>\n </TabbedShowLayout>\n </ShowView>\n </ShowContextProvider>\n </ResourceContextProvider>\n\n );\n};\n\nexport default AssetShow;\n","\nimport get from 'lodash/get';\n\n\n\nconst dataProviderFactory = (resolveMap) => {\n const dataProviderProxy = new Proxy({}, {\n get: (target, method) => {\n return (resource, params) => {\n const path = [resource, method]\n const resolver = get(resolveMap, path)\n if (!resolver) throw Error(`Resolver \"${method}\" for \"${resource}\" Resource not found`)\n return resolver(params)\n };\n },\n });\n\n return dataProviderProxy\n}\n\nexport default dataProviderFactory;","import buildDataProviderFactory from './buildDataProviderFactory';\n\nexport default buildDataProviderFactory","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../../authProvider/authorizationProvider/checkToken';\nimport { URI_AUTHENTICATION_SERVICE } from '../../appsettings';\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeader('authorization', token ? `Bearer ${token}` : \"\");\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_AUTHENTICATION_SERVICE)\n\nexport default client","import gql from 'graphql-tag';\n\n\n\nexport const ACCOUNT_FRAGMENT = gql`\n fragment AccountFragment on Account {\n id\n login\n email\n phone\n name\n createdAt\n createdById\n updatedAt\n deleted\n banned\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\nexport const sanitizeResourceConstructor = (data, { skipFields }) => {\n\n if (skipFields) {\n const sanitizeData = skipFields ? omit(data, skipFields) : data\n const sanitizedData = sanitizeResource(sanitizeData)\n return { ...data, ...sanitizedData }\n }\n\n return sanitizeResource(data)\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = Object.keys(data).reduce((acc, key) => {\n if (key.startsWith('_')) {\n return acc;\n }\n\n const dataKey = data[key];\n\n if (dataKey === null || dataKey === undefined) {\n return acc;\n }\n\n if (Array.isArray(dataKey)) {\n if (typeof dataKey[0] === 'object' && dataKey[0] !== null) {\n return {\n ...acc,\n [key]: dataKey.map(sanitizeResource),\n [`${key}Ids`]: dataKey.map(d => d.id),\n };\n } else {\n return { ...acc, [key]: dataKey };\n }\n }\n\n if (typeof dataKey === 'object' && dataKey !== null) {\n return {\n ...acc,\n // ...(dataKey &&\n // dataKey.id && {\n // [`${key}.id`]: dataKey.id,\n // }),\n [key]: sanitizeResource(dataKey),\n };\n }\n\n return { ...acc, [key]: dataKey };\n }, {});\n\n return result;\n};\n\nexport const sanitizeInput = ({\n id,\n createdAt,\n createdById,\n updatedAt,\n deleted,\n banned,\n confirmPassword,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ACCOUNT_FRAGMENT } from './typeDefs';\nimport { buildReferenceArrayCreateInput, sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const CREATE_ACCOUNT = gql`\n mutation createAccount($input: AccountCreateInput!) {\n data: Account {\n data: create(input: $input) {\n item { ...AccountFragment }\n }\n } \n }\n ${ACCOUNT_FRAGMENT}\n`\n\nexport default (args) => {\n\n const { data } = args\n\n const input = sanitizeInput(data)\n\n return graphqlClient.request(CREATE_ACCOUNT, {\n input: {\n ...input,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: item,\n }\n }).catch(graphqlErrorHandler)\n\n}\n","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ACCOUNT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_LIST_ACCOUNTS = gql`\n query getListAccounts($filter: AccountFilter, $sort: [AccountSort!] $page: Int, $perPage: Int) {\n data: Account {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...AccountFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${ACCOUNT_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_ACCOUNTS, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(error => {\n console.error(error)\n throw new Error('ra.notification.data_provider_error')\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ACCOUNT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_ACCOUNTS = gql`\n query getManyAccounts($ids: [ID!]!) {\n data: Account {\n data: getMany(ids: $ids) {\n items { ...AccountFragment }\n }\n }\n }\n ${ACCOUNT_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_ACCOUNTS, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ACCOUNT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_ACCOUNTS = gql`\n query getManyReferenceAccounts($filter: AccountFilter, $sort: [AccountSort!] $page: Int, $perPage: Int) {\n data: Account {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...AccountFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${ACCOUNT_FRAGMENT}\n`\n\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_ACCOUNTS, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ACCOUNT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_ONE_ACCOUNT = gql`\n query getOneAccount( $where: AccountWhereUniqueInput! ) {\n data: Account {\n data: getOne(where: $where) {\n item { ...AccountFragment }\n }\n }\n }\n ${ACCOUNT_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_ACCOUNT, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport omit from 'lodash/omit';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ACCOUNT_FRAGMENT } from './typeDefs';\nimport { buildReferenceArrayUpdateInput, sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const UPDATE_ACCOUNT = gql`\n mutation updateAccount($where: AccountWhereUniqueInput!, $input: AccountUpdateInput!) {\n data: Account{\n data: update(where: $where, input: $input) {\n item { ...AccountFragment }\n }\n }\n }\n ${ACCOUNT_FRAGMENT}\n`\n\nexport default (args) => {\n const { id, data, previousData } = args\n\n const input = sanitizeInput(data)\n\n return graphqlClient.request(UPDATE_ACCOUNT, {\n where: { id },\n input: {\n ...input,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: item,\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ACCOUNT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const DELETE_ACCOUNT = gql`\n mutation deleteAccount($where: AccountWhereUniqueInput!) {\n data: Account {\n data: delete(where: $where) {\n item { ...AccountFragment }\n }\n }\n }\n ${ACCOUNT_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_ACCOUNT, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ACCOUNT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const REMOVE_ACCOUNT = gql`\n mutation removeAccount($where: AccountWhereUniqueInput!) {\n data: Account {\n data: remove(where: $where) {\n item { ...AccountFragment }\n }\n }\n }\n ${ACCOUNT_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(REMOVE_ACCOUNT, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ACCOUNT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const RESTORE_ACCOUNT = gql`\n mutation restoreAccount($where: AccountWhereUniqueInput!) {\n data: Account {\n data: restore(where: $where) {\n item { ...AccountFragment }\n }\n }\n }\n ${ACCOUNT_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(RESTORE_ACCOUNT, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ACCOUNT_FRAGMENT } from './typeDefs';\n\n\n\nexport const BAN_ACCOUNT = gql`\n mutation bunAccount($where: AccountWhereUniqueInput!, $input: AccountUpdateInput!) {\n data: Account{\n data: update(where: $where, input: $input) {\n item { ...AccountFragment }\n }\n }\n }\n ${ACCOUNT_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(BAN_ACCOUNT, {\n where: { id },\n input: { banned: true },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: item,\n }\n }).catch(graphqlErrorHandler)\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ACCOUNT_FRAGMENT } from './typeDefs';\n\n\n\nexport const UNBAN_ACCOUNT = gql`\n mutation unbunAccount($where: AccountWhereUniqueInput!, $input: AccountUpdateInput!) {\n data: Account{\n data: update(where: $where, input: $input) {\n item { ...AccountFragment }\n }\n }\n }\n ${ACCOUNT_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(UNBAN_ACCOUNT, {\n where: { id },\n input: { banned: false },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: item,\n }\n }).catch(graphqlErrorHandler);\n};\n","import create from './create';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\nimport deleteMany from './deleteMany';\nimport remove from './remove';\nimport removeMany from './removeMany';\nimport restore from './restore';\nimport restoreMany from './restoreMany';\nimport ban from './ban';\nimport unban from './unban';\n\n\n\nconst Account = {\n create,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n deleteMany,\n remove,\n removeMany,\n restore,\n restoreMany,\n ban,\n unban,\n};\n\nexport default Account","import deleteMutation from './delete';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n deleteMutation({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import remove from './remove';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n remove({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import restore from './restore';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n restore({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","\nimport Account from \"./Account\"\n\nconst resolveMap = {\n Account,\n}\n\n\n\nexport default resolveMap","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../../authProvider/authorizationProvider/checkToken';\nimport { URI_AUTHORIZATION_SERVICE } from '../../appsettings';\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeader('authorization', token ? `Bearer ${token}` : \"\");\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_AUTHORIZATION_SERVICE)\n\nexport default client","import gql from 'graphql-tag';\n\n\n\nexport const PROFILE_FRAGMENT = gql`\n fragment ProfileFragment on Profile {\n id\n name\n description\n role { id name description }\n application { id name description }\n account { id }\n createdAt\n updatedAt\n deleted\n isDefault\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current) ? { connect: { id: current.id } } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current.id } } : { disconnect: true } : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\nexport const sanitizeResourceConstructor = (data, { skipFields }) => {\n\n if (skipFields) {\n const sanitizeData = skipFields ? omit(data, skipFields) : data\n const sanitizedData = sanitizeResource(sanitizeData)\n return { ...data, ...sanitizedData }\n }\n\n return sanitizeResource(data)\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = Object.keys(data).reduce((acc, key) => {\n if (key.startsWith('_')) {\n return acc;\n }\n\n const dataKey = data[key];\n\n if (dataKey === null || dataKey === undefined) {\n return acc;\n }\n\n if (Array.isArray(dataKey)) {\n if (typeof dataKey[0] === 'object' && dataKey[0] !== null) {\n return {\n ...acc,\n [key]: dataKey.map(sanitizeResource),\n [`${key}Ids`]: dataKey.map(d => d.id),\n };\n } else {\n return { ...acc, [key]: dataKey };\n }\n }\n\n if (typeof dataKey === 'object' && dataKey !== null) {\n return {\n ...acc,\n // ...(dataKey &&\n // dataKey.id && {\n // [`${key}.id`]: dataKey.id,\n // }),\n [key]: sanitizeResource(dataKey),\n };\n }\n\n return { ...acc, [key]: dataKey };\n }, {});\n\n return result;\n};\n\nexport const sanitizeInput = ({\n id,\n createdAt,\n createdById,\n updatedAt,\n deleted,\n account,\n application,\n preferences,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PROFILE_FRAGMENT } from './typeDefs';\nimport { buildReferenceCreateInput, sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const CREATE_PROFILE = gql`\n mutation createProfile($input: ProfileCreateInput!) {\n data: Profile {\n data: create(input: $input) {\n item { ...ProfileFragment }\n }\n } \n }\n ${PROFILE_FRAGMENT}\n`\n\nconst create = (args) => {\n const { data } = args\n const input = sanitizeInput(data)\n const account = buildReferenceCreateInput(data.account)\n const application = buildReferenceCreateInput(data.application)\n const role = buildReferenceCreateInput(data.role)\n\n return graphqlClient.request(CREATE_PROFILE, {\n input: {\n ...input,\n account,\n application,\n role\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: item,\n }\n }).catch(graphqlErrorHandler);\n\n}\n\n\nexport default create","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PROFILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_LIST_PROFILES = gql`\n query getListProfiles($filter: ProfileFilter, $sort: [ProfileSort!] $page: Int, $perPage: Int) {\n data: Profile {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...ProfileFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${PROFILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_PROFILES, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(error => {\n console.error(error)\n throw new Error('ra.notification.data_provider_error')\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PROFILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_PROFILES = gql`\n query getManyProfiles($ids: [ID!]!) {\n data: Profile {\n data: getMany(ids: $ids) {\n items { ...ProfileFragment }\n }\n }\n }\n ${PROFILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_PROFILES, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PROFILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_PROFILES = gql`\n query getManyReferenceProfiles($filter: ProfileFilter, $sort: [ProfileSort!] $page: Int, $perPage: Int) {\n data: Profile {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...ProfileFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${PROFILE_FRAGMENT}\n`\n\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_PROFILES, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../../authProvider/authorizationProvider/checkToken';\nimport { URI_PREFERENCES_SERVICE } from '../../appsettings';\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeader('authorization', token ? `Bearer ${token}` : \"\");\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_PREFERENCES_SERVICE)\n\nexport default client","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\n\nexport const GET_PREFERENCESS = gql`\n query getPreferences($key: String!) {\n data: getPreferences(key: $key) {\n key\n payload\n }\n }\n`\n\nexport default (args) => {\n return graphqlClient.request(GET_PREFERENCESS, args)\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PROFILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\nimport getPreferences from '../../PreferencesService/Preferences/getPreferences';\n\n\n\nexport const GET_ONE_PROFILE = gql`\n query getOneProfile( $where: ProfileWhereUniqueInput! ) {\n data: Profile {\n data: getOne(where: $where) {\n item { ...ProfileFragment }\n }\n }\n }\n ${PROFILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_PROFILE, {\n where: { id },\n }).then(response => {\n return getPreferences({ key: \"\" })\n .then(({ data }) => {\n const item = sanitizeResource(response?.data?.data?.item)\n const preferences = data?.payload\n return {\n data: { ...item, preferences },\n }\n })\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\n\n\n\nexport const SET_PREFERENCES = gql`\n mutation setPreferences($key: String!, $payload: Json!) {\n data: setPreferences(key: $key, payload: $payload) {\n key\n payload\n }\n }\n`\n\nexport default (args) => {\n return graphqlClient.request(SET_PREFERENCES, args)\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PROFILE_FRAGMENT } from './typeDefs';\nimport { buildReferenceUpdateInput, sanitizeInput, sanitizeResource } from './utils';\nimport setPreferences from '../../PreferencesService/Preferences/setPreferences';\n\n\n\nexport const UPDATE_PROFILE = gql`\n mutation updateProfile($where: ProfileWhereUniqueInput!, $input: ProfileUpdateInput!) {\n data: Profile{\n data: update(where: $where, input: $input) {\n item { ...ProfileFragment }\n }\n }\n }\n ${PROFILE_FRAGMENT}\n`\n\nconst update = (args) => {\n const { id, data, previousData } = args\n\n const input = sanitizeInput(data)\n const account = buildReferenceUpdateInput(data.account, previousData.account)\n const application = buildReferenceUpdateInput(data.application, previousData.application)\n const role = buildReferenceUpdateInput(data.role, previousData.role)\n const preferences = data.preferences\n\n return graphqlClient.request(UPDATE_PROFILE, {\n where: { id },\n input: {\n ...input,\n account,\n application,\n role,\n }\n }).then(response => {\n return setPreferences({ key: \"\", payload: preferences })\n .then(({ data }) => {\n const item = sanitizeResource(response?.data?.data?.item)\n const preferences = data?.payload\n return {\n data: { ...item, preferences },\n }\n })\n }).catch(graphqlErrorHandler);\n};\n\n\nexport default update","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PROFILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const DELETE_PROFILE = gql`\n mutation deleteProfile($where: ProfileWhereUniqueInput!) {\n data: Profile {\n data: delete(where: $where) {\n item { ...ProfileFragment }\n }\n }\n }\n ${PROFILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_PROFILE, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PROFILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const REMOVE_PROFILE = gql`\n mutation removeProfile($where: ProfileWhereUniqueInput!) {\n data: Profile {\n data: remove(where: $where) {\n item { ...ProfileFragment }\n }\n }\n }\n ${PROFILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(REMOVE_PROFILE, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PROFILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const RESTORE_PROFILE = gql`\n mutation restoreProfile($where: ProfileWhereUniqueInput!) {\n data: Profile {\n data: restore(where: $where) {\n item { ...ProfileFragment }\n }\n }\n }\n ${PROFILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(RESTORE_PROFILE, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import create from './create';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\nimport deleteMany from './deleteMany';\nimport remove from './remove';\nimport removeMany from './removeMany';\nimport restore from './restore';\nimport restoreMany from './restoreMany';\n\n\nconst Profile = {\n create,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n deleteMany,\n remove,\n removeMany,\n restore,\n restoreMany,\n};\n\nexport default Profile","import deleteMutation from './delete';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n deleteMutation({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import remove from './remove';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n remove({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import restore from './restore';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n restore({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import gql from 'graphql-tag';\n\n\n\nexport const APPLICATION_FRAGMENT = gql`\n fragment ApplicationFragment on Application {\n id\n name\n description\n url\n avatar\n createdAt\n updatedAt\n deleted\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\nexport const sanitizeResourceConstructor = (data, { skipFields }) => {\n\n if (skipFields) {\n const sanitizeData = skipFields ? omit(data, skipFields) : data\n const sanitizedData = sanitizeResource(sanitizeData)\n return { ...data, ...sanitizedData }\n }\n\n return sanitizeResource(data)\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = Object.keys(data).reduce((acc, key) => {\n if (key.startsWith('_')) {\n return acc;\n }\n\n const dataKey = data[key];\n\n if (dataKey === null || dataKey === undefined) {\n return acc;\n }\n\n if (Array.isArray(dataKey)) {\n if (typeof dataKey[0] === 'object' && dataKey[0] !== null) {\n return {\n ...acc,\n [key]: dataKey.map(sanitizeResource),\n [`${key}Ids`]: dataKey.map(d => d.id),\n };\n } else {\n return { ...acc, [key]: dataKey };\n }\n }\n\n if (typeof dataKey === 'object' && dataKey !== null) {\n return {\n ...acc,\n // ...(dataKey &&\n // dataKey.id && {\n // [`${key}.id`]: dataKey.id,\n // }),\n [key]: sanitizeResource(dataKey),\n };\n }\n\n return { ...acc, [key]: dataKey };\n }, {});\n\n return result;\n};\n\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { APPLICATION_FRAGMENT } from './typeDefs';\nimport { buildReferenceArrayCreateInput, sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const CREATE_APPLICATION = gql`\n mutation createApplication($input: ApplicationCreateInput!) {\n data: Application {\n data: create(input: $input) {\n item { ...ApplicationFragment }\n }\n } \n }\n ${APPLICATION_FRAGMENT}\n`\n\nexport default (args) => {\n\n const { data } = args\n\n const input = sanitizeInput(data)\n\n return graphqlClient.request(CREATE_APPLICATION, {\n input: {\n ...input,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: item,\n }\n }).catch(graphqlErrorHandler);\n\n}\n","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { APPLICATION_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_LIST_APPLICATIONS = gql`\n query getListApplications($filter: ApplicationFilter, $sort: [ApplicationSort!] $page: Int, $perPage: Int) {\n data: Application {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...ApplicationFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${APPLICATION_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_APPLICATIONS, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(error => {\n console.error(error)\n throw new Error('ra.notification.data_provider_error')\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { APPLICATION_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_APPLICATIONS = gql`\n query getManyApplications($ids: [ID!]!) {\n data: Application {\n data: getMany(ids: $ids) {\n items { ...ApplicationFragment }\n }\n }\n }\n ${APPLICATION_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_APPLICATIONS, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { APPLICATION_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_APPLICATIONS = gql`\n query getManyReferenceApplications($filter: ApplicationFilter, $sort: [ApplicationSort!] $page: Int, $perPage: Int) {\n data: Application {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...ApplicationFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${APPLICATION_FRAGMENT}\n`\n\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_APPLICATIONS, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { APPLICATION_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_ONE_APPLICATION = gql`\n query getOneApplication( $where: ApplicationWhereUniqueInput! ) {\n data: Application {\n data: getOne(where: $where) {\n item { ...ApplicationFragment }\n }\n }\n }\n ${APPLICATION_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_APPLICATION, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { APPLICATION_FRAGMENT } from './typeDefs';\nimport { buildReferenceArrayUpdateInput, sanitizeResource } from './utils';\n\n\n\nexport const UPDATE_APPLICATION = gql`\n mutation updateApplication($where: ApplicationWhereUniqueInput!, $input: ApplicationUpdateInput!) {\n data: Application{\n data: update(where: $where, input: $input) {\n item { ...ApplicationFragment }\n }\n }\n }\n ${APPLICATION_FRAGMENT}\n`\n\nexport const sanitizeInput = ({\n id,\n createdAt,\n createdById,\n updatedAt,\n deleted,\n ...sanitizedInput }) => sanitizedInput\n\nexport default (args) => {\n const { id, data, previousData } = args\n\n const input = sanitizeInput(data)\n\n return graphqlClient.request(UPDATE_APPLICATION, {\n where: { id },\n input: {\n ...input,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: item,\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { APPLICATION_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const DELETE_APPLICATION = gql`\n mutation deleteApplication($where: ApplicationWhereUniqueInput!) {\n data: Application {\n data: delete(where: $where) {\n item { ...ApplicationFragment }\n }\n }\n }\n ${APPLICATION_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_APPLICATION, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { APPLICATION_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const REMOVE_APPLICATION = gql`\n mutation removeApplication($where: ApplicationWhereUniqueInput!) {\n data: Application {\n data: remove(where: $where) {\n item { ...ApplicationFragment }\n }\n }\n }\n ${APPLICATION_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(REMOVE_APPLICATION, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { APPLICATION_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const RESTORE_APPLICATION = gql`\n mutation restoreApplication($where: ApplicationWhereUniqueInput!) {\n data: Application {\n data: restore(where: $where) {\n item { ...ApplicationFragment }\n }\n }\n }\n ${APPLICATION_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(RESTORE_APPLICATION, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","\nimport Profile from \"./Profile\"\nimport Application from \"./Application\"\n\nconst resolveMap = {\n Profile,\n Application,\n}\n\n\n\nexport default resolveMap","import create from './create';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\nimport deleteMany from './deleteMany';\nimport remove from './remove';\nimport removeMany from './removeMany';\nimport restore from './restore';\nimport restoreMany from './restoreMany';\n\n\nconst Application = {\n create,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n deleteMany,\n remove,\n removeMany,\n restore,\n restoreMany,\n};\n\nexport default Application","import deleteMutation from './delete';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n deleteMutation({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import remove from './remove';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n remove({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import restore from './restore';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n restore({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../../authProvider/authorizationProvider/checkToken';\nimport { URI_HISTORY_SERVICE } from '../../appsettings';\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeader('authorization', token ? `Bearer ${token}` : \"\");\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_HISTORY_SERVICE)\n\nexport default client","import gql from 'graphql-tag';\n\n\nexport const HISTORY_FRAGMENT = gql`\n fragment HistoryFragment on History {\n id\n resourceType\n resourceId\n name\n description\n action\n data\n previousData\n createdAt\n createdById\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport isEqual from 'lodash/isEqual';\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : { disconnect: true } : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\nexport const sanitizeResourceConstructor = (data, { skipFields }) => {\n\n if (skipFields) {\n const sanitizeData = skipFields ? omit(data, skipFields) : data\n const sanitizedData = sanitizeResource(sanitizeData)\n return { ...data, ...sanitizedData }\n }\n\n return sanitizeResource(data)\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n return data;\n};\n\nexport const sanitizeInput = ({\n resourceType,\n resourceId,\n name,\n description,\n action,\n data,\n previousData,\n createdAt,\n createdById,\n ...sanitizedInput\n}) => sanitizedInput","import gql from \"graphql-tag\";\nimport omit from \"lodash/omit\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { HISTORY_FRAGMENT } from \"./typeDefs\";\nimport {\n buildReferenceCreateInput,\n buildReferenceArrayCreateInput,\n sanitizeResource,\n sanitizeInput,\n} from \"./utils\";\n\n\n\nexport const CREATE_HISTORY = gql`\n mutation createHistory($input: HistoryCreateInput!) {\n data: History {\n data: create(input: $input) {\n item {\n ...HistoryFragment\n }\n }\n }\n }\n ${HISTORY_FRAGMENT}\n`;\n\nexport default (args) => {\n const { data } = args;\n\n const input = sanitizeInput(data);\n\n return graphqlClient\n .request(CREATE_HISTORY, {\n input: {\n ...input,\n },\n })\n .then(response => {\n const item = response?.data?.data?.item;\n\n return {\n data: sanitizeResource(item),\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from \"graphql-tag\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport getListProfile from '../../AuthorizationService/Profile/getList';\nimport { HISTORY_FRAGMENT } from \"./typeDefs\";\nimport { sanitizeResource } from \"./utils\";\n\n\n\nexport const GET_LIST_HISTORIES = gql`\n query getListHistories(\n $filter: HistoryFilter\n $sort: [HistorySort!]\n $page: Int\n $perPage: Int\n ) {\n data: History {\n data: getList(\n filter: $filter\n sort: $sort\n page: $page\n perPage: $perPage\n ) {\n items {\n ...HistoryFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${HISTORY_FRAGMENT}\n`;\n\nexport default async(args) => {\n const {\n filter : { application, ...filter } = {},\n pagination: { page, perPage },\n sort: { field, order },\n } = args;\n\n try {\n \n if(application) {\n \n const profiles = await getListProfile({\n pagination: { page: 1, perPage: 10000 },\n sort: { field: 'id', order: 'ASC' },\n filter: { application, id: filter.createdById }\n });\n\n filter.createdById_in = profiles.data.map(p => p.id);\n delete filter.createdById;\n }\n \n const response = await graphqlClient.request(GET_LIST_HISTORIES, {\n filter: buildFilter(filter),\n sort: [{ [field]: order.toLowerCase() }],\n page,\n perPage,\n })\n\n let items = response?.data?.data?.items;\n let pageInfo = response?.data?.data?.pageInfo; \n\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n };\n } catch (err) {\n graphqlErrorHandler(err) \n }\n\n /*\n return graphqlClient\n .request(GET_LIST_HISTORIES, {\n filter: buildFilter(filter),\n sort: [{ [field]: order.toLowerCase() }],\n page,\n perPage,\n })\n .then(async (response) => {\n let items = response?.data?.data?.items;\n let pageInfo = response?.data?.data?.pageInfo;\n\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n };\n }).catch(graphqlErrorHandler);\n */\n};\n\nconst buildFilter = (filter) => {\n const { catalog, ...otherFilter } = filter\n const catalogFilter = catalog ? {\n catalog: {\n parentIds: catalog.map(c => c.id)\n }\n } : {}\n\n return { ...catalogFilter, ...otherFilter }\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { HISTORY_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_HISTORIES = gql`\n query getManyHistories($ids: [ID!]!) {\n data: History {\n data: getMany(ids: $ids) {\n items { ...HistoryFragment }\n }\n }\n }\n ${HISTORY_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_HISTORIES, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n};","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { HISTORY_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_HISTORIES = gql`\n query getManyReferenceHistories($filter: HistoryFilter, $sort: [HistorySort!] $page: Int, $perPage: Int) {\n data: History {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...HistoryFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${HISTORY_FRAGMENT}\n`\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_HISTORIES, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [{ [field]: order.toLowerCase() }],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler);\n};","import gql from \"graphql-tag\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { HISTORY_FRAGMENT } from \"./typeDefs\";\nimport { sanitizeResource } from \"./utils\";\n\n\n\nexport const GET_ONE_HISTORY = gql`\n query getOneHistory($where: HistoryWhereUniqueInput!) {\n data: History {\n data: getOne(where: $where) {\n item {\n ...HistoryFragment\n }\n }\n }\n }\n ${HISTORY_FRAGMENT}\n`;\n\nexport default (args) => {\n const { id } = args;\n\n return graphqlClient\n .request(GET_ONE_HISTORY, {\n where: { id },\n })\n .then(async (response) => {\n const item = response?.data?.data?.item;\n return {\n data: sanitizeResource(item),\n };\n }).catch(graphqlErrorHandler);\n};\n","import create from './create';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\n\n\nconst History = {\n create,\n getList,\n getMany,\n getManyReference,\n getOne,\n};\n\nexport default History","import History from \"./History\"\n\nconst resolveMap = {\n History\n}\n\n\n\nexport default resolveMap","\nexport const sanitizeResource = data => {\n if (!data) return null\n const result = Object.keys(data).reduce((acc, key) => {\n if (key.startsWith('_')) {\n return acc;\n }\n\n const dataKey = data[key];\n\n if (dataKey === null || dataKey === undefined) {\n return acc;\n }\n\n if (Array.isArray(dataKey)) {\n if (typeof dataKey[0] === 'object' && dataKey[0] !== null) {\n return {\n ...acc,\n [key]: dataKey.map(sanitizeResource),\n [`${key}Ids`]: dataKey.map(d => d.id),\n };\n } else {\n return { ...acc, [key]: dataKey };\n }\n }\n\n if (typeof dataKey === 'object' && dataKey !== null) {\n return {\n ...acc,\n // ...(dataKey &&\n // dataKey.id && {\n // [`${key}.id`]: dataKey.id,\n // }),\n [key]: sanitizeResource(dataKey),\n };\n }\n\n return { ...acc, [key]: dataKey };\n }, {});\n\n return result;\n};\n\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EVENT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource, sanitizeInput } from \"./utils\";\n\n\n\nexport const CREATE_EVENT = gql`\n mutation createEvent($input: EventCreateInput!) {\n data: Event {\n data: create(input: $input) {\n item {\n ...EventFragment\n }\n }\n }\n }\n ${EVENT_FRAGMENT}\n`;\n\nexport default (args) => {\n const { data } = args;\n\n const input = sanitizeInput(data);\n\n return graphqlClient.request(CREATE_EVENT, {\n input: {\n ...input,\n },\n })\n .then(async (response) => {\n const item = response?.data?.data?.item;\n\n return {\n data: sanitizeResource(item),\n };\n }).catch(graphqlErrorHandler);\n};","import { gql } from \"graphql-request\"\nimport assetGraphqlClient from \"../GatewayService/graphqlClient\"\nimport { graphqlErrorHandler } from \"../graphqlErrors\"\n\nconst GET_LIST_ASSETS_IDS = gql`\n query getListAssets($filter: AssetFilter, $sort: [AssetSort!], $page: Int, $perPage: Int) {\n data: Asset {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n id\n }\n }\n }\n }\n`\n\nexport function assetLabelsFilter(filter) {\n const assetLabelsAndIds = filter.assetLabelsAndIds || []\n const assetLabelsNotAndIds = filter.assetLabelsNotAndIds || []\n\n if (assetLabelsAndIds.length > 0 || assetLabelsNotAndIds.length > 0) {\n const assetsFilter = {\n labelsAndIds: assetLabelsAndIds,\n labelsNotAndIds: assetLabelsNotAndIds,\n }\n\n const requestParams = {\n filter: assetsFilter,\n sort: [],\n page: 1,\n perPage: 10000,\n }\n\n delete filter.assetLabelsAndIds\n delete filter.assetLabelsNotAndIds\n\n return assetGraphqlClient\n .request(GET_LIST_ASSETS_IDS, requestParams)\n .then((response) => {\n const items = response?.data?.data?.items || []\n return items.map((obj) => obj.id)\n })\n .catch(graphqlErrorHandler)\n } else {\n return Promise.resolve(null)\n }\n}\n\nexport function buildAssetLabelsFilter(filter, assetIds) {\n if (!Array.isArray(assetIds)) {\n return\n }\n\n filter.resource_in = assetIds.length > 0 ? assetIds : ['']\n}\n","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EVENT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\nimport { assetLabelsFilter, buildAssetLabelsFilter } from '../utils';\n\n\n\nexport const GET_LIST_EVENTS = gql`\n query getListEvents($filter: EventFilter, $sort: [EventSort!], $page: Int, $perPage: Int ) {\n data: Event {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage ) {\n items {\n ...EventFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${EVENT_FRAGMENT}\n`;\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return assetLabelsFilter(filter).then((assetIds) => {\n buildAssetLabelsFilter(filter, assetIds)\n \n return graphqlClient.request(GET_LIST_EVENTS, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n };\n }).catch(graphqlErrorHandler);\n });\n};","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EVENT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const GET_MANY_EVENTS = gql`\n query getManyEvents($ids: [ID!]!) {\n data: Event {\n data: getMany(ids: $ids) {\n items {\n ...EventFragment\n }\n }\n }\n }\n ${EVENT_FRAGMENT}\n`;\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_EVENTS, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EVENT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const GET_ONE_EVENT = gql`\n query getOneEvent($where: EventWhereUniqueInput!) {\n data: Event {\n data: getOne(where: $where) {\n item {\n ...EventFragment\n }\n }\n }\n }\n ${EVENT_FRAGMENT}\n`;\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_EVENT, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\n\n\n\nexport const GET_ENUMS = gql`\n query getEnums($name: String!) {\n data: __type(name: $name) {\n name\n enumValues{\n name\n description\n } \n }\n }\n`\n\nexport default (args) => {\n const { name } = args\n\n return graphqlClient.request(GET_ENUMS, {\n name\n }).then(response => {\n const items = response?.data?.enumValues\n\n return {\n data: items,\n }\n })\n}","\nimport { createClient } from 'graphql-ws';\nimport checkToken, { getCurrentTokenExpiresIn } from '../../authProvider/authorizationProvider/checkToken';\nimport { WS_EVENTBUS_SERVICE } from '../../appsettings';\n\n\nclass graphqlWsClient {\n constructor(enpoint) {\n \n let tokenExpiryTimeout = null;\n\n const client = createClient({ \n url: enpoint,\n keepAlive: 10000, \n \n /**\n * Controls when should the connection be established.\n *\n * - `false`: Establish a connection immediately. Use `onNonLazyError` to handle errors.\n * - `true`: Establish a connection on first subscribe and close on last unsubscribe. Use\n * the subscription sink's `error` to handle errors.\n *\n * @default true\n */\n lazy: true, \n \n /**\n * How long should the client wait before closing the socket after the last oparation has\n * completed. This is meant to be used in combination with `lazy`. You might want to have\n * a calmdown time before actually closing the connection. Kinda' like a lazy close \"debounce\".\n *\n * @default 0\n */\n //lazyCloseTimeout: 10000,\n\n /** shouldRetry\n * Check if the close event or connection error is fatal. If you return `false`,\n * the client will fail immediately without additional retries; however, if you\n * return `true`, the client will keep retrying until the `retryAttempts` have\n * been exceeded.\n *\n * The argument is whatever has been thrown during the connection phase.\n *\n * Beware, the library classifies a few close events as fatal regardless of\n * what is returned here. They are listed in the documentation of the `retryAttempts`\n * option.\n *\n * @default 'Only `CloseEvent`s'\n */\n shouldRetry: () => true, \n \n /** retryAttempts\n * How many times should the client try to reconnect on abnormal socket closure before it errors out?\n *\n * The library classifies the following close events as fatal:\n * - _All internal WebSocket fatal close codes (check `isFatalInternalCloseCode` in `src/client.ts` for exact list)_\n * - `4500: Internal server error`\n * - `4005: Internal client error`\n * - `4400: Bad request`\n * - `4004: Bad response`\n * - `4401: Unauthorized` _tried subscribing before connect ack_\n * - `4406: Subprotocol not acceptable`\n * - `4409: Subscriber for <id> already exists` _distinction is very important_\n * - `4429: Too many initialisation requests`\n *\n * In addition to the aforementioned close events, any _non-CloseEvent_ connection problem\n * is considered fatal by default. However, this specific behaviour can be altered by using\n * the `shouldRetry` option.\n *\n * These events are reported immediately and the client will not reconnect.\n *\n * @default 5\n */ \n retryAttempts: 1000000, \n \n /** retryWait\n * Control the wait time between retries. You may implement your own strategy\n * by timing the resolution of the returned promise with the retries count.\n * `retries` argument counts actual connection attempts, so it will begin with\n * 0 after the first retryable disconnect.\n *\n * @default 'Randomised exponential backoff'\n */\n retryWait: async() => {\n await new Promise((resolve) => setTimeout(resolve, 5000));\n }, \n \n connectionParams: async () => {\n try {\n const token = await checkToken();\n return {\n authorization: token ? `Bearer ${token}` : \"\",\n }\n } catch(err) {\n console.error(err.message); \n window.location.reload(); \n } \n return {};\n },\n \n on: {\n connected: (socket) => { \n if(tokenExpiryTimeout) {\n clearTimeout(tokenExpiryTimeout);\n }\n \n var tokenExpiresIn = getCurrentTokenExpiresIn();\n if(tokenExpiresIn > 0) {\n tokenExpiryTimeout = setTimeout(() => {\n if (socket.readyState === WebSocket.OPEN)\n socket.close(4403, 'Forbidden');\n }, tokenExpiresIn);\n } \n }\n }\n });\n \n /*\n connecting\n opened\n connected\n ping\n pong\n message\n closed\n error\n\n client.on('connected', () => {\n console.log('CONNECTED');\n });\n \n\n return {\n ...client,\n subscribe : (payload, sink) => {\n //const token = await checkToken();\n return client.subscribe({ \n //authorization: token ? `Bearer ${token}` : \"\", \n ...payload\n }, sink);\n }\n };\n */\n\n return client;\n }\n}\n\nlet client = new graphqlWsClient(WS_EVENTBUS_SERVICE);\n\nexport default client","import graphqlWsClient from '../graphqlWsClient';\n\nfunction SubscribeGraphqlWs(args, observerOrNext, onError, onComplete) {\n\n const unsubscribe = graphqlWsClient.subscribe(\n {\n query: `subscription subscribeEvents($filter: EventFilter!) {\n data: subscribeEvents(filter: $filter) {\n mutation\n data {\n id\n type\n resource\n tag\n active\n ack\n ackRequired\n message {\n title\n body\n }\n priority\n severity\n userId\n comment\n timestamp\n timestampSrv\n }\n }\n }`,\n variables: args,\n },\n {\n next: observerOrNext,\n error: (err) => {\n console.log(`silk EVENT -> ${err.message}`);\n onError && onError(err);\n },\n complete: (arg) => {\n console.log('silk EVENT -> COMPLATE');\n onComplete && onComplete(arg);\n }\n },\n );\n\n\n this.resubscribe = () => {\n }\n \n this.unsubscribe = () => unsubscribe(); \n \n}\n\nexport default(args, observerOrNext, onError, onComplete) => {\n return new SubscribeGraphqlWs(args, observerOrNext, onError, onComplete);\n} \n\n\n\n/*import gql from 'graphql-tag'\nimport graphqSubscriptionlClient from '../graphqlWsClient';\nimport { EVENT_FRAGMENT } from './typeDefs';\nimport { set } from 'lodash'\n\n\nexport const EVENTS_SUBSCRIBTION = gql`\n subscription subscribeEvents($filter: EventFilter!) {\n data: subscribeEvents( filter: $filter ) {\n mutation\n data {\n ...EventFragment\n }\n }\n }\n ${EVENT_FRAGMENT}\n`;\n\nconst subscribe = (args, observerOrNext, onError, onComplete) => {\n \n const observer = graphqSubscriptionlClient.request({\n query: EVENTS_SUBSCRIBTION,\n variables: args,\n });\n\n return observer.subscribe(observerOrNext, onError, onComplete)\n}\n\nexport default (args, observerOrNext, onError, onComplete) => {\n\n let subscription = null;\n let count_error_connect = 0\n \n const unsubscribe = () => {\n if(subscription) {\n subscription.unsubscribe();\n } \n }\n\n const errorProcessing = (errors) => {\n \n count_error_connect++; \n const error = errors.map(er => er.message).join(', ')\n \n if(error.indexOf('jwt expired') > -1) {\n //Если ошибка просрочен токен то переподписываемся\n unsubscribe();\n createSubscribe();\n } else {\n //Если другая ошибка переподключаемся (6 попыток)\n onError(error);\n if(count_error_connect < 6) {\n console.log('ws subscribe disconect');\n graphqSubscriptionlClient.close();\n setTimeout(() => {\n console.log('ws subscribe conect');\n createSubscribe();\n }, 2000);\n } \n } \n }\n\n const createSubscribe = () => {\n subscription = subscribe(args, (next) => {\n const { errors } = next; \n if(errors && errors.length > 0) { \n errorProcessing(errors);\n } else {\n count_error_connect=0; \n return observerOrNext(next);\n }\n }, (err) => errorProcessing([err]), onComplete);\n }\n \n createSubscribe();\n\n\n return {\n unsubscribe\n };\n};\n\n/*\nexport default (args, observerOrNext, onError, onComplete) => {\n\n const observer = graphqSubscriptionlClient.request({\n query: EVENTS_SUBSCRIBTION,\n variables: args,\n });\n\n const subscription = observer.subscribe(observerOrNext, onError, onComplete)\n\n return subscription\n};*/\n\n","import create from './create';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getOne from './getOne';\nimport getEnum from './getEnum';\nimport subscribe from './subscribe';\n\n\n\nconst Event = {\n create,\n getList,\n getMany,\n getOne,\n getEnum,\n subscribe,\n};\n\nexport default Event","import gql from 'graphql-tag';\n\n\n\nexport const EVENT_HISTORY_FRAGMENT = gql`\n fragment EventHistoryFragment on EventHistory {\n id\n type\n resource\n tag\n active\n ack\n ackRequired\n message{\n title\n body\n }\n priority\n severity\n userId\n comment\n timestamp\n timestampSrv\n }\n`\n","\nexport const sanitizeResource = data => {\n if (!data) return null\n const result = Object.keys(data).reduce((acc, key) => {\n if (key.startsWith('_')) {\n return acc;\n }\n\n const dataKey = data[key];\n\n if (dataKey === null || dataKey === undefined) {\n return acc;\n }\n\n if (Array.isArray(dataKey)) {\n if (typeof dataKey[0] === 'object' && dataKey[0] !== null) {\n return {\n ...acc,\n [key]: dataKey.map(sanitizeResource),\n [`${key}Ids`]: dataKey.map(d => d.id),\n };\n } else {\n return { ...acc, [key]: dataKey };\n }\n }\n\n if (typeof dataKey === 'object' && dataKey !== null) {\n return {\n ...acc,\n // ...(dataKey &&\n // dataKey.id && {\n // [`${key}.id`]: dataKey.id,\n // }),\n [key]: sanitizeResource(dataKey),\n };\n }\n\n return { ...acc, [key]: dataKey };\n }, {});\n\n return result;\n};","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EVENT_HISTORY_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\nimport { assetLabelsFilter, buildAssetLabelsFilter } from '../utils';\n\n\n\nexport const GET_LIST_EVENT_HISTORIES = gql`\n query getListEventHistories($filter: EventHistoryFilter, $sort: [EventHistorySort!], $page: Int, $perPage: Int ) {\n data: EventHistory {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage ) {\n items {\n ...EventHistoryFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${EVENT_HISTORY_FRAGMENT}\n`;\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return assetLabelsFilter(filter).then((assetIds) => {\n buildAssetLabelsFilter(filter, assetIds)\n\n return graphqlClient.request(GET_LIST_EVENT_HISTORIES, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler);\n });\n};","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EVENT_HISTORY_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const GET_MANY_EVENT_HISTORIES = gql`\n query getManyEventHistories($ids: [ID!]!) {\n data: EventHistory {\n data: getMany(ids: $ids) {\n items {\n ...EventHistoryFragment\n }\n }\n }\n }\n ${EVENT_HISTORY_FRAGMENT}\n`;\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_EVENT_HISTORIES, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EVENT_HISTORY_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const GET_ONE_EVENT_HISTORY = gql`\n query getOneEventHistory($where: EventHistoryWhereUniqueInput!) {\n data: EventHistory {\n data: getOne(where: $where) {\n item {\n ...EventHistoryFragment\n }\n }\n }\n }\n ${EVENT_HISTORY_FRAGMENT}\n`;\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_EVENT_HISTORY, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\n\n\n\nexport const GET_ENUMS = gql`\n query getEnums($name: String!) {\n data: __type(name: $name) {\n name\n enumValues{\n name\n description\n } \n }\n }\n`\n\nexport default (args) => {\n const { name } = args\n\n return graphqlClient.request(GET_ENUMS, {\n name\n }).then(response => {\n const items = response?.data?.enumValues\n\n return {\n data: items,\n }\n })\n}","import getList from './getList';\nimport getMany from './getMany';\nimport getOne from './getOne';\nimport getEnum from './getEnum';\n\n\n\nconst EventHistory = {\n getList,\n getMany,\n getOne,\n getEnum,\n};\n\nexport default EventHistory","\nimport Event from \"./Event\"\nimport EventHistory from \"./EventHistory\"\n\n\n\nconst resolveMap = {\n Event,\n EventHistory,\n}\n\n\n\nexport default resolveMap","import gql from 'graphql-tag';\n\nexport const HISTORY_FRAGMENT = gql`\n fragment TagHistoryFragment on TagHistory {\n id\n tagId\n value\n type\n quality\n timestamp\n timestampSrv\n utcOffset\n }\n`","import gql from \"graphql-tag\";\nimport graphqlClient from \"../graphqlClient\";\nimport { HISTORY_FRAGMENT } from \"./typeDefs\"\n\nexport const GET_LIST_TAGHISTORY = gql`\n query getListTagHistory(\n $filter: TagHistoryFilter\n $sort: [TagHistorySort!]\n $page: Int\n $perPage: Int\n ) {\n data: TagHistory {\n data: getList(\n filter: $filter\n sort: $sort\n page: $page\n perPage: $perPage\n ) {\n items {\n ...TagHistoryFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${HISTORY_FRAGMENT}\n`;\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_TAGHISTORY, {\n filter,\n sort: [{ [field]: order.toLowerCase() }],\n page,\n perPage,\n }).then(response => {\n const items = response.data?.data?.items\n const pageInfo = response.data?.data?.pageInfo\n return {\n data: items,\n total: pageInfo.totalItems,\n }\n });\n}\n","import getList from './getList';\n\n\nconst TagHistory = {\n getList,\n};\n\nexport default TagHistory","import getList from './getList';\n\nconst TagSeries = {\n getList,\n};\n\nexport default TagSeries","\nimport TagHistory from \"./TagHistory\"\nimport TagSeries from \"./TagSeries\"\n\n\nconst resolveMap = {\n TagHistory,\n TagSeries\n}\n\n\n\nexport default resolveMap","import gql from 'graphql-tag';\n\n\nexport const EMBEDED_ASSET_FRAGMENT = gql`\n fragment EmbededAssetFragment on Asset {\n id\n name\n description\n }\n`\n\nexport const SINGLE_ASSET_FRAGMENT = gql`\n fragment SingleAssetFragment on Asset {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n type { id name }\n assetClass { id name deleted defaultDashboard { id name deleted } dashboards { id name deleted }}\n defaultDashboard { id name deleted }\n dashboards { id name deleted }\n address\n icon\n parametersOnMap { id }\n labels { id name deleted color }\n files { id name deleted }\n tree\n favorite\n }\n`\n\n\n\n\nexport const MULTIPLE_ASSET_FRAGMENT = gql`\n fragment MultipleAssetFragment on Asset {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n type { id name }\n assetClass { id name deleted defaultDashboard {id name deleted } dashboards { id name deleted }}\n defaultDashboard { id name deleted }\n dashboards { id name deleted }\n address\n icon\n parametersOnMap { id }\n labels { id name deleted color }\n tree\n favorite\n }\n`","import difference from 'lodash/difference';\nimport isEqual from 'lodash/isEqual';\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current.id } } : undefined;\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n return (isConnect) ? { connect } : undefined\n}\n\nexport const buildNestedArrayCreateInput = (current = []) => {\n const set = current.map(id => ({ id }))\n const isSet = Boolean(set.length)\n return (isSet) ? { set } : undefined\n}\n\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : { disconnect: true } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildNestedArrayUpdateInput = (current = []) => {\n const set = current.map(id => ({ id }))\n const isSet = Boolean(set.length)\n return (isSet) ? { set } : undefined\n}\n\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = {\n ...data,\n name: data.deleted ? `(Удален) ${data.name}` : data.name,\n dashboards: data.dashboards && data.dashboards.map((item) => ({ ...item, name: item.deleted ? `(Удален) ${item.name}` : item.name })),\n dashboardsIds: data.dashboards && data.dashboards.map(({ id }) => id),\n defaultDashboard: data.defaultDashboard && { ...data.defaultDashboard, name: data.defaultDashboard.deleted ? `(Удален) ${data.defaultDashboard.name}` : data.defaultDashboard.name },\n filesIds: data.files && data.files.map(({ id }) => id),\n labelsIds: data.labels && data.labels.map(({ id }) => id),\n parametersOnMapIds: data.parametersOnMap && data.parametersOnMap.map(({ id }) => id),\n }\n\n return result;\n};\n\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n type,\n assetClass,\n dashboards,\n dashboardsIds,\n defaultDashboard,\n labels,\n labelsIds,\n files,\n filesIds,\n favorite,\n parametersOnMap,\n parametersOnMapIds,\n treeConfiguration,\n tree,\n ...sanitizedInput }) => sanitizedInput","import gql from \"graphql-tag\";\nimport omit from \"lodash/omit\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSET_FRAGMENT } from \"./typeDefs\";\nimport {\n buildReferenceCreateInput,\n buildReferenceArrayCreateInput,\n buildNestedArrayCreateInput,\n sanitizeResource,\n sanitizeInput,\n} from \"./utils\";\n\n\n\nexport const CREATE_ASSET = gql`\n mutation createAsset($input: AssetCreateInput!) {\n data: Asset {\n data: create(input: $input) {\n item {\n ...SingleAssetFragment\n }\n }\n }\n }\n ${SINGLE_ASSET_FRAGMENT}\n`;\n\nexport default (args) => {\n const { data } = args;\n\n const input = sanitizeInput(data);\n const type = buildReferenceCreateInput(data.type)\n const assetClass = buildReferenceCreateInput(data.assetClass)\n const defaultDashboard = buildReferenceCreateInput(data.defaultDashboard)\n const dashboards = buildReferenceArrayCreateInput(data.dashboardsIds)\n const labels = buildReferenceArrayCreateInput(data.labelsIds)\n const files = buildReferenceArrayCreateInput(data.filesIds)\n const parametersOnMap = buildNestedArrayCreateInput(data.parametersOnMapIds)\n\n return graphqlClient\n .request(CREATE_ASSET, {\n input: {\n ...input,\n type,\n assetClass,\n defaultDashboard,\n dashboards,\n labels,\n files,\n parametersOnMap,\n },\n })\n .then(response => {\n const item = response?.data?.data?.item;\n\n return {\n data: sanitizeResource(item),\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from \"graphql-tag\";\nimport omit from \"lodash/omit\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport {\n buildReferenceCreateInput,\n buildReferenceArrayCreateInput,\n buildNestedArrayCreateInput,\n sanitizeResource,\n sanitizeInput,\n} from \"./utils\";\n\n\n\nexport const CREATE_MANY_ASSETS = gql`\n mutation createManyAssets($input:[AssetCreateInput!]! $onConflict: OnConflict) {\n data: Asset {\n data: createMany(input: $input onConflict: $onConflict) {\n count\n }\n }\n }\n`;\n\nexport default (args) => {\n const { data, onConflict } = args;\n\n const input = data.map(item => {\n const input = sanitizeInput(item)\n const type = buildReferenceCreateInput(data.type)\n const assetClass = buildReferenceCreateInput(item.assetClass)\n const defaultDashboard = buildReferenceCreateInput(item.defaultDashboard)\n const dashboards = buildReferenceArrayCreateInput(item.dashboardsIds)\n const labels = buildReferenceArrayCreateInput(item.labelsIds)\n const parametersOnMap = buildNestedArrayCreateInput(item.parametersOnMapIds)\n\n return {\n ...input,\n type,\n assetClass,\n defaultDashboard,\n dashboards,\n labels,\n parametersOnMap,\n }\n });\n\n\n return graphqlClient\n .request(CREATE_MANY_ASSETS, {\n input,\n onConflict\n })\n .then(response => {\n const count = response?.data?.data?.count;\n return {\n data: { count }\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from \"graphql-tag\";\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_ASSET_FRAGMENT } from \"./typeDefs\";\nimport { sanitizeResource } from \"./utils\";\n\n\n\nexport const GET_LIST_ASSETS = gql`\n query getListAssets(\n $filter: AssetFilter\n $sort: [AssetSort!]\n $page: Int\n $perPage: Int\n ) {\n data: Asset {\n data: getList(\n filter: $filter\n sort: $sort\n page: $page\n perPage: $perPage\n ) {\n items {\n ...MultipleAssetFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${MULTIPLE_ASSET_FRAGMENT}\n`;\n\nexport default (args) => {\n const {\n filter,\n pagination: { page, perPage },\n sort: { field, order },\n } = args;\n\n return graphqlClient\n .request(GET_LIST_ASSETS, {\n filter: buildFilter(filter),\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n })\n .then(response => {\n let items = response?.data?.data?.items;\n let pageInfo = response?.data?.data?.pageInfo;\n\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n };\n }).catch(graphqlErrorHandler);\n};\n\nconst buildFilter = (filter) => {\n const { catalog, ...otherFilter } = filter\n const catalogFilter = catalog ? {\n catalog: {\n parentIds: catalog.map(c => c.id)\n }\n } : {}\n\n return { ...catalogFilter, ...otherFilter }\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_ASSET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_ASSETS = gql`\n query getManyAssets($ids: [ID!]!) {\n data: Asset {\n data: getMany(ids: $ids) {\n items { ...MultipleAssetFragment }\n }\n }\n }\n ${MULTIPLE_ASSET_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_ASSETS, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n const data = items.map(sanitizeResource)\n return {\n data\n }\n }).catch(graphqlErrorHandler)\n};","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_ASSET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_ASSETS = gql`\n query getManyReferenceAssets($filter: AssetFilter, $sort: [AssetSort!] $page: Int, $perPage: Int) {\n data: Asset {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...MultipleAssetFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${MULTIPLE_ASSET_FRAGMENT}\n`\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_ASSETS, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler);\n};","import gql from \"graphql-tag\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSET_FRAGMENT } from \"./typeDefs\";\nimport { sanitizeResource } from \"./utils\";\n\n\n\nexport const GET_ONE_ASSET = gql`\n query getOneAsset($where: AssetWhereUniqueInput!) {\n data: Asset {\n data: getOne(where: $where) {\n item { ...SingleAssetFragment }\n }\n }\n }\n ${SINGLE_ASSET_FRAGMENT}\n`;\n\nexport default (args) => {\n const { id } = args;\n\n return graphqlClient.request(GET_ONE_ASSET, {\n where: { id },\n })\n .then(async (response) => {\n const data = sanitizeResource(response?.data?.data?.item)\n return {\n data\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from \"graphql-tag\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSET_FRAGMENT } from \"./typeDefs\";\nimport {\n buildReferenceUpdateInput,\n buildReferenceArrayUpdateInput,\n buildNestedArrayUpdateInput,\n sanitizeResource,\n sanitizeInput,\n} from \"./utils\";\n\n\nexport const UPDATE_ASSET = gql`\n mutation updateAsset(\n $where: AssetWhereUniqueInput!\n $input: AssetUpdateInput!\n ) {\n data: Asset {\n data: update(where: $where, input: $input) {\n item {\n ...SingleAssetFragment\n }\n }\n }\n }\n ${SINGLE_ASSET_FRAGMENT}\n`;\n\nexport default (args) => {\n const { id, data, previousData } = args;\n\n const input = sanitizeInput(data);\n const type = buildReferenceUpdateInput(data.type, previousData.type)\n const assetClass = buildReferenceUpdateInput(data.assetClass, previousData.assetClass);\n const defaultDashboard = buildReferenceUpdateInput(data.defaultDashboard, previousData.defaultDashboard);\n const dashboards = buildReferenceArrayUpdateInput(data.dashboardsIds, previousData.dashboardsIds);\n const labels = buildReferenceArrayUpdateInput(data.labelsIds, previousData.labelsIds);\n const files = buildReferenceArrayUpdateInput(data.filesIds, previousData.filesIds)\n const parametersOnMap = buildNestedArrayUpdateInput(data.parametersOnMapIds)\n\n\n return graphqlClient\n .request(UPDATE_ASSET, {\n where: { id },\n input: {\n ...input,\n type,\n assetClass,\n defaultDashboard,\n dashboards,\n labels,\n files,\n parametersOnMap,\n },\n })\n .then(response => {\n const item = response?.data?.data?.item;\n\n return {\n data: sanitizeResource(item),\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const DELETE_ASSET = gql`\n mutation deleteAsset($where: AssetWhereUniqueInput!) {\n data: Asset {\n data: delete(where: $where) {\n item { ...SingleAssetFragment }\n }\n }\n }\n ${SINGLE_ASSET_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_ASSET, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n};","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const REMOVE_ASSET = gql`\n mutation removeAsset($where: AssetWhereUniqueInput!) {\n data: Asset {\n data: remove(where: $where) {\n item { ...SingleAssetFragment }\n }\n }\n }\n ${SINGLE_ASSET_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(REMOVE_ASSET, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const RESTORE_ASSET = gql`\n mutation restoreAsset($where: AssetWhereUniqueInput!) {\n data: Asset {\n data: restore(where: $where) {\n item { ...SingleAssetFragment }\n }\n }\n }\n ${SINGLE_ASSET_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(RESTORE_ASSET, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const FAVORITE_ASSET = gql`\n mutation favoriteAsset($where: AssetWhereUniqueInput!) {\n data: Asset {\n data: favorite(where: $where) {\n item { ...SingleAssetFragment }\n }\n }\n }\n ${SINGLE_ASSET_FRAGMENT}\n`\n\nexport default (args) => {\n const { where } = args\n\n return graphqlClient.request(FAVORITE_ASSET, {\n where: { id: where },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const UNFAVORITE_ASSET = gql`\n mutation unfavoriteAsset($where: AssetWhereUniqueInput!) {\n data: Asset {\n data: unfavorite(where: $where) {\n item { ...SingleAssetFragment }\n }\n }\n }\n ${SINGLE_ASSET_FRAGMENT}\n`\n\nexport default (args) => {\n const { where } = args\n\n return graphqlClient.request(UNFAVORITE_ASSET, {\n where: { id: where },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import create from './create';\nimport createMany from './createMany';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\nimport deleteMany from './deleteMany';\nimport remove from './remove';\nimport removeMany from './removeMany';\nimport restore from './restore';\nimport restoreMany from './restoreMany';\nimport favorite from './favorite'\nimport unfavorite from './unfavorite'\n\nconst Asset = {\n create,\n createMany,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n deleteMany,\n remove,\n removeMany,\n restore,\n restoreMany,\n favorite,\n unfavorite\n};\n\nexport default Asset","import deleteMutation from './delete';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n deleteMutation({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import remove from './remove';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n remove({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import restore from './restore';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n restore({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import gql from 'graphql-tag';\n\n\nexport const EMBEDED_ASSET_FRAGMENT = gql`\n fragment EmbededAssetFragment on Asset {\n id\n name\n description\n deleted\n }\n`\n\n","import difference from 'lodash/difference';\nimport isEqual from 'lodash/isEqual';\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current.id } } : undefined;\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n return (isConnect) ? { connect } : undefined\n}\n\nexport const buildNestedArrayCreateInput = (current = []) => {\n const set = current.map(id => ({ id }))\n const isSet = Boolean(set.length)\n return (isSet) ? { set } : undefined\n}\n\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : { disconnect: true } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildNestedArrayUpdateInput = (current = []) => {\n const set = current.map(id => ({ id }))\n const isSet = Boolean(set.length)\n return (isSet) ? { set } : undefined\n}\n\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = {\n ...data,\n name: data.deleted ? `(Удален) ${data.name}` : data.name,\n }\n\n return result;\n};\n\nexport const variableAsset = { id: \"${assetId}\", name: '${Объект}', description: null }\n\n\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n assetClass,\n dashboards,\n dashboardsIds,\n defaultDashboard,\n labels,\n labelsIds,\n files,\n filesIds,\n favorite,\n parametersOnMap,\n parametersOnMapIds,\n treeConfiguration,\n tree,\n ...sanitizedInput }) => sanitizedInput","import gql from \"graphql-tag\";\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EMBEDED_ASSET_FRAGMENT } from \"./typeDefs\";\nimport { sanitizeResource, variableAsset } from \"./utils\";\n\n\n\nexport const GET_LIST_ASSETS = gql`\n query getListAssets(\n $filter: AssetFilter\n $sort: [AssetSort!]\n $page: Int\n $perPage: Int\n ) {\n data: Asset {\n data: getList(\n filter: $filter\n sort: $sort\n page: $page\n perPage: $perPage\n ) {\n items {\n ...EmbededAssetFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${EMBEDED_ASSET_FRAGMENT}\n`;\n\n\nexport default (args) => {\n const {\n filter,\n pagination: { page, perPage },\n sort: { field, order },\n } = args;\n\n return graphqlClient\n .request(GET_LIST_ASSETS, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n })\n .then(response => {\n\n const items = response?.data?.data?.items ? [variableAsset, ...response?.data?.data.items] : response?.data?.data?.items;\n const pageInfo = response?.data?.data?.pageInfo ? { ...response?.data?.data.pageInfo, totalItems: response?.data?.data.pageInfo.totalItems + 1 } : response?.data?.data?.pageInfo;\n\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n };\n }).catch(graphqlErrorHandler);\n};","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EMBEDED_ASSET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource, variableAsset } from './utils';\n\n\n\nexport const GET_MANY_ASSETS = gql`\n query getManyAssets($ids: [ID!]!) {\n data: Asset {\n data: getMany(ids: $ids) {\n items { ...EmbededAssetFragment }\n }\n }\n }\n ${EMBEDED_ASSET_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_ASSETS, {\n ids\n }).then(response => {\n\n const items = response?.data?.data?.items ? [variableAsset, ...response?.data?.data.items] : response?.data?.data?.items;\n const a = items.map(sanitizeResource)\n return {\n data: items.map(sanitizeResource)\n };\n }).catch(graphqlErrorHandler)\n};","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EMBEDED_ASSET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource, variableAsset } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_ASSETS = gql`\n query getManyReferenceAssets($filter: AssetFilter, $sort: [AssetSort!] $page: Int, $perPage: Int) {\n data: Asset {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...EmbededAssetFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${EMBEDED_ASSET_FRAGMENT}\n`\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_ASSETS, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items ? [variableAsset, ...response?.data?.data.items] : response?.data?.data?.items;\n const pageInfo = response?.data?.data?.pageInfo ? { ...response?.data?.data.pageInfo, totalItems: response?.data?.data.pageInfo.totalItems + 1 } : response?.data?.data?.pageInfo;\n const a = items.map(sanitizeResource)\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n };\n }).catch(graphqlErrorHandler);\n};","import getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\n\n\nconst AssetWithVariable = {\n getList,\n getMany,\n getManyReference,\n};\n\nexport default AssetWithVariable","import gql from 'graphql-tag'\nimport omit from 'lodash/omit';\nimport { SINGLE_ASSETCLASS_FRAGMENT } from './typeDefs';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport {\n buildReferenceCreateInput,\n buildReferenceArrayCreateInput,\n buildNestedArrayCreateInput,\n sanitizeResource,\n sanitizeInput,\n} from \"./utils\";\n\n\n\n\nexport const CREATE_ASSETCLASS = gql`\n mutation createAssetClass($input: AssetClassCreateInput!) {\n data: AssetClass {\n data: create(input: $input) {\n item { ...SingleAssetClassFragment }\n }\n } \n }\n ${SINGLE_ASSETCLASS_FRAGMENT}\n`\n\nexport default (args) => {\n const { data } = args\n\n const input = sanitizeInput(data)\n const type = buildReferenceCreateInput(data.type)\n const assets = buildReferenceArrayCreateInput(data.assetsIds)\n const dashboards = buildReferenceArrayCreateInput(data.dashboardsIds)\n const defaultDashboard = buildReferenceCreateInput(data.defaultDashboard)\n const parametersOnMap = buildNestedArrayCreateInput(data.parametersOnMapIds)\n const labels = buildReferenceArrayCreateInput(data.labelsIds)\n\n return graphqlClient.request(CREATE_ASSETCLASS, {\n input: {\n ...input,\n type,\n assets,\n dashboards,\n defaultDashboard,\n parametersOnMap,\n labels,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from \"graphql-tag\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport {\n buildReferenceCreateInput,\n buildReferenceArrayCreateInput,\n buildNestedArrayCreateInput,\n sanitizeResource,\n sanitizeInput,\n} from \"./utils\";\n\n\nexport const CREATE_MANY_ASSETCLASSES = gql`\n mutation createManyAssetClasses($input:[AssetClassCreateInput!]! $onConflict: OnConflict) {\n data: AssetClass {\n data: createMany(input: $input onConflict: $onConflict) {\n count\n }\n }\n }\n`;\n\nexport default (args) => {\n const { data, onConflict } = args;\n\n const input = data.map(item => {\n const input = sanitizeInput(item)\n const type = buildReferenceCreateInput(data.type)\n const assets = buildReferenceArrayCreateInput(item.assetsIds)\n const dashboards = buildReferenceArrayCreateInput(item.dashboardsIds)\n const defaultDashboard = buildReferenceCreateInput(item.defaultDashboard)\n const parametersOnMap = buildNestedArrayCreateInput(item.parametersOnMapIds)\n const labels = buildReferenceArrayCreateInput(item.labelsIds)\n\n return {\n ...input,\n type,\n assets,\n dashboards,\n defaultDashboard,\n parametersOnMap,\n labels,\n }\n });\n\n\n return graphqlClient\n .request(CREATE_MANY_ASSETCLASSES, {\n input,\n onConflict\n })\n .then(response => {\n const count = response?.data?.data?.count;\n return {\n data: { count }\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_ASSETCLASS_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_LIST_ASSETCLASSES = gql`\n query getListAssetClasses($filter: AssetClassFilter, $sort: [AssetClassSort!] $page: Int, $perPage: Int) {\n data: AssetClass {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...MultipleAssetClassFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${MULTIPLE_ASSETCLASS_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_ASSETCLASSES, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler);\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_ASSETCLASS_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_ASSETCLASSES = gql`\n query getManyAssetClasses($ids: [ID!]!) {\n data: AssetClass {\n data: getMany(ids: $ids) {\n items { ...MultipleAssetClassFragment }\n }\n }\n }\n ${MULTIPLE_ASSETCLASS_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_ASSETCLASSES, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_ASSETCLASS_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_ASSETCLASSES = gql`\n query getManyReferenceAssetClasses($filter: AssetClassFilter, $sort: [AssetClassSort!] $page: Int, $perPage: Int) {\n data: AssetClass {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...MultipleAssetClassFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${MULTIPLE_ASSETCLASS_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_ASSETCLASSES, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSETCLASS_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_ONE_ASSETCLASS = gql`\n query getOneAssetClass( $where: AssetClassWhereUniqueInput! ) {\n data: AssetClass {\n data: getOne(where: $where) {\n item { ...SingleAssetClassFragment }\n }\n }\n }\n ${SINGLE_ASSETCLASS_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_ASSETCLASS, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport omit from 'lodash/omit';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSETCLASS_FRAGMENT } from './typeDefs';\nimport {\n buildReferenceUpdateInput,\n buildReferenceArrayUpdateInput,\n buildNestedArrayUpdateInput,\n sanitizeResource,\n sanitizeInput,\n} from \"./utils\";\n\n\n\nexport const UPDATE_ASSETCLASS = gql`\n mutation updateAssetClass($where: AssetClassWhereUniqueInput!, $input: AssetClassUpdateInput!) {\n data: AssetClass{\n data: update(where: $where, input: $input) {\n item { ...SingleAssetClassFragment }\n }\n }\n }\n ${SINGLE_ASSETCLASS_FRAGMENT}\n`\n\nexport default (args) => {\n const { id, data, previousData } = args\n\n const input = sanitizeInput(data)\n const type = buildReferenceUpdateInput(data.type, previousData.type)\n const assets = buildReferenceArrayUpdateInput(data.assetsIds, previousData.assetsIds)\n const dashboards = buildReferenceArrayUpdateInput(data.dashboardsIds, previousData.dashboardsIds)\n const defaultDashboard = buildReferenceUpdateInput(data.defaultDashboard, previousData.defaultDashboard)\n const parametersOnMap = buildNestedArrayUpdateInput(data.parametersOnMapIds)\n const labels = buildReferenceArrayUpdateInput(data.labelsIds, previousData.labelsIds);\n\n return graphqlClient.request(UPDATE_ASSETCLASS, {\n where: { id },\n input: {\n ...input,\n type,\n assets,\n dashboards,\n defaultDashboard,\n parametersOnMap,\n labels,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSETCLASS_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const DELETE_ASSETCLASS = gql`\n mutation deleteAssetClass($where: AssetClassWhereUniqueInput!) {\n data: AssetClass {\n data: delete(where: $where) {\n item { ...SingleAssetClassFragment }\n }\n }\n }\n ${SINGLE_ASSETCLASS_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_ASSETCLASS, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSETCLASS_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const REMOVE_ASSETCLASS = gql`\n mutation removeAssetClass($where: AssetClassWhereUniqueInput!) {\n data: AssetClass {\n data: remove(where: $where) {\n item { ...SingleAssetClassFragment }\n }\n }\n }\n ${SINGLE_ASSETCLASS_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(REMOVE_ASSETCLASS, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSETCLASS_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const RESTORE_ASSETCLASS = gql`\n mutation restoreAssetClass($where: AssetClassWhereUniqueInput!) {\n data: AssetClass {\n data: restore(where: $where) {\n item { ...SingleAssetClassFragment }\n }\n }\n }\n ${SINGLE_ASSETCLASS_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(RESTORE_ASSETCLASS, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSETCLASS_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const FAVORITE_ASSETCLASS = gql`\n mutation favoriteAssetClass($where: AssetClassWhereUniqueInput!) {\n data: AssetClass {\n data: favorite(where: $where) {\n item { ...SingleAssetClassFragment }\n }\n }\n }\n ${SINGLE_ASSETCLASS_FRAGMENT}\n`\n\nexport default (args) => {\n const { where } = args\n\n return graphqlClient.request(FAVORITE_ASSETCLASS, {\n where: { id: where },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_ASSETCLASS_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const UNFAVORITE_ASSETCLASS = gql`\n mutation unfavoriteAssetClass($where: AssetClassWhereUniqueInput!) {\n data: AssetClass {\n data: unfavorite(where: $where) {\n item { ...SingleAssetClassFragment }\n }\n }\n }\n ${SINGLE_ASSETCLASS_FRAGMENT}\n`\n\nexport default (args) => {\n const { where } = args\n\n return graphqlClient.request(UNFAVORITE_ASSETCLASS, {\n where: { id: where },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import create from './create';\nimport createMany from './createMany';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\nimport deleteMany from './deleteMany';\nimport remove from './remove';\nimport removeMany from './removeMany';\nimport restore from './restore';\nimport restoreMany from './restoreMany';\nimport deploy from './deploy';\nimport favorite from './favorite'\nimport unfavorite from './unfavorite'\n\n\n\nconst AssetClass = {\n create,\n createMany,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n deleteMany,\n remove,\n removeMany,\n restore,\n restoreMany,\n deploy,\n favorite,\n unfavorite\n};\n\nexport default AssetClass","import deleteMutation from './delete';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n deleteMutation({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import remove from './remove';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n remove({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import restore from './restore';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n restore({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import gql from 'graphql-tag';\n\n\nexport const SINGLE_ASSET_TYPE_FRAGMENT = gql`\n fragment SingleAssetTypeFragment on AssetType {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n assets { id name description }\n }\n`\n\nexport const MULTIPLE_ASSET_TYPE_FRAGMENT = gql`\n fragment MultipleAssetTypeFragment on AssetType {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n assets { id name description }\n }\n`\n\nexport const CREATE_ASSET_TYPE = gql`\n mutation createAssetType($input: AssetTypeCreateInput!) {\n data: createAssetType(input: $input) {\n data {\n ...SingleAssetTypeFragment\n }\n }\n }\n ${SINGLE_ASSET_TYPE_FRAGMENT}\n`\n\nexport const CREATE_MANY_ASSET_TYPES = gql`\n mutation createManyAssetTypes($input: [AssetTypeCreateInput!]!, $onConflict: OnConflict) {\n data: createManyAssetTypes(input: $input, onConflict: $onConflict) {\n count\n }\n }\n`\n\nexport const DELETE_ASSET_TYPE = gql`\n mutation deleteAssetType($where: AssetTypeWhereUniqueInput!) {\n data: deleteAssetType(where: $where) {\n data {\n ...SingleAssetTypeFragment\n }\n }\n }\n ${SINGLE_ASSET_TYPE_FRAGMENT}\n`\n\nexport const GET_LIST_ASSET_TYPES = gql`\n query getListAssetTypes($filter: AssetTypeFilter, $sort: [AssetTypeSort!], $page: Int, $perPage: Int) {\n data: getListAssetTypes(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n data {\n ...MultipleAssetTypeFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${MULTIPLE_ASSET_TYPE_FRAGMENT}\n`\n\nexport const GET_MANY_ASSET_TYPES = gql`\n query getManyAssetTypes($ids: [ID!]!) {\n data: getManyAssetTypes(ids: $ids) {\n data {\n ...MultipleAssetTypeFragment\n }\n }\n }\n ${MULTIPLE_ASSET_TYPE_FRAGMENT}\n`\n\nexport const GET_MANY_REFERENCE_ASSET_TYPES = gql`\n query getManyReferenceAssetTypes($filter: AssetTypeFilter, $sort: [AssetTypeSort!], $page: Int, $perPage: Int) {\n data: getListAssetTypes(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n data {\n ...MultipleAssetTypeFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n ${MULTIPLE_ASSET_TYPE_FRAGMENT}\n`\n\nexport const GET_ONE_ASSET_TYPE = gql`\n query getOneAssetType($where: AssetTypeWhereUniqueInput!) {\n data: getOneAssetType(where: $where) {\n data {\n ...SingleAssetTypeFragment\n }\n }\n }\n ${SINGLE_ASSET_TYPE_FRAGMENT}\n`\n\nexport const REMOVE_ASSET_TYPE = gql`\n mutation removeAssetType($where: AssetTypeWhereUniqueInput!) {\n data: removeAssetType(where: $where) {\n data { \n ...SingleAssetTypeFragment\n }\n }\n }\n ${SINGLE_ASSET_TYPE_FRAGMENT}\n`\n\nexport const RESTORE_ASSET_TYPE = gql`\n mutation restoreAssetType($where: AssetTypeWhereUniqueInput!) {\n data: restoreAssetType(where: $where) {\n data { \n ...SingleAssetTypeFragment\n }\n }\n }\n ${SINGLE_ASSET_TYPE_FRAGMENT}\n`\n\nexport const UPDATE_ASSET_TYPE = gql`\n mutation updateAssetType($where: AssetTypeWhereUniqueInput!, $input: AssetTypeUpdateInput!) {\n data: updateAssetType(where: $where, input: $input) {\n data {\n ...SingleAssetTypeFragment\n }\n }\n }\n ${SINGLE_ASSET_TYPE_FRAGMENT}\n`","import difference from 'lodash/difference';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : { disconnect: true } : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildNestedArrayCreateInput = (current = []) => {\n const set = current.map(id => ({ id }))\n const isSet = Boolean(set.length)\n return (isSet) ? { set } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\n\nexport const parseData = (data) => {\n if (!data) return null\n\n return {\n ...data,\n name: data.deleted ? `(Удален) ${data.name}` : data.name,\n assetsIds: data.assets && data.assets.map(({ id }) => id),\n classesIds: data.classes && data.classes.map(({ id }) => id),\n }\n}\n\nexport const formatInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n assets,\n assetsIds,\n classes,\n classesIds,\n ...sanitizedInput }) => sanitizedInput","import graphqlClient from '../graphqlClient';\nimport { CREATE_ASSET_TYPE } from './typeDefs';\nimport { buildReferenceArrayCreateInput, parseData, formatInput } from './utils';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\n\n\n\nconst create = (args) => {\n const { data } = args\n const input = {\n ...formatInput(data),\n assets: buildReferenceArrayCreateInput(data.assetsIds),\n classes: buildReferenceArrayCreateInput(data.classesIds),\n }\n\n return graphqlClient\n .request(CREATE_ASSET_TYPE, {\n input\n })\n .then(response => {\n const data = parseData(response.data?.data)\n return {\n data,\n }\n })\n .catch(graphqlErrorHandler);\n}\n\nexport default create","import graphqlClient from \"../graphqlClient\";\nimport { CREATE_MANY_ASSET_TYPES } from './typeDefs';\nimport { buildReferenceArrayCreateInput, formatInput } from \"./utils\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\n\n\nconst createMany = (args) => {\n const { data, onConflict } = args;\n\n const input = data.map(item => {\n return {\n ...formatInput(item),\n assets: buildReferenceArrayCreateInput(item.assetsIds),\n classes: buildReferenceArrayCreateInput(item.classesIds),\n }\n });\n\n return graphqlClient\n .request(CREATE_MANY_ASSET_TYPES, {\n input,\n onConflict\n })\n .then(response => {\n const count = response.data?.count;\n return {\n data: { count }\n };\n })\n .catch(graphqlErrorHandler);\n};\n\n\nexport default createMany","import graphqlClient from '../graphqlClient';\nimport { GET_LIST_ASSET_TYPES } from './typeDefs';\nimport { parseData } from './utils';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\n\n\n\nconst getList = (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n const sort = [{ [field]: order.toLowerCase() }]\n\n return graphqlClient\n .request(GET_LIST_ASSET_TYPES, {\n filter,\n sort,\n page,\n perPage,\n })\n .then(response => {\n const data = response.data?.data.map(parseData)\n const total = response.data?.pageInfo?.totalItems\n return {\n data,\n total,\n }\n })\n .catch(graphqlErrorHandler);\n}\n\n\nexport default getList","import graphqlClient from '../graphqlClient';\nimport { GET_MANY_ASSET_TYPES } from './typeDefs';\nimport { parseData } from './utils';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\n\n\nconst getMany = (args) => {\n const { ids } = args;\n\n return graphqlClient\n .request(GET_MANY_ASSET_TYPES, {\n ids\n })\n .then(response => {\n const data = response.data?.data.map(parseData)\n return {\n data,\n }\n })\n .catch(graphqlErrorHandler);\n}\n\nexport default getMany","import set from 'lodash/set';\nimport graphqlClient from '../graphqlClient';\nimport { GET_MANY_REFERENCE_ASSET_TYPES } from './typeDefs';\nimport { parseData } from './utils';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\n\n\nconst getManyReference = (args) => {\n const { filter: filterOverride, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n const filter = {\n ...filterOverride,\n ...set({}, target, id)\n }\n const sort = [{ [field]: order.toLowerCase() }]\n\n return graphqlClient.request(GET_MANY_REFERENCE_ASSET_TYPES, {\n filter,\n sort,\n page,\n perPage,\n })\n .then(response => {\n const data = response.data?.data.map(parseData)\n const total = response.data?.pageInfo?.totalItems\n return {\n data,\n total,\n }\n })\n .catch(graphqlErrorHandler);\n}\n\nexport default getManyReference","import graphqlClient from '../graphqlClient';\nimport { GET_ONE_ASSET_TYPE } from './typeDefs';\nimport { parseData } from './utils';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\n\n\n\nconst getOne = (args) => {\n const { id } = args\n const where = { id }\n\n return graphqlClient\n .request(GET_ONE_ASSET_TYPE, {\n where,\n })\n .then(response => {\n const data = parseData(response.data?.data)\n return {\n data,\n }\n })\n .catch(graphqlErrorHandler);\n}\n\nexport default getOne","import graphqlClient from '../graphqlClient';\nimport { UPDATE_ASSET_TYPE } from './typeDefs';\nimport { buildReferenceArrayUpdateInput, parseData, formatInput } from './utils';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\n\n\nconst update = (args) => {\n const { id, data, previousData } = args\n const where = { id }\n const input = {\n ...formatInput(data),\n assets: buildReferenceArrayUpdateInput(data.assetsIds, previousData.assetsIds),\n classes: buildReferenceArrayUpdateInput(data.classesIds, previousData.classesIds),\n }\n\n return graphqlClient\n .request(UPDATE_ASSET_TYPE, {\n where,\n input\n })\n .then(response => {\n const data = parseData(response.data?.data)\n return {\n data,\n }\n })\n .catch(graphqlErrorHandler);\n}\n\nexport default update","import graphqlClient from '../graphqlClient';\nimport { DELETE_ASSET_TYPE } from './typeDefs';\nimport { parseData } from './utils';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\n\n\nconst _delete = (args) => {\n const { id } = args\n const where = { id }\n\n return graphqlClient\n .request(DELETE_ASSET_TYPE, {\n where,\n })\n .then(response => {\n const data = parseData(response.data?.data)\n return {\n data,\n }\n })\n .catch(graphqlErrorHandler);\n}\n\nexport default _delete","import deleteMutation from './delete';\n\n\n\nconst deleteMany = (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n deleteMutation({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};\n\nexport default deleteMany","import graphqlClient from '../graphqlClient';\nimport { REMOVE_ASSET_TYPE } from './typeDefs';\nimport { parseData } from './utils';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\n\nconst remove = (args) => {\n const { id } = args\n const where = { id }\n\n return graphqlClient\n .request(REMOVE_ASSET_TYPE, {\n where,\n })\n .then(response => {\n const data = parseData(response.data?.data)\n return {\n data,\n }\n })\n .catch(graphqlErrorHandler);\n}\n\nexport default remove","import remove from './remove';\n\n\n\nconst removeMany = (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n remove({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};\n\nexport default removeMany","import graphqlClient from '../graphqlClient';\nimport { RESTORE_ASSET_TYPE } from './typeDefs';\nimport { parseData } from './utils';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\n\nconst restore = (args) => {\n const { id } = args\n const where = { id }\n\n return graphqlClient\n .request(RESTORE_ASSET_TYPE, {\n where,\n })\n .then(response => {\n const data = parseData(response.data?.data)\n return {\n data,\n }\n })\n .catch(graphqlErrorHandler);\n}\n\nexport default restore","import restore from './restore';\n\n\n\nconst restoreMany = (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n restore({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};\n\nexport default restoreMany","import create from './create';\nimport createMany from './createMany';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\nimport deleteMany from './deleteMany';\nimport remove from './remove';\nimport removeMany from './removeMany';\nimport restore from './restore';\nimport restoreMany from './restoreMany';\n\n\nconst AssetClass = {\n create,\n createMany,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n deleteMany,\n remove,\n removeMany,\n restore,\n restoreMany,\n};\n\nexport default AssetClass","import gql from 'graphql-tag';\n\n\nexport const ASSETDATAGRID_FRAGMENT = gql`\n fragment AssetDatagridFragment on Asset {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n type { id name }\n assetClass { id name deleted }\n defaultDashboard { id }\n tags: tagsByDatagrid {\n id\n value\n writeValue\n parameter {id}\n type\n quality\n timestamp\n timestampSrv\n utcOffset\n }\n }\n`\n\n","import difference from 'lodash/difference';\nimport isEqual from 'lodash/isEqual';\nimport isNil from 'lodash/isNil';\nimport isArray from 'lodash/isArray';\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current?.id } } : undefined;\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n return (isConnect) ? { connect } : undefined\n}\n\nexport const buildNestedArrayCreateInput = (current = []) => {\n const set = current.map(id => ({ id }))\n const isSet = Boolean(set.length)\n return (isSet) ? { set } : undefined\n}\n\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : { disconnect: true } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildNestedArrayUpdateInput = (current = []) => {\n const set = current.map(id => ({ id }))\n const isSet = Boolean(set.length)\n return (isSet) ? { set } : undefined\n}\n\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = {\n ...data,\n name: data.deleted ? `(Удален) ${data.name}` : data.name,\n dashboardsIds: data.dashboards && data.dashboards.map(({ id }) => id),\n filesIds: data.files && data.files.map(({ id }) => id),\n labelsIds: data.labels && data.labels.map(({ id }) => id),\n parametersOnMapIds: data.parametersOnMap && data.parametersOnMap.map(({ id }) => id),\n }\n\n return result;\n};\n\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n assetClass,\n dashboards,\n dashboardsIds,\n defaultDashboard,\n labels,\n labelsIds,\n files,\n filesIds,\n favorite,\n parametersOnMap,\n parametersOnMapIds,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag'\nimport keyBy from 'lodash/keyBy';\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ASSETDATAGRID_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from \"./utils\";\n\n\n\nexport const GET_LIST_ASSETSDATAGRID = gql`\n query getListAssetsDatagrid($filter: AssetFilter, $sort: [AssetSort!], $page: Int, $perPage: Int, $parameters: [ParameterWhereUniqueInput !]) {\n data: Asset {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage, parameters: $parameters) {\n items { ...AssetDatagridFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${ASSETDATAGRID_FRAGMENT}\n`\n\n\nexport default (params) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, parameters } = params;\n\n\n return graphqlClient.request(GET_LIST_ASSETSDATAGRID, {\n filter: buildFilter(filter),\n sort: buildSort(field, order),\n page,\n perPage,\n parameters: buildParameters(parameters)\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n\n return {\n data: items.map(({ tags, ...other }) => ({ ...sanitizeResource(other), ...keyBy(tags, \"parameter.id\") })),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n};\n\nconst buildFilter = (filter) => {\n const { tags, catalog, ...otherFilter } = filter\n const tagsFilter = tags ? {\n tags: Object.keys(tags).map(key => {\n const tag = tags[key]\n return { id: key, ...tag }\n })\n } : {}\n\n const catalogFilter = catalog ? {\n catalog: {\n parentIds: catalog.map(c => c.id)\n }\n } : {}\n\n return { ...tagsFilter, ...catalogFilter, ...otherFilter }\n}\n\nconst buildSort = (field, order) => {\n const fieldArray = field.split('.')\n const sort = fieldArray[0] === 'tags' ? [{ tags: { id: fieldArray[1], value: order.toLowerCase() } }] : [set({}, field, order.toLowerCase())]\n return sort\n}\n\nconst buildParameters = (parameters) => {\n return parameters.map(({ id }) => ({ id }))\n}\n","import gql from 'graphql-tag'\nimport keyBy from 'lodash/keyBy';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ASSETDATAGRID_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from \"./utils\";\n\n\n\nexport const GET_MANY_ASSETSDATAGRID = gql`\n query getManyAssetsDatagrid($ids: [ID!]! $parameters: [ParameterWhereUniqueInput!]) {\n data: Asset {\n data: getMany(ids: $ids, parameters: $parameters) {\n items { ...AssetDatagridFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${ASSETDATAGRID_FRAGMENT}\n`\n\n\nexport default (params) => {\n const { ids, parameters } = params;\n\n\n return graphqlClient.request(GET_MANY_ASSETSDATAGRID, {\n ids,\n parameters: buildParameters(parameters)\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n\n return {\n data: items.map(({ tags, ...other }) => ({ ...sanitizeResource(other), ...keyBy(tags, \"parameter.id\") })),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n};\n\nconst buildFilter = (filter) => {\n const { tags, catalog, ...otherFilter } = filter\n const tagsFilter = tags ? {\n tags: Object.keys(tags).map(key => {\n const tag = tags[key]\n return { id: key, ...tag }\n })\n } : {}\n\n const catalogFilter = catalog ? {\n catalog: {\n parentIds: catalog.map(c => c.id)\n }\n } : {}\n\n return { ...tagsFilter, ...catalogFilter, ...otherFilter }\n}\n\nconst buildSort = (field, order) => {\n const fieldArray = field.split('.')\n const sort = fieldArray[0] === 'tags' ? [{ tags: { id: fieldArray[1], value: order.toLowerCase() } }] : [{ [field]: order.toLowerCase() }]\n return sort\n}\n\nconst buildParameters = (parameters) => {\n return parameters.map(({ id }) => ({ id }))\n}\n","import getList from './getList';\nimport getMany from './getMany';\n\n\n\nconst AssetDatagrid = {\n getList,\n getMany,\n};\n\n\n\nexport default AssetDatagrid","import gql from 'graphql-tag';\n\n\nexport const ASSETMAP_FRAGMENT = gql`\n fragment AssetMapFragment on Asset {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n address\n icon\n type { id name }\n assetClass { id name deleted }\n defaultDashboard { id }\n dashboards { id name deleted }\n parametersOnMap { id }\n labels { id name deleted color }\n files { id name deleted }\n tagsOnMap {\n id\n value\n writeValue\n parameter {id name unit {id name} type, display, format}\n type\n quality\n timestamp\n timestampSrv\n utcOffset\n }\n }\n`","import gql from 'graphql-tag'\nimport keyBy from 'lodash/keyBy';\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { ASSETMAP_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from \"./utils\";\n\n\nexport const GET_LIST_ASSETMAP = gql`\n query getListAssetsMap($filter: AssetFilter, $sort: [AssetSort!], $page: Int, $perPage: Int) {\n data: Asset {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...AssetMapFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${ASSETMAP_FRAGMENT}\n`\n\n\nexport default (params) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, parameters } = params;\n\n return graphqlClient.request(GET_LIST_ASSETMAP, {\n filter: buildFilter(filter),\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n\n return {\n data: items.map(item => ({ ...sanitizeResource(item), ...keyBy(item.tagsOnMap, \"parameter.id\") })),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n};\n\n\nconst buildFilter = (filter) => {\n const { tags, catalog, ...otherFilter } = filter\n const tagsFilter = tags ? {\n tags: Object.keys(tags).map(key => {\n const tag = tags[key]\n return { id: key, ...tag }\n })\n } : {}\n\n const catalogFilter = catalog ? {\n catalog: {\n parentIds: catalog.map(c => c.id)\n }\n } : {}\n\n return { ...tagsFilter, ...catalogFilter, ...otherFilter }\n}","import getList from './getList';\n\n\n\nconst AssetMap = {\n getList,\n};\n\n\n\nexport default AssetMap","import difference from 'lodash/difference';\nimport isEqual from 'lodash/isEqual';\nimport isNil from 'lodash/isNil';\nimport isArray from 'lodash/isArray';\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current?.id } } : undefined;\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n return (isConnect) ? { connect } : undefined\n}\n\nexport const buildNestedArrayCreateInput = (current = []) => {\n const set = current.map(id => ({ id }))\n const isSet = Boolean(set.length)\n return (isSet) ? { set } : undefined\n}\n\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : { disconnect: true } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildNestedArrayUpdateInput = (current = []) => {\n const set = current.map(id => ({ id }))\n const isSet = Boolean(set.length)\n return (isSet) ? { set } : undefined\n}\n\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = {\n ...data,\n name: data.deleted ? `(Удален) ${data.name}` : data.name,\n dashboardsIds: data.dashboards && data.dashboards.map(({ id }) => id),\n filesIds: data.files && data.files.map(({ id }) => id),\n labelsIds: data.labels && data.labels.map(({ id }) => id),\n parametersOnMapIds: data.parametersOnMap && data.parametersOnMap.map(({ id }) => id),\n }\n\n return result;\n};\n\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n assetClass,\n dashboards,\n dashboardsIds,\n defaultDashboard,\n labels,\n labelsIds,\n files,\n filesIds,\n favorite,\n parametersOnMap,\n parametersOnMapIds,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag';\n\n\nexport const CATALOG_WITH_CHIDREN_FRAGMENT = gql`\n fragment CatalogWithChildrenFragment on CatalogWithChildren {\n id\n name\n type\n resource {\n id\n typename\n }\n children {\n id\n type\n name\n resource {\n id\n }\n }\n }\n`\n\nexport const CATALOG_FRAGMENT = gql`\n fragment CatalogFragment on Catalog {\n id\n name\n type\n resource {\n id\n typename\n }\n }\n`","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { CATALOG_WITH_CHIDREN_FRAGMENT } from './typeDefs';\nimport { orderBy } from 'lodash'\n\nexport const GET_ROOT_CATALOG = gql`\n query getRootCatalogs($filter: CatalogFilter) {\n data: Catalog {\n data: getRootCatalogs(filter: $filter) { ...CatalogWithChildrenFragment } \n }\n }\n ${CATALOG_WITH_CHIDREN_FRAGMENT}\n`\n\nexport default (args) => {\n\n const { filter } = args;\n\n return graphqlClient.request(GET_ROOT_CATALOG, {\n filter,\n }).then(response => {\n //const data = (response?.data?.data || []);\n const data = orderBy(response?.data?.data || [], ['type', 'name'], ['desc', 'asc'])\n .map(node => ({ ...node, children : orderBy(node.children || [], ['type', 'name'], ['desc', 'asc']) }));\n return {\n data\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { CATALOG_WITH_CHIDREN_FRAGMENT } from './typeDefs';\nimport { orderBy } from 'lodash'\n\nexport const GET_CHILDS_CATALOG = gql`\n query getChildCatalogs($parent: CatalogWhereUniqueInput!) {\n data: Catalog {\n data: getChildCatalogs(parent : $parent) { ...CatalogWithChildrenFragment } \n }\n }\n ${CATALOG_WITH_CHIDREN_FRAGMENT}\n`\n\nexport default (args) => {\n\n const { parentId } = args;\n\n return graphqlClient.request(GET_CHILDS_CATALOG, {\n parent: { id: parentId },\n }).then(response => {\n //const data = (response?.data?.data || []);\n const data = orderBy(response.data?.data || [], ['type', 'name'], ['desc', 'asc'])\n .map(node => ({ ...node, children : orderBy(node.children || [], ['type', 'name'], ['desc', 'asc']) }));\n return {\n data\n }\n }).catch(graphqlErrorHandler);\n}\n","import gql from 'graphql-tag'\nimport graphqlClient from '../graphqlClient';\nimport { CATALOG_FRAGMENT } from './typeDefs';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\nexport const GET_ONE_CATALOG = gql`\n query getOne($where: CatalogWhereUniqueInput!) {\n data: Catalog {\n data: getOne(where: $where) {\n item { ...CatalogFragment } \n } \n }\n }\n ${CATALOG_FRAGMENT}\n`\n\nexport default (args) => {\n\n const variables = {\n where: args\n }\n\n return graphqlClient.request(GET_ONE_CATALOG, variables).then(response => {\n const data = (response?.data?.data?.item || {})\n\n return {\n data\n }\n }).catch(graphqlErrorHandler);\n}","import getRootNodes from './getRootNodes';\nimport getChildNodes from './getChildNodes';\nimport getOne from './getOne';\n\nconst Catalog = {\n getRootNodes,\n getChildNodes,\n getOne,\n};\n\nexport default Catalog\n","import gql from 'graphql-tag';\n\n\n\nexport const SINGLE_DASHBOARD_FRAGMENT = gql`\n fragment SingleDashboardFragment on Dashboard {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n variables\n links {\n type\n name\n url\n }\n widgetsOnDashboard {\n id\n name\n description\n widget {\n id\n name\n url\n }\n properties\n layouts\n grid\n }\n assets { id name deleted }\n assetClasses { id name deleted }\n labels { id name deleted color }\n favorite\n }\n`\n//для корректной работы экспортера\\импортера пришлось добавить в запрос списка widgetsOnDashboard...подумать как избежать\nexport const MULTIPLE_DASHBOARD_FRAGMENT = gql`\n fragment MultipleDashboardFragment on Dashboard {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n variables\n links {\n type\n name\n url\n }\n widgetsOnDashboard {\n id\n name\n description\n widget {\n id\n name\n url\n }\n properties\n layouts\n grid\n }\n assets { id name deleted }\n assetClasses { id name deleted }\n labels { id name deleted color }\n favorite\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport intersection from 'lodash/intersection';\n\nimport omit from 'lodash/omit';\nimport keyBy from 'lodash/keyBy';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current?.id } } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildNestedArrayCreateInput = (current = []) => {\n const create = current\n const isCreate = Boolean(create.length)\n\n return (isCreate) ? {\n create: create\n } : undefined\n}\n\nexport const buildNestedArrayUpdateInput = (current = [], previous = []) => {\n const currentIds = current.map(({ id }) => id)\n const previousIds = previous.map(({ id }) => id)\n const currentMap = keyBy(current, \"id\")\n const previousMap = keyBy(previous, \"id\")\n const create = current.filter(({ id }) => id == null)\n const update = intersection(currentIds, previousIds).reduce((acc, id) => isEqual(currentMap[id], previousMap[id]) ? acc : [...acc, { where: { id }, data: currentMap[id] }], [])\n const _delete = difference(previousIds, currentIds).map(id => ({ id }))\n const isSomeOperation = Boolean(create.length) || Boolean(update.length) || Boolean(_delete.length)\n\n return (isSomeOperation) ? {\n create: Boolean(create.length) ? create : undefined,\n update: Boolean(update.length) ? update : undefined,\n delete: Boolean(_delete.length) ? _delete : undefined,\n } : undefined\n}\n\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = {\n ...data,\n name: data.deleted ? `(Удален) ${data.name}` : data.name,\n assetClassesIds: data.assetClasses && data.assetClasses.map(({ id }) => id),\n assetsIds: data.assets && data.assets.map(({ id }) => id),\n labelsIds: data.labels && data.labels.map(({ id }) => id),\n }\n\n return result;\n};\n\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n links,\n linksIds,\n variables,\n variablesIds,\n assets,\n assetsIds,\n assetClasses,\n assetClassesIds,\n widgetsOnDashboard,\n widgetsOnDashboardIds,\n labels,\n labelsIds,\n favorite,\n ...sanitizedInput }) => sanitizedInput","import omit from 'lodash/omit';\nimport gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_DASHBOARD_FRAGMENT } from './typeDefs';\nimport { buildReferenceArrayCreateInput, buildNestedArrayCreateInput, buildReferenceCreateInput, sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const CREATE_DASHBOARD = gql`\n mutation createDashboard($input: DashboardCreateInput!) {\n data: Dashboard {\n data: create(input: $input) {\n item { ...SingleDashboardFragment }\n }\n } \n }\n ${SINGLE_DASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n\n const { data } = args\n\n const input = sanitizeInput(data)\n const assets = buildReferenceArrayCreateInput(data.assetsIds)\n const assetClasses = buildReferenceArrayCreateInput(data.assetClassesIds)\n const widgetsOnDashboard = buildNestedArrayCreateInput(data.widgetsOnDashboard ? data.widgetsOnDashboard.map(widgetOnDashboard => {\n return {\n ...omit(widgetOnDashboard, \"id\"),\n widget: buildReferenceCreateInput(widgetOnDashboard.widget)\n }\n }) : undefined)\n const links = data.links ? data.links.filter(Boolean) : data.links\n const variables = data.variables ? data.variables.filter(Boolean) : data.variables\n const labels = buildReferenceArrayCreateInput(data.labelsIds)\n\n return graphqlClient.request(CREATE_DASHBOARD, {\n input: {\n ...input,\n assets,\n assetClasses,\n widgetsOnDashboard,\n links,\n variables,\n labels,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n\n}\n","import omit from 'lodash/omit';\nimport gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { buildReferenceArrayCreateInput, buildNestedArrayCreateInput, buildReferenceCreateInput, sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const CREATE_MANY_DASHBOARDS = gql`\n mutation createManyDashboards($input:[DashboardCreateInput!]! $onConflict: OnConflict) {\n data: Dashboard {\n data: createMany(input: $input onConflict: $onConflict) {\n count\n }\n }\n }\n`;\n\nexport default (args) => {\n const { data, onConflict } = args;\n\n const input = data.map(item => {\n const input = sanitizeInput(item)\n const assets = buildReferenceArrayCreateInput(item.assetsIds)\n const assetClasses = buildReferenceArrayCreateInput(item.assetClassesIds)\n const widgetsOnDashboard = buildNestedArrayCreateInput(item.widgetsOnDashboard ? item.widgetsOnDashboard.map(widgetOnDashboard => {\n return {\n ...onConflict === \"DOUPDATE\" ? widgetOnDashboard : omit(widgetOnDashboard, \"id\"),\n widget: buildReferenceCreateInput(widgetOnDashboard.widget)\n }\n }) : undefined)\n const links = item.links ? item.links.filter(Boolean) : item.links\n const variables = item.variables ? item.variables.filter(Boolean) : item.variables\n const labels = buildReferenceArrayCreateInput(item.labelsIds)\n\n return {\n ...input,\n assets,\n assetClasses,\n widgetsOnDashboard,\n links,\n variables,\n labels\n }\n });\n\n\n return graphqlClient\n .request(CREATE_MANY_DASHBOARDS, {\n input,\n onConflict\n })\n .then(response => {\n const count = response?.data?.data?.count;\n return {\n data: { count }\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_DASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_LIST_DASHBOARDS = gql`\n query getListDashboards($filter: DashboardFilter, $sort: [DashboardSort!] $page: Int, $perPage: Int) {\n data: Dashboard {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...MultipleDashboardFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${MULTIPLE_DASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_DASHBOARDS, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_DASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_DASHBOARDS = gql`\n query getManyDashboards($ids: [ID!]!) {\n data: Dashboard {\n data: getMany(ids: $ids) {\n items { ...MultipleDashboardFragment }\n }\n }\n }\n ${MULTIPLE_DASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_DASHBOARDS, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_DASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_DASHBOARDS = gql`\n query getManyReferenceDashboards($filter: DashboardFilter, $sort: [DashboardSort!] $page: Int, $perPage: Int) {\n data: Dashboard {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...MultipleDashboardFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${MULTIPLE_DASHBOARD_FRAGMENT}\n`\n\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_DASHBOARDS, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_DASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_ONE_DASHBOARD = gql`\n query getOneDashboard( $where: DashboardWhereUniqueInput! ) {\n data: Dashboard {\n data: getOne(where: $where) {\n item { ...SingleDashboardFragment }\n }\n }\n }\n ${SINGLE_DASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_DASHBOARD, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_DASHBOARD_FRAGMENT } from './typeDefs';\nimport { buildReferenceArrayUpdateInput, buildNestedArrayUpdateInput, sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const UPDATE_DASHBOARD = gql`\n mutation updateDashboard($where: DashboardWhereUniqueInput!, $input: DashboardUpdateInput!) {\n data: Dashboard{\n data: update(where: $where, input: $input) {\n item { ...SingleDashboardFragment }\n }\n }\n }\n ${SINGLE_DASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { id, data, previousData } = args\n\n const input = sanitizeInput(data)\n const assets = buildReferenceArrayUpdateInput(data.assetsIds, previousData.assetsIds)\n const assetClasses = buildReferenceArrayUpdateInput(data.assetClassesIds, previousData.assetClassesIds)\n const widgetsOnDashboard = buildNestedArrayUpdateInput(data.widgetsOnDashboard, previousData.widgetsOnDashboard)\n const links = data.links ? data.links.filter(Boolean) : data.links\n const variables = data.variables ? data.variables.filter(Boolean) : data.variables\n const labels = buildReferenceArrayUpdateInput(data.labelsIds, previousData.labelsIds);\n\n return graphqlClient.request(UPDATE_DASHBOARD, {\n where: { id },\n input: {\n ...input,\n assets,\n assetClasses,\n widgetsOnDashboard,\n links,\n variables,\n labels,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_DASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const DELETE_DASHBOARD = gql`\n mutation deleteDashboard($where: DashboardWhereUniqueInput!) {\n data: Dashboard {\n data: delete(where: $where) {\n item { ...SingleDashboardFragment }\n }\n }\n }\n ${SINGLE_DASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_DASHBOARD, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_DASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const REMOVE_DASHBOARD = gql`\n mutation removeDashboard($where: DashboardWhereUniqueInput!) {\n data: Dashboard {\n data: remove(where: $where) {\n item { ...SingleDashboardFragment }\n }\n }\n }\n ${SINGLE_DASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(REMOVE_DASHBOARD, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_DASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const RESTORE_DASHBOARD = gql`\n mutation restoreDashboard($where: DashboardWhereUniqueInput!) {\n data: Dashboard {\n data: restore(where: $where) {\n item { ...SingleDashboardFragment }\n }\n }\n }\n ${SINGLE_DASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(RESTORE_DASHBOARD, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\n\n\n\nexport const GET_ENUMS = gql`\n query getEnums($name: String!) {\n data: __type(name: $name) {\n name\n enumValues{\n name\n description\n } \n }\n }\n`\n\nexport default (args) => {\n const { name } = args\n\n return graphqlClient.request(GET_ENUMS, {\n name\n }).then(response => {\n const items = response?.data?.enumValues\n\n return {\n data: items,\n }\n })\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_DASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const FAVORITE_DASHBOARD = gql`\n mutation favoriteDashboard($where: DashboardWhereUniqueInput!) {\n data: Dashboard {\n data: favorite(where: $where) {\n item { ...SingleDashboardFragment }\n }\n }\n }\n ${SINGLE_DASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { where } = args\n\n return graphqlClient.request(FAVORITE_DASHBOARD, {\n where: { id: where },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_DASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const UNFAVORITE_DASHBOARD = gql`\n mutation unfavoriteDashboard($where: DashboardWhereUniqueInput!) {\n data: Dashboard {\n data: unfavorite(where: $where) {\n item { ...SingleDashboardFragment }\n }\n }\n }\n ${SINGLE_DASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { where } = args\n\n return graphqlClient.request(UNFAVORITE_DASHBOARD, {\n where: { id: where },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import create from './create';\nimport createMany from './createMany';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\nimport deleteMany from './deleteMany';\nimport remove from './remove';\nimport removeMany from './removeMany';\nimport restore from './restore';\nimport restoreMany from './restoreMany';\nimport getEnum from './getEnum';\nimport favorite from './favorite'\nimport unfavorite from './unfavorite'\n\n\nconst Dashboard = {\n create,\n createMany,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n deleteMany,\n remove,\n removeMany,\n restore,\n restoreMany,\n getEnum,\n favorite,\n unfavorite\n};\n\nexport default Dashboard","import deleteMutation from './delete';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n deleteMutation({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import remove from './remove';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n remove({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import restore from './restore';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n restore({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import gql from 'graphql-tag';\n\n\n\nexport const SINGLE_WIDGET_FRAGMENT = gql`\n fragment SingleWidgetFragment on Widget {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n url\n defaultProperties\n defaultGrid\n }\n`\n\nexport const MULTIPLE_WIDGET_FRAGMENT = gql`\n fragment MultipleWidgetFragment on Widget {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n url\n defaultProperties\n defaultGrid\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current?.id } } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = {\n ...data,\n name: data.deleted ? `(Удален) ${data.name}` : data.name,\n }\n\n return result;\n};\n\n\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_WIDGET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const CREATE_WIDGET = gql`\n mutation createWidget($input: WidgetCreateInput!) {\n data: Widget {\n data: create(input: $input) {\n item {...SingleWidgetFragment}\n }\n } \n }\n ${SINGLE_WIDGET_FRAGMENT}\n`\n\nexport default (args) => {\n const { data: input } = args\n\n return graphqlClient.request(CREATE_WIDGET, {\n input: {\n ...sanitizeInput(input),\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { sanitizeResource, sanitizeInput } from './utils';\n\n\nexport const CREATE_MANY_WIDGETS = gql`\n mutation createManyWidgets($input:[WidgetCreateInput!]! $onConflict: OnConflict) {\n data: Widget {\n data: createMany(input: $input onConflict: $onConflict) {\n count\n }\n }\n }\n`;\n\nexport default (args) => {\n const { data, onConflict } = args;\n\n const input = data.map(item => {\n\n\n return {\n ...sanitizeInput(item),\n }\n });\n\n\n return graphqlClient\n .request(CREATE_MANY_WIDGETS, {\n input,\n onConflict\n })\n .then(response => {\n const count = response?.data?.data?.count;\n return {\n data: { count }\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_WIDGET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_LIST_WIDGETS = gql`\n query getListWidgets($filter: WidgetFilter, $sort: [WidgetSort!] $page: Int, $perPage: Int) {\n data: Widget {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {...MultipleWidgetFragment}\n pageInfo { totalItems }\n }\n }\n }\n ${MULTIPLE_WIDGET_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_WIDGETS, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_WIDGET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_WIDGETS = gql`\n query getManyWidgets($ids: [ID!]!) {\n data: Widget {\n data: getMany(ids: $ids) {\n items {...MultipleWidgetFragment}\n }\n }\n }\n ${MULTIPLE_WIDGET_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_WIDGETS, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_WIDGET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_WIDGETS = gql`\n query getManyReferenceWidgets($filter: WidgetFilter, $sort: [WidgetSort!] $page: Int, $perPage: Int) {\n data: Widget {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {...MultipleWidgetFragment}\n pageInfo { totalItems }\n }\n }\n }\n ${MULTIPLE_WIDGET_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_WIDGETS, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_WIDGET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_ONE_WIDGET = gql`\n query getOneWidget( $where: WidgetWhereUniqueInput! ) {\n data: Widget {\n data: getOne(where: $where) {\n item {...SingleWidgetFragment}\n }\n }\n }\n ${SINGLE_WIDGET_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_WIDGET, {\n where: { id },\n }).then(response => {\n const data = sanitizeResource(response?.data?.data?.item)\n return {\n data\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport omit from 'lodash/omit';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_WIDGET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const UPDATE_WIDGET = gql`\n mutation updateWidget($where: WidgetWhereUniqueInput!, $input: WidgetUpdateInput!) {\n data: Widget{\n data: update(where: $where, input: $input) {\n item {...SingleWidgetFragment}\n }\n }\n }\n ${SINGLE_WIDGET_FRAGMENT}\n`\n\nexport default (args) => {\n const { id, data, previousData } = args\n\n const input = omit(data, ['assetsIds', 'createdAt', 'createdById', 'updatedAt', 'deleted'])\n const assets = data.assetsIds ? data.assetsIds.map(id => ({ id })) : undefined\n\n return graphqlClient.request(UPDATE_WIDGET, {\n where: { id },\n input: {\n ...input,\n assets\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_WIDGET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const DELETE_WIDGET = gql`\n mutation deleteWidget($where: WidgetWhereUniqueInput!) {\n data: Widget {\n data: delete(where: $where) {\n item {...SingleWidgetFragment}\n }\n }\n }\n ${SINGLE_WIDGET_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_WIDGET, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_WIDGET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const REMOVE_WIDGET = gql`\n mutation removeWidget($where: WidgetWhereUniqueInput!) {\n data: Widget {\n data: remove(where: $where) {\n item { ...SingleWidgetFragment }\n }\n }\n }\n ${SINGLE_WIDGET_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(REMOVE_WIDGET, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_WIDGET_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const RESTORE_WIDGET = gql`\n mutation restoreWidget($where: WidgetWhereUniqueInput!) {\n data: Widget {\n data: restore(where: $where) {\n item { ...SingleWidgetFragment }\n }\n }\n }\n ${SINGLE_WIDGET_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(RESTORE_WIDGET, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import create from './create';\nimport createMany from './createMany';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\nimport deleteMany from './deleteMany';\nimport remove from './remove';\nimport removeMany from './removeMany';\nimport restore from './restore';\nimport restoreMany from './restoreMany';\n\n\n\n\nconst Widget = {\n create,\n createMany,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n deleteMany,\n remove,\n removeMany,\n restore,\n restoreMany,\n};\n\nexport default Widget","import deleteMutation from './delete';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n deleteMutation({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import remove from './remove';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n remove({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import restore from './restore';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n restore({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import gql from 'graphql-tag';\n\n\nexport const SINGLE_WIDGETONDASHBOARD_FRAGMENT = gql`\n fragment SingleWidgetOnDashboardFragment on WidgetOnDashboard {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n dashboard {\n id\n name\n description\n }\n widget {\n id\n name\n description\n url\n }\n properties\n layouts\n grid\n }\n`\n\nexport const MULTIPLE_WIDGETONDASHBOARD_FRAGMENT = gql`\n fragment MultipleWidgetOnDashboardFragment on WidgetOnDashboard {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current?.id } } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: { id: current?.id } } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n return data\n};\n\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n dashboard,\n widget,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag'\nimport omit from 'lodash/omit';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_WIDGETONDASHBOARD_FRAGMENT } from './typeDefs';\nimport { buildReferenceCreateRequiredInput, sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const CREATE_WIDGETONDASHBOARD = gql`\n mutation createWidgetOnDashboard($input: WidgetOnDashboardCreateInput!) {\n data: WidgetOnDashboard {\n data: create(input: $input) {\n item { ...SingleWidgetOnDashboardFragment }\n }\n } \n }\n ${SINGLE_WIDGETONDASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { data } = args\n\n const input = sanitizeInput(data)\n const dashboard = buildReferenceCreateRequiredInput(data.dashboard)\n const widget = buildReferenceCreateRequiredInput(data.widget)\n\n return graphqlClient.request(CREATE_WIDGETONDASHBOARD, {\n input: {\n ...input,\n dashboard,\n widget,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_WIDGETONDASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_LIST_WIDGETONDASHBOARDS = gql`\n query getListWidgetOnDashboards($filter: WidgetOnDashboardFilter, $sort: [WidgetOnDashboardSort!] $page: Int, $perPage: Int) {\n data: WidgetOnDashboard {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...MultipleWidgetOnDashboardFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${MULTIPLE_WIDGETONDASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_WIDGETONDASHBOARDS, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_WIDGETONDASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_WIDGETONDASHBOARDS = gql`\n query getManyWidgetOnDashboards($ids: [ID!]!) {\n data: WidgetOnDashboard {\n data: getMany(ids: $ids) {\n items { ...MultipleWidgetOnDashboardFragment }\n }\n }\n }\n ${MULTIPLE_WIDGETONDASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_WIDGETONDASHBOARDS, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport set from 'lodash/set'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_WIDGETONDASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_WIDGETONDASHBOARDS = gql`\n query getManyReferenceWidgetOnDashboards($filter: WidgetOnDashboardFilter, $sort: [WidgetOnDashboardSort!] $page: Int, $perPage: Int) {\n data: WidgetOnDashboard {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...MultipleWidgetOnDashboardFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${MULTIPLE_WIDGETONDASHBOARD_FRAGMENT}\n`\n\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n\n return graphqlClient.request(GET_MANY_REFERENCE_WIDGETONDASHBOARDS, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_WIDGETONDASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_ONE_WIDGETONDASHBOARD = gql`\n query getOneWidgetOnDashboard( $where: WidgetOnDashboardWhereUniqueInput! ) {\n data: WidgetOnDashboard {\n data: getOne(where: $where) {\n item { ...SingleWidgetOnDashboardFragment }\n }\n }\n }\n ${SINGLE_WIDGETONDASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_WIDGETONDASHBOARD, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport omit from 'lodash/omit';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_WIDGETONDASHBOARD_FRAGMENT } from './typeDefs';\nimport { buildReferenceUpdateRequiredInput, sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const UPDATE_WIDGETONDASHBOARD = gql`\n mutation updateWidgetOnDashboard($where: WidgetOnDashboardWhereUniqueInput!, $input: WidgetOnDashboardUpdateInput!) {\n data: WidgetOnDashboard{\n data: update(where: $where, input: $input) {\n item { ...SingleWidgetOnDashboardFragment }\n }\n }\n }\n ${SINGLE_WIDGETONDASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { id, data, previousData } = args\n\n const input = sanitizeInput(data)\n const dashboard = buildReferenceUpdateRequiredInput(data.dashboard, previousData.dashboard)\n const widget = buildReferenceUpdateRequiredInput(data.widget, previousData.widget)\n\n\n return graphqlClient.request(UPDATE_WIDGETONDASHBOARD, {\n where: { id },\n input: {\n ...input,\n dashboard,\n widget,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_WIDGETONDASHBOARD_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const DELETE_WIDGETONDASHBOARD = gql`\n mutation deleteWidgetOnDashboard($where: WidgetOnDashboardWhereUniqueInput!) {\n data: WidgetOnDashboard {\n data: delete(where: $where) {\n item { ...SingleWidgetOnDashboardFragment }\n }\n }\n }\n ${SINGLE_WIDGETONDASHBOARD_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_WIDGETONDASHBOARD, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}\n","import create from './create';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\n\n\n\nconst WidgetOnDashboard = {\n create,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n // deleteMany,\n // getEnum,\n};\n\nexport default WidgetOnDashboard","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PARAMETER_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const GET_LIST_PARAMETERS = gql`\n query getListParameters($filter: ParameterFilter, $sort: [ParameterSort!] $page: Int, $perPage: Int) {\n data: Parameter {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ParameterFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${PARAMETER_FRAGMENT}\n`\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_PARAMETERS, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PARAMETER_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_PARAMETERS = gql`\n query getManyReferenceParameters($filter: ParameterFilter, $sort: [ParameterSort!] $page: Int, $perPage: Int) {\n data: Parameter {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ParameterFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${PARAMETER_FRAGMENT}\n`\n\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n\n return graphqlClient.request(GET_MANY_REFERENCE_PARAMETERS, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PARAMETER_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_ONE_PARAMETER = gql`\n query getOneParameter( $where: ParameterWhereUniqueInput! ) {\n data: Parameter {\n data: getOne(where: $where) { \n item {\n ...ParameterFragment\n }\n }\n }\n }\n ${PARAMETER_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_PARAMETER, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n};\n","import getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\n\n\n\nconst Parameter = {\n getList,\n getMany,\n getManyReference,\n getOne,\n};\n\nexport default Parameter","import gql from 'graphql-tag';\n\n\nexport const PARAMETER_FRAGMENT = gql`\n fragment ParameterFragment on Parameter {\n id\n name\n description\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current?.id } } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\nexport const variableParameter = { id: \"${parameterId}\", name: '${Параметр}', description: null }\n\n\nexport const sanitizeResource = data => {\n if (!data) return null\n return data\n};","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PARAMETER_FRAGMENT } from './typeDefs';\nimport { sanitizeResource, variableParameter } from './utils';\n\n\nexport const GET_LIST_PARAMETERS = gql`\n query getListParameters($filter: ParameterFilter, $sort: [ParameterSort!] $page: Int, $perPage: Int) {\n data: Parameter {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ParameterFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${PARAMETER_FRAGMENT}\n`\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_PARAMETERS, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items ? [variableParameter, ...response?.data?.data.items] : response?.data?.data?.items;\n const pageInfo = response?.data?.data?.pageInfo ? { ...response?.data?.data.pageInfo, totalItems: response?.data?.data.pageInfo.totalItems + 1 } : response?.data?.data?.pageInfo;\n\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PARAMETER_FRAGMENT } from './typeDefs';\nimport { sanitizeResource, variableParameter } from './utils';\n\n\n\nexport const GET_MANY_PARAMETERS = gql`\n query getManyParameters($filter: ParameterFilter, $sort: [ParameterSort!] $page: Int, $perPage: Int) {\n data: Parameter {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ParameterFragment\n }\n }\n }\n }\n ${PARAMETER_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_PARAMETERS, {\n filter: {\n ids\n },\n perPage: ids.length\n }).then(response => {\n const items = response?.data?.data?.items ? [variableParameter, ...response?.data?.data.items] : response?.data?.data?.items;\n\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PARAMETER_FRAGMENT } from './typeDefs';\nimport { sanitizeResource, variableParameter } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_PARAMETERS = gql`\n query getManyReferenceParameters($filter: ParameterFilter, $sort: [ParameterSort!] $page: Int, $perPage: Int) {\n data: Parameter {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ParameterFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${PARAMETER_FRAGMENT}\n`\n\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n\n return graphqlClient.request(GET_MANY_REFERENCE_PARAMETERS, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items ? [variableParameter, ...response?.data?.data.items] : response?.data?.data?.items;\n const pageInfo = response?.data?.data?.pageInfo ? { ...response?.data?.data.pageInfo, totalItems: response?.data?.data.pageInfo.totalItems + 1 } : response?.data?.data?.pageInfo;\n\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler);\n};\n","import getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\n\n\n\nconst ParameterWithVariable = {\n getList,\n getMany,\n getManyReference,\n};\n\nexport default ParameterWithVariable","import gql from 'graphql-tag';\n\n\nexport const TAG_HISTORY_FRAGMENT = gql`\n fragment TagHistoryFragment on TagHistory {\n tag {\n resource\n tag\n }\n data {\n value\n type: valueType\n quality\n timestamp\n timestampSrv\n utcOffset\n }\n }\n`\n\nexport const TAG_FRAGMENT = gql`\n fragment TagFragment on Tag {\n id\n asset {id name description}\n parameter {id name description role type display unit {id name} accessLevel format}\n value\n writeValue\n type\n quality\n timestamp\n timestampSrv\n utcOffset\n }\n`","import gql from \"graphql-tag\";\nimport isEmpty from \"lodash/isEmpty\";\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { TAG_FRAGMENT } from \"./typeDefs\";\nimport { sanitizeResource } from \"./utils\";\n\n\n\nexport const GET_LIST_TAGS = gql`\n query getListTags( $filter: TagFilter! $sort: [TagSort!] $page: Int, $perPage: Int) {\n data: Tag {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...TagFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${TAG_FRAGMENT}\n`;\n\nconst buildAseetFilter = (asset) => (isEmpty(asset?.id)) ? {} : { asset: { id: asset.id } }\nconst buildAseetsFilter = (asset) => (isEmpty(asset?.ids)) ? {} : { assets: asset.ids.map(id => ({ id })) }\nconst buildParameterFilter = (parameter) => (isEmpty(parameter?.id)) ? {} : { parameter: { id: parameter.id } }\nconst buildParametersFilter = (parameter) => (isEmpty(parameter?.ids)) ? {} : { parameters: parameter.ids.map(id => ({ id })) }\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n const { asset, parameter, ...otherFilter } = filter\n return graphqlClient.request(GET_LIST_TAGS, {\n filter: {\n ...otherFilter,\n ...buildAseetFilter(asset),\n ...buildAseetsFilter(asset),\n ...buildParameterFilter(parameter),\n ...buildParametersFilter(parameter),\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items,\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { TAG_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_TAGS = gql`\n query getManyTags($ids: [ID!]!) {\n data: Tag {\n data: getMany(ids: $ids) {\n items { ...TagFragment }\n }\n }\n }\n ${TAG_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_TAGS, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n\n return {\n data: items,\n }\n }).catch(graphqlErrorHandler)\n};","import getList from './getList';\nimport getMany from './getMany';\n// import getManyReference from './getManyReference';\n// import getOne from './getOne';\n//import subscribe from './subscribe';\n\n\n\n\n\nconst Tag = {\n getList,\n getMany,\n // getManyReference,\n // getOne,\n //subscribe,\n};\n\nexport default Tag","import gql from 'graphql-tag';\n\n\nexport const MULTIPLE_TAG_BY_NODE_FRAGMENT = gql`\n fragment MultipleTagByNodeFragment on TagByNode {\n id\n asset {id name }\n parameter {id name role }\n }\n`","export const sanitizeData = data => {\n if (!data) return null\n\n return data;\n};\n","import gql from 'graphql-tag'\nimport get from 'lodash/get'\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_TAG_BY_NODE_FRAGMENT } from './typeDefs';\nimport { sanitizeData } from './utils';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\nexport const GET_LIST_TAG_BY_NODE = gql`\n query getListTagByNodes($filter: TagByNodeFilter, $sort: [TagByNodeSort!] $page: Int, $perPage: Int) {\n data: Tree {\n data: getListTagByNodes(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n data {\n ...MultipleTagByNodeFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${MULTIPLE_TAG_BY_NODE_FRAGMENT}\n`\n\n\nconst getList = (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient\n .request(GET_LIST_TAG_BY_NODE, {\n filter,\n sort: [{ [field]: order.toLowerCase() }],\n page,\n perPage\n })\n .then(response => {\n const data = get(response, [\"data\", \"data\", \"data\"], []).map(sanitizeData)\n const total = get(response, [\"data\", \"data\", \"pageInfo\", \"totalItems\"], 0)\n return { data, total }\n })\n .catch(graphqlErrorHandler);\n}\n\n\nexport default getList","import gql from 'graphql-tag'\nimport get from 'lodash/get'\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_TAG_BY_NODE_FRAGMENT } from './typeDefs';\nimport { sanitizeData } from './utils';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\n\nexport const GET_MANY_TAG_BY_NODES = gql`\n query getManyTagByNodes($ids: [ID!]!) {\n data: Tree {\n data: getManyTagByNodes(ids: $ids) {\n data {\n ...MultipleTagByNodeFragment\n }\n }\n }\n }\n ${MULTIPLE_TAG_BY_NODE_FRAGMENT}\n`\n\nconst getMany = (args) => {\n const { ids } = args;\n\n return graphqlClient\n .request(GET_MANY_TAG_BY_NODES, { ids })\n .then(response => {\n const data = get(response, [\"data\", \"data\", \"data\"], []).map(sanitizeData)\n return { data }\n\n })\n .catch(graphqlErrorHandler)\n};\n\nexport default getMany","import gql from 'graphql-tag'\nimport get from 'lodash/get'\nimport set from 'lodash/set';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_TAG_BY_NODE_FRAGMENT } from './typeDefs';\nimport { sanitizeData } from './utils';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\n\n\nexport const GET_MANY_REFERENCE_TAG_BY_NODES = gql`\n query getManyReferenceTagByNodes($filter: TagByNodeFilter, $sort: [TagByNodeSort!] $page: Int, $perPage: Int) {\n data: Tree {\n data: getListTagByNodes(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n data {\n ...MultipleTagByNodeFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${MULTIPLE_TAG_BY_NODE_FRAGMENT}\n`\n\n\n\nconst getManyReference = (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient\n .request(GET_MANY_REFERENCE_TAG_BY_NODES, {\n filter: { ...filter, ...set({}, target, id) },\n sort: [{ [field]: order.toLowerCase() }],\n page,\n perPage,\n })\n .then(response => {\n const data = get(response, [\"data\", \"data\", \"data\"], []).map(sanitizeData)\n const total = get(response, [\"data\", \"data\", \"pageInfo\", \"totalItems\"], 0)\n return { data, total }\n })\n .catch(graphqlErrorHandler);\n};\n\nexport default getManyReference","import getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\n\n\nconst TagByNode = {\n getList,\n getMany,\n getManyReference,\n};\n\nexport default TagByNode","import gql from 'graphql-tag';\n\n\nexport const NODE_FRAGMENT = gql`\n fragment NodeFragment on Node {\n id\n type\n name\n asset {id name}\n parameter {id name accessLevel, role}\n children {id}\n }\n`","import gql from \"graphql-tag\";\nimport graphqlClient from \"../graphqlClient\";\nimport { NODE_FRAGMENT } from \"./typeDefs\";\n\n\n\nexport const GET_ROOT_NODES = gql`\n query getRootNodes($filter: NodeFilter) {\n data: Tree {\n data: getRootNodes(filter: $filter) {\n ...NodeFragment\n }\n }\n }\n ${NODE_FRAGMENT}\n`;\n\nconst getRootNodes = (args) => {\n const { filter } = args;\n\n return graphqlClient\n .request(GET_ROOT_NODES, {\n filter,\n })\n .then((response) => {\n const items = response?.data?.data;\n return {\n data: items,\n };\n });\n};\n\nexport default getRootNodes\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { NODE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_CHILD_NODES = gql`\n query getChildNodes($parent: NodeWhereUniqueInput!) {\n data: Tree {\n data: getChildNodes(parent: $parent) {\n ...NodeFragment\n }\n }\n }\n ${NODE_FRAGMENT}\n`\n\nexport default (args) => {\n const { parentId } = args;\n\n return graphqlClient.request(GET_CHILD_NODES, {\n parent: {\n id: parentId\n }\n }).then(response => {\n const item = response?.data?.data\n return {\n data: item,\n }\n }).catch(graphqlErrorHandler);\n}\n","import getRootNodes from './getRootNodes';\nimport getChildNodes from './getChildNodes';\n\n\n\n\nconst Tree = {\n getRootNodes,\n getChildNodes,\n};\n\nexport default Tree","import gql from 'graphql-tag';\n\n\n\nexport const LABEL_FRAGMENT = gql`\n fragment LabelFragment on Label {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n typename\n color\n isSystem\n resources { id }\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current?.id } } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = [], typename) => {\n const connect = current.map(id => ({ id, typename }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = [], typename) => {\n const connect = difference(current, previous).map(id => ({ id, typename }))\n const disconnect = difference(previous, current).map(id => ({ id, typename }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\nexport const sanitizeResourceConstructor = (data, { skipFields }) => {\n\n if (skipFields) {\n const sanitizeData = skipFields ? omit(data, skipFields) : data\n const sanitizedData = sanitizeResource(sanitizeData)\n return { ...data, ...sanitizedData }\n }\n\n return sanitizeResource(data)\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = {\n ...data,\n name: data.deleted ? `(Удален) ${data.name}` : data.name,\n resourcesIds: data.resources && data.resources.map(({ id }) => id),\n }\n\n return result;\n};\n\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n deleted,\n resources,\n resourcesIds,\n ...sanitizedInput }) => sanitizedInput","import gql from \"graphql-tag\";\nimport omit from \"lodash/omit\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { LABEL_FRAGMENT } from \"./typeDefs\";\nimport {\n buildReferenceCreateInput,\n buildReferenceArrayCreateInput,\n sanitizeResource,\n sanitizeInput,\n} from \"./utils\";\n\n\n\nexport const CREATE_LABEL = gql`\n mutation createLabel($input: LabelCreateInput!) {\n data: Label {\n data: create(input: $input) {\n item {\n ...LabelFragment\n }\n }\n }\n }\n ${LABEL_FRAGMENT}\n`;\n\nexport default (args) => {\n const { data } = args;\n\n const input = sanitizeInput(data);\n const resources = buildReferenceArrayCreateInput(data.resourcesIds, data.typename)\n\n return graphqlClient\n .request(CREATE_LABEL, {\n input: {\n ...input,\n resources,\n },\n })\n .then(async (response) => {\n const item = response?.data?.data?.item;\n\n return {\n data: sanitizeResource(item),\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from \"graphql-tag\";\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { LABEL_FRAGMENT } from \"./typeDefs\";\nimport { sanitizeResource } from \"./utils\";\n\n\n\nexport const GET_LIST_LABELS = gql`\n query getListLabels(\n $filter: LabelFilter\n $sort: [LabelSort!]\n $page: Int\n $perPage: Int\n ) {\n data: Label {\n data: getList(\n filter: $filter\n sort: $sort\n page: $page\n perPage: $perPage\n ) {\n items {\n ...LabelFragment\n }\n pageInfo {\n totalItems\n }\n }\n }\n }\n ${LABEL_FRAGMENT}\n`;\n\nexport default (args) => {\n const {\n filter,\n pagination: { page, perPage },\n sort: { field, order },\n } = args;\n\n return graphqlClient\n .request(GET_LIST_LABELS, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n })\n .then(async (response) => {\n let items = response?.data?.data?.items;\n let pageInfo = response?.data?.data?.pageInfo;\n\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { LABEL_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_LABELS = gql`\n query getManyLabels($ids: [ID!]!) {\n data: Label {\n data: getMany(ids: $ids) {\n items { ...LabelFragment }\n }\n }\n }\n ${LABEL_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_LABELS, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n};","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { LABEL_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_LABELS = gql`\n query getManyReferenceLabels($filter: LabelFilter, $sort: [LabelSort!] $page: Int, $perPage: Int) {\n data: Label {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...LabelFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${LABEL_FRAGMENT}\n`\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_LABELS, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler);\n};","import gql from \"graphql-tag\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { LABEL_FRAGMENT } from \"./typeDefs\";\nimport { sanitizeResource } from \"./utils\";\n\n\n\nexport const GET_ONE_LABEL = gql`\n query getOneLabel($where: LabelWhereUniqueInput!) {\n data: Label {\n data: getOne(where: $where) {\n item {\n ...LabelFragment\n }\n }\n }\n }\n ${LABEL_FRAGMENT}\n`;\n\nexport default (args) => {\n const { id } = args;\n\n return graphqlClient\n .request(GET_ONE_LABEL, {\n where: { id },\n })\n .then(async (response) => {\n const item = response?.data?.data?.item\n\n return {\n data: sanitizeResource(item),\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from \"graphql-tag\";\nimport omit from \"lodash/omit\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { LABEL_FRAGMENT } from \"./typeDefs\";\nimport {\n buildReferenceUpdateInput,\n buildReferenceArrayUpdateInput,\n sanitizeResource,\n sanitizeInput,\n} from \"./utils\";\n\n\nexport const UPDATE_LABEL = gql`\n mutation updateLabel(\n $where: LabelWhereUniqueInput!\n $input: LabelUpdateInput!\n ) {\n data: Label {\n data: update(where: $where, input: $input) {\n item {\n ...LabelFragment\n }\n }\n }\n }\n ${LABEL_FRAGMENT}\n`;\n\n\n\nexport default (args) => {\n const { id, data, previousData } = args;\n\n const input = sanitizeInput(data);\n const resources = buildReferenceArrayUpdateInput(data.resourcesIds, previousData.resourcesIds, data.typename)\n\n return graphqlClient\n .request(UPDATE_LABEL, {\n where: { id },\n input: {\n ...input,\n resources,\n },\n })\n .then(async (response) => {\n const item = response?.data?.data?.item;\n return {\n data: sanitizeResource(item),\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { LABEL_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const DELETE_LABEL = gql`\n mutation deleteLabel($where: LabelWhereUniqueInput!) {\n data: Label {\n data: delete(where: $where) {\n item { ...LabelFragment }\n }\n }\n }\n ${LABEL_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_LABEL, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n};","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { LABEL_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const REMOVE_LABEL = gql`\n mutation removeLabel($where: LabelWhereUniqueInput!) {\n data: Label {\n data: remove(where: $where) {\n item { ...LabelFragment }\n }\n }\n }\n ${LABEL_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(REMOVE_LABEL, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { LABEL_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const RESTORE_LABEL = gql`\n mutation restoreLabel($where: LabelWhereUniqueInput!) {\n data: Label {\n data: restore(where: $where) {\n item { ...LabelFragment }\n }\n }\n }\n ${LABEL_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(RESTORE_LABEL, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import create from './create';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\nimport deleteMany from './deleteMany';\nimport remove from './remove';\nimport removeMany from './removeMany';\nimport restore from './restore';\nimport restoreMany from './restoreMany';\n\n\n\nconst Label = {\n create,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n deleteMany,\n remove,\n removeMany,\n restore,\n restoreMany,\n};\n\nexport default Label","import deleteMutation from './delete';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n deleteMutation({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import remove from './remove';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n remove({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import restore from './restore';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n restore({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import gql from 'graphql-tag';\n\n\nexport const CATALOG_WITH_CHIDREN_FRAGMENT = gql`\n fragment CatalogWithChildrenFragment on CatalogWithChildren {\n id\n name\n type\n resource {\n id\n typename\n }\n children {\n id\n type\n name\n resource {\n id\n }\n }\n }\n`","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { CATALOG_WITH_CHIDREN_FRAGMENT } from './typeDefs';\nimport { orderBy } from 'lodash';\n\nexport const GET_ROOT_CATALOG = gql`\n query getRootCatalogs($filter: CatalogFilter) {\n data: Catalog {\n data: getRootCatalogs(filter: $filter) { ...CatalogWithChildrenFragment } \n }\n }\n ${CATALOG_WITH_CHIDREN_FRAGMENT}\n`\n\nexport default (args) => {\n\n const { filter } = args;\n\n return graphqlClient.request(GET_ROOT_CATALOG, {\n filter,\n }).then(response => {\n //const data = (response?.data?.data || []);\n const data = orderBy(response?.data?.data || [], ['type', 'name'], ['desc', 'asc'])\n .map(node => ({ ...node, children : orderBy(node.children || [], ['type', 'name'], ['desc', 'asc']) }));\n return {\n data\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { CATALOG_WITH_CHIDREN_FRAGMENT } from './typeDefs';\nimport { orderBy } from 'lodash';\n\nexport const GET_CHILDS_CATALOG = gql`\n query getChildCatalogs($parent: CatalogWhereUniqueInput!) {\n data: Catalog {\n data: getChildCatalogs(parent : $parent) { ...CatalogWithChildrenFragment } \n }\n }\n ${CATALOG_WITH_CHIDREN_FRAGMENT}\n`\n\nexport default (args) => {\n\n const { parentId } = args;\n\n return graphqlClient.request(GET_CHILDS_CATALOG, {\n parent: { id: parentId },\n }).then(response => { \n const data = orderBy(response.data?.data || [], ['type', 'name'], ['desc', 'asc'])\n .map(node => ({ ...node, children : orderBy(node.children || [], ['type', 'name'], ['desc', 'asc']) }));\n return {\n data\n }\n }).catch(graphqlErrorHandler);\n}\n","import getRootNodes from './getRootNodes';\nimport getChildNodes from './getChildNodes';\n\nconst Catalog = {\n getRootNodes,\n getChildNodes,\n};\n\nexport default Catalog\n","import gql from 'graphql-tag';\n\n\nexport const FILE_FRAGMENT = gql`\n fragment FileFragment on File {\n id\n name\n description\n deleted\n createdAt\n createdById\n updatedAt\n path\n pathThumbnail\n size\n type\n resources {id typename}\n labels { id name deleted color }\n }\n`","import gql from \"graphql-tag\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { FILE_FRAGMENT } from \"./typeDefs\";\nimport { sanitizeResource, sanitizeInput, buildReferenceArrayCreateInput } from \"./utils\";\n\nexport const CREATE_FILE = gql`\n mutation createFile($input: FileCreateInput!) {\n data: File {\n data: create(input: $input) {\n item {\n ...FileFragment\n }\n }\n }\n }\n ${FILE_FRAGMENT}\n`;\n\nexport default (args) => {\n const { data } = args;\n\n const input = sanitizeInput(data);\n const labels = buildReferenceArrayCreateInput(data.labelsIds)\n\n return graphqlClient.request(CREATE_FILE, {\n input: {\n ...input,\n labels,\n },\n })\n .then(async (response) => {\n const item = response?.data?.data?.item;\n\n return {\n data: sanitizeResource(item),\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { FILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\n\nexport const GET_LIST_FILES = gql`\n query getListFiles($filter: FileFilter, $sort: [FileSort!] $page: Int, $perPage: Int) {\n data: File {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...FileFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${FILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter = {}, pagination: { page, perPage }, sort: { field, order } } = args;\n\n const { resourceAssetId, ...avaliableFilter } = filter\n const resultFilter = {\n ...avaliableFilter,\n resources: resourceAssetId ? { some: { ids: [resourceAssetId] } } : undefined\n }\n\n return graphqlClient.request(GET_LIST_FILES, {\n filter: resultFilter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler);\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { FILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_FILES = gql`\n query getManyFiles($ids: [ID!]!) {\n data: File {\n data: getMany(ids: $ids) {\n items { ...FileFragment }\n }\n }\n }\n ${FILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_FILES, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { FILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_FILES = gql`\n query getManyReferenceFiles($filter: FileFilter, $sort: [FileSort!] $page: Int, $perPage: Int) {\n data: File {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...MultipleFileFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${FILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_FILES, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { FILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_ONE_FILE = gql`\n query getOneFile( $where: FileWhereUniqueInput! ) {\n data: File {\n data: getOne(where: $where) {\n item { ...FileFragment }\n }\n }\n }\n ${FILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_FILE, {\n where: { id },\n }).then(response => {\n const item = sanitizeResource(response?.data?.data?.item)\n return {\n data: item,\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\n\n\n\nexport const DELETE_FROM_BLOB = gql`\n mutation deleteFromBlob($ids: [ID]) {\n data: multipleRemove(ids:$ids) {\n id\n }\n }\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_FROM_BLOB, {\n ids: [id],\n }).then(response => {\n const item = response?.data\n return {\n data: item,\n }\n }).catch(graphqlErrorHandler);\n};","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { FILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\nimport deleteMutation from '../../BlobService/Blob/delete';\n\n\n\nexport const DELETE_FILE = gql`\n mutation deleteFile($where: FileWhereUniqueInput!) {\n data: File {\n data: delete(where: $where) {\n item { ...FileFragment }\n }\n }\n }\n ${FILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_FILE, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return deleteMutation({ id: item.id }).then(() => {\n return {\n data: sanitizeResource(item),\n }\n })\n }).catch(graphqlErrorHandler);\n};","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport deleteMany from '../../BlobService/Blob/deleteMany';\n\n\nexport const DELETE_MANY_FILES = gql`\n mutation deleteManyFiles($ids: [ID!]!) {\n data: File {\n data: deleteMany(ids: $ids) {\n count\n }\n }\n }\n`\n\nexport default (args) => {\n const { ids } = args\n\n return graphqlClient.request(DELETE_MANY_FILES, {\n ids,\n }).then(response => {\n return deleteMany({ ids }).then(() => {\n return {\n data: ids,\n }\n })\n }).catch(graphqlErrorHandler);\n};","import gql from \"graphql-tag\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { FILE_FRAGMENT } from \"./typeDefs\";\nimport { sanitizeResource, sanitizeInput, buildResourceReferenceArrayUpdateInput, buildReferenceArrayUpdateInput } from \"./utils\";\n\nexport const UPDATE_FILE = gql`\n mutation updateFile($where: FileWhereUniqueInput! $input: FileUpdateInput!) {\n data: File {\n data: update(where: $where input: $input) {\n item {\n ...FileFragment\n }\n }\n }\n }\n ${FILE_FRAGMENT}\n`;\n\nexport default (args) => {\n const { id, data, previousData } = args\n\n const input = sanitizeInput(data)\n const resources = buildResourceReferenceArrayUpdateInput(data.resourcesIds, previousData.resourcesIds, data._resourcesIdsTypename)\n const labels = buildReferenceArrayUpdateInput(data.labelsIds, previousData.labelsIds);\n\n return graphqlClient.request(UPDATE_FILE, {\n where: { id },\n input: {\n ...input,\n resources,\n labels,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { FILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const REMOVE_FILE = gql`\n mutation removeFile($where: FileWhereUniqueInput!) {\n data: File {\n data: remove(where: $where) {\n item { ...FileFragment }\n }\n }\n }\n ${FILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(REMOVE_FILE, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\n\n\n\nexport const REMOVE_MANY_FILES = gql`\n mutation removeManyFiles($ids: [ID!]!) {\n data: File {\n data: removeMany(ids: $ids) {\n count\n }\n }\n }\n`\n\nexport default (args) => {\n const { ids } = args\n\n return graphqlClient.request(REMOVE_MANY_FILES, {\n ids,\n }).then(response => {\n return {\n data: ids,\n }\n }).catch(graphqlErrorHandler);\n};","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { FILE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const RESTORE_FILE = gql`\n mutation restoreFile($where: FileWhereUniqueInput!) {\n data: File {\n data: restore(where: $where) {\n item { ...FileFragment }\n }\n }\n }\n ${FILE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(RESTORE_FILE, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\n\n\n\nexport const RESTORE_MANY_FILES = gql`\n mutation restoreManyFiles($ids: [ID!]!) {\n data: File {\n data: restoreMany(ids: $ids) {\n count\n }\n }\n }\n`\n\nexport default (args) => {\n const { ids } = args\n\n return graphqlClient.request(RESTORE_MANY_FILES, {\n ids,\n }).then(response => {\n return {\n data: ids,\n }\n }).catch(graphqlErrorHandler);\n};","import create from './create';\nimport createMany from './createMany';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport deleteMutation from './delete';\nimport deleteMany from './deleteMany';\nimport update from './update';\nimport remove from './remove';\nimport removeMany from './removeMany';\nimport restore from './restore';\nimport restoreMany from './restoreMany';\n\n\n\nconst File = {\n create,\n createMany,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n deleteMany,\n remove,\n removeMany,\n restore,\n restoreMany,\n};\n\nexport default File","import Asset from \"./Asset\"\nimport AssetWithVariable from \"./AssetWithVariable\"\nimport AssetClass from \"./AssetClass\"\nimport AssetType from \"./AssetType\"\nimport AssetDatagrid from \"./AssetDatagrid\"\nimport AssetMap from \"./AssetMap\"\nimport AssetTree from \"./AssetTree\"\nimport Dashboard from \"./Dashboard\"\nimport Widget from \"./Widget\"\nimport WidgetOnDashboard from \"./WidgetOnDashboard\"\nimport Parameter from \"./Parameter\"\nimport ParameterWithVariable from \"./ParameterWithVariable\"\nimport Tag from \"./Tag\"\nimport TagByNode from \"./TagByNode\"\nimport Tree from \"./Tree\"\nimport Label from \"./Label\"\nimport Catalog from \"./Catalog\"\nimport File from \"./File\"\n\nconst resolveMap = {\n Asset,\n AssetWithVariable,\n AssetType,\n AssetClass,\n AssetDatagrid,\n AssetMap,\n AssetTree,\n Dashboard,\n Widget,\n WidgetOnDashboard,\n Parameter,\n ParameterWithVariable,\n Tag,\n TagByNode,\n Tree,\n Label,\n Catalog,\n File,\n}\n\n\n\nexport default resolveMap","import getPreferences from './getPreferences';\nimport setPreference from './setPreferences';\nimport { sanitizeResource } from '../utils';\n\n\nconst Preferences = {\n getPreferences: (params) => {\n const { key } = params;\n\n return getPreferences({ key }).then(response => {\n const payload = response?.data?.payload\n return payload\n });\n },\n setPreference: (params) => {\n\n const { key, payload } = params\n\n return setPreference({ key, payload }).then(response => {\n const payload = response?.data?.payload\n return payload\n });\n },\n};\n\nexport default Preferences","\nimport Preferences from \"./Preferences\"\n\nconst resolveMap = {\n Preferences,\n}\n\n\n\nexport default resolveMap","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../../authProvider/authorizationProvider/checkToken';\nimport { URI_DISPATCHER_SERVICE } from '../../appsettings';\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeader('authorization', token ? `Bearer ${token}` : \"\");\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_DISPATCHER_SERVICE)\n\nexport default client","import gql from 'graphql-tag';\n\n\nexport const SINGLE_USER_FRAGMENT = gql`\n fragment SingleUserFragment on User {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n email\n account {\n id\n }\n profile {\n id\n }\n mainDashboard {\n id\n }\n }\n`\n\nexport const MULTIPLE_USER_FRAGMENT = gql`\n fragment MultipleUserFragment on User {\n id\n name\n description\n updatedAt\n createdAt\n createdById\n deleted\n email\n account {\n id\n }\n profile {\n id\n }\n }\n`","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_USER_FRAGMENT } from './typeDefs';\n\nexport const CREATE_USER = gql`\n mutation createUser($input: UserCreateInput!) {\n data: User {\n data: create(input: $input) {\n item { ...SingleUserFragment }\n }\n } \n }\n ${SINGLE_USER_FRAGMENT}\n`\n\nexport default (args) => {\n\n return graphqlClient.request(CREATE_USER, args)\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_USER_FRAGMENT } from './typeDefs';\n\nexport const GET_LIST_USERS = gql`\n query getListUsers($filter: UserFilter, $sort: [UserSort!] $page: Int, $perPage: Int) {\n data: User {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...MultipleUserFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${MULTIPLE_USER_FRAGMENT}\n`\n\nexport default (args) => {\n return graphqlClient.request(GET_LIST_USERS, args)\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_USER_FRAGMENT } from './typeDefs';\n\nexport const GET_MANY_USERS = gql`\n query getManyUsers($ids: [ID!]!) {\n data: User {\n data: getMany(ids: $ids) {\n items { ...MultipleUserFragment }\n }\n }\n }\n ${MULTIPLE_USER_FRAGMENT}\n`\n\nexport default (args) => {\n return graphqlClient.request(GET_MANY_USERS, args)\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_USER_FRAGMENT } from './typeDefs';\n\n\n\nexport const GET_MANY_REFERENCE_USERS = gql`\n query getManyReferenceUsers($filter: UserFilter, $sort: [UserSort!] $page: Int, $perPage: Int) {\n data: User {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...MultipleUserFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${MULTIPLE_USER_FRAGMENT}\n`\n\n\n\nexport default (args) => {\n return graphqlClient.request(GET_MANY_REFERENCE_USERS, args)\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_USER_FRAGMENT } from './typeDefs';\n\n\nexport const GET_ONE_USER = gql`\n query getOneUser( $where: UserWhereUniqueInput! ) {\n data: User {\n data: getOne(where: $where) {\n item { ...SingleUserFragment }\n }\n }\n }\n ${SINGLE_USER_FRAGMENT}\n`\n\nexport default (args) => {\n return graphqlClient.request(GET_ONE_USER, args)\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_USER_FRAGMENT } from './typeDefs';\n\nexport const UPDATE_USER = gql`\n mutation updateUser($where: UserWhereUniqueInput!, $input: UserUpdateInput!) {\n data: User{\n data: update(where: $where, input: $input) {\n item { ...SingleUserFragment }\n }\n }\n }\n ${SINGLE_USER_FRAGMENT}\n`\n\nexport default (args) => {\n return graphqlClient.request(UPDATE_USER, args)\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_USER_FRAGMENT } from './typeDefs';\n\nexport const DELETE_USER = gql`\n mutation deleteUser($where: UserWhereUniqueInput!) {\n data: User {\n data: delete(where: $where) {\n item { ...SingleUserFragment }\n }\n }\n }\n ${SINGLE_USER_FRAGMENT}\n`\n\nexport default (args) => {\n return graphqlClient.request(DELETE_USER, args)\n};\n","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../../authProvider/authorizationProvider/checkToken';\nimport { URI_ABILITY_SERVICE } from '../../appsettings';\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeader('authorization', token ? `Bearer ${token}` : \"\");\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_ABILITY_SERVICE)\n\nexport default client","import gql from 'graphql-tag';\n\n\n\nexport const RULE_FRAGMENT = gql`\n fragment RuleFragment on Rule {\n id\n type\n role {id}\n profile {id}\n application {id}\n order\n action\n subject\n conditions\n fields\n inverted\n reason\n updatedAt\n createdAt\n createdById\n deleted\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\nexport const sanitizeResourceConstructor = (data, { skipFields }) => {\n\n if (skipFields) {\n const sanitizeData = skipFields ? omit(data, skipFields) : data\n const sanitizedData = sanitizeResource(sanitizeData)\n return { ...data, ...sanitizedData }\n }\n\n return sanitizeResource(data)\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = Object.keys(data).reduce((acc, key) => {\n if (key.startsWith('_')) {\n return acc;\n }\n\n const dataKey = data[key];\n\n if (dataKey === null || dataKey === undefined) {\n return acc;\n }\n\n if (Array.isArray(dataKey)) {\n if (typeof dataKey[0] === 'object' && dataKey[0] !== null) {\n return {\n ...acc,\n [key]: dataKey.map(sanitizeResource),\n [`${key}Ids`]: dataKey.map(d => d.id),\n };\n } else {\n return { ...acc, [key]: dataKey };\n }\n }\n\n if (typeof dataKey === 'object' && dataKey !== null) {\n return {\n ...acc,\n // ...(dataKey &&\n // dataKey.id && {\n // [`${key}.id`]: dataKey.id,\n // }),\n [key]: sanitizeResource(dataKey),\n };\n }\n\n return { ...acc, [key]: dataKey };\n }, {});\n\n return result;\n};\n\nexport const sanitizeInput = ({\n id,\n createdAt,\n createdById,\n updatedAt,\n deleted,\n banned,\n confirmPassword,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { RULE_FRAGMENT } from './typeDefs';\nimport { buildReferenceArrayCreateInput, sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const CREATE_RULE = gql`\n mutation createRule($input: RuleCreateInput!) {\n data: Rule {\n data: create(input: $input) {\n item { ...RuleFragment }\n }\n } \n }\n ${RULE_FRAGMENT}\n`\n\nexport default (args) => {\n\n const { data } = args\n\n const input = sanitizeInput(data)\n\n return graphqlClient.request(CREATE_RULE, {\n input: {\n ...input,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: item,\n }\n }).catch(graphqlErrorHandler);\n\n}\n","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { RULE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_LIST_RULES = gql`\n query getListRules($filter: RuleFilter, $sort: [RuleSort!] $page: Int, $perPage: Int) {\n data: Rule {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...RuleFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${RULE_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_RULES, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(error => {\n console.error(error)\n throw new Error('ra.notification.data_provider_error')\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { RULE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_RULES = gql`\n query getManyRules($ids: [ID!]!) {\n data: Rule {\n data: getMany(ids: $ids) {\n items { ...RuleFragment }\n }\n }\n }\n ${RULE_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_RULES, {\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { RULE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_RULES = gql`\n query getManyReferenceRules($filter: RuleFilter, $sort: [RuleSort!] $page: Int, $perPage: Int) {\n data: Rule {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items { ...RuleFragment }\n pageInfo { totalItems }\n }\n }\n }\n ${RULE_FRAGMENT}\n`\n\n\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_RULES, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { RULE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_ONE_RULE = gql`\n query getOneRule( $where: RuleWhereUniqueInput! ) {\n data: Rule {\n data: getOne(where: $where) {\n item { ...RuleFragment }\n }\n }\n }\n ${RULE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_RULE, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport omit from 'lodash/omit';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { RULE_FRAGMENT } from './typeDefs';\nimport { buildReferenceArrayUpdateInput, sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const UPDATE_RULE = gql`\n mutation updateRule($where: RuleWhereUniqueInput!, $input: RuleUpdateInput!) {\n data: Rule{\n data: update(where: $where, input: $input) {\n item { ...RuleFragment }\n }\n }\n }\n ${RULE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id, data, previousData } = args\n\n const input = sanitizeInput(data)\n\n return graphqlClient.request(UPDATE_RULE, {\n where: { id },\n input: {\n ...input,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: item,\n }\n }).catch(graphqlErrorHandler)\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { RULE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const DELETE_RULE = gql`\n mutation deleteRule($where: RuleWhereUniqueInput!) {\n data: Rule {\n data: delete(where: $where) {\n item { ...RuleFragment }\n }\n }\n }\n ${RULE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_RULE, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { RULE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const REMOVE_RULE = gql`\n mutation removeRule($where: RuleWhereUniqueInput!) {\n data: Rule {\n data: remove(where: $where) {\n item { ...RuleFragment }\n }\n }\n }\n ${RULE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(REMOVE_RULE, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { RULE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const RESTORE_RULE = gql`\n mutation restoreRule($where: RuleWhereUniqueInput!) {\n data: Rule {\n data: restore(where: $where) {\n item { ...RuleFragment }\n }\n }\n }\n ${RULE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(RESTORE_RULE, {\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}","import create from './create';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\nimport deleteMany from './deleteMany';\nimport remove from './remove';\nimport removeMany from './removeMany';\nimport restore from './restore';\nimport restoreMany from './restoreMany';\n\n\n\nconst Rule = {\n create,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n deleteMany,\n remove,\n removeMany,\n restore,\n restoreMany,\n\n};\n\nexport default Rule","import deleteMutation from './delete';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n deleteMutation({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import remove from './remove';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n remove({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import restore from './restore';\n\n\n\nexport default (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n restore({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const equal = isEqual(current, previous)\n if (equal) return undefined\n return (current?.id == null)\n ? (previous?.id == null)\n ? undefined\n : { disconnect: true }\n : { connect: { id: current.id } }\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\nexport const sanitizeResourceConstructor = (data, { skipFields }) => {\n\n if (skipFields) {\n const sanitizeData = skipFields ? omit(data, skipFields) : data\n const sanitizedData = sanitizeResource(sanitizeData)\n return { ...data, ...sanitizedData }\n }\n\n return sanitizeResource(data)\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n const result = Object.keys(data).reduce((acc, key) => {\n if (key.startsWith('_')) {\n return acc;\n }\n\n const dataKey = data[key];\n\n if (dataKey === null || dataKey === undefined) {\n return acc;\n }\n\n if (Array.isArray(dataKey)) {\n if (typeof dataKey[0] === 'object' && dataKey[0] !== null) {\n return {\n ...acc,\n [key]: dataKey.map(sanitizeResource),\n [`${key}Ids`]: dataKey.map(d => d.id),\n };\n } else {\n return { ...acc, [key]: dataKey };\n }\n }\n\n if (typeof dataKey === 'object' && dataKey !== null) {\n return {\n ...acc,\n // ...(dataKey &&\n // dataKey.id && {\n // [`${key}.id`]: dataKey.id,\n // }),\n [key]: sanitizeResource(dataKey),\n };\n }\n\n return { ...acc, [key]: dataKey };\n }, {});\n\n return result;\n};\n\nexport const sanitizeUndefinedinput = (input) => {\n\n if (input === undefined) return undefined;\n if (typeof input === \"object\") {\n if (input instanceof Date) {\n return input;\n }\n if (Array.isArray(input)) {\n return input.reduce((acc, item) => {\n const sanitizedValue = sanitizeUndefinedinput(item)\n return sanitizedValue ? [...acc, sanitizedValue] : acc\n }, [])\n }\n return Object.keys(input).reduce((acc, key) => {\n const value = input[key]\n const sanitizedValue = sanitizeUndefinedinput(value)\n return sanitizedValue ? { ...acc, [key]: sanitizedValue } : acc\n\n }, {})\n }\n\n\n return input;\n};","\nimport User from \"./User\"\n\nconst resolveMap = {\n User,\n}\n\n\n\nexport default resolveMap","import omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport set from 'lodash/set';\nimport create from './create';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\nimport Rule from '../../AbilityService/Rule';\nimport {\n buildReferenceCreateInput,\n buildReferenceUpdateInput,\n sanitizeResource,\n sanitizeUndefinedinput\n} from '../utils';\n\n\nconst User = {\n create: (params) => {\n\n const { data } = params\n\n const input = omit(data, ['account', 'profile', 'mainDashboard',])\n // const account = buildReferenceCreateInput(data.account)\n // const profile = buildReferenceCreateInput(data.profile)\n const account = { connect: { id: \"jsdjkhjkdfhsdfg\" } }\n const profile = { connect: { id: \"gfhdfjgyjkghijhfg\" } }\n const mainDashboard = buildReferenceCreateInput(data.mainDashboard)\n\n\n\n return create({\n input: {\n ...input,\n account,\n profile,\n mainDashboard,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n });\n },\n getList: (params) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = params;\n\n return getList({\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n });\n },\n getMany: (params) => {\n const { ids } = params;\n\n return getMany({\n ids\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n });\n },\n getManyReference: (params) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = params;\n\n\n return getManyReference({\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const items = response?.data?.data?.items\n const pageInfo = response?.data?.data?.pageInfo\n return {\n data: items.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n });\n },\n getOne: (params) => {\n const { id } = params\n\n return getOne({\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n });\n },\n update: (params) => {\n\n const { id, data, previousData } = params\n\n const userInput = pick(data, ['id', 'name', 'description', 'email', 'mainDashboard'])\n const mainDashboard = buildReferenceUpdateInput(data.mainDashboard, previousData.mainDashboard)\n\n if (data.rule) {\n\n Promise.all(\n Object.keys(data.rule).map(id => {\n const rule = sanitizeUndefinedinput(data.rule[id])\n return Rule.update({ id, data: rule })\n })\n )\n }\n\n return update({\n where: { id },\n input: {\n ...userInput,\n mainDashboard,\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n });\n },\n delete: (params) => {\n const { id } = params\n\n return deleteMutation({\n where: { id },\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n });\n },\n // deleteMany: (params) => {\n // const { ids } = params\n\n // return Promise.all(\n // ids.map(id =>\n // deleteMutation({ where: { id } })\n // )\n // ).then(results => {\n // const data = results.reduce((acc, { data: { data: { item } } }) => [...acc, item.id], []);\n // return { data };\n // });\n // },\n // getEnum: (params) => {\n // const { name } = params\n\n // return getEnum({ name }).then(({ data: { data } }) => {\n // const { enumValues } = data;\n // return {\n // data: enumValues,\n // }\n // });\n // },\n};\n\nexport default User","import gql from 'graphql-tag';\n\n\n\nexport const RESOURCE_FRAGMENT = gql`\n fragment ResourceFragment on Resource {\n id\n typename\n readableBy {\n id\n inverted\n }\n }\n`","import difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\nexport const sanitizeResourceConstructor = (data, { skipFields }) => {\n\n if (skipFields) {\n const sanitizeData = skipFields ? omit(data, skipFields) : data\n const sanitizedData = sanitizeResource(sanitizeData)\n return { ...data, ...sanitizedData }\n }\n\n return sanitizeResource(data)\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = Object.keys(data).reduce((acc, key) => {\n if (key.startsWith('_')) {\n return acc;\n }\n\n const dataKey = data[key];\n\n if (dataKey === null || dataKey === undefined) {\n return acc;\n }\n\n if (Array.isArray(dataKey)) {\n if (typeof dataKey[0] === 'object' && dataKey[0] !== null) {\n return {\n ...acc,\n [key]: dataKey.map(sanitizeResource),\n [`${key}Ids`]: dataKey.map(d => d.id),\n };\n } else {\n return { ...acc, [key]: dataKey };\n }\n }\n\n if (typeof dataKey === 'object' && dataKey !== null) {\n return {\n ...acc,\n // ...(dataKey &&\n // dataKey.id && {\n // [`${key}.id`]: dataKey.id,\n // }),\n [key]: sanitizeResource(dataKey),\n };\n }\n\n return { ...acc, [key]: dataKey };\n }, {});\n\n return result;\n};\n\nexport const sanitizeInput = ({\n id,\n createdAt,\n createdById,\n updatedAt,\n deleted,\n banned,\n confirmPassword,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { RESOURCE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_RESOURCES = gql`\n query getManyResources($ids: [ID!]!, $typename: String! ) {\n data: Resource {\n data: getMany(ids: $ids, typename: $typename) {\n items { ...ResourceFragment }\n }\n }\n }\n ${RESOURCE_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n const typename = ids[0]?.typename\n\n return graphqlClient.request(GET_MANY_RESOURCES, {\n ids: ids.map(({ id }) => id),\n typename,\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n}\n","\nimport Rule from \"./Rule\"\nimport AbilityServiceResource from \"./Resource\"\n\nconst resolveMap = {\n Rule,\n AbilityServiceResource,\n}\n\n\n\nexport default resolveMap","// import create from './create';\n// import getList from './getList';\nimport getMany from './getMany';\n// import getManyReference from './getManyReference';\n// import getOne from './getOne';\n// import update from './update';\n// import deleteMutation from './delete';\n// import deleteMany from './deleteMany';\n// import remove from './remove';\n// import removeMany from './removeMany';\n// import restore from './restore';\n// import restoreMany from './restoreMany';\n\n\n\nconst Resource = {\n // create,\n // getList,\n getMany,\n // getManyReference,\n // getOne,\n // update,\n // delete: deleteMutation,\n // deleteMany,\n // remove,\n // removeMany,\n // restore,\n // restoreMany,\n\n};\n\nexport default Resource","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../../authProvider/authorizationProvider/checkToken';\nimport { URI_REPORTS_SERVICE } from '../../appsettings';\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeader('authorization', token ? `Bearer ${token}` : \"\");\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_REPORTS_SERVICE)\n\nexport default client","import gql from 'graphql-tag';\n\n\nexport const SINGLE_REPORT_FRAGMENT = gql`\n fragment SingleReportFragment on Report {\n id\n name\n type {\n id\n name\n }\n assets {\n id\n }\n description\n hasTemplate\n updatedAt\n createdAt\n createdById\n deleted\n data\n meta\n }\n`\n\nexport const MULTIPLE_REPORT_FRAGMENT = gql`\n fragment MultipleReportFragment on Report {\n id\n name\n type {\n id\n name\n }\n assets {\n id\n }\n description\n hasTemplate\n updatedAt\n createdAt\n createdById\n deleted\n data\n meta\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current?.id } } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = {\n ...data,\n name: data.deleted ? `(Удален) ${data.name}` : data.name,\n assetsIds: data.assets && data.assets.map(({ id }) => id),\n }\n\n return result;\n};\n\n\nexport const sanitizeInput = ({\n id,\n assetsIds,\n createdAt,\n createdById,\n updatedAt,\n deleted,\n type,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_REPORT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource, sanitizeInput, buildReferenceCreateInput, buildReferenceArrayCreateInput } from './utils';\n\n\n\nexport const CREATE_REPORT = gql`\n mutation createReport($input: ReportCreateInput!) {\n data: createReport(input: $input) {\n data {...SingleReportFragment}\n } \n }\n ${SINGLE_REPORT_FRAGMENT}\n`\n\nexport default (args) => {\n const { data: input } = args\n\n const type = buildReferenceCreateInput(input.type)\n const assets = buildReferenceArrayCreateInput(input.assetsIds)\n\n return graphqlClient.request(CREATE_REPORT, {\n input: {\n ...sanitizeInput(input),\n id:input.id,\n type,\n assets\n }\n }).then(response => {\n const data = response?.data?.data\n return {\n data: sanitizeResource(data),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { sanitizeInput, buildReferenceCreateInput, buildReferenceArrayCreateInput } from './utils';\n\n\nexport const CREATE_MANY_REPORTS = gql`\n mutation createManyReports($input:[ReportCreateInput!]! $onConflict: OnConflict) { \n data: createManyReports(input: $input onConflict: $onConflict) {\n count\n } \n }\n`;\n\nexport default (args) => {\n const { data, onConflict } = args;\n\n const input = data.map(item => {\n\n const type = buildReferenceCreateInput(item.type);\n const assets = buildReferenceArrayCreateInput(item.assets)\n\n return {\n ...sanitizeInput(item),\n id: item.id,\n type,\n assets\n }\n });\n\n\n return graphqlClient\n .request(CREATE_MANY_REPORTS, {\n input,\n onConflict\n })\n .then(response => {\n const count = response?.data?.count;\n return {\n data: { count }\n };\n }).catch(graphqlErrorHandler);\n};\n","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_REPORT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_LIST_REPORTS = gql`\n query getListReports($filter: ReportFilter, $sort: [ReportSort!] $page: Int, $perPage: Int) {\n data: getListReports(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n data {...MultipleReportFragment}\n pageInfo { totalItems }\n } \n }\n ${MULTIPLE_REPORT_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_REPORTS, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const data = response?.data?.data\n const pageInfo = response?.data?.pageInfo\n return {\n data: data.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_REPORT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REPORTS = gql`\n query getManyReports($ids: [ID!]!) {\n data: getManyReports(ids: $ids) {\n data {...MultipleReportFragment}\n }\n \n }\n ${MULTIPLE_REPORT_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_REPORTS, {\n ids\n }).then(response => {\n const data = response?.data?.data\n return {\n data: data.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_REPORT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_REPORTS = gql`\n query getManyReferenceReports($filter: ReportFilter, $sort: [ReportSort!] $page: Int, $perPage: Int) {\n data: getListReports(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n data {...MultipleReportFragment}\n pageInfo { totalItems }\n } \n }\n ${MULTIPLE_REPORT_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_REPORTS, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const data = response?.data?.data\n const pageInfo = response?.data?.pageInfo\n return {\n data: data.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_REPORT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_ONE_REPORT = gql`\n query getOneReport( $where: ReportWhereUniqueInput! ) {\n data: getOneReport(where: $where) {\n data {...SingleReportFragment}\n } \n }\n ${SINGLE_REPORT_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_REPORT, {\n where: { id },\n }).then(response => {\n const data = sanitizeResource(response?.data?.data)\n return {\n data\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport omit from 'lodash/omit';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_REPORT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource, buildReferenceUpdateInput, sanitizeInput, buildReferenceArrayUpdateInput } from './utils';\n\n\n\nexport const UPDATE_REPORT = gql`\n mutation updateReport($where: ReportWhereUniqueInput!, $input: ReportUpdateInput!) {\n data: updateReport(where: $where, input: $input) {\n data {...SingleReportFragment}\n }\n }\n ${SINGLE_REPORT_FRAGMENT}\n`\n\nexport default (args) => {\n const { id, data: input, previousData } = args\n\n const type = buildReferenceUpdateInput(input.type, previousData.type);\n const assets = buildReferenceArrayUpdateInput(input.assetsIds, previousData.assetsIds)\n\n return graphqlClient.request(UPDATE_REPORT, {\n where: { id },\n input: {\n ...sanitizeInput(input),\n type,\n assets\n }\n }).then(response => {\n const data = response?.data?.data\n return {\n data: sanitizeResource(data),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_REPORT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const DELETE_REPORT = gql`\n mutation deleteReport($where: ReportWhereUniqueInput!) {\n data: deleteReport(where: $where) {\n data {...SingleReportFragment}\n } \n }\n ${SINGLE_REPORT_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(DELETE_REPORT, {\n where: { id },\n }).then(response => {\n const data = response?.data?.data\n return {\n data: sanitizeResource(data),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_REPORT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const REMOVE_REPORT = gql`\n mutation removeReport($where: ReportWhereUniqueInput!) {\n data: removeReport(where: $where) {\n data { ...SingleReportFragment }\n } \n }\n ${SINGLE_REPORT_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(REMOVE_REPORT, {\n where: { id },\n }).then(response => {\n const data = response?.data?.data\n return {\n data: sanitizeResource(data),\n }\n }).catch(graphqlErrorHandler);\n}","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_REPORT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\nexport const RESTORE_REPORT = gql`\n mutation restoreReport($where: ReportWhereUniqueInput!) {\n data: restoreReport(where: $where) {\n data { ...SingleReportFragment }\n } \n }\n ${SINGLE_REPORT_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(RESTORE_REPORT, {\n where: { id },\n }).then(response => {\n const data = response?.data?.data\n return {\n data: sanitizeResource(data),\n }\n }).catch(graphqlErrorHandler);\n}","import deleteMutation from './delete';\n\n\n\nconst deleteMany = (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n deleteMutation({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};\n\nexport default deleteMany","import remove from './remove';\n\n\n\nconst removeMany = (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n remove({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};\n\nexport default removeMany","import restore from './restore';\n\n\n\nconst restoreMany = (args) => {\n const { ids } = args\n\n return Promise.all(\n ids.map(id =>\n restore({ id })\n )\n ).then(results => {\n const data = results.reduce((acc, data) => {\n const item = data?.data\n return item ? [...acc, item.id] : acc\n }, []);\n return { data };\n });\n};\n\nexport default restoreMany","import create from './create';\nimport createMany from './createMany';\nimport getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\nimport update from './update';\nimport deleteMutation from './delete';\nimport remove from './remove';\nimport restore from './restore';\nimport deleteMany from './deleteMany';\nimport removeMany from './removeMany';\nimport restoreMany from './restoreMany';\n\nconst Report = {\n create,\n createMany,\n getList,\n getMany,\n getManyReference,\n getOne,\n update,\n delete: deleteMutation,\n remove,\n restore,\n deleteMany,\n removeMany,\n restoreMany\n};\n\nexport default Report","import gql from 'graphql-tag';\n\n\nexport const SINGLE_REPORTTYPE_FRAGMENT = gql`\n fragment SingleReportTypeFragment on ReportType {\n id\n name\n }\n`\n\nexport const MULTIPLE_REPORTTYPE_FRAGMENT = gql`\n fragment MultipleReportTypeFragment on ReportType {\n id\n name\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current?.id } } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\n\nexport const sanitizeResource = data => {\n if (!data) return null\n\n const result = {\n ...data,\n name: data.deleted ? `(Удален) ${data.name}` : data.name,\n }\n\n return result;\n};\n\n\nexport const sanitizeInput = ({\n createdAt,\n createdById,\n updatedAt,\n ...sanitizedInput }) => sanitizedInput","import gql from 'graphql-tag'\nimport set from \"lodash/set\";\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_REPORTTYPE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_LIST_REPORTTYPES = gql`\n query getListReportTypes($filter: ReportTypeFilter, $sort: [ReportTypeSort!] $page: Int, $perPage: Int) {\n data: getListReportTypes(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n data {...MultipleReportTypeFragment}\n pageInfo { totalItems }\n } \n }\n ${MULTIPLE_REPORTTYPE_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order } } = args;\n\n return graphqlClient.request(GET_LIST_REPORTTYPES, {\n filter,\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const data = response?.data?.data\n const pageInfo = response?.data?.pageInfo\n return {\n data: data.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_REPORTTYPE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REPORTTYPES = gql`\n query getManyReportTypes($ids: [ID!]!) {\n data: getManyReportTypes(ids: $ids) {\n data {...MultipleReportTypeFragment}\n }\n \n }\n ${MULTIPLE_REPORTTYPE_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_REPORTTYPES, {\n ids\n }).then(response => {\n const data = response?.data?.data\n return {\n data: data.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport set from 'lodash/set';\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { MULTIPLE_REPORTTYPE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_REFERENCE_REPORTTYPES = gql`\n query getManyReferenceReportTypes($filter: ReportTypeFilter, $sort: [ReportTypeSort!] $page: Int, $perPage: Int) {\n data: getListReportTypes(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n data {...MultipleReportTypeFragment}\n pageInfo { totalItems }\n } \n }\n ${MULTIPLE_REPORTTYPE_FRAGMENT}\n`\n\nexport default (args) => {\n const { filter, pagination: { page, perPage }, sort: { field, order }, target, id } = args;\n\n return graphqlClient.request(GET_MANY_REFERENCE_REPORTTYPES, {\n filter: {\n ...filter,\n ...set({}, target, id)\n },\n sort: [set({}, field, order.toLowerCase())],\n page,\n perPage,\n }).then(response => {\n const data = response?.data?.data\n const pageInfo = response?.data?.pageInfo\n return {\n data: data.map(sanitizeResource),\n total: pageInfo.totalItems,\n }\n }).catch(graphqlErrorHandler)\n}\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { SINGLE_REPORTTYPE_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_ONE_REPORTTYPE = gql`\n query getOneReportType( $where: WhereUniqueInput! ) {\n data: getOneReportType(where: $where) {\n data {...SingleReportTypeFragment}\n } \n }\n ${SINGLE_REPORTTYPE_FRAGMENT}\n`\n\nexport default (args) => {\n const { id } = args\n\n return graphqlClient.request(GET_ONE_REPORTTYPE, {\n where: { id },\n }).then(response => {\n const data = sanitizeResource(response?.data?.data)\n return {\n data\n }\n }).catch(graphqlErrorHandler)\n}\n","import Report from \"./Report\"\nimport ReportType from \"./ReportType\"\n\nconst resolveMap = {\n Report,\n ReportType\n}\n\nexport default resolveMap","import getList from './getList';\nimport getMany from './getMany';\nimport getManyReference from './getManyReference';\nimport getOne from './getOne';\n\nconst ReportType = {\n getList,\n getMany,\n getManyReference,\n getOne\n};\n\nexport default ReportType","import buildDataProviderFactory from \"./ra-dataProviderFactory\"\nimport AuthenticationService from \"./AuthenticationService\"\nimport AuthorizationService from \"./AuthorizationService\"\nimport HistoryService from \"./HistoryService\"\nimport EventbusService from \"./EventbusService\"\nimport DatabusService from \"./DatabusService\"\nimport GatewayService from \"./GatewayService\"\nimport PreferencesService from \"./PreferencesService\"\nimport DispatcherService from \"./DispatcherService\"\nimport AbilityService from \"./AbilityService\"\nimport ReportService from \"./ReportService\"\n// import FileService from \"./FileService\"\n\n\n\nconst resolveMap = {\n ...AuthenticationService,\n ...AuthorizationService,\n ...HistoryService,\n ...GatewayService,\n ...EventbusService,\n ...DatabusService,\n ...PreferencesService,\n ...DispatcherService,\n ...AbilityService,\n ...ReportService\n // ...FileService,\n}\n\n\nconst dataProvider = buildDataProviderFactory(resolveMap);\n\nexport default dataProvider","import lodashMemoize from 'lodash/memoize';\nimport dataProvider from '../../dataProvider';\nimport { regex } from 'react-admin';\n\nconst PHONE_REGEX = /^\\+7[489][0-9]{9}$/;\nconst PASSWORD_REGEX = /^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{8,})/;\n\nconst isEmpty = (value) =>\n typeof value === 'undefined' ||\n value === null ||\n value === '' ||\n (Array.isArray(value) && value.length === 0);\n\nconst memoize = (fn) => lodashMemoize(fn, (...args) => JSON.stringify(args));\n\nconst debounce = (fn, wait, options = {}) => {\n if (!Number.isFinite(wait)) {\n throw new TypeError('Expected `wait` to be a finite number');\n }\n\n let leadingValue;\n let timeout;\n let resolveList = [];\n\n return function (...arguments_) {\n return new Promise(resolve => {\n const shouldCallNow = options.before && !timeout;\n\n clearTimeout(timeout);\n\n timeout = setTimeout(() => {\n timeout = null;\n\n const result = options.before ? leadingValue : fn.apply(this, arguments_);\n\n for (resolve of resolveList) {\n resolve(result);\n }\n\n resolveList = [];\n }, wait);\n\n if (shouldCallNow) {\n leadingValue = fn.apply(this, arguments_);\n resolve(leadingValue);\n } else {\n resolveList.push(resolve);\n }\n });\n };\n};\n\n\nexport const latitude = memoize((message = 'ra.validation.latitude') => (value, values) => {\n const isLatitude = isFinite(value) && Math.abs(value) <= 90\n return !isEmpty(value) && !isLatitude\n ? { message }\n : undefined\n})\n\nexport const longitude = memoize((message = 'ra.validation.longitude') => (value, values) => {\n const isLongitude = isFinite(value) && Math.abs(value) <= 180\n return !isEmpty(value) && !isLongitude\n ? { message }\n : undefined\n})\n\nexport const asyncUnique = memoize((resource) => debounce(async (value, allValues, props) => {\n const prewValue = props.initial;\n if ((prewValue !== undefined && prewValue === value) || value === undefined) return undefined;\n const { data } = await dataProvider.getOne(resource, { [props.name]: value });\n return !isEmpty(data) ? { message: 'ra.validation.unique', args: { value } } : undefined;\n}, 750));\n\nexport const phone = memoize((message = 'ra.validation.phone') =>\n regex(PHONE_REGEX, message)\n);\n\nexport const password = memoize((message = 'ra.validation.password') =>\n regex(PASSWORD_REGEX, message)\n);\n\nexport const passwordConfirmed = memoize((confirm, message = 'ra.validation.passwordConfirmed') => {\n return (value, allValues, props) => {\n if (value == null) return undefined\n return value === allValues[confirm]\n ? undefined\n : { message };\n }\n});","import React, { useCallback, cloneElement } from 'react';\nimport keyBy from 'lodash/keyBy';\nimport PropTypes from 'prop-types';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport InputAdornment from '@material-ui/core/InputAdornment';\n\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n useInput,\n FieldTitle,\n useTranslate,\n useChoices,\n} from 'ra-core';\n\nimport sanitizeInputRestProps from './sanitizeInputRestProps';\nimport { ResettableTextField, InputHelperText } from 'react-admin';\nimport { icons } from '../icons';\n\nconst SelectInput = (props) => {\n const {\n choices,\n allowEmpty,\n classes: classesOverride,\n className,\n disableValue,\n emptyText,\n emptyValue,\n format,\n helperText,\n label,\n loaded,\n loading,\n margin = 'dense',\n onBlur,\n onChange,\n onCreate,\n onFocus,\n options,\n optionText,\n optionValue,\n parse,\n resource,\n source,\n translateChoice,\n validate,\n InputProps = {},\n ...rest\n } = props;\n const translate = useTranslate();\n const classes = useStyles(props);\n const choicesMap = keyBy(choices, \"id\")\n\n\n const { getChoiceText, getChoiceValue, getDisableValue } = useChoices({\n optionText,\n optionValue,\n disableValue,\n translateChoice,\n });\n\n const { id, input, isRequired, meta: { touched, error, submitError } } = useInput({\n format,\n onBlur,\n onChange,\n onFocus,\n parse,\n resource,\n source,\n validate,\n ...rest,\n });\n\n\n const renderEmptyItemOption = useCallback(() => {\n return React.isValidElement(emptyText)\n ? React.cloneElement(emptyText)\n : emptyText === ''\n ? ' ' // em space, forces the display of an empty line of normal height\n : translate(emptyText, { _: emptyText });\n }, [emptyText, translate]);\n\n\n const handleChange = useCallback((event) => {\n input.onChange(event);\n }, [input]);\n\n const renderMenuItem = useCallback(\n choice => {\n return choice ? (\n <MenuItem\n key={getChoiceValue(choice)}\n value={getChoiceValue(choice)}\n disabled={getDisableValue(choice)}\n >\n <ListItemIcon>\n {choicesMap[choice?.id].icon}\n </ListItemIcon>\n {getChoiceText(choice)}\n </MenuItem>\n ) : null;\n },\n [getChoiceValue, getDisableValue, getChoiceText]\n );\n\n return (\n <>\n <ResettableTextField\n id={id}\n {...input}\n onChange={handleChange}\n select\n label={\n label !== '' &&\n label !== false && (\n <FieldTitle\n label={label}\n source={source}\n resource={resource}\n isRequired={isRequired}\n />\n )\n }\n className={`${classes.input} ${className}`}\n clearAlwaysVisible\n error={!!(touched && (error || submitError))}\n helperText={\n <InputHelperText\n touched={touched}\n error={error || submitError}\n helperText={helperText}\n />\n }\n margin={margin}\n InputProps={{\n ...InputProps,\n startAdornment: (\n <InputAdornment position=\"start\">\n {input.value && cloneElement(choicesMap[input.value]?.icon, { color: \"inherit\" })}\n </InputAdornment>\n ),\n }}\n SelectProps={{\n renderValue: (selected) => getChoiceText(choicesMap[selected])\n }}\n {...options}\n {...sanitizeRestProps(rest)}\n >\n {allowEmpty ? (\n <MenuItem\n value={emptyValue}\n key=\"null\"\n aria-label={translate('ra.action.clear_input_value')}\n title={translate('ra.action.clear_input_value')}\n >\n {renderEmptyItemOption()}\n </MenuItem>\n ) : null}\n {choices.map(renderMenuItem)}\n </ResettableTextField>\n\n </>\n );\n};\n\nSelectInput.propTypes = {\n allowEmpty: PropTypes.bool,\n emptyText: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n emptyValue: PropTypes.any,\n choices: PropTypes.arrayOf(PropTypes.object),\n classes: PropTypes.object,\n className: PropTypes.string,\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),\n options: PropTypes.object,\n optionText: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.func,\n PropTypes.element,\n ]).isRequired,\n optionValue: PropTypes.string.isRequired,\n disableValue: PropTypes.string,\n resettable: PropTypes.bool,\n resource: PropTypes.string,\n source: PropTypes.string,\n translateChoice: PropTypes.bool,\n};\n\nSelectInput.defaultProps = {\n choices: icons.sort((a, b) => a.name.localeCompare(b.name)),\n emptyText: '',\n emptyValue: '',\n options: {},\n optionText: 'name',\n optionValue: 'id',\n translateChoice: true,\n disableValue: 'disabled',\n};\n\nconst sanitizeRestProps = ({\n addLabel,\n afterSubmit,\n allowNull,\n beforeSubmit,\n choices,\n className,\n crudGetMatching,\n crudGetOne,\n data,\n filter,\n filterToQuery,\n formatOnBlur,\n isEqual,\n limitChoicesToValue,\n multiple,\n name,\n pagination,\n perPage,\n ref,\n reference,\n refetch,\n render,\n setFilter,\n setPagination,\n setSort,\n sort,\n subscription,\n type,\n validateFields,\n validation,\n value,\n ...rest\n}) => sanitizeInputRestProps(rest);\n\nconst useStyles = makeStyles(\n theme => ({\n\n input: {\n minWidth: theme.spacing(20),\n },\n }),\n { name: 'RaSelectInput' }\n);\n\nexport default SelectInput\n","import React, { useCallback } from 'react';\nimport get from 'lodash/get';\nimport { useSelector } from 'react-redux';\nimport { useForm } from 'react-final-form';\nimport { ReferenceInput, AutocompleteInput } from 'react-admin';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n\nconst AssetAssetClassReferenceInput = (props) => {\n const { change } = useForm();\n const assetClassesSelector = useSelector(state => get(state, `admin.resources.AssetClass.data`));\n\n const handleChange = useCallback((value) => {\n const assetClass = assetClassesSelector[value]\n if (assetClass) {\n change(\"icon\", assetClass.icon)\n change(\"type\", assetClass.type)\n change(\"parametersOnMapIds\", assetClass.parametersOnMap.map(({ id }) => id))\n change(\"defaultDashboard\", assetClass.defaultDashboard)\n change(\"dashboardsIds\", assetClass.dashboards.map(({ id }) => id))\n }\n }, [assetClassesSelector, change]);\n\n return (\n <ReferenceInput {...props} onChange={handleChange} >\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n );\n}\n\n\nexport default AssetAssetClassReferenceInput","import React from \"react\";\nimport {\n Create,\n SimpleForm,\n TextInput,\n NumberInput,\n ReferenceInput,\n AutocompleteInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n Toolbar,\n SaveButton\n} from \"react-admin\";\nimport Spacer from '../../lib/layout/Spacer';\nimport { required, regex, maxLength } from \"react-admin\";\nimport { asyncUnique } from '../../lib/form/validate';\nimport IconInput from '../../lib/input/IconInput';\nimport AssetAssetClassReferenceInput from './AssetAssetClassReferenceInput';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n\n\n\nconst validateId = [regex(/^[a-zA-Z0-9_]+$/), asyncUnique(\"Asset\")];\nconst validateName = [required(), maxLength(128)]\n\nconst AssetCreateToolbar = props => {\n return (\n <Toolbar {...props} >\n <SaveButton submitOnEnter={true} disabled={props.pristine} redirect=\"list\" />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <Spacer variant=\"row\" />\n </Toolbar>\n )\n};\n\nexport const AssetCreate = (props) => (\n <Create {...props}>\n <SimpleForm toolbar={<AssetCreateToolbar />}>\n <TextInput source=\"id\" validate={validateId} />\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <TextInput source=\"address\" multiline fullWidth />\n <AssetAssetClassReferenceInput source=\"assetClass.id\" reference=\"AssetClass\" label=\"resources.Asset.fields.assetClass\" allowEmpty emptyText=\"ra.boolean.false\" />\n <ReferenceInput source=\"type.id\" reference=\"AssetType\" label=\"resources.Asset.fields.type\" >\n <AutocompleteInput source=\"name\" matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <ReferenceInput source=\"defaultDashboard.id\" reference=\"Dashboard\" label=\"resources.Asset.fields.defaultDashboard\" allowEmpty emptyText=\"ra.boolean.false\" >\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <IconInput source=\"icon\" initialValue=\"AssetIcon\" />\n <ReferenceArrayInput source=\"parametersOnMapIds\" reference=\"Parameter\" label=\"resources.Asset.fields.parametersOnMap\" fullWidth initialValue={[\"GEO\", \"ALARM\"]}>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"dashboardsIds\" reference=\"Dashboard\" label=\"resources.Asset.fields.dashboards\" fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"labelsIds\" reference=\"Label\" label=\"resources.Asset.fields.labels\" filter={{ typename: \"Asset\" }} fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"filesIds\" reference=\"File\" label=\"resources.Asset.fields.files\" fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n </SimpleForm>\n </Create>\n);\n\nexport default AssetCreate;\n","import React from \"react\";\nimport {\n SimpleForm,\n TextInput,\n ReferenceInput,\n AutocompleteInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n} from \"react-admin\";\nimport { TopToolbar, ShowButton, } from 'react-admin';\nimport CloneButton from '../../lib/button/CloneButton';\nimport { Toolbar, SaveButton } from 'react-admin';\nimport Edit from \"../../lib/edit/Edit\";\nimport TitleForRecord from \"../../lib/layout/TitleForRecord\";\nimport { required, maxLength } from \"react-admin\";\nimport Spacer from '../../lib/layout/Spacer';\nimport RemoveButton from '../../lib/button/RemoveButton';\nimport AssetAssetClassReferenceInput from './AssetAssetClassReferenceInput';\nimport IconInput from '../../lib/input/IconInput';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n// import AutocompleteArrayInputCustom from '../../lib/input/AutocompleteArrayInput';\n// import AutocompleteArrayInputWithCheckbox from '../../lib/input/AutocompleteArrayInputWithCheckbox';\n\n\n\n\nconst validateName = [required(), maxLength(128)];\n\nconst AssetEditActions = ({ data, basePath, hasShow, hasCreate, permissions }) => {\n return (\n <TopToolbar>\n {hasCreate && <CloneButton basePath={basePath} record={data} />}\n {hasShow && <ShowButton basePath={basePath} record={data} />}\n </TopToolbar>\n );\n};\n\nconst AssetEditToolbar = ({ permissions, ...props }) => {\n return (\n <Toolbar {...props} >\n <SaveButton submitOnEnter={true} disabled={props.pristine} redirect=\"list\" />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <Spacer variant=\"row\" />\n {permissions.can('remove', \"Asset\") && <RemoveButton mutationMode=\"optimistic\" />}\n </Toolbar>\n )\n};\n\nexport const AssetEdit = (props) => {\n const permissions = props.permissions\n\n return (\n <Edit\n {...props}\n actions={<AssetEditActions permissions={permissions} />}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n <SimpleForm toolbar={<AssetEditToolbar permissions={permissions} />} >\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <TextInput source=\"address\" multiline fullWidth />\n <AssetAssetClassReferenceInput source=\"assetClass.id\" reference=\"AssetClass\" label=\"resources.Asset.fields.assetClass\" allowEmpty emptyText=\"ra.boolean.false\" />\n <ReferenceInput source=\"type.id\" reference=\"AssetType\" label=\"resources.Asset.fields.type\" >\n <AutocompleteInput source=\"name\" matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <IconInput source=\"icon\" initialValue=\"AssetIcon\" />\n <ReferenceArrayInput source=\"parametersOnMapIds\" reference=\"Parameter\" label=\"resources.Asset.fields.parametersOnMap\" fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceInput source=\"defaultDashboard.id\" reference=\"Dashboard\" label=\"resources.Asset.fields.defaultDashboard\" allowEmpty emptyText=\"ra.boolean.false\" >\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <ReferenceArrayInput source=\"dashboardsIds\" reference=\"Dashboard\" label=\"resources.Asset.fields.dashboards\" fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"labelsIds\" reference=\"Label\" label=\"resources.Asset.fields.labels\" filter={{ typename: \"Asset\" }} fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"filesIds\" reference=\"File\" label=\"resources.Asset.fields.files\" fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n </SimpleForm>\n </Edit>\n )\n};\n\nexport default AssetEdit;\n","import AssetIcon from '../../lib/icons/Asset';\nimport AssetList from './AssetList';\nimport AssetShow from './AssetShow';\nimport AssetCreate from './AssetCreate';\nimport AssetEdit from './AssetEdit';\n\n\nconst AssetName = \"Asset\"\n\nconst AssetResource = {\n name: AssetName,\n icon: AssetIcon,\n list: AssetList,\n show: AssetShow,\n create: AssetCreate,\n edit: AssetEdit,\n}\n\nexport default AssetResource;\n\n\nexport {\n AssetName,\n AssetIcon,\n AssetList,\n AssetShow,\n AssetCreate,\n AssetEdit,\n};","import React from \"react\";\nimport SvgIcon from \"@material-ui/core/SvgIcon\";\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path\n fill=\"currentColor\"\n d=\"M17.63,5.84C17.27,5.33 16.67,5 16,5H5A2,2 0 0,0 3,7V17A2,2 0 0,0 5,19H16C16.67,19 17.27,18.66 17.63,18.15L22,12L17.63,5.84Z\"\n />\n </SvgIcon>\n );\n}\n\nexport default Icon;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"/>\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\nimport CheckboxBlankIcon from '../icons/CheckboxBlank';\nimport { makeStyles } from '@material-ui/core/styles';\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: \"flex\",\n alignItems: \"center\"\n }\n}));\n\nconst ColorField = ({ className, record, source, hex, ...props }) => {\n\n const classes = useStyles();\n const color = get(record, source);\n if (!color) { return null };\n\n\n return (\n <div className={classes.root}>\n <CheckboxBlankIcon style={{ color: color }} />\n {hex && <Typography variant=\"body2\" className={className} {...sanitizeFieldRestProps(props)} >{color}</Typography>}\n </div>\n\n )\n};\n\nColorField.propTypes = {\n label: PropTypes.string,\n record: PropTypes.object,\n source: PropTypes.string.isRequired,\n};\n\nColorField.defaultProps = {\n addLabel: true,\n};\n\nexport default ColorField;","import React from \"react\";\nimport { SelectInput } from 'react-admin';\n\n\n\nconst choices = [\n { id: 'Asset', name: 'resources.Label.enums.typename.Asset' },\n { id: 'AssetClass', name: 'resources.Label.enums.typename.AssetClass' },\n { id: 'Dashboard', name: 'resources.Label.enums.typename.Dashboard' },\n { id: 'File', name: 'resources.Label.enums.typename.File' },\n]\n\nexport const LabelTypenameInput = (props) => (<SelectInput {...props} choices={choices} />);\n\n\n\nexport default LabelTypenameInput;","import React from \"react\";\nimport Filter from \"../../lib/list/filter/Filter\";\nimport SearchInput from \"../../lib/input/SearchInput\";\nimport QuickFilterInput from \"../../lib/input/QuickFilterInput\";\nimport BooleanInput from \"../../lib/input/BooleanInput\";\nimport LabelTypenameInput from \"./LabelTypenameInput\";\n\n\nconst LabelListFilter = (props) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <LabelTypenameInput source=\"typename\" />\n <BooleanInput source=\"isSystem\" />\n <QuickFilterInput\n source=\"deleted\"\n label=\"ra.input.deleted\"\n defaultValue={true}\n />\n\n </Filter>\n);\n\nexport default LabelListFilter;\n","import React from \"react\";\nimport MoreButton from '../../lib/button/MoreButton';\nimport ShowButtonAsMenuItem from '../../lib/button/ShowButtonAsMenuItem';\nimport EditButtonAsMenuItem from '../../lib/button/EditButtonAsMenuItem';\nimport CloneButtonAsMenuItem from '../../lib/button/CloneButtonAsMenuItem';\nimport RemoveButtonAsMenuItem from '../../lib/button/RemoveButtonAsMenuItem';\nimport RestoreButtonAsMenuItem from '../../lib/button/RestoreButtonAsMenuItem';\nimport DeleteButtonAsMenuItem from '../../lib/button/DeleteButtonAsMenuItem';\nimport permissions from \"../../authProvider/abilityProvider\";\n\n\n\nconst LabelMoreActionsButton = (props) => {\n const { resource, record } = props\n const deleted = record?.deleted\n const isSystem = record?.isSystem\n\n return (\n <MoreButton {...props}>\n {permissions.can('getOne', resource) && <ShowButtonAsMenuItem />}\n {permissions.can('update', resource) && <EditButtonAsMenuItem />}\n {permissions.can('create', resource) && <CloneButtonAsMenuItem />}\n {permissions.can('remove', resource) && !deleted && !isSystem && <RemoveButtonAsMenuItem />}\n {permissions.can('restore', resource) && deleted && !isSystem && <RestoreButtonAsMenuItem />}\n {permissions.can('restore', resource) && deleted && !isSystem && <DeleteButtonAsMenuItem />}\n </MoreButton>\n );\n}\n\n\nexport default LabelMoreActionsButton;\n","import { dateFormatter, booleanFormatter, enumFormatter, linkFormatter } from '../../lib/exporter';\nimport { dateParser, linkParser, booleanParser } from '../../lib/importer';\n\n// https://github.com/prisma/prisma/issues/5066\n\nconst model = [\n { key: \"id\", header: \"resources.Label.fields.id\" },\n { key: \"name\", header: \"resources.Label.fields.name\" },\n { key: \"description\", header: \"resources.Label.fields.description\" },\n { key: \"createdAt\", header: \"resources.Label.fields.createdAt\", format: dateFormatter, parse: dateParser },\n { key: \"updatedAt\", header: \"resources.Label.fields.updatedAt\", format: dateFormatter, parse: dateParser },\n { key: \"deleted\", header: \"resources.Label.fields.deleted\", format: booleanFormatter, parse: booleanParser },\n { key: \"color\", header: \"resources.Label.fields.color\" },\n { key: \"isSystem\", header: \"resources.Label.fields.isSystem\", format: booleanFormatter, parse: booleanParser },\n { key: \"typename\", header: \"resources.Label.fields.typename\" },\n { key: \"resources[index].id\", header: [\"resources.Label.fields.resources\", \"resources.Dashboard.fields.id\"] },\n { key: \"link\", header: \"Ccылка\", format: linkFormatter(\"Label\", \"id\"), parse: linkParser },\n]\n\nexport default model;","import React from \"react\";\nimport {\n Datagrid,\n TextField,\n DateField,\n BooleanField,\n} from \"react-admin\";\nimport List from \"../../lib/list/List\";\nimport ListActions from \"../../lib/list/ListActions\";\nimport ResourceLinkField from \"../../lib/field/ResourceLinkField\";\nimport ColorField from \"../../lib/field/ColorField\";\nimport EnumField from \"../../lib/field/EnumField\";\nimport LabelListFilter from \"./LabelListFilter\";\nimport useListStyles from \"../../lib/list/useListStyles\";\nimport useColumns from '../../lib/list/useColumns';\nimport useDatagridColumns from '../../lib/list/useDatagridColumns';\nimport LabelMoreActionsButton from './LabelMoreActionsButton';\nimport model from \"./labelExportImportModel\";\nimport useExporter from \"../../lib/exporter\";\n\n\n\nconst LabelList = (props) => {\n const classes = useListStyles();\n const exporter = useExporter(model)\n\n const columns = useColumns([\n <ResourceLinkField source=\"name\" alwaysOn cellClassName={classes.celllLineClamp} />,\n <TextField source=\"description\" cellClassName={classes.celllLineClamp} />,\n <EnumField source=\"typename\" />,\n <ColorField source=\"color\" hex sortable={false} />,\n <BooleanField source=\"isSystem\" sortable={false} />,\n <DateField source=\"createdAt\" cellClassName={classes.cellMinWidth} />,\n <DateField source=\"updatedAt\" cellClassName={classes.cellMinWidth} />,\n ]);\n\n const DatagridColumns = useDatagridColumns(columns)\n\n return (\n <List\n {...props}\n actions={<ListActions columns={columns} />}\n exporter={exporter}\n filters={<LabelListFilter />}\n >\n <Datagrid>\n {DatagridColumns}\n <LabelMoreActionsButton cellClassName={`${classes.cellMinWidth} ${classes.cellButton}`} />\n </Datagrid>\n </List>\n );\n};\n\nLabelList.defaultProps = {\n filter: { typename_in: [\"Asset\", \"AssetClass\", \"AssetDatagrid\", \"AssetMap\", \"Tag\", \"Event\", \"EventHistory\", \"TagHistory\", \"Dashboard\", \"Widget\", \"WidgetOnDashboard\", \"File\", \"Catalog\", \"Parameter\"] },\n sort: { field: \"name\", order: \"ASC\" },\n};\n\n\n\nexport default LabelList;\n","import React from \"react\";\nimport get from 'lodash/get';\nimport { ChipField, ReferenceArrayField, SingleFieldList } from 'react-admin';\n\n\n\n\n\n\nexport const LabelResourcesReferenceArrayField = (props) => {\n\n const { record } = props;\n const reference = get(record, \"typename\")\n\n return (\n\n <ReferenceArrayField {...props} reference={reference}>\n <SingleFieldList linkType=\"show\">\n <ChipField source=\"name\" />\n </SingleFieldList>\n </ReferenceArrayField>\n )\n\n};\n\nLabelResourcesReferenceArrayField.defaultProps = {\n addLabel: true,\n};\n\n\nexport default LabelResourcesReferenceArrayField;","import React from \"react\";\nimport {\n ShowContextProvider,\n ResourceContextProvider,\n useShowController,\n BooleanField,\n DateField,\n TextField,\n TopToolbar,\n EditButton,\n} from \"react-admin\";\nimport ColorField from '../../lib/field/ColorField'\nimport { dateTimeOptions } from '../../utils';\nimport TextCopyField from '../../lib/field/TextCopyField';\nimport CloneButton from '../../lib/button/CloneButton';\n\nimport { ShowView } from \"../../lib/show/ShowView\";\nimport SimpleShowLayout from \"../../lib/show/SimpleShowLayout\";\nimport TitleForRecord from \"../../lib/layout/TitleForRecord\";\nimport EnumField from \"../../lib/field/EnumField\";\n// import NestedField from \"../../lib/field/NestedField\";\n// import NestedArrayField from \"../../lib/field/NestedArrayField\";\nimport LabelResourcesReferenceArrayField from \"./LabelResourcesReferenceArrayField\";\n\nconst LabelShowActions = ({ basePath, data, hasEdit, hasCreate }) => {\n return (\n <TopToolbar>\n {hasCreate && <CloneButton basePath={basePath} record={data} />}\n {hasEdit && <EditButton basePath={basePath} record={data} />}\n </TopToolbar>\n );\n};\n\nexport const LabelShow = (props) => {\n const controllerProps = useShowController(props);\n const { record } = controllerProps\n const typename = record?.typename\n\n\n return (\n <ResourceContextProvider value={props.resource}>\n <ShowContextProvider value={controllerProps}>\n <ShowView\n {...props}\n actions={<LabelShowActions />}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <EnumField source=\"typename\" />\n <ColorField source=\"color\" showLabel=\"true\" hex />\n <BooleanField source=\"isSystem\" />\n <TextField source=\"createdById\" />\n <DateField source=\"createdAt\" options={dateTimeOptions} />\n <DateField source=\"updatedAt\" options={dateTimeOptions} />\n <TextCopyField source=\"id\" />\n <LabelResourcesReferenceArrayField source=\"resourcesIds\" label={`resources.Label.enums.resources.${typename}`} />\n </SimpleShowLayout>\n </ShowView>\n </ShowContextProvider>\n </ResourceContextProvider>\n\n );\n};\n\nexport default LabelShow;\n","import React from \"react\";\nimport get from 'lodash/get';\nimport { useForm, useFormState } from 'react-final-form';\nimport { ReferenceArrayInput, AutocompleteArrayInput } from 'react-admin';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n\n\n\n\nexport const LabelResourcesReferenceArrayInput = (props) => {\n\n const { values } = useFormState();\n const reference = get(values, \"typename\")\n const label = `resources.Label.enums.resources.${reference}`\n\n if (!reference) return null\n\n return (\n <ReferenceArrayInput {...props} reference={reference} label={label}>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n )\n\n};\n\n\n\nexport default LabelResourcesReferenceArrayInput;","import React from \"react\";\nimport { Create, SimpleForm, TextInput, Toolbar,SaveButton } from 'react-admin';\nimport { required, regex, maxLength } from 'react-admin';\nimport ColorInput from \"../../lib/input/ColorInput\";\nimport BooleanInput from \"../../lib/input/BooleanInput\";\nimport LabelTypenameInput from \"./LabelTypenameInput\";\nimport LabelResourcesReferenceArrayInput from \"./LabelResourcesReferenceArrayInput\";\nimport Spacer from '../../lib/layout/Spacer';\n\n\nconst validateId = [regex(/[a-zA-Z0-9_]{0,26}$/)];\nconst validateName = [required(), maxLength(128)];\nconst validateTypeName = [required()];\n\nconst LabelCreateToolbar = props => {\n return (\n <Toolbar {...props} >\n <SaveButton submitOnEnter={true} disabled={props.pristine} redirect=\"list\" />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <Spacer variant=\"row\" />\n </Toolbar>\n )\n };\n \n\n\nexport const LabelCreate = (props) => (\n <Create {...props}>\n <SimpleForm toolbar={<LabelCreateToolbar />}>\n {/*<TextInput source=\"id\" validate={validateId} />*/}\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <LabelTypenameInput source=\"typename\" validate={validateTypeName} />\n <ColorInput source=\"color\" defaultValue=\"#9e9e9e\" />\n <BooleanInput source=\"isSystem\" defaultValue={false} />\n <LabelResourcesReferenceArrayInput source=\"resourcesIds\" fullWidth />\n </SimpleForm>\n </Create>\n);\n\n\n\nexport default LabelCreate;","import React from \"react\";\nimport { SimpleForm, TextInput } from \"react-admin\";\nimport { TopToolbar, ShowButton } from 'react-admin';\nimport { Toolbar, SaveButton } from 'react-admin';\nimport { required, maxLength } from \"react-admin\";\nimport CloneButton from '../../lib/button/CloneButton';\nimport Edit from \"../../lib/edit/Edit\";\nimport TitleForRecord from \"../../lib/layout/TitleForRecord\";\nimport Spacer from '../../lib/layout/Spacer';\nimport RemoveButton from '../../lib/button/RemoveButton';\nimport ColorInput from \"../../lib/input/ColorInput\";\nimport BooleanInput from \"../../lib/input/BooleanInput\";\nimport LabelTypenameInput from \"./LabelTypenameInput\";\nimport LabelResourcesReferenceArrayInput from \"./LabelResourcesReferenceArrayInput\";\n\n\n\nconst validateName = [required(), maxLength(128)];\nconst validateTypeName = [required()];\n\nconst LabelEditActions = ({ data, basePath, hasShow, hasCreate }) => {\n return (\n <TopToolbar>\n {hasCreate && <CloneButton basePath={basePath} record={data} />}\n {hasShow && <ShowButton basePath={basePath} record={data} />}\n </TopToolbar>\n );\n};\n\nconst LabelEditToolbar = props => {\n return (\n <Toolbar {...props} >\n <SaveButton submitOnEnter={true} disabled={props.pristine} redirect=\"list\" />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <Spacer variant=\"row\" />\n {!props.record.isSystem && <RemoveButton mutationMode=\"optimistic\" />}\n </Toolbar>\n )\n};\n\nexport const LabelEdit = (props) => {\n return (\n <Edit\n {...props}\n actions={<LabelEditActions />}\n title={<TitleForRecord source=\"name\" {...props} />}\n undoable={false}\n >\n <SimpleForm toolbar={<LabelEditToolbar />}>\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <ColorInput source=\"color\" defaultValue=\"#9e9e9e\" />\n <BooleanInput source=\"isSystem\" defaultValue={false} />\n <LabelResourcesReferenceArrayInput source=\"resourcesIds\" fullWidth />\n </SimpleForm>\n </Edit>\n );\n};\n\nexport default LabelEdit;\n","import LabelIcon from \"../../lib/icons/Label\";\nimport LabelList from \"./LabelList\";\nimport LabelShow from \"./LabelShow\";\nimport LabelCreate from \"./LabelCreate\";\nimport LabelEdit from \"./LabelEdit\";\n\nconst LabelName = \"Label\";\n\nconst LabelResource = {\n name: LabelName,\n icon: LabelIcon,\n list: LabelList,\n show: LabelShow,\n create: LabelCreate,\n edit: LabelEdit,\n};\n\nexport default LabelResource;\n\nexport { LabelName, LabelIcon, LabelList, LabelShow, LabelCreate, LabelEdit };\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M21,16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V7.5C3,7.12 3.21,6.79 3.53,6.62L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.79,6.79 21,7.12 21,7.5V16.5M12,4.15L6.04,7.5L12,10.85L17.96,7.5L12,4.15M5,15.91L11,19.29V12.58L5,9.21V15.91M19,15.91V9.21L13,12.58V19.29L19,15.91Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from \"react\";\nimport Filter from \"../../lib/list/filter/Filter\";\nimport SearchInput from '../../lib/input/SearchInput';\nimport QuickFilterInput from '../../lib/input/QuickFilterInput';\nimport ProfileReferenceInput from '../Profile/ProfileReferenceInput';\nimport { AutocompleteArrayInput, ReferenceArrayInput, ReferenceInput, AutocompleteInput } from \"react-admin\";\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\nconst AssetClassListFilter = (props) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <ReferenceInput source=\"type.id\" reference=\"AssetType\" label=\"resources.Asset.fields.type\">\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <QuickFilterInput source=\"favorite\" label=\"resources.AssetClass.fields.favorite\" defaultValue={true} />\n <ReferenceArrayInput source=\"labelsAndIds\" allowEmpty={false} reference=\"Label\" filter={{ typename: \"AssetClass\" }} label=\"resources.AssetClass.fields.labelsAndIds\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"labelsNotAndIds\" allowEmpty={false} reference=\"Label\" filter={{ typename: \"AssetClass\" }} label=\"resources.AssetClass.fields.labelsNotAndIds\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ProfileReferenceInput source=\"createdById\" label=\"resources.AssetClass.fields.createdBy\" reference=\"Profile\" resettable sort={{ field: 'name', order: 'ASC' }} />\n <QuickFilterInput source=\"deleted\" label=\"ra.input.deleted\" defaultValue={true} />\n </Filter>\n);\n\n\n\nexport default AssetClassListFilter;","import React from \"react\";\nimport MoreButton from '../../lib/button/MoreButton';\nimport ShowButtonAsMenuItem from '../../lib/button/ShowButtonAsMenuItem';\nimport EditButtonAsMenuItem from '../../lib/button/EditButtonAsMenuItem';\nimport CloneButtonAsMenuItem from '../../lib/button/CloneButtonAsMenuItem';\nimport RemoveButtonAsMenuItem from '../../lib/button/RemoveButtonAsMenuItem';\nimport RestoreButtonAsMenuItem from '../../lib/button/RestoreButtonAsMenuItem';\nimport DeleteButtonAsMenuItem from '../../lib/button/DeleteButtonAsMenuItem';\nimport permissions from \"../../authProvider/abilityProvider\";\n\n\n\nconst cloneOmit = [\"id\", \"assets\", \"assetsIds\"];\n\nconst AssetClassMoreActionsButton = (props) => {\n const { resource, record } = props\n const deleted = record?.deleted\n\n return (\n <MoreButton {...props}>\n {permissions.can('getOne', resource) && <ShowButtonAsMenuItem />}\n {permissions.can('update', resource) && <EditButtonAsMenuItem />}\n {permissions.can('create', resource) && <CloneButtonAsMenuItem omit={cloneOmit} />}\n {permissions.can('remove', resource) && !deleted && <RemoveButtonAsMenuItem />}\n {permissions.can('restore', resource) && deleted && <RestoreButtonAsMenuItem />}\n {permissions.can('restore', resource) && deleted && <DeleteButtonAsMenuItem />}\n </MoreButton>\n );\n}\n\nexport default AssetClassMoreActionsButton;\n","import { dateFormatter, booleanFormatter, enumFormatter, linkFormatter } from '../../lib/exporter';\nimport { dateParser, linkParser, booleanParser } from '../../lib/importer';\n\n// https://github.com/prisma/prisma/issues/5066\n\nconst model = [\n { key: \"id\", header: \"resources.AssetClass.fields.id\" },\n { key: \"name\", header: \"resources.AssetClass.fields.name\" },\n { key: \"description\", header: \"resources.AssetClass.fields.description\" },\n { key: \"createdAt\", header: \"resources.AssetClass.fields.createdAt\", format: dateFormatter, parse: dateParser },\n { key: \"updatedAt\", header: \"resources.AssetClass.fields.updatedAt\", format: dateFormatter, parse: dateParser },\n { key: \"deleted\", header: \"resources.AssetClass.fields.deleted\", format: booleanFormatter, parse: booleanParser },\n { key: \"type.name\", header: [\"resources.AssetClass.fields.type\", \"resources.AssetType.fields.name\"] },\n { key: \"type.id\", header: [\"resources.AssetClass.fields.type\", \"resources.AssetType.fields.id\"] },\n { key: \"defaultDashboard.name\", header: [\"resources.AssetClass.fields.defaultDashboard\", \"resources.Dashboard.fields.name\"] },\n { key: \"defaultDashboard.id\", header: [\"resources.AssetClass.fields.defaultDashboard\", \"resources.Dashboard.fields.id\"] },\n { key: \"dashboards[index].name\", header: [\"resources.AssetClass.fields.dashboards\", \"resources.Dashboard.fields.name\"] },\n { key: \"dashboards[index].id\", header: [\"resources.AssetClass.fields.dashboards\", \"resources.Dashboard.fields.id\"] },\n { key: \"assets[index].name\", header: [\"resources.AssetClass.fields.assets\", \"resources.Asset.fields.name\"] },\n { key: \"assets[index].id\", header: [\"resources.AssetClass.fields.assets\", \"resources.Asset.fields.id\"] },\n // { key: \"parametersOnMap[index].name\", header: [\"resources.AssetClass.fields.parametersOnMap\", \"resources.Parameter.fields.name\"] },\n { key: \"parametersOnMap[index].id\", header: [\"resources.AssetClass.fields.parametersOnMap\", \"resources.Parameter.fields.id\"] },\n { key: \"link\", header: \"Ccылка\", format: linkFormatter(\"AssetClass\", \"id\"), parse: linkParser },\n]\n\nexport default model;","import React from \"react\";\nimport { Datagrid, TextField, DateField } from 'react-admin';\nimport List from '../../lib/list/List';\nimport ListActions from '../../lib/list/ListActions';\nimport ResourceLinkField from '../../lib/field/ResourceLinkField';\nimport useListStyles from '../../lib/list/useListStyles';\nimport useColumns from '../../lib/list/useColumns';\nimport useDatagridColumns from '../../lib/list/useDatagridColumns';\nimport AssetClassListFilter from './AssetClassListFilter';\nimport AssetClassMoreActionsButton from './AssetClassMoreActionsButton';\nimport model from \"./assetClassExportImportModel\";\nimport useExporter from \"../../lib/exporter\";\nimport useImporter from \"../../lib/importer\";\nimport FavoriteIconButton from \"../../lib/button/FavoriteIconButton\";\nimport WrapperField from \"../../lib/field/WrapperField\";\nimport NestedField from \"../../lib/field/NestedField\";\nimport NestedArrayField from \"../../lib/field/NestedArrayField\";\nimport LabelChip from \"../Label/LabelChip\";\n\n\n\nexport const AssetClassList = (props) => {\n const classes = useListStyles()\n const exporter = useExporter(model)\n const importer = useImporter(model)\n\n const columns = useColumns([\n <ResourceLinkField source=\"name\" alwaysOn cellClassName={classes.celllLineClamp} />,\n <TextField source=\"description\" cellClassName={classes.celllLineClamp} />,\n <NestedField source=\"type\" reference=\"AssetType\" sortBy=\"type.name\" link={false} >\n <TextField source=\"name\" />\n </NestedField>,\n <NestedArrayField source=\"labels\" reference=\"Label\" sortable={false}>\n <LabelChip source=\"name\" size=\"small\" />\n </NestedArrayField>,\n <DateField source=\"createdAt\" cellClassName={classes.cellMinWidth} />,\n <DateField source=\"updatedAt\" cellClassName={classes.cellMinWidth} />,\n ]);\n\n const DatagridColumns = useDatagridColumns(columns)\n\n return (\n <List\n {...props}\n actions={<ListActions columns={columns} />}\n exporter={exporter}\n importer={importer}\n filters={<AssetClassListFilter />}\n >\n <Datagrid>\n {DatagridColumns}\n <WrapperField cellClassName={`${classes.cellMinWidth} ${classes.cellButton}`}>\n <FavoriteIconButton />\n <AssetClassMoreActionsButton />\n </WrapperField>\n </Datagrid>\n </List>\n )\n};\n\n\nAssetClassList.defaultProps = {\n sort: { field: \"name\", order: \"ASC\" },\n}\n\n\nexport default AssetClassList;","import React, { Fragment, useState, useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport MuiButton from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport DeployIcon from '../../lib/icons/Deploy';\nimport {\n useTranslate,\n useResourceContext,\n fetchEnd,\n fetchStart,\n useRefresh,\n useNotify,\n Button\n} from 'react-admin';\nimport deploy from '../../dataProvider/GatewayService/AssetClass/deploy';\n\n\n\nconst stopPropagation = event => event.stopPropagation();\n\nconst DeployButton = (props) => {\n const {\n basePath = '',\n label = 'ra.action.deploy',\n record,\n icon = defaultIcon,\n ...rest\n } = props;\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false)\n const dispatch = useDispatch()\n const refresh = useRefresh();\n const notify = useNotify();\n const resource = useResourceContext();\n const translate = useTranslate();\n\n const handleOpen = useCallback((event) => {\n stopPropagation(event)\n setOpen(true);\n\n }, [setOpen]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleDeploy = useCallback(event => {\n dispatch(fetchStart())\n setLoading(true)\n\n deploy({ id: record.id, data: record })\n .then(response => {\n notify('ra.notification.deploed', { messageArgs: { smart_count: 1 } });\n })\n .catch(error => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', { type: 'warning' });\n refresh();\n })\n .finally(() => {\n dispatch(fetchEnd());\n setLoading(false);\n setOpen(false);\n });\n }, [deploy, record, dispatch, setLoading, setOpen]);\n\n if (!record) return null\n\n const disabled = !(record.id && record.assetsIds && Array.isArray(record.assetsIds) && record.assetsIds.length > 0)\n const displayedLabel = label && translate(label, { _: label });\n return (\n <Fragment>\n <Button\n\n onClick={handleOpen}\n color={loading ? 'default' : 'primary'}\n aria-label={displayedLabel}\n disabled={disabled || loading}\n label={displayedLabel}\n {...rest}\n >\n {icon}\n </Button>\n <Dialog\n open={open}\n onClose={handleClose}\n aria-labelledby=\"deploy_title\"\n aria-describedby=\"deploy_content\"\n >\n <DialogTitle id=\"deploy_title\">\n {translate(\"ra.message.deploy_title\", { name: record.name })}\n </DialogTitle>\n <DialogContent>\n <DialogContentText id=\"deploy_content\">\n {translate(\"ra.message.deploy_content\", { name: record.name })}\n </DialogContentText>\n <DialogContentText>\n {translate(\"ra.message.deploy_question\", { name: record.name })}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <MuiButton\n disabled={loading}\n onClick={handleClose}\n >\n {translate(\"ra.action.cancel\", { _: \"Cancel\" })}\n </MuiButton>\n <MuiButton\n disabled={loading}\n onClick={handleDeploy}\n color=\"primary\"\n autoFocus>\n {displayedLabel}\n </MuiButton>\n </DialogActions>\n </Dialog>\n </Fragment>\n\n );\n};\n\nconst defaultIcon = <DeployIcon />;\n\nDeployButton.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n};\n\n\n\nexport default DeployButton;\n","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport \"leaflet/dist/leaflet.css\";\nimport { MapContainer, TileLayer, Marker, Popup } from 'react-leaflet'\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport { LeafletMarkerIcon } from '../map/MapMarker';\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n width: \"100%\",\n height: 192\n },\n}), { name: 'MapField' });\n\nexport const MapField = memo(({ record, source, className, ...props }) => {\n const classes = useStyles();\n const coordinates = get(record, source);\n const name = get(record, [\"name\"]);\n const description = get(record, [\"description\"]);\n if (!coordinates) return null;\n // const isLatlon = latLonRegex.test(coordinates)\n const latlong = coordinates.split(',');\n const latitude = parseFloat(latlong[0]);\n const longitude = parseFloat(latlong[1]);\n const position = { lat: latitude, lng: longitude }\n\n\n var mapOptions = {\n zoom: 13,\n center: position,\n attributionControl: false\n };\n\n // if (!isLatlon) return \"Формат записи не поддерживается\"\n\n return (\n <MapContainer {...mapOptions} className={classnames(classes.root, className)} >\n <TileLayer\n attribution='© <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors'\n url=\"https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png\"\n />\n <Marker\n id={record.id}\n position={position}\n icon={LeafletMarkerIcon()}\n >\n <Popup>\n <Typography variant='subtitle2'>{name}</Typography>\n <Typography variant='body2' component=\"span\" style={{ display: \"block\" }} gutterBottom>{description}</Typography>\n <Typography variant='caption' color=\"textSecondary\" style={{ display: \"block\" }}>{coordinates}</Typography>\n </Popup>\n </Marker>\n </MapContainer>\n )\n});\n\nMapField.defaultProps = {\n addLabel: true,\n};\n\n\n\nexport default MapField;\n","import React from \"react\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport { DateField, TextField, ReferenceField } from 'react-admin';\nimport SimpleShowLayout from '../../lib/show/SimpleShowLayout';\nimport TextCopyField from '../../lib/field/TextCopyField';\nimport NestedField from '../../lib/field/NestedField';\nimport MapField from '../../lib/field/MapField';\nimport { dateTimeOptions } from '../../utils';\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n width: theme.spacing(45)\n },\n}));\n\nconst AssetdAside = (props) => {\n const classes = useStyles();\n\n return (\n <SimpleShowLayout\n {...props}\n className={classes.root}\n component=\"div\"\n >\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <ReferenceField source=\"createdById\" reference=\"Profile\" label=\"resources.AssetClass.fields.createdBy\" link={false}>\n <TextField source=\"name\" />\n </ReferenceField>\n <DateField source=\"createdAt\" options={dateTimeOptions} />\n <DateField source=\"updatedAt\" options={dateTimeOptions} />\n <TextCopyField source=\"id\" />\n </SimpleShowLayout>\n )\n}\n\nexport default AssetdAside;","import React from \"react\";\nimport { ChipField, TextField, TopToolbar, EditButton, ReferenceArrayField, SingleFieldList, } from 'react-admin';\nimport Show from '../../lib/show/Show';\nimport CloneButton from '../../lib/button/CloneButton';\nimport SimpleShowLayout from '../../lib/show/SimpleShowLayout';\nimport TitleForRecord from '../../lib/layout/TitleForRecord';\nimport DeployButton from '../../lib/button/DeployButton';\nimport AssetClassAside from './AssetClassAside';\nimport NestedField from '../../lib/field/NestedField';\nimport IconField from '../../lib/field/IconField';\nimport NestedArrayField from '../../lib/field/NestedArrayField';\nimport FavoriteButton from \"../../lib/button/FavoriteButton\";\nimport LabelChip from \"../Label/LabelChip\";\n\n\nconst AssetClassShowActions = ({ basePath, data, hasEdit, hasCreate }) => {\n return (\n <TopToolbar>\n <FavoriteButton basePath={basePath} record={data} resource=\"AssetClass\" />\n <DeployButton basePath={basePath} record={data} />\n {hasCreate && <CloneButton basePath={basePath} record={data} />}\n {hasEdit && <EditButton basePath={basePath} record={data} />}\n </TopToolbar>\n )\n};\n\nexport const AssetClassShow = (props) => {\n\n return (\n <Show\n {...props}\n actions={<AssetClassShowActions />}\n aside={<AssetClassAside />}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n <SimpleShowLayout>\n <NestedField source=\"type\" reference=\"AssetType\" link={false} >\n <TextField source=\"name\" />\n </NestedField>\n <IconField source=\"icon\" withName />\n <ReferenceArrayField source=\"parametersOnMapIds\" reference=\"Parameter\" label=\"resources.AssetClass.fields.parametersOnMap\">\n <SingleFieldList linkType={false}>\n <ChipField source=\"name\" />\n </SingleFieldList>\n </ReferenceArrayField>\n <NestedField source=\"defaultDashboard\" reference=\"Dashboard\" label=\"resources.AssetClass.fields.defaultDashboard\" link=\"show\" >\n <TextField source=\"name\" />\n </NestedField>\n <NestedArrayField source=\"dashboards\" reference=\"Dashboard\" label=\"resources.AssetClass.fields.dashboards\" link=\"show\" >\n <ChipField source=\"name\" />\n </NestedArrayField>\n <NestedArrayField source=\"labels\" reference=\"Label\">\n <LabelChip source=\"name\" />\n </NestedArrayField>\n </SimpleShowLayout>\n <SimpleShowLayout label=\"resources.AssetClass.fields.relatedAssets\">\n <NestedArrayField source=\"assets\" reference=\"Asset\" link=\"show\" take={10} >\n <ChipField source=\"name\" />\n </NestedArrayField>\n </SimpleShowLayout>\n </Show>\n )\n};\n\n\n\nexport default AssetClassShow;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M15 9H5V5h10v4Zm2-6H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.18c.18-.75.52-1.46 1.13-2.07.3-.3.64-.54.99-.71a2.82 2.82 0 0 1-.96-2.34 2.6 2.6 0 0 1 2.36-2.4l1.79-.18a13.87 13.87 0 0 1 3.2-3.55A8.95 8.95 0 0 1 21 8.08V7l-4-4Zm-3.04 17.04c.55.55 1.55 1.55 2.13 1.13l.36-.26.72 1.3c.36.66 1.3.59 1.36-.1l.27-2.74c2.97-1.92 5.53-3.83 5.17-8.64a.76.76 0 0 0-.7-.7c-4.8-.36-6.71 2.2-8.64 5.17l-2.73.27c-.7.06-.77 1-.11 1.36l1.3.72-.26.36c-.42.58.58 1.58 1.13 2.13Zm-3.91 3.91c1.83.13 2.9.04 3.6-.67.71-.7.63-1.94-.18-2.75-.8-.81-2.04-.9-2.75-.18-.71.7-.8 1.77-.67 3.6Zm11.25-8.31a2.08 2.08 0 1 1-2.94-2.94 2.08 2.08 0 0 1 2.94 2.94Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React, { cloneElement, Fragment, useState, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { makeStyles } from '@material-ui/core/styles';\nimport SaveAndDeploy from '../../lib/icons/SaveAndDeploy';\nimport classnames from 'classnames';\nimport {\n useTranslate,\n useNotify,\n useSaveContext,\n useFormContext,\n} from 'ra-core';\n\n\n\nconst SaveAndDeployButton = (props) => {\n const {\n className,\n classes: classesOverride,\n invalid,\n label = 'ra.action.save_and_deploy',\n disabled,\n redirect,\n saving,\n submitOnEnter,\n variant = 'contained',\n icon = defaultIcon,\n onClick,\n handleSubmitWithRedirect,\n onSave,\n onSuccess,\n onFailure,\n transform,\n record,\n ...rest\n } = props;\n const [open, setOpen] = useState(false);\n const classes = useStyles(props);\n const notify = useNotify();\n const translate = useTranslate();\n const formContext = useFormContext();\n const { setOnSuccess, setOnFailure, setTransform } = useSaveContext(props);\n\n const handleOpen = useCallback(() => {\n if (invalid) {\n notify('ra.message.invalid_form', { type: 'warning' });\n } else {\n setOpen(true);\n }\n\n }, [invalid, setOpen]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleClick = event => {\n // deprecated: use onSuccess and transform instead of onSave\n if (typeof onSave === 'function') {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n '<SaveButton onSave> prop is deprecated, use the onSuccess prop instead.'\n );\n if (!formContext || !formContext.setOnSave) {\n console.warn(\n 'Using <SaveButton> outside a FormContext is deprecated.'\n );\n }\n }\n if (formContext && formContext.setOnSave) {\n formContext.setOnSave(onSave);\n }\n } else {\n if (\n process.env.NODE_ENV !== 'production' &&\n (!formContext || !formContext.setOnSave)\n ) {\n console.warn(\n 'Using <SaveButton> outside a FormContext is deprecated.'\n );\n }\n\n if (formContext && formContext.setOnSave) {\n // we reset to the Form default save function\n formContext.setOnSave();\n }\n }\n if (onSuccess) {\n setOnSuccess(onSuccess);\n }\n if (onFailure) {\n setOnFailure(onFailure);\n }\n if (transform) {\n setTransform(transform);\n }\n if (saving) {\n // prevent double submission\n event.preventDefault();\n } else {\n if (invalid) {\n notify('ra.message.invalid_form', { type: 'warning' });\n }\n // always submit form explicitly regardless of button type\n if (event) {\n event.preventDefault();\n }\n handleSubmitWithRedirect(redirect);\n setOpen(false);\n }\n\n if (typeof onClick === 'function') {\n onClick(event);\n }\n };\n\n const type = submitOnEnter ? 'submit' : 'button';\n const displayedLabel = label && translate(label, { _: label });\n return (\n <Fragment>\n <Button\n className={classnames(classes.button, className)}\n variant={variant}\n type={type}\n onClick={handleOpen}\n color={saving ? 'default' : 'primary'}\n aria-label={displayedLabel}\n disabled={disabled}\n {...sanitizeButtonRestProps(rest)}\n >\n {saving ? (\n <CircularProgress\n size={18}\n thickness={2}\n className={classes.leftIcon}\n />\n ) : (\n cloneElement(icon, {\n className: classnames(classes.leftIcon, classes.icon),\n })\n )}\n {displayedLabel}\n </Button>\n <Dialog\n open={open}\n onClose={handleClose}\n aria-labelledby=\"save_and_deploy_title\"\n aria-describedby=\"save_and_deploy_content\"\n >\n <DialogTitle id=\"save_and_deploy_title\">\n {translate(\"ra.message.save_and_deploy_title\", { name: record.name })}\n </DialogTitle>\n <DialogContent>\n <DialogContentText id=\"save_and_deploy_content\">\n {translate(\"ra.message.save_and_deploy_content\", { name: record.name })}\n </DialogContentText>\n <DialogContentText>\n {translate(\"ra.message.save_and_deploy_question\", { name: record.name })}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n disabled={saving}\n onClick={handleClose}\n >\n {translate(\"ra.action.cancel\", { _: \"Cancel\" })}\n </Button>\n <Button\n disabled={saving}\n onClick={handleClick}\n color=\"primary\"\n autoFocus>\n {displayedLabel}\n </Button>\n </DialogActions>\n </Dialog>\n </Fragment>\n\n );\n};\n\nconst defaultIcon = <SaveAndDeploy />;\n\nconst useStyles = makeStyles(\n theme => ({\n button: {\n position: 'relative',\n },\n leftIcon: {\n marginRight: theme.spacing(1),\n },\n icon: {\n fontSize: 18,\n },\n }),\n { name: 'RaSaveAndDeployButton' }\n);\n\nexport const sanitizeButtonRestProps = ({\n // The next props are injected by Toolbar\n basePath,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n onSave,\n pristine,\n record,\n redirect,\n resource,\n saving,\n submitOnEnter,\n undoable,\n ...rest\n}) => rest;\n\nSaveAndDeployButton.propTypes = {\n className: PropTypes.string,\n classes: PropTypes.object,\n handleSubmitWithRedirect: PropTypes.func,\n // @deprecated\n onSave: PropTypes.func,\n invalid: PropTypes.bool,\n label: PropTypes.string,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n saving: PropTypes.bool,\n submitOnEnter: PropTypes.bool,\n variant: PropTypes.oneOf(['text', 'outlined', 'contained']),\n icon: PropTypes.element,\n};\n\nexport default SaveAndDeployButton;\n","import React, { useCallback } from 'react';\nimport { useFormState } from 'react-final-form';\nimport { useNotify, useRedirect, useDataProvider } from 'ra-core';\nimport SaveAndDeployButton from '../../lib/button/SaveAndDeployButton';\nimport deploy from '../../dataProvider/GatewayService/AssetClass/deploy';\n\n\n\nconst AssetClassCreateAndDeployButton = (props) => {\n const { resource, record, disabled: disabledOverride, basePath } = props\n const notify = useNotify();\n const redirectTo = useRedirect();\n const dataProvider = useDataProvider();\n const { values } = useFormState();\n const disabled = disabledOverride || !(values.assetsIds && Array.isArray(values.assetsIds) && values.assetsIds.length > 0)\n\n const handleSave = useCallback((values, redirect) => {\n\n dataProvider\n .create(resource, { data: values })\n .then(responseUpdate => {\n return deploy({ id: responseUpdate.data.id, data: responseUpdate.data }).then(responseDeploy => {\n notify('ra.notification.created_and_deploed', { messageArgs: { smart_count: 1 } });\n redirectTo(redirect, basePath, responseUpdate.data.id, responseUpdate.data);\n })\n })\n .catch(error => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', { type: 'warning' });\n });\n\n }, [dataProvider, notify, redirectTo, basePath]);\n\n\n return (\n <SaveAndDeployButton {...props} record={values} disabled={disabled} onSave={handleSave} />\n );\n};\n\n\nexport default AssetClassCreateAndDeployButton;\n","import React from \"react\";\nimport { Create, SimpleForm, TextInput, ReferenceInput, AutocompleteInput, ReferenceArrayInput, AutocompleteArrayInput, Toolbar, SaveButton } from 'react-admin';\nimport { required, regex, maxLength } from 'react-admin';\nimport IconInput from '../../lib/input/IconInput';\nimport AssetClassCreateAndDeployButton from './AssetClassCreateAndDeployButton';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n\n\nconst validateId = [regex(/^(?=.*[a-zA-Z])[a-zA-Z0-9_]{0,26}$/)];\nconst validateName = [required(), maxLength(128)];\n\n\nconst AssetClassCreateToolbar = props => {\n return (\n <Toolbar {...props} >\n <SaveButton\n submitOnEnter={true}\n disabled={props.pristine}\n redirect=\"list\"\n />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <AssetClassCreateAndDeployButton\n submitOnEnter={false}\n disabled={props.pristine}\n variant=\"text\"\n />\n </Toolbar>\n )\n};\n\nexport const AssetClassCreate = (props) => (\n <Create {...props}>\n <SimpleForm\n toolbar={<AssetClassCreateToolbar />}\n >\n <TextInput source=\"id\" validate={validateId} />\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <ReferenceInput source=\"type.id\" reference=\"AssetType\" label=\"resources.Asset.fields.type\" >\n <AutocompleteInput source=\"name\" matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <IconInput source=\"icon\" initialValue=\"AssetIcon\" />\n <ReferenceArrayInput source=\"parametersOnMapIds\" reference=\"Parameter\" label=\"resources.Asset.fields.parametersOnMap\" fullWidth initialValue={[\"GEO\", \"ALARM\"]}>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceInput source=\"defaultDashboard.id\" reference=\"Dashboard\" fullWidth label=\"resources.AssetClass.fields.defaultDashboard\" allowEmpty emptyText=\"ra.boolean.false\">\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <ReferenceArrayInput source=\"dashboardsIds\" reference=\"Dashboard\" fullWidth label=\"resources.AssetClass.fields.dashboards\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"assetsIds\" reference=\"Asset\" fullWidth label=\"resources.AssetClass.fields.assets\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"labelsIds\" reference=\"Label\" label=\"resources.AssetClass.fields.labels\" filter={{ typename: \"AssetClass\" }} fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n </SimpleForm>\n </Create>\n);\n\n\n\n\n\nexport default AssetClassCreate;","import React, { useCallback } from 'react';\nimport { useFormState } from 'react-final-form';\nimport { useNotify, useRedirect, useDataProvider } from 'ra-core';\nimport SaveAndDeployButton from '../../lib/button/SaveAndDeployButton';\nimport deploy from '../../dataProvider/GatewayService/AssetClass/deploy';\n\n\n\nconst AssetClassEditAndDeployButton = (props) => {\n const { resource, record, basePath, disabled: disabledOverride } = props\n const notify = useNotify();\n const redirectTo = useRedirect();\n const dataProvider = useDataProvider();\n const { values } = useFormState();\n const disabled = disabledOverride || !(values.assetsIds && Array.isArray(values.assetsIds) && values.assetsIds.length > 0)\n\n const handleSave = useCallback((values, redirect) => {\n dataProvider\n .update(resource, { id: record.id, data: values, previousData: record })\n .then(responseUpdate => {\n\n return deploy({ id: responseUpdate.data.id, data: responseUpdate.data }).then(responseDeploy => {\n notify('ra.notification.updated_and_deploed', { messageArgs: { smart_count: 1 } });\n redirectTo(redirect, basePath, responseUpdate.data.id, responseUpdate.data)\n })\n })\n .catch(error => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', { type: 'warning' });\n });\n\n }, [dataProvider, notify, redirectTo, record, basePath]);\n\n const mergedisabled = disabled || !(values.assetsIds && Array.isArray(values.assetsIds) && values.assetsIds.length > 0)\n\n return (\n <SaveAndDeployButton {...props} record={values} disabled={disabled} onSave={handleSave} />\n );\n};\n\n\nexport default AssetClassEditAndDeployButton;\n","import React from \"react\";\nimport { SimpleForm, TextInput, ReferenceInput, AutocompleteInput, ReferenceArrayInput, AutocompleteArrayInput } from 'react-admin';\nimport { TopToolbar, ShowButton } from 'react-admin';\nimport { Toolbar, SaveButton } from 'react-admin';\nimport CloneButton from '../../lib/button/CloneButton';\nimport { required, maxLength } from 'react-admin';\nimport Edit from '../../lib/edit/Edit';\nimport TitleForRecord from '../../lib/layout/TitleForRecord';\nimport Spacer from '../../lib/layout/Spacer';\nimport IconInput from '../../lib/input/IconInput';\nimport AssetClassEditAndDeployButton from './AssetClassEditAndDeployButton';\nimport RemoveButton from '../../lib/button/RemoveButton';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n\n\nconst cloneOmit = [\"id\", \"assets\", \"assetsIds\"];\n\nconst validateName = [required(), maxLength(128)];\n\nconst AssetClassEditActions = ({ data, basePath, hasShow, hasCreate }) => {\n return (\n <TopToolbar>\n {hasCreate && <CloneButton basePath={basePath} record={data} omit={cloneOmit} />}\n {hasShow && <ShowButton basePath={basePath} record={data} />}\n </TopToolbar>\n )\n};\n\nconst AssetClassEditToolbar = props => {\n return (\n <Toolbar {...props} >\n <SaveButton submitOnEnter={true} disabled={props.pristine} redirect=\"list\" />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <AssetClassEditAndDeployButton submitOnEnter={false} disabled={props.pristine} redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <Spacer variant=\"row\" />\n <RemoveButton mutationMode=\"optimistic\" />\n </Toolbar>\n )\n};\n\nexport const AssetClassEdit = (props) => (\n <Edit\n {...props}\n actions={<AssetClassEditActions />}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n <SimpleForm toolbar={<AssetClassEditToolbar />} >\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <ReferenceInput source=\"type.id\" reference=\"AssetType\" label=\"resources.Asset.fields.type\" >\n <AutocompleteInput source=\"name\" matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <IconInput source=\"icon\" initialValue=\"AssetIcon\" />\n <ReferenceArrayInput source=\"parametersOnMapIds\" reference=\"Parameter\" label=\"resources.Asset.fields.parametersOnMap\" fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceInput source=\"defaultDashboard.id\" reference=\"Dashboard\" fullWidth label=\"resources.AssetClass.fields.defaultDashboard\" allowEmpty emptyText=\"ra.boolean.false\">\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <ReferenceArrayInput source=\"dashboardsIds\" reference=\"Dashboard\" fullWidth label=\"resources.AssetClass.fields.dashboards\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"labelsIds\" reference=\"Label\" label=\"resources.AssetClass.fields.labels\" filter={{ typename: \"AssetClass\" }} fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"assetsIds\" reference=\"Asset\" fullWidth label=\"resources.AssetClass.fields.assets\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n </SimpleForm>\n </Edit>\n);\n\n\n\n\n\nexport default AssetClassEdit;","import AssetClassIcon from '../../lib/icons/AssetClass';\nimport AssetClassList from './AssetClassList';\nimport AssetClassShow from './AssetClassShow';\nimport AssetClassCreate from './AssetClassCreate';\nimport AssetClassEdit from './AssetClassEdit';\n\n\nconst AssetClassName = \"AssetClass\"\n\nconst AssetClassResource = {\n name: AssetClassName,\n icon: AssetClassIcon,\n list: AssetClassList,\n show: AssetClassShow,\n create: AssetClassCreate,\n edit: AssetClassEdit,\n}\n\nexport default AssetClassResource;\nexport {\n AssetClassName,\n AssetClassIcon,\n AssetClassList,\n AssetClassShow,\n AssetClassCreate,\n AssetClassEdit,\n};","import { useMemo, useRef } from 'react';\nimport get from 'lodash/get';\nimport { useQueryWithStore } from 'react-admin';\n\nconst defaultIds = [];\nconst defaultData = {};\n\nconst useGetMainList = (\n resource,\n pagination,\n sort,\n filter,\n //add parameters\n parameters,\n options\n) => {\n const requestSignature = JSON.stringify({ pagination, sort, filter });\n const memo = useRef({});\n const {\n data: { finalIds, finalTotal, allRecords },\n error,\n loading,\n loaded,\n refetch,\n } = useQueryWithStore(\n { type: 'getList', resource, payload: { pagination, sort, filter, parameters } },\n options,\n // ids and data selector\n (state) => {\n const ids = get(state.admin.resources, [\n resource,\n 'list',\n 'cachedRequests',\n requestSignature,\n 'ids',\n ]); // default value undefined\n const total = get(state.admin.resources, [\n resource,\n 'list',\n 'cachedRequests',\n requestSignature,\n 'total',\n ]); // default value undefined\n\n // When the user changes the page/sort/filter, the list of ids from\n // the cached requests is empty. To avoid rendering an empty list\n // at that moment, we override the ids and total with the latest\n // loaded ones.\n const mainIds = get(state.admin.resources, [\n resource,\n 'list',\n 'ids',\n ]); // default value [] (see list.ids reducer)\n\n // Since the total can be empty during the loading phase\n // We need to override that total with the latest loaded one\n const mainTotal = get(state.admin.resources, [\n resource,\n 'list',\n 'total',\n ]); // default value null (see list.total reducer)\n\n // Is [] for a page that was never loaded\n const finalIds = typeof ids === 'undefined' ? mainIds : ids;\n // Is null for a page that was never loaded.\n const finalTotal = typeof total === 'undefined' ? mainTotal : total;\n\n const allRecords = get(\n state.admin.resources,\n [resource, 'data'],\n defaultData\n );\n // poor man's useMemo inside a hook using a ref\n if (\n memo.current.finalIds !== finalIds ||\n memo.current.finalTotal !== finalTotal ||\n memo.current.allRecords !== allRecords\n ) {\n const result = {\n finalIds,\n finalTotal,\n allRecords,\n };\n memo.current = { finalIds, finalTotal, allRecords, result };\n }\n return memo.current.result;\n },\n () => null,\n isDataLoaded\n );\n\n const data = useMemo(\n () =>\n typeof finalIds === 'undefined'\n ? defaultData\n : finalIds\n .map(id => allRecords[id])\n .reduce((acc, record) => {\n if (!record) return acc;\n acc[record.id] = record;\n return acc;\n }, {}),\n [finalIds, allRecords]\n );\n\n return {\n data,\n ids: typeof finalIds === 'undefined' ? defaultIds : finalIds,\n total: finalTotal,\n error,\n loading,\n loaded,\n refetch,\n };\n};\n\n\n\nconst isDataLoaded = (data) => data.finalTotal != null; // null or undefined\n\n\nexport default useGetMainList","import { useCallback, useMemo, useEffect, useState, useRef } from 'react';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport { parse, stringify } from 'query-string';\nimport lodashDebounce from 'lodash/debounce';\nimport pickBy from 'lodash/pickBy';\nimport { useHistory, useLocation } from 'react-router-dom';\n\nimport queryReducer, {\n SET_FILTER,\n HIDE_FILTER,\n SHOW_FILTER,\n SET_PAGE,\n SET_PER_PAGE,\n SET_SORT,\n SORT_ASC,\n} from 'ra-core/esm/reducer/admin/resource/list/queryReducer';\nimport { changeListParams } from 'ra-core/esm/actions';\nimport removeEmpty from 'ra-core/esm/util/removeEmpty';\nimport { useIsMounted } from 'ra-core/esm/util/hooks';\nimport useListColumns from '../../controller/localStorage/useListColumns';\n\n\nconst emptyObject = {};\n\nconst defaultSort = {\n field: 'id',\n order: SORT_ASC,\n};\n\nconst defaultParams = {};\n\nconst useListParams = ({\n resource,\n filterDefaultValues,\n sort = defaultSort,\n perPage = 10,\n debounce = 500,\n}) => {\n const dispatch = useDispatch();\n const location = useLocation();\n const history = useHistory();\n const params = useSelector(\n (reduxState) =>\n reduxState.admin.resources[resource]\n ? reduxState.admin.resources[resource].list.params\n : defaultParams,\n shallowEqual\n );\n const tempParams = useRef();\n const isMounted = useIsMounted();\n\n\n const requestSignature = [\n location.search,\n resource,\n params,\n filterDefaultValues,\n JSON.stringify(sort),\n perPage,\n ];\n\n const queryFromLocation = parseQueryFromLocation(location);\n\n const query = useMemo(\n () =>\n getQuery({\n queryFromLocation,\n params,\n filterDefaultValues,\n sort,\n perPage,\n }),\n requestSignature // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n // if the location includes params (for example from a link like\n // the categories products on the demo), we need to persist them in the\n // redux state as well so that we don't lose them after a redirection back\n // to the list\n useEffect(() => {\n if (Object.keys(queryFromLocation).length > 0) {\n dispatch(changeListParams(resource, query));\n }\n }, [location.search]); // eslint-disable-line\n\n const changeParams = useCallback(action => {\n // do not change params if the component is already unmounted\n // this is necessary because changeParams can be debounced, and therefore\n // executed after the component is unmounted\n if (!isMounted.current) return;\n\n if (!tempParams.current) {\n // no other changeParams action dispatched this tick\n tempParams.current = queryReducer(query, action);\n // schedule side effects for next tick\n setTimeout(() => {\n\n history.push({\n search: `?${stringify({\n ...tempParams.current,\n filter: JSON.stringify(tempParams.current.filter),\n displayedFilters: JSON.stringify(\n tempParams.current.displayedFilters\n ),\n })}`,\n state: { _scrollToTop: action.type === SET_PAGE },\n });\n\n\n tempParams.current = undefined;\n }, 0);\n } else {\n // side effects already scheduled, just change the params\n tempParams.current = queryReducer(tempParams.current, action);\n }\n }, requestSignature); // eslint-disable-line react-hooks/exhaustive-deps\n\n const setColumns = useCallback(\n (columns) => changeParams({ type: \"SET_COLUMNS\", payload: columns }),\n requestSignature // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n\n const setSort = useCallback(\n (sort, order) =>\n changeParams({\n type: SET_SORT,\n payload: { sort, order },\n }),\n requestSignature // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const setPage = useCallback(\n (newPage) => changeParams({ type: SET_PAGE, payload: newPage }),\n requestSignature // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const setPerPage = useCallback(\n (newPerPage) =>\n changeParams({ type: SET_PER_PAGE, payload: newPerPage }),\n requestSignature // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const filterValues = query.filter || emptyObject;\n const displayedFilterValues = query.displayedFilters || emptyObject;\n\n const debouncedSetFilters = lodashDebounce((filter, displayedFilters) => {\n changeParams({\n type: SET_FILTER,\n payload: {\n filter: removeEmpty(filter),\n displayedFilters,\n },\n });\n }, debounce);\n\n const setFilters = useCallback(\n (filter, displayedFilters, debounce = true) =>\n debounce\n ? debouncedSetFilters(filter, displayedFilters)\n : changeParams({\n type: SET_FILTER,\n payload: {\n filter: removeEmpty(filter),\n displayedFilters,\n },\n }),\n requestSignature // eslint-disable-line react-hooks/exhaustive-deps\n );\n\n const hideFilter = useCallback((filterName) => {\n changeParams({\n type: HIDE_FILTER,\n payload: filterName,\n });\n }, requestSignature); // eslint-disable-line react-hooks/exhaustive-deps\n\n const showFilter = useCallback((filterName, defaultValue) => {\n changeParams({\n type: SHOW_FILTER,\n payload: {\n filterName,\n defaultValue,\n },\n });\n }, requestSignature); // eslint-disable-line react-hooks/exhaustive-deps\n\n return [\n {\n displayedFilters: displayedFilterValues,\n filterValues,\n requestSignature,\n ...query,\n },\n {\n changeParams,\n setPage,\n setPerPage,\n setSort,\n setFilters,\n hideFilter,\n showFilter,\n },\n ];\n};\n\nexport const validQueryParams = [\n 'page',\n 'perPage',\n 'sort',\n 'order',\n 'filter',\n 'displayedFilters',\n 'columns',\n];\n\nconst parseObject = (query, field) => {\n if (query[field] && typeof query[field] === 'string') {\n try {\n query[field] = JSON.parse(query[field]);\n } catch (err) {\n delete query[field];\n }\n }\n};\n\nexport const parseQueryFromLocation = ({ search }) => {\n const query = pickBy(\n parse(search),\n (v, k) => validQueryParams.indexOf(k) !== -1\n );\n parseObject(query, 'filter');\n parseObject(query, 'displayedFilters');\n return query;\n};\n\n/**\n * Check if user has already set custom sort, page, or filters for this list\n *\n * User params come from the Redux store as the params props. By default,\n * this object is:\n *\n * { filter: {}, order: null, page: 1, perPage: null, sort: null }\n *\n * To check if the user has custom params, we must compare the params\n * to these initial values.\n *\n * @param {Object} params\n */\nexport const hasCustomParams = (params) => {\n return (\n params &&\n params.filter &&\n (Object.keys(params.filter).length > 0 ||\n params.order != null ||\n params.page !== 1 ||\n params.perPage != null ||\n params.sort != null)\n );\n};\n\n/**\n * Merge list params from 3 different sources:\n * - the query string\n * - the params stored in the state (from previous navigation)\n * - the props passed to the List component (including the filter defaultValues)\n */\nexport const getQuery = ({\n queryFromLocation,\n params,\n filterDefaultValues,\n sort,\n perPage,\n}) => {\n const query =\n Object.keys(queryFromLocation).length > 0\n ? queryFromLocation\n : hasCustomParams(params)\n ? { ...params }\n : { filter: filterDefaultValues || {} };\n\n if (!query.sort) {\n query.sort = sort.field;\n query.order = sort.order;\n }\n if (query.perPage == null) {\n query.perPage = perPage;\n }\n if (query.page == null) {\n query.page = 1;\n }\n\n return {\n ...query,\n page: getNumberOrDefault(query.page, 1),\n perPage: getNumberOrDefault(query.perPage, 10),\n };\n};\n\nexport const getNumberOrDefault = (\n possibleNumber,\n defaultValue\n) => {\n const parsedNumber =\n typeof possibleNumber === 'string'\n ? parseInt(possibleNumber, 10)\n : possibleNumber;\n\n return isNaN(parsedNumber) ? defaultValue : parsedNumber;\n};\n\nexport default useListParams;\n","import { isValidElement, useEffect, useMemo } from 'react';\nimport { useCheckMinimumRequiredProps, useRecordSelection } from 'react-admin';\nimport { useTranslate, useNotify, CRUD_GET_LIST } from 'react-admin';\nimport { SORT_ASC } from 'ra-core/esm/reducer/admin/resource/list/queryReducer';\nimport { defaultExporter } from 'ra-core';\nimport { useResourceContext, useGetResourceLabel } from 'ra-core';\nimport useGetMainList from './useGetMainList';\nimport useListParams from './useListParams';\n\n\n\nconst defaultSort = {\n field: 'id',\n order: SORT_ASC,\n};\n\nconst useListController = props => {\n useCheckMinimumRequiredProps('List', ['basePath'], props);\n\n const {\n basePath,\n exporter = defaultExporter,\n filterDefaultValues,\n hasCreate,\n sort = defaultSort,\n perPage = 10,\n filter,\n debounce = 500,\n syncWithLocation,\n //add parameters\n parameters\n } = props;\n const resource = useResourceContext(props)\n\n if (!resource) {\n throw new Error(\n `<List> was called outside of a ResourceContext and without a resource prop. You must set the resource prop.`\n );\n }\n if (filter && isValidElement(filter)) {\n throw new Error(\n '<List> received a React element as `filter` props. If you intended to set the list filter elements, use the `filters` (with an s) prop instead. The `filter` prop is internal and should not be set by the developer.'\n );\n }\n\n const translate = useTranslate();\n const notify = useNotify();\n\n const [query, queryModifiers] = useListParams({\n resource,\n filterDefaultValues,\n sort,\n perPage,\n debounce,\n syncWithLocation,\n });\n\n const [selectedIds, selectionModifiers] = useRecordSelection(resource);\n\n /**\n * We want the list of ids to be always available for optimistic rendering,\n * and therefore we need a custom action (CRUD_GET_LIST) that will be used.\n */\n const {\n ids,\n data,\n total,\n error,\n loading,\n loaded,\n refetch,\n } = useGetMainList(\n resource,\n {\n page: query.page,\n perPage: query.perPage,\n },\n { field: query.sort, order: query.order },\n { ...query.filter, ...filter },\n //add parameters\n parameters,\n {\n action: CRUD_GET_LIST,\n // enabled: Array.isArray(parameters) && parameters.length > 0,\n onFailure: error =>\n notify(\n typeof error === 'string'\n ? error\n : error.message || 'ra.notification.http_error',\n {\n type: 'warning',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n },\n }\n ),\n }\n );\n\n const totalPages = Math.ceil(total / query.perPage) || 1;\n\n useEffect(() => {\n if (\n query.page <= 0 ||\n (!loading && query.page > 1 && ids.length === 0)\n ) {\n // Query for a page that doesn't exist, set page to 1\n queryModifiers.setPage(1);\n } else if (!loading && query.page > totalPages) {\n // Query for a page out of bounds, set page to the last existing page\n // It occurs when deleting the last element of the last page\n queryModifiers.setPage(totalPages);\n }\n }, [loading, query.page, ids, queryModifiers, total, totalPages]);\n\n const currentSort = useMemo(\n () => ({\n field: query.sort,\n order: query.order,\n }),\n [query.sort, query.order]\n );\n\n const getResourceLabel = useGetResourceLabel();\n const defaultTitle = translate('ra.page.list', {\n name: getResourceLabel(resource, 2),\n });\n\n return {\n basePath,\n currentSort,\n data,\n defaultTitle,\n displayedFilters: query.displayedFilters,\n error,\n exporter,\n filter,\n filterValues: query.filterValues,\n hasCreate,\n hideFilter: queryModifiers.hideFilter,\n ids,\n loaded: loaded || ids.length > 0,\n loading,\n onSelect: selectionModifiers.select,\n onToggleItem: selectionModifiers.toggle,\n onUnselectItems: selectionModifiers.clearSelection,\n page: query.page,\n perPage: query.perPage,\n refetch,\n resource,\n selectedIds,\n setFilters: queryModifiers.setFilters,\n setPage: queryModifiers.setPage,\n setPerPage: queryModifiers.setPerPage,\n setSort: queryModifiers.setSort,\n showFilter: queryModifiers.showFilter,\n total: total,\n\n parameters,\n };\n};\n\nexport const injectedProps = [\n 'basePath',\n 'currentSort',\n 'data',\n 'defaultTitle',\n 'displayedFilters',\n 'error',\n 'exporter',\n 'filterValues',\n 'hasCreate',\n 'hideFilter',\n 'ids',\n 'loading',\n 'loaded',\n 'onSelect',\n 'onToggleItem',\n 'onUnselectItems',\n 'page',\n 'perPage',\n 'refetch',\n 'refresh',\n 'resource',\n 'selectedIds',\n 'setFilters',\n 'setPage',\n 'setPerPage',\n 'setSort',\n 'showFilter',\n 'total',\n 'totalPages',\n 'version',\n];\n\n/**\n * Select the props injected by the useListController hook\n * to be passed to the List children need\n * This is an implementation of pick()\n */\nexport const getListControllerProps = props =>\n injectedProps.reduce((acc, key) => ({ ...acc, [key]: props[key] }), {});\n\n/**\n * Select the props not injected by the useListController hook\n * to be used inside the List children to sanitize props injected by List\n * This is an implementation of omit()\n */\nexport const sanitizeListRestProps = props =>\n Object.keys(props)\n .filter(propName => !injectedProps.includes(propName))\n .reduce((acc, key) => ({ ...acc, [key]: props[key] }), {});\n\nexport default useListController;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props} >\n <path d=\"M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V10A2,2 0 0,1 6,8H15V6A3,3 0 0,0 12,3A3,3 0 0,0 9,6H7A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,17A2,2 0 0,0 14,15A2,2 0 0,0 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport { useRecordContext, useTranslate } from 'ra-core';\nimport LockIcon from '@material-ui/icons/Lock';\nimport LockOpenIcon from '../../icons/LockOpen';\nimport sanitizeFieldRestProps from '../sanitizeFieldRestProps';\n\n\nexport const DoorField = memo(\n props => {\n const {\n className,\n emptyText,\n source,\n locales,\n options,\n textAlign,\n ...rest\n } = props;\n const translate = useTranslate()\n const record = useRecordContext(props);\n if (!record) {\n return null;\n }\n const value = get(record, source);\n\n if (value == null) {\n return emptyText ? (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {emptyText}\n </Typography>\n ) : null;\n }\n\n return value\n ? (\n <LockOpenIcon titleAccess={translate('resources.Asset.enums.door.true', { _: \"open\" })} color=\"error\" />\n )\n : (\n <LockIcon titleAccess={translate('resources.Asset.enums.door.false', { _: \"close\" })} color=\"disabled\" />\n )\n }\n);\n\n// what? TypeScript loses the displayName if we don't set it explicitly\nDoorField.displayName = 'DoorField';\n\nDoorField.defaultProps = {\n addLabel: true,\n // textAlign: 'center',\n};\n\nexport default DoorField;\n","\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useDataFieldStyles = makeStyles(theme => ({\n qualityBad: { opacity: theme.palette.action.disabledOpacity },\n}));\n\nexport default useDataFieldStyles","import React, { memo } from 'react';\nimport Typography from '@material-ui/core/Typography';\nimport { useRecordContext } from 'ra-core';\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\nimport ErrorIcon from '@material-ui/icons/Error';\nimport classnames from 'classnames';\nimport sanitizeFieldRestProps from '../sanitizeFieldRestProps';\nimport useDataFieldStyles from './useDataFieldStyles';\n\n\n\nexport const IndicatorField = memo(\n props => {\n const {\n className,\n emptyText,\n source,\n locales,\n options,\n textAlign,\n inverted = false,\n ...rest\n } = props;\n const record = useRecordContext(props);\n const classes = useDataFieldStyles();\n\n if (!record) return null;\n\n const value = inverted ? !record.value : record.value;\n // const writeValue = record.writeValue;\n const qualityBad = record.quality == null || record.quality > 0;\n\n if (value == null) {\n return emptyText ? (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {emptyText}\n </Typography>\n ) : null;\n }\n\n return (\n <Typography\n variant=\"body2\"\n component=\"span\"\n className={classnames(className, { [classes.qualityBad]: qualityBad })}\n {...sanitizeFieldRestProps(rest)}\n >\n {value ? <ErrorIcon color=\"error\" /> : <CheckCircleIcon color=\"disabled\" />}\n {/* {writeValue != null && \"*\"} */}\n </Typography>\n );\n }\n);\n\n// what? TypeScript loses the displayName if we don't set it explicitly\nIndicatorField.displayName = 'IndicatorField';\n\nIndicatorField.defaultProps = {\n addLabel: true,\n // textAlign: 'center',\n};\n\nexport default IndicatorField;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props} >\n <path d=\"M10 4A4 4 0 0 1 14 8A4 4 0 0 1 10 12A4 4 0 0 1 6 8A4 4 0 0 1 10 4M10 14C14.42 14 18 15.79 18 18V20H2V18C2 15.79 5.58 14 10 14M20 12V7H22V13H20M20 17V15H22V17H20Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport { useRecordContext, useTranslate } from 'ra-core';\nimport PersonIcon from '@material-ui/icons/Person';\nimport PersonAlert from '../../icons/PersonAlert';\nimport sanitizeFieldRestProps from '../sanitizeFieldRestProps';\n\n\n\nexport const IffField = memo(\n props => {\n const {\n className,\n emptyText,\n source,\n locales,\n options,\n textAlign,\n ...rest\n } = props;\n const translate = useTranslate()\n const record = useRecordContext(props);\n if (!record) {\n return null;\n }\n const value = get(record, source);\n\n if (value == null) {\n return emptyText ? (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {emptyText}\n </Typography>\n ) : null;\n }\n\n return value\n ? (\n <PersonAlert titleAccess={translate('resources.Asset.enums.iff.false', { _: \"foe\" })} color=\"error\" />\n )\n : (\n <PersonIcon titleAccess={translate('resources.Asset.enums.iff.true', { _: \"friend\" })} color=\"disabled\" />\n )\n }\n);\n\n// what? TypeScript loses the displayName if we don't set it explicitly\nIffField.displayName = 'IffField';\n\nIffField.defaultProps = {\n addLabel: true,\n // textAlign: 'center',\n};\n\nexport default IffField;\n","import React from \"react\";\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport { dateTimeOptions, floatNumberOptions, intNumberOptions, isNull } from '../../../utils';\nimport { TextField, DateField, UrlField, NumberField } from 'react-admin';\nimport BooleanField from '../BooleanField';\nimport DoorField from './DoorField';\nimport IndicatorField from './IndicatorField';\nimport IffField from './IffField';\nimport SelectField from '../SelectField';\nimport DataFieldTooltip from './DataFieldTooltip';\nimport useDataFieldStyles from './useDataFieldStyles';\n\nconst getEmptyText = (record, { source }) => get(record, source)\n\nconst DataField = (props) => {\n const { record } = props\n if (!record) return null\n const type = get(record, [\"parameter\", \"type\"])\n const display = get(record, [\"parameter\", \"display\"])\n\n switch (display) {\n case \"BATTERY\": return <NumberField {...props} locales='ru-RU' options={get(record, [\"parameter\", \"format\", \"numberFormatOptions\"], floatNumberOptions)} />\n case \"BOOLEAN\": return <IndicatorField {...props} />\n case \"IBOOLEAN\": return <IndicatorField inverted {...props} />\n case \"COORDINATES\": return <TextField {...props} />\n case \"CRON\": return <TextField {...props} />\n case \"DATETIME\": return <DateField {...props} options={get(record, [\"parameter\", \"format\", \"dateTimeFormatOptions\"], dateTimeOptions)} />\n case \"DOOR\": return <DoorField {...props} />\n case \"ENUM\": return <SelectField {...props} choices={get(record, [\"parameter\", \"format\", \"valueMappings\", \"choices\"], [])} optionText=\"value\" optionValue=\"id\" emptyText={getEmptyText} />\n case \"FIRE\": return <BooleanField {...props} />\n case \"IFF\": return <IffField {...props} />\n case \"NUMBER\": return <NumberField {...props} locales='ru-RU' options={get(record, [\"parameter\", \"format\", \"numberFormatOptions\"], type === \"INT\" ? intNumberOptions : floatNumberOptions)} />\n case \"TEXT\": return <TextField {...props} />\n case \"URL\": return <UrlField {...props} />\n default: return <TextField {...props} />\n }\n}\n\nconst EnhancedDataField = ({ className, ...props }) => {\n const { record } = props\n const classes = useDataFieldStyles();\n if (!record) return null\n const value = record.value;\n const writeValue = record.writeValue;\n const qualityBad = isNull(record.quality) || record.quality > 0;\n const showWriteValue = (!isNull(writeValue) && writeValue !== value)\n\n return (\n <DataFieldTooltip record={record}>\n <span className={classnames(className, { [classes.qualityBad]: qualityBad })}>\n <DataField {...props} />\n {showWriteValue && (<> <span >*</span></>)}\n </span>\n </DataFieldTooltip>\n )\n}\n\nEnhancedDataField.defaultProps = {\n addLabel: true,\n classes: {},\n};\n\n\nexport default EnhancedDataField;\n","import { useEffect, useState, useCallback } from 'react';\nimport unionBy from \"lodash/unionBy\"\nimport { useAuthState, useNotify } from 'react-admin';\nimport useThrottle from '../../lib/hook/useThrottle';\nimport useLocalStorage from '../../lib/hook/useLocalStorage';\nimport subscribe from '../../dataProvider/EventbusService/Event/subscribe';\n\nconst defaultState = {\n events: undefined,\n loading: true,\n loaded: false,\n error: undefined,\n}\nconst filter = { priority_gte: 100 }\n\nconst useEventController = () => {\n const notify = useNotify();\n const { authenticated } = useAuthState();\n const [version, setVersion] = useState(0);\n const [indicator, setIndicator] = useLocalStorage('event.indicator', 0);\n const throttledVersion = useThrottle(version, 2000);\n const [state, setState] = useState(defaultState)\n\n const resetIndicator = useCallback(() => {\n setIndicator(0)\n }, [])\n\n const onNext = useCallback((next) => {\n const data = next?.data?.data?.data || []\n const mutation = next?.data?.data?.mutation || \"INIT\"\n\n if (mutation === 'SUBSCRIPTION' && data.length > 0) {\n // play()\n setVersion(prev => prev + 1)\n setIndicator(prev => prev + 1)\n }\n\n setState(prev => {\n const events = unionBy(data, prev.events, \"id\").sort((a, b) => { return new Date(b.timestampSrv) - new Date(a.timestampSrv) })\n return {\n events,\n loading: false,\n loaded: true,\n };\n })\n\n }, [setVersion, setIndicator, setState])\n\n const onError = useCallback((error) => {\n notify(\n typeof error === 'string' ? error : error.message || 'ra.notification.http_error',\n 'warning'\n )\n\n setState(prevState => ({\n ...prevState,\n error,\n loading: false,\n loaded: false\n }));\n\n }, [setState, notify])\n\n const onComplete = useCallback(() => { }, [])\n\n const hasActive = Array.isArray(state.events) && state.events.length > 0 && state.events.some(({ active }) => active)\n const hasUnack = Array.isArray(state.events) && state.events.length > 0 && state.events.some(({ ack, ackRequired }) => ackRequired && !ack)\n const hasActiveUnack = hasActive || hasUnack\n\n useEffect(() => {\n if (!authenticated) return;\n\n setIndicator(0)\n setState(prev => ({ ...prev, loading: true, loaded: false }));\n\n const subscription = subscribe({ filter }, onNext, onError, onComplete);\n\n return () => {\n setState(prev => ({ ...prev, loading: false, loaded: false }));\n subscription.unsubscribe();\n };\n }, [authenticated, onNext, onError, onComplete, setIndicator]);\n\n return {\n ...state,\n version: throttledVersion,\n indicator,\n resetIndicator,\n hasActive,\n hasUnack,\n hasActiveUnack\n };\n}\n\n\nexport default useEventController","import { useEffect, useRef, useState } from 'react'\n\n\nexport default (value, limit) => {\n const [throttledValue, setThrottledValue] = useState(value);\n const lastRan = useRef(Date.now());\n \n useEffect(() => {\n const handler = setTimeout(function() {\n if (Date.now() - lastRan.current >= limit) {\n setThrottledValue(value);\n lastRan.current = Date.now();\n }\n }, limit - (Date.now() - lastRan.current));\n //console.log('window.setTimeout '+handler);\n \n return () => {\n clearTimeout(handler);\n //console.log('window.clearTimeout '+handler);\n };\n }, [value, limit]);\n \n return throttledValue;\n};\n\n/*\nexport default function useThrottle(value, interval) {\n const [throttledValue, setThrottledValue] = useState(value); \n const lastUpdated = useRef();\n\n useEffect(() => {\n const now = Date.now();\n\n if (now >= lastUpdated.current + interval) {\n lastUpdated.current = now;\n setThrottledValue(value);\n } else { \n const id = window.setTimeout(() => { \n lastUpdated.current = now;\n setThrottledValue(value);\n }, interval);\n\n return () => {\n window.clearTimeout(id);\n }\n }\n }, [value, interval]);\n\n return throttledValue;\n}\n*/","import get from 'lodash/get';\nimport useEventContext from './useEventContext';\n\nconst isEmptyArray = (value) => {\n if (!value) return true\n return !(Array.isArray(value) && value.length > 0)\n}\n\nconst useRecordEvents = (record, source = \"id\") => {\n const selector = get(record, source)\n const { events } = useEventContext()\n const recordEvents = isEmptyArray(events) ? [] : events.filter(event => get(event, \"resource\") === selector)\n return recordEvents\n}\n\nexport default useRecordEvents","import React, { memo } from \"react\";\nimport Typography from '@material-ui/core/Typography';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\nimport useEventContext from '../../controller/event/useEventController';\nimport useRecordEvents from '../../controller/event/useRecordEvents';\nimport NotificationsNoneIcon from '@material-ui/icons/NotificationsNone';\nimport NotificationsActiveIcon from '@material-ui/icons/NotificationsActive';\nimport NotificationsIcon from '@material-ui/icons/Notifications';\nimport { stringify } from 'query-string';\nimport { Link } from 'react-admin';\n\n\n\nconst stopPropagation = e => e.stopPropagation();\n\nconst HasEventsField = memo((props) => {\n const { className, record, ...rest } = props\n const resorceEvents = useRecordEvents(record)\n const resorceActiveEvents = resorceEvents.filter(({ active }) => active)\n const hasEvent = resorceEvents.length > 0\n const hasAlarm = resorceActiveEvents.length > 0\n\n return (\n <Typography\n component={Link}\n to={{\n pathname: \"/Event\",\n search: stringify({\n filter: JSON.stringify({\n resource: record.id\n }),\n })\n }}\n onClick={stopPropagation}\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {hasEvent ? hasAlarm ? <NotificationsActiveIcon color=\"error\" /> : <NotificationsIcon /> : <NotificationsNoneIcon color=\"disabled\" />}\n </Typography>\n );\n});\n\nHasEventsField.displayName = 'HasEventsField';\n\nHasEventsField.defaultProps = {\n addLabel: true,\n};\n\nexport default HasEventsField;","import React, { useCallback, useState } from 'react';\nimport get from 'lodash/get';\nimport { useDispatch } from 'react-redux';\nimport CallIcon from '@material-ui/icons/Call';\nimport classnames from 'classnames';\nimport { fetchEnd, fetchStart, useNotify, Button, useTranslate } from 'react-admin';\nimport writeTag from '../../dataProvider/DatabusService/Tag/write';\nimport { buildIdFromTag } from '../../dataProvider/DatabusService/Tag/utils';\n\n\n\n\n\n\nconst stopPropagation = e => e.stopPropagation();\n\nconst CallButton = props => {\n const {\n classes: classesOverride,\n className,\n onClick,\n record,\n basePath,\n cellClassName,\n ...rest\n } = props;\n const dispatch = useDispatch()\n const translate = useTranslate()\n const notify = useNotify()\n const [loading, setLoading] = useState(false)\n\n const handleConnect = useCallback((event) => {\n stopPropagation(event)\n dispatch(fetchStart())\n setLoading(true)\n\n writeTag({\n id: buildIdFromTag({ resource: record.id, tag: \"RING\" }),\n data: {\n value: true,\n }\n })\n .then(({ data }) => {\n const { id, assetId, parameterId, type, value } = data\n const title = translate('ra.notification.called', { smart_count: 1 })\n const body = `${id} = ${value.toString()} (${type})`\n\n notify('ra.notification.called', 'info', { smart_count: 1 });\n\n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n })\n .finally(() => {\n dispatch(fetchEnd());\n setTimeout(() => {\n setLoading(false)\n }, 3000)\n });\n\n }, [record, dispatch, setLoading, notify, translate]);\n\n return (\n <Button\n onClick={handleConnect}\n disabled={loading}\n label=\"ra.action.call\"\n className={classnames('ra-connect-button', className)}\n key=\"button\"\n {...rest}\n >\n <CallIcon />\n </Button>\n );\n};\n\n\nexport default CallButton;\n","import React, { useCallback, useState } from 'react';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport DownloadIcon from '@material-ui/icons/GetApp';\nimport {\n fetchRelatedRecords,\n useDataProvider,\n useNotify,\n useListContext,\n useResourceContext,\n useTranslate,\n} from 'ra-core';\nimport { Button } from 'react-admin';\n\n\nconst ExportButton = (props) => {\n const {\n maxResults = 1000,\n onClick,\n label = 'ra.action.export',\n icon = defaultIcon,\n exporter: customExporter,\n sort, // deprecated, to be removed in v4\n ...rest\n } = props;\n\n const {\n exporter: exporterFromContext,\n filter,\n filterValues,\n currentSort,\n total,\n parameters,\n } = useListContext(props);\n const exporter = customExporter || exporterFromContext;\n const resource = useResourceContext(props);\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const notify = useNotify();\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleOpen = useCallback((event) => {\n setAnchorEl(event.currentTarget);\n });\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n });\n\n const handleXlsxExport = useCallback(event => {\n handleClose()\n dataProvider\n .getList(resource, {\n sort: currentSort || sort,\n filter: filter\n ? { ...filterValues, ...filter }\n : filterValues,\n pagination: { page: 1, perPage: maxResults },\n parameters,\n })\n .then(\n ({ data }) =>\n exporter.xlsxExporter &&\n exporter.xlsxExporter(\n data,\n fetchRelatedRecords(dataProvider),\n dataProvider,\n resource\n )\n )\n .catch(error => {\n console.error(error);\n notify('ra.notification.http_error', { type: 'warning' });\n });\n if (typeof onClick === 'function') {\n onClick(event);\n }\n },\n [\n currentSort,\n dataProvider,\n filter,\n filterValues,\n maxResults,\n notify,\n onClick,\n resource,\n sort,\n ]\n );\n\n const handleJsonExport = useCallback(event => {\n handleClose()\n dataProvider\n .getList(resource, {\n sort: currentSort || sort,\n filter: filter\n ? { ...filterValues, ...filter }\n : filterValues,\n pagination: { page: 1, perPage: maxResults },\n parameters,\n })\n .then(\n ({ data }) =>\n exporter.jsonExporter &&\n exporter.jsonExporter(\n data,\n fetchRelatedRecords(dataProvider),\n dataProvider,\n resource\n )\n )\n .catch(error => {\n console.error(error);\n notify('ra.notification.http_error', { type: 'warning' });\n });\n if (typeof onClick === 'function') {\n onClick(event);\n }\n },\n [\n currentSort,\n dataProvider,\n filter,\n filterValues,\n maxResults,\n notify,\n onClick,\n resource,\n sort,\n ]\n );\n\n\n return (\n <div>\n <Button\n aria-controls=\"export-menu\"\n aria-haspopup=\"true\"\n onClick={handleOpen}\n label={label}\n {...sanitizeRestProps(rest)}\n >\n {icon}\n </Button>\n <Menu\n id=\"export-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n >\n <MenuItem onClick={handleXlsxExport} >{translate('ra.action.xlsx_export')}</MenuItem>\n <MenuItem onClick={handleJsonExport} >{translate('ra.action.json_export')}</MenuItem>\n </Menu>\n </div>\n\n );\n};\n\nconst defaultIcon = <DownloadIcon />;\n\nconst sanitizeRestProps = ({\n basePath,\n filterValues,\n resource,\n ...rest\n}) =>\n rest;\n\nexport default ExportButton;","import React, { useCallback, useEffect, useState } from 'react';\nimport keyBy from \"lodash/keyBy\";\nimport union from \"lodash/union\";\nimport map from \"lodash/map\";\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport DragHandleIcon from \"@material-ui/icons/DragHandle\";\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { Container, Draggable } from \"react-smooth-dnd\";\nimport { arrayMoveImmutable } from \"array-move\";\nimport { useTranslate, useListContext, getFieldLabelTranslationArgs, } from 'react-admin';\nimport useColumnsSelected from '../../controller/remoteStorage/useColumnsSelected';\nimport useColumnsOrder from '../../controller/remoteStorage/useColumnsOrder';\n\n\nconst sortKnownByOther = (known, other) => {\n return known.sort((a, b) => other.indexOf(a) === -1 ? 1 : other.indexOf(a) - other.indexOf(b))\n}\n\nconst SelectColumnsMenu = ({ columns }) => {\n const classes = useStyles();\n const translate = useTranslate();\n const { resource } = useListContext();\n const columnsIds = map(columns, \"props.source\")\n const columnsMap = keyBy(columns, \"props.source\")\n const [columnsSelected, setColumnsSelected] = useColumnsSelected(resource, columnsIds);\n const [columnsOrder, setColumnsOrder] = useColumnsOrder(resource, columnsIds);\n const columnsOrderedResult = union(sortKnownByOther(columnsSelected, columnsOrder), columnsIds)\n const [columnsOrdered, setColumnsOrdered] = useState(columnsOrderedResult);\n\n\n const addColumn = (event) => {\n setColumnsSelected(\n columnsIds.filter(id => id === event.target.name || columnsSelected.includes(id))\n );\n };\n\n const removeColumn = (event) => {\n // always leave at least one column\n if (columnsSelected.length > 1) {\n setColumnsSelected(\n columnsSelected.filter(name => name !== event.target.name)\n );\n }\n };\n\n const handleDrop = useCallback(({ removedIndex, addedIndex }) => {\n if (removedIndex !== addedIndex) {\n const newColumnsOrdered = arrayMoveImmutable(columnsOrdered, removedIndex, addedIndex)\n setColumnsOrdered(newColumnsOrdered);\n setColumnsOrder(newColumnsOrdered)\n }\n\n }, [columnsOrdered]);\n\n\n\n return (\n <Container dragHandleSelector=\".drag-handle\" lockAxis=\"y\" onDrop={handleDrop}>\n {columnsOrdered.map(columnName => {\n const column = columnsMap[columnName]\n\n return column ? (\n <Draggable key={columnName}>\n <ListItem dense className={classnames(classes.listItem)}>\n <ListItemText>\n <FormControlLabel\n disabled={column.props.alwaysOn}\n control={\n <Checkbox\n name={columnName}\n checked={columnsSelected.includes(columnName)}\n onClick={columnsSelected.includes(columnName) ? removeColumn : addColumn}\n color=\"primary\"\n className={classes.checkbox}\n />\n }\n label={translate(\n ...getFieldLabelTranslationArgs({\n label: column.props.label,\n resource,\n source: columnName,\n })\n )}\n />\n </ListItemText>\n <DragHandleIcon className={classnames(\"drag-handle\", classes.dragHandleIcon)} color=\"action\" />\n </ListItem>\n </Draggable>\n ) : null\n }, [])}\n </Container>\n )\n};\n\nexport default SelectColumnsMenu;\n\n\nconst useStyles = makeStyles(\n {\n checkbox: {\n // padding: 6,\n // margin: \"-6px 8px -6px -6px\",\n marginTop: -7,\n marginBottom: -7,\n },\n listItem: {\n '&:hover .drag-handle': {\n opacity: 1,\n visibility: \"visible\",\n },\n },\n dragHandleIcon: {\n opacity: 0,\n visibility: \"hidden\",\n cursor: \"ns-resize\"\n },\n },\n { name: 'RaSelectColumnCheckbox' }\n);\n","import React, { useState, forwardRef } from 'react';\nimport isEqual from 'lodash/isEqual';\nimport map from \"lodash/map\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListSubheader from '@material-ui/core/ListSubheader';\nimport TableChartIcon from '@material-ui/icons/TableChart';\nimport { useTranslate, Button, useListContext, } from 'react-admin';\nimport { AddSavedColumnSetsDialog } from '../../lib/list/AddSavedColumnSetsDialog';\nimport { RemoveSavedColumnSetsDialog } from '../../lib/list/RemoveSavedColumnSetsDialog';\nimport SelectColumnsMenu from './AssetDatagridSelectColumnsMenu';\nimport useColumnsSelected from '../../controller/remoteStorage/useColumnsSelected';\nimport useColumnsSets from '../../controller/remoteStorage/useColumnsSets';\n\n\n\nconst useStyles = makeStyles(theme => ({\n menu: {\n backgroundColor: theme.palette.background.paper,\n },\n}),\n { name: 'RaSelectColumnsButton' }\n);\n\nconst SelectColumnsButton = forwardRef(({\n columns,\n children,\n ...rest\n}, ref) => {\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState(null);\n const translate = useTranslate();\n const { resource } = useListContext();\n const columnsIds = map(columns, \"props.source\")\n const [columnsSelected, setColumnsSelected] = useColumnsSelected(resource, columnsIds);\n const [columnsSets] = useColumnsSets(resource);\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n // add query dialog state\n const [addSavedColumnSetsDialogOpen, setAddSavedColumnSetsDialogOpen] = useState(false);\n\n const hideAddSavedColumnSetsDialog = () => {\n setAddSavedColumnSetsDialogOpen(false);\n };\n const showAddSavedColumnSetsDialog = () => {\n setAnchorEl(null);\n setAddSavedColumnSetsDialogOpen(true);\n };\n\n // remove query dialog state\n const [removeSavedColumnSetsDialogOpen, setRemoveSavedColumnSetsDialogOpen] = useState(false);\n const hideRemoveSavedColumnSetsDialog = () => {\n setRemoveSavedColumnSetsDialogOpen(false);\n };\n const showRemoveSavedColumnSetsDialog = () => {\n setAnchorEl(null);\n setRemoveSavedColumnSetsDialogOpen(true);\n };\n\n\n const hasSavedCurrentColumnSets = columnsSets.some(columnSet => {\n return isEqual(columnSet.value, columnsSelected)\n });\n\n return (\n <>\n <Button\n color=\"primary\"\n onClick={handleClick}\n label={translate('ra-preferences.action.choose_columns', {\n _: 'Choose columnsSelected',\n })}\n {...rest}\n >\n {children || <TableChartIcon />}\n </Button>\n <Menu\n ref={ref}\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={handleClose}\n MenuListProps={{\n className: classes.menu,\n subheader: <li />\n }}\n >\n <ListSubheader>{translate('ra-preferences.saved_column_sets.label')}</ListSubheader>\n {columnsSets.map((columnSet, index) =>\n isEqual(columnSet.value, columnsSelected) ? (\n <MenuItem\n onClick={showRemoveSavedColumnSetsDialog}\n key={index}\n >\n {translate(\n 'ra-preferences.saved_column_sets.remove_label_with_name',\n {\n _: 'Remove column set \"%{name}\"',\n name: columnSet.label,\n }\n )}\n </MenuItem>\n ) : (\n <MenuItem\n onClick={() => {\n setColumnsSelected(columnSet.value)\n setAnchorEl(null);\n }}\n key={index}\n >\n {columnSet.label}\n </MenuItem>\n )\n )}\n {!hasSavedCurrentColumnSets ? (\n <MenuItem onClick={showAddSavedColumnSetsDialog}>\n {translate('ra-preferences.saved_column_sets.new_label', {\n _: 'Save current column set...',\n })}\n </MenuItem>\n ) : null}\n <ListSubheader>Колонки</ListSubheader>\n <SelectColumnsMenu columns={columns} />\n\n\n </Menu>\n <AddSavedColumnSetsDialog\n open={addSavedColumnSetsDialogOpen}\n onClose={hideAddSavedColumnSetsDialog}\n />\n <RemoveSavedColumnSetsDialog\n open={removeSavedColumnSetsDialogOpen}\n onClose={hideRemoveSavedColumnSetsDialog}\n />\n </>\n );\n});\n\nexport default SelectColumnsButton;\n","import { useEffect } from 'react';\nimport { parse, stringify } from 'query-string';\nimport isEqual from 'lodash/isEqual';\nimport { useHistory, useLocation } from 'react-router-dom';\nimport useLocalStorage from '../../lib/hook/useLocalStorage';\n\n\nconst useListColumnsWithLocation = (resource, initialValue = []) => {\n const location = useLocation();\n const history = useHistory();\n const params = parse(location.search)\n const [listColumns, setListColumns] = useLocalStorage(`${resource}.list.columns`, initialValue.slice(0, 10))\n const locationColumnsSignature = JSON.stringify(listColumns)\n\n useEffect(() => {\n const { columns: initColumns } = params\n const columns = initColumns ? JSON.parse(initColumns) : initColumns\n if (columns && !isEqual(columns, listColumns)) {\n setListColumns(columns)\n }\n }, [])\n\n useEffect(() => {\n history.push({\n search: `?${stringify({\n ...params,\n columns: JSON.stringify(listColumns),\n })}`,\n });\n }, [locationColumnsSignature])\n\n\n // useEffect(() => {\n // const { columns } = params\n // return JSON.parse(columns) || initialValue.slice(0, 10)\n // }, [locationColumnsSignature])\n\n // const setLocationColumnse = useCallback((listColumns) => {\n // history.push({\n // search: `?${stringify({\n // ...params,\n // columns: JSON.stringify(listColumns),\n // })}`,\n // });\n // }, [params])\n\n\n\n return [listColumns, setListColumns]\n}\n\n\n\n\n\nexport default useListColumnsWithLocation;\n","import React, { forwardRef, useCallback } from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate, getFieldLabelTranslationArgs } from 'react-admin';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\n\n\n\nconst useStyles = makeStyles(theme => ({\n checkbox: {\n padding: 4,\n marginRight: 8,\n marginLeft: -6,\n marginTop: -2,\n marginBottom: -2,\n },\n label: {\n flexGrow: 1,\n marginRight: 8,\n },\n dragHandleIcon: {\n cursor: \"ns-resize\",\n '&:hover': {\n color: theme.palette.action.active,\n },\n },\n}), { name: 'ColumnsButtonMenuItem' });\n\nconst AssetDatagridColumnsButtonMenuItem = forwardRef((props, ref) => {\n const {\n choice,\n checked,\n onClick,\n } = props;\n const classes = useStyles();\n const translate = useTranslate();\n const handleToggle = useCallback((event) => {\n event.stopPropagation();\n onClick(choice.id);\n }, [onClick, choice]);\n\n return (\n <ListItem\n ref={ref}\n dense\n button\n onClick={handleToggle}\n disabled={choice.alwaysOn}\n name={choice.id}\n >\n <Checkbox\n disableRipple\n inputProps={{ 'aria-labelledby': choice.id }}\n checked={checked}\n color=\"primary\"\n className={classes.checkbox}\n />\n <span className={classes.label}>\n {translate(\n ...getFieldLabelTranslationArgs({\n label: choice.label,\n resource: choice.resource,\n source: choice.source,\n })\n )}\n </span>\n {checked && (<ListItemSecondaryAction>\n <DragIndicatorIcon className={classnames(\"drag-handle\", classes.dragHandleIcon)} color=\"disabled\" fontSize=\"small\" />\n </ListItemSecondaryAction>)}\n </ListItem>\n );\n});\n\n\n\n\nexport default AssetDatagridColumnsButtonMenuItem","import React, { useState, useCallback, useRef, } from 'react';\nimport keyBy from \"lodash/keyBy\";\nimport uniqBy from \"lodash/uniqBy\";\nimport debounce from \"lodash/debounce\";\nimport { arrayMoveImmutable } from \"array-move\";\nimport { Container, Draggable } from \"react-smooth-dnd\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport TextField from '@material-ui/core/TextField';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport SearchIcon from '@material-ui/icons/Search';\nimport CardContent from '@material-ui/core/CardContent';\nimport Popover from '@material-ui/core/Popover';\nimport MenuList from '@material-ui/core/MenuList';\nimport ListItem from '@material-ui/core/ListItem';\nimport Typography from '@material-ui/core/Typography';\nimport TableChartIcon from '@material-ui/icons/TableChart';\nimport { Button, useTranslate, useGetList } from 'react-admin';\nimport useListColumnsWithLocation from './useListColumnsWithLocation';\nimport AssetDatagridColumnsButtonMenuItem from './AssetDatagridColumnsButtonMenuItem';\n\n\n\nconst useStyles = makeStyles({\n root: { display: 'inline-block' },\n paper: {\n overflow: \"hidden\",\n display: \"flex\",\n flexDirection: \"column\",\n },\n list: {\n outline: 0,\n maxHeight: 'calc(100% - 96px)',\n WebkitOverflowScrolling: 'touch',\n overflowY: \"auto\"\n },\n},\n { name: 'ColumnsButton' });\n\n\nconst AssetDatagridColumnsButton = (props) => {\n const {\n columns,\n className,\n ...rest\n } = props;\n\n const translate = useTranslate();\n const [open, setOpen] = useState(false);\n const anchorEl = useRef();\n const classes = useStyles(props);\n const [searchText, setSearchText] = useState(\"\");\n const { data = {}, ids = [], total } = useGetList(\"Parameter\", { page: 1, perPage: 100 }, { field: 'name', order: 'ASC' }, { q: searchText });\n const [listColumns, setListColumns] = useListColumnsWithLocation(\"AssetDatagrid\")\n const columnsChoices = columns.map(field => {\n return {\n id: field.props.source,\n resource: \"Asset\",\n source: field.props.source,\n label: field.props.label,\n alwaysOn: field.props.alwaysOn,\n }\n })\n const assetsChoices = [\n { id: \"name\", resource: \"Asset\", source: \"name\", alwaysOn: true },\n { id: \"description\", resource: \"Asset\", source: \"description\" },\n { id: \"type\", resource: \"Asset\", source: \"type\" },\n { id: \"assetClass\", resource: \"Asset\", source: \"assetClass\" },\n { id: \"events\", resource: \"Asset\", source: \"events\" },\n ]\n const parametersChoices = ids.map(id => {\n const parameter = data[id]\n return {\n id: parameter.id,\n resource: \"Parameter\",\n source: parameter.id,\n label: parameter.unit?.name ? `${parameter.name}, ${parameter.unit.name}` : parameter.name,\n }\n })\n const choices = uniqBy([...columnsChoices, ...assetsChoices, ...parametersChoices], \"id\")\n const choicesIds = choices.map(({ id }) => id)\n const choicesMap = keyBy(choices, \"id\")\n const sortedChoicesIds = Array.from(new Set([...listColumns, ...choicesIds]))\n const mergedChoices = sortedChoicesIds.map(id => choicesMap[id])\n\n\n const handleSearch = (event) => {\n const value = event.target.value.toLowerCase()\n setSearchText(value)\n }\n\n const debouncedHandleSearch = debounce(handleSearch, 750)\n\n const handleClick = useCallback(event => {\n event.preventDefault();\n setOpen(true);\n anchorEl.current = event.currentTarget;\n }, [anchorEl, setOpen]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleToggle = useCallback((columnName) => {\n\n setListColumns(previous => {\n const checked = previous.includes(columnName)\n const newColumns = checked\n ? previous.filter(item => item !== columnName)\n : previous.concat([columnName])\n return newColumns\n })\n\n }, [setListColumns]);\n\n const handleDrop = useCallback(({ removedIndex, addedIndex }) => {\n if (removedIndex !== addedIndex) {\n setListColumns(previous => {\n const newColumnsOrdered = arrayMoveImmutable(previous, removedIndex, addedIndex)\n return newColumnsOrdered\n });\n }\n\n }, [setListColumns]);\n\n const handleListKeyDown = (event) => {\n if (event.key === 'Tab') {\n event.preventDefault();\n\n if (handleClose) {\n handleClose(event, 'tabKeyDown');\n }\n }\n };\n\n\n return (\n <div\n className={classnames(classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n <Button\n className=\"add-filter\"\n label=\"ra.action.choose_columns\"\n aria-haspopup=\"true\"\n onClick={handleClick}\n >\n <TableChartIcon />\n </Button>\n <Popover\n open={open}\n anchorEl={anchorEl.current}\n onClose={handleClose}\n getContentAnchorEl={null}\n keepMounted={false}\n PaperProps={{\n classes: {\n root: classes.paper,\n },\n }}\n >\n <CardContent>\n <TextField\n fullWidth\n hiddenLabel\n onChange={debouncedHandleSearch}\n placeholder={translate('ra.action.search')}\n variant=\"filled\"\n size=\"small\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <SearchIcon color=\"disabled\" />\n </InputAdornment>\n ),\n }}\n />\n </CardContent>\n <MenuList\n data-mui-test=\"Menu\"\n onKeyDown={handleListKeyDown}\n className={classnames(classes.list)}\n >\n <Container dragHandleSelector=\".drag-handle\" lockAxis=\"y\" onDrop={handleDrop}>\n {mergedChoices.map(choice => {\n if (!choice) return null\n const checked = listColumns.includes(choice.id)\n\n return (\n <Draggable key={choice.id}>\n <AssetDatagridColumnsButtonMenuItem\n choice={choice}\n checked={checked}\n onClick={handleToggle}\n />\n </Draggable>\n )\n })}\n </Container>\n <ListItem dense >\n <Typography variant=\"caption\" color=\"textSecondary\">{`${mergedChoices.length} из ${total + assetsChoices.length}`}</Typography>\n </ListItem>\n </MenuList>\n </Popover>\n\n </div>\n );\n};\n\nconst sanitizeRestProps = ({\n displayedFilters = null,\n filterValues = null,\n showFilter = null,\n ...rest\n}) => rest;\n\n\n\nexport default AssetDatagridColumnsButton;\n","import React, { cloneElement, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { sanitizeListRestProps, useListContext, useResourceContext, useResourceDefinition } from 'ra-core';\nimport { CreateButton, ExportButton, TopToolbar } from 'react-admin';\nimport AssetDatagridExportButton from './AssetDatagridExportButton';\nimport SelectColumnsButton from './AssetDatagridSelectColumnsButton';\nimport RefreshSettingsButton from '../../lib/button/RefreshSettingsButton';\nimport AssetDatagridColumnsButton from './AssetDatagridColumnsButton';\nimport PresetButton from '../../lib/list/PresetButton';\n\n\nconst AssetDatagridActions = (props) => {\n const { className, filters, views, columns, model, ...rest } = props;\n const {\n exporter,\n currentSort,\n displayedFilters,\n filterValues,\n basePath,\n selectedIds,\n showFilter,\n total,\n } = useListContext(props);\n const resource = useResourceContext(rest);\n const { hasCreate } = useResourceDefinition(rest);\n\n\n\n return useMemo(\n () => (\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })\n }\n {/* {columns && <SelectColumnsButton columns={columns} />} */}\n <AssetDatagridColumnsButton columns={columns} />\n <PresetButton columns={columns} />\n {/* {views && <ListViewButton views={views} />}\n {hasCreate && <CreateButton basePath={basePath} />} */}\n <RefreshSettingsButton />\n {exporter !== false && (\n <AssetDatagridExportButton\n disabled={total === 0}\n resource=\"AssetDatagrid\"\n sort={currentSort}\n filterValues={filterValues}\n\n />\n )}\n </TopToolbar>\n ),\n [resource, displayedFilters, filterValues, selectedIds, filters, views, columns, total] // eslint-disable-line react-hooks/exhaustive-deps\n );\n};\n\nAssetDatagridActions.propTypes = {\n basePath: PropTypes.string,\n className: PropTypes.string,\n currentSort: PropTypes.any,\n displayedFilters: PropTypes.object,\n exporter: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n filters: PropTypes.element,\n filterValues: PropTypes.object,\n hasCreate: PropTypes.bool,\n resource: PropTypes.string,\n onUnselectItems: PropTypes.func.isRequired,\n selectedIds: PropTypes.arrayOf(PropTypes.any),\n showFilter: PropTypes.func,\n total: PropTypes.number,\n selectedColumns: PropTypes.exact({\n columns: PropTypes.objectOf(PropTypes.node),\n preferences: PropTypes.string\n }),\n};\n\nAssetDatagridActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\n\nexport default AssetDatagridActions;","import React, { useCallback, useState } from 'react';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport DownloadIcon from '@material-ui/icons/GetApp';\nimport {\n fetchRelatedRecords,\n useDataProvider,\n useNotify,\n useListContext,\n useResourceContext,\n useTranslate,\n} from 'ra-core';\nimport { Button } from 'react-admin';\n\n\nconst BulkExportButton = (props) => {\n const {\n maxResults = 1000,\n onClick,\n label = 'ra.action.export',\n icon = defaultIcon,\n exporter: customExporter,\n sort, // deprecated, to be removed in v4\n className,\n ...rest\n } = props;\n\n const {\n exporter: exporterFromContext,\n selectedIds,\n parameters,\n } = useListContext(props);\n const exporter = customExporter || exporterFromContext;\n const resource = useResourceContext(props);\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const notify = useNotify();\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleOpen = useCallback((event) => {\n setAnchorEl(event.currentTarget);\n });\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n });\n\n const handleXlsxExport = useCallback(event => {\n handleClose()\n dataProvider\n .getMany(resource, { ids: selectedIds, parameters })\n .then(\n ({ data }) =>\n exporter.xlsxExporter &&\n exporter.xlsxExporter(\n data,\n fetchRelatedRecords(dataProvider),\n dataProvider,\n resource\n )\n )\n .catch(error => {\n console.error(error);\n notify('ra.notification.http_error', { type: 'warning' });\n });\n if (typeof onClick === 'function') {\n onClick(event);\n }\n }, [dataProvider, exporter, notify, onClick, resource, selectedIds]);\n\n const handleJsonExport = useCallback(event => {\n handleClose()\n dataProvider\n .getMany(resource, { ids: selectedIds, parameters })\n .then(\n ({ data }) =>\n exporter.jsonExporter &&\n exporter.jsonExporter(\n data,\n fetchRelatedRecords(dataProvider),\n dataProvider,\n resource\n )\n )\n .catch(error => {\n console.error(error);\n notify('ra.notification.http_error', { type: 'warning' });\n });\n if (typeof onClick === 'function') {\n onClick(event);\n }\n }, [dataProvider, exporter, notify, onClick, resource, selectedIds]);\n\n\n return (\n <span>\n <Button\n aria-controls=\"bulk-export-menu\"\n aria-haspopup=\"true\"\n onClick={handleOpen}\n label={label}\n {...sanitizeRestProps(rest)}\n >\n {icon}\n </Button>\n <Menu\n id=\"bulk-export-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n >\n <MenuItem onClick={handleXlsxExport} >{translate('ra.action.xlsx_export')}</MenuItem>\n <MenuItem onClick={handleJsonExport} >{translate('ra.action.json_export')}</MenuItem>\n </Menu>\n </span>\n\n );\n};\n\nconst defaultIcon = <DownloadIcon />;\n\nconst sanitizeRestProps = ({\n basePath,\n filterValues,\n resource,\n selectedIds,\n ...rest\n}) =>\n rest;\n\nexport default BulkExportButton;","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { sanitizeResource } from './utils';\n\n\n\nconst WRITE_MULTIPLE_TAGS = gql`\n mutation writeMultipleTags($input: WriteValueInput!) {\n data: Tag {\n data: writeValue(input: $input) {\n items {\n tag {\n resource\n tag\n }\n value\n type\n quality\n timestamp\n timestampSrv\n utcOffset\n }\n }\n }\n }\n`;\n\nconst writeMultiple = (args) => {\n const { ids, data } = args\n\n\n return graphqlClient.request(WRITE_MULTIPLE_TAGS, {\n input: {\n filter: {\n id_in: ids\n },\n value: data.value\n }\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler)\n}\n\nexport default writeMultiple","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EVENT_FRAGMENT } from './typeDefs';\nimport { sanitizeResource, sanitizeInput } from './utils';\n\n\n\nexport const CREATE_MANY_EVENTS = gql`\n mutation createManyEvents($input: EventCreateManyInput!) {\n data: Event {\n data: createMany(input: $input) {\n items {\n ...EventFragment\n }\n }\n }\n }\n ${EVENT_FRAGMENT}\n`;\n\nexport default (args) => {\n const { data } = args;\n\n const items = data.map(sanitizeInput)\n\n return graphqlClient.request(CREATE_MANY_EVENTS, {\n input: {\n items\n }\n })\n .then(async (response) => {\n const items = response?.data?.data?.items;\n\n return {\n data: items.map(sanitizeResource),\n };\n }).catch(graphqlErrorHandler);\n};","import React, { useCallback, useState } from 'react';\nimport get from 'lodash/get';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport CallIcon from '@material-ui/icons/Call';\nimport classnames from 'classnames';\nimport { fetchEnd, fetchStart, useNotify, useTranslate, useResourceContext, useUnselectAll, Button } from 'react-admin';\nimport writeMultipleTags from '../../dataProvider/DatabusService/Tag/writeMultiple';\nimport { buildIdFromTag } from '../../dataProvider/DatabusService/Tag/utils';\nimport createManyEvents from '../../dataProvider/EventbusService/Event/createMany';\n\n\n\nconst stopPropagation = e => e.stopPropagation();\n\nconst BulkCallButton = props => {\n const {\n basePath,\n classes: classesOverride,\n className,\n filterValues,\n selectedIds,\n ...rest\n } = props;\n\n const notify = useNotify()\n const translate = useTranslate()\n const unselectAll = useUnselectAll()\n const dispatch = useDispatch()\n const [loading, setLoading] = useState(false)\n\n const resource = useResourceContext(props);\n const handleConnect = useCallback((event) => {\n stopPropagation(event)\n dispatch(fetchStart());\n setLoading(true)\n\n writeMultipleTags({\n ids: selectedIds.map(id => buildIdFromTag({ resource: id, tag: \"RING\" })),\n data: {\n value: 1\n },\n })\n .then(({ data }) => {\n\n notify('ra.notification.called', 'info', { smart_count: data.length });\n const title = translate('ra.notification.called', { smart_count: 1 })\n\n createManyEvents({\n data: data.map(tag => {\n const { id, assetId, parameterId, type, value } = tag\n const body = `${id} = ${value.toString()} (${type})`\n\n return {\n resource: assetId,\n tag: parameterId,\n type: \"Info\",\n active: false,\n message: { title, body },\n ackRequired: false,\n priority: 0,\n }\n\n })\n })\n\n unselectAll(resource)\n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n })\n .finally(() => {\n dispatch(fetchEnd());\n setTimeout(() => {\n setLoading(false)\n }, 3000)\n });\n\n }, [selectedIds, dispatch, setLoading, notify, translate]);\n\n return (\n <Button\n onClick={handleConnect}\n // disabled={loading}\n label='ra.action.call'\n className={classnames('ra-connect-button', className)}\n key=\"button\"\n {...rest}\n >\n <CallIcon />\n </Button>\n );\n};\n\nexport default BulkCallButton;\n","import React from \"react\";\nimport AssetDatagridBulkExportButton from './AssetDatagridBulkExportButton';\nimport BulkCallButton from '../../lib/button/BulkCallButton';\n\n\n\nconst AssetDatagridBulkActions = props => {\n return (\n <>\n <AssetDatagridBulkExportButton {...props} resource=\"AssetDatagrid\" />\n <BulkCallButton {...props} />\n </>\n )\n};\n\nexport default AssetDatagridBulkActions","import React from \"react\";\nimport { ReferenceInput, AutocompleteInput, AutocompleteArrayInput, ReferenceArrayInput } from \"react-admin\";\nimport SearchInput from '../../lib/input/SearchInput';\nimport BooleanInput from '../../lib/input/BooleanInput';\nimport Filter from \"../../lib/list/filter/Filter\";\nimport QuickFilterInput from \"../../lib/input/QuickFilterInput\";\nimport ProfileReferenceInput from '../Profile/ProfileReferenceInput';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\nimport CustomSelectArrayInput from '../../lib/input/CustomSelectArrayInput'\nimport TreeCatalogSelector from '../Catalog/TreeCatalogSelector'\n\n\n\nconst getSelectedItemsTags = (items, selectedItems) => items.filter(item => !selectedItems.some(selectedItem => selectedItem.id === item.id));\nconst catalogOptionText = item => `${item.name}`\n\nconst AssetDatagridFilter = (props) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <QuickFilterInput source=\"favorite\" label=\"resources.Asset.fields.favorite\" defaultValue={true} />\n <ReferenceInput source=\"type.id\" reference=\"AssetType\" label=\"resources.Asset.fields.type\">\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <CustomSelectArrayInput\n //alwaysOn\n hasSingleSelect\n source=\"catalog\"\n label=\"Каталог\"\n getSelectedItems={getSelectedItemsTags}\n clipLabelsTextWidth={250}\n optionText={catalogOptionText}\n >\n <TreeCatalogSelector resource=\"Catalog\" />\n </CustomSelectArrayInput>\n <ReferenceInput source=\"assetClass.id\" reference=\"AssetClass\" label=\"resources.Asset.fields.assetClass\">\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <ReferenceArrayInput source=\"labelsAndIds\" allowEmpty={false} reference=\"Label\" filter={{ typename: \"Asset\" }} label=\"resources.Asset.fields.labelsAndIds\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"labelsNotAndIds\" allowEmpty={false} reference=\"Label\" filter={{ typename: \"Asset\" }} label=\"resources.Asset.fields.labelsNotAndIds\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ProfileReferenceInput source=\"createdById\" label=\"resources.Asset.fields.createdBy\" reference=\"Profile\" resettable sort={{ field: 'name', order: 'ASC' }} />\n <BooleanInput source=\"tags.ALARM.value\" label=\"resources.Parameter.enums.id.ALARM\" displayNull />\n <BooleanInput source=\"tags.ACK.value\" label=\"resources.Parameter.enums.id.ACK\" displayNull />\n <QuickFilterInput source=\"deleted\" label=\"ra.input.deleted\" defaultValue={true} />\n </Filter>\n);\n\nexport default AssetDatagridFilter","import { cloneElement } from \"react\";\nimport get from 'lodash/get';\n\n\nconst sanitizeProps = ({ alwaysOn, hideDefault, column, ...other }) => other\n\nconst AssetDatagridParameterField = ({ children, record, source, parameter, ...props }) => {\n\n const data = get(record, source)\n\n return (cloneElement(children, {\n ...sanitizeProps(props),\n record: data ? { ...data, parameter } : data,\n }))\n};\n\n\n\nexport default AssetDatagridParameterField;","import React, { useMemo, cloneElement, useEffect, useState } from \"react\";\nimport keyBy from \"lodash/keyBy\";\nimport map from \"lodash/map\";\nimport omit from \"lodash/omit\";\nimport classnames from \"classnames\";\nimport { ListContextProvider, Datagrid, TextField, BulkExportButton, useGetList } from 'react-admin';\nimport ListView from '../../lib/list/ListView';\nimport useListController from './useListController';\nimport useListStyles from \"../../lib/list/useListStyles\";\nimport ResourceLinkField from '../../lib/field/ResourceLinkField';\nimport NestedField from '../../lib/field/NestedField';\nimport DataField from '../../lib/field/data/DataField';\nimport HasEventsField from '../../lib/field/HasEventsField';\nimport CallButton from '../../lib/button/CallButton';\nimport AssetDatagridActions from './AssetDatagridActions';\nimport AssetDatagridBulkActions from './AssetDatagridBulkActions';\nimport AssetDatagridFilter from './AssetDatagridFilter';\nimport AssetDatagridParameterField from './AssetDatagridParameterField';\nimport useExporter, { dateFormatter, booleanFormatter, linkFormatter } from '../../lib/exporter';\nimport AssetMoreActionsButton from '../Asset/AssetMoreActionsButton';\nimport DefaultDashboardPlayIconButton from \"../../lib/button/DefaultDashboardPlayIconButton\";\nimport useListColumnsWithLocation from './useListColumnsWithLocation';\n\n\n\nexport const modelExport = [\n { key: \"id\", header: \"resources.Asset.fields.id\" },\n { key: \"name\", header: \"resources.Asset.fields.name\" },\n { key: \"description\", header: \"resources.Asset.fields.description\" },\n { key: \"type.name\", header: [\"resources.Asset.fields.type\", \"resources.AssetType.fields.name\"] },\n { key: \"type.id\", header: [\"resources.Asset.fields.type\", \"resources.AssetType.fields.id\"] },\n { key: \"assetClass.name\", header: [\"resources.AssetDatagrid.fields.assetClass\", \"resources.AssetClass.fields.name\"] },\n { key: \"assetClass.id\", header: [\"resources.AssetDatagrid.fields.assetClass\", \"resources.AssetClass.fields.id\"] },\n { key: \"createdAt\", header: \"resources.Asset.fields.createdAt\", format: dateFormatter },\n { key: \"updatedAt\", header: \"resources.Asset.fields.updatedAt\", format: dateFormatter },\n { key: \"link\", header: \"Ccылка\", format: linkFormatter(\"Asset\", \"id\") },\n]\n\nconst getExportFormatFunction = type => {\n switch (type) {\n case \"ID\": return undefined\n case \"STRING\": return undefined\n case \"MARKDOWN\": return undefined\n case \"BOOLEAN\": return booleanFormatter\n case \"INT\": return undefined\n case \"BIGINT\": return undefined\n case \"FLOAT\": return undefined\n case \"DATETIME\": return dateFormatter\n case \"BYTE\": return undefined\n case \"JSON\": return undefined\n case \"EMAIL\": return undefined\n case \"PHONE\": return undefined\n case \"URL\": return undefined\n case \"IP\": return undefined\n case \"PORT\": return undefined\n case \"POINT\": return undefined\n case \"CRON\": return undefined\n default: return undefined\n }\n}\n\nconst getParametersExportModel = (parameters) => {\n const model = parameters.map(({ id, name, unit, type }) => {\n return {\n key: `${id}.value`,\n header: unit?.name ? `${name}, ${unit.name}` : name,\n format: getExportFormatFunction(type)\n }\n })\n\n return model\n}\n\n\nconst defaultAssetColumns = [\"name\", \"description\", \"type\", \"assetClass\", \"events\"]\n\nconst emptyArray = []\n\nconst useAssetFields = (assetColumns, classes) => {\n const fieldsSignature = JSON.stringify(assetColumns)\n const assetFields = [\n <ResourceLinkField source=\"name\" basePath=\"Asset\" alwaysOn cellClassName={classes.celllLineClamp} />, //alwaysOn нельзя скрыть столбец\n <TextField source=\"description\" cellClassName={classes.celllLineClamp} />,\n <NestedField source=\"type\" reference=\"AssetType\" sortBy=\"type.name\" link={false} cellClassName={classes.celllLineClamp} >\n <TextField source=\"name\" />\n </NestedField>,\n <NestedField source=\"assetClass\" reference=\"AssetClass\" sortable={false} cellClassName={classes.celllLineClamp}>\n <TextField source=\"name\" />\n </NestedField>,\n <HasEventsField source=\"events\" sortable={false} cellClassName={classes.cellAction} />\n ];\n\n const memoAssetFields = useMemo(() => {\n return assetFields.filter(field => {\n const column = field.key || field.props.source\n return assetColumns.includes(column)\n })\n }, [fieldsSignature]);\n\n return memoAssetFields\n}\n\nconst useParameters = (parametersColumns) => {\n const sortedParametersColumns = parametersColumns.sort()\n const { data = {}, ids = [] } = useGetList('Parameter', { page: 1, perPage: sortedParametersColumns.length }, { field: 'name', order: 'ASC' }, { ids: sortedParametersColumns }, { enabled: sortedParametersColumns.length > 0 });\n const [parameters, setParameters] = useState(emptyArray)\n const setParametersSignature = JSON.stringify(ids)\n useEffect(() => {\n if (ids.length > 0) {\n setParameters(ids.map(id => data[id]))\n }\n }, [setParametersSignature])\n\n return parameters\n}\n\nconst useParameterFields = (parameters, classes) => {\n\n const memoParametersFields = useMemo(() => {\n return parameters.map(parameter => {\n return (\n <AssetDatagridParameterField\n key={parameter.id}\n source={parameter.id}\n label={parameter.unit?.name ? `${parameter.name}, ${parameter.unit.name}` : parameter.name}\n sortBy={`tags.${parameter.id}`}\n parameter={parameter}\n >\n <DataField source=\"value\" />\n </AssetDatagridParameterField>\n )\n })\n }, [parameters]);\n\n return memoParametersFields\n}\n\n\nconst useDatagridFields = (listColumns, datagridFields) => {\n const datagridFieldsMap = keyBy(datagridFields, field => field.key || field.props.source)\n const selectedColumns = listColumns.filter(id => Boolean(datagridFieldsMap[id]))\n\n const memoDatagridFields = useMemo(() => {\n const fields = listColumns.reduce((acc, column) => {\n const datagridField = datagridFieldsMap[column]\n\n return datagridField ? [...acc, datagridField] : acc\n }, [])\n\n return fields\n }, [selectedColumns])\n\n return memoDatagridFields;\n};\n\n\nconst AssetDatagridList = (props) => {\n const { resource } = props\n const classes = useListStyles();\n const [listColumns] = useListColumnsWithLocation(resource, defaultAssetColumns);\n const { assetColumns, parametersColumns } = listColumns.reduce((acc, column) => {\n const isAssetColumn = defaultAssetColumns.includes(column)\n if (isAssetColumn) {\n acc.assetColumns.push(column)\n } else {\n acc.parametersColumns.push(column)\n }\n return acc\n\n }, { assetColumns: [], parametersColumns: [] })\n\n const parameters = useParameters(parametersColumns)\n const AssetFields = useAssetFields(assetColumns, classes)\n const ParameterFields = useParameterFields(parameters, classes)\n const DatagridFields = useDatagridFields(listColumns, [...AssetFields, ...ParameterFields])\n const exporter = useExporter([...modelExport, ...getParametersExportModel(parameters)])\n const columns = DatagridFields\n const controllerProps = useListController({ ...props, exporter, columns, parameters });\n\n return (\n <ListContextProvider value={controllerProps}>\n <ListView\n {...props}\n {...controllerProps}\n actions={<AssetDatagridActions columns={columns} />}\n bulkActionButtons={<AssetDatagridBulkActions />}\n filters={<AssetDatagridFilter />}\n resource=\"Asset\"\n basePath=\"/Asset\"\n >\n <Datagrid>\n <DefaultDashboardPlayIconButton cellClassName={`${classes.cellMinWidth} ${classes.cellAction}`} />\n {DatagridFields}\n <CallButton cellClassName={classnames(classes.cellMinWidth, classes.cellAction)} />\n <AssetMoreActionsButton cellClassName={`${classes.cellMinWidth} ${classes.cellAction}`} />\n </Datagrid>\n </ListView>\n {/* <button onClick={handleClick}>aaa</button> */}\n </ListContextProvider>\n )\n};\n\nAssetDatagridList.defaultProps = {\n sort: { field: 'name', order: 'ASC' }\n}\n\n\n// const AssetDatagridListWithParameters = (props) => {\n// const parameters = useParameters()\n// const hasParameters = Boolean(Array.isArray(parameters) && parameters.length > 0)\n\n// return hasParameters ? (\n// <AssetDatagridList {...props} parameters={parameters} />\n// ) : null\n// };\n\nexport default AssetDatagridList;","import AssetDatagridIcon from '@material-ui/icons/TableChart';\nimport AssetDatagridList from './AssetDatagridList';\n\n\nconst AssetDatagridName = \"AssetDatagrid\"\n\nconst AssetDatagridResource = {\n name: AssetDatagridName,\n icon: AssetDatagridIcon,\n list: AssetDatagridList,\n\n}\n\nexport default AssetDatagridResource;\n\nexport {\n AssetDatagridName,\n AssetDatagridList,\n AssetDatagridIcon,\n};","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M9 4.5C9 2.6 7.4 1 5.5 1S2 2.6 2 4.5C2 7.1 5.5 11 5.5 11S9 7.1 9 4.5zM5.5 5.8c.7 0 1.3-.6 1.2-1.2 0-.6-.6-1.2-1.2-1.2s-1.2.5-1.2 1.2c0 .6.5 1.2 1.2 1.2zM11 4.5c0-.52-.07-1.02-.21-1.5h7.73a.5.5 0 01.35.85L3.85 18.87a.5.5 0 01-.85-.35V11.1a26.75 26.75 0 00.83 1.03L5.5 14l1.67-1.87A23.86 23.86 0 008.9 9.84c.47-.7.98-1.54 1.37-2.4.38-.85.72-1.88.72-2.94zM5.4 20.15a.5.5 0 00.36.85h12.62a.5.5 0 00.35-.85l-5.25-5.25a2 2 0 00-2.82 0L5.4 20.15zM21 18.38a.5.5 0 01-.85.35l-5.25-5.25a2 2 0 010-2.82l5.25-5.25a.5.5 0 01.85.35v12.62z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React, { cloneElement, useMemo } from 'react';\nimport { sanitizeListRestProps, useListContext, useResourceContext } from 'ra-core';\nimport { TopToolbar } from 'react-admin';\nimport ExportButton from '../../lib/button/ExportButton';\nimport RefreshSettingsButton from '../../lib/button/RefreshSettingsButton';\nimport PresetButton from '../../lib/list/PresetButton';\n\n\nconst ListActions = (props) => {\n const { className, filters, ...rest } = props;\n const {\n exporter,\n currentSort,\n displayedFilters,\n filterValues,\n basePath,\n selectedIds,\n showFilter,\n total,\n } = useListContext(props);\n const resource = useResourceContext(rest);\n\n return useMemo(\n () => (\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })\n }\n <PresetButton />\n <RefreshSettingsButton />\n {exporter !== false && (\n <ExportButton\n disabled={total === 0}\n resource={resource}\n sort={currentSort}\n filterValues={filterValues}\n />\n )}\n </TopToolbar>\n ),\n [resource, displayedFilters, filterValues, selectedIds, filters, total] // eslint-disable-line react-hooks/exhaustive-deps\n );\n};\n\n\nListActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\n\nexport default ListActions;","import React from \"react\";\nimport { ReferenceInput, AutocompleteInput, AutocompleteArrayInput, ReferenceArrayInput } from \"react-admin\";\nimport SearchInput from '../../lib/input/SearchInput';\nimport BooleanInput from '../../lib/input/BooleanInput';\nimport Filter from \"../../lib/list/filter/Filter\";\nimport QuickFilterInput from \"../../lib/input/QuickFilterInput\";\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\nimport CustomSelectArrayInput from '../../lib/input/CustomSelectArrayInput'\nimport TreeCatalogSelector from '../Catalog/TreeCatalogSelector'\nimport ProfileReferenceInput from '../Profile/ProfileReferenceInput';\n\n\n\nconst getSelectedItemsTags = (items, selectedItems) => items.filter(item => !selectedItems.some(selectedItem => selectedItem.id === item.id));\nconst catalogOptionText = item => `${item.name}`\n\nconst AssetDatagridFilter = (props) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <QuickFilterInput source=\"favorite\" label=\"resources.Asset.fields.favorite\" defaultValue={true} />\n <ReferenceInput source=\"type.id\" reference=\"AssetType\" label=\"resources.Asset.fields.type\">\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <CustomSelectArrayInput\n //alwaysOn\n hasSingleSelect\n source=\"catalog\"\n label=\"Каталог\"\n getSelectedItems={getSelectedItemsTags}\n clipLabelsTextWidth={250}\n optionText={catalogOptionText}\n >\n <TreeCatalogSelector resource=\"Catalog\" />\n </CustomSelectArrayInput>\n <ReferenceInput source=\"assetClass.id\" reference=\"AssetClass\" label=\"resources.Asset.fields.assetClass\">\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <ReferenceArrayInput source=\"labelsAndIds\" allowEmpty={false} reference=\"Label\" filter={{ typename: \"Asset\" }} label=\"resources.Asset.fields.labelsAndIds\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"labelsNotAndIds\" allowEmpty={false} reference=\"Label\" filter={{ typename: \"Asset\" }} label=\"resources.Asset.fields.labelsNotAndIds\">\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ProfileReferenceInput source=\"createdById\" label=\"resources.Asset.fields.createdBy\" reference=\"Profile\" resettable sort={{ field: 'name', order: 'ASC' }} />\n <BooleanInput source=\"tags.ALARM.value\" label=\"resources.Parameter.enums.id.ALARM\" displayNull />\n <BooleanInput source=\"tags.ACK.value\" label=\"resources.Parameter.enums.id.ACK\" displayNull />\n <QuickFilterInput source=\"deleted\" label=\"ra.input.deleted\" defaultValue={true} />\n </Filter>\n);\n\nexport default AssetDatagridFilter","import React, { Children, cloneElement } from 'react';\nimport Paper from '@material-ui/core/Paper';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n defaultExporter,\n useListContext,\n getListControllerProps,\n useVersion,\n} from 'ra-core';\nimport {\n Title,\n ListToolbar,\n Pagination as DefaultPagination,\n BulkDeleteButton,\n BulkActionsToolbar,\n ListActions as DefaultActions,\n Empty,\n} from 'react-admin';\nimport DefaultListBreadcrumbs from '../breadcrumbs/ListBreadcrumbs';\n\n\n\nexport const MapView = (props) => {\n const {\n actions,\n breadcrumbs,\n filters,\n // bulkActionButtons,\n children,\n className,\n classes: classesOverride,\n component: Content,\n exporter = defaultExporter,\n title,\n empty,\n ...rest\n } = props;\n const controllerProps = getListControllerProps(props); // deprecated, to be removed in v4\n const listContext = useListContext(props);\n const classes = useStyles(props);\n const {\n defaultTitle,\n total,\n loaded,\n loading,\n filterValues,\n selectedIds,\n } = listContext;\n const version = useVersion();\n\n // const shouldRenderEmptyPage =\n // loaded && !loading && total === 0 && !Object.keys(filterValues).length;\n\n return (\n <div\n className={classnames('map-page', classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n <Title title={title} defaultTitle={defaultTitle} />\n {breadcrumbs}\n {(filters || actions) && (\n <ListToolbar\n filters={filters}\n {...controllerProps} // deprecated, use ListContext instead, to be removed in v4\n actions={actions}\n exporter={exporter} // deprecated, use ListContext instead, to be removed in v4\n />\n )}\n <Content className={classes.map}>\n {children}\n </Content>\n </div>\n );\n};\n\nconst DefaultBulkActionButtons = props => <BulkDeleteButton {...props} mutationMode=\"optimistic\" undoable={false}/>;\n\nMapView.defaultProps = {\n actions: <DefaultActions />,\n breadcrumbs: <DefaultListBreadcrumbs />,\n classes: {},\n component: Paper,\n pagination: <DefaultPagination />,\n empty: <Empty />,\n};\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n\n flexGrow: 1,\n display: 'flex',\n flexDirection: \"column\",\n },\n map: {\n flex: '1 1 auto',\n overflow: 'hidden',\n },\n\n actions: {\n zIndex: 2,\n display: 'flex',\n justifyContent: 'flex-end',\n flexWrap: 'wrap',\n },\n noResults: { padding: 20 },\n }),\n { name: 'RaMap' }\n);\n\n\n\nconst sanitizeRestProps = ({\n basePath = null,\n currentSort = null,\n data = null,\n defaultTitle = null,\n displayedFilters = null,\n filterDefaultValues = null,\n filterValues = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n hideFilter = null,\n history = null,\n ids = null,\n loading = null,\n loaded = null,\n location = null,\n match = null,\n onSelect = null,\n onToggleItem = null,\n onUnselectItems = null,\n options = null,\n page = null,\n permissions = null,\n perPage = null,\n refetch = null,\n resource = null,\n selectedIds = null,\n setFilters = null,\n setPage = null,\n setPerPage = null,\n setSort = null,\n showFilter = null,\n syncWithLocation = null,\n sort = null,\n total = null,\n ...rest\n}) => rest;\n\nexport default MapView;\n","import { isValidElement, useEffect, useMemo } from 'react';\nimport merge from 'lodash/merge';\nimport { useCheckMinimumRequiredProps, useListParams, useRecordSelection } from 'react-admin';\nimport { useTranslate, useNotify, CRUD_GET_LIST } from 'react-admin';\nimport { SORT_ASC } from 'ra-core/esm/reducer/admin/resource/list/queryReducer';\nimport { defaultExporter } from 'ra-core';\nimport { useResourceContext, useGetResourceLabel, useGetMainList } from 'ra-core';\n\n\n\nconst defaultSort = {\n field: 'id',\n order: SORT_ASC,\n};\n\nconst useListController = (props) => {\n useCheckMinimumRequiredProps('List', ['basePath'], props);\n\n const {\n basePath,\n exporter = defaultExporter,\n filterDefaultValues,\n hasCreate,\n sort = defaultSort,\n perPage = 10,\n filter,\n debounce = 500,\n syncWithLocation,\n } = props;\n const resource = useResourceContext(props);\n\n if (!resource) {\n throw new Error(\n `<List> was called outside of a ResourceContext and without a resource prop. You must set the resource prop.`\n );\n }\n if (filter && isValidElement(filter)) {\n throw new Error(\n '<List> received a React element as `filter` props. If you intended to set the list filter elements, use the `filters` (with an s) prop instead. The `filter` prop is internal and should not be set by the developer.'\n );\n }\n\n const translate = useTranslate();\n const notify = useNotify();\n\n const [query, queryModifiers] = useListParams({\n resource,\n filterDefaultValues,\n sort,\n perPage,\n debounce,\n syncWithLocation,\n });\n\n const [selectedIds, selectionModifiers] = useRecordSelection(resource);\n\n /**\n * We want the list of ids to be always available for optimistic rendering,\n * and therefore we need a custom action (CRUD_GET_LIST) that will be used.\n */\n const {\n ids,\n data,\n total,\n error,\n loading,\n loaded,\n refetch,\n } = useGetMainList(\n resource,\n {\n page: query.page,\n perPage: query.perPage,\n },\n { field: query.sort, order: query.order },\n merge(query.filter, filter),\n {\n action: CRUD_GET_LIST,\n onFailure: error =>\n notify(\n typeof error === 'string'\n ? error\n : error.message || 'ra.notification.http_error',\n {\n type: 'warning',\n messageArgs: {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n },\n }\n ),\n }\n );\n\n const totalPages = Math.ceil(total / query.perPage) || 1;\n\n useEffect(() => {\n if (\n query.page <= 0 ||\n (!loading && query.page > 1 && ids.length === 0)\n ) {\n // Query for a page that doesn't exist, set page to 1\n queryModifiers.setPage(1);\n } else if (!loading && query.page > totalPages) {\n // Query for a page out of bounds, set page to the last existing page\n // It occurs when deleting the last element of the last page\n queryModifiers.setPage(totalPages);\n }\n }, [loading, query.page, ids, queryModifiers, total, totalPages]);\n\n const currentSort = useMemo(\n () => ({\n field: query.sort,\n order: query.order,\n }),\n [query.sort, query.order]\n );\n\n const getResourceLabel = useGetResourceLabel();\n const defaultTitle = translate('ra.page.list', {\n name: getResourceLabel(resource, 2),\n });\n\n return {\n basePath,\n currentSort,\n data,\n defaultTitle,\n displayedFilters: query.displayedFilters,\n error,\n exporter,\n filter,\n filterValues: query.filterValues,\n hasCreate,\n hideFilter: queryModifiers.hideFilter,\n ids,\n loaded: loaded || ids.length > 0,\n loading,\n onSelect: selectionModifiers.select,\n onToggleItem: selectionModifiers.toggle,\n onUnselectItems: selectionModifiers.clearSelection,\n page: query.page,\n perPage: query.perPage,\n refetch,\n resource,\n selectedIds,\n setFilters: queryModifiers.setFilters,\n setPage: queryModifiers.setPage,\n setPerPage: queryModifiers.setPerPage,\n setSort: queryModifiers.setSort,\n showFilter: queryModifiers.showFilter,\n total: total,\n };\n};\n\nexport const injectedProps = [\n 'basePath',\n 'currentSort',\n 'data',\n 'defaultTitle',\n 'displayedFilters',\n 'error',\n 'exporter',\n 'filterValues',\n 'hasCreate',\n 'hideFilter',\n 'ids',\n 'loading',\n 'loaded',\n 'onSelect',\n 'onToggleItem',\n 'onUnselectItems',\n 'page',\n 'perPage',\n 'refetch',\n 'refresh',\n 'resource',\n 'selectedIds',\n 'setFilters',\n 'setPage',\n 'setPerPage',\n 'setSort',\n 'showFilter',\n 'total',\n 'totalPages',\n 'version',\n];\n\n/**\n * Select the props injected by the useListController hook\n * to be passed to the List children need\n * This is an implementation of pick()\n */\nexport const getListControllerProps = props =>\n injectedProps.reduce((acc, key) => ({ ...acc, [key]: props[key] }), {});\n\n/**\n * Select the props not injected by the useListController hook\n * to be used inside the List children to sanitize props injected by List\n * This is an implementation of omit()\n */\nexport const sanitizeListRestProps = props =>\n Object.keys(props)\n .filter(propName => !injectedProps.includes(propName))\n .reduce((acc, key) => ({ ...acc, [key]: props[key] }), {});\n\nexport default useListController;\n","import React from \"react\";\nimport { ListContextProvider } from 'react-admin';\nimport AssetMapActions from './AssetMapActions';\nimport AssetMapFilter from './AssetMapFilter';\nimport MapView from '../../lib/map/MapView';\nimport MapLayer from '../../lib/map/MapLayer';\nimport MapMarker from '../../lib/map/MapMarker';\nimport useExporter, { dateFormatter, linkFormatter } from '../../lib/exporter';\nimport AssetMapCard from './AssetMapCard';\nimport useListController from './useListController';\n\n\n\nexport const model = [\n { key: \"id\", header: \"resources.Asset.fields.id\" },\n { key: \"name\", header: \"resources.Asset.fields.name\" },\n { key: \"description\", header: \"resources.Asset.fields.description\" },\n { key: \"type.name\", header: [\"resources.Asset.fields.type\", \"resources.AssetType.fields.name\"] },\n { key: \"type.id\", header: [\"resources.Asset.fields.type\", \"resources.AssetType.fields.id\"] },\n { key: \"assetClass.name\", header: [\"resources.AssetDatagrid.fields.assetClass\", \"resources.AssetClass.fields.name\"] },\n { key: \"assetClass.id\", header: [\"resources.AssetDatagrid.fields.assetClass\", \"resources.AssetClass.fields.id\"] },\n { key: \"createdAt\", header: \"resources.Asset.fields.createdAt\", format: dateFormatter },\n { key: \"updatedAt\", header: \"resources.Asset.fields.updatedAt\", format: dateFormatter },\n { key: \"link\", header: \"Ccылка\", format: linkFormatter(\"Asset\", \"id\") },\n]\n\nconst AssetMapList = (props) => {\n const exporter = useExporter(model)\n const controllerProps = useListController({\n ...props,\n exporter,\n filter: {\n tags: {\n GEO: {\n value_isNotNull: true\n }\n }\n },\n perPage: 1000\n });\n\n return (\n <ListContextProvider value={controllerProps}>\n <MapView\n {...props}\n {...controllerProps}\n actions={<AssetMapActions />}\n filters={<AssetMapFilter />}\n >\n <MapLayer >\n <MapMarker>\n <AssetMapCard />\n </MapMarker>\n </MapLayer>\n </MapView>\n </ListContextProvider>\n );\n};\n\nAssetMapList.defaultProps = {\n sort: { field: 'name', order: 'ASC' }\n}\n\nexport default AssetMapList;","import AssetMapIcon from '../../lib/icons/Map';\nimport AssetMapList from './AssetMapList';\n\n\nconst AssetMapName = \"AssetMap\"\n\nconst AssetMapResource = {\n name: AssetMapName,\n icon: AssetMapIcon,\n list: AssetMapList,\n}\n\nexport default AssetMapResource;\n\n\nexport {\n AssetMapName,\n AssetMapIcon,\n AssetMapList,\n};","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M14 10.74V5.3a.6.6 0 0 0-.32-.53L8.85 2.11A.58.58 0 0 0 8.5 2a.58.58 0 0 0-.35.1L3.32 4.78A.6.6 0 0 0 3 5.3v5.4c0 .23.13.43.32.53l4.83 2.66c.1.07.22.11.35.11.13 0 .25-.04.35-.1l1.15-.64v5.44c0 .23.13.43.32.53l4.83 2.66c.1.07.22.11.35.11.13 0 .25-.04.35-.1l4.83-2.67c.2-.1.32-.3.32-.53v-5.4a.6.6 0 0 0-.32-.53l-4.83-2.66a.58.58 0 0 0-.35-.11.58.58 0 0 0-.35.1l-1.15.64ZM4.86 5.3 8.5 3.29l3.64 2.01L8.5 7.31 4.86 5.3Zm7 8 3.64-2.01 3.64 2.01-3.64 2.01-3.64-2.01Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useListContext } from 'react-admin';\nimport useTreeContext from '../tree/controllers/useTreeContext';\nimport DashboardBreadcrumbItem from './DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from './ListBreadcrumbItem';\n\n\n\n\n\nconst TreeBreadcrumbs = (props) => {\n const contextProps = useTreeContext();\n return (\n <Breadcrumbs aria-label=\"breadcrumb\">\n <DashboardBreadcrumbItem {...contextProps} />\n <ListBreadcrumbItem {...contextProps} {...props} />\n </Breadcrumbs>\n );\n};\n\nexport default TreeBreadcrumbs\n","import React, { useCallback } from 'react';\nimport { useHistory, useLocation, Switch, Route } from 'react-router-dom';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Box from '@material-ui/core/Box';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport { Title, useVersion, linkToRecord, WithPermissions, useTranslate } from 'react-admin';\nimport TextField from '@material-ui/core/TextField';\nimport SearchIcon from '@material-ui/icons/Search';\nimport { InputAdornment } from '@material-ui/core';\n\n\nimport useTreeContext from '../../lib/tree/controllers/useTreeContext';\nimport TreeComponent from '../../lib/tree/TreeComponent';\nimport DefaultTreeBreadcrumbs from '../../lib/breadcrumbs/TreeBreadcrumbs';\n\n\nexport const RATreeView = (props) => {\n const {\n breadcrumbs,\n create,\n edit,\n show,\n className,\n component: Content,\n linkTo = 'edit',\n // nodeActions = \n title,\n changeSelect,\n enableSearch,\n ...rest\n } = props;\n\n const {\n basePath,\n resource,\n defaultTitle,\n getRootNodes,\n getNode,\n } = useTreeContext();\n\n const classes = useStyles(props);\n const version = useVersion();\n const history = useHistory();\n const location = useLocation();\n const translate = useTranslate();\n\n\n const pattern = new RegExp(`${basePath}/([^/]*)/*.*`);\n const matches = pattern.exec(location.pathname);\n const idInLocation = matches && matches[1];\n const hasCreate = !!create\n const hasEdit = !!edit\n const hasShow = !!show\n\n\n\n //only select if icon wasn't clicked\n const handleSelect = useCallback((event, nodeIds) => {\n const nodeId = nodeIds[0]\n const node = getNode(nodeId)\n const isAssetNode = node.type === \"ASSET\"\n\n if (isAssetNode) {\n const assetId = node.resource.id\n history.push(linkToRecord(basePath, assetId, linkTo));\n changeSelect && changeSelect(nodeIds);\n }\n\n }, [history, basePath, linkTo, getNode]);\n\n const handleSearch = useCallback((event) => {\n getRootNodes(event.target.value);\n }, [enableSearch]);\n\n return (\n <div\n className={classnames('tree-page', classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n \n <div className={classnames(classes.breadcrumbs)} >{breadcrumbs}</div>\n <div className={classnames(classes.main)} >\n <Content\n className={classnames(classes.content, classes.noActions)}\n key={version}\n >\n {enableSearch && <TextField\n // hiddenLabel\n label={translate('ra.action.search')}\n onChange={handleSearch}\n // placeholder={translate('ra.action.search')}\n style={{ marginBottom: 10 }}\n variant=\"filled\"\n size=\"small\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <SearchIcon color=\"disabled\" />\n </InputAdornment>\n ),\n }}\n />}\n <TreeComponent\n className={classes.tree}\n defaultCollapseIcon={<ExpandMoreIcon />}\n defaultExpandIcon={<ChevronRightIcon />}\n onNodeSelect={handleSelect}\n hasCreate={hasCreate}\n hasEdit={hasEdit}\n hasShow={hasShow}\n />\n </Content>\n <Box width=\"100%\">\n <Switch>\n {hasCreate && (\n <Route\n path={`${basePath}/create`}\n render={(routeProps) => (\n <WithPermissions\n component={create}\n basePath={basePath}\n resource={resource}\n {...routeProps}\n />\n )}\n />\n )}\n {hasShow && (\n <Route\n path={`${basePath}/:id/show`}\n render={(routeProps) => (\n <WithPermissions\n component={show}\n basePath={basePath}\n resource={resource}\n id={decodeURIComponent(routeProps.match.params.id)}\n {...routeProps}\n />\n )}\n />\n )}\n {hasEdit && (\n <Route\n path={`${basePath}/:id`}\n render={(routeProps) => (\n <WithPermissions\n component={edit}\n basePath={basePath}\n resource={resource}\n id={decodeURIComponent(routeProps.match.params.id)}\n {...routeProps}\n />\n )}\n />\n )}\n <Route\n path={basePath}\n render={() => (\n <Title title={title} defaultTitle={defaultTitle} />\n )}\n />\n </Switch>\n </Box>\n </div>\n\n </div>\n );\n};\n\n\n\n\nRATreeView.defaultProps = {\n component: \"div\",\n classes: {},\n breadcrumbs: <DefaultTreeBreadcrumbs />,\n};\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n flexGrow: 1,\n display: \"flex\",\n flexDirection: \"column\",\n },\n main: {\n flexGrow: 1,\n display: 'flex',\n },\n noActions: {\n marginTop: '1em',\n },\n tree: {\n flexGrow: 1,\n overflow: \"auto\",\n width: 260,\n height: 1,\n \n\n },\n breadcrumbs: {\n top: theme.spacing(8),\n position: \"sticky\",\n height: theme.spacing(3),\n },\n content: {\n flexGrow: 1,\n display: \"flex\",\n flexDirection: \"column\",\n top: theme.spacing(12),\n position: \"sticky\",\n height: 'calc(100vh - 130px)',\n // transition: theme.transitions.create('margin-top'),\n // position: 'relative',\n // [theme.breakpoints.down('xs')]: {\n // boxShadow: 'none',\n // },\n\n // padding: \"8px 0 8px 16px\",\n marginRight: 24,\n \n },\n bulkActionsDisplayed: {\n marginTop: -theme.spacing(8),\n // transition: theme.transitions.create('margin-top'),\n },\n actions: {\n zIndex: 2,\n display: 'flex',\n justifyContent: 'flex-end',\n flexWrap: 'wrap',\n },\n noResults: { padding: 20 },\n }),\n { name: 'RaTree' }\n);\n\n\nconst sanitizeRestProps = (props) => ({\n basePath = null,\n currentSort = null,\n data = null,\n defaultTitle = null,\n displayedFilters = null,\n filterDefaultValues = null,\n filterValues = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n hideFilter = null,\n history = null,\n ids = null,\n loading = null,\n loaded = null,\n location = null,\n match = null,\n onSelect = null,\n onToggleItem = null,\n onUnselectItems = null,\n options = null,\n page = null,\n permissions = null,\n perPage = null,\n resource = null,\n selectedIds = null,\n setFilters = null,\n setPage = null,\n setPerPage = null,\n setSort = null,\n showFilter = null,\n syncWithLocation = null,\n sort = null,\n total = null,\n ...rest\n}) => rest;\n\nexport default RATreeView;\n","import React, { useMemo, useState, useEffect } from 'react';\nimport set from 'lodash/set';\nimport useTreeController from '../../lib/tree/controllers/useTreeController';\nimport useTagSubscription from '../../controller/data/useTagSubscription';\n\n\n\n\n\n\nconst useTreeControllerWithAlarm = (props) => {\n const { tree, setTree, ...controllerProps } = useTreeController(props)\n\n const tag_in = useMemo(() => {\n return Object.values(tree).reduce((acc, node) => {\n return node.type === \"ASSET\"\n ? [...acc, { tag: 'ALARM', resource: node.resource.id }, { tag: 'ACK', resource: node.resource.id }]\n : acc\n }, [])\n }, [tree]);\n\n const { data } = useTagSubscription({\n filter: { tag_in }\n }, { enabled: tag_in.length > 0 });\n\n useEffect(() => {\n if (!data) return tree\n const tagGroupByAssetId = data.reduce((group, tag) => {\n const { assetId, parameterId, value } = tag;\n set(group, [assetId, parameterId.toLowerCase()], value)\n return group;\n }, {})\n\n const newTree = Object.values(tree).reduce((acc, node) => {\n const { id, resource } = node;\n const value = resource?.id && tagGroupByAssetId[resource.id] ? { ...node, ...tagGroupByAssetId[resource.id] } : node\n set(acc, [id], value)\n return acc;\n }, {})\n\n setTree(newTree)\n\n }, [data, setTree]);\n\n return { tree, setTree, ...controllerProps };\n\n\n};\n\n\n\nexport default useTreeControllerWithAlarm;","import React, { useCallback, useMemo } from 'react';\nimport { useHistory, useLocation, Switch, Route } from 'react-router-dom';\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Box from '@material-ui/core/Box';\nimport Card from '@material-ui/core/Card';\nimport TreeView from '@material-ui/lab/TreeView';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport { Title, useVersion, linkToRecord, WithPermissions, useTranslate } from 'react-admin';\nimport useTreeContext from './controllers/useTreeContext';\nimport TreeNode from './TreeNode';\n\nimport TextField from '@material-ui/core/TextField';\nimport SearchIcon from '@material-ui/icons/Search';\nimport { InputAdornment } from '@material-ui/core';\n\nimport TreeNodeLabelActionsButton from './TreeNodeLabelActionsButton';\nimport TreeComponent from './TreeComponent';\nimport DefaultTreeBreadcrumbs from '../breadcrumbs/TreeBreadcrumbs';\n\n\nexport const RATreeView = (props) => {\n const {\n breadcrumbs,\n create,\n edit,\n show,\n className,\n component: Content,\n linkTo = 'edit',\n // nodeActions = \n title,\n changeSelect,\n enableSearch,\n ...rest\n } = props;\n\n const {\n basePath,\n resource,\n defaultTitle,\n getRootNodes,\n } = useTreeContext();\n\n const classes = useStyles(props);\n const version = useVersion();\n const history = useHistory();\n const location = useLocation();\n const translate = useTranslate();\n\n\n const pattern = new RegExp(`${basePath}/([^/]*)/*.*`);\n const matches = pattern.exec(location.pathname);\n const idInLocation = matches && matches[1];\n const hasCreate = !!create\n const hasEdit = !!edit\n const hasShow = !!show\n\n\n\n //only select if icon wasn't clicked\n const handleSelect = useCallback((event, nodeIds) => {\n history.push(linkToRecord(basePath, nodeIds[0], linkTo));\n changeSelect && changeSelect(nodeIds);\n }, [history, basePath, linkTo]);\n\n\n\n const handleSearch = useCallback((event) => {\n getRootNodes(event.target.value);\n }, [enableSearch]);\n\n return (\n <div\n className={classnames('tree-page', classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n {breadcrumbs}\n <div className={classnames(classes.main)} >\n <Content\n className={classnames(classes.content, classes.noActions)}\n key={version}\n >\n {enableSearch && <TextField\n hiddenLabel\n onChange={handleSearch}\n placeholder={translate('ra.action.search')}\n style={{ marginBottom: 10 }}\n variant=\"filled\"\n size=\"small\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <SearchIcon color=\"disabled\" />\n </InputAdornment>\n ),\n }}\n />}\n <TreeComponent\n className={classes.tree}\n defaultCollapseIcon={<ExpandMoreIcon />}\n defaultExpandIcon={<ChevronRightIcon />}\n onNodeSelect={handleSelect}\n hasCreate={hasCreate}\n hasEdit={hasEdit}\n hasShow={hasShow}\n />\n </Content>\n <Box width=\"100%\">\n <Switch>\n {hasCreate && (\n <Route\n path={`${basePath}/create`}\n render={(routeProps) => (\n <WithPermissions\n component={create}\n basePath={basePath}\n resource={resource}\n {...routeProps}\n />\n )}\n />\n )}\n {hasShow && (\n <Route\n path={`${basePath}/:id/show`}\n render={(routeProps) => (\n <WithPermissions\n component={show}\n basePath={basePath}\n resource={resource}\n id={decodeURIComponent(routeProps.match.params.id)}\n {...routeProps}\n />\n )}\n />\n )}\n {hasEdit && (\n <Route\n path={`${basePath}/:id`}\n render={(routeProps) => (\n <WithPermissions\n component={edit}\n basePath={basePath}\n resource={resource}\n id={decodeURIComponent(routeProps.match.params.id)}\n {...routeProps}\n />\n )}\n />\n )}\n <Route\n path={basePath}\n render={() => (\n <Title title={title} defaultTitle={defaultTitle} />\n )}\n />\n </Switch>\n </Box>\n </div>\n\n </div>\n );\n};\n\n\n\n\nRATreeView.defaultProps = {\n component: \"div\",\n classes: {},\n breadcrumbs: <DefaultTreeBreadcrumbs />,\n};\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n\n },\n main: {\n display: 'flex',\n },\n noActions: {\n marginTop: '1em',\n },\n tree: {\n minWidth: 260\n },\n content: {\n transition: theme.transitions.create('margin-top'),\n position: 'relative',\n flex: '1 1 auto',\n [theme.breakpoints.down('xs')]: {\n boxShadow: 'none',\n },\n overflow: 'inherit',\n padding: \"8px 0 8px 16px\",\n marginRight: 24\n },\n bulkActionsDisplayed: {\n marginTop: -theme.spacing(8),\n transition: theme.transitions.create('margin-top'),\n },\n actions: {\n zIndex: 2,\n display: 'flex',\n justifyContent: 'flex-end',\n flexWrap: 'wrap',\n },\n noResults: { padding: 20 },\n }),\n { name: 'RaTree' }\n);\n\n\nconst sanitizeRestProps = (props) => ({\n basePath = null,\n currentSort = null,\n data = null,\n defaultTitle = null,\n displayedFilters = null,\n filterDefaultValues = null,\n filterValues = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n hideFilter = null,\n history = null,\n ids = null,\n loading = null,\n loaded = null,\n location = null,\n match = null,\n onSelect = null,\n onToggleItem = null,\n onUnselectItems = null,\n options = null,\n page = null,\n permissions = null,\n perPage = null,\n resource = null,\n selectedIds = null,\n setFilters = null,\n setPage = null,\n setPerPage = null,\n setSort = null,\n showFilter = null,\n syncWithLocation = null,\n sort = null,\n total = null,\n ...rest\n}) => rest;\n\nexport default RATreeView;\n","import React from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport FolderIcon from '@material-ui/icons/Folder';\nimport AssetIcon from '../../lib/icons/Asset';\nimport { amber, red, blue, deepPurple, teal } from '@material-ui/core/colors';\n\n\nconst useStyles = makeStyles({\n asset: { color: blue[600] },\n folder: { color: amber[600] }\n}, { name: 'TreeIcon' });\n\nconst TreeIcon = (props) => {\n const { type, className, ...other } = props\n const classes = useStyles()\n\n switch (type) {\n case \"ASSET\": return <AssetIcon {...other} className={classnames(classes.asset, className)} />;\n case \"FOLDER\": return <FolderIcon {...other} className={classnames(classes.folder, className)} />;\n default: return <FolderIcon {...other} className={classnames(classes.folder, className)} />;\n }\n}\n\nexport default TreeIcon;","import React, { cloneElement } from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport FolderIcon from '@material-ui/icons/Folder';\nimport TreeIcon from '../../lib/tree/TreeIcon';\nimport { amber, red, blue, deepPurple, teal } from '@material-ui/core/colors';\nimport { isEmpty } from 'lodash';\n\nconst useStyles = makeStyles({\n '@keyframes blink': {\n '50%': {\n opacity: 0.56\n }\n },\n alarm: {\n color: red[400]\n },\n unack: {\n color: red[400],\n animationName: '$blink',\n animationDuration: '1s',\n animationTimingFunction: 'cubic-bezier(1.0,0,0,1.0)',\n animationIterationCount: 'infinite',\n animationPlayState: 'running',\n }\n}, { name: 'AssetTreeIcon' });\n\n\n\nexport const AssetTreeIcon = (props) => {\n\n const { record, className, ...rest } = props\n const isAlarm = record.alarm != null && record.alarm\n const isUnack = record.ack != null && !record.ack\n\n const classes = useStyles()\n\n return (\n <TreeIcon type={record.type} className={classnames(className, { [classes.alarm]: isAlarm, [classes.unack]: isUnack })} fontSize=\"small\" />\n )\n\n}\n\nexport default AssetTreeIcon;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useResourceDefinition, EditButton, ShowButton, TopToolbar } from 'react-admin';\nimport useDashboardContext from '../../controller/dashboard/useDashboardContext';\n\n\nimport CreateWidgetOnDashboardButton from '../button/CreateWidgetOnDashboardButton';\nimport MoreButton from '../button/MoreButton';\nimport ShowButtonAsMenuItem from '../button/ShowButtonAsMenuItem';\nimport EditButtonAsMenuItem from '../button/EditButtonAsMenuItem';\nimport CloneButtonAsMenuItem from '../button/CloneButtonAsMenuItem';\nimport ChangeLayoutButtonAsMenuItem from './DashboardChangeLayoutButtonAsMenuItem';\n\n\n\nconst sanitizeRestProps = ({\n basePath,\n className,\n hasEdit,\n hasList,\n resource,\n ...rest\n}) => rest;\n\nconst DashboardPlayActions = ({ className, ...rest }) => {\n const { basePath, record } = useDashboardContext(rest);\n const { hasEdit, hasShow } = useResourceDefinition(rest);\n return null;\n};\n\nDashboardPlayActions.propTypes = {\n basePath: PropTypes.string,\n className: PropTypes.string,\n data: PropTypes.object,\n hasCreate: PropTypes.bool,\n hasEdit: PropTypes.bool,\n hasDashboard: PropTypes.bool,\n hasList: PropTypes.bool,\n resource: PropTypes.string,\n};\n\nexport default DashboardPlayActions","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { useResourceDefinition, TitleForRecord } from 'react-admin';\nimport useDashboardContext from '../../controller/dashboard/useDashboardContext';\nimport DashboardPlayToolbar from './DashboardPlayToolbar';\nimport DefaultDashboardPlayFieldActions from './DashboardPlayFieldActions';\nimport DashboardPlayLayout from './DashboardPlayLayout';\nimport DashboardChangeLayoutSnackbar from './DashboardChangeLayoutSnackbar';\nimport DashboardLinksToolbar from './DashboardLinksToolbar';\nimport DashboardPlayViewObjectVariableAlert from './DashboardPlayViewObjectVariableAlert';\n\n\n\nconst DashboardPlayFieldView = (props) => {\n const {\n Actions,\n children,\n classes: classesOverride,\n className,\n viewOnly,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n\n const {\n basePath,\n hasList,\n record,\n resource,\n version,\n variables,\n variablesValues,\n } = useDashboardContext(props);\n const { hasEdit } = useResourceDefinition(props);\n if (!record) return null\n\n const hasLinks = Array.isArray(record.links) && record.links.length > 0\n const dashboardVariablesLoaded = variables ? variables.map(variable => variablesValues ? !(variablesValues[variable] == null) : false).every(Boolean) : true\n\n return (\n <div\n className={classnames('dashboard-page', classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n {(variables || Actions) && (\n <DashboardPlayToolbar\n Actions={Actions}\n basePath={basePath}\n data={record}\n hasList={hasList}\n hasEdit={hasEdit}\n resource={resource}\n variables={variables}\n viewOnly={viewOnly}\n />\n )}\n {hasLinks && (<DashboardLinksToolbar basePath={basePath} data={record} resource={resource} />)}\n <div className={classnames(classes.main)}>\n <div className={classes.mainContent}>\n <DashboardPlayViewObjectVariableAlert variables={variables} variablesValues={variablesValues} />\n {record && dashboardVariablesLoaded && (\n <DashboardPlayLayout resource={resource} basePath={basePath} record={record} version={version} viewOnly={viewOnly} />\n )}\n </div>\n </div>\n <DashboardChangeLayoutSnackbar />\n </div>\n );\n};\n\nDashboardPlayFieldView.propTypes = {\n Actions: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n aside: PropTypes.element,\n basePath: PropTypes.string,\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n defaultTitle: PropTypes.any,\n hasEdit: PropTypes.bool,\n hasList: PropTypes.bool,\n loading: PropTypes.bool,\n loaded: PropTypes.bool,\n record: PropTypes.object,\n resource: PropTypes.string,\n\n version: PropTypes.node,\n};\n\nDashboardPlayFieldView.defaultProps = {\n classes: {},\n Actions: <DefaultDashboardPlayFieldActions />,\n};\n\nconst useStyles = makeStyles(\n {\n root: {},\n main: {\n display: 'flex',\n },\n mainContent: {\n flex: '1 1 auto',\n },\n },\n { name: 'DashboardPlayFieldView' }\n);\n\nconst sanitizeRestProps = ({\n basePath = null,\n defaultTitle = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasDashboard = null,\n history = null,\n id = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n options = null,\n refetch = null,\n permissions = null,\n range = null,\n setRange = null,\n variables = null,\n variablesValues = null,\n setVariablesValues = null,\n editable = null,\n setEditable = null,\n setLayouts = null,\n saveLayouts = null,\n ...rest\n}) => rest;\n\n\nexport default DashboardPlayFieldView","import React, { useEffect } from 'react';\nimport get from 'lodash/get';\nimport PropTypes from 'prop-types';\nimport { ResourceContextProvider } from 'ra-core';\nimport { ReferenceField } from 'react-admin';\nimport useDashboardController from '../../controller/dashboard/useDashboardController';\nimport DashboardContextProvider from '../../controller/dashboard/DashboardContextProvider';\nimport DashboardPlayFieldView from './DashboardPlayFieldView';\n\n\n\nconst DashboardPlayField = (props) => {\n const { record, source, resource, basePath } = props\n const id = get(record, source)\n const controllerProps = useDashboardController({\n id,\n resource: \"Dashboard\",\n basePath: \"/Dashboard\",\n variablesValues: { assetId: record.id },\n });\n\n // useEffect(() => {\n // if (id) controllerProps.setVariablesValues({ assetId: record.id })\n // }, [id, controllerProps.setVariablesValues])\n\n if (!id) return null\n\n return (\n <ResourceContextProvider value={props.resource}>\n <DashboardContextProvider value={controllerProps}>\n <DashboardPlayFieldView {...props} {...controllerProps} viewOnly />\n </DashboardContextProvider>\n </ResourceContextProvider>\n )\n};\n\nDashboardPlayField.defaultProps = {\n resource: \"Dashboard\",\n basePath: \"/Dashboard\",\n};\n\nDashboardPlayField.propTypes = {\n Actions: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n Breadcrumbs: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n label: PropTypes.string,\n record: PropTypes.object,\n source: PropTypes.string.isRequired,\n resource: PropTypes.string.isRequired,\n basePath: PropTypes.node.isRequired,\n};\n\nexport default DashboardPlayField\n","import * as React from 'react';\nimport { Typography } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Dashboard from '@material-ui/icons/Dashboard';\nimport {\n EditButton,\n} from 'react-admin';\n\n\n\nconst Empty = (props) => {\n const classes = useStyles(props);\n\n return (\n <>\n <div className={classes.message}>\n <Dashboard className={classes.icon} />\n <Typography variant=\"h5\" paragraph>\n Панель по умолчанию не установлена\n </Typography>\n <Typography variant=\"body1\">\n Установите панель по умолчанию\n </Typography>\n </div>\n\n <div className={classes.toolbar}>\n <EditButton basePath=\"/Asset\" record={props.record} />\n </div>\n\n </>\n );\n};\n\n\nconst useStyles = makeStyles(\n theme => ({\n message: {\n textAlign: 'center',\n opacity: theme.palette.type === 'light' ? 0.5 : 0.8,\n margin: '0 1em',\n color:\n theme.palette.type === 'light'\n ? 'inherit'\n : theme.palette.text.primary,\n },\n icon: {\n width: 56,\n height: 56,\n },\n toolbar: {\n textAlign: 'center',\n marginTop: '2em',\n },\n }),\n { name: 'RaEmpty' }\n);\n\nexport default Empty","import React, { cloneElement, Children } from 'react';\nimport Card from '@material-ui/core/Card';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate } from 'react-admin';\nimport DashboardPlayField from '../../lib/dashboard/DashboardPlayField';\nimport AssetTreeDefaultDashboardEmpty from './AssetTreeDefaultDashboardEmpty';\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginTop: theme.spacing(),\n marginBottom: theme.spacing(),\n '&:first-child': {\n marginTop: -8,\n } \n },\n content: {}\n}));\n\nconst BlankShowLayout = ({\n children,\n classes: classesOverride,\n className,\n label,\n component: Content,\n ...props\n}) => {\n\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate();\n const hasDefaultDashboard = props.record?.defaultDashboard?.id\n\n\n return (\n <div className={`${classes.root} ${className}`}>\n {hasDefaultDashboard ? (\n <DashboardPlayField {...props} source='defaultDashboard.id' />\n ) : (\n <AssetTreeDefaultDashboardEmpty {...props} />\n )}\n\n\n {/* {label && <Typography variant=\"subtitle2\" color=\"textSecondary\" gutterBottom noWrap>{translate(label, { _: label })}</Typography>}\n <Content className={classes.content}>\n {cloneElement(Children.only(children), {\n ...props,\n ...children.props\n })}\n </Content> */}\n </div>\n\n );\n};\n\nBlankShowLayout.defaultProps = {\n component: \"div\",\n};\n\n\nexport default BlankShowLayout;","import React from 'react';\nimport { Show, SimpleShowLayout, TextField, DateField, RichTextField } from 'react-admin';\nimport TitleForRecord from '../../lib/layout/TitleForRecord';\nimport BlankShowLayout from '../../lib/show/BlankShowLayout';\nimport AssetTreeShowDefaultDashboardLayout from './AssetTreeShowDefaultDashboardLayout';\nimport DashboardPlayField from '../../lib/dashboard/DashboardPlayField';\n\n\n\nexport const AssetTreeShow = (props) => {\n\n return (\n // <div>asefsdfs</div>\n <Show\n {...props}\n resource='Asset'\n actions={false}\n basePath='/Asset'\n title={<TitleForRecord source=\"name\" {...props} />}\n component=\"div\"\n >\n <AssetTreeShowDefaultDashboardLayout />\n {/* <BlankShowLayout > */}\n {/* <TextField source=\"id\" /> */}\n {/* <DashboardPlayField source='defaultDashboard.id' />\n </BlankShowLayout> */}\n </Show>\n )\n};\n\nexport default AssetTreeShow;","import React, { Fragment } from 'react';\nimport { Datagrid, List, TextField, WithPermissions } from 'react-admin';\nimport { Route } from 'react-router';\n\nimport TreeContextProvider from '../../lib/tree/controllers/TreeContextProvider';\n//import useTreeController from '../../lib/tree/controllers/useTreeController';\nimport AssetTreeView from './AssetTreeView';\nimport useTreeControllerWithAlarm from './useTreeControllerWithAlarm';\n\n\nimport Tree from '../../lib/tree/Tree';\n\n\n\n\nimport AssetTreeIcon from './AssetTreeIcon';\nimport AssetTreeShow from './AssetTreeShow';\n\n\n\n\nconst AssetTreeList = (props) => {\n const { basePath, resource } = props\n const controllerProps = useTreeControllerWithAlarm({\n basePath,\n icon: AssetTreeIcon,\n readOnly: true\n })\n\n return (\n <TreeContextProvider value={controllerProps}>\n <AssetTreeView\n {...props}\n lazy={true}\n linkTo=\"show\"\n show={AssetTreeShow}\n // icon={DirectoryIcon}\n readOnly={true}\n enableSearch\n />\n </TreeContextProvider>\n );\n\n\n};\n\n\n\nexport default AssetTreeList;","import AssetTreeIcon from '../../lib/icons/AssetTree';\nimport AssetTreeList from './AssetTreeList';\n\n\nconst AssetTreeName = \"AssetTree\"\n\nconst AssetTreeResource = {\n name: AssetTreeName,\n icon: AssetTreeIcon,\n list: AssetTreeList,\n\n}\n\nexport default AssetTreeResource;\n\nexport {\n AssetTreeName,\n AssetTreeList,\n AssetTreeIcon,\n};","import React from \"react\";\nimport Filter from \"../../lib/list/filter/Filter\";\nimport SearchInput from \"../../lib/input/SearchInput\";\nimport QuickFilterInput from \"../../lib/input/QuickFilterInput\";\nimport ProfileReferenceInput from '../Profile/ProfileReferenceInput';\n\n\n\nconst WidgetListFilter = (props) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <QuickFilterInput source=\"deleted\" label=\"ra.input.deleted\" defaultValue={true} />\n <ProfileReferenceInput source=\"createdById\" label=\"resources.Widget.fields.createdBy\" reference=\"Profile\" resettable sort={{ field: 'name', order: 'ASC' }} />\n </Filter>\n);\n\nexport default WidgetListFilter;\n","import { dateFormatter, linkFormatter, jsonFormatter } from '../../lib/exporter';\nimport { dateParser, linkParser, jsonParser } from '../../lib/importer';\n\n// https://github.com/prisma/prisma/issues/5066\n\nconst model = [\n { key: \"id\", header: \"resources.Report.fields.id\" },\n { key: \"name\", header: \"resources.Report.fields.name\" },\n { key: \"description\", header: \"resources.Report.fields.description\" },\n { key: \"hasTemplate\", header: \"resources.Report.fields.hasTemplate\" },\n { key: \"type.id\", header: [\"resources.Report.fields.type\", \"resources.AssetType.fields.id\"] },\n { key: \"createdAt\", header: \"resources.Widget.fields.createdAt\", format: dateFormatter, parse: dateParser },\n { key: \"updatedAt\", header: \"resources.Widget.fields.updatedAt\", format: dateFormatter, parse: dateParser },\n { key: \"data\", header: \"resources.Report.fields.data\", format: jsonFormatter, parse: jsonParser },\n]\n\nexport default model;","import React, { cloneElement, useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport { sanitizeListRestProps, useListContext, useResourceContext, useResourceDefinition } from 'ra-core';\nimport { CreateButton, TopToolbar } from 'react-admin';\nimport ImportButton from '../../lib/button/ImportButton';\nimport ExportButton from '../../lib/button/ExportButton';\nimport ColumnsButton from '../../lib/list/ColumnsButton';\nimport PresetButton from '../../lib/list/PresetButton';\nimport permissions from \"../../authProvider/abilityProvider\";\nimport ReportCreateButton from './ReportCreateButton';\n\n\nconst ReportListActions = (props) => {\n const {\n className,\n exporter = false,\n importer = false,\n filters,\n columns, \n ...rest\n } = props;\n const {\n currentSort,\n displayedFilters,\n filterValues,\n basePath,\n showFilter,\n total \n } = useListContext(props);\n const resource = useResourceContext(rest);\n const { hasCreate } = useResourceDefinition(rest);\n\n return useMemo(() => (\n <TopToolbar className={className} {...sanitizeListRestProps(rest)}>\n {filters &&\n cloneElement(filters, {\n resource,\n showFilter,\n displayedFilters,\n filterValues,\n context: 'button',\n })}\n <ColumnsButton columns={columns} />\n {exporter !== false && (\n <ExportButton\n exporter={exporter}\n disabled={total === 0}\n resource={resource}\n sort={currentSort}\n filterValues={filterValues}\n />\n )}\n {importer !== false && (\n <ImportButton\n importer={importer}\n resource={resource}\n />\n )}\n\n {permissions.can('create', resource) && <ReportCreateButton basePath={basePath} />}\n </TopToolbar>\n ),\n /* eslint-disable react-hooks/exhaustive-deps */\n [\n resource,\n displayedFilters,\n filterValues,\n showFilter,\n filters,\n total,\n basePath,\n className,\n currentSort,\n exporter,\n hasCreate,\n ]\n );\n};\n\nReportListActions.propTypes = {\n basePath: PropTypes.string,\n className: PropTypes.string,\n currentSort: PropTypes.any,\n displayedFilters: PropTypes.object,\n exporter: PropTypes.oneOfType([PropTypes.object, PropTypes.func, PropTypes.bool]),\n filters: PropTypes.element,\n filterValues: PropTypes.object,\n hasCreate: PropTypes.bool,\n resource: PropTypes.string,\n onUnselectItems: PropTypes.func.isRequired,\n selectedIds: PropTypes.arrayOf(PropTypes.any),\n showFilter: PropTypes.func,\n total: PropTypes.number,\n};\n\nReportListActions.defaultProps = {\n selectedIds: [],\n onUnselectItems: () => null,\n};\n\nexport default ReportListActions;\n","import React from \"react\";\nimport MoreButton from '../../lib/button/MoreButton';\nimport ShowButtonAsMenuItem from '../../lib/button/ShowButtonAsMenuItem';\nimport EditButtonAsMenuItem from '../../lib/button/EditButtonAsMenuItem';\nimport RemoveButtonAsMenuItem from '../../lib/button/RemoveButtonAsMenuItem';\nimport RestoreButtonAsMenuItem from '../../lib/button/RestoreButtonAsMenuItem';\nimport DeleteButtonAsMenuItem from '../../lib/button/DeleteButtonAsMenuItem';\nimport OpenWithAppButtonAsMenuItem from '../../lib/button/OpenWithAppButtonAsMenuItem';\nimport permissions from \"../../authProvider/abilityProvider\";\nimport { URI_STIMULSOFT_REPORTS } from '../../appsettings';\nimport CloneButtonAsMenuItem from \"../../lib/button/CloneButtonAsMenuItem\";\nimport { reportRedirectEdit, reportRedirectView } from \"./redirect\";\n\n\nconst ReportMoreActionsButton = (props) => {\n const { resource, record } = props\n const deleted = record?.deleted\n\n return (\n <MoreButton {...props}>\n {permissions.can('getOne', resource) && <OpenWithAppButtonAsMenuItem redirect={reportRedirectView} target=\"_blank\" app=\"Отчеты\" />}\n {permissions.can('update', resource) && <OpenWithAppButtonAsMenuItem redirect={reportRedirectEdit} target=\"_blank\" app=\"Отчеты\" label=\"ra.action.edit_with\" />}\n {permissions.can('getOne', resource) && <ShowButtonAsMenuItem />}\n {permissions.can('create', resource) && <CloneButtonAsMenuItem />} \n {permissions.can('update', resource) && <EditButtonAsMenuItem />} \n {permissions.can('remove', resource) && !deleted && <RemoveButtonAsMenuItem />}\n {permissions.can('restore', resource) && deleted && <RestoreButtonAsMenuItem />}\n {permissions.can('restore', resource) && deleted && <DeleteButtonAsMenuItem />}\n </MoreButton>\n );\n}\n\nexport default ReportMoreActionsButton;","import React, { useCallback } from \"react\";\nimport { Datagrid, TextField, DateField, ChipField } from 'react-admin';\nimport List from \"../../lib/list/List\";\nimport useListStyles from '../../lib/list/useListStyles';\nimport useColumns from '../../lib/list/useColumns';\nimport useDatagridColumns from '../../lib/list/useDatagridColumns';\nimport ResourceLinkField from \"../../lib/field/ResourceLinkField\";\nimport ReportListFilter from './ReportListFilter';\nimport model from \"./reportExportImportModel\";\nimport useExporter from \"../../lib/exporter\";\nimport useImporter from \"../../lib/importer\";\nimport ReportListActions from \"./ReportListActions\";\nimport ReportMoreActionsButton from \"./ReportMoreActionsButton\";\nimport { reportRedirectView } from \"./redirect\";\nimport ReportPlayIconButton from \"./ReportPlayIconButton\";\nimport NestedField from \"../../lib/field/NestedField\";\nimport ChipTemplateChip from \"./ChipTemplateChip\";\n\n\n\nexport const ReportList = (props) => {\n const classes = useListStyles()\n const exporter = useExporter(model)\n const importer = useImporter(model)\n\n const columns = useColumns([\n <ChipTemplateChip cellClassName={classes.cellMinWidth} source=\"hasTemplate\" />,\n <ResourceLinkField source=\"name\" alwaysOn cellClassName={classes.celllLineClamp} />, \n <TextField source=\"description\" cellClassName={classes.celllLineClamp} />, \n <NestedField source=\"type\" reference=\"ReportType\" link={false} sortable={false} cellClassName={classes.cellMinWidth}>\n <TextField source=\"name\" />\n </NestedField>,\n <DateField source=\"createdAt\" cellClassName={classes.cellMinWidth} />,\n <DateField source=\"updatedAt\" cellClassName={classes.cellMinWidth} />,\n \n ]);\n\n const DatagridColumns = useDatagridColumns(columns)\n\n return (\n <List\n {...props}\n actions={<ReportListActions columns={columns} />}\n exporter={exporter}\n importer={importer}\n empty={false}\n filters={<ReportListFilter />}\n >\n <Datagrid>\n <ReportPlayIconButton redirect={reportRedirectView} cellClassName={`${classes.cellMinWidth} ${classes.cellAction}`}/>\n \n {DatagridColumns} \n <ReportMoreActionsButton cellClassName={`${classes.cellMinWidth} ${classes.cellButton}`}/> \n </Datagrid>\n </List>\n )\n};\n\n\n\nexport default ReportList;","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Typography } from '@material-ui/core';\nimport { FormControl, InputLabel, FormHelperText } from '@material-ui/core';\nimport get from 'lodash/get';\nimport JSONInput from 'react-json-editor-ajrm';\nimport locale from 'react-json-editor-ajrm/locale/ru';\n\nimport { useInput, FieldTitle, InputProps } from 'ra-core';\n\nimport { InputHelperText } from 'react-admin';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\n// import { Field } from 'react-final-form';\n// import { Labeled } from 'react-admin';\n\nconst useStyles = makeStyles(theme => {\n const light = theme.palette.type === 'light';\n const backgroundColor = light ? 'rgba(0, 0, 0, 0.04)' : 'rgba(255, 255, 255, 0.09)';\n\n return {\n root: {\n position: 'relative',\n backgroundColor,\n borderTopLeftRadius: theme.shape.borderRadius,\n borderTopRightRadius: theme.shape.borderRadius,\n transition: theme.transitions.create('background-color', {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut,\n }),\n '&:hover': {\n backgroundColor: light ? 'rgba(0, 0, 0, 0.13)' : 'rgba(255, 255, 255, 0.13)',\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor,\n },\n },\n '&$focused': {\n backgroundColor: light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.09)',\n },\n '&$disabled': {\n backgroundColor: light ? 'rgba(0, 0, 0, 0.12)' : 'rgba(255, 255, 255, 0.12)',\n },\n },\n label: {\n paddingLeft: 12,\n }\n };\n});\n\n\n\n\n\nconst githubTheme = {\n default: 'rgba(0, 0, 0, 0.87)',\n background: 'rgba(0, 0, 0, 0.04)',\n background_warning: '#fdd',\n string: '#d14',\n number: '#008080',\n colon: '#49B8F7',\n keys: 'rgba(0, 0, 0, 0.87)',\n keys_whiteSpace: '#835FB6',\n primitive: '#386FA4',\n error: \"#e45649\"\n};\n\n\nconst JsonField = ({ record, source, theme, ...props }) => {\n const json = get(record, source);\n if (!json) return null;\n const jsObject = (typeof json === 'string') ? JSON.parse(json) : json;\n\n return (\n\n <JSONInput\n\n placeholder={jsObject}\n viewOnly\n confirmGood={false}\n colors={{ ...theme, background: \"none\" }}\n locale={locale}\n style={{\n body: {\n fontSize: '1rem',\n },\n contentBox: {\n color: 'rgba(0, 0, 0, 0.87)',\n },\n }}\n height=\"360px\"\n width=\"100%\"\n {...sanitizeFieldRestProps(props)}\n />\n\n\n )\n}\n\nJsonField.defaultProps = {\n theme: githubTheme,\n addLabel: true,\n};\n\nexport default JsonField;\n","import React from \"react\";\nimport { TextField, DateField, ReferenceArrayField, SingleFieldList, ChipField } from 'react-admin';\nimport Show from '../../lib/show/Show';\nimport SimpleShowLayout from '../../lib/show/SimpleShowLayout';\nimport JsonField from \"../../lib/field/JsonField\";\nimport NestedField from \"../../lib/field/NestedField\";\n\n\n\nexport const ReportShow = (props) => (\n <Show {...props}>\n <SimpleShowLayout>\n <TextField source=\"id\" />\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <DateField source=\"createdAt\" />\n <DateField source=\"updatedAt\" />\n <NestedField source=\"type\" reference=\"ReportType\" link={false} >\n <TextField source=\"name\" />\n </NestedField>\n <ReferenceArrayField reference=\"Asset\" source=\"assetsIds\">\n <SingleFieldList>\n <ChipField source=\"name\" />\n </SingleFieldList>\n </ReferenceArrayField>\n <JsonField source=\"data\" fullWidth/>\n </SimpleShowLayout>\n </Show>\n);\n\n\n\nexport default ReportShow;","\nconst srcresource = '__RESOURCE__';\n\nexport const encodeToTemplate = (strJsonReport, ids = []) => {\n\n for (const id of ids) {\n strJsonReport = strJsonReport.replaceAll(id, srcresource);\n }\n\n return strJsonReport;\n}\n\n\nexport const decodeFromTemplate = (strJsonReport, id) => {\n \n strJsonReport = strJsonReport.replaceAll(srcresource, id);\n return strJsonReport;\n}\n\nexport const isTemplate = (fileName) => {\n const split_filename = fileName.split('.');\n const ext = (split_filename.pop() || '').toLowerCase();\n return ext == 'tmrt'; \n}","import React, { useCallback } from \"react\";\nimport { BooleanInput, useInput } from \"react-admin\";\nimport { decodeFromTemplate, encodeToTemplate } from \"./templater\";\nimport { uniq } from \"lodash\";\n\nconst ReportTemplateInput = (props) => {\n \n\n\n //const { input: input } = useInput({ source });\n const { input: inputData } = useInput({ source: 'data' });\n const { input: inputMeta } = useInput({ source: 'meta' });\n\n const handleClick = useCallback((val) => {\n \n const report = inputData.value;\n if(val === true) {\n \n const dataSources = report.Dictionary?.DataSources || {};\n const ids = uniq(Object.keys(dataSources).map(key => dataSources[key].Name?.replaceAll('current__', '')));\n const strJsonReport = JSON.stringify(report)\n const strTemplateJsonReport = encodeToTemplate(strJsonReport, ids);\n const templatedJsonReport = JSON.parse(strTemplateJsonReport);\n inputData.onChange(templatedJsonReport);\n if(ids.length > 0) {\n inputMeta.onChange({\n dataSourceId: ids[0]\n });\n }\n } else {\n const meta = inputMeta.value || {}; \n const strJsonReport = JSON.stringify(report)\n const strTemplateJsonReport = decodeFromTemplate(strJsonReport, meta.dataSourceId);\n const templatedJsonReport = JSON.parse(strTemplateJsonReport);\n inputData.onChange(templatedJsonReport);\n inputMeta.onChange({});\n }\n \n }, [inputData, inputMeta]);\n \n return <BooleanInput {...props} onChange={handleClick} />;\n};\n\nexport default ReportTemplateInput;","import React from \"react\";\nimport {\n Create,\n SimpleForm,\n TextInput,\n Toolbar,\n SaveButton,\n ReferenceInput,\n SelectInput,\n ReferenceArrayInput,\n AutocompleteArrayInput\n} from \"react-admin\";\nimport Spacer from '../../lib/layout/Spacer';\nimport { required, regex, maxLength } from \"react-admin\";\nimport { asyncUnique } from '../../lib/form/validate';\nimport JsonInput from \"../../lib/input/JsonInput\";\nimport ReportTemplateInput from \"./ReportTemplateInput\";\nimport { autocompleteMatchTrue } from \"../../lib/input/utils\";\n\nconst validateId = [regex(/^[a-zA-Z0-9_]+$/), asyncUnique(\"Report\")];\nconst validateName = [required(), maxLength(128)]\n\nconst ReportCreateToolbar = props => {\n return (\n <Toolbar {...props} >\n <SaveButton submitOnEnter={true} disabled={props.pristine} redirect=\"list\" />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <Spacer variant=\"row\" />\n </Toolbar>\n )\n};\n\nexport const ReportCreate = (props) => (\n <Create {...props}>\n <SimpleForm toolbar={<ReportCreateToolbar />}>\n <TextInput source=\"id\" validate={validateId} />\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth /> \n <ReferenceInput source=\"type.id\" reference=\"ReportType\" label=\"resources.Report.fields.type\" >\n <SelectInput source=\"name\" />\n </ReferenceInput> \n <ReferenceArrayInput source=\"assetsIds\" reference=\"Asset\" fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReportTemplateInput source=\"hasTemplate\"/> \n <JsonInput source=\"data\" height=\"400px\" jsonSchemas={[]} /> \n </SimpleForm>\n </Create>\n);\n\nexport default ReportCreate;\n","import React from \"react\";\nimport {\n Edit,\n SimpleForm,\n TextInput,\n Toolbar,\n SaveButton,\n ReferenceInput,\n SelectInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n} from \"react-admin\";\nimport Spacer from '../../lib/layout/Spacer';\nimport { required, regex, maxLength } from \"react-admin\";\nimport { asyncUnique } from '../../lib/form/validate';\nimport permissions from \"../../authProvider/abilityProvider\";\nimport RemoveButton from \"../../lib/button/RemoveButton\";\nimport JsonInput from \"../../lib/input/JsonInput\";\nimport ReportTemplateInput from \"./ReportTemplateInput\";\nimport { autocompleteMatchTrue } from \"../../lib/input/utils\";\n\n\n\n\nconst validateId = [regex(/^[a-zA-Z0-9_]+$/), asyncUnique(\"Report\")];\nconst validateName = [required(), maxLength(128)]\n\nconst ReportEditToolbar = props => {\n return (\n <Toolbar {...props} >\n <SaveButton submitOnEnter={true} disabled={props.pristine} redirect=\"list\" />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <Spacer variant=\"row\" />\n {permissions.can('remove', \"Report\") && <RemoveButton mutationMode=\"optimistic\" />}\n </Toolbar>\n )\n};\n\nexport const ReportEdit = (props) => (\n <Edit {...props}>\n <SimpleForm toolbar={<ReportEditToolbar />}>\n <TextInput source=\"id\" validate={validateId} />\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <ReferenceInput source=\"type.id\" reference=\"ReportType\" label=\"resources.Report.fields.type\" >\n <SelectInput source=\"name\" />\n </ReferenceInput>\n <ReferenceArrayInput source=\"assetsIds\" reference=\"Asset\" fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReportTemplateInput source=\"hasTemplate\"/>\n <JsonInput source=\"data\" height=\"500px\" jsonSchemas={[]} />\n </SimpleForm>\n </Edit>\n);\n\nexport default ReportEdit;","import ReportIcon from '@material-ui/icons/Extension';\nimport ReportList from './ReportList';\nimport ReportShow from './ReportShow';\nimport ReportCreate from './ReportCreate';\nimport ReportEdit from './ReportEdit';\n\n\n\nconst ReportName = \"Report\"\n\nconst ReportResource = {\n name: ReportName,\n icon: ReportIcon,\n list: ReportList,\n show: ReportShow,\n create: ReportCreate,\n edit: ReportEdit\n}\n\nexport default ReportResource;\nexport {\n ReportName,\n ReportIcon,\n ReportList,\n ReportShow,\n ReportCreate,\n ReportEdit,\n};","import React from \"react\";\nimport Filter from \"../../lib/list/filter/Filter\";\nimport SearchInput from \"../../lib/input/SearchInput\";\nimport QuickFilterInput from \"../../lib/input/QuickFilterInput\";\nimport ProfileReferenceInput from '../Profile/ProfileReferenceInput';\n\n\n\nconst WidgetListFilter = (props) => (\n <Filter {...props}>\n <SearchInput source=\"q\" alwaysOn />\n <QuickFilterInput source=\"deleted\" label=\"ra.input.deleted\" defaultValue={true} />\n <ProfileReferenceInput source=\"createdById\" label=\"resources.Widget.fields.createdBy\" reference=\"Profile\" resettable sort={{ field: 'name', order: 'ASC' }} />\n </Filter>\n);\n\nexport default WidgetListFilter;\n","import { dateFormatter, linkFormatter, jsonFormatter } from '../../lib/exporter';\nimport { dateParser, linkParser, jsonParser } from '../../lib/importer';\n\n// https://github.com/prisma/prisma/issues/5066\n\nconst model = [\n { key: \"id\", header: \"resources.Widget.fields.id\" },\n { key: \"name\", header: \"resources.Widget.fields.name\" },\n { key: \"description\", header: \"resources.Widget.fields.description\" },\n { key: \"url\", header: \"resources.Widget.fields.url\" },\n { key: \"defaultProperties\", header: \"resources.Widget.fields.defaultProperties\", format: jsonFormatter, parse: jsonParser },\n { key: \"defaultGrid\", header: \"resources.Widget.fields.defaultGrid\", format: jsonFormatter, parse: jsonParser },\n { key: \"createdAt\", header: \"resources.Widget.fields.createdAt\", format: dateFormatter, parse: dateParser },\n { key: \"updatedAt\", header: \"resources.Widget.fields.updatedAt\", format: dateFormatter, parse: dateParser },\n { key: \"link\", header: \"Ccылка\", format: linkFormatter(\"Widget\", \"id\"), parse: linkParser },\n]\n\nexport default model;","import React from \"react\";\nimport { Datagrid, TextField, DateField } from 'react-admin';\nimport List from \"../../lib/list/List\";\nimport ListActions from \"../../lib/list/ListActions\";\nimport useListStyles from '../../lib/list/useListStyles';\nimport useColumns from '../../lib/list/useColumns';\nimport useDatagridColumns from '../../lib/list/useDatagridColumns';\nimport ResourceLinkField from \"../../lib/field/ResourceLinkField\";\nimport MoreButton from '../../lib/button/MoreButton';\nimport ShowButtonAsMenuItem from '../../lib/button/ShowButtonAsMenuItem';\nimport EditButtonAsMenuItem from '../../lib/button/EditButtonAsMenuItem';\nimport CloneButtonAsMenuItem from '../../lib/button/CloneButtonAsMenuItem';\nimport RemoveButtonAsMenuItem from '../../lib/button/RemoveButtonAsMenuItem';\nimport permissions from \"../../authProvider/abilityProvider\";\nimport WidgetListFilter from './WidgetListFilter';\nimport model from \"./widgetExportImportModel\";\nimport useExporter from \"../../lib/exporter\";\nimport useImporter from \"../../lib/importer\";\n\n\n\nexport const WidgetList = (props) => {\n const { resource } = props\n const classes = useListStyles()\n const exporter = useExporter(model)\n const importer = useImporter(model)\n\n const columns = useColumns([\n <ResourceLinkField source=\"name\" alwaysOn cellClassName={classes.celllLineClamp} />,\n <TextField source=\"description\" cellClassName={classes.celllLineClamp} />,\n <DateField source=\"createdAt\" />,\n <DateField source=\"updatedAt\" />,\n <TextField source=\"url\" />,\n ]);\n\n const DatagridColumns = useDatagridColumns(columns)\n\n return (\n <List\n {...props}\n actions={<ListActions columns={columns} />}\n exporter={exporter}\n importer={importer}\n filters={<WidgetListFilter />}\n >\n <Datagrid>\n {DatagridColumns}\n <MoreButton cellClassName={`${classes.cellMinWidth} ${classes.cellButton}`}>\n {permissions.can('getOne', resource) && <ShowButtonAsMenuItem />}\n {permissions.can('update', resource) && <EditButtonAsMenuItem />}\n {permissions.can('create', resource) && <CloneButtonAsMenuItem />}\n {permissions.can('remove', resource) && <RemoveButtonAsMenuItem />}\n </MoreButton>\n </Datagrid>\n </List>\n )\n};\n\n\n\nexport default WidgetList;","import React from \"react\";\nimport { TextField, DateField } from 'react-admin';\nimport Show from '../../lib/show/Show';\nimport SimpleShowLayout from '../../lib/show/SimpleShowLayout';\nimport NestedArrayField from '../../lib/field/NestedArrayField';\nimport MarkdownField from '../../lib/field/MarkdownField';\n\n\n\nexport const WidgetShow = (props) => (\n <Show {...props}>\n <SimpleShowLayout>\n <TextField source=\"id\" />\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <DateField source=\"createdAt\" />\n <DateField source=\"updatedAt\" />\n <TextField source=\"url\" />\n </SimpleShowLayout>\n </Show>\n);\n\n\n\nexport default WidgetShow;","import React from \"react\";\nimport { Create, SimpleForm, TextInput } from 'react-admin';\nimport { required, regex, maxLength, Toolbar, SaveButton } from 'react-admin';\nimport JsonInput from '../../lib/input/JsonInput'\n\n\n\nconst validateId = [regex(/[a-zA-Z0-9_]{0,26}$/)]\nconst validateName = [required(), maxLength(128)];\nconst validateUrl = [required()];\nconst initialDefaultGridValue = { w: 4, h: 4 };\n\nconst AssetCreateToolbar = props => {\n return (\n <Toolbar {...props} >\n <SaveButton submitOnEnter={true} disabled={props.pristine} redirect=\"list\" />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n </Toolbar>\n )\n };\n\nexport const WidgetCreate = (props) => (\n <Create {...props}>\n <SimpleForm sanitizeEmptyValues={false} toolbar={<AssetCreateToolbar />}>\n <TextInput source=\"id\" validate={validateId} />\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <TextInput source=\"url\" validate={validateUrl} initialValue={\"./\"} />\n <JsonInput source=\"defaultProperties\" height=\"500px\" jsonSchemas={[]} />\n <JsonInput source=\"defaultGrid\" height=\"150px\" jsonSchemas={[]} defaultValue={initialDefaultGridValue} />\n </SimpleForm>\n </Create>\n);\n\n\n\n\n\nexport default WidgetCreate;","import React, { useCallback } from 'react'\nimport { TextInput } from 'react-admin';\nimport beautify from 'json-beautify';\n\n\nfunction isValidJson(str) {\n if (!str) return true;\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n}\n\nconst JsonSimpleInput = ({ hasBeautify, beautifyLimit = 150, ...props }) => {\n\n const format = useCallback((value) => {\n return (value == undefined)\n ? value\n : (typeof value === 'string') ? value : (hasBeautify ? beautify(value, null, 6, beautifyLimit) : JSON.stringify(value, null))\n }, []);\n\n const parse = useCallback((value) => {\n return (value)\n ? isValidJson(value)\n ? JSON.parse(value)\n : value\n : null\n }, []);\n\n const validate = useCallback((value) => {\n\n const valid = (typeof value === 'string') ? isValidJson(value) : true\n return (!valid) ? \"ra.validation.jsonParse\" : undefined\n }, []);\n\n\n return (\n <TextInput\n {...props}\n format={format}\n parse={parse}\n validate={validate}\n />\n );\n};\n\n\n\nexport default JsonSimpleInput;\n","import React from \"react\";\nimport { SimpleForm, TextInput } from 'react-admin';\nimport { Toolbar, SaveButton } from 'react-admin';\nimport Edit from '../../lib/edit/Edit';\nimport { required, maxLength } from 'react-admin';\nimport Spacer from '../../lib/layout/Spacer';\nimport RemoveButton from '../../lib/button/RemoveButton';\nimport JsonSimpleInput from '../../lib/input/JsonSimpleInput';\nimport MarkdownInput from '../../lib/input/MarkdownInput';\nimport JsonInput from '../../lib/input/JsonInput'\n\n\nconst validateName = [required(), maxLength(128)];\nconst validateUrl = [required()];\nconst initialDefaultGridValue = { x: 0, y: 0, w: 1, h: 1 };\n\nconst WidgetEditToolbar = ({ permissions, ...props }) => {\n return (\n <Toolbar {...props} >\n <SaveButton submitOnEnter={true} disabled={props.pristine} redirect=\"list\" />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <Spacer variant=\"row\" />\n {permissions.can('remove', \"Widget\") && <RemoveButton mutationMode=\"optimistic\" />}\n </Toolbar>\n )\n};\n\n\nexport const WidgetEdit = (props) => {\n const permissions = props.permissions\n\n return (\n <Edit {...props}>\n <SimpleForm\n toolbar={<WidgetEditToolbar permissions={permissions} />}\n sanitizeEmptyValues={false}\n >\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <TextInput source=\"url\" validate={validateUrl} initialValue={\"./\"} />\n {/* <JsonSimpleInput source=\"defaultProperties\" multiline fullWidth hasBeautify beautifyLimit={80} />\n <JsonSimpleInput source=\"defaultGrid\" multiline fullWidth hasBeautify beautifyLimit={80} initialValue={initialDefaultGridValue} /> */}\n <JsonInput source=\"defaultProperties\" height=\"500px\" jsonSchemas={[]} />\n <JsonInput source=\"defaultGrid\" height=\"150px\" jsonSchemas={[]} defaultValue={initialDefaultGridValue} />\n </SimpleForm>\n </Edit>\n )\n};\n\n\n\n\n\nexport default WidgetEdit;","import WidgetIcon from '@material-ui/icons/Extension';\nimport WidgetList from './WidgetList';\nimport WidgetShow from './WidgetShow';\nimport WidgetCreate from './WidgetCreate';\nimport WidgetEdit from './WidgetEdit';\n\n\n\nconst WidgetName = \"Widget\"\n\nconst WidgetResource = {\n name: WidgetName,\n icon: WidgetIcon,\n list: WidgetList,\n show: WidgetShow,\n create: WidgetCreate,\n edit: WidgetEdit\n}\n\nexport default WidgetResource;\nexport {\n WidgetName,\n WidgetIcon,\n WidgetList,\n WidgetShow,\n WidgetCreate,\n WidgetEdit,\n};","import React from \"react\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n ResourceContextProvider,\n ShowContextProvider,\n useShowController,\n DateField,\n TextField,\n Filter,\n SelectInput,\n TopToolbar,\n} from \"react-admin\";\nimport { dateTimeOptions } from '../../utils';\nimport JsonField from '../../lib/field/JsonField';\nimport { ShowView } from \"../../lib/show/ShowView\";\nimport SimpleShowLayout from \"../../lib/show/SimpleShowLayout\";\nimport TitleForRecord from \"../../lib/layout/TitleForRecord\";\nimport BlankShowLayout from \"../../lib/show/BlankShowLayout\";\nimport ListField from \"../../lib/field/ListField\";\nimport { ReferenceFieldDatagrid as ReferenceHistoryDatagrid } from './HistoryList';\nimport EnumField from \"../../lib/field/EnumField\";\nimport HistoryRevertButton from './HistoryRevertButton';\nimport { actions } from \"./utils\";\n\n\nconst useStyles = makeStyles(theme => {\n return {\n jsonField: {\n display: \"grid\",\n },\n flexStart: {\n justifyContent: \"flex-start\"\n }\n }\n});\n\nconst HistoryShowActions = ({ basePath, data }) => {\n return (\n <TopToolbar>\n <HistoryRevertButton basePath={basePath} record={data} resource=\"History\" />\n </TopToolbar>\n );\n};\n\nconst HistoryFilter = (props) => (\n <Filter {...props}>\n <SelectInput choices={actions} source=\"action\" label=\"resources.History.fields.action\" alwaysOn />\n </Filter>\n);\n\nexport const HistoryShow = (props) => {\n const controllerProps = useShowController(props);\n const classes = useStyles()\n if (!controllerProps.record) return null\n const { name, resourceId, resourceType } = controllerProps.record\n\n return (\n <ResourceContextProvider value={props.resource}>\n <ShowContextProvider value={controllerProps}>\n <ShowView\n {...props}\n {...controllerProps}\n actions={<HistoryShowActions />}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n <SimpleShowLayout {...props}>\n <EnumField source=\"action\" noWrap />\n <EnumField source=\"resourceType\" />\n <TextField source=\"name\" />\n <JsonField source=\"data\" className={classes.jsonField} />\n <JsonField source=\"previousData\" className={classes.jsonField} />\n <DateField source=\"createdAt\" options={dateTimeOptions} />\n <TextField source=\"id\" />\n </SimpleShowLayout>\n <BlankShowLayout label={`История ${name}`}>\n <ListField\n resource=\"History\"\n basePath=\"/History\"\n actions={false}\n filters={<HistoryFilter />}\n filter={{\n resourceType,\n resourceId\n }}\n sort={{ field: 'createdAt', order: 'DESC' }}\n perPage={10}\n >\n <ReferenceHistoryDatagrid />\n </ListField>\n </BlankShowLayout>\n </ShowView>\n </ShowContextProvider>\n </ResourceContextProvider>\n );\n};\n\nexport default HistoryShow;\n","import HistoryIcon from '@material-ui/icons/History';\nimport HistoryList from './HistoryList';\nimport HistoryShow from './HistoryShow';\n\n\nconst HistoryName = \"History\";\n\nconst HistoryResouce = {\n name: HistoryName,\n icon: HistoryIcon,\n list: HistoryList,\n show: HistoryShow,\n}\n\nexport default HistoryResouce\n\nexport {\n HistoryName,\n HistoryIcon,\n HistoryList,\n HistoryShow,\n};","import React from \"react\";\nimport {\n ShowContextProvider,\n ResourceContextProvider,\n useShowController,\n TextField,\n DateField,\n} from \"react-admin\";\nimport { ShowView } from \"../../lib/show/ShowView\";\nimport TitleForRecord from \"../../lib/layout/TitleForRecord\";\nimport SimpleShowLayout from '../../lib/show/SimpleShowLayout';\nimport TextCopyField from '../../lib/field/TextCopyField';\nimport FilePathField from '../../lib/field/FilePathField';\nimport FileSizeField from '../../lib/field/FileSizeField';\nimport FileResourcesReferenceArrayField from './FileResourcesReferenceArrayField';\nimport NestedArrayField from '../../lib/field/NestedArrayField';\nimport LabelChip from \"../Label/LabelChip\";\nimport { dateTimeOptions } from '../../utils';\n\n\nexport const FileShow = (props) => {\n const controllerProps = useShowController(props);\n\n\n return (\n <ResourceContextProvider value={props.resource}>\n <ShowContextProvider value={controllerProps}>\n <ShowView\n {...props}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <FileSizeField source=\"size\" />\n <TextField source=\"type\" />\n <FilePathField source=\"path\" label=\"resources.File.fields.url\" replaceValue=\"ra.input.url.text\" />\n <FilePathField source=\"pathThumbnail\" label=\"resources.File.fields.urlThumbnail\" replaceValue=\"ra.input.url.text\" />\n <DateField source=\"createdAt\" options={dateTimeOptions} />\n <DateField source=\"updatedAt\" options={dateTimeOptions} />\n <TextCopyField source=\"id\" />\n <FileResourcesReferenceArrayField source=\"resourcesIds\" />\n <NestedArrayField source=\"labels\" reference=\"Label\">\n <LabelChip source=\"name\" />\n </NestedArrayField>\n </SimpleShowLayout>\n </ShowView>\n </ShowContextProvider>\n </ResourceContextProvider>\n\n );\n};\n\nexport default FileShow;\n","import React from \"react\";\nimport { SelectInput } from 'react-admin';\n\n\n\nconst choices = [\n { id: 'Asset', name: 'resources.Asset.choice' },\n]\n\nexport const ResourceSelectInput = (props) => (<SelectInput {...props} choices={choices} />);\n\n\n\nexport default ResourceSelectInput;","import React, { useCallback } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useForm, useFormState } from 'react-final-form';\nimport { ReferenceArrayInput, AutocompleteArrayInput } from 'react-admin';\nimport { ResourceSelectInput } from './ResourceSelectInput';\nimport { autocompleteMatchTrue } from './utils';\n\n\n\nconst getEnableGetChoices = reference => filterValues => Boolean(reference)\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n display: \"flex\",\n gap: theme.spacing(2)\n },\n}), { name: 'ResourceReferenceArrayInput' });\n\n\nconst ResourceReferenceArrayInput = (props) => {\n const { resource, basePath } = props\n const classes = useStyles()\n const form = useForm()\n const { values } = useFormState()\n const sourceTypeName = `_${props.source}Typename`\n const reference = values[sourceTypeName]\n\n const handleChange = useCallback(event => {\n form.change(props.source, undefined)\n }, []);\n\n const enableGetChoices = getEnableGetChoices(reference)\n\n return (\n <div className={classes.container}>\n <ResourceSelectInput source={sourceTypeName} resource={resource} basePath={basePath} onChange={handleChange} />\n <ReferenceArrayInput\n {...props}\n reference={reference || props.resource}\n fullWidth\n enableGetChoices={enableGetChoices}\n options={{ disabled: !Boolean(reference) }}\n >\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n </div>\n );\n}\n\n\n\n\n\nexport default ResourceReferenceArrayInput;","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport ResourceReferenceArrayInput from '../../lib/input/ResourceReferenceArrayInput';\n\n\n\n\n\n\nconst FileResourceReferenceArrayInput = (props) => {\n const { record, source, label } = props\n const typename = record[`_${source}Typename`]\n const translate = useTranslate()\n const fileResourcelabel = typename ? translate(`resources.File.enums.typename.${typename}`) : label\n\n\n return (\n <ResourceReferenceArrayInput {...props} label={fileResourcelabel} />\n );\n}\n\n\n\n\n\nexport default FileResourceReferenceArrayInput;","import React from \"react\";\nimport { SimpleForm, ReferenceArrayInput, AutocompleteArrayInput } from 'react-admin';\nimport { TopToolbar, ShowButton } from 'react-admin';\nimport { Toolbar, SaveButton } from 'react-admin';\nimport { required, maxLength } from 'react-admin';\nimport CloneButton from '../../lib/button/CloneButton';\nimport Edit from '../../lib/edit/Edit';\nimport TitleForRecord from '../../lib/layout/TitleForRecord';\nimport Spacer from '../../lib/layout/Spacer';\nimport RemoveButton from '../../lib/button/RemoveButton';\nimport FileResourceReferenceArrayInput from './FileResourceReferenceArrayInput';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n\n\n\nconst validateName = [required(), maxLength(128)];\n\nconst FileEditActions = ({ data, basePath, hasShow, hasCreate }) => {\n return (\n <TopToolbar>\n {hasCreate && <CloneButton basePath={basePath} record={data} />}\n {hasShow && <ShowButton basePath={basePath} record={data} />}\n </TopToolbar>\n )\n};\n\nconst FileEditToolbar = props => {\n return (\n <Toolbar {...props} >\n <SaveButton submitOnEnter={true} disabled={props.pristine} redirect=\"list\" />\n <SaveButton submitOnEnter={false} disabled={props.pristine} label=\"ra.action.save_and_continue\" redirect=\"show\" variant=\"text\" style={{ marginLeft: 8 }} />\n <Spacer variant=\"row\" />\n <RemoveButton mutationMode=\"optimistic\" />\n </Toolbar>\n )\n};\n\nexport const FileEdit = (props) => (\n <Edit\n {...props}\n actions={<FileEditActions />}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n <SimpleForm toolbar={<FileEditToolbar />}>\n {/* <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth /> */}\n <FileResourceReferenceArrayInput source=\"resourcesIds\" label=\"resources.File.fields.resources\" />\n <ReferenceArrayInput source=\"labelsIds\" reference=\"Label\" label=\"resources.File.fields.labels\" filter={{ typename: \"File\" }} fullWidth>\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n </SimpleForm>\n </Edit>\n);\n\n\n\n\n\nexport default FileEdit;","import FileIcon from '@material-ui/icons/Folder';\nimport FileList from './FileList';\nimport FileShow from './FileShow';\nimport FileEdit from './FileEdit';\n\n\nconst FileName = \"File\"\n\nconst FileResource = {\n name: FileName,\n icon: FileIcon,\n list: FileList,\n show: FileShow,\n edit: FileEdit,\n}\n\nexport default FileResource;\n\n\nexport {\n FileName,\n FileIcon,\n FileList,\n FileShow,\n FileEdit,\n};","import React from \"react\";\nimport Filter from \"../../lib/list/filter/Filter\";\nimport { AutocompleteInput, ReferenceInput, AutocompleteArrayInput, ReferenceArrayInput } from \"react-admin\";\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n\n\nconst TagListFilter = (props) => (\n <Filter {...props}>\n <ReferenceInput source=\"asset.id\" reference=\"Asset\" label=\"resources.Tag.fields.asset\" alwaysOn>\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <ReferenceInput source=\"parameter.id\" reference=\"Parameter\" label=\"resources.Tag.fields.parameter\" alwaysOn>\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <ReferenceArrayInput source=\"asset.ids\" allowEmpty={false} reference=\"Asset\" label=\"resources.Tag.fields.assets\" >\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n <ReferenceArrayInput source=\"parameter.ids\" allowEmpty={false} reference=\"Parameter\" label=\"resources.Tag.fields.parameters\" >\n <AutocompleteArrayInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n </Filter>\n);\n\nexport default TagListFilter;\n","import { dateFormatter, booleanFormatter, enumFormatter, linkFormatter } from '../../lib/exporter';\n\nconst model = [\n { key: \"id\", header: \"resources.Tag.fields.id\" },\n { key: \"asset.id\", header: [\"resources.Tag.fields.asset\", \"resources.Asset.fields.id\"] },\n { key: \"asset.name\", header: [\"resources.Tag.fields.asset\", \"resources.Asset.fields.name\"] },\n { key: \"parameter.id\", header: [\"resources.Tag.fields.parameter\", \"resources.Parameter.fields.id\"] },\n { key: \"parameter.name\", header: [\"resources.Tag.fields.parameter\", \"resources.Parameter.fields.name\"] },\n { key: \"value\", header: \"resources.Tag.fields.value\" },\n { key: \"quality\", header: \"resources.Tag.fields.quality\" },\n { key: \"type\", header: \"resources.Tag.fields.type\" },\n { key: \"timestamp\", header: \"resources.Tag.fields.timestamp\", format: dateFormatter },\n { key: \"timestampSrv\", header: \"resources.Tag.fields.timestampSrv\", format: dateFormatter },\n { key: \"utcOffset\", header: \"resources.Tag.fields.utcOffset\" },\n { key: \"link\", header: \"Ccылка\", format: linkFormatter(\"Tag\", \"id\") },\n]\n\nexport default model;","import useExporter, { dateFormatter, booleanFormatter, enumFormatter, linkFormatter } from '../../lib/exporter';\n\n// const model = [\n// { key: \"id\", header: \"resources.Tag.fields.id\" },\n// { key: \"value\", header: \"resources.Tag.fields.value\" },\n// { key: \"writeValue\", header: \"resources.Tag.fields.writeValue\" },\n// { key: \"type\", header: \"resources.Tag.fields.type\" },\n// { key: \"quality\", header: \"resources.Tag.fields.quality\" },\n// { key: \"utcOffset\", header: \"resources.Tag.fields.utcOffset\" },\n// { key: \"timestamp\", header: \"resources.Tag.fields.timestamp\", format: dateFormatter},\n// { key: \"timestampSrv\", header: \"resources.Tag.fields.timestampSrv\", format: dateFormatter },\n// // { key: [\"defaultDashboard\", \"name\"], header: [\"resources.Tag.fields.defaultDashboard\", \"resources.Tag.fields.name\"] },\n// // { key: [\"dashboards\", \"name\"], header: [\"resources.Tag.fields.dashboards\", \"resources.Tag.fields.name\"] },\n// // { key: [\"assets\", \"name\"], header: [\"resources.Tag.fields.assets\", \"resources.Tag.fields.name\"] },\n// // { key: \"link\", header: \"Ccылка\", format: linkFormatter(\"Tag\", \"id\") },\n// { key: \"asset.id\", header: [\"resources.Tag.fields.asset\", \"resources.Asset.fields.id\"] },\n// { key: \"asset.name\", header: [\"resources.Tag.fields.asset\", \"resources.Asset.fields.name\"] },\n// { key: \"asset.description\", header: [\"resources.Tag.fields.asset\", \"resources.Asset.fields.description\"] },\n// { key: \"parameter.id\", header: [\"resources.Tag.fields.parameter\", \"resources.Parameter.fields.id\"] },\n// { key: \"parameter.name\", header: [\"resources.Tag.fields.parameter\", \"resources.Parameter.fields.name\"] },\n// { key: \"parameter.description\", header: [\"resources.Tag.fields.parameter\", \"resources.Parameter.fields.description\"] },\n// { key: \"parameter.role\", header: [\"resources.Tag.fields.parameter\", \"resources.Parameter.fields.role\"] },\n// { key: \"parameter.type\", header: [\"resources.Tag.fields.parameter\", \"resources.Parameter.fields.role\"] },\n// { key: \"parameter.units\", header: [\"resources.Tag.fields.parameter\", \"resources.Parameter.fields.units\"] },\n// { key: \"parameter.accessLevel\", header: [\"resources.Tag.fields.parameter\", \"resources.Parameter.fields.accessLevel\"] },\n// { key: \"parameter.format\", header: [\"resources.Tag.fields.parameter\", \"resources.Parameter.fields.format\"] },\n// ]\n\n\nexport const model = [\n { key: \"id\", header: \"resources.Tag.fields.id\" },\n { key: [\"asset\", \"id\"], header: [\"resources.Tag.fields.asset\", \"resources.Asset.fields.id\"] },\n { key: [\"asset\", \"name\"], header: [\"resources.Tag.fields.asset\", \"resources.Asset.fields.name\"] },\n { key: [\"parameter\", \"id\"], header: [\"resources.Tag.fields.parameter\", \"resources.Parameter.fields.id\"] },\n { key: [\"parameter\", \"name\"], header: [\"resources.Tag.fields.parameter\", \"resources.Parameter.fields.name\"] },\n { key: \"value\", header: \"resources.Tag.fields.value\" },\n { key: \"quality\", header: \"resources.Tag.fields.type\" },\n { key: \"type\", header: \"resources.Tag.fields.quality\" },\n { key: \"timestamp\", header: \"resources.Tag.fields.timestamp\", format: dateFormatter },\n { key: \"timestampSrv\", header: \"resources.Tag.fields.timestampSrv\", format: dateFormatter },\n { key: \"utcOffset\", header: \"resources.Tag.fields.utcOffset\" },\n { key: \"link\", header: \"Ccылка\", format: linkFormatter(\"Tag\", \"id\") },\n]\n\nconst useTagExporter = () => useExporter(model)\n\n\n\nexport default useTagExporter;","import React from \"react\";\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Datagrid, TextField, DateField } from \"react-admin\";\nimport List from '../../lib/list/List';\nimport ListActions from '../../lib/list/ListActions';\nimport useColumns from '../../lib/list/useColumns';\nimport useDatagridColumns from '../../lib/list/useDatagridColumns';\nimport useListStyles from \"../../lib/list/useListStyles\";\nimport { dateTimeOptions } from '../../utils';\nimport TagValueField from \"./TagValueField\";\nimport TagTypeField from \"./TagTypeField\";\nimport TagQualityChip from \"./TagQualityChip\";\nimport TagWriteButton from \"./TagWriteButton\";\nimport TagReadHistoryButton from \"./TagReadHistoryButton\";\nimport ParameterAccessChip from \"../Parameter/ParameterAccessChip\";\nimport permissions from '../../authProvider/abilityProvider'\nimport TagListFilter from \"./TagListFilter\";\nimport useTagExporter from \"./useTagExporter\";\nimport useExporter from \"../../lib/exporter\";\nimport model from \"./tagExportImportModel\";\n\nconst useStyles = makeStyles(theme => ({\n cellActionRight: {\n paddingLeft: 0\n },\n cellActionLeft: {\n paddingRight: 0,\n },\n}), { name: 'TagListDatagrid' });\n\n\n\nconst TagList = (props) => {\n const classes = useListStyles();\n const componentClasses = useStyles();\n const exporter = useExporter(model);\n\n const columns = useColumns([\n <TextField source=\"id\" />,\n <TextField source=\"asset.name\" label=\"resources.Tag.fields.asset\" sortable={false} cellClassName={classes.celllLineClamp} />,\n <TextField source=\"parameter.name\" label=\"resources.Tag.fields.parameter\" sortable={false} cellClassName={classes.celllLineClamp} />,\n <TagValueField source=\"value\" cellClassName={classes.celllLineClamp} />,\n <TagQualityChip source=\"quality\" cellClassName={classnames(classes.cellMinWidth, classes.cellAction)} />,\n <ParameterAccessChip source=\"parameter.accessLevel\" label=\"resources.Parameter.fields.accessLevel\" cellClassName={classnames(classes.cellAction)} sortable={false} />,\n <TagTypeField source=\"type\" cellClassName={classes.cellMinWidth} sortable={false} />,\n <DateField source=\"timestamp\" noWrap options={dateTimeOptions} cellClassName={classes.cellMinWidth} />,\n ]);\n\n const DatagridColumns = useDatagridColumns(columns)\n\n return (\n <List\n {...props}\n actions={<ListActions columns={columns} />}\n exporter={exporter}\n filters={<TagListFilter />}\n >\n <Datagrid >\n {DatagridColumns}\n <TagReadHistoryButton cellClassName={classnames(classes.cellMinWidth, classes.cellAction, componentClasses.cellActionLeft)} />\n {permissions.can('write', \"Tag\") && <TagWriteButton cellClassName={classnames(classes.cellMinWidth, classes.cellAction, componentClasses.cellActionRight)} />}\n </Datagrid>\n </List>\n )\n};\n\nTagList.defaultProps = {\n sort: { field: \"timestamp\", order: \"ASC\" },\n};\n\n\n\nexport default TagList;","import React from \"react\";\nimport {\n SimpleForm,\n TextInput,\n ReferenceInput,\n AutocompleteInput,\n ReferenceArrayInput,\n AutocompleteArrayInput,\n} from \"react-admin\";\nimport { TopToolbar, ShowButton } from 'react-admin';\nimport CloneButton from '../../lib/button/CloneButton';\nimport { Toolbar, SaveButton } from 'react-admin';\nimport Edit from \"../../lib/edit/Edit\";\nimport TitleForRecord from \"../../lib/layout/TitleForRecord\";\nimport { required, maxLength } from \"react-admin\";\nimport Spacer from '../../lib/layout/Spacer';\nimport RemoveButton from '../../lib/button/RemoveButton';\n\n\n\nconst validateName = [required(), maxLength(128)];\n\nconst TagEditActions = ({ data, basePath, hasShow, hasCreate }) => {\n return (\n <TopToolbar>\n {hasCreate && <CloneButton basePath={basePath} record={data} />}\n {hasShow && <ShowButton basePath={basePath} record={data} />}\n </TopToolbar>\n );\n};\n\nconst TagEditToolbar = props => {\n return (\n <Toolbar {...props} >\n <SaveButton disabled={props.pristine} />\n <Spacer variant=\"row\" />\n <RemoveButton mutationMode=\"optimistic\" />\n </Toolbar>\n )\n};\n\nexport const TagEdit = (props) => (\n <Edit\n {...props}\n actions={<TagEditActions />}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n <SimpleForm\n redirect=\"show\"\n toolbar={<TagEditToolbar />}\n >\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <TextInput source=\"address\" multiline fullWidth />\n <TextInput source=\"location\" />\n <ReferenceInput\n source=\"assetClass.id\"\n reference=\"TagClass\"\n label=\"resources.Tag.fields.assetClass\"\n allowEmpty emptyText=\"ra.boolean.false\"\n >\n <AutocompleteInput />\n </ReferenceInput>\n <ReferenceInput\n source=\"defaultDashboard.id\"\n reference=\"Dashboard\"\n label=\"resources.Tag.fields.defaultDashboard\"\n allowEmpty emptyText=\"ra.boolean.false\"\n >\n <AutocompleteInput />\n </ReferenceInput>\n <ReferenceArrayInput\n source=\"dashboardsIds\"\n reference=\"Dashboard\"\n label=\"resources.Tag.fields.dashboards\"\n fullWidth\n >\n <AutocompleteArrayInput />\n </ReferenceArrayInput>\n\n <ReferenceArrayInput\n filter={{ typeName: \"Tag\" }}\n source=\"labels\"\n reference=\"Label\"\n label=\"resources.Tag.fields.assetLabel\"\n fullWidth\n >\n <AutocompleteArrayInput />\n </ReferenceArrayInput>\n </SimpleForm>\n </Edit>\n);\n\nexport default TagEdit;\n","import TagIcon from '../../lib/icons/Database';\nimport TagList from './TagList';\nimport TagEdit from './TagEdit';\n\n\nconst TagName = \"Tag\"\n\nconst TagResource = {\n name: TagName,\n icon: TagIcon,\n list: TagList,\n edit: TagEdit,\n}\n\nexport default TagResource;\n\n\nexport {\n TagName,\n TagIcon,\n TagList,\n TagEdit,\n};","/* eslint react/display-name:off */\nimport React, { cloneElement, forwardRef, isValidElement, useCallback } from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { NavLink } from 'react-router-dom';\nimport MuiMenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { alpha } from '@material-ui/core/styles/colorManipulator';\nimport { useTranslate } from 'react-admin';\n\n\n\nconst NavLinkRef = forwardRef((props, ref) => (\n <NavLink innerRef={ref} {...props} />\n));\n\nconst MenuItem = forwardRef((props, ref) => {\n const {\n classes: classesOverride,\n className,\n label,\n icon,\n name,\n onClick,\n to,\n exact,\n isActive,\n disableGutters,\n ...rest\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n const sidebarIsOpen = useSelector(state => state.admin.ui.sidebarOpen);\n\n\n const handleMenuTap = useCallback(event => {\n onClick && onClick(event);\n }, [onClick]);\n\n\n const translatedLabel = isValidElement(label)\n ? label\n : translate(label.toString(), {\n smart_count: 2,\n _: label,\n });\n\n return (\n\n <MuiMenuItem\n button\n className={classnames(classes.root, className)}\n activeClassName={classes.active}\n component={NavLinkRef}\n to={to}\n exact={exact}\n isActive={isActive}\n ref={ref}\n tabIndex={0}\n onClick={handleMenuTap}\n {...rest}\n >\n\n {icon && (\n <ListItemIcon className={classes.icon}>\n {cloneElement(icon, {\n titleAccess: translatedLabel,\n })}\n </ListItemIcon>\n )}\n {sidebarIsOpen && (\n <ListItemText\n className={classes.label}\n primaryTypographyProps={{ noWrap: true }}\n >\n {translatedLabel}\n </ListItemText>\n )}\n </MuiMenuItem >\n\n );\n});\n\n\nMenuItem.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n icon: PropTypes.element,\n onClick: PropTypes.func,\n label: PropTypes.node,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n};\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n color: theme.palette.text.secondary,\n },\n active: {\n color: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n },\n '&::before': {\n content: '\"\"',\n display: 'block',\n width: 4,\n height: '100%',\n position: 'absolute',\n top: 0,\n left: 0,\n backgroundColor: theme.palette.primary.main,\n borderRadius: \"0 4px 4px 0\",\n },\n },\n icon: {\n color: 'inherit',\n minWidth: theme.spacing(5),\n marginRight: theme.spacing(2),\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n label: {\n margin: 0\n },\n\n }),\n { name: 'RaMenuItem' }\n);\n\nexport default MenuItem","import React, { Children } from 'react';\nimport { makeStyles } from '@material-ui/core';\nimport Typography from '@material-ui/core/Typography';\n\nconst useStyles = makeStyles(theme => ({\n menuGroup: {},\n menuGroupTitle: {\n paddingTop: theme.spacing(2),\n paddingLeft: theme.spacing(3),\n },\n\n}));\n\nconst MenuGroup = ({ title, children, ...props }) => {\n const classes = useStyles();\n const childrens = Children.toArray(children)\n\n if (childrens.length === 0) return null;\n\n return (\n <div className={classes.menuGroup}>\n {(!!title) && <Typography variant=\"subtitle2\" color=\"textSecondary\" gutterBottom noWrap className={classes.menuGroupTitle} >{title}</Typography>}\n {childrens}\n </div>\n )\n\n};\n\n\nexport default MenuGroup;","/* eslint react/display-name:off */\nimport React, { Fragment, cloneElement, forwardRef, isValidElement, useCallback, Children } from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { NavLink, useLocation, useHistory } from 'react-router-dom';\nimport MuiMenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Collapse from '@material-ui/core/Collapse';\nimport List from '@material-ui/core/List';\nimport IconButton from '@material-ui/core/IconButton';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { alpha } from '@material-ui/core/styles/colorManipulator';\nimport { useTranslate } from 'react-admin';\nimport { usePreferences } from '@react-admin/ra-preferences';\n//import { usePreferences } from '../preferences/usePreferences';\n\n\nconst NavLinkRef = forwardRef((props, ref) => (\n <NavLink innerRef={ref} {...props} />\n));\n\nconst MenuItem = forwardRef((props, ref) => {\n const {\n children,\n classes: classesOverride,\n className,\n label,\n icon,\n name,\n onClick,\n to,\n exact,\n collapse,\n disableGutters,\n ...rest\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n const location = useLocation();\n const history = useHistory();\n const sidebarIsOpen = useSelector(state => state.admin.ui.sidebarOpen);\n const [menuIsCollapse, setMenuIsCollapse] = usePreferences(`ui.menu.${name}Collapse`, collapse);\n const childrens = Children.toArray(children)\n const isActive = childrens.map(({ props }) => props.to).includes(location.pathname)\n\n const handleMenuTap = useCallback(event => {\n setMenuIsCollapse(!menuIsCollapse)\n if (!menuIsCollapse && !isActive) {\n history.push(children[0].props.to);\n }\n onClick && onClick(event);\n }, [onClick, menuIsCollapse, setMenuIsCollapse, isActive, history, children]);\n\n if (childrens.length === 0) return null;\n\n const translatedLabel = isValidElement(label)\n ? label\n : translate(label.toString(), {\n smart_count: 2,\n _: label,\n });\n\n\n return (\n <Fragment>\n <MuiMenuItem\n button\n className={classnames(classes.root, className, { [classes.active]: isActive })}\n exact={exact}\n tabIndex={0}\n onClick={handleMenuTap}\n {...rest}\n >\n {icon && (\n <ListItemIcon className={classes.icon}>\n {cloneElement(icon, {\n titleAccess: translatedLabel,\n })}\n </ListItemIcon>\n )}\n {sidebarIsOpen && (\n <ListItemText\n className={classes.label}\n primaryTypographyProps={{ noWrap: true }}\n >\n {translatedLabel}\n </ListItemText>\n )}\n {sidebarIsOpen && (\n <IconButton\n className={classnames(classes.expandIcon, {\n [classes.expanded]: menuIsCollapse,\n })}\n edge=\"end\"\n size=\"small\"\n component=\"div\"\n tabIndex={null}\n role={null}\n aria-hidden\n >\n <ExpandMoreIcon />\n </IconButton>\n )}\n </MuiMenuItem >\n <Collapse in={menuIsCollapse} timeout=\"auto\" unmountOnExit>\n <List\n component=\"div\"\n disablePadding\n className={\n sidebarIsOpen\n ? classes.sidebarIsOpen\n : classes.sidebarIsClosed\n }\n >\n {children}\n </List>\n </Collapse>\n </Fragment>\n )\n});\n\n\nMenuItem.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n icon: PropTypes.element,\n onClick: PropTypes.func,\n label: PropTypes.node,\n to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired,\n};\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n color: theme.palette.text.secondary,\n },\n active: {\n color: theme.palette.primary.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n },\n '&::before': {\n content: '\"\"',\n display: 'block',\n width: 4,\n height: '100%',\n position: 'absolute',\n top: 0,\n left: 0,\n backgroundColor: theme.palette.primary.main,\n borderRadius: \"0 4px 4px 0\",\n },\n },\n icon: {\n color: 'inherit',\n minWidth: theme.spacing(5),\n marginRight: theme.spacing(2),\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n label: {\n margin: 0\n },\n sidebarIsOpen: {\n '& a': {\n paddingLeft: theme.spacing(5),\n transition: 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\n },\n },\n sidebarIsClosed: {\n '& a': {\n paddingLeft: theme.spacing(2),\n transition: 'padding-left 195ms cubic-bezier(0.4, 0, 0.6, 1) 0ms',\n },\n },\n listitemText: {\n flex: \"1 1 auto\",\n },\n expanded: {},\n expandIcon: {\n marginTop: -3,\n marginBottom: -3,\n transform: 'rotate(0deg)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shortest,\n }),\n '&:hover': {\n // Disable the hover effect for the IconButton,\n // because a hover effect should apply to the entire Expand button and\n // not only to the IconButton.\n backgroundColor: 'transparent',\n },\n '&$expanded': {\n transform: 'rotate(180deg)',\n },\n },\n\n }),\n { name: 'RaMenuItem' }\n);\n\nexport default MenuItem","import React from 'react';\nimport MenuItem from './MenuItem';\n\n\n\nconst ResourceMenuItem = ({ resource, ...props }) => {\n const resourceMenuItemProps = {\n name: resource.name,\n label: `resources.${resource.name}.menu`,\n icon: <resource.icon />,\n to: `/${resource.name}`,\n }\n\n return (<MenuItem {...resourceMenuItemProps} {...props} />)\n\n};\n\nexport default ResourceMenuItem;","import { createContext } from 'react';\n\nconst ProfileContext = createContext({\n profile: null,\n loaded: null,\n loading: null,\n version: null,\n refresh: null,\n});\n\nProfileContext.displayName = 'ProfileContext';\n\nexport default ProfileContext","import { useContext } from \"react\";\nimport ProfileContext from \"./ProfileContext\";\n\nconst useProfile = () => useContext(ProfileContext);\n\nexport default useProfile","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useTranslate, Menu, usePermissions } from 'react-admin';\nimport HomeIcon from '@material-ui/icons/Home';\nimport TodayIcon from '@material-ui/icons/Today';\nimport HelpIcon from '@material-ui/icons/Help';\nimport InfoIcon from '@material-ui/icons/Info';\nimport NewReleasesIcon from '@material-ui/icons/NewReleases';\n\n\nimport Event from '../../components/Event';\nimport EventHistory from '../../components/EventHistory';\nimport TagSeries from '../../components/TagSeries';\nimport Asset from '../../components/Asset';\nimport Label from '../../components/Label';\nimport AssetClass from '../../components/AssetClass';\nimport AssetDatagrid from '../../components/AssetDatagrid';\nimport AssetMap from '../../components/AssetMap';\nimport AssetTree from '../../components/AssetTree';\nimport Dashboard from '../../components/Dashboard';\nimport Report from '../../components/Report';\nimport Widget from '../../components/Widget';\nimport History from '../../components/History';\nimport File from '../../components/File';\nimport Tag from '../../components/Tag';\n\n\nimport {\n MenuItem,\n MenuGroup,\n ResourceMenuItem,\n ProfileDashboardMenuItems,\n MenuItemCollapse\n} from './menu';\n// import { can } from '../../authProvider/Casl';\n\n\n\nconst AppMenu = ({\n classes: classesOverride,\n className,\n hasDashboard,\n onMenuClick,\n logout,\n ...props\n}) => {\n\n const translate = useTranslate();\n const { permissions, loading } = usePermissions()\n useSelector((state) => state.router.location.pathname);\n\n if (loading) return null\n\n\n return (\n <Menu\n onClick={onMenuClick}\n {...props}\n >\n <MenuItem name=\"dashboard\" label={'ra.page.dashboard'} icon={<HomeIcon />} to=\"/\" exact />\n <MenuItemCollapse\n name=\"Events\"\n label=\"События\"\n icon={<TodayIcon />}\n to={`/${Event.name}`}\n collapse\n >\n {permissions.can(\"getList\", \"Event\") && <ResourceMenuItem resource={Event} />}\n {permissions.can(\"getList\", \"Event\") && <ResourceMenuItem resource={EventHistory} />}\n </MenuItemCollapse>\n {permissions.can(\"getList\", \"Asset\") && <ResourceMenuItem resource={AssetMap} />}\n {permissions.can(\"getList\", \"Asset\") && <ResourceMenuItem resource={AssetDatagrid} />}\n {permissions.can(\"getList\", \"Asset\") && <ResourceMenuItem resource={Asset} />}\n {permissions.can(\"getList\", \"Asset\") && <ResourceMenuItem resource={AssetTree} />}\n {permissions.can(\"getList\", \"TagHistory\") && <ResourceMenuItem resource={TagSeries} />}\n {permissions.can(\"getList\", \"Dashboard\") && <ResourceMenuItem resource={Dashboard} />}\n {permissions.can(\"getList\", \"Report\") && <ResourceMenuItem resource={Report} />}\n <MenuGroup title={\"Справочники\"} >\n\n {permissions.can(\"getList\", \"AssetClass\") && <ResourceMenuItem resource={AssetClass} />}\n {permissions.can(\"getList\", \"Tag\") && <ResourceMenuItem resource={Tag} />}\n {permissions.can(\"getList\", \"File\") && <ResourceMenuItem resource={File} />}\n {permissions.can(\"getList\", \"Label\") && <ResourceMenuItem resource={Label} />}\n {permissions.can(\"getList\", \"Widget\") && <ResourceMenuItem resource={Widget} />}\n </MenuGroup>\n <MenuGroup title={\"Утилиты\"} >\n {permissions.can(\"getList\", \"History\") && <ResourceMenuItem resource={History} />}\n <MenuItemCollapse\n name=\"About\"\n label={'ra.page.about'}\n icon={<HelpIcon />}\n to={`/About`}\n >\n <MenuItem name=\"releases\" label={'ra.page.releases'} icon={<NewReleasesIcon />} to=\"/About/releases\" exact />\n <MenuItem name=\"information\" label={'ra.page.information'} icon={<InfoIcon />} to=\"/About/information\" exact />\n </MenuItemCollapse>\n </MenuGroup>\n\n </Menu>\n );\n};\n\n\nexport default AppMenu;","import React, { useEffect, useRef } from 'react';\nimport { useDispatch } from 'react-redux';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { setSidebarVisibility, toggleSidebar, useTranslate } from 'ra-core';\nimport { usePreferences } from '@react-admin/ra-preferences';\n\n\n\nconst useStyles = makeStyles(theme => ({\n menuButton: {\n marginRight: theme.spacing(2),\n },\n menuButtonIconClosed: {\n transition: theme.transitions.create(['transform'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n transform: 'rotate(0deg)',\n },\n menuButtonIconOpen: {\n transition: theme.transitions.create(['transform'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n transform: 'rotate(180deg)',\n },\n}),\n { name: 'RaToggleSidebarButton' }\n);\n\n\nconst ToggleSidebarButton = (props) => {\n const { open, ...rest } = props;\n const classes = useStyles();\n const dispatch = useDispatch();\n const translate = useTranslate();\n const [sidebarPref, setSidebarPref] = usePreferences('ui.sidebarOpen');\n const stateRef = useRef();\n\n useEffect(() => {\n if (typeof stateRef.current === 'undefined') {\n // first mount\n stateRef.current =\n typeof sidebarPref !== 'undefined'\n ? sidebarPref\n : open;\n if (\n typeof sidebarPref !== 'undefined' &&\n sidebarPref !== open\n ) {\n // restore preference\n dispatch(setSidebarVisibility(sidebarPref));\n }\n } else {\n if (stateRef.current !== open) {\n // sidebar state changed in store\n if (sidebarPref !== open) {\n // store latest state in preferences\n setSidebarPref(open);\n stateRef.current = open;\n }\n } else {\n // sidebar preference changed in localStorage (probably from another window)\n if (\n sidebarPref != undefined &&\n sidebarPref !== open\n ) {\n // store latest preference in state\n dispatch(setSidebarVisibility(sidebarPref));\n stateRef.current = sidebarPref;\n }\n }\n }\n }, [dispatch, sidebarPref, setSidebarPref, open]);\n\n return (\n <Tooltip\n title={translate(open ? 'ra.action.close_menu' : 'ra.action.open_menu', { _: 'Open/Close menu' })}\n enterDelay={500}\n >\n <IconButton\n color=\"inherit\"\n onClick={() => dispatch(toggleSidebar())}\n className={classes.menuButton}\n {...rest}\n >\n <MenuIcon classes={{ root: open ? classes.menuButtonIconOpen : classes.menuButtonIconClosed }} />\n </IconButton>\n </Tooltip>\n );\n}\n\nexport default ToggleSidebarButton","import useLocalStorage from '../../lib/hook/useLocalStorage';\n\n\n\nconst initialStorage = { sound: \"Notification2.m4a\", repeat: 10000, silencePeriod: 0, silenceTo: undefined, autoOpen: false }\n\nconst useNoticationSettings = () => useLocalStorage('notification', initialStorage)\n\n\n\nexport default useNoticationSettings","import { useEffect, useRef } from 'react'\nimport useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect'\n\n\n\nfunction useInterval(callback, delay, enable) {\n const savedCallback = useRef(callback)\n\n useIsomorphicLayoutEffect(() => {\n savedCallback.current = callback\n }, [callback])\n\n useEffect(() => {\n if (!enable) return\n\n const id = setInterval(() => savedCallback.current(), delay)\n\n return () => clearInterval(id)\n }, [delay, enable])\n}\n\nexport default useInterval","import { useEffect, useState, useMemo } from 'react';\n\n\n// https://stackoverflow.com/questions/67659450/cant-use-audio-play-inside-useeffect-react-hooks\n// https://codesandbox.io/s/lpzr84p39z?file=/src/useAudio.js:371-382\n// https://dev.to/iamludal/custom-reack-hooks-useaudio-565j\n\n// Wrap the native DOM audio element play function and handle any autoplay errors\n// Audio.prototype.play = (function (play) {\n// return function () {\n// var audio = this,\n// args = arguments,\n// promise = play.apply(audio, args);\n// if (promise !== undefined) {\n// promise.catch(_ => {\n// // Autoplay was prevented. This is optional, but add a button to start playing.\n// const button = document.createElement(\"button\");\n// button.onclick = () => {\n\n\n// };\n// document.body.appendChild(button);\n// button.click();\n\n// play.apply(audio, args)\n// button.remove();\n// // el.innerHTML = \"Play\";\n// // el.addEventListener(\"click\", function () { play.apply(audio, args); });\n// // this.parentNode.insertBefore(el, this.nextSibling)\n\n\n// // const link = document.createElement(\"a\")\n// // link.href = URL.createObjectURL(blob)\n// // link.download = record.name;\n// // link.click();\n// // link.remove();\n// });\n// }\n// };\n// })(Audio.prototype.play);\n\n\nconst useAudio = (url, options = {}) => {\n const refreshSignature = JSON.stringify({ url, options })\n const audio = useMemo(() => url ? new Audio(url, options) : undefined, [refreshSignature]);\n const [loading, setLoading] = useState(true);\n const [loaded, setLoaded] = useState(false);\n\n\n\n useEffect(() => {\n if (!audio) return\n setLoading(true)\n setLoaded(false)\n\n const onload = (event) => {\n setLoading(false)\n setLoaded(true)\n }\n\n audio.addEventListener(\"canplaythrough\", onload);\n\n return () => {\n if (audio) {\n audio.pause(); // to enable garbage collection\n audio.removeEventListener(\"canplaythrough\", onload);\n }\n };\n }, [audio]);\n\n return [audio, loading, loaded]\n\n}\n\n\nexport default useAudio","import { useEffect, useState } from 'react';\nimport { DateTime } from \"luxon\";\nimport useEventContext from '../../controller/event/useEventContext';\nimport useIntervalWithOnce from '../../lib/hook/useIntervalWithOnce';\nimport useInterval from '../../lib/hook/useInterval';\nimport useAudio from '../../lib/hook/useAudio';\nimport useNoticationSettings from './useNoticationSettings';\n\n\n\nconst getSoundUrl = (sound) => {\n if (!sound) return Promise.reject(new Error('not sound'))\n return import(`../../lib/sounds/${sound}`) //прикол вебпак https://stackoverflow.com/questions/54254553/dynamic-import-in-react-not-working-when-trying-to-import-a-component-in-another\n .then(module => {\n return module.default\n })\n .catch(error => {\n throw error\n });\n}\n\nconst useNoticationSoundController = () => {\n const { hasUnack, version } = useEventContext()\n const [{ sound, repeat, silenceTo }, setSettings] = useNoticationSettings()\n const [url, setUrl] = useState()\n const [audio, loading, loaded] = useAudio(url)\n const enableRepeat = Boolean(hasUnack) && !Boolean(silenceTo) && Boolean(repeat)\n\n // получаем url звука из настроек\n useEffect(() => {\n getSoundUrl(sound)\n .then(url => {\n setUrl(url)\n })\n }, [setUrl, sound])\n\n // сбрасываем время тишины\n useInterval(() => {\n if (silenceTo && DateTime.now() > DateTime.fromISO(silenceTo)) {\n setSettings(previous => ({ ...previous, silenceTo: undefined }))\n }\n }, 1000, silenceTo);\n\n // проигрываем звук пока включен с повтором\n useIntervalWithOnce(() => {\n if (loaded) audio.play().catch(error => { }) // Костыль из-за условий проигрывания аудио в браузере. Выдает ошибку воспроизведения если пользователь не взаимодействовал со страницей. Игнорируем ошибку.\n }, repeat, enableRepeat);\n\n // проигрываем звук пока включен без повтора\n useEffect(() => {\n if (loaded && Boolean(hasUnack) && !Boolean(silenceTo) && !repeat) audio.play().catch(error => { })\n }, [loaded, hasUnack, version, silenceTo, repeat])\n\n\n\n return {\n silenced: Boolean(silenceTo),\n enableRepeat\n }\n}\n\n\n\nexport default useNoticationSoundController","import React, { useCallback, useMemo } from 'react';\nimport { Link } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListSubheader from '@material-ui/core/ListSubheader';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Divider from '@material-ui/core/Divider';\nimport useEventContext from '../../controller/event/useEventContext';\nimport EventListSimpleListItem from '../../components/Event/EventListSimpleListItem';\nimport { useTranslate, RecordContextProvider } from 'react-admin';\n\nconst emptyArray = []\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundColor: theme.palette.background.paper,\n overflow: 'auto',\n },\n}), { name: 'SubscribtionEventList' });\n\n\nconst SubscribtionEventList = (props) => {\n const { onClick } = props\n const classes = useStyles();\n const translate = useTranslate()\n const { events = emptyArray } = useEventContext()\n const activeUnackEvents = useMemo(() => events.filter(event => {\n const isActive = event.active\n const isUnack = !event.ack && event.ackRequired\n const isActiveUnack = isActive || isUnack\n return isActiveUnack\n }), [events])\n\n const handleClick = useCallback((event) => {\n if (onClick) onClick(event)\n }, [onClick])\n\n return (activeUnackEvents.length > 0) ? (\n <List\n subheader={<ListSubheader>{translate(\"resources.Event.name\", { smart_count: 2 })}</ListSubheader>}\n className={classes.root}\n >\n {activeUnackEvents.slice(0, 10).map(event => (\n <RecordContextProvider key={event.id} value={event}>\n <EventListSimpleListItem\n record={event}\n basePath=\"/Event\"\n onClick={handleClick}\n />\n </RecordContextProvider>\n\n ))}\n <Divider />\n <ListItem button component={Link} to=\"/Event\" onClick={handleClick}>Все события</ListItem>\n </List>\n ) : (\n <ListItem >\n <ListItemText\n primary={translate(\"resources.Event.empty\")}\n secondary={translate(\"resources.Event.invite\")}\n />\n </ListItem>\n );\n}\n\nexport default SubscribtionEventList","import React from 'react';\nimport { SelectInput } from \"react-admin\";\n\n\n\nexport const silencePeriodChoices = [\n { id: 0, name: 'Отключено' },\n { id: 1000 * 60, name: '1 минуту' },\n { id: 1000 * 60 * 5, name: '5 минут' },\n { id: 1000 * 60 * 10, name: '10 минут' },\n { id: 1000 * 60 * 30, name: '30 минут' },\n { id: 1000 * 60 * 60, name: '1 час' },\n]\n\n\nconst SilencePeriodInput = (props) => {\n\n return (\n <SelectInput {...props} choices={silencePeriodChoices} />\n );\n}\n\n\nexport default SilencePeriodInput;","import React, { forwardRef, useCallback } from 'react';\nimport { DateTime } from \"luxon\";\nimport keyBy from \"lodash/keyBy\";\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport VolumeOffIcon from '@material-ui/icons/VolumeOff';\nimport VolumeUpIcon from '@material-ui/icons/VolumeUp';\nimport { useTranslate, useNotify } from 'react-admin';\nimport useNoticationSettings from '../../controller/notification/useNoticationSettings';\nimport { silencePeriodChoices } from '../../lib/input/SilencePeriodInput';\n\n\n\nconst silencePeriodMap = keyBy(silencePeriodChoices, \"id\")\n\nconst SoundOffIconButton = forwardRef((props, ref) => {\n const {\n onClick,\n ...rest\n } = props;\n const translate = useTranslate()\n const [{ silencePeriod, silenceTo }, setSettings] = useNoticationSettings()\n const notify = useNotify();\n const soundOff = Boolean(silenceTo)\n\n const handleClick = useCallback((silencePeriod, silenceTo) => (event) => {\n const newSilenceTo = silenceTo ? undefined : silencePeriod ? DateTime.now().plus({ milliseconds: silencePeriod }).toISO() : undefined\n setSettings(previous => {\n return {\n ...previous,\n silenceTo: newSilenceTo\n }\n })\n if (newSilenceTo) {\n notify('ra.notification.sound_off', 'info', { silencePeriod: silencePeriodMap[silencePeriod].name });\n } else {\n notify('ra.notification.sound_on', 'info');\n }\n\n onClick && onClick(event)\n }, [onClick, setSettings]);\n\n\n return (\n <Tooltip title={translate(`${soundOff ? \"ra.settings.sound.off\" : \"ra.settings.sound.on\"}`)} enterDelay={500} >\n <IconButton\n onClick={handleClick(silencePeriod, silenceTo)}\n disabled={silencePeriod === 0}\n {...rest}\n >\n {soundOff ? <VolumeOffIcon /> : <VolumeUpIcon />}\n </IconButton>\n </Tooltip>\n );\n});\n\n\nexport default SoundOffIconButton","import React, { useCallback, useEffect, useState, useRef } from 'react';\nimport { SelectInput } from \"react-admin\";\nimport useAudio from '../hook/useAudio';\nimport defaultSound from '../sounds/silent.wav';\n\n\n\n\n\nexport const soundChoices = [\n { id: \"Notification2.m4a\", name: 'Уведомление 1' },\n { id: \"Notification1.mp3\", name: 'Уведомление 2' },\n { id: \"Notification3.mp3\", name: 'Уведомление 3' },\n { id: \"Notification4.mp3\", name: 'Уведомление 4' },\n { id: \"multimedia-notify-9.mp3\", name: 'Мультимедиа 1' },\n { id: \"multimedia-notify-31.mp3\", name: 'Мультимедиа 2' },\n { id: \"multimedia-notify-34.mp3\", name: 'Мультимедиа 3' },\n { id: \"multimedia-notify-37.mp3\", name: 'Мультимедиа 4' },\n { id: \"multimedia-notify-50.mp3\", name: 'Мультимедиа 5' },\n { id: \"multimedia-notify-65.mp3\", name: 'Мультимедиа 6' },\n { id: \"multimedia-notify-66.mp3\", name: 'Мультимедиа 7' },\n { id: \"Attention1.mp3\", name: 'Внимание 1' },\n { id: \"Attention2.mp3\", name: 'Внимание 2' },\n { id: \"Attention3.mp3\", name: 'Внимание 3' },\n { id: \"Attention4.mp3\", name: 'Внимание 4' },\n { id: \"Alert1.mp3\", name: 'Тревога 1' },\n { id: \"Alert2.mp3\", name: 'Тревога 2' },\n]\n\n\nconst getSoundUrl = (sound) => {\n if (!sound) return Promise.reject(new Error('not sound'))\n return import(`../sounds/${sound}`) //прикол вебпак https://stackoverflow.com/questions/54254553/dynamic-import-in-react-not-working-when-trying-to-import-a-component-in-another\n .then(module => {\n return module.default\n })\n .catch(error => {\n throw error\n });\n}\n\n\nconst SoundInput = (props) => {\n const [url, setUrl] = useState();\n const [audio, loading, loaded] = useAudio(url)\n\n const handleChange = useCallback(event => {\n const sound = event.target.value\n getSoundUrl(sound)\n .then(url => {\n setUrl(url)\n })\n }, [setUrl])\n\n useEffect(() => {\n if (loaded) audio.play()\n }, [audio, loaded])\n\n return (\n <SelectInput {...props} choices={soundChoices} onChange={handleChange} />\n );\n\n}\n\n\nexport default SoundInput;","import React from 'react';\nimport { SelectInput } from \"react-admin\";\n\n\n\nexport const repeatChoices = [\n { id: 0, name: 'Отключено' },\n { id: 1000 * 5, name: '5 секунд' },\n { id: 1000 * 10, name: '10 секунд' },\n { id: 1000 * 30, name: '30 секунд' },\n { id: 1000 * 60, name: '1 минута' },\n]\n\n\nconst RepeatInput = (props) => {\n\n return (\n <SelectInput {...props} choices={repeatChoices} />\n );\n}\n\n\nexport default RepeatInput;","import React, { useCallback } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { Form } from 'react-final-form';\n\nimport { useTranslate, TextInput } from 'react-admin';\nimport SoundInput from '../input/SoundInput';\nimport RepeatInput from '../input/RepeatInput';\nimport SilencePeriodInput from '../input/SilencePeriodInput';\n\n\n\n\n\n\n\nconst defaultSubscription = {\n submitting: true,\n pristine: true,\n valid: true,\n invalid: true,\n};\n\nconst required = (value) => {\n return value === true ? undefined : 'ra.validation.required';\n}\n\n\nconst useStyles = makeStyles(theme => ({\n form: {\n display: \"flex\",\n flexDirection: \"column\"\n },\n input: {\n flexGrow: 1\n }\n}), { name: 'TagReadHistoryDialog' });\n\n\n\nconst NotificationSettingsDialog = (props) => {\n const { open, onSave, onClose, settings } = props\n const classes = useStyles()\n const translate = useTranslate()\n\n\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const handleSave = useCallback((values) => {\n onSave(values);\n }, [onSave]);\n\n return (\n <Dialog\n open={open}\n onClose={handleClose}\n fullWidth\n maxWidth=\"sm\"\n aria-labelledby=\"notification-settings-dialog-title\"\n aria-describedby=\"notification-settings-dialog-description\"\n >\n <DialogTitle id=\"notification-settings-dialog-title\">{translate(\"ra.message.notification_settings_title\")}</DialogTitle>\n <DialogContent>\n <DialogContentText >{translate(\"ra.message.notification_settings_content\")}</DialogContentText>\n </DialogContent>\n <Form\n onSubmit={handleSave}\n initialValues={settings}\n subscription={defaultSubscription}\n keepDirtyOnReinitialize\n render={formProps => (\n <form>\n <DialogContent>\n <div className={classes.form}>\n <SoundInput source='sound' label=\"ra.input.notification_settings.sound\" />\n <RepeatInput source='repeat' label=\"ra.input.notification_settings.repeat\" />\n <SilencePeriodInput source='silencePeriod' label=\"ra.input.notification_settings.silencePeriod\" />\n </div>\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose}>\n {translate(\"ra.action.cancel\", { _: \"Cancel\" })}\n </Button>\n <Button onClick={formProps.handleSubmit} color=\"primary\">\n {translate(\"ra.action.save\", { _: \"Save\" })}\n </Button>\n </DialogActions>\n </form>\n )}\n />\n </Dialog>\n )\n}\n\nexport default NotificationSettingsDialog","import React, { forwardRef, useCallback } from 'react';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport SettingsIcon from '@material-ui/icons/Settings';\nimport { useTranslate } from 'react-admin';\nimport NotificationSettingsDialog from './NotificationSettingsDialog';\nimport useNoticationSettings from '../../controller/notification/useNoticationSettings';\n\n\n\nconst NotificationSettingsIconButton = forwardRef((props, ref) => {\n const {\n onClick,\n ...rest\n } = props;\n const translate = useTranslate()\n const [open, setOpen] = React.useState(false);\n const [notificationSettings, setNotificationSettings] = useNoticationSettings()\n\n const handleClick = useCallback((event) => {\n setOpen(true);\n onClick && onClick(event)\n }, [setOpen, onClick]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleSave = useCallback((values) => {\n setNotificationSettings(values)\n setOpen(false);\n }, [setOpen, setNotificationSettings]);\n\n return (\n <>\n\n <Tooltip title={translate(\"ra.settings.notification_and_sound\")} enterDelay={500} >\n <IconButton onClick={handleClick} {...rest} >\n <SettingsIcon />\n </IconButton>\n </Tooltip>\n <NotificationSettingsDialog\n open={open}\n onClose={handleClose}\n onSave={handleSave}\n settings={notificationSettings}\n />\n </>\n\n );\n});\n\n\nexport default NotificationSettingsIconButton","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M9 4L11.5 9.5L17 12L11.5 14.5L9 20L6.5 14.5L1 12L6.5 9.5L9 4M9 8.83L8 11L5.83 12L8 13L9 15.17L10 13L12.17 12L10 11L9 8.83M19 9L17.74 6.26L15 5L17.74 3.75L19 1L20.25 3.75L23 5L20.25 6.26L19 9M19 23L17.74 20.26L15 19L17.74 17.75L19 15L20.25 17.75L23 19L20.25 20.26L19 23Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React, { forwardRef, useCallback } from 'react';\nimport IconButton from '@material-ui/core/IconButton';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport CreationIcon from '../icons/Creation';\nimport CreationOutlineIcon from '../icons/CreationOutline';\nimport { useTranslate } from 'react-admin';\nimport useNoticationSettings from '../../controller/notification/useNoticationSettings';\n\n\n\nconst NotificationAutoOpenButton = forwardRef((props, ref) => {\n const {\n onClick,\n ...rest\n } = props;\n\n const translate = useTranslate()\n const [{ autoOpen }, setSettings] = useNoticationSettings()\n\n const handleClick = useCallback((event) => {\n setSettings(previous => ({ ...previous, autoOpen: !previous.autoOpen }))\n\n onClick && onClick(event)\n }, [onClick, setSettings]);\n\n\n return (\n <Tooltip title={translate(\"ra.settings.autoOpen\")} enterDelay={500} >\n <IconButton onClick={handleClick} {...rest} >\n {autoOpen ? <CreationIcon /> : <CreationOutlineIcon />}\n </IconButton>\n </Tooltip>\n );\n});\n\n\nexport default NotificationAutoOpenButton","import React, { useState, useEffect, useRef } from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport IconButton from '@material-ui/core/IconButton';\nimport CloseIcon from '@material-ui/icons/Close';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Badge from '@material-ui/core/Badge';\nimport Popper from '@material-ui/core/Popper';\nimport Paper from '@material-ui/core/Paper';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport NotificationsActiveIcon from '@material-ui/icons/NotificationsActive';\nimport NotificationsNoneIcon from '@material-ui/icons/NotificationsNone';\nimport NotificationsOffIcon from '@material-ui/icons/NotificationsOff';\nimport { useTranslate } from 'ra-core';\nimport useEventContext from '../../controller/event/useEventContext';\nimport useNoticationSettings from '../../controller/notification/useNoticationSettings';\nimport useNoticationSoundController from '../../controller/notification/useNoticationSoundController';\nimport SubscribtionEventList from '../../lib/events/SubscribtionEventList';\nimport NotificationSoundButton from '../layout/NotificationSoundButton';\nimport NotificationSettingsButton from '../layout/NotificationSettingsButton';\nimport NotificationAutoOpenButton from '../layout/NotificationAutoOpenButton';\n\n\nconst useStyles = makeStyles(theme => ({\n swing: {\n animation: '$swing 10s linear 0.5s infinite',\n transformOrigin: 'top center',\n },\n '@keyframes swing': {\n '0%': { transform: 'rotate3d(0, 0, 1, 0deg)' },\n '90%': { transform: 'rotate3d(0, 0, 1, 0deg)' },\n '92%': { transform: 'rotate3d(0, 0, 1, 15deg)' },\n '94%': { transform: 'rotate3d(0, 0, 1, -10deg)' },\n '96%': { transform: 'rotate3d(0, 0, 1, 5deg)' },\n '98%': { transform: 'rotate3d(0, 0, 1, -5deg)' },\n 'to': { transform: 'rotate3d(0, 0, 1, 0deg)' },\n },\n popper: {\n width: 480,\n zIndex: theme.zIndex.modal\n }\n}), { name: 'RaNotificationsButton' });\n\nconst NotificationsButton = (props) => {\n const classes = useStyles();\n const translate = useTranslate();\n const buttonRef = useRef(null)\n const [anchorEl, setAnchorEl] = useState(null)\n const { events, indicator, resetIndicator, hasActive } = useEventContext()\n const { enable, silenced } = useNoticationSoundController()\n const [{ autoOpen }] = useNoticationSettings()\n const hasEvents = (Array.isArray(events) && events.length > 0)\n\n useEffect(() => {\n if (indicator && autoOpen && anchorEl == null) {\n setAnchorEl(buttonRef.current);\n resetIndicator();\n }\n\n }, [indicator, autoOpen, anchorEl])\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n resetIndicator();\n };\n\n const handleClose = (event, reason) => {\n if (reason === \"backdropClick\") return\n setAnchorEl(null);\n };\n\n return (\n <>\n <Tooltip title={translate('ra.action.open_events', { _: 'Open events' })} enterDelay={500} >\n <IconButton\n ref={buttonRef}\n aria-describedby=\"events-menu\"\n onClick={handleClick} >\n <Badge badgeContent={indicator} color=\"error\" overlap=\"rectangular\">\n {hasEvents ?\n silenced ?\n (\n <NotificationsOffIcon color={hasActive ? \"error\" : \"inherit\"} className={classnames({ [classes.swing]: indicator > 0 })} />\n ) : (\n <NotificationsActiveIcon color={hasActive ? \"error\" : \"inherit\"} className={classnames({ [classes.swing]: indicator > 0 })} />\n ) : (\n <NotificationsNoneIcon />\n )}\n </Badge>\n </IconButton>\n </Tooltip>\n <Popper\n id=\"events-menu\"\n anchorEl={anchorEl}\n open={Boolean(anchorEl)}\n placement='bottom-start'\n className={classes.popper}\n >\n <Paper elevation={8}>\n <CardHeader\n action={\n <>\n <NotificationAutoOpenButton />\n <NotificationSettingsButton />\n <NotificationSoundButton />\n <IconButton\n aria-label=\"close\"\n onClick={handleClose}\n >\n <CloseIcon />\n </IconButton>\n </>\n\n }\n title=\"Уведомления\"\n titleTypographyProps={{ variant: \"body1\" }}\n />\n <SubscribtionEventList onClick={handleClose} />\n </Paper>\n </Popper>\n </>\n )\n}\n\n\n\nexport default NotificationsButton","import React, { forwardRef } from 'react';\nimport Link from '@material-ui/core/Link';\nimport { makeStyles } from '@material-ui/core/styles';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport Avatar from '@material-ui/core/Avatar';\nimport ListItemText from '@material-ui/core/ListItemText';\n\n\n\nconst useStyles = makeStyles(theme => ({\n menuItem: {\n minWidth: 256,\n },\n avatar: {\n\n },\n}), { name: \"AppSwitcherButtonMenuItem\" });\n\nconst LinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} underline=\"none\" {...props} />);\n\nconst AppSwitcherButtonMenuItem = forwardRef((props, ref) => {\n const { record } = props\n const { name, url, avatar } = record\n const classes = useStyles();\n return (\n <MenuItem\n component={LinkRef}\n ref={ref}\n href={url}\n target=\"_blank\"\n rel=\"noopener\"\n color=\"inherit\"\n classes={{ root: classes.menuItem }}\n {...props}\n\n >\n <ListItemAvatar>\n <Avatar variant=\"rounded\" alt={name} src={avatar}>\n {name.charAt(0).toUpperCase()}\n </Avatar>\n </ListItemAvatar>\n <ListItemText primary={name} />\n </MenuItem>\n )\n});\n\n\nexport default AppSwitcherButtonMenuItem;\n\n\n","import React from 'react';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport AppsIcon from '@material-ui/icons/Apps';\nimport { APPLICATION_NAME } from '../../appsettings';\nimport AppSwitcherButtonMenuItem from './AppSwitcherButtonMenuItem';\nimport { useTranslate, useGetList } from 'react-admin';\n\n\nconst AnchorOrigin = {\n vertical: 'bottom',\n horizontal: 'center',\n};\n\nconst TransformOrigin = {\n vertical: 'top',\n horizontal: 'center',\n};\n\nconst AppSwitcherButton = (props) => {\n const translate = useTranslate();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const open = Boolean(anchorEl);\n const { data, ids } = useGetList('Application', { page: 1, perPage: 25 }, { field: 'id', order: 'DESC' }, { isSystem: false })\n const applications = ids.filter(id => id !== APPLICATION_NAME).map(id => data[id])\n\n const handleClick = (event) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = (event) => {\n event.stopPropagation();\n setAnchorEl(null);\n };\n\n if (applications.length === 0) return null\n\n return (\n <div>\n <Tooltip title={translate('ra.action.other_applications', { _: 'Other applications' })} enterDelay={700}>\n <IconButton\n color=\"inherit\"\n aria-controls=\"other-applications-menu\"\n aria-haspopup=\"true\"\n onClick={handleClick}\n >\n <AppsIcon />\n </IconButton>\n </Tooltip>\n <Menu\n id=\"other-applications-menu\"\n anchorEl={anchorEl}\n anchorOrigin={AnchorOrigin}\n transformOrigin={TransformOrigin}\n getContentAnchorEl={null}\n open={open}\n onClose={handleClose}\n >\n {applications.map(application =>\n <AppSwitcherButtonMenuItem key={application.id} record={application} />\n )}\n </Menu>\n </div>\n );\n}\n\nexport default AppSwitcherButton;","import { createContext } from 'react';\n\nconst IdentityContext = createContext({\n idetity: null,\n loaded: null,\n loading: null,\n version: null,\n refresh: null,\n});\n\nIdentityContext.displayName = 'IdentityContext';\n\nexport default IdentityContext","import { createContext } from 'react';\n\nconst AccountContext = createContext({\n account: null,\n loaded: null,\n loading: null,\n version: null,\n refresh: null,\n});\n\nAccountContext.displayName = 'AccountContext';\n\nexport default AccountContext","import React, { useMemo } from \"react\";\nimport AccountContext from \"./AccountContext\";\n\n\n\nconst AccountContextProvider = ({ children, ...props }) => {\n const { identity, loaded, loading, version, refresh } = props\n\n const context = useMemo(() => ({\n account: identity?.account,\n loaded,\n loading,\n version,\n refresh,\n }), [identity, loaded, loading, version, refresh]);\n\n\n return (\n <AccountContext.Provider value={context}>\n {children}\n </AccountContext.Provider>\n );\n};\n\n\nexport default AccountContextProvider","import React, { useMemo } from \"react\";\nimport ProfileContext from \"./ProfileContext\";\n\n\n\nconst ProfileContextProvider = ({ children, ...props }) => {\n const { identity, loaded, loading, version, refresh } = props\n\n const context = useMemo(() => ({\n profile: identity?.profile,\n loaded,\n loading,\n version,\n refresh,\n }), [identity, loaded, loading, version, refresh]);\n\n\n return (\n <ProfileContext.Provider value={context}>\n {children}\n </ProfileContext.Provider>\n );\n};\n\n\nexport default ProfileContextProvider","import React, { useMemo, useState } from \"react\";\nimport { useGetIdentity } from 'react-admin';\nimport IdentityContext from \"./IdentityContext\";\nimport AccountContextProvider from \"../account/AccountContextProvider\";\nimport ProfileContextProvider from \"../profile/ProfileContextProvider\";\n\n\nconst IdentityContextProvider = ({ children, versionContext }) => {\n const { identity, loaded, loading } = useGetIdentity()\n const { version, refresh } = versionContext\n\n const context = useMemo(() => ({\n identity,\n loaded,\n loading,\n version,\n refresh,\n }), [identity, loaded, loading, version, refresh]);\n\n\n return (\n <IdentityContext.Provider value={context}>\n <AccountContextProvider {...context}>\n <ProfileContextProvider {...context}>\n {children}\n </ProfileContextProvider>\n </AccountContextProvider>\n </IdentityContext.Provider>\n );\n};\n\n\nconst IdentityContextProviderVersionaly = (props) => {\n\n const [version, setVersion] = useState(0)\n\n const versionContext = useMemo(() => ({\n version,\n refresh: () =>\n setVersion(prev => prev + 1)\n }), [version]);\n\n return (\n <IdentityContextProvider {...props} versionContext={versionContext} key={version} />\n );\n};\n\n\n\nexport default IdentityContextProviderVersionaly","import { useContext } from \"react\";\nimport IdentityContext from \"./IdentityContext\";\n\nconst useIdentity = () => useContext(IdentityContext);\n\nexport default useIdentity","import React from 'react';\nimport ListItem from '@material-ui/core/ListItem';\nimport Avatar from '@material-ui/core/Avatar';\nimport Typography from '@material-ui/core/Typography';\nimport PersonIcon from '@material-ui/icons/Person';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate } from 'react-admin';\nimport useProfile from '../../controller/profile/useProfile';\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n flexDirection: \"column\",\n color: theme.palette.text.secondary,\n },\n avatar: {\n marginBottom: 8\n }\n}), { name: 'UserMenuProfile' });\n\nconst UserMenuProfile = React.forwardRef((props, ref) => {\n const classes = useStyles(props)\n const { profile } = useProfile()\n const translate = useTranslate()\n\n if (!profile) return null\n\n return (\n <ListItem className={classes.root} ref={ref}>\n <Avatar variant=\"rounded\" className={classes.avatar}>\n <PersonIcon titleAccess={translate(\"resources.Profile.me\")} />\n </Avatar>\n <Typography variant=\"body2\" color=\"textPrimary\">{profile.name}</Typography>\n <Typography variant=\"body2\" >{translate(`resources.Profile.enums.role.${profile.role?.id}`)}</Typography>\n </ListItem>\n );\n});\n\n\nexport default UserMenuProfile","import React, { forwardRef, cloneElement, useCallback } from 'react';\nimport classnames from 'classnames';\nimport { NavLink } from 'react-router-dom';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemAvatar from '@material-ui/core/ListItemAvatar';\nimport Avatar from '@material-ui/core/Avatar';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport PersonIcon from '@material-ui/icons/Person';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate } from 'react-admin';\nimport useProfile from '../../controller/profile/useProfile';\n\n\nconst NavLinkRef = forwardRef((props, ref) => (\n <NavLink innerRef={ref} {...props} />\n));\n\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n color: theme.palette.text.secondary,\n },\n active: {\n color: theme.palette.text.primary,\n },\n icon: { minWidth: theme.spacing(5) },\n }),\n { name: 'RaProfileMenuItemLink' }\n);\n\nconst ProfileMenuItemLink = forwardRef((props, ref) => {\n const {\n classes: classesOverride,\n className,\n leftIcon,\n onClick,\n sidebarIsOpen,\n tooltipProps,\n ...rest\n } = props;\n const classes = useStyles(props);\n const { profile } = useProfile();\n const translate = useTranslate()\n const handleMenuTap = useCallback(e => {\n onClick && onClick(e)\n }, [onClick]);\n\n if (!profile) return null\n\n return (\n <MenuItem\n className={classnames(classes.root, className)}\n activeClassName={classes.active}\n component={NavLinkRef}\n ref={ref}\n tabIndex={0}\n to=\"/Profile/me/show\"\n {...rest}\n onClick={handleMenuTap}\n >\n <ListItemIcon className={classes.icon}>\n <PersonIcon titleAccess={translate(\"resources.Profile.me\")} />\n </ListItemIcon>\n {translate(\"resources.Profile.me\")}\n </MenuItem>\n );\n});\n\n\nexport default ProfileMenuItemLink","import React, { forwardRef, useCallback } from 'react';\nimport classnames from 'classnames';\nimport { NavLink } from 'react-router-dom';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport AccountIcon from '@material-ui/icons/AccountCircle';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate } from 'react-admin';\n\n\nconst NavLinkRef = forwardRef((props, ref) => (\n <NavLink innerRef={ref} {...props} />\n));\n\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n color: theme.palette.text.secondary,\n },\n active: {\n color: theme.palette.text.primary,\n },\n icon: {\n color: \"inherit\",\n minWidth: theme.spacing(5)\n },\n }),\n { name: 'AccountMenuItemLink' }\n);\n\nconst AccountMenuItemLink = forwardRef((props, ref) => {\n const {\n classes: classesOverride,\n className,\n onClick,\n ...rest\n } = props;\n const classes = useStyles(props)\n const translate = useTranslate()\n\n const handleMenuTap = useCallback(e => {\n onClick && onClick(e)\n }, [onClick]);\n\n\n return (\n <MenuItem\n className={classnames(classes.root, className)}\n activeClassName={classes.active}\n component={NavLinkRef}\n ref={ref}\n tabIndex={0}\n to=\"/Account/me/show\"\n {...rest}\n onClick={handleMenuTap}\n >\n <ListItemIcon className={classes.icon}>\n <AccountIcon titleAccess={translate(\"resources.Account.me\")} />\n </ListItemIcon>\n {translate(\"resources.Account.me\")}\n </MenuItem>\n );\n});\n\n\nexport default AccountMenuItemLink","class AuthorizationError extends Error {\n constructor(message, extensions) {\n super(message)\n this.name = 'AuthorizationError'\n this.extensions = extensions\n }\n}\n\nconst getErrorMessage = (key, code) => {\n if (key) return `ra.auth.${key}`\n\n const knownCodes = [\"AUTHORIZATION_ERROR\"]\n\n return code\n ? knownCodes.includes(code)\n ? `ra.auth.${code}`\n : \"ra.auth.authorization_error\"\n : \"ra.auth.authorization_error\"\n}\n\n\nconst errorHandler = ({ response }) => {\n const error = response?.errors[0]\n const errorCode = error?.extensions?.code\n const errorTranslateKey = error?.extensions?.translate_key\n const message = getErrorMessage(errorTranslateKey, errorCode)\n const messageArgs = error?.extensions\n throw new AuthorizationError(message, messageArgs);\n}\n\nexport default errorHandler","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\nimport errorHandler from './errorHandler';\n\n\n\nconst AUTHORIZE_MUTATION = gql`\n mutation authorize ($profile: ProfileWhereUniqueInput) {\n data: authorize (profile: $profile) {\n token,\n refreshToken,\n application {\n id\n name\n description\n }\n profile {\n id\n name\n description\n role {\n id\n }\n }\n }\n }\n`;\n\nexport default (args) => {\n return graphqlClient.request(AUTHORIZE_MUTATION, args)\n .then(response => response?.data)\n .catch(errorHandler)\n};\n","import React from 'react';\nimport classnames from 'classnames';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Typography from '@material-ui/core/Typography';\nimport PersonIcon from '@material-ui/icons/Person';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate } from 'react-admin';\nimport { getCookie, setCookie, deleteCookie } from '../../utils';\nimport {\n DOMAIN_COOKIE,\n AUTHORIZATION_TOKEN_COOKIE,\n AUTHORIZATION_REFRESH_TOKEN_COOKIE,\n} from '../../appsettings';\nimport authorize from '../../authProvider/authorizationProvider/authorize';\nimport useProfile from '../../controller/profile/useProfile';\n\n\n\nconst useStyles = makeStyles(theme => ({\n role: {\n marginLeft: 16,\n },\n icon: {\n minWidth: theme.spacing(5)\n },\n}), { name: 'UserMenuOtherProfileMenuItem' });\n\nconst UserMenuOtherProfileMenuItem = (props) => {\n const {\n profile,\n ...rest\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate()\n const { refresh } = useProfile();\n\n const handleClick = () => {\n authorize({ profile: { id: profile.id } })\n .then(authorization => {\n setCookie(AUTHORIZATION_TOKEN_COOKIE, authorization.token, { domain: DOMAIN_COOKIE });\n setCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE, authorization.refreshToken, { domain: DOMAIN_COOKIE });\n refresh()\n\n // return loginUser({\n // input: {\n // name: authorization.profile.name,\n // description: authorization.profile.description,\n // email: authentication.account.email,\n // }\n // })\n })\n .catch(error => {\n deleteCookie(AUTHORIZATION_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n deleteCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n throw error\n })\n }\n\n return (\n <MenuItem\n className={classnames(classes.root)}\n onClick={handleClick}\n tabIndex={0}\n {...rest}\n >\n <ListItemIcon className={classes.icon}>\n <PersonIcon titleAccess={translate(\"resources.Profile.me\")} />\n </ListItemIcon>\n <ListItemText >{profile.name}</ListItemText>\n <Typography className={classes.role} variant=\"body2\" color=\"textSecondary\" >{profile.role.name}</Typography>\n </MenuItem>\n );\n}\n\n\nexport default UserMenuOtherProfileMenuItem","import React from 'react';\nimport { useGetList } from 'react-admin';\nimport { APPLICATION_NAME } from '../../appsettings';\nimport UserMenuOtherProfileMenuItem from './UserMenuOtherProfileMenuItem';\nimport useProfile from '../../controller/profile/useProfile';\n\n\n\nconst UserMenuOtherProfiles = (props) => {\n const { profile } = useProfile();\n const { data, ids } = useGetList(\n 'Profile',\n undefined,\n undefined,\n {\n application: { id: APPLICATION_NAME },\n account: { id: profile?.account?.id }\n },\n {\n enabled: Boolean(profile?.account?.id)\n }\n );\n\n if (!profile) return null\n\n const profiles = ids.filter(id => id !== profile.id && data[id].application.id === profile.application.id).map(id => data[id])\n\n if (profiles.length === 0) return null\n\n return (\n <>\n {profiles.map(profile =>\n <UserMenuOtherProfileMenuItem key={profile.id} profile={profile} />\n )}\n </>\n );\n};\n\nexport default UserMenuOtherProfiles;\n","import React, { forwardRef, useCallback } from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Brightness4Icon from '@material-ui/icons/Brightness4';\nimport Brightness7Icon from '@material-ui/icons/Brightness7';\nimport { useTranslate } from 'react-admin';\nimport { usePreferences } from '@react-admin/ra-preferences';\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n color: theme.palette.text.secondary,\n },\n icon: {\n color: \"inherit\",\n minWidth: theme.spacing(5)\n },\n}), { name: 'ThemeSettingsMenuItem' });\n\nconst ThemeSettingsMenuItem = forwardRef((props, ref) => {\n const {\n classes: classesOverride,\n className,\n onClick,\n ...rest\n } = props;\n const classes = useStyles(props)\n const translate = useTranslate()\n const [theme, setTheme] = usePreferences('theme', 'light');\n\n const handleTogglePaletteType = useCallback(e => {\n setTheme(theme === 'light' ? 'dark' : 'light');\n onClick && onClick(e)\n }, [theme, setTheme, onClick]);\n\n return (\n <MenuItem\n className={classnames(classes.root, className)}\n onClick={handleTogglePaletteType}\n {...rest}\n >\n <ListItemIcon className={classes.icon}>\n {theme === 'light' ? <Brightness4Icon /> : <Brightness7Icon />}\n </ListItemIcon>\n {translate(`${theme === 'light' ? \"ra.settings.theme.light\" : \"ra.settings.theme.dark\"}`)}\n </MenuItem>\n );\n});\n\n\nexport default ThemeSettingsMenuItem","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport AccountCircle from '@material-ui/icons/AccountCircle';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate } from 'ra-core';\nimport { useIdentity } from '../../controller/identity';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport IconButton from '@material-ui/core/IconButton';\nimport Menu from '@material-ui/core/Menu';\nimport Button from '@material-ui/core/Button';\nimport Avatar from '@material-ui/core/Avatar';\nimport Divider from '@material-ui/core/Divider';\nimport ListSubheader from '@material-ui/core/ListSubheader';\nimport UserMenuProfile from './UserMenuProfile';\nimport ProfileMenuItemLink from './ProfileMenuItemLink';\nimport AccountMenuItemLink from './AccountMenuItemLink';\nimport UserMenuOtherProfiles from './UserMenuOtherProfiles';\nimport ThemeSettingsMenuItem from './ThemeSettingsMenuItem';\n\n\n\n\n\nconst defaultIcon = <AccountCircle />;\n\nconst useStyles = makeStyles(\n theme => ({\n user: {},\n userButton: {\n textTransform: 'none',\n },\n avatar: {\n width: theme.spacing(4),\n height: theme.spacing(4),\n },\n }),\n { name: 'RaUserMenu' }\n);\n\nconst AnchorOrigin = {\n vertical: 'bottom',\n horizontal: 'right',\n};\n\nconst TransformOrigin = {\n vertical: 'top',\n horizontal: 'right',\n};\n\nconst UserMenu = (props) => {\n const [anchorEl, setAnchorEl] = useState(null);\n const translate = useTranslate();\n const { identity } = useIdentity();\n const classes = useStyles(props);\n\n const {\n children,\n label = 'ra.auth.user_menu',\n icon = defaultIcon,\n logout,\n } = props;\n\n if (!logout && !children) return null;\n const open = Boolean(anchorEl);\n\n const handleClick = (event) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n return (\n <div className={classes.user}>\n {identity ? (\n <Button\n aria-label={label && translate(label, { _: label })}\n className={classes.userButton}\n color=\"inherit\"\n startIcon={\n identity.avatar ? (\n <Avatar\n className={classes.avatar}\n src={identity.avatar}\n alt={identity.fullName}\n />\n ) : (\n icon\n )\n }\n onClick={handleClick}\n >\n {identity.fullName}\n </Button>\n ) : (\n <Tooltip title={label && translate(label, { _: label })}>\n <IconButton\n aria-label={label && translate(label, { _: label })}\n aria-owns={open ? 'menu-appbar' : null}\n aria-haspopup={true}\n color=\"inherit\"\n onClick={handleClick}\n >\n {icon}\n </IconButton>\n </Tooltip>\n )}\n <Menu\n id=\"menu-appbar\"\n disableScrollLock\n anchorEl={anchorEl}\n anchorOrigin={AnchorOrigin}\n transformOrigin={TransformOrigin}\n keepMounted\n getContentAnchorEl={null}\n open={open}\n onClose={handleClose}\n >\n <UserMenuProfile />\n <ProfileMenuItemLink onClick={handleClose} />\n <UserMenuOtherProfiles />\n <AccountMenuItemLink onClick={handleClose} />\n <ThemeSettingsMenuItem />\n <Divider style={{ marginBottom: 8, marginTop: 8 }} />\n {logout}\n </Menu>\n </div>\n );\n};\n\nUserMenu.propTypes = {\n children: PropTypes.node,\n classes: PropTypes.object,\n label: PropTypes.string,\n logout: PropTypes.element,\n icon: PropTypes.node,\n};\n\nexport default UserMenu;\n","import React, { useState, useEffect } from 'react';\nimport { DateTime } from 'luxon';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport Typography from '@material-ui/core/Typography';\n\n\nconst DigitalClock = () => {\n const [date, setDate] = useState(DateTime.now().setLocale('ru'));\n\n function refreshClock() {\n setDate(DateTime.now().setLocale('ru'));\n }\n useEffect(() => {\n const timerId = setInterval(refreshClock, 1000);\n return function cleanup() {\n clearInterval(timerId);\n };\n }, []);\n return (\n <Tooltip title={date.toLocaleString(DateTime.DATE_HUGE)}>\n <Typography variant=\"h6\" style={{ paddingLeft: 12, paddingRight: 12, paddingTop: 8, paddingBottom: 8 }}>{date.toLocaleString(DateTime.TIME_WITH_SECONDS)}</Typography>\n </Tooltip>\n );\n}\nexport default DigitalClock;","import React from 'react';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { HideOnScroll, LoadingIndicator } from 'react-admin';\nimport ToggleSidebarButton from './ToggleSidebarButton';\nimport NotificationsButton from '../button/NotificationsButton';\nimport AppSwitcherButton from '../button/AppSwitcherButton';\nimport UserMenu from './UserMenu';\nimport { ToggleThemeButton } from '@react-admin/ra-preferences';\nimport DigitalClock from './DigitalClock';\n\n\n\nconst useStyles = makeStyles(theme => ({\n appBar: {\n color: theme.palette.text.secondary,\n backgroundColor: theme.palette.background.appBar,\n boxShadow: \"0px 3px 5px -1px rgba(66, 66, 66, 0.06), 0px 6px 10px 0px rgba(66, 66, 66, 0.042), 0px 1px 18px 0px rgba(66, 66, 66, 0.036)\",\n },\n toolbar: {\n\n },\n title: {\n flex: 1,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n color: theme.palette.text.primary\n },\n}),\n { name: 'RaAppBar' }\n);\n\n\nconst MyAppBar = (props) => {\n const {\n children,\n classes: classesOverride,\n className,\n color = 'secondary',\n logout,\n open,\n title,\n userMenu = true,\n ...rest\n } = props;\n const classes = useStyles();\n\n const isXSmall = useMediaQuery(theme =>\n theme.breakpoints.down('xs')\n );\n\n return (\n <React.Fragment>\n <HideOnScroll>\n <AppBar className={classnames(className, classes.appBar)} color={color} {...rest}>\n <Toolbar variant={isXSmall ? 'regular' : 'dense'} className={classes.toolbar} >\n <ToggleSidebarButton open={open} edge=\"start\" />\n <Typography variant=\"h6\" color=\"inherit\" className={classes.title} id=\"react-admin-title\" />\n <DigitalClock />\n <NotificationsButton />\n <AppSwitcherButton />\n <LoadingIndicator edge=\"end\" />\n <UserMenu logout={logout} />\n </Toolbar>\n </AppBar>\n </HideOnScroll>\n </React.Fragment>\n );\n}\n\nexport default MyAppBar","import React from \"react\";\nimport WebSocketContext from \"./WebSocketContext\";\n// import WebSocketNotification from \"./WebSocketNotification\";\n\n\n\nconst WebSocketContextProvider = ({ children, value }) => {\n return (\n <WebSocketContext.Provider value={value}>\n {children}\n {/* <WebSocketNotification /> */}\n </WebSocketContext.Provider>\n );\n};\n\n\n\n\nexport default WebSocketContextProvider","import { useState, useEffect } from \"react\";\nimport max from \"lodash/max\";\nimport min from \"lodash/min\";\nimport graphqlWsClientDatabus from '../../dataProvider/DatabusService/graphqlWsClient';\nimport graphqlWsClientEventbus from '../../dataProvider/EventbusService/graphqlWsClient';\n\n\n\nconst statusPriority = {\n ERROR: 7,\n DISCONNECTED: 5,\n RECONNECTING: 4,\n CONNECTING: 3,\n RECONNECTED: 2,\n CONNECTED: 1,\n NONE: 0\n}\n\nconst aggregateStatus = (statuses) => {\n let result = 'NONE';\n //console.log(statuses);\n statuses.forEach(s => {\n result = statusPriority[s] > statusPriority[result] ? s : result;\n });\n return result;\n}\n\nconst useWebSocketController = () => {\n\n const [state, setState] = useState({\n status: \"NONE\",\n connecting: null,\n connected: null,\n error: null,\n })\n\n const [eventbusService, setEventbusService] = useState({\n id: \"eventbusService\",\n name: \"Сервис событий\",\n status: \"NONE\",\n connecting: null,\n connected: null,\n error: null\n })\n\n const [databusService, setDatabusService] = useState({\n id: \"databusService\",\n name: \"Сервис данных\",\n status: \"NONE\",\n connecting: null,\n connected: null,\n error: null\n })\n\n useEffect(() => {\n\n graphqlWsClientEventbus.on('connected', () => {\n console.log('graphqlWsClientEventbus connected');\n setEventbusService((prew) => {\n if (prew.status === 'RECONNECTING') {\n return {\n id: \"eventbusService\",\n name: \"Сервис событий\",\n status: \"RECONNECTED\",\n connecting: false,\n connected: true\n }\n } else {\n return {\n id: \"eventbusService\",\n name: \"Сервис событий\",\n status: \"CONNECTED\",\n connecting: false,\n connected: true\n }\n }\n });\n });\n\n graphqlWsClientEventbus.on('connecting', () => {\n console.log('graphqlWsClientEventbus connecting');\n setEventbusService((prew) => {\n if (prew.status === 'ERROR') {\n return {\n id: \"eventbusService\",\n name: \"Сервис событий\",\n status: \"RECONNECTING\",\n connecting: true,\n connected: false\n }\n } else {\n return {\n id: \"eventbusService\",\n name: \"Сервис событий\",\n status: \"CONNECTING\",\n connecting: true,\n connected: false\n }\n }\n });\n });\n\n graphqlWsClientEventbus.on('error', (error) => {\n console.log('graphqlWsClientEventbus error');\n setEventbusService({\n id: \"eventbusService\",\n name: \"Сервис событий\",\n status: \"ERROR\",\n connecting: false,\n connected: false,\n error,\n });\n });\n\n graphqlWsClientEventbus.on('closed', () => {\n console.log('graphqlWsClientEventbus closed');\n });\n\n graphqlWsClientEventbus.on('opened', () => {\n console.log('graphqlWsClientEventbus opened');\n });\n\n }, [setEventbusService]);\n\n\n useEffect(() => {\n\n graphqlWsClientDatabus.on('connected', () => {\n console.log('graphqlWsClientDatabus connected');\n setDatabusService((prew) => {\n if (prew.status === 'RECONNECTING') {\n return {\n id: \"databusService\",\n name: \"Сервис событий\",\n status: \"RECONNECTED\",\n connecting: false,\n connected: true\n }\n } else {\n return {\n id: \"databusService\",\n name: \"Сервис событий\",\n status: \"CONNECTED\",\n connecting: false,\n connected: true\n }\n }\n });\n });\n\n graphqlWsClientDatabus.on('connecting', () => {\n console.log('graphqlWsClientDatabus connecting');\n setDatabusService((prew) => {\n if (prew.status === 'ERROR') {\n return {\n id: \"databusService\",\n name: \"Сервис событий\",\n status: \"RECONNECTING\",\n connecting: true,\n connected: false\n }\n } else {\n return {\n id: \"databusService\",\n name: \"Сервис событий\",\n status: \"CONNECTING\",\n connecting: true,\n connected: false\n }\n }\n });\n });\n\n graphqlWsClientDatabus.on('error', (error) => {\n console.log('graphqlWsClientDatabus error');\n setDatabusService({\n id: \"databusService\",\n name: \"Сервис событий\",\n status: \"ERROR\",\n connecting: false,\n connected: false,\n error,\n });\n });\n\n graphqlWsClientDatabus.on('closed', () => {\n console.log('graphqlWsClientDatabus closed');\n });\n\n graphqlWsClientDatabus.on('opened', () => {\n console.log('graphqlWsClientDatabus opened');\n });\n\n }, [setDatabusService]);\n\n useEffect(() => {\n const status = aggregateStatus([eventbusService.status, databusService.status])\n const connecting = max([eventbusService.connecting, databusService.connecting])\n const connected = min([eventbusService.connected, databusService.connected])\n const errors = [eventbusService.error, databusService.error].filter(Boolean)\n const error = errors.length > 0 ? errors.join(', ') : null\n\n setState({\n status,\n connecting,\n connected,\n error,\n })\n\n }, [setState, eventbusService, databusService]);\n\n\n return {\n ...state,\n services: [eventbusService, databusService]\n }\n};\n\n\n\nexport default useWebSocketController","import React, { useMemo } from \"react\";\nimport EventContext from \"./EventContext\";\n\n\n\nconst EventContextProvider = ({ children, value }) => {\n\n const context = useMemo(() => ({\n ...value,\n }), [value]);\n\n return (\n <EventContext.Provider value={context}>\n {children}\n </EventContext.Provider>\n );\n};\n\nexport default EventContextProvider","import { useCallback, useEffect, useState } from 'react'\nimport set from 'lodash/set';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEqual from 'lodash/isEqual';\nimport isNil from 'lodash/isNil';\nimport getPreferences from '../../dataProvider/PreferencesService/Preferences/getPreferences';\nimport setPreferences from '../../dataProvider/PreferencesService/Preferences/setPreferences';\nimport useProfile from '../profile/useProfile';\n\nlet remoteStorage = {}\n\nconst useRemoteStorageController = () => {\n const { profile } = useProfile()\n\n const [storage, setStorage] = useState(remoteStorage)\n\n useEffect(() => {\n remoteStorage = {}\n }, [profile])\n\n const getItem = useCallback((key, initialValue) => {\n if (!has(remoteStorage, key)) {\n set(remoteStorage, key, initialValue)\n getPreferences({ key })\n .then(({ data }) => {\n if (!isNil(data.payload)) {\n set(remoteStorage, data.key, data.payload)\n setStorage({ ...remoteStorage })\n }\n }).catch(error => {\n console.warn(`Error fetch remoteStorage key “${key}”:`, error)\n })\n }\n\n return get(remoteStorage, key, initialValue)\n }, [setStorage])\n\n const setItem = (key, payload) => {\n set(remoteStorage, key, payload)\n setStorage({ ...remoteStorage })\n setPreferences({ key, payload })\n .then(({ data }) => {\n if (!isEqual(payload, data.payload)) {\n set(remoteStorage, data.key, data.payload)\n setStorage({ ...remoteStorage })\n }\n }).catch(error => {\n console.warn(`Error push remoteStorage key “${key}”:`, error)\n })\n }\n\n return {\n storage,\n getItem,\n setItem,\n }\n}\n\nexport default useRemoteStorageController\n\n\n","import React from \"react\";\nimport RemoteStorageContext from \"./RemoteStorageContext\";\nimport useRemoteStorageController from \"./useRemoteStorageController\";\n\n\nconst RemoteStorageContextProvider = ({ children }) => {\n const context = useRemoteStorageController()\n return (\n <RemoteStorageContext.Provider value={context}>\n {children}\n </RemoteStorageContext.Provider>\n );\n};\n\n\n\nexport default RemoteStorageContextProvider","import React from 'react';\nimport Layout from './LayoutSimple';\nimport AppMenu from './AppMenu';\nimport AppBar from './AppBar';\nimport { IdentityContextProvider } from \"../../controller/identity\";\nimport { useWebSocketController, WebSocketContextProvider } from \"../../controller/webSocket\";\nimport { useEventController, EventContextProvider } from \"../../controller/event\";\nimport { RemoteStorageContextProvider } from \"../../controller/remoteStorage\";\n\n\nconst MyLayout = (props) => {\n return (\n <IdentityContextProvider>\n <WebSocketContextProvider value={useWebSocketController()}>\n <EventContextProvider value={useEventController()}>\n <RemoteStorageContextProvider >\n <Layout {...props} appBar={AppBar} menu={AppMenu} />\n </RemoteStorageContextProvider>\n </EventContextProvider>\n </WebSocketContextProvider>\n </IdentityContextProvider>\n );\n};\n\nexport default MyLayout","import { createTheme } from '@material-ui/core/styles';\nimport { red, pink, purple, deepPurple, indigo, blue, teal, green, amber, orange, grey } from '@material-ui/core/colors';\n\nconst themes = {\n light: createTheme({\n palette: {\n type: \"light\",\n primary: {\n main: '#316FC4',\n contrastText: \"#fff\"\n },\n success: {\n main: green[500],\n light: green[100],\n dark: \"#39593B\",\n },\n background: {\n default: \"#eeeeee\",\n appBar: \"#fafafa\",\n },\n link: {\n main: \"#673ab7\",\n },\n critical: {\n light: red[100],\n main: red[500],\n },\n high: {\n light: orange[100],\n main: orange[500],\n },\n medium: {\n light: purple[100],\n main: purple[500],\n },\n low: {\n light: blue[100],\n main: blue[500],\n },\n none: {\n light: grey[100],\n main: grey[500],\n },\n chartOptions: {\n colors: [blue[600], teal[600], green[600], amber[600], orange[600], pink[600], red[600], purple[600], deepPurple[600], indigo[600]],\n },\n marker: {\n main: blue[700],\n contrastText: \"#fff\"\n }\n },\n shadows: [\n \"none\",\n \"0px 3px 5px -1px rgba(66, 66, 66, 0.06), 0px 6px 10px 0px rgba(66, 66, 66, 0.042), 0px 1px 18px 0px rgba(66, 66, 66, 0.036)\",\n \"0px 3px 1px -2px rgba(66, 66, 66, 0.06),0px 2px 2px 0px rgba(66, 66, 66, 0.042),0px 1px 5px 0px rgba(66, 66, 66, 0.036)\",\n \"0px 3px 3px -2px rgba(0,0,0,0.2),0px 3px 4px 0px rgba(0,0,0,0.14),0px 1px 8px 0px rgba(0,0,0,0.12)\",\n \"0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)\",\n \"0px 3px 5px -1px rgba(0,0,0,0.2),0px 5px 8px 0px rgba(0,0,0,0.14),0px 1px 14px 0px rgba(0,0,0,0.12)\",\n \"0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12)\",\n \"0px 4px 5px -2px rgba(0,0,0,0.2),0px 7px 10px 1px rgba(0,0,0,0.14),0px 2px 16px 1px rgba(0,0,0,0.12)\",\n \"0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12)\",\n \"0px 5px 6px -3px rgba(0,0,0,0.2),0px 9px 12px 1px rgba(0,0,0,0.14),0px 3px 16px 2px rgba(0,0,0,0.12)\",\n \"0px 6px 6px -3px rgba(0,0,0,0.2),0px 10px 14px 1px rgba(0,0,0,0.14),0px 4px 18px 3px rgba(0,0,0,0.12)\",\n \"0px 6px 7px -4px rgba(0,0,0,0.2),0px 11px 15px 1px rgba(0,0,0,0.14),0px 4px 20px 3px rgba(0,0,0,0.12)\",\n \"0px 7px 8px -4px rgba(0,0,0,0.2),0px 12px 17px 2px rgba(0,0,0,0.14),0px 5px 22px 4px rgba(0,0,0,0.12)\",\n \"0px 7px 8px -4px rgba(0,0,0,0.2),0px 13px 19px 2px rgba(0,0,0,0.14),0px 5px 24px 4px rgba(0,0,0,0.12)\",\n \"0px 7px 9px -4px rgba(0,0,0,0.2),0px 14px 21px 2px rgba(0,0,0,0.14),0px 5px 26px 4px rgba(0,0,0,0.12)\",\n \"0px 8px 9px -5px rgba(0,0,0,0.2),0px 15px 22px 2px rgba(0,0,0,0.14),0px 6px 28px 5px rgba(0,0,0,0.12)\",\n \"0px 8px 10px -5px rgba(0,0,0,0.2),0px 16px 24px 2px rgba(0,0,0,0.14),0px 6px 30px 5px rgba(0,0,0,0.12)\",\n \"0px 8px 11px -5px rgba(0,0,0,0.2),0px 17px 26px 2px rgba(0,0,0,0.14),0px 6px 32px 5px rgba(0,0,0,0.12)\",\n \"0px 9px 11px -5px rgba(0,0,0,0.2),0px 18px 28px 2px rgba(0,0,0,0.14),0px 7px 34px 6px rgba(0,0,0,0.12)\",\n \"0px 9px 12px -6px rgba(0,0,0,0.2),0px 19px 29px 2px rgba(0,0,0,0.14),0px 7px 36px 6px rgba(0,0,0,0.12)\",\n \"0px 10px 13px -6px rgba(0,0,0,0.2),0px 20px 31px 3px rgba(0,0,0,0.14),0px 8px 38px 7px rgba(0,0,0,0.12)\",\n \"0px 10px 13px -6px rgba(0,0,0,0.2),0px 21px 33px 3px rgba(0,0,0,0.14),0px 8px 40px 7px rgba(0,0,0,0.12)\",\n \"0px 10px 14px -6px rgba(0,0,0,0.2),0px 22px 35px 3px rgba(0,0,0,0.14),0px 8px 42px 7px rgba(0,0,0,0.12)\",\n \"0px 11px 14px -7px rgba(0,0,0,0.2),0px 23px 36px 3px rgba(0,0,0,0.14),0px 9px 44px 8px rgba(0,0,0,0.12)\",\n \"0px 11px 15px -7px rgba(0,0,0,0.2),0px 24px 38px 3px rgba(0,0,0,0.14),0px 9px 46px 8px rgba(0,0,0,0.12)\",\n ],\n sidebar: {\n width: 260,\n closedWidth: 72,\n },\n menu: {\n width: 240,\n closedWidth: 72,\n },\n overrides: {\n RaLink: {\n link: {\n '&:hover': {\n textDecoration: 'underline',\n },\n }\n },\n MuiFilledInput: {\n root: {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n '&$disabled': {\n backgroundColor: 'rgba(0, 0, 0, 0.04)',\n },\n },\n },\n MuiButtonBase: {\n root: {\n '&:hover:active::after': {\n // recreate a static ripple color\n // use the currentColor to make it work both for outlined and contained buttons\n // but to dim the background without dimming the text,\n // put another element on top with a limited opacity\n content: '\"\"',\n display: 'block',\n width: '100%',\n height: '100%',\n position: 'absolute',\n top: 0,\n right: 0,\n backgroundColor: 'currentColor',\n opacity: 0.3,\n borderRadius: 'inherit',\n },\n },\n },\n MuiAvatar: {\n rounded: {\n borderRadius: 8,\n }\n },\n // MuiPaper: {\n // elevation1: {\n // boxShadow: \"0px 3px 5px -1px rgba(66, 66, 66, 0.06), 0px 6px 10px 0px rgba(66, 66, 66, 0.042), 0px 1px 18px 0px rgba(66, 66, 66, 0.036)\",\n // }\n // },\n MuiTableCell: {\n sizeSmall: {\n padding: '6px 8px',\n '&:first-child': {\n paddingLeft: 16,\n },\n '&:last-child': {\n paddingRight: 16,\n },\n },\n },\n MuiChip: {\n root: {\n margin: 2,\n borderRadius: 8,\n },\n },\n RaChipField: {\n chip: {\n margin: 2,\n borderRadius: 8,\n },\n },\n },\n props: {\n MuiButtonBase: {\n disableRipple: true,\n },\n },\n }),\n dark: createTheme({\n palette: {\n primary: {\n main: '#90caf9',\n contrastText: \"#fff\"\n },\n success: {\n main: green[500],\n light: green[100],\n dark: \"#39593B\",\n },\n secondary: {\n main: '#FBBA72',\n },\n critical: {\n main: red[500],\n dark: \"#6F3632\",\n },\n high: {\n main: orange[500],\n dark: \"#735221\",\n },\n medium: {\n main: purple[500],\n dark: \"#532D59\",\n },\n low: {\n main: blue[500],\n dark: \"#2C516F\",\n },\n none: {\n main: grey[500],\n dark: grey[900],\n },\n chartOptions: {\n colors: [blue[400], teal[400], green[400], amber[400], orange[400], pink[400], red[400], purple[400], deepPurple[400], indigo[400]],\n },\n marker: {\n main: blue[700],\n contrastText: \"#fff\"\n },\n type: 'dark', // Switching the dark mode on is a single property value change.\n },\n sidebar: {\n width: 260,\n closedWidth: 72,\n },\n menu: {\n width: 240,\n closedWidth: 72,\n },\n overrides: {\n RaLink: {\n link: {\n '&:hover': {\n textDecoration: 'underline',\n },\n }\n },\n MuiAppBar: {\n colorSecondary: {\n color: '#ffffffb3',\n backgroundColor: '#616161e6',\n },\n },\n MuiButtonBase: {\n root: {\n '&:hover:active::after': {\n // recreate a static ripple color\n // use the currentColor to make it work both for outlined and contained buttons\n // but to dim the background without dimming the text,\n // put another element on top with a limited opacity\n content: '\"\"',\n display: 'block',\n width: '100%',\n height: '100%',\n position: 'absolute',\n top: 0,\n right: 0,\n backgroundColor: 'currentColor',\n opacity: 0.3,\n borderRadius: 'inherit',\n },\n },\n },\n MuiAvatar: {\n rounded: {\n borderRadius: 8,\n }\n },\n MuiTableCell: {\n sizeSmall: {\n padding: '6px 8px',\n '&:first-child': {\n paddingLeft: 16,\n },\n '&:last-child': {\n paddingRight: 16,\n },\n },\n },\n MuiChip: {\n root: {\n margin: 2,\n borderRadius: 8,\n },\n },\n },\n props: {\n MuiButtonBase: {\n // disable ripple for perf reasons\n disableRipple: true,\n },\n },\n }),\n}\n\nexport const buildThemeFromType = (type) => {\n\n return themes[type]\n}\n\n\n\nexport default themes;","class AuthenticationError extends Error {\n constructor(message, extensions) {\n super(message)\n this.name = 'AuthenticationError'\n this.extensions = extensions\n }\n}\n\n\nconst getErrorMessage = (key, code) => {\n if (key) return `ra.auth.${key}`\n\n const knownCodes = [\"LOGIN_DOES_NOT_EXIST\", \"LOGIN_WITH_PASSWORD_DOES_NOT_EXIST\", \"BANNED\"]\n\n return code\n ? knownCodes.includes(code)\n ? `ra.auth.${code}`\n : \"ra.auth.authentication_error\"\n : \"ra.auth.authentication_error\"\n}\n\n\nconst errorHandler = ({ response }) => {\n const error = response?.errors[0]\n const errorCode = error?.extensions?.code\n const errorTranslateKey = error?.extensions?.translate_key\n const message = getErrorMessage(errorTranslateKey, errorCode)\n const messageArgs = error?.extensions\n throw new AuthenticationError(message, messageArgs);\n}\n\nexport default errorHandler","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\nimport errorHandler from './errorHandler';\n\n\n\nconst LOGIN_MUTATION = gql`\n mutation login($login: String!, $password: String!) {\n data: login(login: $login, password: $password) {\n token,\n refreshToken,\n account {\n id\n login\n email\n phone\n deleted\n banned\n }\n }\n }\n`;\n\nexport default (args) => {\n const { login, password } = args\n return graphqlClient.request(LOGIN_MUTATION, { login, password })\n .then(response => response?.data)\n .catch(errorHandler)\n};\n","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../authorizationProvider/checkToken';\nimport { URI_AUTHORIZATION_SERVICE } from '../../appsettings';\n\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeaders({\n authorization: token ? `Bearer ${token}` : \"\",\n });\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_AUTHORIZATION_SERVICE)\n\n\n\nexport default client","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\n\n\nconst AUTHORIZE_MUTATION = gql`\n mutation unauthorize($profile: ProfileWhereUniqueInput) {\n data: unauthorize (profile: $profile) {\n token\n }\n }\n`;\n\nexport default (args) => {\n return graphqlClient.request(AUTHORIZE_MUTATION, args)\n .then(response => {\n return response?.data\n }) \n};\n\n","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../authorizationProvider/checkToken';\nimport { URI_ABILITY_SERVICE } from '../../appsettings';\n\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeaders({\n authorization: token ? `Bearer ${token}` : \"\",\n });\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_ABILITY_SERVICE)\n\n\n\nexport default client","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\n\n\n\nconst GET_ABILITY = gql`\n query getAbility {\n data: getAbility {\n profile { id }\n application { id }\n role { id }\n rules {\n action\n subject\n fields\n conditions\n inverted\n reason\n }\n }\n }\n`;\n\nexport default (args) => {\n return graphqlClient.request(GET_ABILITY, args).then(response => response?.data)\n};\n","import decodeJwt from 'jwt-decode'\nimport { getCookie, setCookie, deleteCookie, sleep, getCookiesByGroup } from '../utils';\nimport {\n APPLICATION_GROUP,\n DOMAIN_COOKIE,\n AUTHENTICATION_TOKEN_COOKIE,\n AUTHENTICATION_REFRESH_TOKEN_COOKIE,\n AUTHORIZATION_TOKEN_COOKIE,\n AUTHORIZATION_REFRESH_TOKEN_COOKIE,\n\n} from '../appsettings';\nimport login from './authenticationProvider/login';\nimport authorize from './authorizationProvider/authorize';\nimport unauthorize from './unauthorizationProvider/unauthorize';\nimport getAbility from './abilityProvider/getAbility';\nimport permissions from './abilityProvider'\nimport accountDataProvider from '../dataProvider/AuthenticationService/Account'\nimport profileDataProvider from '../dataProvider/AuthorizationService/Profile'\nimport graphqlWsClientDatabus from '../dataProvider/DatabusService/graphqlWsClient';\nimport graphqlWsClientEventbus from '../dataProvider/EventbusService/graphqlWsClient';\nimport authorizationCheckToken from './authorizationProvider/checkToken';\nimport authenticationCheckToken from './authenticationProvider/checkToken';\n\n\n\n\nconst authProvider = {\n login: ({ username, password }) => {\n\n return login({ login: username, password: password })\n .then(authentication => {\n setCookie(AUTHENTICATION_TOKEN_COOKIE, authentication.token, { domain: DOMAIN_COOKIE });\n setCookie(AUTHENTICATION_REFRESH_TOKEN_COOKIE, authentication.refreshToken, { domain: DOMAIN_COOKIE });\n\n return authorize()\n .then(authorization => {\n setCookie(AUTHORIZATION_TOKEN_COOKIE, authorization.token, { domain: DOMAIN_COOKIE });\n setCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE, authorization.refreshToken, { domain: DOMAIN_COOKIE });\n })\n .catch(error => {\n deleteCookie(AUTHORIZATION_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n deleteCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n throw error\n })\n })\n .catch(error => {\n // Не удалять, иначе выйдет из остальных порталов\n deleteCookie(AUTHENTICATION_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n deleteCookie(AUTHENTICATION_REFRESH_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n throw error\n })\n },\n logout: (params) => {\n graphqlWsClientDatabus?.terminate();\n graphqlWsClientEventbus?.terminate();\n\n \n\n unauthorize();\n\n //Удаляем все куки связанные с этим акаунтом\n const nameCookies = getCookiesByGroup(APPLICATION_GROUP);\n for (const name of nameCookies) {\n deleteCookie(name, { domain: DOMAIN_COOKIE });\n }\n \n // // Не удалять, иначе выйдет из остальных порталов\n // deleteCookie(AUTHENTICATION_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n // deleteCookie(AUTHENTICATION_REFRESH_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n // deleteCookie(AUTHORIZATION_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n // deleteCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n return Promise.resolve();\n },\n checkError: (params) => {\n const status = params.status;\n if (status === 401 || status === 403) {\n // Не удалять, иначе выйдет из остальных порталов\n deleteCookie(AUTHENTICATION_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n deleteCookie(AUTHENTICATION_REFRESH_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n deleteCookie(AUTHORIZATION_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n deleteCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n return Promise.reject()\n }\n return Promise.resolve();\n },\n checkAuth: (params) => {\n return authorizationCheckToken()\n .then(token => {\n return token\n })\n .catch(error => {\n return authenticationCheckToken()\n .then(token => {\n return authorize()\n .then(authorization => {\n setCookie(AUTHORIZATION_TOKEN_COOKIE, authorization.token, { domain: DOMAIN_COOKIE });\n setCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE, authorization.refreshToken, { domain: DOMAIN_COOKIE });\n return authorization;\n })\n .catch(error => {\n deleteCookie(AUTHORIZATION_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n deleteCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n throw error;\n })\n })\n .catch(error => {\n throw error\n })\n })\n },\n getPermissions: async (params) => {\n const token = getCookie(AUTHORIZATION_TOKEN_COOKIE);\n\n if (token) {\n return getAbility()\n .then(ability => {\n permissions.update(ability);\n return permissions\n })\n } else {\n return sleep(1000).then(() => {\n\n return getAbility()\n .then(ability => {\n permissions.update(ability);\n return permissions\n })\n })\n }\n },\n getIdentity: async () => {\n\n const token = getCookie(AUTHORIZATION_TOKEN_COOKIE)\n const decodedToken = decodeJwt(token);\n\n const [account, profile] = await Promise.all([\n accountDataProvider.getOne({ id: decodedToken.accountId }),\n profileDataProvider.getOne({ id: decodedToken.profileId }),\n ]);\n\n\n return {\n account: account?.data,\n profile: profile?.data,\n fullName: profile?.data?.name\n }\n }\n};\n\n\n\n\n\nexport default authProvider\n\n","import englishMessages from 'ra-language-english';\nimport { raPreferencesLanguageEnglish } from '@react-admin/ra-preferences';\n\nconst en = {\n ...englishMessages,\n ...raPreferencesLanguageEnglish,\n}\n\nexport default en;","const raPreferencesLanguageRussian = {\n 'ra-preferences': {\n action: {\n choose_columns: 'Выбрать столбцы',\n toggle_theme: 'Переключить тему',\n },\n saved_queries: {\n label: \"Сохраненные запросы\",\n query_name: 'Название',\n new_label: 'Сохранить текущий запрос',\n new_dialog_title: 'Сохранить текущий запрос как...',\n remove_label: 'Удалить сохраненный запрос',\n remove_label_with_name: 'Удалить запрос \"%{name}\"',\n remove_dialog_title: 'Удалить сохраненный запрос?',\n remove_message: 'Вы действительно хотите удалить этот элемент из списка сохраненных запросов?',\n help: 'Отфильтровать список и сохранить этот запрос для дальнейшего использования',\n },\n saved_column_sets: {\n label: \"Сохраненные наборы\",\n column_set_name: 'Название',\n new_label: 'Сохранить текущий набор',\n new_dialog_title: 'Сохранить текущий набор как...',\n remove_label: 'Удалить сохраненный набор',\n remove_label_with_name: 'Удалить набор \"%{name}\"',\n remove_dialog_title: 'Удалить сохраненный набор?',\n remove_message: 'Вы действительно хотите удалить этот элемент из списка сохраненных наборов?',\n help: 'Отфильтровать список и сохранить этот запрос для дальнейшего использования',\n },\n },\n};\n\nexport default raPreferencesLanguageRussian;","const archiveDataLanguageRussian = {\n 'archiveData': {\n name: 'Графики',\n },\n};\n\nexport default archiveDataLanguageRussian;","import russianMessages from 'ra-language-russian'\nimport raPreferencesLanguageRussian from './raPreferencesLanguageRussian'\nimport archiveDataLanguageRussian from './archiveDataLanguageRussian'\n\nconst resourcesLanguageRussian = {\n resources: {\n History: {\n menu: \"История |||| История\",\n name: \"История |||| История\",\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdById: 'Пользователь',\n resourceType: 'Тип Ресурса',\n resourceId: \"ID Ресурса\",\n action: \"Действие\",\n data: \"Текущее состояние\",\n previousData: \"Предыдущее состояние\",\n createdAt_lte: 'Создан по',\n createdAt_gte: 'Создан с',\n },\n enums: {\n action: {\n create: 'Создание',\n update: 'Обновление',\n remove: 'Удаление',\n restore: 'Восстановление',\n delete: 'Удаление навсегда',\n authorize: 'Вход',\n unauthorize: 'Выход',\n write: 'Запись значения'\n },\n resourceType: {\n Asset: 'Объект',\n AssetClass: 'Шаблон объекта',\n Dashboard: 'Панель',\n Widget: 'Виджет',\n Profile: 'Профиль',\n Application: 'Приложение'\n }\n },\n empty: 'Истории отсутствуют',\n invite: 'Вы хотите создать?',\n },\n Label: {\n menu: \"Метка |||| Метки\",\n name: \"Метка |||| Метки\",\n declension: 'Метку |||| Метки |||| Меток',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n deleted: 'Удален',\n typename: \"Тип\",\n color: \"Цвет\",\n isSystem: \"Системная\",\n resources: \"Ресурсы\",\n },\n enums: {\n typename: {\n Asset: 'Объект',\n AssetClass: 'Шаблон объекта',\n Dashboard: 'Панель',\n File: 'Файл',\n },\n resources: {\n Asset: 'Объекты',\n AssetClass: 'Шаблоны объектов',\n Dashboard: 'Панели',\n File: 'Файлы',\n },\n },\n empty: 'Метки отсутствуют',\n },\n Dashboard: {\n name: 'Панель |||| Панели',\n menu: 'Панель |||| Панели',\n declension: 'Панель |||| Панели |||| Панелей',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n deleted: 'Удален',\n project: 'Проект',\n teams: 'Команды',\n widgetsOnDashboard: 'Виджеты на панели',\n widget: 'Виджет',\n assets: 'Объекты',\n assetClasses: 'Шаблоны',\n variables: 'Переменные',\n links: 'Ссылки',\n dateFrom: 'Дата с',\n dateTo: 'Дата по',\n online: 'Онлайн',\n favorite: 'Избранное',\n labels: 'Метки',\n labelsAndIds: 'Метки (И)',\n labelsNotAndIds: 'Метки (И НЕ)',\n },\n variables: {\n assetId: 'Объект',\n parameterId: 'Параметр',\n range: 'Интервал',\n },\n links: {\n type: 'Тип',\n name: 'Наименование',\n url: 'URL',\n dashboard: 'Панель',\n },\n enums: {\n linkType: {\n DASHBOARD: 'Панель',\n INTERNAL: 'Внутренняя',\n EXTERNAL: 'Внешняя',\n },\n },\n empty: 'Панели отсутствуют',\n invite: 'Вы хотите создать?',\n },\n Widget: {\n name: 'Виджет |||| Виджеты',\n menu: 'Виджет |||| Виджеты',\n declension: 'Виджет |||| Виджета |||| Виджетов',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n deleted: 'Удален',\n url: 'URL',\n meta: 'Метаданные',\n defaultProperties: 'Свойства по умолчанию',\n defaultGrid: 'Свойства элемента сетки по умолчанию',\n },\n properties: {\n tag: {\n _: \"Тег\",\n id: 'ID',\n value: 'Значение',\n type: 'Тип данных',\n },\n writeValue: \"Значение\",\n trueValue: \"Значение ИСТИНА\",\n falseValue: \"Значение ЛОЖЬ\",\n label: \"Метка\",\n trueLabel: \"Метка ИСТИНА\",\n falseLabel: \"Метка ЛОЖЬ\",\n valveControl: {\n title: 'Управление крановым узлом',\n step: {\n connect: {\n action: 'Подключить',\n title: 'Подключение к серверу опроса',\n content: 'Выполните подключение объекта к серверу опроса',\n\n },\n password: {\n action: 'Отправить',\n title: 'Получение доступа',\n content: 'Введите пароль доступа к управлению и отправьте его для проверки',\n },\n command: {\n action: 'Выполнить',\n complete: 'Завершить',\n title: 'Выполнение команды',\n content: 'Состояние крана: %{state}. Выберите команду для управления',\n },\n },\n state: {\n 0: 'Авария',\n 1: 'Закрыт',\n 2: 'Открыт',\n 3: 'Промежуточное',\n },\n command: {\n 1: 'Открыть',\n 2: 'Закрыть',\n 3: 'Остановить',\n 4: 'Провести обслуживание',\n 5: 'Диагностировать',\n },\n },\n parameter: {\n _: \"Параметр\",\n type: \"Тип параметра\",\n unit: \"Ед. изм. параметра\",\n meta: \"Мета параметра\",\n }\n },\n empty: 'Виджеты отсутствуют',\n invite: 'Вы хотите создать?',\n },\n Report: {\n name: 'Отчет |||| Отчеты',\n menu: 'Отчет |||| Отчеты',\n declension: 'Отчет |||| Отчета |||| Отчетов',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n deleted: 'Удален',\n url: 'URL',\n meta: 'Метаданные',\n type: 'Тип отчета',\n hasTemplate: 'Шаблон',\n assetsIds: 'Объекты',\n data: 'Разметка',\n defaultProperties: 'Свойства по умолчанию',\n defaultGrid: 'Свойства элемента сетки по умолчанию',\n },\n empty: 'Отчеты отсутствуют',\n invite: 'Вы хотите создать?',\n },\n WidgetOnDashboard: {\n name: 'Виджет на панели |||| Виджеты на панели',\n menu: 'Виджет на панели |||| Виджеты на панели',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n dashboard: 'Панель',\n url: 'URL',\n meta: 'Метаданные',\n widget: 'Виджет',\n properties: 'Свойства',\n grid: 'Свойства элемента сетки',\n },\n properties: {\n value: {\n id: 'Id тега шины данных',\n value: 'Значение',\n unit: 'Ед. изм.',\n label: 'Метка',\n },\n writeValue: {\n id: 'Id тега шины данных на запись',\n },\n max: {\n id: 'или Id тега шины данных',\n value: 'Максимум',\n },\n min: {\n id: 'или Id тега шины данных',\n value: 'Минимум',\n },\n thresholds: {\n name: \"Уставки\",\n id: 'или Id тега шины данных',\n value: 'Значение',\n color: 'Цвет',\n },\n numberFormatOptions: {\n minimumIntegerDigits: \"Минимальное количество цифр целой части числа\",\n minimumFractionDigits: 'Минимальное количество цифр дробной части числа',\n maximumFractionDigits: 'Максимальное количество цифр дробной части числа',\n },\n size: 'Оригинальный размер',\n startAngle: 'Начальный угол',\n endAngle: 'Конечный угол',\n strokeLinecap: 'Вид точки завершения',\n showThresholdsLabels: 'Показывать метки уставок',\n showThresholdsMarkers: 'Показывать сектора уставок',\n url: {\n id: 'или Id тега шины данных',\n value: 'URL',\n },\n urlThumbnail: {\n id: 'или Id тега шины данных',\n value: 'URL миниатюра',\n },\n title: 'Название',\n type: 'Тип',\n },\n empty: 'Виджеты на панели отсутствуют',\n invite: 'Вы хотите создать?',\n },\n Asset: {\n name: 'Объект |||| Объекты',\n menu: 'Объект |||| Объекты',\n declension: 'Объект |||| Объекта |||| Объектов',\n choice: 'Объект',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n deleted: 'Удален',\n type: 'Тип',\n assetClass: 'Шаблон',\n dashboards: 'Панели',\n defaultDashboard: 'Панель по умолчанию',\n icon: 'Иконка',\n parametersOnMap: 'Параметры на карте',\n address: 'Адрес',\n labels: 'Метки',\n labelsAndIds: 'Метки (И)',\n labelsNotAndIds: 'Метки (И НЕ)',\n files: 'Файлы',\n events: 'События',\n favorite: 'Избранное',\n tree: 'Дерево тегов',\n },\n enums: {\n status: {\n ACTIVE: 'Активен',\n SERVICE: 'Сервис',\n DISABLE: 'Отключен',\n },\n door: {\n true: 'Открыта',\n false: 'Закрыта',\n },\n iff: {\n true: 'Свой',\n false: 'Чужой',\n },\n },\n empty: 'Объекты отсутствуют',\n invite: 'Вы хотите создать?',\n },\n AssetType: {\n name: 'Тип объекта |||| Типы объекта',\n menu: 'Тип объекта |||| Типы объекта',\n declension: 'Тип объекта |||| Типа объекта |||| Типов объектов',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n assets: 'Объекты',\n classes: 'Шаблоны объекта',\n },\n empty: 'Типы объектов отсутствуют',\n invite: 'Вы хотите создать?',\n },\n AssetClass: {\n name: 'Шаблон объекта |||| Шаблоны объекта',\n menu: 'Шаблон объекта |||| Шаблоны объекта',\n declension: 'Шаблон объекта |||| Шаблона объекта |||| Шаблонов объектов',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n deleted: 'Удален',\n relatedAssets: 'Связанные объекты',\n type: 'Тип',\n assets: 'Объекты',\n dashboards: 'Панели',\n defaultDashboard: 'Панель по умолчанию',\n favorite: 'Избранное',\n icon: 'Иконка',\n parametersOnMap: 'Параметры на карте',\n labels: 'Метки',\n labelsAndIds: 'Метки (И)',\n labelsNotAndIds: 'Метки (И НЕ)',\n },\n empty: 'Шаблоны объектов отсутствуют',\n invite: 'Вы хотите создать?',\n },\n AssetDatagrid: {\n name: 'Таблица объектов |||| Таблица',\n menu: 'Таблица объектов |||| Таблица',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n type: 'Тип',\n assetClass: 'Шаблон',\n labels: 'Метки',\n events: 'События',\n },\n enums: {\n quality: {\n good: 'Хорошее',\n bad: 'Плохое',\n },\n subscriptionTrigger: {\n eventbusService: 'Шина событий |||| ШС',\n databusService: 'Шина данных |||| ШД',\n },\n poolInterval: {\n off: 'Отключен |||| Отключен',\n '5s': '5 секунд |||| 5сек',\n '10s': '10 секунд |||| 10сек',\n '30s': '30 секунд |||| 30сек',\n '1m': '1 минута |||| 1мин',\n '5m': '5 минут |||| 5мин',\n '10m': '10 минут |||| 10мин',\n '30m': '30 минут |||| 30мин',\n '1h': '1 час |||| 1час',\n }\n },\n empty: 'Параметры объектов отсутствуют',\n invite: 'Вы хотите создать?',\n },\n AssetMap: {\n name: 'Карта |||| Карта',\n menu: 'Карта |||| Карта',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n type: 'Тип',\n assetClass: 'Шаблон',\n labels: 'Метки',\n },\n },\n AssetTree: {\n name: 'Каталог объектов |||| Каталог объектов',\n menu: 'Каталог |||| Каталог',\n },\n Parameter: {\n name: 'Параметр |||| Параметры',\n menu: 'Параметр |||| Параметры',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n display: \"Отображать как\",\n role: \"Роль\",\n type: \"Тип\",\n unit: \"Ед. изм.\",\n accessLevel: \"Доступ\",\n meta: \"Мета\",\n },\n enums: {\n id: {\n ALARM: \"Аварийный\",\n ACK: \"Подтвержденный\",\n },\n role: {\n value: \"Значение\",\n max: \"Максимум\",\n hihi: \"!ВАУ\",\n hihiSet: \"ВАУ\",\n hi: \"!ВПУ\",\n hiSet: \"ВПУ\",\n lo: \"!НПУ\",\n loSet: \"НПУ\",\n lolo: \"!НАУ\",\n loloSet: \"НАУ\",\n min: \"Минимум\",\n DIAGNOSTIC: \"Диагностика\",\n UNKNOWN: \"Неизвестно\",\n },\n access: {\n READABLE: \"Чтение\",\n WRITABLE: \"Запись\",\n HISTORIZABLE: \"История\",\n }\n }\n },\n Event: {\n name: 'Текущее событие |||| Текущие события',\n menu: 'Текущие |||| Текущие',\n fields: {\n id: 'ID',\n message: {\n title: 'Тема',\n body: 'Сообщение',\n },\n type: 'Тип',\n resource: 'Объект',\n tag: 'Параметр',\n comment: 'Комментарий',\n severity: 'Важность',\n priority: 'Приоритет',\n priority_gte: 'Приоритет с',\n priority_lte: 'Приоритет по',\n active: 'Активна',\n ack: 'Подтверждена',\n state: 'Состояние',\n ackRequired: 'Требуется подтверждение',\n utcOffset: 'Смещение',\n userId: 'ID Пользователя',\n timestamp: 'Дата',\n timestampSrv: 'Дата (серв.)',\n asset: \"Объект\",\n parameter: \"Параметр\",\n profile: 'Пользователь',\n timestamp_gte: 'Дата с',\n timestamp_lte: 'Дата по',\n timestampSrv_gte: 'Дата (серв.) с',\n timestampSrv_lte: 'Дата (серв.) по',\n assetLabels: \"Метки объекта\",\n assetLabelsAndIds: \"Метки объекта (И)\",\n assetLabelsNotAndIds: \"Метки объекта (И НЕ)\",\n },\n enums: {\n severity: {\n 0: 'Нет',\n 1: 'Низкая',\n 2: 'Средняя',\n 3: 'Высокая',\n 4: 'Критическая',\n },\n severityType: {\n 0: 'Нет',\n 1: 'Низкие',\n 2: 'Средние',\n 3: 'Важные',\n 4: 'Критические',\n },\n type: {\n Unknown: 'Неизвестный',\n HiHi: 'ВАУ',\n Hi: 'ВПУ',\n Lo: 'НПУ',\n LoLo: 'НАУ',\n Rate: 'Rate',\n DevP: 'DevP',\n DevM: 'DevM',\n Info: 'Инфо',\n System: 'Система',\n Security: 'Доступ',\n Report: 'Отчет',\n },\n active: {\n true: \"Активна\",\n false: \"Не активна\"\n },\n ack: {\n true: \"Подтверждена\",\n false: \"Не подтверждена\",\n none: \"Не требуется\",\n }\n },\n empty: 'Текущие события отсутствуют',\n invite: 'Новые события появятся здесь',\n },\n EventHistory: {\n name: 'История события |||| История событий',\n menu: 'История |||| История',\n fields: {\n id: 'ID',\n message: {\n title: 'Тема',\n body: 'Сообщение',\n },\n type: 'Тип',\n resource: 'Объект',\n tag: 'Параметр',\n comment: 'Комментарий',\n severity: 'Важность',\n priority: 'Приоритет',\n priority_gte: 'Приоритет с',\n priority_lte: 'Приоритет по',\n active: 'Активна',\n ack: 'Подтверждена',\n state: 'Состояние',\n ackRequired: 'Требуется подтверждение',\n utcOffset: 'Смещение',\n userId: 'ID Пользователя',\n timestamp: 'Дата',\n timestampSrv: 'Дата (серв.)',\n asset: \"Объект\",\n parameter: \"Параметр\",\n profile: 'Пользователь',\n timestamp_gte: 'Дата с',\n timestamp_lte: 'Дата по',\n timestampSrv_gte: 'Дата (серв.) с',\n timestampSrv_lte: 'Дата (серв.) по',\n },\n enums: {\n severity: {\n 0: 'Нет',\n 1: 'Низкая',\n 2: 'Средняя',\n 3: 'Высокая',\n 4: 'Критическая',\n },\n type: {\n Unknown: 'Неизвестный',\n HiHi: 'ВАУ',\n Hi: 'ВПУ',\n Lo: 'НПУ',\n LoLo: 'НАУ',\n Rate: 'Rate',\n DevP: 'DevP',\n DevM: 'DevM',\n Info: 'Инфо',\n System: 'Система',\n Security: 'Доступ',\n Report: 'Отчет',\n },\n active: {\n true: \"Активна\",\n false: \"Не активна\"\n },\n ack: {\n true: \"Подтверждена\",\n false: \"Не подтверждена\",\n none: \"Не требуется\",\n }\n },\n empty: 'История событий отсутствуют',\n },\n Account: {\n name: 'Аккаунт |||| Аккаунты',\n menu: 'Аккаунт |||| Аккаунты',\n fields: {\n id: 'ID',\n name: 'Наименование',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n login: 'Логин',\n email: 'Email',\n phone: 'Телефон',\n banned: 'Блокировка',\n password: 'Пароль',\n confirmPassword: 'Повторите пароль',\n },\n enums: {\n banned: {\n BANNED: 'Заблокирован',\n UNBANNED: 'Разблокирован',\n }\n },\n me: 'Мой аккаунт',\n empty: 'Аккаунты отсутствуют',\n invite: 'Вы хотите создать?',\n },\n Profile: {\n name: 'Профиль |||| Профили',\n menu: 'Профиль |||| Профили',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n role: 'Роль',\n application: 'Приложение',\n account: 'Аккаунт',\n isDefault: 'Профиль по умолчанию',\n preferences: {\n Main: {\n defaultDashboard: \"Панель на главной странице\"\n }\n }\n },\n enums: {\n role: {\n ADMIN: 'Администратор',\n DISPATCHER: 'Диспетчер',\n ENGINEER: 'Инженер',\n GUEST: 'Гость',\n SUPERADMIN: 'Суперадмин',\n },\n isDefault: {\n ISDEFAULT: 'Профиль по умолчанию',\n }\n },\n me: 'Мой профиль',\n empty: 'Профили отсутствуют',\n invite: 'Вы хотите создать?',\n },\n Rule: {\n name: 'Правило доступа |||| Правила доступа',\n menu: 'Правило |||| Правила',\n fields: {\n id: 'ID',\n type: 'Тип',\n role: 'Роль',\n profile: 'Профиль',\n application: 'Приложение',\n order: '#',\n action: 'Действия',\n subject: 'Ресурсы',\n conditions: 'Условия',\n fields: 'Поля',\n inverted: 'Направление',\n reason: 'Причина',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n },\n enums: {\n type: {\n RBAC: 'Ролевое',\n ABAC: 'Пользовательское',\n },\n inverted: {\n DEFAULT: 'Прямое',\n INVERTED: 'Обратное',\n }\n },\n empty: 'Правила доступа отсутствуют',\n invite: 'Вы хотите создать?',\n },\n File: {\n name: 'Файл |||| Файлы',\n menu: 'Файл |||| Файлы',\n declension: 'Файл |||| Файла |||| Файлов',\n fields: {\n id: 'ID',\n name: 'Наименование',\n description: 'Описание',\n createdAt: 'Создан',\n createdBy: 'Создал',\n updatedAt: 'Обновлен',\n blobId: 'ID Blob',\n url: 'URL адрес',\n urlThumbnail: 'URL адрес миниатюра',\n size: 'Размер',\n type: 'Тип',\n resources: \"Ресурсы\",\n _resourcesIdsTypename: \"Ресурс\",\n labels: 'Метки',\n labelsAndIds: 'Метки (И)',\n labelsNotAndIds: 'Метки (И НЕ)',\n },\n enums: {\n view: {\n TABLE: 'Таблица',\n TILE: 'Плитки',\n },\n typename: {\n Asset: 'Объекты',\n },\n },\n empty: 'Файлы отсутствуют'\n },\n Tag: {\n name: 'Тег данных |||| Теги данных',\n menu: 'Тег |||| Теги',\n fields: {\n id: 'ID',\n name: 'Наименование',\n quality: 'Качество',\n timestamp: 'Метка времени',\n timestampSrv: 'Метка времени (серв)',\n type: 'Тип данных',\n utcOffset: 'Смещение относительно UTC',\n value: 'Значение',\n writeValue: 'Значение на запись',\n asset: \"Объект\",\n assets: \"Объекты\",\n parameter: \"Параметр\",\n parameters: \"Параметры\",\n },\n enums: {\n quality: {\n GOOD: \"Хорошее\",\n TEST: \"Тест\",\n BAD: \"Плохое\",\n }\n },\n empty: 'Теги отсутствуют'\n },\n TagSeries: {\n name: 'График |||| Графики',\n menu: 'График |||| Графики',\n emptyfilter: 'Для просмотра данных выберите теги и укажите период',\n invitefilter: '',\n empty: 'Исторические данные отсутствуют',\n invite: 'Используйте другие параметры',\n\n }\n },\n}\n\nconst widgetsLanguageRussian = {\n widgets: {\n properties: {\n value: \"Значение\",\n min: \"Минимум\",\n max: \"Максимум\",\n thresholds: \"Уставки\",\n size: \"Оригинальный размер\",\n startAngle: \"Начальный угол\",\n endAngle: \"Конечный угол\",\n strokeLinecap: \"Вид границы\",\n showThresholdsLabels: \"Отображать метки\",\n showThresholdsMarkers: \"Отображать сектора\",\n numberFormatOptions: \"Форматирование чисел\",\n },\n value: {\n id: \"ID тега\",\n value: \"Значение\",\n unit: \"Ед. изм.\",\n color: \"Цвет\",\n },\n numberFormatOptions: {\n style: \"Стиль форматирования\",\n currency: \"Валюта\",\n currencyDisplay: \"Валюта отобразить\",\n useGrouping: \"Использовать группы\",\n minimumIntegerDigits: \"Мин. кол-во цифр целой части числа\",\n minimumFractionDigits: \"Мин. кол-во цифр дробной числа\",\n maximumFractionDigits: \"Макс. кол-во цифр дробной числа\",\n minimumSignificantDigits: \"Мин. кол-во значащих цифр числа\",\n maximumSignificantDigits: \"Макс. кол-во значащих цифр числа\",\n },\n },\n\n}\n\nconst raLanguageRussian = {\n ra: {\n action: {\n ...russianMessages.ra.action,\n bulk_actions: \"%{smart_count} выбран |||| %{smart_count} выбрано |||| %{smart_count} выбрано\",\n save_and_continue: 'Сохранить и продолжить',\n create_item: 'Создать %{item}',\n create_widget: 'Создать виджет',\n play: \"Просмотр\",\n play_in_new_window: \"Просмотр в новом окне\",\n preview: \"Предварительный просмотр\",\n open_events: 'Открыть события',\n open_help: 'Открыть справку',\n remove: 'Удалить',\n remove_content: \"Вы уверены что хотите удалить %{name}?\",\n remove_title: \"Удалить %{name} #%{id}\",\n bulk_remove_title: \"Удалить %{smart_count} %{declension}\",\n bulk_remove_content: \"Вы уверены что хотите удалить %{smart_count} %{declension}?\",\n restore: 'Восстановить',\n save_and_deploy: 'Сохранить и опубликовать',\n deploy: 'Опубликовать',\n synchronize: 'Синхронизировать',\n delete: 'Удалить навсегда',\n acknowledge: 'Подтвердить',\n acknowledge_all: 'Подтвердить все',\n call: \"Вызвать\",\n call_all: \"Вызвать все\",\n check_all: \"Выбрать все\",\n command_execute: \"Выполнить\",\n change_view: \"Сменить вид %{view}\",\n apply: \"Применить\",\n more: \"Дополнительно\",\n write: \"Записать\",\n other_applications: \"Приложения\",\n change_layout: \"Редактировать макет\",\n set_refresh: \"Настроить обновление\",\n show: \"Свойства\",\n show_in_new_window: \"Свойства в новом окне\",\n request: \"Запрос\",\n favorite: \"Избранное\",\n upload: \"Загрузить\",\n cancel: \"Отмена\",\n choose_columns: \"Cтолбцы\",\n choose_preset: \"Предустановки\",\n open: \"Открыть\",\n open_with: \"Открыть с помощью %{app}\",\n edit_with: \"Редактировать с помощью %{app}\",\n list_of_deleted: \"Список удаленных\",\n xlsx_export: \"Экспорт XLSX\",\n json_export: \"Экспорт JSON\",\n import: \"Импорт\",\n xlsx_import: \"Импорт XLSX\",\n json_import: \"Импорт JSON\",\n json_copy: \"Копировать JSON\",\n more_count: \"...Ещё %{count}\",\n hide: \"Скрыть\",\n revert: 'Восстановить',\n\n },\n boolean: {\n ...russianMessages.ra.boolean,\n null: ' ',\n },\n page: {\n ...russianMessages.ra.page,\n import: \"Импортировать %{name}\",\n play: \"%{name} #%{id}\",\n about: \"О приложении\",\n releases: \"Что нового?\",\n information: \"Информация\"\n },\n input: {\n ...russianMessages.ra.input,\n deleted: \"Удаленные\",\n url: {\n text: \"Ссылка\"\n },\n markdown: {\n placeholder: \"Введите текст...\",\n },\n import: {\n onConflict: {\n name: \"Действие при конфликте\",\n DONOTHING: \"Пропустить элемент\",\n DOUPDATE: \"Обновить элемент\",\n },\n confirm: {\n name: \"Я подтверждаю правильность импортируемых данных\",\n }\n },\n favorited: \"Избранные\",\n notification_settings: {\n sound: \"Звук\",\n repeat: \"Повтор\",\n silencePeriod: \"Не беспокоить\"\n }\n },\n message: {\n ...russianMessages.ra.message,\n widget_on_dashboard_loading: 'Загрузка компонента виджета',\n widget_on_dashboard_not_found: 'Компонент виджета недействителен или отсутствует',\n data_loading: 'Загрузка данных',\n data_not_found: 'Данные недействительны или отсутствуют',\n data_error: 'Ошибка получения данных',\n properties_error: 'Свойства виджета недействительны или отсутствуют',\n acknowledgement: 'Подтверждение события',\n acknowledge_dialog: 'Оставьте комментарий, чтобы другие пользователи лучше понимали Ваши действия',\n deploy_title: 'Публикация Шаблона объекта %{name}',\n deploy_content: 'Публикация приведет к полному копированию полей Шаблона объекта в аналогичные поля связанных Объектов.',\n deploy_question: 'Вы уверены, что хотите опубликовать Шаблон объекта %{name}?',\n save_and_deploy_title: 'Сохрание и публикация Шаблона объекта %{name}',\n save_and_deploy_content: 'Сохрание и публикация приведет к полному копированию полей Шаблона объекта в аналогичные поля связанных Объектов.',\n save_and_deploy_question: 'Вы уверены, что хотите сохранить и опубликовать Шаблон объекта %{name}?',\n synchronize_title: 'Синхронизация Объекта %{assetName} с Шаблоном объекта %{assetClassName}',\n synchronize_content: 'Синхронизация приведет к полному копированию полей Шаблона объекта в аналогичные поля Объекта.',\n synchronize_question: 'Вы уверены, что хотите синхронизировать Объект %{assetName} с Шаблоном объекта %{assetClassName}?',\n upload_title: 'Загрузка файлов',\n upload_counter: 'Загружено %{uploaded} из %{total}',\n write_tag_title: 'Запись значения',\n write_tag_content: 'Запись значения тега %{tag}',\n write_tag_question: 'Вы уверены, что хотите записать для параметра (%{parameter}) объекта (%{asset}) установленное значение?',\n dialog_field_title: 'Просмотр значения',\n dialog_field_content: 'Просмотр значения тега %{tag}',\n\n read_tag_history_title: 'История',\n read_tag_history_content: 'История тега %{tag}',\n change_layout: \"Редактирование макета\",\n import_title: 'Импорт %{resource}',\n import_content: 'Импорт %{smart_count} элемента из %{fileName} в %{resource} |||| Импорт %{smart_count} элементов из %{fileName} в %{resource} |||| Импорт %{smart_count} элементов из %{fileName} в %{resource}',\n import_conflict: '%{resource} содержат %{smart_count} элемент с конфликтующим ID |||| %{resource} содержат %{smart_count} элемента с конфликтующими ID |||| %{resource} содержат %{smart_count} элементов с конфликтующими ID',\n notification_settings_title: 'Уведомления и звуки',\n notification_settings_content: 'Настройки будут сохранены в локальном хранилище браузера',\n },\n navigation: {\n ...russianMessages.ra.navigation,\n user_apps: \"Приложения\",\n },\n auth: {\n ...russianMessages.ra.auth,\n LOGIN_DOES_NOT_EXIST: 'Ошибка аутентификации. Аккаунт с таким логином не существует',\n LOGIN_WITH_PASSWORD_DOES_NOT_EXIST: 'Ошибка аутентификации. Аккаунт с таким логином и паролем не существует. Осталось попыток %{countAttempt}',\n BANNED: 'Ошибка аутентификации. Аккаунт заблокирован. Обратитесь к администратору',\n authentication_error: 'Ошибка аутентификации, проверьте консоль',\n AUTHORIZATION_ERROR: 'Ошибка авторизации, проверьте консоль',\n authorization_error: 'Ошибка авторизации, проверьте консоль',\n default_profile_not_found: 'Ошибка авторизации. Профиль по умолчанию недействителен или отсутствует',\n profile_not_found: 'Ошибка авторизации. Профиль недействителен или отсутствует',\n permissions_error: 'Нет доступа',\n expired: 'Время Вашего сеанса истекло. Пожалуйста, войдите в систему еще раз.',\n existed: 'Был произведен выход из аккаунта. Пожалуйста, войдите в систему еще раз.',\n },\n notification: {\n ...russianMessages.ra.notification,\n removed: \"Элемент удален в архив |||| %{smart_count} элемента удалено в архив |||| %{smart_count} элементов удалено в архив\",\n restored: \"Элемент восстановлен из архива |||| %{smart_count} элемента восстановлено из архива |||| %{smart_count} элементов восстановлено из архива\",\n deleted: 'Элемент удален навсегда |||| %{smart_count} элемента удалено навсегда |||| %{smart_count} элементов удалено навсегда',\n uploaded: 'Файл создан |||| %{smart_count} файла создано |||| %{smart_count} файлов создано',\n acknowledged: \"Событие подтверждено |||| %{smart_count} события подтверждено |||| %{smart_count} событий подтверждено\",\n called: \"Вызов отправлен |||| %{smart_count} вызова отправлено |||| %{smart_count} вызовов отправлено\",\n cut_item: 'Элемент вырезан',\n paste_item: 'Элемент вставлен',\n value_is_written: \"Значение записано |||| %{smart_count} значения записано |||| %{smart_count} значений записано\",\n command_executed: \"Команда выполнена\",\n asset_added_to_context: \"%{name} добавлен в контекст\",\n web_socket_reconecting: \"Подписки переподключаются...\",\n web_socket_reconected: \"Подписки переподключены\",\n web_socket_error: \"Подписки недоступны. Дождитесь автоматического переподключения или обновите страницу\",\n deploed: \"Элемент опубликован |||| %{smart_count} опубликовано |||| %{smart_count} опубликовано\",\n synchronized: \"Элемент синхронизирован |||| %{smart_count} синхронизировано |||| %{smart_count} синхронизировано\",\n updated_and_deploed: \"Элемент обновлен и опубликован |||| %{smart_count} обновлено и опубликовано |||| %{smart_count} обновлено и опубликовано\",\n created_and_deploed: \"Элемент создан и опубликован\",\n not_equal_from_assetClass: \"Значение не совпадает со значением Шаблона объекта\",\n imported: \"Элемент импортирован |||| %{smart_count} элемента импортировано |||| %{smart_count} элементов импортировано\",\n import_data_error: \"Данные не соответствуют модели\",\n favorited: \"Добавлено в избранное\",\n unfavorited: \"Удалено из избранного\",\n sound_off: \"Звук отключен на %{silencePeriod}\",\n sound_on: \"Звук включен\",\n json_copied: \"JSON скопирован\",\n },\n sort: {\n sort_by: 'Сортировать по %{field} %{order}',\n ASC: 'По возрастанию',\n DESC: 'По убыванию',\n },\n validation: {\n ...russianMessages.ra.validation,\n unique: \"Значение %{value} уже используется\",\n jsonParse: \"Некорректный JSON\",\n assetsByVariables: \"Обязательно, если Переменные содержат Объект\",\n },\n units: {\n bytes: 'байт',\n KB: 'КБ',\n MB: 'МБ',\n GB: 'ГБ',\n TB: 'ТБ',\n PB: 'ПБ',\n EB: 'ЭБ',\n ZB: 'ЗБ',\n YB: 'ЙБ'\n },\n settings: {\n title: \"Настройки\",\n notification_and_sound: \"Уведомления и звуки\",\n sound: {\n on: \"Отключить звук\",\n off: \"Включить звук\",\n },\n theme: {\n light: \"Tема cветлая\",\n dark: \"Tема темная\",\n },\n autoOpen: \"Открывать автоматически\",\n },\n preset: {\n label: \"Представления\",\n save_label: \"Сохранить текущее представление\",\n save_dialog: {\n title: \"Сохранить представление\",\n content_text: \"Сохрание текущие значения фильтра, сортировки, количества на странице, а так же выбранные колонки и их порядок расположения в представлении списка\",\n fields: {\n name: \"Наименование\"\n }\n },\n },\n error: {\n GRAPHQL_PARSE_FAILED: \"Запрос содержит синтаксическую ошибку\",\n GRAPHQL_VALIDATION_FAILED: \"Запрос недопустим для схемы сервера\",\n BAD_USER_INPUT: \"Запрос включает недопустимое значение пользовательского ввода\",\n OPERATION_RESOLUTION_FAILURE: \"Запрос был успешно проанализирован и соответствует схеме сервера, но серверу не удалось решить, какую операцию выполнять\",\n BAD_REQUEST: \"Произошла ошибка, прежде чем ваш сервер смог выполнить запрос\",\n INTERNAL_SERVER_ERROR: \"Сервер вернул неизвестную ошибку, проверьте консоль\",\n }\n },\n}\n\nconst ru = {\n ...resourcesLanguageRussian,\n ...raLanguageRussian,\n ...raPreferencesLanguageRussian,\n ...archiveDataLanguageRussian,\n ...widgetsLanguageRussian\n}\n\nexport default ru","import polyglotI18nProvider from 'ra-i18n-polyglot';\nimport englishMessages from './en';\nimport russianMessages from './ru'\n\n\n\nconst messages = {\n en: englishMessages,\n ru: russianMessages,\n};\n\nconst i18nProvider = polyglotI18nProvider(locale => messages[locale], 'ru');\n\nexport default i18nProvider","import i18nProvider from \"./i18nProvider\"\n\nexport default i18nProvider","import React from 'react';\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport red from '@material-ui/core/colors/red';\nimport green from '@material-ui/core/colors/green';\nimport Chip from '@material-ui/core/Chip';\nimport { sanitizeFieldRestProps } from 'react-admin';\nimport { useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { isNull } from '../../utils';\n\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n UNBANNED: {\n backgroundColor: green[100],\n color: theme.palette.success.dark,\n },\n BANNED: {\n backgroundColor: red[100],\n color: theme.palette.error.dark,\n },\n}), { name: \"AccountBannedChip\" });\n\n\nconst AccountBannedChip = ({ className, resource, source, record, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles(record);\n const banned = get(record, source);\n if (isNull(banned)) return null\n\n const enumValue = banned ? \"BANNED\" : \"UNBANNED\"\n const label = translate(`resources.${resource}.enums.${source}.${enumValue}`);\n\n return (\n <Chip\n className={classnames(className, classes[enumValue])}\n size=\"small\"\n label={label}\n {...sanitizeFieldRestProps(props)}\n />\n )\n};\n\nAccountBannedChip.defaultProps = {\n addLabel: true,\n};\n\nexport default AccountBannedChip;","import { useContext } from \"react\";\nimport AccountContext from \"./AccountContext\";\n\nconst useAccount = () => useContext(AccountContext);\n\nexport default useAccount","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ContentCreate from '@material-ui/icons/Create';\nimport { Link } from 'react-router-dom';\nimport { Button } from 'react-admin';\n\nconst EditButton = ({\n label = 'ra.action.edit',\n icon = defaultIcon,\n ...rest\n}) => (\n <Button\n component={Link}\n to={`/Account/me`}\n label={label}\n onClick={stopPropagation}\n {...rest}\n >\n {icon}\n </Button>\n);\n\nconst defaultIcon = <ContentCreate />;\n\n// useful to prevent click bubbling in a datagrid with rowClick\nconst stopPropagation = e => e.stopPropagation();\n\nEditButton.propTypes = {\n icon: PropTypes.element,\n label: PropTypes.string,\n};\n\nexport default EditButton;\n","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useTranslate, useShowContext } from 'react-admin';\nimport DashboardBreadcrumbItem from '../../lib/breadcrumbs/DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from '../../lib/breadcrumbs/ListBreadcrumbItem';\nimport BreadcrumbItem from '../../lib/breadcrumbs/BreadcrumbItem';\n\n\n\nconst AccountMeShowBreadcrumbs = (props) => {\n const translate = useTranslate();\n const contextProps = useShowContext();\n return (\n <Breadcrumbs aria-label=\"breadcrumb\">\n <DashboardBreadcrumbItem {...contextProps} />\n <ListBreadcrumbItem {...contextProps} />\n <BreadcrumbItem>{translate(\"resources.Account.me\")}</BreadcrumbItem>\n </Breadcrumbs>\n );\n};\n\nexport default AccountMeShowBreadcrumbs\n","import React from \"react\";\nimport { TopToolbar, TextField, DateField, EmailField } from 'react-admin';\nimport Show from '../../lib/show/Show';\nimport SimpleShowLayout from '../../lib/show/SimpleShowLayout';\nimport AccountBannedChip from './AccountBannedChip';\nimport PhoneNumberField from '../../lib/field/PhoneNumberField';\nimport useAccount from '../../controller/account/useAccount';\nimport { dateTimeOptions } from '../../utils';\nimport AccountMeEditButton from './AccountMeEditButton';\nimport AccountMeBreadcrumbs from './AccountMeShowBreadcrumbs';\n\n\n\nconst AccountShowActions = ({ basePath, data, hasEdit }) => (\n <TopToolbar>\n {hasEdit && <AccountMeEditButton basePath={basePath} record={data} />}\n </TopToolbar>\n);\n\n\nexport const AccountShow = (props) => {\n const { account } = useAccount();\n if (!account) return null\n\n return (\n <Show\n {...props}\n actions={<AccountShowActions />}\n basePath=\"/Account\"\n resource=\"Account\"\n id={account.id}\n breadcrumbs={<AccountMeBreadcrumbs />}\n title=\"resources.Account.me\"\n hasEdit\n >\n <SimpleShowLayout>\n <TextField source=\"name\" />\n <TextField source=\"login\" />\n <EmailField source=\"email\" />\n <PhoneNumberField source=\"phone\" />\n <AccountBannedChip source=\"banned\" />\n <DateField source=\"createdAt\" options={dateTimeOptions} />\n <DateField source=\"updatedAt\" options={dateTimeOptions} />\n </SimpleShowLayout>\n </Show>\n )\n};\n\n\n\nexport default AccountShow;","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useTranslate, useEditContext } from 'react-admin';\nimport DashboardBreadcrumbItem from '../../lib/breadcrumbs/DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from '../../lib/breadcrumbs/ListBreadcrumbItem';\nimport BreadcrumbItem from '../../lib/breadcrumbs/BreadcrumbItem';\n\n\n\nconst AccountMeEditBreadcrumbs = (props) => {\n const translate = useTranslate();\n const contextProps = useEditContext();\n return (\n <Breadcrumbs aria-label=\"breadcrumb\">\n <DashboardBreadcrumbItem {...contextProps} />\n <ListBreadcrumbItem {...contextProps} />\n <BreadcrumbItem to={`/Account/me/show`}>{translate(\"resources.Account.me\")}</BreadcrumbItem>\n <BreadcrumbItem>{translate(\"ra.action.edit\")}</BreadcrumbItem>\n </Breadcrumbs>\n );\n};\n\nexport default AccountMeEditBreadcrumbs\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImageEye from '@material-ui/icons/RemoveRedEye';\nimport { Link } from 'react-router-dom';\nimport { Button } from 'react-admin';\n\nconst ShowButton = ({\n label = 'ra.action.show',\n icon = defaultIcon,\n ...rest\n}) => (\n <Button\n component={Link}\n to={`/Account/me/show`}\n label={label}\n onClick={stopPropagation}\n {...rest}\n >\n {icon}\n </Button>\n);\n\nconst defaultIcon = <ImageEye />;\n\n// useful to prevent click bubbling in a datagrid with rowClick\nconst stopPropagation = e => e.stopPropagation();\n\nShowButton.propTypes = {\n icon: PropTypes.element,\n label: PropTypes.string,\n};\n\nexport default ShowButton;\n","import React, { useCallback } from 'react';\nimport { useForm } from 'react-final-form';\nimport { TextInput } from 'react-admin';\n\n\n\nconst AccountEmailInput = (props) => {\n const form = useForm();\n\n const handleChange = useCallback(event => {\n const value = event.target.value\n form.change(\"login\", value)\n }, []);\n\n return (\n <TextInput {...props} onChange={handleChange} />\n );\n}\n\n\nexport default AccountEmailInput;","import React, { useCallback } from \"react\";\nimport { SimpleForm, TextInput, PasswordInput, TopToolbar, Toolbar, SaveButton } from 'react-admin';\nimport { useNotify, useRedirect } from 'react-admin';\nimport { required, email, regex, maxLength } from 'react-admin';\nimport Edit from '../../lib/edit/Edit';\nimport AccountMeEditBreadcrumbs from './AccountMeEditBreadcrumbs';\nimport AccountMeShowButton from './AccountMeShowButton';\nimport AccountEmailInput from './AccountEmailInput';\nimport useAccount from '../../controller/account/useAccount';\nimport { phone, password, passwordConfirmed } from '../../lib/form/validate';\n\n\n\nconst validateLogin = [regex(/[a-zA-Z0-9_]{0,25}$/), required()];\nconst validateName = [required(), maxLength(128)];\nconst validateEmail = [email(), required()];\nconst validatePhone = [phone()];\nconst validatePassword = [password(), passwordConfirmed(\"confirmPassword\")];\n\nconst AccountEditActions = ({ basePath, data, hasShow }) => (\n <TopToolbar>\n {hasShow && <AccountMeShowButton basePath={basePath} record={data} />}\n </TopToolbar>\n);\n\nconst AccountEditToolbar = props => (\n <Toolbar {...props} >\n <SaveButton disabled={props.pristine} />\n </Toolbar>\n);\n\nexport const AccountEdit = (props) => {\n const { account, refresh } = useAccount();\n const notify = useNotify();\n const redirect = useRedirect();\n const onSuccess = useCallback(() => {\n refresh();\n notify('ra.notification.updated', 'info', { smart_count: 1 }, true);\n redirect('/Account/me/show')\n }, [refresh, notify, redirect]);\n\n if (!account) return null\n\n return (\n <Edit\n {...sanitizeAccountProps(props)}\n actions={<AccountEditActions />}\n id={account.id}\n resource=\"Account\"\n basePath=\"/Account\"\n breadcrumbs={<AccountMeEditBreadcrumbs />}\n onSuccess={onSuccess}\n title=\"resources.Account.me\"\n undoable={false}\n hasShow\n\n >\n <SimpleForm\n redirect=\"/Account/me/show\"\n toolbar={<AccountEditToolbar />}\n >\n <TextInput source=\"name\" validate={validateName} />\n <AccountEmailInput source=\"email\" validate={validateEmail} />\n <TextInput source=\"phone\" validate={validatePhone} />\n <TextInput source=\"login\" validate={validateLogin} />\n <PasswordInput source=\"password\" validate={validatePassword} inputProps={{ autoComplete: 'new-password' }} />\n <PasswordInput source=\"confirmPassword\" />\n </SimpleForm>\n </Edit>\n )\n};\n\n\nconst sanitizeAccountProps = ({\n basePath,\n resource,\n ...props }) => props\n\nexport default AccountEdit;","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useTranslate, useEditContext } from 'react-admin';\nimport DashboardBreadcrumbItem from '../../lib/breadcrumbs/DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from '../../lib/breadcrumbs/ListBreadcrumbItem';\nimport BreadcrumbItem from '../../lib/breadcrumbs/BreadcrumbItem';\n\n\n\nconst ProfileMeEditBreadcrumbs = (props) => {\n const translate = useTranslate();\n const contextProps = useEditContext();\n return (\n <Breadcrumbs aria-label=\"breadcrumb\">\n <DashboardBreadcrumbItem {...contextProps} />\n <ListBreadcrumbItem {...contextProps} />\n <BreadcrumbItem to={`/Profile/me/show`}>{translate(\"resources.Profile.me\")}</BreadcrumbItem>\n <BreadcrumbItem>{translate(\"ra.action.edit\")}</BreadcrumbItem>\n </Breadcrumbs>\n );\n};\n\nexport default ProfileMeEditBreadcrumbs\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ImageEye from '@material-ui/icons/RemoveRedEye';\nimport { Link } from 'react-router-dom';\nimport { Button } from 'react-admin';\n\nconst ShowButton = ({\n label = 'ra.action.show',\n icon = defaultIcon,\n ...rest\n}) => (\n <Button\n component={Link}\n to={`/Profile/me/show`}\n label={label}\n onClick={stopPropagation}\n {...rest}\n >\n {icon}\n </Button>\n);\n\nconst defaultIcon = <ImageEye />;\n\n// useful to prevent click bubbling in a datagrid with rowClick\nconst stopPropagation = e => e.stopPropagation();\n\nShowButton.propTypes = {\n icon: PropTypes.element,\n label: PropTypes.string,\n};\n\nexport default ShowButton;\n","import React, { useCallback } from \"react\";\nimport { SimpleForm, TextInput, TopToolbar, Toolbar, SaveButton, ReferenceInput, AutocompleteInput } from 'react-admin';\nimport { useNotify, useRedirect } from 'react-admin';\nimport { required, maxLength } from 'react-admin';\nimport Edit from '../../lib/edit/Edit';\nimport ProfileMeEditBreadcrumbs from './ProfileMeEditBreadcrumbs';\nimport ProfileMeShowButton from './ProfileMeShowButton';\nimport useProfile from '../../controller/profile/useProfile';\nimport BooleanInput from '../../lib/input/BooleanInput';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\n\n\n\nconst validateName = [required(), maxLength(128)];\n\nconst ProfileEditActions = ({ basePath, data, hasShow }) => (\n <TopToolbar>\n {hasShow && <ProfileMeShowButton basePath={basePath} record={data} />}\n </TopToolbar>\n);\n\nconst ProfileEditToolbar = props => (\n <Toolbar {...props} >\n <SaveButton disabled={props.pristine} />\n </Toolbar>\n);\n\nexport const ProfileEdit = (props) => {\n const { profile, refresh } = useProfile();\n const notify = useNotify();\n const redirect = useRedirect();\n const onSuccess = useCallback(() => {\n refresh();\n notify('ra.notification.updated', 'info', { smart_count: 1 }, true);\n redirect('/Profile/me/show')\n }, [refresh, notify, redirect]);\n\n if (!profile) return null\n\n return (\n <Edit\n {...sanitizeProfileProps(props)}\n actions={<ProfileEditActions />}\n id={profile.id}\n resource=\"Profile\"\n basePath=\"/Profile\"\n breadcrumbs={<ProfileMeEditBreadcrumbs />}\n onSuccess={onSuccess}\n title=\"resources.Profile.me\"\n undoable={false}\n hasShow\n >\n <SimpleForm\n redirect=\"/Profile/me/show\"\n toolbar={<ProfileEditToolbar />}\n >\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n <BooleanInput source=\"isDefault\" initialValue={false} />\n <ReferenceInput source=\"preferences.Main.defaultDashboard.id\" reference=\"Dashboard\" label=\"resources.Profile.fields.preferences.Main.defaultDashboard\" allowEmpty emptyText=\"ra.boolean.false\" >\n <AutocompleteInput matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n </SimpleForm>\n </Edit>\n )\n};\n\n\nconst sanitizeProfileProps = ({\n basePath,\n resource,\n ...props }) => props\n\nexport default ProfileEdit;","import React, { Fragment } from 'react';\nimport get from 'lodash/get';\nimport deepPurple from '@material-ui/core/colors/deepPurple';\nimport Chip from '@material-ui/core/Chip';\nimport { useRecordContext, sanitizeFieldRestProps, useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { isNull } from '../../utils';\n\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundColor: deepPurple[100],\n color: deepPurple[700],\n },\n}), { name: \"RuleActionField\" });\n\n\nconst RuleActionField = (props) => {\n const { className, source, emptyText } = props;\n const classes = useStyles(record);\n const translate = useTranslate();\n const record = useRecordContext(props);\n const value = get(record, source);\n if (isNull(value)) return null\n\n return (\n <Fragment>\n {value.map((item, index) => {\n\n return (<Chip\n key={index}\n className={classes.root}\n size=\"small\"\n label={item}\n\n />)\n })}\n </Fragment>\n\n )\n};\n\nRuleActionField.defaultProps = {\n addLabel: true,\n};\n\nexport default RuleActionField;","import React, { Fragment } from 'react';\nimport get from 'lodash/get';\nimport blue from '@material-ui/core/colors/blue';\nimport Chip from '@material-ui/core/Chip';\nimport { useRecordContext, sanitizeFieldRestProps, useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { isNull } from '../../utils';\n\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundColor: blue[100],\n color: blue[800],\n },\n}), { name: \"RuleSubjectField\" });\n\n\nconst RuleSubjectField = (props) => {\n const { className, source, emptyText } = props;\n const classes = useStyles(record);\n const translate = useTranslate();\n const record = useRecordContext(props);\n const value = get(record, source);\n if (isNull(value)) return null\n\n return (\n <Fragment>\n {value.map((item, index) => {\n\n return (<Chip\n key={index}\n className={classes.root}\n size=\"small\"\n label={item}\n\n />)\n })}\n </Fragment>\n\n )\n};\n\nRuleSubjectField.defaultProps = {\n addLabel: true,\n};\n\nexport default RuleSubjectField;","import React, { Fragment } from 'react';\nimport get from 'lodash/get';\nimport orange from '@material-ui/core/colors/orange';\nimport Chip from '@material-ui/core/Chip';\nimport { useRecordContext, sanitizeFieldRestProps, useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { isNull } from '../../utils';\n\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundColor: orange[100],\n color: orange[900],\n },\n}), { name: \"RuleFieldsField\" });\n\n\nconst RuleFieldsField = (props) => {\n const { className, source, emptyText } = props;\n const classes = useStyles(record);\n const translate = useTranslate();\n const record = useRecordContext(props);\n const value = get(record, source);\n if (isNull(value)) return null\n\n return (\n <Fragment>\n {value.map((item, index) => {\n\n return (<Chip\n key={index}\n className={classes.root}\n size=\"small\"\n label={item}\n\n />)\n })}\n </Fragment>\n\n )\n};\n\nRuleFieldsField.defaultProps = {\n addLabel: true,\n};\n\nexport default RuleFieldsField;","import React from 'react';\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport red from '@material-ui/core/colors/red';\nimport green from '@material-ui/core/colors/green';\nimport Chip from '@material-ui/core/Chip';\nimport { sanitizeFieldRestProps } from 'react-admin';\nimport { useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { isNull } from '../../utils';\n\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n DEFAULT: {\n backgroundColor: green[100],\n color: theme.palette.success.dark,\n },\n INVERTED: {\n backgroundColor: red[100],\n color: theme.palette.error.dark,\n },\n}), { name: \"RuleInvertedChip\" });\n\n\nconst RuleInvertedChip = ({ className, resource, source, record, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles(record);\n const inverted = get(record, source);\n if (isNull(inverted)) return null\n\n const enumValue = inverted ? \"INVERTED\" : \"DEFAULT\"\n const label = translate(`resources.${resource}.enums.${source}.${enumValue}`);\n\n return (\n <Chip\n className={classnames(className, classes[enumValue])}\n size=\"small\"\n label={label}\n {...sanitizeFieldRestProps(props)}\n />\n )\n};\n\nRuleInvertedChip.defaultProps = {\n addLabel: true,\n};\n\nexport default RuleInvertedChip;","import React from \"react\";\nimport { Datagrid, TextField, DateField } from 'react-admin';\nimport EnumField from '../../lib/field/EnumField';\nimport RuleActionField from './RuleActionField';\nimport RuleSubjectField from './RuleSubjectField';\nimport RuleFieldsField from './RuleFieldsField';\nimport RuleInvertedChip from './RuleInvertedChip';\nimport useListStyles from '../../lib/list/useListStyles';\n\n\nexport const RuleReferenceDatagrid = (props) => {\n const classes = useListStyles();\n\n return (\n <Datagrid {...props}>\n <EnumField source=\"type\" />\n <RuleActionField source=\"action\" sortable={false} cellClassName={classes.cellAction} />\n <RuleSubjectField source=\"subject\" sortable={false} cellClassName={classes.cellAction} />\n <RuleFieldsField source=\"fields\" sortable={false} cellClassName={classes.cellAction} />\n <TextField source=\"conditions\" sortable={false} />\n <TextField source=\"reason\" sortable={false} />\n <RuleInvertedChip source=\"inverted\" sortable={false} cellClassName={classes.cellAction} />\n <TextField source=\"order\" sortable={false} />\n <DateField source=\"createdAt\" cellClassName={classes.cellMinWidth} />\n <DateField source=\"updatedAt\" cellClassName={classes.cellMinWidth} />\n </Datagrid>\n )\n};","import React from 'react';\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport red from '@material-ui/core/colors/red';\nimport green from '@material-ui/core/colors/green';\nimport Chip from '@material-ui/core/Chip';\nimport { sanitizeFieldRestProps } from 'react-admin';\nimport { useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { isNull } from '../../utils';\n\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundColor: green[100],\n color: theme.palette.success.dark,\n },\n}), { name: \"ProfileIsDefaultChip\" });\n\n\nconst ProfileIsDefaultChip = ({ className, resource, source, record, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles(record);\n const isDefault = get(record, source);\n if (isNull(isDefault)) return null\n if (!isDefault) return null\n\n const label = translate(`resources.${resource}.enums.${source}.ISDEFAULT`);\n\n return (\n <Chip\n className={classnames(className, classes.root)}\n size=\"small\"\n label={label}\n {...sanitizeFieldRestProps(props)}\n />\n )\n};\n\nProfileIsDefaultChip.defaultProps = {\n addLabel: true,\n};\n\nexport default ProfileIsDefaultChip;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ContentCreate from '@material-ui/icons/Create';\nimport { Link } from 'react-router-dom';\nimport { Button } from 'react-admin';\n\nconst EditButton = ({\n label = 'ra.action.edit',\n icon = defaultIcon,\n ...rest\n}) => (\n <Button\n component={Link}\n to={`/Profile/me`}\n label={label}\n onClick={stopPropagation}\n {...rest}\n >\n {icon}\n </Button>\n);\n\nconst defaultIcon = <ContentCreate />;\n\n// useful to prevent click bubbling in a datagrid with rowClick\nconst stopPropagation = e => e.stopPropagation();\n\nEditButton.propTypes = {\n icon: PropTypes.element,\n label: PropTypes.string,\n};\n\nexport default EditButton;\n","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useTranslate, useShowContext } from 'react-admin';\nimport DashboardBreadcrumbItem from '../../lib/breadcrumbs/DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from '../../lib/breadcrumbs/ListBreadcrumbItem';\nimport BreadcrumbItem from '../../lib/breadcrumbs/BreadcrumbItem';\n\n\n\nconst ProfileMeShowBreadcrumbs = (props) => {\n const translate = useTranslate();\n const contextProps = useShowContext();\n return (\n <Breadcrumbs aria-label=\"breadcrumb\">\n <DashboardBreadcrumbItem {...contextProps} />\n <ListBreadcrumbItem {...contextProps} />\n <BreadcrumbItem>{translate(\"resources.Profile.me\")}</BreadcrumbItem>\n </Breadcrumbs>\n );\n};\n\nexport default ProfileMeShowBreadcrumbs\n","import React from \"react\";\nimport { TopToolbar, TextField, DateField, ReferenceField } from 'react-admin';\nimport Show from '../../lib/show/Show';\nimport SimpleShowLayout from '../../lib/show/SimpleShowLayout';\nimport BlankShowLayout from '../../lib/show/BlankShowLayout';\nimport ListField from '../../lib/field/ListField';\nimport { RuleReferenceDatagrid } from '../Rule/RuleDatagrid';\nimport EnumField from '../../lib/field/EnumField';\nimport NestedField from '../../lib/field/NestedField';\nimport ProfileIsDefaultChip from './ProfileIsDefaultChip';\nimport useProfile from '../../controller/profile/useProfile';\nimport { dateTimeOptions } from '../../utils';\nimport ProfileMeEditButton from './ProfileMeEditButton';\nimport ProfileMeBreadcrumbs from './ProfileMeShowBreadcrumbs';\n\n\n\nconst ProfileShowActions = ({ basePath, data, hasEdit }) => (\n <TopToolbar>\n {hasEdit && <ProfileMeEditButton basePath={basePath} record={data} />}\n </TopToolbar>\n);\n\nconst linkToAccountMe = (record, reference) => \"/Account/me/show\"\nconst linkToDashboard = (record, reference) => `/${reference}/${record?.preferences?.Main?.defaultDashboard?.id}/play`\n\n\n\nexport const ProfileShow = (props) => {\n const { profile } = useProfile()\n\n if (!profile) return null\n\n return (\n <Show\n {...props}\n actions={<ProfileShowActions />}\n basePath=\"/Profile\"\n resource=\"Profile\"\n id={profile.id}\n breadcrumbs={<ProfileMeBreadcrumbs />}\n title=\"resources.Profile.me\"\n hasEdit\n >\n <SimpleShowLayout>\n <ReferenceField source=\"account.id\" reference=\"Account\" link={linkToAccountMe} label=\"resources.Profile.fields.account\">\n <TextField source=\"name\" />\n </ReferenceField>\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <TextField source=\"role.name\" label=\"resources.Profile.fields.role\" />\n <NestedField source=\"application\" reference=\"Application\" link={false}>\n <TextField source=\"name\" />\n </NestedField>\n <ProfileIsDefaultChip source=\"isDefault\" />\n <DateField source=\"createdAt\" options={dateTimeOptions} />\n <DateField source=\"updatedAt\" options={dateTimeOptions} />\n </SimpleShowLayout>\n <SimpleShowLayout label=\"Предпочтения\">\n <ReferenceField source=\"preferences.Main.defaultDashboard.id\" reference=\"Dashboard\" label=\"resources.Profile.fields.preferences.Main.defaultDashboard\" link={linkToDashboard}>\n <TextField source=\"name\" />\n </ReferenceField>\n </SimpleShowLayout>\n <BlankShowLayout label=\"Правила доступа\">\n <ListField\n actions={false}\n resource=\"Rule\"\n basePath=\"/Rule\"\n filter={{\n OR: [\n {\n role: { id: profile.role?.id },\n application: { id: profile.application.id },\n },\n {\n profile: { id: profile.id }\n }\n ],\n\n }}\n sort={{ field: 'application.id', order: 'ASC' }}\n perPage={5}\n >\n <RuleReferenceDatagrid />\n </ListField>\n </BlankShowLayout>\n </Show>\n )\n};\n\n\n\nexport default ProfileShow;","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useShowContext } from 'react-admin';\nimport DashboardBreadcrumbItem from '../../lib/breadcrumbs/DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from '../../lib/breadcrumbs/ListBreadcrumbItem';\nimport RecordBreadcrumbItem from '../../lib/breadcrumbs/RecordBreadcrumbItem';\n\n\n\n\n\nconst WidgetOnDashboardShowBreadcrumbs = (props) => {\n const contextProps = useShowContext();\n const dashboard = contextProps.record?.dashboard\n\n return (\n <Breadcrumbs aria-label=\"breadcrumb\">\n <DashboardBreadcrumbItem {...contextProps} />\n <ListBreadcrumbItem basePath=\"/Dashboard\" resource=\"Dashboard\" />\n <RecordBreadcrumbItem basePath=\"/Dashboard\" record={dashboard} />\n <RecordBreadcrumbItem {...contextProps} {...props} />\n </Breadcrumbs>\n );\n};\n\nexport default WidgetOnDashboardShowBreadcrumbs\n","import React from \"react\";\nimport { TextField, DateField, EditButton, TopToolbar } from 'react-admin';\nimport Show from '../../lib/show/Show';\nimport SimpleShowLayout from '../../lib/show/SimpleShowLayout';\nimport TitleForRecord from '../../lib/layout/TitleForRecord';\nimport CloneButton from '../../lib/button/CloneButton';\nimport NestedField from '../../lib/field/NestedField';\nimport WidgetOnDashboardShowBreadcrumbs from './WidgetOnDashboardShowBreadcrumbs';\nimport permissions from \"../../authProvider/abilityProvider\";\n\n\n\nconst dashboardLink = (record) => `/Dashboard/${record.id}/show`\nconst widgetLink = (record) => `/Widget/${record.id}/show`\n\nconst WidgetOnDashboardShowActions = ({ data, resource, hasEdit, hasCreate }) => {\n const basePath = `/Dashboard/${data?.dashboard?.id}/${resource}`\n return (\n <TopToolbar>\n {permissions.can('update', \"Dashboard\") && permissions.can('create', \"WidgetOnDashboard\") && permissions.can('getMany', \"Widget\") && permissions.can('getList', \"Widget\") && <CloneButton basePath={basePath} record={data} />}\n {permissions.can('update', \"Dashboard\") && permissions.can('update', \"WidgetOnDashboard\") && permissions.can('getMany', \"Widget\") && <EditButton basePath={basePath} record={data} />}\n </TopToolbar>\n )\n};\n\nexport const WidgetOnDashboardShow = (props) => (\n <Show\n {...props}\n actions={<WidgetOnDashboardShowActions />}\n breadcrumbs={<WidgetOnDashboardShowBreadcrumbs />}\n title={<TitleForRecord source=\"name\" {...props} />}\n >\n <SimpleShowLayout >\n <TextField source=\"id\" />\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <DateField source=\"createdAt\" />\n <DateField source=\"updatedAt\" />\n <NestedField source=\"dashboard\" reference=\"Dashboard\" link={dashboardLink}>\n <TextField source=\"name\" />\n </NestedField>\n <NestedField source=\"widget\" reference=\"Widget\" link={widgetLink}>\n <TextField source=\"name\" />\n </NestedField>\n {/* <WidgetOnDashboardPropertiesField source=\"properties\">\n <WidgetOnDashboardPropertyField />\n </WidgetOnDashboardPropertiesField> */}\n </SimpleShowLayout>\n </Show>\n);\n\n\n\nexport default WidgetOnDashboardShow;","import React, {\n Children,\n Fragment,\n isValidElement,\n\n} from 'react';\nimport PropTypes from 'prop-types';\nimport MuiToolbar from '@material-ui/core/Toolbar';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\n\nimport { SaveButton, DeleteButton } from 'react-admin';\n\nconst useStyles = makeStyles(\n theme => ({\n toolbar: {\n backgroundColor:\n theme.palette.type === 'light'\n ? theme.palette.grey[100]\n : theme.palette.grey[900],\n },\n desktopToolbar: {\n marginTop: theme.spacing(2),\n },\n\n defaultToolbar: {\n flex: 1,\n display: 'flex',\n justifyContent: 'space-between',\n },\n }),\n { name: 'RaToolbar' }\n);\n\nconst valueOrDefault = (value, defaultValue) =>\n typeof value === 'undefined' ? defaultValue : value;\n\nconst Toolbar = props => {\n const {\n alwaysEnableSaveButton,\n basePath,\n children,\n className,\n classes: classesOverride,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n pristine,\n record,\n redirect,\n resource,\n saving,\n submitOnEnter,\n undoable,\n mutationMode,\n validating,\n ...rest\n } = props;\n const classes = useStyles(props);\n\n // Use form pristine and validating to enable or disable the save button\n // if alwaysEnableSaveButton is undefined\n const disabled = !valueOrDefault(\n alwaysEnableSaveButton !== false ? alwaysEnableSaveButton : undefined,\n !pristine && !validating\n );\n\n return (\n <Fragment>\n <MuiToolbar\n className={classnames(\n classes.toolbar,\n className\n )}\n role=\"toolbar\"\n {...rest}\n >\n {Children.count(children) === 0 ? (\n <div className={classes.defaultToolbar}>\n <SaveButton\n handleSubmitWithRedirect={\n handleSubmitWithRedirect || handleSubmit\n }\n disabled={disabled}\n invalid={invalid}\n redirect={redirect}\n saving={saving || validating}\n submitOnEnter={submitOnEnter}\n />\n {record && typeof record.id !== 'undefined' && (\n <DeleteButton\n basePath={basePath}\n record={record}\n resource={resource}\n //undoable={undoable}\n undoable={false}\n mutationMode=\"optimistic\"\n />\n )}\n </div>\n ) : (\n Children.map(children, (button) =>\n button && isValidElement < any > (button)\n ? React.cloneElement(button, {\n basePath: valueOrDefault(\n button.props.basePath,\n basePath\n ),\n handleSubmit: valueOrDefault(\n button.props.handleSubmit,\n handleSubmit\n ),\n handleSubmitWithRedirect: valueOrDefault(\n button.props.handleSubmitWithRedirect,\n handleSubmitWithRedirect\n ),\n onSave: button.props.onSave,\n invalid,\n pristine,\n record: valueOrDefault(\n button.props.record,\n record\n ),\n resource: valueOrDefault(\n button.props.resource,\n resource\n ),\n saving,\n submitOnEnter: valueOrDefault(\n button.props.submitOnEnter,\n submitOnEnter\n ),\n undoable: valueOrDefault(\n button.props.undoable,\n undoable\n ),\n })\n : null\n )\n )}\n </MuiToolbar>\n </Fragment>\n );\n};\n\nToolbar.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n handleSubmit: PropTypes.func,\n handleSubmitWithRedirect: PropTypes.func,\n invalid: PropTypes.bool,\n pristine: PropTypes.bool,\n record: PropTypes.any,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n resource: PropTypes.string,\n saving: PropTypes.bool,\n submitOnEnter: PropTypes.bool,\n undoable: PropTypes.bool,\n validating: PropTypes.bool,\n};\n\nToolbar.defaultProps = {\n submitOnEnter: true,\n};\n\nexport default Toolbar;\n","import * as React from 'react';\nimport { Children, cloneElement, isValidElement, ReactElement } from 'react';\nimport PropTypes from 'prop-types';\nimport Tabs, { TabsProps } from '@material-ui/core/Tabs';\nimport { useLocation } from 'react-router-dom';\n\nconst TabbedFormTabs = (props) => {\n const { children, classes, url, syncWithLocation, value, ...rest } = props;\n const location = useLocation();\n\n const validTabPaths = Children.map(children, (tab, index) => {\n if (!isValidElement(tab)) return undefined;\n return getTabFullPath(tab, index, url);\n });\n\n // This ensures we don't get warnings from material-ui Tabs component when\n // the current location pathname targets a dynamically added Tab\n // In the case the targeted Tab is not present at first render (when\n // using permissions for example) we temporarily switch to the first\n // available tab. The current location will be applied again on the\n // first render containing the targeted tab. This is almost transparent\n // for the user who may just see a short tab selection animation\n const tabValue = validTabPaths.includes(location.pathname)\n ? location.pathname\n : validTabPaths[0];\n\n return (\n <Tabs\n value={syncWithLocation ? tabValue : value}\n indicatorColor=\"primary\"\n {...rest}\n >\n {Children.map(children, (tab, index) => {\n if (!isValidElement(tab)) return null;\n\n // Builds the full tab which is the concatenation of the last matched route in the\n // TabbedShowLayout hierarchy (ex: '/posts/create', '/posts/12', , '/posts/12/show')\n // and the tab path.\n // This will be used as the Tab's value\n const tabPath = getTabFullPath(tab, index, url);\n\n return cloneElement(tab, {\n intent: 'header',\n value: syncWithLocation ? tabPath : index,\n classes,\n syncWithLocation,\n });\n })}\n </Tabs>\n );\n};\n\nTabbedFormTabs.propTypes = {\n children: PropTypes.node,\n classes: PropTypes.object,\n url: PropTypes.string,\n tabsWithErrors: PropTypes.arrayOf(PropTypes.string),\n};\n\nexport const getTabFullPath = (\n tab,\n index,\n baseUrl\n) =>\n `${baseUrl}${tab.props.path ? `/${tab.props.path}` : index > 0 ? `/${index}` : ''\n }`.replace('//', '/'); // Because baseUrl can be a single / when on the first tab\n\n\n\nexport default TabbedFormTabs;\n","import React from 'react';\nimport {\n\n Children,\n cloneElement,\n isValidElement,\n useState,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\n\nimport { Route, useRouteMatch, useLocation } from 'react-router-dom';\nimport Card from '@material-ui/core/Card';\nimport Divider from '@material-ui/core/Divider';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { escapePath } from 'ra-core';\nimport Toolbar from './Toolbar';\nimport TabbedFormTabs, { getTabFullPath } from './TabbedFormTabs';\n\n\n\n\n\n\nexport const TabbedAsideFormView = (props) => {\n const {\n aside,\n basePath,\n children,\n className,\n classes: classesOverride,\n formRootPathname,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n mutationMode,\n pristine,\n record,\n redirect: defaultRedirect,\n resource,\n saving,\n submitOnEnter,\n syncWithLocation = true,\n tabs,\n toolbar,\n undoable,\n variant,\n margin,\n validating,\n ...rest\n } = props;\n const classes = useTabbedAsideFormViewStyles(props);\n const match = useRouteMatch();\n const location = useLocation();\n const url = match ? match.url : location.pathname;\n const [tabValue, setTabValue] = useState(0);\n\n const handleTabChange = (event, value) => {\n if (!syncWithLocation) {\n setTabValue(value);\n }\n };\n\n return (\n <form className={classnames('tabbed-form', classes.main, className)} {...sanitizeRestProps(rest)}>\n {aside &&\n cloneElement(aside, {\n className: classes.aside,\n resource,\n basePath,\n record,\n // version,\n })}\n <div className={classes.form}>\n <Card >\n\n {cloneElement(\n tabs,\n {\n classes,\n url,\n syncWithLocation,\n onChange: handleTabChange,\n value: tabValue,\n },\n children\n )}\n <Divider />\n <div className={classes.content}>\n {/* All tabs are rendered (not only the one in focus), to allow validation\n on tabs not in focus. The tabs receive a `hidden` property, which they'll\n use to hide the tab using CSS if it's not the one in focus.\n See https://github.com/marmelab/react-admin/issues/1866 */}\n {Children.map(children, (tab, index) => {\n if (!tab) {\n return;\n }\n const tabPath = getTabFullPath(tab, index, url);\n return (\n <Route exact path={escapePath(tabPath)}>\n {routeProps =>\n isValidElement(tab)\n ? React.cloneElement(tab, {\n intent: 'content',\n classes,\n resource,\n record,\n basePath,\n hidden: syncWithLocation\n ? !routeProps.match\n : tabValue !== index,\n variant: tab.props.variant || variant,\n margin: tab.props.margin || margin,\n value: syncWithLocation\n ? tabPath\n : index,\n })\n : null\n }\n </Route>\n );\n })}\n </div>\n {toolbar &&\n React.cloneElement(toolbar, {\n basePath,\n className: 'toolbar',\n handleSubmitWithRedirect,\n handleSubmit,\n invalid,\n mutationMode,\n pristine,\n record,\n redirect: defaultRedirect,\n resource,\n saving,\n submitOnEnter,\n validating,\n undoable,\n })}\n\n </Card>\n\n </div>\n\n </form>\n );\n};\n\nexport const useTabbedAsideFormViewStyles = makeStyles(\n theme => ({\n errorTabButton: { color: theme.palette.error.main },\n content: {\n paddingTop: theme.spacing(1),\n paddingLeft: theme.spacing(2),\n paddingRight: theme.spacing(2),\n },\n main: {\n display: \"flex\",\n gap: 16,\n },\n aside: {\n flexGrow: 1,\n },\n form: {\n width: theme.spacing(70),\n },\n }),\n { name: 'RaTabbedForm' }\n);\n\nTabbedAsideFormView.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.node,\n className: PropTypes.string,\n classes: PropTypes.object,\n defaultValue: PropTypes.oneOfType([PropTypes.object, PropTypes.func]), // @deprecated\n handleSubmit: PropTypes.func, // passed by react-final-form\n initialValues: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n invalid: PropTypes.bool,\n location: PropTypes.object,\n match: PropTypes.object,\n mutationMode: PropTypes.oneOf(['pessimistic', 'optimistic', 'undoable']),\n pristine: PropTypes.bool,\n // @ts-ignore\n record: PropTypes.object,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n resource: PropTypes.string,\n save: PropTypes.func, // the handler defined in the parent, which triggers the REST submission\n saving: PropTypes.bool,\n submitOnEnter: PropTypes.bool,\n tabs: PropTypes.element.isRequired,\n toolbar: PropTypes.element,\n translate: PropTypes.func,\n undoable: PropTypes.bool,\n validate: PropTypes.func,\n value: PropTypes.number,\n version: PropTypes.number,\n};\n\nTabbedAsideFormView.defaultProps = {\n submitOnEnter: true,\n tabs: <TabbedFormTabs />,\n toolbar: <Toolbar />,\n};\n\n\nconst sanitizeRestProps = ({\n active,\n dirty,\n dirtyFields,\n dirtyFieldsSinceLastSubmit,\n dirtySinceLastSubmit,\n error,\n errors,\n form,\n hasSubmitErrors,\n hasValidationErrors,\n initialValues,\n modified = null,\n modifiedSinceLastSubmit,\n save = null,\n submitError,\n submitErrors,\n submitFailed,\n submitSucceeded,\n submitting,\n touched = null,\n valid,\n values,\n visited = null,\n __versions = null,\n ...props\n}) => props;\n","import React, { Children, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n FormWithRedirect,\n} from 'ra-core';\nimport get from 'lodash/get';\nimport { useRouteMatch, useLocation } from 'react-router';\nimport { TabbedAsideFormView } from './TabbedAsideFormView';\n\nexport const TabbedForm = (props) => {\n const match = useRouteMatch();\n const location = useLocation();\n const formRootPathname = match ? match.url : location.pathname;\n\n return (\n <FormWithRedirect\n {...props}\n formRootPathname={formRootPathname}\n render={formProps => <TabbedAsideFormView {...formProps} />}\n />\n );\n};\n\nTabbedForm.propTypes = {\n children: PropTypes.node,\n initialValues: PropTypes.oneOfType([PropTypes.object, PropTypes.func]),\n mutationMode: PropTypes.oneOf(['pessimistic', 'optimistic', 'undoable']),\n // @ts-ignore\n record: PropTypes.object,\n redirect: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]),\n save: PropTypes.func, // the handler defined in the parent, which triggers the REST submission\n saving: PropTypes.bool,\n submitOnEnter: PropTypes.bool,\n undoable: PropTypes.bool,\n validate: PropTypes.func,\n sanitizeEmptyValues: PropTypes.bool,\n};\n\n\nexport const findTabsWithErrors = (children, errors) => {\n console.warn(\n 'Deprecated. FormTab now wrap their content inside a FormGroupContextProvider. If you implemented custom forms with tabs, please use the FormGroupContextProvider. See https://marmelab.com/react-admin/CreateEdit.html#grouping-inputs'\n );\n\n return Children.toArray(children).reduce((acc, child) => {\n if (!isValidElement(child)) {\n return acc;\n }\n\n const inputs = Children.toArray(child.props.children);\n\n if (\n inputs.some(\n input =>\n isValidElement(input) && get(errors, input.props.source)\n )\n ) {\n return [...acc, child.props.label];\n }\n\n return acc;\n }, []);\n};\n\n\nexport default TabbedForm","import React, { Fragment, useState, useCallback, cloneElement, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslate } from 'react-admin';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport IconButton from '@material-ui/core/IconButton';\nimport InfoIcon from '@material-ui/icons/Info';\nimport Popover from '@material-ui/core/Popover';\nimport CardContent from '@material-ui/core/CardContent';\nimport sanitizeFieldRestProps from '../field/sanitizeFieldRestProps';\n\n\n\nconst stopPropagation = event => event.stopPropagation();\n\nconst PopoverButton = (props) => {\n const {\n basePath = '',\n label = 'ra.action.more',\n record,\n icon = defaultIcon,\n children,\n resource,\n ...rest\n } = props;\n\n const translate = useTranslate();\n const [anchorEl, setAnchorEl] = useState(null);\n const id = anchorEl ? 'simple-popover' : undefined;\n\n const handleOpen = useCallback((event) => {\n stopPropagation(event)\n setAnchorEl(event.currentTarget);\n }, [setAnchorEl]);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, [setAnchorEl]);\n\n if (!record) return null\n\n return (\n <Fragment>\n <Tooltip title={translate(label)} enterDelay={700}>\n <IconButton\n onClick={handleOpen}\n aria-describedby={id}\n size=\"small\"\n >\n {icon}\n </IconButton>\n </Tooltip>\n <Popover\n id={id}\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'center',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'center',\n }}\n >\n <CardContent>\n {cloneElement(Children.only(children), {\n record,\n basePath,\n resource,\n ...sanitizeFieldRestProps(props),\n })}\n </CardContent>\n </Popover>\n </Fragment>\n\n );\n};\n\nconst defaultIcon = <InfoIcon fontSize=\"small\" />;\n\nPopoverButton.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n};\n\n\n\nexport default PopoverButton;\n","import React, { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useForm, useFormState } from 'react-final-form';\nimport get from 'lodash/get';\nimport { ReferenceInput, AutocompleteInput } from 'react-admin';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport PopoverButton from '../../lib/button/PopoverButton';\nimport MarkdownField from '../../lib/field/MarkdownField';\nimport InfoIcon from '@material-ui/icons/Info';\n\n\n\n\n\nconst WidgetOnDashboardReferenceWidgetInput = (props) => {\n const form = useForm();\n const selectWidgetData = useSelector(state => get(state, `admin.resources.Widget.data`));\n const [selected, setSelected] = useState()\n\n useEffect(() => {\n if (selected == null && selectWidgetData && props.record?.widget?.id) {\n setSelected(selectWidgetData[props.record.widget.id])\n }\n }, [selectWidgetData, props.record?.widget?.id, selected, setSelected])\n\n const handleChangeWidget = (value) => {\n const selected = get(selectWidgetData, [value])\n const defaultProperties = selected?.defaultProperties\n const defaultGrid = selected?.defaultGrid\n const name = selected?.name\n setSelected(selected)\n form.change('widget', selected)\n form.change('properties', defaultProperties)\n form.change('grid', defaultGrid)\n form.change('name', name)\n };\n\n return (\n <ReferenceInput {...props} onChange={handleChangeWidget}>\n <AutocompleteInput\n optionText=\"name\"\n options={{\n InputProps: {\n endAdornment: (\n <InputAdornment position=\"end\">\n <PopoverButton\n icon={<InfoIcon fontSize=\"small\" />}\n label=\"resources.Widget.fields.description\"\n record={selected}\n resource={props.resource}\n basePath={props.basePath}\n >\n <MarkdownField source=\"description\" emptyText=\"Описание отсутствует\" />\n </PopoverButton>\n </InputAdornment>\n ),\n }\n }}\n\n />\n </ReferenceInput>\n );\n};\n\nexport default WidgetOnDashboardReferenceWidgetInput;","import React, { useMemo, Children, isValidElement, cloneElement } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useForm, useFormState } from 'react-final-form';\nimport get from 'lodash/get';\nimport { FormInput } from 'react-admin';\nimport useWidgetModule from '../../controller/widget/useWidgetModule';\n\n\n\n\n\nconst WidgetOnDashboardReferenceWidgetPropertiesInput = ({ source, ...props }) => {\n const { values } = useFormState()\n const url = useMemo(() => values?.widget?.url, [values?.widget?.url])\n const { WidgetProperties, hasWidgetProperties } = useWidgetModule(url)\n\n if (!hasWidgetProperties) return null\n\n return (\n <WidgetProperties {...props} />\n )\n};\n\nexport default WidgetOnDashboardReferenceWidgetPropertiesInput;","import React, { useState, useEffect, useCallback, useMemo, isValidElement } from \"react\";\nimport { useDispatch } from 'react-redux';\nimport get from \"lodash/get\";\nimport Card from '@material-ui/core/Card';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\n// import { makeStyles, useTheme } from '@material-ui/core/styles';\n// import NotFound from '../../lib/layout/NotFound';\n// import DashboardIcon from '@material-ui/icons/Dashboard';\n// import WidgetPreviewLayout from '../Widget/WidgetPreviewLayout';\n\n\nimport { useRecordContext, useUpdate, useDataProvider } from 'react-admin';\nimport WidgetOnDashboardLoading from \"./WidgetOnDashboardLoading\";\nimport WidgetOnDashboardNotFound from \"./WidgetOnDashboardNotFound\";\nimport useWidgetModule from '../../controller/widget/useWidgetModule';\n\n\n\n\n\nconst WidgetOnDashboardPreviewPlay = (props) => {\n const {\n basePath,\n className,\n record,\n resource,\n version,\n editable,\n ...rest\n } = props\n\n const { WidgetPreview, hasWidgetPreview, error, loading } = useWidgetModule(record?.widget?.url);\n\n if (!record?.widget?.url) return (<WidgetOnDashboardNotFound />)\n if (loading) return (<WidgetOnDashboardLoading />);\n if (!hasWidgetPreview || !isValidElement(<WidgetPreview />)) return (<WidgetOnDashboardNotFound />)\n if (error) return (\"error...\");\n\n\n if (!record) return null;\n\n return (\n <WidgetPreview {...props} />\n );\n\n}\n\n\nexport default WidgetOnDashboardPreviewPlay","import React from \"react\";\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useFormState } from 'react-final-form';\n\nimport Toolbar from '@material-ui/core/Toolbar';\nimport WidgetOnDashboardPreviewPlay from '../../lib/widgetOnDashboard/WidgetOnDashboardPreviewPlay';\n\n\n\nexport const useStyles = makeStyles(theme => ({\n wrapper: {\n },\n inner: {\n position: \"sticky\",\n top: \"3em\",\n minWidth: 640,\n height: 480,\n\n },\n}), { name: 'WidgetOnDashboardEditAside' });\n\nconst WidgetOnDashboardEditAside = (props) => {\n const { className } = props\n const classes = useStyles();\n const { values } = useFormState();\n return (\n <div className={classnames(className, classes.wrapper)}>\n <div className={classes.inner}>\n <WidgetOnDashboardPreviewPlay {...props} record={values} viewOnly />\n </div>\n </div>\n )\n};\n\n\n\n\n\nexport default WidgetOnDashboardEditAside;","import React from \"react\";\nimport { CreateContextProvider, ResourceContextProvider, useCreateController, CreateView, FormTab, TextInput, required, maxLength, Toolbar } from 'react-admin';\nimport TabbedForm from '../../lib/form/TabbedAsideForm';\nimport WidgetOnDashboardReferenceWidgetInput from './WidgetOnDashboardReferenceWidgetInput';\nimport WidgetOnDashboardReferenceWidgetPropertiesInput from './WidgetOnDashboardReferenceWidgetPropertiesInput';\nimport WidgetOnDashboardEditAside from './WidgetOnDashboardEditAside';\nimport useDashboardController from '../../controller/dashboard/useDashboardController';\nimport DashboardContextProvider from '../../controller/dashboard/DashboardContextProvider';\nimport JsonInput from '../../lib/input/JsonInput'\n\n\n\nconst validateName = [required(), maxLength(128)];\nconst validateWidgetId = [required()];\nconst redirect = (basePath, id, data) => {\n const [_, dashboardResourceName, dashboardId] = basePath.split('/')\n return `/${dashboardResourceName}/${dashboardId}/play`\n}\n\nconst WidgetOnDashboardCreate = (props) => {\n const dashboardControllerProps = useDashboardController({ resource: \"Dashboard\", id: props.dashboardId, basePath: \"/Dashboard\" });\n const createControllerProps = useCreateController(props);\n return (\n <ResourceContextProvider value=\"Dashboard\">\n <DashboardContextProvider value={dashboardControllerProps}>\n <ResourceContextProvider value={props.resource}>\n <CreateContextProvider value={createControllerProps}>\n <CreateView\n {...props}\n {...createControllerProps}\n component=\"div\"\n >\n <TabbedForm\n redirect={redirect}\n sanitizeEmptyValues={false}\n aside={<WidgetOnDashboardEditAside />}\n toolbar={<Toolbar alwaysEnableSaveButton />}\n >\n <FormTab label=\"Основное\">\n <WidgetOnDashboardReferenceWidgetInput source=\"widget.id\" reference=\"Widget\" validate={validateWidgetId} label='resources.WidgetOnDashboard.fields.widget' />\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n </FormTab>\n <FormTab label=\"Свойства\">\n <WidgetOnDashboardReferenceWidgetPropertiesInput source=\"widget.properties\" />\n </FormTab>\n <FormTab label=\"JSON\">\n <JsonInput source=\"properties\" height=\"620px\" />\n <JsonInput source=\"grid\" height=\"200px\" />\n </FormTab>\n </TabbedForm>\n </CreateView>\n </CreateContextProvider>\n </ResourceContextProvider>\n </DashboardContextProvider>\n </ResourceContextProvider>\n )\n};\n\n\n\n\n\nexport default WidgetOnDashboardCreate;","import * as React from 'react';\nimport { useCallback } from 'react';\nimport {\n SaveButton as RaSaveButton,\n useUpdate,\n useRefresh,\n useNotify,\n useRedirect,\n CRUD_UPDATE,\n} from 'react-admin';\n\nconst SaveButton = props => {\n const { resource, record } = props\n const notify = useNotify();\n const refresh = useRefresh();\n const redirectHook = useRedirect();\n const [update, { loading }] = useUpdate(\n resource,\n record.id,\n {}, // set by the caller\n record\n );\n\n\n const handleSave = useCallback((values, redirect) => {\n update(\n { payload: { data: values } },\n {\n action: CRUD_UPDATE,\n onSuccess: () => {\n notify('ra.notification.updated',\n {\n type: 'info',\n messageArgs: { smart_count: 1 },\n\n }\n );\n redirectHook(redirect);\n },\n onFailure: error => {\n notify('ra.notification.http_error',\n {\n type: 'warning',\n\n }\n );\n refresh();\n },\n }\n )\n }, [update, notify, redirectHook, refresh]);\n // set onSave props instead of handleSubmitWithRedirect\n return <RaSaveButton {...props} onSave={handleSave} disabled={loading} />;\n};\n\nexport default SaveButton","import * as React from 'react';\nimport { useCallback } from 'react';\nimport {\n SaveButton,\n useUpdate,\n useRefresh,\n useNotify,\n CRUD_UPDATE,\n} from 'react-admin';\n\nconst SaveAndContinueButton = props => {\n const { resource, record } = props\n const notify = useNotify();\n const refresh = useRefresh();\n const [update, { loading }] = useUpdate(\n resource,\n record.id,\n {}, // set by the caller\n record\n );\n\n\n const handleSave = useCallback((values, redirect) => {\n update(\n { payload: { data: values } },\n {\n action: CRUD_UPDATE,\n onSuccess: () => {\n notify('ra.notification.updated',\n {\n type: 'info',\n messageArgs: { smart_count: 1 },\n\n }\n );\n\n },\n onFailure: error => {\n notify('ra.notification.http_error',\n {\n type: 'warning',\n\n }\n );\n refresh();\n },\n }\n )\n }, [update, notify, refresh]);\n // set onSave props instead of handleSubmitWithRedirect\n return <SaveButton {...props} onSave={handleSave} label=\"ra.action.save_and_continue\" disabled={loading} />;\n};\n\nexport default SaveAndContinueButton","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useEditContext, useTranslate } from 'react-admin';\nimport DashboardBreadcrumbItem from '../../lib/breadcrumbs/DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from '../../lib/breadcrumbs/ListBreadcrumbItem';\nimport RecordBreadcrumbItem from '../../lib/breadcrumbs/RecordBreadcrumbItem';\nimport BreadcrumbItem from '../../lib/breadcrumbs/BreadcrumbItem';\n\n\n\n\nconst WidgetOnDashboardEditBreadcrumbs = (props) => {\n const contextProps = useEditContext();\n const translate = useTranslate();\n const dashboard = contextProps.record?.dashboard\n\n return (\n <Breadcrumbs aria-label=\"breadcrumb\">\n <DashboardBreadcrumbItem {...contextProps} />\n <ListBreadcrumbItem basePath=\"/Dashboard\" resource=\"Dashboard\" />\n <RecordBreadcrumbItem basePath=\"/Dashboard\" record={dashboard} />\n <RecordBreadcrumbItem {...contextProps} {...props} />\n <BreadcrumbItem>{translate(\"ra.action.edit\")}</BreadcrumbItem>\n </Breadcrumbs>\n );\n};\n\nexport default WidgetOnDashboardEditBreadcrumbs\n","import React from \"react\";\nimport { EditContextProvider, ResourceContextProvider, useEditController, } from 'ra-core';\nimport { TextInput, TopToolbar, FormTab, Toolbar, DeleteButton, required, maxLength, useNotify, useRefresh } from 'react-admin';\nimport SaveButton from '../../lib/button/SaveButton';\nimport SaveAndContinueButton from '../../lib/button/SaveAndContinueButton';\nimport CloneButton from '../../lib/button/CloneButton';\nimport { EditView } from '../../lib/edit/EditView';\nimport TitleForRecord from '../../lib/layout/TitleForRecord';\nimport TabbedForm from '../../lib/form/TabbedAsideForm';\nimport WidgetOnDashboardEditBreadcrumbs from './WidgetOnDashboardEditBreadcrumbs';\nimport WidgetOnDashboardReferenceWidgetInput from './WidgetOnDashboardReferenceWidgetInput';\nimport WidgetOnDashboardReferenceWidgetPropertiesInput from './WidgetOnDashboardReferenceWidgetPropertiesInput';\nimport WidgetOnDashboardEditAside from './WidgetOnDashboardEditAside';\nimport MUIToolbar from '@material-ui/core/Toolbar';\nimport useDashboardController from '../../controller/dashboard/useDashboardController';\nimport DashboardContextProvider from '../../controller/dashboard/DashboardContextProvider';\nimport VariablesForm from '../../lib/dashboard/variables/VariablesForm';\nimport Spacer from '../../lib/layout/Spacer';\nimport permissions from \"../../authProvider/abilityProvider\";\nimport JsonInput from '../../lib/input/JsonInput'\n\n\n\nconst validateName = [required(), maxLength(128)];\nconst validateWidgetId = [required()];\n\nconst WidgetOnDashboardEditActions = ({ data, resource, hasEdit, variables }) => {\n const basePath = `/Dashboard/${data?.dashboard?.id}/${resource}`\n return (\n <MUIToolbar disableGutters>\n {variables && (\n <VariablesForm />\n )}\n <Spacer />\n <TopToolbar>\n {permissions.can('update', \"Dashboard\") && permissions.can('create', \"WidgetOnDashboard\") && permissions.can('getMany', \"Widget\") && permissions.can('getList', \"Widget\") && <CloneButton basePath={basePath} record={data} />}\n </TopToolbar>\n </MUIToolbar>\n )\n};\n\n\n\nconst WidgetOnDashboardEditToolbar = props => {\n // const { pristine, validating } = props\n // // const disabled = !Boolean(!pristine && !validating)\n // const disabled = false\n\n const notify = useNotify();\n const refresh = useRefresh();\n\n const onSuccess = () => {\n notify('ra.notification.updated', 'info', { smart_count: 1 });\n refresh();\n };\n\n return (\n <Toolbar {...props} >\n <SaveButton redirect={props.redirect} />\n <SaveAndContinueButton submitOnEnter={false} label=\"ra.action.save_and_continue\" onSuccess={onSuccess} variant=\"text\" style={{ marginLeft: 8 }} />\n <Spacer variant=\"row\" />\n {permissions.can('update', \"Dashboard\") && permissions.can('delete', \"WidgetOnDashboard\") && <DeleteButton mutationMode=\"optimistic\" redirect={props.redirect} label=\"ra.action.remove\" />}\n </Toolbar>\n )\n};\n\nexport const WidgetOnDashboardEdit = (props) => {\n const dashboardControllerProps = useDashboardController({ resource: \"Dashboard\", id: props.dashboardId, basePath: \"/Dashboard\" });\n const editControllerProps = useEditController(props);\n const redirect = `/Dashboard/${props.dashboardId}/play${props.location.search}`\n\n return (\n <ResourceContextProvider value=\"Dashboard\">\n <DashboardContextProvider value={dashboardControllerProps}>\n <ResourceContextProvider value={props.resource}>\n <EditContextProvider value={editControllerProps}>\n <EditView\n {...props}\n {...editControllerProps}\n actions={<WidgetOnDashboardEditActions />}\n breadcrumbs={<WidgetOnDashboardEditBreadcrumbs />}\n title={<TitleForRecord source=\"name\" {...props} />}\n component=\"div\"\n >\n <TabbedForm\n redirect={redirect}\n sanitizeEmptyValues={false}\n aside={<WidgetOnDashboardEditAside />}\n toolbar={<WidgetOnDashboardEditToolbar />}\n >\n <FormTab label=\"Основное\">\n <WidgetOnDashboardReferenceWidgetInput source=\"widget.id\" reference=\"Widget\" validate={validateWidgetId} label='resources.WidgetOnDashboard.fields.widget' />\n <TextInput source=\"name\" validate={validateName} />\n <TextInput source=\"description\" multiline fullWidth />\n </FormTab>\n <FormTab label=\"Свойства\">\n <WidgetOnDashboardReferenceWidgetPropertiesInput source=\"widget.properties\" />\n </FormTab>\n <FormTab label=\"JSON\">\n {/* <JsonSimpleInput source=\"properties\" multiline fullWidth hasBeautify beautifyLimit={80} />\n <JsonSimpleInput source=\"grid\" multiline fullWidth hasBeautify beautifyLimit={80} /> */}\n <JsonInput source=\"properties\" height=\"620px\" />\n <JsonInput source=\"grid\" height=\"200px\" />\n </FormTab>\n </TabbedForm>\n </EditView>\n </EditContextProvider>\n </ResourceContextProvider>\n </DashboardContextProvider>\n </ResourceContextProvider>\n\n )\n\n\n\n}\n\n\n\n\nexport default WidgetOnDashboardEdit;","import { useCallback, useMemo, useEffect, useState, useRef } from 'react';\nimport {\n useTranslate,\n useCheckMinimumRequiredProps,\n useGetOne,\n CRUD_GET_ONE,\n useNotify,\n useRedirect,\n useRefresh,\n useVersion,\n useResourceContext,\n useGetResourceLabel,\n} from 'react-admin';\n\n\n\nconst useWidgetOnDashboardController = (props) => {\n useCheckMinimumRequiredProps('WidgetOnDashboard', ['basePath', 'resource'], props);\n const {\n basePath,\n id,\n onFailure,\n } = props;\n const resource = useResourceContext(props);\n const translate = useTranslate();\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const version = useVersion();\n\n const getResourceLabel = useGetResourceLabel();\n const defaultTitle = translate('ra.page.play', {\n name: getResourceLabel(resource, 1),\n id,\n record,\n });\n\n\n const { data: record, error, loading, loaded, refetch } = useGetOne(resource, id, {\n action: CRUD_GET_ONE,\n onFailure:\n onFailure ??\n (() => {\n notify('ra.notification.item_doesnt_exist', 'warning');\n redirect('list', basePath);\n refresh();\n }),\n });\n\n return {\n error,\n loading,\n loaded,\n defaultTitle,\n resource,\n basePath,\n record,\n refetch,\n version,\n };\n\n};\n\nexport default useWidgetOnDashboardController","import { createContext } from 'react';\n\nconst WidgetOnDashboardContext = createContext({\n basePath: null,\n record: null,\n defaultTitle: null,\n loaded: null,\n loading: null,\n error: null,\n refetch: null,\n resource: null,\n version: null,\n});\n\nWidgetOnDashboardContext.displayName = 'WidgetOnDashboardContext';\n\nexport default WidgetOnDashboardContext\n","import React from 'react';\nimport { RecordContextProvider } from 'react-admin';\nimport WidgetOnDashboardContext from './WidgetOnDashboardContext';\n\n\n\nconst WidgetOnDashboardContextProvider = ({ children, value }) => {\n\n return (\n <WidgetOnDashboardContext.Provider value={value}>\n <RecordContextProvider value={value && value.record}>\n {children}\n </RecordContextProvider>\n </WidgetOnDashboardContext.Provider>\n )\n};\n\nexport default WidgetOnDashboardContextProvider","import { useContext } from 'react';\nimport WidgetOnDashboardContext from './WidgetOnDashboardContext';\n\nconst useWidgetOnDashboardContext = () => useContext(WidgetOnDashboardContext);\n\n\nexport default useWidgetOnDashboardContext","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useResourceDefinition, EditButton, ShowButton, TopToolbar } from 'react-admin';\nimport useWidgetOnDashboardContext from '../../controller/widgetOnDashboard/useWidgetOnDashboardContext';\nimport MoreButton from '../button/MoreButton';\nimport ShowButtonAsMenuItem from '../button/ShowButtonAsMenuItem';\nimport EditButtonAsMenuItem from '../button/EditButtonAsMenuItem';\nimport PlayButtonAsMenuItem from '../button/PlayButtonAsMenuItem';\nimport CloneButtonAsMenuItem from '../button/CloneButtonAsMenuItem';\n\n\n\nconst sanitizeRestProps = ({\n basePath,\n className,\n hasEdit,\n hasList,\n resource,\n ...rest\n}) => rest;\n\nconst WidgetOnDashboardPlayActions = ({ className, ...rest }) => {\n const { basePath, record } = useWidgetOnDashboardContext(rest);\n const { hasEdit, hasShow } = useResourceDefinition(rest);\n return (\n <TopToolbar className={className} {...sanitizeRestProps(rest)}>\n <MoreButton color=\"primary\">\n <ShowButtonAsMenuItem basePath={basePath} record={record} />\n <EditButtonAsMenuItem basePath={basePath} record={record} />\n <CloneButtonAsMenuItem basePath={basePath} record={record} />\n </MoreButton>\n </TopToolbar>\n );\n};\n\nWidgetOnDashboardPlayActions.propTypes = {\n basePath: PropTypes.string,\n className: PropTypes.string,\n data: PropTypes.object,\n hasCreate: PropTypes.bool,\n hasEdit: PropTypes.bool,\n hasDashboard: PropTypes.bool,\n hasList: PropTypes.bool,\n resource: PropTypes.string,\n};\n\nexport default WidgetOnDashboardPlayActions","import React, { useState, useEffect, useCallback, useMemo, isValidElement } from \"react\";\nimport { useDispatch } from 'react-redux';\nimport get from \"lodash/get\";\nimport Card from '@material-ui/core/Card';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardContent from '@material-ui/core/CardContent';\n// import { makeStyles, useTheme } from '@material-ui/core/styles';\n// import NotFound from '../../lib/layout/NotFound';\n// import DashboardIcon from '@material-ui/icons/Dashboard';\n// import WidgetPreviewLayout from '../Widget/WidgetPreviewLayout';\n\n\nimport { useRecordContext, useUpdate, useDataProvider } from 'react-admin';\nimport WidgetOnDashboardLoading from \"./WidgetOnDashboardLoading\";\nimport WidgetOnDashboardNotFound from \"./WidgetOnDashboardNotFound\";\nimport useWidgetModule from '../../controller/widget/useWidgetModule';\n\n\n\n\n\nconst DashboardResponsiveGridLayout = (props) => {\n const {\n basePath,\n className,\n record,\n resource,\n version,\n editable,\n ...rest\n } = props\n\n\n const { WidgetPreview, hasWidgetPreview, error, loading } = useWidgetModule(record.widget.url);\n\n if (loading) return (<WidgetOnDashboardLoading />);\n if (!hasWidgetPreview || !isValidElement(<WidgetPreview />)) return (<WidgetOnDashboardNotFound />)\n if (error) return (\"error...\");\n\n\n if (!record) return null;\n\n return (\n <WidgetPreview {...props} />\n );\n\n}\n\n\nexport default DashboardResponsiveGridLayout","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useTranslate } from 'react-admin';\nimport DashboardBreadcrumbItem from './DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from './ListBreadcrumbItem';\nimport RecordBreadcrumbItem from './RecordBreadcrumbItem';\nimport BreadcrumbItem from './BreadcrumbItem';\nimport useWidgetOnDashboardContext from '../../controller/widgetOnDashboard/useWidgetOnDashboardContext';\n\n\n\n\nconst WidgetOnDashboardPlayBreadcrumbs = (props) => {\n const contextProps = useWidgetOnDashboardContext();\n const translate = useTranslate();\n const dashboard = contextProps.record?.dashboard\n\n return (\n <Breadcrumbs aria-label=\"breadcrumb\">\n <DashboardBreadcrumbItem {...contextProps} />\n <ListBreadcrumbItem basePath=\"/Dashboard\" resource=\"Dashboard\" />\n <RecordBreadcrumbItem basePath=\"/Dashboard\" record={dashboard} />\n <RecordBreadcrumbItem {...contextProps} {...props} />\n <BreadcrumbItem>{translate(\"ra.action.play\")}</BreadcrumbItem>\n </Breadcrumbs>\n );\n};\n\nexport default WidgetOnDashboardPlayBreadcrumbs","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { useResourceDefinition, TitleForRecord } from 'react-admin';\nimport useDashboardContext from '../../controller/dashboard/useDashboardContext';\nimport useWidgetOnDashboardContext from '../../controller/widgetOnDashboard/useWidgetOnDashboardContext';\nimport DashboardToolbar from '../dashboard/DashboardPlayToolbar';\nimport DefaultWidgetOnDashboardPlayActions from './WidgetOnDashboardPlayActions';\nimport WidgetOnDashboardPlayLayout from './WidgetOnDashboardPlayLayout';\nimport DefaultWidgetOnDashboardPlayBreadcrumbs from '../breadcrumbs/WidgetOnDashboardPlayBreadcrumbs';\n\n\n\nconst WidgetOnDashboardPlayView = (props) => {\n const {\n Actions,\n Breadcrumbs,\n children,\n classes: classesOverride,\n className,\n Title,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n\n const {\n variables,\n variablesValues,\n } = useDashboardContext(props);\n const {\n basePath,\n defaultTitle,\n hasList,\n record,\n resource,\n version,\n\n } = useWidgetOnDashboardContext(props);\n const { hasEdit } = useResourceDefinition(props);\n if (!record) return null\n\n const dashboardVariablesLoaded = variables ? variables.map(variable => variablesValues ? !(variablesValues[variable] == null) : false).every(Boolean) : true\n\n return (\n <div\n className={classnames('dashboard-page', classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n <TitleForRecord\n title={Title}\n record={record}\n defaultTitle={defaultTitle}\n />\n {Breadcrumbs}\n {(variables || Actions) && (\n <DashboardToolbar\n Actions={Actions}\n basePath={basePath}\n data={record}\n hasList={hasList}\n hasEdit={hasEdit}\n resource={resource}\n variables={variables}\n />\n )}\n <div className={classnames(classes.main)}>\n <div className={classes.mainContent}>\n {record && dashboardVariablesLoaded && (\n <WidgetOnDashboardPlayLayout resource={resource} basePath={basePath} record={record} version={version} />\n )}\n </div>\n </div>\n </div>\n );\n};\n\nWidgetOnDashboardPlayView.propTypes = {\n Actions: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n Breadcrumbs: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n aside: PropTypes.element,\n basePath: PropTypes.string,\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n defaultTitle: PropTypes.any,\n hasEdit: PropTypes.bool,\n hasList: PropTypes.bool,\n loading: PropTypes.bool,\n loaded: PropTypes.bool,\n record: PropTypes.object,\n resource: PropTypes.string,\n Title: PropTypes.any,\n version: PropTypes.node,\n};\n\nWidgetOnDashboardPlayView.defaultProps = {\n classes: {},\n Actions: <DefaultWidgetOnDashboardPlayActions />,\n Breadcrumbs: <DefaultWidgetOnDashboardPlayBreadcrumbs />,\n};\n\nconst useStyles = makeStyles(\n {\n root: {},\n main: {\n display: 'flex',\n },\n mainContent: {\n flex: '1 1 auto',\n },\n },\n { name: 'RaDashboard' }\n);\n\nconst sanitizeRestProps = ({\n basePath = null,\n defaultTitle = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasDashboard = null,\n history = null,\n id = null,\n dashboardId = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n options = null,\n refetch = null,\n permissions = null,\n range = null,\n setRange = null,\n variables = null,\n variablesValues = null,\n setVariablesValues = null,\n\n ...rest\n}) => rest;\n\n\nexport default WidgetOnDashboardPlayView","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { ResourceContextProvider } from 'ra-core';\nimport useDashboardController from '../../controller/dashboard/useDashboardController';\nimport DashboardContextProvider from '../../controller/dashboard/DashboardContextProvider';\nimport useWidgetOnDashboardController from '../../controller/widgetOnDashboard/useWidgetOnDashboardController';\nimport WidgetOnDashboardContextProvider from '../../controller/widgetOnDashboard/WidgetOnDashboardContextProvider';\nimport WidgetOnDashboardPlayView from './WidgetOnDashboardPlayView';\n\n\n\nconst WidgetOnDashboardPlay = (props) => {\n\n const dashboardControllerProps = useDashboardController({ ...props, resource: \"Dashboard\", id: props.dashboardId });\n const widgetOnDashboardControllerProps = useWidgetOnDashboardController(props);\n\n return (\n <ResourceContextProvider value=\"Dashboard\">\n <DashboardContextProvider value={dashboardControllerProps}>\n <ResourceContextProvider value={props.resource}>\n <WidgetOnDashboardContextProvider value={widgetOnDashboardControllerProps}>\n <WidgetOnDashboardPlayView {...props} {...widgetOnDashboardControllerProps} />\n </WidgetOnDashboardContextProvider>\n </ResourceContextProvider>\n </DashboardContextProvider>\n </ResourceContextProvider>\n )\n};\n\nWidgetOnDashboardPlay.propTypes = {\n Actions: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n Breadcrumbs: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n id: PropTypes.any.isRequired,\n resource: PropTypes.string,\n Title: PropTypes.node,\n};\n\nexport default WidgetOnDashboardPlay\n","import React from \"react\";\nimport TitleForRecord from '../../lib/layout/TitleForRecord';\nimport WidgetOnDashboardPlayLib from '../../lib/widgetOnDashboard/WidgetOnDashboardPlay';\n\n\nexport const WidgetOnDashboardPlay = (props) => (\n <WidgetOnDashboardPlayLib\n {...props}\n Title={<TitleForRecord source=\"name\" {...props} />}\n />\n);\n\n\n\nexport default WidgetOnDashboardPlay;","import WidgetOnDashboardShow from './WidgetOnDashboardShow';\nimport WidgetOnDashboardCreate from './WidgetOnDashboardCreate';\nimport WidgetOnDashboardEdit from './WidgetOnDashboardEdit';\nimport WidgetOnDashboardPlay from './WidgetOnDashboardPlay';\n\n\n\nconst WidgetOnDashboardName = \"WidgetOnDashboard\"\n\nconst WidgetOnDashboardResource = {\n name: WidgetOnDashboardName,\n show: WidgetOnDashboardShow,\n create: WidgetOnDashboardCreate,\n edit: WidgetOnDashboardEdit\n}\n\nexport default WidgetOnDashboardResource;\nexport {\n WidgetOnDashboardName,\n WidgetOnDashboardShow,\n WidgetOnDashboardCreate,\n WidgetOnDashboardEdit,\n WidgetOnDashboardPlay,\n};","import React, { cloneElement, Children } from 'react';\nimport PropTypes from 'prop-types';\nimport { Title } from 'react-admin';\nimport { withStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { useAuthenticated } from 'react-admin';\n\n\nconst styles = theme => ({\n root: {},\n main: {\n display: 'flex',\n },\n card: {\n flex: '1 1 auto',\n },\n cardWrapper: {\n flex: '1 1 auto',\n },\n});\n\n\nexport const AboutShowView = withStyles(styles)(({\n title,\n aside,\n children,\n classes,\n className,\n ...props\n}) => {\n useAuthenticated();\n if (!children) { return null; }\n\n return (\n <div className={classnames('about-page', classes.root, className)}>\n <Title title={title} />\n <div className={`${classes.main}`} >\n <div className={`${classes.cardWrapper}`} >\n {/* {cloneElement(Children.only(children), {})} */}\n {Children.map(children, (field, index) => (\n cloneElement(field, {})\n ))}\n </div>\n\n {aside && cloneElement(aside, {})}\n </div>\n </div>\n );\n});\n\n\nconst AboutShow = props => (\n <AboutShowView {...props} />\n);\n\nAboutShow.propTypes = {\n aside: PropTypes.node,\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n title: PropTypes.any,\n};\n\nexport default AboutShow;","export default __webpack_public_path__ + \"static/media/CHANGELOG.596456b3.md\";","import Releases from './Releases'\n\n\nexport default Releases","import React, { useState, useEffect } from \"react\";\nimport MarkdownField from \"../../../lib/field/MarkdownField\";\nimport AboutShow from \"../AboutShow\";\nimport CHANGELOG from \"./CHANGELOG.md\";\n\n\nconst Releases = (props) => {\n const [markdown, setMarkdown] = useState(\"\");\n\n useEffect(() => {\n fetch(CHANGELOG)\n .then((res) => res.text())\n .then((text) => setMarkdown(text));\n }, []);\n\n return (\n <AboutShow\n {...props}\n title=\"ra.page.releases\"\n >\n <MarkdownField record={{ markdown }} source=\"markdown\" />\n </AboutShow>\n )\n}\n\nexport default Releases","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\n\n\n\nexport const GET_VERSION = gql`\nquery info {\n data: info {\n name\n version\n }\n}\n`\n\nconst info = (args) => {\n return graphqlClient.request(GET_VERSION).then(response => {\n const data = response?.data\n return {\n data\n }\n })\n}\n\nexport default info","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\n\n\n\nexport const GET_VERSION = gql`\nquery info {\n data: info {\n name\n version\n }\n}\n`\n\nconst info = (args) => {\n return graphqlClient.request(GET_VERSION).then(response => {\n const data = response?.data\n return {\n data\n }\n })\n}\n\nexport default info","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\n\n\n\nexport const GET_VERSION = gql`\nquery info {\n data: info {\n name\n version\n }\n}\n`\n\nconst info = (args) => {\n return graphqlClient.request(GET_VERSION).then(response => {\n const data = response?.data\n return {\n data\n }\n })\n}\n\nexport default info","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\n\n\n\nexport const GET_VERSION = gql`\nquery info {\n data: info {\n name\n version\n }\n}\n`\n\nconst info = (args) => {\n return graphqlClient.request(GET_VERSION).then(response => {\n const data = response?.data\n return {\n data\n }\n })\n}\n\nexport default info","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\n\n\n\nexport const GET_VERSION = gql`\nquery Info {\n data:info {\n name\n version\n }\n}\n`\n\nconst info = (args) => {\n return graphqlClient.request(GET_VERSION).then(response => {\n const data = response?.data\n return {\n data\n }\n })\n}\n\nexport default info","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\n\n\n\nexport const GET_VERSION = gql`\nquery info {\n data: info {\n name\n version\n }\n}\n`\n\nconst info = (args) => {\n return graphqlClient.request(GET_VERSION).then(response => {\n const data = response?.data\n return {\n data\n }\n })\n}\n\nexport default info","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\n\n\n\nexport const GET_VERSION = gql`\nquery info {\n data: info {\n name\n version\n }\n}\n`\n\nconst info = (args) => {\n return graphqlClient.request(GET_VERSION).then(response => {\n const data = response?.data\n return {\n data\n }\n })\n}\n\nexport default info","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\n\n\n\nexport const GET_VERSION = gql`\nquery info {\n data: info {\n name\n version\n }\n}\n`\n\nconst info = (args) => {\n return graphqlClient.request(GET_VERSION).then(response => {\n const data = response?.data\n return {\n data\n }\n })\n}\n\nexport default info","import { useEffect, useState } from 'react'\nimport { useDispatch } from 'react-redux';\nimport { fetchStart, fetchEnd, useVersion } from 'react-admin';\nimport { APPLICATION_NAME, APPLICATION_VERSION } from \"../../../appsettings\";\nimport infoAbilityService from \"../../../dataProvider/AbilityService/info\";\nimport infoAuthenticationService from \"../../../dataProvider/AuthenticationService/info\";\nimport infoAuthorizationService from \"../../../dataProvider/AuthorizationService/info\";\nimport infoPreferencesService from \"../../../dataProvider/PreferencesService/info\";\nimport infoBlobService from \"../../../dataProvider/BlobService/info\";\nimport infoDatabusService from \"../../../dataProvider/DatabusService/info\";\nimport infoEventbusService from \"../../../dataProvider/EventbusService/info\";\nimport infoGatewayService from \"../../../dataProvider/GatewayService/info\";\n\nconst applicationAsService = { data: { name: APPLICATION_NAME, version: APPLICATION_VERSION } }\n\nconst initialState = {\n data: undefined,\n error: undefined,\n loading: false,\n loaded: false,\n}\n\nconst useInfo = () => {\n const version = useVersion();\n const dispatch = useDispatch();\n const [state, setState] = useState(initialState)\n\n useEffect(() => {\n dispatch(fetchStart());\n Promise.all([\n applicationAsService,\n infoAuthenticationService(),\n infoAuthorizationService(),\n infoAbilityService(),\n infoPreferencesService(),\n infoBlobService(),\n infoDatabusService(),\n infoEventbusService(),\n infoGatewayService()\n ])\n .then(data => {\n setState({\n data,\n loading: false,\n loaded: true,\n });\n })\n .catch(error => {\n setState({\n error,\n loading: false,\n loaded: false,\n });\n }).finally(() => {\n dispatch(fetchEnd()); // stop the global loading indicator\n });\n\n return (() => {\n setState(initialState);\n })\n }, [dispatch, version])\n\n return state;\n}\n\nexport default useInfo ","import React, { useEffect } from \"react\";\nimport Button from '@material-ui/core/Button';\nimport List from '@material-ui/core/List';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport { useTranslate, useNotify } from \"react-admin\";\nimport useInfo from \"./useInfo\";\n\n\n\n\nconst InformationServicesList = (props) => {\n const translate = useTranslate()\n const notify = useNotify()\n const { data, error, loading, loaded } = useInfo();\n\n const handleCopy = (json) => {\n navigator.clipboard.writeText(JSON.stringify(json, null, '\\t')).then(() => {\n notify('ra.notification.json_copied', 'info');\n }).catch((error) => {\n\n })\n };\n\n useEffect(() => {\n if (error) {\n notify(\"ra.page.error\", 'warning');\n }\n }, [error])\n\n if (error) return null\n if (!loaded || loading) return translate(\"ra.page.loading\")\n\n\n\n return (\n <div>\n <List dense>\n {data.map(item => {\n const info = item.data\n\n return (\n <ListItem key={info.name}>\n <ListItemText primary={info.name} secondary={info.version} />\n </ListItem>\n )\n })}\n </List>\n <Button\n color=\"primary\"\n onClick={() => handleCopy(data)}\n >\n {translate(\"ra.action.json_copy\")}\n </Button>\n </div>\n )\n}\n\nexport default InformationServicesList","import Information from './Information'\n\n\nexport default Information","import React from \"react\";\nimport AboutShow from \"../AboutShow\";\nimport InformationServicesList from \"./InformationServicesList\";\n\n\n\n\nconst Information = (props) => {\n\n return (\n <AboutShow\n {...props}\n title=\"ra.page.information\"\n >\n <InformationServicesList />\n </AboutShow>\n\n )\n}\n\nexport default Information","import React from \"react\";\nimport { Route } from 'react-router-dom';\nimport { WithPermissions } from 'ra-core';\n\nimport AccountMeShow from './components/Account/AccountMeShow';\nimport AccountMeEdit from './components/Account/AccountMeEdit';\nimport ProfileMeEdit from './components/Profile/ProfileMeEdit';\nimport ProfileMeShow from './components/Profile/ProfileMeShow';\nimport { WidgetOnDashboardShow, WidgetOnDashboardCreate, WidgetOnDashboardEdit, WidgetOnDashboardPlay } from './components/WidgetOnDashboard';\nimport DashboardPlay from './components/Dashboard/DashboardPlay';\nimport Releases from './components/About/Releases';\nimport Information from './components/About/Information';\n\n\n\n\nconst customRoutes = [\n <Route\n key=\"AccountMeEdit\"\n path=\"/Account/me\"\n exact\n render={routeProps => (\n <WithPermissions\n component={AccountMeEdit}\n basePath=\"/Account\"\n resource=\"Account\"\n {...routeProps}\n />\n )}\n />,\n <Route\n key=\"AccountMeShow\"\n path=\"/Account/me/show\"\n render={routeProps => (\n <WithPermissions\n component={AccountMeShow}\n basePath=\"/Account\"\n resource=\"Account\"\n {...routeProps}\n />\n )}\n />,\n <Route\n key=\"ProfileMeEdit\"\n path=\"/Profile/me\"\n exact\n render={routeProps => (\n <WithPermissions\n component={ProfileMeEdit}\n basePath=\"/Profile\"\n resource=\"Profile\"\n {...routeProps}\n />\n )}\n />,\n <Route\n key=\"ProfileMeShow\"\n path=\"/Profile/me/show\"\n render={routeProps => (\n <WithPermissions\n component={ProfileMeShow}\n basePath=\"/Profile\"\n resource=\"Profile\"\n {...routeProps}\n />\n )}\n />,\n <Route\n path=\"/Dashboard/:id/play\"\n render={routeProps => (\n <WithPermissions\n component={DashboardPlay}\n basePath=\"/Dashboard\"\n resource=\"Dashboard\"\n id={decodeURIComponent(routeProps.match.params.id)}\n {...routeProps}\n />\n )}\n />,\n <Route\n path=\"/Dashboard/:dashboardId/WidgetOnDashboard/:id/show\"\n render={routeProps => (\n <WithPermissions\n component={WidgetOnDashboardShow}\n basePath={`/Dashboard/${decodeURIComponent(routeProps.match.params.dashboardId)}/WidgetOnDashboard`}\n resource=\"WidgetOnDashboard\"\n id={decodeURIComponent(routeProps.match.params.id)}\n dashboardId={decodeURIComponent(routeProps.match.params.dashboardId)}\n {...routeProps}\n />\n )}\n />,\n <Route\n path=\"/Dashboard/:dashboardId/WidgetOnDashboard/:id/play\"\n render={routeProps => (\n <WithPermissions\n component={WidgetOnDashboardPlay}\n basePath={`/Dashboard/${decodeURIComponent(routeProps.match.params.dashboardId)}/WidgetOnDashboard`}\n resource=\"WidgetOnDashboard\"\n id={decodeURIComponent(routeProps.match.params.id)}\n dashboardId={decodeURIComponent(routeProps.match.params.dashboardId)}\n {...routeProps}\n />\n )}\n />,\n <Route\n path=\"/Dashboard/:dashboardId/WidgetOnDashboard/create\"\n render={routeProps => (\n <WithPermissions\n {...routeProps}\n component={WidgetOnDashboardCreate}\n basePath={`/Dashboard/${decodeURIComponent(routeProps.match.params.dashboardId)}/WidgetOnDashboard`}\n resource=\"WidgetOnDashboard\"\n dashboardId={decodeURIComponent(routeProps.match.params.dashboardId)}\n record={{ dashboard: { id: decodeURIComponent(routeProps.match.params.dashboardId) } }}\n />\n )}\n />,\n <Route\n path=\"/Dashboard/:dashboardId/WidgetOnDashboard/:id\"\n render={routeProps => (\n <WithPermissions\n component={WidgetOnDashboardEdit}\n basePath={`/Dashboard/${decodeURIComponent(routeProps.match.params.dashboardId)}/WidgetOnDashboard`}\n resource=\"WidgetOnDashboard\"\n id={decodeURIComponent(routeProps.match.params.id)}\n dashboardId={decodeURIComponent(routeProps.match.params.dashboardId)}\n {...routeProps}\n />\n )}\n />,\n <Route\n path=\"/About/releases\"\n render={routeProps => (\n <Releases\n {...routeProps}\n />\n )}\n />,\n <Route\n path=\"/About/information\"\n render={routeProps => (\n <Information\n {...routeProps}\n />\n )}\n />,\n];\n\nexport default customRoutes","import { DASHBOARD_CHANGE_VARIABLES } from './actions';\n\n\nconst defaultDashboardState = {\n variables: undefined\n}\n\nconst dashboardReducer = (previousState = defaultDashboardState, { type, payload }) => {\n if (type === DASHBOARD_CHANGE_VARIABLES) {\n return {\n variables: payload.variables\n };\n }\n return previousState;\n}\n\nexport default dashboardReducer","import dashboardReducer from './redux/dashboard/reducer';\n\nconst customReducers = {\n dashboard: dashboardReducer\n}\n\nexport default customReducers","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Field, Form } from 'react-final-form';\nimport {\n Button,\n CardActions,\n CircularProgress,\n TextField,\n} from '@material-ui/core';\nimport { makeStyles, Theme } from '@material-ui/core/styles';\nimport { useTranslate, useLogin, useNotify, useSafeSetState } from 'ra-core';\n\n\n\nconst useStyles = makeStyles((theme) => ({\n form: {\n padding: '0 1em 1em 1em',\n },\n input: {\n marginTop: '1em',\n },\n button: {\n width: '100%',\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n}),\n { name: 'RaLoginForm' }\n);\n\nconst Input = ({\n meta: { touched, error }, // eslint-disable-line react/prop-types\n input: inputProps, // eslint-disable-line react/prop-types\n ...props\n}) => (\n <TextField\n error={!!(touched && error)}\n helperText={touched && error}\n {...inputProps}\n {...props}\n fullWidth\n />\n);\n\nconst LoginForm = (props) => {\n const { redirectTo } = props;\n const [loading, setLoading] = useSafeSetState(false);\n const login = useLogin();\n const translate = useTranslate();\n const notify = useNotify();\n const classes = useStyles(props);\n\n const validate = (values) => {\n const errors = { username: undefined, password: undefined };\n\n if (!values.username) {\n errors.username = translate('ra.validation.required');\n }\n if (!values.password) {\n errors.password = translate('ra.validation.required');\n }\n return errors;\n };\n\n const submit = values => {\n setLoading(true);\n login(values, redirectTo)\n .then(() => {\n setLoading(false);\n })\n .catch(error => {\n setLoading(false);\n const { message, extensions } = error\n notify(message, { type: 'warning', messageArgs: extensions });\n });\n };\n\n return (\n <Form\n onSubmit={submit}\n validate={validate}\n render={({ handleSubmit }) => (\n <form onSubmit={handleSubmit} noValidate>\n <div className={classes.form}>\n <div className={classes.input}>\n <Field\n autoFocus\n id=\"username\"\n name=\"username\"\n component={Input}\n label={translate('ra.auth.username')}\n disabled={loading}\n />\n </div>\n <div className={classes.input}>\n <Field\n id=\"password\"\n name=\"password\"\n component={Input}\n label={translate('ra.auth.password')}\n type=\"password\"\n disabled={loading}\n autoComplete=\"current-password\"\n />\n </div>\n </div>\n <CardActions>\n <Button\n variant=\"contained\"\n type=\"submit\"\n color=\"primary\"\n disabled={loading}\n className={classes.button}\n >\n {loading && (\n <CircularProgress\n className={classes.icon}\n size={18}\n thickness={2}\n />\n )}\n {translate('ra.auth.sign_in')}\n </Button>\n </CardActions>\n </form>\n )}\n />\n );\n};\n\nLoginForm.propTypes = {\n redirectTo: PropTypes.string,\n};\n\nexport default LoginForm;\n","import React, {\n createElement,\n useEffect,\n useMemo,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport { Card, Avatar } from '@material-ui/core';\nimport { createTheme, makeStyles } from '@material-ui/core/styles';\nimport { ThemeProvider } from '@material-ui/styles';\nimport LockIcon from '@material-ui/icons/Lock';\nimport Typography from '@material-ui/core/Typography';\nimport Link from '@material-ui/core/Link';\nimport defaultThemes from '../../lib/layout/themes';\nimport { Notification as DefaultNotification } from 'react-admin';\nimport LoginForm from './LoginForm';\n// import LoginBackgroundLight from '../../lib/images/LoginBackgroundLight.svg';\n// import LoginBackgroundDark from '../../lib/images/LoginBackgroundDark.svg';\n// import loginImage from '../../lib/images/LoginImage.svg';\nimport { APPLICATION_PROJECT, APPLICATION_TITLE, APPLICATION_ATTRIBUTION, APPLICATION_LICENSE_URL } from '../../appsettings';\n\n\n\nconst useStyles = makeStyles((theme) => ({\n main: {\n display: 'flex',\n minHeight: '100vh',\n backgroundColor: theme.palette.background.default\n },\n illustration: {\n flexGrow: 1,\n display: 'flex',\n flexDirection: 'column',\n backgroundColor: theme.palette.background.paper,\n boxShadow: theme.shadows[1],\n },\n illustrationImage: {\n position: \"relative\",\n overflow: \"hidden\",\n height: \"50%\",\n backgroundImage: theme.palette.type === \"light\" ? `url(${process.env.PUBLIC_URL}/images/LoginImage.svg), url(${process.env.PUBLIC_URL}/images/LoginBackgroundLight.svg)` : `url(${process.env.PUBLIC_URL}/images/LoginImage.svg), url(${process.env.PUBLIC_URL}/images/LoginBackgroundDark.svg)`,\n backgroundRepeat: 'no-repeat, no-repeat',\n backgroundSize: 'auto, cover',\n backgroundPosition: \"left 4% bottom 0, left 8% bottom 0\",\n },\n attribution: {\n marginTop: \"auto\",\n padding: theme.spacing(8),\n },\n form: {\n padding: theme.spacing(12),\n },\n logo: {\n padding: theme.spacing(8),\n },\n title: {\n fontWeight: 500\n },\n subtitle: {\n\n },\n card: {\n minWidth: 300,\n marginTop: '6em',\n },\n avatar: {\n margin: '1em',\n display: 'flex',\n justifyContent: 'center',\n },\n icon: {\n backgroundColor: theme.palette.secondary[500],\n },\n}),\n { name: 'RaLogin' }\n);\n\nconst Login = ({ theme, ...props }) => {\n\n const muiTheme = useMemo(() => createTheme(theme), [theme])\n\n return (\n <ThemeProvider theme={muiTheme}>\n <LoginPage {...props} />\n </ThemeProvider>\n );\n};\n\nconst LoginPage = props => {\n const {\n theme,\n title,\n classes: classesOverride,\n className,\n children,\n notification,\n staticContext,\n backgroundImage,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n\n return (\n <div className={classnames(classes.main, className)} {...rest} >\n <div className={classes.illustration}>\n <div className={classes.logo}>\n <Typography variant=\"subtitle1\" color=\"textSecondary\" className={classes.subtitle}>{APPLICATION_PROJECT}</Typography>\n <Typography variant=\"h2\" color=\"textPrimary\" className={classes.title}>{APPLICATION_TITLE}</Typography>\n </div>\n <div className={classes.illustrationImage} />\n <div className={classes.attribution}>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"span\">{APPLICATION_ATTRIBUTION} {APPLICATION_LICENSE_URL ? <Link href={APPLICATION_LICENSE_URL}>Лицензионное соглашение</Link> : \"\"}</Typography>\n </div>\n </div>\n <div className={classes.form}>\n <Card className={classes.card}>\n <div className={classes.avatar}>\n <Avatar className={classes.icon}>\n <LockIcon />\n </Avatar>\n </div>\n <LoginForm />\n </Card>\n </div>\n {notification ? createElement(notification) : null}\n </div>\n );\n};\n\nLogin.propTypes = {\n backgroundImage: PropTypes.string,\n children: PropTypes.node,\n classes: PropTypes.object,\n className: PropTypes.string,\n theme: PropTypes.object,\n staticContext: PropTypes.object,\n};\n\nLogin.defaultProps = {\n theme: defaultThemes.light,\n notification: DefaultNotification,\n};\n\nexport default Login;\n","import Login from './Login';\n\nexport default Login","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { useResourceDefinition } from 'react-admin';\nimport useDashboardContext from '../../controller/dashboard/useDashboardContext';\nimport DashboardPlayToolbar from './DashboardPlayToolbar';\nimport DashboardPlayLayout from './DashboardPlayLayout';\nimport DashboardChangeLayoutSnackbar from './DashboardChangeLayoutSnackbar';\nimport DashboardLinksToolbar from './DashboardLinksToolbar';\nimport DashboardDeleted from './DashboardDeleted';\n\n\n\nconst DashboardPlayViewSimple = (props) => {\n const {\n Actions,\n children,\n classes: classesOverride,\n className,\n editable = true,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n\n const {\n basePath,\n hasList,\n record,\n resource,\n version,\n variables,\n variablesValues,\n } = useDashboardContext(props);\n const { hasEdit } = useResourceDefinition(props);\n if (!record) return null\n const deleted = record?.deleted\n if (deleted) return (<DashboardDeleted record={record} />)\n const hasVariables = Array.isArray(variables) && variables.length > 0\n const hasActions = Boolean(Actions)\n const hasLinks = Array.isArray(record.links) && record.links.length > 0\n const dashboardVariablesLoaded = variables ? variables.map(variable => variablesValues ? !(variablesValues[variable] == null) : false).every(Boolean) : true\n\n\n return (\n <div\n className={classnames('dashboard-page', classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n {(hasVariables || hasActions) && (\n <DashboardPlayToolbar\n Actions={Actions}\n basePath={basePath}\n data={record}\n hasList={hasList}\n hasEdit={hasEdit}\n resource={resource}\n variables={variables}\n />\n )}\n {hasLinks && (<DashboardLinksToolbar basePath={basePath} data={record} resource={resource} />)}\n <div className={classnames(classes.main)}>\n <div className={classes.mainContent}>\n {record && dashboardVariablesLoaded && (\n <DashboardPlayLayout resource={resource} basePath={basePath} record={record} version={version} viewOnly />\n )}\n </div>\n </div>\n <DashboardChangeLayoutSnackbar />\n </div>\n );\n};\n\nDashboardPlayViewSimple.propTypes = {\n Actions: PropTypes.oneOfType([PropTypes.element, PropTypes.bool]),\n aside: PropTypes.element,\n basePath: PropTypes.string,\n children: PropTypes.element,\n classes: PropTypes.object,\n className: PropTypes.string,\n defaultTitle: PropTypes.any,\n hasEdit: PropTypes.bool,\n hasList: PropTypes.bool,\n loading: PropTypes.bool,\n loaded: PropTypes.bool,\n record: PropTypes.object,\n resource: PropTypes.string,\n version: PropTypes.node,\n};\n\nDashboardPlayViewSimple.defaultProps = {\n classes: {},\n};\n\nconst useStyles = makeStyles(\n {\n root: {},\n main: {\n display: 'flex',\n },\n mainContent: {\n flex: '1 1 auto',\n },\n },\n { name: 'DashboardPlayViewSimple' }\n);\n\nconst sanitizeRestProps = ({\n basePath = null,\n defaultTitle = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasDashboard = null,\n history = null,\n id = null,\n loaded = null,\n loading = null,\n location = null,\n match = null,\n options = null,\n refetch = null,\n permissions = null,\n range = null,\n setRange = null,\n variables = null,\n variablesValues = null,\n setVariablesValues = null,\n editable = null,\n setEditable = null,\n setLayouts = null,\n saveLayouts = null,\n ...rest\n}) => rest;\n\n\nexport default DashboardPlayViewSimple","import * as React from 'react';\nimport { Typography } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Dashboard from '@material-ui/icons/Dashboard';\nimport {\n EditButton,\n} from 'react-admin';\n\n\n\nconst Empty = (props) => {\n const classes = useStyles(props);\n\n return (\n <div className={classes.root}>\n <div className={classes.message}>\n <Dashboard className={classes.icon} />\n <Typography variant=\"h5\" paragraph>\n Панель на главной странице не установлена\n </Typography>\n <Typography variant=\"body1\">\n Отредактируйте текущий профиль\n </Typography>\n </div>\n\n <div className={classes.toolbar}>\n <EditButton basePath=\"/Profile\" record={{ id: \"me\" }} />\n </div>\n\n </div>\n );\n};\n\n\nconst useStyles = makeStyles(\n theme => ({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n flexGrow: 1,\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n message: {\n textAlign: 'center',\n opacity: theme.palette.type === 'light' ? 0.5 : 0.8,\n margin: '0 1em',\n color:\n theme.palette.type === 'light'\n ? 'inherit'\n : theme.palette.text.primary,\n },\n icon: {\n width: 56,\n height: 56,\n },\n toolbar: {\n textAlign: 'center',\n marginTop: '2em',\n },\n }), { name: 'RaEmpty' });\n\nexport default Empty","import React, { useCallback } from \"react\";\nimport { ResourceContextProvider } from 'ra-core';\nimport { useNotify } from 'react-admin';\nimport useDashboardController from '../../controller/dashboard/useDashboardController';\nimport DashboardContextProvider from '../../controller/dashboard/DashboardContextProvider';\nimport DashboardPlayViewSimple from '../../lib/dashboard/DashboardPlayViewSimple';\nimport MainDashboardEmpty from './MainDashboardEmpty';\nimport useRemoteStorage from '../../controller/remoteStorage/useRemoteStorage';\n\n\n\nconst MainDashboard = (props) => {\n const notify = useNotify();\n const [defaultDashboardId] = useRemoteStorage(\"Main.defaultDashboard.id\")\n const handleFailure = useCallback(() => {\n notify('ra.notification.item_doesnt_exist', {\n type: 'warning',\n });\n }, [notify])\n\n const controllerProps = useDashboardController({ basePath: \"/Dashboard\", resource: \"Dashboard\", id: defaultDashboardId, onFailure: handleFailure })\n\n return (defaultDashboardId && controllerProps.record) ? (\n <ResourceContextProvider value=\"Dashboard\">\n <DashboardContextProvider value={controllerProps}>\n <DashboardPlayViewSimple {...controllerProps} />\n </DashboardContextProvider>\n </ResourceContextProvider>\n ) : (\n <MainDashboardEmpty />\n )\n\n\n};\n\nexport default MainDashboard;","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Title } from 'react-admin';\nimport { APPLICATION_TITLE } from '../../appsettings';\nimport MainDashboard from './MainDashboard';\n\n\n\nconst useStyles = makeStyles(theme => ({\n container: {\n paddingTop: 16,\n display: \"flex\",\n flexDirection: \"column\",\n flexGrow: 1,\n },\n}), { name: 'MainPage' });\n\nconst MainPage = (props) => {\n const classes = useStyles();\n return (\n <div className={classes.container}>\n <Title title={APPLICATION_TITLE} />\n <MainDashboard />\n </div>\n\n );\n};\n\nexport default MainPage","import { Settings } from \"luxon\";\nimport { Pagination, ReferenceInput, ReferenceArrayInput, ExportButton } from 'react-admin';\n\n\n\nSettings.defaultLocale = \"ru\";\n\nPagination.defaultProps = {\n rowsPerPageOptions: [5, 10, 25, 50, 100]\n}\n\nReferenceInput.defaultProps = {\n filter: {},\n filterToQuery: searchText => (searchText ? { q: searchText } : {}),\n sort: { field: 'name', order: 'ASC' },\n perPage: 100\n}\n\nReferenceArrayInput.defaultProps = {\n filter: {},\n filterToQuery: searchText => (searchText ? { q: searchText } : {}),\n sort: { field: 'name', order: 'ASC' },\n perPage: 100\n}\n\nExportButton.defaultProps = {\n maxResults: 5000\n}","import React from 'react';\nimport { Admin, Resource } from 'react-admin';\nimport { APPLICATION_TITLE } from './appsettings';\nimport { Layout, buildThemeFromType } from './lib/layout';\nimport { PreferencesBasedThemeProvider } from '@react-admin/ra-preferences';\n\nimport authProvider from './authProvider';\nimport dataProvider from './dataProvider';\nimport i18nProvider from './i18nProvider';\nimport customRoutes from './customRoutes';\nimport customReducers from './customReducers';\nimport Login from './components/Login';\nimport Main from './components/Main';\n\n\n\n\nimport { AssetName, AssetIcon, AssetList, AssetCreate, AssetEdit, AssetShow } from './components/Asset';\nimport { EventName, EventIcon, EventList, EventShow } from './components/Event';\nimport { EventHistoryName, EventHistoryIcon, EventHistoryList, EventHistoryShow } from './components/EventHistory';\nimport { LabelName, LabelIcon, LabelList, LabelShow, LabelCreate, LabelEdit } from './components/Label';\nimport { AssetClassName, AssetClassIcon, AssetClassList, AssetClassCreate, AssetClassEdit, AssetClassShow } from './components/AssetClass';\nimport { AssetDatagridName, AssetDatagridIcon, AssetDatagridList } from './components/AssetDatagrid';\nimport { AssetMapName, AssetMapIcon, AssetMapList } from './components/AssetMap';\nimport { AssetTreeName, AssetTreeIcon, AssetTreeList } from './components/AssetTree';\nimport { TagName, TagIcon, TagList } from './components/Tag';\nimport { TagSeriesName, TagSeriesIcon, TagSeriesList } from './components/TagSeries';\nimport { DashboardName, DashboardIcon, DashboardList, DashboardCreate, DashboardEdit, DashboardShow } from './components/Dashboard';\nimport { WidgetName, WidgetIcon, WidgetList, WidgetCreate, WidgetEdit, WidgetShow } from './components/Widget';\nimport { WidgetOnDashboardName, WidgetOnDashboardCreate, WidgetOnDashboardEdit, WidgetOnDashboardShow } from './components/WidgetOnDashboard';\nimport { FileName, FileIcon, FileList, FileShow, FileEdit } from './components/File';\nimport { HistoryName, HistoryIcon, HistoryList, HistoryShow } from './components/History';\nimport { ReportName, ReportIcon, ReportList, ReportShow, ReportCreate, ReportEdit } from './components/Report';\n\nimport './defaults'\n\n\n// https://stackoverflow.com/questions/63746078/apollo-client-3-0-cache-with-namespaced-queries\n\nconst App = () => {\n\n return (\n <PreferencesBasedThemeProvider themeFromType={buildThemeFromType}>\n <Admin\n authProvider={authProvider}\n dataProvider={dataProvider}\n dashboard={Main}\n disableTelemetry\n i18nProvider={i18nProvider}\n customReducers={customReducers}\n customRoutes={customRoutes}\n layout={Layout}\n loginPage={Login}\n title={APPLICATION_TITLE}\n >\n {permissions => [\n <Resource name={LabelName}\n list={permissions.can('getList', LabelName) && LabelList}\n show={permissions.can('getOne', LabelName) && LabelShow}\n create={permissions.can('create', LabelName) && LabelCreate}\n edit={permissions.can('update', LabelName) && LabelEdit}\n icon={LabelIcon}\n />,\n <Resource name={AssetName}\n list={permissions.can('getList', AssetName) && AssetList}\n show={permissions.can('getOne', AssetName) && AssetShow}\n create={permissions.can('create', AssetName) && AssetCreate}\n edit={permissions.can('update', AssetName) && AssetEdit}\n icon={AssetIcon}\n />,\n <Resource name=\"AssetWithVariable\" />,\n <Resource name={AssetClassName}\n list={permissions.can('getList', AssetClassName) && AssetClassList}\n show={permissions.can('getOne', AssetClassName) && AssetClassShow}\n create={permissions.can('create', AssetClassName) && AssetClassCreate}\n edit={permissions.can('update', AssetClassName) && AssetClassEdit}\n icon={AssetClassIcon}\n />,\n <Resource name={AssetDatagridName}\n list={permissions.can('getList', AssetName) && AssetDatagridList}\n icon={AssetDatagridIcon}\n />,\n <Resource name={AssetMapName}\n list={permissions.can('getList', AssetName) && AssetMapList}\n icon={AssetMapIcon}\n />,\n <Resource name={AssetTreeName}\n list={permissions.can('getList', AssetName) && AssetTreeList}\n icon={AssetTreeIcon}\n />,\n <Resource name={TagName}\n list={permissions.can('getList', TagName) && TagList}\n icon={TagIcon}\n />,\n <Resource name={EventName}\n list={permissions.can('getList', EventName) && EventList}\n show={permissions.can('getOne', EventName) && EventShow}\n icon={EventIcon}\n />,\n <Resource name={EventHistoryName}\n list={permissions.can('getList', EventHistoryName) && EventHistoryList}\n show={permissions.can('getOne', EventHistoryName) && EventHistoryShow}\n icon={EventHistoryIcon}\n />,\n <Resource name={TagSeriesName}\n list={permissions.can('getList', 'TagHistory') && TagSeriesList}\n icon={TagSeriesIcon}\n />,\n <Resource name={DashboardName}\n list={permissions.can('getList', DashboardName) && DashboardList}\n show={permissions.can('getOne', DashboardName) && DashboardShow}\n create={permissions.can('create', DashboardName) && DashboardCreate}\n edit={permissions.can('update', DashboardName) && DashboardEdit}\n icon={DashboardIcon}\n />,\n <Resource name={WidgetName}\n list={permissions.can('getList', WidgetName) && WidgetList}\n show={permissions.can('getOne', WidgetName) && WidgetShow}\n create={permissions.can('create', WidgetName) && WidgetCreate}\n edit={permissions.can('update', WidgetName) && WidgetEdit}\n icon={WidgetIcon}\n />,\n <Resource name={WidgetOnDashboardName}\n show={permissions.can('getOne', WidgetOnDashboardName) && WidgetOnDashboardShow}\n create={permissions.can('create', WidgetOnDashboardName) && WidgetOnDashboardCreate}\n edit={permissions.can('update', WidgetOnDashboardName) && WidgetOnDashboardEdit}\n />,\n <Resource name={FileName}\n list={permissions.can('getList', FileName) && FileList}\n show={permissions.can('getOne', FileName) && FileShow}\n edit={permissions.can('update', FileName) && FileEdit}\n icon={FileIcon}\n />,\n <Resource name={ReportName}\n list={permissions.can('getList', ReportName) && ReportList}\n show={permissions.can('getOne', ReportName) && ReportShow}\n create={permissions.can('create', ReportName) && ReportCreate}\n edit={permissions.can('update', FileName) && ReportEdit}\n icon={ReportIcon}\n />,\n <Resource name=\"ReportType\" />,\n <Resource name=\"AssetType\" />,\n <Resource name=\"Catalog\" />,\n <Resource name=\"Parameter\" />,\n <Resource name=\"ParameterWithVariable\" />,\n <Resource name=\"Account\" />,\n <Resource name=\"Application\" />,\n <Resource name=\"Profile\" />,\n <Resource name=\"Rule\" />,\n <Resource name=\"TagByNode\" />,\n <Resource name=\"AbilityServiceResource\" />,\n <Resource name=\"TagHistory\" />,\n <Resource name={HistoryName}\n list={permissions.can('getList', HistoryName) && HistoryList}\n show={permissions.can('getOne', HistoryName) && HistoryShow}\n icon={HistoryIcon}\n />,\n // <Resource {...User} />,\n ]}\n\n\n\n </Admin>\n </PreferencesBasedThemeProvider>\n\n )\n};\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport { register } from './serviceWorker';\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\n// serviceWorker.unregister();\nregister()\n\n","export const register = () => {\n if ('serviceWorker' in navigator) {\n\n window.addEventListener('load', () => {\n const swUrl = `/sw.js`;\n\n navigator.serviceWorker.register(swUrl)\n .then((sw) => {\n console.log('Service Worker registration successful')\n })\n .catch(function (error) {\n console.error('Service Worker Error', error);\n });\n });\n }\n};\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M14,17H7V15H14M17,13H7V11H17M17,9H7V7H17M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M15.5,17H14L12,9.5L10,17H8.5L6.1,7H7.8L9.34,14.5L11.3,7H12.7L14.67,14.5L16.2,7H17.9M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M16.2,17H14.2L12,13.2L9.8,17H7.8L11,12L7.8,7H9.8L12,10.8L14.2,7H16.2L13,12M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M19,3A2,2 0 0,1 21,5V19A2,2 0 0,1 19,21H5C3.89,21 3,20.1 3,19V5C3,3.89 3.89,3 5,3H19M10.59,10.08C10.57,10.13 10.3,11.84 8.5,14.77C8.5,14.77 5,16.58 5.83,17.94C6.5,19 8.15,17.9 9.56,15.27C9.56,15.27 11.38,14.63 13.79,14.45C13.79,14.45 17.65,16.19 18.17,14.34C18.69,12.5 15.12,12.9 14.5,13.09C14.5,13.09 12.46,11.75 12,9.89C12,9.89 13.13,5.95 11.38,6C9.63,6.05 10.29,9.12 10.59,10.08M11.4,11.13C11.43,11.13 11.87,12.33 13.29,13.58C13.29,13.58 10.96,14.04 9.9,14.5C9.9,14.5 10.9,12.75 11.4,11.13M15.32,13.84C15.9,13.69 17.64,14 17.58,14.32C17.5,14.65 15.32,13.84 15.32,13.84M8.26,15.7C7.73,16.91 6.83,17.68 6.6,17.67C6.37,17.66 7.3,16.07 8.26,15.7M11.4,8.76C11.39,8.71 11.03,6.57 11.4,6.61C11.94,6.67 11.4,8.71 11.4,8.76Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M14,17H12V15H10V13H12V15H14M14,9H12V11H14V13H12V11H10V9H12V7H10V5H12V7H14M19,3H5C3.89,3 3,3.89 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M13,9H18.5L13,3.5V9M6,2H14L20,8V20A2,2 0 0,1 18,22H6C4.89,22 4,21.1 4,20V4C4,2.89 4.89,2 6,2M7,20H9V14H7V20M11,20H13V12H11V20M15,20H17V16H15V20Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport TextIcon from '../icons/DocumentBox';\nimport WordIcon from '../icons/WordBox';\nimport ExcelIcon from '../icons/ExcelBox';\nimport PdfIcon from '../icons/PdfBox';\nimport ImageIcon from '@material-ui/icons/Image';\nimport ZipIcon from '../icons/ZipBox';\nimport MovieIcon from '@material-ui/icons/Movie';\nimport AudiotrackIcon from '@material-ui/icons/Audiotrack';\nimport FileChart from '../icons/FileChart';\nimport { typeMap } from './utils';\n\n\n\n\nconst FileIcon = ({ record, ...props }) => {\n const type = record?.type;\n\n if (typeMap.doc.includes(type)) return (<WordIcon {...props} style={{ color: \"#366DBC\" }} />)\n if (typeMap.pdf.includes(type)) return (<PdfIcon {...props} style={{ color: \"#E21E00\" }} />)\n if (typeMap.text.includes(type)) return (<TextIcon {...props} style={{ color: \"#576D7E\" }} />)\n if (typeMap.xls.includes(type)) return (<ExcelIcon {...props} style={{ color: \"#1D7E44\" }} />)\n if (typeMap.zip.includes(type)) return (<ZipIcon {...props} style={{ color: \"#FDCC77\" }} />)\n if (typeMap.audio.includes(type)) return (<AudiotrackIcon {...props} style={{ color: \"#ff9800\" }} />)\n if (typeMap.video.includes(type)) return (<MovieIcon {...props} style={{ color: \"#673ab7\" }} />)\n if (typeMap.image.includes(type)) return (<ImageIcon {...props} style={{ color: \"#EB5757\" }} />)\n if (typeMap.report.includes(type)) return (<FileChart {...props} style={{ color: \"#3f51b5\" }} />)\n return (<TextIcon />)\n\n};\n\n\nexport default FileIcon;","import React, { memo, useCallback } from 'react';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport { useRecordContext } from 'ra-core';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\n\n\nconst stopPropagation = e => e.stopPropagation();\n\nconst copyClipboard = async (text) => {\n //https://github.com/feross/clipboard-copy\n // Use the Async Clipboard API when available. Requires a secure browsing\n // context (i.e. HTTPS)\n\n if (!navigator.clipboard) throw new DOMException('The request is not allowed', 'NotAllowedError')\n\n return navigator.clipboard.writeText(text)\n}\n\n\nconst TextCopyField = memo(props => {\n const { className, source, emptyText, ...rest } = props;\n const record = useRecordContext(props);\n const value = get(record, source);\n const handleCopy = useCallback((event) => {\n stopPropagation(event)\n copyClipboard(value)\n }, [value])\n\n return (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n onClick={handleCopy}\n style={{ cursor: \"copy\" }}\n {...sanitizeFieldRestProps(rest)}\n >\n {value != null && typeof value !== 'string'\n ? JSON.stringify(value)\n : value || emptyText}\n </Typography>\n );\n});\n\n// what? TypeScript loses the displayName if we don't set it explicitly\nTextCopyField.displayName = 'TextCopyField';\n\nTextCopyField.defaultProps = {\n addLabel: true,\n};\n\nexport default TextCopyField;\n","\nimport { createClient } from 'graphql-ws';\nimport checkToken, { getCurrentTokenExpiresIn } from '../../authProvider/authorizationProvider/checkToken';\nimport { WS_DATABUS_SERVICE } from '../../appsettings';\n\n\n\nclass graphqlWsClient {\n constructor(enpoint) {\n\n let tokenExpiryTimeout = null;\n\n const client = createClient({\n url: enpoint,\n keepAlive: 10000,\n\n /**\n * Controls when should the connection be established.\n *\n * - `false`: Establish a connection immediately. Use `onNonLazyError` to handle errors.\n * - `true`: Establish a connection on first subscribe and close on last unsubscribe. Use\n * the subscription sink's `error` to handle errors.\n *\n * @default true\n */\n lazy: true,\n\n /**\n * How long should the client wait before closing the socket after the last oparation has\n * completed. This is meant to be used in combination with `lazy`. You might want to have\n * a calmdown time before actually closing the connection. Kinda' like a lazy close \"debounce\".\n *\n * @default 0\n */\n //lazyCloseTimeout: 10000,\n\n /** shouldRetry\n * Check if the close event or connection error is fatal. If you return `false`,\n * the client will fail immediately without additional retries; however, if you\n * return `true`, the client will keep retrying until the `retryAttempts` have\n * been exceeded.\n *\n * The argument is whatever has been thrown during the connection phase.\n *\n * Beware, the library classifies a few close events as fatal regardless of\n * what is returned here. They are listed in the documentation of the `retryAttempts`\n * option.\n *\n * @default 'Only `CloseEvent`s'\n */\n shouldRetry: () => true,\n\n /** retryAttempts\n * How many times should the client try to reconnect on abnormal socket closure before it errors out?\n *\n * The library classifies the following close events as fatal:\n * - _All internal WebSocket fatal close codes (check `isFatalInternalCloseCode` in `src/client.ts` for exact list)_\n * - `4500: Internal server error`\n * - `4005: Internal client error`\n * - `4400: Bad request`\n * - `4004: Bad response`\n * - `4401: Unauthorized` _tried subscribing before connect ack_\n * - `4406: Subprotocol not acceptable`\n * - `4409: Subscriber for <id> already exists` _distinction is very important_\n * - `4429: Too many initialisation requests`\n *\n * In addition to the aforementioned close events, any _non-CloseEvent_ connection problem\n * is considered fatal by default. However, this specific behaviour can be altered by using\n * the `shouldRetry` option.\n *\n * These events are reported immediately and the client will not reconnect.\n *\n * @default 5\n */\n retryAttempts: 1000000,\n\n /** retryWait\n * Control the wait time between retries. You may implement your own strategy\n * by timing the resolution of the returned promise with the retries count.\n * `retries` argument counts actual connection attempts, so it will begin with\n * 0 after the first retryable disconnect.\n *\n * @default 'Randomised exponential backoff'\n */\n retryWait: async () => {\n await new Promise((resolve) => setTimeout(resolve, 5000));\n },\n\n connectionParams: async () => {\n try {\n const token = await checkToken();\n return {\n authorization: token ? `Bearer ${token}` : \"\",\n }\n } catch (err) {\n console.error(err.message);\n //if(err.message == 'No tokens in cookies') {\n window.location.reload();\n //} \n }\n\n return {};\n },\n\n on: {\n connected: (socket) => {\n if (tokenExpiryTimeout) {\n clearTimeout(tokenExpiryTimeout);\n }\n\n var tokenExpiresIn = getCurrentTokenExpiresIn();\n if (tokenExpiresIn > 0) {\n tokenExpiryTimeout = setTimeout(() => {\n if (socket.readyState === WebSocket.OPEN)\n socket.close(4403, 'Forbidden');\n }, tokenExpiresIn);\n }\n }\n }\n });\n\n /*\n connecting\n opened\n connected\n ping\n pong\n message\n closed\n error\n\n client.on('connected', () => {\n console.log('CONNECTED');\n });\n */\n\n /*\n return {\n ...client,\n subscribe : (payload, sink) => {\n //const token = await checkToken();\n return client.subscribe({ \n //authorization: token ? `Bearer ${token}` : \"\", \n ...payload\n }, sink);\n }\n };*/\n\n return client;\n }\n}\n\nconst client = new graphqlWsClient(WS_DATABUS_SERVICE);\n\n\n\nexport default client","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\nimport { Typography, Link } from '@material-ui/core';\nimport { useRecordContext, useTranslate } from 'ra-core';\nimport { AUTHORIZATION_TOKEN_COOKIE } from '../../appsettings';\nimport { getCookie } from '../../utils';\n\n\n\nexport const getUrlWithToken = (url) => {\n const token = getCookie(AUTHORIZATION_TOKEN_COOKIE)\n return `${url}?${token}`;\n};\n\nconst UrlField = memo(props => {\n const { className, emptyText, source, replaceValue, ...rest } = props;\n const translate = useTranslate();\n const record = useRecordContext(props);\n const value = get(record, source);\n const url = getUrlWithToken(value);\n\n\n if (value == null) {\n return (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {emptyText}\n </Typography>\n );\n }\n\n return (\n <Link\n className={className}\n href={url}\n variant=\"body2\"\n {...sanitizeFieldRestProps(rest)}\n >\n {replaceValue ? translate(replaceValue, { _: replaceValue }) : value}\n </Link>\n );\n});\n\nUrlField.defaultProps = {\n addLabel: true,\n};\n\n\n\nexport default UrlField;\n","import React, { useState, useCallback, cloneElement, Children } from 'react';\nimport { useTranslate } from 'react-admin';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\n\n\n\n\n\n\nconst DialogField = props => {\n const {\n children,\n label = 'ra.action.open',\n ...rest\n } = props;\n\n\n const translate = useTranslate();\n //const resource = useResourceContext(props);\n const [open, setOpen] = useState(false);\n\n\n const handleOpen = useCallback(event => {\n setOpen(true);\n event.stopPropagation();\n }, [setOpen]);\n\n const handleClose = useCallback(event => {\n setOpen(false);\n event.stopPropagation();\n }, [setOpen]);\n\n\n return (\n <>\n <Button onClick={handleOpen} size=\"small\" style={{ marginBlock: -4, }}>\n {translate(label)}\n </Button>\n <Dialog\n open={open}\n onClose={handleClose}\n aria-labelledby=\"dialog-field\"\n >\n <DialogTitle id=\"dialog-field\">{translate(\"ra.message.dialog_field_title\")}</DialogTitle>\n\n\n <DialogContent>\n <DialogContentText >{translate(\"ra.message.dialog_field_content\", { tag: rest.record.id })}</DialogContentText>\n\n {cloneElement(Children.only(children), { ...rest })}\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose}>\n {translate(\"ra.action.cancel\")}\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n\n\n\nexport default DialogField;\n","import { makeStyles } from '@material-ui/core/styles';\n\nconst useTagValueStyles = makeStyles(theme => ({\n quality: ({ quality }) => {\n switch (quality) {\n case 11: {\n return { color: \"#EF6C00\" } // тест\n }\n case 0: {\n return { color: \"rgba(0, 0, 0, 0.87)\" } // норма\n }\n default: {\n return { color: \"#757575\" }\n }\n }\n },\n qualityBad: { opacity: theme.palette.action.disabledOpacity },\n}), { name: \"TagValueField\" });\n\nexport default useTagValueStyles","import React from \"react\";\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport { TextField, DateField, EmailField, NumberField } from 'react-admin';\nimport BooleanField from '../../lib/field/BooleanField';\nimport UrlField from '../../lib/field/UrlField';\nimport PhoneNumberField from '../../lib/field/PhoneNumberField';\nimport MarkdownField from '../../lib/field/MarkdownField';\nimport DialogField from '../../lib/field/DialogField';\nimport SelectField from '../../lib/field/SelectField';\nimport { dateTimeOptions, floatNumberOptions, intNumberOptions, isNull } from '../../utils';\nimport useTagValueStyles from './useTagValueStyles';\n\nconst getEmptyText = (record, { source }) => get(record, source)\n\nconst TagValueField = (props) => {\n const { record } = props\n if (!record) return null\n const type = get(record, [\"parameter\", \"type\"])\n const display = get(record, [\"parameter\", \"display\"])\n const finalType = (display === \"ENUM\") ? display : type\n\n switch (finalType) {\n case \"ID\": return <TextField {...props} />\n case \"STRING\": return <TextField {...props} />\n case \"MARKDOWN\": return <DialogField {...props}><MarkdownField /></DialogField>\n case \"BOOLEAN\": return <BooleanField {...props} />\n case \"INT\": return <NumberField {...props} locales='ru-RU' options={get(record, [\"parameter\", \"format\", \"numberFormatOptions\"], intNumberOptions)} />\n case \"BIGINT\": return <NumberField {...props} locales='ru-RU' options={get(record, [\"parameter\", \"format\", \"numberFormatOptions\"], intNumberOptions)} />\n case \"FLOAT\": return <NumberField {...props} locales='ru-RU' options={get(record, [\"parameter\", \"format\", \"numberFormatOptions\"], floatNumberOptions)} />\n case \"DATETIME\": return <DateField {...props} options={get(record, [\"parameter\", \"format\", \"dateTimeFormatOptions\"], dateTimeOptions)} />\n case \"BYTE\": return <NumberField {...props} locales='ru-RU' options={get(record, [\"parameter\", \"format\", \"numberFormatOptions\"], intNumberOptions)} />\n case \"JSON\": return <TextField {...props} />\n case \"EMAIL\": return <EmailField {...props} />\n case \"PHONE\": return <PhoneNumberField {...props} />\n case \"URL\": return <UrlField {...props} replaceValue=\"ra.input.url.text\" />\n case \"IP\": return <TextField {...props} />\n case \"PORT\": return <TextField {...props} />\n case \"POINT\": return <TextField {...props} />\n case \"CRON\": return <TextField {...props} />\n case \"ENUM\": return <SelectField {...props} choices={get(record, [\"parameter\", \"format\", \"valueMappings\", \"choices\"], [])} optionText=\"value\" optionValue=\"id\" emptyText={getEmptyText} />\n default: return <TextField {...props} />\n }\n}\n\n\nconst EnhancedTagValueField = ({ className, ...props }) => {\n const { record, parameter } = props\n const classes = useTagValueStyles();\n if (!record) return null\n if (parameter) record.parameter = parameter\n const unit = get(record, [\"parameter\", \"unit\"])\n const qualityBad = isNull(record.quality) || record.quality > 0;\n const showWriteValue = (!isNull(record.writeValue))\n const showUnit = (!isNull(unit))\n\n\n return (\n <span className={classnames(className, { [classes.qualityBad]: qualityBad })}>\n <TagValueField {...props} className={classes.ellipsis} />\n {showWriteValue && (<> (<TagValueField {...props} source=\"writeValue\" className={classes.ellipsis} />)</>)}\n {showUnit && (<> <span >{unit.name}</span></>)}\n </span>\n )\n}\n\nEnhancedTagValueField.defaultProps = {\n addLabel: true,\n classes: {},\n};\n\n\nexport default EnhancedTagValueField;\n","const defaultFormatter = (key, value, model, record, translate) => value == null ? null : value\n\nexport default defaultFormatter;","import get from 'lodash/get';\nimport set from 'lodash/set';\nimport uniqBy from 'lodash/uniqBy';\nimport defaultFormatter from './defaultFormatter';\n\n\n\nconst arrayIndexRegex = /\\[index\\]/i;\nexport const getKey = (key) => Array.isArray(key) ? key.join('.') : key\n\nexport const buildData = (model, records, fetchRelatedRecords) => {\n\n const reference = uniqBy(model.filter(item => item.reference).map(({ reference }) => reference), \"resource\")\n const resolvers = reference.map(({ resource, target }) => fetchRelatedRecords(records, target, resource))\n\n return Promise.all(resolvers)\n .then(responses => {\n const data = records.map(record => {\n const referenceFields = reference.reduce((acc, { resource, target }, index) => {\n const referenceValue = get(record, [target])\n return {\n ...acc,\n [target]: Array.isArray(referenceValue)\n ? referenceValue.map(item => responses[index][item])\n : responses[index][referenceValue]\n }\n }, {})\n\n return {\n ...record,\n ...referenceFields,\n }\n });\n return data\n });\n}\n\nexport const buildColumns = (model, translate) => {\n\n const columns = model.map(({ key, header }) => {\n const columnKey = getKey(key)\n const columnHeader = Array.isArray(header) ? header.map(item => translate(item, { _: item })).join('.') : translate(header, { _: header })\n const columnWidth = Math.max(columnHeader.length + 5, 12)\n\n return { header: [columnKey, columnHeader], key: columnKey, width: columnWidth }\n })\n\n return columns\n}\n\nexport const getValue = (key, record) => {\n const value = get(record, key)\n return value\n}\n\nexport const getArrayValue = (key, record) => {\n const splitKey = key.split(\"[index].\")\n const array = get(record, splitKey[0], [])\n const value = array.map(item => get(item, splitKey[1]))\n return value\n}\n\n\nexport const buildRow = (model, record, translate) => {\n const row = model.map(({ key, format = defaultFormatter }) => {\n const isArrayKey = arrayIndexRegex.test(key)\n const value = isArrayKey ? getArrayValue(key, record) : getValue(key, record)\n const formattedValue = isArrayKey ? value.map(item => format(key, item, model, record, translate)).join(\"; \") : format(key, value, model, record, translate)\n return formattedValue\n })\n\n return row\n}\n\nexport const buildRows = (model, records, translate) => {\n const rows = records.map(record => buildRow(model, record, translate))\n return rows\n}\n\nexport const buildArrayValue = (key, record) => {\n const splitKey = key.split(\"[index].\")\n const array = get(record, splitKey[0], [])\n const value = array.map(item => get(item, splitKey[1]))\n return value\n}\n\nexport const buildDataItemFromModel = (model, record) => {\n const item = model.reduce((acc, { key }) => {\n const isArrayKey = arrayIndexRegex.test(key)\n\n if (isArrayKey) {\n const parts = key.split(\"[index].\")\n const items = record[parts[0]]\n if (items.length) {\n items.forEach((item, index) => {\n set(acc, [parts[0], index, parts[1]], item[parts[1]])\n })\n } else {\n set(acc, [parts[0]], items)\n }\n\n return acc\n } else {\n const value = getValue(key, record)\n return set(acc, key, value)\n }\n }, {})\n\n return item\n}\n\nexport const buildDataFromModel = (model, records) => {\n const data = records.map((record) => buildDataItemFromModel(model, record))\n return data\n}\n\nexport const downloadXLSX = (title, xlsx) => {\n\n return xlsx.writeBuffer().then(function (data) {\n const blob = new Blob([data], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" });\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n window.navigator.msSaveOrOpenBlob(blob, title + \".xlsx\");\n } else {\n const url = window.URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n document.body.appendChild(a);\n a.href = url;\n a.download = title + \".xlsx\";\n a.click();\n window.URL.revokeObjectURL(url);\n document.body.removeChild(a);\n }\n });\n}\n\nexport const downloadJSON = (title, data) => {\n const dataStr = `data:text/json;charset=utf-8,${encodeURIComponent(JSON.stringify(data, null, '\\t'))}`;\n const downloadAnchorNode = document.createElement('a');\n downloadAnchorNode.setAttribute(\"href\", dataStr);\n downloadAnchorNode.setAttribute(\"download\", `${title}.json`);\n document.body.appendChild(downloadAnchorNode);\n downloadAnchorNode.click();\n downloadAnchorNode.remove();\n}","import React, { useCallback, useState } from 'react';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport DownloadIcon from '@material-ui/icons/GetApp';\nimport {\n fetchRelatedRecords,\n useDataProvider,\n useNotify,\n useListContext,\n useResourceContext,\n useTranslate,\n} from 'ra-core';\nimport { Button } from 'react-admin';\n\n\nconst ExportButton = (props) => {\n const {\n maxResults = 1000,\n onClick,\n label = 'ra.action.export',\n icon = defaultIcon,\n exporter: customExporter,\n sort, // deprecated, to be removed in v4\n ...rest\n } = props;\n\n const {\n exporter: exporterFromContext,\n filter,\n filterValues,\n currentSort,\n total,\n } = useListContext(props);\n const exporter = customExporter || exporterFromContext;\n const resource = useResourceContext(props);\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const notify = useNotify();\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleOpen = useCallback((event) => {\n setAnchorEl(event.currentTarget);\n });\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n });\n\n const handleXlsxExport = useCallback(event => {\n handleClose()\n dataProvider\n .getList(resource, {\n sort: currentSort || sort,\n filter: filter\n ? { ...filterValues, ...filter }\n : filterValues,\n pagination: { page: 1, perPage: maxResults },\n })\n .then(\n ({ data }) =>\n exporter.xlsxExporter &&\n exporter.xlsxExporter(\n data,\n fetchRelatedRecords(dataProvider),\n dataProvider,\n resource\n )\n )\n .catch(error => {\n console.error(error);\n notify('ra.notification.http_error', { type: 'warning' });\n });\n if (typeof onClick === 'function') {\n onClick(event);\n }\n },\n [\n currentSort,\n dataProvider,\n filter,\n filterValues,\n maxResults,\n notify,\n onClick,\n resource,\n sort,\n ]\n );\n\n const handleJsonExport = useCallback(event => {\n handleClose()\n dataProvider\n .getList(resource, {\n sort: currentSort || sort,\n filter: filter\n ? { ...filterValues, ...filter }\n : filterValues,\n pagination: { page: 1, perPage: maxResults },\n })\n .then(\n ({ data }) =>\n exporter.jsonExporter &&\n exporter.jsonExporter(\n data,\n fetchRelatedRecords(dataProvider),\n dataProvider,\n resource\n )\n )\n .catch(error => {\n console.error(error);\n notify('ra.notification.http_error', { type: 'warning' });\n });\n if (typeof onClick === 'function') {\n onClick(event);\n }\n },\n [\n currentSort,\n dataProvider,\n filter,\n filterValues,\n maxResults,\n notify,\n onClick,\n resource,\n sort,\n ]\n );\n\n\n return (\n <span>\n <Button\n aria-controls=\"export-menu\"\n aria-haspopup=\"true\"\n onClick={handleOpen}\n label={label}\n {...sanitizeRestProps(rest)}\n >\n {icon}\n </Button>\n <Menu\n id=\"export-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n >\n <MenuItem onClick={handleXlsxExport} >{translate('ra.action.xlsx_export')}</MenuItem>\n <MenuItem onClick={handleJsonExport} >{translate('ra.action.json_export')}</MenuItem>\n </Menu>\n </span>\n\n );\n};\n\nconst defaultIcon = <DownloadIcon />;\n\nconst sanitizeRestProps = ({\n basePath,\n filterValues,\n resource,\n ...rest\n}) =>\n rest;\n\nexport default ExportButton;\n","require('dotenv').config();\n\nconst global_env = (process.env.NODE_ENV === 'development') ? process.env : window.ENV;\n\nexport const APPLICATION_GROUP = global_env.REACT_APP_GROUP\nexport const APPLICATION_NAME = global_env.REACT_APP_NAME\nexport const APPLICATION_VERSION = global_env.REACT_APP_VERSION\nexport const APPLICATION_PROJECT = global_env.REACT_APP_PROJECT\nexport const APPLICATION_TITLE = global_env.REACT_APP_TITLE\nexport const APPLICATION_DESCRIPTION = global_env.REACT_APP_DESCRIPTION\nexport const APPLICATION_ATTRIBUTION = global_env.REACT_APP_ATTRIBUTION\nexport const APPLICATION_LICENSE_URL = global_env.REACT_APP_LICENSE_URL\nexport const AUTHENTICATION_TOKEN_COOKIE = `${APPLICATION_GROUP}-authentication-token`\nexport const AUTHENTICATION_REFRESH_TOKEN_COOKIE = `${APPLICATION_GROUP}-authentication-refresh-token`\nexport const AUTHORIZATION_TOKEN_COOKIE = `${APPLICATION_GROUP}-${APPLICATION_NAME}-authorization-token`\nexport const AUTHORIZATION_REFRESH_TOKEN_COOKIE = `${APPLICATION_GROUP}-${APPLICATION_NAME}-authorization-refresh-token`\nexport const DOMAIN_COOKIE = global_env.REACT_APP_DOMAIN_COOKIE\n\n// SERVICE URI's\nexport const URI_AUTHENTICATION_SERVICE = global_env.REACT_APP_URI_AUTHENTICATION_SERVICE || 'http://10.174.18.254:4777'\nexport const URI_AUTHORIZATION_SERVICE = global_env.REACT_APP_URI_AUTHORIZATION_SERVICE || 'http://10.174.18.254:4778'\nexport const URI_ABILITY_SERVICE = global_env.REACT_APP_URI_ABILITY_SERVICE || 'http://10.174.18.254:4555'\nexport const URI_USER_SERVICE = global_env.REACT_APP_URI_USER_SERVICE || 'http://10.174.18.254:3030'\nexport const URI_DISPATCHER_SERVICE = global_env.REACT_APP_URI_DISPATCHER_SERVICE || 'http://localhost:7707'\nexport const URI_GATEWAY_SERVICE = global_env.REACT_APP_URI_GATEWAY_SERVICE || 'http://localhost:7700'\nexport const URI_PREFERENCES_SERVICE = global_env.REACT_APP_URI_PREFERENCES_SERVICE || 'http://localhost:8558'\nexport const URI_EVENTBUS_SERVICE = global_env.REACT_APP_URI_EVENTBUS_SERVICE || 'http://localhost:50057'\nexport const WS_EVENTBUS_SERVICE = global_env.REACT_APP_WS_EVENTBUS_SERVICE || 'ws://localhost:50057'\nexport const URI_DATABUS_SERVICE = global_env.REACT_APP_URI_DATABUS_SERVICE || 'http://10.174.18.254:50062/graphql'\nexport const WS_DATABUS_SERVICE = global_env.REACT_APP_WS_DATABUS_SERVICE || 'ws://10.174.18.254:50062/graphql'\nexport const URI_FILES = global_env.REACT_APP_URI_FILES || 'http://10.174.2.133:9870/graphql'\nexport const URI_BLOB = global_env.REACT_APP_URI_BLOB || 'http://10.174.2.133:14999'\nexport const URI_BLOB_DOWNLOAD = global_env.REACT_APP_URI_BLOB_DOWNLOAD || 'http://10.174.18.83:8128 '\nexport const URI_SCADAJS = global_env.REACT_APP_URI_SCADAJS || 'http://localhost:7022'\nexport const URI_HISTORY_SERVICE = global_env.REACT_APP_URI_HISTORY_SERVICE || 'http://localhost:7708'\nexport const URI_STIMULSOFT_REPORTS = global_env.REACT_APP_URI_STIMULSOFT_REPORTS\nexport const URI_TILE_SERVICE = global_env.REACT_APP_URI_TILE_SERVICE || 'https://{s}.tile.openstreetmap.org'\nexport const URI_REPORTS_SERVICE = global_env.REACT_APP_URI_REPORTS || 'http://localhost:8110/'","import React from 'react';\n\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport red from '@material-ui/core/colors/red';\nimport orange from '@material-ui/core/colors/orange';\nimport green from '@material-ui/core/colors/green';\nimport Chip from '@material-ui/core/Chip';\nimport { sanitizeFieldRestProps } from 'react-admin';\nimport { useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { isNull } from '../../utils';\n\n\n\nexport const getQualityEnum = (quality) => {\n switch (quality) {\n case 0: return \"GOOD\"\n case 11: return \"TEST\"\n default: return \"BAD\"\n }\n}\n\nconst useStyles = makeStyles(theme => ({\n GOOD: {\n backgroundColor: green[100],\n color: theme.palette.success.dark,\n },\n TEST: {\n backgroundColor: orange[100],\n color: theme.palette.warning.dark,\n },\n BAD: {\n backgroundColor: red[100],\n color: theme.palette.error.dark,\n },\n}), { name: \"TagValueField\" });\n\n\nconst TagQualityChip = ({ className, resource, source, record = {}, option, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles(record);\n const quality = get(record, source);\n if (isNull(quality)) return null\n\n const enumValue = getQualityEnum(quality)\n const label = translate(`resources.${resource}.enums.${source}.${enumValue}`, { _: \"Bad\" });\n\n return (\n <Chip\n className={classnames(className, classes[enumValue])}\n size=\"small\"\n label={label}\n {...sanitizeFieldRestProps(props)}\n />\n )\n};\n\nTagQualityChip.defaultProps = {\n addLabel: true,\n};\n\nexport default TagQualityChip;","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EVENT_FRAGMENT } from './typeDefs';\n\n\nconst ACKNOWLEDGE_MANY_EVENTS = gql`\n mutation ackManyEvents($filter: EventFilter! $input: EventAckInput!) {\n data: Event {\n data: ackMany(filter: $filter, input: $input) {\n items {\n ...EventFragment\n }\n }\n }\n }\n ${EVENT_FRAGMENT}\n`\n\nexport default ({ id_in, comment }) => {\n return graphqlClient.request(ACKNOWLEDGE_MANY_EVENTS, {\n filter: {\n id_in\n },\n input: {\n comment\n }\n }).catch(graphqlErrorHandler)\n};","import React, { useState, useCallback } from 'react';\nimport { useSelector, useDispatch, shallowEqual } from 'react-redux';\nimport { useNotify, useUnselectAll, useRefresh, fetchStart, fetchEnd, Button as RaButton, useTranslate } from 'react-admin';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { alpha } from '@material-ui/core/styles/colorManipulator';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport acknowledgeManyEvents from '../../dataProvider/EventbusService/Event/acknowledgeMany';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles(theme => ({\n restoreButton: {},\n}));\n\nconst BulkRestoreButton = ({\n basePath,\n resource,\n classes: classesOverride,\n className,\n label = 'ra.action.acknowledge_all',\n icon = defaultIcon,\n filterValues,\n selectedIds,\n ...rest }) => {\n const dispatch = useDispatch();\n const refresh = useRefresh();\n const notify = useNotify();\n const unselectAll = useUnselectAll();\n const classes = useStyles({ classes: classesOverride });\n\n const translate = useTranslate();\n //const resource = useResourceContext(props);\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const [comment, setComment] = React.useState();\n\n const handleClick = useCallback(event => {\n event.stopPropagation();\n }, []);\n\n const handleOpen = useCallback(event => {\n setOpen(true);\n event.stopPropagation();\n }, [setOpen]);\n\n const handleClose = useCallback((event, reason) => {\n setOpen(false);\n event.stopPropagation();\n }, [setOpen]);\n\n const handleChange = useCallback(event => {\n setComment(event.target.value);\n }, [setComment]);\n\n const handleAcknowledgeManyEvents = useCallback(event => {\n event.stopPropagation();\n setLoading(true);\n dispatch(fetchStart()); // start the global loading indicator \n\n acknowledgeManyEvents({\n id_in: selectedIds,\n comment\n })\n .then(() => {\n refresh();\n notify('ra.notification.acknowledged', 'info', { smart_count: selectedIds.length });\n unselectAll(resource)\n setOpen(false);\n })\n .catch((error) => {\n notify(\n typeof error === 'string' ? error : error.message || 'ra.notification.http_error',\n 'warning'\n )\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd()); // stop the global loading indicator\n });\n }, [selectedIds, comment]);\n\n return (\n <>\n <RaButton\n onClick={handleOpen}\n label={label}\n className={classnames(\n 'ra-acknowledge-many-button',\n className\n )}\n key=\"button\"\n {...rest}\n >\n {icon}\n </RaButton>\n <Dialog\n open={open}\n onClose={handleClose}\n onClick={handleClick}\n aria-labelledby=\"acknowledge-dialog\"\n >\n <DialogTitle id=\"acknowledge-dialog\">{translate(\"ra.message.acknowledgement\")}</DialogTitle>\n <DialogContent>\n <DialogContentText>{translate(\"ra.message.acknowledge_dialog\")}</DialogContentText>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"comment\"\n label={translate(\"resources.Event.fields.comment\")}\n value={comment}\n onChange={handleChange}\n fullWidth\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"primary\" disabled={loading}>\n {translate(\"ra.action.cancel\")}\n </Button>\n <Button onClick={handleAcknowledgeManyEvents} color=\"primary\" disabled={loading} variant=\"contained\" disableElevation>\n {translate(\"ra.action.acknowledge\")}\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n\n};\n\nconst defaultIcon = <ThumbUpIcon />;\n\nexport default BulkRestoreButton;","import React, { useEffect } from \"react\";\nimport { useListController, ListContextProvider, SelectInput, TextField, DateField, NumberField, NumberInput, DateTimeInput, ReferenceField, ReferenceInput, AutocompleteInput, AutocompleteArrayInput, ReferenceArrayInput } from 'react-admin';\nimport ListView from '../../lib/list/ListView';\nimport Filter from \"../../lib/list/filter/Filter\";\nimport EventListDatagrid from './EventListDatagrid';\nimport useColumns from '../../lib/list/useColumns';\nimport useDatagridColumns from '../../lib/list/useDatagridColumns';\nimport ListActions from '../../lib/list/ListActions';\nimport useListStyles from '../../lib/list/useListStyles';\nimport AcknowledgeButton from '../../lib/button/AcknowledgeButton';\nimport BulkAcknowledgeButton from '../../lib/button/BulkAcknowledgeButton';\nimport BulkExportButton from '../../lib/button/BulkExportButton';\nimport EventActiveField from './EventActiveField';\nimport EventAckField from './EventAckField';\nimport EventStateField from './EventStateField';\nimport EventSeverityField from './EventSeverityField';\nimport EnumField from '../../lib/field/EnumField';\nimport ResourceLinkField from '../../lib/field/ResourceLinkField';\nimport EnumInput from '../../lib/input/EnumInput';\nimport BooleanInput from '../../lib/input/BooleanInput';\nimport ProfileReferenceInput from '../Profile/ProfileReferenceInput';\nimport { autocompleteMatchTrue } from '../../lib/input/utils';\nimport useExporter, { dateFormatter, booleanFormatter, enumFormatter, linkFormatter } from '../../lib/exporter';\nimport useEventContext from '../../controller/event/useEventContext';\nimport permissions from \"../../authProvider/abilityProvider\";\nimport NestedArrayField from \"../../lib/field/NestedArrayField\";\nimport LabelChip from \"../Label/LabelChip\";\nimport CustomReferenceField from \"../../lib/field/CustomReferenceField\";\n\n\n\nconst modelExport = [\n { key: \"id\", header: \"resources.Event.fields.id\" },\n { key: \"severity\", header: \"resources.Event.fields.severity\" },\n { key: \"priority\", header: \"resources.Event.fields.priority\" },\n { key: \"active\", header: \"resources.Event.fields.active\", format: booleanFormatter },\n { key: \"ack\", header: \"resources.Event.fields.ack\", format: booleanFormatter },\n { key: \"ackRequired\", header: \"resources.Event.fields.ackRequired\", format: booleanFormatter },\n { key: \"type\", header: \"resources.Event.fields.type\", format: enumFormatter(\"Event\") },\n { key: \"message.title\", header: \"resources.Event.fields.message.title\" },\n { key: \"message.body\", header: \"resources.Event.fields.message.body\" },\n { key: \"resource.id\", header: [\"resources.Event.fields.resource\", \"resources.Asset.fields.id\"], reference: { resource: \"Asset\", target: \"resource\" } },\n { key: \"resource.name\", header: [\"resources.Event.fields.resource\", \"resources.Asset.fields.name\"], reference: { resource: \"Asset\", target: \"resource\" } },\n { key: \"tag.id\", header: [\"resources.Event.fields.tag\", \"resources.Parameter.fields.id\"], reference: { resource: \"Parameter\", target: \"tag\" } },\n { key: \"tag.name\", header: [\"resources.Event.fields.tag\", \"resources.Parameter.fields.name\"], reference: { resource: \"Parameter\", target: \"tag\" } },\n { key: \"comment\", header: \"resources.Event.fields.comment\" },\n { key: \"userId.id\", header: [\"resources.EventHistory.fields.profile\", \"resources.Profile.fields.id\"], reference: { resource: \"Profile\", target: \"userId\" } },\n { key: \"userId.name\", header: [\"resources.EventHistory.fields.profile\", \"resources.Profile.fields.name\"], reference: { resource: \"Profile\", target: \"userId\" } },\n { key: \"timestamp\", header: \"resources.Event.fields.timestamp\", format: dateFormatter },\n { key: \"timestampSrv\", header: \"resources.Event.fields.timestampSrv\", format: dateFormatter },\n { key: \"link\", header: \"Ccылка\", format: linkFormatter(\"Event\", \"id\") },\n]\n\nconst severityChoices = [\n { id: 4, name: 'resources.Event.enums.severity.4' },\n { id: 3, name: 'resources.Event.enums.severity.3' },\n { id: 2, name: 'resources.Event.enums.severity.2' },\n { id: 1, name: 'resources.Event.enums.severity.1' },\n { id: 0, name: 'resources.Event.enums.severity.0' },\n]\n\nconst EventFilter = (props) => {\n\n return (\n <Filter {...props}>\n <SelectInput source=\"severity\" choices={severityChoices} />\n <BooleanInput source=\"active\" displayNull />\n <BooleanInput source=\"ack\" displayNull />\n <EnumInput source=\"type\" />\n <ReferenceInput source=\"resource\" label=\"resources.Event.fields.asset\" reference=\"Asset\" resettable sort={{ field: 'name', order: 'ASC' }} >\n <AutocompleteInput optionText=\"name\" matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <ReferenceInput source=\"tag\" label=\"resources.Event.fields.parameter\" reference=\"Parameter\" resettable sort={{ field: 'name', order: 'ASC' }}>\n <AutocompleteInput optionText='name' matchSuggestion={autocompleteMatchTrue} />\n </ReferenceInput>\n <NumberInput source=\"priority\" />\n <NumberInput source=\"priority_gte\" />\n <NumberInput source=\"priority_lte\" />\n <ProfileReferenceInput source=\"userId\" label=\"resources.Event.fields.profile\" reference=\"Profile\" resettable sort={{ field: 'name', order: 'ASC' }} />\n <DateTimeInput source=\"timestamp_gte\" />\n <DateTimeInput source=\"timestamp_lte\" />\n <DateTimeInput source=\"timestampSrv_gte\" />\n <DateTimeInput source=\"timestampSrv_lte\" />\n <ReferenceArrayInput source=\"assetLabelsAndIds\" label=\"resources.Event.fields.assetLabelsAndIds\" filter={{ typename: \"Asset\" }} reference=\"Label\" resettable sort={{ field: 'name', order: 'ASC' }} >\n <AutocompleteArrayInput optionText=\"name\" matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput >\n <ReferenceArrayInput source=\"assetLabelsNotAndIds\" label=\"resources.Event.fields.assetLabelsNotAndIds\" filter={{ typename: \"Asset\" }} reference=\"Label\" resettable sort={{ field: 'name', order: 'ASC' }} >\n <AutocompleteArrayInput optionText=\"name\" matchSuggestion={autocompleteMatchTrue} />\n </ReferenceArrayInput>\n </Filter>\n )\n};\n\nconst EventBulkActionButtons = props => {\n return (\n <>\n {permissions.can('acknowledge', \"Event\") && <BulkAcknowledgeButton {...props} />}\n <BulkExportButton {...props} />\n </>\n )\n};\n\nconst useEventListColumns = () => {\n const classes = useListStyles();\n\n const columns = useColumns([\n <EventActiveField source=\"active\" />,\n <EventAckField source=\"ack\" />,\n <EventSeverityField source=\"severity\" />,\n <EventStateField source=\"state\" />,\n <ResourceLinkField source=\"message.title\" alwaysOn cellClassName={classes.celllLineClamp} />,\n <TextField source=\"message.body\" sortable={false} cellClassName={classes.celllLineClamp} />,\n <EnumField source=\"type\" />,\n <ReferenceField source=\"resource\" basePath=\"/Label\" label=\"resources.Event.fields.assetLabels\" reference=\"Asset\" link=\"show\" sortable={false}>\n <NestedArrayField source=\"labels\" reference=\"Label\">\n <LabelChip source=\"name\" size=\"small\" />\n </NestedArrayField>\n </ReferenceField>,\n <CustomReferenceField source=\"resourceName\" trueSource=\"resource\" label=\"resources.Event.fields.asset\" reference=\"Asset\" link=\"show\" sortable={false} cellClassName={classes.celllLineClamp}>\n <TextField source=\"name\" />\n </CustomReferenceField>,\n <ReferenceField source=\"tag\" label=\"resources.Event.fields.parameter\" reference=\"Parameter\" link={false} sortable={false} cellClassName={classes.celllLineClamp}>\n <TextField source=\"name\" />\n </ReferenceField>,\n <NumberField source=\"priority\" />,\n <TextField source=\"comment\" sortable={false} cellClassName={classes.celllLineClamp} />,\n <ReferenceField source=\"userId\" label=\"resources.Event.fields.profile\" reference=\"Profile\" link={false} sortable={false} cellClassName={classes.celllLineClamp}>\n <TextField source=\"name\" />\n </ReferenceField>,\n <DateField source=\"timestamp\" showTime textAlign=\"right\" />,\n <DateField source=\"timestampSrv\" showTime textAlign=\"right\" />,\n ]);\n\n\n return columns\n}\n\nconst EventList = (props) => {\n const { version } = useEventContext();\n const exporter = useExporter(modelExport)\n const controllerProps = useListController({ exporter, ...props });\n const refetch = controllerProps.refetch\n\n useEffect(() => {\n refetch();\n }, [refetch, version]);\n\n const columns = useEventListColumns()\n const DatagridColumns = useDatagridColumns(columns)\n\n return (\n <ListContextProvider value={controllerProps}>\n <ListView\n {...props}\n {...controllerProps}\n actions={<ListActions columns={columns} />}\n bulkActionButtons={<EventBulkActionButtons />}\n filters={<EventFilter />}\n >\n <EventListDatagrid >\n {DatagridColumns}\n {permissions.can('acknowledge', \"Event\") && <AcknowledgeButton />}\n </EventListDatagrid>\n </ListView>\n </ListContextProvider>\n );\n}\n\nEventList.defaultProps = {\n sort: { field: 'timestampSrv', order: 'DESC' }\n}\n\nexport const EventReferenceDatagrid = (props) => {\n const columns = useEventListColumns()\n const DatagridColumns = useDatagridColumns(columns)\n\n return (\n <EventListDatagrid {...props} rowClick=\"show\" >\n {DatagridColumns}\n {permissions.can('acknowledge', \"Event\") && <AcknowledgeButton />}\n </EventListDatagrid>\n );\n}\n\n\nexport const EventWidgetDatagrid = (props) => {\n const { columns } = props\n const classes = useListStyles();\n\n return (\n <EventListDatagrid {...props} rowClick=\"show\">\n {columns.includes(\"active\") && <EventActiveField source=\"active\" />}\n {columns.includes(\"ack\") && <EventAckField source=\"ack\" />}\n {columns.includes(\"severity\") && <EventSeverityField source=\"severity\" />}\n {columns.includes(\"state\") && <EventStateField source=\"state\" />}\n {columns.includes(\"message.title\") && <ResourceLinkField source=\"message.title\" alwaysOn cellClassName={classes.celllLineClamp} />}\n {columns.includes(\"message.body\") && <TextField source=\"message.body\" sortable={false} cellClassName={classes.celllLineClamp} />}\n {columns.includes(\"type\") && <EnumField source=\"type\" />}\n {columns.includes(\"resource\") && (\n <ReferenceField\n basePath=\"/Label\"\n source=\"resource\"\n label=\"resources.Event.fields.assetLabels\"\n reference=\"Asset\"\n link=\"show\"\n sortable={false}>\n <NestedArrayField source=\"labels\" reference=\"Label\">\n <LabelChip source=\"name\" size=\"small\" />\n </NestedArrayField>\n </ReferenceField>\n )}\n {columns.includes(\"resourceName\") && (\n <CustomReferenceField\n source=\"resourceName\"\n trueSource=\"resource\"\n label=\"resources.Event.fields.asset\"\n reference=\"Asset\"\n link=\"show\"\n sortable={false}\n cellClassName={classes.celllLineClamp}>\n <TextField source=\"name\" />\n </CustomReferenceField>\n )}\n {columns.includes(\"tag\") && <ReferenceField source=\"tag\" label=\"resources.Event.fields.parameter\" reference=\"Parameter\" link={false} sortable={false} cellClassName={classes.celllLineClamp}>\n <TextField source=\"name\" />\n </ReferenceField>}\n {columns.includes(\"priority\") && <NumberField source=\"priority\" />}\n {columns.includes(\"comment\") && <TextField source=\"comment\" sortable={false} cellClassName={classes.celllLineClamp} />}\n {columns.includes(\"userId\") && <ReferenceField source=\"userId\" label=\"resources.Event.fields.profile\" reference=\"Profile\" link={false} sortable={false} cellClassName={classes.celllLineClamp}>\n <TextField source=\"name\" />\n </ReferenceField>}\n {columns.includes(\"timestamp\") && <DateField source=\"timestamp\" showTime textAlign=\"right\" />}\n {columns.includes(\"timestampSrv\") && <DateField source=\"timestampSrv\" showTime textAlign=\"right\" />}\n {permissions.can('acknowledge', \"Event\") && <AcknowledgeButton />}\n </EventListDatagrid>\n )\n};\n\n\n\nexport default EventList;","const sanitizeInputRestProps = ({\n afterSubmit,\n allowEmpty,\n allowNull,\n alwaysOn,\n basePath,\n beforeSubmit,\n component,\n data,\n defaultValue,\n error,\n format,\n formatOnBlur,\n formClassName,\n initialValue,\n initializeForm,\n input,\n isEqual,\n isRequired,\n label,\n limitChoicesToValue,\n locale,\n meta,\n multiple,\n name,\n options,\n optionText,\n optionValue,\n parse,\n record,\n ref,\n render,\n resource,\n source,\n submitError,\n subscription,\n textAlign,\n translate,\n translateChoice,\n type,\n validate,\n validateFields,\n value,\n ...rest\n}) => rest;\n\nexport default sanitizeInputRestProps;\n","import { useEffect, useLayoutEffect } from 'react'\n\nconst useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect\n\nexport default useIsomorphicLayoutEffect","import useLocalStorage from '../../lib/hook/useLocalStorage';\n\nconst useListColumns = (resource, initialValue = []) => useLocalStorage(`${resource}.list.columns`, initialValue.slice(0, 10))\n\nexport default useListColumns\n","import React from 'react';\nimport Breadcrumbs from '@material-ui/core/Breadcrumbs';\nimport { useListContext } from 'react-admin';\nimport DashboardBreadcrumbItem from './DashboardBreadcrumbItem';\nimport ListBreadcrumbItem from './ListBreadcrumbItem';\n\n\n\n\n\nconst ListBreadcrumbs = (props) => {\n const contextProps = useListContext();\n return (\n <Breadcrumbs aria-label=\"breadcrumb\">\n <DashboardBreadcrumbItem {...contextProps} />\n <ListBreadcrumbItem {...contextProps} {...props} />\n </Breadcrumbs>\n );\n};\n\nexport default ListBreadcrumbs\n","\nimport cookie from 'cookie';\n\nexport const dateTimeOptions = {\n year: 'numeric', month: 'numeric', day: 'numeric',\n hour: 'numeric', minute: 'numeric', second: 'numeric',\n}\n\nexport const floatNumberOptions = {\n minimumFractionDigits: 1,\n maximumFractionDigits: 4\n};\n\nexport const intNumberOptions = {};\n\nexport const getCookiesByGroup = (groupname) => {\n const cookies = cookie.parse(document.cookie);\n return Object.keys(cookies).filter(c => c && c.indexOf(groupname) == 0);\n}\n\nexport const getCookie = (name) => cookie.parse(document.cookie)[name];\n\nexport const setCookie = (name, value, options = {}) => {\n\n options = {\n path: '/',\n // при необходимости добавьте другие значения по умолчанию\n ...options\n };\n\n if (options.expires && options.expires.toUTCString) {\n options.expires = options.expires.toUTCString();\n }\n\n let updatedCookie = encodeURIComponent(name) + \"=\" + encodeURIComponent(value);\n\n for (let optionKey in options) {\n updatedCookie += \"; \" + optionKey;\n let optionValue = options[optionKey];\n if (optionValue !== true) {\n updatedCookie += \"=\" + optionValue;\n }\n }\n\n document.cookie = updatedCookie;\n};\n\nexport const deleteCookie = (name, options = {}) => {\n setCookie(name, \"\", {\n ...options,\n 'max-age': -1\n })\n};\n\nexport const isNull = (data) => {\n return Boolean(data == null)\n};\n\nexport const sleep = (ms) => {\n return new Promise(function (resolve, reject) {\n setTimeout(function () {\n resolve(\"anything\");\n }, ms);\n });\n}","import React, { useMemo, useState, useEffect, useCallback } from 'react';\nimport inflection from 'inflection';\n\nimport { useNotify, useVersion, useTranslate, useDataProvider, useResourceContext, useRedirect, useRefresh } from 'react-admin';\n\nimport { keyBy, assign } from 'lodash';\n\nexport const useTreeController = (props) => {\n const { basePath, icon, readOnly, filter, onSelect } = props;\n const resource = useResourceContext(props);\n const translate = useTranslate();\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const version = useVersion();\n const dataProvider = useDataProvider();\n const [state, setState] = useState({\n tree: {},\n data: [],\n expanded: [],\n selected: [],\n cuted: undefined,\n loading: [],\n error: undefined,\n rootLoading: false,\n })\n\n const resourceName = translate(`resources.${resource}.name`, {\n smart_count: 2,\n _: inflection.humanize(inflection.pluralize(resource)),\n });\n const defaultTitle = translate('ra.page.list', {\n name: resourceName,\n });\n\n const getNode = useCallback(nodeId => {\n const node = state.tree[nodeId]\n if (!node) return undefined\n const childNodes = node.children.reduce((acc, child) => {\n const nestedNode = state.tree[child.id]\n return nestedNode ? [...acc, nestedNode] : acc\n }, [])\n\n return {\n ...node,\n childNodes\n }\n }, [state.tree]);\n\n const setExpanded = useCallback(nodeIds => {\n setState(prev => ({\n ...prev,\n expanded: nodeIds\n }));\n }, [setState]);\n\n const setSelected = useCallback(nodeIds => {\n setState(prev => ({\n ...prev,\n selected: nodeIds\n }));\n\n if (typeof onSelect === 'function') onSelect(nodeIds, state)\n\n }, [state, setState]);\n\n const getRootNodes = useCallback(search => {\n setState(prev => ({\n ...prev,\n rootLoading: true\n }));\n\n dataProvider.getRootNodes(resource, { filter: { ...filter, q: search } })\n .then(({ data }) => {\n setState(prev => ({\n ...prev,\n data,\n tree: data ? mergeTree(prev.tree, keyBy(data, \"id\")) : prev.tree,\n }));\n })\n .catch(error => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning')\n })\n .finally(() => {\n setState(prev => ({\n ...prev,\n rootLoading: false\n }));\n });\n }, [resource]);\n\n const getChildNodes = useCallback((parentId) => {\n setState(prev => ({\n ...prev,\n loading: [...prev.loading, parentId]\n }));\n\n dataProvider.getChildNodes(resource, { parentId })\n .then(({ data }) => {\n\n setState(prev => {\n return {\n ...prev,\n tree: data ? mergeTree(prev.tree, keyBy(data, \"id\")) : prev.tree,\n expanded: [...prev.expanded, parentId]\n }\n });\n })\n .catch(error => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning')\n })\n .finally(() => {\n setState(prev => ({\n ...prev,\n loading: prev.loading.filter(item => item !== parentId)\n }));\n });\n }, [resource]);\n\n const deleteNode = useCallback((nodeId, withChildren = false) => {\n setState(prev => ({\n ...prev,\n loading: [...prev.loading, nodeId]\n }));\n\n dataProvider.deleteNode(resource, { nodeId, withChildren })\n .then(({ data }) => {\n\n setState(prev => {\n const dtree = { ...prev.tree }\n delete dtree[data.id]\n return {\n ...prev,\n tree: dtree,\n }\n });\n })\n .catch(error => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning')\n })\n .finally(() => {\n setState(prev => ({\n ...prev,\n loading: prev.loading.filter(item => item !== nodeId)\n }));\n });\n }, [resource]);\n\n const cutNode = useCallback((nodeId, withChildren = false) => {\n setState(prev => ({\n ...prev,\n cuted: { nodeId }\n }));\n notify('ra.notification.cut_item')\n }, [resource]);\n\n const pasteNode = useCallback((parentId, nodeId) => {\n\n dataProvider.moveNode(resource, { parentId, nodeId })\n .then(({ data }) => {\n\n // setState(prev => {\n // const dtree = { ...prev.tree }\n // delete dtree[data.id]\n // return {\n // ...prev,\n // tree: dtree,\n // }\n // });\n setState(prev => ({\n ...prev,\n cuted: undefined\n }));\n notify('ra.notification.paste_item')\n })\n .catch(error => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning')\n })\n .finally(() => {\n setState(prev => ({\n ...prev,\n loading: prev.loading.filter(item => item !== nodeId)\n }));\n });\n }, [resource]);\n\n const setTree = useCallback((newTree) => {\n setState(prev => ({\n ...prev,\n tree: newTree\n }));\n }, [setState]);\n\n useEffect(() => {\n if (!resource) return;\n getRootNodes()\n }, [resource, version])\n\n\n return {\n ...state,\n defaultTitle,\n readOnly,\n resource,\n basePath,\n icon,\n setExpanded,\n setSelected,\n setTree,\n getRootNodes,\n getChildNodes,\n getNode,\n deleteNode,\n cutNode,\n pasteNode,\n version\n };\n};\n\nconst mergeTree = (tree1 = {}, tree2 = {}) => Object.keys(tree2).reduce((acc, key) => {\n if (acc[key]) {\n acc[key] = { ...acc[key], ...tree2[key] }\n } else {\n acc[key] = tree2[key];\n }\n return acc;\n}, { ...tree1 });\n\nexport default useTreeController;\n","import React from \"react\";\nimport TreeContext from \"./TreeContext\";\n\n\n\nconst TreeContextProvider = ({ value, children }) => {\n return (\n <TreeContext.Provider value={value}>\n {children}\n </TreeContext.Provider>\n );\n};\n\nexport default TreeContextProvider","import gql from 'graphql-tag';\n\n\nexport const PARAMETER_FRAGMENT = gql`\n fragment ParameterFragment on Parameter {\n id\n name\n description\n type\n display\n unit {id name}\n role\n display\n accessLevel\n format\n }\n`","import differenceBy from 'lodash/differenceBy';\nimport difference from 'lodash/difference';\nimport omit from 'lodash/omit';\nimport pick from 'lodash/pick';\nimport isEqual from 'lodash/isEqual';\n\n\n\n\nexport const buildReferenceCreateInput = (current) => {\n return (current?.id) ? { connect: { id: current?.id } } : undefined;\n}\n\n///Не проверено\nexport const buildReferenceUpdateInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n return (notEqual) ?\n (current?.id) ?\n { connect: { id: current?.id } }\n : previous?.id\n ? { disconnect: true }\n : undefined\n : undefined\n}\n\nexport const buildReferenceCreateRequiredInput = (current) => {\n return (current) ? { connect: current } : undefined;\n}\n\nexport const buildReferenceUpdateRequiredInput = (current, previous) => {\n const notEqual = !isEqual(current, previous)\n\n return (notEqual) ? (current?.id) ? { connect: { id: current?.id } } : undefined : undefined\n}\n\nexport const buildReferenceArrayCreateInput = (current = []) => {\n const connect = current.map(id => ({ id }))\n const isConnect = Boolean(connect.length)\n\n return (isConnect) ? {\n connect: Boolean(connect.length) ? connect : undefined\n } : undefined\n}\n\nexport const buildReferenceArrayUpdateInput = (current = [], previous = []) => {\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n const isConnectOrDisconnect = Boolean(connect.length) || Boolean(disconnect.length)\n\n return (isConnectOrDisconnect) ? {\n connect: Boolean(connect.length) ? connect : undefined,\n disconnect: Boolean(disconnect.length) ? disconnect : undefined,\n } : undefined\n}\n\nexport const buildArrayInput = (current = [], previous = []) => {\n\n const connect = difference(current, previous).map(id => ({ id }))\n const disconnect = difference(previous, current).map(id => ({ id }))\n\n return {\n connect: connect.length > 0 ? connect : undefined,\n disconnect: disconnect.length > 0 ? disconnect : undefined,\n }\n\n}\n\nexport const sanitizeResourceConstructor = (data, { skipFields }) => {\n\n if (skipFields) {\n const sanitizeData = skipFields ? omit(data, skipFields) : data\n const sanitizedData = sanitizeResource(sanitizeData)\n return { ...data, ...sanitizedData }\n }\n\n return sanitizeResource(data)\n}\n\nexport const sanitizeResource = data => {\n if (!data) return null\n return data\n};","import * as React from 'react';\nimport { parse, stringify } from 'query-string';\nimport { Typography } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Inbox from '@material-ui/icons/Inbox';\n\nimport {\n useTranslate,\n useListContext,\n useResourceContext,\n useGetResourceLabel,\n} from 'ra-core';\n\nimport { CreateButton, ListButton } from 'react-admin';\n\n\nconst useStyles = makeStyles(\n theme => ({\n message: {\n textAlign: 'center',\n opacity: theme.palette.type === 'light' ? 0.5 : 0.8,\n margin: '0 1em',\n color:\n theme.palette.type === 'light'\n ? 'inherit'\n : theme.palette.text.primary,\n },\n icon: {\n width: '9em',\n height: '9em',\n },\n toolbar: {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 8,\n marginTop: '2em',\n },\n }),\n { name: 'Empty' }\n);\n\n\nconst Empty = (props) => {\n const { basePath, hasCreate } = useListContext(props);\n const resource = useResourceContext(props);\n const classes = useStyles(props);\n const translate = useTranslate();\n\n const getResourceLabel = useGetResourceLabel();\n const resourceName = translate(`resources.${resource}.forcedCaseName`, {\n smart_count: 0,\n _: getResourceLabel(resource, 0),\n });\n\n const emptyMessage = translate('ra.page.empty', { name: resourceName });\n const inviteMessage = translate('ra.page.invite');\n\n return (\n <>\n <div className={classes.message}>\n <Inbox className={classes.icon} />\n <Typography variant=\"h4\" paragraph>\n {translate(`resources.${resource}.empty`, {\n _: emptyMessage,\n })}\n </Typography>\n {hasCreate && (\n <Typography variant=\"body1\">\n {translate(`resources.${resource}.invite`, {\n _: inviteMessage,\n })}\n </Typography>\n )}\n </div>\n {hasCreate && (\n <div className={classes.toolbar}>\n <CreateButton variant=\"contained\" basePath={basePath} />\n <ListButton\n label='ra.action.list_of_deleted'\n to={{\n pathname: basePath,\n search: stringify({\n filter: JSON.stringify({ deleted: true }),\n displayedFilters: JSON.stringify({ deleted: true }),\n }),\n }}\n />\n </div>\n )}\n </>\n );\n};\n\n\n\n\nexport default Empty\n\n\n","import React, { Children, cloneElement } from 'react';\nimport Card from '@material-ui/core/Card';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport {\n defaultExporter,\n useListContext,\n getListControllerProps,\n useVersion,\n} from 'ra-core';\nimport {\n Title,\n ListToolbar,\n Pagination as DefaultPagination,\n BulkActionsToolbar,\n ListActions as DefaultActions,\n} from 'react-admin';\nimport DefaultListBreadcrumbs from '../breadcrumbs/ListBreadcrumbs';\nimport ListBulkActionsToolbar from './ListBulkActionsToolbar';\nimport DefaultListBulkActions from './ListBulkActions';\nimport Empty from './Empty';\n\n\n\nexport const ListView = (props) => {\n const {\n actions,\n aside,\n breadcrumbs,\n filters,\n bulkActionButtons,\n pagination,\n children,\n className,\n classes: classesOverride,\n component: Content,\n exporter = defaultExporter,\n importer,\n title,\n empty,\n ...rest\n } = props;\n const controllerProps = getListControllerProps(props); // deprecated, to be removed in v4\n const listContext = useListContext(props);\n const classes = useStyles(props);\n const {\n defaultTitle,\n total,\n loaded,\n loading,\n filterValues,\n selectedIds,\n } = listContext;\n const version = useVersion();\n\n const renderList = () => (\n <>\n {breadcrumbs}\n {(filters || actions) && (\n <ListToolbar\n filters={filters}\n {...controllerProps} // deprecated, use ListContext instead, to be removed in v4\n actions={actions}\n exporter={exporter} // deprecated, use ListContext instead, to be removed in v4\n importer={importer}\n />\n )}\n <div className={classes.main}>\n <Content\n className={classnames(classes.content, {\n [classes.bulkActionsDisplayed]: selectedIds.length > 0,\n })}\n key={version}\n >\n {bulkActionButtons !== false && bulkActionButtons && (\n <ListBulkActionsToolbar {...controllerProps}>\n {bulkActionButtons}\n </ListBulkActionsToolbar>\n )}\n {children &&\n // @ts-ignore-line\n cloneElement(Children.only(children), {\n ...controllerProps, // deprecated, use ListContext instead, to be removed in v4\n hasBulkActions: bulkActionButtons !== false,\n })}\n {pagination && cloneElement(pagination, listContext)}\n </Content>\n {aside && cloneElement(aside, listContext)}\n </div>\n </>\n );\n\n const shouldRenderEmptyPage =\n loaded && !loading && total === 0 && !Object.keys(filterValues).length;\n\n return (\n <div\n className={classnames('list-page', classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n <Title title={title} defaultTitle={defaultTitle} />\n {shouldRenderEmptyPage && empty !== false\n ? cloneElement(empty, listContext)\n : renderList()}\n </div>\n );\n};\n\nListView.defaultProps = {\n actions: <DefaultActions />,\n breadcrumbs: <DefaultListBreadcrumbs />,\n classes: {},\n component: Card,\n bulkActionButtons: <DefaultListBulkActions />,\n pagination: <DefaultPagination />,\n empty: <Empty />,\n};\n\nconst useStyles = makeStyles(\n theme => ({\n root: {},\n main: {\n display: 'flex',\n },\n content: {\n marginTop: 0,\n transition: theme.transitions.create('margin-top'),\n position: 'relative',\n flex: '1 1 auto',\n [theme.breakpoints.down('xs')]: {\n boxShadow: 'none',\n },\n overflow: 'inherit',\n },\n bulkActionsDisplayed: {\n marginTop: -theme.spacing(8),\n transition: theme.transitions.create('margin-top'),\n },\n actions: {\n zIndex: 2,\n display: 'flex',\n justifyContent: 'flex-end',\n flexWrap: 'wrap',\n },\n noResults: { padding: 20 },\n }),\n { name: 'RaList' }\n);\n\n\n\nconst sanitizeRestProps = ({\n basePath = null,\n currentSort = null,\n data = null,\n defaultTitle = null,\n displayedFilters = null,\n filterDefaultValues = null,\n filterValues = null,\n hasCreate = null,\n hasEdit = null,\n hasList = null,\n hasShow = null,\n hideFilter = null,\n history = null,\n ids = null,\n loading = null,\n loaded = null,\n location = null,\n match = null,\n onSelect = null,\n onToggleItem = null,\n onUnselectItems = null,\n options = null,\n page = null,\n permissions = null,\n perPage = null,\n refetch = null,\n resource = null,\n selectedIds = null,\n setFilters = null,\n setPage = null,\n setPerPage = null,\n setSort = null,\n showFilter = null,\n syncWithLocation = null,\n sort = null,\n total = null,\n ...rest\n}) => rest;\n\nexport default ListView;\n","import { useCallback, useRef } from 'react'\nimport useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect'\n\n\n\nconst useEventCallback = (fn) => {\n const ref = useRef(() => {\n throw new Error('Cannot call an event handler while rendering.');\n });\n useIsomorphicLayoutEffect(() => {\n ref.current = fn;\n }, [fn]);\n\n return useCallback((...args) => ref.current(...args), [ref]);\n}\n\n\nexport default useEventCallback\n\n\n\n","import { useCallback, useEffect, useState } from 'react'\nimport set from 'lodash/set';\nimport get from 'lodash/get';\nimport isEqual from 'lodash/isEqual';\nimport useEventListener from './useEventListener'\nimport useEventCallback from './useEventCallback'\nimport { APPLICATION_NAME as LOCAL_STORAGE_WORKSPACE } from '../../appsettings';\n\n\n\nconst useLocalStorage = (key, initialValue) => {\n\n const getValue = useCallback(() => {\n if (typeof window === 'undefined') {\n return initialValue\n }\n\n try {\n const json = window.localStorage.getItem(LOCAL_STORAGE_WORKSPACE);\n const item = parseJSON(json);\n\n\n return get(item, key, initialValue);\n } catch (error) {\n console.warn(`Error reading localStorage key “${key}”:`, error)\n return initialValue\n }\n }, [key, initialValue])\n\n const [storedValue, setStoredValue] = useState(getValue)\n\n const setValue = useEventCallback(value => {\n\n if (typeof window == 'undefined') {\n console.warn(\n `Tried setting localStorage key “${key}” even though environment is not a client`,\n )\n }\n\n try {\n const valueToStore = value instanceof Function ? value(storedValue) : value;\n const json = window.localStorage.getItem(LOCAL_STORAGE_WORKSPACE);\n const item = parseJSON(json);\n const localStoredValue = item ? set(item, key, valueToStore) : set({}, key, valueToStore)\n window.localStorage.setItem(LOCAL_STORAGE_WORKSPACE, JSON.stringify(localStoredValue));\n setStoredValue(valueToStore);\n window.dispatchEvent(new Event('local-storage'))\n } catch (error) {\n console.warn(`Error setting localStorage key “${key}”:`, error)\n }\n })\n\n useEffect(() => {\n setStoredValue(getValue())\n }, [])\n\n const handleStorageChange = useCallback(() => {\n const value = getValue()\n const equaled = isEqual(value, storedValue)\n if (!equaled) {\n setStoredValue(value)\n }\n\n }, [getValue, storedValue])\n\n useEventListener('storage', handleStorageChange)\n\n useEventListener('local-storage', handleStorageChange)\n\n return [storedValue, setValue]\n}\n\nexport default useLocalStorage\n\n\n\nfunction parseJSON(value) {\n try {\n return value === 'undefined' ? undefined : JSON.parse(value ?? '')\n } catch {\n console.log('parsing error on', { value })\n return undefined\n }\n}\n","import React, { forwardRef, useCallback } from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useResourceContext, useTranslate, getFieldLabelTranslationArgs } from 'react-admin';\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport DragIndicatorIcon from '@material-ui/icons/DragIndicator';\n\n\n\nconst useStyles = makeStyles(theme => ({\n checkbox: {\n padding: 4,\n marginRight: 8,\n marginLeft: -6,\n marginTop: -2,\n marginBottom: -2,\n },\n label: {\n flexGrow: 1,\n marginRight: 8,\n },\n dragHandleIcon: {\n cursor: \"ns-resize\",\n '&:hover': {\n color: theme.palette.action.active,\n },\n },\n}), { name: 'ColumnsButtonMenuItem' });\n\nconst ColumnsButtonMenuItem = forwardRef((props, ref) => {\n const {\n column,\n checked,\n onClick,\n } = props;\n const classes = useStyles();\n const translate = useTranslate();\n const resource = useResourceContext(props);\n const handleToggle = useCallback((event) => {\n event.stopPropagation();\n onClick(column.props.source);\n }, [onClick]);\n\n return (\n <ListItem\n ref={ref}\n dense\n button\n onClick={handleToggle}\n disabled={column.props.alwaysOn}\n name={column.props.source}\n >\n <Checkbox\n disableRipple\n inputProps={{ 'aria-labelledby': column.props.source }}\n checked={checked}\n color=\"primary\"\n className={classes.checkbox}\n />\n <span className={classes.label}>\n {translate(\n ...getFieldLabelTranslationArgs({\n label: column.props.label,\n resource,\n source: column.props.source,\n })\n )}\n </span>\n {checked && (<ListItemSecondaryAction>\n <DragIndicatorIcon className={classnames(\"drag-handle\", classes.dragHandleIcon)} color=\"disabled\" fontSize=\"small\" />\n </ListItemSecondaryAction>)}\n </ListItem>\n );\n});\n\n\n\n\nexport default ColumnsButtonMenuItem","import React, { useState, useCallback, useRef, } from 'react';\nimport map from \"lodash/map\";\nimport keyBy from \"lodash/keyBy\";\nimport { arrayMoveImmutable } from \"array-move\";\nimport { Container, Draggable } from \"react-smooth-dnd\";\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport Menu from '@material-ui/core/Menu';\nimport TableChartIcon from '@material-ui/icons/TableChart';\nimport { useResourceContext, Button } from 'react-admin';\nimport useListColumns from '../../controller/localStorage/useListColumns';\nimport ColumnsButtonMenuItem from './ColumnsButtonMenuItem';\n\n\n\nconst useStyles = makeStyles({\n root: { display: 'inline-block' },\n},\n { name: 'ColumnsButton' });\n\n\n\nconst ColumnsButton = (props) => {\n const {\n columns,\n className,\n ...rest\n } = props;\n\n const resource = useResourceContext(props);\n const [open, setOpen] = useState(false);\n const anchorEl = useRef();\n const classes = useStyles(props);\n const columnsIds = map(columns, \"props.source\")\n const columnsMap = keyBy(columns, \"props.source\")\n const [listColumns, setListColumns] = useListColumns(resource, columnsIds)\n const mergedlistColumns = Array.from(new Set([...listColumns, ...columnsIds]))\n\n\n const handleClick = useCallback(event => {\n event.preventDefault();\n setOpen(true);\n anchorEl.current = event.currentTarget;\n }, [anchorEl, setOpen]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleToggle = useCallback((columnName) => {\n\n setListColumns(previous => {\n const checked = previous.includes(columnName)\n return checked\n ? previous.filter(item => item !== columnName)\n : previous.concat([columnName])\n })\n\n }, [setListColumns]);\n\n const handleDrop = useCallback(({ removedIndex, addedIndex }) => {\n if (removedIndex !== addedIndex) {\n setListColumns(previous => {\n const newColumnsOrdered = arrayMoveImmutable(previous, removedIndex, addedIndex)\n return newColumnsOrdered\n });\n }\n\n }, [setListColumns]);\n\n\n return (\n <div\n className={classnames(classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n <Button\n className=\"add-filter\"\n label=\"ra.action.choose_columns\"\n aria-haspopup=\"true\"\n onClick={handleClick}\n >\n <TableChartIcon />\n </Button>\n <Menu\n open={open}\n anchorEl={anchorEl.current}\n onClose={handleClose}\n getContentAnchorEl={null}\n >\n <Container dragHandleSelector=\".drag-handle\" lockAxis=\"y\" onDrop={handleDrop}>\n {mergedlistColumns.map(columnName => {\n const column = columnsMap[columnName]\n const checked = listColumns.includes(columnName)\n\n return column ? (\n <Draggable key={columnName}>\n <ColumnsButtonMenuItem\n column={column}\n checked={checked}\n onClick={handleToggle}\n />\n </Draggable>\n ) : null\n }, [])}\n </Container>\n </Menu>\n </div>\n );\n};\n\nconst sanitizeRestProps = ({\n displayedFilters = null,\n filterValues = null,\n showFilter = null,\n ...rest\n}) => rest;\n\n\n\nexport default ColumnsButton;\n","import React, { memo, useCallback } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ContentAdd from '@material-ui/icons/Add';\nimport TreeItem from '@material-ui/lab/TreeItem';\nimport Typography from '@material-ui/core/Typography';\nimport { useTranslate, useResourceContext } from 'react-admin';\n\n\n\nconst CreateTreeNode = props => {\n const {\n basePath,\n className,\n classes: classesOverride,\n scrollToTop = true,\n variant,\n ...rest\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n const history = useHistory();\n const resource = useResourceContext();\n\n const handleLabelClick = useCallback((event) => {\n event.preventDefault()\n event.stopPropagation()\n history.push(`${basePath}/create`);\n }, []);\n\n return (\n <TreeItem\n nodeId=\"create_node\"\n label={<div className={classes.label}>\n <ContentAdd fontSize=\"small\" className={classes.icon} />\n <Typography variant=\"body2\" className={classes.text}>\n {translate('ra-tree.action.add_root')}\n </Typography>\n </div>}\n onLabelClick={handleLabelClick}\n classes={{ iconContainer: classes.iconContainer }}\n />\n );\n};\n\n\nconst useStyles = makeStyles(theme => ({\n iconContainer: {\n width: 24,\n height: 24,\n marginRight: 0,\n alignItems: \"center\",\n },\n label: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0.5),\n },\n icon: {\n marginRight: theme.spacing(1),\n },\n text: {\n fontWeight: 'inherit',\n flexGrow: 1,\n },\n}), { name: 'RaCreateButton' });\n\n\nexport default memo(CreateTreeNode, (prevProps, nextProps) => {\n return (\n prevProps.basePath === nextProps.basePath &&\n prevProps.label === nextProps.label &&\n prevProps.translate === nextProps.translate &&\n prevProps.to === nextProps.to &&\n prevProps.disabled === nextProps.disabled\n );\n});\n","import React, { useCallback } from 'react';\nimport get from 'lodash/get';\nimport clsx from 'clsx';\nimport { makeStyles } from '@material-ui/core/styles';\nimport TreeView from '@material-ui/lab/TreeView';\nimport useTreeContext from './controllers/useTreeContext';\nimport DefaultTreeNode from './TreeNode';\nimport CreateTreeNode from './CreateTreeNode';\n\n\n\nconst TreeComponent = (props) => {\n const {\n className,\n onNodeToggle,\n onNodeSelect,\n treeNode: TreeNode,\n hasCreate,\n hasEdit,\n hasShow,\n ...rest\n } = props;\n\n const classes = useStyles(props);\n const {\n tree,\n data,\n basePath,\n resource,\n readOnly,\n expanded,\n selected,\n setExpanded,\n setSelected,\n getChildNodes,\n } = useTreeContext();\n\n //only expand if icon was clicked\n const handleToggle = useCallback((event, nodeIds) => {\n event.persist()\n let iconClicked = event.target.closest(\".MuiTreeItem-iconContainer\")\n if (iconClicked) {\n setExpanded(nodeIds);\n if (typeof onNodeToggle === 'function') onNodeToggle(event, nodeIds);\n }\n }, []);\n\n //only select if icon wasn't clicked\n const handleSelect = useCallback((event, nodeIds) => {\n event.persist()\n // iconClicked \n if (event.target.closest(\".MuiTreeItem-iconContainer\")) {\n const nodeId = nodeIds[0]\n const nodeChildren = get(tree, [nodeId, \"children\"])\n const expandable = Boolean(Array.isArray(nodeChildren) ? nodeChildren.length : nodeChildren);\n const loaded = nodeChildren.some(child => tree.hasOwnProperty(child.id))\n if (expandable && !loaded) {\n getChildNodes(nodeId)\n }\n }\n //labelClicked\n if (event.target.closest(\".MuiTreeItem-label\")) {\n setSelected(nodeIds);\n if (typeof onNodeSelect === 'function') onNodeSelect(event, nodeIds);\n }\n }, [tree, expanded]);\n\n return (\n\n <TreeView\n className={clsx(\n classes.root,\n className,\n )}\n expanded={expanded}\n selected={selected}\n onNodeToggle={handleToggle}\n onNodeSelect={handleSelect}\n multiSelect\n {...rest}\n >\n {data.map(node => (<TreeNode nodeId={node.id} key={node.id} />))}\n {!readOnly && hasCreate && <CreateTreeNode basePath={basePath} resource={resource} />}\n </TreeView>\n\n );\n};\n\n\nTreeComponent.defaultProps = {\n treeNode: DefaultTreeNode\n}\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n paddingLeft: theme.spacing(1)\n },\n}), { name: 'RaTree' });\n\n\n\nexport default TreeComponent;\n","import React, { useState, useCallback, Fragment } from 'react';\nimport TagWriteDialog from './TagWriteDialog';\nimport IconButton from '@material-ui/core/IconButton';\nimport EditIcon from '@material-ui/icons/Edit';\nimport { fetchEnd, fetchStart, useNotify, useTranslate } from 'react-admin';\nimport { useDispatch } from 'react-redux';\nimport writeTag from '../../dataProvider/DatabusService/Tag/write'\nimport { buildIdFromTag } from '../../dataProvider/DatabusService/Tag/utils';\nimport { isNull } from '../../utils';\n\n\n\n\n\nconst stopPropagation = event => event.stopPropagation();\n\nconst TagWriteButton = (props) => {\n const { className, record, withEvent = true, ...rest } = props\n const dispatch = useDispatch()\n const notify = useNotify()\n const translate = useTranslate()\n const [open, setOpen] = useState(false);\n\n\n const handleOpen = useCallback(event => {\n stopPropagation(event)\n setOpen(true)\n }, [setOpen]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleWrite = useCallback((value) => {\n const { id, asset, parameter, type } = record\n if (isNull(value)) return\n\n dispatch(fetchStart())\n\n writeTag({\n id: buildIdFromTag({ resource: asset.id, tag: parameter.id }),\n data: {\n value,\n }\n })\n .then(({ data }) => {\n const { id, assetId, parameterId, type, value } = data\n const title = translate('ra.notification.value_is_written', { smart_count: 1 })\n const body = `${id} = ${value.toString()} (${type})`\n\n notify('ra.notification.value_is_written', 'info', { smart_count: 1 });\n \n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n })\n .finally(() => {\n dispatch(fetchEnd());\n handleClose();\n });\n\n }, [record, dispatch, notify, handleClose]);\n\n return (\n <Fragment>\n <IconButton size=\"small\" onClick={handleOpen} className={className}>\n <EditIcon />\n </IconButton>\n <TagWriteDialog\n record={record}\n open={open}\n onClose={handleClose}\n onWrite={handleWrite}\n />\n </Fragment>\n );\n}\n\nconst ConditionalTagWriteButton = props => {\n const access = props.record?.parameter?.accessLevel\n if (isNull(access)) return null\n const writeRegex = /W/i;\n const isWritable = writeRegex.test(access)\n return (isWritable) ? <TagWriteButton {...props} /> : null\n}\n\nexport default ConditionalTagWriteButton\n\n","\nvar falsy = /^(?:f(?:alse)?|no?|0+)$/i;\n\nexport default (modelValue) => {\n \n const { type, value } = modelValue; \n switch (type) {\n case 'BOOLEAN': {\n if(typeof value === 'boolean') {\n return value === true ? 1 : 0;\n } else {\n return !falsy.test(value.toString()) ? 1 : 0;\n } \n }\n case 'STRING': {\n return parseFloat(value)\n }\n case 'FLOAT':\n case 'DOUBLE':\n case 'BYTE':\n case 'INT':\n case 'INT32':\n case 'INT64':\n case 'UINT':\n case 'UINT32':\n case 'UINT64':\n case 'BIGINT': {\n return Number(value);\n } \n default:\n return parseFloat(value.toString());\n }\n}","import React, { useEffect, useMemo, useState } from 'react';\nimport { DateTime } from \"luxon\";\nimport HighchartsReact from \"highcharts-react-official\";\nimport Highcharts from \"highcharts/highstock\";\nimport clsx from 'clsx';\nimport { useTheme } from '@material-ui/core/styles';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport Collapse from '@material-ui/core/Collapse';\nimport Button from '@material-ui/core/Button';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\n//import getHistory from '../../dataProvider/DatabusService/TagHistory/getHistory'\nimport getList from '../../dataProvider/DatabusService/TagSeries/getList'\nimport { fetchEnd, fetchStart, useNotify, useTranslate } from 'react-admin';\nimport { useDispatch } from 'react-redux';\nimport Loading from \"../../lib/layout/Loading\";\nimport { chartOptions } from \"./highchartsOptions\";\nimport convertValue from \"./convertValue\";\nimport { makeStyles, alpha } from \"@material-ui/core/styles\";\nimport { get } from 'lodash';\n\nHighcharts.setOptions(chartOptions);\n\nconst useStyles = makeStyles((theme) => ({\n expand: {\n transform: 'rotate(0deg)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shortest,\n }),\n },\n expandOpen: {\n transform: 'rotate(180deg)',\n },\n\n}));\n\nconst initialState = {\n data: [],\n error: undefined,\n loading: false,\n loaded: false,\n}\n\n\n\nconst TagReadHistoryDialogChart = (props) => {\n \n const { \n filterOptions,\n record \n } = props\n\n const theme = useTheme();\n const themeType = theme.palette.type;\n const classes = useStyles();\n const dispatch = useDispatch();\n const notify = useNotify();\n\n \n //const typeIsNumeric = numericTypes.includes(type)\n const [expanded, setExpanded] = useState(true);\n const [state, setState] = useState(initialState)\n\n const handleExpandClick = () => {\n setExpanded(!expanded);\n };\n\n useEffect(() => {\n \n dispatch(fetchStart())\n setState(previous => ({ ...previous, loading: true, loaded: false }))\n\n const { tagId, ...period } = filterOptions;\n\n getList({\n filter: { periods: [period], tagsIds: [tagId] }, \n }).then(responce => {\n const data = get(responce, ['data', 0, 'data', 0, 'data'], []);\n setState(previous => ({ ...previous, data, loading: false, loaded: true }))\n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n setState(previous => ({ ...previous, error, loading: false, loaded: false }))\n })\n .finally(() => {\n dispatch(fetchEnd());\n });\n\n\n }, [filterOptions]);\n\n const options = useMemo(() => {\n \n const axisTheme = {\n gridLineColor: theme.palette.divider,\n minorGridLineColor: theme.palette.divider, \n labels: {\n backgroundColor: theme.palette.background.paper,\n style: {\n color: theme.palette.text.primary,\n },\n },\n lineColor: theme.palette.divider,\n tickColor: theme.palette.divider,\n title: { text: null }\n };\n \n return {\n ...(theme.palette.type == 'dark' ? {\n navigator: {\n handles: {\n backgroundColor: \"#666\",\n borderColor: \"#AAA\"\n },\n outlineColor: \"#CCC\",\n maskFill: \"rgba(255,255,255,0.1)\",\n series: {\n color: \"#7798BF\",\n lineColor: \"#A6C7ED\"\n },\n xAxis: {\n gridLineColor: \"#505053\"\n }\n },\n scrollbar: {\n barBackgroundColor: \"#808083\",\n barBorderColor: \"#808083\",\n buttonArrowColor: \"#CCC\",\n buttonBackgroundColor: \"#606063\",\n buttonBorderColor: \"#606063\",\n rifleColor: \"#FFF\",\n trackBackgroundColor: \"#404043\",\n trackBorderColor: \"#404043\"\n }\n } : {}),\n rangeSelector: {\n ...(theme.palette.type == 'dark' ? {\n buttonTheme: {\n fill: \"#505053\",\n stroke: \"#000000\",\n style: {\n color: \"#CCC\"\n },\n states: {\n hover: {\n fill: \"#707073\",\n stroke: \"#000000\",\n style: {\n color: \"white\"\n }\n },\n select: {\n fill: \"#000003\",\n stroke: \"#000000\",\n style: {\n color: \"white\"\n }\n }\n }\n },\n inputBoxBorderColor: \"#505053\",\n inputStyle: {\n backgroundColor: \"#333\",\n color: \"silver\"\n },\n labelStyle: {\n color: \"silver\"\n }\n } : {}),\n selected: 1,\n buttons: [\n { type: 'hour', count: 1, text: '1ч', title: 'Просмотр за 1 час' }, \n { type: 'hour', count: 6, text: '6ч', title: 'Просмотр за 6 часов' }, \n { type: 'hour', count: 12, text: '12ч', title: 'Просмотр за 12 часов' }, \n { type: 'day', count: 1, text: '1д', title: 'Просмотр за 1 день' }, \n { type: 'day', count: 5, text: '5д', title: 'Просмотр за 5 дней' }, \n { type: 'week', count: 1, text: '1н', title: 'Просмотр за 1 неделю' },\n { type: 'month', count: 1, text: '1м', title: 'Просмотр за 1 месяц' },\n { type: 'all', text: 'Все', title: 'Просмотр за весь период'}\n ]\n },\n chart: {\n backgroundColor: theme.palette.background.paper,\n style: {\n fontFamily: theme.typography.fontFamily,\n },\n zooming: {\n type: 'x'\n }\n }, \n colors: theme.palette.chartOptions.colors, \n tooltip: {\n backgroundColor: theme.palette.background.paper,\n valueDecimals: 4,\n style: {\n color: theme.palette.text.primary,\n },\n },\n legend: {\n itemStyle: {\n color: alpha(theme.palette.text.primary, 0.8),\n fontWeight: \"inherit\",\n },\n itemHoverStyle: {\n color: theme.palette.text.primary,\n },\n itemHiddenStyle: {\n color: theme.palette.text.disabled,\n },\n },\n navigation: {\n buttonOptions: {\n symbolStroke: theme.palette.text.primary,\n theme: {\n fill: theme.palette.background.paper\n }\n }\n },\n yAxis : {\n ...axisTheme\n },\n xAxis: {\n type: 'datetime',\n ...axisTheme\n }, \n series: [{\n data: state.data.map(({ timestamp, type, value}) => [DateTime.fromISO(timestamp).valueOf(), convertValue({ value, type })]),\n //lineWidth: 0.5,\n name: `${record.parameter.name} - ${record.asset.name}`\n }]\n }\n }, [state.data, record, theme])\n\n\n if (!state.loading && state.data.length === 0) return null\n return (\n <DialogContent>\n <Button\n fullWidth\n onClick={handleExpandClick}\n aria-expanded={expanded}\n aria-label=\"show more\"\n className={classes.button}\n startIcon={<ExpandMoreIcon className={clsx(classes.expand, {\n [classes.expandOpen]: expanded,\n })} />}\n >\n График\n </Button>\n <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n <div className={classes.chartContent}>\n {state.loading ? (\n <Loading className={classes.loading} />\n ) : (\n <HighchartsReact\n key={themeType}\n constructorType={\"stockChart\"}\n highcharts={Highcharts}\n options={options}\n />\n )}\n </div>\n </Collapse>\n </DialogContent>\n )\n}\n\nexport default TagReadHistoryDialogChart","\n\nexport const chartOptions = {\n global: {\n useUTC: false\n }, \n plotOptions: {\n series: {\n connectNulls: true\n }\n },\n title: {\n text: ''\n },\n legend: {\n useHTML: true,\n style: {\n fontSize: \"16px\"\n }\n },\n tooltip: {\n crosshairs: true,\n shared: true,\n useHTML: true\n },\n credits: {\n enabled: false\n },\n lang: {\n months: ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],\n weekdays: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],\n shortMonths: ['Янв', 'Фев', 'Март', 'Апр', 'Май', 'Июнь', 'Июль', 'Авг', 'Сент', 'Окт', 'Нояб', 'Дек'],\n resetZoom: 'Cбросить масштаб',\n downloadPNG: 'Скачать PNG',\n downloadJPEG: 'Скачать JPEG',\n downloadPDF: 'Скачать PDF',\n downloadSVG: 'Скачать SVG',\n printChart: 'Напечатать график',\n loading: 'Загрузка ...'\n },\n \n // symbols: ['circle', 'square', 'diamond']\n}\n\n","import React, { Fragment, useEffect, useState } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport clsx from 'clsx';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport Collapse from '@material-ui/core/Collapse';\nimport Button from '@material-ui/core/Button';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport TagValueField from './TagValueField'\nimport TagQualityChip from \"./TagQualityChip\";\nimport { DateField, useListController, ListContextProvider, Datagrid, Pagination } from 'react-admin';\nimport useListStyles from \"../../lib/list/useListStyles\";\nimport { dateTimeOptions } from '../../utils';\n\n\n\nconst useStyles = makeStyles((theme) => ({\n expand: {\n transform: 'rotate(0deg)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shortest,\n }),\n },\n expandOpen: {\n transform: 'rotate(180deg)',\n },\n timestampSrv: {\n width: 176,\n whiteSpace: \"nowrap\",\n },\n smallTable : {\n '&>tbody>tr>td': {\n padding: `1px 6px !important`\n },\n '&>tbody>tr>td:first-child': {\n padding: `1px 16px !important`\n }\n \n }\n\n}));\n\nconst numericTypes = [\"INT\", \"BIGINT\", \"FLOAT\", \"BYTE\"]\n\n\nconst TagReadHistoryDialogTableList = (props) => {\n const { \n filterOptions,\n record \n } = props\n\n\n const classes = useStyles();\n const listClasses = useListStyles();\n const type = record?.type\n const parameter = record?.parameter\n const typeIsNumeric = numericTypes.includes(type)\n const [expanded, setExpanded] = useState(!typeIsNumeric);\n\n const handleExpandClick = () => {\n setExpanded(!expanded);\n };\n\n /*\n const listContext = useList({\n //data: data,\n ids: state.data.map(({ id }) => id),\n basePath: '/TagHistory',\n resource: 'TagHistory',\n perPage: 25,\n sort: { field: \"timestamp\", order: \"DESC\" },\n ...state\n });*/\n\n const controllerProps = useListController({\n basePath:\"/tagHistory\",\n resource:\"TagHistory\", \n filter: filterOptions,\n sort: { field: 'timestamp', order: 'DESC' },\n perPage:10\n });\n\n //if (!data) return null\n\n return (\n <Fragment>\n <DialogContent>\n <Button\n fullWidth\n onClick={handleExpandClick}\n aria-expanded={expanded}\n aria-label=\"show more\"\n className={classes.button}\n startIcon={<ExpandMoreIcon className={clsx(classes.expand, {\n [classes.expandOpen]: expanded,\n })} />}\n >\n Таблица\n </Button>\n </DialogContent>\n <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n <ListContextProvider value={controllerProps}>\n <Datagrid className={classes.smallTable}>\n <TagValueField source=\"value\" sortable={false} parameter={parameter}/>\n <TagQualityChip source=\"quality\" sortable={false} cellClassName={listClasses.cellMinWidth}/>\n <DateField source=\"timestamp\" noWrap options={dateTimeOptions} cellClassName={listClasses.cellMinWidth} />\n <DateField source=\"timestampSrv\" noWrap options={dateTimeOptions} cellClassName={classes.timestampSrv} />\n </Datagrid>\n <Pagination />\n </ListContextProvider>\n </Collapse>\n </Fragment>\n\n )\n}\n\nexport default TagReadHistoryDialogTableList","import React, { useCallback, useEffect, useState } from 'react';\nimport { DateTime } from 'luxon';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { Form } from 'react-final-form';\nimport { useTranslate, DateTimeInput } from 'react-admin';\nimport TagReadHistoryDialogChart from './TagReadHistoryDialogChart';\nimport TagReadHistoryDialogTableList from './TagReadHistoryDialogTableList';\n\n\nconst defaultSubscription = {\n submitting: true,\n pristine: true,\n valid: true,\n invalid: true,\n values: true,\n};\n\nconst useStyles = makeStyles(theme => ({\n form: {\n display: \"flex\",\n gap: 16\n },\n input: {\n flexGrow: 1\n }\n}), { name: 'TagReadHistoryDialog' });\n\n\n\nconst TagReadHistoryDialog = (props) => {\n const { open, onClose, onRequest, record, resource, initialValues } = props\n const classes = useStyles()\n const translate = useTranslate()\n\n const handleClick = useCallback(event => {\n event.stopPropagation();\n }, []);\n\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const [filterOptions, setFilterOptions] = useState({})\n \n const handleRequest = useCallback((values) => {\n setFilterOptions({...values, tagId: record.id });\n }, [onRequest, record]);\n\n useEffect(() => {\n if (open) setFilterOptions({ ...initialValues, tagId: record.id });\n }, [onRequest, open])\n\n return (\n <Dialog\n open={open}\n onClose={handleClose}\n onClick={handleClick}\n fullWidth\n maxWidth=\"md\"\n aria-labelledby=\"read-tag-history-dialog-title\"\n aria-describedby=\"read-tag-history-dialog-description\"\n scroll=\"body\"\n >\n <DialogTitle id=\"read-tag-history-dialog-title\">{translate(\"ra.message.read_tag_history_title\")}</DialogTitle>\n <Form\n initialValues={initialValues}\n onSubmit={handleRequest}\n subscription={defaultSubscription}\n keepDirtyOnReinitialize\n render={formProps => (\n <form>\n <span />\n <DialogContent>\n <DialogContentText >{translate(\"ra.message.read_tag_history_content\", { tag: record.id })}</DialogContentText>\n <div className={classes.form}>\n <DateTimeInput\n className={classes.input}\n source=\"timestamp_gte\"\n label=\"C\"\n inputProps={{ max: DateTime.fromJSDate(formProps.values.timestamp_lte).toISO({ includeOffset: false }) }}\n />\n <DateTimeInput\n className={classes.input}\n source=\"timestamp_lte\"\n label=\"по\"\n inputProps={{ min: DateTime.fromJSDate(formProps.values.timestamp_gte).toISO({ includeOffset: false }) }}\n />\n </div>\n </DialogContent>\n <TagReadHistoryDialogChart\n resource={resource}\n record={record} \n filterOptions={filterOptions}\n />\n <TagReadHistoryDialogTableList\n resource={resource}\n record={record} \n filterOptions={filterOptions}\n />\n <DialogActions>\n <Button onClick={handleClose}>\n {translate(\"ra.action.cancel\", { _: \"Cancel\" })}\n </Button>\n <Button onClick={formProps.handleSubmit} color=\"primary\">\n {translate(\"ra.action.request\", { _: \"Request\" })}\n </Button>\n </DialogActions>\n </form>\n )}\n />\n </Dialog>\n )\n}\n\nexport default TagReadHistoryDialog","import get from \"lodash/get\";\nimport gql from \"graphql-tag\";\nimport graphqlClient from \"../../DatabusService/graphqlClient\";\n\n\n\nexport const GET_TAG_HISTORY = gql`\n query getTagHistory($where: TagSeriesWhereUniqueInput!, $historyOptions: HistoryOptions!) {\n data: TagSeries {\n data: getOne(where: $where, historyOptions: $historyOptions) {\n item {\n id\n asset { id }\n parameter { id }\n data {\n id\n value\n type\n quality\n timestamp\n timestampSrv\n utcOffset\n } \n }\n }\n }\n }\n`\n\nconst getHistory = (args) => {\n const {\n id,\n timestamp_gte,\n timestamp_lte,\n asset,\n parameter,\n } = args;\n\n return graphqlClient\n .request(GET_TAG_HISTORY, {\n where: { id },\n historyOptions: {\n timestamp_gte,\n timestamp_lte,\n distinct: true,\n maxCount: 10000,\n }\n })\n .then(async (response) => {\n const data = get(response, [\"data\", \"data\", \"item\", \"data\"], [])\n return {\n data: data.map(item => ({ ...item, parameter, asset }))\n };\n });\n}\n\nexport default getHistory","import React, { useState, useCallback, Fragment } from 'react';\nimport { DateTime } from 'luxon';\nimport TagReadHistoryDialog from './TagReadHistoryDialog';\nimport IconButton from '@material-ui/core/IconButton';\nimport HistoryIcon from '@material-ui/icons/History';\nimport { fetchEnd, fetchStart, useNotify, useTranslate } from 'react-admin';\nimport { useDispatch } from 'react-redux';\nimport { buildIdFromTag } from '../../dataProvider/DatabusService/Tag/utils';\nimport getHistory from '../../dataProvider/GatewayService/Tag/getHistory'\nimport { isNull } from '../../utils';\n\n\n/*\nconst initialState = {\n data: [],\n error: undefined,\n loading: false,\n loaded: false,\n}\n */\n\nconst initialValues = {\n timestamp_gte: DateTime.local().minus({ days: 1 }).startOf('day').toJSDate(),\n timestamp_lte: DateTime.local().endOf('day').toJSDate()\n};\n\nconst stopPropagation = event => event.stopPropagation();\n\nconst TagReadHistoryButton = (props) => {\n const { className, record, resource, ...rest } = props\n //const dispatch = useDispatch()\n //const notify = useNotify()\n //const translate = useTranslate()\n const [open, setOpen] = useState(false)\n //const [state, setState] = useState(initialState)\n //const assetId = record?.asset?.id\n //const parameterId = record?.parameter?.id\n\n const handleOpen = useCallback(event => {\n stopPropagation(event)\n setOpen(true)\n }, [setOpen]);\n\n const handleClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n /*\n const handleRequest = useCallback((values) => {\n const { timestamp_gte, timestamp_lte } = values\n\n dispatch(fetchStart())\n setState(previous => ({ ...previous, loading: true, loaded: false }))\n\n getHistory({\n id: buildIdFromTag({ resource: assetId, tag: parameterId }),\n timestamp_gte: DateTime.fromJSDate(timestamp_gte).toISO(),\n timestamp_lte: DateTime.fromJSDate(timestamp_lte).toISO(),\n parameter: { id: parameterId },\n asset: { id: assetId },\n })\n .then(({ data }) => {\n setState(previous => ({ ...previous, data: [...data], loading: false, loaded: true }))\n })\n .catch((error) => {\n notify(typeof error === 'string' ? error : error.message || 'ra.notification.http_error', 'warning');\n setState(previous => ({ ...previous, error, loading: false, loaded: false }))\n })\n .finally(() => {\n dispatch(fetchEnd());\n });\n\n }, [assetId, parameterId, dispatch, setState]);*/\n\n return (\n <Fragment>\n <IconButton size=\"small\" onClick={handleOpen} className={className} >\n <HistoryIcon />\n </IconButton>\n <TagReadHistoryDialog\n resource={resource}\n record={record}\n initialValues={initialValues}\n open={open}\n onClose={handleClose}\n //{...state}\n />\n </Fragment>\n );\n}\n\nconst ConditionalTagReadHistoryButton = props => {\n const access = props.record?.parameter?.accessLevel\n if (isNull(access)) return null\n const historyRegex = /H/i;\n const isHistorizable = historyRegex.test(access)\n return (isHistorizable) ? <TagReadHistoryButton {...props} /> : null\n}\n\nexport default ConditionalTagReadHistoryButton\n\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { EVENT_FRAGMENT } from './typeDefs';\n\n\nconst ACKNOWLEDGE_EVENT = gql`\n mutation ackEvent($where: EventWhereUniqueInput! $input: EventAckInput!) {\n data: Event {\n data: ack(where: $where, input: $input) {\n item {\n ...EventFragment\n }\n }\n }\n }\n ${EVENT_FRAGMENT}\n`\n\nexport default ({ id, comment }) => {\n return graphqlClient.request(ACKNOWLEDGE_EVENT, {\n where: {\n id\n },\n input: {\n comment\n }\n }).catch(graphqlErrorHandler)\n};","import React, { useState, useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport classnames from 'classnames';\nimport { useTranslate, useResourceContext, useRefresh, useNotify, useRedirect, fetchStart, fetchEnd, Button as RaButton } from 'react-admin';\nimport acknowledgeEvent from '../../dataProvider/EventbusService/Event/acknowledge';\nimport Button from '@material-ui/core/Button';\nimport TextField from '@material-ui/core/TextField';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\n\n\n\nconst AcknowledgeButton = props => {\n const {\n label = 'ra.action.acknowledge',\n classes: classesOverride,\n className,\n icon = defaultIcon,\n record,\n basePath,\n redirect: redirectTo = false,\n ...rest\n } = props;\n\n const dispatch = useDispatch();\n const notify = useNotify();\n const redirect = useRedirect();\n const refresh = useRefresh();\n const translate = useTranslate();\n //const resource = useResourceContext(props);\n const [open, setOpen] = useState(false);\n const [loading, setLoading] = useState(false);\n const [comment, setComment] = React.useState(\"\");\n\n const handleClick = useCallback(event => {\n event.stopPropagation();\n }, []);\n\n const handleOpen = useCallback(event => {\n setOpen(true);\n event.stopPropagation();\n }, [setOpen]);\n\n const handleClose = useCallback((event, reason) => {\n setOpen(false);\n event.stopPropagation();\n }, [setOpen]);\n\n const handleChange = useCallback(event => {\n setComment(event.target.value);\n }, [setComment]);\n\n const handleAcknowledgeEvent = useCallback(event => {\n event.stopPropagation();\n setLoading(true);\n dispatch(fetchStart()); // start the global loading indicator \n\n acknowledgeEvent({\n id: record.id,\n comment\n })\n .then(() => {\n notify('ra.notification.acknowledged', 'info', { smart_count: 1 });\n \n //Не отрабатывает redirectTo = false, по документауии false должен запрещать редирект, на самом деле он выплняеться в любом случае\n if(redirectTo) {\n redirect(redirectTo, basePath);\n }\n\n refresh();\n setOpen(false);\n })\n .catch((error) => {\n notify(\n typeof error === 'string' ? error : error.message || 'ra.notification.http_error',\n 'warning'\n )\n })\n .finally(() => {\n setLoading(false);\n dispatch(fetchEnd()); // stop the global loading indicator\n });\n }, [record, comment]);\n\n if (!record) return null\n\n return (\n <>\n <RaButton\n onClick={handleOpen}\n disabled={record.ack}\n label={label}\n className={classnames(\n 'ra-acknowledge-button',\n className\n )}\n key=\"button\"\n {...rest}\n >\n {icon}\n </RaButton>\n <Dialog\n open={open}\n onClose={handleClose}\n onClick={handleClick}\n aria-labelledby=\"acknowledge-dialog\"\n >\n <DialogTitle id=\"acknowledge-dialog\">{translate(\"ra.message.acknowledgement\")}</DialogTitle>\n <DialogContent>\n <DialogContentText>{translate(\"ra.message.acknowledge_dialog\")}</DialogContentText>\n <TextField\n autoFocus\n margin=\"dense\"\n id=\"comment\"\n label={translate(\"resources.Event.fields.comment\")}\n value={comment}\n onChange={handleChange}\n fullWidth\n // name=\"rfc\"\n // InputProps={{\n // endAdornment: (\n // <datalist id=\"rfc\">\n // <option value=\"XAXX010101000\"></option>\n // <option value=\"XEXX010101000\"></option>\n // </datalist>\n // ),\n // inputProps: {\n // list: \"rfc\"\n // }\n // }}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose} color=\"primary\" disabled={loading}>\n {translate(\"ra.action.cancel\")}\n </Button>\n <Button onClick={handleAcknowledgeEvent} color=\"primary\" disabled={loading} variant=\"contained\" disableElevation>\n {translate(\"ra.action.acknowledge\")}\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n\nconst ConditionalAcknowledgeButton = props => {\n const ackRequired = props.record?.ackRequired\n return (ackRequired === false) ? null : <AcknowledgeButton {...props} />\n}\n\nconst defaultIcon = <ThumbUpIcon />;\n\nexport default ConditionalAcknowledgeButton;\n","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport { useTranslate } from 'ra-core';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\n\n\nconst units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n\nfunction niceBytes(x) {\n\n let l = 0, n = parseInt(x, 10) || 0;\n\n while (n >= 1024 && ++l) {\n n = n / 1024;\n }\n\n return {\n count: n.toFixed(n < 10 && l > 0 ? 1 : 0),\n unit: units[l]\n }\n}\n\n\nexport const FileSizeField = memo(({ className, classes: classesOverride, emptyText, source, record, ...props }) => {\n const translate = useTranslate();\n if (!record) return null;\n const value = get(record, source);\n const size = niceBytes(value);\n const valueText = (value)\n ? `${size.count} ${translate(`ra.units.${size.unit}`, { _: size.unit })}`\n : emptyText;\n\n return (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(props)}\n >\n {valueText}\n </Typography>\n )\n});\n\nFileSizeField.defaultProps = {\n addLabel: true,\n};\n\n\n\nexport default FileSizeField;\n","import React, { useMemo } from \"react\";\nimport get from 'lodash/get';\nimport { useRecordContext } from 'react-admin';\nimport { makeStyles, useTheme } from '@material-ui/core';\nimport Typography from '@material-ui/core/Typography';\nimport Editor from \"rich-markdown-editor\";\nimport { light, dark } from \"rich-markdown-editor/dist/styles/theme\";\nimport sanitizeFieldRestProps from \"./sanitizeFieldRestProps\";\n\n\n\nconst useEditorTheme = () => {\n const theme = useTheme();\n const defaultTheme = theme.palette.type === \"light\" ? light : dark\n const editorTheme = useMemo(() => ({\n ...defaultTheme,\n // zIndex: theme.zIndex.modal,\n link: theme.palette.primary.main,\n background: \"transperent\",\n fontFamily: theme.typography.fontFamily,\n fontWeight: theme.typography.fontWeightRegular,\n text: \"theme.palette.text.primary\",\n textSecondary: theme.palette.text.secondary,\n placeholder: theme.palette.text.secondary,\n }), [theme])\n\n return editorTheme\n}\n\nconst MarkdownField = (props) => {\n const { source, resource, emptyText, className, ...rest } = props;\n const record = useRecordContext(props);\n const value = get(record, source);\n const classes = useStyles()\n const theme = useEditorTheme()\n\n if (value == null) {\n return emptyText ? (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {emptyText}\n </Typography>\n ) : null;\n }\n\n return (\n <Editor\n id={`${resource}_${source}_${record.id}`}\n className={classes.root}\n theme={theme}\n // defaultValue={value}\n value={value}\n readOnly\n />\n );\n};\n\nMarkdownField.defaultProps = {\n addLabel: true,\n fullWidth: true,\n};\n\nconst useStyles = makeStyles(theme => ({\n root: {\n fontSize: theme.typography.fontSize,\n },\n}), { name: 'RaMarkdownField' });\n\n\nexport default MarkdownField","import React, { memo } from \"react\";\nimport NotificationsIcon from '@material-ui/icons/Notifications';\nimport NotificationsActiveIcon from '@material-ui/icons/NotificationsActive';\nimport { useTranslate } from 'ra-core';\n\n\n\nconst EventActiveField = memo(({ className, record = {}, emptyText, ...rest }) => {\n const translate = useTranslate();\n const active = record.active;\n\n return (active\n ? <NotificationsActiveIcon titleAccess={translate('resources.Event.enums.active.true', { _: \"true\" })} color=\"error\" />\n : <NotificationsIcon titleAccess={translate('resources.Event.enums.active.false', { _: \"false\" })} color=\"disabled\" />\n );\n});\n\nEventActiveField.displayName = 'EventActiveField';\n\nEventActiveField.defaultProps = {\n addLabel: true,\n};\n\nexport default EventActiveField;","import React, { memo } from \"react\";\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport ThumbUpOffIcon from '../../lib/icons/ThumbUpOff';\nimport { useTranslate } from 'ra-core';\n\n\n\nconst EventAckField = memo(({ className, source, record = {}, emptyText, ...rest }) => {\n const translate = useTranslate();\n const ack = record.ack;\n const ackRequired = record.ackRequired;\n\n return (ackRequired\n ? ack\n ? <ThumbUpIcon titleAccess={translate('resources.Event.enums.ack.true', { _: \"true\" })} color=\"primary\" />\n : <ThumbUpIcon titleAccess={translate('resources.Event.enums.ack.false', { _: \"false\" })} color=\"disabled\" />\n : <ThumbUpOffIcon titleAccess={translate('resources.Event.enums.ack.none', { _: \"none\" })} color=\"disabled\" />\n );\n});\n\nEventAckField.displayName = 'EventAckField';\n\nEventAckField.defaultProps = {\n addLabel: true,\n};\n\nexport default EventAckField;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M12 2a2 2 0 00-1.4.6l-8 8a2 2 0 000 2.8l8 8c.8.8 2 .8 2.8 0l8-8c.8-.8.8-2 0-2.8l-8-8A2 2 0 0012 2z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M3 5c0-1.1.9-2 2-2h14a2 2 0 012 2v14a2 2 0 01-2 2H5a2 2 0 01-2-2V5z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M10.25 5.16a2 2 0 013.5 0l7 12.62A2 2 0 0119 20.75H5a2 2 0 01-1.75-2.97l7-12.62z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M13.75 19.72a2 2 0 01-3.5 0l-7-12.62A2 2 0 015 4.13h14a2 2 0 011.75 2.97l-7 12.62z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from \"react\";\nimport { red, orange, purple, blue } from '@material-ui/core/colors';\nimport SeverityCriticalIcon from '../../lib/icons/SeverityCritical';\nimport SeverityHighIcon from '../../lib/icons/SeverityHigh';\nimport SeverityMediumIcon from '../../lib/icons/SeverityMedium';\nimport SeverityLowIcon from '../../lib/icons/SeverityLow';\nimport SeverityNone from '@material-ui/icons/FiberManualRecord';\n\nexport const getSeverityIcon = (severityLevel) => {\n switch (severityLevel) {\n case 0: return <SeverityNone />;\n case 1: return <SeverityLowIcon />;\n case 2: return <SeverityMediumIcon />;\n case 3: return <SeverityHighIcon />;\n case 4: return <SeverityCriticalIcon />;\n default: return null;\n }\n}\n\nexport const getSeverityColors = (severityLevel) => {\n switch (severityLevel) {\n case 1: return {\n light: blue[100],\n main: blue[500],\n dark: blue[900],\n contrastText: blue[500],\n };\n case 2: return {\n light: purple[100],\n main: purple[500],\n dark: purple[900],\n contrastText: purple[500],\n };\n case 3: return {\n light: orange[100],\n main: orange[500],\n dark: orange[900],\n contrastText: orange[500],\n };\n case 4: return {\n light: red[100],\n main: red[500],\n dark: red[900],\n contrastText: red[500],\n };\n default: return {};\n }\n}\n\nexport const getSeverityKey = (severityLevel) => {\n switch (severityLevel) {\n case 0: return \"low\";\n case 1: return \"low\";\n case 2: return \"medium\";\n case 3: return \"high\";\n case 4: return \"critical\";\n default: return \"low\";\n }\n}","import React, { useCallback, isValidElement } from \"react\";\nimport { useHistory } from 'react-router-dom';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { alpha, lighten, darken } from '@material-ui/core/styles/colorManipulator';\nimport TableRow from '@material-ui/core/TableRow';\nimport TableCell from '@material-ui/core/TableCell';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport { Datagrid, DatagridBody, DatagridCell, RecordContextProvider, useResourceContext, linkToRecord, SimpleList } from 'react-admin';\nimport { getSeverityKey } from './severity';\n\n// import { useTheme, withStyles, lighten, darken } from '@material-ui/core/styles';\n\nconst useStyles = makeStyles(theme => ({\n rootBySeverity: (props) => {\n const { record } = props\n\n if (!record) return;\n\n const severity = record.severity\n const active = record.active\n const unack = !record.ack && record.ackRequired\n const severityThemeKey = getSeverityKey(severity)\n if (!severityThemeKey || !(active || unack)) return;\n\n return (theme.palette.type === 'light') ? {\n backgroundColor: theme.palette[severityThemeKey].light,\n '&.MuiTableRow-hover:hover': {\n backgroundColor: darken(theme.palette[severityThemeKey].light, theme.palette.action.selectedOpacity),\n },\n } : {\n backgroundColor: theme.palette[severityThemeKey].dark,\n '&.MuiTableRow-hover:hover': {\n backgroundColor: lighten(theme.palette[severityThemeKey].dark, theme.palette.action.selectedOpacity),\n },\n }\n }\n}), { name: 'MyCustomRow' });\n\n\n\nexport const EventListSimple = (props) => {\n return (\n <SimpleList\n primaryText={record => record.message.title}\n secondaryText={record => record.message.body}\n tertiaryText={record => new Date(record.timestamp).toLocaleDateString()}\n linkType={record => record.canEdit ? \"edit\" : \"show\"}\n />\n );\n}\n\n\nconst EventListDatagridRow = React.forwardRef((props, ref) => {\n const {\n basePath,\n children,\n classes: classesOverride,\n className,\n expand,\n hasBulkActions,\n hover,\n id,\n onToggleItem,\n record,\n rowClick,\n selected,\n style,\n selectable,\n ...rest\n } = props;\n\n const classes = useStyles({ record });\n const resource = useResourceContext(props);\n const history = useHistory();\n\n\n const handleToggleSelection = useCallback(\n event => {\n if (!selectable) return;\n onToggleItem(id, event);\n event.stopPropagation();\n },\n [id, onToggleItem, selectable]\n );\n const handleClick = useCallback(\n async event => {\n if (!rowClick) return;\n event.persist();\n\n const effect =\n typeof rowClick === 'function'\n ? await rowClick(id, basePath || `/${resource}`, record)\n : rowClick;\n switch (effect) {\n case 'edit':\n history.push(linkToRecord(basePath || `/${resource}`, id));\n return;\n case 'show':\n history.push(\n linkToRecord(basePath || `/${resource}`, id, 'show')\n );\n return;\n case 'toggleSelection':\n handleToggleSelection(event);\n return;\n default:\n if (effect) history.push(effect);\n return;\n }\n },\n [\n basePath,\n history,\n handleToggleSelection,\n id,\n record,\n resource,\n rowClick,\n ]\n );\n\n return (\n <RecordContextProvider value={record}>\n <TableRow\n ref={ref}\n className={className}\n classes={{ root: classes.rootBySeverity }}\n key={id}\n style={style}\n hover={hover}\n onClick={handleClick}\n {...rest}\n >\n {hasBulkActions && (\n <TableCell padding=\"checkbox\">\n {selectable && (\n <Checkbox\n color=\"primary\"\n className={`select-item ${classes.checkbox}`}\n checked={selected}\n onClick={handleToggleSelection}\n />\n )}\n </TableCell>\n )}\n {React.Children.map(children, (field, index) =>\n isValidElement(field) ? (\n <DatagridCell\n key={`${id}-${(field.props).source || index\n }`}\n className={classnames(\n `column-${(field.props).source}`,\n classes.rowCell\n )}\n record={record}\n {...{ field, basePath, resource }}\n />\n ) : null\n )}\n </TableRow>\n </RecordContextProvider>\n );\n});\n\nEventListDatagridRow.defaultProps = {\n hasBulkActions: false,\n hover: true,\n selected: false,\n selectable: true,\n};\n\nconst EventListDatagridBody = (props) => {\n return (<DatagridBody {...props} row={<EventListDatagridRow />} />);\n}\n\nconst EventListDatagrid = (props) => {\n return (<Datagrid {...props} body={<EventListDatagridBody />} />);\n}\n\nexport default EventListDatagrid;","import { Ability, createAliasResolver } from '@casl/ability'\nimport set from 'lodash/set'\n\n\n\n\nexport const defineAbilityFor = function (rules) {\n if (!checkRules(rules)) return undefined\n const defineRules = rules.reduce((acc, rule) => {\n const defineRule = {\n ...rule,\n fields: Array.isArray(rule.fields) && rule.fields.length > 0 ? rule.fields : null\n }\n\n return [...acc, defineRule]\n }, [])\n\n return defineRules\n\n // rules.filter(rule => rule.conditions).forEach(r => { for (let key in r.conditions) { if (r.conditions[key] === \"undefined\") { r.conditions[key] = undefined; } } });\n // return rules;\n};\n\nexport const checkRules = (rules) => Boolean(Array.isArray(rules) && rules.length > 0)\n\n\nclass Permissions {\n constructor() {\n\n const resolveAction = createAliasResolver({\n all: ['getOne', 'getList', 'getMany', 'create', 'update', 'delete', 'remove', 'restore']\n });\n\n const abilityInstance = new Ability([], {\n resolveAction\n });\n\n this.update = (ability) => {\n if (checkRules(ability.rules)) {\n const defineAbilityRules = defineAbilityFor(ability.rules)\n abilityInstance.update([]);\n abilityInstance.update(defineAbilityRules)\n this.role = ability.role\n this.rules = defineAbilityRules\n } else {\n abilityInstance.update([]);\n throw Error('ra.auth.permissions_error')\n }\n\n };\n\n this.can = (action, subject, field, reference) => {\n return reference ? abilityInstance.can(action, subject, field) && abilityInstance.can(\"getList\", reference) : abilityInstance.can(action, subject, field);\n };\n\n this.getConditions = (action, subject) => {\n\n const rules = abilityInstance.rulesFor(action, subject)\n\n return rules.filter(rule => !rule.inverted && rule.conditions).reduce((values, rule) => Object.keys(rule.conditions).reduce((fields, fieldName) => {\n const value = rule.conditions[fieldName];\n\n set(fields, fieldName, value);\n\n return fields;\n }, values), {});\n }\n }\n}\n\nconst permissions = new Permissions()\n\n\n\nexport default permissions","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M12 3C7.58 3 4 4.79 4 7s3.58 4 8 4 8-1.79 8-4-3.58-4-8-4M4 9v3c0 2.21 3.58 4 8 4s8-1.79 8-4V9c0 2.21-3.58 4-8 4s-8-1.79-8-4m0 5v3c0 2.21 3.58 4 8 4s8-1.79 8-4v-3c0 2.21-3.58 4-8 4s-8-1.79-8-4Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import { useEffect, useState, useCallback } from 'react';\nimport { useNotify, useVersion } from 'react-admin';\nimport subscribe from '../../dataProvider/DatabusService/Tag/subscribe';\n\n\nconst defaultState = {\n data: null,\n loading: false,\n loaded: false,\n error: null,\n}\n\nconst defaultOptions = {\n enabled: true\n}\n\nconst format = (data) => {\n const { tag: { resource, tag }, ...other } = data\n const record = {\n id: `@databus.${resource}.${tag}`,\n datasource: \"databus\",\n assetId: resource,\n parameterId: tag,\n ...other\n }\n return record\n}\n\n\nconst useTagSubscription = (args = {}, options = defaultOptions) => {\n const notify = useNotify();\n const version = useVersion();\n const [state, setState] = useState(defaultState)\n\n\n const { filter } = args\n const { enabled } = options\n const requestSignature = JSON.stringify([filter, enabled, version])\n const refreshSignature = JSON.stringify([filter, enabled])\n\n useEffect(() => {\n if (!enabled) return\n setState(defaultState);\n }, [refreshSignature, setState])\n\n const onNext = useCallback((next) => {\n const data = next?.data?.data?.data || []\n\n setState(prev => {\n return {\n ...prev,\n data: data.map(format),\n loading: false,\n loaded: true,\n }\n })\n\n }, [setState])\n\n const onError = useCallback((error) => {\n notify(\n typeof error === 'string' ? error : error.message || 'ra.notification.http_error',\n 'warning'\n )\n\n setState(prev => ({\n ...prev,\n error,\n loading: false,\n loaded: false\n }));\n\n }, [setState, notify])\n\n const onComplete = useCallback(() => { }, [])\n\n useEffect(() => {\n if (!enabled) return\n\n setState(prev => ({ ...prev, loading: true, loaded: false }));\n\n const subscription = subscribe({ filter }, onNext, onError, onComplete);\n\n return () => {\n setState(prev => ({ ...prev, loading: false, loaded: false }));\n if (subscription?.unsubscribe) subscription.unsubscribe();\n };\n\n }, [requestSignature, setState])\n\n return state\n\n}\n\nexport default useTagSubscription","export const autocompleteMatchTrue = () => true;\n\nexport const autocompleteMinLength = (count) => (val) => val.trim().length > count;\n","import React, { cloneElement } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport FolderIcon from '@material-ui/icons/Folder';\nimport AssetIcon from '../../lib/icons/Asset';\nimport { amber, red, blue } from '@material-ui/core/colors';\nimport { isEmpty } from 'lodash';\n\nconst useStyles = makeStyles({\n '@keyframes blinker': {\n '50%': {\n opacity: 0.3\n }\n },\n icon: {\n marginLeft: 0,\n marginRight: 4,\n backgroundColor: 'transparent'\n },\n blink: {\n animationName: '$blinker',\n animationDuration: '1s',\n animationTimingFunction: 'linear',\n animationIterationCount: 'infinite',\n },\n withAnimation: {\n animationPlayState: 'running',\n },\n});\n\nconst typeIcons = {\n ASSET: <AssetIcon fontSize=\"small\" />,\n FOLDER: <FolderIcon fontSize=\"small\" />\n}\n\nexport const CatalogIcon = ({ record, ...props }) => {\n\n let icon = typeIcons[record.type] || null; //defaultIcon;\n\n const hasAssetActiveAlarm = record.alarm?.ALARM?.value === true;\n const hasAssetAckAlarm = isEmpty(record.alarm || {}) ? true : record.alarm?.ACK?.value === true;\n\n const classes = useStyles()\n\n const className = [classes.icon]\n let color = undefined;\n switch (record.type) {\n case 'FOLDER':\n color = amber[600];\n break;\n case 'ASSET':\n color = (hasAssetActiveAlarm || !hasAssetAckAlarm) ? red[400] : blue[600];\n if (!hasAssetAckAlarm) {\n className.push(classes.blink);\n className.push(classes.withAnimation);\n }\n break;\n }\n\n if (!icon) return null;\n\n return cloneElement(icon, {\n ...props,\n className: className.join(' '),\n style: { color }\n })\n}\n\nexport default CatalogIcon;","import React, { useEffect, useState, useMemo } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { unionBy, isEmpty, keyBy } from 'lodash';\nimport {\n ResourceContextProvider,\n useTranslate\n} from 'react-admin';\nimport {\n Card,\n CardContent,\n InputAdornment,\n TextField\n} from '@material-ui/core';\nimport SearchIcon from '@material-ui/icons/Search';\nimport TreeComponent from '../../lib/tree/TreeComponent';\nimport useTreeController from '../../lib/tree/controllers/useTreeController';\nimport TreeContextProvider from '../../lib/tree/controllers/TreeContextProvider';\nimport CatalogIcon from './CatalogIcon';\nimport useTagSubscription from '../../controller/data/useTagSubscription';\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginTop: 0\n },\n content: {\n paddingTop: theme.spacing(1),\n overflow: 'auto',\n height: 500,\n width: 380,\n padding: 0,\n // '&:last-child': { paddingBottom: 0 }\n }\n}));\n\nconst TreeCatalogSelectorComponent = ({\n onAssetSelect,\n onSelect,\n classes: classesOverride,\n ...props\n}) => {\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate();\n const controllerProps = useTreeController(props);\n\n const {\n selected,\n tree,\n setTree,\n getNode,\n getRootNodes\n } = controllerProps;\n\n const [alarms, setAlarms] = useState([]);\n\n const tag_in = useMemo(() => {\n if (isEmpty(tree)) { return [] }\n return Object.values(tree).filter(tr => tr.type == 'ASSET' && tr.resource?.id).flatMap(tr => [\n { tag: 'ALARM', resource: tr.resource.id },\n { tag: 'ACK', resource: tr.resource.id }\n ])\n }, [tree]);\n\n const { data } = useTagSubscription({\n filter: { tag_in }\n }, { enabled: tag_in.length > 0 });\n\n useEffect(() => {\n if (data?.length > 0) {\n setAlarms((prewProps) => unionBy(data, prewProps, 'id'));\n }\n }, [data]);\n\n useEffect(async () => {\n if (!isEmpty(tree) && alarms.length > 0) {\n setTree(keyBy(Object.values(tree).map(tr => {\n if (tr.type == 'ASSET') {\n const resource_alarm = alarms.filter(a => a.assetId == tr.resource?.id);\n return resource_alarm.length > 0 ? {\n ...tr,\n alarm: keyBy(resource_alarm, 'parameterId')\n } : tr;\n } else {\n return tr;\n }\n }), 'id'));\n }\n }, [alarms])\n\n\n useEffect(async () => {\n if (selected?.length > 0) {\n const selectedNodes = selected.map(id => getNode(id));\n\n const assetSelectNode = selectedNodes[0];\n\n if (assetSelectNode?.type == 'ASSET' && assetSelectNode?.resource?.id) {\n onAssetSelect && onAssetSelect({\n assetId: assetSelectNode.resource.id\n });\n }\n\n onSelect && onSelect(selectedNodes);\n }\n }, [getNode, selected])\n\n\n const handleSearch = (event) => {\n getRootNodes(event.target.value);\n }\n\n return (\n <TreeContextProvider value={controllerProps}>\n <Card className={classes.root}>\n <CardContent >\n <TextField\n fullWidth\n hiddenLabel\n onChange={handleSearch}\n placeholder={translate('ra.action.search')}\n variant=\"filled\"\n size=\"small\"\n InputProps={{\n endAdornment: (\n <InputAdornment position=\"end\">\n <SearchIcon color=\"disabled\" />\n </InputAdornment>\n ),\n }}\n />\n </CardContent>\n <CardContent className={classes.content}>\n <TreeComponent />\n </CardContent>\n </Card>\n </TreeContextProvider>\n )\n}\n\nconst TreeCatalogSelector = ({ resource, ...props }) => (\n <ResourceContextProvider value={resource}>\n <TreeCatalogSelectorComponent {...props} />\n </ResourceContextProvider>\n);\n\nTreeCatalogSelector.defaultProps = {\n icon: CatalogIcon,\n filter: {},\n readOnly: true,\n};\n\nexport default TreeCatalogSelector;","import { createContext } from 'react';\n\nconst RemoteStorageContext = createContext({\n storage: null,\n getItem: null,\n setItem: null,\n});\n\nRemoteStorageContext.displayName = 'RemoteStorageContext';\n\nexport default RemoteStorageContext","import { createContext } from 'react';\n\nconst EventContext = createContext({\n events: null,\n loaded: null,\n loading: null,\n error: null,\n version: null,\n indicator: null,\n resetIndicator: null,\n hasActive: null,\n hasUnack: null,\n hasActiveUnack: null,\n});\n\nEventContext.displayName = 'EventContext';\n\nexport default EventContext","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\nimport { Typography, Link } from '@material-ui/core';\nimport { useRecordContext, useTranslate } from 'ra-core';\nimport { getUrlWithToken } from '../../lib/file/utils';\n\n\n\nconst FilePathField = memo(props => {\n const { className, emptyText, source, replaceValue, ...rest } = props;\n const translate = useTranslate();\n const record = useRecordContext(props);\n const value = get(record, source);\n const url = getUrlWithToken(value);\n\n\n if (value == null) {\n return (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {emptyText}\n </Typography>\n );\n }\n\n return (\n <Link\n className={className}\n href={url}\n variant=\"body2\"\n target=\"_blank\"\n {...sanitizeFieldRestProps(rest)}\n >\n {replaceValue ? translate(replaceValue, { _: replaceValue }) : value}\n </Link>\n );\n});\n\nFilePathField.defaultProps = {\n addLabel: true,\n};\n\n\n\nexport default FilePathField;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props} >\n <path d=\"M6 1V3H5C3.89 3 3 3.89 3 5V19C3 20.11 3.9 21 5 21H19C20.11 21 21 20.11 21 19V5C21 3.9 20.11 3 19 3H18V1H16V3H8V1H6M5 8H19V19H5V7M11 9V14H13V9H11M11 16V18H13V16H11Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React, { useCallback, useState } from 'react';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport DownloadIcon from '@material-ui/icons/GetApp';\nimport {\n fetchRelatedRecords,\n useDataProvider,\n useNotify,\n useListContext,\n useResourceContext,\n useTranslate,\n} from 'ra-core';\nimport { Button } from 'react-admin';\n\n\nconst BulkExportButton = (props) => {\n const {\n maxResults = 1000,\n onClick,\n label = 'ra.action.export',\n icon = defaultIcon,\n exporter: customExporter,\n sort, // deprecated, to be removed in v4\n className,\n ...rest\n } = props;\n\n const {\n exporter: exporterFromContext,\n selectedIds,\n } = useListContext(props);\n const exporter = customExporter || exporterFromContext;\n const resource = useResourceContext(props);\n const dataProvider = useDataProvider();\n const translate = useTranslate();\n const notify = useNotify();\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleOpen = useCallback((event) => {\n setAnchorEl(event.currentTarget);\n });\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n });\n\n const handleXlsxExport = useCallback(event => {\n handleClose()\n dataProvider\n .getMany(resource, { ids: selectedIds })\n .then(\n ({ data }) =>\n exporter.xlsxExporter &&\n exporter.xlsxExporter(\n data,\n fetchRelatedRecords(dataProvider),\n dataProvider,\n resource\n )\n )\n .catch(error => {\n console.error(error);\n notify('ra.notification.http_error', { type: 'warning' });\n });\n if (typeof onClick === 'function') {\n onClick(event);\n }\n }, [dataProvider, exporter, notify, onClick, resource, selectedIds]);\n\n const handleJsonExport = useCallback(event => {\n handleClose()\n dataProvider\n .getMany(resource, { ids: selectedIds })\n .then(\n ({ data }) =>\n exporter.jsonExporter &&\n exporter.jsonExporter(\n data,\n fetchRelatedRecords(dataProvider),\n dataProvider,\n resource\n )\n )\n .catch(error => {\n console.error(error);\n notify('ra.notification.http_error', { type: 'warning' });\n });\n if (typeof onClick === 'function') {\n onClick(event);\n }\n }, [dataProvider, exporter, notify, onClick, resource, selectedIds]);\n\n\n return (\n <span>\n <Button\n aria-controls=\"bulk-export-menu\"\n aria-haspopup=\"true\"\n onClick={handleOpen}\n label={label}\n {...sanitizeRestProps(rest)}\n >\n {icon}\n </Button>\n <Menu\n id=\"bulk-export-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n >\n <MenuItem onClick={handleXlsxExport} >{translate('ra.action.xlsx_export')}</MenuItem>\n <MenuItem onClick={handleJsonExport} >{translate('ra.action.json_export')}</MenuItem>\n </Menu>\n </span>\n\n );\n};\n\nconst defaultIcon = <DownloadIcon />;\n\nconst sanitizeRestProps = ({\n basePath,\n filterValues,\n resource,\n ...rest\n}) =>\n rest;\n\nexport default BulkExportButton;","import React, { memo, cloneElement } from \"react\";\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { getSeverityIcon, getSeverityKey } from './severity';\nimport { useTranslate } from 'react-admin';\n\n\nconst useStyles = makeStyles(theme => ({\n icon: (props) => {\n const severityThemeKey = getSeverityKey(props?.record?.severity)\n if (!severityThemeKey) return;\n return {\n color: theme.palette[severityThemeKey].main,\n }\n },\n}), { name: 'EventSeverityIcon' });\n\nconst EventSeverityIcon = memo(({ className, ...props }) => {\n const { record = {} } = props\n const classes = useStyles(props);\n const translate = useTranslate(props);\n const icon = getSeverityIcon(record.severity);\n const title = translate(`resources.Event.enums.severity.${record.severity}`);\n\n if (!icon) return null\n\n return (cloneElement(icon, {\n className: classnames(className, { [classes.icon]: !props.disabled }),\n titleAccess: title,\n }))\n});\n\n\n\nexport default EventSeverityIcon;","import ExcelJS from 'exceljs';\nimport { useTranslate } from 'react-admin';\nimport { buildData, buildColumns, buildRows, downloadXLSX } from './utils';\n\n\nconst defaultWorksheetOptions = {\n views: [\n { state: 'frozen', ySplit: 2 }\n ]\n}\n\nconst useExporter = (model) => {\n const translate = useTranslate()\n\n return (records, fetchRelatedRecords, dataProvider, resource) => {\n\n buildData(model, records, fetchRelatedRecords)\n .then(buildRecords => {\n\n const title = translate(`resources.${resource}.name`, { smart_count: 2 })\n const columns = buildColumns(model, translate)\n const rows = buildRows(model, buildRecords, translate)\n\n const workbook = new ExcelJS.Workbook();\n workbook.created = new Date();\n workbook.modified = new Date();\n workbook.lastPrinted = new Date();\n\n const worksheet = workbook.addWorksheet(title, defaultWorksheetOptions);\n worksheet.columns = columns\n worksheet.autoFilter = { from: { row: 2, column: 1 }, to: { row: 2, column: columns.length } }\n worksheet.addRows(rows);\n\n downloadXLSX(title, workbook.xlsx)\n })\n };\n}\n\n\nexport default useExporter\n","import { useTranslate } from 'react-admin';\nimport { buildData, buildDataFromModel, downloadJSON } from './utils';\n\n\n\n\nconst useExporter = (model) => {\n const translate = useTranslate()\n\n return (records, fetchRelatedRecords, dataProvider, resource) => {\n\n buildData(model, records, fetchRelatedRecords)\n .then(buildRecords => {\n\n const title = translate(`resources.${resource}.name`, { smart_count: 2 })\n const data = buildDataFromModel(model, buildRecords)\n\n\n downloadJSON(title, data)\n })\n };\n}\n\n\nexport default useExporter\n","import useXlsxExporter from './useXlsxExporter';\nimport useJsonExporter from './useJsonExporter';\n\nconst useExporter = (model) => {\n\n return {\n xlsxExporter: useXlsxExporter(model),\n jsonExporter: useJsonExporter(model),\n }\n}\n\n\nexport default useExporter\n","const booleanFormatter = (key, value, model, record, translate) => {\n if (value === true) return translate(\"ra.boolean.true\")\n if (value === false) return translate(\"ra.boolean.false\")\n return value\n}\n\nexport default booleanFormatter;","import { DateTime } from 'luxon'\n\nconst dateFormatter = (key, value, model, record, translate) => {\n return DateTime.fromISO(value).toLocaleString(DateTime.DATETIME_SHORT);\n};\n\n\n\nexport default dateFormatter;","const enumFormatter = (resource) => (key, value, model, record, translate) => {\n return translate(`resources.${resource}.enums.${key}.${value}`, { _: value })\n};\n\n\n\nexport default enumFormatter;","import get from 'lodash/get';\n\nconst linkFormatter = (resource, idField) => (key, value, model, record, translate) => {\n\n const id = get(record, idField)\n const { origin } = window.location;\n const path = `${origin}/#/${resource}/${id}/show`\n return { text: \"Ссылка\", hyperlink: path, tooltip: path }\n};\n\n\n\nexport default linkFormatter;","const jsonFormatter = (key, value, model, record, translate) => {\n return (value == null)\n ? value\n : (typeof value === 'string')\n ? value\n : JSON.stringify(value, null)\n};\n\n\n\nexport default jsonFormatter;","import useExporter from './useExporter';\nimport useXlsxExporter from './useXlsxExporter';\nimport useJsonExporter from './useJsonExporter';\nimport booleanFormatter from './booleanFormatter';\nimport dateFormatter from './dateFormatter';\nimport enumFormatter from './enumFormatter';\nimport linkFormatter from './linkFormatter';\nimport jsonFormatter from './jsonFormatter';\n\n\n\n\nexport default useExporter\nexport {\n useXlsxExporter,\n useJsonExporter,\n booleanFormatter,\n dateFormatter,\n enumFormatter,\n linkFormatter,\n jsonFormatter\n}","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport upperFirst from 'lodash/upperFirst';\nimport { SelectInput } from \"react-admin\";\nimport { useDataProvider } from 'react-admin';\n\nconst EnumInput = ({ name, filter, record, resource, source, translate, option, ...props }) => {\n const dataProvider = useDataProvider();\n const [enums, setEnums] = useState([])\n const calcEnumName = name || upperFirst(resource) + upperFirst(source)\n\n useEffect(() => {\n async function fetchData() {\n dataProvider.getEnum(resource, { name: calcEnumName })\n .then(({ data }) => {\n setEnums(data);\n })\n .catch(error => {\n console.log('error: ', error)\n })\n }\n fetchData();\n }, [calcEnumName])\n\n\n const selected = enums.filter(choice => choice.name === get(record, source));\n\n const choices = (filter) ? [...new Set([...selected, ...enums.filter(filter)])] : enums\n\n const getOption = choice => option ? `${option}.${choice.name}` : `resources.${resource}.enums.${source}.${choice.name}`;\n\n\n return (\n <SelectInput source={source} resource={resource} choices={choices} optionValue=\"name\" optionText={getOption} {...props} />\n );\n\n}\n\nEnumInput.defaultProps = {\n};\n\nEnumInput.propTypes = {\n source: PropTypes.string,\n\n};\n\n\nexport default EnumInput;","import React from \"react\";\nimport MoreButton from '../../lib/button/MoreButton';\nimport ShowButtonAsMenuItem from '../../lib/button/ShowButtonAsMenuItem';\nimport EditButtonAsMenuItem from '../../lib/button/EditButtonAsMenuItem';\nimport CloneButtonAsMenuItem from '../../lib/button/CloneButtonAsMenuItem';\nimport RemoveButtonAsMenuItem from '../../lib/button/RemoveButtonAsMenuItem';\nimport RestoreButtonAsMenuItem from '../../lib/button/RestoreButtonAsMenuItem';\nimport DeleteButtonAsMenuItem from '../../lib/button/DeleteButtonAsMenuItem';\nimport permissions from \"../../authProvider/abilityProvider\";\n\nimport DefaultDashboardPlayButtonAsMenuItem from '../../lib/button/DefaultDashboardPlayButtonAsMenuItem';\n\n\nconst AssetMoreActionsButton = (props) => {\n const { resource, record, showDashboardPlayButton = false } = props\n const deleted = record?.deleted\n\n return (\n <MoreButton {...props}>\n {showDashboardPlayButton && permissions.can('getOne', resource) && <DefaultDashboardPlayButtonAsMenuItem />}\n {permissions.can('getOne', resource) && <ShowButtonAsMenuItem />}\n {permissions.can('update', resource) && <EditButtonAsMenuItem />}\n {permissions.can('create', resource) && <CloneButtonAsMenuItem />}\n {permissions.can('remove', resource) && !deleted && <RemoveButtonAsMenuItem />}\n {permissions.can('restore', resource) && deleted && <RestoreButtonAsMenuItem />}\n {permissions.can('restore', resource) && deleted && <DeleteButtonAsMenuItem />}\n </MoreButton>\n );\n}\n\nexport default AssetMoreActionsButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport keyBy from 'lodash/keyBy';\nimport Typography from '@material-ui/core/Typography';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { icons } from '../icons';\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: \"flex\",\n alignItems: \"end\"\n }\n}));\n\nconst IconField = ({ className, record, source, withName, ...props }) => {\n\n const classes = useStyles();\n const iconName = get(record, source);\n const iconsMap = keyBy(icons, \"id\")\n if (!iconName) { return null };\n\n const iconChoice = iconsMap[iconName] || iconsMap.AssetIcon\n\n return (\n <div className={classes.root}>\n {iconChoice.icon}\n {withName && <Typography variant=\"body2\" className={className} {...sanitizeFieldRestProps(props)} > {iconChoice.name}</Typography>}\n </div>\n\n )\n};\n\nIconField.propTypes = {\n label: PropTypes.string,\n record: PropTypes.object,\n source: PropTypes.string.isRequired,\n};\n\nIconField.defaultProps = {\n addLabel: true,\n};\n\nexport default IconField;","import React, { useCallback } from 'react';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { Form } from 'react-final-form';\n\nimport { useTranslate, RadioButtonGroupInput } from 'react-admin';\nimport CheckboxInput from '../../input/CheckboxInput';\n\n\n\nconst defaultSubscription = {\n submitting: true,\n pristine: true,\n valid: true,\n invalid: true,\n};\n\nconst onConflictChoices = [\n { id: 'DONOTHING', name: \"ra.input.import.onConflict.DONOTHING\" },\n { id: 'DOUPDATE', name: \"ra.input.import.onConflict.DOUPDATE\" },\n]\n\nconst required = (value) => {\n return value === true ? undefined : 'ra.validation.required';\n}\n\nconst validateConfirm = [required]\n\n\n\n\nconst ImportButtonDialog = (props) => {\n const { open, onImport, onClose, resource, data, conflict, file } = props\n const translate = useTranslate()\n const hasConflict = Boolean(Array.isArray(conflict) && conflict.length > 0)\n\n\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const handleImport = useCallback((values) => {\n onImport(values);\n }, [onImport]);\n\n return (\n <Dialog\n open={open}\n onClose={handleClose}\n fullWidth\n maxWidth=\"sm\"\n aria-labelledby=\"import-dialog-title\"\n aria-describedby=\"import-dialog-description\"\n >\n <DialogTitle id=\"import-dialog-title\">{translate(\"ra.message.import_title\", { resource: translate(`resources.${resource}.declension`, { smart_count: 7 }) })}</DialogTitle>\n <DialogContent>\n <DialogContentText >{translate(\"ra.message.import_content\", { resource: translate(`resources.${resource}.name`, { smart_count: 2 }), smart_count: data.length, fileName: file.name })}</DialogContentText>\n {hasConflict && (<DialogContentText >{translate(\"ra.message.import_conflict\", { resource: translate(`resources.${resource}.name`, { smart_count: 2 }), smart_count: conflict.length })}</DialogContentText>)}\n </DialogContent>\n <Form\n onSubmit={handleImport}\n subscription={defaultSubscription}\n keepDirtyOnReinitialize\n render={formProps => (\n <form>\n <DialogContent>\n {hasConflict && (\n <RadioButtonGroupInput\n source='onConflict'\n label=\"ra.input.import.onConflict.name\"\n choices={onConflictChoices} row={false}\n initialValue={\"DONOTHING\"}\n />\n )}\n <CheckboxInput\n source='confirm'\n label=\"ra.input.import.confirm.name\"\n validate={validateConfirm}\n />\n </DialogContent>\n <DialogActions>\n <Button onClick={handleClose}>\n {translate(\"ra.action.cancel\", { _: \"Cancel\" })}\n </Button>\n <Button onClick={formProps.handleSubmit} color=\"primary\">\n {translate(\"ra.action.import\", { _: \"Import\" })}\n </Button>\n </DialogActions>\n </form>\n )}\n />\n </Dialog>\n )\n}\n\nexport default ImportButtonDialog","import React, { useState, useCallback, useRef, Fragment } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useDataProvider, useRefresh, useNotify, Button, useListContext, useTranslate } from 'react-admin';\nimport Menu from '@material-ui/core/Menu';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport PublishIcon from '@material-ui/icons/Publish';\nimport ExcelJS from 'exceljs';\nimport ImportButtonDialog from './ImportButtonDialog';\n\n\n\n\nconst stopPropagation = event => event.stopPropagation();\n\nconst initialState = {\n data: undefined,\n conflict: undefined,\n file: undefined,\n error: undefined,\n loading: false,\n loaded: false,\n}\n\nconst ImportButton = (props) => {\n const {\n label = 'ra.action.import',\n importer,\n resource,\n ...rest\n } = props\n const dataProvider = useDataProvider();\n const { refetch } = useListContext();\n const refresh = useRefresh();\n const translate = useTranslate();\n const notify = useNotify();\n const uploadXlsxInputRef = useRef(null);\n const uploadJsonInputRef = useRef(null);\n const [state, setState] = useState(initialState)\n const [open, setOpen] = useState(false);\n const hasData = Boolean(Array.isArray(state?.data) && state?.data.length > 0)\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleOpen = useCallback((event) => {\n setAnchorEl(event.currentTarget);\n });\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n handleReset()\n }, [handleReset]);\n\n const handleReset = useCallback(event => {\n setOpen(false)\n uploadXlsxInputRef.current.value = \"\"\n uploadJsonInputRef.current.value = \"\"\n setState(initialState)\n }, [uploadXlsxInputRef, uploadJsonInputRef, setState, setOpen]);\n\n const handleXlsxLoad = useCallback((event) => {\n const file = event.target.files[0]\n if (!file) return\n\n stopPropagation(event)\n setState(previous => ({ ...previous, loading: true }))\n\n const fileReader = new FileReader();\n fileReader.readAsArrayBuffer(file)\n fileReader.onabort = () => {\n setState(previous => ({ ...previous, loading: false, error: 'file reading has failed' }))\n }\n fileReader.onerror = () => {\n setState(previous => ({ ...previous, loading: false, error: 'file reading has failed' }))\n }\n fileReader.onload = () => {\n const buffer = fileReader.result\n const workbook = new ExcelJS.Workbook()\n workbook.xlsx.load(buffer).then(async (workbook) => {\n const worksheet = workbook.worksheets[0]\n const rows = worksheet._rows.reduce((acc, row) => {\n return row.hasValues ? [...acc, row.values.slice(1)] : acc\n }, [])\n\n try {\n const data = importer.xlsxImporter.format(rows)\n const conflict = await dataProvider.getMany(resource, { ids: data.reduce((acc, { id }) => id ? [...acc, id] : acc, []) }).then(({ data }) => data)\n\n setState(previous => ({ ...previous, data, conflict, file, loading: false, loaded: true }))\n setOpen(true)\n } catch (error) {\n notify('ra.notification.import_data_error', 'warning');\n handleReset()\n }\n })\n };\n }, [setState, setOpen, handleReset])\n\n\n const handleJsonLoad = useCallback((event) => {\n const file = event.target.files[0]\n if (!file) return\n\n stopPropagation(event)\n setState(previous => ({ ...previous, loading: true }))\n\n const fileReader = new FileReader();\n fileReader.readAsText(file);\n fileReader.onabort = () => {\n setState(previous => ({ ...previous, loading: false, error: 'file reading has failed' }))\n }\n fileReader.onerror = () => {\n setState(previous => ({ ...previous, loading: false, error: 'file reading has failed' }))\n }\n fileReader.onload = async (event) => {\n try {\n const records = JSON.parse(event.target.result);\n const data = importer.jsonImporter.format(records)\n const conflict = await dataProvider.getMany(resource, { ids: data.reduce((acc, { id }) => id ? [...acc, id] : acc, []) }).then(({ data }) => data)\n\n setState(previous => ({ ...previous, data, conflict, file, loading: false, loaded: true }))\n setOpen(true)\n } catch (error) {\n notify('ra.notification.import_data_error', 'warning');\n handleReset()\n }\n\n };\n }, [setState, setOpen, handleReset])\n\n\n const handleImport = useCallback((values) => {\n\n dataProvider.createMany(resource, { data: state?.data, onConflict: values.onConflict })\n .then(({ data }) => {\n handleReset()\n notify('ra.notification.imported', 'info', { smart_count: data.count }, true)\n refresh()\n })\n .catch(error => {\n notify(\n typeof error === 'string' ? error : error.message || 'ra.notification.http_error',\n 'warning',\n {\n _: typeof error === 'string' ? error : error && error.message ? error.message : undefined,\n }\n );\n })\n\n }, [state?.data, handleReset])\n\n\n return (\n <Fragment>\n <input\n ref={uploadXlsxInputRef}\n accept=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n style={{ display: \"none\" }}\n id=\"import-xlsx-file\"\n type=\"file\"\n onChange={handleXlsxLoad}\n />\n <input\n ref={uploadJsonInputRef}\n accept=\"application/JSON\"\n style={{ display: \"none\" }}\n id=\"import-json-file\"\n type=\"file\"\n onChange={handleJsonLoad}\n />\n <Button\n aria-controls=\"import-menu\"\n aria-haspopup=\"true\"\n onClick={handleOpen}\n label={label}\n component=\"span\"\n {...rest}\n >\n <PublishIcon />\n </Button>\n <Menu\n id=\"import-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n >\n <label htmlFor=\"import-xlsx-file\">\n <MenuItem >{translate('ra.action.xlsx_import')}</MenuItem>\n </label>\n <label htmlFor=\"import-json-file\">\n <MenuItem >{translate('ra.action.json_import')}</MenuItem>\n </label>\n </Menu>\n {hasData && (\n <ImportButtonDialog\n {...state}\n open={open}\n onClose={handleClose}\n onImport={handleImport}\n resource={resource}\n />\n )}\n </Fragment>\n );\n};\n\n\n\nexport default ImportButton;","import ImportButton from './ImportButton';\n\nexport default ImportButton","import React from 'react';\nimport PropTypes from 'prop-types';\nimport OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser';\n// import { Link } from 'react-router-dom';\nimport Link from '@material-ui/core/Link';\nimport { linkToRecord, useTranslate } from 'ra-core';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\n\nimport Typography from '@material-ui/core/Typography';\n\n\nconst LinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} {...props} />);\n\nconst OpenWithAppButtonAsMenuItem = React.forwardRef(({\n basePath = '',\n label = 'ra.action.open_with',\n icon = defaultIcon,\n record,\n target = \"_self\",\n redirect,\n app,\n ...rest\n}, ref) => {\n const translate = useTranslate();\n const href = redirect(basePath, record.id, record)\n\n return (\n <MenuItem\n component={LinkRef}\n href={href}\n color=\"inherit\"\n underline=\"none\"\n target={target}\n ref={ref}\n onClick={stopPropagation}\n {...rest}\n >\n <ListItemIcon>\n {React.cloneElement(icon, {\n fontSize: \"small\"\n })}\n </ListItemIcon>\n <Typography variant=\"inherit\">{translate(label, { app })}</Typography>\n </MenuItem>\n )\n});\n\nconst defaultIcon = <OpenInBrowserIcon />;\n\nconst stopPropagation = e => e.stopPropagation();\n\nOpenWithAppButtonAsMenuItem.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n};\n\nexport default OpenWithAppButtonAsMenuItem;\n","import React from \"react\";\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport sanitizeFieldRestProps from '../../lib/field/sanitizeFieldRestProps';\n\n\nconst useStyles = makeStyles(theme => ({\n isBroken: {\n textDecoration: \"line-through\"\n },\n}), { name: 'TagTypeField' });\n\n\nconst TagTypeField = (props) => {\n const { record, className, ...rest } = props\n const classes = useStyles();\n if (!record) return null\n const tagType = record.type\n const parameterType = record.parameter?.type\n const isBrokenType = !Boolean(tagType === parameterType)\n\n return (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={classnames(className, { [classes.isBroken]: isBrokenType })}\n {...sanitizeFieldRestProps(rest)}\n >\n {tagType}\n </Typography>\n );\n}\n\n\nTagTypeField.defaultProps = {\n addLabel: true,\n};\n\n\nexport default TagTypeField;\n","import React from 'react';\n\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport Chip from '@material-ui/core/Chip';\nimport { sanitizeFieldRestProps } from 'react-admin';\nimport { useTranslate } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { isNull } from '../../utils';\n\n\nconst readRegex = /R/i;\nconst writeRegex = /W/i;\nconst historyRegex = /H/i;\n\nconst useStyles = makeStyles(theme => ({\n GOOD: {\n backgroundColor: theme.palette.success.light,\n color: theme.palette.success.dark,\n },\n TEST: {\n backgroundColor: theme.palette.warning.light,\n color: theme.palette.warning.dark,\n },\n BAD: {\n backgroundColor: theme.palette.error.light,\n color: theme.palette.error.dark,\n },\n}), { name: \"ParameterAccessChip\" });\n\n\nconst ParameterAccessChip = ({ className, resource, source, record = {}, ...props }) => {\n const translate = useTranslate();\n const classes = useStyles(record);\n const access = get(record, source);\n if (isNull(access)) return null\n\n const isReadable = readRegex.test(access)\n const isWritable = writeRegex.test(access)\n const isHistorizable = historyRegex.test(access)\n\n return (\n <span>\n {isReadable && (\n <Chip\n className={classnames(className, classes.READABLE)}\n size=\"small\"\n label={translate(`resources.Parameter.enums.access.READABLE`, { _: \"Readable\" })}\n />\n )}\n {isWritable && (\n <Chip\n className={classnames(className, classes.WRITABLE)}\n size=\"small\"\n label={translate(`resources.Parameter.enums.access.WRITABLE`, { _: \"Writable\" })}\n />\n )}\n {isHistorizable && (\n <Chip\n className={classnames(className, classes.HISTORIZABLE)}\n size=\"small\"\n label={translate(`resources.Parameter.enums.access.HISTORIZABLE`, { _: \"Historizable\" })}\n />\n )}\n </span>\n\n )\n};\n\nParameterAccessChip.defaultProps = {\n addLabel: true,\n};\n\nexport default ParameterAccessChip;","import { getCenterOfBounds, getBounds, isValidCoordinate } from 'geolib';\n\n\n\nexport const DEFAULT_CENTER_LOCATION = \"55.653304, 37.553963\" //Научный проезд, 19, Москва, Россия, 117246\n\nexport const geoLibToLatLng = ({ latitude, longitude }) => {\n return { lat: latitude, lng: longitude }\n}\n\nexport const geoLibToLatLngBounds = ({ maxLat, maxLng, minLat, minLng }) => {\n return [{ lat: maxLat, lng: maxLng }, { lat: minLat, lng: minLng }]\n}\n\nexport const locationToCoordinates = (location) => {\n if (!location) return undefined\n if (typeof location !== \"string\") return undefined\n const latlng = location.split(',')\n const latitude = parseFloat(latlng[0])\n const longitude = parseFloat(latlng[1])\n const coordonate = { lat: latitude, lng: longitude }\n return isValidCoordinate(coordonate) ? coordonate : undefined\n}\n\nexport const getCenterFromDataLocation = (data, ids) => {\n const coordinates = ids.reduce((acc, id) => {\n const item = data[id]\n const position = locationToCoordinates(item?.GEO?.value)\n return position ? [...acc, position] : acc\n }, [])\n const center = coordinates.length > 0 ? getCenterOfBounds(coordinates) : undefined\n return center ? geoLibToLatLng(center) : locationToCoordinates(DEFAULT_CENTER_LOCATION)\n}\n\nexport const getBoundsFromDataLocation = (data, ids) => {\n const coordinates = ids.reduce((acc, id) => {\n const item = data[id]\n const position = locationToCoordinates(item?.GEO?.value)\n return position ? [...acc, position] : acc\n }, [])\n const bounds = coordinates.length > 0 ? getBounds(coordinates) : undefined\n return bounds ? geoLibToLatLngBounds(bounds) : undefined\n}","import React, { memo } from \"react\";\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport sanitizeFieldRestProps from '../../lib/field/sanitizeFieldRestProps';\n\n//  InAlarm: состояние TRUE предшествует состоянию FALSE (т.е., состояние Alarmed предшествует\n// состоянию Returned to Normal)\n//  Acked: состояние FALSE предшест\n// https://www.wonderware.ru/pdf/Wonderware_SP2014_New_Features_Guide_v10_ru.pdf\n\nconst getState = (active, ack) => {\n let state = \"\"\n if (active) {\n state = ack ? \"ACK_ALM\" : \"UNACK_ALM\"\n } else {\n state = ack ? \"ACK_RTN\" : \"UNACK_RTN\"\n }\n return state\n}\n\n\nconst EventStateField = memo(\n ({ className, source, record = {}, emptyText, ...rest }) => {\n const value = get(record, source);\n const state = getState(record.active, record.ack)\n\n\n\n return (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {state}\n </Typography>\n );\n }\n);\n\nEventStateField.displayName = 'EventStateField';\n\nEventStateField.defaultProps = {\n addLabel: true,\n sortable: false\n};\n\nexport default EventStateField;","import React, { memo } from \"react\";\nimport Typography from '@material-ui/core/Typography';\nimport sanitizeFieldRestProps from '../../lib/field/sanitizeFieldRestProps';\nimport EventSeverityIcon from './EventSeverityIcon';\n\n\nconst EventSeverityField = memo((props) => {\n const { className, ...rest } = props\n return (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n <EventSeverityIcon {...props} />\n </Typography>\n );\n});\n\nEventSeverityField.displayName = 'EventSeverityField';\n\nEventSeverityField.defaultProps = {\n addLabel: true,\n};\n\nexport default EventSeverityField;","import React, { Children, cloneElement, memo } from \"react\"\nimport PropTypes from \"prop-types\"\nimport { useSelector } from \"react-redux\"\nimport { get } from \"lodash\"\nimport { Typography, LinearProgress } from \"@material-ui/core\"\nimport ErrorIcon from \"@material-ui/icons/Error\"\nimport { makeStyles } from \"@material-ui/core/styles\"\nimport {\n useReference,\n getResourceLinkPath,\n ResourceContextProvider,\n RecordContextProvider,\n useRecordContext,\n} from \"ra-core\"\nimport { Link } from \"react-admin\"\n\nconst sanitizeFieldRestProps = ({\n addLabel,\n allowEmpty,\n basePath,\n cellClassName,\n className,\n emptyText,\n formClassName,\n fullWidth,\n headerClassName,\n label,\n linkType,\n link,\n locale,\n record,\n refetch,\n resource,\n sortable,\n sortBy,\n sortByOrder,\n source,\n textAlign,\n translateChoice,\n ...props\n}) => props\n\nconst ReferenceField = ({ source, trueSource, emptyText, ...rest }) => {\n const record = useRecordContext(rest)\n const isReferenceDeclared = useSelector((state) => typeof state.admin.resources[rest.reference] !== \"undefined\")\n\n if (!isReferenceDeclared) {\n throw new Error(\n `You must declare a <Resource name=\"${rest.reference}\"> in order to use a <ReferenceField reference=\"${rest.reference}\">`\n )\n }\n\n return get(record, trueSource) == null ? (\n emptyText ? (\n <Typography component=\"span\" variant=\"body2\">\n {emptyText}\n </Typography>\n ) : null\n ) : (\n <NonEmptyReferenceField {...rest} record={record} source={trueSource} />\n )\n}\n\nReferenceField.propTypes = {\n addLabel: PropTypes.bool,\n basePath: PropTypes.string,\n children: PropTypes.element.isRequired,\n classes: PropTypes.any,\n className: PropTypes.string,\n cellClassName: PropTypes.string,\n headerClassName: PropTypes.string,\n label: PropTypes.oneOfType([PropTypes.string, PropTypes.element]),\n record: PropTypes.any,\n reference: PropTypes.string.isRequired,\n resource: PropTypes.string,\n sortBy: PropTypes.string,\n sortByOrder: PropTypes.string,\n source: PropTypes.string.isRequired,\n trueSource: PropTypes.string.isRequired,\n translateChoice: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n linkType: PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.func]),\n link: PropTypes.oneOfType([PropTypes.string, PropTypes.bool, PropTypes.func]).isRequired,\n}\n\nReferenceField.defaultProps = {\n addLabel: true,\n classes: {},\n link: \"edit\",\n}\n\nconst NonEmptyReferenceField = ({ children, record, source, ...props }) => {\n if (Children.count(children) !== 1) {\n throw new Error(\"<ReferenceField> only accepts a single child\")\n }\n const { basePath, resource, reference } = props\n\n const resourceLinkPath = getResourceLinkPath({\n ...props,\n resource,\n record,\n source,\n basePath,\n })\n\n return (\n <ResourceContextProvider value={reference}>\n <PureReferenceFieldView\n {...props}\n {...useReference({\n reference,\n id: get(record, source),\n })}\n resourceLinkPath={resourceLinkPath}>\n {children}\n </PureReferenceFieldView>\n </ResourceContextProvider>\n )\n}\n\nconst useStyles = makeStyles((theme) => ({\n link: {\n color: theme.palette.primary.main,\n },\n}))\n\nconst stopPropagation = (e) => e.stopPropagation()\n\nconst ReferenceFieldView = ({\n basePath,\n children,\n className,\n classes: classesOverride,\n error,\n loaded,\n loading,\n record,\n reference,\n referenceRecord,\n refetch,\n resource,\n resourceLinkPath,\n source,\n translateChoice = false,\n ...rest\n}) => {\n const classes = useStyles()\n\n if (error) {\n return (\n <ErrorIcon\n aria-errormessage={error.message ? error.message : error}\n role=\"presentation\"\n color=\"error\"\n fontSize=\"small\"\n />\n )\n }\n if (!loaded) {\n return <LinearProgress />\n }\n if (!referenceRecord) {\n return null\n }\n\n if (resourceLinkPath) {\n return (\n <RecordContextProvider value={referenceRecord}>\n <Link to={resourceLinkPath} className={className} onClick={stopPropagation}>\n {cloneElement(Children.only(children), {\n className: classes.link,\n record: referenceRecord,\n refetch,\n resource: reference,\n basePath,\n translateChoice,\n ...sanitizeFieldRestProps(rest),\n })}\n </Link>\n </RecordContextProvider>\n )\n }\n\n return (\n <RecordContextProvider value={referenceRecord}>\n {cloneElement(Children.only(children), {\n record: referenceRecord,\n resource: reference,\n basePath,\n translateChoice,\n ...sanitizeFieldRestProps(rest),\n })}\n </RecordContextProvider>\n )\n}\n\nconst PureReferenceFieldView = memo(ReferenceFieldView)\n\nexport default ReferenceField\n","import React from \"react\";\nimport MoreButton from '../../lib/button/MoreButton';\nimport ShowButtonAsMenuItem from '../../lib/button/ShowButtonAsMenuItem';\nimport EditButtonAsMenuItem from '../../lib/button/EditButtonAsMenuItem';\nimport RemoveButtonAsMenuItem from '../../lib/button/RemoveButtonAsMenuItem';\nimport RestoreButtonAsMenuItem from '../../lib/button/RestoreButtonAsMenuItem';\nimport DeleteButtonAsMenuItem from '../../lib/button/DeleteButtonAsMenuItem';\nimport OpenWithAppButtonAsMenuItem from '../../lib/button/OpenWithAppButtonAsMenuItem';\nimport permissions from \"../../authProvider/abilityProvider\";\nimport { typeMap } from '../../lib/file/utils';\nimport { URI_SCADAJS, URI_STIMULSOFT_REPORTS } from '../../appsettings';\n\n\n\nconst scadaRedirect = (basePath, id, data) => {\n const fileName = data.path.split('/').reverse()[0];\n return `${URI_SCADAJS}/view/${fileName}`;\n}\n\nconst reportRedirect = (basePath, id, data) => {\n const fileName = data.path.split('/').reverse()[0];\n return `${URI_STIMULSOFT_REPORTS}/view/${fileName}`;\n}\n\nconst FileMoreActionsButton = (props) => {\n const { resource, record } = props\n const deleted = record?.deleted\n\n return (\n <MoreButton {...props}>\n {permissions.can('getOne', resource) && <ShowButtonAsMenuItem />}\n {permissions.can('update', resource) && <EditButtonAsMenuItem />}\n {permissions.can('getOne', resource) && typeMap.scada.includes(record?.type) && <OpenWithAppButtonAsMenuItem redirect={scadaRedirect} target=\"_blank\" app=\"Scadaweb\" />}\n {permissions.can('getOne', resource) && typeMap.report.includes(record?.type) && <OpenWithAppButtonAsMenuItem redirect={reportRedirect} target=\"_blank\" app=\"Отчеты\" />}\n {permissions.can('remove', resource) && !deleted && <RemoveButtonAsMenuItem />}\n {permissions.can('restore', resource) && deleted && <RestoreButtonAsMenuItem />}\n {permissions.can('restore', resource) && deleted && <DeleteButtonAsMenuItem />}\n </MoreButton>\n );\n}\n\nexport default FileMoreActionsButton;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M12 3l5.35 4.013a4.947 4.947 0 00-3.911 1.51A5.17 5.17 0 0012 12.11c0 1.186.404 2.34 1.148 3.26-.974.323-1.9.79-2.635 1.432C9.703 17.51 9 18.554 9 19.889V21H4V9l8-6zm5 6c.796 0 1.559.328 2.121.911a3.17 3.17 0 01.879 2.2 3.17 3.17 0 01-.879 2.2 2.947 2.947 0 01-2.121.911 2.947 2.947 0 01-2.121-.911 3.17 3.17 0 01-.879-2.2c0-.825.316-1.616.879-2.2A2.947 2.947 0 0117 9zm3 8.198c0 .824-.21 2.745-1.642 4.892l-.608-3.757.705-1.462A12.506 12.506 0 0017 16.778c-.503 0-.99.039-1.455.093l.705 1.462-.607 3.757C14.21 19.943 14 18.022 14 17.198c-1.793.544-3 1.524-3 2.69V23h12v-3.111c0-1.167-1.2-2.147-3-2.691z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M20 9l-8-6-8 6v12h5v-3a2 2 0 011-1.732V14H8v-2h2.268a2 2 0 013.464 0H16v2h-2v2.268A2 2 0 0115 18v3h5V9z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M3 5c0-1.1.9-2 2-2h14a2 2 0 012 2v5h-2.35a3.99 3.99 0 00-5.3 0H10v4.8A6 6 0 007 20v1H5a2 2 0 01-2-2V5zm11.27 7a2 2 0 013.46 0H20v2h-2v1.08c.43.16.76.5.91.92H19a4 4 0 014 4v3h-3v-2a1 1 0 00-1-1h-.09c-.2.58-.76 1-1.41 1h-3a1.5 1.5 0 01-1.41-1H13a1 1 0 00-1 1v2H9v-3a4 4 0 014-4h.09c.15-.43.48-.76.91-.92V14h-2v-2h2.27z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M19 11V5H5v7h14v-1Zm0-8H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V5a2 2 0 0 0-2-2Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props} >\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M7 5.52a9 9 0 0 1 11.36 13.84l-2.82-2.82a5 5 0 1 0-7.08 0l-2.82 2.82A9 9 0 0 1 7 5.52Z\" fillOpacity=\".3\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M12 3a10 10 0 0 0-7.07 17.07l.7-.7.71-.71 2.12-2.12a5 5 0 0 1 6.3-7.71l-2.24 2.24a2 2 0 1 0 1.41 1.41l4.39-4.39a8 8 0 0 1-.66 10.57l1.41 1.41A10 10 0 0 0 12 3Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M6 4h12v12h3v4h-7V8h-4v12H3v-4h3V4Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M6.09 4.38a5 5 0 0 1 6.53 2.7 5.41 5.41 0 0 1 .36 1.65l1 6 .01.07v.02l.01.07a6.75 6.75 0 0 0 .09.52 1 1 0 0 0 1.82 0l.01-.04a3.83 3.83 0 0 0 .08-.48v-.07l.01-.02v-.06l1.02-6.07a2 2 0 0 1 3.94.66l-.99 5.94a9.51 9.51 0 0 1-.06.48c-.04.24-.12.74-.3 1.16a5 5 0 0 1-9.24 0 5.41 5.41 0 0 1-.36-1.64l-1-6L9 9.2v-.02a5.5 5.5 0 0 0-.1-.6 1 1 0 0 0-1.82 0l-.01.05a3.86 3.86 0 0 0-.09.55v.08l-1.02 6.07a2 2 0 0 1-3.94-.66l.99-5.94a9.86 9.86 0 0 1 .06-.48c.04-.24.12-.74.3-1.16a5 5 0 0 1 2.7-2.7Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" fillOpacity=\".1\" d=\"M19 2h-1v3h-4V2h-1v3H9V2H8v3H3v1h5v4H3v1h5v4H3v1h5v6h1v-6h4v6h1v-6h4v6h1v-6h3v-1h-3v-4h3v-1h-3V6h3V5h-3V2Zm-5 13h4v-4h-4v4Zm0-5h4V6h-4v4Zm-1-4v4H9V6h4Zm0 5v4H9v-4h4Z\" />\n <path fillOpacity=\".3\" d=\"m10 9-7 7v5h18V6l-7 7-4-4Z\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M2 2h2v11.59l6-6 4 4 6.3-6.3 1.4 1.42-7.7 7.7-4-4-6 6V20h18v2H2V2Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M20.56 18H3.44C2.65 18 2 17.37 2 16.59V7.41C2 6.63 2.65 6 3.44 6h17.12c.79 0 1.44.63 1.44 1.41v9.18c0 .78-.65 1.41-1.44 1.41M6.81 15.19v-3.66l1.92 2.35 1.92-2.35v3.66h1.93V8.81h-1.93l-1.92 2.35-1.92-2.35H4.89v6.38h1.92M19.69 12h-1.92V8.81h-1.92V12h-1.93l2.89 3.28L19.69 12Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props} >\n <path d=\"M15 13V5a3 3 0 0 0-6 0v8a5 5 0 1 0 6 0m-3-9a1 1 0 0 1 1 1v3h-2V5a1 1 0 0 1 1-1Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props} >\n <path d=\"M3 21h3v-3H3m5 3h3v-7H8m5 7h3V9h-3m5 12h3V3h-3v18Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M20,11H4V8H20M20,15H13V13H20M20,19H13V17H20M11,19H4V13H11M20.33,4.67L18.67,3L17,4.67L15.33,3L13.67,4.67L12,3L10.33,4.67L8.67,3L7,4.67L5.33,3L3.67,4.67L2,3V19A2,2 0 0,0 4,21H20A2,2 0 0,0 22,19V3L20.33,4.67Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import AssetIcon from './Asset';\nimport CarIcon from '@material-ui/icons/DirectionsCar';\nimport BusIcon from '@material-ui/icons/DirectionsBus';\nimport TruckIcon from '@material-ui/icons/LocalShipping';\nimport AirplaneIcon from '@material-ui/icons/AirplanemodeActive';\nimport BuildIcon from '@material-ui/icons/Build';\nimport GROIcon from './GRO';\nimport GRSIcon from './GRS';\nimport ValvePadIcon from './ValvePad';\n\nimport GradientIcon from '@material-ui/icons/Gradient';\nimport HeadsetMicIcon from '@material-ui/icons/HeadsetMic';\nimport AccountTreeIcon from '@material-ui/icons/AccountTree';\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport DIIcon from './DI';\nimport EventIcon from './CalendarAlert';\nimport FolderIcon from '@material-ui/icons/Folder';\nimport SpeedIcon from '@material-ui/icons/Speed';\nimport RoomIcon from '@material-ui/icons/Room';\nimport TagIcon from './Database';\nimport TextFieldsIcon from '@material-ui/icons/TextFields';\nimport DashboardIcon from '@material-ui/icons/Dashboard';\nimport GaugeIcon from './Gauge';\nimport BatteryIcon from '@material-ui/icons/Battery80';\nimport DiscreteIOIcon from './DiscreteIO';\nimport AnalogIOIcon from './AnalogIO';\nimport LineChartIcon from './LineChart';\nimport MarkdownIcon from './Markdown';\nimport ValveIcon from './Valve';\nimport WriteValueIcon from '@material-ui/icons/PlayArrow';\nimport ThermometerIcon from './Thermometer';\nimport SignalIcon from './Signal';\nimport ToggleIcon from '@material-ui/icons/PowerSettingsNew';\nimport NewspaperIcon from './Newspaper';\n\n\n\nexport const icons = [\n { id: \"AssetIcon\", name: \"Объект\", icon: <AssetIcon /> },\n { id: \"CarIcon\", name: \"Автомобиль\", icon: <CarIcon /> },\n { id: \"BusIcon\", name: \"Автобус\", icon: <BusIcon /> },\n { id: \"TruckIcon\", name: \"Грузовик\", icon: <TruckIcon /> },\n { id: \"AirplaneIcon\", name: \"Самолет\", icon: <AirplaneIcon /> },\n { id: \"BuildIcon\", name: \"Гаечный ключ\", icon: <BuildIcon /> },\n { id: \"GROIcon\", name: \"ГРО\", icon: <GROIcon /> },\n { id: \"GRSIcon\", name: \"ГРС\", icon: <GRSIcon /> },\n { id: \"ValvePadIcon\", name: \"Крановая площадка\", icon: <ValvePadIcon /> },\n { id: \"ValveIcon\", name: \"Кран\", icon: <ValveIcon /> },\n { id: \"GradientIcon\", name: \"Аналоговый параметр\", icon: <GradientIcon /> },\n { id: \"HeadsetMicIcon\", name: \"Ассистент\", icon: <HeadsetMicIcon /> },\n { id: \"AccountTreeIcon\", name: \"Каталог\", icon: <AccountTreeIcon /> },\n { id: \"PlayArrowIcon\", name: \"Запуск\", icon: <PlayArrowIcon /> },\n { id: \"DIIcon\", name: \"Дискретный параметр\", icon: <DIIcon /> },\n { id: \"EventIcon\", name: \"Событие\", icon: <EventIcon /> },\n { id: \"FolderIcon\", name: \"Папка\", icon: <FolderIcon /> },\n { id: \"SpeedIcon\", name: \"Скорость\", icon: <SpeedIcon /> },\n { id: \"RoomIcon\", name: \"Маркер\", icon: <RoomIcon /> },\n { id: \"TagIcon\", name: \"База данных\", icon: <TagIcon /> },\n { id: \"TextFieldsIcon\", name: \"Текст\", icon: <TextFieldsIcon /> },\n { id: \"DashboardIcon\", name: \"Панели\", icon: <DashboardIcon /> },\n]\n\n\nexport const widgetsIcons = [\n { id: \"HeadsetMicIcon\", name: \"Ассистент\", icon: <HeadsetMicIcon /> },\n { id: \"AccountTreeIcon\", name: \"Каталог\", icon: <AccountTreeIcon /> },\n { id: \"EventIcon\", name: \"Событие\", icon: <EventIcon /> },\n { id: \"FolderIcon\", name: \"Папка\", icon: <FolderIcon /> },\n { id: \"SpeedIcon\", name: \"Скорость\", icon: <SpeedIcon /> },\n { id: \"RoomIcon\", name: \"Маркер\", icon: <RoomIcon /> },\n { id: \"TextFieldsIcon\", name: \"Текст\", icon: <TextFieldsIcon /> },\n\n { id: \"DashboardIcon\", name: \"Панели\", icon: <DashboardIcon /> },\n { id: \"GaugeIcon\", name: \"Измерительный прибор\", icon: <GaugeIcon /> },\n { id: \"BatteryIcon\", name: \"Батарея\", icon: <BatteryIcon /> },\n { id: \"DiscreteIOIcon\", name: \"Дискретный I/O\", icon: <DiscreteIOIcon /> },\n { id: \"AnalogIOIcon\", name: \"Аналоговый I/O\", icon: <AnalogIOIcon /> },\n { id: \"LineChartIcon\", name: \"Линейный график\", icon: <LineChartIcon /> },\n { id: \"MarkdownIcon\", name: \"Markdown текст\", icon: <MarkdownIcon /> },\n { id: \"TagIcon\", name: \"Теги данных\", icon: <TagIcon /> },\n { id: \"ValveIcon\", name: \"Крановый узел\", icon: <ValveIcon /> },\n { id: \"WriteValueIcon\", name: \"Запись значения\", icon: <WriteValueIcon /> },\n { id: \"ThermometerIcon\", name: \"Термометр\", icon: <ThermometerIcon /> },\n { id: \"SignalIcon\", name: \"Сигнал\", icon: <SignalIcon /> },\n { id: \"ToggleIcon\", name: \"Переключатель\", icon: <ToggleIcon /> },\n { id: \"NewspaperIcon\", name: \"Новости\", icon: <NewspaperIcon /> },\n]\n\n","import React, { useState } from 'react'\nimport { red, pink, purple, deepPurple, indigo, blue, lightBlue, cyan, teal, green, lightGreen, lime, yellow, amber, orange, deepOrange, brown, blueGrey, grey } from '@material-ui/core/colors';\nimport { makeStyles } from '@material-ui/core/styles';\n// import { InputBase } from '@material-ui/core';\nimport Paper from '@material-ui/core/Paper';\nimport CardContent from '@material-ui/core/CardContent';\nimport map from 'lodash/map'\nimport Swatch from './Swatch'\nimport { ColorWrap } from \"react-color/lib/components/common\";\nimport { isValidHex } from \"react-color/lib/helpers/color\"\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n // position: \"relative\"\n },\n grid: {\n display: \"grid\",\n gridTemplateColumns: \"repeat(9, 24px)\",\n gridTemplateRows: 24,\n gridGap: 4,\n },\n swatch: {\n width: 30,\n height: 30,\n float: 'left',\n borderRadius: 4,\n margin: '0 6px 6px 0',\n },\n input: {\n width: 136\n }\n}));\n\nexport const ColorPicker = ({\n onChange,\n onSwatchHover,\n colors,\n className,\n hex\n}) => {\n const classes = useStyles()\n // const [value, setValue] = useState(hex)\n\n const handleSwatch = (hexcode, event) => {\n if (isValidHex(hexcode)) {\n onChange({\n hex: hexcode,\n source: 'hex',\n }, event)\n // setValue(hexcode)\n }\n }\n\n // const handleChange = (event) => {\n\n // const hexcode = event.target.value\n // setValue(hexcode)\n // if (isValidHex(hexcode)) {\n // onChange({\n // hex: hexcode,\n // source: 'hex',\n // }, event)\n\n // }\n // }\n\n return (\n <Paper className={`${classes.root} ${className}`}>\n <CardContent className={classes.grid}>\n {map(colors, (c, i) => {\n return (\n <Swatch\n key={i}\n color={c}\n hex={c}\n onClick={handleSwatch}\n onHover={onSwatchHover}\n focusStyle={{\n boxShadow: `0 0 4px ${c}`,\n }}\n />\n )\n })}\n </CardContent>\n {/* <CardContent style={{ paddingTop: 2, paddingBottom: 16 }}>\n <InputBase\n id=\"component-outlined\"\n value={value}\n onChange={handleChange}\n margin=\"dense\"\n className={classes.input}\n />\n\n </CardContent> */}\n </Paper>\n )\n}\n\nconst colorsGenerator = (colors) => {\n const colorsArray = colors.reduce((acc, color) => {\n const colorArray = [color['900'], color['800'], color['700'], color['600'], color['500'], color['400'], color['300'], color['200'], color['100']]\n\n return [...acc, ...colorArray]\n }, [])\n\n return colorsArray\n}\n\nColorPicker.defaultProps = {\n colors: colorsGenerator([red, pink, purple, deepPurple, indigo, blue, lightBlue, cyan, teal, green, lightGreen, lime, yellow, amber, orange, deepOrange, brown, blueGrey, grey]),\n // colors: [\n // red['900'], red['700'], red['500'], red['300'], red['100'],\n // pink['900'], pink['700'], pink['500'], pink['300'], pink['100'],\n // purple['900'], purple['700'], purple['500'], purple['300'], purple['100'],\n // deepPurple['900'], deepPurple['700'], deepPurple['500'], deepPurple['300'], deepPurple['100'],\n // indigo['900'], indigo['700'], indigo['500'], indigo['300'], indigo['100'],\n // blue['900'], blue['700'], blue['500'], blue['300'], blue['100'],\n // lightBlue['900'], lightBlue['700'], lightBlue['500'], lightBlue['300'], lightBlue['100'],\n // cyan['900'], cyan['700'], cyan['500'], cyan['300'], cyan['100'],\n // teal['900'], teal['700'], teal['500'], teal['300'], teal['100'],\n // '#194D33', green['700'], green['500'], green['300'], green['100'],\n // lightGreen['900'], lightGreen['700'], lightGreen['500'], lightGreen['300'], lightGreen['100'],\n // lime['900'], lime['700'], lime['500'], lime['300'], lime['100'],\n // yellow['900'], yellow['700'], yellow['500'], yellow['300'], yellow['100'],\n // amber['900'], amber['700'], amber['500'], amber['300'], amber['100'],\n // orange['900'], orange['700'], orange['500'], orange['300'], orange['100'],\n // deepOrange['900'], deepOrange['700'], deepOrange['500'], deepOrange['300'], deepOrange['100'],\n // brown['900'], brown['700'], brown['500'], brown['300'], brown['100'],\n // blueGrey['900'], blueGrey['700'], blueGrey['500'], blueGrey['300'], blueGrey['100'],\n // '#000000', '#525252', '#969696', '#D9D9D9', '#FFFFFF'\n // ]\n}\n\nexport default ColorWrap(ColorPicker)","import React from 'react'\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { handleFocus } from 'react-color/lib/helpers/interaction'\n\n\nconst useStyles = makeStyles(theme => ({\n root: ({ color }) => ({\n background: color,\n width: 24,\n height: 24,\n borderRadius: 4,\n cursor: 'pointer',\n outline: 'none',\n }),\n focus: ({ color }) => ({\n boxShadow: `0 0 4px ${color}`,\n })\n}));\n\n\nconst ENTER = 13\n\nexport const Swatch = ({\n color,\n onClick = () => { },\n onHover,\n title = color,\n focus, }) => {\n\n const classes = useStyles({ color })\n const handleClick = e => onClick(color, e)\n const handleKeyDown = e => e.keyCode === ENTER && onClick(color, e)\n const handleHover = e => onHover(color, e)\n\n const optionalEvents = {}\n if (onHover) {\n optionalEvents.onMouseOver = handleHover\n }\n\n return (\n <div\n className={classnames(classes.root, {\n [classes.focus]: focus,\n })}\n onClick={handleClick}\n title={title}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n {...optionalEvents}\n />\n )\n}\n\nexport default handleFocus(Swatch)","import React, { useState } from 'react';\nimport IconButton from '@material-ui/core/IconButton';\nimport Popover from '@material-ui/core/Popover';\nimport PaletteIcon from '@material-ui/icons/Palette';\nimport ColorPicker from './ColorPicker';\n\n\n\nconst ColorPaletteButton = ({\n id,\n input,\n ...rest\n}) => {\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n const handleOpen = (event) => {\n event.preventDefault()\n setAnchorEl(event.currentTarget)\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleChange = ({ hex }) => {\n input.onChange(hex)\n setAnchorEl(null)\n };\n\n return (\n <>\n <IconButton\n onClick={handleOpen}\n size=\"small\"\n aria-describedby={id}\n >\n <PaletteIcon style={{ color: input.value }} fontSize=\"small\" />\n </IconButton>\n <Popover\n id={id}\n open={Boolean(anchorEl)}\n disableAutoFocus={true}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'center',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'center',\n }}\n >\n <ColorPicker\n color={input.value}\n onChange={handleChange}\n />\n </Popover>\n </>\n )\n\n};\n\n\nexport default ColorPaletteButton;\n","import React, { useState, cloneElement } from 'react';\nimport TextField from '@material-ui/core/TextField';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport { useInput, FieldTitle, InputHelperText } from 'react-admin';\nimport sanitizeInputRestProps from '../sanitizeInputRestProps';\nimport ColorPaletteButton from './ColorPaletteButton';\n\n\n\nconst ColorInput = ({\n format,\n helperText,\n label,\n margin = 'dense',\n onBlur,\n onFocus,\n onChange,\n options,\n resource,\n source,\n validate,\n variant = 'filled',\n inputProps,\n InputProps,\n className,\n ...rest\n}) => {\n\n const {\n id,\n input,\n isRequired,\n meta: { error, touched },\n } = useInput({\n format,\n onBlur,\n onChange,\n onFocus,\n resource,\n source,\n validate,\n ...rest,\n });\n\n const [anchorEl, setAnchorEl] = useState(null);\n\n\n const handleOpen = (event) => {\n if (!Boolean(event.relatedTarget?.parentElement?.id === \"color-input-popover\")) {\n setAnchorEl(event.currentTarget);\n }\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const handleChange = ({ hex }) => {\n input.onChange(hex)\n setAnchorEl(null)\n };\n\n return (\n <TextField\n id={id}\n {...input}\n className={className}\n variant={variant}\n error={!!(touched && error)}\n helperText={(\n <InputHelperText\n touched={touched}\n error={error}\n helperText={helperText}\n />\n )}\n label={\n <FieldTitle\n label={label}\n source={source}\n resource={resource}\n isRequired={isRequired}\n />\n }\n margin={margin}\n InputProps={{\n ...inputProps,\n endAdornment: InputProps?.endAdornment ? cloneElement(InputProps.endAdornment, {\n children: [<ColorPaletteButton id={id} input={input} />, ...InputProps.endAdornment.props.children]\n }) : (\n <InputAdornment position=\"end\">\n <ColorPaletteButton id={id} input={input} />\n </InputAdornment>\n ),\n }}\n // InputProps={{\n // ...inputProps,\n // startAdornment: (\n // <InputAdornment position=\"start\">\n // <ColorPaletteButton id={id} input={input} />\n // </InputAdornment>\n // ),\n // }}\n {...options}\n {...sanitizeInputRestProps(rest)}\n />\n );\n\n};\n\n\nexport default ColorInput;\n","import ColorInput from \"./ColorInput\";\n\nexport default ColorInput","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { sanitizeResource } from \"./utils\";\n\n\nconst WRITE_TAG = gql`\n mutation writeTag($input: WriteTagInput!) {\n data: Tag {\n data: write(input: $input) {\n item {\n tag {\n resource\n tag\n }\n value\n type\n quality\n timestamp\n timestampSrv\n utcOffset\n }\n }\n } \n }\n`;\n\nconst write = (args) => {\n const { id, data } = args;\n\n ///!Заменить с использованием assetId parameterId + ошибка с записью строки\n return graphqlClient.request(WRITE_TAG, {\n input: {\n id,\n value: data.value\n }\n }).then(response => {\n const item = response?.data?.data?.item\n return {\n data: sanitizeResource(item),\n }\n }).catch(graphqlErrorHandler)\n}\n\n\n\nexport default write","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport { useRecordContext } from 'ra-core';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\n\n\n\nconst TextField = memo(props => {\n const { className, source, emptyText, hint, ...rest } = props;\n const record = useRecordContext(props);\n const value = get(record, source);\n const title = get(record, hint);\n\n return (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n title={title}\n {...sanitizeFieldRestProps(rest)}\n >\n {value != null && typeof value !== 'string'\n ? JSON.stringify(value)\n : value || emptyText}\n </Typography>\n );\n});\n\n// what? TypeScript loses the displayName if we don't set it explicitly\nTextField.displayName = 'TextField';\n\nTextField.defaultProps = {\n addLabel: true,\n};\n\n\nexport default TextField;\n","import React from \"react\";\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Datagrid, TextField, DateField } from \"react-admin\";\nimport TextFieldWithHint from \"../../lib/field/TextField\";\nimport useListStyles from \"../../lib/list/useListStyles\";\nimport { dateTimeOptions } from '../../utils';\nimport TagValueField from \"./TagValueField\";\nimport TagTypeField from \"./TagTypeField\";\nimport TagQualityChip from \"./TagQualityChip\";\nimport TagWriteButton from \"./TagWriteButton\";\nimport TagReadHistoryButton from \"./TagReadHistoryButton\";\nimport ParameterAccessChip from \"../Parameter/ParameterAccessChip\";\nimport permissions from '../../authProvider/abilityProvider'\n\n\n\nconst useStyles = makeStyles(theme => ({\n cellActionRight: {\n paddingLeft: 0\n },\n cellActionLeft: {\n paddingRight: 0,\n },\n}), { name: 'TagListDatagrid' });\n\n\nexport const TagListDatagridSimple = (props) => {\n const classes = useListStyles();\n const componentClasses = useStyles();\n const columns = props.columns || ['parameter.name', 'value']\n\n return (\n <Datagrid {...props}>\n {columns.includes(\"id\") && <TextField source=\"id\" />}\n {columns.includes(\"asset.name\") && <TextField source=\"asset.name\" label=\"resources.Tag.fields.asset\" sortable={false} />}\n {columns.includes(\"parameter.name\") && <TextField source=\"parameter.name\" label=\"resources.Tag.fields.parameter\" sortable={false} />}\n {columns.includes(\"value\") && <TagValueField source=\"value\" />}\n {columns.includes(\"quality\") && <TagQualityChip source=\"quality\" cellClassName={classnames(classes.cellMinWidth, classes.cellAction)} />}\n {columns.includes(\"parameter.accessLevel\") && <ParameterAccessChip source=\"parameter.accessLevel\" label=\"resources.Parameter.fields.accessLevel\" cellClassName={classnames(classes.cellAction)} sortable={false} />}\n {columns.includes(\"type\") && <TagTypeField source=\"type\" cellClassName={classes.cellMinWidth} sortable={false} />}\n {columns.includes(\"timestamp\") && <DateField source=\"timestamp\" noWrap options={dateTimeOptions} cellClassName={classes.cellMinWidth} />}\n <TagReadHistoryButton cellClassName={classnames(classes.cellMinWidth, classes.cellAction, componentClasses.cellActionLeft)} />\n {permissions.can('write', \"Tag\") && <TagWriteButton cellClassName={classnames(classes.cellMinWidth, classes.cellAction, componentClasses.cellActionRight)} />}\n </Datagrid>\n )\n};\n\nexport const TagListDatagridMap = (props) => {\n const classes = useListStyles();\n return (\n <Datagrid {...props}>\n <TextFieldWithHint source=\"parameter.name\" label=\"resources.Tag.fields.parameter\" hint=\"parameter.description\" sortable={false} headerClassName={classes.disableSticky} />\n <TagValueField source=\"value\" headerClassName={classes.disableSticky} />\n </Datagrid>\n )\n};\n\nexport const TagListReferenceDatagrid = (props) => {\n const classes = useListStyles();\n const componentClasses = useStyles();\n return (\n <Datagrid {...props}>\n <TextField source=\"id\" />\n <TextField source=\"parameter.name\" label=\"resources.Tag.fields.parameter\" sortable={false} />\n <TagValueField source=\"value\" />\n <TagQualityChip source=\"quality\" cellClassName={classnames(classes.cellMinWidth, classes.cellAction)} />\n <ParameterAccessChip source=\"parameter.accessLevel\" label=\"resources.Parameter.fields.accessLevel\" cellClassName={classnames(classes.cellAction)} sortable={false} />\n <TagTypeField source=\"type\" cellClassName={classes.cellMinWidth} sortable={false} />\n <DateField source=\"timestamp\" noWrap options={dateTimeOptions} cellClassName={classes.cellMinWidth} />\n <TagReadHistoryButton cellClassName={classnames(classes.cellMinWidth, classes.cellAction, componentClasses.cellActionLeft)} />\n {permissions.can('write', \"Tag\") && <TagWriteButton cellClassName={classnames(classes.cellMinWidth, classes.cellAction, componentClasses.cellActionRight)} />}\n </Datagrid>\n )\n}\n\n\nconst TagListDatagrid = (props) => {\n const classes = useListStyles();\n const componentClasses = useStyles();\n\n return (\n <Datagrid {...props}>\n <TextField source=\"id\" />\n <TextField source=\"asset.name\" label=\"resources.Tag.fields.asset\" sortable={false} />\n <TextField source=\"parameter.name\" label=\"resources.Tag.fields.parameter\" sortable={false} />\n <TagValueField source=\"value\" />\n <TagQualityChip source=\"quality\" cellClassName={classnames(classes.cellMinWidth, classes.cellAction)} />\n <ParameterAccessChip source=\"parameter.accessLevel\" label=\"resources.Parameter.fields.accessLevel\" cellClassName={classnames(classes.cellAction)} sortable={false} />\n <TagTypeField source=\"type\" cellClassName={classes.cellMinWidth} sortable={false} />\n <DateField source=\"timestamp\" noWrap options={dateTimeOptions} cellClassName={classes.cellMinWidth} />\n <TagReadHistoryButton cellClassName={classnames(classes.cellMinWidth, classes.cellAction, componentClasses.cellActionLeft)} />\n {permissions.can('write', \"Tag\") && <TagWriteButton cellClassName={classnames(classes.cellMinWidth, classes.cellAction, componentClasses.cellActionRight)} />}\n </Datagrid>\n )\n};\n\n\nexport default TagListDatagrid;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\n\n\n\nconst useStyles = makeStyles(theme => {\n return {\n root: {\n position: \"relative\"\n },\n marker: ({ color }) => ({\n color: theme.palette[color].main,\n }),\n markerIcon: ({ color }) => ({\n color: theme.palette.getContrastText(theme.palette[color].main),\n position: \"absolute\",\n left: 18,\n top: 16,\n }),\n }\n}, { name: 'RaMapMarkerIcon' });\n\nconst MapMarkerIcon = ({ children, ...props }) => {\n const classes = useStyles(props)\n\n return (\n <div className={classes.root}>\n <div className={classes.marker}>\n <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 60 68\" xmlns=\"http://www.w3.org/2000/svg\" xmlnsXlink=\"http://www.w3.org/1999/xlink\" >\n <defs>\n <filter x=\"-21.7%\" y=\"-15.4%\" width=\"143.5%\" height=\"138.5%\" filterUnits=\"objectBoundingBox\" id=\"a\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation=\"3\" />\n <feOffset dy=\"2\" />\n <feComponentTransfer>\n <feFuncA type=\"linear\" slope=\".3\" />\n </feComponentTransfer>\n </filter>\n <path d=\"M23.51 51.523a.5.5 0 0 1-.5.477c-.29 0-.51-.21-.52-.477-.145-3.168-1.756-5.217-4.832-6.147C7.53 42.968 0 33.863 0 23 0 10.297 10.297 0 23 0s23 10.297 23 23c0 10.863-7.53 19.968-17.658 22.376-3.076.93-4.687 2.98-4.83 6.147z\" id=\"b\" />\n </defs>\n <g fill=\"none\" fillRule=\"evenodd\">\n <g fillRule=\"nonzero\" transform=\"translate(7 5)\" fill=\"currentColor\">\n <use filter=\"url(#a)\" xlinkHref=\"#b\" />\n <use xlinkHref=\"#b\" />\n </g>\n <path d=\"M30 68c-2.21 0-4-1.79-4-4s1.79-4 4-4 4 1.79 4 4-1.79 4-4 4z\" fill=\"#fff\" fillRule=\"nonzero\" />\n <path d=\"M30 66a2 2 0 1 0 .001-3.999A2 2 0 0 0 30 66z\" fill=\"currentColor\" />\n </g>\n </svg>\n </div>\n <div className={classes.markerIcon}>\n {children}\n </div>\n </div>\n\n )\n}\n\nMapMarkerIcon.defaultProps = {\n color: \"primary\"\n}\n\nexport default MapMarkerIcon","import React, { Children, cloneElement, useCallback, useMemo } from 'react';\nimport ReactDOMServer from 'react-dom/server';\nimport leaflet from 'leaflet';\nimport { Tooltip, Popup, Marker } from 'react-leaflet';\nimport { RecordContextProvider } from 'ra-core';\nimport { locationToCoordinates } from './utils';\nimport { makeStyles, useTheme, ThemeProvider } from '@material-ui/core/styles';\nimport MapMarkerIcon from './MapMarkerIcon';\nimport IconField from '../field/IconField';\nimport AssetIcon from '../icons/Asset';\nimport useMemoCompare from '../hook/useMemoCompare';\n\n\nconst mapIcons = {};\n\n\nexport const LeafletMarkerIcon = (props) => {\n const theme = useTheme()\n const themeType = theme.palette.type;\n const key = `locationMarker.${themeType}`;\n\n // const icon = useMemo(() => {\n if (mapIcons.hasOwnProperty(key)) {\n const leafletIcon = mapIcons[key]\n return leafletIcon;\n } else {\n const iconHTML = ReactDOMServer.renderToString(\n <ThemeProvider theme={theme}>\n <MapMarkerIcon {...props} >\n <AssetIcon />\n </MapMarkerIcon>\n </ThemeProvider>\n )\n\n const leafletIcon = new leaflet.DivIcon({\n html: iconHTML,\n className: '',\n iconSize: leaflet.point(60, 68, true),\n iconAnchor: leaflet.point(30, 68, true),\n popupAnchor: leaflet.point(0, -30, true),\n });\n\n mapIcons[key] = leafletIcon\n\n return leafletIcon\n }\n // }, [key])\n\n // return icon;\n}\n\nexport const LeafletAssetMarkerIcon = (props) => {\n const { record, color } = props\n const theme = useTheme();\n const themeType = theme.palette.type;\n const icon = record?.icon ? record.icon : \"AssetIcon\"\n const key = `${themeType}${icon}${color}`;\n\n //ЗДЕСЬ БЫЛА УТЕЧКА ЭЛЕМЕНТОВ\n /*\n const iconHTML = ReactDOMServer.renderToString(\n <ThemeProvider theme={theme}>\n <MapMarkerIcon color={color} >\n <IconField record={{ icon }} source=\"icon\" />\n </MapMarkerIcon>\n </ThemeProvider>\n );\n\n return new leaflet.DivIcon({\n html: iconHTML,\n className: '',\n iconSize: leaflet.point(60, 68, true),\n iconAnchor: leaflet.point(30, 68, true),\n popupAnchor: leaflet.point(0, -30, true),\n });\n\n или здесь\n\n const markerStyle = {\n top: 0,\n color: \"white\",\n display: \"flex\",\n justifyContent: \"center\",\n width: 60,\n height: 60, \n marginLeft: 20,\n marginTop: -35, \n alignItems: \"center\"\n };\n \n return (\n <div style={markerStyle}>\n <ThemeProvider theme={theme}>\n <MapMarkerIcon color={color} >\n <IconField record={{ icon }} source=\"icon\" />\n </MapMarkerIcon>\n </ThemeProvider>\n </div>\n );\n */\n\n\n //Устранение утечки\n //Результат: значительная оптимизация иконок маркеров\n //НЕ МЕНЯТЬ ПОКА НЕ БУДЕТ НАЙДЕНА ЗАМЕНА ПО ПРОИЗВОДИТЕЛЬНОСТИ\n\n // const leafletDivIcon = useMemo(() => {\n\n if (mapIcons.hasOwnProperty(key)) {\n const leafletIcon = mapIcons[key]\n return leafletIcon;\n } else {\n // console.log(`>>>>>> CREATE: ${icon} ${color} ${themeType}`);\n const iconHTML = ReactDOMServer.renderToString(\n <ThemeProvider theme={theme}>\n <MapMarkerIcon color={color} >\n <IconField record={{ icon }} source=\"icon\" />\n </MapMarkerIcon>\n </ThemeProvider>\n );\n\n const leafletIcon = new leaflet.DivIcon({\n html: iconHTML,\n className: '',\n iconSize: leaflet.point(60, 68, true),\n iconAnchor: leaflet.point(30, 68, true),\n popupAnchor: leaflet.point(0, -30, true),\n });\n\n mapIcons[key] = leafletIcon\n\n return leafletIcon\n }\n\n // }, [key, theme])\n\n\n // return leafletDivIcon;\n}\n\nconst useStyles = makeStyles(theme => ({\n popup: {\n [\"& a\"]: {\n color: theme.palette.primary.main\n },\n [\"& .leaflet-popup-content-wrapper\"]: {\n background: theme.palette.background.paper,\n padding: \"unset\",\n },\n [\"& .leaflet-popup-content-wrapper, .leaflet-popup-tip\"]: {\n background: theme.palette.background.paper,\n },\n [\"& .leaflet-popup-content\"]: {\n margin: \"unset\"\n },\n },\n}), { name: 'MapMarker' });\n\n\n\nconst MapMarker = (props) => {\n const { record, children, onClick, hideTitles } = props\n const classes = useStyles();\n const position = locationToCoordinates(record?.GEO?.value)\n //position это свой ство которое запускает ререндер маркера и все что внутри. Попап из-за этого моргает. Замораживаем позицию если не изменилась и попап перестает моргать\n const memorizedPosition = useMemoCompare(position, (prev, next) => JSON.stringify(prev) === JSON.stringify(next))\n\n const handleClick = useCallback((event) => {\n onClick?.(event, record);\n }, [onClick, record])\n\n if (!position) return null\n const isAlarm = record?.ALARM?.value\n\n return (\n <RecordContextProvider value={record}>\n <Marker\n position={memorizedPosition}\n icon={LeafletAssetMarkerIcon({ record, color: isAlarm ? \"error\" : \"marker\" })}\n //нужно для кластера. Key принудительно обновляет маркер (иначе в cluster.getAllChildMarkers() значение record отстается от первой инициализации и иконка кластера не будет краснеть)\n key={isAlarm}\n id={record.id}\n record={record}\n eventHandlers={{\n click: handleClick,\n }}\n {...props}\n >\n <Popup direction=\"top\" closeButton={false} className={classes.popup}>\n {cloneElement(Children.only(children), {\n record\n })}\n </Popup>\n {hideTitles && <Tooltip direction=\"auto\" offset={[24, -40]} permanent> {record?.name} </Tooltip>}\n </Marker>\n </RecordContextProvider>\n );\n};\n\nexport default MapMarker","import gql from 'graphql-tag';\n\n\nexport const TAG_SERIES_FRAGMENT = gql`\n fragment TagHistoryFragment on TagSeries {\n tag {\n resource\n tag\n }\n data {\n value\n type\n quality\n timestamp\n timestampSrv\n utcOffset\n }\n pageInfo {\n hasNextPage\n }\n }\n`\n\nexport const TAG_FRAGMENT = gql`\n fragment TagFragment on Tag {\n tag {\n resource\n tag\n }\n value\n type\n quality\n timestamp\n timestampSrv\n utcOffset\n }\n`","import gql from \"graphql-tag\";\nimport graphqlClient from \"../graphqlClient\";\nimport { buildTagFromId, buildIdFromTag } from \"../Tag/utils\";\nimport { TAG_SERIES_FRAGMENT } from \"./typeDefs\"\nimport { keyBy, set, get } from \"lodash\";\n\nconst GET_LIST_TAGSERIES = gql`\n query getListTagSeries(\n $historyOptions: HistoryOptions!\n $filter: TagSeriesFilter\n ) {\n data: TagSeries {\n data: getList(historyOptions: $historyOptions, filter: $filter) {\n items { ...TagHistoryFragment }\n }\n }\n }\n ${TAG_SERIES_FRAGMENT}\n`;\n\nexport const GET_MANY_SETPOINTTAGS = gql`\n query getManySetpoints($ids: [String!]!) {\n data: Tag {\n data: getMany(ids: $ids) {\n items { \n tag {\n resource\n tag\n }\n value\n type\n }\n }\n }\n }\n`\n\nconst emptyData = {\n data: [],\n total: 0,\n};\n\nconst getListData = async (query, variables) => {\n\n let page = 1;\n\n const result = {}\n\n for (let i = 0; i < 20; i++) {\n variables.historyOptions.page = page;\n const response = await graphqlClient.request(query, variables);\n \n const keyedSerias = keyBy(response?.data?.data.items, (item) => buildIdFromTag(item.tag));\n \n for (const key in keyedSerias) {\n set(result, [key, 'tag'], keyedSerias[key].tag); \n const data = get(result, [key, 'data'], []);\n data.push(...keyedSerias[key].data);\n set(result, [key, 'data'], data);\n }\n \n variables.filter.tag_in = Object.keys(keyedSerias).filter(key => keyedSerias[key].pageInfo.hasNextPage).map(buildTagFromId);\n if(variables.filter.tag_in.length == 0) {\n break;\n }\n \n page++;\n }\n\n return Object.values(result);\n}\n\n\n\nconst getList = async (args) => {\n const { filter = {} } = args;\n const { tagsIds = [], periods = [], setpointTagsIds = [] } = filter;\n\n const enableRequest = Boolean(tagsIds.length && periods.length);\n\n if (!enableRequest) return Promise.resolve(emptyData);\n\n const setpoints = []\n if(setpointTagsIds.length > 0) {\n const { data: { data: { items } }} = await graphqlClient.request(GET_MANY_SETPOINTTAGS, {\n ids: setpointTagsIds\n });\n\n setpoints.push(...items);\n } \n\n const tag_in = tagsIds.map(buildTagFromId);\n\n const data = [];\n for (let i = 0; i < periods.length; i++) {\n const period = periods[i];\n const series = await getListData(GET_LIST_TAGSERIES, {\n filter: {\n tag_in,\n },\n historyOptions: {\n ...period,\n perPage: 10000\n },\n });\n\n const itemWithFilterTags = tag_in.map((tag) => ({\n data:\n series.find(\n (seriesItem) =>\n // eslint-disable-next-line eqeqeq\n seriesItem.tag.tag == tag.tag &&\n // eslint-disable-next-line eqeqeq\n seriesItem.tag.resource == tag.resource\n )?.data || [],\n tag: tag,\n }));\n\n if (itemWithFilterTags.some((x) => x?.data.length > 0)) {\n data.push({\n id: `${period.timestamp_gte}_${period.timestamp_lte}`,\n period,\n data: itemWithFilterTags,\n setpoints\n });\n }\n }\n\n return {\n data,\n total: data.length,\n };\n};\n\nexport default getList;\n","const sanitizeFieldRestProps = ({\n addLabel,\n allowEmpty,\n basePath,\n cellClassName,\n className,\n emptyText,\n formClassName,\n fullWidth,\n headerClassName,\n label,\n linkType,\n link,\n locale,\n record,\n refetch,\n resource,\n sortable,\n sortBy,\n sortByOrder,\n source,\n textAlign,\n translateChoice,\n alwaysOn,\n hideDefault,\n column,\n ...props\n}) => props;\n\nexport default sanitizeFieldRestProps;\n","import { useContext } from \"react\";\nimport RemoteStorageContext from \"./RemoteStorageContext\";\n\n\n\nconst useRemoteStorage = () => useContext(RemoteStorageContext);\n\n\n\nexport default useRemoteStorage","import React, { Children, cloneElement, isValidElement } from 'react';\nimport PropTypes from 'prop-types';\nimport classnames from 'classnames';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { lighten, darken } from '@material-ui/core/styles/colorManipulator';\nimport IconButton from '@material-ui/core/IconButton';\nimport CloseIcon from '@material-ui/icons/Close';\nimport { useTranslate, sanitizeListRestProps, useListContext } from 'ra-core';\nimport { TopToolbar } from 'react-admin';\n\n\nconst useStyles = makeStyles(\n theme => ({\n toolbar: {\n justifyContent: 'space-between',\n zIndex: 3,\n backgroundColor:\n theme.palette.type === 'light'\n ? lighten(theme.palette.primary.light, 0.72)\n : darken(theme.palette.primary.dark, 0.40),\n minHeight: theme.spacing(8),\n height: theme.spacing(8),\n transition: `${theme.transitions.create(\n 'height'\n )}, ${theme.transitions.create('min-height')}`,\n },\n\n topToolbar: {\n paddingTop: theme.spacing(2),\n },\n buttons: {},\n collapsed: {\n minHeight: 0,\n height: 0,\n overflowY: 'hidden',\n },\n title: {\n display: 'flex',\n alignItems: 'center',\n flex: '0 0 auto',\n marginLeft: '-0.5em',\n [theme.breakpoints.down('xs')]: {\n marginLeft: 0,\n },\n },\n icon: {\n\n marginRight: '0.5em',\n\n },\n }),\n { name: 'RaBulkActionsToolbar' }\n);\n\nconst BulkActionsToolbar = (props) => {\n const {\n classes: classesOverride,\n label = 'ra.action.bulk_actions',\n children,\n ...rest\n } = props;\n const {\n basePath,\n filterValues,\n resource,\n selectedIds,\n onUnselectItems,\n } = useListContext(props);\n const classes = useStyles(props);\n const translate = useTranslate();\n\n return (\n <Toolbar\n className={classnames(classes.toolbar, {\n [classes.collapsed]: selectedIds.length === 0,\n })}\n {...sanitizeListRestProps(rest)}\n >\n\n <div >\n <div className={classes.title}>\n <IconButton\n className={classes.icon}\n aria-label={translate('ra.action.unselect')}\n title={translate('ra.action.unselect')}\n onClick={onUnselectItems}\n size=\"small\"\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n <Typography color=\"inherit\" variant=\"subtitle1\">\n {translate(label, {\n _: label,\n smart_count: selectedIds.length,\n })}\n </Typography>\n\n </div>\n\n </div >\n <div >\n {\n Children.map(children, child =>\n isValidElement(child)\n ? cloneElement(child, {\n basePath,\n filterValues,\n resource,\n selectedIds,\n })\n : null\n )\n }\n </div >\n </Toolbar >\n );\n};\n\nBulkActionsToolbar.propTypes = {\n children: PropTypes.node,\n classes: PropTypes.object,\n label: PropTypes.string,\n};\n\nexport default BulkActionsToolbar;\n","import React from 'react';\nimport { Fragment } from 'react';\nimport { BulkDeleteButton } from 'react-admin';\nimport BulkExportButton from '../button/BulkExportButton';\nimport BulkRemoveButton from '../button/BulkRemoveButton';\nimport BulkRestoreButton from '../button/BulkRestoreButton';\n\n\n\n\n\n\nconst ListBulkActions = props => {\n const deleted = props.filterValues.deleted\n\n\n return deleted ? (\n <Fragment>\n <BulkRestoreButton {...props} />\n <BulkDeleteButton undoable={false} {...props} />\n </Fragment>\n ) : (\n <Fragment>\n <BulkExportButton {...props} />\n <BulkRemoveButton mutationMode='optimistic' {...props} />\n </Fragment>\n )\n};\n\nexport default ListBulkActions","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport RestoreIcon from '@material-ui/icons/RestoreFromTrash';\nimport { useMutation, useUnselectAll, useRefresh, useNotify, Button } from 'react-admin';\n\n\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst useStyles = makeStyles(theme => ({\n restoreButton: {},\n}));\n\nconst BulkRestoreButton = ({\n basePath,\n resource,\n classes: classesOverride,\n className,\n filterValues,\n selectedIds,\n ...rest }) => {\n\n const refresh = useRefresh();\n const notify = useNotify();\n const unselectAll = useUnselectAll();\n const classes = useStyles({ classes: classesOverride });\n\n const [handleRestoreMany, { loading }] = useMutation(\n {\n type: 'restoreMany',\n resource,\n payload: { ids: selectedIds },\n },\n {\n mutationMode: 'undoable',\n\n onSuccess: () => {\n\n notify('ra.notification.restored', 'info', { smart_count: selectedIds.length }, true);\n unselectAll(resource)\n refresh();\n },\n onFailure: error => {\n notify(\n typeof error === 'string'\n ? error\n : error.message || 'ra.notification.http_error',\n 'warning',\n {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n }\n );\n refresh();\n },\n }\n );\n\n return (\n <Button\n onClick={handleRestoreMany}\n disabled={loading}\n label='ra.action.restore'\n className={`ra-restore-button ${classes.restoreButton} ${className}`}\n key=\"button\"\n {...sanitizeRestProps(rest)}\n >\n <RestoreIcon />\n </Button>\n );\n\n};\n\nexport default BulkRestoreButton;","import React, { useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport FormGroup from '@material-ui/core/FormGroup';\nimport Checkbox from '@material-ui/core/Checkbox';\nimport { FieldTitle, useInput } from 'ra-core';\nimport { InputHelperText } from 'react-admin';\nimport sanitizeInputRestProps from './sanitizeInputRestProps';\n\n\n\nconst CheckboxInput = (props) => {\n const {\n format,\n label,\n fullWidth,\n helperText,\n onBlur,\n onChange,\n onFocus,\n options,\n disabled,\n parse,\n resource,\n source,\n validate,\n ...rest\n } = props;\n const {\n id,\n input: { onChange: finalFormOnChange, type, value, ...inputProps },\n isRequired,\n meta: { error, submitError, touched },\n } = useInput({\n format,\n onBlur,\n onChange,\n onFocus,\n parse,\n resource,\n source,\n type: 'checkbox',\n validate,\n ...rest,\n });\n\n const handleChange = useCallback(\n (event, value) => {\n finalFormOnChange(value);\n },\n [finalFormOnChange]\n );\n\n return (\n <FormGroup {...sanitizeInputRestProps(rest)}>\n <FormControlLabel\n control={\n <Checkbox\n id={id}\n color=\"primary\"\n onChange={handleChange}\n {...inputProps}\n {...options}\n disabled={disabled}\n />\n }\n label={\n <FieldTitle\n label={label}\n source={source}\n resource={resource}\n isRequired={isRequired}\n />\n }\n />\n <FormHelperText error={!!(error || submitError)}>\n <InputHelperText\n touched={touched}\n error={error || submitError}\n helperText={helperText}\n />\n </FormHelperText>\n </FormGroup>\n );\n};\n\nCheckboxInput.propTypes = {\n // @ts-ignore\n options: PropTypes.shape(Checkbox.propTypes),\n disabled: PropTypes.bool,\n};\n\nCheckboxInput.defaultProps = {\n options: {},\n};\n\n\nexport default CheckboxInput;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M19,1L17.74,3.75L15,5L17.74,6.26L19,9L20.25,6.26L23,5L20.25,3.75M9,4L6.5,9.5L1,12L6.5,14.5L9,20L11.5,14.5L17,12L11.5,9.5M19,15L17.74,17.74L15,19L17.74,20.25L19,23L20.25,20.25L23,19L20.25,17.74\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../authenticationProvider/checkToken';\nimport { URI_AUTHORIZATION_SERVICE, APPLICATION_NAME } from '../../appsettings';\n\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeaders({\n authentication: token ? `Bearer ${token}` : \"\",\n application: APPLICATION_NAME\n });\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_AUTHORIZATION_SERVICE)\n\n\n\nexport default client","import { GraphQLClient } from 'graphql-request'\nimport { URI_AUTHENTICATION_SERVICE } from '../../appsettings';\n\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n const client = new GraphQLClient(enpoint)\n this.request = (query, variables) => {\n return client.request(query, variables);\n };\n }\n}\n\n\nconst client = new GraphQLClientConstructor(URI_AUTHENTICATION_SERVICE)\n\n\n\nexport default client","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props} >\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M23 10a2 2 0 00-2-2h-6.32l.96-4.57a1.5 1.5 0 00-.41-1.38L14.17 1 9.18 5.99l11.6 11.6 2.08-4.86c.09-.23.14-.47.14-.73v-2zm-.89 11.46L2.39 1.73 1.11 3l5.9 5.9L7 9v10a2 2 0 002 2h9a2 2 0 00.9-.21l1.94 1.94 1.27-1.27zM2.39 1.73zM1 21h4V9H1v12z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import { createContext } from 'react';\n\nconst TreeContext = createContext();\n\nTreeContext.displayName = 'TreeContext';\n\nexport default TreeContext","import React, { memo } from 'react';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport { makeStyles } from '@material-ui/core/styles';\nimport useTreeContext from './controllers/useTreeContext';\nimport CircularProgress from '@material-ui/core/CircularProgress';\n\n\nconst useStyles = makeStyles({\n expandIcon: {}\n});\n\nconst TreeNodeExpandIcon = memo(({ node, ...props }) => {\n const classes = useStyles();\n const { expanded, loading } = useTreeContext();\n const { id, name, children } = node\n const expandable = Boolean(Array.isArray(children) ? children.length : children);\n const expand = expanded.includes(id);\n const load = loading.includes(id)\n return expandable\n ? load\n ? <CircularProgress size={16} />\n : expand\n ? <ExpandMoreIcon className={classes.expandIcon} />\n : <ChevronRightIcon className={classes.expandIcon} />\n : null\n});\n\n\nexport default TreeNodeExpandIcon","import React, { memo, createElement, cloneElement, isValidElement } from 'react';\nimport clsx from 'clsx';\nimport { makeStyles } from '@material-ui/core/styles';\nimport FolderIcon from '@material-ui/icons/Folder';\nimport useTreeContext from './controllers/useTreeContext';\nimport amber from '@material-ui/core/colors/amber';\nimport Typography from '@material-ui/core/Typography';\nimport DefaultTreeNodeLabelActionsButton from './TreeNodeLabelActionsButton';\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(0.5),\n position: 'relative',\n '&:hover': {\n '& $actionsButton': {\n opacity: 1,\n },\n },\n },\n icon: {\n marginRight: theme.spacing(1),\n color: amber[600]\n },\n text: {\n fontWeight: 'inherit',\n flexGrow: 1,\n },\n actionsButton: {\n opacity: 0,\n },\n cuted: {\n opacity: 0.5,\n }\n}), { name: 'TreeNodeLabel' });\n\nconst defaultIcon = <FolderIcon />\n\nconst TreeNodeLabel = memo(({\n node,\n treeNodeLabelActionsButton: TreeNodeLabelActionsButton,\n ...props\n}) => {\n const classes = useStyles();\n const { icon: Icon, cuted, readOnly } = useTreeContext();\n const isCutted = cuted && cuted.nodeId === node.id\n\n\n return (\n <div className={clsx(\n classes.root,\n {\n [classes.cuted]: isCutted,\n })}\n >\n {Icon\n ? <Icon record={node} color=\"inherit\" className={classes.icon} fontSize=\"small\" />\n : <FolderIcon color=\"inherit\" className={classes.icon} fontSize=\"small\" />\n }\n <Typography variant=\"body2\" className={classes.text}>\n {node.name}\n </Typography>\n {!readOnly && <TreeNodeLabelActionsButton className={classes.actionsButton} node={node} />}\n </div>\n )\n});\n\nTreeNodeLabel.defaultProps = {\n treeNodeLabelActionsButton: DefaultTreeNodeLabelActionsButton,\n}\n\nexport default TreeNodeLabel","import { createContext } from 'react';\n\nconst DashboardContext = createContext({\n basePath: null,\n record: null,\n defaultTitle: null,\n loaded: null,\n loading: null,\n error: null,\n refetch: null,\n resource: null,\n version: null,\n range: null,\n setRange: null,\n variables: null,\n variablesValues: null,\n setVariablesValues: null,\n editable: null,\n setEditable: null,\n setLayouts: null,\n saveLayouts: null,\n});\n\nDashboardContext.displayName = 'DashboardContext';\n\nexport default DashboardContext\n","import React from 'react';\nimport { ReferenceArrayField, Labeled, ChipField, SingleFieldList} from 'react-admin';\n\nconst FileResourcesReferenceArrayField = (props) => {\n const { record, resource, basePath, source, fullWidth } = props\n const typename = record[`_${source}Typename`] || \"Asset\"\n const label = typename ? `resources.File.enums.typename.${typename}` : `resources.File.enums.typename.Asset`\n\n // if (!typename) return null\n\n return (\n <Labeled\n record={record}\n resource={resource}\n basePath={basePath}\n label={label}\n source={source}\n disabled={false}\n fullWidth={fullWidth}\n >\n <ReferenceArrayField {...props} reference={typename} >\n <SingleFieldList linkType=\"show\">\n <ChipField source=\"name\" />\n </SingleFieldList>\n </ReferenceArrayField>\n </Labeled>\n );\n};\n\n\nexport default FileResourcesReferenceArrayField;","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport { useTranslate } from 'ra-core';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\n\n\n\nexport const BooleanField = memo(({ className, classes: classesOverride, emptyText, source, record, valueLabelTrue, valueLabelFalse, ...props }) => {\n const translate = useTranslate();\n if (!record) return null;\n const value = get(record, source);\n const valueText = (value === true)\n ? valueLabelTrue\n : (value === false)\n ? valueLabelFalse\n : emptyText;\n\n return (value === false || value === true) ? (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(props)}\n >\n {translate(valueText, { _: valueText })}\n </Typography>\n ) : (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(props)}\n >\n {valueText}\n </Typography>\n )\n});\n\nBooleanField.defaultProps = {\n addLabel: true,\n valueLabelTrue: 'ra.boolean.true',\n valueLabelFalse: 'ra.boolean.false',\n};\n\n\n\nexport default BooleanField;\n","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport { Link } from '@material-ui/core';\nimport { useRecordContext } from 'ra-core';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\n\n// useful to prevent click bubbling in a datagrid with rowClick\nconst stopPropagation = e => e.stopPropagation();\n\nconst PhoneNumberField = memo(props => {\n const { className, source, emptyText, ...rest } = props;\n const record = useRecordContext(props);\n const value = get(record, source);\n\n if (value == null) {\n return emptyText ? (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {emptyText}\n </Typography>\n ) : null;\n }\n\n return (\n <Link\n className={className}\n href={`tel:${value}`}\n onClick={stopPropagation}\n variant=\"body2\"\n {...sanitizeFieldRestProps(rest)}\n >\n {value}\n </Link>\n );\n});\n\nPhoneNumberField.defaultProps = {\n addLabel: true,\n};\n\nexport default PhoneNumberField;\n","import * as React from 'react';\nimport { memo } from 'react';\nimport get from 'lodash/get';\nimport { useChoices, useRecordContext } from 'ra-core';\nimport { Typography } from '@material-ui/core';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\n\n\n\nexport const SelectField = memo(props => {\n const {\n className,\n emptyText,\n source,\n choices,\n optionValue,\n optionText,\n translateChoice,\n ...rest\n } = props;\n const record = useRecordContext(props);\n const value = get(record, source);\n const { getChoiceText, getChoiceValue } = useChoices({\n optionText,\n optionValue,\n translateChoice,\n });\n\n const choice = choices.find(choice => getChoiceValue(choice) === value);\n\n if (!choice) {\n return emptyText ? (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {typeof emptyText === 'function' ? emptyText(record, props) : emptyText}\n </Typography>\n ) : null;\n }\n\n let choiceText = getChoiceText(choice);\n\n return (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n {...sanitizeFieldRestProps(rest)}\n >\n {choiceText}\n </Typography>\n );\n});\n\nSelectField.defaultProps = {\n optionText: 'name',\n optionValue: 'id',\n translateChoice: true,\n};\n\nSelectField.defaultProps = {\n addLabel: true,\n};\n\n\n\nSelectField.displayName = 'SelectField';\n\nexport default SelectField;\n","import { useEffect, useRef } from \"react\";\n\n\nfunction useMemoCompare(next, compare) {\n // Ref for storing previous value\n const previousRef = useRef();\n const previous = previousRef.current;\n // Pass previous and next value to compare function\n // to determine whether to consider them equal.\n const isEqual = compare(previous, next);\n // If not equal update previousRef to next value.\n // We only update if not equal so that this hook continues to return\n // the same old value if compare keeps returning true.\n useEffect(() => {\n if (!isEqual) {\n previousRef.current = next;\n }\n });\n // Finally, if equal then return the previous value\n return isEqual ? previous : next;\n}\n\nexport default useMemoCompare","import RemoveIcon from '@material-ui/icons/Delete';\nimport { useMutation, useUnselectAll, useRefresh, useNotify, Button, useResourceContext } from 'react-admin';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { alpha } from '@material-ui/core/styles/colorManipulator';\n\nconst useStyles = makeStyles(theme => ({\n removeButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n}));\n\nconst BulkRemoveWithUndoButton = props => {\n\n const {\n label = 'ra.action.remove',\n classes: classesOverride,\n className,\n onClick,\n record,\n basePath,\n redirect: redirectTo = 'list',\n onSuccess,\n onFailure,\n selectedIds,\n undoable, mutationMode,\n filterValues,\n ...rest\n } = props;\n\n const refresh = useRefresh();\n const notify = useNotify();\n const unselectAll = useUnselectAll();\n const classes = useStyles({ classes: classesOverride });\n const resource = useResourceContext(props);\n\nconst [handleRemoveMany, { loading }] = useMutation(\n {\n type: 'removeMany',\n resource,\n payload: { ids: selectedIds },\n },\n {\n mutationMode: 'undoable',\n\n onSuccess: () => {\n\n notify('ra.notification.removed', 'info', { smart_count: selectedIds.length }, true);\n unselectAll(resource)\n refresh();\n },\n onFailure: error => {\n notify(\n typeof error === 'string'\n ? error\n : error.message || 'ra.notification.http_error',\n 'warning',\n {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n }\n );\n refresh();\n },\n }\n);\n\nreturn (\n <Button\n onClick={handleRemoveMany}\n disabled={loading}\n label='ra.action.remove'\n className={`ra-bulk-remove-button ${classes.removeButton} ${className}`}\n key=\"button\"\n // {...sanitizeRestProps(rest)}\n >\n <RemoveIcon />\n </Button>\n);\n}\n\nexport default BulkRemoveWithUndoButton;","import * as React from 'react';\nimport { Fragment, useState, ReactElement, useCallback } from 'react';\nimport RemoveIcon from '@material-ui/icons/Delete';\nimport { alpha } from '@material-ui/core/styles/colorManipulator';\nimport inflection from 'inflection';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport {\n useTranslate,\n useDeleteMany,\n CRUD_DELETE_MANY,\n} from 'ra-core';\n\nimport { useMutation, useUnselectAll, useRefresh, useNotify, Button, useResourceContext, Confirm } from 'react-admin';\n\nconst useStyles = makeStyles(\n theme => ({\n removeButton: {\n color: theme.palette.error.main,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.12),\n // Reset on mouse devices\n '@media (hover: none)': {\n backgroundColor: 'transparent',\n },\n },\n },\n }),\n // { name: 'RaBulkRemoveWithConfirmButton' }\n);\n\nconst defaultIcon = <RemoveIcon />;\n\nconst BulkRemoveWithConfirmButton = (props) => {\n const {\n basePath,\n classes: classesOverride,\n confirmTitle = 'ra.action.bulk_remove_title',\n confirmContent = 'ra.action.bulk_remove_content',\n className,\n icon = defaultIcon,\n label,\n onClick,\n record,\n redirect: redirectTo = 'list',\n selectedIds,\n mutationMode,\n ...rest\n } = props;\n const [open, setOpen] = useState(false);\n const classes = useStyles(props);\n const notify = useNotify();\n const unselectAll = useUnselectAll();\n const refresh = useRefresh();\n const translate = useTranslate();\n const resource = useResourceContext(props);\n const [handleRemoveMany, { loading }] = useMutation(\n {\n type: 'removeMany',\n resource,\n payload: { ids: selectedIds },\n },\n {\n mutationMode: mutationMode,\n \n onSuccess: () => {\n \n notify('ra.notification.removed', 'info', { smart_count: selectedIds.length }, mutationMode === 'undoable');\n unselectAll(resource)\n refresh();\n },\n onFailure: error => {\n notify(\n typeof error === 'string'\n ? error\n : error.message || 'ra.notification.http_error',\n 'warning',\n {\n _:\n typeof error === 'string'\n ? error\n : error && error.message\n ? error.message\n : undefined,\n }\n );\n refresh();\n },\n }\n );\n\n const handleDialogOpen = e => {\n setOpen(true);\n e.stopPropagation();\n };\n\n const handleDialogClose = e => {\n setOpen(false);\n e.stopPropagation();\n };\n const handleClick = useCallback(e => {\n e.stopPropagation();\n }, []);\n\n return (\n <Fragment>\n <Button\n onClick={handleDialogOpen}\n label={label}\n className={classes.removeButton}\n // {...sanitizeRestProps(rest)}\n >\n {icon}\n </Button>\n <Confirm\n isOpen={open}\n loading={loading}\n title={confirmTitle}\n content={confirmContent}\n translateOptions={{\n smart_count: selectedIds.length,\n declension: translate(`resources.${resource}.forcedCaseName`, {\n smart_count: selectedIds.length,\n _: inflection.humanize(\n translate(`resources.${resource}.declension`, {\n smart_count: selectedIds.length,\n _: inflection.inflect(\n resource,\n selectedIds.length\n ),\n }),\n true\n ),\n }),\n }}\n onConfirm={handleRemoveMany}\n onClose={handleDialogClose}\n />\n </Fragment>\n );\n};\n\nBulkRemoveWithConfirmButton.defaultProps = {\n label: 'ra.action.remove',\n};\n\nexport default BulkRemoveWithConfirmButton;\n","import React from 'react';\n\nimport { getMutationMode } from 'ra-core'\nimport BulkRemoveWithUndoButton from './BulkRemoveWithUndoButton';\nimport BulkRemoveWithConfirmButton from './BulkRemoveWithConfirmButton';\n\nexport const sanitizeRestProps = ({\n basePath,\n classes,\n filterValues,\n handleSubmit,\n handleSubmitWithRedirect,\n invalid,\n label,\n pristine,\n resource,\n saving,\n selectedIds,\n undoable,\n redirect,\n submitOnEnter,\n ...rest\n}) => rest;\n\nconst BulkRemoveButton = ({\n basePath,\n undoable, mutationMode = \"undoable\",\n record,\n ...rest }) => {\n\n const mode = getMutationMode(mutationMode, undoable);\n const isUndoMode = mode === \"undoable\";\n if (isUndoMode) return (\n <BulkRemoveWithUndoButton record={record} {...rest} />\n );\n return (<BulkRemoveWithConfirmButton\n basePath={basePath}\n mutationMode={mode}\n record={record}\n {...rest}\n />)\n\n};\n\nexport default BulkRemoveButton;","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\n\n\n\nconst REFRESH_TOKEN = gql`\n mutation refreshToken($refreshToken: String!) {\n data: refresh(refreshToken: $refreshToken) { \n token,\n refreshToken,\n account {\n id\n login\n email\n phone\n deleted\n banned\n } \n }\n }\n`;\n\nexport default (args) => {\n return graphqlClient.request(REFRESH_TOKEN, args).then(response => response?.data);\n};","import decodeJwt from 'jwt-decode';\nimport { AUTHENTICATION_TOKEN_COOKIE, AUTHENTICATION_REFRESH_TOKEN_COOKIE, DOMAIN_COOKIE } from '../../appsettings';\nimport { getCookie, setCookie, deleteCookie } from '../../utils';\nimport refreshTokenMutation from './refreshToken';\n\n\nconst checkToken = async () => {\n \n let authenticationTokenCookie = getCookie(AUTHENTICATION_TOKEN_COOKIE);\n let authenticationRefreshTokenCookie = getCookie(AUTHENTICATION_REFRESH_TOKEN_COOKIE);\n\n if(!authenticationTokenCookie && !authenticationRefreshTokenCookie) {\n console.error(`no tokens in cookies`); \n throw new Error('ra.auth.existed');\n \n } \n\n if(tokenExpired(authenticationTokenCookie)) {\n if(!tokenExpired(authenticationRefreshTokenCookie)) {\n try {\n const { token, refreshToken } = await refreshTokenMutation({ refreshToken: authenticationRefreshTokenCookie }); \n setCookie(AUTHENTICATION_TOKEN_COOKIE, token, { domain: DOMAIN_COOKIE });\n setCookie(AUTHENTICATION_REFRESH_TOKEN_COOKIE, refreshToken, { domain: DOMAIN_COOKIE });\n return token;\n } catch (error) {\n deleteCookie(AUTHENTICATION_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n deleteCookie(AUTHENTICATION_REFRESH_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n throw new Error(`${error.message.replace('Error: ', '').replace('GraphQL error: ', '')}`)\n } \n } else {\n console.error(`authentication RefreshToken is Expired!!!`);\n throw new Error('ra.auth.expired');\n }\n } else {\n return authenticationTokenCookie;\n }\n};\n\n\n/*\nconst checkToken = () => {\n const authenticationTokenCookie = getCookie(AUTHENTICATION_TOKEN_COOKIE);\n const authenticationRefreshTokenCookie = getCookie(AUTHENTICATION_REFRESH_TOKEN_COOKIE);\n\n if (tokenExpired(authenticationTokenCookie)) {\n if (!tokenExpired(authenticationRefreshTokenCookie)) {\n return refreshTokenMutation({ refreshToken: authenticationRefreshTokenCookie })\n .then(({ token, refreshToken }) => {\n setCookie(AUTHENTICATION_TOKEN_COOKIE, token, { domain: DOMAIN_COOKIE });\n setCookie(AUTHENTICATION_REFRESH_TOKEN_COOKIE, refreshToken, { domain: DOMAIN_COOKIE });\n return token\n })\n .catch(error => {\n deleteCookie(AUTHENTICATION_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n deleteCookie(AUTHENTICATION_REFRESH_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n throw new Error(`${error.message.replace('Error: ', '').replace('GraphQL error: ', '')}`)\n })\n } else {\n return Promise.reject(new Error(`Error`))\n }\n } else {\n return Promise.resolve(authenticationTokenCookie)\n }\n};\n*/\n\nexport const tokenExpired = (token) => {\n if (token) {\n const decodedToken = decodeJwt(token);\n const current_time = Date.now() / 1000;\n const result = (decodedToken.exp - 20) < current_time;\n return result;\n } else {\n return true;\n }\n};\n\nexport default checkToken","import React from 'react';\nimport PropTypes from 'prop-types';\nimport IconButton from '@material-ui/core/IconButton';\nimport RemoveCircleIcon from '@material-ui/icons/RemoveCircle';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport { useResourceContext, useTranslate } from 'ra-core';\n\nconst emptyRecord = {};\n\nconst useStyles = makeStyles(\n theme => ({\n body: {\n display: 'flex',\n alignItems: 'flex-end',\n pointerEvents: 'auto',\n position: 'relative'\n },\n spacer: { width: theme.spacing(2) },\n hideButton: {\n height: 24,\n width: 24,\n padding: 0,\n position: 'absolute',\n top: 0,\n right: 0\n },\n hideIcon: {\n height: 16,\n width: 16,\n },\n }),\n { name: 'RaFilterFormInput' }\n);\n\nconst FilterFormInput = props => {\n const { filterElement, handleHide, variant, margin } = props;\n const resource = useResourceContext(props);\n const translate = useTranslate();\n const classes = useStyles(props);\n\n\n return (\n <div\n data-source={filterElement.props.source}\n className={classnames('filter-field', classes.body)}\n >\n {React.cloneElement(filterElement, {\n allowEmpty:\n filterElement.props.allowEmpty === undefined\n ? true\n : filterElement.props.allowEmpty,\n resource,\n record: emptyRecord,\n variant,\n margin,\n helperText: false,\n // ignore defaultValue in Field because it was already set in Form (via mergedInitialValuesWithDefaultValues)\n defaultValue: undefined,\n })}\n {!filterElement.props.alwaysOn &&\n <IconButton\n className={classnames('hide-filter', classes.hideButton)}\n onClick={handleHide}\n data-key={filterElement.props.source}\n title={translate('ra.action.remove_filter')}\n disableRipple\n\n >\n <RemoveCircleIcon className={classes.hideIcon} />\n </IconButton>\n }\n <div className={classes.spacer}> </div>\n </div>\n );\n};\n\nFilterFormInput.propTypes = {\n filterElement: PropTypes.node,\n handleHide: PropTypes.func,\n classes: PropTypes.object,\n resource: PropTypes.string,\n margin: PropTypes.string,\n variant: PropTypes.string,\n};\n\nexport default FilterFormInput;\n","import React, { useEffect, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { Form, FormSpy } from 'react-final-form';\nimport arrayMutators from 'final-form-arrays';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport lodashSet from 'lodash/set';\nimport lodashGet from 'lodash/get';\n\nimport FilterFormInput from './FilterFormInput';\n\nconst useStyles = makeStyles(\n theme => ({\n form: {\n // marginTop: -theme.spacing(2),\n paddingTop: 0,\n display: 'flex',\n alignItems: 'flex-end',\n flexWrap: 'wrap',\n // minHeight: theme.spacing(10),\n pointerEvents: 'none',\n },\n clearFix: { clear: 'right' },\n }),\n { name: 'RaFilterForm' }\n);\n\nconst sanitizeRestProps = ({\n active,\n dirty,\n dirtyFields,\n dirtyFieldsSinceLastSubmit,\n dirtySinceLastSubmit,\n error,\n errors,\n filterValues,\n form,\n handleSubmit,\n hasSubmitErrors,\n hasValidationErrors,\n invalid,\n modified,\n modifiedSinceLastSubmit,\n pristine,\n setFilters,\n submitError,\n submitErrors,\n submitFailed,\n submitSucceeded,\n submitting,\n touched,\n valid,\n validating,\n values,\n visited,\n ...props\n}) => props;\n\n\nexport const FilterForm = ({\n classes = {},\n className,\n resource,\n margin,\n variant,\n filters,\n displayedFilters = {},\n hideFilter,\n initialValues,\n ...rest\n}) => {\n useEffect(() => {\n filters.forEach((filter) => {\n if (filter.props.alwaysOn && filter.props.defaultValue) {\n throw new Error(\n 'Cannot use alwaysOn and defaultValue on a filter input. Please set the filterDefaultValues props on the <List> element instead.'\n );\n }\n });\n }, [filters]);\n\n const getShownFilters = () =>\n filters.filter(\n (filterElement) =>\n filterElement.props.alwaysOn ||\n displayedFilters[filterElement.props.source] ||\n typeof lodashGet(initialValues, filterElement.props.source) !==\n 'undefined'\n );\n\n const handleHide = useCallback(\n event => hideFilter(event.currentTarget.dataset.key),\n [hideFilter]\n );\n\n return (\n <form\n className={classnames(className, classes.form)}\n {...sanitizeRestProps(rest)}\n onSubmit={handleSubmit}\n >\n {getShownFilters().map((filterElement) => (\n <FilterFormInput\n key={filterElement.props.source}\n filterElement={filterElement}\n handleHide={handleHide}\n resource={resource}\n variant={filterElement.props.variant || variant}\n margin={filterElement.props.margin || margin}\n />\n ))}\n <div className={classes.clearFix} />\n </form>\n );\n};\n\nconst handleSubmit = event => {\n event.preventDefault();\n return false;\n};\n\nFilterForm.propTypes = {\n resource: PropTypes.string,\n filters: PropTypes.arrayOf(PropTypes.node).isRequired,\n displayedFilters: PropTypes.object,\n hideFilter: PropTypes.func.isRequired,\n initialValues: PropTypes.object,\n classes: PropTypes.object,\n className: PropTypes.string,\n};\n\nexport const mergeInitialValuesWithDefaultValues = ({\n initialValues,\n filters,\n}) => ({\n ...filters\n .filter(\n (filterElement) =>\n filterElement.props.alwaysOn && filterElement.props.defaultValue\n )\n .reduce(\n (acc, filterElement) =>\n lodashSet(\n { ...acc },\n filterElement.props.source,\n filterElement.props.defaultValue\n ),\n {}\n ),\n ...initialValues,\n});\n\nconst EnhancedFilterForm = props => {\n const { classes: classesOverride, ...rest } = props;\n const classes = useStyles(props);\n\n const mergedInitialValuesWithDefaultValues = mergeInitialValuesWithDefaultValues(\n props\n );\n\n const { initialValues, ...rest2 } = rest;\n\n return (\n <Form\n onSubmit={handleFinalFormSubmit}\n initialValues={mergedInitialValuesWithDefaultValues}\n mutators={{ ...arrayMutators }}\n render={formProps => (\n <>\n <FormSpy\n subscription={FormSpySubscription}\n onChange={({ pristine, values }) => {\n if (pristine) {\n return;\n }\n rest && rest.setFilters(values);\n }}\n />\n <FilterForm classes={classes} {...formProps} {...rest2} />\n </>\n )}\n />\n );\n};\n\nconst handleFinalFormSubmit = () => { };\n\n// Options to instruct the FormSpy that it should only listen to the values and pristine changes\nconst FormSpySubscription = { values: true, pristine: true };\n\nexport default EnhancedFilterForm;\n","import React from 'react';\nimport { useHistory, useLocation, Switch, Route } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport { Link } from 'react-router-dom';\nimport { linkToRecord, useTranslate } from 'ra-core';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\n\n\nconst LinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} {...props} />);\n\nconst PlayButtonAsMenuItem = React.forwardRef(({\n basePath = '',\n label = 'ra.action.play',\n icon = defaultIcon,\n record,\n target = \"_self\",\n ...rest\n}, ref) => {\n const translate = useTranslate();\n const location = useLocation()\n\n return (\n <MenuItem\n component={LinkRef}\n to={{\n pathname: `${linkToRecord(basePath, record && record.id)}/play`,\n search: location.search,\n }}\n target={target}\n ref={ref}\n onClick={stopPropagation}\n {...rest}\n >\n <ListItemIcon>\n {React.cloneElement(icon, {\n fontSize: \"small\"\n })}\n </ListItemIcon>\n <Typography variant=\"inherit\">{translate(label)}</Typography>\n </MenuItem>\n )\n});\n\nconst defaultIcon = <PlayArrowIcon />;\n\nconst stopPropagation = e => e.stopPropagation();\n\nPlayButtonAsMenuItem.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n};\n\nexport default PlayButtonAsMenuItem;\n","import React, { useCallback, useState, useMemo, cloneElement } from 'react';\nimport classnames from 'classnames';\nimport { InputHelperText, useInput, useTranslate } from 'react-admin';\nimport { makeStyles, useTheme } from '@material-ui/core';\nimport FormControl from '@material-ui/core/FormControl';\nimport FormHelperText from '@material-ui/core/FormHelperText';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport { FieldTitle } from 'ra-core';\nimport Editor from \"rich-markdown-editor\";\nimport { light, dark } from \"rich-markdown-editor/dist/styles/theme\";\n\n\n\nconst useEditorTheme = () => {\n const theme = useTheme();\n const defaultTheme = theme.palette.type === \"light\" ? light : dark\n const editorTheme = useMemo(() => ({\n ...defaultTheme,\n zIndex: theme.zIndex.modal,\n background: \"transperent\",\n fontFamily: theme.typography.fontFamily,\n fontWeight: theme.typography.fontWeightRegular,\n text: theme.palette.text.primary,\n textSecondary: theme.palette.text.secondary,\n placeholder: theme.palette.text.secondary,\n }), [theme])\n\n return editorTheme\n}\n\nconst useDictionary = () => {\n const dictionary = {\n addColumnAfter: \"Вставить столбец после\",\n addColumnBefore: \"Вставить столбец перед\",\n addRowAfter: \"Вставить строку после\",\n addRowBefore: \"Вставить строку перед\",\n alignCenter: \"Выровнять по центру\",\n alignLeft: \"Выровнять по левому краю\",\n alignRight: \"Выровнять по правому краю\",\n bulletList: \"Маркированный список\",\n checkboxList: \"Список дел\",\n codeBlock: \"Блок кода\",\n codeCopied: \"Скопировано в буфер обмена\",\n codeInline: \"Код\",\n createLink: \"Создать ссылку\",\n createLinkError: \"Извините, при создании ссылки произошла ошибка\",\n createNewDoc: \"Создать новый документ\",\n deleteColumn: \"Удалить столбец\",\n deleteRow: \"Удалить строку\",\n deleteTable: \"Удалить таблицу\",\n deleteImage: \"Удалить изображение\",\n downloadImage: \"Загрузить изображение\",\n replaceImage: \"Заменить изображение\",\n alignImageLeft: \"Плавает влево на половину ширины\",\n alignImageRight: \"Плавает вправо на половину ширины\",\n alignImageDefault: \"По центру большой\",\n em: \"Курсив\",\n embedInvalidLink: \"Извините, эта ссылка не работает для этого типа встраивания\",\n findOrCreateDoc: \"Найти или создать документ…\",\n h1: \"Заголовок 1го уровня\",\n h2: \"Заголовок 2го уровня\",\n h3: \"Заголовок 3го уровня\",\n heading: \"Заголовок\",\n hr: \"Разделитель\",\n image: \"Изображение\",\n imageUploadError: \"Извините, произошла ошибка при загрузке изображения\",\n imageCaptionPlaceholder: \"Написать подпись\",\n info: \"Информация\",\n infoNotice: \"Информационное уведомление\",\n link: \"Ссылка\",\n linkCopied: \"Ссылка скопирована в буфер обмена\",\n mark: \"Выделить\",\n newLineEmpty: \"Введите '/', чтобы вставить…\",\n newLineWithSlash: \"Продолжайте печатать, чтобы отфильтровать...\",\n noResults: \"Нет результатов\",\n openLink: \"Открыть ссылку\",\n orderedList: \"Упорядоченный список\",\n pageBreak: \"Разрыв страницы\",\n pasteLink: \"Вставить ссылку...\",\n pasteLinkWithTitle: (title) => `Вставьте ссылку ${title}…`,\n placeholder: \"Заполнитель\",\n quote: \"Цитата\",\n removeLink: \"Удалить ссылку\",\n searchOrPasteLink: \"Найти или вставить ссылку…\",\n strikethrough: \"Зачеркнутый\",\n strong: \"Жирный\",\n subheading: \"Подзаголовок\",\n table: \"Таблица\",\n tip: \"Подсказка\",\n tipNotice: \"Уведомление о подсказке\",\n warning: \"Предупреждение\",\n warningNotice: \"Уведомление о предупреждении\",\n };\n\n return dictionary\n}\n\nconst MarkdownInput = props => {\n const {\n children,\n className,\n classes: classesOverride,\n fullWidth,\n label,\n margin = 'dense',\n helperText,\n resource,\n source,\n record,\n InputProps,\n ...rest\n } = props;\n const classes = useStyles()\n const theme = useEditorTheme()\n const dictionary = useDictionary()\n\n\n const {\n id,\n input: { onChange, onFocus, onBlur, value },\n isRequired,\n meta,\n } = useInput({\n source,\n ...rest,\n });\n const [markdown, setMarkdown] = useState(value)\n const { error, submitError, touched, active } = meta;\n\n const handleChange = useCallback((getValue) => {\n const value = getValue()\n setMarkdown(value)\n onChange(value);\n }, [setMarkdown, onChange])\n\n const handleFocus = useCallback(() => {\n onFocus()\n }, [onFocus])\n\n const handleBlur = useCallback(() => {\n onBlur()\n }, [onBlur])\n\n\n\n return (\n <FormControl\n variant=\"filled\"\n fullWidth={fullWidth}\n error={touched && !!(error || submitError)}\n margin={margin}\n >\n <InputLabel htmlFor={id} shrink className={classes.label}>\n <FieldTitle\n label={label}\n source={source}\n resource={resource}\n isRequired={isRequired}\n />\n\n </InputLabel>\n\n {InputProps?.endAdornment && (cloneElement(InputProps?.endAdornment, { className: classes.endAdornment }))}\n\n <Editor\n id={`${resource}_${source}_${id}`}\n className={classnames(classes.root, classes.underline, { \"focused\": active })}\n theme={theme}\n dictionary={dictionary}\n defaultValue={markdown}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder=\"Напишите что-нибудь...\"\n />\n <FormHelperText error={touched && (error || submitError)}>\n <InputHelperText\n touched={touched}\n error={error || submitError}\n helperText={helperText}\n />\n </FormHelperText>\n </FormControl>\n\n );\n};\n\nconst useStyles = makeStyles(theme => {\n const light = theme.palette.type === 'light';\n const bottomLineColor = light ? 'rgba(0, 0, 0, 0.42)' : 'rgba(255, 255, 255, 0.7)';\n const backgroundColor = light ? 'rgba(0, 0, 0, 0.04)' : 'rgba(255, 255, 255, 0.09)';\n return {\n root: {\n paddingTop: 27,\n paddingBottom: 6,\n paddingLeft: 36,\n paddingRight: 12,\n fontSize: theme.typography.fontSize,\n position: 'relative',\n backgroundColor,\n borderTopLeftRadius: theme.shape.borderRadius,\n borderTopRightRadius: theme.shape.borderRadius,\n transition: theme.transitions.create('background-color', {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut,\n }),\n '&:hover': {\n backgroundColor: light ? 'rgba(0, 0, 0, 0.13)' : 'rgba(255, 255, 255, 0.13)',\n // Reset on touch devices, it doesn't add specificity\n '@media (hover: none)': {\n backgroundColor,\n },\n },\n '&$focused': {\n backgroundColor: light ? 'rgba(0, 0, 0, 0.09)' : 'rgba(255, 255, 255, 0.09)',\n },\n '&$disabled': {\n backgroundColor: light ? 'rgba(0, 0, 0, 0.12)' : 'rgba(255, 255, 255, 0.12)',\n },\n },\n underline: {\n '&:after': {\n borderBottom: `2px solid ${theme.palette.primary.main}`,\n left: 0,\n bottom: 0,\n // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\"',\n position: 'absolute',\n right: 0,\n transform: 'scaleX(0)',\n transition: theme.transitions.create('transform', {\n duration: theme.transitions.duration.shorter,\n easing: theme.transitions.easing.easeOut,\n }),\n pointerEvents: 'none', // Transparent to the hover style.\n },\n '&.focused:after': {\n transform: 'scaleX(1)',\n },\n '&$error:after': {\n borderBottomColor: theme.palette.error.main,\n transform: 'scaleX(1)', // error is always underlined in red\n },\n '&:before': {\n borderBottom: `1px solid ${bottomLineColor}`,\n left: 0,\n bottom: 0,\n // Doing the other way around crash on IE 11 \"''\" https://github.com/cssinjs/jss/issues/242\n content: '\"\\\\00a0\"',\n position: 'absolute',\n right: 0,\n transition: theme.transitions.create('border-bottom-color', {\n duration: theme.transitions.duration.shorter,\n }),\n pointerEvents: 'none', // Transparent to the hover style.\n },\n '&:hover:before': {\n borderBottom: `1px solid ${theme.palette.text.primary}`,\n },\n '&$disabled:before': {\n borderBottomStyle: 'dotted',\n },\n },\n endAdornment: {\n position: \"absolute\",\n top: 16,\n right: 6,\n zIndex: 1,\n }\n }\n}, { name: 'RaMarkdownInput' })\n\nMarkdownInput.defaultProps = {\n fullWidth: true,\n};\n\n\nexport default MarkdownInput","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport CircularProgress from '@material-ui/core/CircularProgress';\nimport { useTranslate } from 'ra-core';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n marginTop: '3em',\n marginBottom: '3em',\n },\n message: {\n textAlign: 'center',\n fontFamily: 'Roboto, sans-serif',\n opacity: 0.5,\n margin: '0 1em',\n },\n}), { name: 'RaLoading' });\n\nconst Loading = props => {\n const {\n className,\n textPrimary,\n textSecondary,\n } = props;\n const classes = useStyles(props);\n const translate = useTranslate();\n return (\n <div className={classnames(classes.container, className)}>\n <div className={classes.message}>\n <CircularProgress color=\"primary\" />\n <h1>{translate(textPrimary)}</h1>\n <div>{translate(textSecondary)}.</div>\n </div>\n </div>\n );\n};\n\nLoading.propTypes = {\n classes: PropTypes.object,\n className: PropTypes.string,\n textPrimary: PropTypes.string,\n textSecondary: PropTypes.string,\n};\n\nLoading.defaultProps = {\n textPrimary: 'ra.page.loading',\n textSecondary: 'ra.message.loading',\n};\n\nexport default Loading;\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props} >\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M6 2h12v2h-4v2.25A8.02 8.02 0 0 1 18.93 10H22v8h-3.07a8 8 0 0 1-13.86 0H2v-8h3.07A8.02 8.02 0 0 1 10 6.25V4H6V2Z\" fillOpacity=\".3\" />\n <path fillRule=\"evenodd\" clipRule=\"evenodd\" d=\"M18 2H6v2h4v2.25A8.02 8.02 0 0 0 5.07 10H2v3h5.1a5 5 0 0 1 9.8 0H22v-3h-3.07A8.02 8.02 0 0 0 14 6.25V4h4V2ZM7.1 15a5 5 0 0 0 9.8 0H22v3h-3.07a8 8 0 0 1-13.86 0H2v-3h5.1Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","\nimport { makeStyles } from '@material-ui/core/styles';\n\nconst useListStyles = makeStyles(theme => ({\n row: { height: 40 },\n disableSticky: {\n position: \"unset\",\n },\n cellMinWidth: {\n width: 1,\n whiteSpace: \"nowrap\",\n },\n cellAction: {\n paddingTop: 0,\n paddingBottom: 0,\n },\n noWrap: { whiteSpace: \"nowrap\" },\n cellButton: {\n width: 24,\n padding: \"0 16px 0 12px\"\n },\n cellBreakWord: {\n maxWidth: 0,\n wordWrap: \"break-word\",\n },\n cellOverflowEllipsis: {\n maxWidth: 0,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n\n },\n celllLineClamp: {\n maxWidth: 256,\n wordWrap: \"break-word\",\n \"&>*\": {\n overflow: \"hidden\",\n display: \"-webkit-box\",\n \"-webkit-box-orient\": \"vertical\",\n \"-webkit-line-clamp\": 3,\n }\n\n }\n}));\n\nexport default useListStyles","import gql from 'graphql-tag'\nimport graphqlClient from './graphqlClient';\n\n\n\nconst REFRESH_TOKEN = gql`\n mutation refreshToken($refreshToken: String!) {\n data: refresh(refreshToken: $refreshToken) { \n token,\n refreshToken,\n application {\n id\n name\n description\n }\n profile {\n id\n name\n description\n role {\n id\n }\n }\n }\n }\n`;\n\nexport default (args) => {\n return graphqlClient.request(REFRESH_TOKEN, args).then(response => response?.data);\n};","import decodeJwt from 'jwt-decode';\nimport { AUTHORIZATION_TOKEN_COOKIE, AUTHORIZATION_REFRESH_TOKEN_COOKIE, DOMAIN_COOKIE } from '../../appsettings';\nimport { getCookie, setCookie, deleteCookie } from '../../utils';\nimport refreshTokenMutation from './refreshToken';\n\nconst checkToken = async () => {\n let authorizationTokenCookie = getCookie(AUTHORIZATION_TOKEN_COOKIE);\n let authorizationRefreshTokenCookie = getCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE);\n\n if(!authorizationTokenCookie && !authorizationRefreshTokenCookie) {\n console.error(`no tokens in cookies`);\n /*const currentLocation = window.location.hash;\n if(currentLocation != \"#/login\") {\n window.location.href = '#/login'; \n }*/\n throw new Error('ra.auth.existed');\n } \n\n if(tokenExpired(authorizationTokenCookie)) {\n if(!tokenExpired(authorizationRefreshTokenCookie)) {\n try {\n const { token, refreshToken } = await refreshTokenMutation({ refreshToken: authorizationRefreshTokenCookie }); \n setCookie(AUTHORIZATION_TOKEN_COOKIE, token, { domain: DOMAIN_COOKIE });\n setCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE, refreshToken, { domain: DOMAIN_COOKIE });\n return token;\n } catch (error) {\n deleteCookie(AUTHORIZATION_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n deleteCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n throw new Error(`${error.message.replace('Error: ', '').replace('GraphQL error: ', '')}`)\n } \n } else {\n console.error(`authorization RefreshToken is Expired!!!`); \n throw new Error('ra.auth.expired'); \n }\n } else {\n return authorizationTokenCookie;\n }\n};\n\n/*\nconst checkToken = () => {\n const authorizationTokenCookie = getCookie(AUTHORIZATION_TOKEN_COOKIE);\n const authorizationRefreshTokenCookie = getCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE);\n\n if (tokenExpired(authorizationTokenCookie)) {\n if (!tokenExpired(authorizationRefreshTokenCookie)) {\n return refreshTokenMutation({ refreshToken: authorizationRefreshTokenCookie })\n .then(({ token, refreshToken }) => {\n setCookie(AUTHORIZATION_TOKEN_COOKIE, token, { domain: DOMAIN_COOKIE });\n setCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE, refreshToken, { domain: DOMAIN_COOKIE });\n return token\n })\n .catch(error => {\n deleteCookie(AUTHORIZATION_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n deleteCookie(AUTHORIZATION_REFRESH_TOKEN_COOKIE, { domain: DOMAIN_COOKIE });\n throw new Error(`${error.message.replace('Error: ', '').replace('GraphQL error: ', '')}`)\n })\n } else {\n return Promise.reject(new Error(`Error`))\n }\n } else {\n return Promise.resolve(authorizationTokenCookie)\n }\n};\n*/\n\nexport const getCurrentTokenExpiresIn = () => {\n const token = getCookie(AUTHORIZATION_TOKEN_COOKIE);\n const current_time = Date.now() / 1000;\n const decodedToken = decodeJwt(token);\n const expiresIn = decodedToken.exp - current_time;\n return expiresIn * 1000;\n}\n\nexport const tokenExpired = (token) => {\n if (token) {\n const decodedToken = decodeJwt(token);\n const current_time = Date.now() / 1000;\n const result = (decodedToken.exp - 20) < current_time;\n return result;\n } else {\n return true;\n }\n};\n\nexport default checkToken","import { useEffect, useRef } from 'react'\nimport useIsomorphicLayoutEffect from './useIsomorphicLayoutEffect'\n\n\nconst useEventListener = (eventName, handler, element) => {\n const savedHandler = useRef(handler)\n\n useIsomorphicLayoutEffect(() => {\n savedHandler.current = handler\n }, [handler])\n\n useEffect(() => {\n const targetElement = element?.current || window\n if (!(targetElement && targetElement.addEventListener)) {\n return\n }\n\n const eventListener = event => savedHandler.current(event)\n targetElement.addEventListener(eventName, eventListener)\n\n return () => {\n targetElement.removeEventListener(eventName, eventListener)\n }\n }, [eventName, element])\n}\n\nexport default useEventListener\n","import React from 'react';\nimport FileIcon from '../../lib/file/FileIcon';\n\n\nconst FileIconField = ({ record, ...props }) => {\n return (\n <span style={{ display: \"flex\" }}>\n <FileIcon record={record} />\n </span>\n );\n};\n\n\nexport default FileIconField;","\nimport get from 'lodash/get';\nimport { makeStyles } from '@material-ui/core/styles'\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button'\nimport { useRecordContext } from 'react-admin'\nimport { getUrlWithToken } from '../../lib/file/utils';\n\nimport { parse, stringify } from 'query-string';\nimport React, { forwardRef, useCallback, useEffect } from 'react';\nimport Link from '@material-ui/core/Link';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { useTranslate } from 'react-admin';\nimport { URI_STIMULSOFT_REPORTS } from '../../appsettings';\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n}), { name: 'FileMediaPreviewNotFound' });\n\n\nconst LinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} underline=\"none\" {...props} />);\n\nconst FileMediaReportPreview = forwardRef((props, ref) => {\n\n const {\n record,\n label = \"Открыть\",\n target = \"_blank\",\n queryOptions = {},\n hasAutoLink,\n ...rest\n } = props\n const classes = useStyles();\n\n \n const queryParams = stringify(queryOptions)\n const path = get(record, \"path\", '');\n // /get/Reports/cl8031xae000527r52tz3ff7l/Report0008.mrt\n //const idFile = path.split('/').reverse()[1];\n \n const fileName = path.split('/').reverse()[0];\n \n //const href = `${URI_STIMULSOFT_REPORTS}${path}${queryParams ? `?${queryParams}` : \"\"}`\n // /view/cl7q1udht001g1vr5hvz25fev\n\n console.log(`>>>>> ${hasAutoLink}`);\n\n const href = fileName && `${URI_STIMULSOFT_REPORTS}/view/${fileName}${queryParams ? `?${queryParams}` : \"\"}`;\n\n useEffect(() => { \n if(href && hasAutoLink === true) {\n window.open(href, target);\n } \n }, [hasAutoLink]);\n\n if (!record) return null;\n \n return (\n <div className={classes.root}>\n <Typography gutterBottom>Предварительный просмотр доступен через средство просмотра отчетов Stimulsoft</Typography>\n <Button variant=\"contained\"\n component={LinkRef}\n ref={ref}\n href={href}\n target={target}\n color=\"primary\"\n \n // onClick={openHandler}\n >\n {label}\n </Button>\n </div>\n )\n\n\n});\n\n\nexport default FileMediaReportPreview;\n","import get from 'lodash/get';\nimport { makeStyles } from '@material-ui/core/styles'\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button'\nimport { useRecordContext } from 'react-admin'\nimport { getUrlWithToken } from '../../lib/file/utils';\n\nimport { parse, stringify } from 'query-string';\nimport React, { forwardRef, useCallback, useEffect } from 'react';\nimport Link from '@material-ui/core/Link';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { useTranslate } from 'react-admin';\nimport { URI_SCADAJS } from '../../appsettings';\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n}), { name: 'FileMediaPreviewNotFound' });\n\n\nconst LinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} underline=\"none\" {...props} />);\n\nconst FileMediaReportPreview = forwardRef((props, ref) => {\n\n const {\n record,\n label = \"Открыть\",\n target = \"_blank\",\n queryOptions = {},\n hasAutoLink,\n ...rest\n } = props\n const classes = useStyles();\n\n const queryParams = stringify(queryOptions)\n const path = get(record, \"path\");\n //const idFile = get(record, \"id\");\n const fileName = path.split('/').reverse()[0];\n\n //const href = `${URI_SCADAJS}${path}${queryParams ? `?${queryParams}` : \"\"}`\n const href = fileName && `${URI_SCADAJS}/view/${fileName}${queryParams ? `?${queryParams}` : \"\"}`;\n\n useEffect(() => { \n if(href && hasAutoLink === true) {\n window.open(href, target);\n } \n }, [hasAutoLink]);\n\n if (!record) return null;\n\n return (\n <div className={classes.root}>\n <Typography gutterBottom>Предварительный просмотр доступен через средство просмотра ScadaJS</Typography>\n <Button variant=\"contained\"\n component={LinkRef}\n ref={ref}\n href={href}\n target={target}\n color=\"primary\"\n // onClick={openHandler}\n >\n {label}\n </Button>\n </div>\n )\n\n\n});\n\n\nexport default FileMediaReportPreview;","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport { makeStyles } from '@material-ui/core/styles'\nimport Typography from '@material-ui/core/Typography';\nimport Button from '@material-ui/core/Button'\nimport { getUrlWithToken } from '../../lib/file/utils';\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n}), { name: 'FileMediaPreviewNotFound' });\n\n\n\n// switch (ext) {\n// case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n// case 'doc':\n// case 'docm':\n// case 'docx':\n// return (<WordIcon style={{ color: \"#366DBC\" }} />)\n// break;\n\n// case 'application/pdf':\n// case 'pdf':\n// return (<PdfIcon style={{ color: \"#E21E00\" }} />)\n// break;\n\n// case 'text/plain':\n// case 'text':\n// case 'txt':\n// return (<TextIcon style={{ color: \"#576D7E\" }} />)\n// break;\n\n// case \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\":\n// case 'xls':\n// case 'xlsb':\n// case 'xlsm':\n// case 'xlsx':\n// return (<ExcelIcon style={{ color: \"#1D7E44\" }} />)\n// break;\n\n// case '7z':\n// case 'rar':\n// case 'zip':\n// case 'zipx':\n// return (<ZipIcon style={{ color: \"#FDCC77\" }} />)\n// break;\n\n\n// case 'image/jpeg':\n// case 'jpg':\n// case 'svg':\n// case 'image/png':\n// return (<ImageIcon style={{ color: \"#EB5757\" }} />)\n// break;\n\n// default:\n// return (<TextIcon />)\n// break;\n\n// }\n\n\nexport const FileMediaPreviewNotFound = ({ record, label = \"Скачать\", ...props }) => {\n const classes = useStyles();\n if (!record) return null;\n const path = get(record, \"path\");\n const src = getUrlWithToken(path)\n\n const openHandler = async (e) => {\n e.stopPropagation();\n window.open(src, '_blank')\n };\n\n\n return (\n <div className={classes.root}>\n <Typography gutterBottom>Предварительный просмотр недоступен</Typography>\n <Button variant=\"contained\"\n color=\"primary\"\n onClick={openHandler}\n >\n {label}\n </Button>\n </div>\n )\n\n\n};\n\n\nexport default FileMediaPreviewNotFound;\n","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport { makeStyles } from '@material-ui/core/styles'\nimport { TransformWrapper, TransformComponent } from \"react-zoom-pan-pinch\";\nimport CardMedia from '@material-ui/core/CardMedia'\nimport FileMediaReportPreview from './FileMediaReportPreview';\nimport FileMediaScadaPreview from './FileMediaScadaPreview';\nimport FileMediaPreviewNotFound from './FileMediaPreviewNotFound';\nimport { getUrlWithToken, typeMap } from '../../lib/file/utils';\n\n\n\n\nconst useStyles = makeStyles(theme => ({\n mediaImage: {\n objectFit: \"contain\"\n },\n mediaAudio: {\n width: 300\n },\n}), { name: 'MapField' });\n\n\nexport const FileMediaPreview = ({ className, classes: classesOverride, emptyText, source, record, queryOptions, hasAutoLink, ...props }) => {\n const classes = useStyles();\n if (!record) return null;\n const path = get(record, \"path\");\n const type = get(record, \"type\");\n const image = getUrlWithToken(path)\n\n\n return typeMap.image.includes(type)\n ? (\n <TransformWrapper>\n <TransformComponent>\n <CardMedia\n component=\"img\"\n className={classes.mediaImage}\n image={image}\n width=\"100%\"\n height=\"100%\"\n title={record.name}\n\n />\n </TransformComponent>\n </TransformWrapper>\n )\n : typeMap.video.includes(type)\n ? (<CardMedia\n component='video'\n className={classes.mediaImage}\n image={image}\n width=\"100%\"\n height=\"100%\"\n title={record.name}\n\n controls\n />)\n : typeMap.audio.includes(type)\n ? (<CardMedia\n component=\"audio\"\n className={classes.mediaAudio}\n image={image}\n width=\"100%\"\n height=\"100%\"\n title={record.name}\n controls\n />)\n : typeMap.report.includes(type)\n ? (<FileMediaReportPreview record={record} queryOptions={queryOptions} hasAutoLink={hasAutoLink} />)\n : typeMap.scada.includes(type)\n ? (<FileMediaScadaPreview record={record} queryOptions={queryOptions} hasAutoLink={hasAutoLink} />)\n : (<FileMediaPreviewNotFound record={record} />)\n\n\n};\n\n\nexport default FileMediaPreview;\n","import React from \"react\";\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { TextField, DateField } from 'react-admin';\nimport SimpleShowLayout from '../../lib/show/SimpleShowLayout';\nimport TextCopyField from '../../lib/field/TextCopyField';\nimport FilePathField from '../../lib/field/FilePathField';\nimport FileIcon from '../../lib/file/FileIcon';\nimport FileSizeField from '../../lib/field/FileSizeField';\nimport FileResourcesReferenceArrayField from './FileResourcesReferenceArrayField';\nimport FileMediaPreview from './FileMediaPreview';\nimport FilePreviewTitlePortal from '../../lib/file/FilePreviewTitlePortal';\nimport { dateTimeOptions } from '../../utils';\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n\n },\n content: {\n display: \"flex\",\n gap: 16\n },\n mediaContent: {\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n flexGrow: 1,\n height: 'calc(100vh - 48px - 32px - 32px)',\n backgroundColor: theme.palette.common.black\n },\n details: {\n maxWidth: 400\n },\n title: {\n display: \"flex\",\n alignItems: \"center\",\n },\n titleIcon: {\n display: \"flex\",\n marginRight: 16\n },\n}));\n\nconst FileAside = (props) => {\n const classes = useStyles();\n const { record, queryOptions, hasAutoLink } = props;\n \n if (!record) return null;\n return (\n <div className={classes.root}>\n <FilePreviewTitlePortal>\n <Typography variant=\"h6\" className={classes.title}><FileIcon record={record} className={classes.titleIcon} />{record.name}</Typography>\n </FilePreviewTitlePortal>\n <div className={classes.content}>\n <div className={classes.mediaContent}>\n <FileMediaPreview record={record} queryOptions={queryOptions} hasAutoLink={hasAutoLink} />\n </div>\n <div className={classes.details}>\n <SimpleShowLayout\n {...props}\n component=\"div\"\n >\n <TextField source=\"name\" />\n <TextField source=\"description\" />\n <FileSizeField source=\"size\" />\n <TextField source=\"type\" />\n <FilePathField source=\"path\" label=\"resources.File.fields.url\" replaceValue=\"ra.input.url.text\" />\n <FilePathField source=\"pathThumbnail\" label=\"resources.File.fields.urlThumbnail\" replaceValue=\"ra.input.url.text\" />\n <DateField source=\"createdAt\" options={dateTimeOptions} />\n <DateField source=\"updatedAt\" options={dateTimeOptions} />\n <TextCopyField source=\"id\" />\n <FileResourcesReferenceArrayField source=\"resourcesIds\" />\n </SimpleShowLayout>\n </div>\n </div>\n </div>\n )\n}\n\nexport default FileAside;","import React from 'react';\nimport Skeleton from '@material-ui/lab/Skeleton';\n\nconst TilegridSkeleton = () => {\n return (\n <Skeleton variant=\"rect\" height={192} />\n );\n}\n\nexport default TilegridSkeleton","import React, { cloneElement, Children, useCallback } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport { useListContext, useRecordContext, linkToRecord } from 'react-admin';\n\n\n\nconst TilegridTile = ({ children, rowClick, ...props }) => {\n const history = useHistory();\n const { resource, basePath } = useListContext();\n const record = useRecordContext();\n const handleClick = useCallback(\n async event => {\n if (!rowClick) return;\n event.persist();\n\n const effect =\n typeof rowClick === 'function'\n ? await rowClick(record.id, basePath || `/${resource}`, record)\n : rowClick;\n switch (effect) {\n case 'edit':\n history.push(linkToRecord(basePath || `/${resource}`, record.id));\n return;\n case 'show':\n history.push(\n linkToRecord(basePath || `/${resource}`, record.id, 'show')\n );\n return;\n default:\n if (effect) history.push(effect);\n return;\n }\n },\n [\n basePath,\n history,\n record,\n resource,\n rowClick,\n ]\n );\n\n if (!record) return null;\n\n return cloneElement(Children.only(children), { ...props, onClick: handleClick })\n};\n\n\n\nexport default TilegridTile;","import React, { cloneElement, Children } from 'react';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useListContext, RecordContextProvider } from 'react-admin';\nimport TilegridSkeleton from './TilegridSkeleton';\nimport TilegridTile from './TilegridTile';\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: \"grid\",\n gap: theme.spacing(2),\n gridTemplateColumns: \"repeat(auto-fill, minmax(192px, 1fr))\",\n }\n}), { name: 'Tilegrid' });\n\nconst times = (count, fn) => Array.from({ length: count }, (_, key) => fn(key));\n\nconst LoadingGrid = ({ className, ...props }) => {\n const classes = useStyles();\n const { perPage } = useListContext();\n return (\n <div className={classnames(classes.root, className)}>\n {times(perPage, key => (\n <TilegridSkeleton key={key} />\n ))}\n </div>\n );\n};\n\nconst LoadedGrid = ({ className, ...props }) => {\n const classes = useStyles();\n const { ids, data } = useListContext();\n if (!ids || !data) return null;\n\n return (\n <div className={classnames(classes.root, className)}>\n {ids.map(id => (\n <RecordContextProvider value={data[id]} key={id}>\n <TilegridTile {...props} />\n </RecordContextProvider>\n ))}\n </div>\n );\n};\n\n\nconst Tilegrid = (props) => {\n const { loaded } = useListContext();\n return loaded ? (\n <LoadedGrid {...props} />\n ) : (\n <LoadingGrid {...props} />\n );\n};\n\nexport default Tilegrid;","import React, { Fragment } from 'react';\nimport AppBar from '@material-ui/core/AppBar';\nimport Toolbar from '@material-ui/core/Toolbar';\nimport useMediaQuery from '@material-ui/core/useMediaQuery';\nimport { makeStyles } from '@material-ui/core/styles';\nimport classnames from 'classnames';\nimport IconButton from '@material-ui/core/IconButton';\nimport ArrowBackIcon from '@material-ui/icons/ArrowBack';\nimport GetAppIcon from '@material-ui/icons/GetApp';\nimport Slide from '@material-ui/core/Slide';\nimport useScrollTrigger from '@material-ui/core/useScrollTrigger';\nimport { useShowContext } from 'react-admin';\n//import { getUrlWithToken } from './utils';\n\nimport { getCookie } from '../../utils';\n\nimport { \n AUTHORIZATION_TOKEN_COOKIE, \n URI_BLOB_DOWNLOAD \n} from '../../appsettings';\n\nconst useStyles = makeStyles(theme => ({\n appBar: {\n backgroundColor: 'rgba(0, 0, 0, 0.80)',\n },\n closeButton: {\n marginRight: theme.spacing(2)\n },\n title: {\n flex: 1,\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n color: \"inherit\"\n },\n}),\n { name: 'FilePreviewAppbar' }\n);\n\n\n//Токен передавать обязательно, credentials: 'include' работать не будет!!! \nconst getUrlWithToken = (path) => {\n const token = getCookie(AUTHORIZATION_TOKEN_COOKIE)\n return `${URI_BLOB_DOWNLOAD}${path}?token=${token}`;\n};\n\n//Загрузчик файла\nconst load = (url) => new Promise((resolve) => { \n var f = new XMLHttpRequest();\n f.open(\"GET\", url, true);\n f.responseType = 'blob'; \n //f.withCredentials = true; //Не работает\n f.onreadystatechange = function ()\n {\n if(f.readyState === 4)\n {\n if(f.status === 200 || f.status == 0)\n {\n var res = this.response;\n resolve(res);\n }\n }\n }\n \n f.send(null);\n});\n\nconst FilePreviewAppbar = (props) => {\n const {\n className,\n containerRef,\n onClose,\n } = props;\n const classes = useStyles();\n const isXSmall = useMediaQuery(theme =>\n theme.breakpoints.down('xs')\n );\n \n const { record } = useShowContext()\n \n //const src = getUrlWithToken(record?.path)\n\n // const openHandler = (event) => {\n // event.stopPropagation();\n // const url = getUrlWithToken(record?.path)\n // window.open(src, '_blank')\n // };\n\n \n // const handleDownload = (event) => {\n // event.stopPropagation()\n // const url = getUrlWithToken(record?.path)\n // const fileName = \"\" /*url.substring(url.lastIndexOf('/') + 1)*/\n\n // // const link = document.createElement(\"a\")\n // // link.href = url\n // // link.setAttribute('download', fileName);\n // // link.click();\n // // link.remove();\n\n // fetch(url, {\n // method: 'GET',\n // credentials: 'include',\n // })\n // .then(response => response.blob())\n // .then(blob => {\n // const link = document.createElement(\"a\")\n // link.href = URL.createObjectURL(blob)\n // link.download = fileName\n // link.click();\n // link.remove();\n // })\n // .catch(console.error);\n // };\n\n const handleDownload = (event) => {\n event.stopPropagation();\n\n if(!record) return;\n \n const url = getUrlWithToken(record.path);\n\n load(url).then(blob => {\n const link = document.createElement(\"a\")\n link.href = URL.createObjectURL(blob)\n link.download = record.name;\n link.click();\n link.remove();\n }); \n }\n\n return (\n <Fragment>\n <HideOnScroll target={containerRef.current}>\n <AppBar className={classnames(className, classes.appBar)}>\n <Toolbar variant={isXSmall ? 'regular' : 'dense'}>\n <IconButton edge=\"start\" color=\"inherit\" className={classes.closeButton} onClick={onClose}>\n <ArrowBackIcon />\n </IconButton>\n <div className={classes.title} id=\"file-preview-title\" />\n <IconButton edge=\"end\" color=\"inherit\" onClick={handleDownload}>\n <GetAppIcon />\n </IconButton>\n </Toolbar>\n </AppBar>\n </HideOnScroll>\n <Toolbar variant={isXSmall ? 'regular' : 'dense'} />\n </Fragment>\n );\n};\n\nconst HideOnScroll = (props) => {\n const { children, target } = props;\n const trigger = useScrollTrigger({ target: target ? target : undefined });\n\n return (\n <Slide appear={false} direction=\"down\" in={!trigger}>\n {children}\n </Slide>\n );\n}\n\n\n\nexport default FilePreviewAppbar;","import React, { useRef, cloneElement, Children } from 'react';\nimport classnames from 'classnames';\nimport { createTheme, ThemeProvider, makeStyles, duration } from '@material-ui/core/styles';\nimport Fade from '@material-ui/core/Fade';\nimport Modal from '@material-ui/core/Modal';\nimport Backdrop from '@material-ui/core/Backdrop';\nimport FilePreviewAppbar from './FilePreviewAppbar';\nimport IconButton from '@material-ui/core/IconButton';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport ChevronRightIcon from '@material-ui/icons/ChevronRight';\nimport { useShowController, ShowContextProvider } from 'react-admin';\n\n\nconst theme = createTheme({\n palette: {\n type: 'dark',\n },\n});\n\nconst useStyles = makeStyles(theme => ({\n root: {\n color: theme.palette.getContrastText(\n theme.palette.background.default\n ),\n '@media print': {\n // Use !important to override the Modal inline-style.\n position: 'absolute !important',\n },\n },\n container: {\n height: '100%',\n display: \"flex\",\n flexDirection: \"column\",\n '@media print': {\n height: 'auto',\n },\n // We disable the focus ring for mouse, touch and keyboard users.\n outline: 0,\n overflowY: 'auto',\n overflowX: 'hidden',\n\n '&:after': {\n content: '\"\"',\n display: 'inline-block',\n verticalAlign: 'middle',\n height: '100%',\n width: '0',\n },\n },\n content: {\n flexGrow: 1,\n marginTop: 32,\n marginBottom: 32,\n marginLeft: 56,\n marginRight: 56,\n },\n appBar: {},\n backdrop: {\n backgroundColor: 'rgba(0, 0, 0, 0.80)',\n },\n previousIcon: {\n margin: 16,\n position: \"absolute\",\n left: 0,\n top: \" 50vh\",\n },\n nextIcon: {\n margin: 16,\n position: \"absolute\",\n right: 0,\n top: \" 50vh\",\n }\n\n}), { name: 'FilePreview' });\n\nconst transitionDuration = { enter: duration.enteringScreen, exit: duration.leavingScreen };\n\nconst FilePreview = (props) => {\n const {\n children,\n className,\n open,\n TransitionProps,\n resource,\n basePath,\n id,\n onClose,\n onNext,\n onPrevious,\n hasAutoLink,\n ...other\n } = props;\n\n\n\n const classes = useStyles();\n const controllerProps = useShowController({ resource, basePath, id });\n const containerRef = useRef(null)\n const mouseDownTarget = useRef();\n\n const handleMouseDown = (event) => {\n mouseDownTarget.current = event.target;\n };\n\n const handleBackdropClick = (event) => {\n if (event.target !== event.currentTarget) {\n return;\n }\n\n if (event.target !== mouseDownTarget.current) {\n return;\n }\n\n mouseDownTarget.current = null;\n\n if (onClose) {\n onClose(event, 'backdropClick');\n }\n };\n\n\n return (\n <ShowContextProvider value={controllerProps}>\n <Modal\n className={classnames(classes.root, className)}\n BackdropComponent={Backdrop}\n BackdropProps={{\n transitionDuration: transitionDuration,\n classes: { root: classes.backdrop },\n }}\n closeAfterTransition\n onClose={onClose}\n open={open}\n {...other}\n >\n <Fade\n appear\n in={open}\n timeout={transitionDuration}\n {...TransitionProps}\n >\n <div\n ref={containerRef}\n className={classnames(classes.container)}\n onMouseUp={handleBackdropClick}\n onMouseDown={handleMouseDown}\n >\n <FilePreviewAppbar containerRef={containerRef} onClose={onClose} />\n <div className={classnames('file-preview-content', classes.content)}>\n {cloneElement(Children.only(children), {\n ...controllerProps,\n hasAutoLink\n })}\n </div>\n {/* <FilePreviewToolbar /> */}\n {Boolean(onPrevious) && (\n <IconButton color=\"inherit\" className={classes.previousIcon} onClick={onPrevious}>\n <ChevronLeftIcon />\n </IconButton>)}\n {Boolean(onNext) && (\n <IconButton color=\"inherit\" className={classes.nextIcon} onClick={onNext}>\n <ChevronRightIcon />\n </IconButton>\n )}\n </div>\n </Fade>\n </Modal>\n </ShowContextProvider>\n );\n};\n\nconst FilePreviewWithTheme = (props) => {\n\n return (\n <ThemeProvider theme={theme}>\n <FilePreview {...props} />\n </ThemeProvider>\n );\n};\n\n\nexport default FilePreviewWithTheme;","import React, { useState, useCallback, useEffect } from \"react\";\nimport { useRouteMatch, useHistory } from 'react-router-dom';\nimport { useListContext } from \"react-admin\";\nimport FilePreview from \"../../lib/file/FilePreview\";\n\n\n\nexport const FilePreviewSyncLocation = (props) => {\n const { children, previewId: initialId, onClose } = props\n const { resource, basePath, data, ids } = useListContext()\n const [previewId, setPreviewId] = useState(initialId)\n const [hasAutoLink, setHasAutoLink] = useState(false);\n\n useEffect(() => { \n setPreviewId(initialId);\n setHasAutoLink(true); \n }, [initialId])\n\n const handleNext = useCallback(() => {\n const index = ids.indexOf(previewId);\n const nextIndex = (index === -1 ? 0 : index === ids.length - 1) ? 0 : index + 1\n const nextId = ids[nextIndex]\n\n setPreviewId(nextId);\n setHasAutoLink(false);\n }, [setPreviewId, ids, previewId]);\n\n const handlePrevious = useCallback(() => {\n const index = ids.indexOf(previewId);\n const prevIndex = (index === -1 ? 0 : index === 0) ? ids.length - 1 : index - 1\n const prevId = ids[prevIndex]\n\n setPreviewId(prevId);\n setHasAutoLink(false);\n }, [setPreviewId, ids, previewId]);\n\n\n if (!previewId) return null\n\n return (\n <FilePreview\n children={children}\n id={previewId}\n resource={resource}\n basePath={basePath}\n open={Boolean(previewId)}\n onClose={onClose}\n onNext={handleNext}\n onPrevious={handlePrevious}\n hasAutoLink={hasAutoLink}\n />\n )\n\n};\n\n\nexport default FilePreviewSyncLocation;\n","import React from 'react';\nimport get from 'lodash/get';\nimport CardMedia from '@material-ui/core/CardMedia';\nimport { useRecordContext } from 'react-admin';\nimport FileIcon from '../../lib/file/FileIcon';\nimport { typeMap, getUrlWithToken } from '../../lib/file/utils';\n\n\n\nconst FileCardMedia = (props) => {\n const {\n className,\n title: titleField,\n path: pathField,\n pathThumbnail: pathThumbnailField,\n type: typeField,\n } = props\n const record = useRecordContext(props)\n const title = get(record, titleField, titleField)\n const path = get(record, pathField)\n const pathThumbnail = get(record, pathThumbnailField, path)\n const resultPath = pathThumbnail || path\n const type = get(record, typeField)\n\n if (typeMap.image.includes(type)) return (\n <CardMedia\n component=\"img\"\n className={className}\n image={getUrlWithToken(resultPath)}\n title={title}\n />\n )\n return (\n <CardMedia\n className={className}\n title={title}\n >\n <FileIcon record={record} fontSize=\"inherit\" />\n </CardMedia>\n )\n\n};\n\n\nexport default FileCardMedia;","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport Card from '@material-ui/core/Card';\nimport CardActionArea from '@material-ui/core/CardActionArea';\nimport CardActions from '@material-ui/core/CardActions';\nimport Typography from '@material-ui/core/Typography';\nimport FileCardMedia from './FileCardMedia';\nimport FileIcon from '../../lib/file/FileIcon';\nimport { useRecordContext } from 'react-admin';\nimport FileMoreActionsButton from './FileMoreActionsButton';\n\n\n\nconst useStyles = makeStyles(theme => ({\n // root: {\n // maxWidth: theme.spacing(32),\n // margin: \".125rem\",\n // background: \"rgba(0, 0, 0, 0.04)\",\n // },\n\n card: {\n // maxWidth: 345,\n },\n clicable: {\n cursor: 'pointer',\n },\n media: {\n height: 140,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: 56,\n\n },\n title: {\n marginRight: \"auto\",\n },\n action: {\n marginTop: -3,\n marginBottom: -3,\n },\n}));\n\nconst stopPropagation = e => e.stopPropagation();\n\n\nconst FileCard = (props) => {\n const {\n className,\n classes: classesOverride,\n resource,\n title: titleField,\n onClick,\n basePath,\n variant = \"elevation\"\n } = props\n const classes = useStyles({ classes: classesOverride });\n const record = useRecordContext()\n if (!record) return null;\n\n const title = get(record, titleField, titleField)\n\n\n return (\n <Card className={classnames(classes.card)} variant={variant}>\n <CardActionArea onClick={onClick}>\n <FileCardMedia className={classes.media} {...props} />\n </CardActionArea>\n <CardActions>\n <FileIcon record={record} />\n <Typography variant=\"caption\" noWrap className={classes.title}>{title}</Typography>\n <FileMoreActionsButton record={record} resource={resource} basePath={basePath} />\n </CardActions>\n </Card>\n );\n};\n\nFileCard.defaultProps = {\n resource: \"File\",\n linkType: \"show\",\n};\n\nexport default FileCard;","import React, { memo } from 'react';\nimport clsx from 'clsx';\nimport { makeStyles } from '@material-ui/core/styles';\nimport useTreeContext from './controllers/useTreeContext';\nimport TreeItem from '@material-ui/lab/TreeItem';\nimport DefaultTreeNodeExpandIcon from './TreeNodeExpandIcon';\nimport DefaultTreeNodeLabel from './TreeNodeLabel';\n\n\nconst historyRegex = /H/i;\n\nconst useStyles = makeStyles({\n iconContainer: {\n width: 24,\n height: 24,\n marginRight: 0,\n alignItems: \"center\",\n },\n disabled: {\n pointerEvents: 'none', // Disable link interactions\n cursor: 'default',\n opacity: 0.5,\n }\n});\n\nconst TreeNode = memo(({\n nodeId,\n treeNodeExpandIcon: TreeNodeExpandIcon,\n treeNodeLabel: TreeNodeLabel,\n ...props\n}) => {\n const classes = useStyles();\n const { getNode } = useTreeContext();\n const node = getNode(nodeId)\n if (!node) return null\n\n const isNotHistorizable = node?.parameter?.accessLevel && !historyRegex.test(node?.parameter?.accessLevel)\n\n return (\n <TreeItem\n nodeId={node.id}\n label={<TreeNodeLabel node={node} />}\n icon={<TreeNodeExpandIcon node={node} />}\n className={clsx({\n [classes.disabled]: isNotHistorizable\n })}\n classes={{ iconContainer: classes.iconContainer }}\n >\n {Array.isArray(node.childNodes) ? node.childNodes.map((childNode) => (<TreeNode nodeId={childNode.id} key={childNode.id} />)) : null}\n </TreeItem>\n )\n});\n\nTreeNode.defaultProps = {\n treeNodeExpandIcon: DefaultTreeNodeExpandIcon,\n treeNodeLabel: DefaultTreeNodeLabel\n}\n\n\nexport default TreeNode","import React from 'react';\nimport PropTypes from 'prop-types';\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport { Link } from 'react-router-dom';\nimport { useTranslate } from 'ra-core';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport Typography from '@material-ui/core/Typography';\nimport { stringify } from 'query-string';\n\n\n\nconst LinkRef = React.forwardRef((props, ref) => <Link innerRef={ref} {...props} />);\n\nconst PlayButtonAsMenuItem = React.forwardRef(({\n basePath = '',\n label = 'ra.action.play',\n icon = defaultIcon,\n record,\n target = \"_self\",\n ...rest\n}, ref) => {\n const translate = useTranslate();\n const defaultDashboard = record?.defaultDashboard\n\n if (!defaultDashboard) return null\n\n return (\n <MenuItem\n component={LinkRef}\n to={{\n pathname: `/Dashboard/${defaultDashboard.id}/play`,\n search: `?${stringify({\n variables: JSON.stringify({ assetId: record.id }),\n })}`,\n }}\n target={target}\n ref={ref}\n onClick={stopPropagation}\n {...rest}\n >\n <ListItemIcon>\n {React.cloneElement(icon, {\n fontSize: \"small\"\n })}\n </ListItemIcon>\n <Typography variant=\"inherit\">{translate(label)}</Typography>\n </MenuItem>\n )\n});\n\nconst defaultIcon = <PlayArrowIcon />;\n\nconst stopPropagation = e => e.stopPropagation();\n\nPlayButtonAsMenuItem.propTypes = {\n basePath: PropTypes.string,\n icon: PropTypes.element,\n label: PropTypes.string,\n record: PropTypes.any,\n};\n\nexport default PlayButtonAsMenuItem;\n","import React, { useMemo } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport AddCircleOutlineIcon from '@material-ui/icons/AddCircleOutline';\nimport useTreeContext from './controllers/useTreeContext';\nimport Typography from '@material-ui/core/Typography';\nimport { Link } from 'react-router-dom';\nimport { useTranslate, useResourceContext } from 'ra-core';\n\nconst CreateMenuItem = ({\n onClose,\n record,\n ...props\n}) => {\n const classes = useStyles();\n const { view,\n resource,\n basePath,\n } = useTreeContext();\n const handleClick = () => onClose();\n\n const location = useMemo(\n () => ({\n pathname: `/${resource}/create`,\n state: { parentId: record.id },\n }),\n [basePath, resource]\n );\n\n return (\n\n <MenuItem\n component={Link}\n to={location}\n onClick={handleClick}\n >\n <AddCircleOutlineIcon color=\"action\" className={classes.icon} fontSize=\"small\" />\n <Typography variant=\"inherit\">Создать</Typography>\n </MenuItem>\n );\n};\n\nexport default CreateMenuItem;\n\n\nconst useStyles = makeStyles({\n icon: {\n marginRight: 16\n }\n});\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M19,3L13,9L15,11L22,4V3M12,12.5A0.5,0.5 0 0,1 11.5,12A0.5,0.5 0 0,1 12,11.5A0.5,0.5 0 0,1 12.5,12A0.5,0.5 0 0,1 12,12.5M6,20A2,2 0 0,1 4,18C4,16.89 4.9,16 6,16A2,2 0 0,1 8,18C8,19.11 7.1,20 6,20M6,8A2,2 0 0,1 4,6C4,4.89 4.9,4 6,4A2,2 0 0,1 8,6C8,7.11 7.1,8 6,8M9.64,7.64C9.87,7.14 10,6.59 10,6A4,4 0 0,0 6,2A4,4 0 0,0 2,6A4,4 0 0,0 6,10C6.59,10 7.14,9.87 7.64,9.64L10,12L7.64,14.36C7.14,14.13 6.59,14 6,14A4,4 0 0,0 2,18A4,4 0 0,0 6,22A4,4 0 0,0 10,18C10,17.41 9.87,16.86 9.64,16.36L12,14L19,21H22V20L9.64,7.64Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React, { useCallback } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Cut from '../icons/Cut';\nimport Typography from '@material-ui/core/Typography';\nimport useTreeContext from './controllers/useTreeContext';\n\nconst CreateMenuItem = ({\n basePath,\n // children = <DeleteMenuItem />,\n children,\n className,\n record,\n resource,\n onClose\n}) => {\n const classes = useStyles();\n const { cutNode } = useTreeContext();\n\n const handleCut = useCallback((event) => {\n event.preventDefault()\n event.stopPropagation()\n cutNode(record.id)\n onClose();\n }, []);\n\n return (\n <MenuItem onClick={handleCut}>\n <Cut color=\"action\" className={classes.icon} fontSize=\"small\" />\n <Typography variant=\"inherit\">Вырезать</Typography>\n </MenuItem>\n );\n};\n\nexport default CreateMenuItem;\n\n\nconst useStyles = makeStyles({\n icon: {\n marginRight: 16\n }\n});\n","import React from 'react';\nimport SvgIcon from '@material-ui/core/SvgIcon';\n\nfunction Icon(props) {\n return (\n <SvgIcon {...props}>\n <path d=\"M19,20H5V4H7V7H17V4H19M12,2A1,1 0 0,1 13,3A1,1 0 0,1 12,4A1,1 0 0,1 11,3A1,1 0 0,1 12,2M19,2H14.82C14.4,0.84 13.3,0 12,0C10.7,0 9.6,0.84 9.18,2H5A2,2 0 0,0 3,4V20A2,2 0 0,0 5,22H19A2,2 0 0,0 21,20V4A2,2 0 0,0 19,2Z\" />\n </SvgIcon>\n );\n}\n\nexport default Icon;","import React, { useCallback } from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Paste from '../icons/Paste';\nimport Typography from '@material-ui/core/Typography';\nimport useTreeContext from './controllers/useTreeContext';\n\nconst CreateMenuItem = ({\n basePath,\n // children = <DeleteMenuItem />,\n children,\n className,\n record,\n resource,\n onClose\n}) => {\n const classes = useStyles();\n const { cuted, pasteNode } = useTreeContext();\n\n const handlePaste = useCallback((event) => {\n event.preventDefault()\n event.stopPropagation()\n pasteNode(record.id, cuted.nodeId)\n onClose();\n }, []);\n\n const isPasted = cuted && record.id !== cuted.nodeId\n\n return (\n\n <MenuItem disabled={!isPasted} onClick={handlePaste}>\n <Paste color=\"action\" className={classes.icon} fontSize=\"small\" />\n <Typography variant=\"inherit\">Вставить</Typography>\n </MenuItem>\n );\n};\n\nexport default CreateMenuItem;\n\n\nconst useStyles = makeStyles({\n icon: {\n marginRight: 16\n }\n});\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport DeleteIcon from '@material-ui/icons/Delete';\nimport Typography from '@material-ui/core/Typography';\nimport useTreeContext from './controllers/useTreeContext';\n\nconst CreateMenuItem = ({\n basePath,\n // children = <DeleteMenuItem />,\n children,\n className,\n record,\n resource,\n onClose\n}) => {\n const classes = useStyles();\n const { deleteNode } = useTreeContext();\n const isRoot = record.type === \"ROOT\"\n\n const handleClick = () => {\n deleteNode(record.id, isRoot)\n onClose();\n }\n\n return (\n\n <MenuItem onClick={handleClick}>\n <DeleteIcon color=\"action\" className={classes.icon} fontSize=\"small\" />\n <Typography variant=\"inherit\">Удалить</Typography>\n </MenuItem>\n );\n};\n\nexport default CreateMenuItem;\n\n\nconst useStyles = makeStyles({\n icon: {\n marginRight: 16\n }\n});\n","import React, {\n Children,\n cloneElement,\n FC,\n isValidElement,\n MouseEvent,\n useState,\n} from 'react';\n\nimport { IconButton, makeStyles, Menu } from '@material-ui/core';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport Divider from '@material-ui/core/Divider';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport { useSelector } from 'react-redux';\nimport classnames from 'classnames';\nimport CreateMenuItem from './CreateMenuItem';\nimport CutMenuItem from './CutMenuItem';\nimport PasteMenuItem from './PasteMenuItem';\nimport DeleteMenuItem from './DeleteMenuItem';\n\n\n\nconst TreeNodeLabelActionsButton = ({\n basePath,\n children,\n className,\n node,\n resource,\n}) => {\n const [anchorEl, setAnchorEl] = useState(null);\n const classes = useStyles();\n\n\n\n const handleClick = (event) => {\n event.stopPropagation();\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => setAnchorEl(null);\n\n return (\n <>\n <IconButton aria-label=\"node-actions\" size=\"small\" onClick={handleClick} className={classnames(classes.actionsButton, className)}>\n <MoreVertIcon fontSize=\"inherit\" />\n </IconButton>\n {/* <IconButton\n className={classnames(classes.menuButton, className)}\n \n >\n <MoreVertIcon />\n </IconButton> */}\n <Menu anchorEl={anchorEl} open={!!anchorEl} onClose={handleClose}>\n {Children.map(children, child =>\n isValidElement(child)\n ? cloneElement(child, {\n basePath,\n record: node,\n resource,\n })\n : null\n )}\n <CreateMenuItem onClose={handleClose} record={node} />\n <CutMenuItem onClose={handleClose} record={node} />\n <PasteMenuItem onClose={handleClose} record={node} />\n <Divider />\n <DeleteMenuItem onClose={handleClose} record={node} />\n\n </Menu>\n </>\n );\n};\n\nexport default TreeNodeLabelActionsButton;\n\n\nconst useStyles = makeStyles({\n actionsButton: {\n // position: 'absolute',\n // top: '50%',\n // right: '0',\n // transform: 'translate(110%, -50%)',\n },\n icon: {\n marginRight: 16\n }\n});\n","import { AUTHORIZATION_TOKEN_COOKIE, URI_BLOB_DOWNLOAD } from '../../appsettings';\nimport { getCookie } from '../../utils';\n\n\nconst isInternalPath = /^\\//;\n\nexport const getUrlWithToken = (path) => {\n //const token = getCookie(AUTHORIZATION_TOKEN_COOKIE)\n //return `${URI_BLOB_DOWNLOAD}${path}?${token}`;\n const isInternal = isInternalPath.test(path)\n return isInternal ? `${URI_BLOB_DOWNLOAD}${path}` : path;\n};\n\nexport const typeMap = {\n doc: ['application/vnd.openxmlformats-officedocument.wordprocessingml.document'],\n pdf: ['application/pdf'],\n text: ['text/plain'],\n xls: [\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"],\n zip: ['zip', 'application/octet-stream', 'application/zip', 'application/x-zip', 'application/x-zip-compressed'],\n audio: ['audio/mpeg'],\n video: ['video/mp4'],\n image: ['image/jpeg', 'image/png', 'image/svg+xml'],\n report: ['application/mrt', 'application/tmrt'],\n scada: ['application/scd', 'application/tscd'],\n}\n\nexport const FILE_ACCEPT = Object.keys(typeMap).reduce((acc, key) => [...acc, ...typeMap[key]], [])","import React from 'react';\nimport Card from '@material-ui/core/Card';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { useTranslate, SimpleShowLayout as RaSimpleShowLayout } from 'react-admin';\n\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(),\n '&:first-child': {\n marginTop: 0,\n },\n },\n content: {\n overflow: \"hidden\"\n }\n}), { name: \"SimpleShowLayout\" });\n\nconst SimpleShowLayout = ({\n children,\n classes: classesOverride,\n className,\n component: Component,\n label,\n ...props\n}) => {\n\n const classes = useStyles();\n const translate = useTranslate();\n return (\n <div className={`${classes.root} ${className}`}>\n {label && <Typography variant=\"subtitle2\" color=\"textSecondary\" gutterBottom noWrap>{translate(label, { _: label })}</Typography>}\n <Component className={classes.content}>\n <RaSimpleShowLayout {...props}>\n {children}\n </RaSimpleShowLayout>\n </Component>\n </div>\n );\n};\n\nSimpleShowLayout.defaultProps = {\n component: Card,\n};\n\n\n\nexport default SimpleShowLayout;","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\n\n\nconst useStyles = makeStyles(theme => ({\n root: {\n '& span': {\n opacity: 0,\n animation: \"$loader 1s infinite\",\n },\n '& span:nth-child(1)': {\n [\"-webkit-animation-delay\"]: \"0.0s\",\n animationDelay: \"0.0s\",\n },\n '& span:nth-child(2)': {\n [\"-webkit-animation-delay\"]: \"0.1s\",\n animationDelay: \"0.1s\",\n },\n '& span:nth-child(3)': {\n [\"-webkit-animation-delay\"]: \"0.2s\",\n animationDelay: \"0.2s\",\n },\n },\n \"@keyframes loader\": {\n \"0%\": { opacity: 0 },\n \"50%\": { opacity: 1 },\n \"100%\": { opacity: 0 },\n },\n\n}));\n\n\nconst Ellipsisloader = (props) => {\n const classes = useStyles();\n return <span className={classes.root}><span>.</span><span>.</span><span>.</span></span>;\n}\n\nexport default Ellipsisloader;","import graphqlWsClient from '../graphqlWsClient';\n\n\n\nfunction SubscribeGraphqlWs(args, observerOrNext, onError, onComplete) {\n\n //const id_subscribe = _idSubscribe++;\n\n const unsubscribe = graphqlWsClient.subscribe(\n {\n query: `subscription Tags($filter: TagSubscriptionFilter!) {\n data : tags(filter: $filter) {\n data {\n tag {\n resource\n tag\n }\n type\n timestamp\n timestampSrv\n utcOffset\n quality\n value\n }\n mutation\n }\n }`,\n variables: args,\n },\n {\n next: observerOrNext,\n error: (err) => {\n console.log(`silk DATA -> ${err.message}`);\n onError && onError(err);\n },\n complete: (arg) => {\n //console.log('silk DATA -> complete');\n onComplete && onComplete(arg);\n }\n },\n );\n\n //console.log(`subscribe ${id_subscribe}`)\n\n this.resubscribe = () => {\n }\n\n this.unsubscribe = () => unsubscribe();\n\n this.hasErrorDisconnect = false;\n\n}\n// end protocol graphql-ws\n\nconst subscribe = (args, observerOrNext, onError, onComplete) => {\n return new SubscribeGraphqlWs(args, observerOrNext, onError, onComplete);\n}\n\nexport default subscribe\n\n\n","import gql from 'graphql-tag'\nimport { graphqlErrorHandler } from '../../graphqlErrors';\nimport graphqlClient from '../graphqlClient';\nimport { PARAMETER_FRAGMENT } from './typeDefs';\nimport { sanitizeResource } from './utils';\n\n\n\nexport const GET_MANY_PARAMETERS = gql`\n query getManyParameters($filter: ParameterFilter, $sort: [ParameterSort!] $page: Int, $perPage: Int) {\n data: Parameter {\n data: getList(filter: $filter, sort: $sort, page: $page, perPage: $perPage) {\n items {\n ...ParameterFragment\n }\n }\n }\n }\n ${PARAMETER_FRAGMENT}\n`\n\nexport default (args) => {\n const { ids } = args;\n\n return graphqlClient.request(GET_MANY_PARAMETERS, {\n filter: {\n ids\n },\n perPage: ids.length\n }).then(response => {\n const items = response?.data?.data?.items\n return {\n data: items.map(sanitizeResource),\n }\n }).catch(graphqlErrorHandler);\n};\n","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport Typography from '@material-ui/core/Typography';\nimport { useRecordContext, useTranslate } from 'ra-core';\n\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\n\nconst QualityField = memo(props => {\n const { className, source, emptyText, ...rest } = props;\n const translate = useTranslate();\n const record = useRecordContext(props);\n const value = get(record, source);\n const displayValue = (value == null) ? emptyText : translate((value === 0) ? \"resources.AssetDatagrid.enums.quality.good\" : \"resources.AssetDatagrid.enums.quality.bad\");\n\n return (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={className}\n color={(value > 0) ? \"error\" : 'initial'}\n {...sanitizeFieldRestProps(rest)}\n >\n {displayValue}\n </Typography>\n );\n});\n\nQualityField.displayName = 'QualityField';\n\nQualityField.defaultProps = {\n addLabel: true,\n};\n\nexport default QualityField;\n","import React, { memo } from 'react';\nimport Typography from '@material-ui/core/Typography';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { useTranslate, TextField, DateField } from 'react-admin';\nimport EnumField from '../EnumField';\nimport QualityField from '../QualityField';\nimport sanitizeFieldRestProps from '../sanitizeFieldRestProps';\n\n\n\nconst DataFieldTooltip = ({ children, ...props }) => {\n const translate = useTranslate()\n const { record } = props\n\n if (!record) return children\n\n return (\n <Tooltip\n title={(\n <>\n <Typography variant=\"caption\" component=\"p\">{translate('resources.Tag.fields.id')}: <TextField record={record} source=\"id\" variant=\"caption\" /></Typography>\n <Typography variant=\"caption\" component=\"p\">{translate('resources.Tag.fields.value')}: <TextField record={record} source=\"value\" variant=\"caption\" /></Typography>\n <Typography variant=\"caption\" component=\"p\">{translate('resources.Tag.fields.writeValue')}: <TextField record={record} source=\"writeValue\" emptyText=\"-\" variant=\"caption\" /></Typography>\n <Typography variant=\"caption\" component=\"p\">{translate('resources.Tag.fields.timestamp')}: <DateField record={record} source=\"timestamp\" showTime variant=\"caption\" /></Typography>\n <Typography variant=\"caption\" component=\"p\">{translate('resources.Tag.fields.timestampSrv')}: <DateField record={record} source=\"timestampSrv\" showTime variant=\"caption\" /></Typography>\n <Typography variant=\"caption\" component=\"p\">{translate('resources.Tag.fields.utcOffset')}: {record.utcOffset} часа</Typography>\n <Typography variant=\"caption\" component=\"p\">{translate('resources.Tag.fields.quality')}: <QualityField record={record} source=\"quality\" variant=\"caption\" /></Typography>\n </>\n )}\n enterDelay={700}\n >\n {children}\n </Tooltip>\n )\n}\n\n\n\nexport default DataFieldTooltip;\n","import React from 'react';\nimport get from 'lodash/get';\nimport InputAdornment from '@material-ui/core/InputAdornment';\nimport { TextInput, NumberInput, NullableBooleanInput, DateTimeInput, SelectInput } from 'react-admin';\nimport BooleanInput from '../../lib/input/BooleanInput';\nimport MarkdownInput from '../../lib/input/MarkdownInput';\nimport { isNull } from '../../utils';\n\n\n\nexport const TagValueInput = (props) => {\n const { record } = props\n if (!record) return null\n const type = get(record, [\"parameter\", \"type\"])\n const display = get(record, [\"parameter\", \"display\"])\n const finalType = (display === \"ENUM\") ? display : type\n\n switch (finalType) {\n case \"ID\": return <TextInput {...props} />\n case \"STRING\": return <TextInput {...props} />\n case \"MARKDOWN\": return <MarkdownInput {...props} />\n case \"BOOLEAN\": return <BooleanInput {...props} />\n case \"INT\": return <NumberInput step={1} {...props} />\n case \"BIGINT\": return <NumberInput step={1} {...props} />\n case \"FLOAT\": return <NumberInput step={0.1} {...props} />\n case \"DATETIME\": return <DateTimeInput {...props} />\n case \"BYTE\": return <NumberInput step={1} {...props} />\n case \"JSON\": return <TextInput {...props} />\n case \"EMAIL\": return <TextInput {...props} />\n case \"PHONE\": return <TextInput {...props} />\n case \"URL\": return <TextInput {...props} />\n case \"IP\": return <TextInput {...props} />\n case \"PORT\": return <TextInput {...props} />\n case \"POINT\": return <TextInput {...props} />\n case \"CRON\": return <TextInput {...props} />\n case \"ENUM\": return <SelectInput {...props} choices={get(record, [\"parameter\", \"format\", \"valueMappings\", \"choices\"], [])} optionText=\"value\" optionValue=\"id\" />\n default: return <TextInput {...props} />\n }\n}\n\n\nconst EnhancedTagValueInput = (props) => {\n const { record, parameter } = props\n if (!record) return null\n if (parameter) record.parameter = parameter\n const unit = get(record, [\"parameter\", \"unit\"])\n const showUnit = (!isNull(unit))\n\n return (\n <TagValueInput\n {...props}\n fullWidth\n InputProps={{\n endAdornment: showUnit ? <InputAdornment position=\"end\">{unit.name}</InputAdornment> : null\n }}\n />\n )\n};\n\n\n\nexport default EnhancedTagValueInput;","import React from 'react';\nimport { useTranslate } from 'ra-core';\nimport NotificationsIcon from '@material-ui/icons/Notifications';\nimport NotificationsActiveIcon from '@material-ui/icons/NotificationsActive';\n\n\n\nconst EventActiveIcon = ({ className, ...props }) => {\n const { record } = props;\n const translate = useTranslate()\n if (!record) return null\n\n return (record.active\n ? <NotificationsActiveIcon titleAccess={translate('resources.Event.enums.active.true', { _: \"true\" })} className={className} color=\"error\" />\n : <NotificationsIcon titleAccess={translate('resources.Event.enums.active.false', { _: \"false\" })} className={className} color=\"disabled\" />\n )\n};\n\n\n\nexport default EventActiveIcon; ","import React from 'react';\nimport { useTranslate } from 'ra-core';\nimport ThumbUpIcon from '@material-ui/icons/ThumbUp';\nimport ThumbUpOffIcon from '../../lib/icons/ThumbUpOff';\n\n\nconst EventAckIcon = ({ className, ...props }) => {\n const { record } = props;\n const translate = useTranslate()\n if (!record) return null\n\n return (record.ackRequired\n ? record.ack\n ? <ThumbUpIcon titleAccess={translate('resources.Event.enums.ack.true', { _: \"true\" })} className={className} color=\"primary\" />\n : <ThumbUpIcon titleAccess={translate('resources.Event.enums.ack.false', { _: \"false\" })} className={className} color=\"disabled\" />\n : <ThumbUpOffIcon titleAccess={translate('resources.Event.enums.ack.none', { _: \"none\" })} className={className} color=\"disabled\" />\n )\n};\n\n\n\nexport default EventAckIcon; ","import React from 'react';\nimport { DateTime } from \"luxon\";\nimport ListItem from '@material-ui/core/ListItem';\nimport ListItemIcon from '@material-ui/core/ListItemIcon';\nimport ListItemText from '@material-ui/core/ListItemText';\nimport Typography from '@material-ui/core/Typography';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { Link } from 'react-router-dom';\nimport { TextField, ReferenceField, linkToRecord } from 'react-admin';\nimport EventSeverityIcon from './EventSeverityIcon';\nimport EventActiveIcon from './EventActiveIcon';\nimport EventAckIcon from './EventAckIcon';\n\n\n\nconst useStyles = makeStyles({\n listItemIcon: {\n marginRight: 16\n },\n listItemTextPrimary: {\n display: \"flex\",\n },\n listItemTextTertiary: {\n marginLeft: \"auto\",\n whiteSpace: \"nowrap\",\n paddingLeft: 8,\n }\n}, { name: 'EventListSimpleListItem' });\n\n\n\nconst EventListSimpleListItem = (props) => {\n const {\n record,\n basePath,\n ...rest\n } = props;\n const classes = useStyles();\n if (!record) return null\n\n return (\n <ListItem\n button\n component={Link}\n to={`${linkToRecord(basePath, record.id)}/show`}\n className={classes.link}\n {...rest}\n >\n <ListItemIcon classes={{ root: classes.listItemIcon }}>\n <EventSeverityIcon record={record} className={classes.icon} />\n <EventActiveIcon record={record} className={classes.icon} />\n <EventAckIcon record={record} className={classes.icon} />\n </ListItemIcon>\n <ListItemText\n disableTypography\n primary={\n <div className={classes.listItemTextPrimary}>\n <ReferenceField source=\"resource\" label=\"resources.Event.fields.asset\" reference=\"Asset\" link={false} >\n <TextField source=\"name\" variant=\"body2\" noWrap />\n </ReferenceField>\n <Typography variant=\"body2\" className={classes.listItemTextTertiary}>{DateTime.fromISO(record.timestampSrv).toLocaleString(DateTime.DATETIME_SHORT)}</Typography>\n </div>\n }\n secondary={<Typography variant=\"body2\" color='textSecondary'>{record.message.title}</Typography>}\n />\n </ListItem>\n )\n\n};\n\n\nexport default EventListSimpleListItem; ","import { createPortal } from 'react-dom';\n\n\nconst FilePreviewTitlePortal = ({ children }) => {\n const container =\n typeof document !== 'undefined'\n ? document.getElementById('file-preview-title')\n : null;\n\n if (!container) return null;\n\n return createPortal(children, container);\n};\n\nexport default FilePreviewTitlePortal;\n","import React, { useCallback } from 'react';\nimport Box from '@material-ui/core/Box';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport { Form } from 'react-final-form';\nimport TagValueInput from './TagValueInput'\nimport { useTranslate, required } from 'react-admin';\n\n\n\nconst validateRequired = [required()]\n\nconst defaultSubscription = {\n submitting: true,\n pristine: true,\n valid: true,\n invalid: true,\n};\n\nconst TagWriteDialog = (props) => {\n const { open, onClose, onWrite, record } = props\n const translate = useTranslate()\n const helperText = record.writeValue ? `${translate(\"resources.Tag.fields.writeValue\")}: ${record.writeValue}` : undefined\n const showWriteTagQuestion = record?.asset?.name && record?.parameter?.name\n\n const handleClick = useCallback(event => {\n event.stopPropagation();\n }, []);\n\n const handleClose = useCallback(() => {\n onClose();\n }, [onClose]);\n\n const handleWrite = useCallback((values) => {\n onWrite(values.value);\n }, [onWrite]);\n\n return (\n <Dialog\n open={open}\n onClose={handleClose}\n onClick={handleClick}\n fullWidth\n maxWidth=\"sm\"\n aria-labelledby=\"write-tag-dialog-title\"\n aria-describedby=\"write-tag-dialog-description\"\n >\n <DialogTitle id=\"write-tag-dialog-title\">{translate(\"ra.message.write_tag_title\")}</DialogTitle>\n <DialogContent>\n <DialogContentText >{translate(\"ra.message.write_tag_content\", { tag: record.id })}</DialogContentText>\n {showWriteTagQuestion && <DialogContentText >{translate(\"ra.message.write_tag_question\", { asset: record.asset.name, parameter: record.parameter.name })}</DialogContentText>}\n </DialogContent>\n <Form\n initialValues={{ value: record?.value }}\n onSubmit={handleWrite}\n subscription={defaultSubscription}\n keepDirtyOnReinitialize\n render={formProps => (\n <form>\n <Box padding=\"0 24px\">\n <TagValueInput resource=\"Tag\" record={record} source=\"value\" fullWidth helperText={helperText} validate={validateRequired} />\n </Box>\n <DialogActions>\n <Button onClick={handleClose}>\n {translate(\"ra.action.cancel\", { _: \"Cancel\" })}\n </Button>\n <Button onClick={formProps.handleSubmit} color=\"primary\">\n {translate(\"ra.action.write\", { _: \"Write\" })}\n </Button>\n </DialogActions>\n </form>\n )}\n />\n </Dialog>\n )\n}\n\nexport default TagWriteDialog","import { useEffect } from 'react';\nimport { useMap } from 'react-leaflet';\n\n\nconst MapConsumer = ({ center, zoom, bounds }) => {\n const map = useMap();\n\n useEffect(() => {\n if (bounds) {\n map.fitBounds(bounds)\n } else {\n map.setView(center, zoom);\n }\n }, [center, zoom, bounds])\n\n return null;\n}\n\n\n\nexport default MapConsumer;","import React from 'react';\nimport classnames from 'classnames';\n\n\nconst MapControl = (props) => {\n const {\n className,\n children,\n position = 'topleft',\n } = props\n\n return (\n <div className=\"leaflet-control-container\">\n <div className={classnames({\n [\"leaflet-top\"]: position.includes(\"top\"),\n [\"leaflet-bottom\"]: position.includes(\"bottom\"),\n [\"leaflet-left\"]: position.includes(\"left\"),\n [\"leaflet-right\"]: position.includes(\"right\"),\n })}>\n <div className={classnames(\"leaflet-control\", className)} >\n {children}\n </div>\n </div>\n </div>\n )\n}\n\nexport default MapControl;","import { useCallback } from 'react';\nimport { useMap } from 'react-leaflet';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ButtonGroup from '@material-ui/core/ButtonGroup';\nimport Button from '@material-ui/core/Button';\nimport LabelIcon from '@material-ui/icons/LabelOutlined';\nimport LabelOffIcon from '@material-ui/icons/LabelOffOutlined';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport AddIcon from '@material-ui/icons/Add';\nimport RemoveIcon from '@material-ui/icons/Remove';\nimport FullscreenIcon from '@material-ui/icons/Fullscreen';\nimport MapControl from './MapControl';\n\n\n\nconst useStyles = makeStyles(theme => ({\n container: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8\n },\n button: {\n minWidth: \"unset\",\n padding: 4,\n backgroundColor: \"white\"\n },\n}), { name: 'MapControlToolbar' });\n\nconst MapControlToolbar = (props) => {\n const { onClick, hideTitles, center, zoom, bounds } = props\n\n const map = useMap();\n\n const classes = useStyles();\n\n const handleZoomIn = useCallback((event) => {\n event.preventDefault()\n event.stopPropagation()\n map.zoomIn(map.options.zoomDelta * (event.shiftKey ? 3 : 1))\n }, [])\n\n const handleZoomOut = useCallback((event) => {\n event.preventDefault()\n event.stopPropagation()\n map.zoomOut(map.options.zoomDelta * (event.shiftKey ? 3 : 1))\n }, [])\n\n const handleReset = useCallback((event) => {\n event.preventDefault()\n event.stopPropagation()\n if (bounds) {\n map.fitBounds(bounds)\n } else {\n map.setView(center, zoom);\n }\n }, [center, zoom, bounds])\n\n return (\n\n <MapControl className={classes.container}>\n <ButtonGroup variant=\"contained\" orientation=\"vertical\" disableFocusRipple disableRipple>\n <Button onClick={handleZoomIn} className={classes.button} ><AddIcon /></Button>\n <Button onClick={handleZoomOut} className={classes.button} ><RemoveIcon /></Button>\n <Button onClick={handleReset} className={classes.button} ><FullscreenIcon /></Button>\n </ButtonGroup>\n <ButtonGroup variant=\"contained\" orientation=\"vertical\" disableFocusRipple disableRipple>\n <Tooltip placement=\"right\" title={hideTitles ? 'Скрыть названия объектов' : 'Показать названия объектов'}>\n <Button onClick={onClick} className={classes.button} >\n {hideTitles ? <LabelIcon /> : <LabelOffIcon />}\n </Button>\n </Tooltip>\n </ButtonGroup>\n </MapControl>\n )\n\n}\n\n\n\nexport default MapControlToolbar","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\n\n\nconst useStyles = makeStyles(theme => (\n {\n root: ({ color }) => ({\n color: theme.palette[color].main,\n }),\n text: ({ color }) => ({\n fill: theme.palette.getContrastText(theme.palette[color].main),\n }),\n }\n), { name: 'RaMapMarkerClusterIcon' });\n\nconst MapMarkerClusterIcon = (props) => {\n const { count } = props\n const classes = useStyles(props)\n\n return (\n <svg width=\"100%\" height=\"100%\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" className={classes.root}>\n <circle cx=\"20\" cy=\"20\" r=\"20\" fill=\"currentColor\" fillOpacity=\"0.56\" />\n <circle cx=\"20\" cy=\"20\" r=\"16\" fill=\"currentColor\" className={classes.marker} />\n <text x=\"50%\" y=\"52%\" dominantBaseline=\"middle\" textAnchor=\"middle\" className={classes.text}>\n {count}\n </text>\n </svg>\n )\n}\n\nMapMarkerClusterIcon.defaultProps = {\n color: \"primary\"\n}\n\nexport default MapMarkerClusterIcon","import React, { Children, useEffect, useRef, useCallback, cloneElement } from 'react';\nimport leaflet from 'leaflet';\nimport ReactDOMServer from 'react-dom/server';\nimport { useTheme, ThemeProvider } from '@material-ui/core/styles';\nimport MarkerClusterGroup from \"react-leaflet-cluster\";\nimport { useListContext } from 'react-admin';\nimport MapMarkerClusterIcon from './MapMarkerClusterIcon';\n\n\nconst mapClusterIcon = {};\n\nconst MapLayer = (props) => {\n const { children } = props\n const theme = useTheme();\n const themeType = theme.palette.type;\n\n const refMarkerClusterGroup = useRef();\n\n //нужен чтобы изменить цвет при изменении темы, иначе можно вынести как чистую функцию\n const iconCreateFunction = useCallback((cluster) => {\n \n \n const markers = cluster.getAllChildMarkers();\n const count = cluster.getChildCount();\n const isAlarm = markers.some(marker => {\n const record = marker.options.record\n return Boolean(record?.ALARM?.value)\n })\n \n \n //ЗДЕСЬ БЫЛА УТЕЧКА ЭЛЕМЕНТОВ\n /*\n const iconHTML = ReactDOMServer.renderToString(\n <ThemeProvider theme={theme}>\n <MapMarkerClusterIcon count={count} color={isAlarm ? \"error\" : \"primary\"} />\n </ThemeProvider>\n )\n\n return leaflet.divIcon({\n html: iconHTML,\n className: '',\n iconSize: leaflet.point(56, 56, true),\n });\n */\n\n\n //Устранение утечки\n //Результат: значительная оптимизация иконок кластеров\n //НЕ МЕНЯТЬ ПОКА НЕ БУДЕТ НАЙДЕНА ЗАМЕНА ПО ПРОИЗВОДИТЕЛЬНОСТИ\n const key = `${themeType}${count}${isAlarm}`;\n\n if(mapClusterIcon[key] === undefined) {\n \n console.log('MarkerCluster CREATE');\n\n const iconHTML = ReactDOMServer.renderToString(\n <ThemeProvider theme={theme}>\n <MapMarkerClusterIcon count={count} color={isAlarm ? \"error\" : \"marker\"} />\n </ThemeProvider>\n )\n \n mapClusterIcon[key] = leaflet.divIcon({\n html: iconHTML,\n className: '',\n iconSize: leaflet.point(56, 56, true),\n });\n }\n\n return mapClusterIcon[key];\n \n }, [themeType, theme]);\n\n //нужен чтобы изменить цвет при изменении темы (кошмар)\n useEffect(() => {\n if (refMarkerClusterGroup.current) {\n refMarkerClusterGroup.current.options.iconCreateFunction = iconCreateFunction\n refMarkerClusterGroup.current.refreshClusters();\n }\n\n }, [refMarkerClusterGroup, iconCreateFunction, theme]);\n\n\n return (\n <MarkerClusterGroup\n showCoverageOnHover={false}\n maxClusterRadius={30}\n iconCreateFunction={iconCreateFunction}\n ref={refMarkerClusterGroup}\n chunkedLoading\n >\n {children}\n </MarkerClusterGroup>\n )\n};\n\nexport default MapLayer;","import React, { Children, useMemo, cloneElement, useCallback, useState } from 'react';\nimport { URI_TILE_SERVICE } from '../../appsettings';\nimport \"./leaflet.css\";\n// import \"leaflet/dist/leaflet.css\";\n// import \"react-leaflet-markercluster/dist/styles.min.css\";\nimport { MapContainer, TileLayer } from 'react-leaflet';\nimport { useListContext } from 'react-admin';\nimport MapConsumer from './MapConsumer';\nimport MapControlToolbar from './MapControlToolbar';\nimport MapMarkerCluster from './MapMarkerCluster';\nimport { getCenterFromDataLocation, getBoundsFromDataLocation } from \"./utils\";\nimport useMemoCompare from '../hook/useMemoCompare';\n\n\nconst MapLayer = ({\n children,\n classes: classesOverride,\n ...props\n}) => {\n // const theme = useTheme()\n const { data, ids } = useListContext(props);\n const memorizedIds = useMemoCompare(ids, (prev, next) => prev && prev.toString() === next.toString())\n const center = useMemo(() => getCenterFromDataLocation(data, memorizedIds), [memorizedIds])\n const bounds = useMemo(() => getBoundsFromDataLocation(data, memorizedIds), [memorizedIds])\n const zoom = useMemo(() => 8, [])\n\n const [hideTitles, setHideTitles] = useState(false)\n\n const handleHideTitles = useCallback(() => {\n setHideTitles((prew) => !prew);\n }, [])\n\n\n return (\n <MapContainer zoom={zoom} center={center} attributionControl={false} zoomControl={false} style={{ width: \"100%\", height: \"100%\" }}>\n <MapConsumer zoom={zoom} center={center} bounds={bounds} />\n <MapControlToolbar zoom={zoom} center={center} bounds={bounds} onClick={handleHideTitles} hideTitles={hideTitles} />\n <TileLayer\n attribution={'© <a href=\"http://osm.org/copyright\">OpenStreetMap</a> contributors'}\n url={`${URI_TILE_SERVICE}/{z}/{x}/{y}.png`}\n />\n <MapMarkerCluster>\n {ids.map(id => (\n cloneElement(Children.only(children), {\n key: id,\n record: data[id],\n hideTitles\n })\n ))}\n </MapMarkerCluster>\n </MapContainer>\n )\n};\n\nexport default MapLayer;","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport keyBy from 'lodash/keyBy';\nimport { useRecordContext } from 'react-admin';\nimport { TagListDatagridMap } from '../Tag/TagListDatagrid';\n\n\n\nconst AssetMapTagsOnMapNestedField = memo(props => {\n const { source } = props;\n const record = useRecordContext(props);\n const tagsOnMap = get(record, source);\n const tagsOnMapFiltered = tagsOnMap.filter(item => ![\"GEO\", \"ALARM\"].includes(item.parameter.id));\n\n if (!tagsOnMap) return null\n\n const listContext = {\n data: keyBy(tagsOnMapFiltered, \"id\"),\n ids: tagsOnMapFiltered.map(({ id }) => id),\n basePath: '/Tag',\n resource: 'Tag',\n currentSort: { field: 'id', order: 'ASC' }\n };\n\n return (\n <TagListDatagridMap {...listContext} />\n );\n});\n\nexport default AssetMapTagsOnMapNestedField;\n","import React from 'react';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Card from '@material-ui/core/Card';\nimport CardHeader from '@material-ui/core/CardHeader';\nimport CardActions from '@material-ui/core/CardActions';\nimport { ShowButton } from 'react-admin';\nimport AssetMoreActionsButton from '../../components/Asset/AssetMoreActionsButton';\nimport AssetMapTagsOnMapNestedField from './AssetMapTagsOnMapNestedField';\n\n\nconst useStyles = makeStyles(theme => ({\n cardHeader: {\n paddingBottom: theme.spacing(),\n },\n cardActions: {\n justifyContent: \"space-between\"\n },\n}), { name: 'AssetMapCard' });\n\n\n\nconst AssetMapCard = (props) => {\n const { record, classes: classesOverride } = props\n const classes = useStyles({ classes: classesOverride });\n\n if (!record) return null\n\n return (\n <Card>\n <CardHeader\n title={record.name}\n titleTypographyProps={{ variant: \"subtitle2\" }}\n subheader={record.GEO.value}\n subheaderTypographyProps={{ variant: 'caption' }}\n classes={{ root: classes.cardHeader }}\n />\n <AssetMapTagsOnMapNestedField source=\"tagsOnMap\" />\n <CardActions classes={{ root: classes.cardActions }}>\n <ShowButton resource=\"Asset\" basePath=\"/Asset\" record={record} />\n <AssetMoreActionsButton showDashboardPlayButton={true} resource=\"Asset\" basePath=\"/Asset\" record={record} />\n </CardActions>\n </Card>)\n};\n\nexport default AssetMapCard;","import omit from 'lodash/omit';\n\n\nexport const buildTagFromId = (id) => {\n const [datasource, assetId, parameterId] = id.split(\".\")\n const tag = {\n resource: assetId,\n tag: parameterId,\n }\n return tag\n}\n\nexport const buildIdFromTag = (tag) => {\n const datasource = \"@databus\"\n const {\n resource: assetId,\n tag: parameterId,\n } = tag\n const id = [datasource, assetId, parameterId].join(\".\")\n return id\n}\n\nexport const format = (data) => {\n const { tag, ...other } = data\n const record = {\n id: buildIdFromTag(tag),\n datasource: \"@databus\",\n assetId: tag.resource,\n parameterId: tag.tag,\n ...other\n }\n return record\n}\n\n\nexport const sanitizeResource = data => {\n if (!data) return null\n const result = format(data)\n\n return result;\n};","import React, { cloneElement, Children, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport get from 'lodash/get';\nimport classnames from 'classnames';\nimport { makeStyles } from '@material-ui/core/styles';\nimport Button from '@material-ui/core/Button';\nimport Chip, { ChipProps } from '@material-ui/core/Chip';\nimport { useTranslate } from 'ra-core';\nimport { Link } from 'react-admin';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexWrap: 'wrap',\n marginTop: -8,\n marginBottom: -8,\n }\n}), { name: \"NestedArrayField\" });\n\n// useful to prevent click bubbling in a datagrid with rowClick\nconst stopPropagation = e => e.stopPropagation();\n\n\n\n\nconst handleClick = () => { };\n\nfunction NestedArrayField({\n addLabel,\n classes: classesOverride,\n className,\n record,\n source,\n resource,\n reference,\n basePath,\n children,\n link,\n take,\n ...rest\n}) {\n const classes = useStyles({ classes: classesOverride });\n const translate = useTranslate()\n const data = get(record, source, []);\n const more = take ? data.length - take : 0\n const show = more > 0\n const [showMore, setShowMore] = useState(more <= 0)\n const items = take ? showMore ? data : data.slice(0, take) : data\n\n if (!data) return null\n\n const handleToggleMore = () => {\n setShowMore(previous => !previous)\n };\n\n\n\n return (\n <div\n className={classnames(classes.root, className)}\n {...sanitizeFieldRestProps(rest)}\n >\n {items.map((item, index) => {\n const rootPath = basePath.replace(resource, reference);\n const referenceRecord = item;\n const resourceLinkPath = !link ? false : (typeof link === 'function') ? link(referenceRecord, reference, record, resource) : `${rootPath}/${encodeURIComponent(referenceRecord.id)}/${link}`;\n\n if (resourceLinkPath) {\n return (\n <Link\n key={index}\n className={classes.link}\n to={resourceLinkPath}\n onClick={stopPropagation}\n >\n {cloneElement(Children.only(children), {\n record: item,\n resource: reference,\n basePath: rootPath,\n parent: record,\n onClick: handleClick,\n })}\n </Link>\n );\n }\n\n return cloneElement(Children.only(children), {\n key: index,\n record: item,\n resource: reference,\n basePath: rootPath,\n parent: record,\n });\n })}\n {take && show && (<Chip\n label={showMore ? translate(\"ra.action.hide\") : translate(\"ra.action.more_count\", { count: more })}\n onClick={handleToggleMore}\n />)}\n </div>\n\n );\n}\n\nNestedArrayField.propTypes = {\n basePath: PropTypes.string,\n children: PropTypes.element.isRequired,\n classes: PropTypes.object,\n className: PropTypes.string,\n link: PropTypes.oneOfType([\n PropTypes.string,\n PropTypes.bool,\n PropTypes.func,\n ]).isRequired,\n resource: PropTypes.string,\n};\n\nNestedArrayField.defaultProps = {\n classes: {},\n link: 'show',\n addLabel: true,\n fullWidth: true,\n};\n\nexport default NestedArrayField;\n","import React, { memo } from 'react';\nimport get from 'lodash/get';\nimport sanitizeFieldRestProps from './sanitizeFieldRestProps';\nimport { useRecordContext } from 'react-admin';\nimport { Link as RouterLink } from 'react-router-dom';\nimport { Link } from '@material-ui/core';\n\n\nconst linkToRecord = (basePath, id, linkType = 'edit') => linkType === 'edit' ? `${basePath}/${encodeURIComponent(id)}` : `${basePath}/${encodeURIComponent(id)}/${linkType}`\n\n\nconst stopPropagation = e => e.stopPropagation();\n\nconst ResourceLinkField = memo(props => {\n const { className, emptyText, source, linkTo = 'show', basePath, ...rest } = props;\n const record = useRecordContext(props);\n const value = get(record, source);\n const link = linkToRecord(basePath, record?.id, linkTo)\n\n return (\n <span>\n <Link\n variant=\"body2\"\n className={className}\n component={RouterLink}\n to={link}\n onClick={stopPropagation}\n {...sanitizeFieldRestProps(rest)}\n >\n {value}\n </Link>\n </span>\n\n );\n});\n\nResourceLinkField.defaultProps = {\n addLabel: true,\n};\n\nResourceLinkField.displayName = 'ResourceLinkField';\n\n\nexport default ResourceLinkField;\n","import * as React from 'react';\nimport { forwardRef, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport { FieldTitle, useResourceContext } from 'ra-core';\n\nexport const FilterButtonMenuItem = forwardRef(\n (props, ref) => {\n const { filter, onShow, autoFocus } = props;\n const resource = useResourceContext(props);\n const handleShow = useCallback(() => {\n onShow({\n source: filter.props.source,\n defaultValue: filter.props.defaultValue,\n });\n }, [filter.props.defaultValue, filter.props.source, onShow]);\n\n return (\n <MenuItem\n className=\"new-filter-item\"\n data-key={filter.props.source}\n data-default-value={filter.props.defaultValue}\n key={filter.props.source}\n onClick={handleShow}\n autoFocus={autoFocus}\n ref={ref}\n >\n <FieldTitle\n label={filter.props.label}\n source={filter.props.source}\n resource={resource}\n />\n </MenuItem>\n );\n }\n);\n\nFilterButtonMenuItem.propTypes = {\n filter: PropTypes.element.isRequired,\n onShow: PropTypes.func.isRequired,\n resource: PropTypes.string,\n autoFocus: PropTypes.bool,\n};\n\n\n","import * as React from 'react';\nimport {\n useState,\n useCallback,\n useRef,\n} from 'react';\nimport PropTypes from 'prop-types';\nimport Menu from '@material-ui/core/Menu';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ContentFilter from '@material-ui/icons/FilterList';\nimport classnames from 'classnames';\nimport lodashGet from 'lodash/get';\nimport { useListContext, useResourceContext, Button } from 'react-admin';\nimport { FilterButtonMenuItem } from './FilterButtonMenuItem';\n\n\nconst useStyles = makeStyles(\n {\n root: { display: 'inline-block' },\n },\n { name: 'RaFilterButton' }\n);\n\nconst FilterButton = (props) => {\n const {\n filters,\n classes: classesOverride,\n className,\n ...rest\n } = props;\n\n const resource = useResourceContext(props);\n const { displayedFilters = {}, filterValues, showFilter } = useListContext(\n props\n );\n const [open, setOpen] = useState(false);\n const anchorEl = useRef();\n const classes = useStyles(props);\n\n if (filters === undefined) {\n throw new Error('FilterButton requires filters prop to be set');\n }\n\n const hiddenFilters = filters.filter(\n (filterElement) =>\n !filterElement.props.alwaysOn &&\n !displayedFilters[filterElement.props.source] &&\n typeof lodashGet(filterValues, filterElement.props.source) ===\n 'undefined'\n );\n\n const handleClickButton = useCallback(\n event => {\n // This prevents ghost click.\n event.preventDefault();\n setOpen(true);\n anchorEl.current = event.currentTarget;\n },\n [anchorEl, setOpen]\n );\n\n const handleRequestClose = useCallback(() => {\n setOpen(false);\n }, [setOpen]);\n\n const handleShow = useCallback(\n ({ source, defaultValue }) => {\n showFilter(source, defaultValue);\n setOpen(false);\n },\n [showFilter, setOpen]\n );\n\n if (hiddenFilters.length === 0) return null;\n return (\n <div\n className={classnames(classes.root, className)}\n {...sanitizeRestProps(rest)}\n >\n <Button\n className=\"add-filter\"\n label=\"ra.action.add_filter\"\n aria-haspopup=\"true\"\n onClick={handleClickButton}\n\n >\n <ContentFilter />\n </Button>\n <Menu\n id=\"menu-filter\"\n open={open}\n anchorEl={anchorEl.current}\n onClose={handleRequestClose}\n getContentAnchorEl={null}\n >\n {hiddenFilters.map((filterElement, index) => (\n <FilterButtonMenuItem\n key={filterElement.props.source}\n filter={filterElement}\n resource={resource}\n onShow={handleShow}\n autoFocus={index === 0}\n />\n ))}\n </Menu>\n </div>\n );\n};\n\nconst sanitizeRestProps = ({\n displayedFilters = null,\n filterValues = null,\n showFilter = null,\n ...rest\n}) => rest;\n\nFilterButton.propTypes = {\n resource: PropTypes.string,\n filters: PropTypes.arrayOf(PropTypes.node),\n displayedFilters: PropTypes.object,\n filterValues: PropTypes.object,\n showFilter: PropTypes.func,\n classes: PropTypes.object,\n className: PropTypes.string,\n};\n\nexport default FilterButton;\n","import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@material-ui/core/styles';\nimport { sanitizeListRestProps, useListContext } from 'ra-core';\n\nimport FilterForm from './FilterForm';\nimport FilterButton from './FilterButton';\n\nconst useStyles = makeStyles(\n {\n button: {},\n form: {},\n },\n { name: 'RaFilter' }\n);\n\n\n\n/**\n * Filter button/form combo\n *\n * @example\n *\n * const PostFilter = (props) => (\n * <Filter {...props}>\n * <TextInput label=\"Search\" source=\"q\" alwaysOn />\n * <TextInput label=\"Title\" source=\"title\" defaultValue=\"Hello, World!\" />\n * </Filter>\n * );\n *\n * export const PostList = (props) => (\n * <List {...props} filters={<PostFilter />}>\n * ...\n * </List>\n * );\n *\n */\nconst Filter = (props) => {\n const classes = useStyles(props);\n const {\n resource,\n showFilter,\n hideFilter,\n setFilters,\n displayedFilters,\n filterValues,\n } = useListContext(props);\n const renderButton = () => {\n const {\n classes: classesOverride,\n context,\n children,\n variant,\n ...rest\n } = props;\n\n return (\n <FilterButton\n className={classes.button}\n resource={resource}\n filters={React.Children.toArray(children)}\n showFilter={showFilter}\n displayedFilters={displayedFilters}\n filterValues={filterValues}\n {...sanitizeListRestProps(rest)}\n />\n );\n };\n\n const renderForm = () => {\n const { classes: classesOverride, context, children, ...rest } = props;\n\n return (\n <FilterForm\n className={classes.form}\n resource={resource}\n filters={React.Children.toArray(children)}\n hideFilter={hideFilter}\n displayedFilters={displayedFilters}\n initialValues={filterValues}\n setFilters={setFilters}\n {...sanitizeListRestProps(rest)}\n />\n );\n };\n\n return props.context === 'button' ? renderButton() : renderForm();\n};\n\nFilter.propTypes = {\n children: PropTypes.node,\n classes: PropTypes.object,\n context: PropTypes.oneOf(['form', 'button']),\n};\n\nexport default Filter;\n","export const getMessageFromCode = (code) => {\n switch (code) {\n case \"GRAPHQL_PARSE_FAILED\": return \"ra.error.GRAPHQL_PARSE_FAILED\";\n case \"GRAPHQL_VALIDATION_FAILED\": return \"ra.error.GRAPHQL_VALIDATION_FAILED\";\n case \"BAD_USER_INPUT\": return \"ra.error.BAD_USER_INPUT\";\n case \"OPERATION_RESOLUTION_FAILURE\": return \"ra.error.OPERATION_RESOLUTION_FAILURE\";\n case \"BAD_REQUEST\": return \"ra.error.BAD_REQUEST\";\n case \"INTERNAL_SERVER_ERROR\": return \"ra.error.INTERNAL_SERVER_ERROR\";\n default: return \"ra.notification.data_provider_error\"\n }\n}\n\n\nexport const graphqlErrorHandler = (error) => {\n const isGraphqlError = error?.response?.errors\n\n if (isGraphqlError) {\n const firstGraphqlErrorCode = error?.response?.errors[0]?.extensions?.code\n const messge = getMessageFromCode(firstGraphqlErrorCode)\n throw new Error(messge)\n } else {\n throw error\n }\n}\n\n\n\n","import { useContext, useMemo } from 'react';\nimport defaults from 'lodash/defaults';\nimport DashboardContext from './DashboardContext';\n\nconst useDashboardContext = (props) => {\n\n const context = useContext(DashboardContext);\n\n return useMemo(\n () =>\n defaults(\n {},\n props != null ? extractDashboardContextProps(props) : {},\n context\n ),\n [context, props]\n );\n};\n\nconst extractDashboardContextProps = ({\n basePath,\n record,\n defaultTitle,\n loaded,\n loading,\n resource,\n version,\n}) => ({\n basePath,\n record,\n defaultTitle,\n loaded,\n loading,\n resource,\n version,\n});\n\n\nexport default useDashboardContext","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport BreadcrumbItem from './BreadcrumbItem';\n\n\n\nconst DashboardBreadcrumbItem = (props) => {\n const translate = useTranslate();\n\n return (\n <BreadcrumbItem\n to=\"/\"\n >\n {translate(\"ra.page.dashboard\", { _: 'Dashboard' })}\n </BreadcrumbItem>)\n};\n\n\nexport default DashboardBreadcrumbItem","var map = {\n\t\"./Alert1.mp3\": [\n\t\t2034,\n\t\t254\n\t],\n\t\"./Alert2.mp3\": [\n\t\t2035,\n\t\t255\n\t],\n\t\"./Attention1.mp3\": [\n\t\t2036,\n\t\t256\n\t],\n\t\"./Attention2.mp3\": [\n\t\t2037,\n\t\t257\n\t],\n\t\"./Attention3.mp3\": [\n\t\t2038,\n\t\t258\n\t],\n\t\"./Attention4.mp3\": [\n\t\t2039,\n\t\t259\n\t],\n\t\"./Notification1.mp3\": [\n\t\t2040,\n\t\t260\n\t],\n\t\"./Notification2.m4a\": [\n\t\t2041,\n\t\t261\n\t],\n\t\"./Notification3.mp3\": [\n\t\t2042,\n\t\t262\n\t],\n\t\"./Notification4.mp3\": [\n\t\t2043,\n\t\t263\n\t],\n\t\"./multimedia-notify-31.mp3\": [\n\t\t2044,\n\t\t264\n\t],\n\t\"./multimedia-notify-34.mp3\": [\n\t\t2045,\n\t\t265\n\t],\n\t\"./multimedia-notify-37.mp3\": [\n\t\t2046,\n\t\t266\n\t],\n\t\"./multimedia-notify-50.mp3\": [\n\t\t2047,\n\t\t267\n\t],\n\t\"./multimedia-notify-65.mp3\": [\n\t\t2048,\n\t\t268\n\t],\n\t\"./multimedia-notify-66.mp3\": [\n\t\t2049,\n\t\t269\n\t],\n\t\"./multimedia-notify-9.mp3\": [\n\t\t2050,\n\t\t270\n\t],\n\t\"./silent.wav\": [\n\t\t980\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function webpackAsyncContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackAsyncContext.id = 979;\nmodule.exports = webpackAsyncContext;","import React from 'react';\nimport { useTranslate } from 'react-admin';\nimport BreadcrumbItem from './BreadcrumbItem';\n\n\nconst ListBreadcrumbItem = ({ basePath, resource }) => {\n const translate = useTranslate();\n\n return (\n <BreadcrumbItem to={basePath} >\n {translate(`resources.${resource}.name`, { _: resource, smart_count: 2 })}\n </BreadcrumbItem>)\n};\n\nexport default ListBreadcrumbItem\n","export default __webpack_public_path__ + \"static/media/silent.f5be6a2c.wav\";","import { GraphQLClient } from 'graphql-request'\nimport checkToken from '../../authProvider/authorizationProvider/checkToken';\nimport { URI_EVENTBUS_SERVICE } from '../../appsettings';\n\n\nclass GraphQLClientConstructor {\n constructor(enpoint) {\n\n const client = new GraphQLClient(enpoint);\n\n this.request = async (query, variables) => {\n const token = await checkToken();\n client.setHeader('authorization', token ? `Bearer ${token}` : \"\");\n\n return client.request(query, variables);\n };\n }\n}\n\nconst client = new GraphQLClientConstructor(URI_EVENTBUS_SERVICE)\n\nexport default client"],"sourceRoot":""}